yhara.jp

Recent Posts

LLVM LLにコンパイルされるC風言語を作っています

2016-10-16
Tech

LLVMを利用した言語実装の練習として、C風文法の言語を作っています。kaleidoscopeのマンデルブローのサンプルが動くところまでを目標にしています。

実装はRuby + Raccです。.llの出力はruby-llvm gemを使おうかと思いましたが、更新が止まっているようなので、とりあえず文字列処理で頑張っています。

https://github.com/yhara/kareido

kaleidoscopeはLLVMオフィシャルの言語実装チュートリアルで(日本語訳)、Kareidoとは以下のような違いがあります。

  • kaleidoscopeはREPLがあるが、Kareidoは1ファイルのコンパイルのみをサポートする
  • kaleidoscopeには独自演算子の定義があるが、Kareidoでは演算子は組み込みのもののみ
(more...)

2016-10-12
Diary

会社でergodox ezを使っているのだけど、VMWare Fusion上のUbuntuでなぜか半角スペースだけ入力できないという謎現象が起きた。

xevコマンドで調べてみると、KeyPressイベントの代わりにFocusOut, FocusIn, KeymapNotifyみたいなイベントが発生している。うーん、もしかしてキーボードショートカット関係か?

設定画面→キーボード→ショートカットを開き、「無効」になっている適当な項目を選んで、半角マイナスをショートカットに設定しようとしてみる。すると、「そのキーはすでに○○に割り当てられていますが上書きしますか?」というメッセージが。やはりか。

OKを選択したうえで、その割当てをすぐに削除(BSキーを押す)して、無事入力できるようになった。


Windows10がダウングレード用にでかいファイルを持っていた

2016-10-11
Tech

VMWare Fusionで動かしてるWindows10がやけに容量を食うなあと思っていたら、「Windows7に戻したくなったときのためのファイル」が8GB近く容量を取っていた。

削除する手順は以下。

  1. 設定画面の「ストレージ」を開く
  2. Cドライブをクリック
  3. 「一時ファイル」→「Windowsの以前のバージョン」にチェック→ファイル削除ボタンを押す

ソフト入れなくても容量診断ができるようになったのは良いですね。


Fomentを読む(6)

2016-10-09
Tech

前回はこちら。月一でやろうかなと言っていたけど、先月はちょっと忙しくて休載した。しかしまあ「長期的には成し遂げたいけど、短期的には優先度が高くない課題」に対する手法としては、月に一日だけやるというのはわりと良さそうな感じがしてきた。

前回はsynrules.cppの提供する2つの関数、CompileSyntaxRulesとExpandSyntaxRulesについて、どの補助関数が呼ばれているかを調べたのだった。次は何をしようかなぁ。とりあえずこれらの関数の引数と返り値が知りたいな。

ExpandSyntaxRules

synrules.cppを見る。ExpandSyntaxRulesはExpandTemplateの結果を返す。ExpandTemplateはMakePairかListToVectorの結果を返すので、Schemeレベルの値を返すっぽい。

引数の方はどうだろうか。ぜんぶFObjectだから分かんないんだよな...。綺麗なコードだと言ったけど、Cなのに事実上型がないような感じでつらみが出てきた。

(more...)

ブログを作る(8)

2016-10-07
Tech

URLのタイムゾーン

今まで記事のURL(例:/2016/10/07/post1)はUTCだったんだけど、よく考えたらここ日本時間にしないのは変なので直した

ソーシャルボタン

Twitter, Facebook, はてブのボタンを置いてみた。けど読み込みが遅いなー。それは仕方ないとしても、読み込み中にボタンが縦に並んでしまうのは直したいな。あとfacebookボタンだけ縦位置が微妙にずれているのも。(追記:こんな感じで直った)


BiwaScheme 1.0.0に向けて

2016-10-07
Tech

BiwaSchemeはもともと修論のために作り始めた処理系なんだけど、ということは、来年で10周年になるということに気がついた。途中、放置してた期間もそこそこあるけど、issue/PRくらいは対応しようとしているうちになんだかんだで10年。10年かぁ…。

せっかくなので、来年に1.0.0をリリースしようかなという気分が高まってきた。というかもう1.0.0にしちゃおうかなとも一瞬思ったのだけど、バージョニング的には非互換を入れやすいタイミングなので、何を入れるかについてもう少し検討することにした。

Schemeプログラムの読み込みについて

現状のBiwaSchemeで一番直したいと思うところがSchemeプログラムの記述方法にあって、以下は例なんだけども、

<script src="biwascheme.js">
(more...)

BiwaScheme 0.6.6をリリースしました

2016-10-06
Tech

https://github.com/biwascheme/biwascheme/releases/tag/0.6.6

0.6.5でエラーが正常にレポートされないという、実用上困りそうなリグレッションがあったのでそれの修正が主。最近マージしたPRでのリグレッションだった。

そういうわけで前回リリースから比較的短かったけど、リリース間隔が長いと手順を忘れてしまって作業がめんどくさくなったりするので、忘れない程度にリリースをやったほうが良いかもなと思った。


ブログを作る(7)

2016-10-05
Tech

やることリストの中に「年別・月別のページを作る」というのがあって、簡単そうだからやってしまおうかなと思ったのだけど、実はそれほど役立たないことに気づいた。

自分が人のブログを読むときどうしてるかを考えると、「記事一覧」か、「カテゴリ」を実装するのがよさそう。あとは「前後の記事」もけっこう読むかもなあ。

記事一覧ページ

記事の一覧ページは、ブログによって記事のタイトルだけが出るタイプと、タイトルに加えて記事の冒頭が出るタイプがある。後者はたとえばjekyllとか。冒頭がどこまでなのかは、本文中にマークを入れることでユーザが明示する。「続きを読む」機能と呼ばれることもあるね。

ところではてなブログの記事一覧ページってどんなだったっけと見てみたら、記事の先頭から一定文字数が表示されるっぽい。マークを入れなくても勝手に冒頭が判断されるのは便利そう。


enumerable-lazy gem 0.0.2をリリースしました

2016-10-04
Tech

enumerable-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夏)

2016-10-03
Tech

Twitterにはスライドを貼ったんですがブログに書いてなかったので載せておきます。

Fluentd meetup in Matsue

fluentdコミッタのtagomorisさんが松江に来られるというので発表してきました。fluentd印の魔剤エナジードリンク美味しかったです。

内容はfluentdと直接の関係はないですが、ログつながりということで…。 文中、RailsのproductionのログレベルがINFOと書いていますが、Rails5からはDEBUGだそうです。

(more...)

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author