>

2015年8月29日土曜日

iTunes ConnectのマイAppのバンドルID(Bundle ID)を変更する。

iTunes Connectで登録したマイAppのバンドルIDはそのアプリがストアで公開される前であれば変更できます。(幾つかのサイトで変更できないといった記述が見受けられたがそれは誤りです。)
下記の通りiTunes ConnectのマイAppから当該Appを開いてメニューから その他>このAppについて を選択するとバンドルIDを変更できるダイアログが開きます。


2015年8月10日月曜日

iPython notebookでpyplotを使って表示する画像のサイズを変更する

iPython notebookで画像として可視化しながらデバッグするときに画像のサイズが変更できないで少し困った。以下のfigureという命令でfigsizeを指定することで変更できることが分かったのでメモ。
import matplotlib.pyplot as plt

plt.figure(figsize=(12,12))

2015年5月6日水曜日

swiftからobjective-cの関数を呼び出す時にエラーになる件

swiftから複数の引数を持つobjective-cの関数を呼び出そうとすると
Cannot invoke 'func' with an argument list of type
とか
Missing argument labels
みたいなエラーが出て困った件。

原因は次の二点だったのでメモ。

  • objective-cの関数の引数の型がintの場合はswiftではInt32の変数を入力しなくてはならない。Intではダメ。
  • objective-cの関数の引数のラベルもswiftのコードで記述しなくてはダメ。
以上をまとめるとswiftでは次のような呼び方をすることでコンパイルに通るようになった。味噌はInt32に変換していることと、二つ目以降の変数の前にコロンで区切ってラベル名(この例ではmon, mday)を記述していること。
MyClass.test(Int32(year), mon:Int32(month), mday:Int32(day));

startUpdatingLocationが常にerrorになる件

ちょっと面白いアイディアを思いついたのでiOSアプリ開発に挑戦することに。
ちなみに言語はswift、iOSは8を想定。

で、さっそくGPS情報を取得するところでつまずいた。plistも編集してコーディングしてもstartUpdatingLocationで常に結果がエラーになる。

原因は下記のサイトにある通りでシミュレータにLocationの設定をする必要があるらしい。
http://shirokai.hatenablog.com/entry/swift-gps

ただし、自分の環境ではLocationをCustom Locationに設定してもerrorのままだったので一度Locationの選択でAppleを選択したりCustomに戻したりしてみたら正常に動くようになった。

2014年9月4日木曜日

retina displayでAntTweakBarを表示すると異常に小さく表示されてカーソル位置も正しく認識されない件

ネット上に似たような問題についての書き込みの記事はちらほらあるが抜本的な対応がいまいちよく分からない。
https://github.com/memononen/nanovg/issues/12
https://groups.google.com/forum/#!topic/pupil-discuss/2Ga6aQWVoWQ

AntTweakBarの操作においてretinaディスプレイの画素シミュレーションがうまくいっていないことが原因。
マウスイベントから取るWindow上の位置は低解像度の値にシミュレートされた値だがglViewPortやAntTweakBarではretinaのフル解像度の値で描画している。なのでイベント発生時のコールバック関数内でresizeイベントやmouseイベントから取ってきた低解像度の値にシミュレートされた位置情報をretinaのフル解像度での値に直す(2倍する)した上でOpenGLやAntTweakBarの関数を呼ぶようにすることで対応。

対応の例
static void resizeCallback(GLFWwindow* window, int width, int height)
{
    TwWindowSize(width*2, height*2);

}

とりあえず動くが表示が小さいという問題は未解決。本当はretinaのシミュレーション機能に乗っ取った抜本的な対応方法(glViewPorttはwindowサイズではなくてframe bufferのサイズを設定して、AntTweakBarは二倍のサイズで描画する?)があると思う。抜本的な対応が分かる方いらっしゃいましたら是非コメントお願いします。

2014年9月2日火曜日

AntTweakBarをMac OSX 10.9でビルドしようとするとエラーが出る件

AntTweakBarをMac OSX 10.9でビルドしようと
$make -f Makefile.osx
を実行すると下のようなエラーが出て戸惑う。噂ではOSX 10.8から出るようなったらしい。

 TwOpenGLCore.o TwOpenGLCore.cpp
In file included from TwOpenGLCore.cpp:22:
./LoadOGLCore.h:149:24: error: conflicting types for 'glMultiDrawElements'ANT_GL_CORE_DECL(void, glMultiDrawElements, (GLenum mode, const GLsizei ...
                       ^./LoadOGLCore.h:34:36: note: expanded from macro 'ANT_GL_CORE_DECL'
        extern "C" { _Ret APIENTRY _Fct _Params; }
                                   ^/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2836:13: note:       previous declaration is here
extern void glMultiDrawElements (GLenum mode, const GLsizei *count, GLen...
            ^In file included from TwOpenGLCore.cpp:22:
./LoadOGLCore.h:214:24: error: conflicting types for 'glShaderSource'ANT_GL_CORE_DECL(void, glShaderSource, (GLuint shader, GLsizei count, co...
                       ^./LoadOGLCore.h:34:36: note: expanded from macro 'ANT_GL_CORE_DECL'
        extern "C" { _Ret APIENTRY _Fct _Params; }
                                   ^/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2923:13: note:       previous declaration is here
extern void glShaderSource (GLuint shader, GLsizei count, const GLchar* ...
            ^2 errors generated.
make: *** [TwOpenGLCore.o] Error 1
これは何かっていうと/System/Library/Frameworks/OpenGL.framework/Headers/gl.hで定義されている関数をAntTweakBarのAntTweakBar/src/TwOpenGLCore.hの中で参照しているんだけど関数の引数が合っていないよ!というエラーであり、どうやらいつかの更新でOSXに同梱されているgl.hの関数宣言に変更(といっても修飾子の軽微な変更)があったのが原因らしい。
そこで今のgl.h内の関数宣言に合わせてAntTweakBar/src/TwOpenGLCore.hの中身に次の二つの編集を加えれば良い。ファイル内の修正場所は関数名とかで検索して見つけてください。
  1. ANT_GL_CORE_DECL(void, glMultiDrawElements, (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* * indices, GLsizei primcount))

    ANT_GL_CORE_DECL(void, glMultiDrawElements, (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const * indices, GLsizei primcount))
    に修正。(引数indicesの修飾子に後付けのconstを追加。)
  2. ANT_GL_CORE_DECL(void, glShaderSource, (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length))

    ANT_GL_CORE_DECL(void, glShaderSource, (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length))
    に修正。(引数stringの修飾子に後付けのconstを追加。)
上記修正をしてからもう一回
$make -f Makefile.osx
でビルドすれば通るようになるはず。

2013年12月15日日曜日

REGZAのブルーレイドライブに閉じ込められたディスクの救出方法



昨日無性にジャッキーチェンの映画が見たくなったのでブルーレイを借りて見ようとしたら、ディスクを読み込まずその後「ブルーレイディスクプレイヤーを起動しています」のままフリーズした。地デジモードにしてからブルーレイモードに戻しても、電源入れ直しても、イジェクトボタン押しながら電源投入しても、ディスクドライブの穴にピンを突っ込んでも(そもそもBDドライブのこの穴はそのような目的のものではないらしい)反応ない。ディスクももちろん取り出せない。TSUTAYAで借りたものなのに。ネットで調べた限りではスロットイン式のドライブのためか強制取り出しの仕組みもなさそうだ。保証期間は4ヶ月前に切れていて修理しても万単位の費用がかかるみたいなので分解してディスクの救出を試みることにした。

結論から言うと家庭用ドライバーセットがあれば1時間くらい格闘すればディスクの救出は可能です。そのときのメモを書きますが、あくまでこれを見て分解してみる人は各自の自己責任でお願いします。ちなみに僕のレグザの機種は40RB2です。

電源ケーブルをコンセントから抜く

当然ですが作業を始める前に電源ケーブルはコンセントから抜いてください。外装外すと中には高電圧の箇所もあるだろうし、分解作業でミスると二度ともとに戻せなくなる可能性もあるのでくどいようですがこの先は自己責任でお願いします。

外装を取り外す

本来裏のネジ(木ネジ17カ所、背面中部のネジ4カ所、出力端子付近のネジ2カ所)を取り外して外装を取り外します。背面中部のネジ4カ所のうち1カ所は電源ケーブル付近のネジです。ネジを全部外すした後に背面の外装を持ち上げると手で簡単に外せます。



BDスロットの外枠を取り外す

銀色のネジを2カ所外してスロットの外枠を外します。多少、溝みたいなのにはまってるようなので折らないよう気をつけて取り外してください。うまく傾けるようい引き抜くと外せます。


ドライブに接続されているコネクタを三本抜く

3本のコネクタを抜きます。下の写真で左二個は普通に引き抜けます。一番右のは白いツメみたいのと一緒につまんで引き抜けば抜けます。最初ちょっと固く感じるので注意して抜いてください。コネクタを外したらドライブを完全に筐体から取り外します。


ドライブを筐体に固定しているネジを外し、ドライブを筐体から取り外す

ドライブの側面4カ所のネジを外してドライブを筐体から取り外します。

ドライブ前面パネルを外す

ドライブ前面パネルは6カ所くらいのツメパッチンで固定されています。マイナスドライバでこのツメをつついて外してから手でパネルをを取り外します。

さらにドライブの外装を外す

とり外したドライブでさらに4カ所のネジを外してドライブの外装を外します。ここまでくるとあと少しです。ネジを外すと外装は上下にぱかっとはずれBDドライブが露わになります。

BDドライブ本体を分解する

露わになったBDドライブ本体の4カ所のネジを外します。するとBDドライブは完全には分解は出来ない(写真中の基盤で隠れている面にシールみたいなので接着されているためです。このシールははがすと後々面倒そうなのでやめておきます。)のですが手でカバーを持ち上げてやることで少し隙間が開くようになります。この隙間からディスクを指でつまんで救出することが出来ます。

再組み立てと復旧

ディスクを救出したら適当に必要なコネクタをとりつけて電源を投入します。(感電とかしないように気をつけて自己責任で行ってください。)するとブルーレイディスクプレーヤーが無事起動し「ディスクなし」と認識します。そこで取り出しボタンを押すと、スロットの入り口が開きディスク自体は(既に救出しているため)出てこないのですがディスクを出すように動作し、完全に正常な状態のディスクが空の状態になります。この状態で再び問題のジャッキーチェンの映画のディスクを恐る恐る入れてみると今度は正常に認識して再生出来ることが確認出来ました。(要するに今回の問題はディスクの問題とかではなくて単なる不運だったようです。ソフトウェア的なバグの可能性もあるので、ネットに接続してファームウェアをアップデートしておいた方が良さそうです。)
動作確認出来たらちゃんと組み立てて、無事作業完了です。

最後に宣伝

自作でAndroidアプリを作ったので宣伝させてください。お子さんにAndroidのスマホやタブレットを渡している方におススメのアプリです。スマホやタブレットで遊ぶことをご褒美に勉強をさせることができます。子供が勝手に勉強するようになります。