HTMLメールに画像を埋め込んで、sendmailで送信する

HTMLに画像を埋め込む時はimgタグにBase64エンコードした画像を書くだけ。 <img border="0" src="data:image/png;base64,(Base64 Image)" /> しかし、HTMLメールをRubyで自動生成し、同じ方法で画像を埋めこもうとしたら上手くいかなかった。 メール送信に使っているsendmailに1行あたりの文字数制限があったらしく、画像の…

テンプレートエンジンJQuery TemplatesをJadeから利用する

特に、パラメータの参照が似ていてよく間違える。 JQueryっぽい方は「$」を使う、と覚えよう。 二つのテンプレートエンジンの違いについて JadeもJQuery Templatesもテンプレートエンジンには違いないが、 Node.jsのWebフレームワークexpressにも搭載されて…

Mission Control表示時のスクリーンショットを撮る

スクリーンショットで思い出した。 ターミナルで以下のコマンドを実行すれば、3秒後にスクリーンショットが撮影される。 その間にMission Controlを表示しよう。 sleep 3 && screencapture -ttiff ss.tiff

TypeScript + Node.js + expressでGyazoサーバを作った

いい感じにスクリーンショットが撮れるGyazoは、スクリーンショットを共有するためのツール。 Gyazo - Gyazoへようこそ : スクリーンショットの瞬間共有 撮影したスクリーンショットは自動的にgyazo.com上へアップロードされるけど、URLは128bitのハッシュ値…

印象に残っている授業

印象に残っている授業がある。 その授業は「総合的な学習の時間」の中で行われていた気がする。パズルやクイズの中から規則性を見つけ出して、パズルのタネ、 すなわちアルゴリズムを見つけ出すというものだった。毎週違ったパズルが出てきて、そのタネを見…

DIY Gamer Kit (Arduino同梱版)を購入した

Technology Will Save Usというイギリスのベンチャー(?) が発売しているDIY GamerKitを購入したDIY Gamer - Technology Will Save Us - Technology Will Save Us8x8のLEDの画面を使って好きにゲームを作ることが出来る 少し興味があったので購入ページを見て…

tmuxがCygwin上で動作するようになったのでインストール手順をまとめてみた

CygwinはWindows上で動作するUNIXライクなプログラミング環境で、個人的にはよく使っている。コンパイラなどのインストールも、Cygwin自身のインストールの際に用いるsetup.exeを呼び出すだけで出来てしまう。自分は使ってはいないが、aptライクなパッケージ…

vimperatorのヒント文字のレイアウトが崩れてしまう問題を解消する

vimperatorはfirefoxの操作をvimというテキストエディタ風のキーバインドで行うためのツールで、vimを使うことが多い自分としては欠かせない。 vimperatorの特徴的な機能としてヒントモードと呼ばれるものがあって、これがとても便利な機能となっている。デ…

Node.js v0.10.x系のREPLで f)( のように括弧が逆でも関数が呼べてしまう

Node.js v0.10.x系のREPLでは次のように関数呼び出しの括弧の順序が逆でもキチンと関数が呼べてしまう。 > function f() {return 1;} undefined > f)( // 明らかにおかしいが、Node.jsのREPLでは動作する 1 もちろん上記のコードを.jsに保存して実行させても…

組み込みボードSTM32-P407のデバイスドライバについて

ARM CortexM3を載したSTM32-P407(STM32-P407)上で外部SRAMを利用するにあたってデバイスドライバを触った時の経験について纏めてみる。 STM32-P407はLCD、イーサネット、USB、I2Cといった組み込みボードが持つ一般的な入出力機器を備えている評価ボードのよ…

JavaScriptで動作するパーサジェネレータPEG.jsを使ってみる

Markdownっぽいデータ記述言語を作成した際に、PEG.jsと呼ばれるJavaScript向けパーサジェネレータを使用した。 PEG.jsは文法定義から実際にパースを行うコードを生成してくれるため、何かと便利なツール。 公式ドキュメント以上の情報が載っている感じでは…

Mac OS Xでログイン画面のスクリーンショットを撮る

以外と簡単にログイン画面(スクリーンセーバ)のスクリーンショットを撮れたので、メモ1. [システム環境設定] -> [デスクトップとスクリーンセーバ] -> [ホットコーナー]を選択 2. 右下辺りを[スクリーンセーバを開始する]に設定 3. 以下のシェルスクリプトを…

Lisp処理系の実装 考察

こちらで開発を行っているLispの処理系ですが、目標だったaobenchの動作まで行えるようになりました。上の画像はaobenchを実行することで作成される画像になります。*1 文法 100個程度の関数・マクロを提供しています。これらの関数についてはCで実装を行っ…

Lisp処理系の実装

昨年行っていたLisp処理系の実装を踏まえて、大学院に進学し、2年目となった今年も挑戦しています。去年は 型は数値のみ GC無し if文と関数定義を実装し、フィボナッチ関数の実行速度向上のみに取り組む という内容で、最終的にLLVMによるJITを行っていたた…

GoForIt回答 - 申告制エレベータ -

引き続きGoForItの回答です。最後まで到達していませんが、せっかくなのでポストしようと思います。 回答はshidasan · GitHubで公開しています。 i) 乗り降りした階、時間、入力データの識別番号をファイルから取得し、出力フォーマット通りに標準出力に出力…

GoForIt回答 - 暗号検索の高速化 -

sonyが開催しているGo For Itに参加しています。言語はKonohaScriptKonoha Projectを使用しています。TopCoderなどのように実行環境を限定されていないコンテストなため、こういう時はKonohaScriptを使ってみます。回答はshidasan · GitHubで公開している他…

LLVMの最適化パス

LLVMの最適化パスはlib/Transforms以下にあるようです。 lib/Transforms/InstCombine以下は全てピープホール最適化(覗き穴最適化)に関するパスが集まっていて、 -A + B --> B - A -A + -B --> -(A + B) のような局所的な最適化が行われています。 パッと見…

オリジナル言語のLLVMフロントエンドをKonohaScriptで実装する その4

前回までで作成したASTから、LLVMの中間表現(IR)を作成していきます。 http://llvm.org/docs/tutorial/こちらのページの5章までの内容になります。 具体的にはASTのクラス毎に定義されているcodegen関数を定義していきます。 四則演算、比較などのオペレー…

オリジナル言語のLLVMフロントエンドをKonohaScriptで実装する その3

LLVMのチュートリアルページ(http://llvm.org/docs/tutorial/LangImpl1.html)の2章まで追っていきます。ここまではチュートリアルで記述されているものとほぼ一緒です。LLVM IRを作成し、KonohaScriptの関数として実行する際には若干手を加えている部分があ…

オリジナル言語のLLVMフロントエンドをKonohaScriptで実装する その2

前回の補足です。KonohaScriptのインストールはKonohaScript インストール手順(1)ソースからのビルド - Konoha日誌 で確認する事が出来ます。LLVMパッケージの利用には、LLVM(http://llvm.org/)のインストールも必要です。 KonohaScriptのLLVMパッケージ…

オリジナル言語(Kaleidoscope)のLLVMフロントエンドをKonohaScriptで実装する

題名の通り、ごく単純な数値演算を行えるプログラミング言語(Kaleidoscope)のフロントエンドをKonohaScriptで実装しようと考えています。 現在KonohaScriptにはLLVMパッケージが用意されており、KonohaScript上からLLVMのAPI(一部)を利用することが出来ます…

このブログについて

プログラミングに関するメモをまとめていきたいとおもいます。