■まずはGoogleへ
今日はCaltrainに乗ってシリコンバレーへ向かいます。お目当てはGoogleとAppleの本社!
↓
Caltrainのサンフランシスコ駅へ到着。日本の駅と作りが全然違ったり、標準軌道(広軌?)だったり、全2階建ての客車をディーゼルの機関車が引っ張る構成だったり、そんな機関車がずらりと横一列に並んでいる姿が拝めたりと、鉄道マニアにはたまりませんよ。あ、私は鉄道マニアなんかじゃないんだからねっ?><
↓
一路San Antonio駅へ。ここからVTAのバス40番に乗り換えて一路Googleへ移動。
駅で降りてまず感じたのが、空が広い!明るい!緑が鮮やかで綺麗!暖かい!家並みが美しい!まるで絵に描いた楽園のような風景です。なるほど、これはすごい。みんなシリコンバレーで起業したがるわけです。
↓
Google到着。めっちゃめっちゃ広い!!><
雰囲気としては途中Palo Alto駅すぐそばにあるスタンフォード大学のキャンパスとそっくりで、全然「会社」って感じがしません。緑がたくさんあって、へんちくりんな形の建物がどーんと。大学のキャンパスかカフェか何かみたいです。
↓
さんざん周りをうろついて写真を撮りまくったあげく、何かの間違いで中に入れてもらえないかとVisitor用のロビーに向かったら、受付のおねーさんに「ここはClosed Campusです、知り合いが面会者がいない奴は立ち入り禁止です。でてけ」とやんわり怒られ、外に出たらセキュリティのお兄さんにまたやんわり怒られ、あえなく撤退。入れないのはわかっていたもののやはりショック。
↓
"There are no public visitor center or a shop"だそうです。嘘つき!俺は知ってるよ!某氏がGoogle社内見学したとき、お土産にバッグ買って帰ってきたのを!
↓
あ、そうか、だから"public"って断りを入れたのね。というわけで、技術にはオープンですが、本社警備には大変クローズドなGoogleでした><
目の前3メートルの位置にジョブズが!声をかけたけど無視されてすたすた行ってしまわれた。
↓
いや待て、本物がこんなド真ん前を堂々と歩くわけがない、偽物か影武者だと思って売店のおねーさんに聞いてみたら、"then it might have been"(ならたぶん本物だったのよ)とのお返事が。あと"He usually doesn't answer because he's so busy"らしいので、どうやら本物っぽいです。ああ、来て良かった!
↓
最後に記念撮影してたら建物の中が写るからそこで撮るなとセキュリティのイケメン兄ちゃんにやんわり怒られました。またか!><
今年、私が話題に取り上げますのは、とあるゲームです。Amazon Game Studiosという会社が開発・リリースしました、New WorldというMMORPGについてご紹介させていただきたいのです。ゲームの話題には一切興味がない読者諸君も、どうか少し我慢して、私に騙されたと思って最後まで話を聞いていただけませんでしょうか。そもそも、あのAmazonが開発したMMORPGというのですから、どれほどゲームに興味がなくても、技術に興味のある方でしたら、少しは興味深く感じられるのではないでしょうか?
それによると、本作は「To be very clear, New World is not client authoritative — from a simulation standpoint, New World is entirely server based」などと主張されていましたが、誰もこのような世迷い言を信じる者はいませんでした。クライアントサイドでの入力によってサーバーサイドの挙動が不正に変化してしまうのであれば、それは入力に対するValidationが何ら行われていないということであり、Server-Based Authoritativeなアプリケーションとは言えません。この声明発表は単に開発者たちが自らの無能を晒しただけに終わりました。
2週間ほど前ぐらいに発見された最新のBotです。これは噂レベルでしか聞いたことがないので真偽不明ですが、とうとうこの最新のBotはPvP (Player vs Player:対人戦) クエストを自動でこなせるようになったとのこと。といってもBotが我々人間相手に斬りかかってくるわけではなく、対人戦モードを有効にした状態で敵の基地に忍び込んでアイテムを手に入れて帰ってくる、みたいなお使いクエストでしかありません。ただのゾンビですから発見さえすれば簡単に始末できるのですが、問題はこれらが自動化されていて24時間365日常に動き続けているという点にあります。我々人間には休息が必要ですが、彼らは一瞬一秒たりとも休むこと無く、何度殺されても諦めること無く、ひたすら目標めがけて突進してくるのです。これにはどれほど優れた人間も太刀打ちすることが出来ません。これはゲームの中のお遊びですから笑い話ですが、現実世界の戦争がこのように無人の自動兵器がひたすら突撃を繰り返してくる世界になってしまったらと思うと、薄ら寒い思いがしますね。
内部的には NSInvocation を使っています。 Mac OS X 10.5 (iOS 2.0) から存在するこのクラス、本当に便利で、ぶっちゃけ呼び出し対象のシグネチャさえわかれば何でも呼び出せるスグレモノです。フレームワークを作るときなど、呼び出し先のシグネチャしかわからない状況下で対象のメソッドを呼び出す時などに便利な感じかもです。その上 NSInvocationOperation を使ってそのまま並列化もできたりして。
private func commonInitialize() {
self.translatesAutoresizingMaskIntoConstraints = true
self.backgroundColor = UIColor.white()
self.imageView = UIView()
self.imageView.translatesAutoresizingMaskIntoConstraints = false
self.imageView.backgroundColor = UIColor.green()
self.addSubview(self.imageView)
self.titleLabel = UILabel()
self.titleLabel.translatesAutoresizingMaskIntoConstraints = false
self.titleLabel.text = "factorio alpha 0.13 has been released!"
self.titleLabel.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleTitle1)
self.titleLabel.numberOfLines = 2
self.addSubview(self.titleLabel)
self.articleLabel = UILabel()
self.articleLabel.translatesAutoresizingMaskIntoConstraints = false
self.articleLabel.text = "In 0.13 we have the new multiplayer matching server and server browser. This will let you find games of people online join your friends and other stuff. Server games are published to the server and clients can browse existing games. The first thing you will notice is the new multiplayer menu. When you click on 'Browse Public games' you will be asked to log in to your factorio account."
self.articleLabel.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleBody)
self.articleLabel.numberOfLines = 0
self.addSubview(self.articleLabel)
let views: [String: AnyObject] = ["imageView": self.imageView,
"titleLabel": self.titleLabel,
"articleLabel": self.articleLabel]
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[imageView]|", options: [], metrics: nil, views: views))
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[titleLabel]-10-|", options: [], metrics: nil, views: views))
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[articleLabel]-10-|", options: [], metrics: nil, views: views))
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[imageView]-10-[titleLabel]-10-[articleLabel]|", options: [], metrics: nil, views: views))
self.imageView.addConstraint(NSLayoutConstraint.init(item: self.imageView, attribute: .height, relatedBy: .equal, toItem: self.imageView, attribute: .width, multiplier: 0.66, constant: 0))
}
しかしながらこのコードはAuto Layout Warningが発生してしまいます。
2016-06-30 23:24:12.050906 AutoLayout[1725:80607] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"NSAutoresizingMaskLayoutConstraint:0x7fd60ae1db90 h=--& v=--& AutoLayout.Example2View:0x7fd60ad35b70.width == (active)",
"NSLayoutConstraint:0x7fd60ac360a0 H:|-(10)-[UILabel:0x7fd60ad3c6b0'factorio alpha 0.13 has b...'] (active, names: '|':AutoLayout.Example2View:0x7fd60ad35b70 )",
"NSLayoutConstraint:0x7fd60ac36380 H:[UILabel:0x7fd60ad3c6b0'factorio alpha 0.13 has b...']-(10)-| (active, names: '|':AutoLayout.Example2View:0x7fd60ad35b70 )"
)
フランクリンプランナー
↓
Remember the Milk + フランクリンプランナー
↓
Remember the Milk Pro + Appigo Todo + フランクリンプランナー
↓
Remember the Milk Pro + Remember the Milk for iPhone + フランクリンプランナー
↓
ThinkingRock + Remember the Milk for iPhone + フランクリンプランナー
↓
OmniFocus + OmniFocus for iPhone + フランクリンプランナー
その後長いことRemember the Milkを使っていたのですが、使い込んでいるうちにRemember the Milkは備忘録としては超一級でもGTDツールとしては3流という結論に至ってしまったため、別のツールを探す必要性が出てきました。
(コンテキストの概念がないのはまだ運用で何とかなったのですが、プロジェクトの階層化ができないのと、プロジェクトとアクションをシームレスに追加変更できないのが致命的でした)
えーマジ?階層化できないの?キモーイ!orz
そこで最初に目を付けたのが前回ご紹介したThinkingRockです。
■ThinkingRock + Remember the Milk
この組み合わせの長所と短所を簡単にご紹介すると以下のようになります。
ほとんど無料。必要な出費は、せいぜいRemember the MilkをProにして(年間たったの25ドル)iPhoneからでも利用できるようにする程度
×短所
ThinkingRockとRemember the Milkの間の連携が全くない。Remember the Milkで収集したタスクをThinkingRockに移動したり、逆にThinkingRockから明日やりたいタスクを持ち出すためにRemember the Milkに書き出すなどといった無駄な作業を行う必要があります
ThinkingRockは厳密にGTDのプロセスを体現しているがゆえに厳密すぎ、逆にRemember the Milkは備忘録程度の機能しかなくプロジェクトを扱うには不向き