出張振り返りその2

実生活が始まる

今となれば一週間の出張と1ヶ月、2ヶ月の出張の違いはよくわかりますが当時は当然何がどうなるのかわからないまま、私のフィリピン生活は始まりました。当時現地に同じように出張していた同僚と、ちょうど入れ替わる形で赴任したため、その期間は住まいの説明や必要事項(危険なことや気をつけたほうが良いこと等)をシェアしてもらいました。

食事

当時から最も困っていたのは食事でした。同僚と入れ替わりで入居したコンドミニアムには炊飯器があったため、まず白米を買うところからでした。フィリピンの一般的なお米は水分が乏しく、おかずやスープと混ぜ合わせて食べるので日本のそれとは決定的な違いがありました。どこのスーパーでも販売しているわけではなく、また1キロ程の小ぶりのものが殆どでした。単身でいっているのでむしろそれはありがたかったです。こちらは基本的に野菜の料理が少ないため、肉とご飯のようなレパートリーが多く、また油の質が多少日本と違います。気をつけないと太るか、あるいは病気になるかの2択だなと思ったのは記憶にあります。料理に関してはフィリピン料理は油分が多く、ビールにあう食事ではあります 🙂 が、、、ひとたび体調を崩すとおかゆや消化の良いものが探しづらく、栄養補給が非常に難しくなります。わたしは日本から持ち込んだ友人からもらったフリーズドライのお粥に助けられました。駐在員は基本的にマルチビタミンのようなものを飲んでいる人も多かったです。

今では多少値が張っても、日本料理のお店や美味しい韓国料理のお店をしっているのでなんとなくローテーションしていますが当時は「外食」そのものにも大きな抵抗がありました。なんといってもオーダーする時に自分の好みや食べたいものがきちんといえない、あるいはよくわからない質問をされたらどうしよう、と思いです。悶々として2時間程空腹になってクラクラしながらさまよったこともあります。日本で玄関を出て3分でコンビニに行き、アイスコーヒーを買っていた頃を思うと泣けてきました。食べたいものを食べたいだけ居酒屋で頼んでいた事を思うと、簡単に手に入れていたものが急にハードルが高いところにいってしまったような、ストレスを感じていました。空腹時に自分が期待していたものが出てこない(美味しくない、思ったものと違う等)時のストレスは日本ではあまり経験がなく、しばらくはそのギャップに苦しみました。もともとスナック菓子が好きなので、スーパーでスナック菓子をかって食べてみたものの全く想像と違う味でびっくりしてなくなく捨てたこともあります。

今思いますが、海外での生活で一番ネックになるのはやはり食事なのではないでしょうか。仕事がきつくても最終的に一人でも美味しいものが食べられれば、ある程度その日の出来事は水に流せる気がします。

 

やっとごはん #finally #lunch #noodles

A post shared by Yashiro Anazawa (@yashiroanazawa) on

 

 

出張振り返り

振り返り

出張も9ヶ月になりました。もともとの予定は6ヶ月でしたが思いの外半年でできることが限られてることがわかったのでもう半年伸ばしてもらうことに。スタッフや家族に協力してもらいながら、あと3ヶ月で任期満了になりつつあります。海外で長期的に働く、生活するということが今後自分の人生においてそう多くないだろうと思っているので、いい機会なのである程度色々残しておこうかなと思います。

ちょうど去年の出張時から何故かinstagramを始めたのでそれとともに色々綴っていこうと思います。

 

出張の目的

フィリピンの子会社への出張です。エンジニアとして現地のエンジニアと、現状抱える技術的な問題や、テクニカルな問題だけでなく課題解決(日本では当たり前に行われてることが行われていない、あるいは事情で現実的でない、ときに日本人に相談しにくいなど)や改善を目的に出張しています。現地スタッフとは英語でのコミュニケーションになります。ミーティング、ドキュメント、飲み会から普段の会話まで日本語とは隔絶された生活に身をおくことになります。日本での基本的な業務からはある程度解放してもらい、基本的には現地のメンバーのプロダクトに関わり、コードレビューや各プロダクトの振り返り、日比を跨いだ特殊なプロジェクトの設計や、日々の運用フローの改善などに関わってきました。

 

海外経験

子会社への短期間の出張はそもそも年に一度程度の経験がありました。1週間程度を目安に特定のプロジェクの推進、あるいは日本での技術的な取り組みをシェアし、現場のエンジニアに反映してもらうなどです。つまり長期出張以前に現地スタッフとはある程度の面識がありました。私生活では夏休みにアジア数カ国を旅行しており、最近は欧州がもっぱらお気に入りですが、チーズが食べられず、チーズ抜きにしてください、と言えない小心ものです。ピザは食べられます。

 

英語

現在の会社に入社するまで英語に関わる業務は一つもありませんでした。学生時代は英語は鬼門で大学自体、英語で留年するところでした。現職の前に海外旅行にいったことが一つの契機になったかもしれません。今の会社では皆が当たり前のように英語に触れ学習するので、勉強したり、学習方法を相談したり意見交換をすることが恥ずかしくなくなっていったのかなと思います。また、全員がネイティブのようにできるわけではない事が私自身落ち着いて学習できたことにつながってると思います。業務上、全てに関して英語が必要かというと、強要もされません。それもあってマイペースでできたのかなと感じます。

 

主に生活面に関してこれからぼつぼつ更新していこうと思います。 🙂

landed #いよいよ

A post shared by Yashiro Anazawa (@yashiroanazawa) on

  • 生活面
  • 困ったこと
  • 想像してよりも良かったこと / 悪かったこと
  • 準備して行ってよかったもの、日本から持ってきてよかったもの
  • 現地で購入してよかったもの
  • 英語

cakePHP2.1でcakeEmailを使う。

そろそろcakePHP2.1であんなことやこんなことやっていろいろ恥ずかしいことも蓄積してきたので皆様とシェア致します。

こちらのサイトを参考にしました。
1.2,1.3ではqdmailを使っていたのですが、開発自体がすでに止まっているようなので
標準で用意されているものも最近は利用されている人が多いようなのでこちらでやってみました。

app/Config/email.phpにはこんなかんじで設定。gmail経由で送ってみたよ。
インストールしたばっかりんときはemail.php.defaultみたいなファイル名なので名前をちゃんと変えよう。
すでにdefaultの項目があるのでこんなかんじに変えてみました。お好みで変えてみてください。

	public $default = array(
		'transport' => 'Smtp',
		'from' => array('yash@xxx.com' => 'メールでの表示名'),
		'host' => 'ssl://smtp.gmail.com',
		'port' => 465,
		'timeout' => 30,
		'username' => 'hogehoge@hogehoge.com',
		'password' => 'hogehoge',
		'log' => true//ここをtrueにするとtmp/debug.logにメールのログが書かれる。
	);

を冒頭にセット。
使う側のコントローラーには

App::uses('CakeEmail', 'Network/Email');

そんでもって実際に送る場所こんなかんじで。
テンプレートやらのセットはマニュアルにあるので読むべし。cakePHP2.1から?ではないと思うけどテンプレートの構成が若干1.2と変わっているんでつね・・

$email = new CakeEmail('default');//ここ、ちゃんとdefaultを設定しないと送れませんでした・・。
$email->from(array('yashiro@XXX.com' => 'My Site'));
$email->to('yashiro@XXX.com');
$email->subject('テストです');
$email->send('日本語でおくれるかなー?');

こんなかんじで無事におくれました!(∩´∀`)∩ワーイ
Pluginも結構cakePHP2.1で動くもの多いですね。SearchPluginもACLPluginも。SoftDeleteビヘイビアとかArraySourceとかもぼつぼつ。

bootstrap.cssの対応(for Play framework)

メモ。
ちょっと家庭内制作で「phpじゃないやつで!」ということになってjavaでrailsライクなplayframeworkいぢってんですが、
来月の某締切りにむけて画面周りで、Bootstrap を使ってます。
で、playはそもそもrailsライクってことで、cakephpと非常に似ているので、ファイルの構成とかは分かりやすい。
まあおいおいいろいろかけたらと思うんですけど、ひとまず、今Bootstrapが流行っているので、playframeworkで使ってみたい!ってことで使ってたんですが、一点、pagenateについてがどうにも、見た目を変更する必要がありました。

なので、paginateの導入も含めてメモしときます。

※試行錯誤なんで、自己責任でよろしくおねがいします><

1.2.2使っているので、コンソールでとりあえず

play install paginate

する。そうすると、コンソールで「いれちゃうぜ?」てきいてくるので、はいyて答える。

そうすると・・・playインストール場所/modulre/paginate-0.11

という構成になり、そこにモジュールが展開される。

そのあと、

conf/dependencies.ymlに

~ require:

~ play -> paginate 0.11
これを追記して、さらに
conf/application.confに
# Import the pagenate module
module.paginate=${play.path}/modules/paginate-0.11
こんな感じで、play再起動。起動時に、
Module paginate is available (/home/yashiro/play-1.2.2/modules/paginate-0.11)
とかいうログが見えると、無事paginateモジュールが読み込まれています。
さて、そのモジュールの中に、htmlが入っていて、(playの雛形みたいな)paginateに対してどういう記述をするか
が書かれているControls.htmlをいうソースを探し出します( paginate-0.11/app/views/にありました)。
それをコピーして、app/views/paginate/Controls.htmlという構成にします。
(やってることはcakephpで、helperを自分のappの配下にもってきて変更していることにそっくり。)

それでそのファイルをこんな感じで修正してみました。そしたらデモで見えるようなpaginateが表示されたよ!

(実際はpaginateを表示させるところまで、これ以外にもいろいろ道のりがあったんですが・・それは割愛)

app/views/paginate/Controls.html

%{
int __firstPage = 1;
int __currentPage = _items.pageNumber;
int __pagesDisplayed = _items.pagesDisplayed;
int __pagesBeforeMiddle = __pagesDisplayed / 2;
int __maxPage = _items.pageCount;
if (__currentPage > (__pagesDisplayed / 2)) {
	__firstPage = __currentPage - __pagesBeforeMiddle;
}
int __lastPage = __currentPage + (__pagesDisplayed - __pagesBeforeMiddle - 1);
if (__currentPage < (__pagesDisplayed - __pagesBeforeMiddle)) {
	__lastPage = __pagesDisplayed;
}
if (__lastPage > __maxPage) {
	__lastPage = __maxPage;
}
boolean __hasPrev = _items.hasPreviousPage;
boolean __hasNext = _items.hasNextPage;
String __firstURL = __hasPrev ? _items.getCallbackURL(1) : "#";
String __prevURL = __hasPrev ? _items.getCallbackURL(__currentPage-1) : "#";
String __nextURL = __hasNext ? _items.getCallbackURL(__currentPage+1) : "#";
String __lastURL = __hasNext ? _items.getCallbackURL(__maxPage) : "#";
%}
<div class="pagination">
	<ul>
%{ if (_items.boundaryControlsEnabled) { %}
		<li class="${__currentPage == 1 ? 'disabled' : 'first'}"><a href="${__firstURL}">&{'play-paginate.first'}</a></li>
%{ } %}
		<li class="${__hasPrev ? 'previous' : 'disabled'}"><a href="${__prevURL}">&{'play-paginate.prev'}</a></li>
%{
for (__idx = __firstPage; __idx <= __lastPage; __idx++) {
boolean __active = __currentPage == __idx;
%}
		<li class="${__active ? 'active' : 'inactive'}"><a href="${_items.getCallbackURL(__idx)}">${__idx}</a></li>
%{
}
%}
		<li class="${__hasNext ? '' : 'disabled'}"><a href="${__nextURL}">&{'play-paginate.next'}</a></li>
%{ if (_items.boundaryControlsEnabled) { %}
		<li class="${__currentPage == __maxPage ? 'disabled' : ''} next"><a href="${__lastURL}">&{'play-paginate.last'}</a></li>
%{ } %}
	</ul>
</div>
<br style="clear:both;"/>

まあここまではよかったんだけど、lastページになると、PreviousとNextのあいだのページ数が一個減るという謎の

現象に・・まあこれは次回でもどうにか修正することにしましょう。

 

※10年ぶりにJavaとか見たら、「アノテーション」とかいう謎の識別子がついていて時代を感じた。

ktai library勉強会第2回が行われました。

第2回は主に管理画面の作成&携帯画面の作成の導入部分でした。ただ5章は実際の開発を行う関係上、開発環境やスキーマ作成に手間取った方も多かったです。(予習してきた割に、USBメモリとか持っていかなかったとか、抜けてたな私…)私自身はxampp環境での開発だったので(VMでやるつもりだったんだ・・・)それも色々障害がありました。

開発側と公開側をサブドメインで制御する…これは私の場合、家人が実は解決策を導いてくれて、「Hostで解決しろや!」といわれて これを導入して制御しました。これにローカルホストで開発のドメインと公開用のページのドメインを登録すれば、書籍と同じ設定をしても動作します。

テーブルスキーマ…これは巻末にあったのをすっかり見落としていて始め手間取りましたが無事解決。ちゃんとみると章ごとに必要なテーブルスキーマが用意されています。

など色々だったので、会場にきてさあ5章!と思った人は結構大変だったのではないでしょうか?私は「とりあえず全部読む」事をしたのでとりあえずダウンロードが必要なものはダウンロードしておき、(ソースコード、プラグイン等)、「だいたい当日はここまでかなあ…」というのを想定していったので今回はあまり躓きがなかった!(前回は文字化けで騒いで色々お手数かけました><)

買出しにいこうと思ったのですがあまりの寒さにピザでくじけ(美味しかった◎)、もういつでもピザでいいんじゃないの…とか思ったり思わなかったり。食事してるときはやっぱり歓談のほうが楽しいですね。最後の30分は皆さんと歓談して終わりました。今回はgitの話、他フレームワークの話、パフォーマンスについて、次回のcakephp勉強会の話(!)など色々面白い話が多かったです。また@ecworks_masapさんのktai libraryについてのお話もあり、やっぱり著者の方が参加してくださる勉強会は色々スムーズだなあとつくづく感じました。青年団の皆さんには毎回助けていただいております。本当にどうもありがとうございます。

しかし結構驚いたのは、関東は昨日、4月の半ばだというのに激しい雨と気温の低下で雪が降るんじゃないのか、という寒さでした。こういう日って結構来ない人がいるんじゃないの…と半ばびくびくしていましたが、出席率100%でうれしかったです。事前にメールを送っていたので、出席率は大体把握してはいたのですがやっぱり当日になってみないとわからない、というのがあるので。

@ecworks_masapさんの提案もあり、次回は5章の後半に焦点を当てた、より「 ktai libraryに特化」した内容で取り組みたいと思います。自分のペースでできるのがこの勉強会のよいところではありますが、次回参加される場合は5章の「管理画面」をある程度進めていただき、より公開ページの開発をスムーズにできるように進めてから参加していただくと楽になると思います。その方がきっと質問もできますし、当日の満足度が違うのではないでしょうか。

私は勉強会の後、新宿駅で山手線の遅延に遭遇し、その後東上線でも人身事故で電車がこず…自宅についたのは1時すぎていました><

Ktai Library for cakephp 勉強会@関東 2回

http://atnd.org/events/3990

第2回の開催の告知です。来週の金曜開催になっています。

開始時間は19:30より。前回もボツボツ集まって皆さん各自準備されていました。Ktai Library を持っていて自分で作ってみたい!と思われる方はぜひどうぞ。より実装に偏った勉強会ですので、LTや発表はありません。自分で手を動かしてプログラミングを行えるかたの参加をお待ちしております。

前回は絵文字だったりに困りましたが、今回はそのようなことがないように…!前回はxampp環境だったのですが、最近色々ありまして結局MVないと困る。というわけで2回目の参加はVMにアップして動かすようにしようと思います。2回目はより実装よりになり、ボリュームも多いので、不安な方はあらかじめ予習して、わからないことを尋ねたりできると良いのではないでしょうか。携帯に関連した画面の実装もあるので、私もいまから楽しみです。

ここんところ、仕事でかえりが遅くてブログかけなかったりしてますが、おかげさまでcakeで作ったバッチも無事毎朝動いているみたいです。忙しい時ほど、情報は蓄積しないといけないな!と改めて思ったしだいです。

最近は
・Ktai Library5章を読み出した
・Linuxことはじめ みたいな本買った!(今日届いた)
・自宅にあった旦那がもってたBIND本は3ページ読むと眠くなる魔法の本ですぐ寝れる
・qdmail文字化けでつっかかった。結局死ぬほど恥ずかしいミスだった。
・APCを社内鯖に導入した。パッケージに色々てこずった。yum update してないとか死にたい><
・去年年末から開発していたサイトがサービスインしていて、すでにソースを書き換えたいw

こんな感じでした。次回は簡単に、cakephpで作成するメール一斉送信なんかを記事にしたいと思います(どこのブログにもありそうだけどさ!)それではおやすみなさい。

Ktai Library for cakephp 勉強会@関東が行われました。

皆さん集まりが良かった!えっちらおっちら会場についたら7時。すでに半分くらいの方がいらして、PCのセットアップをされていました。7時半から自己紹介ということでしたが7時半にはすでに9割の方が着席されていて、Ktai Library本を片手にPCをいじったり。

19:30から自己紹介に始まり、あっさりと自己紹介を終えて21:00まで本当にコーディングでした。私はさすがに設定で躓いたりするのはアウトなのでちょっと動くように書いてきたつもりが…?よく見たらドコモとAUの絵文字がでてないよ!と慌てふためいて結局シュミレータの問題じゃない?ということで・・。私は運良くとなりに座っていただいた滝下さんに色々伺いまくり。4章ということでとりあえず画面を出そう!ということだったので、わりと敷居は低かったと思います。もうちょっと回数を重ねると「わからん」「そこはね」みたいなやりとりが活発に行われるかもしれません。私の絵文字問題は解決してないけれども 凹○ 21時過ぎからはビールを飲んで皆さん歓談。cakephpの話にかかわらず技術的だったり、今熱い話題だったりを思い思いにお話していました。

ビールが進んだところで@ecworks_masapさんのお話。今後のKtai Libraryの今後や、色々素敵なお話がありました(スライドが面白かった)。そのあとは@kaz_29さんのLTだったのですが、結構衝撃的でした。ふえー。extjsのお話。全てがブラウザ内で簡潔するのは衝撃的でした。名前だけは知っていましたが、実際にまともに見たのは初めてでした。これウェブで開発は有料なのかな…?歓談して23時過ぎに終了。月曜だったので翌日が心配でしたが、無事起きて会社にいけましたw

さて、こちらでもかまわないのでアンケートの内容や、要望を受け付けています。私としてもこれで終わりしたら意味がないので5章、6章と続けていくつもりです。参加してくださる方がいる限り。自分がやり切れる限り。お一人、アンケートを手渡しで下さった方がいて(これはこれでうれしい)帰りの電車で「とりあえず一回は終わった!」という気持ちで帰路につきました。さて顔あわせも出来たし、2回はより開発に即した内容でコーディングしていきたいと考えています。土曜の午前から午後にかけて…みたいなのでも面白いですね。よりコーディング、中身に即した事柄を追って行きたいというのが希望です。1回が都合でいけなかった方も、2回目はすんなりこれると思います(1回目は導入部なので)。ただ、やはり出席というか会場の人数や調整があるので出欠管理は課題が残りそう。平日の開催で皆さん色々都合はあると思いますが、キャンセルが出るのはやはり寂しいものです。

さて、Ktai Library の4章ですが。私はxampp環境firefox3.6、firemobilesimulator1.1.10だったのですが、ドコモとAUの出力で絵文字に文字化けが起こる事態に。同じ環境でもちゃんと表示される人がいるので開発環境に依存する可能性もありそう。ちなみにi-mode simulatorⅡでは問題なく表示されました。私と同じ状況になっていた方もいらしたので今日はいろいろやってみました。

  • FireMobileSimulatorをバージョンアップ!→残念。結果変わらず。
  • php.iniを変更してみたりした。が、変わらず。
  • …うわああああん!なにがいけないんだ!なにがいけないんだよお!と家で爆発していたらノソノソと鼻の黒い人がでてきて、下記のようにしたら表示された…でもこれ結果的には環境に依存するといえそう。エミュレータを何台も使いたくないので複数の端末の挙動を知るためにはfiremobilesimulatorを使いたいんだよなあ…。output_encodingの設定をUTF-8にすると絵文字が表示されず。SJISと設定しても良い。EUC-JPでもいける。でもUTF-8はだめ。xamppの設定も色々変えてはみたけれども。ソースや画像の問題ではないので、とりあえずこれで乗り切るかな…。もし同じような現象で解決されたかたがいらっしゃったら教えてください。
    下記はドコモでも絵文字がきちんと見えた設定。これでよい、ということではないのであしからず。

    	var $ktai =array(
    		'enable_ktai_session' =>true,
    		'use_redirect_session_id'=>false,
    		'imode_session_name'=>'csid',//imode時のセッション名
    		'use_img_emoji' =>true,
    		'input_encoding'=>'UTF-8',
    		//'output_encoding'=>'UTF-8',
    		'output_encoding'=>'pass',
    	);
    

    さてあまり期間をあけても意味がないので4月の頭ごろを再度目標にかかげる予定、とだけ告知してみたいと思います。サーバの設定などを勉強会でどのように扱っていくかについても皆さんの意見をお待ちしています。

    さて個人的に。いやあ、、皆さんに助けていただいて、というか私何もしなかったような…。。技術的な話題も自分からはあまり提供できずただ写真のどまんなかに映っているという体たらくw 大丈夫なのか私!いや大丈夫じゃないだろ。やったほうがいいよtipsはあるけれどわたしのブログは「やっちゃだめtips」じゃないかと思う今日この頃。恥をさらして今日もがんばりまっす。

    2010.3.11修正記事。
    上記のように修正ではなく、方向性としては
    php.iniに以下のように設定することで表示されます。
    default_charset = “UTF-8”

    ただし、これはxampp環境で、実際のところCentOSでは、デフォルトの設定でhttpd.confに
    AddDefaultCharset UTF-8
    と設定されているのが有効らしいので、いわゆるCentOSのVM環境のようなところでは再現しなかった模様。