特に理由はなかったのですが、便利という噂を聞いてbashからzshに乗り換えました。

iTerm2 + zsh

zshを試す

Macでは標準でzshが入っているので、ターミナルで$ zshとすれば試せます。

飽きたら、$ exitで終了です。

Read more


最近、BetterTouchToolというソフトを入れたのですが、便利でした。

Macだとウィンドウをスナップする機能がないので困っていたのですが、これで解決しました。

有料版のBTT Remoteでは、iPadやiPhoneを、Macのキーボード・トラックパッドにできるようです。

Read more


Eclipseのコード補完のショートカットはC-spaceなのですが、 Macで使うとSpotlightと干渉して使えません。

だったら、ショートカットのキーバインドを変更しましょう!

Eclipseの設定画面

設定方法はメニューバーからEclipse/環境設定/General/Keysです。

ほとんどのキーバインドをここから設定できるので、 content assistの項目を見つけて設定します。

私の場合はコード補完をC-spaceではなくTabに割り当てることにしました。

理由は、Visual Studioと同じショートカットの方が捗りそうだからです。

Read more


近状報告です。

早いもので大学生活も3年目に突入してしまいました。とりあえず最近についてダラダラ書きます。

TwinCalを2学期制に対応。

TwinCalを2学期制に対応しました。

新Twinsにも履修情報をCSV出力する機能があるのですが、いざCSV出力してみると、 科目番号しか出力されない仕様だったので、対応を諦めていました。

しかし、kDBの履修データをを使うことで新Twinsへの対応することができました。

  1. kDBには履修データがある。
  2. kDBは科目一覧のCSV出力機能がある。

まず、kDBの2013年度の履修データをCSV出力して、SQlite3のデーブル化しました。

全ての履修データをCSV出力したところ、5.3MBくらいある巨大なファイルが吐き出されました。

しかも、変なCSVだったのでRuby標準ライブラリのCSVではパースできませんでした。

最終的には、ダウンロードしたCSVをOpenOfficeで開いて保存することで、なんとかなりました。

また、「実施学期」と「曜時限」のフォーマットがフリーダムなので、これをパースするのに苦労しました。

COJT

情報科学類では主専攻実験の替わりにCOJTという授業をとれるのですが、 COJTのソフトウェアコースを受講することになりました。

COJTをとった理由は以下のようなものです。

  • バイト先の先輩が勧めていた。
  • 1年間、専用の机をゲットできる。
  • オープニングセレモニーなどで、豪華な食事を少ないお金や無料で食べることができる!
  • 企業が協賛しているので、個人ではできないようなお金のかかる実験もできる。
  • 面白そう。

成果発表もあったりと普通の主専攻実験よりハードな気もしますが、やるからには頑張りたいと思います。

早期卒業

情報科学類では、以下の条件を満たすと早期卒業できる可能性があるそうなのですが、 その条件を満たしていたようです。

  • 卒業要件科目を85単位以上履修
  • 成績が上位10%以内

しかし、卒業研究とCOJTを並行して行いながら単位をとるのは難しそうだったので、早期卒業は諦めました。完。

メタルギアライジング

実におもしろい。

Read more


Twinsなど学内向けのサイトにアクセスするためにLocalForwardを使っている人が多いようですが、 DynamicForwardの方が汎用性が高くて便利なのに、使っている人が少ないような印象を受けるので紹介します。

この記事の説明はあまり分かりやすくないので、単純に学外からTwinsを使いたいだけであれば、 次の記事を参考にすれば良いと思います。

MacでTWINSを学外から使う

接続の方法

1.sshの設定をする

まず、~/.ssh/configを次のようにします。

# .ssh/config
Host coins coins-p
HostName www.coins.tsukuba.ac.jp
User sxxxxxxx

Host *-p
DynamicForward 1080

上のように設定すると、

  • 普通にsshしたいだけならば、ssh coins
  • DynamicForwardしたいなら、ssh coins-p

となって捗ります。

このように、*(アスタリスク)を使って設定を書くと、 重複してサーバ名などの設定を書かないで済むというちょっとしたテクニックを使っています。

2.SOKCSプロキシを使う

この設定だと、ssh coins-pをしたときに、ローカルホストの1080番ポートにSOKCSプロキシサーバを割り当てると、 学内向けのサイトも普通に見れるようになります。

SOKCSプロキシの設定は Mac OS X (山ライオン)ならば、ネットワーク環境設定から下のスクリーンショットを参考にして行なってください。

他の環境の人はググって調べてください。

SOKCSプロキシの設定

切断するとき

切断するときは、次の2つの両方の作業をしてください。

  • sshの接続を切る。
  • プロキシの設定を無効にする。

Read more


久々の更新です。

早いもので大学2年の授業が終わって春休みになってしまいました。

3学期には、コンピュータグラフィックス基礎という授業を履修したのですが、 今学期で一番楽しい授業だったなーと思うので振り返ってみます。

基本的にはOpenGLを使って色々しました。

特に力を入れた課題などを紹介します。

ソースコードなどはすべてgithubにあるので、 気になる人はぜひ見てね!

課題3 ASTEROIDS

OpenGLを使ってアニメーションを作るという課題があったので、 全方位シューティングゲームを作ってみました。

技術的な点だと、自機、隕石、弾の3つは、慣性移動、衝突判定、描画などは共通の処理でできるので、 この3つをobjectという構造体1つで管理して、同じような処理を何度も書かないようにしました。

title画面

プレイ中

ゲームオーバー

課題4 立体の展開図

OpenGLの回転と平行移動を駆使して、立体の展開図のアニメーションを作りました。

まずは立方体の展開図。

立方体-1 立方体-2 立方体-3

正12面体となると、座標の計算が大変でしたが、気合で実装しました。

正12面体-1 正12面体-2 正12面体-3 正12面体-4

課題5 ベジエ曲線

マウスで制御点を入力してベジエ曲線を描く課題です。

定義式をプログラムにするだけの簡単なお仕事でした。

制御点が3次のベジエ曲線

オプションとして3次元バージョンにも挑戦しました。

制御点が3次のベジエ曲線の3次元

課題7 OBJファイルで立体を表現

OBJファイルという、頂点と面の2つの情報で立体を表す立体図形のフォーマットがあるのですが、 このOBJファイルを出力するプログラムを作りました。

ちなみに、OBJファイルを描画するプログラムは先生の方で用意してくれました。

球体は普通にやると頂点部分で例外処理があって面倒ですが、頂点部分に複数の頂点がくるようにして楽しました。

球体

Wikipediaにトーラスの式があるので、それを参考にして作りました。

球の課題の式の定義部分を変更するだけで、できたので楽でした。

トーラス

3角関数で半径を変化させて、適当な回転体を作りました。

回転体

また、マウスで入力した線から任意の回転体を作ったりしました。

UFO コマ グラス hoge

また、マウスで線を描くときに下から上に線を引くと、面が裏返るので、それを利用してプリンみたいなのも作りました。

プリン

課題9 レイトレーシング

レイトレーシングをやりました。

普通にやるとつまらないので、いろいろ工夫しました。

  • レイを再帰的に計算して、ピカピカに
  • 3x3でアンチエイリアス
  • 色は乱数でRGBを求めると鮮やかにならないので、HSVで計算
  • Zbuffer的な概念を取り入れて、球が床に食い込んでも重なっても大丈夫なように

レイトレーシング1 レイトレーシング2 レイトレーシング3 レイトレーシング4 レイトレーシング5 レイトレーシング6

課題10 布のシュミレーション

Mass-Spring モデルによる簡易的な布の物理シミュレーションをしました。

布のシュミレーション

球体との衝突判定を追加してみたのが次です。

布のシュミレーション(球との衝突)

まとめ

こうして振り返ると、かなり色々な課題に挑戦しましたが、どれも楽しかったです。

CGを自分の研究としてもいいなーとか思ってしまいました。

Read more


数値シュミレーションという授業で波動関数をシュミレーションする課題がありました。 面白かったので忘れないように、MathJax.rbというプラグインのテストを兼ねてメモすることにしました。 MathJax.rbの導入 MathJax.rbの導入には、30分のチュートリアルでJekyllを理解するが非常に参考になりました。 MathJax.rbをダウンロードして、/plugins/にコピーする。 octopressの場合、_layouts/layout.htmlではなくて、source/_includes/custom/head.htmlに次の行を追加する。 # source/_includes/custom/head.html <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> MathJax.rbの使い方 ブロックの場合、mathとendmathタグで囲む {% math %} Simple\ FDTD\ Algorithm\ and\ Devils\ in\ the\ Details \ \begin{eqnarray} \psi(x,t + \Delta t) &=& -\psi(x, t - \Delta t) + [2 + \frac{v^2\Delta t^2}{\Delta x ^2} d_x^2] \psi(x,t) \ $$ -\psi(x, t - \Delta t) + 2\psi(x,t) + \frac{v^2\Delta t^2}{\Delta x ^2} d_x^2 \psi(x,t) \ $$ -\psi(x, t - \Delta t) + 2\psi(x,t) + \frac{v^2\Delta t^2}{\Delta x ^2} [ \psi(x - \Delta x, t) + \psi(x + \Delta x, t) - 2 \psi(x, t) ] \ \end{eqnarray} {% endmath %} インラインの場合、m とemタグで囲む(下のコードだと、emの部分が消えていますが囲んでください)

Read more


はじめに Rubyの初心者にありがちなことだと思うが、 変数を代入した時や関数を呼び出した時に、値渡しであるか参照渡しであるか混乱すると思う。 私もよくわからずにかつては混乱した。 次のページを見つけてようやく頭の整理がついた。 Rubyのメソッドの引数は値渡しで、Rubyの変数は全てオブジェクトを指し示すポインタに似た何かだと考えればよいのだ。 引数の参照渡し(変数渡し)なのか単なるオブジェクトへの参照なのか、それが問題 なるほどわかりやすい。 Rubyのメソッドの引数は値渡し Rubyの変数は全てオブジェクトを指し示すポインタに似た何か Rubyの変数はラベル Cにおける変数は箱だと例えられるが、Rubyにおける変数はラベルと例えられることがある。 Cの変数では、メモリ上の箱に値がそのまま入っている。代入をすれば、箱が複製される。 一方、Rubyではメモリ上の箱のどこかに値が入っており、変数はラベル(箱への参照)を持っているだけにすぎない。 変数を代入すると、メモリ上のデータはそのままに、ラベルだけがコピーされるのである。 破壊的操作で意図しない変更が起きる例 次の例のようにbにaを代入した後、aに破壊的変更をすると、bの値まで変わってしまう。 なぜならば、aとbは同じラベルを持っているので、同じ箱を共有した状態にあるからだ。

破壊的操作でbに意図しない変更が起こる例 [1] pry(main)> a = "abc" => "abc" [2] pry(main)> b = a => "abc" [3] pry(main)> a.reverse! => "cba" [4] pry(main)> b => "cba" 回避方法1 bの値を変えたくなければ、破壊的操作をしなければ良い。

a = a.reverseとすれば、インスタンス"cba"が作られ、aにそのラベルが入る。

破壊的操作をしなければbは変わらない [1] pry(main)> a = "abc" => "abc" [2] pry(main)> b = a => "abc" [3] pry(main)> a = a.

Read more


タイトルの通りなのですが、h1レベルの見出しにアンカーリンクをつけるようにOctopressを改造しました。

``の19行目を次のように修正して、 h1レベルの見出しに正規表現でアンカーリンクをつけるようにしました。

# plugins/octopress_filters.rb
@@ -16,7 +16,7 @@ module OctopressFilters
   end
   def post_filter(input)
     input = unwrap(input)
-    RubyPants.new(input).to_html
+    RubyPants.new(input).to_html.gsub(/<h1>([^<].*[^>])<\/h1>/, '<h1><a name="\1" href="#\1">\1</a></h1>')
   end
 end

修正するべき場所がここで本当に良いのか微妙ですが、とりあえず思った通りに動いているので良しとします。

以下、見出しのテスト

見出し1

見出し2

Read more


Eclipseのformatterの設定は、Java > Code Style > Formatterから。

Eclipseのformatterの設定

Read more