Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

キー入力をスクリーンキャストする

はじめに

前回の記事「git worktree と peco」の実演(gif アニメ)にて、キー入力を表示するために [screenkey] というソフトウェアを使いました。使用するにあたり、少しコツ(バグフィックス?)が必要だったので、備忘のためここに記します。

[screenkey] のサイトより:

なお、今現在 [screenkey] は Wayland 環境では動作しないので、使用する場合は Xorg 環境で使用します。

続きを読む

【Android】WorkManagerでバックグラウンド処理を行う

今回は、AndroidWorkManagerでバックグラウンド処理を行う方法を解説します。

概要

WorkManager を使用すると、処理をバックグラウンドで実行できます。WorkManager を使用すると、以下のメリットがあります。

  • 完了に時間がかかる処理でもアプリが止まらない。
  • アプリを終了しても WorkManager の処理は継続する。

よって、WorkManager は以下のような場合に使われます。

  • ファイルのダウンロード/アップロード
  • ログのアップロード

ライブラリを追加する

WorkManager を使用するため、以下のようにライブラリを追加します。

dependencies {
    val work_version = "2.7.1"
    // Kotlin + coroutines
    implementation("androidx.work:work-runtime-ktx:$work_version")
}

作業を定義する

まず、WorkManager に処理させたい作業を定義します。Worker を継承して、doWork をオーバーライドします。そして、オーバーライドした doWork の中で、WorkManager に処理させたい作業を実行します。

class HeavyWorker(
    appContext: Context, workerParams: WorkerParameters
) : Worker(appContext, workerParams) {

   override fun doWork(): Result {

       // 重い処理
       doHeavyWork()

       // 処理結果の返却
       return Result.success()
   }
}

処理の後に処理結果を返します。なお、返せる処理結果を以下の通りです。

  • Result.success() : 作業成功。
  • Result.failure() : 作業失敗。
  • Result.retry() : 作業をリトライする。

WorkRequestを作成する

次に、さきほど定義した作業から WorkRequest を作成します。WorkRequest の作成方法は、以下の 2 通りあります。

val heavyWorkRequest: WorkRequest =
    OneTimeWorkRequestBuilder<HeavyWorker>().build()
val heavyWorkRequest = OneTimeWorkRequest.from(HeavyWorker::class.java)

WorkRequestを登録する

最後に、WorkManager に WorkRequest を登録します。登録されると、WorkRequest の作業がバックグラウンドで実行されます。

WorkManager
    .getInstance(context)
    .enqueue(heavyWorkRequest)

参考

WorkManager の概要

デジタルオーディオのボリュームをやってみる

f:id:jspnet:20191015234008p:plain:left

DSP(Digital Signal Processor)のファームウェアを実装する時、いつも悩むことは、自分が実装した信号処理のプログラムが正しいか(?)、どのように検証するかで、 WindowsLinuxでその期待の動作を十分に検証し(期待値を作り)、組み込んだファームウェアが正しいか(?)、その手法を考えます。

  • (超入門)デジタル信号処理とは・・・
    • デジタルボリューム  デシベル(dB)
      • サンプルコード【C言語
      • 起動方法
続きを読む

MIPSとMCPS

ソフトウェアの要件として、性能をMCPSでオーダーされたケースがありました。

f:id:jspnet:20191015234008p:plain:left 前記事の「MIPSとMCPS(?)、100MIPSは100MHzで動くか?」では、 ソフトウェアのベンチマークとして、MIPS【Million Instructions Per Second 】と、MCPS【Million Cycles Per Second 】について書きましたが、MCPSというキーワードがMIPSほど浸透してないのではないか?という個人的な見解も含めた内容でした。 ケースバイケースでMIPSとMCPSを使い分けていましたが、組込みの分野で求められるソフトウェアの処理量(演算量)の要求としては、事実上MIPSではなくMCPSを意味する場合が多く、MCPSも市民権を得たのではないでしょうか。

  • MIPS計算
  • MCPS計算
  • MCPS測定
    • サイクル数測定
    • ARM DWT Cycle Count Register
続きを読む

Date ヘッダ

はじめに

テストなんかで急に Date ヘッダ を用意しなきゃダメな場面はよくあると思います。今までは Epoch Converter からコピーペなどして使っていたんですが、ローカルで求める方法があったのでご紹介します。

続きを読む