あなたがこれまでに遭遇したソース コードの中で、最も優れたコメントは何ですか?
518 に答える
私は、非建設的なコメント、コードの詩、ちょっとしたジョークをほとんどのプロジェクトに埋め込んでいます (コードをリリースする前に、直接攻撃的なものを削除する十分な感覚を持っていますが)。これは私が特に気に入っているもので、設計が不十分な「神のオブジェクト」のはるか下に配置されています。
/**
* For the brave souls who get this far: You are the chosen ones,
* the valiant knights of programming who toil away, without rest,
* fixing our most awful code. To you, true saviors, kings of men,
* I say this: never gonna give you up, never gonna let you down,
* never gonna run around and desert you. Never gonna make you cry,
* never gonna say goodbye. Never gonna tell a lie and hurt you.
*/
申し訳ありません!!!!仕方なかった……!
もう1 つは、あまり直感的ではないクラスの 1 つで非常に誘惑されていますが、実際には公開していないことを認めます。
//
// Dear maintainer:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 42
//
Exception up = new Exception("Something is really wrong.");
throw up; //ha ha
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
stop(); // Hammertime!
これは、モロンが私のコードを台無しにするのを防ぐようです...
// Autogenerated, do not edit. All changes will be undone.
// sometimes I believe compiler ignores all my comments
// I dedicate all this code, all my work, to my wife, Darlene, who will
// have to support me and our three children and the dog once it gets
// released into the public.
//Code sanitized to protect the foolish. using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Web.UI; namespace Mobile.Web.Control { /// <summary> /// Class used to work around Richard being a fucking idiot /// </summary> /// <remarks> /// The point of this is to work around his poor design so that paging will /// work on a mobile control. The main problem is the BindCompany() method, /// which he hoped would be able to do everything. I hope he dies. /// </remarks> public abstract class RichardIsAFuckingIdiotControl : MobileBaseControl, ICompanyProfileControl { protected abstract Pager Pager { get; } public void BindCompany(int companyId) { } public RichardIsAFuckingIdiotControl() { MakeSureNobodyAccidentallyGetsBittenByRichardsStupidity(); } private void MakeSureNobodyAccidentallyGetsBittenByRichardsStupidity() { // Make sure nobody is actually using that fucking bindcompany method MethodInfo m = this.GetType().GetMethod("BindCompany", BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (m != null) { throw new RichardIsAFuckingIdiotException("No!! Don't use the fucking BindCompany method!!!"); } // P.S. this method is a joke ... the rest of the class is fucking serious } /// <summary> /// This returns true if this control is supposed to be doing anything /// at all for this request. Richard thought it was a good idea to load /// the entire website during every request and have things turn themselves /// off. He also thought bandanas and aviator sunglasses were "fuckin' /// gnarly, dude." /// </summary> protected bool IsThisTheRightPageImNotSureBecauseRichardIsDumb() { return Request.QueryString["Section"] == this.MenuItemKey; } protected override void OnLoad(EventArgs e) { if (IsThisTheRightPageImNotSureBecauseRichardIsDumb()) { Page.LoadComplete += new EventHandler(Page_LoadComplete); Pager.RowCount = GetRowCountBecauseRichardIsDumb(); } base.OnLoad(e); } protected abstract int GetRowCountBecauseRichardIsDumb(); protected abstract void BindDataBecauseRichardIsDumb(); void Page_LoadComplete(object sender, EventArgs e) { BindDataBecauseRichardIsDumb(); } // the rest of his reduh-ndant interface members public abstract string MenuItemName { get; set; } public abstract string MenuItemKey { get; set; } public abstract bool IsCapable(CapabilityCheck checker, int companyId); public abstract bool ShowInMenu { get; } public virtual Control CreateHeaderControl() { return null; } } }
更新: コードの元の作成者は自分自身を捨てたので、それが当然である場合はクレジットを与えなければなりません. Dan McKinleyは、私が入社した直後に私がいた会社を去りました。彼はコードについて詳しく話し、いくつかの背景と、'Richard' が書いたいくつかの "WTF" について説明しています。
// somedev1 - 6/7/02 Adding temporary tracking of Login screen
// somedev2 - 5/22/07 Temporary my ass
// drunk, fix later
冗談だったらいいのに。そして、コードを書いた開発者を知っているので、彼は文字通りそれを意味していたと思います。
// Magic. Do not touch.
// I'm sorry.
return 1; # returns 1
/* This is O(scary), but seems quick enough in practice. */
その後にネストされた 4 つの for ループ
// Replaces with spaces the braces in cases where braces in places cause stasis
$str = str_replace(array("\{","\}")," ",$str);
「最高のコメント」について尋ねられたとき、私たちは皆、見つけることができる最悪のコメントで答えるということは、私たちの職業について多くを語っています...
long john; // silver
Catch (Exception e) {
//who cares?
}
/**
* Always returns true.
*/
public boolean isAvailable() {
return false;
}
コメントに頼らないでください...
/*
* You may think you know what the following code does.
* But you dont. Trust me.
* Fiddle with it, and youll spend many a sleepless
* night cursing the moment you thought youd be clever
* enough to "optimize" the code below.
* Now close this file and go play with something else.
*/
try {
} finally { // should never happen
}
const int TEN=10; // As if the value of 10 will fluctuate...
#Christmas tree initializer
toConnect = []
toRead = [ ]
toWrite = [ ]
primes = [ ]
responses = {}
remaining = {}
30ページのxsltの真ん中くらい
<!-- Here be dragons -->
long long ago; /* in a galaxy far far away */
完全にコメント解除された 2000 行のメソッドで
{
{
while (.. ){
if (..){
}
for (.. ){
}
.... (just putting in the control flow here, imagine another few hundred ifs)
if(..) {
if(..) {
if(..) {
...
(another few hundred brackets)
}
}
} //endif
(私は実際に、それがどれほど悪いかを確認するためだけに、すべてのブラケットを調べました。そして、フォーマットなしで、これを得ました:
{{{{}}{}{}{}{}}{{}{{}{}{}{}{}{}{{}{}}{}{}{{}{}{}{}{}{}{}{}{}{}{}{{}}}{{}{{}}{{{}}}{{}{}{}{}{}{}{}{{}}{}{{{}}{}{{}{}}{{{}}{}{}{}{}}{{}}}{}{{}{}{}{{}{{}}{}}{{}}}{{}}{{}}{{}}{}{{}}{{}}{{}}{{}{}{}}{}{}{{{}}{{}}}{}{}{}{}}{{{}{{}{}{}{{}{}{}{}{}{}}{}}{{}}{{}{}}}{{}}{{}}}{{}}{{}}{}{}{}{}{{}}{{}{}{}{}}}}{}{}}{{}{{{}{}{}{}}}}{{}{{{}}}}{{}{{{}{{}}{}{{}}{}{{}{}}{{}}{}{{}}}{{}}}}{{}{}{}{}{}{{{} {{{{}}{}{}{}{}}{{}{{}{}{}{}{}{}{{}{}}{}{}{{}{}{}{}{}{}{}{}{}{}{}{{}}}{{}{{}}{{{}}}{{}{}{}{}{}{}{}{{}}{}{{{}}{}{{}{}}{{{}}{}{}{}{}}{{}}}{}{{}{}{}{{}{{}}{}}{{}}}{{}}{{}}{{}}{}{{}}{{}}{{}}{{}{}{}}{}{}{{{}}{{}}}{}{}{}{}}{{{}{{}{}{}{{}{}{}{}{}{}}{}}{{}}{{}{}}}{{}}{{}}}{{}}{{}}{}{}{}{}{{}}{{}{}{}{}}}}{}{}}{{}{{{}{}{}{}}}}{{}{{{}}}}{{}{{{}{{}}{}{{}}{}{{}{}}{{}}{}{{}}}{{}}}}{{}{}{}{}{}{{{}{}{{}}{}}}{}}{{}}{{}{}}{{}{{}{{}}}}{{{}{{{}}}}}{{{{{}}}}}{}{}{}{{{{}}}{}{}}{{}{{}}}}{}{{}}{}}}{}}{{}}{{}{}}{{}{{}{{}}}}{{{}{{{}}}}}{{{{{}}}}}{}{}{}{{{{}}}{}{}}{{}{{}}}}
endif は 800 行目あたりに表示されます)
//This code sucks, you know it and I know it.
//Move on and call me an idiot later.
// If this comment is removed the program will blow up
double penetration; // ouch
/////////////////////////////////////// this is a well commented line
// I don't know why I need this, but it stops the people being upside-down
x = -x;
// I am not sure if we need this, but too scared to delete.
最も古典的なものの 1 つは、有名な「最終定理」についてのピエール ド フェルマーのコメントです。「このページの余白は、証明を書き留めるには少し小さすぎます」。
証拠が見つかるまでに350年以上かかりました...
(ウィキペディアによると、これは元のテキストです:)
duos cubos の cubum autem、duos quadratoquadratos の aut quadratoquadratum、et generaliter nullam in infinitum ultra quadratum potestatem in duos eiusdem nominis fas estdividere cuius rei demolem mirabilem sane detexi. Hanc marginis exguitas non caperet.
...英語に翻訳:
(It is impossible to separate a cube into two cubes, or a fourth power into two fourth powers, or in general, any power higher than the second into two like powers. I have discovered a truly marvellous proof of this, which this margin is too narrow to contain.)
Java 1.2 SwingUtilities から:
doRun.run(); // ... "a doo run run".
# To understand recursion, see the bottom of this file
ファイルの下部:
# To understand recursion, see the top of this file
これは、私たちのチームのマイクロ管理効果の本番コードでの生きた証拠でした。
// I am not responsible of this code.
// They made me write it, against my will.
... コードとコーディングガイドラインの両方を開発者の喉に押し付けるのが好きだった、私たちの最愛のテクニカルディレクターによって考案された、最適とは言えないコードが続きました (*)。
もちろん、プロジェクト リーダーがバグの原因を探し、それが「最適ではないコード」内にあることを発見したとき、彼はあまり面白くありませんでした...
(*) もちろん、Mighty VB King について言及しています...Mighty VB Kingのパワーの完全な大きさを評価したい場合は、次の SO 投稿を読むことができます。従わざるを得なかった?...
I went through a sleep-deprived coding run and started only writing comments that were quotes from Fight Club.
Still trawling through the code years later I find a comment that makes me laugh. Most of them just random thoughts. I did however keep my comments to lines ratio pretty good!
// This shouldn't happen. The only way this can happen is if the
// <code>JFileChooser</code> has returned a <code>File</code> that doesn't exist
// on the system. If this happens we can't recover, and there is more than likely
// a rip in the space time continuum that the user is too distracted by to notice
// anything else.
/**
* This method leverages collective synergy to drive "outside of the box"
* thinking and formulate key objectives into a win-win game plan with a
* quality-driven approach that focuses on empowering key players to drive-up
* their core competencies and increase expectations with an all-around
* initiative to drive down the bottom-line. I really wanted to work the word
* "mandrolic" in there, but that word always makes me want to punch myself in
* the face.
*/
private void updateFileCountLabel() {
何年も前 (1994 年頃)、私は大規模な多国籍ソフトウェア会社の Oracle PRO*C アプリケーションに取り組んでいました。私が取り組んでいたアプリケーションは大規模な Oracle アプリケーションであり、データを整理してあらゆる種類の集計計算を実行するユーティリティが一晩中実行されていました。バッチ ジョブとして何かを実行する必要があるたびに、このユーティリティに押し込まれ、ご想像のとおり、完全な怪物になりました。また、このような大規模なプログラムに対して寄せられたコメントの数が少ないことも注目に値します。
それが持っていた数少ないコメントの1つは、純粋なWTF'nessについて私が今まで見た中で最高のコメントのままです...私は、数百行の長さで、その真ん中にある関数のバグを見つけようとしていました.関数内のコメント:
/* I did this the other way */
今日まで、それは私が今まで見た中で最高のコメントです。
/* Please work */
//Dear future me. Please forgive me.
//I can't even begin to express how sorry I am.
そして、今日これを見つけました:
//private instance variable for storing age
public static int age;
/* You are not meant to understand this */
//I am not sure why this works but it fixes the problem.
これは、意図された問題を技術的に修正するコードのセットの前でしたが、他の3つの問題を壊しました....
// no comments for you
// it was hard to write
// so it should be hard to read
options.BatchSize = 300; //Madness? THIS IS SPARTA!
/* Halley's comment */
DBAは、サードパーティによって作成された3000行のストアドプロシージャの途中でこれを検出しました。
/* IF DOLPHINS ARE SO SMART, HOW COME THEY LIVE IN IGLOOS? */
// I have to find a better job
js コード:
// hack for ie browser (assuming that ie is a browser)
/* Emits a 7-Hz tone for 10 seconds.
True story: 7 Hz is the resonant frequency of a
chicken's skull cavity. This was determined
empirically in Australia, where a new factory
generating 7-Hz tones was located too close to a
chicken ranch: When the factory started up, all the
chickens died.
Your PC may not be able to emit a 7-Hz tone. */
main()
{
sound(7);
delay(10000);
nosound();
}
(Turbo C バージョン 2.0 リファレンス ガイドのサウンド機能)
...または死ぬ//雌犬
お気に入りの冒とく的な表現をGoogle コード検索に入力してみてください。私のお気に入りの例のいくつか:
/* These magic numbers are fucking stupid. */
/* Dear free software world, do you NOW see we are fucking
things up?! This is insane! */
/* We will NOT put a fucking timestamp in the header here. Every
time you put it back, I will come in and take it out again. */
# However, this only works if there are MULTIPLE checkboxes!
# The fucking JS DOM *changes* based on one or multiple boxes!?!?!
# Damn damn damn I hate the JavaScript DOM so damn much!!!!!!
/* TODO: this is obviously not right ... this whole fucking module
sucks anyway */
/* FIXME: please god, when will the hurting stop? Thus function is so
fucking broken it's not even funny. */
そして私の個人的なお気に入り
# code below replaces code above - any problems?
# yeah, it doesn't fucking work.
リンクリストの初期化時:
last = first; /* Biblical reference */
簡潔で陽気。
誰かが「最高の」コメントが最悪のコメントをもたらしていると不平を言った。私見、彼らはもっと面白くて、とても「より良い」です、しかしここに私が今まで読んだ正直な最高のコメントがあります:
/*
Major subtleties ahead: Most hash schemes depend on having a "good" hash
function, in the sense of simulating randomness. Python doesn't: its most
important hash functions (for strings and ints) are very regular in common
cases:
>>> map(hash, (0, 1, 2, 3))
[0, 1, 2, 3]
>>> map(hash, ("namea", "nameb", "namec", "named"))
[-1658398457, -1658398460, -1658398459, -1658398462]
>>>
This isn't necessarily bad! To the contrary, in a table of size 2**i, taking
the low-order i bits as the initial table index is extremely fast, and there
are no collisions at all for dicts indexed by a contiguous range of ints.
The same is approximately true when keys are "consecutive" strings. So this
gives better-than-random behavior in common cases, and that's very desirable.
OTOH, when collisions occur, the tendency to fill contiguous slices of the
hash table makes a good collision resolution strategy crucial. Taking only
the last i bits of the hash code is also vulnerable: for example, consider
[i << 16 for i in range(20000)] as a set of keys. Since ints are their own
hash codes, and this fits in a dict of size 2**15, the last 15 bits of every
hash code are all 0: they *all* map to the same table index.
But catering to unusual cases should not slow the usual ones, so we just take
the last i bits anyway. It's up to collision resolution to do the rest. If
we *usually* find the key we're looking for on the first try (and, it turns
out, we usually do -- the table load factor is kept under 2/3, so the odds
are solidly in our favor), then it makes best sense to keep the initial index
computation dirt cheap.
The first half of collision resolution is to visit table indices via this
recurrence:
j = ((5*j) + 1) mod 2**i
For any initial j in range(2**i), repeating that 2**i times generates each
int in range(2**i) exactly once (see any text on random-number generation for
proof). By itself, this doesn't help much: like linear probing (setting
j += 1, or j -= 1, on each loop trip), it scans the table entries in a fixed
order. This would be bad, except that's not the only thing we do, and it's
actually *good* in the common cases where hash keys are consecutive. In an
example that's really too small to make this entirely clear, for a table of
size 2**3 the order of indices is:
0 -> 1 -> 6 -> 7 -> 4 -> 5 -> 2 -> 3 -> 0 [and here it's repeating]
If two things come in at index 5, the first place we look after is index 2,
not 6, so if another comes in at index 6 the collision at 5 didn't hurt it.
Linear probing is deadly in this case because there the fixed probe order
is the *same* as the order consecutive keys are likely to arrive. But it's
extremely unlikely hash codes will follow a 5*j+1 recurrence by accident,
and certain that consecutive hash codes do not.
The other half of the strategy is to get the other bits of the hash code
into play. This is done by initializing a (unsigned) vrbl "perturb" to the
full hash code, and changing the recurrence to:
j = (5*j) + 1 + perturb;
perturb >>= PERTURB_SHIFT;
use j % 2**i as the next table index;
Now the probe sequence depends (eventually) on every bit in the hash code,
and the pseudo-scrambling property of recurring on 5*j+1 is more valuable,
because it quickly magnifies small differences in the bits that didn't affect
the initial index. Note that because perturb is unsigned, if the recurrence
is executed often enough perturb eventually becomes and remains 0. At that
point (very rarely reached) the recurrence is on (just) 5*j+1 again, and
that's certain to find an empty slot eventually (since it generates every int
in range(2**i), and we make sure there's always at least one empty slot).
Selecting a good value for PERTURB_SHIFT is a balancing act. You want it
small so that the high bits of the hash code continue to affect the probe
sequence across iterations; but you want it large so that in really bad cases
the high-order hash bits have an effect on early iterations. 5 was "the
best" in minimizing total collisions across experiments Tim Peters ran (on
both normal and pathological cases), but 4 and 6 weren't significantly worse.
Historical: Reimer Behrends contributed the idea of using a polynomial-based
approach, using repeated multiplication by x in GF(2**n) where an irreducible
polynomial for each table size was chosen such that x was a primitive root.
Christian Tismer later extended that to use division by x instead, as an
efficient way to get the high bits of the hash code into play. This scheme
also gave excellent collision statistics, but was more expensive: two
if-tests were required inside the loop; computing "the next" index took about
the same number of operations but without as much potential parallelism
(e.g., computing 5*j can go on at the same time as computing 1+perturb in the
above, and then shifting perturb can be done while the table index is being
masked); and the dictobject struct required a member to hold the table's
polynomial. In Tim's experiments the current scheme ran faster, produced
equally good collision statistics, needed less code & used less memory.
Theoretical Python 2.5 headache: hash codes are only C "long", but
sizeof(Py_ssize_t) > sizeof(long) may be possible. In that case, and if a
dict is genuinely huge, then only the slots directly reachable via indexing
by a C long can be the first slot in a probe sequence. The probe sequence
will still eventually reach every slot in the table, but the collision rate
on initial probes may be much higher than this scheme was designed for.
Getting a hash code as fat as Py_ssize_t is the only real cure. But in
practice, this probably won't make a lick of difference for many years (at
which point everyone will have terabytes of RAM on 64-bit boxes).
*/
int MyFunction()
{
// There once was a man named Dave
int Result = 0;
// Whose code just wouldn't behave
MyObject *Ptr = new MyObject();
// He left to go to a meetin'
Result = Ptr->DoSomething();
// And left his memory a leakin'
return Result;
}
C++コメント
if(m_measures =/*=*/ --index)
{
....
/*
This isn't the right way to deal with this, but today is my last day, Ron
just spilled coffee on my desk, and I'm hungry, so this will have to do...
*/
return 12; // 12 is my lucky number
mov si, pCard ; captain?
// I know the line below is wrong, but it came that way from our IP vendor, and
// the driver won't work if you "fix" it. I've had to revert this change 4 times
// now. Leave it alone, or I will hunt you down and hurt you
if (r = 0) {
/* bunch of code here */
}
else
{
/* even more code here */
}
2004年のWindowsリークから、
__inline BOOL
SearchOneDirectory(
IN LPSTR Directory,
IN LPSTR FileToFind,
IN LPSTR SourceFullName,
IN LPSTR SourceFilePart,
OUT PBOOL FoundInTree
)
{
//
// This was way too slow. Just say we didn't find the file.
//
*FoundInTree = FALSE;
return(TRUE);
}
// this comment included for the benefit of anyone grepping for swearwords: shit.
私は誰かのコードでこのコメントを見ました:
// This comment is self explanatory.
彼は「変数」と言うつもりだったと思いますが、間違いで面白いコメントが1つありました...ここでの循環ロジックと、それを書くことの無益さを考えてください。
} catch (PartInitException pie) {
// Mmm... pie
try {
}
catch (SQLException ex) {
// Basically, without saying too much, you're screwed. Royally and totally.
}
catch(Exception ex)
{
//If you thought you were screwed before, boy have I news for you!!!
}
かなりのコメントではありませんが、goto ラベル
ICantBelieveImUsingAGoto:
class Act //That's me!!!
{
}
ライブラリ関数に定数を渡すためだけに宣言しなければならなかったローカル変数の隣:
// This only exists because Scott doesn't know how to use const correctly
virgin = 0; /* you're not a virgin anymore, sweety */
public boolean isDirty() {
//Why do you always go out and
return dirty;
}
* ...and don't just declare it volatile and think you've solved
* the problem. You young punks think you know what volatile
* means... why in my day we had to cast it volatile uphill
* both ways, and the code still didn't work! Whippersnappers...
オリジナルの Doom には、動くことができない静的な壁を持つエンジンがありました。その結果、すべてのドアが垂直に開きました。水平に動くことはできませんでした。ソースコードがリリースされた後、コードを調べていて、コメントアウトされたコードの大きなブロックの先頭に、ドアを処理するためのソースファイルでこれを見たとき、私は爆笑しました:
// UNUSED
// Separate into p_slidoor.c?
#if 0 // ABANDONED TO THE MISTS OF TIME!!!
//
// EV_SlidingDoor : slide a door horizontally
// (animate midtexture, then set noblocking line)
//
Quake III のソースから取得したもので、ランダムなスラッシュドットの投稿で偶然これを見つけました。ファイルの完全なソースはここにあります。これは、逆平方根を計算する特に高速な方法です。最高のコメントは?確かにそれは一般的なものですが、魔法を行うラインに取り付けられていることを考えると、それが素晴らしいものです.
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
#ifndef Q3_VM
#ifdef __linux__
assert( !isnan(y) ); // bk010122 - FPE?
#endif
#endif
return y;
}
def format_ticket_content(text, recursive = true)
if text.is_a?(TicketNote)
note = text
text = note.content
else
note = nil
end
## Safety pig has arrived!
text = h(text)
## _
## _._ _..._ .-', _.._(`))
## '-. ` ' /-._.-' ',/
## ) \ '.
## / _ _ | \
## | a a / |
## \ .-. ;
## '-('' ).-' ,' ;
## '-; | .'
## \ \ /
## | 7 .__ _.-\ \
## | | | ``/ /` /
## /,_| | /,_/ /
## /,_/ '`-'
##
// John! If you'll svn remove this once more,
// I'll shut you, for God's sake!
// That piece of code is not “something strange”!
// That is THE AUTH VALIDATION.
そして、あなたはどう思いますか?以下のコードは安全に「svn を削除」しました。
これは私自身のコードで数回発生しました。明らかに私はそれに複数回触れました:
// TODO: Fix this. Fix what?
//MailBody builders for two outgoing messages
StringBuilder hanz = new StringBuilder();
StringBuilder franz = new StringBuilder();
読んでいて今でもちょっと笑ってしまいます…
Repeat
...
Until (JesusChristsReturn) ' Not sure
最後の仕事を辞めたとき、ソースにいくつかのアスキーアートを埋め込みました...
,_-=(!7(7/zs_. .=' ' .`/,/!(=)Zm. .._,,._.. ,-`- `,\ ` -` -`\\7//WW. ,v=~/.-,-\- -!|対)iT-|s|\-.' `///mK%. v!`i!-.e]-g`bT/i(/[=.Z/m)K(YNYi.. /-]i44M. v`/,`|v]-DvLcfZ/eV/iDLN\D/ZK@%8W[Z..`/d!Z8m //,c\(2(X/NYNY8]ZZ/bZd\()/\7WY%WKKW) -'|(][%4. ,\\i\c(e)WX@WKKZKDKWMZ8(b5/ZK8]Z7%ffVM, -.Y!bNMi /-iit5N)KWG%%8%%%%W8%ZWM(8YZvD)XN(@. [ \]!/GXW[ / ))G8\NMN%W%%%%%%%%%%%8KK@WZKYK*ZG5KMi,- vi[NZGM[ i\!(44Y8K%8%%%**~YZYZ@%%%%%4KWZ/PKN)ZDZ7 c=//WZK%! ,\v\YtMZW8W%%f`,`.t/bNZZK%%W%%ZXb*K(K5DZ -c\\/KM48 -|c5PbM4DDW%f v./c\[tMY8W%PMW%D@KW)Gbf -/(=ZZKM8[ 2(N8YXWK85@K -'c|K4/KKK%@ V%@@WD8e~ .//ct)8ZK%8` =)b%]Nd)@KM[ !'\cG!iWYK%%| !M@KZf -c\))ZDKW%` YYKWZGNM4/Pb '-VscP4]b@W% 'Mf` -L\///KM(%W! !KKW4ZK/W7)Z. '/cttbY)DKW% -` .',\v)K(5KW%%f 'W)KWKZZg)Z2/,!/L(-DYYb54% ,,`, -\-/v(((KK5WW%f) \M4NDDKZZ(e!/\7vNTtZd)8\Mi!\-,-/iv((tKNGN%W%% 'M8M88(Zd))///((|D\tDY\\KK-`/-i(=)KtNNN@W%%%@%[ !8%@KW5KKN4///s(\Pd!ROBY8/=2(/4ZdzKD%K%%%M8@%% '%%%W%dGNtPK(c\/2\[Z(ttNYZ2NZW8W8K%%%%YKM%M%%. *%%W%GW5@/%!e]_tZdY()v)ZXMZW%W%%%*5Y]K%ZK%8[ '*%%%%8%8WK\)[/ZmZ/Zi]!/M%%%%@f\\Y/NNMK%%! 'VM%%%%W%WN5Z/Gt5/b)((cV@f` - |cZbMKW%%| 'V*M%%%WZ/ZG\t5((+)L\'-,,/ -)X(NWW%% `~`MZ/DZGNZG5(((\, ,t\\Z)KW%@ 'M8K%8GN8\5(5///]i!v\K)85W%%f YWWKKKKWZ8G54X/GGMeK@WM8%@ !M8%8%48WG@KWYbW%WWW%%%@ VM%WKWK%8K%%8WWWW%%%@` ~*%%%%%%W%%%%%%%@~ ~*MM%%%%%%@f` '''''
/*
after hours of consulting the tome of google
i have discovered that by the will of unknown forces
without the below line, IE7 believes that 6px = 12px
*/
font-size: 0px;
私がこれらを見た場所を思い出さないでください:
long time; /* know C */
および (ある種の UNIX デーモンを作成するためのコードで):
/* Be a real daemon: fork myself and kill my parent */
ヘッダーファイルの上部:
/* Project : XYZ (Please somebody shoot me!)
*
* File : $Id: defs.h,v 1.1 $
*
* Purpose : Create havoc rather than peace among many nations
*
* History : Back-ported changes that were not in CVS. Please somebody,
* shoot us and put us all out of our misery.
*/
「XYZプロジェクト」(名前変更)は7年間の試練でした。その最後のコメントは、最初から最後まで関わった一人の頑固な魂によって書かれました。
// Catching exceptions is for communists
drivers/net/sunhme.c (Linux カーネル):
/* Welcome to Sun Microsystems, can I take your order please? */
if(!hp->happy_flags & HFLAG_FENABLE)
return happy_meal_bb_write(hp, tregs, reg, value);
/* Would you like fries with that? */
hme_write32(hp, &tregs->frame,
(FRAME_WRITE | (hp->paddr << 23) |
((reg & 0xff) << 18) | (value & 0xffff)));
while(!(hme_read32(hp, &tregs->frame) & 0x10000) && --tries)
udelay(20);
/* Anything else? */
if(!tries)
printk(KERN_ERR "happy meal: Aieee, transceiver MIF write bolixed\n");
/* Fifty-two cents is your change, have a nice day. */
//
//3.4 JeK My manager promised me a lap dance if I can fix this release
//3.5 JeK Still waiting for that dance from my manager
//3.6 JeK My manager got changed, the new manager is hairy, dont want the dance anymore
//3.7 Jek Got that dance, yuck!
//
/* Mark: If there's one thing you learn from this code, it is this...
Never, ever fly Air France. Their customer service is absolutely
the worst. I've never heard the words "That's not my problem" as
many times as I have from their staff -- It should, without doubt
be their corporate motto if it isn't already. Don't bother giving
them business because you're just a pain in their side and they
will be sure to let you know the first time you speak to them.
If you ever want to make me happy just tell me that you, too, will
never fly Air France again either (in spite of their excellent
cuisine).
Update by oej: The merger with KLM has transferred this
behaviour to KLM as well.
Don't bother giving them business either...
Only if you want to travel randomly without luggage, you
might pick either of them.
*/
しばらく前に取り組んでいた PHP CMS に追加したコメント。
if (/*you*/ $_GET['action']) { //celebrate
私たちのコードにコメントすることを特に断固としていた教師のための大学での宿題で:
//I wonder if she actually reads these.
課題が返送されたとき、そのコメントの横にある赤いペンで「はい、そうです」
ソフトウェア開発をオフショアしてはならない典型的なケース:
public class Contact
{
//...
/// <summary>
/// Gets or sets the name of the first.
/// </summary>
/// <value>The name of the first.</value>
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
// If you're reading this, that means you have been put in charge of my previous project.
// I am so, so sorry for you. God speed.
流出した Windows 2000 のソース コードからの素晴らしい例:
!!!!!!!!タブをスペースに変更すると、殺されます!!!!!!!! *
!!!!!!!!!!!!!!そうすると、ビルドプロセスがめちゃくちゃになります!!!!!!!!!!!!!!!! *
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!
// The ratio of a circle's circumference to its diameter. Remember to change
// this to 3.0 if you move to a site in Indiana.
#define Pi 3.1415927
私は、Paul DiLascia が彼のファイル ヘッダーに書いた内容が好きでした。
// If this code works, it was written by Paul DiLascia. If not, I don't know
// who wrote it
// human madable inconvenient. Way too sucks.
私はまだそれが何を意味するのかを完全には理解していませんが、多くのコードについて非常に真実であることがわかりました.
組み込みシステムのバッテリー監視モジュールから:
// batmon.c drives the rastamobile
// error codes
#define ERROR_SUCESS 0
#define ERROR_SUCCESS_IS_MISSPELLED 1
他のエラー コードは定義されていません。
Donald Knuth によるもう 1 つのクラシック:
上記のコードのバグに注意してください。私はそれが正しいことを証明しただけで、試したことはありません。
// Any maintenance developer who can't quote entire Monty Python
// movies from memory has no business being a developer.
const string LancelotsFavoriteColor = "$0204FB"
// if i ever see this again i'm going to start bringing guns to work
// I put on my robe and wizard hat...
//There can Only Be one HIGHLAN....err..Singleton
public class SomeSingleton
{
...
}
// The following strings are meant to be funny. Do not edit these strings // unless you are funny, too. If you don't know if you're funny, you're // not funny. If fewer than 2 people unrelated to you have told you that // you're funny, you're not funny.
Linux 1.0 カーネル スケジューラ (sched.c) の場合:
ダイクストラはおそらく私を嫌っています。
/*
* 'schedule()' is the scheduler function. It's a very simple and nice
* scheduler: it's not perfect, but certainly works for most things.
* The one thing you might take a look at is the signal-handler code here.
*
* NOTE!! Task 0 is the 'idle' task, which gets called when no other
* tasks can run. It can not be killed, and it cannot sleep. The 'state'
* information in task[0] is never used.
*
* The "confuse_gcc" goto is used only to get better assembly code..
* Dijkstra probably hates me.
*/
asmlinkage void schedule(void)
(...)
//Abandon all hope ye who enter beyond this point
// This procedure is really good for your dorsolateral prefrontal cortex.
なんらかの理由でDPCに気付いていない人にとって、何か新しいことを学ぶことに深く関わっているときに光るのは脳の一部です。
//uncomment the following line if the program manager changes her mind again this week
//I'm sorry, but our princess is in another castle.
using namespace std; // So sue me
sqliteソースファイルのトップ:
/*
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
**
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
*/
//ALL YOUR BASE ARE BELONG TO US
...上司は、誰かがハッキングしたと思いました。彼は冗談を知りませんでした。
/**
* If you don't understand this code, you should be flipping burgers instead.
*/
この「使用許諾書」を、私がリリースした WordPress テンプレートに掲載しました。とにかくおかしいと思いました。
/* The License:
You (from this point on referred to as The You) are hereby
granted by me (from this point on referred to as The Me)
license to knock yourself silly with this template.
By using this template The You implicitly accepts this
license and pledges solemnly to never claim creative
ownership of any graphics, code, concepts, eggs, bacon, ideas,
colors, shapes, hypertext-transfer protocols or other conduits
of the visual splendor thatis this template.
The Me, in turn, pledges equally solemnly to be far too
lazy to ever check up on you, so if you do manage to pull
some chicks The Me won't have a cow.
However The Me would be sorely disappointed if The You
were to try and sell or distribute this work without
acknowledging The Me. Seriously. The Me will come down on
The You like a large quantitiy of hard and heavy objects
that in large quantities may be harmful and possibly even
lethal to The You; So don't even think about it, The Buster.
*/
一部の C++ コードでの安全とは言えないハッキングの前の、シンプルだが効果的なコメント
// yikes
私はこれを何度も使用しましたが、私が文書化する気がしない数式に対して、ある種の非自明な単純化を行ったときです。
//this formula is right, work out the math yourself if you don't believe me
私たちのプロジェクトの1つから。
1 つのソース ファイルの末尾のどこかに。
/*@ /\ /\ * @ / \/ \ ----- | | | ---- |----\ | | | /--\ --- | | | ---- /--\ /--\ * @ / -- | | | | | | | | | / | | | | | | | |\ | | | | | | | * \---\ / \ | |---| ---- |--/ | | | \ | | | \ | ---- \ \ * | | \------------------------/ /-\ \ | | | | | | | | | \ | | | -\ | | | \| | | -\ -\ * | | \-/ \ | | | | | ---- |---/ \--/ \--/ --- | \ ---- \--/ \--/ * \ ------O * \ / --- | | | ---- /--\ |--\ /--\ /--\ * | | | | | | | | / | |\ | | | | | | | | | | | | | | | | | * | | | | | | |----- ------- | | | \ | ---- | | | | | | | | | | | | | /-\ * | | |\ /| | | \WWWWWW/| | | \| | | | | | | | | | | | | | | | | | | * | | | | \ / | | | \--------- --- | \ | \--/ |--/ \--/ \--/ * | | | | \ --------------/ | | | * / | / | * \ \ \ \ * \-----/ \-----/ */
.class {border:1px solid gold;} /* I pitty the fool */
GIGANTIC 800 行の 'switch' ステートメントで、中間のどこかに:
// Joe is sorry
数百行後…
// Harry is sorry too
// Caveat implementor
1997 年頃の Netscape Web ブラウザの UNIX フレーバーのソース コードから:
/* HP-UX sucks wet farts from dead pigeons' asses */
そのような真珠は残念ながら、Moz がオープンソースになる前に削除されました...
これは、私がかつてサポートしなければならなかった実際のコードです。AstaSaysGooGoo と AstaSaysGaaGaa (さらに多くの astaTempVar が宣言され、使用されている場所) のロジックを理解するのに苦労した後、私はあきらめる準備ができていました。私はついに「@author」コメントを調べて見たところ、すべてが理にかなっているようになりました。
/*
* @author Andrew Asta
*/
public class AstaClass{
private String astaVar1;
private String astaVar2;
private String astaVar3;
private String astaVar4;
private String astaVar5;
private String astaVar6;
private String astaVar7;
private String astaVar8;
private String astaVar9;
private String astaVar10;
public void AstaSaysGetData(){
//JDBC statement to populate astavars 1 through 10
//...
String astaSqlStatment = "Select astaCol1, astaCol2, astaCol3... From AstaTable Where...";
//..
//...
}
//Perform data manipulation on astavars...
public void AstaSaysGaaGaa(){
[removed for sake of brevity]
}
//Perform more data manipulation on astavars...
public void AstaSaysGooGoO(){
[removed for sake of brevity]
}
public void AstaSaysPersist(){
//JDBC statement to save astavars to DB
String astaSqlStatment = "Update AstaTable set astaCol1 = @astaVar1
, set astaCol2 = @astaVar2
, set astaCol3 = astaCol3...
Where...";
}
}
PS私は、紛争などに巻き込まれないように、実際の著者の本名を変更しました...
//Mr. Compiler, please do not read this.
long time; /* just seems that way */
'NO COMMENT
このコメントは、メイン アプリケーションとさまざまなサード パーティ ドライバー間の通信をバインドするために使用されるインターフェイスを含むユニットにありました。
//**************************************
// Dear code maintainer:
//
// This source contains COM interfaces, not to be confused with interfaces
// of any other sort, please do not just willy-nilly add additional methods
// to these interfaces as they are truely immutable, unlike the interfaces
// that other software vendors like Microsoft maintain. IF you need to add
// new functionality, then go thru the trouble of creating a NEW interface
// and implement this functionality on only the objects you need.
//
// While the money is good for fixing all of the problems caused by not
// following the rules, I would rather work on things which actually have
// an impact on the future of the product rather than curse and yell
// obsenities at the screen because someone didn't bother to understand the
// true meaning of IMMUTABLE.
//**************************************
aComment = 'this is not aComment' # this is aComment
class T(object):
def f(this):
this is not aComment
古いJavaScriptコードがいくつかありましたが、かなりよく書かれています。それからコメント行でした
// and there is where the dragon lives
続いて機能 4 人が 1 日かけて、その機能が何をしているかを理解しました。最後に、それが使用されておらず、何もしないことに気付きました。
-- Comment this later
これは、4000 行以上の PL/SQL プロシージャの 2 行目でした。そして唯一のコメント。その手順が開発されてから4年後、まだ来ていませんでした...
私はかつて、特に厄介な問題に対する洗練された解決策だと思っていたものを思いつきました。振り返ってみると、それは少し頭を悩ませ、マクロプログラミングを多用していました。数年後、保守プログラマーからのこのコメントを見つけました
/* 説明: トータル パースペクティブ ボルテックスは、 外挿された物質の原理に基づく全宇宙 分析。 説明する - 宇宙のすべての物質から 何らかの形で、他のすべての物質の影響を受けます 宇宙、それは理論的に外挿することが可能です すべての創造物 - すべての太陽、すべての惑星、その 軌道、それらの構成、およびそれらの経済的および社会的 たとえば、1 つの小さなマクロからの履歴。 トータル・パースペクティブ・ボルテックスを発明した男はそうしました 基本的にIT部門を困らせるためです。 スティーブ・ウィート - それが彼の名前だった - は夢想家で、 思想家、思弁的な哲学者、または一部の人が持っているように それ、怠け者。 そして、彼らはまったくのことについて絶え間なく彼をしつこくしつこく言いました。 彼が宇宙を見つめるのに費やした途方もない時間、 またはチェルシーFCの仕組みについて熟考するか、または マクロのスペクトル分析。 「比例感を持って!」彼らは言うでしょう、 1 日に 38 回ということもあります。 そして、彼はTotal Perspective Vortexを構築しました-ただ示すために 彼ら。 そして一方の端に、彼は現実全体を次のように差し込んだ。 1 つのマクロから外挿され、別のマクロに 最後に、彼は IT 部門をプラグインしました。 彼らは創造の無限のすべてを一瞬で見た とそれに関連する自分自身。 スティーブ・ウィートの恐怖に、衝撃は完全に消滅した」 彼らの脳; しかし満足することに、彼は自分が 生命が存在する場合、決定的に証明されました このサイズの宇宙、そしてそれが買えない唯一のもの 持つことは比例感です。 */
有罪を保護するために値が変更されました
これは、電子メール ログインのテストを担当するコードのチャンクに取り組んでいた請負業者によって取り残されました。私たちは信じられなかったので試してみましたが、彼の個人アカウントへの有効なログインでした。改訂履歴を再確認したところ、彼はそれを編集する 2 つのチェックインを持っていました。1 つはコードを追加するため、もう 1 つはコメントアウトするためです。
アートワークを追加し、残りはそのままにしました。別の開発者は、彼の将来の自分 (ala The Office) から電子メールを送信するのが楽しいと判断し、ログインが機能しなくなるまでに毎日の電子メールで丸 2 週間近くかかったと述べました。
' ROFL:ROFL:LOL:ROFL:ROFL
' ______/|\____
' L / [] \
' LOL===_ ROFL \_
' L \_______________]
' I I
' /---------------/
'TODO: REMOVE MY INFO AND REPLACE WITH USER CREDENTIALS
'Private TEST_LoginName As String = "DurgshA@Exmaple.org"
'Private TEST_Password As String = "Humsal892"
'Private TEST_Server As String = "imap.secureserver.net"
私のお気に入りの部分は、彼がそれを行ったということでも、チェックインのために誤ってその場所に残したということでもありません。元のリビジョンがあることを知らなかったら、元のリビジョンを見ることはなかったでしょう :-D
catch (Ex as Exception)
{
// oh crap, we should do something.
}
コードが堅牢であると感じさせる空のcatchブロックのようなものはありません....
私はこれをよく見ます:
// TODO make this work
$you = live("free") or die("hard");
明白なことを述べます?
/** Logger */
private Logger logger = Logger.getLogger();
数年前にPerlを書いたとき、私はこれらのコメントを上下に追加しました。
# <magic type="voodoo">
...
# </magic>
次にそれを見る人はPerlにそれほど熱心ではなく、「魔法」と「ブードゥー」が何をしたかについてドキュメントを検索するのにしばらく時間を費やしました。それ以来、私はもっと役立つコメントを追加しようとしました...
Google コード プロジェクトから:
# This job would be great if it wasn't for the fucking customers.
when :orientation
## Avoid matching gay people with straight people - they hate it, they do, they really do.
query_parameter = "(users.orientation = 'Bi' OR (users.orientation = 'Straight' AND users.gender IN ('#{user.opposite_genders.join('\',\'')}')) OR (users.orientation = 'Gay' AND users.gender IN ('#{user.same_genders.join('\',\'')}')))"
出会い系サイトから...
Q: 「これまでに遭遇したソース コードでの最高のコメントは何ですか?」
A: 簡単です。当時私が抱えていた問題を解決するのに役立ちました。
2 番目に優れているのは、既知の落とし穴を回避して新しい開発を導くのに役立つものです。
//Visual Studio Bug Workaround:
//http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101677
//To fix 'CJumpToHelper::GetInstance()' : undeclared identifier compiler errors, change the number lines below
//until the file compiles correctly. (This needs to be done anytime a change is made to this file)
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
//////////////////////////////////////: There should be 1-10 of these lines
/// <summary>
/// The possible outcomes of an update operation (save or delete)
/// </summary>
public enum UpdateResult
{
/// <summary>
/// Updated successfully
/// </summary>
Success = 0,
/// <summary>
/// Updated successfully
/// </summary>
Failed = 1
}
//Woulda
if(x) {}
//Shoulda
else if(y) {}
//Coulda
else {}
面白いのか悲しいのかわかりません..でも、私と一緒に働いていたあるインターンは、単位あたりの価格を計算するためにこの小さな宝石を持っていました.
...
// get the units from the form
int numUnits = Integer.parseInt(request.getParameter("num_pieces")); // this break at random times
//price
float price = Float.parseFloat(request.getParameter("price")); // same as above
// Under certain conditions the following code blows up. I don't know those conditions.
float pricePerUnit = price / (float)numUnits;
...
//If you're reading this, then my program is probably a success
私の古い上司は、社内で自社製品を使用する方法について常に話していました。つまり、「独自のドッグフードを食べてください...」
何年も後、一時的な同僚が行ったいくつかのソースに埋め込まれていることがわかりました。彼が触れたすべての機能は次のようにタグ付けされています。
/* NOT FIT FOR HUMAN CONSUMPTION */
public GetRandomNumber()
{
// Chosen by a fairly rolen dice
return 12;
}
何年も前に、私はこれに出くわしました:
/**************************************************** ************************/ /* 深い魔術。手を触れないでください。*/ /* */ /* いいえ。XXXXXX 私はあなたを見ています。これをもう一度ねじ込むと*/ /* スイングライン ホッチキスであなたを殺します。*/ /* */ /* ... */
そして、特に複雑なアルゴリズムについて説明しました。
従来の ASP:
'Is it worth it, let me work it'
'I put my thing down, flip it and reverse it'
'Ti esrever dna ti pilf, nwod gniht ym tup I'
NextIP = StrReverse(UserRecordset.Fields.Item(0))
//open lid
//take sh!t
//close lid
ファイルのオープン、データのダンプ、ファイルのクローズに関するコメント...
プロダクションソースコード:
// Remove this if you wanna be fired
少し前に私は出くわしました:
raise InvalidChild() # e.g. no legs
「 inwalida」はポーランド語で障害者を意味するため、これはグロテスクです。愚かな私:)
これまでで最高のもの:
"This code makes baby Jesus very sad!".
次のような文字列の初期化を参照していました。
String blankSpaces=" "+ //100 whitespaces
" "+ //200 Whitespaces
...
" " //100 whitespaces
よくわかります。
私はメンティーに、少なくともいくつかの例外処理を行うように言います。これは、すべてのdb呼び出しの見返りに得られるものです....
Catch (Exception e) {
//eat it
}
神に正直に:
// This is crap code but it's 3 a.m. and I need to get this working.
私のお気に入りは、故人の偉大なポール・ディラシアからです。
// Author: If this code works, it was written by Paul DiLascia. If not then I don't know who wrote it.
// Hey, your shoe's untied!
いくつかの疑わしいコードが続き、そのコード内で、
// Keep looking! I think it was the other shoe!
ついに、
// How strange -- I must be seeing things. Anyhow, I'm going to go take a shower, now...
よく知られた商用 DOS スプレッドシート アプリケーションでは、次のようになります。
/* This comment was just added in order to check-in a file that was last
checked in by [Insert Programmer FirstName] "Back-to-the-Future" [Insert
Programmer LastName]. While testing for year 2000 problems, he accidentally
checked-in this file while his machine clock was set forward to the year 2000.
This meant that the source code was always newer than the object file and
compiled every time the code was built. I'm checking this file in again to
fix that. */
私がロイターで働いていた頃、私たちのフィード ハンドラーの 1 人に、全能者が私たちを助けてくれていると思わせるコメントがありました...
// Jesus told me to skip to the end of the message here
後で、 Jesus (HeyZus)という名前のラテンアメリカ人の連絡先があったことを知りました。
私が今まで書いたお気に入りのコメント:
//the XML returned from this request is *mind-bogglingly* bad. Terrifyingly bad.
//a completed batch looks like this:
//<Batch>batchid=363777811 status=Done dateandtime=09/18/2007 09:53:10 PDT activateditems=335 numberofwarnings=0 itemsnotacivated=17 </Batch>
//and an incomplete batch like:
//<Batch>batchid=363778361 status=In Progress </Batch>
//so we'll just parse each item as a regex. Thanks Amazon.
はい、Amazon は実際にこのような XML を返します。
// Houston, we have a problem
David S. Miller によって追加されたすべてのバグ
# There is a bug in the next line. $searchParameters != {} will always return true, because {} is creating
# a new hash reference on the fly, and the inequality operater is comparing the memory location of it
# to the memory location of $searchParameters, and they will always be different.
# This means that the following code will always get executed as long as $nodes is defined.
# I'm leaving it there because it has always been there, and although I'm sure it was originally meant to
# mean %$searchParameters (essentially "is this hash not empty"), I'm afraid to change it.
if ( $nodes && $searchParameters != {} )
{
// some sport psychology
if (!focused)
Focus();
// This should fix something that should never happen
/*そして今、これらすべてをブラウザ ファミリの遅れた義理の兄弟である Internet Fucking Explorer で半分まともに見えるようにしています */
// This is a walkaround for bug #7812
英語が彼の第一言語ではなかった私たちの中国人プログラマーの一人によって書かれました。
私はこれが本当に好きでした。たまたま「ウォークアラウンド」は「回避策」よりも良い用語だと思います。
// For the sins I am about to commit, may James Gosling forgive me
VB.NET でのセミコロンの使用
TextBox2.Visible = True';
For Each row In data.Tables(0).Rows
If row("Customers.Id").ToString <> customerId Then
customerId = row("Customers.ID").ToString';
name = "Customer Name: " & row("Name").ToString & CrLf';
address = "Address: " & row("Address").ToString & CrLf & CrLf';
TextBox2.Text += name & address ';s
End If';
Next';
80年代初頭に、私はアセンブラでこれに出くわしました(薄暗い記憶から引用):
I don't understand how the following bit works, but it worked in the program I stole it from.
レガシーコードで気付いた変更ログ
05/17/99 D JONES がブラッディ オージーズ コードをコメントアウト (02/19/99)
05/17/99 K ROBINSON BLOODY TEXAN は AUSSIE を正しく綴ることができません (コード変更なし - コメントのみ)
/**
* Returns cookies according to the filters specified.
*
* @return array Cookies! Nom nom nom nom nom.
*/
public function data_getCookies($uid, $name) {
FacebookのAPIからどこかに。
Tweet tweet = (Tweet) tweets.get(i); // Poetic.
Linuxカーネルからのいくつか:
/* Sun, you just can't beat me, you just can't. Stop trying,
* give up. I'm serious, I am going to kick the living shit
* out of you, game over, lights out.
*/
-
/* 2,191 lines of complete and utter shit coming up... */
-
#if 0 /* XXX No fucking way dude... */
機械または非常に疲れた人間 + Google によって翻訳された、ソース コード内のドイツ語のコメント
; Rechnen ja ; have faith in yes
原文は「ここで真実を仮定する」という意味だったと思いますが、それ以来、私はそれを私の人生のマントラとして取り入れてきました.
//todo: never to be implemented
//BELOW IS THE REAL CODE...JABRONI
//
// Yeah, but can you play the outtro to Bark At The Moon?
//
//|--------------------------------------------------|------------------------------------------------|
//|--------------------------------------------------|------------------------------------------------|
//|--17^16-16-16-17^16-17^16-16-16-17^16-17^16----16-|-19^16----16-19^16-19^16---16-19^16-19^16----17-|
//|--------------------------------------------19----|-------17----------------17---------------17----|
//|--------------------------------------------------|----------------------------------------------
monitoring.sh というファイルの最初の 2 行:
#!/usr/bin/perl
# perl script disguised as a bash script
Apache Xalan ソースコードから:
/**
* As Gregor Samsa awoke one morning from uneasy dreams he found himself
* transformed in his bed into a gigantic insect. He was lying on his hard,
* as it were armour plated, back, and if he lifted his head a little he
* could see his big, brown belly divided into stiff, arched segments, on
* top of which the bed quilt could hardly keep in position and was about
* to slide off completely. His numerous legs, which were pitifully thin
* compared to the rest of his bulk, waved helplessly before his eyes.
* "What has happened to me?", he thought. It was no dream....
*/
protected static String DEFAULT_TRANSLET_NAME = "GregorSamsa";
The Daily WTFをさらに読む。
これは、Python 2.5 の「twisted」パッケージで見つけたものです (ファイルは 371 行目の tcp.py です)。
# Limit length of buffer to try to send, because some OSes are too
# stupid to do so themselves (ahem windows)
return self.socket.send(buffer(data, 0, self.SEND_LIMIT))
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
// If I from the future read this I'll back in time and kill myself.
usenetのクラシックから:
テラダインハードウェアモデラーコードの奥深くには、一連の16進数をSYS$QIO呼び出しにフィードするルーチンがあります。唯一のコメントは「奇妙な魔法がここで起こる」です。
//The following code is commented out
//(a load of commented out code followed)
これは、画像ブラウザの Xee からのものです。
// At this point, I'd like to take a moment to speak to you about the Adobe PSD format.
// PSD is not a good format. PSD is not even a bad format. Calling it such would be an
// insult to other bad formats, such as PCX or JPEG. No, PSD is an abysmal format. Having
// worked on this code for several weeks now, my hate for PSD has grown to a raging fire
// that burns with the fierce passion of a million suns.
// If there are two different ways of doing something, PSD will do both, in different
// places. It will then make up three more ways no sane human would think of, and do those
// too. PSD makes inconsistency an art form. Why, for instance, did it suddenly decide
// that *these* particular chunks should be aligned to four bytes, and that this alignement
// should *not* be included in the size? Other chunks in other places are either unaligned,
// or aligned with the alignment included in the size. Here, though, it is not included.
// Either one of these three behaviours would be fine. A sane format would pick one. PSD,
// of course, uses all three, and more.
// Trying to get data out of a PSD file is like trying to find something in the attic of
// your eccentric old uncle who died in a freak freshwater shark attack on his 58th
// birthday. That last detail may not be important for the purposes of the simile, but
// at this point I am spending a lot of time imagining amusing fates for the people
// responsible for this Rube Goldberg of a file format.
// Earlier, I tried to get a hold of the latest specs for the PSD file format. To do this,
// I had to apply to them for permission to apply to them to have them consider sending
// me this sacred tome. This would have involved faxing them a copy of some document or
// other, probably signed in blood. I can only imagine that they make this process so
// difficult because they are intensely ashamed of having created this abomination. I
// was naturally not gullible enough to go through with this procedure, but if I had done
// so, I would have printed out every single page of the spec, and set them all on fire.
// Were it within my power, I would gather every single copy of those specs, and launch
// them on a spaceship directly into the sun.
//
// PSD is not my favourite file format.
あるとき、私は同僚に社内フレームワークで何かを行う方法を尋ねました (正確に何をするか忘れましたが、あいまいな技術的な呼び出しがいくつかあります)。彼は「簡単に、ここを見てください」と言い、エディタで .java ファイルを開き、コードのいくつかのページの途中に次のコメントを表示しました。
// HERE
確認したところ、コメントはまだこのファイルにあります:)
開発チームの全員が大幅に編集したコード ファイルのヘッダー:
'Avert your eyes, it may take on other forms!
さすがフランダース。
i++; // increment variable i
私はどこかでJBossを信じています
return null; //Not really null
私はいつもそのラインが好きでした。
展示物:
return 0; // Happy ending
展示物B:
int32_t Interpolate1DSignal(
Array1D<float64>::Handle hfInputSamples, // samples to be interpolated
Array1D<float64>::Handle hfInterpolationFilter, // polyphase filter coefficients,
int32_t iFilterInterpolationFactor, // # of "rows" in polyphase filter
int32_t iFilterLength, // Length of each row in filter
float64 fInterpolationFactor, // Factor to interpolate the
// signal by
float64 fTimingOffset, // Offset into the signal (units
// of samples)
Array1D<float64>::Handle hfOutputSamples // left as an exercise for the reader
);
/**
* Happy Javadoc haiku:
*
* Without Javadoc
* Builds break in Maven site stage
* This fixes the build.
*/
// This code was written by a genius so don't try to understand it with
// your tiny little brain.
// This will save us ~0.5 sec for every user and please the machine spirits.
非常に長い手順の前に:)
else
{
// rien, c'est parfait.
}
/**---------START-----------**/
// IMPLEMENTATION GOES HERE
/**---------END-----------**/
しかし、コードはありません;)
makefileでこれを見つけました
# ===== Never edit below this line. Ever. Or I'll kick your ass. ====
私のお気に入りのコメントは、私の同性愛者の友人によって使用されました。彼は、VB.NETのすべてのTODOコメントを次のようにマークするのが好きでした。
'TODO: Matt Damon
追加情報が提供されることもありましたが、通常は提供されませんでした。
一部のアセンブラでは、次を含む行の最後に&h723
' RIP LVB
(それを得る?)
私はこの種の何かを持っていたと思います:
if (case1) { // trivial
...
}
else { // we are screwed
/* fill in later */
}
わかりました、だから私はねじ込まれたよりも強い言葉を使ったかもしれません
rescue
# silently, we fail
# many validations fade
# like tear drops in rain
end
これは数ある中の 1 つにすぎません...
// BEGIN HACK
...
// END HACK: I feel dirty.
先日、締め切りが迫っているときに書かれたコードでこれを実際に見ました。
//This was clearly written under duress
私が高校で CS のクラスを受講していたとき、私たちは通常の教室で教えられていました。コンピューターはありません。私たちのすべてのテストは、私たちが提出した紙の上で行われました - 1 枚の紙につき 1 つのクラスです。私たちの先生は初めて C++ でクラスを教えていたので、時折黒板のパスカル モードに切り替えていました。Pascal を学ぶことに興味を持っている人はほとんどいなかったので、これは気まずいものでした。
クラスの課題よりも大きな課題については、自宅で行い、コードと出力プリントアウトを提出して採点します。いくつかのコードと出力プリントアウトを提出した後、教師が実際にコードを読んでいるのではなく、プリントアウトだけを読んでいることに気づきました。私たちの理論をテストするために、コードの 3 ページ目のいくつかのクラス宣言の間にコメントを入れました。
// If you are reading this, please place a checkmark here [ ]
もちろん、前面に大きな青い「A」があり、チェックマークが見つからない状態で戻ってきました。
// this error could never happen
そして -- 「このエラーが発生することはありませんでした」というエラー メッセージが表示されたというお客様からの電話
'Mind boggling, gibberish version of a SQL statement, but it work's, so dont touch it
// Hard to explain
こちらも結局壊れてしまいました。説明するのが難しかったのも不思議ではありません
// Added because boss changed his mind : 20020111,20020501,20020820, ...
// Commented out because boss changed his mind : 20020201,20020614,20020908, ...
ほとんどがハッキングされた RPG データベースと SQL Server データベースの間の ETL スクリプト。このコメントが10回か20回くらい出てきた…
私のお気に入り(私は何度も使用したことを認めなければなりません):
// Yes...I know this is repulsive and stupid.
// But <%CompanyOwnerOrManagerToken%>, not knowing a thing about code,
// demanded I do it anyways. SO, go crap on their desk, not mine.
// K THX BYE
さて、これが私がコミットしたものです:
/* Every time I re-visit this function, I feel like
* I need to take a shower.
*
* Don't get too used to this function, its days are
* numbered.
*/
誰かがgreatcodecomments.comのようなものを始めて、いくらかの現金を稼ぐことができます。しかし、その人は私ではありません。
私はかつてこのコメントを見つけたプロジェクトに取り組んだことがあります:
// Cabbage fart?
それが何を意味するのか分かりません。私のキューブがそれを書いた人の隣にいなかったことを嬉しく思います。
/* Here I sit, Joe broken hearted, came to do some sh*t, but only just started. */
いくつかの重い正規表現入力検証に関して。
public function get state( /* of Palestine back */ ):Boolean
/* FIXME This must absolutely be removed before 4.0.7 release
* TODO really remove this */
その後、4.0.7、4.0.8、4.0.9、および 4.1 バージョンをリリースしました...
// Singleton object. Leave $me alone.
private static $me;
Linux のコメント
ここには良いものがたくさんあります...
これらはすべてLinuxのコメントです
http://lwn.net/1998/1015/a/f-word.html
私のお気に入り:
./arch/sparc/kernel/ptrace.c
/* Fuck me gently with a chainsaw... */
./drivers/scsi/qlogicpti.h
/* Am I fucking pedantic or what? */
私はそれがバイラルになったと思います.OOMキラーがそれを選択するのを防ぐデーモン(Linux)で次のことを見つけました:
/*
* Don't OOM me, bro!
*/
これは、プロセスがスワップするのを防ぐための mlockall() の直後であり、次のようにコメントされています。
/*
* Don't swap me, bro!
*/
「これは決して起こりません」。
私の友人の有名な最後の言葉...
これは、実際のコードに変換されたプロトタイプを実装していたときに、実際に私が作成したものです。
// Abandon all hope you who needs to debug this
はい、私より賢い誰かが実際に後でコードをリファクタリングしました (それは良い結末でなければなりませんでした)。
完全に任意の行の後に数千行の JScript ファイルの途中で...
// The world is a happy place.
v.bpc := v.pc; -- Remember to jump back
v.baccu := accu; -- Yo dawg, heard you like runing instructions
-- so I took backup of your accu so you can run
-- instructions while you run instructions.
v.flags.i := false; -- No more interupts
XSLT ファイルのヘッダー:
DON'T TOUCH THIS SCRIPT -> XSLT is like arcane, black magic
スクリプト言語に置き換える前に、これを古いデータテーブル駆動型ルールエンジンに追加する必要がありました。
/************************************************************
* *
* .=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-. *
* | ______ | *
* | .-" "-. | *
* | / \ | *
* | _ | | _ | *
* | ( \ |, .-. .-. ,| / ) | *
* | > "=._ | )(__/ \__)( | _.=" < | *
* | (_/"=._"=._ |/ /\ \| _.="_.="\_) | *
* | "=._"(_ ^^ _)"_.=" | *
* | "=\__|IIIIII|__/=" | *
* | _.="| \IIIIII/ |"=._ | *
* | _ _.="_.="\ /"=._"=._ _ | *
* | ( \_.="_.=" `--------` "=._"=._/ ) | *
* | > _.=" "=._ < | *
* | (_/ \_) | *
* | | *
* '-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=' *
* *
* LASCIATE OGNI SPERANZA, VOI CH'ENTRATE *
*************************************************************/
このコメントは、私がデバッグしなければならなかった古いプロジェクトからのものです:
//Haleluya i can go home!
// Some wanker in ISO got rid of ifstream(int), ofstream(int), and
// fstream(int). Twit.
正確には覚えていませんが、アイデアは次のようなものでした。
Person p = new Person("John", "Doe", "male");
Collection women = new ArrayList();
women.insert(p.getTail());
それは汚いコードです;)
1975 年頃の UNIX バージョン 6 ソース コードから:
/* You are not expected to understand this. */
/**
* Not even your mum thinks you're special if you call this method
*/
onlyYourMumThinksYoureSpecialIfYouCallThisMethod() {...}
int Q13Factor = 8125; // 2^13 for Q13
明らかにモンティ・パイソンを見ていた若者から:
> // And now, for something completely > // different:
クラスtheLarch{
LucasArts のコンピューター ゲーム「The Eidolon」のソース コードに見られる (それ自体が奇妙で風変わりなゲームでした)...
// He's dead, Jim!
// TODO - Comment this function
'Do not optimize these next two lines. Compiler bugs lurk.
そして彼らはそうしました。変数を 2 行目の式に圧縮すると、ヒープの途中にジャンプしてデータを実行しようとしました。
// Fuck.
それと...
// This code worked before, but my cat decided to take a trip across my keyboard...
// fix for groupid > 9
// if groupid ever gets to 100 everything will break (again)
if (groupid < 10) {
groupid = "0" + groupid;
}
今日これを追加しました:
// Hardcoded this for time sake ... will make andrew fix later :)
THIS PROGRAM HAS CODE THAT DOES NOT MEET STANDARDS
そのコメントは、ここにあるほぼすべてのプログラムにあります....
JUnit API にあります。
/**
* ...as the moon sets over the early morning Merlin, Oregon
* mountains, our intrepid adventurers type...
*/
public Test createTest(Class theClass, String name) {
...
}
// Whoever put this here is an idiot...this doesn't work at all !
しかし、コードはまだそこにあります...
コメントではなく属性
[ThereBeDragons]
そして、IHttpHandler の実装で見たもの
//What is this?
public bool IsReusable
{
get{return false;}
}
これは私自身のコードの 1 つですが、それでも非常に面白いので、パブリック SVN にあるので、それを掲載したほうがよいと思います。
// These were orginally up and down. When it was clear the names were
// inapplicable, they were renamed to retain the joke.
// Sorry if you were hoping for useful variable names.
quantum strange, charm;
public int hashCode() {
//sucks, but what're you gonna do
/*
int hash = 7;
for (int i = 0; i < array.length; i++)
hash = hash * 31 * (null == array[i] ? 0 : array[i].hashCode());
return hash;
*/
return 0;
}
# absolutely foul heuristic code.
# ..it's dirty, but you want it.
と:
# VERY USEFUL DEBUGGING AID, for when the above all goes pearshaped:
/* My lawyer told me not to reveal */
// TODO: not this
最適化が切実に必要なクエリの上の同僚によって書かれました。彼の弁護では、私たちは皆、その時点で数ヶ月間、週70時間働いていました...
これはGoogleコード検索で見つけました
// Constructs a tuple with 2 elements (fucking idiot, use std::pair instead!)
template <typename T0,typename T1>
inline tuple <T0,T1> make_tuple (const T0& t0,
const T1& t1) {
tuple <T0,T1> t;
t.get<0>() = t0;
t.get<1>() = t1;
return t;
}
大学のクラスの非常に単純なテスト C++ プログラムで、これに出くわしました。
私はクラスにコメントしていました。
デストラクタで...
// Choose! Choose the form of the Destructor!
// The choice is made! The Traveler has come!
// Bad Christian, No cookie
このコンテキストの Cookie は、ブラウザーの Cookie を参照していません。
これは私のお気に入りのコメントです。
/// I intend to do this as shittily as possible because there are many better products that will totally blow this out of the water
/// and we don't have them so whatever
ファイルの後半では、次のような楽しみがあります
/// sidestep a bug in WCF (that we can't send types across)
/// or, depending on how you look at, this issue is a Feature
そしてまた後で
if( where == null)//be nice
// This condition can't happen. Call the police or something.
/**
* This run through all the guipublisherbuyRecord , the records those have
* diff. is buytotal and prior to buy isRecommendedBillingClickedWarning flag
* is set if priously RB ran and this time not.
*
* --What?
*
* @return
* @throws AppException
*/
// TODO: Implement this function!
var arbitraryNumber = 10;
//I don't know why. Just move on.
// THE LOOP THAT DO EVERYTHING!!!!!!!
TVNZ Web サイトの以前の反復のHTML ソースを表示したときに、この宝石を発見しました(自宅で遊んでいる場合は 571 行目から)。
<!-- Hopfully we can do this otherwise the nav is going to be pretty plain and Hong will go postal. -->
/*
____________________
/ \
| Jean-Michel Bechet |
| 2002-2009 |
\___ _______________/
|/
(o_
//\
V_/_
*/
すべてのアプリケーションの停止をログに記録してコメントする必要がある大規模な投資銀行で見た
Without a crash
Or mighty bang
The sync disk
Did it's process hang
// WARNING!!!
// Very perversive code ahead!
... about a 20 lines of "very perversive" code ...
// Now you can call your grandmother back. ;)
1 つのファイルに含まれる 5000 行以上のコードに含まれるごくわずかなコメントの中
には、自分のコーディング スタイルを擁護したコーダーと実際に議論があります...
コメントはありません。
コメントはありませんでした;-) (またはごくわずか)
残念ながら、これは製品コードです。
offset=1;
for (i=0;i<=len;i++)
{
if ((i!=0)&&(i<len)) //-3
{
switch(mess[i])
{
case ETX:
case ETB:
case DLE:
buf[offset]=DLE;
offset++;
break;
}
}
buf[offset]=mess[i];
offset++;
}
スイッチ大好き!
for (n=0;n<offset;n++)
{
Sleep(TR); //Modif A
Sleep(T);//
FWriteFile(hCom,buf+n,1,&dwMot,NULL);
if (ECHO)
FReadFile(hCom,tab,1,&dwMot,NULL);
}
いいえ、ヘッダーに「modif A」が何であるかを説明するコメントはありません。
if (GetFileSize(hSlotFile,NULL)==3600) //5*720
そして720は何ですか?
// insert comment here
奇妙に適切だった面白いタイプミス:
assert(0); // should never shit this point
LKM では:
/*
* Dear Richard Stallman,
*
* This one's for you.
*
* Sincerely,
* Me
*
*/
MODULE_LICENSE( "GPL" );
かなり前に書いた PHP クラスを再利用しているときに、これを見つけました。私はまだ何がそこに行ったのか思い出せず、それの用途をまだ見つけていません... 実際、そのコメントを書いたことさえ覚えていません。見つけたときは文字通り大声で笑った。
try
{
// Some database logic
}
catch (Exception $ex)
{
// sure, it looks silly and I honestly cant remember what code used to go here... but i swear i will
// find a use for this code.... eventually....
throw $ex;
}
本当にコメントではありません:
DvLog::Log("This silly log message fixes a PSCRIPT5.DLL gpf when printing to Adobe.");
悲しいことに、コメントがなければ、PSCRIPT5.DLL は本当に爆発しました...
あるフィンランドのモバイル ネットワーク機器メーカーで働いていたときに、ハードウェア アブストラクション レイヤーを詳しく調べると、フィンランド語の「puukko」という単語が 100 回以上出現することがわかりました。
「puukko」は、すべてのフィンランド人がツールボックスや家の周りに持っている万能ナイフです。ジャガイモの皮むきからコンピューターの修理まで、あらゆる用途に使用されます (私の観察によると)。この文脈では、「ハック」という言葉に相当するフィンランド語だと思います。
私のフィンランドの同僚はこれを否定し、「外科的処置/介入」のようなものを意味すると言いました...そしてコメントを見つけるまで、私はほとんど彼らを信じていました:
/* Perkele ISO Puukko! */ -> Fucking Big Hack!
# dont question, i just felt like throwing some globals in
# this is actually quite pointless as youll soon see
コードの後半で
#draw the circles (complicated)...dont question
さらに後で...
# complicated process of drawing the circles in a
# somewhat symmetrical, 3-d pattern
# dont question again
さらに後で...
# will determine if user clicks on die
# i determined these values...dont worry about them
i++; //increment i
catch (Exception ex)
{
// just die already.
}
私は明示的な奇妙なキャストでいっぱいの関数でこのコードを見てきました:
// Since today's CPUs are really fast, this is dedicated to those who said:
// " You can't use Moore's Law as an excuse to write bad software. "
コードは恐ろしいものでした:)
C#のユニットテストクラスから:
#region quis custodiet ipsos custodes?
[Fact]
public void TestPositive()
{
Assert.Equal(4, 2 + 2);
}
[Fact]
public void TestNegative()
{
Assert.Equal(5, 2 + 2);
}
#endregion
-- Change Log: Not needed. The code is perfect 'cause I wrote it.
-- If you change it, it will break.
私はいくつかのコードコメントをレビューしてそれらが意味をなすかどうかを確認している最中であり、上の控えめな行を見ました。
// I love the smell of dirty XML in the morning
xml = xml.Replace("xmlns=\"urn:bsd.orion/inventory\"", "");
// *** AAAAAHAHAHAH!! What is this??
Case 1:
...
break;
...
//I don't want do do this but [my coworker] says it's part of the code standard
default:
break;
Coding Horror からのこの投稿を友人に見せてから数時間後、彼のコードに関する次のコメントを見ました。
// MrValdez は暴力的なサイコパスです。彼を怒らせないでください。
ゲッターとセッターのバッグにすぎない貧血ドメインオブジェクトのユニットテストを書くことを余儀なくされたとき(私も書くことを余儀なくされました):
// zzzzZZZZzzzz....
// This is confusing, I KNOW, so let me explain it to you.
# as you can see: I comment the code!
正確なコード パッケージはもうありませんが、コメントは鮮明に覚えています。
// The code below needs to be changed immediately.
// I wish I was a little bit taller
// I wish I was a baller
// I wish I had a girl who looked good, I would call her.
// no comment
これは、パッチとウイルス対策を登録/インストールしたかどうかに応じて、コンピューターを「クリーン」または「ダーティ」IP アドレス プールに配置するために大学の寮で使用したカスタム DHCP サーバー用でした。
public boolean getDirty (String MAC) // not as fun as it sounds
Control + A、書き換え
これは、以前のプロジェクトのソース管理にチェックイン コメントとして追加されたコメントです。
#ifdef TRACE
#undef TRACE /* All your trace are belong to us. */
#endif
#define TRACE ....
大学を卒業したばかりの私は、手を汚したいと思っていました。私の最初のタスクは...「このコードにコメントしてください」でした。
バカ。
しばらくすると飽きてきた…
// this function doesn't actually calculated the profit, like it says --it really signals the mothership orbiting saturn that the planet is ripe for takeover
[later]
// I don't think anyone is going to read this
[various permutations on that last one]
// TODO: what the hell is this all about?
そして、コメントアウトされたコードもあります。
これは、本日以前に作業中のコードで発見されました。笑うべきか泣くべきか分からない…
<!-- THIS IS THE MAIN CONFIGURATION FILE FOR THE ENTIRE BLOODY DIRECTORY -->
<!-- WHATEVER YOU DO, DO NOT EDIT THIS FILE WITHOUT TALKING TO ME FIRST -->
<!-- I'M SERIOUS -->
<!-- (scroll down) -->
/* This is a replica of a horrible hack - many moons ago, the legacy PortfolioServer was modified to return cash trades in an "optionTrade" block, because the client side developer was too lazy to get their XPaths right. Their laziness echoes through the ages, and means we need a similar hack here...*/
// nobody read comments!
// woot, global var. I havent done this for a long time.
デコード用の恐ろしいパッチ(イタリア語による翻訳):
/**
*@return the value
*@param key: the id of the list of instruments
*@PS this function is a violation of all the laws of the
*software engineering,
*commons sense, highway code
*and ONU decision about the coding.
That sh*t...
*/
"Bar" という名前のクラス (わかりやすい名前ではない UI コントロール) では、クラス ヘッダーは次のようになります。
/// <summary>I pity the "foo".</summary>
そしてRemove()
方法:
/// <summary>A "foo" and his money are soon parted.</summary>
さらに悪いことに、生成されたドキュメントからそれを指摘したのは取引先でした。それよりもさらに悪いことに、それらはおそらく、私たちがその男から得た有用なドキュメントに最も近いものです.
//Time log says you've been here for 15 hours GO HOME, your code is hobo
コードではなく、関連するバグ追跡システムで:
これは私のコードのバグではありません。とても丁寧にコーディングしました。
/*
* TODO: Remove this function
function remove($customer_id)
{
$this->Customer->remove($id);
}
*/
catch
{
// you’re fucked
// write out the file somewhere and start screaming “Connection down! Connection down!”
}
共有するコードはありませんが、このシナリオを想像してみてください。Linux システム管理者がより環境に優しい牧草地に向けて出発してから約 1 か月か 2 か月後、私は彼が作成したシェル スクリプトを開くことができました。なぜ編集する必要があったのか思い出せませんが、それは問題ではありません。重要なのは、スクリプトの長さが約 40 行だったことです。コメント (37 行) をスクロールして、実際に動作するコード (3 行) にたどり着きました。コードは素晴らしいものでしたが、私は興味がありました - なぜ 37 行のコメントがあるのでしょうか? というわけで、一番上までスクロールして読み進めました。驚いたことに、このコメントは 3 行のコードの機能とその変更方法についてのラップでした。一番良かったのは、Dr. Dre と Snoop DO DOUBLE G による Nothing But AG Thing の部分的なぼったくりでした。Brian に感謝します。
try {
doSomething();
} catch(err) {
// Die quietly
alert(err);
}
""".........................:~+?7$$$ZZZZZZZ$$$7I+=:,............................
........................~+7ZZZZZOZZOOZOZZOZOZOOZZZZZ7?~:........................
......................,~7$ZZOOOOOZOZOZOZZOOZZOZOOOOOZ$$I,.......................
...................,=I$OOZOZOZZOOOZZOZOOOOZOZZZOOZZZOZZOZI=:....................
.................:?$ZZOOZZOZOZZOOOZZZOOZOZOZZZZZZZOZZOZOOOZ$I~..................
................IZOOOZOOOZZZOZZZZOZZOZOOOOZOZZZOOZZZZOOZOZZZOZ7=................
...............~ZZOZZOZOOZOOZOZOZZOZOZOZZZZZOZOZZOZOOZOZZOOOOZZ7................
.............:IZOOZOZZZZOZOZZOZOOZOZOZOZZOZOOZOOOOZOZZZZZOZOZZOOI~..............
...........,+$ZOOZZOZOZOZOZOZZOZOZOOZZOZZOZZOZOOOOZOZZOZZOOZOOOOO$?:............
..........:IZZOOOZOZZZZOOZOOZOZOZZOZOZZZZOZOOZOZZOZOZOZOOOOOOOZZZOZ7~...........
..........+$OOZZZOZZOOZOOZZZZOZZOZOZZOZOOOZOZOZZOZOZOZOOOOOZ$$77I77$+:..........
........,?$OOZZZZZZZOZOOOZOZZOZZZOOZOZOOOOZOZZZOOZOOZOOO7?~:,.......,...........
........+ZOOZZZZZOZOOZOOZZZZOZZOOOZZZOZOZOOZZOZOZZZOOO$?........................
........$ZOZZZOZZZZOZOOZZZOZOZZOOOOOOOOOOOZOZOZZOZOO$?,.........................
.......:ZOOZOZOZZOOZZOZOZOZOOOZOOOOOOOOOOOOOOOZOZOOZI:..........................
.......+OOOZOOZOZOZOZZZOOZOOZOOO$I+=~:::~+I$OOOOOOZ?:........,:=,...............
......:7ZOOZOZZOOOZOZOZOOZOOZ$I=............:?$OOZ7:.......:IZOOZ?,.............
......=$OZOZOOZOOOOOZOZZOOZ7=,................:?O$+.......~7OOOOOZ+,............
.....,?$OOOOOZZZZOOOOOOZOZ?,....................ZZ=.......=$OOZOOZ+,............
.....:IZOZZ$777I7$ZOOOOOZ7~.....................$Z=.......~7OOOOO7=.............
.....:+?~:,.......,~IZOO7~........~+II?=........?$?,.......:I$ZZ?:..............
.....................+ZO=,......:IOOOOOZ:.......=7$~............................
.....................:IO~.......=OOZOZOO=,......~7O7~...........................
...........:~:.......:IO~.......+OOOOZOO=.......~78Z?,.................,:.......
..........:IZ7~......+ZO~.......:7OOOOO$,.......+$OOZ7=,.............:?$=.......
...........,,.....,=7ZOO+,.......,=II?=:........7OOOOOOZ=:,.....,:=I$ZOO=.......
....................,:+$7=.....................~OOOZZZOOOZZ$$7$$ZOOOOOOZ=.......
......................:?Z?,...................:?OZOOZOOZOOOOOOOOOOZOZOZO=.......
............,::,.......,OO7:................,+$OOZOZOOZOZZOZOZZOOZOZOZOO=.......
...........~$8OI........$OOZI~,.........,:=IZOOZOZOZOZOOOZOZOZOOOZZZOZOO=.......
...........:??=:.......:OOOOOZZ7+=~~==+?$ZOOOOZOOOZOZOZOOZOZOZZOZZOZOZZO=.......
............::,.......,+OOZOOOOO$7777$$ZOOOOOZOZZZZOZOZZZOOZOZZOOOZOOZOO=.......
.....................=7OOZOOZOOZOOOOOOOOOZZZOZOZZOZOZOZOOOZOZOZZOZOOZOOO=.......
................,:=I$OOOZZOOOZOOOOOZOZOZZZZZOOZZZOZOZZZOOZOOZOZOZOZOZOOZ=.......
...........:~+?7ZOOOOOOZZZOZOOZOZOOZOZOZZOZZOZOZZZZOZOZZOZOZOZZOZOOZOOOZ=.......
........$$ZOOOOOOOOZOZOZZZZOZOZOOOZZZOZZZOZOOZOZZZZZZZZOOOZOOZZZOZOOZOOZ=.......
.......~OOZOOZZOOZZZZZZOOZOZOZOZZOOZOOZZZOZZOZOZZOZZZOZOOOOOZOZOZOOZOOOZ=.......
.......~OOZOOZZOZZOZOZZOZZOZOOZOZOOZOZOZZOZOOZOZZOZOZOZOZOOZOZOOOZOOZOZO=.......
.......~OOZZZOZOOOZOZOZZOZOZOZOZOOZOOZOOOOZOZOOZOOOZOOOZOZZOZOZOOZZOOOOZ=.......
.......~OOZZOZOZZZOOZOOZOZOZOZZOZZZZOZZZZOZOZZOOOOZ$ZZZZZZOZZZOZZOZOZZZO=.......
.......~OOZZOO$??$OOZOOZZOOZOZOZ+~IZOOOZOZOOZZOOZI==IZOZZOZOOZOZZOZI~=7O=.......
.......~OOZO$I:..~IZZZOZOZOZOZ$+...=7ZOOZOOZZOZZ=,..,=$ZZOZZZZZOZI~...,?=.......
.......~OOOZI:....:IZOOOZZOOO$+:....~7ZOZOZOZOZ$,....,=$OOZOOOZOI~.....:~.......
.......~OZI~........~IZZZOZ$?:........=IOOZZZ$+,.......,$ZOOOZZ7................
.......=7~............~IOZI:............7ZO$+:..........,=7ZZ7=,................
.......,,...............=~...............~=:..............,~=...................
GlassGiant.com"""
print "Hello World!"
// This code sucks.
{
This is a gathering place for all unit tests.
Create a TUnitTestWrapper, then call "RunAllUnitTests".
This class will create an instance of each thing to be tested, and call each of
their unit tests.
It does not really do any testing on it's own; it just gives a common place from
which to call everyone else's tests.
This way, one day, we can automate our testing with each build. [Cue laughter]
}
この悪いしゃれを私たちのコードに挿入することができました
for (bo_thans = 0 ; bo_thans < MAX ; bo_thans++)
{
if(rs == thing[bo_thans])
{
found = true;
}
}
if(!found)
{
/* Failed to find rs with bo_thans */
...
}
何年も前に、私は Z80 でリアルタイムに実行され、組み立てられていたプロジェクトをサポートする仕事に就きました (Z80 を実行する他の方法はありますか??) とにかく、元の作者はナイジェリア人で、モーセ。多分私はそこでやめるべきです。とにかく、コード全体に散らばっていたのはこれでした:
XRA A ;MT
これが何であるかを理解するのにしばらく時間がかかりました。命令自体は、アキュムレータをクリアするだけです。利点があるかどうかはわかりませんが、それは巧妙な方法です。あなたはただ行うことができます:
LDA 0
だけど、たぶん
XRA A
バイトか何かを節約します。何をするかは、排他的またはアキュムレータ自体です。もちろん、結果は常にゼロです。
MT に戻る - 空っぽ (わかりますか?)
それは私が遭遇した最高のものです。
英国の銀行への申請の請負業者から。
// i don't know how this works but it does so i'll leave it here anyway
彼はまた、BNP (英国の極右政党) をテスト用のダミー顧客の 1 つとして追加しました... 私たちの直属の上司はアジア系でした。
PHPコードの一部でこれを見つけました
$s=2; // chicken and bacon wrap for lunch
幸いなことに、$s は一目瞭然でした
<!-- Here it is -->
他のコメントはどこにもありません。「それ」が何だったのかは、今でもわかりません。
私は自分のコードのいくつかでこれに遭遇しました。カテゴリ選択用の magento 管理テンプレートにありました。
/*
* OK; before you read the following code know what I am trying to do.
* I needed to get the list of child catagories from the root node so that
* the root node didn't appear in the selection box. But for some stupid
* fucking reason the stupid fucking DBA wont let me access the items using
* indicies and I instead have to use their stupid fucking Iterator
* implementation. So there.
*/
$firstList = $this->getRootNode()->getChildren();
foreach ($firstList as $node)
{
$nodes = $node->getChildren();
break; // wtf?
}
もちろん、主力製品からその言語を削除します。しかし、私はとてもイライラしたことを覚えています。コメントを残していなかったら、修正しようとしましたが、以前と同じ問題に遭遇しました。
いくつかの Web サイトで作業しているときに、埋め込み JS の開始時にこれを見つけました。
私はこれを行うのがとても汚いと感じていますが、男は.NETでそれを望んでいました
私はこれを見つけました:
I'm not sure what I did
これは、多くのコメント ヘッダーに見られる恐ろしい法的通知や免責事項よりもはるかに優れています。SQLiteから。
/*
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
**
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
*/
struct core_unlocker
{
core_unlocker(lock)
{
m_lock = lock
unlock(lock) //Abandon All Locks, Ye Who Enter Core!
}
~core_unlocker()
{
lock(m_lock)
}
private:
Corelock m_lock;
}
C# から
#region Hack - Shield Eyes Before Expanding
/// <summary>
/// A single uint with all of the bits set to represent the different tracing
/// </summary>
/// <remarks>
/// Ugly I know, so if you can think of a better way, feel free to rewrite.
/// </remarks>
[Browsable(false)]
public uint TraceBitfield
{
// Snip
}
#endregion
Min-Max ツリーを使用して Connect 4 AI を作成するグループ プロジェクトがありました。ムーブ スコアリング関数では、ボードのスコアを計算し、そのコード ブロックの上に次のコメントがありました。
// This is kind of almost useless
しかし、それは良くなります。私たちのインストラクターは、彼が作成した大まかな AI のサンプル コードをいくつか提供してくれ、素晴らしいコメントを残してくれました。
// We also add/subtract some points based on what's going on, on the bottom
// row. (I think this is retarded, but apparently when I coded this up
// back in 1999 I didn't.)
/**
* As Gregor Samsa awoke one morning from uneasy dreams he found himself
* transformed in his bed into a gigantic insect. He was lying on his hard,
* as it were armour plated, back, and if he lifted his head a little he
* could see his big, brown belly divided into stiff, arched segments, on
* top of which the bed quilt could hardly keep in position and was about
* to slide off completely. His numerous legs, which were pitifully thin
* compared to the rest of his bulk, waved helplessly before his eyes.
* "What has happened to me?", he thought. It was no dream....
*/
protected static String DEFAULT_TRANSLET_NAME = "GregorSamsa";
//Iterate by one
$i++;
残念ながら、「すべてにコメントする必要がある」段階で、それは私のものでした。
かなり前に接続スクリプトに出くわしました。シンタックスは覚えていませんが、ピンク フロイドのファンなのでコメントは覚えています。
//Attempt Handshake: Hello? This is London calling. Are we reaching you?
//Handshake Failed: I don't understand...he just hung up.
私のお気に入りはこのようなものでした
# コメントアウト ... ### 以前はコメントされていなかった #2001-02-22 John Doe の終わり
これはよく知られていますが、私は気に入っています (sys/ufs/ufs_vnops.c 内):
/*
* A virgin directory (no blushing please).
*/
FreeBSD カーネル ソース ツリーで (さらに以前は 4.xBSD に戻っていた)
BerkeleyDB
/*
* Chaos reigns within.
* Reflect, repent, and reboot.
* Order shall return.
*/
return (DB_RUNRECOVERY);
public static final void attachListener(Object listener) {
/* ======================= */
// This does nothing, continue searching
/* ======================= */
...
リスナーに苦痛!
#!/usr/bin/sh
# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
# All Rights Reserved
# THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
# The copyright notice above does not evidence any
# actual or intended publication of such source code.
#ident "@(#)false.sh 1.6 93/01/11 SMI" /* SVr4.0 1.3 */
exit 255
SunOS 5.9、別名Solaris 9(/ usr / bin / false)から取得
かなり長く複雑な一連のwhileループとifブロックの最後に、問題の開発者はこの最後のコメントを挿入しました。
else
{
// wobbly wilson said this would *never* happen!!
}
ウィットと皮肉の簡潔な混合物:)
上記のコードのバグに注意してください。私はそれが正しいことを証明しただけで、試したことはありません。
それはドナルド・クヌースによるものです。
//too much log will kill you
このコメントは、何百MBものがらくたを書き込み、アプリケーションのパフォーマンスを大幅に低下させるログの優先度を下げるときに、自分で書いたものです。
// but the "real" solution is much more complicated
jpgraphより
私はこれに直接遭遇しませんでしたが、それは良い話になります (私のコメントの説明を参照してください):
#define MSGTAG_B33R 0x723 /* RIPLVB */
// All this code is yours, except gedit()...attempt no modifications there.
What do you think you're doing, Dave?
従来の Perl CGI スクリプトから:
# This is convoluted and evil, sorry.
var something TBoolean; //Pickins
// ここにブレークポイントを設定 - そこに到達することはありません
//Not a bug, parameter position can change..., if you think this is wrong, you are in fact wrong.
これを見てください:
'On Error Goto Hell.
/* logic */
#ifndef TRUE
# define TRUE 1
#endif /* TRUE */
#ifndef FALSE
# define FALSE 0
#endif /* FALSE */
#define EOF_OK TRUE
#define EOF_NOT_OK FALSE
IOCCCページの素晴らしい mkentry.cの残りの部分。この情報源を読むたびに、私は笑い続けることができません。
BEGIN.
// Here might be dragons
.
.
IF...
// Beware of the Jabberwocky
.//user the force, luke
.
.
ENDIF.
.
END.
// HACK ! COPY/PASTE this and look for another job
' Oh man I'm pissed. I think I better go home.
腹を立てている=酔っている
/* Only break the connection if it actually exists. It is important to
* check the timeslot saved in the SOURCE of the disconnect message. */
私はこのコメントを書きましたが、なぜそれが重要なのか思い出せません...
//FIXME: fix this before the 1.0 release
彼らはバージョン4でした
これは他の人にとっては面白かったですが、私にとってはそうではありませんでした。私は自分自身がコードを継承した開発者からコード (ASP でした) を継承しました。最初のプログラマーは、非常に理解しにくいコードをいくつか作成していました。2 番目の開発者は、次のようなコメントを追加しました (無実ではない人を保護するために名前は隠しています)。
'This code was written by **************.
'I haven't a clue what it does. He hasn't a clue what it does.
'Nobody else has a clue what it does or how it does it.
'It is something to do with data but **** knows what.
'The ******* still works so please do not change this code,
'even though it is a complete pile of ****.
では、なぜ私はそれが面白くなかったのですか?それは顧客のイントラネット用の ASP コードでした。
...そして、コメントを強調してくれたのはお客様でした。
:-(
/*
* After 36 hours, 2 holes in my wall and writing my code right beside the API
* this still doesn't work.
* function getMap():void takes in an event object @param: evt:mouseEvent
* I will now retire for the day with a bottle of rum and 2 hours of crying
*/
私が作成したmemcacheラッパー/ハンドラーインターフェイスパターンクラスでは、次のメソッドを実装しました。
/**
* Do not use, ever - left in place for testing purposes
*/
function I_David_WillHuntYouDownAndHurtYou_Badly_IfIFindThisUsedAnyWhereInTheAppLibrary(){
...
}
これは基本的に、すべての個々のmemcacheサービスに完全にフラッシュし、キーに使用した個々の名前空間カウンターからやり直すように指示するスーパー核機能でした(例:{_ counter_keyvalue}_。{_counter_keyvalue})
私が書いたもう1つのマイナーな小説は、データベンダーの自動ダウンローダーに関するもので、このベンダーをどれほど嫌いで、インフラストラクチャのバッチシステムがスナネズミによって実行され、車輪で実行され、ホイールは次のキューに入れられたタスクが開始されます。これは、例外処理を追加して6か月の間に作成され、次のようなエストリックチェックが行われました(768バイトの\ s文字を取得した場合、DBへのクエリがタイムアウトし、スペースは空の失敗した印刷ステートメントの結果です。
//If the Current Record is Getting End Dated, We should not create New History Entry.
//We Just need to Update the Previous History Entry
//If the History is already End Dated and the New Record is now removing End Date, Then
//We should not update the Previous History End Date.
//We Just need to Create the New History Record Only.
//Alright..
//Alright....
//Enough Comments. Code it. :-)
// Empty constructor to satisfy the stupid compiler
Public ServletHandlerClass () { }
#define SHIT_HAPPENED (BASE + 1) /* generic shit happened */
/*
* Wirzenius wrote this portably, Torvalds fucked it up :-)
*/
# let's pretend we are free, for a while
教室の前で見つけました。続いたのは、ORM を実装しようとする (素朴な) 試みでした。なぜ彼がそれを書いたのか、私はまだ理解していません。
これは、以前の雇用主が購入したスマートカード製品で見つかった唯一のコメントでした。オランダの暗号学博士の束によって書かれた組み込み C とアセンブラの負荷
// echt halmaal gek - no way!
(それは「本当に完全にばか」のようなものを意味します...これも私たちを助けませんでした)
// this is really complicated
他にコメントなし
OLTP データベース内のトランザクションのメイン トリガー コードに含まれています。
-- This line negates the @inverseqty, which is the
-- negative of the @insertedquantity. This works through the
-- magic of the trigger. In fact, this code is a lot like
-- the bermuda triangle!
@negquantity = -1 * @inverseqty
#define FUCK_VS6_CANT_COMPILE_TEMPLATES_WITHOUT_HANDHOLDING ((float*)0)
...
SetPinsFromChannels`<float`>(&pinbuf, streambuf, &inmapper, FUCK_VS6_CANT_COMPILE_TEMPLATES_WITHOUT_HANDHOLDING);
private static final Logger lager = new Logger();
On error resume next 'because nothing will ever go wrong!
try
{
...
}
catch(Exception ex)
{
//if this happens the world is going to end...
}
今、何が起こったのか推測してください...
// The freshest corpse at the back please.
m_DeadCharacters.push_back( std::make_pair(character, 0.0f) );
// Get rid of the rotting surplus
while( m_DeadCharacters.size() > 3 )
m_DeadCharacters.pop_front();
私たちのチームは、ちょうど今夜、次のような構造のファイルからコメントを削除した新しいバージョンの CSS ファイルをリリースしました。
@charset "UTF-8";
/* Who knew comments here could COMPLETELY ruin our page in Safari? */
body {
/* Really important stuff here */
/* Of course, comment or not, this will all get ignored by Safari because
its the first rule after the comments which break everything.
see http://www.w3.org/International/questions/qa-css-charset for the exact details!
*/
}
面白いことに、人々の解決策は、charsetステートメントの下の最初のルールとして偽の要素を入力するだけで無視され、通常どおり続行することです...
考察の材料: コメントしないコメントをどこに置くか?
補足: ヘッダーやメタ ルールなどのために、これが必要ないことはわかっています。残念ながら、すべてをキャッチするために必要です :(
JavaScript 関数の最初の行:
// this part is more difficult
なんてこと?
何年も前に .h ファイルで見たもの。
// It may be a hack, but it works.
恐怖で私を麻痺させた COBOL プログラムで見たもの
* All comments pertain to the lines which follow.
これは何を意味するのでしょうか?
メタコメントを書かなければならなかったほど、コメントすることに不快感を覚えた人がいますか?
誰かが関連するコードの下にコメントを入れる習慣があり、コメントを上に置くように言われましたか? どうしてこうなりました?
私が維持するように与えられたプロジェクトでこれを読んだとき、私は泣きました。
//Write Code Here
私はまだうんざりしています:)
数年前、私は単体テストのない大規模なコード ベースで作業していました。
いくつかのカレンダー計算を実行するコードの奥深くに埋め込まれたメソッドがありました。それはいくぶん壊れていて、いくつかの不幸な状況のために非常に不器用な方法で夏時間に対処しなければなりませんでした.
数回修正する必要がありましたが、そのたびに数か月後に何かが壊れていることがわかりました。
丸一日かけて修正と分析を行った後、コードをソース管理に入れ、次のようなコメントを付けました。
// this code was written after a version trying to do {this} failed because of {reason},
// previously we were doing {this} which failed because of {reason}. This is
// now written {this} way so that {lots of reasons here}. If you want to touch
// this code, please make sure that it produces the right answers when tested with:
//
// {some sort of unit test}
最終的に、私のチームは外部委託されました。ある日、このコードに何が起こったのだろうと思います:)
.net のカスタム Linq プロバイダーでこれを見つけました。
//select is a royal pain in the ass where
//the parameter passed to CreateQuery isn't actually the one that goes in the call
//requiring this workaround. Not sure how straight Linq to Objects does it.
そして、これ
//expressions have to be compiled in order to work with the method call on
//straight Enumerable somehow, LINQ to objects itself magically does this.
//Reflector shows a mess, so I (Aaron) invented my own way. God love unit tests!
そして、私はこれも見つけました...それはちょうど良くなります
//ok, this is a hairy, dirty, and nasty piece of code
//the alternatives are substantially worse than this though
//i.e. when you do your own provider, LINQ assumes that
//you are going to implement your own expression tree visitor and
//do it all yourself. Frankly, I still have xmas shopping to do
//and I really don't want us to be foobared when we get
//even more extension methods added to LINQ
//therefore, we are pulling execute based on taking the calling the
//standard execute on enumerable, but using our own class
//
//optimization can occur from here on an as needed basis, that is
//check for the value of mex.Method.Name, and write a handler for
//that method
//
//also, it may not be a bad idea to rather than do this reflection
//each and every time somehow cache the reflected methodinfos and do
//lookups that way that said, we need a complete red/green/refactor
//cycle here before I am touching that one
そして、これ
//Compile that mutherf-ker, invoke it, and get the resulting hash
If you have reached this part in the code, then this program sucks.
//If only humans could leave things be.
//Please do not edit this code,
//if you do you wont go to jail, you wont go directly to jail,
//you wont pass go, you wont collect 200 dollars
厳密にはコメントではないのですが…
1990 年代半ばのことで、私は大規模な移行に取り組んでいました。小規模なソフトウェア ベンダー、大規模なクライアント、多くのプレッシャーでした。ゴールポストをシフトするものがたくさんありました。プロジェクトを制御するのは非常に困難でした。私は主要な開発者でしたが、システムには不慣れで、他の開発者はベンダーの所有者/創設者でした。
締め切りに間に合わず、クライアントを満足させることができずに数か月が経過した後、所有者/創設者は、リモートで作業している別の開発者を呼びました。(私は、新しい開発者は私よりもスキルと経験が劣っていると言います。)
新しい人は、私がすでに取り組んでいたコードにいくつかの変更を加えました.1、2か月後、コードの同じ領域に戻ってきました.以前は見たことのない変数がありました. のような名前でStupidMark
。
おい、それは正しくない。つまり、チームワークに関する考慮事項がありますが、この環境では、ランタイム エラー メッセージに変数名が表示される可能性もあります。言ってるだけ。
当時の私の意見では、新人のコードはいずれにせよ、私たちを成果物に近づけていませんでした。
int main(void)
/* Program starts here */
// good luck!
//ha, you thought I was lazy didnt ya?!
Dennis M Ritchieは、ここに古代UNIXのコメントのいくつかについてのページを持っています
更新する必要のあるActionscriptでこれを見つけました...
/*
* spaghetty code in this module.
* hardcoded variables for load paths for the content window.
* Needs (vast) improvement.
*/
..素晴らしい :(
// No women, no children... What movie???
大学に戻る:
//why the f*** we have to move this here to make it work
私たちが教授と一緒にレビューに行ったとき、それは印刷された情報源で強調されました。
理由:バッファオーバーフローに関連するいくつかの非常に厄介なバグで、コードの他の場所にあるファイルハンドラーとは無関係の変数に影響を与えました。変数を移動すると、再び機能します。
先日チェックしました...
/// <STERNLY-WORDED-WARNING>
/// Pay attention to this or I will hunt you down.
/// ...
/// </STERNLY-WORDED-WARNING>
Where( "..." == "投稿できない独自のもの")。STERNLY-WORDED-WARNING要素が気に入りました。
// The following array may contain either TexturedObjects or ColoredObjects.
// I know, it sucks.
switch(value)
{
[...]
default:
ASSERT(**true**); // if this is triggered, something really bad is happening.
}
私の最大のヒット曲の編集:
// Thats the end of the While loop
// Clean up last row. I really must program better than this.
// Note: You can't immediately tell if the line below works.
// Rounding - blech. It's assumed that all .5s are rounded up.
// Sort out predictions first. Seems like the right place for a prediction, 'first'.
// Let's interpret!
ロギング フレームワークを完成させたところです (Trace を使用しますが、なぜこのようなものが存在しないのかわかりません)。TraceListenerを継承した便利な基底クラスを作りました。すべての TraceListener メソッドをオーバーライドし、それらを 1 つのメソッドにルーティングします。そのため、多くのドキュメント コメントがあります。
// TODO: Need some codemonkey to doc comment this class.
//Please comment on your source code
いくつかの本当にくだらない vb コード (すべてがくだらないことはわかっていますが) で、これは次のような空の if コントロール ブロックのコメントであることがわかりました。
If bFound Then
'I love it when I write kick ass code like this
Else
.
.
/*
FIXME: why the fuck did anyone ever think this kind of expensive iteration
was a good idea?
// Iced odnako
bool Iced{get;set;}
Hitchhiker's Guide ゲームが新しくなった頃、変数の長さを制限する言語で、何かがスクロール可能かどうか、およびユーザーがスクロールしようとしているかどうかをテストしていたケースがありました。そう:
if (scroll and noScroll) # or tea and no tea
'Major changes: Everthing! - Removed all Cornoud's code !
アート アセットのエクスポート ツールで、数字 (アラビア語) の数字からローマ数字への完全な変換ツールを見つけました。次のように見えました。
/*
//You can tell I was bored
//I wanted to do this for a long time
char* ConvertToRoman(int number, int base)
{
... whole code here
}
*/
このコードを書いた人のチームは、長い間忙しくしていたので、正気を失っていたのでしょう。
1983年にいくつかのCOBOLで見られました:
C I don't know what this next bit does so I'll jump around it
GOTO DONE.
// simply copied from another code
PeopleSoft Financials PeopleCode の初期バージョン:
/* I don't know how you can ever get here so I'll have to fix it later */
複雑なコードで見つかった -
//イエスとこのコードには 1 つの共通点があります: どちらも復活しました
以下のコードは、Python の模擬チュートリアルで見られました。
# This is my rifle.
def rifle(type='hunting'):
print('This is my (%s) rifle.' % type)
# This is my gun.
def gun(type='hand'):
print('This is my (%s) gun.' % type)
# This is for fighting.
def fighting(type='illegal'):
print('This is for (%s) fighting.' % type)
# This is for fun.
def fun(type='gaming'):
print('This is for (%s) fun.' % type)
作者はファミリーガイのファンだったに違いない。^_^
よくこんなの見つけた
// fix it!
Python/ceval.c から:
/* This is gonna seem *real weird*, but if you put some other code between
PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
the test in the if statements in Misc/gdbinit (pystack and pystackv). */
ジュムラから!ソース:
// this is daggy??
// The hackiest hack that ever did hack
これは、WordPressブログ エンジン (wp-admin/includes/user.php - 誰かが実際にハッキー ハック自体を見たい場合) にあります。
// barcore.cpp - MFC
//.....
HBRUSH CControlBar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
LRESULT lResult;
if (pWnd->SendChildNotifyLastMsg(&lResult))
return (HBRUSH)lResult; // eat it
//......
// Eat it - just like eat this.
/*************************** Drag And Drop Section - Start (you should be me to mess with this section)*********************************************/
sendmail 構成ファイルから。単にラインノイズのように見えたもののページとページの後。この宝石を見つけました。
# insert this handy debugging line wherever you have problems
#R$* $:$>99$1
Get This hack!
アセンブラ コードの行で、コメント解除されたコードのページの後。
// for 8 or 12 threads this does not affect much.
// Strange are the situations if not understood properly.
// Yoda strikes again
マルチスレッドモジュールで!:)
// Jay knows what's going on here, but will he remember in a year? Not very likely, this code sucks, but it works so do not change it.
このコメントは、巨大な while-if-for ブロックの上に投稿されました...ああ、少なくとも 3 つの要因に応じて、文字列または数値である可能性のある文字列のオブジェクト配列のオブジェクト配列のオブジェクト配列を操作しました... (はい、このコードをデバッグして変更する必要があり、コメントを書きましたが、元のコードは書きませんでした)。;)
// now that's compact!
list->insert(list->end(),**pitch)->IdxOfSample=(pitch->pos-Offset)*SamplingRate;
政府の目的で使用されるエンタープライズ クラス システムでのコメント
'RH 5/24/06 burn me if this dosn't work.. :)
Good ole RH.....company Prez/主任開発者
私はこれを見つけました
// This is a kind of magic...
'I hate nested regions and will delete them along with any code found in them.
/* Jeez, this is an ugly mess */
...comment from the X11R6 internals source code circa 1991.
//以下のコードはコメントアウトする必要があります。
// TODO: Delete
// Keep prozac ready if things get ugly!
//Do not continue reading if you dont want to die.
これはほとんど私を殺しました。
Paradox 3.5 で書かれた大規模な予算編成システムに取り組んだ後、クライアントから電話があったことがあります。
"デバッグ中に出てきたちょっとしたコメントに遭遇しました" -
// This shouldn't happen, if it does, then the bits that automagically
// worked when I wrote it have stopped working
... !
-- Beyond this point, there'll be dragons
より長い言い回しで、より楽しく説明できると思います^^
これは、いくつかのコードをリファクタリングしているときに今日見つけた私のコメントです
if( year < 100 ): year += 2000 #lol, Y2K
Gosling の Emacsソースに含まれるアスキー アートのスカル アンド クロスボーン (ここで再現するのは難しすぎる) (彼が書いた超ホット スクリーン管理パッケージは簡単には理解できないことを警告している)。
def leppard
# what, i cant have my own convention?
end
'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
'
' NOTE: DON'T SCREW WITH THIS CODE UNLESS YOU REALLY UNDERSTAND IT!
'
'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
SJ CA では、オークション ビジネスの初期の頃、Rick Dorin という男と一緒に仕事をしていました。彼は、一日中カードをいじらなければならなかった時代にコンパイラを書きました。彼のエラーメッセージの1つは
エラーが多すぎます... 減らしましょう!
http://fxr.watson.org/fxr/source/pci/if_rl.c は良いもののソースです。
// if the resultMap size is less than or equal to zero
// then the product is added
if (resultMap.size() <= 0)
コメントよりもoh_my_gawdタグの方が本当に好きです...
/ * *IOC3は信じられないほど犯されています... *一般的なPCIコードは実際にそれを見る機会です... * / if(cf ==(PCI_VENDOR_ID_SGI |(PCI_DEVICE_ID_SGI_IOC3 b_type0_cfg_dev [slot] .f [fn] .c [where ^(4-size)]; if(size == 1) res = get_dbe(* value、(u8 *)addr); else if(size == 2) res = get_dbe(* value、(u16 *)addr); そうしないと res = get_dbe(* value、(u32 *)addr); 解像度を返しますか?PCIBIOS_DEVICE_NOT_FOUND:PCIBIOS_SUCCESSFUL; oh_my_gawd: / * *IOC3は信じられないほど犯されています... *一般的なPCIコードは、間違ったレジスタを調べる可能性があります。 * / if((where> = 0x14 && where = 0x48)){ *値=0; PCIBIOS_SUCCESSFULを返します。 }
// This interface defines method signatures<br>
interface IWhatever { ... }
MAPPERアプリをコーディングするとき、いくつかの標準がありました。そのうちの1つは、スイート全体で使用されている標準変数のリストがあることでした。これらの1つ-「V43」は常に名前を保持するために使用されていました。だから、私が修正するように頼まれたMAPPERコードの大きな不可解なチャンクの唯一のコメントが次のようなものだったときの私の迷惑を想像してみてください:
Here V43 contains the Surname
eMuleのPreferences.cppで、ダウンロード速度制限に比例する最小アップロード速度制限を強制する方法:
uint16 CPreferences::GetMaxDownload(){
//dont be a Lam3r :)
uint16 maxup=(GetMaxUpload()==UNLIMITED)?GetMaxGraphUploadRate():GetMaxUpload();
if( maxup < 4 )
return (( (maxup < 10) && (maxup*3 < prefs->maxdownload) )? maxup*3 : prefs->maxdownload);
return (( (maxup < 10) && (maxup*4 < prefs->maxdownload) )? maxup*4 : prefs->maxdownload);
}
// repopulate, slight hax (or strong assumptions :P) below
最近私たちのコードでこれを見つけました(私たちはエンタープライズソフトウェアを開発しています):
// Instance of excel
Excel excel = this.CreateExcelInstance();
excel.Open(stream); // how to close it?!
それまでは、私たちはこの「楽しいもの」から解放されていると確信しており、それを正しく、観念的に正しい方法で行っています...
// Description : !!! TODO
ラテン語でAbandon hope all ye who enter here
、ダンテの「神曲」から。
//Maybe you should make anyone knows your code's purpose.
/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSTextView.h から:
- (void)smartInsertForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
- (NSString *)smartInsertBeforeStringForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace;
- (NSString *)smartInsertAfterStringForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace;
/* Java note: The second and third methods are the primitives and are the
methods exposed in Java. The first method calls the other two. All
Objective-C code calls the first method. In either Objective-C or Java any
overriding should be done for the second and third methods, not the first
method. This will all work out correctly with the exception of existing code
that overrides the first method. Existing subclasses that do this will not
have their implementations available to Java developers. Isn't Java wonderful? */
私はちょうどこれを書いていることに気づきました
// not brilliant solution, but fair enough heh.
UAT なしで顧客に提供されたプロジェクトを継承しました。フェンスを越えてドロップキックされ、お金が要求されました。
初めて使った時は自然に膨らみました。これは、ファイル記述子ではなくファイル名をパラメーターとして受け取るシステム コールを無効にする、介在するライブラリでした。
多くのシステムコールが忘れられていました。
私が乗船したとき、コードには次のような宝石が混入されていました。
/* core dumps around here but this is hardly ever called */
と
/* don't know why this works but it seeems to be ok */
ああ、単体テストはありませんでした。同僚が不足しているシステム コールと単体テストを追加し始めました。
そして、コードを書いた野郎どもはまだチームに残っていて、配信されたゴミをまったく気にしませんでした!
消毒済み:
//Forward declarations:
class X {}; // TODO: Remove {} ! When we get X defined....
[vrk:Cloud ID="cTags" runat="server" DataTextField="Tag" DataWeightField="Total"
Width="100%" DataHrefField="Tag" DataHrefFormatString="~/tags.aspx?tag={0}"]
[/vrk:Cloud]
[!--if anybody would like to change the control's color contact with FLORJON--]
ソースのコピーは持っていませんが、常に覚えています。
// 理解できない場合は、これを読むべきではありません
map(TimeZoneId.Romance, "Romance Standard Time"); //LULZ.
http://www.madore.org/~david/computers/callcc.htmlから:
/* Yow! DEMONS are flying through my NOSE! */
#pragma region Crap that is kept for temporary reasons
// Huge chunk of commented code
#pragma endregion
1980 年代初頭のある時点で、PL/I で公益事業の財務モデリング コードを作成していました。コメントの直後にコードが爆発するというクライアントからの電話を受けた
/* Honest this works */
この男は、私たちの標準的な一連の金融方程式を使用して、約 15 ページの代数を計算して、一連のコードを 1 つの方程式にまとめていました。スリーマイル島の後、公益事業が巨額の費用をかけて原子力発電所を帳消しにしなければならなかったとき、代数が起こらなければ起こらなかったであろう FIXED BIN 15 (整数) オーバーフローのために、方程式は失敗しました。
/* Hammer Time! */
コードを書いている間、彼がリップストップ ナイロンのパラシュート パンツを履いていたのかどうか、理由はわかりません。
// StupidCompilerDontInline(SCDI), in the test project where
// allcode was in a single cpp the compiler had inlined nearly
// everything which lead to nice stackoverflow.
// To prevent this the metods are made virtual
#define SCDI virtual
ジュムラから!ソース:
// fudge the group stuff
$dnstime = time() + 60 * 60 * 24 * 7 * 2; //how long are you staying for vacation on mars? twooo weeeeeks. give dees people air
// Sorry dirty code
if(count<0) count=0; //don't get me wrong but this has to be done :p
私が取り組んだ大規模なプロジェクトでは、自動ビルドで StyleCop と FXCop を使用し、ルールを使用して、コメントされていないフィールド、メソッド、プロパティなどを含むコードを人々がチェックインするのを防ぎました。
" Gets or sets the full name. " のようなコメントをFullNameのような自己文書化プロパティに追加しなければならないことに腹を立てた人がいたため、ルールを回避するためにマクロを作成する努力をしました。
マクロは、メソッド、プロパティなどの XML 要約タグを挿入しました。単一の非表示の Unicode 文字をタグ コンテンツとして挿入しました。これは、ビルド ルールを欺くと同時に、目的のためにコメントするという無知な主張に対して小さな打撃を与えました...
...少なくとも、コメント内の Unicode 文字をチェックする別のルールを導入するまでは。
まず、巨大なオブジェクトへの更新の開始時:
/*General note to all who tread in the <ObjectName>() code...
* The SetOriginals() method from the BaseEntity class should be called (and only called) right after the Get() method
* call as seen above. Calling the SetOriginals method elsewhere will result in bugs and all kinds of other nasty suprises.
*/
次に、オブジェクトを更新するための約 200 行のロジックの後:
//Attempt to explain this confusing mess of code:
//First time you save an actual absence this is what happens:
//0. The first save saves to the <TableName> table (among other things). (Fig. A)
//1. The <CalculationMethod> method is called next which inserts to the <OtherTableName> table.
//(This is the table that keeps track of credits to the case.) (Fig. B)
//2. So then you have to call <UpdateCalculations> to move the <TableName> records to the <ThirdTableName> table. (Fig. C)
//3. Then you go back and run calculations since you have the debits table (<ThirdTableName>) populated. (Fig D.)
//4. Then a final save to save the calculations back to the case. (Fig. E)
//Yeah, I know what you're thinking: this sucks. 10/01/07 XXX
そして、開発者は正しかった...これは大変だった!
今朝出くわした VB.NET の素敵なものに、クスクス笑ってしまいました...
''' <summary>
''' Represents an exception that was logged. Since System.Exception implements IDictionary, it can't be
''' serialized, so I had to write this. Pretty fucking stupid thing to have to do, System.Exception should
''' be serializable right out of the box, IMHO.
''' </summary>
''' <remarks></remarks>
Public Class LogException
double t = 0.0; /* that's generally my opinion of the diner, too. */
/* Look not upon this file lest your eyes be burnt from your head. */
何と言えばいい?私はインターンで、夏はもうすぐ終わりました。私は、文書化の責任に対する真剣な取り組みが欠けていたと言えます。
以下は、さまざまな時期にコードに挿入したものです。技術的なコメントではないものもありますが、同じ種類の概念です。
1 つのプラットフォームのみで特別なコードを必要とするクロスプラットフォーム プロジェクトでは、次のようになります。
//If defined, will include all the Windows-specific code.
#define LOSE
#ifdef LOSE
#include <windows.h> //WIN32. Duh.
#endif
---------------------------------------------------
//Stolen from other_project_name.cpp
---------------------------------------------------
/*
* These comments have been lifted from propagate() and, though they no longer apply to the code, they may still be of value somewhere. Original tabbing and structural elements have been preserved.
*/
//CAUTION: This has a major Bobby Tables risk. Even if a rulebuilder is used, there's still the risk of something getting corrupted in the database itself.
//Reading text from anywhere and simply slotting it into an SQL statement is a major security risk. (With thanks to xkcd for the name "Bobby Tables".)
//Requirement: Eliminate one Bobby Tables by changing [redacted] to be not just straight SQL.
[lots more comments that are not as funny]
/*
* End of lifted comments. There should not be any executable code between these markers.
*/
---------------------------------------------------
/*
Okay. It's unrecognized. Why is this a fatal error? It's actually very closely akin to the miswart of botched #includes being a fatal. When writing a C/C++
program, you need your headers, and if you don't have one, chances are there'll be a million cascaded errors; so by making "unable to open asdf.h" a fatal,
the compiler suppresses all those errors about undefined symbols and potentially misspelled type names.
*/
---------------------------------------------------
//If someone tries to import 'id' as a field name, it won't work. (We already have our own id.) But I think the probability is so low that I can afford to be funny.
if (!stricmp(ptr,"id")) {warn(0,"Import","","'id' is a reserved word and cannot be used as a column name. (Try 'ego' or 'superego'.)"); return;}
---------------------------------------------------
//Need a place to squirrel away SQL statements somewhere
char *uts[1024]; //Unified Temporary Storage. (Why? Because I said so.)
int nuts=0; //What is it that squirrels keep? Ha!
int utsid[sizeof uts/sizeof *uts];
---------------------------------------------------
/**************************************\
* NOTE: This sets tilde.action. If a *
* tilde header does not exist in the *
* import file (not the _content_, if *
* the entire column isn't there), it *
* will duplicate down through all of *
* the rows. This is fine for ~id, as *
* that will never be changed; and if *
* ~Quantity is blank, that throws an *
* error in 'Add'. With ~Action, I am *
* not so certain. I THINK it'd be OK *
* to dup-down most of the time... if *
* the user only ever imports Adds or *
* Revises, but never both at once in *
* a single import. So for safety, to *
* allow a blank ~Action to revise OR *
* add, I'm breaking the check out to *
* a new variable - the curaction. In *
* most cases, it won't be needed, so *
* it's a waste; but it isn't like it *
* has to copy the entire tilde.*, so *
* it's only a small waste. So it can *
* waste a register... big deal. OK ! *
\**************************************/
---------------------------------------------------
//if (!response) // we're going to crash
//if (!items) // we're going to crash
//TODO: Don't crash
---------------------------------------------------
私のコメントの多くには、映画やミュージカルへのあいまいな言及が含まれていますが、ショーを知らなければ、それほど面白くないでしょう.
// Holy moses! I've never seen anything so ridiculous in all my life.
// Why do we need to query the AlarmIDs table twice.
// Please tell me sir; I would really like to know.
// This like all the other services have been mangled
// to the point where they are nearly impossible to determine what kind of side affects might occur.
// I am making the smallest changes I can to this code.
// The GetAlarmId method gets the alarm id from the AlarmIDs table.
// Novel idea, why didn't we query for the values be get below all in the same place.
// This should be changed, but right now it will have to remain as is due to time constraints.
// This like all other services really don't do anything fantastically hard, but after the original coders got
// done with them; they are difficult to work with and have an acceptable comfort level.
/**
* Hexadecimal digit
*/
protected $version = -1;
私たちはファイルを持っていて、その中途半端で混乱を理解しようとしているプログラマーがすべての無意味なコードを最後に移動し、次のようなコメントを残しました:
I have no idea what this stuff does below here.
別のプログラマーは、アイデア内の名前空間を掘り下げてアクションを選択できるように、どちらか一方の本のように機能する一連のネストされた名前空間を残しました。
以下に 4 つ、順不同で示します。
// Father, forgive me, for I am sinning
// heaven help me
// horse string-length into correctitude
(from a textbook)
// what, me worry?
'this next if statement - just how it is. don't try to understand it because you won't. :)
それがまさに雇用保障です。
以前、MS SQL Server Developer 2000 (ヒューマン ワークフローのもの) を使用してドキュメント ワークフローを実装したことがあります。
これは、ワークフロー ルールに従うようにするためにデータベースに追加される一連のトリガーで構成されていました。
トリガーの 1 つで、Microsoft の誰かが次の行に沿って何かを書いていました。
//Determine if the database has been "Grizzlified"
(製品の内部名が「Grizzly」だったので、おかしいと思いました)。
Fix problem where Nulls don't work properly. Stupid Microsoft!
愚かなプログラマーは Null が何であるかを理解せず、Nz() 関数について聞いたことがなかったため、コードは Null を行ごとに長さ 0 の文字列に変換しました。
ユニットの上部付近:
// Oh what a tangled web we weave
// When first we practice to deceive
// ASTA
技術的にはコメントではありませんが、午前 2 時頃のコーディングから:
consent = False
... その変数は二度と使用されず、ソケットのリッスン ループの先頭に表示されます。
// GK Experimental
(GK はコーダーのイニシャルです)
実際、一種の実験的なコードの部分を示すために使用されます。:)
デバッグ中にヒットすると、ハックを修正するために今後数時間忙しくなる可能性があることを知るのに最適なフラグ.. ;)
もはや役に立たないと思うコードのチャンクをコメントアウトしているが、間違っている可能性がある (したがって、それらを削除しない) ときは、それらの前に
// Wilted celery?
これはしおれたセロリのようなものですが、とにかく冷蔵庫に戻します. 10年後、他の誰かがこれらのコメントを見つけてWTFと言うだろうと私は知っていますか?
Linux カーネル ソースから:
linux/include/asm-i386/hw_irq.h:
/*
* subtle. orig_eax is used by the signal code to distinct between
* system calls and interrupted 'random user-space'. Thus we have
* to put a negative value into orig_eax here. (the problem is that
* both system calls and IRQs want to have small integer numbers in
* orig_eax, and the syscall code has won the optimization conflict ;)
*
* Subtle as a pigs ear. VY
*/
try {
dataSource.close();
}
catch (SQLException ex) {
// Do nothing, since we're going to trash this anyway
}
もちろん、この種のものは、接続を閉じるときにSQLExceptionsをスローできるため、実際にはJDBC(または少なくともOracleのJDBCドライバー)のwtfです...
私はちょうどこのコメントを入れました:
// this control (Resistance) is FUTILE!
HTML を生成する古い perl スクリプトで見つかりました。
# I would be _very_ brain farting if I said this code didn't need reviewing.
# It will make babies cry, and hair grow on your back, so please don't use it
私はこれをいくつかのレガシーコードで見つけました。
'CANNOT JUST QUIT!
自分のドッグフードを食べ直す:職場でも同じ用語が使われています(私が紹介したからといって、認められています)。私のコードには「TODO」というコメントがたくさんあり、最終的に実行する必要があることを示していますが、「DOGFOOD」(両方のキーワードは常にコメントの先頭にあり、すべて大文字で)というコメントは実行する必要があることを意味しますこのプログラムが内部でも使用できるようになる前に。「dogfood」という単語が引用符で囲まれた文字列に表示されることはないため、検索すると便利です。表示される場合は、いつでも「dog-food」などと言うことができます。大文字と小文字を区別しない検索でも表示されます。正しい結果が得られます。
アキュムレータのゼロ化について:Intel 80x86をプログラミングするときとまったく同じことをしました(8086から始めて、そこから最新のPentiumに移行しました)。レジスターをそれ自体とXORすることは、それをクリアするための最も迅速でタイトな方法です。「MOVAX、0」を使用するには、3バイト(オペコードと2バイトのリテラル16ビットゼロ)が必要ですが、「XOR AX、AX」は2バイトだけです。「MOVEAX、0」が5バイト(32ビットゼロの4バイト)を必要とする386以上の拡張レジスタでは、さらに顕著になります。私のC/C ++コンパイラは常にこの方法でレジスタをゼロにするので、それでも最善の方法だと思います(ただし、オペコードのタイミングテーブルについては何年も研究していませんが、おそらくXOR reg、regとMOV reg、immの両方が1クロックかかります) 。
REM Don't delete this print statement ****** will die
問題のプロセスは、いくつかのレガシーコードのサービスでした
// Oh crap, i think i'm gonna yack
その後まもなく:
// TODO: end this lunacy
よく書かれた Lisp は、最も読みやすい言語の 1 つであり、私はそれが大好きです。しかし、不十分に書かれた Lisp は、悪い Java などよりもはるかに悪い悪夢になる可能性があります。
ここで、サフィックス a、b、c が付いた元のファイルの 3 つのバリアントが存在する場合、「グループ ファイル」を作成する必要があります。不要なグループ ファイルを取得する奇妙なバグを突き止めようとしていました...
(let ((varianta (format nil "~aa" problem))
(variantb (format nil "~ab" problem))
(variantc (format nil "~ac" problem)))
;;if the A and B variants exist, create a group file
;;(why not just check for a? I don't know, this just feels right)
(when (and (probe-file varianta)
(probe-file variantb))
...)))
バグ: 1、ガット: 0。
これを書いた人は、おそらく 3 つの亜種すべてをチェックするのが良い考えだとは思わなかったようです。もちろん、これは、このコードが最初に書かれてから 10 年後に私が突き止めたバグでした (最初の SVN ログより前の日付です)。
クラスの古いコードを振り返るのは楽しいです...
cardDeck.push_back(*(new card((rank)r, (suit)s))); // Push each card onto the deck
// Temp. objects are overrated
いくつかのことを経験しているうちに、ランダムなコードを一緒にハッキングしていた午前 4 時にもっとコメントを残しておけばよかったと思います...
これは古い IOCCC の受賞エントリからのものです。受賞者のアーカイブ全体 (1.4 M という膨大な量) をダウンロードし、間違って覚えていたいくつかのフレーズを grep して見つけなければなりませんでした。
構文的には、これはおそらくコメントではありません。またはそうかもしれません。私はそれを理解していません。コメント区切り文字はありませんが、文字列区切り文字もありません。
C="Lint says "argument Manual isn't used." What's that
mean?";
lint からの出力を推測するための価格はありません。
興味深いことに、そのエントリはこちらです。
私が見たいくつかの古い fortran コード:
integer *4 one,two,three;
c asssign one to 100 before entering the loop
one=100;
[onload_1;block=begin;when 1=0]
Some of the techinques in this template are rather obscure, just trust me, they need to be there.
OTOH a better sollution would be to create a few seperate templates and pick one in the php-script...
[onload_1;block=end]
// long live COM'n'Roll
public enum StatusCode
{
//success codes
S_OK = 1,
S_NONE = 2,
S_SQL_OPERATIONS_LISTS_EMPTY = 3,
//error codes
E_NO_MATCHING_END_FOUND = -1,
E_SEQUENCE_NUMBER_NOT_FOUND_AT_BEGINNING = -2,
E_SEQUENCE_NUMBER_NOT_FOUND_AT_END = -3,
E_FORWARD_AND_BACKWARD_OPS_COUNT_DO_NOT_MATCH = -4,
E_FORWARD_AND_BACKWARD_IDS_DO_NOT_MATCH = -5,
E_IDS_DO_NOT_MATCH = -6
}
// now swap like a <explicative removed>
(A bunch of code that's really weird looking) //Kludge.