あると便利だなぁ というソフトウェアやサービスの実現を目指します。

テーマ更新中!

Twitterを木目背景にしたついでに、サイトのほうも木目調ベースで新規構築しました。
まだ改修中ですので、ちょこちょこと修正していきます。

ChangeLog
  • 3/09 背景画像が読み込まれる前に、背景が白くなってしまう問題を修正。背景カラーを設定
  • 3/10 自己宣伝用にTweetボタン設置

iGaruTalk2(仮称) その1

iGaruTalk(仮称)を一部の身内に公開してから、9ヶ月くらいが立ちました。
ベータ版故に不安定な部分があり、まだ一般公開はしていません。

iGaruTalkは、インストール不要のオンラインコミニュケーションツールとして2011年頃から開発を始め、
2012年頭に、ベータプレビューテストを行っていました。 とはいっても、身内や一部知人のみにひっそりと公開していた状態でした。 

 機能は、

  •    ●テキストチャット
  •    ●ボイスチャット (音声通話)
  •    ●ビデオチャット (映像通話)
  •    ●ファイル転送
  •    ● 動画(Youtube)の視聴
  •    ●アバター(プロフィール画像)
  •    ●ショートメッセージ

 と、一般的なインスタントメッセンジャーの機能がありました。

しかし、現在はFlashにたよりきった実装をしているため、Flash衰退思考の強まったこのご時勢にマッチしていませんでした。
ただ、WebRTCはまだまだ仕様が定まっておらず、Flashを完全に利用しないでの実装は困難です。
そこでiGaruTalk2では、次のような方式として設計しております。

  •    ●通信が軽量なテキストチャット部分には、node.js+socket.ioを利用する
  •    ● 比較的通信量の多いボイスチャットや、ビデオチャット、ファイル転送に関してはとりあえずRTMFPで作成するが、今後WebRTCへ置換していく

  これで、WebRTCが普及したらすぐにFlashから乗り換えが可能になります。

*アバター(プロフィール画像)等の軽量な画像は、データURLスキームとしてテキストとして扱うかもしれません。



ちなみに、現時点でのiGaruTalk2は、基本的かつ骨組み的なUIが大体出来上がり、テキスト通信部分が可能となっています。
現在は最も基本的なテキスト通信部分を、さまざまなプラットフォーム(x64,x86,Chrome,Firefox,IE+ChoromeFrame)でテストを行っている段階です。


今日は、Join時のニックネーム・グループ名設定画面を作成しました。

また開発が進んだら、各機能の紹介もおこないたいと思っております。



おまけ: 動画URLを張られると、その場で再生が可能な機能も

メインPCメンテナンス

暑い日も残り少なくなってきた・・と願いたい今日この頃ですが、みなさんは夏バテ等はしてないでしょうか。

さて最近、私のメインPCの動作が、だんだんもっさりしてきたことに微妙にストレスがたまり気味です。

 

1年半前に買ったPCなので、買い替えるには早すぎると思ったので、今回は、PC増強+SSDの導入をしてみたいと思いました。

 

今回のプランは・・・
 ● HDDの空き容量が残り100GBになったので、 
   ⇒HDD2TBを増設
 ● 仮想マシンなどを使っているためメモリが不足してきたので、
   ⇒メモリを4倍に増設 (現状でも8GBはあるのですが
 ● もっさり動作を解消するためOSをクリーンするついでに、
   ⇒SSDにOSをインストール

 大体 3万円くらいの出費ですね。

金額的にはまぁ安いのですが、 OSの再セットアップあんど、自分的必須アプリのインストール作業が すごく面倒くさいです。。

今週末くらいにはパーツ届く予定ですので、週末はこの作業に追われそうです。

SSDの利用は今回初めてですが、どの程度か期待しております。

[JAVAアセンブリ][Modding]IndustrialCraft2のマターレシピの無効化

Forgeを用いて作られたMODをデコンパイルして改編後、再度リコンパイルしようとすると、うまくコンパイルができなかったりしますよね。(やり方が悪いだけかもしれませんが
そこで、今回は、逆アセンブルを用いた方法で、IC2のマターのレシピを無効化してみたいと思います。

用意するものは、JDKと、JD-GUIです。
また、テキストエディタや、バイナリエディダもあるとよいでしょう。
JDKは、MOD開発者なら当然持っていることでしょう。
JD-GUIも有名なJAVAデコンパイラですね。

今回は、JAVA等の環境パスは通ってる前提で進めます。

では早速始めたいと思います。

最初に、対象クラスを、取り出しましょう。

今回は、mod_IC2.class内の、レシピ情報を書き換えたいので、mod_IC2.classを取り出します。

そして、その取り出したmod_IC2.classをJD-GUIを用いて、改変箇所を確認します。

今回は、registerCraftingRecipes()内の、マターを用いたレシピ追加情報消去します。
なので、matterで検索を行います。
846行目あたりから、マターのレシピが大量に追加されていることが確認できます。
877行目のiridiumOreのレシピだけは残して、クァンタムの作成だけは許容するようにしてみます。

調査の結果、846行目~876行目 および、 878行目~890行目までを無効化すればいいと分かりましたね。

では今度は、これを逆アセンブルしましょう。

コマンドプロンプトを開いて、カレントディレクトリを mod_IC2.classを保存した場所に移動します。
その後、  javap -private -c -l mod_IC2 > mod_IC2.asm を実行し、逆アセンブルを行います。
 *note:オプション指定の -private -c -l の説明は、 javap -help を参照してください。
すると、カレントディレクトリに、逆アセンブルされたmod_IC2.asmが生成されます。
今度は、逆アセンブルされたクラスを見るために、mod_IC2.asmをTerapadやメモ帳などのお好きなテキストエディタで開いて確認します。

今回の編集対象のメソッド名であるregisterCraftingRecipesで検索をかけると、 4967行目に対象を発見しました。
ずらずらーーっとアセンブル情報が記述されています。 あまり長時間みていると、一部のマニアを除いて嫌気がさしてくるので、がっつり眺めてはいけません。
-lオプションをつけて、逆アセンブルしているため、メソッドの終了後に、デコンパイラとの行数の対応表が付与されています。


ずーーーーーっと下へスクロールし、15507行目あたりでやっと、オフセット対応表が出現しました。

対象は、846行目~876行目 および、 878行目~890行目までを無効化 と先程調査しましたので、それに対応するメソッド内オフセットを調査します。

対象開始となる846行目は、メソッド内オフセット4170番目から始まることがわかります。

対象終了である、876行目は、メソッド内オフセットの5991番目まで続いてることが分かります。
この際、5937番目ではないことに注意してください。5937番目は、876行目の開始オフセットであり、終了オフセットは、877行目のオフセット(5992番目)より1つ前の5991番目まで となります。

同様に、878行目~890行目も調査すると、
 846~876 ⇒ 4170~5991
 878~890 ⇒ 6046~6400
が今回のターゲット メソッド内オフセット値となります。
このオフセットはあくまで、メソッド内オフセットですので、このままでは実オフセットがわかりません。

ですので、メソッド内オフセット0が、実オフセットのいくつに対応するのか調査を行います。

幸い、registerCraftingRecipesの前のメソッド(takenFromCrafting)は、分かりやすい構成となっているので、それを目印として探してみましょう。前のメソッドは aload_1,aload_2,aload_3 invokestatic , return となっていますね。
各々の命令(aload_1など)の前の数字は、メソッド内オフセットを表しています。
invokestaticのオフセットが3なのにたいして、returnのオフセットが6なので、
invokestaticは、3バイト有していることが分かります。
それをもとに、ニーモニック変換を行います。ニーモニック変換は、wikiの表を参考にしながら頑張ります。

その結果、
aload_1は2b ,
aload_2は2c,
aload_3は2d
invokestaticは、B8 ?? ??
returnは、B1 だと分かりました。

では、Stirlingなどのバイナリエディダを用いて、mod_IC2.classの対象個所を探してみましょう。

大体、0xC6DA付近に対象がみつかりましたね。 2B 2C 2D B8 03 ?? ?? B1 の条件にぴったりマッチしていることが確認できますね。
メソッドが終わった後、すぐに次のメソッドのコードが書かれるわけではないので、registerCraftingRecipes側の先頭部分についても同様に探してみましょう。
getstatic , iconst_5,anewarry,dup 的な感じなので、
B2 ?? ??
08
BD ?? ??
59
03
であるので、0xC6DA直後に、B2 ?? ?? 08 BD ?? ?? 59 03 がくるところを探してみます。

0xC73Bに発見できました。よって、オフセットは0xC73Bであることがわかりました。

これを先程もとめた、

 846~876 ⇒ 4170~5991
 878~890 ⇒ 6046~6400
に足します。 10進表記と16進表記がまじっててわかりにくいので、16進数表記で統一します。
 4170~5991  : 104A ~1767
 6046~6400 : 179E~1900
これに、オフセットC73Bを加えると、
D785-DEA2
DED9-E03B
であることが分かりました。

これでほとんどの工程は完了です。あと一歩です。
最後に、 この範囲をNOPで埋めます。NOPは何もしないことを指します。
NOPコードは0なので、D785-DEA2とDED9-E03Bの範囲をそれぞれ指定して、0うめをします。

範囲をががーっと選択して、選択範囲を0で初期化します。同様に、DED9-E03Bも初期化します。

あとは保存して、jar内にclassを上書きして戻してやれば、作業は完了!

不安であれば、一応編集後のclassを再度、JD-GUI等でデコンパイルしてみて、正常に変更ができたか確認してにまにましてくださいませ。 また、実際にゲーム内で試してみることもお忘れなく。

ポート開放支援ツール:UPnPPortOpener2の公開

1年前に公開しました、ポート開放支援ツールUPnPPortOpenerですが、
NICの選択など、分かりにくい設定項目が残っていました。

 

しかし! 今回更新致しました、UPnPPortOpener2では、 
 「利用したいポート番号を入力」
 と、 基本的にこれだけで利用することが可能になりました。

UPnPPortOpener2-Screenshot

 

 

ついでではありますが、外部からのTCPポートの通信チェックサービスも始めました。
これも、是非ご利用ください。

TCPポート通信チェックサービスースクリーンショット

CentOS 6.2

 実験環境づくりに、WindowsLAMP環境 WAMP等を構築しようかとも考えたのですが、
実用のことを考慮すると、LAMPで作ったほうがいいよなぁーってことで、
VMWareを利用して、仮想端末にLinuxを構築することにしました。

OSは今まではUbuntuがメインでしたけれど、今回はCentOSを利用して作成しようと思います。

と、いうのもVPSのOSが今はCentOSを使っていますので、それに合わせて勉強がてらですね。
CentOSの構築は初めてなので勉強になりますね。

 

しかし、仮想マシンを起動するとなると メモリがもっと欲しくなりますねー (現在8GB

まぁでも 限られたリソースで システム構築するのも勉強ですかね

 

VPSに切り替え!

最近、実験・研究用PCが1台ほしくなりました。
現在私は、稼働可能な3台のPCを持っています。
ノートPC、メインPC、そして、以前メインだったPCです。

そして、 以前メインだったPCを使って今までは、
実験・研究用として自宅サーバーとしてサーバー機を構築していました。

サーバ機では、Webサーバや、TeamSpeakサーバ、ゲームサーバ等を稼働させたりしていました。

しかし、サーバ機として、常用していると、気軽に再起動や、実験等が行えなかったりするのです。

自分が提供しているサービスを利用している方も結構いるからです。

そこで! これらのサービスをVPSのほうに移管して、
現状のサーバ機を使って実験・研究をしていこうかなーと思う今日この頃です。

VPSに移管するからといって、ドメイン等は変わらないので、URL等は変化しないのですが、
DNSが浸透するまでのしばらくの間は、旧サーバから、新サーバ(VPS)へ接続を転送してあげる必要があります。

そこで、私のお気に入りツールである stoneの出番です。
stoneは、いわゆるパケットリピーターで、様々な通信を中継させることができます。

続きは 後日追記!