冒険の書 - Lv1プログラマの歩み

プログラミング経験ほぼゼロでプログラマーとして採用されてしまった若者のLv上げの歩みを記録するブログ

iPhone ライトニングケーブル

よく断線するライトニングケーブル。

今までは300~400円のものをまとめて5本とか買って、

その中で使えるものが1,2本あればラッキー的なやり方をしていました。

 

そうすると、充電状況が劣悪な気がして、バッテリーに負荷をかけちゃってるんじゃないかなーとか考えたり。実際どうなのか知らないですが・・・

 

ちょうど去年の今頃、適当にAmazonで買ってみて、コスパが良さそうなものを探してました。

 

1年使ってみて一番良かったのがコレですかね〜。

まず届いた時にちゃんと箱に入ってて少し感動。良い物感!みたいな。

1年経って、USB側の根元のゴムに若干のたるみがある程度で、断線するのはまだまだ先かな。

 

ふむ。1000円弱でちゃんとしてるの見つけれた。

5〜6本くらい開けて使ってみた感じ、1つ1つがハズレなしっぽいし。安心できます。

 

900円か。

 

てか、今レビュー見たけど、まぁ高いな笑

間違ってなかった。

前回の文末について

前回の「あれ、、、Worker threadでのデプロイにしてないかも・・・?」について。

DeploymentOptions options = new DeploymentOptions().setWorker(true);

これのおかげで大丈夫のはず。。。

今度ちゃんと調べてみよう。

vertx で EventBusによる通信をやってみた

event loop threadで動くWebsocketVerticleはできている。

それをどうMysqlVerticleに繋ぐかというところ。

 

マニュアルからイベントバスの構造理解をしないと話は進まない。

JavaでVert.x(イベントバスについて)

 

初心者なので、わからない単語を調べるところから。英語の勉強みたい。

・ピア・トゥー・ピア(P2P):サーバ同士が互いを対等として呼び合うことができるアーキテクチャ(対義:クラ-サーバ通信)

・ハンドラ:何らかの処理要求が発生したときに起動されるプログラムなど。本筋とは独立しており、普段は待機。

ラウンドロビンアルゴリズム:優先度を決めない決定方法(完全ランダムな抽出に近いのか?)

・トランジェント:一時的な

 

<イベントバスAPIの作り方>

1.呼ばれて動くハンドラの作成

2.アドレスにハンドラの登録 及び アドレスからハンドラの登録解除

4.アドレスへメッセージのsend(対1の送信) or publish(対多の送信)

 

□メッセージとハンドラとアドレスの関係について

メッセージをアドレスに対して送信→アドレスに登録されたハンドラがメッセージを受信して処理を実行

 

□アドレスについて

・どんな文字列でもよいが、わかりやすさのために「名前空間をピリオドで区切る」などのルールがあると良い。

・一つのアドレスに複数のハンドラを登録することができる(Verticleの種類は問わず)

(一つのハンドラは複数のアドレスに登録することもできる)

 

□送信・配信時

リプライハンドラの指定により、キャッチボールのような交互の通信が可能になる

 

□メッセージで送れる型

Boolean, Buffer, byte[], Byte, Character, Double, Float, Integer, JsonObject, JsonArray, Long, Short, String

オススメ:JSONデータ(Vert.xがサポートする言語全てで簡単に作成・パースできる)

 

ふむ。とりあえずイベントバスで通信してみよう。

MysqlVerticle.java

import io.vertx.core.eventbus.EventBus;

public class MysqlVerticle extends AbstractVerticle {public void start() {
// ハンドラの登録
EventBus eb = vertx.eventBus();
eb.send("test.address", "hello test world");
}
}

TestVerticle.java

import io.vertx.core.Handler;
import io.vertx.core.DeploymentOptions;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.eventbus.Message;
import io.vertx.core.AbstractVerticle;

public class WebSocketVerticle extends AbstractVerticle {public void start() {
// ハンドラの登録
EventBus eb = vertx.eventBus();
Handler<Message<String>> myHandler = new Handler<Message<String>>() {
public void handle(Message<String> message) {
System.out.println("I received a message " + message.body());
}
};
eb.consumer("test.address", myHandler);

// MysqlVerticleデプロイ
DeploymentOptions options = new DeploymentOptions().setWorker(true);
vertx.deployVerticle("MysqlVerticle", options, res -> {
if (res.succeeded()) {
System.out.println("Deploy SUCCESS.");
} else {
throw new RuntimeException(res.cause());
}
});
}

(追加した箇所の切り抜きだから、これだけを作っても動かないかもしれないけど)

 

2箇所困った点

・message.bodyじゃダメで、message.body()に修正が必要だった

・vertx.eventBus().registerHandler("hoge", handler);は

 vertx3だとvertx.eventBus().consumer("hoge", handler);に代わったぽい。

 

エラー: シンボルを見つけられません

        eb.registerHandler("test.address", myHandler);

           ^

これで引っかかり。メソッドが代わってることに気づき・consumerを見つけるまでに時間かかった。。。

 

とりあえず動いたー。

あれ、、、Worker threadでのデプロイにしてないかも・・・?

vertx で mysql を扱いたい、その準備1

 さて、vertxでmysql、どうやって導入するんだ。

 

とりあえず、mysql インストールから。

brew update  と。... command not found

そりゃそうか。新品だもの。

 

1. Homebrewの公式ページにある1行を実行

$/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

2. $brew update

$brew install mysql

 

できた。仮のDBをcreateして、insert、selectいずれも成功。

 

次はVert.xのイベントバスについて

 

プログラマーの基本は効率化!その2

プログラミング初心者の皆さん、
こんにちは、優雅な休日を過ごすユーシーです。

 

タイトルの通り、

前回に引き続き、効率化の第2弾。

 

今回は、linux&gitのalias機能について。

「git」の説明については、また後日。

 

例えば頻繁にとある操作をする方、

例:「$ git push origin master」

 

「$ git po master」とかに省略したくないですか。

で、あればgitconfig(ギットコンフィグ)に登録ですね。

 

手順

1. $ vim /etc/gitconfig

 

2. 適当なところに下記を追加

[alias]
po = push origin

3.保存するだけ。

 

 

早速、$ git po master を実行してみると、、、

push originできちゃう!

 

 

<解説>

・[alias]

┗この下に書いたXX = YYを、git XX = git YYとして実行しますよー。という呪文

・さらに下記のようなものを入れてます。便利なものはどんどん入れちゃいましょう。

st = status

co = checkout

br = branch

ba = branch --all

cm = commit -m

dw = diff --color-words

loga = log --graph --decorate --oneline

 

お決まりのコマンドがある方は登録しないと損しますよ〜

次回はgitの素晴らしさについて説くかな〜

最初は面倒に感じるかもですが、その威力は絶大!

 

では、引き続き頑張りましょ〜

プログラマーの基本は効率化!その1

プログラミング初心者の皆さん、
こんばんは、夜中からお部屋の掃除をしました、ユーシーです。

 

タイトルの通り、

プログラマーの基本は、如何にして効率化をしまくるか。

基本というか、醍醐味というか。

 

というわけで、便利ツールとか便利コマンドを見つけたらどんどん共有します。

 

 

今回は、linuxのalias機能について。

linux」の説明については割愛させていただきます。

 

例えば頻繁にとあるディレクトリ(フォルダ)に移動して作業する方、

例:「$ cd /data/user/hoge/」

 

「$ cdhoge」とか「$cdho」とかで移動したくないですか。

で、あればalias(エイリアス)の登場ですね。

 

手順

1. $ vim ~/.bash_profile

 

2. 適当なところに下記を追加

alias cdho='cd /data/user/hoge/'

 

3.保存して、 $ source ~/.bash_profile(またはターミナルなど開き直す)

 

 

早速、$ cdho を実行してみると、、、

移動できちゃう!

 

<解説>

・alias xxx='yyy'

┗xxxをyyyとして実行しますよー。という呪文

・.bash_profileに入れると、起動時に必ず読み込まれるので、楽チン。

 

お決まりのコマンドがある方は登録しないと損しますよ〜

次回はgitコマンドのalias登録方法も紹介します〜

.gitconfigに書くだけなんですが・・・。

 

では、引き続き頑張りましょ〜

gradle、インストールしてみた

プログラミング初心者の皆さん、
こんばんは、ユーシーです。

 

- Groovyで書く、便利なbuildツール

 

めちゃくちゃざっくり言ってみるとこんな感じでしょうか。

 

ま、とりあえずどこが便利かは使ってみて考察考察〜

 

手順

1.sdkmanをインストール

$ curl -s "https://get.sdkman.io" | bash

 

2.gradleをインストール

一旦、ターミナルを再起動

$ sdk install gradle

 

3.build.gradleの生成(初期化)

$ gradle init

 

4.build.gradleの編集

$ vim build.gradle

dependencies {
compile 'com.google.android.gms:play-services:7.8.0'
}

こんな感じでdependenciesの中に記述

 

5.IDEA用にインポートファイルを作る

$ ./gradlew idea

 

 

ふむ、今日はステップ4の途中で時間切れ。

続きはまた次回!

 

ではでは〜