Javaのバイトコードで遊ぶ (ラムダ式)

Javaのバイトコードで遊ぶ (Hello World) 以下のメソッドのカリー化を例にバイトコードでラムダ式を作ってみます。 int add(int a, int b, int c); ラムダ式の生成にはinvokedynamicと、そのブートストラップにLambdaMetafactory.metafactoryを用います。 me…

Javaのバイトコードで遊ぶ (フィールドとメソッドの定義)

Javaのバイトコードで遊ぶ (Hello World) まずはフィールドの定義について。 ClassWriter.visitFieldを用います。 こんな感じです。 // public static int a = 100; cw.visitField(ACC_PUBLIC + ACC_STATIC, "a", "I", null, 100); // public static String;…

Javaのバイトコードで遊ぶ (例外処理)

Javaのバイトコードで遊ぶ (Hello World) 例外の送出と捕捉を試してみます。 try-catchブロックの定義にはvisitTryCatchBlockを用います。 visitTryCatchBlock(Label start, Label end, Label handler, String type) startとendは、例外ハンドラのスコープの…

Javaのバイトコードで遊ぶ (stack map frame)

Javaのバイトコードで遊ぶ (Hello World) stack map frameについては以下を読みました。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4 http://download.forge.objectweb.org/asm/asm4-guide.pdf java - Is there a better ex…

Javaのバイトコードで遊ぶ (条件分岐と繰り返し)

Javaのバイトコードで遊ぶ (Hello World) 条件分岐と繰り返しはジャンプを使います。 ジャンプ先の指定はLabelを用います。ジャンプ元ではインスタンス化したLabelを指定します。 visitLabelにLabelインスタンスを渡せば、そこがラベルになります。 ジャンプ…

Javaのバイトコードで遊ぶ (四則演算)

Javaのバイトコードで遊ぶ (Hello World) 加算や減算などの基本的な数値演算をやってみます。 まずはintやfloatの計算。 定数値をスタックに積む命令にはバリエーションがあります。 値の大小に応じて、BIPUSHやSIPUSHを使う方法や、visitLdcInsnで任意の値…

Javaのバイトコードで遊ぶ (メソッド呼び出し)

Javaのバイトコードで遊ぶ (Hello World) INVOKEDYNAMIC以外のINVOKE系の命令を使ってみます。 INVOKESTATICはstaticメソッドを呼び出します。引数を順にスタックに積んでから呼び出します。 呼び出し後は引数がスタックから取り除かれ、戻り値がある場合は…

Javaのバイトコードで遊ぶ (Hello World)

ASMを使ってJavaのバイトコードを生成して遊んでみます。 まずはその準備について。 Javaのバージョンは1.8.0_60、ASMのバージョンは5.0.3です。 生成したバイトコードを実行したり、クラスファイルに書き込みたいので そのためのユーティリティ(ExampleUtil…

Fixity Resolution

https://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-18100010.6 Haskellのリファレンスに掲載されている 結合性の解決方法を示したコードを動作確認のために動かした時のメモ。 以下は上記のページに掲載されているコード。 import Con…

xkbを使って修飾キー有のキーバインドを設定する

Windowsのキーバインド設定ツールとして以前から KeyExtension というフリーソフトを使わせてもらっています。 変換キー + U でHome、変換キー + H でLeft、といった感じの設定ができます。 Vimでコードを書く時は困らないのですが、Eclipseなど他のエディタ…

Elementary OSにEclipseを導入する

インストール自体はファイルをダウンロードして適当な場所に配置すれば良いです。 ただEclipseのツールチップが、背景色も文字色も黒くなってしまい、全く内容が読めず 使い物になりませんでした。 ウェブを検索したところ、次のページを見つけました。 http…

Elementary OSをセットアップする

Elementary OSを自分用にセットアップした時のメモです。 英語版のまま使い、日本語が入力できれば良いという程度の要件です。 事前準備 VirtualBoxのゲストOSとして使う場合は、3Dアクセラレーションを 有効化しておきます。これをしておかないと、OS起動中…

VagrantのBoxを作成する

VagrantのBoxを作成してみました。 Windows8.1なのでHyper-Vでやろうかと思いましたが、少し試してみたところ上手くいかなかったのでおとなしくVirtualBoxを使っています。 https://docs.vagrantup.com/v2/boxes/base.html https://docs.vagrantup.com/v2/vi…

びわいち

京都に住む友人と琵琶湖サイクリングに行きました。 まずは京都の橋から。ここから1号線を通って大津へ向かいます。 近江大橋のそばで朝食。雨ばかりの8月でしたがこの日は快晴。楽しいライドとなる予感がします。 大津でも路面電車が走っているんですね。親…

かきしま海道

江田島のかきしま海道を走りました。ブルーラインがひかれてからは初めてです。 自宅から呉までは自走。呉からブルーラインに沿って切串を目指します。呉駅の近くにブルーラインの始点があると聞いていましたが見つけられなくてスルー。音戸方面に走っていた…

ANTLR4のパースエラーを捕捉する

文法エラーの時、エラーメッセージが表示されるだけで例外が発生しないので少々悩みました。パーサーにステータスを持っている様子もないなー、など追ってみれば、ANTLRErrorListenerを実装したクラスをパーサーにaddErrorListenerで追加するだけという単純…

石見グランフォンド2014

先週は石見グランフォンドに参加。140kmコースをゆっくり走りました。国東の疲れが残っていたので…。200kmは来年挑戦したいです。 前日は江の川沿いに移動。また機会があれば川の駅あたりから川沿いをまったり走りたいものです。 当日朝は砂浜の駐車場へ。タ…

ツール・ド・国東 2014

ツール・ド・国東に参加しました。今回は1人での参加です。 前日移動。フェリーからの眺めが気持ち良い。 受付も済ませておきます。参加賞に小型のバッグをもらいました。受付は前日に済ませておくのが吉。 当日は前日とは打って変わって曇り空。参加者は多…

angular.jsのdirectiveでカスタム要素をつくる

directiveを使ってカスタム要素をつくるというのをやってみました。 http://docs.angularjs.org/guide/directive restrict: "E", restrictはdirectiveの種類で、'E'は要素を指します。他にも'A'や'C'があり、それぞれ属性とクラスを指します。デフォルトは'A…

angular.jsのdirectiveで再帰的なカスタム要素をつくる

ツリーのような再帰的なカスタム要素をつくろうとした場合、素直に書くと、 "RangeError: Maximum call stack size exceeded"が発生します。 angularがテンプレートを再帰的に解析しようとして収集つかなくなるようです。 そのものズバリな解決策が以下のペ…

angular.jsのdirectiveでng-popstateをつくる

HTML5のHistory APIでは、pushStateでスタックへ積んだ状態を、window.onpopstateにセットしたイベントハンドラで受け取ることができます。このイベントハンドラをangular.jsで扱いやすいようにng-popstateという属性を定義するという内容です。 app.directi…

竹原〜佛通寺

ひさしぶりの定例ライド。忠海港に集合して竹原へ。 加茂川河口。「たまゆら」というアニメの聖地だとか。 遠くには契島が見えました。 たまゆらを知らないというと、じゃあ竹原をめぐってみようかとなり、保存地区やお寺を見て回ることに。 町並み保存地区…

西条酒祭り

念願の酒祭りに行ってきました。広島大学に車を停め、西条駅周辺の会場まではシャトルバスで。 酒ひろば入りたかったけどドライバーの連れがいるので。酒蔵めぐりを中心に楽しみました。 山田牧場の串焼き、味・ボリューム共に満足。 各酒蔵では数百円で試飲…

ビンディングシューズのクリート交換

クリートがボロボロで、引っ掛かり具合が悪くなっていたので交換しました。 交換前。左足の方は黄色部分が1箇所無くなっています… 交換後。 位置が変わらないように付け替えたつもりですがどうだろ。

沖縄旅行

沖縄へ行ってきました。好天に恵まれ楽しい4日間でした。 空港までは車で。駐車場は1日800円なので人数が多い場合はバスより安く済みます。 クラブハウスサンドを食べて搭乗までの時間つぶし。調子に乗ってビールも。 素晴らしい晴れっぷり。 宿泊先のダイワ…

野呂山ドライブ

野呂山までドライブしてきました。また自転車で行きたいなと思っていたので下見も兼ねて。 ハチマキ展望台。 安芸灘大橋が見えます。 林道も気持ちいい。 兜岩展望台。 とびしま海道の島々になるのかな。瀬戸内の風景は綺麗です。何度見ても飽きない。 木陰…

出雲路センチュリーライド2013

今年はあいにくの雨でしたが多くの方が参加されていました。雨は初めてなので不安な気持ちでスタートを待ちます。 並ぶのが遅れ、一緒に走る人たちの数列後方からスタート。最初のチェックポイントまでは一人旅。 チェックポイントでは地元の方々が飲み物や…

2013出雲路センチュリーライド参加予定

昨年に続き今年も出雲路センチュリーライドに参加予定です。 で、宿の予約をすっかり忘れていたことに気づきました。 慌てて調べたのですが、もう空室がなさそう… ということで当日早朝移動です。松江自動車道ができたので去年に比べれば移動も楽なはず。

夏しまなみ

夏休みを利用して1泊2日でしまなみ海道を走ってきました。 1日目:尾道駅まで輪行、しまなみ海道を今治まで。 2日目:松山まで走り、松山から呉へフェリー、自宅まで自走。 今回はしまなみ初めてのCAADさんと一緒です。先輩ヅラして知っているところへ案内し…

はっさく大福食べてきた

はっさく大福を食べにしまなみ海道までドライブ。 尾道からしまなみ海道に入り因島大橋記念公園のはっさく屋へ直行。早々に大福にありつけました。中のはっさくがみずみずしくて美味しいです。 その後生口島に渡り、中華瀬戸田へ。にんにくラーメンと餃子を…