2010年8月4日 星期三

Bib in WinCE

CE用*.bib來决定(reloade?) memory layout。
一般的project中會包含兩個 image : bootloader , OS,所以Project中會有 boot.bib和config.bib。
bib文件是用来指导WinCE的编译系统产生可执行二进制文件的,其中使用的地址都是虚拟地址。

必须在Config.bib中设置ROMSIZE参数。
如ROMSIZE=02000000,设置NK.NB0的大小为32M,若Image的大小超过32M,则还会产生NK.NB1,NK.NB2…


RAMIMAGE - 所有Kernel, conpoment都會被放置在這個區域。(大概就是code,const region?)
RAMIMAGE – This is the virtual address region that the kernel and any other components you select for your image will be placed in. This can be RAM or linearly addressable flash. Your config.bib file should have exactly one RAMIMAGE section. It needs to be virtually contiguous, and it needs to be large enough to hold whatever components you’ve selected.

RAM - Kernel 會利用這部份的區域作為application或kernel自己需要的RAM 空間(data,stack ?)
RAM – This is the virtual address region of RAM that the kernel can allocate to applications and RAM-based file systems. It needs to be virtually contiguous. (If you need a non-contiguous section, you can allocate another, non-virtually-contiguous section at run-time by implementing the OEMGetExtensionDRAM function, but that’s outside our scope)

RESERVED - Kernel 不會使用這部份區域。programmer可以用hard-coded對此 區域位址存取。
RESERVED – These are virtual address regions that are set aside – the kernel won’t allocate memory in these addresses and components won’t be placed in these addresses.

AUTOSIZE - 這是一個option,當設定ON時,builder會把RAMIMAGE和RAM合
併成一個region
AUTOSIZE - In the CONFIG section, we have the AUTOSIZE=ON (or OFF) variable. If this variable is on, it will treat the RAMIMAGE and RAM regions as a single region, allocating just enough space to hold all of the components to the RAMIMAGE section and making the rest of the space available as RAM. This is a pretty convenient and easy way to make sure you’re getting maximal use out of your RAM. One thing autosize won’t do is interfere with reserved or unallocated regions.






OEMAddressTable

Before we look at the .bib files themselves, it’s important to understand the OEMAddressTable. This table defines the mappings between physical and virtual addresses. For MIPS and SH processors, this table is hard coded into the processor. For x86 and ARM, the mapping is defined in a variable called OEMAddressTable. Since .bib files operate largely on virtual addresses, we need to remember to reference the OEMAddressTable to address any confusion about what is happening at a particular physical address.



2010年6月5日 星期六

tem

http://bbs.weiphone.com/read-htm-tid-775783.html

2010年5月27日 星期四

[轉]nk.bin和nk.nb0文件格式分析

作者:wogoyixikexie@gliet

借用别人的解释:
这里提到的bin是一种二进制镜像格式,以片断(section)为单位组织数据,每个片断都包括一个头,头里指定了起始地址,长度,校验值。 Platform Builder调用工具将WINCE内核所有文件以bin格式合并成一个文件,默认文件名为nk.bin。BootLoader又以同样的格式将 nk.bin分解成多个文件放到RAM中。可以在命令行中键入“viewbin nk.bin”来查看bin文件中具体包括了哪些内容。键入Cvrtbin命令转换.bin格式文件为.sre格式或者.abx格式。
nb0格式是原始的二进制镜像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式。要生成nbx格式的文件,需要在相关.bib文 件中确定如下值:ROMSTART、ROMWIDTH、ROMSIZE

那么nk.bin是如何生成的?

Romimage.exe is a locator application that creates Windows CE binary image (.bin) files, usually limited to a single file called Nk.bin. This means that Romimage

  • Reads Ce.bib to determine which %_FLATRELEASEDIR% binaries and files to include in the run-time image.
  • Assigns physical memory addresses to these binaries and files. (这部是如何实现的?)
  • Creates the run-time image Nk.bin.

For more information about Ce.bib, see Make Binary Image Tool.

最近想搞multi bin后来发现我的bootloader是优龙的,不支持binfs分区格式化, 我想把eboot下的代码移植过来,应该可以的。

但是我对则个binfs有点疑惑。按照道理说,binfs是针对nk.bin的,但是我们下载的时候却是nk.nb0,有些人下载nk.bin,但是下载 完还是要解压成nk.nb0的。
我想问,binfs是怎么和nk.nb0联系起来的?
==============================来看看bin文件的格式=========================

一个bin 文件在存储上是按下面的结构存储的

组成:标记(7)+Image开始地址(1)+Image长度(1)
记录0地址+记录0长+记录0校验和+记录0内容(文件内容)
记录1地址+记录1长+记录1校验和+记录1内容(文件内容)
......
最后一条记录是表示结束,Start = 0x00000000, Length = 0x8C072C3C是StartUp地址, Chksum = 0x00000000

bin 文件的头部(不包括记录)可以用下面的结构表示
struct BinFile{
BYTE signature[7]; // = { ''B'', ''0'', ''0'', ''0'', ''F'', ''F'', ''\a'' }
DWORD ImageStart
DWORD ImageLength
};


一般xipkernel.bin,nk.bin 都符合正常bin文件格式,包含记录开始0,1,2 记录为特殊记录,2做为cece的标记,其后4byte表示 TOC地址(指向ROMHDR结构的数据),3记录开始都是文件记录,
———但是,我们实际用到却是nk.nb0文件,这个文件才是和文件系统帮顶起来的。我等下要找出他的格式来。先去吃午饭。

再借别人的解释

首先,NK.BIN中的内容是被压缩过的,NK.NB0中的内容是没有压缩的。 两者大小的区别是因为在生成过程中BIN会将你设定的后面的NULL自动去掉,而NB0就不会。

现在来用微软自带工具来看看这两个文件的格式到底有什么不同。

这幅图结合上面的解释可以知道,这个NK.bin文件的标志是BOOOFF,nk.nb0是没有这个标志的,要知道具体的信息,还是看MSDN好。

At the end of the boot loader development process described in the topic How to Develop a Boot Loader, you will have two different binary images for the boot loader: a .bin file and an .nb0 file. The Microsoft Windows® CE binary image data format (.bin) file is the most common format for Windows CE binary images. It is a binary file that consists of a number of individual records with associated per-record bookkeeping data. The format is convenient for minimizing the amount of data to be downloaded to the target device by removing the need to pad between records. For more information about the .bin file format, see Windows CE Binary Image Data Format (.bin).

The .nb0 file format is a raw binary image of the boot loader. The image is as it appears in the memory on the target device and does not contain the header information that the .bin file includes. The .nb0 file is typically larger than the .bin file. The .nb0 file is useful for placing the initial boot loader image on the target device. This is usually done with a built-in monitor program provided by the board manufacturer. You can also place the initial boot loader image on the target device through a JTAG connection using a JTAG probe. Once the .nb0 image is stored on the device, it should be able to download and update itself using the .bin file format from then on.

我使用的是ADS开发的bootloader,这个bin文件不存在什么段的问题吧,应该和微软不一样的,全局变量的问题在哪里呢?但是现在造成偶 尔不能启动是什么原因呢?最后发现又回到了原点。看来ADS下的bin文件格式也要搞清楚才行哦。

2010年5月24日 星期一

MAC 好用程式

BBEdit
好用的文字編輯軟體,還可以比code

FileMerge
高級Mac版的beyond compare

Adium
代替msn的軟體

MP3Tag
解決iTunes中文字亂碼的問題
http://www.mobile01.com/topicdetail.php?f=482&t=447185&p=1
http://www.anytag.de/forums/index.php?showtopic=57


NTFS3G
解決 mac 下讀取NTFS 檔案
http://www.macuknow.com/node/107

2010年5月21日 星期五

[轉] SLC and MLC

http://stenlyho.blogspot.com/2008/08/nand-flash-slcmlc.html

NAND Flash SLC、MLC技術解析

許多人對Flash Memory的SLC和MLC區分不清。就拿目前熱銷的MP3隨身聽來説,是買SLC還是MLC Flash Memory Chip的呢?在這裏先告訴大家,如果你對容量要求不高,但是對機器質量、數據的安全性、機器壽命等方面要求較高,那麽SLC Flash Memory Chip的首選。但是大容量的SLC晶片成本要比MLC晶片高很多,所以目前2G以上的大容量,低價格的MP3多是採用MLC晶片。大容量、低價格的 MLC晶片自然是受大家的青睞,但是其固有的缺點,也不得不讓我們考慮一番。

什麽是SLC?
SLC英文全稱(Single Level Cell——SLC)即單層式儲存 。主要由三星(samsung)、海力士(Hynix)、美光(Micron)、東芝(toshiba)等使用。

SLC技術特點是在浮 置閘極與源極之中的氧化薄膜更薄,在寫入數據時通過對浮置閘極的電荷加電壓,然後透過源極,即可將所儲存的電荷消除,通過這様的方式,便可儲存1個信息單 元,這種技術能提供快速的程序編程與讀取,不過此技術受限于Silicon efficiency的問題,必須要由較先進的流程强化技術(Process enhancements),才能向上提升SLC制程技術。

什麽是MLC?
MLC英文全稱(Multi Level Cell——MLC)即多層式儲存。主要由東芝、Renesas、三星使用。
英特爾(Intel)在1997年9月最先開發成功MLC,其作用 是將兩個單位的信息存入一個Floating Gate(Flash Memory存儲單元中存放電荷的部分),然後利用不同電位(Level)的電荷,通過内存儲存的電壓控制精准讀寫。MLC通過使用大量的電壓等級,每一 個單元儲存兩位數據,數據密度比較大。SLC架構是0和1兩個值,而MLC架構可以一次儲存4個以上的值,因此,MLC架構可以有比較好的儲存密度。

SLC 比較MLC的優勢:
目前市場主要以SLC和MLC儲存為主,我們多了解下SLC和MLC儲存。SLC架構是0和1兩個值,而MLC架構可以一次 儲存4個以上的值,因此MLC架構的儲存密度較高,並且可以利用老舊的生産程備來提高産品的容量,無須額外投資生産設備,擁有成本與良率的優勢。
與 SLC相比較,MLC生産成本較低,容量大。如果經過改進,MLC的讀寫性能應該還可以進一步提升。

SLC比較MLC的缺點:
MLC 架構有許多缺點,首先是使用夀命較短,SLC架構可以存取10萬次,而MLC架構只能承受约1萬次的存取。
其次就是存取速度慢,在目前技術條件 下,MLC晶片理論速度只能達到2MB左右。SLC架構比MLC架構要快速三倍以上。
再者,MLC能耗比SLC高,在相同使用條件下比SLC要 多15%左右的電流消耗。
雖然與SLC相比,MLC缺點很多,但在單顆晶片容量方面,目前MLC還是占了絶對的優勢。由于MLC架構和成本都具 有絶對優勢,能滿足未來2GB、4GB、8GB甚至更大容量的市場需求。 

SLC與MLC的識別:
一、看傳輸速度
比 如有兩款採用Rockchip晶片的産品,測試時寫入速度有2、3倍優勢的應該是SLC,而速度上稍慢的則是MLC。即使同様採用了USB2.0高速接口 的MP3,也不能改變MLC寫入慢的缺點。
二、看FLASH型號
一般來説,以K9G或K9L為開頭型號的三星Flash Memory則是MLC,以HYUU或HYUV為開頭型號的現代Flash Memory應是MLC。具體晶片編號以三星和現代為例:三星MLC晶片編號為:K9G****** K9L*****。現代MLC晶片編號為:HYUU**** HYUV***

簡單總結:
如果説MLC是一種新興的 Flash Memory技術,那麽它的“新”就表現在:成本低!
雖然MLC的各項指標都落後於SLC Flash Memory。但是MLC在架構上取勝SLC,MLC肯定是今後的發展方向,而對于MLC傳輸速度和讀寫次數的問題已經有了相當多的解决方法,例如採用三 星主控晶片,wear leveling技術,4bit ECC校驗技術,都可以在採用MLC晶片的時候同様獲得很好的使用效果,其性能和使用SLC晶片的没有什麽差別,而會節省相當多的成本.


=================================


NOR和NAND是現在市場上兩種主要的非易失閃存技術。Intel於1988年首先開發出NOR flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結構,強調降低每比特的成本,更高的性能,並且象磁盤一樣可以通過接口輕鬆升級。但是經過了十多年之後,仍然有相當多的硬件工程師分不清NOR 和NAND閃存。

  相「flash存儲器」經常可以與相「NOR存儲器」互換使用。許多業內人士也搞不清楚NAND閃存技術相對於 NOR技術的優越之處,因為大多數情況下閃存只是用來存儲少量的代碼,這時NOR閃存更適合一些。而NAND則是高數據存儲密度的理想解決方案。

   NOR的特點是芯片內執行(XIP, eXecute In Place),這樣應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統RAM中。

NOR的傳輸效率很高,在 1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。

  NAND結構能提供極高的單元密度,可以達 到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於flash的管理和需要特殊的系統接口。



性 能比較

   flash閃存是非易失存儲器,可以對稱為塊的存儲器單元塊進行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內進行,所以大多數 情況下,在進行寫入操作之前必須先執行擦除。NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫為0。

   由於擦除NOR器件時是以64~128KB的塊進行的,執行一個寫入/擦除操作的時間為5s,與此相反,擦除NAND器件是以8~32KB的塊進 行的,執行相同的操作最多只需要4ms。

  執行擦除時塊尺寸的不同進一步拉大了NOR和NADN之間的性能差距,統計表明,對 於給定的一套寫入操作(尤其是更新小文件時更多的擦除操作必須在基於NOR的單元中進行。這樣,當選擇存儲解決方案時,設計師必須權衡以下的各項因素。

   ● NOR的讀速度比NAND稍快一些。

  ● NAND的寫入速度比NOR快很多。

  ● NAND的4ms擦除速度遠比NOR的5s快。

  ● 大多數寫入操作需要先進行擦除操作。

  ● NAND的擦除單元更小,相應的擦除電路更少。



接口差別

  NOR flash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內部的每一個字節。

  NAND器件使用複雜的I/O口來串 行地存取數據,各個產品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和數據信息。

  NAND讀和寫操作採用512字節的塊, 這一點有點像硬盤管理此類操作,很自然地,基於NAND的存儲器就可以取代硬盤或其他塊設備。



容量和成 本

  NAND flash的單元尺寸幾乎是NOR器件的一半,由於生產過程更為簡單,NAND結構可以在給定的模具尺寸內提供更高的容量,也就相應地降低了價格。

   NOR flash佔據了容量為1~16MB閃存市場的大部分,而NAND flash只是用在8~128MB的產品當中,這也說明NOR主要應用在代碼存儲介質中,NAND適合於數據存儲,NAND在CompactFlash、 Secure Digital、PC Cards和MMC存儲卡市場上所佔份額最大。



可靠性和耐用性


   採用flahs介質時一個需要重點考慮的問題是可靠性。對於需要擴展MTBF的系統來說,Flash是非常合適的存儲方案。可以從壽命(耐用性)、位交 換和壞塊處理三個方面來比較NOR和NAND的可靠性。

壽命(耐用性)

  在 NAND閃存中每個塊的最大擦寫次數是一百萬次,而NOR的擦寫次數是十萬次。NAND存儲器除了具有10比1的塊擦除週期優勢,典型的NAND塊尺寸要 比NOR器件小8倍,每個NAND存儲器塊在給定的時間內的刪除次數要少一些。

位交換

   所有flash器件都受位交換現象的困擾。在某些情況下(很少見,NAND發生的次數要比NOR多),一個比特位會發生反轉或被報告反轉 了。

  一位的變化可能不很明顯,但是如果發生在一個關鍵文件上,這個小小的故障可能導致系統停機。如果只是報告有問題,多讀幾次就可能 解決了。

  當然,如果這個位真的改變了,就必須採用錯誤探測/錯誤更正(EDC/ECC)算法。位反轉的問題更多見於NAND閃 存,NAND的供應商建議使用NAND閃存的時候,同時使用EDC/ECC算法。

  這個問題對於用NAND存儲多媒體信息時倒 不是致命的。當然,如果用本地存儲設備來存儲操作系統、配置文件或其他敏感信息時,必須使用EDC/ECC系統以確保可靠性。

壞 塊處理

  NAND器件中的壞塊是隨機分佈的。以前也曾有過消除壞塊的努力,但發現成品率太低,代價太高,根本不划 算。

  NAND器件需要對介質進行初始化掃瞄以發現壞塊,並將壞塊標記為不可用。在已製成的器件中,如果通過可靠的方法不能進行這項處 理,將導致高故障率。



易於使用


  可以非常直接地使用基於NOR 的閃存,可以像其他存儲器那樣連接,並可以在上面直接運行代碼。

  由於需要I/O接口,NAND要複雜得多。各種NAND器件的存取方 法因廠家而異。

  在使用NAND器件時,必須先寫入驅動程序,才能繼續執行其他操作。向NAND器件寫入信息需要相當的技巧,因為設計 師絕不能向壞塊寫入,這就意味著在NAND器件上自始至終都必須進行虛擬映射。



軟件支持

   當討論軟件支持的時候,應該區別基本的讀/寫/擦操作和高一級的用於磁盤仿真和閃存管理算法的軟件,包括性能優化。

  在NOR器件上 運行代碼不需要任何的軟件支持,在NAND器件上進行同樣操作時,通常需要驅動程序,也就是內存技術驅動程序(MTD),NAND和NOR器件在進行寫入 和擦除操作時都需要MTD。

   使用NOR器件時所需要的MTD要相對少一些,許多廠商都提供用於NOR器件的更高級軟件,這其中包括M-System的TrueFFS驅動,該驅動被 Wind River System、Microsoft、QNX Software System、Symbian和Intel等廠商所採用。

   驅動還用於對DiskOnChip產品進行仿真和NAND閃存的管理,包括糾錯、壞塊處理和損耗平衡。

[轉]iPhone OpenFlow

http://fajkowski.com/blog/2009/08/02/openflow-a-coverflow-api-replacement-for-the-iphone/

2010年5月19日 星期三

NSoperation

http://icodeblog.com/2010/03/04/iphone-coding-turbo-charging-your-apps-with-nsoperation/

[轉]iPhone be a wifi router

from iPhone4.TW
因為擷取網址的時候出現一堆亂碼,只好暫時不附上網址了 @@

iPhone 3G 網路分享測試 (PdaNet vs NetShare)

PdaNet 與 NetShare 這兩套軟體,都是可以把 iPhone 網路分享給電腦的好工具
可樂羊今天心血來潮想試試看,到底哪一套比較猛?

首先說到 PdaNet,可以透過 Cydia 下載、免費。
使用方式就是由點對點無線網路,讓電腦連接 iPhone,然後打開軟體後,開啟網路分享就可以開始使用了,非常容易!

再來是 NetShare,是透過 App Store 下載購買,但已經買不到(別問我從哪弄的)。
使用方式幾乎與 PdaNet 一樣,但多了一個步驟,必須手動設定 SOCKS 代理伺服器、輸入 iPhone 的 IP 位址,但其實也不會太難就可以開始了。

測試硬體:MacBook Pro + iPhone 3G
網路來源:遠傳 3G

[01 Google 首頁網頁開啟測試]
PdaNet: 8-16 KB/S,資料連續性佳。
NetShare: 8-24 KB/S,資料連續性尚可。

[02 Apple 首頁網頁開啟測試]
PdaNet: 4-12 KB/S,資料連續性佳。
NetShare: 5-18 KB/S,資料連續性尚可。

[03 iTunes 安裝檔案單點下載測試]
PdaNet: 38-46 KB/S,資料連續性佳。
NetShare: 42-64 KB/S,資料連續性佳。

[04 iTunes 安裝檔案 15 點分割下載測試]
PdaNet: 63-131 KB/S,資料連續性佳。
NetShare: 96-148 KB/S,資料連續性尚可。

結論是 NetShare 勝出,不過 PdaNet 跟它的差距也不算大。
至於 Ping 值懶得測試了,光看選到網頁連結後的反應速度,就知道要拿來玩網路遊戲應該很不實際,尤其若是玩像 CS 這類的遊戲絕對是出去當肉靶的。
而且重點是,同時開啟 Wi-Fi 與 3G,iPhone 3G 耗電的速度比充電的速度還快!iPhone 是插著電源供應的,電池卻一直往下掉...

JSON & iPhone

http://changyy.pixnet.net/blog/post/26106020

[轉]10 Tips to Succeed on iPhone

http://www.industrygamers.com/galleries/industry-insights-10-tips-to-succeed-on-iphone/1/

2010年5月17日 星期一

Dump classes out of iPhone SDK

http://www.codethecode.com/projects/class-dump/

[轉]iPhone 第三方 game engine

from http://www.inside.com.tw


隨著iTunes Store的經濟圈越來越繁盛,越來越多的遊戲開發商從既有的平台轉入iPhone的開發,而這同時間很多遊戲引擎也隨之推出了iPhone版本,本篇文 章將針對一些常見的iPhone遊戲引擎做一個初步的介紹。

所謂的遊戲引擎,其實是扮演一個中介的角色,將一些比較複雜的開發細節(像是3D圖形的顯示)包裝成容易使用的介面。而也是因為透過遊戲引擎的幫 助,很多底層的細節也都可以被抽象化,所以除了方便使用之外,也增加了可移植性。

SIO2

SIO2為iPhone遊戲引擎中較為著名的,使用Bullet物 理引擎搭配Blender的3D物件、場景。超過一百套已上架的App使 用這套引擎。引擎套件有免費版和付費版,而在官網上也有提供部份App Store上軟體的原始碼付費下載

Oolong Engine

開放原始碼的遊戲引擎,也是使用Bullet物理引 擎,但文件較不完整。用此引擎開發出來的遊戲包含:Kids VS. Zombies

Unity

跨平台的遊戲引擎,但也提供了iPhone的整合,價格不低但是功能也相當完整。這幾個月在台灣也有一些相關的課程。

ShiVa 3D

也是跨平台的遊戲引擎,只有PC版的編輯器,功能強大但價格也較為昂貴。

cocos2d

開放原始碼的2d遊戲引擎,如果沒有要設計複雜的遊戲,算是一個很不錯的選擇。比較特別的是,他有提供server可以處理高分排行榜的功能。

Ogre

PC上著名的繪圖引擎,目前也正在著手進行iPhone的移植工作,估計在下個版本將會把iPhone納入官方支援平台。

除了以上這些已經釋出的遊戲引擎之外,許多現有的遊戲引擎也正在進行移植的工作。最著名大概就是Unreal遊戲引擎了,前幾天他們有釋出了移 植成功的Demo影片

對於未來的iPhone App,個人估計將會變得兩極化。越來越多重量集開發商,像是Electronic ArtsSquare Enix將會加入戰局,透過 這些跨平台的重量級遊戲引擎開發出聲光效果十足的遊戲,而一般的獨立開發者也會透過有趣的小點子崛起,就讓我們拭目以待。

[轉]Bonjour !

from wiki百科 http://zh.wikipedia.org/zh-tw/Bonjour

Bonjour,原名Rendezvous,是蘋果電腦公司在其開發的作業系統Mac OS X10.2版本之後引入的伺服器搜索協議所使用的一個商標名。 適用於LAN, Bonjour使用多點傳送域名系統服務記錄來定位各種設備,比如印表機或者其他電腦,以及另外設備上的服務。

概要

Bonjour是在LAN(區 域網)中尋找服務的一個主要方法。這項技術廣泛用於Mac OS X,允許用戶不用在任何設置下建立一個網路連接。目前用於在Mac OS X和其他作業系統上尋找印表機和檔案分享伺服器。還可以用於在iTunes中尋找 共享音樂,在iPhoto尋 找共享照片,在iChatProteusAdiumFireSkypeGizmo Project中尋找本地網路中的其他用 戶,在TiVo桌面上 尋找視頻錄製器,在SubEthaEditE中尋找文件協作,在Contactizer中尋找、共享聯繫人、任務和活動消 息。另外還可以用於在Safari中 尋找當地網路伺服器和當地設備的設置頁面,用Asterisk來推廣電話服務,設置參數VoIP電話 和撥號。 Bonjour Browser 可以用來瀏覽所有設備和這些程序的服務。

沒有特別的DNS設置,Bonjour只能在一個單一子網上 運行。

有人對Bonjour有一些誤解,認為它會將個人電腦的一些服務(如檔案分享)等變成公開的網際網路服務,引發安全危機問題。而實際上Bonjour並不提供其他額外的接入服務,甚至在用一個區域網(LAN) 上;它很少宣稱("推廣")他們的存在。比如,一個用戶可以瀏覽附近電腦上共享文件的列表——這些電腦上的Bonjour 已經告訴用戶這個服務可以使用,但是他必須進一步提供密碼才能接入那些機器上的保密文件。而且,Bonjour 只在一個封閉的範圍內工作,默認設置中,它的信息只能傳給同樣子網的其他用戶。

命名

Bonjour在2002年8月作為Mac OS X v10.2一部分發布的時候,原來的名字是 "Rendezvous",在法語中 意思是「約會」。在2003年8 月27日Tibco Software Inc 聲稱這個名字已經是他們的註冊商標[1]1994 年起 Tibco公司已經有一個商用軟體集成產品名叫TIBCO Rendezvous面市,該公司 稱試圖和蘋果公司商討此事但無果而終。2004年7月,蘋果公司和 Tibco發布和解方案,[2] 此前廣有傳聞稱新名字可能是 OpenTalk,但是最後沒被採用(可能是由於類似 LocalTalkPowerTalk)。 在2005 年 4月12日,蘋果公司宣布 Rendezvous 改名為 Bonjour,[3] ,仍是一個法語詞彙。

iPhone App

2009 fun iphone 最推的十大iphone軟體 實用程式篇
http://funiphone.pixnet.net/blog/post/30120833

2009 fun iphone 最推的十大iphone軟體game篇
http://funiphone.pixnet.net/blog/post/30119995

AR搖控直昇機
http://funiphone.pixnet.net/blog/post/30462897

AR : gunman, 真實版CS Game
http://funiphone.pixnet.net/blog/post/30215891

Taiwan AR : ARGo
http://funiphone.pixnet.net/blog/post/30174075

性愛羅盤
http://dev.iphonetw.net/redirect.php?tid=2246&goto=lastpost#lastpost

BBS : Nally Touch
http://www.goston.net/2009/04/26/2223/

2010年5月16日 星期日

[轉] 簡單的數字辨識

http://ace136.auto.fcu.edu.tw/scteach/scteach88/text/3-1.htm

基本概念就是類似七節顯示器的概念,原理簡啦,正確性有待驗證吧

[轉]如何使用 GoodReader/Air Sharing/FileMagnet USB 傳檔

from http://iphone4.tw/forums/showthread.php?t=86652

如何使用 GoodReader/Air Sharing/FileMagnet USB 傳檔

Apple 並不準使用者在 GoodReader/Air Sharing/FileMagnet 之類的 app 中使用 USB 來傳輸檔案,只能使用 Wifi 傳檔。即使 GoodReader 有秘計可以開啟相關功能,但是一昇級 iPhone OS 4.0 beta 2 以及 GoodReader 2.7.3 之後,這個秘計好像也沒用了。所以,只好,山不轉,路轉。

方法如下(無法附圖,因為 4.0 beta 2 的螢幕抓取功能有問題):

1. 先關閉 Wifi
設定->Wi-Fi->關閉

2. 開啟網路共享
設定->網路->Internet 共享->開啟->僅用 USB

3. iPhone 插上 PC/Mac 的 USB 連接

4. 開啟 GoodReader/Air Shareing 的 Wifi sharing 功能(FileMagnet 則開啟 PC/Mac 端的 App)。
5. 開啟 PC/Mac 上的瀏覽器,在網址列打上,http://172.10.20.1:8080/
(port 視不同 app,略有不同,ip 要是找不到,可以在 cmd 下打 ipconfig 找到 PC 端的 ip,若 PC 端是 x.x.x.2,iPhone 則是 x.x.x1)

6. 開啟傳輸檔案

[轉]防止iPhone App 糟盜版

http://auauau.javaeye.com/blog/658973

原文: http://b.imi.im/?p=356

先澄清一下, 我也是盗版用户(先自己抽两嘴巴, 但是我已经花了$200买app, 买觉得值得的程序, 而不是apple推崇的冲动式购买, 装盗版是先预览一下这个程序是不是值得买). 在中国做软件, 想不被盗版, 不太现实.
不想自己辛辛苦苦写出来的程序被盗版? 接着看.

首先简单介绍一下原理:

现在大多数的破解苹果验证安装app的办法都会动一个文件, 就是在.app文件夹下的”Info.plist”, 也就是那个程序信息文件.

代码很简单, 不再详细解释什么意思了

1. 检查Info.plist 是否存在 SignerIdentity这个键名(Key).
未破解的程序是不会有这个键名的, 苹果没给你加, 你自己没有加, 如果有, 那是哪儿来的呢?? 嘻嘻….

Java 代码
  1. if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @”SignerIdentity”] != nil) {
  2. // 这就是被破解过的app
  3. }


2. 检查3个文件是否存在

Java 代码
  1. NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
  2. BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/_CodeSignature”, bundlePath)];
  3. if (!fileExists) {
  4. // 这就是被破解过的app
  5. }
  6. BOOL fileExists2 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/CodeResources”, bundlePath)];
  7. if (!fileExists2) {
  8. /// 这就是被破解过的app
  9. }
  10. BOOL fileExists3 = [[NSFileManager defaultManager] fileExistsAtPath:(@”%@/ResourceRules.plist”, bundlePath)];
  11. if (!fileExists3) {
  12. // 这就是被破解过的app
  13. }

3. 对比文件修改时间是否一致, 看看你的程序是不是被二进制编辑器修改过了

Java 代码
  1. NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
  2. NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath];
  3. NSString* path2 = [NSString stringWithFormat:@"%@/程序名字", bundlePath];
  4. NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileModificationDate];
  5. NSDate* infoModifiedDate2 = [[[NSFileManager defaultManager] fileAttributesAtPath:path2 traverseLink:YES] fileModificationDate];
  6. NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@”PkgInfo”] traverseLink:YES] fileModificationDate];
  7. if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {
  8. //Pirated
  9. }
  10. if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {
  11. //Pirated
  12. }

Mac timezone syncs with Bootcamp's windows

先说两个概念吧:
UTC即Universal Time Coordinated,协调世界时
GMT即Greenwich Mean Time,格林尼治平时
在这里,你可以把UTC认为是GMT+0。

Windows(XP和 VISTA)和(Linux/Unix/Mac)缺省看待系统硬件时间的方式是不一样的:
* Windows把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟BIOS中显示的时间是一样的。
* Linux/Unix/Mac把硬件时间当作UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是GMT+8,则系统中显示时间是硬 件时间+8。

这样,当PC中同时有多系统共存时,就出现了问题。假如你的Ubuntu和WindowsXP中设置的时区都为北京时间 东八区,而你在Ubuntu中把当前系统时间更改为9:00AM。则此时硬件中存储的实际是UTC时间1:00AM。这时你重启进入Windows后,你 会发现windows系统中显示的时间是1:AM,比Ubuntu中慢了八个小时。同理,你在Windows中更改或用网络同步了系统时间后,再到 Ubuntu中去看,系统就会快了8小时。在实行夏令时的地区,情况可能会更复杂些。

原因知道了,那怎么来解决这种冲突呢。一种就是 让Windows把硬件时间当作UTC,与Linux/Unix/Mac保持一致。另一种就是让Linux/Unix/Mac把系统时间当作本地时间,与 Windows保持一致。

1. 让Windows把硬件时间当作UTC
开始 ->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有权限访问注册表),在命令行中输入下面命令并回车
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

2. 如何让Linux/Unix把硬件时间当作本地时间(以Ubuntu为例,其它Unix类系统与之类似)
修改 /etc/default/rcS,
将UTC=yes
改为UTC=no

3. 让Mac把硬件时间当作本地时间
据说是有个时间补丁,自己到网上找找看吧。

引用自

http://conner-wang.spaces.live.com/Blog/cns!568D1F7F9D97C059!658.entry?wa=wsignin1.0&sa=946611942

2010年5月14日 星期五

iPad 相關

有人說:
当我用installous安装破解ipa软件,全部白图标; 用install0us 安装,图标全部正常显示。

http://www.wretch.cc/blog/MCUDESIGNER/22732986&page=2
看起來比較正常的教學

http://bbs.weiphone.com/
一個找軟件的好網站

http://iphone.tgbus.com/

http://www.dooland.com/ishare/
外文pdf雜誌

http://www.coay.com/
免費 epub下載,但是內容常常是不完整的

http://apps4u.webs.com/apps/blog/
free apps

http://www.cnepub.com/discuz/?fromuid=31954
epub 掌上書苑

台灣電子書: www.book11.com.tw

comic reader mobi
2.2需要先安装软件,然后打开软件再关闭,你的itunes里的 comic添加框就多出一个Shared文件夹,漫画就必须传到这个文件夹才能正常使用
shared文件夹位置:/var/mobile/Applications/XXXX/Documents /Shared/
XXXX是指一些数字和字母组成 的文件名,找到其中有comic reader mobi.ipa的

上传漫画的方法最好是在cydia里头安装afc2add并配合ifunbox使用。将shared设定为喜好文件夹,直接 usb上传,非常方便。

ifunbox绿色版:
http://u.115.com/file/f29b1dd505

2010年5月13日 星期四

iPhone UIKit Structure


Basara's gossip

這不知道是真的假的?雖然我對阿六說的話通常會有所保留,不過這還是提醒我們

凡事不要太相信陌生人,畢竟曾經一度以為可以合作的說 @@

這裡以下節錄自 iDevTW

[其 它] 針對貴論壇 “Basara” 成員的通告

我代表中國內地BALE移動遊戲公司,就針對貴論壇成員 Basara 在最近一系列違反我公司形象,版權以及盜用帳户等事情來做以聲明。

首先,Basara 的真名字叫“林彦廷,Jason Lin” 的確有在我們公司無償工作過短暫的時間,我們公司並没有像他所說的,從一開始就在他的帶領下從零開始,與其相反的是,我們公司已經專注於手機移動軟件很多 年,我們在中國內地的很多移動遊戲平台,論壇上面已經有很久的合作時間,當我們決定進軍IPHONE平台的時候,因為公司另外一個合夥人恰好和Basara(在這裏 我們針對林彦廷,Jason Lin稱為Basara為方便論壇其他朋友識别)是朋友關系,他當時非常願意,也經過我們的同意,無償的來公司,作為他自己本身參考,自學 相關遊戲團隊管理的經驗。(我們有合法合同為證) 他不得參入任何與我們公司遊戲相關的
開發,管理,也不可轉讓,泄露公司任何遊戲機密方面的信 息。

其次,Basara本 人對
iPhone遊戲的熱衷我給予肯定,但是由於自己本身條 件的限制(因為Basara本 身没有任何Coding能力和美工能力)他在公司的時間當時已經基本屬於無業人士。 他不但没有從公司的日常經營中學到對自己有利的知識而且還在公司工作時間擅自要求公事團隊成員做一些和遊戲無關緊要的事情。 嚴重的推遲和耽誤了公司正常的經營效率。 所以,公司在經過決定後,一致同意在Basara在我公司實習,考察的3個月後決定讓其離開,為了保障 公司正常的運轉。 但是由於Basara本人於公司的經理之一是好朋友,我們當時没有采取法律和警方强制要求他離開,而他本人也一直不聽勸告一直留在公司裏 面,處於一種没事做,每天混吃公司午餐的狀態。

在2010年的1月,Basara本 人因為經常性的晚上才來公司,吃晚飯然後就走掉,而且經常性的謊稱自己是公司經理而强制邀約公司美術團隊和財經部門的女成員被通告後,强行從我公司撤 除。(我們有警方和法律相關的通告合同以及合法的驅逐令)而在他被我公司驅除的當天,Basara本人被公司保安發現有試圖偷竊公司財產
Macbook Pro筆記本一事。(有監控錄像,保安報告為證)

針對Basara本 人在貴論壇散播謠言和在自己Facebook上面滥用公司以前照片等事,我們在此提出聲明。 1,Basara持有的照片,屬於自己滥用,謊稱職權,强行要求公司旗 下一個團隊與他合影造成。 2作為不屬於公司一員,擅自把公司產品和成果作為推銷自己的手段,我們表示非常憤怒。

在2010年5月12日當天,公司接到美國Apple Secure部門電話,公司的itunes connect的ID和密碼由於安全原因被暫停,原因是12日淩晨,有人多次試圖進入公司itunes頁面失敗。 我們經過協商,retrack了一下當時企圖進入公司info頁面的IP,發現竟然是從台灣。

其實Basara本 人利用,抄襲,偷竊其他人成功的範例來吹捧自己,已經不是最近才開始,而且,很多公司以前也做過和我們相關的通告。 如果不是Basara本人强行 試圖進入我們公司itunes頁面,嚴重影響公司正常經營,我們也不會以公司的名義來打擾貴論壇。

作為一個iphone遊戲愛好者之一的我們,我希望不要看到更多人被Basara這種人所欺騙,第一,他是一個很會講大道理的人,而由 於自己能力有限,加上自己本身的懶惰,我們强烈建議不要與他進行任何團隊性質,特别是有錢財上面有關系的合作。 第二,他對itunes的領悟多半來自網上和其他抄襲信息,對於真實itunes的把握和了解其實根本屬於業餘。 第三,Basara本人喜歡 拿不屬於他的作品來作為他自己的簡曆,來掩蓋他自身能力的差距。 由於他無法再團隊裏提供任何程序,美工上面的幫助,所以,他更喜歡讓大家覺得他是一個Team Leader,但是,他只是在借用大家的努力來炫耀自己而已。

我們希望,台灣的iPhone遊戲愛好者可以仔細的,小心,認真的挑選自己的團隊成員,因為iphone 遊戲現在已經變的日益复雜,遊戲的質量,性能已經和幾年前完全不一樣。 我們公司現在正在制作的產品,已經從以前2個星期可以完成,到現在2個團隊需要2個月才可以完工的狀態。 不過我們依然覺得,只要肯吃苦,方向把握正確,總是可以成功的。

最後,我們很希望可以和貴論壇進行更多的交流,我們也可以學到很多台灣本地開發者心中的想法和意見,如果可以,我們願意把公司以前和未來的遊戲,知識,娱 樂
app的代碼提供給貴論壇,作為一起進步的動力。


PS:我們公司現在屬於升級階段,包括辦公室的擴大和公司網頁的升級,當我們完成後,我們會在我們公司的主頁上對這件事情進行更多的報道為了預防更多遊戲 愛好者上當受騙。


Brandon Liu
Public Relation Manager
Dalian Bale Tech

RX7(FD3S) in TW !

http://tw.myblog.yahoo.com/mazda-fd3s/

一個買了RX7 回來徹頭徹尾整理過的傢伙
總共應該花了一百超過吧
他的部落格應該可以讓大家了解
想要當高橋啟介要付出什麼樣的代價
重點是:他生日好像跟我差不多說 @@

iPhone SDK: Testing Network Reachability

http://www.raddonline.com/blogs/geek-journal/iphone-sdk-testing-network-reachability/


Check Network Resources Before Use

reachability-alert Using Facebook-connect for iPhone SDK to post stories to Facebook is a great feature to add to your iPhone application. But what happens if the user has no access to the network? If you don’t check the network, the answer is nothing. This leads to user confusion, and it will prevent your app from being approved for the App Store.

So, how do you check? Apple provided a sample application called Reachability which provides the answer. I’ll demonstrate here. In several blog posts people felt that the Reachability sample was overkill for their needs. If you agree, here’s a link to a recipe from The iPhone Developer’s Cookbook that provides an alternate solution. Even if you don’t plan on using it, I recommend reading through the code in the Reachability example.

Project Setup

In an earlier post I used the Facebook-Connect for iPhone SDK to post stories to Facebook. I’ll use the same project to demonstrate how to check that Facebook is reachable. Here’s the project with the API Keys and Template Bundle IDs removed. fbconnect-iphone.zip I’ll include a link to the final project at the end.

Download the Reachability project too. I’ll be importing a class from it to check the network connection status.

Adding the SystemConfiguration Framework

sysconfig

The reachability class uses the SystemConiguration Framework to check network reachability. Adding the framework to the project is easy.

  1. Open Connect.xcodeproj if you haven’t already.
  2. In the Groups & Files area, control click on the Frameworks folder and select Add => Existing Frameworks.
  3. Look in the Frameworks folder for the SystemConfiguration.framework folder and select it.
  4. Click Add to add the framework to your project.

Add the Reachability Class

Now add the Reachability Class from Apple’s sample.

  1. Control click on the Source folder in the project and select Add => Existing Files.
  2. Navigate to the Reachability project, click Classes, and select the files: Reachability.h and Reachability.m.
  3. Click Add, then select Copy items into destination group’s folder (if needed)
  4. Click Add again.

Using the Reachability Class

Now that the framework and class have been added to the project, put them to work in the code. Create a variable to track the internet connection status, and two methods in the SessionViewController.h file.

  1. Open the SessionViewController.h file and import the Reachability class:
    #import "Reachability.h"
  2. Add a variable to track the status:
    NetworkStatus internetConnectionStatus;
  3. Add a property to hold the network status:
    @property NetworkStatus internetConnectionStatus;
  4. Add these two methods:
    - (void)reachabilityChanged:(NSNotification *)note;
    - (void)updateStatus;

At this point, the SessionViewController interface should look like this:

#import "FBConnect/FBConnect.h"
#import "PermissionStatus.h"
#import "Reachability.h"

@class FBSession;

@interface SessionViewController : UIViewController
{
IBOutlet UILabel* _label;
IBOutlet UIButton* _permissionButton;
IBOutlet UIButton* _feedButton;
IBOutlet FBLoginButton* _loginButton;
FBSession* _session;
PermissionStatus *permissionStatusForUser;
NetworkStatus internetConnectionStatus;
}

@property(nonatomic,readonly) UILabel* label;
@property (nonatomic, retain) PermissionStatus *permissionStatusForUser;
@property NetworkStatus internetConnectionStatus;

- (void)askPermission:(id)target;
- (void)publishFeed:(id)target;
- (void)reachabilityChanged:(NSNotification *)note;
- (void)updateStatus;

@end

Finally, the implementation.

  1. Open SessionViewController.m.
  2. Sysnthesize the internetConnectionStatus variable:
    @synthesize internetConnectionStatus;
  3. Define a string for the host name of the resource:
    #define kHostName @"www.facebook.com"
  4. Make the viewDidLoad method look like this:
    - (void)viewDidLoad {
    //Use the Reachability class to determine if the internet can be reached.
    [[Reachability sharedReachability] setHostName:kHostName];
    //Set Reachability class to notifiy app when the network status changes.
    [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
    //Set a method to be called when a notification is sent.
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:@"kNetworkReachabilityChangedNotification" object:nil];
    [self updateStatus];
    [_session resume];
    _loginButton.style = FBLoginButtonStyleWide;
    }
    I want to receive notifications if the network status changes, so I used the setNetworkStatusNotificationsEnabled:YES method. However, I found that the reachabilityChanged method wasn’t called when the network status changed. I’ll refactor later to fix the problem.
  5. Implement the new methods:
    - (void)reachabilityChanged:(NSNotification *)note {
    [self updateStatus];
    }

    - (void)updateStatus
    {
    // Query the SystemConfiguration framework for the state of the device's network connections.
    self.internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
    if (self.internetConnectionStatus == NotReachable) {
    //show an alert to let the user know that they can't connect...
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Network Status" message:@"Sorry, our network guro determined that the network is not available. Please try again later." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
    } else {
    // If the network is reachable, make sure the login button is enabled.
    _loginButton.enabled = YES;
    }
    }
    To update the user of the status, I display an alert with a message. When status notifications are sent later, either enable the login button or display the alert.
  6. Add the alert delegate method:
    #pragma mark AlertView delegate methods
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    _loginButton.enabled = NO;
    [alertView release];
    }
    If the network isn’t available, disable the loginButton. In this app nothing can be done without a connection, so additional information would be in order.

To test the application on the simulator, go to Network Preferences and disable your network connections. While disabled, the alert will be displayed. To test on an iPhone, put the device in Airplane mode. On an iPod, turn off the WiFi connection. I also tested on my device by walking to places where there is no Edge or WiFi network. In my tests, the reachabilityChanged method did not get called. Thanks to Shashi Prabhakar for giving me a clue about how to get it working, see his comment below.

Refactoring to Receive Reachability Changed Notifications

To get the change notifications I had to make several small changes. My initial observations when checking the remoteHostStatus instead of the internetConnectionStatus:

  1. The reachabilityChanged method was being called.
  2. I noticed that when first initialized the remoteHostStatus is always NotReachable.
  3. The internetConnectionStatus returns a positive result before the remoteHostStatus.
  4. Because I am using an alert, sometimes the alert would be displayed twice or not at all when using one status or the other.

As a result, I changed the code to track both the remoteHostStatus and the internetConnectionStatus. I also added a method to initialize the variables.

  1. Open SessionViewController.h and add a variable and property to hold the remoteHostStatus.
    NetworkStatus remoteHostStatus;
  2. Also add a method to initialize the variables.
    - (void)initStatus;

Here’s the complete interface.

#import "FBConnect/FBConnect.h"
#import "PermissionStatus.h"
#import "Reachability.h"

@class FBSession;

@interface SessionViewController : UIViewController
{
IBOutlet UILabel* _label;
IBOutlet UIButton* _permissionButton;
IBOutlet UIButton* _feedButton;
IBOutlet FBLoginButton* _loginButton;
FBSession* _session;
PermissionStatus *permissionStatusForUser;
NetworkStatus internetConnectionStatus;
NetworkStatus remoteHostStatus;
}

@property(nonatomic,readonly) UILabel* label;
@property (nonatomic, retain) PermissionStatus *permissionStatusForUser;
@property NetworkStatus internetConnectionStatus;
@property NetworkStatus remoteHostStatus;

- (void)askPermission:(id)target;
- (void)publishFeed:(id)target;
- (void)reachabilityChanged:(NSNotification *)note;
- (void)updateStatus;
- (void)initStatus;

@end

Edit the implementation.

  1. Open SessionViewController.m and add the initStatus method
    -(void)initStatus {
    self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
    self.internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
    }
  2. Change the viewDidLoad method to call the initStatus method instead of the updateStatus method.
    - (void)viewDidLoad {
    //Use the Reachability class to determine if the internet can be reached.
    [[Reachability sharedReachability] setHostName:kHostName];
    //Set Reachability class to notifiy app when the network status changes.
    [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
    //Set a method to be called when a notification is sent.
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:@"kNetworkReachabilityChangedNotification" object:nil];
    [self initStatus];
    [_session resume];
    _loginButton.style = FBLoginButtonStyleWide;
    }
  3. Change the updateStatus method to check both variables.
    - (void)updateStatus
    {
    // Query the SystemConfiguration framework for the state of the device's network connections.
    self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
    self.internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
    NSLog(@"remote status = %d, internet status = %d", self.remoteHostStatus, self.internetConnectionStatus);
    if (self.internetConnectionStatus == NotReachable && self.remoteHostStatus == NotReachable) {
    //show an alert to let the user know that they can't connect...
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Network Status" message:@"Sorry, our network guro determined that the network is not available. Please try again later." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
    } else {
    // If the network is reachable, make sure the login button is enabled.
    _loginButton.enabled = YES;
    }
    }

I left the log statement so that you could see how the values change as the network settings are changed. In the simulator, go to network settings and disable your connections while it is running. The reachabilityChanged method is now being called as the network status changes.

2010年5月6日 星期四

iPhone app 上架必備

http://ecmacblog.blogspot.com/2009/05/blog-post.html
http://dev.iphonetw.net/thread-639-1-1.html

先把該準備的東西準備好吧 !

Taiwan's Movie Timetable


這是我們的第一個iPhone App,基本上就是連上網路查詢目前上映中的電影,以及本週即將上映的電影,如果點選了其中的欄位,就會有更進一步的資訊,像是電影院的位置等等。

msn on iPhone

http://www.mobile01.com/topicdetail.php?f=383&t=1496561

2010年5月5日 星期三

Free Buttons & Icons

http://www.softpedia.com/get/Desktop-Enhancements/Icons-Related/Free-Button-Icons.shtml
http://techmagazine.ws/free-icons-and-buttons/
http://www.iconarchive.com/
http://www.smashingmagazine.com/2006/12/03/more-symbols-buttons-and-icons-for-free/
http://www.my-install.com/
http://www.dragnet.se/webbdesign/button_collection.html
http://www.freegroup.org/2010/03/mobile-icon-set/
http://www.freeiconsdownload.com/

http://www.freegroup.org/2010/02/200-free-web20-social-icons-of-hand-drawing-style/
手繪的,滿有特色的

http://nerdbusiness.com/blog/5978-high-quality-icons-web-apps-rss
超讚的icon網站,學美工的都該來看一下

產生你要的 button, 輸出成影像檔
http://tools.blogflux.com/buttonmaker/
http://dabuttonfactory.com/

2010年5月4日 星期二

free photo and pics

http://www.freepixels.com/
http://www.bigfoto.com/
沒去用

http://01mistery.blogspot.com/2007/09/free-photo.html
不錯的部落格分享

http://www.freephotosbank.com/
結果都不free

http://www.crystalxp.net/

http://www.freenaturepictures.com/
這比較偏自然類的照片

http://download-free-pictures.com/
比較西洋畫風格的圖片,偏歷史人文宗教

http://www.freepictureclick.com/
不多的自然類相片

http://www.freedigitalphotos.net/
好用的網站,比較適合App使用

http://www.deshow.net/
麻A塞


The Basics of Protocols and Delegates

http://iphonedevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

2010年5月3日 星期一

Run to pee !

http://runpee.com/
一個讓你知道看電影的途中該什麼時候 run to pee !

iPhone 3GS JB

http://www.itouchtw.com/archives/4676
http://spiritjb.com/

來的有點晚,@@,已經花了不少錢買Apps了,
不過遲到總比不到的好

[iPhone] Get shsh on Mac

http://iphone4.tw/forums/showthread.php?t=87094

第一PO

可惜可賀的第一PO來啦,算起來實在是落後社會太久了,已經不是撥接可以形容的慢了 ^^