サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
d.akinori.org
年の瀬、公園で糞寒い中でも元気な子供達を遊ばせていると、家で掃除をしてくれていた妻からビデオ通話が入った。曰く、サーバのケーブルが抜けちゃった! 映像を見ると、抜けたのは外付けHD箱(まだこいつが動いている!)のeSATAケーブルのようだ。これ、抜けやすいんだよね…。しかたない。気にしないで、と返事して外遊びを続けた。 しばらくして帰宅して、ケーブルを再接続してからサーバの様子を見ると、メインのpoolは外付け箱のディスク群に頼らず本体だけで動くのでおいておくとして、メディアファイル置き場にしていたpoolがUNAVAIL状態に落ちていた。ディスクは繋がっているのにおかしいな。と、dmesgを見るとこんなもので埋め尽くされていた。 Dec 30 14:22:56 daemon kernel: (aprobe0:siisch1:0:15:0): SOFT_RESET. ACB: 00 00
一般的に、Mac OS Xで「Wi-Fi接続をトリガーに(SSIDに応じて)何かを実行する」というのは容易に書ける。今回は、au Wi-Fiが提供するアクセスポイントに接続した際にすかさずau Wi-Fi接続ツールを起動するという機構を実現してみた。 まずは、SSIDを判定してアプリを起動するスクリプトを書く。もちろん、shが苦手なら他の言語でも良い。 #!/bin/sh ssid="$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '$1=="SSID:"{print $2}')" case "$ssid" in au_Wi-Fi|Wi2_club|Wi2premium_club|UQ_Wi-Fi|Wi2|Wi2premium|wifi_
「賢いcd」”z“の俺版fork「knu-z」v2.0をリリースしました(英語版記事)。 オリジナル版をいじっているうちに修正箇所がたくさん見つかり、直しすぎて個別にpull requestすることが困難になり、途中で作者のrupaさんにはforkの存在とそこそこ詳細な変更点リストをメールしたんだけど時すでに遅し。ほかにもforkがたくさんありすぎてうんざりだったかも。とはいえbashの補完は壊れているしzshの補完も古くて(compsys)いまいちだし、というわけでフィードバックについては気にせずにコアのアルゴリズム部以外を大幅に書き直しました。 ついでにcdの補完候補にzのスタック(ディレクトリ移動履歴に基づいてスコアリングされたディレクトリリスト)を含めるようにしたので、「zが使えるホストでだけzを使う」とか、「通常の移動はcd1、よく行くところへの移動はz」なんていう悲しい使い分け
git mergetoolに使えるツールとして、デフォルトで"emerge"というのが用意されており、Emacs使いはこれを使えばEmergeでマージが行えるわけだが、難点もある。ひとつは、新たなEmacsインスタンスを起動してしまうということだ。起動に無駄な時間が掛かるし、マージにあたって既存のセッションで開いているファイルをその場で参照できないのは不便だろう。もっとも、これはemacsclientを使うようにして、Emergeの呼び出し方を少し直せば済む。もうひとつは、EmergeではなくよりモダンなEdiffを使いたいということだが、これは思ったほど簡単ではないのでわざわざこうして記事を書くことになった。 というのも、Emergeにはemerge-files-with-ancestor-commandという便利なものがあり、「マージが終わったらマージ結果を保存して即終了」ということが
Emacsのcua-modeを使っていない、あるいはそもそも知らない人が結構いるようなので紹介しておく。cua-modeは、Emacsの範囲選択にまつわるUIを改善し、Windows、Mac、GTK+/Qtなどにおけるテキスト編集操作との互換性も高めてくれるグローバルマイナーモードで、以下のような機能を提供する。 Shift+矢印による範囲選択 範囲選択状態でBS/DELを押すと選択範囲をまるごと消去 範囲選択状態でキー入力やペーストを行うと選択範囲まるごと上書きされる 視覚化された矩形範囲選択モード(C-w, M-w, C-yなど通常の範囲選択と同様の操作性) 矩形範囲選択モードでの複数行同時操作(文字入力、文字削除、連番挿入等) Windows互換のCtrl+Z,X,C,V(※) Emacs 22.1.1から標準添付されているので、試したければ何も設定せずにM-x cua-modeで使
Gitを使っていると、今のcommitなし!とgit reset --soft HEAD^したり、abc1234以降のコミットをパッチ化したい!とgit format-patch abc1234^したくなることがよくあるわけだが、この^はzshの拡張グロブ有効化時(setopt extended_glob)はメタ文字として働くため、そのまま入力すると標記のエラーで怒られてしまう。 いちいちエスケープするのは面倒だと思うのだが、ぐぐってみても正面から対処している人があまりいないようなので紹介しておくと、拙作のgit-escape-magicを使えば良い。リンク先のドキュメントの通り、ふつうに入力するだけで、いい感じに文脈を見て自動エスケープしてくれる。 このように、zle(zshラインエディタ)をいじると結構おもしろいことができる。 たとえば、3つ上のディレクトリを参照するために../../
SubversionにあってGitに足りないものはまだいろいろあるが、頻繁にイライラするのがsvn info相当の欠如。git config -lは読みづらいし情報が足りない。ちょくちょくp ../../.git/config(pは$PAGERのalias)とかやりながら悶々としているのも嫌になってgit-infoを書いた。見ての通りコードはGitHubに置いたからいいと思ったら使ったりいじったりしてみて。インストールは一般ユーザで簡単。出力はこんな感じです。 ~/src/github/git-info% git info Repository Path: /home/knu/src/github/git-info/.git Path: /home/knu/src/github/git-info Remote Repositories: origin git@github.com:knu/
XやWindowsやCocoa上のEmacsでは、Control+ReturnだろうがControl+,だろうがCtrl+Shift+Spaceだろうが、好きな機能を割り当てることができる。これらのGUI環境ではアプリケーションが検出できる修飾キーの組合せに制約がほとんどないためだ。 ところが、ターミナル(エミュレータ)上では原則として一つのキー入力は一つのASCIIコードとしてアプリケーションに渡されるため、上記のように対応するASCIIコードのないキーの組合せはEmacsなどでそれとして認識することができない。Meta+XをEscape Xの二ストロークに置換する仕掛けがせいぜいだ。 …と思いきや、実はEmacsにはいわゆるスティッキー修飾キーに相当するevent-apply-*-modifierというギミック的関数が用意されており、たとえばC-x @ c(event-apply-co
「O/R マッピングの是非」に触発を受ける。PerlではClass:DBIやDBIx::Class, RubyではActiveRecordなど、今やO/Rマッパー全盛時代だ。確かに、開発効率や生産性について言えば、O/Rマッパーを使うとだいぶ楽な気がする。getter/setterを書かなくていいことに始まり、templateやvalidatorと強力に連携してあっという間にレコードのCRUDインターフェースを実現してしまう。 一方で、チューニングの余地がほとんどない、安易なテーブル設計に流れがち、トラブル時のデバッグが面倒、などの点がデメリットとして挙げられる。 DB設計の肝は、ディスクアクセスをいかに減らすかにある。シーク効率のために固定長レコードを指向し、テーブルを正規化して分離し、個々のテーブルサイズは抑え、必要なものだけjoinする。これが従来からの常識だ。 ところが、さまざまな
FreeBSDにおけるZFSのチューニング資料として、まず見るべきはZFS Tuning Guideだと思うが、これによれば、ことFreeBSD 8/amd64に関しては特に設定不要であるように読める。 しかし、ZFSは高負荷になるとkmemを激しい勢いで消費するので、特に多機能サーバとして使っている場合は、適切な設定でkmemの消費を抑える必要がある。通常の利用では問題なくとも、bonnie++などでストレスをかけると簡単に落ちてしまう。 8GBのメモリを積んだ手元のサーバは、以下のような設定(/boot/loader.conf)にしたところ、相当の負荷にも耐えられるようになった。 vm.kmem_size="1536M" vm.kmem_size_max="1536M" vfs.zfs.arc_min="128M" vfs.zfs.arc_max="512M"
自宅のメインサーバとして、HP ML115 G5をFreeBSD 8/amd64で運用している。フルZFS構成で、大事なデータはraidz2プール内に置き、バックアップはsnapshotで取るようにして数ヶ月。snapshot作成に時間が掛かり、パーティショニングの柔軟性も低いUFS2に比べとても管理が楽になった。 まだHDD故障を経験していないが、(zfs send & receiveで別ディスクにバックアップを取った上で)わざと1台のデータを破壊してデグレード状態で動作すること、さらにもう1台壊してもちゃんと動くことまでは検証できている。 先日、netatalkでTime Machineサーバに仕立て上げ、何台かあるMacのバックアップを担わせるようにしたところ、残容量が非常に心許なくなった。さらに、おんぼろHDD 2台を活用して作ったNASの寿命もそろそろ心配になってきたのでファイル
WEB+DB PRESS Vol.46で取り上げたGNU diff(1)のラッパー、「di」をGitHubに置いた。GNU diffには多彩なオプションが用意されているが、POSIXなどの規格の縛りもありデフォルト設定が日常利用には不便なものになっている。いちいちdiff -Nrpu dir1 dir2なんて面倒くさい。以下の特長を持つラッパーdiで楽をしよう。 -U3 -N -p -dがデフォルト。 出力が色付き。ページャが起動される。(Gitのまね) バックアップファイルやオブジェクトファイル、.git, .hg, .svn, CVSなどのディレクトリを無視する。 RCS/CVSキーワードタグの違いを無視する。 ディレクトリを与えれば自動で再帰比較。 上記を含むデフォルトのオプション設定は環境変数で変更可能。 GNU diffがサポートしないオプションの組み合わせもサポート。 「ali
Emacsでカーソル移動、削除、マクロ実行などを繰り返したいときに手軽なのがC-u。C-uの後に数字を入力すればその回数になるが、単にC-uだと4回、C-u C-uと2度押すと16回、3度押すと64回、という具合に、n度押すと4n回繰り返される。数字キーに手を伸ばさなくていいのですばやく操作できる。 しかし。4の次が16って飛びすぎじゃね?4回というのは「目の届く」「小さい範囲の」繰り返し回数として適度だが、16回となるといきなり「だいたいこのあたりぜんぶ」「もっとたくさん」といった鷹揚なニュアンスである。昔から「いち、にい、たくさん」と言うではないか。ナベアツもイチ、ニ、サン!で初めてアホになる。 というわけで、4, 8, 16, 64, 256, …のように8を挟むようにしてみた。 (defadvice universal-argument-more (before stop-by-e
ヘッドホンにおける物理的な弱点は、何と言ってもコードにある。柔らかいコードは絡みがちで、硬いコードは取り回しづらい。いずれにしても長年使えば被覆のひびや断線からは逃れ難い。 Shure E4cを買って以来同社製品を愛用しているのだが、その耳の後ろにかける方式がコードに掛ける負担は半端ない。抜けたり落ちたりしなくて快適な反面、ぜんまいみたいな癖がついてしまって、二年くらいするとだいたいひびが入ってしまう。保証期間内なら修理(いずれお世話になるので海外からの輸入はお勧めできない)に出せば済むが、いずれ期間が切れて壊れる日はやってくる。俺にもやってきた! 左の写真のように愛用のSE530に入ってしまったひびの補修に挑む。まず、メンディングテープやセロテープは見た目がひどいだけでなく、柔軟性がないのでカーブに沿わず耳に当たると痛い。ビニールテープは良さそうに思えるが、十分に吸着させるには何周か巻か
LeopardのTerminal.appをしばらく使っているうちに、こいつは使えない代物だと分かった。 まず、「○」とか「△」とかの記号を倍幅文字と認識してくれない。これは再描画しても直らないのでTigerのTerminal.appよりひどい。もしかすると、日本語フォントの記号グリフに沿った文字幅情報を含むエンコーディング定義を追加することできれいに対処できるのかもしれないが、その方法は未調査。ていうか、こんなのデベロッパープレビュー段階で気づかなかったんだろうか。Appleには日本人ハッカーはいないの? 二番目に、CommandキーをMetaキーとして使えないのが不便。TigerではAPE+Cmd2Optでなんとかなったが、今のところLeopardには対応していない。ていうかCmd2Optの配布物ってWeb Archive等を漁らないと手に入らなかった気がする。なんにせよ、Emacs使い
Index: NSStringITerm.m =================================================================== RCS file: /cvsroot/iterm/iTerm/NSStringITerm.m,v retrieving revision 1.8 diff -u -r1.8 NSStringITerm.m --- NSStringITerm.m 13 Nov 2006 08:01:04 -0000 1.8 +++ NSStringITerm.m 6 Nov 2007 09:24:28 -0000 @@ -294,9 +294,92 @@ return [NSString stringWithFormat:@"%d", num]; } ++ (BOOL)isCJKEncoding:(NSStringEncodin
少し反応をいただいたので追記。 木村さんの「‘=>’の右辺にあるからリストコンテキストになるというのはちょっと違うような気がします。」について。実装の話ではなくあるべき仕様の話をしていま… 続きを読む »
夜も更け、無性に打ちたい気分になったので新宿へ遠征。風速0.5の店で朝まで遊んだ。ブランクを経て再開後は、再構築したセオリーに沿って打つ中でなかなかブレイクスルーがなく、二着三着ばかりのゲーム代負けが続いていた。 し… 続きを読む »
例のワインが昨日届いたので、いつもの二人を誘って家ごはん。今日のテーマは「ワインに合う鍋」。 まずはさっぱりとしたミュスカデで乾杯。非常に澄んだ味わいだ。十分に冷えているものだから、胃袋にキュッと来て、本能的な食欲が… 続きを読む »
FreeBSD 4.11→6.2の移行作業ではまった点をいくつか書いておく。 Packageのkrb5が入っていると、システムのkrb5との混在が原因でビルドがこけるので消す。 textproc/libxml2でWIT… 続きを読む »
FreeBSDサーバの4.11から6.2への更新作業もようやく一段落した。portのkrb5をデインストールしてsubversionやGSSAPI関連バイナリを入れ直したり、Apache 2.2をworkerで動かすた… 続きを読む »
先日のapr_memcacheの問題だが、修正を入れてしばらく動かしたが目立った問題は出ていない。サービスに本番投入してもいけているので、パッチを公開することにする。 apr_memcache 0.7.0リリースには… 続きを読む »
日曜深夜の不摂生が祟り、徹夜で死んだ。午後に入ると眠気でたびたび落ちるし、グタグタで迷惑を掛けてしまう。メンテナンスと残務を終えて帰路に就いた。外で食べる気が起きなかったのでまっすぐ帰り、至福のバスタイム。 小腹が減… 続きを読む »
zshのglobal aliasは、意外と使いでがある。ほかの人がどう使っているのか知らないが、僕は主に独自コマンドラインオプションを定義するために使っている。 たとえば、「alias -g — –mydb3=’… 続きを読む »
make_p () { local t s t="$1"; shift [ -f $t ] || return 0 for s; do [ $s -nt $t ] && return 0 done return 1 } cache_hosts_file="$ZDOTDIR/.cache_hosts" known_hosts_file="$HOME/.ssh/known_hosts" print_cache_hosts () { if [ -f $known_hosts_file ]; then awk '{ if (split($1, a, ",") > 1) for (i in a) { if (a[i] ~ /^[a-z]/) print a[i] } else print $1 }' $known_hosts_file fi } update_cache_hosts () { pri
mixiのCAMEL ON THE ROADコミュニティより、Camelの映像。すごいな。 ほかにも「Camel Latimer」で検索するといろいろ出てくるよ!
ssh-agent(1)の機構はあまりに素朴過ぎて使いづらいので、実用と現実逃避を兼ねてssh-agent-proxy(1)なるものを作った。例によってRubyで書いたプロトタイプだけど、一応動くので公開。 こいつは… 続きを読む »
最初、vCardの処理はPerlを使おうと思っていたんだけど、vCardの出力用のモジュールがわからなかったのでRubyのvpimを使った。網羅的に実装されているので機能的には十分だったが、APIがぎこちない。作者はR… 続きを読む »
去年の年末くらいに、朝遅いのに出がけにバタバタするのはなんでだろう、と考えたら、明らかに髭剃りの手間だった。ずーっとジェルを塗ってジレットのT字剃刀(多枚刃)で剃る、が日課というか出かける前の儀式だったんだけど、これ、5… 続きを読む »
次のページ
このページを最初にブックマークしてみませんか?
『工夫と趣向と分別と。 - おもしろく生きたいね』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く