
期日に間に合わせるために仕込んだ「やっつけ技」は? 82
ストーリー by hylom
「あとで直そう」は危険シグナル 部門より
「あとで直そう」は危険シグナル 部門より
あるAnonymous Coward 曰く、
本家/.「Dirty Coding Tricks To Make a Deadline」より。
Gamasutraにゲーム開発者らが出荷に間に合うように仕込んだ「やっつけ技」を集めた記事が掲載されている。一部軽く抜粋してみると次のような感じだ。「確かプロジェクトの期限ギリギリの頃の話だったと思うのだが、あるレベルに隠さないといけないオブジェクトがあったのを見つけた。レベルを再びエクスポートするのは避けたかったし、チェックサムを使うのも避けたかった。そこでエンジンに次のようなコードを仕込んで出荷することとなった。
if( level == 10 && object == 56 ) {HideObject();}
その後我々の開発したエンジンを使っていた開発者が『なぜエクスポートしたのにオブジェクトが表示されないのか』と苛立った質問をぶつけてきたのは1年後位だっけかな。」
皆もギリギリ期日に間に合わせるために酷いコーディングを入れたことはあるだろうか?
/.J諸兄方はどのような「秘策」を仕込んだことがあるだろうか?伝え聞いたことのある武勇伝なども合わせてぜひ。
スキルってもんでもないが (スコア:5, 興味深い)
納品の2時間前になぜかエラーがはき出されはじめた。
原因は不明だし調べる時間はない。
そこでエラーの文字色を背景色と同じにして見た目は何もない状態にして納品。
後日、調査して修正したが運良く気づかれる事はなかった。
Re:スキルってもんでもないが (スコア:2, おもしろおかしい)
いや、参考にしたら駄目だろう>モデレータ
Re:スキルってもんでもないが (スコア:3, おもしろおかしい)
#これで同じ手は使えなくなりましたとさ
オフショアアウトソーシングではよくあること (スコア:4, 興味深い)
中国のソフトベンダに外注を出すと、常にそのような局面に出くわします。
ある障害が起きたときに、「この例外を出ないようにしろ」と伝えたときには、
しれっと空catch節で包まれて納品されてきました。
・・・ええ、明らかに悪いのは当方です。
彼らは言われたことをするのに、最大限の省力化を図るのを身上と考えている人たちです。
行間に書いたことを読み取ってもらおうなどというのはただの甘えです。
Re:オフショアアウトソーシングではよくあること (スコア:2)
某オフショアにて
あるJavaScriptがページの修正版が動かない、というのを試験で指摘すると、一時間後「直りました」と。確かに動く。
「原因は何で、どう対応したの?」
「はい、DOCTYPE 行を削除しました」
orz
みんつ
Re:オフショアアウトソーシングではよくあること (スコア:2, 興味深い)
オフショアっつーか、害虫^H^H外注ソフトで。
どー見ても日本語っつーか文字コード周りの仕様チェックミス(多分ソフト内の検索エンジン的に通らずphpがエラー吐く、多分拡張してデータベースに日本語入力できるようにしたときに本来仕様上入らないはずのフィールドに入るようになってしまっていて、値判定条件でエラー起こしてるのにその対応が出来てない)なのに、指摘すると関連する生データをちょいちょいいじってごまかして「対応しました」とほざく。かつエンジン的には直ってないから、別のフィールドに日本語データ入れたりしたらまた止まったり正しく検索にかからなかったり何なり。で、自分ところにしか触れないような風を装って今後もよろしくときたもんだ。
前の素敵上司はそことべたべたにアレだったのでお茶濁しの対応とわかってても受け入れていたものの、今はまともな上司がきていることだし、そこがメンテ契約今年もとったが最後、泣いたり笑ったり出来なくしてやる予定。とりあえずエラーが出る状態を技術的に原因レポート書かせてみたりとか、検索エンジンで論理的にあってるように見える条件で、なぜ合計が正しく取れないか回答をさせてみたりとかして、あとは他社がまともに引き継げるように今年でドキュメントとデータ構造ちゃんと書かせるところまでやらせたいところ、というかなぜ素敵上司以前の人はちゃんとその辺させてなかったのかと小一時間。
Re:オフショアアウトソーシングではよくあること (スコア:2, すばらしい洞察)
> ある障害が起きたときに、「この例外を出ないようにしろ」と伝えたときには、
しれっと空catch節で包まれて納品されてきました。
これって、完璧に正確に指示に従っているだけじゃないですか。省力化なんてしてませんね。
この指示でそれ以外の対処をしたら突っ返されるのが常識ですよ。
多分、彼らが外注でなく元請けならそんな対処はしないでしょうねぇ。
Re:オフショアアウトソーシングではよくあること (スコア:1, すばらしい洞察)
Re: (スコア:0)
>彼らは言われたことをするのに、最大限の省力化を図るのを身上と考えている人たちです。
>行間に書いたことを読み取ってもらおうなどというのはただの甘えです。
そうそう、奴らはきっちり指示しないと「常識的に考えたら普通やるだろ」的なエラーハンドリングすらすっ飛ばすよね。
この違いを把握してないこっちが悪い、と言われると返す言葉がないんだけど、でも…
Re: (スコア:0)
と一瞬考えた・・・けどそれって世界基準じゃ単なる安請け合いなのか、しかも世界基準じゃ安くもないし。
Re: (スコア:0)
そして、大地震が報告されるっと。
一人五役(Re:オフショアアウトソーシングではよくあること (スコア:2, 興味深い)
回路図引くときに、某大手デバイスのセカンドソースではない安物互換品で、今ひとつ信号のツッコミ方が分からんのがあったけど現物が納品直前までこないのでリファレンス通りの回路を作ったら見事に動かなくてあれこれやっても売り込んできた商社のサポートに張り付いてもダメだったので社外の(そしてそのデバイスを売り込んだ某社でもない)知恵袋に泣きついたら、おまえここはこれかまさなきゃダメよ。ってんでロジック数個の子基板でっち上げて納品したとか、
部品のピン配列のCAD設定チョンボして配列さかさになっていたことに試作が来てから気がついてしょうがないから手製変換基板とかケーブルとかでっち上げたりとか
…回路設計から部品調達・調整まで一人で五役六役する羽目になると(ま、そうでなくてチームでやる場合であれ)ハードウェアでもDirty Hackと言うかBoodoo Magic的なソレは結構ありますよ。
# 人が全くいないからって、あんなにきつい職場はもうごめんだ(と言うか歳が歳だから無理だ)、心身ボロボロorz
勿論最悪三次(位までしか許されていない)試作までには潰してしまって、後は量産ロット単位での改版扱い(で、不具合が出たら回収して手半田とジャンパと場合によっては専用子基板で改修、返送と言う…)にしてしまう訳ですが。
試作や評価のための先行品については客先納品をDirty Hack品で出して、そのかわり「限定条件としてここをこーしてあるからこの部分(主に振動とか衝撃のアレ)で破綻するかもしれないです。次の試作で潰すから許してね(はあと)フィードバックお願いしますね(はあと)」と言うラブレター(?)を免罪符代わりにつけるというのは普通にありましたが…これは会社とわず。
Re:オフショアアウトソーシングではよくあること (スコア:1)
>「納品直前に車軸にひび割れが見つかったんだけど、粘土詰めておきました。」とか、
量産品なんて普通にありますよ。
納品されたものが仕様と違うとか、
修理から上がってきたら、見た目を誤魔化しただけだったとか。
自分も納期までに数を揃えて出荷する必要に迫られ、
不良品を気付かなかった振りして出荷した経験があるので、
納品物が良品である保証は無いと思ってます。
#不良出したのは自分で、出荷を指示したのは上司だったが……
うろ覚えだけど4,5年前に
SUNのサーバ周辺機器修理対応を依頼したらメーカ修理になり
納期ギリギリに返ってきたけど何をどう修理したのか判らなかったこととか。
クレームつけたら適当に誤魔化そうとしてきた……orz
バレちまったときは、謝り倒して見せ掛けでも誠意を示さないと泥沼になるのにねえ。
☆大きい羊は美しい☆
Re:オフショアアウトソーシングではよくあること (スコア:1)
元自動車部品の製造業だけど、
量産だったら、不良が見つからないで出荷ってこともあるでしょ。
試作だって、ある程度個数があれば全品合格品なんてあり得ないでしょ。
# 歩留まり悪くて全数検査
# なんてことやったことがあるみたいでしたよ
Re:オフショアアウトソーシングではよくあること (スコア:1, おもしろおかしい)
売り言葉に買い言葉ってやつだな。#1630974 [srad.jp]は言い方悪い。
当然ハード屋だって頭悪い俺のような奴はいる。
間に合わないの分かってたからテープリール空で巻いて納品したら製品入ってねえぞコレどういうことだ!って営業が客先と一緒に怒鳴り込んで来たことはあった。
その時間の間にヒーヒー言いながら仕込んだ製品をそういうこともあろうかともう一本用意しておきましたっていいながら自信たっぷりにおもむろに懐から出したら営業に引っぱたかれた。
その衝撃で製品がリールごと床に落下。検品前の事故のために客先の目の前で対衝撃性チェックの為に全品再検査をやらされて納期に1日半遅れた。
いいか、いい子は納品で遊んじゃダメだ。
これは定番・・・ (スコア:4, 興味深い)
・仕様書を書き換える
バグっているところの仕様書が、非常にファジー(何とでも解釈できる)な内容だったので、
「**のおつもりですか?いや、当方○○のつもりでした。今回はその機能切っておきます。後の修正で対応しましょう。」
で、伸ばす。後に見つかったのは非常にイージーなミス。なぜか納期直前には、見つけられないイージーなバグ。
-- gonta --
"May Macintosh be with you"
やっつけの末路 (スコア:4, おもしろおかしい)
別部署に異動寸前に、運用オペレータから機能追加要望が。
とりあえず1.5日のやっつけ作業で、超へんな画面設計のツールが完成。
ほんとにこれで良いのか念を押すと、動くからいい、でそのまま置き土産リリース。
5年後、運用のボスに話を聞いてみた。
「ツール?今でも大活躍してるよ、うちの新人はまずあれの使い方を覚えることから始めるんだ」
ごめんなさい、新人さん。っていうか、作り直せよ。
また5年後、話を聞いてみた。
「あのツールな、今度別の顧客のシステムにも導入するんだぜ。
画面?もうみんなあれに慣れてるから変えられねーよ」
バグは一時の恥、やっつけは一生の恥だと思った。
やっつけ連鎖 (スコア:3, 参考になる)
外注に作らせた毎年データを積み上げてく類のデータベースで、運用開始が2001年だったんですが、 なぜか年がハードコードされてて2002年以降に対応できるようにはなっておらず、 発注した奴と仕様を書いた奴と検品した奴、ちょっと出てこい、みたいな。
本来の業務外だし、ちらっと見る程度では責任は持てない、外注先に相談してくれ、と、 逃げようとしたのですが「何でもいいからとにかく今すぐ何とかしろ」と厳命され、 ざっと見てひどいことにはならさそうだったので「最低限何とかした。後は知らん」とやっつけました。
# 2003年以降も見た目が同じシステムを使い続けてるけど・・・その後どうなってるのかは知らない
今は無きY証券の商品で (スコア:2, おもしろおかしい)
カットオーバーが4月だったので、3末に契約切れで初日は別の仕事していました。
.....N村のパンフレットが出来るまで商品の仕様が判らないとか本気で言うし^_^;
------------
惑星ケイロンまであと何マイル?
回路の切り替え (スコア:2, 興味深い)
でも、どうしてもテストAとテストBの両方に通る回路にできなかったので、秘密のジャンパを設置。テストAが終わった瞬間にこそっとジャンパを抜いて、テストBだけ通る回路に切り替えてテストBもクリア。
テストに立ち会ったTAの先輩には、「あれ?」と不審がられたようでしたが、「OKですよね!!」と強く言えば自信なさげにスルーしてくださいました。最後に物を言うのはハッタリです。
似た経験 (スコア:2)
僕がやった同様の演習の回避方法は、
・理由は不明だがある部品を実装するとAが通るがBが通らない
・逆に、実装しないとAは通らなくなるがBが通る
よって、
[1] テストAを実施 =>PASS
[2] テストBに移る前にうっかり部品を壊す (取れてしまうようにしたかなんだったか)
[3] 修理すると見せかけて部品を外す (見た目は同じだが導通しないように改造する)
[4] テストBを実施 =>PASS
実演後は証拠隠滅のため、回路図も基板もすぐに捨てた
根性で解決した経験 (スコア:4, 興味深い)
気合と根性で調べまくった結果こんな事が分かりました。
もちろん、「こんな機材でまともに実験できるわけねーだろ」とレポートに書いて提出しましたよ。
リコンフィギュラブル (スコア:2, おもしろおかしい)
再構成可能ハードウェアによる設計欠陥の動的回避だと主張してみれば通ったかもよ?
Re: (スコア:0)
技術的負債 (スコア:2, 興味深い)
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?TechnicalDebt [capsctrl.que.jp]
ご利用は計画的に。
許してください (スコア:2, 興味深い)
とあるゲームでのお話。
描画中に例外がスローされるも、発生条件が稀で原因不明。
マジ時間が無かったので、try~catchで捕まえて何もせずスキップさせました。
一瞬消えるキャラがいるのは、多分そのせいです。。。
(でもサポートに苦情は来なかったみたい)
20年ぐらい前の話(もう時効でいいよね?) (スコア:2, 興味深い)
友達が仕事でMSX3用のHDDユーティリティを作っててカツカレー3杯(笑)でdebugを手伝っていた事があるんだけど、ある時期からいきなりハングアップしやすくなってしまった事があります。ある程度ロールバック等してみたんだけど効果なし。2人でソースとにらめっこしてたんだけど数日追っかけても全然アヤしいところが見つからないと。泊り込みで片方が寝てる間に片方がチェックという状況だったんだけど、ある時友達が寝ている時にふとコード行の最後に
# だったかな? まあそんな感じのコード
を入れたらピタッとハングアップしなくなったと。特にヒープを使うようなコードでもなかったし、逆にスタックエリアを同じように増やすだけでは改善しなかったり。何度もその行をつけたり外したりして比較したんだけど確かにこれで改善される…でもコード上でそのあたりのメモリを参照したり、スタックでつぶされている気配もなし。何でコレで直るんだろ…と思ってたけど結局それで納品したらしい(256についてはいろいろ実験して多少小さくしたような記憶もあるけどよく覚えていない)。もっともMSX3が派手にこけたせいでそのプログラムの存在はほとんど知られること無く終わったらしい。
# 当然ながらこういう手を使うのはそれが始めてではなく
# その前にも一度同じ手で逃げられた経験があったり。
# でもなぜそれで動いてしまうのか未だに理解できず…
DB性能改善 (スコア:2, 興味深い)
本番環境のDBに接続すると応答時間が遅いため、システム起動時にDB内容を読み、値を変数や分岐条件に埋め込んだCソースを自動生成しコンパイル、それを以後実行という凶悪な変更で、2桁近い性能速度を達成しました……。
参照のみだから問題ないけど、自分でもよくあんな事としたよなぁと思う。
やっつけすぎる (スコア:2, 参考になる)
そういえば、定時ちょっと前に自分の仕事を終わらせてのんびり
していた時に、おえらいさんからプロジェクトがまったく
できてないのでヘルプして!と電話がきたことがあって…
聞けば約10KL程度で2~3ヶ月間と比較的時間があったので
試しに新人数人にやらせてみたものの、実はお客さんに渡して
テストしてもらう直前になって全く(数行すら!)できていないという、
驚愕の事実。
あんたはいったい何を管理していたんだと…
まぁ職場に0泊3日で当日朝までになんとかコンパイルが通るところ
まではできたものの、もちろんまともに動くわけがなく^^;
ただ、後日修正しますということでその場を逃れることはできました。
最終的には要求仕様にも問題があって、まともに動くようになるまでに
1年かかりました。やっぱり10KL以上のやっつけコードなんて書くもの
じゃないですね...
# そんなことになる前に策を打てるようちゃんと周りも見ておかないと
# ダメだと気づいた3年目の春
よくあるのは (スコア:1)
#そういうのに限って本番もちゃんと動くからタチが悪い
Re:よくあるのは (スコア:2)
あれ?これって正しい使い方ですよね?
# それとも何か固定じゃない値がうれしい状況ってのがあるのかな?
朝摘み新鮮やっつけ (スコア:1)
テクニックというほどもなく素朴なヤツだけど、とれたて新鮮。今朝やったばかりのやつ。
Java SwingでGUI書いてて、どこでコンポーネントのサイズ計算がおかしいのか
(Boxレイアウトマネージャとパネルが何重にも入れ子になってて適切にサイズ情報が伝わっていないように見える。)
どうしてもコンポーネントの一部が重なるので、トップレベルのウィンドウを上下方向に25%伸ばした。
結果、表示は間延びしたが取りあえず重ならなくなった。
すばらしい生産性 (スコア:1, 参考になる)
ある拡張ボードを2枚使えるようにドライバを改造するとき、
通常なら配列で処理するのだろうが、あろうことか関数名や
グローバル変数名に0と1をつけてきたものを作ってきた。
真偽不明の後日談として、時間あたりの開発量(行数?)が
良かったので表彰もされたそうだ。
Re:すばらしい生産性 (スコア:1, おもしろおかしい)
・変更したコードの可読性は全く損なわれていない。
・今後3枚以上に対応させる場合でも、配列にすべき箇所=サフィックスを付けた箇所なので見通しがよい。1枚対応版から一足飛びに配列版にするとたぶんハマる。
表彰されても不思議ではないと思います。
顔文字? (スコア:1)
開発者じゃないのでコレに対するツッコミは入れられないのですが、
最後の ();} が顔文字に見えてユーモアというかブラックジョークの
センスがあるなぁとか思ってしまいました。
なんだったか忘れたけど (スコア:1, おもしろおかしい)
みたいな感じで、同じソース内にあるhoge()から-1が返る原因調べずに対処してたのは見たことがある。
こまった (スコア:1, おもしろおかしい)
この匿名投稿の告白の一つが何の件の誰だかわかるような気がする
#きがする,
#だけだよね?
ある社内ツールで (スコア:1, おもしろおかしい)
従業員半分になったから問題なかったけど。
4月~12月 (スコア:1)
1月開始同年12月期末のデータと4月開始翌年3月期末のデータが混在するシステムで12月から1月の切り替わりが一部うまくいかないため、プログラムの一部を停止して4月から12月のみで運用開始して10月頃に完成版に入れ替えた事があります。
#というか、1区画16MByteが最大とかいう時代の当時のパソコンでこんなヘンな処理なんて無茶ですよ・・・。
機能を隠すのとは逆に (スコア:0)
リリース直前の夜11時、1ヵ月ほどかけて開発した機能を呼び出すためのGUIが ない ことに気づき、慌てて急造のボタンを追加したことは今では懐かしい思い出です。このボタン、やっぱり使いにくい仕上がりになってしまい、のちのバージョンアップで修正しました。
社内向けの自社開発ツールだったからこんなことが出来たわけですが・・・
# いや、ダメなんじゃないか?
# 関係者に知れると嫌なのでACで
コメントアウト (スコア:0)
Re: (スコア:0)
printf文を消さないで!
Re:コメントアウト (スコア:1)
NEWS OSだったっけ、
printf()でデバッグメッセージを出しながら動作させると動く
取ると動かない。
int main(int ac, char *av[])
{
printf("");
まさか…(Re:コメントアウト (スコア:1)
携帯の勇者さん [2ch.net]ですか?
仕様が全然確定しないから (スコア:0)
例↓(擬似コード)
if (flag)
case (flag==0)
処理A();処理B();処理C();
case (flag==1)
処理A();処理C();
case (flag==2)
EXIT;
case (flag==3)
EXIT;
case (flag==4)
処理A();処理B();処理C();
:
以下、続く
仕様がどう転ぶか分からないんだから、最適化なんてやってられません。
Re: (スコア:0)
これは、boolean へのキャストと == 演算子 がオーバーロードされていると読めば良いのか?
Re: (スコア:0)
Re: (スコア:0)
ifの「flag」とcaseの「flag」は別物だと思いますよ。同じならせめてcaseだけで書きたいし。
はっ!? 擬似コードだし、0未満がfalseな言語仕様、とか??(いや、それはない)
Re: (スコア:0)
そこで、 goto #1630638 [srad.jp].
Re: (スコア:0)
最初はif分岐羅列で書いてたけど、
さすがにswitch~caseで書くぐらいしないとかっこ悪いとおもって修正したら
微妙に間違ってしまったとエスパー