tag:blogger.com,1999:blog-91222853786382583342024-09-09T23:09:38.221+09:00メモ帳あまり考察とかはありませんがお役に立てば。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]Blogger31125tag:blogger.com,1999:blog-9122285378638258334.post-9339957498015891302011-10-27T01:33:00.002+09:002011-10-27T01:43:08.435+09:00あるー日♪homwbrewをupdateしたらエラーがでよった。あるー日♪homwbrewをupdateしたらエラーがでよった。<br /> <h2>追記</h2>検索したら<a href="https://github.com/mxcl/homebrew/issues/2906">https://github.com/mxcl/homebrew/issues/2906</a>で対処方法が書いてあった。<br /> <h2>対処</h2>ううむ。とりあえず以下のようにして対処。<br /> <pre>sudo chown -R `whoami` /usr/local cd /usr/local git stash git reset --hard brew update git stash sudo chown -R root /usr/local git stash clear </pre><h2>出たエラー</h2><pre>$ brew update remote: Counting objects: 6067, done. remote: Compressing objects: 100% (2320/2320), done. remote: Total 5519 (delta 4066), reused 4343 (delta 3138) Receiving objects: 100% (5519/5519), 906.93 KiB | 274 KiB/s, done. Resolving deltas: 100% (4066/4066), completed with 437 local objects. From http://github.com/mxcl/homebrew * branch master -> FETCH_HEAD error: unable to unlink old '.gitignore' (Permission denied) Updating 8e52cfa..d34a131 Error: Failed while executing git pull http://github.com/mxcl/homebrew.git master </pre>Permisson deniedというのでsudoしたらエラーがでよった。<br /> <pre>$ sudo brew update From https://github.com/mxcl/homebrew * [new branch] master -> origin/master error: Your local changes to the following files would be overwritten by merge: Library/Contributions/brew_bash_completion.sh Library/Contributions/brew_zsh_completion.zsh Library/Contributions/examples/brew-bottle.rb Library/Contributions/examples/brew-missing.rb Library/Contributions/examples/brew-pull.rb Library/Contributions/examples/brew-server Library/Contributions/examples/brew-unpack.rb Library/Contributions/manpages/brew.1.md Library/Formula/a2ps.rb Library/Formula/aamath.rb Library/Formula/ack.rb Library/Formula/activemq.rb Library/Formula/adns.rb Library/Formula/android-ndk.rb Library/Formula/android-sdk.rb Library/Formula/ansifilter.rb Library/Formula/antlr.rb Library/Formula/aplus.rb Library/Formula/app-engine-java-sdk.rb Library/Formula/aqbanking.rb Library/Formula/aria2.rb Library/Formula/arm.rb Library/Formula/asciidoc.rb Library/Formula/aspell.rb Library/Formula/asymptote.rb Library/Formula/atf.rb Library/Formula/atk.rb Library/Formula/atlassian-plugin-sdk.rb Library/Formula/atomicparsley.rb Library/Formula/audiofile.rb Library/Formula/authexec.rb Library/Formula/autoconf-archive.rb Library/Formula/autogen.rb Library/Formula/autojump.rb Library/Formula/avrdude.rb Library/Formula/aws-cfn-tools.rb Library/Formula/bagit.rb Library/Formula/bash-completion.rb Library/Formula/bash.rb Library/Formula/bazaar.rb Library/Formula/bdw-gc.rb Library/Formula/beanstalk.rb Library/Formula/bedtools.rb Library/Formula/binutils.rb Library/Formula/bmon.rb Library/Formula/boost.rb Library/Formula/botan.rb Library/Formula/bulk_extractor.rb Library/Formula/bullet.rb Library/Formula/bwa.rb Library/Formula/byobu.rb Library/Formula/c-ares.rb Library/Formula/cabal-install.rb Library/Formula/cairo.rb Library/Formula/cassandra.rb Library/Formula/ccache.rb Library/Formula/cdecl.rb Library/Formula/cdparanoia.rb Library/Formula/cfitsio.rb Library/Formula/cflow.rb Library/Formula/cherokee.rb Library/Formula/chocolate-doom.rb Library/Formula/chromedriver.rb Library/Formula/class-dump.rb Library/Formula/clisp.rb Library/Formula/cliweather.rb Library/Formula/clojure-contrib.rb Library/Formula/clojure.rb Library/Formula/cmake.rb Library/Formula/cmigemo.rb Library/Formula/coda-cli.rb Library/Formula/color-code.rb Library/Formula/coreutils.rb Library/Formula/couchdb-lucene.rb Library/Formula/couchdb.rb Library/Formula/cppcheck.rb Library/Formula/cppdom.rb Library/Formula/cppunit.rb Library/Formula/csshx.rb Library/Formula/csstidy.rb Library/Formula/csv-fix.rb Library/Formula/cufflinks.rb Library/Formula/curl.rb Library/Formula/d-bus.rb Library/Formula/dash.rb Library/Formula/dcmtk.rb Library/Formula/dcraw.rb Library/Formula/ddclient.rb Library/Formula/ddrescue.rb Library/Formula/deja-gnu.rb Library/Formula/dialog.rb Library/Formula/diction.rb Library/Formula/diffpdf.rb Library/Formula/direnv.rb Library/Formula/discount.rb Library/Formula/djmount.rb Library/Formula/djview4.rb Library/Formula/dmd.rb Library/Formula/dnsmasq.rb Library/Formula/dos2unix.rb Library/Formula/dotless.rb Library/Formula/dovecot.rb Library/Formula/doxygen.rb Library/Formula/duplicity.rb Library/Formula/dvtm.rb Library/Formula/easy-tag.rb Library/Formula/ec2-api-tools.rb Library/Formula/eigen.rb Library/Formula/ejabberd.rb Library/Formula/elasticsearch.rb Library/Formula/elb-tools.rb Library/Formula/elinks.rb Library/Formula/emacs.rb Library/Formula/encfs.rb Library/Formula/erlang.rb Library/Formula/esniper.rb Library/Formula/exiftool.rb Library/Formula/exult.rb Library/Formula/fantom.rb Library/Formula/feh.rb Library/Formula/fex.rb Library/Formula/ffmpeg.rb Library/Formula/ffmpegthumbnailer.rb Library/Formula/fftw.rb Library/Formula/figlet.rb Library/Formula/findutils.rb Library/Formula/fio.rb Library/Formula/fltk.rb Library/Formula/fossil.rb Library/Formula/freetds.rb Library/Formula/frink.rb Library/Formula/ftimes.rb Library/Formula/gauche.rb Library/Formula/gawk.rb Library/Formula/gcal.rb Library/Formula/gd.rb Library/Formula/gdal.rb Lib error: The following untracked working tree files would be overwritten by merge: Library/Aliases/boehmgc Library/Aliases/dwarffortress Library/Aliases/gjstest Library/Aliases/libnettle Library/Aliases/mediainfo Library/Aliases/unix2dos Library/Aliases/xmlsec1 Library/Contributions/examples/brew-mirror-check.rb Library/Formula/aespipe.rb Library/Formula/aimage.rb Library/Formula/amap.rb Library/Formula/anttweakbar.rb Library/Formula/apiextractor.rb Library/Formula/apktool.rb Library/Formula/apparix.rb Library/Formula/armadillo.rb Library/Formula/asciitex.rb Library/Formula/assimp.rb Library/Formula/auctex.rb Library/Formula/augeas.rb Library/Formula/avra.rb Library/Formula/aws-elasticache.rb Library/Formula/bbcp.rb Library/Formula/bonnie++.rb Library/Formula/cast.rb Library/Formula/cfengine.rb Library/Formula/chkrootkit.rb Library/Formula/cminpack.rb Library/Formula/convertlit.rb Library/Formula/cpputest.rb Library/Formula/cssembed.rb Library/Formula/csup.rb Library/Formula/csvprintf.rb Library/Formula/cunit.rb Library/Formula/curlpp.rb Library/Formula/daq.rb Library/Formula/dc3dd.rb Library/Formula/ddd.rb Library/Formula/denyhosts.rb Library/Formula/dfu-util.rb Library/Formula/djvu2pdf.rb Library/Formula/dsocks.rb Library/Formula/dwarf-fortress.rb Library/Formula/figtoipe.rb Library/Formula/flann.rb Library/Formula/fuse4x-kext.rb Library/Formula/fuse4x.rb Library/Formula/gearman-php.rb Library/Formula/generatorrunner.rb Library/Formula/ggobi.rb Library/Formula/git-url-sub.rb Library/Formula/google-js-test.rb Library/Formula/grads.rb Library/Formula/graylog2-server.rb Library/Formula/gremlin.rb Library/Formula/growly.rb Library/Formula/gsutil.rb Library/Formula/gv.rb Library/Formula/herrie.rb Library/Formula/hexedit.rb Library/Formula/hmmer.rb Library/Formula/httpry.rb Library/Formula/idutils.rb Library/Formula/imake.rb Library/Formula/ipopt.rb Library/Formula/ipv6calc.rb Library/Formula/iso-codes.rb Library/Formula/jbig2dec.rb Library/Formula/jbig2enc.rb Library/Formula/jbigkit.rb Library/Formula/jp2a.rb Library/Formula/js-test-driver.rb Library/Formula/jscoverage.rb Library/Formula/jsonpp.rb Library/Formula/kbtin.rb Library/Formula/kdiff3.rb Library/Formula/libflowmanager.rb Library/Formula/libmp3splt.rb Library/Formula/libraw.rb Library/Formula/libtommath.rb Library/Formula/libunique.rb Library/Formula/libutf.rb Library/Formula/libxmlsec1.rb Library/Formula/libxslt.rb Library/Formula/libyubikey.rb Library/Formula/liquibase.rb Library/Formula/minised.rb Library/Formula/montage.rb Library/Formula/mp3splt.rb Library/Formula/mupdf.rb Library/Formula/mysql++.rb Library/Formula/mysql-connector-c++.rb Library/Formula/neo4j.rb Library/Formula/nettle.rb Library/Formula/nss.rb Library/Formula/ntfs-3g.rb Library/Formula/ntl.rb Library/Formula/opencc.rb Library/Formula/openmeeg.rb Library/Formula/p11-kit.rb Library/Formula/parmetis.rb Library/Formula/pdfgrep.rb Library/Formula/peg-markdown.rb Library/Formula/pngwriter.rb Library/Formula/podofo.rb Library/Formula/pyqwt.rb Library/Formula/pyside-tools.rb Library/Formula/pyside.rb Library/Formula/qfits.rb Library/Formula/qi.rb Library/Formula/qprint.rb Library/Formula/rbenv-gemset.rb Library/Formula/robodoc.rb Library/Formula/rsyslog.rb Library/Formula/ruby-build.rb Library/Formula/s3fs.rb Library/Formula/saga-core.rb Library/Formula/salt.rb Library/Formula/sc68.rb Library/Formula/scotch.rb Library/Formula/sersniff.rb Library/Formula/shen.rb Library/Formula/shiboken.rb Library/Formula/sisc-scheme.rb Library/Formula/snort.rb Library/Formula/solid.rb Library/Formula/spiped.rb Library/Formula/sshfs.rb Library/Formula/sslscan.rb Library/Formula/star.rb Library/Formula/stress.rb Library/Formula/synfigstudio.rb Library/Formula/tinyfugue.rb Library/Formula/topgit.rb Library/Formula/transmission.rb Library/Formula/tup.rb Library/Formula/udis86.rb Library/Formula/udns.rb Library/Formula/unifdef.rb Library/Formula/unrtf.rb Library/Formula/whatmask.rb Library/F Updating 8e52cfa..d34a131 Aborting Error: Failed while executing git pull origin refs/heads/master:refs/remotes/origin/master </pre>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-22233928952786132132011-10-18T23:30:00.002+09:002011-10-18T23:31:56.102+09:00jQuery templatesを利用して元のHTMLにテンプレート用のタグをできるだけ入れないようにしてみたjQuery templatesを利用して、支給されたhtmlにデータを動的に適用します。<br /> <h2>方針</h2><ul><li>できる限りもとのHTMLをいじらない</li> <li>動的に変更されるデータ部分に適用されているサンプルデータを消さない</li> <li>テンプレート部分は外だしする</li> </ul><br /> <h2>説明</h2>こんな感じのHTMLがデザイナさんから提供されたとします。<br /> <pre class="html" name="code">&lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;sample&lt;/h1&gt; &lt;h2&gt;リスト&lt;/h2&gt; &lt;ol id=&quot;result-list&quot;&gt; &lt;li&gt;&lt;b&gt;鈴木(30)&lt;/b&gt;:女性&lt;/li&gt; &lt;li&gt;&lt;b&gt;安藤(20)&lt;/b&gt;:男性&lt;/li&gt; &lt;/ol&gt; &lt;hr/&gt; &lt;h2&gt;テーブル&lt;/h2&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;name&lt;/th&gt; &lt;th&gt;age&lt;/th&gt; &lt;th&gt;sex&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody id=&quot;result-table&quot;&gt; &lt;tr&gt; &lt;td&gt;鈴木&lt;/td&gt; &lt;td&gt;30&lt;/td&gt; &lt;td&gt;女性&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;安藤&lt;/td&gt; &lt;td&gt;20&lt;/td&gt; &lt;td&gt;男性&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/body&gt; &lt;/html&gt; </pre><br /> <h3>動的に変更される部分の確認</h3>サンプルでデータが入っていますが、動的に変更される箇所が2カ所あります。<br /> <br /> <pre class="html" name="code">&lt;li&gt;&lt;b&gt;鈴木(30)&lt;/b&gt;:女性&lt;/li&gt; &lt;li&gt;&lt;b&gt;安藤(20)&lt;/b&gt;:男性&lt;/li&gt; </pre><br /> <pre class="html" name="code">&lt;tr&gt; &lt;td&gt;鈴木&lt;/td&gt; &lt;td&gt;30&lt;/td&gt; &lt;td&gt;女性&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;安藤&lt;/td&gt; &lt;td&gt;20&lt;/td&gt; &lt;td&gt;男性&lt;/td&gt; &lt;/tr&gt; </pre><br /> <h3>テンプレート化</h3>では、この部分をテンプレート化します。項目は三つで「名前」「年齢」「性別」なので、単純に「${変数名}」として置き換えます。<br /> <br /> <pre class="html" name="code">&lt;li&gt;&lt;b&gt;${name}(${age})&lt;/b&gt;:${sex}&lt;/li&gt; </pre><br /> <pre class="html" name="code">&lt;tr&gt;&lt;td&gt;${name}&lt;/td&gt;&lt;td&gt;${age}&lt;/td&gt;&lt;td&gt;${sex}&lt;/td&gt;&lt;/tr&gt; </pre><br /> <h3>jQuery.templatesを利用してテンプレートをコードとして格納する</h3>$.template(name, template)というメソッドを使って$.templateというmapに先ほど作成したテンプレートを格納します。<br /> $.templateというmapにnameがkeyでtemplateがvalueとして格納されます。mapなので、$.template["name"]でtemplateが参照できます。<br /> <br /> 先ほどのHTMLで動的に変更される部分にidがついていたので、それをそのままtemplate名としてしまいましょう。<br /> <br /> index.template.js<br /> <pre class="html" name="code">$(function(){ $.template( &quot;result-list&quot;, &quot;&lt;li&gt;&lt;b&gt;${name}(${age})&lt;/b&gt;:${sex}&lt;/li&gt;&quot; ); $.template( &quot;result-table&quot;, &quot;&lt;tr&gt;&lt;td&gt;${name}&lt;/td&gt;&lt;td&gt;${age}&lt;/td&gt;&lt;td&gt;${sex}&lt;/td&gt;&lt;/tr&gt;&quot; ); }); </pre><br /> <h3>元のhtmlにjQuery、jQuery templates、自作のテンプレートを読み込ませる</h3>今回はjQueryとjQuery templatesを利用するのでheadで読み込ませます。先ほど作成したindex.template.jsも読み込ませておきます<br /> <br /> この時点では以下の通りです。<br /> <br /> <pre class="html" name="code">&lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js&quot;&gt;&lt;/script&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js&quot;&gt;&lt;/script&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;index.template.js&quot;&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;sample&lt;/h1&gt; &lt;h2&gt;リスト&lt;/h2&gt; &lt;ol id=&quot;result-list&quot;&gt; &lt;li&gt;&lt;b&gt;鈴木(30)&lt;/b&gt;:女性&lt;/li&gt; &lt;li&gt;&lt;b&gt;安藤(20)&lt;/b&gt;:男性&lt;/li&gt; &lt;/ol&gt; &lt;hr/&gt; &lt;h2&gt;テーブル&lt;/h2&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;name&lt;/th&gt; &lt;th&gt;age&lt;/th&gt; &lt;th&gt;sex&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody id=&quot;result-table&quot;&gt; &lt;tr&gt; &lt;td&gt;鈴木&lt;/td&gt; &lt;td&gt;30&lt;/td&gt; &lt;td&gt;女性&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;安藤&lt;/td&gt; &lt;td&gt;20&lt;/td&gt; &lt;td&gt;男性&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/body&gt; &lt;/html&gt; </pre><br /> <h3>テンプレートにデータを適用する。</h3>とりあえず、index.jsなどとして、配列に名前、年齢、性別を持ったオブジェクトを詰めておきます。実際にはajaxアクセスなどして取得したjsonとかを詰めることになると思います。<br /> $.tmpl(template, data)でtemplateにdataが反映されるので、適用したいtargetにappendToすることで反映されます。<br /> サンプルデータが入っているので、最初に空にしてから反映するというメソッドにしています。<br /> <br /> index.js<br /> <pre class="javascript" name="code">$(function() { var data = [ { name:"鈴木", age:20, sex:"男性" }, { name:"田中", age:50, sex:"女性" }, { name:"齋藤", age:35, sex:"週二回" }, ]; var appendTemplate = function(template, target){ $(target).empty(); $.tmpl(template, data).appendTo(target); } appendTemplate("result-list","#result-list"); appendTemplate("result-table","#result-table"); }); </pre><br /> 完成品は<a href="https://github.com/enum/sample0001">gitHub</a>に上げてあります。JavaScriptを無効にすると元々のサンプルデータが入った状態になります。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-20424196322568112812011-08-14T02:39:00.000+09:002011-08-14T02:39:14.688+09:00アルクの英辞郎をalfredからすげー簡単にひく。専門用語などを翻訳家さんたちがよってたかって追加しているアルクの英辞郎 on Webをalfredから楽にひける方法です。<br /> <br /> <a href="alfredapp://customsearch/%E3%82%A2%E3%83%AB%E3%82%AF/alc/ascii/url=http://eow.alc.co.jp/{query}/UTF-8/">ここをクリックしてね</a><br /> <br /> これでalfredに登録されます。使い方は「alc 検索語」です。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-55156050589043368572011-08-14T02:28:00.001+09:002011-08-14T02:31:29.410+09:00alfredですげー楽に辞書を引く<a href="http://www.alfredapp.com/">alfred</a>というランチャを使っているのですが、ランチャの起動キーショートカットは他とかぶるのがいやなのでコマンドキーのダブルタップに設定しています。で、開発中にメソッド名やプロパティ名を考えるために英和が引きたいとかいうときがありますよね?そういうときにalfredのダイアログで「define 検索語」でMacに搭載されている辞書がひけます。つまり…。<br /> <ol><li>コマンドキーダブルタップ</li> <li>defiくらいまで入力してtabで保管</li> <li>検索したい単語を入力</li> </ol><div>これだけで辞書がひけます。便利。</div>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-72493447031683968542011-08-03T01:11:00.025+09:002011-08-04T01:48:58.856+09:00Macの開発環境のセットアップ<p>書きかけ。</p><p>@ebc_2in2crcさんが「MacBook Air買ったひゃっほーい。でもなにから手を付ければいいかわからないんだぜ?」状態になっていました。煽った責任は全く感じていないのですが、セットアップ関係についてちょっとメモしておきます。</p><h2>開発環境</h2><p>まず、ターミナルを起動します。</p><pre>/アプリケーション/ユーティリティ/ターミナル </pre><p>ターミナルを起動するとbashが待っているので、普通にunixのコマンド群で操作できます。</p><h3 class="body">Javaランタイムのインストール</h3><p>ターミナルでjavaと打つと、javaランタイムが入っていなければインストーラが起動します。</p><pre>$ java </pre><h3 class="body">Xcodeのインストール</h3><p>gccなどのコンパイラなどは標準でインストールされていません。Appleの提供するXcodeという開発環境をインストールすると一緒にインストールされるため、Xcodeをインストールします。</p><h4 class="body">App Storeの起動</h4><pre>/アプリケーション/App Store </pre><p>apple IDでサインインすることが必要です。</p><p>アプリケーションの購入(無料アプリもありますが)に利用しますので、さくっと作成してしまいましょう。<br /> サインインした後は右上の検索フィールドにXcodeを入力すれば、検索結果にXcodeが出てきますので、インストールしてください。</p><p>XcodeはApp Storeでインストールしても、インストールされるのはインストーラなので、ダウンロードが完了したら「/アプリケーション/install Xcode」を起動してください。この際にiTunesが起動しとりますがな、とエラーが出た場合は、iTunesを終了して、さらに「/アプリケーション/ユーティリティ/アクティビティモニタ」を起動して、右上の検索フィールドに「iTunes」と入力するとiTunes Helperがヒットするので、これも終了してください。</p><h3 class="body">homebrewのインストール</h3><p>homebrewはmacのパッケージ管理ツールです。</p><p>標準でインストールされていないアプリケーションや最新バージョンを利用したいとか標準ではついていないオプションでビルドしたいなどの場合に利用します。gccなど開発ツールを使用するので、Xcodeを先にインストールしておくこと。</p><h4 class="body">インストール方法</h4><pre>$ ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)" </pre><p>インストールが完了したらbrew updateしておきましょう。</p><pre>$ brew update </pre><p>homebrewでインストールするためのレシピはfomulaと呼ばれています。どんなfomulaがあるか検索したい場合はsearchオプションで可能です。</p><pre>$ brew search 検索文字列 $ brew search /正規表現文字列/ </pre><h3 class="body">subversionのインストール</h3><p>OS Xはデフォルトでsvnがインストールされていますが、macの文字コードの関係で日本語ファイル名の扱いに問題があります。幸い、homebrewで対策済みのsvnをインストールするオプションがあります。</p><pre>$ brew install subversion --unicode-path </pre>ちなみに、どのようなオプションがあるのかはoptionsで調べることができます。<br /> <pre>$ brew options formula名 </pre><h3 class="body">python3のインストール</h3><pre>$ brew install python3 </pre><h3 class="body">pipのインストール</h3><p>pipはpythonのツール管理ツールです。</p><pre>$ sudo easy_install pip </pre><p>OS Xではsuは使いません。su権限が必要な場合はsudoで実行します。</p><h3 class="body">mercurialのインストール</h3><p>メッセージが英語でよい場合はpipでインストールします。</p><pre>$ sudo pip install mercurial </pre><p>私は日本語メッセージが欲しかったので<a href="http://mercurial.selenic.com/">パッケージ</a>でインストールしました。インストールされるディレクトリなどはpipと同じです。</p><h3 class="body">bashの設定</h3><p>普通に$HOME配下に.bash_profileを置いて設定を書きましょう。source .bash_profileで反映されます。以下は参考まで…。</p><pre>export PATH=/usr/local/bin:$PATH export HGENCODING=utf-8 # mercurial用 export LANGUAGE=ja export LANG=ja_JP.UTF-8 export LESSCHARSET=utf-8 export EDITOR=nano export PS1='[\t \u@\H \W]$ ' </pre><h3 class="body">vimの設定</h3><p>$HOME配下に.vimrcを置いて設定を書きましょう。私はあまりvimを使わないので日本語が利用できるくらいしか設定していません。</p><pre>set enc=utf-8 set fenc=utf-8 set fencs=iso-2022-jp,euc-jp,cp932 </pre><h3 class="body">NetBeansのニーモニックを消す</h3><p>OS Xではメニューのニーモニックが不要です。これを消す方法が<a href="http://wiki.netbeans.org/FaqJaMacNnemonicJa">FaqJaMacNnemonicJa</a>にあります。OS XのFinderはWindowsのExplorerと違ってフォルダを上書きしてしまうので、terminalでやりましょう。</p><h3 class="body">NetBeansのデフォルトエンコーディングをUTF-8にする</h3><p>NetBeansで作成したファイルの文字エンコーディングはShift_JISです。何かと都合が悪いのでUTF-8に変更します。 </p><p>NetBeansのデフォルトエンコーディングを変更したい場合はnetbeans.conf内のnetbeans_default_optionsパラメータに-J-Dfile.encoding=UTF-8を追加</p><pre>/Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/etc/netbeans.conf </pre><h3 class="body">NetBeansから起動したJavaアプリケーションの文字コードをUTF-8に変更する</h3><p>OS XのJDKのデフォルト文字コードはShift_JISなため、NetBeansから起動したtomcatなどのログが文字化けします。Finderから起動したアプリケーションはシェルを介さないので~/.bash_profileに_JAVA_OPTIONSを設定していても読み込まれません。~/.MacOSX/environment.plistに設定したオプションはユーザがログインした際に認識されるため、こちらに設定を書きます。SSHなどでログインした場合を考慮して~/.bash_profileにも同様の設定を行います。</p><h4>~/.MacOSX/environment.plist</h4><pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt; &lt;plist version="1.0"&gt; &lt;dict&gt; &lt;key&gt;JAVA_HOME&lt;/key&gt; &lt;string&gt;/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home&lt;/string&gt; &lt;key&gt;_JAVA_OPTIONS&lt;/key&gt; &lt;string&gt;-Dfile.encoding=UTF-8&lt;/string&gt; &lt;/dict&gt; &lt;/plist&gt; </pre><h4>~/.bash_profile</h4><pre>export _JAVA_OPTIONS=-Dfile.encoding=UTF-8 </pre><h3 class="body">NetBeansのMercurialで日本語ログをコミットできるようにする</h3><p>先の_JAVA_OPTIONS同様にHGENCODINGがNetBeansからでは認識されません。対処も同様に~/.MacOSX/environment.plistを編集します。dictの子に以下を追記。再ログイン後に認識されます。</p><pre>&lt;key&gt;HGENCODING&lt;/key&gt; &lt;string&gt;utf-8&lt;/string&gt; </pre><h3 class="body">postgresqlのインストール</h3><p>homebrewでさくっと。以前はビルドエラーとかあったらしいですが、今は大丈夫です。</p><pre>$ brew install postgresql </pre><h3 class="body">MySQLのインストール</h3><p>homebrewでさくっと。</p><pre>$ brew install mysql </pre><h4>/etc/my.cnf</h4><pre>[mysqld] max_allowed_packet=64M socket = /usr/local/var/mysql/mysql.sock character-set-server = utf8 innodb_file_per_table [mysql] default-character-set = utf8 [client] socket = /usr/local/var/mysql/mysql.sock default-character-set=utf8 </pre><h2>操作方法あれこれ</h2><h3 class="body">アプリケーションがどこにあるかわからないんだぜ?</h3><p>デフォルトでは「ctrl+space」で画面右上にspotlightという検索エンジンの検索条件フィールドが表示されます。インクリメンタルサーチでいろいろ探してくれます。ちなみに「ctrl+option+space」で検索ウィンドウが開きます。OS Xではシステムで日本語設定している場合、アプリケーションやシステムが表示するディレクトリなどを日本語表記にしていますが、実体は英語でのファイルパスです。そのようなファイルは日本語でも英語でも検索が可能です。例えば「アクティビティモニタ」は「activity monitor」でも検索にヒットします。</p><h3 class="body">アプリケーションの中のディレクトリにアクセスする</h3><p>.appはディレクトリなので、Terminalからcdでアクセスすると中に入れます。Finderでアクセスする場合は右クリックでコンテキストメニューの中の「パッケージの内容を表示」でアクセス可能です。<br /> <h3 class="body">ライブラリフォルダがFinderに表示されない</h3><p>なにかとアクセスすることが多いライブラリフォルダですが、一般ユーザへの配慮からか、OS X Lionから不可視に設定されました。可視に変更してしまいます。</p><h4>可視にする</h4><pre>chflags nohidden ~/Library </pre><h4>不可視にする</h4><pre>chflags hidden ~/Library </pre><h3 class="body">TerminalのカレントディレクトリをFinderで開きたい</h3><p>openコマンドで開けます。</p><pre>$ open . </pre><h2>いろいろインストールしたアプリケーション</h2><h3 class="body">App Store</h3><ul><li>dropbox:データストレージサービスのクライアント</li> <li>evernote:クラウド化されたメモ</li> <li>Alfred:ランチャ</li> <li>LimeChat:ircクライアント</li> <li>Cornerstone:svnのGUI</li> </ul><h3 class="body">単体インストーラ</h3><ul><li>1password</li> <li>MacHg:mercurialのGUI</li> <li>CyberDuck:FTPクライアント</li> <li>KeyRemap4MacBook:キーアサイン変更</li> <li>Growl:いろいろ情報通知してくれる</li> </ul><h2>その他の設定もろもろ</h2><h3 class="body">dashboardを無効にする</h3><p>私はdashboardを利用しないので無効化してしまいます。</p><h4 class="body">dashboardの無効化</h4><pre>$ defaults write com.apple.dashboard mcx-disabled -boolean YES $ killall Dock </pre><h4 class="body">dashboradの有効化</h4><pre>$ defaults delete com.apple.dashboard mcx-disabled $ killall Dock </pre><h3 class="body">Spotlightのショートカット</h3><p>Ctrl + spaceがデフォルトなのですが、この組み合わせは貴重なのでoption + spaceに変更してしまいます。</p><h3 class="body">locateが使いたい</h3><pre>$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist </pre><h3 class="body">ファイル保存時のダイアログのデフォルトを詳細表示にする</h3><pre>$ defaults write -g NSNavPanelExpandedStateForSaveMode -boolean true </pre><h4 class="body">もとに戻す</h4><pre>$ defaults delete -g NSNavPanelExpandedStateForSaveMode </pre><h3 class="body">印刷のダイアログのデフォルトを詳細表示にする</h3><pre>$ defaults write -g PMPrintingExpandedStateForPrint -boolean true </pre><h4 class="body">もとに戻す</h4><pre>$ defaults delete -g PMPrintingExpandedStateForPrint </pre><h3 class="body"><p>ネットワークディスクに.DS_Storeファイルを生成しないようにする</h3>OS XではFinderのアイコンの表示情報などを.DS_Storeというファイルで生成します。これはデフォルトでは不可視で、WindowsやLinuxでは不要なファイルです。ローカルでは問題ないのですが、ネットワークディスクにアクセスした場合に他のOSからはゴミとなってしまいますので、ネットワーク上のディスクには生成しないように設定します。</p><pre>defaults write com.apple.desktopservices DSDontWriteNetworkStores true </pre><h3 class="body">dot filesのバックアップ</h3><p>.bash_profileなどのファイルは中身に機密性がない(.sshとかは別)かつ修正したら自動でバックアップされてほしいということからgithubなどのバージョン管理ではなく、DropBoxを利用してバックアップしています。</p><p>オリジナルをDropBoxのディレクトリに移動して、本来あるべき場所からシンボリックリンクを貼るだけです。</p><h4>作業前にバックアップ</h4><pre>$ cp ~/.vim.rc ~/.vim.rc.bak $ cp ~/.gitconfig.rc ~/.gitconfig.bak $ cp ~/.bash_profile ~/.bash_profile.bak </pre><h4>DropBoxにファイルを移動</h4><p>DropBoxのdotfiles配下(ディレクトリは任意)に設定ファイルを移動する。</p><pre>$ mv ~/Dropbox/dotfiles/.vim.rc ~/.vim.rc $ mv ~/Dropbox/dotfiles/.gitconfig.rc ~/.gitconfig $ mv ~/Dropbox/dotfiles/.bash_profile ~/.bash_profile </pre><h4>シンボリックリンクを貼る</h4><pre>ln -s ~/Dropbox/dotfiles/.gitconfig .gitconfig ln -s ~/Dropbox/dotfiles/.vimrc .vimrc ln -s ~/Dropbox/dotfiles/.bash_profile .bash_profile </pre><br /> <p>まだ続く予定。</p>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]1tag:blogger.com,1999:blog-9122285378638258334.post-78657212446927016402011-06-25T19:07:00.003+09:002011-06-25T19:16:30.674+09:00スクラム道バーストに参加した感想&doneの定義の話<p>2011/06/24にスクラム道バーストに参加してきました。申し込みを忘れていたのですが、当日行けそうに無かった方のご好意で代わりに参加してきました。@ledsunさんありがとう。</p><p>内容は過去のスクラム道の再演とトピックに対する議論の場でした。詳しい内容は他の方の素晴らしいレポートがあるのでそちらをご参照くださいw</p><p>選手ってなに?ってことが良くわからないまま選手として参加してしまいましたが、壇上に上ってもそんなに緊張しないものですね。変なこと言っても殴られたりしないので、このような形式があったらどんどん選手として名乗りをあげるといいと思います。</p><hr /><p>スクラム道バーストで「doneの定義を拡大/縮小することの是非」がトピックに上がりました。思い返すとストーリーのdoneの定義なのかタスクのdoneの定義なのかがあやふやだったので、それぞれ検討しました。</p><p>結論としては、拡大するにしろ縮小するにしろ、スプリントバックログをいじるのでプロダクトオーナーの判断が必要。拡大は(こなせるのであれば)問題になることはあまりないが、縮小はリリース時期や提供価値に影響が大きいので要注意。となりました。</p><h2>ストーリーの場合</h2><p>ストーリーのdoneの定義を変更するのはプロダクトオーナーの承認が必要。ストーリーをスプリントバッグログにいれる判断はストーリーが提供する内容に対する判断なので、doneの定義が変わった場合はストーリーが提供する内容が変わるはずだから。</p><h3>doneの定義を拡大したい場合</h3><p>スプリント内で追加するタスクが達成可能かの見積もりをした上でシステムに価値が向上するかをプロダクトオーナーに確認する(ストーリーのdoneの定義が拡大するということはタスクが追加されるはず)。プロダクトオーナーはもしかすると他のストーリーをスプリントに追加したいかもしれない。</p><h3>doneの定義を縮小したい場合</h3><p>縮小するということはストーリーのタスクをいくつか落とすことを意味する(ストーリーのdoneの定義に影響しないならタスクはチームの判断で落としてよいが、その場合は「ストーリー」のdoneの定義の縮小にはあたらない)。タスクを落とした結果、ストーリーの提供する価値がどのように変化するのかをプロダクトオーナーに提示して判断を仰ぐ。</p><ul><li>他のストーリーのスプリントバックログから落とすことで当該ストーリーをdoneさせる</li> <li>当該ストーリーを落として他のストーリーに入れ替える</li> <li>ストーリーを分割して、達成できないストーリーをプロダクトバックログにいれる</li> <li>あるタスクがブロック要素となっている場合はスクラムマスターにブロック要素の除去を要請する</li> </ul><p>などの判断などがありそう。</p><h2>タスクの場合</h2><p>タスクのdoneの定義の縮小がストーリーのdoneに影響を与える場合の対処は、ストーリーのdoneの定義の縮小と同じ。ストーリーのdoneに影響を与えない場合は縮小して問題ない。この場合はタスクを分割して不要なタスクを落とすことと同義。いまは必要ないという場合は他のストーリーのタスクとする場合もある。<br /> </p><h3>doneの定義を拡大したい場合</h3><p>タスクの所属するストーリーがスプリント内でこなせるなら、特に問題なし。しかし、そもそものタスクのdoneの定義がdoneしたとするには弱かったのではないか?という気もする。追加でこれもやっておきたい、はタスクの追加になるのではないか。</p><h3>doneの定義を縮小したい場合</h3><p>縮小したとして、それはそのタスクがdoneしたと言えるのかが問題。もし言えるのであればタスクが余分なものを含んでいたということ。言えないのであれば、それは縮小したからといってdoneしたということに意味が無い。ストーリーのdoneの定義に影響を与えるので、対処はストーリーのdoneの定義の縮小と同じ。タスクをdoneできない原因の対処はもちろん必要。</p>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-62784502819473874142011-06-20T01:34:00.000+09:002011-06-20T01:34:53.720+09:00勉強会に参加すること<p>最近、勉強会などに参加するようになりました。何故かというと、こんな悩みがありまして…。</P><p>「生きる意味ってなに?」</P><p>とりあえず、生きるということは是と仮に置きます。生きてる限りは「より良い生を送りたい」ものです。より良く生きるって自分にとってはどういうこと? 自分にとっては「自分に価値が感じられる」「誰かを(多少なりとも)幸せにしている」「(いろいろあるけど)自分の欲求が満たされている」に少しでも近づくこととしました。</P><ul><li>価値を生み出す(価値を生み出す自分には価値がある)</li> <li>人を愛する(愛する人を幸せにするために行動する)</li> <li>人に認められたり、認めたりする(承認欲求ってあるよね)</li> </ul><p>「他者との交流と自分の行動を通じて価値を作り出す」ことで実現できそうです。価値を作り出すためには能力が必要です。能力を得るにはどうしたらいいでしょうか?「学習して実践する」しかないですよね。インプットしてアウトプットしてれば自動的に能力が向上するはず。勉強会には人がいる。ということは相互活動でインプットとアウトプットができる。リソースの手当がつけば参加しない手は無いわけです。そんなわけで、都合がつけば勉強会に参加するようになったわけです。わかんなくてもできなくても得るものは必ずあるし、与えられるものは必ずあります。</p>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-23284765195388986632011-06-20T01:31:00.000+09:002011-06-20T01:31:23.510+09:00Scrum Boot Camp横浜に参加した感想<p>6/18(土)に横浜で開催されたScrum Boot Campに参加してきました。Scrumの説明と演習でScrumへのとっかかりを体験できる勉強会です。休憩時間や懇親会でいろいろ感想を話したり、疑問点に対する意見を聞いたりできて有意義でした。以下、思ったことや感想や学んだことを雑多に書きます(あたかも最初から知っていたかのような口ぶりで書いている部分もあります)。</p><h2>演習について</h2><p>演習はテーブルごとに分かれてチームで行うのですが、自分のいたチームはほぼ違和感無く演習することができました。他のチームがどうだったのかに興味があったので、懇親会で別のチームの方々に感想を聞いて回ったところ、まったくうまくいかなかったチームは無いようでした。いろいろなバックグラウンドを持つ人々が初対面で演習可能というのは「Scrumの取り組みの一つ一つは誰でも可能なこと」と感じました。</P><p>勉強会に参加するということは、Scrumに興味がある、勉強しようとする意思がある、人の話を聞く気がある人が集まっている状態なので、そもそも成立する可能性が高いのは事実です。おそらく、参加者は自分の所属組織に戻って、勉強会で得たものを取り入れようとした際に相当のギャップを感じてしょんぼりするかもしれません。</P><h2>感じたこと</h2><p>自分を変えるのと他人を変えるのを比べると自分を変えることは自分自身の努力で可能ですが、他人を変えるのは自分の手の届かない部分が多いので、チームに導入するのは相当に難しいはずです。しかし、Scrum(じゃなくて他の開発手法でも)かどうかは、true/falseの二値で表されるのではなく、度数で表現するものなので、導入して成果が上がっている状態を想像して、その状態と現在の間を埋めていけば、ちょっとScrumからだいぶScrumに、そしてほとんどScrum、完全にScrumという風になるはず。</p><p>「うちの組織のメンバーはScrumを実施できるレベルにない」という質問がありました。確かに設計や実装、試験などのスキルの他にも「自動化されたテスト」「継続的インテグレーション」「ソフトウェア構成管理」「バグトラッキングシステム」「ペアプログラミング」「リファクタリング」「様々な活動の集計の自動化」などの様々な開発プラクティスを身につけた人々だけでチームが構成されていないとScrumできないと考えがちですが、Scrumを導入しはじめると必然的にスキルの向上や習得が必要になるはずです。これは「できるからやる」のではなく「できるようになるためにやる」そして「やるからできるようになる」と考えると良いのではないかと感じました。</p><p>Scrumにはいろんなツールがあります。プランニングポーカーとか朝会とかふりかえりとかバーンダウンチャートとか。全てのツールは可能な限り素早く最大限の価値を提供するための道具なので「何をどうする?そしてどうなった?」を明確にして「それは目的の達成に向かっているか?」を意識して取り組みたいと思います。</p><p>話は変わりますが、エリヤフ・ゴールドラット博士が亡くなりました。この人は「制約条件の理論」を生み出した人です。「制約条件の理論」というのは「システム(目的(ゴール)」を継続的に最大化するためのメソッド(といっていいのかな?管理哲学?)です。この制約条件の理論を達成するために「TOC思考プロセス」といういろいろなツールがあります。Scrumの導入のために役に立ちそうなツールが満載なので、まずは『ザ・ゴール ― 企業の究極の目的とは何か』という小説仕立ての書籍でどのようなものなのか一読することをおすすめします。</p>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-68596830824542434022011-05-28T04:04:00.006+09:002011-05-29T23:36:33.518+09:00SafariのRSS FeedをOPMLに書き出してGoogle Readerにインポートする方法<h2>手順</h2><p><a href="http://www.tempel.org/SafariFeedToOPML">Thomas Tempelmann | Importing Safari's RSS feeds into Google Reader (OPML export) </a>のDownloadからSafariFeedToOPML_1.0.2.zipをダウンロードしてきて解凍する。</p><ol><li>自分のディスク上に新しいフォルダを作る(たとえばデスクトップ上、名前は好きにどうぞ)。このフォルダがブックマークを一時的に書き出す場所。</li> <li>お望みのRSSブックマークをSafariから書き出す。メニューバーの「ブックマーク」「すべてのブックマークを表示」で開いたパネルの左側に「すべてのRSS配信」があるので、好きなFeedを選んで(Command + Aで全選択)1.で作ったフォルダにDrag and Dropする。</li> <li>Safari Feed to OPML.appを起動して、1.のフォルダの中のファイルを全部をアプリケーションのウインドウにDropする。もしくはフォルダをDropする。アプリケーションは全てのRSSブックマークをウインドウの中にリストする。</li> <li>最後に「Write OPML...」ボタンを押す。で、ファイル保存先を選ぶ。デスクトップを使うといいんじゃないかな。</li> <li>OPMLファイルができたので、1.でつくったフォルダは削除してもいい。</li> <li>このOPMLファイルをGoogle Reader(リーダー設定のインポート/エクスポートタブ)でインポートできる。</li> </ol><br /> <h2>経緯</h2>SafariのRSS購読機能を使っていたんだけど、iPhoneのSafariでは「すべてのRSSの表示」ができなくて不便だったので、<a href="http://itunes.apple.com/jp/app/byline/id284946773?mt=8">Byline</a>というアプリを使うことにしました。このアプリはGoogle Readerに登録してあるRSSフィードをいい感じに一覧表示してくれるうえにオフライン閲覧機能があるので、電波がいまいちなSoftbank iPhoneではうれしい感じなのです。が、しかし、Safariに登録されているRSSフィードをGoogle Readerに移行するのが面倒です。Google ReaderはOPMLというファイルを通じてエクスポート/インポート可能なのですが、SafariはOPMLのエクスポートをサポートしていません。で、Google Readerのヘルプを見てみると<a href="http://dcostanet.net/wordpress/2005/06/13/export-safari-rss-feeds-via-opml/">SafariのRSSフィードをエクスポートするシェルスクリプトもしくはAutomatorアプリ</a>があるらしい、というので早速使ってみるが、書き出されたOPMLファイルの中身は空で書き出しに失敗してしまっています。もしかしたら英語環境に依存したパスでも書いてあるのかな、と確認したところ、「~/Library/Syndication/Database3」というファイルからデータを取り出しているのですが、Safari 5ではディレクトリ構成&amp;データの格納方法が変わってしまっているため、もう使えない方法でした。うーん、困ったな解決方法ないかなと思いながらコメントを読んでいたら「おれ簡単な方法のアプリつくったでよ」という人がおりました。ありがたいことです。んで、さっそくその方法で試したらうまくいったんですが、英語なんで、手順をポンチ訳して載せときます。というのが経緯。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]1tag:blogger.com,1999:blog-9122285378638258334.post-43027253014299954112011-05-24T00:59:00.001+09:002011-05-24T01:00:31.806+09:00メソッドと関数の違いとthisは何を指しているか(JavaScriptの場合)<p>日頃、メソッドのことを関数と呼んでしまったり、関数をメソッドと呼んでしまったり混同していたりするわけですが、インスタンスの内部にあるのがメソッドです。</p><pre name="code" class="javascript">var objA = {}; objA.method = function(){ console.log("method"); } objA.method(); // これはメソッドの呼び出し function func(){ console.log("function"); } func(); // これは関数の呼び出し </pre><p>メソッドと関数の大きな違いの一つに「this」でインスタンスを参照できる点があります。メソッド内で「this」はインスタンスを指しています。では、関数内の「this」は何を指しているかというとグローバルオブジェクト(JavaScriptの場合)です。</p><p>ここまではよいのですが、メソッド内で関数が宣言されている場合にメソッド内で、その関数を呼び出した場合の関数内で「this」は何を指しているのでしょうか? 答えはグローバルオブジェクトです。</p><pre name="code" class="javascript">var hoge = "global"; var objB = {}; objB.hoge = "property"; objB.method = function(){ var hoge = "local"; function nestedFunction(){ console.log("a:" + this.hoge); // グローバルのhogeを指している } console.log("b:" + hoge); // この関数内のhogeを指している console.log("c:" + this.hoge); // インスタンス(つまりobjB)のhogeプロパティを指している } objC.method(); </pre><pre>実行結果 a:global b:local c:property </pre>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-63415346032063577192011-05-23T12:26:00.000+09:002011-05-23T12:26:17.595+09:00やる夫で学ぶTDD epub版<p>twiiter id @oota_ken さんが書いた「やる夫で学ぶTDD」をepub化しました。@oota_ken さんの配布許可をご好意でいただけましたので、配布しちゃいます。</p><br /> <h2>おいてある場所</h2><p><a href="http://dl.dropbox.com/u/7692296/epub/YaruoDeTDD.epub">YaruoDeTDD.epub</a><br /> </p><p>以下、iPadでのスクリーンショット</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPiWWUOJ7i6PPVNhmtL6CdGPjpgkBQ74QXwYYwpI2gd4MbPgGu_NSBGV6ACUlV4ZRuFlbGAhHmxmBTwTqkMS3AAtR3fCyJmp0QponFoLJQ2dYdj6-6F957G43kftn1bLJijCToFpdS5oY/s1600/yaruodetdd.PNG" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="400" width="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPiWWUOJ7i6PPVNhmtL6CdGPjpgkBQ74QXwYYwpI2gd4MbPgGu_NSBGV6ACUlV4ZRuFlbGAhHmxmBTwTqkMS3AAtR3fCyJmp0QponFoLJQ2dYdj6-6F957G43kftn1bLJijCToFpdS5oY/s400/yaruodetdd.PNG" /></a></div>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-40209152040184584472011-05-16T06:45:00.000+09:002011-05-16T06:45:20.326+09:00tvmobiliのuninstall方法お試しでinstallしたのだけど、uninstall方法を調べた。tvmobiliはLaunchAgentsとLaunchDaemonsを追加するので単純にアプリケーションを削除するだけではきれいになりません。<br /> <h2>環境</h2><ul><li>Snow Leopard</li> </ul><h2>手順</h2>Applications/TVMOBiLi.app/Contents/MacOS/uninstall をterminalで実行するだけ。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-730456314512342402011-05-16T02:23:00.000+09:002011-05-16T02:23:13.490+09:00JavaScriptでcallbackに引数を与えたい。<h2>やりたいこと</h2><p>JavaScriptのcallbackに引数を使いたい。<br /> <br /> <h2>方法</h2><p>callbackのmethodが関数オブジェクトを返すようにする。</p><br /> <h2>説明</h2><p>たとえばjQueryで以下のようなコードを書いてもうまくいきません。</p><pre name="code" class="javascript"> var callbackMethod1 = function(target){ target.slideDown(1000); } $("#div0").slideUp(1000, callbackMethod1($("#div0"))); </pre><p>しかし、以下は動作します。</p><pre name="code" class="javascript"> var callbackMethod2 = function(){ $("#div1").slideDown(1000); } $("#div1").slideUp(1000, callbackMethod2); </pre><p>callbackMethod1のslideDownをfadeOutに変更して実行してみると、slideUpと同時にfadeOutしているのが確認できます。つまり、slideUpの動作が完了してからcallbackMethod1が呼ばれているのではなく、ほぼ同時に動作してしまっています。つまり、引数つきのcallbackをslideUpに渡す時点で、callbackMethod1を実行しまっているということです。</p><p>callbackMethod2はcallbackMethod2の参照を渡しているので、callbackをslideUpに渡す時点では実行されず、動作完了後にslideUpがcallbackMethod2を実行します。</p><p>引数を取るメソッドが関数オブジェクトを返すようにすることで意図通り動作させることができます。</p><pre name="code" class="javascript"> var callbackMethod3 = function(target){ return function(){ target.slideDown(1000); } } $("#div2").slideUp(1000, callbackMethod3($("#div2"))); </pre><p>callbackでの処理がその箇所でしか使用しない場合は単に以下のように無名関数で書くとよいでしょう。</p><pre name="code" class="javascript"> $("#div3").slideUp(1000, function(){ $("#div3").slideDown(1000); }); </pre>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-89785887010524122152011-05-06T21:11:00.002+09:002011-05-06T22:19:39.166+09:00Effective JavaScriptをepubにしてみた。<p><a href="http://d.hatena.ne.jp/renoiv/20110218/1298034375">Effective JavaScriptをPDFにしました - renoivのブログ</a>を見て、これはいいなぁと思ったので、epubにしてみた。もともと書いた方はexealさんなので、メタ情報のauthorをexealさんにしてあります。</p><br /> <h2>おいてある場所</h2><p><a href="http://dl.dropbox.com/u/7692296/epub/EffectiveJavaScriptAFewWaystoImproveYourJavaScript.epub">Effective JavaScript epub ver</a></p><p>以下、iPadとiPhoneのiBooksでのスクリーンショット</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJKwUZi0wwmAtNfUGOhwUcXzqFn3FwFxBZ_04P9GMDQQ7u2WC3JU6VJ5Kw3nryLO6kTZKqo1AZPORGkrs71wkl2sang4jHCAO2F-CbkRO0azwY1zTJvp03mrNEnhII7Nk-GhZAw0deTfk/s1600/iPad.PNG" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="400" width="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJKwUZi0wwmAtNfUGOhwUcXzqFn3FwFxBZ_04P9GMDQQ7u2WC3JU6VJ5Kw3nryLO6kTZKqo1AZPORGkrs71wkl2sang4jHCAO2F-CbkRO0azwY1zTJvp03mrNEnhII7Nk-GhZAw0deTfk/s400/iPad.PNG" /></a></div><br /> <br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTk5rispHjSdwWpBuqy1OIEiveCND8VYicCWzTTBwCmgnihubvobakjVKJBaLtI3gFTDSltfQo8n0tgXz3KX5EFip-1X8qsD171sO5qa_BS8FMzsZBuhxshzVSSG5ZXHYABZEvmBUTh2E/s1600/iPhone.PNG" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="320" width="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTk5rispHjSdwWpBuqy1OIEiveCND8VYicCWzTTBwCmgnihubvobakjVKJBaLtI3gFTDSltfQo8n0tgXz3KX5EFip-1X8qsD171sO5qa_BS8FMzsZBuhxshzVSSG5ZXHYABZEvmBUTh2E/s320/iPhone.PNG" /></a></div>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-75502590286652701752011-05-06T20:52:00.001+09:002011-05-06T20:57:27.130+09:00OmegaTでstardict形式の辞書が読み込めないのはjdk1.6のバグです<p>twitterでつぶやいてたら<a href="https://twitter.com/#!/brandelune">@brandelune</a>さんが「ログ見た?」と質問してくれたおかげで問題が解決しました。そもそもOmegaT自体がJRE同梱版を利用することを推奨してたのを見落としていたのですが、同梱版を利用する以外の解決方法です。</p><br /> <h2>どういう問題?</h2><p>.dict, .idx, .ifoの3ファイルをdictionaryディレクトリに格納しても、OmegaTが辞書を読み込んでくれない。<br /> </p><br /> <h2>判断基準は?</h2><p>ターミナルでコマンドラインから起動するとログがターミナル上に流れます。OmegaTのプロジェクトを開いた際に以下のエラーが発生していればこの問題だと思われます。</p><pre>Error load dictionary from '★OmegaTのプロジェクトファイルのpath★/dictionary/辞書ファイルの名称.ifo': invalid literal/length code</pre><br /> <h2>回避方法</h2><p>jdk1.5もしくはjdk1.7で実行する。Java Preferencesで使用するjdkのバージョンを変更するかフルパスで指定して実行</p><pre>/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java -jar /Applications/OmegaT.app/Contents/Resources/Java/OmegaT.jar</pre><br /> <h2>なぜ?</h2><p>jdk1.6.0_24のバグです。<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7028902">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7028902</a>を参照</p><br /> <h2>環境</h2><ul><li>Mac OS X Snow Leopard</li> <li>jdk1.6.0_24</li> </ul><br /> <h2>参考</h2><dl><dt>SnowLopardにjdk1.5をインストールする方法</dt> <dd><a href="http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard">http://wiki.oneswarm.org/index.php/OS_X_10.6_Snow_Leopard</a></dd> <dt>ターミナルからOmegaTを実行する方法(pathは各自読み替えて)</dt> <dd>java -jar /Applications/OmegaT.app/Contents/Resources/Java/OmegaT.jar</dd> </dl>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-79117655066545488182011-05-03T22:13:00.000+09:002011-05-03T22:13:28.965+09:00NetBeansを-Dfile.encoding=UTF-8で利用している場合にFindBugsの警告が文字化けしちゃうのを直す<h2>やりたいこと</h2><p>NetBeansでFindBugsの警告が文字化けするのを直したい。</p><br /> <h2>なぜ?</h2><p>読めん。</p><br /> <h2>環境</h2><ul><li>Mac OS X Snow Leopard</li> <li>NetBeans 7.0</li> </ul><br /> <h2>原因</h2><p>どうやら日本語メッセージがSJISで保存されている</p><br /> <h2>方法</h2><ol><li>/Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/sqe1/modules/extにfindbugs.jarが入っているので、デスクトップにコピー</li> <li>jar xvf findbugs.jarとかやって解凍</li> <li>messages_ja.xmlの文字エンコードをSJISからUTF-8に変換</li> <li>jar cvf findbugs.jar .とかやって圧縮</li> <li>元あった場所に戻す</li> </ol>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-36599048082302118952011-04-30T03:05:00.002+09:002011-05-03T22:41:46.649+09:00CheckStyleで自分に不要な指摘を抑制する<h2>やりたいこと</h2><p>CheckStyleで指摘されたくない項目を警告抑制する。<br /> <h2>なぜ?</h2><p>無視すると決めた警告で警告だらけになると本当に修正しないといけないものが埋もれるから<br /> <h2>方法</h2><p><a href="http://www003.upp.so-net.ne.jp/kaz-taka/checkstyle/">TAKAHASHI, Kazutaka</a>さんが<a href="http://www003.upp.so-net.ne.jp/kaz-taka/checkstyle/4.1/index.html">Checkstyle 日本語訳 バージョン 4.1</a>を公開しています。感謝。<br /> <h3>Privateなメソッドや変数とかはJavaDoc無いよって指摘されたくない。</h3><pre name="code" class="xml"><module name="JavadocStyle"/> <!-- <module name="JavadocMethod"/> <module name="JavadocType"/> <module name="JavadocVariable"/> --> <!-- add myStyle --> <module name="JavadocMethod"> <property name="scope" value="protected"/> </module> <module name="JavadocType"> <property name="scope" value="package"/> </module> <module name="JavadocVariable"> <property name="scope" value="protected"/> </module> <!-- end myStyle --> </pre><h3>いまどき一行に80文字以上書いてるって指摘されたくない。</h3><pre name="code" class="xml"><!-- <module name="LineLength"/> --> <!-- add myStyle --> <module name="LineLength"> <property name="max" value="120"/> </module> <!-- end myStyle --> </pre><h3>Parameterに代入とかしてもFindBugsが指摘してくれるからfinalは必須にしたくない。</h3><pre name="code" class="xml"><!-- <module name="FinalParameters"/> --> </pre><h3>ConstructorとSetterの場合はthisで指定するのでFieldを隠しても警告しない。</h3><pre name="code" class="xml"><!-- <module name="HiddenField"/> --> <!-- start myStyle --> <module name="HiddenField"> <property name="ignoreConstructorParameter" value="true"/> <property name="ignoreSetter" value="true"/> </module> <!-- end myStyle --> </pre><h3>サブクラス化できるクラスの非private、非staticのメソッドをabstract、final、空実装にするのはやや苦しい。サブクラス化が必要か不必要かの判断は初回実装中に判断しにくいので。<br /> </h3><pre name="code" class="xml"><!-- <module name="DesignForExtension"/> --> </pre>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-27766346367722654172011-04-30T02:52:00.002+09:002011-04-30T03:05:44.556+09:00native2asciiはやめてXMLのプロパティを使う<h2>やりたいこと</h2><p>XML形式のプロパティが使いたい。<br /> <br /> <h2>なぜ?</h2><p>native2asciiのエンコードされた日本語文字列はメンテナンスするのが面倒なので。<br /> <br /> <h2>環境</h2><p>JDK1.5以降<br /> <br /> <h2>説明</h2><p>とくに難しいことはしていません。storeToXML()とloadFromXML()しているだけです。プロパティから値を取得したい場合はgetProperty(キー)とかしてください。<a href="http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Properties.html">PropertiesのJavaDoc</a>とかも参照のこと。<br /> <br /> <h2>サンプルコード</h2><p>streamの扱いは適当なんで、BufferedOutputStreamとかBufferedInputStream使ってください。<br /> <pre name="code" class="java">import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; public class Application { private static final String XML_PROPERTIES_NAME = "test"; private static final String XML_PROPERTIES_NAME_SUFFIX = ".properties.xml"; private static final String XML_PROPERTIES_FILE_NAME = XML_PROPERTIES_NAME + XML_PROPERTIES_NAME_SUFFIX; private static final String XML_COMMENT = "プロパティのコメント"; private Properties getProperties() { Properties properties = new Properties(); properties.setProperty("usage", "このプログラムの使用方法"); properties.setProperty("test", "テスト文字列"); return properties; } private void saveProp() throws IOException { Properties properties = getProperties(); OutputStream stream = new FileOutputStream(XML_PROPERTIES_FILE_NAME); properties.storeToXML(stream, XML_COMMENT); stream.close(); } private void loadProp() throws IOException { InputStream stream = new FileInputStream("test.properties.xml"); Properties prop = new Properties(); prop.loadFromXML(stream); stream.close(); prop.list(System.out); } /** * @param args the command line arguments * @throws IOException */ public static void main(String[] args) throws IOException { Application app = new Application(); app.saveProp(); app.loadProp(); } } </pre>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-696372547449891012011-04-28T15:19:00.001+09:002011-04-30T03:05:58.878+09:00<dl><dt>ポモドーロ開始時にtwitterを終了する</dt> <dd>AppleScriptで制御する</dd> <dt>ポモドーロ完了時にtwitterを起動する</dt> <dd>AppleScriptで制御する</dd> <dt>ポモドーロ中に思いついたこと</dt> <dd>Evernoteに書いて忘れる</dd> </dl>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-43106543611098538172011-04-26T15:08:00.002+09:002011-04-30T03:06:11.784+09:00shellからJavaScriptを気軽に実行<h2>やりたいこと</H2><p>JavaScriptをシェル上で気軽に実行したい。<br /> <br /> <h2>なぜ?</H2><p>そりゃあ、今JavaScriptをおべんきょしてるので、折角だし。<br /> <br /> <h2>環境</h2><ul><li>Mac OS X Snow Leopard</li> <li>Java jdk 1.6.0(Snow Leopardに搭載されているやつ)</li> </ul><br /> <h2>手順</H2><p>以下のテキストファイルを/usr/local/binあたりにjsとかそんなファイル名で置く。パスが通っていればどこでもいいです。<br /> <blockquote>export CLASSPATH=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar<br /> java com.sun.tools.script.shell.Main $*<br /> </blockquote><p>作成したファイルに実行権限をつける。<br /> <br /> <h2>確認</H2><blockquote>echo "println('hello world')" > test.js<br /> js test.js<br /> </blockquote><p>引数なしで実行すると対話型シェルが起動します</p>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-81427560216874797622011-04-21T21:56:00.001+09:002011-04-30T03:06:26.336+09:00NetBeansのTomcatがどこにsessions.serを保管するかちょっと気になったので調べた。<br /> <br /> <h2>環境</h2><ul><li>Mac OS X Snow Leopard</li> <li>NetBeans 7.0</li> <li>tomcat-6.0.26</li> </ul><br /> <h2>結果</h2><p>tomcatを終了した際に以下に保管される。起動するとメモリ上に読み込まれて削除される</p><blockquote>/Users/ユーザ名/.netbeans/7.0/apache-tomcat-6.0.26_base/work/Catalina/localhost/_/SESSIONS.ser</blockquote>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-66059015044152360162011-04-13T11:26:00.001+09:002011-04-30T03:06:45.225+09:00GitHub用にSSH Keyを作る<h2>やりたいこと</h2><p>GitHub専用のSSH Keyを作って、他のSSH Keyと使い分ける<br /> <br /> <h2>なぜ?</h2><p>仕事用の公開鍵と共用はまずい。<br /> <br /> <h2>環境</h2><p>Mac OS X Snow Leopard<br /> <br /> <h2>手順</h2><h3>Keyを生成する</h3><blockquote># Keyが格納されているディレクトリに移動<br /> cd ~/.ssh<br /> <br /> # GitHub用のkeyを格納するディレクトリを作成して移動<br /> mkdir github<br /> cd github<br /> <br /> # Keyの生成<br /> ssh-keygen -t rsa -C "メールアドレス"<br /> <br /> # ★の部分でid_rsa.github.comと入力してEnter<br /> Generating public/private rsa key pair.<br /> Enter file in which to save the key (/Users/your_user_directory/.ssh/github/id_rsa):★<br /> <br /> # パスフレーズを要求されるので、パスフレーズを指定<br /> Enter passphrase (empty for no passphrase):★パスフレーズを入力★<br /> Enter same passphrase again:★もいっかい同じパスフレーズを入力★</blockquote><h3>生成したKeyをConfigに記述</h3><p>~/.ssh/configに以下を記述(viでもnanoでもemacsでもお好みに)<br /> <blockquote>Host github<br /> HostName github.com<br /> IdentityFile ~/.ssh/github/id_rsa.github.com<br /> User git<br /> </blockquote><h2>確認</h2><blockquote># SSHで接続<br /> ssh github<br /> </blockquote><h2>参考</h2><ul><li>http://help.github.com/mac-set-up-git/</li> <li>http://d.hatena.ne.jp/superbrothers/20090730/1248971671</li> </ul>を参考にさせていただきました。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-55723247989197231842011-04-13T11:01:00.000+09:002011-04-13T11:01:54.868+09:00GitのLocal Repositoryごとに使用するユーザ情報を変更する<H2>やりたいこと</H2><p>Repositoryによってuser.nameとuser.emailを使い分ける<br /> <br /> <H2>なぜ?</H2><p>仕事用のユーザ情報とプライベートのユーザ情報は違うものを使いたい。人によってはプライベートは必要ないけど、案件によって使っているメールアドレスが違う(常駐先のメールアドレスとかね!)。<br /> <br /> <H2>手順</H2><blockquote>#対象のLocal Repositoryに移動<br /> cd my_local_repository <br /> <br /> #対象のLocal Repositoryで使用するユーザ情報の設定<br /> git config user.name "指定したいお名前"<br /> git config user.email "指定したいメールアドレス"<br /> </blockquote><br /> <H2>確認</H2><blockquote>git config --list<br /> </blockquote>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-83643297544021679302011-03-31T04:02:00.001+09:002011-04-30T03:06:58.368+09:00Safari 5で突然RSSが取得できなくなったら(Mach error 268435460 - (ipc/send) timed out)” (NSMachErrorDomain:268435460)アクティビティモニタを起動して「PubSubAgent」プロセスを終了させると復帰するかもしれません。enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0tag:blogger.com,1999:blog-9122285378638258334.post-59223994310364347522011-03-28T04:11:00.002+09:002011-04-30T03:07:48.753+09:00Hibernate3でhbm2javaNetBeans6.9.1で「データベースからの Hibernate のマッピングファイルと POJO」を実行するとjavaコードと.hbm.xmlが生成されますが、手を入れたhbm.xmlからjavaコードを生成する手段が見当たらなかったのでantでやりました。<br /> <br /> build.xmlに以下を追加してhbm2javaタスクを実行。<br /> class.pathは各自の環境にあわせてください。私はMacでNetBeansなので…。<br /> <br /> 単独のxmlに記載してbuild.xmlでimportしてもよし。<br /> NetBeansではnbproject内のbuild-impl.xmlが実体でbuild.xmlでimportしているので。<br /> <br /> <pre class="prettyprint">&lt;path id="class.path"&gt; &lt;fileset dir="/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ide/modules/ext/" includes="*.jar"/&gt; &lt;fileset dir="/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/java/ant/lib" includes="*jar"/&gt; &lt;fileset dir="/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/java/modules/ext/hibernate/" includes="*.jar" /&gt; &lt;/path&gt; &lt;property name="srcdir" value="${basedir}/src"/&gt; &lt;target name="hbm2java"&gt; &lt;taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask"&gt; &lt;classpath refid="class.path"/&gt; &lt;/taskdef&gt; &lt;hibernatetool destdir="${srcdir}"&gt; &lt;configuration configurationfile="${srcdir}/hibernate.cfg.xml"&gt; &lt;fileset dir="${srcdir}"&gt; &lt;include name="**/*.hbm.xml"/&gt; &lt;/fileset&gt; &lt;/configuration&gt; &lt;hbm2java/&gt; &lt;/hibernatetool&gt; &lt;/target&gt; </pre>enumhttp://www.blogger.com/profile/02700200693823036148[email protected]0