なんかメモだけ残ってたので思い出して書く
active_support関連で。
require 'active_support/all' def a return [1] end def b return nil end c = b || a d = b.presence || a
この場合cもdも、aの結果である[1]になる。次、
def a return [1] end def b return [] end c = b || a c = b.presence || a
この場合cは[]、dは[1]。b.presenceはb.present?がtrueの場合自身を返して、falseの場合nilを返す、だったと思います。それにしても最近rubyしか書いてない。関係無いけどMBA買ったのでこれでハンズオンな勉強会にも参加し放題ですね。
Mongoid
ここ見ながら、使い方に迷っていたので。
class Person include Mongoid::Document embeds_one :name attr_accessible :name end class Name include Mongoid::Document field :vorname, type: String field :nachname, type: String embedded_in :person end
みたいに定義のコレクションに
{ "_id" : ObjectId("4f7477cb955fbd1fd3000001"), "name" : { "_id" : ObjectId("4f7477cb955fbd1fd3000002"), "vorname" : "Heinrich", "nachname" : "Heine" } }
現在こうなってるとする。これを取得するには
b = Person.where('name.vorname' => "Heinrich") b.each do |c| pp c.name.vorname end
のような感じで。
coffeescriptも勉強中だしjqueryも勉強中だし
ってことでjqueryの本に載ってることをcoffeescriptで書き直してます。で、実際に動かしてみるときはRailsで環境を作ってます。coffeescriptからjavascriptへの変換はRailsに任せましょう。
generateまで
rails serverで起動してhttp://localhost:3000/cafe/index
http://ascii.jp/elem/000/000/498/498710/index-6.htmlにあるサンプル例なら app/views/index.html.erb にHTMLを追加。
<dl> <dt>テキスト1</dt> <dd> <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> </dd> <dt>テキスト2</dt> <dd> <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> </dd> <dt>テキスト3</dt> <dd> <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> </dd> </dl>
app/assets/javascripts/cafe.js.coffee にcoffeescriptを追加。
$ -> $("dd:not(:first)").css("display","none") $("dl dt").click -> if $("+dd",@).css("display") is "none" $("dd").slideUp("slow") $("+dd",@).slideDown("slow")
これが http://localhost:3000/assets/cafe.js を見ると変換されている。
(function() { $(function() { $("dd:not(:first)").css("display", "none"); return $("dl dt").click(function() { if ($("+dd", this).css("display") === "none") { $("dd").slideUp("slow"); return $("+dd", this).slideDown("slow"); } }); }); }).call(this);
ついでにsassは assets/stylesheets/cafe.css.scss に。
*{ margin:0; padding:0; } dl{ width:400px; margin:50px auto; dt{ background:#7CADB6; border-bottom:1px solid #FFFFFF; cursor:pointer; } dd{ border:1px solid #7CADB6; border-top:none; height:300px; } }
coffeescript
coffeescriptのシンタックス・ハイライトは無さそうなのでjavascriptでやってみる。
$ -> $("#click_here_button") .click -> $("li#2").prependTo $("li#1") .click -> $("li#3").prepend $("li#1").html() + " "
今jqueryの勉強してるのですが、jqueryの本買ってきて載ってるソースコードを全部coffeescriptに訳してみたりしています。
eee = -> $("img").attr("alt", "666") $("a").one('click', eee)
みたいな。
<input id="click_here_button" type="button" value="Click here" /> <ul> <li id="1">li 1</li> <li id="2">li 2</li> <li id="3">li 3</li> <li id="4">li 4</li> </ul> <img src="" alt="" width="100" height="100" /><br/> <a href="/">href1</a>
githubを使ってるscalaを一部紹介
この記事はpartake.inの12日目の記事です。
12/14追記:
xuweiさんからツッコミ&補足をいただきました。クゥエルァラス!
Scalaのライブラリについてごちゃごちゃと適当に説明 - xuwei-k's blog
合わせて読んでくださいというか先に読んでください。
最近githubのページを見てる事が多いんですけど、https://github.com/languages/Scala/most_watchedを見てたら結構知らないプロジェクトがあったので簡単なリストにしてみました。僕は、勉強会とかで「○○を知ってる人?」って聞かれたときに知らないけど見栄張って挙手して後ろめたい気持ちになることが多いので、みなさん名前だけでも覚えておくといいかと思います。
- Kestrel
- メッセージキューを扱うライブラリです。
- Play 2.0
- フルスタックのwebフレームワーク。READMEには「beta」と書いてあります。playはバージョン1の時はプラグインを入れるとscalaをサポートという形だったのに、2.0は最初からscalaをサポートしているらしいです。
- finagle
- Asynchronous(非同期)でRPCクライアント&サーバーを作れるライブラリ。Asynchronousって単語は最近よく聞く。例として載っているのはHTTP、Thrift。その他HTTP streaming (Comet)、Memcached/Kestrelなどもサポート。
- Snowflake
- またまたtwitterさん。「MysqlからCassandraに移行したんだけど、Cassandraってシーケンスを生成する仕組みが無かった。だからその部分を新しく作った。」って読める。
- scalaz
- Scalaのコアな部分を拡張するライブラリと聞いています。partake.in面白いです。
- Lift Framework
- フルスタックのwebフレームワーク。MVCじゃなくてView Firstだよってことで独特の考え方したフレームワークでした。
- blueeyes
- Webフレームワーク。ただ「BlueEyes is intended only for creating RESTful web services」。RESTfulなサービスを作るのに特化していてHTML,、CSSやJavaScriptを生成するようなことには向いてない方向性。
- spray
- これもRESTfulなweb services作るもの。Akkaの上に作られてるのかな(on top of Akkaをどう訳すかという問題)。
時間が迫ってきたので飛ばします。
- rogue
- MongoDBにアクセスするするためのライブラリ。
Liftの一部という位置づけなのかな。Liftの一部ではない。
- unfiltered
- webフレームワーク。これもRESTfulなサービス作るのに向いていそう。
- scala-query
- DBアクセス。2日目にありました。
- Squeryl
- O/Rマッパー。
- querulous
- これもO/Rマッパー。読み方わからない。
- scala_school
- ドキュメント。これを読んでscalaの勉強してねって。
- scala-json
- JSON
パーサー。パースだけじゃないです。Odersky著Programming Scala bookをベースに作ったとか。twitterさん。
- scala-time
- 俺の大好きJodaTimeのScalaラッパー。
まだまだたくさんあります。マイナーどころまで全然たどりつけなかった。あと、間違い等ありましたらご指摘下さい。
テーブル構成
CREATE TABLE reblogs ( reblog_key varchar(10) NOT NULL, posttype int(1) NOT NULL DEFAULT 0, lastdate datetime NOT NULL DEFAULT '1970-01-01 09:00:00', count int(11) NOT NULL DEFAULT 0, ) CREATE TABLE posts ( reblog_key varchar(10) NOT NULL, user varchar(32) NOT NULL, postid bigint(20) NOT NULL, )
例えば、http://eri-eri-kamei-eri.tumblr.com/post/13395547613とhttp://mcsgsym.tumblr.com/post/13501396948のデータをAPIから取得するとreblog_keyが一緒になっている。そのため、1つのreblog_keyに複数のポストが紐づいているような感じで。reblogsとpostsは1対多になる。
プレゼン資料
picture-showってやつ使ってます。アウトプットがHTMLとcssとjsの組み合わせなのでネットにアップしやすく、当日はブラウザをそれで見るだけってなると楽ですね。あと十字キーでスライドショーの操作できるのがかっこいいです。