プログラマでありたい

おっさんになっても、プログラマでありつづけたい

公文が出しているNEW スタディ将棋のUIが素晴らしい

 息子が幼稚園の年長になってきて、いろいろな事に興味を持つようになってきました。そして知人に公文が出している将棋盤が良いよと聞いたので、試しに買って将棋を教えてみました。これが中々素晴らしいので紹介します。

NEW スタディ将棋 (リニューアル)

NEW スタディ将棋 (リニューアル)

NEW スタディ将棋



 NEW スタディ将棋は、名前の通り将棋の動かし方を学べるようになっています。その最大の特徴は駒を見れば解るように、駒の動けるところが、一つ一つの駒に書いてある点です。幼稚園児でも1〜2回教えると、ほぼ駒の動きが解るようになっています。実際、並べて見たところと、成った所は次のような感じです。
f:id:dkfj:20170620011657j:plain
f:id:dkfj:20170620011749j:plain

優れたデザイン



 NEW スタディ将棋を使ってみて、優れたデザインというのはこういうものだなと実感しました。従来の子供向きの将棋盤だと、駒の動かし方をマンガ形式の説明書で解説するといったものだと思います。それを駒自身に書くという大胆な手法で、説明書を不要にしている点が素晴らしいです。システムを作る身としては、このデザイン・UIの考え方は大切にしていきたいです。
 ちなみに駒や盤自体の素材は、それほど良いものではありません。盤は合板ですし、駒も何となくささくれている感じです。しかし、小さい子が使うと考えれば充分でしょう。合板なので軽くて良いです。

感想というか悩みどころ



 ということで、息子がすっかり将棋好きになりました。一度始めると何局もやれと言ってきて、中々時間の確保が大変です。あと、私が勝つと怒るので、どうやって息子に勝たせられるように強くするか悩みどころです。どうしたら良いのでしょうね?

NEW スタディ将棋 (リニューアル)

NEW スタディ将棋 (リニューアル)

触って覚えるサーバレス入門!!『サーバーレス シングルページ アプリケーション』

 監訳者の@yoshidashingoさんにサーバーレス シングルページ アプリケーションを頂きました。ありがとうございます。

f:id:dkfj:20170620015140j:plain

 

本書の内容



 本書の内容としては、名前の通りサーバーレスでシングルページアプリケーションを構築する方法がテーマとなっています。ただどちらかと言うと、シングルページ アプリケーションはおまけで、サーバーレスのAPIを作ることがメインとなっています。機能説明だけでなく実際に手を動かしながら覚えていくというスタイルで、その為に200ページ弱と薄めの本となっています。サクッと読めて、それでも一通りの事はカバーしているという中々よい構成です。

Cognito,DynamoDB,Lambda+API Gateway



 サーバーレスの中心として、本書ではCognito,DynamoDB,Lambda+API Gatewayの4つを中心に扱っています。基本的な使い方からチップス的なものまで扱っています。それぞれ20〜30ページくらいで説明しているので、分量的に多くなく適量なのではないでしょうか。
 例えばDynamoDBの章では、DynamoDBの歴史から強い整合性と結果整合性、インデックスの話など基本的な機能の説明から、DynamoDBへのアクセス許可に際してのIAMのポリシーの設定など具体的なことまで記述されています。この中でConditionの項目で置換変数を使ってCognito IDを使って自分のデータのみしか参照/更新できないような制限など、一般的に頭を悩ます部分についてもサラッと答えを書いているのが好感です。

サーバーレスのセキュリティ&スケールアップ



 この本で特に良いなぁと思った所が、7章の『サーバーレスのセキュリティ』と8章の『スケールアップする』です。サーバーレスの構築事例や運用実績は、まだまだ世の中に出てきているものが少ないです。そうなると構築する際に困るのが、どのようなセキュリティ施策・運用の想定をすればよいか解らないということです。そういった意味で、独立した章としてそれぞれを扱っているのは素晴らしいです。
 セキュリティについては、サーバーレスの施策というよりAWSの基本的な設定であったりJavaScript側の施策であったりと、まだまだ書き足すところは多いかもしれません。それでも、クエリインジェクション・クロスサイトリクエストフォージェリ・DDoSと代表的な攻撃に対する対処方法が書かれています。
 スケールアップの所でフフフとなったのが、S3のアクセス集計。S3のログを元にシェル芸を駆使していました。『S3Webトラフィックを解析する』というタイトル見て、Google Analytics使えという内容かと思ったのですがAWSオンリーで行くという心意気を感じました。ちなみにこんな感じです。

$ aws --profile admin s3 sync s3:learnjs-logging.benrady.com/ logs
$ cat logs/* | cut -d ' ' -f 13 | sort | uniq -c

 どうせならawkコマンドをだして紛らわしくしたら良いのではと思いながら読んでいたのですが、後ろの方でしっかり出てきました。

$ cat logs/* | awk '{ print $3 }' | gr ':' ' ' | \
  awk '{ print $2 ":" $3}" | sort | uniq -c

 シェル芸好きとしては、満足です。ただ現実的な運用では、Google Analyticsをお勧めします。
それ以外にも、バージョニングを利用したキャッシュコントロールなどがあり一読をお勧めします。

感想



 非常に読みやすくて、サーバーレスとは何ぞやと知りたい人にはお勧めの一冊です。が、個人的には非常に悔しい一冊です。実は、この本の原書の発売が2016年6月14日です。私も『Amazon Web Services クラウドネイティブ・アプリケーション開発技法』という本を出しており、テーマも発売時期もほぼ同じでした。ただ主題をシングルページ アプリケーションではなくモバイルアプリにしました。書名もサーバーレスかクラウドネイティブか悩んだ末に、クラウドネイティブにしました。後はあれもこれもと欲張り、KinesisやMachine Learning, AWS IoT, Mobile Hubなど詰め込みすぎました。結果700ページ超の分厚さになり、知る人ぞ知るというマニア向けの本となってしまいました。この本を読んで、改めて対象を絞り込むことが大切だなぁと実感しました。良い本です。

サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス

サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス


以下、目次です。

目次


本書への推薦の言葉
監訳者まえがき
はじめに
目次

1章 シンプルにはじめる
1.1 サーバーレスWebアプリケーション
1.2 ワークスペースを使う
1.3 Amazon S3にデプロイする
1.4 はじめてのデプロイ

2章 ハッシュイベントによるビューのルーティング
2.1 テストしやすいルータを設計する
2.2 ルータ関数
2.3 ルートを追加する
2.4 ビューパラメータを追加する
2.5 アプリケーションをロードする
2.6 再びデプロイする

3章 シングルページアプリケーションに必要なもの
3.1 ビューを作成する
3.2 データモデルを定義する
3.3 ユーザー入力を処理する
3.4 アプリケーションシェルを作成する
3.5 カスタムイベントを使う
3.6 再びデプロイする

4章 Amazon CognitoによるIdentity as a Service
4.1 外部のアイデンティティプロバイダに接続する
4.2 アイデンティティプールを作成する
4.3 Googleアイデンティティを取得する
4.4 AWS認証情報をリクエストする
4.5 プロファイルビューを作成する
4.6 再びデプロイする

5章 DynamoDBにデータを格納する
5.1 DynamoDBと連携する
5.2 テーブルを作成する
5.3 DynamoDBへのアクセス許可
5.4 ドキュメントを保存する
5.5 ドキュメントを取得する
5.6 データアクセスと検証
5.7 再びデプロイする

6章 Lambdaを使って(マイクロ)サービスを作る
6.1 AWS Lambdaを理解する
6.2 まずデプロイする
6.3 Lambda関数を書く
6.4 Lambda関数を呼び出す
6.5 Amazon API Gatewayを使う
6.6 再びデプロイする

7章 サーバーレスのセキュリティ
7.1 AWSアカウントをセキュアにする
7.2 クエリインジェクション攻撃
7.3 クロスサイトスクリプティング攻撃
7.4 クロスサイトリクエストフォージェリ
7.5 盗聴とトランスポート層のセキュリティ
7.6 サービス拒否(DoS)攻撃
7.7 再びデプロイする

8章 スケールアップする
8.1 Webサービスを監視する
8.2 S3Webトラフィックを解析する
8.3 成長に合わせて最適化する
8.4 クラウドのコスト
8.5 再びデプロイする(何度も、何度も)

付録A Node.jsのインストール
A.1 Node.jsランタイムをインストールする
A.2 複数のNode.jsバージョンを管理する

付録B ドメイン名を割り当てる

参考文献

不確実性コーンの話

 アジャイル界隈では割と知られているのですが、見積もりが何故ずれるかという説明の1つに不確実性コーンというものがあります。ざっくり説明するとプロジェクトの初期段階では不確定要素が多いので見積もりには4倍くらいの誤差があり、プロジェクトの進行とともに不確実な部分が少なくなってきて誤差は収束に向かうという話です。

f:id:dkfj:20170518115300p:plain

引用:プロジェクトマネジャーのための「プロセス設計術」 - プロジェクトの本質とはなにか:ITpro


 この不確実性コーンですが、個人的には次のように解釈しています。

  • プロジェクト開始時には、全ての情報が揃うことはないので見積もりには誤差が生じる
  • 全ての情報を集めてからプロジェクトを始めるのは現実的ではない。
  • ブレを小さくするには、出来るだけ対象となる範囲を小さくする。(タスクを細かい単位に分解する)

 個々の仕事の処理能力が高いのに、何故か仕事が遅い人というのがたまにいます。そんな人を見てると、自分が持っているタスク全部の見積もりを最初にやってから、個々の仕事に取り掛かろうとする傾向が多いように思えます。不確実性が多い段階の見積もりはブレが大きいとともに、見積もり自体も大変で労力が必要です。
 それを回避するにはどうしたら良いのか?目の前の優先度の高い1つのタスクだけに向き合えばよいのです。優先度が高いということは、基本的には不確実が少ないです。悩む余地がないので、実質的な仕事をしている時間が増えるのでサクサクと進みます。結局仕事の早い遅いって、実質的な作業にどれだけ時間をさいているかというところなのではないでしょうか?

See Also:
仕事を分解する。

アジャイルな見積りと計画づくり ?価値あるソフトウェアを育てる概念と技法?

アジャイルな見積りと計画づくり ?価値あるソフトウェアを育てる概念と技法?

Amazon Product Advertising APIが、IAMユーザーに対応していた

 Amazonの商品リンク等を生成するAmazon Product Advertising APIというサービスがあります。これは、今でいうAWS(Amazon Web Services)が出てる前は、Amazon Web Serviceという名前でした。このサービスはAWSが出る前から存在するということで、IAMユーザーを利用して最小限の権限を付与して利用するという事が出来ませんでした。何とルートアカウントのアクセスキーとシークレットアクセスキーを利用して、APIを操作するという男前仕様です。と言っても、広告のAPIを操作するだけなので、基本的には問題は少なかったです。

 そんな中で、AWSが出てきてAmazon Product Advertising APIのアカウントがAmazon Web Servicesに統合されたことにより問題が顕在化してきました。AWSはIAMが出てきて、ルートアカウントの利用が非推奨なのに、Product Advertising APIの方は依然としてルートアカウントでしか利用できないという問題です。ずっと何とかならんのかなぁと思っていたのですが、いつの間にか改善されているのを発見しました。

IAMユーザーで、Amazon Product Advertising APIを利用する


Becoming a Product Advertising API Developerを見ていると、下記の通りProductAdvertisingAPIの権限を付与することでAmazon Product Advertising APIが利用できるとあります。注意点としては、AWSのコンソールから、IAMのPolicy Generatorを見ても、ProductAdvertisingAPIの権限は出てきません。カスタムポリシーで作る必要があります。Product Advertising APIのIAM対応について幾つかのブログで紹介されていましたが、どれもAdministrator権限を付与しろとありました。それだと、限りなく意味がないので止めましょう。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ProductAdvertisingAPI:*",
            "Resource": "*"
        }
    ]
}


docs.aws.amazon.com

 さて、いつからIAMユーザに対応したのでしょうか?Internet Archiveを見る限り、2016年末のアーカイブでは対応していなかった模様なので、2017年からの対応のようです。AWSのニュースを見ていても、特にアナウンスは無かったとは思います。扱いが小さいですね。

Node.jsでProduct Advertising APIを呼び出すサンプル



 それでは、このIAMユーザを利用した実際に呼び出せるのか試してみましょう。Node.jsでは、apacというProduct Advertising APIを呼び出すクライアントライブラリがあります。簡単なので、これで試してみましょう。サンプルの部分に、作成したIAMユーザのKeyを埋め込めばそのまま使えます。ただキーをコードに埋め込むのは危険なので、環境変数等を利用しましょう。

const {OperationHelper} = require('apac');

const opHelper = new OperationHelper({
    endPoint:   'webservices.amazon.co.jp',
    awsId:     process.env.AFFILIATE_KEY,
    awsSecret: process.env.AFFILIATE_SECRET,
    assocId:   'your associate id'
});

opHelper.execute('ItemSearch', {
  'SearchIndex': 'Books',
  'Keywords': 'harry potter',
  'ResponseGroup': 'ItemAttributes,Offers'
}).then((response) => {
    console.log("Results object: ", response.result);
    console.log("Raw response body: ", response.responseBody);
}).catch((err) => {
    console.error("Something went wrong! ", err);
});

 ちなみに、このProduct Advertising APIは利用制限が厳しく、デフォルトでは1秒に1回に制限されています。APIで作成したリンクからの売上が上がると、レートが緩和されるという仕様です。
Changes to request limits - Product Advertising API

 レートを超えると下記のようにエラーが出るのでご注意を

Results object:  { ItemSearchErrorResponse: 
   { '$': { xmlns: 'http://ecs.amazonaws.com/doc/2013-08-01/' },
     Error: 
      { Code: 'RequestThrottled',
        Message: 'AWS Access Key ID: AKIXXXXXXXXXXXXXXXXX. You are submitting requests too quickly. Please retry your requests at a slower rate.' },
     RequestId: 'f07ba5e6-e458-40ee-a693-6a2295cf8550' } }
Raw response body:  
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2013-08-01/">
  <Error>
    <Code>RequestThrottled</Code>
    <Message>AWS Access Key ID: AKIXXXXXXXXXXXXXXXXX. You are submitting requests too quickly. Please retry your requests at a slower rate.</Message>
  </Error>
  <RequestId>f07ba5e6-e458-40ee-a693-6a2295cf8550</RequestId>
</ItemSearchErrorResponse>

感想



 やっとまっとうになったのだから、もう少し周知した方が良いのではないでしょうか?誰にも知られずヒッソリとなので、Admin権限を与えよといった間違った情報が出回るようになるのです。

BigData-JAWS セミナー「Amazon Athena Update」に行ってきた

 開催されているのにたまたま気が付いてJAWSUG BigData支部のAmazon Athena Updateに参加してきました。この会は、何とAthenaの製品担当のGMが来日され、直接解説してくれるという豪華版でした。

f:id:dkfj:20170407073046j:plain

まずスライドのタイトル見ての気づき。Athenaだけではなく、EMRの責任者も兼務しているということ。サービス内容・実装面を考えれば、さもありなんという所ですね。

 公演中の内容については、一部呟いていたのでToggeterでまとめています。自分的には、S3の生データをそのまま使えるのが売りだと思ってたのですが、ちゃんと最適な形に変換しろというのが繰り返し勧められていたのが収穫でした。もうすぐ出るはずのGlueに期待ですね。

togetter.com

3年近くGoogleからSEOスパム扱いされていて、ようやく解消した話

 何度かボヤいていましたが、はてなダイアリーからはてなブログに移行し独自ドメインを割り当ててから検索流入が激減しました。日に500〜1,000近くあった検索流入が100以下といった激減っぷりです。移行したのが2014年3月前後で、下記のグラフのようにストンと落ちて地を這っていました。それが最近復活したようです。

f:id:dkfj:20170404225413p:plain

ドメインオーソリティの低下ではなく、SEOスパム扱いのペナルティだった


 検索の減少の原因について、単純にドメインオーソリティの低下と考えていました。というのは、ドメインとしての非常に評価の高いhatena.ne.jpから新設のドメインの移行、さらに今までの被リンクもリダイレクトされるということで、SEO的には不利になります。といっても6〜7割くらいに落ち込む程度だろうと高をくくってたのですが。蓋をあけると1〜2割まで落ち込むという結果でした。当然、何らかのペナルティの可能性も考えて、GoogleのWebマスターツールなどで原因を調査するも、特に問題も指摘されずという状況でした。
 そんなこんなで悶々と3年くらい過ごしていたのですが、最近ようやく解決しました。何と移行時に何気なく設定していたサードパーティ製のプラグインが、SEOスパムとして扱われていた模様です。そして、そのツールの提供者からもその問題は喚起され、問題を回避する方法でバージョンされていました。 

bulldra.hatenablog.com

 完全に自分の責任ですね。

感想



 紺屋の白袴ではないですが、恥ずかしい限りです。それにしても、失った3年間は大きいです。この間に4冊ほど本を出していたのですが、自分の書名で検索しても自分のブログはヒットせず、それをブックマークしているURLが出て来るという始末でした。これからは正常化ということで、もう一度ブロガーとして生きていこうと思います。もっとも、もう個人ブログの時代でもないのかも知れませんが。

「Kindle本 春のフェア」で、AWS本など半額

 まいど本の宣伝ばかりで、我ながらひどいなぁと思っています。が、それでも紹介です。現在、Kindle本 春のフェアが開催中です。技術書を含む2万冊くらいが対象で、最大50%の割引もしくはポイント還元となっています。自著も調べてみると、対象になっていたので紹介しておきます。フェアは4/2までの開催なので、残りわずかです!
 ちなみにKindleで技術書を買う場合のメリットとしては、持ち運び易いという他にもう一つあります。改訂版が出た場合、最新版にアップデートできるということです。これはかなりメリットだと考えています。それでは、早速紹介です。

Amazon Web Services パターン別構築・運用ガイド


 AWS本のなかで割と定番として扱って頂いているのが、このAmazon Web Services パターン別構築・運用ガイドです。AWSの分厚い本と認識され、EC2, S3, VPCといった定番のサービスのサービスを中心に、AWS上でどうやってシステムを構築するかをテーマにまとめています。またコンソール画面だけでなく、CLI・SDKでの操作も含めて解説しているので実践的と好評です。発売して2年たちますが、ベーシックなサービスを中心としているので、今でも充分ご利用いただけます。
 Kindle価格で、3,672円の50%ポイント還元となっています。

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2015/03/25
  • メディア: Kindle版
  • この商品を含むブログを見る

Amazon Web Services クラウドネイティブ・アプリケーション開発技法


 パターン別構築・運用ガイドとは逆のコンセプトで、アプリケーションエンジニアがAWSを使ってモバイル/フロントエンドアプリで書いたのが、Amazon Web Services クラウドネイティブ・アプリケーション開発技法です。別名が、AWSの鈍器のような本で、700ページ超の大作となっています。AWSのサービスを呼び出してアプリを作る方法を、iOS,Android,JavaScriptのコードで書いています。API GatewayやLambda,DynamoDBといったいわゆるサーバレスの文脈で語られるサービスを中心に扱っており、CognitoやKinesis Stream/Firehoseなどもいち早くピックアップしています。
 1年前の本ですが、対象のサービスの進化が早すぎて困っております。一方でWebで情報が少ないものを扱っているので、ググるよりこの本を見たほうが早いことも多いです。実際著者陣一同も、忘れた時は自分が書いたところ読んで思い出して使っているという場面が多々あります。
 Kindle価格は、50%割引の1,987円となっています。

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく

  • 作者: 佐々木拓郎,佐藤瞬,石川修,高柳怜士,佐藤雄也,岸本勇貴
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/04/20
  • メディア: Kindle版
  • この商品を含むブログを見る

Rubyによるクローラー開発技法



 2010年代のクローラー本の元祖として予想外の売れ行きだったのが、Rubyによるクローラー開発技法です。いろいろなWebサイトから如何にデータを引き抜くかということをテーマに、ひたすら考え方・方法を紹介しています。また単純なスクレイピングにとどまらず、ブラウザを操作する方法やAPIを利用する方法など多方面で攻めています。3年前の本なので、さすがに古くなっているのですが、中心として扱っているモジュールがanemone,nokogiriなので、本書のままでも使えるものが多数あります。また、抜き出す時の考え方を中心に書いているので、言語が変わっても参考になるのではと思っています。この本が意外にヒットしたので、クローラー/スクレイピング本が10冊くらい出てきました。幸いRubyのクローラー本はこれだけです。
 Kindle価格は、50%割引の1,609円です。

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

データを集める技術



 残念ながらセール対象外ですが、データを集める技術は最近出したクローラー/スクレイピング本です。先のクローラー本が好評だったこともあり、気を良くした編集部が2匹目のどじょうを狙って企画されたのが本書となります。対象読者を少し広げて、エンジニア以外にも読めるように配慮しています。ということで、Excel・Googleスプレッドシートでどうやってデータを集めるかという方法を書いてあります。ここだけ読んでいると気が違ったかと思われるようなないようですが、実はExcel・GoogleスプレッドシートにはWebと連動してデータを集める仕組みが備わっているのです。
 発売して4ヶ月程ですが、ネット上では全く話題になっておりません。一方で書店での販売は好調で、自分が見ている世界は半分だったのだなぁと実感させられた一冊です。

データを集める技術 (Informatics &IDEA)

データを集める技術 (Informatics &IDEA)

イラスト図解式 この一冊で全部わかるWeb技術の基本



 今月発売したのが、イラスト図解式 この一冊で全部わかるWeb技術の基本です。これも残念ながらKindleセールの対象外です。名前の通り入門書で、IT業界に入った新人などに最適な一冊となっています。扱うテーマはWebですが、プロトコルからサーバーの話まで、わりと多岐に及びます。新人のみならずおっさんでも勉強になるのではと思います。
 割引はないですが、Kindleの方が少し安いです。

イラスト図解式 この一冊で全部わかるWeb技術の基本

イラスト図解式 この一冊で全部わかるWeb技術の基本

See Also:

「「この一冊で全部わかるWeb技術の基本」の監修をしました
「データを集める技術」という本を執筆しました
アプリケーションエンジニア向けのAWS本を書きました
『Amazon Web Services パターン別構築・運用ガイド』を書きました
『Rubyによるクローラー開発技法』を書きました