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とか。冒頭がどこまでなのかは、本文中にマークを入れることでユーザが明示する。「続きを読む」機能と呼ばれることもあるね。
ところではてなブログの記事一覧ページってどんなだったっけと見てみたら、記事の先頭から一定文字数が表示されるっぽい。マークを入れなくても勝手に冒頭が判断されるのは便利そう。
2016-10-04
Techenumerable-lazyという古いgemがあるのだが、なんかこれのリリースをしてほしいという連絡が来た。deprecatedなgemのライセンスがrubygems.org上で明示されていることにどれほどの意味があるのか分からないが、とりあえずやってみることに。
と思ったがgemのpushが通らない。そういえば、rubygems.orgのアカウントを2つ持っていることを思い出した。rubygems.orgって大昔はgemcutter.orgという名前だったんだけど、サイト名が変わるときに間違って新規登録しちゃったんだよな、確か。
ということで古いアカウントでログインし直す必要がある。面倒だ。とりあえず~/.gem/credentialsをリネームして読めないようにして、以下を実行。
% gem owner enumerable-lazy --add (新しいアカウントのメールアドレス)
EmailとPasswordを聞かれるので、古いアカウントでログイン。これでgemのownerを追加できたので、~/.gem/credentialsをもとに戻してrake release。
ということで無事リリースできましたが、Enumerable#lazyはRuby 2.0から本体に取り込まれているので、いまさらインストールする必要は全く無いですよ!
(2016/10/05追記:issueで教えてもらったのだけど、grape 0.16.2→mustermann19→enumerable-lazyという依存関係だったみたい。そのため古いgrapeを使っているとlicense_finderでエラーが出ると。最新のgrapeではこの依存は取り除かれている。)
2016-10-03
TechTwitterにはスライドを貼ったんですがブログに書いてなかったので載せておきます。
fluentdコミッタのtagomorisさんが松江に来られるというので発表してきました。fluentd印の魔剤エナジードリンク美味しかったです。
内容はfluentdと直接の関係はないですが、ログつながりということで…。
文中、RailsのproductionのログレベルがINFOと書いていますが、Rails5からはDEBUGだそうです。
2016-09-28
TechThere is a guide for adding basic auth to your Sinatra app.
Password is hardcoded in the short example, but in production, you may want a securer way.
bcrypt is the gem for you.
bcrypt
Add gem "bcrypt"
to your Gemfile. (Don't confuse it with bcrypt-ruby gem, which is its former name)
Then you can generate a password hash like this:
2016-09-28
TechWhen you do google search with "sinatra logging file", you may find a solution with Rack::CommonLogger
. However I was looking for a different approach because it does not respect interface of the logger
stdlib. Instead of calling the usual logger.info
, Rack::CommonLogger
forcefully inject output with logger.write
.
As a result, your log file will look like this. The first line is written by Rack::CommonLogger
, which has completely different format with the usual logger output on the second line. This may be a problem when you write a program to parse and analyze the logfile.
::1 - - [27/Sep/2016:02:44:42 +0900] "GET / HTTP/1.1" 200 2 0.0077
I, [2016-09-27T02:44:42.416430 #49814] INFO -- : hello world
2016-09-27
Tech