コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2025年12月22日 >>> 2025年12月9日
link もっと後

2025年12月22日

ゲームを買ったら遊びましょう3

目次: ゲーム

前回の振り返り(2024年10月20日の日記参照)から1年経ちました。所持しているゲームのリストはほぼ変わりなく、増えたのは数作品です。最近はDyson Sphere Programをまた遊んでいます、戦闘要素が入ってゲームシステムがちょっと変わりました。

Upload Labs
設備を増強してデータアップロードの仕組みを作るとお金的なものがたまるので、さらに設備を増強してさらに速くしていくゲームです。ゲームシステムとしてはクッキークリッカーっぽいですね。
首都高バトル
元気(会社名)の往年の名作、20年ぶりくらいに続編が発売されました。首都高を舞台にしたレースゲームです。アーリーアクセス版は結構やってたんですけど、飽きてしまって本リリース版はほとんど遊んでいません。
農家はReplace()されました
Python風のプログラムを書いてドローンを動かし、効率的に畑を耕して作物を作るゲームです。面白いっちゃ面白いんですけど、なんだかプログラム書いてても空しい感じがするのはなんでだろう……。

振り返り結果

クリアした(実績90〜100%、シナリオコンプなど)。

  • 332.9: Steam: Cities: Skylines
  • 200.0: Steam: Transport Fever 2
  • 192.8: Steam: STATIONflow
  • 68.5: Steam: Mad Tower Tycoon
  • 59.2: Steam: shapez.io
  • 35.0: Switch: DUNGEON ENCOUNTERS
  • 29.5: Steam: Upload Labs
  • 23.3: Steam: ぶきあつめ (The World is Your Wepon)
  • 10.0: Switch: Return of the Obra Dinn
  • 1.0: Switch: ごめんね、NPCです
  • 1.0: Steam: 8番出口

たくさん遊んだ(クリア条件がないor困難すぎて挑む気なし)。

  • 493.8: Steam: Dyson Sphere Program
  • 170.0: Steam: the Hunter: Call of the Wild
  • 102.3: Steam: 首都高バトル
  • 95.0: Switch: スプラトゥーン2

未クリア(実績、シナリオクリア率が50%以下)。

  • 71.5: Steam: Surviving Mars
  • 63.9: Steam: Tropico 6
  • 55.0: Switch: Fire Emblem風花雪月
  • 50.4: Steam: Wizardry外伝 五つの試練
  • 39.4: Steam: Timberborn
  • 32.8: Steam: Cities: Skylines II
  • 28.9: Steam: Turing Complete
  • 21.5: Epic: DAEMON X MACHINA
  • 20.0: Switch: ザ・コロニスト
  • 15.0: Switch: スイカゲーム
  • 15.0: Switch: マリオカート8デラックス
  • 15.0: Switch: A列車で行こう はじまる観光計画
  • 11.0: Switch: 農家はReplace()されました
  • 9.0: Steam: Freeways

ほぼ遊んでいない。

  • 12.3: Steam: Asset Corsa
  • 9.0: Steam: Captain of Industry
  • 8.0: Switch: スプラトゥーン3
  • 4.8: Steam: OpenTTD
  • 4.0: Steam: Battlefield V
  • 4.0: Steam: Kerbal Space Program
  • 4.0: Steam: Schedule I
  • 3.0: Switch: 熱血硬派くにおくん外伝 River City Girls 2
  • 1.0: Steam: Plate Up!
編集者:すずき(2025/12/25 00:40)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年12月19日

preadとlseek + readは何が違う?

目次: Linux

前回(2025年12月18日の日記参照)はpreadとlseek + readの違いを見るため、テストプログラムを作って動作確認しました。今回はLinuxカーネルの実装の違いを見ます。

preadの実装

カーネルバージョンは6.9です。最近のバージョンであればさほど実装は変わらないと思います。

Linuxのpread実装

// linux/fs/read_write.c

SYSCALL_DEFINE4(pread64, unsigned int, fd, char __user *, buf,
			size_t, count, loff_t, pos)
{
	return ksys_pread64(fd, buf, count, pos);
}

ssize_t ksys_pread64(unsigned int fd, char __user *buf, size_t count,
		     loff_t pos)
{
	if (pos < 0)
		return -EINVAL;

	CLASS(fd, f)(fd);
	if (fd_empty(f))
		return -EBADF;

	if (fd_file(f)->f_mode & FMODE_PREAD)
		return vfs_read(fd_file(f), buf, count, &pos);

	return -ESPIPE;
}

まずはpreadの実装です。pread64システムコールはksys_pread64()を呼び出します。ksys_pread64()はvfs_read()にバッファ、サイズ、オフセット(= ファイル位置)のパラメータをそのまま渡します。ファイルディスクリプタが一切登場しません。シンプルですね。vfs_read()の先は基本的に各ドライバのread実装になります。

lseekとreadの実装

次はlseek+readの実装です。lseekから見ましょう。

lseekの実装

// linux/fs/read_write.c

SYSCALL_DEFINE3(lseek, unsigned int, fd, off_t, offset, unsigned int, whence)
{
	return ksys_lseek(fd, offset, whence);
}

static off_t ksys_lseek(unsigned int fd, off_t offset, unsigned int whence)
{
	off_t retval;
	CLASS(fd_pos, f)(fd);
	if (fd_empty(f))
		return -EBADF;

	retval = -EINVAL;
	if (whence <= SEEK_MAX) {
		loff_t res = vfs_llseek(fd_file(f), offset, whence);
		retval = res;
		if (res != (loff_t)retval)
			retval = -EOVERFLOW;	/* LFS: should only happen on 32 bit platforms */
	}
	return retval;
}

loff_t default_llseek(struct file *file, loff_t offset, int whence)
{
	struct inode *inode = file_inode(file);
	loff_t retval;

	retval = inode_lock_killable(inode);
	if (retval)
		return retval;
	switch (whence) {
		case SEEK_END:
			offset += i_size_read(inode);
			break;
		case SEEK_CUR:
			if (offset == 0) {
				retval = file->f_pos;
				goto out;
			}
			offset += file->f_pos;
			break;
		case SEEK_DATA:
			/*
			 * In the generic case the entire file is data, so as
			 * long as offset isn't at the end of the file then the
			 * offset is data.
			 */
			if (offset >= inode->i_size) {
				retval = -ENXIO;
				goto out;
			}
			break;
		case SEEK_HOLE:
			/*
			 * There is a virtual hole at the end of the file, so
			 * as long as offset isn't i_size or larger, return
			 * i_size.
			 */
			if (offset >= inode->i_size) {
				retval = -ENXIO;
				goto out;
			}
			offset = inode->i_size;
			break;
	}
	retval = -EINVAL;
	if (offset >= 0 || unsigned_offsets(file)) {
		if (offset != file->f_pos)
			file->f_pos = offset;
		retval = offset;
	}
out:
	inode_unlock(inode);
	return retval;
}
EXPORT_SYMBOL(default_llseek);

先ほど同様にlseekシステムコールはksys_lseek()を呼び、ksys_lseek()はvfs_llseek()を呼ぶだけです。vfs_llseek()の先は各ドライバの実装になります。特にこだわりがない場合は通常のlseekの振る舞いをするdefault_llseek()を使うことが多いので、default_llseek()の実装を載せておきました。

素直にwhenceの値に従ってoffsetを計算(例: SEEK_SETの場合はoffsetの値をそのまま使う、SEEK_CURの場合は現在のfile->f_posを足す)し、ファイルディスクリプタのメンバ(file->f_pos)に設定しています。

readの実装

SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
{
	return ksys_read(fd, buf, count);
}

ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)
{
	CLASS(fd_pos, f)(fd);
	ssize_t ret = -EBADF;

	if (!fd_empty(f)) {
		loff_t pos, *ppos = file_ppos(fd_file(f));
		if (ppos) {
			pos = *ppos;
			ppos = &pos;
		}
		ret = vfs_read(fd_file(f), buf, count, ppos);
		if (ret >= 0 && ppos)
			fd_file(f)->f_pos = pos;
	}
	return ret;
}

最後にreadの実装です。readシステムコールはksys_read()を呼び出しており、ksys_read()はファイルディスクリプタからオフセットを取得(fd_file(f)->f_pos)して、vfs_read()にバッファ、サイズ、オフセットのパラメータを渡します。

両者の違い

オフセットをどこから取ってくるかが違います。

  • lseek: オフセットをファイルディスクリプタに設定
  • read: ファイルディスクリプタに設定されたオフセットをreadの実装に渡す
  • pread: システムコールに渡されたオフセットをreadの実装に渡す

もしlseekが実装されていないファイルの場合、lseekはオフセットをファイルディスクリプタに設定できません。readはファイルディスクリプタを参照してreadの実装に渡すので、オフセットは0スタート(= ファイル先頭から読み出し)です。

一方のpreadはファイルディスクリプタを無視してシステムコールに渡されたオフセットをそのままreadの実装に渡すので、lseekがあろうがなかろうが任意のオフセットから読み出せます。

編集者:すずき(2025/12/21 00:11)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年12月18日

preadとlseek + readは違います

目次: Linux

知っている人には「なんだそんなことか」で終わりな話なんですが、お恥ずかしいことに私は今まで知らなかったのでメモしておきます。

Linuxには指定されたオフセットからデータを読み出すシステムコールpread(pread64)があります。私は今までpread = lseek + readだと思っていましたが、特定の環境だと両者の動作が違います。

まずは確認のためのテストプログラムを用意しました。

lseek + readとpreadを2回ずつ実行するテストプログラム

#include <stdio.h>

#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
	int fd = -1;
	char buf[256];
	ssize_t nr;
	off_t pos, offset1 = 0x1000, offset2 = 0x2000;

	fd = open("/dev/sample_char/sample_char_dev", O_RDWR);
	if (fd == -1) {
		perror("open");
		goto err_out;
	}

	// lseek + read
	pos = lseek(fd, offset1, SEEK_SET);
	if (pos == (off_t)-1) {
		perror("lseek 1");
	}

	nr = read(fd, buf, sizeof(buf));
	if (nr != (ssize_t)sizeof(buf)) {
		perror("read 1-1");
	}
	nr = read(fd, buf, sizeof(buf));
	if (nr != (ssize_t)sizeof(buf)) {
		perror("read 1-2");
	}

	pos = lseek(fd, offset2, SEEK_SET);
	if (pos == (off_t)-1) {
		perror("lseek 2");
	}

	nr = read(fd, buf, sizeof(buf));
	if (nr != (ssize_t)sizeof(buf)) {
		perror("read 2-1");
	}
	nr = read(fd, buf, sizeof(buf));
	if (nr != (ssize_t)sizeof(buf)) {
		perror("read 2-2");
	}

	// pread
	nr = pread(fd, buf, sizeof(buf), offset1);
	if (nr != (ssize_t)sizeof(buf)) {
		perror("pread 1");
	}

	nr = pread(fd, buf, sizeof(buf), offset2);
	if (nr != (ssize_t)sizeof(buf)) {
		perror("pread 2");
	}

err_out:
	if (fd != -1) {
		close(fd);
		fd = -1;
	}
	return 0;
}

やっていることは、

  • 1000にシーク
  • 256バイトread(位置1000から読み出す)
  • 256バイトread(位置1256から読み出す)
  • 2000にシーク
  • 256バイトread(位置2000から読み出す)
  • 256バイトread(位置2256から読み出す)
  • 1000から256バイトpread(位置1000から読み出す)
  • 2000から256バイトpread(位置2000から読み出す)

こんな操作です。

キャラクタデバイスの用意

ファイルにどんな操作が行われたか知るために、キャラクタデバイスを作成してseekやreadのログを出します。方法は別にキャラクタデバイスでなくても何でも良いんですが、Linuxカーネルモジュールでキャラクタデバイスを実装するのが楽だと思います。ソースコードはGitHubに置きました。

キャラクタデバイスを提供するカーネルモジュールのビルド方法
sudo apt-get install linux-headers-amd64

make
sudo insmod sample-char-dev.ko
gcc test.c -o test
./test

カーネルモジュールのビルド方法とテストプログラムの実行方法は上記のとおりです。

lseekできるファイルの場合

特にカーネルモジュールの実装を変えなければ、キャラクタデバイスのファイル位置はlseekで変更可能かつreadにより進む実装になります。テストプログラムを実行すると下記のようなカーネルログが出るはずです。カーネルログはsudo dmesg -wなどで見てください。

lseekをサポートしている場合のログ
sample_char: open.
sample_char: seek to 1000.
sample_char: read 256 bytes at 1000.    ★lseek + read: 位置1000から読み出せる★
sample_char: read 256 bytes at 1256.
sample_char: seek to 2000.
sample_char: read 256 bytes at 2000.    ★lseek + read: 位置2000から読み出せる★
sample_char: read 256 bytes at 2256.
sample_char: read 256 bytes at 1000.    ★pread: lseek(1000)+readと一緒★
sample_char: read 256 bytes at 2000.    ★pread: lseek(2000)+readと一緒★
sample_char: release.

シングルスレッドかつlseek可能な通常のファイルではlseek + readでも、preadでも結果は同じです。位置1000もしくは位置2000からreadできます。

lseekできないファイルの場合

しかしlseekだけできない特殊なファイルだと結果が異なります。先ほどのキャラクタデバイスのlseekを無効にして試しましょう。

lseekを無効にする

static const struct file_operations sample_char_fops = {
	.owner   = THIS_MODULE,
	.open    = sample_char_fops_open,
	.release = sample_char_fops_release,
	.read    = sample_char_fops_read,
	.write   = sample_char_fops_write,
//	.llseek  = sample_char_fops_llseek,    ★この行をコメントアウトする★
};

変更によりlseekだけ失敗し、readは成功するファイル(テストプログラムがIllegal seekのエラー表示を出す)になりました。この状態でテストプログラムを実行すると下記のようなカーネルログが出るはずです。カーネルログはsudo dmesg -wなどで見てください。

lseekをサポートしていない場合のログ
sample_char: open.
sample_char: read 256 bytes at 0.       ★lseek + read: 位置1000から読み出しているつもりが0からになる★
sample_char: read 256 bytes at 256.
sample_char: read 256 bytes at 512.     ★lseek + read: 位置2000から読み出しているつもりが512からになる★
sample_char: read 256 bytes at 768.
sample_char: read 256 bytes at 1000.    ★pread: 変わらず位置1000から読み出せる★
sample_char: read 256 bytes at 2000.    ★pread: 変わらず位置2000から読み出せる★
sample_char: release.

最初はlseek + readのログですが、位置1000もしくは2000からreadしたいのに、lseekが失敗するため意図しない位置を読み出してしまう一方、preadはlseekと無関係に指定された位置1000もしくは2000から読み出せます。

実例

個人的にはファイル位置に意味があるのにlseekできないファイルを作るのは良くない実装だと思いますが、Linuxカーネルにもこのような実装が存在しています。ちょうど最近出会ったvfioがlseek無効の実装になっていました。vfioはファイル位置によってデバイスのどのメモリ領域を読み出せるか変わります。例えばvfio-pciであればBAR 0はこの位置、BAR 1はこの位置、みたいに決まっています。

vfioのデバイスファイルのファイル操作

// linux/drivers/vfio/vfio_main.c

const struct file_operations vfio_device_fops = {
	.owner		= THIS_MODULE,
	.open		= vfio_device_fops_cdev_open,
	.release	= vfio_device_fops_release,
	.read		= vfio_device_fops_read,
	.write		= vfio_device_fops_write,
	.unlocked_ioctl	= vfio_device_fops_unl_ioctl,
	.compat_ioctl	= compat_ptr_ioctl,
	.mmap		= vfio_device_fops_mmap,
};

しかし上記のようにvfioにはllseekの定義がありません。lseek+readではなくpreadで読み出さないと正常に動作しないことに気づくまでかなり困惑しました。こういう実装は良くないと思うんだ……。

編集者:すずき(2025/12/20 19:11)

コメント一覧

  • hdkさん(2025/12/21 08:34)
    昔試しにデバイスドライバーを作ったことがあった気がするのによく覚えていませんでしたが、seekやreadでf_posを更新するのはデバイスドライバー側の仕事なんですね。SEEK_SETなんかの解釈はどのデバイスドライバーでも共通、ってわけでもないのかぁ。pread/pwriteはオフセットを変更しないでアクセスできるので、マルチスレッドで使う時に便利、くらいの認識でした。つまりlseek+readとの違いはオフセットが変わらないことで、シングルスレッドであっても、preadの後にlseekせずにreadを使えばpreadでオフセットが変化しないことが観察できたかと思います。
  • すずきさん(2025/12/23 23:15)
    ですね、まあpread+readだと話が混ざるかなーと思って分けてみました。

    私もオフセットの管理を勝手にやってくれないんだな〜って思いましたけど、fifoみたいなオフセットの概念がないやつもいるし、ファイルに必ずファイルオフセットがあるわけじゃないので、こういう実装なんでしょうねえ。
  • すずきさん(2025/12/23 23:51)
    良く見たらksys_read()でfile->f_posを更新してくれているので、ドライバでfile->f_pos弄るの良くないのかも……??
open/close この記事にコメントする



2025年12月16日

initramfsの更新方法

目次: Linux

いつも忘れてググっている気がするのでメモしておきます。Linuxカーネルを変更したときにinitramfsを更新する方法です。更新にはupdate-initramfsコマンドを使用します。例えばカーネルバージョン6.18.2だとしたら、

update-initramfsの実行例
#### 1つのinitramfsを狙い撃ちで更新

# update-initramfs -k 6.18.2 -u


#### 全てのinitramfsを更新

# update-initramfs -k all -u

ツールが/boot/以下にあるconfig-(kernel version)を見ていい感じにinitramfsの圧縮形式などを調整してくれます。もしカーネルバージョンの指定を間違ったり、configファイルのコピーを忘れたりすると下記のような警告が出ます。

configが見つからないときのupdate-initramfsの警告
# update-initramfs -k aaaa -u

update-initramfs: Generating /boot/initrd.img-aaaa
W: Kernel configuration /boot/config-aaaa is missing, zstd compression support (CONFIG_RD_ZSTD) cannot be checked and is assumed to be available

カーネルとinitramfsを更新したらupdate-grub2も実行しておきましょう。

編集者:すずき(2025/12/24 00:47)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年12月14日

エアガンの外部ソース化キットを一部購入

目次: 射的

アキバのターゲット1にて減圧レギュレータ(0.4MPa)とホース、コネクタを買いました。いわゆるエアガンを外部から供給するガスで動作させるための部品「外部ソースキット」と呼ばれるものの一部です。

ガスガンを作動させるには何らかの圧縮ガスが必要で、ざっくりいってこの3パターンがあります。

動作方式動作ガス外部ソースキット空き缶デメリット
フロン 液化フロンガス不要発生する 冷えに弱い、速く動かすと液化ガスが噴き出る
外部ソース CO2ボンベ 必要発生する 必要な道具が多くやや高い
エアーコンプレッサー圧縮空気 必要発生しないホースが必要、コンプレッサーの近くでしか使えない

私はずっとフロンガスだったので、エアガンの動作用フロンガスの空き缶が家にどんどん溜まります。空き缶は500ccのPETボトルくらいあって割と邪魔で、なんとかならないかなーと思っていました。

CO2外部ソースは知っていたものの空き缶が発生することに変わりはなくて、フロンガスの空き缶がCO2ガスの空き缶に代わっても嬉しくないので購入を見送っていました。

最近になって、アキバのターゲット1にエアーコンプレッサーが設置されたため(しかも今のところは無料で使わせていただける)、これが決め手になって外部ソースキットの一部購入に踏み切りました。家にフロンガスの空き缶が増えるのが防げるのはかなりありがたいです。

編集者:すずき(2025/12/17 23:58)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年12月11日

Ubuntuのカーネルパニック画面

目次: Linux

Ubuntu 24.04 LTSで起動中にカーネルパニックを起こすとこんな感じの画面になります。画面にはエラーメッセージの最後と思われる1行のみ表示され、他のカーネル起動ログは隠されます。


Ubuntuのカーネルパニック画面

エラーの原因がわかりにくくて開発の邪魔なので無効にするべく調べました。どうやらカーネルの設定らしくてCONFIG_DRM_PANICを有効/無効にするとこの画面が出る/出ないが切り替わります。

Ubuntu風の配色にする設定
Device Drivers  --->
  Graphics support  --->
    <M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->
      [*]   Display a user-friendly message when a kernel panic occurs
        (0xffffff) Drm panic screen foreground color, in RGB
        (0x5e2750) Drm panic screen background color, in RGB

Ubuntu 24.04 LTSと同じ配色にしたい場合は、上記のような設定にすると良いです。何がユーザーフレンドリーかわかんないし、私はこの機能は要らんです……。

編集者:すずき(2025/12/19 23:59)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年12月10日

LinuxからBIOS/UEFIの設定を取得する

目次: Linux

設定によって何か動作を変えたい、PC再起動するのが嫌など、BIOS/UEFIの設定をLinuxから見たいときがあります。お使いのPCがThinkPadであればfwupdmgrが使えると思います。

fwupdmgrでBIOS/UEFIの設定を取得
$ sudo apt-get install fwupd

$ sudo fwupdmgr get-bios-settings

SecureBoot:
  Setting type:         Enumeration
  Current Value:        Disable
  Description:          SecureBoot
  Read Only:            True
  Possible Values:
    0:                  Disable
    1:                  Enable

LockBIOSSetting:
  Setting type:         Enumeration
  Current Value:        Disable
  Description:          LockBIOSSetting
  Read Only:            False
  Possible Values:
    0:                  Disable
    1:                  Enable

...

HWによって対応している場合と対応していない場合があるようで、家の自作デスクトップPCだと下記のように怒られてしまって設定取得できませんでした。

fwupdmgrを自作PCで動かしたときのエラー
$ sudo fwupdmgr get-bios-settings

WARNING: UEFI ESP partition not detected or configured
See https://github.com/fwupd/fwupd/wiki/PluginFlag:esp-not-found for more information.
WARNING: UEFI firmware can not be updated in legacy BIOS mode
See https://github.com/fwupd/fwupd/wiki/PluginFlag:legacy-bios for more information.
Authenticating?          [ -                                     ]
This system doesn't support firmware settings

メッセージ曰く「UEFI ESPパーティションがない」「legacy BIOSモードだとダメ」と言っています。これ以上は深追いしていないため解決方法がわからんのですが、何か追加で設定が要るんですかねえ?

編集者:すずき(2025/12/24 01:02)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2025年12月22日 >>> 2025年12月9日
link もっと後

管理用メニュー

link 記事を新規作成

<2025>
<<<12>>>
-123456
78910111213
14151617181920
21222324252627
28293031---

最近のコメント20件

  • link 25年12月18日
    すずきさん (12/23 23:51)
    「良く見たらksys_read()でfil...」
  • link 25年12月18日
    すずきさん (12/23 23:15)
    「ですね、まあpread+readだと話が...」
  • link 25年12月18日
    hdkさん (12/21 08:34)
    「昔試しにデバイスドライバーを作ったことが...」
  • link 25年11月28日
    hdkさん (12/04 08:10)
    「あれ、停止直前くらいの時のトルクコンバー...」
  • link 25年11月28日
    すずきさん (12/03 11:24)
    「トルクコンバーターがいてエンブレは掛かり...」
  • link 25年11月28日
    hdkさん (12/02 08:02)
    「"停止直前に急にエンブレがほぼゼロになる...」
  • link 25年10月6日
    すずきさん (10/10 13:14)
    「ですね。ccはもはやコンパイラというより...」
  • link 25年10月6日
    hdkさん (10/10 08:27)
    「ただのHello, worldでも試して...」
  • link 25年9月29日
    すずきさん (10/03 00:29)
    「なんと、メタパッケージ入れてなかったです...」
  • link 25年9月29日
    hdkさん (10/02 06:51)
    「あれ、dkmsは自動ビルドされるのが便利...」
  • link 20年8月24日
    すずきさん (08/30 22:06)
    「ですね、自分も今はPulseAudioを...」
  • link 20年8月24日
    hdkさん (08/29 09:32)
    「ALSA懐かしい... PulseAud...」
  • link 16年2月14日
    すずきさん (08/04 01:31)
    「お役に立ったようでしたら幸いです。」
  • link 16年2月14日
    enc28j60さん (08/03 17:40)
    「ちょうど詰まっていたところです。\n非常...」
  • link 25年7月20日
    すずきさん (07/30 00:10)
    「ギクシャクするのは減速時の2速シフトダウ...」
  • link 25年7月20日
    hdkさん (07/29 07:38)
    「2速発進でギクシャクするんですか? 面白...」
  • link 25年7月20日
    すずきさん (07/28 23:16)
    「なるほど。レガシィB4のATはDレンジで...」
  • link 25年7月20日
    hdkさん (07/28 21:28)
    「MT車でも1速はギクシャクするので完全に...」
  • link 25年7月20日
    すずきさん (07/28 00:44)
    「何日か乗ってみて気づいたんですが、Dレン...」
  • link 25年7月20日
    hdkさん (07/22 22:59)
    「2速発進って雪道モードっぽさがありますが...」

最近の記事3件

  • link 21年12月28日
    すずき (12/25 00:40)
    「[ゲーム - まとめリンク] 目次: ゲームNintendo DSを買ったパネルでポンDS最近の朝はパネポンDS聖剣伝説DSチ...」
  • link 25年12月22日
    すずき (12/25 00:40)
    「[ゲームを買ったら遊びましょう3] 目次: ゲーム前回の振り返り(2024年10月20日の日記参照)から1年経ちました。所持し...」
  • link 08年3月25日
    すずき (12/24 22:16)
    「[シムシティDS2クリア] 目次: ゲームシムシティDS2のチャレンジモード「現代 温暖化」編をクリアして、スタッフロールを拝...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 12/25 00:40