Hatena::ブログ(Diary)

分け入ってもコード このページをアンテナに追加 RSSフィード Twitter

2011-11-10

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

プログラマーはプログラミング言語で酒が飲めるぞー!酒が飲める飲めるぞー!酒が飲めるぞー! - Togetter

でプログラマが各々好きな言語で酒を飲みあっていた。

色々な言語で酒が飲まれているようだが、一番酒が飲める言語は何なのだろう?

pythonの勉強がてら調べてみた。

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

結果

順位言語回数
1PHP8
2sh5
2Ruby5
2Perl5

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

一番酒豪なのは

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

順位名前回数
1@8
2@5
2@5

ということで今夜の一番の酒豪は@さんでした。

集計スクリプト

2011-07-19

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

Sugamo.vim

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

会の進み方

よくある勉強会とは違って前もって何をやるかを細かく決めずに、その場で何か話したいことがある人が話して、聞きたいことがある人が随時割り込んでいくスタイルでした。

僕はSugamo.vimは初参加だったのですが、前回もこんな感じだそうです。

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

@さんの.vimrc

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

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

@さんのプラギン紹介

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

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

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

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

参加してみて

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

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

会場とか

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

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

unite-spotlight書いたよ

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

で、書いてみたのがこれ

choplin/unite-spotlight ? GitHub

unite.vimのsourceにMacのSpotlightを使えるようにするものです。ほぼujihisaさんのunite-locateまま。

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

他の方の記事

第4回 sugamo.vim に行ってきた - 永遠に未完成

Sugamo.vim 第四回に行ってきた。 - t9mdの日記

2011-06-26

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

結論

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

以下補足

コンテンツ

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

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

データ爆発の時代

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

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

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

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

DBを握るということ

RDBでSQLを書くという選択

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

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

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

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

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

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

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

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

Brainf*ck in SQL - 予定は未定Blog版

SQLで数独を解く - y-kawazの日記

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

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

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

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

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

勉強会について

経緯

大体以上のような理由でアプリ開発者むけのカジュアルなDBの勉強会をやりたいなぁと何となく思っていました。MySQL Casualが発想としては近いのですが、内容をみるとインフラ周りの話題が中心なようです。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:非常に有意義かつ楽しいイベントでした!ありがとうございました!

2011-05-19

Project Euler #1 with SQL

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

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

f:id:choplin:20110519214836p:image:w360

、、、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関数と呼ばれています。

詳しくはここらへんを参照。

集合を返す関数

SETOF関数のあれこれ - 象と戯れ - postgresqlグループ

generate_seriesを使うと連番の集合を簡単に生成できるので、Project Eulerのような問題向きですね。

なのでProject Eulerの管理者は早くSQLをLanguageから選べるようにするべきです!SQL!SQL!

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

2011-05-14

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

いつものごとく「第3回 MongoDB 勉強会 in Tokyo」 : ATNDに参加してきました。参加者も100名超と大変盛況だったようです。

MongoDB現協会は@さんの熱意によってほぼ毎月のペースで開催されています。NoSQLの中でもMongoDBは大変面白いプロダクトなので、興味のある方は是非参加してみてください!

MongoDB全機能解説 by @

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

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

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

mongo dbチューニング by @

個人的にプログラムを見て一番気になっていたセッションでした。内容も素晴らしく間に合って本当によかった!

スライドの節々でソースコードリーディング分科会に期待されているような言葉が、、、応えられるようにがんばらねば

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

matsuou1さんはMongoDBのShardingについて詳細に検証された記事を公開されています。こちらも必見です!

MongoDBのShardingを試してみた。その1 - matsuou1の日記

MongoDBのShardingを試してみた。その2 Migration中の挙動について - matsuou1の日記

MongoDBのShardingを試してみた。その3 障害発生時の挙動について - matsuou1の日記

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

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

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

最後に宣伝です。MongoDB JPの分科会としてソースコードリーディング会を主催します。とは言ってもまだ企画段階で動きはじめたばかりです。

参加者把握用のダミーですが興味のある方は下記に登録して下さい。よろしくお願いします!

メンテナンス中 : イベント開催支援ツール ATND(アテンド)

あとがき

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

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

来月も開催予定とのことなので、サポートをしつつネタができれば発表したいなと思います。

ソースコードリーディング会もよろしく!

他の方のブログとか

第3回MongoDB勉強会に参加しました #mongotokyo - nokunoの日記

404 error - File Not Found

2011/05/14_「第3回 MongoDB 勉強会 in Tokyo」 - Togetter