プログラミング

Android

Tegra2での不具合

Tegra2でだけ特定のエラーメッセージが出てうまく動かないということに悩まされていました。調べてみても、日本じゃ該当なし、海外で報告があるけどよくわからないまま終了というやっかいな状態でした。 それが今回ようやく解決方法含めてわかったので、記事にしてみました。 戦っていたエラーメッセージは 、P1202: Texture's gl states do no...
プログラミング

Load-Link/Store-Conditionalを見直した

CASを持たないアーキテクチャ CAS(Compare-And-Swap)を持っていないアーキテクチャで、アトミック操作はどうやるのか調べてみました。そういう部分ではLoad-Link/Store-Conditionalという命令を使って実現するみたいです。 PowerPCでは、lwarx/stwcx という命令。 ARMでは、ldrex/strex という...
プログラミング

スレッド同期のエトセトラ 第3回

Visual C++ 2005以降のvolatileのMS拡張 さらにvolatileについて、Microsoft独自拡張がなされてる記載を見つけました。 VisualStudio使って、Windowsアプリケーションを作る上ではこのルールだけでやっていけるのかもしれません。 Visual C++ 2005 には、volatile 変数へのアクセスに関して、...
プログラミング

スレッド同期のエトセトラ 第2回

前回のvolatileの変数を同期プリミティブに、な話の第2回です。 Microsoftの文章では、AcquireバリアはRead-Acquireバリア、ReleaseバリアはWrite-Releaseバリアと表現されています。確かにメモリバリアが使用される状況を考えると、アトミック変数代入時にはすなわち書き込みなので、Write-Releaseバリアという...
プログラミング

windows.hのmin/maxについて

今日の、VisualStudio Tips。 windows.hをインクルードすると、min/maxがマクロ定義されてしまうやっかいな問題?がある。 しかしながら、実は NOMINMAX というマクロ定義をして windows.h をインクルードすることで、これらが定義されることを防ぐことができる! これは地味なようで、自作算術ライブラリとか作ってると非常に...
プログラミング

スレッド同期についてのエトセトラ

世の中には、volatile付けただけでその変数を同期プリミティブとして使用OKという誤った認識があるような気配だったので、ちょっと調べてみました。自分の認識を整理するためでもあるけど。 volatile修飾は何をしてくれるのか。まずはこれを考えてみます。 volatileはコンパイラによる最適化を抑制してくれます。これは、コンパイラによる命令の移動、メモリ...
Android

よくわからないバグ

Iconia Tab A500でOpenGL ES 2.0使ったテストコードで、"P1202: Texture's gl states do not match with shader's" というエラーが出てしまい、プログラムがうまく動かなかった。 現在調査中。そんな変なコードを書いたつもりはないんだけど。 シンプルな再現コードを作るのもやっかいで、ゼロか...
Android

NDK r7が出てた

ついさっきみたら、Android NDKのrevision 7が出てました(android-ndk-r7)。Android 4.0 が発表された上旬ではまだでしたが、遅れて登場したようです。いくつか更新を見ていて気になったポイントを列挙してみます。マルチメディア関連の拡充。使えるのは、API Level 14以降のものっぽいですが。 ネイティブでOpenMA...
プログラミング

GmailのOAuth認証

ここ最近はGmailに搭載された OAuth認証のうちの anonymous 方式のほうを調べて試行錯誤していました。 AndroidでGmailを使っているので、そのアプリに生かせたらいいなというのが最終目標です。日本語で、そしてJavaでの資料が思いの外少なくて、苦労しました。 いろいろ実験してうまくいかなくて、苦労していましたが、最終的には単純にOAu...
Android

GMailにアクセスするアプリ

Androidのプログラミングとして、Gmailに保存されているデータにアクセスするアプリを書いてみようと思っていたら、なんと7月末のGmailの更新でできなくなった模様。エラーメッセージがわかりにくくて、まさか別の部分に問題があるとは思っていなかったよ・・・。 エラーメッセージはこんな感じです。 requires com.google.android.gm...