ペペロン頭脳

ソフトウェアエンジニアのメモ的なアレ。

NDKなSQLiteで"unable to open database file"

最近はお仕事でAndroidさんとお付き合いしているんですけど、これがまたコア機能をNDKゴリッゴリで書いてあるプロジェクトをフォークしてゴニョる感じでして。
もともとAndroidなんてHello WorldレベルだったのにいきなりNDKかよ先達も周りにいねーよ、という状況で泥沼の一月半ほどを過ごしてまいりました。
ネイティブビルドをCygwinなバッチで走らせていたのを全部Eclipseでできるようにしたり、よっしゃーと思ってndk-debugしてみたらエラーエラーで調べたところ外部のAndroid.mkインクルードさせてるとndk-gdbが辿れないと知って愕然としたり。

そういうのと並行して、AndroidSDK標準のJavaSQLiteラッパーでなくてNDKなCライブラリを使うコードのテストでハマっていたのが解決したのでここに記す。

現象

sqlite3.c/h をラップしているお客様謹製ライブラリをAndroid実機テストしていたのだが、一部”unable to open database file”のエラーメッセージが返ってくるクエリがあった。

  • CREATE DATABASE/TABLE, INSERT, JOINしないSELECT: 正常に実行される
  • JOINありのSELECT: エラー!
  • VACUUM: エラー!

構成と設定

DBファイルは「内部ストレージ」にディレクトリを切って置いている。ディレクトリもファイルも読み取り/書き込みOKな権限設定。
さらにAndroidManifest.xmlにもpermission.WRITE_EXTERNAL_STORAGEを指定済み。

解決法

どうやらjournal等の一時ファイルを作れなくてエラー吐いてるようだ・・。パーミッションの設定は適切なはずなのに。
ということでググりまくったところ、StackOverflow大先生が教えてくれました。
java - Why fopen gets fail in native method due to permission issue from Android-NDK application? - Stack Overflow

#include <unistd.h>

// ファイル作成する処理の前にこの一行を追加するだけ。1回でよい。
// リンク先では"/sdcard/"指定してるけど、機種によって違うかも?
chdir("/path/to/内部ストレージのルート");

詳しく調べてないんだけど、どうやらネイティブプロセス起動時は"/"がカレントになっている。
そこから”/sdcard/”下にファイルをつくろうとすると、permission.WRITE_EXTERNAL_STORAGEを設定していても不正な操作になってしまうようだ。
そこでカレントを”/sdcard/”に移してやることで解決・・・ということらしい。


こういうマイナーな問題について調べるのほんと辛い。必要だし仕方ないんだけど、原因のあたりを付けるまで時間かかるし、解決しても達成感がまるでない。場当たり的な知識ばかり増えていく気がするけど、これも蓄えていくしかないのかな・・
これ以外にもADTバージョンアップしたらぶっ壊れたり、うっかりJDK1.7使ってたらEclipseプラグインうまく入らなかったり、Android.mkの書き換えやら構成変更でつまずいたり。
コード書く以外の調査やら試行錯誤に大幅に時間と体力を奪われてて、ここのところ陰鬱な気分で仕事してたけど明日からはゴリゴリ実装していけそう。

Android NDK ネイティブプログラミング

Android NDK ネイティブプログラミング

ついカッとなって自作ラオシャン。

f:id:peperon_brain:20140611230204j:plain

君はラオシャンを知っているか

ラオシャンはタンメンの店である。しかしタンメンと言っても野菜が盛りっと乗っているタンメンとは似て非なるものである。いや似てなどいなかった。とにかく非なるものである。
ラオシャンのスープは透明である。透明なスープは酢の風味を発している。そのスープに浮かぶのは生タマネギのみじん切りと純白のストレート麺である。
他に具はない。せいぜいトッピングでワカメが選べる程度である。ラー油はお好みで。

シンプルにも程がある構成なのだが、これがなかなかの中毒性を誇っている。
なぜ取り締まりの対象にならないのかが不思議で仕方がない。

ラオシャンは神奈川県平塚市の本店を中心に数店舗しか存在しない。おそらく他の地域に同系統のものはない。知る人ぞ知る系の店である。
正直シロコロホルモンよりもソウルフード度は高いと思っている。つーかB級グルメとか騒ぎ始めるまでシロコロなんて知らなかったと厚木市民の8割は口を揃える。

禁断症状が出た

地元にいた高校時代まではちょくちょく食べていたのだが、この10年ほどはご無沙汰していた。
たいして中毒じゃないじゃん、というツッコミはなしでお願いしたい。
それが今年正月の帰省の際に急に食べたくなってしまい帰り際に一杯摂取していったのだが、
あ、やっぱりうまい。これはいかん。となってしまい持ち帰り用のセット(値段は同じ)を2つ購入した1月3日。三が日に店開けてるってのが地味にすごい。

持ち帰って楽しんだのだが、そんなものはすぐに食べつくして早半年。
地元までは電車で片道1時間。行けなくもないがそこまでして行きたくもない。しかし食べたい。
今日昼過ぎに思い出してから仕事も手につかず、イヤハヤイヤハヤ・・などと呟きながら再現レシピを検索するも手応えなし。

もっと手軽にラオシャンライフを送るためのDIY

レシピ検索ではそのものずばりな情報は得られなかったのだが、以前の持ち帰り用セットから味の見当はついていた。スープの原液はイタリアンドレッシングに似ているのである。
つまり酢と油がベース。そこに塩分とタマネギが乗ればそれっぽくなるのではないか!?
麺は素麺か冷麦でいけるのではないか!!

つーわけで材料を揃えて試してみたら、なんとできてしまった。
本物には及ばないが、かなりいい線いってると思う。

※クックパッド初投稿です。
※というかこの記事書くためにアカウント登録しました。

袋麺に毛が生えた程度の労力でラオシャンエッセンスを得ることができるので、皆様にもぜひ試していただきたいと思います。
飲んだ後などには最高でございますのよ。

Enjoy!!

IT系勉強会は怖いか?いや君、不安にかられる必要などないのだ。

業務外の活動が必要だと感じた

エンジニアとして働き始めてから、Webでの情報収集(ほとんどはてブホッテントリ)は日常的にやってたしすごく役に立ってるんだけど、リヤルなフェイストゥーフェイスな情報交換とか学習ってのをやってなかったのね。
SIerでやる業務だけでスキルアップしようとしても使用する言語やプロダクトは固定されてしまっているし、このままだと5年10年経った時に完全なる古漬けオジンになるかも、という危惧があった。感度が下がって鍛錬と吸収をやめてしまった結果、staticおじさん化してしまう未来だけは避けたい。なんとしても。
それに先輩も「エンジニアなら転職する/しないに関わらず、いつでも俺は転職できるぞ!と言えるくらい鍛錬を積んでおくべきだよ」と言っていた。
というわけで今年度に入ってから、月に2~4回は何かしらの集まりに顔を出すようにしている。

どんな勉強会があるのか調べる

僕はもっぱらIT勉強会カレンダーで探している。
ATND,Zusaar,Connpassなど主要なサイトからデータを集めていてイベントをみつけやすい。
IT 勉強会カレンダー | みんなでシェア!イベントカレンダーのポータルサイト「Coyo.Me」

東京の開催が多いが、福岡・大阪・愛知・北海道といった都市でもそこそこの頻度で開催されていることがわかる。
地域を問わなければ平日はだいたい10本程度、休日はその2から3倍がいたるところで開催されている。勉強会やらセミナーってこんなにあるのか!
趣旨も様々で、流行りのフレームワークに関してだったり、各種言語の入門講座だったり、Linuxカーネルとかコアでディープなのもある。
技術の勉強だけでなく、SIer→Web転職関連のセミナーや情報交換の集いなんかも少なくない。

面白そうなのを見つけたらカレンダーからリンク先のイベント開催系サイトに飛んでエントリー。人気が高いのはすぐ埋まるから気をつけろ!

勉強会は怖いか?いやそんなことはない

正直いうと、以前は怖かった。勝手に怖がっていた。
ITエンジニアを自称していながら、経験があるのはWindowsExcel、VisualStudio。Web系の知識ないしLinuxもまともに扱えない。Vimも使えましぇん!!!ホッテントリに上がってくるVagrantやらDockerやらの華やかなエントリについていけないのぉぉ!

こういう卑屈思考なので巷の勉強会もイケてる内容にイケてるエンジニアが集ってると考えていて、そんなところに行ったら鼻で笑われるのがオチではないだろうか!いやそもそも話題についていけないのではないだろうか!などと逡巡しまくりのためらいボーイを演じていた。

だが、今一度上記のIT勉強会カレンダーを眺めてみよう。
たしかにハッカソンやら濃厚そうなイベントも多いが、よく見てみると意外と初心者向けの内容もあることに気づくはずだ。はじめての○○とか、さわってみよう!○○など。啓蒙心あふれる有志の方々がいろんなイベントを開催して下さっている。
行ってみるとみんな優しいし、案外似たような悩みを持ってることなんかも多かったりして話が弾むこと請け合い。
知らないことを恥じらう必要なんてない。知らないからこその勉強会なのだ。

これに乗らない手はないだろう。だいたい小規模開催のものは参加費も無料orドリンク1杯程度がほとんどで、懇親会費含めても上限\2,000程度であることが多い。
技術ばっかりじゃなくて、単純に社外の人と色んな話ができるしお得。
巨人の肩に乗れ!!
(ちょっと使い方違う?)

最近参加した勉強会

みんなでGitHub勉強するにゃんっ!

3月末に開催されたイベント。これは感想記事を書いています。
みんなでGitHub勉強するにゃんっ!に参加した。 - ペペロン頭脳
文字通り初心者向けながらもプレゼンターが豪華だったりGitHubの人がLTしてくれたりと盛りだくさんなイベントでした。自分で手を動かして体験できたのが大変良かった。
こういうイベントに出て参加者と話すと、一口にITといっても色んな業種・色んな職場環境があるのが本当によくわかります。

SIerでSEだった講演者がWebエンジニアに転向し、どのようなキャリアを歩んできたか余すことなくお伝えします。

【増員決定!<45名→60名>】【ヒカ☆ラボ】【Web系希望エンジニア必見!】SIerでSEだった講演者がWebエンジニアに転向し、どのようなキャリアを歩んできたか余すことなくお伝えします。 on Zusaar
文字通りの内容です。日立系SIerに務めていた方が決心してWeb系企業に転職するまでの軌跡についてお話してくれました。
ギョーム系のかっちりシステム作っててコードはあんまり書けない、俺はもっと手を動かして楽しいプロダクトを作りたいのに!なんてフラストレーションがたまってる人のハートキャッチしちゃう系のイベント。
主催・会場提供がレバレジーズさん。プレゼン後の懇親会で社員の方とキャリアについてのお話もできます。
渋谷ヒカリエでやってるっつーんで【 ヒカ☆ラボ 】と銘打って毎週のように色んなイベントを開催しています。来週もYeoman紹介のイベント参加しますでよ。

HTML5でLeapMotionを体験

[初心者向け][第5回] HTML5でLeapMotionを体験 on Zusaar
ちょうど1年ほど前に発売され話題となったLeapMotion、持ってない方も実際に触れてみて体験してみよう!というイベント。ゴールデンウィークの締めに相応しい会でした。
用意していただいたサンプルコードを使って、node.js経由でブラウザにLeapMotionから送られるデータを表示したりゲームで遊んでみたり。他にもKinectの体験も出来たり、ウェアラブルデバイスの未来について議論が白熱して「人類は早く電脳化すべき」という意見も出たり濃いイベントでした。
LeapMotion欲しいなー。でもRaspberry Pi + Arduinoも欲しいんだよなー。
ちなみにこの会は隔月開催。次は7月だそうです。

プログラミング勉強会(C++,Java)

プログラミング勉強会(C++、Java) 5月15日(木) - connpass
去年から始まり、ほぼ毎週のように開催されているそうです。僕は先日木曜が2回目の参加。
主に渋谷のIT系カフェやイベントスペースにて、2時間ほど集中して各自プログラミングの問題を解く。比較的ストイックな集まり。
問題は主催者の方が運営しているサイトから出題。ブラウザ(Chrome)上でC++,Javaのコーディング・コンパイル・実行まで出来るようになっています。
CodeResume - コードを書いて脳に汗をかく、JavaとC++の本格プログラマになるための勉強サイト
ドリル感覚で問題を解き進めていき、疑問点はすぐ質問できる。問題のレベルは初心者から上級者まで幅広く用意されていて、門戸が広い勉強会です。
継続して参加したいし、何かしら貢献もしたいと思っている今日このごろ。

素敵なdevライフのために、行くべし行くべし勉強会

これだけ草の根な感じのイベントが充実してるのはITならではかなーと思うのね。
タッチしないのは実にもったいないので、以前の僕のように躊躇している方がいればぜひ一歩を踏み出してほしいと思っています。
いずれどこかでお会いしましょう!