fd seekable - ファイル内を移動する方法2012年01月21日 11時49分40秒

FreeBSD のメーリングリストから。「easy way to determine if a stream or fd is seekable」で初めまるスレッドで結構長い。libarchive での経験も含めて言及されていたので、UNIX 全般に当てはめられる手法みたいだ。

結論は以下の通り。


1) if the file argument is a fifo, pipe or socket   --  goto 4)
2) if the file argument is a tape drive		    --  goto 4)
3) for all other cases try fseeko(), if that fails  --  goto 4)

4) use getchar()

ファイルが、fifo、pipe、socket なら即 getchar()。ファイルがテープドライブなら同じく getchar()。それ以外なら、fseeko() を試して、失敗したら getchar()。

小学生の勉強の仕方2011年10月16日 14時49分48秒

何処かのコラムに、「算数は解くことが勉強。社会は覚えることが勉強。国語は読むことが勉強。」とあった。確かに、簡潔にまとめるとそうなると思う。

小学生の時は分らなかったが、勉強にも種類があるんだよな。その種類によって得手不得手があった。小学生の時にそれが分っていれば、苦手科目も克服できたかも知れないのにと、戯れ言をいってみる。理科は、覚えて解くことの複合科目かな。

幼児の教育方針は「食べて、寝て、遊ぶ」を基本にすすめている。

C/C++ ビット操作2009年11月20日 12時28分16秒

整数型とビット操作に出力付きで細かくまとめられている。

and / ビット論理積
&
or / ビット論理和
|
xor / ビット排他的論理和
^
not / ビット反転
~
左シフト
<<
右シフト
>>

C++ FAQ ページ2009年11月17日 15時38分43秒

C++ FAQ Lite のページに C++ の FAQ がある。

こまごまとした質問が羅列されていて、役に経つ。逆に質問数も多く、細かいところにまで突っ込んでいるので、簡単に流して読むのには向かない。

Calculator2009年11月16日 11時20分55秒

ブラウザから使える算術計算機はこれが一番使いやすいと思う。

Windows をベースとして使っていると、十六進が使えるまともな計算機が入っていない事も多い。これが、余計なインストールなども必要無くて、好んで使っている。

clang/llvm can compile booting FreeBSD kernel2009年02月26日 07時26分24秒

[ANNOUNCE]: clang/llvm can compile booting FreeBSD kernel on i386/amd64 と FreeBSD-current に投稿された。FreeBSD のカーネルが gcc 以外のコンパイラで動作するとの報告だ。冒頭部を訳す。

Clang is a new frontend for C-like languages for LLVM. It's modern, BSD licensed compiler that produces roughly the same code quality or better as GCC. It's still in its development phase but quite mature. It includes static analyzer as well.
clang は C 言語に似た言語を扱える LLVM のフロントエンドだ。gcc と同等上のコードを生成できる、新生のコンパイラだ。まだ、開発の途中だが随分と安定してきた。静的解析のツールも付属している。
And yes, it can compile FreeBSD kernel that actually boots and works. Not as stable as GCC yet but the Clang team is working on that. The userland needs some more work but a lot works already.
今回 FreeBSD のカーネルを、これで生成し起動するのに成功した。まだ、gcc ほどは安定していないが、 clang の開発人はそれに向けて修正をしている。ユーザランド側は、まだまだ作業が必要だ。

面白そうだが 8-CURRENT では動かない USB 機器があるので、その報告の方を優先しなければ。

FreeBSD の比較的新しい VM の解説2009年02月23日 00時15分21秒

少し、FreeBSD の VM 関連の記事を探してみた。Design elements of the FreeBSD VM system by Matthew Dillon あたりが、比較的新しく現状を記述しているみたいだった。

このページは、何故だかファイル名が -text で終わっている。実質的には HTML で書かれていた。しかし、タグに若干問題があるらしく HTML として表示するには、最初の数行を修正する必要があった。

以下に、冒頭部分を要約した。本文には、VM オブジェクトの扱いから、各種最適化方法が更に綴られている。

FreeBSD 3.x の頃のスワップは事前に割り当ててあった配列を元にした実装だった。そのため、カーネルのメモリが断片化しやすく、また線形検索だった為、速くはなかった。また、カーネルメモリの割り当てもスワップ時に起きていたので、デッドロックの可能性もあった。

FreeBSD 4.x の時にスワップシステムを完全に書き換えた。線形配列ではなく、ハッシュテーブルを元にした実装に変えた。radix tree を用いたビットマップにて、スワップは管理されている。これにより、O(1) でスワップの割当と開放が出来るようになった。 また、radix tree は事前にメモリを割り当ててあり、メモリが少なくなった時に、スワップを行なう為にメモリを割り当てる事は無い。radix tree の断片化を防ぐために、大きな連続した塊としてスワップが機能するようになっている。

FreeBSD のスワップ機構は、メモリが圧迫している時に最も効率が良くなるようにデザインされている。スワップが一度起こると、ディスクアクセスが発生する。余計なディスクアクセスを起こすくらいなら、それを避けるために多めの計算量で必要であっても、ディスクとデータをやり取りを避けられるのなら、よっぽど短時間で済ませる事が出来る。そのため、FreeBSD のメモリ管理システムは、他の OS と比べてもメモリ圧迫時に、優れた性能を発揮する。

Call for potential ports maintainers2009年02月13日 15時34分26秒

Call for potential ports maintainers と freebsd-ports にメールが投げられた。以下全文訳。

This topic came up in IRC, and I was encouraged to go out, and find some new maintainers.
IRC で新しい担当者を探すことを勧められた。
At any given time, approximately 20 - 25% of all ports are unmaintained. Not all unmaintained ports need updating, but some do. That is where you folks come in.
大体、20% から 25% の ports に担当者がいない。その中には更新の必要なものが幾つかある。そこで、君達に頼みたい。
There are a bunch of you out there who are subscribers to this list (and other FreeBSD related lists too, I am sure), you have FreeBSD installed and likely have quite an array of ports installed on this system of yours. You are subscribed as a means of keeping up with the world of FreeBSD.
いまこのメッセージを呼んでいる人達は、たくさん入れられている各々の ports を最新の FreeBSD 環境を保つために、この freebsd-ports を購読している方々だと思う。
But you have been holding back, thinking "I really would like to do something to contribute to the success of FreeBSD, but I am not sure what."
その中には、何か貢献したいが何が出来るか分からずに怯んでいる方々もいると思う。
How do I know this? I was one, a silent observer on the mailing lists, and in on IRC. Then one day, I answered a similar plea, http://lists.freebsd.org/pipermail/freebsd-announce/2006-May/001065.html.
実を言うと、私もその一人だった。ある日、同じように援助を求められた時に参加したのが切っ掛けだった。
I have summarised some details on the wiki on Adopting Ports, http://wiki.freebsd.org/PortsTasks#head-f018f566bce2ff96ec13fabd536d7cc6dc6f4275.
ここから、今現在担当者のいない一覧を見ることが出来る。
The gauntlet has been thrown down, who among you is prepared to pick it up?
誰か挑戦してくれる人達はいませんか。

FreeBSD ports status by portname for maintainer ports@FreeBSD.org が現在担当者の付いていない一覧になっている。japanese 関連も結構な数が羅列されていて、本家の人達では手が出せないと思う。興味があるのなら、これを機に挑戦してみては如何だろうか。

FreeBSD をクラッシュできるコマンド2009年01月22日 16時53分04秒

今まで気にしなかったので、存在に気が付かなかった。/dev/mem と /dev/kmem は Version 6 AT&T UNIX で登場した古い物。man mem で少し説明が出てきた。

これを、プログラムからファイルの様にメモリにアクセスする事が出来るそうだ。もちろん root 権限は必須になっている。

さて、これを dd で出力すると、確実にシステムを落とすらしい。dd if=/dev/mem が実際にコマンド。一部のハードウェアには読み出すだけで、問題が起こるようなレジスタもあるらしい。それがおそらく問題なのではとの事だ。

律義にも、幾つかのシステムで試してくれた人がいた。4.11、7.0、7.1-BETA でしっかりと再現性があったそうだ。

次回

CPU を無効化する2008年12月22日 10時05分07秒

2007 年の 12 月頃のメールだと思うが、面白い物が出てきた。システムの一部の CPU を無効にする方法。恐らく、7.0 が出る少し前だったような気がする。


Check dmesg for the APIC numbers corresponding to the CPUs you want to 
disable and add the corresponding entries to /boot/loader.conf, e.g.:

hint.lapic.1.disable="1"
hint.lapic.3.disable="1"
hint.lapic.5.disable="1"
hint.lapic.7.disable="1"

dmesg で、CPU の番号を確かめ、loader.conf で無効に出来るそうだ。