ソフトウェアエンジニア現役続行

雑多なことを綴ります

glibcの実装を見る方法

glibcとはGNUが提供する標準Cライブラリのことです。Linuxのマシンには標準で入っています。 「strcspnってどんな実装になっているのだろう?」と思ったことがあり、「いや、そもそも標準Cライブラリの実装ってどこで見ることが出来るのだろう」に発展しまし…

Adroit Photo Recoveryを使ってみました

Digital Assembly社のAdroit Photo Recoveryというソフトウェアがあることを知りました。これがすごい!ハードディスクから削除された画像ファイルを復元できるんです!詳しくはニューヨークタイムズの記事でも紹介されています。僕の拙い英語力で理解するに…

仕事は5年でやめなさい

タリーズコーヒーを日本に広めた松田公太さんの本です。友達の家にあった本、タイトルに惹かれて手に取りました。読みやすい本で2時間で読破しました。1〜5章で構成されていますが、「仕事は5年でやめなさい」というタイトルに沿った内容は1章の前半の…

[開く]ダイアログボックスへのフォルダの追加

今日もWINDOWS XP HACKSを読んで実践したことを一つ。 特定のWindowsアプリケーション(メモ帳など)を使用してファイルを開くと、[開く]ダイアログボックスの左側に、ファイルを開くために操作できるアイコンやフォルダのグループ(ここでは[履歴]、[デスク…

コントロールパネルの制御

WINDOWS XP HACKSという本を読んでいます。会社の本棚にあったので、借りてかえることに。 うちの会社はクライアントPCの管理が徹底されていて、基本的には Windows XP Professional ー Service Pack 2 しか使わせてもらえません。僕も会社では毎日 Windows …

文字パレットの表示を無効にする

MAC

「ことえり環境設定」->「入力操作」->「Windows風のキー操作」にチェックを入れて使っています。こうすると、例えば「っ」を出力したいときに、「xtu」とキーを打つのではなく、「ltu」とキーを入力すれば良くなります。 しかしこの設定をすると、Ctrl + K…

HTTPSプロキシの仕組み

例えば、以下のようなネットワークを考えます。 ┌──────────┐ ┌─────────┐ ┌───────────┐ │ クライアントPC │ <───> │ プロキシサーバ │ <───> │ HTTPSサーバ │ └──────────┘ └─────────┘ └───────────┘ 192.168.1.40 192.168.1.2 https_server.j…

ソフトウェア開発で伸びる人、伸びない人

入社直後に読んだ本を久々に読みました。当時はあまりピンと来なくて、あまり印象に残っていなかったのですが、久々に読んだら、「うんうん、そうだよなぁ」って思ったり、「あっ、この悪い例は僕もやっている・・・」って頭を抱えてしまったり。 この本では…

dhclientとリースファイル

「dhclient -l lease_file」でリースファイルの出力先を指定できます。 (デフォルトは/var/lib/dhclientディレクトリにdhclient-eth0.leasesというファイル名で記録されます)←eth0のところにインタフェース名が入ります。 以前、CentOS 5.1でサーバを立て…

マウスの加速度問題

MAC

Macのマウスはとても使いづらいです。 マウスを小さく動かすととても遅いのに、大きく動かすと一気にマウスの動きが速くなります。Macのマウスは小さい動きは遅く大きい動きは速い。。。 この使いづらさはみんな感じているようで、「Mac マウス 動き」とか「…

MacBook購入

MAC

ずっとブログ更新をさぼっていました。というのも、正月休みにMacBookを購入して、初めてのMacの操作に四苦八苦。やっと最近慣れてきました。Windowsと比較したときのMacの良さは色々あると思いますが、僕が良いなって感じたのは次の2点です。 1.フォント…

cronスクリプトをバックグラウンドで実行するときの注意点

cronスクリプトの中でアンパサンド(&)を使ってコマンドをバックグランド処理しようとしても、このコマンドが終了するまでcronは次の処理に移行しません。 どういうことかというと、例えば以下のスクリプトをcronに登録します。/etc/cron.hourly/sleep15.s…

定数変数(constant variable)の値を変更するときの注意点

プログラミング言語Java - 第4版の第2刷のP.40で定数変数(constant variable)について以下のように説明しています。 コンパイル時に値が決定できる定数式で初期化された基本データ型、あるいは、nullではない定数式で初期化されたString型のfinalフィール…

keepalivedがnopreemptモードでは正しく動かない

keepalivedというVRRPを実装したオープンソースモジュールがあります。Linux上で動きます。VRRPには、preemptモードとnopreemptモードがあるのですが、keepalivedではnopreemptモードが正しく動きません。FAULT状態のマシンが障害から回復したとき、そのマシ…

クラスオブジェクトの配列を使うときの注意点

int型の配列を使うときは以下のようにします。これは問題ないですね。 int[] array = new int[10]; // (1) しかし自分で定義したクラスのオブジェクトの配列を使う場合は、同じようにしてもうまくいきません。 class NewClass{ int a; int b; }public static…

洋書の翻訳本を検索するサイト

専門書の多くは外国人によって英語で書かれています。英語力をつけるためにも原文で読むことも大切だと思いますが、翻訳本があるならそっちを読みたいと思ってしまうもの。そこで、洋書のタイトルは分かっていたときに、それに対応する翻訳本を探すことの出…

繰り返し処理には要注意

プログラミングでメシが食えるか!?―成功するプログラマーの技術と仕事術という本を読みました。軽いタッチの本でスラスラと読める本です。 その中で、読んでいてギクっとしたのが、繰り返し処理に関する記述です。 以下がダメな実装例です。 for (i=0; i ※pp…

関数内でmallocするときの注意

関数内でmallocするときは、割り当てたアドレスの値を返すようにしなければなりません。僕もやってしまったことがあるのですが、よくありがちなミスとしては以下のようなものがあります。 #include #include void alloc_func (char *ptr) { ptr = malloc (51…

タイムアウトを設定してsystem関数を使いたい

LinuxのC言語では「タイムアウトを設定してsystem関数を使いたい」と思っても、これが思うように出来ません。「プロセスをforkさせて、子プロセスでsystem関数を実行して、親プロセスがタイムアウト時に子プロセスを殺せば良い」と思うかも知れませんが、そ…

演算の相対的コスト

演算の相対的なコストについて以下にまとめました。 以前読んだC実践プログラミングからの情報です。 1000 printfとscanf 800 mallocとfree 500 三角関数(sin,cos,...) 100 浮動小数点数(すべての演算) 30 整数の除算 20 整数の乗算 10 関数呼び出し 6 …

空ファイルの作成方法

空ファイルを作るには、Linuxのシェルなら [oswald@localhost ~]$ touch /tmp/sample.txt とするだけで良かったのですが、C言語の場合も #include int main(void) { FILE *fp; fp = fopen("/tmp/sample.txt", "w"); fclose(fp); return 0; } のように、書き…

構造体のfree

構造体のポインタを宣言して、そこにmallocしてメモリを割り当てたとします。 そして構造体の要素にもポインタがある場合、そこにもmallocしてメモリを割り当てたとします。これらをfreeしたいときは、構造体のポインタだけfreeするのでは不十分です。構造体…

ポインタ同士の加算、減算

プログラミング言語Cを読了しました。C言語の基礎を学ぶ、復習するにはとても良い本です。特にmallocをはじめとする標準ライブラリ関数の内部実装を知ることが出来たのは、今後の開発で役立ちそうです。説明の分かりにくさはあるのですが、この分かりにくい…

静的変数(static変数)の初期化

C言語では、自動変数は明示的に初期化をしないと、その自動変数の値は未定義です。なので自動変数には明示的に初期化をする必要があります。一方、静的変数(static変数)は明示的に初期化をしないと、0(数値型)またはNULL(ポインタ型)に初期化されます…

初回エントリ

柴田芳樹さんのプログラマー現役続行という本を読んでやる気を出し、ソフトウェア開発者として必要なスキルをどんどん学んでいこうと思っています。 とりあえず今はプログラミング言語Cという本を読み進めています。