MacでWindows風にスクリーンロックする方法

毎回Mac OSクリーンインストールする度に設定しているのだが、思い出すのに時間がかかるので自分用にメモしておこうと思う。

会社でも家でもMacを使っているが、特に会社だと席を立つときにスクリーンロックする必要がある。Windowsを使っていたときは windows + L で簡単にスクリーンロックできたけどMacを使いだしてからスクリーンロックの仕方に困った。

ずっと前に、会社の同期に教えてもらった方法。
Quicksilverを使ってhotkeyにスクリーンセーバー起動用のアプリケーションを設定するだけ。あとはスクリーンセーバーが起動したときにパスワードを要求するように設定しておけばよい。

このエントリを書いたときの環境

Quicksilverのインストール

ここからダウンロードしてきてインストールした。
イントールは特に難しく無かったと思う。
Quicksilver起動のhotkeyはEmacs使っているからctrl + space を option + space に変更して使っている。

hotkeyでスクリーンセーバーが起動するようにする

せっかくなのでスクリーンショット付きで。

1. option + spaceとかでQuicksilverを起動して設定用のメニューから Triggers を選択する。


2. hotkey追加用のダイアログを出す


3. hotkeyの設定(スクリーンセーバーアプリケーションの選択)

適当な文字(/systemなど)入力して←とか押すとディレクトリを移動できるのでいったんルートディレクトリ(/)まで移動したあと、 /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app を選択する。ActionはOpenを選択しておく。


4. hotkeyの設定(起動用のキーを設定)

saveを押したら、Triggerがまだ未設定になっていると思うので、ダブルクリックする。
設定用のメニューが出てきたらHot Key:のところに好きなキーを入れる。

自分は option + L にしている。

完了

設定画面を閉じて終わり。

その後

システム環境設定 → Expose & Spaces → 画面のコーナーへの機能割り当てでスクリーンセーバを開始するでじゅうぶんですよ。

って言われた。確かに。

ジョジョリオン1巻が届いた

1月5日にAmazonで注文したジョジョリオンの1巻がようやく届いた。
Amazonでも在庫無いようなのでやはり結構人気なのか。

ジョジョリオン 1 (ジャンプコミックス)

ジョジョリオン 1 (ジャンプコミックス)

以下、若干ネタバレ。


今までのジョジョと違ってスタンド能力のがどういうものか?みたいな説明はまだない。主人公もまだジョジョとよばれてない。

今後の展開が楽しみだ。

サーキュレータを買った

部屋が寒いせか、先週から風邪気味で、今日はついに会社を休んだ。
暖房効率を上げるために土曜日に購入したサーキュレータだが、なかなか気に入っている。


暖房の設定温度を同じにしていても、サーキュレータの有無で2〜3℃は違う気がする。
(風力は3段階に調整できるが自分は2で使っている。そこまで気になる音ではない)
夏にも使えるし、風邪を引く前に購入しておけばよかった。

体調管理には気をつけたい。

Mojolicious::Liteがいい

会社では日本語よりもperljavascriptをよく書くけど、会社で使っているフレームワークはいわゆるオレオレフレームワークなのでそれに慣れていると家でなにかつくりたいと思ったときにもたついて困る。
で、別にperlで無くていいんだけど、せっかくなんでperlでなんか使いやすそうなの無いかなとさがしていたら
Mojolicious::Liteがあった。去年のはなし。

https://github.com/yuki-kimoto/mojolicious-guides-japanese/wiki/Mojolicious%3A%3ALite

で、つくったのがこれ

http://www15016u.sakura.ne.jp/page/810/

mixiページをスクレイピングして結果をJSONにして返してくれる。
こんな感じで書いた。(実際のコードじゃない)

#!/usr/bin/perl
use strict;
use warnings;
use FindBin::libs;

use Mojolicious::Lite;
use Hoge::Fuga

app->types->type('html' => 'text/html; charset=utf-8');
app->types->type('json' => 'application/json; charset=utf-8');

get '/page/:id' => {'id' => qr/\d+/} => sub {
    my $self = shift;
    my $id = $self->stash->{'id'};
    my $page = Hoge::Fuga->lookup('page_id' => $id);
    my $json_obj = ($page) ? $page : {'error' => 'page not found'};
    return $self->render('json' => $json_obj);
};

app->start;

実際にはapplication/jsonとかでは返していないけどきにしない。

Xcode 4.0.2でテストの実行がうまくいかない問題に対する対応

Xcode 4.0.2でiPhoneアプリを開発しようと思ったのですがテストが上手く動かず、動くようになるまで若干苦労したので備忘録的に解決策を残しておこうと思います。

4.0.2はデフォルトだと(僕の環境の問題?)

  • デフォルトで入っている必ず失敗するはずのテストが動かない
  • テストを実行する環境を用意するためにいくつか設定が必要

という状態でした。

1. TEST_AFTER_BUILDの設定

デフォルトの設定だと上手くテストが実行されません。なんだろーと思ってログを確認したところ、

TEST_AFTER_BUILDという環境変数にNOが設定されているようだったのでとりあえず、全部Yesに変更しました。


2. RunPlatformUnitTests の編集

TEST_AFTER_BUILDをYESに設定してBuildしてみると警告が出るようになりました。

警告は、

/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/Tools/RunPlatformUnitTests

というファイルのL95で出ているようです。これについて調べていると次のエントリで解決策が紹介されていました。
http://longweekendmobile.com/2011/04/17/xcode4-running-application-tests-from-the-command-line-in-ios/

Change line 95 of /Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/RunPlatformUnitTests from-the-command-line-in-ios
Warning ${LINENO} "Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set)."
 
to these 2 lines:
 
export OTHER_TEST_FLAGS="-RegisterForSystemEvents"
RunTestsForApplication "${TEST_HOST}" "${TEST_BUNDLE_PATH}"

L95を次の2行に置き換えろとのことだったので置き換えました。

3.テストを動かしてみる

RunPlatformUnitTestsの編集後にBuild For Testingでテストを動かすと、無事テストが実行でき結果は失敗となりました。

STFail(@"Unit tests are not implemented yet in SampleTests");

デフォルトだと必ず失敗するようになっているので、これを動く形にとりあえず変更してみました。

STAssertTrue(1, @"test success");

これで、テストを実行した上で、Buildできるようになりました。

4.新しくクラスとテストを追加してみる

とりあえずデフォルトのテストは動いたので、新しくクラスとテストを追加してみました。

Buildしてみると、またエラーが出て SenTestingKit/SenTestingKit.h が無いと怒られたので、最初から入ってるテストは大丈夫なのに。。。と思いながらも、とりあえずFrameworksディレクトリに追加しました。追加はmenuから

File > Add Filt to "ProjectName" > /Developer/Library/Frameworks/SenTestingKit.framework

を指定します。追加されたFrameworkはFrameworksディレクトリの下に移動しておきました。


Build For Testingでテストが実行されることが確認できました。


(ちょっと分かりにくいですが、SampleTestが追加したテストでSampleTestsが最初から存在していたテストです)

なんとか動いた

これで開発もなんとか出来そうです。
4.0.2でテストが実行出来ない問題について日本語のブログで情報があまり出てきませんでした、もしかしたら自分の環境が良くないのかも。。。

Solrのpdateについて思ったこと。

最近自分が関わっている会社の案件で、検索機能のバックエンドにSolr使うことになりました。僕がSolrのSchemaを書いていたのですが、日付型のpdate(solr.DateField)について少し気になったことがあったので書いてみようと思います。

Solr使ってみた感想

そもそも僕は検索エンジンはSennaぐらいしか使ったことが無かったのですが、Solrは全文検索以外に、検索結果のフィルタやファセット検索が簡単に使えたりと個人的にはSennaよりも好印象です。

Solrの日付型の一つpdateについて

検索の要件に特定の日付を基準にして検索したりソートしたりということは結構あると思います。僕のお仕事でも日付型を使う要件があります。Solrの日付型はいくつかあると思うのですが、僕はとりあえずschemaを書きたいと思って目についたpdateを使ってみることにしました。pdateはデフォルトだとsolr.DateFieldクラスです。

FieldType that can represent any Date/Time with millisecond precision.

pdateはミリ秒まで扱えるらしいのですが、僕の要件では秒まで扱えればいいので特にそこは重要視したところではありませんでした。単純に使ってみただけです。pdateはUTCで表現できる感じだったので、http://ja.wikipedia.org/wiki/ISO_8601をもとにフォーマットを次のようにしてみました。

  • YYYY-MM-DDTHH:MM:SSZ+0900 (JSTなので+9時間)

結果は文書の追加時にフォーマットが間違っているということで怒られてしまいました。どうも、+0900や+09:00といった表現はSolrのsolr.DateFieldでは扱えないようです。

  • YYYY-MM-DDTHH:MM:SSZ

上記のフォーマットだと、例外も発生せずにちゃんと文書の追加も行えました。でもこれだとJSTは表現できない?と思ってもうちょっとちゃんとドキュメントを読んでみるとDateMathParserのフォーマットを使って日付の計算が出来るようでした、UTCの時刻を表現しようとすれば次のように表現できます。

  • YYYY-MM-DDTHH:MM:SSZ-9HOUR

この日付の表現で文書を追加すると検索結果では-9時間した値が返ってきます。上記のwikipediaにある様なJSTの表現(YYYY-MM-DDTHH:MM:SSZ+0900)は難しいようです。(やり方はある?)
このことからSolrのsolr.DateFieldは複数のタイムゾーンを表現するには向いていないように思えました。なのでSolrに入れる日付については本来ならJSTの時間から -9時間したものをSolrには入れておき、検索時には検索クエリの日付にDateMathParserの表現でをつけてJST-9HOURするとかすればいいのかもしれないですが、それだと検索結果の日付filedの値を+9時間したりする必要があったりと結構複雑になりそうです。

  • インデックス
    • JST-9HOUR => UTCで保存
  • 検索クエリ
    • JST-9HOUR => UTCで検索
  • 検索結果
    • UTC+9HOUR => JSTで表示

しかし、本当に上記のように複雑なことをする必要があるのかなと思って自問自答してみました。実際案件で使ってる日付表現はJSTです。JSTとしてあつかった方が変換の必要も無く簡単です。
他のタイムゾーンが増えてもその差異はアプリケーション側で統一できますし、その際に決まった表現がUTCだった場合はそのルールでインデックスを作り直せばいいだけなので問題無いかなと思い結局JSTの日時をそのまま入れて検索することにしました。たぶん、検索エンジンとしても異なるタイムゾーンを同時に扱うなんて面倒なことはおそらくしたくないんだろうなぁと思いました。

ちょっと書きなぐる感じになってしまいましたが、pdateを使うときに+0900の様な表現が使えなくて焦ったけど、まあいいかという話でした。

solr.TrieDateFieldも余裕があれば試してみようかなと思います。

PS3(CECH2000A)のHDD交換

※このエントリを読んでPS3のHDD交換を行い不具合が発生しても当方では責任はとれません。増設作業をされる方は自己責任でおねがいします。


去年の冬にFF13で遊ぶ為に購入したPS3ですが、
FF13をクリアしてからはDVDやBlu-rayを再生するだけの役割に甘んじておりました。

我が家には特に録画機器も無く、番組を見逃しても仕方ないと諦めていたのですが
今期のアニメとドラマは見逃したくないものが多いのでtorneを購入しPS3をHDDレコーダとして使うことにしました。

torneはBS/CSは録画出来ないのですが1万円を切る価格を考えると非常に満足しています。

自分の買ったPS3はHDDがデフォルトでは120Gで内蔵HDDへの録画は容量的に心もとなかった為、外付けHDDに録画することを考えていました。

自分としては外部電源の供給が必要な3.5インチHDDは利用したくなくて(コードが邪魔)、また2.5インチの外付けHDDもコストパフォーマンスが悪く悩んでいたのでいっそのこと内蔵HDDを増設して、そこに録画することにしました。

増設に使ったHDD

まず、HDDですが日立のHTS725050A9A364(500G)を選択しました。

個人的に日立のHDDは信頼出来て、かつ値段もそれほど高くなかった為(5000円代でした)このHDDを購入しました。

補足ですが自分が購入時に気をつけた点としては、

  • インターフェースがシリアルATAであること(IDEはNG)
  • HDDのサイズが2.5インチであること

ぐらいです。あと容量は最初から500Gを狙ってましたし、回転数は結果として7200rpmになってしまいましたが、5400rpmでもよかったです。(デフォルトだと5400rpm)

交換の手順

事前に準備しておきたいもの

1. HDDのフォーマット

  • フォーマットはFAT32
  • WindowsXPだとFAT32でのフォーマットに制限があるため、別途ソフトウェアを使って行います。
  • 上記で説明したようなHDDを購入した場合そのままではUSBなどでPCに接続出来ないため、ケースを用意する必要があります。
    • 自分が購入したケース。購入した店舗で割引があった為500円くらいで購入

[asin:B002679UBU:detail]
ケースはフォーマット時以外にもHDD換装後にPS3に最初から入っているHDDを入れておけます。

  • PC内蔵のHDDデータをフォーマットしないように注意しながらUSBで接続したHDDをフォーマット
    • フォーマットはすぐ(1分以内?)に終わりました。

2. PS3データのバックアップ

  • バックアップは外付けのHDDなどにとることになります。
    • バックアップをとっておかないとゲームのデータなどが消えてしまいます
    • データとかどうでもいいという人は飛ばしてください。
    • 外付けHDDとか持っていないから増設しようとしているという人はフラッシュメモリーなどに一つずつコピーしていってください。
      • この作業はしていないので説明書などで確認してください。
  • 設定 >> 本体設定 >> バックアップユーテリィリティ >> バックアップ の順に選択し、バックアップをとってください。
    • バックアップは1時間ほどかかりました。
  • トロフィーの保存
    • せっかく集めたトロフィーを消したく無いという方は
      • ゲーム >> トロフィーコレクション(△ボタンでメニューを表示) >> サーバーと同期 でバックアップをとってください。

3. HDDを交換する。

  • 取り扱い説明書の"ハードディスクを交換する"の項目を参考にしてください。
    • HDDはデリケートな機器ですので落としたりすると危険です。
    • 思ったより簡単にできました。PS3のネジは小さいので注意。ネジ山も潰さないように。

4. データを復元する

  • PS3システムアップデート用のファイルが入ったストレージをPS3に接続した状態で電源をつけます。
    • システムアップデート用のファイルは配置するフォルダ構成が決まっているため注意してください。(PS3/UPDATE/PS3UPDAT.PUP)
    • システムアップデート用のファイルが無いとフォーマット出来ない場合があるので注意してください。
  • HDDをPS3の案内に従ってフォーマットしてください。
  • フォーマットが完了し、PS3のメニューが開きます。
  • 設定 >> 本体設定 >> バックアップユーテリィリティ >> リストア(復元) の順番で選択し、データを復元します。
    • データの復元には1時間ほどかかりました。
  • 復元が完了したらトロフィーデータを同期し、完了。

感想

説明書に換装の方法が書いてあるだけあって非常に簡単に終わりました。
バックアップ、リストアには結構時間がかかりましたが。。。

個人的に驚いたのがバックアップ対象にtorneで保存した動画のデータが含まれていたことです。
録画データもちゃんとバックアップされるんですね。

PS3のHDD交換ブログはほかにもいっぱいあるので(なぜ今更。。。)興味がある方はそちらも参考にしてみてください。