GPS 之初见

购买了一个 MT3339 的片子来做 GPS logger,相关信息如下:

直接拿 FL232RL 和这个片子连接,然后通过 USB 接入 MBP 就能通过 minicom 这个程序读出数据了。在公司阳台上坐了一小会就搜索到了卫星,下面是一部分 NMEA 数据片段

$GPGGA,202439.100,4740.2168,N,12211.8122,W,1,8,1.81,49.9,M,-17.2,M,,*5E
$GPGSA,A,3,29,20,02,05,18,13,25,15,,,,,2.35,1.81,1.50*0C
$GPRMC,202439.100,A,4740.2168,N,12211.8122,W,0.01,128.32,220916,,,A*74
$GPVTG,128.32,T,,M,0.01,N,0.02,K,A*34
$GPGGA,202439.200,4740.2168,N,12211.8122,W,1,8,1.81,49.9,M,-17.2,M,,*5D
$GPGSA,A,3,29,20,02,05,18,13,25,15,,,,,2.35,1.81,1.50*0C
$GPGSV,2,1,08,29,73,122,44,20,68,157,43,05,38,056,43,18,22,205,42*76
$GPGSV,2,2,08,25,21,192,42,13,16,102,40,15,15,135,41,02,05,078,32*70
$GPRMC,202439.200,A,4740.2168,N,12211.8122,W,0.01,128.32,220916,,,A*77
$GPVTG,128.32,T,,M,0.01,N,0.02,K,A*34
$GPGGA,202439.300,4740.2168,N,12211.8122,W,1,8,1.81,49.9,M,-17.2,M,,*5C
$GPGSA,A,3,29,20,02,05,18,13,25,15,,,,,2.35,1.81,1.50*0C
$GPRMC,202439.300,A,4740.2168,N,12211.8122,W,0.01,128.32,220916,,,A*76
$GPVTG,128.32,T,,M,0.01,N,0.02,K,A*34

非常有意思,这里有这个数据格式的介绍,比如这段

$GPGGA,202439.100,4740.2168,N,12211.8122,W,1,8,1.81,49.9,M,-17.2,M,,*5E

表示的是 UTC 时间 20:24:39.100 我所处的经纬度为 N 47 度 40.2168 分,W 122 度 11.8122 分,GPS fix 数据,8 颗卫星,1.81 表示 horizontal dilution,平均海平面上高度 49.9 米,WGS84 椭球高度 -17.2 米。

有兴趣继续看看。待更新。

GPS 之初见

第一个 iPad 程序

总算把巨无霸 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.

第一个 iPad 程序

升级到 firefox 4

其实是 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.

升级到 firefox 4