(2005-04の一覧)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

条件コンパイルを行う
2005-04-26-1 / カテゴリ: [programming][c] / [permlink]

予めデバッグフラグを #define で定義し、#ifdef 〜 #endif でブロック(?)を囲む
#define DEBUG 1
:
:
#ifdef DEBUG
 // ここにコード
 // DEBUGが定義されていればコンパイルされる。
#endif
:
:
2005-04-23 Sat (他の年の同じ日: 2004 2006)

malloc, realloc 基本
2005-04-23-1 / カテゴリ: [c][programming] / [permlink]

メモリを確保する
malloc
「プログラムが」使用出来るメモリ領域を確保する。
#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str;
  char *str2 = "hogefoobar";

  str = (char *)malloc(strlen(str2) + 1);  /* str2の文字列長+1('\0'用)を確保し
                                              str にそのアドレスを保持 */
  if (str == NULL) {                       /* malloc の例外処理 */
    perror("cannot malloc\n");
    return -1;
  }

  strcpy(str, str2);                       /* 文字列のコピー */
  printf("str: [%s] %p\n", str, str);
  printf("str2: [%s] %p\n", str2, str2);

  free(str);                               /* メモリの開放 */

  return 0;
}
malloc 前にどこかのアドレスをさしていた場合は、その内容はなくなる…のかな

realloc
プログラムが使用出来る既存のメモリ領域を拡大する。既存のメモリ領域から連続した領域が空いていればそこが、空いていなければ、別の位置に領域確保&既存の位置のデータのコピーが行われる。多分
#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str;
  char *str2 = "foobar";

  str = (char *)malloc(strlen(str2) + 1);  /* まずは str に領域確保 */
  if (str == NULL) {
    perror("cannot malloc\n");
    return -1;
  }
  strcpy(str, str2);
  printf("str: [%s] %p (size: %d)\n", str, str, strlen(str));

  str = (char *)realloc(str, strlen(str) + strlen(str2) + 1);
                                           /* str に更に str2 分を追加 */
  if (str == NULL) {
    perror("cannot realloc\n");
    return -1;
  }

  strcat(str, str2);                       /* str = str + str2 */
  printf("str: [%s] %p (size: %d)\n", str, str, strlen(str));

  free(str);

  return 0;
}
↑ realloc しないとコアダンプした(cygwin/gcc)
2005-04-22 Fri (他の年の同じ日: 2006)

zshを使ってコマンドを指定回数連続実行
2005-04-22-2 / カテゴリ: [unix][linux][shell] / [permlink]

% zsh -c "repeat COUNT command"
ベンチ計ったりするには
% time zsh -c "repeat 100 command >/dev/null"
見たいな感じで

文字列を指定文字(デリミタ)で区切って、部分文字列のアドレスを得る
2005-04-22-1 / カテゴリ: [programming][c] / [permlink]

strtok(string, charset)
#include <string.h>

char string[] = "name, title, date, value\n";
char delim[] = ", \r\n";
char *token;

printf("[%s] (%p)\n", string, string);
printf("----\n");
token = strtok(string, delim);
while (token != NULL) {
  printf("[%s] (%p)\n", token, token);
  token = strtok(NULL, delim);
}
出力は
[name, title, date, value
] (0x22efa0)
----
[name] (0x22efa0)
[title] (0x22efa6)
[date] (0x22efad)
[value] (0x22efb3)
コールするたびに、デリミタで指定した文字セット以外が連続する文字列の末尾に '\0' をいれ、先頭のポインタを返す。(よって string は壊れる)
コール時に前回のポインタを記憶しているので、NULL になるまで複数回実行すれば、対象文字列をバラせる。

便利だけど、そろそろ Perl でやりたくなってきた。

標準ライブラリのヘッダファイルはどこに?
2005-04-21-5 / カテゴリ: [programming][c] / [permlink]

/usr/include
です。

文字列中から文字を探し、長さを得る
2005-04-21-4 / カテゴリ: [programming][c] / [permlink]

strspn(string, charset) / strcspn(string, charset) で
#include <string.h>

char string[] = "abcdefg";
char target[] = "def";
size_t len1, len2;

len1 = strspn(string, target);
len2 = strcspn(string, target);
strspn は、string の先頭から target の文字のみの部分文字列の長さ。
strcspn は、string の先頭から target 以外の文字のみの部分文字列の長さ。

Perl だと
my $string = "abcdefg";
my $target = "def";
my ($len1, $len2);

$len1 = length join "", ($string =~ /^([$target]*)/);
$len2 = length join "", ($string =~ /^([^$target]*)/);
ってコトかな? (うそっぽい)

文字列中から文字を探し、アドレスを得る
2005-04-21-3 / カテゴリ: [programming][c] / [permlink]

1文字探す場合は strchr(string, char), strrchr(string, char) で
#include <string.h>

char string[] = "abcdefg";
char target = 'c';
char *p;

p = strchr(string, target);
p には、string 中の最初の c の位置のアドレスが入る
strrchr は、最後のアドレスが入る(末尾から探す)
文字が見つからなかった場合は null になる。

複数文字のうちの1文字を探す(targetに複数文字を指定)場合は
char *strpbrk(string, charset)
char string[] = "sample string";
char target[] = "aiueo";
char *p;

p = strpbrk(string, target);
p には "sample string" の先頭から、"aiueo" の中のどれか1文字が最初に見つかる、2文字目の "a" の位置のアドレスが入る。
見つからなければ null

文字列長の取得
2005-04-21-2 / カテゴリ: [programming][c] / [permlink]

strlen(string) を使う
#include <stdio.h>
size_t strlen(const char *str);
文字列を指すポインタを渡すと、文字数(size_t型)を返す

const で定数宣言
2005-04-21-1 / カテゴリ: [programming][c] / [permlink]

変数を const で修飾すると、read-only な変数になる。
const int i = 123;
i = 456;
コンパイルすると
strlen.c: In function `main':
strlen.c:10: error: assignment of read-only variable `i'

Perl なら
use constant VALUE => 123;
だ。

厳密には「定数」というわけでなく、「読み出し専用」にするってこと。
2005-04-20 Wed (他の年の同じ日: 2013)

文字列をフォーマット通りに分割する
2005-04-20-1 / カテゴリ: [programming][c] / [permlink]

sscanf(string, format, ...) を使う
#include <stdio.h>
int sscanf(const char *s, const char *format, ...);
           入力文字列     入力書式文字列      格納可変個引数
コード
char buf[] = "5/4/20";
int yy, mm, dd;

sscanf(buf, "%2d/%2d/%2d", &yy, &mm, &dd);
で、yy に 5, mm に 4, dd に 20 が入る
Referrer (Inside): [2006-03-13-3]
2005-04-19 Tue (他の年の同じ日: 2006)

wanderlust メールの削除キーバインド
2005-04-19-7 / カテゴリ: [linux][wanderlust] / [permlink]

(setq wl-trash-folder "..Trash")
の状態で
d
だと、Trash へ移動はするが、消えない。
シェルから ~/Maildir/.Trash/cur をサクっと消せばいい
~/Maildir/.Trash/courierimapuiddb は、デーモンの方が勝手にキレイにしてくれる。

wanderlust フォルダリストの設定
2005-04-19-6 / カテゴリ: [linux][wanderlust] / [permlink]

~/.folders
[imapserv] {                       # 仮想フォルダ名
      .            "受信箱"        # 実フォルダ    "表示名(フォルダの別名)"
      ..Sent       "送信済"
      ..Trash      "ゴミ"
      ..Drafts     "下書き"
      ..tome       "自分宛"
      ..tech       "技術情報"
}
見たいな感じ
表示名を省略した場合は、実フォルダ名が表示される
 [-]Desktop:0/0/748
 [-][imapserv] :0/0/442
   受信箱:0/0/164
   送信済:0/0/44
   ゴミ:0/0/0
   下書き:0/0/1
   自分宛:0/0/25
   技術情報:0/0/62

C言語 文字列の宣言・代入
2005-04-19-5 / カテゴリ: [programming][c] / [permlink]

(charへのポインタで)
char *str;
str = "hoge";
このとき、strcpy(str, "hoge"); はできない。
ポインタが指しているアドレスが不定の場合に文字列をセットできないから…かな

(charの配列で)
char str[32];
strcpy(str, "hoge");
このとき、str = "hoge"; はできない。
str は配列名であって変数でないから…らしい
ただし、
char str[32] = "hoge";
は OK

C言語 配列とポインタの関係
2005-04-19-4 / カテゴリ: [programming][c] / [permlink]

int a[4] = {1, 2, 3, 4};
for (i = 0; i < 4; i++) {
	printf("&a[%d]: %p\n", i, &a[i]);   /* 各要素のアドレスを print */
}
printf("a: %p\n", a);                 /* 配列名をポインタとして print */
出力
&a[0]: 0x22efb0
&a[1]: 0x22efb4
&a[2]: 0x22efb8
&a[3]: 0x22efbc
a: 0x22efb0p
配列名は、その配列の先頭要素のアドレスを指している

Meadow でバイトコンパイル
2005-04-19-3 / カテゴリ: [win][meadow] / [permlink]

M-x byte-compile-file
で、.el を指定すればOK

Meadow で画面左側に行番号を表示する
2005-04-19-2 / カテゴリ: [win][meadow] / [permlink]

http://www.netlaputa.ne.jp/~kose/MeadowBook/
って、動かないんだけど…
Referrer (Inside): [2005-10-28-1]

Meadow のフォントがやっぱり見難いので MS-gothic にしてみた
2005-04-19-1 / カテゴリ: [win][meadow] / [permlink]

http://www.bookshelf.jp/soft/meadow_15.html#SEC112
まぁ、ここの通り。
.emacs への追記と、Meadow/2.00/site-lisp/font-setup.el の配置
2005-04-18 Mon (他の年の同じ日: 2007)

wanderlust でメールの手動フォルダわけキーバインド
2005-04-18-2 / カテゴリ: [linux][wanderlust] / [permlink]

o
で、ミニバッファに移動先入力
x
で、実行
まぁ、mewと同じだな
Maildir直操作の場合、移動先で未読扱いになる…

ChangeLogをhtmlに
2005-04-18-1 / カテゴリ: [linux][emacs][xyzzy][changelog][chalow] / [permlink]

http://nais.to/~yto/tools/chalow/
まんま。
入れて実行
css はコピること。

今後はフツーの日記っぽいメモも残そうかな…
Referrer (Inside): [2005-06-04-1]
2005-04-14 Thu (他の年の同じ日: 2004 2006)

Meadow 印刷計画
2005-04-14-4 / カテゴリ: [win][meadow] / [permlink]

GhostScript入れるか (現在8.50)
http://auemath.aichi-edu.ac.jp/~khotta/ghost/
Ghostscript,GSviewを入れて
Meadowパッケージでintlfontsを入れる。
で、OK
でも、ak2prと連携させるとうまくいかない…?

wanderlust 購読の解除(フォルダは削除しない)キーバインド
2005-04-14-1 / カテゴリ: [linux][wanderlust] / [permlink]

m k
courierimapsubscribed から消えるが、ディレクトリ実体は残るっぽい
2005-04-13 Wed (他の年の同じ日: 2004 2006)

meadow で wanderlust を使うまで
2005-04-13-4 / カテゴリ: [win][meadow][wanderlust] / [permlink]

APEL/FLIM/SEMI が必要? パッケージ追加
http://cwaweb.bai.ne.jp/~daisaku/elisp.html
というか、README 書いてある。
Meadow/pkginfo/wanderlust/INSTALL.ja

Meadow 印刷設定
2005-04-13-3 / カテゴリ: [win][meadow] / [permlink]

http://www.bookshelf.jp/soft/meadow_15.html#SEC136
ak2pr単体を入れてみたが、eucなファイルは化ける…

emacs でツールバー非表示にする(xemacsではない)
2005-04-13-2 / カテゴリ: [linux][emacs][meadow] / [permlink]

.emacs に
(tool-bar-mode 0)
を追加

MySQL 基本操作
2005-04-13-1 / カテゴリ: [linux][SQL][MySQL] / [permlink]

□ コマンドラインの起動

% mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8 to server version: 4.0.24_Debian-5-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

□ ユーザ(root)にパスワードを設定

mysql> set password for root=password('********');
Query OK, 0 rows affected (0.00 sec)

□ MySQLユーザ名を指定した起動

	
% mysql -u username [-p]

□ データベースの一覧表示

mysql> show databases;
+----------+
| Database |
+----------+
| test     |
+----------+
1 row in set (0.00 sec)

□ データベース(zakidb)の作成

mysql> create database zakidb;
Query OK, 1 row affected (0.00 sec)

□ データベース(zakidb)の指定

mysql> use zakidb;
Database changed

□ テーブル(t_todofuken)の作成

mysql> create table t_todofuken (ken char(50), kencho char(50), jinko int);
Query OK, 0 rows affected (0.00 sec)

□ テーブル一覧の表示

mysql> show tables;
+------------------+
| Tables_in_zakidb |
+------------------+
| t_todofuken      |
+------------------+
1 row in set (0.00 sec)

□ テーブル(t_todofuken)のフィールド一覧を表示する

mysql> show fields from t_todofuken;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| ken    | char(50) | YES  |     | NULL    |       |
| kencho | char(50) | YES  |     | NULL    |       |
| jinko  | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

□ フィールド名(ken -> kenmei)と型を変更する

mysql> alter table t_todofuken change ken kenmei char(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show fields from t_todofuken;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| kenmei | char(50) | YES  |     | NULL    |       |
| kencho | char(50) | YES  |     | NULL    |       |
| jinko  | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

※ 型は変更しなくても指定すること

□ フィールドの型のみ修正する

mysql> alter table t_todofuken modify kenmei char(30);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show fields from t_todofuken;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| kenmei | char(30) | YES  |     | NULL    |       |
| kencho | char(50) | YES  |     | NULL    |       |
| jinko  | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

□ フィールド(menseki)を追加する

mysql> alter table t_todofuken add menseki int;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show fields from t_todofuken;
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| kenmei  | char(30) | YES  |     | NULL    |       |
| kencho  | char(50) | YES  |     | NULL    |       |
| jinko   | int(11)  | YES  |     | NULL    |       |
| menseki | int(11)  | YES  |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

□ テーブル(t_todofuken)を(フィールド・レコードともに)削除する

mysql> drop table t_todofuken;
Query OK, 0 rows affected (0.00 sec)
※ y/N すら聞いて来ないので注意!!!
2005-04-12 Tue (他の年の同じ日: 2006 2013)

wanderlust で編集中のメールの破棄キーバインド
2005-04-12-2 / カテゴリ: [linux][wanderlust] / [permlink]

C-c C-k
C-x k だとハングしちゃうので注意

writeコマンド
2005-04-12-1 / カテゴリ: [unix][command] / [permlink]

usage: write username [terminal]
cf.
% write miyazaki pts/1
string
^D
2005-04-11 Mon (他の年の同じ日: 2006)
2005-04-06 Wed (他の年の同じ日: 2006 2007)

emacs で開いているファイルの文字コード改行コード変換
2005-04-06-1 / カテゴリ: [linux][emacs] / [permlink]

M-x set-buffer-file-coding-system
で、euc-japan-unix とかを指定すれば OK

Solaris システムコールのトレース
2005-04-05-1 / カテゴリ: [unix][Solaris][command] / [permlink]

# truss -p PID
root で実行すること
2005-04-01 Fri (他の年の同じ日: 2004 2006)

Meadow 日本語・IM 設定
2005-04-01-2 / カテゴリ: [win][meadow] / [permlink]

;;; 日本語環境
(set-language-environment "Japanese")

;;; IMEの設定
(mw32-ime-initialize)
(setq default-input-method "MW32-IME")

;;; キーバインド
(global-set-key "\C-o" 'toggle-input-method)
とりあえず、これだけあればいける

あとは
;;; モードラインのIM表示設定
(setq-default mw32-ime-mode-line-state-indicator "[--]")
(setq mw32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
(add-hook 'mw32-ime-on-hook
	  (function (lambda () (set-cursor-height 2))))
(add-hook 'mw32-ime-off-hook
	  (function (lambda () (set-cursor-height 4))))

;;; IMEのON/OFFでカーソル色を変更
(add-hook 'mw32-ime-on-hook
	  (lambda () (set-cursor-color "red")))   ; ON
(add-hook 'mw32-ime-off-hook
	  (lambda () (set-cursor-color "black"))) ; OFF
で、キレイになるかな。

あ、ファイルの文字コード(モードラインの〜の部分)は iso-2022-jp な。

Meadow フォント設定
2005-04-01-1 / カテゴリ: [win][meadow] / [permlink]

;;; TrueType フォント設定
(create-fontset-from-request "private-fontset"
 			     '((width . 8)
			       (height . 16)
			       (fixed . t)
			       (italic . nil))
			     '((family . "MS ゴシック")
			       (family . "Courier New")))

(change-fontset-from-request "private-fontset"
			     '((width . 8)
			       (height . 16)
			       (fixed . t)
			       (weight . 700)
			       (italic . nil))
			     '((family . "MS ゴシック")
			       (family . "Courier New"))
			     1)

;;; デフォルトのフォント・フレームの設定
(setq default-frame-alist
      (append (list
	       ;; Font
	       '(font . "private-fontset")
	       ;; Frame-size
	       '(width  . 88)
	       '(height . 40)
	       )
	      default-frame-alist))
こんな感じで。
最後の default-frame-alist がないと、設定項目ができるだけで、
起動時のデフォルトフォントにはならない。
2005-04
前の月 / 次の月 / 最新

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12