また1からこつこつと

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

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での画面遷移処理でした!

ESDとか環境教育がおもしろい

環境教育論っていう授業のレポート書いてて、ESDとかSDGsについてdigりまくってたら結構いい感じに知見を得た。ココらへんの分野はすごく自分好みなのですっと入ってくるの嬉しい。


ESDは、Education for Sustainable Developmentの略で、持続可能な開発のための教育と訳される。つまり、持続可能な開発をしていくためには現世代だけではなく次世代にも必要だよねみたいな話。
ESD(Education for Sustainable Development):文部科学省

SDGsとは、Sustainable Development Goalsの略で、持続可能な開発目標と訳される。世界をより良い方向に修正するためにはこういうことが必要だよねっていう目標が示された。
www.unic.or.jp

https://www.jica.go.jp/aboutoda/sdgs/ku57pq00001qfok2-img/sdgs_02.gif

SDGsで示されたゴールは以下の通り。

  1. 貧困をなくそう
  2. 飢餓をゼロに
  3. すべての人に健康と福祉を
  4. 質の高い教育をみんなに
  5. ジェンダー平等を実現しよう
  6. 安全な水とトイレを世界中に
  7. エネルギーをみんなに、そしてクリーンに
  8. 働きがいも経済成長も
  9. 産業と技術革新の基盤を作ろう
  10. 人や国の不平等をなくそう
  11. 住み続けられるまちづくりを
  12. つくる責任、使う責任
  13. 気候変動に具体的な対策を
  14. 海の豊かさを守ろう
  15. 陸の豊かさも守ろう
  16. 平和と校正をすべての人に
  17. パートナーシップで目標を達成しよう

確かにこれらすべてのゴールを達成できたら、すごくいい地球になるし、めちゃくちゃいいことだと思う。まあ当然すぐに達成できるようなものなどないけど、これらの問題にしっかりと取り組みましょうという意思を国連が示したのはとてもいいこと。
SDGsがリリースされたのは2016年1月1日のこと。対してESDのほうは1997年には草案が話し合われていた。
でも、ESDで扱う内容はまさにSDGsでゴールに設定されたことばかり。
具体的な定義付がされてESDは取り組みやすくなったんじゃないかなと思う。

で、環境教育はなにかっていう話ですが、ざっくりいうとESDの一分野だと自分は思っている。今回レポート書いてて自分なりに定義付けをした。

環境教育とは私たちが住んでいる地球という星の現状を知り、私たち人間も含む生き物たちがこれからどのように生きていくかを考えるためにある。

言ってしまえばこれはESDの目標にもなると思うのだけど、それだけESDの各分野は境界線がないということだ。さらに言うとESDには境界線がないほうが本来の意味に近づくのでほんとはよかったりする。

ココらへんの分野はけっこう好きなので引き続きリサーチがんばりたい。

#SPAJAM 2017 東京C予選で優秀賞を頂いた。

#SPAJAM 2017 東京C予選にチームで出場しまして、結果的に優秀賞をいただきました!


メンバーのみなさんお疲れ様でしたm(__)m
今回もほぼほぼ徹夜での作業、大変だったけどかなりいいハッカソンだったなと思います。

東京C予選のテーマは「子ども」で、僕らが作ったのは「家庭内仮想通貨システム」である「Pocket money」というアプリです。
ちょまどさんがいい感じに呟いてくれてたので引用。



実際につかったスライドはここから見れます。

今回チームでこだわったところは、APIの設計でした。
はじめの2時間くらいはずっとAPI周りの設計をやってて、本番開発さながらの仕様書をまとめました。
まず機能ごとにどんなデータをサーバに格納して、どんな処理をさせてそれをiOS側に渡すのかといった話し合いをして、そこからさらにスマートに機能を集約していった結果、20個のAPI
ができました。
とはいえ、スプレッドシートに仕様をまとめるだけでは動かないわけで、そこからさらにMySQL+PHPでごりごりハードコーディングをする作業になります。自分がバックエンド担当してたんですが、初日はほとんどXcode開いてないです。
ただ、仕様がしっかりと決まっているのでバックエンド側を作っていくと同時にフロント側のモデルもどんどん作られていくという、非常に気持ちのよいフロントーバックの連携だったなと思います。

チームメンバー4人のうち、1人がiOSでのAPIリクエスト周りを担当、1人がバックエンドを担当、2人がフロントのデザイン周りを担当するといったフォーメーションでした。デザインは個々の感性を頼りにして気合でどうにかする、みたいな開発方法でした。

でもいままで出たハッカソンの中でも1番楽しかったし、なにより雰囲気がかなりよかったなと思っています。会場であるYahooLodgeが新しくて、物理的にも明るいというのもあるかもしれませんが、チーム毎の雰囲気だったり会場全体の雰囲気がすごくほんわかしていました。
いいハッカソンだったと思います!
女性の割合がめちゃ多かったのも要因の1つだと思います。


男子オンリーのチームは僕らだけだったらしい、ジェンダーバランス!

ちなみに、この案を出したのは弊チームのメンバーでした。

あと、個人的に他のチームでおもしろいなと思ったのは、WWDC2017で発表されたばかりのARKitをフル活用していたチームです。
プレゼンでも、公式ドキュメントしか情報がない中での開発だと仰っていましたが、日本時間火曜の深夜2時に出たフレームワークを土曜日には使いはじめるってめちゃくちゃかっこいいです。

iOS11 betaの新しいコントロールセンターが見えたときに会場がざわついたのは、さすがスマホアプリのハッカソンだなぁという感じでめちゃよかったです👍👍


優秀賞チームは全国の予選でかなり選ばれているので、これから本戦にいけるかどうかはわかりませんが、ぜひ温泉に行きたいのでいけるよう願っています。

ScratchDay 2017 in Kashiwa を開催しました。

5月14日(日)に柏市立柏中学校でScratchDay 2017 in Kashiwaを開催しました!
scratchday-kashiwa.org


f:id:mjk0513:20170518201909j:plain
ご参加くださった皆様、大変ありがとうございました。
来場者数は170名以上で、昨年を大きく上回りました。

mjk0513.hateblo.jp
↑去年の記事です。

現在アーカイブ用映像などは鋭意製作中ですので、もうしばらくお待ち下さい。


柏市教育委員会学校教育課副参事の佐和さんとのトークセッションは、ノープランだったのにも関わらずかなりいい感じなできになったと思います。
f:id:mjk0513:20170518202738j:plain
我々のような一民間団体と行政が本気になって取り組むプロジェクトがどこまで本気かというのをお見せするいい機会になったのではないでしょうか。
いろいろと次に繋がる展開が見えてくる、そんなセッションでした。

今回は柏市教育委員会が共催として入ってくれただけではなく、様々な方々にご協力いただいています。
例えば、Microsoft様にはSurfaceを貸し出していただきました。



最後に、この話はイベント中になんどもしていたのですが、プログラミング教育を一過性のブームとして終わらせないことが大切だということを、改めて書いておきます。
少し前まではまったく考えられなかった規模で、プログラミング教育が広がっています。
完全にブームです。
しかし、我々中にいるメンバーは、このブームが終わったあとのことをそろそろ真剣に考えたほうがいいと最近感じています。
大切なのは、ブームだともてはやされている時期にどれだけメジャーにするかです。言い換えるならば、どれだけ体力を付けるかだと思います。
これはビジネス面もそうですが、学問の面からも同じことが言えるはずです。きっちりと体系化していく作業をしなければならない。
そういったことを考えてみたいなぁとここ最近やんわりと思っています。
まずは圧倒的サーベイからですね、がんばります。

2017/05/22 追記
振り返りPVを公開しました。
youtu.be

【Swift3】 presentで画面遷移したときに遷移先のViewにNavigationBarを表示させておく

let nextViewController:NextViewController() = NextViewController()
let navigationController = UINavigationController(rootViewController: nextViewController)
self.present(navigationController, animated: true, completion: nil)

rootViewControllerに指定して、navigationControllerをpresentしてあげるだけ。