<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja">
<channel>
<title>肉とご飯と甘いもの @ sotarok</title>
<link>http://d.hatena.ne.jp/sotarok/</link>
<description>肉とご飯と甘いもの @ sotarok</description>
<dc:creator>sotarok</dc:creator>


<item>
<title>[PHP] pecl install hoge でインストールしたとき、インストール先が extension_dir じゃないディレクトリになってしまう場合</title>
<link>http://d.hatena.ne.jp/sotarok/20120206/1328498271</link>

<description><![CDATA[
<div class="section">
<p>Debain での話。</p>

<ul>
<li> 手元で色々 PHP いじってて環境が微妙なことになってしまったとき</li>
<li> まぁ、こういうことになる人ってあんまいないと思うけど</li>
</ul>
<pre>
$ sudo pecl install hoge
</pre>

<p>でインストールすると、</p>
<pre>
...
checking for PHP includes... -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib
checking for PHP extension directory... /usr/lib/php/20100525-debug
checking for PHP installed headers prefix... /usr/include/php
...
</pre>

<p>おや？</p>
<p>で、当然 /etc/php5/conf.d/http.ini とかに</p>
<pre>
extension=http.so
</pre>

<p>とか書いても、</p>
<pre>
$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library &#39;/usr/lib/php5/20090626/http.so&#39; - /usr/lib/php5/20090626/http.so: cannot open shared object file: No such file or directory in Unknown on line 0
...
</pre>

<p>とかいわれる。</p>
<p>extension のインストールされたディレクトリと、phpの設定がもってる extension dir が違うようだ。</p>
<pre>
$ php -i | grep extension_dir
extension_dir =&#62; /usr/lib/php5/20090626 =&#62; /usr/lib/php5/20090626
</pre>

<p>となるから当然で。</p>
<p>あれ、じゃあなんで pecl install するときにここに入らないのだ、と思い一応 pecl config-show で確認。</p>
<pre>
$ pecl config-show
...
PHP extension directory        ext_dir          /usr/lib/php5/20090626
...
</pre>

<p>ちゃんとなっている。</p>
<p>ビルドのときには /usr/bin/php-config が使われるのでそれも確認</p>
<pre>
$ which php-config
/usr/bin/php-config
$ php-config
...
  --libs              &#91;-lcrypt   -lz -lcrypt -lonig -lcrypto -lssl -lcrypto -ldb-4.8 -lqdbm -lbz2 -lz -lcrypto -lssl -lcrypto -lrt -lm -ldl -lnsl  -lxml2 -lgssapi_krb5 -
lkrb5 -lk5crypto -lcom_err -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lxml2 -lcrypt ]
  --extension-dir     &#91;/usr/lib/php5/20090626-debug]
  --include-dir       &#91;/usr/include/php5]
...
</pre>

<p>あれ。</p>
<p>php-config は誰によってインストールされるか、</p>
<pre>
$ dpkg -S php-config
php5-dev: /usr/share/man/man1/php-config5.1.gz
php5-dev: /usr/bin/php-config5
</pre>

<p>php5-dev。だけど /usr/bin/php-config5 ってことは多分 /usr/bin/php-config は symlink にしてるんだな、と確認してみると、</p>
<pre>
$ ls -la /usr/bin/php-config
-rwxr-xr-x 1 root root 4570 2012-02-03 08:36 /usr/bin/php-config
</pre>

<p>あれ。実体だ。</p>
<p>つまり原因は、</p>

<ul>
<li> 何かしらのタイミングで php-config が実体になっちゃった</li>
<li> php5-dev をインストールしなおしても、update alternatives が働かない</li>
<li> 何かしらのタイミングで実体になっちゃったものがずっとつかわれちゃってる</li>
<li> pecl install のときにおかしくなる</li>
</ul>
<p>ということなので、 /usr/bin/php-config を削除して php5-dev のインストールしなおし</p>
<pre>
$ sudo rm /usr/bin/php-config
$ sudo apt-get remove php5-dev
$ sudo apt-get install php5-dev

...

php5-dev (5.3.10-1~dotdeb.1) を設定しています ...
update-alternatives: /usr/bin/php-config (php-config) を提供するために 自動モード で /usr/bin/php-config5 を使います。
update-alternatives: /usr/bin/phpize (phpize) を提供するために 自動モード で /usr/bin/phpize5 を使います。m
</pre>

<p>で、再度確認</p>
<pre>
$ ls -la /usr/bin/php-config
lrwxrwxrwx 1 root root 28 2012-02-06 11:47 /usr/bin/php-config -&#62; /etc/alternatives/php-confi

$ php-config
...
  --libs              &#91;-lcrypt   -lz -lcrypt -lonig -lcrypto -lssl -lcrypto -ldb-4.8 -lqdbm -lbz2 -lz -lcrypto -lssl -lcrypto -lrt -lm -ldl -lnsl  -lxml2 -lgssapi_krb5 -
lkrb5 -lk5crypto -lcom_err -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lxml2 -lcrypt ]
  --extension-dir     &#91;/usr/lib/php5/20090626]
  --include-dir       &#91;/usr/include/php5
...
</pre>

<p>OK。</p>
<p>で、 pecl install してめでたし。</p>
<br>

<h4> 追記</h4>
<p>最初の php-config のときに</p>
<pre>
  --version           &#91;5.4.0beta1-dev]
  --vernum            &#91;50400]
</pre>

<p>が出てたので自分で作ってた php5.4 の .deb をインストールしたときだなー間違いなく。</p>
<p>ますますこの問題おこるひとほとんどいないきがするよ。。</p>
<p>起こるとしたら、debian標準のaptから dotdeb に切り替えたとか、何かしら環境を変えた時とか。</p>
</div>
]]></description>

<dc:creator>sotarok</dc:creator>

<pubDate>Mon, 06 Feb 2012 03:17:51 GMT</pubDate>



<category>PHP</category>


</item>

<item>
<title>[Symfony2] KnpPaginatorBundle で Twitter Bootstrap でうまいこといくやつを出す</title>
<link>http://d.hatena.ne.jp/sotarok/20120122/1327244542</link>

<description><![CDATA[
<div class="section">
<p>小ネタ。</p><p>Symfony2 つかってるとページング処理どうしようかってのに <a href="http://knplabs.jp/" target="_blank">KnpLabs</a> が公開してる <a href="https://github.com/KnpLabs/KnpPaginatorBundle" target="_blank">KnpPaginatorBundle</a> を使うことが多い。KnpPaginatorBundle は 2.0 系から Zend_Paginator に依存しなくなって使いやすくなりましたね。 <span class="footnote"><a href="/sotarok/#f1" name="fn1" title="というか KnpLabs は謎の日本語サイトがあったりして面白いですね。日本でもがんばるつもりなんですかね？">*1</a></span></p>
<p>そして、最近特に管理画面系をサクっと仕上げるのに欠かせないのが Twitter Bootstrap なわけだけど、つまり、KnpPaginatorBundle が吐き出すページング用の HTML を、Twitter Bootstrap の、navigation でうまくいくやつを出力したいと思うわけです。</p>
<p>これね:</p>
<p><a href="http://f.hatena.ne.jp/sotarok/20120122235419" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sotarok/20120122/20120122235419.png" alt="f:id:sotarok:20120122235419p:image" title="f:id:sotarok:20120122235419p:image" class="hatena-fotolife"></a></p>
<br>


<ul>
<li> <a href="http://symfony.com/" target="_blank">High Performance PHP Framework for Web Development - Symfony</a> 2.0.x</li>
<li> <a href="http://twitter.github.com/bootstrap/" target="_blank">Bootstrap, from Twitter</a> v1.4.0</li>
<li> <a href="https://github.com/KnpLabs/KnpPaginatorBundle" target="_blank">KnpLabs/KnpPaginatorBundle - GitHub</a> 2.0</li>
</ul>
<h4> テンプレートファイルを用意して parameters.ini に設定</h4>
<p>Twitter Bootstrap 用に変更している点は、現在のページを active ってクラスにしている点とかその他なんだっけもろもろです。</p>
<p><script src="https://gist.github.com/1563748.js"></script></p>
<p>これを自分で作ってるアプリの適当な Bundle の Resouces/views な場所に入れます。(今回は、 Pagination:pagination.html.twig にいれた。) </p>
<p>で、KnpPaginatorBundle が使うテンプレートを指定するのが parameters.ini で:</p>
<pre>
&#91;parameters]
...
    knp_paginator.template.pagination=MyAppBundle:Pagination:pagination.html.twig
</pre>

<p>的なかんじ。</p>
<p>追記: なぜ parameters.ini なのか質問されたので追記。こういう設定は普通 config.yml 的なところで knp_paginator: template: pagination ... なんじゃ？とも思ったんですけど、ソース読んだら parameters から取ってたので、parameters.ini に書きました。勘違いしてたりして...！</p>
<h4> 追記の追記。 parameters.ini → config.yml に設定変わってた。</h4>
<p>この内容つくったとき、最新のソースでソース読んでつくったんだけど、今度ブログ書こー、とおもって1ヶ月くらい経過してたせいで、その後テンプレート指定の方法が変わってたw</p>
<p>32c5c3c 時点では、parameters.ini でOKです。最新のソースでは 06dc809d で設定方法がかわってるので、 config.yml に書けば良いっぽいですね。</p>
<p>と、いうことで多分 config.yml に以下のように記述すればいいとおもいます。</p>
<pre>
knp_paginator: template: pagination: MyAppBundle:Pagination:pagination.html.twig
</pre>

<p>※ブログ書く前に最新版で確認しましょうという話。</p>
<br>

<h4> でなんかする</h4>
<p>なんちゃら Controller:</p>
<pre class="syntax-highlight">
<span class="synSpecial">&#60;?php</span>
<span class="synComment">// in some action</span>

        <span class="synStatement">$</span><span class="synIdentifier">qb</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>get<span class="synSpecial">(</span>'<span class="synConstant">doctrine</span>'<span class="synSpecial">)</span><span class="synType">-&#62;</span>getEntityManager<span class="synSpecial">()</span><span class="synType">-&#62;</span>createQuery<span class="synSpecial">(</span>'<span class="synConstant">...</span>'<span class="synSpecial">)</span>;
        <span class="synStatement">$</span><span class="synIdentifier">paginator</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>get<span class="synSpecial">(</span>'<span class="synConstant">knp_paginator</span>'<span class="synSpecial">)</span>;
        <span class="synStatement">$</span><span class="synIdentifier">posts</span> <span class="synStatement">=</span> <span class="synStatement">$</span><span class="synIdentifier">paginator</span><span class="synType">-&#62;</span>paginate<span class="synSpecial">(</span>
            <span class="synStatement">$</span><span class="synIdentifier">qb</span>,
            <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>getRequest<span class="synSpecial">()</span><span class="synType">-&#62;</span>query<span class="synType">-&#62;</span>get<span class="synSpecial">(</span><span class="synStatement">$</span><span class="synIdentifier">pageQueryName</span>, <span class="synConstant">1</span><span class="synSpecial">)</span>, <span class="synComment"># page number</span>
            <span class="synStatement">$</span><span class="synIdentifier">itemCount</span> <span class="synComment"># items per page</span>
        <span class="synSpecial">)</span>;

        <span class="synStatement">return</span> <span class="synStatement">$</span><span class="synIdentifier">this</span><span class="synType">-&#62;</span>render<span class="synSpecial">(</span>'<span class="synConstant">MyAppBundle:Internal:Hoge/fuga.html.twig</span>', <span class="synType">array</span><span class="synSpecial">(</span>
            '<span class="synConstant">posts</span>' <span class="synStatement">=&#62;</span> <span class="synStatement">$</span><span class="synIdentifier">posts</span>
        <span class="synSpecial">))</span>; 
</pre>

<p>なんちゃら .html.twig</p>
<pre>
{{ posts.render()|raw }}
</pre>

<br>


<ul>
<li> それだけなのでとくにオチとかもないです</li>
<li> KnpPaginatorBundle 使うと 各 column での sort とかも簡単に実装できるので楽ですね</li>
</ul>
</div>
<div class="footnote">
<p class="footnote"><a href="/sotarok/#fn1" name="f1">*1</a>：というか KnpLabs は謎の日本語サイトがあったりして面白いですね。日本でもがんばるつもりなんですかね？</p>
</div>
]]></description>

<dc:creator>sotarok</dc:creator>

<pubDate>Sun, 22 Jan 2012 15:02:22 GMT</pubDate>



<category>Symfony2</category>


</item>

<item>
<title>[node.js][redmine] node.js で Redmine の REST API を扱う node-redmine つくりました</title>
<link>http://d.hatena.ne.jp/sotarok/20120119/1326908127</link>

<description><![CDATA[
<div class="section">
<p>Redmine の API をごにょごにょしたいことが多いんだけど、毎回 PHP ってのも芸が無いので年始の休みのときに遊びはじめてみた node.js / JavaScript のモジュールにしてみた。</p>

<ul>
<li> <a href="https://github.com/sotarok/node-redmine" target="_blank">sotarok/node-redmine - GitHub</a></li>
</ul>
<br>

<p>何でもある npm になかったので、node.js の練習がてら作ってみました感じです。この記事ではバージョン0.2.0 です。</p>
<p>まだ作ってみたばっかで全然使ってないから API とかは変わるかもしれません。すいません。</p>
<br>

<h4> インストール</h4>
<p>npm だと、</p>
<pre>
$ npm install redmine
</pre>

<p>です。それ以外の方法はよく知りません。</p>
<h4> 使い方</h4>
<p><a href="https://github.com/sotarok/node-redmine/blob/master/example/example.js" target="_blank">example</a> においてあるけど、</p>
<pre class="syntax-highlight">
<span class="synIdentifier">var</span> Redmine = require(<span class="synConstant">'redmine'</span>);

<span class="synIdentifier">var</span> redmine = <span class="synStatement">new</span> Redmine(<span class="synIdentifier">{</span>
  host: <span class="synConstant">'vivid-winter-3808.heroku.com'</span>,
  apiKey: <span class="synConstant">'xxxxxxxxxxxxxxxxx'</span>,
<span class="synIdentifier">}</span>);

redmine.getIssues(<span class="synIdentifier">{</span>project_id: 1<span class="synIdentifier">}</span>, <span class="synIdentifier">function</span>(err, data) <span class="synIdentifier">{</span>
  <span class="synStatement">if</span> (err) <span class="synIdentifier">{</span>
    <span class="synComment">// error</span>
    console.log(<span class="synConstant">&#34;Error: &#34;</span> + err.message);
    <span class="synStatement">return</span>;
  <span class="synIdentifier">}</span>

  console.log(data);

  <span class="synComment">// { offset: 0,</span>
  <span class="synComment">//   total_count: 3,</span>
  <span class="synComment">//   issues:</span>
  <span class="synComment">//    [ { updated_on: '2012/01/13 03:18:30 +0900',</span>
  <span class="synComment">//        priority: [Object],</span>
  <span class="synComment">//        status: [Object],</span>
  <span class="synComment">//        tracker: [Object],</span>
  <span class="synComment">//        project: [Object],</span>
  <span class="synComment">//        description: 'Test issue description',</span>
  <span class="synComment">//        subject: 'This is test issue on 1326392307929',</span>
  <span class="synComment">//        done_ratio: 0,</span>
  <span class="synComment">//        created_on: '2012/01/13 03:18:30 +0900',</span>
  <span class="synComment">//        start_date: '2012/01/13',</span>
  <span class="synComment">//        author: [Object],</span>
  <span class="synComment">//        id: 3 },</span>
  <span class="synComment">// ...</span>
<span class="synIdentifier">}</span>);
</pre>

<p>的な感じ。</p>
<p>久々に <a href="http://www.redmine.org/projects/redmine/wiki/Rest_api" target="_blank">Redmine の REST API</a> 調べてたら Issues 以外にも API 増えてたから必要に応じて対応しようかな。</p>
<p>とりあえず Issues しか対応してないです。</p>
<br>

<h4> APIとか</h4>
<pre>
Redmine.getIssues(criteria, callback)
Redmine.postIssue(issue, callback)
Redmine.updateIssue(id, issue, callback)
Redmine.deleteIssue(id, callback)
</pre>

<p>いやこれやすいか微妙だからすぐかえるかも。なんたって 0.2.0 だから...。</p>
<p>なんとなく、</p>
<pre>
Redmine.issue.get(criteria, callback)
...
Redmine.issue.delete(id, callback)
</pre>

<p>とかのほうが使いやすいのでは（というか他のAPIに対応するため）、という気がしている。</p>
<p>まぁ適当にアップデートします。</p>
<br>

<h4> その他</h4>

<ul>
<li> Redmine の API テスト用に初めて heroku 使ってみたけど、すごいですね。やっぱりよくできてますね。

<ul>
<li> テスト用サイトはこちらですが、添付ファイルの永続化とかしてないし本番用に使う気はないのけど、とりあえずうごいている</li>
</ul>
</li>
<li> node.js のパッケージもはじめて作ったけど簡単ですね。

<ul>
<li> npm publish で公開できるのはすごい。PHP でもこういう感じに簡単にしたいなあ。</li>
</ul>
</li>
<li> test は見よう見まねで書き始めたけどちゃんと書きます書きます</li>
<li> node.js 楽しいです</li>
</ul>
<br>

<p>参考にしたものたち:</p>

<ul>
<li> <a href="https://github.com/amachang/facebook-node-sdk" target="_blank">amachang/facebook-node-sdk - GitHub</a></li>
<li> <a href="http://blog.hapicky.com/2011/8/20/redmine-on-heroku-part1/" target="_blank">思考の軌跡 ? herokuでRedmine(1.2.1)を動かす(前編)</a></li>
<li> <a href="http://blog.hapicky.com/2011/8/24/redmine-on-heroku-part2/" target="_blank">思考の軌跡 ? herokuでRedmine(1.2.1)を動かす(後編)</a></li>
<li> <a href="http://gembundler.com/rails23.html" target="_blank">Bundler: The best way to manage Ruby applications</a></li>
<li> <a href="http://devcenter.heroku.com/articles/rails" target="_blank">Deploying Rails Apps on Aspen/Bamboo | Heroku Dev Center</a></li>
<li> <a href="http://devcenter.heroku.com/articles/bamboo" target="_blank">About the Badious Bamboo Stack | Heroku Dev Center</a></li>
<li> <a href="http://d.hatena.ne.jp/yssk22/20100814/1281802092" target="_blank"> npm モジュールを公開してみる - Web屋の人の日記 || WebJourney 開発ログ</a></li>
<li> <a href="http://about.travis-ci.org/docs/user/languages/javascript-with-nodejs/" target="_blank">Travis CI: Building a Node.js project</a></li>
</ul>
</div>
]]></description>

<dc:creator>sotarok</dc:creator>

<pubDate>Wed, 18 Jan 2012 17:35:27 GMT</pubDate>



<category>node.js</category>

<category>redmine</category>


</item>

<item>
<title>いち早く70%〜80%程度の完成度で人に見せられるものを作ることがいかに重要か、という話</title>
<link>http://d.hatena.ne.jp/sotarok/20120105/1325698126</link>

<description><![CDATA[
<div class="section">
<p>去年の年末、Facebookで以下の様な画像が流れてきて自分もついついシェアしたんだけど、久々に、というか、自分にとってのここ最近の課題をドンピシャで突かれたような気がして、しばらく頭から離れなかった。</p>
<p><a href="http://f.hatena.ne.jp/sotarok/20120105014439" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sotarok/20120105/20120105014439.jpg" alt="f:id:sotarok:20120105014439j:image" title="f:id:sotarok:20120105014439j:image" class="hatena-fotolife"></a></p>

<ul>
<li> 出展: <a href="http://www.facebook.com/photo.php?fbid=238092406260478&set=a.238092092927176.52818.100001791608400&type=1" target="_blank">中村 修治さんのフォトアルバム | Facebook</a></li>
</ul>
<br>

<p>「プロ」か「アマチュア」か、というのはこの際どうでも良くて、この図の、上の曲線が、目指すべきところだなって話なだけなので、とりあえずその話をまとめてみることにする。</p>
<p>けど、まぁ、だいたい、こういう話をまとめるのは苦手だし途中で面倒になってしまうので、以下サブセクションだけ先に作ってみたものの、ちゃんと書くかどうかわからない... が、まあ、いい！あと、なんかグダグダ書いてしまいそうだけど、結局、サブセクションのタイトルにしたことをこねくりまわしているだけです。</p>
<br>

<h4> 作ってみるまでわからない</h4>
<p>何にも言えることだけど作ってみるまで、それがどんなものかわからない。人間はその場に無いものがどんなものか評価することはできない。多分、よほどの何かを持った一握りの人でない限り。だから、まずモノが無いと議論が始まらない。</p>
<p>アイデアに価値はない、というのは多くの人が言っていて、僕もそう思ってる。</p>
<p>でも、実際にモノを作るにはアイデアが必要だ。で、アイデアはどんどん湧き出てくる、そして僕らはそれを話しあう。あれもいいね、これもいいね、という話は年中している。で、作り始めるときは、そりゃもちろん「いいね」と思ったものを作る。よくないね、と思ったものは、強要されてるんだ！でない限りは、まぁ作らない。</p>
<br>

<p>ところが、いいね、と思って作り始めたモノなのに、作ってみると、よくなかったりする。逆に、よくないね、と思ったものも、強要されて作ってみたら実はいいね、だったりもする。</p>
<br>

<br>

<p>アイデアレベルで良し悪しを判断することは、絶対にできない。アイデアは、モノになって初めて価値のある何かになって、そこで初めて議論ができる。</p>
<p>だから、要するに作ってみるまでわからない。</p>
<br>

<h4> 手戻るなら早ければ早いほうが良い</h4>
<p>もうひとつ、ウェブサービスにしても何か他のプロダクトにしても、「手戻り」は必ず発生する。作ってみなければわからない、の次の話だ。</p><p>実際に作ってみたら「やっぱコレ違うな...」なんてことはめちゃくちゃ頻繁に起こることだし、というか、まあ、絶対に起こる。一人でサービスを作ったら、だいたい、コツコツつくって、それで、デキた、それで公開、だいたいまあそれでOKだろう。でもそれでも、実際に他の人に使ってもらったら「いややっぱこうだったな」ということは、起こる。数人〜多くの人が関わるプロダクトだったら、なおさら、それは絶対に起こる。 <span class="footnote"><a href="/sotarok/#f1" name="fn1" title="ただし、どのくらいの手戻りが発生するか、というのは、そもそものセンスが関わっている可能性はあるとは思う。センスってなんだよって話だけど">*1</a></span></p>
<p>で、作ってみなければわからないもので、「よくなかった」ものができてしまった、そうしたら、良いものにするために議論をする、そして、修正する、もしくは、最悪、作りなおす。</p>
<p>細部にこだわって全体に手をつけずに時間をかけて作り込んできたものが、ようやく出来上がったとして、そこからの手戻りは、すごくパワーがいる。スケジュールが自由にできない場合、パワーが要るでは済まされず、そもそも、手戻りできない可能性もある。</p>
<br>

<p>だから、出来る限りこのサイクルを、早く・短くしたいわけだ。</p>
<p><a href="http://f.hatena.ne.jp/sotarok/20120105014440" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sotarok/20120105/20120105014440.png" alt="f:id:sotarok:20120105014440p:image" title="f:id:sotarok:20120105014440p:image" class="hatena-fotolife"></a></p>
<br>

<p>赤いのが目指すべきライン、青いのがダメパターンってことです。 適当な絵だけど、だいたいこういうことだよw</p>
<br>

<h4> 実践することの難しさ</h4>
<p>だけど、この話をすすめるうえで非常に難しい点が、「いち早く70%〜80%程度の完成度で人に見せられるものを作ろう」なんてことは、意識してれば出来るというモノでもない、というコト。</p>
<p>というのは、</p>

<ul>
<li> 見た目・細部にこだわる作業はテンションがあがる。

<ul>
<li> たとえば、ウェブサービスで言えば、モックつくる、と言って、スタイルをあてずに真っ白に黒字で作ってるとテンションがあがらないよね。</li>
</ul>
</li>
<li> 早い段階で全体像を見せる、というのは、必ずしも「とりあえず動けば良いで実装を進めれば良い」というわけではない。

<ul>
<li> 細かいトコロやリファクタは後回しにしたとしても「後々ココはこうなるなー」などと想像しながら、ある程度柔軟に対応可能なように作らないと、絶対後々つらくなる</li>
<li> で、それをするには、設計・プログラミングの技術や経験をかなり求められる</li>
</ul>
</li>
</ul>
<p>なんてことがあるからだ。</p>
<br>

<p>だから、ココまでの話を実践するには、ザックリいうと「実力」が必要になる。それを実践するだけの力。</p>
<p>さらにいえば、自分があまりできていないのでなんともいえないけど、「細かいところをとりあえず後回しにしつつ全体が見えるようなものを早い段階でつくりあげる」を実践するには、それ自体を意識し続ける訓練と経験が必要だと思う。</p>

<ul>
<li> 日々それを意識して感覚を鍛える</li>
<li> 細かいトコロはとりあえず捨てる勇気を持つ</li>
<li> 全体像をつくりあげる実力をつける <span class="footnote"><a href="/sotarok/#f2" name="fn2" title="自分の場合で言えば、プログラミングの能力や、設計・ミドルウェアの知識、オブジェクト指向の知識、などです">*2</a></span>

<ul>
<li> 経験</li>
<li> 問題に対する解決方法を日々蓄積しておく</li>
</ul>
</li>
</ul>
<p>なんか当たり前の話に落ち着きつつあるんだけどまあそいういうことなんだろう。。</p>
<br>

<h4> で</h4>
<p>今年の目標としようと思う点。タイトルに戻るけど、</p>

<ul>
<li> <span style="font-weight:bold;" class="deco">「いち早く70%〜80%程度の動くものを人に見せる」</span>を頑張る</li>
</ul>
<br>

<p>もうちょっと細かくいうと、</p>

<ul>
<li> それはつまり、サービス・ソフトウェアライブラリ・何か、に関わらず、自分が今やっている作業が「細かいところ」ではないか、その作業を続けることによって全体が見えるようになるのかを考える。

<ul>
<li> もし細かいトコロをやってしまっていることがわかったら、それが楽しいことでも、とりあえず、やめる。</li>
</ul>
</li>
</ul>
<br>

<p>ということで、またしても全然具体的じゃないけど、今年も頑張っていきます。</p>
<br>

<h4> おまけ。ある程度のものを作るのに役に立つかもしれないと思っているもの</h4>
<p>最終的にウェブサービスに限った話になってきたけど、最近でいえば、以下のツールは、やっぱり、ある程度のモノを早い段階で人に見せるために役に立つと思う。</p>

<ul>
<li> 各種アイコン集</li>
<li> <a href="http://twitter.github.com/bootstrap/index.html" target="_blank">Bootstrap, from Twitter</a>

<ul>
<li> CSS も JS も使える。</li>
<li> このままプロダクトとして外に出すのはちょっとためらわれるけど。こじんてきには。 <span class="footnote"><a href="/sotarok/#f3" name="fn3" title="でも、とりあえずこれでもいいから出しちゃって、あとで見た目綺麗にすればいいや、というアプローチもゼンゼンアリだと思う">*3</a></span></li>
</ul>
</li>
<li> <a href="http://www.initializr.com/" target="_blank">Initializr - Start your HTML5 project in 15 seconds!</a></li>
</ul>
</div>
<div class="footnote">
<p class="footnote"><a href="/sotarok/#fn1" name="f1">*1</a>：ただし、どのくらいの手戻りが発生するか、というのは、そもそものセンスが関わっている可能性はあるとは思う。センスってなんだよって話だけど</p>
<p class="footnote"><a href="/sotarok/#fn2" name="f2">*2</a>：自分の場合で言えば、プログラミングの能力や、設計・ミドルウェアの知識、オブジェクト指向の知識、などです</p>
<p class="footnote"><a href="/sotarok/#fn3" name="f3">*3</a>：でも、とりあえずこれでもいいから出しちゃって、あとで見た目綺麗にすればいいや、というアプローチもゼンゼンアリだと思う</p>
</div>
]]></description>

<dc:creator>sotarok</dc:creator>

<pubDate>Wed, 04 Jan 2012 17:28:46 GMT</pubDate>




</item>

<item>
<title>2011年、今年変わったもの sotarok 版</title>
<link>http://d.hatena.ne.jp/sotarok/20111230/1325243247</link>

<description><![CDATA[
<div class="section">
<p>毎年この時期に、今年のまとめ記事とか書こうと思ってだいたい面倒になって書かないで終わるので、今年はなんとなくちゃんと書いてみようかと思います。</p>
<p>テーマは、今年変わったもの、です。僕にとって変わってものもあれば、世の中的に変わったものもあるかもしれません。そのへんは割りと適当です。</p>
<br>

<h4> ガラケー → iPhone</h4>
<p>これは今年のはじめですが、僕もいよいよ iPhone にしました。遅いって？遅いですよね。</p>
<p>ガラケーでもGoogle Maps見れるし、メールもできるし、なによりケータイサイトが見れるし、アプリもそこまで必要でもないじゃろ、と思っていた割りとずっと必要ないと思ってたんですが、特に、Facebook のようなものは、写真をばしばし投げたい、スマホで見たい、と思い始めたのがきっかけで、ついに iPhone4 を買いました。</p>
<p>それにともない、以下のような変化も。</p>

<ul>
<li> モバイルで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter%3A%20movatter%20%A2%AA%20iPhone%20%A4%CE%20Twitter%20%B8%F8%BC%B0%A5%A2%A5%D7%A5%EA">Twitter: movatter → iPhone の Twitter 公式アプリ</a></li>
<li> 携帯で写真: ほとんどとらない → iPhone でよく撮る</li>
<li> 一眼レフ: いつも持ち歩いてた → ちょっとしたことの場合はもち歩かなくなった</li>
<li> 出かける先の地図とか: 事前に調べてケータイにURL送ってた → 移動中とかに調べるようになった</li>
<li> 持ち歩きでアニメ: iPod で小さい画面で見てた → iPhone で見るようになった</li>
<li> 位置情報の記録: とくになにもしてなかった → Facebook やら、最近だと Path やらで色々チェックインするようになった</li>
</ul>
<p>その他小さな事が様々変わったと思います。音楽とかは相変わらず容量が足りないので iPod Classic で聞いてます。</p>
<p>やっぱり、ネットに張り付いて生活しているので、iPhone だと、Macの前から離れるときでも、シームレスな感じがします。(まぁ、それが良いことかどうかはよくわかりませんが)</p>
<br>

<h4> mixi → Facebook</h4>
<p>オフライン、リアルな友達とのやりとりはほとんど Facebook になりました。特にここ2~3ヶ月、高校や大学の友人も次々と Facebook を始め、あらゆるコミュニケーションがとりやすくなったし、飲み会の調整コストも下がりましたね。</p>
<p>人が増えまくったらまた別の問題も発生するんだろうけど、今のところ、リストを上手いこと管理することで、昔よくあった、人と繋がりすぎてプライベートなことがつぶやけなくなった〜的な問題は、今のところ僕には発生していません（ま、リストを真面目に管理するって人はそんなに多くないとはおもいますが）</p>
<p>位置情報、写真の共有、メッセージのやりとりのすべてがやりやすくなった気がします。</p>
<p>1つあるとすれば、mixi にあった日記のような、フローではないストック型のひとまとまりの文章を共有する場所がなくなりましたね。mixi でみんなの日記をたまに見てまわるのは好きだったのですが。</p>
<br>

<h4> グリー → クロコス</h4>
<p>完全に個人の話ですが、転職しました。</p>
<p><a href="http://f.hatena.ne.jp/sotarok/20111230200337" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sotarok/20111230/20111230200337.jpg" alt="f:id:sotarok:20111230200337j:image:w360:right" title="f:id:sotarok:20111230200337j:image:w360:right" class="hatena-fotolife hatena-image-right" width="360"></a></p>
<p>転職に際しては、自分の中でも迷いがありました。当時もブログに書きましたが、絶賛成長中のグリーでの仕事はアプリ系のインフラとしてフレームワーク作ったりとかしていたので、それはそれでめちゃくちゃ楽しかったし、様々な課題がそこら中に転がっていたし、なにより、尊敬できるエンジニアが回りにたくさんいて、エンジニアとして働く環境としては、自分にとっては非常に良い場所だったからです。</p>
<p>でも、去年の12月に岡元さん、小澤さんと出会い、これほどの機会は、今後ほとんど無いんだろうな、と考えた時、自分が後悔しないためには、とりあえずやってみるしかないっしょ、と思い、会社をつくり、参画することを決めました。</p>
<p>会社を移ってから半年ですが、まだまだスピード感が足りないとか、足回りが整ってないとか色々ありつつも、自分たちでサービスをつくりそれをどうやって広めていくか、使ってもらうか、今後それをビジネスにしていくかを必死に考え、とにかく手を動かすことはできたのではないかと思います。</p>
<p>今年はまだまだ荒削りでざっくり前に進んできた感があるので、来年はより具体的に自分たちの成長路線を定めて、変わらず手を動かしつつ、新しいことにチャレンジしていこうと思います。</p>
<p>それにともなって変わったものは、もう書き切れないですね。とにかく、ひとつ言えるのは、人付き合いの幅が広くなったと思います。</p>
<p>来年も、よりよい変化を起こしていきたいと思います。</p>
<br>

<h4> その他よく使うようになったツールとかサイトとか変わらないものとか</h4>

<ul>
<li> Twitter : まあ、ずっと、息を吸うように使っている</li>
<li> Path: 最近よくつかう</li>
<li> Speaker Deck: SlideShare から移った</li>
<li> Sparrow: メーラ。Thunderbird から移った。</li>
<li> Alfred: ランチャ。Spotlight/QuickSilverから移った。</li>
<li> Lion: Mac OS。Snow Leopard から移った。</li>
<li> 変わらないもの: Twitter, vim, Opera, はてダ, Red Bull</li>
</ul>
<p>あと、Facebook のタイムラインによると。</p>

<ul>
<li> Facebook上で増えたともだち: +222人</li>
<li> いいね: +278</li>
<li> スポット: 382チェックイン</li>
</ul>
<br>

<h4> 開発の話</h4>
<p>ちょっと細かい話。</p>
<p><a href="http://f.hatena.ne.jp/sotarok/20111230200500" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sotarok/20111230/20111230200500.jpg" alt="f:id:sotarok:20111230200500j:image:w400:right" title="f:id:sotarok:20111230200500j:image:w400:right" class="hatena-fotolife hatena-image-right" width="400"></a></p>
<h5> SVN → Git</h5>
<p>いや、これ必ずしも今年というわけではないですが、個人的には 2008 年あたりから移りつつ合った Git ですが、Ethna のリポジトリ、会社のリポジトリ、自分の周りの環境はあらゆるものが Git になりました。SVN を使っている環境はほとんどもう触れないため svn コマンドは忘れたほどです。</p>
<p>Git にして、開発スタイルもあらゆる面で変化しました。</p>

<ul>
<li> とりあえずコミットできる</li>
<li> とりあえずブランチを切れる</li>
<li> ローカルでもオフラインでもどこでも開発できる、コミットできる</li>
<li> 歴史をどうにでもできる</li>
<li> 他人との開発で patch のやりとりが簡単にできる</li>
</ul>
<br>

<h5> Firefox → Google Chrome (Canary)</h5>
<p>Google Chrome の開発者ツールは、昔一度使ってみたもののいまいち慣れなくて Firebug を愛用していたためずっと開発用ブラウザは Firefox だったのですが、ふと Google Chrome の Canary を開発用ツールとして使い始めたら、だいぶ使いやすくなっているし機能も圧倒的に良いし軽いしってことで、開発用ブラウザは Google Chrome Canary になりました。</p>
<br>

<h4> そんなわけで</h4>
<p>変わったもの、変わらないもの、色々ありますが、来年は何がどう変わるか、楽しみですね。僕も、自分/自分たちのチカラで、自分のこと、自分の周りの人のことを、良い方向に変えていけたらいいなあと思います。</p>
<p>みなさま今年も大変お世話になりました。</p>
<p>良いお年を！</p>
</div>
]]></description>

<dc:creator>sotarok</dc:creator>

<pubDate>Fri, 30 Dec 2011 11:07:27 GMT</pubDate>




</item>

</channel>
</rss>

