読了『まんがでわかるLinux シス管系女子②』

積んでいたのをようやく崩しました。

本書は「まんがでわかるLinux シス管系女子」シリーズの第二巻で、第一巻を引き継ぎ、より複雑なシェルスクリプトを書く方法や、コマンドを叩いたりするのに必要なコマンドが紹介されています。

古びない知識

記載内容の初出は2013年~2015年です。扱う内容はLinuxコマンドであったりシェルスクリプトであったりするので、現在でもそのまま使えるでしょう。

ユースケースベースの利点

1巻からそのスタイルは変わっていないのですが、「こんなことできたらいいな」というユースケースからスタートしています。

なので、私のような初学者でも、実際の業務で試してみようという気分になってきます。*1

トピック

以下の二つのトピックは重点的に取り上げられています。

正規表現はそれ単体でも使われますが、取り上げられているfindやsedと一緒に使われているケースが紹介されています。

標準入出力は、例えば引数入力の代替手段としての標準入力が紹介されていますした。

他にも、while文、case、continue / breakなど、プログラミング言語であれば始めのほうに出てくる話が2巻の後半で集中するのは興味深いです。

体系的書籍への道筋

作中では10行前後のスクリプトが書かれていますが、それ以上の複雑な内容になってくると、マンガでカバーするのは難しくなっていくように思います。

なので、この後はもう少し体系的な書籍へ進むのが上達に有効なのかなと。

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

一応持ってますけど例によって積読です。

気になるところ

本筋とはあまり関係ないのですが、いまのみんとちゃんのようにゴリゴリにスクリプトを組んでいくと、「秘伝のタレ」化しないか少し心配なのですが、世の中のシス管現場はどうなっているですかね?

目次

最後に目次を挙げます。

  • 第1話 定期的に行う作業を自動実行したい
    • crontab
  • 第2話 鍵認証で安全にログインしたい
    • 公開鍵認証
  • 第3話 定時処理で自動的にscpしたい
  • 第4話 複数のサーバーのファイルを効率よく収集したい
  • 第5話 条件に当てはまるログの行数を集計したい
    • wcと算術展開
  • 第6話 複数のテキストファイルを一括編集したい
  • 第7話 表記が一定でない語句をまとめて置換したい
  • 第8話 正規表現のパターン指定をもっと簡潔にしたい
    • 大文字小文字の違いの無視と文字の範囲指定
  • 第9話 正規表現のパターン指定をさらに簡潔にしたい
    • 範囲外の文字の指定と行頭・行末の指定
  • 第10話 古い日付のファイルを探して消したい
    • find
  • 第11話 もっと複雑な条件でファイルを探したい
    • findの複雑な検索条件
  • 第12話 ディスクが満杯になる前にファイルを削除したい
    • dfと数値の大小での条件分岐
  • 第13話 前のコマンドが成功したら次も実行したい
    • ANDリスト
  • 第14話 前のコマンドが失敗したら次を実行したい
    • ORリスト
  • 第15話 親ディレクトリーにいちいち戻る操作を省略したい
    • サブシェル
  • 第16話 3パターン以上の場合分けをしたい
    • case
  • 第17話 社員番号の最初の方の文字で処理を振り分けたい
    • caseのパターン指定
  • 第18話 同じ処理を1時間繰り返し実行したい
    • whileループとsleep
  • 第19話 コマンドの出力をパイプラインで受け取りたい
  • 標準入力とread
  • 第20話 スペース混じりのファイル名もループ処理したい
    • whileループとread
  • 第21話 キーボードからの入力を待ち受けたい
    • readからの入力待ち
  • 第22話 キーボードからの入力を確認の後でやり直したい
    • continueとbreak
  • 第23話 コマンドのすべての出力をファイルに保存したい
  • 第23.5話 ユーザー作成用コマンドの違いを把握したい
    • useraddとadduserとuserdelとdeluser

おまけ

『まんがでわかるLinuxシス管系女子①』まとめたった - 等身大から1割増し

まんがでわかるLinux シス管系女子3 がめっちゃイイ - 等身大から1割増し

*1:例えば、自分の場合だとスクリプトの標準入力についてちゃんと見直してみようと思いました。

きっと読むほどうまい『失敗から学ぶ RDBの正しい歩き方』

『失敗から学ぶ RDBの正しい歩き方』を読みました。

失敗から学ぶ RDBの正しい歩き方:書籍案内|技術評論社

要約

  • RDBを扱う上で気にすべきことが幅広く書いてあります。
  • 挙げられたトピックは頭に叩き込んでおくべき。

取り扱われないもの

タイトルで「RDBの歩き方」とあるようにNoSQLのようなデータベースはチラッと登場するのみです。

また、本文中ではMySQLPostgreSQLの例がほとんどであり、RDBMSの比較については、あまり扱われません。ただ、種類の違いを意識することの重要性は説明されています。

さらに、この書籍は20のアンチパターンの列挙で構成されていますが、それぞれに対して「アンチパターンを生まないためには?」というアンサーを記載しています。しかし、『SQLアンチパターン』のような直接的な「解決策」を明示していないように思えました。

例えば第5章「フラグの闇」では、削除フラグというアンチパターンが紹介されています。そこでの記載がこちら。

このように、テーブルに状態をもたせてしまった場合、その対処方法に銀の弾丸はありませんのでご注意ください。

もう一つ挙げます。

しかしテーブルに状態を持たせると、何らかの理由でそれをリファクタリングする必要が出た場合に困難を極めます。

なかなか冷や汗出ますね。この章に限らず、RDBに関して誤った設計をしてしまうと、取り戻すのが非常に大変ということが読み取れました。

カバーする範囲の広さ

この本の最大の特長は、カバーする範囲の広さにあると思います。例えば、開発と運用両方をカバーしています。

  • 開発(テーブル設計):第1章~第2章、第4章~第9章、第15章、第20章
  • 開発(テーブル設計以外):第3章、第13章~第14章、第16章~第17章
  • 運用:第10章~第12章、第18章~第19章*1

テーブル設計以外とは、具体的に言うとクエリとロックとキャッシュです。*2

わずか300ページ弱の書籍ですが、RDBを扱う上で頻出、かつ影響度が大きいポイントはほぼ網羅されているのでは、と思いました。

読む、試す、また読むのサイクル

この本を読んで、自分には刺さるところが多くありました。第5章「フラグの闇」、第8章「JSONの甘い罠」、第11章「見られないエラーログ」などです。

内容の細かいところまで暗記するのは難しいにしても、少なくともデータベース設計や運用を考える際に、本書で取り上げられたテーマはパッと浮かぶべきだと思いました。

また、この本を読んで得られた気付きに基づき、今関わっているシステムを改善しようと思います。そのうえで、また本書に戻ってくるとさらなる学びがあるに違いありません。

まとめ

RDBを使っているなら読んでおくといいと思います。

また、本文中でいくつかSlideshareのリンクが貼られているので、電子書籍を買ったほうがいいかもしれません。

私は紙の書籍を買ってしまったので、URLを頑張って手動で打ち込みます……。

*1:12章までが連載部分でそれ以降が描き下ろしなのでこのように分割されているっぽい。ひとまとめにしたほうが読みやすかった気もしますが

*2:INDEXはテーブル設計の方に入れてあります

『暗号技術入門』よりメッセージ認証コード、デジタル署名について

結城浩『暗号技術入門第3版 秘密の国のアリス』の一部をまとめました。

メッセージ認証コード・デジタル署名は、どちらもメッセージが書き換えられていないことを示す正真性(完全性)を確保するためや、メッセージが正しい送信者からのものであることを示す認証を実現するために用いられます。

一方、無関係な第三者に漏洩しないという、機密性を確保することはできません。

メッセージ認証コードとは

Message Authentication Code で、MACともいわれます。

コードというと第一印象は何かしらの文字列ですが、そうではなく

鍵に依存した一方向ハッシュ関数

です。メッセージをそのハッシュ関数にかけると、MAC値が得られます。

実際の使い方は以下になります。

  1. 送信者アリスと、受信者ボブは、同じ鍵を持っているとします。

  2. アリスは鍵を使い、メッセージのMAC値を計算します。

  3. アリスはメッセージとMAC値をボブに送信します。

  4. ボブはメッセージと自分が持つ鍵からMAC値を計算し、両者が一致すれば認証成功です。

デジタル署名とは

単語のイメージからは、自分の名前をサインしたものをデジタル上で表現するものと思われます。

実際は、自らの秘密鍵で暗号化したメッセージ*1そのものです。メッセージ全体が暗号化されることがあります。逆に、メッセージ自体は暗号化しない場合のデジタル署名をクリア署名といいます。

簡単に、デジタル署名の使用手順を記載します。

  1. 送信者アリスは、一方向ハッシュ関数*2でメッセージのハッシュ値を計算します。

  2. アリスは、自分の秘密鍵ハッシュ値を暗号化します。これが署名になります。

  3. アリスは、メッセージを署名を受信者ボブに送信します。

  4. ボブは、受信した署名をアリスの公開鍵で復号し、ハッシュ値を得ます。

  5. ボブは、受信したメッセージからハッシュ値を計算し、前の手順から得たハッシュ値と比較します。両者が一致すれば認証成功です。

メッセージ認証コードと、デジタル署名は役割や使い方が近いことが分かります。

メッセージ認証コードと、デジタル署名の使い分け

メッセージ認証コードは、第三者による証明と、否認防止ができません*3。一方、デジタル署名は誰でも検証できますし、否認防止ができます。

ならば、デジタル署名はメッセージ認証コードの上位互換なのでしょうか。

おそらくそれは違っていて、理由は対称暗号が公開鍵暗号より優れているポイントと同じです。

すなわちパフォーマンスが違います。

とはいえここからは個人の感想ですが、デジタル署名はハッシュ値に対して暗号化をかけているわけだし、パフォーマンスもそこまで問題にならなさそうな気がします。

*1:もしくはハッシュ化したメッセージを暗号化したもの

*2:鍵に依存しないのでメッセージ認証コードで使っているものとは別物

*3:どちらも、送信者と受信者が同じ鍵を持つので、どっちかそれを使ったかが証明できないため

HackerRankというサービスに登録した

とある縁でHackerRankというサイトに登録したので説明しようと思います。

どんなサイトか?

www.hackerrank.com

Practice coding, prepare for interviews, and get hired.

とあるようにプログラミングの練習問題、コーディング試験対策、求人応募ができます。しかし、求人応募はアメリカと一部のヨーロッパに限られます。

サイトはすべて英語です。

練習問題

登録すると、ダッシュボードにテーマ別の練習問題が表示されます。一番左の「Problrem Solving」が一番豊富にそろっている印象。 f:id:alek3:20190303152118p:plain

解き始めると、ダッシュボードで進捗が表示されます。たくさん解くとレベルアップする感じでしょうかね。 f:id:alek3:20190303152008p:plain

問題の特色

ブラウザ上にコードを貼って、解答を提出するのですが、標準入出力については、すでにコードが記載されています。

なので、回答者である我々は、問題を解くロジックのみを考えればよいことになります。

まとめ

プログラミングの問題を解答できるサイトは、AtCoderやPaizaなど、様々なものがあると思いますが、以下のニーズに対してはHackerRankが適していると思います。

最後については補足が必要ですが、WEB上でコーディングテストを受ける際に、このサイトが使われいているそうです。

参考

他のレビュー投稿です。

HackerRankのアルゴリズム厳選20問でコーディング面接をハックする - 港区で苦しむデータサイエンティストのメモ帳

HackerRankでプログラミングを勉強する - Qiita

HackerRankで問題を解いてみよう! - Takahiro Octopress Blog

*1:ただし、サイトを見た感じC、C++JavaPythonRubyJavaScriptしかないような感じがする

[AWS]EC2インスタンスにPuTTYでSSHログインしようとして、「Disconnected: No supported authentication methods available」、「Server refused our key 」というエラー発生時の対処法

タイトルが長くなってしまったが、削れないのでこれで。

症状

いつものようにPuTTYでEC2インスタンスにログインしようとしたところ、以下のエラーが発生して入れなくなった。

Disconnected: No supported authentication methods available (server sent: publickey,gssapi-keyex,gssapi-with-mic)

PuTTY側の画面は以下の通り f:id:alek3:20190218110928p:plain

対処法

公式に書いてあったのでその通りに実行したら直った。 aws.amazon.com

手順7は、ENTER YOUR PUBLIC KEY HERE ... のところを書き換えれば他はそのままでOK

根本原因

わかっていない。上記公式サイトで挙げられているもののうちのどれかが該当しそうな気はするが・・・

教訓

検索するエラーメッセージを変えてみるのも一手。

PuTTY側のエラーメッセージで検索しても有効な対処法は見つからなかったが、コンソールのエラーメッセージ「server refused our key」で検索したらすぐに対処法の書いてあるページが見つかった。

ipaファイルをアーカイブしようとして「No signing certificate “iOS Development” found」エラーがでたときの対処法

いつものようにXCodeipaファイルを作成しようと思ったらエラーが発生しました。

少し前はできていました。すなわち開発者証明書および秘密鍵は準備できています。

慌てずエラーを見ると以下のような文章でした。

No "iOS Development" signing certificate matching team ID with a private key was found.  
(中略)  
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.4

認証ができていないっぽいので、XCodeでの設定画面を見ます。

general > signingのところです。

すると、エラーっぽくなっていました。(スクショはとりそびれました)

設定を完了すると以下のようになります。

f:id:alek3:20190216231613p:plain

参考

dev.classmethod.jp

出てきたけどこんなに高度なのは必要ありませんでした。

読了:『ファクトフルネス』

最近読書のペースが早くなっているような気がしていてうれしいです。

今回は『ファクトフルネス』です。

ファクトフルネスの大まかなルール

「ファクトフルネス」はなにかというと、事実に基づいて物事を判断する態度であり、それを妨げる自らの本能に自覚的であることです。

まずは要約として、「ファクトフルネスの大まかなルール」を以下に挙げます。

  • 分断本能を抑えるには…
    • 大半の人がどこにいるかを探そう
  • ネガティブ本能を抑えるには…
    • 悪いニュースのほうが広まりやすいと覚えておこう
  • 直線本能を抑えるには…
    • 直線もいつかは曲がることを知ろう
  • 恐怖本能を抑えるには…
    • リスクを計算しよう
  • 課題視本能を抑えるには…
    • 数字を比較しよう
  • パターン化本能を抑えるには…
    • 分類を疑おう
  • 宿命本能を抑えるには…
    • ゆっくりとした変化でも変化していることを心に留めよう
  • 純化本能を抑えるには
    • ひとつの知識がすべてに応用できないことを覚えておこう
  • 犯人探し本能を抑えるには…
    • 誰かを責めても解決しないと肝に銘じよう
  • 焦り本能を抑えるには…
    • 小さな一歩を重ねよう

これだけでも、なんとなく人間には厄介な本能がいくつもありそうだなと感じられると思います。

それぞれの詳細について興味を持ったなら、本書で確認することをおすすめします。

以降は考えたことをつらつら書きます。

事実を集める大変さ

私はTwitterをしょっちゅう閲覧しています。私が見るTLでは、様々なニュースや意見が発せられ、リツイートされています。

本書では、それらの情報は分断や恐怖を煽り、ネガティブすぎるため、実際の統計データ、すなわちファクトにあたることが重要だと述べられています。

しかし、いざ実際はどうなっているのかを自分で調べようと思うと、なかなか重い腰が上がらないということに気づきました。特別に興味を持ったトピック以外、能動的に調べることはなかなかないんじゃないかと思っています。

それを思うと、日々ファクト(統計)を作っている人たち*1、それを分析している専門家には頭が下がります。

マスコミに期待しすぎてはいけない

日本各地や世界で何が起きているかを知らせてくれるのがマスコミです。テレビやSNSを見れば何が起きているのか大まかに掴むことができます。

私のTLではしばしばマスコミが批判されています。例えば、偏っているとか、犯人探しをしているとか、恐怖を煽っているとか、専門家から見るとトンチンカンなことを言っているとかですね。

本書では、マスコミは売れなければならないため、ネガティブな、インパクトのある、すなわち本能に訴える個別事象を取り上げがちになってしまうと指摘しています。

これはそのとおりだと思っていて、マスコミは情報の一つで、専門家の意見や、統計データを参照するとより正確な姿に近づけると思っています。

先程のマスコミへの批判はもっともですが、批判しても自分が気持ちいいだけでマスコミはすぐにそこまで大きく変わっていかないと思います。

本能に気づくための本書

本書では、ファクトフルネスでない10の本能があるから抑えていこうね、という内容になっています。

私が思うに、大事なのは本能で感じ取ったあとに、本書の内容を生かしてその判断や行動を修正していくことです。

ファクトフルネスとはなにかという知識があれば、事実を見誤らせる本能に気づきやすくなるでしょう。

例えは悪いかもしれませんが、ナンパの手順を知っていればそれに引っかかりにくくなることと同じです。

*1:最近の統計偽装には失望していますが……。