hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
05/28/2003 ほげ
■ [ニュース][小ネタ] 個室のみの男児用トイレ
ニオイで分かるだろ.アレは絶対なくならんて.
■ リチャード・M・ストールマンへの質疑応答
やっぱ,GPLライセンスは使用者の,BSDライセンスは開発者の自由を重視してる気がする.
それにしても最後の質問
# * 誰かがパスワードを入力しようとしたら、体を背けろ
# * とりあえず10回インストールしろ
重要だ.
■ [小ネタ] 仏教徒は穏やかで幸せ
それは単純に何かを信奉してる人がそうなんだと思うが.仏だろうが神だろうがイワシだろうが皆一緒だ.
■ [Gentoo][Tips] うちのGentooは何才?
$ ls -ld /etc/runlevels
drwxr-xr-x 6 root root 152 2002-04-08 07:03 /etc/runlevels/
コレが一番古いかな? 去年4月8日の朝7時…まぁそんなもんか.
05/28/2005 む
■ [Gentoo][ソフト] 「無効なフォント Kochi-Mincho が削除されました」
がうっとおしいなあと思って色々試してたら, /usr/bin/ps2pdf の中身を
exec ps2pdf14 "$@"
に変更することで直った模様.12 だとダメなのか.
しかしこれで pdf バージョン 1.3 以前はステということになってしまったが,過去は忘れゆくものなのだよ…….
ついでにメモ
/usr/share/ghostscript/7.07/lib/CIDFnmap*
を色々ごにょることでフォント変更したりできるらしい.さざなみとか IPA フォントとかに変更したいとかそういう場合に.
05/28/2006 ふーむ
■ [Py][戯言] ふーむ
暇だったので MeCabとPythonでマルコフ連鎖を書いてみる(改) を参考に以下のようなコード書いてみた.
#!/usr/bin/env python # -*- coding: utf-8 -*- import random import MeCab import feedparser def wakati(text): t = MeCab.Tagger("-Owakati") m = t.parse(text) result = m.rstrip(" \n").split(" ") return result def create_markov_table(wordlist, level=2): def check_word(words): return len([w for w in words if w]) == len(words) markov = {} tmpword = ["" for i in range(level)] for word in wordlist: if check_word(tmpword): key = tuple(tmpword) try: markov[key].append(word) except KeyError: markov[key] = [word] tmpword = tmpword[1:] + [word] return markov def gen_sentence(markov, level=2): count = 0 sentence = [] tmpword = random.choice(markov.keys()) while count < len(wordlist): try: tmp = random.choice(markov[tmpword]) sentence.append(tmp) tmpword = tuple(list(tmpword)[1:] + [tmp]) except KeyError: pass count += 1 return ''.join(sentence) def cnet_news(): f = feedparser.parse("http://feed.japan.cnet.com/rss/index.rdf") text = "\n".join([s["summary"].split("\n")[0] for s in f.entries]) return text.encode("utf-8") if __name__ == "__main__": level = 4 src = cnet_news() wordlist = wakati(src) markov = create_markov_table(wordlist, level) sentence = gen_sentence(markov, level) print unicode(sentence, "utf-8")
イマイチよくわかってないけど,謎な文章が出力される.
■ [小ネタ] 出版社占い
via: kinnekoの日記
「あなたはマガジンハウスタイプです!マガジンハウスは、旧名である平凡出版の頃から、ファッションや社会風俗における最先端の流行を作り出してきた出版社です。「an an」「POPEYE」「BRUTUS」などの代表的雑誌が、1960年代以降の若者たちに与えてきた影響は計り知れないものがあります。あなたは誰からもかっこいい、と思われる洗練されたお洒落さん。身だしなみに気を遣いますし、社会的な礼儀もわきまえています。また、新しいものには目がなく、興味を持ったものは何でも試してみる、行動的な一面もあります。加えて、創造的な才能という面でも抜きん出ています。クリエイティブな仕事に非常に向いた資質を持っていると言えるでしょう。しかし、筋が通らないことは納得がいかない頑固者で、また自分のしたいことしかしないという、ややわがままな面があり、「変人」というレッテルを貼られがちですが、むしろそれを嬉々として受け入れている感があります。また、実際の内面より悪ぶったり、軽い人ぶったりしてしまう偽悪的な一面もあります。そんなあなたを理解してくれる人はごく少数であり、心の中は常に孤独です。まず、偽悪ぶるのは止めて、もっとありのままの自分で人と向き合うようにすることが重要です。なお、非常に飽きっぽい一面もありますので、注意してください。代表的な刊行物:an・an、Hanako、 POPEYE、BRUTUS、Kunel」
あー,確かに飽きっぽいね.
05/28/2017 ふむ
■ [Py][小ネタ] llesync
exFAT なパーティションにディレクトリツリーを同期したいことがあるのだが,
- 10 年以上前からデスクトップのファイルシステムが EUC-JP で,convert するのも面倒なので放置している
- しかし exFAT はファイル名が UTF-8 じゃないと書き込みを拒否するくさい
といったようなことがあって,面倒臭いなあと思っていた.
ファイルの同期といえば rsync(1) 大先生なのだが,単に -a オプションを使うと chown(2) でエラーを吐くとかまあ色々あって,概ね下記のようなオプションを指定することになる.
# rsync -rpt --iconv eucjp,utf8 SRC DST
とはいえ覚えられないし打つのも面倒だし,alias するとか wrapper 書くとかすることになると思うのだが,どうせ rsync(1) ほど高機能/高性能なものを求めているわけでもなし,せっかくなのでフルスクラッチで書いてみた. それが llesync.
とはいえどうせなら zero-copy でいっちょやってみるかと,データ本体を user space にメモリコピーすることはないようにした. その結果が下記.
$ sudo bash -c 'echo 1 > /proc/sys/vm/drop_caches' $ time sudo llesync -S hoge /mnt/card/tmp/. real 0m3.328s user 0m0.467s sys 0m0.347s $ rm -rf /mnt/card/tmp/hoge $ sudo bash -c 'echo 1 > /proc/sys/vm/drop_caches' $ time sudo rsync -rpt --iconv eucjp,utf8 hoge /mnt/card/tmp/. real 0m3.633s user 0m1.296s sys 0m0.304s
rsync(1) はデータを user space に持ってきてから kernel space に送る (read(2) したデータを write(2) する) という動作をするので,zero-copy にすることで user 時間に差が現れる. まあ,real は大差ないので大した意味はないけれど.
llesync はデフォルトでは差分をチェックせず cp -r のような動作をするので,更新されたファイルだけコピーしたい場合は上記のように -S オプションを指定する. 差分のチェックはデフォルトでサイズ,mtime,ファイル名の比較だけど,プラットフォームが Linux Kernel Crypto API をサポートしていれば md5 等のハッシュ値を比較することもできる. 例えば sha1 ハッシュ値を比較したい場合は下記のようにする.
$ sudo llesync -S -a sha1 hoge /mnt/card/tmp/.
hashlib を使わなかったのは,言わずもがな zero-copy を堅持するため. とはいえ如何に zero-copy と言えど,ハッシュ値の比較を使うとめちゃくちゃ遅くなるので,使いどころはあまりないのだけれど.
ちなみにハッシュ値を算出する部分は独立したモジュールに分けておいたので,下記のようにハッシュ値を求めることができる.
$ sudo bash -c 'echo 1 > /proc/sys/vm/drop_caches' $ time python3 -m llehash -a sha1 data 440a94499f1862fab752280ab7c4470b7d859a69 data real 0m4.592s user 0m0.071s sys 0m2.279s $ sudo bash -c 'echo 1 > /proc/sys/vm/drop_caches' $ time sha1sum data 440a94499f1862fab752280ab7c4470b7d859a69 data real 0m4.393s user 0m2.332s sys 0m0.272s
zero-copy のため user 時間と sys 時間に差が生まれているのが見て取れるけど,こちらもまあ real は大差ないので大した意味はない.
□ kou [駅弁が入っているかと思った。 ]
□ atzm [残念ながら地下鉄に駅弁はないのです ]