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.
トラッキングコードを追ってみるともう時すでに遅し。ドイツに返送されてる…
さすがにもう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 :
日本語の住所(自宅の住所は神奈川県)も添えたにもかかわらず着いたのは愛知県。 もう開いた口が塞がらなかった…
トラッキング番号は分かっているものの、荷物がもう届いてしまっているのでこれ以上追跡のしようがなさそうだし、これ以上不毛なやりとりをするのも疲れたので泣き寝入りすることにした。
このエントリを書くにあたってもう一度sphykeの公式サイトを見に行ったら日本向けの販売ページがあった。 そっち最初から案内してくれよ!
そちらで買えば確実に届きそうだけど、本家での価格よりかなり高いしもう疲れたので今は買う気力が失せている。
というわけでsphyke C3Nの購入を検討されている日本の方は日本向けの販売ページから買うことをオススメします。。
Rails Tutorialの解説の古い部分まとめ(随時更新)
部署の勉強会で、Ruby on Railsを使ったプロダクトを作ることになり、Rails Tutorialを参考にしながら実装を進めていた。こちらのTutorialは執筆から時間が経過していたのか、最新のライブラリのバージョンで実装した場合と異なる部分が多々あり、何度かハマった。
これからRails Tutorialを始める方が同じ思いをしないように、ひとまず現状でハマった部分をまとめておく。
なお、この記事で想定する環境は以下のとおり。
- ruby 2.1.2p95
- ruby on rails 4.2
- rspec 3.3.0
rspec
旧 : it { [should|should_not] xxx } -> 新 : expect(target).[to|not_to] xxx
- shouldはrspec2系の書き方で、3系ではexpectを使う
- 参考:http://qiita.com/awakia/items/d880250adc8cdbe7a32f
spec/support配下のmoduleを読み込む
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、カレンダーサービス
- 現在はlimited preview版
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)ポリシー条件を使いこなす
- (8)ローテーション
- (9)アカウント履歴の監査
- (10)不要な認証情報の削除
- 半年 / 一年など経って退職などで不要になったユーザは適宜削除する
- (1)AWSアカウントのアクセスキーをロック
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でどういったモデルが使えるのかが気になる。
今回のおみやげ。
map(&:to_i)すると文字列は0として評価される
[4] pry(main)> array = Array[1,2,3,'user_id'] => [1, 2, 3, "user_id"] [8] pry(main)> sorted_array = array.map(&:to_i) => [1, 2, 3, 0] [9] pry(main)> sorted_array = array.map(&:to_i).uniq => [1, 2, 3, 0] [10] pry(main)> sorted_array = array.map(&:to_i).uniq.select{ |i| i > 0 } => [1, 2, 3] [11] pry(main)> sorted_array = array.map(&:to_i).uniq.select{ |i| i > 0 }.sort => [1, 2, 3]
Objective-Cについて、後で調べたいこと
不思議な挙動だなと思ったことがあったので書いておく。
現象
@implementation ListClass - (NSInteger)indexOfObjectWithBaseClass:(BaseClass *)baseClass { NSUInteger index = [self.list indexOfObject:baseClass]; return (NSInteger)index; } @end @interface extendClass : baseClass @end
こういった状態になっている時に、 ListClass#indexOfObjectWithBaseClass
にextendClass
を引数として渡しても、内部ではextendClass
として解釈されるらしい。
調査結果
あとで書く
まとめ
あとで書く