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世界ミドル級王者の竹原さんをインスパイアして締めるけぇの。



じゃあの。


2013年11月23日土曜日

【バグ報告】FuelPHP1.7のRESTControllerの挙動について

バグ見つけました。
前回の

【バグ報告】FuelPHP1.7でViewModelが二回実行される


につづいて1.7のバグです。
前回も今回も1.8Dev版で治っており、コミュニティには報告されているため1.7.1では改修されてリリースされます。

対象 FuelPHP1.7(2013/11/23現在)

現象としてはURLで

/method.json

とアクセスするとJSONが本来吐かれますがこれを

/method

等の拡張子を指定せずに

HEADERS Accept text/html

の時には $response->body() の中がArrayになります。
具体的には直接拡張子をブラウザでアクセスした場合に発生します。
が本来はStringを期待してるのにArrayが来るのでエラーになります。
つまり結論から言うとFuelPHPのRESTControllerはHTMLの拡張子の実装はされていません。
ドキュメントには「シンプルなテーブルタグを吐き出す」となっていますが元々var_dumpしているだけでした。
これが1.7でvar_dumpすらせずにエラーになっていました。

対策としてはHTMLの実装が無いので必要なければ

/classes/controller/rest.php

--- a/classes/controller/rest.php 
+++ b/classes/controller/rest.php 
@@ -55,7 +55,7 @@ abstract class Controller_Rest extends \Controller 
        'jsonp'=> 'text/javascript', 
        'serialized' => 'application/vnd.php.serialized', 
        'php' => 'text/plain', 
-       'html' => 'text/html', 
+     //'html' => 'text/html', 
        'csv' => 'application/csv', 
    );   

'html' => 'text/html', をコメントアウト

と修正するのがいいと思います
今回はfuelphp_jpのMLに投稿してみました。
詳しい情報としてはこちら。

1.7のRESTControllerの挙動について(ML)

今回はMLに投稿してみました。
1.7.1や1.8の修正としては

  • HTMLはvar_dumpを実行すると言う仕様で統一する
  • ドキュメントはそのように修正する

という方針になったようです。
Githubのプルリクは英語必須でGitやGithubの使い方を覚えなきゃいけないのでハードルが高いと思います。
(まぁ間違ってたりしたらコメントくれてプルリク弾かれるだけなので気にせずガンガン練習がてらプルリク投げてもいい気もしますが)
ですがMLは日本語だしレスポンスも割と早いのでバグだったり質問は気軽に投げてみたらいいと思います。
僕も今回は優しく対応していただきました^^
と言うことでバグを見つけたらMLで報告。
バグかな?って思ったらMLを見てみる。
こんな流れで地雷を上手くさけて行ける気がしました。
と言うことでみなさんも是非ご参加ください!

FuelPHPの日本語グーグルグループ

  

2013年11月4日月曜日

CakePHPを使う人は是非とも読むべきレシピ本

CakePHP2定番レシピ119」をを読みました。




の本、結論から言うと『かなり良い』です。
理由としては以下のとおり3つ。

1 デバックのやり方がしっかり書いてある

よくある技術書は「うまく行った時の書き方」が書いてあるモノが多いです。
フレームワークは利用時に上手くいってる時は良いのですがハマった時に非常に苦しみます。
そこでデバックのやり方を知ってるか否かで効率は大きく変わってきます。
コードを書いてる時にミスをしない人は稀です。
そういった点からみて、まずデバックのやり方を書いてあるのは実際に使う際に非常に助かります。

2 セキュリティに配慮したレシピが多く書いてある

フレームワークの本は使い方を書いてあってもセキュリティについては書いてあるものは少ないです。
しかし現状ではセキュリティは考慮すべき項目でWebエンジニアとしては非常に重要な項目です。
このレシピ本はXSSへの対策をはじめ、SQLインジェクションなど対策として欠かすことの出来ない項目をしっかりフォローされています。
特にデータベースの扱いはモデルの章としてデータの扱いも含めて非常に細かく記載されてます。
ORMやクエリビルダを使ったことの無い方も必見です。

3 使いたいレシピがしっかりある

最後ですがプログラマーからするとこれが一番重要です。
どの技術書も読んで「へーこんなことがあるんだ」と思うことは多いでしょう。
ただそれが「あっこれ、○○で読んだやつだ!」と感じるシーンは少ないのでは?
このレシピ本は即戦力の情報が満載です。
例えば今までViewでSmartyを利用していた場面でのhelperの使い方。
またページャーやバリデーションの使い方などです。
これらは読んで今日から利用する機能でしょう。
そういった知識が事細かくフォローされています。
これは他のフレームワークの経験がある人にも非常に大切なことです。
このレシピ本なら「○○ではこうやって出来たけどCakePHPはどうやるの?」と言った疑問に答えてくれるでしょう。

■まとめ

CakePHPはPHP界隈では利用例も多く日本語情報も多いです。
ですがそれ故に1系の頃の「使えない情報」も多いのが現実です。
特にレシピ的なことは個人のブログが情報源になっており、ヴァージョンアップに伴う更新も行われていないと思います。
これからCakePHPを使いたい人も然ることならが「今までCakePHPをガンガン使ってた人」も2系の情報を仕入れるためにも一読して損はないかと思います。
これを読めば「あーこれってこうやると簡単になるんだ。」という新しい知識に出会えると思います。
私もこの本は会社の机の上に常備しています。


2013年10月25日金曜日

【バグ報告】FuelPHP1.7でViewModelが二回実行される

FuelPHP1.7出たので早速使ってみて早速バグを踏みました。
皆さんには同じ悲しみを抱いて欲しくないので情報共有しておきます。


対象 FuelPHP1.7(2013/10/25現在 俺の誕生日

■現象
上記のバージョンのFuelPHPのViewModelが2度実行されると言うものです
例えば現象として

  • ViewModel中でInsertすると二個データが入る
  • ViewModel中でValidation::forge();などを呼ぶと二度目の呼び出しでerrorが発生する

などが発生します。
こちらについてはfuelphp_jpのMLでも話題になってました。

1.7 の viewmodel の挙動について - Google Groups


対策は public/index.php の75行目あたりに以下のとおり

// Render the output
$response->body((string) $response->body());

を追記してください。
また下記のリンクも参考になります

Github

こちらは1,6や1.8/developでは修正されています。
該当のバグに出会ったときはバージョンを帰るか上記のとおり、ソースを修正してみてください。

2013年10月9日水曜日

中国地方でPostgreSQLが流行らないのはどう考えても俺が悪い

題名ですが元ネタ知らないです、ツッコミ厳禁です。
というわけで第二回 中国地方DB勉強会OSC広島と連日 遊びに 支部長業しに行きました。
その時のことを個人的主観でメモっておきます。

■まずは感想とか

広島県内在住とは言え、大都会岡山より遠い広島に行ったので結構アウェイ感はありました。
特に両イベントとも事前登録が少なく、非常に不安な状態でした。
これは中国地方全体に言える問題で主催者としては大きなイベントで講師を招いてる場合はかなり辛いですw
懇親会に行かないから予約要らない→飛び入り参加もアリなのですが出来ればある程度早めに登録してくれると嬉しいと思ってます。
当然「事前までスケジュールが分からない」とか「コンテンツが魅力的じゃないから迷ってる」などあると思います。
その場合でも一応登録していただいてキャンセルしていただけたらなぁと思ったりはします。
ただ東京で問題になってる「当日ドタキャン問題」もあるので難しいところではありますが。
ココらへんは銀の弾丸どころかどうしたら良いかも分かってないので手探りで改善していきたいなと思っています。

逆に中国地方は素晴らしいなと感じるところは懇親会の参加率です。
中国地方DB勉強会では6割以上の方が懇親会に参加されました。
(OSCの前夜祭もあったので懇親会から参加された方も沢山いました)
OSCも登録された方の8割くらいが懇親会に登録してました。
これは中国地方のエンジニアは人との繋がりに飢えてるのかなと感じました。
確かに同業他社と情報を交換するチャンスは少ないです。
特にDBみたいなインフラになると「秘密保持契約が・・・」とか「チューニングとかは会社の飯のタネなので・・・」と公に交流したり情報を交換することが難しいのかなと思います。
その点を踏まえた上で中国地方DB勉強会は交流も大切なテーマにしていきたいと思います。
もちろんOSCに関してもコミュニティのサラダボウル的な場所ですから交流は大切なテーマです。
むしろWeb系も業務系もハード系もOSCを軸にもっともっと交流出来たら面白くなると思ってます。
そう言った点から来年に向けたステップアップとしてOSC2013広島は大成功だったと思います。

■次のイベントにむけて

中国地方DB勉強会もOSCも別途blogに纏めたとおりです。
ただ両イベントともWeb系が弱いなと思いました。
これはWTMやCSSNiteの盛り上がりや集客から見ても明らかです。
なので次はその人達との橋渡しが大切かなと思っています。
OSCで言えば来年はPHP(FuelPHPかMagic3かな)の話題を提供しようかなと思ったりもしてます。
ただ支部長業との問題もあるので上手く調整できればなぁと思っています。

■オープンセミナー広島2014について

ひむひむが一生懸命用意してます。
コンテンツも決まりだしてまだ言えないんですけどすっごい面白いモノになりそうです。
つか間違いなく面白いですコレ。
去年もなかなか豪華で楽しかったのですが今年も負けてないことは保証します!!
開催概要にはまだ乗ってないですが日付と場所が決まってます。


日程:2014年2月1日(日) 10:00~17:30(予定)

会場サテライトキャンパスひろしま
広島県民文化センター 5F)広島市中区大手町1丁目5-3
広電最寄駅→紙屋町西 ・ 最寄バス停→紙屋町

費用:無料
こちらも決まり次第情報を提供していくのでお楽しみにお待ちください。

■総括的なもの

兎にも角にも両イベントともすっごい充実してて楽しかったです。
なのに参加者が増えないとかPostgreSQLの話題が近場で少ないのは自分の告知力とかコンテンツの提供方法が不十分なのかなと思っています。
#これが題名につながるわけですが
来てくださったら間違いなく面白いです。
でもまずは来てもらうためには魅力を引き出す(伝える)必要があります。
この辺は今後の最重要課題だと思ってます。
お気づきの点がありましたら苦言・暴言問わずお聞きしますのでご教示お願いします。

と言うわけでしばらくはOSH(オープンセミナー広島)2014に向けてパワーを溜めながら水面下で暗躍したいと思います。

オープンソースカンファレンス2013 広島に参加してきた

今年で三年目のOSC広島に参加してきました。
当日の講師の資料がTOPページに続々と公開されてますね。

オープンソースカンファレンス 2013 Hiroshima

私は当日は色んなトラブルを乗り越えながらも無事セッションが終えました。
基本的には前回blogで纏めた内容の焼き直しです。
前回のblogは9.3の情報以外にも夏セミナーの情報も纏めてあります。

PostgreSQL9.3の最新事情


そして当日の資料はこちら



前日までは裏番組のさくらインターネットさんの圧倒的集客力により苦戦を強いられてました。
ですがDBのニーズは一定数あるようで15名程度(セッション開始時)の方々にお話することが出来ました。
(セッション中に数名の方が入ってきたので最終的にはもうちょっと多いです)
内容としてはもっと技術に即した事例とか実際のデモとか合ったほうがいいのかなと悩んでました。
ただ9.3の新機能の情報は下記のとおり情報としても多いのでそっちをキャッチアップして貰ったほうがいいなと思い、PostgreSQL自体に興味を持ってもらえるように話したつもりです。

またセミナー中にご紹介した日本語ドキュメントはこちらです。

■PostgreSQL9.3 検証レポート


新機能についてのスライドは圧倒的に下記の資料の方が良いのでこちらをどうぞ。
こちらはJPUG 2013 夏セミナーでNTTデータの藤井さんと江川さんがご公演していただいた内容です。





実は第一回 中国地方DB勉強会では大垣さんに9.3の話をしてもらいました。
こちらはセキュリティの話もあるので是非ともご拝見ください。

第一回 中国地方DB勉強会を開いてきた


ということでPostgreSQLは多くの方が最新情報を常に発信してます。
(しかも日本人が日本語で!!)
そのスタイルは大切なことですし今後も変わりません。
機会があればPostgreSQLを始めて損はないと思います。

それと告知。
OSC東京もあるのですが今年もPostgreSQLカンファレンスがあります。

PostgreSQL カンファレンス 2013

■概要
日時 2013年 11月 8日 (講演 10:00 ~ 18:00、 懇親会 ~ 20:00)

場所 AP東京八重洲通り (東京都 中央区)

講演 午前 1トラック、午後 3トラック にて14講演

参加 300名 (一般参加定員 200名 予定)

参加費  3,000円 (ローソンチケット L35899 )

主催 特定非営利活動法人 日本PostgreSQLユーザ会

こちらはガッツリPostgreSQLの実践的な話が聞けます。
実際にお使いに成られてる方はご検討してみていただけたらと思います。


ということで支部長業は今年はこれで一段落しました。
兎にも角にも今回のOSCは大盛況で良かったと思います。
次回はWeb系やPostgreSQLの実践的な話とか出来たらいいかなと思ったりはしています。
とは言え来年のことですので第四回に向けてゆっくり考えようと思います。
またOSCの個人的な感想は別途まとめようと思います。
それでは皆様、来年もよろしくお願いします。

第二回 中国地方DB勉強会を開いてきた

大好評だった第一回に続いて第二回を開催してきました。
いつもどおりJPUG主催ですがPostgreSQL以外もカバーしていきました。
以下にまとめて情報置いておきます。

■中国地方DB勉強会のポータルサイト

実はGitHub上に作ってます。
圧倒的にメンテナが足りてないのでイケてるデザインのプルリクお待ちしてます。

中国地方DB勉強会

■第二回のコンテンツ内容

第二回中国地方DB勉強会申し込みサイト

■当日のtwitterのまとめはこちら

第二回 中国地方DB勉強会 #ChugokuDB

■メーリングリスト

当日の資料や次回の告知についてはMLを使います。
興味がある方はチェックしてみてください。
講師の資料については10月15日頃にアップしようと思います。

・Googleグループ
  https://groups.google.com/d/forum/dbstudychugoku

  dbstudychugoku@googlegroups.com

■当日の動画配信

当日はUstream配信しました。
アーカイブはこちらです。

当日のUstream
 

■第二回のアンケート募集中

当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


第二回の情報は以上です。
スライド資料についてはメーリングリストで告知するので興味がある人は是非。
そして個人としてはとても楽しいセミナーでした。
特にORMとSQLの関係については個人的には下記のとおり、とても大切なことだと思ってます。

プログラマーのみんなに知ってほしい、なぜSQLが重要か。



簡単にまとめると

ORMは便利です ※ただし設計がORMに適している時に限る

これですよね。
実際にツイートしましたが以下の時はSimpleで強力です。



ですが



そもそも



webアプリケーションではあまり無いかもしれませんが業務系ではあるあるネタだと思います。
ただそれでもViewであったり、ORM側で吸収出来ることも多々あります。
ですがまだまだSQLを意識しなくてもいいようなレベルまでORMが抽象化出来ていません。
ただしORMはもっと便利になっていくでしょうしSQLだけ書くよりもどんどん効率良くなることは間違いありません。
なので両者ともにキャッチアップしていく必要があるなぁと思いました。
この2つについては火村さんときよくらさんのセッションが非常に面白かったです。

他のセッションも非常に面白く、ついつい本業の艦コレが疎かになってしまうレベルでした。
#艦コレではMySQL Clusterが使われてるらしいよ
実際にヤマサキさん、宗近さん共に非常に分かりやすく、両DBを使ったことが無い人にはとても良かったと思います。
そして急遽決まったさくらインターネットの田中社長のセッションは日ごろ聞けないことが沢山聞けました。
正直こんなこと言っていいの?って内容もあるのでUstは必見です。
#早くさくらのレンサバにPostgreSQLが対応してほしいですね!


以上のとおり、とても豪華で楽しいセミナーでした。
第三回については我が家の嫁ゲージと相談ですが年を明けてからの開催かなと思っています。
ただオープンセミナー広島もありますし間も空くので一回小さい形でやれたらいいなぁと思います。
特にconfの設定やチューニングの方法について要望が多かったのでプチで一回福山開催があってその情報のフィードバックを持って、どこかで同様のコンテンツの強化版をやりたいなと思います。
このへんについてもアンケートやtwitterのリプでご提案いただけてたらと思います。

(山陰でもやりたい!って声がありましたら開催場所さえなんとかしていただければ行きます!)

と言うわけで第三回で皆様にお会いできますことを楽しみにしております。
(第一回の時に居なかったじゃんってツッコミはなしで)

2013年9月9日月曜日

FuelPHPのクエリビルダを使いこなす

皆さん、FuelPHPしてますか?
今日はFuelPHPの多機能の中でもクエリビルダに注目してまとめます。

※下記の記載の実行環境は以下のとおりです(2013年9月9日現在
  • PHP5.5.3
  • PostgreSQL9.2.
  • FuelPHP1.6
まずクエリビルダですが公式ドキュメントはこちら

Database 使い方

基本的な使い方はこちらのブログが非常にわかりやすいです。

FuelPHPのクエリビルダを表にまとめた


さて、これだけ見れば単純なQueryについては十分使いこなせると思います。
ただ公式にも書いてなかったのですがWHERE句に関してはこれだけではありません。

$query->where('column_name_1', 'hoge');
$query->where('column_name_2', '>', 1);

//下記は同じSQLが発行される
$column_list = array(
    'column_name_1' => 'hoge',
    'column_name_2' => array('>' => 1),
);
$query->where($column_list);

//5.4以降だと配列が簡潔に
$column_list = [
    'column_name_1' => 'hoge',
    'column_name_2' => ['>' => 1],
];
$query->where($column_list);

と出来ます。
where()に直接配列を渡して実行できるわけです。
値の有無をチェックしたりループを回したりしながら何度もwhere()を呼ぶ必要はありません。
これは非常に使える場面が多いです。
それとバインディングもサポートしてます。

//公式
$query = DB::query("SELECT * FROM users WHERE username = :name")->param('name', 'value')->execute();
//param('name', 'value')→param(':name', 'value')でも動く
$query = DB::query("SELECT * FROM users WHERE username = :name")->param(':name', 'value')->execute();
//クエリビルダは':name'なら動く
>where(':name','value')->param(':name', 'value')->execute();

DB::queryを使う時はエスケープしてくれるのでこちらを使いましょう。
配列も

//公式
$query = DB::query("SELECT * FROM users WHERE username in :name")->param('name', ['hoge','fuga'])->execute();
//SELECT * FROM users WHERE username in ('hoge','fuga') ←生成Query

としてくれます。
しかしクエリビルダ自体がSQLの機能をすべて網羅しているわけではありません。
そのため難しいQueryが必要の際につまづきます。
そうなると上記のようにDB::query()とバインディングで直接SQLを記述することが多いと思います。
それだとwhere()のように柔軟にWHERE句を付け替えるのは難しくなります。
そして結果的にソースが煩雑になりがちです。
そこでこちらのブログが参考になります。

QueryBuilderで小難しいSELECT文を書くためのノウハウ #FuelPHPAdvent2012 - Dazing days

ただこちらで4.where句の右辺にMySQL関数を使いたい時のノウハウに

//  WHERE DATE(r.`rental_dttm`) >= ADDDATE( CURDATE(), INTERVAL -30 DAY ) = '1' ←生成Query
$query->where('DATE(r."rental_dttm") >= ADDDATE( CURDATE(), INTERVAL -30 DAY )', '=', true);

とあります。
これは素直に

//  WHERE DATE(r.`rental_dttm`) >= ADDDATE( CURDATE(), INTERVAL -30 DAY ) ←生成Query
$query->where('DATE(r."rental_dttm")', '>=', DB::expr("ADDDATE( CURDATE(), INTERVAL -30 DAY )"));
で問題ありません。
実際に実行されるQueryが想定通りのSimpleな形になるので運用者がクエリログを見た時も安心です。
それと生成したクエリは

$query = DB::query("SELECT * FROM users WHERE username = :name")->param(':name', 'value');
var_dump($query->compile());

で確認することが出来ます。
上記の例だと出力された:nameが'value'に置き換わって出力されます。

と以上になりますがDB接続はアプリ開発に必須です。
セキュリティと利便性を上手くとってスムーズに開発していきたいですね。

---チラシの裏---
クエリビルダのソースを含めFuelPHPのCoreのDB周りのソースを読みました。
綺麗で非常に読みやすくいい勉強になりました。
OSSはドキュメントになっていない隠し機能があることが多いので興味がある方は是非読んでみてください。

2013年8月19日月曜日

FuelPHPを仕事で使うときに知っておくべき4つのこと

こちらでもあるとおり、先月から新しい職場で働いてます。
で弊社は自分が来たことをきっかけにFuelPHPを使っています。
元々弊社はPHPならSymphonyと言うフレームワークを使ってました。
Symphonyを使ってるなら海の向こうで流行っているlaravelも考えたのですがFuelPHPを使うことにしました。
と言うことでお仕事でFuelPHPを使っているので気付いたことをまとめておきたいと思います。
個々での情報はあるのですが纏めてあるものはまだまだ少ないですしね。
またプライベートでアプリを作った時のまとめはこちら。
今からFuelPHPを触ってみたい方は下記のリンクを見るのをおすすめします。

今からFuelPHPを使う人が知るべき5つのこと+1


//2014/05/08に別記事書いたのでこちらも参考にどうぞ。

FuelPHPでセキュアな設定をする



実際に仕事でFuelPHPを使っていると「後々のことを考えるとここはキッチリしたい」って場面が沢山あると思います。
そういうところを疎かにすると負の遺産になります。
もちろん、FuelPHPはそんな時の答えをちゃんと用意してくれています。

1 環境設定による設定値の切り替え

お仕事で開発するとなると
  • テスト環境
  • 開発環境
  • ステージング環境
  • 本番環境
が用意されてますよね?
(実際はテスト環境すら無いことあるけどね...)
では実際にこれらの環境に合わせてDBであったり、特定の環境変数を切り替えたい場面は多々あります。
これらの設定をFuelPHPは分けることが出来ます。

公式ドキュメント(環境)

こちらの引用ですが
環境の設定は、サーバ変数 FUEL_ENV をセットするか、 手動で fuel/app/bootstrap.php 内の設定を変更することで設定します。 
で切り替えることができます。
つまり、Apacheのサーバ変数を設定しておけば、テスト環境で本番DBを更新するなどの問題を防ぐ事ができます。
bootstrap.phpを編集する場合は以下のとおりに

/**
 * Your environment.  Can be set to any of the following:
 *
 * Fuel::DEVELOPMENT
 * Fuel::TEST
 * Fuel::STAGING
 * Fuel::PRODUCTION
 */
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);


DEVELOPMENTの部分を変えることで切り替わります。
読み込み先の対象ファイルは

app/config/[環境別ディレクトリ]/

となります。
また環境変数が本番環境のPRODUCTIONの時とそれ以外ではerror時(例外をcatchしてない時など)の表示が違います。
具体的にはDEVELOPMENT等では該当の箇所のソースが表示されます。
PRODUCTIONにしておけばエラーページを表示してくれます。
ですがFuelPHPのデフォルトではエラー表示はONになっています。

public/index.php

の先頭にある

error_reporting(-1);
ini_set('display_errors', 1);

を下記の通りに変更します。

error_reporting(0);
ini_set('display_errors', 0);

これで本番環境時にはPHPのエラーが表示されることはありません。
また1.6以上であればエラーが発生した場合はデフォルトで

fuel/app/logs/

にエラーが出力されます。
これは日別にログがローテートされてます。
ですのでこちらを監視することで色んな問題を解決することが出来ます。

またセキュリティのことに関しては下記のリンク先が素晴らしいです。
こちらを是非とも一読ください。

FuelPHP でのセキュリティ対策(3) - A Day in Serenity @ kenjis


2 複数DBへの接続

一つの環境で複数のDBに接続することは多々あります。
こちらの方法ですがまず

fuel/app/config/development(各自の環境変数に合わせてください)/db.php

に下記の通りhogeのグループを追加します。
※例はPostgreSQLにつなぐ場合です

return array(
    'active' => 'default',
    'default' => array(
        'identifier' => '"',
        'connection' => array(
            'dsn' => 'pgsql:host=localhost;dbname=default_db',
            'username' => 'default_user',
            'password' => 'default_password',
            'encoding' => 'utf8',
        ),
    ),
    'hoge' => array(
        'identifier' => '"',
        'connection' => array(
            'dsn' => 'pgsql:host=192.168.1.1;dbname=hogehoge',
            'username' => 'hoge',
            'password' => 'm9(^w^)',
            'encoding' => 'utf8',
        ),
    ),
);

これでdefault以外のhogeの接続情報が入りました。
あとは実際に呼び出す際に

//default
DB::query('SELECT * FROM test')->execute();
//hoge
DB::query('SELECT * FROM test')->execute('hoge');

となります。
指定しない場合はdefaultが呼ばれますが当然defaultを呼ぶことも出来ます。
ですので

DB::query('SELECT * FROM test')->execute($db_name);

として呼び出し先を動的に変えることも出来ます。

3 オリジナルのconfファイルの作成と読み込み

公式ドキュメント(configクラス)

またこちらのリンク先が丁寧に解説してあります。

FuelPHPでオリジナルconfigファイルの作成

こちらを設定することで
Config::get('hoge')
と取ってくることが出来ます。
私はalways_loadを設定して常に呼び出せるようにしています。


4 メタプログラミング

PHPでもメタプログラミングは出来ます。
特にFuelPHPではオートローダー機能の恩恵でよりシンプルに行えます。
※FuelPHPのクラスの自動読み込みについてはこちらを参考にどうぞ

例えばPHPは

//三項演算子(hogeの時にmodel_hogeを代入し、それ以外はmodel_fuga)
$class_name = ($model_name == 'hoge') ? 'model_hoge' : 'model_fuga';
//インスタンス化
$model = new $class_name();
$result = $model->method();
//静的呼び出し
$result = $class_name::method();

と出来ます。
例ではクラス名が$model_nameの中身に合わせて'model_hoge'と'model_fuga'で切り替わります。
この場合、呼び出しのクラスが読み込まれている必要があるため

require_once 'hoge.php';
require_once 'fuga.php';

と両方のファイルを読み込むコードが必要になります。
(または色んなクラスが書かれた巨大なファイルを作る必要があります。)
ですがFuelPHPはクラスの読み込み時に命名規則に合わせて動的にクラスファイルを読み込みます。
つまりrequire_once地獄や巨大なファイルと戦う必要がありません。
ですのでコードを足す度に上記のようにrequire_onceを書く必要がありません。
DBの値からクラスを動的に呼び出す場合などは新たにクラスファイルを作成するだけです。
このようにPHPの可変関数は非常にシンプルで強力です。
さらに__callなどのマジックメソッドを使えば多くの事が出来ます。
ただし、メタプログラミングはやり過ぎると作成者以外が分かりにくくなるのでケース・バイ・ケースです。


以上の4つ、いかがでしょうか。
さらにセキュリティ、バリデーションなどFuelPHPは充実しています。
「こんなことしたいな...」と思った際は一度FuelPHPのドキュメント等を見てみると大抵あります。
また機会を見つけてFuelPHPの情報をまとめていきたいと思います。

2013年8月8日木曜日

今後の参加予定な勉強会の告知

もじゃ変さんがまとめてたので自分の主催の有無問わず参加予定の勉強会を告知。
ざっと予定を纏めたけど10月初めまで結構件数あって嫁ゲージやばい。
そのための牽制の意味が含まれてます


2013/8/27 第七回 岡山Python勉強会

http://atnd.org/events/42305

毎月定例のPython勉強会です。
今回は自分はSkypeで参加しようと思います。
すっごいゆるふわ系の勉強会なのでいろいろとチャレンジしていきたいですね。
あとPythonやるやるって言いながら全然書いてませんw


2013/8/31 TDD Boot Camp 岡山 2.0

http://tddbc.doorkeeper.jp/events/4941

テスト駆動開発のハンズオンですね。
実は自分はまだどの言語でどのように参加するか決めてないので保留中。
去年参加出来なかったので今年は是非とも参加したいですね。
ただ一部から懇親会のLTを強いられているけど色々と失うものが多そうです。


2013/09/14 岡山Git勉強会

http://local.aguuu.com/events/19879

今回はGitHubのハンズオンらしいです。
地味に最近は読書会やらハンズオンが多いですね。
これは「明確な技術的な収穫が欲しい」ってニーズがあるんだと思います。
あとやっぱ最初の取っ掛かりは一人では苦しいのでハンズオンは助けになります。
てなわけでGitHubをガンガン使ってるわけではないので行ってきます。




2013/09/16 JavaEE7 ハンズオン

http://local.aguuu.com/events/21329

ついに自分もJavaを触る日が来ましたw
Javaとかマジ全然出来ないんですがだからこそハンズオンに参加してきます。
つか参加者的に自分がいちばんJava力なんで予習必須ですね…


2013/10/05 第二回 中国地方DB勉強会

http://local.aguuu.com/events/21550

第一回を岡山でしたので今度は広島で開催します。
コンテンツがまだ決まってませんが会場等は決まってます。
OSC広島の前夜祭的に出来たらいいなぁと思ってたりします。


2013/10/06 OSC広島 2013

http://www.ospn.jp/osc2013-hiroshima/

前述のとおり、連日開催です。
今回はさくらインターネットさんが来るみたいで個人的にはOpenStackとそれが楽しみです。
もちろんJPUGも参加しますので皆さんよろしくお願いします。



さらにこれに9月のPython勉強会が定例で入ってきます。
個人的には不定期開催のたけともそんを9月の何処かでやりたいなぁと思ってたりもします。
しかしこんだけスケジュールが詰まってるとお財布に優しくありませんねw
でもこの他に面白いイベントがあれば是非とも教えて下さい。

それでは皆様と会場で会えることを楽しみにしてます。

第一回 中国地方DB勉強会を開いてきた

ついに中国地方でのDB勉強会を始めました。
JPUG主催ですがPostgreSQLのみならず広くDB関連をカバーしたいと思っています。
そんな意図もあって第一回は大垣さんと奥野さんに来て頂きました。

当日のTwitterまとめはこちら。

第一回 中国地方DB勉強会 まとめ #Chugokudb


またMLとしてGoogleグループを作成しました。
当日の資料や登壇の動画はこちらにありますのでご参考までに。
次回の情報や今後のフォローアップでも活用しますので是非ともご参加ください。

・Googleグループ
  https://groups.google.com/d/forum/dbstudychugoku

  dbstudychugoku@googlegroups.com

また講師のお二人が当日の資料をブログにアップして頂いております。
こちらも合わせて御覧ください。

大垣さん
第一回 中国地方DB勉強会の資料
http://blog.ohgaki.net/db

奥野さん
第一回中国地方DB勉強会で発表したスライドをアップロードしました。
http://nippondanji.blogspot.jp/2013/08/db.html


個人的には今回は主催者としては集大成だったなと言うくらいに色々とやりました。
それでもまだまだ周囲の方に助けて頂いてなんとか開催出来たと言うのが感想です。
今後も隔月程度で中国地方で開催していきますのでどうぞよろしくお願いします。

それと第二回は広島市で行います。
コンテンツについてはまだ未定ですが場所と日時は確定しております。

日時:10月5日(土)
場所:広島県広島市中区大手町 1-5-3 サテライトキャンパスひろしま 605号室

第二回 中国地方DB勉強会

こちらはOSC広島の前日に同じ場所(サテライトキャンパスひろしま)で開催します。
コンテンツに関しては

1 初心者向けのセッション
(SQLの書き方や実行計画の見方など)

2 運用に関するセッション
(バックアップやチューニングなど)

3 その他

を検討中です。
決まり次第、申し込みサイトとMLを更新していきますのでよろしくお願いします。
ということでまだまだ忙しくなりますが支部長業を頑張っていきます。
今度は広島の皆様、よろしくお願いします!!

(いや俺も広島県民だけどなんだけどね)

2013年7月3日水曜日

PostgreSQL9.3の最新事情

先月、6/22にJPUG 2013 夏セミナー+JPUG総会に行って来ました。



でセミナーは遅刻(理由は色々あるんですっ!)したので全部聞けませんでした。
なので自分の学習的意味も含めてPostgreSQL9.3のおさらいをしたいと思います。

さらにコレもすごく参考になるのでオススメ資料です。

PostgreSQLバックアップ・リカバリ入門


ってことでおさらい。

○ PostgreSQL9.3の知っておくと嬉しいこと

・9.3のリリースは9月
・Updatable Views(更新可能ビュー)
・Materialized View(実態のあるビュー)
・JSON型の強化
・Large objectが最大→4TERAに強化
・Foreign data wrappers(外部データラッパー)

細かいことは資料を見たほうがいいですw
というか非常にクオリティが高いです。
(僕はいつも情報密度が薄くてごめんなさいごめんなさいごめんなさい)

で僕は今回、特に重要なことはFDW(外部データラッパー)とJSON型だと思ってます。
なぜかというとこれ。

Red Hat Enterprise Linux 7でもMySQLに代えてMariaDBを採用

これはこの業界には非常に大きなニュースだと思ってます。
今後もRDB自体の必要性は変わらないと思います。
となると考えれるのはどのDBに移行するか。
MariaDBが注目されてますがHerokuなどPostgreSQLを使ったサービスは日々増えています。
そうなると大事なのは既存のシステムからのマイグレーションと連携です。
正直アーキテクチャの違うRDBの移行は簡単な話ではありません。
ですのでレガシーシステムと如何に連携するかと言うのは非常に大切なことです。
FDWですべての問題が解決するわけではありませんが可能性を感じる選択肢だと思います。
過去のシステムとの連携が問題でMySQLを選択されている方は一度はPostgreSQLを検討して損はないと思います。

興味がある方は是非とも花田さんが作られた以下の資料をご覧下さい。

9.3で進化した外部テーブル

そしてJSON型。
現在、多くのWebAPIはJSONを吐きます。
また多くの言語はJSONをサポートしており、利用頻度はXmlを抜いていると言っても過言ではありません。
近年ではJQueryやAnglerJSなどのJavaScriptライブラリやフレームワークの活躍でより一層フロントエントでのデータのやり取りは リ ア ル タ イ ム にJSONでやり取りをするようになっています。
なので業務でJSONと付き合う機会は多いでしょう。
するとゆとりさんがおっしゃってるような


という危惧が出てくるのもわかります。
まさにSQLアンチパターンのジェイウォーク(信号無視)です。




実際に私もtext型にJSONを始めとする非正規化のデータをまるっと突っ込んでいるテーブルを見たことがあります。
(EC-CUBEのセッションとか苦しんだなぁ・・・)
WTMでもこの話題は取り上げました。

WEBエンジニアが知るべき3つのSQLアンチパターン


実際に非正規化データで困るのはUpdateと中に入ってるデータの検索。
これは今後も必要に迫られることが多々あると思います。
PostgreSQLはこの事に対して専用の型を用意して前向きな打開策を提示してくれます。
JSON型自体、9.2から入ってきてまだまだ機能不足ではありますがFDWと同様に将来性を感じる機能の一つです。
つまり、PostgreSQLは多くのシステムと連携する窓口を広く持っている(持つ方針で進んでいる)ということです。
現在、NOSQLを始めとした多くの技術が適材適所に使われています。
これらとのインターフェイスを柔軟に持つということは凄まじいスピードで起こるこの多様化に対して大切な答えだと僕は思っています。
ということで純粋な性能向上や安定性も重要なことですがPostgreSQLは多様化に対して面白いアプローチをしてきてると思います。


ということで今、PostgreSQLが熱い!!
(なおこの記事は二週間かけてかかれております。 )

2013年6月17日月曜日

Java Day Tokyo 2013報告会@岡山 #okajugに行ってきた

勉強会で久々?にスピーカーもしたし、すごく感じたことがあるのでブログに。
勉強会の内容についてあまり触れないのでそちらはtwitterまとめがありますのでどうぞ。

Java Day Tokyo 2013報告会@岡山 #okajug #パソコン交流会 まとめ


現在、勉強会に関しては岡山は充実していて、平日の勉強会すら日程被りがある状態です。
※2013年6月17日現在
多様性が生まれるのことはすごく良いことなんだけどではどの勉強会に参加するのがいいのか。
結論、行きたいの行きゃいいんだけど今回の参加で思ったもあるのでメモとして残します。

1 知ってると思ったことでも実は知らない
今回櫻庭さんがJava8の目玉、ラムダについてお話して頂きました。
僕は櫻庭さん信者なので実は今年になって櫻庭のラムダの話を聞くのは3回目です。
(オープンセミナー広島、CCC、#okajug)
ですのでJavaの人じゃないけどそれなりに知ってるつもりでした。
だけど毎回聞く度に理解が深まるし、その間に得た知識と急につながる事がありました。
なのでreduceやmapの話、遅延評価(Javaは評価ではないらしいですが)を毎回聞く度に視野が広がります。
これはこないだ岡山でCSS3を学ぼう会でも感じました。
知ってるつもりでも改めて聞くと眼から鱗のこともたくさんあります。
なので「知ってるわー」とか「そこ別にもういいわー」みたいな感じで学ぶチャンスを逃すのは勿体無いと感じました。
特に新しいことばかりでなく、基礎的なことを振り返る地点は定期的持ったほうが知識の定着は効率的でアイディアも湧きやすいかもしれません。
ちょっと最近は勉強会から足が遠のいていたのですが今後も積極的参加したいと思いました。

2 勇気を出して質問してみる
質問をするって言うのは僕の勉強会の毎回のノルマとしています。
その方が話の理解が深まるし、聞いてる最中もしっかりと集中して聞けます。
また質問することで記憶の中で関連付けされるので記憶の定着も進みます。
なので初歩的なことでも恥ずかしがらず質問するようにしてます。
さらに最近気付いたのがひとつ質問が出ると2つ目が出てきやすい。
シーンとなったあと「じゃあ僕が」って質問した次は「じゃあ私からも」となりやすい。
そうなるとディスカッションが生まれたりしてすごく良い循環が生まれやすいと思います。
なので勉強会では積極的に質問するのがいいなぁと。
運営側もメインのスピーカー枠なんかは質問の時間を長めに取る工夫があったほうがいいかなとも思いました。

3 ゆーるい感じの勉強会も良い
しっかりスケジュールされたハンズオンやビックスピーカーがズラリと並んだセミナーも大切です。
ただその上でちょっと座談会感覚でヤジが飛びながらするような勉強会もいいなと思いました。
人数が少ないからこそなんですがその場でQ&Aが飛び交うのは会話の幅がすごく広がるし、当事者はもちろん聴衆側もなるほどと思って知識の理解が進みます。
マサカリこわいと言いますけどもマサカリも適量な場合は大切だなと。
ただ血まみれになるのは大抵の人が慣れてないので軽いヤジや合いの手くらいがいいかもしれません。
こういう雰囲気があると質問もしやすいので2の効果がより得やすいとも思います。


ということでゆるふわ系勉強会がマイブームです。
少人数でやってる言語系の勉強会はその傾向が強いので言語の好き嫌いをせずに積極的に参加してみようかなと思いました。
ただこの戦国の大勉強会時代にさらされた岡山では弱小になりがちなゆるふわ系勉強会は存続が難しかったりもします。
ココらへんは運営側の強い意志が必要になるところでもあるのですが是非とも運営側の皆さんには頑張っていただきたいなぁと思ってます。
(そもそも一番危ういのが自分主催の岡山Python勉強会ですが...)
ということで勉強会が最近また形を変えつつあるなぁと思いました。
あと最後に発表資料置いとくんで興味がある人は見ていただけたら幸いです。




2013年6月6日木曜日

@soudai1025、仕事辞めるってよ。

俺は仕事を辞めるぞジョジョォオォォッ!!
ってことで読んで字の如く現在の職場を6月末で退職することになりました。
ついでに次の職場は福山市なので毎日通った大都会岡山には別れを告げることになります。

今の職場では名前を出しませんが素晴らしい技術者と一緒に仕事が出来ました。
これは非常に貴重な経験で今後も大きな財産になると思います。
また独特のスピード感に戸惑うことはありました。
(信じれないほどアサイン→コミット→リリースの間が短い)
ですがこれにより前職とは比べれない速さで多くの経験が出来ました。
ハッキリ言ってこの一年は前職の3年分よりも多くの技術や実務の経験が出来たと思います。

また退職すると言うとその会社にマイナスなイメージが付きまといますが誤解を解く意味でも言いますがコードが書きたいプログラマーには楽しい会社です。
サーバサイドだけでなくフロントエンドも出来るなら一人で新規案件を好きなように舵を切ることも可能です。
というかほとんど新規案件ばかりなのでコードを新しく書く経験がガンガンできます。
僕はPHPがメインでしたがこの1年半で書いたコードの量も担当した新規案件の数も結構な量でした。
こんなイケイケの会社はなかなかないと思います。
その分、プログラマーに求められる責務というか能力も高いのも事実です。
ですがそれ相応の能力があれば与えられる自由と給料がデメリット以上の魅力になる職場です。
なのでこの一年半は本当に色んな経験が出来ました。
また蛇足ですが元々人が足りない状態で私が抜けるのでPHPerが足りません。
PHPerじゃなくてもコードが「しっかり書ける」人ならPHPの技術は後からでも問題ないと思います。
あとAndroidとかiOSとかフロントエンドとか出来ると更にいいと思います。
このブログを呼んで興味がある方は応募してみては如何でしょうか。
あっ応募先は自分で探して下さい。
それぐらいは出来ないと「自由な職場」では生きていけないと思います。

そして僕の次の職場ですが我が家から半径2キロ程度の場所です。
現在の職場は片道60キロ程度だったので恐ろしいほど近場になります。
これは正直、転職の理由として大きいです。
また会社の規模は人数が1桁の会社なのでとても小さな会社です。
(僕自身のキャリアから見ても最小です)
あと僕は自称 WEBプログラマー なので今までの経験から言うと次は全く別業界です。
組み込みやネットワークがメインの会社ですから僕の得意のレイヤーからずっと下のレイヤーになります。
でもこれは僕の考える将来像から見るととてもすごく良い経験が出来ると思ってます。
先日受けた基本情報技術者の成績からも下のレイヤーの部分はやはり苦手でしたし。
(あっちゃんと受かってたよ!)
Cも読めますが実際に書いた経験は皆無です。
ネットワークなんてTCP/IPのことをちょっと知ってるかなー程度です。
そんな状態ですから多分毎日が戦いになると思ってます。
ですがそれは凄いチャンスだと思うので楽しみながら頑張りたいと思います。
またWEB系は当然の事ながら担当するのでそれはそれで仕事くださいw

さて、最大の問題は

日常的に参加している岡山の勉強会の交通費

ですねw
今まで全く気にせず岡山に行ってましたが今後はコストが僕のMPで賄うことになります。
取り急ぎは7月末まで定期があるのですが8月以降は交通手段を考えなきゃいけません。
また平日開催の勉強会も色々と難問が出てきます。
特に主催で毎月開催の岡山Python勉強会が最大の課題w
これを機にNSR250復活させたいなーとは思ってますがこれは嫁ゲージ2本使ってもカバー出来ないので難しいかなぁと思ってます(´・ω・`)

ということで そーだい=現在の職場 と一部に認識されてましたが変わることになりましたのでご周知をよろしくお願いします。
あと、こういうイベント時にはコレを置いとくと幸せになれると聞いたので干し芋リスト置いておきますね。

私は真に驚くべき​欲しい物を​見つけたが、この​余白はそれを書くには狭すぎる

2013年5月14日火曜日

PHPerがNetBeansを使いたくなる7つの理由

PHPerの皆様、日頃のコーディングには何をお使いでしょうか。
PHPの方はVimやEmacsよりもテキストエディタを使ってる人が多いイメージなのでSublime Text2でしょうか。
かく言う私もこのエントリーを電車の中でSublime Text2を使って書いてます。


「Sublime Text 2はじめました!」に贈る日本語での情報のリンク集


しかしながら開発をするなら僕は断然IDE派です。
ユニットテスト、補完、リファクタリング、どれをとってもIDEはプログラマーをサポートしてくれます。
また静的型付けな言語以外ではIDEの恩恵を受けにくいのではないかと考える方もいらっしゃるかもしれません。
しかしそれは杞憂です。
特にPHPは動的言語の中でもIDEの恩恵を受けやすい言語です。
つまりPHPを書く上でIDEを使わない手はありません。
どうでしょう少しはIDEに興味が湧いて来ましたか?
そこでオススメのIDEがこちらです。

NetBeans

なんとNetBeansはFuelPHPのサポートされたプラグインが有志によって開発されています。
本日はそんなNetBeansの素晴らしさをちょっとした使い方とFuelPHPの使い方をご紹介したいと思います。
(決してJava Day Tokyoのセッション中ではありません)

※対象はNetBeans7.3のPHPプラグインです
ダウンロードはこちら<<

1 NetBeansの補完について
NetBeansのdefaultのコード補完はControl+スペースです。
例えば下記の画像のように標準のメソッドを呼ぶことができます。






また当然プロジェクトの名前空間、スコープ内のメソッドや変数も呼ぶことができます。
引数も保管し、defaultの値を指定している場合は引数を選ぶこともできます。



この他にもメソッドの上で/**とするとコメントのテンプレートを生成してくれます。
これは引数、返り値を見た上でテンプレートを作成してくれますので大変便利です。
//○○をXXする関数
と書くよりも



を書くほうが情報も多く、メンテナンス性も向上します。
またこのようにメソッドにコメント使うことコード補完時に参照され、情報として表示されます。



さらに!!
html、CSSやJSも補完してくれます。
強力にhtml5やCSS3を保管してくれます。
さらに詳しいことはこちら

コードの補完


2 NetBeansのバージョン管理ソフトウェア対応と使い方について
NetBeansはdefaultでSVN、Mercurial、Gitをサポートしています。
プロジェクト内のコードであればGUIベースで以下の通りでcommitすることができます。


Gitの場合のリモートリポジトリもGUIベースで行えます。
通常時(Conflictした時やマージの時)はCUIを使った方が楽なことも多々ありますが通常使うには十分です。
またNetBeans内でのバージョン管理とバージョン管理ソフトウェアの連携がとても強力です。
こちらの画像のようにNetBeansはdefaultで更新履歴を持ちます
(初期設定は7日分ですが任意にツール→オプション→その他→バージョン管理→履歴 から保管する日にちを変更できます)

さらにバージョン管理ソフトウェアを使えばコミットしたリビジョンも比較できます。
例えば差分は次のとおりに比較できます。

履歴を選んで差分を確認


右クリックの「履歴をから戻す」を使うとまるごと戻すことも可能も可能です。
この機能は非常に協力ですのでぜひぜひご活用ください。

3 FuelPHPのプラグインの導入
これだけでも使うには十分すぎるNetBeansの便利さですが今一番熱いPHPのWEBフレームワーク、FuelPHPに対応しています。
蛇足ですが標準でZend、Symfony、Doctrine2をサポートしています。
またテンプレートフレームワークとして使われることの多いSmartyもサポートとしています。
そしてプラグインもプロジェクトの作成も選ぶだけ。

日本語に完全対応したGUIですから非常にスムーズですね!!

4 FuelPHPの補完
そして当然FuelPHPの補完もバッチリ!!
例えばコントローラーでの補完。
モデルの呼び出し
setterやgetterの呼び出しもサポート。
当然ORMもご覧のとおり。



5 ユニットテスト
さてここまで読まれた読者さまなら一度は聞いたことがあるのではないでしょうかユニットテスト。
別名では単体テストと呼ばれ、メソッド単位で行われるテストですがPHPではPHPUnitと言うツールを使います。
NetBeansはこちらも対応済み。
ただしPHPUnit本体の導入は別途必要です^^;
WindowsユーザでXAMPP(ローカルにWEBサーバ環境を立てる)を使ったPHPUnitの導入はこちらのチュートリアルが参考になります。
そして本題のユニットテスト。


戻り値が不正の場合は
わかりやすく赤くなってくれます。
そしてFuelPHPはユニットテスト(PHPUnit)に完全対応!!
当然、ユニットテストできます。
例えばすでに作成済みのViewModelのメソッドをテストしたい場合このとおりです。
まずメソッド作ります。
そしてメソッドはやっぱりテストコードを作りたいですよね。
まずは右クリックして…



あら不思議!テストコードがまるっとできます!!
この状態でメソッドを変更すれば当然赤くなるので安心してリファクタリングできますね!!
またTDDっぽく機能追加する場合はテストコードを変更して赤(エラー)から緑(成功)を目指して修正することもできます。
今流行?TDD【テスト駆動開発】も可能です。

6 ちょっと便利なショートカット
私は実はdefaultのキーマップからEclipseに変更していますw
なのでフォーマットはControl+Shift+Fです。
defaultではAlt+Shift+Fです。
オプションのエディタのタブでフォーマットの設定も行えます。
また保存時に自動的にフォーマッターを走らすことができます。
統一感のある美しいソースになるのでフォーマッターは是非ともご活用ください。
またメソッドを選択時にF3で行われるメソッドの参照先への移動(メソッドジャンプ)も非常に便利です。
その他にも四角選択(矩形選択)や一括置換も非常に便利で協力です。
是非、お時間があるときにはNetBeansのオプションのショートカットキー一覧を見てみて下さい。

7 NetBeansの組み込みブラウザの使い方
NetBeansといえばきしださん。
きしださんの「きしだのはてな」がすごく情報が詰まってます。
NetBeans使いは是非一読ください。
そして組み込みブラウザにも詳しく書いてありますのでこちらを御覧ください。

NetBeans7.3(Beta)に組込みブラウザがついて想像以上にすばらしい


ここまで読んでくれた皆様、NetBeansに興味が湧いて来ましたでしょうか?
開発環境は好みで選ぶべきですが「よくわからないけどEclipseを使ってる」や「みんなが秀丸だから秀丸を使ってる」って方は非常に損をしていると思います。
日本語対応しているNetBeansの機能の豊富さを知らずに開発するのは残念です。
ですので一度でも試していただけたらと思います。