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月29日土曜日
2014年11月6日木曜日
音声認識エンジン Julius の読み方
知人に「音声認識のJuliusってユリウスって読むんだよ(ドヤァ 」と言われて気になったので調べてみました。
結論としては、音声認識エンジン Julius の読み方は「ジュリアス」が妥当なように思います。
以下は開発元サイトからの引用です。
http://julius.sourceforge.jp/juliusbook/ja/pr01.html
> 日本語での発音は「ジュリアス」「ジュリウス」「ユリアス」「ユリウス」など諸説あるが,開発チーム内では「ジュリアス」が用いられている
開発チームで「諸説ある」と表現するのがまた面白いなと思います。
文脈からすると、起源が古すぎて本来どのように読んでいたのか正確なところはわからない、ということでしょう。
いずれにせよ、今の開発チーム内でジュリアスと読んでいるなら、 音声認識エンジン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について
・環境は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のように各角毎に指定できます。
サンプルは以下の通り。
<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
ただしonDeletedからは読み出せないもよう。
回避策としては「データのクリア」を実行されないことを期待してPreferenceにappWidgetIdごとにどちらに置かれたら記憶させておくとかしますかね。
@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>
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すればいけるんじゃないですかね(試してません)。
2014年4月21日月曜日
AcitivtyのonCreateでactivity has been destroyed というエラーで落ちるときの原因
以下のようなコードはactivity has been destroyed と言われ落ちます。
環境は Nexus5 / KitKat
環境は Nexus5 / KitKat
public class MyActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
FragmentManager fragMgr = getSupportFragmentManager();
FirstFragment list = new FirstFragment();
fragMgr.beginTransaction().add(android.R.id.content, list).commit();
super.onCreate(savedInstanceState);
}
}
解決策はsuper.onCreateを最初にもってくるだけ。はまったー。
public class MyActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fragMgr = getSupportFragmentManager();
FirstFragment list = new FirstFragment();
fragMgr.beginTransaction().add(android.R.id.content, list).commit();
}
}
2014年2月26日水曜日
androidのListViewでスクロールする時、最初だけカクつく(ラグる)
AndroidのListViewでスクロールする時、初回だけカクついてそれ以降はスムーズになる場合がある。例えばTwiccaのスクロールはこうなる。
このラグを無くすにはAndroidManifestのapplicateionタグに
android:hardwareAccelerated="true"
このラグを無くすにはAndroidManifestのapplicateionタグに
android:hardwareAccelerated="true"
を足す。
これだけ。お試しあれ。
2014年2月5日水曜日
Android + NDK debug で No source file named *****.c の原因
AndroidのNDKでnativeのコードをデバッグしようとすると
ブレークポイントを貼ったソースファイル名で
No source file named *****.c
というようなエラーが出た。
原因は簡単で、先に
static {
System.loadLibrary("mylibrary");
ブレークポイントを貼ったソースファイル名で
No source file named *****.c
というようなエラーが出た。
原因は簡単で、先に
static {
System.loadLibrary("mylibrary");
}
のように共有ライブラリーをロードしなければいけないのでした。
2014年1月21日火曜日
Xcode5で.hファイルと.mファイルの切り替え
Xcode5 で ヘッダファイルとモジュールファイルを切り替えるショートカット
⌃ + ⌘ + [↑|↓]
Ctrl + Cmd + [up|down]
2014年1月9日木曜日
JNIサンプル集
順次追加していきます
メソッドシグネチャ
型一覧| void | V |
| boolean | Z |
| byte | B |
| char | C |
| short | S |
| int | I |
| long | J |
| double | D |
| float | F |
| String | Ljava/lang/String; |
| Object | Ljava/lang/Object; |
| その他のクラス | "L"+"完全修飾クラス名(スラッシュ区切り)"+";" |
[をつけると配列を表す
| boolean array | [Z |
| byte array | [B |
| char array | [C |
| short array | [S |
| int array | [I |
| long array | [J |
| double array | [D |
| float array | [F |
| String array | [Ljava/lang/String; |
| Object array | [Ljava/lang/Object; |
メソッドシグネチャは
(引数)戻り値
の形で表す。
引数が複数ある場合は連続して記述する。
引数が無い場合は括弧の中に何も書かない。
メソッドシグネチャの実例
| void hoge(); | "()V" |
| void hoge(int a); | "(I)V" |
| int hoge(int a) | "(I)I" |
| int hoge(int a, int b) | "(II)I" |
| long hoge(short a, double b) | "(SD)J" |
| boolean hoge(String a); | "(Ljava/lang/String;)Z" |
| boolean hoge(int a[], char b, byte c[] ) | "([ab[c)Z" |
java メンバーメソッドの呼び出し
例:その関数を呼び出したjavaオブジェクトのメンバーメソッドhogeを呼び出す関数
上がvoid hoge();
下がint hoge(int a, int b );
JNIEXPORT void JNICALL naHoge( JNIEnv* env, jobject obj){
jclass clsj = env->GetObjectClass(obj);
jmethodID func = env->GetMethodID(clsj, "hoge", "()V");
env->CallVoidMethod(obj, func);
}
JNIEXPORT void JNICALL naHoge( JNIEnv* env, jobject obj){
jclass clsj = env->GetObjectClass(obj);
jmethodID func = env->GetMethodID(clsj, "hoge", "(II)I");
int retval = env->CallIntMethod(obj, func, 1, 2 );
}
C側からjavaメンバー変数の値取得
例:その関数を呼び出したjavaオブジェクトのメンバー変数mHogeValueの値(int)を取得する関数
JNIEXPORT void JNICALL naHoge( JNIEnv* env, jobject obj){
jclass clsj = env->GetObjectClass(obj);
jfieldID fid =
env->GetFieldID(clsj, "mHogeValue" , "I");
int hogeValue = env->GetIntField(obj, fid );
}
C側からjava メンバー変数の値変更
例:その関数を呼び出したjavaオブジェクトのメンバー変数mHogeValueの値(int)に1を設定する関数
JNIEXPORT void JNICALL naHoge( JNIEnv* env, jobject obj){
jclass clsj = env->GetObjectClass(obj);
jfieldID fid =
env->GetFieldID(clsj,"mHogeValue" , "I");
env->SetIntField(obj, fid, 1);
}
C側からjava側にint配列を返す
JNIEXPORT void JNICALL naHoge( JNIEnv* env, jobject obj){
int valuesToTransfer[3] = {1,2,3};
int len = sizeof(valuesToTransfer) / sizeof(int);
jintArray array = env->NewIntArray(len);
if (array == NULL) {
return NULL;
}
env->SetIntArrayRegion(array, 0, len , valuesToTransfer );
return;
}
C側で文字列を受け取る
JNIEXPORT void JNICALL setString(JNIEnv* env, jobject obj,
jstring javaStringObj )
{
const char * cstring = env->GetStringUTFChars(javaStringObj, 0);
}
C側で文字列の配列を受け取る
JNIEXPORT void JNICALL setStringArray(JNIEnv* env, jobject obj, jobjectArray javaStringArray)
{
int stringCount = env->GetArrayLength(javaStringArray);
for (int i=0; i<stringCount; i++) {
jstring string = (jstring) env->GetObjectArrayElement( javaStringArray, i);
const char *rawString = env->GetStringUTFChars( string, 0);
// Don't forget to call `ReleaseStringUTFChars` when you're done.
// ....
env->ReleaseStringUTFChars( string, rawString );
}
}
初期化(JNI_OnLoad)やその時すべき処理等のサンプル
https://android.googlesource.com/platform/development/+/master/samples/SimpleJNI/jni/native.cpp
登録:
コメント (Atom)


