酒が一番飲める言語はなにか

プログラマーはプログラミング言語で酒が飲めるぞー!酒が飲める飲めるぞー!酒が飲めるぞー! - Togetter
プログラマが各々好きな言語で酒を飲みあっていた。

色々な言語で酒が飲まれているようだが、一番酒が飲める言語は何なのだろう?
pythonの勉強がてら調べてみた。

※パースは適当なので結果にはずれがあります

結果

順位 言語 回数
1 PHP 8
2 sh 5
2 Ruby 5
2 Perl 5

予想通り?PHPの圧勝でした。

一番酒豪なのは

ついでに誰が一番酒豪なのか調べた

順位 名前 回数
1 [twitter:@raa0121] 8
2 [twitter:@tadsan] 5
2 [twitter:@ne_ko_] 5

ということで今夜の一番の酒豪は[twitter:@raa0121]さんでした。

第4回Sugamo.vimに行ってきた & unite-spotlight書いたよ

Sugamo.vim

7/16第4回 Sugamo.vim : ATNDに参加してきました。特に知り合いも参加していないのですがVimの勉強会と聞いて飛びついてしまいました。

会の進み方

よくある勉強会とは違って前もって何をやるかを細かく決めずに、その場で何か話したいことがある人が話して、聞きたいことがある人が随時割り込んでいくスタイルでした。
僕はSugamo.vimは初参加だったのですが、前回もこんな感じだそうです。

今回は[twitter:@sygwig]さんの.vimrc紹介と[twitter:@t9dm]さんのプラギン紹介がメイントピックでした。

[twitter:@sygwig]さんの.vimrc

vim歴3年程度とのことですが、unite, vimfiler, vundleなどの最近のトレンドを抑えつつもコンパクトにまとまってると感じました。(自分の.vimrcはともすると無駄に長くしてしまいがちなので、、、)作った人の話を聴きながら.vimrcを見るってあまりないですが、参考になる点も多くいい経験になりました。

vimの操作を表示するために、keycastrというキーストロークを画面に表示するMacのアプリを使っていました。これいいですね。早速インストールしたので何かの発表の際に使ってみます。

[twitter:@t9md]さんのプラギン紹介

[twitter:@t9md]さんが自身で作製されたプラギンをいくつか、実際に動かしつつ紹介して頂きました。

vim-textmanipはVisualで選んだ領域を動かしたり副せしたりするプラギンです。キャッチーですね。会場でも実際に動かしているところが映し出されれると歓声が上がっていました。奇を衒っただけのプラギンではなくて実用性も高そうです。

会場ではそれ程反応がなかったようですが、個人的にはsurround.vimのcustom mappingには可能性を感じました。難解で有名なsurround.vimで有名なsurround.vimのユーザーマッピングですが、これを使うといとも簡単に書けてしまいます。例えば

[twitter:@t9md]さんも言っていましたが、是非本家に取り込まれて欲しいですね。

参加してみて

周りにVimmerがいないので普段はあまりVimの話はできないのですが、Sugamo.vimに参加して大量にVim成分を補給できました。次回も是非参加したいです。今回は後の予定が入っていたので泣く泣く懇親会は見送りましたが、次回は是非懇親会も参加して心ゆくまでVimの話をしたいです。

今回を振り返ると、喋る人が割と固定されていた感じがしたので、全体でわーわーやるのとは別に少人数でVimを触り合う時間などがあるといいかもしれないですね。

会場とか

会場はルノアールの貸し会議室だったんですが、Wimaxは通るし電源はあるし椅子はふかふかだしかなり快適でした。4時間 + プロジェクタレンタル + 一人ワンドリンクを15人程で割って、一人頭1000強なので、安くはないですが、準備や運営の手間などを考えると悪くない選択肢だと思います。

Sugamo.vimのようなまったり系の会ではかなりいいチョイスではないでしょうか。

unite-spotlight書いたよ

せっかくVim分を補給できたので、連休中にVimプラギンのソースコードリーディングをしつつ書き方の勉強をしてました。

で、書いてみたのがこれ
GitHub - choplin/unite-spotlight: Spotlight source for unite.vim
unite.vimのsourceにMacのSpotlightを使えるようにするものです。ほぼujihisaさんのunite-locateまま。

イデアレベルではいくつかほしいプラギンがあるので、継続して書いていこう。

アプリ開発者よりのDB勉強会をやりたい、というかやる

結論

SQLがどーのデータの持ち方がこーのというアプリ開発側の話題がメインのDB勉強会をやりたいからやるよという話

以下補足

コンテンツ

  • アプリ開発者がDBを握らなければならない時代
  • DBを握るということ
  • 勉強会について

アプリ開発者がDBを握らなければならない時代

データ爆発の時代

データ爆発の時代がくると言われて久しいです。扱うデータの量が増えてきているだけでなく、データの構造も多種多様になってきていると感じています。これまではOne Size Fits AllでRDBが対応してきたのが、増加し複雑化していくデータにRDBのみでは対応しきれなくなってきている為にNoSQLのようなプロダクトが盛んに開発され利用されています。

アプリ開発者としてやるべきこと

そういった時代を迎えるにあたって、アプリ開発者は何も備えなくていいんでしょうか?DBはインフラ/サーバーエンジニアのもの?

僕は「DBに対して(データに対して)アプリ開発者が握る領域を増やす」ということだと考えています。

DBを握るということ

RDBSQLを書くという選択

比較的アプリ側から直接データを扱うようなアーキテクチャになっているKVSやドキュメント指向なNoSQLに比べ、RDBMSSQLという抽象的な形でしかデータを扱えないようになっています。これはリレーショナルなデータモデルを扱う為にそうなっています。

SQLを書くには普段アプリを書く時は結構頭の切り替えが必要な為、ORMを使ってオブジェクト指向で扱えるようにするのが主流です*1

ですが、リレーショナルなデータを上手く扱う為にはその為に作られたSQLで書いた方がいい場面が多いし、ORMはオワコンらしいし、SQLはLLだそうなので、DBを握りたいアプリエンジニアはRDB使うときは、もっとカジュアルに生SQLを使うといいんじゃないかと思います。

RDBMSを使うということは巨人の肩に乗ること

RDBMSは、SQLで欲しいデータを宣言的に書いておくと、中の人であるプランナ/オプティマイザがデータの状況やインデックスの張り方にあわせてよしなに実行計画を組んでくれる仕組みになっています。この仕組み故にどう実行されるかが直接コントロールできなくて扱いづらい面もありますが、僕はこれはまさに巨人の肩に乗るということだと思っています。

プランナ/オプティマイザにはデータの取り扱いに長けた超人達の叡智が存分に詰まっています。恐らく自分で手続き的にコードを書いたとして、RDBMSと同等の最適化を行う自信はありません。例え書けたとしてもSQLを書くのとは比較にならない時間が必要になると思います。

プログラミング言語としてのSQL

さらにSQL自身も言語として大きなポテンシャルを持っており、使いこなせれば特にデータを扱うということにおいては柔軟で強力な表現を行うことができます。若干ネタ気味ですが、SQLのポテンシャルについてはここら辺を見るとその一端を感じることができると思います。*2
Brainf*ck in SQL - ぐるぐる~
SQLで数独を解く - y-kawazの日記

...SQL書きたくなりましたか?

大事なのは選択できること

もちろんRDBMSがNoSQLに比べて優れている、ということではありません。RDBMSやNoSQLについて考えるときは「RDBMS v.s. NoSQL」ではなく「RDBMS and NoSQL」、もっといえば「DBMS」という枠で考えるべきです。

データを扱う上であるDBMSを選択するというのはどういう意味があるのかを意識する、ということです。そして作りたいものに併せて適切なDBMSを選択する*3ことです。これができればアプリ開発者として大きな力になると思います。*4

その為の一環として、アプリ開発者としてRDBMSをもっと上手に*5扱えるようになりたいと常々考えていました。

勉強会について

経緯

大体以上のような理由でアプリ開発者むけのカジュアルなDBの勉強会をやりたいなぁと何となく思っていました。http://mysql-casual.org/が発想としては近いのですが、内容をみるとインフラ周りの話題が中心なようです。MySQL Casualに限らず、DBの勉強会というとどうしてもインフラ周りの話題が中心になりがちで、もどかしい思いをしていました。

そんな折、勉強会カンファレンス2011*6に参加したところ、「なければ作ればいいじゃない」という心の声が聞こえてきたので、やることにしました。

話題

対象の話題は大体こんな感じでしょうか?

  • SQL
  • ストアドファンクション
  • データの持ち方
  • プラグインの書き方/作ってみた
  • 実行計画

他の話題も歓迎です。

DBMS横断的にやりたい

インフラ向けの話題に比べて、アプリ向けの話ならDBMSに依らない話にしやすいんじゃないかと思っています。

もちろん全てのDBMSに通じる話は恐らくそんなになくて、特定のDBMSを前提とした話に必然的になってくるとは思いますが、普段は違うDBMSについて話を聞く機会はあまりないのでそれはそれで聞いてみたいし、さらには異なるDBMSのユーザー間で交流できるような場になれば嬉しいです(主に僕が)。

とりあえずRDBから始めようと思いますが、ゆくゆくはNoSQLな話題も取り入れていきたいです。方向性は模索しつつ色々やっていきたい。

自分はPostgreSQL畑なのでPostgresからの話を提供できますが、某試験のようにDBといいつつ実質はPostgresのようなことにならない為に、他のDBMS使いの方の賛同者を絶賛募集中です。OSS、プロプラも問いません。

さらに個々のDBMSに特化した話にしたい時は派生させて分科会をやればいいと思います。むしろ分科会をやれる位に成長できれば素晴らしいですね。

名前募集

勉強会に名前はSQL Casualがいいかなと思ったんですが、MySQL Casualと丸かぶりなので却下。素敵な名前があれば教えてください。

時期とか人数とか

未定。8月くらいまでにはやりたい。決まったらここで/Twitterで告知します。

*1:と思ってたら、Perl界隈ではid:nekokakさん作のDBIx::SkinnyやTengのように生SQL指向のORMが結構流行っているようです。他の言語だとどうなんでしょう?

*2:自分もSQLでProject Eulerを解くという活動をしているのですが更新が滞っています。すいません。。。

*3:インフラ/サーバーエンジニアをないがしろにするといことではなくて、アプリ開発側からの意見を提供できる、ということ

*4:次のMongoDB勉強会ではその辺を話そうかなぁと思ってます。興味が有る方はどうぞ。(満席ですが、、)

*5:もちろんNoSQLも

*6:非常に有意義かつ楽しいイベントでした!ありがとうございました!

Project Euler #1 with SQL

遅ればせながらAbout - Project Eulerでもやってみようかと登録。

なるほど。プロフィールの代わりに使用する言語を登録するのか、プログラマはこういうところで自己主張するよな、とか思って見てみると

、、、SQLは?(;´Д`)

ということでSQLで解いてみました。第一問目。

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

標準SQL以外にPostgreSQLの関数を使ってます。

SQLだと集合を集合として扱えるので美しいですね。ループを使っていいのは小学(ry*1

また気が向いた時に続きをSQLで解いていきたいと思います。

SETOF関数

問題を解くだけだと何なので簡単な解説を一つ。

解答の中のgenerate_series関数は、始まりと終わりの数を引数にとって、その「集合」を返す関数です。
このような集合を返す関数はPostgreSQLではSETOF関数と呼ばれています。

詳しくはここらへんを参照。
9.24. 集合を返す関数
SETOF関数のあれこれ - 象と戯れ - postgresqlグループ

generate_seriesを使うと連番の集合を簡単に生成できるので、Project Eulerのような問題向きですね。
なのでProject Eulerの管理者は早くSQLをLanguageから選べるようにするべきです!SQL!SQL!

*1:今時の言語ならmapを使うか

第3回MongoDB勉強会に参加してきました

いつものごとく「第3回 MongoDB 勉強会 in Tokyo」 : ATNDに参加してきました。参加者も100名超と大変盛況だったようです。
MongoDB現協会は[twitter:@doryokujin]さんの熱意によってほぼ毎月のペースで開催されています。NoSQLの中でもMongoDBは大変面白いプロダクトなので、興味のある方は是非参加してみてください!

MongoDB全機能解説 by [twitter:@doryokujin]

今回は途中からの参加だったので、本セッションと次のセッションは聞けずじまいでした。タイムラインを見ていると2時間に及ぶ大作だったようです。スライドは公開されているので、これを見て勉強しておきます。

ソーシャルアプリのプロトタイプ制作にMongoDBを活用 by [twitter:@bibrost]

こちらも間に合わず。MongoDBはコアのみでRESTによるアクセスでの簡単なクエリに対応していたり*1、本セッションで紹介されたSleepy.Mongoose*2を用いると更に充実したREST Interfaceを使えたりするので、プロトタイプをサクサク作っていくのには非常に向いていると思います。

mongo dbチューニング by [twitter:@matsuou1]

個人的にプログラムを見て一番気になっていたセッションでした。内容も素晴らしく間に合って本当によかった!
スライドの節々でソースコードリーディング分科会に期待されているような言葉が、、、応えられるようにがんばらねば

実際にMongoDBを使って運用を始めると必ずチューニングが必要になってきます。RDBMSとは勝手が違うので手探りでやっていたと思うのですが、その際に手がかりとなる情報が綺麗にまとまっている貴重なスライドです。必見!

matsuou1さんはMongoDBのShardingについて詳細に検証された記事を公開されています。こちらも必見です!
MongoDBのShardingを試してみた。その1 - matsuou1の日記
MongoDBのShardingを試してみた。その2 Migration中の挙動について - matsuou1の日記
MongoDBのShardingを試してみた。その3 障害発生時の挙動について - matsuou1の日記

MongoDBを使用したモバイルゲーム開発について [twitter:@ygenk]

恒例サイバーエージェント枠での発表です。サイバーエージェントさんは国内でも有数(最大?)のMongoDBを利用したサービスを運用しており、毎回そこから得られた貴重なノウハウを公開していただいています。

ソースコードリーディング分科会やります

最後に宣伝です。MongoDB JPの分科会としてソースコードリーディング会を主催します。とは言ってもまだ企画段階で動きはじめたばかりです。
参加者把握用のダミーですが興味のある方は下記に登録して下さい。よろしくお願いします!
第0回 MongoDB JP ソースコードリーディング分科会 : ATND

あとがき

毎月という頻度で開催されているにも関わらず、変わらず高いクオリティの発表が多くて参加した甲斐がありました。勢いのあるプロダクト&コミュニティならではですね。

のようなTweetもありますが、新規の方が気軽に発表できるような場があるといいんじゃないかと思います。

来月も開催予定とのことなので、サポートをしつつネタができれば発表したいなと思います。
ソースコードリーディング会もよろしく!

第2回 MongoDB JP 勉強会に参加してきました

第2回 MongoDB JP 勉強会 in Tokyo : ATNDに参加してきました。主催に[twitter:@doryokujin]さん、会場を貸していただいただけでなく、運営、Ustなど様々な面でご協力いただいたフューチャーアーキテクトの方々、ありがとうございました!

何故MongoDBなのか?(技術的な理由以外で)

1. DB関連の流行りをフォローしたい

昨今NoSQLが流行っています。NoSQLについて語る時に、RDBが否定的なコンテクストで扱われることがあります。個人的にRDBはまだまだ戦えるし、データが複雑化、巨大化していく中で、DBMSを的確に使い分けられるスキルこそが重要になってくると思っています。
働いている会社はWeb系ではあるんですが、PostgreSQLをフルに使いこなすことで戦っているというところです。そういう会社にいるので、普段はRDBMS充な生活をおくっているんですが、データ層についての流行りの話も知っておきたくて、色々なNoSQLをちょいちょい試してました。
MongoDBはNoSQLの中*1でもびびっときてるプロダクト*2なので、これからも色々な形でフォロー&フィードバックして関わっていきたいと思っています。

#びびっときた理由ですが、自分の中でもまとめきれていません。その内記事にしたいと思います。

MongoDB関連の会は第1回 MongoDB JP & CouchDB JP 合同勉強会 in Tokyo : ATNDEvents | MongoDBなどにも参加させていただきました。

2.コミュニティが活発

Google グループの主催者である[twitter:@doryokujin]さんの人柄&がんばりによるところが大きいですが、勉強会が頻繁に行われ毎回100人近い参加者が集まり、懇親会含め様々な議論が交わされています。
また、今回の勉強会でテンションが上がってしまい、C++を書いたことがないにも関わらず

などとつぶやいてしまったのですが、
などの反応がすぐに帰ってきました。

個人的に、これからの時代はプロダクトそのものよさに加えて、コミュニティが上手く回っているかというのも、プロダクトが使われるかどうかの重要な要素になってくると思っています。MongoDB JPはできたばかりなので規模もまだ小さいし成熟したコミュニティとは言えないですが、参加者のモチベーションが高く、勢いがあります。この勢いが上手く回ってプロダクトにも反映されていくようになるときっと素晴らしいことになると感じています。

まとめの前に

僕のまとめメモのリンクを以下に貼っておきますが、僕のフィルターを通っている&メモのとりこぼしがあるので、ぜひ他の方がまとめられたものと併せて御覧ください。
# 発表者の方、メモに誤りがあったらすいません。修正しますのでご連絡ください。
# ちなみにメモはEvernoteでとったものです。勉強会でメモをとってからそのままブログに流すのに結構いい方法だと思っているんですが、他に良いやり方を知っている人教えてください。

*1:そもそもKVSとかドキュメント指向とかをNoSQLでくくってしまうのはどうよという話しはあるが、Yet Another DBMSという観点

*2:後はRedis

うひょーー!!!IE6終了のお知らせ!!

これは書かずにはいられない!IE6が公式に終了認定されるようです。
http://ie6countdown.com/

詳細は本家を見ていただくとして、自分のサイトを持っている人はIE6使ってるとそんなクソブラウザ使うのやめろバナーを出すコードが用意されています。

上記サイトによると、日本は世界でも有数のIE6使用率が高い国なので、このコードをガンガン張っていきましょう!

このブログにも早速貼りました!(IE6は当然使っていないので未確認です!)

Microsoftさんie7countdown.comも早めによろしく!