Hatena::ブログ(Diary)

hogeなlog

プロフィール

hogelog

hogelog

小室 直(こむろ すなお)。電気通信大学2003年入学。2010年修士卒業。プログラミングとかしてます。

カレンダー
1984 | 01 |
2006 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2010 | 01 | 06 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 12 |
2012 | 01 | 04 | 06 |

November 30(Sun), 2008

[] vimperatorのコマンドライン領域にウェブページを表示するプラグイン peekpage.js

思いついたので書いてみた。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/peekpage.js

:peekpage http://d.hatena.ne.jp/hogelog/

とかすると

f:id:hogelog:20081130044046p:image


:peeksrc http://mixi.jp/

などとするとソースコードがずらずらと。

f:id:hogelog:20081130044047p:image


vimperator pluginを書くときにはutil.jsにて定義されてる色々な関数が便利なのでできるだけ使うようにすると楽で良いと思います。ねむい。

追記

そういえばvimperator 2.0pre(2008/11/28-)でしか試してないので、vimp1.2とかで動かしたらどうなるかはわからんです。

November 28(Fri), 2008

[] ptetex3のdvipdfmxを使いフォント埋め込みPDFを作る

ptetex3を導入したUbuntu 8.10*1にてフォント埋め込みのPDFを作る方法。ptetex3ならおそらくどこでも同様。

dvipdfmxで使うフォントは

/usr/local/teTeX/share/texmf-var/fonts/map/dvipdfm/updmap

にあるdvipdfm.mapで欧文フォント、kanjix.mapで日本語フォントの設定をしています。設定を変える必要があるのは日本語フォントの方。ここを直接書き換えても結果は変えられる*2けど、dvipdfmxはdviファイルと同ディレクトリにkanjix.mapがあるとそっちを参照してくれるので、元のkanjix.mapをコピーしてきて!Ryumin-Light!GothicBBB-Mediumと書いてある部分を適当なフォントに書き換えます。

cidgoth-h Identity-H :0:ipag
cidgoth-v Identity-V :0:ipag
cidmin-h Identity-H :0:ipam
cidmin-v Identity-V :0:ipam
futogo-b H :0:ipag
futogo-b-v V :0:ipag
futomin-b H FutoMinA101-Bold
futomin-b-v V FutoMinA101-Bold
gbm H :0:ipag
gbmv V :0:ipag
gtbbb-m H :0:ipag
gtbbb-m-v V :0:ipag
hkb H :0:ipag
hkbv V :0:ipag
hmr H :0:ipam
hmrv V :0:ipam
jun101-l H Jun101-Light
jun101-l-v V Jun101-Light
rml H :0:ipam
rmlv V :0:ipam
ryumin-l H ipam
ryumin-l-v V ipam
unijgoth-h UniJIS-UTF16-H :0:ipag
unijgoth-v UniJIS-UTF16-V :0:ipag
unijmin-h UniJIS-UTF16-H :0:ipam
unijmin-v UniJIS-UTF16-V :0:ipam

この例だとIPAフォント*3の明朝体とゴシック体を埋め込むフォントとして設定した。全部書き換える必要は無かったかも。試してない。

このようなkanjix.mapを置いたディレクトリでdvipdfmxでdviをpdfに置き換えると日本語フォントを埋め込むことができる。

さらに、文字の入っているepsを図として取り込んでいるとHelveticaが利用されるがHelveticaが埋め込まれていないPDFができる。Helveticaを埋め込むためには

/usr/share/ghostscript/8.63/lib

gs_pdfwr.ps

/.standardfonts [
  /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
  /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique
  /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic
  /Symbol /ZapfDingbats
] readonly def

として埋め込まない基本フォントとして設定している部分を

/.standardfonts [
  %/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
  %/Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique
  %/Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic
  %/Symbol /ZapfDingbats
] readonly def

のように書き換える。更に

/usr/local/teTeX/share/texmf/dvipdfm

dvipdfmx.cfgでも

D  "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile=%o -dNOKANJI -c '.setpdfwrite << /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Ryumin-Light /GothicBBB-Medium] >> setdistillerparams' -f %i -c quit"

のように埋め込まない基本フォントとして設定されているので

D  "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile=%o -dNOKANJI -c '.setpdfwrite << /NeverEmbed [] >> setdistillerparams' -f %i -c quit"

埋め込まないフォントとして指定しないように書き換える必要がある。

今回は論文投稿の規定で「フォントを全て埋め込むこと」とあったのでHelveticaまで埋め込んだが、実際にはHelveticaなどの基本フォントを埋め込む必要はあまり無いかもしれない。

参考

[] Greasemonkeyのユーザスクリプトコマンドをvimperatorから実行する

.vimperatorrc*4に以下のコードを追加してvimperatorのコマンドとしてGreasemonkeyのコマンドを実行できるようにした。

javascript <<EOM
liberator.commands.addUserCommand(["gmcommand", "gmcmd"], "run Greasemonkey Command", //{{{
    function(args, special) {
        var commander = GM_BrowserUI.getCommander(getBrowser().selectedTab.linkedBrowser.contentWindow);
        for (var i = 0; i < commander.menuItems.length; i++) {
            var menuItem = commander.menuItems[i];
            if (menuItem.getAttribute("label") == args) {
                menuItem._commandFunc();
                return;
            }
        }
        liberator.echoerr(args+" is not defined userscript command.");
    },
    {
        completer: function(filter) {
            var commander = GM_BrowserUI.getCommander(getBrowser().selectedTab.linkedBrowser.contentWindow);
            var completions = [];
            var exp = new RegExp(".*" + filter + ".*");
            for (var i = 0; i < commander.menuItems.length; i++) {
                var label = commander.menuItems[i].getAttribute("label");
                if (!filter || exp.test(label)) {
                    completions.push([label, label]);
                }
            }
            return [0, completions];
        }
    }
); //}}}
EOM

gmperator.jsあたりに既にある機能かと思ってたけど無かったので。gmperatorに追加しようかと思ったけど今trunkはvimperator2.0版のプラグインになってるし後で2.0導入してからコミットしようと思っている。 追加してコミットしました。

[] gmperator.jsにユーザスクリプトコマンドを実行するコマンド:gmcommandを追加した

gmperator.jsに:gmcommandを追加しました。

vimp2.0系列はここから

1.2系列の場合はこっち

*1:色々めんどうなのでptetex3入れるんならaptからはtexliveとかdvipdfmxとか入れない方が良いと思う

*2:コメントに「このファイル直接いじんな!」とか書いてるけど

*3Ubuntu Japanese Teamパッケージレポジトリから追加したもの

*4http://coderepos.org/share/browser/dotfiles/vimperator/hogelog-vimperatorrc

November 24(Mon), 2008

[][] カレントディレクトリのlatexファイルをなんかそれっぽくコンパイルするRakefile

ダウンロードはcodereposから。

http://coderepos.org/share/browser/lang/ruby/misc/rake_template/Rakefile-latex

ごちゃごちゃと改良なんだか改悪なんだかわからない変更入れまくった。

コンパイルしたい.texファイルがあるディレクトリでrakeと叩くと、おもむろにカレントディレクトリのtexファイルのコンパイルを始める。

~/docs/b4/prosym/resume[0] % rake
(in /home/komuro/docs/b4/prosym/resume)
platex prosym-resume
This is pTeX, Version 3.141592-p3.1.10 (euc) (Web2C 7.5.4)
(./prosym-resume.tex
...

同ディレクトリにたくさん.texファイル置いちゃってるような場合にrakeと叩くと、ファイル名順で先頭に来る奴対象にコンパイルしてしまう。対象をprosym-resume.texにしたいときはrake prosym-resume、などと叩く。*1

~/docs/b4/prosym/resume % ls *.tex
hoge.tex           prosym-resume.tex
~/docs/b4/prosym/resume[0] % rake prosym-resume
(in /home/komuro/docs/b4/prosym/resume)
platex prosym-resume
This is pTeX, Version 3.141592-p3.1.10 (euc) (Web2C 7.5.4)
(./prosym-resume.tex
...

次回以降はrakeと叩けばprosym-resumeを対象とします。Rakefileでできることはrake -Tで表示できる。

~/docs/b4/prosym/resume[0] % rake -T
(in /home/komuro/docs/b4/prosym/resume)
rake bib            # Link BibTeX files
rake clean          # Remove any temporary products.
rake clobber        # Remove any generated file.
rake default        # Compile LaTeX -> DVI
rake dep            # Print Depends Information
rake force          # Force Compile LaTeX -> DVI
rake hoge           # Compile hoge.tex -> hoge.dvi
rake pdf            # Compile DVI -> PDF
rake prosym-resume  # Compile prosym-resume.tex -> prosym-resume.dvi
rake ps             # Compile DVI -> PS

コマンドはplatex, jbibtex, dvips, dvipdfmxという組み合わせ決め打ちにしてる。.bibファイルは環境変数BIBTEXに設定されているディレクトリにまとめて置いてあることを前提。


標準入力からごちゃごちゃ入力してコンパイル対象選ぶ機能はなんかめんどくさいので削除した。なんかツギハギだらけ感するなー。あとはてなダイアリーのエントリも各リビジョン保存してくれればいいのにと思った。

*1:zshとかその辺使ってたら補完が効く

ujihisaujihisa 2008/11/24 10:47 gj, hogelog++

気になったのはgetsでしかとらないところで、ARGVも見てくれるとうれしいなあなどと思った。
というのもvimから呼び出した場合引数を渡すのが非常な困難なので。
(<space>rにrakeを割り当てるなどしている)

hogeloghogelog 2008/11/24 19:08 あー、たしかに。rakeだとARGV取る場合どうなんだろ。誰か修正してコミットしてくれると嬉しい!

あとなんか依存関係をふがふがしてコンパイルしてくれるlatexmkコマンドというものがあるらしいことを今知った

November 19(Wed), 2008

[][] LaTeXコンパイル用のRakefileを書いた

最初の$TARGETだけ対象とするhoge-resume.texの.tex抜いた名前に変更して使う。


rakeと叩くだけでうまいことやってくれる、と嬉しいなあ。

texファイルを読んで適当に依存関係を設定してるつもり。

あとbibtexファイルを置いてるディレクトリを環境変数BIBTEXDIRを設定しておくと、texファイル内で使ってる.bibファイルから現在のディレクトリにリンクを貼る。リンクサポートしてない環境ならコピーされるはず。

rake cleanで中間ファイルの削除、rake clobberで生成したもの全部削除。rake -Tで可能なことが表示されます。

codereposに上げておいた

http://coderepos.org/share/browser/lang/ruby/misc/rake_template/Rakefile-latex


$TARGET     = "hoge-resume"

def tex_dep(texname)
    inputs = [texname]
    resources = []
    bibs = []
    while !inputs.empty?
        resources << (input = inputs.shift)
        File.open(input){|file|
            file.each_line{|line|
                if /\\input\{(.+)\}/ =~ line
                    inputs << $1
                elsif /\\(?:verbatiminput|includegraphics\[.+\])\{(.+)\}/ =~ line
                    resources << $1
                elsif /\\bibliography\{(.+)\}/ =~ line
                    bibs += $1.split(",").map{|x| "#{x}.bib"}
                end
            }
        }
    end
    [resources, bibs]
end

$TEXNAME    = "#$TARGET.tex"
$DVINAME    = "#$TARGET.dvi"
$PDFNAME    = "#$TARGET.pdf"
$PSNAME     = "#$TARGET.ps"
$TEX	    = "platex"
$BIB	    = "jbibtex"
$DVIPS	    = "dvips"
$DVIPDF	    = "dvipdfmx"
$BIBTEXDIR  = ENV["BIBTEXDIR"]
$RESOURCES,$BIBS = tex_dep($TEXNAME)

desc "Compile LaTeX -> DVI"
task :default => $DVINAME

desc "Compile DVI -> PDF"
task :pdf => $PDFNAME

desc "Compile DVI -> PS"
task :ps => $PSNAME

desc "Print Depends Information"
task :dep do
    puts "#$DVINAME: #{($RESOURCES+$BIBS).join(" ")}"
    puts "#$PDFNAME: #$DVINAME"
    puts "#$PSNAME: #$DVINAME"
end

require "rake/clean"
CLEAN.include(%w[aux toc lot lof log bbl blg bib].map{|x|"*.#{x}"})
CLOBBER.include([$DVINAME, $PDFNAME, $PSNAME])

def texcompile
    sh "#$TEX #$TARGET"
    if !$BIBS.empty?
        sh "#$BIB #$TARGET"
    end
    sh "#$TEX #$TARGET"
    sh "#$TEX #$TARGET"
end

desc "Force Compile LaTeX -> DVI"
task :force do
    texcompile
end
file $DVINAME => ($RESOURCES+$BIBS) do
    texcompile
end

file $PDFNAME => $DVINAME do
    sh "#$DVIPDF #$DVINAME"
end

file $PSNAME => $DVINAME do
    sh "#$DVIS #$DVINAME"
end

rule ".bib" do |bib|
    ln "#$BIBTEXDIR/#{bib}", "."
end
# vim: set ft=ruby sw=4 ts=4 et:
トラックバック - http://d.hatena.ne.jp/hogelog/20081119

November 18(Tue), 2008

[][] ふと確認したくなったので

~/tmp[0] % cat test.c
#include <ruby.h>
VALUE f() {
    return INT2FIX(1);
}
~/tmp[0] % gcc -I/usr/include/ruby-1.9.0/ -I/usr/include/ruby-1.9.0/i486-linux/ test.c -c
~/tmp[0] % objdump -S test.o

test.o:     file format elf32-i386


Disassembly of section .text:

00000000 <f>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   b8 03 00 00 00          mov    $0x3,%eax
   8:   5d                      pop    %ebp
   9:   c3                      ret

ですよねー。「INT2FIX(1)とかはコンパイル時にコンパイラさんが頑張って即値にしてくれるよね? ああ、してくれるねやっぱり」という話です。

トラックバック - http://d.hatena.ne.jp/hogelog/20081118

November 14(Fri), 2008

[] とっさにgvimでプレゼンするときの設定

下に書いたような----で区切ったテキストを書いて、/----とnでページを進める。z<CR>は現在の行を一番上に持っていくコマンド。

# vim: guifont=* nonumber laststatus=0:

とmodelineで:set guifont=*としてるのでフォント選択ダイアログなど出てくるはず*1。フォントサイズはたぶん60くらいが良い。

まず
:noremap n nz<CR>
:noremap N Nz<CR>
する。



----
1ページ目
123456789012
ほげほげほげ




----
2ページ目
ffugaguaud
hogemgeo




----
3ページ目
mogemoge




----
4ページ目
what a wonderul code!
def square(x)
    x * x
end
p square(9)




----
# vim: highlight=l\:NONE:
# vim: guifont=* nonumber laststatus=0:

追記 19:36

ちょい間違ってたので修正した。:nz<CR>じゃなくてnz<CR>とか。

-:noremap n :nz<CR>
-:noremap N :Nz<CR>
+:noremap n nz<CR>
+:noremap N Nz<CR>

さらに追記 19:40

よく考えると

noremap n njz<CR>
noremap N NNjz<CR>

の方がいいかも。

*1:X11上のgvimなら違うかも

トラックバック - http://d.hatena.ne.jp/hogelog/20081114

November 10(Mon), 2008

[][] gyazoのedit.cgiの画像リンク切れを修正するスクリプト

gyazo

http://gyazo.com/edit.cgi?id={自分の数字id*1}

から自分がアップロードした画像を見れます。見れるのですが、2008年11月10日現在リンク切れてます。のでそれを修正するスクリプトを自分で書いて使ってたんですがせっかくなので日記にのせておく。


http://konbu.s13.xrea.com/lib/js/gmscript/gyazoview.user.js


// ==UserScript==
// @name           gyazoview
// @namespace      gyazoview
// @include        http://gyazo.com/edit.cgi*
// ==/UserScript==
(function(){
var imgs = document.getElementsByTagName("img");
for(var i=0;i<imgs.length;++i) {
  imgs[i].src = imgs[i].src.replace("data/", "");
}
})();

*1:Macなら /Applications/gyazo.app/Contents/Resources/id、Gyazowinならexeファイルと同ディレクトリのid.txtの中身

トラックバック - http://d.hatena.ne.jp/hogelog/20081110

November 03(Mon), 2008

[] 第九回 RHGの逆襲

ものすごく適当なイベントレポート。話者でもないのに喉が潰れた。酒などで。ふしぎ。


Ruby1.9を読む - Code Reading Wiki

http://www.dzeta.jp/~junjis/code_reading/

話者のさわださんが以前Ruby1.9を読んだときの記録。ありがてえありがてえ。

vm_core.h

VM関連のデータ構造が集められてるのでまずこれを読む。

rb_vm_t
YARVの実行情報
rb_thread_t
スレッドの実行情報(OSスレッド1つに対し1つ)
rb_control_frame_t
実行中のyarvコードの情報(レジスタなど)
rb_block_t
現在実行中のブロックの情報
rb_iseq_t
yarvコード列の方

vm.inc

あいつ正しいCのコードらしいぞ!

--dump=insn

インストラクション列を吐くことができて楽しい。

% ./ruby --dump=insn -e'n=10;a=1..n'
== disasm: <RubyVM::InstructionSequence:<main>@-e>======================
local table (size: 3, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 3] n          [ 2] a
0000 trace            1                                               (   1)
0002 putobject        10
0004 setlocal         n
0006 trace            1
0008 putobject        1
0010 getlocal         n
0012 newrange         0
0014 dup
0015 setlocal         a
0017 leave

世界中のruby処理系が一斉に失なわれたら……!

ruby処理系のビルドにrubyを使っているので、僕らは二度とrubyと出会えなくなる

JOKEが通じないruby処理系

vm_opts.hでsupport joke設定してビルドしたruby処理系に冗談が通じないバグが!

id.cがvm_opts.hをincludeしていませんでした → これを直すパッチを書いて送るとrubyコミッタになれる!

無駄VALUE

今は

bignum + float -> bignum + float2big(float)

bignum + fixnum -> bignum + fixnum2big(fixnum)

のような形にして

bignum + bignum

の流れに通して答えを出してる。hoge2bignumで生んだオブジェクトがすぐゴミにしておいてGCまでごみとして残り続ける憤慨!


bignum + floatの場合の処理をごちゃごちゃ。

bignum + fixnumの場合の処理をごちゃごちゃ。

bignum + bignumの場合の処理をごちゃごちゃ。

という形にして、そもそもごみ出ないようにすればよろしいかも。


解放するコード仕込む?

patch+ベンチマークでmatzを騙せ!


fixnumの範囲のbignumを全部作っておくと……!

飲み会

gitはなんかあれげだいえ新たな概念がですね普通に使う分にはhgのが楽じゃないですか、とかGaucheのコードはShiroさんの人格者っぷりが出てるような美しさが、などあちこち話題を飛ばしたりしてて喉が潰れた。

トラックバック - http://d.hatena.ne.jp/hogelog/20081103
最近のコメント
Connection: close