読者です 読者をやめる 読者になる 読者になる

600000007

プログラムと折り紙のブログです。

他のMacのTime Machineバックアップからデータを復元する方法。

Mac

メインで使っていたMac Book Proに水をぶっかけてしまい、泣く泣くMac Book Airへデータを移行しました。
その際、iTunesやらiPhotoのデータを復旧するのに苦労したのでメモしておきます。

この質問が参考になりました。

環境

  • 旧Mac Book Pro
    • OS X 10.7
    • 外付けHDDにTime Machineでバックアップしてた
  • 新Mac Book Air

1. Finderをコンピュータに移動

新Macに外付けHDDをつないだら、まずこれをやっておくとスムーズに作業ができます。
Finderメニュー -> 移動 -> コンピュータ で移動できます。

2. 他のバックアップディスクをブラウズ

Time Machineをaltを押しながら起動すると、「他のバックアップディスクをブラウズ」というメニューが出てきます。
これを選ぶと他のMacで保存されたバックアップを選択できるようになります。
旧Macのバックアップデータを選択します。

3. 旧Macの最新バックアップを選ぶ

「他のバックアップディスクをブラウズ」すると、普段と違ってピンク色の時系列データが表示されます。
それが旧Macのデータです。
濃いピンク色になっているものを選択すれば、自マシンと同じようにデータを取り出せます。

4. データを選べない?

ただし、最初の「Finderをコンピュータに移動」をやっておかないと、透けたピンク色になって選択できない場合があります。
これは、Time MachineがFinderで操作中のディレクトリがバックアップの中にあるかどうかで、選択可・不可を判断しているのが原因のようです。
例えば、新旧でユーザー名が変わっており、以下のようだったとします。

新Mac操作中のFinder:/Users/user2/Document
旧Macで欲しいデータ:/Users/user1/Document/awesome.txt

新Macにはuser1というユーザが居ないので、/Users/user2/Documentは存在しません。
この状態でTime Machineを起動すると、透けたピンクとなってデータを選択できません。
しかし、コンピュータ(要するに絶対パスのroot)からたどると/User/user1にたどり着く事ができ、データも選択できるようになります。
そのために、最初にコンピュータに移動する、という手順にしました。
Time Machine起動後でもコンピュータに移動はできますが、移動メニューなどが出ないので先にやっておいた方が楽です。
(自分がショートカット覚えてないだけですが。)

Scala Conferenceスタッフやってみた(謝罪あり)

Scala

3/2(日)、Scala Conference in Japan 2013が開催されました。
私はスタッフとして準備に奔走していましたが、無事終了しほっとしております。
多くの方にご来場頂き、誠に感謝です。

そんな中で、次はスタッフを手伝いたい!という声を多数聞いたので、参考までに実際のスタッフ業務とはどんな感じだったのかをまとめておきたいと思います。


謝罪

まずは謝罪から。
メイン会場が寒いという情報はキャッチしていたのですが、なかなか改善できませんでした。
実は空調設備の使い方を勘違いしていて、ずっと空調がOFFになっていました。
申し訳ございませんでした。

どんな仕事?

期間は?

2012年7月21日(土) からスタートしました。
現在も後処理が進行中です。

どれくらい時間を取られるの?

ミーティング

ミーティングは全8回行いましたが、全員が毎回出席した訳ではありません。
恐らく全部出席したのは座長と副座長だけではないでしょうか?
他のメンバーはまちまちです。

忙しい時期は?
  • 初期:会場選定
  • 中期:スポンサー対応、ゲスト招致、広報など
  • 後期:全担当
1日のうちどれくらい作業したの?

これも担当内容によってまちまちですが・・・
毎日メール書いたりサイトを更新したりしている人もいれば、短期間集中で担当タスクを片付けて終わり、という人もいました。
私の場合は、後期は平均毎日30分程度(共有情報のチェック、外部とのメール、会場設計)タスクに時間を割いてました。

前日・当日スタッフ

ここまでの説明はコアメンバーのケースです。
その他にも、前日・当日のみ手伝うという方法もあります。
今回は7名の方に前日・当日スタッフとして参加して頂きましたが、大変助かりました。

どんな仕事があるの?

  • 前日まで
    • 会計
    • 会場選定、デザイン
    • スポンサー対応
    • ゲスト招致
    • プログラム作成
    • サイト作成
    • ノベルティ作成
    • ランチ手配
    • 懇親会手配
    • チケット販売
    • 翻訳
    • 広報
    • etc
  • 当日
    • 会場(司会、質問マイク、スピーカー対応など)
    • 受付(チケット確認、ノベルティ配布、ランチ配布など)
    • 会場設営、撤収
    • 翻訳(リアルタイム翻訳tweet)
    • 案内
    • 撮影(動画撮影、写真撮影)
    • etc
  • 終了後
    • アンケート集計
    • 会計
    • 広報
    • etc

どうやって情報共有したの?

  • ミーティング
  • メーリングリスト
  • co-meeting
  • GitHub

仕事の流れは?

あれやらなきゃね -> じゃあ僕やります -> ... -> 終わりました  -> ...
あれやらなきゃね -> じゃあ僕やります -> ... -> すいません忙しくてできません -> じゃあ代わりにやります

最終的にはチームでなく個人にタスクを割り振る形に落ち着きました。

全部自分達でやるの?

受付、ロゴデザイン、撮影、アンケート集計などは業者に依頼しました。

お金はどこから?

全部スポンサー様の支援を元に活動しています。

スタッフは何者?

どんな人達がやってるの?

Scala好きプログラマーです。
JSAも作りました。

Scala詳しくないけど大丈夫?

初心者でもOKです。

英語できなくでも大丈夫?

大丈夫です。
英語が必要なタスクは、堪能な方々にお願いしました。
開催直前のスタッフ募集では英語が必要といったニュアンスでしたが、タイミング・リソース的にそういった人材だとよりありがたかっただけで、全員に英語必須という訳ではありません。

なんでスタッフやったの?

私の場合は、生活に変化が欲しかったのと、Scalaが広まって欲しいという思いからです。

メリットは?

  • 交友広がった
  • 盛り上がりの輪の中に居れた
  • やり遂げた感は異常

懇親会では気持ち悪いぐらいスタッフ同士褒め合いました。

お金貰えるの?

ボランティアです。

次回は?

次はあるの?

未定です。座長(@kmizu)の言葉を待て!

どうやって参加するの?

次回があるとしたら、座長がまた募集すると思います。座長の言葉を待て!
途中参加、前日・当日参加のみもOKです。

macでデフォルトのcore出力設定を変える方法

mac

環境

  • OS X 10.8.2 Mountain Lion

ulimit

coreはデフォルトでは出力サイズが0になっているので出力されません。
出るようにするにはulimitコマンドを使います。
まずは現状の確認。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

無制限に変更します。

$ ulimit -c unlimited
$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

これでcoreが出力されるようになります。

launchd.conf

ただし、ulimitの設定は再起動すると失われます。
デフォルト設定を変えるには、/etc/launchd.confを使うのが簡単です。

/etc/launchd.confに以下を記述します。デフォルトではlaunchd.confは存在しないので作成します。

limit core unlimited unlimited

launchd.confは、launchdの設定ファイルです。
launchctlのコマンドをそのまま記述できます。

後輩に教えたら喜ばれたキーバインドの話

Dvorak Vim Emacs Eclipse Intellj IDEA

ある日の事。
ぺこぺことキーボードを叩きながら後輩とペアプロしていたら、「その操作どうやるんですか?ショートカットとか覚えたいっす!かっこいいっす!」と情熱的な眼差しを向けられました。

俺も昔、全く同じ事を思ったなあと回想しながら、さて何を教えようと逡巡したので、その結果をまとめておきます。



前提

  • プログラマー向けの話です。
  • Windowsのキーボードは109配列キーボードを想定しています。

キーを入れ替えよう

  • Escキー

vimを使っているとEscキーを多用しますが、Windowsの場合は左上隅にあるので押しにくいです。
そこで、半角キーとEscキーを入れ替えちゃいましょう。すると、Escの位置がぐっとホームポジションに近くなるので押しやすくなります。半角キーを多用する人は、半角キーもスペース横のかな変換キーなどと交換してしまいましょう。

キー交換には、change keyとかが便利です。

  • Ctrlキー

Emacsその他IDEを使っていると、Ctrlキーを多用しますが、これまたWindowsは左下、右下と押しにくい位置にあります。
そこで、CapsロックキーとCtrlキーを入れ替えちゃいましょう。CtrlキーはIDEに限らずあらゆるアプリケーションのショートカットキーで使われるので、おすすめの設定です。


Emacsバインドを覚えよう
新しいIDEを使う事になったとき、またショートカットを覚えるのかとうんざりしませんでしたか?
でももしEmacsのキー操作を覚えていると、その負担は激減します。

Emacsの代表的なキー操作(上下左右/行頭行末への移動、削除/、検索など)は、以下の環境で使う事ができます。

  • Eclipse
  • IntellJ IDEAその他IDE(多分)
  • Bashその他Shell
  • Macのアプリケーション全般

EclipseやIntellj IDEAなどはキーバインドの設定変更が必要ですが、それ以外はデフォルトで使う事ができます。
個人的に特に効果を感じるのは、Bash操作とMacですね。
Bashのコマンドラインでは行頭、行末移動ができるだけで、かなり操作効率が上がります。
さらにMacはメモ帳、ターミナル操作、ブラウザのアドレスバーまでEmacs操作ができます。いちいちトラックパッドや矢印キーを使わないでいいのは素敵ですね。


Dvorak配列を覚えよう
現在の標準的なキーボードは、qwert配列ですが、こいつは決して人間向きな配列ではありません。
母音が離ればなれになっており、手が疲れやすいです。
そこで考えだされたのがDvorak配列です。
この配列は母音が一塊で並んでおり、指の移動距離が短く疲れにくいという特徴があります。
これをマスターすれば1日中タイピングをしても疲れしらず!
Windowsでは窓使いの憂鬱とかのどかを使えばDvorakに変更することができます。
Mac/LinuxではDvorakのキー配列がデフォルトで搭載されているので、簡単にDvorakにかえる事ができます。


ただし弊害として、

  • 自分のPCを他の人が操作できない
  • 客先作業とかで急にqwertを触るとおたおたして仕事できない人に見える

のような問題があります。まあ・・・それをふまえてもよいと思いますよ、Dvorak

key-value形式のvalueを取得する正規表現

java 正規表現

久々にややこしい正規表現を書いたのでメモ。


以下のような形式のテキストから、valueだけをぬきとります。

key="value"

ただし、valueに' " ' を含めるために ' ¥ ' でエスケープされる可能性も考慮します。
こんな感じです。

key="value"
key="va¥"lue"
key="va¥¥lue"
key="value¥¥"

こんな正規表現を書いてみたところ、期待する値がとれました。

key="((.*?¥¥¥¥)|(.*?[^¥¥]))"

取得結果。
Javaで動作確認をしています。

value
va¥"lue
va¥¥lue
value¥¥

case class B extends case class A はダメ?

scala

case classを継承したcase classを書いていたらwarningがでました。

case class A (x:Int)
case class B (override val x:Int) extends A(x)

コンパイルは通るのですが・・・

[warn] there were 1 deprecation warnings; re-run with -deprecation for details

deprecation(廃止予定)なコードがあるよ、とのことです。
詳細を調べる為に以下のオプションをbuild.sbtに追加しました。

scalacOptions += "-deprecation"

scalacOptions += "-Xmigration"

これで、もっと詳細なdeprecation情報が出力されます。

case class `class B has case ancestor `class A'.  Case-to-case inheritance has potentially dangerous bugs which are unlikely to be fixed.  You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes.

頑張って意訳してみました。

case class Bはcase class Aを継承しているよね。
でもcaseからcaseの継承には、直される見込みが無い潜在的なバグがあります。
なのでその代わりに非リーフノード上の抽出子によるパターンマッチを使うのを推奨するよ!

ふーん。
とにかくcase to caseの継承はやめなさいって事ですね。
今回はcase class A内部でごにょごにょ実装を書きたかっただけだったので、Aをtraitに変えて対応しました。

trait A { val x:Int }
case class B (x:Int) extends A

この質問を参考にしました。

しかし潜在的なバグって何だろう・・・

函数プログラミングの集い 2012 in Tokyo

関数プログラミング

函数プログラミングの集い 2012 in Tokyoに参加してきました。

初めてのお茶の水女子大学でしたが、関数プログラマーっぽい人の後をつけていったら無事到着しました。
我ながら無駄な眼力です。


個人的に一番面白かったのは、@ksknacさんの「関数プログラミングの今昔(仮)」でした。
結局関数型って何なのか?というもやもやしていた気持ちが晴れました。


関数とは何か?

関数とは、入力集合と出力集合を1対1で対応づけるもの。
=> 入力要素に対して1対1で対応する要素を返却するもの。

と理解しました。
確かに関数型プログラミングで推奨されている作法や、コレクションのメソッドは、この定義を満たしていますね。
といってもScalaしか知りませんが・・・。


関数型言語ではなく関数型プログラミング

ほんとにすっきりする話でした。
関数型とはプログラミングスタイルであって、特定の言語に依存する物ではない。
関数型を実現しやすい言語はあっても、関数型しかできない、関数型ができない言語はないんですね。

これはオブジェクト指向に関しても同じ事が言えます。
オブジェクト指向も同じくプログラミングスタイルであって、どんな言語でも理論上はオブジェクト指向で書けますよね。
実は自分は、Cでオブジェクト指向プログラムを書いていた時期があります。
まあ実際はオブジェクト指向の体をなしてはいませんでしたが・・・不可能ではないのです。


関数型の歴史

おかげさまでScala以外の言語にも興味がわいてきました。
コップ本を読み終わったら次は大統一言語Haskellに狙いを定めます。
あとCommonLispも・・・使用言語アンケートではびびって手を挙げられませんでしたが、今度はちゃんと挙げられるように復習しておきます。