2016-10-19
Techこのブログも記事が増えてきたので、ページネーションを実装した。(そう、今までは 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
2016-10-17
TechこのブログにKaminariを入れてページネーションをやろうと思ったのだが、gemのバージョンの関係で簡単には入らないことが分かった。
- Kaminariはactionpackとactivesupportの3以上を必要とする。
- nlog2(このブログのことです)ではactiverecord 5.0.0.1を使っている。したがって、actionpackとactivesupportも5.0.0.1になる。
- actionpack 5はrack 2を必要とする。
- しかしsinatra 1.4.7がrack 2に対応していないので、sinatra 2.0.0.beta2に上げる必要がある。
- sinatra-contribも2.0.0.beta2に上げる必要がある。
- さらにsinatra-activerecordは最新版でもsinatra 1系固定になっているので、なんとかしてsinatra 2と共存させる必要がある。
- これはとりあえずgemspecだけいじったものを用意したので、
gem 'sinatra-activerecord', git: 'https://github.com/yhara/sinatra-activerecord', branch: 'sinatra2'
でなんとか動かせそう。
2016-10-16
TechLLVMを利用した言語実装の練習として、C風文法の言語を作っています。kaleidoscopeのマンデルブローのサンプルが動くところまでを目標にしています。
実装はRuby + Raccです。.llの出力はruby-llvm gemを使おうかと思いましたが、更新が止まっているようなので、とりあえず文字列処理で頑張っています。
https://github.com/yhara/kareido
kaleidoscopeはLLVMオフィシャルの言語実装チュートリアルで(日本語訳)、Kareidoとは以下のような違いがあります。
- kaleidoscopeはREPLがあるが、Kareidoは1ファイルのコンパイルのみをサポートする
- kaleidoscopeには独自演算子の定義があるが、Kareidoでは演算子は組み込みのもののみ
2016-10-12
Diary会社でergodox ezを使っているのだけど、VMWare Fusion上のUbuntuでなぜか半角スペースだけ入力できないという謎現象が起きた。
xevコマンドで調べてみると、KeyPressイベントの代わりにFocusOut, FocusIn, KeymapNotifyみたいなイベントが発生している。うーん、もしかしてキーボードショートカット関係か?
設定画面→キーボード→ショートカットを開き、「無効」になっている適当な項目を選んで、半角マイナスをショートカットに設定しようとしてみる。すると、「そのキーはすでに○○に割り当てられていますが上書きしますか?」というメッセージが。やはりか。
OKを選択したうえで、その割当てをすぐに削除(BSキーを押す)して、無事入力できるようになった。
2016-10-11
TechVMWare Fusionで動かしてるWindows10がやけに容量を食うなあと思っていたら、「Windows7に戻したくなったときのためのファイル」が8GB近く容量を取っていた。
削除する手順は以下。
- 設定画面の「ストレージ」を開く
- Cドライブをクリック
- 「一時ファイル」→「Windowsの以前のバージョン」にチェック→ファイル削除ボタンを押す
ソフト入れなくても容量診断ができるようになったのは良いですね。
2016-10-09
Tech前回はこちら。月一でやろうかなと言っていたけど、先月はちょっと忙しくて休載した。しかしまあ「長期的には成し遂げたいけど、短期的には優先度が高くない課題」に対する手法としては、月に一日だけやるというのはわりと良さそうな感じがしてきた。
前回はsynrules.cppの提供する2つの関数、CompileSyntaxRulesとExpandSyntaxRulesについて、どの補助関数が呼ばれているかを調べたのだった。次は何をしようかなぁ。とりあえずこれらの関数の引数と返り値が知りたいな。
ExpandSyntaxRules
synrules.cppを見る。ExpandSyntaxRulesはExpandTemplateの結果を返す。ExpandTemplateはMakePairかListToVectorの結果を返すので、Schemeレベルの値を返すっぽい。
引数の方はどうだろうか。ぜんぶFObjectだから分かんないんだよな...。綺麗なコードだと言ったけど、Cなのに事実上型がないような感じでつらみが出てきた。
2016-10-07
TechURLのタイムゾーン
今まで記事のURL(例:/2016/10/07/post1
)はUTCだったんだけど、よく考えたらここ日本時間にしないのは変なので直した。
ソーシャルボタン
Twitter, Facebook, はてブのボタンを置いてみた。けど読み込みが遅いなー。それは仕方ないとしても、読み込み中にボタンが縦に並んでしまうのは直したいな。あとfacebookボタンだけ縦位置が微妙にずれているのも。(追記:こんな感じで直った)
2016-10-07
TechBiwaSchemeはもともと修論のために作り始めた処理系なんだけど、ということは、来年で10周年になるということに気がついた。途中、放置してた期間もそこそこあるけど、issue/PRくらいは対応しようとしているうちになんだかんだで10年。10年かぁ…。
せっかくなので、来年に1.0.0をリリースしようかなという気分が高まってきた。というかもう1.0.0にしちゃおうかなとも一瞬思ったのだけど、バージョニング的には非互換を入れやすいタイミングなので、何を入れるかについてもう少し検討することにした。
Schemeプログラムの読み込みについて
現状のBiwaSchemeで一番直したいと思うところがSchemeプログラムの記述方法にあって、以下は例なんだけども、
<script src="biwascheme.js">
2016-10-06
Tech2016-10-05
Techやることリストの中に「年別・月別のページを作る」というのがあって、簡単そうだからやってしまおうかなと思ったのだけど、実はそれほど役立たないことに気づいた。
自分が人のブログを読むときどうしてるかを考えると、「記事一覧」か、「カテゴリ」を実装するのがよさそう。あとは「前後の記事」もけっこう読むかもなあ。
記事一覧ページ
記事の一覧ページは、ブログによって記事のタイトルだけが出るタイプと、タイトルに加えて記事の冒頭が出るタイプがある。後者はたとえばjekyllとか。冒頭がどこまでなのかは、本文中にマークを入れることでユーザが明示する。「続きを読む」機能と呼ばれることもあるね。
ところではてなブログの記事一覧ページってどんなだったっけと見てみたら、記事の先頭から一定文字数が表示されるっぽい。マークを入れなくても勝手に冒頭が判断されるのは便利そう。