ただふれたものについて書くブログ

あんまり正しくない話を適当に書くブログ

逆転裁判6 クリアした

逆転裁判6 [オンラインコード]

逆転裁判6 [オンラインコード]

逆転裁判6 クリアした。

悪いところ: テンポが悪い

シリーズの最初がゲームボーイアドバンスだったこともあって、1から3は必要最低限の演出しかなかった。そのおかげでテンポの良い駆け引きが繰り広げられていた。だけど、5のときもそうだったけれど、今作はキャラクターの演出が過剰になっていたり、アニメーションをしている間にメッセージを送れなかったりとテンポが悪いところが多い。何か証言が進むたびにメッセージが止まることがある。今回オプションで最初からメッセージ早送りが出来るようになったけれど、テンポ悪かったら早送りというと何か違う気がした。

良いところ: 5話の出来がいい

1から4話まではトリックも雑だし、キャラクターもあまり印象強くないのだけど、最終話である5話で一気に逆転裁判らしくなる。特に5話の前半の証言や後半の展開などプレイヤー側を驚かせる展開がキチンとあって面白かった。あと最近このシリーズ散らかりっぱなし終わることもあるけれど、キチンと話を畳んで、かつ、次作につなげる展開もそつなく入ってたりする。

なんだかんだで完成度高い

逆転裁判は、3の最終話などの熱い展開の連続みたいなところが評価されているポイントだと思うけれど、今回もその片鱗はあった。本当に面白いストーリーを作るなら、ものすごい時間をかけなきゃいけないと思うので、多少ストーリーがテンプレ化しても、大逆転裁判と交互に1年ごとに出して欲しい。

ウェブエンジニアがグダグダしゃべるPodcast:エンジニアミーティングをはじめてみた

10月からエンジニアが何人か集まって喋ってみるPodcastをはじめてみた。

Podcastといっても、とりあえず録音したものをsoundcloudに上げているだけ。

(betaでRSS feed化することも出来るみたいだけど、まだ設定していない)

しばらくは、エンジニアの飲みの席みたいな話を公開していきたいです。

同じ組織で複数の言語を採用するのは良いことなのか

2014年夏、カヤックは、Go言語を積極的に推進していきます。 |ニュース|面白法人カヤック

組織の中で新しいプログラミング言語を採用するというのは、 チャレンジという意味では良いことだけれども、 経験としては、ロクなことがなかったので、 難しい問題だなぁといつも思うわけです。

自分が最初に入った会社はPHPが主で、コアとなる部分はCやC++でした。 新卒でプログラミング経験なんてほとんどなかった身だったので、 ほとんどC,C++はやらなかったです。 ただしそのおかげで、数年はPHPだけを書き続けることができました。

よくPHPは残念な役になるけれど、 わからない人がわからないなりに書けるのはやっぱりすごくて、 最初にプログラミングなんてまともに書いたことない僕が 内定先にアルバイトで入った時にperlCGI作ってみたら ヘッダーのフォーマットについて 一週間くらい悩んだりしてたくらいだったけれど PHPを触ったときにあまりの簡単くらいに 衝撃を覚えたりしていました。

その後に社員数人くらいのベンチャーに転職して、 そこでアプリのAPIサーバーや管理画面をPHPを書いてたのです。 ただ会社が大きくなり、エンジニアが増えてくると PHPに対していくつかの壁ができてきて、 新しくウェブページを作ろうと、 新しい優秀なエンジニアがRailsで書き始めたりしました。 つまりは一種類のDBに複数フレームワークのwapができてしまいました。 これは今にしていればスゴい反省しています。運用が倍になるんですからね

プログラミング言語の分割は、人の分割を起こす

1プログラマーからすれば、 新しい言語や流行りの言語を仕事で使えるのは幸せなことです。 だけど組織レベルで考えると、どうしても分割してしまいます。

ところが上に書いてあるベンチャーを辞めて、 次の会社に入った時、周りはPHPのcode igniterをつかっていました。 ただ新規プロジェクトでそれで色々なチームの話を聞いて、 僕はRailsで行くと決めました。前職と逆の立場になったわけです。

その時は汎用的な技術よりもプロジェクトを まずは立ち上げることを目標にしたのですが、 その分運用のプレッシャーが来たわけです。 だけど、逆に優秀なメンバーが集まってくれたおかげで なんとかプロジェクトを立ち上げることが出来ました。 その後もいくつかのプロジェクトでRuby,Railsを使うようになったのは、 本当に良かったと思ってます。

次の人に繋げられるか

こんな経験をしているので、組織でプログラミング言語の選定で重要なのは、 次の人に繋げられるか な気がしています。厳しく言えば ずっと同じ一部の人が新しい言語を使い続けるのは組織は脆弱だと思います。

そんなわけで、最近Go言語で開発しはじめました。 今までの反省を活かしつつ、次に繋げられるように勉強しなきゃ。

express + AngularJS + mongooseで掲示板っぽいものを作ってみたときに調べたこと

express + AngularJS + mongooseで ざっくり簡単な掲示板っぽいものを作ってみました。

ページ: http://board-example-4100.herokuapp.com/

github: https://github.com/hiroosak/board-example

調べたこと

  • Node.js
    • passport
    • mongoose
    • express-jwt
    • swagger
    • mocha
  • Yoemon
    • yoemon
  • Grunt
    • grunt-contrib-compass
    • grunt-contrib-concat
    • grunt-contrib-uglify
    • grunt-contrib-htmlmin
    • grunt-contrib-jade
  • フロント
    • bower
    • mocha
    • AngularJS
      • angular-route
      • angular-animate
      • angular-resource
      • angular-bootstrap
    • Karma
      • unit, e2e
    • fontawesome
    • bootstrap 3.0
  • その他

ピックアップ

 hackathon-starter

https://github.com/sahat/hackathon-starter

スターターキット。ファイル構成の参考に。

passport

http://passportjs.org/

認証ミドルウェア。OAuth2, OAuth, ユーザー名/password の認証もサポート。

express-jwt

https://github.com/auth0/express-jwt JSON Web Token。APIの認証をトークンにするのに利用。

swagger

https://github.com/wordnik/swagger-node-express

API ドキュメント生成。その場で確認出来るので一度作ると便利。 ただし、パラメータ設定に癖があり、柔軟性がちょっと悪い。

Grunt

最近はsassやらcoffeescriptやらstylus やらJadeとかメタ言語が多いので、最終的にどういう風にファイルを変換させていくかを決める必要がある。

感想

Yeoman generator

express を使う場合、最初から自力でGruntfileを作ったりするのが大変なので Yeoman (http://yeoman.io/) で、最初に初期構成を作ったりする。

Railsなら rails new 。これさえあれば、すぐに開発に取りかかれる!と思いきや、 generator は自分で欲しいものを検索をして、取ってくる必要がある。

これがベストプラクティスがわかるところがないので、 何個か探してみるものの数が多すぎ、かつ、generator も 物によってファイル・フォルダ構成変え過ぎで どれがいいのかよくわからなくなってしまいました。

結局上のhackathon-starterが一番参考になりました。

Cookies VS Tokens

http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/

AngularJSは、非同期でモジュールの取得を行っていくけれど Cookieベースの場合、CSRFトークンの更新を非同期の場合に行わないようにしたり swaggerにAPI仕様を落としこむ時に面倒なことがある。 ネイティブアプリとブラウザで共通で使う場合とか考えると、 今後はTokenの選択肢が有力になっていきそう。

AngularJS の高めな学習コスト

AngularJS 学習コスト高いと周りで言われているけれど 実際に使ってみて、覚えなきゃいけなさそうなのが多い。 ただ公式のチュートリアルを一通り触ると出来たような気になれるのはとても良い。 karma を使ったテストの書き方がきちんと書かれているのもいい。

でも既存のライブラリを使う場合、慣習に倣うために一旦モジュールを作成する必要がある。

グローバル変数を使わないというメッセージだけど、 あの長すぎる引数のDIのおかげで心理的コストが高い気がする。 evilをふさぐ何かが欲しい。

それに既存のbootstrapなどを使いたい場合、その知識+AngularJS向けラッパーを覚えなきゃいけない。これもきついところがある。

APIドキュメント

swagger ( http://swagger.wordnik.com/ )つかってみた。

最近のWebサービスは、ブラウザでもスマホでも、タブレットでも、ネイティブアプリでも機能提供するのが当たり前なわけで、ビューとデータをきっちりわけないと作業量がかさむ。

その解決案としてAPIの完全分離で、ここのドキュメントは複数人でやっていると必須になってくる。

Facebooktwitterのかっこいい、かつリクエスト確認できるドキュメントをみて、こういうの簡単に作りたいってなって、候補となるのがswagger。

2ファイルJSONファイルを指定すれば、クライアントドキュメントを作成してくれる。 ただ、このJSONファイルがなかなか面倒で、 特定のパラメータの属性によって、別のオブジェクトの動きが変化する。 コード読んだほうが早かったりする。

まとめ

  • express のベストプラクティスが今イチわからない
  • AngularJSでWebサービス作るときは、認証の仕様を先に決めたほうが良さそう
  • swagger 大変。慣れるまでしんどい。なれてからもしんどい。ドキュメントを管理するの大変。
  • mongoose のことタイトルに書いて、なにも触れていないけれど、わかりやすい

会社のみんなとSnapchatをやってみた

f:id:taizo_onexone:20131231010220p:plain

最近次に流行るサービスと言われてるSnapchat ですが、そんなに面白いものかと、先月くらいから、職場のみんなを少しずつ誘いながら使い始めました。 だいたい今は1日20通くらいやりとりするようになりました。ただ今までのソーシャルサービスと明らかに違う仕組みで、アプリを使う前と使った後でまったく印象の変わるアプリだったので、自分なりに解釈した特徴を書き起こしてみます。

機能について

Snapchatを一言で伝えると「10秒以内に消える写真・動画共有サービス」。けしからん使い方を連想する人が多いと思いますが、健全に使ってみるとその内容はほんの一部なのがわかります。

機能についてはGigazineに書かれている通りなのですが、このアプリの特徴は、通常のSNSにはある機能が多々無いことです。

外部SNSからの友達リストインポートがない

使い出して最初につまづくのですが、Snapchatには、FacebookTwitterの友だちをインポートをして、すでにSnapchatを使っているユーザーを探す、という今のソーシャルアプリでは絶対にある機能がありません。ただ端末の電話帳からのインポートのみです。

LINEやその他メッセージサービスの初期を彷彿とさせますが、今でもインポート出来ないのは特徴の一つなのではないでしょうか。そのため、電話帳にない友だちを登録するには文字列のIDを教えてもらう必要があります。

クールなUI(かつ、初心者お断りなUI)

このアプリは「タイムライン」「カメラ」「友だち一覧」「友達登録」の四枚の画面で構成されていて、全てフリックで移動できます。しかも説明的な文章はほとんどなくアイコンで説明されています。極めつけにアカウントを作成後、公式アカウントから送られてきているアプリ説明の画像が一枚あるのですが、それも10秒で消えます。使ってから一週間後に新しい機能を発見することもよくあります。

なので、広める側としてはIDの登録と使い方を直接やり取りをしないとみんなが使ってくれないです。このハードルの高さは、本当にリアルな繋がりのある人としか繋がれない感があります。(度胸があれば別ですが)

カメラロールからの投稿ができない

もうひとつの大きな特徴として、カメラロールからの投稿ができません。投稿するには必ず身の回りの何かを撮って送らないといけません。それっぽい言い方をすれば、誰かとやり取りするには、自分の視界というプライベートを一部切り取らないといけないです。この特徴は体験として絶大でこの数日は帰省中の写真ばかりが送られてきています。過去の写真が乗らないことで、みんなの視座が共有されるというリアルなタイムラインが出来上がります。

どんな写真が送られてくるか

最初に想像するのは、けしからん画像や変顔を送り合うことだと思いますが、やってみると想像以上に違います。通常のソーシャルへの写真だと、大体が人撮ったり、風景撮ったり、食べ物撮ったりが多いと思いますが、このアプリの場合はログが残らないのもなのか、例えば、「飼っているペットの写真」「食べ物」「自撮り」「会社のトイレの個室にあるトイレットペーパー」などさらに個性が出る写真の送り合いになります。カメラロールからの投稿が出来ないので、送る側は搾り出さなければいけないからです。この現在の視界を送るという生々しさの面白さは複数人で使ってみないと、なかなかわからないです。

で、Snapchatは日本で流行るのか?

アプリの特徴上スクショを取れないのが残念ですが、Snapchatはみんなで使ってみないとわからないが、使ってみるとその手軽さにとりこになるアプリです。少なくとも自分の周りはしばらく使うような気がしています。

最近だとリクルートのseesawDeNA5sec snapsといった類似サービスを出しています。ただ、本家のSnapchatをやってみればやってみるほど、「やりたいのとはわかるけれど、なんで流行ったのかさっぱりわからん」アプリです。しかも削られた機能のおかげで、いわゆるイノベーションのジレンマ的なサービスになっています。この状況では、生半可なパクリでは大やけどをしかねないです。

最後にこれどうやってビジネスになるんだろうって話ですが、とある人がこれを見て「キャバ嬢が出勤前に常連にこれで動画を送ったらすごい」って言ってました。

来年日本で流行るかは正直言って未知数ですが、やってみて損はないです。これが日本で流行るならもう一回コミュニティサービスを考え直す必要が出てきます。

whyからはじめる君

それはさいきんのおはなし

とあるところに、Whyからはじめる君が住んでいました。
ある日、Whyからはじめるくんはこう気づきがありました。

『優れたリーダーはWhyからはじめるんだ』

それからWhyからはじめる君は、
ことあることにWhyからはじめることにしました。

「ねえねえこれやってよ」
『それどうしてやるんですか?』

「ちょっとここに行ってきてよ」
『どうしてそれをやるんですか?』

それからしばらくして
Whyからはじめる君にだれもお願いをしなくなりました。
Whyからはじめる君はこう考えました。

どうしてだろう?

どうしてだれもぼくにお願いをしないのだろう。
こんなにWhyから考えているのに。
偉大なリーダーはみんなWhyから考えているのに。

リーダーというのは、未来を切り開く孤独な作業者でもあります。もちろん決してただの思考法ではありません。そして、幸か不幸か誰にでも求められる能力ではありません。まずは、未来を切り開く覚悟があるかどうか、そこからだと思います。

サイモン シネック: 優れたリーダーはどうやって行動を促すか | Video on TED.com

働き方についての雑感

最近読んだ本だったり、自分の肌感覚に思う最近の仕事というものについて

競争について

  • 年を経つごとに競争は激化している
  • 競争自体は昔からあったが、今のほうが一度勝ち上がってから、次に繋がらずにまた落ちるまでの期間が短くなっている
  • 逆に一度沈んでも、再度浮かび上がる可能性もたかくなっている
  • 過去は競合しない戦略が重要視されたが、競争のリスクが下がった今は、あえて踏み込んだほうが良い場合が増えている
  • それどころか社内で競争させて成果を伸ばす方針のところも増えている
  • なので、行動できる人とできない人の差はますます広がっていく

「できる人」と「そうでない人」

  • 「できる人」と「そうでない人」で、仕事についての価値観がはっきり分かれる。
  • 考え方が違うことを前提にどう落とし所をつけるかがコミュニケーション能力
  • だけど、組織が「そうでない人」を蚊帳の外に置く場合も少なくない
  • ユニクロとか
  • 企業が求めるグローバルで活躍できる人材と実際に行われてることが矛盾している

幸福な働き方

  • 職場は人を死ぬまで面倒みてくれない
  • 自分を最後まで看取るのは家族である。
  • 何が起こるかわからない未来のために家族を大事にする
  • 僅かな力が沈まぬ限り、涙はいつも振り切れる