A cron job to (re-)issue server certificate of Let’s Encrypt and update ELB’s certificate on Amazon Linux

See ymkjp/elb_update_cert if you prefer source code but not messy human document :p

Updated at 2016-01-23: Amazon launched AWS Certificate Manager. It should be the easiest way to use certificate on ELB. See more detail at New – AWS Certificate Manager – Deploy SSL/TLS-Based Apps on AWS | AWS Official Blog.

Step 0: Create AWS environment

Omitting description to set up VPC, EC2, ELB…

Step 1: Create new policy for the batch script

Firstly, go to https://console.aws.amazon.com/iam/home.

Select Policies > Create Policy > Create Your Own Policy > Set Permissions.

Let’s name the policy whatever you want, for example letsencrypt-aws, and fill following JSON to “Policy Document”:

{
"Version": "2016-01-20",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:SetLoadBalancerListenerSSLCertificate"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"iam:ListServerCertificates",
"iam:UploadServerCertificate",
"iam:DeleteServerCertificate"
],
"Resource": [
"*"
]
}
]
}

Step 2: Create new user to execute script

Create new user at Users > Create New Users.

Do not forget to download the user’s credentials.

Then attach the policy letsencrypt-aws which you just created at step #1 to the user.

Can’t find the policy? Try filtering policies by “Filter: Customer Managed Policies“.

IAM Users letsencrypt-aws

Step 3: Install packages

Login to the host, and install required packages.

sudo yum update
sudo yum install -y git nginx libffi-devel puppet libffi-devel puppet httpd24 jq
sudo /etc/init.d/nginx start
sudo chkconfig nginx on

Step 4: Set up Nginx

Edit nginx.conf to add a location directive for Let’s Encrypt.

vi /etc/nginx/nginx.conf

server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;

# ...

# For Let's Encrypt
location ^~ /.well-known/acme-challenge {
root /var/www/letsencrypt;
access_log /var/log/nginx/access_letsencrypt.log;
error_log /var/log/nginx/error_letsencrypt.log;
}
}

Restart Nginx proceess to apply the new configuration.

sudo service nginx restart

Step 5: Let’s try executing

Execute commands below:

cd /home/ec2-user/
git clone https://github.com/ymkjp/elb_update_cert.git
git clone https://github.com/letsencrypt/letsencrypt
vi /home/ec2-user/elb_update_cert/elb_update_cert.sh # Edit as yours
sudo aws configure --profile elb_update_cert # Add the user you set up
sudo bash elb_update_cert.sh

Working well?
Move on to the next step.

Step 6: Add cron job

Congrats. This is the final step!

sudo cp /home/ec2-user/elb_update_cert/etc/cron.d/elb_update_cert /etc/cron.d

All done!
This cron job is going to refresh your domain’s certificate on ELB every month.

High five!

Any questions?

Comment to this article, or create “New issue” at https://github.com/ymkjp/elb_update_cert/issues.

Further work

  • Create Docker image for step #3 to #6
  • Create template by AWS CloudFormation

Hope this helps you.

Cheers!

Author: @ymkjp

2015年のよかった本ベスト10

ベスト10

  1. トマ・ピケティ『21世紀の資本
    • 要するに「21世紀初頭時点で資本について分かっていること総まとめ」で、素晴らしい仕事
    • ビジネス、キャリア、資産運用、あらゆることのベースとなるデータが詰まっている。用語の定義→統計資料の分析→結論→提案と終始丁寧に展開していくけれど、各分析から学びがあった。本書の解説書もたくさん出ていてその需要があることも分かるが、当然かいつまむと本書の膨大な知見が抜け落ちるのでもったいなさはある。本書のうまみは r>g だけではない。
    • 何らかの主義主張は「答えがまだ分かっていないから暫定でこの方法をとって検証する」っていう性質があると僕は思っているけど、この本では歴史から多くの「答案」を提示してくれている。大変な良書。
  2. デイビッド A パターソン『コンピュータの構成と設計 第5版
  3. ベン・ホロウィッツ『HARD THINGS
  4. 竜盛博『エンジニアとして世界の最前線で働く選択肢
  5. 川上量生『鈴木さんにも分かるネットの未来
  6. ジェレミー・リフキン『限界費用ゼロ社会
  7. チャールズ・マッケイ『狂気とバブル
  8. ジョン・ブルックス『アメリカ市場創世記
  9. グラハム・アリソン『リー・クアンユー、世界を語る
  10. 近藤麻理恵『人生がときめく片づけの魔法

コメント

上位2冊は抜きん出ているが、なかでもピケティ本『21世紀の資本』は圧倒的な1位。ライフチェンジングとはまさにこのこと。ピケティ本なければこのエントリも書かなかっただろうな。

ピケティ本について個人的におもしろかったのは、株式のインデックス投信の期待リターンがなぜ5-8%程度に落ち着いているのかの歴史的裏付けがとれた点。

1-2%の実質成長 + 年2%のインフレ + リスクプレミアム

『コンピュータの構成と設計』、いわゆるパタヘネ本はKindle版があることを知って購入してちびちび読み進めた。買ったあとに気づいたけど、いま通っている大学院で受講している授業の教科書になっていた。

『アメリカ市場創世記』は同著者の『人と企業はどこで間違えるのか?』がよかったので読んでみたが、大恐慌のころの歴史を興味深く読めた。歴史はこういったストーリーテリングの形式だと読みすすめやすくてよい。

リー・クアンユーの本は、シンガポール旅行にいったときに同行した友人がおもしろそうに読んでいたので釣られて帰国後に読んでみた。開発独裁国家の存在はイデオロギーなんて大事じゃないかと疑問を投げかけてくれる。

ランクインしなかったなかでは『How Google Works』も読んだけど、ミーハー心を刺激された以外はあまり覚えていない。『Work Rules』も同じGoogle本だけど積読状態。

振り返ってみて驚いたのは全書ともにKindle版で読んでいたことですね。

Author: @ymkjp

ベーシックインカムに期待しはじめずにはいられない

ベーシックインカムは、いったいどれほどの既得権益を打破せねばならないかを考えると2050年やそこらでは実現できないものとばかり考えていた。

しかし、維新がベーシックインカムや負の所得税をマニフェストにすえ、橋下徹市長がツイッターで積極的に発言するのを見るにつけ、ひょっとしてこれは予期していたよりも早く実現することを期待してもいいのではないかと思わされている。

例えば下記のようなツイートである。

1、増税はタイミングが最も重要。今やるべきではない。税収も伸び出し、国債依存率は低くなり始めている。もっと多角的に国家財政の状況、動きを分析して判断すべきだ。何よりも消費税は地方税化すべき。軽減税率は止めて、低所得者対策はベーシックインカムや負の所得税的思想で対応すべき。

— 橋下徹 (@t_ishin) December 12, 2015

橋下氏のナショナリストな側面を批判するひとは多くとも、実務家としての彼の実績に正面から文句をつけるひとは、そうそういないだろう。

そんな実務能力に長ける橋下氏がベーシックインカムをその基本政策の1つにすえているのは、ベーシックインカムの実現を希求してやまない私からすると非常に心強い限りである。

橋下氏の政策は下記の彼のツイートに要約されている。

それはありがとうございます。今僕が言っているのは、消費税増税中止、金融緩和、財政出動、規制改革、自由貿易圏の拡大、社会保障改革、地方交付税改革、統治機構改革に代わる案です RT @ikedanob: 私は知っている限りでは、橋下さんの政策を支持してきましたよ。RT 橋下市長の

— 橋下徹 (@t_ishin) December 13, 2015

経済学に明るくないので詳しく言及することは控えるが、フリードマンが提唱し、英国がサッチャー政権のもとで1980-1990年代に推し進めてきた政策を踏襲している印象を受ける。

この期間の英国の政策を橋下氏はポジティブにとらえていることは下記の2012年の彼のツイートからも見て取れる。

サッチャー改革にはマイナスがあるからそうならないように、なんて言うのは中学生でも言えることだ。じゃあ、サッチャー改革がなければ今の英国があるのか?と反論したら、浜さん、何も答えられなかった。大学教授でも、実際に行政に関与している方の提案は具体的でありがたい。

— 橋下徹 (@t_ishin) January 3, 2012

イギリスがいまだに影響力を保てているのはサッチャー政権下の改革なくしてはありえなかっただろうという主張だ。

私にもこれは正しい認識だと思えるし、今の日本に必要なアプローチと合致しているとも思う。

こういったいわゆる新自由主義の政策パッケージにはセーフティネットの整備が欠かせないが、それこそまさにベーシックインカムが最も光輝く役どころといえる。


橋下氏の国家主義者っぷりはサッチャー元首相とそっくり

ところで、橋下氏とサッチャー元首相について、どうしても1つ言及したいことがある。

それは、橋下氏の国家主義なところまでもサッチャー元首相とそっくりで、これは偶然の一致というわけではなさそうだということだ。

というのも、橋下氏の国家主義のスタンスは彼本来のイデオロギーというよりはむしろ、実務者としてのマーケティング結果として国家主義のスタンスをとっているように見える。

サッチャー首相も、自信を失いつつあった英国民を歴史の教科書を改変してまで鼓舞したのは、厳しい政策とのバランスを取るために必要だったからではないだろうか。

私としてはイデオロギーが国家主義的にラップされていようと、優れた政策を実践してくれるのであれば構わない。

もちろんこれらは憶測の域を決して出るものではないが、しかしこれが当たっていようとなかろうと、結局は橋下氏が有権者へ約束している政策が他の政党が掲げるマニフェストよりも支持できるものである以上、橋下氏を支持するのが現実の政治への妥当な関わり方なのではないだろうか。

なぜなら、いうまでもないが、彼が主張するイデオロギーを含め、私たちは「誰が最もマシな政治家か」という視点で判断するしかないからである。

この世の中が完璧でないことと同じように、完璧な政治家は存在しないのだ。

また、橋下氏への評価に目を通すにつけとても気になるのは、彼の過去のマスメディアでの発言から彼を批判する向きも多く見られることである。

しかしタレント時代の発言から「彼本来の」イデオロギーを推し量れると考えるのはどう考えても無理があって、政治家としての出演ならまだしも、当時の発言はその時々にお茶の間でウケる方法を模索しての結果だっただろうから、現役の政治家を評価する方法にはなりえない。

さて大変おもしろいことに、橋下氏がそのマスメディアへの出演でも磨いたであろうメッセージングの才能はツイッターでも大いに活用されている。

私が今日とりわけ感銘を受けたのは下記のツイートだ。

ええ。たった1兆円で保育所・幼稚園の完全無料化が可能なんです。これくらい楽勝でやる国会議員をどんどん誕生させなければなりません。それは国民の責任です RT @hanba72:軽減税率の予算が1兆円だそうで、それを幼稚園・保育園の無償化に回すだけでどれだけ少子化対策に寄与するか❗️

— 橋下徹 (@t_ishin) December 13, 2015

軽減税率という時事ネタから、「現政権批判→対案の提示→対案の実現に必要な要素→そして有権者がそのためにとるべきアクション」をおさえながらRTする芸当をまのあたりにし、1日本語ツイッターユーザーとして大変な感動を覚えた次第である。

それでは最後に、本文中でもふれた英国の現状について、なんJ世界史部の言い得て妙のツイートを紹介して締めくくりとしたい。

イギリスはいまだに世界に影響力ありまくりで全然落ちてないやん スペイン・ポルトガル並に落ちてから言えよ

— なんJ世界史部 (@NanJ_Sekaishi) December 10, 2015

お粗末さまでした。

iOSの文字入力が遅いときの対処療法

iOSで日本語を打とうとしたときに立ち上がりが遅い問題、下記の対応でだいぶマシになりました。

  • 自分が登録した変換候補を消す
    • Settings > General > Keyboards > Text Replacement
  • 連絡先データの同期を切る
    • Settings > Mail, Contacts, Calendars > iCloud > Contacts
    • Settings > Mail, Contacts, Calendars > Gmail > Contacts
    • Settings > Facebook > Contacts

変換候補で見かけるものを片っ端から消したわけですが、そりゃあ速くなるよなぁっていう対策なわけです。

昔、「顔文字ぱみゅ!!」というアプリを入れて顔文字を変換候補に出すために Text Replacement や連絡先に候補をたくさん追加していたのが悪かったのかもしれないです。

なお、検証に用いた端末のiOSバージョンは9.2でした。

Author: @ymkjp

Swift iOSアプリ開発の知見

SwiftといってもOpenStackのほうではない。
iOS開発の経験はは大学生のころに Titanium Studio を使ったことがある程度しかなかったが、仕事帰りの時間と休日をつかってミニアプリを2週間弱で実装できた。

やったこと

 

  1. 「こんなアプリほしいなぁ」から始動
  2. Apple関連公式ドキュメントをざっと流し読み
  3. 「アプリ作るプラットフォームなので、アプリを作ろう」と心を固める
  4. 概要をつかんだら書き始める。iosはインターフェースの設計の筋がいいのか混乱せずにさくさく書ける印象
  5. 実装したい機能をググッて実装。ネット情報は玉石混交なのでSwiftやiOSのよさを潰さないように注意
  6. Apple Store サブミット

 

雑感

 

  1. apple本家の流儀はくみとったほうがよい
    • 趣味レベルだとapple本家の流儀はくみとったほうが後々の対応コストも低くてよさそう
    • 例えば、できるだけuiはコードで組み立てずにinterface builderに仕事させるとか。Auto Layoutは唯一ハマった箇所だけど使ってよかった今は思ってる

 

リファレンス

 

  • SwiftとiOSのドキュメントはDashを他の言語と同じように使った

 

はまりどころ

 

  1. Auto Layout
    • 半日費やした
    • 「概念の理解→InterfaceBuilderの操作を覚える」という2ステップが必要
    • 身近にメンターがいるならAuto Layoutだけでも教えてもらうとよさげ
  2. DataSource
    • テーブルを操作するときに「?」となった
    • TableViewの前段にレイヤーがあると理解する

 

サーバ側

今回のアプリはYouTube APIを直接叩くのがメインで、自前で用意したのは画像くらい。

  • iOSアプリからの通信はhttps推奨なので ASW S3 → CloudFlareのSSLオプションを使った

 

次やること

本当はCI環境整備とリファクタリングまでやってから知見まとめを書きたかったが授業が始まってしまい時間があまりとれずTBD状態。

  1. 設計
    • 1回アプリをリリースしてViewControllerが肥大化しがちなことを身をもって知った
    • リリースした後くらいに Hatena-Textbook/swift-development-apps.md が公開されたので読んでみた
    • Hatena-Textbookレベルの実コードとアーキテクチャ両面を解説してくれている記事は見かけなかったので非常に助かる
  2. CI環境
    • 設計のリファクタリングと併行して進めたい
    • iOSアプリテスト自動化入門』を読んだ
    • 北海道旅行の帰りの飛行機で新千歳→成田の間で読みきれた
    • Objective-C時代の書籍だけど知りたいことは知れた
    • どのあたりまでユニットテストの対象にするかは模索することになりそう。DataSourceは入れるのか、入れないのか。

Author: @ymkjp

買ってよかったものリスト 2015

一人暮らし歴7年目時点の知見をまとめました。

買ってよかったもの

  1. ベッド
    • 睡眠だいじ
  2. ハンドブレンダー
    • 布教していきたい
    • ブラウンの1番シンプルなやつを使っている
    • スムージーつくる用。レシピは「バナナ + 乳酸菌飲料 (ヤクルトかカルピス)」に落ち着いた。スムージーおすすめすると「女子力高い」って反応されて面倒くさいので女子力層以外にも普及してほしい
  3. ネスプレッソ
    • 実家で使って感動して帰ってきてから速攻で買った
    • コンビニコーヒーで満足できる舌の持ち主であれば買って後悔はしないと思う
    • 僕が買ったのはPIXIEっていうちょっといいやつ
    • たぶん下位グレードにしてしまうと抽出方法が全く変わってしまうので注意
    • コスパをよく聞かれるけど一杯60-70円くらいでコンビニよりは安いかなっていう程度
    • メンテも楽で家で飲めるのが利点
  4. サーキュレーター
    • エアコンの効率化
    • DCモーターの製品を推奨
  5. スティック型掃除機
    • Panasonicのダスパっていうやつ
    • 場所を取らない
    • クイックルワイパーを経てダスパに落ち着いた
  6. MacBook
    • イトーキの学習机 3万円
    • 不満はない
  7. オフィスチェア
    • リープチェアの中古
    • 楽天で買った謎のオットマンとの相性がいい
  8. マネークリップ
    • ポケットでかさばらない
    • できるだけ現金を使わない派の人とは相性がいい


謎のオットマン

買わなかったもの

  • 冷蔵庫
  • 洗濯機

※詳しくは「冷蔵庫と洗濯機は買ってはいけない 家電レンタルを活用すべきこれだけの理由 – It works!」へ

売り払ったもの

  1. Apple製品
    • iPhone 5, iPad 2, Time Capsule
    • 高く売れるので買い換えたら積極的に中古に出す
  2. ロードバイク
    • あまり乗らなくなった
    • ロードバイクとデジイチは一人暮らし世帯の2大出費ジャンルだと勝手に認識しているが、どうしても購入するのであれば中古も選択肢に入れることをおすすめしたい

買ってよかったものリスト、長らく書いておきたいと思ってかけていなかったのですがやっと書けました。
定期的に更新していきます。

Author: @ymkjp

マイナンバーとメルセンヌ数

下記のマイナンバーがメルセンヌ数 (Mersenne number) である。

個人マイナンバー

  • 000000000000
  • 000000001023
  • 000536870911
  • 004294967295

法人マイナンバー

  • 0000000000063
  • 0000000004095
  • 0000067108863

チェックデジットの計算方法の根拠となる法令

※ちなみに政令と省令なので「法律」ではなく「法令」と呼んだほうが誤解を招かなさそうである

補足

~数学科~ 教授「みなさん、マイナンバーは知ってますね」 学生「?」 教授「私のナンバーが届きました」 学生「!」 教授「なんと」 学生(素数ッ!?) 教授「完全数でした!」 学生(137438691328だ……) 学生(12桁の完全数は137438691328しかない…… )

— タカエイ (@tm_eagle) November 16, 2015

…という創作ツイートがbuzzっていたが、残念ながらマイナンバーの末尾はチェックデジットであるため完全数は存在しえないとのこと。

ではメルセンヌ素数はどうだろうと試してみたが見つからず、メルセンヌ数は上述の通り見つかった。

ただ、今回の結論は「マイナンバーでは0パディングが用いられている」という前提に立っているので、もし0パディングがなければマイナンバーにはメルセンヌ数は存在しないことになる。

メルセンヌ数の一覧は A000225 – OEIS から拝借した。

Author: @ymkjp

「”キャッシュ不可な” コンテンツをCDNでキャッシュする方法」の記事がおもしろかったので紹介

Leveraging your CDN to cache “uncacheable” content | Fastly 先月くらいに読んだ記事が面白かったので対話形式で紹介してみる (実はチャットの内容をブログに起こしただけ)

簡単にまとめると…?

従来「動的だからCDNに載せられない」って思われていたファイルも実は多くが event-driven にキャッシュ可能だよねという話。

ほうほう。event-drivenにキャッシュ可能とは?

↓が event-driven にキャッシュ可能なコンテンツの例で、

– Wikiページ
– スポーツスコア
– ニュース記事
– コメント
– 在庫情報
– 株価

ref. The rise of event-driven content (or how to cache more at the edge) | Fastly

例えばスポーツスコアの場合、

# 従来
* キャッシュされる → アクセスをCDN経由で配信 → 点数が入る → キャッシュexpireするまで待たなきゃいけない\(^o^)/

# Event-driven
* キャッシュされる → アクセスをCDN経由で配信 → 点数が入る → オリジンのコンテンツを更新 → キャッシュをパージするAPIを叩く → キャッシュが更新される

RFC含めていままではあんまりキャッシュをいつ無効にするかっていうのにあまり目が向けられてこなかったけど、俺らはそこまでコントロールするぜ (ドヤ っていう。

なるほど。akamaiではevent-drivenにできないか。使ったことないから全くわからんのだけどw

akamaiもいまは提供されてるかな。少なくともダッシュボードでは結構前からできてたはず。

ハッシュ値をファイル名の末尾につけるのはパージができないからこそのワークアラウンドだったんだろうね。

やってることは今となっては普通だろうけど、その問題を数年前には発見できていたのが強み。

今のフェーズではいかに簡単に早くパージできるかの競争に入ってるんだと思う。

APIでパージするリクエストを受けた後、どうやって世界各地のノードに全台行き渡らせるかっていうのはgossipプロトコルが使われてるんだってさ。

確かにパージが150msで出来ると注釈がついてる!

Akamai versus Fastly – CDN Planet

以上

Author: @ymkjp

Decrement data source’s row numbers before deleteRowsAtIndexPaths call.

I got an interesting error message about NSInternalInconsistencyException.

The number of rows contained in an existing section after the update (746) must be equal to the number of rows contained in that section before the update (746)

Let me brief this sentence, it says “The number 746 must be equal to the number 746“.

Wow, I didn’t know 767 and 767 are not same number.

Yes, I know I should inspect my code closely AS THEY SAID.

In my case, of course it was my fault. The reason for this Exception is that I didn’t refresh data source’s row numbers before deleteRowsAtIndexPaths call.

P/S Here’s the whole error log from my app.

2015-09-23 23:13:57.320 NewsPlayer[80774:8236299] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (746) must be equal to the number of rows contained in that section before the update (746), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

Author: @ymkjp