Pages - Menu

2016-12-04

EFIでブートできるUSBディスクの作成

EFIでブートできるUSBディスクの作成方法。今回はXubuntu 16.10を使用。

EFIブート用のパーティションの作成

ファイルシステムはfat16または32。適当な位置にマウントしておく(ここでは/mnt/usbとする)。

grub起動ファイルの作成

sudo grub-install --target=x86_64-efi --efi-directory=/mnt/usb --bootloader-id="xubuntu" --recheck --removable /dev/sdXX

sdXXはインストールするメディアのデバイス名。

一応update-grubも行ったが、必要かどうかは不明。

2016-09-27

音楽再生とスリープタイマーの自動化

音楽プレーヤーの多くはスリープタイマー機能があり、中にはOSのスリープ・シャットダウンをできるものがあります。しかし、毎日寝る前に音楽を流しているとしたら、その都度スリープタイマーを設定するのは手間です。そこで、ワンクリックで設定できるバッチを作成してみました。

STEP1:プレイリストファイルの作成と拡張子の関連付け

使用している音楽プレーヤーで、再生したい音楽のプレイリストを作成します。

作成したプレイリストファイルに対して、右クリック -> 「プログラムから開く」 -> 「既定のプログラムの選択」で音楽プレーヤーを選択し、拡張子の関連付けを行います。

STEP2:PSToolsの準備

OSのシャットダウンであれば、標準のwindowsのコマンドで可能ですが、スリープを行うにはPSToolsが必要です。Windowsの公式からPSToolsをダウンロードし、任意のディレクトリに展開します。

STEP3:バッチファイルの作成

音楽ファイルの再生と、psshutdownのコマンドを実行するバッチファイルを作成します。ファイルパス、ファイル名は適宜変更してください。この例では10分(600秒)後のスリープを設定しています。

@echo off
cd "C:\playlist"
start test.playlist
cd "C:\PSTools"
psshutdown.exe -d -c -t 600
@pause

STEP4:シャットダウンキャンセル用のバッチファイル作成

シャットダウンをキャンセルするときのバッチファイルを作成します。

@echo off
cd "C:\PSTools"
psshutdown.exe -a
@pause

STEP5:ショートカット(管理者で実行)の作成

上記バッチファイルは管理者権限で実行しないと動作しません。常に管理者で実行するよう、ショートカットを作成します。

通常の手順でバッチファイルのショートカットを作成後、右クリック -> 「プロパティ」 -> 「ショートカット」タブ -> 「詳細設定」 -> 「管理者として実行」にチェック を設定します。

以上で設定完了です。バッチファイルを実行して、プレイリストの再生とスリープが実現できます。

ついでに、Bluetoothスピーカー等で、切断後一定時間で電源OFFができるものがあると便利です。

再帰的なcssの定義

ブログのcss設定を見直してみました。

要件は以下の通り。

  • コード記述の手間を減らしたい(=可能な限りclassは指定しなくて済むようにする)
  • 見出しごとにインデントを設定したい

今まではdiv毎にclassを指定していましたが、以下のように記述することで、再帰的にdivの設定ができました。

div.entry-content div{
    margin-left: 10px;
}
div.entry-content p{
    margin-left: 10px;
}

2016-09-24

String型splitの仕様

今日の開発で引っかかったのが、splitメソッド。
以下の例では、splitの結果である配列strsのlengthは2です。
String str ="ab@cd@ef";
String[] strs = str.split(str);
System.out.println(strs.length); // --> 2
このことから、split結果のlengthはいつでも「(文字列に含まれる区切り文字の数)+1」になると考えていました。
しかし、区切り文字が末尾に来るときは、区切り文字以降の空白文字はカウントされないようです。
以下の例では、strsのlengthは1になります。
String str ="ab@cdef@";
String[] strs = str.split(str);
System.out.println(strs.length); // --> 1
逆に先頭に区切り文字がある場合はカウントされます。
処理の仕組みとしては理解できるが、仕様としていまいち統一感がない気がしますね。

2016-09-10

C開発環境の構築:Eclipse CDT

Eclipse CDTを用いたC開発環境の構築手順。

必要なもの

統合開発環境としてEclipseが必要ですが、それ以外にコンパイラが必要です。 コンパイラは種々ありますが、今回はCygwinに同梱されているgccを使用します。

1.Eclipse CDTのインストール

Eclipse公式からEclipse C/C++ IDE for Neon等をダウンロード・インストールします。既にEclipseを持っている場合は、「ソフトウェアのインストール」からインストールできるようです。

2.Cygwinのインストール

Cygwinをインストールします。デフォルトでは、最小限のモジュールしかインストールされないことに注意。インストール時にパッケージを指定する画面がありますので、gcc、g++、makeのコマンドは選択しておきます。

パッケージの選択を間違えた場合は、再度インストーラを実行することでパッケージ選択ができます。

3.Ecpliseの設定

プロジェクトの設定をします。(追記予定)

トラブルシューティング

インクルードファイルのパス設定

標準ライブラリ(等)で警告が出ている場合の対処方法。

プロジェクトのプロパティを開き、「C/C++ general」>「Preprocessor Include Paths, Macros」>「Providers」タブ>「CDT GCC Built-in Compiler Settings [Shared]」にチェックを入れる。

参考文献

Goodbye World Eclipseでのインクルードファイルやライブラリファイルパスの設定方法

2016-08-27

[Android] ThreadとHandler

Android開発をしているうちにつまづくのはThreadとHandlerであろう。
基本とAndroidにおける扱いをまとめる。

Thread

基本的にコードに書いた一連の処理は、1つのThread内で一本の流れとして逐次的に処理される。並列的に処理をしたい場合や、時間の掛かる処理を行いたい場合などは別のThreadを立てて実行する。

Androidでは、ネットワークアクセス等、時間の掛かる処理はActivity等を実行しているUIThreadでは許可されていないことに注意する。

Threadは2通りの方法でつくることができる。

new Threadする

Thread thread = new Thread(new Runnable( /* ★ */ ){});

classをimplements Runnableする

class hoge implements Runnbale { /* ★ */}

いずれの場合も、上の★の中でrun()をOverrideして、実行する処理を記載する。
また、Threadを実行には、Threadのstart()メソッドを呼び出す。

Handler

HandlerはThread間の通信を可能にする。postメソッドを用いて、Handlerのインスタンスを作成したThreadに対してアクセスする。また、Handlerの引数にLooperを用いて、任意のスレッドにアクセスする使い方もできる。

Androidでは、UIThread以外からUI部品にアクセスすることができない。そこで、別ThreadからUIThreadに対してHandlerを用いてアクセスする。

Handler guiThreadHandler = new Handler();
new Thread = new Thread( new Runnable(){
    guiThreadHandler.post(new Runnable(){
        @Override
        public void run(){
            //処理
        }
    }
 }).start(); 

参考

2016-08-16

実機で開発するAndroidアプリ

Android Studioを使用してAndroidアプリ開発環境を設定する。
なお、今回はHDD容量も少なく、RAMもあまり積んでいないモバイルPC向けに、実機を用いた最小限の構成を目指す。

設定概要

この設定では、実機にて実行/デバッグを行い、ファイスサイズが大きく、また実行に時間が掛かるAndroid VMは使用しない。

Android Studioのインストール

Android Studioのページから最新のインストーラをダウンロードしてインストール。
インストール時には「カスタム」を選択し、Android Virtual Deviceのチェックを外す。
JDKは最新のものをインストールして、JAVA_HOMEにインストールパスを設定しておくこと。

SDKの設定

Tools>Android>SDK Managerから「Launch Standalone SDK Manager」を開く。
以下をインストールする。

  • 実機と一致するAPIバージョンのSDK Platformを選択しインストールする。
    (Android 4.4であれば、「Android 4.4.2 (API19)」を選択)
  • Google USB Driver

実機の設定

設定>端末情報>ビルド番号 を連打して開発者向けオプションを表示する。
開発者向けオプションで「USBデバッグ」を有効にする。

実機での実行

実行/Runで「Connected Device」で実機を選択する。

トラブルシューティング

決まってこういうものは一発ではうまく行かないため、いろいろ試行錯誤したときのメモ。

Connected Deviceに端末が表示されない(端末が認識されない)

正しいドライバがインストールされていないことが問題。
User以下隠しフォルダのAppData\Local\Android\sdk\extras\google\usb_driverのandroid_winusb.infの中の[Google,NTx86]と[Google.NTamd64]の2箇所に追記。
追記内容は以下。
1行目にコメントアウト(;から開始)でデバイス名
2行目に%SingleAdbInterface% 実機のVIDとPIDを設定(デバイスマネージャで確認)
3行目に%CompositeAdbInterface% 実機のVIDとPIDを設定、末尾は他と同様(&MI_01等)
実機のドライバのインストール(更新)で、上記パスをドライバの場所に指定。

コンパイルは成功するが実行時にエラー

大抵の場合はコンパイルバージョン、ビルドツールバージョンの設定間違い。
プロジェクト右クリック>「Open Module Settings」から以下の項目を変更してみて、適切な設定を探す。
・Complie Sdk Version …最新のGoogle APIが良い?「Google APIs(API23)」を設定。
・Build Tools Version …バージョンによって挙動が異なる?23.0.3を設定。
・Min Sdk Version …任意に設定。