prog

Posts filed under prog

今年一年で読んだFirefox OSの実装を振り返ってみた

Filed in Firefox OS, fxos, prog

 すっかりアドベントカレンダーのことを忘れてて超ピンチのあおいたんです。

 本エントリはFirefox OS Advent Calendar 2015 25日目の記事です。

 さて今年一年皆様どんなFxOSライフをおくられましたか? あおいたん何気に社畜感高まった一年だったのでまとまった成果がないんですが、今年一年なんやかんやでFxOSのソースコードを読む機会はアレコレあったので聞いてもらえれば何かしら話せるよって所をちょこっと書いてみます。どこかで会うなりついったで@するなり詳しく教えろって言ってもらったらなんか語ります。

 記憶だけではもう振り返れないのでプライベートリポジトリのコミットログから月ごとぐらいでざっくり振り返っていきまする。

1月

  • カメラアプリ

    • なんかクラウドストレージに画像をアップロードするアプリを作ろうと思ってカメラAPIとDeviceStorage APIの使われ方を読んでたみたいです。
    • 確かDeviceStorage APIのchangeイベントでファイルの変更を検知しようと思ったけどアプリが裏に回ったら取れなくなって涙目になってたりしました。
    • そろそろ大体忘れてきたのでカメラの話はMozilla Japanの清水さんあたりに聞いたほうがいいかも。
  • 設定アプリとかSystemアプリとかコストコントロールアプリとか

    • Bluetoothで遊びたくてBT周りを読んでましたがもうすっかり忘れてます。メモっとくべきでした。

2月

  • Gaiaのテストアプリ色々とかgecko/dom/webidl配下とか
    • Codezineの記事のためにセンサー絡みを色々読んでました。
    • この時は目的がAPIの使い方に寄ってたので使ってるところとインターフェイスだけ読んでました。
    • 使い方とかはCodezineの記事とか会社ブログの記事とか読んでみてください。

3月

  • Contacts API
    • 4月に開催予定だったFxOSコードリーディングミートアップでLTやるネタで読んでました。
    • Contacts APIだけじゃなくてアプリ側も読んでましたが最近アプリ側は変更著しいので聞かないでね!
    • この頃何故かソートアルゴリズムを実装してオーダを見比べてにやけるのに熱中してたのであんまり読んでないです。

4月

  • Vibrator API

    • FxOSコードリーディングミートアップのLT用ネタ第二弾。
    • Vibrator APIは2013年の終わりごろにも読んでたんですけど変わってない感じで安心感ありました。
  • Geckoいろいろ

    • b2g配下とかdom配下に何があるかとかざっくり読んだのとグラフィック周りを読もうとして挫折したのとJS周り読もうとして挫折したのとHTMLパーザ読もうとして(ry
    • いわゆるGonkと呼ばれてるあたりのうちHAL層とかをざらっとななめ読み。
    • この辺の成果はわんくまとかで話しました

5月6月

  • この辺りはデスマの第一波が来てたのでお休みです。
  • 仕事以外の時間はずっとラノベ読んでたような気がします。

7月

  • gecko/xpcom配下とかgecko/dom/bindings配下とかgecko/ipc/ipdl配下とか
    • コードジェネレートする類のスクリプトを読んでました。
    • 確かなにかとIPC周りを追っていたのにXPCOMとかServicesとかComponentsとかで迷子になって挫折した感じ。
    • 三ヶ月ぐらい後にもまた迷子に。

8月

  • お盆休み明けたらデスマが始まってあまり読めず
  • ちょっと記憶が曖昧ながらDeviceStorage APIの使い方じゃなくて実装を読み始めたけどすぐ忙しくなってほとんど読めてませんでした。

9月

  • init.rcとかgecko/b2g配下とかSystemアプリとか

    • なにやらブート周りを調べてました。なんで調べようと思ったんだっけ?
  • 勢い余ってmozAppsとか

    • SystemアプリからのmozApps。
    • ただこの辺りもデスマ継続中なのでさわりだけ。使われ方を眺めた程度。

10月

  • DeviceStorage APIとか再び

    • ファイルシステムとDeviceStorage APIのKVS的なファイル管理のギャップがどうなってるのかとかファイル変更イベントの流れとかボリュームの空き容量監視とか気になって調べてました。
    • この時はファイル管理のところだけ調べてます。後にファイル変更イベントとかも調べてます。
  • gecko/xpcom配下とかgecko/dom/bindings配下とかgecko/ipc/ipdl配下とか再び

    • 前に迷子になって諦めたのを再チャレンジ。
    • 結局迷子でXPCOMに打ちのめされて泣きながらIPDL関連調べてました。
    • おかげさまでちょっとIPDLに詳しくなれた気がする。Gecko insideとかちょこちょこ質問したりとか@makoto_katoにはお世話になりっぱなしである。
    • みんなIPDLチュートリアル読むといいよ。
  • この辺もデスマ継続中というかバーンダウンせずバーンアップし続けていたのに現実逃避的にソース読む時間が増えてました。

11月

  • mozApps再び

    • もうちょっとちゃんと追ってます。使われ方を見てたはずがいつの間にか実装読んでるのはいつもの話。
    • アプリの起動はプロセスの関係とか諸々ちょっとめんどくさいので気になる人はリクエスト貰えたら何かしら書きます。
  • ビルドコンフィグ

    • .userconfigとかmoz.buildとかをちょっと調べていました。ビルドシステムは大抵のプロダクトでめんどくさいところですね。FxOSもめんどくさいです。
    • makeとかautoconfigとか読んでたらだんだん疲れておざなりで終わってしまいました。その内読み直します。
  • TCPSocketとかUDPSocketとか

    • そもそも使われて無くてもんやりしつつGaiaで数少ない利用例である新しいメールアプリとかSSDPの実装とか読んでました。
    • まあとりあえず使う方だけさらっと見てた感じ。ドキュメントもないのでwebidlはいくらか読んでました。

12月

  • DeviceStorage APIとか三度

    • ファイル変更イベントと空き容量監視を中心に調べてました。
    • とりあえず気になるところは調べて満足しました。
  • 引き続きTCPSocketとかUDPSocketとか。に加えてXHRとか

    • TCPSocketとかUDPSocketとかはドキュメントもアレなので実装見ないと何やってるかよーわからんみたいなアレで読んでる最中です。
    • とりあえずアプリから使える通信手段まとめて見ようかな的にXHRとかもちょろりと調べてます。

 とまあ思い返してみたら何かしらずっと読んでました。今年はどちらかと言うとGeckoに寄ってた気がします。

 来年はGeckoを読むのは継続なんですが、ちょっとNGAとかadd-onとか新しい仕組みの部分を見ていきたいなと思います。

[Firefox OS][Gaia]消えないアプリの作り方

Filed in Firefox OS, fxos, prog

 長月@ちくわの穴を覗いてしまった並の衝撃が走った。です。

 長月は会社がイチオシてたり趣味だったりとかでFirefox OSをよく触ってるんですが、今日ちょっと衝撃的な事実を知ってしまいました。

image

 システムアプリすらアンインストールできてしまうFirefox OSなんですが、Marketplaceだけ消せません。
 これは気になる! ということで調べてみました。

 この手の起動とかインストールとかに関わる情報はだいたいミニマニフェストで示されるので探してみました。

{
  "etag": "\"ed2e516580c8fb5317a1d1378f02592dc64c69f0c822b52a1dc17601fdfbd2a7\"",
  "installOrigin": "https://marketplace.firefox.com",
  "manifestURL": "https://marketplace.firefox.com/packaged.webapp",
  "packageEtag": "\"3a5c08e91b3b7f885c7f6d1ab902f989d721947509ff39fc83913715855bb99e\"",
  "removable": false,
  "type": "privileged"
}

 お?

  "removable": false,

 これっぽい。

 ドキュメントも漁ってみます。

https://developer.mozilla.org/en-US/Firefox_OS/Developing_Gaia/Market_customizations_guide#Prebundled_web_app_metadata.json

 これですね。

 というわけでバンドル用のアプリに関してはmetadata.jsonに"removable":false,の行を書いとけば削除不可になるみたいです。
 これなんで他のgaiaアプリには入れないんだろう???

[Windows][イベント]de:code 14 二日目に参加してきました

Filed in JavaScript, prog

 長月@意外とMS技術もやってるのよ。葵です。

 de:code 14二日目も行ってきました。いやーお弁当豪華ですね。
 ちょっと中国Firefox OS勉強会の登壇準備ができてなくていくつかのセッションは見ずに資料を書いたり調べものをしてましたが、ドリンクもドーナツもアイスもあるので快適でした (何

 で、本題のde:code二日目は一日目の内容を受けてより深くあるいはより発展的な話題が多く講演されました。
 長月は主にDeviceトラックを回っていたのはすでに書いた通りなんですが、ちょっとTypeScriptやProject Sienaの話しも聞いてきました。

 TypeScriptはご存知MS謹製のAltJSです。型によって何かを制約したり、その制約によって論理的に動作を保証する仕組みがJavaScriptにはありません。そのJavaScriptの実行前検査が弱い部分を補おうと型システムを導入したのがTypeScriptです。
 チャックさんによるTypeScript 1.0のスターター向けセッションを聞いてきたんですが、playgroundが面白いですね。webサイト上でTypeScriptを試せるサイトですが、ここのエディタがマルチキャレットできたり地味に便利。
 あとこのセッションはチャックさんの話術で笑いどころがたくさんあったんですが、個人的にぶふーってなったのはVS向けのtscの実体がWSHだったところでした。確かにJSの実行系つったらWSHあったわーってなりました。

 次にProject SienaはMSが今開発ちゅうのデータバインドツールです。ExcelやAccess。ネットワーク上のDBやREST APIなどからエンティティを受け取って、それを可視化するツールです。
 どのように見せるかをプログラミングレスで作って行けるのが特徴で、エンジニア的にはVSでよく使うRADのデータバインドに特化したものだと思えばいいでしょう。
 なぜ長月がこれに注目しているかというと、これがお客さんを巻き込んでのモックアップにいいんじゃないかと思っているからです。
 ざっくりとした構想しか持っていないお客さんにProject Sienaでざっとモックアップして見せる。気に入らないところは配置を変えたり形を変えるだけで対応できることも多いはずです。
 長月は今Mozillaの技術をよく追いかけているんですが、Mozilla LabもappMakerという教育用のプロダクトを持っています。Project Sienaと同様にプログラミングレスのRADでアプリケーションを構築するプロダクトなんですが、このappMakerを触った時に感じた可能性が実現されたのがProject Sienaだといえます。
 MS本社のSienaチームが本気で作ったデモなんかはカタログアプリとしてちゃんとできていたので、製品が世に出てくるのが楽しみなツールでした。

 ちょっとProject Sienaが個人的にとてもwktkなので思ったより長文書いちゃいましたが、de:code楽しかったです。参加費10万円とお高かったですが十分元とったといえるぐらい楽しめました。参加者の皆様、講演者の皆様、開催を裏から表から支えた皆様、おつかされまでした。

[Windows][イベント]de:code 14 一日目に参加してきました

Filed in prog

 長月@予約投稿したつもりが下書き保存だった。葵です。

 microsoftが5/29、5/30に開催しているカンファレンスde:code 14に参加してきました。
 こう見えてMS界隈にもお友達が多い長月なので会場には知った顔がちらほら? いやなんか多くね? 10人単位でお友達がいました。

 今回deviceトラックがお目当てす。
 基本的にはC++とかC#使う長月なんですが、最近はFxOS界隈にいることもあってJSで何かやるのも気になってるのでマルチデバイス向けにJSでアプリを書くセッションをいくつか見てきました。
 やっぱり開発環境的にはMSすごいです。長月が触る他のプラットフォーム (Android/iOS/FxOS等) と比べると頭ふたつもみっつも抜けてます。
 他のプラットフォームも頑張ってるんですけど何かしらちょっとずつもっさいところがVSだとすごい楽ちんだったりして、やりたいことはそれじゃにんだよってことをだいぶ肩代わりしてくれます。

 今回見てきた感じユニバーサルアプリをJSで作のとMulti device hybrid appちょっといい感じかなと思いました。
 つかWindows向けじゃなくてもHTML5で何かやるのに快適な感じなのでWindows関係なくても使ってみてもいいかもです。VS2013 Update 2でAndroid/iOS向けの開発もできるようになりましたしね。
 生のJSはもちろん大嫌いな長月なのでそこはTypeScriptとかになると思いますけど、もうちょっとWindows触ってみようかなと思いました。

 ここからおまけ。
 学習教材としてWP端末とタブレットもらいました。

2014-05-29 14.00.11

 WP端末が手に入ったのでちょっと遊んでみようかと思います。
#時間ないけど。。。

[わんくま][イベント]わんくま勉強会名古屋#31のアンケート結果

Filed in Firefox OS, prog, わんくま, 勉強会, 名古屋

 長月@久しぶりにアンケート集計してみた。葵です。

 昔聞いた計算方法を思い出し出しアンケートの集計をしました。
 いただいたコメントともども今後の参考にさせていただきます。

アンケート集計結果

Q1.セッションの内容は期待どおりでしたか

 140.0 ポイント

  • コメント
    • web技術→カンタンにアプリへ、というのがよかった

 ご期待には答えられたようで一安心です。
 セッション中は興味から外れたかな? と思ってたんですが取り越し苦労でした。

Q2.セッションの内容は理解できましたか

 110.0 ポイント

 理解度が低いのはスピーカへのコメントにもある通り早口で畳みかけてしまったのが大きかったですね。
 京都で講演した時より時間がある分余分なことを言ってしまったかもしれません。
 もうちょっと内容の量や間を取ったりに気を付けます。
#去年FxOSの話した時も同じことを思った気が。。。

Q3.このセッションを知り合いなどに伝えたいと思いますか

 125.0 ポイント

 誰かに伝えたいと思っていただけるのはとてもうれしいです。
 今後の長月のお仕事のためにもどんどんはやらせましょう!w

スピーカへのコメント

  • 内容はとてもわかりやすかったのですが、話すスピードが速く感じられました
  • 内容が多めなので説明の間を取ってもらえると聞いていて疲れないです
  • Firefox OSが持つ可能性やワクワク感が伝わるセッションでした。説明が早口だったので全部を理解できませんでした

 すみません。。。早口ほんとすみません。。。
 話したいことが多くてつい盛り込んでしまうのは悪い癖ですね。
 でもそれだけ話したいこといっぱいなFirefox OSなんですよ!

  • Firefox OSが持つ可能性やワクワク感が伝わるセッションでした。説明が早口だったので全部を理解できませんでした(再掲)

 ワクワクしてもらえたのはとてもうれしいです。是非アプリを作ったりしてそのワクワクをほかの人にも伝えてくださいね!

  • Firefox OSでのアプリの作り方がわかってよかった。DropBox DataStoreAPIも知らなかったのでためになりました

 ぜひぜひ何か作ってみてくださいね!
 紹介したFirefoxのデバッグ機能も使ってみるともっと楽しさがわかりますよ。

  • 端末が欲しくなりました。入手する方法を教えていただければと思います

 端末の入手は日本からだとちょっと大変です。
 今手に入る端末と手に入れ方はまた近日書きますね。

まとめ

 うれしいコメントがたくさんもらえたのでつい書いてしまいました。
 当日聞いていただけた方々ありがとうございました!
 聞きたいことがあったら気軽に聞いてくださいね!

[Firefox OS]test.sh xpcshellがbusyboxないよ! と怒るときの処方箋

Filed in Firefox OS, prog

 長月@"テスト周りの翻訳祭り中"葵です。

 前回test.shについて書きました。
 xpcshellは動くと書いたんですが、動かないですヨ? と言われたので補足を。

 test.sh xpcshellを実行するとエミュレータを起動してエミュレータにbusyboxをインストールします。
 このbusyboxはビルド環境の中に入っていないので自前で用意する必要があります。
 具体的には$B2G/scripts/xpcshell.shの中で

BUSYBOX=$B2G_DIR/gaia/build/busybox-armv6l
    :
  (snip)
    :
XPCSHELL_FLAGS+=" --b2gpath $B2G_DIR \
                  --use-device-libs \
                  --busybox $BUSYBOX \
                  --testing-modules-dir $TESTING_MODULES_DIR"

 と、--busybox引数で特定のパスを渡しています。
 なのでちょいとwgetしてみました。


#!/bin/sh

B2G_DIR=$1

if [ ! -f $B2G_DIR/gaia/build/busybox-armv6l ]
then
wget -P $B2G_DIR/gaia/build/ http://busybox.net/downloads/binaries/1.19.0/busybox-armv6l
fi

 これでとりあえず動くはず?

[Firefox OS ]test.shェ。。。

Filed in fxos, prog

 長月@テストとかよーわからん。葵です。

 ちょっと用事があって最近Firefox OSのテストとか調べてるんですが、ちょっとやられた感あったので愚痴を。

 B2Gディレクトリ直下にはいろいろ便利なシェルスクリプトが入ってるんですが、テスト用にもtest.shと言うのがあります。

 このtest.shは引数としてテスト対象のシンボルをとります。XPCShellテストなら./test.sh xpcshellといった感じですね。
 この引数は他にmarionette mochitest updatesがあります。usageにはそう書いてます。
 で、xpcshellは動いてくれるんですが、問題はmarionetteとmochitest。
 これGeckoの人とかGaiaの人とかよく使うはずなのに実装されてない。なんか文字列出てくるだけ。

 Gaia UIテストとかGaia integrateテストやりたいって人にtest.sh mochitest使えるんじゃねって言っちゃったしもー!

わんくま勉強会東京82でごまかした8パズルのパターン数を調べてみたが間違ってた

Filed in C/C++, prog

 昨日のパターンを調べた件が会社のパズル詳しい人におかしいと突っ込まれたので考えてみた。

 偶置換を一個入れ替えると必ず奇置換なんだから確かに$\frac{8!}{2}$になるべき。
 ということでコード書き直し。要するに巡回置換作るところの添字の取り方がおかしかった。
 参照済みの添字の管理をもうちょっとうまくやれそうな気がするけどめんどくなったのでこれで。

 あと地味にalgorithmインクルードしてなかった (職場でIDEONに投げるまで気づかなかった)。

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
bool is_pazzleout(const std::vector<int>& seq)
{
std::vector<int> referenced(seq.size(), 0);
int sum = 0;
for (int i = 0; i < seq.size(); i = std::distance(referenced.begin(), std::find(referenced.begin(), referenced.end(), 0))) {
int f = i + 1;
std::set<int> cyclic;
cyclic.insert(f);
referenced[i] = f;
for (int j = i; f != seq[j]; j = seq[j] - 1) {
//            std::cout << "f: " << f << ", seq[" << j << "]: " << seq[j] << std::endl;
cyclic.insert(seq[j]);
referenced[seq[j] - 1] = seq[j];
}
sum += cyclic.size() - 1;
}
return sum % 2;
}
void print(const std::vector<int>& seq)
{
std::cout << "( ";
std::for_each(seq.begin(), seq.end(), [](int x) {
std::cout << x << " ";
});
std::cout << ")";
if (is_pazzleout(seq)) std::cout << "*";
std::cout << std::endl;
}
int main()
{
std::vector<int> complete;
for (int i = 1; i <= 8; ++i) {
complete.push_back(i);
}
do {
print(complete);
} while (std::next_permutation(complete.begin(), complete.end()));
return 0;
}

USBテザリング設定がめんどくさいのでトグルするアプリを作ろうと思った調べ物のメモ

Filed in Android, Java, prog

 テザリングとかで検索するとノイズに死にそうになるのでAOSPのソース読んだ方が早かった件。
/packages/apps/Settings/src/com/android/settings/TetherSettings.java 541

private void setUsbTethering(boolean enabled) {
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.setUsbTethering(enabled) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
mUsbTether.setChecked(false);
mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
return;
}
mUsbTether.setSummary("");
}

 この辺をパク......もといインスパイヤ......いやいや参考にすればよさそう。
***16:45追記***
 ConnectivityManager$setUsbTethering(boolean)はhideっぽい。。。

java.util.ListIteratorのドキュメントが嘘つきな件(´・ω・`)その後

Filed in Android, Java, prog

 javadocよく読んでたら

リストの反復子により、プログラマがいずれかの方向にリストをトラバースし、繰り返し処理時にリストを変更して、反復子の現在の位置をリストで取得することができます。ListIterator には現在の要素がありません。 そのカーソル位置は、previous() の呼び出しによって返された要素と、next() の呼び出しによって返された要素との間に常にあります。長さ n のリストの反復子は、次のキャレット (^) で示されるような、n+1 個の可能なカーソル位置を持ちます。

                  Element(0)   Element(1)   Element(2)   ... Element(n-1)

カーソルの位置: ^ ^ ^ ^ ^
 なるほど。Iteratorは要素を指してるわけじゃないのね(´・ω・`)
 嘘つきとか言ってごめんねjavadoc。


Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
Oenology Post Formats
Click to view/hide

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
Posts Calendar
Click to view/hide
2017年8月
« 12月    
 12345
6789101112
13141516171819
20212223242526
2728293031  

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
アーカイブ
Click to view/hide

Warning: sprintf() [function.sprintf]: Too few arguments in /home/users/2/lolipop.jp-dp07042166/web/wordpress/wp-includes/widgets.php on line 1042
最近の投稿
Click to view/hide