プロセスを検索してkillする

psとgrepの組み合わせだとgrepの結果までがプロセスとして表示されて見づらいので、それを回避する方法

pgrepとkillを組み合わせる

$ pgrep -f 'プロセス名' | xargs kill

pkillを使う

$ pkill -f 'プロセス名'

従来の(?)方法

ps とgrepを組み合わせてプロセスIDを割り出し、それをkillする

$ ps aux | grep 'プロセス名'

$ kill プロセスID

重み付けによる抽選ロジック

// 以下の配列から抽選で一つを抽出したい
$things = [
  'a',
  'b',
  'c',
  'd',
  'e',
  'f',
  'g',
  'h',
  'i',
  'j',
];

// 重み付けをする
// この設定だと5番目のもの($thingsの'e')が最も出やすい
// 0のものは出ない
$rate = '10,20,13,24,35,0,0,0,0,5';
$rate_array = explode(',', $rate);

$weight = 0;
$rated_indexes = [];
foreach ($rate_array as $key=> $r) {
  // 重みが0になっているものは対象外
  if (empty($r)) continue;
  $weight += (int)$r;
  // 重み付け後のインデックス配列
  $rated_indexes[$weight] = $key + 1;
}

// 抽選
$lot = mt_rand(1, $counter);

foreach ($rated_indexes as $key => $index) {
  if ($lot <= $key) {
    $hit = $things[$index];
    break; 
  }
}
// 結果表示
var_dump($hit);

iTunesで写真の同期ができなかった時

PC(MacBook Pro)側に保存してある写真をiPhone(6s)に同期しようとしたが失敗。

対処方法

  1. iTunesiPhoneアイコンをクリック
  2. Photosをクリック
  3. Sync Photosのチェックを外す
  4. PCの同期元のフォルダに入っている「iPod Photo Cache」を削除
  5. Sync Photosのチェックを入れてSyncボタンを押す

f:id:hchuno:20160328125348j:plain

AndroidエミュレータにAPKをインストールする

下準備

Android SDKのインストール

  • Android Studio をインストールして、SDK Managerを使ってインストールした
  • インストール先のPCによっては、VTx関連のBIOS設定が必要になる可能性アリ
  • ↓インストール先 ※Windows8.1の場合

C:\Users\ログインユーザー名\AppData\Local\Android\sdk

APKファイルの配置

  1. 前述のAndroid SDKのディレクトリ直下のtoolsディレクトリにapkファイルを置く
  2. toolsディレクトリに移動する

cd C:\Users\ログインユーザー名\AppData\Local\Android\sdk\tools

Pathの登録

上記のtoolsへのPathを登録する

Pathの設定画面
  1. 「ウィンドウズキー+xキー」で設定メニューを表示
  2. 「システム」を選択
  3. 「システムの詳細設定」を選択
  4. 環境変数」ボタンを押下
  5. 「システム環境変数」の中からPathを探して編集

実作業

Androidエミュレータの起動

> android avd

> adb devices
List of devices attached
emulator-5556 device

APKのインストール

  • 「下準備」で配置したAPKを指定する

> adb install apkファイル名

注意点
  • エミュレータが起動しきる前にインストールを試みるとエラーになる

Error: Could not access the Package Manager. Is the system running?

Error: more than one device and emulator

Windows8.1なPCに施した諸々の設定

キー配置の変更

普段使っているMac(USキーボード配列)に少しでも合わせるため、Change Keyというフリーソフトを使って配置換え。

f:id:hchuno:20150504184015j:plain

  • 無変換→Ctrl
  • 変換→半角全角
  • カタカナひらがな→Home
  • 右alt→End
  • 右クリックボタン→Page Up
  • 右Ctrl→Page Down
  • Caps Lock→無効
  • Num Lock→無効

テキストエディタ

Sublime Text2の導入

Viっぽい挙動(VintageMode)にできるので。

VintageModeを有効にする
  • 「Settings - Default」の最終行が「Vintageを無視する」という記述になっているので、以下のように変更して保存する。
#↓変更前
"ignored_packages": ["Vintage"]

#↓変更後
"ignored_packages": []
  • 「Settings - User」に以下を追記する
"vintage_start_in_command_mode": true,
"vintage_ctrl_keys": true

Synaptics TouchPad Driverのインストール

元々Windows7だったのを諸事情により8.1にアップグレードしたのだが、その時点で
「Synaptics TouchPad」が使えなくなっていた(ドライバーが消えていた)。
そこで、
HPのサポートサイトでPCの機種名検索から対応ドライバーを割り出した。
「Driver - Keyboard, Mouse and Input Devices」という項目に「Synaptics TouchPad Driver」が含まれていたので、これをダウンロード&インストール。

Virtualization Technology (VTx)を有効にする

背景

Android Studioのインストール時に必要となった。

対象

HP ProBook650

手順

  1. PC起動直後の真っ黒い画面で「Press ESC Key…」と表示されている時にescキーを押す
  2. F10キーを押してBIOS設定画面を表示する
  3. 左右キーを押してAdvancedという項目を表示する
  4. Virtualization Technology (VTx)という項目にチェックを入れる
  5. Saveを押す
  6. escキーを押してSaveを選択する

Unity5あれこれ

Sceneに配置したTextの中身をスクリプトで変更する(uGUI対応)

1. 空のGameObjectを追加
2. 以下のような内容のスクリプトを作成し、UnityのEditor上で1のGameObjectにアタッチする

    public Text hogeText;
    void Start() {
        debugText.text = "hage";
    }

3. UnityのEditorのHierarchy上で右クリックからUI→Textと選択
f:id:hchuno:20150407165124j:plain
4. 1のGameObjectを選択して、3のTextをhogeTextにドラッグアンドドロップして関連付ける
f:id:hchuno:20150407165309j:plain
5. UnityのEditorでプレイボタンを押すとTextの表記がhageに変わる

WebViewプラグインを用いて表示したHTMLから送られてきた値を取得する

    WebViewObject wvo;
    string htmlFilePath;

    void Start() {
        htmlFilePath = Path.Combine(Application.persistentDataPath, "sample.html");
        WriteHTML();

        wvo = (new GameObject("WebViewObject")).AddComponent<WebViewObject>();
        wvo.Init((msg) => {
            hogeText.text = msg;
            if (msg == “hoge”) {
		// Nextという名前のSceneに遷移
                Application.LoadLevel("Push");
            }

        });
        wvo.LoadURL("file://" + htmlFilePath);
        wvo.SetMargins(15, 150, 15, 20);
        wvo.SetVisibility(true);
    }
	

    void WriteHTML() {
        using (var writer = new StreamWriter(htmlFilePath, false)) {
            writer.Write(
                @"<html>
<body>
<ul>
  <li><a href='unity:hage'>callback 'hage'</a></li>
  <li><a href='unity:hoge’>callback ‘hoge’</a></li>
</ul>
</body>
</html>
");
            writer.Close();
        }
    }
}

AndroidManifest.xml

  • Androidのネイティブプラグイン作成等で必要。
  • プラットフォームをAndroidにセットした後、ビルドすると以下の場所に生成される
{プロジェクトルート}/Temp/StagingArea/

Unity5が来た!

AssetBundle関連

“The AssetBundle ‘◯◯◯’could not be loaded because it is not compatible with this newer version of the Unity runtime.
Rebuild the AssetBundle to fix this error.”

やっぱりか…(;´Д`)

Unity5のほうでAssetBundleビルドを行った後、再度AssetBundleのロードを試みるも、再び上記のエラー発生。

WWW.LoadFromCacheOrDownLoad()に渡すversionの引数をインクリメントすると、無事に新しいものがロードされるようになった!
(ローカルにUnity4時代のAssetBundleが残っていて、そちらをロードしようとしていたのが原因)