2015年5月7日木曜日

Android Studioでファイル保存時にcode formatterを自動適用する

mac版のAndroid Studioを想定しています。
Command+sでソースコードを保存するときに、自動的にコードフォーマッタを適用する方法です。
Android Studioの設定にはコードフォーマッタを自動適用する項目がないので、マクロを使って実現します。
  1. Code -> "Optimize Imports..."を選択. ダイアルログが表示されるので"Do not show this message again."にチェックを入れRunをクリック. (既にチェック済みの場合はダイアログは表示されない)
  2. Edit -> Macros -> "Start Macro Recording"を選択.
  3. Code -> "Optimize Imports..."を実行.
  4. Code -> "Reformat Code"を実行.
  5. File -> "Save all"を実行. 適当なマクロ名(formatted saveとか)を付けて保存.
  6. Android Studio -> "Preferences..." -> Keymap を選択.
  7. "Main Manu" -> "Edit"-> "formatted save"(自分で付けたマクロ名)を選択し、 右クリックで"Add Keyboard Shortcut"を選択.
    "First Stroke"のところで設定したいキーを入力. 例えばCommand+s. "OK"を選択して完了.
    Command+sを選択すると、既存のキーバインドを削除するか?と聞かれるので, "Remove"を選べばOK.
以上で、Command+sでファイル保存時にコードフォーマッタが自動適用されるようになります。

2015年1月16日金曜日

Raspberry Piで有線ネットワークが使えなくなった

Raspberry Piで有線ネットワークが使えなくなったので調べてみました。
ifconfigで見てみるとeth0にIPアドレスが割り当たってない…。

Raspberry Pi起動時のログを見てみると
[ ok ] Network Interface Plugging Daemon...skip eth0...done. 
と表示されていました。eth0の何かがスキップされているっぽい。
$ sudo ifdown eth0
$ sudo ifup eth0
とかやっても全然回復せず。
いろいろ調べた結果、以下の手順で回復しました。
$ sudo service networking stop
$ sudo service ifplugd stop
$ sudo dhclient -r
$ sudo killall -9 dhclient
$ sudo dhclient -v eth0
この後、
$ sudo reboot
で再起動すると、無事IPが割り当てられネットワークが使えるようになりました!

2014年11月15日土曜日

macでスクリンショットをとる

Macスクリーンショットをとる方法.
  • 画面全体のスクリーンショット:「command(⌘) + shift + 3」
  • 領域を指定してスクリーンショット:「command(⌘) + shift + 4」→マウスで領域を指定
  • 指定したWindowのスクリーンショット:「command(⌘) + shift + 4」→ スクショをとりたいWindow上で「Space」キーを押す. その後Windowをクリック.
PNGがデスクトップに保存されます.

eclipseでエディタを分割する方法

eclipseでエディタ画面を分割する方法です。

違うファイルを分割表示する

エディタのタブの部分をドラッグすると画面分割のガイドが表示されるので適当なところでドロップすればOK.

同じファイルを分割表示する

タブ部分を右クリックし「New Editor」を選択する. 同じファイルのタブがもう一つ作成されるので、違うファイルの時と同じように分割する.

「New Editor」が表示されない場合
「Window」メニューから「New Editor」を選んでも同じことができます.

2014年6月15日日曜日

Raspberry PiでGPIOにアクセスしてPermission denied

Raspberry PiでGPIOにアクセスするプログラムを実行しようとするエラーになる.
$ ruby sample1.rb 
bcm2835_init: Unable to open /dev/mem: Permission denied
/var/lib/gems/1.9.1/gems/pi_piper-1.3.2/lib/pi_piper/spi.rb:89: [BUG] Segmentation fault
ruby 1.9.3p194 (2012-04-20 revision 35410) [arm-linux-eabihf]
...(省略)...
/dev/memにアクセスしようとしてPermissionがないと怒られている. どうやらGPIOにアクセスするにはroot権限が必要っぽい. sudoで実行して解決!
$ sudo ruby sample1.rb 
...(省略)...

pi_piperのインストールに失敗する

gemでpi_piperをインストールしようとしたが、下記のようなエラーが出てインストールできない.
pi@raspberrypi:~$ sudo gem install pi_piper
Building native extensions.  This could take a while...
ERROR:  Error installing pi_piper:
    ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from extconf.rb:4:in `<main>'

Gem files will remain installed in /var/lib/gems/1.9.1/gems/ffi-1.9.3 for inspection.
Results logged to /var/lib/gems/1.9.1/gems/ffi-1.9.3/ext/ffi_c/gem_make.out
pi@raspberrypi:~$

どうやらpi_piperを入れるには ruby_ffi というパッケージが必要らしい. apt-getでインストール.
pi@raspberrypi:~$ sudo apt-get install ruby-ffi
...省略...
自動でgemに登録されないので、手動で登録. 以下はrubyのバージョンが1.9.1の場合の例.
pi@raspberrypi:~$ cd /var/lib/gems/1.9.1/specifications/ 
pi@raspberrypi:~$ sudo ln -s /usr/share/rubygems-integration/1.9.1/specifications/ffi-1.0.11.gemspec .
gem listで正しく登録できているか確認できます.
pi@raspberrypi:/var/lib/gems/1.9.1/specifications$ gem list

*** LOCAL GEMS ***

ffi (1.0.11)
pi@raspberrypi:/var/lib/gems/1.9.1/specifications$ 
再度gemでpi_piperをインストール.
pi@raspberrypi:~$ sudo gem install pi_piper
Fetching: pi_piper-1.3.2.gem (100%)
Successfully installed pi_piper-1.3.2
1 gem installed
Installing ri documentation for pi_piper-1.3.2...
unable to convert "\x80" from ASCII-8BIT to UTF-8 for lib/pi_piper/libbcm2835.img, skipping
Installing RDoc documentation for pi_piper-1.3.2...
unable to convert "\x80" from ASCII-8BIT to UTF-8 for lib/pi_piper/libbcm2835.img, skipping
pi@raspberrypi:~$
成功しました!

2014年6月9日月曜日

MacでRasberry Piをセットアップする


MacでRaspberry Piのセットアップする手順をまとめます. NOOBSを使ってます. 詳細な手順はオフィシャルサイトを参照.

1. ここから ‘NOOBS (offline and network install)’ のzipをダウンロード.
http://www.raspberrypi.org/downloads/

2. 次にSDカードのフォーマッタをダウンロード. Windows用もMac用もあります.
https://www.sdcard.org/downloads/formatter_4/

3. フォーマッタでSDカードをフォーマットしたら、1でダウンロードしたzipをSDカードに解凍.

4. Raspberry Piに周辺機器(HDMIディスプレイ、USBキーボード)をつないで、SDカードを挿入して、電源を接続!NOOBSが起動し、OS選択画面が表示されます. 無難にRASPBIAN を選択. 20分くらいでSDカードにOSがインストールされます.

2014年3月28日金曜日

[Linux] プロキシ経由でssh接続する

corkscrewを使うとプロキシサーバ経由でssh接続できるようになります。

まず、corkscrewをインストールしておきます。Ubuntuだと、
$ sudo apt-get install corkscrew
で入ります。

次に $HOME/.ssh/config に下記を追記します。
Host *
ProxyCommand corkscrew your.proxy.jp 8080 %h %p 
プロキシサーバのホスト名とポート番号は書き換えてください。
あとは、普通に ssh すればOK!

BloggerにFacebookのいいねボタンを付けよう

bloggerにも標準で各種SNSへの共有ボタンは着いているのですが、わかりにくい。こんなやつ↓


しかも、Facebookボタンは「いいね」ではなく共有です。「いいね」はやったぱり青いボタンがいいです。


というわけで、Bloggerの各記事のページに「いいね」ボタンを着ける方法を調べてみました。

1. こちらのページでHTMLに貼付けるコードを生成します。

URLは後ほど変更するので何でもいいです。Layoutで「いいね」ボタンだけや吹き出し付き、テキスト付き等が選べます。Include Share Buttonのチェックボックスで「シェア」ボタンも付けるかどうか選べます。私はシンプルなのが好きなので、LayoutはButton、「シェア」ボタンはなしにしました。
「Get Code」ボタンを押すと貼付けるコードが表示されます。Facebook SDKを読み込むコードとボタンを設置するコードの2つがあります。

2. bloggerの「テンプレート」から「HTMLの編集」を選ぶ。


3. bodyタグのすぐ下に先ほど取得したコードを貼付けます。

bodyのすぐ下じゃなくてもいい気がするけど、公式ページにはbodyの下と書いてあるので従います。
<body expr:class='&quot;loading&quot; + data:blog.mobileClass'>
<!-- Facebook SDK ここから -->
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<div id='fb-root'/>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/ja_JP/all.js#xfbml=1&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));</script>
</b:if>
<!-- ここまで -->
各記事にだけ「いいね」ボタンを表示できればよいので、<b:if > で括っておきます。上記の緑色の部分。

4. 次に「いいね」ボタンを置きたい場所にコードを埋め込みます。

今回は各記事のタイトルの下に入れてみます。私の場合は1500行目付近の <div class='post-header-line-1'/>の下に下記を追加しました。
<!-- faceboo button -->
<b:if cond='data:blog.pageType == &quot;item&quot;'>
    <div class='fb-like goog-inline-block' data-action='like' data-layout='button_count' data-share='false' data-show-faces='false' data-width='100' expr:data-href='data:post.canonicalUrl'/>
</b:if>
ここで expr:data-href は記事ごとに変えないといけないので、
expr:data-href='data:post.canonicalUrl'
とします。さらに各記事ごとのページだけで表示すればよいので<b:if>で囲ってあります。

これで「いいね」ボタンが表示されるようになりました!

2014年3月7日金曜日

Linux環境でproxy経由でgitを利用する

corkscrewを使うとproxy経由でgitを使うことができる。

まずはcorkscrewをインストール。Ubuntuの場合は
$ sudo apt-get install corkscrew
でOK。

次にスクリプトを作成し、実行可能にしておく。
$ cat > ~/bin/git-proxy.sh
#!/bin/sh
corkscrew your.proxyhost.com 8080 $1 $2
$ chmod 755 ~/bin/git-proxy.sh
プロキシサーバ名とポート番号は適宜書き換えてください。

環境変数 GIT_PROXY_COMMAND に上記スクリプトのパスを設定する。.bashrcとかに書いておくと便利。
$ export GIT_PROXY_COMMAND=~/bin/git-proxy.sh
後はgitコマンドを普通に実行するだけ。自動的にproxy経由になります。
$ git clone git://github.com/creationix/nvm.git

2014年2月22日土曜日

WindowsにRとRStudio をインストールする。

RStudioをインストールする前に、まずはRをインストール。

Rのインストール

Windows用のインストーラを使って簡単にインストールできる。
RプロジェクトのCRANサイトへ行き、最寄りのサイト(例えば筑波大学)を選択。


「Download R for Windows」 → 「base」の順に選択し、「Download R 3.0.2 for Windows」をクリックするとインストーラがダウンロードできる。


インストーラをダブルクリックして、手順に沿って進めていけばインストール完了!
途中、32bitか64bitかを聞かれるので、自分が使っているOSに合わせればOK。



RStudio のインストール


Rが入ったら、次は RStudioのインストール。こちら( http://www.rstudio.com/ide/ )のサイトでインストーラを入手。


インストーラを起動し、手順に沿って進めていくだけ。

インストールが完了したら、スタートメニューから RStudio アイコンを探して、実行してみましょう。こんなアイコンです。

起動すると下のような画面が起動する。



2014年1月11日土曜日

Google Playのリンクロゴ

Androidアプリを公開したら、HPやBlogにGoogle Playのロゴを貼ってリンクを作成しよう。このロゴは「Google Play Badge」というらしい。

Android app on Google Play 

作り方は簡単。
下記サイトで 自分のアプリのパッケージ名を入力し「Build my badge」ボタンを押すだけ!
HTMLが出力されるのでそれを自分のHomepageやBlogに貼ればOKです。

Google Play Badges
http://developer.android.com/distribute/googleplay/promote/badges.html

画面の明るさタイマー

画面の明るさを変更するAndroidアプリを公開しました。
タイマー機能付きで、決まった時間になると自動的に明るさを変更することができます。



Android app on Google Play ダウンロードは左のロゴからどうぞ。

2013年12月27日金曜日

Mac OS X MavericksにInkspaceをインストールする

AndroidアプリのUIパーツを作りたいがIllustratorやPhotoshopは高くて個人では手が出ないのでInkspaceを使ってみることにしました。
Inkspaceを使うにはXQuartzのインストールも必要になります。

まずは ここからInkspaceの.dmgファイルをダウンロード。
2013/12/26現在の最新版は「10.6, Snow Leopard — Universal .dmg」とSnow Leopard用になっていますがMavericksでも動きました。

次にここからXQuartzの最新版をダウンロード。 以前はMacOSにX11が含まれていたが、いつの頃からか含まれなくなったので別途XQuartzを入れる必要がある。

InkspaceとXQuartzの.dmgを開いてそれぞれインストール。XQuartzのインストール後はOSの再起動が必要。
OS再起動後にInkspaceを起動するとX11の場所を聞いてくる。アプリケーション→ユーティリティの中にXQuartzがあるので選択。
その後、しばらく…いや結構待つとInkspaceが起動する。

よし、まずはアイコン作るぞ!

2013年12月24日火曜日

画面の輝度を変更する

Androidで画面の明るさを変更する方法を調べました。
現在のWindowの明るさを変更する方法とシステム設定を変更する方法の2種類を紹介。

1. 現在のWindowの明るさを変更する方法
この方法では現在のWindow(通常はActivity)の明るさのみを変更するので、ホーム画面や他のアプリに移動すると元の明るさに戻ってしまう。
LayoutParams.screenBrightness の値を読み書きする。値の範囲は 0.0〜1.0。
ただし、0.0を設定するとアプリの挙動がおかしくなる機種があるので注意が必要。
Xperia AXだと0.0にするとアプリが操作できなくなってしまいました。クラッシュしている訳でもなく不思議な挙動…。
Windowの明るさを取得
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    float value = lp.screenBrightness;
Windowの明るさを設定
    float brightness = 0.5f;        // [0.0-1.0]
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness;
    getWindow().setAttributes(lp);

2. システムの明るさ設定を変更する方法
上記の方法ではホーム画面や他のアプリに移動すると元の明るさに戻ってしまう。Settings.Systemの値を変更することで システム全体の明るさを変更可能。
システム設定を変更するためには、まず、AndroidManifest.xml にパーミッションの追加が必要。
    <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
その後、Settings.SystemのSCREEN_BRIGHTNESSの値を読み書きする。値の範囲は0から255で255が最も明るい。
システム設定の明るさを取得
    int value = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
システム設定の明るさを設定
    int value = 255;    // 0〜255の値を設定
    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value);
上記でシステム設定を変更してもすぐに変更が反映されず、ホーム画面や他のアプリに移動したときに反映される。
スライダバーで明るさを変更するアプリ等を考えると、スライダバー操作中に実際に画面の明るさを変えユーザにフィードバックを返した方がわかりやすい。その場合は、1.のWindowの明るさを変更する方法と合わせて使うことで、すぐにユーザにフィードバックを返すことができる。

Android OSバージョンとAPIレベルの対応表

AndroidManifest.xmlとかを書くときによく調べるのでメモ。

0S VersionAPI LevelCode Name
Android 4.419KITKAT
Android 4.318JELLY_BEAN_MR2
Android 4.217JELLY_BEAN_MR1
Android 4.116JELLY_BEAN
Android 4.0.3-4.0.415ICE_CREAM_SANDWICH_MR1
Android 4.0-4.0.214ICE_CREAM_SANDWICH
Android 3.213HONEYCOMB_MR2
Android 3.112HONEYCOMB_MR1
Android 3.011HONEYCOMB
Android 2.3.3-2.3.710GINGERBREAD_MR1
Android 2.3-2.3.29GINGERBREAD
Android 2.28FROYO
Android 2.17ECLAIR_MR1
Android 2.0.16ECLAIR_0_1
Android 2.05ECLAIR
Android 1.64DONUT
Android 1.53CUPCAKE
Android 1.12
Android 1.01

2013年9月24日火曜日

ListViewの要素の高さを固定する

AndroidのListViewの要素の高さを固定するには layout_height だけではなく、
minHeight も設定する必要がある。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:minHeight="60dp"
    android:orientation="horizontal" >
    ... 省略...
<LinearLayout>

2013年9月1日日曜日

Eclipseで補完が効かないときの対処方法

MacのEclipseでコード補完が効かなくなってしまった。

補完しようとすると「No Default Proposals」出て肝心の補完候補が出ない。
環境設定のキーバンドをいじっても改善せず。
 調べてみたところ eclipse の設定ファイルがおかしくなっているようでした。

対処方法:
workspace の「.metadata/.pluging/org.eclipse.core.runtime/.settings」フォルダにある
「ogr.eclipse.jdt.ui.prefs」ファイルの
「content_assist_disabled_computers」
というパラメータをコメントアウト(行頭に # を付ける)。

Eclipse を再起動するとコード補完ができるようになりました。

2013年7月13日土曜日

Androidアプリのデジタル署名に必要な証明書の作成

Google Playにアプリを公開するためには apk ファイルにデジタル署名をする必要があります。
今回はそのデジタル署名に必要な証明書の作成方法を説明します。

keytool コマンドを使います。
下記の例ではエイリアス名 ash、有効期限10000日の証明書を作ります。
結果は ash.keystore というファイルに出力されます。

$ keytool -genkey -v -keystore ash.keystore -alias ash -keyalg RSA -validity 10000

キーストアのパスワードを入力してください:

新規パスワードを再入力してください:
 
姓名を入力してください。
  [Unknown]:  ash
組織単位名を入力してください。
  [Unknown]:  ash
組織名を入力してください。
  [Unknown]:  ash
都市名または地域名を入力してください。
  [Unknown]:  shinagawa
州名または地方名を入力してください。
  [Unknown]:  tokyo
この単位に該当する 2 文字の国番号を入力してください。
  [Unknown]:  jp
CN=ash, OU=ash, O=ash, L=shinagawa, ST=tokyo, C=jp でよろしいですか?
  [no]:  yes
10,000 日間有効な 1,024 ビットの RSA の鍵ペアと自己署名型証明書 (SHA1withRSA) を生成しています
    ディレクトリ名: CN=ash, OU=ash, O=ash, L=shinagawa, ST=tokyo, C=jp
<ash> の鍵パスワードを入力してください。
    (キーストアのパスワードと同じ場合は RETURN を押してください):  
新規パスワードを再入力してください: 
[ash.keystore を格納中] 
$

環境によって聞かれる内容が多少違うようです。上記はMacの例。

Eclipseでapkファイルを生成するときに上記ファイル(ash.keystore)を指定し、エイリアス名、パスワードを入力すれば署名されたapkファイルが作成されます。


2013年2月7日木曜日

Androidのハードウェアアクセラレーション設定

WebViewのAOS2.3.4だとサクサクなのにICS端末だと激重だったので調べてみた。

AOS 3.0以降からハードウェアアクセラレーションの設定が増えていてデフォルトでdisableになっているっぽい。有効にするには AndroidManifest.xml に android:hardwareAccelerated="true" を追加する。applicationやactivityタグに設定可能。

  <application android:hardwareAccelerated="true">
    ...
  </application>


のようにapplicationタグに設定するとアプリ全体に設定可能。

  <application android:hardwareAccelerated="true">
    <activity android:hardwareAccelerated="false">
  </application>



とすると、特定のアクティビティだけoffにすることも可能。