第25回NDS(長岡技術者勉強会)に参加してきました。 どこかの誰かが、ブログを書くまでが勉強会だ、と言っていた気がするので簡単に書いてみます。
Togetterまとめ
負荷テストことはじめ(JMeterハック) (@nemuzuka)
JMeterはサーバにたくさんリクエストを送って、その時の挙動を見るためのJava製ツール サーバ-クライアント間の通信を読み取ってそのまま再現したり、CSVからデータを吸いだしてリクエストに埋め込んだり、レスポンスからデータを吸い出したり、JavaScriptで挙動をカスタマイズできたりするらしい slideshare「負荷テストことはじめ」 ust「負荷テストことはじめ」 雪のシミュレーション(一部ハッキングが入ります) (@piras4)
気象庁が提供しているアメダスのデータなどから、雪の状態(温度とか密度)を計算するお話 熱伝導方程式とか微分とか忘れました ust「雪のシミュレーション」 Remember the MilkでGTD(RTMハック) (@masaru_b_cl) LT
Remember the Milk は ToDo 管理のための Web サービス Webフォームからはもちろん、メールやTwitterからもToDoを作成できる slideshare「GTD on RTM」 ust「Remember the MilkでGTD」 JavaerがiPhoneアプリ開発入門してミタ(Objective-Cハック) (@makomegane)
Keynote はアイコンを作るためのツール App Store のアプリのスクリーンショットは、自分の子供の可愛さを伝える場 Java と Objective-C の比較(メモリ管理の仕方とか) [ust「JavaerがiPhoneアプリ開発入門してミタ」]http://www.ustream.tv/recorded/21483875 「やったーGAでDTMできたよー\(^o^)/」 (@neko_gata_s)
遺伝的アルゴリズムで簡単な作曲をやってみようというお話 メロディを機械的にどう評価するかが難しい 評価関数が解析的に簡単に解けてしまって面白くないな・・・今後の検討課題ですね スライド ust「やったーGAでDTMできたよー\(^o^)/」 ブログ CSharperがWindows Phoneアプリ開発入門してミタ(C#ハック) (@ailight)
C# はモテ言語 LT1 花火アプリを作りたい
作る前からパクられた LT2 HTMLからePub(@civic)
数あるHTMLで書かれたWebページをePubにして、iPadとかで見やすくしよう!というライブラリ 残念ながら、相手方にDOS攻撃を仕掛ける危険なプログラムのため、公開はできないとのこと
この前いじったChrome17対応版AjaxIMEは 実際の変換を行うのに本家AjaxIMEが提供している変換サーバをそのまま使用しています。 そのため、すべての入力内容は本家サーバに送信されてしまいます。 どんな入力をしたのか作者さんにバレバレです。 この送信内容、暗号化すらされていないので、作者以外の人に見られる可能性もあります。 自分の書いた文章が勝手にインターネットに送信されているっていうのはあんまり嬉しくないですね。 ローカルのみで完結するのが理想です。
本家サーバはどうやらmecab-skkservと同じエンジンを使っているようです。 このバックエンドで動いているのは実はMeCab。 ということは、MeCabと互換性のあるigo-javascriptでも同じことができるはず・・・! これはならブラウザ上ですべてが完結する!
はい、そういうことで作ってみました。
IgoIME 使い方は本家と一緒です。Alt-o (Ctrl-9)でモード切替。 ローマ字で日本語を入力することができます。
日本語入力をするためには変換候補をいくつか出力する必要がありますが、 本来Igoにはその機能はありません。 そのため、複数候補を出す部分だけ独自実装してあります。 しかし、まだなんか変換候補が怪しいですね・・・。 長い文章を入力したのに一文字しか結果が帰ってこないことがあります。 なんでだろう・・・・
まだまだ改良が必要なようです。
Chrome17対応版AjaxIME Ajaxを使ってIMEを実現したAjaxIMEがFireFoxでは動くのに最新版のChromeで動かない。 動くように少しいじってみた。
Chrome17対応版AjaxIME 原因 Chromeで動かなかった原因はここ。
if(typeof getComputedStyle == 'undefined') { function getComputedStyle() { //中身は省略 } } FireFoxやChromeには getComputedStyle という関数が定義されているけど、 IEには定義されていない。 if文で有無を判定して、無い場合は動作をエミュレートする関数を定義している。
実行の様子をデバッガで追って見ると、Chromeではエミュレートする必要が無いのになぜか自前で定義した関数が呼び出されていた。 どうやら、Chromeでは 自作 getComputedStyle 関数が if文の中にあったとしてもコード読み込み時に作成されてしまうみたい。 FireFox だと if文の中が実行されない場合には作成されない。
結果だけ書くと、次のように書きなおしたら動いた。
if(typeof getComputedStyle == 'undefined') { getComputedStyle = function() { //中身は省略 } } あと Chrome だと、Input要素にフォーカスがあたった時に余計な装飾がついてしまうので、CSS上書きして抑制。 IE8でTextRangeが使えない問題は「IE8でのTextRange.moveToPoint()」を参考にして解決。 IE7のエミュレートモードにしているだけで、根本的な解決にはなってないけど、まあIEだしいいでしょ。
どっちが正しいの? とりあえず問題は解決したんだけど、FireFoxとChromeで動作が違うけど、どちらの動作が正しいの? 気になったので調べてみた。
「mixi Engineers’ Blog » 詳細 ECMA-262-3 第5章 関数」に関数の定義法についてわかりやすい解説が載っていた。 結論からいうと、一番初めの書き方は「誤り」で実際の動作は実装依存、つまり FireFox の動作も Chrome の動作も正しいとのこと。
関数定義と関数式 関数の定義法は大きく分けて、次のような関数定義と関数式に分かれている。 関数式は更に名前なしと名前付きがある。
//関数定義 function foo() { } //名前なしの関数式 var foo = function() { }; //名前付きの関数式 var foo = function _foo() { }; 普通の関数定義と無名関数があるのは知っててけど、単なるシュガーシンタックスみたいなものかと思った。 mixiのブログによると全くの別物。 関数定義と関数式の大きな違いは、実行時に呼び出し可能になっているかどうか。 関数定義は実行時に呼び出し可能になっているから、定義と呼び出しの順番は関係ない。
TLにGitHubでブログのホスティングしている人がいたので、 「githubとjekyllとoctopressで作る簡単でモダンなブログ」 を参考に作ってみましたよ。
RVM のインストール 自分の環境には Ruby 1.9.2.2 が入っているんだけど、Ocropressでは Ruby 1.9.2 が必要らしい。 そのままでもいけるかと思ったけど、怒られた。 rake コマンドを全部 bundle exec rake に置き換えると一応実行はできるけど、なんだか警告がでる。
こういう時は複数のバージョンの Ruby を切り替えて管理できる、 rvm というのを使うといいらしい。 公式サイトの「Installing RVM」通りにコマンドを打てばOK。
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile source ~/.bash_profile rvm install 1.9.2 && rvm use 1.9.2 rvm rubygems latest Octopress のインストール あとはgitでクローンして、インストールコマンドを叩くだけ。
git clone git://github.com/imathis/octopress.git octopress cd octopress gem install bundler bundle install rake install rake setup_github_pages 最後のコマンドは GitHub Pages に公開するためのもの。公開用のレポジトリを聞いてくるので予め登録しておこう。