読者です 読者をやめる 読者になる 読者になる

ISW11HT にAndroid4.4.2 kitkat を導入する

Android

はじめに

HTC EVO WiMAX ISW11HT にAndroid 4.4.2 Kitkaを導入した際のメモになります。

本エントリは、完結した情報ではなく、リンク先URLの情報を補うメモと捉えてください。

Kitkat の導入は公式ファームアップデートではなく、いわゆるカスタムROMという形で導入します。 当然、自己責任です。

ざっくり言うとと

私の端末はファームアップデートを行い 2.29.970.01 というバージョンでした。

この状態からはROOT化、S-OFF(セキュリティOFF)ができないため、以下の手順で作業をしました。

  1. ファームウェアのダウングレード

  2. ROOT化&S-OFF

  3. TWRP 導入

  4. カスタムROM導入

ファームウェアのダウングレード

  • 参考となるURL http://www.gorochan.net/archives/1365

    • URL先の手順通り進める。以下注意点
      • QuickRoot は2回めの再起動直後、白いメッセージが出たらすぐにUSBを抜く
        • Android のオレンジが出たらRootが解除されてしまう。
      • また、# /data/local/tacoroot.bin --undo の後は、 C:>adb reboot bootloader ←ISW11HTをFastbootモードに移行 C:>fastboot devices ←fastboot接続できているか確認(devicesに表示されたらOK) C:>fastboot oem rebootRUU ←RUU書き込みモードへ移行 で、RUUモードへ移行してから RUU_SuperSonic_K_KDDI_JP_1.05.970.1_Radio_2.15.00.03.04_NV_2.11_release_176711_signed.exe を実行する。

S-OFF(セキュリティオフ)とRoot化

- ここまでの状態で、OTAで2.16.970.2までファームアップデートを進める

-以下のURLを参考に S-OFFとRoot化を行う
  http://uncofiles.blog84.fc2.com/blog-category-1.html

TWRPの導入

- TWRP

http://forum.xda-developers.com/showpost.php?p=51010876&postcount=24 - PC36IMG_TWRP_Recovery_2.7.0.0_SELinux_CPTB.zip をPC36IMG.zipにリネームし、 SDカード直下に配置 ブートローダーを起動(VOLUP&DOWNで電源)RECOVERYを実施 TWRPが起動する。

TWRP インストールは次のURLが参考になります。

文鎮製作工房 ISW11HTにMazwoz-Supersonic-JB-B4を導入。ISW11HTもついにAndroid4.2の未来へ

"TWRP 2.3.2.1のインストール方法"という節からがインストールの方法です。 詳細はリンク先にゆだねますが、ざっくりいうと

  1. GooManager をインストール

  2. GooManager のメニューからTWRP をインストール

AndroidStudio で補完候補の決定をReturn 以外で行う

Android プログラミング 開発環境

photo by etnyk

AndroidStudio の補完について

AndroidStudio ではEclipse と同様、コードの補完(Completion)を行ってくれます。

キーマップをEmacs ライクに設定している場合、候補の選択はC-p, C-n でできるのですが、決定の際にReturn を押さなければなりませんが、これでは動作に無駄があります。

これをC-m などにする方法を調べました。

補完の決定キーを割り当てる

Preferrence->IDE Settings->Keymap から設定を行います。

f:id:zonomasa:20140413181401p:plain

"Choose Lookup Item" がその名の通り、アイテムを決定するためのキーになります。これにC-m を追加します。

おわりに

AndroidStudio の補完ウィンドウの決定にReturn 以外を割り当てる方法を説明しました。

f:id:zonomasa:20140413181657p:plain

Androidオープンソースライブラリ徹底活用

Androidオープンソースライブラリ徹底活用

OSX Mavericks にemacs24 をインストールする

emacs プログラミング 開発環境

photo by juergenfenn

はじめに

その都度様々Blogを調べて回ることになるMac環境へのEmacs インストール。ここでは備忘録として、OSX Mavericks にEmacs24.3 をインストールする手順をまとめます。

Cocoa 環境で、日本語はGoogle日本語入力を使用しています。日本語入力がアクティブな状態でC-xb などのショートカットを用いると、bが正しく入力できません。その対策として日本語パッチを導入したEmacsをインストールする必要があります。

インストール手順

もし古いEmacs がインストールされている場合はアンインストールを行います。

$ brew uninstall emacs 

Homebrew のFomula をアップデートします。

$ brew update

Emacs をビルドします。

$ brew install --cocoa -srgb --with-gnutls --japanese emacs

--japanese を付けることで日本語のパッチがあたります。

日本語入力の設定

以下の設定を~/.emacs.d/init.elに追加します。

;; CmdとOptの入れ替え
(setq ns-command-modifier (quote meta))
(setq ns-alternate-modifier (quote super))

;; Google 日本語入力
(setq default-input-method "MacOSX")
(mac-set-input-method-parameter "com.google.inputmethod.Japanese.base" `title "あ")

下の2行を書くことで、Emacs からMac の日本語入力を切り替え、かつ現在のステータスをモードラインに表示することができます。

一般的には日本語入力の切り替えはC-\に割り当てられています。

Commad キーとOption キーの入れ替えを行っているのは、M-xを押しやすくするためです。ただしこれはポジショニングや使用頻度によって感覚が異なるでしょう。

おわりに

Mavericks へのEmacs24のインストール方法を説明しました。

参考にしたURL

EmacsでIMEと仲良くする - Qiita

HomebrewのEmacsにIMEインラインパッチが取り込まれたので設定した - @znz blog

Emacsテクニックバイブル ?作業効率をカイゼンする200の技?

Emacsテクニックバイブル ?作業効率をカイゼンする200の技?

Raspberry PI がその日の天気を教えてくれる

raspberry pi プログラミング ワンライナー

photo by cindy47452

はじめに

その日の天気をチェックし雨なら傘を持っていく、当たり前のことに聞こえますが、朝が弱くものぐさな人間には困難の多い作業です。

”調べる”のは面倒だけれども、”教えてくれる”なら聞いてやろう、ということで天気を調べてお知らせしてくれる仕組みをRaspberry PI に組み込みました。

いわゆるXFD(eXtreme Feedback Device)というものに近いのかもしれません。

今回のソースコードGithubで公開しています。

大まかな流れ

指定の時刻になったら、天気予報をネットから取得し、結果をLED で通知します。これだけです。

LED を光らせるためには

Raspberry PI のGPIO にLEDを接続する必要があります。

天気の取得

以前紹介したWeather Hacks - livedoor 天気情報を利用します。

LED の接続

LEDはGPIO に接続します。GPIO は下の写真の剣山のようにピンが立っている部分です。

f:id:zonomasa:20140321074538j:plain

それぞれのピンごとに役割が違います。詳しくは以下のURLを参考にしてください。 RPi Low-level peripherals - eLinux.org

今回はGPIO 17, 27番に2色のLEDを接続しました。

LED はブレッドボードというものに差し込みます。 半田付けをせずにLED と抵抗、基盤を接続できる優れものです。

普通のブレッドボード

普通のブレッドボード

ブレッドボードと基盤を接続するにはジャンパワイヤが必要です。 Raspberry PI 基盤側にメスが必要で、ブレッドボード側にオスが必要なのでオス-メスの商品がよいでしょう。

ジャンパワイヤ(オス?メス) 10本セット

ジャンパワイヤ(オス?メス) 10本セット

今回の天気表示では黄色と青のLEDを主に使います。いかにAmazonリンクを貼りますが、少し高いですね。秋葉原などが近ければ電子パーツ店の個売りを利用するのが良いでしょう。抵抗についても同様です。

NO.15 高輝度LED(青色・3mm)

NO.15 高輝度LED(青色・3mm)

NO.16 高輝度LED(黄色・3mm)

NO.16 高輝度LED(黄色・3mm)

抵抗は470Ωのものを使っています。秋葉原などでは1本5円で売っています。

接続方法は以下の回路図のようにしました。基本的な接続順はGPIO->LED->抵抗->Ground となります。

f:id:zonomasa:20140321082438p:plain

今回、赤のLEDは使っていません。

LED の点滅

LEDはコマンドラインから次のような流れで明滅させることができます。

# 27 番に接続したLEDの点滅 
$ sudo su
$ echo 27 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio27/direction
$ echo 1 > /sys/class/gpio/gpio27/value
$ echo 0 > /sys/class/gpio/gpio27/value
$ echo 27 > /sys/class/gpio/unexport

今回はRuby で制御をしたいので上記作業を抽象化したモジュールを書きました。

# -*- coding: utf-8 -*-

module LED
  private
  def self.led_open(no)
    begin
      exp = open("/sys/class/gpio/export", "w")
      exp.write(no)
      exp.close
    rescue => err
      puts err
    end
  end

  def self.led_close(no)
    uexp = open("/sys/class/gpio/unexport", "w")
    uexp.write(no)
    uexp.close
  end

  def self.led_out(no)
    dir = open("/sys/class/gpio/gpio#{no}/direction", "w")
    dir.write("out")
    dir.close
  end

  public
  def blink10(no)
    led_open(no)
    led_out(no)
    out = 1
    10.times do
      val = open("/sys/class/gpio/gpio#{no}/value", "w")
      val.write(out)
      val.close
      out = out == 1 ? 0 : 1
      sleep 0.2
    end
    led_close(no)
  end

  def on(no)
    led_open(no)
    led_out(no)
    val = open("/sys/class/gpio/gpio#{no}/value", "w")
    val.write(1)
    val.close
    led_close(no)
  end

  def off(no)
    led_open(no)
    led_out(no)
    val = open("/sys/class/gpio/gpio#{no}/value", "w")
    val.write(0)
    val.close
    led_close(no)
  end
  module_function :on, :off, :blink10
end

このファイルをrequire して、以下のようにすれば希望のGPIO番号のLEDにたいしてON、OFF、点滅(10秒)を指示できます。

require 'pi_led'

LED.on(17) # 17番を点灯
LED.off17) # 17番を消灯
LED.blink10(17) # 17番を10秒間点滅

天気予報を表示する

ここまでの仕組みを使って最終的に以下のコードで天気予報を実現しました。

# -*- coding: utf-8 -*-

$:.unshift File.dirname(__FILE__)  # ロードパスにカレントディレクトリを追加

require 'json'
require 'pi_led'

LED.off(17)
LED.off(27)

LED.blink(17)
LED.blink(27)

# 今日の天気を取得 130010は地域コード
# 地域コード変更の場合は http://weather.livedoor.com/forecast/rss/primary_area.xml
tenki = JSON.parse!(`curl http://weather.livedoor.com/forecast/webservice/json/v1?city=130010`)["forecasts"][0]["telop"]

if // =~ tenki.to_s
  LED.on(17)  # 雨の場合は青いLEDを光らせる
else
  LED.on(27)  # 雨が降らない場合は黄色いLEDを光らせる
end

これにより雨で傘が必要なときは青いLEDが光り、傘が不要なときは黄色いLEDが光ります。

まとめ

Raspberry PIを用いて天気予報を行う仕組みを作成しました。 具体的にはその日の天気予報を取得し、傘が必要か否かをLEDの色で表示してくれるというものです。

朝起きて目に付く場所にRaspberry PIをおくことで、傘の忘れ物を防ぐことができるでしょう。

学べた技術要素としては以下の3点です。 ・LED を光らせるための電気的な知識(抵抗、電圧) ・Raspberry PI のGPIOにLEDを接続する ・Raspberry PI のGPIOをRubyで制御する

Raspberry Pi Type B 512MB

Raspberry Pi Type B 512MB

参考にしたURL

コチョナナバ: Raspberry PiとRubyでLEDをチカチカさせる

EnterとTabを封印してLinux環境でのタイプ効率を上げる

emacs プログラミング Linux

photo by Jess Robinson

Enter に手を伸ばす非効率

※この記事はCtrlを多用する事を好む一部のマニア向けのものです

タイピング時にホームポジションから手を移動させるのはタイプ効率が悪いと感じています。私の場合、Thinkpadキーボード(トラックポイント付き)を使い、多くのキーボードショートカットを覚えても、どうしてもホームポジションから手を移動させてしまう癖があります。

それはEnterとTabを押す時です。

Enterは改行時や変換確定時、Tabはコンソール上の作業で補完を行うときによく押してしまいます。その他にも人によってはインデントされたプログラムコードの文頭に移動するときなどにTabを使うかもしれません。

これらのタイプはもちろんCtrl-m、Ctrl-iでそれぞれ代用できます。Enter,Tabを使うポイントでしっかりとこれらCtrl系のショートカットを使えればタイピングの効率は多少なりとも上がるでしょう。

Enter を封印して使えなくする

使わないように我慢する、というのはこらえ性の無い私のような人間には不向きです。

ならば話は簡単、使えないようにすれば良いです。

Linuxでキーを封印するやり方

封印はxmodmapという仕組みを使います。

まずは封印したいキーのキーコードを調べます。

 $ xev

xev コマンドを立ち上げ、対象となるキーをタイプすると、そのキーの情報が表示されます。その中にKeyCode という数値がありますのでこれを覚えます。Enterは36でtabは23でした。

次にXmodmapに渡すための設定ファイルを次のように書きます。

keycode 23 = NoSymbol
keycode 36 = NoSymbol

これをこれを~/.xmodmap という名前で保存し、以下のコマンドを実行します。

 $ xmodmap ~/.xmodmap

これでEnterとTabが動作しなくなったはずです。

まとめ

EnterとTabを押す癖を治すことでタイピングの効率が上がるのではないかと考えました。

実践してみて気がついたのは、Enterはほとんど困る場面が無いのですが、TabがつかえないとAlt-Tabでのウインドウ切り替えが使えないためかなり不便になります。

しかし、期間限定でタイピングを矯正するためにこれらキーを封印するのは効果的だと感じています。

ちなみに、タイピング効率がー云々、などと言いましたが、よく言われるプログラムのパフォーマンス向上施策と同様、作業全体において支配的で無い部分の効率化を測っても、トータルの生産性は殆ど変わりません。

Ubuntu にiPhoneがマウントできない問題の解決方

Linux iphone

はじめに

Ubuntu13.04または13.10にて、iOS7のiPhoneがマウントできないという現象があり、しばらくの間困っていました。

環境はMac OSX 上のVMWare 環境なのですが、調べてみるとこれに限らず発生しているようです。

具体的な症状

iPhoneをUSBケーブルでPCに接続すると、このPCを信頼しますか?というダイアログが出ます。

ここで信頼するを押しても直後にまた同じだが出てしまい、ubuntu側からiPhoneを認識することができません、

解決策

ubuntuiPhoneの接続を担うのはlibimobiledeviceというライブラリでこれをアップデートすればこの問題は修正されるという情報を見つけました。

How To Mount iPhone Or iPad With iOS 7 In Ubuntu 13.10

リンク先ではlibimobiledeviceの最新版をビルドしたものも配布してくれています。

  • この.debファイルをパッケージマネージャでインストールし再起動することで無事iPhoneをマウントすることができるようになりました。

まとめ

  • Ubuntu13.04, 13.10にiOS7のiPhoneを接続してもマウント出来なかった
  • 文中リンク先のlibimobiledeviceの最新版をインストールすることで、問題は解決された

CMAKE によるビルド自動化とテスト実行

プログラミング 開発環境

photo by kitware

CMAKE とは

CMAKE はプラットフォームに依存しないビルド方法を記述するためのツールキットです.CMAKE独自の書式で書かれたビルド記述をcmake コマンドに渡すと、MakefileやVisualStudio,Xcodeのプロジェクトファイルを生成してくれます.

つまり、一度CMAKE でビルド方法を書けば、あらゆるプラットフォームでプログラムをビルドできるわけです.

CMAKEを試してみる

以下の様なツリー構成のライブラリプログラムでCMAKE を用いたビルド・テスト環境を作成してみました.

cmake
├── krmalloc
│   └── krmalloc.c
└── krmalloc_test
     └── krmalloc_test.c

krmalloc.c はライブラリコードです.このソースコードを元にlibkrmalloc.c を作成したいです.krmalloc_test.c はkrmalloc のテストコードです.

krmalloc はK&R のC言語本 に記載のmalloc関数の実装を真似たものです.ここでは中身には触れません.

ソースツリーのトップ(cmakeディレクトリ)でビルドとテストを実行できるようにすることを目的とします.今回の環境はLinux で、CMAKEコマンドからMakefile を出力するようにします.

CMAKE のインストール

CMAKEのインストールはソースコードからインストールする方法とバイナリを取得する方法があります.

私の環境Ubuntu13.04 では$ sudo apt-get install cmake で簡単にインストールすることが出来ました.

ソースツリーのトップのCMakeLists.txt

まずはソースツリーのトップにCMakeLists.txt を置きます.中身は以下のようになります.

# このバージョン以上のCMAKEを使うよう宣言
cmake_minimum_required(VERSION 2.8.1)

# プロジェクト名
project(cmakesample C)

# バージョン番号
set(serial "1.0.0")

# テストを有効にする.CTestによるテスト実行が可能になる
enable_testing()

# サブディレクトリを指定.指定したディレクトリ内のCMakeLists.txt が実行される
add_subdirectory(krmalloc)
add_subdirectory(krmalloc_test)

# テストの登録.krmalloc_testディレクトリの krmalloc_test バイナリを
# 'test01'として登録する.
add_test(test01 krmalloc_test/krmalloc_test)

krmalloc ディレクトリのCMakeLists.txt

krmalloc ディレクトリのCMakeLists.txtを以下のように書きます.

# このバージョン以上のCMAKEを使うよう宣言
cmake_minimum_required(VERSION 2.8.1)

# プロジェクト名.C言語であることを宣言
project(cmakesample C)

# リリースビルドのためのコンパイラオプション
set(CMAKE_C_FLAGS_RELEASE "-Wall -Wextra -O2")

# デバッグビルドのためのコンパイラオプション
set(CMAKE_C_FLAGS_DEBUG "-Wall -Wextra -g")

# ライブラリの作成を指示.SHARED で共有ライブラリ.
# krmalloc.c を元に、libkrmalloc.so という名前で作成される.
add_library(krmalloc SHARED krmalloc.c)

add_library を複数書くことにより、ライブラリに複数のソースコードを含めることができます.

デバッグとリリースの切り替えはcmake コマンドの引数によって行います. 詳しくはコマンドの説明の部分で書きます.

krmalloc_test ディレクトリのCMakeLists.txt

krmalloc_test ディレクトリのCMakeLists.txtを以下のように書きます.内容はkrmalloc のCMakeLists.txt と同じです.

cmake_minimum_required(VERSION 2.8.1)

project(cmakesample C)

# build options for release
set(CMAKE_C_FLAGS_RELEASE "-Wall -Wextra -O2")

# build options for debug
set(CMAKE_C_FLAGS_DEBUGE "-Wall -Wextra -g")

link_directories(../krmalloc)

add_executable(krmalloc_test krmalloc_test.c)
target_link_libraries(krmalloc_test krmalloc)

ビルドを行う

最終的にツリーは以下のような構成になりました.

cmake
├── CMakeLists.txt
├── krmalloc
│   ├── CMakeLists.txt
│   └── krmalloc.c
└── krmalloc_test
│   ├── CMakeLists.txt
     └── krmalloc_test.c

ここまで準備ができればビルドを行うことができます.

$ cd cmake
$ cmake .        # '.' を忘れないように!
$ make
$ make test

これでテストまで実行されるはずです.

デバッグモードでビルドするためにはcmake コマンド部分以下のようにします.

$ cmake -DCMAKE_BUILD_TYPE=Debug .

まとめ

クロスプラットフォーム環境向けビルドツールのCMAKEを試しました.

一度書くだけで、ソースツリーをあらゆる環境でビルドできるのは非常に頼もしいです.一方で、CMAKEの記法は独自のものであり、習得に時間がかかるのも事実です.