なんかメモだけ残ってたので思い出して書く

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 new cs
cd cs
rails generate controller Cafe index

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を見てたら結構知らないプロジェクトがあったので簡単なリストにしてみました。僕は、勉強会とかで「○○を知ってる人?」って聞かれたときに知らないけど見栄張って挙手して後ろめたい気持ちになることが多いので、みなさん名前だけでも覚えておくといいかと思います。

flockdb
twitterで使っているライブラリで、ソーシャルグラフのデータ(誰が誰をフォローしてるとか誰が誰をブロックしているとか)を扱うのに適しているらしい。
Kestrel
メッセージキューを扱うライブラリです。
Gizzard
分散フレームワーク。これもtwittergithubのページに画像付きで説明があるのでそれ見ると早いです。
akka
分散処理のためのフレームワーク。分散処理以外にもいろいろあるとのこと。(すみません、全然わかってないです)。JavaAPIも用意されてるのでJavaからも使えそう。
xsbt
Scalaのビルドツールsbt。日本語訳がありがたい。
scalatra
RubyのwebフレームワークSinatraからインスパイアされたフレームワーク。Example見るとかなりSinatraっぽい。
Play 2.0
フルスタックのwebフレームワーク。READMEには「beta」と書いてあります。playはバージョン1の時はプラグインを入れるとscalaをサポートという形だったのに、2.0は最初からscalaをサポートしているらしいです。
finagle
Asynchronous(非同期)でRPCクライアント&サーバーを作れるライブラリ。Asynchronousって単語は最近よく聞く。例として載っているのはHTTP、Thrift。その他HTTP streaming (Comet)、Memcached/Kestrelなどもサポート。
goose
HTMLコンテンツを解析して記事を抽出するライブラリ。元々Javaで書いてたっぽく「Regarding the port from JAVA to Scala」ってあるので後で訳したい。
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,、CSSJavaScriptを生成するようなことには向いてない方向性。
spark
「iterative and interactive cluster computing」。HP見たらHadoopとの性能比較グラフが載ってたんで、それに対応しているっぽい。
spray
これもRESTfulなweb services作るもの。Akkaの上に作られてるのかな(on top of Akkaをどう訳すかという問題)。


時間が迫ってきたので飛ばします。

rogue
MongoDBにアクセスするするためのライブラリ。Liftの一部という位置づけなのかな。Liftの一部ではない。
unfiltered
webフレームワーク。これもRESTfulなサービス作るのに向いていそう。
sbt-idea
sbtでcreating IntelliJ IDEA project filesを作る。
scala-query
DBアクセス。2日目にありました。
android-plugin
Androidプラグイン
Squeryl
O/Rマッパー。
querulous
これもO/Rマッパー。読み方わからない。
scala_school
ドキュメント。これを読んでscalaの勉強してねって。
configgy
simple config and logging setup for scala
scala-json
JSONパーサー。パースだけじゃないです。Odersky著Programming Scala bookをベースに作ったとか。twitterさん。
sjson
これもJSONパーサー。パースだけじゃないです。
scalate
テンプレートエンジン。「JSPみたいなもんだけどScalaのクールさを忘れてないよ!」
casbah
Officially supported Scala Driver for MongoDB
scala-time
俺の大好きJodaTimeのScalaラッパー。
dispatch
JavaのHttpClient的にどこかのデータを取ってくる時に使いますが、それ以外にもOauthできたりtwitterAPI叩けたり機能が豊富。


まだまだたくさんあります。マイナーどころまで全然たどりつけなかった。あと、間違い等ありましたらご指摘下さい。

テーブル構成

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/13395547613http://mcsgsym.tumblr.com/post/13501396948のデータをAPIから取得するとreblog_keyが一緒になっている。そのため、1つのreblog_keyに複数のポストが紐づいているような感じで。reblogsとpostsは1対多になる。

プレゼン資料

まだ途中ですが

picture-showってやつ使ってます。アウトプットがHTMLとcssとjsの組み合わせなのでネットにアップしやすく、当日はブラウザをそれで見るだけってなると楽ですね。あと十字キーでスライドショーの操作できるのがかっこいいです。