予測不可能な決定系

決定論的なのに予測が不可能……つまり, そういうことだよ

UEFI とかの話

今年の1月に今のメインマシン(Thinkpad X230)に Ubuntu 12.10 をインストールするときにちょっとハマった.

現象

ディスクをいれた外付けDVDドライブからUbuntu12.10を起動しようとしても起動しない.

解決

マシン起動時のメニュー(F12で入るやつ)で UEFI/Legacy Boot の値を「Both→Legacy Only」に変更することで無事 Ubuntu が起動するようになった.

その後

はっきりとした原因はわからなかったけど,とりあえず動くようになったのでそのまま使用していたところ,最近以下のの記事を発見した.

この記事によると,どうやらインストールのときの問題は Ubuntu とか UEFI とかの問題っていうよりもlenove のファームウェアの実装の問題っぽいことがわかった.

となると,もうこっちとしてはどうしようもないから,このまま Legacy mode で起動するしかないのかな.

好きなメーカーなだけに,ちょっと残念な話だった.

文字列とかの話

下記のコードの出力は何か?
という問題に答えられなかったorz

static void Main()
{
    string a = "abc";
    Test(a);
    Console.WriteLine(a);
}
static void Test(string b)
{
    b = b + "def";
}

下記参照の解説や等価な表現を見れば理解は出きるけど,
パっと答えられないあたりがダメすぎる.

こんなことでバグなんて出さないように気をつけましょう(自分)


あと,こんな問題も出された.

static void Main()
{
    string a = null;
    string b = null;
    string c = a + b;
    Console.WriteLine(c.Length);
}

これも間違えた(例外出ると思った)けど,
この出力は「0」が返ってくる.

どうやら文字列連結において null は空文字として処理されるらしい.

ちょっとした豆知識でした.


【参照】
http://jikkenjo.net/820.html

http://msdn.microsoft.com/ja-jp/library/vstudio/ms228504.aspx

ASPIRE 1410 をディスクからリカバリーした

明けましておめでとうございます.
2013年になりました.


昨年末に lenovoThinkPad X230 を購入して,
それまでメインで使っていた acer の ASPIRE 1410 を実家に置くことにしたので,リカバリーすることにした.

最初は HD にあるはずのリカバリー領域からできると思っていたけど,
なんかの拍子に消してしまっていたらしく(たぶん前に Ubuntu 入れたときorz),
仕方がないのであらかじめ作っていたリカバリーディスクからリカバリーすることにした.

が,途中でエラーが出て先に進めなかったので,今回解決した手順をメモしておく.


リカバリーツールも途中まではうまく行ってて,いざリカバリーが始まろうとしたとこで

Restore failed - Error code=1005(...)

とエラーが出たので,それを元に google 先生にお聞きすると,

Restore failed - error code=1005 | Tom's Hardware Forum

がヒットした.

そこで,Ubuntu のライブCDを使って,今まで使っていたパーティションをまっさらにして,
Windows 用に作り直して,再びリカバリーを開始すると今度は無事にリカバリー終了!

めでたし,めでた…とはいかなかったorz


今度はマシンを再起動すると

>grub rescue

と出て OS が起動できなくなってしまった.

おそらく無計画に Ubuntu を消してリカバリーを行ったため,
パーティションの番号がおかしくなってブートができなくなってしまったのだろう.

今度はこれを解決するべくいろいろ調べると

Ubuntu日本語フォーラム / パーティションを削除したら grub rescue から起動できなくなった

がヒットした.

調べた限りだとどこも同じような手順になっているが,うちの場合はどうにも insmod の段階でエラーになってしまった.
(そもそも Linux じゃないからか..)


そんなこんなで困ってたらお次は次のようなページを発見.

MBR修復ツール ms-sys: IT備忘録

「この ms-sys を使えば今渡こそ…」

と期待を込めて手順を一つ一つ丁寧に実効すると,今度は

Windows ブート マネージャー

の画面が出て Windows を開始できませんとの表示.
(進んでるのかコレ…)


この辺でだいぶ心が折れそうになってきてるけど,
なんとかここから Windows7 のスタートディスクを使ってブートを修正して,
各フォルダが壊れてるとか言われたので,もう一度リカバリーディスクを使ってリカバリーすると,
やっと
復元完了!


ふぅ,めでたし,めでたし.

CodeJP2012 に参加した

7月28 - 29日にかけて行われた 「CodeJP2012 in 定山渓」に行ってきた.


セッションあったり公開ペアプロあったりLTあったりと,とても全部は思いだせないけど,
思いだせる範囲で印象に残ったことを振り返ってみる.

Windows Developer Evangelist - Drew RobbinsさんによるKeynote

コードを学習する過程とかの話.
"Learn, Practice, Share"がキーワード.
新しい言語を学ぶときに限った話じゃないけど,何かを学ぶときはまず簡単なところから始めて徐々に複雑なことを覚えながら Learn していく.
次に Practice, Practice, Practice ...
そして Share する.


言ってることは至極真っ当なことだけど,いざそれを意識して実行することはなかなか難しい.

コードに限って言えば簡単な四則演算とか制御方法とか覚えてから(Learn),実際にそれらを使ってコードを書いていく(Practice).
自分はいつもこの段階で何を書いていいかわからなくなるけど,何かちょっとしたものを作ったり(それが難しいんだけど...),
Project Euler みたいなのを利用してとにかく練習する(Practice).
そしてそれらをブログやgit-hub, bitbucket などで共有する(Share).


ちょっとへこたれちゃったときは "Learn, Practice, Share" を思いだそう.

Code クイズ

想像していたよりも面白くて,もっと最初から積極的に参加してればよかったと少し後悔.
もっといろんな言語を勉強するのも面白そうだな.

前鼻さんのセッション

"reliable code(安心できるコード)"について.
コードの内側と外側の質の話も面白かったけど,一番印象に残ったのは
"NOT WRITE TEST, JUST WRITE SPEC(BEHAVIOR)"!

Dan Reaganさんのセッション

"Windowsストアでお金を稼ぐ方法"
Window ストアやメトロアプリの話をしてくれていたけど,疲れがきていたため正直途中少し眠かった(言い訳カコワルイ).

水の王国ラグーン

ボールに入ってジタバタするのは見ているほうが面白い.
(でもいくつになってもバカみたいにはしゃいで遊びたいよね)

クラウディアさん

まさかクラウディアさんが現実に降臨するとは…
クリアファイルももらえたし,何より Azure の本(サイン入り)をいただけてしまったので,これはちょっち真剣に勉強せねば…


いろんな人のLTを聞いたりお話しているうちに,どうも最近の自分の関心が関数型言語に寄っていってる気がする.
これを機にしっかり Learn するぜい.


他にも裸の付合いだったり寝落ちするまで Code を語ったりと楽しいことがたくさんあったけど,とりあえずはこんな感じー

Ubuntuを12.04にアップデートした

最近gvimを使ってみようと思って入れてみたはいいものの,
何かキーを押すたびに10秒くらい固まっちゃってて,まるで使える状態ではなかった.

しばらく放置してたのだが,ちょっと重い腰を上げて調べてみるとすぐにこんなの見つかった.

https://bugs.launchpad.net/ubuntu/+source/vim/+bug/856779

https://github.com/vim-jp/issues/issues/85

どうやらバグのようで,新しいのだと直ってるっぽい(?)

…ってことは,もしかしたらUbuntuのバージョンあげたらいけちゃう!?

という安易な考えでバージョンアップ決行.

本当は必要なデータとか一応退避させたほうがいいんだろうけど,
無くなって致命的なものもないし(たぶん),アップデートマネージャーのボタンをおもむろにポチッってみた.

一度始めてしまえばやることも特にないので,風呂でも入ってのんびりしてたらおよそ100分くらいで無事終了.

とりあえずgvim起動してみたらちょっと起動が遅くなってた…でも以前のようにキーを押しても固まらずに動いてくれた!

なんか別のエラーが出てるっぽいけど,とりあえず動くので前より幾分マシになったぜ.

あと左のランチャーがデフォルトで常時表示されるようになってたから普段は隠れるように設定を変更した.

とりあえずはこれで満足なので,また思いだした時にでもちょこちょこいじっていこう.

ファイル,ディレクトリ名を一括変換

ちょっとディレクトリの名前を変更したかったけど数が多かったし(10前後だけど),
こういうときこそコマンドでやればいいんだろうけど,やり方しらない.

いい機会だしちゃんと覚えようと思い調べたから覚書.


名前の変更自体は mv コマンドで出来るのは知ってたし,for とか使ってループ使えるのも知ってるから,
そのへんの組み合わせかなと思って調べたら,その名もずばり

rename
というコマンドがあった.(mv と for 使ってもできるけど,こっちのほうが簡単)

構文
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

使い方は
UbuntuTips/FileHandling/RenameCommand - Ubuntu Japanese Wiki
がわかりやすかった.

perlexpr は Perl の表現らしいけど,Perl 書いたことない.でも

s/oldname/newname/
って感じで書けばよさそう.
[ files ] は変換対象とするディレクトリやファイル名.
正規表現も使える(寧ろそれがメイン?)から,あとはなんとなく * とか ^ とか $ とか
使って書けばそれなりに使えそう.


例えば,カレントディレクトリに

[ 剣, 傘, おでん ]
っていうファイル(またはディレクトリ)があって,
rename 's/^/約束された勝利の/' *
ってやれば
[ 約束された勝利の剣, 約束された勝利の傘, 約束された勝利のおでん ]
ってなるはず.(もっとちゃんとした例は上記リンク参照)


「一括置換とか怖くていきなり実行できるわけねぇだろぁ〜!」
という僕みたいなチキンはオプションに[ -n ]を付ければ実行した場合の結果のみ表示してくれる(実行はされない).
これで確認して,問題なければ安心して実行すればいい.

サユリ

久々に衝動買いして,けっこう面白かった漫画

サユリ 1 (バーズコミックス)

サユリ 1 (バーズコミックス)

サユリ 2 (バーズコミックス)

サユリ 2 (バーズコミックス)

wikipediaあった(あらすじが半分くらいネタバレにつき注意)
http://ja.wikipedia.org/wiki/サユリ

全2巻で読みやすく(買ってから知ったけど),テンポもいい.

押切蓮介さんの漫画は以前「ミスミソウ」を読んでハマったことあるけど,どこにでもある日常から狂気的な非日常に堕ちる感じは似てるかも.

2冊一気に読んだけど,
「コエー!→中だるみ→盛り返してきた…→なんか切ねー」
といろいろ楽しめた.

霊とか出てきても楽しめる人にはお薦め.