2015年を振り返る
明けましておめでとうございます。
去年も一年の振り返りエントリ(2014年を振り返る - るさんちまん)を書いたので、今年も書いてみようかと思います。
仕事
4月の異動から今まで自分がやってこなかった領域を担当することになり、自分がチームにどう貢献できるかを考えながら仕事してきた一年だったなーと思います。
外出できない正月
去年の振り返りにも書きましたが、2014年の11月、12月に土日返上で開発していたサービスを年末にリリースし、正月はそのサービスの監視業務でほぼ家に張り付きでした。
本来であれば人が常に監視しなくてよいようにすべきなのですが、開発に余裕がなく最低限の監視システムしか実装できなかったのと、障害が起こった場合に即時対応しないといけないタイプのサービスだったので、ヒヤヒヤしながら正月を過ごしていました。
※結果的に大きなトラブルもなくてよかったです。。。
海外メンバーへの仕事引き継ぎ
自分の担当領域をチームメンバーに引き継ぐことはよくありますが、チームメンバー以外、しかも日本語のほとんどできない海外メンバーに引き継ぐのは初めてでした。
言語も文化も経験もスキルも違うメンバーに仕事を引き継ぐのは苦労が多そうだなーと思っていたのですが、エンジニアだとプログラムという共通言語で話せるのが大きく、技術的な引き継ぎはスムーズに進みました。
ただ、サービスが安定して動くことの責任だけでなく、どうユーザに楽しんでもらうか、どうやったらもっと楽しんでもらえるのか、といったことを常に考えながら仕事をする姿勢を伝えるのは難しかったですね。
チーム異動
サービスのリリース前からお世話になっていたチームを離れ、4月に社内でも有数の大規模チームに異動しました。
今までサービスの運用開発をメインにやってきましたが、新チームではサービスの開発は行わずにチームの開発支援専門のエンジニアとなりました。
サービスのコードは一切書かずに、チームの開発作業が円滑に行えるような環境整備とツール開発を行います。
具体的にやったのは下記のようなものです
- 開発サーバの保守・管理
なんでdiskすぐfullになってしまうん
— なおぱー (@naopr) 2015年5月19日
gitでサブモジュール削除するの、ブランチ単位でやらなきゃいけなそうで死にたい
— なおぱー (@naopr) 2015年5月22日
- AngularJSでの管理ツール開発
Angularタソ-
— なおぱー (@naopr) 2015年4月8日
Angularぶっ飛ばしたい
— なおぱー (@naopr) 2015年5月26日
- Google Apps Scriptでのマスタデータ管理ツール開発
Google Apps Scriptで、File.makeCopy(name, dest)すると、name指定してるのにもかかわらずコピー先のファイル名が "hogeのコピー"になることがあるので、makeCopy後にsetName()しなきゃいけなかった。 google--
— なおぱー (@naopr) 2015年8月4日
Google Apps Script、Range.setFormulas()すると最後の行のリファレンスがバグるという知見を得た。対応としては空の1行を追加してやると直る。こんな感じのバッドノウハウが溜まってきたのでそのうちブログにでも書こうかな
— なおぱー (@naopr) 2015年9月14日
- Jenkinsの保守・各種ツール開発
【ゆるぼ】Jenkinsのビルド履歴にユーザ名を表示する方法
— なおぱー (@naopr) 2015年10月29日
汚い言葉は使いたくないけど、ほんとにシェルスクリプトはクソだな!!
— なおぱー (@naopr) 2015年12月4日
どれも今までちゃんと取り組んだことがなかったので、勉強しつつ楽しんで仕事ができました。
個人的には、開発環境で頻発していたdisk fullを根絶できたのが精神衛生上一番よかったかな。
プライベート
…とここまで仕事のことを長々と書いてきましたが、ぶっちゃけ2015年はプライベート9割でした。
結婚
結婚しました
— なおぱー (@naopr) 2015年3月10日
結婚式はハワイで行いました。忙しい中、多くの時間とお金を使って参列してくれた皆さん、本当にありがとうございました。
今月の帰国後パーティーが結婚関連の最後のイベントですが、結婚ってプロポーズから1年以上かかる遠大なプロジェクトなんだなあとしみじみ思います。
ねこ
ねこ飼いたいねこ飼いたいと言い続けてはや数年。ついに飼い始めました。
結婚よりも何よりも、今年一番生活を変えたのがこいつ。
野生を忘れ果てた猫の姿です pic.twitter.com/fVHeo1CFNU
— なおぱー (@naopr) 2015年9月25日
毎日「かわいい」って言ってる。こんなにかわいい生物は存在しないんじゃないかな。
てなことで、2015年は仕事もプライベートも充実した一年でした。
結婚関連で一年間バタバタしてたので、今年はもう少しのんびりできればいいかなと思います。
今年もよろしくお願いします!!
【これから結婚する人向け】入籍前後の戸籍周りの手続き
私事ですが、今月入籍しました。
入籍の前後で諸々の戸籍の手続きをしていて、それらの情報がまとまっているページが見つからなかったので備忘録がてら雑なメモを残しておきます。
なお、自分は結婚しても苗字が変わらなかったのですが、苗字が変わる人はもっと多くの手続きが必要になります(銀行口座とか)。誰か書いてくれないかなー。
婚姻届
言わずもがなですが、入籍するためには婚姻届の提出が必要です。
記入に必要なもの
- 認印(夫、妻)
- 証人の署名捺印(2人・誰でもいい)
提出時に必要なもの
その他注意点など
- 婚姻届に捨印が必要と書いてあるサイトがあったが、私の場合は必要なかった
- 本籍地はきっちり戸籍通り書かないとその場で書き直しくらう
- 住民票の発行等よりずっと時間がかかった(私の場合は20分ほど)
- 手続きが終わってから、本籍が変更になるまで1週間前後かかる*1
免許証
免許証を持っている方は、警察署や運転免許更新センターで本籍地の変更が必要になります。
変更に必要なもの
- 新本籍地つきの住民票原本(返却されないので注意)
- 免許証
パスポート
本籍地の都道府県が変更になった場合のみ、パスポートの記載事項変更が必要です。
変更に必要なもの
- 戸籍謄本、または戸籍抄本
- パスポート用の写真
- 持っているパスポート
- 場合によって必要な書類があるので、 PASSPORT_氏名・本籍・住所が変わったとき も参照のこと
パスポートについては、私は記載事項変更をしない予定です。
というのも、海外旅行するだけであれば出入国審査で本籍地をチェックされたことは今まで一度もなく、手続きの手間や手数料の支払いが面倒だからです。
不安な方は記載事項変更しておいたほうが無難かとは思います。
まとめてみるとそれほど手続きは多くはないのですが、一から調べようと思うとこういうの面倒なんですよね。 このまとめが誰かの役に立つことを願います。
*1:本籍が変更になる前にどうしても変更後の本籍が書いてある書類が必要な場合は、役所の戸籍係に相談すると対応してくれることもある
【2014年】ふるさと納税でもらってよかった食べ物/よくなかった食べ物
去年初めてふるさと納税を始めたのですが、今までやらなかったことを後悔するレベルでよかったです!
詳しい説明は下記ページに譲るとして、私が去年ふるさと納税でもらってよかった食べ物、よくなかった食べ物を書いていこうと思います*1。
ふるさと納税[ふるさと寄附金]とは?本当のメリットを、実はあまり知られていないのです。 | ふるさと納税ポータルサイト「ふるさとチョイス」
よかった食べ物
佐賀県玄海町 黒毛和牛 (10000円)
すき焼きにして食べましたが、最高ですね。スーパーで売ってる高い肉よりもうまいレベル。2〜3人前くらいありました。
山形県長井市 米沢牛すき焼き・しゃぶしゃぶ用 (10000円)
しゃぶしゃぶして食べましたが、最高ですね。スーパーで(ry。450gなので、こちらも2〜3人前くらいでしょうか。
鳥取県境港市 境港産紅ズワイ脚肉爪肉セット (10000円)
蟹って1パイまるまる届いても調理したりむいたりするの面倒なんですが、これはあらかじめむいた状態で冷凍で届くので、解凍するだけで食べられます。
蟹しゃぶにして4人前くらいあり、味も満足できるレベルなのでかなりオススメです。
大阪府泉佐野市 こがしバターケーキ (5000円)
コーヒーと一緒に食べると激うまいです。焼き菓子なので10日ほど日持ちするのもGoodですね。
よくなかった食べ物
佐賀県玄海町 いちご「さがほのか」 (5000円)
郵送のせいかもしれませんが、届いたときにいちごが全部潰れてしまっていました。味もスーパーのいちご以下に感じたのが残念。
鳥取県鳥取市 農家が作った「ジェラート4種類6個セット」 (5000円)
ミルクジェラート以外、口に合いませんでした。
鳥取県琴浦町 ふろしきまんじゅう (3000円)
味は悪くないのですが、到着日=賞味期限、というのがかなり厳しいです。16個入りのまんじゅうを1日でおいしく消費できる方であればよいかもしれません。
さーて、確定申告しなきゃだ。
*1:画像はふるさとチョイスより引用
2014年を振り返る
明けましておめでとうございます。
去年も一年の振り返りエントリ(2013年を振り返る - るさんちまん)を書いたので、今年も書いてみようかと思います。
仕事
部署異動やチーム異動もなく、バタバタしていた2013年とはうってかわってまた腰を落ち着けて運用開発を行っていました。
それほど書くこともないのですが、やったことをいくつか書き残しておきます。
フロントエンドをかじる
入社してから今まで、業務で書くコードはほとんどサーバサイドでたまにHTMLをちょろっといじる程度だったのですが、チーム内開発ツールを作成するにあたってHTML、CSS、JavaScriptをある程度の量書けたのはいい経験でした。
ただ、ほとんどなにも知らない状態からコードを書いていたので、今見たらだいぶコードがひどい…。
連勤術師になる
11月、12月はひたすら、ただひたすら働いていました。
新規開発案件を通常の倍以上のスピードで企画・開発し、入社以来一番働いた2ヶ月になりました。
途中体調を崩してしまってつらい時期もありましたが、大きな障害もなくリリースまでこぎつけ、かつユーザに喜んでもらえたので、今となってはいい思い出です(もうこれっきりにしたいですが)。
プライベート
旅行によくいく
2014年はよく旅行にいく一年でした。
保育士試験にまた落ちる
去年に引き続き2年目の保育士試験。
仕事が忙しかったのと前年ほどの勉強モチベーションが湧かなかったのでほとんど勉強してなかったのですが、運良く筆記試験には合格しました。
実技試験は読み聞かせとピアノの弾き語りを選択し、スタジオを借りて十分にピアノの練習をしたつもりだったのですが、当日にアガってしまって失敗。読み聞かせは合格だったものの、弾き語りが3点足りずに不合格となりました。
来年こそは必ず!!!
というわけで、2014年も色々な方にお世話になりました。
最近はエンジニアとしての成長が極端に鈍化していてかなりマズい状況なので、プライベートでの勉強時間をしっかり確保しようと思います。
2015年もよろしくお願いいたします。
Limechatのテーマをカスタマイズしてみた
MacのLimechatではデフォルトのLimelightというテーマを使っていたのですが、使っているうちに下記のような不満や要望が出てきたのでカスタマイズしてみました。
- コピペがしにくい
- join,quit,modeなど不要なメッセージを消したい
- 常に発言の時間を表示したい
MacのLimechatはテーマのカスタマイズがCSSとyamlをいじるだけでいけるので、CSSの知識がある方なら簡単にカスタマイズできます。
カスタマイズ前後の比較はこんな感じ。
[before]
↓
[after]
Limelight_my.css · GitHub
変更点
主な変更点は上に挙げた不満の解消です。
- join,quit,mode,part,nick,replyメッセージを非表示にした
- display:block要素を削除してフラットな表示にした(行単位でコピペできる)
- 左端に時間を表示した
また、ハイライトの表示は自分の好みで少し変えました。
cssだけでなくyamlも1箇所だけ変更していて、nickname-formatを'%n: 'にしています。
JavaScriptでローカルにファイルを保存する方法(その1)
JavaScriptでローカルにファイルを保存する方法を調べたので、メモ。
動作確認はMac OS X10.9.2、Google Chrome 33で行っています(他のブラウザについては、参考リンクにもある JavaScriptからローカルファイルを作成する方法まとめ - あらびき日記 をご覧ください)。
Chromeでローカルにファイルを保存するには、File API: Writerを使います。
単純なテキストファイルをローカルに保存するサンプルは下記のようになります。
サンプルコード
<script type="text/javascript"> function writeToLocal(filename, content) { // chrome以外は弾く var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf('chrome') == -1) { alert("This Page is Google Chrome only!"); } function errorCallback(e) { alert("Error: " + e.name); } function fsCallback(fs) { fs.root.getFile(filename, {create: true}, function(fileEntry) { fileEntry.createWriter(function(fileWriter) { fileWriter.onwriteend = function(e) { alert("Success! : " + fileEntry.fullPath); }; fileWriter.onerror = function(e) { alert("Failed: " + e); }; var output = new Blob([content], {type: "text/plain"}); fileWriter.write(output); }, errorCallback); }, errorCallback); } // クオータを要求する。PERSISTENTでなくTEMPORARYの場合は // 直接 webkitRequestFileSystem を呼んでよい webkitStorageInfo.requestQuota(PERSISTENT, 1024, webkitRequestFileSystem(PERSISTENT, 1024, fsCallback, errorCallback), errorCallback); } writeToLocal("hoge.txt", "foo\n"); </script>
サンプルコードの内容について、要点だけ説明します。
ファイルシステムの要求
まず、 webkitRequestFileSystem()によってファイルシステムを要求します。
第一引数にはwindow.PERSISTENT(永続データ)、もしくはwindow.TEMPORARY(一時データ)を指定します。
ここで注意なのがPERSISTENTを指定した場合で、データ保存許可をユーザから得なくてはいけません。
サンプルコードのwebkitStorageInfo.requestQuota()がそれで、ページ表示時に最上部に許可ダイアログが表示されます。ここで一度許可すると次回以降はrequestQuota()する必要はありません。
また、TEMPORARYを指定した場合にはrequestQuota()する必要はなく、単にwebkitRequestFileSystem()を呼べばよいです。
ファイル書き込み
fs.root.getFile()すると、内部的にファイルが作成されます。
最後に、Blobデータを作成し、fileWriter.write()でファイルに書き込みを行います。シンプルですね。
ただ、ここでもハマりポイントがあって、Blob作成にはBlob()を使いましょう。
他のページだとBlobBuilder()やWebKitBlobBuilder()を使っているものが多いですが、BlobBuilder()は非推奨、WebKitBlobBuilder()はChromeから既に削除されています!
作成されたファイルは、/Users/USERNAME/Library/Application Support/Google/Chrome/Default/File System/
以下に保存されます。
PERSISTANTで保存した場合は、上記ディレクトリ/(数字3文字のディレクトリ)/p
TEMPORARYで保存した場合は、上記ディレクトリ/(数字3文字のディレクトリ)/t
以下に保存されます。
その中で、さらに(数字2文字のディレクトリ)/(数字列だけの拡張子なしファイル)
に保存されます。なので、実はwriteToLocal()の第一引数で指定したファイル名はほぼ無意味です。
ただ、同じファイル名を指定すると同じファイルに保存され、違うファイル名を指定すると、数字が1増えたファイル名で保存されるようです。
まとめ
JavaScript+Google Chromeでファイル保存する方法はあるものの、ファイルの保存先が自由に選べなかったり(そりゃそうだが)、ファイル名を指定できなかったりで、使い勝手が悪いです。
ファイル保存先を指定するリンクを作成して、そこからファイルを保存する方法があるので、そのうちそのエントリも書きます。
2013年を振り返る
今年はゆっくりと実家で年越しを過ごしています。
社会人3年目になりましたが、1年目、2年目ともに年越しを会社で過ごしていたので、なんか変な心地です。
1年目、2年目は仕事第一で、目の前の仕事をやり切ることだけ考えて日々過ごしていたような気がしますが、3年目になって仕事にも余裕ができてきたせいか、立ち止まって今後のことを考えることが増えました。
大晦日というよい機会なので、今年一年を振り返ってみます。
長文になりそうなので、鼻くそほじりながら斜め読みしていただければと思います。
長くお世話になったチームからの卒業
新卒で研修が終わってから今年の半ばくらいまで、同じチームにお世話になっていました。
尊敬すべき先輩方からWebエンジニアとしての基礎を教わり、2年目初めからはリードエンジニアとしてチームマネジメントや新人の育成を(拙いながら)やってきました。
リードエンジニアになって数ヶ月は、マネジメントと新人教育に加えてプレイヤーとしてのタスクも前以上にこなしていたので、精神的にも体力的にも鍛えられました。
ただ、今年に入ってからは周りを見る余裕も生まれ、「自分がいなくても問題ないチーム作り」を常に意識して、自分のタスクをドキュメント化して他メンバーに任せることもできてきました。
入社以来目の前の仕事に全力投球してくるだけだった自分が、ライフワークバランスやエンジニアとしての今後のキャリアプランについて考えるようになったのもこの頃です。
自分から積極的に社外の人と会う機会を作ったのは想像以上に学びが多く、自分や自分の勤める会社を客観的視点で見る重要さを知りました。
そんなタイミングで、社内でタスクフォース的なプロジェクトが立ち上がり、その一員となることが決まりました。
タスクフォースプロジェクトへの参加
様々なチームからエースメンバーが集められたプロジェクトで、短期間に高いと量と質のタスクを次々にこなすミッションでした(詳細は割愛)。
チーム結成からすぐに成果を出さなければいけない中、チームに合った開発スタイルやコミュニケーションの取り方を模索しながらPDCAを素早く回す日々が非常に刺激的でした。
- リリーススケジュールが決まっている中で、最大限のアウトプットを出すためには、何をし、何をしないか
- タスクやバックログをどう管理するか
- 他チームとのコミュニケーションの取り方はどうするか、事前に合意を取るべきものはなにか
などなど。
「自分の職種を超えて、いかにチームとしてよいアウトプットをできるか」をチーム全員が自主的に考える、プロフェッショナルな集団だったと感じます。
(番外編)保育士試験の受験
このプロジェクト中、プライベートな時間を使って保育士試験の勉強を始めました。
詳細は怠惰なWebエンジニアが保育士試験を受けてみた話 - るさんちまんに書いた通りですが、自分の好きなことを勉強するというのはいいものですね。
エンジニアとして、エンジニアリングの勉強をするのも大事ですが、人間としての幅を広げる意味でそれ以外の勉強をすることも同じくらい大事だと思っています。
今回は結果として不合格だったので、来年こそは合格します。
リリース間近の案件にjoin
プロジェクトが終了し、また別のチームへ異動しました。
リリース間近の案件を扱うチームで、自分としてはサービスを新規リリースした経験がなかったので、非常にわくわくしたのを覚えています(既にリリース済)。
また、扱ったことのない技術を使っているチームだったので、エンジニアリングの幅を広げる意味でも勉強になるな、と思っています。
…案の定長文になってしまった。
というわけで、今年一年色々な方にお世話になりました。
歯に衣着せなすぎなのと、ガキっぽい性格が災いして敵を増やしまくってる気がしますが、自分の信念を曲げなければその分味方もできることも知ってるので、直すべきところは直しつつ、コアな部分はこのまま突き進もうと思います。
来年もよろしくお願いいたします。