3imp トップレベル変数とプリミティブな関数

3imp 4.7に書かれているトップレベル変数とプリミティブ関数を実装した. トップレベル変数 実装方針が2つ挙げられていた. 一つ目は,今までの自由変数のようにクロージャ生成時にdisplay closureの中に 全部つっこんでしまう方法. 簡単らしいが,あんまり気が乗らないので却下. これをやっちゃうと,当然すべてのdisplay closureが膨らんでしまうし, いろんな場所から参照されてboxが…の話になってしまう. 二つ目は,トップレベル用を自由変数と別に管理する方法. トップレベル変数,自由変数,束縛変数を区別する. これならdisplay closureは小さいままだし,boxもいらない. こっちを採用した. 変更点は,以下のあたり. find-free 式xの中に含まれている自由変数を検索する関数. トップレベルかどうかを判定を追加する. compile-lookup 変数xと,(ローカル変数のリスト . 自由変数のリスト)を受け取り,変数xが3種類のうちどこに属するかを調べる関数(その後,適切な関数を呼ぶ). ローカル変数 -> 自由変数 -> トップレベルで検索する. collect-free クロージャの生成時にdisplay closureにつっこむ自由変数の値を集める関数. display closureにつっこむべき値は,呼び出し元の束縛変数か自由変数のはず. プリミティブ関数 プリミティブな関数も関数なので,トップレベルにそのクロージャオブジェクトを あらかじめおいておく. 呼び出す場合は,他のクロージャ同様,引数を渡してコールフレームを作ってー…と やっている. 1引数の場合でもわざわざスタックに積んでいるのでもったいない気はするが, 2引数のときに,一方はレジスタでもう一方はスタックでというのは分かりにくいので とりあえずこの方針でいく. 複文 ついでにlambda式で複文をかけるようにした.

February 15, 2014

3imp 4.1 スタックベース

3impのchap4.1の備忘録です. schemeから,第一級関数,継続,末尾最適化を取り除いた簡単な例です. レジスタ a: accumulator,汎用的に使う x: 次の命令 e: 一つ外側のスコープのフレーム s: スタックトップ コールフレーム 静的リンク(pushed last) 1st argument : : last argument next expression(返りアドレス) 動的リンク(pushed last) 命令 継続はないから,conti,nuateはない. (halt) VMをhaltする. accumulatorの値を結果とする (refer n m x) 静的リンクをたどる n…現在のフレームからのオフセット (constant obj x) 定数objをaccumulatorにつっこみ,xをセット (close vars body x) functionalを作る (test then else) accumulatorがnullかどうかチェックし,nextかelseをnext expressionにセットする. (assign var x) varにaccumulatorを束縛 次の式をxにセットする. (frame x ret) 動的リンクとretからフレームの土台を作る (argument x) accumulatorの値をスタックにプッシュ 次の式をxにセットする. (apply) 静的リンクを取り出して,プッシュ 次の式をclosure本体にする. この時点でフレームが完成する (return n) 動的リンクとnext expressionを除いたフレームのサイズ つまりフレームトップからnを引くと,next expression, 動的リンクが取り出せる これでフレームを消して,動的リンク元のフレームに戻る 例 ((lambda (x y) (x y)) (lambda (x) (if x 10 20)) #f) (frame (halt) (constant #f (argument (close (refer 0 0 (test (constant 10 (return 2)) (constant 20 (return 2)))) (argument (close (frame (return 3) (refer 0 1 (argument (refer 0 0 (apply))))) (apply))))))) 1....

February 13, 2014

3imp ヒープ型VM

3impを3章まで読んだので備忘録です. 以前にschemeっぽいのを書いたのでもうちょっとマシなのを作りたいという ことです. 3impは,schemeの処理系をheapベース,stackベース,stringベースの三種類で 具体的に紹介してくれているありがたい論文です. 特に3章heapベースのVMの動きを書き残しておきます. コンパイラ schemeコード -> コンパイラ -> 中間コード -> VMで実行 という流れなので,まずschemeコードから中間コードへのコンパイラを作ります. 継続渡しとでもいうのかな. 基本的に前から後ろに命令が流れていきます. コンパイラの詳細は論文にあるので省略します. ;; schemeコード (if #f 10 20) ↓ ;; 中間コード (constant #f (test (constant 10 (halt)) (constant 20 (halt)))) VMの仕様 レジスタと中間コードの仕様は以下の通りです. まず,VMには以下の5つのレジスタがあります. レジスタa - the accumulator 関数の返値,定数や変数のロード,関数の引数,条件式など汎用的に使う トップレベルまで返ってくると計算結果が格納されている 例: 10, (1 2 3) レジスタx - the next expression 次に評価すべき式(中間コード)を格納 実際は評価すべき式がリストとして渡されますが,car部分の式が次に評価すべき式 例: (constant #f (test …)) レジスタe - the current environments 現在の変数の割り当て(環境)を格納 クロージャ適用の際に,その引数が新しく追加され環境が更新される 変数名は特に意味がないので(後述します),値だけ入れておく リストの先頭が直近のスコープです. 例: ((1 2 3) (#t #f) ()), () レジスタr - the current rib 関数呼び出しの際に,引数のリストとして使われる 引数を評価したレジスタaの値を,consしていく 例: (1 2 3), () レジスタs - the current stack コールフレーム 関数呼び出し時に追加され,呼び出し元の(x e r s)をこの順で格納 関数から戻るときはここに待避させたレジスタを復元 call/ccで継続オブジェクトとして取り出したり,割り付けたりする 例: ((return) (1 2 3) () ()), () 中間コードは以下の通りです....

February 6, 2014

piでベアメタルプログラミング

0. はじめに 実機でhello worldを目標に簡単なブートプログラムを書きます. せっかく友人からもらったraspberry piを遊ばせているので いいおもちゃになりそうです. ただ,ほとんどhttp://wiki.osdev.org/ARM_RaspberryPi_Tutorial_Cを参考にしているので 詳細を知りたい方は原文を読んでいただけたらと思います. 前半はエミュレータとクロスコンパイラの準備です. 全部コピペしてくれれば動くようにはしているつもりです. 対象はraspberry pi Model Bと呼ばれるものです.(これしか持ってないです) wikipediaより cpu: 700 MHz / ARM1176JZF-S コア (ARM11 ファミリ) ボード: BCM2835 メモリ: 512MB 内蔵SSDやHDは搭載しない代わりに,SDカードを記憶装置として使います. ブートもSDカードからです. 1. エミュレータ まずqemuを使って,raspbianが動作するか確認します. もともとインストールされていたqemuは qemu-system-arm -cpu ?にarm1176は含まれていますが qemu-system-arm -M ?にBCM2835ボードが含まれていないようなので, 代わりにversatilepbを使います. そのため実機とエミュレータでハードウェアのアドレス(GIOやUART)が 変わるので注意が必要です. -cpuでcpuの種類,-mでメモリサイズ(MB),-hdaでイメージファイル, -appendでを指定します. -kernelでホスト環境にカーネルのファイルを指定します. raspbianのイメージファイルはここから. http://www.raspberrypi.org/downloads $ wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu $ wget http://files.velocix.com/c1410/images/raspbian/2012-10-28-wheezy-raspbian/2012-10-28-wheezy-raspbian.zip $ unzip 2012-10-28-wheezy-raspbian.zip $ qemu-system-arm \ -kernel kernel-qemu \ -M versatilepb \ -cpu arm1176 -m 256 \ -append "root=/dev/sda2 panic=1" -hda 2012-10-28-wheezy-raspbian....

January 13, 2014

2013年総括

明けましておめでとうございます. 少し遅れたが昨年2013年を振り返ってみる. unix v6読書会 受付の方から鍵を借りれたらこっちのもん 7回くらい開催した 8回目どうしよう 来てくれるかな… セキュリティ・キャンプ 熊猫さん,忠鉢さんとLSMを使ったセキュリティモジュールを作る 中途半端なまま残ってる カーネルvm なおたさんに誘っていただいた ちょっとだけ運営の手伝い(足手まとい) 次回以降… googleブートキャンプ スパゲティのうえにマシュマロ乗っけたやつ mixi challenge mixiっぽいsnsでカモネギさんと遊んだ kc3 怖いbrainfuckerがいた mruby読書会 シンボルテーブルのところ p Class.class.class.classのやつ ouccの旅 徳島で麻雀 モンバス 四星玉,スピッツなどなどのやつ しゃちほこ 広島,長崎のどこか ちょいと遠くまでさらわれる zeppなんば 限定フリーライブ 2列目のやつ 愛知県体育館 単独ライブ ことしの鯱夏は武道館 ガンバ大阪 アレアレガンバレアレガンバレのやつ 12節山形(万博) デズモンドのアタマがこわかった 35節愛媛(万博) みかんにやられた 40節熊本(万博) うさみん戻ってくる 4-0圧勝で自動昇格 41節山形(万博) j2優勝 藤春MVP かじさんカミカミ

January 4, 2014

((schemeっぽい処理系)を書いてみた)

schemeっぽい処理系jellyfishを書いてみました. ここ においています. ただ,あくまでもオレオレ実装なのでRnRSには 対応していません. schemeは,処理系の自作としては定番のようですが, その割には解説した記事が少ないと感じます. ここでは簡単ですが,その実装方法などを書きたいと思います. 読者として想定しているのはbrainfuck処理系を書いてみて, もう少し高級?なオレオレ処理系(schemeに限らず)を書きたいな と思ってるそんな方々です. なんや簡単やんと思っていただけたら幸いです. jellyfishではこんなプログラムが動いてくれます. 簡単な組み込み関数(evalを含む),高階関数は実装しています. ; ; quick sort ; (define (part c y x) (if (null? y) '() (if (c (car y) x) (cons (car y) (part c (cdr y) x)) (part c (cdr y) x)))) (define (quicksort x) (if (null? x) '() ((lambda (pivot) (append (quicksort (part < x pivot)) (cons (car x) (quicksort (part > x pivot))))) (car x)))) ; ; fizz buzz ; (define check_fizzbuzz (lambda (x) (if (= (modulo x 15) 0) "FizzBuzz" (if (= (modulo x 5) 0) "Buzz" (if (= (modulo x 3) 0) "Fizz" x))))) (define fizzbuzz (lambda (a b) (if (> a b) nil (begin (display (check_fizzbuzz a) " ") (fizzbuzz (+ a 1) b))))) (define x '(fizzbuzz 1 50)) (display x " => ") (eval x) (newline) (define x '(quicksort '(32 77 70 21 3 2 73))) (display x " => " (eval x)) (newline) まず,以下のようなことを考えてみます....

December 24, 2013

vimをコンパイルしてみた

未だneocomplecache.vimを 使っているのでそろそろneocomplete.vimへ移行したいなと思い 調べてみるとどうやらluaサポートのあるvim が必要とのこと.この例ではpythonサポートも含めています. パッケージ持ってきても良かったんですが vimをソースからコンパイルしたことなかったので やってみました. $ brew install mercurial $ mkdir /usr/local/vim-7.4 $ cd /usr/local/src $ hg clone https://vim.googlecode.com/hg/ vim $ cd vim/src $ ./configure --enable-luainterp=yes \ --with-lua-prefix=/usr/local/Cellar/lua/5.1.5 \ --enable-pythoninterp=yes \ --with-python-config-dir=/usr/lib/python2.7/config \ --prefix=/usr/local/vim-7.4 $ make $ make install –with-lua-prefix –with-python-config-dir は環境に依存するので注意してください. (configureのメッセージや,make後のvim –versionで正しく設定されているか確認できます.) これで,/usr/local/vim-7.4/bin/vimにインストールされます. pathを通せば完了です. ( export PATH="/usr/local/vim-7.4/bin:$PATH" ) :lua print("hello") のようにすると,luaインタプリタがちゃんと動いているのを確認できます. .vimrcは以下のようにすればneocompleteとneocomplecacheの共存も可能です. if has('lua') && ( (v:version == 703 && has('patch885')) || v:version >= 704) " neocompleteの設定 else " neocomplcacheの設定 end

November 19, 2013

pdp11の遊び方

V6のコードリーディングをやってると,pdp11のエミュレータsimhの使い方とか クロスコンパイラの使い方を知っているといろいろ捗ると思うのでそのまとめです. やってることは, クロスコンパイラを使ってpdp11のa.out-pdp11フォーマットの実行ファイルを作る. simhでそれを実行させてメモリ・レジスタの内容を確認する.(simhの仮想ディスクに実子ファイルを割り当ててブートする.) pdp11では基本的に8進で書かれることが多いので注意です. クロスコンパイラ binuitlsとgccは以下のものを使いました. OS Xでのインストール手順を貼っておきます. binuitls 2.23 gcc 3.4.6 $ wget http://ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz $ tar xvf binutils-2.23.tar.gz $ cd binuitls-2.23 $ ./configure --target=pdp11-aout --prefix=/hogehoge $ make $ make install $ brew install libmpc $ brew install gmp $ brew install mpfr $ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.2/gcc-4.8.2.tar.gz $ tar xvf gcc-4.8.2.tar.gz $ cd gcc-4.8.2 $ mkdir work # 別ディレクトリから $ cd work $ ../configure --target=pdp11-aout --prefix=/hogehoge $ make $ make install $ pdp11-aout-acc hello....

November 16, 2013

debianパッケージメモ

とりあえず # display xrandr xrandr --output VGA1 -- mode 1280x1024 --right-of HDMI2 xrandr --output HDMI2 -- mode 1920x1080 # xfce apt-get install xfce4 apt-get install xfce4-goodies # ime apt-get install ibus-anthy apt-get install ibus-mozc ibus-setup # flash # add /etc/apt/sources.list # deb ftp://ftp.debian.org/debian stable main contrib non-free apt-get update apt-get install flashplugin-nonfree # git apt-get install git git config --global user.name "bobuhiro11" git config --global user.email "hogehoge@hoge.com" ssh-keygen # vim # for python support apt-get install vim-gnome # skype # download from http://www....

November 1, 2013

プレゼンツールrabbit

プレゼンをしたり,pdfを出力したりできる markdown又はRD jpeg,pngもそのまま埋め込み $ gem install rabbit $ rabbit-2.1.1/lib/rabbit/theme # テーマ一覧 $ rabbit sample.rd # 実行 $ rabbit -p -o sample.pdf sample.rd # pdf出力 # To run with it without system install. # % ruby -I./lib bin/rabbit -f sample/rabbit-implementation.rd # $Id$ = 第4回 UNIX V6 読書会 : subtitle 6章 シグナルの話 : author @bobuhiro11 : institution : theme clear-blue = PDP11/40 * ((*16bit*)) CPU (1Word = 16bit) * 物理メモリ((*256KB*))(2^18) * 18bitのアドレス * 仮想メモリ((*64KB*))(2^16) * 16bitのアドレス = PSW 15-14 現在のモード(00:カーネル 11:ユーザ) 13-12 以前のモード(00:カーネル 11:ユーザ) 5-7 プロセッサ優先度 4 トラップビット 3 Nフラグ 2 Zフラグ 1 Vフラグ 0 Cフラグ

November 1, 2013

Javaでスレッドの同期処理

同期処理の方法やデッドロックを防ぐ注意点など. 以下のような仕組みを持つものを,同期プリミティブと呼びます. (セマフォやモニタなど) 共有資源の排他処理 スレッドのwait,wakeup処理 モニタ javaでは同期プリミティブにモニタという仕組みを使っています. モニタとは,スレッド間で共有したいデータをメソッドなどで包んで そのメソッド内部でしか読み書きが出来ない状態にして, さらに同時に1つのスレッドからしか侵入出来ないようにしたもの. これで,モニタ内部のデータは排他処理ができるようになります. javaでは,共有データにprivate修飾子をつけ,メソッドにsynchronized修飾子 をつけることで,メソッド単位でモニタを実現できます. また,モニタを使って,条件の同期(condition Synchronization)を行います. javaにはスレッドのwait,wakeupに関して以下の3つが準備されているので, これを使います. public final void notify() オブジェクトを待っている1つのスレッドを起こす public final void notifyAll() オブジェクトを待っている全てのスレッドを起こす public final void wait() throws InterruptedException 他のスレッドに起こされるのを待つ.モニタに関連するSynchronizationロックはすべて解除. 起こされたら,実行を再開する前にモニタを再獲得しなければならない. 例えば,0からNまでの整数間を動くカウンタは以下のように実装します. Counter::inc()やCounter::dec()内では,if文の代わりにwhile文を使います. (if文だとwait()から起きたときに,再評価されないので眠っている間に変更されている可能性がある) いくつのスレッドが待っているか分からないときは,notifyAll()で起こします. (必要以上に待つのを防ぐため) public class Counter { private int count; private int N; public Counter(int max){ count = 0; N = max; } public int get(){ return count; } synchronized void inc() throws InterruptedException{ while(count==N) wait(); count++; notifyAll(); } synchronized void dec() throws InterruptedException{ while(count==0) wait(); count--; notifyAll(); } } public class IncRunnable implements Runnable{ private Counter counter; public IncRunnable(Counter c){ counter = c; } @Override public void run() { while(true){ try { counter....

October 25, 2013

Rubyの実装一覧のメモ

MRI(Matz’s Ruby Implementation) C言語で実装 本家 1.9.x以後,YARVを取り込む mruby 軽量版,組込み用 JRuby Javaで実装され,JVM上で実行 インタプリタ,JITコンパイル(デフォルト),AOTコンパイル JRubyからJava,JavaからJRubyを呼び出せる IronRuby .NET上で実行 .NETライブラリが使える MacRuby 0.5以前はVARV,それ以降はLLVM JITコンパイル,AOTコンパイル OSX上で動作 Rubinius 殆どrubyで実装 JITコンパイル(マシンコードへのAOTコンパイルは無理?) バイトコード用の仮想マシンはC++で実装 バイトコードからマシンコードはLLVM MagLev Smalltalk VM上で実行 Cardinal Parrot Virtual Machine上で実行 HotRuby javascriptとactionscriptで実装 ブラウザ上で実行 Topaz RPython(Pythonのサブセット)で記述 PyPy(Python -> 機械語のJITコンパイル)と同じ仕組み? Crystal ruby風文法 C言語の関数が呼び出せる JITコンパイル,AOTコンパイル(マシンコード)

October 24, 2013

GCM - Google クラウドメッセージング

GCMの使用を強いられたので,メモです. GCMはサーバからandroidアプリに対して, push通知を送る仕組み・サービスです. 2012/6/26に,公開されたようです. それ以前は,C2DMを使って実装していました. 簡単なサンプルですが,メモとして残しておきます. こちらに置いています. http://developer.android.com/google/gcm/index.html,http://www.kotemaru.org/2013/07/28/android-push-message.htmlから,一部引用しています. 仕組み Googleのサーバを,GCMサーバ 自身のサーバを,自サーバ と呼ぶことにします. はじめにGCMサーバから,端末のID( レジスタID )を取得する. レジスタIDを自サーバへ送信する. 自サーバから,レジスタIDを設定し,メッセージをGCMサーバへ送る. GCMサーバから各端末にメッセージが送信され,push通知される. 準備 まず,https://code.google.com/apis/console/から GoogleAPIを取得します. Service一覧から,Google Cloud Messaging for Androidのstatusをonにします. API ACCESSから,Create new Server Keyを選択し,API Keyを取得します. ここで,2つの情報を確認しておきます. API Key: 自サーバから,GCMサーバへメッセージを送信する場合に使う. Key for server appsに書かれています.“Jfdsah82…“のようなもの. Sender id: アプリから,自サーバへメッセージを送信する場合に使う.URLのprojectの後ろの数値です.“4352…“のようなもの. 1. クライアントの実装 古いですが,Google APIs 10で実装しました. はじめに,Android SDK ManagerからGoogleCloudMessaging for Android Libraryをインストールします.次に,{Android SDKディレクトリ}/extras/google/gcm/gcm-client/dist/gcm-src.jarを,プロジェクトに追加します.(srcディレクトリで右クリック => Archive Fileで追加できます) マニフェストファイル マニフェストファイルに以下のようにpermissionを追加します. BEGIN,ENDで囲ったところを追加してください. com.example.comのところはプロジェクトのパッケージ名に変更します. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gcm_reciever" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" /> <!...

October 22, 2013

セキュリティ・キャンプ2013

August 21, 2013

LSMについて調べてみた.(続き)

一つ前のエントリで動かなかったサンプルが,動くようになりました.カーネルパニックが起こっていたので,static int __init bobulsm_init(void)を中心に調べて行きました. 結局,security_module_enable()を呼び出していなかったのが原因でした.初期化の段階で既に読み込まれているかチェックするために,register_security(&bobulsm_ops)の前に呼び出さなければならないようです. カーネルパラメータにsecurity=bobulsmを追加する(grepの設定ファイルを修正,または起動時にshift押しっぱなし)と正しく動きました.mkdirが呼ばれる度に,メッセージが増えていく様子が確認出来ました. $ dmesg | grep bobulsm [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.8.8 root=UUID=b5af552c-3516-48dc-8175-b7ce91be3e60 ro crashkernel=384M-2G:64M,2G-:128M security=bobulsm [ 0.004045] bobulsm: registered surely. [ 0.170644] bobulsm: inode_mkdir called. [ 0.170664] bobulsm: inode_mkdir called. [ 0.170997] bobulsm: inode_mkdir called. 参考: https://www.kernel.org/doc/htmldocs/kernel-api/API-security-module-enable.html

July 5, 2013

LSMについて調べてみた.

LSMとは LSM(Linux Security Module)とは,kernel2.6から実装されたセキュリティフレームワーク.SELinuxやTOMOYO Linuxでも使われていて,チェックが必要な箇所でフックがおこり,登録されたコールバック関数が呼び出される. インターフェースの外から サンプルを書いてたんですけど,上手くいかなかったので,コピペはやめたほうがいいです. /* bobulsm.c */ static int bobulsm_inode_mkdir(struct inode *inode, struct dentry *dentry, umode_t mask) { printk("bobulsm: inode_mkdir called.\n"); /* Return 0 if permission is granted. */ return -EPERM; } static struct security_operations bobulsm_ops = { .name = "bobulsm", .inode_mkdir = bobulsm_inode_mkdir, }; static int __init bobulsm_init(void){ if (register_security(&bobulsm_ops)) panic("bobulsm: Occurred an error at register_security(&bobuhiro11lsm_ops).\n"); else printk("bobulsm: registered surely.\n"); return 0; } security_initcall(bobulsm_init); MODULE_DESCRIPTION("BOBULSM"); security_operations構造体に,イベントが発生した時にやらせたい関数を登録します.ここでは,ディレクトリの作成時に,呼び出されるように,inode_mkdirメンバにbobulsm_inode_mkdirを登録しました.これで,ディレクトリ作成時に,bobulsm_inode_mkdirが呼ばれるはずです. cd linux-3....

June 5, 2013

gnu globalでコードリーティング

gnu globalを使うと,grepで探さなくても関数や変数の定義されているファイルとその位置を探してジャンプできるようになります. インストール aptを使うと,gtags.vimで不具合があったので,ソースから. $ cd /usr/local/src $ wget http://tamacom.com/global/global-6.2.8.tar.gz $ tar xf global-6.2.8.tar.gz $ cd global-6.2.8 $ ./configure $ make $ make install vimから使う. Vundleでインストールします..vimrcに次のように書いて,":BundleInstall". Bundle 'gtags.vim' さらに,使いやすいようにキーマップも変えておきます. " 関数一覧 noremap <C-G><C-I> :Gtags -f %<CR> " 関数検索 noremap <C-G><C-S> :Gtags -r " 関数の定義へ移動 noremap <C-G><C-J> :GtagsCursor<CR> あとは,読みたいコードがあるディレクトリ内で," $ gtags -v"としてタグをつける.vimで開いて,気になる関数の上で,ctrl-g,ctrl-jとすると,その定義のある場所へジャンプ.読み終わったら,ctrl-oで元の場所に戻ってきます.

May 19, 2013

Beamer(latex)でプレゼン

latexには,プレゼン用のクラスがいくつか用意されているみたいです.その中でも綺麗なスライドが作れる(らしい)Beamerを作って,スライドを作ってみました.環境に依存するところが多くて参考にならないかもしれませんが. インストール まず, latex-beamer pgf xcolor をダウンロードしてきます.http://sourceforge.net/projects/latex-beamer/files/ ここに全部おいてあります.そして,解凍してlatexのフォルダ(ここは環境によります)にフォルダごとコピーする. $ tar -xzvf latex-beamer-3.07.tar.gz $ tar -xzvf pgf-1.01.tar.gz $ tar -xzvf xcolor-2.00.tar.gz $ sudo cp -r latex-beamer-3.07 /usr/local/texlive/texmf-local/tex/latex/ $ sudo cp -r pgf-1.01 /usr/local/texlive/texmf-local/tex/latex/ $ sudo cp -r xcolor /usr/local/texlive/texmf-local/tex/latex/ $ sudo mktexlsr 使い方 以下のようにtexコードを書く. \documentclass[dvipdfm]{beamer} \usetheme{Madrid} %テーマ \usecolortheme{default} %カラーテーマ \title{Beamerについて} \author{bobuhiro11} \date{2013/05/09} \begin{document} \frame{\titlepage} \section{} \begin{frame}{はじめに} 本文です. \end{frame} \end{document} あとは,"platex sample.tex","dvipdfm sample.dvi"とかやってやるとpdfファイルができます. 参考 : latex-beamer,Beamer Theme Matrix

May 9, 2013

vimでMarkdownをhtmlへ変換

1.http://daringfireball.net/projects/markdown/こちらのページからMarkdown1.0.1をダウンロード解凍する. 2.“Markdown.pl"を”/usr/local/bin"に移動する. 3.utf8を使えるように,“Markdown.pl"のはじめに,“use utf8;“を追加する. 4.vimから使えるように,以下のコードを”.vimrc"に追加する. nmap \md :%!/usr/local/bin/Markdown.pl --html4tag 5.終わりです.vimでmarkdownのテキストを書き,"\md"でhtmlへ変換されます. 参考:http://net.tutsplus.com/tutorials/other/vim-essential-plugin-markdown-to-html

April 30, 2013

HenTai-編入体験談-

...

April 28, 2013