シリコンバレーのマーケター日記

東京、シンガポールを経てシリコンバレーで働く、マーケター。英語、プログラミング、データ分析は次世代マーケターの必須スキルだと信じて進む。

SwiftData

オーストラリア出張、第二四半期のレビューと、ブログ更新が途絶えてしまいました。いかんいかん。

人生初のシドニー出張での学びは、”オーストラリア人が仕事しないのはしょうがない”です。ランチから普通にビール飲みます。金曜日は午後3時からみんなオフィスでビール飲みます。天気はいいし、街並みも綺麗、海は近いし、飯もうまい。住める!と思いました。マーケットとして、オーストラリアはアジア太平洋地区に含まれますが、日本・韓国・台湾・香港などのアジア先進国と一緒に考えるのは、違うと思いました。肌感覚としてヨーロッパに近い感じがします。

f:id:yuyutata:20150704212143p:plain

 

今日は、データベースをアプリ内に保存する方法。

どうやら、SwiftDataがオススメとの情報をSwiftサラリーマンさんブログに載っていたので、使ってみます。

以前、dmdbというラッパーも触ってみたのですが、dmdbはObjective-Cで書かれているのに対して、SwiftDataはSwift言語で記述されておりシンプルということなので、こちらを使います。

ryanfowler/SwiftData · GitHub

環境構築:

1) SwiftData-master.zipをダウンロード

2) SwiftData.swiftファイルをプロジェクトにdrag&paste 

3) libsqlite3.dylibをライブラリーに追加

4) Headerファイル(.h)を作成し、 #import "sqlite3.h" と記述

5) Objective-C bridge headerとして作成したHeaderファイルを指定

*(4), (5)はSDKを入れる手順のところで何度か触れているので詳しくは割愛

 

データを入力、出力:

1) Tableをつくる:SwiftDataでCreate Tableする方法。

2) Insertする:SwiftDataでInsertを発行する方法。

3) Selectする:SwiftDataでデータをselectする方法。

*とってもわかりやすいページを見つけたのでリンク貼ります

これに従い、println(uiLabel1.text)で出力すると、以下のように、Insertした時間とともに、アプリを一度閉じてもちゃんと記録されていることが確認できました。

Optional("Test:Admin:2015-07-04 11:50:40 +0000:2015-07-04 11:50:40 +0000")

Optional("Test:Admin:2015-07-04 11:50:40 +0000:2015-07-04 11:50:40 +0000")

Optional("Test:Admin:2015-07-04 12:01:58 +0000:2015-07-04 12:01:58 +0000")

Optional("Test:Admin:2015-07-04 12:13:59 +0000:2015-07-04 12:13:59 +0000")

Optional("Test:Admin:2015-07-04 12:17:19 +0000:2015-07-04 12:17:19 +0000")

 

ポイント

Binding Value:

The provided objects will be escaped and will bind to the '?' characters (in order) in the string of SQL.

'?'はbinding valueと呼ばれるもののようです。これは"SQLのクオリ内に埋め込まれた変数”のこと。以下のように、テーブルのカラム名で値を定義すると、それがbinding valueの中に入って、データベースへ格納されていたのですね。

let name: String = "Test"

let role: String = "Admin"

let sql = "insert into users(name, role, created, modified) values(?, ?, datetime('now', 'localtime'), datetime('now', 'localtime'))"

 

雑感

ひとまず、データをローカルに格納する方法がわかりました。次は、今回はletで定数定義だったので、変数定義にして、サーバーつ繋げてみたいなーと思います。

一歩一歩。

 

 

 

シンガポールでの採用活動

シンガポールでの就職活動的な記事は良く見ますが、採用側としてのエントリー。

2015年2H(後半)に、私のチームに一人追加する承認がおりたので、先週から面接を進めています。

外資系企業がシンガポールで人を採用する際のプロセスを簡単に。

1)グローバルでヘッドカウントが決まる

US本社の上の方で、2015年の後半は、正社員数をxx人増やす。

2)そのうち地域(アジア、ヨーロッパ、北米、南米)に割り振る

3)上司にbusiness reasonを明確にしつつ陳情

これは非常に重要です。こんなことしたいけど、人が足りなくて出来ないよー泣。的な。

4)自分でJob Descriptionを書いて、人事を通して応募を募る

 

応募をしてくる人々を見ていて思うこと

1)Regional roleに、日本人の応募はほぼない

Regional roleとは国を跨いだアジア全体を見るチーム/役職であり、アジア各国のチームと離れて働きながら、全体最適を考える役職です。必要なスキルは、英語、コミュニケーションがベースに合って、その上に専門的な経験・知識が必要です。

シンガポール人、韓国人、台湾人、インド人ばかりで、日本人からの応募は今の所ありません。

2)学歴半端ない

だいたい社会人3−5年目、年収600ー800万円くらいレンジでの採用ですが、MBAやら、北米大学卒やらがどんどん応募してきます。本当に日本は言葉の壁に守られていますね。日本オフィスで面接していた時は、なかなか見ませんでした。

3)あんまり算数できない?

有名大学卒、MBAをばんばん面接しています。自信に溢れ、流暢な英語で話すわけですが、簡単なデジタルマーケティングのクイズ(例えば、CPMとCPCはgivenで、CTRを計算して的な問題)では、つまづく人多数です。なんだろう。。決して圧迫面接ではありません。。

4)シンガポールは狭い

国が小さいので業界は狭く、けっこー共通の知り合いがいたりして盛り上がります。逆にここで評判を落とすと怖いですね。

 

雑感

日本で日系企業の社会人3−5年目の給料は500万円くらいでしょうか?現在の為替(1ドル=92円)を考えると、シンガポールの方が給料が良いです。

またヘッドカウントも、上から下に落ちてくるのでシンガポール本社にいるほうがチームが大きくなり昇進のチャンスが広がり、給料upにつながります。

そして税金10%以下です。例えば、いまの採用ポジションで750万円でオファーを出したとすると、税金8%で手取りが690万円。これは日本での年収1000万円に相当します。

 

APP -> MySQL: アプリからJSON形式でサーバーへ送る

アプリからサーバーに送るデータ/パラメータの数が多く動的ならば、JSONに変換してサーバーに送ることが必要だと思います。

参考サイト:

010 JSONデータのPOST - Swift Docs

キモくないイラストでiOSアプリ勉強-Swiftサラリーマン

以下2ステップで進めてみます。

  1. .swiftで、NSDictionaryをJSONに変換して、URLエンコードする
  2. .phpで、JSONを配列に戻し、MySQLデータベースに送る

.swift

ポイント

NSDataをNSStringにして、.phpに送るためのsyntax、”変数名=変数値”の形に揃える

 

.php

ポイント

"INSERT INTO shop SET item_name='$name'"とスッキリ記述(Swiftサラリーマンさんありがとうございます)

 

結果

f:id:yuyutata:20150620183329p:plain

 

雑感

.swift内でバックグラウンド処理で、

completionHandler: { (data, resp, err) のdataには、.phpファイルのechoメソッド(表示させるメソッド)の記述が戻ってきていました。

f:id:yuyutata:20150620183514p:plain

つまり、ここを見て.phpへの通信完了を判断したらいい。ということでしょうか。completionHandlerをもう少し掘り下げてみようと思います。

(追記:Closure expressionと呼ばれるこの型では、taskが完了するとcompletionHeandlerが呼び出されるようです。ですので、.phpの方で完了した時点で、xxを返し、xxが条件文を書いてあげれば、「POSTが完了したらxする、 POSTが完了しなかったらyする」といったことができそうです。next stepは、SQLiteに一旦記録させてからサーバーに送る。かな。) 

 

来週火曜日から日曜まで、人生初のシドニー出張です。コケージョン(白人)なんだけど地域的には、アジアの一部に入るオーストラリア。個人的に、イージーで人当たりも良く、鼻にかからない感じが、大好きです。たまにイージー過ぎて期日がいい加減なことはご愛敬。久しぶりの冬(南半球)を楽しんできます!

APP -> MySQL: アプリからサーバーへ送る

今日、髪を切りました。シンガポールの地元っ子の間でイケてると噂のローカルな美容室は、サービスが全部入れて30分以内、値段は4000円くらい。だらだら1時間以上もかかってしまう日本の美容室に比べて、とても気に入っています。って誰向けの情報だよ。w

We Need A Hero (Tiong Bahru駅から徒歩10分)

 

さてさて、普段からめちゃめちゃチェックしてるSwiftサラリーマンさんのブログ。初心者がハマりやすいところをしっかりカバーしてくれているのと、おしゃれなおっさんのイラストで和みます。以下のページを参考にしながらアプリからサーバーへデータを送ってみました。

参考サイト:

キモくないイラストでiOSアプリ勉強-Swiftサラリーマン

iOS 7で一新された通信周り〜NSURLSessionってなに?〜 | Developers.IO

 

0) 構成

アプリから.phpへURLエンコードしてデータを送る

.phpファイルからサーバーへログインしてデータをMySQLで送る

 

1) Swift

req.HTTPBody = "id=13&name=Jack": id=13とname=Jackというデータを送る

dataUsingEncoding: 文字列のままでは送れないので、URLエンコードする

NSURLSession: apple的に推しらしいので、NSURLConnectionではなくこちらを使ってみた

 

2) .php

変数にアプリから送ったデータを入れて、それをSQL文で送るときは、item_name="'.$name.'" と記述する。ここちょっとハマりました。

 

3) MySQLで確認

f:id:yuyutata:20150619000111p:plain

MAMPのデータベースを確認すると、ちゃんとJackが送られています。

 

雑感

外部サーバーとアプリを繋ぐことができました。次はもっとたくさんのデータを同時に送るために、JSON形式で送るコードをつってみようと思います。もちろんSwiftサラリーマンさんを参考にして⭐︎

 

php:触れる

数年前に友人からもらったPHPの本を、Singaporeに引っ越すときに奇跡的に荷物に入れていたので、この本で勉強を開始しました。Swiftのオブジェクト指向言語と比べると、だいぶわかりやすいです。

教材

エディターソフト

アドビが提供しているオープンソースのエディターソフトを入れました。比較するものがないのですが、使いやすいです。

Brackets - A modern, open source code editor that understands web design.

PHPを触る

PHPとは、動的なウェブサイトをつくるために使われる言語であり、例えばログイン機能、検索機能などで威力を発揮するようです。

サンプルコード

ログイン機能でパスワードをブラウザのクッキーに保存するサイトをつくってみます。

f:id:yuyutata:20150614172300p:plain

f:id:yuyutata:20150614172324p:plain

クロムから、パスワードを保存するかというメッセージがでました。無事クッキーにログイン用パスワードを保存することができました。

クッキーをセットするときの関数でtime()で保存期間を選択できます。面白いですね。

setcookie('my_id', $myId, time() + 60 * 60 * 24 * 14);

 

雑感

PHP、わかりやすいです。普段サイトでよく見るログイン機能も実装できました。次は、MySQLとPHPを絡めていきたいです。

ちょっと鬱になる日曜のこの時間。トンカツでも爆食いして盛り上げてきます!

 

 

サーバー:ローカルにサーバー環境をつくる

サーバー。。全く触れたことがないので、ひとまずサーバーというものをどうすれば触れるのか、調べました。

サーバとは、コンピュータネットワークにおいて、他のコンピュータに対し、自身の持っている機能やサービス、データなどを提供するコンピュータのこと。また、そのような機能を持ったソフトウェア。「SV」「srv」「svr」などの略号で示されることもある。ソース

 そして、サーバーに触るには、どこにサーバーを置くかということで、1)外部のレンタルサーバーを利用する か 2)自分のパソコン内(ローカル)にサーバー環境をつくる 方法があるよう。

1)外部のレンタルサーバー

友人に聞いたところ以下の2つを教えてもらいました。データ容量によって値段がかわり、さくらインターネットは月額129円から、アマゾンは10円から始められるようです。

2)ローカルサーバー

しかし、わからないままお金は払いたくないので、ひとまずローカルに環境を作ってみます。同僚に以下をオススメしてもらいました。

MAMP & MAMP PRO

というわけで、MAMP(Macintosh, Apache, MySQL, and PHP)をサイトからインストールしましょう。

f:id:yuyutata:20150613193320p:plain

サイトでMAMPについて調べていると、wordpressもインストールしましょう的な記事によく遭遇したのですが、どうやらこれは、コーディングの知識がなくてもデータベースを使ったウェブサイトが作れるプラットフォームなようなので、私は、使わずに地道に進めたいと思います。

設定方法参考ページ

Installing MAMP

MAMPのインストール for Mac-独学!未経験からWebデザイナーになる!!

 

雑感

ひとまずローカルにサーバー環境ができたので、MySQLとphpを学習する環境が整いまいした。この2つを学ぶことが、アプリと外部データベースを繋ぐ鍵になるはずなので、しくしくと進めていきたいと思います。。最初swift学習のはずが、さらに2つの言語が学習リストに追加されました。。頑張れ俺。きっと大丈夫。

英語学習:オススメDVD

英語学習をどうやれば良いかとよく相談を受けます。1日24時間と限られている中で、英語を浴びる環境のない場合、どうするか。そしていかにモチベーションを確保するか。

僕はアメリカのドラマを英語字幕で見ることをオススメします。

  1. 英語字幕にする
  2. リモコンの一時停止ボタンに親指を乗っけて見る
  3. わからない同じ単語が3回出てきたら、一時停止
  4. Evernoteにメモり、携帯で意味を調べる
  5. 再生

毎回、単語を調べていたらリラックスできないので、一話に3回出てきたら調べるようにします。そして、通勤時にEvernoteを開いて昨夜出てきた単語・フレーズを眺めるとなんとなく定着していきます。

以下はサラリーマン向け、オススメDVD Top3。

 

中級:Game of Thrones

今のところシーズン4まで出ているドラマです。ストーリーがしっかりしているのと、映像で見せるのでフォローしやすいです。また、アメリカ人のスピーチでもよくフレーズが引用されています。ぜひ、アメリカ人と仕事をする機会のある方は、これだけでかなり盛り上がります。 "winter is coming", "we need a dragon", "red wedding" etc..

www.youtube.com

中ー上級:House of Cards

オンデマンド映像配信会社であったNetflixが自ら本気で作ったドラマ。ケビンスペイジーの演技、David Fincherの演出。ホワイトハウスで繰り広げられるドロドロの人間ドラマ。ビジネスマンなら誰もが共感する社内政治。アメリカ人がどうやって組織、キャリアを考えているのか、勉強になりますw 政治、経済の英単語が多く出てきて、勉強になります。

現在はシーズン3。先月シーズン3が公開になったときは、オフィスはこの話題で持ちきりになりました。

www.youtube.com

上級:Suits

ハーバード卒しか採用しないアメリカのトップ法律事務所を舞台とした、リーガルドラマ。登場人物めちゃくちゃかっこいいし、社内政治、裏切り、半端ないし、ストーリー展開がすごく早い。

スラングばんばん出てきて、しゃべるスピードもめちゃくちゃ早いので、英語字幕で追っても70ー80%くらいしか理解できません。それでもとっても面白いです。ぜひチャレンジしてみてください。

個人的にタキシード・スーツの着こなしがすごく参考になります(社会人になってからスーツ2着しか作ってないのは秘密)。

www.youtube.com