リファクタリング=読みやすいプログラムを書こう!

リファクタリング=読みやすいプログラムを書こう!

JavaScript学習に役立つお話がありました。 「リファクタリング」でプログラムを改善する練習について紹介されています。 www.webprofessional.jp (前回に引き続き、今回もこのお話から学んでみたいと思います。) jsstudy.hatenablog.com アプリ作成の進め方として、以下の手順が紹介されています。 最初に基本を身に着けよう 計画を立てる コード無しで書いていく 小さな部分に分けて製作する 各パーツを結合する 実験とテスト 外部の助けを求める コードのリファクタリング(再構築) リファクタリングとは? reの意味 - 英和辞典 Weblio辞書 re‐ 【…

NO IMAGE

アメリカで何年の4月1日がサマータイムだったか調べてみた

日付関連のテストケースを書いていたら、ロサンゼルスの1970年4月1日0時はサマータイムではないけれど、2012年4月1日0時はサマータイムであることに気づきました。何かの間違いじゃないかと思って改めて調べてみたところ、ロサンゼルスで4月1日がサマータイムだった年は以下の5つの時期に含まれることがわかりました。


  • 1918-1919年
  • 1942-1945年(War Time)
  • 1948年
  • 1974-1975年
  • 2007年以降、現在まで

このうち、1番目は第一次世界大戦中に制定された「標準時間法」 (Standard Time Act)によるものです。アメリカでは初のサマータイム導入でしたが、不評のため2年で廃止されたとか(おそらく終戦の影響もあったでしょう)。


2番目は第二次世界大戦時の省エネ対策として通年の「War Time」が実施されたもので、1942年2月9日から1945年9月30日まで継続的に運用されました。


3番目は1948年にカリフォルニアで電力危機があり、その対策でカリフォルニア州のみ3月14日から通年のサマータイムが実施されたようです。このころ各州バラバラでサマータイムを実施していたようですが、開始時期は大半が4月でした。


4番目は第一次オイルショック(1973年)によるもの。1967年から全米でサマータイムが実施されていますが、この開始時期は4月第1週からでした。しかし、オイルショックの影響により1974年は1月6日から、1975年は2月23日からサマータイム開始だったとのこと。


5番目は「包括エネルギー政策法」(Energy Policy Act of 2005)が2007年から施行され、サマータイム開始が4月第1週から3月第2週にズレたことによるもの。


サマータイムについて調べていたはずが、歴史の教科書に載っているような出来事が関係してくるのは面白いですね。


上のリストを作る方法

上記リストは以下のPHPスクリプトを使って求めました。


<?php
for ($i = 1900; $i <= 2017; $i++) {
    $dt = new DateTime("$i-04-01 00:00:00",
                       new DateTimezone("America/Los_Angeles"));
    var_dump($dt->format("c T"));
}

このスクリプトの出力を下記のようにgrepすれば標準時でないもの(≒夏時間)が抜き出せます。


$ php dst-investigate.php | grep -v ST
string(29) "1918-04-01T00:00:00-07:00 PDT"
string(29) "1919-04-01T00:00:00-07:00 PDT"
string(29) "1942-04-01T00:00:00-07:00 PWT"
string(29) "1943-04-01T00:00:00-07:00 PWT"
string(29) "1944-04-01T00:00:00-07:00 PWT"
string(29) "1945-04-01T00:00:00-07:00 PWT"
string(29) "1948-04-01T00:00:00-07:00 PDT"
string(29) "1974-04-01T00:00:00-07:00 PDT"
string(29) "1975-04-01T00:00:00-07:00 PDT"
string(29) "2007-04-01T00:00:00-07:00 PDT"
string(29) "2008-04-01T00:00:00-07:00 PDT"
string(29) "2009-04-01T00:00:00-07:00 PDT"
string(29) "2010-04-01T00:00:00-07:00 PDT"
string(29) "2011-04-01T00:00:00-07:00 PDT"
string(29) "2012-04-01T00:00:00-07:00 PDT"
string(29) "2013-04-01T00:00:00-07:00 PDT"
string(29) "2014-04-01T00:00:00-07:00 PDT"
string(29) "2015-04-01T00:00:00-07:00 PDT"
string(29) "2016-04-01T00:00:00-07:00 PDT"
string(29) "2017-04-01T00:00:00-07:00 PDT"

上のように、タイムゾーン名がPDT(Pacific Daylight-saving Time、太平洋夏時間)やPWT(Pacific War Time、太平洋戦争時間)などと表示されているのがわかります。


PHPの日付関数はTime Zone Databaseを元にしているので、他の言語でも同じ結果を得る方法があると思います。


感想など

調べてみると、省エネ対策としてカジュアルにサマータイムを実施している歴史がわかって面白いですね。サマータイムが身近でない日本人の感覚だと「本当に省エネ効果あるの?」という気もしちゃいますけど、きっと効果があるからやってるんでしょう。


また、州ごとに夏時間の適用状況が違うのもアメリカならではです。上のスクリプトを America/Detroit とか America/Phoenix などで試すと全然違う結果になって面白いです。


参考URL

参考書の選び方

参考書の選び方

勉強で使う本(教科書、参考書、専門書)を検討するときに、目次情報の提供は役に立たないという意見がありました。 皆さんは勉強で本を読むとき、どんな選び方をしていますか? 本の目次情報の価値 目次は判断材料 索引は利便性に直結 最初は薄い本、次に厚い本 解釈学的循環の解消 何度も使う辞書類は手元に置く パラシュート学習法 同じ項目を比較する 正誤表(誤植)を確認する 著者のSNS 翻訳本は原書も読んでみる 目次の確認が不要な本 本を読んだ後のフォロー 著作権法とフェアユース(公正利用) ブログのバイラルマーケティング 本の目次情報の価値 関数型プログラミングの基礎 JavaScriptを使って学ぶ…

プログラマーの英語学習法

プログラマーの英語学習法

プログラミング学習をやっていると、英語は避けて通れない道ですね? プログラミング言語は、ほとんどアルファベット(英語)でコードを記述 プログラミングの用語は、ほとんど英語由来の単語 参考資料の原典は、ほとんど英語(コンピューターは欧米が発祥のため?) プログラミングの世界に一歩足を踏み込むと英語の嵐なので、英語の理解はプログラミング学習の一助となります。 プログラミングで困らない程度に英語をマスターする方法を検討してみました。 日本人プログラマーの英語は下手でもOK ブロークン・イングリッシュから始めよう! 読む→書く→聞く→話す、の順番で攻略 英語学習情報 英語教材 英文法 英単語 英会話 …

【炎上を】リスキーな案件における、やわらかいプロジェクト管理【回避する】

【炎上を】リスキーな案件における、やわらかいプロジェクト管理【回避する】

研究開発部 兼 クックパッド料理教室の伊尾木です。 暖かくなったり、寒くなったりと気温差が激しいですが、皆さんお体は大丈夫でしょうか。 ところで、最近クックパッド料理教室で、ビジネスモデル変更に伴うリニューアルプロジェクトを実施しました。 (ビジネスモデル変更に伴う全面リニューアル) 私はPMと開発リーダーを担当したのですが、そこで実施した「やわらかいプロジェクト管理」についてご紹介したいと思います。 炎上しそうな予感がいっぱい! ビジネスモデル変更に伴うリニューアルって聞いただけで炎上の予感で胸が膨らみますね。 ビジネスモデルの変更だけでも大きな話なのに、システムの全面刷新まで同時に実施した…

MySQL with InnoDB のインデックスの基礎知識とありがちな間違い

MySQL with InnoDB のインデックスの基礎知識とありがちな間違い

こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説しま…

Web サービスの完全 HTTPS 化

Web サービスの完全 HTTPS 化

インフラストラクチャー部長の星 (@kani_b) です。 2017年1月5日をもって、クックパッド における全ページで HTTPS が使われるようになりました。 完全 HTTPS 化をするにあたり、その理由や具体的な進め方について紹介します。 以前 SRE Tech Talks #2 にて一部発表した内容も含みますので、ご興味のある方はあわせてスライドもご覧ください。 完全 HTTPS 化に踏み切った理由 以前のクックパッドは、ログインや登録情報の参照など、いわゆる個人情報や認証情報を扱う箇所のみに HTTPS が使われていました。 このように「必要な箇所にのみ HTTPS を使う」構成は、…

nvm(Node Version Manager)でWindowsにNode.jsをインストールする

nvm(Node Version Manager)でWindowsにNode.jsをインストールする

WindowsにNode.jsをインストールするとき、Node.jsのバージョン管理ツールとして「nodist」を使ってみました。 「nvm」(Node Version Manager)というツールもあるので、nvmの使い方も調べてみました。 nodistの使い方 nvmとは? nvmw nvm-windows nvm-windowsのインストール nvm-windowsインストーラーのダウンロード nvm-windowsのインストール nvm-windowsの動作確認 再インストール nvmでNode.jsをインストール nvmのコマンド Node.js 32ビット版を指定する方法 まとめ …

Capistranoを使ってS3等からpull型デプロイするgemを書いた、ほか

Capistranoを使ってS3等からpull型デプロイするgemを書いた、ほか

こんにちは。ゲーム事業本部開発基盤部の池田(@progrhyme)です。先日、Capistranoと組み合わせて利用できるgemをいくつかRubyGemsに公開しました。 * https://rubygems.org/gems/capistrano-net_storage * https://rubygems.org/gems/capistrano-net_storage-s3 * https://rubygems.org/gems/capistrano-deploy_locker 今回は、これらについて紹介します。

– PR –
– PR –