2016-10-26
TechPostモデルにpermanentフラグというのを付けた。このフラグが立っていると、URLに日付が入らなくなる。例えば以下。
旧サイトの/w/に置いていたようなものに使う予定。/w/はブログとは別に雑多な記事を置いておくための場所で、最初はHikiというWikiエンジンを使っていたのだけど、そのあと別に他人でも編集できる必要はないなと思ってmiddlemanという静的ページジェネレータに移行した。その結果、自分はブラウザから編集できないと記事を書かなくなるという事実が判明した。
そういうわけで「ブログを作る」といいつつ、CMS的な機能も付けたいと思っていたのだった。
このあとはブログを2カラムレイアウトにして、サイドバーに上記ページへのリンクを入れたい。
2016-10-25
TechRouge is a syntax highlighting library for Ruby. I've added syntax highlight to this blog, so here's how.
Install
Add gem "rouge"
to your Gemfile.
2016-10-25
Techということで3章から読んでいきます。URL等は第一回を参照してください。
3. FEATHERWEIGHT GJ
FGJのサンプルプログラムがあります。コメントを足しつつ転記します。
// 2つのオブジェクトの組
class Pair<X extends Object, Y extends Object> extends Object {
X fst; // フィールド定義
2016-10-24
Tech新シリーズです。FJ (Featherweight Java)の論文のFGJのところを読んでいきます。
将来的にジェネリクスがある静的型言語を自作したいという目標があるのでその準備です。
FJとは
型理論の研究のために考案された、Javaの「とても小さい」サブセットです。
論文はこちら。
2016-10-20
TechRSSが壊れていたのを直した。
あと記事一覧画面を作った。いまのところタイトルだけを列挙している状態。一応ページネーションも入れてあるけど、タイトルだけなら当分の間は描画が重くなることもないだろうから、とりあえず100件/ページにしてある。
http://yhara.jp/_list
過去の記事を自分で参照したい場合にも便利(たとえばこの「ブログを作る」シリーズは何番まで書いたっけ、とか)。
2016-10-19
TechWhile 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
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-11
TechVMWare Fusionで動かしてるWindows10がやけに容量を食うなあと思っていたら、「Windows7に戻したくなったときのためのファイル」が8GB近く容量を取っていた。
削除する手順は以下。
- 設定画面の「ストレージ」を開く
- Cドライブをクリック
- 「一時ファイル」→「Windowsの以前のバージョン」にチェック→ファイル削除ボタンを押す
ソフト入れなくても容量診断ができるようになったのは良いですね。