Monday, December 12, 2011

SQLiteを用いて、iOSで高速全文検索をしよう


まえがき

ある日突然Twitterで@TeamMOSA2さんが@glassonion1さんのつぶやきをリツイットしてくれました。なんか面白そうなイベントだなと思って、 すぐにATNDに参加しました。時期が早かった!6人目になって、自動的に12月6日の担当になってしまいました。しかし、製作中のtuneTVの新しいバージョンがサブミット予定日辺りなので、無理やりに@glassonion1にお願いして、12月12日にリスケして頂きました。本当にありがとうございます。
前回は@happy_ryoさんの記事:XCodeからappCodeへ乗り換える8つの理由でした。面白い記事ので、ぜひご覧ください。
さて、今回僕の記事はSQLiteを使って、全文検索をする方法を紹介しようと思っています。皆さんに少し役に立てばと思います。

えぇ?SQLiteを使って全文検索ができるの?

SQLiteがFTSをサポートしていることを知らない開発者がいると思います。そして、iOSのアプリに全文検索をサポートしようと思っている開発者もいると思いますね。でも、SQLiteって本当に全文検索が出来ますか?
はい、答えはもちろんYESです。
そうじゃないと、この記事が成り立たないですね!
では、簡単にSQLiteのリリースログを見てみましょう。 1. SQLiteは2006年の10月9日にリリースしたVer 3.3.8に初めてFTS1 Betaを実験的にリリースした 2. 2007年1月4日、Ver 3.3.9にFTS2を追加した 3. 2007年11月27日、Ver 3.5.3にFTS3を追加した。その後FTS3が安定して、バグフィックスを中心として、更新されていた 4. 2010年12月8日、Ver 3.7.4にFTS4を追加した 5. 2011年4月12日、Ver 3.7.6にFTS4に圧縮したデータをサポートした

iOS既存のSQLiteライブラリは大丈夫?

ダメですね。iOS 5.0.1まで、既存のsqliteのライブラリはFTSをサポートしていません。しばらく先のバージョンに追加される見込みはないと思います。
では、なぜ、SQLiteがFTSをサポートしていることはあんまり聞いていなかったのでしょうか?それはAppleがiOSのでディフォルトのsqliteライブラリをコンパイルするとき、FTS機能をわざと消した訳です。
じゃ、どうすれば良いのでしょうか?
答えは一つしかないです。自分でSQLiteをコンパイルすることです。

どうすれば良い?

SQLiteは完全にCに書かれていたので、Xcode中でも簡単にコンパイルできます。コンパイルするとき、少しの設定が必要ですので、僕はその作業をまとめました。
それはsqliteFTSです。
XcodeのStatic Libraryの形に整えました。簡単に別のプロジェクトにドロップインしたら、使えます。

一番重要!本当に速いの?

開発者に関心してるのは「本当に速いの?」という事ですね。
もちろん僕もそれに一番関心しています。では、早速テスト用のアプリを作りました。
それはsqliteFTSTestです。
ちなみに、そのテストアプリはARCを使っていたので、iOS5の環境で実行してみてください。
僕のiPhone 4Sに実行してみましょう。テストを行うために、Jim Breenさんが作ったフリーの和英辞書EDictのデータを使っています。
合計19万件レコードの和英辞書ですが、簡単に(word, body)の組合でFTSのDBに読み込みました。wordは日本語単語です、bodyは英語の解釈です。
では、早速検索してみましょう。
bodyに"bed"を検索
↑bodyに”bed”を検索
bodyに"be*"を検索
↑bodyに”be*”を検索
bodyに"*be"を検索
↑bodyに”*be”を検索
wordに"アート"を検索
↑wordに”アート”を検索
wordに"あ*"を検索
↑wordに”あ*”を検索
wordに"*あ"を検索
↑wordに”*あ”を検索
wordに"電*"を検索
↑wordに”電*”を検索
wordに"*電"を検索
↑wordに”*電”を検索
注意: ここの実行時間は'SELECT COUNT(\*) from edict WHERE word MATCH ?;'の結果です。普段のDatabaseでは、その検索さえ速く行けません。
その結果、どうですか?デバイスでほとんど0.001秒前後と言うのは1000FPSでUIが更新されてもスムーズに動けます。(もちろん複雑な検索は遅くなる可能性があります)
iOSは普段30~60FPSの更新なので、0.02s~0.05sぐらいに検索出来れば十分ではないでしょうか? FTSの検索は普通のSQL文と組み合わせて、LIMITORDER BYなどと一緒に使えばもっと効率良いと思います。
FTSの具体的なドキュメントはSQLiteの公式サイトを見ればわかると思います。

さあ、使ってみよう!

さて、僕のサンプルをダンロードして、実機に転送して、やってみませんか?
SQLiteはPublic Domainに貢献しましたので、僕のサンプルコードも無料でApache License 2.0の形で公開します。
何かの質問・Feedbackがあれば、僕のTwitter、@TonnyXuまでご連絡ください。

次回の担当者は@haoyayoiさんです。ぜひご注目ください。

Wednesday, November 2, 2011

Illustrator CS5で遊ぶ: 3Dのダンボール

概要

今日はAndrei MariusさんがVectorTuts.comで発表したチュートリアルを元にして、3Dのボックスを作りました。

Illustrator CS5で3Dボックスを作る

 新しいIllustrator のToolsを習得したので、満足します。

ダウンロード
いつも通り、僕が作ったai ファイルのダウンロードを提供します。ぜひ御覧ください。


Sunday, October 30, 2011

Illustrator CS5で遊ぶ:手作りNotebook

今回はvector.tutsplus.comでRypeさんが作ったNotebookのチュートリアルを元に勉強したものです。
Tonny's Notebook


同じく、私が作ったAIファイルをダウンロードすることが可能です。ぜひ御覧ください。

Saturday, October 29, 2011

Illustrator CS5で遊ぶ:手作りBand aid

今日はANDREI MARIUSさんが今年の3月に作ったチュートリアルに従って、作った「バンドエイド」です。Illustratorは本当にすごいですね!

バンドエイド

簡単なパスツールを使って、少し変化を加えて、グラデーションをかけて、アライメントツールを使って、場所を備えたら終わりという感じですよ。素晴らしい〜〜.

僕が作ったAIファイルをダウンロードすることも可能ですので、ぜひ御覧ください。

Tuesday, October 25, 2011

Illustrator CS5で遊ぶ: 3Dテキストエフェクト

Illustrator CS5の3D機能が超素晴らしい!! 一言で説明すると、Outlineを作ったら、そのアウトラインを3Dにするのは超簡単だ!次のような感じで、パチパチとクリックするだけで、3D効果ができる。

Illustrator CS5 の3D Effect
遊んだ時、これを作った。


面白いね!

これは Design Panoplyのチュートリアルを元に作りました。

僕が作ったAIファイルをダウンロード可能ですので、ぜひ御覧ください。






Monday, October 24, 2011

Illustrator CS5で遊ぶ: テキストエフェクトとテキスチャー

Adobe のIllustratorは本当に素晴らしい!
Photoshopができないベクター画像の作成はもちろん、Photoshopが得意なテキストとテキスチャーなども全然問題ない。これは家で遊んだ時練習として作ったものだ。

全てのことはvectips.comのRype (Ryan Putnam)さんから教えてもらった。
Rester Effects with Illustrator CS5
Background texture with Illustrator CS5
僕が作ったこの2つの効果のAIファイルをダウンロードすることは可能ですので、ぜひ御覧ください。









Thursday, October 6, 2011

Steve Jobs passed away today

There is no words in the world can express my sadness.
I love you, Steve Jobs, I will follow you.



 Tim Cook:

Team,

I have some very sad news to share with all of you. Steve passed away earlier today.

Apple has lost a visionary and creative genius, and the world has lost an amazing human being. Those of us who have been fortunate enough to know and work with Steve have lost a dear friend and an inspiring mentor. Steve leaves behind a company that only he could have built, and his spirit will forever be the foundation of Apple.

We are planning a celebration of Steve's extraordinary life for Apple employees that will take place soon. If you would like to share your thoughts, memories and condolences in the interim, you can simply email rememberingsteve@apple.com.

No words can adequately express our sadness at Steve's death or our gratitude for the opportunity to work with him. We will honor his memory by dedicating ourselves to continuing the work he loved so much.

Tim

Apple Board of Directors:
We are deeply saddened to announce that Steve Jobs passed away today.
Steve's brilliance, passion and energy were the source of countless innovations that enrich and improve all of our lives. The world is immeasurably better because of Steve.
His greatest love was for his wife, Laurene, and his family. Our hearts go out to them and to all who were touched by his extraordinary gifts.

Steve Jobs' family today made the following statement regarding his death:

Steve died peacefully today surrounded by his family.

In his public life, Steve was known as a visionary; in his private life, he cherished his family. We are thankful to the many people who have shared their wishes and prayers during the last year of Steve's illness; a website will be provided for those who wish to offer tributes and memories.

We are grateful for the support and kindness of those who share our feelings for Steve. We know many of you will mourn with us, and we ask that you respect our privacy during our time of grief.

Bill Gates:
I'm truly saddened to learn of Steve Jobs' death. Melinda and I extend our sincere condolences to his family and friends, and to everyone Steve has touched through his work.

Steve and I first met nearly 30 years ago, and have been colleagues, competitors and friends over the course of more than half our lives.

The world rarely sees someone who has had the profound impact Steve has had, the effects of which will be felt for many generations to come.

For those of us lucky enough to get to work with him, it's been an insanely great honor. I will miss Steve immensely.

Saturday, October 1, 2011

エンジニアが読むべき欧文書体の本

今日小林章さんの本「欧文書体」を読みました。感じたのは「あ、字体と書体(フォント)が面白い!深い!」ということです。

欧文書体のカーバー
そもそも欧文書体が長い歴史を持っています。PCが普及し始めたら、印刷業界に置いてフォントの要求が非常に強くなっています。デジタル技術の発展が多種多様なフォントをサポートできていた結果、僕らの世界が美しい文字に包まれています。

では、なぜエンジニアもこの本を読むべきですか?

なぜエンジニアが読むべき?
30年前のエンジニアがデジタルフォントの発展を支えました。彼らが努力した結果、僕らがスマートフォンであり、ウェブであり、豊かな綺麗なフォントを見えます。ではフォントについてはデザイナーが分かってくれれば十分じゃないでしょうか?

普通にそうだと思う人が多いと思います。しかし、最近の2、3年間、iOSが代表としたスマートフォン業界が著しく発展したことに伴い、ネーティブアプリに豊かなフォントをサポートして欲しいニーズが高まっています。Webの方もWeb Fontなどの標準ができていて、Webエンジニアに対して、フォントに伴う微調整がたくさん発生する可能性も高まっています。

スマートフォン開発におけるフォントのチャレンジ
ネーティブでフォントの最小単位(Glyph)を操って、レイアウトエンジンのAPIを正しく使って、表示するのが最小限の要求です。その時、フォントのディセンダーとアセンダーなどの理解が必要です。

それ以上、個人の開発者であれば、自分のアプリの売上を向上するために、美しいアプリを作り出すのが一番重要なことです。その中に一番簡単に美しく見えるのはフォントです。なぜなら、フォントの一個一個が芸術です。様々なフォントを理解して、適切な場合に適切なフォントを運用できれば、アプリのセールスにも役に立つでしょう。

ウェブ開発におけるフォントのチャレンジ
Webのほうが一番フォントに関わっていないと思う人が多いでしょう。実は、Web Fontの基準がCSS3の一部としてほぼできています。HTML5+CSS3をサポートしているWebブラウザであれば、全部正しく見えます。その中に一番のチャレンジはどうやって自分のサイトでも様々なWebFontを運用できることでしょうか?特にBlog、新聞などのメディアサイトを運営しています会社のWebエンジニアたちはこれからCSS3を学ぶとき不可欠な一環だと思います。

更に、Webの業界ではスタートアップを作りたい人が多いでしょう。自分のサイトにどんなフォントとどんな色を使えば一番かっこよく見えるのか、非常に重要な能力となると思います。

今から学ぼう
こんな重要なフォント(書体)の様々な基礎知識、フォントの運用ルール、フォントの選定基準、フォントのキャラなど、小林さんの本の中に全部のせています。非常にわかりやすく書きましたので、読めば、すぐに把握できます。

だからこそ、この本をおすすめします。



Sunday, September 25, 2011

WWDC-Style Keynote Themes


Apple used some original keynote theme in WWDC, and a lot of us like it. But it's not available for us to download from anywhere. And also it not part of the default themes shipped by Apple. So I decided to create my own. And now it's done. I'd like to share with everyone.

It has been tested with Keynote '09

Download 

To download the theme, click the button below.
Instructions

To use the new theme file, please follow the next steps

  1. Close the Keynote if it is open
  2. Copy the file "WWDC Style 1024x768.kth" file to `~/Library/Application Support/iWork/Keynote/Themes/` folder. (If not exist, create it)
  3. Open the Keynote, and enjoy it.
Screenshots

And also, let's see some screenshots from this theme.
Theme Selection


Title Page
Version History

Sep 25, 2011 - V0.1, initial release.

Known Issues
  • Currently, this theme only support 800x600 and 1024x768 size. No widescreen support(I don't know how to combine different sized themes together).
Feedback

If you have any problem on using this theme, feel free to contact me at

Sunday, September 18, 2011

include "header.h" と include <header.h> とXcodeの落とし穴

#include "header.h"
#include <header.h>

"" と <>の違い

色々な人が説明しましたが、ここに再び説明します。

Xcode4での落とし穴

Xcode4の中に、Headerファイルの検索パスを設定することが可能です。ただし、Xcodeの特性の一つとして、Projectのビルド設定とTargetのビルド設定をちゃんとわからないと、意外にひかかる可能性が非常に高いです。
図1 Projectの"Always Search User Pathsの設定"


図2 Targetの"Always Search User Pathsの設定"

図1に"Always Search User Paths" はデフォルトのYESです、しかし、Targetの中には"No"です。この場合の#include <header.h> がコンパイルできない可能性が非常に高い。なぜ? それはXcodeのビルド設定の特性です。Projectの設定はすべてのTargetと共有します。図2のようにTargetは独自のビルド設定をセットすることが可能です。コンパイルする時はいつもTargetの設定を基準に準じで、コンパイルします。


解決方法


解決方法は簡単です。Targetにある"Always Search User Paths"を選定して、[fn+delete](たまに⌫のように見えます)を押して、Targetの設定を削除したら、OKです。削除したら、図3の感じです。
図3、Targetの"Always Search User Pathsを削除"







Tuesday, September 13, 2011

Ready to move to a new template

This template is not so easy for a programmer to read the code and view the picture, so I will change to a new blog template. Before I leave this, I took a snapshot for current template to remember.

I have to say, it's really, really easy to use Blogger.com. Blogger.com is getting better and better.


Saturday, September 10, 2011

Do you know? Apple's review team tests IAP with test account

Today, my most recent app got it's third rejection. F*** it.

The second time Apple's review team rejected my app they told me, they had an error with 21007 when testing the Auto-renewable subscription IAP. I thought them mean I hadn't handled the error and resubmitted the app. I thought it was OK, but today, I got the third rejection.

The reason is still error 21007, this time with the error message I showed to them.

What's Error  `21007`

Error 21007 is the code returned from Apple's verification server, means `You are verifying a sandbox receipt with the product verification server`. Similarly, there is another error code 21008 which means `You are verifying a product receipt with sandbox verification server.`. Auto-renewable subscription IAP(In App Purchase) need to verify the receipt with Apple's verification server. And there is a status code returned from Apple's server.  Any status code value is not equal to 0 means error.


Table 7-1  Status codes for auto-renewable subscriptions
  • 21001
  • The App Store could not read the JSON object you provided.
  • 21002
    The data in the receipt-data property was malformed.
  • 21003
    The receipt could not be authenticated.
  • 21004
    The shared secret you provided does not match the shared secret on file for your account.
  • 21005
    The receipt server is not currently available.
  • 21006
    This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.
  • 21007
    This receipt is a sandbox receipt, but it was sent to the production service for verification.
  • 21008
    This receipt is a production receipt, but it was sent to the sandbox service for verification.

You can also find this from Apple's DevCenter.


Let's take a look at the whole process. It can be visualized as below:
<Image is from http://www.phpriot.com/articles/verifying-app-store-receipts-php-curl>


Why does this Happen?

When we build the binary file for Apple to review, we need to define the server URL for production environment. But when we test the app in Debug/Release/AdHoc mode, we need to use the sandbox environment. So usually, we will have a piece of code like this:



Such kind of preprocessor can make sure you don't invoke the sandbox verification URL in real product build.

The server side will invoke different URL based on the request URL's parameter. So here comes the problem.

  1. You build the AppStore version and submit to review team to review
  2. The verification URL is pointing to the product server
  3. App review team using test iTunesConnect user to test IAP(See the FAQ#16 in TechNote 2259 from Apple)
  4. The reviewer got a 21007 from your server.
  5. BOOM! Your app got a rejection for could not complete the subscription.


How to resolve this?

To resolve this, we need to do something with our server. It's simple but tricky. We use the sandbox verification server no matter what the parameter is in the verification URL. Oh, simple, usually, modify 1 line, and everything is done.

But!

There is always a "but". But what if we need to submit an update version to the review team, your tricky solution won't work! What should we do? Look like, adding a new version parameter to the verification server is simple and easy to resolve this. The new URL look like this:



OK, it's all done! Hope your app don't get rejection from Apple because error 21007

If this post helps you, please don't forget to leave your comment!;)



BashのPromptに色をつけたら、改行がおかしい問題の解決

BashのPromptに色をつけることが可能だということは知っていますか?色をつけたら、非常に見やすくなります。ただし、色をつける時、正しく設定しないと、長いコマンドの改行がおかしくなることが起こします。次のような改行が出てくるかもしれないですよ。

<図1:改行が間違っている状態のコマンドライン>

では、この状態の環境変数PS1を見てみましょう:



本当はこのようなことが欲しいです。
<図2:改行が正しい様態のコマンドライン>

この場合の環境変数PS1の設定を見てみましょう。



非常に不便ですが、解決方法が意外と簡単です。その解決方法の肝は\[\]の意味を理解することです。Bashで\[\]の意味は「Bashで長さの計算に除外する」です。正しい表示できるときのPS1の設定を見てみたら、すべての色設定


\e[foregroundColor:backgroundColorm

\[\]に包まれています。つまり、色設定の記号は全部カウントされないようにしました。故に、正しい表示が出来ました。いわば、次のように覚えておくと正しい色表記ができます。


\[\e[foregroundColor:backgroundColorm\]


具体的な色の値は「このページ」をご参照ください。

本稿が皆さんのMacのコマンドラインをもっとわかりやすくにして、仕事の効率向上に少し役に立てば嬉しく思います。

Wednesday, September 7, 2011

[转载]徐贲 - 你见过这43种歪理和不会说理吗



转载说明:因为不知道此文何时会被和谐。留此存照
----------------------------------------
你见过这43种歪理和不会说理吗
徐 贲

1、就是不说理:
说理的首要前提是愿意说理。有的人不说理,不只是因为不知道怎么说理,而且更是因为仗着有权、有钱、有压制别人的手段,根本就不愿意讲理。这种极端强梁、霸道、暴力的非理性,已经超出了话语讨论本身的范围。讲理的弄不过不讲理的,说正经道理的弄不过讲蛮理的,再怎么说理,也是白搭。如果这成为现实,社会也就会陷入一种普遍的非理性、无是非状态。
2、“事实”和“看法”不辨:
“事实”是公认的知识,而“看法”只是个人的看法。任何看法、想法都不具有自动的正确性,都需要证明其正确性。证明也就是说服别人,清楚地告诉别人,为什么你的想法是正确的,理由是什么。
“客观事实”与“个人看法”之间有两种辨认方式。第一,人们可以共同确认“事实”是否确切,例如,中国是一个亚洲大国,共产党是1921年成立的。而对“看法”则必须通过说理、讨论,共同确认。例如,中国是一个民主国家,共产党是英明的。第二,事实陈述使用那些比较可以共同认可词义的字词,如“园形”、“欧洲”、“木头”、“有毒物质”等等。而“看法”使用的则是有待个人理解的字词,如“美好”、“丑陋”、“棒”、“爽”、“折腾”、“胡闹”。归纳起来便是:客观的“事实陈述”说:“请你核实”;强梁的“看法陈述”则说:“我说对,就没错。”前者是谦虚的、协商的;而看后者则是傲慢的、独语的。

Monday, September 5, 2011

注册了新浪微博

@TonnyInTokyo

欢迎大家来关注。

主要是当用中文写的Blog,都会在新浪微博上发一个更新。聊天什么的可是没有什么时间。

Sunday, September 4, 2011

[转载]第一财经周刊 : 硅谷・人人都想创业狂

原载于《第一财经周刊》,转载自《42qu.com
感言:在中国,这样那样的C2C(What's C2C?)充斥着光怪陆离的网络世界。第一财经的此篇文章做得及其用心,在中国是显得那么特立独行。硅谷的创业基因在硅谷的环境中似乎谁都可以感知到,在硅谷之外,将创业的基因用笔头如此犀利的整理出来的,中文圈中当属此文。此致敬礼,第一财经的朋友们!


我们把硅谷的后五篇报道一并推出来,或许我们会得出一个结论:硅谷没有秘密,商业就是这样。
硅谷人在江湖漂
如果说硅谷教会了谷歌或者英特尔什么的话,那就是这个悖论:大公司很重要,但它是浮云。
这个30多岁的男人光头、三粒扣西装配卷边牛仔裤、穿一双尖头翻毛皮鞋,演讲前播放的视频先打出大大的名字:Brian David Johnson。而他的名片右下角Title挤成了两行:Principal Engineer(首席工程师)、Futurist Director(未来学顾问)和Future Casting(未来映射)……of Intel。
这是英特尔全球唯一的未来学家。Johnson 已经为这个全球最大的芯片公司工作了8年,但有这个Title还是近两年的事儿。Johnson的工作职责是告诉英特尔2020年的计算机会是什么样子,他需要提交的不是预测报告,而是和人类学家、社会学家一起找出英特尔客户的需求和现有技术之间的区间,然后与工程师沟通发掘可以引爆下一个市场热点的产品。整个过程就被称为名片上那个拗口的词组“未来映射”。他最广为人知的作品就是那台Google TV,英特尔是芯片提供者。
无论是未来学家这样的角色,还是2009年发布的那句“Sponsor of Tomorrow”(它代替了原来的那句:Intel inside), 英特尔都在表达“别把我们看作一家微芯片制造公司”的热切,它们更希望与创新以及每个人产生更多的直接联系。
在硅谷Mountain View计算机博物馆举办的英特尔新技术展示会上,你能看到各种各样的tomorrow:比如人机交互零售系统、退休人士的个人医疗数据应用、可辨别受众的智能广告发布系统和智能汽车中控台。你能感受到这家原来躲在机器背后的公司正在尽其所能接近你的生活。按照英特尔中国研究院院士王文汉的说法,自从英特尔CTO贾斯汀·拉特纳(Justin Ratter)上台之后,英特尔每项技术研究立项之前都需要先确定是否符合市场需求,是否足以变成产品。
其实英特尔做的只是极力证明自己还不算太老。
但在硅谷,有时候它还真的像一个文物。这一点在参观那台智能汽车中控台时就能感受到:当在智能手机上装上一个App之后,你可以通过近场通信技术或者二维码扫描与汽车同步,之后便可以启动娱乐系统,还能选择是以车主还是以客人的身份登录,但这个App对应的控制台就是汽车原本平滑的仪表盘前嵌着的一个硕大铁盒,又原始又突兀。
在计算机博物馆的门口印着这么一句话:Today is so yesterday。带着这句话去看斯坦福的博物馆,或者惠普那间著名的车库,你会觉得这些与咖啡馆里热烈讨论的新鲜主意恍惚有几万光年之遥。哪怕回头再看看1976年的苹果,啊,那也是很遥远的事了。但硅谷本身似乎从来没有老过。那些大公司们─英特尔、苹果、惠普和谷歌等等─与那些创业公司比起来,身上的“硅谷”标签更多意味着“我们来自硅谷”,而不是“我们就是硅谷”。还记得那个做音乐App的创始人Bart Decrem吧?他介绍了那个又大又丑的极客商店,他说:“你们干嘛要去圣克拉拉那种地方?英特尔、惠普才不是你应该找的硅谷。硅谷在Palo Alto镇上的咖啡馆里,去跟创业者聊天才对!”
Bart 说得没错。硅谷有它极其简单的一面:创业者热土。你只有到了那里才知道“创业”这两个字有如空气般稀松平常但又不可或缺。它似乎欢迎任何人,无论国籍、年龄、种族。所以硅谷又有它说不清的那一面:为什么会有如此之多、各式各样的人放着好端端的大公司不去,涌到这里来“创业”?在这个看似混乱的硅谷,你应该拿什么去定义、衡量一个人?
辈份肯定不重要。在那个看起来很遥远的1976年,21岁的乔布斯是英特尔创始人罗伯特·诺伊斯(Robert Noyce)的朋友!很多人不记得诺伊斯了吧,他是安迪·格鲁夫甚至戈登·摩尔之前,跟着肖克利一起在仙童混的人。即便他不是乔布斯的神,但也不是寻常拉起电话就能请教问题的人─重点不在于乔布斯怎么敢这么做,而是49岁的诺伊斯认认真真回答了乔布斯关于创业的问题,并且还给了他一些重要配件解决燃眉之急。
学历肯定也不重要。你也许不知道马克·安德森(Marc Andreessen),但你一定使用浏览器,并且没准还听说过Firefox。从那个叫做Mosaic(马赛克)到内核一脉相承的Firefox,马克·安德森为全世界的上网者创造了便捷端口,现在也不过40岁。从辍学创业、改变世界的角度看─这个马克,和现在另一个硅谷偶像马克也没有什么区别。
甚至这个人是否来自敌对阵营也不重要。比如谷歌的创始人拉里·佩奇总是想着乔布斯去当谷歌CEO,在投资人替他物色并推荐施密特之前,他始终觉得这是不二人选。但施密特……他还在苹果做了董事,直到Andriod项目大白于天下两方才觉得尴尬,这段错综复杂的关系才宣告结束。
Sid Espinosa,那个Palo Alto的市长,把这样的关系称之为frienemy(“是敌亦友”)。“硅谷有一个健康的竞争氛围,彼此维持着一种平衡的竞争关系。平衡主要体现在,每个人都和其他人维持着紧密的联系,不会因为在有竞争关系的公司工作就如临大敌,老死不相往来。”
这可能是一种更为开放的心态。在硅谷,connection(联系)是一个比competition(竞争)出现频率高得多的单词,它们衍生出来的一个对硅谷很重要的词是community(社区)。创新设计公司IDEO会在硅谷形成一个设计师社区;而那些对人工智能热衷的工程师们也会组成一个机器人社区:整个硅谷核心地带规模不过数千人,这其中可能有谷歌智能汽车团队的成员,也可能有NASA负责非地球环境探索的工程师,当然还有像Willow Garage这种机器人项目创业公司的创始人们。顺便说一句,在这个机器人社区里,Willow Garage享有极高的口碑,因为他们在像Andriod一样制造开源的人工智能程序,你可以视之为一切机器人的基础内核。这样的开源为整个硅谷的人工智能发展节省了无法计算的时间。
所以回过头来再看Facebook为什么来了硅谷。《社交网络》里肖恩·帕克对马克·扎克伯格说,你应该去加州。这可能是一种偶像式劝诫,但现实是,在美国,当一个叫做马克·扎克伯格的青年要创业的时候,他不可能忽视一个叫做硅谷的地方,这里有他能找到的最好的工程师。无论苹果还是谷歌,它们的诞生和存在都证明了这一点。
接下来的事情你会更熟悉。Facebook的出现以及它对谷歌挖角的故事,把硅谷的人才争夺战推到了史无前例的高峰:最有影响力的是 Facebook现任COO、前谷歌全球副总裁Sheryl Sandberg塑造了Facebook的盈利模式,也吸引了将近200名谷歌员工加入Facebook。尽管拉里·佩奇重返CEO位置后宣布为全球 2.5万名员工加薪10%,诸如谷歌前创意总监Ji Lee和产品主管Tom Stocky依然选择了跳槽。迄今为止,20%的Facebook员工曾在谷歌工作过。
挖角的高潮在硅谷一再重演,对当年的谷歌一样毫不留情,但无论Facebook还是谷歌都挡不住另一种人才流动:创业。几乎在所有时代,一个社会的成功都取决于它能否将大型机构整合到一起,规模经济是制胜法宝,它创立的一个原则是,最大的机构就是最成功的机构。在不到20年前,人们谈起小公司可能指的是街角一家鞋店,而不是一家初创公司。
现在来看保罗·格雷厄姆2008年说的那段话,它就像一段被印证的预言:大公司可能再也无法扮演那种叱咤风云的角色了,它们不会消失,但它们再也留不住一流人才。互联网为那些雄心勃勃想创业的人提供了绝佳的机会,初创公司将会出现分食影响力。世界会进入盛行“小”的领域。
当离开肖克利半导体的那8个人成立仙童的时候,没有人把成立一家新公司作为人生奋斗目标,他们只是想找一家愿意同时雇佣他们的公司。最后结果是其中一个人的爸爸把他们介绍给了阿瑟·洛克,他们拿着一笔启动资金创业了─创业对他们是一件奇怪的事,属于走投无路的选择。
但现在,每个知道如何编程的斯坦福或者伯克利的本科毕业生,很少没有过创业的想法,大公司不再是他们的唯一选择。如果要证明自己,最好的办法不是在宽敞明亮的玻璃大楼里朝九晚五,而是一周只睡25个小时、在堆满披萨盒的房间里疯狂写代码。这样做的后果有可能是成为下一个十亿美元公司,也有可能不是。但无论如何,你相信自己可以改变些什么。
硅谷就是这样。
Harpinder Madan,这个前甲骨文工程师十年前第一次创业,为AT&T这样的电信公司提供工程解决方案,然后揣着一笔钱回了印度老家;但终究是待不住,于是再把当年创业的合伙人从澳大利亚一块儿拉出来,重回硅谷,这回他们创业的项目是一个叫做Project Slice的消费收据搜索引擎,所有以电子邮件形式发回的网购记录都可以被这个小插件识别,而这和十年前他们所用的技术几乎没什么关系。
现在你还可以知道,为什么大公司会允许员工带着宠物上班,为什么谷歌会创立20%自由使用时间的制度。你可以将这些视之为自由创业氛围的模拟,而终极目标当然是为了留住人才。这导出的终极悖论是,一个能留住人的大公司,得给大家上创业课,而它最终也无法阻挡那些天才员工出走创立属于自己的公司,这也是硅谷裂变的原因。
在硅谷,每个人都是属于自己的。你可以说只有一个大公司,也可以说所有大公司都是他们的浮云,他们从来不属于这些大公司,最终他们要的是自己的梦想。
Money!
等到股市出现并与风险投资结合,硅谷的历史就开始了。