kagamihogeの日記

kagamihogeの日記です。

プログラミング失敗談

出力パラメータはやっぱ良くないんだろうなぁ

出力パラメータというのは、例えばこんな感じ。 public void setHogeList(List list, Hoge hoge) { list.add(hoge); }2007/08/23 追記 ソースコードの間違いを修正 引数で渡されたオブジェクトが、メソッド中で状態変更されるよーなコード。C 言語なんかでは…

空のリストは渡さないで下さい

if (hogeList != null && !hogeList.isEmpty()) { doHoge(hogeList); }こんな感じのコードがあった。doHoge の javadoc には「引数の List は null とリストが空の場合は呼んじゃダメ」と書いてある。hogeList の中身はユーザの入力値を元に作るので、空のケ…

getter/setter があればクラス?

HogeClass hoge = new HogeClass(); hoge.setAre(str1); hoge.setSore(str2); hoge.setDore(str3); 時々でいいから…引数付きコンストラクタの事思い出して上げて下さい。 未経験でこの業界入って、Java で Struts な Web アプリのチームに配属されて、Action…

「アジャイルソフトウェア開発の奥義」のボーリングにやられる

アジャイルソフトウェア開発の奥義 を今読んでいる。この本の第 6 章でペアプログラミングについて書いており、テスト書きながら段々とコードをシンプルにしていく様が面白おかしく(?)書かれている。そこではボウリングを題材にしているのだが・・・最終的に…

thumbnail です

俺がいるプロジェクトの内情暴露になってしまうけど・・・まぁいいや。ある日、画面周りの仕様について話していた。A さん「あの、ここの機能にそれぞれついてる略称なんですけど」プロジェクト固有の方言、とでもいうべきか。あるデータの一覧出すときに、デフ…

統一感のないネーミング

今回は動作しない系の話ではないですが、非常に悩ましい状況に陥った体験。とりあえず、その部分のコード。void hoge_foo() { int areSore; int DoreKore; int foo_bar; ... }このプロジェクトは関数ローカルにコーディング規則がありませんでした。とはいえ…

warning には意味がある - 2

先のエントリの続き的な内容。今回は動作不良ではなく、C の懐の深さを垣間見ることになりました。とりあえずコード。int aresore1(int *foo, int *var) {...} int aresore2(int *foo, int *var) {...}先に書いたエントリのコードの特徴(関連する関数をまと…

warning には意味がある

昨日のとおりすがり氏のコメントより これでfdが型チェックにひっかからない辺りが…… 型チェック、でもう一件ヒドイ目にあったのを思い出したのでその件について。確か、その日も「なんだかよくわからないけど落ちるのでデバック手伝って」という指令を受け…

どんな使われ方をするかは分からない

今日も今日とて他人様の書いた素晴らしいコード*1のデバッグ。本日俺を最高に「ハイ!」ってやつにさせてくれたコードはこちら。int fd; fd = hogeDeviceOpen(&fd, READ_ONLY);hogeDeviceRead(fd, ...);色々省いてるんで分かり辛いけど、やってることは単純…

コンパイルで防げるものは防ぎたい

中々見つからなかったバグがようやく判明したのでそのメモ。とりあえずソースコード。hoge1.cextern int func_hoge1(int a, int b, int c) { //... }hoge2.cint func_main() { func_hoge1(20, 30); }func_hoge1 の引数は 3 つだが、func_main でそれを呼び出…

Big Driveのわな

我が家のPCのHDDがだんだん手狭になってきたので、引越しを決意しました。いいかげんSATAに移行したかったんだけど、それはまた今度にということで300GB買ってきました。が、Big Driveなんてものを知らなかったので137GB以上のHDDを認識してくれない。ただ、…

自分で作った縄が勝手に首に巻きついてきた

スクリプト言語でちゃちゃっとプログラム作れないと、仕事にしろ研究にしろ自由度が低くなる 要するにその場しのぎのクイックハックも重要だ、というだけの話です。 プログラマなら大なり小なりやっていることだと思うので、異論を唱える人はそうはいないと…

HttpSessionなActionForm

かなり意味不明なタイトルですが、これが一番しっくりくるのであえてコレにしました。ちなみに、この日記内でしか通用しないローカルなネーミングです。 HttpSessionにバインドされたオブジェクトの行方 昨日、blogをブラブラしてたときにある日記を見つけま…

深く考えない行動の結末 - 低水準入出力

深く考えずにこんな感じのコードを書いていた。while (1) { ssize_t ret = read(fd, buf, 1024); if (ret == 0) { break; } if (ret int errno_hoge = errno; printf("ERROR! no=%d\n", errno_hoge); break; } }これはまぁ特に問題なく終わる。 で、readの部…

データ破壊

ここのところ低水準入出力ルーチン使ってディスクを読み書きするコードを相手にしています。その時にやってしまった衝撃的な失敗。それは、ディスクに書き込みを行う機能で、大量のデータを投入したらどうなるかのテスト中のこと。途中までは上手く行くのだ…

エンディアンを知る

リトルエンディアン。エンディアンの話は知っていたが、やはり知識として知っているだけでは失敗するのだなぁと思いました。 失敗コードの概要 C言語でバイナリ読み込みを行うコードを考える。用意されているバイナリデータはこんな感じ。 f2 a5 ea 67 で、…

openとread

Cでファイル入出力するやり方はいろいろあるが、今回はバイナリ読み出しが必要なので低水準ファイル入出力を使うことに。 やはり、原理を理解してはいても失敗するものはするものだなぁと改めて思ってしまいました。 失敗内容の概要 とりあえず、コードはこ…

スタックとヒープ

わかっているようで全然わかっていなかった。これじゃJava厨と呼ばれても仕方ない・・・。プログラマのためのメモリとポインタの基礎 このテの内容を扱った文献はたくさんあるけど、とりあえずこれをメモ。最近ちょっとCを触っているのだが、いわゆるリスト処理…

それなんて返り値

Javaで業務アプリケーション組む分には配列を返り値とするメソッドはそんなに出てこないと思います。コレクションフレームワークに頼った方が何かと楽なんで。そんなこと今更書くことでもないですが・・・。それはさておき。最近、JSPのスクリプトレットを書い…

ダーティ・コード・リーディング

激しく造語。ここ一年アレなコードに色々出会ってきたので、自分なりの汚いコードの読み方をまとめてみたい。 前提知識を捨てる xxという機能だからこんな感じの実装だろう、Javaだからアレはあんな感じに書いてるだろう・・・とか、そういう前提を捨てる。捨て…