意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

はてなブログのサンプルエントリーをMarkdownで書いてみた

はてなブログをカスタマイズする際には、いきなりメインのブログに手を加えるのではなく

  • サンプル用のブログを一つ作る
    • はてなブログは、1つのアカウントで3つ(Proの場合は10個)までブログを作れる。
  • サンプル記事(エントリー)を書く

と便利です。


その際、サンプル記事のMarkdownがほしいです。

はてなブログ公式でははてな記法のサンプルを提供しています。

help.hatenablog.com

また、見たままモードであれば、下記をそのまま編集画面にコピペすれば、基本的にはこと足りるはずです(未検証)。

coolbox.hatenablog.com

しかし問題は、Markdown用のサンプルがないことです。 適当なMarkdownのサンプルはありますが、はてなブログで使えるサンプルはなかなかありません。

そこで、自分ではてなブログ用サンプルエントリーのMarkdown版を作りました。

サンプルのプレビュー(見た目)

tech.3rd-p-zombie.net

サンプルのMarkdownソース

はてなブログのサンプルエントリー

サンプルに対する補足

Markdownの中でのはてな記法

使えたはてな記法

  • フォトライフ記法
  • asin記法(Amazon.co.jpへのリンク)

使えなかったはてな記法

  • 定義リスト(dl, dt, dd)
    • HTMLで直接打ったら使えます。
  • 引用記法

はてなブログ用Markdownのリファレンス

はてなブログ公式には、残念ながらMarkdown記法のリファレンスがありません。

有志による下記の記事を参考にして下さい。

mametanuki.hateblo.jp

igcn.hateblo.jp

以上です。

藤原 惟

はてなブログ用サンプルエントリー(Markdown版)

下記記事のサンプルです。Markdownのソースはそちらをご覧ください。

tech.3rd-p-zombie.net


段落

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

フォトライフ

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

ブロック

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

大きい画像

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

罫線

h1見出し

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。 ABCDEFGHIJKLMabcdefghijklm1234567890

h2見出し

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。 ABCDEFGHIJKLMabcdefghijklm1234567890

h3見出し(*)

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。 ABCDEFGHIJKLMabcdefghijklm1234567890

h4見出し(**)

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。 ABCDEFGHIJKLMabcdefghijklm1234567890

h5見出し(***)

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。 ABCDEFGHIJKLMabcdefghijklm1234567890

h6見出し

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。
ABCDEFGHIJKLMabcdefghijklm1234567890

asin

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

「へんな会社」のつくり方 (NT2X)

「へんな会社」のつくり方 (NT2X)

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

引用

「公開デザイン祭2007秋」を開始しました - はてなダイアリー日記

本日(11月12日)から11月27日まで、はてなダイアリーの公開デザインコンテスト「公開デザイン祭2007秋」を開催します。

リスト(ul,ol,dl)

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

  • 大賞1名:Amazonギフト券5万円分
  • 入選9名:Amazonギフト券1万円分
    • 大賞1名:Amazonギフト券5万円分
    • 入選9名:Amazonギフト券1万円分

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

  1. 大賞1名:Amazonギフト券5万円分
  2. 入選9名:Amazonギフト券1万円分
    1. 大賞1名:Amazonギフト券5万円分
    2. 入選9名:Amazonギフト券1万円分

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

大賞1名
Amazonギフト券5万円分
入選9名
Amazonギフト券1万円分

テーブル

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

名前 個数
りんご 1
みかん だいだい 2

あのイーハトヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモーリオ市、郊外のぎらぎら光る草の波。

PRE

.XXX {
  width:999px;
  height:999px;
}

.propA, .propB, .propC {
  width:999px;
  height:999px;
}

#YYY {
  width:9px;
  height:999px;
}

MarkdownでSphinxできるようになったので試してみた(後編)

この記事はドキュメンテーションツールAdvent Calendar (http://www.adventar.org/calendars/1196) の2日目です。

(まだまだ空欄だらけなので、執筆者も募集しています。)

この記事は2部構成の2部目です。

今回は、実際にSphinxをインストールし、Markdownで文書が作成できるかどうかを試してみます。

なお、元ネタはこのプレゼンです(再掲)。

準備

Mac OS X上で作業。HomebrewでインストールしたPython2を使用します。

最近ターミナルをほったらかしていたので、まずHomebrewを整備します。

$ brew doctor
$ brew update
$ brew upgrade

バージョンを確認。

$ python --version
Python 2.7.10

インストールしてみる

Sphinxの最初の一歩 — Sphinx 1.3.2 ドキュメント を元にインストールしてみます。

Sphinxをインストール。

pip install Sphinx commonmark recommonmark

次はsphinx-quickstartですが、そのままだとエラーになります。

sphinx で ValueError: unknown locale: UTF-8 というエラーが出た - Please Sleep

エラーを修正するために、.bashrcまたは.zshrcに下記を追加し、シェルを再起動します。

export LC_ALL='ja_JP.UTF-8'

文書を書いてみる

まず、ターミナルを開き、適当なディレクトリを作ります。これを作業ディレクトリにします。

続いて、sphinx-quickstartを実行します。ここから対話形式で質問されるので、下記のように答えました。(わかる人は好みで変えてもOKです。)

 $ sphinx-quickstart                                                                                                                          [2:43:20]
Welcome to the Sphinx 1.3.2 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).

Enter the root path for documentation.
> Root path for the documentation [.]: 【何も記入せずEnter】

You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/n) [n]: y

Inside the root directory, two more directories will be created; "_templates"
for custom HTML templates and "_static" for custom stylesheets and other static
files. You can enter another prefix (such as ".") to replace the underscore.
> Name prefix for templates and static dir [_]: 【何も記入せずEnter】

The project name will occur in several places in the built documentation.
> Project name: trial 【好きな名前にする】
> Author name(s): sky_y 【好きな名前にする】

Sphinx has the notion of a "version" and a "release" for the
software. Each version can have multiple releases. For example, for
Python the version is something like 2.5 or 3.0, while the release is
something like 2.5.1 or 3.0a1.  If you don't need this dual structure,
just set both to the same value.
> Project version: 0.1
> Project release [0.1]: 【何も記入せずEnter】

If the documents are to be written in a language other than English,
you can select a language here by its language code. Sphinx will then
translate text that it generates into that language.

For a list of supported codes, see
http://sphinx-doc.org/config.html#confval-language.
> Project language [en]: ja

The file name suffix for source files. Commonly, this is either ".txt"
or ".rst".  Only files with this suffix are considered documents.
> Source file suffix [.rst]: 【何も記入せずEnter】

One document is special in that it is considered the top node of the
"contents tree", that is, it is the root of the hierarchical structure
of the documents. Normally, this is "index", but if your "index"
document is a custom template, you can also set this to another filename.
> Name of your master document (without suffix) [index]: 【何も記入せずEnter】

Sphinx can also add configuration for epub output:
> Do you want to use the epub builder (y/n) [n]: n

Please indicate if you want to use one of the following Sphinx extensions:
> autodoc: automatically insert docstrings from modules (y/n) [n]: y
> doctest: automatically test code snippets in doctest blocks (y/n) [n]: 【何も記入せずEnter】
> intersphinx: link between Sphinx documentation of different projects (y/n) [n]: 【何も記入せずEnter】
> todo: write "todo" entries that can be shown or hidden on build (y/n) [n]: 【何も記入せずEnter】
> coverage: checks for documentation coverage (y/n) [n]: 【何も記入せずEnter】
> pngmath: include math, rendered as PNG images (y/n) [n]: 【何も記入せずEnter】
> mathjax: include math, rendered in the browser by MathJax (y/n) [n]: y
> ifconfig: conditional inclusion of content based on config values (y/n) [n]: 【何も記入せずEnter】
> viewcode: include links to the source code of documented Python objects (y/n) [n]: 【何も記入せずEnter】

A Makefile and a Windows command file can be generated for you so that you
only have to run e.g. `make html' instead of invoking sphinx-build
directly.
> Create Makefile? (y/n) [y]: 【何も記入せずEnter】
> Create Windows command file? (y/n) [y]: n

Creating file ./source/conf.py.
Creating file ./source/index.rst.
Creating file ./Makefile.

Finished: An initial directory structure has been created.

You should now populate your master file ./source/index.rst and create other documentation
source files. Use the Makefile to build the docs, like so:
   make builder
where "builder" is one of the supported builders, e.g. html, latex or linkcheck.

source/conf.pyを修正する

ここでカレントディレクトリを見ると、buildsourceの二つのディレクトリが出来ています。

 $ ls
Makefile  build/    source/

Markdownを使用するにはsource/conf.pyをいじる必要があるので、下記のように変更します:

-source_suffix = ['.rst']
+source_suffix = ['.rst', '.md']
+source_parsers = {
+    '.md' : 'recommonmark.parser.CommonMarkParser'
+}

ドキュメント構造を定義する

Sphinxではsource/index.rstに必要なファイルの名前を追加することで、 構造を明示的に指定する必要があります。

ここでは、main.mdというファイルを追加するつもりで、source/index.rstを下記のように変更します(空行に注意):

Contents:

.. toctree::
   :maxdepth: 2

   main              ←これを追加する(拡張子は不要)

Markdown文書を作る

sourceディレクトリの下に、main.mdというMarkdown文書を適当に作ります。 例えばこんな感じ:

# Markdownを使ったドキュメント

これはMarkdownを使ったドキュメントです。

## 例えば

* リストは
* こんな感じです。

ビルドする

最後にビルドします。この設定ではmakeコマンドが使えます。引数には形式を指定するのですが、指定できる形式は引数無しでmakeを打つと見ることができます。

ここではHTMLを生成してみます。

make html

すると、build/htmlの下にHTML文書一式が現れます。

結果

ターミナルでopen build/html/index.htmlと打つと、そのままブラウザで閲覧できます。 面倒なのでスクリーンショットだけ示します。

indexページ(index.rst)。

f:id:sky-y:20151201032520p:plain

Markdownで書かれたmainページ(main.md)。

f:id:sky-y:20151201032529p:plain

使えるMarkdown書式

基本的にはCommonMarkで使えるものしか使えません。 下記を参照してください。

CommonMark Spec

まとめ

SphinxでうまくMarkdown文書を取り込めました。

Sphinxを使ったのは初めてですが、なかなか奥の深さを感じさせられるツールです。 もう少し深掘りしてみたいです。

なお、類似ツールにPandocがあるのですが、比較すると

  • Pandoc: 単一ページの変換向け、多種多様なフォーマットで入出力できる
  • Sphinx: 複数ページから成る一式の文書(HTML, PDF, LaTeX)向け

のように思います。適材適所で使えたらよいかと思います。

最後に、Sphinx-usersメーリングリストの方々に感謝の意を示して、この記事を終わります。

MarkdownでSphinxできるようになったので試してみた(前編)

この記事は ドキュメンテーションツールAdvent Calendar の1日目です。

(まだまだ空欄だらけなので、執筆者も募集しています。)

www.adventar.org

私はMarkdownで普段文書を書いているのですが、 この度ドキュメンテーションツール Sphinx でMarkdownが使えるようになったと聞いたので、軽く試してみたいと思います。

この記事は2部構成で2日にわたって執筆されます。

  • 1日目:概要の説明(いまここ)
  • 2日目:実際に試してみた記録(予定)

今回の記事では、概要をざっと説明します。

背景:Markdownの標準規格「CommonMark」の制定

MarkdownはGitHub Flavoredをはじめとして色々な方言があり、 まとまった仕様もなく混乱していました。

その中に現れたのが、CommonMarkというMarkdownの標準化規格です。

CommonMark

Pandoc の作者であるJohn MacFarlaneなどの委員会メンバーを中心に、 構文解析が厳密にできるように注意深く策定されました。 2015/08/23時点のバージョンは0.22です。

日本語の記事もあります。(この記事を読むと、規格がまとまるまでに波瀾万丈があったことが分かります。)

Standard MarkdownがCommon Markdow、そしてCommonMarkに

Sphinxとは

概要 — Sphinx 1.3.2 ドキュメント より色々引用。

Sphinxは知的で美しいドキュメントを簡単に作れるようにするツールです。

このツールはもともと、新しいPythonのドキュメントの変換のために作られました。

Sphinx特徴的な機能を以下に紹介します:

  • 出力形式: HTML (WIndowsのHTMLヘルプを含む)、LaTeX(印刷可能なPDFバージョン)、ePub、Texinfo、man、プレーンテキスト
  • 多岐にわたる相互参照: 意味のマークアップと、関数、クラス、引用、用語解説、似たような情報に対する自動リンク
  • 階層構造: 簡単にドキュメントツリーを定義でき、兄弟、親、子供のドキュメントに対して、リンクを貼れる
  • 自動インデックス作成: 全体インデックスと、言語特有のモジュールインデックス
  • ソースコードの対応: Pygmentsを使った自動ハイライト
  • 拡張: コードスニペットを使った自動テスト, Pythonモジュールのdocstringのインクルード(APIドキュメント作成), 他にもあります
  • 寄贈された拡張: 50以上の拡張が ユーザによって寄贈され。 sphinx-contribリポジトリ内にあり、ほとんどの拡張はPyPIよりインストール可能

SphinxでMarkdownできるぞ!

最近、SphinxにCommonMarkパーサ(つまりMarkdownパーサ)が搭載されたようです。 このプレゼンがきっかけで知りました。

というわけで、Markdown党にとっては念願の「Sphinxを使ったMarkdown文書の変換」が実現できるようです。これから実際に試してみます。

この次の話

以上で1日目(概要の説明)は終わりです。 2日目で、実際にインストールして文書を生成してみます(予定)。

mecab-ipadic-neologdをNMeCab用にshift-jisでコンパイルした

C#形態素解析をやりたくて、NMeCabを使うことにしました。 mecab-ipadic-neologdという辞書がいいらしいと聞いたのでNMeCabでも使おうと思ったのですが、少し手間取りました。

方法1: NMeCabのソースに手を加える

NMeCab でも mecab-ipadic-neologd を使ってみた - しばやん雑記

で紹介された方法ですが、NMeCabのソースを編集して、自前ビルドする方法があるそうです。しかし、できればNuGetのNMeCabを使用したいので、この方法はパスしました。

方法2: 辞書をshift-jisでコンパイルする

mecab-ipadic-neologdは事前にコンパイルして使う必要があるのですが、付属のスクリプトではUTF-8でしかコンパイルできない上に、「UTF8」という変なエンコーディング文字列を埋め込むのでNMeCabでは例外が発生します。

そこで、コンパイルスクリプトに手を加えてshift-jisでコンパイルすることにします。

具体的には、(cloneしたディレクトリ)/libexec/make-mecab-ipadic-neologd.shの166, 167, 182行目、mecab-dict-indexのオプション-tUTF8からshift-jisに書き換えてやります。

--- a/libexec/make-mecab-ipadic-neologd.sh
+++ b/libexec/make-mecab-ipadic-neologd.sh
@@ -163,8 +163,8 @@ fi

 if [ ${WANNA_CREATE_USER_DIC} = 1 ]; then
     echo "${ECHO_PREFIX} Create the user dictionary using ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}"
-    echo "${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8 -d ${MECAB_DIC_DIR}/ipadic -u ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}.dic ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}"
-    ${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8 -d ${MECAB_DIC_DIR}/ipadic -u ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}.dic ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}
+    echo "${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t shift-jis -d ${MECAB_DIC_DIR}/ipadic -u ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}.dic ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}"
+    ${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t shift-jis -d ${MECAB_DIC_DIR}/ipadic -u ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}.dic ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}
     if [ -f ${NEOLOGD_DIC_DIR}/${SEED_FILE_NAME}.dic ]; then
         echo "${ECHO_PREFIX} Success to create the user dictionary"
         echo
@@ -179,7 +179,7 @@ fi
 cp ${BASEDIR}/../misc/dic/unk.def .

 echo "${ECHO_PREFIX} Re-Index system dictionary"
-${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8
+${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t shift-jis

 echo "${ECHO_PREFIX} Make custom system dictionary on ${BASEDIR}/../build/${NEOLOGD_DIC_NAME}"
 make

その後、マニュアル通りにコンパイルを実行すると、shift-jisで作られた辞書バイナリが作成できます。 これをWindowsのディレクトリに持ってきてC#側で辞書を指定してやると、うまく動くようになります。

Visual Studioのプロジェクトディレクトリにコンパイル済み辞書を置く場合は、以下のように設定すると良いでしょう。

MeCabParam param = new MeCabParam();
param.DicDir = @"..\..\dic\mecab-ipadic-neologd"; 
MeCabTagger t = MeCabTagger.Create(param);

以上です。

メモ:Wi-FiルータにMacBookが繋がらないと思ったら、倍速モード(40MHz)が原因だった

実家のWi-FiルータiPhoneが繋がってMacBookが繋がらないなーと思って調べたので、今後のために記録しておきます。

  • PC: Macbook Air (13-inch, Early 2014)
  • OS: OS X 10.9.4
  • ルータ: Buffalo WZR-HP-G302H

状況

原因

ルータの「倍速モード(40MHz)」が原因だった。倍速モードをオフ(20MHz)にしたら、無事にMacBookでも無線LANが使えるようになった。

設定手順はルータによって違うので割愛しますが、「無線チャンネル」とか「帯域」の設定あたりに20MHzとか40MHzとかの設定項目があったらそれです。

簡単ですが、以上です。

小ネタ:動画ダウンローダ界のアーミーナイフ、youtube-dl

YouTubeなどの動画をダウンロードしたいときがあります。Webサービスを使う手もあるんですが、最近はコマンドラインツールyoutube-dlを使っています。

youtube-dlのすごいところは、とにかく対応サイトが恐ろしく多いこと。YouTubeはもちろん、Vimeoやdailymotion、さらにニコニコ動画にも対応。コマンドライン使いであれば、使い方もとてもシンプルなのでおすすめできます。

以下、コマンドライン中心の話です。Mac/Linuxは確実に動くはずです。Windowsもたぶんいけると思います。

インストールはPythonのpipでできます。(pip自体のインストールはこちらを参照。いつの間にかインストール方法も進化してた・・・。)

pip install youtube-dl

使い方はとても簡単。YouTubeなどのURLを引数に与えるだけです(zshの場合は引用符で囲む必要があります):

youtube-dl 'https://www.youtube.com/watch?v=LcU0uo_3vWs'

ニコニコ動画も同様。ただし、実際に試してみると、かなり時間がかかります・・・。

全ての対応サイトを知りたい場合は、以下を叩いてみて下さい:

youtube-dl --extractor-descriptions

一覧は下記にまとめてあります。

https://gist.github.com/sky-y/1fac37a3c9db71e6af78

有名どころでは、VimeoやTEDなんかも。有名アダルトサイトはだいたい網羅している感じ。