2013年5月14日火曜日

ウサギィに遊びに行ってきた(1年振り 通算2回目

さて僕の東京観光3日目は海鮮丼で有名?なウサギィに遊びに行って来ました!
ウサギィといえば

ウサギィシールやウサギィパーカーなどのグッズ販売

海鮮丼

などが有名ですがちゃんとした開発会社ですw
またスタッフは皆さん個性的な人ですが社長の町さんは非常に聡明な方です。
今回は私の時間調整がうまく行かず町さんにはご迷惑をお掛けしまして大変申し訳ありませんでした。

そして本題の町さんと二人っきの(///のトークですがやはり気になるのはこれ。

オープンセミナー2013@岡山 

実は僕がウサギィさんの話が聞きたくて実行委員長に提案しました。
しかしながら肝心な当日が別のイベントと被ってしまいお会いすることができず…
なら終わって出来立てホヤホヤの感想を聞かせて貰おう!!と思い訪問させて頂きました。

まず登壇自体は話はちょいちょいいただくけどなかなか行くことが出来ないとのことだったので実際に聞かれた方は貴重な体験だったようです。
またウサギィさんはここ最近、かなりtwitterで有名になった反面、苦労も耐えないそうです。
知名度が上がるというのはメリットもある反面、非常に繊細な問題なんだなとおもいます。

またエンジニアの在り方、それをサポートするために会社の在り方ついてもお話を聞かせて頂きました。
その中で社員に自由を与えることと会社の規律を作ることが相反することが多々有って難しいとのことでした。
確かにクリエイティブな仕事や受注ではなく社内的な作業というのは評価を反映することは難しいですね。
また歩合だけでエンジニアの心を掴むのも難しい。
なので色々と試行錯誤されてるとのことでした。
実際に社員もクライアントも満足できる会社というのは非常に作るのが難しく、継続が大変なのだとよくわかりました。
こういった経営層側かの視点ってのは社員で働くにも重要で、沢山の視点を持つことは大切ですね。
また何かと苦労されているだけに言葉には力がありました。
しかしながら同世代の方がこれだけ色々考えている話を聞くと負けてられないと思っちゃいますね!
また来月、今度はゆっくりウサギィ にお伺いをしたいと思います。

JJUG CCCに参加&セッションしてきた

5月11日にJJUG CCCに行って来ました。
これがJavaのイメージとは反してゆるく、でもしっかり技術の場所でした。
私自身は東京で開かれるイベントは何個か参加経験があります。
ですが今回は登壇もあったので緊張してばかりだったので余裕がなくツイート控えめでした(´・ω・`)
なのでセッションの面白さについては多くの方がブログにしてくださってるのでそちらを!
会場の雰囲気を是非感じてみて下さい。
実際にあの会場でしか掴めない刺激やコネクションがあるので若い人こそ来てほしいですね。

ということで僕のセッションの資料はこちら。



正直なところ、情報量としては非常に少ない内容ですがtwitterまとめで少しは伝わったのかなとおもいます。

JJUG CCC 2013 Spring R2-6 [BOF] 地方における勉強会事情 

今回の私のテーマとしては

  • 地方圏と都市圏の勉強会の違いを伝える
  • 勉強会のメリット(楽しさ)を伝える
  • 少しでも参加する(聴衆・スピーカー・スタッフなど含む広義的な意味で)人を増やす
  • 一つの場所で完結するんじゃなくて多くのコミュニティ、地方とつながるきっかけ作り

でした。
また実際のところ、地方が抱える問題というのはどの地方でも同じように抱えています。
それを打破するべき施策と言うのはとても大切で今回のパネルディスカッションのように意見を交換しながらより良いものを考えていくという機会は非常に意味があったなと思っています。
そして一番驚いたのは会長である鈴木さんの腰軽さ。
僕達の提案に足して孫正義もびっくりの「今年中にそれ、やりましょう」の連発。
実際に話題になったのは

  • 各地方JJUGによる同時勉強会開催
  • Ustなどを活用して同時開催のセッションを共有する
  • 女性や若い世代が参加しやすい環境つくり
  • 地方に講師を積極的に派遣する

などです。
これらに関しては今年度から積極的にリソースを割いて行くとのことですから非常に楽しみですね!
こういう提案に対してトップが行動の速いというのはすごいことです。
逆にいうと今までJJUGの中での情報共有自体がまだまだ少なかったのかもしれません。
ですので若い人に伝えたいことですがJJUGにはすごく多くのチャンスが詰まってます。
またJavaは成熟してきた技術ですからOSS一つにしても多くの先人の知恵が詰まっています。
これを機会にぜひぜひJJUGに参加して積極的に自分の意見をアウトプットしてほしいです。
そうすることでより良いコミュニティに成長いけるはずです。

ということで私自身、多くの方との情報交換はとても参考になりました。
またこれだけの規模で何かを伝えると言うのは大きな人生の財産になりました。
しかしながらまだまだ経験不足なところもありますので日々精進していきたいなと思います。
そして機会があれば今度はちゃんと技術の話でみなさんにアウトプットしたいですね!!
と以上のとおり、本当に基調講演から懇親会まで楽しい一日でした(*´ω`*)
スタッフの皆様、最後になりましたが本当にありがとうございました&お疲れ様でした。

プログラマーが行くべきたった一つの場所 in サムライズム

行って来ました、株式会社サムライズム
サムライズムはあの有名な元赤帽で元twitterの中の人でtwitter4jの山本さんが興された会社。

さてサムライズム、山本(以下イケメン)さんお一人でされてる会社です。
そんなサムライズムにお邪魔するキッカケですがJJUG CCCに参加するのに前泊入りする場所がなくてtwitterで右往左往してると



と優しいお言葉が。
我らが #軍団長 みずきさん会社訪問した際に大好評だったサムライズム、これは行かないわけがありませんよね!!
サムライズムといえばJetBrainsの代理店。
てなわけで取り扱いソフトについてはこちら #ステマ
商品を選んでみんなもサムライズムで発注して最新IDEをGETだぜ!


と一泊の恩はこれくらいで返したことにして本題。
プログラマーがサムライズムに行く理由。

まずはイケメンさんの魅力がすごい。

イケメンさんと会話してると

  • 遊び心を大事にしてる
  • 常に余裕を感じる
  • レスポンスが超早い
  • 自分の楽しそうと感じた未来のビジョンに対する行動が速い

と感じます。
これって簡単に見えてなかなかみんな出来てることじゃないですよね。

まず遊び心ってクリエイティブな事する人はすごく大事。
プログラマーは創造する仕事だから常に遊び心を持って色んなアイディアを産みたいものです。
遊び心豊富なところはtwitter、講演内容、色んなところで見つけれます。
まだご存知が無い方はtwitterをウォッチしてみてはいかがですか?

@yusuke

そして余裕。
これって色んなところで感じれて、その人の持ってる雰囲気にすごい影響を与える。
仕事だっていっぱいいっぱいの人に頼めないしフリーランスなら足元見られちゃうでしょ?
プライベートの場合は余裕がある人はやっぱ話しかけやすい。
質問も臆すること無くスーッと出来る。
こういう大人の余裕がイケメンたる所以なのかもしれません。
 
で大事なところなんだけど物事のレスポンスが超早い。
質問してもすぐレスポンスが帰ってくるから会話が弾む。
でも一つ一つの回答がすごい練られてるから常に物事を考える癖付けがついてるんでしょうね。
さすがマルチスレッドの異名は伊達じゃないですね!

そして最後は行動力。
これって頭がいい人ほど失いやすいところだと思う。
考えればリスクだって見えてくるし色んな選択肢が思いつくから最適解を常に模索しちゃう。
それ自体は悪いことじゃなくてむしろ大切なことなんだけどそこでついつい二の足を踏みがち。
だけどイケメンさんの話を聞いてると

そーだい「あーこれ楽しそうですね!」

イケメン「だから次はこんなことしたくて○○の勉強会(関西)行くんだ。」

みたいな感じで常に何かの行動が決まってました。
こういうアグレッシブさはよく聞くプログラマー像に足りない箇所だと思います。


と非常に刺激的な方なのでみなさんもサムライズムに遊びに行ってみては如何でしょう?
 


と僕の身内の知りたいところであろう宿泊状況ですが

  • 夜は静か
  • 寝袋さえあれば2~3人はいける
  • 飲み物はコーラ、レッドブル、コーヒー
  • 侍の朝はレッドブルから始まる
  • 椅子が超いいから俺も欲しい

と抑えるところは抑えてるのに超シンプルな感じです。
ただ椅子が一つしかない感じなので複数人で遊びに行かれる場合は事前に人数を相談した方がいいかもしれません。
※ソファーになる布団セットがある上に部屋も整理されてるので無理ではないですが念の為に

ということでサムライズム。
僕の関東一発目にして刺激的な夜を経験できました(///

それでは興味が出た方はこちらからサムライズへ!!

2013年3月30日土曜日

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

本日、広島市で行われているWTMに参加してきました。

第55回「WEB TOUCH MEETING」やります!


発表資料はこちらです。


Wtm from Soudai Sone 


世界に誇るデスマ神の前座&アウェイと言うことで緊張しました。
しかも自分の前に話してくださいった森下さんは学生とは思えない完成度でした。
それでも今回は元ネタであると言うことでスムーズに出来たかなと思ってます。

こちらは本当に名著なので興味がある方は是非読んでみてください。
また最初に説明した和田さんの資料はこちらです。




ということでWTMですが凄くサラダボウル的な集まりで面白い取り組みだと思いました。
機会があれば積極的に参加したいと思います。

いやー楽しかった。


こちらもおすすめなので合わせて紹介します。



2013年3月21日木曜日

第二回&第三回岡山Python勉強会やってきた

昨日第3回岡山Python勉強会をやってきました。
ついでに先月もちゃんと第二回しました。
(色々バタバタしてて更新できませんでした...)

個人的には前回はPythonの強力さを感じる回でした。
また今回は一般的な言語ならまぁ大体通る内容でした。

ということで第五章、第六章でハンズオンして気になった部分のまとめ。


●intみたいな予約語でもオブジェクトぶっこめる。
当然壊れる。
int = 'hogehoge'
とかするとint呼べなくなっちゃう。
なので変数宣言したりメソッド宣言する時は予約語使わないように。

●delで初期化できる
一度宣言した変数やオブジェクトをdelで消すことが出来ます。
しかもこのdel、ポインターを元に戻すっぽくて
int='hogehoge'
del(int)
ってやるとintが本来有るべき姿に戻ります。
こんな用途で使うことは無いとは思うけど覚えておいたら役に立つかも?

●内包表記が強力
他の言語だとmap()とかで表現するところが内包表記でガンガン書ける。
Pythonを本気でやるならここら辺のテクニックに重点を置くとCoolに書けるようになるかも。

●モジュールやライブラリは設計が大事
どの場面でImportしてイニシャライザが走るか意識しないと行けないので最初の設計が大切と感じました。
当たり前のことと言えば当たり前なのですが基本に立ち返る機会が得れるのも新しい言語を学ぶメリットだと思います。

あとは帰りの中での話題のまとめ。



こういうところを踏まえて新しい事に挑戦することは価値があるなーと思います。
ということで来月は第7章を行います。
ゆるーくやってますので興味がある方はお気軽にどうぞ。

2013年2月19日火曜日

PHPでswiffyを自由にhtmlに組み込む方法について

精神と時の部屋でコードが進んで時間が出来たので表題のメモを残しておきます。
ついでに精神と時の部屋とは



のことです。
あとは電車の中とかもすごく進みますね!!
で今日はFlashが使えない端末を救う?GoogleのSwiffyについて。
FlashをSVGに変換、再生出来るようになります。
Swiffyの詳しい内容はこちらのサイトに纏まってます。

Google Swiffy 覚書

つまり

swiffyobject = {...略};

の{...略}の部分のJSONを差し替えて行けば自由にコンテンツを再生できます。
ただ元データが吐き出しが丸々のhtmlですので加工が大変です。
これを以下のPHPのバッチで加工することも出来ます ※2013/02/19現在

//Swiffyの生ファイルたちを置いた場所

$path = "old_swiffy/";
//SwiffyのJSONを抽出したfileの生成場所
$new_path = "new_swiffy/";

if ($dir = opendir("$path")) {
    while (($file_name = readdir($dir)) !== false) {
        if ($file_name != "." && $file_name != "..") {
            make_json($file_name);
        }
    }
    closedir($dir);
}

function make_json($file_name){
    //コマンドラインで実行することを前提
    //functionのスコープの外からglobalを使って参照
    global $path;
    global $new_path;

    $file = "$path/$file_name";
    //Linuxのコマンドを使って整形
    $data = `head -n 10 $file | tail -n 1`;
    //保存
    file_put_contents($new_path . $file_name, $data);
    
    return;
}

でもこれだとruntime.jsのバージョンが変わったりするとFlashの再変換が必要だったり、コンテンツを追加する度に手間です。
なのでサイト表示の際に自動的に抽出&runtime.jsのバージョン確認を出来るようにしました。
ここではhtmlをObjectで扱えるライブラリを使います。

simple_html_dom

英語ドキュメントが嫌な方はこちら

PHPでjQueryチックにWebサイトをクローリングする方法

こちらを使って書いたPHPのコードがこちら。

//$html_file_pathはURLでもfileのpathでも良い
function get_swiffy_data($html_file_path) {
    //ライブラリの読み込み
    require_once 'simple_html_dom.php';

    //最新バージョンの情報を保存する場所
    $swiffy_version_path = 'hoge/swiffy_version.txt';
    $swiffy_version = file_get_contents($swiffy_version_path);

    //simple_html_dom.phpの関数
    $html_Objects = file_get_html($html_file_path);
    //読み込まれるJavaScriptの抽出
    $element = $html_doc->find('script', 0);


    $parse_url = parse_url($element->src);
    if ($swiffy_version != $parse_url['path']) {
        $path_parts = pathinfo($parse_url['path']);
        // 保存先フォルダの作成する。
        $file_path = $path_parts['dirname'];
        if (!file_exists($file_path)) {
            mkdir($file_path, 0775, true);
        }
        file_put_contents($swiffy_version_path, $parse_url['path']);
        file_put_contents($parse_url['path'], file_get_contents($element->src));
    }
    //読み込まれるJavaScriptの抽出
    $result['js_path'] =  $parse_url['path']);
    //Jsonを抽出
    $element = $html_doc->find('script', 1);
    $result['swiffy_json'] = $element->innertext;

    return $result;
}


仕組みとして最新のjs情報と比較して無かったらGoogleから取得しています。
ここでは例としてjsの最新情報をtextに保存してます。
parse_url()pathinfo()はPHPの標準関数です。
名前の通り、それぞれURLとfileのpathを細かくparseしてくれます。
とても便利なのですがよく同じ用途でexplode()を使っているのを見かけます。
なんかの参考になればと思います。

個人的には標準関数を使ったPHPっぽい感じのコードかなと思いますw

2013年2月13日水曜日

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

FuelPHPいいよFuelPHP。
正直、新規の方にオススメするphpのフレームワークはコレで一択です。
と溺愛してますが職場はZendフレームワーク...
で久々にFuel触ってハマッたのでメモを残しときます。
つまりこんなタイトルですが自分用です(キリッ

#### 2014/09/24にリメイク版作りました ####

OSC2014@広島に行ってきました #osc14hi

#### ここまで ####

1 FuelPHPの使い方

こちらのスライドが参考になります。
というかほぼ網羅してて完璧です。



こちらも綺麗にまとまっていてすごくわかりやすいです。

10分でわかるFuelPHP


ただサーバの設定によっては動かない場合も。
理由はデフォルトのtimezoneの設定がされてないこと。
なので

/etc/php.ini 



date.timezone = "Asia/Tokyo"

を追記するか

fuel/app/config/config.php

のArrayに

'default_timezone'   => 'Asia/Tokyo'

を追記するかのどちらかで対応出来ます。
また詳しくはこちらに書いてあります。

2 JQueryMobileの使い方(localから指定する場合)
まずjQueryMobileサイトからソースを落としてきます。
それとJqueryも必要ですから落として来ます。

ソースを解凍してここにおきます。

public/assets/js
public/assets/css

読み込みはviewにこんな感じ

echo Asset::css('jquery.mobile-1.2.0.min.css');
echo Asset::js('jquery-1.8.3.min.js');
echo Asset::js('jquery.mobile-1.2.0.min.js');

URLを気にせず指定のファイルを直感的に呼べるのはいいですね。
でポイントですがJqueryMobileの1.2.0はJqueryの

1.9系では動かないので1.8系 ※2013/02/13現在

を使いましょう。

3 TwitterAPIとの連携
Fuelのイケてるところと言えばパッケージ。
その導入はシンプルです。
GitHubからサクッとインストール出来るため、皆さんにもどんどん活用して欲しいですね。
と言うわけでここではTwitterAPIとの連携方法について。
まずはfuel-twitterをインストール。
インストールから使い方まではこちらのブログにまとめてあります。
インストール出来ました?
APIを叩いてみましょう。
値が帰ってきてアプリ連携出来ましたね!
次はユーザー情報取ってきましょう。
どうでした?
エラー出たでしょ。

Twitter::get('account/verify_credentials');

そう、コレ動かねーから。

TwitterAPIのバージョンアップに対応してないんですよ本家。
なのでGitHubのNetworkからブランチ追って新しいヤツのDiff見て動く奴探して来ました。
2013/02/13時点では動くソースを上げておきます。

forkして改修したソース

これを入れて試して見ましょう。
ほら、動きましたね!!
Libraryを導入すると実装が簡単に出来る反面、APIなどの仕様変更で動かなくなるモノも多いので注意しましょう。
でもメジャーなモノならGitHubのブランチを追ったりすると大体直ってます。

 4 HTMLヘルパーについて
ここの記事がすごく参考になります。

FuelPHP の Fieldset を使おう(Form の自動生成)Add Star

ほんとSmartyとか必要ない。
最初コレ知らなくてviewModelにゴリゴリプログラム書いてました。
8割くらいこれで要らなくなりました(遠い目

5 FuelはPostgreSQLに優しくない
具体的にはクエリビルダがPostgreSQLのArray型に対応してないです。
というか多くのORMたちは対応してないのですが...
特にハマるのはInsert。
なので簡単な例を載せておきます。

//idをarray型とする
$SQL = 'INSERT INTO t_hoge(id) VALUES (:id)';
//{}で囲ったカンマ区切りの任意の文字列を作る
$id = '{1,2,3}';
$query = DB::query($SQL)->bind('id', $id)->execute();

これは最終的なSQLとしては

INSERT INTO t_hoge(id) VALUES ('{1,2,3}')
となっています。
実施のプログラムは$idの生成を動的に配列から変換してやってます。
自分的にもなんだかなぁって感じです。
もっとスマートなやり方のマサカリ、お待ちしております!!
ついでにクエリビルダの使い方はこちらがすごくまとまってます。


ということで現在、仕事じゃないWEBアプリを作ってます。
公開までもう少し掛かりそうですがまた公開した時に宣伝も兼ねて苦労話したいと思いますw

更に+1 2013/03/27に追記

第4回 岡山PHP勉強会


こちらの登壇資料を追加しておきます。





仕事でFuelPHPを使い始めたので気づいたことを纏めました。

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