るさんちまん

技術メモとか雑記とか

【2014年】ふるさと納税でもらってよかった食べ物/よくなかった食べ物

去年初めてふるさと納税を始めたのですが、今までやらなかったことを後悔するレベルでよかったです!

詳しい説明は下記ページに譲るとして、私が去年ふるさと納税でもらってよかった食べ物、よくなかった食べ物を書いていこうと思います*1


ふるさと納税[ふるさと寄附金]とは?本当のメリットを、実はあまり知られていないのです。 | ふるさと納税ポータルサイト「ふるさとチョイス」

 よかった食べ物

佐賀県玄海町 黒毛和牛 (10000円)

f:id:naopr:20150204155413j:plain

 すき焼きにして食べましたが、最高ですね。スーパーで売ってる高い肉よりもうまいレベル。2〜3人前くらいありました。

山形県長井市 米沢牛すき焼き・しゃぶしゃぶ用 (10000円)

f:id:naopr:20150204160122j:plain

しゃぶしゃぶして食べましたが、最高ですね。スーパーで(ry。450gなので、こちらも2〜3人前くらいでしょうか。

鳥取県境港市 境港産紅ズワイ脚肉爪肉セット (10000円)

f:id:naopr:20150204161113j:plain

蟹って1パイまるまる届いても調理したりむいたりするの面倒なんですが、これはあらかじめむいた状態で冷凍で届くので、解凍するだけで食べられます。

蟹しゃぶにして4人前くらいあり、味も満足できるレベルなのでかなりオススメです。

大阪府泉佐野市 こがしバターケーキ (5000円)

f:id:naopr:20150204160356j:plain

コーヒーと一緒に食べると激うまいです。焼き菓子なので10日ほど日持ちするのもGoodですね。

よくなかった食べ物

佐賀県玄海町 いちご「さがほのか」 (5000円)

郵送のせいかもしれませんが、届いたときにいちごが全部潰れてしまっていました。味もスーパーのいちご以下に感じたのが残念。

鳥取県鳥取市 農家が作った「ジェラート4種類6個セット」 (5000円)

ミルクジェラート以外、口に合いませんでした。

鳥取県琴浦町 ふろしきまんじゅう (3000円)

味は悪くないのですが、到着日=賞味期限、というのがかなり厳しいです。16個入りのまんじゅうを1日でおいしく消費できる方であればよいかもしれません。


さーて、確定申告しなきゃだ。

*1:画像はふるさとチョイスより引用

2014年を振り返る


明けましておめでとうございます。
去年も一年の振り返りエントリ(2013年を振り返る - るさんちまん)を書いたので、今年も書いてみようかと思います。

仕事

部署異動やチーム異動もなく、バタバタしていた2013年とはうってかわってまた腰を落ち着けて運用開発を行っていました。
それほど書くこともないのですが、やったことをいくつか書き残しておきます。

フロントエンドをかじる

入社してから今まで、業務で書くコードはほとんどサーバサイドでたまにHTMLをちょろっといじる程度だったのですが、チーム内開発ツールを作成するにあたってHTML、CSSJavaScriptをある程度の量書けたのはいい経験でした。
ただ、ほとんどなにも知らない状態からコードを書いていたので、今見たらだいぶコードがひどい…。

連勤術師になる

11月、12月はひたすら、ただひたすら働いていました。
新規開発案件を通常の倍以上のスピードで企画・開発し、入社以来一番働いた2ヶ月になりました。
途中体調を崩してしまってつらい時期もありましたが、大きな障害もなくリリースまでこぎつけ、かつユーザに喜んでもらえたので、今となってはいい思い出です(もうこれっきりにしたいですが)。

プライベート

旅行によくいく

2014年はよく旅行にいく一年でした。

  • 1月:某アイドルグループのライブで名古屋へ
  • 3月:日本酒を飲みに新潟へ
  • 5月:GWにシンガポール
  • 7月:まぐろを食べに伊豆の国市
  • 8月:某アーティストのライブで札幌へ
保育士試験にまた落ちる

去年に引き続き2年目の保育士試験。
仕事が忙しかったのと前年ほどの勉強モチベーションが湧かなかったのでほとんど勉強してなかったのですが、運良く筆記試験には合格しました。
実技試験は読み聞かせとピアノの弾き語りを選択し、スタジオを借りて十分にピアノの練習をしたつもりだったのですが、当日にアガってしまって失敗。読み聞かせは合格だったものの、弾き語りが3点足りずに不合格となりました。
来年こそは必ず!!!

というわけで、2014年も色々な方にお世話になりました。
最近はエンジニアとしての成長が極端に鈍化していてかなりマズい状況なので、プライベートでの勉強時間をしっかり確保しようと思います。

2015年もよろしくお願いいたします。

Limechatのテーマをカスタマイズしてみた

MacLimechatではデフォルトのLimelightというテーマを使っていたのですが、使っているうちに下記のような不満や要望が出てきたのでカスタマイズしてみました。

  • コピペがしにくい
  • join,quit,modeなど不要なメッセージを消したい
  • 常に発言の時間を表示したい

MacLimechatはテーマのカスタマイズがCSSyamlをいじるだけでいけるので、CSSの知識がある方なら簡単にカスタマイズできます。
カスタマイズ前後の比較はこんな感じ。
[before]


[after]

Limelight_my.css · GitHub

変更点

主な変更点は上に挙げた不満の解消です。

  • join,quit,mode,part,nick,replyメッセージを非表示にした
  • display:block要素を削除してフラットな表示にした(行単位でコピペできる)
  • 左端に時間を表示した

また、ハイライトの表示は自分の好みで少し変えました。
cssだけでなくyamlも1箇所だけ変更していて、nickname-format'%n: 'にしています。

テーマの変更方法

  1. /Users/ (ユーザ名) /Library/Application Support/LimeChat/Themes/以下に上記gistからCSSファイルを持ってきて、Limelight_my.cssのような名前で保存。
  2. 上記ディレクトリに、デフォルトテーマのディレクト*1からLimelight.yamlをコピーして(cssと同じ名前).yamlで保存。
  3. Limechat->[Preferences]->[Theme]->[Current theme]で自分の作成したテーマを設定。

Limechatをよく使う方は自分でテーマをいじると捗りますよ!

*1:自分の環境だと/Applications/LimeChat_2.37/LimeChat.app/Contents/Themes/

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

プロジェクトが終了し、また別のチームへ異動しました。
リリース間近の案件を扱うチームで、自分としてはサービスを新規リリースした経験がなかったので、非常にわくわくしたのを覚えています(既にリリース済)。
また、扱ったことのない技術を使っているチームだったので、エンジニアリングの幅を広げる意味でも勉強になるな、と思っています。

…案の定長文になってしまった。

というわけで、今年一年色々な方にお世話になりました。
歯に衣着せなすぎなのと、ガキっぽい性格が災いして敵を増やしまくってる気がしますが、自分の信念を曲げなければその分味方もできることも知ってるので、直すべきところは直しつつ、コアな部分はこのまま突き進もうと思います。

来年もよろしくお願いいたします。

FirefoxからGoogle Chromeへのブックマーク移行

FirefoxからGoogle Chromeにブックマークを移行する際には、

  1. Firefoxのブックマークをhtmlでエクスポート
  2. Google Chromeでhtmlファイルをインポート

という手順で行えますが、ブックマークツールバーにあるブックマークはこの方法では移行できないようです。
なので、ブックマークツールバーの内容をブックマークメニュー配下に移動(もしくはコピー)してあげるとよいです。

実行環境は下記です。

参考:

YAPC::Asia Tokyo 2013 に参加してきました

タイトルの通り、YAPC::Asia Tokyo 2013に参加してきました!
前夜祭と1日目の参加でしたが、簡単に感想なんかをまとめたいと思います。

前夜祭

LTソン自体参加するのが初めてだったのですが、酒を飲みながらgdgdと発表に耳を傾けるというのは面白いですね。
個人的には、Acme::Nyaの発表が面白かったです。
会場の雰囲気は(良くも悪くも)超内輪ノリだなーという印象でした。
初参加の人は、ノリについていけるかどうかで好き嫌いがハッキリ分かれそうです。
自分には少し合わなかったので、@bayashiさんのラーメントークを聞いて、ラーメン離脱してしまいました。

1日目

@tamaclawさんの大規模Perl初心者研修を支える技術、@akiymさんのHerokuで学ぶ、初めてのPerl - Speaker Deck、@koba04さんの個人で出来るWebサービスの作り方(YAPC::ASIA 2013) - Speaker Deckを見てきました。
エンジニア研修の話は、大枠の内容は知っていたものの、細かい部分まで聞けてよかったです。特に、「プログラミング初心者はオブジェクト指向の理解が最も難しい」というのは、実際に研修をやってみないと見えてこないことだと感じました。
情報工学を学んでないだけならまだしも、プログラミングすらしたことのない新卒をエンジニアとして育てるのは大変だなという印象です。
また、残りの2発表はWebサービスを作るモチベーションアップ目的で話を聞いたのですが、非常に良い刺激になりました。どちらも資料がわかりやすく、後で何度も見返すことになりそうです。

雑感

  • 技術を学ぶだけでなく、モチベーションアップにめちゃくちゃ役立つ
  • 勉強会というよりお祭りという雰囲気なので、参加の敷居は低い
  • 初参加でぼっちだと寂しい

来年に向けて

  • 来年は懇親会に出る
  • LTできるくらいのネタはしこんでおきたい
  • 来年も参加したい!