Archive for the ‘Uncategorized’ category

转百度孙云丰《Google市侩,我感到恶心》

January 13th, 2010

百度孙云丰《Google市侩,我感到恶心》

原文出自 http://hi.baidu.com/whomi  (原文已删)

———————-转载正文开始—————————–

google宣称要退出中国,所证明的,恰恰不是市面上的那些g粉所宣称的那样,google是个人权斗士,而刚好反了过来,正好证明google是个市侩分子。

google的首席法律顾问的调调让我感到恶心。因经济利益退出,就直白白的说好了,把自己涂脂抹粉一番,还煞有介事的提到google被中国人攻击,中国异议分子的Gmail信箱被攻击,把这些事情作为退出中国的铺垫,这种论调是侮辱中国普通老百姓的智商,但还真有可能迎合那帮目空一切,但从未到过中国、对中国没有丝毫了解,却又喜欢对中国说三道四的西方人的假想。

只提一个假设,如果谷歌占据了中国80%的搜索市场份额,google的高管,还会这么高调的宣称要do no evil,从中国退出吗?

整个事情给我的唯一感受,就是恶心。
————–
以上是作为一个曾经的忠实google用户而说的,和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G粉的兄弟,请勿跟帖瞎喷,你们根本不懂什么叫搜索引擎,什么叫自由人权。

———————-转载正文结束—————————–

此鸟已经删除了这篇blog,但如此脑残的言论有必要记录下来,以供后人继续喷。

准备升级wordpress到2.8.5

November 4th, 2009

趁小爬虫还在执行任务的间隙,升级一下,预计半个小时以内。

伟大的T39挂了

January 28th, 2008

好久不写blog,我的T39挂了。
爱立信时代最伟大的一个机器,在被我折磨了6年后,挂了。

屏幕上没显示,但还是可以接、打电话,收、发短信。怎么操作?用了那么多年,完全不用看键盘,所有常用的功能,都能连续按几个数字组合去到菜单。打字更是简单嘞,盲打。

直到今天早上,关机了的它,还是非常努力的在响原先设定的闹铃。。。。这是怎样一种境界啊?

上班写blog,罪过罪过。。。

iphone database structure

September 25th, 2007
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; 待补充…
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 自增PK,也是联系人的唯一标识
First 名字
Last 姓
Middle (未定)
FirstPhonetic (未定,貌似留作语音拨号用的)
MiddlePhonetic (未定,貌似留作语音拨号用的)
LastPhonetic (未定,貌似留作语音拨号用的)
Organization 所在公司,组织
Department 所在部门
Note 注释
Kind 未定
Birthday 生日
JobTitle 头衔
Nickname 昵称
Prefix 前缀
Suffix 后缀
FirstSort 排序用(具体未知)
LastSort 排序用(具体未知)
CreationDate 创建时间
ModificationDate 最后修改时间
CompositeNameFallback (未知)

9.ABPersonChanges (未知)
record
type

10.ABPersonMultiValueDeletes (未知)
record_id
property_id
identifier

11.ABPhoneLastFour 电话号码后四位匹配表
multivalue_id 对应ABMultiValue.UID
value 电话号码后四位

12.ABRecent (未知)
date
name
property
value

13.sorting_first_section_list (未知)
character
number

14.sorting_last_section_list (未知)
character
number

15.sqlite_sequence (用于记录序列)
name:表命,如ABPerson
seq: 最新序列号

– ==========下面是建表语句==========
CREATE TABLE ABGroup (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT);
CREATE TABLE ABGroupChanges (record INTEGER, type INTEGER);
CREATE TABLE ABGroupMembers (UID INTEGER PRIMARY KEY, group_id INTEGER, member_type INTEGER, member_id INTEGER, UNIQUE(group_id, member_type, member_id));
CREATE TABLE ABMultiValue (UID INTEGER PRIMARY KEY, record_id INTEGER, property INTEGER, identifier INTEGER, label INTEGER, value TEXT);
CREATE TABLE ABMultiValueEntry (parent_id INTEGER, key INTEGER, value TEXT, UNIQUE(parent_id, key));
CREATE TABLE ABMultiValueEntryKey (value TEXT, UNIQUE(value));
CREATE TABLE ABMultiValueLabel (value TEXT, UNIQUE(value));
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);
CREATE TABLE ABPersonChanges (record INTEGER, type INTEGER);
CREATE TABLE ABPersonMultiValueDeletes (record_id INTEGER, property_id INTEGER, identifier INTEGER);
CREATE TABLE ABPhoneLastFour (multivalue_id INTEGER PRIMARY KEY, value TEXT);
CREATE TABLE ABRecent(date INTEGER, name, property INTEGER, value);
CREATE TABLE sorting_first_section_list(character, number, UNIQUE(character));
CREATE TABLE sorting_last_section_list(character, number, UNIQUE(character));
CREATE TABLE sqlite_sequence(name TEXT, seq INTEGER);

– ==========下面是创建索引==========
CREATE INDEX ABMultiValueRecordIDIndex on ABMultiValue(record_id);
CREATE INDEX ABMultiValueLabelIndex ON ABMultiValue(label);
CREATE INDEX ABMultiValueEntryKeyIndex ON ABMultiValueEntry(key);
CREATE INDEX ABFirstSortIndex on ABPerson(FirstSort);
CREATE INDEX ABLastSortIndex on ABPerson(LastSort);
CREATE INDEX ABPhoneLastFourIndex ON ABPhoneLastFour(value);
CREATE INDEX ABRecent_value_index ON ABRecent(property, value);
CREATE INDEX ABRecent_date_index ON ABRecent(property, date);

– ==========下面是创建触发器==========
CREATE TRIGGER delete_phone_last_four AFTER DELETE ON ABMultiValue
BEGIN
DELETE FROM ABPhoneLastFour WHERE multivalue_id = OLD.UID;
END;

CREATE TRIGGER sorting_first_prefix_trigger AFTER INSERT ON ABPerson
BEGIN
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1), 1 + IFNULL((SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1)), 0));
END;

CREATE TRIGGER update_first_prefix_trigger AFTER UPDATE ON ABPerson
BEGIN
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1), (SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1)) – 1);
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1), 1 + IFNULL((SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(NEW.FirstSort, ‘~’), 1, 1)), 0));
END;

CREATE TRIGGER delete_first_prefix_trigger AFTER DELETE ON ABPerson
BEGIN
INSERT OR REPLACE INTO sorting_first_section_list VALUES(substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1), (SELECT number from sorting_first_section_list WHERE character = substr(IFNULL(OLD.FirstSort, ‘~’), 1, 1)) – 1);
END;

CREATE TRIGGER sorting_last_prefix_trigger AFTER INSERT ON ABPerson
BEGIN
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(NEW.LastSort, ‘~’), 1, 1), 1 + IFNULL((SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(NEW.LastSort, ‘~’), 1, 1)), 0));
END;

CREATE TRIGGER update_last_prefix_trigger AFTER UPDATE ON ABPerson
BEGIN
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(OLD.LastSort, ‘~’), 1, 1), (SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(OLD.LastSort, ‘~’), 1, 1)) – 1);
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(NEW.LastSort, ‘~’), 1, 1), 1 + IFNULL((SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(NEW.LastSort, ‘~’), 1, 1)), 0));
END;

CREATE TRIGGER delete_last_prefix_trigger AFTER DELETE ON ABPerson
BEGIN
INSERT OR REPLACE INTO sorting_last_section_list VALUES(substr(IFNULL(Old.LastSort, ‘~’), 1, 1), (SELECT number from sorting_last_section_list WHERE character = substr(IFNULL(Old.LastSort, ‘~’), 1, 1)) – 1);
END;

二、notes.db 记事本数据库

location: /private/var/root/Library/Notes/notes.db

1.Note 摘要信息记录表
creation_date: 创建时间
title: 标题
summary: 摘要

2.note_bodies 详细信息
note_id: note ID
data: 记事内容,包含标题

– ==========下面是建表语句==========
CREATE TABLE Note (creation_date INTEGER, title TEXT, summary TEXT);
CREATE TABLE note_bodies (note_id INTEGER, data, UNIQUE(note_id));

– ==========下面是创建触发器==========
CREATE TRIGGER delete_note_bodies AFTER DELETE ON Note
BEGIN
DELETE FROM note_bodies WHERE note_id = OLD.ROWID;
END;

三、sms.db 短信数据库

location: /private/var/root/Library/SMS/sms.db

1.message 短信表
ROWID: 自增PK
address: 对方手机号码(+86)
date: 时间
text: 内容
flags: 标记. 2.收到的;3.自己发送的
replace: (未知)
svc_center: (未知)

– ==========下面是建表语句==========
CREATE TABLE message (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, address TEXT, date INTEGER, text TEXT, flags INTEGER, replace INTEGER, svc_center TEXT);

身份证号码查询

January 5th, 2005

身份证号码查询
文章作者: 0
文章来源: http://www.33d9.com/doc/article/655.html

转:javascript中substr和substring的区别

January 5th, 2005

javascript中substr和substring的区别
作者:風雲 (2003年12月25日 11點30分16秒)
来源:http://8f6.com

str.substr(a,b):從字符串str中第a個字符開始向後讀取b個字符。

str.substring(a,b):從字符串str中第a個字符開始,讀到第b個字符。

由此可見,對相同參數的處理結果,substr讀出的字符個數一般情況下會要比substring得到的字符個數要多。

临下班,补点东西,一篇WYSIWYG Editor的对比文章

January 4th, 2005

对WYSIWYG Editor的对比文章:TTW WYSIWYG Editor Widgets
一眼看上去,非常详尽,呵呵,回去再研究一下。

The Coolest DHTML Calendar,一个很cool的JS日历程序

January 4th, 2005

今天为公司写了个简单的CRM,在输入客户资料时,凡是要求输入日期/时间的部分,均用“The Coolest DHTML Calendar”处理,这是一个在GPL下发布的JS日历程序,具有极高的可配置性,包括外观样式、显示格式、显示内容等等。默认程序是只提供日期选择的,需要设置几个showtime参数才能显示时间选择。下载的程序包(zip)里面已经有详细的说明文档和例子。自带的中文版脚本翻译得着实糟糕且不能有,已自行修正。
最新版是0.9.6版,下载地址:jscalendar-0.9.6.zip
除了这个DHTML Calendar之外,该公司旗下还有很cool的其他几个JS程序,分别为
1、DynarchMenu(很cool的JS菜单,高度可配置)
2、DynarchChat(不开源的,没法细看,看样子就是一个聊天室,js效果当然是很不错的)
3、NavBar(一个js导航条,也很cool)
4、SQLDes (介绍上说是一个可视化的SQL操作器,至于可视化做到什么程度,不得而知,因为连个demo都没有,据说是支持所有数据库的,呃…,这个实在不能成为特色。我想,单就对mysql的操作来说,总不会比phpmyadmin用起来爽吧)
5、HTMLArea (一个WYSIWYG Editor,跟DHTML Calendar一样,开源的)
这里的HTMLArea也就是现时很多CMS的首选内置WYSIWYG编辑器。以前修改过人家的一个cms,也是用它的,但那时还没支持firefox,现在3.0版本出来了,据说可以支持了,有需要的时候,再重温一下,呵呵
可以说,这个站点的东西,把JS的强大功能发挥到极致了。