Weekly Selection 2021-03-26

AndroidのWebViewで不具合

3/23 8:00頃からAndroidのWebViewが落ちる不具合が発生していたよう.WebViewのアンインストールを勧めるベンダーもあった.しかし,ブラウザのバージョンが下がることにより脆弱なブラウザを使用することになるため,セキュリティの観点では不適切だ.

Pythonのsetterとgetter

なぜPythonにはsetter/getterメソッドがないのか? – Qiita

前に調べたことがあった内容だったが復習になった.

Pythonのデコレータ

Pythonのデコレータについて – Qiita

デコレータのことを再理解した.Flaskをはじめとしたフレームワークのアノテーションもこうした言語の機能を利用していることを改めて理解した.

デコレータを使ったロギング機構を作れば,メソッドの開始と終了をロギングできると気がついた.やっている人が実際にいた.

python デコレータを使ってロギング処理を楽にする – fakatatuku’s blog

ダークパターン

日本経済新聞のニュースが話題になっていたので調べた.

なぜAmazonですらUXデザインの「ダークパターン」でユーザーを騙すのか – WPJ

近畿大ゲストスピーチ

楽天の三木谷社長が近畿大学の卒業式でスピーチしていた.日本のマスメディアを見るのをやめようと思った.

監視エンドポイント /healthz の理由

監視用のエンドポイントの末尾に z をつける理由を知った.Googleの社内でもこのルールが使われているらしい.理由は,アプリケーション自体の持つエンドポイントとの重複を避けるためらしい.

docker – Where does the convention of using /healthz for application health checks come from? – Stack Overflow

余談

  • 論文の準備を少し頑張った.予備実験を通した実測は大切だと感じた.
  • OpenVPNのトラブルシュートがつらい.
  • 後輩の研究テーマ決めとスライドレビューをした.
  • PayPayでヘッドホンをポチった.
  • 日高屋でPayPayの決済が遅延して二重支払いになった.決済事業は大変だ.

Weekly Selection 2021-03-19

政府調達で使われる「安全なクラウド」

政府が今後調達する「安全な」クラウドサービスのリスト、IPAが公開 | 日経クロステック(xTECH)

情報処理推進機構が安全なクラウドの一覧を選定した.ほとんどが外資系クラウドだ.

JaSST Tokyo 2021

仕様整理のためのテスト設計入門」に参加した.同値分割や組み合わせテスト,デシジョンテーブルやCFD法,状態遷移図を学んだ.テストパターンを設計する際に役立つ知識を得られた.

The use of test design for organizing specifications

他にもいくつかセッションを聴講した.テストは,ほとんどのコンピュータにより構成されるシステムで必要となる.そのため,組み込みシステムやDevOpsをはじめとしたトピックごとにノウハウが必要だと感じた.

深層学習への入門ノート

丁寧に説明がされているので,入門に良さそう.

深層学習(Deep Learning)への入門 講義ノート 瀧雅人 RIKEN数理創造プログラム(iTHEMS)

GitHubのパフォーマンス改善

GitをホスティングするGitHubは,パフォーマンスの低下への対処として次の取り組みを行なっていた.

定期的なリポジトリメンテナンス

デフォルトでは、GitHub は 50 回の git push 操作の後、あるいは 40MB のパックされていないファイルを受け取ると、リポジトリのメンテナンスを実行します。この処理では、クローンやフェッチのパフォーマンスを高めるために最新のパックファイルを用意したり、リポジトリ内のデータを整理して重複をなくします。リポジトリのサイズにもよりますが、メンテナンスにかかる時間は数秒から数分程度です。

GitHub における大規模なモノリポのパフォーマンスの向上 – GitHubブログ

チェックサムを事前に求める

GitHub はデフォルトでサーバーやラック、ネットワーク、データセンターの各レベルでの障害に備えて、それぞれのリポジトリに対して 5 つのレプリカを 3 つのデータセンターにまたがって書き込みます。Git の参照を更新する際には、すべてのデータセンターにあるすべてのレプリカを短時間ロックし、3 フェーズコミット(3PC)プロトコルが成功したときにロックを解放します。

このロックの間に、各レプリカのチェックサムを計算し、それらが一致していること、そしてすべてのレプリカが同期していることを確認します。インクリメンタルチェックサムを使用してこの処理を高速化しており、通常の運用では 50ms 以下で完了しますが、修復作業ではチェックサムを最初から計算し直すため、より長い時間がかかります。大きなモノリポの場合、ロックが 20〜30 秒も保持されていました

そこで、ロックをかける前に、これらのレプリカのチェックサムを計算するように変更しました。チェックサムを事前に計算することで、ロックする時間を 1 秒以下に短縮し、より多くの書き込み操作を即座に成功させることができるようになりました。

GitHub における大規模なモノリポのパフォーマンスの向上 – GitHubブログ

このあたりは,分散合意アルゴリズムの話でよく出てくる.3フェーズコミットを使っているのは知らなかったので意外だった.モノリポで従来はロックが20-30秒かかっていた課題を,ロック前にレプリカのチェックサムを計算することでロックを1秒以下に削減している.20-30倍の高速化は,リポジトリ規模が大きくなるにつれ効果をあげそう.

GitHubはレプリカ数=5で保存していることにも驚いた.レプリカ数は消費するストレージ容量とトレードオフなので,システム設計時にも悩むポイントになる.HDFSはレプリカ数=3をディスク故障率とデータ消失から計算しているらしい.

Is replication factor of 3 a standard for HDFS? – Quora

情報処理学会 全国大会 「論文必勝法」

2012年頃からはじまったテーマらしい.査読をクリアして採録されるためのノウハウやアンチパターンが紹介されていた.査読者の立場からの意見を聞けたので多くの学びがあった.

情報処理学会第83回全国大会

過去の資料もいくつか見つかったので貼っておく.

余談

  • 学部を卒業して,学士号をゲットした.
  • ASUSのルータでOpenVPN Clientの設定をした.
  • ICTSC 2020の打ち上げをした.
  • 情報処理学会の中高生セッションで後輩の研究にコメントした.
  • Kuberenetesのヘルスチェック機能にLivenessprobeがあることを知った.
  • 豚骨醤油ラーメン(西海)に初めて行った.美味しい.
  • Uber Eatsで妹のアルバイト先からテイクアウトをした.美味しい.

Weekly Selection 2021-03-12

Alpine LinuxのDockerイメージがオススメできない

軽量Dockerイメージに安易にAlpineを使うのはやめたほうがいいという話 – inductor’s blog

この話は前から有名でfeatureの技術ブログにも書かれている.

最初の項目。なぜ遅いかというと、Alpineのアプリが使うlibc(musl)のメモリ周りアロケートの実装が、性能よりもライブラリのサイズ重視のシンプルでPythonの使い方と合わなくて速度が出ないとのこと。これはアプリケーションの実装次第なのでjemallocを使っているRubyとかの人は関係ないでしょうし、PostgreSQLとかNginxはAlpine版でも速度は変わらないようです。性能が2倍違うということは、クラウドでアプリケーションを動かすときはメモリさえ許せば一つ下のインスタンスでいいわけで、お金にも利いてきますよね。

後者の速度の問題ですが、PyPIはLinux向けにはmanylinux1という形式でバイナリを提供しており、DebianでもRedHatでも高速にインストールできます。しかし、この形式はAlpineには対応していないため、C拡張を使うライブラリを使うと、Dockerイメージのビルド時間が伸びまくってしますわけです。

仕事でPythonコンテナをデプロイする人向けのDockerfile (1): オールマイティ編 | フューチャー技術ブログ

コンテナの上で実行するソフトウェアに依存するというのが本質なので,上手く使い分ければ良いと思う.

Kubernetes専門家として知るべきこと

Kubernetes 専門家として知るべき 47 のこと – 誰かの役に立てばいいブログ

かなり深掘りした内容なので知らないことだらけだった.コントローラの実装は,制御のコア部分なので特に参考になった.

OVHcloudのデータセンタで火災

仏OVHcloudのデータセンターで火災 4棟中1棟が全焼 – ITmedia NEWS

フランスのクラウド事業者 OVHcloud のStrasbourgにあるデータセンタで火災が発生した.

OVH News – Fire at Our Strasbourg Site

YouTubeにアップロードされた動画をみると,かなり被害が大きいことがわかる.

こうした事例を見ると,マルチAZやマルチリージョンをはじめとしたDisaster Recoveryの検討が重要だと感じた.

時系列データベース InfluxDB

気象データやセンサーデータ,ログに代表される時系列データ向けのデータベースの1つにInfluxDBがある.時系列データベースは英語でTime-Series Databaseとよばれる.データの挿入と取り出しが大部分となる特徴を捉えて設計されている.RDBのようなACID特性を兼ね備えていないので,使い方は検討が必要になりそう.

余談

Weekly Selection 2021-03-05

素因数分解の高速化アルゴリズム

未確定ですがRSAが突破される日も遠くないかも…

誤報だったよう.
https://idle.srad.jp/story/21/03/04/210213/

WASMにSIMD

WASMにSIMDが入るのか … !!
https://groups.google.com/g/mozilla.dev.platform/c/yLQxaBp9-o8/m/zwsm7rikAgAJ

面接手法 STAR

STARという面接手法があるらしい.
これどこの企業でもやっていそうな気がしたけれど,フレームワークがあるのか.
https://careers.mercari.com/jp/hiring/

  • Situation 環境や背景
  • Task 課題や役割
  • Action 本人の行動
  • Result その結果

AWSのIAM生成

AWSのIAMを生成してくれるプロキシくん
https://github.com/iann0036/iamlive

AWSのIAM作りで消耗しているのが多少はマシになりそう.

技術の学び方

技術の学び方という観点で有益な内容.

内定者向け黒帯トーク

Shellcheck

ShellScriptのバリデーションを行うshellcheckを見つけた.

koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts

余談

  • ICTSC 2020本選で土日が終わった.
  • Powershellスクリプトは慣れると書きやすいかもしれない.
  • Podcastにゲストとして参加してみた.楽しい.
  • M1 MacBookはWPA2エンタープライズ認証が苦手かも..?
  • 大学の広報から取材をうけた.サイトで素材になるらしい(?)
  • とにかく忙しい一週間だった

Weekly Selection 2021-02-26

Slackbot開発

Slackで動くBotを実装した.メッセージに日付が含まれる場合に,Googleカレンダへの予定追加を半自動で出来るようにした.開発にはSlackの提供するBoltのPython SDKを使った.

Slack | Bolt for Python

Boltはサンプルが豊富であり,実装しやすい.一方でAPIで返されるレスポンスに含まれる値を取り出すときに,どんな構造で返されるか把握しにくく不便だった.以下の記事が役に立った.

Slack Interactive Messageリファレンス – Qiita

Slack ペイロードに含まれる response_url を完全に理解する – Qiita

Prototype

ソースコードは以下に置いておく.

cdsl-research/slackbot: オリジナルなSlackbotを開発するぞ!

scriptタグのasync属性とdefer属性

以下の記事を読んでいるときに見つけた.並行でダウンロードすることでレンダリング完了までにかかる時間を短くできそう.

Eliminate render-blocking resources

Qiitaの以下の記事が図解つきで分かりやすい.

タグに async / defer を付けた場合のタイミング – Qiita</a></p>

メルカリの無意識バイアス研修の資料

メルカリが無意識バイアスの研修資料を公開していた.kayoreenaさんのPodcastできいて知った.グローバル化を見据えた組織づくりには,こうした言語化されていない課題に向き合うことが大切だと感じた.個人的にはメルカリは好きでも嫌いでもないが,こうした資料の公開や取り組みは素晴らしいものだと思う.

メルカリ、「無意識(アンコンシャス)バイアス ワークショップ」の社内研修資料を無償公開 | 株式会社メルカリ

MTBFとMTTR,システムの信頼性

システムの信頼性について調べてみた.MTBF(Mean Time Between Failure)とMTTR(Mean Time To Recovery)は有名な指標として知られている.

信頼性工学の領域では,システムの信頼性を向上するために障害発生への対処が定義されていた.

システムの信頼性

  • 待機システム→故障が発生したときにシステムを切り替えるシステムのこと.ホットスタンバイとコールドスタンバイがある.
  • ホットスタンバイ方式→常に予備システムも電源ON
  • コールドスタンバイ方式→通常,予備システムは電源OFFで非常時に電源ON

障害対処の捉え方も2つあった.

  • フォールトアポイダンス→あらかじめ個々のコンポーネントの信頼性を高め,障害を発生しないようにする.
  • フォールトトレラント→先に見越して発生しても継続的に動作を行うようにする.

フォールトトレラントを実現する方法として次があった.

  • フェイルセーフ→安全な状態に倒すこと.例えば地震が起きるとエレベータが停止する.
  • フェイルソフト→故障したコンポーネントを切り離して,別のコンポーネントに切り替えることで,動作を継続する.例えば,停電が発生した場合にバッテリ電源に切り替えて動作を続ける.
  • フェイルルーフ→ミスによる誤作動を防止する.例えば非常停止ボタンのカバーや削除確認のダイアログがある.

余談