Author Archives: taxpon

CentOS5にImageMagick,Rmagickをインストール

Rmagickを使いたくて、ImageMagickと併せてインストールした時のメモ。下記参照

Memorandum [linux] CentOSにImageMagickをソースからインストール → RMagickをインストール

  1. ImageMagickのインストール yumでインストールできるImageMagickはバージョンが古く、最新のRmagickが対応していない。そこで、ImageMagickをソースからインストールする。

  1. Rmagickのインストール 普通にgemでインストール。

CentOS5でRails環境構築

何回もやってるのでまとめる。
1. gcc, g++をインストール yumを使ってインストールする。

  1. emacsをインストール なんにせよこれがないと作業ができない。vi使わない派。ソーシャルネットワークではザッカーバーグも使ってましたw

  1. ssh_configの編集 sshのルートログインを禁止。適宜ポートを変更しても良い。

下記を追加。

  1. Ruby, RubyGemsのインストール 最新ソースをwgetしてソースからインストール。

次にgemをインストール。同様にソースからインストール。

gemをアップデートする時は、下記を実行。gem自身でアップデート。

  1. Railsのインストール

  1. DBのインストール まずはsqlite3。yumでインストールできるsqlite3はバージョンが古いのでソースをwgetしてインストール。

次にmysql。こちらはyumでOK。インストール後起動し、rootアカウントのパスワードを設定。

railsのDBアダプタをgemでインストール。

  1. passengerのインストール Apacheでrailsアプリケーションを動作させるためにpassengerをインストール。

以上で終了。 所要時間30〜60分。

Flex/Action ScriptでUDPプログラミング

最近作ってるアプリ関連でUDP通信が必要になった。

どうせつくるならマルチプラットフォーム対応がよかろう、と思ってAIRで実装。しようとおもったら、UDPはAIR2.0で実装されたばっからしい。なんとも運がよいw 参考にしたのはコチラ MineAPの(開発)日記 DatagramSocketで遊ぶ

Clientプログラムは以下の感じ。

[java]
package {
import flash.display.Sprite;
import flash.net.DatagramSocket;
import flash.utils.ByteArray;
public class Main extends Sprite {
private var socket:DatagramSocket = new DatagramSocket();
private const port:int = 8192;
private const address:String = “127.0.0.1”;
public function Main():void {
//Data to Send
var bytes:ByteArray = new ByteArray();
bytes.writeMultiByte(“Hello”, “UTF-8”);
socket.send(bytes, 0, 0, address, port);
try { socket.close(); }
catch (err:Error) { trace(err.getStackTrace()); }
}
}

} [/java]

これでアレがコウなりそうです。

iPhoneでデフォルトタイムゾーンの取得

iPhoneでデフォルトのタイムゾーンを取得する方法。 NSTimeZoneというクラスを使う。 コードは以下の通り。

[c]
NSLog(@”TIME ZONE NAME: %@”,[[NSTimeZone systemTimeZone] name]);
NSLog(@”TIME ZONE ABBREVIATION: %@”,[[NSTimeZone systemTimeZone] abbreviation]);

[/c]

例えば、タイムゾーンが東京に設定してある場合、以下のように出力される。

2010-08-15 23:19:54.224 TimeZoneTest[4493:307] TIME ZONE NAME: Asia/Tokyo
2010-08-15 23:19:54.569 TimeZoneTest[4493:307] TIME ZONE ABBREVIATION: GMT+09:00

 
試しに設定から時刻の設定を変更してみると、プログラムの出力も以下のように変わる。

2010-08-15 21:20:32.703 TimeZoneTest[4498:307] TIME ZONE NAME: Asia/Phnom_Penh
2010-08-15 21:20:32.984 TimeZoneTest[4498:307] TIME ZONE ABBREVIATION: GMT+07:00

Javaにおける参照型引数の勘違い

最近Javaを勉強しているのでJavaネタ。 基本的なところを勘違いしていたので、メモも含めて。 次のようなコードを実行する。 [java] class Container { public String str; /** 文字列を出力する */ public void printStr(){ System.out.println(“printStr : “+str); } } class Editor{ public void edit1(Container cont){ cont.str = “Edited1”; } public void edit2(Container cont){ cont = new Container(); cont.str = “Edited2”; } public void edit3(Container cont){ cont = null; } } public class Main { public static void main(String[] args) { // Containerインスタンスの生成・初期化 Container container = new Container(); container.str = “Default”; container.printStr(); // Editorインスタンスの生成 Editor editor = new Editor(); // Edit1 editor.edit1(container); container.printStr(); // Edit2 editor.edit2(container); container.printStr(); // Edit3 editor.edit3(container); container.printStr(); } } [/java] この時出力されるのは

printStr : Default printStr : Edited1 printStr : Edited1 printStr : Edited1

である。 これが意外だった。 僕が予期していたのは

printStr : Default printStr : Edited1 printStr : Edited2 printStr : null

だった。 つまり、参照型変数を関数の引数として渡すとき

関数内のローカル変数であるcontはその参照型のメモリ領域を 一時的に指しているだけである、ということだ。 そのため、Edit2のようにcontに新たなインスタンスを代入してしまえば(指させてしまえば) 呼び出し元から引数として渡した変数とは全く無関係になってしまう。 Edit3のようにnullを代入した時も同様である。 基本的なことだけど、ちょっとつまずいたので記録。

伝えるということ

人が人に考えや心情、思いを伝えるという行為は、人間が社会を構成していく上では不可欠な行為である。 ビジネスの世界では、論理的に議論を展開していくことで 人に考えや意志を伝えなければならない。 そうしなければ人は動かない。 技術や芸術の世界でもきっとそうで、 全く人の心を動かさない科学者は、評価されない。 全く人の心を動かさない芸術家は、一人よがりで終わる。 ということを最近いろいろな局面で感じるようになってきた。 勿論いままでもなんとなく感じてた部分はあるけど、 今までの自分の行動や新しく出会う人、学習する事柄を通じて切に感じるようになったんだ。

人は人、オレはオレ

ただ、今までの僕はすべての事柄をそのように展開する、つまり人に分かるように論理的に説明する という事に若干の違和感と抵抗を感じていた。 自分が好きなものや嫌いなものというのは、感情的な感覚であって理性的ではない。 つまり「好きなものは有無も言わさず好き」だし「嫌いなものは生理的に嫌い」といった感覚である。 こういった感覚というのは、論理に導かれるというよりかは いままで自分が送ってきた人生や経験とその人の生まれ持った性格から 導かれるものだと思っていて、それを言語化しても伝えることには厳しい限界があると。 だから、世の中には理解しあえる人もいるけれども、全く理解できない人も多くいる。 これはしょうがない。これが人間だ。 だから、そういった事柄について半分諦めているような感覚があった。 たとえば、アニメ。僕は世間でいわれているところのアニメーション、アニメ作品を鑑賞するのが好きだ。 しかし、このアニメというものは、世間一般のイメージとしてはあまり良くない面があるのも事実である。 「オタクっぽい」、「気持ち悪い」、「陰気」といった考えを持つ人は多い。 実を言うと、僕も昔はそう思っていたし(そのため研究室に入ったときは絶望感につつまれた) そのように考えている人たちがアニメを好きになる確率は稀であると感じていた僕は、 伝えることを半ば放棄していた。

僕を変えたもの

ただ最近はその考えも変わってきた。 理由は何点かある。
1. ビジネスについて本気で考え始めたこと 恥ずかしながら、学生の頃はビジネスとはどういうものかということについて漠然としか捉えられていなかった。 しかし、入社してビジネスについて実践する立場として考えてみたときに、その根底には人に伝えるということがあると感じた。つまり、人に伝えることで、新しい価値がうまれ社会を変えていくことができる、ということだ。
2. アニメ やはり僕はアニメから大きく影響を受けていると思う。自分が感動するアニメを見たときにはどうしてもその感動を人と共有したくなる。その時に、その素晴らしさをわかり易い言葉でアニメにマイナーなイメージを持っているような人にもアニメのもつ良さを共有できたら、それは嬉しいことだ。その思いは日増しに強まる。とくに一般的に負のイメージが強い、アニメでこそというのもあるけれど。 と、思いついた感じにこのエントリを書いてしまったので、まとまりきっていないところがあるかもしれない。 とりあえず、これからは自分が好きなものや感覚的に感じていることを、 人に分かりやすく伝えることを意識していこうと思ったわけです。 それは間違いなく自分のためにもなる。 飲み会でアニメについて語りだしても生暖かい視線、よろしくお願いします。 このサイトでは好きなアニメを徹底分析する場所を作ろうと思っていますので乞うご期待。 ちなみにゼーガペインを見た後、このエントリを書こうと思いました。 感動したんだなぁ。

以上

Box2DにおけるJointを用いた分裂表現

物理エンジンを使ってモノが砕けていく様子を作りたかったのでその練習。 [embedSWF]http://www.taxpon.com/wp-content/uploads/SWF/BrokenBox.swf,500,500[/embedSWF] 5×5のマトリクス状の正方形にテクスチャを分割して配置。 各オブジェクト同士は3種類のJointによって結合される。 このデモプログラムでは、c、v、bキーを押すことでその3種類のJointを分解できる。 またjを押すことで、各オブジェクトに上向きの衝撃をかけることができる。

AS3でGinnyエフェクトの練習

元ネタはfladdict氏。 clockmaker氏がwonderflで実装されていたのを参考に。 [embedSWF]http://www.taxpon.com/wp-content/uploads/SWF/Ginny.swf,400,400[/embedSWF] これで◯系キャラクターを〇〇〇〇させてやる‥うえっへっへっへ それはそうと研修中ではっきりいって時間がある。 この期を逃したら危険だ。いろいろしたい。 追記 GinnyEffectじゃないけど、drawTrianglesの練習。 clickするべし。 [embedSWF]http://taxpon.com/wp-content/uploads/SWF/Ginny2.swf,400,400[/embedSWF] 追記 purupuruエンジンと組み合わせるとこんな感じ [embedSWF]http://taxpon.com/wp-content/uploads/SWF/PruEffect.swf,400,400[/embedSWF]

Tacloc Release

初めてのiPhoneアプリTaclocをリリース。無料。
時刻の遷移がちょっと変わっていて、文字がバクバクします。
iTunes Storeへのリンクはこちら

official_icon

Screenshot 2010.03.14 23.27.34
Screenshot 2010.03.14 23.28.50
Screenshot 2010.03.14 23.29.24
Screenshot 2010.03.14 23.29.52

 
スクリーンショットです。
3つまで登録可能なアラームも付いています。
アラームは曜日指定、スムーズON/OFFの設定が可能。
スムーズ設定の場合、5分毎にアラームが鳴ります。