yhara.jp

Recent Posts

「コンピュータの天才 9つのC言語を操る」

2017-07-14
Tech

とある映画の日本語字幕で、

    コンピュータの天才
    9つのC言語を操る

というものがあるらしい(画像はググってください)。原文はnine conputer languagesらしいので、翻訳者がC言語のことをコンピュータ言語の略だと勘違いしたのだと思われるけど、C言語を知っている人から見ればなかなかに味わい深いフレーズである。

(more...)


ブログを作る(13) 長いエントリを省略して表示する

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して、みたいなことをしてるとまるで仕事みたいだけど、効率を良くしようとすると、仕事のやり方に近づくのは自然なのかもしれない。趣味とはいえ、効率が良くなればもっと多くのものを作れるようになる(または遊ぶ時間が増える)ので、効率は大事だ。

これは趣味のコードだから雑に作業する、みたいなことをする場合、仕事と趣味で意識を切り替える必要があるけど、ぜんぶ仕事みたいにやることにすれば、切り替えが無くなって、ずっと同じペースで作業できるので良いかもしれない。


Rubyで呼ばれたメソッドを列挙するやつ作った

2017-05-27
Tech

この記事を読んで、TracePointで同じことができないかと考えた。TracePointはRuby 2.0からある機能で、Rubyのメソッド呼び出しなどのイベントをフックできる。(昔のset_trace_funcに相当する)

とりあえず動いたのでgithubに置いた。

こういう適当なa.rbがあるとする。

(more...)

WASMはじめの一歩 (wastを書いてブラウザで動かすところまで)

2017-05-24
Tech

こんばんわ。今日はWebAssemblyにチャレンジしたいと思います。wasm用のプログラムを書いて、それをブラウザで動かすところまでやります。

用意するもの1:.wat

まずはWebAssemblyで書かれたプログラムが必要です。拡張子は.wasmです。あいにくこれはバイナリファイルなので手書きするのは難しいです。一般的にはお好みの言語で書いたプログラムをLLVM経由で.wasmに変換するのだと思いますが、今回はWebAssemblyそのものの例としたいので、wasmのテキスト表現を使います。

以下の内容をsquare.watというファイルに保存します。.watというのはwasmのテキスト表現のための拡張子です。ツールによっては.wastという形式を受け付けるものがありますが、これは.watの非公式な上位互換拡張だそうです。

;; square(i32 i) -> i32
(more...)

ブログを作る(12) カテゴリ機能を付けた

2017-05-16
Tech

記事にカテゴリを付けられるようにした。前からやりたかったものの一つである。ソースはこのへんだけど、ファイル構成の見直しも同時にやったのでこれだけ見てもよく分からないな。

同カテゴリの記事を探しやすくするというのが第一の目的だけど、もう一つの変更点として、日記(カテゴリDiary)を省いたAtomフィードを追加で提供するようにした。これを期にもうちょっと雑多な内容も書くようになるかもしれない。ならないかもしれないけど。

やったこと

  • Categoryモデルを作成。各Postは0..1個のCategoryに属する。
  • 編集画面にCategory選択フォームを追加。
  • カテゴリ自体のCRUDは/_configを新設してそこでやるようにした。Twitterに書いたけど、disabled="disabled"を付けることで削除ボタンの誤操作を回避している。コスパがよい(実装コストが低くて効果が大きい)ので好きなハック。
(more...)

LLVMで例外を実装するには

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++用のもの(であるけれど、場合によってはこれが使えることもあるかも)。

(more...)


CapybaraでSinatraアプリをテストする

2017-02-28
Tech

このブログはSinatraで作っていて、テストはRack::Testで書いてたのだけど、思い立ってCapybaraで書き直した

Rack::Test vs Capybara?

というのはある種のバグがRack::Testだと漏れちゃうんですよね。例えばフォームをsubmitしたときにビューのtypoで正しいリクエストが飛ばない、みたいなやつ。Rack::TestだとこういうPOSTリクエストに対しこういう挙動をする、は書けるんだけど、ボタンを押したときにどういうPOSTが飛ぶか、はCapybaraでないと書けない。

もっと規模が大きければRack::Testでコントローラのテストを書いて、Capybaraでintegraiton testを書いて…みたいな構成もあり得るけど、このブログの場合は規模が小さいのでCapybaraによるE2Eテストだけあれば良いかなと思う。

以下、Rack::Testから移行するに当たって「これどうするんだろ?」ってなったことをメモしておく。

(more...)

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author