2017-06-29
Tech ブログのトップページが重いなと思っていたので、長いエントリは冒頭だけ表示するようにした。いわゆる「続きを読む」機能である。
「続きを読む」を実装する場合、エントリのどこまでを冒頭と判定するかが問題になる。ブログエンジンによってはエントリ内に特殊な記号を記入することで「続きを読む」の位置を明示するものもあるけれど、いちいち書くのも面倒なので避けたかった。適当によしなにやってほしい。
ということで今回実装したアルゴリズムが以下。
markdownの先頭10行を冒頭とする。
ただし最後の行が「#」から始まるときは要約の最後が見出しになって微妙なのでそれも落とす。
例外として、エントリが15行以内である場合は充分短いので全体を表示する。
充分短い、の定義は最初は10行以内としていたけど、これだと11行のエントリがあったときも「続きを読む」が表示されて、クリックすると1行増えるだけなので微妙だった。そこで、「何行に丸めるか」と「何行までなら全文表示するか」の行数を別にすることでいい感じになった。
ちなみにこの方法だとcode blockをまたいでしまう可能性があるけど、redcarpet gemだとcode blockが閉じられていない場合は最後までがcode blockだと判断してくれるようで、特に対処は必要なかった。
2017-06-29
Tech 趣味で書いてるコードのうち、規模が小さいものはCHANGELOGを書いてなかったのだけど、最近は書くようになった。
前までやっていなかったのは面倒だというのが理由だけど、実際やってみるとそれほど面倒でもない。むしろ、自分が最近何の作業をしていて、そのうちどれが完成しているとかが分かって便利だ。
変更内容を記録して、溜まったらgitのtagを打って、masterにpushして、みたいなことをしてるとまるで仕事みたいだけど、効率を良くしようとすると、仕事のやり方に近づくのは自然なのかもしれない。趣味とはいえ、効率が良くなればもっと多くのものを作れるようになる(または遊ぶ時間が増える)ので、効率は大事だ。
これは趣味のコードだから雑に作業する、みたいなことをする場合、仕事と趣味で意識を切り替える必要があるけど、ぜんぶ仕事みたいにやることにすれば、切り替えが無くなって、ずっと同じペースで作業できるので良いかもしれない。
2017-06-27
Diary ブログタイトル変えた
適当に「近&況」っていうタイトルにしたけど、最近「近況」っていう文字列見るだけで脳が反応してしまうようになったので、そういう恐れのないタイトルにした。
bundle update
このブログ の依存gemをいろいろ上げた。Sinatraを2.0.0正式版にしたり、ARを5.1にしたり。
Kaminariも1.0が出たので上げたんだけど、ちょっと手間取った。1.0ではgemが細かく分割されるようになったため(参考 、kaminari-sinatraだけではModel#pageメソッドが生えなくなって、別途kaminari-activerecordを入れる必要があった。
2017-06-09
Diary スプラ2
未だにSwitch本体が入手できてない。スプラ2発売前に普通に買えるように…なるんだろうか?ならなそうな予感がするなぁ。
最近はtwitterでブキ情報が小出しにされていて楽しい。トラップの強化、スプリンクラーの性能変更はどんな感じなのか楽しみ。
あとは試写会で出てた「チャージキープ」だけど、スコなし版だけの特典だということが明らかにされた。チャージャーの人みんなスコープ使ってた印象あるのでなるほどなぁという感じ。
2017-06-02
Diary OP-1
OP-1というシンセを見つけてしまった。めっちゃ欲しい(というか触りたい)んだけど10万くらいするらしい。10万…10万っていくらだ?(混乱)
VIDEO
液晶部分が遊び心があって、テープの絵とか牛とかボクサーが出てくる。最高かよ。
マイクラ
超久々にMinecraftやってた。4年振りくらいかもしれない。最近はバニラで空が飛べるらしいのでエリトラ取るとこまでやろうかと思ったんだけど、エンドポータル探すのが面倒で頓挫してる。
マイクラ動画とかどうなってるかなと思ったけど、埋め埋めクラフト は更新停止してしまったようだ。てりぃさんのシリーズは新企画になってた。
【ニコニコ動画】【Minecraft】マイクラの全ブロックでピラミッド Part1【ゆっくり実況】
2017-05-27
Tech
この記事を読んで、TracePointで同じことができないかと考えた。TracePointはRuby 2.0からある機能で、Rubyのメソッド呼び出しなどのイベントをフックできる。(昔のset_trace_funcに相当する)
とりあえず動いたのでgithubに置いた。
こういう適当なa.rbがあるとする。
2017-05-24
Tech こんばんわ。今日はWebAssemblyにチャレンジしたいと思います。wasm用のプログラムを書いて、それをブラウザで動かすところまでやります。
用意するもの1:.wat
まずはWebAssemblyで書かれたプログラムが必要です。拡張子は.wasmです。あいにくこれはバイナリファイルなので手書きするのは難しいです。一般的にはお好みの言語で書いたプログラムをLLVM経由で.wasmに変換するのだと思いますが、今回はWebAssemblyそのものの例としたいので、wasmのテキスト表現 を使います。
以下の内容をsquare.watというファイルに保存します。.watというのはwasmのテキスト表現のための拡張子です。ツールによっては.wastという形式を受け付けるものがありますが、これは.watの非公式な上位互換拡張だそうです。
2017-05-16
Diary というわけで 日記。
3月のこと
3月はsyntax-rulesの続きをしていた。3月の終わりに中間報告記事を書こうと思ってたんだけど仕事が忙しかったりして流れてしまった。5月はまたこれをする予定だったけど既に月半ばになってしまったな。どうしようかな。今年中に作りきるという目標はあまり動かしたくないけど。
4月のこと
4月はEsquisの続きをやるつもりでLLVM+例外 について調べてたりしたけど、そのあとこういう閃きがあって4月はこれに費やすことになった。
2017-05-16
Tech 記事にカテゴリを付けられるようにした。前からやりたかったものの一つである。ソースはこのへん だけど、ファイル構成の見直しも同時にやったのでこれだけ見てもよく分からないな。
同カテゴリの記事を探しやすくするというのが第一の目的だけど、もう一つの変更点として、日記(カテゴリDiary)を省いたAtomフィード を追加で提供するようにした。これを期にもうちょっと雑多な内容も書くようになるかもしれない。ならないかもしれないけど。
やったこと
Categoryモデルを作成。各Postは0..1個のCategoryに属する。
編集画面にCategory選択フォームを追加。
カテゴリ自体のCRUDは/_config
を新設してそこでやるようにした。Twitterに書いたけど、disabled="disabled"
を付けることで削除ボタンの誤操作を回避している。コスパがよい(実装コストが低くて効果が大きい)ので好きなハック。
2017-04-06
Tech LLVMを使った自作言語に例外を入れることを考えてた。結論からいうとCrystalのソースを真似するのでよさそう。
Crystal → libunwind → _Unwind_RaiseException
C++ → __cxa_throw
→ libunwind → _Unwind_RaiseException
_Unwind_RaiseException
等の仕様はここ。http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html
「Itanium C++ ABI」という名前ではあるけれど、Level I, II, IIIのうちのLevel I部分(_Unwind_RaiseException
等)はC++に限らない言語独立なAPIになっている。__cxa_throw
はLevel IIで、C++用のもの(であるけれど、場合によってはこれが使えることもあるかも)。