2011年11月30日水曜日

Re: CoffeeScript if for of



こちらの記事を見て、4番目、5番目の案をあげてみました。


CoffeeScript if for of - すぱぶらのはてブロ



元記事はif elseとfor ofの組み合わせのようなので、existential operatorを使うのはコンテキストにあってない気もするけど、気にしないことにします。


僕が書くなら2行になるけど#5か、#1か#2が好きかも。





2011年11月29日火曜日

ギークハウス沖縄調べてみてちょっと気になる物件



ずらずらとあげて行きます。結構多い。


1.那覇市識名、5DK、4.5万円、一戸建て


理由



  • 安い

  • ぼろい

  • 少し歩けばバス停があり新都心・バスターミナル方面、また開南方面にもバスで行ける

  • 県立図書館や沖縄大学や看護大に近く図書館いっぱい利用出来そう


2.那覇市久米2、3SLDK、9万円、一戸建て


理由



  • 広い(LDK17)、他の部屋も広いしなんか螺旋階段付いとる。

  • バストイレが2つ付いてる

  • 駐車場が1台つく

  • ピアノ可ということで多少騒がしくても大丈夫そう


3.那覇市泉崎、3LDK、8.5万円


理由



  • 敷金・礼金無しなので初期費用が抑えられる

  • 駅まで徒歩2分、バスターミナルにも近く交通の便は最高

  • バストイレ別


4.那覇市久茂地、3LDK、6.9万円


理由



  • 美栄橋駅まで徒歩2分

  • 敷金・礼金なし

  • 6万9000円と比較的安いので3人でわると一人当たり2万3000円


5.那覇市前島、4LDK、10万円


理由



  • リビングが25畳ってめっちゃ広くないですか!

  • 4LDKだから一人増えても対応可能


疲れたのでざっとリンク


那覇市泉崎、3LDK、6万円、敷金なし、県庁近く


那覇市安里、3DK、6.3万円、安里駅まで徒歩1分


那覇市松尾、3LDK、6.3万円、敷金なし、リビング広い、市場近い


眺めが良さそう


雑感


やっぱり宜野湾の5LDK、6万のお部屋が魅力的に見える。


それぞれの個室に鍵も付いてるし、共有スペースも広いし。


交通の便的に考えて僕はちょっと辛いけど沖国大や琉大の人誘えば僕居なくても人数埋まりそうですね…


僕としてはバスターミナル近辺にバスまたはモノレールで通えるなら嬉しい。


徒歩で通えるなら学校や会社への交通費も浮くから嬉しいです。


@と職場近いからその付近におうちあれば楽かな、と思う。


あと初期費用押さえるなら敷金礼金無しの物件探すとか(あるいは交渉して無くしてもらえないかとか)


おまけ


初期費用も維持費も多分めっちゃ安い





2011年11月28日月曜日

RubyでシンプルなTwitterクライアント書いた



シンプルなTwitterクライアント書きました。


hanachin/tsurube ? GitHub


名前はTwitter×Ruby、ついるび、つるび、つるべ、ということでtsurube。


コマンドラインで動作するTwitterクライアントを30分くらいで作れるPythonはかっこいい - YAMAGUCHI::weblog


こちらの記事をを見てRubyでやってみたくなった。


「30分? よゆー」と思ってたけどずるずる時間かかって実装力の足りなさを痛感しました。


今のところ




  • tl タイムライン取得

  • tl 40 タイムライン取得(1-200の間で指定)

  • mentions, m メンション見る

  • login, l ログイン

  • exit, quit, q 終了

  • tw ついーと


あたりのコマンドは実装した。基本的なツイートする、TL見る、メンション見る、終了する。が実装出来たし満足。


config.ymlに認証情報を登録したらすぐ使えます。


困ったところ


コンソールの操作するgem使った事ない

カーソルキーの上押すと前のコマンドが見れたり、Emacsバインドで編集出来れば最高なんですが、そういう事が出来るgemを僕は知らない。


探そうと思ったけどHighLineで対処。


今度良さそうなgemをいくつか試しておこうと思う。


warning: regexp match /.../n against to UTF-8 string

日本語で発言するときにここのコードで「warning: regexp match /.../n against to UTF-8 string」が出た。


faraday/lib/faraday/utils.rb at master ? technoweenie/faraday ? GitHub


UTF-8の文字列に対してRegExpのオプションでnを渡して漢字コード無視ってるのが問題なよう。


エラーメッセージでググると同じ問題がいくつか出てきた。


FaradayのUtilsのescapeメソッドの中身をEscapeUtilsのescape_url使うようにして対処。


工夫したとこ


元ネタのライセンスが面白かったので同じものを採用。


参考:WTFPL - Wikipedia


ログインが必要な処理をブロックで渡して、ログインしてなかったらログインを促すメッセージをだしブロックを実行しない、ログインしていたらブロックを実行する。


という風に書いてみた。ブロック可愛いよブロック。





2011年11月25日金曜日

CoffeeScript×enchant.js、enchant.jsをCoffeeScriptで書く。



enchant.jsをCoffeeScriptで書直しました。


hanachin/enchant.js ? GitHub


enchant.coffeeというファイルがあるはずです。


サンプルはexample/action-coffee/とexample/action-coffee2/以下に入っています。


理由


僕はCoffeeScriptにハマっています。CoffeeScriptは美しいからです。


functionを書かなくていいし、全て式なのでreturnを書かなくていいし、後置でifが書けるし、デフォルト引数もあるし、内包表記が凄く便利だし、?オペレータもかなり便利です。


僕はenchant.jsにもハマっています。enchant.jsは素早くゲームが作れるし、スマートフォンでもサクサク動くし、書いていて楽しいから。


enchant.jsがCoffeeScriptで書けたらいいな… そう思ってた時期にHotRubyからenchant.jsを使う記事を読みました。


wise9 › Ruby on enchant.js / RubyでHTML5ゲームを作ってみる


その中にはこう書かれていました。



ならCoffeeScriptで書けばいいじゃん、という意見もあるだろうけど、ここでは聞かなかったことにする。

僕はCoffeeScriptで書けばいいじゃん、と思った。


思ったからには書かねばならない。情熱が覚めないうちに。


まだまだ全然CoffeeScriptらしく書けてませんが公開します。


ちなみにenchant.coffeeの行数は2295行、元のenchant.jsが2685行なので14.5%、390行程度ソースコードの行数が減りました。


サンプルのアクションゲーム


9leap : enchant.coffeeサンプル by hanachin_ - どこでも遊べる、投稿型ゲームサイト


メソッドをオーバーライドするだけで動作


9leap : enchant.coffeeサンプル2 by hanachin_ - どこでも遊べる、投稿型ゲームサイト


ソースコードはこんな感じ



enchant()

class Bear extends Sprite
constructor: (w, h, image) ->
super 32, 32
@image = Game.instance.assets[image]
@x = 0
@y = 0

enterframe: (e) ->
@x = @x + 1

game = new Game(320, 320)
game.fps = 24
game.preload('chara1.gif')

game.onload = ->
bear = new Bear(32, 32, "chara1.gif")
game.rootScene.addChild(bear)

game.start()


もちろんenterframeだけでなく他のイベントにも対応しています。


実装について


全体的に

不要なfunctionを置換したりインデントを揃えるので時間がかかった。


メソッドのオーバーライドでイベントドリブン

EventTargetクラスのコンストラクタで



constructor: ->
@_listeners = {}
# Eventクラスで定義されたイベント名と
# 同じ名前のメソッドを持っていれば呼び出すようにする
for own prop, ev of enchant.Event
@addEventListener(ev, ((ev) -> ((e) -> @[ev](e) if @[ev]?))(ev))


enchant.Eventクラスの持つイベント名に対して、それぞれイベントリスナを追加しています。


イベントを受信した際に、クラスがそのイベント名と同じ名前のメソッドを持っていれば、それを実行するようになっています。


現状




  • サンプルのゲームが動く

  • メソッドをオーバーライドする形でのイベントドリブンプログラミングが出来る

  • CoffeeScriptのデバッガがないのでデバッグしづらい

  • GitHubにてオープンソースで公開


これから


バグがあれば直しますので@までご報告ください。


なるべくenchant.jsの機能追加等に追従出来るようにしようと考えています。


後は9leapのプラグイン等をCoffeeScriptで書直します。


enchant.coffee自体も整理したいのですが、まずは9leapで実際に使えるようになることを目指します。


質問等


何か質問等ございましたらTwitterで@宛にmentionをください。


もしくは以下のアドレスまで連絡をください。


http://services.nexodyne.com/email/icon/5JhEZ.J3qJ4%3D/LFg9q1s%3D/R01haWw%3D/0/image.png


よろしくお願いします。





2011年11月19日土曜日

日本Androidの会 沖縄支部 workshop@Naha Vol.13で発表してきた



日本Androidの会 沖縄支部 workshop@Naha Vol.13 : ATNDで発表しました。


今回はUstreamで勉強会の様子が配信されています。


USTREAM: ITカレッジ沖縄: 専門学校 ITカレッジ沖縄がお送りする番組!イベント等の様子を配信!.


Twitterのハッシュタグは#ojagnaha1119


追記


振り返りコメント


Google グループ


Togetter


OJAG workshop@Naha Vol.13 - Togetter


今日のメモ




  • 金子さんのDotcloudの話


    • 実際にコマンドを打ってdotcloudを使ってみる。

    • JSONICを使ってRESTfulなサービス、AndroidからJSONICを叩く



  • 僕の発表


    • 発表終わってから教職員から「えっと」が多い。喋るのが早いとの突っ込みが。

    • 見てくださってダメだしまで貰えてありがたいです。次回直す。



  • 告知・LT・KPT




鈴木さんのボードを見た。なんか面白そうだったのでにやにやが止まらない。


電子工作がやりたくて自分もArduino買ったので何かネタでも作ろうかな。


僕の発表内容


ミク☆キュンの紹介をしてきました。


Ustream

僕のセッションもUstreamで配信されております。



当日の発表資料


内容的には前に書いたエントリと被ってる所が多いです。




反省点


プレゼンについて

Ust見直してプレゼンの反省




  • 「~なんですけど」「で、~」「で、えっと」「えっと」が多い。


    • 自分で数えてみたけど50回弱「えっと」と言ってます。



  • 緊張のあまり早く喋り過ぎて噛む。

  • 「ちょっと」「多分」「なんか」は自信なさげに聞こえる。

  • 「ミク☆キュン」という名前を使って紹介してないような。wwww

  • 「9日間」を「ここのかかん」と読まず「くにちかん」。

  • 「9leapにアップロードして」を「9ロードにアップロード」といったり緊張してるなー。

  • 20分枠で13分程度で発表終わる。2分質問で15分程度。


話の途中に「えっと」が挟まると「かくっ」と引っかかる感じがするよね。


それが無ければもうちょっと良い感じに聞こえるかも。


多分「考え中」に微妙に空いた時間を埋めるために「えっと」を挟んでるのかと。


プレゼンの内容をもっと自分で把握しておけば解消されると思う。


発表は20分の予定が15分で終わったけど、開始時間が5分遅れたので結果的にうまく収まりまったかと。


発表内容について

KPTでもっとソースコード等について知りたい、という声もあった。


今回は具体的な中身については触れないつもりで20分貰ったので、省いた。


次回発表するときはもう少し具体的な内容入れた方がいいのかも。


あるいはもっと非技術的な発表に走るとか。


感想


はじめての発表で緊張したけど発表できて幸せだー!


学校入ってから勉強会に出始めてずっと聞き専だったので自分で発表出来るというのは嬉しい。


ネタつくってまた発表します。


追記


feedbackを更に貰ったので追記。




  • プレゼンの要素、コンテンツとデリバリ


    • デリバリは慣れ

    • 4日間でゲームを作るというコンテンツはよかった



  • 30秒以内になぜこのプレゼンするのか、話を聞く人が聞きたくなるような理由を話す。


    • この話を聞く理由がないと「なんで話聞いているんだろう?」となってしまう

    • 人間は色んな事を忘れてしまう

    • たった1つ伝えるなら何を伝えるか1つ決めて、それについて話せば覚えていてもらえる可能性が高い



  • デモの前にURLを入れるのはまずい


    • デモやる前にURL見せると皆自分の画面を見る

    • 集中力が分散してしまう




非技術系の発表ならプレゼンテーションZen + KeyNote


技術系ならKeyNoteよりもorgモードのHTML5 Presentationと



Presenting Research in Science and Engineering

Presenting Research in Science and Engineering







この本がお勧めだと教えて頂いた。





2011年11月10日木曜日

Android+MacRubyでMacを操作するアプリを作ったよ



AndroidアプリからMacを操作するPaddapというアプリを作りました。


hanachin/paddap ? GitHub


どんなアプリ?


一言で説明すると、AndroidをMacのトラックパッド代わり等に使うアプリです。MacRuby使ってます。


週末ものづくり講座の成果物です。


デモ






2011年11月5日土曜日

Okinawa.rbの勉強会に参加してきたよ!



勉強会はブログ書くまでが勉強会!


Okinawa.rbの勉強会に参加してきました。



具体的には、iPhone勉強会のやり方に倣って、Ruby/Rails初心者な方達には過去の勉強会資料などを使ってチュートリアルを行い、そうでない方々にはモクモクとハッカソンをしてもらう、という形です。

僕はモクモクとハッカソンしました。


ハッカソンの様子。真ん中で寝てるのが僕。


http://29.media.tumblr.com/tumblr_lu74q7cR8m1qzr282o1_500.jpg


Instagram


僕がハッカソンで書き直したかったもの


「はてなブックマークのタグ付けのデータを元に自分(や他人)が今興味をもっていることを視覚化したい。」


そう思ってしこしこ授業中に作ったのがこちら。


f:id:h6n:20111106014949p:image


Processingを直接使うより手慣れた言語でやった方が早く出来るだろう。


データの取得も表示も同じ言語でやった方がやりやすそうだ。


ということでプロトタイプをRubyで書きました。




  1. 自分のはてなブックマークのAtomフィードをダウンロード

  2. Ruby + Nokogiriでタグ等を抜き出す

  3. Ruby Processingを使って表示


という流れ。これを皆が見れるようにウェブブラウザで動くように書き直そう!というのが僕の今日のハッカソンの目標。


ハッカソンでやったこと


とりあえずブラウザでProcessing.js使って加工済みのデータを表示するところまで出来ました。


f:id:h6n:20111106022523p:image




  1. はてなブックマークのデータを取りたいのでAPI調べる


    1. どうやらja/bookmark/misc/feed - Hatena Developer Centerを参考にフィードのURLにパラメータ渡せば欲しいデータとれそう



  2. Anemoneっていうクロール用のgemがあるっぽいので入れて少し使ってみる

  3. Sinatra等でサーバー側書いたり、Anemoneでデータ取って来るにしても表示出来ないとどうしようもない

  4. とりあえずRuby Processingで書いたやつをProcessing.jsに移植


    1. Rubyでクラスとか使ってたのをJSで直接書くのはやだ

    2. CoffeeScript使おう

    3. Processing.jsのサンプルをCoffeeScriptで書いて動くのを確認

    4. 気がついたら昼。飯食べに行きつつ書き直し。

    5. [ ].push 123はアリなのに[ ].shiftは駄目で[ ].shift()と書かなきゃ駄目など、引数無しの関数あたりでハマる



  5. 同級生がやってたTry Rubyにちょっかい出す

  6. 気がついたら17時すぎててタイムアウト…


といった感じでした。


書き直す前の元データと書き直した奴まとめて成果物として置いておきます。


全部まとめてzip


反省点



  • ハッカソンは昼飯かって持ってきてたほうが時間節約出来る

  • 自分に優先順位と時間制限をつける

  • 下調べが足りてなかった orz


    • Processing.js周り

    • CoffeeScriptもチュートリアル一通りやってて満足して触ってなかったし

    • よく考えるとフィード取ってきて云々もRubyじゃなくてクライアント側のJSで出来るだろう


      • 最初のアイディア話して意見聞いてもよかったのでは



    • 今日はCoffeeScriptしか書いてないけどRubyで書いたのを移植、だからRuby勉強会のハッカソンの内容的にはいいはず…!


      • ほんとはSinatraとか使ってそこでRuby分補給する予定でした orz





  • 勉強会終わるまでにデプロイが理想

  • もっと話しかければよかったー&今度は懇親会出よっと


    • 懇親会ではなちんさんは何者かという話があったらしいww

    • 「誰一人として本名も年齢も経歴も知らない」中yasulabさん経由で経歴がばれるという謎の現象



  • 初めてバスで帰った。800円ちょいで那覇市内までいける。


    • Googleさんによると自宅まで徒歩2時間半ぐらい。Googleさんを信じて次は歩いてみようと思う。




感想


こういうもくもくもいいですね。楽しかったー。自分も(完全ではないにしろ)ブラウザで動くようになったし。


同級生がRubyハマってくれたようだし、初めてRubyやる人多かったけど皆楽しいって言ってましたね。(英語がつらいとも…)


Okinawa.rbの人に長田のうどん屋、栄町のサワディ・おでんの東大など美味しそうな店紹介してもらった。行かねば。(特にうどん)


今月は26・27日にもハッカソンがあるのでたのしみです。2日も実装に使えるのでいいネタ考えねば! (2つ作るのもありなのかな)


リンク


当日資料


世界の麦汁さん

Okinawa.rbの勉強会に初参戦してきたよ: 麦汁三昧


libkinjoさん

忘れ物しないようにチェックを入れる事が出来るウェブアプリ





DontForgetSomething


ソースコード


yamanetoshiさん

Node.jsいじってたらしい。自分もいじりたい。


ハッカソン - /var/log/messages


ふりかえりメモ

Google Groups


Togetter

第3回 Okinawa.rb 勉強会 - ハッカソン/チュートリアル - Togetter