とりあえず暇だったし何となく始めたブログ このページをアンテナに追加 RSSフィード

UNIX 系企業のぺーぺー

最近は、twitterでつぶやくのが楽で、そっちばかりになってます。IDは同じ khiker でやってます。

トラックバック/コメント歓迎・反応は遅くなることがあります。コメント、トラックバックがあるとメールで通知されるので、過去のエントリにコメントされても気付きます。

2013/03/29

[] thinkfan

Thinkpad X201 + (X)Ubuntu 12.10 で作業していると頻繁に再起動してくれるようになっちゃったので

thinkfan を入れて設定したら頻繁に再起動することはなくなったよというメモ。


家でのメイン環境は Thinkpad X201 + (X)Ubuntu 12.10 を使っていているのだけど、数ヶ月前からだいぶ調子が悪かった。

ニコ生(nsen)を裏でかけっぱなしにしながら作業とかしてると突然ノート PC が再起動する。調べたところどうやら熱らしい。


sensors で温度を見ると90度以上になっていて、100度に到達した瞬間に再起動がかかるっぽい。

当初は温度にがくぶるしながら凌いでたんだけど、Emacsリポジトリbzr pull しただけで再起動してくれやがったりして、

良い加減苦しくなってきたので重い腰を上げてちゃんと対処を調べてみた。


で、どうやら thinkfan という Thinkpad の fan speed を自動調節するプログラムを使うのが常道らしい(今まで困ってなかったから全然知らなかった…)。


まず、Thinkpad の fan speed を制御するために thinkpad_acpi の設定をする。/etc/modprobe.d/thinkpad_acpi.conf に以下のように記載する。

 $ cat /etc/modprobe.d/thinkpad_acpi.conf
options thinkpad_acpi fan_control=1

この上で、thinkpad_acpi モジュールを再読み込みするなり、PC を再起動するなりすれば OK。

# …のはず。やったのかなり前で記憶があやしい。


うまくいっていると、以下のようなコマンドを叩くと thinkpad の fan の speed が変わるはず。disengaged を指定すると fan が轟音を立てはじめて、Thinkpad の温度が急激に下がる。

 $ echo level 1 > /proc/acpi/ibm/fan
 $ echo level 7 > /proc/acpi/ibm/fan
 $ echo level auto > /proc/acpi/ibm/fan
 $ echo level disengaged > /proc/acpi/ibm/fan

普段から disengaged とかしていると煩くてかなわないので、この fan speed を Thinkpad の温度を元に自動調節するようにする。

これには thinkfan を使えば良く、thinkfan は、Ubuntu/Debian であれば、apt-get から簡単に導入が可能。

たぶん、事前に sensors を入れて設定しておく必要はあるような気は…する(lm-sensors パッケージ)。

 $ sudo apt-get install thinkfan

thinkfan の設定は、/etc/thinkfan.conf を参照する。適当にひろってきたサンプルを元に以下のように記載した。

(0,     0,      55)
(1,     48,     60)
(2,     50,     61)
(3,     52,     63)
(4,     56,     65)
(5,     59,     66)
# (7,   63,     32767)
(7,     63,     82)
(127, 80, 32767)

一番左が、level。真ん中と右が温度。Thinkpad の温度がだいたい59度を越えると fan speed の level が 5 になるという感じ。

温度がある程度高くなったときは、level 7 じゃなくて、やはり disengaged になってくれないと心配なのでその設定を追加しただけ。

ぐぐった内容を鵜呑みにした感じだと、127 と指定すると disengaged らしい (ちゃんと調べてない)。

# で、まあ、127 で 80 度越えると disengaged になってるっぽいから気にしていない。


あとは、適当に起動すれば OK。

 $ sudo service thinkfan start

# 起動時に自動起動するように、/etc/default/thinkfan をいじって START=yes とかしたような記憶があるけど、ちょっと定かじゃない…。


リハビリがてら、こんな内容で…(はてな記法を忘れていて愕然とした…)

更新時刻

  • 2013/3/30 00:40

[] tmux-mem-cpu-load

tmux のステータスラインに load average とかのっけたいなーと思ってぐぐったら、tmux-mem-cpu-load というそのものすばりなプログラムがあた。


github にあるのでソースコードgit clone してビルドする。

 $ git clone https://github.com/thewtex/tmux-mem-cpu-load.git
 $ cd tmux-mem-cpu-load
 $ cmake .
 $ make
 $ sudo make install

cmake とか使ってるけど、所詮 C++ ソース1ファイルだから、以下のように g++ 直接叩いてコンパイルしても良い。

 $ g++ -Wall tmux-mem-cpu-load.cpp -o tmux-mem-cpu-load

あとは、README.rst を参考に ~/.tmux.conf に以下を追記すれば OK。

set -g status-interval 2
set -g status-right-length 100
set -g status-right "#[bg=colour189] #(tmux-mem-cpu-load 2)  %m/%d/%Y %H:%M "


tmux を起動すれば以下の画像のように表示される。

既に tmux の中に居たなら、「C-t : source-file ~/.tmux.conf」とかやれば OK (C-t は prefix キー)。

f:id:khiker:20130330005729p:image

ステータスラインの白背景の部分が tmux-mem-cpu-load の情報をのっけているところ。

左から、メモリ使用量、CPU 利用率棒グラフ、CPU 利用率(割合)、ロードアベレージ(過去 1分、5分、15分)、現在時刻の順。

2 秒間隔での更新となる。


ソースコードを見ると /proc/stat とか /proc/meminfo とか /proc/loadavg とかいう文字列があるので、Linux じゃないと動かないかも。

とりあえず、Solaris 版はぐぐったら見っかった。


そんな感じで。

更新時刻

  • 2013/3/30 01:07

2012/12/30

コミケキーボード本出します

購入したキーボードがけっこうな数になってきたので、キーボード本出します。

内容は、キーボードの写真と少しのコメントをまとめたカタログ的な感じです。


特に何も問題なければ、以下に居るはずです。

  • c83 3日目 東 Y-10a

まったく宣伝していないので、まあ、冊数も極々少数しか用意してないです。

コミケに行く用事があって暇なら寄っていただければな、という感じです。

更新時刻

  • 2012/12/30 20:15

2011/12/29

[] Python で stand-alone バイナリを作る freeze を試してみた

なんとなくふと、Python で stand-alone な実行ファイル作れんのかなーと思って、検索してみたら、以下の FAQ を見付けたので試してみました。

One is to use the freeze tool, which is included in the Python source tree as Tools/freeze. It converts Python byte code to C arrays; a C compiler you can embed all your modules into a new program, which is then linked with the standard Python modules.」とのことで、C ソースに変換してコンパイルできるみたいです。


これを試してみたので、そのメモです。


環境

なんとなく、さくらVPS 上で作業しました。Ubuntu 10.04 です。

 $ python -V
python 2.6.5

対象ファイル

Hello, World を吐く Python スクリプトを変換してみます。

 $ cat hello.py
#!/usr/bin/env python

print "Hello, World"

# hello.py ends here.

準備

以下のパッケージを入れます。これらの他に gccmake のようなツールが必要です。build-essential あたりを入れておけば大丈夫に思います。

  • python2.6-examples
  • python2.6-dev
  • libssl-dev

python2.6-examples は、freeze.py を手に入れるために入れます。freeze.py が無いとバイナリが作れません。

python2.6-dev は、こいつを入れていないと、python ファイルから C ソースファイルを変換するときに「config.c.in」が無いと言われて変換に失敗します。

libssl は、変換した C ファイルをビルドするときに必要となります。


ただし、これだけでも駄目です。以下の差分を /usr/share/doc/python2.6/examples/Tools/freeze/makeconfig.py に適用する必要があります。

これを適用しないと、「undefined reference to `init_warnings'」と言われ、ビルドが成功しません。

手順

以上の準備が完了したら、以下のようにコマンドを叩きます。

 $ python /usr/share/doc/python2.6/examples/Tools/freeze/freeze.py ./hello.py
 $ make

C ソースへの変換は、python コマンドにfreeze.py ファイル、変換したい Python ファイルの順に渡します。

すると問題がなければ、大量の C ファイルと Makefile が作られるはずです(計13万行ぐらい)。

あとは、make と実行するだけです。

成果物

出来上がったバイナリは以下のような感じです。

 $ file ./hello
./hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
 $ du -sh ./hello
4.3M    ./hello

とまあ、けっこう馬鹿でかいファイルができあがります。もちろん出来上がったモノは普通に実行できます。

まとめ

とまあ以上のような感じです。作成が目的だったので、実行速度の差等は全然計測していません。

strip してもバイナリは、4Mぐらいなので、やっぱりちょっと大きいのが気になります。

なんとかもっと小さくできないのかなあとか思いながら、そんなこんなで。

更新時刻

  • 2011/12/30/00:20

2011/12/22

[] EmacsSL

このエントリは、Emacs Advent Calendar jp 2011の22日目です。

前日は、id:dev-null さんの アーティストモードでメリークリスマス でした。

明日は、id:r_takaishi さんです。

概要

sl とは、UNIX の有名なジョークコマンドです。

ディレクトリの内容一覧を表示する ls と間違えて sl と打つと、SL 機関車アスキーアートが端末上をかけぬけます。

これを Emacs Lisp で作成してみました。

使用

EmacsWikiソースを置き、Launchpad の個人領域上に bzr リポジトリも作りました。以下より取得できます。

このファイルを load-path の通ったディレクトリに置き、以下のように読み込むだけ使えます。

(require 'sl)

使用方法は、M-x sl とするだけです。

画像

画像はこんな感じです。

f:id:khiker:20111223001508p:image

動画

動画をとって、ニコニコにアップしてみました。エンコードとか考えてないので、ちょっと見辛いです。

動画は、recordmydesktop の gtk 版でとってみました。

D

まとめ

ちょっと急ごしらえで問題があるかもしれませんが、よかったら遊んでみてくださいー。

リンク

更新時刻

  • 2011/12/23 00:16

2011/11/12

[] タイムアウトつき url-retrieve-synchronously

SKKML に書いた内容をブログにもメモしときます。


url-retrieve-synchronously は同期的に HTTP で指定した URL にアクセスすることができますが、相手サイトが重いと反応が中々返ってこず、Emacs が固まってしまいます。


その問題を解決するために、タイムアウトつきの url-retrieve-synchronously を作ってみました。

単純に run-with-timer で url-retrieve のプロセス監視するタイマを作り、タイマが励起されると url-retrieve のプロセスが殺される仕組みです。

タイマウトは、デフォルトで2秒で発生します。


(require 'url-http)

(defun my-url-retrieve-with-timeout (url coding-system &optional timeout-interval)
  (let ((url-max-redirections 0)	; URL リダイレクトを抑制する
	;; `url-retrieve' のためのコールバック関数
	(url-callback #'(lambda (status coding)
			  (let (p)
			    (setq done t)
			    (when (setq p (url-http-symbol-value-in-buffer
					   'url-http-end-of-headers
					   (current-buffer)))
			      (setq jsonp
				    (decode-coding-string
				     (buffer-substring (1+ p) (point-max))
				     coding))))))
	;; タイムアウト発生時に呼ばれるコールバック関数
	(timeout-callback #'(lambda ()
			      ;; `url-retrieve' のプロセスを止める
			      (when (processp proc)
				(delete-process proc))
			      ;; `url-retrieve' は終わったものと見做す
			      (unless done
				(setq done t))))
	;; タイムアウト時間
	(timeout-interval (if timeout-interval timeout-interval 2))
	(done nil)
	buf proc jsonp timeout)
    (unwind-protect
	;; condition-case を用いて全てのエラーを捕捉する。ここで、捕捉した
	;; エラーは無視する。開発、デバッグ時には condition-case のブロック
	;; を外す。
	(condition-case e
	    (when (setq buf
			(url-retrieve url url-callback (list coding-system)))
	      (setq proc (get-buffer-process buf)
		    ;; タイムアウト監視用の timer を設定する
		    timeout (run-with-timer timeout-interval timeout-interval
					    timeout-callback))
	      ;; `url-retrieve' は非同期なので、同期的に結果を得られるよ
	      ;; うに待ち合わせる。ここでは、
	      ;; `url-retrieve-synchronously' が行っていることとほぼ同等
	      ;; のことをしている。本関数では、URL リダイクレトはしない
	      ;; (はず)なので、URL リダイレクトに対する対策の部分のみ削除
	      ;; してある。
	      (while (null done)
		(when (and proc (memq (process-status proc)
				      '(closed exit signal failed))
			   (eq proc (or (get-buffer-process buf) proc)))
		  (delete-process proc)
		  (setq done t))
		(unless (or (with-local-quit
			      (accept-process-output proc))
			    (null proc))
		  (when quit-flag
		    (delete-process proc))
		  (setq proc (and (not quit-flag)
				  (get-buffer-process buf))))))
	  (error
	   ;; 全てのエラーは無視する
	   nil))
      (when (bufferp buf)
	(kill-buffer buf))
      ;; タイムアウト用の timer を削除する
      (when timeout
	(cancel-timer timeout)
	;; 一応、初期化をしておく
	(setq timeout nil)))
    jsonp))

利用例としては、social ime 相手に使うと以下のような感じです。

もし、2秒以内に social ime から応答が無ければ、my-url-retrieve-with-timeout は nil を返します。


(let ((url (concat "http://www.social-ime.com/api/"
		   "?string=" (url-hexify-string
			       (encode-coding-string "あ" 'utf-8))))
      res)
  (when (setq res (my-url-retrieve-with-timeout url 'euc-jp))
    (split-string (substring res 0 (1- (length res))) "\t" t)))
;; => ("亜" "唖" "娃" "阿" "蛙" "吾" "亞" "呀" "堊" "婀" "椏" "痾" "錏" "鐚" "閼" "鴉" "あ" "ア")

timeout の間隔を短くする場合、my-url-retrieve-with-timeout の第3引数に数値を指定します。

少数でもオッケーです。


(my-url-retrieve-with-timeout url 'euc-jp 0.5)


もっと上手いやり方があるだろうなーとか思いながら、そんなこんなで。

更新時刻

  • 2011/11/12 23:20

2011/10/29

[] KBC Poker (Cherry Mini) 白軸

気付いたら家に Cherry 軸搭載のミニキーボード KBC Poker が4枚もあったので、1枚白軸化してみました。


概要

KBC Poker とは Cherry 軸を搭載した HHKB ライクなメカニカルキーボードです。

日本では最近、Cherry Mini という名前で売られています。

8000円から9000円ぐらいで、HHKB (の Pro)と比べればはるかに安く、おすすめできるキーボードです。

KBC Poker は、軸の違う4種類があり、茶軸版、黒軸版、青軸版、赤軸版があります。


ただ、Cherry 軸は、白軸や灰軸、緑軸等、もっと多くの種類があります。

その中で白軸は、軸だけ簡単に手に入るので、買って植えかえてみました。

# 日本では白軸と言われていますが、海外では Clear みたいです。


画像

植えかえた後の画像が以下です。2枚持っていた赤軸版の KBC Poker 1枚に犠牲になってもらいました。

f:id:khiker:20111029175857j:imagef:id:khiker:20111029180305j:image

白軸を載せたキーボードを触った事なかったので、今回入れ替えたキーボードではじめて触りました。

感触は好きです。赤軸や茶軸と比べてはるかに軸の中のバネが強いので、反発力がそれなりにあります。


赤軸や黒軸のようなリニアな感触ではなく、青軸のようなクリック音はなく、茶軸に近い感じです。

ただし、茶軸よりかなり重いです。

茶軸の感触は好きだが、軽すぎてちょっと…という人に良いかもしれません。


まとめ

軸だけを単体で買った場合、キーボードの軸を入れ替える際に、軸自体を分解してダイオード移植しなければならないのですが、KBC Poker ではダイオードが基板側についているようで、買った軸をそのまま何も考えずに植えかえられます。

軸の取り外しは、今回の場合、軸1つにつき2箇所のはんだを吸い取る必要があります。

はんだの吸い取りは、Twitter で教えてもらったのですが、はんだシュッ太郎という器具を使えばかなり楽に行えます。

かかった時間は、はんだの吸い取り、軸の入れ替え、はんだづけを全てのキーで、およそ2時間ほどでした。


白軸自体は Mouser から買いました。軸1個につきだいたい70円ぐらいでした。

7000円以上の購入で送料が無料となるので、Poker 2枚分の130個ぐらい買いました。


Cherry 軸の入れ替えはちょっと根気が必要ですが、作業自体は単純作業なので簡単です。

赤軸が好き等と好みの軸があって、手元に Cherry 軸を載せたキーボードがあるならやってみると楽しいかもです。

# 自分は手元の KINESIS コンタードキーボードを赤軸に入れ替えて使ってます。快適ですw


おまけ

KBC Poker にはキートップABS 樹脂版と PBT 樹脂版があります。

PBT 樹脂版の方が値段が高く、キートップがはるかに綺麗です。

ちなみに、Cherry Mini は ABS 樹脂版です。

f:id:khiker:20111029212758j:imagef:id:khiker:20111029212849j:image

両方の画像で上が ABS 版、下が PBT 版です。なお、上の ABS の KBC Poker は白軸に入れ替えたやつです。見た目上は分からないですねw

PBT 版は、Yahoo チャイナモールで買えます。


そんなこんなで。

追記

キートップを引き抜くだけの動画をとりました。ニコニコです。音声なしです。


D

更新時刻

  • 2011/20/19/21:45

2011/10/12

[][] Matias Dvorak キーボード買った

ハードウェアで Dvorak 配列をサポートすると謳っているキーボード「Matias Dvorak Keyboard」をある日見付けて面白そうだったので買ってみました。

画像

画像です。分解した画像も撮ろうと思ったのですが、分解したところ、

メンブレンのゴム製のキャップが散乱してそれどころではなくなってしまい、撮る気が失せてしまったのでこれだけです。

f:id:khiker:20111013002849j:imagef:id:khiker:20111013002911j:image

画像にあるように、キートップの印字は Dvorak がメインに書かれており、小さく Qwerty のも書かれています。

機能

以下の機能があります。

  • ハードウェアで Dvorak 配列
  • キートップには Dvorak、Qwerty 両方の位置での文字が書いてある(Dvorak の方がメイン)
  • USB ポートが2つ付属
  • 配列を Qwerty に切り替えるボタンが付属しており、Dvorak と Qwerty を切り替えられる。

雑感

適当に感じた事です。

  • タッチは良くない。DellPC についてくるようなキーボードの感触と大差ない感じ。
    # Matias Dvorak キーボードは、メンブレンです。
  • キーボードを繋いだ瞬間から Dvorak 配列で使える(メインが Dvorak)。

耐えられないものではありませんが、タッチは本当に良くないです。

Dvorak 配列のキーボードという点でみると、TyepMatirx や KINESISFn+F1 を押したり、キーを入れ替えたりしなければ、Dvorak にできませんが、これはキーボードを繋いだ瞬間から Dvorak です。

Dvorak 配列をメインにすえた数少いキーボードと言えると思います。

まとめ

キーボードとして正直安っぽいですが、Dvorak 配列の練習、入門用と考えれば悪くないと言えると思います。

Dvorak 配列にハードウェアでできるキーボードは特殊な形状(まあ、格子配列です)だったり、プログラマブルであったりして、触る敷居が高かったり、値段が高かったりします(プログラマブルだと2万円以上がざら)。その点、このキーボードは、普通のキー配列(格子配列ではないという意味で)であり、かつ、困ったとき Qwerty に一発で切り替えられます。また、値段も $99 ほどですので、プログラマブルキーボードほど高くはありません。そういう意味で、練習や入門用に使うキーボードとしては良いと思います。また、キーボードの機能として Dvorak 配列は実現されているので、ソフトウェアで何も設定はいらず、さくっと使えるので、布教用にも良いかもしれませんw


なお、注文は Matias の Web ページから直接行いました。Kagi ストアというところです。値段は上でも書いたように $99 ほどでした。注文から到着までは、20日ほどかかってしまったので、注文する場合は来るのが遅いのでゆっくり待つと良いです。


それでは、このキーボードが店頭でも買えるようになってもっと Dvorak や Colemak 等の Qwerty 以外の配列が一般的になれば良いなあとか思いながら、そんなこんなで。

更新時刻

  • 2011/10/13/01/50