tech::hexagram

personal note for technical issue.

Chefで構築していた仮想開発環境をfedora 20からCentOS6.5に乗り換えた

少し前からChefを使って仮想開発環境を作れるgenerator(コードネーム:Almagest)を作っていた。

当初はOSにfedora 20を使っていたが、同僚からvagrantのboxを検索できるサイトを教えていただいた。

fedoraの新しいバージョンについてもイメージが乗っていたものの、VagrantのGuest Additionsのバージョンアップが上手く動かない問題があった。VagrantのboxのGuest Additionsのアップデート方法

このため、fedora 20 -> fedora 21 -> CentOS6.5とイメージを変更した。

fedora 20 -> fedora 21に乗り換えた際のハマりどころ

新しいboxに以下のコマンドが存在しなかった。

  • tmux, readline-devel, tar

tmux に関してはcookbookを追加して解決。

boxのurlを変更した後に bundle exec knife solo bootstrap almagest を実行すると、anyenv経由でrubyのインストールに何度か失敗した。

rubyのインストールの際に tar や、readline-devel が必要らしく、その途中でコケていた模様。

対応法としては、anyenvのcookbookに tar, readline-devel に依存する旨を明記する。

あるcookbookが別のcookbookに依存する場合は、以下の3点を行えば良いらしい。

  • (1) : Berksfileに依存するcookbookを記載 or 必要なcookbookを site-cookbooks 以下に配置
    • 今回は前者だったが、supermarketに乗ってないcookbookに依存する場合はおそらく配置すれば大丈夫
+cookbook 'tar',  '~> 0.7.0'
+cookbook 'readline', '~> 0.0.5'
  • (2) : metadata.rb に依存関係を明記
+depends          'tar'
+depends          'readline'
  • (3) : recipes/default.rb に依存関係を明記
+include_recipe 'tar::default'
+include_recipe 'readline::default'

自分の作ったリポジトリ見ていると、 Berksfile に定義されているのに site-cookbooks にそのファイル突っ込んでいたりと、差分的に要らないものがいくつかありそうなので後で整理したい。

fedora 21 -> CentOS 6.5に乗り換えた際のハマりどころ
  • knife solo bootstrapでchefを適用した後vagrant reloadするとIPのアサインに失敗する
    • 自前のdotfilesのcookbookが原因だった模様。.bashrcをまるっと置き換えてしまうと良くないようなので、ここは改善する予定。

iOSアプリのCoreDataの中身を確認する方法

雑記程度に。

iOS7以降では、CoreDataの保存方法がWALモードと呼ばれるものに変わった(stackoverflow)ため、単純にApp.sqliteだけ抽出しても確認ができない。

確認環境

Xcode6.4

実機からxcappdataを取り出す

  • Window->Devicesから端末の情報画面を開く
  • Macにexportしたいアプリ名を選択して歯車を押して「Download Container」

xcappdataからsqliteファイルを取得する

cp xx\ YYYY-MM-DD\ hh\:mm.ss.xcappdata/Appdata/Documents/XX.sqlite ./
cp xx\ YYYY-MM-DD\ hh\:mm.ss.xcappdata/Appdata/Documents/XX.sqlite-wal ./
cp xx\ YYYY-MM-DD\ hh\:mm.ss.xcappdata/Appdata/Documents/XX.sqlite-shm ./

取得したsqliteファイルを開く

sqlitebrowserが便利。 インストールして起動後、XX.sqliteをウィンドウに放り込めばOK。

sphykeのセキュリティパーツを個人輸入しようとしたら最悪だった話

タイトルの通り。

GWにロードバイクを買ったこともあり、ちょこちょこと自転車用のパーツを買い足している。

sphykeのC3Nという、自転車のボルト部分を鍵にしてサドルや前後輪の盗難防止をするロードバイク用のセキュリティパーツを自転車購入時と同時期に注文したら対応がトンデモだったのでここにぶちまけておく。

時系列的には以下の様な感じ。

2015.05.08

オンラインショップで当該パーツを購入。 購入直後は注文内容の確認メールが来ただけでその後発送の連絡など一切なし。

2015.05.26

さすがに2週間たっても音沙汰が無いのはおかしいのでサポートにメール。 すると以下の回答が。

Oh no, this is bad. 
For all orders in the last 2 weeks we have sent out an email from our head engineer- see it below.

It appears that this email has not made it through to you, and that we missed the fact you had not replied. 
I am very sorry about this.

Our new 2015 stock has landed, and is current in customs. So will be sent out on Thursday - worse case Wedsday

在庫切れだったのでこれから発送するとのこと。まぁ仕方ないかともう少し待つ。

2015.06.04

担当者から鍵の番号の設定をどうするかメールが来る。これでお願いしますと返答したものの回答なし。

2015.07.06

色々忙しかったりしたのもあって注文したことすら忘れかけてた。思い出したタイミングでまだ届かないのでメールすると以下の回答。

I tracked your order;

Result:

Shipment number
xxxxxxx

 It was not possible to reach the recipient; the item was scanned. The item is either being delivered in Japan or being held for pick-up.

It looks like your C3N lock made it to your address, but they could not find you.

ラッキングコードを追ってみるともう時すでに遅し。ドイツに返送されてる…

image

さすがにもう2ヶ月も待たされて届かないしキャンセルさせてくれというものの、荷物は発送済みだからキャンセルできないと断られる。もう一度送り直すから英語と日本語の宛先両方書いてくれとメールが来る。

I can not cancel your order as it has been already sent.
 
However because you did not receive your order I can send you new product
 
Do you know why they could not find you?
 
please give me your address again in Japanese, and also in English
 
I will put both addresses on the  package

2015.07.23

荷物は届いたぞとメールが来る。

it has been sent
 
Result:
Shipment number : xxxx
Item status : The item reached local delivery in the country of destination Japan at Jul 17, 2015.
Additional processing steps : 

image

日本語の住所(自宅の住所は神奈川県)も添えたにもかかわらず着いたのは愛知県。 もう開いた口が塞がらなかった…

ラッキング番号は分かっているものの、荷物がもう届いてしまっているのでこれ以上追跡のしようがなさそうだし、これ以上不毛なやりとりをするのも疲れたので泣き寝入りすることにした。

このエントリを書くにあたってもう一度sphykeの公式サイトを見に行ったら日本向けの販売ページがあった。 そっち最初から案内してくれよ!

そちらで買えば確実に届きそうだけど、本家での価格よりかなり高いしもう疲れたので今は買う気力が失せている。

というわけでsphyke C3Nの購入を検討されている日本の方は日本向けの販売ページから買うことをオススメします。。

Rails Tutorialの解説の古い部分まとめ(随時更新)

部署の勉強会で、Ruby on Railsを使ったプロダクトを作ることになり、Rails Tutorialを参考にしながら実装を進めていた。こちらのTutorialは執筆から時間が経過していたのか、最新のライブラリのバージョンで実装した場合と異なる部分が多々あり、何度かハマった。

これからRails Tutorialを始める方が同じ思いをしないように、ひとまず現状でハマった部分をまとめておく。

なお、この記事で想定する環境は以下のとおり。

rspec

erb

bootstrapの記法が古い。これはRails Tutorialがbootstrap 2系を想定した記述になっているため。Gemfileにバージョン指定なしでbootstrapを入れると、bootstrap3系がインストールされるため、以下のように2系と3系で異なる部分は修正する必要がある。

  • class名の違い
# 旧
<div class="span6 offset3">

# 新
<div class="col-md-6 col-md-offset-3">

## 領域指定のclass属性が変わっている
  • flashで黄色のバナーを出す場合
# 旧
flash[:notice] = "hogehoge"

# 新
flash[:warning] = "hogehoge"
  • フォームで属性値の入力欄を追加する場合
# 旧
<%= f.label :name %>
<%= f.text_field :name %>

# 新
<div class="form-group">
  <%= f.label :name, class: "control-label" %>
  <%= f.text_field :name, class: "form-control" %>
</div>

## form-groupのdivで囲い、中にcontrol-labe, form-controlのclass属性を追加する

scss

bootstrapのLESSの変数名が上記同様、2系3系で異なる。旧バージョンではlowerCamelを採用していたが、新バージョンではハイフン区切りを採用している。

# 旧
$grayLighter

# 新
$gray-lighter

AWS Summit Tokyo 2015に行ってきた

グランドプリンスホテル新高輪で6/2(火)、6/3(水)の2日間に渡り開催された、AWS Summit Tokyo 2015に行ってきた。 AWSのサービスは個人のドメイン向けにRoute53, VPS, EC2, S3などを使っているものの、あまり知識の深堀ができていないので、より積極的に使えるよう参考になるセッションを色々と聞いた。

自分が聞いたセッションの一覧は以下のとおり。細かいスライドの内容はgistに記載しているのでそちらを参考にしていただければ。

2015.06.02 Day1

KEY-01 Day1 基調講演

10:30-11:50

お昼

お弁当が配られた「飛天会場」の入り口。巨大なディスプレイにAWSを利用しているパートナーのインタビュー映像が写されていた。

まい泉のお弁当。美味しかった。

EG-01 オンワード樫山のシステム再構築におけるSAP on AWS導入事例

13:20-14:00

TA-03 Amazon Redshift Integration Deep Dive

14:20-15:00

満員で立ち見だったので、スライドの内容のメモは取れなかった。スライドのキャプチャのみ掲載。

メモ

  • RedShiftは並列計算により高速にデータ分析ができるデータウェアハウスソリューション。

TA-04 Enterprise Applications Deep Dive

15:20-16:00

メモ

  • Amazon WorkSpaces : クラウド上の仮想環境
  • Amazon WorkDocs : フルマネージド型のセキュアなエンタープライズストレージ・共有サービス
  • Amazon WorkMail : セキュリティに優れたマネージド型の企業向けEmail、カレンダーサービス

TA-05 AWS Elastic Beanstalk, OpsWorks, CodeDeploy, CloudFormationを使った自動デプロイ

16:20-17:00

メモ

  • Elastic Beanstalk, OpsWorks : デプロイ・プロビジョニング・モニタリングがまとめて行える。
    • Elastic Beanstalkは定番構成の構築・アプリデプロイに使える
    • OpsWorksは多様なアーキテクチャをサポート。chefのレシピも使える
  • CodeDeploy : デプロイに特化したサービス。グループ内に一度にデプロイしたり1台ずつデプロイしたりと設定可能。
  • CloudFormation : 設定管理 & クラウドオーケストレーションサービス。
  • CodeDeploy + CloudFormationで更にきめ細かい要件を満たすデプロイ・プロビジョニングが行える。

EG-05 【パネルディスカッション】高まるゲームプレイ動画の価値。注目市場の今後の展望とは!?

17:20-18:20

メモ

  • Lobiの紹介とプレー動画の例にモンストが出ていた
  • ゲームのプレイ動画はスマホゲームの市場拡大に大きなインパクトを与えている
    • ゲームのファンを増やす入り口として
    • 既存ユーザの活性化の役割として
  • SDKとしてゲーム内に取り込まることで、プレー動画の作成・共有の敷居がかなり下がっている
    • 導線次第だが、サービスの提供の仕方によってはゲーム攻略サイトをも凌駕する可能性がある

2015.06.03 Day2

TA-10 AWSセキュアデザイン(IAM)

15:20-16:00

メモ

  • IAM Top10ベストプラクティス
    • (1)AWSアカウントのアクセスキーをロック
      • コンソールから設定できる
    • (2)個々にIAMユーザを作成
      • アカウントは貸し借りしない、適切な権限を付与できるように逐一ユーザを作成
    • (3)特権ユーザにはMFA
      • ハードウェアのMFAなら2個以上持っておく
    • (4)強度の高いパスワード
      • ポリシーに沿ったパスワードを設定する
    • (5)最小限の特権
      • IAMユーザに対して必要最低限の権利を付与
    • (6)EC2で動作するアプリにはIAMロール
      • AWS操作権限を定義するための仕組み
    • (7)ポリシー条件を使いこなす
      • IAMポリシーはEffect, Action, Resource, Condition
        • Effect : Allow / Deny
        • Action : 対象となるAWS操作
        • Resource : 対象となるAWSリソース
        • Condition : アクセス制御が有効となる条件
    • (8)ローテーション
    • (9)アカウント履歴の監査
    • (10)不要な認証情報の削除
      • 半年 / 一年など経って退職などで不要になったユーザは適宜削除する

TC-10 Auto Scaling x Spot Instancesによるスケーラビリティとコストカット事例

16:20-17:00

メモ

  • 負荷に応じて利用するインスタンス数を自動的に追随することで、劇的にコストカットを行うことができる
    • 月単位のコストは下がるが、初期コストはある程度かかるので、どの程度運用するかにもよりそう

TA-12 新サービス解説セッション 〜Amazon Elastic File SystemとAmazon Machine Learning〜

17:20-18:20

メモ

  • Amazon Machine Learningは二項分類・多クラス分類・回帰分析が可能
  • 教師データ・評価データの割合はS3, RedShift, RDS上のMySQLに格納されたデータを指定。それぞれ7 : 3で自動的に振り分けられる
  • 教師データからモデルを生成し、生成されたモデルの精度を3割の評価データを利用して評価する
  • モデルを使った予測はバッチ予測ないしリアルタイム予測が使える

おわりに

  • IAMの作り方は参考になったのでこれからEC2で環境を作るときには参考にしてみたい。
  • Elastic Beanstalk, OpsWorks, CodeDeploy, CloudFormationはデプロイのやり方によって最適なサービスを選んでいけると良さそう。ひとまず試したいときにはElastic BeanstalkないしOpsworksあたりから触ってみたい。
  • Amazon Machine Learningでどういったモデルが使えるのかが気になる。

今回のおみやげ。