中野智文のブログ

データ・マエショリストのメモ

Azure Storage Blob に python で、stream upload

背景

Azure Storage Blobにpython で、stream upload したので、メモ。

こうした

Azure 自体触ったことないので、よくわからないが、

from azure.storage.blob import BlobServiceClient

というライブラリを使った方法(レガシーなライブラリも存在するらしい)。 詳しくは、ここを参照。

    blob_service_client = BlobServiceClient(account_url=AZURE_STORAGE_ACCOUNT_STRING)
    blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=BLOB_NAME)
    blob_client.upload_blob(sys.stdin.buffer, length=length)

ここで、AZURE_STORAGE_ACCOUNT_STRINGは、然るべき方法で取得した文字列(実は知らない)。 CONTAINER_NAMEはコンテナ名の文字列、BLOB_NAME はblobの文字列。 sys.stdin.buffer は標準入力のバイナリ。 大切なのは、length 。これがないと、エラー。 ストリームなのに、サイズが分かってないとダメ。これは仕様(書いてないけど)としては厳しいなあ…

まとめ

stream upload したければ、サイズを先に調べて、lengthに渡す。

リポジトリに接続できませんでした cloud source repositories

背景

Cloud Build 使おうと思ったけど、github のprivate repositories を使うのは、Cloud KMSなどのサービス使うから嫌だなあと思っていたら、

GitHub リポジトリのミラーリング  |  Cloud Source Repositories のドキュメント  |  Google Cloud

という方法もあってそれをやろうとしたら、

f:id:nakano-tomofumi:20200223224925p:plain
リポジトリに接続できませんでした

解決策

Cloud Source Repositories にとりあえず、空でいいのでレポジトリを一つ作る。

リポジトリの作成はこちらから https://source.cloud.google.com/repos?hl=ja

BigQuery で最大最小が overlap しているものをまとめる(その最大最小を得る)

背景

最小と最大のペアの集合があるとする。

例えば、[最小, 最大]とすると、

[1, 2], [3, 4], [4, 5], [6, 7], [6, 8], [9, 10]

というような集合。

[3, 4], [4, 5]

は、まとめて、

[3, 5]

にしたい。

他にも、

[6, 7], [6, 8]

も、まとめて、

[6, 8]

にしたい。

最終的に、

[1, 2], [3, 5], [6, 8], [9, 10]

と出力したい。

つまり、ある要素の最大が、別の要素の最小値と同じかそれより大きい場合は、 その2つの要素を一つの要素にまとめたいということがある。

そのクエリ

WITH sample_data as (
  SELECT
    s.a AS a,
    s.z as z
  FROM (
    SELECT
      [
      STRUCT(1 as a, 2 AS z),
      STRUCT(3 as a, 4 AS z),
      STRUCT(4 as a, 5 AS z),
      STRUCT(6 as a, 7 AS z),
      STRUCT(6 as a, 8 AS z),
      STRUCT(9 as a, 10 AS z)
      ] _a)
  JOIN
  UNNEST(_a) s),
  w as (
  SELECT
    a,
    z,
    LAG(z) OVER (ORDER BY a, z) AS pre_z,
    LAG(a) OVER (ORDER BY z desc, a desc) AS post_a
  FROM sample_data
  ORDER BY a, z),
  head AS (
  SELECT DISTINCT
    a
  FROM
    w
  WHERE
    pre_z IS NULL OR
    a > pre_z),
  tail AS (
  SELECT DISTINCT
    z
  FROM
    w
  WHERE
    post_a IS NULL OR
    post_a > z),
  head_tail AS (
  SELECT
    a,
    MIN(z) AS z
  FROM
    head
  CROSS JOIN
    tail
  WHERE
    a <= z
  GROUP BY a
  ) --
--
SELECT
  *
FROM head_tail

解説

ウィンドウ関数を使って、並べた一つ上(もしくはひとつ下の)最大値(最小値)がその列の最小値より小さい(最大値より大きい)場合、まとめた要素の最小値(最大値)となる。

Chromebook で flutter 開発

背景

flutter の解説によると、chrome os でも開発ができるらしい。

(いきなり)まとめ

まず、uname -m でCPUのアーキテクチャを確認しよう。もし、aarch64 だと、ビルドしたバイナリは用意されてないので、あきらめよう。

flutterhub などのサービスを利用しよう。

react も emacs で開発

背景

react であっても emacs で開発したい

対応

Caskを使う。

~/.emacs.d/Cask ファイルに以下を入力

(depends-on "rjsx-mode")

~/.emacs.d/ ディレクトリにて cask コマンドを実行する(インストールされる)。

まとめ

まだまだ emacs でいける…。

夏休みの宿題のスプリントプランニング

背景と導入

夏休みの宿題のようなすぐに終わらない課題を計画的に行うのは非常に難しい。受験もまた同様である。

アジャイルでは時間に対してタスクを割り当てる。この考えを導入する。予定が分かっている直近の2,3日の時間に対して優先順位の高い勉強を割り当てる。その日の割り当てられた勉強が終わればフリータイムだ。

やること

タイムボックスの見積もり

  • 一日に勉強できる時間を割り出してもらう。例:10時間

タスクの見積もり

  • 勉強する内容を量(ページ毎)とかかる時間の見積もり(単位は時間)をタスクとしてポストイットに書いてもらう。
    f:id:nakano-tomofumi:20190804110557j:plain
    タスクの記述例
  • 0.5時間以外の端数、例えば1ページ10分くらいのものは3倍した量をタスクとして、ポストイットにする。
  • 逆に2時間を超えるものは2時間以下に抑えるように分割する。
  • 上記の作業は10分以内に終えるようにする。

計画

  • 2~3日後までの予定をたてる。以下は一日毎の話である。
  • 既に何か予定(習い事やプール、映画、花火なども含め)があれば、1日の勉強時間から引く。
  • その勉強可能な時間×0.6をかけた時間を算出する。例えば10時間なら6時間となる。習い事で5時間使うなら5時間に対して0.6をかけて3時間となる。
  • 毎日やる勉強と夏休みの宿題などがこの時間に達するように、貼っていく。
  • 合計してその一日の合計に達していれば終わり。
  • そんなに時間はかからないと思うが5分くらいでまとめる。

実行

  • その日のタスクが終了すれば、残りはフリータイムで、テレビでもゲームでもやってもいい。
  • もちろん次の日のタスクをやって、次の日のタスクの終了を早めてもいい。
  • 夜に、計画を終わったかどうかの確認レビューと、振り返りを瞬時にすます。
  • もし終わっていないものがあれば次の日に持ち越される。 (特に時間に関して)改善点などの振り返りを聞く。特になれば終わる。
  • もし明日の予定が変更されたなら明日の計画の変更をする。
  • 明後日の予定も計画する。
  • 全体を5分くらいですます。長くても10分。

注意点

  • その日のタスクが全て終了したからといって追加されることはない。
  • もしやった場合は次のタスクを減らす
  • 長期的な計画はたてない。時間があって、そこに勉強時間が割り当てられる。勉強に対して時間を割り当てない。
  • いつも時間を測る。百均タイマーが便利。