Fork me on GitHub

2010/03/26

はてな
Emacsはインライン画像も表示出来て、ブラウザにもなって、vimでは到底真似出来ない芸当が出来るの事は、vimmerであれば皆知ってる事だとは思うんだけど...
昨日こんな動画があることを教えて貰った。
GVimでとある科学の超電磁砲OP「only my railgun」‐ニコニコ動画(9)

たくさんプログラミングしてった。ちょっと疲れた。ちなみに、これはリアルタイムのレンダリングではない。私自分のパソコンには2fpsぐらいです。64色でお楽しみ。感想はこちら(中国語だが):http://www.fancymouse.net/blog/2009/12/20/gvim_railgun_op/

http://www.nicovideo.jp/watch/sm9143016
「えっ?どうやってるの?」って思われた方もいるかもしれない。
実はコラでもなんでもない。Vimで出来る(正しくはGVim)。Vimは画像を表示する事は出来ないが、シンタックスハイライトにかけては他のエディタと比べ物にならないくらい優秀だ。XPM画像ファイル(X Pixmap)はASCIIだけで書かれたC言語のヘッダファイルなのだが、先頭に色定義、後続にその定義を使ったデータ部となっている為、VimではXPM画像ファイルを開くとさも画像ファイルであるかの様に見える。もちろんフォントの大きさが1ドットになるので若干縦長にはなる。
gvim-xpm
この仕組みを使えば、Vimで動画が再生出来る。もちろん↑の動画作者も言ってる通り、リアルタイムじゃないのであしからず。なおこの手順は↑の動画を見てmattnが勝手に推測した方法なので若干手法が違うかもしれない。

まず、動画を再生しそれを連番画像ファイルとして出力する。ここではmplayerを使うと楽。
# mplayer /home/mattn/動画/仮面ライダーディケイド変身.avi -vo jpeg
放っておくとどこまでもjpeg画像を出力しまくるので適度に止める。
次にこのjpegファイル群をxpm画像ファイルへ変換する。こんな場合はシェルスクリプトにお任せ。
mkdir out
/bin/ls *.jpg |\
while read -r line; do
    FNAME=`basename $line .jpg`
    convert $line -resize 150x100 out/$FNAME.xpm ;
done
convertはImageMagickに付属されている。
さて、outディレクトリにxpmファイル群が出力されたので、一枚適当に開いて最下行までを表示した時に全てのドットが収まる様に、フォントとウィンドウ幅を調整する。フォントが小さすぎてウィンドウ幅が分からないのであれば、「:new」して無名バッファを作り、挿入モードで「<c-r>=&columns . " " . &lines . " " . &guifont」と入力してどこかに保存してしまえばいい。
表示しきったらこれをGVimの枠付きでキャプチャを取る訳だが、数十枚ある画像を手作業ではやってられない。ここも自動化する。
以下のvimスクリプトを書いた。
set guifont=Symbol\ 1
set columns=300
set lines=90
unlet! images
let images = split(globpath(".", "*.xpm"), "\n")
for image in images
  exe "e ".image
  normal! G
  redraw
  silent! exec "!scrot -u"
  bw!
endfor
なるべく正方形に近いフォントを選んだつもり。scrotはスクリーンキャプチャで、何時も愛用している物。デスクトップ全体とかエコじゃない事はしたくないので「-u」オプションを付けて、フォーカスのあるウィンドウだけキャプチャを取った。
これを実行すれば、現在のフォルダからxpmファイル群を一つずつ開き、最下行に移動し、画面更新後にキャプチャを取得、バッファを終了、という動きになる。ちなみに今回の例だと、1画像を表示仕切るのに4秒程度かかったので、合計すると数十分掛かった。

さて、これでscrotが生成したキャプチャが出来上がるので、合成する。こんな場合はmencoderが役に立つ。
mencoder mf://*scrot.png -mf w=320:h=335:fps=5:type=png -ovc copy -o output.avi
一瞬にしてoutput.aviが生成された。
fpsは適度に調整が必要。

それでは出来上がった物を...

続きを読む...

Posted at 03:10 in ソフトウェア::vim
Tagged as: mencoder, mplayer, vim, ネタ
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2010/02/09

はてな
Inspired by http://d.hatena.ne.jp/moriyoshi/20100204/1265242273(興味のある言語にPHPと書いておいたら面接で爆笑された)
UNIXエンジニアを募集してる会社の採用面接を受けた時の話。
転職エージェントに作れと言われて作ったシートに、「使っているテキストエディタ」という欄があったんです。
nanoとか秀丸とか色々書いたけど、一応WindowsでもUNIXでも使えて操作感が好きだったるので、
Vimと書いておいたのですが、それを見た仙人染みた長髪の面接官のリアクションが酷かった。
面接官「Vim・・・ふははっ!Vim!」
面接官「Vim使ってるんですか?wwwww」
  俺「(唖然)は、はい・・まだVimscriptを理解したぐらいですが。。」
面接官「Vim・・・ニヤニヤ」
その人はEmacs信者と呼ばれていて、当然Vimくらい知っている人だったので、
Emacsが「テキストエディタではなく環境」と呼ばれている事を知らないワケが無いだろうと思っていた。
つまり、このリアクションは"理不尽な状況に直面した時にどう対応するか"を見ているんだろうと判断し、あえて突っ込みは入れずに対処した。
しかし最後の質問で「何故Ctrlキーを多用する様な操作を採用したんですか?」と聞くと、
気まずそうに理由を話し、最後に「・・・と、聞いてます」と答えた。
つまりこの人は神からEmacsを使えと言われたから使っているのであって、
特別Emacsに思い入れとか無いおっさんエンジニアなんだなあと分かった。
オムニ補完とかもVim発のテクニックだし、Emacsやってるなら補完に興味を持つのは普通だと思うんだけどなあ。
多分ガチで知らなかったんだろう。
あくまでネタであって、宗教論争のつもりじゃないのであしからず。
Posted at 00:18 in その他
Tagged as: emacs, vim, ネタ
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2009/11/08

はてな
たまにはプログラミングに全く関係ない事でも書いてみる。


先日、はてなブックマーク経由でとある対戦アクションゲーム大会の動画を見てて、最近ゲームなんて全くしていなかった私はある事に気が付いた。

最近のゲームは必殺技名を叫ばない。

なんでだろ...。昔のゲームと言えば「昇竜拳!」「竜巻旋風脚!」「バーンナックル!」「虎煌拳」等と叫んだものだ。
子供達はそれで必殺技を覚え、学校で話し、真似して遊んだもんだ。でも最近のゲームは必殺技を叫ばない。どうやって友達と学校で情報共有するんだろうか。攻略本やネットで調べるのか?それとも最近じゃ真似する時も叫ばないのか?

叫ぶからこそ必殺技っぽいと思っていた時代は古いのか?例えば学校で「カイザーウェーブ!」って叫びながら大きく胸を突き出し、腕を振り出す真似を叫ばずやったとしたら、はたしてそれが「カイザーウェーブ」と分かるだろうか。
叫ぶからこそ、ゲームを知らない人でも「あー、ゲームの必殺技かなんかだろうな...」って気付くだろうし。叫んだからこそ女子が見て「男子幼稚!」ってなったものが、はたして叫ばなかったらそれがゲームの必殺技と分かるだろうか。知らない人が見たらカイザーウェーブの動きなんて、公園に現れる変質者の挙動に見え兼ねない。きっと女子に「男子変態!」って言われるだろう。
あの、古き良き時代は何処に行ってしまったんだろう...。

全然関係ないけど、必殺技って技を繰り出す前、もしくは繰り出している最中に叫ぶ物だと思うんだけど、そういう点でいうと北斗の拳のケンシロウは少し卑怯だと放映当時の私は子供ながら感じていた。
ケンシロウは技を繰り出してから技名を叫ぶのだ。

アタタタタタタタ...お前はもう死んでいる!

これだと、技の最中に失敗してたとしても言い訳付くんですよ。

アタタタタタタタ...(あっ!ミスった)...お前はもう...全身打撲!

経絡秘孔を付き間違ったとしても、「あっ!外した!」と感じたならば、必殺技名を言わなければいいんですよ。ただ単に指が体に食い込んで痛いだけの技になるんですよ。

はい、どうでもいいですね。

最近は必殺技を叫ばないのが普通なんだろうか。
必殺技を叫ぶのは昭和なんだろうか...
Posted at 00:29 in その他
Tagged as: ネタ
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2008/04/18

はてな
世界のナベアツにはてなブックマークで挑戦する - ネットランダム

はてなブックマークのコメントで、1から40まで数えて、3の倍数 と3がつく数字の時だけアホになります。

それではどうぞ!

http://d.hatena.ne.jp/fk_2000/20080418/p2
なんと!ソフトウェアでやるべきネタを人力で!!!

むむむ...こうなればこれをまたソフトウェアで表現するべき!
fk_2000氏と愉快な仲間達がお届けする「世界のナベアツ」

ちなみにコードはこんなの
#!-*- coding:utf-8 -*-
import os
from google.appengine.ext.webapp import template
from google.appengine.api import urlfetch
from BeautifulSoup import BeautifulSoup
import logging

try:
  res = urlfetch.fetch('http://b.hatena.ne.jp/entry/rss/http://d.hatena.ne.jp/fk_2000/20080418/p2')
  print "Content-Type: text/html; charset=UTF-8"
  print ""
  items = []
  for item in BeautifulSoup(res.content)('item'):
    logging.info(item.title)
    logging.info(item.title.string)
    items.insert(0, {
      'title' : item.title.string,
      'description' : item.description.string,
    })
  template_values = {
    'items': items
  }
  path = os.path.join(os.path.dirname(__file__), 'nabeatzz_fk_2000.html')
  print template.render(path, template_values)
except Exception, e:
  print "Status: 400"
  print ""
  print e