はてなキーワード: CVSとは
この記事は「フリーランス残酷物語 Advent Calendar 2016」15日目のポエムです。えっ、まだ12月15日じゃない?あぁ、そんな事もあるかもしれないですねぇー。でも気のせいじゃないですかたぶん。
まず前置きですが、mesaka さんの書いた記事が萌えましたねぇ。じゃなくて燃えましたねぇ。まぁ、会社にバカにされたっていいじゃないですか。社員プログラマーにバカにされたってしったこっちゃありませんよ。Qiita ユーザーにもバカにされ、はてブに晒され、社会からゴミ扱いされたかどうか分かりませんが、フリーランサーはそれでも生きている限り契約を繰り返し日々前進していかねばならないのです。愚痴ることで生きていけるのなら問題ないのです!というわけで、mesaka さんには最終日の日記でも燃料を投下してほしいと思うわけです。よろしくお願い致しますm(_ _)m
前置き終わり。さてさて、僕がフリーランスだった2004年頃に体験した、奇妙で残酷な作業依頼のことを書きたいと思います。
フリーランスになる前はゲーム会社で社員プログラマーをしていました。コンシューマやアーケードゲームを何本か開発したのですが、ゲームの発売が近づくと月400時間以上の長時間労働を行います。そんなことを何回もやっていると人間は壊れます。裁量労働制の裁量ってどんな意味だろう、、、と考えながら3年働き、もうダメだなと思った時に同期の10人は誰も残っておらず、一番最後の退職者となりました。その後1年は携帯ゲーム会社でゆるふわな開発を行い、元気がでてきたところでフリーランスとして働き始めました。
初めての契約は 3DRPG を開発している会社と結びました。準委任契約なので会社に出向し決まった時間働き、毎月決まったお金をいただく形です。業務内容はプログラミングとそれに関連する作業となります。関連する作業は曖昧ですが、まぁ雑用含めてお仕事するうえでの作業全てなので、社員プログラマーと働き方はそんなに変わってない思います。
一般的なプログラム作業であれば、例えば MMORPG の開発ではマップ表示を担当しましたが、これはマップ担当の3Dデザイナーさんとデータの仕様などを決めていって、あとはプログラミングするだけのお仕事です。この開発ではプログラム全体の設計とプログラマーのまとめ役もやっていたので、メンバーへの指示出しやタスク管理もプログラミングに関連したお仕事です。
少し変わった作業だと PS2 で発売した 3DRPG のコードを渡され、「VisualStudio で動くようにして。大丈夫、描画エンジンだけ DirectX で動くものを別で用意したから」という依頼だったりします。幸いにして同じような依頼を前職の社員のときに受けていました。その時は PS 用に発売した 3D 格闘ゲームのプログラムを渡され「ナムコのSystem12基板で動かせるようにしてよ。大丈夫、PSと System12 の違いは CPU のクロックが違うだけだから」というものでした。どちらの依頼もプログラムと向き合うだけの作業なのでとても単純なです。CodeWarrior で書かれたコードを VisualStudio でコンパイルすると2万くらいコンパイルエラーを吐き出すのですが、それをもくもくと修正するだけです。
新人プログラマーの教育係もプログラミングに関連したお仕事です。ペアプロで一緒にゲームを開発していくのはとても楽しかった!あと成長していく新人かわいいぺろぺろ。
当時その会社ではまだバージョン管理ソフトを使っていませんでした。社員毎に Samba のディレクトリがあり、そこにプログラムファイルを配置して共有を行っていました。さすがにこれは不味いと思いバージョン管理ソフトの提案も行いました。前職では CVS と Microsoft Visual SourceSafe を使用していましたが、CVS には悪夢(マスターアップ1週間前にデータが壊れる)しか思い出がない事と、Visual SourceSafe は無料ではなかったため、当時流行りだしていた Subversion を検証したレポートを作成し、それをもってシステム管理部門を説得するということもプログラミングに関連したお仕事でした。システム管理部門は企業のガーディアンですので、そうそう実績のないソフトウェアを会社内の PC にインストールさせるわけにはいきません。2004年頃の Subversion は Ruby など新しい技術を使う Web 業界ではそれなりに認知度があったかもしれませんが、C++ も使わず C のみで開発を行っているゲーム業界での認知度はとても低いものでした。時間をかけじっくりとシステム管理部門を説得していく必要がありますが、これはプログラミングに関連したとてもとても大切なお仕事です。
なお、会社から社員にならないかとの提案を頂いたのですが、当時はフリーランスという契約のみで結ばれた、ときには人情のかけらもない綱渡り状態にスリルと興奮を感じていたため断りました。24歳という若さのためか、それとも前職で壊れた頭がまだ治っていなかったのかはわかりません。
そのようなプログラミングとプログラミングに関連する作業を行っていたところ、プログラマー全体を統括するマネージャーから奇妙な作業依頼を受けました。それはとある社員プログラマーのスキルチェックをして欲しいというものです。
新人教育でもなく、サポートしながら一緒にゲームのプログラミングを行っていくのではなく、スキルチェックです。スキルを見るならペアプロでもしてゲームの実装を行っていくのが良いと思ったのですが、製品にそのプログラムを入れたくという事で却下されました。また、スキルチェックに僕の時間をあまり使ってほしくないそうです。まぁそりゃそうだよねゲーム開発に時間使わないと。そこで、既存の開発とはまったく関係ないプログラムの課題を出して実装してもらいました。
しかし、まず課題を説明するところから問題が出ます。こちらの説明を全部紙にメモっているのですが、話が先に進むとメモれないとのことでメモり待ちが発生しました。口頭で2分くらいで伝わる仕様が10分くらいかかります。全部話しを聞いてから後でメモるのではダメなのかなと思ったのですが、どうもこのやり方でしか話が聞けないようです。
翌日に進捗を確認したかったのですが帰ってしまっていたので、次の日の朝に進捗を確認するとまだ実装中とのことでした。分からないところがあれば聞いて欲しいと伝え、作業を続けてもらいます。毎日こちらから進捗を確認するのですが、もう少しでできるという返事を貰う以外に特にアクションを起こしてきません。そんな状態で1週間が経ちました。ちなみに課題は1日くらいで実装できるものと想定していました。そして、この状況をマネージャーに説明し、チームメンバーに入れれるかという質問には難しいと答え、作業は終了となりました。
フリーランスの解雇は簡単です。しかし、社員の解雇というのはとても難しいものです。金の横領など分かりやすい行動をとった場合は別ですが、プログラミングスキルが低い事で一方的に解雇しようものなら逆に訴えれて終わりです。僕の今まで関わった会社さんでも、解雇した社員が訴えを起こさない代わりに和解金を要求し成立したケースもありました。スキル不足の社員を解雇するなら、社員にその事を納得してもらい円満に退職してもらうのが良いと思います。納得してもらうには情報が必要です。「○○を依頼しましたが、あなたは達成できませんでした」という情報をいくつも集めて納得してもらいます。退職していかれた社員プログラマーがフリーランスの僕のところに来る前、2人の社員プログラマーのもとでスキルチェックを受けていたそうです。僕で3人目だったわけですね。それら3人分の評価を伝え、納得してもらい退職してもらったのだと思います。
なんにせよ、一連の流れの中で僕は社員に印籠引導を渡すという残酷な作業をしていたわけです。正直楽しい作業ではありません。このような不幸なフリーランスを増やさないためにも、社員の方々には採用時のスキルチェックをしっかりと行って頂きたいと思う次第です。というかそいう首切り作業は社員でやって。。。あ、でも外部委託した方が会社としてメリットが大きいか。
こちらの会社さんがある意味消滅と言ってしまえるような状態になったので別の会社で社員として働いたものの、また頭がおかしくなってたのかフリーになり、受託用の個人会社まで設立し、その会社も今年で閉じ、今はサンフランシスコで英語の勉強と趣味のプログラミングをしています。あまり普通ではないので最初の会社でアホになってからそれが治ることはなかったようです。長時間労働マジ怖い。
自己紹介が遅れましたが akiraak といいます。Qiita に糞ポエムを晒すのは公衆衛生上よくないと思い増田に排泄した次第です。Qiita ではこんなのを書いています。
あまりコミニュケーションが得意ではないのもあって、入社直後は非常に苦労した。
正直人見知りだったのでわけのわからないことをのたまっていた時期もあった。
とはいえもう4年目であり色々と手馴れてきて精神的にも余裕ができてきた。
しかも、最近の現場は9時-5時で帰宅できるようになり肉体的にも余裕がでてきた。
と、ここらでレベルアップを図りたいと思っており色んな設計書の問題点を指摘した記事とかを読み漁ってきたわけだが
アジャイルだの詳細設計書がゴミだのいろいろ指摘しているのは見かけるのだが今の自分の現場と環境があまりにも違いすぎてピンとこないのだ。
なんせ、入社してからやったのがガチガチのウォータフォール型の開発でアジャイルだのなんだのをまったくやったこともないからだ。
Gitなんて使ったこともないし、eclipseでSVNでソースを管理し、古いシステムならCVSだって未だに現役がちがちだ。
幸いにもドキュメントはがっちり作ってあって過去のシステムがどういうものなのかはよくわかるようになっているが。
もちろん転職しちゃえとか色々まぁ考えようはあるが別に今の会社に大きく不満があるというわけではない。
そこでSE経験の長いお歴々に色々尋ねたいことがある。
http://nantonaku-shiawase.hatenablog.com/entry/2014/05/18/012107
↑上記のサイトでウォーターフォール型開発の例を逐一説明してくれているがこんな一文がある。
ネットで検索すると、みんなが批判している。私も作ったことがない。というか時代遅れと言われがちなSIerの私ですら書いたことが無いのに、書かせる企業 is 何。
詳細設計書ってよくわからない - 未来のいつか/hyoshiokの日記
詳細設計書に何を書くべきか? - Sacrificed & Exploited
EXCEL設計書 Vol.1 怪文書大公開 | Same Old Lucky Day
詳しすぎる詳細設計書 - SiroKuro Page
ネットで検索すると、みんなが批判している。私も作ったことがない。
俺は入社してからずっとガチガチに詳細設計書を書いていたし、先輩も皆書いてる。
一体どこの世界の話なんだ。
いくつかの現場にも出向したがそこでも普通に詳細設計書を書いていたぞ?
どういうことなんだこれは。
でもよくよく考えたら、なんだか説明されている詳細設計書と機能設計書は俺が書いている「詳細設計書」ではひとつにまとまっている気がする。
そもそもそんなのないかも知れないが。
そこで尋ねたいのは事例として機能設計書や詳細設計書の具体例が欲しい。
書籍でもWEBページでもなんでもいい。
そうじゃないとなんだかそもそも話に付いていけない。
あと、詳細設計書がかけなくなりそうだ(切実)。
ところが俺の住んでいるところではExcelにテスト項目を俺が書いて俺が単体テストを手動でやって、結合テストも俺が手やる。
結果列に○だの×だの書いて失敗したらまたやり直しだ!
延々とこれを繰り返す。
別にそれがいやだといってるわけじゃなくて(嫌だけど)、皆テストとかどうやってんの。
テストとかそもそもやってんの?
アジャイルだの何だのに手を出すのもいいのかもしれないがそもそもウォータフォールなV字モデルをぜんぜん理解し切れてない。
誰か教えてくれ。
JTが飲料事業から撤退という連絡を夕方受けたのでちょっと雑感
売上の多くは「ルーツ」が占めてる。
昔から缶コーヒーは儲かると言われてるけど、原料相場高騰と、コンビニコーヒーに売上を食われて、継続しても利益は出ない。
CVSに並ぶことは少なかった。自販機もあんま持ってない。となると量販店で投げ売りしないと製造ロット大きくできない。悪いスパイラル。
あと経営。スーパーハイオクとか死に筋商品を生かしてたり、ぬるすぎる。ここの責任大きいよね。
現状は、コカ・コーラ、サントリー、アサヒ、キリン、伊藤園が寡占状態。
それに、大塚製薬、ポッカサッポロ、サンガリア、ダイドー、UCC等々が、差別化された商品でニッチな商売をしているといった図。
自販機が少ない、マーケと営業がダメでCVSに並べられない、バランス良く製品(事業)ポートフォリオ組めないと、今後は生き残れないのではないかな。
そういったところというと、、、おっとこんな時間に誰だろう。。。
俗にいう「使えないシステム」ってやつをつかまされたのかもしれない。
今、オブジェクト指向言語みたいので、業務ツール作っているんだけど設計が見えてきた段階で実は環境がボロボロなことに気が付いてきた。たとえばpushとかpullみたいなレポジトリと挨拶するコマンドが何種類かあるんだけど、なんかhageっていうコマンド打たなきゃいけなくて憎い。TortoiseHgでpushしようとするとhage hair pushみたいなエラーが出て全然pushできないし、そもそもcommitとpullの違いがよくわからない。社内のSEに聞いても、commitは個人レポジトリに反映するだけで、pushしないとマスターレポジトリには反映されない、あとmergeが必要って言っている。TortoiseHgにMergeしてっていったら「それは無理」の一点張り。そうする間に新しい変更が反映されていたりして、もうぐっちゃぐちゃ。CVSだけじゃなくてほかにも必要な自動ビルド環境の画面が執事だったり、そもそもユニットテストのAssertionが欠落しててすべてSuccessになってたりとかしてどうにもならない。
このまま実装がすすんでテストフェーズになったら大変なことになるって言っても「CVSくらい使えるのが当然だし、ブランチとかなにそれ美味しの」とかサラッというし。40代のクソガキが!つうかpush/pullがよくわかんねぇのは俺のせいだけどいくら何でも今の時代CVSはねーよ!っていうかCVNじゃねーかよ!まぎらわしいなって、ベテランに文句言ったところでツールを変えたがるとは思えない。だからといってPerforceのライセンス買う金もない。push and pullしてgitgitする時間も金もない。死にそうです。
つかれた。p4mergeが使いたい。
たぶんよくある話なんでしょうけど、気持ちの整理のためここに書きます。
入社前はプロダクトの開発を行うと聞いていましたが、実際は全案件フルスクラッチ開発。
お客さんはプロダクトがあるという前提条件に立っているため、実態は納期の短い受託開発です。
開発体制は1案件(1000万~2000万ほど)1人のプログラマーで、ドキュメントもテストもほとんどありません。
ひどい案件ではそのシステムが何をしているか分からない、サーバの台数も分からない、CVSも使用されずサーバごとにコードの差分があるものさえ。
みんな自分の案件で手一杯で、隣の人が何をしているのかも知りません。
技術側で仕事量の調整はできず、トップダウンで案件が個人あてに振ってきます。
社内の雰囲気は刑務所のようで、退職した社員の言葉を借りるなら北朝鮮みたいな会社だそうです。
エンジニアは社内で育てればいいという社長の方針で未経験の子を採用しますが、2年以内に4人中4人が退職、そのうち2人は精神科行きです。
経験1,2年のプログラマに要件定義から開発までプロジェクトのすべてを任せてつぶしてしまうパターンです。
エンジニアは入社しても平均すると2年程度で辞めていきます、退職の発表は当日です。
なぜか事前に社員に知らせることがタブーのようになっています。
そんなわけで社内には大量の技術的負債まみれのプロジェクトが蔓延して、保守運用が開発と技術研究の時間を食いつぶしています。
ツケはエンジニア個人に集中して退職、技術的な蓄積が溜まらない、トラブルが減らない、人が辞めるの悪循環です。
上長にこのままでは売り上げ3億程度から伸ばせない、複数人でプロジェクトを行うようにして個人の過負荷を減らし人を定着させるべきだと相談しましたが、
自分は今ある案件を裁くので手いっぱいで何の権限もないと言われました。
その上長も一時期精神科にかかるほど心身を壊して、現在も社で一番多くの業務をこなしているので何も言えませんでした。
社長にも同じ内容を相談しましたが、組織の問題としては受け取ってもらえず個人の問題として切り捨てら取り合ってもらえませんでした。
数年前からこんな光景が続いて、まったく前に進んでいないんです。
どうやったら前に進めるんだろう。
誹謗中傷というのはどのように行われるのかという事に興味があり調べながら、ついでに特定の個人を示して誹謗中傷しているコメントを抽出してそのアドレスをはてなの問合せ窓口に投げた。そんな作業の中で一つ気付いたことがあるので匿名ダイアリーを借りて記しておく。
はてなのコミュニティに属している人は、人気ブロガーであったコンビニ店長こと、MK2氏と、彼を執拗に批判する匿名ダイアリーのあるユーザが存在している事をご存じだと想う。それを追っていくと、MK2氏のエントリーを擁護する、あるいはMK2氏を中傷する匿名ダイアリーのエントリーについて批判的なブックマークコメントを残した人物に対して個別にIDを示して「ゴミクズ」という非常に特徴的な語を用いて中傷している人物がいることが観測できる。文体も非常に似ていて、文体を統一するマニュアルでもなければ同一人物である可能性が高いと思われる。さらに文体以外にも特徴があり
ここではっきりと書いておくが、イケダハヤト氏がこれをやっていると言う陰謀論を唱えるわけではない。何故ならばイケダハヤト氏は文筆業であり、有料でその考え方を文章にして販売している人物である。そう言う人物がこのような行動をとることはまず無いと考えている。漫画家がタダでマンガを書かないのと同じだ。プロはそれが商品である事を承知しており、商品の価値を下げるような真似はしないのだから。(私は彼が人格者であるから行うわけがないと言うほど彼の事を存じ上げないし、著作も読んだ事が無いのでこう言う言い方になる。彼の人柄をよく知る人が人格面からそんな事をするわけが無いと主張する事を否定するものではない)
では何かと言うと、これらの批判を繰り広げているのは
なのではないかと推測したと言うことである。さらに言えば、イケダハヤト氏に憧れて彼のようにネットで話題になりたいと文章をしたためているが、おそらくはてなブックマークでも、Twitterでもほとんど話題になることが無く、少なくともMK2氏の執筆したエントリーほどは注目を集めないことに不満を持っているのでは無いだろうか。
そして、そこでコンビニ店長たるMK2氏である。これらの事から、以下の様な妄想をここで披露する。
3行でまとめると
ノマドの立場というのは自由であるが、しかし無保証である。私はノマドワーカーを選ぶ人々は不安定な経済状態になって無保証になることそのものを目的にしている人はいないように思っている。自由をまずは目的にしているはずだ。だから最終的には、ある程度の自由を得ながら・・・自分の好きなことをしながら、経済的・生活的には安定することを目的としているのでは無いかと考える。
まず一つ目が職人としての成功である。腕一本で多数の所から仕事のオファーを連続して受けるケースだ。職人における安定とは、仕事が連続してくることであろう。しかしそのままでは仕事に縛られる事になるので、多数の仕事の中から自分がやりたい仕事を選ぶことができなければノマドという働き方を選んだ意味が無い。さらに価格交渉をしてより高い報酬を得る、そしてその報酬の分以上の利益を相手にもたらすことでさらに次の仕事に繋げる。こういったポジティブなサイクルを繰り返えして安定して収入を得るのが一つのゴールであろう。
もう一つの成功としては、自らの仕事を資本にして、自らの自由になる組織を作るという事だと考えられる。
職人のケースでは、多く受けた仕事のうち、やりたくない仕事はただ断っただけであった。しかしこれを自らが抱える別の人物に出せば、その分の仕事を受ける事ができるようになる。このようにして仕事をできるだけ断らずに、しかし自分でこなすのでは無く他者の手をかりて実行していくという形である。これは最終的には会社組織という事になるのだろう。こちらの特徴は組織化することでいくら組織の長であるとしても組織のしがらみを持つ事にはなる。しかし個人で行うよりは圧倒的に大きな事ができるようになる。大きな力を手に入れるというのは即ち出来る事が増え、出来る事が増えると言う事は自由になるという事である。
コンビニというのはフランチャイズ展開している自営業の集まりである。古い人間であるならば近所の酒屋が次々とコンビニに変わって行った時代を知っているだろうし、もう少し下ってくれば、独立系スーパーが店じまいをした後、アパートが建設され、その1階にできあがっていくコンビニという風景を見たことがあるだろう。今では大手コンビニチェーンがドミナント出店を行う際に、大々的にオーナーを募集するTVCMも流れている事も目にするはずだ。
このように、CVSは基本的にはオーナー制のフランチャイズ経営をとっている。このフランチャイズ制というのが何か、あるいはコンビニにおける商売の仕方は何かと言う事はネット上に無料で見ることのできる優良な文章がいくつもあるのでそれらを参照していただきたいと思うが、要するにコンビニのオーナー店長というのは、ブランドを借りて自主独立した店主であり、古い言い方をすれば一国一城の主なのである。
コンビニ経営は言うほど簡単では無い。全国的に統一されたマニュアルが有り、商品供給などのバックエンドはしっかりしている。しかし、それだけである。経営者はコンビニ本部への上納金を稼がなければならないという話はもちろんのこと、バイトの管理は重要で生半可なコミュ力ではできない。さらに地域との溶け込みも実は大切で、悪い評判が出るとまず固定客からいなくなると言う性質がある。
そんな中で、MK2氏のエントリーを見る限り(つまり実態はともかくMK2氏のエントリーから読み取れる店の雰囲気としては)非常によく成功しているように見えるのである。有り体に言えば勝ち組だ。優秀な奥さんがいて、信頼できる部下もおり、業務の工夫が功を奏して経営も安定しているように見える。これを勝ち組と言わずなんと言おうか。にも関わらず彼は会社員では無い。自ら決定権があるある程度自由にできる組織を持つ人である。
本来であれば、MK2氏のような人物は、ネットでは可視化されない。ましてや「はてな村」と揶揄されるような黎明期から続く雰囲気を色濃く残す部分に現れてくることはまず無い。彼らは現実世界で成功しており、地元の付き合いなどもそつなくこなし、それらについて忙しいのだから、このような趣味を持つ必要も無いはずだ。IT技術者のように、ネットの技術が自らの業務に密接に繋がっているわけでも無い。だからこのような成功者は、目に見えないはずだった。
しかし、MK2氏は、いわゆるオタク趣味を持ち、その方面からネットに進出してきたのである。さらに当初はサブカルチャーを中心にしていたが、だんだんとコンビニの経営者であると言うバッググラウンドから、それらに留まらず独自の視点を持った考察を行ってきた。また一般に長文が嫌われる傾向のあるインターネットにおいて、長文であっても読ませる文章であると言う評価を得るに至った。
自らの成功したいという欲望と、認められたい自己顕示欲。この二つが強すぎながらもどちらも持たざる人物にとっては、その両方を持ちながらさらに注目を集めるMK2氏の存在は非常に苛立たしいものだったのではないだろうか。
コンビニを潰すことはできない。であるならば、執拗に個人攻撃を繰り返すことで自分が唯一存在できる場所からMK2氏を排除したいと言う動機があったのでは無いか。あるいは個人攻撃をしていると言う自覚も無いのかも知れない。自らを高められないものが陥りやすい心理として、相手を批判する事で、相対的に自分の地位を上げようとする行動がある。
自らは特にすごくも無いのに、よりすごい能力を持った人物を批判する事で「偉い人を批判できる俺は彼より偉い」と言う錯覚を得たいがための行動である。あるいは格上の人物であっても批判する事によって注目を集める事ができるのでそれに酔ってしまった行動では無いか。
ネットで見られる多くの誹謗中傷と言った類いではこのように「妬み」としか言いようが無い感情に基づいているものが多く見受けられる。今回もこのケースなのでは無いだろうか。
対処法としては無視するのが一番なのだが、なかなか対処が難しいのは事実である。またこのような妬みを原動力とするものについては、単なる愉快犯と異なり、反応するしないに関わらずどんどん一方的にこじらせていく事も多い。もちろんその過程で反応したりすれば、一気に吹き出すことになるだろう。
このようなケースについて、何か良い対処法はないだろうか。一番に考えつくのは、頭を冷やす時間をとることなのだろう。妬み批判したところで自分は何も変わらない、むしろどんどん墜ちているということを自覚させるだけの時間を与えることだ。しかしそれを与える方法が難しい。どのようにしたらよいのだろうか。
Eclipseがemacsやvimより優れている点を挙げてみよう。
・CVSリポジトリの構成を直接覗ける →redmineとかを使ったほうがいいんじゃないのか
・設定できる警告メッセージの種類が豊富。→警告そんなにいるのか
・復元機能が非常に充実している。 →バージョン管理ソフトがあれば普通だし
CVSのように以前の状態に復元すること、以前の状態の →diffじゃダメか、というかなんでいまどきCVSなの
ソースコードとの比較も容易。CVS(Eclipse標準装備)/Subversionプラグインにもこの機能は存在する。
・プラグインの数が豊富、膨大。 → 数があってもつかえるのは少ない
・プラグイン開発環境もEclipse自体に用意されている。 →開発環境を使って作る程のものでもなく、バッチファイルとかスクリプトでよくね
・ライセンス形態がCPLであり商用利用もしやすい。 →eclipse組み込んで出荷するの?
・上位版にWSADが存在する。 →WSDADってなに、WebSpereの残骸?
・Smalltalkで有名なVisualworksの影響を受けているため、
JUnitプラグイン(Eclipse標準装備)によるテストファースト、リファクタリングの他、eXtreme Programming環境が充実している。→Jenkinsのほうがよくね
・SubclipseプラグインによりSubversionにも対応できる。これはCVSよりも強力!→コマンドラインから実行するsvnコマンドを覚えておくとはターゲットでも動いて便利だよ
・Call Hierarchyプラグイン(Eclipse3.0から標準装備)によりメソッドの呼び出し階層を調べることができる。この機能は強力だ!→スタック見るだけのことじゃないの
・プラグインによってはURLを指定するだけでプラグインの自動ダウンロード、自動インストール、
自動アップデートができるためプラグインのインストールが非常に容易。→勝手に変わったら怖くない
・Eclipse上から直接Tomcat, JBossなどを再起動できるSysdeoプラグイン、JBoss-IDEプラグイン
という強力なプラグインが充実している。→えー、今頃Tomcat
・EclipseUML Omondoプラグインによりクラス図などを書いたり、
UMLによるModel Driven Architecture, リバースエンジニアリング
・RSSリーダープラグイン、MP3プラグイン、All The Newsプラグイン、
など様々なプラグインが充実している。→それ開発ツールじゃなくて携帯でやったほうがよくね
・PHP開発が可能なTruStudioプラグイン、Perl開発が可能なPerl E.P.I.C. プラグイン、
C/C++開発が可能なCDTプラグイン、AspectJ開発が可能なAJDTプラグインなど
他言語プラグインが充実している。→Java以外は所詮おまけだけどね
・そのほかにD言語プラグイン、C#プラグイン、Pythonプラグイン、JavaScriptEditorプラグイン、
CSSプラグイン, HTMLプラグイン, XMLプラグイン、(Jakarta)Velocity UIプラグイン、
Apache Antプラグイン(Eclipse標準装備)、非常に強力なApache Mavenを使うことができるプラグイン、
ゲームができるプラグイン、メーラとしてつかえるプラグイン、Wikiプラグイン、Hibernateプラグイン、
FindBugsプラグイン、CheckStyleプラグイン、Jalopyプラグイン、Sobalipseプラグイン、ソロプログラマープラグイン、
など様々なプラグインが充実している。→それぞれ単機能のソフトのほうが充実してるんじゃないの
どうしてもeclipseというなら止めないけど
ソフトウェア開発会社に新入社員として入社して1年とちょっと。
今俺は先行きについてものすごく悩んでいる。
こういうのは業界柄よくあることなので致し方ない、とは思う。
別にそれはこの際どうでもいい。
一世を風靡するしたJavaも今では一部でオワコンと呼ばれる時代だ。
新卒面接の時には「新しい技術を追いかけ続け、会社に貢献したい」とか言った気がする。
だが、その想いは入社半年を過ぎたあたりから見事に裏切られた。
レガシーコードとの戦いも覚悟はしていたが、俺が想定していたスマートなレガシーコードとの戦い方とはひどく遠いものだった。
テストなんてものは書かない。テストはExcel方眼紙で書かれたテスト項目が全てだからだ。
xUnitだとかSpecなんてものはもちろん知らないし覚える気もない。
極めつけはExcel方眼紙のテスト仕様書兼報告書と呼ばれる代物の抜けの多さ。素人でもわかるレベル。
足りなさそうな部分は経験則に則り適当にテストする。だがその結果は報告書には書かない。
バージョン管理なんてものも存在しなかった。上司に聞いたところ、あるにはあるらしいがCVSらしい。
だがそんなもの社内のどのチームを見ても使っている様子すらない。唯一のバージョン管理はファイルサーバー上の日付が書かれたフォルダーのみ。
とにかく現状がひどい現場だが、誰も変える気がない。
現場改善に向けていくつか提案もしてみたが、ただただ否定の言葉だけが帰ってくる。
なんとかしてやろうとも思い、個人的にいろいろやってみたものの、必要かどうかもわからない大量の雑務に押し潰された。
彼らには新しいものを学ぶ気なんて全く無かった。
会社を変える気も無かった。
俺はとにかく現場に失望した。憧れた業界はこんなものなのか、と。
同期や上司と気軽に話ができなくなった。
雑談でさえも話を続けることができない。
現場の問題点だとか新しい技術だとか業界の動向だとか、話したいことはたくさんあるのに。
彼らはそんな話に見向きもしない。
元々静かな現場であった上、コミュ障気味であることも災いし、その結果会社で話せる人はほとんどいなくなった。
雑談でもいいから話せなかった俺も悪い。だが今更何かを話にいく気にもなれない。
明日の飯を食うだけのために、1ヶ月、あるいは1年、もしくはそれ以上かかるようなつまらない仕事でも淡々とこなす。
生きていく上でのれっきとした一手段だとは思う。
だが俺はそんな生き方をしたいと思わない。
だが、現場ではどれだけ訴えても理解してはくれなかった。
俺は今、先行きに不安を感じすぎて俺自身が潰れそうになっている。
転職すればいいのかもしれないが、第二新卒枠がまだなんとか使えるとはいえ、今の実力でどこまで通用するのかわからない。
1年ちょっとで会社を辞めてしまう奴などクズだと見られるだろう。
その上就活もうまくいっていたほうではなかったから、その時の思いが蘇り、踏み出すこともできない。
八方塞がり。
きっとこの業界で自殺を考える奴の心境ってこんな感じなのかと、今日も1人日陰者としてExcel方眼紙の画面を睨み、与えられた作業を淡々とこなす。
Eclipseがemacsやvimより優れている点を挙げてみよう。
ソースコードとの比較も容易。CVS(Eclipse標準装備)/Subversionプラグインにもこの機能は存在する。
・上位版にWSADが存在する。
・Smalltalkで有名なVisualworksの影響を受けているため、
JUnitプラグイン(Eclipse標準装備)によるテストファースト、リファクタリングの他、eXtreme Programming環境が充実している。
・SubclipseプラグインによりSubversionにも対応できる。これはCVSよりも強力!
・Call Hierarchyプラグイン(Eclipse3.0から標準装備)によりメソッドの呼び出し階層を調べることができる。この機能は強力だ!
・プラグインによってはURLを指定するだけでプラグインの自動ダウンロード、自動インストール、
自動アップデートができるためプラグインのインストールが非常に容易。
・Eclipse上から直接Tomcat, JBossなどを再起動できるSysdeoプラグイン、JBoss-IDEプラグイン
という強力なプラグインが充実している。
・EclipseUML Omondoプラグインによりクラス図などを書いたり、
UMLによるModel Driven Architecture, リバースエンジニアリング
などを即座に実現できる。
・RSSリーダープラグイン、MP3プラグイン、All The Newsプラグイン、
など様々なプラグインが充実している。
・PHP開発が可能なTruStudioプラグイン、Perl開発が可能なPerl E.P.I.C. プラグイン、
C/C++開発が可能なCDTプラグイン、AspectJ開発が可能なAJDTプラグインなど
・そのほかにD言語プラグイン、C#プラグイン、Pythonプラグイン、JavaScriptEditorプラグイン、
CSSプラグイン, HTMLプラグイン, XMLプラグイン、(Jakarta)Velocity UIプラグイン、
Apache Antプラグイン(Eclipse標準装備)、非常に強力なApache Mavenを使うことができるプラグイン、
ゲームができるプラグイン、メーラとしてつかえるプラグイン、Wikiプラグイン、Hibernateプラグイン、
FindBugsプラグイン、CheckStyleプラグイン、Jalopyプラグイン、Sobalipseプラグイン、ソロプログラマープラグイン、
など様々なプラグインが充実している。
ああ、今じゃあメモリ2GBで32bit WindowsってんでもうDisられちゃうんだなあ。
おじさんの新入社員のころはWindows2000用のソフトウェアをWindows MEのメモリ128MBのマシンで開発しろって言われたよ。
VC6はそりゃあもう遅かったねえ。
しまいにゃHDDの基板上のチップがパッケージ不良で大規模回収になって、ロットが対象のものだって発表される直前にクラッシュしたのさ。
おじさんがその会社にいたくなくなったのはそれが最初だった。バックアップ用のHDDもなければ、CVSなんて便利なものも無かったから、自腹で購入していたノートパソコンにこっそり移していなければ、ソースが全部クラッシュしていたところだったなあ。
そういやCVS使いたいって言ったらなんか知財の関係の人に申請書を出して許可を得なくちゃいけないとかで面倒くさすぎて諦めたこともあったなあ。ie以外のブラウザも禁止だったなあ。アレも禁止コレも禁止って言った割にはcode redとか感染しまくってて笑えたなあ。
バージョン管理していないと、ディスク死んだ時とかに最新ファイルがわからず復旧に時間がかかって恥ずかしいww
下向いちゃうしww
男にはせめてSubversion使って欲しい……
.bakとか.oldとかつけてファイル保存とかされたら……もう最悪ww
常識的に考えて欲しいだけなんです!
「ファイル名に日付付けてバージョン管理してます!」なんて自信たっぷりに言われた時の恥ずかしさとか分かる?
あのね? たとえば週末10~20人ぐらいで勉強会とかするでしょ?
それぞれ作ったwebアプリをリポジトリにアップして公開するわけじゃない?
ところでなんだが、staxってとこがAmazonのEC2サービス上でTomcatを無料開放しているらしいのだ。
http://jp.techcrunch.com/archives/20081216stax-networks-launches-google-app-engine-for-java/
で置いた。
http://db-view.johannes.staxapps.net/
ソースはここ
http://code.assembla.com/dmcsystemservice/subversion/nodes/db-view/trunk
これ作ったころはGUIの閲覧ツールってAccessとかしかなくて、結構好評だったのだが、今はフリーのクライアントソフトがいっぱいでもう、俺の出番おわったわ。
まずJavaを入れる。
http://java.sun.com/javase/ja/6/download.html
で、eclipseを入れる。
http://www.eclipse.org/downloads/
で起動してみる。
が。。。。起動しない。
でggr。
となんかeclipse.iniがおかしいらしい。
http://ajiblog.sblo.jp/article/17157448.html
おっきした!!
でアカウントをとる。
http://code.assembla.com/dmcsystemservice/
http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn15/eclipseplgn15_1.html
subversiveも使ってみたいなぁと思ったが、ここでeclipseがバシバシ落ちる。
eclipse.iniのXMXオプションをいじるがOutOfMemoryやら、libeay32.dll 序数が見つかりません。とか
秩序ってなんだよ。英語でそのままいってくれ。余計わからん。
でなんか、負けた気がしたが、Javaを5に落とすことにした。
http://java.sun.com/j2se/1.5.0/ja/download.html
XMXを768Mにして起動すると、落ちなくなった。
が、相変わらず、秩序が見つからなくなる。秩序って何。膣女?
こっちのsvnプラグインのほうがいいのかも。。来年やろう。そのうちやろう。ゆっくりしていってね!!
http://server.seasar.org/manual/install_subclipse.html
http://d.hatena.ne.jp/yuroyoro/20081222/1229922781
楽勝だ。
で、また動かない。
で、動いた。が、履歴機能が動かない。
で、ソース修正。
ObjectInputStream、OutputStreamを使っていたのだがXMLEncoderとDecoderにした。
http://www.utj.co.jp/xml/dev/java/dxjava_7.html
ぉ。こんな便利なのが1.4からあったのか。
おもえば、これを最初に作った時は1.3だった。LinkedHashMapがなくてArrayList内包したMapを作っていた。
が、そんなのいらんので消した。で、履歴保持クラスもXMLEncoderからリフレクトできるようにガバガバにプロパティをさらした。
そしたら、動く。履歴機能が動く。
ぉぉ。では早速、svnにあげよう。
で、eclipseのsvnクライアント。相変わらず膣女が見つからないらしい。
去年だったかな、女の子にipodの音はどうやって大きくするの?と聞かれて、右にくるくる。と答えると、
あ、大きくなった。今度、のび太くんのもまわしてみよう。と言われた。
あれから右にくるくるされてない。泣きたい。あの娘は膣女だった。
そんなことを思いながら、エロサイトに誘導されて一回休み。eclipseを落とす。
http://pics.dmm.co.jp/digital/video/h_155tdjk00001/h_155tdjk00001pl.jpg
で、eclipse再起動。svnクライアント。相変わらず膣女が見つからないらしい。
おれくらい帰国子女になれば、英語のメニューのほうが調子がいい。
と思っていたが、svnクライアントだけ微妙に日本語化されている。
が、肝心なところが英語だ。よくわからん。CVSと一緒だろ。と思ってUpdateしたら、ソースが消えた。。。
LocalHistoryから復元しようと思ったのだが、まんどくさい。
staxにDeployしたやつを再度ダウンロードしたら元に戻った。
びっくりした。バックアップソフトでクラッシュする。そんなことも初心者には、おうおうにしてある。
だからバックアップのバックアップ(ryで無限ループにはまるシステムも少なくない。
あきらめが大事だ。ある程度であきらめないとキリがない。
で、再度svnクライアント。今度はCommitをちゃんと選ぶ。
が、明らかにUploadしていない。で、終わると、いくつかのファイルのアップロードはキャンセルされた。とかでる。
で、再度svnクライアント。またまたCommitをちゃんと選ぶ。
ぉ。今度はうまくいく。あきらかにさっきより時間がかかっている。WireShirkで見てないが、あきらかにsvnサーバーにソケットをはっている。
http://code.assembla.com/dmcsystemservice/subversion/nodes/db-view/trunk
ぉぉ。あがっている。
さてタグを設定して、ブランチを作ってみたいみたいが、壊れそうなので怖い。いつからか大人の恋に臆病だ。
XMLEncoderの入出力をBufferedにしようと思ったが、もういいや。
で、寄り道している間に、こんなのを今更発見した。
http://tuigwaa.sandbox.seasar.org/index.html
これだ。俺が欲しかったのはこれだ。
これぐらい楽勝じゃないと、プログラマはわりに合わない。
さっそく落とす。
が、動かない。誰のせい?それはあれだ。また奴だ。。。
もういい。まんどくさい。この金髪ブタヤロウ!!しね!しね!しね!と誰かにメールしたいが、やめておこう。
修正履歴をコメントアウトで残す方式だと、新旧のコードを並べて比較した時なんか分かりにくいww
可読性さがっちゃうしww
男にはせめてソースコード管理システムくらい使って欲しい・・・
バグとか出て、ソースコード修正が必要になったら・・・・もう最悪ww
常識的に考えて欲しいだけなんです!
コメントアウト方式のソースコードをレビューする時の恥ずかしさとか分かる?
あのね?たとえば商用系で障害が起こって10??20人ぐらいで対策会議とか開くでしょ?
それぞれ腕利きのプログラマとかお客さんとか来るわけじゃない?
みんな普通にSubVersionやGitやMercurialやClearCaseとか期待してるわけでしょ?
就職氷河期の真っ只中に入った会社は従業員数一桁のソフトハウス。
大学生のころバイトでシミュレーターを作っていたり、趣味でゲームを組んでいた僕はすぐに採用になった。
事業内容はあまり気にしなかった。
プログラムを組めればなんでもよかった。
最初は社内でスタディという名の研修?をやった。
簡単なプログラムを組んで、「ああ、簡単に仕事ってできるんだな」と思った。
数週間たったころ、あるプロジェクトに会社の先輩と2人でアサインされた。
やったことのないUNIXプログラミングだった。会社にはUNIXはない。開発環境もない。
そして他の会社の人から仕様を聞いて、モノを作るのも初めてだった。
まだ僕が客先に行くことができないので、先輩が話を聞いてきて、いろいろな指示をする形で仕事が進んでいった。
だけど、仕様がわからない。
客にメールを投げて聞いても、客自体も協力会社なのでわからない。
というように、俗に言う孫受けというモノだった。
元受にメールを投げているうちに、ウチの会社の質問は記憶のかなたに消えていった。
確か、「仕様がわかるまでソースを読んで現状を把握しといて」というようなことを客に言われた気がする。
そしてソースを自社に持ち帰り、読んでいたのだが、もともとがどんなプログラムなのかもわからないため、非常に難航する。
なんといっても、main関数だけで数千行のソースもあるのだ。グローバル変数もたくさん使っている。
学生のころから読んでいた
C++基礎講座 http://www.amazon.co.jp/gp/product/4844313088/
C++実用講座 http://www.amazon.co.jp/gp/product/4844313096/
にも、main関数は短めに、グローバル変数も極力使わないように。と書いてあるのに。
そして、ソースの変更場所を客先に説明するため、変更点を全て列挙してソースをWordに貼り付けて色をつけるのだ。
無駄な作業だった。
gccの構文解析の結果(構文木)を、XMLとして出力してくれるツールです。C++の構文解析はやたらと面倒らしいので、こういうのがあるとうれしいみたいよ。
「Py++」というC++のPytyonバインディングで使われていたので、必要になりました。gcc-xml 0.6はバイナリで配布されてるんだけど、MSVC7.1までしか対応してないようで、Visual Studio 2005だと使えませんでした。うーん、困った。というわけで、最新版のソース一式を取得してビルドしてみます。
gcc-xmlのビルドには、CMakeというツールが必要になります。CMakeは、オープンソースでクロスプラットフォームのビルドシステムなんだとか。CMakeの公式サイトから、Windows版のインストーラーをダウンロードしてインストールしよう。
実は最初は、ここでcygwinのsetup.exe経由でのインストールをしてたんですけど、これだとgcc-xmlのビルドの段階でエラーが発生しちゃいました。この原因がどうしてもわかんなかったので、あきらめて公式サイトのインストーラーを使うことにした次第です。
ソース一式はCVSから取得できます。CVSクライアントはいろんなのがあるので、好きなクライアントを使って取得しよう。ここではcygwinのCVSを使って、シェルから以下の命令を実行して取得しました。40MBくらいあるみたい。
$ cvs -d :pserver:anoncvs@www.gccxml.org:/cvsroot/GCC_XML co gccxml
「Visual Studio 2005 コマンドプロンプト」を起動してください。起動したら、さきほど取得したソース一式が格納されているディレクトリに移動して、以下の命令を実行します。
$ cmake .
cmake.exeにはあらかじめパスを通しておくか、パスを直接指定するのを忘れずにね。
gcc-xmlのビルドはまだ終了してなかった! 一度ビルドが終了しても、第二第三のビルドが必要となって…。などと恐れおののきましたが、二段階でいいみたい。
さきほどの処理が終了すると、同じディレクトリに"gccxml.sln"というソリューションファイルが新しくできあがっているかと思います。これをVisual Studio 2005から開いて、Releaseビルドしよう。ビルドが終了したら、以下の5つの実行ファイルができあがっているはずです。
まずは環境変数の設定です。Visual Studio 2005を使っていることを、gcc-xmlに高らかに宣言しておこう。
$ set GCCXML_COMPILER=msvc8
つぎに、gccからVisual Studio 2005のインクルードファイルを使えるよう、パッチをあてます。ありがたいことに、"GCC_XML/VcInstall"ディレクトリ以下にVisual Studioのバージョンによってパッチが用意されています。そのディレクトリと、パッチを当てたファイルを出力するディレクトリ("gccxml.exe"が置いてあるディレクトリ)を指定して、"gccxml_vcconfig.exe"を実行してください。
$ bin/release/gccxml_vcconfig GCC_XML/VcInstall/ bin/release
あとはbin/releaseにパスを通せば、gcc-xmlが使えるようになったはずです。bin/release以下をどこか適当なディレクトリにコピーして、そこにパスを通してもオッケイです。やったね! というわけで、さっそく試してみましょう。
$ gccxml eample1.cpp -fxml=example1.xml
ここでは、解析するC++のソースファイルとしてeample1.cppを入力し、eample1.xmlを出力しています。ちゃんと出力できたかな? できたー! やったー!
以上で終わりです。
マシン語の話
まず
だいたいそういう人達は人ハードウェア知識云々をもとより人から言われるまでもないだろうし
shi3z氏が檄を飛ばす想定読者もおそらく俺のようないわゆる受託業務システム開発を
しているような人間たちだ。
べつに低レベルアーキテクチャの知識はあればあったで困らないのは事実だし
プロなら最低限は知っとくべきレベルというのは実際あるし
無駄だと言う気はまったくない。
ただ
もし、仕事でその知識を認められたい、あばよくば給料やキャリアの足しにしたい、
などという下心があるのなら、下記のことは知っておくべきだ。
『少なくとも自分のいるチームのNo.1にならなければほとんど評価すらされない。』
はっきり言うと俺らの世界では
規模と場合によっては会社に一人か二人いれば十分なんである。
ある意味ではフルタイムで雇うほどの需要すらないとさえいえる。
たまに必要なときだけ相談したり調査を頼めればすんでしまうわけで、
地味なプログラムを組んだりしてるのだ。
ましてチーム全員がプロファイラやデバッガを使いこなせる必要なんか全然ないんである。
上で書いた「プロとしての最低限のレベル」ってのは
バイナリハッカーに相談すべきときに相談できる判断力があるかってことなんである。
(故にそれはできて当たり前であって評価の対象にはならない。)
しかし別の面から見ると
shi3z氏みたいなバイナリハッカーだけでは全然足りないのだ。
DBのインデックスやパラメータの最適化や分散設定ができるやつは身近にいるか?
Apacheやルータ、ロードバランサの設定や専門家は回りにいるか?
先輩から教わったCVS(やSubversion)の使い方がどうもgoogle様の
ご宣託と違うような気はしないか?
共通ライブラリやお仕着せのフレームワークの仕組みや動作に疑問はないか?
等など、、、
状況によっては
むしろ自分にとって手の届くニッチ(はまりどころ)があると喜ぶべきかもしれない。
上記のほとんど全部をこなせるような人間が稀にいないわけではない。
しかし臆することはない。
目と手は2つづつしかついていない。
人の時間とモチベーションは有限かつ希少な資源であり、