トップ 最新 追記

誰も褒めてくれないから自画自賛する日記

nu-chon.org  「ぬ」あんてな  「ぬ」wiki  RSS
2000|01|02|03|04|05|06|07|08|09|10|11|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|06|07|
2012|01|03|05|06|08|09|
2013|01|08|09|
2014|01|03|05|08|12|
2015|01|04|09|10|
2016|01|
Sapporo RubyKaigi 02
Sapporo RubyKaigi 03
RubyKaigi
Sapporo RubyKaigi 2012
RubyKaigi 2013
2014年
3月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

2014-03-18 [長年日記]

MacBook Pro Mid 2010 のHDDをSSDに換装しました。

たまにはプログラミング関連の本以外の話。

家で使っているMacBook Pro (Mid 2010)のHDDをSSDに換装しました。特に迫られる理由があったわけではなく、用途もWEBの閲覧かEmacsでRails、Scheme、Haskellのコードを書く程度なので高スペックを求めるわけでもなかったのですが、CPUは今となっては非力なCore2 Duoですし、OSをSnow Leopard -> Lion -> Mountain Lion -> Marvericsとアップグレードを重ねてきて、もう少し速いマシンが欲しいけどマシンごと買い換えるほどではないなぁ、と思っていたのでSSDに換装することにしました。

購入したのは、シー・エフ・デー販売 TOSHIBA製SSD採用 2.5inch 内蔵型 SATA6Gbps 512GB CSSD-S6T512NHG5Q で、耐久性も多少考慮し512GBのMLCフラッシュにしました。

以下はその際の手順になりますが、後になって思い出しながら書いているので、前後関係が間違っていたり手順が抜けていたりするかもしれませんので許してください。なぜうまく行ったかわからないことは、わからないと書いておきます。

Time Machineでバックアップをとっておく。

今回は、Time Machineのバックアップから復元する方法にしました。先日、Time Capsuleを導入していたので、Time Machineの保存先をこのTime Capsuleにしてバックアップしました。(というか、してありました。)

HDDをSSDに入れ替え

  • 精密ドライバーでMBPの裏蓋を外し、HDDのプラスチックの留め具のビスを外し、HDDに繋がっているケーブルを外しました。
  • HDDの脇についているビス(4本)は口がドライバではない専用工具が必要ですが、僕は以前購入したのを紛失してしまったので、家の工具箱に入っていたプライヤーでこのビスを外しました。少々力が入りましたが普通にネジを回すことができました。
  • 上で外したネジを今回購入したSSDに付け、あとは逆順でMBPの蓋をしめました。

復元の開始(Cmd-Rを押しながら電源ON)

  • Cmd-Rを押しながら電源ONしリカバリモードで起動すると地球マークが登場し、10分弱でネットからインストールに必要なツールを勝手にダウンロードしていたようです。(完全にバックグラウンドで動いているのでよくわからなかったです。なぜWPA2でパスワード設定してあるWifiに自動的に繋がっていたのかが謎。また、手元にあったSnow LeopardのOSインストーラのDVDがあったので入れておきましたが関係無かった?)
  • 復元手順の選択肢が登場し、Time Machineのバックアップから復元するオプションを選択(他に、クリーンインストールとかありましたが気が逸っていたののでスクリーンショットはとってません)
  • Time Capsuleを勝手に見つけてくれたので、Time Capsuleに設定したユーザー名とパスワードを入れてバックアップの保存先を選択しました。
  • 復元先を探しに行きますが、SSDのフォーマットをしていないためいつまでたっても新しい復元先が見つかりません。そこで、画面上部のメニューバーの中からDisk Utilityを選択し、ここで、新しいSSDに新しいパーティションを作成しました。その後、Disk Utilityを終了し元の復元画面に戻ると新しいディスクが選択可能になっていました。
  • あとは、流れに任せてNextを続けていくだけ(だった気がします)

果報は寝て待て

夜の23時くらいから復元をはじめたのですが、最初の30分位は残り時間が9時間くらいと表示されていたので、「明日の朝にも出来ていないかもなー」と思いながらそのまま寝ました。(復元するサイズは150GB強位だったと思います。)

5時10分頃に目覚めましたがすでに完了していました。ログイン画面が表示されていたのでログインすると、Apple IDのパスワードを求められるなど、いくつか入力が必要でしたが、あとはそのままログインでき、問題なく使えていることを確認しました。

まとめ

速くなった気がしますが、あまり負荷のかかるようなことをしていないためよくわかりません。調べるのが面倒で行き当たりばったりでやったにもかかわらず簡単に換装できたので、めでたしめでたし。

シー・エフ・デー販売 TOSHIBA製SSD採用 2.5inch 内蔵型 SATA6Gbps 512GB CSSD-S6T512NHG5Q


2014-03-23 [長年日記]

「動けばいいコード」について

知識が豊富な人やプライドの高い人のエゴで「ここはもっとこうすべき」、「これはダサい」など細かく指摘を受け、嫌な気分になる人もたくさんいると思いますが、それは、指摘する人のエゴがマズイのであって、「動けばいいコード」で良いわけではない、と思います。(当然「このソースコード綺麗だろ。 実は動かないんだぜ?」は論外ですけど。)

例えば、家を建てる時に「柱にヒビ入っていてもバレね~し倒れねーし、10年後の改築とか俺知らねーしwww 今住めればいいじゃん!」みたいな設計士や大工さんには、たとえ住める家を作ってくれるとしても、仕事をお願いしたくないです。(少なくとも僕は。)

特にエンジニアが使う「動けばイイ」っていう言葉は、「技術力の引き出しが足りないこと」の言い訳とか見栄でもあるのではないかな、とも思ったりします。

確かに、どうでも良い細かい指摘をネチネチされるとムカつくけど、本当に「どうでも良いこと」なのかどうかは、その辺の経験と知識が無いとわからないので、言う側も聞く側も謙虚さが必要だと思います。

そして何より、技術力の研鑽に努めましょう。


2014-03-26 [長年日記]

mit-schemeの内部defineとRubyの内部def

SICPを読んでいて、面白いなぁ、と思ったので、ちょっとメモします。

Exercise 4.19で、以下のコードを実行した時、結果は何が期待されるか、という問題。

(let ((a 1))   ;; (1)
  (define (f x)
    (define b (+ a x))   ;; (2)
    (define a 5)  ;; (3)
    (+ a b))
  (f 10))

これはインタプリタの実装依存ですが、mit-schemeの場合は、

Unbound variable: a

というエラーになります。

雰囲気的には、letの内部で定義されているdefine (2),(3)がmit-schemeでは、以下の様な感じで解釈されるからっぽいです。

(let ((a 1))
  (define (f x)
    (let ((b '*unassigned)
           (a '*unassigned))
      (set! b (+ a x))
      (set! a 5)
      (+ a b))))

つまり、let で a = 1となっているけど、(2)の(define b (+ a x))が解釈されるタイミングでは、(+ a x)の"a"は、(1)のletで宣言された"a"ではなく、同じフレーム内で定義された(3)の(define a 5)の"a"が対象となる。しかし、あくまでも a = 5となるのは (define a 5)となるタイミングになるので、(2)の(define b (+ a x))のタイミングでの"a" は「宣言されているけど未設定」の状態になり、エラー、という解釈になるらしい。

で、思い出したのが、Ruby。

def aaa
   p defined?(bbb) #(1)
   p defined?(ccc) #(2)
   def bbb;1;end  #(3)
   p defined?(bbb) #(4)
end

というメソッドを定義して呼び出すと、

> aaa
"method"  #(1)の結果
nil #(2)の結果
"method"  #(4)の結果
=> "method" 

となり、最初の(1)の段階では (3)の def bbb が登場する前なのに、実行すると "method"として認識されている。

同じや〜。RubyはMatz LISPや〜。

他の言語だとどうなのかは不勉強なため知りません。

そんな感じです。

補足

ただし、Rubyで以下のコードを実行した場合、schemeとは異なります。

def bbb; 2; end
def aaa
  p defined?(bbb)
  p bbb
  def bbb; 1; end
  p defined?(bbb)
  p bbb
end
aaa
bbb
> aaa
"method" 
2
"method" 
1
=> 1 

>   bbb
=> 1

aaaの外側で定義したbbbがaaaの内部で参照可能ですし、def bbbの後は、このbbbが参照されますね。これは、Rubyのdef内部で定義したdefはその外側でdefで定義したことと同義になるため、bbb自体が上書きされるためです。(この動きについては、メタプログラミングRubyに記述があったような気がします。)

そういう意味では挙動が異なりますね。

本日のツッコミ(全2件) [ツッコミを入れる]

 [Rubyのコードの#(2)が間違っていたので修正しました。]

 [補足も追記したよん]


2000|01|02|03|04|05|06|07|08|09|10|11|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|06|07|
2012|01|03|05|06|08|09|
2013|01|08|09|
2014|01|03|05|08|12|
2015|01|04|09|10|
2016|01|

2014年
3月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Copyright (C)2005-2015 nu-chon.org.