2013年12月31日火曜日

へっぽこプログラマーの2013年購入ガジェットまとめ

大晦日ですね。2013年も残すところあと数時間。
昨年もやりましたが、購入したガジェットなどをまとめてみようかなと。

2012年は色々買いましたが、2013年はあまり買っていないような気がしています。
さて、どんなもんでしょうかね。



スマートフォン・タブレット関連


Nexus 7 黒 16GB

Nexus 7は手ごろな7インチタブレットが欲しくて買った。コスパは良いと思う。サクサク動くし画面もそれなりに綺麗だし。
Kindleでマンガ読む専用機になりつつある。

iPhone 5c ブルー 16GB docomo版

iPhone 5cは青可愛くて良いなと思って買った。色は気に入ってる。iOS7のデザインは嫌いじゃない。でもiOSの操作はやっぱり肌に合わない。サイズはまぁまぁ良い。

Nexus 5 白 16GB イーモバイル版

Nexus 5はGalaxy Nexus(SC-04D)がモッサリしてきたのでMNPして買った。サクサク動くし画面綺麗だし、Android 4.4でこなれてきたなぁと感じた。安いし買って良かったと思う。大きい割には持ちやすいし。でも大きいけど。


3機種とも買おうと思った翌日には手にしていた。思い立ったら即購入だったが外れを引いてはいないとは思う。


カメラ関連


Panasonic LUMIX G X VARIO 35-100mm F2.8 Power O.I.S.

35-100mm F2.8は友人の結婚式に持って行く明るいズームが欲しいと思って購入。防塵防滴なのはとても良い。最短撮影距離が80cmなのはちょっとツライ。
結婚式用にはわりと使い勝手が良い画角だったが、手元の料理撮る用には別のレンズがあったほうが良かった。
画的にはM.Zuiko 75mm F1.8には及ばないかなと個人的には思う。

Panasonic LUMIX G VARIO 20mm F1.7 II ASPH.

    20mm F1.7は、何で買ったか覚えてないけど見てたら欲しくなって買ったとかそういう感じだったと思う。パンケーキで使い勝手はとても良い。持ち運ぶのに邪魔にならないし。
    E-M5に付けたときのバランスも悪くない。SIGMA 19mm F2.8との使い分けどうしようとかちょっと思うくらいで買って良かったなと思う。


    もう1個m4/3のボディ欲しい気がするので2014年には買うかもしれません。それよりもSTYLUS-1買ってしまうかな?という気がしないでもないですが。




    端末×3のレンズ×2なので2012年と比べると全然ですね。来年はもうちょい大人しくても良いかなとは思っている。



    それでは皆様良いお年を。
    来年もよろしくお願いします。

    2013年12月26日木曜日

    mecab-python-0.999をWIndows 64bit版で利用する方法。

    mecabは普通にWindows版の0.999をインストーラで入れておく。
    Microsoft Visual C++ 2010 Expressなんかを入れておく。

    mecab-0.999.tar.gzを展開し、cygwinなどで./configureを実行。

    src/feature_index.cpp(356)
    size_t を unsigned int へ置換
                case 'F':  {
                  const char *r = getIndex(const_cast<char **>(&p), F.get(), usize);
                  if (!r) goto NEXT;
                  os_ << r;
                } break;
                case 't':  os_ << (size_t)path->rnode->char_type;     break;
                case 'u':  os_ << ufeature; break;
                case 'w':
    
                case 'F':  {
                  const char *r = getIndex(const_cast<char **>(&p), F.get(), usize);
                  if (!r) goto NEXT;
                  os_ << r;
                } break;
                case 't':  os_ << (unsigned int)path->rnode->char_type;     break;
                case 'u':  os_ << ufeature; break;
                case 'w':
    
    src/writer.cpp(260)
    (usigned int)を追加
                // input sentence
              case 'S': os->write(lattice->sentence(), lattice->size()); break;
                // sentence length
              case 'L': *os << lattice->size(); break;
                // morph
              case 'm': os->write(node->surface, node->length); break;
    
                // input sentence
              case 'S': os->write(lattice->sentence(), lattice->size()); break;
                // sentence length
              case 'L': *os << (unsigned int)lattice->size(); break;
                // morph
              case 'm': os->write(node->surface, node->length); break;
    
    src/Makefile.msvc(6)
    /MACHINE:X86 を /MACHINE:X64 へ置換
    CFLAGS = /EHsc /O2 /GL /GA /Ob2 /nologo /W3 /MT /Zi /wd4800 /wd4305 /wd4244
    LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X86 ADVAPI32.LIB
    DEFS =  -D_CRT_SECURE_NO_DEPRECATE -DMECAB_USE_THREAD \
            -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
            -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
            -DUNICODE -D_UNICODE \
            -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\""
    
    CFLAGS = /EHsc /O2 /GL /GA /Ob2 /nologo /W3 /MT /Zi /wd4800 /wd4305 /wd4244
    LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X64 ADVAPI32.LIB
    DEFS =  -D_CRT_SECURE_NO_DEPRECATE -DMECAB_USE_THREAD \
            -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
            -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
            -DUNICODE -D_UNICODE \
            -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\""
    
    src/make.batを以下の様に書き換え。

    call "%PROGRAMFILES(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" X64
    nmake -f Makefile.msvc

    [スタートメニュー] ->[Microsoft Visual Studio 2010] -> [Visual Studio Tools] -> [Visual Studio x64 Win64 コマンド プロンプト (2010)]を起動してmecab-0.999/srcへ移動する。
    make.batを実行する。

    libmecab.libとmecab.hをmecab-0.996.tar.gzの展開先へコピー
    setup.pyを以下のように書き換える。
    #!/usr/bin/env python
    
    from distutils.core import setup,Extension
    
    setup(name = "mecab-python",
     version = '0.996',
     py_modules=["MeCab"],
     ext_modules = [
      Extension("_MeCab",
       ["MeCab_wrap.cxx",],
                            include_dirs=[r'.'],
       library_dirs=[r'.'],
       libraries=['libmecab'])
       ])
    

    [Visual Studio x64 Win64 コマンド プロンプト (2010)]でmecab-python-0.999.tar.gzの展開先へ移動してpython setup.py bdist_wininstを実行する。

    distの下にインストーラが出来るので実行する。

    lib/site-packagesへmecab-0.999/src/の下に出来ているlibmecab.dllをコピーする。

    以上。

    ちなみにmecabをインストールする際に選んだ文字コード以外だとうまく動かないような気がします。
    (ちゃんと確認したわけではありませんが、そんな感じだったので・・・。Sphinxから使うならWindowsでもUTF-8とかにしておくのが幸せになれるかも。)


    [参考]
    http://neu101.seesaa.net/article/272153413.html
    http://www.ipentec.com/document/document.aspx?page=mecab-compile-for-x64-windows-use-x64-windows




    実はこの記事は9ヶ月前くらい(2013/03上旬)に書いて公開を忘れていたとかそういうあれのやつです。内容古いかもしれませんが一応公開しておこうと思います。

    2013年12月17日火曜日

    あなたがブログを続けなくて良いたった一つの理由

    ブログを続けるデメリット、それは時間を取られることではないでしょうか。
    ネタを用意したり裏を取ったり構成考えたり文章を書いたりと。

    それが面倒だと感じるのなら続ける必要はないと思います。

    ブログを書く時間があったら他のやりたいことをする時間に充てた方がよっぽど有意義です。
    友人と会うとか本を読むとかプログラミングするとか写真を撮るとかそういうことにです。

    ブログを書くというある意味オマケ的な作業にそんなに時間を使うこともないのではないでしょうか。

    人生で使える時間は有限です。
    面倒だと感じることにそんなに時間を割いてないでやりたいことをやるべきです。

    ということで、ブログを続けなくて良いたった一つの理由は『ブログを書くより有意義と感じることに時間を使うべきだから』です。

    ブログを書くべきとか書かなければいけないとか言ってないでもっと肩の力を抜いていきましょう。

    あなたはプロのブロガーですか?
    答えがノーならば無理して続けなくて良いですよ。

    最後に

    こんな記事を書いておいて、じゃあお前なんでブログやってんの?って言われそうなので書いておきます。
    なんとなく書きたいと思う時があったり、ググると自分のためのメモが出てくるのが便利だなと思ったりするからたまに書いてるだけです。
    基本的にブログ書くのは面倒だなと思ってます。特に文章の構成とか考えるのが。
    まぁ特別やめたいとか思わないですけど。

    あとこれを書いたのは、ブログを書くべきだとか書かなきゃいけないと意識高い記事を見て「うへー、息つまりそう……」とか思ったあとに、ネタになるな思ったので書いてみた次第です。

    ブログを続けるメリットはあると思うし、楽しく続けられる人はやったほうが良いんじゃないですかね。

    2013年11月23日土曜日

    Rubyがシステムにインストールされていない環境でrbenv globalをクリアする方法

    rbenvでglobalの設定をクリアしてシステムのRubyを使うように設定したい時はrbenv global systemとかやれば良いのですが、システムにRubyがインストールされていない状態でやるとエラーになります。

    システムにRubyがインストールされていない環境でglobalにはなにも設定されていない状態に戻したい時は、$RBENV_ROOT/versionを削除するとglobalになにも設定されていない状態に戻ります。


    Vagrantで環境作っててハマったのでメモっておきます。

    2013年11月15日金曜日

    Vagrant 1.3.5 + VirtualBox 4.3.2でvagrant up出来なかった。

    Vagrantを使おうと思って、2013/11/15現在で最新のVagrant 1.3.5とVirtualBox 4.3.2をインストールしたらvagrant up出来なかった。

    どうやらVagrant 1.3.5だとVirtualBox 4.3系はサポートされていないらしい。
    サポートされているのは4.0/4.1/4.2。

    VirtualBox 4.2.18をインストールしたら無事にvagrant up出来た。

    2013年11月13日水曜日

    feedlyへフィードを登録するボタンを追加してみました。

    しばらく前にGoogle Readerがサービス終了したのでfeedlyへ移行した人も多いのではないでしょうか。
    そこでfeedlyで簡単に購読できるようにボタンを設置してみました。


    feedlyでブログパーツを作る

    1. feedlyにアクセス

    まず、「http://www.feedly.com/factory.html」にアクセスします。


    2. ボタンの種類を選ぶ

    15種類(2013/11/13現在)の中から好みのものを選んでクリックします。
    このブログでは左上の一番大きくてフラットじゃないやつを選びました。


    3. フィードのURLを入力します。

    フィードのURLを入力します。
    このブログの場合は「http://blog.yujigraffiti.com/feeds/posts/default」を入力しました。
    ここでちょっと気を付けなきゃいけないのが、URLを間違ってても特にエラーにはならないので正確に入力してください。


    4. HTMLコードをコピー

    ここで実際のボタンが表示されるので動作確認が出来ます。押すと新しいタブなりウィンドウなりでフィードのURLが開かれます。
    そしてその下に生成されたHTMLコードが表示されるのでコピーします。


    5. 表示したいところに張り付ける

    このブログはBloggerを使っているので [レイアウト] → [ガジェットを追加] → [HTML/JavaScript] で追加しました。


    おまけ

    ついでに普通のフィードへのリンクのアイコンも追加してみました。
    Feed Iconsからアイコンをダウンロードしてサイズの調整だけしました。そしてfeely用のアイコンの横に出るようにガジェットのHTMLを書いて表示させました。

    2013年11月6日水曜日

    Redmine Bitbucket Pluginにプルリク出したら速攻で取り込まれた。

    仕事でRedmine Bitbucket Plugin使ってて、消したブランチがRedmineで見ると残ったままになってるのが気になったのでそれをどうにかするプルリクを出しました。
    速攻でマージしてもらえました。

    やったことはgit fetchするときに--pruneを付けるかを選べるオプションを追加しただけ。
    そう、対応したのはGitだけ。
    Mercurialでブランチ使ったことないしそういう挙動が必要かわからなかったので。


    気が向いたらRedmine Gihub Hook Pluginにも同じようなプルリク出しましょうかねぇ。

    2013年11月5日火曜日

    Bloggerのモバイル版でSyntaxHighlighterを使う

    どうも4か月半ぶりの更新らしいです。
    なんとか生きてます。
    仕事が忙しかったりなんだりで力尽きてブログ放置してました。



    まぁ本題に入りますと、Bloggerのモバイル版でSyntaxHighligher使ってるとこがどうもうまく表示されないなぁと思っていたんですが、設定がちゃんと出来ていなかったようなので、備忘録を。

    BloggerでSyntaxHighligher使うには下の画像のように設定されていると思います。
    設定方法はこのあたりを見ればわかると思います。



    で、モバイル版の設定ですが、[テンプレート] -> [歯車アイコン]でダイアログを出します。



    そして[モバイル テンプレートを選択]のドロップダウンで[カスタム]を選択し、[保存]を押すだけです。



    結局、何故うまく表示されていなかったかと言うと、モバイル版を表示するときにカスタムしたテンプレートが使われていなかったからというオチです。
    この設定をしておけば表示されるはず。
    以上。




    P.S.
    もうちょっとちゃんと更新するようにしたいな……。

    2013年4月21日日曜日

    Lubuntu 12.10でgtk.gladeのImport Errorを何とかする。

    Lubuntuでobmenuをインストールして使おうとしたところ、起動時に"Import Error: No module named glade"みたいなエラーが出て使えませんでした。

    解決方法としてはpython-glade2を再インストールするといいらしいです。
    ということで以下のコマンドを実行したところ解決しました。

    $ sudo aptitude reinstall python-glade2
    



    [参考]
    http://mumeiyamibito.blogspot.jp/2012/08/gtkglade-import-error.html

    Sublime Text 2をaptitude(apt-get)でインストールして日本語入力可能にするまで。

    aptitude(apt-get)でSublime Text 2を導入

    ppaを追加するとaptitudeでSublime Text 2がインストール出来るようになります。
    以下のような感じで実行するとSublime Text 2がインストールされます。
    $ sudo add-apt-repository ppa:webupd8team/sublime-text-2
    $ sudo aptitude update
    $ sudo aptitude install sublime-text
    
    実行する時は以下のコマンドで。
    $ subl
    

    Packagesを導入

    起動したら[View] -> [Show Console]を実行して表示されたコンソールに以下を入力してPackagesを有効にする。
    import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
    

    InputHelperを導入

    日本語入力するには、[Tools] -> [Command Palette...]でパレットを出して、"Package Control:Insall Package"と入力してEnter。表示される入力欄に"InputHelper"と入力してEnter。

    Shift + Ctrl + Zで入力欄が出るのでそこに日本語を入力してCtrl + Enterで入力。出来るらしい。。。
    というのも、Lubuntu 12.10ではうまく動作しなかった。


    SublimeIBusを導入

    SublimeIBusはibus.elをSublime Text 2へ移植したものらしいです。
    まだアルファ版だそうですが一応使えました。
    Lubuntu 12.10ではiBus-anthyがデフォルトで入っているので以下のコマンドだけでOKです。
    他の環境ではiBusのインストールとかpython-ibus、python-dbusのインストールが必要かもしれません。
    Gitがインストールされていない環境ではZIPでダウンロードしてきて展開すればOKだと思います。
    $ sudo aptitude install python-xlib
    $ cd ~/.config/sublime-text-2/Packages
    # gitがインストールされている場合
    $ git clone git://github.com/chikatoike/SublimeIBus.git
    # gitがインストールされていない場合はZIPでダウンロードして展開
    $ wget https://github.com/chikatoike/SublimeIBus/archive/master.zip -O SublimeIBus-master.zip
    $ unzip SublimeIBus-master.zip
    $ mv SublimeIBus-master SublimeIBus
    
    Ctrl + ¥で日本語入力ON/OFFの切り替え。
    日本語入力ONになっていると確定している文字列を消せなかったので適宜切り替えて使うのが良さそう。

    Lubuntu 12.10でOracle JDKを使用する方法

    openJDKではなくOracleのJDKを使いたいときは以下のような感じで実行するとインストール出来る。
    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo aptitude update
    $ sudo aptitude install oracle-java7-installer
    

    Lubuntu 12.10でGit 1.8を使う方法

    2013/04/21日現在でLubuntu 12.10にaptitude(apt-get)でGitをインストールすると1.7がインストールされる。
    1.8を使いたい場合は以下の手順が必要。
    # リポジトリ情報追加
    $ sudo apt-add-repository ppa:git-core/ppa
    # 再読み込み
    $ sudo aptitude update
    
    # 新規インストールする場合
    $ sudo aptitude install git
    
    # インストール済みでバージョンアップする場合
    $ sudo aptitude upgrade git
    


    P.S.
    たぶんUbuntuでも同様の手順で出来ると思います。

    2013年4月1日月曜日

    SonyWalkman専用NowPlayingアプリ(NowPlaying from W.ミュージック)を公開しました。

    Sony Walkman公式アプリのW.ミュージックからNowPlayingをシェアするアプリを作ってみました。

    簡単に検索してみたところ、W.ミュージックに対応しているアプリはこのアプリが初なのではないでしょうか。(ないから作ったんですけどね。)



    今のところ機能はこんな感じです。
    1. twiccaのツイート画面から再生中の曲情報をツイート(twiccaツイート編集プラグイン)
    2. twiccaの検索画面で再生中の曲情報からツイートを検索(twiccaキーワードプラグイン)
    3. マッシュルームによるツイート(simeji/ATOK/OpenWnn)
    4. アプリランチャーから再生中の曲情報をツイート




    ダウンロードは以下から

    https://play.google.com/store/apps/details?id=jp.yujideveloper.wmnowplaying




    ちなみに今回はアイコン制作を少しだけ頑張りました。



    追記(2013/04/01 12:11):
    このアプリはSony Walkman ZシリーズとFシリーズ専用です。

    2013年3月22日金曜日

    Teedaで動的にValidatorを変更(ダイナミックバリデータ)する方法

    この辺ですこしハマったりなんだり面倒だったので備忘録。

    やるべきことは以下のような感じ。
    1. get + <id> + Validatorでメソッドを作る。
    2. 複数のValidator使いたい場合はValidatorChainを使う。
    3. Validatorメソッドが呼ばれるのはPageクラスに値がセットされる前なのでプロパティの値を使いたい場合はjava.util.Mapなparamプロパティを用意する。 

    fugaFormのbarテキストはfooに値が入っているときのみ必須とかしたい場合は以下のような感じ。

    Page [hoge.html]:
    <form id="fugaForm">
     <input id="foo" type="text" />
     <input id="bar" type="text" />
    </form>
    
    Pageクラス [HogePage.java]:
    class HogePage {
     public String foo;
     public String bar;
    
     public Map param;
    
     public validator getBarValidator() {
      ValidatorChain validatorChain = new ValidatorChain();
      String foo = (String)param.get("fugaForm:foo");
      if (foo != null && !foo.empty()) {
       validatorChain.add(new TRequiredValidator());
      }
      TLengthValidator lengthValidator = new TLengthValidator();
      lengthValidator.setMaximumLength(...);
      validatorChain.add(lengthValidator);
      return validatorChain;
     }
    }
    


    [参考]
    http://teeda.seasar.org/ja/extension/reverse/validation.html#ダイナミックバリデータを使用するには
    http://d.hatena.ne.jp/Leblanc/20071122/1195702264

    2013年3月11日月曜日

    Windows7のMySQLのサーバ用の設定ファイル

    Windows7やWindows8でMyQLのサーバ用の設定ファイルは"C:\ProgramData\MySQL\MySQL Server 5.6\my.ini"にある。

    "C:\Program Files\MySQL\MySQL Server 5.6\my-default.ini"とか"C:\Program Files\MySQL\MySQL Server 5.6\my.ini"はクライアント用。

    2013年3月7日木曜日

    初めてのpull requestがマージされました。

    先日、遅まきながらpull requestデビューを果たしました。(デビューが遅くて恥ずかしや・・・)

    それというのもredmine bitbucket pluginです。
    このプラグインはBitbucketのリポジトリに変更が入るとRedmineに通知してくれるというあれです。

    どんな変更を送ったかといいますと、gitコマンドとhgコマンドのパスを指定できるようにしてくれという感じです。

    実際のやりとりを見ていただければわかりますが、僕の未熟さゆえすんなりとは行きませんでした。
    何回かのやり取りを経てなんとかMergeしてもらえましたとさ。

    めでたしめでたし。

    2013年3月5日火曜日

    MySQLでパイプ(||)を使って文字列を結合する。

    MySQLはPostgreSQLなどのようにパイプで文字列結合が出来ません。
    MySQLで文字列を結合する時はconcatかconcat_wsを使うかと思いますが、実は他のDBMSと同じようにパイプ(||)で文字列を結合するように設定することができます。

    パイプを使用して文字列を結合する方法はsql_modeにPIPES_AS_CONCATを追加するだけ。

    set sql_mode=PIPES_AS_CONCATするなり、my.cnf(my.ini)で設定するなりすると有効になります。
    setだとセッション中のみ有効なので、my.cnfに設定しておくのが良いのではないでしょうか。

    ちなみに、Amazon RDS for MySQL(AWS)でも[RDS Management Console] -> [DB Parameter Groups]で設定することで有効になりました。
    (尚、RDSのdefaultのParameter Groupは設定が変えられないので、変えたいときは新規作成するとよいと思います。)


    [参考]
    http://www.s-quad.com/wordpress/?p=1319

    2013年3月3日日曜日

    WindowsでPILを正しくインストールする。

    WindowsへPILをインストールする際に注意することを自分のためにまとめておく。
    • PILではなくpillowをインストールする。(pillowはPILをforkしたものらしい)
    • "pip install pillow"ではなく、"easy_install pillow"を使う。

    pipを使ってインストールすると、インストール時にコンパイルが走って各種ライブラリが有効でないPILが出来てしまう。
    easy_installを使うとコンパイルなしで全部入りのPILがインストールされる。


    [参考]
    http://cointoss.hatenablog.com/entry/2013/01/25/140313

    twicca Tumblrプラグインv1.5.3を公開しました。


    Twitterでエゴサーチしていたら、twicca Tumblrプラグインの認証周りにバグがあり落ちる問題を発見しました。
    ちょっと調査したところ楽勝で再現したので修正しました。

    oauth_verifierを処理するコードがヘボくて、Tumblrが返すURLに"#_=_"みたいなのが付くようになったことで上手く動いていませんでした。(地味に原因に気付くのに時間が掛かりました。)
    java.net.URIを使ってなかったのは何故なのかと、このコードを書いた当時の自分に小一時間説教したいくらいです。



    Playストアにはしばらくしたら反映されると思います。

    ダウンロードは以下から。

    https://play.google.com/store/apps/details?id=jp.yujideveloper.twiblr


    2013年2月21日木曜日

    「写真がもっと上手くなる デジタル一眼 撮影テクニック事典101」を読んでみました。

    お昼休憩でちょっと更新。

    ちょっと前にTwitterか何かで知って「写真がもっと上手くなる デジタル一眼 撮影テクニック事典101」のKindle版を買ってみました。
    僕が買った時(2013/01/18)は\334ととておもお買い得でした。
    (2013/03/21 13:00現在でKindle版が\667、通常版が\1,050です。)

    この手の本は、まぁなんというかこういう時はこうするべきみたいな押しつけが結構きついのもあったりなんだりして、微妙なのも結構ある気がします。
    (なんてことを言えるほどちゃんとそれができるわけじゃないけど。)

    この本は違うかというと、わりとソフトかな思います。
    色々試してみたいことが出てきたので、写真を撮りに行きたくなりました。
    寒いけど炬燵に籠ってる場合じゃないですね!

    土曜日(2013/02/23)あたりに梅か何かを撮りに行きたいなと思います。



    Kindle版はこちらからどうぞ→写真がもっと上手くなる デジタル一眼 撮影テクニック事典101 Kindle版
    通常版はこちらからどうぞ→写真がもっと上手くなる デジタル一眼 撮影テクニック事典101


    2013年2月20日水曜日

    mod_wsgiはUnicode型だとバグる?

    どうもお久しぶりです。

    お仕事楽しいです。
    今のところプログラム書くよりインフラなことばっかりやってますけどね。
    RedmineセットアップしたりEC2とかRDSに環境作ったり。


    本題に入ると、とある理由にお仕事でちょっとしたCGI的なものを書く機会がありました。
    PerlとかPHPで書けばよかったんですが、Python推しな僕はPythonで書いてみようかと思い立ちました。

    最近はmod_pythonじゃなくてmod_wsgi使おうね的な感じらしいですね?
    でまぁ適当に使ってみました。

    この辺からWindowsのApache2.2 Python2.7用の3.3のバイナリを落としてインストールして使いました。

    だいたいうまく動くんですけど何故か、レスポンスを返すあたりでTypeErrorでUnicodeがなんちゃらと言われて落ちてHTTPの500になるケースがある。
    最初は文字コードとかを疑ったんだけど、英数字だけの文字列だった。
    色々試してみて、レスポンスで返す文字列をstr()したら落ちなくなった。

    なんじゃそりゃと思ってちょっと調べたりコードを斜め読みしたところ、どうもmod_wsgiはUnicode型だとLatin-1にエンコードしてるような感じですね?
    ダメだよねそれ。

    なんてとこに一昨日くらいにハマって数時間ほどデバッグしたとかね。





    P.S.
    Windwosストアアプリを作ってみようかと思いたちまして、というか今年の目標にしたのを思い出しまして、ここらを見ながらHelloWorldまではやりました。

    2013年2月5日火曜日

    Subversionのリモートリポジトリをコピー(svnsync)する。

    お仕事でリモートのSubversionのリポジトリ(とあるホスティングサービスで借りてるやつ)をコピーしてきてローカルでSubversionサーバを構築する必要があったので方法を手順を調べたので、ここにも書いておく。

    まずは、空のリポジトリを作る。
    svnadmin create リポジトリ名

    Linux/Unixの場合は以下のようにしてhookスクリプトを編集する。
    vi リポジトリ名/hooks/pre-revprop-change
    hookスクリプトは以下の内容を保存する。
    #!/bin/sh
    exit 0
    
    hookスクリプトに実行権限を与える。
    chmod +x リポジトリ名/hooks/pre-revprop-change
    Windowsの場合は、リポジトリ名\hooks\pre-revprop-change.batに以下の内容でhookスクリプトを作成する。
    exit 0
    


    次にsvnsync initでコピー先(例ではfile:///~のリポジトリ)とコピー元(例ではリモートのリポジトリ)を設定する。
    svnsync init file:///リポジトリパス/リポジトリ名 リモートリポジトリのURL
    
    最後にsvnsync syncで同期を実行する。
    svnsync sync file:///リポジトリパス/リポジトリ名
    
    以上。

    なんてことをやる為のBashスクリプトを書いたとか。
    Bitbucketに放り込んでおいたので興味がある人は見てみてください。
    https://bitbucket.org/yuji_developer/syncsvnrepo










    SyntaxHighlighterをBloggerに入れてあったのを思い出したので使ってみたけど、なんかちょっと面倒だった。

    2013年1月27日日曜日

    転職後2週間を振り返ってみて。



    転職して2週間ちょっと経ちました。
    最近すっかりブログをサボっていましたね。
    利害関係がどうので書けなかったわけではないです。はい。

    じゃあネタがなかったかと言うとそういうわけでもないです。
    色々バタバタしていたので落ち着いてブログ書こうという気にならなかっただけです。

    入社初日から客先へミーティングに出向いたり、そのまま流れで飲みにいったり、翌日にオートサロンに行ったりと色々ありました。
    緊急対応みたいのもありましたね。

    まだプロジェクトのフェーズ的にあまりプログラムを書いたりとかはないのがあれですが、これから徐々に出てくるでしょう。

    色々初めてのことばかりで戸惑っていますが、わりと充実してます。





    冒頭の写真は新宿区某所にあるオフィスの非常階段からFUJIFILM XF1で撮影した一枚です。
    水平取れていないのがイマイチですね。

    最近あまり写真撮ってないのでなんとなく悶々していますが、寒いと炬燵とか布団から出れないんですよね……。

    2013年1月14日月曜日

    CP+2013で僕の写真が展示されるかも?


    FUJIFILM Xseries Japan × 東京カメラ部 CP+2013展示写真応募企画に応募してみました。

    FUJIFILM Xシリーズカメラで撮影した写真を応募すると、選考の上でCP+2013で富士フイルムブースに展示されるそうです。
    さらに展示された作品は、展示された写真と同じ物「Xプリント(A3サイズ)クリスタル (超光沢)」をプレゼントしてもらえるそうです。

    昨年末にFUJIFILM XF1を購入した僕としては応募しない理由がありませんので、応募してみました。
    3枚まで応募できるので3枚応募しましたが、1枚くらい選考を通ってくれたらなぁと思います。(たいした写真がなくて選ぶのが辛かったです。)





    2013年1月9日水曜日

    最近Twitterから頻繁にくるメールを駆逐する方法

    最近やたらとTwitterからメールが来ませんか?
    どうにかしたいなぁと思っていたら、ここに解決方法が載ってました。

    手順としては、

    1. Twitterにログイン

    2. 右上のメニューから[設定]を選択



    3. 左のサイドメニューから[メール通知]を選択



    4.下の方の[Twitterからの最新情報]の不要なもののチェックを外す





    こんな感じで設定するとメールがこなくなると思います。

    僕はいくつかあるアカウントで全部設定するのが面倒でした。
    新しいのが増えるとデフォルトでONになるようですね。
    うーん。

    Lexar Professional 600倍速SDXC 64GBを購入してみました。

    先日東芝製の東芝製のSDXCカードを購入しましたが、どうもWriteが遅いのでLexarのSDXCカードを購入してみました。

    このSDXCカードは公称値でRead 90MB/sWrite 60MB/sとなっています。


    ■ ベンチマーク(Lavie Z LZ550/JSで)

    では、さっそくベンチマークを。

    まず、以下が前回Lavie Zで取ったTOSHIBA製のベンチマークです。



    そして以下が今回購入したLexar製のベンチマークです。



    先日の東芝製のものと比べるとReadはともかくWriteはだいぶ速いですね。
    公称値と比べてもまぁわりと納得できる数値ではないでしょうか。

    これくらい出ていればデータ用のストレージとしてかなり使えそうな気がしますので買ってよかったかなと思います。

    TOSHIBA製のSDXCの処遇をどうするかを考えないといけませんね。



    ■ おまけ(acer Aspire TimelineX 3820T-N52Bでもベンチマーク取りました)

    前回同様にacer 3820Tでもベンチマークを取ってみました。
    まず、前回のTOSHIBA製のベンチマークです。


    そして今回購入したLexar製のベンチマークです。



    注目すべくは512kのWriteが約10倍になっているところでしょうか。
    他はまぁトントンですね。












    ■ 余談

    ブログを更新するためにものを買っているの?と突っ込まれましたが、けっしてブログを更新するために買ってるわけではありません。
    買ったから書いているだけで……。結果として更新頻度が上がってるだけです。



    さて、明日から新しい会社です。
    不安でいっぱいですが、どうなることやら。





    ESET Smart SecurityをインストールしたPCで共有フォルダにアクセスできない場合の対処法。

    初回ネットワーク接続時に通常はネットワークの種別を選択するダイアログが出るんですが、それが出なくて共有フォルダにアクセスできないとかそういうことになることがあります。

    ダイアログでホームネットワークを選んでいないとパーソナルファイアウォールで色々ブロックされてしまうのですね。

    そんな時は、手動で設定を追加します。
    (再起動するとダイアログが出て万事解決することもありますが。)

    覚書程度ですが手順を書いておきます。
    1. まず、タスクトレイのアイコンをダブルクリックするなどして、ESETの設定画面を開きます。
    2. 次にサイドメニューの[設定]をクリックします。
    3. 設定の一覧が出るので[ネットワーク]をクリックします。
    4. [ゾーンの設定]をクリックします。
    5. ゾーン設定のダイアログが出るので、[新規]をクリックします。
    6. ゾーン設定を入力します。
      参考までに新規のWiFiに接続したときの設定例
      1. [名前]に適当に名前を入力します。
      2. [IPv4アドレスを追加]を押します。
      3. [サブネット]を追加してアドレスとサブネットを入力します。
        例: 192.168.1.0 / 255.255.255.0
      4. [ゾーン認証]のタブに切り替えます。
      5. [ネットワークの認証~]にチェックを入れます。
      6. [ローカルのネットワーク設定を使用]にチェックを入れます。
      7. [設定]をクリックします。
      8. [DNSサーバのIPアドレス~]にチェックを入れて、DNSサーバのIPアドレスを入力します。
        例: 192.168.1.1など
      9. [ネットワークアダプタの種類]にチェックを入れて、[物理ネットワークアダプタ]を選択します。
      10. [無線SSIDが次の場合]にチェックを入れて、SSIDを入力します。
      11. 全てのダイアログをOKを押して閉じます。

    ちなみに動作確認したのはESET 5.2.11.3です。
    他のバージョンの場合はメニュー構成とかが変わっている可能性はありますが、だいたい似たようなやり方でいけるのではないでしょうか。


    2013年1月8日火曜日

    5GHz&2.4GHz併用WiFiアクセスポイントのAterm WR8600Nを購入してみました。



    自宅のWiFiアクセスポイントを新調しました。

    ■ 背景

    今まではNECのNEC AtermWR4100Nを使用していました。
    これは802.11nのDraft版(150Mbps)に対応したモデルで、出力はあまり強くはないモデルです。

    僕が住んでいる部屋は木造アパートで、単身者の男性が多いです。
    そのせいかWiFiアクセスポイントがたくさんあります。というかかなり増えてきました。
    その干渉のせいで通信が途切れることが増えてきました。(パワーセーブ機能使ってください……)

    1件ずつパワーセーブしてくれと回るようなことは出来ないので、こちらが対策するしかありません。


    ■ 購入へ

    ということで、5GHz併用モデルを購入することに決めてヨドバシカメラ マルチメディアAkiba店に行きました。
    メーカーは今までの経験上NEC一択です。
    とくにイーサネットコンバータやUSB子機は必要ないので親機単体モデルを探しました。

    まず目を付けたのがNEC Aterm WR9500Nです。
    現行のNECのWiFiアクセスポイントの最上位機種です。
    無線450Mbpsで有線1Gbpsのモデルです。
    さすがに人気商品でイーサネットコンバータ同梱モデル以外は売り切れ。

    次はNEC Aterm WR8750Nです。
    これは無線は300Mbpsで有線1Gbpsのモデルです。
    こちらはUSB子機同梱モデル以外は売り切れ。

    最後に見たのがNEC Aterm WR8600Nです。
    これは無線300Mbpsで有線100Mbpsのモデルです。
    こちらは親機単体モデルのみ在庫有りでした。

    WR9500Nはお高いしイーサネットコンバータ使わないしで早々に候補落ち。
    WR8750NとWR8600Nで検討しました。
    結局有線LANはほぼ使わないし、家の光モデムが100Mbpsまでのモデルなので、100Mbpsあれば十分ということで、WR8600Nを購入しました。
    (1年半くらい前のモデルなので)お安かったですし。


    ■ セットアップ

    買ってきたらさっそく写真を撮ってセットアップ、といきたかったんですが、昨日(1/7)は疲れていたのか開封したところで力尽きました。


    今日こそやろうと思い、必死でコタツから這い出てセットアップ開始。
    まずは今つながっているWR4100Nを取り外します。


    次に、WR8600NのモードをAPモードにします。(光モデムがルータ機能を内蔵しているため。)
    と言っても、下記のMODEスイッチをAP側へ動かすだけ。


    次は、WR8600NのWANポートと光モデムのLANポートをWR8600N付属のケーブルで接続します。




    そしたらば電源を投入します。
    しばらくするとWR8600NのActiveランプが橙色に点灯します。(RTモードの場合は緑色)



    これで後は各機器のWiFiの設定をすればOKです。





    が、僕は少しWR8600Nの設定を変更しました。

    まず設定用のWebインターフェイスに入ります。(初回アクセス時には管理者ユーザのパスワード設定を求めらるので設定します。)
    RTモードの場合はhttp:///192.168.1.211かhttp://192.168.0.211、APモードの場合はhttp://192.168.1.1かhttp://192.168.0.1にブラウザからアクセスします。ネットワークアドレスの部分は設定によって変わります。


    WR8600Nは標準で4つのSSIDを出しています。

    • aterm-xxxxxx-a (プライマリ5GHz)
    • aterm-xxxxxx-g (プライマリ2.4GHz)
    • aterm-xxxxxx-aw (セカンダリ5GHz)
    • aterm-xxxxxx-gw (セカンダリ(2.5GHz)
    デフォルトでは、このうちの前者2つはWPA/WPA2-PSKを使用していて、後者2つはWEPを使用します。
    WEPは最近はあまり使われていないセキュリティ的に弱いあれです。
    DSとかその辺の機器がWEPにしか対応していないので、それ用に出力されていたとかどうとか。

    うちでは必要ないので使用しないことにします。また、そんなに接続先はいらないのでセカンダリ側の2つのSSIDで接続できないようにします。

    まずは以下の手順で、2.4GHzのセカンダリを停止します。
    1. サイドメニューの[無線LAN設定]をクリック
    2. サブメニューから[無線LAN詳細設定(2.4GHz)] を栗kkj
    3. 設定画面の[対象ネットワーク] をセカンダリSSIDを選択して[選択]をクリック
    4. [無線機能]の[使用する]のチェックをオフ。
    5. [設定]をクリック
    6. [保存]をクリック
    同様に以下の手順で、5GHzのセカンダリSSIDを停止します。


    1. サイドメニューの[無線LAN設定]をクリック
    2. サブメニューから[無線LAN詳細設定(5GHz)] を栗kkj
    3. 設定画面の[対象ネットワーク] をセカンダリSSIDを選択して[選択]をクリック
    4. [無線機能]の[使用する]のチェックをオフ。
    5. [設定]をクリック
    6. [保存]をクリック


    また、ECOモードをつかう予定はあまりありませんが、通常ECOの設定2が使えるようにしておきました。
    あとはMACアドレスフィルタリングとかの設定をお好みで。

    WR8600NにはDDNSとかUSB経由の簡易NAS機能とかあるので気が向いたらいじってみようと思います。













    あ、使わなくなったAterm WR4100Nを欲しい人いますかね?







    2013年1月7日月曜日

    Lavie Z LZ550/JSで内臓SSDとSDXCカードのベンチマーク取ってみた。

    Amazonで東芝のSDXCカードを買ったのでLavie Zでベンチマーク取ってみました。

    ■ SDXCカード

    このSDXCカードはRead 95MB/sでWrite 60MB/sとパッケージに書かれています。ベンチマークは何回かやりましたが、だいたいこんな感じです。


    Readはまぁまぁこんなもんでしょうか。Writeはちょっとこれは遅いですね。
    とりあえず使ってみて微妙なら検討してたSnaDiskかLexarあたりを買うかもしれません。
    まぁこれは海外向けパッケージで安かったからとりあえず買ってみましたってやつですし。

    一応acer Aspire TimelineX 3820T-N52Bの内臓SDドライブでもベンチマークしてみました。


    こちらはUHS-Iに対応してないのだったかな?
    Readは無視するとして、Writeを見るとやはり遅いので、このSDXCカードのWriteが遅いのでしょうね。

    ■ 内臓SSD

    SDXCカードのベンチマークのついでにLavie Zの内臓SSDのベンチマークも取ってみました。Samsung製だそうです。


    結構速いですね。SSDとしてどうなのかは知りませんが。
    ちなみにこれは1回しかやってません。

    まぁせっかくなのでこっちも3820Tの内臓HDDのベンチマークしてみました。


    やっぱりSSDは速いですね。



















    首を寝違えていたいのでさっさと寝ようと思います。
    色々辛い。




















    2013年1月5日土曜日

    2013年の抱負という名の何か。

    一年の計は元旦にありとか言いますね。
    皆さんはなんか考えましたか?

    僕は考えてません!
    なので、これを書きながら何か少し考えようと思います。

    どうしたら良いかわからんので、ジャンル別に適当に。

    ■ 仕事

    1/10から新しい会社にいきます。
    ので、まぁ早いところ慣れたいです。人見知りだしね。

    ■ プライベート

    お酒は程々にしとく。むしろなるべく飲まない。
    ガジェットを買いすぎない。

    ■ 趣味その1(読書)

    積読を消化する。
    紙の本の積読は常に10冊以内に抑える。
    電子書籍は買って満足してないでちゃんと読む。

    ■ 趣味その2(カメラ)

    コンテスト的なのに挑戦する。
    レンズなどの購入も程々にしておく……。

    ■ 趣味その3(プログラミング)

    Windowsストアアプリ作って公開する。ネタはこれから考える。
    温めてるAndroidアプリネタを形にする。



    ざっとこれくらいかな?
    なんか思いついたらまた書きます。

    2013年1月4日金曜日

    女の子はティッシュでもトイレでもない。

    書きたかっただけです。

    最近聞いてる『さめざめ』の『コンドームをつけないこの勇気を愛してよ』の歌詞です。


    世の女の子が何を考えてるかはわかりませんが、さめざめの本音みたいなストレートな歌詞は好きだなぁと。
    決してYUIとかみたいに綺麗な歌詞ではないですが一度聞いてみては?



    まぁなにが言いたいかと言うと、
    女の子は大事にしましょうね!
    おまえが言うなみたいなツッコミが聞こえてきそうですが……。


    2013年1月1日火曜日

    へっぽこプログラマーの2012年購入ガジェットまとめ

    あけましておめでとうございます。
    旧年中は大変お世話になりました。本年も宜しくお願い致します。

    昨年購入したガジェットをまとめてみようかなと。(本当は日付が変わる前にやりたかった……。)



    ■ スマートフォン関連

    • Galaxy Nexus(SC-04D)
    • htc EVO 3D(ISW12HT)
    • Motorola Photon(ISW11M)
    • GL02P(モバイルWiFiルータ、予備バッテリー×2も)
    • iPhone4 SoftBank版(弟に貰った)
    • BlackBerry Bold 9900
    • P-07C(ほぼあげたようなもん)
    • Kindle Paperwhite WiFi(電子書籍端末)
    • NW-F805(Android 4.0搭載SONY WALKMAN)
    スマートフォンとかタブレットとかはこんな感じ。
    その他に故障とかで以下のような感じ
    • Galaxy Nexusの液晶破損による交換
    • Xperia ray(SO-03D)の全損による交換
    • BlackBerry Bold 9900の全損による交換
    • GL02Pの全損による交換
    • Glaxy Nexus(SC-04D)のWiFi故障により基盤交換(無償)


    ■ カメラ関連


    • Panasonic LUMIX G VARIO 100-300mm F4.0-5.6 MEGA O.I.S. H-FS100300
    • Olympus OM-D EM-5(予備バッテリーも)
    • PORTER フリースタイルカメラバッグL
    • SIGMA 19mm F2.8 EX DN
    • Olympus M.ZUIKO DIGITAL ED 75mm F1.8
    • FUJIFILM XF1(予備バッテリーも)
    カメラ関連はこんな感じかな?OM-D買ってからがどっぷりな感じですね。
    いやでも楽しいですね。
    この他にはフィルターとかの小物買ってます。もう覚えてません。

    ■ PC関連


    • メモリ(DDR3-SODIMM 4GB×2)
    • Lavie Z LZ550/JS
    メモリ増設して新規PC購入して満足。もっとアプリ作ったりしたいなぁ。


    ■ 時計


    • Mondine×2(1つはプレゼント)

    スイスの国鉄の時計と同じデザインのやつ。買ってからプライベートはだいたいこれを付けてる。






    いろいろ買ったけど全部持ち歩くわけではなくってですね。良く持ち歩くものは決まってます。

    ■ 最近持ち歩くもの(ほぼ毎日)


    • BalckBerry Bold 9900
    • Galaxy Nexus
    • iPhone4
    • GL02P(予備バッテリーも)
    • FUJIFILM XF1(予備バッテリーも)
    まぁあとは財布とか定期とかかな?
    モバブは持ってないから健全。

    ■ 最近持ち歩くもの(頻度高め)


    • OM-D EM-5
    • 75mm F1.8
    • 19mm F2.8

    写真ガッツリ取りたいときはこの辺もね。XF1ももちろん一緒に持ってく。





    改めて見ると、いっぱい買いましたねぇ。持ち歩くものも多いし。
    この他にもあれこれ小物とか買ってるし、漏れもありそうな気がする。
    もちろんガジェ獣(充)な人たちには負けますが。

    2013年は旅行とかに投資してガジェットはほどほどにいきたいですねぇ。。。