まどマギのサントラのタイトルを訳す

ラテン語だった。訳してみたが信ぴょう性80%ぐらいだな。だからお前はマンモーニなんだよ!

  1. Sis puella magica! 魔法少女になってよ!
  2. Salve, terrae magicae 魔法の世界へようこそ
  3. Gradus prohibitus 禁じられた道程
  4. Credens justitiam 正義を信じるもの
  5. Clementia 優しさ
  6. Desiderium 悲しみ
  7. Conturbatio 混乱
  8. Postmeridie 午後
  9. Puella in somnio 夢の中の少女
  10. Umbra nigra 黒い影
  11. Terror adhaerens まとわりつく恐怖
  12. Sceana felix 幸福な情景
  13. Pugna com maga 魔女との戦い

1曲目は俗に「キュゥべえ営業のテーマ」と呼ばれていたがその通りのタイトルだった。
「マミさんのテーマ」→「正義を信じるもの」
「ほむほむのテーマ」→「夢の中の少女」
「さやかのテーマ」→「混乱」
なるほどねえ。
ところでラテン語にしたのはやっぱりハリポタの影響かねえ。

ネット上にもっといろいろ出てると思うんでより正しそうなものを見つけたらコメントよろしく。

Clojureの書き方がわからない

Twitter4JをいじっているのだがJava

        ConfigurationBuilder confbuilder = new ConfigurationBuilder();            
        confbuilder.setOAuthConsumerKey(CONSUMERKEY);
        confbuilder.setOAuthConsumerSecret(CONSMERSECRET);

        TwitterFactory twitterfactory = new TwitterFactory(confbuilder.build());

        twitter = twitterfactory.getOAuthAuthorizedInstance(
                    new AccessToken(ACCESSTOKEN,ACCESSSECRET));                

となっているところをClojureでどう書けばいいのか分からず数日停止。

(def conf-builder  (doto (. (ConfigurationBuilder. )
                           (setOAuthConsumerKey consumer-key)
                           (setOAuthConsumerSecret consumer-secret))))

(def cb (. conf-builder build))

(def ac (AccessToken. access-token access-secret))

(def twitter-factory (TwitterFactory. cb))

(def twitter (. twitter-factory (getOAuthAuthorizedInstance ac)))

こう書くと

java.lang.IllegalStateException: Cannot use this builder any longer, build() has already been called (ClojureTwitter.clj:0)

のように怒られてしまう。(def cb (. conf-builder build))でbuild()が実行され、それがまた(def twitter-factory (TwitterFactory. cb))で再評価されるので問題らしい。どうやって回避すればいいのか...
誰か教えてー!!

SSD+HDDでマシンを組み立てた

SSDをCドライブにHDDをDドライブにして新しいPCを組み立てた。
OSはWindows7
SSDを使うということでデータ類はHDDに持ってかなきゃならない。
世の中にはProgram FilesやProgramDataまでHDDに持って行く人もいるようだがそれはちょっとやり過ぎ感がある。だってプログラムの読み出しの速さがSSDの利点だろうが。と思うのだが(実際言われるほどSSDの寿命は短くないらしい)。それにWindowsUpdateがそういうパターンについて未検証らしいのでますます引いてしまう。

あちこち調べたけど結構苦労した。結局2回Windowsをインストールすることになっちゃったが(SSDが減る!(笑))、以下のようにして無事にデータ類だけHDDに移すことができた。あんまり参考にならないとは思うけど...

1. SSDとHDDが付いてる状態で普通にWindows 7をインストールする。
2. 無事に起動。おや?HDDがマウントされてねーと焦る。
3. コンパネのシステムとセキュリティ→管理ツール→ハードディスクパーティションの作成とフォーマットで今まだ初期化されていないHDDにパーティションを割り当ててフォーマットする。
4. ついでにこの状態だとSSDがC: 光学ドライブがD: HDDがE:?になってると思うのでドライブレターを変更してSSDをC: HDDをD: 光学ドライブをE:にする
5. で、もっかいWindows 7のインストールを行う
6. SSDをインストール先に指定すると「すでにWindowsが入ってるけどいいの?Windows.oldにいれちゃうけど」などと聞かれるので「それでOK」としてどんどん先に進む
7. 何度か再起動して「ユーザーアカウントの新規作成」のところでShift+F10を押す
8.コマンドプロンプトが開くので

robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ

でコピー。実はここでAdministratorのProfileデータなどがコピーされる。
9. コピーが完了したらもうC:の\Usersはいらないので削除、ついでに
CからDにハードリンク(ジャンクションっていうらしい)を貼る。

rmdir "C:\Users" /S /Q
mklink /J "C:\Users" "D:\Users"

10. regedit起動
11. HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileListを開く
12. 以下のキーの%SystemDrive%をD:に変更する

Default REG_EXPAND_SZ D:\Users\Default
ProfileDirectory REG_EXPAND_SZ D:\Users
Public REG_EXPAND_SZ D:\Users\Public

13. regeditを閉じ、コマンドプロンプトも閉じ、あとはアカウント登録に進んで通常通りの処理。
14. Windowsが無事起動したらC:Windows.oldを消しておく

以上で無事にHDD側にユーザーデータ(プロファイルも含む)を移る。
あとはシステムの詳細設定→パフォーマンス→詳細設定タブ→仮想メモリボタンからC:のページファイルをなしにしてD:にシステム管理サイズのページファイルを作る、でOK。

Windows 7自体が起動が速いのでこれについてはあまり差がでないがアプリの起動はかなり高速化される感じだ。インストールも速いね。
あとシャットダウンが速い。

scala.batをこう直してみた

あちこちで紹介されているように64bit Windows環境ではIzPack InstallerでScalaをインストールした場合、C:\Program Files (x86)\scala以下にブツを展開してくれるので、添付のscala.batを実行するといきなり

\scalaの使い方が間違っています

と「てめえなんぞに使ってほしくねえよ!」と言われたようなエラーで終了してしまう。
いろいろ試行錯誤して以下のように対策した。なお、僕の環境はWindows 7 64bitである。
まず、IzPack Installerを使うのを諦め、C:\Users\Shirokuma\tools\scala以下にzip版を拾ってきて置いた。
tools\scala\bin, tools\scala\lib...などのようになる。
32行目

set _JAVACMD=%JAVA_HOME%\bin\java.exe

set _JAVACMD="%JAVA_HOME%\bin\java.exe"

36行目

if "%_JAVACMD%"=="" set _JAVACMD=java

をremでコメントアウト

53行目

"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner %_ARGS%

%_JAVACMD% %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner %_ARGS%

に。

これで何とか動作した。Windowsのバッチファイルって探してみたけど意外に書き方に関する記事がなくて苦労した。

ClojureでProject Euler(4)やってみた

ClojureProject Eulerの問題4をやってみた。

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。

では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。

こんな感じかな

(defn palin? [x] 
    (= (reverse (str x))(reverse (reverse (str x))))) ;; 回文数の判定

(def numbers 
    (for [x (range 100 1000) y (range 100 1000)] (* x y ))) ;; 対象となる数字の遅延シーケンス

(apply max (filter palin? numbers)) ;; 数字の並びの中から回文数を探して最大値を得る

無理やりまとめると

(apply max (filter (fn [x] (= (reverse (str x))(reverse (reverse (str x))))) (for [ x (range 100 1000) y (range 100 1000) ] (* x y))))

で書けてしまう。

確かに超簡潔になるね...。

ただし、Clojure Boxのemacsみたいに()のネスティングを教えてくれるツールがないと死んじゃうねこれは(w

なお、答は906609であってると思うがどうでしょうか?
あと、これらが何と何の積か記録できるといいな...