やぐブロ

yag + programming + hateblo

Mac OS X Mountain LionのMacPortsでfuse4x-kextのビルドに失敗する場合の対処

Xcodeのlicense agreementsをコマンドライン上で行わなければいけないらしい.

$ sudo xcodebuild -license

として,"agree [ENTER]"で完了.
自分の環境ではsudoを付けずに同意しても解決しなかったのでsudoを付けて再度実行している.

間違ってChromeの閲覧履歴を全部消してしまった時のための,Time Machineからの復旧法(Mac OS X版)

やっちゃったこと

  • アカウントで同期しているChromeで閲覧履歴を全消去してしまったこと(サブマシンでやってしまった)

ここでいうChromeの「閲覧履歴」とは,以下のデータ全てを指す.
f:id:yag_ays:20120827065737p:plain
履歴は別にどうでもいい場合が多いが,保存されているパスワードや入力履歴などが消えると,とてつもなく面倒くさいメールのやり取りをするはめになるか,もしくは死に至るケースがある.

解決方法

もしTime Machineで定期的にバックアップを取っているなら,

/Users/user_name/Library/Application Support/Google/Chrome

に設定が保存されているので,このディレクトリを丸々復旧すれば解決する.なお,このディレクトリは~/Library以下にあるので,Time MachineのFinderから辿れない場合がある.その場合はTerminal.appで「open /Users/user_name/Library/Application Support/Google/Chrome」としてフォルダを表示させてからTime Machineに入れば良い.

結論

Googleさん,Chromeさん,同期データはある程度復旧できるようにしてください.

OS X Mountain Lion移行前後にやったこと

  • 移行前
    • Time Machineでバックアップ
  • 移行後
    • ソフトウェア・アップデート
    • ディスクユーティリティでアクセス権の修復
    • Spotlightのインデックス再構築
    • Xcode入れなおし
      • Command Line Toolsだけでいいかと思ったけどMacPortsがエラー出して動かなかったので,App Store経由でインストール
    • MacPortsでselfupdateとupgrade outdated
      • なんかものすごいインストールしなおしてた
    • システム環境設定のセキュリティとプライバシーで「すべてのアプリケーションを許可」にチェック
    • ホームディレクトリでrm */.localized /Applications/.localized

zshでcompinitやcolorが効かない時はfpathを設定する

新しいUNIX環境を作って使い回しの.zshrcを導入すると

compinit: function definition file not found
colors: function definition file not found

となることがある.その時にはfpathがきちんと通ってないことがあるので,zshのfunctionが置かれているディレクトリのパスを.zshrcで設定すれば良い.

 fpath=(/home/yag_ays/local/share/zsh/4.3.17/functions ${fpath})

今回の場合は自分で入れたzshの中のfunctionを指定しているが,大抵は/usr/share以下のzshのディレクトリを見ていけば何処かにあると思う.

プログラミングが必要な研究との上手い付き合い方

「もし先生や先輩やネットの中のギークのようにプログラムが自在に書ければ,今取り組んでいる研究も上手くいくに違いない」と思ってはいないだろうか?それは正しいようでいて,間違っている.プログラミングができるようになれば研究が上手くいくようになるんじゃない.逆なんだ.研究がうまくいくようになれば,おのずとプログラミングができるようになるんだ.

例えば,勉強ができるようになればテストで必ず良い点が取れるかというと,そうとは限らない.ただ,テストで常に良い点が取れるようになれば,それは勉強ができるようになったといえるんじゃないか?テストなんてものはある側面でしか知識や技量を測ることが出来ないけど,継続して点数を取れる状態が続けば,勉強ができるというポテンシャルは自然と付いてくる.プログラミングと研究の関係も同じだ.一見順序が逆のように見えるが,理想で塗り固められた曖昧なものを追いかけても,結果は容易には付いてこない.

だから,プログラミングや勉強なんてものは一度忘れよう.それらは目的を達成するための,または他人から評価を得るための唯の道具でしかない.それらを磨く前に,とにかくまず使ってみることだ.使い物にならなかったら取り替えればいいし,使い心地が悪かったら後で直せば良い.意外と良い感じに使えるかもしれない.

今はとにかく研究に集中しよう.目の前にある研究だけを考えて精一杯こなせば.意識していなくても能力や技量は後から付いてくる。

ただ,始めは不安になるかもしれない.あれも勉強したいこれも習得したいという欲求が常に付きまとうだろう.ネットには技術情報が溢れ,巷では勉強会が開かれ,改めて世の中の広さや他人との知識/技術ギャップに気付かされる状況では,どうしても華やかなものに目移りしたり分野を超えて活動できる万能研究者にならなきゃいけないと思い込んでしまいがちだ.最新技術に置いてけぼりにされたらどうしようとか,個性を出して独自なものを作らないと評価されないんじゃないかといった焦りが頭をよぎることもあるだろう.

しかし,そんなものは全て研究の成功の前には些細なことだ.一生懸命何かをこなした後には,必ずその行為に対する何らかの評価や実績が得られる.それとともに,本来やりたかったこと,すなわち理想としていた自分の姿にいつの間にか近づいているはずだ.そうやった方が,基礎を固めようと寄り道したり,あれこれ手を出したり,最初からオールラウンダーやジェネラリストを目指すより,より目標に近づくことができる.

だからとにかく今の研究を全力でこなそう。


======
自戒を込めてlocalに書き貯めていたものを改めて纏め直してみた.
まったくもって偉そうなことを書いているが,真に受けないで欲しい.程々に嗜むくらいが丁度良いと思う.
この文章は情熱プログラマー ソフトウェア開発者の幸せな生き方の「今の職務を全力で」"Be Where You're At"に強く影響されている.

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

gisty導入メモ

環境

$ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.2.0]
$ which ruby
/Users/yag_ays/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

gistyのインストール

$  gem install gisty

gitの設定

$ git config --global github.user yagays
$ git config --global github.token ********************************

.zshrcの設定

# gisty
export GISTY_DIR="$HOME/dev/gists"
export GISTY_SSL_CA=/Users/yag_ays/.rvm/usr/ssl/cert.pem
export GISTY_SSL_VERIFY="none"

取り敢えずgistに上げているスクリプトを落としておく

$ gisty sync

そろそろmickey24donoについて一言いっておくか

mickey24donoというtwitterbotを作ってから約1年になるので,なんとなく開発の経緯や実装などについて思い出しつつ,この1年自分の不出来なbotを見続けてきて感じたことなどを書いてみようと思う.オチも面白みも糞も無いが,まあ書いてしまったものはしょうがない.
https://twitter.com/#!/mickey24dono

f:id:yag_ays:20120313120059j:plain

開発経緯と実装

 この不出来なbotを作ったのは,去年の今頃に熱海で行われた開発合宿だった.詳しい経緯及び動機ははっきりと覚えていないのだけれども,開発合宿の本筋でやろうとしたのではなく,半分遊びで作ったということは確実である.1日目の夜に徹夜して基礎だけ作って後は適当に遊びつつ,機能などを付け加えていったという流れで,ソースコードはその時書いたものから殆ど何も手を加えず1年間動かし続けてきた.コードを書いたといっても,別に作っていたtwitter botのメインフレームをそのまま流用している.botが喋る(刺激に応答する)ネタに関しても,その当時内輪のskypeで流行っていた言葉遊びをそのまま採用して,少しは見栄えがよく面白くなるように適当なライブラリを使って装飾することにした.
 実装方針といえるものは何も無いが,当初から決めていたことは「とにかく単純なもので複雑な挙動をするようなものを作りたい」ということだった.そもそもこの考えは,コードを流用する元となった別のtwitter botを非常に多機能で雑多なものにしてしまったことから来ている.元となったbotは,テンプレートからの応答文の作成して発言候補をスタックしタイミング良くポストする仕組み,タイムラインのログ保存,favoriteの検知なども実装していた.そのため,ソースコードはかなり膨れ上がり,テストもまともに書いていないコードは実に読みにくく管理しづらいものだった.そういう背景があって,いざbotを新しく作るときにコードの基礎をコピーしたはいいものの,そこから改良を加えるのは非常に困難だった.開発合宿の限られた時間の中でコードを解読して整理する時間など取れるはずもなく,遊びにそれほど手間を掛けたくなかったこともあって,機能を全部捨てることにしたという経緯がある.
 botの機能を最大限に削ろうと考え,頭の中に膨らんでいたbotの妄想からありとあらゆるものを削りに削った挙句,最後に残ったのはタイムラインを読み込んで内部処理をして返すということだけだった.ただ刺激に応答するだけの,一つの入口があって一つの出口があるハコだけである.何か外部ファイルを作成したり読み込んだりすることさえ排除するようにした*1.外部ファイルから何かしらの情報を引き継げない最大の問題は「タイムラインをどこまで読んだか記憶できない」ということだったが,直近数件のポストを重複覚悟で読み込んで,半ば無理やりな方法で語尾のパターンを増やしてごまかすことにした.
 内部処理も非常に単純で何の面白みも無いものである.タイムラインの発言を形態素解析して名詞だけを抜き出し,名詞と判断された単語それぞれに重みを加えた上で最終的に発言する単語をランダムで決定する.単語に付与する語尾などの文字列は別途ランダムで選ばれ,botが発言する際に先程の名詞とつなぎあわせるという流れだ.名詞が無いポストがあった場合には,予め用意されていたテキストを発言するようにしている.あとは定期的にタイムラインから直近数件読み込んできて上記の処理に流せば後はよしなにやってくれる.同じ発言は繰り返さないような仕組みや,誰も発言していないような時間にはbotも発言しないようにする仕組みは,別に内部で実装しているわけではなく,ただtwitterが多重投稿を防止してくれたりbot自身の投稿を読み込まないようにするシステムの副次効果的なものである.動かしてみて問題がなければそれで良いということを積み重ねた結果,要求通りには動かないけれども問題は起こさないようなプログラムが出来上がった.これをこの1年間ただただ鯖のcronでひたすら回し続けているだけという感じ.この1年間で1回だけ暴走してプログラムが終了しないということはあったけれども,それ以外では特に問題は起きていない.というよりかは動く動かないといった問題が起きても何も起きない.
 という感じで,合宿の思いつきで作ったプログラムは,プログラマの怠惰と低空飛行な開発によって,意図しない通りに動き,意図しないようなことを発言し続ける,望みどおりのbotとなった.

1年間動かしてみた感想

 合宿で実装した頃は,1ヶ月もしたらこの面白みも何も無い無能なbotを止めようかと考えていたのだが,それすらもめんどくさくなって延々と動かしている.幸いなことに,この不出来なbotを気に入ってくれる方や発言を気にかけてくれたり反応してくれたりする方がいらっしゃったので,今日まで続けてこれた(放置し続けた)気がする.非常に有難い限りだ.ただ,そういう人たちのためにbotの機能追加などの要望対応ができないのが,申し訳ない限りである.

今後

特に無い.

*1:内部処理で形態素解析するときは辞書ファイルを読み込んでいるが...まあ辞書自体は書き換えたりしないのでノーカウントで