2011年12月31日土曜日

僕歪年末号~おもくその3.11 資本原理主義者たち

熱々カップルと頑固親父CO2

僕が「異常気象」という言葉を実感するようになったのは、米不足と水不足が連続した年があった90年代。それ以前か以後かは正確には分からないけど、その頃には「省エネ」とか「クーラーの設定温度は28℃を目安に!」って言葉は普通に耳にしており、おもくそ家では実践していた。だけど、「設定温度28℃」って少数派なんですよねー。友達が遊びに来ると「おもくそん家は暑い!」という意見がしばしば(そして冬は「寒い!」)。逆に、僕が遊びに行った時は「お前んち寒い!」っていうのだけど(そして冬は「暑い!」)。飲食店やデパートなんかに行っても、大抵のお店で「寒い!」と感じるのだけど、周りは大抵平気みたいだし。そうか、28℃のおもくそ家の方が異常気象なのか…なんてしみじみ思いながら生きてきた。そんな僕にとって、否が応にも皆節電せざるをえないこの夏は、非常に過ごしやすいものであったし、暑さで周りが体調崩しまくっているのを見ては優越感に浸っていた(はい小さい人間です)。

今までずっと節電してきたので、別に特に生活変える必要無かったのだけど、何もしないのも癪だし、それならさらに引き離してやる、さらなる高みを…ということで、エアコンゼロ稼働に挑戦。結果は…ゼロは流石に無理だったけど、盆に3日程使用しただけで済んだ。しかもこの夏体調崩す事は一度も無く。いやー人間の適応力って凄いね。しかし盆を過ぎたら一気に涼しくなったから、あれさえ乗り切ればゼロ達成できたかもと思うと悔しい。

ところで、「節電はピーク時間帯だけ行えばよく、深夜の節電は必要無い」という意見がありました。意見というか、まあ学術的に事実なんですけど(使用量が供給量を超えなければよく、夜は使用量の多い工場やオフィスが稼働停止するので)。たださあ、ピーク時間帯だろうが深夜だろうが、電気を消費すればその分熱が確実に発生するわけですよ。で、発生した熱は「熱力学第一法則」とか何だかで自然消滅することはないので、どっかに放散してくれない限りはキャリーオーバーされるわけですよ。で、都市化する以前は、緑やら土やらが吸収してくれたり大気圏外に逃げたりできたのに、現在はご存じの通りアスファルトで蓋しちゃったし、熱夫と熱美の大気圏外への逃避行はCO2という名の頑固親父によって阻まれ…というわけで、現在においては

電気使う=温度上昇

って式が成り立つと思うのですよ(電気使う→熱発生→でも熱の逃げ場が無い→温度上昇)。ヒートアイランドの原因の一つでもありますね。そして、温度が上がれば当然クーラーの稼働も上がり…と、いわゆる悪循環です。

よって、ピーク時間帯かどうかなんて関係無く、常々節電すべきだ!とおもくそは思ったとさ。
※専門家じゃないので完全なる憶測です。実際正しいかどうかは分かりません。でも全然間違ってるってことはないと思うのだけど…

そんな中、深夜どころか、昼間でも全く節電しないという人がいました。その人の言い分は、
「節電して暑いの我慢して体調崩すと、仕事を休む→マクロな視点で経済効果が下がる。そっちの方が問題。
だから我慢(節電)はすべきでない。」
というもの。
うーん、我慢の程度にもよるけど…大抵の人の場合、そもそも今は使いすぎな状態だと思うんですよ。28℃で十分適応できるところを(これには個人差ないと思います)、必要以上に温度下げて使いまくってる甘ったれ状態だと思うんですよ。だから、節電つっても「過剰」を「普通」にするだけなんですよ。その程度の努力すらしない・できないってのは、怠惰・我が儘としか言いようがない。下がっても給料・待遇十分なのに、人件費削減に文句言いまくってる公務員ユニオンとか某電力会社と同じ!
「あーレイプしたい。もちろんレイプはいけないことだ。でも我慢してたらストレスで体調崩す。そうなったら会社の売上が減り、ひいては日本の経済が…だから我慢はよくない。よし、レイプしに行くぞ!」ってのと同じ理屈!そんなのダメ!

ていうか、いつの頃からか「環境とかなんかよりもとにかく経済(金)優先だ!」って人が増えてきてますね。資本原理主義って奴?
余談
この節電を機に、全般的なエコ意識が高まって、エコバッグ持参率上がるかなーと、スーパーとか行くたびに漠然と眺めてみたけれど、そないやなー…そこまでの考えは及ばないのか…

燃えてるのは鳥じゃない。ファンの怒りの炎だ。

前述の節電のやり取りがあってから数週間後、以前に述べた『火の鳥 オリジナル版復刻大全集』の代金のカード引き落としが行われた。繰り返すが、その額98700円(1冊約8000円)。よくよく考えたら、地デジ化で買わざるをえなかったブルーレイレコーダーよりも高い。

火の鳥と言えば、単行本化の際にエピソードや台詞がまるっと改変・削除された事で有名なので、ファンはオリジナル版の復刻を長い間待ち焦がれていた。そしてついに復刻が決定し、喜び勇んで情報見てみると、この価格…ある人は手が出せないと諦め、殆どの人は二の足を踏み、そして恐らく全員が憤ったと思う。商魂丸出し。ビジネスの基本は「顧客のニーズを満たす」って、ドラッカーあたりも言ってなかったか?どう考えてもファンのニーズを無視してるだろ。復刊にあたって多大な労力・コストをかけただろうから、その辺の単行本と同じ価格帯でとまでは言うつもりは毛頭ないですけどね、誰もハードカバーとかオールカラーとかは望んでいない。ただ物語を読みたいだけだ。貴重な品だから、コレクター向けバージョンとしてハードカバー版はあってもいいだろうけど、廉価版も出した上でファンが好きな方を選べるようにするべきでしょう。

代替品が存在するような商品であれば、「ここの会社の高いから別の会社のにしよ」とか「ここの店、感じ悪いから、別の店で食べよ」というように、余所に移ればよく、それにより見限られた方は淘汰されていくのだけど、この火の鳥に関しては独占販売。他に移りようが無い。どっかの電力会社と同じだ。ここでも、顧客のニーズとか文化の供給とかよりも金儲け優先の「資本原理主義」を感じざるをえなかった。手塚先生はどう思われているのだろう…




2011年12月30日金曜日

僕歪年末号~おもくその3.11 俺は風

久方ぶりの雑文。年末なので今年を振り返る…というのを口実に、忙しくて下書きのまま放置されてたエントリを加筆訂正して清書してしまう。

まずは…2011年の日本を語る上で避けては通れない、3.11にまつわるエトセトラ。

次の日健康診断なんですけど

JRerのため早々と帰宅難民化が決定されたあの日。まあ金曜日だし、飲みなりカラオケなりネットカフェなりで夜を明かし…たかったが、次の日は健康診断。まあ十中八九中止だろうとは思ってたけど、万が一予定通りだったら後々手間かかるかな、そもそも基本的に徹夜は嫌いだし家で寝たいし、ていうか割と仲いい人間みんな歩いて帰ろうとしてるぞ…ってことで、民族大移動の列に加わることを決意。Googleマップで徒歩ルート検索すると…距離約20km、所要時間4時間…。30ページに及ぶルート地図を印刷し、20時に会社を出た。自分は結構歩くのが速い方なので、Googleが弾き出した時間ほどかからないだろう、と。

Google先生はあの日も正しかった

印刷した地図を片手にひたすら歩いた。ぐんぐん順位を上げながらひたすら歩いた。俺やっぱり速いぜ風だぜ!とが思いながら歩いた。こんな事でも考えながらじゃないと疲労で心が折れそうだったから…

地図が20ページに差し掛かった、つまり3分の2を消化したところで、これまでの経過時間を確認すると、約2時間。おお、単純計算だと3時間で着きそうだ俺やっぱり速いぜニュートリノだぜ!とか思いながら、地図の次の案内確認すると…
「直進する 8km 1時間30分」
…結局、家に着いた時には約4時間経過。時間ぴったり。Googleすげえ。
そう言えばこの日、もう10年以上ぶりに立ちションしたなー。コンビニの便所、どこも人気ラーメン屋ばりに並んでたもんなー。

鉄筋コンクリート様

本棚の悲劇の話が周りからちらほら来てたので、恐る恐る玄関を開けて中に入ると…以下、倒れていたもののリスト。
  • 空ペットボトル
  • まな板
  • 縦置きしてたボックスティッシュ
  • 便座
などなど、こんなレベル。いい意味で拍子抜け。本に関しては、本立て使わず自らのバランスで立ってた段のが横倒しになってただけで、飛び散ってもいなかった。
これが…鉄筋コンクリートの…力か…

「サヨナラノツバサ」がプチトラウマ

あの日の数日前に発売された、今年というか歴代最高レベルの菅野よう子作品『マクロスF サヨナラノツバサ』のサントラ。



徒歩開始時、iPodの電源入れて上記アルバムから「サヨナラノツバサ」を1曲リピートで再生してふとバッテリーアイコン見てみると…あ、赤い!殆ど残ってない!全く、携帯に続いてiPodもなんて、ホント最悪だ…

この長い長い道のりを無音状態でというのは不毛すぎる。余計な操作したらダメだ…ということで、4時間中、全くiPodに触れなかった。つまり、4時間中ずっと「サヨナラノツバサ」。僕の中では歴代TOP10に入るくらいの名曲だけど、聴くとどうしてもこの日の苦しみを思い出してしまう…

「この世で一番強いのは放射能」

これは去年の話になっちゃうけど、最後のM-1グランプリのスリムクラブは衝撃でした。



特に見出しの台詞はお気に入り。だけど、こんなことになっちゃったら「不謹慎だ!」とか言う輩が出てくるだろうから、あのネタは封印されてしまうのだろうか…

話は変わるけど、決勝で「(優勝)取らせてやりたかった」と笑い飯に一票入れた松本人志にはがっかりだった。純粋な面白さでいったら、決勝は絶対スリムクラブだと思うけど(松ちゃんの好きそうな笑いでもあったし)。昔のM-1でますだおかだの優勝した際、審査の仕方に対してラジオで吠えてたあなたはいずこに…今年発売された本『仕事の流儀』では「下ネタやブラックな笑いはもういい」とか言っちゃってるし…90年代の毒々しさが好きなプチ信者としては、人生の楽しみが…ああでも、今月の『MHK』の戦隊ものは、久し振りのシュールコントで良かったけどね。まあ笑い声はいらんと思うけど(多分足してるやつですよね?)。


おもくそクエストファイナルファンタジーファイナル-2

将来有望な若者の将来価値を毀損する、大きなワナ - Chikirinの日記
人気ランキングのトップに君臨する名だたる大企業から内定をもらった彼らは、なんの疑いももたずにそういう企業に就職していきます。自分達がそこで学ぶことになる「ビジネスの常識」が、世界のビジネス常識とは全く異質なものであることなど想像もしないままにね。

実は「完全に周回遅れです」みたいな場所で人生最初の「働く訓練」を受けることがどれだけ自分の将来価値を毀損する可能性があるか、よーく考えてみたほうがいいんじゃないか

その損害の大きさたるや実は、「なんだかんだいっても安定してるし」「福利厚生もしっかりしてるし」みたいなぼんやりしたメリットとではとても相殺できないくらい大きなダメージになるですよ。

おもくその転職活動冒険譚『おもくそクエストファイナルファンタジー』シリーズ。ついにシリーズ名が変わっちゃいました。
「XIII-2」的命名規則を使用すればまだまだ引っ張れますが、今回は本当に大メインクライマックス(by 世界のヘイポー)です。引越したいから荷物は早く片付けておきたいし(電子の世界では関係ねえよ)。

『安定』の定義って?

転職活動開始前、当時の所属会社で上司に辞意を伝えたとき、上司は言った。
「うちみたいな楽な会社はそうそうないよ。ミスしても減給とかまず無いし。他は厳しいよ~」(※1
会社を辞め、現在無職で転職活動中であることをお袋に報告した時、お袋は言った。
「公務員にしときなさい。まだ年齢大丈夫でしょう?」
要するに、両名とも「『安定』して『楽』な会社がイイゼ!」って言いたいのだろう。
そもそも『安定』の定義って何なのか。現代においては
「収入を継続的に得られる事が保証されている」
ってところでしょうか。ではもう一歩突き詰めて、何故公務員は「収入を継続的に得られる事が保証されている」のか。
「解雇や倒産が無いから」
…確かに、今まではそうだったかもしれない。でも、この状態がずっと続くか?流石に続かんでしょ。橋本氏のような「まともな政治家」が今後増えてくる(増えて欲しい!)と、間違いなく粛正されると思うけど(ていうか今月早速切り込んでたしね)。そして、今年になって(特に3.11以降)、非公務員はかなり怒りが溜まってるから、いくら大人しい日本人といえども、いつか暴動起こるぞ。

「解雇や倒産が無い企業」なんて存在しないと思っておいた方がいい。そうなると、「収入を継続的に得る」方法は一つしかありません。
「継続的に職にありつく=突然、会社が潰れても、すぐに次の仕事にありつけるくらいにスキルをつけておく」
そうなると、会社の選考基準は
「どれだけスキルが身につくか」
ってことに尽きると思います。
公務員って、スキル身につきますか?ぬるま湯環境に慣れきっちゃうと、いざ改革だか革命だかで放り出された時点で死亡フラグだと思いますよ。そうなる可能性を少しは考えてますか?それとも、まだ「公務員は安泰」神話はずっと続くとお思いですか?
「ゆっくり走るのが安全運転だと思うなよ」by 松本人志
「ゆっくり=安全」とは限らないのです。
ちなみにこういう人達の世界です
大阪の労連って本当に凄いな: やまもといちろうBLOG(ブログ)
人事評価結果の給与反映はやめろ

中途採用を行ってない会社は危険な香り

これは新卒者向けのお話になりますが。僕は新卒の頃、会社選びの基準の一つに「中途採用していない」というのを持ってました。理由は、「中途採用せず=離職率低い」と思ってたから。

これ、大間違いでした。どんなに良い会社だとしても、退職者ゼロなんてあり得ません。必ず一定数は発生します。そして減った分は穴埋めしないといけない訳ですが、中途採用していない会社の場合、新卒が穴を埋める事になります。もちろん、退職者(経験者)の穴が新卒(未経験)で埋まる訳がありません。よって、新卒採用しかしていない会社は、会社全体のスキルは下がり続けていきます。僕の前の会社なんかまさにそれで、一番脂が乗ってくる30代前半の比率が極端に低く、人口ピラミッドは平子理沙ばりのくびれのナイスボディーです。

という訳で、「中途採用を行っているかどうか」というのは、その会社の力を知る一つの指標になるかなと。企業のWebページに、中途採用ページが用意されてるかどうか確認してみてください。そもそもページ自体が無い会社は、中途採用の文化が無いと思ってよいかと。

※1
ちなみに、このやりとりあった直後くらいにリストラ開始w
仕事が楽(気楽)なのは確かだけど、アラサーで基本給手取り17万…同じ「気楽」なら派遣の方が稼げるんじゃ(年金とか考慮しても)。




2011年12月29日木曜日

おもくそクエストファイナルファンタジーファイナル

ゲリラ的雇用面接のすすめ - The Joel on Software Translation Project
我々の欲しているのは「才能 」に溢れた逸材であり、特定のスキルを持つ技術者ではない。どのようなスキルも技術的に数年すれば時代遅れとなる。重要なのはどのような新技術でも習得する事の出来る人を採用する事であり、たまたまちょうど良いタイミングでSQLを知っていた人を採用する事ではない。

おもくその転職活動冒険譚『おもくそクエスト』シリーズ。
転職活動を終えてから年をまたいで1年以上経過、下手すりゃ2回目の年跨ぎを迎えてしまいそうな状況でしたが、今回で本当にファイルです。もうこれ以上タイトル思いつかないし。

使用した媒体

エージェント2社を使用しました。転職サイトやスカウトサービスは未使用。
またエージェントは、大手1社、ITに強そうな中小1社という構成としました。
理由としては、選定にあたっていろいろネットを調べてると
  • キャリアコンサルもピンキリ。外れの場合もあれば、外れではなくても得手不得手があったりするので、エージェントは複数利用した方がよい。
  • 大手は、キャリアコンサル一人あたりの担当人数が多いので、アクションが遅かったりおざなりにされる場合がある。
というような意見を随所で見かけ、まあそうだろうなと納得したので。
ちなみに僕が調べた限りでは、電車の広告などでよく見かけるR社やI社はあまり評判よろしくなさそうです。もちろん、実際はどうかは分かりません。きっとこれもコンサルによるのでしょう。
おすすめエージェント
僕が利用した「大手1社」というのはパソナキャリアなんですが、ここお薦めです。「顧客満足度No1」ということで選んだのですが、本当良かったです。担当コンサルは合計で3人ついてくれて(メイン1名+サブ2名)、前述した「大手はアクションが遅い」は皆無でした。また会社に関する情報は「ここは激務です」「あまりいい噂は聞きません」などと包み隠さず正直に教えてくれた。面接の傾向と対策などの有益な情報やアドバイスも膨大でした。

唯一注文をつけるとすれば、応募した企業一覧、選考の状況などをシステム化してくれてたら尚良かったかな。面接終わった後に、どんな質問があったかなどを担当コンサルに報告するのですが、手段がメールなんですよ。報告内容はおそらくコンサルがコピペしてどっかに記録しているのでしょうけど、システム化してそこに入力して報告するようにすれば、転記の手間が省けると思いますよ。ちなみにもう一つの中小エージェントはそうなってて、非常に便利でした。

一応、中小エージェントについても触れておきましょう。正直、あまり良い印象は持てませんでした。別にコンサルの人柄とかアクションの速さとかには問題なかったですけど、明らかにブラックだろって求人をポンポン持ってくるんですよね(光系列とか)。その会社の内情について質問しても、回答は「そんな事ないですよ」的に浅いもので、パソナキャリアの時のような「包み隠さず」感が感じられず、不信感が募っていきました。情報・アドバイス量もパソナに比べたらずっと少ない。唯一勝ってると言えるのは、前述した転職活動管理をシステム化してることくらい。

まあ、結局は中小エージェントの持ってきた求人に決めちゃったんですけどね(というかそれしか無かった…)。ちなみにその求人の会社(ていうか今の会社)は以前も述べた通りブラックの噂あり(実際どうだったかはこちら)。

ていうか、世の中はすっかりソーシャル転職の普及期ですなぁ。できる人間はエージェントすら必要としない時代となるのか。

数字の報告

自社サービスを持っている企業を中心に挑戦した、今回の転職活動。各種通過数などは以下の通り。
  • 書類選考
    • 応募:21
    • 通過:11
  • 面接(一次、二次)
    • 社数:9
    • 通過:5
  • 最終面接
    • 社数:3
    • 通過:1
結局、1社っす…。書類選考通過率は大体3割くらいらしいのですけど、ご覧の通り僕は5割超え。書類選考通過したってことは、一番の懸念であった「業務系しか経験無い」って経歴でも一応問題なしと見なされたって事で、経歴突破できたのなら割とすんなりいけるんじゃね?と早々に思ったものだけど、そう簡単にはいきませんな。

総括

最初に言いたいのは
「応募資格は満たせてても、結局は経験者有利」
ってことです。結局、中途採用では即戦力が求められますよ、と。「人柄、コミュニケーション、向上心などは問題無い。けど、他の応募者の方が経験豊富なので…」というパターンの多いこと多いこと。冒頭のジョエルのように「才能(≒ポテンシャル)」で選んでる余裕は無いのか…

前述の通り、自社サービスを持ってる企業を中心に応募したのだけれど、質問はどこも似たようなもんでした。サービスに関する質問は「見てみた感想は?」レベルの浅いものが多く、深い・細かい所まで突っ込まれることは殆ど無かったです。僕、面接前には滅茶苦茶使い込んで長短所列挙したりとかなり時間費やしてたのですけど、これには正直拍子抜け。

そういえば、有名企業よりは、非有名少数ベンチャーの方が不通過が多かった。倍率的には非有名の方が低いだろうから難易度も低いかなと思いきや、意外な結果に。ある非有名ベンチャーの面接で「うちはこの通り人数少ないから、フォローする余裕はないので、自分で学習・解決してもらう必要がある」というような事言ってたので、要するに「フォローできないから経験者の方が安心」ってことなんでしょう。

最後の最後に

最後ではないという事を再度お伝えします。結局、収まりきらんかった…
タイトルとの矛盾に関しては「ファイナルファンタジーなんか『ファイナル』とか言っときながら続編出まくってるじゃねぇか!ていうか『XIII-2』とか何だよ!『XIIII』でいいじゃねぇか!」という小学生レベルの回答を送ときます。
ということで、次回作のタイトルは
「おもくそクエストファイナルファンタジーファイナル-2」
で決定。




2011年12月28日水曜日

VirtualBox環境構築メモ

仕事で使う機会があったのでメモっておく。大した内容じゃないですけど。VMware Playerより高機能っぽいど、お勉強とかに使うくらいなら別にどっちでもいいかな。
ちなみに仕事ではCentOSばっかりなので、当エントリではせっかくなんでUbuntuにしてみました。

各種ソフトウェア

  • VirtualBox 4.1.8
  • Ubuntu 11.10

VirtualBoxインストール

以下ページよりダウンロード。
インストールに関しては特に説明すべきことは無い。

UbuntuのISOイメージダウンロード

from... Ubuntu Desktop 日本語 Remix CDのダウンロード

仮想マシン作成

「VirtualBox マネージャー」を起動し、ツールバーの「新規」を押下。ウィザードが開始される。
開発者なら各項目の意味合いは何となく分かると思うので、僕が踏んだ手順は箇条書きでお送りします。
  1. 仮想マシン名とOSタイプ
    • 名前
      任意の名称を入力
    • オペレーティング システム
      Linux
    • バージョン
      Ubuntu
  2. メモリ
    お好みで
  3. 仮想ハードディスク
    「新規ハードディスクの作成」にチェック
  4. File type ※何故ここから英語混じり?
    「VDI」を選択
  5. Storage details
    ※仮想ディスクのファイルサイズを固定サイズとするか可変サイズとするか。
    「Dynamically allocated(可変)」を選択。
    • 場所(仮想ディスク作成先フォルダ)
      お好みで
    • サイズ(タイプを可変とした場合は最大サイズ)
      お好みで
  6. 概要(仮想ディスクの)
    「Create」を押下
  7. 概要(仮想マシンの)
    「Create」を押下

作成した仮想マシンにOSインストール

作成した仮想マシンを選択してツールバーの「起動」押下。またもやウィザードが開始される。
以下、僕の足跡を箇条書き。
  1. インストールメディアを選択
    ダウンロードしたUbuntuのISOイメージファイルを選択
  2. 概要
    「起動」押下。
    尚、これ以降はUbuntuインストーラの世界です。
  3. ようこそ
    Ubuntuをインストール
  4. Ubuntuのインストール準備
    特に何も選択せず「続ける」押下
  5. インストールの種類
    「ディスクを削除して…」を選択
  6. ディスクを削除して…
    「ドライブの選択」欄でVirtualBoxのHDが選択されてることを確認し(てか選択しは一つだと思うけど)、「インストール」押下
  7. どこに住んでんだよお前
    Tokyo
  8. キーボード
    日本語
  9. あなたの情報教えてよ
    適当にお好みで
そしてじっと待つべし。

ネットワークアダプタ設定

デフォルトの「NAT」だと、同一ネットワークのマシンからはおろか、ホストOSからもゲストOSと通信できない。よって、通信したい場合はネットワークアダプタ設定を変更する必要がある。

仮想マシンを選択してツールバーの「設定」を押下し、表示されたダイアログの「ネットワーク」を選択。
「割り当て」を以下のいずれかに設定する。尚、ダイアログ見れば明らかだが、アダプタは最大4つまで設定可能。
  • ブリッジ アダプタ
    同一ネットワークのマシンと通信可能
  • ホストオンリー アダプタ
    ホストOSとのみ通信可能
  • 内部ネットワーク
    同一の名前(「割り当て」のしたの項目)のアダプタと通信可能
    ※仮想マシン同士で高速に通信したい場合に

Guest Additionsのインストール(任意)

VMwareにとっての「VMware Tools」のような便利ツール。
これいれとくと、ウィンドウサイズに合わせて描画領域がリサイズされたり、ホストOSとの共有フォルダが利用できるとのこと。
実行中の仮想マシンのウィンドウメニュー「デバイス」>「Guest Additionsのインストール」を選択。Ubuntu側でディスクがマウントされるので実行する。
インストール完了したら、メニューに項目が追加される(ウィンドウリサイズは「ビュー」内に)ので、お好みに合わせて設定してください。

2011年12月25日日曜日

Selenium 2 事始め - Maven編

さて、前回エントリではSeleniumのJARファイルを手動配置してましたが、実際試した方はお分かりでしょうがJARファイルたくさんあります。これだとバージョン上げるときに大変です。
今回は、Seleniumのバージョンを指定すれば必要なJARを自動で探して取ってきてくれるMavenを使用した環境構築手順をご紹介します。
まあSeleniumとうよりは、殆どMavenの使い方です。
Mavenか…Javaメインだった前職の業務系SIerでは、4年半勤めて結局1回も使う機会は無かったなー…はー情けない…

各種ソフトウェアのバージョン

  • Maven 3.0.3
  • Selenium 2.15
  • Java SE 7
  • Firefox 9.0.1
  • eclipse 3.7
  • Windows 7

Mavenインストール

ダウンロード&配置
まずはアーカイブをダウンロード。
解凍したものは任意のディレクトリに配置。
環境変数設定
以下設定を追加。ルートディレクトリのパスはお使いの環境のものに置き換えてください。
  • Path : {Mavenルート}\bin
  • JAVA_HOME : {JDKルート}
動作確認
コマンドプロンプトでmvnコマンド実行してみてエラーが無ければOK。
C:\maven>mvn --version
Apache Maven 3.0.3 (r1075438; 2011-03-01 02:31:09+0900)
Maven home: C:\maven\bin\..
Java version: 1.7.0_02, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_02\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

Seleniumプロジェクト作成

以下コマンドでプロジェクト作成。「-DgroupId」でパッケージを、「-DartifactId」でプロジェクト名を指定します。
尚、以下のやり方だとコマンド実行したディレクトリに作成されます。多分オプションで作成先は指定できると思うけど、調べてないから知らん。
C:\maven>mvn archetype:create -DgroupId=com.example.selenium -DartifactId=Selenium2SampleByMaven
pom.xmlにSeleniumライブラリの依存設定追加
Mavenの肝。これ設定しておくと、必要なJARを勝手に取ってきてくれます。
バージョン上げるときは<version>変更するだけ。コンパイル(mvn complile)などのタイミングで取りに行きます。
公式サイトにある依存設定を<dependencies>タグ配下に追記します。

eclipseプロジェクトに変換
eclipseで読み込めるように「.project」や「.classpath」を作成してくれます。
ちなみにpom.xml編集していれば、このタイミングでJAR取得しにいきます。
> cd Selenium2SampleByMaven
> mvn eclipse:eclipse

eclipse設定

Maven関連の設定追加
設定ダイアログで[Java] -> [ビルド・パス] -> [クラスパス変数]と進み、「新規...」で追加します。
  • M2_REPO : {ローカルリポジトリのパス}
    ※デフォルトだと{ユーザールート}\.m2\repository
もう一個の方は設定ダイアログで[実行/デバッグ] -> [ストリング置換]と進み、「新規...」で追加します。
  • maven_exec : {Mavenルート}\bin\mvn.bat

あとは

作成したプロジェクトをeclipseにインポートして、前回エントリのサンプルを作って動かしてみてください。
ちなみに、当エントリのやり方だと、プロジェクトのコンパイラー設定がバージョン1.4になってしまっており、コンパイルエラーが発生しちゃってました。これも多分プロジェクト変換時にオプションで指定できると思います。追々調べて追記しときます。

参考

Selenium 2 事始め

ブラウザを自動操作するテストツールであるSelenium 2の導入メモです(言語はJava)。
今年の6月辺りに、バージョン1系を散々調査・検証の上カスタマイズしたりしてよっしゃ終わったと思ったら、彗星の如く現れやがった時の脱力感ときたらなかったです。

各種ソフトウェアのバージョン

  • Selenium 2.15
  • Java SE 7
  • Firefox 9.0.1
  • eclipse 3.7
  • Windows 7

SeleniumのJARをダウンロード

公式サイトからZIPファイルをダウンロード。
解凍したら中身から以下を取り出し、プロジェクトのビルドパスに追加。
  • selenium-java-2.15.0.jar
  • libsフォルダ内のJAR全て

サンプルクラスで試す

公式ドキュメントの以下ページのサンプルをコピペして試してみましょう。

Firefoxが起動し、Google検索が自動実行されればOK。
いやー感動しますね。何かいろいろと作れば楽できそうだ。

おもくそクエストファイナルファンタジー

おもくその転職活動冒険譚『おもくそクエスト』シリーズ。
前回の終わりに「次回、完結編。」とかほざいてから7ヶ月強、転職活動終えてからは実に1年以上経過というフレッシュさの欠片も無い状態ですが、物書きのリハビリがてらまだ引っ張ります。つってもいい加減に今回で終わらせますけど。ほら、タイトルをご覧なさい。今までのドラクエにちなんだタイトルと違うでしょ。「終わり」を表す単語でしょ。決して、前回の「Ⅶ」に続く「Ⅷ」の「空と海と大地と呪われし姫君」にちなんだ言葉を思いつけなかったからではありません。

で、結局転職は成功したのかよ

一応成功しました。今回の冒険のそもそもの目的を簡単に纏めると
「向上心が高く、市場価値のある技術を使った仕事に携われ、自分がより成長できるような会社で働きたい」
というもの。
LAMPの仕事させてもらえてるし、みんなめっちゃアンテナはってて勉強してる会社…ということで、目的は達成できました。それに、目的には無かったけど収入も増えたし(※1)。

ただまあ…勤務形態は派遣みたいなもんで客先常駐(大抵1人で)なので、自社社員が優れているかどうかという要素は、一緒に仕事する機会が基本無いから正直あんまり関係無いですけどね。結局は常駐先次第です。この辺の所があるので「一応」成功としました。

ところで、前作でちらっと触れた、会社のブラック説。実態は…僕にとってはブラックではなかったです。ていうか、僕は先にも述べたとおり客先派遣者なので、自社の労働環境は関係ない。「いやいや、IT業界で派遣(人貸し)なんて大抵ブラックな仕事だろう」という意見があるかもしれませんが、案件は誰もが知ってるWeb系企業の直請けが多く、訳分からん会社が間に挟まっている○次請けみたいなのはあまり無く、割と健全な仕事が多い(※2)。実際、ほぼ定時帰りのはたくさんいる(ちなみに僕もその一人)。まあ、立場上どうしても有給休暇はとりづらいですけど(月140時間下回るな圧力)…

「『僕にとっては』ブラックではない」ってことは…

自社勤務である営業や他事業部の人達は、結構な長時間労働&一部ポジションでは半強制?の休日出勤もあるようで、確かにブラックと言われる側面はあるかもしれません。でも仕事=趣味という人が多いようで、みんな好きで働いている模様。それに、不毛に時間を浪費しているのではなく、働いたら働いた分得るものはあるようなので、本人が好きで働いてるならいいんじゃないの。
僕の中でのブラック企業の定義は、
「費やした労力に対するリターンが限りなく少ない」
というものです。その定義から鑑みると、ブラックとまで言うのはちと違うのかな、と。
まあ、仕事≠趣味の人にとっては、得るものがあるとしても長時間労働は堪らないでしょうけど(ちなみに僕はこっち側)。

最後に

これが最後じゃないということをお伝えします。
数字報告やお薦めのエージェントとかいい会社の見分け方とか、もうちょっと書きたい事があるんですけど、もう既に結構な文字数となってしまったので…
次はいい加減本当にファイナライズします。

※1
まあ前の会社が安すぎたから、どこ行っても大抵UPだろうけど。30近くでも基本給の手取りが17万ですからね…

※2
ちなにみ業務系の案件は大抵燃えてます。流石にこれ系での直請けは「上流」会社のもので無理っぽい。この現実を見て、業務系SIerを脱出して本当に良かったとつくづく思った。

2011年12月24日土曜日

Subversion導入メモ

クリスマスだ。ということで、Subversionの導入メモだ。
これからはGitだぜ的な世の中だけど、大抵の現場ではまだ根強く使われているであろうSubversion…
何だこの始まり方は。

試した環境

CentOS 6.0

インストール

Subversion本体
# yum install subversion
mod_dav_svn
Apache経由で(HTTPで)リポジトリにアクセスするために「mod_dav_svn」モジュールをインストール。
# yum install mod_dav_svn

リポジトリ作成

「svnadmin create」コマンドを使用。
下の例では、まずSVNのホームディレクトリを作成し、それからrepo1リポジトリを作成。
最後にディレクトリの所有者をapacheに変更。
# mkdir /var/www/svn
# svnadmin create /var/www/svn/repo1
# chown -R apache:apache /var/www/svn

リポジトリのアクセスアカウント作成

htpasswdコマンドを使用。
下の例では、アカウントuser1とuser2を追加しています。
# htpasswd -cm /etc/httpd/.svnpasswd user1
New password:
Re-type new password:
Adding password for user user1
# htpasswd -m /etc/httpd/.svnpasswd user2
New password:
Re-type new password:
Adding password for user user2

設定ファイル編集

/etc/httpd/conf.d/subversion.confを開き、URLとSVNホームを紐づける設定を定義。
下記の例では、「http://{ホスト}/svn」というURLと「/var/www/svn」を対応付け、さらに先程作成したパスワードファイルを使用して基本認証を行う設定をしています。

編集完了したら、念のため設定ファイルにエラーが無いか確認。
# service httpd configtest

「Syntax OK」を表示されればOKなので、Apache再起動。
僕ずっと「/etc/init.d/httpd」使ってたけど、serviceコマンドなんてのがあったのね。
# service httpd restart

Subersionにアクセスしてみる

チェックアウト
「svn co」コマンドを使用。
下記の例ではrepo1リポジトリにuser1でアクセスしています。
$ svn co http://{ホスト or IPアドレス}/svn/repo1 --username user1
認証領域: Authorization Realm
'user1' のパスワード:
-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:

<http://192.168.xx.xx:xx> Authorization Realm

can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/home/omokuso/.subversion/servers'.
-----------------------------------------------------------------------
暗号化されていないパスワードを保存しますか (yes/no)? no
リビジョン 0 をチェックアウトしました。

最後の「暗号化されていないパスワードを保存しますか?」ですが、保存しておくともちろんそれ以降のアクセスの際に一々パスワード入力せずに済みます。が、それは当然セキュリティ的にはあまりよろしくありません。この辺はお好みで選択してください。

ところで、保存を拒否した場合、何と毎回「暗号化されていないパスワードを保存しますか?」と聞いてきやがります。このお節介を止めさせるのは以下の設定。
$ ~/.subversion/config
store-passwords = no
リソースを追加してみる
流れは
  1. チェックアウトしたディレクトリ配下にリソース新規作成
  2. リソースをバージョン管理に追加
  3. コミット
$ cd repo1
$ mkdir trunk branches tags
$ svn add trunk branches tags
$ svn ci -m "お馴染みのディレクトリ新規追加"

参考

LAMP of CakePHP on VMware:構築後のデザート~Samba導入

超豚足でお送りしている当シリーズ。CakePHPに関してはインストールと簡単な動作確認を行った以外は何も書かずに早8ヶ月。
月日の移ろいとは残酷なもので、この間の僕はお陰様でRubyやPythonにも携わる機会があり、正直PHPへの興味は薄れてきました…。前述の言語や、SIer時代にメインで使ってきたJavaと比べると、言語としての力の差(※1)やスタイルの一貫性(※2)とかでどうしても見劣りを感じてしまうんだよな。まぁそんな偉そうなこと言えるほど使い込んではないですけど。

まあそれでも需要が高い言語ではあるし、メモしておきたい事は溜まっているので、追々書いていきます。ちなみに今日もPHPではありません。今回はSambaの導入です。
尚、OSはCentOSです(5.4以降で確認済)。

試した環境

CentOS 5.4以降

本題に入るその前に、VMにLAN内の別マシンからアクセスするには

デフォルトの「NAT」だとVMを動かしているマシン上からしかアクセスできないので、同一ネットワーク内の他のマシンからもアクセスできるようにネットワークアダプタ設定を変更。
仮想マシン設定の「ハードウェア」→「ネットワーク アダプタ」の「ネットワーク接続」欄の「ブリッジ」を選択。

Sambaパッケージインストール

# yum install samba

Sambaアクセス用ユーザー作成

sambaユーザーを使用する例。
「pdbedit」コマンドはsambaパッケージと共にインストールされる。アクセス用パスワードを聞かれるので入力する。
# useradd samba
# passwd samba
# pdbedit -a samba
new password:
retype new password:

Samba設定

smb.confファイルを編集。最低限以下を設定しておけば大丈夫でしょう。
各設定項目の意味は何となく分かると思うので割愛。
# vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
hosts allow = 127. 192.168. 
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8

# 任意の名前をどうぞ
[share]
comment = "share"
path = /home/samba/share
pubilc = no
writable = yes

ファイアウォール設定

Sambaで使用するポートはUDP137・138とTCP139。
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
# /sbin/service iptables restart

デーモン起動

ついでに自動起動設定もやっちゃいましょう。
# /etc/init.d/smb start
# /sbin/chkconfig smb on

アクセス確認

Windowsのエクスプローラーのアドレスバーに「\\IPアドレス」と入力してアクセス。アカウント情報を入力すると、晴れて共有ディレクトリに入場できます。

ディレクトリ一覧は表示されるが「権限がありません」的なエラーが発生してディレクトリに潜れない場合
SELinuxを無効化してみてください。
setenforceコマンドで無効にし、再起動時に有効にならないよう設定ファイルを編集。
# setenforce 0
# vim /etc/sysconfig/selinux 
SELINUX=disabled

参考

関連エントリ


※1
仕事しててPHPでイマイチだなと思わざるをえなかった点は以下。
  • マルチスレッド機構
    Javaライクなやつ。curl_multiはもちろん知ってるけど、あれってスレッド間通信できます?
  • Selenium WebDriverで、Javaみたいにスタンドアロンで動かせない。
    PHPからはPHPエクステンション形式以外のCプログラム使えない事に起因?

※2
関数の引数の順番(in_array()では検索キーが第一引数だけどstrpos()では第二)とか、クラスや関数の名称がアンスコ区切りだったりキャメルケースだったり…
PEARの「HTTP_Request」とかの命名規則って何て言うの?

2011年12月11日日曜日

[Twitter]つぶやきのRSS取得方法

2012/10/27追記

今月の未明に「twitter.com」ドメインのRSSが取得できなくなりました。一応代替手段はあるようですが、それも来年3月までしか使えません。

※参考
TwitterのRSSが取得できないのでTwitter検索で代用する - そうだ?Blogを書こう?

追記前の本文ここから

TwitterのRSSと言えば、UI変更(URL内に「/#!/」が出現)に伴いページ上からリンクが消えてしまったというのは今更な話。
そしてGoogleリーダーの場合、旧URL(http://twitter.com/xxxx)をフィードとして追加すると、勝手にRSSのアドレス探して変換して登録してくれたのだけど、今日久しぶりに試みたら「検索キーワードと一致するフィードはありませんでした。」と表示されてしまった。これまたGoogleリーダーのUI変更によるものだろうか。

うわーマジかーどうすっぺーと一瞬嘆いた後、ふと画面を見ると「フィードファインダーに戻る」というリンクがある。クリックすると、「フィードをキーワードで検索」なるフォームがある画面に。どうも
「すべてのアイテム」ツリー内の「アイテムを参照」→中央ペイン「検索」タブ
という経路で辿り着けるらしい。

検索の得意なGoogle卿のことだから、もしかしたら…と、以下のようにTwitterのアカウント名@付けて検索してみた。ちなみにサンプルは堀江氏。

結果は以下。


ばっちり見つけてくれました。
情けない話ですが、こんな機能全然知らんかった。
というわけで、リハビリがてらの個人メモ簡単エントリでした。

後記

ていうか、あの堀江氏ですらGoogleリーダーでの購読数30って、やっぱりTwitterはRSSで読むもんじゃないんですかね。ちなみに僕は、ミック氏(@copinemickmack)や、分裂勘違い君劇場の@fromdusktildawn氏のように、くだらないつぶやきが殆どなくて濃いつぶやき連発する人の場合は、RSSで漏れなく拾うようにしてます。

それとアクティビティ機能ってまだ生きてるのね。あれ導入される前は、定期的にフォローされましたメールが飛んできてたけど、導入されてからこっち全然飛んでこない。まあ殆どが、フォロー返し目当ての見境無しフォローだったり企業アカウントだったりだけど、アクティビティ機能はそれらに対する抑止力となっているのだろうか。
ていうか、僕のつぶやきに魅力がない事がはっきり露呈…

2011年12月4日日曜日

[Blogger]Google+1ボタンの設置手順

師走だ。4ヶ月ぶりにこんにちは。まさか1シーズンほったらかすとは思わなんだ(てか雑記にいたっては2シーズン)。書きたい事はかなり溜まっている(主に技術メモだけど)ので、いい加減に再始動するぜ俺。

本日は、今さらですがGoogle+1ボタンを設置してみましたので、その手順を紹介します。昔書いたエントリのフォーマットを丸コピするという、リハビリがてらの簡単エントリっす。
ちなみに昔書いたエントリというのは以下です。

1.HTMLタグの作成

まず以下ページにアクセス。
お好みに合わせて情報を入力してHTMLコードを作成するわけですが、「+1 ボタンの対象とするURL」には以下の値を入力しておくと、後の作業が多少楽になります。
  • data:post.url
当ブログに設置しているボタンの場合、その他に初期設定から変更した項目は以下だけです。
  • Annotation:バルーン
  • 言語:日本語
上記設定を行った場合、以下のようなコードとなってる筈。
<!-- このタグを +1 ボタンを表示する場所に挿入してください -->
<g:plusone href="data:post.url"></g:plusone>

<!-- この render 呼び出しを適切な位置に挿入してください -->
<script type="text/javascript">
  window.___gcfg = {lang: 'ja'};

  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
</script>
続いて、記事毎にボタンを設置した際に、+1対象のURLに記事毎の値がセットされるように、タグを少し修正します。

2.「href」属性の左に「expr:」と記述

以下のように。
  • <g:plusone href="data:post.url"></g:plusone>
    →<g:plusone expr:href="data:post.url"></g:plusone>

3.完成したタグをテンプレートに記述

コメントに従って、それぞれのタグをテンプレートの適当な位置に挿入します。
「デザイン」→「HTMLの編集」のページで「ウィジェットのテンプレートを展開」にチェックを入れ、テンプレートファイルを表示し、お好みの場所に貼り付けてください。

<script>タグは、コメントにもあるようにどこでもいいです。僕は<body>タグ内のケツに挿入しました。

ボタンに変換されるのは<g:plusone>タグですので、これは表示したい位置に貼り付けてください。
記事本文の後ろとか、当ブログと同じく記事フッタ辺りが人気エリアですかね。
※尚、テンプレートに貼り付けて保存すると、属性値を囲っている「"」は「'」に変換されます。動作に支障は無いので気になさらぬよう(というかむしろ「'」じゃないと支障がある)。
(例)記事本文の後ろ
「<data:post.body/>」ってのが記事本文に置き換わる部分です。

(例)記事フッタ
「<div class='post-footer'>」で囲まれた箇所が記事フッタです。


右揃えにしたけりゃ

<div>タグで囲むなどしてください。


関連エントリ


2011年8月16日火曜日

LAMP of CakePHP on VMware:構築後のデザート~phpMyAdminインストール

MySQLサーバーをウェブブラウザから操作するGUIツールであるphpMyAdminのインストール手順を解説します。

ダウンロード

phpMyAdmin - Download
上記ページにも記載されていますが、バージョン3以降はPHP5.2以上である必要があるのでご注意を。

ドキュメントルートに配置

アーカイブを解凍後、Apacheの公開ディレクトリに配置。
$ cd /var/www/html 
$ tar xvzf phpMyAdmin-3.4.3.2-all-languages.tar.gz 
# mv phpMyAdmin-3.4.3.2-all-languages phpMyAdmin 

設定ファイル作成

ルートディレクトリ直下に設定ファイルの雛形「config.sample.inc.php」があるので、「config.inc.php」という名前にリネーム(orコピー)。
# cd phpMyAdmin 
# cp config.sample.inc.php config.inc.php 

つづいて編集。最低限以下の設定だけでOK。
$cfg['blowfish_secret'] = '(ランダムな文字列)'

php-mcryptパッケージインストール

phpMyAdminの認証時に認証情報の暗号化を行うためかどうか知らんが、これインストールしておかないと警告が表示される。
ここで、CentOSのバージョン、PHPのバージョンにより運命が分かれます。
CentOS 5.xで、phpパッケージの場合
以下コマンドで瞬殺です。
# yum install php-mcrypt  
php53パッケージ OR CentOS 6.0の場合
残念ながら、現時点ではyumのパッケージは提供されていませんので、RPMパッケージを使用するか、ソースからコンパイルするしかありません。

ここではCentOS 6.0でRPMパッケージを使った手順を説明します。CentOS 5.6でphp53パッケージの場合の手順は調べていませんが、流れは同じようなもんだと思います。
必要なパッケージは以下。
  • libmcrypt
  • php-mcrypt
まずは以下サイトでRPMパッケージを検索。
CentOS 6.0用のがいつくか見つかる。僕がチョイスしたのは以下。
libmcrypt-develも必要かどうか分からんが、とりあえず除外した。
パッケージのURLは、上記ページから「Download Mirrors」→「select mirror」と辿ったページの「binary package」のリンクがそれ。
wgetで取得してインストールし、Apache再起動。
# wget http://download.fedora.redhat.com/pub/epel/6/i386/libmcrypt-2.5.8-9.el6.i686.rpm 
# wget http://download.fedora.redhat.com/pub/epel/6/i386/php-mcrypt-5.3.2-3.el6.i686.rpm 
# rpm -ivh libmcrypt-2.5.8-9.el6.i686.rpm 
# rpm -ivh php-mcrypt-5.3.2-3.el6.i686.rpm 
# /etc/init.d/httpd restart 

以上でOK!
phpMyAdminの設定ファイルで特に言語や文字コードの変更はしなかったけど、日本語データは問題無く扱えました。

※参考

関連エントリ



2011年8月15日月曜日

LAMP of CakePHP on VMware:MySQL追加設定~日本語設定、DB・ユーザー作成など

さて、LAMPほぼ童貞の男(当時)がお送りする、VMware Player上のCakePHP自習環境構築シリーズ。
初稿は今年の4月、「MySQLのDB・ユーザー作成やらは追々書いていきます」などとぬかしてから早4ヶ月…ようやくここまで辿り着きましたよ。

mysql_secure_installationの実行

まずはMySQLをセキュアにするために「mysql_secure_installation」を実行します。
# mysql_secure_installation

以下設定を行うかどうか尋ねてくるので、適宜設定してください。
基本、全てYesにしておいた方が良いでしょう。
  • rootユーザーのパスワード設定
  • 匿名ユーザーの削除
  • リモートからのrootユーザーログイン禁止設定
  • testデータベースの削除
  • 権限テーブルのリロード ※ここまでの権限に関する設定の適用

文字コード設定

我らが日本語を使用するために、DBの文字コードをUTF-8に設定。
/etc/my.cnfを開き、以下設定を追加。
[mysqld]
# MySQLサーバー用の文字コード設定
character-set-server=utf8

[client]
# クライアント用の文字コード設定
default-character-set=utf8

設定済んだら再起動。
# /etc/init.d/mysqld restart

MySQLにコマンドラインから接続

rootユーザーで接続する場合は以下コマンド。
「-u」オプションでユーザーを指定します。
「-p」オプションはパスワードを設定している場合に必要。よってパスワード未設定の場合は不要ですが、パスワードは設定しておくべきです。特にrootなら尚更。
$ mysql -u root -p
Enter password:
Welcome…
…
mysql>

ログイン済んだら上記のように「mysql>」とのプロンプトが表示されます。
ここで先程の文字コード設定がちゃんと適用されているか確認してみましょう。
以下コマンドを実行してみてください。
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

上記のような実行結果が得られればOKです。

ユーザー作成

  • ユーザー名:user
  • パスワード:userpass
  • 接続元ホスト:localhost
上記のユーザーを作成するには以下のコマンドを実行。
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'userpass';

ここでユーザー情報を確認してみましょう。
ユーザー情報はmysqlデータベースのuserテーブルに格納されています。
mysql > use mysql;
mysql > SELECT user, password, host FROM user;
+------+-------------------------------------------+--------------+
| user | password                                  | host         |
+------+-------------------------------------------+--------------+
| root | *…| localhost    |
| root | *… | 127.0.0.1    |
| user | *… | localhost    |
+------+-------------------------------------------+--------------+
補足1:ユーザーの識別単位
MySQLのユーザーは「ユーザー名+接続元ホスト」の単位がキーです。
つまり、「'user'@'localhost'」と「'user'@'192.168.1.1'」は別人です。
試しにホスト違いの同名ユーザーを作成してからuserテーブルを覗いてみてください。
補足2:匿名ユーザーが残っている場合はホスト名を必ず指定すること
CREATE USER文はホスト名の省略が可能。
mysql> CREATE USER 'test' IDENTIFIED BY 'testpass';

この場合、ホストには「%」(全てのホストから接続可能)が設定される。
この時、もし匿名ユーザー(userテーブルのuser列が空白)が存在する場合、ユーザーの照合順序の関係で、testユーザーでアクセスしても匿名ユーザーとして扱われてしまいます。よって、認証時のパスワードはtestユーザーのものではなく、匿名ユーザーのものを使用しないといけません。
この事知らないと、「何で認証通らないんだ!?」と不毛な時間を浪費することになりますので、注意してください。ていうかそもそも匿名ユーザーなんて残しておくべきではないので、前述のmysql_secure_installationで葬ってあげましょう。

※参考
公式マニュアル:接続確認

データベース作成

文法の詳細はここでは割愛。日本語環境のDBなら以下の設定が一般的です。
mysql> CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

作ったDBは以下で確認できます。
mysql> show databases;
テーブル作成
ここも文法の詳細は割愛。日本語文字列扱う場合の一般的な書き方。
ちなみにテーブル定義はCakePHPの規約に準じたものです。
mysql> use sample;
mysql> CREATE TABLE sample_tables (
->  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
->  note TEXT NOT NULL,
->  created DATETIME DEFAULT NULL,
->  modified DATETIME DEFAULT NULL
-> )
-> engine=innodb,
-> charset=utf8,
-> collate=utf8_general_ci
-> ;

作ったテーブルは以下で確認できます。
mysql> show tables;
mysql> show columns from sample_tables;

ユーザーに権限付与

ユーザーを作成しただけでは、データベースやテーブルに対する操作は出来ません。適切に権限を設定する必要があります。
権限付与にはGRANT文を使用。文法詳細は割愛。
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON sampledb.* TO 'user'@'localhost';
mysql> FLUSH PRIVILEGES;
権限を削除するには
REVOKE~FROM文を使用。
mysql> REVOKE SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON sampledb.* FROM 'user'@'localhost';
mysql> FLUSH PRIVILEGES;

関連エントリ

2011年8月14日日曜日

LAMP of CakePHP on VMware:構築後のデザート~NTP設定

今回はNTP設定の手順を説明します。
要するにOSの時刻の自動調整設定のことで、まあ電波時計みたいなもんです。

NTPインストール

恐らくデフォルトでインストール済だと思われますが。
# yum install ntp

自動起動設定

# chkconfig ntpd on
エラー発生したら、この記事参考にして「ntpd」を追加してから再度試してください。

設定ファイルにNTPサーバー追加

/etc/ntp.confをオープン。「server」で始まる行がNTPサーバーの設定。
既存の設定を削除orコメントアウトし、以下の3行を追加。
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
※上記NTPサーバーの情報元

ntpd起動

起動済の場合はrestart。ちなみにすぐに時刻同期されるわけではありません。
# /etc/init.d/ntpd start

すぐに同期したければ

以下のようにすれば手動で同期できます。
# ntpdate NTPサーバーアドレス

関連エントリ



LAMP of CakePHP on VMware:構築後のデザート~Apache, MySQL自動起動設定

さて、ここまでVMware Player上のCentOS 5.5・6.0でCakePHPを最低限動作させる環境構築手順を説明してきました。

上記手順の中で何度かOSを再起動する機会があったと思いますが、その度に一々ApacheやMySQLを起動し直さなくてはならない事にイラついた方もいると思います。
ここではそれらがOS起動時に自動起動するための設定手順を説明します。

その前にまず、起動しているかどうかの確認方法

以下の「プロセス名」を置き換えてください。
Apacheは「httpd」、MySQLなら「mysqld」です。
$ ps aux | grep プロセス名

chkconfigコマンド

Red Hat系Linuxの場合、chkconfigという便利なコマンドがありますので、それを利用します。
※よってUbuntuなどDebian系の場合は他をあたってください。
ちなみにrootユーザーで実行します。
起動スクリプトが登録済みかどうかの確認
下記のように「on」「off」と表示されれば既に登録済みです。
# chkconfig --list httpd
httpd           0:off 1:off 2:off 3:off 4:off 5:off 6:off

# chkconfig --list mysqld
mysqld          0:off 1:off 2:off 3:off 4:off 5:off 6:off
未登録だった場合
下記のように「--add」オプションを指定して追加してください。
# chkconfig --add httpd
# chkconfig --add mysqld
自動起動設定ON
以下コマンドを実行するだけです。
# chkconfig httpd on
# chkconfig mysqld on
「chkconfig --list …」で再度確認してみてください。2~5の値が「on」に変更されていればOKです。

関連エントリ



2011年8月7日日曜日

LAMP of CakePHP on VMware:構築手順メモ外伝 ~CentOS 6.0環境構築

ごぶサタデー…のつもりだったが、後述のインストール作業の見通しが甘くて日付を跨いでしまった。
ところで更新が滞ると記事コメント頂けるという法則がこの宇宙には存在しているようです。

技術メモ・ネタが結構溜まってきているので(えと、レベルは高くないです)、いい加減そろそろ消化していかないとなと思って臨んだサタデー、CentOS 6.0が先月リリースされていた事を知りました。
うーん、情報収集は怠っていなかったつもりだけどな…このニュース、認知度ありました?

まあ何はともあれ、せっかくなんでVMware Player上に仮想環境構築です。
まずは以前に自分で書いた構築手順(簡易インストール)を踏んでみました。若干の手順の差異はあれど、OSの日本語化設定まではすんなり済みましたが、日本語入力メソッド(前述の記事における『SCIM+Anthy』)のインストールで躓いてしまい、日本語の入力ができない状態で通行止めに…

なので今回は簡易インストールではなく、ISOイメージファイルからブートすることでインストールしました。その手順をここに記します。
ちなみに2011年8月7日時点で、当記事の手順でインストールされるAMPのバージョンは以下の通り。PHP、5.3だー!
  • A:2.2.15
  • M:5.1.52
  • P:5.3.2

ISOイメージのダウンロード

わざわざ書くことでもないですが。
以下ページに日本のミラーサイトへのリンクが記載されているので、お好みのサイトからダウンロードしてください。ちなみにISOイメージは「6.0/isos」ディレクトリにあります。

VMware Player : 空の仮想マシンを作成

VMware Playerを起動し、ホーム画面の「新規仮想マシンの作成」を選択。
「後でOSをインストール」を選択し、次画面で「Linux」「CentOS」を選択し、後は簡易インストールと同じ流れ。
よく分からなければ、例によって画像付きで解説してくださっている以下ブログを参照してください。
尚、今回は空仮想マシン作成なので、この時点でのCentOSインストールは当然開始されません。

VMware Player : CentOSインストール

作成した空仮想マシンを選択して
「仮想マシン設定の編集」→「ハードウェア」→「CD/DVD(IDE)」と選択していき、
「接続」ペインの「ISOイメージファイルを使用する」欄に、ダウンロードしたISOイメージのパスを入力。
この状態で「仮想マシンの再生」を行います。

後は、画像付きで解説してくださっている以下ブログを参照してください。
僕はネットワーク設定まで全く同じ手順を踏ませていただきました。
ちなみに上記記事の(1)と(2)の間に、もしかしたらディスクチェックを行うかどうかの画面が表示されるかもしれません。手っ取り早く進めたければスキップしちゃってください。

VMware Toolsを自分でインストール

今回は簡易インストールではない手順をとったので、VMware Tools(※1)は自分でインストールする必要があります。

まずは仮想OSにログインした状態で、VMwareウィンドウ下部の「ツールのインストール」を押下。

インストーラのアーカイブが保存された仮想CDドライブがマウントされます。

次にターミナルを起動し、mountコマンドでアーカイブのパスを確認。
$ mount
…
/dev/sr0 on /media/VMWare Tools …

僕の場合は上記のパスでした。
続いてアーカイブを展開し、rootユーザーになってからインストールスクリプトを実行します。
$ tar xvzf /media/VMware\ Tools/VMwareTools-8.4.6-385535.tar.gz
$ cd vmware-tools-distrib
$ su
# ./vmware-install.pl

インストールスクリプトでは、ディレクトリなどいくつか設定を問われますが、全て何も入力せずEnter(その場合[]内の値が使用される)。

完了したら一旦シャットダウンし、仮想マシン設定の「CD/DVD(IDE)」の設定を元に(「物理ドライブを使用する(自動検出)」)戻し、再度起動してみます。
ゲスト・ホストOS間でクリップボードの共有、マウスカーソルのシームレスな行き来、VMware Playerのウィンドウ最大化した際にゲストOSの描画エリアも最大化…などが実現できていればOKです。

あと、せっかくなんでこのタイミングでパッケージを更新しておくといいかもしれません。
「システム」→「管理」→「ソフトウェア更新」で更新できます。ちなみに僕の場合、見つかった更新の数は約170個で、更新完了するまで結構時間かかりました。

Apache インストール

恐らく既にインストールされていると思います。
もしインストールされていなければ、以下コマンドでインストール。
# yum install httpd

そして起動。
# /etc/init.d/httpd start
ファイアウォール設定
「システム」→「管理」→「ファイアーウォール」
「信頼したサービス」で表示されるリスト内の「WWW(HTTP)」にチェックを入れ、ツールバーの「適用」押下。
※恐らく「SSH」はデフォルトでチェックが入っていると思いますが、チェックされてなければ入れといてください。

MySQL インストール

# yum install mysql-server

そして起動。
# /etc/init.d/mysqld start

DBやユーザーの作成に関しては、今回も割愛。

PHP インストール

MySQL接続用のパッケージも一緒にインストール。
# yum install php php-mysql

インストール済んだらApache再起動。
# /etc/init.d/httpd restart

ApacheやPHPとかの動作確認やらCakePHPの導入やら

以前に僕が書いた以下記事を参照してください。
記事の環境はバージョン5.5ですが、やることは変わりません。

その他の関連エントリ


※1
ゲスト・ホストOS間でクリップボードの共有やマウスカーソルのシームレスな行き来を実現したり、VMware Playerのウィンドウ最大化した際にゲストOSの描画エリアも最大化したりetcetcと、痒いところに手を届かせてくれるツール。


2011年5月8日日曜日

僕歪黄金号~家計が火の鳥

僕は名古屋出身だ。こんな事を言うと、人は決まって
「味噌カツとかひつまぶしとか、名物の美味しいお店教えて!」
と言う。僕は決まって
「食ったことないから知らん!」
と言う。
名古屋出身者が全員それらを食していると思うなよ!広島出身者は全員カープファンですか!?

ちなみに僕が名古屋にいたのは高校時代、つまり毛が生えているという点以外はまだまだガキの時代。「今日の晩飯、味噌カツ食いに行こうぜ!」なんて大人の発想など出来るはずもない。ていうか金が無い。味噌カツ1回食うよりも、『寿がきや(※1)』や『汽笛亭』(※2)に3回行く方を選ぶ時代。いや、時代のせいじゃない。そもそも食に対するこだわりが無かった。去年、前の会社を辞めるまでは…

…何か意味深な書き方になってしまったが、何てことはない、昨年秋頃から「美味いもの食っていこう」と決心したというだけの話。無職期間ということで当然無収入なので自炊をよく行ったのだが、そこで自分の料理の不味いこと不味いこと。無職だから睡眠は十分取れてるのに、食欲どんどん減退したっつーの。もう少し時間・手間・コストをかければ美味しくなるのだろうけど、それなら外で『プロ』の作品を嗜むのとそんなにコスト変わらないんじゃないかと(※3)。で、どうせなら美味いものを…と、まあそんなきっかけです。

そんなこんなで、今年の黄金週間は、我が大名古屋帝国での名物食べ歩きを計画していたのだが…鼻づまりが一向に解消しない(遂にヒノキにも負けた…)のと、手塚治虫の名作『火の鳥』のオリジナル版復刻大全集の購入(98700円!)で家計が火の鳥なので断念。「将来、孫の顔を見たけりゃ奢れ!」と親を脅すという手法もあったが、『火の鳥』で扱うテーマの一つである『因果応報』が怖くて諦める。

結局、日を跨ぐようなイベントや遠出は皆無の、ただ「日曜日が一杯並んでる!」というだけの日々を送ってました。いわゆる巣ごもりです。そして巣ごもりと言えばTSUTAYA(もういいっつーの)。

唯一「ゴールデンウィークだな」と感じたのは、「せっかく日曜日が一杯並んでいるのだから、何か一つくらいゴールデンな事しときたいなー」と入浴中にぼんやりと考えながら、自分のゴールデンボールをぼんやりと眺めてみたら、左右の大きさが全然違う事が判明して戦慄したことくらい。
下半身の病気は嫌だ!もの凄い痛そうだ!怖い!

※1
B級ラーメンの帝王

※2
JR東海の駅構内のきしめん屋。でも現在は名古屋市内の駅の店舗は全てなくなり、三重県の2駅にしか存在してないらしい…

※3
家族がいれば安く済むだろうけど。
ちなみに料理は別に嫌いではないです。まあ一番の理由は時間ですね。仕事で日々劣等感を感じているので、まずは勉強しなきゃ…


Amazonでは全巻セットは扱ってない模様。
ちなみに、正直『エジプト・ギリシャ・ローマ編』はそんなにいらないけどね…



2011年5月7日土曜日

TSUTAYA DISCASのログイン画面が非SSLなのが不安なのでGreasemonkeyスクリプト作ってみた

ゴールデンウィークだ。
ゴールデンウィークといったら連休。連休といったら巣ごもり。巣ごもりといったらDVD鑑賞。不健康ですかそうですか。ていうか出だしの一言、終盤のこの時期に言う台詞じゃないだろうが、俺。

DVD鑑賞といったらレンタル。レンタルといったらTSUTAYA。そしてそのネットレンタルサービスであるTSUTAYA DISCAS。近くに店舗がない、あっても作品数が少ない、素早く作品探したい。店往復の時間が勿体ない、引きこもりだetcetc…といった方々にとって非常にありがたいネットレンタルサービスの一つであるTSUTAYA DISCAS。長らく松本人志(と他数名)の作品以外にはあまり手を出す気になれないという感覚の持ち主である僕は、DISCASはおろか普通に店舗を利用する事も殆どなく、昨年の退職で時間ができたの機に利用し始めたばかりのペーペーです。

そんなTSUTAYA DISCAS、使い始めてすぐにサイトリニューアルが行われた(昨年10月くらいだっけか)のですが、リニューアル後のログイン画面が何とびっくり非SSL。要は暗号化されていない。画面上部(下部にもある)の「ログイン」リンクから遷移し、ページのアドレスを確認してみてください。
以下、Chromeでアクセスした画面。


Chromeの場合、非SSLページのパスワード欄はご覧の通り赤色になるみたい(危険を促している?)なので、非常に分かり易いです。またアドレスが「www」で始まっている事からも非SSLであることは明らかですね(アドレスが「http://」で始まる場合、Chromeはそこ省略される)。

何てことだ。Macにも普通にウイルス対策ソフト導入したりVista以降のWindowsに搭載されているUACに嫌悪感無いという、サイバーテロビビリな僕にとって、これは生きた心地がしない。今までパスワード平文(未暗号化の状態)で送信されていたのか!?

で、調べてみたのですが、大丈夫だったみたいです。ページが非SSLでも、情報の送信先アドレスがSSLページであれば、ちゃんと暗号化されるらしい。情報元は以下。
ログイン画面のページソースを表示して、ログインフォームのaction属性見てみたら、「https://~」となってました。「送信先がSSLであれば暗号化される」ってのは知らんかった。へーそうなんだ。でも、本当に大丈夫なのか?上記ページにはさらに以下の情報が。

SSLの最初の暗号キーの交換の部分のパケットをさぐられると暗号を解除できてしまうので、一度httpsセッションに入ってからデータを送付した方がより安全なんですよね・・・。

暗号化というのは、要は元のデータをある手順で加工するということ(簡単な例だと「○番目と□番目の文字入れ替える」とか)。『暗号キー』とは要するにこの手順のようなもの。データが暗号化されて訳分からん状態になっていたところで、手順が分かれば逆算できてしまいます。ってことで、ログインページが非SSLというのはやっぱり危険。
※この辺、私の理解が間違っていたらご指摘ください。

さて、どうすればいいのだろうか。運営サイドに連絡するのはもちろんとして、利用者側で対応できることは何か無いのか?ありました。
ログインページのアドレスの「http://」を「https://」に変える。これだけです(※1)。以下、Chromeでやってみた画面。

パスワード欄は赤くならず、アドレスも「https://」から始まっていますね。これで前述の『暗号キーの交換の部分のパケット』自体が暗号化されるので安心(僕の理解、あってます?)。

で、ここからが本題。手入力面倒なので、自動遷移するグリモンスクリプト作ってみた

ま、「http://~」のログイン画面にきたら「https://~」のページにジャンプするだけの、1行で済むスクリプトですが。グリモンのスクリプト自作するの初めてだったので、備忘も兼ねて手順をご紹介します。
ちなみに手順はFirefox用。ここまでChromeでの画面キャプチャ載せてきてアレですが、Chromeの場合も手順は殆ど変わらんでしょう。
1.Greasemonkeyのインストール
まずはこれやんないと話にならないよね。
2.ユーザースクリプト新規作成
インストール済んだら、Firefoxのどこかに猿のボタンが出現する筈です。
『▼』クリックして『新規ユーザースクリプト』を選択。『実行するページ』欄に、問題となっているログインページのURLを入力、それ以外はお好みの値を入力してください。ただ『名前空間』にはなるべく「ユニーク(一意)になりそうな値」を入力するように(この辺の解説は割愛させて!)。


『説明』欄とかに全角文字入力していたら、多分エラーダイアログが表示されると思いますが、続行してください。スクリプトファイルがエディタで表示され、先程のダイアログで全角文字を入力していた場合、一部が文字化けしていると思います。気になるなら化けた部分を入力し直して、ファイルを文字コード『UTF-8(BOM無し)』で保存しなおしてください。
3.コーディング
以下の文章をファイル末尾に追記。
alert("SSLログインページへリダイレクトします!");
location.replace("https://www.discas.net/netdvd/smtN.do");
処理の肝は2行目です。
1行目は情報ダイアログ表示する命令なので、別に無くても構いません。鬱陶しかったら消してください。ちなみに全角文字を使用する場合は、ファイルの文字コードは前述した『UTF-8(BOM無し)』にしてね。

なお、ログインページのアドレスが変わった場合は、それに合わせてアドレス変える必要があります(「@include」の右のアドレス(実行するページ)もお忘れなく)。

有名サービスだから、結構指摘されているのかと思いきや…

全然見当たらないですね。僕の杞憂なのか、それとも僕は何か間違えまくっているのか?「ツタヤディスカス 非SSL」で検索して「いきなり見つけた!」と思ったら、自分のつぶやきだった…。

運営サイドの対応としては、「ログイン」リンクのリンク先を「https://~」に変更するだけで済むような気がするのだが…システム開発を外注してたりして、結構面倒なんですかね。TOPページアドレスにクエリパラメータ(『?pT=0』)がついてるのは何かダサいし(※2)、検索機能は使いづらい(「作品名+出演者」とか「アーティスト名+曲名」といった複合検索ができない)。取り扱い作品数は圧倒的でせっかく業界1位(だよね?)なのに、これでは勿体ない、というか余所に流れちゃうぞ。
どうした、TSUTAYA。

※1
ちなみにGoogleの各種サービスもこんな感じでSSL通信化できますよね。

※2
ていうかSEOの観点では、こういうURLは確か良くないよね。canonical属性も使ってないみたいだし。

2011年5月5日木曜日

おもくそクエストⅦ 停電したし

この頃確か1回停電があったんですよ。サブタイトルがもう全く転職と関係なくなってきたということは、終わりが近づいてきたということです。
おもくその転職活動冒険譚『おもくそクエスト』、第(7 - 2)回。
※第1回を「Ⅲ」にしちゃったからね

2010年11月 第3週 ~ 歴史は変えようがない

さて、前回の冒険でお伝えしていたが、この週は第一志望の最終面接があった。結果は…まあ前回のサブタイトルや結びを見れば明らかですが、玉砕しました。。不通過の理由は、
「その会社の運営サービスで扱っているもの・業界に対する興味が感じられない」
という、根本的な部分に対するもの。…流石、鋭い眼力をお持ちだ。ただ正直、興味が無いということはなく(というか誰しも興味を持つような分野)、行動に移せていないだけだったのだが…「『できる』『できない』じゃなくて『やる』『やらない』」なんて言われるように、行動してないなら「ない」と同義だから仕方がない。

最初の3つの質問で早々に見切りをつけられたのか、面接官5人もいたのに約20分で終了。事前に練っていた運営サービスの改善案やら企画案、競合に勝つための方策をアピールしきる事はできなかった…2週ちょっとで転職活動終焉の妄想は、妄想のまま終わった。

まあこの会社が全てではないし、転職活動なんてこんなものだろと気を取り直し、引き続き他社の選考を進めていった。この週は新たに5社の一次面接を受けた。結果は…先週とは打って変わり、通過は1社…。ちなみにその通った会社はLAMP環境ではなくJava系。結局、LAMP系の会社は全滅だった。どの面接もうまくいって手応えを感じていたのにもかかわらず…不通過の理由はどこも
「向上心があり、人柄が良く、コミュニケーション能力も問題無い。しかし、総合的に比較検討させて頂いた結果…」
というものだった。十中八九、職務経歴(LAMP系の実務経験が無い)が足かせとなっているのだろう。そりゃまあいくら応募資格は満たしていたとはいえ、LAMP系の実務経験ある人間の方がいいよね。上記理由はお愛想の可能性もあるけど、もし真意だとしたら…どうしようもないじゃないか。経歴なんて変えようがないもの…

2010年11月 第4週 ~ 冒険の終わり

この週開始時点での状況は以下の通りだった。
  • 一次面接予定:1
  • 二次面接予定:1
  • 最終面接予定:1
第2週に通過した1社が最終で、第3週で唯一通過した1社が二次。ちなみに第2週に通過した3社の内の残り1社は、技術スキルが圧倒的に足りない事を認識していたので辞退した(会社様には申し訳ないですが、面接慣れ用に応募してました…)。

僕は参っていた。希望していた「マイナーでない技術を使用した自社サービス運営」の会社が全滅してしまったからだ。上記の3社中、2社はそもそも自社サービス運営ではなく受託開発or派遣。その上1社はJava系で自社の独自パッケージ利用が前提。もう1社はLAMP系なのだが、というかLAMP系に限らずいろいろな案件扱っているのだが…って、これどう見ても派遣だろ、ってな会社。しかも会社名で検索すると「ブラック」の噂あり。そう言えばこの会社の一次面接、保有スキルの確認が殆で『面接』というよりも『面談』という感じだった(深く突っ込まれることも無かったし)。というか、この会社を紹介してきた所とは別のエージェントに聞いてみたところ、「いい噂は聞かない」とのお返事。確定じゃねぇか…

残った1社は唯一自社サービス運営してるけど、利用技術がJava系でフレームワークは独自のものを使っているとのこと。そのサービスと会社はかなり有名で、やり甲斐はありそうだけど…独自技術はもう嫌だ。それで今苦労しているようなもんだから…

この週の結果は…唯一の自社サービス運営会社は落選。Java系独自パッケージの会社は一次面接通過し、唯一のLAMP系で人売り臭がする会社からは内定いただいた。

これまでの経緯を鑑みると、これ以上活動を続けても希望の「マイナーでない技術を使用した自社サービス運営」につける気がしない。僕は剣を大地に置いた。


次回、完結編。転職活動の総括、感想と現状報告を行います。
果たして噂通り会社は黒かったのだろうか?

[Blogger]Facebookいいねボタンの設置手順

同じようなエントリ続いているので挨拶は省エネでお送りします

黄金週間巣ごもり男日本人気3大ソーシャルサービスボタン設置記録第3回。
完成品画像以下。実物記事フッタ(投稿日時コメント)参照。
中国人か。今回はFacebookの「いいね!」ボタンです。
それ以外のボタンの設置手順は以下参照。

1.HTMLタグの作成

まず以下ページにアクセス。
お好みに合わせて情報を入力してHTMLコードを作成するわけですが、「URL to Like」には以下の値を入力しておくと、後の作業が多少楽になります。
  • URL to Like:data:post.url
ちなみに当ブログに設置しているいいねボタンの他の設定は以下の通り。
  • Send Button:※チェック外す
  • Layout Style:button_count
  • Width:110
  • Show Faces:※チェック外す
  • Verb to display:like
  • Color Scheme:light
  • Font:※未選択
それぞれの設定項目の意味とか詳細は、申し訳ないですが割愛させていただきます。でもまあ何となく分かると思いますが。

入力し終わったら「Get Code」ボタンを押下して「iframe」のコードをコピーしてください。
※XFBMLは他にいろいろと手間がかかるので、手軽に導入したい場合はお薦めしません
上記設定を行った場合、以下のようなコードとなる筈。

続いて、記事毎にボタンを設置した際に、いいね対象のURLに記事毎の値がセットされるように、タグを少し修正します。

2.「src」属性の左に「expr:」と記述

以下のように。
  • src="http://www.facebook.com…
    expr:src="http://www.facebook.com…

3.変数「data:post.url」を「"」の外に出す

この「変数」の部分が記事毎のURLに置き換わります。ただし「"」で囲むとそのまま「data:post.url」と出力されてしまうので、「'」で囲むようにします。またそれ以外の部分(http://www.facebook…」や「amp;send=false…」)はこのまま出力する必要があるので、そこの部分は「"」で囲みます。
相変わらず文章による説明だとややこしいので、百聞は一見にしかず。
  • expr:src="http://www.facebook.com/plugins/like.php?href=data%3Apost.url&amp;send=false…(中略)…height=21"

    expr:src='"http://www.facebook.com/plugins/like.php?href=" + data:post.url + "amp;send=false…(中略)…height=21"'

4.完成したタグをテンプレートに記述

ここまでの手順でタグは以下のようになっている筈です。

「デザイン」→「HTMLの編集」のページで「ウィジェットのテンプレートを展開」にチェックを入れ、テンプレートファイルを表示し、お好みの場所に貼り付けてください。
記事本文の後ろとか、当ブログと同じく記事フッタ辺りが人気エリアですかね。
(例)記事本文の後ろ
「<data:post.body/>」ってのが記事本文に置き換わる部分です。

(例)記事フッタ
「<div class='post-footer'>」で囲まれた箇所が記事フッタです。


右揃えにしたけりゃ

<div>タグで囲むなどしてください。

関連エントリ

[Blogger]Twitterツイートボタンの設置手順

黄金週間、訳あって巣ごもり暮らしを送っている男がお送りする、日本で人気の3大ソーシャルサービスのボタン設置記録。
第2回はTwitterのツイートボタンです。
それ以外のボタンの設置手順は以下参照。
ちなみに完成品の画像は以下。実物は記事フッタ(投稿日時とかコメントとか)を参照。

1.HTMLタグの作成

まず以下ページにアクセス。
「①ボタンを選択してください…」の部分でいろいろと入力してHTMLコードを作成しますが、「ツイート内テキスト」「URL」には以下の値を入力してください。
  • ツイート内テキスト:data:post.title
  • URL:data:post.url
当ブログと同じく「ボタン」で『水平方向にカウント数を表示』を選択した場合、以下のようなコードとなる筈。
<a
 href="http://twitter.com/share"
 class="twitter-share-button"
 data-url="data:post.url"
 data-text="data:post.title"
 data-count="horizontal"
 data-lang="ja">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
はてなブックマークの時と同じく、このままだとタイトル・URLは上記の値で固定となってしまい、記事毎の値が設定されません。よって、記事毎の値がセットされるように、タグを少し修正する必要があります。

2.「data-url」「data-text」属性の左に「expr:」と記述

以下のように。
  • data-url="data:post.url"
    expr:data-url="data:post.url"
  • data-text="data:post.title"
    expr:data-text="data:post.title"

3.完成したタグをテンプレートに記述

ここまでの手順でタグは以下のようになっている筈です。
<a
 href="http://twitter.com/share"
 class="twitter-share-button"
 expr:data-url="data:post.url"
 expr:data-text="data:post.title"
 data-count="horizontal"
 data-lang="ja">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
「デザイン」→「HTMLの編集」のページで「ウィジェットのテンプレートを展開」にチェックを入れ、テンプレートファイルを表示し、お好みの場所に貼り付けてください。
記事本文の後ろとか、当ブログと同じく記事フッタ辺りがあるあるか。
※尚、テンプレートに貼り付けて保存すると、属性値を囲っている「"」は「'」に変換されます。動作に支障は無いので気になさらぬよう(というかむしろ「'」じゃないと支障がある)。
(例)記事本文の後ろ
「<data:post.body/>」ってのが記事本文に置き換わる部分です。

(例)記事フッタ
「<div class='post-footer'>」で囲まれた箇所が記事フッタです。



右揃えにしたけりゃ

<div>タグで囲むなどしてください。

関連エントリ

[Blogger]はてなブックマークボタンの設置手順

追記:2012/3/13 トラッキング問題終結?

はてなブックマークボタンから収集した行動情報の第三者提供をやめます - はてなの日記
ってことで次の段落消しました。

追記:2012/3/12 トラッキング問題への対応

遅ればせながら、当ブログのはてブボタンを行動情報取得しないオプトアウト版に差し替えました。
しっかし、どうせオプトアウト版っての作るなら、従来のものは従来のまま(行動情報取得しない)にしといて、トラッキング機能付き版の方を「新たに追加しました」ってすべきだよな。ここにも資本原理主義者が…


本題

訳あって巣ごもり暮らしを送っている黄金週間、日本で人気の3大ソーシャルサービスのボタンを設置してみました。以下が完成品の画像です(何故か実物は記事本文に設置できなかったので。凡ミスだと思うけど面倒だから究明は放置)。
ちなみに実物は記事フッタ(投稿日時とかコメントとか)エリアにいます。

設置手順の解説などは、既に先人達により溢れかえっていますが、自分なりに歩んだ設置手順や補足などをここに記します。
まずは「はてなブックマーク」ボタンです。
それ以外のボタンの設置手順は以下参照。

1.HTMLタグの作成

まず以下ページにアクセス。
  • はてなブックマークボタン
    ※2012/3/12追記:上記は行動情報を取得しないオプトアウト版です。
    従来のボタン作成ページのURLは以下(リンクはしません)。
    http://b.hatena.ne.jp/guide/bbutton

ページの手順に従ってHTMLコードを作成するわけですが、「①ページ情報」には以下の値を入力しておくと、後の作業が多少楽になります。
  • URL:data:post.url
  • タイトル:data:post.title
「②タイプ」で『スタンダード』を選択した場合、以下のようなコードとなる筈。
<a
 href="http://b.hatena.ne.jp/entry/data:post.url"
 class="hatena-bookmark-button"
 data-hatena-bookmark-title="data:post.title"
 data-hatena-bookmark-layout="standard"
 title="このエントリーをはてなブックマークに追加">
<img
 src="http://b.st-hatena.com/images/entry-button/button-only.gif"
 alt="このエントリーをはてなブックマークに追加"
 width="20"
 height="20"
 style="border: none;" />
</a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
このままだと、ブクマ対象のURL・タイトルは固定値となってしまい、一つ一つの記事にボタン配置したところで、その記事をブクマするということができません。(というか上記入力値だとそもそもURLとして不正だけど)。なので、URL・タイトルに記事毎の値がセットされるように、タグを少し修正します。

2.「href」「data-hatena-bookmark-title」属性の左に「expr:」と記述

以下のように。
  • href="http://b.hatena.ne.jp/entry/data:post.url"
    expr:href="http://b.hatena.ne.jp/entry/data:post.url"
  • data-hatena-bookmark-title="data:post.title"
    expr:data-hatena-bookmark-title="data:post.title"

3.変数「data:post.url」「data:post.title」を「"」の外に出す

記事にアクセスした際、この「変数」の部分が記事毎のURL・タイトルに置き換わります。ただし、「"」で囲むとそのまま「data:post.url」「data:post.title」と出力されてしまうので、「'」で囲むようにします。また、「href」の「http://b.hatena.ne.jp/entry/」はこのまま出力する必要があるので、ここの部分は「"」で囲みます。
文章による説明だとややこしいので、百聞は一見にしかず↓
  • expr:href="http://b.hatena.ne.jp/entry/data:post.url"
    →expr:href='"http://b.hatena.ne.jp/entry/" + data:post.url'
  • expr:data-hatena-bookmark-title="data:post.title"
    →expr:data-hatena-bookmark-title='data:post.title'
※実は「expr:data-hatena-bookmark-title」の部分の修正は必要ありません。後述のテンプレートにタグ貼り付けて保存する際、属性値を囲っている「"」は「'」に変換されるので。

4.完成したタグをテンプレートに記述

ここまでの手順でタグは以下のようになっている筈です。
<a
 href='"http://b.hatena.ne.jp/entry/" + data:post.url'
 class="hatena-bookmark-button"
 data-hatena-bookmark-title='data:post.title';
 data-hatena-bookmark-layout="standard"
 title="このエントリーをはてなブックマークに追加">
<img
 src="http://b.st-hatena.com/images/entry-button/button-only.gif"
 alt="このエントリーをはてなブックマークに追加"
 width="20"
 height="20"
 style="border: none;" />
</a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
「デザイン」→「HTMLの編集」のページで「ウィジェットのテンプレートを展開」にチェックを入れ、テンプレートファイルを表示し、お好みの場所に貼り付けてください。
お薦めは記事本文の後ろとか、当ブログと同じく記事フッタ辺りですかね。
(例)記事本文の後ろ
「<data:post.body/>」ってのが記事本文に置き換わる部分です。

(例)記事フッタ
「<div class='post-footer'>」で囲まれた箇所が記事フッタです。


右揃えにしたけりゃ

<div>タグで囲むなどしてください。


関連エントリ

2011年5月3日火曜日

おもくそクエストⅥ 幻の第一志望

新年度明けましておめでとうございます。つっても既に、堪え性のない新入社員が辞める時期である5月ですが。

さて今回は、以前からお伝えしています転職活動記録の続きです。もういい加減にそろそろ書いておかないと、記憶が完全に揮発してしまいそうだ。黄金週間のこのチャンスを逃すと、前回エントリの結びの「また4ヶ月後にお会いしましょう」が現実のものとなりかねない。

2010年11月 第1週 ~ 転職エージェントとの邂逅と希望の光

さて、どう進めていこうか。最近の進め方といえば、大半が以下のどちらかor併用でしょう。
  • 求人情報サイト(リクナビNEXTなど)で自分で探して(orスカウトされて)自分で応募
  • 転職エージェントから紹介してもらう
転職エージェントの場合、非公開求人紹介してくれたり、アドバイス・サポートが受けられたりという恩恵に与れる。けど、企業側からしたらエージェント経由だと手数料払わなくちゃいけないから通常応募の方が有利だとかいう声がある。また、クソなコンサルに当たるとノルマ達成の出汁にされる可能性もあるとか。

僕はとりあえず2社のエージェントに登録し(1社に絞って前述したような『クソなコンサル』に当たったら堪らんので)、並行して転職サイトの情報も追い…というつもりだったが、活動開始してすぐにエージェント一本の路線に変更した。というのは、エージェントから紹介されるお仕事の数だけでもうお腹一杯に…。計40社くらい紹介されたっけな。以前述べた通り、希望はWeb業界で、Web業界と言えばLAMP。それの実務経験が全く無い僕は、応募できる所あるのだろうかと不安で仕方がなかったのだが、蓋を開けたらあら意外、別にPHPやRubyでなくとも「Webアプリケーションの開発経験」が2・3年あればOKという会社が結構多かった。何だ、結構望みはあるんじゃないのか。

最終的に、紹介された中から21社をチョイスし、書類選考に応募。多すぎじゃね?と思ったが、書類選考通過率は大体3割程度だそうなので、これくらいが妥当だそうな。

2010年11月 第2週 ~ 一次面接、襲来。

第1週の段階で、書類選考の結果がいくつか返ってきた。さすがWeb業界、動きが速い。
ちなみに書類選考通過したのは最終的に11社、通過率は5割を超えた。平均以上というのはちょっと嬉しい。

この週の前半は、応募企業の運営サービス(+競合サービス)の研究や、エージェントとの面接対策など、ウォーミングアップを入念に行い、後半に3社の一次面接を受けた。その内の1社は、一次面接完了後2時間もしないで通過の連絡があり、早くも最終面接セッティング。その会社はたくさんのサービスを運営しており、マッシュアップアワードにAPI提供しており、開発合宿を行っているという(その上、Web業界では珍しく残業時間が少なくて有給消化率が高いとか)。面接での印象も良かったし、2chとか検索しても黒い噂は出て来ない。もし最終面接通過したら、もうここに決めてしまおうという心境に。

ちなみにこの週の面接は全て通過!自分で言うのも何だが、俺、面接は結構得意みたい。
何だ、転職活動、意外とイケるんじゃね?


転職活動開始前の不安は何だったんだと思わせるような順調な滑り出し。しかも開始早々、良さ気な会社に出会った。それからというもの、多大な時間を費やしてその会社の運営サービスを研究して改善案・企画案などを練った。そして前述の通り、他の会社の面接も負け無し。マジでこのまま決まってしまうんじゃないかという勢いを我ながら感じていた。というか、「やれやれ、2週間で終わりか」など、既に決まったていで妄想を繰り広げまくっていた。しかし現実はそう甘くはないね…(つづく)

バックナンバー

おもくそクエストシリーズ

2011年4月4日月曜日

LAMP of CakePHP on VMware:構築手順メモ2~CakePHPデコレーション

はじめに ※2011年8月追記

当記事は、CentOS 5.5環境の構築手順です。
CentOSと言えば、4月に5.6、7月にようやく6.0がリリースされました。
5.6環境のインストールは、この記事で解説している5.5と全く同じ流れでいけます。ちなみに、5.6だとPHP5.3のパッケージが提供されています。
6.0の場合、微妙に違いますが殆ど変わらないので、何となく分かるかとは思いますが、確実を期したければこちらを参照してください。ただしApacheとPHPの動作確認、CakePHPインストールは当記事の通りです。

では本題

LAMPほぼ童貞の男がお送りする、VMware Player上のCakePHP自習環境構築第2弾。
今回はCentOS上にLAMPの『AMP』及びCakePHPをインストールする手順をお届け。
※VMware PlayerとCentOS仮想マシンの構築手順はこちらを参照

Apache インストール

※プロンプトが『$』の場合は一般ユーザー、『#』の場合はrootユーザーで実行(或いは頭に「sudo」をつける)してください。
# yum install httpd

インストール済んだら起動。
# /etc/init.d/httpd start
ファイアウォール設定
「システム」→「管理」→「セキュリティレベルとファイヤーウォールの設定」を選択。
「ファイアウォールのオプション」タブを選択して
  • ファイアウォール:有効
  • 信頼できるサービス:「WWW(HTTP)」にチェック
※「信頼できるサービス」はついでに「SSH」もチェックしておきましょう。
ここいらで接続確認
まずIPアドレスを確認。
# ifconfig
※パス通ってない場合は「/sbin/ifconfig」とフルパス指定してください。

ブラウザで「http://{IPアドレス}」にアクセスし、Apacheのテストページが表示されたらOK。

MySQL インストール

# yum install mysql-server

インストール済んだら起動。
# /etc/init.d/mysqld start

DBやユーザーの作成に関しては、今回は割愛。

PHP インストール

MySQL接続用のパッケージも一緒にインストールします。
バージョン 5.1
# yum install php php-mysql
バージョン 5.3 ※CentOS 5.6のみ
# yum install php53 php53-mysql

インストール済んだらApache再起動。
# /etc/init.d/httpd restart
ここいらでPHP動作確認
Apache公開ディレクトリ(デフォルトでは/var/www/html)直下に以下ソースを適当なファイル名で保存(拡張子は「.php」)。

ブラウザで「http://{IPアドレス}//{ファイル名}」にアクセスし、「PHP Version…」から始まるページが表示されればOK。

CakePHP インストール

以下ページよりアーカイブをダウンロード。3月下旬時点での最新安定バージョンは「1.3.8」。
アーカイブを解凍し(tar zxvf {ファイル名})、Apache公開ディレクトリ(デフォルトでは/var/www/html)内に展開。
CakePHPディレクトリ内の.htaccess有効化
「/etc/httpd/conf/httpd.conf」を開き、以下設定を追加。

ここいらでCakePHP試食
ブラウザで「http://{IPアドレス}/{CakePHPのパス}」にアクセス。
403エラーが発生した場合、SELinux設定を確認し、有効になっていたら無効に設定。
# getenforce
Enforcing ←disabled以外の場合は有効
# setenforce 0 ←無効化コマンド
さらに再起動時にも無効になるよう、設定ファイル編集。
# vim /etc/sysconfig/selinux
SELINUX=disabled
ここでOS再起動。これで恐らくOKな筈。
警告メッセージがいくつか表示されているはずなので、一つずつ潰していく。
apacheユーザーにapp/tmpディレクトリの書込権限追加
以下は一例。「chmod -R 757」とかでもOK。
chmod -R o+w {CakePHPのパス}app/tmp/
「strtotime()」の警告が発生したら
PHPが5.3でタイムゾーン設定を行っていない場合に発生する。
/etc/php.iniを開き、「date.timezone」の値に「Asia/Tokyo」を設定。
;date.timezone = 
↓ 修正
date.timezone = "Asia/Tokyo"
設定済んだらApache再起動。

app/config/core.phpのセキュリティ関連パラメータ変更
以下項目の値をデフォルト値から適当に変更。
  • 'Security.salt'
  • 'Security.cipherSeed'
app/config/database.php作成
既存のdatabase.php.defaultを元に作成。
ここまでの手順でMySQLをインストールした場合、パスワード無しの「root」ユーザーと「test」DBが作成されている筈なので、とりあえず接続情報を以下のように設定する。

PCREだか何かのエラーが発生してたら
「cake/libs/validation.php」のalphaNumeric関数内にある正規表現を修正する。

※ここの部分は以下のブログを参考にさせていただきました。
以上でとりあえず完成(の筈)。OS起動時にApacheやMySQLを自動起動させる設定やらMySQLのDB・ユーザー作成やらは、後述の関連エントリを参照してください。
それではCakePHPを召し上がってください。

関連エントリ