自分のアカウントでプロセス動かしてそれを叩くようにする「再起動もできます。最近困っているのが「XXさんがやった方が早いよね」というパターン。締め切りがあと1週間!とかならそれで良いと思うけど、1ヶ月後とかなら別に1週間かけて他の人がゆっくりやっても良いんじゃないかと思います(その人の工数を1週間割いても良い前提で)。仕事の幅ってそうやって増やしていくものなんだと思います。カオスな開発環境で誰かのソースを弄って自分で環境を復旧させてってやっていくと、障害対応スキルのようなものが高くなります。綺麗な環境で一から構築した事しか無い人と、そうでない人とでは対応能力に差が出ると思います。いう仕事はスキル磨くのにとっても良いのですが、楽しい仕事ではないのでそんな仕事を振るのは忍びないと思うわけで。Java検索すると結構見つかるものですが、JavaのCalendar#getActualMaximumを使った間違ったサンプルを多く見かけるので正しいやり方をメモメモ。相手の力量をはかるためのクイズとして使っても良いかもしれませんね。カレンダーがgetInstance()じゃない事は言及しません。以下は2006年2月の月末日を求めるコードです。1);System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));何がいけないか。月末に実行してみるとわかると思います。仮に今日が2009年3月31日だとします。1行目でCの値は2009年3月31日になります。(時間は省略)次に2行目でCの値は2006年3月31日になります。3行目でCの値は2006年2月31日になります。→2006年3月3日になります。2006年3月の月末日は31日のため、31が表示されます。Subversionなぜpythonかと言うと、rubyは入っていないしperlは5.6でNet::SMTP使えないしsendmail行方不明だし・・・。pythonはcvs2svnで必要だったのでインストールしてもらっていたのでした。PERLも5.10をインストールして貰えばいいんですが、依頼をして待つ時間を考えるとpythonで書いた方が早いだろうと判断したからです。動けばいいやーレベルで書いたので穴があるかもしれないです。ちなみにバージョンは2.6で確認しました。Struts2結論から言うと、JSPを使ったカスタムタグを作るときにEncodingの指定を読み込めず(システムのデフォルトの文字コード)を使うようになって文字化けが発生するというバグが存在しました。Struts2.1.6でカスタムタグを作るときにデフォルトではFreeMarkerを使うようになっていますが、VelocityやJSPもテンプレートとして使うことができます。struts.xmlでデフォルトのエンジンを変更するか、自作のカスタムタグでテンプレート名を明示的に拡張子付きで指定してあげます。(例:hogehoge.jsp)さて、JspTemplateEngineはRequestDispatcherのIncludeを使って実装されています。このIncludeをする部分はカスタムタグのInclude(<s:include>)のstaticなメソッドであるincludeを呼んでいます。́Д`lll)エエ!!しかも、defaultEncodingとは別にencodingってフィールドも持っているのですがこれもstaticなわけです。これはひどい実装だ・・。分けている意味が分からない。defaultがstaticでencodingがnon-staticだったら意味はわかるのですが・・・。struts-default.xmlのBeanの定義には↓こう書いてある。/>staticなinjectionをしますよと書いてあるのにかかわらず、Setterはstaticではないのです!!誰がこんなコードを何のために修正したんだろうと思ってレポジトリ追ってみた。http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Include.java?r1=554226&r2=577728ここで変更されたみたい。ちなみに、先に<s:include>タグを実行すると、インスタンス化されて普通に@Injectが走ってstaticフィールドに設定されて以降はその文字コードを使うようにします。WTPだとデフォルトでfile.encoding=UTF-8をつけるみたいで気がつきませんでした。今月頭の話になりますが、ミート矢澤に行ってきたのです。このお店は五反田の目黒川沿いにあるお店でして、A5ランクの牛肉しか扱っていないのです。金曜日の20時頃に行ったのですが、まぁそんな時間でも並んで居るわけでして・・・40分ほど並びました。頼んだサイドディッシュはこちら↓そして頼んだメインディッシュはハンバーグ+目玉焼きのトッピング。́∀`*)タレつけなくても美味しい味がします。今まで食べたハンバーグの中で1,2位を争います!!(個人的にはとろけるチーズのトッピングをやってくれたら最高です)締めはアイス。本日のデザートを聞いておきながらアイスを頼む。さっきの話は業務の話でした。今回は、技術を啓蒙、伝承していく話です。特許やビジネスサービス化の話ではありません。ある技術Xがあるとして、この技術Xを覚えたAさんが居るとします。Aさん以外は技術Xに明るくないと仮定します。この技術Xはとても素晴らしいものですが、周りはXについて明るくないのでその必要性や優位性の理解に苦しみます。この素晴らしい技術Xを周りに啓蒙して一般化しよう。(バズワードになりつつあるコモディディ化とでも言えばいいのかな)仮に1を選んでしまったとします。ENDな匂いがプンプンします)※ここで言う理解とはアルゴリズムやアーキテクチャと言った局所技術的なものではなく必要性や優位性に対しての理解です。AさんはXを使って素晴らしいものXXを構築する事ができました。なるわけですが独り占めしているため、ある意味ブラックボックス化されているのでXXの仕組みはなかなか理解できません。知られていないものは、それ本当に大丈夫なの?と思うのが世の常です。技術革新は速いもので半年もたてば次の新しい技術が提案されています。この新しい技術をYとします。YはXの良くない部分を改善した、さらに新しい技術です。Yの良さを理解するにはXの理解が前提となります。Aさん以外はまだXの理解にすら苦しんでいる状況でYの理解なんて到底できるわけがありません。本当に大丈夫なの?と思っているものを前提としているので、Yの理解への道はさらに険しくなってしまいます。技術YはAさん以外から見れば1歩ならず2歩も3歩も進んだものなので、突拍子なものに見られてしまいます。ここで慌ててAさんはXから啓蒙したとしましょう。Xに理解を示して貰える頃には次の技術Zが出ています。ここで小さな情報格差?が生じます。AさんはZを使いたくてもYの時と同様な事が起こりすんなりと使うことができません。END!!2を選ぶと、技術Zが出てきてもAさん以外もXやYの優位性に理解を示しているのでZをすんなり使いやすくなります。その採用の是非に関して対等な議論の展開ができます。ENDってそこで終わってしまうから嫌ですね。LIFE!!と言うわけでかなり強引ですが、自分が持っている技術は出し惜しみしないで周りに教えていこう。自分はさらなる高みを目指そうというお話でした(自戒の意味も込めて)。新しいもの好きなら特に。「プログラマブルシェーダ4.0でジオメトリシェーダもバリバリ試そうぜ!」「えー2DでDirectDraw(dx7)で十分だよ」なんて状況は悲しいです。15:14日記2009前期よく、仕事を握って他の人が出来ないようにして保身を謀る人が居るかと思います。個人的にこの仕事の仕方は好きじゃないのですが、今回はこれがどういう悪循環をもたらすか書いてみようと思います。仕事を握ってその人(以下Aさん)しか出来ないようにする。Aさんしかその仕事が出来なくなる。Aさんの機嫌を損ねたり、解雇したりすると業務が止まる。Aさんは事実上保身に成功したことになる。ここからが悪循環の始まりです。Aさんが休むと業務が止まるので、Aさんは休暇が取れなくなる。RVで連休を取るなんて以ての外。Aさんはその仕事から離れることはできないので、新しい案件が来てもアサインされる事が無くなる。新しい案件はベテランの仕事を握っていない人や若い人、手が空いている人がアサインされる。新しい案件にAさんをアサインすると、また仕事を握られてしまい業務に支障が出るのでアサインしなくなる。他の人はどんどん新しい案件や楽しいことをやっている傍ら、Aさんは今まで自分が守っていた保守案件が多くなり開発案件はほとんど無くなる。会社や部署によって仕事の性質が違うので「必ずこうなる!」という訳ではありませんが、常に新しいものを作っていく職場では少なくともこういう循環は起こりえるのではないかと思います。仕事をする時は自分以外の特殊な技能を持っていない人でもその作業が出来る仕組みを用意する。技術者集団が集まっているような職場の場合、自分の専門分野なんて他の人は普段やっていないだけで大抵できるものです。個々の技術なんかよりも、万人が幸せになれる開発環境やワークフロー、コンテンツパイプラインなんかを構築できる人が重要になってくるのではないかと思うのです。・・・なるといいなぁ・・)「おまえの代わりはいくらでも居るんだ。クビ!」なんて言われたら、そのフローや仕組みを構築できる人が他に居るか周りを見渡してみましょう。居るならそれでよし、居ないならプギャーと思って楽しい職場に移りましょう。何かしらの理由で公開日が延びたとします。何かしらって、ほとんどの場合は決まっていない事があるからなんですけどね。基本は仕様を決めてから実装に落とし込んでいくわけですが、実装に遅れが出ている場合やバグが出ている場合は今回の話に当てはまらないので言及しません。今回は決めなければいけないことが決まっていない場合の話です。決定すべき事項が決まっていない決まっていないので開発の締めが延期になる(延期の理由は決まっていないから。延期した分で決まっていない事を決めないといけないわけです。)それなのに、延期になったから時間に余裕が出来たと勘違いするアレもコレもやりたいと仕様を追加したり変更したりする。挙げ句の果てに今まで決定してあるものを覆すそういう部分は比較的さっさと決めるのに、1の部分は決まっていない。4で未決事項が増えている無限ループの完成バージョンアップ計画(←オンラインの場合)もマイルストーンも切っているのに、意味なくない?出来ないものは次回に回す(オフラインパッケージは別として)。何のために締めを切ってるの。19:24日記2009前期Windowsをエンコードサーバとして使う場合、ffmpegで無くても良いのでコマンドラインでも制御できるソフトを使ってみました。Frapsでラスレムのベンチマークの動画を撮ってみました。解像度は1280*720、ビットレートが1411kbps、約3分で546MBです。確かに生データで運用するとすぐに破綻してしまいそうです。次にMP4に変換してみました。正確にはコンテナをMP4にして動画はH264、音声はAACです。aviutlのpluginでx264出力をしてみました。画質はほぼ劣化無しで13MBになりました。..ス...(゚Д゚(゚Д゚ノ(゚Д゚ノ)ノスゲー!!!ただ高画質設定で出力したのでエンコードの時間が半端なかったです。用途的に長い動画をアップする事もないだろうし、アップロードされる頻度も少ないと見込んで高画質で出力するようにします。社内の開発機と同程度のスペックをVMWare上に作成してもう1回試してみます(さすがにノートでエンコードは時間かかる)参考にしたサイトはこちらになります。動画まとめwiki次はフロントエンドの口を考えてみます。最初はSambaでコピーすれば良いと思っていましたが、フォルダを監視中にコピー中のものを拾ってしまうようなのでやっぱりWEBを口にした方が良さそうです(アップロード完了のタイミングが拾えるので)。́・ω・)当初はJavaで作っていましたが(Windowsをフロントにする予定だったので、環境構築が楽)、フロントはUNIX系のOSになりそうなのでPHPを使ってみます。Flashプレイヤーから叩く口が3,4個とWEBページも3,4ページくらいなのでJavaは不要だと判断しました。遅いので・・・)(←※VMの起動速度ではなく、開発の初動速度です)プログラムも特に設計することなく、思いついたままに書いていきます。(設計はDBも含めて10分くらい)PHPはJavaと違ってアップロードしているデータのStream処理が標準では行えないみたいです。これではアップロードの進捗バーが出せません。LAN内ならそこそこ速いしちょっと待てば良いだけだし。Mem2GBを割り当てて構築中。追記:VGAとかチップセットを認識してくれません・・・。́ω・`*)─ン...さらに追記:仕方ないので別のPCでエンコードしてみました。H264のエンコードは結構時間かかるかも。ちなみにMP4/H264は問題なくFlashプレイヤーで再生できました。画質を落としてエンコードすればかなり高速にエンコードできます。いうわけで、速度を要求する人の欲求も満たすには、2種類出力すれば良いのでは。低画質出力タスクをキューに入れるときは優先度を上げればシステムとしては良い感じ。ここまで作り込む段階ではないでしょうと思うのでこんな事は後回し。あとは動画の情報とサムネイルを簡単に取得する方法を考えないと・・・。動画の情報はffmpeg使わないと無理かなぁ。エクスプローラーに情報が表示されるから、そこから取得する方法もありそう。真空波動研のDLLを使えば確実かも。サムネイル生成はこれかなhttp://hp.vector.co.jp/authors/VA033749/soft/azmthumc.html全部ffmpegで出来るみたい。19:42日記2009前期とある理由で自分の近くにニーズがある事を金曜日に知ったのでちゃちゃっと作ってみました。細かい所は何も考えていません。最低限の一次要求を満たしているだけです。ここは慣れている構成で。モチベーションは、会社では当然ですがソフトウェアをライセンス管理しているので個人で購入したものをインストールしてはいけない。予算で購入にこじつけるというとても歪曲した欲望から来ています。(まぁBUILDERなくてもSDKはフリーなので普通に作れちゃうんですが・・)以下作ってみた画面です。動画のソースはニコニコから拝借してきました。ニーズの背景上、コメントが流れても意味がないのでFlickerのような感じで文字等をタイムラインに置けるようにもしてみました。○と□の矩形描画もサポート。動画を一時停止させてそのコマ(から数秒間にわたって)に落書きができるというイメージです。ちなみに表示タイミングはCuePointで制御しています。TyrantもSolaris10で動作するようになりました。ビルドもすんなり通ります。\(^o^)/ヤター!Luaをくっつけて色々試してます。Tyrant前回の記事の対応ではスピードが出ません。いうわけでちょっとport_getnの所を修正しました。checkでそこそこの速度で全部通るようになりました。cabinetの最新版はSolaris10で何も指定しなくても普通に通るようになりました。今回対象にしたのは、tokyotyrant-1.1.14です。Solaris」です。いうわけで以下修正ソースです。́・ω・)そんな恥ずかしいお話。ソースを斜め読みしたら、たまたま↓のコードが目に入りました。桁上げ処理の所がwhileじゃなくてifだ。1回しか処理していないね。