2007/07/07(土)プラットホーム汎用で、固定長の整数型を使う

int型は整数型ですが、int や long や long long などは環境によってサイズが違ったりします。これらの型は、元もとサイズ(バイト長)を固定する目的で作られたものではないからです。

プラットホーム汎用でプログラムを書く際、固定長のデータを扱う時(バイナリデータ列など)は特に注意する必要があります。C99という規格で固定長整数型として int32t などが規定されましたが、すべての環境で使えるわけではありません。また Windows プラットホームならば、__int32 などが利用出来ますが、Windows以外では利用出来ません。

自分は、だいたいの環境でうまく動くマクロを作って、これを使っています。

#if defined(__C99__) || (defined(__GNUC__) && __GNUC__ >= 3)
#	include <inttypes.h>
#	include <stdint.h>
#else
#	if defined(__GNUC__)
		typedef short			 int16_t;
		typedef unsigned short		uint16_t;
		typedef int			 int32_t;
		typedef unsigned int		uint32_t;
		typedef long long		 int64_t;
		typedef unsigned long long	uint64_t;
#	elif (_MSC_VER || __BORLANDC__)
		typedef __int16			 int16_t;
		typedef unsigned __int16	uint16_t;
		typedef __int32			 int32_t;
		typedef unsigned __int32	uint32_t;
		typedef __int64			 int64_t;
		typedef unsigned __int64	uint64_t;
#	endif
#endif

2007/06/20(水)舐めたネジの外し方

ネジが錆びてしまったり、サイズの合わないドライバーで無理矢理まわしてネジ頭を舐めてしまったときのネジの外し方です。ちなみにこの「舐める(なめる)」というのは独特の言い回しで、ドライバーがネジ頭の溝に引っかからず滑ってしまう状態を示します。

ネジ外しの基本

さび付いてしまったりして、固くなってしまったネジを外すとき。回す力をいくら加えてもネジは外れません。このような固くなったネジを無理矢理ドライバーで回そうとすると、ネジ頭を破壊してネジを外せなくなってしまいます

大切なことはネジを強く押さえつけながらネジを回すことです。教えてもらったのですが、世の中にはインパクトドライバー(非電動式/ハンマー式)と言ってたたきつける衝撃で左に回るドライバーがあるそうです。*1

*1 : さして高くないので、いずれ購入しておこうと思います。

舐めるネジを外す

錆びて脆くなったネジや、固くなったネジを無理矢理ドライバーで回したりしてネジ頭が壊れたネジは外すのが非常に困難です。

negi1.jpg

ネットで検索すると、ネジ頭を破壊してしまったネジを開けるためいくつかの方法が示されています。

などがあるようですが、一番お手軽な方法を一つ紹介します。金ノコでネジ頭に溝を作ってマイナスドライバーで回す方法です。

negi2.jpg

地味な方法ではありますが、金ノコ以外の特殊工具が必要ありませんので結構応用範囲が広い方法です。

negi3.jpg
negi4.jpg

ただ、溝(くぼみ)の中にあるネジなどには使いにくい方法ですが不可能ではありません。小型マイナスドライバーなどの固い金属で(時間はかかりますが)少しずつキズを付けていけばマイナスの溝を掘ることができます。*2

*2 : というのも、大昔スーパーファミコンのコントローラーが壊れて分解するときに、錆びてネジ頭がつぶれてしまったネジを開けるために、小型マイナスドライバーでマイナスの溝を掘って開けた苦肉の策から生まれた方法ですので。もっともこのやり方自体は車輪の再発名ですけど。

そもそも

錆びる可能性のある場所では、ステンレスネジを使いましょう(上の写真で外したネジはすべてステンレスネジに交換しました)。

2007/06/19(火)ハミング符号のメモ

ハミング符号(15,11)の生成行列。

生成多項式 x^4+x^1+1

生成行列の元データ

0001 : crc=03h 0011
0002 : crc=06h 0110
0004 : crc=0Ch 1100
0008 : crc=0Bh 1011
0010 : crc=05h 0101
0020 : crc=0Ah 1010
0040 : crc=07h 0111
0080 : crc=0Eh 1110
0100 : crc=0Fh 1111
0200 : crc=0Dh 1101
0400 : crc=09h 1001

生成行列(先頭11行省略、左がbit0、右がbit10)

p1 = [10011010111]
p2 = [11010111100]
p3 = [01101011110]
p4 = [00110101111]

後学のために買いたい書籍

誤り訂正符号入門