できる気がしてきた。

僕の興味のあることを共有します。

slimeのインストール

パソコンの移行が終了し、emacsの設定の手直しをしていたところ どうにもCommonLispの開発環境Slimeの調子良くない。 どうしたものかと思いgoogle先生にお尋ねしたところ、 随分前にもお世話になった「モダンCommonLisp」シリーズの記事が。 早速記事を参考に設定を見直してみたのですが、それでも良くならない。 記事の作成日時をみたらなんと!4年も前なのですね。 さすがに有名なSlimeとはいえ4年も過ぎていたら設定方法がかわってもおかしくないですよね。 そこで改めてSlimeのgithubアカウントを覗いたところ 「こんな設定で大抵良くなるぜ!」という記述が。

(setq inferior-lisp-program "sbcl")
(setq slime-contribs '(slime-fancy))

僕や「モダンCommonLisp」では

(setq inferior-lisp-program "sbcl")
(slime-setup '(slime-fancy slime-repl slime-banner))

となっていますが、今は上の設定で良いみたいですよ?

従ってlisp関係の設定は以下のようになりました。

(load (expand-file-name "~/quicklisp/slime-helper.el"))
(setq inferior-lisp-program "sbcl")
(add-hook 'lisp-mode-hook 'slime-mode)
(add-hook 'lisp-mode-hook 'rainbow-delimiters-mode)
(setq slime-contribs '(slime-fancy))
(add-hook 'slime-mode-hook 'set-up-slime-ac)
(add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
(eval-after-load "auto-complete"
  '(add-to-list 'ac-modes 'slime-repl-mode))

ac-slimerainbow-delimiters の設定を追加してあります。 快適なので是非参考にしていただけたら。

以上、つべこべ言わずに本家のREADMEを読んだほうが良いという教訓でした。

Markdown をHTMLに埋める方法

みなさん、HTML書いていますか? ぼくは恥かしながら、HTMLを書くのが苦手です。 どうにかして、HTML書かずにWebページを書くことができないか探していました。 jekyllなどを使う方法などがメジャーなようですが、正直そのためにHTMLを書き直すのは気が引けます。どうにかして、部分的な導入はできないのでしょうか? また、Pandocなどで、ローカルでHTMLに変換してアップロードする方法もあるのですが、今回はローカル環境の準備すらも不要なmarkedを導入してみようとおもいます。

marked

markedとはjavascript製のmarkdownの実装です。 ひとまず以下のコードを見てください。

<script type="text/javascript" src="lib/marked.js"></script>
...
<div id="content"></div>
<script>
  var marked=require("marked");
  document.getElementById("content").innerHTML =
    marked('# We love markdown!');
</script>

marked()に文字列を渡すことでHTMLの実行結果が戻されます。 しかし、これには問題があります。引数に文字列しか渡せないのです。

そこで不馴れなJavaScriptを用いて良い感じにしてみましょう。

<script type="text/javascript" src="lib/marked.js"></script>
...
<div id="body">
<div id="markdown">
# We love markdown!
## Do you like markdown?
</div>
<div id="content"></div>
</div>
<script>
  var marked=require("marked");
  content=document.getElementById("content");
  markdown=document.getElementById("markdown");
  content.innerHTML = marked(markdown.innerHTML);
  body.removeChild(markdown);
</script>

こうすることで、idがmarkdownのところを読み込んで、適当なHTMLを掃き出しでくれるので、これを、contentに代入すればよいということです。 これで、HTMLの苦手な僕でも簡単に記事などのお手入れが出来るようになりました。

markedはとても応用範囲が広いプログラムなので、是非活用してみてください。

chjj/marked

eshell便利機能

eshellで便利機能があったのでメモ

cat file.txt > /dev/clip

これでクリップボードにファイルをコピーできます。 これを使ってGistやこのブログの記事の下書きをコピペするのに使ってます。便利です。みなさんぜひeshellで良い一週間を。

Base64 デコーダも書いた

先日「Base64のエンコーダを書いた」という記事を書きましたが、さすがにエンコードしっぱなしって言うのも気持ち悪いのでBase64デコーダも書きました。 難しいかなぁとおもいましたが、ぶっちゃけパディングのところはNULL文字に変わってしまうので、そんなに実装に困りませんでした。

base64 decoder

このコードのチャームポイントはfor文の中の無駄につなげて書かれた中間データに変換するところです。 勢いで書いたので、改行するタイミングを失いました。 それなりに早く動作すると思います。 最後のstd::coutでc_strを用いてるのはNULL文字を出力させないようにするためです。

Base64 エンコーダを書いた

CodeIQさんでBase64に関する話題があったのですが、 「Base64エンコーダ、デコーダを書いたことないのが許されるのは小学生までだよねー。」という天の声が聞こえたので書くことにしました。

Base64とは

1バイト文字を扱いたけど、もろもろの規格上の制限で1文字6bitでしか読まれない時のエンコードの仕組み?らしいです。 私はコーディングの課題として面白そうってくらいしか目的がありませんが、世の中に役に立ってるようです。詳しくは参考文献を見て下さい。

実装

ビット演算云々が必要そうなのと、直感で良さそうと思ったので、C++で書くことにしました。

使ったもの

  • std::iostream
  • std::bitset
  • std::vector
  • std::string

引っかかったところ

Base64の仕様にあるパディングの調整です。 結果的には

ceil(str.size()/3.0)*3-str.size() 

で入力文字から出力文字列のパディングの文字数が求められます。 参考文献の表とかを見てもらえば、なんとなく正しいことがわかるかと思います。

base64 encoder

参考文献

Eshell

こんにちは。 皆さんは端末ソフトに何をお使いでしょうか? わたしは、eshellというものを使っています。 今回にそのeshellについての話題です。

eshellとは、Emacs で動くshell環境です。同じ機能(ここではEmacs上で動く機能)をもつものに、term,multi-term,ansi-termなどが有ります。eshellの他のものとの決定的な違いはそれはpure EmacsLispで実装されていることです。これは、つまりeshellの拡張をEmacsLispで書けることを意味します。そうです、LISPで拡張可能なのです。また、eshellには組み込みの関数がいくつか定義されておりWindowsにおいてcoreutilsなしでもある程度shellっぽい処理が行なえるようになっているのです!

そんな嬉しい機能を持っているeshellですが、一つ残念なのは、clear関数がデフォルトでは使えないことです。しかし、我らがEmacs。なければ作ればよいのです。 調べてみると案の定EmacsWikiにのっていました。

(defun eshell/clear ()
(let ((inhibit-read-only t))
  (erase-buffer))

これで、無事eshell上でclearできます。 それでは良い週末を!

バニラな.emacs.dでも便利なrequireのラッパーマクロ

新しく環境を引っ越しとき、emacsを最初に開く際にelispがインストールされていないがために大量のエラーに出ることに悩まされていたのですが、

(when (require 'foo nil t) ...)

と大量に書くのもなんだかイマイチだったのでマクロを書きました!

ほぼ八発白中 - .emacs.elで定義しておくと便利なマクロの丸パクリなのですが、決定的な違いはfont-lock-faceが設定されていることです!

見た目って大事ですもんね?ちなみに正規表現の部分とマクロ名はjwiegley/use-packageを参考にしました。

偉大な先人に感謝です。

使い方

(use foo
   ...)