読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

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

不確実性コーンの話

 アジャイル界隈では割と知られているのですが、見積もりが何故ずれるかという説明の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によるクローラー開発技法』を書きました

「この一冊で全部わかるWeb技術の基本」の電子書籍版発売決定&モニタープレゼント・キャンペーン

いよいよ今週の木曜日、2017/03/16に発売を控えた「この一冊で全部わかるWeb技術の基本」ですが、幾つかお知らせがあります。

電子書籍版発売決定



 幾つか頂いた質問に、電子書籍版の発売をするかというのがあります。今回は珍しく、出版社から紙の書籍と同じ日に電子書籍版も販売するという答えを頂いています。ということで、電子書籍版販売します。
 コストの関係で、恐らく文字検索等できるタイプではなく、画像タイプになると思います。そこはご了承ください。※著者陣としてもコントロール不能な部分なので。。。

モニタープレゼント・キャンペーン



 3/21 14:00締切で、モニタープレゼント・キャンペーンが出版元のSBクリエイティブから開催されています。
抽選で5名となります。個人的にも、何度かプレゼントキャンペーンやってみましたが、一般の懸賞より当選率高めになると思いますので、興味ある方は是非ご応募ください。

SBクリエイティブ:【モニタープレゼント・キャンペーン】『イラスト図解式 この一冊で全部わかるWeb技術の基本』

本書の構成



 前回のエントリーで、どんな形式になるかの疑問が多かったです。見開き1ページで、1つの技術について解説するという形になります。が、言葉で説明するより、サンプル見てください。Amazonの書影イメージに幾つかサンプルとして公開されています。

https://images-na.ssl-images-amazon.com/images/I/71HNm5uMT1L.jpg

ジュンク堂書店池袋本店で、先行販売



 実は既に、ジュンク堂書店池袋本店で先行販売されています。3/12(日)に売っている事確認してきました。毎度のことですが、私の汚い字でポップも書かせて頂いています。是非、現物を見に行ってください。

f:id:dkfj:20170313110253j:plainf:id:dkfj:20170313110259j:plainf:id:dkfj:20170313110306j:plain

感想



 わりと一般的な本屋でも置かれることが多いと思うので、見かけたら是非手に取って読んでみてください!!


See Also:
「「この一冊で全部わかるWeb技術の基本」の監修をしました
「データを集める技術」という本を執筆しました

「この一冊で全部わかるWeb技術の基本」の監修をしました

 Facebook, Twitter等で軽く報告しておりましたが、イラスト図解式 この一冊で全部わかるWeb技術の基本の監修をしました。執筆したのは、所属するNRIネットコムの同僚2人です。どちらも、大学時代しっかり情報工学を学んで、入社してからはインフラ寄りの仕事をしている人間です。Webの仕組みを説明するにはピッタリな人間によって書かれています。

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

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

対象読者は?



 入門書なので、これからITエンジニアを目指す人や、なりたての人、或いはIT業界に入ったのでWebとはなんぞやと知りたい営業・企画の人など、非エンジニアでも読めるように意識して書かれています。そもそもWebと一口に言っても、現在では凄く範囲が広がっています。昔は、Webサイトと電子メールが解っていれば充分でしたが、今やスマホアプリやIoTもWebの副産物となっています。ITのニッチな分野であったWebが、今や大部分を占めるようになってきています。ということで、体系的に学ぶのに良いのではないでしょうか?新入社員の席にそっと置いておくと、感謝されること必定です。情報処理試験の勉強前に一度読んでおくと、理解が早くなるかもしれません。

コラム



 本編の内容は、Webの技術に関することを取り扱っています。そこから少しはみ出る与太話的な部分については、コラムという形で少し柔らかく追加のお話を加えています。私も2つばかり書きました。どれか当ててみてください。また2つくらいボツになったのもあるので、そのうち公開します。

「Web技術の基本」の目次


以下、目次です。全83テーマを取り扱っています。
1つのテーマにつき、見開きで図解入りで解説しています。かなり理解しやすい形なのではないでしょうか?

Chapter1 Web技術とは
1-01 Webとは
1-02 インターネットとWeb
1-03 Webのさまざまな用途
1-04 WebブラウザとHTML
1-05 WebサーバーとHTTP
1-06 Webページが表示される流れ
1-07 静的ページと動的ページ
1-08 動的処理
1-09 Webの標準化
1-10 Webの設計思想

Chapter2 Webとネットワーク技術
2-01 Webを実現するコンピューターネットワーク
2-02 インターネットの標準プロトコル
2-03 TCP/IP
2-04 IPアドレスとポート番号
2-05 URLとドメイン
2-06 DNS
2-07 HTTP

Chapter3 HTTPでやりとりする仕組み
3-01 HTTPメッセージ
3-02 HTTPリクエスト・レスポンス
3-03 HTTPメソッド
3-04 ステータスコード
3-05 メッセージヘッダー
3-06 TCPのやりとり
3-07 HTTP1.1のやりとり
3-08 HTTP2のやりとり
3-09 HTTP2での改良点
3-10 HTTPS
3-11 HTTPSのやりとり
3-12 ステートフルとステートレス
3-13 クッキー
3-14 セッション
3-15 URI

Chapter4 Webのさまざまなデータ形式
4-01 HTML
4-02 Webページで使用される画像形式
4-03 XML
4-04 CSS
4-05 スクリプト言語
4-06 DOM
4-07 JSON
4-08 フィード
4-09 マイクロフォーマット
4-10 動画配信
4-11 メディアタイプ

Chapter5 Webアプリケーションの基本
5-01 Webアプリケーションの3層構造
5-02 MVCモデル
5-03 フレームワーク
5-04 Webサーバー
5-05 Webクライアント
5-06 アプリケーションサーバー
5-07 データベース管理システム
5-08 キャッシュサーバー
5-09 Ajax
5-10 Webプログラミング
5-11 Web API
5-12 マッシュアップ
5-13 CGI
5-14 サーバー間の連携

Chapter6 Webのセキュリティと認証
6-01 Webシステムのセキュリティ
6-02 パスワードクラッキング、DoS攻撃
6-03 Webシステムの特徴を利用した攻撃
6-04 Webアプリケーションの脆弱性を狙う攻撃
6-05 Webシステムの脆弱性
6-06 ファイアウォール
6-07 IDS、IPS
6-08 WAF
6-09 暗号化
6-10 公開鍵証明書
6-11 認証
6-12 認可
6-13 CAPTCHA

Chapter7 Webシステムの構築と運用
7-01 提供するサービスの検討
7-02 利用言語、ソフトウェアの検討
7-03 ネットワーク構成の検討
7-04 サーバー構成の検討
7-05 サーバー基盤の検討
7-06 負荷分散
7-07 サーバー設計・構築
7-08 データベース設計
7-09 アプリケーション設計
7-10 バックアップ運用
7-11 ログ運用
7-12 Webサイトのパフォーマンス
7-13 脆弱性診断

感想



 AWSの本を書くより、こちらの方が読者層広くて、耐用年数も長いので長く売れそうな気がしています。著者の一人として参加しておけば良かったとちょっと思ったり、思わなかったり。

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

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