Firefox desktop/android 向けの addon, Build Linkシリーズを作った

tl;dr

  • Firefox desktop/android向けの開いてるページのurlとタイトルをplain, markdown, htmlでコピーするaddonを作った 別々なので3つ
  • 文字列を選択した状態でaddonを動作させると、その文字列を対象にリンクを作る
  • web extensionsではない。web extensionsはまだandroid firefoxで動かないので
  • なおpc firefoxユーザーは Make Link :: Add-ons for Firefox 使えばいいと思う

普段pcではfirefox使っていないので、あしからず。

なぜ作ったか

Create Link – Chrome ウェブストア,
Make Link :: Add-ons for Firefox
的なものはpc/mobileどの環境でも重宝している。が、android firefox上でうまく使えるのがないので、addon作った。

なお、pc ie, ios safari, android chromeではbookmarkletで実現できる。
Bookmarklet of quietmole

android firefoxはbookmarkletで実現できなかったのでaddonにした。

リンク

addonのページ

リポジトリ

使い方

pcでは、ツールバー横のボタンを押すと、クリップボードに入る。
androidでは、メニューに項目が追加されるので、リンクを作りたいページ上でメニューを選ぶと、promptがでるので、そこから自分でコピペする。

dZ7jf6o-2702nq704P-270

作った感想

pc向けはapiもいい感じになっているが、android向けはpcでは廃止されたapiを使って作っていかなければなのでダルい ブラウザのパーツに対して何かする場面はほぼ2個書くことになる かと言って2個に分けるとロジックはそれなりに共通化できるので分けると修正漏れしそう。dom側は同じにしてしまえる。

babel, browserify/webpack なしで作れた。browserifyなしだと、最近npmモジュールでブラウザ向けビルドを提供していないのも多いので、ツライこともある。

ちょっと工夫すると普通のnpm moduleみたいに作りつつビルドも出来るので、楽ちん。そのままだと対象ディレクトリをまるごとパッケージしてしまうから、node_modulesがそのまま使える反面、devDependenciesでパッケージ容量が膨れ上がってしまう。

./dist にgit cloneして、NODE_ENV=production npm install することでdependenciesだけインストールしてパッケージにする感じ。

使った感想

便利に使える。けど、思った以上にLink Bubbleで見てる。
割合的にはfirefox:link bubble = 2:8ぐらい。
インテントで渡すandroidアプリ作るほうがいいのかなーと思う。
ページ遷移していく時や重たくなるページはfirefoxつかう。まえiphone使ってた時に、app内のweb view使うか、べつにブラウザ立ち上げるか、ぐらいの使用感のイメージ。

Days6: SmartPhone Push Notificationはじめ

Smart Phone(iOS/Android)のPush Notificationについて咀嚼したのでメモ。ここでのPush Notificationとは本当の”Push”だけではなくてぽいものもひとまとめにする。要はiphoneでポップアップが出てきたりandroidでnotifyされるアレ。
まずカッコつきじゃない本当のpush
– iPhone
Apple Push Notification Service (APNs)
– Android
Android Cloud to Device Messaging (C2DM)
公式ドキュメントを読む。あと、正式名称、略称はすぐ忘れるので、覚えられないので書いておく。
– 対象OS
APNs: iOS3以上
C2DM: Android2.2以上
サーバ側、クライアント側の設定、dev版、配布版別の設定、用意しなきゃなモノ、対象外のosで擬似的なものはどうするか、などなどで知っている人に何度も何度も聞いてなかなか意味がわからなかった。でも基本は公式ドキュメント。あと、一歩を小さくしないとエラーの意味すらよくわからない。

Initialize Android Project with Test Project

Goal: Development Android Project with Test Project

– Init with Eclipse
– Development with Eclipse
– TDD
– Under Version Control
– CI

Directory Structure

EDITED(2011-07-05 23:26)More recommended: When you create new project from existing source, test directory also imported. And it does not act as a test project.

-ECLIPSE_WORKSPACE
    -SpinnerActivity
    -SpinnerActivityTest
-SCM_WORKSPACE
    -spinner
        -SpinnerActivity
        -SpinnerActivityTest

EDITED(2011-07-05 7:03) recommended structure: Testing Fundamentals | Android Developers

  MyProject/
      AndroidManifest.xml
      res/
          ... (resources for main application)
      src/
          ... (source code for main application) ...
      tests/
          AndroidManifest.xml
          res/
              ... (resources for tests)
          src/
              ... (source code for tests)

Create scm workspace and init

I’m eclipse newbie. So I don’t understand how to use EGit. So I use cli git command.
mkdir -p SCM_WORKSPACE/spinner
cd SCM_WORKSPACE/spinner
git init
touch .gitkeep
git add .
git commit -v

Create New Project from existing source

/usr/local/Cellar/android-sdk/r11/samples/android-12/Spinner/

File -> New -> Project -> Android -> Android Project
– Create project from existing source
In my Indigo version(mac os x 10.6.8) does not work next and create test. So I do separate.
ECLIPSE_WORKSPACE/SpinnerActivity completed.

Copy to scm dir and commit

cd SCM_WORKSPACE/spinner
EDITED(2011-07-06 7:10) cp -r option drops dot files.
cp -r ECLIPSE_WORKSPACE/SpinnerActivity .
cp -a ECLIPSE_WORKSPACE/SpinnerActivity .
curl -L https://raw.github.com/github/gitignore/master/Android.gitignore -o SpinnerActivity/.gitignore
git add SpinnerActivity/
git commit -v

Create New Test Project SpinnerActivityTest

File -> New -> Project -> Android -> Android Test Project
Test Target
An Existing Android Project: SpinnerActivity

If then error occurs, you will fix it. You can run SpinnerActivity and SpinnerActivityTest.

Copy to scm dir and commit

cd SCM_WORKSPACE/spinner
EDITED(2011-07-06 7:10) cp -r option drops dot files.
cp -r ECLIPSE_WORKSPACE/SpinnerActivityTest .
cp -a ECLIPSE_WORKSPACE/SpinnerActivityTest .
curl -L https://raw.github.com/github/gitignore/master/Android.gitignore -o SpinnerActivityTest/.gitignore
git add SpinnerActivityTest/
git commit -v

CLI building SpinnerActivity

CI use CLI build, ant. You need “build.xml”. Managing Projects from the Command Line | Android Developers
cd SCM_WORKSPACE/spinner/SpinnerActivity
android update project --name SpinnerActivity --target 5 --path .
git add .
git commit -v
cd ..
ant -f SpinnerActivity/build.xml debug

CLI building SpinnerActivityTest

Test project needs cli building too.
cd SCM_WORKSPACE/spinner/SpinnerActivityTest
android update test-project -p . -m ../SpinnerActivity
git add .
git commit -v
cd ..
ant -f SpinnerActivityTest/build.xml run-tests

This is half way. It’s crazy bad know-how.

Cleanup ECLIPSE_WORKSPACE

Select SpinnerActivity project and Delete. You must check-off “delete project content on disk”. if you check this, then you delete “android-sdk/r11/samples/android-12/Spinner/”.
Select SpinnerActivityTest project and Delete. You must check-on “delete project content on disk”.

Move and Clone, it is just other developer’s setting way

cd SCM_WORKSPACE
mv spinner spinner_origin
git clone spinner_origin/.git spinner

Create New Project from existing source again

SCM_WORKSPACE/spinner/SpinnerActivity

File -> New -> Project -> Android -> Android Project
– Create project from existing source
In my Indigo version(mac os x 10.6.8) does not work next and create test. So I do separate.
ECLIPSE_WORKSPACE/SpinnerActivity completed.

Import Test Project

Eclipse does not have a way to create test project from existing source. So I use import.
File -> Import -> General -> Existing Project into Workspace
SCM_WORKSPACE/spinner/SpinnerActivityTest

EDITED(2011-07-05 6:32):
You *must* check-off copy project into workspace.

Then you must Clean Up and Reflesh.

Finally, you can work TDD and CI. Happy Android Development!

CI Server for Android

The current application development, CI required. Also Android.
My CI experience stands for maybe lamp, centos5.x, 64bit. Android and iOS is against another environment. iOS requires mac. mac? This is another story. Android’s android.test can assert on simulator. Android simulator requires 32bit libraries. 32bit libs into 64bit is possible, but it is not right way. And simulator also requires glibc greater than v2.7. So totally, ubuntu 32bit or fedora 32bit machine requires.

The Other way:
I consider Ecosystem Hosting, but first I choice my own vps. I worry ssh access, switch user jenkins, access to scm repos, commit hook, and source control.

I choice fedora 32bit, because I familiar with redhat os. Below is my history.
fedora13 minimal -> fedora14 32bit jenkins env — Gist

Minimal install confuse me! Below is highlight.
99 man iptables
101 sudo yum list *man*
102 sudo yum install man-pages
110 sudo yum install man-db

Finally, I created 32bit jenkins environment. Jenkins, nginx and postfix.
http://jenkins32.sane.jp/

Recognize IS05 from guest fedora14 on VirtualBox

Only add new udev config file to guest os, guest can recognize IS05.

My environment:
VirtualBox 4.0.4
IS05
Host: Fedora13 64bit
Guest: Fedora14 32bit

First I shutdown guest VM. I connect micro-USB code.
At VirtualBox menu on host, I check ON at USB device, sharp.
Next I start guest VM. Then I check ON at USB device, sharp. This is on guest.

I add udev config file on guest.
Using Hardware Devices | Android Developers

$ sudo touch /etc/udev/rules.d/51-android.rules
$ sudo vi /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"

Sharp is vendor of IS05. So a vendor id is “04dd”.
Last I reboot guest VM. Guest completely recognize IS05.