<?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>ye's world</title>
	<atom:link href="http://www.yegq.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yegq.org</link>
	<description>谁用谁闪亮</description>
	<lastBuildDate>Thu, 08 Apr 2010 04:05:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>讪君卖直</title>
		<link>http://www.yegq.org/archives/200</link>
		<comments>http://www.yegq.org/archives/200#comments</comments>
		<pubDate>Thu, 08 Apr 2010 03:58:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[随感]]></category>

		<guid isPermaLink="false">http://www.yegq.org/?p=200</guid>
		<description><![CDATA[有了Onyx Boox 60，常读书。
近日读《万历十五年》，读到邹元标屡参张居正那一段，记住一个词“讪君卖直”。
直白的意思是指臣子向君上直谏，以道德礼教发难，令其难堪，以此显示自己的忠直。这种行为可以作为一种政治资本。
万历的确聪明，看透这种臣子的本质。
联想起现代社会的公司体制，记得在第一财经周刊上看过一段语录，某公司CEO对下属说
“如果你总是同意我的决断，那么我们当中必定有一个人是多余的，你认为多余的人是你还是我？”
古今中外， 每个体制内的人都为自己的利益说话，这并没有错的。然而各得到不同的下场，区别在于你遇到什么类型的BOSS
PS，豆瓣上关于讪君卖直的讨论
]]></description>
			<content:encoded><![CDATA[<p>有了<a title="onyx boox e-ink reader" href="http://www.onyx-international.com/" target="_blank">Onyx Boox 60</a>，常读书。</p>
<p>近日读《万历十五年》，读到邹元标屡参张居正那一段，记住一个词“讪君卖直”。<br />
直白的意思是指臣子向君上直谏，以道德礼教发难，令其难堪，以此显示自己的忠直。这种行为可以作为一种政治资本。</p>
<p>万历的确聪明，看透这种臣子的本质。</p>
<p>联想起现代社会的公司体制，记得在第一财经周刊上看过一段语录，某公司CEO对下属说<br />
“如果你总是同意我的决断，那么我们当中必定有一个人是多余的，你认为多余的人是你还是我？”</p>
<p>古今中外， 每个体制内的人都为自己的利益说话，这并没有错的。然而各得到不同的下场，区别在于你遇到什么类型的BOSS</p>
<p>PS，豆瓣上关于<a title="忠奸善恶智愚清浊......实际上哪有这么简单" href="http://book.douban.com/review/1031404/" target="_blank">讪君卖直的讨论</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/200/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>转百度孙云丰《Google市侩，我感到恶心》</title>
		<link>http://www.yegq.org/archives/198</link>
		<comments>http://www.yegq.org/archives/198#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:13:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.yegq.org/?p=198</guid>
		<description><![CDATA[百度孙云丰《Google市侩，我感到恶心》
原文出自 http://hi.baidu.com/whomi  （原文已删）
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-转载正文开始&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
google宣称要退出中国，所证明的，恰恰不是市面上的那些g粉所宣称的那样，google是个人权斗士，而刚好反了过来，正好证明google是个市侩分子。
google的首席法律顾问的调调让我感到恶心。因经济利益退出，就直白白的说好了，把自己涂脂抹粉一番，还煞有介事的提到google被中国人攻击，中国异议分子的Gmail信箱被攻击，把这些事情作为退出中国的铺垫，这种论调是侮辱中国普通老百姓的智商，但还真有可能迎合那帮目空一切，但从未到过中国、对中国没有丝毫了解，却又喜欢对中国说三道四的西方人的假想。
只提一个假设，如果谷歌占据了中国80%的搜索市场份额，google的高管，还会这么高调的宣称要do no evil，从中国退出吗？
整个事情给我的唯一感受，就是恶心。
————–
以上是作为一个曾经的忠实google用户而说的，和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G粉的兄弟，请勿跟帖瞎喷，你们根本不懂什么叫搜索引擎，什么叫自由人权。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-转载正文结束&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
此鸟已经删除了这篇blog，但如此脑残的言论有必要记录下来，以供后人继续喷。
]]></description>
			<content:encoded><![CDATA[<p><strong>百度孙云丰《Google市侩，我感到恶心》</strong></p>
<p>原文出自 http://hi.baidu.com/whomi  （原文已删）</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-转载正文开始&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>google宣称要退出中国，所证明的，恰恰不是市面上的那些g粉所宣称的那样，google是个人权斗士，而刚好反了过来，正好证明google是个市侩分子。</p>
<p>google的首席法律顾问的调调让我感到恶心。因经济利益退出，就直白白的说好了，把自己涂脂抹粉一番，还煞有介事的提到google被中国人攻击，中国异议分子的Gmail信箱被攻击，把这些事情作为退出中国的铺垫，这种论调是侮辱中国普通老百姓的智商，但还真有可能迎合那帮目空一切，但从未到过中国、对中国没有丝毫了解，却又喜欢对中国说三道四的西方人的假想。</p>
<p>只提一个假设，如果谷歌占据了中国80%的搜索市场份额，google的高管，还会这么高调的宣称要do no evil，从中国退出吗？</p>
<p>整个事情给我的唯一感受，就是恶心。<br />
————–<br />
以上是作为一个曾经的忠实google用户而说的，和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G粉的兄弟，请勿跟帖瞎喷，你们根本不懂什么叫搜索引擎，什么叫自由人权。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-转载正文结束&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>此鸟已经删除了这篇blog，但如此脑残的言论有必要记录下来，以供后人继续喷。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/198/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级顺利</title>
		<link>http://www.yegq.org/archives/196</link>
		<comments>http://www.yegq.org/archives/196#comments</comments>
		<pubDate>Wed, 04 Nov 2009 10:38:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术活]]></category>

		<guid isPermaLink="false">http://www.yegq.org/?p=196</guid>
		<description><![CDATA[很快：

备份整个数据库
下载最新版，2.8.5
上传一个/index.html，发个升级期间的公告。（多此一举了，我blog没人看的 &#62;_&#60;）
解压上传，覆盖掉原来的文件和目录。要注意看看升级文件里面的/wp-content/没有包含邪恶的东西。
访问/wp-admin/upgrade.php，按提示升级一下数据库。
好了，真正动手干活的时间不到5分钟。前端看起来一切没变，模板兼容性好。
后台的确好用的多，在产品设计上下了苦工的。

]]></description>
			<content:encoded><![CDATA[<p>很快：</p>
<ul>
<li>备份整个数据库</li>
<li>下载最新版，2.8.5</li>
<li>上传一个/index.html，发个升级期间的公告。（多此一举了，我blog没人看的 &gt;_&lt;）</li>
<li>解压上传，覆盖掉原来的文件和目录。要注意看看升级文件里面的/wp-content/没有包含邪恶的东西。</li>
<li>访问<code>/wp-admin/upgrade.php，按提示升级一下数据库。</code></li>
<li>好了，真正动手干活的时间不到5分钟。前端看起来一切没变，模板兼容性好。</li>
<li>后台的确好用的多，在产品设计上下了苦工的。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/196/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>准备升级wordpress到2.8.5</title>
		<link>http://www.yegq.org/archives/193</link>
		<comments>http://www.yegq.org/archives/193#comments</comments>
		<pubDate>Wed, 04 Nov 2009 10:09:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.yegq.org/?p=193</guid>
		<description><![CDATA[趁小爬虫还在执行任务的间隙，升级一下，预计半个小时以内。
]]></description>
			<content:encoded><![CDATA[<p>趁小爬虫还在执行任务的间隙，升级一下，预计半个小时以内。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/193/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>我是一只小爬虫</title>
		<link>http://www.yegq.org/archives/186</link>
		<comments>http://www.yegq.org/archives/186#comments</comments>
		<pubDate>Sun, 01 Nov 2009 19:05:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术活]]></category>
		<category><![CDATA[BeautifulSoup]]></category>
		<category><![CDATA[crawler]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.yegq.org/?p=186</guid>
		<description><![CDATA[不是我，是它。刚刚放出了一只小爬虫，完成了任务。它爬了4,411个页面，有5个因为http连接超时而不成功，都是外国的站点，这个比较正常。算下来成功率很高的了。
看了一下log，不同站点响应速度有差别，总体来说，每个页面抓取时间平均约为2秒钟；接着分析页面平均花了0.7秒，比较欣喜，在这些小规模应用上，BeautifulSoup 的效能完全令人满意的；然后其余的数据库操作大概用了半秒钟。
总体来说，一个页面抓取和分析和数据存储任务大概就要3.2秒。
再进一步总结：

python是很适合做这类光荣的小爬虫任务的。
BeautifulSoup 真的很方便，我一口气写了30多个站点的抓取规则，一开始一边写一边祈祷这日子赶快结束，写到后来发现还是觉得不算无趣的。那种你看一眼html代码就知道应该如何写并且一下手就准确无误的感觉是很爽的。要知道有些网站的html写的很变态，上个世纪的html风格都有。
GAE好多限制，不得不将代码重构了一遍，迁移到纯粹的python环境下。关键是好多个数据表，他们之间关系复杂，用关系数据库（比如Mysql）最好。GAE上好不容易处理，都快把我弄疯掉了，比如那个在SQL里面很容易处理的PK/AI啊，GAE得自己写个function去保证唯一并自增，真是很傻的
小型的web应用，还是PHP最方便。信手拈来，想怎么搞就这么搞，写PHP代码都不用构思的，心里想着目标和路径，一气呵成，连debug都省了。

爬虫，就是crawler。比较恶心蜘蛛，还是称之为爬虫好，当然，更温情的是叫机器人。
PS，百度最恶心了，它家的爬虫叫baiduspider，
google的最好，所以他叫googlebot
yahoo的最恐怖，叫yahoo slurp（吸血鬼啊！？）
bing的想向google大神发起冲击，所以也叫bot，bing MSNBot （呃，不过貌似在破烂的msn search年代就用bot这个称谓）
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;华丽之分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
不知不觉已经凌晨了，外面有人在吵架，上海人平常说话就像吵架，吵架的时候就像拆楼。不过我一定睡的着，你就继续吵吧～
并且呢，上海人吵闹似乎都乐于摆出来给大家观瞻的，例如那个叫新老娘舅的节目
]]></description>
			<content:encoded><![CDATA[<p>不是我，是它。刚刚放出了一只小爬虫，完成了任务。它爬了4,411个页面，有5个因为http连接超时而不成功，都是外国的站点，这个比较正常。算下来成功率很高的了。</p>
<p>看了一下log，不同站点响应速度有差别，总体来说，每个页面抓取时间平均约为2秒钟；接着分析页面平均花了0.7秒，比较欣喜，在这些小规模应用上，<a title="BeautifulSoup" href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a> 的效能完全令人满意的；然后其余的数据库操作大概用了半秒钟。</p>
<p>总体来说，一个页面抓取和分析和数据存储任务大概就要3.2秒。</p>
<p>再进一步总结：</p>
<ul>
<li><a title="python" href="http://www.python.org/" target="_blank">python</a>是很适合做这类光荣的小爬虫任务的。</li>
<li><a title="BeautifulSoup" href="http://www.crummy.com/software/BeautifulSoup/" target="_blank">BeautifulSoup</a> 真的很方便，我一口气写了30多个站点的抓取规则，一开始一边写一边祈祷这日子赶快结束，写到后来发现还是觉得不算无趣的。那种你看一眼html代码就知道应该如何写并且一下手就准确无误的感觉是很爽的。要知道有些网站的html写的很变态，上个世纪的html风格都有。</li>
<li><a title="google app engine" href="http://code.google.com/appengine/" target="_blank">GAE</a>好多限制，不得不将代码重构了一遍，迁移到纯粹的<a title="python" href="http://www.python.org/" target="_blank">python</a>环境下。关键是好多个数据表，他们之间关系复杂，用关系数据库（比如<a title="mysql" href="http://www.mysql.com" target="_blank">Mysql</a>）最好。<a title="google app engine" href="http://code.google.com/appengine/" target="_blank">GAE</a>上好不容易处理，都快把我弄疯掉了，比如那个在SQL里面很容易处理的PK/AI啊，GAE得自己写个function去保证唯一并自增，真是很傻的</li>
<li>小型的web应用，还是<a title="php" href="http://www.php.net" target="_blank">PHP</a>最方便。信手拈来，想怎么搞就这么搞，写<a title="php" href="http://www.php.net" target="_blank">PHP</a>代码都不用构思的，心里想着目标和路径，一气呵成，连debug都省了。</li>
</ul>
<p>爬虫，就是crawler。比较恶心蜘蛛，还是称之为爬虫好，当然，更温情的是叫机器人。</p>
<p>PS，百度最恶心了，它家的爬虫叫baiduspider，</p>
<p>google的最好，所以他叫googlebot</p>
<p>yahoo的最恐怖，叫yahoo slurp（吸血鬼啊！？）</p>
<p>bing的想向google大神发起冲击，所以也叫bot，bing MSNBot （呃，不过貌似在破烂的msn search年代就用bot这个称谓）</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;华丽之分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>不知不觉已经凌晨了，外面有人在吵架，上海人平常说话就像吵架，吵架的时候就像拆楼。不过我一定睡的着，你就继续吵吧～</p>
<p>并且呢，上海人吵闹似乎都乐于摆出来给大家观瞻的，例如那个叫新老娘舅的节目</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/186/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>解决phpMyAdmin的完整显示视图</title>
		<link>http://www.yegq.org/archives/177</link>
		<comments>http://www.yegq.org/archives/177#comments</comments>
		<pubDate>Sun, 01 Nov 2009 18:10:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[技术活]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[pma]]></category>

		<guid isPermaLink="false">http://www.yegq.org/?p=177</guid>
		<description><![CDATA[更新一篇吧，不谈风月，也不谈国事。
不知何时开始，PMA默认不显示以binary存放的数据。而我定义char/varchar/text等类型的时候，又喜欢用utf8_bin。结果只有int和date/time类型的数据会显示，其他都提示作 “[BINARY/BLOB - xx字节]”，那个郁闷啊，老手动的选options，翻翻sf上pma的issue，有个patch，但打上去后发现不可用，半年有多了，可能已经落后。
自己动手。F12呼出神器firebug，看到POST到sql.php去的相关数据有display_text，display_binary ， display_blob三项，然后找到关键代码文件 /librarier/display_tbl.lib.php，发现可以通过session获取优先设置，完全可以无视这三项传进来的参数。
好吧，我就不管你三七二十一了，直接加上三行：
$_SESSION['userconf']['display_text'] = &#8216;F&#8217;;
$_SESSION['userconf']['display_binary'] = &#8216;ON&#8217;;
$_SESSION['userconf']['display_blob'] = &#8216;ON&#8217;;
全好了。
]]></description>
			<content:encoded><![CDATA[<p>更新一篇吧，不谈风月，也不谈国事。</p>
<p>不知何时开始，PMA默认不显示以binary存放的数据。而我定义char/varchar/text等类型的时候，又喜欢用utf8_bin。结果只有int和date/time类型的数据会显示，其他都提示作 “[BINARY/BLOB - xx字节]”，那个郁闷啊，老手动的选options，翻翻sf上pma的issue，有个patch，但打上去后发现不可用，半年有多了，可能已经落后。</p>
<p>自己动手。F12呼出神器firebug，看到POST到sql.php去的相关数据有display_text，display_binary ， display_blob三项，然后找到关键代码文件 /librarier/display_tbl.lib.php，发现可以通过session获取优先设置，完全可以无视这三项传进来的参数。</p>
<p>好吧，我就不管你三七二十一了，直接加上三行：</p>
<blockquote><p>$_SESSION['userconf']['display_text'] = &#8216;F&#8217;;<br />
$_SESSION['userconf']['display_binary'] = &#8216;ON&#8217;;<br />
$_SESSION['userconf']['display_blob'] = &#8216;ON&#8217;;</p></blockquote>
<p>全好了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/177/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>称你一声“范老师”</title>
		<link>http://www.yegq.org/archives/165</link>
		<comments>http://www.yegq.org/archives/165#comments</comments>
		<pubDate>Mon, 16 Jun 2008 06:59:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<guid isPermaLink="false">http://yegq.yeax.com/?p=165</guid>
		<description><![CDATA[你用你的躯体鞭策着中国的社会革新。
Runner Fan不再适合称呼你，尊称你一声范老师。
如你所说，那不是公德，完全是一群人的私德而已。
]]></description>
			<content:encoded><![CDATA[<p>你用你的躯体鞭策着中国的社会革新。<br />
Runner Fan不再适合称呼你，尊称你一声范老师。</p>
<p>如你所说，那不是公德，完全是一群人的私德而已。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/165/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>伟大的T39挂了</title>
		<link>http://www.yegq.org/archives/163</link>
		<comments>http://www.yegq.org/archives/163#comments</comments>
		<pubDate>Mon, 28 Jan 2008 06:06:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://yegq.yeax.com/?p=163</guid>
		<description><![CDATA[好久不写blog，我的T39挂了。
爱立信时代最伟大的一个机器，在被我折磨了6年后，挂了。
屏幕上没显示，但还是可以接、打电话，收、发短信。怎么操作？用了那么多年，完全不用看键盘，所有常用的功能，都能连续按几个数字组合去到菜单。打字更是简单嘞，盲打。
直到今天早上，关机了的它，还是非常努力的在响原先设定的闹铃。。。。这是怎样一种境界啊？
上班写blog，罪过罪过。。。
]]></description>
			<content:encoded><![CDATA[<p>好久不写blog，我的T39挂了。<br />
爱立信时代最伟大的一个机器，在被我折磨了6年后，挂了。</p>
<p>屏幕上没显示，但还是可以接、打电话，收、发短信。怎么操作？用了那么多年，完全不用看键盘，所有常用的功能，都能连续按几个数字组合去到菜单。打字更是简单嘞，盲打。</p>
<p>直到今天早上，关机了的它，还是非常努力的在响原先设定的闹铃。。。。这是怎样一种境界啊？</p>
<p>上班写blog，罪过罪过。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/163/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iphone database structure</title>
		<link>http://www.yegq.org/archives/162</link>
		<comments>http://www.yegq.org/archives/162#comments</comments>
		<pubDate>Mon, 24 Sep 2007 10:46:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://yegq.yeax.com/?p=162</guid>
		<description><![CDATA[iphone database structure
/*
* iphone database structure
* @author zye
* @update 20070924
* @version 0.1
* @url http://yegq.yeax.com/?p=162
* @copyleft 此文档可随意分发。
*/
一、AddressBook.sqlitedb 通讯录数据库
location: /private/var/root/Library/AddressBook/AddressBook.sqlitedb
1.ABGroup  联系人分组信息
ROWID:组ID,自增PK
Name:组名
2.ABGroupChanges 分组信息更新
record:
type:
3.ABGroupMembers 组联系人
UID: PK
group_id：组ID,对应ABGroup.ROWID
member_type: 组员类别
member_id: 组员(联系人)ID,对应ABPerson.ROWID
注意:UNIQUE(group_id, member_type, member_id)
 4.ABMultiValue 存储联系人的各种联系方式
UID:  PK
record_id: 联系人ID,对应ABPerson.ROWID
property: 属性值. 3.电话; 4.email; 待补充&#8230;
identifier: 标识符.0,1,2,3,4,目前所知用于排序
label: 标志值. 1.mobile;2.home;3.other; 4.work;5.main  对应ABMultiValueLabel.value
value: 值. 例如一个手机号码13800138000,或一个email地址foo@bar.com
5.ABMultiValueEntry  (未知)
parent_id: (未知)
key: (未知)
value: (未知)
注意:UNIQUE(parent_id, key)
6.ABMultiValueEntryKey (未知)
value: (未知)
注意:UNIQUE(value)
7.ABMultiValueLabel  联系方式标志值列表
value: 见ABMultiValue.label
8.ABPerson
ROWID [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><span style="font-size: large;"><strong>iphone database structure</strong></span></div>
<p>/*<br />
* iphone database structure<br />
* @author zye<br />
* @update 20070924<br />
* @version 0.1<br />
* @url http://yegq.yeax.com/?p=162<br />
* @copyleft 此文档可随意分发。<br />
*/</p>
<p><span style="font-size: medium;"><strong>一、AddressBook.sqlitedb 通讯录数据库</strong></span></p>
<p><strong>location: /private/var/root/Library/AddressBook/AddressBook.sqlitedb</strong></p>
<p><strong>1.ABGroup  联系人分组信息</strong><br />
ROWID:组ID,自增PK<br />
Name:组名</p>
<p><strong>2.ABGroupChanges 分组信息更新</strong><br />
record:<br />
type:</p>
<p><strong>3.ABGroupMembers 组联系人</strong><br />
UID: PK<br />
group_id：组ID,对应ABGroup.ROWID<br />
member_type: 组员类别<br />
member_id: 组员(联系人)ID,对应ABPerson.ROWID<br />
注意:UNIQUE(group_id, member_type, member_id)<br />
<br style="font-weight: bold;" /> <strong>4.ABMultiValue 存储联系人的各种联系方式</strong><br />
UID:  PK<br />
record_id: 联系人ID,对应ABPerson.ROWID<br />
property: 属性值. 3.电话; 4.email; 待补充&#8230;<br />
identifier: 标识符.0,1,2,3,4,目前所知用于排序<br />
label: 标志值. 1.mobile;2.home;3.other; 4.work;5.main  对应ABMultiValueLabel.value<br />
value: 值. 例如一个手机号码13800138000,或一个email地址foo@bar.com</p>
<p><strong>5.ABMultiValueEntry  (未知)</strong><br />
parent_id: (未知)<br />
key: (未知)<br />
value: (未知)<br />
注意:UNIQUE(parent_id, key)</p>
<p><strong>6.ABMultiValueEntryKey (未知)</strong><br />
value: (未知)<br />
注意:UNIQUE(value)</p>
<p><strong>7.ABMultiValueLabel  联系方式标志值列表</strong><br />
value: 见ABMultiValue.label</p>
<p><strong>8.ABPerson</strong><br />
ROWID 自增PK,也是联系人的唯一标识<br />
First 名字<br />
Last 姓<br />
Middle (未定)<br />
FirstPhonetic (未定,貌似留作语音拨号用的)<br />
MiddlePhonetic (未定,貌似留作语音拨号用的)<br />
LastPhonetic (未定,貌似留作语音拨号用的)<br />
Organization 所在公司,组织<br />
Department 所在部门<br />
Note 注释<br />
Kind 未定<br />
Birthday 生日<br />
JobTitle 头衔<br />
Nickname 昵称<br />
Prefix 前缀<br />
Suffix 后缀<br />
FirstSort 排序用(具体未知)<br />
LastSort  排序用(具体未知)<br />
CreationDate 创建时间<br />
ModificationDate 最后修改时间<br />
CompositeNameFallback (未知)</p>
<p><strong>9.ABPersonChanges (未知)</strong><br />
record<br />
type<br />
<br style="font-weight: bold;" /> <strong>10.ABPersonMultiValueDeletes (未知)</strong><br />
record_id<br />
property_id<br />
identifier</p>
<p><strong>11.ABPhoneLastFour 电话号码后四位匹配表</strong><br />
multivalue_id 对应ABMultiValue.UID<br />
value 电话号码后四位</p>
<p><strong>12.ABRecent (未知)</strong><br />
date<br />
name<br />
property<br />
value</p>
<p><strong>13.sorting_first_section_list (未知)</strong><br />
character<br />
number</p>
<p><strong>14.sorting_last_section_list (未知)</strong><br />
character<br />
number</p>
<p><strong>15.sqlite_sequence (用于记录序列)</strong><br />
name:表命,如ABPerson<br />
seq: 最新序列号</p>
<p>&#8211; ==========下面是建表语句==========<br />
CREATE TABLE ABGroup (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT);<br />
CREATE TABLE ABGroupChanges (record INTEGER, type INTEGER);<br />
CREATE TABLE ABGroupMembers (UID INTEGER PRIMARY KEY, group_id INTEGER, member_type INTEGER, member_id INTEGER, UNIQUE(group_id, member_type, member_id));<br />
CREATE TABLE ABMultiValue (UID INTEGER PRIMARY KEY, record_id INTEGER, property INTEGER, identifier INTEGER, label INTEGER, value TEXT);<br />
CREATE TABLE ABMultiValueEntry (parent_id INTEGER, key INTEGER, value TEXT, UNIQUE(parent_id, key));<br />
CREATE TABLE ABMultiValueEntryKey (value TEXT, UNIQUE(value));<br />
CREATE TABLE ABMultiValueLabel (value TEXT, UNIQUE(value));<br />
CREATE TABLE ABPerson (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, First TEXT, Last TEXT, Middle TEXT, FirstPhonetic TEXT, MiddlePhonetic TEXT, LastPhonetic TEXT, Organization TEXT, Department TEXT, Note TEXT, Kind INTEGER, Birthday TEXT, JobTitle TEXT, Nickname TEXT, Prefix TEXT, Suffix TEXT, FirstSort TEXT, LastSort TEXT, CreationDate INTEGER, ModificationDate INTEGER, CompositeNameFallback TEXT);<br />
CREATE TABLE ABPersonChanges (record INTEGER, type INTEGER);<br />
CREATE TABLE ABPersonMultiValueDeletes (record_id INTEGER, property_id INTEGER, identifier INTEGER);<br />
CREATE TABLE ABPhoneLastFour (multivalue_id INTEGER PRIMARY KEY, value TEXT);<br />
CREATE TABLE ABRecent(date INTEGER, name, property INTEGER, value);<br />
CREATE TABLE sorting_first_section_list(character, number, UNIQUE(character));<br />
CREATE TABLE sorting_last_section_list(character, number, UNIQUE(character));<br />
CREATE TABLE sqlite_sequence(name TEXT, seq INTEGER);</p>
<p>&#8211; ==========下面是创建索引==========<br />
CREATE INDEX ABMultiValueRecordIDIndex on ABMultiValue(record_id);<br />
CREATE INDEX ABMultiValueLabelIndex ON ABMultiValue(label);<br />
CREATE INDEX ABMultiValueEntryKeyIndex ON ABMultiValueEntry(key);<br />
CREATE INDEX ABFirstSortIndex on ABPerson(FirstSort);<br />
CREATE INDEX ABLastSortIndex on ABPerson(LastSort);<br />
CREATE INDEX ABPhoneLastFourIndex ON ABPhoneLastFour(value);<br />
CREATE INDEX ABRecent_value_index ON ABRecent(property, value);<br />
CREATE INDEX ABRecent_date_index ON ABRecent(property, date);</p>
<p>&#8211; ==========下面是创建触发器==========<br />
CREATE TRIGGER delete_phone_last_four AFTER DELETE ON ABMultiValue<br />
BEGIN<br />
DELETE FROM ABPhoneLastFour WHERE multivalue_id = OLD.UID;<br />
END;</p>
<p>CREATE TRIGGER sorting_first_prefix_trigger AFTER INSERT ON ABPerson<br />
BEGIN<br />
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(NEW.FirstSort, &#8216;~&#8217;), 1, 1), 1 + IFNULL((SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(NEW.FirstSort, &#8216;~&#8217;), 1, 1)), 0));<br />
END;</p>
<p>CREATE TRIGGER update_first_prefix_trigger AFTER UPDATE ON ABPerson<br />
BEGIN<br />
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(OLD.FirstSort, &#8216;~&#8217;), 1, 1), (SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(OLD.FirstSort, &#8216;~&#8217;), 1, 1)) &#8211; 1);<br />
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(NEW.FirstSort, &#8216;~&#8217;), 1, 1), 1 + IFNULL((SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(NEW.FirstSort, &#8216;~&#8217;), 1, 1)), 0));<br />
END;</p>
<p>CREATE TRIGGER delete_first_prefix_trigger AFTER DELETE ON ABPerson<br />
BEGIN<br />
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(OLD.FirstSort, &#8216;~&#8217;), 1, 1), (SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(OLD.FirstSort, &#8216;~&#8217;), 1, 1)) &#8211; 1);<br />
END;</p>
<p>CREATE TRIGGER sorting_last_prefix_trigger AFTER INSERT ON ABPerson<br />
BEGIN<br />
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(NEW.LastSort, &#8216;~&#8217;), 1, 1), 1 + IFNULL((SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(NEW.LastSort, &#8216;~&#8217;), 1, 1)), 0));<br />
END;</p>
<p>CREATE TRIGGER update_last_prefix_trigger AFTER UPDATE ON ABPerson<br />
BEGIN<br />
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(OLD.LastSort, &#8216;~&#8217;), 1, 1), (SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(OLD.LastSort, &#8216;~&#8217;), 1, 1)) &#8211; 1);<br />
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(NEW.LastSort, &#8216;~&#8217;), 1, 1), 1 + IFNULL((SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(NEW.LastSort, &#8216;~&#8217;), 1, 1)), 0));<br />
END;</p>
<p>CREATE TRIGGER delete_last_prefix_trigger AFTER DELETE ON ABPerson<br />
BEGIN<br />
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(Old.LastSort, &#8216;~&#8217;), 1, 1), (SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(Old.LastSort, &#8216;~&#8217;), 1, 1)) &#8211; 1);<br />
END;</p>
<p><span style="font-size: medium;"><strong>二、notes.db  记事本数据库</strong><br style="font-weight: bold;" /></span><br />
<strong>location: /private/var/root/Library/Notes/notes.db</strong></p>
<p><strong>1.Note 摘要信息记录表</strong><br />
creation_date: 创建时间<br />
title: 标题<br />
summary: 摘要</p>
<p><strong>2.note_bodies 详细信息</strong><br />
note_id:  note ID<br />
data: 记事内容，包含标题</p>
<p>&#8211; ==========下面是建表语句==========<br />
CREATE TABLE Note (creation_date INTEGER, title TEXT, summary TEXT);<br />
CREATE TABLE note_bodies (note_id INTEGER, data, UNIQUE(note_id));</p>
<p>&#8211; ==========下面是创建触发器==========<br />
CREATE TRIGGER delete_note_bodies AFTER DELETE ON Note<br />
BEGIN<br />
DELETE FROM note_bodies WHERE note_id = OLD.ROWID;<br />
END;</p>
<p><span style="font-size: medium;"><strong>三、sms.db  短信数据库</strong></span></p>
<p><strong>location: /private/var/root/Library/SMS/sms.db</strong></p>
<p><strong>1.message 短信表</strong><br />
ROWID: 自增PK<br />
address: 对方手机号码(+86)<br />
date: 时间<br />
text: 内容<br />
flags: 标记. 2.收到的;3.自己发送的<br />
replace: (未知)<br />
svc_center: (未知)</p>
<p>&#8211; ==========下面是建表语句==========<br />
CREATE TABLE message (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, address TEXT, date INTEGER, text TEXT, flags INTEGER, replace INTEGER, svc_center TEXT);</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/162/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>anti spam</title>
		<link>http://www.yegq.org/archives/161</link>
		<comments>http://www.yegq.org/archives/161#comments</comments>
		<pubDate>Sun, 13 May 2007 13:05:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<guid isPermaLink="false">http://yegq.yeax.com/?p=161</guid>
		<description><![CDATA[加了个anti spam plugin
让世界清净下来
什么用户体验，全当放屁
]]></description>
			<content:encoded><![CDATA[<p>加了个anti spam plugin<br />
让世界清净下来<br />
什么用户体验，全当放屁</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yegq.org/archives/161/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
