2013年12月27日金曜日

2013を振り返る

巷では今年一年を振り返るエントリーに溢れてるので自分もやってみるテスト。
今年一年、自分の瀬戸内界隈でのポジションを色々考えた時にやっぱ「主催にする人」なポジションかなーと思うのでそこをメインに据えながら振り返ります。

1月
第一回岡山Python勉強会を主催した
オープンセミナー2013@広島を主催した

今年はPHP以外の言語をもっとやろうと思って前から気になってたPython勉強会始めた。
仕事でかくPHPに活かされてる感じはないけどPythonが好きになった。
あとオープンセミナーを実行委員長で初めてやった。
完全なワンマンな感じで突き進んだけど無事着地してよかった。
これは大きな自信にもなった。
ただ仕事では色々と迷ってた時期。

2月
第二回岡山Python勉強会を主催した

ひむひむのマサカリを受けたりしながら第二回をこなした。
あとFuelPHPを触り始めた。
そして今や風前の灯の勝敗チェッカーを作った。
(誰も使ってないからそーっと閉じようかなと思ってたり)
それとFuelPHPに出会ってなかったら完全なPython教になってたと思う。
そういえばパソコン交流会行ってた。

3月
第三回岡山Python勉強会を主催した
第三回チャリティ大会を主催した

くっそデスマってたけどpythonは毎月開催キープ出来た。
チャリティ大会もみんなのお陰で無事開催できた。
この月は更にPHP勉強会で登壇したりWTMで登壇したりした。
今年は来場者の満足度の高い資料作りやネタってのをすごく意識した。
スライドシェアのアクセスが結構あるのでネタ選びや資料としてはそれなりに成果があった気がする。
って感じで忙しい月だった。
でも個人的には闘劇終了のお知らせが一番衝撃だった。

4月
第四回岡山Python勉強会を主催した
第三回たけともそんを主催した

第四回は人が集まらなくて中止になった。
自分も仕事が忙しくて行けなかった。
毎月開催がここで途絶える…
また第二回で参加者0と言う悲劇を乗り越えて たけともそん やった。
こっちは無事開催出来て良かったです。
あと転職を心に決めた出来事がありました。
一部の方には色々と相談に乗っていただいたりして本当にありがとうございました。
それと今気付いたけど4月だけブログの更新がなかった。
ネタは色々とあったんだけどなぁw

5月
第四回岡山Python勉強会を主催した

仕事で行けなかったけど第四回した。
TLを職場から指くわえて見てた。
それとJJUG CCCで登壇した!!
サムライズムに行ったりぬる舗行ったりした。
一気に関東の知り合いが増えた気がする。
蛇足だけどJava Day行くとブログ更新が捗ることがわかったw
あと転職することをTwitterで公表した。

6月
第五回岡山Python勉強会を主催した

人数が増えてきてPythonキタ!?って思い始めた頃。
ただの気のせいだった()
あとJPUGの総会で二ヶ月連続で東京行った。
それと仕事辞めた。
ここから一気に大都会から足が遠のいてしまった。
あとTLでいじられる量が減ったのでやっぱ隣の人は偉大だったなぁと思う。
(htmlやJS書いてても思うけど)

7月
第六回岡山Python勉強会を主催した
第四回たけともそんを主催した

物理的に平日で福山から岡山に参加無理だった。
ここから主催というよりはただのATND作成係に成り下がる。
あと新しい職場「まほろば工房」に転職した。
でいきなり出張で東京行った(三ヶ月連続)ため嫁ゲージが危機的状況に陥った。
たけともそんはたこパが好評だった。

8月
第七回岡山Python勉強会を主催した
第一回中国地方DB勉強会を主催した

物理的に参加が無理なのでPython勉強会はオンライン参加始めた。
まずはSkype。
山手さんとはスムーズに会話出来るけど他の人と交流出来ないのがネックだった。
でも久々のPython勉強会楽しかった(*´ω`*)
そしてついにDB勉強会始めた。
第一回はスペシャルゲストでMySQLの奥野さんに来ていただいた。
けど運動会と被ってちょっとお会いしただけで全然話聞けなかった。
来年は何処かでお会いするチャンス作ってしっかり話してみたい。
あと仕事でFuelPHPを導入した。
ずっとFuelPHPのことやってた気がする。

9月
第八回岡山Python勉強会を主催した

第八回も人が集まらなくて中止。
周囲は勉強会ラッシュだったけどタイミングが悪くて全然参加出来なかった。
あとずっとFuelPHPとKOF98やってた時期。

10月
第八回岡山Python勉強会を主催した
第二回中国地方DB勉強会を主催した

人が集まらなくてPython勉強会は中止…
二ヶ月連続だったのでこれはやばいかなと思い始めた。
あとはOSC広島で久々に登壇した。
中国地方DB勉強会とOSCでこれまた一気に人脈が広がった。
あと「勉強会について本気出して考えてみた
密かに題名の元ネタはポルノグラフィティの「幸せについて本気出して考えてみた」ですw
あと東京に出張行ったら結構ヘビィなプロジェクトにアサインされた。

11月
第八回岡山Python勉強会を主催した
第五回たけともそんを開催した

Python勉強会は無事開催出来た!!
今回からハングアウト使うようにしたらすごく良かった。
これで誰でもオフラインで参加できるしみんなとも交流出来るしオススメです。
音声効くだけでチャットだけとかも可能です。
一気に参加障壁が下がった気がする。
そして無事チュートリアルを完走した!!
あとは仕事がかなりセクシーだったですな…
技術的にTCP・マルチスレッド・ソケットとかなんとなくしか知らなかった部分をすっごい勉強した。
あと英語の文章いっぱいみたましたw

12月
第九回岡山Python勉強会を主催した

ハングアウト効果で参加者が増えた。
ハングアウトいいよハングアウト。
そして今回はSphinxの話。
山手さんが資料を公開してくれてますのでブログをどうぞ。

第9回 岡山Python勉強会でsphinxで話した。


あとは忘年会議行ってきた。
一年が終わったなぁって感じ。
あと今年もアドベントカレンダーをいっぱい書いた。


と言う感じでPython勉強会を中心に結構定例モノな勉強会を開催した。
逆にオープンラボ備後としては今年は活動してなかったですね。
また去年は「アウトプットの一環で沢山登壇する」ようにしてたけど今年は控えました。
けどその分アウトプットの品質は向上を目指したつもりです。
これに関してはみなさんの評価がまだ見えないところなので結果が出るまで試行錯誤していきたいと思います。

まっ兎にも角にも今年は転職が大きなターニングポイントでしたね。
それが功を奏したかはわかりませんがイベンターとしての目標はそれなりに達成できたかなぁとは思っています。
来年は「みんなに良かったよ!」って言ってもらえるように、目に見えた形になるように頑張って行きたいと思います。

ということで今年も残すところわずかですがみなさん良いお年を。

2013年12月25日水曜日

大都会に通勤して気づいた3つのこと



この記事は大都会アドベントカレンダー2013の最終日、25日目です。
昨日はkotaninさんの「ネタを用意して諦めた話」でした。

世の中は常に想定外のことが起こるという良い他山の石になりましたね。
そんな私も今日(25日)が終わるまでにこの記事を書き終えるか自信がありません。


本日は大都会岡山のお隣の独立国家福山在住の自分が1年半ほど大都会岡山に通って気付いたことをご紹介します。
(今は転職して福山のまほろば工房でエンジニアしてます。)

退職エントリはこちら >> @soudai1025、仕事辞めるってよ。

1 岡山駅前の西側がアツい!

岡山駅と言えば多くの人はTOPの桃太郎が居る東側を利用することが多いと思います。
駄菓子菓子(だがしかし)、通は西口です。
なぜ西口か…それは西側には隠れた?名所がいっぱいあるからです。
まずお食事処がアツい!

居酒屋 さくら

です。
ここの昼のランチのうどんが最強です。
日替わりランチのぶっかけうどん(温 or 冷) + 丼やカレーうどんなど毎日通っても飽きません。
他にもB食など素晴らしいお食事処が満載です。

上記のお店は岡山のピンクの本の著者で岡山Web業界の有名人、前川さんも週3で通ってた時期があるとかないとか。
前の職場は関係ありません。



そして次は勉強会が会場がアツい。
特に西口にある岡山国際交流センターでは多くの勉強会が行われます。
他にも奉還町りぶらホールなども歩いて行けます。

そして西口オススメの最後を飾るのがLTも出来る懇親会がアツい。
岡山の勉強会の目玉と言えばRyouteiでの懇親会。
特に座・スタジアムでのLT大会は毎度大盛り上がりです。
Ryouteiの岡山ITクラスタの交流に対する貢献度は計り知れません。
私も何度かRyouteiでLTをした経験があります。
そして多くの交流を育みました。
(大切な何かも失った気がしますが)
来年もオープンセミナー岡山TDDBC等で大活躍すること間違いなしです。

RyouteiでLTをするような大きなイベントに興味がある方は来年のオープンセミナー岡山の実行委員長のハーレムさんをWatchするのがいいと思います。

2 新倉敷駅周辺がアツい!

岡山と言えばJR快速も新幹線(こだま)も止まる新倉敷。
倉敷駅と何が違うって?
倉敷はアリオ酒津公園天領倉敷Scalaくらいしか目玉はありません。
しかも天領倉敷Scalaに至っては前回の活動から一年が経とうとしています。
そこで通は新倉敷。
新倉敷の素晴らしいところを2つご紹介します。

まず焼肉 ポプラのホルモンうどんが抜群うまい。
焼肉屋に言ってホルモンうどんを食べる通っぷり。
勿論、焼肉も最高に美味しいです。
しかもボリューム満点。
女性には多すぎるかもしれませんね。

そして新倉敷と言えばこれ

アミューズメント ファンタジスタ

このリンク先のモダンなサイトからもわかるように玄人からお子様まで楽しめるゲームセンターです。
まずなにがすごいって

レトロゲームがすごい

これです。
3rd、KOF98、ヴァンパイアセイヴァーなどなど。
発売から10年経ったタイトルが現役稼働中です。
しかもイベントまでやってます!
イベントでは大会も勿論、フリープレイやプレイヤー同士の交流などお楽しみが沢山!
しかも格ゲー以外にもパカスペやデカスロンなど往年のレトロゲームがあなたを迎えてくれます。
この環境は京都の聖地、アチョーや関東の雄のミカドに勝っていれど劣ってはいません。
そして更に

最新ゲームもすごい

なのでKOF13やギルティAC+Rなどのネシカの最新格ゲーから音ゲーまで安心して遊べます。
しかも格ゲーはdefaultが破格の50円!!
ワンプレイ100円が当たり前の昨今にこんなゲーセンが他にありますでしょうか。
少なくとも近隣200キロ以内にdefaultが50円のゲーセンは知りません。
そして最後は

店長がすごい

これです。
常にユーザ視点で色んな裏方をやってくれます。
最近ではUstや対戦動画の録画などを無料でやってくれます。
大会やゲームのイベントしたいけどどうすればわかんない…と言う方は店長はTwitterをしてますのでリプを飛ばして見ては如何でしょうか?

@amfantasista

これで新倉敷の素晴らしさ伝わりましたね!!

3 平日勉強会がアツい!

そして最後は平日勉強会です。
岡山と言えば勉強会が盛んです。
毎週週末は色んなジャンルの勉強会が開催されています。
毎月開催のオープンラボ岡山を始め、中国地方DB勉強会など魅力的なコンテンツばかりです。
しかし更に今、注目を浴びているのが平日勉強会です。
ここで例を2つほどご紹介します。

岡山Python勉強会(通称おっpy)
okayama.rb(通称ハンバーグ会)

です。
おっpyは主催者である@yamayama_k5さんに会場を提供して貰いながら行っています。
またoogle+ ハングアウトでの遠距離参加も可能で簡単に参加することが出来ます。
今年は基礎となるチュートリアルをみんなでハンズオンしたり、今月はSphinxについて学習しました。
来年はDjangoやGAEなどを触っていく予定です。
また気軽にTwitterでおっpyと言っても勉強会のことなので恥ずかしがる必要がありません。
これは篠崎愛ファンなら参加せざるを得ないでしょう!!

そして最後はハンバーグ会です。
軍団長(本人非公認)率いる瀬戸内変態クラスタ闇の軍団のメンバーの中でも #R社 と呼ばれる人たちが中心でやっています。
ハンバーグを食べながら初心者のRubyの開発環境のインストールを手伝ってあげたり、かと思えばテストをガッツリ書いたり。
Rubyをしっかり楽しめる会となってるみたいです。


以上の2つは今流行?のゆるふわ系勉強会です。
興味がある方はお気軽にご参加ください。

ということで僕が大都会で通勤をして気付いた3つのこと如何でしたでしょうか。
また25日間続いたアドベントカレンダーもこれで最後です。
来年も大都会がどんどんおもしろくなると思います。
今後もご愛顧をよろしくお願いします。

2013年12月22日日曜日

みんなが来るべきたった一つのイベント ~オープンセミナー2014@広島の紹介~

この投稿は、すごい広島 Advent Calendar 2013の22日目の記事です。

昨日はshow_55さんの「酒都・広島はビール好きにもウヒョーだぞ!(´∀`)」でした。

さて表題のオープンセミナーについてですが以下のとおりです。
去年のまとめはこちら

オープンセミナー2013@広島を開催して

そしてみんながMLに投函したりブログに貼り付けたりしやすいようにまとめました
(オープンセミナー2014@岡山の実行委員長のハーレムさんが)
以下内容です。

オープンセミナー2014@広島が、2014年2月1日(土)に開催されます。
※オープンセミナーとは2003年より中四国地域で開催されているIT技術者向けの非営利の無料セミナーです。
現在は香川県、岡山県、徳島県、**広島県**、愛媛県で開催されています。企画と運営は各地域の技術系ユーザコミュニティのボランティアにより行われています。

告知サイト:http://osh-2014.github.com/
申込サイト:http://osh-web.doorkeeper.jp/events/7534

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
開催内容
──────────────────────────────────
オープンセミナー2014@広島

◆ 2014年2月1日(土)
場所 : 広島市中区大手町 1 丁目 5-3 サテライトキャンパスひろしま 大講義室 502
参加費 : 無料(懇親会:3500円)
主催:PostgreSQLユーザ会
オープンセミナー2014@広島実行委員会

受付開始 9:30-
勉強会 10:00-17:30
懇親会 18:00-20:00

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
懇親会について
──────────────────────────────────
◆懇親会
場所:ShakeHands
広島県広島市中区紙屋町1-4-6 アウルスタイル紙屋町 3F
HP[ http://www.shakehands.jp/ ]
時間:18:00-21:00
会費:3,500円

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
お申し込みについて
──────────────────────────────────
以下の申込サイトからお申し込みをお願いいたします。
セミナー:http://osh-web.doorkeeper.jp/events/7534
懇親会:http://osh-web.doorkeeper.jp/events/7544

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
主催
──────────────────────────────────

日本PostgreSQLユーザ会 http://www.postgresql.jp/
オープンセミナー2014@広島実行委員会 http://osh-2014.github.io/members.html

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
協賛
──────────────────────────────────

◆プラチナスポンサー
株式会社オレンジシステム広島 http://www.orange.co.jp/

◆シルバースポンサー
株式会社まほろば工房 http://www.ate-mahoroba.jp/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
後援
──────────────────────────────────

広島工業大学 http://www.it-hiroshima.ac.jp

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
協力
──────────────────────────────────

Hiroshima.rb http://hiroshimarb.github.io/
すごい広島 http://great-h.github.io/
中国地方DB勉強会 http://dbstudychugoku.github.io/


こんだけ丁寧にまとめてあるとイベントの内容については特に説明することないと思います。
強いて言うならJPUGが主催で私の所属してる会社の株式会社まほろば工房
ほんとコミュニティにも職場にも恵まれてると感じます。

と言うわけでこんだけ凄いイベント、そりゃ県内外問わず来ちゃいますよね。
そこで来た人に知っていて欲しい広島事情書いときます。

■会場の近くで食べれるオススメお食事処

・広島人が勧める最強のお好み焼き屋

広島と言えばお好み焼き。
そこに多くの言葉はいらない(以下紹介

長久
会場からちょっと歩くけど行ける距離。
八昌が広島の超有名店だけどその暖簾分け。

みっちゃん
広島が誇る超強力お好み焼きグループ「みっちゃん」
その総本店がここ。
会場の近くにはそごう店や八丁堀店があるので状況に合わせてどうぞ。

三八
会場から遠いし車必須の距離だけど知ってる人は知っている広島の名店。
ここは無理して行くだけの価値があると思います。
自分の実家から近いので墓参りの時とか行きます。

ねぎ庵
ここも会場から遠いし車必須だけど広島インターの近く。
車で高速経由で行く時によく寄ります。
ここのネギかけやチーズ入りは絶品。
お店の雰囲気もおしゃれで店内も広いのでオススメ。

・辛口つけ麺

広島と言えば辛いつけ麺。
冷たい麺でツルッといただくつけ麺は季節を問わず美味しいです。
その中でも会場から近くてオススメを二店ほど。

唐々亭
そんなに辛くないし食べやすいつけ麺。
僕の周りでは愛好家が多いです!

辛部
妻も絶賛のつけ麺。
僕も市内に来た時はよく寄ります。

・会場から徒歩1分の天津飯

蓬莱
会場の目の前にあるサンモールの地下にあります。
並んでてもわりとすぐ空くのでオススメ。
ここは天津飯を食べましょう。
ラーメンではなく天津飯を食べましょう(大事なことなので二回言いました

・実行委員長(ひむひむ)がオススメの店
おっくん堂
ここのまぜ麺が超絶オススメらしいです。
僕は次の日にでもこの機会に行ってみようと思ってます。

・地元の人は?
サンカレーとかじゅこんとかいけばいいんじゃないかな!

■観光スポットとか

今年や去年のアドベントカレンダーを見るといいと思います。

すごい広島 Advent Calendar 2013
おいしい広島Advent Calendar 2012

■おみやげとか

トロ君のまとめ

今すぐ買いたい!? 広島でよく買う4つのお土産とこれから買いたい2つのお土産(銘菓編) – すごい広島Advent Calendar 2013 16日目

もいいけどやっぱ通はこれ、洋酒ケーキ
洋酒ケーキって何かというとアンガールズの田中の出身地、天領上下町の銘菓。
おみやげにする場合はひろしま夢プラザとかで買うのがいいと思います。
電話で注文も出来るみたいなので興味がある人はどうぞ。

くにひろ屋

お食事処良し!観光して良し!おみやげ買って良し!三拍子そろった広島県。
そんな広島県に旅行するつもりでオープンセミナー2014@広島に参加してみませんか?
当日、皆様にお会いできるのを楽しみしています。

さて明日はpecosantoyobeさんです。
引き続きすごい広島 Advent Calendar 2013をお楽しみください!!



最後まで読んでくれた人に極秘情報。
あの伝説のLT…TDDの続編を #た さんがオープンセミナー2014@広島の懇親会でやるらしいよ。
これは新しい伝説が生まれるでぇ…

ということでこちらに興味がある方は是非、懇親会に参加しましょう!!

2013年12月21日土曜日

Webアプリケーションを作るときに知ってると嬉しいPostgreSQLの使い方

この記事はPostgreSQL Advent Calendar 2013の21日目の記事です。

昨日はsawada_masahikoさんの「bgwokerで超簡易クラスタ管理」でした。


さて最近、自分の周りではMySQLからPostgreSQLに移行したと言う方が多いです。
AWSのRDS For PostgreSQLも出たのでDBは得意じゃないけどPostgreSQLを使ってみようかなと言う方も多いと思います。
なので今日はそんな人向け(PostgreSQL初心者から中級者向け)です。
(他のアドベントカレンダーが濃いのでたまにはこんなのもいいですよね?^^;)

それでは早速紹介していきます。

■serial型なユニークキーがあるときに最新の情報を取ってくる

これですが最新情報を取ってくるのにdate型やtimestamp型をソートしてるのを見かけます。
これをユニークキーに変えるだけです。
ユニークキーは主キーの時もあるでしょうしサロゲートキーでもいいです。
つまりこれを
SELECT * FROM table_name ORDER BY created_at DESC limit 1

こうするだけ
SELECT * FROM table_name ORDER BY primary_key DESC limit 1

で更新順になっているので同じです。
例えば特定のユーザの最終コメントを取ってくる場合などは
SELECT * FROM comment WHERE user_id = :user_id ORDER BY primary_key DESC limit 1
となります。
ただしinsertが次々行われる前提でupdateによって最新のデータが変わる時には使えません。
応用技として自分以外の最新を取ってくるなどはこうです。
SELECT
  *
FROM
  comment
WHERE
  comment_id in (
    SELECT
       max(comment_id) as comment_id
    FROM
      comment_id
    WHERE user_id != :user_id
    group by
      user_id
  )
自分以外の最新のcomment_idを取得しin句に投げてるだけですね。
PostgreSQLは表示させたいcolumnはGROUP BYで指定するか集約関数内でしか使えません。
MySQLからPostgreSQLに来た時によく躓くところですので注意が必要です。
(逆にこのMySQLの仕様はSQLアンチパターンのアンビギュアスグループの原因になりますね)
またMySQLではサブクエリはご法度とよく言われますがPostgreSQLのサブクエリは高速です。


それと先ほどGROUP BYの話をしましたが集約関数を直接呼ぶ場合は必要ありません。
つまり全体の最新レコードを取ってくる場合は
SELECT max(comment_id) from comment_id;

となります。
GROUP BYはコストが高いので使わなくて済む場合は使わない方がいいです。

■ランキングを取ってくる

ウインドウ関数をご紹介します。
リンク先で説明されているのですがそれだけではブログが寂しいのでこちらでもします。
ちょっと応用してPARTITION BY と ORDER BYをつかってグループ毎のランキングを出してみます。
次の画像のようなデータがあるとします。


この場合にcustomer_id毎のランキング(同率の場合は番号を飛ばす)は次のとおりです。
SELECT
SELECT
  user_id
  , customer_id
  , score
  , rank() OVER (PARTITION BY customer_id ORDER BY score) 
FROM
  "user" 
※userが予約後だったのでダブルクォーテーションで囲いました
この結果はこちらです。


自分は同様な集計をMySQLで必要となった時非常に苦労しました。
その時はSQLがかなり複雑になってしまいました。
そのためメンテナンス考え、SQLだけで解決せずにPHPを使いました。
ですが上記のSQLならメンテナンスも十分耐えれますね!!
またLet's Postgresに面白い例が掲載されているのでご紹介します。

Let's Postgres Window関数

上記のリンクの先にありますが連番になっていない(歯抜け)のレコードも次のとおり取り出せます。
SELECT
  id,
  prev_id
FROM 
  (
    SELECT
      id,
      lag(id, 1, 0) OVER (ORDER BY id) AS prev_id
    FROM tbl
  ) AS t
WHERE id <> prev_id + 1;
となります。
本来は難しいSQLをこんなに簡単にしてくれます。
ウインドウ関数の強力さを感じていただけましたでしょうか。

■対象だけをユニーク制約(一意インデックス

要望として次の例があると思います。


  • ユーザのマスターはメールアドレスでユニークにしたい
  • 削除は論理削除としたい
  • 削除された場合はユニークの対象としない


普通にユニーク制約をメールアドレスにすると削除フラグを立てたあとも新しく同メールアドレスで追加できません。
なので複数列を使ったユニーク制約が必要になります。
例えばRailsっぽくするとメールアドレスとdeleted_atですね。
defaultはdeleted_atを空白として削除された際はdeleted_atに削除日を入れます。
※defaultをNULLとした場合、NULLは値では無いのでユニーク制約にかかりません。
(NULLとNULLを比較した場合はNULLが返る=一緒ではないため)
これによってdeleted_atが空白=有効と判断できますしユニーク制約も生かせます。
ただし「削除日が同一(timestampの場合は全く同じタイミング)の時」にerrorが出ます。
なかなかあり得ないと言えますがスマートではありません。
そこで一意インデックスを使います。
INDEXにはWHERE句で対象を絞ることができます。
つまりユニークである対象を指定することができるのです。
しかもこの場合はdeleted_atはNULLでも構いません。
例えば

table名:user
ユニーク列:mail
削除フラグ:deleted_at

の場合は

CREATE UNIQUE INDEX user_idx ON user (mail) WHERE deleted_at IS NULL;


こうです。
これはdeleted_atがNULLのuserが対象になります。
この応用は他にもたくさん使うことができますので是非研究してみてください。
※ただし一意INDEXが作れるINDEXはB-treeのみです
(配列型等には向いていませんね)
他にも色々と注意点があるので公式ドキュメント(日本語)を一読するのをオススメします。

■知ってると便利な型

さて最後はPostgreSQLの多種多様な型の話をしようと思います。
方についてはchoplinさんが1日目7日目にもお話してくださっています。
なので今日はそれとは別の角度で型を紹介していきます。

連番型
MySQLでいうところのオートインクリメントな列をつくります。
正確にはinteger(整数データ型)のデフォルトにsequenceのnext valueが指定されています。
つまり連番なKEYの列を作るときにシーケンス作成→列の作成とデフォルトを指定、といった手間を省くことが出来ます。
地味にtableを作るときに面倒な作業が一気に解決します。

ネットワークアドレスデータ型
最近使いました。
こいつ凄いです!
まずIPアドレスを表現するinetとネットワークを表現するcidrがあります。
両方共 IP/サブネットマスク で指定できます。
つまり 

192.168.0.1/32

のような形で指定できいます。
また不正なIPアドレスは当然弾いてくれます。

例 192.168.0.300/24

これだけならサブネットマスクとIPアドレスを別の列にしてテキスト型でも表現出来ると思いますね?
(IPアドレスの整合性はバリデーションするとして)
本当に凄いのはデータを入れたあとです。
まずIPアドレスの最初の鬼門はソートです。
テキスト型だとソートの際に次のようになると思います。

192.168.0.1/24
192.168.0.111/24
192.168.0.12/24

ほんとは192.168.0.111は一番下ですよね?
これもちゃんと対応してくれます。
次にすごいのは検索です。

ネットワークアドレス関数と演算子

ちゃんとネットワークに合わせて比較して抽出等が出来ます。

「192.168.10.0/24のネットワークってあと何個IP余ってるの?」

みたいな要望にもこの型でIPを管理していればすぐ答えることができます。
業務管理系のアプリ作成やApacheのログの整形時に役立つ事まちがいなしです!
しかもコレ、IPv6も対応してます!!!!

配列型
私のお気に入りです。
ホントはこれを今回のメインに据えようと思ってたのですが初日でchoplinさんが紹介してます。
さらに大垣さんが13日目にまさに説明したかった内容を書いてくれてます

タグ検索するならPostgreSQLで決まり

交差tableを必要とする場面で有効なことが多いです。
特にWebアプリケーションでは助けてくれる場面が多いのではないでしょうか。
(アンケートのチェックボックスの列など)
ただし外部キー制約が必要な場合やデータの重複を避ける際などは素直に正規化しましょう。
強力な武器ですが使い過ぎは毒になる典型的な例です。

範囲型
次は悩んだ人も多いのではないでしょうか?範囲指定の強い味方です。
範囲型は数値以外にも日付型を使うことができます。
よく要望のあがる

「公開日付の開始日と終了日」

を入れることができます。
当然、両方とも指定しないことも出来ます。
こいつの威力を発揮するのは「範囲と範囲の比較」をする時です。
例えば公開期間に対して

1月1日~2月1日うちで公開しているリストを出す

などの場合です。
特に重複(共通点を持つ)をプログラムで表現するときは発想の転換が必要です。
(純粋に重複するか判断するのは大変なので重複以外で考えた方がいい)
そんな煩わしさも簡単な演算子で比較することで解決できます。

範囲関数と演算子

また範囲の最大値、最小値も求めることができますし開始日を指定しない場合は即日反映、終了日を指定しない場合はずっと公開などもそのまま対応することができます。
また単位を独自に指定することもできます。

例 10刻みのintなど(10 20 30 40)

カレンダーの処理や公開期間の処理はよく対応する処理です。
アプリケーションが非常にシンプルになりますので是非ご活用ください!!

PostgreSQL Advent Calendar 2013の18日目のyancyaさんがもっと詳しく書いています。
範囲型の良さがすごく分かりやすく書いてありますので是非一読してみてください。

PostgreSQL の範囲型について


幾何データ
最後の幾何データ型は地図上の検索を簡単にしてくれます。
実は二年前のアドベントカレンダーで紹介しました。

postgresqlを使った位置情報の計算について

postgresqlを使った位置情報の計算について  その2

JavaScriptがイケてないし色々と知らいないことも多かった時期のエントリーなので改めてここで説明したい…と思ったのですが随分長くなったので次の機会にw
ただ緯度経度に対する範囲検索などは需要があるようで未だに上記のエントリーがそこそこViewがあります。
PostgreSQLの幾何データ型は非常に強力で他のDBの追随を許さないレベルです。
例で近似値を使ってますがより精度が必要な場合はPostGISを使うことで対応することが出来ます。
geometry型はGoogle Mapsなどと相性は抜群です。
Let's PostgreSQLに農研機構の寺元さんの記事があるので参考にどうぞ。

PostGISとは?



さて色々とご紹介しましたが一つでもみなさんの新しい知識になっていただけましたでしょうか。
冒頭でもご紹介しましたとおりAWSでもPostgreSQLを使えるようになりました。
またHerokuなどもPostgreSQLを使うことが出来ます。
今までWebと言えばMySQLでしたがPostgreSQLで便利になるシーンもあると思います。
MySQLのシンプルで高速さも非常に強力ですがPostgreSQLの高機能と堅牢性も非常に強力です。
今ではオートバキュームもあり運用も楽になっていますし検索はMySQLに負けていないほど高速です。
レプリケーションやパーテーションも対応していますしKVSなtableも作れます。
まだまだ奥が深いPostgreSQLをこの機会に興味を持って頂けたらと思います。

それと最後に宣伝。

2月1日に広島で以下のイベントが行われます。

オープンセミナー2014@広島

◆ 2014年2月1日(土)
場所 : 広島市中区大手町 1 丁目 5-3 サテライトキャンパスひろしま 大講義室 502
参加費 : 無料(懇親会:3500円)
主催:PostgreSQLユーザ会
オープンセミナー2014@広島実行委員会
受付開始 9:30-
勉強会 10:00-17:30
懇親会 18:00-20:00
告知サイト:http://osh-2014.github.com/
申込サイト:http://osh-web.doorkeeper.jp/events/7534


自分はAWSのRDS For PostgreSQLの話をします。
近場で興味がある方は是非ご参加ください!!


PostgreSQL Advent Calendar 2013もついに最終週です。
明日はいつも一風変わったネタを紹介してくれるnuko_yokohamaさんです!
どんなネタが飛び出すか楽しみですね!!
それでは引き続き、PostgreSQL Advent Calendar 2013をお楽しみください。

2013年12月13日金曜日

FuelPHP(TwitterBootstrap3)でJQueryのプラグインのdataTablesを使う

FuelPHP Advent Calendar 2013の13日目です。

昨日は@madmamorさんの

FuelPHPでChatWorkパッケージを使ってみる

でした。
私もチャットワークのAPIを利用できるようになったのでこの週末に早速試してみたいと思います。

それでは今日のお題ですがdataTablesです。
Webアプリを作るとき、業務系の管理画面を作るとき、FuelPHPの軽量さと作りやすさは強力です。
私もここ最近のWebアプリケーションはFuelPHPで作ることが大半ですね。
その中で特に管理画面を作るときはTwitterBootstrapは非常に便利です。
皆様も日頃お世話になっていますよね?
また今日ご紹介するdataTablesも強力なJqueryのプラグインです。
dataTablesはhtmlのテーブルタグを読み込み、ソートや検索を始め、多くの機能を提供します。
この2つを組み合わせることで表出力が簡単で便利になるのでご紹介します。

dataTables

日本語まとめwiki


TwitterBootstrapでdataTablesを使う

ただ、TwitterBootstrapもFuelPHP1.7で2から3に変わりました。
TwitterBootstrap3は2と互換性のない変更が多く、過去の資産が使いまわせません。


※TwitterBootstrap3用の書籍で非常にわかりやすかったのでオススメです

DataTablesも例に漏れず上記の方法では無理です。
TwitterBootstrap3のUIに合わせるのには公式サイト以外の方法が必要です。
とは言ってもすでに3用のプラグインが作成されています。
そこでdataTablesの簡単な使い方とTwitterBootstrap3のUIに合わせる方法をご紹介します。

まずは最新のソース・ファイルをFuelPHPに配置します。

GirHub dataTables

本体
https://github.com/DataTables/DataTables/blob/master/media/js/jquery.dataTables.js

Bootstrap用CSS
https://github.com/DataTables/Plugins/blob/master/integration/bootstrap/3/dataTables.bootstrap.css

Bootstrap用JS
https://github.com/DataTables/Plugins/blob/master/integration/bootstrap/3/dataTables.bootstrap.js

Bootstrap用image
https://github.com/DataTables/Plugins/tree/master/integration/bootstrap/images

これらをpublic/asset/のそれぞれに配置します。
ここで注意があります。
FuelPHPの画像を置く場所はデフォルトはimgです。
ですがCSSのファイルパスはimagesになっています。
これを下記のとおり変更します。
table.dataTable thead .sorting { background: url('../images/sort_both.png') no-repeat center right; }
table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; }
table.dataTable thead .sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; }

//変更

table.dataTable thead .sorting { background: url('../img/sort_both.png') no-repeat center right; }
table.dataTable thead .sorting_asc { background: url('../img/sort_asc.png') no-repeat center right; }
table.dataTable thead .sorting_desc { background: url('../img/sort_desc.png') no-repeat center right; }


これでasset/imgに配置してもソート用の画像が読み込まれます。

あとはTableにIDを降って


var Table = $('#table_id').dataTable();

とすれば自動的に読み込んで整形してくれます。
これでよく要望に上がるソート・ページャー・サーチを一度に対応することが出来ます。
更によりBootstrapっぽくするには


var Table = $('#table_id').dataTable({
    //日本語対応したい場合はGithubのpluginから該当のファイルをダウンロードしてください
    oLanguage: {
        sUrl: "/assets/js/plugins/i18n/Japanese.lang"
    },
    //Table生成後に実行されます
    fnInitComplete: function() {
        $('#table_id').each(function() {
            var datatable = $(this);
            //サーチのinputタグをよりBootstrapUIよりに
            var search_input = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_filter] input');
            search_input.attr('placeholder', 'Search')
                    .addClass('form-control input-sm');
            //表示列数の表示をよりBootstrapUIよりに
            var length_sel = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_length] select');
            length_sel.addClass('form-control input-sm')
                    .change(function() {
                        oFC.fnRedrawLayout();
                    });
            oFC.fnRedrawLayout();
        });
    }
});

とするといい感じになります。
他にもdataTablesには多様な追加機能がpluginとして用意されています。
公式サイトは情報が古かったりするのでGitHubのサンプルのindex.htmlも参考にしてみてください。

さてFuelPHPの良いところ言えばRESTControllerですよね。
またdataTablesはデータをJSONで受け取ることが出来ます。
大きいdataでもAjaxでJSONを受けることができるので肥大したTableでも対応することが出来ます。
今日は13日の金曜日ですしJSONを使った例もご紹介します。

簡単な例ですと


var Table = $('#table_id').dataTable({
    //読み込み中の表示
    bProcessing: true,
    //dataを全て読み込む前に表示を始める
    bDeferRender: true,
    //読み込むJSONのURL(RESTControllerのURL)
    sAjaxSource: "/api/dataTables.json",
    //配列名(デフォルトはaadata)
    sAjaxDataProp: "setJson",
    //表示列とjsonの項目をマッピングします
            aoColumns: [
                { mData: "id", sDefaultContent: "" },
                { mData: "name", sDefaultContent: "" },
            ],
    oLanguage: {
        sUrl: "/assets/js/plugins/i18n/Japanese.lang"
    },
    fnInitComplete: function() {
        $('#table_id').each(function() {
            var datatable = $(this);
            //サーチのinputタグをよりBootstrapUIよりに
            var search_input = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_filter] input');
            search_input.attr('placeholder', 'Search')
                    .addClass('form-control input-sm');
            //表示列数の表示をよりBootstrapUIよりに
            var length_sel = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_length] select');
            length_sel.addClass('form-control input-sm')
                    .change(function() {
                        oFC.fnRedrawLayout();
                    });
        });
    }
});

としてRESTControllerは


public function action_dataTables() {
        $aadata['setJson'][] = ['id'=>1, 'name'=>'hage'];
        $aadata['setJson'][] = ['id'=>1, 'name'=>'fuga'];
        return $this->response($aadata);    
    }
といった感じでいつもどおり配列を渡してJSONを生成するだけです。
htmlは次の通り
id name
とするとtbodyの内容をJSONを元に自動生成してくれます。
もちろん作りこみ次第で例の最初に全て読み込むのではなく、APIとViewが連携して適時やりとりすることが出来ます。
このAPI側が非常に簡単につくれるのはFuelPHPのメリットです。

以上のようにFuelPHPとdataTablesの相性は抜群です。
是非、公私でアプリ作成時に試して見てください!

それで引き続きFuelPHP Advent Calendar 2013をお楽しみください!!

2013年12月7日土曜日

おみゃー広島弁が安芸弁だけ思うたら大間違いよ ~今日から使える備後弁~

この記事は「広島弁 Advent Calendar 2013」の7日目の記事じゃ。

昨日はairplanetrackさんの「聞くとほっとするんよ」じゃったわ。
やっぱ広島弁は最高やね。

で今日もそれに続いてやるけぇ見んさいよ。
ほいじゃあまず備後弁についてはここみんさい。


最近のAppleの偉い人は安芸弁みたいじゃけど通は広島弁の中でも備後弁よ。
みんなも今日から備後弁使えるようにえぇがに使いやすいのまとめといたるわ。


1 ぼれぇ(意味 凄い・とても

ぼれぇ is キングオブ備後弁 と言っても過言やない。

安芸弁:バリ・ぶち
備後弁:ぼれぇ

ほれ、並べてみただけでもインパクトが全然違おうが。
合コンで

「とても素敵!!」


「ぼれぇ素敵!!」

するだけで完璧。
これでヤングなナオンのハートをイーグルキャッチよ。

2 たちまち(意味 とりあえず

安芸弁でも備後弁でもたちまちは標準装備よ。
居酒屋言ったらそこら中で「たちまちビール」の応酬よ。
広島の店で「とりあえずビール」なんて言うた日にゃ他所様扱いよ。
地元の雰囲気を楽しむならまずは「たちまちビール。」これやね。

3 わや(意味 無茶

無茶苦茶なら「わやくそ」よ。
安芸弁でもあるで。
もう正直備後弁関係にゃーね。

4 みやしぃ(意味 簡単

反対に難しい時は「いたしぃ」じゃわ。
こんな案件だけど納期収まる?って聞かれたら

「そりゃみやしぃけぇ余裕のよっちゃんよ。」

って答えんさい。
一気に信頼関係が作られるけぇ。

5 たいぎぃ(意味 面倒くさい

これすぐみんな言うけぇね。
「ぼれぇたいぎぃ」って言い出したらそりゃもう相当嫌よ。
周りの人が言よったらよっぽどいたしぃことになっとるけぇ相談のってやんさい。


ホントはまだまだあるんじゃけど今日はこれくらいにしとくわ。
明日は広島県外でも超有名ブロガーのかけなびさんじゃけぇみんな楽しみにしときんさいよ。
ほいじゃあ最後は元WBA世界ミドル級王者の竹原さんをインスパイアして締めるけぇの。



じゃあの。