スポンサーリンク

2016年11月24日木曜日

Android でテキストをブリンクさせる

意外なことに Android にはテキストをブリンクさせる機能がありません。

なのでアニメーションを使ってブリンクさせる例をよく見かけます。例えばこんな感じ。

        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 の表現力がぐっと増します。

どの関数も引数に関数オブジェクトをとり、あるクラスインスタンスに対してその関数オブジェクトを適用する、という基本機能を持っています。しかしそれぞれ実装が違うため、使い方が微妙に異なります。

2016年10月31日月曜日

Emacs 25.1 の isearch のちょっとした改良点

Emacs 25.1 もだんだん手に馴染んできました。24からあまり大きな変化は見られないというのが正直な感想ですが、細かいこところで地味な改良があるのを時々発見します。

isearch にもちょっとした改良が行なわれていました。以下の設定を init.el に追加します。

(setq search-default-mode #'char-fold-to-regexp)

こうしておくと、例えば isearch (C-s) で "(ダブルクォーテーション文字)を検索した場合、«» や ❝❞ 等の、非ASCIIで何となく同じ仲間の文字もヒットするようになります。

2016年10月13日木曜日

Emacs25 の package-selected-packages を何とかする

Emacs25 になって、インストールされたパッケージが package-selected-package 変数に保持されるようになりました。これはパッケージを削除する時などに依存性に矛盾が発生しないようにするために使われるようです。

パッケージを保持するだけならばいいのですが、問題は、M-x list-packages などを実行した時に、この値が init.el (まはた .emacs)の末尾に勝手に書き込まれてしまうことです。

超新星とは何か

NGC6751
NASA/The Hubble Herritage Team(STScI/AURA)

誤解されている用語

作家の星新一氏は、よく人から「星新一って逆から読むと一新星となり、いい名前ですね」と言われ、その都度、新星ってのは星が死んでいく時の最後の姿なんだけどなとボヤいている、とエッセイに書いておられました。因みに「星新一」はペンネームではなく、星氏の本名です。

最近でもよく「野球界に新星誕生」みたいな使い方をされます。そう言えば「超新星」なんていう音楽グループもいましたっけ。新星は英語で言うと Nova です(超新星は Supernova)。これもよく使われる名前です。死ぬゆく星の名前だということ認識してるのでしょうか。

新星/超新星は最も誤解されている天文用語です。

2016年10月12日水曜日

次世代の高速検索ツール ripgrep を howm で使う

高速検索ツール ripgrep

以前、howm で ag (The Silver Searcher) を使う という記事を書きました。しかし ag を使っていても、howm のメモが数千を越えるとそれなりに検索に時間がかかるものです。それに ag はバグが多いという問題もあります。

そんな時、るびきちさんのブログ 見て ripgrep なるツールがあることを知りました。

初めて ag の検索を見た時、その速度に驚いたものですが、ripgrep は更にその数倍の速度を叩き出しています。ag でもうこれ以上劇的なパフォーマンスの向上はないだろうと思い込んでいましたが、まだこれだけ改善の余地があった事には驚きです。実際に使ってみても、おっ!と思うくらい速いのが実感できます。

2016年10月7日金曜日

Emacs 25.1 で起動時に警告が

Emacs 25.1 を使ってみた

Emacs 25.1 がリリースされたので、早速使ってみました。24.5 の時の設定は、何も変更せずにほぼそのまま使えました。

一点だけ問題があり、起動時に以下の警告が出るようになってしまいました。

Warning (bytecomp): (lambda (arg) ...) quoted with ' rather than with #'

警告なので内容からしても無視してして構わないと思いますが、起動する度にこれが出るのは精神衛生上よくありません。

lambda 関数のクォートに #' ではなくて、' が使われていることに対して警告を出しているようです。