2017年11月19日日曜日

Firemacsが動かなくなった

Firefox Quantumから、動かなくなったみたい。

Firemacsを使うためだけにFirefoxを使っていて、普段はChromeを使っているので、これを期に、Atomic Chrome for Emacsに切り替えた。


2015年2月19日木曜日

Ubuntu 14.04 LTS をインストールして、Androidアプリの開発環境を整える

久しぶりにLinuxを使おうと思って、Ubuntu 14.04をインストール。(日本語化チームの日本語版ではなくて、本家版をインストール)

その作業メモ。

Google日本語入力のインストール

Goolge日本語入力(Mozc)のパッケージをインストールして、デーモンを再起動する。

$ sudo apt-get install ibus-mozc
$ killall ibus-daemon
$ ibus-daemon -d -x &

メニューバーの右の日本語入力のアイコンをクリックし、[テキスト入力設定...]を選択。
[使用する入力ソース]の下の[+]をクリック。
日本語(Moz)を追加。更に、[日本語]も追加。[日本語(Anthy)]は削除。

[使用する入力ソース]の順番は、[日本語]、[日本語(Mozc)]の順にしておく。
([日本語(Mozc)]だけだと、メニューバーのアイコンの表示が乱れる。)


CtrlキーとCaps Lockキーの入れ替え

Ctrlキーは、aの隣にないと嫌なので、入れ替える。

$ dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps', 'caps:ctrl_modifier']"

一度、ログアウトして再ログインする。

ハイバネートを有効にする

ノートPCなので、ハイバネートを使いたい。

$ sudo vi /var/lib/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

でファイルを作成・編集。
以下の内容を追加。

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

PCを再起動する。

Oracle JDKのインストール

Androidアプリを開発するので。
PPAリポジトリを使ってインストール

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

$ sudo apt-get install oracle-java8-set-default

で、デフォルトをOcacle Javaに変更

AndroidStudioのインストール

ダウンロード・ページからダウンロード。
適当なフォルダに展開。
android-studio/binにパスを設定。
AndroidStudioを起動。
設定を進めていくと最後にAVDManagerが起動できないとエラーが発生する。

32bit ライブラリが必要なので、インストール





2014年11月16日日曜日

EmacsでKawaを動かすための設定

苦戦したので、メモ。
(-sを付けるのが分からなくて、苦戦 )
jarのパスは、個別の環境に合わせる。


(setq scheme-program-name "java.exe -cp c:/cygwin/usr/local/kawa/kawa-1.14.jar kawa.repl --full-tailcalls --warn-undefined-variable=no --warn-invoke-unknown-method=no -s")
(require 'cmuscheme)

(defun scheme-other-window ()
  "Run scheme on other window"
  (interactive)
  (switch-to-buffer-other-window
   (get-buffer-create "*scheme*"))
  (run-scheme scheme-program-name))

(define-key global-map
  "\C-cS" 'scheme-other-window)

2014年11月1日土曜日

Android Wearアプリ開発環境の構築 (Android Wearアプリの開発 その2)

前回は、開発を始める前に、参考サイトを調べてみた。

Android Studioのインストールとかが書いてなかったので、ここで記載しておく。

開発の必要条件


Android Wearアプリを開発するには、
・Android Studio 0.8以降
・Gladle 0.12以降
が必要になる。

Gladleは、Android Studioの中に含まれるので、インストールすつのは、Android Studioだけでいい。

Android Studioを動かすには、
・JDK 6か7
が必要。(Android Lに対応するにはJDK 7が必要なので、JDK 7がいいだろう。JDK 8はまだ早いと思うし、Java 7としてコンパイルする必要があるみたいなので、Java 8の機能を間違って使ってしまってハマるのが嫌な人や初心者は、JDK 8はやめておくべき)

Java Development Kit(JDK)のインストール

OracleのJDKのダウンロードサイトからJDKをダウンロードしてインストールするだけ。

Android Studioのインストール

Androidの開発者サイトのAndroid Studioのダウンロードサイトからダウンロードしてインストールするだけ。

2014年9月7日日曜日

Android Wear(スマート・ウォッチ)アプリの開発をはじめよう(Android Wearアプリの開発 その1)

Android Wearと言っても、メガネの方じゃないよ、時計だよ。

Android Waerを使ってみる


まずは、スマート・ウォッチを買いましょう。
実機を使わないで、人に使ってもらえるアプリは作れません。購入は以下から。
Samsung Gear Live
LGも出しているけど、丸いやつが本命だと思うので、今、買うならサムスン製がいいと思う。(モトローラは相手にしないw) 日本メーカのものが欲しいなら、ソニー製のが発表されているので待ってみるのも。

買って使ってみると楽しいし、それなりに生活を変えるデバイスであると実感できると思う。
ただし、使い込んでみると、デフォルトのままだと、色々と不満が出てくると思う。

何が不満って、UIが基本的に音声であるところである。
Voice command User Interface(VUIって呼ばれるようになるのだろうか)は、Graphical User Interface(GUI)から、Command line User Interface(CUI)への退化になんだよね。音声でアプリを起動するって言うことは、現時点では、起動するためのコマンドを覚えておかなくてはいけない事を意味する。人工知能を搭載して、ちょっと間違っていても、望みのアプリが起動するなら問題ないのだけれど。
あと、大きな問題として、電車の中で「Ok, Google」とか、「Ok, glass」なんて恥ずかしくて言えない。Googleは、電車の中で、全員が「Ok, Google!」って言い出したらどうなるか、想像しなかったのだろうか。

ではなぜ、Googleが音声入力を選んだかっていうと、アメリカは基本的に車社会だからだ。車を運転しながら、使うには、ハンズフリーでないといけない。だから、Android Autoでも、音声入力をメインに押し出している。この方針が世界的に正しいのかどうかは分からない。少なくとも日本では間違いだ。(田舎は車社会だと言うけど、スマートデバイスなんか使わない人ばかりだから、スマートウォッチのマーケット外)

でも、使うアプリの起動の単語を正確に覚えていられないし、周りに人がいない状態ばかりではない。なので、ランチャー・アプリを使うことから、カスタマイズが始まる。
Wear Mini Launcher
これで、電車の中でも、静かにいい子にしてられる(苦笑)。

他に、何かいいアプリはないかなって思ったら、
Android Wearに絶対入れたいアプリ10 システム系編
Android Wearに入れておきたいアプリ10 ツール編
を見るのがいいだろう。(2014/09/07 現在)

Gear Liveの時計のデザインは綺麗なんだけど、別のものに変えたくなってくる。そこで、
Android Wearの無料時計アプリをすべて並べてみた
なんかで探してみる。

そうやって、カスタマイズしているうちに、Google Playで検索してみるようになる。

特集
ヘルス&フィットネス
トラベル&地域
ソーシャル
ツール
コミュニケーション
生産性向上
さらに

でも、探しても似たようなアプリばっかりで、自分の問題を解決してくれるアプリは見つからない。

そう感じたら、自分でアプリを作ろう。それは、世界にただ一つのアプリで、あなたと同じ問題を抱えている人にとっては役に立つアプリで、世界をよりよい方向へ変えるアプリになるだろう。

アプリの開発の準備


前置きが長くなってしまったが、アプリの開発を始めよう。

まずは、Androidアプリの開発者の本家のサイトを見ないことには始まらない。
Android Developers Android Wear
英語に、躊躇しない人なら、ここを一通り見るだけで十分だろう。

以下、英語の苦手な人へ

開発環境の構築方法

@ITでの記事を見ながら構築していくのがいいだろう。
ウェアラブル端末用Android Wearアプリ開発の基礎知識 (1/4)


開発の参考サイト


開発環境の構築はできたら、アプリ開発といきたい所だが、何を見て開発するかが、問題。
ひとまず、日本人のAndroidアプリ開発者でこの人を知らなかったらモグリのサイトから。
Android Wear アプリ開発 その1
Android Wear アプリ開発 その2
Android Wear: The developer's perspective
Android Wear : ambient 時は onMeasure() や onLayout() は呼ばれない。
Android Wear のデザイン関係のセッション
Samsung Gear Live と LG G Watch のセンサーリスト
と、見てみたけど、Androidアプリの開発が出来る事が前提になっているなあ。最近、yanzmさんの翻訳量が落ちてきているんだよなあ。

という訳で、他の頑張っている人を紹介。

まず、デザイン(設計って意味ですね)について
Android Wearのためのデザイン 目次
この辺を見て、どんな機能を持たせるか、どんな画面構成にするかをまずは考えるとよい。

アプリの設計ができたら、実装をする。
ウェアラブル向けアプリを作る 目次
を参考にしながら、実装するのがいいだろう。

Android Wearは、「kenji matsuoka」にお世話になるのかな。

2013年4月26日金曜日

Androidアプリの画面をdpでデザインする: Design layout of Android App with dp

Androidでは、1ピクセルの大きさが、機種によって大きく異なる。
そのため、一辺の長さを100ピクセルに指定してサムネイルの画像を表示すると、機種によっては大きさが半分ぐらいになってしまう。

では、機種に依存せずに、同じ見た目の大きさにするにはどうしたらよいのだろうか?
そのためには、ピクセルの単位で大きさを指定するのではなく、dip、pxと文字数を合わせてdpと呼ばれる事が多い、の単位で大きさを指定すればよい。
dipは、device independent pixcel(端末非依存ピクセル)の略で、1辺の大きさが1/160インチの仮想的なピクセルである。

前述のサムネイルの大きさがまちまちになる問題を避けるには、100ピクセルと言ったサイズを指定するのではなく、50dpと言うようにサイズを指定すればよい。そうすれば、見た目の大きさはすべての端末で同じ大きさになり、問題は解決する。

しかし、である。Androidは、端末の画面サイズも機種によりまちまちである。
例えば、50dpのサムネイルは横に幾つまではみ出さずに表示できるのだろうか?と言う疑問に突き当たる。
そこで、各種端末の画面の大きさをdp単位で求めてみたのが下表である。

表: 端末毎のdp単位で求めた画面サイズ
機種: Modelディスプレイサイズ: Display Size
(inch)
幅: Width (px)高さ: Height (px)dpi幅: Width (dp)高さ: Height (dp)
HTC Desire3.7480800252305508
Xperia4.0480854245314558
Galaxy S4.0480800233329549
Galaxy Nexus4.77201280312369655
Xperia Z5.010801920441392697
Galaxy Note5.38001280285449719
Galaxy Note II5.57201280267431767
Galaxy Mega 6.36.37201280233494879
Galaxy Tab7.06001024170566966
Nexus 77.08001280216594950
Optimus Pad8.976812801687331,221
Nexus 1010.0160025603028481,357

上記の表を見ると、縦画面の場合、HTC DesireからGalaxy Sまでは6つ、Galaxy NexusからXperia Zまでは7つ、Galaxy Noteは8つということが分かる。

このように、大きさをdp単位で指定し、各端末の画面サイズはdp単位の大きさを持つと考えるて、画面のレイアウトを考えればよい。

結構面倒な気もするが、画面の大きさがまちまちなのは、PCのブラウザの画面も同じなので、レイアウトの考え方は、ブラウザと同じように考えればよい。

ブラウザで横幅のレイアウトを考えるとき、%指定で幅をしていすれば上手く行く事が多い。Androidの場合、大きさを0dpと指定し、weightで幅の割合を指定すると、同様の事ができる。このように、HTMLやCSSでのレイアウトのテクニックをAndroidのレイアウトのXMLファイルで応用できないかを考えるとよい。実際、XMLファイルで指定できる属性は、HTMLでも名前が違うだけで同様の属性がある事が多い。

2013年2月8日金曜日

課金APIの概略 - Androidのアプリ内課金(In-App Billing)のまとめ (その2)

課金API概略


開発者のアプリは、端末にインストールされているGoogle Playアプリによって公開されているAPIを使って、課金サービスにアクセスする。
Google Playアプリは、課金リクエストとその応答を、Google Playサーバーと開発者のアプリの間で運ぶ。開発者のアプリは直接Google Playのサーバーと通信する事はなく、課金要求は、プロセス間通信(IPC)を介して、Google Playアプリへ送られる。

アプリ課金は、Google Playを介して配布されたアプリの中でのみ実装できる。また、課金要求を完了するには、Google Playアプリがネットワークを通じてGoogle Playサーバーにアクセスする必要がある。

APIの仕様は、Version 2とVersion 3とで大きく異なる。大きな相違点は以下の通り。

  • Version 2は非同期で処理されるが、Version 3では同期で処理される点である。
  • Version 2は、Android 1.6以降でサポートされるが、Version 3は、Android 2.2以降でサポートされる。

Version 3 APIの概略


購入フロー


購入の典型的な流れは以下の通り。
  1. IInAppBillingService#isBillingSupportedのリクエストをGoogle Playに送って、端末がアプリ課金APIをサポートしているかどうかを決定する。
  2. 次に、アプリ開始時もしくはユーザーがログインしたタイミングで、IInAppBillingService#getPurchasesのリクエストを送って、ユーザーが製品を購入済みかどうかをチェックする。Google Playは、購入済みの製品のIDを含むBundleを返す。
  3. 大抵の場合、購入可能なアイテムの情報をユーザーに示す必要がある。Google PlayのDevelopper Consoleで定義した製品の詳細情報を問い合わせるには、IInAppBillingService#getSkuDetailsを送ればよい。Google Playは、価格、タイトル、説明、製品タイプを含むBundleを返す。
  4. 製品がユーザーによって購入されていなければ、即座に購入を開始できる。購入するには、まず、product ID等を含むIInAppBillingService#getBuyIntentを送って購入のためのIntentをGoogle Playから取得する。product IDを指定するため、開発者はDevelopper Consoleで新しい製品を定義したときに、product IDをメモしておく必要がある。その後の流れは以下の通り。
    1. Google Playは購入を開始するためのPendingIntentを含むBundleを返す。
    2. アプリは、PendingIntentをActivity#startIntentSenderForResultを呼び出して、開始させる。
    3. 購入のフローが完了したら、Google Playは、Activity#onActivityResultに応答のIntentを送ってくる。

購入製品の消費


    ユーザーが購入した製品を消費した事にした場合の流れは以下の通り。
    1. IInAppBillingService#getPurchasesのリクエストを送って、ユーザーが製品を購入済みかどうかをチェックする。
    2. 購入していれば、IInAppBillingService#consumePurchaseを呼び出して、消費した事にする。