「バカジャネーノ」と言われてぐぅの根も出ないmix3です。
死んだ方が良い事の概要その1
今やってるサービスに諸事情により一つ機能を追加しなければならない必要に迫られ、その対応を自分がすることになったのですが、結果は盛大に燃やし散々な糞クオリティで納期に間に合わないという目も当てられない自体になってしまいました。 設計段階で詰んでいて(DB設計の時点で要件を満たせない)どう尻拭いしても物理的に納期に間に合わないということで、結局お尻を先延ばしにしてもらって先輩にヘルプ入ってもらい設計からやり直しとなりました。
死んだ方が良い事の概要その2
スケジュール再編からは先輩の手によって設計が組み直され、画面仕様から必要な機能を洗い出してコントローラとモデルのインタフェースを決めて行く(勝手にIDD[インタフェースドリブンデベロップメント]などと呼んでいる)やりかたで、仕様認識の齟齬を減らしつつ必要充分な機能を決めて行きました。このやり方は関わるプログラマ全員の時間を使ってしまうのでなかなか面倒ですが、仕様認識齟齬が減るのと機能の洗い出しで全員がチェックするので抜けが減るので危険な香りがする時は積極的にするようにしています。またインタフェースを決めてしまうので、分業しやすいというのも利点です。Javaのインタフェースベースの作り方を思い出してとても気分良く作れます。
ここまでは良いのですが、分業で自分がモデルを作って最後にコントローラと結合すると自分の糞クオリティを発揮して色々問題を起こしていました
- バリデート関数はエラーを返すだけというルールで決めたはずなのになぜかExceptionを投げてる
- 関数の返り値の形を変えてしまった
- 明らかにコピペしてる
- 関数名、変数名の意味が分からない
- テスト書けていない(間に合ってない)
時間も無いのに色々やらかして最終的に「バカジャネーノ」と言われて何も言えないmix3の姿がそこにはありました。
こういう怒られ方はずっと前から続いている 今回は集中しただけで
要するにプログラマとしては致命的なほど人から見て意味の通じるコードが書けないのだと思います。視野狭窄で自分しか見えてなくて、平気で他人から見て意味の分からないコードを書いてしまう。他人のコードを見て何がどう優れているか、このコードの何がだめか。変数、関数の意味は。怒られるたびに考えるようにしても、結局怒られる。良し悪しの判断がいつまでたっても改善されない。
自分は成長していないといつも感じているしいつも言っているけど、こういったことの成長が無いことも多く含んでいる。
結局どうすれば良いのかは分からない
これだけ怒られて改善しないといけないと思っていて、でもどうすれば良いのかは良くわからない。
ただ「他人が理解出来るコードを書けば良い」だけではあるけれども、それだけの事が出来ないということは、自分にはそれをするための何かが欠けてるということで、でもその何かを「何か」としか書けないということは全くその「何か」を理解していない。つまりどうしたら良いのか分からない。
いっぱいコード書いて怒られて判断出来るようになる以外にもう方法が思いつかないが、でもそのやり方をするには既に時間を使いすぎてる感があるし、そのせいで関わるいろんなひとに迷惑をかけていて、今回は特に他のスケージュルに大きく影響を与え、お金を消費している。大きさ的に自分が取れる責任を大きく上回っている。
だから最近はタイトルのようなことを良く考えている。自分が何かやらかすことで与える色々なな迷惑が大きすぎて、本音の本音では今すぐ逃げ出したい(逃げて人が減る事の方がとんでもない迷惑なのでしないけど)
ということで
- mix3は今すぐ死ぬべきである。
- 死なないのであれば迷惑を掛けないように生きるべきである
どっちかを満たすためにmix3は頑張らなければならない。
そしてそんな事とは関係なくp5-SWFEditorを更新してますYO。大本のswfedのバージョンアップに追従しています。p5-SWFEditorは可愛いね。イイコイイコ。
若い子たちが優秀すぎて生きるのが辛い(迫真) mix3です。
新入社員の自己紹介としてネタが無い時に卒論、修論が鉄板として出てくるのか何かそういうのを聞く機会があったりなかったりして、懐かしいなぁとか思ったり思わなかったりしていました。みんな凄い事してて生きるのがどんどん辛くなります。ほんと自分は適当で不真面目で教授に迷惑ばかり掛けていました。今もそうです。ごめんなさい。猛省。
プロトタイピング
ソフトウェア開発の手法としてプロトタイピングというものがあります。「中身は無いが動く」ものを作り、早い段階から作るものに対しての評価、フィードバック得ることで、手戻りを減らすことを目的とした手法です。
このプロトタイピングという手法は手戻りを防ぐという点で、当たり前ではあるけれども重要な開発手法なのですが、プロトタイプの製作に時間が掛かったりすると意味が無かったり、プロトタイプを見せたらそれを完成品と勘違いされたり(もう完成しているということで、納期や費用を削られそうになったり)という笑い話のような本当の話があったりして、工夫しないとそのまま適用するのは難しい手法だったりします。
mocketch
と、プロトタイピングには手法そのものに派生があるほど色々あるのですが、そんな難しいことは自分のような阿呆には考えられないので、修論ではとにもかくにも「プロトタイプを早く作れられれば良いんだろ?」と思考を放棄して動くものを作ってました。それがmocketchです。ウェブアプリのプロトタイプとして作るものが「モックアップ」や「スケッチ」などと呼ばれているっぽいのでそれをガッチャンコしただけという。酷いですね。
具体的に何がしたかったかというと「HTMLを書くだけでそれがウェブアプリとして動くもの」を目指していました。HTMLで紙芝居だけでも十分というか実際そういう感じのようですが、それが実際に動くものだともっとイメージがしやすいしプロトタイプとしてより良いだろうという安易な考えでした。酷いですね。
何気にgithubから落としてきて mvn jetty:run するだけで動いて自分でビビってしまいました。maven 凄いです。java 可愛いよ。
以下実際に動かしてみたときのスクショ。さすがにサーバに上げて動かすのは怖いので。
2)なんかフォームが表示されて
3)適当に入力する
4)なんんかそれっぽく入力内容が反映される
5)もう一回繰り返してみた
というものでした。
リスト表示のところに form を用意すると、掲示板のレスのような感じを表現出来たり、入力に対して必須項目や文字列長などのバリデートを入れたり、ページングを入れられたりもします。githubに上がってるものは少し古くて色々上手く動いていないですが。
内部的にはHTMLに属性として meta:table meta:column を書くとkey-valueで解釈して HashMap で保存、表示しているだけです。wicketがよしなにやってくれてます。
ということで
酷い修論の製作物でした。ほんとごめんなさい。
前回pixivブログは github pages のコピーだから大丈夫とか書いたけど、github pages で書き始める前のpixivブログはバックアップ取ってなかったのでほんとは大丈夫じゃなかった mix3 です。SSH+LDAP とか keepalived を試してみた記事が消えたのはちょっともったいなかったかな。まあ、Google検索でキャッシュ漁ればある程度は発掘出来そうではあるけれども。
p5-SWFEditor
アウトプットが無さ過ぎて良くないなぁということでひねり出してみる。
前の記事に書いたp5-SWFEditorですが、swf_info と print_tag_data はCが標準出力をしていて、これをテストしようとすると標準出力をキャプチャしないといけなくてちょっと困ってしまいました。Capture::Tiny というものを使うとキャプチャ出来るというのは@fujiwaraさんから教わって試してみたけれどなぜか上手く行かず。言われて試してみたときは途中までしかキャプチャ出来ませんでした。
ただ、途中までしかキャプチャできないという時点で出力がバッファされているというのはピンと来ていて、実際その通りだったのですが、Perlでこれをどうこうする方法が分からず結局今もどうすれば良いのかというのは分かっていません。今はXSのほうでfflushするようにしてテストが出来るようにしています。
以下標準出力を捕まえる方法を探っていたときに書いたサンプルです。fflushしたときの標準出力とPerlIO_stdoutfを使った標準出力はキャプチャできていますが、素直にprintfしたときはキャプチャできず遅れてバッファに溜まっていたものが標準出力されてしまっています。
今年入ってからミスが多すぎてそろそろ本当に首になるか、潔く自分から辞めるかした方が良いんじゃないかと真剣に考えるmix3です。
pixivブログ消滅
pixivブログで書いていた事は github の pages のコピーだったので、pixivブログのサービス終了には特にどうということは無かったのですが、本当にサービスが終了して見れなくなってしまったので、ようやっと github の方に完全に移行しました。
移行にあたって、ブログ生成スクリプトを改修(リファクタリング的には今も相当酷いが)して、Octpressのような感じでURLがそれっぽくなるようにしてみました。後はカテゴリかタグに対応してページング出来れば良いかなと思っています。
それにしても 元 pixiv ユーザ(本当は今もpixivユーザのつもりだけど今となってはまともに描いてないので…)として pixiv ブログ自体は気に入ってたのでちょっと残念です。
p5-SWFEditor
タイトルに書いた通り、cpan author になりました。p5-SWFEditorという swf の画像置換やMovieClipの置換など、swf を perl から色々弄れるライブラリを作成してアップしました。
p5-SWFEditorの中身は @yoya さんの好意により @yoya さん作 SWFEditor for PHP をまるっとそのまま使わせてもらっています。自分がしたのは C で書かれている SWFEditor の機能を使うためのインタフェースを XS で書いた形になります。 (そもそも SWFEdito for PHP が移植性などを考慮してSWF操作のコア部分とそれを使うインタフェースに分離して作られているので非常に移植しやすくなっています。素晴らしいですね!)
SWFEditor の Perl バインディングの作成を快く許可して下さった @yoya さんに心から感謝致します。
ということで
ブログ移行にともないpixivブログからCSSを持ってきてそれっぽくしたのでそれのお知らせと、p5-SWFEditor を cpan にアップして cpan author になったよー というお知らせでした。
bondingとは
bondingというのはNICを冗長化するもののことのようです。ラウンドロビンで負荷分散したりマスタースレーブ構成にして片方が死んでも大丈夫なように出来るようです。
参考意外と知らない?NICを冗長化するボンディング(bonding)Add Star
ネットワークが遅延?
ネットワークの知識なんてほぼ0なのでbondingなんて当然知らなかったのですが、でも設定しないといけないということなのでWebを漁ってとりあえずラウンドロビンで設定したのですが、これがいけなかった。
並列(最大100プロセス)でアクセス掛ける負荷試験を行ってると、MySQLの接続でtimeoutが結構出る。
根本的な問題として負荷試験のシナリオにミスがあったりはするのですが、それとは別にネットワークに遅延が発生する模様。
インフラのプロフェッショナル@fujiwaraさんや@shin1roseiさんに調べてもらって自分の設定したbondingの設定がラウンドロビンなのがマズいという事が判明。並列度が上がると、NICの切り替わりで問題が顕在化するみたいです。
正直分った瞬間回線切って首吊って死にたい気分になりました...
自分のした設定にどんな意味があるのか、ちゃんと考える様にします...