ポジティブ丸メガネ

2年目エンジニアです。

Swift4でAmazon Product Advertising APIを叩く

前提

AWS

  • AccessKeyId
  • SecretKey
  • AssociateTag

はご自身で取得してください。

ドキュメント

ポータルページには下記リンクが張ってあるんですが、これは古いです。注意して下さい。 Product Advertising API

僕は下記を見ながら作りました。英語ですが頑張りましょう。 docs.aws.amazon.com

やること

ISBNから本のアフィリエイトリンクを取得したい。ItemLookupを使って取ってくるようにしているので、各自使いたい方法に置き換えてください。大変なのは、Signatureを作る部分だと思うので。

コード

Signatureを作るためにHMAC SHA256で署名しないといけないので、CryptoSwiftを使わせてもらいました。 github.com

import Foundation
import CryptoSwift

extension Date {
    func jpDate(_ format: String = "yyyy/MM/dd") -> String {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: "ja_JP")
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}

extension String {
    func urlAWSQueryEncoding() -> String {
        var allowedCharacters = CharacterSet.alphanumerics
        allowedCharacters.insert(charactersIn: "-")
        if let ret = self.addingPercentEncoding(withAllowedCharacters: allowedCharacters ) {
            return ret
        }
        return ""
    }
    
    func hmac(key: String) -> String {
        guard let keyBytes = key.data(using: .utf8)?.bytes, let mesBytes = self.data(using: .utf8)?.bytes else {
            return ""
        }
        let hmac = try! HMAC(key: keyBytes, variant: .sha256).authenticate(mesBytes)
        return Data(bytes: hmac).base64EncodedString()
    }
}

let isbn = "isbn number"

// parametersはkey名で昇順にソートされていなければならない
// 僕はめんどくさかったので主導で雑にやってます
var parameters = "AWSAccessKeyId=" + "YOUR ACCESS KEY"
parameters += "&AssociateTag=" + "YOUR TAGS"
parameters += "&IdType=" + "ISBN"
parameters += "&ItemId=" + isbn
parameters += "&Operation=" + "ItemLookup"
parameters += "&SearchIndex=" + "Books"
parameters += "&Service=" + "AWSECommerceService"
parameters += "&Timestamp=" + Date().jpDate("yyyy-MM-dd'T'HH:mm:ssZZZZZ").urlAWSQueryEncoding()

let target = "GET\nwebservices.amazon.co.jp\n/onca/xml\n\(parameters)"
let signature = target.hmac(key: "YOUR SECRET KEY").urlAWSQueryEncoding()
let url = "https://webservices.amazon.co.jp/onca/xml?\(parameters)&Signature=\(signature)"

// urlにGETリクエスト送ればXMLが返ってくる

レスポンスがXMLっていうめんどくささがあり、非常にだるい。今回はYahoo Japan様の下記を使ってParseしたけど。 github.com

おすすめ

楽に実装するなら、Proxy的なAPIを作って、そのAPIに署名やXMLのパースをやらせるのが早いかと。以前それでやったんですが、なんとなくSwiftでやってみたくなったんですよね。やらなきゃよかったと思ってます。結構手間取りました。

Node.jsならnpm packageにProduct Advertising APIを叩くものも、XMLをParseしてくれるものも揃っているので、もっと楽だと思います。

おわり。

参考

非常に助かりました。

Amazon API 経由で書籍を検索する

株式会社エムティーアイを退職しました。

昨日(2017/12/27)、新卒として入社した株式会社エムティーアイへの最終出社でした。退職日としては2018/1/15なんですが、個人的には退職した!って感じなので、色々覚えているうちに記しておこうと思います。

入社まで

京都工芸繊維大学という大学および大学院で情報工学を学んでました。関東の方には全く馴染みがない大学かと思いますが、一応理系の単科国立大学です。大学のなかには理系の人だらけという、若干男臭い大学でした。ただ、情報工学をやっている人とプロダクトデザインやグラフィックデザインといったデザインをやっている人が一緒にチームを組んで、半年かけて1つのプロダクトを作る講座などもあり、個人的にはとてもよい大学でした。

大学でやったこととしては

  • ArduinoやRaspberryPiなどのハードウェアを使って課題解決
  • iOS/Androidアプリを使って課題解決

をやってました。基本的にはハードウェアやアプリ内に閉じたプログラミングをしていたため、Webには非常に疎い状況でした。

就活では、

を武器にして各Web企業と戦っていました。いろいろな企業を見させていただきましたが、結果的には株式会社エムティーアイへ入社することにしました。

ちなみにエムティーアイは、ルナルナやmusic.jpなどのサービスを展開する企業です。念のため。

入社してからやったこと

興味ない人はここは飛ばしてOKです!日記みたいになっちゃってる。

研修

同期は約40人で、そのうちエンジニアは8人でした。新卒約40人で約2ヶ月間集合研修を受けました。集合研修ではマーケティングにかなり力を入れていて、みっちりと学ぶことができました。学生時代は、自分で課題を見つけてきて、それに対して理論を肉付けしていっていたのですが、マーケティングでは広い視点から課題に落としていく感じなので、非常に新鮮で楽しく感じました。また、入社前は「同期とかどうでもいいからさっさと仕事させろや」って思った私ですが、なんだかんだ仲の良い同期が10人ほどでき、プライベートも遊ぶほどになるような仲間になったので、非常によかったなと思いますし、退職したあとも関係を続けていきたいと思えているので、自分でビックリしています。

集合研修後は、1ヶ月の開発研修でした。基本的には座学でしたが、個人的には95%は知っている内容だったので、非常に退屈だったのを覚えています。話も聞かず、せっせと何かを作っていたような記憶があります。

7月上旬にヘルスケア事業部に配属されました。初年度は@vatscyさんがOJTとしてついてくださりつつ2人のチームとして、そして2年目からはOJTではなく普通にチームとしていろいろなことをやってきました。

はじめてのWebAPI

当時、AWSを使ってみようという流れが来ていて、その流れに乗って、v0系のServerless Frameworkをつかって簡単なWebAPIを作りました。私にとっては初めてのWebAPI実装でした。

これがめちゃくちゃ苦労した記憶があります。わからないことだらけ、ServerlessFrameworkのドキュメントは整っていないなどが重なり、初めて終電で帰りました。ただ、この開発を通じて、現場での開発のイロハやWebAPIとは何か?を学ぶことができたので、非常に良い経験になりました。また、AWSを使ってプライベートでもAPIを構築できるようになったのも非常に大きかったです。

プロトタイプiOSアプリ作成

上記で作ったAPIを活用したプロトタイプiOSアプリを開発しました。社長に見せるからサッサと作ってね〜みたいなノリで言われて、必死に作った覚えがあります。ただ今考えると、ここで作ったプロトタイプの感触がよかったのか、ルナルナメディコという医師とユーザーをつなぐサービスへとつながっていったので、やったことは実は大きかったのかもしれないですね。

闇の期間

たぶんあんまりやる案件がなくて、全然開発をしていなかったと思います。あまり深くは触れないでおきます。

Androidタブレット向けアプリの開発

ルナルナメディコを実際に医師に使ってもらおうという話になり、開発スピードやタブレットのやすさの観点から、Androidで開発することになりました。これもプロトタイプではありますが、個々の出来によってビジネスを左右するようだったので、デザイナーの方にも入ってもらって開発しました。JavaAndroid Studioを使って開発を進めていきました。

社外の方に使ってもらうはじめてのプロダクトだったので、非常に楽しく実装することができた記憶があります。Android Studio高機能で最高やん!ってなってた気がします。

栄養指導サービスの開発

LINEを絡めて、栄養指導をやれないか?みたいな話が来ました。ちょうどプライベートでLINE Bot作ったりしていたので、調査段階から入って、進めていきました。

このときは、Node.js x ExpressをAWS Beanstalk上で動かすWebサービスとして構築しました。はじめてのWebサービスの開発だったので、毎日が学びばかりでした。また、S3やCognitoといったAWSのサーバレス系のサービスも活用して作っていたので、最新技術を活用していろいろやっているのが非常に楽しかったです。

ダイエットアプリの開発

部署の偉い人から、我々のチームにダイエットアプリを作ろうという話が舞い込んできました。アイディアのベースはあるから、自由にやっちゃっていいよっていうラフさできました。結果的にはkilosをリリースすることができました。

このkilosの開発は、アプリとデザインは私が、バックエンドは@vatscyが担当して本当に2人で開発したサービスとなりました(ロゴはデザイナーに書いてもらった)。スピード感を非常に大切にしつつも、毎日使ってもらいたいアプリだったので、やはり使う人が快適に使えることも大切にしていました。その観点で、アプリのアーキテクチャやライブラリの選定、画面の見せ方や文言の統一など、ユーザーのことを第一に考えてサービスを作っていく日々は最高でした(残業結構しちゃったけど)。作っては社内テスターに使ってもらうことを繰り返し、どんどん意見をもらい、どんどん改良していくスピード感と、それに合わせて自分の力がついていっている感覚はなかなか味わえるものではないなと感じていました。

2017年の9月上旬にリリースしましたが、退職まで毎日、ユーザーの意見を見てよりよいものにできないかを考えていました。自分のサービスだ!という愛着はすごいので、今後も発展していけばいいなと願っています。

ルナルナアプリの開発

女性の方だけでなく、男性の方まで名前は聞いたことがあるであろうルナルナのiOSチームに9月中頃からジョインして開発をするようになりました。

ルナルナのiOSアプリは、内部的にはかなりきれいに作られており、kilosの開発を経験したからこそ感じる出来のよさがありました。ルナルナにジョインすることで更に自分のiOS開発力は上がったことが実感でき、やりがいがありました。自分が開発した機能が日本の多くの女性に届く環境はなかなかないと思うので非常にいい経験になりました。

また、kilosは2人でほぼすべてをやっていたのですが、ルナルナではちゃんと各担当がいたので、大人数の開発になりました。ルナルナのアプリチームは非常に若い方ばかりで、やりやすく、楽しい毎日でした。

なぜ転職するのか

端的にいうと

  • エンジニアとしての成長速度をもっと高めたい
  • よりよい待遇で働きたい

の2点につきます。自分は社会的に見てどの程度の人間なのかを知るために軽い気持ちで転職活動をはじめました。様々な企業の採用担当者やエンジニアと会うにつれて、自分の人生について考えるようになりました。その中で、「このままで自分の夢が達成できるのか?」という疑問が沸々と湧いてきて、本格的に面接を受けるようになりました。縁あって、上記2点を満たすような企業からオファーを頂くことができたため、転職することにしました。

エムティーアイではめちゃくちゃ自由にやらせてもらったので、感謝の気持ちが非常に大きいです。自由にやらせてもらえたからこそ、トレンド周りの技術を身につけることができ、よりよい待遇の企業へ転職することができたというのは、なかなか皮肉かもしれないなといつも感じています。。。

次は何するの?

次は、株式会社ディー・エヌ・エーDeNA)でiOSアプリを作りつつWebもやるというマルチな感じでお仕事をする予定です。これに合わせて年明けに武蔵小杉あたりに引っ越すのですが、全然荷造りできてないのでヤバさを感じています。

転職しますが、これからも引き続きよろしくお願いできたら幸いです。

おわり。

4Kテレビを買うときに重要視したこと

最近4Kテレビを買いました。買ったのはこれ。

買って3日くらいしか経っていませんが、テレビが大きくてきれいなだけでなんだかQoLが上がった気がしています。我ながら単純である。

まずはじめに、Before -> Afterをどうぞ。Afterがちょっとわかりにくいな。

f:id:seiya-orz:20171120221122j:plainf:id:seiya-orz:20171120221152j:plain

テレビ台内に余裕で収まっていたのが、テレビ台から余裕ではみ出しちゃうサイズになってます。

★追記(2017/12/28) 4Kレグザの動画配信サービス「Amazonプライム・ビデオ」対応について|テレビ|REGZA:東芝〈レグザ〉

購入した49BZ710XがアップデートでAmazonプライムビデオに対応しました!しかも4Kビデオも見れる!ヒャッホウ!!みるこれボタンからプライムビデオアプリを起動することができます。早速使ってみましたが、やはり動きは多少もっさりしている感はありますが許容範囲内!テレビだけで見れるとか、もうこいつ最強やないか。。。

買う前の私の生活

  • BRAVIA 32型 07年製を5年ほど使ってた
  • PS4FIFAサッカーゲーム)やJRPGを主にプレイ
  • nasneでアニメを毎日視聴
  • バラエティやスポーツ番組も視聴
  • 朝はニュース番組を視聴
  • たまにPS4のAmazonPrimeビデオで映画とか視聴

という感じ。まあ1日平均2〜3時間くらいはテレビが点いてる。ずっと集中して見ているわけではないけど。ちなみに10畳位の部屋に住んでいて、視聴距離は近くて2m弱、遠くて3m弱でした。

購入の動機

  • 大きい画面でゲームしたい
  • きれいな画面でゲームしたい
  • nasneではできない2番組同時録画をしたい
    • アニメはnasne、バラエティ・スポーツ番組はテレビで録画とかしたかった
    • アニメもテレビにしたいけど、電車で見られるようにこのアプリつかってお出かけ転送したいからnasneにしてる
  • 仕事柄、目が悪くなってきたのか、3m弱から見ていると見えづらくなってきてた

てな感じです。前半3つが主ですね。

この時点での買う条件は

  • 4K
  • 40インチ以上
  • 2番組録画可能
  • 外付け挿せば録画可能

あたりで考えてました。

重要視したこと

さて本題。本当に正しいかどうかはわからないけど、調べていくと最終的には下記を重要視しました。読んでいただければわかるかもしれませんが、はじめは予算10万くらいでしたが、やっぱり高価格帯のほうが満足できそうだということで予算を15万強に引き上げました。

応答速度

ゲームをする私にとっては応答速度は非常に重要でした。昔、AQUOSを使っていたとき、パワプロをプレイすると、○ボタンを押して、画面上でバットがスイングされるのが0.5秒後・・・そんな時代がありました。なかなか辛くて、慣れてしまえばなんとかなりますが、とてもイライラしていました。

今回、調べていると、応答速度という観点ではREGZAが圧倒的に良いようでした。低遅延モード(ゲームモード)も存在しているので、特にいいと。ひとまずREGZAで絞ることに。購入したもの以外だと、下記あたりを見てました。型落ちとかも全然ありかなとも。

HDR対応

HDRとは、簡単に言うと「明暗を表現できる幅が広い」機能のこと。私的にはこれも非常に重要だと思っていて、よくきれいな景色を写真で取ったときに、なんか暗かったり、暗くなりきらなかったりと、不満があることが多いのです。HDR対応であればその部分の表現力が高くなるので、より映像に満足できるのではないかと考えたわけです。

ただ、HDR対応を謳っていても、なんちゃってHDRというのが非常に多いらしい。よって高価格帯を探すことに(まんまと策略にハマっている気もするが)。

言わずもがな4K

これもなんちゃって4Kというのがあるらしく、RGBWのものはなんちゃって4Kなんだって。 the360.life

まあそんなに大差ないかもしれないけど、どうせならいいの買っちゃうかーって感じ。どうせ長く使うし。

音がいいこと

音もなかなか重要だと思っています。別に、スピーカー買えばいいええがなって話ですが、追加でお金もかかるしスペースもいるしで、テレビにいいスピーカーがついていればお得だなあと思ってました。

この時点で、購入した710Xが最有力候補に。

パネル方式

VAとIPSというのがあるらしい。 tv-erabikata.at.webry.info

ヨドバシカメラとかで、REGZAの510X(VA)と710X(IPS)を比較してみたんですが、VAのほうは映り込みがひどい感じがした。暗い画面だとめっちゃ自分の顔が映り込んで、すごい萎えた。やっぱ実機見るの大事。

リモコン操作の応答速度

はじめはこの観点なかったですが、これは地味に効いてくるかなーと思います。BRAVIAの8000Eとかも見てたんですが、操作が少し重い。

Androidが入ってるというのもなんか印象悪い。スマホ用のOSを無理やりTVに載せてるなんて、重いに決まってる。ただ、Primeビデオを見れるのは羨ましいけど。

とにかくこの点でもREGZAは優れている様子。

購入するお店で気をつけたこと

私は、コジマネットで購入しました。ずっと価格.comを見ていましたが、やはり最安で争っているお店は、保証等の対応周りで不安が残りました。そこそこ高い買い物なので、ちゃんと保証してくれるところがいいなーと思ってました。

コジマネットの場合は、5年保証も無料でついてくるし、送料無料だし、たまたまGoogleHomeMiniもついてくるしで、総合的に見ると、最安店で5年保証つけた値段+5000円くらいだったのでコジマネットで決定。

とにかく

  • お店の対応がしっかりしているか
  • 保証がついているか

をしっかり見たほうがよさそうです。

49BZ710Xのレビュー

上記重要視ポイントを鑑みると、49BZ710Xになりました。

  • 4K&HDR対応
    • レビューもかなり高い
    • 実際とてもきれい
  • スピーカーがいい
    • 重低音バズーカが搭載されていて重低音がすごい
    • 実際かなりすごくて、臨場感がすごい
  • 応答速度が高い
    • FIFAやってみましたけど、まじでストレスフリー
  • 画面がでかい
    • 本当は43インチくらいがよかったんですが、710Xは49〜しかなかったの
    • でも使ってみるとそれがよくて離れてみてもよく見えるし迫力がすごい
  • 録画視聴時に早送りボタンみたいなのでCM飛ばしできる
    • nasneでもできるんですが、REGZAでもできて感動した

結局約16万でしたが、5年保証もついてるし、なかなか満足。テレビ見るの楽しいし、ゲームするの楽しいし、最高です。買ってよかった!

周辺機器

外付けHDDはこれ。使ってみても、音ほとんどしないし、コンパクトだし、安いし。問題なく動作してます。

HDMIケーブルはこれ。HDR対応だし。やすいし。安すぎだし。ビビるわ。

あとは前から使ってるけどPS4×nasne。マジ最強。録画した番組をスマホに予め転送しておけば、通信無しでスマホで見れる。アプリでその機能使うには買い切り600円くらい払わないとあかんけど、安いもん。最近は映像の良さを求めてPS4 Proにしておけばよかったとめちゃくちゃ後悔してる。

nasne 1TBモデル (CUHJ-15004)

nasne 1TBモデル (CUHJ-15004)

おわりに

高い買い物しちゃいましたが、めちゃくちゃ満足してます。普段から家に引きこもってるインドア人間なので、余計によかったのかもしれない。もともとあんまりお金を使わない(飲み会行かないお酒全く飲まないタバコ吸わない)タイプなので、こういう買い物はたいていイイヤツ買いがち。でもいい感じ。

よい4Kテレビライフを!