coffeeescriptで AU の Andoroid 端末の UA 一覧をスクレイピング、と、いかに各企業はHTML以外で情報を出すべきか

こんにちは。今日が誕生日の山城です。

AUAndroid 端末の User Agent一覧が公開されてますが、
悲しいことに html です。改行区切りとかのファイルで公開して欲しいものです。
http://www.au.kddi.com/developer/android/kishu/ua/

とりあえずぶっこぬくかー
と思って、coffeescript と戯れてみました。
ご利用は計画的に。まちがってもsleepなしで叩き続けるとかすると、図書館事件みたいになりますよ!


最初は慣れてなかったのと、nodeもわかんなかったので時間かかりましたが、
coffee いいですね。

しかし、jenkins環境やらvmにもcoffee環境いれないといけないので、少しだけ後悔してます。


さて、AUのUser Agentなど技術情報をHTMLで公開してる企業多いですね。
ほんとうにやめて欲しい

  • 計算機資源が無駄。あっちもこっちもHTMLのが大変ですよね
  • スクレイピングはいつか動かなくなる危険がある
  • つか、まずプログラムがだるい
  • 俺が困る

はい。今日、僕の誕生日です。大事なことなので2回いいました。
いつものアレ、貼っておきますね。
http://www.amazon.co.jp/registry/wishlist/19MEQJI59HE18

非エンジニアに無念コードがなぜダメなのかを説明するメタファー

非エンジニアに無念コードがなぜダメなのかを説明するメタファーを考えてみた。

目的は、無念コード・設計・環境・フローがあると、
いかに生産性が落ち、ビジネスがうまくいかないか、
プログラマーの心が病むかを、
なるべくエンジニアリングの用語を使わないで説明すること。

他にいいメタファーあったら、ブクマやらコメントやら、ブログ別書くなどして、
世界を幸せにしてもらいたい。

メタファー

エンジニアリングとは部屋の掃除と一緒である

ストーリー導入

あなたは、ある日、引越しを決意しシェアハウスに引越しました。

引越した先のシェアハウスのリビングは、
それはもう汚い。
散らかり放題、生ゴミ、壁の汚れ。

さぁ。どうしましょう。

さらに引っ越すという手段もありますが、
あなたは、リビングの掃除を試みるのでした。

ストーリー2

片付けをしていたある日、あなたは、
「リビングの中に、俺の鍵(機能や、コードなど)あるはずなんだけど知らない?」
と言われました。

「はぁ、整理整頓された綺麗な部屋だったらすぐ見つかるのにな」

ストーリー3

片付けをしていると、あるシェアメイトが物(機能)を買ってきました。
素敵な物でした。

ですが、そのシェアメイトがインテリアの都合など考えずに、
適当な場所に置きました。

「せっかくの物が台無しだし、もっとインテリア考えて欲しいなぁ…」

ストーリー4

ある日、シェアメイトがいいました。
「明日さー。友達呼びたいから(リリースしたい)、ちまちま片付けてないで、押入れに押し込めちゃおうぜ」

その話には、あなたも同意しました。

ですが、そのシェアメイトが押入れに生ゴミを入れようとしました。

「や、生ゴミだけは捨てようぜ。やばい」
「あと、押し込めただけで片づけは終わってない」

ストーリー5

シェアメイトが「爪切りがない爪切りがない」って騒いでます。
「あれ?あったはずだけど?」

シェアメイト「爪切りかってきたよー(コピペ)」

「共用すればいいのに…持ってるのに…」

ストーリー6

「そろそろ床が見えてきたな。ここはさらにルンバなどで自動化しよう」
「食洗機を買おう」
「全自動洗濯乾燥機を買おう」

よし!俺が何も家事をしなくても綺麗になるぞ!(自動テストは必要です。最初のコストはすぐペイできます)

ハッピーエンド

様々な障害がありましたが、あなたは掃除をやりとげ、
掃除嫌いなシェアメイトの意識も改革し、
「そもそも部屋を汚くしない、物を置くときは考える、友達呼ぶからって押入れに入れてごまかすのはいいけど生ゴミは捨てよう」
と植え付けました。

するとどうでしょう。

毎日の片付けは簡単で、
何かを探すのは楽で、
物を買ってきときも色々考えずに良い感じに置け、
いつでも友達を呼べ、
みんなが幸せになりました。

「引越ししなくて済んだ。良かった」

結論

部屋は片付けよう

check_xxx がなんでダメなのか

どうも check_xxx というメソッド名は辞めよう委員会のやましろです。
追記:hoge_managerとかfoo_processorとか辞めよう委員会の委員でもあります

ダメやダメや。と言ってたら「なんでダメなん?」って聞かれたので例を書いてみました(ミスってアノニマスで作っちゃった)

  • check_userという名前では、何をチェックするかがわかりません。
  • 一個のメソッドの中で複数のことをするのは辞めましょう
  • 予期しないexitとか…

実は、check_xxx がダメな理由って、最初のだけだけど、
check_xxx 書くやつ、絶対他のこともそのメソッドでやるんだよなー。

まぁ、「絶対的に正しいコード」なんてないですけど、
check_xxx はいただけないですね。
この例だったら、中で余計なことしてなくて、
check_user_x_stateぐらいだったらギリ許す。
でもそれだったら is_valid_x_stateでいいですよね。is_valid_user_about_x とか?
英語力ないんですけど、他の人も英語力ないと思うので、だいたい伝わればいいです。

2個目のコードは修正例です。

このように、メソッド分割などして、
修正する時間がない場合、メソッド名をcheck_userから
check_user_x_value_and_if_invalid_update_x_and_redirect
ぐらいのメソッド名にしたほうがいいとおもいます。

いや、どうだろうw長いw

怒るという無駄なこと

休日出勤してみたものの、脳が働いてないので脳を働かせるために文章を書く。

結論から書く。
怒るのは無駄だ。

もっと正確に書くと怒りを他人にぶつけるのは無駄だ。

昨今体罰の問題などが社会問題として大きくとりあげられているが、
単に怒るだけでも無駄なのに、
体罰なんてもっと無駄だ。

他人に対して怒りをぶつけることのメリット・デメリット

一般的に他人に対して「怒る、叱る、どやす、詰める」ことは、
教育だと思われている、と認識している。

だが、怒りをぶつけられて人は成長するのだろうか?
怒りをぶつけられた人は萎縮するだけではないだろうか?

僕の観測範囲だと、人に対して怒ってる人の多くは、
単に自分のストレス発散が目的になっているように思う。

「俺は客観的に怒ってるぞ」
ふーん。そうですか。周りからはそう見えませんよ。

余談だけど、以前いた会社で2〜3時間説教したあげく、
本人は怒ってないつもりのバカいたけど、
ほんとうにバカだと思う。

怒らないで、じゃあどうすんの

怒らないでどう教育するの?
「指摘」すればいいんじゃないですかね。

言葉遊びみたいだけど、例えば○○というよくない事象があったとして
「○○すんな」ってのと、
「なんで○○したの?」
って受ける印象が違うし、
後者のが本人から解決策出てくるよね。

自分が考えだした解決策のほうがうまくやれると思うよ。
その解決策がダメだと思ったら、提案してあげようね。

事象に対して怒る

怒っちゃダメなわけじゃない。
怒りという感情は、きっと人類を進めてきた。

俺も、今まさに「怒るという無駄」について怒ってるからブログ書いてるわけだし。

怒りという感情が湧いてきたときに、
それを人のせいにしたり、人にぶつけるのが良くない。

例えば、仕事がら、他人のコードの糞さに怒ったりする。

でもいつも「コードを憎んで人を憎まず」という言葉を思い出す。

コードが糞なのは、そういうシステムだからだ。
例えばコードレビューをちゃんとするシステムにしたり、
jenkinsというのを導入したり、
システムとして糞コードが生まれない仕組みを作るべきだ。

非エンジニアの人にもわかりやすく書くと、
例えば、「電車で降りる人またないで乗ろうとする奴」にイラッとすることあると思う。

でも、それもシステムが悪い。
満員電車が悪い。
椅子とかの数が足らないのが悪い。
乗り降りするためのドアのスペースが狭いのが悪い。

そこできっと改善が生まれる。
昔に比べて、通勤ラッシュ時のドアのスペースは
材料や運用の進歩のおかげで広くなっている。
(椅子の数減るけどな)

怒りはシステム、運用、状況に対してぶつけよう

怒ってもいい場面とは

怒っていい場面がもしかしたらあるのかもしれない。

例えば見せしめ。

僕は絶対にしないけど、見せしめのために怒るという場面はメリットがあるのかもしれない。
見せしめに怒られた奴のサイコパスはすげーーーー濁るけど。
いや、やっぱ周りも濁るし、メリットないんじゃね。

あとは…
あとあんのか?犬とかには怒ったほうがいい?
いや、ペットにも怒るんじゃなくて褒めたほうがいいんじゃね?

あと、ほんとうに伝家の宝刀的に使うといいんじゃないですかね。
普段温厚な人が怒るのが一番効きますよ。

それでも怒らなければいけないときは

それでも、同じ指摘何回もしても治んなかったり、
その他やんごとなき理由で怒るという姿勢を見せる必要があるときには
以下のように怒るといいと思うよ

  • 怒るときは絶対に1対1で。人の前で怒るのは自己顕示欲でしかないですよ?
  • 短く済ます。せいぜい5分でいいのでは。
  • 過去は蒸し返さない
  • 最後は笑顔で終わるようにする
  • 1回怒ったら、10回ぐらい褒める

結論

怒りを人にぶつけても誰も得しない
せいぜい、自分のストレスを他人に転嫁してるだけ

PHPStormというかIntellij IDEAにDatabase navigator入れたので設定とかまとめ

PHPStorm使いながらMySQL workbenchを使うのはメモリなど的に辛かったので、
プラグイン探して使い始めた。

Database navigatorというのを入れたので、設定などを忘れないようにまとめていく。

  • インストーロールすると、メニューにDatabase navigatorというのが追加される。
  • Database navigator の Setting - Connection で Connection 追加。
  • SQL Script Editor上で Auto commit を有効化するには、Setting - Connection の Details に Auto commit がある
  • SQL Script Editor上で、SQL をショートカットで起動したかったので設定
    • PHPStorm自体の Preference - keymap - Plug-ins - Database Navigator - Script Editor Execute Statement をダブルクリックなどして Add Keybord shortcut を選択して適当に設定する。俺はCmd+Control+Enterにした

SeleniumでiOSシュミレーターを動かし、iPhoneのブラウザ越しのテストをする

テストしてますか!

スマホブラウザ対応の結合テストとか辛いですね。そうですね。

というわけでSeleniumiOSシュミレーターのブラウザを動かして見ました。


Seleniumには、iPhone driverというのがあるのでそれを使いますです。
http://code.google.com/p/selenium/wiki/IPhoneDriver

以下の行動をとります。もちろんMac上です。

上記が全部うまくいくと、Xcodeのシュミレーター上で、RemoteDriverが起動します。
つまり、シュミレーター上の操作をプロキシしてくれるんですね。多分。

で、そのRemoteDriverにアクセスします。今回は同じマシンでXcode立ち上げたので、localhostですが、
Selenium用マシンを用意したらそこに皆さんのテストはアクセスですね。

ソースは、https://github.com/yamashiro/selenium-iWebDriver

です。

Scalaです。
Scalaです。
大事なことなので2回いいました。まぁ、皆さんの環境にはscala+sbt入ってるでしょうからみなまで言いませんが、
sbt testなどとすると、シュミレーター上でグーグルが開き「selenium」とtypeし検索ボタンが押されるはずです。

直前のコマンドをクリップボードにコピーする

マニュアルとか書いてると直前のコマンドコピーしたいときあるよね。
ってことでワンライナー書いてみた。

lastcmdにaliasした

追記:
他の人の回答足したっ…後者のほうがシンプル…