2016/04/17

問い合わせフォームを作ったら企業から製品レビューの依頼がきた

2月頃にブログ右側に問い合わせフォームを設置した。
するとすぐに、とある問い合わせがきた。

Youのサイトで弊社の製品を紹介していただけないでしょうか?
ご検討よろしくプリーズ

要約するとこんな感じのメッセージだった。

どうやら中国系企業の日本担当の方っぽい。
企業名でググってみると、他のブロガーさんたちにもレビュー依頼をしているらしい。
最初は怪しいと思いつつも、依頼がくるのはブログが評価されているって意味だし嬉しかった。

ということで、先方とやりとりを開始し、メールで3往復したところで依頼を承諾。

2016/04/09

【JavaScript】GMT・UTCとローカル時刻を変換にハマりかけた

サーバサイドではグリニッジ標準時を使っていて、クライアントサイドではローカル時刻(日本なら+09:00)を表示したいときに、どうやって相互変換するか考えているときにハマりかけた。

いろいろ考えた結果、getTimezoneOffsetで時差を求めて、その分時間を進めたり、戻したりすればいいのかという結論にたどり着いたのだが、もっと簡単な方法を見つけたのでまとめておく。

2016/04/03

やめる勇気、断る勇気

以前SIerに勤めていた頃に社内報に寄稿した記事を一部修正して公開いたします。

この時期、新卒でSIerに入社された方もいると思います。
SIerにいると必ず炎上プロジェクトに巻き込まれ「やることが多すぎて時間が足りない」という事態に陥ることでしょう。そんなときにこの記事を思い出してください。



やめる勇気、断る勇気


働けば働くだけ評価される、そんな時代は終わりました。

今のエンジニアに求められていることは「短期間で製品を提供し続ける」ことです。
だからこそ「やめる勇気・断る勇気」が必要なのです。

onLoadとDOMContentLoadedの違いと実行順序

photo by Judit Klein

いままでHTMLの読み込みが完了してから行う初期処理は、すべてonLoadイベントで行っていた。でもHTML5からはDOMContentLoadedというイベントが使えるようになったらしい。


onLoad と DOMContentLoaded


onLoadとDOMContentLoadedの1番の違いは、イベントが実行されるタイミング。

onLoad

onLoadは、すべてのリソースが読み込まれたら発火するイベント

たとえばHTMLにクッソ重い画像が含まれていた場合、その画像の読み込みが終わるまでイベントが発火しない。


DOMContentLoaded

DOMContentLoadedは、HTMLの解釈が終了した時点で発火するイベント

HTMLが読み込まれてさえいれば、リソースを読み込む前に実行される。
だからクッソ重い画像があったとしても、その読み込みを待たずして処理を続行することができる。

用途としては、リソースの読み込みは後回しにして、JavaScriptを読み込みたい時につかう。
ただし、DOMContentLoadedはHTML5から追加されたイベントのため、古いブラウザ(IE8やSafari3.1など)では使用することができないので注意。

2016/04/02

JavaScriptでCSVファイルなどを文字化けさせずに出力する方法

JavaScriptでCSVやテキストファイルなどを出力したとき、環境や見るツールによっては文字化けしてしまう。たとえばCSVで出力して、テキストエディタでは読めるけど、Excelで開くと文字化けするなど。

結論からいうと、テキストの先頭にBOMをつければ解消される。
ということで、各ブラウザ(IE, Safari, Firefox, Chrome, Opera...)でファイルを出力するときに文字化けさせない方法をまとめる。



BOM(Byte Order Mark)とは


そもそもBOMとはなんぞや?

Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

バイトオーダーマーク - Wikipedia

具体的に説明すると、Unicodeが登場したころ各国でいろんな文字コードが使われていた。日本ならSJIS、アメリカならASCIIといった具合に。

そこでUnicodeなのかSJIS,ASCIIなのかを明確に区別する必要があり、テキストの先頭に特定のコードを埋め込み区別できるようにしていた。そのコードがBOM。
ちなみにUTF-8の場合は「0xEF 0xBB 0xBF」という3バイトを先頭につける。