ブログを作る(9)
RSSが壊れていたのを直した。
あと記事一覧画面を作った。いまのところタイトルだけを列挙している状態。一応ページネーションも入れてあるけど、タイトルだけなら当分の間は描画が重くなることもないだろうから、とりあえず100件/ページにしてある。
過去の記事を自分で参照したい場合にも便利(たとえばこの「ブログを作る」シリーズは何番まで書いたっけ、とか)。
RSSが壊れていたのを直した。
あと記事一覧画面を作った。いまのところタイトルだけを列挙している状態。一応ページネーションも入れてあるけど、タイトルだけなら当分の間は描画が重くなることもないだろうから、とりあえず100件/ページにしてある。
過去の記事を自分で参照したい場合にも便利(たとえばこの「ブログを作る」シリーズは何番まで書いたっけ、とか)。
While writing a programming language compiled into LLVM IR, I encountered this SEGV of the lli
command:
% lli a.ll
0 libLLVMSupport.dylib 0x00000001071a445d llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43
1 libLLVMSupport.dylib 0x00000001071a3c79 llvm::sys::RunSignalHandlers() + 44
2 libLLVMSupport.dylib 0x00000001071a48c6 SignalHandler(int) + 165
3 libsystem_platform.dylib 0x00007fff9496452a _sigtramp + 26
4 libsystem_platform.dylib 0x00007fff594141d8 _sigtramp + 3299540168
5 libLLVMSelectionDAG.dylib 0x0000000107065b17 llvm::SelectionDAGBuilder::HandlePHINodesInSuccessorBlocks(llvm::BasicBlock const*) + 391
このブログも記事が増えてきたので、ページネーションを実装した。(そう、今までは http://yhara.jp にアクセスすると全部の記事がレンダリングされる仕様だったのである)
Railsでページネーションといえばkaminari gemであるが、Sinatraにも対応していて、kaminari-sinatraというgemがある。
…のだが、使ってみて困ったことが分かった。paginateヘルパを呼ぶと以下の箇所で「logger.debugは引数を1つしか取らないよ」というエラーが出るのである。
padrino-helpers-0.13.3.2/lib/padrino/rendering.rb in cache_template_path
このブログにKaminariを入れてページネーションをやろうと思ったのだが、gemのバージョンの関係で簡単には入らないことが分かった。
gem 'sinatra-activerecord', git: 'https://github.com/yhara/sinatra-activerecord', branch: 'sinatra2'
でなんとか動かせそう。LLVMを利用した言語実装の練習として、C風文法の言語を作っています。kaleidoscopeのマンデルブローのサンプルが動くところまでを目標にしています。
実装はRuby + Raccです。.llの出力はruby-llvm gemを使おうかと思いましたが、更新が止まっているようなので、とりあえず文字列処理で頑張っています。
https://github.com/yhara/kareido
kaleidoscopeはLLVMオフィシャルの言語実装チュートリアルで(日本語訳)、Kareidoとは以下のような違いがあります。
VMWare Fusionで動かしてるWindows10がやけに容量を食うなあと思っていたら、「Windows7に戻したくなったときのためのファイル」が8GB近く容量を取っていた。
削除する手順は以下。
ソフト入れなくても容量診断ができるようになったのは良いですね。
前回はこちら。月一でやろうかなと言っていたけど、先月はちょっと忙しくて休載した。しかしまあ「長期的には成し遂げたいけど、短期的には優先度が高くない課題」に対する手法としては、月に一日だけやるというのはわりと良さそうな感じがしてきた。
前回はsynrules.cppの提供する2つの関数、CompileSyntaxRulesとExpandSyntaxRulesについて、どの補助関数が呼ばれているかを調べたのだった。次は何をしようかなぁ。とりあえずこれらの関数の引数と返り値が知りたいな。
synrules.cppを見る。ExpandSyntaxRulesはExpandTemplateの結果を返す。ExpandTemplateはMakePairかListToVectorの結果を返すので、Schemeレベルの値を返すっぽい。
引数の方はどうだろうか。ぜんぶFObjectだから分かんないんだよな...。綺麗なコードだと言ったけど、Cなのに事実上型がないような感じでつらみが出てきた。
BiwaSchemeはもともと修論のために作り始めた処理系なんだけど、ということは、来年で10周年になるということに気がついた。途中、放置してた期間もそこそこあるけど、issue/PRくらいは対応しようとしているうちになんだかんだで10年。10年かぁ…。
せっかくなので、来年に1.0.0をリリースしようかなという気分が高まってきた。というかもう1.0.0にしちゃおうかなとも一瞬思ったのだけど、バージョニング的には非互換を入れやすいタイミングなので、何を入れるかについてもう少し検討することにした。
現状のBiwaSchemeで一番直したいと思うところがSchemeプログラムの記述方法にあって、以下は例なんだけども、
<script src="biwascheme.js">
https://github.com/biwascheme/biwascheme/releases/tag/0.6.6
0.6.5でエラーが正常にレポートされないという、実用上困りそうなリグレッションがあったのでそれの修正が主。最近マージしたPRでのリグレッションだった。
そういうわけで前回リリースから比較的短かったけど、リリース間隔が長いと手順を忘れてしまって作業がめんどくさくなったりするので、忘れない程度にリリースをやったほうが良いかもなと思った。