@Validated と @Valid と @Inject と @Autowired

  • 投稿日:
  • by
  • カテゴリ:

org.springframework.validation.annotation.Validated は spring のライブラリで、 javax.validation.Valid は javax パッケージなので java のライブラリ。
というわけで spring で開発するなら @Validated を使っとけというのが作法とのこと。
同じく java には元から @Inject があるが spring では @Autowired を使う。とのこと。

例えば myapp ってプロジェクトの下に myapp-common と myapp-web と myapp-api とか作ったとして、 groupId を com.example.myapp ってしたとしても、それぞれのパッケージ名は com.example.myapp.[common|web|api] とか付けなくてよい、というか付けないのが java の作法だか流儀だか流行りだからしい。

というか付けると common の mapper とかを web の中で Autowired できなくなる。( MapperScan すればできるけどそもそもパッケージ名に余計なものをつけなければよいだけ)

gradle 2.11 以前でアレして provided したり、 gradle 2.12 以降で compileOnly してる場合、ちゃんとビルドも通ってコードも動くのに Intellij が lombok を cannot resolve symbol とか言うときがある。

compile にすると直るがそれはしたくない。

invalidate and restart してもビルドし直しても直らないし、lombok の補完は効かないし、コードは黒いし電球点くしで困るしキモい。

そんなときはここを押す。

intellij.png

親切な人に教えてもらった。

例えば以下のように書くとバックエンドにはアクセス元の ip が渡り、外部から /server-status は見られない。

builder {
    enable "ReverseProxy";
    enable "ServerStatus::Lite",
        path => '/server-status',
        allow => [ '127.0.0.1', '192.168.0.0/16' ],
        counter_file => '/tmp/counter_file',
        scoreboard => '/var/run/server';
    $app;
};

でも以下のように書くとバックエンドには(フロントの apache, nginx などからプロキシして)ローカル ip が渡り、 /server-status が丸見えになる。恥ずかしい。

builder {
    enable "ServerStatus::Lite",
        path => '/server-status',
        allow => [ '127.0.0.1', '192.168.0.0/16' ],
        counter_file => '/tmp/counter_file',
        scoreboard => '/var/run/server';
    enable "ReverseProxy";
    $app;
};

社員証には自分の顔、氏名、社名が載っている。それとは別に無地の入館カードがあって、これをピッてするとセキュリティゲートを通ってオフィスエリアに入ることができる。会社支給のケースにこの二枚を一緒に入れろと言う会社は多いと思う。

入館カード単体で紛失した場合、誰かに拾われてもどこで使えるカードなのかは分からない。しかし社員証とセットになっている状態で紛失した場合、それが分かる。下手したら社内に入ることもできる。

これら二枚をセットで持つべきではないと思う。

左側にファイルツリーとか右側に gradle のあれとか下にコンソールとか出てて、それの名前をツールウィンドウと言う。そしてこいつらはタブでまとまっている。引っ込めるとタブに収まってクリックするとまた出てくる。

たまにタブ自体が無くなる。そんなときは左下をクリックすると出てくる。

intellij_hidarisita.png

ウィンドウをリサイズしようとして間違って押したりすると戻し方が分からなくなる。各部位の名前も分からなくてググれなくなる。

ただこの事は初回起動時のチュートリアルに載っている。でも皆さっさと読まずに次へ次へ進むので誰も見ないし知らない。

そんなときは大抵 httpd 的なプロセスがローテートされたログファイルを掴み続けている。長いこと再起動されてないサーバとかプロセスとかの場合はより濃厚。

プロセスを再起動してもいいんだけどログファイルを開き直すコマンドがある場合もある。例えば nginx なら nginx -s reopen と。

これがうまくいかないときはそもそもこんな状況になってるのがおかしいので pid ファイルが実際に動いているプロセスidじゃない場合があるのでこれ編集して reload して reopen するとよい場合がある。

ということを見た。

my $ua = LWP::UserAgent->new;
my $url = "...";
my $res = $ua->get($url);

$res->is_success は1だし 200 OK なのに $res->content を表示してみると変なところで途切れたりしているときがある。そんなときは

warn Dumper $res->header('X-Died');

を見る。get が成功してても中で色々ある。RFC違反のヘッダ読み込んでるとか。

ページャNight <[1]> に行ってきた #pagernight

闇の勉強会、 ページャNight <[1]> に行ってきた。

迷いつつ会場のpixiv社に。入り口からして闇だった。見てこの闇っぷり。(画像の掲載については口頭で許可を頂きました)

pagernight.jpg

pixiv社内はとてもオープンな感じで働きやすそうで、スタッフの人も笑顔で対応してくれて、雰囲気がよかった。入場前、最初は案内とか一切無くて、入っていいのか分からず会社の入り口付近で不審者やってたら社員の方が「入ってていいですよ」と声をかけてくれた。助かりました。

あちこちに絵が飾ってあるのが印象的だった。特に入り口すぐのところに絵馬が並んでいたのだけど、これが凄かった。

内容

各発表の細かいレポートなど無い。

「ページングするとき何も考えず巨大なoffsetを使うとどこかで人が死ぬ」ということ(参考: http://d.hatena.ne.jp/hirafoo/20110409/1302283428 )など百も承知の人が集まって、その上で各サービスでの実装例や苦労した点などの話が多く、何らかのアプリケーションを作った人なら思わず「あぁ〜」と言ってしまう場面が多かった。

ページャのトークとか何話すんだろう、と想像も付かなかったけど、そこはそれ、かなり真面目で技術的な話だった。

なんだかんだページャ奥が深い。言語やアプリの種類を問わず必要になるものにも関わらず、ベストな実装例とかなくて、配置場所によって要件違うし細かい動作を変えなければいけなくて、大体の人が自前で作って苦労することになる。

とりあえずgoogleのページングみたいに 「全n件中n〜n件表示 1 2 3 4 5」みたいなのほんと無駄、無意味にそんな実装を要求すんなとかいうのは全員共通して思っていたらしい。

さて。この手の勉強会はどれもそうだけど、LTがヤバい。揃って笑いを取りにくる。何故だ。ここでもし笑いを狙わないLTとかやったとしたら微妙な空気になったんだろうなー応募しなくてよかったとか思ってた。

爆笑しすぎて後ろでまだ働いているpixivの皆さんスイマセンって思ってた。最後の pagerlang がヤバかったのは覚えてる。

懇親会

出ないつもりだったので終わったところで帰ろうとしたのだけど、知人を見かけたので軽く話して、「俺コミュ障なんで懇親会出ないで帰るわ」っつって帰ろうとしたら「懇親会に出ないで帰るとか何しに勉強会来たの」と言われたのでドタ参。

「つっても知り合い居ないし会話のネタも無いし何話したらいいか分からないんだよね」と言ったら「僕はそういうときは思いっきり食って帰るね」とのこと。なるほど。

web界隈はどこ行っても何故かそこに居る人ほとんど知り合い同士なことが多くて、いかんせん内輪ネタで話してる印象が強いのだよな。

結局思いっきりピザ食ってそこそこ話してきてとても楽しかった。知らない人とは言っても同じ勉強会にいたわけだし、話しかければ何かしら会話にはなるし、知らない人が集まってる輪にしれっと入っても、会話になることもあるしならんかったら次いけばいい。最初の方は一人でひたすらピザ食ってたけど。

あとその辺の人の会話に混ざってると裏話とかあかん話とか色々聞けて面白い。

すんげ楽しかった。主催者の moznion さんと catatsuy さんお疲れ様でした。会場提供のpixivさんありがとうございました。ページャNight 2ページ目の開催楽しみにしてます。

この前iphone5からnexus5に移って、当然ながらiphone5は通信ができなくて最早スペックの高いipod touchとなっていたのだけど、simロックを解除して格安MVNOで使ってみようと思って勢いで楽天ブロードバンドLTE申し込んだ。

まず R-SIM7+ を買う。通称下駄。サイズの合わないsimにはめるアダプタで、simロックを解除する役割もある。これにMVNOのsimを載せてiphoneに刺す。これ偽物が多くあり、製品のバージョンもいくつかあって中にはうまくいかないものもあるそうで、またこの下駄もレビューを見ると成功した人も失敗した人もいる。作業手順や環境によっても変わるらしい。少なくとも俺はこれで成功した。

iphoneはwifiをオン、LTEとモバイルデータ通信をオフにし、全てのタスクを終了させて下駄を履かせたsimを入れる。
その後キャリアを問われるので選択。俺のはauのなので JP AU を選んだ。
次にiphoneの4なのか5なのか問われるので選ぶ。以上で終わるので了解を押して閉じる。
この時点で左上に NTT DOCOMO と表示されればいい。
そもそもキャリアを問われる画面が出なかった場合は、設定>電話>SIM Appと進んで上記作業を。

ここではまった。再起動やLTEをオンにすると、simの設定が書き換えられることがあり、キャリアを探せなくなる。具体的には圏外になる。
こうなると厄介で、適当なドコモ端末かsimフリー端末にsimを刺してモバイルネットワークの設定からdocomoの電波を掴ませてやる必要がある。するとsimの情報が戻る。これ、どの端末でもできるわけではないらしいので注意。このとき JP DOCOMO と NTT DOCOMO が見つかるが、 NTT DOCOMO でうまくいった。
幸いにもNexus5はsimフリー機かつsim書き換えができる端末だったようなので、下駄についてきたマイクロsim用の下駄を使って回復させることができた。
尚、俺はこのsimでiphone5でLTEを使おうとしたらこうなったので、この組み合わせではLTEはやめておいたほうが無難っぽい。

あとはapn情報を構成ユーティリティを使って作成し、インストールしてモバイルデータ通信をオンにして終了。
iphone_docomo_network.jpg