SQLite 徹底研究 : SELECT を使って小数の割り算2018年09月01日 10時08分19秒

SELECT を使っての整数の割り算SELECT を使っての整数の割り算の余りを求めた。小数の割り算を行なうと商も小数で求められる

整数の割り算と同じ / を用いるが、数字が整数ではなく小数になる。

SELECT 小数値 % 小数値;
小数は単純に言えば、点が入っている数字。小数点の後の零を省略した形もある。
% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> SELECT 13. / 5.0;
2.6
sqlite> .exit

SQLite データベース徹底研究 - Top

十年来の車を下取りに出してアメリカで車をリース2018年09月09日 11時21分26秒

車も随分と乗り続けて古くなってきた。妻と子供達が新しい車に憧れていて、最初は中古車での購入を主に考えていたが、先日の勤労感謝の日でかなりの車が捌けてしまった様だ。

妻が調べた事によると、ニューヨーク近隣のディーラーは値段が高く、同じ車を買うにしても足を伸ばして、ニュージャージーの内陸部に入ると値段とサービスが良くなるようだ。一時間ぐらい車を走らせて、クライスラーのディーラーに入った。

子供達も大きくなったし、あれこれ乗せて移動することも多いので、今回はミニバンで。妻は既に購入対象の車を決めていたので、幾つか同じ車種を、敷地内で動かしてみたりした。

当初は購入を考えていたが、新車ばかりで値段が高い。また、税金やその他の緒費用も掛かる。あれこれ迷いはしたものの値段を下げるなどの努力もしてくれた。前回購入したときの毎月の支払額や利率を考慮し、そして、新車の長い車検や点検などの手間などを考えると、アメリカではなぜリースが多いのか、分かる気がした。毎年車検に持って行ったり、タイヤの交換も三、四年に一度だが結構高い。車検も時間が掛かるし、日本程高くはないが、それでも費用はかかる。三年後とに新車をリースで乗り換えていれば、修理や車検も掛からないし、故障とも縁が遠い。

既に新車が出回っている。去年からの在庫をリースにする事で、値段も大きく落ちた。今の十年を過ぎた車を乗り続けて、修理代にお金を使うよりも、リースで新しく乗った方が経済的だし、安全だと判断し、今の車を下取りに出して、そのままディーラーから新しい車で戻ってきた。帰りは乗りなれない車なので、神経を使った。

リースは三年が基本の様だ2018年09月10日 12時13分31秒

今回リースについて、販売員の人に聞いたのだが、リースは基本的に三年だそうだ。あと、銀行の融資の関係と期限上、三年よりも若干長い物があるらしい。今回は 39 ヵ月のリースが最安値だった。

妻は三年間の縛りが気になったらしく、二年間程度が良いと言っていたので、値段を聞いてみた。値段が随分上がり、三年契約でリースをして違約金を払った方が安いぐらいの値段。これでは、わざわざ二年にする理由も無さそうだ。

値段表を出してきて、最初の頭金と月々の支払額が掛かれていた。毎月の支払額は頭金の分だけ減る感じ。この様な関係だったら、毎月の支払いにリース期間分だけ均した方が良さそうな値段設定だったので、頭金は一番低いものを選んだ。車種を変えたり、付いているオプションが違う車を選ぶと値段も若干か割る。去年の在庫を選ぶのだ一番値段が変わった。

あと、年間走行距離もリースの契約と値段に大きく影響するようだ。特に走行距離を越えた場合の違約金がとても高い。リースの契約も、保険の更新などが必要になるので、二時間から三時間はかかる。子供を連れて行くと大変な作業になりそうだ。

FreeBSD elf の SA と lazyfpu の EN が出た2018年09月14日 10時42分18秒

セキュリティ勧告が一つと、エラッタが一つ出ている。

FreeBSD-SA-18:12.elfはプログラムを開始する時の問題。

ELF は実行形式ファイルを示すヘッダーで、どのメモリから実行を開始すれば良いなどの多々の情報が入っている。ELF ヘッダーの処理の点検に欠陥があり、本来ならば実行に移すべきではないヘッダーであっても、ファイルの実行を始めてしまい、カーネルをクラッシュさせたり、カーネルメモリを覗くことができてしまう。

対象はサポートされている全てのバージョンで回避策はない。パッチを当てる必要がある。

FreeBSD-EN-18:08.lazyfpu は FreeBSD-EN-18:07.lazyfpu の修正に問題があり、それを修正するため。 今回の修正は、11系向けだが、10。4にも準備される予定。

zfs clone と zfs send で非ミラーファイルシステムを分割2018年09月15日 16時48分38秒

ZFS のファイルシステムを分割したかったのだが、zfs 自体には分割の機能は無い。zpool だと、ミラー型のプールは分割出来るが、こちらはプール単位になってしまい、全てのファイルシステムが複製される。

今回、分割したいと思った理由はバックアップ先の zpool の容量が足りなくなったから。バックアップをとらなくても何とかなるファイルを複製するのを止めたかったのだが、ファイルシステムに混ざっていたので単純な削除では無理だからだ。

zfs clone はファイルシステムを複製する機能だ。これは snapshot を作成し、そこからの差分を元にファイルシステムを利用する機能。これを使えば、元のファイルシステムを複数に分割して使うことが出来る。しかし、元のスナップショットがバックアップを止めたいファイルを保持したままになるので今回の意図には沿わない。

そこで、今回 zfs snapshot と zfs clone で一時的にファイルシステムを複製。そこから対象外のファイルを削除した後に、zfs send と zfs receive で全く別のファイルシステムとして作ることにした。

今回の例として、BSD 関連のファイルをダウンロードしてあった download/BSD ファイルシステムを各々に分けて download/FreeBSD と download/NetBSD の zfs ファイルシステムにする。

$ zfs list -t all
NAME           USED  AVAIL  REFER  MOUNTPOINT
download       421M   411M    23K  /mnt/download
download/BSD   421M   411M   421M  /mnt/download/B
$ ls /mnt/download/ZFS/*
BSD:
FreeBSD NetBSD

FreeBSD:
FreeBSD-11.2-RELEASE-i386.vmdk.xz

NetBSD:
netbsd-8.0-i386-boot-com.iso
実験用に小さめのプールを準備して、各々に一つずつファイルを置いた。
$ zfs snapshot download/BSD@today
$ zfs clone download/BSD@today download/freebsd
$ rm -rf /mnt/download/freebsd/NetBSD
$ zfs snapshot download/freebsd@only
$ zfs send download/freebsd@only | zfs receive download/FreeBSD@only
BSD ファイルシステムから snapshot と clone で freebsd とし、そこから NetBSD を削除。zfs send と receive で元の BSD ファイルシステムとの関係を切断する。

zfs send と receive で一つ目のファイルシステムを処理し終えた状態。

$ zfs list -t all
NAME                    USED  AVAIL  REFER  MOUNTPOINT
download                640M   192M    23K  /mnt/download
download/BSD            421M   192M   421M  /mnt/download/BSD
download/freebsd         13K   192M   219M  /mnt/download/freebsd
download/freebsd@only      0      -   219M  -
download/FreeBSD        219M   192M   219M  /mnt/download/FreeBSD
download/FreeBSD@only      0      -   219M  -

NetBSD の方は BSD ファイルシステムの名前の変更した後に、FreeBSD を消す。

$ zfs destroy download/BSD@today
$ zfs rename download/BSD download/NetBSD
$ rm -rf /mnt/download/NetBSD/FreeBSD
$ zfs list -t all
NAME                    USED  AVAIL  REFER  MOUNTPOINT
download                422M   409M    23K  /mnt/download
download/FreeBSD        219M   409M   219M  /mnt/download/FreeBSD
download/FreeBSD@only    13K      -   219M  -
download/NetBSD         202M   409M   202M  /mnt/download/NetBSD
これで download/BSD を download/FreeBSD と download/NetBSD に分割できた。

もっと手間の掛かるファイルの選別が必要なら clone と promote を用いて、もっと安全に操作することも出来る。NetBSD のファイルの選別も独立したファイルシステム上で行なって、最終確認が終った後に。古い BSD ファイルシステムを削除する手順にすれば、間違ってファイルを消してもやり直しが効く。

zfs の 簡単な分割は zfs create と mv2018年09月17日 13時29分10秒

先日に zfs を分割するのに zfs snapshot と zfs clone を使ったが、単純な方法であれば、zfs create で新しいファイルシステムを作り、mv ファイルを動かしても大丈夫な事に気がついた。

mv で動かしてしまうと、間違えた時に mv で戻すと、スナップショットとは別の複製が出来るのでディスクが追加で消費される。しかし、最終的には古いスナップショットは全部消すのが目的なので、mv の方が楽かも知れない。

amd64 の FreeBSD 12.x の kernel は ifunc が必要2018年09月18日 11時39分15秒

FreeBSD 12.0-RELEASE も近付いてきている。ALPHA-6 に入り、既にテストを行なっている人、そこそろ試してみようかという人などがいるとは思う。11 系からの更新は幾つかの注意点がある。

まずは、ifunc。11 系から上げる人は、buildkernel 時に、CURRENT を追っていて、11 系のシステムに上書きインストールする人は installkernel 時に見掛けると思う。私は、NFS mount 越しの installkernel 時に出てきた。

$ uname -r
11.2-RELEASE-p2
$ mount -t nfs amd64-current:/usr/src /usr/src
$ mount -t nfs amd64-current:/usr/obj /usr/obj
$ make installkernel -C /usr/src
make[2]: "/usr/src/sys/conf/kern.pre.mk" line 126: amd64 kernel requires linker ifunc support
さて /usr/src/sys/conf/kern.pre.mk を覗いてみると、
.if (${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386") && \
    defined(LINKER_FEATURES) && ${LINKER_FEATURES:Mifunc} == ""
.error amd64/i386 kernel requires linker ifunc support
.endif
.if ${MACHINE_CPUARCH} == "amd64"
LDFLAGS+=       -Wl,-z max-page-size=2097152 -Wl,-z common-page-size=4096 -Wl,-z -Wl,ifunc-noplt
.endif
の部分がこれに当たる。

コードを見るより、/usr/src/UPDATING を開く。

20180510:
        The amd64 kernel now requires a ld that supports ifunc to produce a
        working kernel, either lld or a newer binutils. lld is built by default
        on amd64, and the 'buildkernel' target uses it automatically. However,
        it is not the default linker, so building the kernel the traditional
        way requires LD=ld.lld on the command line (or LD=/usr/local/bin/ld for
        binutils port/package). lld will soon be default, and this requirement
        will go away.
該当部分を発見
$ make installkernel LD=ld.lld -C /usr/src
今度は問題なく installkernel が進んだ。

一億人の英文法の本がいい2018年09月22日 13時20分34秒

東進ブックスから出ている「一億人の英文法」が話す英語を元に英文法が解説されていて読みやすく分かりやすい。ISBN978-4-89085-527-8。

話しながら説明を追加していく英語の特徴が良く書かれていて、例文もそれぞれの特徴をとらえている。基本的な英文法を網羅しつつ、説明しているし、母国語として感じる微妙な違いなどの細かい例なども出ていて分かりやすい。特に、the の使い方や、時制の引っ張られ方などは良く書かれている。

個人的に再確認出来て良かったのは。「ピリオドとカンマは引用符内。コロン、セミコロンは外。! と ? は引用発言の場合は中。」

FreeBSD の システムコールと IPv6 の EN が二つずつ2018年09月28日 11時53分59秒

FreeBSD-EN-18:09.ip は SA-18:10.ip の修正が未完全だったために引き起こされた問題。断片化された IPv6 のパケットが正しく復元されずに破棄されてしまう問題。sysctl net.inet6.ip6.maxfrags=0 で回避することは出来る。対象は FreeBSD 11 系のみ。

FreeBSD-EN-18:10.syscall は freebsd4_getfsstat システムコール でメモリの割り当てに失敗したときに、未割当のメモリを free してしまう問題。FreeBSD 4.x 時のバイナリを実行したときに露呈するバグなので、よほど古いバイナリを使い回していない限りは影響は無いだろう。対象は FreeBSD 11 系のみ。

FreeBSD-EN-18:11.listen は IPv6 の listen システムの実装に問題があり、各種変数を正しく戻さないために、かーねるをクラッシュさせる可能性がある。回避策は無い。

FreeBSD-EN-18:12.mem は getcontext と swapcontext のシステムコールが、未完全なメモリの初期化の為に、以前に使われた値がユーザ空間に洩れる問題。対象は FreeBSD 10 系と 11 系の両方。回避策は無い。