2014年6月21日土曜日

デジタルサーカスに遊びに行ってきた

東京のお高いおしゃれの街青山にあるデジタルサーカスさんに遊びに行って来ました。

デジタルサーカス

そしてデジタルサーカスさんですが兎にも角にも

おしゃれ!

これですね。
応接間も綺麗ですしお仕事場も広くて個々の机もゆったりでした。
そしてデジタルサーカスに行った理由は@tomzohさんにお会いするためです。
@tomzohさんは新卒からずっとデジタルサーカスを支えてきたエンジニアの方で

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


の著者の方です。
@tomzohさんは非常に相手を引き出すのが上手でした。
僕が話を聞きにお伺いしてるのに気付いたら@tomzohさんに上手く転がされてました^^;
さらに


  • SNSを利用方法
  • エンジニア採用
  • 仕事を上手く回すポイント


については非常に含蓄が多い意見を聞かせていただきました。
デジタルサーカスさんは創立して15年と業界からすると老舗です。
やはり老舗なだけあって色々と「上手くいくには理由があるな」と感じましたね。
今後もデジタルサーカスさんは安心できる受注開発業者として大活躍すると感じました。

それと蛇足ですがスパ4で対戦しました。
かなりボコボコにされてセンスを感じさせる内容でした^^;
頭がキレる人は格ゲーが強いの持論はまた立証された結果ですねw
起き上がりの移動投げ対策を含め、ウル4ではケン対策しっかりしようと思います><

クレオフーガ(岡山)に遊びに行ってきました

先日(6/20)にクレオフーガに遊びに行ってきました。

クレオフーガがといえばキムキムを始め、イケてるRubyエンジニアが集まってるのが特徴です。
実際にOSH2014の実行委員長だった@mako_wisさんがcodeをバリバリ書いてましたね。
でクレオフーガに遊びに行って感じたことは


  • 女子大生がそこら中にいる
  • CTOの山口さんが非常にフレンドリー
  • 岡山大インキュベーションセンター内での繋がりも大事にしてる
  • 女子大生多い(大事なことなので二回言いました
  • 山羊がいる


と言う感じでした。
岡山大インキュベーションセンターは岡山の企業からするとかなりアツい選択肢でしたね。
またクレオフーガの「敢えて岡山でやる!」ってスタイルは素晴らしいと感じました。
今の開発体制は


  • 立地場所によるデメリットがすくない
  • 社員のコストが少ない(物価が安い
  • 東京と違って地震ない←


などのメリット以外にも


  • 競業他社が少ないので目立ちやすい
  • 他業者との繋がりが強い
  • コミュニティの力を借りたり援助が非常に効果的


とのこともおっしゃっていました。
そんな中では一番は

サービスが流行らなかったら会社が無くなる覚悟でやってる


って仰ってて「そりゃ勢いあるはずだわ」と納得の一日でしたね。
今後も岡山からのクレオフーガの勢いは止まりそうにないですね。

2014年6月5日木曜日

PHPでCSVから配列を作る

前回のエントリーで

symfony2でCSV出力(ダウンロード)する


を紹介したので対のCSVをArrayにするmethod置いときます。

public static function csv_string_to_array($csv_string)
{
    mb_language("Japanese");
    $buf = mb_convert_encoding($csv_string, 'UTF-8', "auto");
    $replace_buf = str_replace("\r\n", "\n", $buf);
    $lines = explode("\n", $replace_buf);

    $filter_lines = array_filter($lines);
    foreach ($filter_lines as $line) {
        $ret[] = str_getcsv($line);
    }
    return $ret;
}
改行を一度\nにしてからexplode()してます。
explode()を利用した理由は可読性がいいからです。
速度的にはループと大差ないです。
array_filterは空行を削除してます。
なので

1,2,3


2.3.4

みたいな時は間と末尾の空行を削除します。
あとはstr_getcsvで行の内容を取得します。

あと蛇足ですがなぜスネークケースかと言うと

PHPはmethod名の大文字小文字を見ない

ので_区切りにしてます。
現場からは以上です。

symfony2でCSV出力(ダウンロード)する

symfony2シリーズ第3弾です。
CSV出力、何かと言われて実装することが多いのではないでしょうか。
FuelPHPではRESTコントローラがCSV対応しており、配列渡すだけなので久しぶりに実装しました。
と言っても良くある実装なのでsymfony2でActionで呼ばれた時の場合でご紹介します。

public function exportAction()
    {
        $header = [
            'ID',
            '名前',

        ];
        $list[] = $header;
        //DBから呼び出した場合はgetArrayResultを使うか自分で$dataを整形して下さい。
        $list[] = [1,'hoge'];
        $list[] = [2,'fuga'];

        $csv = $this->convertArrayToCsv($list);

        $response = $this->render(
                "AcmeSampleBundle::export.html.twig", [
            'csv' => $csv,
                ]
        );

        //Excel対策でUTF-8からSJIS-winに変換
        $contents = mb_convert_encoding($response->getContent(), 'SJIS-win', 'UTF-8');

        //headerのSET
        $response->headers->set('Content-Type', "application/octet-stream; name=hoge.csv");
        $response->headers->set('Content-Disposition', "attachment; filename=hoge.csv");
        $response->setContent($contents);

        return $response;
    }


    //配列をCSVに変換。
    //文字列のエスケープをしてくれるのでfputcsv()を利用
    private function convertArrayToCsv($list)
    {
        $fp = fopen('php://temp', 'r+b');
        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }
        rewind($fp);
        $tmp = str_replace(PHP_EOL, "\r\n", stream_get_contents($fp));
        return $tmp;
    }

表示するTwig側(例ではexport.html.twig

{{ csv|raw }}

としてます。
rawを使わないとcsv内のクォートなどをエスケープするので忘れないでください。

CSVから配列にする場合のメソッドはこちらです。

PHPでCSVから配列を作る



2014年6月4日水曜日

twigとPHPとSQLでの年齢計算

年齢計算は良く出てくることなんだけどTwigでやる時のメモ。


Twig

TwigにはPHPの関数が使えないので計算で出します。
birthdayには日付型のデータが入っているとして

{% set age = "now"|date('Y') - birthday|date('Y') %}
{% if ("now"|date('m/d') < birthday|date('m/d')) %}
    {% set age = age -1 %}
{% endif%}

で出ます。

(今年 - 誕生日年)


をして年を外した日付で比較して誕生日が来てなかったら1引くというロジックですね。

PHP

PHPはtime()で引き算したりいろいろあるのですが個人的に一番好きな方法をご紹介します。
ついでにDateTimeクラスのdiff()は5.3以降のPHPじゃないと動きません。

$birthday = new \DateTime("'2014-06-04'");
$now = new \DateTime();
$interval = $now->diff($birthday);
$age = $interval->y;

MySQL

MySQLはTwigと同様に計算で出します。

SELECT
  (YEAR(CURDATE()) - YEAR(birthday)) - (RIGHT(CURDATE(), 5) < RIGHT(birthday, 5)) AS age
FROM
 member

PostgreSQL

PostgreSQLにはage関数があります。

日付/時刻関数と演算子

なので単純に

SELECT
 age(now(),birthday)
FROM
 hoge

で差分の日付型が帰ってくるので頭の年を取得して。

SELECT
 extract(year from age(now(),birthday)) AS age
FROM
 hoge

こんな感じです。
むしろPostgreSQLはFrom句が無くても動くので

SELECT extract(year from age(now(),date '2013-06-04'))  AS age

SELECT extract(year from age(now(),now() + '-10 year'))  AS age

とか動きます。
と言うことでよく使う年齢の計算方法でした。