昔の最近の出来事(2015.02)

2015/02/28

昼頃起床。

美人時計ELISPのデバッグ版やワークアラウンド版をもそもそと作ってみたり。

デバッグ版は119分先の画像を表示するようにしてみました。推測が当たっていれば 22:00になると画像取得に失敗し始めると考えられます。

ワークアラウンド版は画像取得したらリトライするというもの。 150224版(コード内の日付を変え忘れてました(^^;)) 以前までは、 画像の取得に失敗しても、次の画像アクセスは1分後という動きに なってたのを、失敗したら何度かリトライするように変えてみたり。
自PCの時計が 画像サイトの時計より若干進んでいると、自分PCでは00:00だけど 画像サイト側は23:59となった時、2時間範囲計算バグを踏んでしまうと推測されます。 画像サイト側が00:00になればアクセス可能 なハズなので、時計のズレはそんなに無いと考えて何回かアクセスリトライ すれば、そのうち時間が合って画像の取得できるだろうという考え方です。 恐らく自PCの時計が 画像サイト側より遅れていれば、150224以前版でも 大丈夫かも知れません。そんな訳で今日の深夜のテスト待ち。

昼間の再放送番組で、テレビ字幕をリアルタイムでキーボード入力する ステノキャプショナーという職業を知ったり(参考動画)。 それで使用していたキーボードがちょっと変わっていたので調べてみたり。 同時押しの組み合わせで単語を入力するようですが、 具体的な入力ルールはよく判りませんでした。

別のELISPをもそもそとコーディング。やっと動き始めたようなそうでも ないような。

美人時計ELISP。デバッグ版で119分先の画像を取得していた所、 22:01 +199分 = 00:00 になった所で、空画像が取得され始めました。 予想通り。

で、ワークアラウンドの方は失敗。リトライ回数が足りなかった ようですが、もしかすると 00:01になるまで 00:00の画像を取得不可 なのかも知れません。もし、00:01になるまで00:00の画像を取得不可 だとすると、時計を1分遅らせるしか手が無いのですが.....

別ELISPの方。

Wireframe描画 on Emacs

3Dワイヤーフレーム描画してみました。この例では約350本のワイヤーをテキスト描画 しているのですが結構重いです。もっと楽々と動くかと思ったのですが そうでもありませんでした。あと、ELISPは大規模なものになるとやはり辛いです。 辛いと思った点をいくつか挙げてみますと、


といった所でしょうか。実行速度については、もっと速い実装になればなぁ? と思わなくはありませんが、現在のPCでは十分速いのかも知れません。

それにしても よく考えてみますに、今のFull-HDの2K 画面で文字サイズ9ならば 横330文字,縦90文字表示できます。将来 8K画面サイズ になったとすると、単純に横1320文字、縦360文字となる訳ですが、 これって80年代のゲーム画面サイズ(320x240pixとか)よりも広い事になります。 しばらく先かも知れませんが「Emacsに○○('80〜'90年代のゲーム)を移植してみました」 という時代が来るんじゃないかと思ったりも。

2015/02/27

遅めに帰着。

Web巡回して終了。

そういや先日、美人時計の画像URLが変わったのですが、 その後、何故か丁度 00:00 の画像取得に必ず失敗するようになったり。 どうやら美人時計のサイト自体が画像取得できる時間を制限して いるようで、現在時刻からキッカリ119分先まではいつでも画像取得できる ようですが、それより先の時刻は空のデータが得られるような 仕組みになっているようです。

ここからは推測ですが、23:59→00:00 の 時間差計算が何かしら バグっていて、00:00を 24時間前か24時間先 と判断してるのかな? と思ったり。この推測の通りバグっていたとすれば、例えば22:00以降であれば 00:00以降の画像を取得できるハズですが、24:00で計算されて 24:00の画像は読めるようになっているけど、そんな画像は無くて アクセスできない....とかになってるんじゃないかな?と考えられます。 少し先の時刻画像を取得するようなデバッグバージョンを作って 試してみようと思います。

まだ判りませんが、推測は当たっていそうな予感。 01:59までは00:00画像にアクセスできましたが、02:00になると 空データになりました。どうやら 現在時刻から ±119分ぶんの画像が 取得可能なようです。 ところが、00:10頃に23:59画像をアクセスしても空になっていた事 と合わせてみると、やっぱり 00:00の前後 2時間の範囲計算がバグって るんじゃないか?と考えられます。

2015/02/26

気持ち早めに帰着。

ちょろりコーディング。

2015/02/25

遅めに帰着。

ELISPコードを整理したり、ちょろりコーディングしたり。

2015/02/24

遅めに帰着。

美人時計が急に動かなくなったので調べてみると画像のURLが変わった模様。 そんな訳で対応版を置いてみます (bijin-tokei-150224.tar.xz)。

ちょろり実験コーディング。遅いと思っていたのはタイマー設定の加減問題 でした。間隔を短くすればまぁいけるかも。てか、いくらELISPでも あれは遅すぎる。

2015/02/23

具合が悪くて早めに帰着。

ちょろり実験コーディング。こんなもんなのか?

2015/02/22

昼前起床。

掃除したり。

display-buffer-functionを定義する話。TANEの使う範囲では、まぁこれで いけるかな?という感じになったので貼り付けてみます。

(setq display-buffer-windowsP-ignore-buffers (list "*bijin-tokei*" "*wclock*" "*Calendar*" "*emneko*"))

(setq display-buffer-function
      (lambda (buffer inhibit-same-window)
        (let* (window)
          (unless (buffer-live-p buffer)
            (error "Invalid buffer"))
          (let (considerwlist)
            (dolist (win (window-list))
              (let ((ignmatch nil))
                (dolist (ignbuf display-buffer-windowsP-ignore-buffers)
                  (if (string= (format "%s" (window-buffer win)) ignbuf)
                      (setq ignmatch t))
                  )
                (if (not ignmatch)
                    (setq considerwlist (append considerwlist (list win))))
                ))
            (if (<= (length considerwlist) 1)
                (setq window (split-window))
              (progn
                (let ((bufwin (get-buffer-window buffer)))
                  (if bufwin
                      (setq window bufwin)
                    (setq window (car (cdr considerwlist)))
                    ))
                ))
            (window--display-buffer (window-normalize-buffer-to-switch-to buffer) window nil)
            window)
          )))

を.emacsとかに放り込んでおくという感じです。
switch-to-buffer-other-windowでウインドウ生成する場合に、上書きしたくない ウインドウを除外してウインドウ切り替えを試みます。 アルゴリズムはコードの通りなのですが、


という感じになってます。 基本的には 上記設定と、この前作成したwindow-plus.elを組み合わせて 使用します。
テストした範囲内では、概ね 除外したバッファを表示しているウインドウが あたかも存在しないかのように振舞うようになりました。しかし、 例えば delete-other-windows を実行するようなELISPに対してはどうしようも ありません。このときはwindow-plus.elを作成したときに 知ったウインドウレイアウトのセーブ/リストアを 使って元に戻すという感じになります。

しばらく使って様子を見てみようと思います。

これにより、lifeゲームや、ハノイの塔なんかもアクセサリとして 隅っこに出しとく事が可能になる訳ですが、今のところこれらのELISPは キー入力をしたりウインドウフォーカスを失うと止まってしまうのが残念な所です。

2015/02/21

AM中に起床。風邪気味継続。

そういや本日からTokyoDemoFestが始まっているなと思ったのですが、 ライブ配信は無いっぽい。残念。

この前、Emacsでガジェット類のウインドウを選択しない ようにするELISPを作ってみたのですが、例えば(switch-to-buffer-other-window)で新しい バッファとウインドウを生成された場合は、容赦無くレイアウトを崩されます。 例えば、翻訳ELISPなどでウインドウをポップアップするような場合は毎回崩される ので、予め翻訳ウインドウを出しておくとかしなくてはなりません。で、面倒臭い のでなんとかならないかと調べたり。 どうやら display-buffer-function にrambda式を定義しておけば、 ウインドウの出し方をオーバーライドできるという事で弄ってみたり。 それっぽくなった気がするものの、ちょっとイマイチな所もあったりして うーむな感じ。

2015/02/20

遅めに帰着。風邪気味。

gdcの4.9.x向け 最新版(2feea3f603)をCygwinでMinGW(i686)クロスビルドしてみたり。 pragma文でコンパイルエラーするようになったのですが、コメントアウトで 対応。i686-pc-mingw32向けの対応をいくつか入れればビルドに成功し、 簡単なテストコードのコンパイルはできたのですが、 特定のコードでSegfaultになる問題はそのまま。 そういやgdcバイナリが用意されるかな?と思っていたのですが その気配は今の所無さそう。

2015/02/19

遅めに帰着。

先日、随分前に録画してあったEテレの番組を録画消化しました。 漫画家の浦沢直樹氏がプレゼンターとなって、マンガの制作現場を 撮影した番組です(参考)。 人によって描き方も様々で大変面白かったです。

2015/02/18

早くも無く遅くもなく。

Web巡回したり録画を消化してたらあまりの眠さに急速停止。

2015/02/17

遅めに帰着。

Web巡回して終了。

そういやxzで圧縮をした際にやけに縮むなぁ?と思って不思議に思った データがあったので、ちょっとだけ実験。xzで圧縮したgccのアーカイブを 圧縮があまり効かないデータ列として用いて、以下のようなデータを 作ってみたり。

$ ls -l
合計 65224
-rw-r--r-- 1 TANE None 66787292 11月 13 01:15 gcc-4.9.2.tar.xz

$ cat gcc-4.9.2.tar.xz > bin1.bin

$ cat gcc-4.9.2.tar.xz gcc-4.9.2.tar.xz > bin2.bin

$ cat gcc-4.9.2.tar.xz gcc-4.9.2.tar.xz gcc-4.9.2.tar.xz > bin3.bin

$ ls -l
合計 456560
-rw-r--r-- 1 TANE None  66787292 2月  18 00:29 bin1.bin
-rw-r--r-- 1 TANE None 133574584 2月  18 00:30 bin2.bin
-rw-r--r-- 1 TANE None 200361876 2月  18 00:30 bin3.bin
-rw-r--r-- 1 TANE None  66787292 11月 13 01:15 gcc-4.9.2.tar.xz

で、作ったbin[1-3].bin を xz -9 で圧縮してみると、ちょっとだけ 面白い事に。

$ xz -9 *.bin

$ ls -l
合計 260936
-rw-r--r-- 1 TANE None 66790664 2月  18 00:29 bin1.bin.xz
-rw-r--r-- 1 TANE None 66800580 2月  18 00:30 bin2.bin.xz
-rw-r--r-- 1 TANE None 66810296 2月  18 00:30 bin3.bin.xz
-rw-r--r-- 1 TANE None 66787292 11月 13 01:15 gcc-4.9.2.tar.xz

2倍3倍と並べたものが、容量的には1倍とほぼ変わらない感じに なりました。実験のきっかけになった、やけに縮むなぁと思ったファイルは、 サイズの大きな複数のファイルを含むtarアーカイブだったのですが、 それぞれのファイル同士の差分はほんの少ししか無いというものだったので、 今回のように同じファイルが連結されたのと同じようなデータ列になったの だろうと考えられます。へー。

ちなみに gzip -9 だと以下のような感じ。

$ ls -l
合計 456624
-rw-r--r-- 1 TANE None  66797288 2月  18 00:29 bin1.bin.gz
-rw-r--r-- 1 TANE None 133595182 2月  18 00:30 bin2.bin.gz
-rw-r--r-- 1 TANE None 200393116 2月  18 00:30 bin3.bin.gz
-rw-r--r-- 1 TANE None  66787292 11月 13 01:15 gcc-4.9.2.tar.xz

ま、そうなるわな。

2015/02/16

遅めに帰着。

Emacsと言えば「Cntlキー+なんとか」に色々バインドされていて、 左手小指を痛める事を「Emacs小指」なんて言う事があります。 でもよく思い出してみますに、別にEmacsに限らずbashやtcshのような シェルのコマンドライン編集でも Cntlキー+なんとか って結構 使うよなぁ?と思ったり。

2015/02/15

昼前起床。

掃除したり。

先日放流したばかりのELISPで、直したいけど直し方が判らなかった所を 調べてみたところ、単純な方法で直せる事が判ったので直してみたり。 そんな訳で細かい所をちょっとだけ直したバージョンを放流してみます (bijin-tokei-150215.tar.xz , emneko-20150215.tar.xz)。

Emacsのcalender.elが3ヶ月分を表示する件。1ヶ月分だけを表示する関数を 固定値で3回実行しているだけだったので、ここをカスタマイズできるように すればいいんじゃね?と思いちょっとだけ弄ってみたのですが、 表示よりもキーボード操作の方が妙な事になってしまってて、ちょこっと 手を入れて直せる感じではなかったり。また、日本の休日を表示する為の japanese-holidays.elも3ヶ月分表示に合わせたコードになっているようで、 こりゃダメだという感じ。

japanese-holidays.elを少し弄ってみたり。mapcarという関数を使って いるのですが、コンパイルすると「mapcarは古いからmapcかdolistを使え」 といった旨のWarningメッセージが出るのでmapcに書き換えてみたり。 所が、書き換えると休日マークがおかしな感じになったり。おかしな事になる mapcar箇所は特定できたのですが、なぜおかしな事になるのかは判らず。

2015/02/14

昼前起床。

もそもそとコーディング。結局最後は力ずくになってしまった。
そんな訳で放流してみます(emneko-20150214.tar.xz)。 有名なNeko(参考Wikipedia) を表示するELISPです。本当はカーソルを追いかけるものなのですが、 ELISP力が低いので単にウインドウ枠内を勝手に動くだけのものに なってしまいました(^^;
最初はひとまず乱数で適当に動かしてみたのですが、あまりにも挙動が 不自然だったので、自然な感じに動かせないかと思った結果がコレdeath。 LISPって人口知能(AI)の研究とかで使われると言われますが、そういうのと なんの関係も無い人(==私)が作るとこんな感じになるという例です(^^; 走ると疲れるとか爪が伸びるとかの パラメータを定義して、 状況と乱数で動きを決定しているという感じです。AIのスゴイ人が 書くともっとかっこいいコードになるのかしら?

ついでに美人時計ELISPのアップデート版も放流してみます (bijin-tokei-150214.tar.xz)。 emacs-deferred を使用するようになったので、パッケージインストール等でdeferredを インストールしてください。ファイル識別等の都合上アーカイブやソースコード内に バージョンとして日付を付加するようにしましたが、コードは御自分の都合に 合わなければ自由にいじってもらって構いません。

次のような感じで無理矢理使ってみています(^^;

Emacsデスクトップ

カレンダーが必ず3ヶ月分を表示するので、ウインドウ幅が狭いと 表示的にイマイチです。1ヶ月分だけ表示できればなぁ?と思ったりも。

そういえばその昔、未沙ちゃんファイルという画像フォーマットがありました。 元々はnekoと同じくMS-DOS上の常駐ソフトで表示するものだったようですが、 MS-Windows3.0やX68kのSX-WINDOWやUNIXのX-Windowなんかにも表示アプリが移植 されていました。ところが、Webで検索してみると全くと言っていいほど引っかからず、 あれぇ?な感じだったり。

2015/02/13

遅めに帰着。

ぽにょの最後の方だけ見たり。

もそもそとコーディング。なんとなく形が出来てきた感じ。

2015/02/12

遅めに帰着。

ちょろりコーディング。構造をあーでもないこーでもないと こねくりながらコーディングする感じでイマイチ捗らず。

2015/02/11

AM中に起床。

Webを検索していたら ELISPで非同期処理を扱う emacs-deferred というパッケージの存在を知ったり。 因みに作者様は CalfwE2WMなど を開発されているkiwanamiさんです。 さておき、先日非同期に画像取得するように変えてみた美人時計のELISP ですが、画像データの取得を非同期化しただけでは、イマイチ非同期感を 感じられませんでした。deferredを使ったところ急に非同期感を感じられる ようになった気がしたり。すげぇ。

いくつかELISPコードを見ていて run-with-timerという関数と run-at-timeという関数がある のに気づいたのですが違いって何?と思ったり。Webで検索してみると run-at-timeの説明は出てくるのですが、run-with-timerの方は出てきません。 一方、使っている例は run-with-timerの方が多く出てきます。謎。

昼間のTV番組がつまらなかったので光TVの番組表を見ていたところ、 「Catoon Network」というチャンネルで トムとジェリーの10時間連続放送をやって いるのに気づいたり。懐かしくてBGVで観てみたのですが、最後に観た記憶から 30年以上経っているのに、何故かどれも観たことあるのを覚えていたり。 セルアニメなので映像的には古い感じですが、動きは今見てもキレキレなのが スゲェと思います。

もそもそとコーディング。構造に少し悩んだり。

2015/02/10

遅めに帰着。

あまりの眠さに急速停止。

2015/02/09

遅めに帰着。

もそもそとコーディング。

2015/02/08

昼過ぎ起床。

掃除したり。

美人時計ELISPを非同期で画像取得するように書き換えてみたり。 作りがなんだかイマイチになってしまった割に、すぐにデータ取得できるから あんま非同期感が無いように思ったり。

そういや時計のような単に表示しておくだけのガジェットの類を、一つの バッファとして表示するようなELISPってあまり無いような? と改めて思ってみたり。いくつか理由を考えてみたり。


まぁ色々要因はあるかと思いますが、そもそもテキストエディタに そういうのは求められていないのかも知れません(^^;

ちょろり実験。

Neko on Emacsテスト

表示できるなってのを試してみただけ。

2015/02/07

起きたら午後もいい時間。寝すぎ。

もそもそとELISPコーディング。なんとなく思っている感じのものになった ような気がしたり。少し実戦投入して様子を見てみよう。

所で、ELISPのリスト操作にpushとappendの二つの操作があります。 pushはリストの先頭に指定した要素を追加するというもので、appendは リストの末尾にリストを追加するとうものです。pushは 「(push bar foolist)」で foolistが更新されるのに対し、 appendは連結したリストを返す為、元のリストは更新されず 「(setq foolist (append foolist (list bar)))」てな感じで setqを使用する必要があります。これにしばらく気づかず、 appendが機能してないなぁ?というのに悩まされました(^^; 修行が足りません。

テストしてみたものの、Ediffの様に激しくウインドウレイアウトを 変えてしまうものに対してどうしようも無い感じだったので、ウインドウの 位置を記録&リストアするようなELISPが無いかと調べてみたり。 こちらの windolws.elというELISPがやりたい事に近い感じなのですが、 仮想ウインドウマネージャーのような動きになっていて、単にウインドウの 位置を覚えるという以上の事をやっているのがちょっと違う感じかなと 思ったり。個人的には本当に単純に「再描画(C-l)」感覚でウインドウ位置を 戻せれば良いだけなのですが。

もう少し調べてみたら、 current-window-configurationとset-window-configuration を使えば簡単にウインドウレイアウトのセーブ/リストアができることが判ったり。 以下のような感じでキーバインドすれば良さげ。

(global-set-key "\C-t\C-s"   '(lambda () ""
                                (interactive)
                                (message "Save window configuration")
                                (setq window-config (current-window-configuration))))
(global-set-key "\C-t\C-l"   '(lambda () ""
                                (interactive)
                                (message "Restore window configuration")
                                (set-window-configuration window-config)))

しばらくテストしていたら、急に美人時計が動かなくなったり。 どうやら「~/.emacs.d/url/」の下のファイルが壊れた為、 美人時計の関数がエラーしていたのですが、見え方として run-with-timer関数でエラーしているかのようなメッセージが出て 謎の挙動に見えてました。「~/.emacs.d/url/」下のファイルを全て消して 解決。

そういや全然関係無いですが、TRAMPでリモートマシンに繋いだままの 状態でホストマシンをスリープなどで停止→リジュームすると、 スリープ前まで出来ていたリモートファイルへのアクセスが 何故かできなくなる 事がありました。 解決策は「~/.emacs.d/tramp」というファイルを消してEmacsを再起動すると いう残念な方法しか無いようです。

そんな訳で放流してみます(window-plus-v001.tar.xz)。 アーカイブを展開後、window-plus.elを/usr/share/emacs/site-lispなど に突っ込んで、.emacs(オールドスタイルですみません)などに、

(require 'window-plus)
(global-set-key "\eo"   'other-window)
(global-set-key "\C-xo" 'other-window+)
(global-set-key "\e0"   'delete-window)
(global-set-key "\C-x0" 'delete-window+)
(global-set-key "\e1"   'delete-other-windows)
(global-set-key "\C-x1" 'delete-other-windows+)
(setq delete-other-windowsP-ignore-buffers (list "*bijin-tokei*" "*wclock*" "*Calendar*"))
(setq other-windowP-ignore-buffers         (list "*bijin-tokei*" "*wclock*" "*Calendar*"))
(setq delete-windowP-ignore-buffers        (list "*bijin-tokei*" "*wclock*" "*Calendar*"))

てな感じで設定すると、表示されている美人時計、世界時計(M-x display-time-world)、 カレンダーをウインドウ切り替えやウインドウ消去の対象から外します。 上記設定例では、元のバインドを上書きしてますので、 元の+無しコマンドは別のバインドに再割り当てしてます。 あと、「C-x C-b」にlist-buffersが割りあたっていると、容赦無く 除外したバッファウインドウを使って表示してしまうので、 buffer-menuを使う方が良いかも知れません。
ゆる〜い乗っ取りなので、ウインドウ操作が全然できなくなるという 感じにはならないかな?と思います。お役に立てれば幸いです。

例えば、

広い画面を有効活用1

のように広い画面を有効活用したり(<大分間違ってます)、

広い画面を有効活用2

のように活用する事ができます(<これも大分間違ってるね)。 まぁ、遊んでみて下さい。

2015/02/06

遅めに帰着。

あまりの眠さに急速停止。

2015/02/05

遅めに帰着。雪は積もってなかったり。

もそもそとELISPコーディング。

2015/02/04

早くも無く遅くも無く。

Emacsと言えばウインドウ分割して一つのバッファのあっちとこっちを同時に 見たり、二つのバッファを並べて表示したりする訳ですが、そうすると ウインドウ切り替え操作や分割をやめる操作は必須です。 で、先日の美人時計ですが、表示したは良いものの delete-other-windowsやother-window といったウインドウ操作の対象になる為、 ウインドウ分割操作を多用すると邪魔になったり直ぐに非表示になり イマイチ役に立ちません。
そんな訳で、固定表示の為にある特定のバッファをウインドウ操作対象から 外す事ができないかと調べたり。 なんとなく ignore-window-parametersという変数を設定すれば できそうな予感がしたのですが、具体的な例が無く 試しても思った 反応をしなかったので、delete-other-windowsを改造できなかと ELISPソースを眺めてみたり。結論から言うとdelete-other-windowsの実体は 組み込み関数となっていて参考にならず。
結局、似たような動きをするELISPを再発明する感じになってしまったり。 慣れてないので値を観察しながら試すという感じですが、 思いのものはまだ得られず。

2015/02/03

遅めに帰着。

Webを検索していたら、 こちらの ブログエントリで 美人時計のEmacsLISPを 作ったという記事を知ったり。Webからの画像ファイル取得から 表示までELISPだけで書かれています。しかしながら表示サイズを 小さくできないのはなんとかできないかなぁ?と思い、 ウインドウサイズにフィットするように外部コマンドを使ってみる ように勝手に改造してみたり。画像のスケーリングには image+.el のコードを一部拝借しました。そんな訳でImageMagickが必要です。

ちょっとバグっていたようなので (1時間弱ほどでundo上限に達した旨のメッセージが出る、他)、ちょろっと 直してみたり、ジャンルをシャッフルするとか、どうでも良い感じの 機能を付けてみたりして遊ばせていただきました。

美人時計onEmacs

そんな訳で置いておきます(bijin-tokei.el.xz)。 ほぼ流用コードなので特に主張するものはありません。バージョン管理 などはしてませんので、バグってたら勝手に直してみてください。

2015/02/02

遅めに帰着。

ちょろり実験。

2015/02/01

AM中に起床。

掃除したり。選択したり。

本家gdcにMinGW対応と思われるアップデートがマージされ始めている予感。 今の所、コンパイル時にエラーになる部分を直している模様。実際に使う 段階で問題になる部分はこれからという感じ?ただし、x86_64対応を先に見ている のだとするとi686対応はもう少し後になるかも?

もそもそと調べ事。

グラディウス。全然伸びず。弾詰まりや撃ち負けした時の 対応がボロボロ。また、最弱装備からの復活時と、たまたまフル装備で 通過する時とで敵弾のバラ撒き密度が違い過ぎるものですから、 フル装備時パターンがうまく掴めなかったり。上上下下.....は使えない のでフル装備通過の練習は当然できず(^^;


TOP PREV