Weekly Selection 2021-02-19

Bashでシェルスクリプト

Bashでシェルスクリプトを書くと幸せになれることが分かった.正規表現での比較に expr コマンドを使おうとしたら,拡張正規表現に対応しておらず辛かった.bashなら [[ “target-str” =~ “regex” ]] でいけるので幸せだった.bashには型があるので今までの辛さがなく楽だった.declareを積極的に使っていきたい.

Bash基礎文法最速マスター – いろいろ解析日記

AllReduce

All Reduceは分散させて計算した結果を集約して再配置する手法のことらしい。分散深層学習のドメインではあるけれど、分散システムにも近い話だ。要は計算を分配して行い,その結果を集約して複製(再配置)する流れをとっている.

分散深層学習を支える技術:AllReduceアルゴリズム | Preferred Networks Research & Development

Jamstack

WebのアーキテクチャとしてJamstackを知った.最新ではJamstackの表記らしい.ポイントは,HTMLの一部をサーバサイドで事前にビルドしておき,残りはクライアントサイドでビルドすること.これはSSRに非常に似ている.SSRはリクエストに応じてビルドを行うEvent Driven Build方式であるのに対して,Jamstackは事前にビルドを行うPre-Build方式を採用している.SSRの課題であったビルドのリソース消費を解決できているのでイケている.

JAMstackってなに?実践に学ぶ高速表示を実現するアーキテクチャの構成 – エンジニアHub|若手Webエンジニアのキャリアを考える!

既存技術との整理をするために表を作ってみた.

Web技術の比較

MapReduce

Hadoopのことを調べていたときに見つけたので復習のついでに読んでみた.

余談

  • 任天堂のSwitchを買ってスマブラで遊んだ.これ楽しい.
  • オンラインでのミーティングだと物理ホワイトボードの使い勝手の良さを改めて感じられる.
  • WordPressのPはキャピタルだぞ小学校校歌
  • テックキャンプの受講生が1週間に20件の企業応募が必須らしく大変だなと思った.
  • AWS 東京リージョンで障害が0時ごろに起きていて大変そうだった.

Weekly Selection 2021-02-12

Pythonの拡張正規表現とTokenizer

Slack Botを作成しているときに,オリジナルのコマンドを実装したくなった.正規表現によるパースを思いつき,Python公式ドキュメントの正規表現モジュールを読んでみた.

re — 正規表現操作 — Python 3.9.1 ドキュメント

ドキュメントから2つの学びがあった.1つ目はPythonに拡張正規表現があることだ.Perlの拡張正規表現は知っていたが,Pythonにもあることは初めて知った.(?P<name>...)は特に便利なので使っていきたい.2つ目はTokenizerを実装したことだ.自然言語処理や自作プログラミング言語に興味がなかったので,授業で軽く触れた程度の知識だった.Python公式ドキュメントにあったTokenizerの実装をもとにSlack Bot用のTokenizerを実装してみた.パターンマッチの要領で入力に対して一致する正規表現を順番にチェックしていく.正規表現の優先度(順序)も重要であることが学びだった.

slackbot/tokenizer.py at master · cdsl-research/slackbot

ソフトウェアテスト

SEShopがセールしていたので,ソフトウェア品質を高める開発者テスト アジャイル時代の実践的・効率的なテストのやり方を予約してみた.テストのことは素人なので、テストパターンの設計やテスト実装の優先度付けを知りたい.

シェルスクリプトでのIFと条件式

testコマンドのオプションをmanで見れば比較演算子が見れる.メモを書き起こした.

ShellScriptのIF文チートシート・スニペット – Qiita

余談

  • Kubernetesクラスタに使う分散ストレージをCeph, GlusterFS, Longhornで比較した.Cephのハードウェア要件(メモリ64GB, ネットワーク 10Gbps, CPU 4core)が高すぎて驚いた.
  • AmazonのCEOであるジェフ・ベゾスが退任するらしい.
  • 情熱大陸に登大遊さんが出演していた.けしからん.
  • KubernetesのConfigMapは,Kubernetes以外では使えないのでイマイチだと思った.サイドカーコンテナで設定ファイルを取得して,Volumeを共有して設定ファイルを配置するほうが良いと思った.
  • ゆるキャン△をはじめて見た.なんて素敵なアニメなんだ.

Weekly Selection 2021-02-05

setTimeout()の挙動

過去に調べたことをQiitaにまとめた.setTimeoutなにもわからない.

setTimeout(…, 0)はsetTimeout(…, 1)と同じ動きだった – Qiita

Clubhouseの分析

Clubhouseの技術スタック分析
https://zenn.dev/voluntas/scraps/9403b803320d6f

Clubhouseの利用規約の分析
https://www.cloudsign.jp/media/20210128-clubhouse-tos/

Dark Data

ハイプサイクルで有名なガートナー社が定義した「ダークデータ」を知った.簡単にいえば,収集されて使われないデータのことをさす.AWSの論文のなかで発見した.

Definition of Dark Data – Gartner Information Technology Glossary

質の高い技術文章の書き方

研究にも通じる箇所があると思った.「なぜ,その課題が解決する価値のある重要なものなのか?」を明確にしていきたい.

正しい課題とは正しい問いかけから始まる。その課題を解くことでお客さんはどういう利益を得られるのか?なぜ他の課題よりこちらが重要なのか?正しい問いを繰り返した先にある課題は本当に解く価値のあるものだし、間違った問いから生まれたありもしない課題というものはとても危険だ。

質の高い技術文書を書く方法 – As a Futurist…

CMUのデータベース講義

カーネギーメロン大学のデータベース講義の資料をみつけた.余裕のあるときに読んでみる.トランザクションのkumagiさんのツイートから発見した.

https://15721.courses.cs.cmu.edu/spring2016/schedule.html

MITの開発入門講義

GitやVim, シェルを一通り扱っていたので英語に抵抗がなければ良さそう.

https://missing.csail.mit.edu/2020/

COCOAのバグの原因

頻繁なAPI変更にともなうソフトウェアのバグを適切に検出するのは難しいと感じた.特にAppleとGoogleがインターフェースを揃えないと,実装コストも増加すると思った.

Issue on GitHub: transmission_risk_levelの値について · Issue #14 · cocoa-mhlw/cocoa

分析記事: Android版COCOAがバグった理由 – DEVGRU

日本のIT企業の収益分析

mixiがゲーム事業に全振りしているのが意外だった.LINEとZ HOLDINGSをあわせると規模がかなり大きい.

ブロックチェーンのセキュリティ

kumagiさんの資料が面白かった.以前にDPS研究発表会で首藤先生の話をきいたあとだったので,より理解が深まった.

ブロックチェーンは攻撃手法で分類するとよい

ブロックチェーン「ネットワーク」の研究

余談

  • GitHubにMUFGのソースコードが漏洩したという話でTwitterが盛り上がっていた.
  • Clubhouseを使ってみたが面白いサービスだった.
  • AWSの論文(amazon.science)をさがしてみたら意外と数があった.
  • Android版COCOAの通知が届かなかったことがニュースになっていた.
  • 卒研発表がおわったのでMacBook Air (M1)をポチった.

Weekly Selection 2021-01-29

one-copy serializability

one-copy xxxは「単一ノードで実現できるxxxを分散ノードでも実現できること」だと分かった.

この場合だと「単一ノードで実現できるシリアライズ可能性を,分散ノードでも維持できる」ということになる.ちなみに元の単語はAWS Auroraの論文で前に見つけた.以下の記事も参考になった.

Eventual Consistencyまでの一貫性図解大全 – Qiita

アンバサダパターンとアダプタパターン(分散システムデザインパターン)

アダプタパターンは,既存のコンテナへ変更を加えることなくインターフェースを変換する.例えば以下は,Redis Containerのslowlogを取得するためにFluentd Containerをアダプタコンテナとして導入している.

Redis向けアダプタパターン

アンバサダパターンは,既存コンテナの機能を補完する役割をもつ.大きなメリットが2つある.1つ目は,モジュール化された再利用できるコンテナをつくれること(関心の分離)である.2つ目は,アンバサダコンテナをほかのアプリケーションコンテナと組み合わせることで再利用しやすいことである.

以下は実験的リリースをアンバサダパターンによって実現した例である.Canary ReleaseではNginx Containerで重み付けロードバランシングにより,部分的リリースを実現している.MirroringではNginx Containerでリクエストをミラーリングすることで,1リクエストをstableとbetaの両サービスへ転送している.

実験的リリース向けアンバサダパターン

PomeriumにTCP forwarding over HTTPが追加

CNCFに参加しているIAPであるPomeriumにTCP Forwarding over HTTPが追加された.これを使うことでSSHやRDPをはじめとするTCPベースのプロトコルをIAP経由で使える.この機能はGoogle Cloud IAP では既に実現されていたのでOSSで実装されたのはおそらく初めてだろう.

Nginxはthread_poolを使っている

前に調べて忘れていたので読み直した.Apache HTTP ServerのC10K問題をなぜ解決できたのか?の答えでもある.

ソフトウェアにおけるログの設計

出力するログの内容や形式をはじめとする詳細が触れられた記事でよかった.処理の終わった段階でログを出力するのは参考にしたい.

ログレベルを複数人で開発するときに揃えるのが難しいと思った.JSONで構造化したログもスキーマの制約を入れないと,ログを解析するときに苦労しそうだと思った.ログの内容をいかに解析しやすい形式にするかは,課題になりそうだと思った.このあたりは共通ログライブラリを作り込むのがベターかもしれない.

ログを出力するにはどうするか?

NAT Slipstream 2.0 attack

ChromiumのメーリスにHTTP Port BlockingがIntent to shipになっていたので気になった.これはNAT Slipstreaming 2とよばれる脆弱性の対策として導入されるという.これはNAT配下に存在する端末へ外部からアクセスが可能になる脆弱性だ.NAT配下の端末でP2Pをおこなうために,WebRTCでホールパンチをしていたことを思い出した.境界セキュリティも限界があるように感じた.

Connections to HTTP, HTTPS or FTP servers on ports 69, 137, 161, 1719, 1720, 1723 or 6566 will fail. This is a mitigation for the NAT Slipstream 2.0 attack: https://www.armis.com/resources/iot-security-blog/nat-slipstreaming-v2-0-new-attack-variant-can-expose-all-internal-network-devices-to-the-internet/. It helps developers by keeping the web platform safe for users.

This security fix has already shipped in version 87.0.4280.117. This intent has been delayed until the vulnerability was publicly disclosed.

Intent to Implement and Ship: Block HTTP ports 69, 137, 161, 1719, 1720, 1723, and 6566

さっそくyukiさんが記事をかかれていてスピードに驚いた…

分散ストレージと分散ファイルシステム

研究室のオンプレ環境にHA構成なKubernetesクラスタを構築しようと思い,分散ストレージと分散ファイルシステムを調べた.以下の資料がかりやすい.

Kubernetesの永続化ストレージ基礎 – Speaker Deck

分散ストレージと分散ファイルシステムの違いがわからなかたので,以下に整理した.ポンチ絵がうまく出来たか微妙だが,ひとまずリリースしておく.

ポンチ絵

分散ストレージシステム SDS(Software Defined Storage)は次の特徴をもつ.

  • OSからデバイスとして認識される.
  • ファイルシステムの構築が必要になる.

分散ファイルシステム DFS(Distributed File System)は次の特徴をもつ.

  • 専用のドライバでOS上にマウントされる.
  • ファイルシステムの構築が不要である.

参考資料 ウマいストレージの選び方。 – Qiita

Weekly Selection 2021-01-22

しばらく記事を書き溜めて毎週だしてみる.

Service Meshを紹介する動画

NCSA HTTPd

NCSA HTTPdは世界で二番目のHTTPサーバ.一番目はCERN httpd.

NCSA_HTTPd – Wikipedia

Awesome Storage

分散ファイルシステム(DFS)のことを調べていたら発見.特にCeph, GlusterはKubernetesクラスタのストレージとして検討してみたい.同様の役割としてDRBDがあるが,DRBDはスケーラビリティに課題があるそう.

Awesome Storage – GitHub

SameParty Cookie

TwitterのIntent To Shipを眺めていたら発見した.Prototypeがリリースされるとのこと.以下のリンクのMotivationに導入の背景が説明されていた.

Motivation

In order to increase privacy on the web, browser vendors are either planning or already shipping restrictions on cross-site tracking, such as phasing out third-party cookies. Third-party cookies are currently defined as those associated with a site that is different from the site of the top-level page. However, modern websites are typically served over multiple domains/sites, many of which are owned by the same organization. First-Party Sets provides a mechanism to group domains/sites belonging to the same organization as being same-party with each other, and thus defines a privacy boundary for websites.

出典 https://groups.google.com/a/chromium.org/g/blink-dev/c/-unZxHbw8Pc/m/_23CsOkHAQAJ

日本語で書かれた資料はyukiさんが書かれた以下の記事が分かりやすい.

PHPとRubyとPythonのデータ構造改善

辞書(連想配列)の内部実装が変更された話.Pythonは辞書の順序が変更されたのと同じタイミングだった.

HTTPのバージョン

RFCとHTTPバージョンを整理した図が素晴らしい!

HTTPのバージョンについて、現在のまとめ – Qiita

YAMLのフォーマット

YAMLでは文字列をダブルクオートまたはシングルクオートで囲まないと,意図しない動作をすることが知れた.JSONのほうがStrictではあるが楽になりそう.YAMLパーサーの実装によって,扱いに違いが生じてきそうで怖い.

AWSが生まれたきっかけ

Sunのサーバによるコストを削減するためにHP/Linuxのサーバに乗り換える挑戦をした.大きな賭けが結果的に,大きなコスト削減の成果を生んだ.

AWSが生まれたのは、Amazonが経費削減のためにSunのサーバからHP/Linuxサーバへ切り替えたことがきっかけ。当時の社員が振り返る - Publickey