プロフィール

けい

Author:けい
公開したWebサービス・アプリ一覧はこちら

※2014年12月、私が個人で開発したWebサービス・アプリへの
累計アクセス数は8億を超えました。
負荷対策頑張ります。日々精進していきます!!


■■■ 業務経歴 ■■■
社会人1年目:携帯電話開発。画面周りを1年間
2年目 :海外向け携帯電話ミドルウェア開発
     ブラウザとプロトコルスタック周り
2年目後半~:携帯電話の通信専用チップ開発
3年目:カーナビ。画面周りの開発
3年目後半~:BDビデオカメラ
     組み込みLinux カーネルと
     ドライバの開発。
4年目12月:プロジェクト途中で退社
~ここまではC、またはC++で開発~

~ここからJavaがメインの開発~
4年目1月:Web系の会社に転職
       ~4ヶ月間の研修
5年目5月:製造業向け生産管理システム開発
6年目9月:証券会社向けシステム開発
7年目10月~携帯電話向けコミックサイトの運用・開発
8年目12月:プロジェクト途中で退社

~ここからPHPがメインの開発~
8年目1月~仲介手数料が無料の不動産屋の社内SEに転職
交渉しほぼ完全に裁量労働が可能な立場になる。
業務内容はシステム全般ですが、
最近はSEO対策の作業が多いです。
現在14年目 まだ、しばらくはこの会社に居るつもりです。

あと、全ての記事がリンクフリーです。

最近の記事

過去ログ

全ての記事を表示する

全ての記事を表示する

カテゴリー

FC2カウンター

RSSフィード

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.--    [ Myカテゴリ:スポンサー広告 ]

IOCCC 邪悪なコード祭り

IOCCCという祭りを聞いたことがありますでしょうか?
wikipedia にはこんなことが記載されてありました。

http://ja.wikipedia.org/wiki/IOCCC

----------------------------------------
IOCCCとは「The International Obfuscated C Code Contest(国際邪悪なCコードコンテスト)」の略称。汚く読みづらいC言語コードをあえて書き、その汚さを競うというC言語ハッカーの奇祭である。むろんただ汚ければよいというわけではなく、目にした瞬間のインパクト、実行結果の美しさなど、さまざまな要因でアーティスティックなものが選ばれる。多くのコードはそもそも全くC言語に見えない。コード全体がアスキーアートになっているものなどが典型的である。
----------------------------------------


興味を持ったのでちょっとソースを見てみました。
以下ソース
-------------------------------------------------
char a[80];
int e[4],g[5],c=100,h,i,j,k,b,f,s,t,p[4][1000];
int main(char*d){
return main((char*)(srand(time(&h)),
setjmp(p[2]),
(k=atoi((gets(a),
a+strspn(a," -"))))
&&(b=k),
b||++b,
j+=-j,
d=(char*)(&j),
setjmp(p[1]),
1<<1>j&&(k&=4>>3,
i=1<h<<=i+j,
setjmp(p[0]),
(h+=*d++-h)&&(-'1'^(h-='1'))&&(i<<=4,
setjmp(p[3]),
(i||!++i)&&(h--||(k|=i),
i/=2,
longjmp(p[3])),
longjmp(p[0])),
k^=-1,
k+=1<<037,
setjmp(p[3]),
k&&((--i<5&&1&k)&&(s=(rand()>>9)%0x4,
setjmp(p[0]),
t+=(rand()>>3)%015-t,
e[s]&(1<e[s]|=1<g[i]=t|++s<<"\004"["\004"[1]]|t),
k>>=1,
i+=1<<1,
longjmp(p[3])),
setjmp(p[0]),
putchar(0x20+!putchar(012+"(.7-A,G+@*J)/"[(017&(i=g[4-k]))*013%13])),
++k^005&&longjmp(p[0]),
putchar('\n'),
setjmp(p[3]),
putchar(0x1F+!!putchar(("BCDHS"[g[--k]>>4]))),
k&&longjmp(p[3]),
putchar('\n'),
j+=1<<0,
1^j||(d=(char*)gets(a)),
longjmp(p[1])),
s=1==(f=0),
i=0<<1,
setjmp(p[3]),
i<4&&(j=i+1,
setjmp(p[1]),
j<5&&((017&g[j])>(g[i]&15)&&(k=g[i],
g[i]=g[j],
g[j]=k),
j++,
longjmp(p[1])),
i++,
longjmp(p[3])),
setjmp(p[0]),
i--&&!((g[1+i]^g[i])>>4)&&longjmp(p[0]),
setjmp(p[1]),
--j&&(!(k=(g[j]&15)-(g[j-1]&017)+1)||(!(j-1)&&(8==-k)))&&longjmp(p[1]),
s+=3*!j|!(++i^17),
(j*=i*=4)&&(i=1),
setjmp(p[3]),
5-j<2&&(j=0,
setjmp(p[1]),
5-i>j&&((g[j]^g[j+1])&0xf?g[j]^=g[j]:(s+=((g[j]&0xf)>8&&f++,
!!g[j]*i)),
j++,
longjmp(p[1])),
i++,
longjmp(p[3])),
s=1^s?"AACEDJQZHello World"[s]-'A':!!f,
s+=(!i)*(6+12*s-!!s*(g[2]&017^0xa?8:-192)),
s--,
s*=b,
printf("$%d (%d) \n",
c+=s,
s+b),
i=0,
setjmp(p[0]),
6>i&&(j=1,
setjmp(p[1]),
0<=j&&(e[i+j]^=*(i-j+e+(j<<1)),
--j,
longjmp(p[1])),
i+=++i,
longjmp(p[0])),
longjmp(p[2])));
}
-------------------------------------------------
もはや最初の数行でわけわからん。
というよりC言語のソースに全く見えず、最初は文字化けした文字列かと思った。

IOCCCのソースの解読をしている人のホームページがあったので、興味があれば見てください。(一行のソースコードの説明に30行以上必要・・・すごいですね)
http://kzk9.net/column/ioccc.html


私的にはここまでソースは酷くなくても、結構読みづらいコードを書く人は結構いて、また自分的には読みやすくても、レビュー時にはわからないという人が結構いる。
最近ではこんなコード。

typedef struct newst {
int i;
}new_struct;

/* stはnew_struct型の変数を指しているポインタである。 */
?
void eventhandler(void *st) {
func(((new_struct *)st)->i);
}

?
void eventhandler(void *st) {
new_struct *prm = (new_struct *)st;
func(prm->i);
}

私は?の方を多用するのだが、レビュー時には?がわかりにくいと言う人がたまにいる。また、意図的に?を使用している人曰く、単価はコード量(ステップ数)で決まる部分もあるので、一行でも長く書くために、このようにしているらしい。
ちなみに括弧も一行と数える会社は結構多いようである。

また、私がこれが理解できるのは普通なのか、それとも指摘するべきなのかと迷ったコードに以下である。
?
void eventhandler(void *st) {
int iCount = 0;
int i = 0;

while(iCount == 20) {
iCount++ += i++;
}
}

う~ん。一応わかるのだが、どこまで分解するべきなのか。
それとも2行くらいコメントをつけさせるべきか。
この辺は会社によっても判断が分かれそう。
私はとりあえず、左辺の++はアウトだろと思っており、
+= はギリギリセーフという感じなのですが、みなさんどうなんでしょうね。

P.S
IOCCCは原文自体がインデントなしなのですが、
私の書いたコードはインデントしているのですが、なぜかブログに書くときにスペースが消されてしまったものです。
どなたか行頭のスペースのつけ方をご存知でしたら教えてください。
スポンサーサイト
トラックバック(0)   コメント(2)   2006.09.16    [ Myカテゴリ:技術の話 ]

コメント

htmlは行頭の半角スペースは無視されます。
また、半角スペースを連続で記入しても無視されます。
2009.01.26 13:39 URLエンジニアの卵さん#- - 編集
<pre> </pre>で括ってみるといいかと
2011.11.06 23:09 URLエンジニアの卵さん#- - 編集

コメントの投稿













管理者にだけ表示を許可する

Template Designed By
ぐらいんだぁ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。