Practical Vim

カテゴリー:  Tech  タグ:  books editor softoware vim

「Practical Vim」とは

Sublime Textに浮気をしようとしましたが、Vim愛が強すぎてなぜか 「 Practical Vim 」をあらためて購入してしまいました。

日本では、「 実践Vim 」というタイトルで日本語版が出ています。

ただ、日本語版はFirst Editionをベースに翻訳されており、最新はSeconde Edition なので、あえて英語版のSecond Editionを購入しました。

この Practical Vim のサブタイトル Edit text at the speed of thought とある ように、書かれている内容を身に付けると神速でタイプできるようになるでしょう。

以下のような特徴があります。

  • よくある「このプラグインを使うとこんなに便利だよ」みたいな説明はほとんどなく、 標準のVim 機能でどう編集を効率よく行うかにが中心である。

  • ノウハウよりもVimの設計思想から、どう編集すべきかが説明の中心である。

Vimmerにとってはバイブル的な本でわたしも時々読みかえしていますが、いつも あらたな発見があります。そんな本なので日本語の第一版を持っているのに このオリジナルの英語版の第二版を買ってしまったのでした。

モダン Vimについての本も近日公開!

読むとわかりますが、作者の Drew Neil はこよなくVimを愛しており、Vimについても 大変深い造詣を持っています。

そんな作者の新たな著書が出版予定であるのを見付けました。

タイトルは「Modern Vim - Craft Your Developent Environment With Vim 8 and Neovim」 です。

Practical Vim では標準的な機能に絞ってどんなVimでも再現できる編集のアプローチ やテクニックが紹介されていましたが、この「Modern Vim」では比較的新しいVimの 機能にフォーカスするようです。

私もNeovimユーザーなので、早速予約購入しました。

コーディング用フォント決定版Fira Code

カテゴリー:  Tech  タグ:  editor font

Fira Codeとは

Fira Code とは、リガチャを使いプログラミングでよく使う記号をわかり やすく表現しようという等幅フォントの拡張です。ベースとなる等幅フォントには Fira Mono が使用されています。

Fira Mono とはFirefox OSのデフォルト・フォントであるFira Sansに合わせて デザインされた等幅フォントです。 いずれもFF Metaがベースとなっているようです。

字体の比較です。

Fira code vs Myrica

Fira Code vs Myrica

グリフなど微妙に異なっています(異なるフォントですから当り前ですが) が、間違えやすい 1, i, j, l などは、Myricaと比較してもかなり判別しや すいと思います。

若干幅の設定が広すぎるような気がしますが、そのあたりはiTerm2での 設定で調整できます。

導入には Homebrewを使用します。

$ brew tap caskroom/fonts
$ brew cask install font-fira-code

エラーがなければ、無事FireCodeフォントができているはずです。フォントブック で確認して見ましょう。

また、以下がiTerm2での設定です。

重要なのは、「リガチャ」の指定をチェックすることと、 ~Non-ASCII文字に ついては日本語フォントを指定することです。~ Fire Codeには日本語フォント は含まれていません。

( 2018-01-13 ) Non-ASCII文字を指定してはいけませんでした。

iTerm2の設定

iTerm2でのフォント設定

Fira Codeはそんなに読みやすいのか

Fira Codeを使うとコードがメチャメチャ読みやすくなります。

これまで私が使ってきたフォントは、英文字の判読性の悪い文字を問題として 多くは、プログラミングで読みやすいInconsolataと日本語フォントの合成をして 多少グリフを調整している程度のものがほとんどでした。

Fira Codeは、元になったFira Mono自体の可読性もよく更に「 リガチャを使いプログラミングでよく使う記号をわかりやすく表現しよう」 としたものです。

たとえば、リガチャを指定しない例が以下です。

リガチャなし

リガチャなしのFira Code

次はリガチャを使った例です。

リガチャあり

リガチャありのFira Code

プログラムでよく使う等号や不等号がいい感じで1文字で表現されて います。

またPowerline、Airlineなどを使っている場合は、対応したフォントも 含まれているのでお手軽に利用できます。わたしはNeovimでLightlineを 使っているので設定してみました。

Lightline with Fira Code

Fira CodeのPowerline互換フォントを使用したLightline

ちなみに文字コードは以下の通りです。

Lock

uE0A2

Network

uE0A0

Spearator

uE0B0, uE0B2

Separator-thin

uE0B1, uE0B3

さて、あまりに感じがよく幸いにしてWeb Fontも提供されていたので、 早速このサイトのコードのフォントも Fira Codeをしてしてみました。

以下はサンプルです。

let closure: (Int?) -> String = {
    return "Number: \($0 ?? 0)"
}

for i in 1..<100 {
    guard i != 2 else { continue }

    if i == 42 {
        print(closure(i * 10))
    } else if i >= 50 || i <= 75 {
        print(closure(i))
    } else if i >= 50 && i <= 75 {
        print(closure(i))
    }
}

個人的には非常に気にいったので、しばらく使っていきます。

産經新聞電子版のレビュー

カテゴリー:  Tech  タグ:  newspaper web/tech

産經新聞電子版を選んだ訳

以前「美しい新聞」というキャッチコピーで2006年に創刊されたSANKEI EXPRESSを 購読していましたが、2016年に廃刊されてしまいました。

以来、うちでは新聞を購読していませんでしたが、家族が仕事で必要との ことで止む無く購読を始めました。

いくつか検討しましたが、以下の様な条件から必然的に 産經新聞電子版 を購読することとしました。

  • 自分たちの思想を売るために嘘の記事をでっちあげて国も売り飛ばす様な新聞社 は嫌だ。

  • 新聞に月に3,000円とか、頭がおかしいとしか思えない。

  • 日経新聞はかなり前だが、購読してあまりの出来の悪さに2度と使うまいと思った。

必然的に、最安値(月額1,800円)で右よりの産経新聞を購読することにしました。

産経新聞電子版の評価

PCなどからアクセスできるWeb版と、スマホアプリ版があります。どちらも 基本的にできることは同じです。

どちらも以下の様な特徴があります。

  1. 拡大縮小は自由にでき追従性も良い

  2. 見開き表示も可能

  3. 特定の記事をフォーカスし、テキスト表示してくれる

  4. 印刷も可能

スマホ版だけの機能として、 スクラップブック機能 があります。

他社のサービスと比較すると機能的にはシンプルですが、新聞を読む という目的からすると必要十分です。反応も良くストレスもありません。

一点だけ残念なのは、 テキスト表示の際にテキストにアクセスできない ことです。表示はされるのですが、テキストを選択したり、コピーしたりする ことはできません。これでは一体何のための機能なのか全く不能です。

最初はアクセシビリティの観点からスクリーンリーダー向けの機能かと 思ったのですが、スクリーンリーダーでもアクセスすることはできません。 これでは一体何のための機能か全く不明です。

有料サービスなので、そのテキストをコピーされたりするのを問題にしている のかもしれません。

が、スマホにしかないスクラップ機能より、自分に有用な情報をテキストで 残しておけることの有用性の方がよほどユーザーにとってはありがたいです。 新聞社の方は知らないかもしれませんが、世の中には「引用」ということも あるんですよ。

新聞社のサービスの中では良いサービスだと思いますが、こういう部分は 発信側の都合だけでユーザーを見ていないなと思いました。

SublimeText3、再び

カテゴリー:  Tech  タグ:  editor software sublime text

訳あってSublimeText3を使い始めました

この1年ずっとVimを使っていましたが、訳あってSublimeTextを 使い始めました。

今回はVimライクな使い方もやめてネイティブ?な使い方をして 行こうかと思います。

標準機能であるSnippetを使えば、ブログのメタデータの書き出しも簡単です。

Sublime Snippet

SublimeText3 Snippet

また、プラグインも多く発表されています。 例えば、 Restructured Text (RST) Snippets を使えばreStructuredTextの執筆もサポートして くれます。

Sublime reStruct Snippet

sublime-rst-completion

SublimeTextが話題になったのは、2014〜2015年頃の様な気がしていたので、Google Trendで確認して見ました。

世の中的には、新しいGithubご謹製のAtomやMicrosoftのVSCが人気なのかと思って いましたが、Google TrendをみるとSublimeTextもVimもそこそこ人気のようです。

しばらく、Vimと併用です。また、Vimに戻る可能性は高いですが。

ブログのカテゴリの整理

カテゴリー:  Tech  タグ:  blogging hugo pelican

カテゴリの整理

Hugoからの移行時に、記事のカテゴリは全て "blog" としてタグのみを使う ようにしていました。使っているタグは10種類くらいです。

ところが、以下のような問題が残ってしまいました。

  • 使っているテーマはカテゴリのアーカイブへのリンクを自動でメニューに追加して くれるが活用できていない。タグだと数が多すぎる。

  • 自動的に関連記事へのリンクを追加してくれるプラグインがあるが、タグにより 関連記事を探すため、現在の10種類だと粗すぎて関連記事がうまく拾えていない。

いろいろ考えた挙句、現在のタグをベースにカテゴリを集約して数を減らしつつ、 タグはもう少し自由により細かく設定することにしました。

集約したカテゴリは以下の通りです。

Tech

技術系の記事。

Gadget

ガジェット系の記事

Automotive

自動車関連の記事

Trivialities

雑記です。

Entertainment

書評、映画、音楽関連記事。

Dining

食やお酒関連の記事。

過去記事の自動変換

過去のMarkdownで書き溜めた記事の移行は面倒だったのでプログラムを書きました。

#!/usr/bin/env python
import os
import re
import fileinput

# TagsからCategoryへの変換プログラム
# ./content 以下のフォルダを再帰的に読み込み処理を行う。
# 1. 年度を使ったTagは無視する
# 2. 最初のタグをカテゴリとして登録する
# 3. 複数のタグを集約してカテゴリ数を限定する。
def print_meta(path, title, date, tags,slug,category,description):
    print('Title: {0}'.format(title))
    print('Date: {0}'.format(date))
    if len(tags) > 0:
        print('Tags: {0}'.format(tags.lower()))
    print('Category: {0}'.format(category))
    print('Slug: {0}'.format(slug))
    print('Description: {0}'.format(description))
    print()

def convert_file(path):
    with fileinput.input(files=(path,), inplace=True) as f:
        state = 'meta'
        title = ''
        date = ''
        tags = ''
        slug = ''
        category = ''
        description = ''

        for line in f:
            line = line.strip('\n')
            kv = line.split(':', maxsplit=1)
            key = kv[0].lower()
            if state == 'meta':
                if key == 'description':
                    print_meta(path, title, date, tags,slug,category,description)
                    state = 'body'
                else:
                    if key == 'title':
                        title = kv[1].strip('"')
                        title = title.strip()
                    elif key == 'slug':
                        slug = kv[1].strip('"')
                        slug = slug.strip()
                    elif key == 'description':
                        description = kv[1].strip('"')
                        description = description.strip()
                    elif key == 'date':
                        date = kv[1].strip('"').replace('T', ' ')[:len('YYYY-MM-DD HH:MM')]
                        date = date.strip()
                    elif key == 'tags':
                        tags_temp = kv[1].strip('[]').replace('"', '')
                        tags_temp = tags_temp.strip()
                        tags_array = tags_temp.split(',')
                        tags = ''
                        for item in tags_array:
                            pattern = r"20*"
                            match = re.match(pattern,item)
                            if match:
                                tags_array.remove(item)
                            else:
                                if tags == '':
                                    tags = item
                                else:
                                    tags = tags + ',' + item
                        first_tag = tags_array[0].strip()
                        if first_tag in {'car','cars'}:
                            category = 'Automotive'
                        elif first_tag in {'web/tech','software'}:
                            category = 'Tech'
                        elif first_tag in {'music','films','books'}:
                            category = 'Entertainment'
                        elif first_tag in {'gadget'}:
                            category = 'Gadget'
                        elif first_tag in {'foods and drink'}:
                            category = 'Dining'
                        elif first_tag in {'travel','daily trivialities',
                                           'daily trivialitieis','current affairs'}:
                            category = "Trivialities"
                        else:
                            category = first_tag
            else:
                print(line)

for path, dirs, files in os.walk('content'):
    for f in files:
        if f.endswith('.md') or f.endswith('.markdown'):
            fpath = os.path.join(path, f)
            print('path={0}'.format(fpath))
            convert_file(fpath)

macOS上でLinux Mint を試す

カテゴリー:  Tech  タグ:  linux software

ジジィになっていつまでmacOSを使い続けるかわからないなので、Linuxを 試しておくことにしました。

Linux Mintのインストール

最近のDesktop OSとしてのLinuxの最近の事情を全く把握していない状態でした が、最近のディストリビューションはデバイスの認識率も高くハマる確率は 低そうです。どうせならと割と新しい Linux Mint というディストリビューションを選んでみました。

デスクトップマネージャーの種類によりいくつかバリエーションが選べるようです 。Parallels上で稼働させる予定なので、どうせデスクトップのエフェクトなどは 切ってしまうの思うので、私は比較的軽そうなXfceを選択しました。

ダウンロードするとISO形式のファイルがダウンロードできます。このイメージを CDに焼いてブートさせるとLiveイメージのLinuxが起動します。

Parallelsの場合は以下の様にインストールします。

  1. Parallelsから「新規」->「DVD / イメージからインストール」を選択して このイメージファイルを指定します。

  2. しばらく待つと、Parallels上でLinux Mintが起動されます。 GUIでデスクトップが表示されるはずです。

  3. デスクトップ上にインストーラーが置かれているので、これを起動します。 するとLinux Mintのインストールが始まります。

Parallels上のインストールでも基本的にはデフォルトのまま進んでいって 大丈夫です。20分くらいでインストールは完了します。

最低限の設定

まず、日本語を選択してインストールしたので主なフォルダが日本語になって います。面倒なので、英語にしておきましょう。

$ LANG=C xdg-user-dirs-gtk-update

次に日本語の設定です。多分GUIでも設定できると思いますが、コマンド から設定してみました。以下では、Input MethodであるFcitxとGoogleの 日本語変換メソッドのMozcをインストールしています。

$ sudo apt-get install fcitx fcitx-mozc fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-ui-classic fcitx-config-gtk mozc-utils-gui im-config
$ im-config -n fcitx

そして、Neovimと依存するPython3の導入です。

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:neovim-ppa/stable
$ sudo apt-get update
$ sudo apt-get install neovim
$ sudo apt-get install python3-dev python3-pip
$ sudo pip3 install neovim

Gitも導入しないとインストールされていないので、インストールしておきます。 また、Neovim の設定は、Bitbucketで管理しているので、GitでCloneしておき ます。Cloneしたら .config フォルダにシンボリックリンクを貼ります。

$ sudo apt install git
$ cd ~
$ git clone https://hogehoge@bitbucket.org/hogehoge/vimfiles.git
$ mkdir .config
$ mkdir .config/nvim
$ ln -s vimfiles/init.vim .config/nvim/init.vim
$ ln -s vimfiles/dein.toml .config/nvim/dein.toml
$ ln -s vimfiles/dein_lazy.toml .config/nvim/dein_lazy.toml

そして最低限の設定を .bash_profile に記述しておきます。

export XDG_CONFIG_HOME=~/.config
export TZ="Asia/Tokyo"
export LANG=ja_JP.UTF-8

あとはNeovimを起動すれば自動的に設定したプラグインをダウンロード して読み込んでくれます。初回のみ UpdateRemotePlungins とコマンドを実行すれば完了です。i

今すぐ移行しても困らないか

Linux Mint

Linux Mint

後で気づきましたが、GUIのソフトウェア管理ツールがあったので、 Neovimなどはそこで選択すればコマンドラインであれこれタイプしなくても クリック一発でインストールできたかもしれません。

ソフトウェア管理では、App Storeに似せたインターフェイスで、かなりの 数のアプリケーションが網羅されているようです。開発ツールやオフィス 系のアプリだけなく3Dや画像関連のアプリもカタログされています。

早速、Spotifyを導入してみました。Parallelsのフルスクリーンで表示 していると、Spotify、Google Chrome、Myricaフォントで表示されたターミナル とNeovim。いつものmacOS上と変らぬ光景です。

こうしてみると、慣れていない部分で戸惑う部分はあるものの、自宅でやりそうな 作業のほとんどはブラウザとエディタがあれば十分ですし、 たまにやる作業もざっと見た感じでは代替アプリがありそうです。

困りそうなのは、Logic Proの代替がなさそうなことくらいでしょうか。

「いつでも乗り換えられるなぁ」というのが印象です。 移住計画を少しづつ立てようかと思いました。

フェザー 両刃オールステンレスレザー TAS-DS、米国でも人気!

カテゴリー:  Gadget  タグ:  shaving

米国でも売られているフェザー 両刃オールステンレスレザー TAS-DS

米国のAmazon.com を眺めていて気づいたのですが、米国でもフェザーの両刃 オールステンレスレザー TAS-DSが売られていました。 Feather All Stainless Steel Double-Edge Razor, Model AS-D2 として売られていて、微妙にモデル名が違います。

日本で発売していたかどうか不明ですが、フェザーの英語サイトを見ると WS-D1S を両刃ホルダーを以前に発売していたようです。 [cite01]

そして日本で TAS-DS と言われていたモデルは、別のカタログを見ると AS-D2 と紹介されていました。 [cite02]

売られているだけでなく、かなりの人気!

日本のAmazon を見ると、評価は高いものの高額 ということもあって、それほどコメントは付いていません。

日本のAmazonの評価

Amazon JapanでのTAS-DSの評価

ところが、 USのAmazon ですと、驚いたことに 488件 ものコメントが付いています。

USのAmazonの評価

Amazon でのTAS-DSの評価

日本では電気シェーバーで済ませている人も多いと思いますが、米国ではシェービング フォームをつけてカミソリで髭を剃るウェットシェービングを好む人が多く、結果として 両刃カミソリに対する関心も高いようです。

マニアの評価

中には、4,000語近い長文のレビューを熱心に書き込んでいるユーザーもいました。

この方、いくつも両刃カミソリを持っていてカミソリ経験?も豊富な方のようです。

主張は2点です。

  • マイルドすぎるという評価があるが、切れ味はカミソリ刃の問題でホルダーはいかに 安全に髭がより剃れるよう肌に刃を当てるかである。このホルダーは安全を志向した ホルダーであるが、きちんとした角度で当てると髭がよく剃れる。

  • 高過ぎるという評価があるが、材質とその加工を見ると妥当である。

特に、フェザーのハイステンレスが切れ味が 良過ぎる ので有名ですが、その原因 が、刃が切れ味が良いだけでなく、薄く柔らかく髭の抵抗があった時に刃が暴れる ことにあるという意見は、感覚的に私も感じていたことと同じです。

そして、TAS-DSでは以下のように意図的にデザインされていると主張しています。

The underside of the top cap of the Feather AS-D2 razor has a square “post” at each of its four corners that corresponds to a matching cutout at each of the four corners of a standard DE blade; the top cap’s posts mate snugly into depressions or “sockets” at the corners of the standard AS-D2 baseplate, allowing the top cap and baseplate together to clamp the blade very firmly on both sides along the full length of the blade near to the cutting edge; this is an unusual design feature of the AS-D2, and, not incidentally, it ensures that the blade will be perfectly aligned between the top cap and baseplate when the pieces of the razor are tightened.

なかなかのマニアぶりです。

フェザーのサイトを見るとオンラインショップをやめてしまった様です。大丈夫かな。

このTAS-DSもレギュラーモデルではない様で、製品情報にはありません。無くなる前に 是非どうぞ。


参考情報

キーボードブリッジ HHKB専用

カテゴリー:  Gadget  タグ:  happy hacking keyboard keyboard

「HHKB 20周年記念ユーザーミートアップ」での記事

昨年Happy Hacking Keyboardが20周年だったそうで、そう言えば私自身も息子 が生まれる前に初代を購入し、その息子が成人した今も使い続けているので 20年使ってることになります。

そして、昨年20周年イベントがあったというのを以前Web記事 [cite01] で読みました。

そこで次のようなやりとりがなされていたのを思い出しました。

[来場者]:私はMacbookと一緒にHHKBを使っているのですが、Macbookのキーボードの 上にHHKBを載せると、端子が画面に当たったり、ケーブルが長すぎたりして、 なんだかしっくりこないんです。 でもアクセサリーなら、Macbookにビシっと合うようなものが作れると思うので、 是非ご検討いただきたいです。

[斉藤氏]:それもわりとすぐ作れますね。

この「斎藤氏」というのは、 バード電子 の 社長の斎藤氏とのことです。

そして、本当に製品化しちゃったみたいです。

ただのアクリル板のようだが

そして、買ってしまいました。

ただのアクリル板のようですが、Macbook Airにぴったりです。

Karabiner-Elementsを使って キーをHappy Hacking Keyboardを接続した時だけ本体のキーボードを無効化できているので、既に Macbook Airのキーボードの上にHappy Hacking Keyboardの乗っけて使っていたのですが、 やはり本体のキーが痛まないか心配です。

このキーボードブリッジを使うと、こんな風にキーボードを覆ってくれます。

Keyboard Bridge

キーボードブリッジ

Macbook Airにぴったりです。ちょうどタッチパッド部分が抉られていて、キーを 載せてもタッチパッドを使うこともできるようになっています。

私はこんな感じで使っています。

こんな感じで使ってる

キーボードブリッジの使い方

Happy Hacking Keyboard BTは高さがあるのと、不用意にタッチパッドを触らないよう パームレストを置いています。これもバード電子製です。

キーボードの上に直接置いていた時は、位置によってやっぱりガタつきが出ていました が、キーボードブリッジを置くことでちょうどMacbook Airのキーボード部分のざくり に板を渡す形になり非常に安定します。なおかつ、Macbook Air本体のキーボード 自体には全く押圧がかからないので安心して使えるようになりました。

ただの板なんですがね。


セスキ酸でキーボードの手入れ

カテゴリー:  Trivialities  タグ:  happy hacking keyboard keyboard

仕事始めにキーボード掃除

自宅で使っているHHKBが酷く汚れているのに気づきました。きっと仕事で 使っている墨のHHKBも汚れているんだろうと思い、仕事始めにキーボード の手入れをしました。

よくタイプするキートップが黒く汚れています。 情けないことに、一番汚れていたがDELETEキーだったりしたのですが。

ティッシュと綿棒を少し濡らしてゴシゴシやったのですが、なかなか取れません。 基本的に手垢や指先の皮脂などだと思うので、セスキ酸を使って掃除をしたら 新品同様になりました。

セスキ酸でクリーンニングしたHHKB

セスキ酸できれいになったHappy Hacking Keyboard

セスキ酸とは?

セスキ酸とは、「重曹と炭酸塩の中間の物質」とよく説明されています。

重曹もよくナチュラルクリーニングに使われますが、セスキ酸は重曹より さらに使いやすく環境への負荷も少ない洗浄剤です。

使いやすさは、次の2つの特徴からです。

  • アルカリ性ですが重曹ほどアルカリ性が強くないので、処置した対象の傷み も少なく手荒れの心配も低い

  • 水に溶けやすいので、適度の濃度を調節した洗浄液が作りやすい。

使い勝手が大変良いのに加えて洗浄力は高いので、ナチュラルクリーニングには 欠かせません。

うちでは普段から500ml程度の水に小さじ1杯のセスキ酸水をスプレーに入れて 掃除に使っています。今回もスプレーからティッシュに吹きかけたもので、 キーボードを拭き拭きしただけです。一応その後真水を含ませたティッシュ でさっと拭きました。

アルカリ性なので皮脂の汚れを効果的に落としてくれるので、キーボード だけでなく、電気のスイッチなどの黒ずみも一発で取れますよ。

Herbal Healing Mouse Rest

カテゴリー:  Gadget  タグ:  mouse

うさぎの形をしたマウスレストです。 10年ほど前にも 購入していました。

今回、 Slim Blade Trackball を購入したので、 合わせて再購入です。

人気商品とは思えませんが、まだ売っているのがすごい。

無農薬の小麦粒とハーブが入っているので、ラベンダーのよい香りがします。