2014年11月29日土曜日

画面の明るさを変更するショートカットキーを作る(Windows)

nircmdを使った画面の明るさを変更するショートカットキーの設定方法の紹介です。

この方法を使えば、任意のキーの組み合わせで、一段階明るく、または暗くすることができます。
また、一回でどれほど明るく/暗くするかも決められます。

▼手順
まずnircmdをDLします。
http://www.nirsoft.net/utils/nircmd.html
( 一番下の< Download NirCmd > をクリック)

そして、解凍したのち、コマンドプロンプトを開いてnircmdを展開したフォルダへいきます。
そして、以下のようなコマンドを入力します。
> nircmd.exe cmdshortcutkey "~$folder.desktop$" "Decrease Brightness" "Ctrl+Alt+F9" changebrightness -1
> nircmd.exe nircmd.exe cmdshortcutkey "~$folder.desktop$" "Increase Brightness" "Ctrl+Alt+F10" changebrightness 1

Ctrl+Alt+F9/F10の部分には好きなショートカットを入力してください。
最後の1を5や10などとすると一度の明るさの変更量が変わります。

以上です。

2014年11月6日木曜日

音声認識エンジン Julius の読み方

知人に「音声認識のJuliusってユリウスって読むんだよ(ドヤァ 」と言われて気になったので調べてみました。
結論としては、音声認識エンジン Julius の読み方は「ジュリアス」が妥当なように思います。

以下は開発元サイトからの引用です。
http://julius.sourceforge.jp/juliusbook/ja/pr01.html
> 日本語での発音は「ジュリアス」「ジュリウス」「ユリアス」「ユリウス」など諸説あるが,開発チーム内では「ジュリアス」が用いられている

 開発チームで「諸説ある」と表現するのがまた面白いなと思います。
 文脈からすると、起源が古すぎて本来どのように読んでいたのか正確なところはわからない、ということでしょう。
いずれにせよ、今の開発チーム内でジュリアスと読んでいるなら、 音声認識エンジンJuliusの読み方は「ジュリアス」と考えるのが妥当かと。

2014年9月19日金曜日

MacでBootcamp利用時にoptionキーを押しながら起動してもブートディスク選択画面に移行しない時の対処法

この度以下のような現象に遭った。
・環境はMacbook Pro / Late 2013
・Bootcampを利用していて、Windows 8.1 / Mac OS X 10.9.4 がインストール済み
・前日にMac側で作業して、シャットダウンせずにふたを閉じて就寝
・起きてスリープ復帰させるとWindowsが起動
・おかしいと思いつつも、シャットダウンさせてoption keyを押しながら起動させる
・すると出るはずのブートディスク選択画面が出ずそのままWindowsが起動
・何かおかしいと思い今度はoption keyを押さずに再起動
・よくよくみると、灰色の画面(真っ白な画面)が一切出ずに直接Windowsが起動

で、調べたところ、NVRAMのリセットを試せとのことでした。結果、無事復帰。
NVRAMには起動ディスクに関する情報が入るみたいなので、この辺が読めなくなったんですかね。

NVRAMリセットの方法は以下の通り。
NVRAMとPRAMについて
要約すると キーボードで「command (⌘)」「option」「P」「R」を押しながら起動→「ジャーン」が二回なったら離す というものです。

2014年9月12日金曜日

Androidで角毎に丸みの異なる角丸ボタンを作る

AndroidのShapeDrawableで、
<corners android:radius="5dp" />
みたいな指定をすると四隅すべて角丸になりますが、これはbottomLeftRadiusのように各角毎に指定できます。
サンプルは以下の通り。


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- unpressed -->
<itemandroid:state_pressed="false">
 <shape android:shape="rectangle">
 <solid android:color="#3366ff" />
 <corners 
 android:bottomLeftRadius="20dp" 
 android:bottomRightRadius="20dp"
 android:topLeftRadius="20dp" 
 android:topRightRadius="0dp" />
 </shape>
</item>
<itemandroid:state_pressed="true">
 <shape android:shape="rectangle">
 <solid android:color="#6699ff" />
 <corners 
 android:bottomLeftRadius="10dp" 
 android:bottomRightRadius="10dp"
 android:topLeftRadius="10dp" 
 android:topRightRadius="0dp" />
 </shape>
</item>
</selector>


2014年8月12日火曜日

ウィジェットが置かれたのがロックスクリーンかホームスクリーンかを判断する

ウィジェットが置かれたのがロックスクリーンかホームスクリーンかを判断するには、以下を自前のAppWidgetProviderクラスのonUpdateから呼び出せばOK

 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
 public boolean isPlacedOnLockscreen(Context context, int appWidgetId ){
  if( Build.VERSION.SDK_INT < 17 ){
   return false;
  }
  AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
  Bundle myOptions = appWidgetManager.getAppWidgetOptions(appWidgetId);
  int category = myOptions.getInt(
    AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, -1);
  return category == AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD; 
 }


ただしonDeletedからは読み出せないもよう。
回避策としては「データのクリア」を実行されないことを期待してPreferenceにappWidgetIdごとにどちらに置かれたら記憶させておくとかしますかね。

2014年8月5日火曜日

TextViewでgravity="center"にしても真ん中に寄らないで下にずれる

AndroidのTextViewで高さと文字サイズを指定したとき、TextViewに対して文字が大きすぎると、gravity="center"やpadding="0dp"を指定していても文字が下に寄る(つまり上部に余白ができる)ことがある。
例えば以下のようなレイアウトを表示させると
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="300dp"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:background="#dddddd"
        android:gravity="center"
        android:padding="0dp"
        android:text="あいうえおjkl"
        android:textAlignment="gravity"
        android:textSize="40dp" />
</FrameLayout>
こうなる↓

解決策はandroid:includeFontPadding="false"を追加すること。
追加すると、以下のように上部の余白がなくなる





2014年5月2日金曜日

MediaScannerConnection.scanFileを同期処理させる

MediaScannerConnection.scanFileでファイルをスキャンさせてその完了を待つコードを考えてみた。が、どんな状況でも動くようにさせるのは難しそうだ。
以下のようなコードはうまくいきそうだが、実際には状況によってはうまくいかない。

  final Object lock = new Object();
  synchronized (lock) {
   Log.d(TAG, "ScanFile Start");
   MediaScannerConnection.scanFile(context, new String[] { filePath },
     null, new OnScanCompletedListener() {

      @Override
      public void onScanCompleted(String path, Uri uri) {
       Log.d(TAG, "onScanCompleted");
       synchronized (lock) {
        lock.notify();
       }
      }
     });
   try {
    Log.d(TAG, "lock start");
    lock.wait();
    Log.d(TAG, "unlocked");
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
その状況とは、このコードがUIスレッドで動いている場合。
おそらくMediaScannerServiceへconnectしてonMediaScannerConnectedを待つあたりでUIスレッドが動いていないと駄目なんだろうなーと。

というわけで、回避策としては非同期にできるところまでさかのぼって、別スレッドで動かすしかなさそう。
それが嫌なら、MediaScannerConnection インスタンスを作って(事前にサービスへの接続をしておいて)scanFileすればいけるんじゃないですかね(試してません)。