今日から入社の新人二人は、それぞれ 25 と 29 で未経験だった。 32 で未経験の人はまた後日。
で、そのうち 29 の方の人は流石に何もやってないとマズいと思ったのか、多少なりとも入社前に勉強してきたようだ。他の未経験入社の人達も、何かしら事前準備をしてきてくれればなあと思うけど、なかなかそうも行かないんだよな。
新人のみなさんへの切実なお願い: 大脳新皮質を使ってください。
……どっから話を始めればいいのか皆目検討が付かないので、今日起こったことをツラツラと書いてみる。まずはちょっとソースの方から。
class Foo {
public static void main(String[] args) {
//とある理由により、 args[0] を char[] に変換したい
char[] cArray = ?
}
}
周辺の事情は省くが、コマンドライン引数として渡された文字列を文字の配列にして 1 文字単位で処理をする必要が出てきた。どうやっていいかさっぱりわからないようだったので仕方がなく「API 見ろよ」といって String クラスの API を読ませたところ、そこで toCharArray メソッドに行き着いたようだ。そしてそこからの迷走が凄かったんだな、これが。
class Foo {
public static void main(String[] args) {
char[] cArray = toCharArray(args[0]);
}
}
お前この一ヶ月半以上何やってきたんだよ。まさかこんなコードを拝まされるとは夢にも思わなかったというか、いやこの時期にこれはねえだろ。当然コンパイラ様は大激怒なさっており、怒りを鎮めるためにはコードを直す他なく、そして俺が直すわけにも行かないので本人に
といったところを聞き出そうとしてみた。とりあえず覚えている限りのやりとりがこんな感じ。
この時点で相当俺はぐったりしていたのだが、追い討ちをかけたのが次のコード。
class Foo {
public static void main(String[] args) {
String string = new String();
char[] cArray = string.toCharArray(args[0]);
}
}
だから何やってんだよお前は。思わず喉笛に貫手をかましたくなる衝動をぐっとこらえ、腹の底から湧き上がってくるドス黒い感情を押さえつけながらさっきと同様に対話を試みることにした。
いい加減うんざりしてきたので俺は程なくして帰ったが、ちょっと気になって帰りがけにコードを覗き込んだら次のようになっていた。
class Foo {
public static void main(String[] args) {
String[] cArray =
}
}
どこまで迷走する気だ、こいつは。明日になっても事態が改善していなかったらチェックメイトだ。流石にもう数日で二ヶ月目になるのにこれというのはマズいというか、そもそもこいつそれ以前の問題じゃねえかって感じだ。
確かに俺の指導方法である「相手に自分のコードを徹底的に解説させる」というのは厳しいやり方かもしれない。何故って、自分の間違っている部分を自分の口から言わなければならなくなるからだ。だけど自分が何を間違えていたのかを認識しないままではきちんとした理解にはつながらないし、経験上は自分のやっちゃった部分を笑いの種にできるぐらいの姿勢の奴こそが伸びる。そしてこれは極めて普遍的で効果的なデバッグ手法でもあるし、コードを用いたコミュニケーションに慣れさせる意味合いもある(前にも書いたかここら辺は)。
しかしこういう全然自力でプログラムを書けそうもない奴を見てると、やっぱ向き不向きの激しい職業なのかと思う。というわけで俺はもっと採用の関門を厳しくしたいのだけど、人を集めて売っ払うというビジネスモデルでは現状の方が正しいんだよな。
なのでそこをひっくり返すために、頭数商売でない仕事の進め方のできるような環境作りを上司が主導で始めているんだが……。やはりできる技術者が足りていないという現状があるからな……。
昼頃になって会社の Web サーバの調子がえらいこと悪いのに気がついて、ちょっとばっかし調査してみたら、というかしようとしたら HDD が瀕死の状態になっていた、というか既に / パーティションが死亡した状態でバンバカ動いており、パーティションを細かく分けていたおかげで落ちていなかっただけのようだった。というわけで今日はサーバの再セットアップで相当な時間を取られた。
しかし予備のハードウェアなど一切なしの冗長性ゼロ構成で運用するのはいくらなんでもマズいんだけど、追加のハードウェア用の予算を出してもらえないんで仕方がない。まあ、企業ブログと採用情報(と申し訳程度のフリーソフトウェア)のみのサイトで、第三者にサービスを提供してるわけじゃないからそれでもいいっちゃそうだが。
何か妹二号がとある専門学校主催のファッションショーのデザイン画コンクール高校生部門に作品を送りつけて、なんと入選をしたらしい。とても俺の妹とは思えん活躍だ。何せ、俺が高校生の時はそういう将来に向けての活動はろくにしてなかった、というか前にも書いたけど高三になって始めて「やべえ理学系って食えなさそうじゃん」とか「うちの財政状態じゃ院までいけないじゃん」とか慌て出して、それで食いっぱぐれる事が無さそうな進路として情報系を選んだからな、俺は。それに比べりゃ上出来もいいところだよ。
そうだ、明日は病院に予約入れてるんだった。寝坊すると厄介というか待ち時間が増えて面倒なので、今夜は早く寝るか。マシンの再セットアップは明日の午後からかなー。
いろいろあって再セットアップに手間取った。まあ、 KDE とか全部手元でビルドするんだから、時間がかかるのは仕方がないか。あと skim にバンドルされてる scons が腐ってたんで気合で emerge した気がしなくもないけど、詳しい調査をする気力がまったく湧いてこないのでさあどうしよう。単純にビルド時のライブラリパスが間違っていただけの気がするんだが、どうも Bugzilla への報告とか見てるとそんな問題じゃなさそうだしな。そもそも scons の仕組み自体まだよくわかってないから、今の俺にはお手上げ。
それでとりあえず日記が書ける程度の環境には戻したので、後はプログラミング関係と音楽関係のソフトウェアを突っ込んでいくだけだ。それと前に作ったフォント、あれの元データのバックアップをうっかり忘れちまったんで、また fontforge 使って作り直さないとな。
それで日記を書いていて気がついたけど、 Qt を immqt サポート付きでコンパイルするのをすっかり忘れていて、 scim とかが使えるけどちょっと不便というかちぐはぐな状態になってる。こりゃあ Qt も再コンパイルか。余計時間かかるなあ。
こういう事書いてるとお前は何で Gentoo 使ってんのとか言われそうだけど、何ていうか Gnetoo は強烈にツンデレなディストリビューションなので、この感覚に慣れてしまうと他のディストリビューションに移る気がなくなってくるんだよ。
しかし HDD がお亡くなりになって何が痛いって、今までにリッピングした CD のデータが全部オシャカになったから、それをまた再度リッピングいないといけないのが痛い。もう殆ど聴かなくなった奴とかを省くにしたって、一体どんだけの作業になるんだか。
相変わらず某新人のコードとか発想には悪い意味で驚かされる。というわけで本日のアレなやり取りをどうぞ。
public class Foo {
private Map<String, Hoge> map;
(略)
/**
* 引数 x と y から map のキーが構成されると思って。
* 引数に対応したキーの有無で処理を分岐させる。
*/
public void bar(String x, String y) {
map.get(x+y); //ツッコミどころ A
if (map.isEmpty()) {//ツッコミどころ B
(略)
}
}
}
えーと、詳しいコードを載せる気力がないのでエッセンスだけ抜粋。要するにメソッド内の分岐にメンバである map がキーを持っているかどうかを使いたいのだけど、どこから電波を受け取ったのか上記のようなコードになってしまった。たった数行でこんだけデカいツッコミどころを書かれると、俺はとても困る。ゲンナリしつつも頑張って対話を試みてみた(そろそろ限界なので明日もっぺん説教だな。説教なんざしたくもねえってのが本音だが)。
ここで俺の心が折れた。ちなみに上のやり取りは毎回毎回数十秒から数分のフリーズを挟んでおり、その上これはかなり端折ったやり取りなので実際にはどうなのかは推して知るべし。
結局その後もいろいろと指導はしたけど、何かもう根本的なところから勘違いをしているというか、思考の順序が無茶苦茶というか、シナプスの繋がりに難があるというか。俺は今までプログラマになれるかなれないかの差というのは抽象化能力で決定されると思っていて、いわゆる「再帰とポインタ」の話もそこに行き着くんじゃないかと思っていたんだけど、どうにも実はさらにその前の段階で差が出ているようだ。
じゃあその前の部分の「差」って何だろうって話なんだけど、これはもう単純に言語能力なんじゃないかな。いや、これも結局は抽象化能力に還元されちゃうのかもしれないけど、とにかく文章を読み解いたり他人に説明したりする能力の欠如ってのが最大の障壁になってる気がする。でもそれだったら他の知的労働とか全部できないってことになるか? よくわからん
しかしまったく意味不明な単語があって、しかもそれがメソッド名に使われているという状況で辞書を引かないのは致命的にマズい。別に単語の意味を知らなくてもドキュメントから類推できればそれでもいいという事もあるんだけど(いや本当は全然良くねえけど)、まったくその辺が理解できずにいて平気というのはどういうことだろう。
そういえば前に採用拒否にした奴に対して「自分が理解できない事を認められないので勉強しない」という印象を持ったというかそう分析したんだけど(これは上司もそう分析した)、よくよく思い出してみれば「ゆとりの法則」に似たようなことが書いてあったな。ちとそこら辺に関する事を抜粋してみる。
私たちには、あまり重要でないことを学習するときはスポンジのように新しい知識を吸収するが、本当に重要な事は学習しようとしない傾向がある。これは組織にも、個人にもいえることだ。
教育者は、学習プロセスは4つの要素で構成されると教えている。学習者、指導者、教材、共同学習者である。
開発手法を教えはじめた頃の経験から、人びとは自分にとって本当に重要な事を学習するときには、一時的にパニックになることがわかっている。(中略)そんなときは、あたりを見回して、ほかの人も青ざめていること、ほかの人も冷や汗をかいていることがわかると、学習者はほっとする。
チームは理想的な学習環境であり、コーチとして指導したり、されたりすることが日常の中で欠かせない場所である。
「ゆとりの法則」で組織における学習に割かれているページはそれほど多くないが、それでも充分過ぎる程に重要な示唆を含んでいる。俺は改めて共同学習者の重要性という奴に気付かされたので、どうにかして新人連中を団結させようと試みているけど、なかなか上手くいかないものだ。
中途採用の場合等は入社時期の関係上、研修生の習熟度が凄まじくバラバラなので、むしろ研修生同士で教え合うには好都合だとも思っているけど、なかなかそういう風にはならないのがもどかしい。ちなみに研修生同士でアドバイスし合うような状態になった連中は、サンプルが少ないのがちとあれだけど、そうでない連中よりもずっと良く伸びた。特に講師に対してアドバイスをもらうときに、他の研修生が質問者の発言をフォローするという形になると、教える方も教わる方も非常に楽になる。
こういうのはあんまり押し付けがましくやるわけにも行かないので、一体どうすりゃいいのか途方に暮れている部分もある。先に出した「言語能力」というのは「コミュニケーション能力」に割とダイレクトに繋がっていて、それが欠如してる奴をどうやって周囲に溶け込ませるか、そして俺がどこまで忍耐強く付き合えるかというのがおそらく最終的な問題で、ぶっちゃけ俺は聖人君子じゃねえから我慢の限界ってのがあるわけだ。
さて、明日からマジでどうしようか。
昨日は新人歓迎会っぽい飲み会だったのだが、諸事情により酒の殆ど飲めない俺はずっと素面で酔っ払いの相手をすることになった。まあ、体育会系的な無茶飲みされない分だけまだマシか。
今月 24 日に発売予定の Trivium の新作、 "Shogun" からの先行公開楽曲。……なのはいいけど、「斬り捨て御免」はねえだろう。アルバムタイトルもいい感じにヒドい(褒め言葉)。そして楽曲自体は極めて正しいヘヴィメタルで、信じられん事に "KIIIIIIIRISUTEEEEEE GOOOOOMEEEEEN!!!" というネタにしか思えないスクリームが格好良いんだから困ったもんだ。
会社で連休の話がチラッと出て、それで来週の月曜日が休みだということに気がついた。あと再来週の火曜日も休みだと言われた。危うくまた出勤するところだった。
最近出た「でろでろ」と「ゆうやみ特攻隊」の新刊が相変わらずいい仕事で、俺の中での押切蓮介株が依然として上がりっぱなしなのだが、何で俺はこんなにこの人の作品が好きなんだろ(単行本は全部揃えてる)。なので押切漫画の魅力についてちと考えてみる。
押切漫画のわかりやすい特徴は「幽霊や妖怪と人間の区別が曖昧」というところで、これが「ホラーギャグ」といわれる(最近はそれだけに留まっていないが)押切漫画全体のカラーを決めているといっても過言じゃないだろう。具体的に書けば、押切ワールドでは幽霊に肉弾戦が通用する。それどころか普通に警察も幽霊をしょっぴいて取調べをする。そして取調べの内容がすごい。要約するとこんな感じ。
彼氏にフラれて自殺しただぁ? お前、それまでは幸せな人生だったわけだろ? それでたった二ヶ月男が切れただけで自殺して人を呪い殺すとか、わけわかんねーよ。
俺はこれを読んだときに、本当に心の底から「スゲー」と思った。幽霊譚の恐ろしい所というのは「不条理な理由で幽霊に危害を加えられる」という所にあって、それを逆手にとってギャグにしてるわけだ。泥棒にも三分の理とかそういう言葉があるけど、押切流ホラーギャグではその三分の理をときに無視して人外連中を叩き伏せてしまうわけだ。
一事が万事こんな感じで、相手が幽霊である必要性がどこにあるんじゃと思うけど、民俗学的には幽霊とか妖怪の類ってのは「子供をしつけるための方便」であると同時に、「実際に起きたえげつない事件を包むオブラート」という話も聞いたことがあるので、本人がその話を知っているかどうかはさておき、押切漫画の幽霊や妖怪ってのは「身近にいる奇人変人犯罪者」という解釈も成り立つ。
特に「でろでろ」では化け物と人間の区別が超曖昧で、化け物連中が普通に人間相手の仕事をしてたりするし、そもそも主人公達が作中でやってることが「傍迷惑な幽霊を拳で黙らせる」とか「化け物相手の人生相談」だったりするからな(主人公がいわゆる不良なので、アウトローの人助けタイプの話でもあったりする)。特に最新刊のひっつき女の話は普通に「本人のコンプレックスを解消して新しい人生を歩ませる」タイプの話になってたしなあ。
そうして人間と人外の区別がどんどん取っ払われていくと、必然的に人間の方が悪質という話が出てくる。例えば「看守による虐待の横行してる幽霊刑務所」の話はギャグとして描かれているものの根っこの所でかなりエグい話で、「だってこいつ死んでるんだし」という部分をちょっと置き換えてみると背筋が凍る。さらにその話のオチで助け出された幽霊が「おかげでこれでまた人を呪い殺せます」と言い出す所は大変面白いと同時にまったくもって救いがなく、一体どこまで計算してるんだかわからないけど、押切漫画にはこういうところを鋭く抉るシーンが時折出てくる。
「でろでろ」はあくまでもギャグなので愉快に読めるけど、それをシリアス方面に向けると「ゆうやみ特攻隊」になる。「ゆうやみ特攻隊」では土着信仰を盾に暴虐の限りを尽くすイカれた一族が描かれており、最新刊である 3 巻では次のようなやり取りが出てくる。
「こんなことをするのは人間じゃない」
「人間じゃない人間ってなんなのよ」
この台詞が全てを物語っている、と思う。実際の所幽霊も元を正せば人間で、妖怪もそういう場合がある、というかしつこいようだけど押切漫画では人間と人外は殆ど区別されない。押切漫画の中には極めてドス黒い感情の渦巻く真性のホラーがあるのだけど、実はそのどれもが人間を恐怖の対象としていることに気がつくはず。つまり、幽霊とか妖怪の類ってのは物語をギャグにするためのオブラートなわけだ。
「ゆうやみ特攻隊」には最終ボス的な位置づけのミダレガミが存在していたりして、まだ化け物というエクスキューズが通用する部分がある。じゃあそれを取っ払うとどうなるかというと、それが「ミスミソウ」だ。これは人間の邪悪な部分が全面に出たかなり鬱な漫画なので安易におすすめできないけど、俺としてはこちらの面もあってこそ「でろでろ」のホラーギャグが生きると思う(先に書いたとおり、「でろでろ」も味付け次第で陰惨になるテーマが扱われているわけだしな)。
つまり俺が押切蓮介の作風のどこを評価しているのかというと、
という点に集約される。いや、細かい部分はまだまだあるけど、一番のポイントはここだろう。この「オバケを出して笑わせる」「オバケを引っ込めて恐怖させる」という発想にはマジで感心してる。
アクの強い作風なので万人には受けないだろうなーと思うけど、「でろでろ」「プピポー!」あたりは割と大丈夫だけど、前述のとおりそのカウンターウェイトとなる「ゆうやみ特攻隊」や「ミスミソウ」も読まないと、押切漫画の真の面白さはわからないんじゃないかとも思うしな。要するに全部買えってことだ。
俺はこれまでは audacious というオーディオプレーヤーを使っていたけど、新しい環境を KDE で構築したのでちと見た目がちぐはぐになるのがアレだと思い、試しに juk という奴を試してみた。別に俺はこの手のプレーヤーに多くの機能を欲していないので、まあなんていうか何でもいいんだけどな。
ところが juk を使ってみると、コレクション機能がアバウト極まりないことに気がついた。スクリーンショットを見ればわかるかもしれんけど、 juk でのコレクションは基本的に「ジャンル」「アーティスト」「アルバム」といった区分で、「アーティスト + アルバム」という区分ができず、同名のアルバムがあるとちょっと困ったことになる。ってか、 Paradise Lost のセルフタイトルのアルバムと Symphony X の Paradise Lost が被って困ってるんだよ!
幸いユーザが新規で独自のプレイリストを作成できるのでこの点はどうにでもなるが、わざわざ手動でやるのは心の底からバカらしい。そんな作業は機械にやらせろ、機械に。
そして非常に都合のいいことに、 KDE には DCOP というアプリケーション制御のためのインターフェイスが存在している。例えば juk の場合、コマンドラインから以下のように打ち込むことで、プレイリスト一覧を取得できる(事前に juk を起動しておくこと)。
chikara ~ $ dcop juk Collection playlists
コレクションリスト
履歴
Black Sabbath - Black Sabbath
Black Sabbath - Master Of Reality
Black Sabbath - Paranoid
:
:
他にもプレイリストの切り替えや作成も可能で、これを使えばどうにかなりそうである。この DCOP は Python や Perl へのバインディングが存在するので(ってかさっきの例は DCOP のシェルバインディングだし)、それを使って以下のようなスクリプトを作成した。
#!/usr/bin/python
# coding=utf-8
from glob import glob
import os
import pydcop
def create_all(juk, basedir):
col = juk.Collection
pl = col.playlists()
artists = glob(basedir + '/*')
albums = [(j, os.path.basename(i) + ' - ' + os.path.basename(j))
for i in artists for j in glob(i + '/*')]
for a in albums:
if a[1] not in pl:
create(col, a)
def create(collection, album):
collection.createPlaylist(album[1])
files = glob(album[0] + '/*')
collection.openFile(album[1], files)
def main(basedir):
if 'juk' not in pydcop.apps():
print '先に juk 起動させとけよ'
return -1
juk = pydcop.anyAppCalled('juk')
create_all(juk, basedir.rstrip('/'))
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv[1]))
これでプレイリストを一発で更新できるようになった(こんな感じ)。使い方とか注意点は以下のとおり。
あとは適当にパネルにコマンドを追加しとけば、ワンクリックでプレイリストの更新ができるようになる。本当は juk の「再読み込み」にフックを引っ掛けられればいいんだけど、それはどうもできなさそうだからこの辺で妥協しとこう。
何か腹の調子がおかしい。やっぱあれか、昼間食ったタイ料理がまずかったか。というかパクチーがまずかったか。いやこれはもうパクチーが悪かったということにしておこう。
冗談でも何でもなく、未だに昼間に食ったパクチーの味が口の中に残ってる気がしているが、さすがにそれはないと思うのでこれはあれか、何かメンタル的なあれか、そうなのか、そうなんだな、畜生、俺はもう一生パクチー食わねえ。
eclipse の何が嫌かって、そのアプリケーション単体で閉じてるのが嫌。もっと外部のアプリケーションを制御したり、逆に外部から制御されるような機構をふんだんに用意してくれよと思うんだけど、どうもそういう方向には行かないようだ。ちなみに同じ理由で emacs とかも好きじゃない(いや、理由はそれだけじゃないけどさ)。
それじゃどんな仕組みがあればいいのかというと、要するに MS が COM とか WSH でやったことをもっとまともに & 使いやすくしたようなのがあればいいんだけど、何ていうか最近は KDE の DCOP でいいんじゃないかと思うようになってきた(あとは D-Bus でどうになかりそう)。ってかもういいや KDE で。いや、昔は独自のメッセージングプロトコルを設計しようとか思っていたんだけど、考えれば考えるほど「DCOP でいいじゃん」になってしまった。
まだあんまり調べてないけど、 rope とかのリファクタリングツールと上手く連携させられれば、何かかなりの部分まで作り込めそうだ。
まだまだ調べにゃならんことが山積みだけど、ここにきて scribes の作者の言っていた「統合開発環境としてのデスクトップ」が俺の中では現実味を帯びてきたな。
ついうっかりクリーニングに出したスーツを取りに行き忘れてた。……二ヶ月ほどな。
いや、二ヶ月って。しかもクリーニング店からの連絡がなかったら確実に取りに行ってなかったし。あやうくロストするところだった。
rope がわけわからん。具体的に書けば、 http://rope.sourceforge.net/library.html#rename にあるリネームの例がよくわからん。何でこんな API になってるのか、さっぱりわけがわからない。ちょっとこれは頂けないなー。
っていうか俺はそれより先に仕事で必要な事を調べろと。
さて、来月より二ヶ月ほど客先に出向くことになったわけだが、その現場はどの程度のレベルなのかいまいちわからん。前のところが規約で Java 5 の機能をほぼ全部禁止とかいうところだったから、流石に今度はそういうのはないと思いたい(今更 Generics と拡張 for ループを捨てられるか)。
ってかその分だと Java 7 は一体何年先になるのかねえ。これまでの Java の言語仕様で究極にムカついていた部分である「高階関数とクロージャの欠如」が改善されそうだってのに。いやまあ、どうも高階関数として使えるのはいわゆる無名関数にあたるものだけっぽいんだけど、それでも無いよりはずっとマシだ。
新人研修の一環として Unix 系 OS のインストールと環境設定もやらせてるんだけど、今回使ってみた OpenSolaris がマジで意味不明だった。何が意味不明って、 /etc/nsswitch.conf に設定を正しく書かないと、名前解決に /etc/hosts だけ使って DNS サーバを見にいかないとかいう状態になって、いや別にそれはいいんだけど、何もそれをデフォルトにしなくてもいいじゃねえか。
あと nwamd 周りが泥沼臭かったり、 127.0.0.1 に opensolaris の名前を与えておかないとログイン時に警告ダイアログが出たり、いくらちょっとばかし同業他社で経験があるといっても、最初にセットアップさせる Unix 系 OS がこれというのはアレだったか。
何か体力がえらく減衰していてほぼ一日中くたばっていたというか、マジで久しぶりに殆ど何もしてねえ。
えーと、ああそうだ、自分で整えるにはハード過ぎるぐらい髪が伸びてたんで、久しぶりに近くの理容室に行ったんだった。最近は二週間に一度ぐらい自分で軽く整えて、二ヶ月から三ヶ月の周期でプロのお世話になるというサイクルだなあ。
久しぶりに死ぬ程洒落にならない話を集めてみない?を覗いたら、師匠シリーズがえらいこと面白くてずっとそれ読んでた。師匠の冥府魔道っぷりも最高だけど、やたらと凛々しい京介さんがかなり萌え。まだ完結してない話の続きが気になるなー。
ここ数日ほど鼻炎の症状がかなり悪化してきて脳みその働きが非常に悪くなってきてる。これはもうアレルギーだってのはわかりきっていて、今の住環境が俺にとっては悪いものだってのも既に判明していて、後は「いつ」「どこへ」引っ越すかの問題なんだよなー。
諸事情により引っ越すのは来年(いや再来年か?)の方がいいんだけど、何かもう我慢の限界だから見切り発車しちまおうか。まあ、引っ越す前に不要なものの処分をバッサリとやっておかないといけなくて、それは暇を見つつちょくちょくやってるんだが。
Sonic Syndicate の "Love And Other Disaster" を購入。まあ基本的に前作と同路線。コーラスでヤケクソのように爽やかに歌い上げるパターンはよくあるっちゃそうだけど、やはり曲が良いのでそこは不問としよう。それにまあ、ワンパターンというのも裏を返せばその路線が気に入れば安定して好みの曲が聴けるって事でもあるしな。
こういう黒魔術が(いやまあ魔術でも何でもないんだけど)通用するあたりが C 言語の長所であり短所なんだよなあ。ちなみに例示されているコードは俺の環境では gcc じゃきちんと動かず、 tcc なら普通にちゃんと動いた(tcc 0.9.23, gcc 4.1.2, Gentoo Linux, Celeron という環境)。
あと次のように書き換えたら gcc でも動いた。
void countdown(int *);
void mark(int);
main(int argc) {
int c = 10;
mark(0);
printf(" %2d\n", c);
countdown(&argc);
}
unsigned _mark;
void mark(int arg) {
_mark = *((unsigned *)(&arg - 1));
}
void countdown(int *pargc) {
unsigned *p = (unsigned *)(&pargc - 1);
*p = _mark;
int *pc = pargc - 9; //俺の環境ではこうなった。理由は不明
if (*pc <= 0) {
printf(" BANG!\n");
exit(0);
}
(*pc)--;
}
多分絶対間違いなく他の環境じゃ動かない。ってか gcc -s の結果を眺めつつどこに何が積まれてるのかあたりを付けたらこうなった。何か tcc でコンパイルした結果を objdump してみると「おー、確かにここに値が詰まれてるぜー」とかいう風に納得できるんだけど、どうも gcc の方はアセンブリ/マシン語については大学で基礎レベルの講義を受けた程度の俺にはわけがわからん。もしもこういうマジで下位層部分の学習をするんなら、なんとなく tcc をお供にした方が良さそうな気がしてきた(そんな予定ないけど)。
追記: 「もっとえぐいトリック」は残念ながら思いつかなかった。
C だのアセンブリだのをいじってる暇があったら RUP について再勉強せにゃならんので、ここ最近はそっちに時間を取られがちなんだが、ぶっちゃけピンポイント運用のヘルプメンバーだということもあってかどうにもモチベーションがあがらん。
諸事情により本社では Windows Vista を使うことになったのだけど、あのツリービューの動作は何なのだ。何か横スクロールが出るような状態だと、マウスの動きに合わせて自動スクロールされるんだけど。しかもこの機能は OFF にできないっぽいし(もしかして Windows の GUI のデフォルトの動作がこうなった?)。
この動作の方がいいて人もいるかもしれないけど、少なくとも俺にとってはすげえ迷惑。特に Eclipse で複数のプロジェクトのリソースを見比べたりするときに迷子になりやすくなるのが致命的だ。ったく、余計な事しやがって。
ぬー、どうも kate とか kwrite のプラグインは C++ で書かないとダメっぽいな。マクロらしきものは JavaScript で書けるようだけど。
来月からしばらく某プロジェクトにヘルプで参加することになっているのだが、その間は今よりも一時間ほど早く起きないとダメなんだよな。これはちょっとしんどいというか、大丈夫なのか俺。
住宅・土地統計調査とやらに協力することになったんだけど、調査員の野郎が「今日の11持頃に来る」とか言っておきながら来ねえでやんの。だけど調査票だけはしっかり置いてあって、一体どうなってるんじゃこれは(まさか部屋間違えた?)。
そういや俺が某所に飛ぶのと入れ替わりで新人が二人ほど入ってくるんだけど、うち片方はなんか情報系の院卒なんだよな。「お前院まで出て何うちみたいなところに来てるの?」って感じなんだけど、まあそれは俺も人の事言えないか。
それでその人の事は今の時点じゃ何もわかんないんだけど、俺の大学時代の後輩にクラス一つで 10,000 行オーバーのコードを書く奴がいて、何かしら設計上の理由があってそうなってんのかと思ってコードを読んでみたら、ただ単にダメなコードだったという事があったんだよな。
まあ、流石にこれは極端すぎる例だけど。
妹二号からよくわからんバトンが回ってきた(本人の希望&俺の都合によりリンクは張らない。いろいろあるんだよ、いろいろ)。今時バトンかよと思わなくもないが、こういうときに兄が選べる選択肢は
の思わず勘弁してくれといいたくなるような二択で、どっちにしろ答えにゃならんわけよ。
ようやく終わった。
発足からたったの5日で凄い失言して辞任って、いい加減そういうのはお腹いっぱいだからやめてくれよな。そしてその失言内容が「正しいけどもの凄く気まずいこと」ならまだしも、「そもそも正しくないこと」だってのがな。
参考: http://www.st.ryukoku.ac.jp/~kjm/security/memo/2008/09.html#20080929__jinin