<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>F.A.B.L.E &#187; Dev</title>
	<atom:link href="http://sh3ng.com/category/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://sh3ng.com</link>
	<description>What A Long, Strange Trip It&#039;s Been</description>
	<lastBuildDate>Sat, 04 Sep 2010 03:41:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>dSYM wtf</title>
		<link>http://sh3ng.com/2010/04/dsym-wtf/</link>
		<comments>http://sh3ng.com/2010/04/dsym-wtf/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 11:42:12 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[dSYM]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://sh3ng.com/?p=439</guid>
		<description><![CDATA[在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件. 他是一个编译的中转文件,简单说就是debug的symbols包含在这个文件中. 他有什么作用? 当release的版本 crash的时候,会有一个日志文件,包含出错的内存地址, 使用symbolicatecrash工具能够把日志和dSYM文件转换成可以阅读的log信息,也就是将内存地址,转换成程序里的函数或变量和所属于的文件名. 有一篇详细的blog讲了这个过程 http://www.anoshkin.net/blog/2008/09/09/iphone-crash-logs/ 将类似 Thread 0 Crashed: 0 libobjc.A.dylib 0x300c87ec 0x300bb000 + 55276 1 MobileLines 0&#215;00006434 0&#215;1000 + 21556 2 MobileLines 0x000064c2 0&#215;1000 + 21698 3 UIKit 0x30a740ac 0x30a54000 + 131244 的log信息转换成 Thread 0 Crashed: 0 libobjc.A.dylib 0x300c87ec objc_msgSend + 20 1 MobileLines 0&#215;00006434 -[BoardView setSelectedPiece:] (BoardView.m:321) 2 MobileLines 0x000064c2 [...]]]></description>
			<content:encoded><![CDATA[<p>在XCODE编译项目之后,会在app旁看见一个同名的dSYM文件.<br />
他是一个编译的中转文件,简单说就是debug的symbols包含在这个文件中.</p>
<p>他有什么作用? 当release的版本 crash的时候,会有一个日志文件,包含出错的内存地址, 使用symbolicatecrash工具能够把日志和dSYM文件转换成可以阅读的log信息,也就是将内存地址,转换成程序里的函数或变量和所属于的文件名.<br />
<span id="more-439"></span><br />
有一篇详细的blog讲了这个过程</p>
<p>http://www.anoshkin.net/blog/2008/09/09/iphone-crash-logs/</p>
<p>将类似</p>
<blockquote><p>Thread 0 Crashed:<br />
0   libobjc.A.dylib           0x300c87ec 0x300bb000 + 55276<br />
1   MobileLines               0&#215;00006434 0&#215;1000 + 21556<br />
2   MobileLines               0x000064c2 0&#215;1000 + 21698<br />
3   UIKit                     0x30a740ac 0x30a54000 + 131244
</p></blockquote>
<p>的log信息转换成</p>
<blockquote><p>Thread 0 Crashed:<br />
0   libobjc.A.dylib           0x300c87ec objc_msgSend + 20<br />
1   MobileLines               0&#215;00006434 -[BoardView setSelectedPiece:] (BoardView.m:321)<br />
2   MobileLines               0x000064c2 -[BoardView touchesBegan:withEvent:] (BoardView.m:349)<br />
3   UIKit                     0x30a740ac -[UIWindow sendEvent:] + 264</p></blockquote>
<p>的有用信息.</p>
<p>工具symbolicatecrash隐藏在/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/symbolicatecrash </p>
<p>所以一般复制到/usr/local/bin/ 成为命令行直接调用</p>
<blockquote><p>$ sudo cp /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/symbolicatecrash /usr/local/bin/</p></blockquote>
<p>这个时候运行</p>
<blockquote><p>$ symbolicatecrash -h</p></blockquote>
<p>就能看见帮助信息了.</p>
<p>这个时候,问题又来了..每次编译后的dsym文件都要手动保存一次,很是麻烦.</p>
<p>于是有人写了一个脚本,自动在编译后保存该文件.<br />
请参考:</p>
<p>http://www.cimgf.com/2009/12/23/automatically-save-the-dsym-files/</p>
<p>脚本我复制过来在下面</p>
<blockquote><p>
#!/bin/sh</p>
<p>if [ "$BUILD_STYLE" == "Debug" ]; then<br />
  echo &#8220;Skipping debug&#8221;<br />
  exit 0;<br />
fi</p>
<p>if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then<br />
  echo &#8220;Skipping simulator build&#8221;<br />
  exit 0;<br />
fi</p>
<p>SRC_PATH=${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}<br />
RELATIVE_DEST_PATH=dSYM/${EXECUTABLE_NAME}.$(date +%Y%m%d%H%M%S).app.dSYM<br />
DEST_PATH=${PROJECT_DIR}/${RELATIVE_DEST_PATH}<br />
echo &#8220;moving ${SRC_PATH} to ${DEST_PATH}&#8221;</p>
<p>mv &#8220;${SRC_PATH}&#8221; &#8220;${DEST_PATH}&#8221;</p>
<p>if [ -f ".git/config" ]; then<br />
  git add &#8220;${RELATIVE_DEST_PATH}&#8221;<br />
  git commit -m &#8220;Added dSYM file for ${BUILD_STYLE} build&#8221; &#8220;${RELATIVE_DEST_PATH}&#8221;<br />
fi
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2010/04/dsym-wtf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>视力降低了吗，为什么看UILabel中的文字很模糊！</title>
		<link>http://sh3ng.com/2010/02/%e8%a7%86%e5%8a%9b%e9%99%8d%e4%bd%8e%e4%ba%86%e5%90%97%ef%bc%8c%e4%b8%ba%e4%bb%80%e4%b9%88%e7%9c%8builabel%e4%b8%ad%e7%9a%84%e6%96%87%e5%ad%97%e5%be%88%e6%a8%a1%e7%b3%8a%ef%bc%81/</link>
		<comments>http://sh3ng.com/2010/02/%e8%a7%86%e5%8a%9b%e9%99%8d%e4%bd%8e%e4%ba%86%e5%90%97%ef%bc%8c%e4%b8%ba%e4%bb%80%e4%b9%88%e7%9c%8builabel%e4%b8%ad%e7%9a%84%e6%96%87%e5%ad%97%e5%be%88%e6%a8%a1%e7%b3%8a%ef%bc%81/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 12:55:17 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[blur]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://sh3ng.com/?p=391</guid>
		<description><![CDATA[喔喔，在使用UILabel等继承于UIView的控件时,如果frame的rect不是整数的情况下,就会显示起来看得很模糊.这通常出现在代码控制的界面中，控件是由计算的数值所决定的位置的时候。 解决方法就是把浮点数转换成整形。]]></description>
			<content:encoded><![CDATA[<p>喔喔，在使用UILabel等继承于UIView的控件时,如果frame的rect不是整数的情况下,就会显示起来看得很模糊.这通常出现在代码控制的界面中，控件是由计算的数值所决定的位置的时候。</p>
<p>解决方法就是把浮点数转换成整形。</p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2010/02/%e8%a7%86%e5%8a%9b%e9%99%8d%e4%bd%8e%e4%ba%86%e5%90%97%ef%bc%8c%e4%b8%ba%e4%bb%80%e4%b9%88%e7%9c%8builabel%e4%b8%ad%e7%9a%84%e6%96%87%e5%ad%97%e5%be%88%e6%a8%a1%e7%b3%8a%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为你的应用添加In App Purchase</title>
		<link>http://sh3ng.com/2009/10/practice-in-app-purchase/</link>
		<comments>http://sh3ng.com/2009/10/practice-in-app-purchase/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 21:58:36 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[in app purchase]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[storekit]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=300</guid>
		<description><![CDATA[自从10月16日苹果发送给所有开发者的那一封信，通知了程序内购买将可用于免费应用，我认为这也宣告了LITE版的时代结束。 成千上万的免费版的软件或游戏，将作为限制了功能的完整版免费发售，如果用户觉得有意购买，可以直接解锁完整版的功能或购买附加内容。 本文讲阐述如何为你现有的应用或游戏添加程序内购买(In App Purchase)功能。 阅读前提：假设了你拥有一定的iPhone SDK开发基础，和App Store实践经验。 你的程序需要唯一的Bundle ID, 如果已经发布的程序使用了通配符，那么就不能直接添加该功能。如果拥有了唯一的ID，请在program portal中添加你的app id，允许程序使用内购买(Enable In App Purchase)。 在设计好你的程序内购买的功能以后，首先需要定义元数据。来到iTunes Connect，在Manage Your In App Purchases中为你的程序添加一个程序内购买的商品。 上面第一个部分是添加的内部信息。参考名称，ID，类型，和价格。以及各种本地化信息。 这里简单说一下类型的选择，其他信息，以及In App Purchase支持什么类型的商品请查看Getting Started with In App Purchase。 Non-consumable 默认类型，非消耗品，具有持久性，特点是一次性购买，可用在所有设备。例如解锁游戏的储存关卡功能。 Consumable 消耗品，用完或使用后消失，可多次购买，不能用在所有的设备，例如游戏中的血瓶或技能书。 Subscription 订阅，和消耗品一样，除了可以在设备之间共享。 创建购买流程 大致可以分为十个步骤： 验证App Store存取权限 这样做是因为，家长控制或一些公司的配置文件阻止了此功能，使用支付队列的查询功能canMakePayments来确定用户是否有权限购买，返回值YES代表可以购买/NO代表没有权限购买。 载入目录 载入储存在本地或者远程的商品目录。 获得商品本地化信息 程序向App Store发起查询请求获得目录中商品的本地化信息。： myPossibleProds = [NSSet setWithObjects: @”myProd1”, @”myProd2”, @”myProd3, nil]; [...]]]></description>
			<content:encoded><![CDATA[<p>自从10月16日苹果发送给所有开发者的那<a href="https://developer.apple.com/iphone/appstore/inapppurchase.html">一封信</a>，通知了程序内购买将可用于免费应用，我认为这也宣告了LITE版的时代结束。</p>
<p>成千上万的免费版的软件或游戏，将作为限制了功能的完整版免费发售，如果用户觉得有意购买，可以直接解锁完整版的功能或购买附加内容。<br />
本文讲阐述如何为你现有的应用或游戏添加程序内购买(In App Purchase)功能。</p>
<p>阅读前提：假设了你拥有一定的iPhone SDK开发基础，和App Store实践经验。<br />
<span id="more-300"></span><br />
你的程序需要唯一的Bundle ID, 如果已经发布的程序使用了通配符，那么就不能直接添加该功能。如果拥有了唯一的ID，请在program portal中添加你的app id，允许程序使用内购买(Enable In App Purchase)。</p>
<p>在设计好你的程序内购买的功能以后，首先需要定义元数据。来到<a href="https://itunesconnect.apple.com">iTunes Connect</a>，在Manage Your In App Purchases中为你的程序添加一个程序内购买的商品。</p>
<p><a href="http://doskoi.cn/wp-content/uploads/2009/10/add.png"><img class="alignnone size-medium wp-image-310" title="add" src="http://doskoi.cn/wp-content/uploads/2009/10/add-300x254.png" alt="add" width="300" height="254" /></a></p>
<p>上面第一个部分是添加的内部信息。参考名称，ID，类型，和价格。以及各种本地化信息。<br />
这里简单说一下类型的选择，其他信息，以及In App Purchase支持什么类型的商品请查看<a href="http://developer.apple.com/iphone/news/pdf/in_app_purchase.pdf">Getting Started with In App Purchase</a>。</p>
<p>Non-consumable 默认类型，非消耗品，具有持久性，特点是一次性购买，可用在所有设备。例如解锁游戏的储存关卡功能。<br />
Consumable 消耗品，用完或使用后消失，可多次购买，不能用在所有的设备，例如游戏中的血瓶或技能书。<br />
Subscription 订阅，和消耗品一样，除了可以在设备之间共享。</p>
<p><strong>创建购买流程</strong><br />
大致可以分为十个步骤：</p>
<ol>
<li>验证App Store存取权限<br />
这样做是因为，家长控制或一些公司的配置文件阻止了此功能，使用支付队列的查询功能canMakePayments来确定用户是否有权限购买，返回值YES代表可以购买/NO代表没有权限购买。</li>
<li>载入目录<br />
载入储存在本地或者远程的商品目录。</li>
<li>获得商品本地化信息<br />
程序向App Store发起查询请求获得目录中商品的本地化信息。：<br />
<code>myPossibleProds = [NSSet setWithObjects: @”myProd1”, @”myProd2”, @”myProd3, nil];<br />
myProdRequest = [[SKProductsRequest alloc] initWithProductIdentifiers: myPossibleProds];<br />
myProdRequest.delegate = myProductsRequestDelegate;<br />
[myProdRequest start];</code><br />
程序接收来自App Store的回应：<br />
<code>-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response<br />
response包含可能的信息<br />
response.products //产品信息<br />
response.invalidProductIdentifiers //错误的产品标示符</code><br />
错误的产品可能由下面的原因导致：</p>
<ul>
<li>商品未在 iTunes Connect中录入。</li>
<li>商品没有选择“Cleared for Sale”。</li>
<li>商品还没有传播到所有服务器。</li>
</ul>
</li>
<li>创建商品信息<br />
前面的步骤获得了产品信息的数组用以呈现：<br />
<code>myAvailableProductsArray = response.products;<br />
for (SKProduct* aProduct in myAvailableProductsArray) {<br />
diplayTitle  = aProduct.localizedTitle;<br />
displayDesc  = aProduct.localizedDescription;<br />
displayPrice = aProduct.price;<br />
}</code></li>
<li>呈现商品信息<br />
在UI中显示前面获得的信息</li>
<li>请求支付<br />
<code>myPayment = [SKPayment paymentForProductIdentifier: selectedProdID userInfo: nil]; </code><br />
或<br />
<code>myPayment = [SKPayment paymentForProduct: selectedProduct userInfo: nil]; </code><br />
然后提交到队列<br />
<code>defaultPaymentQueue = [SKPaymentQueue defaultQueue];<br />
[defaultPaymentQueue addTransactionObserver: myObserver];<br />
<del datetime="2009-10-18T20:51:30+00:00">[defaultPaymentQueue addPayment: myPayment]; </del><br />
[defaultPaymentQueue addPayment: myRequest];<br />
</code><br />
<code>- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions</code></li>
<p><code> </code></p>
<li>验证支付的事务<br />
<code>for(SKPaymentTransaction *aTransaction in transactions) {<br />
switch (aTransaction.transactionState ) {</code></p>
<p><code> // 商品进入购买流程<br />
case SKPaymentTransactionStatePurchasing:<br />
...<br />
break;<br />
<strong> // 成功购买商品<br />
case SKPaymentTransactionStatePurchased:<br />
...<br />
break;<br />
// 已经购买过该商品<br />
case SKPaymentTransactionStateRestored:<br />
...<br />
break; </strong><br />
// 用户取消交易<br />
case: SKPaymentTransactionStateFailed<br />
...<br />
break; </code><br />
App Store的交易回执<br />
aTransaction.transactionReceipt</p>
<ul>
<li>Used to validate e-commerce transaction</li>
<li>Cryptographically signed chunk of data</li>
<li>Contains information about the purchase</li>
<li>Can validate using Web-based API</li>
</ul>
<p>收到交易回执以后可以传送到你的服务器处理该交易。<br />
你的服务器可以向苹果发送交易验证信息。<br />
苹果的交易验证地址：https://buy.itunes.apple.com/verifyReceipt<br />
验证数据格式：{ receipt-data : &#8230;}<br />
苹果的返回值如果是{ status : 0 } 那么交易是正确，如果返回任何其他值 { status : any_other_value } 交易就是不成立。<br />
你的服务器收到苹果的验证成功信息以后，返回给应用程序类似于解锁功能等消息。</li>
<li>解锁内置物品火提供远程存取地址<br />
需要注意的地方</p>
<ul>
<li>用户可能随时退出程序。</li>
<li>Store Kit 的交易队列是持久化的。</li>
<li>交易是持久化的。</li>
<li>验证存取。</li>
<li>移除交易。</li>
</ul>
<p><code>[[SKPaymentQueue defaultQueue] finishTransaction: transaction];</code></li>
<li>储存购买<br />
需要将非消耗的购买记录在服务器上，以供用户更换设备或删除程序以后重新安装时再次解锁功能。</li>
<li>提供物品恢复<br />
前面的代码中，已经购买过该商品的处理就是直接解锁。<br />
<code>defaultPaymentQueue = [SKPaymentQueue defaultQueue];<br />
[defaultPaymentQueue restoreCompletedTransactions]; </code></li>
</ol>
<p><strong>测试沙盒环境</strong><br />
只供给测试用户，并且设备上才有效，不能使用模拟器测试。<br />
可以为每个国家的商店添加测试帐号。<br />
不能用来测试其他的iTunes Store特性。<br />
需要为每个测试添加唯一的email地址，可以考虑使用+<br />
payam+usa@example.com—测试美国的商品<br />
payam+uk@example.com—测试英国的商品<br />
payam+jp@example.com—测试日本的商品<br />
测试步骤，需要在设备的设置菜单中iTunes Store登出原有帐户。<br />
然后不要在设置菜单中登录测试帐号，而是直接打开需要测试的程序进行测试。<br />
在这之前需要在iTunes Connect的Manage Users菜单中添加In App Purchase测试用户。</p>
<p><strong>财务报表</strong></p>
<ul>
<li>收入和应用程序同样的规则
<ul>
<li>你获得总收入的70%。</li>
<li>支付日程，使用税，报表等全部都一样。</li>
</ul>
</li>
<li>报表
<ul>
<li>一样的报表格式。</li>
<li>贩卖的标示符栏显示物品的产品ID。</li>
<li>所有者标示符栏显示程序的ID。</li>
</ul>
</li>
</ul>
<p>本文部分内容参考自<a href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/StoreKitGuide/index.html">In App Purchase Programming Guide</a>和WWDC 2009 Sessions，如需转载请注明出处。</p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2009/10/practice-in-app-purchase/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Xcode 3.2 引入代码静态分析</title>
		<link>http://sh3ng.com/2009/09/xcode-with-static-code-analysis-via-clang/</link>
		<comments>http://sh3ng.com/2009/09/xcode-with-static-code-analysis-via-clang/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 23:26:42 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[clang]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=243</guid>
		<description><![CDATA[Xcode 3.2引入了Clang的代码静态分析功能，在项目设置中替换默认编译器即可开启。 唯一的不足就是xcode 3.2只能安装在snow leopard，对于没有升级的开发者来说比较遗憾。 leopard最新的只有3.1.4，支持使用Instruments通过Wifi调试，据说3.2xcode支持wifi调试。(需要OS 3.1)]]></description>
			<content:encoded><![CDATA[<p>Xcode 3.2引入了<a href="http://iPhoneDeveloperTips.com/xcode/static-code-analysis-clang-and-xcode-3-2.html">Clang的代码静态分析功能</a>，在项目设置中替换默认编译器即可开启。<br />
唯一的不足就是xcode 3.2只能安装在snow leopard，对于没有升级的开发者来说比较遗憾。<br />
leopard最新的只有3.1.4，支持使用Instruments通过Wifi调试，据说3.2xcode支持wifi调试。(需要OS 3.1)</p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2009/09/xcode-with-static-code-analysis-via-clang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to select graphics engine on iPhone</title>
		<link>http://sh3ng.com/2009/08/how-to-select-graphics-engine-on-iphone/</link>
		<comments>http://sh3ng.com/2009/08/how-to-select-graphics-engine-on-iphone/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 02:09:01 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=215</guid>
		<description><![CDATA[Overview Architecture Usage]]></description>
			<content:encoded><![CDATA[<p>Overview<br />
<a href="http://www.flickr.com/photos/doskoi/3837950485/" title="Flickr 上 Asuroa 的 Image 2"><img src="http://farm3.static.flickr.com/2567/3837950485_d42b983cca.jpg" width="440"  alt="Image 2" /></a></p>
<p>Architecture<br />
<a href="http://www.flickr.com/photos/doskoi/3838740562/" title="Flickr 上 Asuroa 的 Image 1"><img src="http://farm4.static.flickr.com/3547/3838740562_56662fb354.jpg" width="440"  alt="Image 1" /></a></p>
<p>Usage<br />
<a href="http://www.flickr.com/photos/doskoi/3838740062/" title="Flickr 上 Asuroa 的 Image 3"><img src="http://farm4.static.flickr.com/3501/3838740062_68c7eb41a0.jpg" width="440"  alt="Image 3" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2009/08/how-to-select-graphics-engine-on-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s different on iphone device and simulator</title>
		<link>http://sh3ng.com/2009/08/whats-different-on-iphone-device-and-simulator/</link>
		<comments>http://sh3ng.com/2009/08/whats-different-on-iphone-device-and-simulator/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 01:50:17 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[device]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[simulator]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=209</guid>
		<description><![CDATA[Device vs. Simulator Taking advantage of the differences the code for detect #if TARGET_IPHONE_SIMULATOR // Simulator-specific code #else // iPhone-specific code #end]]></description>
			<content:encoded><![CDATA[<p>Device vs. Simulator<br />
Taking advantage of the differences</p>
<p>the code for detect</p>
<p>#if TARGET_IPHONE_SIMULATOR<br />
// Simulator-specific code<br />
#else<br />
// iPhone-specific code<br />
#end</p>
<p><a title="Flickr 上 Asuroa 的 Image 4" href="http://www.flickr.com/photos/doskoi/3838740216/"><img src="http://farm3.static.flickr.com/2604/3838740216_046664a557.jpg" alt="Image 4" width="440" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2009/08/whats-different-on-iphone-device-and-simulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>script/generate controller创建Modules的问题</title>
		<link>http://sh3ng.com/2008/10/script-generate-controller-for-modules/</link>
		<comments>http://sh3ng.com/2008/10/script-generate-controller-for-modules/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 15:56:42 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[moudle]]></category>
		<category><![CDATA[namespaces]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[routes.rb]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=18</guid>
		<description><![CDATA[今天在项目里准备把管理功能移进后台系统，于是创建根据controller的examples创建了一个模块:Modules Example:&#160;&#160;&#160; `./script/generate controller &#8216;admin/credit_card&#8217; suspend late_fee` &#160;&#160;&#160; Credit card admin controller with URLs /admin/credit_card/suspend.&#160;&#160;&#160;&#160;&#160;&#160;&#160; Controller: app/controllers/admin/credit_card_controller.rb&#160;&#160;&#160;&#160;&#160;&#160;&#160; Views:&#160;&#160;&#160;&#160;&#160; app/views/admin/credit_card/debit.html.erb [...]&#160;&#160;&#160;&#160;&#160;&#160;&#160; Helper:&#160;&#160;&#160;&#160; app/helpers/admin/credit_card_helper.rb&#160;&#160;&#160;&#160;&#160;&#160;&#160; Test:&#160;&#160;&#160;&#160;&#160;&#160; test/functional/admin/credit_card_controller_test.rb ./script/generate controller 'admin/credit_card' 因为安全方面的问题,文章里的module名都用帮助实例里的名字代替。我使用如上的方法创建了一个module以后,在浏览器里是直接不能访问的,于是又在routes.rb里添加路由映射的命名空间:&#160;&#160; map.namespace :admin do &#124;admin&#124;&#160;&#160;&#160;&#160; admin.resources :credit_card&#160;&#160; end这样做了以后就有一个奇怪的现象产生。 除了index这个action，所有不带id的action全部无法访问，例如admin/credit_card/edit/1是可以的，但是admin/credit_card/add这个action返回的结果就是：No action responded to show奇怪的是给它带上参数就可以了，也就是当我访问admin/credit_card/add/1就能正确显示，尽管这个id没有任何作用。服务器的日志显示情况,带参数的:Parameters: {&#8220;action&#8221;=&#62;&#8221;edit&#8221;, &#8220;id&#8221;=&#62;&#8221;1&#8243;, &#8220;controller&#8221;=&#62;&#8221;admin/credit_card&#8221;不带参数的错误情况:Parameters: {&#8220;action&#8221;=&#62;&#8221;show&#8221;, &#8220;id&#8221;=&#62;&#8221;add&#8221;, &#8220;controller&#8221;=&#62;&#8221;admin/credit_card&#8221; 尝试继续修改routes.rb却未果。 于是我destroy这个module，还原了routes.rb，用另一种方法创建： ./script/generate controller 'admin::credit_card' 注意，这里只是把例子里的&#8221;/&#8221;改成了&#8221;::&#8221;，重新生成以后一切正常，连routes.rb也没有修改。服务器的日志也显示：Parameters: {&#8220;action&#8221;=&#62;&#8221;add&#8221;, &#8220;controller&#8221;=&#62;&#8221;admin/credit_card&#8220;} 目前看来要正确的生成模块需要使用::做分割符。]]></description>
			<content:encoded><![CDATA[<p>今天在项目里准备把管理功能移进后台系统，于是创建根据controller的examples创建了一个模块:<br /><i><br />Modules Example:<br />&nbsp;&nbsp;&nbsp; `./script/generate controller &#8216;admin/credit_card&#8217; suspend late_fee`</p>
<p>&nbsp;&nbsp;&nbsp; Credit card admin controller with URLs /admin/credit_card/suspend.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Controller: app/controllers/admin/credit_card_controller.rb<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Views:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; app/views/admin/credit_card/debit.html.erb [...]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Helper:&nbsp;&nbsp;&nbsp;&nbsp; app/helpers/admin/credit_card_helper.rb<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test/functional/admin/credit_card_controller_test.rb</i></p>
<pre>./script/generate controller 'admin/credit_card'</pre>
<p>因为安全方面的问题,文章里的module名都用帮助实例里的名字代替。<br />我使用如上的方法创建了一个module以后,在浏览器里是直接不能访问的,于是又在routes.rb里添加路由映射的命名空间:<br />&nbsp;&nbsp; map.namespace :admin do |admin|<br />&nbsp;&nbsp;&nbsp;&nbsp; admin.resources :credit_card<br />&nbsp;&nbsp; end<br />这样做了以后就有一个奇怪的现象产生。</p>
<p><span id="more-18"></span><br />
除了index这个action，所有不带id的action全部无法访问，<br />例如admin/credit_card/edit/1是可以的，但是admin/credit_card/add这个action<br />返回的结果就是：<br /><font style="font-size: 1.5625em;"><i>No action responded to show</i></font><br />奇怪的是给它带上参数就可以了，也就是当我访问admin/credit_card/add/1就能正确显示，尽管这个id没有任何作用。<br />服务器的日志显示情况,带参数的:<br /><i>Parameters: {&#8220;action&#8221;=&gt;&#8221;edit&#8221;, &#8220;id&#8221;=&gt;&#8221;1&#8243;, &#8220;controller&#8221;=&gt;&#8221;admin/credit_card&#8221;</i><br />不带参数的错误情况:<br /><i>Parameters: {&#8220;action&#8221;=&gt;&#8221;show&#8221;, &#8220;id&#8221;=&gt;&#8221;add&#8221;, &#8220;controller&#8221;=&gt;&#8221;admin/credit_card&#8221;</i></p>
<p>尝试继续修改routes.rb却未果。</p>
<p>于是我destroy这个module，还原了routes.rb，用另一种方法创建：
<pre>./script/generate controller 'admin::credit_card'</pre>
<p>注意，这里只是把例子里的&#8221;/&#8221;改成了&#8221;::&#8221;，重新生成以后一切正常，连routes.rb也没有修改。<br />服务器的日志也显示：<br /><i>Parameters: {&#8220;action&#8221;=&gt;&#8221;add&#8221;, &#8220;controller&#8221;=&gt;&#8221;admin/credit_card</i>&#8220;}</p>
<p>目前看来要正确的生成模块需要使用::做分割符。</p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2008/10/script-generate-controller-for-modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>整理优化你的CSS代码</title>
		<link>http://sh3ng.com/2008/08/clean-and-optimized-css-code/</link>
		<comments>http://sh3ng.com/2008/08/clean-and-optimized-css-code/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 12:48:00 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[clean]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[doucment]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[shorthand]]></category>
		<category><![CDATA[UE]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[压缩]]></category>
		<category><![CDATA[框架]]></category>
		<category><![CDATA[用户体验]]></category>
		<category><![CDATA[缩写]]></category>
		<category><![CDATA[速写]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=10</guid>
		<description><![CDATA[当我们面对网站项目里日益庞大的css，javascript文件，无论是为了二次开发还是浏览器解析，都应该优化他们的代码，但是优化并不意味着是简单的压缩或减小文件体积。条理清晰，运行效率高才是我们要的结果。那么有哪些手段能够我们的css代码呢？一起来看看下面的一些建议吧。 1.使用缩写缩写能够缩短你的工作时间，减小你的文件体积，何乐而不为？ 针对相近的不同设置不同的值： p { margin-top: 10px; margin-right: 20px; margin-bottom: 30px; margin-left: 40px; } 使用缩写： p { margin: 10px 20px 30px 40px; } 再来看看常用的font的缩写 查看 CSS Shorthand Guide (英) 和 Efficient CSS with shorthand properties (英) 了解更多关于缩写的属性。 2.避免使用HackJon Hick的 blog hicksdesign.co.uk/journal 利用浏览器条件性注释Hack是一个糟糕的东西，它会为不同浏览器定义一样的代码，使得CSS繁冗。现在我们知道使用条件性注释来代替hack，他们在IE6和IE7中是被认可的，甚至IE团队也推荐这样使用。使用条件性注释服务于符合浏览器特性专用的CSS代码，因此，更小的、核心的CSS代码用来服务于遵从标准的浏览器，只有需求条件出现的时候（比如IE），才会去下载额外的CSS文件！ 下面来看看IE6使用条件性注释的代码范例： &#60;!--[if IE 6]&#62; &#60;link rel="stylesheet" type="text/css" href="ie6.css"&#62; &#60;![endif]--&#62; 这段代码使得IE6去下载额外的ie6.css解析它专用的css代码。同样的，如果针对IE7只用把上面的6与7替换就行了。 3.使用留白 无论是为了自己阅读还是二次开发，都要让CSS保持良好的可读性，留白就充当了关键的角色。我们不鼓励你为了得到一个更小的CSS文件，就去掉所有的空白格式，如tab，换行，空格等。这里推荐嵌套的代码使用一个tab缩进，所有属性独立一行。 对比上下的图片，是哪一种格式能让你更加节约修改的时间呢？留白会让你更加容易管理代码。 [...]]]></description>
			<content:encoded><![CDATA[<div>当我们面对网站项目里日益庞大的css，javascript文件，无论是为了二次开发还是浏览器解析，都应该优化他们的代码，但是优化并不意味着是简单的压缩或减小文件体积。条理清晰，运行效率高才是我们要的结果。那么有哪些手段能够我们的css代码呢？一起来看看下面的一些建议吧。</div>
<p><span id="more-10"></span><br />
<span style="font-size: 36px; font-family: Verdana;">1.使用缩写<br /></span><br />缩写能够缩短你的工作时间，减小你的文件体积，何乐而不为？</p>
<p>针对相近的不同设置不同的值：</p>
<pre name="code" class="css">p {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
}
</pre>
<p>
使用缩写：<br />
</p>
<pre name="code" class="css">p { margin: 10px 20px 30px 40px; }</pre>
<p><img class="yui-img" alt="" style="height: 243px; width: 630px;" src="http://blog.doskoi.cn/2008/08/27/images/1.gif" /></p>
<p>再来看看常用的font的缩写<br />
<img class="yui-img" alt="" src="http://blog.doskoi.cn/2008/08/27/images/2.gif" /></p>
<p>查看 <a href="http://www.dustindiaz.com/css-shorthand/">CSS Shorthand Guide</a> (英) 和 <a href="http://www.456bereastreet.com/archive/200502/efficient_css_with_shorthand_properties/">Efficient CSS with shorthand properties</a> (英) 了解更多关于缩写的属性。</p>
<p><span style="font-size: 36px; font-family: Verdana;">2.避免使用Hack<br /></span><br /><img class="yui-img" alt="" src="http://blog.doskoi.cn/2008/08/27/images/3.jpg" /><br /><i>Jon Hick的 blog <a href="http://hicksdesign.co.uk/journal/">hicksdesign.co.uk/journal</a> 利用浏览器条件性注释<br /></i><br />Hack是一个糟糕的东西，它会为不同浏览器定义一样的代码，使得CSS繁冗。现在我们知道使用条件性注释来代替hack，他们在IE6和IE7中是被认可的，甚至IE团队也推荐这样使用。<b>使用条件性注释</b>服务于符合浏览器特性专用的CSS代码，因此，更小的、核心的CSS代码用来服务于遵从标准的浏览器，只有需求条件出现的时候（比如IE），才会去下载额外的CSS文件！</p>
<p>下面来看看IE6使用条件性注释的代码范例：</p>
<pre name="code" class="css">&lt;!--[if IE 6]&gt;
&lt;link rel="stylesheet" type="text/css" href="ie6.css"&gt;
&lt;![endif]--&gt;
</pre>
<p>这段代码使得IE6去下载额外的ie6.css解析它专用的css代码。同样的，如果针对IE7只用把上面的6与7替换就行了。</p>
<p><span style="font-size: 36px; font-family: Verdana;">3.使用留白</span></p>
<p>无论是为了自己阅读还是二次开发，都要让CSS保持良好的<b>可读性</b>，留白就充当了关键的角色。<br />我们不鼓励你为了得到一个更小的CSS文件，就去掉所有的空白格式，如tab，换行，空格等。这里推荐嵌套的代码使用一个tab缩进，所有属性独立一行。</p>
<p><img class="yui-img" alt="" src="http://blog.doskoi.cn/2008/08/27/images/4.gif" /></p>
<p>对比上下的图片，是哪一种格式能让你更加节约修改的时间呢？留白会让你更加容易管理代码。</p>
<p><span style="font-size: 36px; font-family: Verdana;">4.移除多余的frameworks和resets</span></p>
<p><img class="yui-img" alt="" src="http://blog.doskoi.cn/2008/08/27/images/5.jpg" /><br /><i>Nathan Smith的 <a href="http://960.gs/">960 Grid System</a> CSS framework使用的重置规则</i></p>
<p>如果你选择使用CSS framework，包括你自己写的，如果你去检查代码一定会发现该framework包含的一些规则并不适用于你当前的文件，它们是可以被删除的。<br />由此可以想到的还有reset，<a href="http://developer.yahoo.com/yui/grids/">YUI Grid CSS</a>使用的reset和Eric Meyer&#8217;s <a href="http://meyerweb.com/eric/tools/css/reset/">Reset</a> 目前都很流行， Resets能够移除不同浏览器的默认样式，使得页面在各个浏览器之间的表现一致。但是它们通常包含了一个大的网站需要的所有属性，一些例如pre,code,sub,dfn,var等等属性对于普通网站来说根本不会用上，删掉那些你用不上的。Eric Meyer也会鼓励你这样做！<br />framework和reset会很好的帮助你的工作，但是如果不去掉那些你用不上的使用，反而会拖累你页面的效率和可读性。</p>
<p><span style="font-size: 36px; font-family: Verdana;">5.扩展的CSS</span></p>
<p><img class="yui-img" alt="" src="http://blog.doskoi.cn/2008/08/27/images/6.jpg" /><br /><i>Doug Bowman的 <a href="http://stopdesign.com">stopdesign.com</a> CSS 为层使用特殊的选择器</i></p>
<p>另一种优化你的代码的方法就是分别为层进行具体的属性声明。</p>
<p><span style="font-size: 36px; font-family: Verdana;">6.记录你的工作</span></p>
<p><img class="yui-img" alt="" src="http://blog.doskoi.cn/2008/08/27/images/7.jpg" /></p>
<p>在团队协作中，沟通书写标准，编码规范，注释方法，风格极为重要。规则是建立在一个一致的方法的标准。这样能够防止别人重复你已经做过的工作，防止代码的膨胀。</p>
<p><span style="font-size: 36px; font-family: Verdana;">7.压缩</span><span style="font-size: 36px; font-family: Verdana;">使用</span></p>
<p>为了使得浏览器节省更多下载个载入时间，压缩是一个不错的解决方案，但是仅限于发布的时候。<a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a> 和 <a href="http://csstidy.sourceforge.net/">CSSTidy</a> 就是这样方面的专家，他们能够去除多余的代码，校验属性互相覆盖的错误。<br />许多流行的编辑器，比如BBEdit, TextMate, 和 TopStyle 都能够帮助你格式化你的CSS代码成你想要的样子。你还能通过服务器压缩技术<a href="http://paulstamatiou.com/2007/03/18/how-to-optimize-your-css-even-more">使用PHP</a>处理你的CSS。你可以找到更多的CSS优化和压缩的<a href="http://www.smashingmagazine.com/2006/09/02/list-of-css-tools/">CSS工具</a>。</p>
<p>有一点，这些程序尽可能会降低错误的发生，但并不是完美的。同样，最好不要用他们去处理包含CSS hack的文件。这也是另一个让那些hack储存在另外的文件里的原因。</p>
<p><span style="font-size: 36px; font-family: Verdana;">结束</span><br />
<hr /><b>整洁和优化的代码</b>不只是你的文件大小，还包括了维护性和可读性。以上的原理并不只是针对CSS，它们还能应用到HTML，Javascript以及其他编程语言。CSS文件不只是为了呈现给你网站的最终用户。上面的原理可以帮助用户体验以及开发者经验。运用这些原则到你未来的项目中，一定能够获得重大的成效。</p>
<p>引用来源: <a target="_blank" href="http://www.smashingmagazine.com/2008/08/18/7-principles-of-clean-and-optimized-css-code/">7 Principles Of Clean And Optimized CSS Code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2008/08/clean-and-optimized-css-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI Introduce</title>
		<link>http://sh3ng.com/2008/08/yui-introduce/</link>
		<comments>http://sh3ng.com/2008/08/yui-introduce/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 00:03:11 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[dhtml]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=8</guid>
		<description><![CDATA[YUI Library(Yahoo!用户界面函数库)是Yahoo Developer Network(Yahoo!开发者网络)创建的一组使用JavaScript所制作出的工具和控制项组合，用来建立丰富且具有互动性，并且以DOM程式、DHTML和 Ajax等技术为基础的网站应用程序。 YUI函数库还包含了一些核心的CSS资源。 YUI函数库中的所有组件都基于BSD条款以开放原始码的形式公开发布，并且提供给所有人免费使用。 立即下载YUI 2.5.2版,包含完整的API文件，以及超过200个的丰富例子。 浏览器支持分级表：详细的描述了在开发YUI函数库时对于浏览器支援性的看法。浏览器支持分级表提供了一种清楚的方式，提供在开发互动介面时能够得知浏览器的支持性，并且能够依此而判断是否需要放弃支持某种版本的浏览器。 YUI速查表：能够快速查阅每一个组件的主要方法、属性和使用语法。当写程式遭遇到问题时，通常查阅速查表会比开启浏览器重新阅读文件和范例更快获得解答。而且速查表还能带给你一些前所未知的新发现。 这些一页的查询字典并没有包含全部的内容，但将它放在手边将会非常有用。 (速查表目前提供了所有YUI工具、绝大部分控制项以及YUI CSS基础的内容。) 以上内容基本都是出是官方的介绍，但对于想要做出好的网页表现又想偷懒的同时，YUI是一个很好的解决方案,比如我记得以前同事模仿iGoogle做拖动效果,写代码加调试几乎用了大半个月的时间才做的勉强相似,其实iGoogle就是Power by YUI :) ,如果当时就从这里开始,不知道会节省多少时间。 先介绍到这里，来看一则YUI运用的实例吧！]]></description>
			<content:encoded><![CDATA[<p><a title="" target="_blank" href="http://developer.yahoo.com/yui/">YUI Library</a>(Yahoo!用户界面函数库)是<a title="" target="_blank" href="http://developer.yahoo.com/">Yahoo Developer Network</a>(Yahoo!开发者网络)创建的一组使用JavaScript所制作出的工具和控制项组合，用来建立丰富且具有互动性，并且以DOM程式、DHTML和 Ajax等技术为基础的网站应用程序。 YUI函数库还包含了一些核心的CSS资源。 YUI函数库中的所有组件都基于<a title="" target="_blank" href="http://developer.yahoo.com/yui/license.html">BSD条款</a>以开放原始码的形式公开发布，并且提供给所有人免费使用。</p>
<p><a href="http://developer.yahoo.com/yui/download/"><img class="yui-img" src="http://us.i1.yimg.com/us.yimg.com/i/ydn/yuiweb/download_1.gif" alt="Download YUI" /></a></p>
<p><a title="" target="_blank" href="http://developer.yahoo.com/yui/download/">立即下载YUI 2.5.2版</a>,包含<a title="" target="_blank" href="http://developer.yahoo.com/yui/docs/">完整的API文件</a>，以及<a title="" target="_blank" href="http://developer.yahoo.com/yui/examples/">超过200个的丰富例子</a>。</p>
<p><a title="" target="_blank" href="http://developer.yahoo.com/yui/articles/gbs/">浏览器支持分级表</a>：详细的描述了在开发YUI函数库时对于浏览器支援性的看法。浏览器支持分级表提供了一种清楚的方式，提供在开发互动介面时能够得知浏览器的支持性，并且能够依此而判断是否需要放弃支持某种版本的浏览器。</p>
<p><a title="" target="_blank" href="http://developer.yahoo.com/yui/docs/assets/cheatsheets.zip">YUI速查表</a>：能够快速查阅每一个组件的主要方法、属性和使用语法。当写程式遭遇到问题时，通常查阅速查表会比开启浏览器重新阅读文件和范例更快获得解答。而且速查表还能带给你一些前所未知的新发现。<br />
<br />这些一页的查询字典并没有包含全部的内容，但将它放在手边将会非常有用。 (速查表目前提供了所有YUI工具、绝大部分控制项以及YUI CSS基础的内容。)</p>
<p>以上内容基本都是出是官方的介绍，但对于想要做出好的网页表现又想偷懒的同时，YUI是一个很好的解决方案,比如我记得以前同事模仿iGoogle做拖动效果,写代码加调试几乎用了大半个月的时间才做的勉强相似,其实iGoogle就是<a title="" target="" href="http://developer.yahoo.com/yui/poweredby/">Power by YUI</a> :) ,如果当时就从这里开始,不知道会节省多少时间。</p>
<p>先介绍到这里，来看<a title="" target="" href="http://blog.doskoi.cn/2008/08/use-yui-logger-debug-javascript-via-bookmarklet.html">一则YUI运用的实例</a>吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2008/08/yui-introduce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>database.yml error on /usr/lib/ruby/1.8/yaml.rb:133:in `load&#8217;</title>
		<link>http://sh3ng.com/2008/08/databaseyml-error-on-usrlibruby18yamlrb133in-load/</link>
		<comments>http://sh3ng.com/2008/08/databaseyml-error-on-usrlibruby18yamlrb133in-load/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 16:23:33 +0000</pubDate>
		<dc:creator>黑眼圈</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[syntax]]></category>
		<category><![CDATA[yml]]></category>

		<guid isPermaLink="false">http://doskoi.cn/?p=6</guid>
		<description><![CDATA[Rails默认创建的数据库是sqlite3的,我修改database.yml的配置为mysql以后,启动mongrel mongrel_rails start -p 12001 -d -e development -P log/mongrel.pid 服务都一直无法启动,而且而且无论怎么修改都是，查看mongrel的日志文件发现总是出现如下错误： /usr/lib/ruby/1.8/yaml.rb:133:in `load&#8216;: syntax error on line x, col x: ` 错误的配置节点名&#8217; (ArgumentError) &#8230;但是出现错误的地方在检查过后确实都没任何问题,最后改的只剩development的最基础配置问题依旧，发现问题竟然在密码，我是使用cpanel的Password Generator自动生成的密码，密码最后的一个特殊符号引发了整个错误，看来这是database.yml的内部符号. Tip:自己写database.yml的时候要一定要使用缩进的结构。]]></description>
			<content:encoded><![CDATA[<p>Rails默认创建的数据库是sqlite3的,我修改database.yml的配置为mysql以后,启动mongrel</p>
<pre>mongrel_rails start -p 12001 -d -e development -P log/mongrel.pid</pre>
<p>服务都一直无法启动,而且而且无论怎么修改都是，查看mongrel的日志文件发现总是出现如下错误：</p>
<p> /<i>usr/lib/ruby/1.8/yaml.rb:133:in</i> `<i>load</i>&#8216;: <i>syntax error on line</i> x, <i>col x</i>: ` 错误的配置节点名&#8217; (<i>ArgumentError</i>) <b>&#8230;<br /></b><br />但是出现错误的地方在检查过后确实都没任何问题,最后改的只剩development的最基础配置问题依旧，发现问题竟然在密码，我是使用cpanel的Password Generator自动生成的密码，密码最后的一个特殊符号引发了整个错误，看来这是database.yml的内部符号.</p>
<p>Tip:自己写database.yml的时候要一定要使用缩进的结构。</p>
]]></content:encoded>
			<wfw:commentRss>http://sh3ng.com/2008/08/databaseyml-error-on-usrlibruby18yamlrb133in-load/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
