また1からこつこつと

最高はひとつじゃないと信じてまたがんばります。

サンフランシスコ滞在記Day2:ユニオンスクエア, Udemy, SFMOMA, SIMカード購入

2日目です。

ユニオンスクエア

10:30くらいにバスを使ってユニオンスクエアへ移動。バスは日本でいうSuicaのようなカードをタッチすると乗れる方式なんだけど、乗り降り口がすべて一緒で2箇所開くから払わずに乗る人も結構いてびっくり。
途中の道もかなり舗装状態が悪く、めちゃ上下に揺れる。
ユニオンスクエアはサンフランシスコの中心的なエリアで、かなり多くのオフィスや店舗が立ち並んでいる。と同時に結構ホームレスの人とかもいるので治安的には△といったところ。
まずは第一目的であるApple Storeを見に行ってきた。


ここのストアはかなり新しくて、これからのストアのスタンダードになるだろうと言われている。いままで以上にオープンになって、コミュニティを作ろぞっていう気概が見える。
www.apple.com
f:id:mjk0513:20170901134359j:plain
カフェテリアみたいなのも併設されてて、そこでこの後どうしようかいろいろ調べていたときにメッセージが。なんともともとぜひお会いしたいと連絡していた方が、Udemyの方に繋いでくださった。ちょうどランチの時間だったので、Udemyに来れば一緒に食べようとお誘いいただきすぐに向かう。

ユニオンスクエアからUdemyまでは歩いて15分ちょいだけど、途中に知っている会社のオフィスがたくさんあった。
LinkedIn
f:id:mjk0513:20170901134628j:plain
WeWork
f:id:mjk0513:20170901134642j:plain
さすがサンフランシスコって感じがすごくする。

Udemy



f:id:mjk0513:20170901135035j:plain
社食はケータリング形式で、フードもドリンクもスナックもすべてフリー。アメリカのイケてるスタートアップ感がすごい。オフィスの中も多くの人が自分の仕事してて、アツさを感じた
PCやタブレットスマホなど一切のテクノロジーデバイスを排除したミーティングスペースがあって、Zenルームと名付けられてる。
f:id:mjk0513:20170901135148j:plain
いいオフィスでした!案内頂いた方とも今後なにかできそう。

ちなみに近くにGitHubもあった。

SFMOMA

Sun Francisco Museum of Modern Art の略で、サンフランシスコ近代美術館です。
美術館行くのがすごく好きなので、今回の旅行では絶対に以降と決めてた場所。


中の展示品もいろんな時代・場所の作品で見応えがあった。

近くにはYerba Buena Gardensという公園もあって、すごい気持ちがいいエリア。


SIMカード購入

サンフランシスコ市内には #SFWiFi というタウンWi-Fiが飛んでいて、けっこういろんなところで接続できるんだけど、やはりSIM指して4G使えたほうが便利。Googleマップとか見ながら歩けるのは本当にデカい。
あと、海外のSIMさしてみたかったというのもあり、AT&Tで購入することに。
事前情報によると、auだとKDDIの関係でAT&T系列のSIMであればSIMロック端末でも通じるとのこと。
SIMロックau版iPhoneでも現地SIMが使える!アメリカ旅行の通信費節約する方法! | FatherLog
2017年4月の記事だったので、いまでもいけるかなと思いさっそくショップへ。
Appleのジーニアスバー形式と同じで店員さんが1人1人ついてくれるので、20分くらい待つ。すごくフランクで丁寧な人にあたり、終始和やかに会話しながらSIMのアクティベーションまで完了。
結果、余裕でつながる!


そこまで英語に自信ないけど、結構会話できたのでそこが地味に嬉しかった。
プランは1ヶ月有効の6GBまで使えるものに。価格は$50いかないくらいだったのでめちゃ十分。

そんなこんなで2日目終了。まだ身体が若干時差に慣れてないみたいで、終始眠い状態。
明日はいよいよシリコンバレーへ。Apple Infinity Loopを訪問します。

Apple Store 探訪記 (随時更新)

おかげさまで、仕事で国内様々な場所に行かせていただくようになって早3年ほど。
個人的な趣味として、もし行った先にAppleStoreがあればとりあえず行く、みたいなことやってる。

このエントリーには、行った時の写真と日付・コメントをまとめていくことにする。

Sapporo(北海道・札幌)

f:id:mjk0513:20170826233117j:plain
探訪日:2014年3月

今は亡きApple Sapporo。高1の冬、学校のスキー学校で北海道に行ったときの自由行動時間に友人と行ってきた。こじんまりとした場所だなーくらいにしか思ってなかったけど、全てはここからはじまった。

Sendai宮城県・仙台)

f:id:mjk0513:20170826233331j:plain
探訪日:2017年8月

大きな商店街通りの一角に佇むStoreで、ちゃんと見てないとスルーしてしまうくらいの規模感だった。
MacBook Pro を買ったばかりだったので、HDMI-USB-Cの変換と、USB-C - Lightning ケーブルを買った。

GInza(東京都・銀座)

f:id:mjk0513:20170826233656j:plain
訪問日:不明(よく行く)

一番好きな店舗。大きいし、シアターでゆっくり新しいデバイスのセットアップするのいい。
f:id:mjk0513:20170826233755j:plain
ちなみにアースデーのときのりんごマークはこんな感じ。

Shibuya(東京都・渋谷)

f:id:mjk0513:20170826234101j:plain
訪問日:たぶん2014年6月

営業終了後の写真。ここもこじんまりとしてる。

Omotesandou(東京都・表参道)

f:id:mjk0513:20170826234816j:plain
訪問日:2014年6月

オープン初日にたまたま行くことができた。ガラス張りの大規模なStoreは新しいStoreって感じですごく好き。(RED)のシールをもらったのもここ。

Nagoya(愛知県・名古屋)

f:id:mjk0513:20170901003447j:plain
訪問日:2017年8月

心斎橋とおなじくらいの規模感。

Shinsai-Bashi

f:id:mjk0513:20170826235249j:plain
訪問日:2016年8月

2016年のDojoConのときに合間見つけて行ってきた。夏で暑すぎてしばらくシアターで休んで思い出。

Shinjuku

f:id:mjk0513:20180907225844j:plain
訪問日:2018年4月7日(OP)

はじめてオープン初日に並んでノベルティをゲットしてきた。
f:id:mjk0513:20180907225924j:plain
一緒に並んだのはApple信者友達。

Kyoto

f:id:mjk0513:20180907230115j:plain
訪問日:2018年9月7日

開店当日は行けなかったけど、夏休みを利用して訪れてみた。
佇まいがよい。
f:id:mjk0513:20180907230154j:plain
この大理石は Steve Jobs Theater のものと同じらしい。

Fukuoka Tenjin(福岡県・天神)

訪問日:--

番外編 Isetan Shinjuku

f:id:mjk0513:20170826235730j:plain
訪問日:2015年4月

当時まだApple Watchが出る前で、着けただけでテンション上がってた思い出。

海外編 南京东路(中国・上海)

f:id:mjk0513:20170901003758j:plain
訪問日:2017年2月
南京东路 - Apple Store 零售店 - Apple (中国)
上海の勢いがわかる、すごく大きなStoreだった。

本社編 Infinite Loop (アメリカ・クパティーノ)

訪問日:2017年9月
f:id:mjk0513:20170903005833j:plain
ついに本社ストアを訪問!ここでしか買えない限定グッズを買い込んだ。

いぬボードを触ってみた

先日Switchサイエンスから発売されたいぬボード。
www.switch-science.com

「学校のコンピュータ教室で使える」をコンセプトにして作られたこのボードは、コンピュータとのやりとりをヘッドホン端子とマイク端子を使って行うというもので、実際にかなり使えることになると思う。
僕の所属している研究会で大量に購入して、実際の授業でどう使えるか研究する必要があったので触ってみた。

まずはLチカ

vimeo.com

ハードウェアのHello,worldことLチカを早速やってみた。
Scratch側では「音」を出す命令として書かれる。

明るさを取得する

いぬボード本体に明るさセンサーがついていて、簡単に明るさを取得することができる。
数値としては0-10でくるらしく、そのまま取得しただけだとおもしろくないので、×10とかして数値を加工してあげると使いやすいかな。

追記)こちら、間違いでした。通常の音量とおなじくマイクの音量設定で変化していきます。(@abee2 先生ありがとうございます)




サンプル

Scratchのサンプルプログラムはここに置いてあります。
scratch.mit.edu

ほんと、PCといぬボードを音声ケーブルでつないで、USBから給電して、ブレッドボードにLEDセットしてジャンプワイヤーで繋げばLED光るのはすごい!
いろいろ使いみちがありそうです。

MacBook Proを1週間使った感想


MacBook Pro Early2017 モデルを買いました。2代目の相棒です。
1週間使ってわかったことがあるのでメモしておきます。

スペック

今回買ったMacBook Proのスペックです。

  • 名称:13インチ MacBook Pro TouchBarなし
  • プロセッサ:2.3 GHz Intel Core i5
  • メモリ:16GB 2133 MHz LPDDR3
  • ストレージ容量:512GB

ちなみに、前に使っていたMacBook Air のスペックはこんな感じ。

  • 名称:MacBook Air 13インチ Late2013モデル
  • プロセッサ:1.4GHz Intel Core i5
  • メモリ:8GB 1600MHz DDR3
  • ストレージ容量:128GB

MacBook Air, よくがんばってくれた...

MacBook Airを使ってたときの課題感

MBAを使ってたときに感じていた課題感は以下の通りです。

  • ストレージ容量不足:128GBだと厳しすぎます。Xcode肥大化しすぎ... 写真も音楽も同期できなかった。
  • メモリ不足:年数が経つにつれてXcodeのビルドが遅くなっていきました。何度かリセットしたんだけど、やっぱりスペック不足が原因だった。
  • グラフィックス:iPhone見ちゃうとMBAのディスプレイが荒く見えてしまう。そこまでではないけどやはり気になる。
  • バッテリーの劣化:これは交換すればよかったんですが購入して2年半くらい経ったころから、バッテリーの劣化が気になるようになりました。

MacBook Proを使って解決した点・よいところ

  • ストレージ512GBは神:多ければ多いほうがいいのは、ストレージとメモリですね。ガンガン同期できて素晴らしすぎます。iCloud driveも200GB分契約しているので、快適なストレージライフを送っています。
  • ビルドの速さ:ハッカソンでのビルドの早さにはびっくりしました。実機ビルドもサクッとこなしてくれる。素晴らしいです。
  • Retinaディスプレイの美しさ:YouTubeで高解像度の動画見まくってます。美しすぎる...
  • バッテリーは持つ:これは買ったばかりなので当たり前ですが、バッテリーもよく持ちます。よさです。
  • 内蔵スピーカーのよさ:キーボードの左右にあるスピーカーがいい仕事してくれます。結構大きな音もでる。

MacBook Proの課題感

  • USB Type-Cの罠:やはりType-Cオンリーだとめんどくさいなと思うときが多いです。拡張ポートとしてはこれを買いました。

www.amazon.co.jp
あと直面したのは外部ディスプレイにつなぐコネクタ問題ですね。HDMI-TypeCの変換は購入したのですが、VGAとの変換は間に合わず。仕事柄プレゼンする機会が多いのでこれは買わないと駄目かなって感じです。
あと、13インチTouchBarなしモデルだと、Type-Cのポートが左側2つしかないのも残念すぎます。差別化ってこういうことなのか...

  • キーボードの音:キーボード自体はすごく打ちやすいです。この打撃感すごい好きなのでいいのですが、叩くたびにペチペチ音がするのはちょっとうるさいかも。電車とかバスの中でこれやってるとウザがられそう。
  • 電源アダプタの爪がない問題:MBAのときは電源アダプタに爪がついてて、そこにコード巻き取っていたのですごく収納が気持ちよかったのですが、MBPの電源アダプタにはついていません。確かに断線しやすいとかっていう問題はあったけど、それ以上に収納性が悪くなったのは残念です。
  • Type-CとLightningのサードパーティの質:以下の製品を買ったのですが、認識すらしない粗悪品でした。

www.amazon.co.jp
早く新しいもの調達しないと。

結局どうなの

すごくいい買い物だったかなと思います。これもあと3年くらいはお世話になるはずなので、大切に使っていこうと思います。

石巻ハッカソン2017に出た

昨年に引き続き、今年も石巻ハッカソンに来ました。
石巻ハッカソン2017

まずいきなり同行者が遅刻して新幹線に乗り遅れるというハプニングがありつつも、どうにか無事に到着しました。

実は今回のために新しくMacBook Proを買っていまして、カスタマイズしてたから届くのが1週間後になっちゃったので、千葉ではなく石巻に送りつけるという暴挙にでました。



これについてはまた後日書きます。

で、早速開発へ。
今回のテーマは「ひみつ道具」。某猫型ロボットをどうしても想像しがちなテーマですが、結構自由度が広くて逆に困った。
何も出てこなくてお散歩してたら、いきなりメンバーが鬼ごっこ始めたので、そこからヒントを得て一気に仕様作成。
こんなものを作りました。

今回初めてがっつりとAppleWatch対応のアプリを作ったんですが、結構めんどくさいなという印象です。
あとSeries1は限界。本格的に開発するならそろそろ買い替えかなぁという感じです。

深夜遅くまでの開発は肉体的・精神的にもダメージの大きいものですね...


結果として入賞は逃してしまいましたが、「ひみつ道具賞」の最終選考までは残っていたということで、また来年リベンジを果たしに来ようと思います。


さて、これで今年3回目のハッカソンです。
ハッカソンに出るたびに、なんでこんな苦行をしてるんだと言われがちですが、完全にスポーツ感覚でやってるところが大きいのかなと思います。あと、なによりチーム開発はマジで楽しい。自分は現在現場の第一線でコードかいているバリバリのエンジニアではありませんが、自分の技術力上がってるのわかるし話合う人たちが周りにたくさんいる。こんな素晴らしい環境はハッカソン以外なかなかないと思います。
あとはハッカソンのゲーム性です。与えられた時間内に1から仕様策定・デザイン・実装という個々にやれば何人月も掛かりそうな作業を、たったの1日や2日で作ってしまう。時間直前のヒリヒリ感がたまらなく大好きです。
今の自分にとってハッカソンに出ることは完全に趣味の1つになりました。いい趣味が持てたと思います。
またどこかのハッカソンに出るかもしれませんが、その時までに頑張って技術力を少しでも上げておきます💪

【Swift3】UITableViewCellをタップしたときに画面遷移をさせる

このブログで1番読まれてる記事がこれ
mjk0513.hateblo.jp

これはSwift1.x系での記法のままなので新しくSwift3.x系で書き直します。

ViewController.swift

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
	
	let myTableView:UITableView = UITableView()

	let items:[String] = ["北海道", "青森", "秋田", "岩手", "福島", "宮城", "山形"]
	
	override func viewDidLoad() {
		super.viewDidLoad()
		
		myTableView.frame = self.view.bounds
		myTableView.dataSource = self
		myTableView.delegate = self
		myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
		self.view.addSubview(myTableView)
	}

	override func didReceiveMemoryWarning() {
		super.didReceiveMemoryWarning()
		// Dispose of any resources that can be recreated.
	}

	func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
		return items.count
	}
	
	func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
		let cell:UITableViewCell = UITableViewCell(style: .default, reuseIdentifier: "MyCell")
		cell.textLabel?.text = items[indexPath.row]
		return cell
	}
	
	func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
		//セルの選択解除
		tableView.deselectRow(at: indexPath, animated: true)
		
		//ここに遷移処理を書く
		self.present(SecondViewController(), animated: true, completion: nil)
	}

}

次に遷移先のViewです
SecondViewController.swfit

import UIKit

class SecondViewController: UIViewController {
	
	override func viewDidLoad() {
		super.viewDidLoad()
		
		self.view.backgroundColor = UIColor.white
		
		let backButton:UIButton = UIButton()
		backButton.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
		backButton.setTitle("back", for: .normal)
		backButton.setTitleColor(UIColor.blue, for: .normal)
		backButton.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/2)
		backButton.addTarget(self, action: #selector(back), for: .touchUpInside)
		self.view.addSubview(backButton)
		
	}
	
	func back() {
		self.dismiss(animated: true, completion: nil)
	}
	
}

ポイントはdidSelectRowAtというメソッドを呼び出して、その中に遷移する処理を書くことです。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
	//セルの選択解除
	tableView.deselectRow(at: indexPath, animated: true)
		
	//ここに遷移処理を書く
	self.present(SecondViewController(), animated: true, completion: nil)
}

ちなみに、tableView.deselectRow()をやらないとAppleの審査通らないので注意です。
これがSwift3での画面遷移処理でした!