over 1 year ago

概要

Overlap2Dは、LibGDX 向けのレベル or UI エディタ。Unity とか他のフレームワークでは公式エディタがあるが、これは公式というわけでは無い。

チュートリアルを一通りやってみて感じたのは、強制終了などの不具合が気になるものの、横スクロールの2Dアクションをはじめとして、落ち物パズルゲーム等は効率的に開発できるように思われる。

Overlap2D エディタで作成したデータは、android または、core 直下の assets ディレクトリにエクスポートされたものがデフォルトで利用されるようになっている。もし、デフォルトのパス以外からデータ利用をしたい場合は、アプリ側にコードを追加する必要があるだろう。

また、Overlap2D のデータを利用するには専用ランタイムが必要になる。このランタイムはアプリで参照している libGDX のバージョンと同じにする必要がある。同じにして置かないと Overlap2D のランタイム側の方がバージョンが古いため、一部の libGDX API を利用できない問題が発生する。この問題は build.gradle の gdxVersion、box2dlightsVersion を修正することで解決できる。

Overlap2D ランタイムは、wiki で説明されるような、Box2d の初期化処理を請け負ってくれる。

ランタイム

Overlap2d上のアイテム

Overlap2 上のアイテムは基本的に、scene2d の Actor のサブクラスで、IBaseItem インターフェースを実装している。IBaseItem は、Box2D の要になる Body を持たせることができる。Body が無いアイテムは Box2D の効果を得られない。

動的にアイテムを追加する

Overlap2D では、通常、エディタでアイテムを配置して利用することを想定しているが、動的に追加させることもできる。動的に追加を行う場合は、事前に、アセットを Overlap2D 管理下にしておく必要がある。

Overlap2D で動的にアイテムを画面に追加したい場合は、sceneLoader.getRoot() に対して addItem() を実行する。addItem() は、引数のアイテムを sceneLoader.getRoot() の子として追加する。

Box2D による制御を行いたい場合は、エディタでフィジックスの編集を済ませた上で、 meshId と physicsBodyData を addItem() の前の段階で設定しておく必要がある。

    SimpleImageVO simpleImageVO = new SimpleImageVO();
    simpleImageVO.imageName = imageName;
    simpleImageVO.meshId = essentials.rm.getProjectVO().assetMeshMap.get(imageName);
    simpleImageVO.physicsBodyData = essentials.rm.getProjectVO().meshes.get(simpleImageVO.meshId + "").initialProperties;
 
over 2 years ago

恐らく現時点で最も使えると思われるSQLite専用の管理ツール。

特徴としては

  • GUI
  • マルチプラットフォーム(Windows, Linux, Mac OS X)
  • 日本語対応(メニューの表示および、DB内の日本語表示も問題なさそう)
  • 作成したビュー(仮想的なテーブル)を残して置ける
  • オープンソース

大きな不具合も見当たらず総じて使いやすい。レコードの挿入や編集を手軽に行える点ででSQLite標準のシェルを使うより利便性が高いと思う。

SQLite専用の管理ツールは幾つか存在するが、SQL実行時にエラーがあるとフリーズする不具合があるものや、ブラウザのプラグインとして利用されるため導入が面倒等の問題があったため、こちらを見つけて利用することになった。

http://sqlitestudio.pl/?act=about

 
almost 3 years ago

Chrome上で動作するアプリをHTML5+JavaScript+CSS+その他で作成することができる。ブックマークバーに表示されるアプリから起動できる。テキストエディタがあれば作成できるが、SublimeTextの拡張機能を利用することで効率よく開発できる。

Chrome Apps and Extensionsは特に便利な拡張機能で、テンプレートを自動出力するだけでなく、サンプルやドキュメントを教えてくれる。

基本的にChromeアプリでは、JQuery等のJavaScriptライブラリは全て使えるので、見栄えの良いUIを表現できる。

テンプレート出力

SublimeTextへChrome Apps and Extensionsをインストールするとメニューに Chromeが追加される。Chrome -> New App -> Hello World で、index.html, main.js,manifest.jsonができる。これは全て同じディレクトリに置けば良い。

インストールする

拡張機能のページをChromeで開いてデベロッパーモードを有効にする。有効にするとパッケージ化されていない拡張機能を読み込むボタンが表示されるので、ボタンを押下して先ほどのディレクトリを指定する。インストールが完了すると、拡張機能一覧に表示される。起動させるとChrome Apps and Extensionsのテンプレートそのままなら、新しいウィンドウが開いて"Hello, World!"が表示される。

修正と実行

htmlやJavaScriptを修正したらページのリロードしてもらえば直ぐに反映を確認できる。

パッケージング

拡張機能のパッケージ化ボタンで配布可能なパッケージの形でアプリをエクスポートできる。

デバッグ

デバッグの基本はChromeのデベロッパーツールになる。

 
almost 3 years ago

Vim, Emacsに並ぶくらい有名で人気のあるエディタになりつつあるSublime TextのTips

全般

拡張機能インストール機能

Package Control

ショートカット

Sublime Text 2 Keyboard Shortcuts Windows Cheat Sheet
Sublime Text 2 Shortcuts (OS X) Cheat Sheet

拡張機能(パッケージ)

Chromeアプリと拡張機能開発

Chrome Apps and Extensions

Markdownプレビュー

Markdown Preview

JavaScriptフォーマット

JsFormat

HTMLタグ補完

HTML5

 
almost 3 years ago

markdownは簡易的なドキュメント作成には最適で、近年はgithubやQiita等の一部のWebサービスでは標準で使用できるドキュメントフォーマットとして定着しつつある。htmlと同様にあらゆるテキストエディタで編集可能ではあるが、ライブプレビュー機能を持った専用のエディタもあり、以前より利用しやすくするための環境が整いつつある。

markdownは仕様として、見出し、段落、表、箇条書き、図を扱えるだけだが、一部のプラットフォームでは目次(TOC)を扱えるようにしたり、数式をサポートする等+αな形態でmarkdownを利用することも可能。

また、markdown自体には見栄えに関する扱いは無いが、markdownが主にhtmlに変換され利用されるため、結果的にCSSで見栄えのよいドキュメントを作成することができる。

markdownで見栄えのよい仕様書/設計書を作成する

markdown+αで見栄えのよい仕様書/設計書を作成することができる。+αで利用するコンポーネントは以下の通りである。

pandocはスイスナイフ的に便利なドキュメントコンバータで、markdown以外に,pdf,html,docx,epub等無数のフォーマットに対応し、相互に変換できるとしている。一部のフォーマットについては外部のコンポーネントに依存しており、単体で全てのフォーマットに対応できているわけではないようだ。

wkhtmltopdfはhtmlからpdf,psフォーマットへ変換するコンバータ。pandocでは、pdfへの変換は外部のコンポーネントを追加しなければならないが、その代用としてwkhtmltopdfを使用する。

pandocもwkhtmltopdfも環境変数PATHに追加しておく、追加したら

pandoc target.md -c target.css -o target.htm
wkhtmltopdf -b -t --toc-header-text "目次" --cover cover.htm target.htm target.pdf

で、最終的にtarget.pdfを生成することができる。

pandocの-cオプションはCSSを設定する-oは変換先のファイル。

wkhtmltopdfの-bは書籍のような見た目ににする。-tはtocをつける。--toc-header-textはtocのラベル。--coverは引数のhtmlを表紙にする。target.htmは変換元のhtmlで、このhtmlは複数設定できる。なので、章毎にhtmlを分けて結合するという運用も可能になる。

基本的にwkhtmltopdfは変換元のhtml+cssの見栄えをそのまま生かした形でpdfへ変換してくれるが、cssの書き方によってはうまく画像を表示しない等見栄えに差がでる場合があるので注意する。

 
almost 3 years ago

ER MasterはER図用GUIエディタで、Eclipseプラグインとして動作する。ER図の作成が主な機能だが、テストデータの作成機能も提供する。ファイルはXML形式で保存され、テキストデータとして管理できる。日本人開発者がメインで開発を進めているためか、日本語のドキュメントの充実ぶりが凄い。総じて使いやすい。

特徴

  • (制限もあるが)複数のデータベースをサポートする
  • DBからのインポートを行いER図を生成する(既存のDB解析に使える)。
  • 特定の形式でエクスポートを行える
  • ER図をベースにテーブル仕様書を自動生成してくれる。(無料でこの機能は凄い!!)
  • Windows, Mac OSX, Linux等マルチプラットフォーム(Eclipseプラグインのため)
  • 論理名を日本語、英語等マルチ言語に対応できる

#サポートするデータベースの種類

  • MySQL
  • Oracle
  • DB2(開発途上)
  • PostgreSQL
  • HSQLDB(開発途上)
  • SQLITE(開発途上)
  • SQLServer(開発途上)

SQLITEは開発途上とのことだが、特に大きな不具合はなさそうだった。

サポートするエクスポート形式

  • 画像(他のドキュメントに乗せる図として欲しいならこれを選ぶ)
  • DB定義書(EXCEL形式のデータベースの定義書)
  • DB定義書(HTML形式のデータベースの定義書)
  • DDL (SQLの事)
  • 辞書(CSV)
  • 翻訳辞書
  • DB(直接DBへアクセスしER図の内容を反映する)
 
almost 3 years ago

http://commons.apache.org/proper/commons-imaging/

特徴

  • 100% java
  • Exif編集ができる
  • 画像変換できそう

Androidで使うにはBitmap変換が必要ではないか

  • 画面への表示はBitmapで内部の処理ではCommonsImagingを使う
  • 変換1:はBitmap<->ファイル<->Commons Imaging
  • 変換2:はBitmap<->byte[]<->Commons Imaging

対応する画像/メタデータ種別

http://commons.apache.org/proper/commons-imaging/formatsupport.html

サンプルソースコード

http://commons.apache.org/proper/commons-imaging/sampleusage.html

Imagingクラスが重要なクラスでここで画像の読み込みと書き込みができる

Exif編集

  • WriteExifMetadataExample.javaのremoveExifTagが参考になる
  • Jpegメタデータを取得して、TiffOutputDirectory 経由のremoveFieldで削除する
 
almost 3 years ago

git show --binary でバイナリ込みのパッチが作れます。

バイナリ無し

$ git show e7df8674fac89556864e1ccc216e31393a90d059
commit e7df8674fac89556864e1ccc216e31393a90d059
Author: ynomoto <ynomoto@github>
Date:   Wed Mar 27 00:37:42 2013 +0900

    modify image

diff --git a/original.jpg b/original.jpg
index 240083f..58df6e3 100644
Binary files a/original.jpg and b/original.jpg differ

バイナリ込み

$ git show --binary e7df8674fac89556864e1ccc216e31393a90d059
commit e7df8674fac89556864e1ccc216e31393a90d059
Author: ynomoto <ynomoto@github>
Date:   Wed Mar 27 00:37:42 2013 +0900

    modify image

diff --git a/original.jpg b/original.jpg
index 240083f95777d3e7eaf677149abcd1fe5312ddb5..58df6e31ef01a9b8a133409a203227e8
GIT binary patch
literal 59829
zcmeFZcUV*1wl5r{3PJ<~lok{a6%YX_A|xu(M2vzO0U;<=ktWh10i?GGC<rP+sz{0S
zPUs+2Kzc9IOF|8#aF_4CXP<rUeb4#MIrqN%kMFrF&rBA{T#GrzoMVjND03YS9ZrFc
z-_q341kurfKy<(hbT|!quHpX73Ix*A16=@tKrEmmbh4l$z?m@6&IUgNF#w-HPtZ-E
zfv#IPJhc?LYvb_B!P&;aQAFK9K}7F~`7`_9e}h0rl8^jLe|q0!`hPwDeeK~WNF8+K
z_d)l^`;jB`^h^x&z`@MO$iT$H%);`!9c5)_J9_jOD+>!7nC%!l2XGu^JI)E_;QW35
z`zF6H2d-jbU|`}n%5wB~kN?_nSPSB0q4xz|bZ0<EIO*s)=?)t~5P(ibx<8KJ!~K2G
z9ieAnWMT%!#0GRIJ`OO4p8f~}JuqH?Ep$G>?;r+FMy}Jc*O|EQJz+lMbVANA`ZJ5@
zjr=+u{T_mt{L`2IM_GCKPM+cyKPz$W{DsR3ib~2?RMc;3XliNe+%mZT;349Xp^>?T
zrIoeKv**sQTwLAUJv?6r1O^3%goee$zI_)L|2`oxB{eNQBlAnv*Mh>L;*!#`@{0O~
z#-`?$*6(e-eLwpL28V`6re|j7e$6i|E-e!`x3+h7_elE(zv-d_(f^Gs;QdeO;soeA
z!oWb!!2Fvox+8AC3Fl;BJT1$_b^RXm6DRI7a(*l)ZbX01uRAI#uTS84`m%?WSM2h%
zIPo`We^B<HBh3H5McLm8`&YU~K*#9mfXSoh1i?U5N=n!{(En@yj|cz%S_AugyXmAR
zzFIg*;t<p%6P7+>qNUM;B%ijpTemTPhD}2x`rX#Aa5wUmWDd7xbP0Afa|*)sTtz7i
(省略)
ysk$ 
 
almost 3 years ago

複数のOSバージョンにまたがるアプリケーションサポートや、特殊な状況でprivate、protectedなメソッドにアクセスしたい場合、リフレクションが便利です。

privateメソッドを外部から呼びたい場合、getDeclaredMethodでMethodインスタンスを取得してsetAccessibleでアクセス可能にすることで実現可能性になります。

AlternatedGCMBroadcastReceiver receiver = new AlternatedGCMBroadcastReceiver();
Object[] param = new Object[] {getContext()};
Method method = receiver.getClass().getDeclaredMethod("getGCMIntentServiceClassName", Context.class);
method.setAccessible(true);
String result = (String) method.invoke(receiver, param);

※ getGCMIntentServiceClassNameはgcm.jarで提供されるGCMBroadcastReceiverのメソッドです。

古いOSをサポートしつつ新しいOSでは最適な処理(もしくは不具合回避等...。)を実行したい場合はもっとシンプルです。

TextView textView = (TextView) findViewById(R.id.text);
Oject[] param = new Object[] { 1, null };
textView.getClass().getMethod("setLayerType", int.class, Paint.class).invoke(textView, param);

Build.VERSIONで分岐させつつこの処理を実行したりします。リフレクションを使う

 
almost 3 years ago
int id = Resources.getSystem().getIdentifier("btn_check_holo_light", "drawable", "android");
((CheckBox) findViewById(R.id.checkbox)).setButtonDrawable(id);