Pythonプログラミングイントロダクション(5) エイリアシングによるオブジェクトの参照

5章をみていきます。この章ではPythonの構造型と呼ばれるtuple ,list, str, rangeについてみていきながら、可変性と不変性の違いが説明されています。 また、関数を引数として渡すような高階関数についても説明されています。

特にlist型のエイリアシングについて多くの説明がこの章では割かれています。確かにプログラミングでよくミスる部分ではありますね。

Read the whole article ...


Pythonプログラミングイントロダクション(4) 静的スコープと動的スコープの違い

4章をみていきます。この章ではプログラムを書く上で避けては通れない関数、スコープ、抽象化についてです。

プログラミングにおいては処理をひたすら書いていくだけではなく、共通の処理は関数として切り出したり、変数のスコープを意識して変数が見える範囲を理解する必要があります。 スコープを理解していないと処理の対象がなんなのか、どこまで参照可能なのかを分からずにプログラミングすることになり、効率が悪くなります。

Read the whole article ...



Pythonプログラミングイントロダクション(3) 浮動小数点の誤差はなぜ発生する?

3章は算術プログラムの章です。近似について学べます。 全順序について述べられていたりする点、さすがアカデミックだなぁと思いつつ読み進めました。

近似に関しては2文法とニュートンラフソン法が示されています。 2分法は名前から想像しやすいですが、2分探索のようにあり得る値の中間値の計算結果の大小から推定値を移動させていく手法です。 ニュートンラフソン法は初耳でした。

また浮動小数点の説明が非常にわかりやすかったです。実際の計算結果からずれることがある、くらいの理解だったのですが、2進数の都合上なぜ、どのようにずれるかが説明してあって納得でした。

Read the whole article ...



Pythonプログラミングイントロダクション(1)コンピュータ、プログラムとは

独学でコンピュータサイエンスの勉強をしたくて本書を購入しました。全24章、学んだことをBlogにまとめていきながら読み進めていきます。 この本はMIT(マサチューセッツ工科大学)の講義に基づいているもので、プログラミング、アルゴリズムの基礎、さらに流行りのデータサイエンスにも触れられるようです。

Read the whole article ...


挫折者にも優しい「実践Scala入門」を読んだ

Scalaは昔少し勉強して挫折した経験があります。月並みにいえば、その時こういう本があったらなぁという感想です。

そもそも会社でのポジションはSREなので、Scalaを実務で書くことはほとんどありません。Pythonは書くシチュエーションがありますが、関数型を多用することもありませんでした。

本書の読了が見えてきた頃からこの本を片手にScalaでCodility の問題を解く会社内の集まりに参加させてもらっています。Atcoder にも参加するようになりScalaプログラミングを楽しんでいます。

Read the whole article ...


Terraformのリファクタリング: リモートのアカウントID参照

Terraformのリファクタリング楽しいですね。ついついいろんなハードコードを変数化するのに熱中してしまいます。

AWSをTerraformで構築・運用するときAWSのアカウントIDが必要になることがあります。 特にVPC Peering、Private Link, SNS, S3のBucket Policyなど、クロスアカウントで利用できるリソースなどは別アカウントのIDが欲しくなる事があります。 一つならまだしも2つ以上アカウントIDと連携したりすると混乱するので、ここにハードコードしたIDではなくわかりやすい変数名、しかもリモートステートで別アカウントのIDが参照できれば良いなと思いました。

自アカウントであれば、aws_caller_identityを利用すれば簡単に取得することができます。

data "aws_caller_identity" "self" { }	  

どこかに上記のような記述をすると、下記のような形でアカウントIDを参照できます。

"${data.aws_caller_identity.self.account_id}"	  

これにリモートステートの仕組みをプラスすることで、別アカウントのIDを変数化できました。 参照される側のアカウントをA, 参照する側のアカウントをBとしています。

Read the whole article ...


Packerを初めて使ってハマったこと

最近はDockerの環境を運用することが多いので、すっかりEC2に対してAnsibleで環境を構築したりメンテナンスしたりすることが減りました。 それでもAWS上のECSをEC2ベースで運用していて、EC2に監視用のエージェントなどをインストールしているケースなどもあると思います。 例えば自分の場合だとPrometheusの監視モジュール、node exporterを各EC2にインストールしています。

今後もECS OptimizedなEC2はどんどん更新されていくので、これを機にPackerを導入してベースイメージの作成をすることにしました。 ちなみにPackerを導入しようと思ったのは先日発表されたDockerの脆弱性対応のためEC2をアップデートしないといけなかったことがきっかけです。

というわけでPackerは初めて触ったわけですが、ほとんどはまることもなくAnsibleをプロビジョナーとする構成を作ることができました。 それでも何点かつまずいた点があったので、残しておきます。

環境は下記の通りです。

  • Mac OS Mojave 10.14.3
  • Packer 1.3.4
  • Ansible 2.6.5

Read the whole article ...


MySQLのibdataから個別のテーブルデータをリストアする

バックアップは取っていてもリストアできないと宝の持ち腐れですね。

ibdataのコールドバックアップは取っていて、サクッと一部のテーブルのデータのみリストアする方法です。 稼働中のMySQLを止める必要がないので、一部のテーブルだけ復旧したい場合や、とりあえず昔のテーブルの状況を見たい場合などに利用可能です。 データベース全体のリストアではないので、リストアの時間を短縮したいときに使えるかと思います。

やり方としては公式のドキュメントに書いてある通りなのですが、もうちょっと細かくやり方を見ていきます。 innodb_file_per_tableがONになっていて、テーブル毎にibdataが作成されていることが前提になります。

大まかな手順は下記のようになります。

  1. 復旧したいデータベース・テーブルがない場合はあらかじめ作成しておく
  2. 該当テーブルへの変更をLOCKする
  3. テーブルスペースを削除(ibdファイルを削除)
  4. 復旧したいibdファイルをコピーする
  5. テーブルスペースをインポート
  6. Lockを解除

下記のバージョンで検証しました。

  • MySQL: 5.6.42
  • CentOS: 7.5

Read the whole article ...


「Docker/Kubernetes実践コンテナ開発入門」を読んだ

OreillyのDocker本に続いて読んだのが、現時点では比較的最近出版された本書でした。 出来るだけ新しいDocker本で最近の情報で知識をアップデートしたかったのと、Kubernetesの説明が充実してそうというのが本書を手に取った動機です。 Dockerに正式採用されたKubernetesと、Swarmの違いなんかも体験できればなと思いました。

Read the whole article ...


Oreillyの「Docker」を読んだ

Dockerのチュートリアルを軽く触った事しかなかったのですが、本番でDockerを運用しているシステムを触ることになったので手に取りました。 しかしDockerは進化のスピードが早くてどの本を買おうか非常に迷いましたね。 この本は2016年の出版ですが、パッと見た所そこまで難しすぎず、手を動かしながらDockerを体験できそうだったのと、 迷ったらオライリーでしょっていう安易な考え方で選びました。 2年の月日はこの分野では大きな差がありそうですが、 特に進化が激しそうなオーケストレーション周りはこの本とは別に直近に出版されたものも読んで、 Dockerの進化を疑似体験しつつ知識をアップデートしていこうという目論見です。

Read the whole article ...



「入門!論理学」を読んだ

「データベース実践入門」 を読んでいて、これは論理学を学んでおかないと歯が立たないなと感じ、急遽読むことにしました。 論理学はプログラマが勉強すべき内容として、こちら でも紹介されていますね。 難しさに挫折するのは悔しい所ですが、ここは自分の知識のなさを素直に認めて急がば回れで行くことにしました。

Read the whole article ...


「初めてのAnsible」を読んだ

実際に仕事でも使ってるAnsibleだけど、使い始めた頃から本書にはお世話になってます。 改めて読み返してみると、最初のハードルから様々なプロダクトとの連携や高速化など、 痒いところに手がとどく内容だなと思います。 初めてAnsibleを触る人にも良いと思います。 あまり馴染みのないPython製のCRMをベースに話が進んでいく箇所は若干難儀しましたが。

Read the whole article ...


「Google ネット覇者の真実」を読んだ

これまで、Googleの成長をリアルタイムで体験しながらネットを利用してきたわけですが、 Googleが企業し、小さな企業から大企業へとなっていく華やかな成長の裏で、 中の人は何を考え、苦悩してきたのかがわかる本です。

Read the whole article ...


ansible_specを試してみた

以前試したServerspecですが、Ansibleと連携するプロダクトがあるということで試してみました。 その名もansible_specです。 Ansibleで構成したサーバーの接続情報を共有したいというモチベーションはTestinfraと同様です。 やはり同じ接続設定をいろんなところに設定するのは避けたいところですよね。

Read the whole article ...


「Infrastructure as Code」を読んだ

Infrastructure as Code(IaC)もずいぶん使い古された感のあるワードですね。 出始めの頃は自分もChefとかPuppetを使いさえすればいいもんだと勘違いしていました。 実際はもっと大きな考え方であり、この本は網羅的にIaCの考え方を抑えていってくれるので、 視野狭窄にならないようにするためにも、読んでおいて損はない本だと思いました。

Read the whole article ...


Testinfra使ってみた

前回、ServerSpecを使ってインフラのテストを書いてみましたが、 同じ思想でpythonベースのプロダクトを教えてもらったので試してみました。

Testinfra aims to be a Serverspec equivalent in python	  

Read the whole article ...


「The DevOps 逆転だ!究極の継続的デリバリー」を読んだ

DevOpsは最近ではバズワードでもなんでもなくて、 普通に考えなきゃいけない概念になってきました。 と言っても自分の周辺ではまだまだという感があるので、 とりあえず軽い気持ちで読んでみたのが本書です。 あまり考えずに買ったので、物語調で始まった時には少し面食らいました。

Read the whole article ...


S3をマウントするgoofysを試してみた

S3をEC2からマウントするgoofysを試してみた。 昔s3fsを試したことがあるんだけど、パフォーマンスが問題になったりしたことがありました。 巷では爆速と噂のgoofysですが、とりあえずパフォーマンスは置いておいて、できないことが何かを見ておきました。

Read the whole article ...


Web API The Good Partsを読んだ

昔はWebAPIを作る事が多かったんだけど、ここ数年はすっかりインフラ寄りになって、機能寄りの設計をやらなくなってました。 そんな中に読んだのが、Web API The Good Parts。 技術書の中にはかつての自分の成果物に赤面してしまう本が多々ありますが、この本は赤面度上位に位置しますね。

Read the whole article ...