TomLion

tail -f life.log and tar -cf ideas.tar ~/brain/ideas

《苹果开发之Cocoa编程(第三版)》译者序

Posted on | 七月 20, 2009 | No Comments

作为个人PC时代开创者的苹果,在过去的33年里,历经大起大落。而最近几年,我们看到那个锐意创新的苹果正踏着梦幻的脚步重新回到舞台的中心,再次站在潮流的顶点。对于用户而言,苹果总是能设计制造出非凡的产品勾起用户的欲望,一次次用完美的细节打动用户的心;对于程序员而言,Darwin的UNIX/BSD血统有着天然的亲和力, 而Objective-C和Cocoa框架,则让程序员认识了苹果一流产品背后的技术实力。正是这些从硬件到系统、从语言到框架的多层次的长期积淀,让苹果能够创造出如iPhone这样的明星产品。


虽然苹果电脑在美国一直有着不错的市场占有率,但因为价格的关系,对于国内的用户而言,它最多只能是多数人眼中的梦中情人而已。而这几年汇率的变化,让苹果产品的性价比变得极为出色,OS X系统的占有率在稳步提升,如果算上iPhone的系统,国内OS X系统的拥有量已经相当可观。因此放在国内来讲,这个平台对程序员而言是一个全新的机会。但目前而言,这个平台上中文参考书确实匮乏,因此才有了这本书的翻译。希望本书的翻译出版能够促进苹果中文开发社区的进一步的发展,帮助更多的程序员了解苹果的开发平台。


本书的作者Aaron Hillegass是Big Nerd Ranch(一家专业的培训机构)的专职培训Cocoa的老师。这样一个有着多年的实际教学经验的作者写出的书,再经过前两版对内容的推敲,此书自然是一本久经考验的入门必备好书。这本书剖析了很多关键内容的来龙去脉,既交代了原因,也分析了解决问题的思路,包括如何获取资料、查看文档,甚至于如何在社区提问等等,真正做到了授之以渔。


本书的第1至5章,第11至20章由陈勇翻译,第28至35章由王健翻译,剩下的由钱友才翻译。


感谢许其峰和苗涛在本书翻译过程中提供的帮助,另外还要感谢博文视点的徐定翔和白爱萍两位编辑的细致和耐心的工作,正是在他们的帮助下,初次接触翻译的我们才能顺利完成任务,最后还要感谢本书原作者Aaron Hillegass伸出的援助之手,让这本书得以尽快面世。

尽管翻译过程中诚惶诚恐,生怕有辞不达意之失,更怕糟蹋了这本经典的Cocoa编程书籍,但囿于经验和能力,书中的问题和疏漏在所难免,还请读者能够给予反馈,我们将在https://groups.google.com/group/cocoa4mac上维护一份勘误表,并为您在学习本书过程中遇到的问题提供力所能及的帮助。

译者
2009年7月于南京

为Leopard的字典扩展快捷键取词功能

Posted on | 一月 1, 2009 | No Comments

尝试了目前Mac上的很多字典程序,或多或少都有些缺陷,没有一个完全称手的。

综合使用下来,Leopard自带字典程序Dictionary总体而言应该是最好的了。可以自己添加词典,用DictUnifier还可以与stardict共用一部分词典(说“一部分”是因为不是所有stardict的词典都能转换成功)。用Ctrl+Command+D在部分程序窗口(Safari,iWork,TextEdit等)可以直接屏幕取词,试试在取词结果出现后,继续按住Ctrl+Command,放在其他单词上,会有新情况 XD.

缺点:不是所有窗口都可以屏幕取词,譬如Firefox,不能取词简直无法容忍。好在我们有AppleScript可用,可以稍稍减少些键盘操作,结合QuickSilver可以实现简单的快捷键取词。

实现原理:

用AppleScript模拟执行Command+C,打开Dicitonary,再模拟Command+V的键盘动作。可以把Script的第五行的”Dictionary”换成任意一个字典程序。譬如”金山词霸”,”TranslateIt”等

tell application "Dictionary" to activate

具体步骤:

1.保存这个AppleScript文件到/Library/Scripts/目录下(文件要解压)

2.需要打开系统参数中Universal Access的Enable access for assistive devices

3.使用QuickSilver并打开QuickSilver的高级选项,在自定义Triggers处为这个dictionary.scpt添加快捷键,如图:

Robin的TextMate bundle的一些修正

Posted on | 十二月 11, 2008 | 1 Comment

Robin的原始版本在
不知道是不是TextMate的版本问题,Robin提供的TextMate bundle在我的电脑上安装失败,所以我借用了Robin的代码重做了一个TextMate bundle,功能一样。
还加入了这篇文章的Rails Console Command, 修改了一下,因为也不能正常工作。去掉了其中第11行的 . ~/.profile
另外需要提醒的是因为bundle中使用了AppleScript,所以需要打开系统参数中Universal Access的Enable access for assistive devices,否则bundle不能打开Safari.
下载bundle

JavaScript iPhone Apps

Posted on | 十二月 10, 2008 | No Comments

按:此文为John ResigJavaScript iPhone Apps一文的翻译稿。John Resig是个必须要认识的牛人,JQuery框架的主创人员,Mozilla基金会的JavaScript布道者(Evangelist)。这些名头其实也不算什么,更让我倾心折服的是此人的精力,其名下有76个项目,涉及范围非常之广。牛人的影响力自然不一样,所以此文的留言同样很精彩,应该基本囊括了目前使用JavaScript开发iPhone应用涉及到的框架,不可不看。

------------------------------------------------

我一直在关注iPhone的开发。我想知道如果开发一个可下载的javascript应用/iPhone应用,可以有哪些选择。在做了一些研究之后,我找到一些解决方案,有些简单,有些需要些Objective-C的知识。
在讨论具体的解决方案之前,需要注意的是,如果你要进行正式的iPhone开发的话,还是需要学习下Objective-C. 和正常模式开发的应用相比,所有的这些选项都不能提供全部功能。

JiggyApp
在2007就进入JavaScript的iPhone应用开发市场,使用需要“越狱”。
和大多数典型APIs不同,JiggyApp提供开发应用的完整API。而且代码也可能是相对易用的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Plugins.load( "UIKit" );
 
var window = new UIWindow( UIHardware.fullScreenApplicationContentRect );
window.setHidden( false );
window.orderFront();
window.makeKey();
window.backgroundColor = [ 0.8 , 0 , 0, 1 ];
 
var mainView = new UIScroller();
mainView.contentSize = [ window.bounds[ 2 ] * 2 , window.bounds[ 3 ] * 2 ];
mainView.backgroundColor = [ 0 , 0 , 0 , 0 ];
 
window.setContentView( mainView );
 
var hello = new UITextLabel( [ 20 , 20 , window.bounds[ 2 ] - 40 , 100 ] );
 
hello.text = "Hello World!";
hello.backgroundColor = [ 0 , 0 , 0 , 0.25 ];
hello.setFont( new Font( "Trebuchet MS" , 2 , 46 ) );
hello.color = [ 1 , 1 , 1 , 1 ];
hello.centersHorizontally = true;
 
mainView.addSubview( hello );

上面这段代码来自Jiggy起步.

JSCocoa
JSCocoa架起了JavaScript通往Cocoa开发的桥梁(不是通常的Objective-C开发Cocoa),在OS X和iPhone上都可以使用。它移植了Objective-C风格和方法,但使用JavaScript语法。注意其中的一些区别:

Objective-C/Cocoa:

1
[[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 100, 40)];

JSCocoa:

1
NSButton.instance({ withFrame:NSMakeRect(0, 0, 100, 40) })

MobileSafari上的应用
准确讲并不是真正的iPhone应用。
Apple提供了一系列技巧来帮助改进你的Web应用. 下面是一些要点:

  1. 提供一个图标 (当用户保存的时候使用).
  2. 提供一个全屏视图 (不显示MobileSafari的工具条).

使用iui的风格和设置后,你的Web应用将更像一个普通的iPhone应用.

PhoneGap

下一步将通过使用底层的API,使你的iPhone Web应用更像本地应用。其中之一是PhoneGap.

PhoneGap是一个应用,提供了一些JavaScript APIs给MobileSafari的页面. 目前包括Geolocation 和 加速感应器.

Geolocation:

1
2
3
4
5
6
getLocation();
 
function gotLocation(lat,lon){
document.body.innerHTML = "latitude: " + lat +
" longitude: " + lon;
}

Accelerometer:

1
2
3
4
function updateAccel(){
document.body.innerHTML = "accel: " + accelX + " " + accelY + " " + accelZ;
setTimeout(updateAccel, 100);
}

相机,声音,震动等接口目前还在开发中。

WebTouch

某天”Dr Nic”写了篇关于他如何用HTML, CSS, and JavaScript创建一个WebKit实例来移植他的一个iPhone应用.
我联系了他,想知道他是否愿意提供一些代码。这就是他在Mocra的同伴 Anthony Mittaz提供的WebTouch.

这是一个zip文件,包括一些示例代码,希望在某些点上可以被扩展。
这是一个很好的入门,帮你进入HTML/CSS/JavaScript/Objective-C/Cocoa的世界. 如果你对Objective-C感兴趣,这同样也是一个很好的起点。

额外奖励
这个你可能用不到,但我认为他很酷。有人将我的Processing.js 移植到iPhone上, 用OpenGL ES写了他自己的Canvas实现.

对于JavaScript开发者来说,还有很多选择。最现实的我认为就是WebTouch. 很显然如果要开发最好的iPhone应用你需要知道Objective-C. 而在JavaScript基础上更进一步是每个JavaScript程序员的目标。

使用JavaScript为iPhone/iPod Touch开发应用

Posted on | 十二月 9, 2008 | No Comments

本文为《Professional iPhone and iPod Touch Programming》一书的摘译。
这本书介绍如何使用HTML+CSS+JavaScript来开发应用,不涉及使用cocoa touch layer来开发native的程序。

HTML/XHTML (HTML 4.01 and XHTML 1.9, XHTML mobile profile document types)
CSS (CSS 2.1 and partial CSS3)
JavaScript (ECMAScript 3, JavaScript 1.4)
AJAX (e.g., XMLHTTPRequest)
Ancillary technologies (video and audio media, PDF, and so on)

这些代码运行在apple为iphone定制的mobile safari,同样使用webkit内核。
你可以认为Mobile Safari是Mac和Windows平台下的Safari的近亲,但两者并不一样,譬如Mobile Safari支持的CSS和JavaScript功能并不如桌面版的完整。

Mobile Safari和iPhone的本地应用有些本质不同
性能: 基于Safari的应用的运行效率不如本地应用,有两个方面:开发语言的执行效率以及通过Wi-Fi以及EDGE网络的操作。然而可以通过优化达到可以接受的运行效率。
启动:内置应用通过Springboard启动。而web应用只能通过输入URL或者通过Bookmark列表来启动应用。【注:现在已经可以在Springboard启动了】
UI: 可以通过HTML CSS来模仿原生应用的界面效果,唯一的限制就是Mobile Safari底部的工具条。

为iPhone开发应用的四个等级
1.兼容iPhone的网站。一个和iPhone兼容的网站,避免使用iPhone不支持的技术,包括Flash,Java以及其他插件。页面的结构最大程度使用块和列,方便用户在网站中移动和缩放。
2.为Safari优化的网站。在等级一的基础上为Safari提供进一步的优化。譬如使用增强的WebKit CSS特性
3.iPhone专属的的网站。根据iPhone的可视窗口大小对网站做裁剪,为用户提供更好的使用体验。【包括增加按钮大小等】
4.类本地应用。最后是专为iPhone设计的,模仿了本地应用程序UI设计的应用。设计的一个目的就是尽可能不让用户感觉到是在一个浏览器环境里。并且,一个成熟的iPhone应用会和iPhone的服务,包括电话,邮件,Google Maps等紧密集合。

手指不是鼠标 【推荐看apple的iPhone视频】
鼠标有左键,右键,滚轮,以及移动鼠标。相对照的是,指头可以有Tap,Flick,拖动以及捏(pinch)

Finger Gestures
Gesture Result Web site App
Tap Equivalent to a mouse click Yes Yes
Drag Moves around the viewport Yes Yes
Flick Scrolls up and down a page or list Yes Yes
Double-tap Zooms in and centers a block of content Yes No
Pinch open Zooms in on content Yes No
Pinch close Zooms out to display more of a page Yes No
Touch and hold Displays an info bubble Yes No
Two-finger scroll Scrolls up and down an iframe or element with CSS overflow:auto property Yes Yes

下面的几个鼠标动作,iPhone没有相对应的手指操作
No right – click
No text
No cut, copy, and paste
No hover
No drag-and-drop (可以模拟实现)

限制和约束

Resource Constraints
Resource Limitation
Downloaded text resource (HTML, CSS, JavaScript files) 10MB
JPEG images 128MB (all JPEG images over 2MB are subsampled-decoding the image to 16x fewer pixels)
PNG, GIF, and TIFF images 8MB (in other words, width*height*4<8MB)
Animated GIFs Less than 2MB ensures that frame rate is maintained (over 2MB, only first frame is displayed)
Non-streamed media files 10MB
PDF, Word, Excel documents 30MB and up (very slow)
JavaScript stack and object allocation 10MB
JavaScript execution limit 5 seconds for each top-level entry point (catch is called after 5 seconds in a try/catch block)
Open pages in Mobile Safari 8 pages
Technologies not Supported by iPhone and iPod touch
Area Technologies not supported
Web technologies Flash media, Java applets, SOAP, XSLT, SVG, and Plug-in installation
Mobile technologies WML
File access Local file system access
Text interaction Text selection, Cut/Copy/Paste
Embedded video In-place video (tapping an embedded element will put iPhone/iPod touch into video playback mode)
Security Diffie-Hellman protocol, DSA keys, self-signed certificates, and custom x.509 certificates
JavaScript events Several mouse-related events (see Chapter 5)
JavaScript commands showModalDialog(), print()
Bookmark icons .ico files
HTML input type=”file”, tool tips
CSS Hover styles, position:fixed

关于我

程序员. 暂居上海. 目前关注平板和电子商务. 用Google, Mac.

Email/Gtalk: qycpublic [AT] gmail.com

订阅我的博客

搜索

管理