2019年1月5日土曜日

markdown とサービス メニュー

HTML の文章を修正するときに表やリストなどを HTML で書くのは面倒なものです。このようなときに、修正箇所を軽量マークアップ言語の Markdown で簡単に書いて、後から HTML に変換できる簡単なプログラムがあります。

Markdownの拡張版 MultiMarkdown では、 [Service] (サービス) から以下の二つの命令が利用できます。

md - Convert - MultiMarkdown to HTML.workflow
md - Convert - HTML to Markdown.workflow

brettterpstra.comからも配布されています。

macOSが持つ機能の一つである [Service] (サービス)は、自分で書いた簡単な処理プログラムを AppleのPages.app や BBEdit.app などさまざまなアプリケーションから利用できます。さらにショート カット キーを割り当てることもできるので、このような目的には便利です。実際、この文章を書くときにも使っています(笑)

ただ、C やPythonなどのコンピュータ言語を文法に応じて色づけする Syntax Highlightng の方法が MultiMarkdown では見つかりませんでした。そこで、もう一つの Markdown の拡張版 Kramdownを [Service] メニューから利用できるようにしました。

Kramdown は Rouge や Coderay の Syntax Highlightng ができます。ここでは Coderay を利用しました。Kramdown と Coderay のインストールの方法はそれぞれのサイトを参照してください。ちなみに、 Kramdown のネイティブは Ruby ですが、macOS に標準付属の Ruby で動作しますので気楽です。
[Service] メニューから呼び出せる命令は macOS に標準付属の Automator.app を使えば簡単にできます。Automator.app はアイコン プログラミング風の極簡単なものだけでなく、Shell Script や Python などを呼び出してもう少し細かな制御もできます。ここでは Kramdown をそのネイティブである Ruby 経由で Automator.app から呼び出します。

Automatorで [ファイル > 新規] を選択し、表示されたウィンド内の [書類の種類を選択してください] の枠から {クリックアクション] を選択する。

[ワークフローが受け取る現在の項目: ] ポップアップメニューから [テキスト] 、[検索対象] ポップアップメニューは初期値の [すべてのアプリケーション]、[入力] はそのまま、[選択されたテキストを出力で置き換える] チェック ボックスをクリックしてチェック マークを入れる。[イメージ] と [カラー] は初期値のままとします。

左欄の [アクション] タブから [ユーティリティ] を選択し、その右側のリストから [シェルスクリプトを実行] を右欄にドラッグ ドロップします。表示されたコラムの [シェル:] ポップアップメニューから [/usr/bin/ruby] を選択し、[入力の引き渡し方法; ] ポップアップメニューから [引数として] を選択します。
[シェルスクリプトを実行]のテキスト エリアに以下のコードを入力します。
#!/usr/bin/ruby
require 'kramdown';
markdown = ARGV[0];
markdown = +markdown
markdown.force_encoding("UTF-8")
print Kramdown::Document.new(markdown, {coderay_line_numbers: nil}).to_html;
以上で、[保存…]を選択すれば、ファイル名をkramdownなどと指定して、/Users/USER_NAME/Library/Servicesに保存されます。使い方は通常のサービス メニューと同じで、テキストを選択してから呼び出します。Microsoft Word でも使えますが、2008年版の Word では呼び出せませんでした(笑)

・・・と、ここまで書いて、上記のMultiMarkdownを[Service]から呼び出すツールは機能縮小版のMultiMarkdownがそのまま入っていることが分かりました。せっかく、MultiMarkdownをインストールしていますので、これを使わない手はありません。

上記と同様にAutomatorから [シェルスクリプトを実行] を使えるようにして、表示されたコラムの [シェル:] ポップアップメニューから [/bin/bash] を選択し、[入力の引き渡し方法; ] ポップアップメニューから [引数として] を選択します。[シェルスクリプトを実行]のテキスト エリアに以下のコードを入力します。
echo "$1" | /usr/local/bin/multimarkdown
あとは、上記と同様に処理します。

2019年1月2日水曜日

BBEditのPreviewフィルタ

以前にも書きましたが BBEdit の Preview 機能で拡張版の Markdown を表示できます。以前は、 Markdown の拡張版 MultiMarkdown でも利用でき、表も描画できることをご紹介しました。

少し工夫することで kramdown でも Preview に表示できます。kramdownは C や Python などのプログラム コードを色づけしたHTMLを出力できます。kramdownのインストールに関してはこのページを参照してください。macOSはRuby 2.x がインストールされていますので、上記ページの Mac OS X 項目にある命令を一つ実行するだけです。

kramdownのインストールが終わったとして・・・まず、~/Library/Application Support/BBEdit/ の中に Preview Filters という名前でディレクトリを作ります。既に Preview Filters がある場合はそのディレクトリを使ってください。

次に、Ruby を使ったShell Scriptを書きます。Shell Script の書き方や設定は他のサイトを参照してください。BBEditで以下のコードを書いて(コピー ペーストして)保存します。ここではファイル名を kramdown にします。保存先は先ほどの~/Library/Application Support/BBEdit//Preview Filters/ の中です。
#!/usr/bin/ruby
require 'kramdown'
markdown = $stdin.read
markdown = +markdown
markdown.force_encoding("UTF-8")
print Kramdown::Document.new(markdown).to_html
インストールの作業は以上です。

Preview で見るには、Markdown ファイルをBBEditで開き、[Markup > Preview in BBEdit] を選択します。次に、Preview ウィンドウ内にある[Filter]タブのプルダウンメニューから kramdown を選択します。

なお Kramdown の Option を設定する場合には最後の行のKramdown::Document.new(markdown).to_htmlのなかのnew(markdown の後に ', {}' を入れて、{}の中にOption を設定してください。Kramdown の Option は Google などで検索すると、この書式と共に色々と出てきます。

2018年11月26日月曜日

ESP-32マイクロ コントローラの基板は幅広のため、EIC-301ブレッド ボード二つをつないで搭載しました。


EIC-301ブレッド ボードには、二つ以上つなぐための機構(溝と突起)あります。


EIC-301は比較的安価ですし、他に使い回しもできます。ブレッドボードを接続しなければ配線できる数は増えますが、強度不足でピンが曲がり接触不良になるなどの不要なリスクを避けています。EIC-301ブレッド ボード二つをつないでESP-32がマウントできるかを確認するためにネットを探したのですが、探し方が足りないのか記事も写真も見つけられませんでしたので写真を公開します。・・・とは言うものの、まだ配線して動作検証していません (笑)

2018年11月2日金曜日

Markdown の表の罫線

Markdown のオリジナルでは表を描く機能が定義されておらず、表を描くには拡張版の Markdown を利用することになります。Markdown の拡張版はいくつかありますが、MultiMarkdownkramdown で表を書くと、とうぜん罫線が表示されません。通常は、出力された HTML ファイルをすこし書き換えてcssファイルで設定すると思いますが、とりあえず表示したいときに面倒です。そんな時のアイデアです。

kramdown

GitHub にも採用されているkramdownはなかなか高性能で、初期設定ではHTMLのタグを書くと出力にそのまま出してくれます。これを利用して、Markdownの文頭あたりに以下の一文を入れます。

<style type="text/css">
table {
    border-collapse: collapse;
}
table, th, td {
    border: 1px solid black;
}
</style>
たとえば、以下のようにします。

<style type="text/css">
table {
    border-collapse: collapse;
}
table, th, td {
    border: 1px solid black;
}
</style>
| First Header | Second Header |         Third Header |  
| :----------- | :-----------: | -------------------: |  
| First row    |      Data     | Very long data entry |  
| Second row   |    **Cell**   |               *Cell* |  

MultiMarkdown

MultiMarkdownは以前にも書きましたが BBEdit の Preview 機能で拡張版の Markdown を表示する時に便利です。BBEditではPreviewで表示する時のcssファイルを指定できます。以下のような css ファイルを書いて、 DefaultCSS_ Markdown.css.css という名前で保存します。保存する場所は ~/Library/Application Support/BBEdit/ の中に Preview CSS と言う名前のディレクトリ作ります。既に Preview CSS がある場合はそのディレクトリを使ってください。

table {
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid black;
}
なお、ファイル名を DefaultCSS_ Markdown.css.css とするとPreviewの初期値として利用できます。詳しくは、BBEditのwikiを参照してください。

2018年8月25日土曜日

Python 3.7

Python 3.7がリリースされています。
我が家ではHomebrewを介さず、Pythonのサイトからダウンロードしてインストールしていますが、インストーラの最後に以下のようなコメントが表示されました。

詳細は調べていませんがSSLに色々とあったことは聞いていたので、指示に従って/Applications/Python 3.7/にあるInstall Certificates.commandを実行しました。しかし、Terminalが起動して、その画面でインストールは成功したけどpipが古いと言われました。

You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.


そりゃ、Pythonが古くなったから3.7をインストールしたのでpipも古いのは当然です(笑)

pip3 install —upgrade pipで18.0にしました

ところで、以前は'pip''pip3'を使い分けていたように記憶しているのですが、'pip -V'でも'pip3 -V'でも同じ'pip 18.0'を返してきます。歳とってボケてきたかな(苦笑)

2018年8月9日木曜日

光ディスクの寿命

1989年から2008年頃までバックアップした追記型の光ディスクが壊滅状態でした。光ドライブも信頼性が低かったのでddrescueと正常な光ディスクで動作を確認してから、ddrescueでバックアップの光ディスクを調べました。


光ディスクの遅さと場所取りに嫌気がさして、2008年以降のバックアップはHDDにして、数年に一度の割合で容量の大きいHDDに入れ替えています。単なるバックアップだけでなく、記憶媒体の新陳代謝も重要かな?

2018年8月7日火曜日

Appleのリストア ストラテジー

Time MachineによるmacOSのバックアップとiTunesによるiOSのバックアップからのシステム全体のリストアにはインターネットが必要なようです。

macOS全体のリストア時には、macOSを再インストールするためにAppleからダウンロードしています。iOSはサードパーティーのAppもダウンロードしています。バックアップの容量削減と作業時間の短縮には有効な方法だと思います。

しかし、日本のように災害が多いところや、通信速度の遅い地域や途上国で、インターネットに依存しないと復元できないのは不安です。macOSは単独で復旧できるバックアップ用ソフトウェアか、Disk Utility.appを使って定期的にシステム全体を他のドライブにコピーした方が良いかもしれません。iOSは・・・もともとインターネットが前提の装置ですからね(笑)