教育する立場と教育される立場と、仕事に対する気の持ちようと

はー、たまには吐き出すか。
最近上から物言うの嫌なんですよね。
自分が下のほうにいるのわかってるし、上からギャーギャー言われるんで。


成長期ベンチャーが陥る新卒教育の罠〜 あらゆる悲鳴は“甘え”か 〜
WETな備忘録
http://before11.hatenablog.com/entry/2013/02/24/124021


右下がエンジニアの理想郷みたく書かれていて、そう思う気持ちもわからなくもない。
エンジニアの幸せ基準って往々にしてよくあるのが「自分がいる会社のみんなで成し遂げたいこと」ではなくて、「自分のやりたいこと、やったこと」にウエイトを置きたいわけで。だから企業側とそりが合わないこと(会社の仕事の回し方とエンジニアが求める幸せな働き方とがそもそも合わない場合ってのもあるかもですが)が多々あり、数多くのエンジニアが自分は不遇で不幸だと思い込んだりしている。


上記記事では技術系のベンチャーが成功するには、そういう考えを持つエンジニア層とうまくやっていければお互いハッピーになれるじゃないのってことだと思うんだけど、
僕は今バリバリ技術系ってわけじゃない中途半端なベンチャーに所属してる経営寄りの立場から色々ひとりごとを言う。


正直、エンジニアが会社とそのハッピーな関係を築くのって相当大変だし、
それはエンジニア側が上のような気持ち(自分が大事!みたいな気持ち)で初めから仕事と向き合って働いていたら一生埋まらない溝だと思う。


コードで世界を掌握できる人間なんて一握り、それこそ音楽で飯食うのと同じ感じするし、右下に行きたいっていう気持ちはそれと相違無いと思うわけですよ。
要はやりたいことだけやって、後は好きなことしたいってことだし、それが出来る人って大抵すごいレベルの人だよ。
どの会社も引く手数多で「君がいないとこのプロジェクトは完遂できないよ!」って言われるレベルでしょ。
(勿論、上記ブログ記事での右下はそれよりは敷居低いあたりの話をしてるんだろうっていうのもわかってますが今は都合上極論的に話します)


結局仕事って取引先やお客がいる、会社も会社の同僚がいる。
根本は対"技術"じゃなくて対"人"なんですよね、どちらかが全てではないし、どちらが欠けてもうまく成り立たないと思う。


信頼を築くには本気で(例えば会社や上司、或いは仕事と)向き合わないと駄目。


「俺はいつか辞めるし」


好き勝手会社を荒らして、挙句何も成果を残さずに辞めていくパターン。
これが一番最悪なパターンで、この気持ちってつまり「失敗しても俺の責任じゃねーし」と同義で、ずるいんですよ。


この考えを許せるのはアルバイト雇用が限界で、社員として雇用されている以上、
固い言い方するとその会社に対する忠義って見せないといけないと思います。
だって、言われたことをただやって、定時で帰って…。何のために社員として自分がそこにいるのかわかんないですよね。


それで決められた給料もらって、それでいいやって思ってるなら、会社からも一生その程度の扱いしかされないですよ。
このよろしくない状態を自分で許容してしまう精神状態が「俺はいつか辞めるし」なんだと僕は考えています。


その勤めてる会社がくそブラックだったり給料未払いが発生したり上司が変態だったりする場合はこの限りじゃないかも知れませんけど、
中小のベンチャー企業なら、そんな奴は願い下げなわけです。


ベンチャーって大抵の場合人が少ないところから始まるわけですが、人が少ないってことは社員一人ひとりが目標をしっかり見据えて、自主的に行動することを求められるのが普通でしょう。
だって「これから新しいことどんどんやろうぜ!」って言う人が集まってるわけなんで(上記ブログ記事でいうと右上の人たちですね)、事業が安定してる大企業とは考え方が違います。


ここの線引を誤るといわゆる社畜になっていくわけですが、勿論社畜になれって言いたいわけじゃないです。
せめてその会社にいる間は、その会社やそこにいる人たちと真摯に向き合うべきだし、やるべきことをやって、それ以上のことをやって、初めて他人に認められるようになるんじゃないかなと思います。


その上で自分のやりたいことをやるのはいいと思うし、会社のやりたいことと自分のやりたいことが合わないなって思ったら辞めればいいし。
それすらないのに表面上で「俺の居場所はここじゃない!(キリッ」とか言ってずるずる転職しても、どこ行っても結果は変わらないと思う。


仕事投げても穴だらけで返ってくる、それは本当に"言われたこと"しかやれてないからです。
いつまで経っても1から10まで全部伝えないと仕事こなせない、それじゃお願いするより自分でやるほうが早いってなるじゃないですか。
会社は会社の利益を求めるのに、そんないい加減な気持ちの奴を信頼して仕事振ろうと思うのかって。


全部できるようになれとは言わないけど、例えば今目の前に与えられたことしかやってなかったり、
「そもそも自分の考えは合わないから」と発言する前から諦めていたり、エンジニアなら一つの分野の業務しかできない人とかは、
まずそういうところから自分を変えていくべきかなと。
そしたら今よりずっと幸せになれると思いますよ。


一言で言うと他に思いつかないんであえて言いますが「気付き」なんですよね。
これって具体的に伝えるのが本当に難しいものなんですけど。
気付きって言葉が嫌いな人も多いみたいですが、そういう人って自分が全部正しかったり、そこで思考停止しちゃってるだけじゃないですかね。
気付き以外の言葉で言うなら「思いやり」ですね。こっちのほうが字面がいいな。
相手が自分にどうして欲しいかを考えるのって、人と人とのコミュニケーションで重要なファクターだと思います。


今より前の会社は技術系のITベンチャーだったけど、やっぱ一緒に働く人とのコミュニケーションって一番大事だなって感じました。





ここからはただの自省です。


僕もフィーリングで支離滅裂なプログラム書いてヘラヘラして数年が過ぎましたが、気付いたら教える立場にいるんで、
恐らくエンジニアを雇う側と雇われる側、どっち側の気持ちも多少なりともわかってるつもりですが、
まだまだ伝えられないことは多いし、向こうから歩み寄ろうという気持ちにさせることもできてないし、
そんな感じですけどそれでもこれからも自分含め周りのみんなが幸せになれるように頑張ろうと思います。

HTML5KARUTAはすごかった

Hi,零です。あけましておめでとうございます。

そんな感じで、HTML5KARUTA大会参加してきました!


HTML5KARUTA大会ってなんぞ?

それはこちら、
HTML5遊びながらタグを覚える「HTML5KARUTA」を作りました ? WEBCRE8.jp
我らが酒井優(@webcre8)氏がなんか作っちゃったんだ☆

今回、私は家から別に近くない高円寺コワーキングスペース こけむさズに行きました。

札の読み上げは我らがリア充たち(ぽよし (@poyosi)さん、あひる (@ahiru_z)さん、久保 知己 (@kojika17)さん、まりん (@ku_marin)さん)でした。着物がいい具合にいい具合でした。


参加者全員にチートシートが配られ、改めてHTML5のタグを確認。

タグは108つあり、HTML5KARUTAはそれぞれ36枚ずつ初級、中級、上級に分かれているのですが、初級はHTML4.01時代からあるもの、中級はHTML5で新たに加わったタグが中心、上級は「聞いたことも使ったこともねえよ」みたいなタグ中心に構成されていました。

詳細は本サイト見て下さい。→ HTML5KARUTA - 「HTML5カルタ」で覚えるHTML5の108つのタグ


大会は練習→予選→決勝という流れで、僕はなんとか決勝には行けたんですが、優勝はできませんでした。クイーンがいたからな…
でも楽しかった。順位ギリギリで賞品としてHTML5バッジも貰いました。


素直に、「HTML5KARUTA、SUGEEEEEEEE!!!!」です。

ぶっちゃけこのイベントに参加することで、少しでもHTML5覚えられたらいいなくらいの感覚で臨んだのですが、
意外と過去の情報収集でHTML5のことが頭に入ってるもんだなあという実感をとても得たのが面白かったですね。


僕は中学くらいからHTML4をnotepad.exeで地道に書いていたのがHTMLとの付き合い初めだったりするんですが、
やっぱりあの時は純粋に

  • ページ作りの楽しさ、面白さ
  • 友達とどちらが先にホームページを完成させられるかという競争心

とかそういう気持ちがありました。

若さのお陰も多分にあるとは思いますが、たくさんのHTMLタグを苦労無く覚えられた気がするんですよね。

それについてHTML5KARUTAは上記の
「楽しさ、面白さ(かるたという昔ながらの遊びになっている)」

「競争心(周りの人より多く札をとりたいという気持ち)」
の両方の要素を満たしている。

これはHTML5を覚えられないわけがないです。

実際に覚えるためにはもちろん手を動かすのが早いし確実だし、札がいくら取れたって、今世の中にはびこっているようなホームページが作れるわけじゃないです。スタイリッシュ()でセンシティブ()な愛されゆるふわホームページ()についてはCSSの知識も必要ですしね。

でも、HTML5の基礎知識が事前にインプットされているかどうかっていうのは大きな違いです。


旧くて新しい、みんなで高め合っていけるもの

これはね、家族や友達間でもどんどん流行って欲しいし、僕も自分の子供ができたら小さい頃からやらせたいですよ。

専門学校などの授業でやっても絶対良いと思います。
web制作に興味を持つきっかけ、web制作への入り口にもなると思うんですよね。


余談ですが、群馬には「上毛かるた」っていうのが群馬県人の一般常識的に存在して、群馬県人なら(恐らく)誰もが知っているというローカルかるたがあるんです。

これに倣って「Web関係者なら誰もがこのカルタを知っている」くらいの感じになったらWeb屋全体のリテラシー的なものも向上していくんじゃないでしょうか。イメージアップ!


まとめレポート

本家でまとめてくれてます。
新春!!HTML5KARUTA大会報告&まとめ #HTML5KARUTA



三次会

渋谷会場であるJELLY JELLY CAFE 渋谷コワーキングスペースを使わせてもらって懇親会的なものをやるということで参加しました。
したんですが…高円寺会場の二次会、高円寺の大将って店で日本酒を結構飲み、昼に風邪薬飲んだ影響もあってか異様に眠くなってしまい、
奥の畳で爆睡しててすいませんでした。
気付いたら家にいました。お疲れ様でした!

App:uses()を使うべき場所とApp::import()を使うべき場所

[2012/07/29 17:43追記]
こんな記事がありました。
CakePHP モデルの読み込みは App::import ではなく ClassRegistry::init で
検証はしてません。




本家のbookに書いてあるのでいちいちこんな記事不要なんですが、あまり違いを理解せずに使っていたので今日こそ理解した記録。

CakePHP2.0のネーミングルールの記事翻訳
http://d.hatena.ne.jp/cakephper/20110511/1305103385

http://book.cakephp.org/2.0/en/core-utility-libraries/app.html
Loading vendors usually means you are loading packages that do not follow conventions. For most vendor packages using App::import() is recommended.


Vendorの中のファイルはApp::import()推奨。
App::uses()はCakeismな構造なら、そのクラスが必要な時だけロードしてくれるから便利なんだけど、ファイルの中に複数のクラス定義があっても全部は読み込んでくれないから。
以上。

Themeを使えばRoutingPrefixを使う振り分けの時よりControllerがシンプルになる

書こうと思いましたが既に書かれてました。そりゃそうですね。
cakephp1.3携帯サイトをテーマを使って作る
http://www.hideblog.net/nikkis/show/125/
同じことがCakePHP2.xでも変わらず実装できるよということで一応書いておきます。

themeは1系からある機能でしたが、今までずっとprefixを信じてここまでやってきたので全然触れたことがありませんでした。
今回、少し規模というかactionの多いサイトを作っていて、あまりにmethodが多くなったのでthemeを使うことにしてみました。

themeを使ってビューの振り分けを実装すると、今までprefixで指定してた時は

<?php
class ExampleController extends AppController {
	//PC用
	public function index() {
	}
	//携帯用
	public function mobile_index() {
	}
	//スマフォ用
	public function sp_index() {
	}
}
?>

のようにメソッドが増えたわけです。
こういう時って大抵、画面に引っ張るデータは同じで、ビューだけ変えたいってことが多いので、
全部のメソッドに同じような処理を書くか、共通メソッドを作って呼び出す形になると思います。
これは面倒です。

themeを使うと、prefixがつかなくなるので

<?php
class ExampleController extends AppController {
	public function index() {
	}
}
?>

これだけで済みます。シンプルイズベスト!

自分の場合はシングルトンなUserAgent判別クラスを作り、使用するtheme名を先に決めています。

<?php
// Vendor/UA.php
	public function __construct() {
		$this->theme = $this->getThemeName();
	}
	public function getThemeName() {
		if ($this->isSmartphone()) {
			$result = 'sp';
		} elseif ($this->isMobile()) {
			$result = 'mobile';
		} else {
			$result = 'pc';
		}
		return $result;
	}
?>

その後、AppControllerのbeforeFilter()で$this->themeにtheme名をセットしています。

<?php
// app/Controller/AppController.php
	public function beforeFilter() {
		parent::beforeFilter();
		$this->UA = UA::getInstance();
		$this->theme = $this->UA->theme;
	}
?>

controllerのthemeに名前が入っていると、cakeは読み込むviewファイルの位置を
app/View/Themed/[theme]
以下から探すようになります。
(Themedの中に無かった場合は本来の階層からファイルを探してくれます。)

これで、themeが'mobile'の場合は
app/View/Themed/mobile/example/index.ctp
themeが'sp'の場合は
app/View/Themed/sp/example/index.ctp
を読み込んでくれるようになります。

LayoutやElementもmobile_menu.ctpとかmobile_layout.ctpみたいな名前付けて区別してましたが、
themeを使うとThemed/[theme]/(Layouts|Elements)/の下にあるものを呼んでくれるので、ファイル名もシンプルになります。


themeを使った実装は、ユーザーのブラウザ環境が違ってもURLが同じになります。
PCでアクセスしようがガラケーだろうがスマフォだろうが
http://example.com/example/index
でアクセスできます。


prefixを気にしなくて良いので、app/Config/routes.phpもシンプルになりました。スンバラシ。

アシアルさんの絵文字データベースと相互変換マッピングデータベースのJSONファイルを修正しました

携帯の絵文字対応で、今のトレンドを全く知らないので

絵文字データベースと相互変換マッピングデータベースのJSONファイルを公開します。 - アシアルブログ
http://blog.asial.co.jp/330

EmojiHelper - キャリアを意識せずに絵文字を出力できるCakePHPのHelperクラス - ymknの日記
http://d.hatena.ne.jp/ymkn/20080131/p1

上記で公開されてたjsonファイルとhelperを使ってたんですけど、jsonファイルに空白やら間違いやらが結構あって大変だったので、コメントに残されていた情報をもとにひと通り修正してみました。

せっかく修正されたファイルを公開していた人とかもいたみたいですけどリンク切れてたみたいなので、
自分が修正したものを再配布します。

再配布に問題があれば削除します。

http://absun.info/data/emoji_json.zip


EmojiHelperはそのまま使って普通にCakePHP2.1で動いてるのですが、時間があれば2.1用に書き換えてみようと思います。