ZonedDateTimeから日付の文字列を取り出す

よく使うのでメモ。

@ val d = ZonedDateTime.now(ZoneId.of("UTC"))
d: ZonedDateTime = 2018-02-09T06:36:14.410Z[UTC]

"UTC"の部分には"Asia/Tokyo"などタイムゾーンの文字列を入れられる。

minusDays plusHoursなどで演算ができる。

@ d.minusDays(1)
res5: ZonedDateTime = 2018-02-08T06:36:14.410Z[UTC]

フォーマッターを定義する。

@ val f = DateTimeFormatter.ofPattern("yyyy-MM-dd")
f: DateTimeFormatter = Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)

yyyy/MM/dd HH:mm:ss が年月日時分秒に対応する。

あとはZonedDateTimeのインスタンスにフォーマッターを渡せばOK

@ d.format(f)
res8: String = "2018-02-09"

参考

qiita.com

CircleCI 2.0 ミニマムスタート

2.0 Docs - CircleCI

version: 2
jobs:
  build:
    docker:
      - image: circleci/openjdk:8-jdk

    steps:
      - checkout
      - run: sbt test

最低限のコンポーネントはこれだけ。

キャッシュを使うときは save_cacherestore_cacheをstepsに追加する。

- save_cache:
  paths:
    - ~/.m2
    - ~/.sbt
  key: v1-dependencies-{{ checksum "build.sbt" }}
- restore_cache:
  keys:
    - v1-dependencies-{{ checksum "build.sbt" }}

ジョブの名前は buildがデフォルト。Workflowがない場合はこの名前のジョブが必須。それ以外のジョブ名をつけた場合はAPIからキックできる。

Running Jobs With the API - CircleCI

curl -u ${CIRCLE_API_TOKEN}: \
     -d build_parameters[CIRCLE_JOB]=deploy_production \
     https://circleci.com/api/v1.1/project/<vcs-type>/<org>/<repo>/tree/master
  • vcs-typeはgithub
  • CIRCLE_API_TOKENはProject Settingsの Permissions -> API Permissions からCreate Tokenして入手できる。

外部URLのレイテンシを計測するhttping

d.hatena.ne.jp

macでもbrewで入れられる。

brew install httping

今回はcircleci.comのレイテンシが知りたかった。日本のGCPにあるサーバーに対してGatlingを実行したらレイテンシがすごく高くなってしまったので。

ᐅ httping circleci.com 
PING circleci.com:80 (/):
connected to 35.170.12.60:80 (385 bytes), seq=0 time=496.61 ms
connected to 52.0.187.225:80 (385 bytes), seq=1 time=376.41 ms
connected to 52.45.126.22:80 (385 bytes), seq=2 time=456.91 ms
connected to 34.196.235.151:80 (385 bytes), seq=3 time=355.94 ms
connected to 35.170.12.60:80 (385 bytes), seq=4 time=406.11 ms
^CGot signal 2
--- http://circleci.com/ ping statistics ---
5 connects, 5 ok, 0.00% failed, time 6674ms
round-trip min/avg/max = 355.9/418.4/496.6 ms

けっこうレイテンシ高い。

Shallow cloneを使うと素早くcloneできる

circleci 2.0を使おうとしている。

engineer.crowdworks.jp

デフォルトのcheckoutステップは、clone & fetchでチェックアウトするようになっています。そして、clone済みのリポジトリをキャッシュしておき、2回目以降はそれを用いるようにします。3 しかし、リポジトリが巨大だとキャッシュのリストアに時間が掛かってしまいます。 そこでshallow cloneで取得するようにしたところ、キャッシュが不要なほどに速くなりました。

shallow cloneというのがあるのを知った。

kakakakakku.hatenablog.com

qiita.com

koduki.hatenablog.com

場合によってはキャッシュ使うよりshallow cloneするほうが速いケースもありそう(併用できる?)

サブカテゴリ内でトップNでフィルタする

Tableauを使っていて、あるカテゴリのサブカテゴリの中でトップNでフィルタしたい、というケースがある。 例えば広告配信でいうとアドグループxメディアのImp数、Click数などの指標をみるときに、「アドグループ単位でのメディア配信実績トップ10」とかを見たいことがある。

カテゴリ内のトップ N を探す | Tableau Software

index() を使う。

  • 計算フィールドを新しく作って、それを index()とし、サブカテゴリのカラムの前に置く。
  • そのフィールドをいったん「不連続」に変更する。(なぜなのかは不明)
  • 表計算の編集」を選択し、任意の並び替えを設定する。
    • 再開間隔、では大カテゴリのほうを選ぶ。これによって大カテゴリごとにインデックスが1からスタートするようになる。
  • フィールドを「連続」に戻し、フィルタへドラッグする。
  • 任意のデータ個数で絞る。

GUIでクエリするとき、StandardSQLとして実行する

BigQueryでクエリを打つとき、まずはGUIから試すことが多いけどGUIだとデフォルトはLegacySQLとなっていて、StandardSQLに切り替えるにはOptionsのUse Legacy SQLチェックボックスをオフにしないといけない。

それは面倒なので、SQL文の冒頭に #standardSQL とつければStandardSQL文として解釈してくれる。

標準 SQL を有効にする  |  BigQuery  |  Google Cloud Platform

#standardSQL
SELECT  jsonPayload.message FROM foo.bar LIMIT 1000

江副浩正

江副浩正

江副浩正

年の瀬になぜこれをたまたまKindleで買ったのか分からない。けど夢中になって一気に読破してしまった。 江副氏との接点が1つだけあって、東京大学新聞OBだということだ。ぼくも大学新聞の営業を少ししていたので親近感を持って読んだ。

自ら機会を創り出し、機会によって自らを変えよ

江副氏自身の著書も読みたくなった。