yooseeによる
2005年09月26日 12時57分の掲載
良いコードそうに見えたのにねぇ...部門より。
良いコードそうに見えたのにねぇ...部門より。
tamo 曰く、 "善意を装う C コンテスト
として /.J でも記事になった、「読みやすくて安全に見えるけどこっそり悪いことをする」プログラミングコンテスト、
The Underhanded C Contest
の
結果
が出ました。
受賞者は力作の
M Joonas Pihlaja and Paul V-Khuong 組と
エレガントな小品の Natori Shin 氏に決定したそうです。
今年のお題は「画像処理に識別情報埋め込みを混入」でした。
Natori 氏の作品は、単に減色するだけです。
どういう罠が組み込まれているのか、皆さんは見付けられますか?"
この議論は賞味期限が過ぎたので、保存されている。
新たにコメントを書くことはできない。
Re:ぱっと見 (スコア:3, 参考になる)
四角い部屋を丸く拭くなという教訓のようです。
親コメント
Re:ぱっと見 (スコア:2, 参考になる)
| matrixは条件付きで初期化を拒否してるようですね。
| 四角い部屋を丸く拭くなという教訓のようです。
このコメントでやっとわかりました。
こんな短い&定数の少ないコードで良くやるなあ!(感嘆
で、もっと詳しい説明が natori.zip 中の、
decoder-and-spoiler/README.txt ですね。
| The output fluctuation is caused by the uninitialized convolution
| matrix. Most elements of the matrix are newly assigned, but some of the
| outer elements are not assigned. The unassigned part contains most of
| the return values from stat(WORKFILE) call. Since the WORKFILE is
| newly generated for each run, the return from the stat call differs
| for each run (differs in last access time, last modified time, i-node
| number, etc.). This causes some subtle changes in the output images.
なるほど。これなら、毎回実行して、毎回違う値を埋め込めそう。
画像処理やノイズ除去の仕組みは無知でわからないのですが、
私にはこれだけでも十分に目からウロコでした。
親コメント
Re:C言語で書かれてもさっぱりわからん (スコア:3, おもしろおかしい)
親コメント
Re:C言語で書かれてもさっぱりわからん (スコア:2, 興味深い)
でも今ではK&Rの第1版って逆になかなか目にすることもできませんし買おうにも手に入りにくい状況です。しかも今さら勉強してもまさに「参考文献」にしかならないので、わざわざ取り寄せるまでもないと思われます。その意味では知らないままに間違えても仕方ないかも。(文中に「?」も付いてますから本人もはっきりとは分かっていない事を認識した上で書かれてますし。)
でも汚いコードって事はないと思うのだけどな。ブランクの空け方とか「好みの問題」で気になる点はありましたけど、非常に簡潔できれいなソースに見えました。TAB4で見ると変になりますが。
#うちはK&R第1版の翻訳版「プログラミング言語C第1版」を買ってるのだけど、仕事場で行方不明!これだけは失いたくない~!
親コメント
Re:ときに昔は... (スコア:1)
案件数か、ステップ数か、ファイル容量か、印刷したコードの重量か、キングファイルの冊数か・・・(おぃ
親コメント
Re:ときに昔は... (スコア:1)
親コメント
タブとインデント (スコア:1, 参考になる)
> tabが8文字
\tに期待している挙動は8桁タブで、ソースは4桁インデントで
書かれていますが、この両者が一致していないのは個人的に気に入らない。
DOS/Windows系では、「.c」という拡張子を持つファイル内では\tの挙動は
4桁タブであることを期待する文化があるように思います。たとえば、
MiFESやVz(やその流れを受けたWZなど)はそのような挙動です。一方、
UNIX系では、どんな場合でも\tは8桁タブという意識があるように思います。
その両者をソースが行き来するとき、\tに期待する挙動にかかわらず、
インデントは\tひとつで書かれてあると、Windows/DOS上でもUNIX上でも
一応の見栄えは保てます。まあ、インデントをすべて複数個の\x20で表現
しても、見栄えは保てますが、入力が面倒なので。(Emacsを使えば楽に
入力できますが、考え事をしながら入力しているときの削除が面倒)。
# もしかして、タブとインデントの話題って、Emacs vs Vi や Linux vs BSD
# のような、典型的なフレームの元でしたっけ?
親コメント
Re:ときに昔は... (スコア:1)
逆に、VHDLでもハードウェアだけでなくシミュレーション記述も(ハードウェアとして実装しない物も含めて)書けます。
プログラミング言語とHDLの区別に何の意味が有るのでしょうか。
親コメント
Re:どの辺が汚いコードだったのかを (スコア:2, おもしろおかしい)
親コメント