少し前に howm で ripgrep を使う記事を書きました。
http://extra-vision.blogspot.jp/2016/10/ripgrep-howm.html
しかし使い初めてすぐに気付いたのですが、howm-menu に表示されるメモの順番がおかしくなるのです。
通常 howm-menu はメモファイルのタイムスタンプでソートし、最後に更新したメモ(の見出し)を一番上に表示してくれます。これがどうにもちゃんと順番が揃いません。更に howm-menu を表示する毎に、メモの順番が少しずつ変わます。
最初は何が起こっているのかさっぱり分かりませんでした。そこで読めない elisp を苦労してトレースしてみると、howm 自身はファイルのソートを正しく行ない、そのファイルリストを ripgrep に引数として渡しています。しかし ripgrep の出力結果が引数の順番通りになっていないのです。
スポンサーリンク
2016年11月30日水曜日
2016年11月27日日曜日
Kotlin の正規表現を使う
Kotlin を使い始めても色々な点で未だ Java 的なコーディングから抜けきれません。正規表現もそんな一つです。こんなことじゃいけないと思い、Kotlin の正規表現検索をちゃんと勉強すべく、色々情報をを探し回ったのですが、意外なことにまとまった情報が見つかりません。断片的な解説ページはいくつか有りますが、ちゃんと体系立って説明したものが見つからないのです。日本語、英語どちらにもです。
なので試行錯誤的に使い込んで分かってきたことを整理しておきます。
なので試行錯誤的に使い込んで分かってきたことを整理しておきます。
2016年11月25日金曜日
Emacs のマニア度を判定する方法
Emacs で C-t を使うかどうかで習熟度が分かると言われています。キーストロークを節約するために C-t を使っている人は相当なハードユーザーです。
通常 C-t は transpose-chars というコマンドにバインドされていて、これは前後の二文字を入れ替えます。文字を入れ替えるタイプミスをしてしまった場合、C-t で修正する人は相当 Emacs を使い込んでいる人です。
通常 C-t は transpose-chars というコマンドにバインドされていて、これは前後の二文字を入れ替えます。文字を入れ替えるタイプミスをしてしまった場合、C-t で修正する人は相当 Emacs を使い込んでいる人です。
2016年11月24日木曜日
Android でテキストをブリンクさせる
意外なことに Android にはテキストをブリンクさせる機能がありません。
なのでアニメーションを使ってブリンクさせる例をよく見かけます。例えばこんな感じ。
Android 3.0 以降であれば ObjectAnimator を使って、以下でもよいでしょう。
しかしアニメーションを使う方法は値を連続的に変化させるのでCPUに負荷がかかり、ブリンクさせている間中ずっとこの負荷がかかり続けます。この点がどうも気になります。
なのでアニメーションを使ってブリンクさせる例をよく見かけます。例えばこんな感じ。
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(1000L);
animation.setRepeatMode(Animation.REVERSE);
animation.setRepeatCount(Animation.INFINITE);
View textView = findViewById(R.id.text_view);
textView.startAnimation(animation);
Android 3.0 以降であれば ObjectAnimator を使って、以下でもよいでしょう。
View textView = findViewById(R.id.text_view);
ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "alpha", 0.0f, 1.0f);
animator.setDuration(1000L);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();
しかしアニメーションを使う方法は値を連続的に変化させるのでCPUに負荷がかかり、ブリンクさせている間中ずっとこの負荷がかかり続けます。この点がどうも気になります。
2016年11月18日金曜日
Kotlin の let(), apply(), run(), with() を使いこなす
始めに
Kotlin の標準ライブラリの中に let(), apply(), run(), with() という一連の関数があります。これらは Standard.kt という数十行の短かいソースコードの中で、それぞれ一行で定義されています。public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
public inline fun <R> run(block: () -> R): R = block()
これを一目見て理解できる人は相当な強者です。初心者にとっては宇宙語を読んでいるようで、まず理解できないでしょう。
これらの関数はその定義のシンプルさとは裏腹に強力なパワーを秘めています。これらが使いこなせるようになると、Kotlin の表現力がぐっと増します。
どの関数も引数に関数オブジェクトをとり、あるクラスインスタンスに対してその関数オブジェクトを適用する、という基本機能を持っています。しかしそれぞれ実装が違うため、使い方が微妙に異なります。
登録:
投稿
(
Atom
)