2012年12月3日月曜日

僕は怒っている

オーバードーズしました。

事の顛末を書くのも、ありうるべき姿かなとおもいますので、

書きます。

ちなみに毒だらけです。

その辺はご容赦下さい。


また、原因の多くは僕の大人の発達障害だと思っています。






PHP氏ね


今、現在、僕は月額10万円でアプリケーションの仕様書を書く仕事をしています。

(Excel方眼紙は書いていない)

その契約では実装・サーバー設定・リリースは僕の仕事外です。

ちなみに僕の契約条件を総括すると

  • PHPはできない。全く知らない。これは相手方も了承済み。
  • JavaとGroovyしかやりませんよと提言している。
  • 体調の関係で冬は仕事できませんと契約書に記述している。相手方も了承済み。
  • データベースの設定はやらない。これは僕のお客さんのお客さんがどのようなサーバーを利用するかということを決定するので、僕はタッチできない。そもそもお客さんのお客さんとの交渉する場に入ることはできない。
  • タスクの管理などはbitbucketのチケットを使いたいと進言して、相手方も了承している。
  • VCSとしてGitを使いたいと提案して、相手方の了承を得ている。
  • 僕はリリース・アプリ制作等の作業はやらない。相手方からの提案。僕も了承済み
  • 相手方はオフショア開発なので、ドキュメントは英語で書く。

さて、相手方のスキルなのですが、

  • PHP、しかも素のPHPしかできない。
  • mysqlはphpMyAdminしか使えない。CUIは使えない。
  • git使えない。
  • チケットでタスク管理、なにそれ美味しいの状態






さて、この度アプリをリリースすることになりました。






リリースの際に、





  • リリースの際に、zipファイルを渡されて、リリースよろっ(・ω<)。された




この時点で契約違反(PHP知らないから、PHPに関わりませんという契約の違反)なので、

これに応じなければいいのですが、

応じちゃったのがまずかったです。

なぜなら、納品先のお客さんのサーバー情報、知っているの僕だけ←


(とは言いつつ、サーバー情報を記述したWikiページ教えているんですけどね…)

まあ、この時点でも契約違反しているんですが…

さて、渡されたPHPファイルですが、

PHPよくわからないので、テストを探しました。

テストがねぇ!

おい、お前これ本気でヤル気あんのか?

まあ、リリースだけしろということなので(契約違反ですが…)

コードベースをちゃんと整えておきたいので、

bitbucketにgitにちゃんとコミットしてから、

gitでリリースしました。

データベーススキーマとかもちゃんと調べて

設定等もちゃんと接続するようにしてリリースしました。

つながんねーよ!コラ!



リリースしてから、なんか繋がんねーよと言われました。

知らんがな…

  • ちゃんとテストしたんですか?
  • リリースの際にスキーマ設定とかちゃんと指示しましたか?
  • お客さんの環境の下調べしましたか?


こういう不信感が募ってきました。

まあ、いいんですけどね…

僕、ちゃんとやることやったし…(´・ω・`)

やっと契約通りに戻った、つかの間



さて、そういった状況の中、

オフショア先にリリースさせる(これはやっと契約に戻った)のでログイン先の情報教えてくれ

とメールが来ました。

メールにパスワードを書くのはド素人がやることなので、

ログイン情報(mysqlとsshのユーザー、パスワード)の記載しているWikiのurlを教えました。

もちろん、リリース手順を記載しているWikiページのurlも教えました。

なんか、オフショア先のデベロッパーさん、git詳しくなさそうなので、

gitの説明も英語で書きました。

すごい、僕には至れり尽くせりの対応をしました。

そもそも、プロダクション環境なのでphpMyAdminとかのポートを開放している訳ありませんし、

ちゃんとsshでつないで、mysqlをコマンドで叩けよ!とアドバイスを送りました。

僕、もう怒った



さて、そうしてしばらくするとオフショア先から、

  • mysqlに繋げないんだけど、なんか設定必要?


とかいうメールが来ました。



…



は?

教えましたけど…

まあ、いいんですけど、

相手方からも

  • mysqlのログイン画面はどこですか?ユーザー設定の画面はどこですか?
  • rootのパスワードを教えてください
  • リリース情報教えてくれ


…



お前ら何回オレから説明受ければ気が済むんだよ!

ちゃんとWikiに書いとるやんってメールを返しました。

その後



なんか、僕、怒っちゃったので、

その後の記憶がありません。

なんとなくロヒプノールを80錠ほど飲んだ記憶だけがあります。

その足で、自治会の会長の仕事が、通常鬱病と、季節性鬱病のせいで

仕事がはかどりませんという掲示用の紙を貼り付けた記憶だけが残っています。


その後2




気付いたら、救急隊員が8人位着ていました。

気付いたら、1m歩く毎にこけていました。

気付いたら、階段登ろうとして、他の家のドアに頭ぶつけていました。

気付いたら、救急車で運ばれていました。

気付いたら、病院で点滴受けていました。

気付いたら、オヤジが病院にいました。

気付いたら、家で寝ていました。

後は覚えていません。

反省



生まれてきて、大人の発達障害してすみません。

僕、この世に居ないほうがいいですね。

そして、phpMyAdminしか使えないで、mysqlできると言っている輩は死んでください。

2012年12月2日日曜日

今更Spring Rooを紹介しる

10月くらいから冬眠し始めて、気付いたら12月になってました。

みけです。


本題


12月といったらAdvent Calendarということで、

このエントリーは「Spring Framework Advent Calendar 2012」の二日目となります。

なお昨日、つまりトップバッターは@makingさんで、

「STSでSpringMVC+SpringDataJPA+HibernateなPre-Configuredテンプレートプロジェクトをクイックスタート! #jsug」でした。


Spring Roo


まあ、僕は結構めんどうくさがりなので、

pom.xmlとか書くのが嫌だし、

Springの他にHibernateとかの設定をするのも

まあ、正直面倒だと思ったりするわけです。


で、二~三年くらい前に初めてSpring Rooを知ったときは、

うわ、めっちゃ楽そうやん!と衝撃を覚えたものです。


というわけで、Spring Rooの紹介をしたいと思います。


Get Started


Spring Rooのサイトに行ってダウンロードして、

パスを通すだけです。

今回はWindowsでやっていますが、Macでも変わりありません。

roo とコマンドを打って次のような画面が出れば、

インストール完了です。




至れり尽くせり


さて、何やればいいかわかりませんね。

そういう場合はhintと入力します。




projectコマンドを入力して、

そのうえで、TABを入力してとメッセージが出ます。


そのとおりにやってみましょう。




--topLevelPackageというオプションが自動的に

示唆されました。

ここでは、プロジェクトのパッケージ名を入力してとのことだそうです。


パッケージ名称を入力して、Enterを押します。



おお、なんか出来上がったっぽいですね。

実際に何が出来たか見てみましょう。



  • pom.xml
  • log4j.properties
  • applicationContext.xml

この三つのファイルが出来上がっています。


さて、次に何すればいいのでしょう?

ここでもhintコマンドを入力しましょう!




はい、データベースの設定をしてね、

と指示されます。

JPAかmongDBのどちらかを設定してあげます。


まあ、Spring Advent Calendarということで、

Spring DATAを用いてmongoDBとつなげる的な

エントリーはきっと誰かやってくれるので、

ここでは普通にJPAを選択します。


jpa setup

と入力して、TABを三回入力してねと言われているので、

そのとおりやってみます。




3回押した結果がこれだよ~(´・ω・`)


JPA実装をどれにするのか聞かれます。

まあ、ここは皆さん大好きHibernateにしましょう。

H を入力してTABを押します。




HIBERNATEと補完してくれます。

続いてTABを入力します。




すると我々は、--database オプションの指定を強制されているんだ

って状態になります。

まあ、何を入力すればいいかわからないので、

TABを打ちましょう。




データベースを何にするかを選べという事ですね。

とりあえず、MYSQLかな…

MYまで打ってTABを入力します。




はい、MYSQLと補完してくれました。

次は何を…TABです。





あれ、補完されませんね。

じゃあ、このままENTERを押しちゃいましょう。




お、なんかいろいろアップデートされたみたいですね。




  • persistence.xml
  • database.properties

の二つのファイルが追加されたようです。


…


とまあ、プロジェクトを始めるにあたって、

hintとTABを押していればなんかプロジェクトが勝手にできてきます。

楽ですね~


実際にアプリケーション作ってみるよ!


引き続きhintを入力します。




あはは、もう、エンティティを作れるよ~!
entと入力して、
--classと出たらエンティティの名前を指定して、
もし、なんかオプションが必要なら--を入力して、
TABを押してねぇ~(・ω<)。 って感じのメッセージが出ています。


とりあえず、言われるがままに打ち込んでみます。




とりあえず、Goods(商品)というエンティティでも作ります。




(補足:正確にはパッケージ名を入力したほうがよいです。
この場合はentity jpa --class ~.model.Goods --testAutomatically)


なんか色々ファイルが作成されます。

どうやらエンティティは作れたっぽいですね。

でも、次に何すればいいのでしょう?

というわけでhintを入力します。




フィールドを追加する場合はfieldと入力して、

TABを押しなさいということだそうです。


というわけで、fieldの後に二回TABを入力すると

ヒントが表示されます。




次にデータの型を入力します。

idを作りたいので、とりあえずnumberにしてみます。

numberと入力してTABを入力。




--fieldNameオプションと--typeオプションが示唆されます。

--fieldNameにはフィールド名(id)を入力し、

--typeにはlongを入力しようと思います。




さて、なんか制約を儲けたいですね。

そんな場合には--を入力してからTABをおします。

(何度も出ていますね。このパターン)




色々と制約が出てきます。

とりあえず、ここでは、

  • --notNull
  • --unique

の二つの制約を与えたいと思います。




なんかソースが更新されたようですね。


同じような感じで、次のフィールドも追加したいと思います。


  • フィールド : name / 型 : String / 制約 : notNull, sizeMax=80
  • フィールド : price / 型 : BigDecimal / 制約 : notNull, decimalMin=0




はい、なんか追加されたっぽいですね。

とりあえず、商品番号とか、商品名とか価格なんてカラムを作ったので、

アプリっぽくなって来ました。


後は画面を作っちゃいましょう。


何をすればいいのかわからないので、

TABを入力します。




とりあえず、画面っぽいコマンドはwebでしょうか…

web TAB TAB と入力します。




とりあえず、mvcと入力しちゃいましょう。




まだ何もやっていないので、setup を入力します。




なんか、めちゃめちゃファイルが出来ました…


さて、次はweb mvc all --package ~.webと入力します。(※1)




なんか画面関係のファイルが出来たっぽいですね。

楽ですね~!



動かす前に


データベースの設定をしていませんでした。

というわけで、設定しちゃいましょう。


データベース


mysqlに作ったスキーマを設定します。

使うコマンドは以下のとおりです。(※1)

  • properties set --name database.properties --key database.password --value [パスワード]
  • properties set --name database.properties --key database.username --value [ユーザー名]
  • properties set --name database.properties --key database.url --value [データベースのURL]




いざ、動かさん!



Rooコンソールを終了して、mavenでjettyを起動します。

roo > quit
$ mvn jetty:run



初回起動時はたくさんのライブラリーを落としてきますので、

結構時間がかかります。




はい。

なんか画面出てきましたね。


ちょっといろいろと触ってみましょう。

左のメニューから「Create new Goods」を選びます。




適当な数字を入れて「SAVE」ボタンを押すと、

ちゃんとValidationやってくれていますね。


では、適当にデータを登録・操作してみましょう。






なんか、簡単にできましたね。


一応、結論


実はここまでIDEが登場していません。

IDEなしでもここまでできるのです。

凄いですねぇSpring Roo。

プログラミングレスって言葉が大好きなSIerさんには受けがいいと思います。

というわけで、Springアプリケーションを作る時に、

Spring Rooを使ってみては如何でしょうか?


さて、明日は


明日は個人でもSpring Advent CalendarをやっているTugu Katagiriさんです。

よろしくお願いします。





(※1) 参考文献


2012年11月30日金曜日

需要と供給の関係について

こんばんわ。

ドラクエで一日で10万G稼いだみけです。

稼ぎ方


僕が使った方法は転売です。

安くものを買って、高く売る。

その差額を利益とする方法ですね。


異変


さて、上記のことをやっていたら、

市場に異変が発生しました。

僕が転売していた商品の底値が上がったのです。

元々はこんな感じでした。

価格 個数
100 1
110 1
120 1
125 1
130 1
133 1
…
1100 10
1150 10
1200 10
1300 10



で、まあ、僕も商売ですから、

安いものしか買いません。

なので単価120G以下のものだけを買いました。

残ったのはこんな感じです。


価格 個数
125 1
130 1
133 1
…
1300 10


需要が高まれば価格が高くなる


と我々は教えられています。

でも、実際のところは

需要が高まれば、安いものが買われるから、

価格が高いものだけ残るといったところでしょう。


そして、今現在の市場相場を見て、

供給者は価格の設定を行います。

だから、上記の市場は次はこんなになるでしょう。


価格 個数
120 1
125 1
127 1
130 1
130 1
133 1
135 1
…
1250 10
1300 10
1350 10


以上、ドラクエを通して市場価格の形成のお勉強になりました。

2012年11月28日水曜日

Re:Re:GroovyのPowerAssertさんをいじめようとしてみた

引きこもりと冬眠とドラクエが大変ですね。

ミケです。

前段


おもしろいブログがあったので読みました。


さて、じゃあ僕もいじめてみようかなと思ったら、

いじめられました

Calendarの比較



Calendarを比較してみました。
まあ、結果は見え見えだと思いますが…



実行結果


まあ、失敗することはわかっているんですよ。

失敗した時の表示内容が気になります。



…



ジャン!



酷い…(´・ω・`)


ぐぬぬ…


toStringをオーバーライドすれば読みやすくなるのでは?!と思って書いてみました。




結果…




ダメでした(´・ω・`)


誰か、求ム!

2012年10月6日土曜日

webbitを使ってみた

相変わらずドラクエ廃人のみけです。

とうとう、ハッスルダンスを覚えました。


簡単なwebサーバー


僕はこれまで簡易なwebサーバーを使う時に

Jettyをよく使っていました。


ただ、まあなんだかんだでコピペで使いまわしているだけですが…


Nettyが流行りなようなので、

Nettyを覚えたいのですが、

廃人なので覚えている隙がない…


そこでwebbitですよ!


Netty + JavaのHTTPサーバー


Nettyで簡易なHTTPサーバーを作ろうと、

「Netty + Web + server」とか、

「Netty + HTTP」で検索すると、

大抵、 Netty + Scalaの組み合わせ事例がほとんどで、

Scalaを全く知らない僕には辛いとこでした。


そこで、webbitですよ!


そこでwebbitですよ!


というわけで、webbitが登場するわけです。

Maven、Gradle、Grapesでの利用方法はこちらからどうぞ。


早速書いてみた


というわけでサーバーを早速書いてみました。



すごい単純ですね。


さて、


前回ののエントリーでは、

Jade4Jを扱いました。

そして今回のエントリーはwebbitです。

そうすると、次に考えられるのが、

このふたつのライブラリーを組み合わせた、

簡易的なWebアプリケーションになります。


こんな感じでDSLが書ければいいなあと思っています。




2012年9月29日土曜日

Jade4Jを使ってみた

ますます、ドラクエ廃人になっています。

みけです。


html…面倒くさい


ドラクエ廃人ゆえ、htmlを組むのが凄まじく

面倒くさく感じています。

そういうときこそ、

Groovyと言いたいのですが…

GroovyのMarkupBuilderも、

いいにはいいのですが、

なんだかんだいって面倒くさい。


もう少し簡単に


というわけで、面倒だな~と感じつつ作業していたのですが、

WebStormのプラグインをいじっていたら、

ふとJadeを発見しました。




Jadeとは?


JadeはHamlに影響を受けて作られた

テンプレートエンジンです(詳しくはこちら)。


実装されている言語は下記のとおりです。



早速使ってみました。


Javaしかできないので、必然的にjade4jを使うことになりました。

必要なGradleの設定は以下のとおりです。





サンプルまでに、学生の一覧を表示してみるという

アプリケーションを作ってみました。


学生クラスはこれ。




Jadeのテンプレートはこんな感じ。




Jade4Jを使ってみるクラスはこれ。




出力されたhtmlはこんな感じ。




全般的に


すごい簡単でいいですね。

html/xml形式の堅っ苦しさがなくて、

非常に書きやすいですね。


これは今後ヒットしそうな気がします。



2012年9月24日月曜日

Android温泉2012夏の陣&つ部温泉に行ってきた #drospa2012

ドラクエ廃人のみけです。

ドラクエをやっている人は是非、ひめちゃんを雇ってあげて下さい。

温泉


Android温泉2012夏の陣&つ部温泉に行ってきました。

当日の様子については、ツイートがまとめられています。



やったこと


まあ、適当にモクモクするという趣旨の合宿なので、

皆、適当にモクモクしている中、

僕は本を読んでいました。

読んでいた本はこれです。




内容


本の中身ですが、

普通のプログラマーならやってて当たり前だよねという内容でした。


合宿の方は…


大きな部屋で35人が雑魚寝するとか、

ちょっとありえない経験ができました。

また、雑魚寝とかやってみたいですね(白目