Hatena::ブログ(Diary)

sub usuilog;

2014-09-05

YAPC::Asia 2014にレポータとして参加してきました

今年も去年に引き続きgihyo.jpのレポータとして参加させていただきました。下記公開されていますので是非ブクマなどしていただけると嬉しいです。

レポータについて

レポータ自体は今回で3回目ですが初めて英語セッションも担当できたのは個人的にはチャレンジでした。単に同時通訳++なんですが。。。でもいざやってみるととりあえずスライドだけ写真にとって残しておけばセッション中それほどメモとれなくてもなんとかなるのは発見でした。*1

いつも人手不足で声をかけていただく形で参加させていただいているのですが人気セッションでもプレス席確保してもらえて最前列で聞けるので興味あるかたは来年もあれば是非応募してみてください*2。私もPerlは仕事で使ってはいますが文章を書くということについては素人ですし、今回はプログラミング未経験の方も参加されてPerl入学式をレポートされたりもしているので日本語が読み書きできればだれでもできると思います。

開場について

今年も昨年に引き続き慶應義塾日吉キャンパスでしたが駅近で開場もコンパクトなので移動が楽なのは良かったです。ネットワークも快適でした。同時通訳++。コーヒーも両日頂きましたし、二日目は貸し切りHUB無料ビールもいただけて最高でした。ただ多目的ホールは立ち見が多くて少し気の毒だったかなと。。。

セッションについて

印象にのこったセッション

  • 「hrhm.info」 自分も仕事中のメインBGMはDream Theaterな程度にはメタルは好きなので。HM/HRの違い「ボーカルがモテるのがHRでギターがモテるのがHM」の説明が秀逸だった。発表者の方は懇親会にもいらっしゃったようなので最近のオススメとかお尋ねすればよかったけど非コミュ力を全力で発揮してしまい声かけらなかったのが心残り。。。
  • 「wri.pe」メモとるためにHerokuで月2万払っているというのは良い意味でcrazyだなぁと。でもアプリ開発以外のところで手こずると萎えるのは確かなのでそれ以外のところをお金で解決してると思えばありなのかも。むしろこれぐらい投資した方が本気になれてよいかもしれない。
  • Perl meets Real World 〜ハードウェアと恋に落ちるPerlの使い方〜 」 Raspberry PiArduinoは興味はあったものの違いもよくわからないので試せてなかったのが違いもわかって個人的にはすごくためになりました。とりあえずRaspberry Piクックブック( http://www.oreilly.co.jp/books/9784873116907/ )を買って帰った。
  • DBIx::Class - what is it and what is it good for?」なつかしい。最近はTeng使っているけどResultSetとかJoinとかたまに欲しくなるし*3自分が使ってた頃*4よりだいぶ進化している印象をうけたので久々につかってみたくなりました。
  • 「ウェッブエンジニアのためのローレベルプログラミングハードウェアつながりでこちらも興味深く聞かせていただいた。プレゼン上手い。ローレベルといっても自分はC言語ぐらいでいいやという感じだったけどカジュアルにARMアセンブラから入るのがすごい。それでWEBアプリ作ってみようとは思えないけどRasPi買って必要になったら臆せずアセンブラも試して見たいとは思う。
  • Dockerで遊んでみよっかー」名前はよく聞くけど全く触ったことはなかったので揮発性のあるコンテナであるという話など基礎がわかってよかった。とりあえずセッション聞きながらvagrantVirtualBoxまではインストールしたけれど、プロダクション環境でつかうにはまだ課題が多いそうなので個人的にはしばらくは遠目にウォッチという感じかな。
  • Google BigQuery で DWH 構築 」最近hiveで集計したりしているけど何がつらいってちょっとしたクエリでも数十秒とかかかって、せっかちな自分は待ってる間に他のことしてたら忘れてて戻ったら結果間違っててやりなおしで全然進んでないみたいなのがよくあるので数秒で返ってくるとなる捗りそうだし試してみたい。
  • Plack for Fun and Profit (But Mostly Profit)」MasonとかClass::DBIとかレガシーなシステムを作りなおすのではなく活かしながら複数のpsgiアプリを組み合わせて再構成した話。つくりなおしたいって思うことは多いけど、既存資産をいかしつつビジネス的に現実的な判断をしていく姿勢は見習わないといけない。
  • 「Mobile Application Development for Perl Mongers [ninjinkun x gfx] 」まさに納得しない機能は作りたくないタイプの人間なのでユーザテストに参加するというのは実践したい。あとReactive Programmingも調べてみたい。
  • 「キーノート」 受託開発が楽しいという言葉を聞いた時最初「え?」って思ったけど、技術面やビジネス面でもチャレンジングな案件を選べるようになれば楽しそうだということがわかった。ただそうなるには自分に突出した技術と世間で認められるだけの実績がないと難しいだろうからすぐに真似できる話ではない。が目指したい姿ではあるので、目標として意識しつつ日々精進していけたらと思いました。

さいごに

Perlやってるところって増えてない(というか減ってる?)と思うけどYAPC::Asiaの参加者は毎年増え続けていてすごいイベントだなぁと思う。運営の方々は本当にお疲れ様でした。

*1:トークとデモのスタイルだと多分辛かったと思われる

*2:とこんなブログに書いたところで誰が見ているというのか

*3プラグインはあるようですが

*4:あんまり覚えてないけど

トラックバック - http://d.hatena.ne.jp/usuihiro1978/20140905

2013-12-03

ng-mtg#4 AngularJS 勉強会

AngularJS 勉強会( http://atnd.org/event/E0021975/0 )に参加してきました。

AngularJS @naoya_ito さん

<input type="text" ng-model="name">
<p>Hello {{name}}</p>
  • 2つの特徴によって・・・
    • アプリ側はDOMの構造を知らない
    • jQueryやBackbone.jsだとアプリ側がDOM構造を知っている。 $('#button-id button').on('click', function() {});
  • HTMLからアプリを掴みにいく
  • HTML構造の変更に強い
  • アプリ側から見た目を動的に変えたいときは?
  • ふりかえり Angular JSでの開発の流れ
  • AngularJSの「制約」
  • Angular JSの機能(いくつか抜粋)
    • リモートのJSONデータもバインド(ngResouce)
    • フィルタ(ng-modelでバインとしたモデルで、ng-repeatをフィルタ)
    • Form Validation
    • Directives ng-bindやng-modelなどを自分で作れる
    • 再利用可能なモデルに(services) テスト書きやすくなる。DIによってテストがしやすい
  • Angular JS雑感
  • Angular JS得意・不得意
  • 不得意
    • グラフィック系
    • DOMいじる系
    • ゲーム
  • Angular JSの印象
    • 軽く動かすまでは簡単
    • 本格的に使おうとすると学習コストが高い
      • GruntとかYeomanなど周辺ツール知識も必要に
    • 強い制約と少ないコード量は複数人開発に向いていると思う
  • Angular JSもやもや例
    • HTMにng-modelとか書いてるからいいっていうけど、HTMLにonclick書くなっていってたような・・・
    • ドメインモデルを記述するベストプラクティスがよくわからん
  • まとめ

OnsenUIについて

実戦! AngularJS (@sakatamさん)

  • プロジェクトについて
  • システム構成&人員構成
  • なんでAngularJS?
    • GiltのメインプロダクトはBackbone.jsベース
    • Backbone.jsは柔軟性が高い反面、コード品質がばらつく
    • モジュールベースの開発を強制
      • DI/Module, APIのmock化が可能
    • Directiveによる画面の部品化
    • コントローラが薄くなる
  • 開発フロー
    • 1-3week 開発基盤づくり
    • 4-5week チーム展開
    • 6-12week 実開発
    • 基盤づくりに時間をかけた。ファイル構成やビルドプロセスを整備
    • DI/モジュールの概念理解
    • Directiveをハンズオンで理解
  • 開発イテレーション
  • 実戦投入Tips
    • 階層化されたモデル・データの状態管理
      • viewと直結しないモデルの状態をどう管理するか?
      • Google Groupsでも議論になっているが明確な答えなし
      • モデルを浅くして問題回避
    • $routeScope.$broadcast
      • 大域ジャンプ
      • 便利だけに中毒性ある。DIの意味なくなるので注意
    • 引数のMinify対応
    • リクエスト数の肥大化
    • SEO/Crawler対策
    • 杞憂だったこと
      • Two-way Bindingによるレスポンス悪化( 変数のwatchをループで監視しているが大丈夫だった )
      • 遅延ロードによるレイアウト崩れも問題なし
      • AngularJS本体のサイズ。1回ロードされれば問題なし
  • まとめ

目指せ脱初心者!あなたの知りたかったAngularJS ( @agektmr さん )

  • 最初は超簡単だけど、いろいろやり始めると難しい
  • ユーザの悩み
    • ドキュメントが英語
    • Angular Wayがあるっぽい
    • 日本語の情報が少ない( Angular Ninjaとか出てきたけど )
    • 相談相手がいない
    • ドキュメントがわかりにくい。リファレンスはそろっているがどっから追えばいいのかわからない
    • みんなで相談だ
  • angularでDOMを弄りたいときはどうしたらいいの?
    • ファイルを扱いたい
    • angular.element(this).scope().load(this) ? これはいけてない。
    • そこで登場するのがdirectiveだが、ハードル高い
  • directive
    • linkがあればDOMの操作はできる
    • angularJSはjqLiteを内蔵しているので、bindなど簡単な操作はjQueryを使わなくてもいい。
    • restrict: 'A'とすると、attribute, 'C'にするとクラス、'E'にするとタグになる
  • angularで既存ライブラリとか使うのってあんま向いてないんでしょ?
  • controller間で変数をまたぐには
    • directiveには親子関係があり、子から親の変数は見れる
    • CSS Flexbox Please ! 本家の人が修正してくれたコード ( http://demo.agektmr.com/flexbox/ )
    • valueというのを使う。必然性はなさそう。普通の変数で共有してもいいとおもう。
  • webコンポーネント

LT

AngularJS始めました ( @Tkashiro さん )
Coffee ScriptとAngularJS ( @ntaoo さん )
  • CoffeeScript
    • Less typing, Bad readability
    • Simple, 安定
    • Class based OOP
  • Angular with coffee script sample.
    • html5mode(true)にすると楽しい
PHPとAngular JS ( @yando さん )
DirecviteにngAnimateをつけよう
  • ロード angular.module("mainModule", ["ngAnimate"]);
  • ng-repeatなどとあわせてclassで指定
  • 自作のDirectiveにもアニメーション設定可能
AngularJSでmessagepackを使ったときに残念な思いをした話 ( @__yuunyan__ )
  • 通信まわりを後回しにしたらこれが地獄
  • JSON部分の結合がかなりつよくあとから分離できない
  • json parserでデータがパースされてしまいmesssagepackでデコードできない
  • http.jsとhttpBackend.jsに手を入れた
  • coreに手をいれたけどcontributeの仕方がわからない
トラックバック - http://d.hatena.ne.jp/usuihiro1978/20131203

2011-06-29

mixi Engineers' Seminar #2」参加メモ

http://atnd.org/events/16917

開発者のためのiPhoneAndroidアプリ移植のポイント

赤松洋介さま(サイドフィード株式会社

http://www.slideshare.net/yoski/iphoneandroid-8455306

質疑応答
  • Q. Objective-CからJavaに移植するときの正規表現って何パターンぐらい作ったのか?
  • A. 作ったのは20パターンぐらい。YES/NOをtrue/falseに変換とか、-(void)をvoidにするとか

Windows Phone 7 アプリケーション開発概要

高橋忍さま(日本マイクロソフト株式会社

mixi x Android深イイ話

藤崎友樹さま (株式会社ミクシィ

質疑応答

Q. プッシュサービスでプロフィール画像が変わった際にキャッシュをクリアするという使い方はありか?

A. 今のところは予定はない。

Q. 端末や、対応するバージョンの方針は?

A. 最初はOSのバージョンだけ。2.2以上で作っていたが、当時まだメインが2.1だったため、2.1もサポート対象とした。対応機種はそれほど意識していない。

Q. テストは何機種ぐらい実施したか?

A. マーケットで使われている機種がわかるので、上位機種をいくつか選んでテストしている

トラックバック - http://d.hatena.ne.jp/usuihiro1978/20110629

2011-02-25

「Titanium Mobileで始めるiPhone / Androidアプリ開発」のメモ

参加したメモです。

http://atnd.org/events/12449



質疑応答

  • Q. jQueryのUtilityなどを正式に対応する予定は?
  • A. eachとかmapとかはJS1.6の機能でできる。HTTPの通信部分をサポートする予定はない。同じような方法で通信できるモジュールがあったと思う
  • Q. Androidに実機転送できなくなる
  • A. USBを挿し直す。本体を再起動する。build/以下を消してから実行すると結構な確率で入る。あるいはAndroid側のUSBデバッグを一度解除してからつなぐといい。
  • Q. JSネイティブを交互に行き来してもパフォーマンスはでるのか?
  • A. 十分でる。実際にコミックビューアの部分では、ビューアの部分はネイティブ実装して、速度のいらない部分はJSでというのがよい

2010-11-29

全文検索エンジンgroongaを囲む夕べ #1」参加メモ

参加メモ:http://atnd.org/events/9234

全文検索エンジンgroongaについて

発表者: (有)未来検索ブラジル 末永 匡 a.k.a. グニャラくん

  • 全文検索エンジンSenna
    • 2チャンネル検索のために作った
  • Sennaの特徴(1)
  • groonga *1
  • Q&A
    • Q.分散構成について。Spiderとの連携はどういう構成になるか?
    • A.Spiderの後ろにいるInnoDBをgroongaストレージエンジンに置き換える感じ。
    • Q.インデックスの分散はどうするの?
    • A.分散はSpiderが担当。groongaは分散されていることを意識しない。Spiderがわけたようにインデックスができあがる
    • Q.groonga自体が堅牢でも、ライブラリOSの問題で異常終了したケースが想定される。その場合、InnoDBのような復旧システムはあるか?
    • A.更新中はいつ落ちても壊れるようになっているw ロックフリーな更新のために諦めている。元データは別で持っておくのが良いと思う。
    • Q.バインディングはどの程度?
    • A.作りたいけど手が回ってない。Rubyは結構できがいい。開発者募集中。HTTP経由ならどんな言語からでも簡単に使える
    • Q.データのオンラインバックアップ
    • A.更新してなければcpという素晴らしいコマンドで!w データのダンプ機能は持っている
    • Q.Sennaでファイルサイズが問題になっているがgroongaはどうか?
    • A.Sennaに比べて文書情報を保存する分ファイルサイズは大きくなる。転置インデックスのサイズはそれほど変わらない。

Ruby/groonga (rroonga/ActiveGroonga/Racknga) について

発表者: (株)クリアコード 須藤功平 (すとうこうへい)さん

 users.select do |record|
   record.name =~ "mo"
 end
 record.match(query) do |target|
   # titleにマッチしたらスコア100, descriptionにマッチしたらスコア10
   (target.title * 100) |
     (target.description * 10 ) |
     (target.content)
 end

MySQL + groonga (groongaストレージエンジン) について

発表者: 住商情報システム(株) 池田徹郎さん

  • groongaストレージエンジンとは
    • Tritonnの後継プロダクト。まだ置き換えるまでの品質まではいってない
    • MySQL 5.1/5.5 pluggable storage engine
  • Tritonnのコンセプト
  • groongaストレージエンジンのコンセプト
    • MySQL5.1+で全文検索を使えるようにする
    • MySQLユーザのためのもの + 柔軟性追加
    • 簡単に・シンプルに使えるもの
    • 安定して・安心して使えるもの
    • MyISAMから離脱、+さらに高速化
  • 公開場所 http://mroonga.github.com/ など
  • Tandem構成
    • MySQL with groonga storage engineで作ったファイルを、rroongaや、groonga HTTP Serverから読み書きできる
  • 仮想カラム
  • 従来からのORDER BY LIMIT問題
    • 100万件のレコードから先頭の100件だけ取りたい場合
    • 検索条件とorder byで指定しているものが複合インデックスでマッチすると非常に早く動くが、そうでない場合遅い
    • インデックスでマッチしない場合、ヒットした大量レコードを全部読み込む処理が走る。これが遅い。キャッシュが足りないと他のキャッシュが追い出される
    • データを読んだ上でscore値に用いてソート
    • Row IDをもとにしたランダムアクセス。場合によってはここがほとんどを占める場合もある。
  • ORDER BY LIMITの高速化
  • その他実装済の高速化機能
    • カラムの刈りこみ
    • COUNT高速化
  • 大規模分散検索対応
    • Spider Storage Engineとの連携で対応を予定している
  • Current Development Status

MroongaとSpiderのコンビネーション(予定)

発表者: 斯波健徳さん

  • スコアソートでの全文検索
    • Spider検索エンジンでは、最初の段階ではスコアの高いものがどこにあるかわからない
    • スコアでのソートの場合は、全パーティションに同じSQLが並列実行され、結果が返却される
    • 100件のデータが欲しい場合、例えば3箇所に分散している場合、それぞれから100件ずつとる
    • そこで得られた300件をSpider側でソートして返却する
  • レンジパーティション条件でのソート
    • order by c1なら、c1が小さいパーティションから検索して、結果が指定した件数に揃った段階で返す
  • パーティションの分割条件に沿った絞り込み
  • ここで質問。これらはまだ実装できていません。どれぐらいできて欲しいですか?
    • 会場挙手半数以上。頑張りますw
  • Q&A
    • Q.最初scoreをつくっていなくて、後からつけたい場合は?
    • A.現状alter tableをサポートしていないので、create table時に作るしかない。ゆくゆくは対応予定
    • Q.他のテーブルとJOINした場合など、取得件数がたりなくなるケースなどは?
    • A.まだjoinには対応できていない。エンジン側で高速化ロジックが使えるかどうかを判定して、データが取得できないリスクがある場合は高速化ロジックを使わないなどの対応が考えられる
    • Q.複数カラムにまたがる全文インデックスの対応予定は?
    • A.groonga自体のマルチカラムインデックス対応が行われていない。groonga本体が対応すればgroongaストレージエンジンも対応する予定。
    • Q.NULL値を入れたら0になった
    • A.groongaではサポートできていない。設計時にはNULL値いらない方針だった?MySQLから使うにはあったほうがいいので再検討
    • Q.groongaストレージエンジンで、ベクターカラムのサポート予定は?
    • A.MySQLで持っているデータとのマッピングが難しいので、今のところノーアイデア
    • Q.mroongaという名前は使わないの?
    • A.時々使っている。別名として使ってください。

PostgreSQL + groonga (textsearch_groonga) について

発表者: フォルシア(株) 板垣貴裕さん

発表者資料:http://www.slideshare.net/ItagakiTakahiro/textsearch-groonga-v01

  • textsearch_groonga
    • バージョン0.1をリリース
    • PostgreSQL 8.3, 8.4, 9.0, 9.1dev
    • groongaなるべく新しいもの
    • 基本的な検索機能をサポート
  • 組み込みのtextsearch
  • 追加インデックス・アクセス・メソッド
  • textsearch_ja 固有名詞やカタカナ連語の検索漏れが怖い
  • SennaPostgreSQLはもともとは相性がよかった -> PostgreSQL8.3の機能HOT更新と相性が悪いことが判明
    • Sennaは文書削除時にももとの文書が必要だったため
  • PostgreSQLの拡張インタフェース
  • 使い方
  • textsearch_senna vs textsearch_groonga
  • ToDoと今後
    • LIKE演算子のサポート
      • textsearch_sennaで意外に人気の機能。LIKE "%foo%"とかでつくってしまった遅いアプリを後から救う
      • groongaにも機能はあるみたい?
        • UNIGRAM, BIGRAM, TRIGRAMの使い分けは?
        • 英数字も文字単位でインデックスするには?
    • PostgreSQLとの相性の向上
    • 標準SQLで仕様化されたストレージ・エンジン
      • PostgreSQL9.1に向けて開発中
      • groonga DBを、表として参照可能
      • 行志向のPG表と、列志向のgroonga表の使い分け
    • 標準SQLに含まれているのは参照処理のみ
    • この辺ができたらproongaを勝ち取りたい *2
  • まとめ
    • 現在おためし版をリリース中
    • textsearch_sennaの良いところ/悪いところを踏まえて作った
    • SQL/MEDが大本命
  • Q&A
    • Q.groongaのデータモデルとRDBMSのデータモデルはあわないので、フル実装は難しい。groongaを最大限に活かすのか、RDBMSの機能を残すのかどちらの方針か?
    • A.Postgresはmulti valueに対応する配列型を持っている。型サポートに関してはPostgresはフルサポート出来る見込み。
    • A.groongaストレージエンジンはMySQLから使えるのがうれしい。MySQLで頑張れるところはできるだけ頑張る。MySQLで頑張れ無いところはTandem構成で頑張る。UDF(User-Defined Function)を使いまくる。UDF動作するタイミングがレコード1件毎なので、その範囲ではいろいろ頑張れる
    • A.なにしてもいいなら、何でもしますよw 要望があれば頑張ります
    • Q.ORDER BY LIMIT, JOINしたときの問題にたいして、groongaからの解決案は?
    • A.Sphinx - MySQLプロトコルを受け取って、自前で全文検索結果をかえすものがある。そういうことをやればいろいろ頑張れるかも。
    • A.MySQLの場合はJOINのときは各テーブルに分解されて呼ばれる。ただストレージエンジンではもとのSQLが取れるので、頑張ればできるかもしれない。今後の課題として少しずつ制限を解除していきたい
    • A.Postgresの対応は、地理情報検索でN近傍検索ができるようになる見込み。テキスト検索のスコアを、あるスコアからの距離として返すことで、LIMIT処理を一般化できるかも。
    • Q.性能限界は?
    • A.インデックスもデータ量も、容量が重要。1テーブルに30bitレコードしか保存できない

LT 三日で作るGroonga関数

[twitter:hotpepsi]さん

発表者資料:http://www.slideshare.net/firewood/groonga

  • filterで呼べる関数を作る
  • しょぼいサーバスループットを上げたい
  • 更新中も処理をとめたくない
  • 親子関係を持つテーブルから子のテーブルを探したい
  • 具体的には商品(1), 在庫・価格(n)
  • SQLの場合、JOINしてDISTINCT ? groongaの場合素直にできない
  • 親のIDでドリルダウンすれば2度引きで可能
  • 子テーブルで検索する
  • 重複するキーをfilterで捨てる
  • filterで使える関数を自作する
  • 自作の関数
    • 引数として親のキーを取る。
    • 格納済かどうかを返す
  • 雛形
    • testになるstrlen.cを参照して書く
    • とりあえずproc.cに登録
  • 正式なやり方
    • configure.ac
    • autoreconf
    • 大変なので省略
  • 手抜き
    • Makefile.in
    • .SUFFIXESに.ccを追加
    • CCLD g++に書き換える
  • groonga関数意外と簡単につくれます

*1Sennaとう名前はSEO的に良くなかった

*2:Pは敵が多いので早めに

トラックバック - http://d.hatena.ne.jp/usuihiro1978/20101129
Connection: close