demonstrate 的 blog

daily blog

Archive for the ‘mac related’ Category

第一个 iPad 程序

with 4 comments

总算把巨无霸 xcode 以及 ios 的 sdk 装了上去,安装程序巨傻,说要关掉 iTunes,我都关了但是还是不继续装下去,也没搞明白为啥。后来怒了,ps 看了一眼,居然有个叫 iTunesHelper 的进程,杀掉之后就开始正常的安装了下去(省略骂人字样若干)。

启动 Xcode,创建新的项目,选择 iOS 里面对应的程序,如 view 类型之后,xcode 纠缠生了一个基本的模板,可以运行,我们只需要点上面的开始按钮,xcode 就会启动编译器、连接器进行编译链接,末了还会启动模拟器。由于我们在界面上什么都没写,所以打开模拟器之后是这样的:

hello 项目运行起来之后的样子。

按一下 home 按钮,这个模拟器居然跟真的 iPad 一样会回到桌面。

由于没有进行任何设置,hello 的图标也是全白的。

可能细心的人已经看见这里 iOS 的版本号了,虽然我的 iPad 是 5.0.1 的 iOS,我却无法使用最新的 xcode 和 SDK,这是因为犯贱的 apple 认为那个只能在 Lion (Mac OS X 10.7)下运行,虽说 Xcode + iOS SDK 是免费的,但是 Lion 却不便宜。

Xcode 里面列出来了一些 source code,那些都是苹果设计 GUI 的理念的体现,我们这里只是简单的熟悉一下使用的 objective C 语言。因此从 hello world 开始好了。objective C 是 C 的扩展,扩展的启发来自 smalltalk,现在用的主要是 Apple 在 2007 年搞的 objective C 2.0。讽刺的很,apple 当初发布 iPhone 并没有给开发者 native API,而只是希望有人为 safari 开发一些基于 web 的应用。正如 chrome OS 到现在都一直没见到什么起色一样,当时的 iPhone 应用也是一潭死水,直到 apple 发布了基于 object C 的这个 SDK。为什么是 Object C?这大概是苹果的“历史包袱”,Jobs 出走阶段去了一个叫 NeXT 的公司,他们做了一个 NeXT 风格的界面,后来被苹果收购。其实这个玩意很早的时候还接触过其 GNU 版本,那就是集成在 window maker 里面的 GNUStep 界面:

GNUStep 的界面

这个 NeXT 系的都是使用 Objective C 写成的,在此之上 apple 现在使用的 Cocoa 界面也是 objective C 写的。和 C++ 的老祖 simula 不同,objective c 的祖先是 smalltalk,里面一些比较细节可以参考 wiki。objective C 是靠 message 实现成员方法调用,而且 message 是运行时自动 binding 上的,这跟 C++ 崇尚编译时 binding 的思路完全不同。

#import <Foundation/Foundation.h>

int
main (int argc, const char* argv[]) {
  NSAutoreleasePool* pool
    = [[NSAutoreleasePool alloc] init] ;

  NSLog (@"Hello World!") ;
  [pool drain] ;
  return 0 ;
}

不要惊讶于以上程序与 C 代码非常之象,因为 objective C 是 C 的 superset,完全兼容 C 的语法。同时我们也不难理解其中中括号部分,那就是 message,这里的字符串前面加 at 是为了标明这不是一个 C-style 的字符串,而是一个 NSString。编译也很简单,

$ make hello LDFLAGS+="-framework Foundation"
cc   -framework Foundation  hello.m   -o hello
$ ./hello
2011-11-21 08:17:33.331 hello[72422:903] Hello World!

这里的 framework 和动态链接库类似,只是是 objective C 写的。其实像 Qt 提供的 framework 估计也就是提供了类似的 binding?后面我们熟悉了更多关于界面设计以及 object C 的细节以后会详细的介绍更多的东西。

——————
And they said one to another, Go to, let us make brick, and burn them thoroughly. And they had brick for stone, and slime had they for mortar.

Written by zt

2011/11/21 at 9:29 AM

Posted in iOS, mac related, objective c

Tagged with

升级到 firefox 4

with 5 comments

其实是 beta。是在等不下去了,先尝尝鲜。

很多 extension 不能用了,比较可惜的是 firebug 和 tab mix plus 不能用了,希望后面 firefox 升级之后能正常工作,没有了 tab protection 感觉心里有点不爽,但是 pin as application 其实也就够了;最不爽的应该是不能点一下关掉 tab,现在先要切换到该 tab 才能关闭。然后 search 了一下 mac 下面的 menubar 隐藏问题,需要修改对应的 app/Contents/Info.plist 文件,加下面一行到对应的字母序位置:

<key>LSUIPresentationMode</key>
<integer>4</integer>

这个可以在这里找到。自动的可以参考这个,使用的是一个叫 defaults 的命令。

——————
If you do well, shall you not be accepted? and if you do not well, sin lies at the door. And to you shall be his desire, and you shall rule over him.

Written by zt

2011/02/23 at 9:55 AM

Posted in mac related

Tagged with

使用 miredo 享受 ipv6

with 3 comments

miredo 是 Windows 下 teredo 的 BSD/Linux 实现。

mac 下面只需要 macports 装上就行了,miredo 依赖于 tuntap 设备(mac 下叫 tuntaposx)。默认情况下是没有启用 tun 设备的,可以用 kextload 加载对应的 module。这个跟 Linux 的 modprobe 类似,只是 mac 下面是一个 kext 目录,里面有一个 plist 和模块。之后简单的配置一下 miredo 的 <root>/etc/miredo/miredo.conf 就能够使用 miredo 启动客户端了,很快就会出现一个 tun 的设备获得了 ipv6 的地址。需要注意的是如果配置文件有点问题,可以用 miredo -f 看看 debug info。像 mac 下面不支持设备命名,如果打开可能就不会正常工作。

可以访问 www.kame.net 看看那个海龟动不动,动表示你使用的 ipv6 访问的;不动说明是 ipv4。还有一个就是 ipv6.google.com 是 google ipv6 的地址。比较有用的就是 www.sixxs.org 这个提供的 ipv6-to-ipv4 的网关,你可以用这个访问墙外面的东西,但是需要 login 的如 facebook 和 twitter 似乎是不行的。不知道这两家有没有 ipv6 的地址。这个连接也很重要。

嗯… Linux 里面跟这个过程差不多,据说这是 vista 自带的功能。差不多常见的平台上你都可以获得需要的 ipv6 地址了。

不过好像还不能连接到原来实验室的 ssh 服务器,不知道是不是没有监听 ipv6 的端口。后面继续试试看… 有机会试试两台 miredo 的主机直接 ssh 穿越防火墙,不知道是不是会比较快?不过总是要用 teredo 服务器的带宽,不知道这个里面哪个速度快…

——————
So God created man in his own image, in the image of God created he him; male and female created he them.

Written by zt

2011/01/01 at 1:42 AM

Posted in linux related, mac related

Tagged with , , ,

Follow

Get every new post delivered to your Inbox.