03 2 / 2012

技術

日本はなぜ敗れるのか - 敗因21カ条

オススメされたんで読んでみたんですが、あぁなるほど、と思うことしきり。

一番キタところ。

 私の取引先のT印刷所は、機械二台、家族だけの零細企業である。その印刷機の一つは、今ではおそらく博物館にしかないと思われる、俗にチャンドラという印刷機で、Tさんはそれをもう半世紀も使っている。いわば印刷機の三八式歩兵銃である。だがこのT印刷所の”技術”は、高性能総自動化最新式印刷機で刷った印刷物よりはるかに立派であり、T印刷所ファンの出版社は多い。

 しかしTさんがもっているのは、正確にいえば個人のもつ”芸”であっても、客体化できる”技術”ではない。いわばTさんの技術は”武芸”と同じような”印刷芸”であって、正確には、氏から離れて、それだけを系統的に多くの人が同時に学びうる、体系的技術ではない。またこの”芸”は、チャンドラだけで生かされるもので、氏がチャンドラですばらしい印刷をするから、高性能総自動化最新式印刷機ならもっとすばらしい印刷ができるかといえば、そうではないのである。

たとえば。なんか、いろいろ頑張って実装していたゲームエンジンがあるとして。そこにUnityさんがやって来ました。Hi! って言いながら。そしたら、いままで実装してきたものが要らなくなっちゃいました。てへ。

何を言うか、0から作ることが技術力維持につながるし(コモディティからの脱却ですよ)、もしその会社が買収されたらどうするんだ(RenderWareとか懐かしいですね!)、あれでは痒いところに手が届かないじゃないかウチのこれならこうすればこんなに凄いことができる、云々。反論いただくまでもなく、いくらでも理由を聞いたことがありますので大丈夫です。

ということで、特に結論なく終わります。

Permalink 2 notes

24 11 / 2011

初心者向け『エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜』読書ガイド

なかなか好評で売れております! 

エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜

電子書籍版紙書籍版 両方購入していただいた方も多数いらっしゃいまして、大変感謝しております! ありがとうございます!

しかし、この本、ちょっとばかり前提とする知識が多めかもしれません。

そこで、初心者向け読書ガイド、というか、読み飛ばしガイドを作って見ました。

  • 1.2.3 alloc/retain/release/deallocの実装
  • 1.2.4 Appleによる実装
  • 1.2.6 autoreleaseの実装
  • 1.2.7 Appleによる実装
  • 1.4 ARCの実装
  • 2.3 Blocksの実装 (注:「2.3.8 Blockによる循環参照」は読んでください!)
  • 3.3 Grand Central Dispatchの実装

これらの章は、読み飛ばしちゃってくださいませ。こういう難しめのところも含めて、全体的にわかりやすく書いたつもりではあるのですが、さすがに実装部分はC/C++の前提知識なしで読むのは難しいのが否めません。

ということで、まずはARC,Blocks,GCDの肝となる部分だけ読んで身につけていただいて、実装に関する知識が増えるとともに、読み飛ばした部分をちょっとづつ読んで理解を深めていっていただければと思います。

18 11 / 2011

『エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜』

紙書籍版ついに発売されました!

そして、電子書籍版も正式版公開されました!

Amazonでは、『詳解 Objective-C 2.0 改訂版』と一緒に購入されているそうですよ!

まさに、願ったり叶ったりという組み合わせです。

Objective-Cを真に理解したい方は、是非この組み合わせでご購入いただければ幸いです。

電子書籍版、紙書籍版ともに無事発売されました! 関係者の方々、ご協力ありがとうございます!

14 11 / 2011

今週金曜日発売! 『エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜』

筆者である私自身が、Amazonからオススメされてしまうくらいの良書ですよw!

実際、私が書いたことを忘れれば、本屋でぱらっと内容見たら即買いするレベルの内容です。

筆者自身がいちばんの読者。eat one’s own dog foodですね!

いよいよ11/18日発売です!

『エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜』

Permalink 1 note

28 10 / 2011

『エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜』

エキスパートっぽい感じの表紙来ました!

『エキスパートObjective-Cプログラミング 〜iOS/OS Xのメモリ管理とマルチスレッド〜』

2011年11月18日発売予定です!

電子書籍版は達人出版会でどうぞ!

Permalink 1 note

20 10 / 2011

Objective-C

Objective-Cを学ぶのに一番良い本は、『詳解 Objective-C 2.0 改訂版』だと考えています。この本を理解するためには、C/C++などの他の言語の知識も必要ですが、それはまた別の本で学べば良いかと思います。1つの本で全部網羅しようとしたら、アガサ・クリスティーの限定本みたいにえらいことになるでしょうし。

さて、この『詳解 Objective-C 2.0 改訂版』ですが、レビューを拝借させていただくと、

■非常に良い本かと思います。(Blockについては書かれてますが、GCDについては書かれていません), 2011/2/17

ただ、Grand Central Dispatch(GCD) などでも使われている Block については詳しく解説されてますが、GCD については全く書かれていません。期待していましたが、残念です。

(この著者の方で) 補足版のような形で GCD の本がでることを期待します。

なんて書かれていました。はい。その「補足版のようなGCDの本」出ます。残念ながら「(この筆者の方)」ではないですが、Blocks、Grand Central Dispatch(GCD)について、この本以上に詳しくて深いと自負する本を執筆しました。

エキスパートObjective-Cプログラミング -iOS/OS Xのメモリ管理とマルチスレッド-

2011年11月18日発売予定です(ちなみに、電子書籍版はすでに発売されています)。たとえば、

  • Blocksで自動変数がキャプチャされるけど、なんでそもそもリードオンリーなの?
  • __blockだと書き換えできるけど、いったい何が起こっているの?
  • Blockで使ったオブジェクトがなんだかリリースされないんだけど?

なんて疑問を解決することができます。もちろんGCDについても、こんなのを身につけられます。

  • dispatch_asyncとdispatch_syncの違い
  • Serial Dispatch QueueとConcurrent Dispatch Queueの違い
  • Main Dispatch Queueの使いどころ
  • Global Dispatch Queueと自分で作ったConcurrent Dispatch Queueの使いどころ

そして、iOS 5、OS X Lion用SDKから新しく導入されたAutomatic Reference Counting (ARC)も理解できますし、それと同時に、Objective-Cのメモリ管理もマスターできます。

本棚の『詳解 Objective-C 2.0 改訂版』の隣には、是非エキスパートObjective-Cプログラミング -iOS/OS Xのメモリ管理とマルチスレッド-を置いちゃってくださいませ。

Permalink 3 notes

15 10 / 2011

『エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド』

iOS/OS Xアプリケーション開発者向けに、かなりマニアックな本を書きました。

エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド

というタイトルで、ARC、Blocks、Grand Central Dispatchを事細かに説明している本です。

達人出版会さんにて絶賛販売中です! (http://tatsu-zine.com/books/objc)

自分で絶賛とか言ってますが、どのくらい絶賛かと言いますと、

ARCに関する記述を読んだ。めっちゃ詳しい。詳しすぎるくらいだ。Objective-CというかCocoaのメモリ管理について知りたければこれ!!

「エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド - 達人出版会」買った。すごい内容!NSAutoreleasePoolをautoreleaseしたらどうなるか、とか面白い話山盛り。

参照カウントによるメモリ管理の説明部分なんかは、初心者でもわかりやすい(はず)。私が今まで見た中で、最もわかりやすくretain,releaseについて説明してあります。(中略)また、ブロック構文の説明やGrandCentralDispatchの説明も、今まで見た資料よりも断然わかりやすいです。(中略)この本に書いてある説明は、孫引きの説明ではなく、著者が深いところまで調べ上げ、理解したうえで書いています。こういう本こそ手元に持っておきたいと私は思います。

「エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド」を読んでますが、これはほんと全開発者必須だと思う。初心者でもまず最初のリファレンスカウンタの仕組みくらいは必読かと

『エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド』私も読んでます。 ADCのドキュメントより役に立つ読み物は貴重

達人出版会の [エキスパート Objective-C プログラミング ― iOS/OS X のメモリ管理とマルチスレット] が親切過ぎる。ARCの話抜きでもメモリ管理の説明とか分り易すぎ。Obj-Cこれからの未経験者も読むといいよ

このように、大変ありがたい言葉を頂いております! ありがとうございます!

また、現在の販売形態は電子書籍ですが、紙でも出版されます! (『エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド』β版を公開しましたいつ出版されるのか、残念ながらまだ言えません!

Amazonで予約開始されました! http://amzn.to/ngnnU1

そのかわり、詳細な目次を公開させていただきます。購入の参考にしてみてくださいませ!

■Automatic Reference Counting

        ■Automatic Reference Countingとは何か?

        ■メモリ管理 / 参照カウント

                ■概要

                ■メモリ管理の考え方

                        ■自分が生成したオブジェクトの所有者は、自分である

                        ■自分が生成していないオブジェクトも、所有することができる

                        ■自分が所有しているオブジェクトが必要なくなったら、解放する

                        ■自分が所有してないオブジェクトを解放してはならない

                ■alloc/retain/release/deallocの実装

                ■Appleによる実装

                ■autorelease

                ■autoreleaseの実装

                ■Appleによる実装

        ■ARCのルール

                ■概要

                ■メモリ管理の考え方

                ■所有修飾子

                        ■__strong修飾子

                        ■__weak修飾子

                        ■__unsafe_unretained修飾子

                        ■__autoreleasing修飾子

                ■ルール

                        ■retain/release/retainCount/autoreleaseは使用できない

                        ■NSAllocateObject/NSDeallocateObjectは使用できない

                        ■メモリ管理に関するメソッド命名規則を守る

                        ■明示的にdeallocを呼び出せない

                        ■NSAutoreleasePoolのかわりに@autoreleasepoolブロックを使用する

                        ■ゾーン(NSZone)は使用できない

                        ■オブジェクト型変数は、C言語の構造体(struct/union)のメンバになれない

                        ■「id」と「void *」は明示的にキャストする

                ■プロパティ

                ■配列

        ■ARCの実装

                ■__strong修飾子

                ■__weak修飾子

                ■__autoreleasing修飾子

                ■参照カウント

■Blocks

        ■Blocks概要

                ■Blocksとは何か?

        ■Blocksの仕様

                ■Block構文

                ■Block型変数

                ■自動変数値のキャプチャ

                ■__block指定子

                ■キャプチャした自動変数

        ■Blocksの実装

                ■Blockの実態

                ■自動変数値のキャプチャ

                ■__block指定子

                ■Blockの記憶域

                ■__block変数の記憶域

                ■オブジェクトのキャプチャ

                ■__block変数とオブジェクト

                ■Blockによる循環参照

                ■copy/release

■Grand Central Dispatch

        ■Grand Central Dispatch概要

                ■Grand Central Dispatchとは何か?

                ■マルチスレッドプログラミング

        ■Grand Central DispatchのAPI

                ■Dispatch Queue

                ■dispatch_queue_create

                ■Main Dispatch Queue / Global Dispatch Queue

                ■dispatch_set_target_queue

                ■dispatch_after

                ■Dispatch Group

                ■dispatch_barrier_async

                ■dispatch_sync

                ■dispatch_apply

                ■dispatch_suspend / dispatch_resume

                ■Dispatch Semaphore

                ■dispatch_once

                ■Dispatch I/O

        ■Grand Central Dispatchの実装

                ■Dispatch Queue

                ■Dispatch Source

■コラム: ゾーン

■コラム: Objective-C メソッド呼び出しの高速化

■コラム: NSAutoreleasePoolオブジェクトをautorelease

■コラム: __strong修飾子/__weak修飾子

■コラム: Objective-Cのオブジェクトと、Core Foundationオブジェクト

■コラム: オブジェクトの即時解放

■コラム: allowsWeakReference/retainWeakReferenceメソッド

■コラム: C++のthis、Objective-Cのself

Permalink 10 notes

02 9 / 2011

「波に揉まれるiPhone 4」と「魚とともに泳ぐiPhone 4」

もちろん、素のiPhone 4だと即死です。LifeProof iPhone 4 ケースを付けてます。

http://www.lifeproof.com/

Apple純正バンパーより太いかな、くらいの印象で、2メートル防水とか、耐衝撃とかその他。タッチパネル部分は、タッチできるようにパカパカしますけど。あと水中ではタッチできません。それでもスゴく良いです。

普段も付けっぱなしでいるかどうか考え中。以前のように自転車乗りまくってればジャージの背中ポケットに入れとけるように(汗まみれ)、付けっぱなしでしょうけども。脱着は50回程度しか持たないので、毎日のように着け外しするのはやめといた方が無難。

Permalink 1 note

11 8 / 2011

Vim/MacVimとの関わり

http://mattn.kaoriya.net/software/vim/20110810203558.htm

http://www.kaoriya.net/blog/201108/20110811

触発されちゃいました。

1994年〜1998年あたりは、emacs,mule,elvis,jvimあたりをウロウロしてました。Emacs Lispいじって、これで私もLisper、とか(お恥ずかしい)

1999年頃はitojunさんがメンテされてたnvi-m17nで、NetBSDのpackageにしたり http://bit.ly/ppejy0。

2000年からVimにswitch http://bit.ly/mUEFAc kaoriyaさんと同じくシンタックスハイライトに衝撃を受けたのがきっかけです。

主にNetBSDやLinux distribution上で使っていましたが、2004年からMac OS X派閥に転向。Vimは主に自前ビルド。

2007年頃、Mac OS XでVimにKaoriYaパッチをあててビルドするPrivatePortfile/Vimを配布開始 http://bit.ly/peCKyq

主にTerminal.app, iTerm.appで使うことを前提にメンテしてたものの、Mac OS X Carbon GUI、vim-cocoa、MacVimなどが便利なときもあることに気づき対応を拡大。その後、マルチウインドウが使えるMacVimに主軸を移動。

2009年 Portfileだけでpatchを当て続けるのに限界を感じ、MacVim-KaoriYaを開始 http://bit.ly/oDvI4e 主に日本語を扱う上での不都合に対するパッチをMacVimに送りつけつつも、MacVim-KaoriYaはMacVim-KaoriYaで独自の進化を施しちゃったり。

独自の進化といっても、Vimscriptの実行に影響ある部分はほとんどないです(むしろ、たとえばif_rubyがRuby 1.8とRuby 1.9どちらか一方dynamic linkできちゃったりする)。

Vim, MacVim, MacVim-KaoriYa の違い http://bit.ly/gFvNLX

MacVimといっても実は単なるガワで、実体はVimなのです(psしてみるとVimが動いていることがわかりますですよ)。たしかに描画周りはまだncursesと差はあります。不具合もあると思います。何かありましたら、ぜひフィードバックを!

Permalink 2 notes

08 8 / 2011

Android NDKでOpenAL

Android NDKで、OpenAL software implementationを使うことができます。

■Android 2.3 (API level 9) 以上専用アプリになっていい場合

■Android 2.2 (API level 8) 以下にも対応させたい場合

■マルチプラットフォームゲームエンジンのUnigine EngineでもAndroidでOpenAL使用可能のようです

01 8 / 2011

MacVim-KaoriYa 20110801版

http://code.google.com/p/macvim-kaoriya/ 20110801版リリースしました。MacVimのメニューから「アップデートを確認」してみてくださいませ。

10.6 Snow Leopard、10.7 Lion 対応版です。10.5 Leopard非対応となります。 

MacVim snapshot61のfeature「Lionフルスクリーン対応」が使用できます。

Permalink 3 notes

25 7 / 2011

MacVim-KaoriYa 20110725版

http://code.google.com/p/macvim-kaoriya/

20110725版リリースしました。MacVimのメニューから「アップデートを確認」してみてくださいませ。

  • 10.6 Snow Leopard、10.7 Lion 対応版です。10.5 Leopard非対応となります。
  • Vim本体の更新により、影響が出るpluginがあるようです。まずpluginを最新にアップデートすることをお試し下さいませ。
  • 半透明設定を使用している場合は、「環境設定」「詳細」の「実験的レンダラを使用する」「インラインインプットメソッドを使用する」の両方をチェックしてください。

Lion フルスクリーン対応は、MacVimにて開発が進んでいるようです。

22 7 / 2011

How to install Xcode 4.1 in the specific folder where you want

  1. Install Xcode 4.1 from Mac App Store.
  2. Launch the installer directly and install as usual.
    $ open /Applications/Install\ Xcode.app/Contents/Resources/Xcode.mpkg

Permalink 1 note

21 7 / 2011

Enable PowerPC toolchain on Xcode 4.1

$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /Developer/usr/libexec/gcc/darwin
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc /usr/libexec/gcc/darwin
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-apple-darwin10-cpp-4.2.1 /usr/bin/powerpc-apple-darwin11-cpp-4.2.1
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-apple-darwin10-gcc-4.2.1 /usr/bin/powerpc-apple-darwin11-gcc-4.2.1
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-apple-darwin10-g++-4.2.1 /usr/bin/powerpc-apple-darwin11-g++-4.2.1
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-apple-darwin10-cpp-4.2.1 /Developer/usr/bin/powerpc-apple-darwin11-cpp-4.2.1
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-apple-darwin10-gcc-4.2.1 /Developer/usr/bin/powerpc-apple-darwin11-gcc-4.2.1
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/powerpc-apple-darwin10-g++-4.2.1 /Developer/usr/bin/powerpc-apple-darwin11-g++-4.2.1
$ sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/gcc/powerpc-apple-darwin10 /Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc
#/bin/sh
IOSUSR=/Developer/Platforms/iPhoneOS.platform/Developer/usr
PPC10=$IOSUSR/bin/powerpc-apple-darwin10
PPC11=/usr/bin/powerpc-apple-darwin11
GCCVER=4.2.1
sudo ln -s $IOSUSR/libexec/gcc/darwin/ppc /Developer/usr/libexec/gcc/darwin
sudo ln -s $IOSUSR/libexec/gcc/darwin/ppc /usr/libexec/gcc/darwin
sudo ln -s $PPC10-cpp-$GCCVER $PPC11-cpp-$GCCVER
sudo ln -s $PPC10-gcc-$GCCVER $PPC11-gcc-$GCCVER
sudo ln -s $PPC10-g++-$GCCVER $PPC11-g++-$GCCVER
sudo ln -s $PPC10-cpp-$GCCVER /Developer$PPC11-cpp-$GCCVER
sudo ln -s $PPC10-gcc-$GCCVER /Developer$PPC11-gcc-$GCCVER
sudo ln -s $PPC10-g++-$GCCVER /Developer$PPC11-g++-$GCCVER
sudo ln -s $IOSUSR/lib/gcc/powerpc-apple-darwin10 /Developer/SDKs/MacOSX10.6.sdk/usr/lib/gcc

gcc-4.2 only.

“-isysroot /Developer/SDKs/MacOSX10.6.sdk” option is required, 10.7 SDK drops to support PowerPC at all.

Permalink 3 notes

15 7 / 2011

Git videos

Gitの基本的な使い方など

Gitのあまり見かけない部分のTips

Permalink 1 note