コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Asia/TokyoなどのTimeZoneの定義情報は現在IANAが管理している

Asia/Tokyo 等の文字列定義ってどこにあるのかを調べる。

出典/どこにあるか

IANA — Time Zone Database

上記のページに記載がある

The Time Zone Database (often called tz or zoneinfo) contains code and data that represent the history of local time for many representative locations around the globe. It is updated periodically to reflect changes made by political bodies to time zone boundaries, UTC offsets, and daylight-saving rules.

機械的に和訳すると以下

タイムゾーンデータベース(tzまたはzoneinfoと呼ばれることが多い)には、世界の代表的な多くの場所のローカルタイムの歴史を表すコードとデータが含まれています。このデータベースは定期的に更新され、タイムゾーンの境界、UTCオフセット、サマータイムのルールなど、政治的機関による変更を反映しています。

上記の出典ページに行くと、タイムゾーンデータが固められた圧縮ファイルがあり、その中に各タイムゾーンの定義情報が格納されている。

管理の定義

なお、管理をどのように行うかはRFCにまとまっている。

RFC 6557: Procedures for Maintaining the Time Zone Database

リストはどこを見るといいのか

ファイルの情報が一次ソースではあるが、wikipediaにリスト状で見れる形になっているので、探すときはこちらの方便利

List of tz database time zones - Wikipedia

関連リンク

GitHubでPullRequestにCommitがされたらReviewRequestがリセットされる機能がある

「レビュー後に修正したやつがapproveしてないのにマージされている!!!」みたいのを防ぐための設定

対応ヘルプ

ブランチ保護ルールを管理する - GitHub Docs

使い方

ブランチのTOP > Settings > Branches > Add rule のボタンを押すとブランチ運用のルールを設定できる。

その中でブランチのマージに必要な最低人数を設定できる設定があるが、そこに加えて

Dismiss stale pull request approvals when new commits are pushed

というルールがあり、これが有効化されていると、コミットが修正されるとapproveしている状況が強制的に解除される。

公式ドキュメントから画像を転載すると以下の部分を設定すると反映される。

参考リンク

要配慮個人情報とは何かざっくりまとめる

ユーザ情報を管理する上で切っても切り離せない、個人情報と要配慮個人情報の話に関してざっくり理解をする。

出典

個人情報の保護に関する法律 | e-Gov法令検索

個人情報と要配慮個人情報

個人情報とは

法令内で個人情報の定義があり、それは以下。

第二条 この法律において「個人情報」とは、生存する個人に関する情報であって、次の各号のいずれかに該当するものをいう。
一 当該情報に含まれる氏名、生年月日その他の記述等(文書、図画若しくは電磁的記録(電磁的方式(電子的方式、磁気的方式その他人の知覚によっては認識することができない方式をいう。次項第二号において同じ。)で作られる記録をいう。第十八条第二項において同じ。)に記載され、若しくは記録され、又は音声、動作その他の方法を用いて表された一切の事項(個人識別符号を除く。)をいう。以下同じ。)により特定の個人を識別することができるもの(他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを含む。)
二 個人識別符号が含まれるもの - 個人情報の保護に関する法律 | e-Gov法令検索

補足のための括弧書きが多いが

  1. 当該情報に含まれる氏名、生年月日その他の記述等により特定の個人を識別することができるもの
  2. 個人識別符号が含まれるもの

この2つが個人情報にあたり、2の「個人識別符号」に関してはこの文章のあとに定義があり

この法律において「個人識別符号」とは、次の各号のいずれかに該当する文字、番号、記号その他の符号のうち、政令で定めるものをいう。
一 特定の個人の身体の一部の特徴を電子計算機の用に供するために変換した文字、番号、記号その他の符号であって、当該特定の個人を識別することができるもの
二 個人に提供される役務の利用若しくは個人に販売される商品の購入に関し割り当てられ、又は個人に発行されるカードその他の書類に記載され、若しくは電磁的方式により記録された文字、番号、記号その他の符号であって、その利用者若しくは購入者又は発行を受ける者ごとに異なるものとなるように割り当てられ、又は記載され、若しくは記録されることにより、特定の利用者若しくは購入者又は発行を受ける者を識別することができるもの

一はDNAや指紋の情報などを電子データに置き換えたものを想定しており、二に関しては世の中のサービスに利用する番号や文字列(ex.免許証の番号、マイナンバーカードの番号)を指している。

要配慮個人情報とは

要配慮個人情報は上記の個人情報よりも更に気を払う必要にある個人情報のこと。どのようなものが対象かというのを法令から引用すると以下。

この法律において「要配慮個人情報」とは、本人の人種、信条、社会的身分、病歴、犯罪の経歴、犯罪により害を被った事実その他本人に対する不当な差別、偏見その他の不利益が生じないようにその取扱いに特に配慮を要するものとして政令で定める記述等が含まれる個人情報をいう。

上記に記載のあるとおり主眼としているところはこの内容が知られてしまうことで不当な扱いを受ける恐れのある情報のことを指す。

金融分野における機微情報との違い

要配慮個人情報と似た概念として金融関連で「機微(センシティブ)情報」としてガイドラインを設けている

金融分野における個人情報保護に関するガイドライン

この機微情報=要配慮個人情報という観点が成立するわけではなく、部分的に違う部分があるので気をつけること。なお、違いに関しては以下のサイトでまとまっているので参考のこと。

改正個人情報保護法:機微(センシティブ)情報と要配慮個人情報(規定例も紹介)(3月26日修正版) | 弁護士法人 三宅法律事務所

参考サイト

BigQueryでTIMESTAMPをJSTの文字列に変換する

書き方をいつも忘れてしまうのでメモ的投稿。

前提条件

  • STANDARD SQLです(記載タイミングでレガシーのほうを使っているほうが稀かなと思いますが念の為)

フォーマット

JSTは+9時間なので、 Asia/Tokyoタイムゾーンを使う

FORMAT_TIMESTAMP( フォーマット文字列, 対象カラム, "Asia/Tokyo")

現在時間をJST(Asia/Tokyo)の時間で出す方法

SELECT FORMAT_TIMESTAMP( "%F %T", CURRENT_TIMESTAMP(), "Asia/Tokyo") as now_timestamp_jst

参考リンク

Railsでインスタンス変数に代入することをメモ化と呼ぶのは趣の違う話なのでざっくりまとめる

表題通り違和感をまとめる。

前提としてメモ化とは

Wikipedia曰く以下の通り

メモ化(英: Memoization)とは、プログラムの高速化のための最適化技法の一種であり、サブルーチン呼び出しの結果を後で再利用するために保持し、そのサブルーチン(関数)の呼び出し毎の再計算を防ぐ手法である。 (中略) メモ化された関数は、以前の呼び出しの際の結果をそのときの引数と共に記憶しておき、後で同じ引数で呼び出されたとき、計算せずにその格納されている結果を返す。メモ化可能な関数は参照透過性を備えたものに限られる。すなわち、メモ化されたことで副作用が生じない場合に限られる。 - メモ化 - Wikipedia

ということでメソッドや関数において、同一の引数の場合は再計算せず保存した値を出すことで速度を稼ぐ手法。

Rubyの簡単な例

フィボナッチ数列の例が多いのでそれを題材とする、まずはメモ化しない例

class CalcFibonacci
  # フィボナッチ数列は1個前と2個前の合計値
  def fibonacci(n)
    # 0と1は前がないので
    if n <= 1
      n
    else
      fibonacci(n-1) + fibonacci(n-2)
    end
  end
end

これを計算結果をmemorizeすると以下

class CalcFibonacci
  def initialize
    @cache = {}
  end

  def fibonacci_with_memorize(n)
    # すでに計算済みであれば返却
    return @cache[n] if @cache.has_key?(n)
    if n <= 1
      result = n
    else
      result = fibonacci_with_memorize(n-1) + fibonacci_with_memorize(n-2)
    end

    @cache[n] ||= result
    result

  end
end

メモ化することで再計算がされなくて済む

メモ化のようでメモ化ではない例

Railsにおいて以下の動作がメモ化の例として取り上げられることがある。

def user
  @user ||= User.find(params[:id])
end

一見メモ化のように見えるが、メモ化は以下の通りなので趣が違う。

メモ化された関数は、以前の呼び出しの際の結果をそのときの引数と共に記憶しておき、後で同じ引数で呼び出されたとき、計算せずにその格納されている結果を返す。

これはparamsの値を使っている時点でクラスの状態に左右されるため、引数の値を使うという部分でことなる。そのため上記のようなRailsの例はメモ化というよりはDB読み込みのキャッシュとなる。

参考リンク

TC39とはなにかをざっくりまとめる

mozaic.fmを聞いていると登場するが、どのような組織か知らないのでざっくり調べる

出典

TC39 - Ecma International

上記の内容曰く「ECMAScriptを標準化するための専門委員会」。なおECMAは様々な技術委員会を持ち、TC39はそのうちのひとつ。

TC39がやっていること

出典サイトには以下のようなことを取り組むチームと書いてある

  • ECMAScriptの標準化維持とアップデート.
  • ECMAScriptの機能拡張ライブラリのメンテナンス.
  • 標準化された仕様を維持するためのテストスイートの提供.
  • 標準化した仕様のISO/IEC JTC 1への提供.
  • 追加の技術検討.

参考リンク

プログラミングにおけるバニラという意味をざっくり調べる

雰囲気で使っていたのでTips的な話。

出典

バニラ (ソフトウェア) - Wikipedia)

プログラミングとしてのバニラ

英和辞書で引くと形容詞としては「質素で余分なものや装飾品のない」という内容があり、プログラミングでも似た概念で利用され、「普通」の状態のままのものを表すものとして使われる。

古いとされる利用例

初出に関しては情報がないが、インターネット上に存在する例だと2002年につくられたとされるHTMLの変換ソフトウェアのマニュアル内でなにもない設定ファイルのことを BookMaster's "vanilla" DVCF macros と記載されており、2002年ごろから使われていたことがわかる。またこの使用例ではvanillaの対義語としてmoca(モカ)という表現が使われている

関連リンク