压根就不是一篇文章

Jul 14th, 2011 | Posted by

疑的问

  1. 为什么人在哼歌时发d这个音节的居多
    我们偶尔会一边做事一边哼着随机想到的歌曲,并会蹦出一些词来搭配这熟悉的曲调,我记得自己一般都是de, deng, di, du这几个音,有时会伴随一些la, le之类的音节。于是我想全世界有那么多种的音节可以让我随机的发,为什么我偏偏下意识抽中了那有限的几种呢?为什么我不能选一些诸如nuo, kao, sou之类的音节呢?原因很简单,发音方便呗。
  2. 电梯里的蚊子问题
    我们都坐过升降电梯,设想你在一楼进了一部电梯想去七楼,进去的时候一只蚊子尾随你一块进来搭个便车去5楼平台上透透气。你站地上,它在空中飞着,然后电梯上升了。会有两种情况:一、这蚊子在观察电梯内部结构呢,没注意到,于是它就砰地一声撞到了地板,被托着往上走。二、它一看形势不对,地板追过来了,于是拼命往上面逃,正好跟电梯处于相对静止状态,眼看到了5楼停了,气喘吁吁飞出去说,妈的,赶啥时髦坐电梯,还不如自己飞上来呢。或者它飞累了会扒在墙上休息一会呢?
  3. 梦更像电影还是更像美剧
    我以前写过,梦是没有结果的过程。然而这个过程是设计好了剧本来执行还是一边执行一边设计呢?
  4. 语言与寿命的关系
    如果一个国家的人用的语言如吴侬软语般轻巧且发音不费力,那么这个国家的人的寿命跟另外一个使用一种发音大多类似“啊”“扒”“闹”等需要把嘴张得老大且“吃了么”要讲上十秒钟的语言的国家的人的寿命相比,会不会长一些呢?这个疑问源于我本科讲了多年的bebao话(不解释),觉得此语言讲来颇耗精力,常常讲得殚精竭虑欲仙欲死。

思的维

  1. 道理都懂,欲望也强烈,可为什么不去做
  2. 听说的,死后冷冻遗体,待未来科技发展了再复活自己。噢,未来。
  3. 不说“仅此而已”这种限定住事物无限可能性的话。
  4. 我喜欢这样被描述,“他不**,不**”,而不喜欢“他是个**、**、**的人”,因为后者让我觉得整个人生一下子被几个鸟字给束缚住了,前者否定了一些,但留下了无垠的空间。概括是残忍的。
  5. 好歌的标准是能让我感到时间的重量(红豆、后来、换季)。

说的话

  1. 终于知道王小波为什么叫小弟弟为小和尚了,因为他们头上都没有头发。
  2. 正在看毛片。同学过来嘲问:“你怎么那么不正直呢?”我看看下面:“我不正直着呢嘛。”
  3. 今天一个女人对我说了对不起。她说“对不起,您拨打的电话暂时无人接听。”
  4. 今天过得很失败,只有口是干的,其他什么都没干。
Tags:

交通规则

Jul 14th, 2011 | Posted by

考试类型相当于当时的DB2认证,也是给本题库你背背,全考选择和判断。下面仅记录一些需要留意下的题。类似如下这种题就不记录了:
    雾天对安全行车的主要影响是:
      A. 发动机易熄火
      B.易发生侧滑
      C.行驶阻力增大
      D.能见度低,视线不清 
    答案: D

从13题开始用人话简略的写了下。
1. 机动车经过公安机关车辆管理所登记上牌以后,方可上道路行驶。 
2. 尚未登记的机动车,需要临时上道路行驶,应当取得临时通行牌证
3. 驾驶人在道路上驾驶机动车时必须携带驾驶证,行驶证和强制保险标志
4. 公安机关交通管理部门对累积计分达12分的机动车驾驶人,扣留驾驶证, 进行道路交通安全法律法规教育
5. 没有划分机动车道,非机动车道和人行道的道路,机动车在道路中间通行
6. 机动车遇到交警和交通信号不一致时候,应当按照交警的指挥通行。
7. 机动车在道路上发生故障,需要停车排除时,驾驶人应当立即开启危险报警闪光灯,并将机动车移至不妨碍交通的地方停放
8.  机动车在道路上发生故障,难以移动的,首先应当持续开启危险报警闪光灯,并在来车方向设置警告标志
9. 高速公路没有限速标志,最高时速不得超过120公里
10. 在道路上发生交通事故,仅造成轻微财产损失,并且基本事实清楚的,当事人应当先撤离现场再进行协商处理
11. 饮酒后驾驶机动车的,处15日以下拘留,暂扣1个月以上3个月以下驾驶证,并处200元以上500元以下罚款。
12. 在道路上行驶的机动车,有未悬挂机动车号牌,未放置检验合格标志,未放置保险标志以及未随车携带行驶证的情况时,公安机关交通管理部门应当扣留机动车
13. 非法安装报警器什么的,强制拆除
14. 没拿到驾驶证或者吊销了还开的,200元以上2000元以下罚款,还可以并处15日以下拘留。
15. 把车借给14题这种人的,受同样处罚
16.  逃逸但没构成犯罪的,除罚款以外还可以并处15日以下拘留
17.  违反交通管制规定,强制通行的,跟16题受同样处罚
18.  机动车行经交叉路口,不得超车。(对)
19.  货车车厢内载客必须设有座椅。(错)
20.  小汽车自注册日起6年以内每2年检验1次。
21.  上题中超过6年不满15年的,每1年检验1次。
22.  初领驾驶证后的1年为实习期。
23.  实习期内不得驾驶营运出租车
24.  驾驶证有效期分为6年,10年和长期。
25.  计分周期为1年
26.  计分到12分还老卵不参加学习考试的,公告其驾驶证停止使用
27.  机动车在无限速标志标线,没有道路中心线的城市道路规定最高时速为30公里
28.  机动车在无限速标志标线,没有道路中心线的公路规定最高时速为40公里。
29.  能见度在50米以内,最该时速不能超过30公里
30.  汽车驶入驶出非机动车道时,最高时速不能超过30公里
31.  汽车铁道路口急转弯窄道等等乱七八糟都是30公里
32.  会车中道路一方有障碍的,双方车辆应做到有障碍的一方让对方先行。
33.  机动车在窄桥上会车时,应当减速靠右通行
34.  夜间会车远光灯会炫目,应在距离相对方向来车150米以外改用近光灯。
35.  机动车通过没有交通信号的交叉路口,应当让右方道路来车先行。
36.  机动车通过没交通灯和交警的交叉路口,相对方向行驶的右转弯车让左转弯车先行
37.  比较小的载货汽车高度不得超过2.5米
38.  小型载客汽车可以牵引旅居式挂车,且挂车内不得载人
39.  用绳牵引时两车距离应大于4米小于10米
40.  转向,照明,信号装置失效的故障机动车,应当使用专用清障车拖拽
41.  下陡坡时,不得空挡或熄火滑行。
42.  连续驾车超过4小时的,应当休息不少于20分钟。
43.  机动车距离交叉路口弯路陡坡隧道等50米内不准停车。
44.  公交车外的其他车子在公交车站30米以内路段不准停车。
45.  上高速最低时速不低于每小时60公里
46.  高速上超过每小时100公里时,应与前车保持100米以上的距离。
47.  高速上特殊天气能见度小于100米时,与前车保持50米以上的距离。
48.  高速上特殊天气能见度小于50米时,车速不超过每小时20公里
49.  高速上特殊天气能见度小于200米时,车速不超过每小时60公里
50.  欺骗贿赂混到驾照的,3年内不得申请驾照。
51.  被扣留的车子没人来处理,可以依法拍卖
52.  一个记分周期内未达到12分,所处罚款已缴纳的,计分予以清除。(对)
53.  一个记分周期内未达到12分,计分予以清除。(错)
54.  高速上限速标志标明的车速与法规规定的不一致时,应按照法规规定的行驶。(错)
55.  因肇事逃逸致人死亡的,处7年以上15年以下有期徒刑。
56.  因肇事逃逸的,处7年以上15年以下有期徒刑。
57.  非本辖区违法记录可移至机动车号牌核发地处理。
58.  对酒后行为失控的驾驶人,交警可以使用约束性警械
59.  对非现场处罚,当事人在车辆号牌核发地接收处理有异议的,可向本人驾驶证核发部门申诉。(错)
60.  当事人未在事故现场报警,事后请求交管部门处理,应在请求提出后10日内提供证据。
61.  调解参加人不能按时参加调解的,应在预定调解时间24小时前通知承办的交警要求改时间。
62.  当事人对交警事故认定有异议的,可向人民法院提起行政诉讼。(错)
63.  吊销驾照后未满两年不得申请驾照。
64.  驾照期满前90日内申请换证。
65.  超过驾驶证1年以上没换证的,应注销其驾驶证
66.  计分达12分的,接收教育后要进行科目一理论考试。
67.  60岁以上或其他身体不太好的应每一年提交一次身体条件证明。
68.  满60周岁,可以持有C1 C2准驾驾驶证。
69.  满70周岁,只能持有F准驾驾驶证。
70.  机动车驾驶人可以委托代理人办理驾驶证的换证补证业务。(对)
71.  持有C2准驾驾驶证的驾驶人可以驾驶各类小型汽车。(错)
72.  下肢残缺的人可以申领C2类驾驶证。(错)
73.  已登记车子有小型汽车加装前后防撞装置变动,不必到车管所登记。
74.  机动车用作抵押,由抵押人负责办理抵押登记手续。(错)
75.  在我国境内开的车的所有人和管理人,要强制保险。
76.  保险掏钱的人是本车人员和被保险人以外的受害人
77.  发生多次事故或重大事故的被保险车,保险公司应当提高保险费率的幅度。
78.  事故中被保险人无过错的,保险公司应当不提高其保险费率。
79.  签订保险合同后,应将保险标志放置在被保险车上
80.  保险期间为1年
81.  对没投保机动车交通事故责任强制保险的人,可对其两倍于保险费罚款。
82.  未按规定投保上述险种的,可扣留其车。(对)
83.  通过高速收费站时,时速不超过5km
84.  禁止在高速垮江大桥和隧道内检修车辆。
85.  驾驶禁止驶入的车子进入高速的,二百元罚款。
86.  每漏检一次,处以伍佰元罚款。
87.  除公路客运车辆和接送中小学生的小车外,其他车子不准在公交专用车道内行驶。
88.  在高速上停车上下或装卸货物,五百元以上二千元以下罚款。
89.  驾驶自动挡汽车起步时,踏下制动踏板,从p挡换入其他挡位。
90.  停放自动挡汽车时,变速器操纵杆放应在P挡拔下钥匙。
91.  自动挡汽车启动发动机时,应将变速器操纵杆放在P挡位置。
92.  自动挡汽车在陡坡行驶时使用“2”挡。(错)应用“L”挡。
93.  泥泞道路对安全行车影响是车轮极易滑转和侧滑
94.  谨慎驾驶三条基本原则是集中注意力,仔细观察和提前预防
95.  驾驶车辆驶出环岛前,应开启右转向灯
96.  驾驶车辆进入环岛时,不用开启转向灯
97.  在路边停车时,右侧车轮与路肩的距离不超过30厘米
98.  进入高速加速车道后,应尽快将车速提到每小时60公里以上。
99.  因故障在高速上停车,需要在车后150米处设置故障警告标志。
100.  驶入高速减速车道后,进入匝道前将车速降到标志规定车速以下。
101.  车行道分界线一实一虚长为15米
102.  驶离高速前,距出口1公里处,不得超车。
103.  驶离高 速前,应在进入减速车道后减速后进入匝道驶出。
104.  车辆应靠公路右侧的路肩上行驶。(错)
105.  在高速上遇分流交通管制时,可不驶出高速公路,就地靠边停靠等待管制结束后继续前行。(错)
106.  下长坡时,用发动机制动控制车速最有效。
107.  行驶入双向行驶隧道前,应开启示廓灯或近光灯
108.  夜间行车中,如果灯光照射离开路面,有可能是车辆前方出现急转弯或者大坑。
109.  夜间通过无交通信号控制的交叉路口时,不得变换远、近光灯。(错)
110.  车辆涉水后,间断轻踏制动踏板,以恢复制动效果。
111.  浓雾天气能见度低,开启远光灯会提高能见度。(错)
112.  雾天行车多用喇叭,听到对方喇叭也用喇叭回应。(对)
113.  爆胎,应用“抢挡”方法使车缓慢减速。
114.  爆胎应急措施是紧握转向盘,尽快平稳停车
115.  行车中当驾驶人意识到车辆爆胎时,应在控制住方向的情况下采取紧急制动,迫使车辆迅速停住。(错)
116.  当车辆失控行驶方向偏离,应尽快减速,尽快停车,而不是迅速向无障碍一侧转向躲避。
117.  制动防抱死装置系统可以防止紧急制动时车轮抱死。
118.  制动突然失灵,应利用“抢挡”或驻车制动进行减速。
119.  下坡路制动突然失效不可采用的办法是拉紧驻车制动器操纵杆或越二级挡位减挡
120.  安装ABS的车制动时,可用例踏制动板。(对)
121.  安装ABS的车制动时,制动距离没有变化。(错)
122.  车在泥泞路上发生侧滑时,应向侧滑的一侧转动转向盘适量修正
123.  已经不可避免要撞上了,应紧急制动
124.  车子向深沟连续翻滚时,身体应该迅速躲向座椅前下方,抓住转向盘管将身体稳住。
125.  感到车辆不可避免要倾翻时,应尽力稳住身体,迅速跳车。(错)
126.  发动机着火,错误的做法是开启发动机罩灭火
127.  车子落水可选择的自救方法是敲碎侧窗玻璃
128.  汽车机油压力表指示的压力是发动机主油道中的机油压力。
129.  汽车制动时,如果前轮单侧制动器起作用,会引起汽车跑偏
130.  转向盘用以控制转向轮实现车辆的转向。
131.  离合器用以控制发动机与传动系动力的接合与分离。
132.  制动踏板是行车制动器的操纵装置。
133.  变速器的作用是使发动机与传动系平稳接合或彻底分离,便于起步和换挡。(错)
134.  发动机舱的日常检查与维护的项目有机油、冷却液、制动液量
135.  检查轮胎外表有无破损,并清除胎纹间杂物
136.  从轮胎表面到沟槽底部的橡胶厚度应不低于1.6毫米
137.  检查离合器踏板时,应将踏板踏到底,检查踏板与车厢板之间的间隙是否合适。(错)
138.  为了避免爆胎,要定期进行轮胎换位,适当降低轮胎气压。(错)
139.  关节扭伤的伤员,应避免活动
140.  伤员较大动脉出血时,可用指压止血法,用拇指压住伤口的近心端动脉。
141.  上肢或小腿出血,且没有骨折和关节损伤时。可采用屈肢加垫止血法
142.  抢救脊柱骨折的伤员应用三角巾固定
143.  移动脊柱骨折的伤员,切勿扶持伤者走动,可用软担架运送。(错)
144.  伤员上肢骨折固定时,肢体要伸直捆绑。(错)
145.  大中型载客汽车不得牵引挂车。
146.  喝酒后驾驶营运机动车的,暂扣三个月驾驶证,处500元罚款。
147.  醉酒后驾驶营运机动车的,罚款2000元。
148.  一年内醉酒被处罚两次以上的,吊销驾驶证。5年内不得驾驶。
149.  客运车辆载客超过额定乘员但没超过额定乘员20%的,处200元以上500元以下罚款。
150.  客运车辆载客超过额定乘员20%或者违反规定载货的,处500元以上2000元以下罚款。
151.  大中型非营运载客汽车自注册日起,10年内每年检验1次。
152.  大客车下长坡时,先以发动机牵阻控制车速。
153.  载客汽车行李架从地面起高度不得超过4米
154.  要申请开大客车,要最近连续3个计分周期内没有满分记录。
155.  取得驾驶牵引车准驾车型资格2年以上,并在申请前最近1个计分周期内没满分记录,可申请增加大型客车。
156.  持有大客车、公交车和中客车准驾车型机动车驾驶证的,在一个计分周期结束后,1年内未提交身体检查结果的,车管所注销其驾驶证。
157.  实习期间不得驾驶公共汽车
158.  大客车定点停靠,以大客车的车头作为对应目标。
159.  重型、中型载货汽车,半挂车载物,高度从地面起不得超过4米
160.  汽车列车起步时,由于车辆质量比单车大,一般采用一挡起步。
161.  一年内有醉酒后驾驶营运机动车行为的,被处罚2次以上的,吊销驾驶证。
162.  货运机动车超过核定载质量,但没有超过核定载质量30%的,处200元以上500元以下罚款。
163.  哪些车辆不准载人行驶?货运汽车挂车
164.  载运集装箱的车辆高度从地面起不得超过4.2米
165.  货运机动车在留有安全位置的情况下,车厢内可以附载临时作业人员1人至5人
166.  载货汽车载物高度超过车厢栏板时,货物上不得载人。
167.  载货汽车、半挂牵引车、拖拉机只允许牵引1辆挂车。
168.  高速上载货汽车最高车速不得超过每小时100公里
169.  申请增加大客车、牵引车、中型客车准驾车型的,不得有在造成人员死亡的事故中承担全部不或主要责任的记录。
170.  汽车列车上坡一旦感到乏力,应及时减挡
171.  连接半挂车时,将锁止杆置于“锁止”位置。
172.  禁止货运机动车载客。(对)
173.  挂车车厢内在留有安全位置的情况下,可以附载临时作业人员1人至5人。(错)
174.  已持有大型货车驾驶证三年以上,并在申请前最近连续1个记分周期内没有满分记录,可以申请增加牵引车准驾车型。(错)
175.  报考大型货车准驾车型科目三考试的,在取得驾驶技能准考证明满30日后预约。(错)
176.  报考牵引车准驾车型科目三考试的,在取得驾驶技能准考证明满40日后预约。(错)
177.  报考低速载货汽车、三轮汽车、普通三轮摩托等准驾车型的,在取得驾驶技能准考证明满20日后预约考试。
178.  电瓶车进出非机动车道,通过窄路窄桥时,最高时速不得超过每小时15公里
179.  汽车吊车及其他轮式专用机械车不得牵引车辆
180.  轮式专用机械车,不得载人
181.  叉车门架与滚轮的配合间隙不得大于1.5毫米
182.  起重机构的滚轮转动应灵活,滚轮及轴应无裂纹、缺损,轮槽磨损量不得大于原尺寸的10%。
183.  达原尺寸的20%时报废。
184.  卷扬筒上的钢丝绳应保留3圈以上。
185.  汽车起重机滑轮轮槽不均匀磨损量达到3毫米时应报废。
186.  叉车货叉根角不得大于93度
187.  轮式专用机械车、电瓶车转弯时最高时速不得超过每小时20公里。(错)
188.  轮式专用机械车在冰雪道路等上行驶时最高时速不得超过每小时30公里。(错)
189.  吊车、装载机、挖掘机等车辆的作业灯应能照清前方场地情况。(错)
190.  叉车多路换向阀操纵手柄应能迅速有效的开通或切断电路。(错)
 

总之主要的原则是:哪个答案显得安全,基本就选哪个

Tags:

顺利通过某jia老师论文审查指南

Jul 14th, 2011 | Posted by

  由于这个神奇国度先进的教育制度,教育部对本科生毕业论文有着非常严格的质量要求。我们的老师义不容辞地肩负起把好这第一关的重任,可谓任劳任怨,感激之情我已在论文结尾的“致谢”章节中做了深刻表述,这里便不再赘述。只是论文写作和改动,哦,主要是改动期间本人有一些心得体会想在这里记录一下,一来对前段日子做个总结,二来如果文章得幸被某位学弟或学妹读到,并且学弟或学妹得幸在某jia老师的指导点拨下完成自己的毕业论文的话,或许这篇文章对你们减轻自身负担,更重要的是对减轻某jia老师工作上的重压会有一定的帮助。
  我准备首先简短地讲下内容上的小要求,接着就开始逐条列出可能让你一趟趟去办公室打扰某老师工作的格式上的要求。

一、内容上

  1. 论文题目叫“××系统的设计与实现”
  2. 文章的整体结构如下图所示:
    image
  3. 每章内部章节结构如下图所示:
    image
  4. 摘要和第五张写满一页,可超出。
  5. 废话一定要多,要使得文字看着有血有肉,“不要写的像技术文档,要像论文,但也不能写的像博客”–原话。

二、格式上

  1. 每年都会发毕业论文格式标准,按照上面写的做(页眉、页脚、行间距、字体、章节编号等)。
  2. 正文(从第一章开始)写个三四十页差不多了。
  3. 每张图片都要居中,大小不可多于半页,图片下面都要标好图几点几以及图片名称是什么,如“××模块用例图”。
  4. 图片拉伸时不要让里面文字走样,保持字原来的长宽比。
  5. 图片里的文字不能大于正文中的字,也不能小得看不清。
  6. 每张图都要有说明,图片用来说明文字,最不要出现的情况是某一个标题下就一张图,没任何文字。
  7. 图片不要太靠页面的边缘。
  8. 不要出现一章之内大面积留白的情况。会出现这种情况,大部分是因为有图片要放在那块空白区却放不下,只好移到下一页去。可以考虑把下面的文字提上来补全这块空白,然后下面放图片,在上面的文字中用图几点几指示一下图片的位置。
  9. 不要有不加任何标注的短语。举个例子,不能出现以下情况:
    image
    而应该写成以下样子:
    image
    即要给它们加上标注,按照原话说是“不加像技术文档,不像论文”。
  10. 所有要贴的代码不能用截图的方式,应该用文本框,在框内黏贴。
  11. 注意所有的图、表、代码框等带框的东西和上面下面的文字之间的距离要保持一致。
  12. 段落的首行要缩进,英文写的摘要也要缩进。
  13. 所有句子或图片等明显不是自己写的地方要标好引用,用上标。
  14. 不需要内容和下面的标题之间加空格。
  15. 致谢章节里,请将所有需要替换老师姓的地方都换上。我一朋友拷贝了某丁姓指导老师带的学生的致谢,结果没把丁老师都替换成某老师,止增笑耳。

  论文做成这样,答辩基本就是个过场了。因为你用论文表明了你的态度,而你的表现在纸上的态度是他们看重的唯一一点而已。

Tags:

我用过的手机

Jul 14th, 2011 | Posted by

手机真正成为我的必需品是在读大学以后。在那以前,我并没有属于自己的一部手机。家长和学校也默契地达成了学生不准带手机进课堂的协议。那时候,课业压力大,人际圈子窄,找谁站起来在班级里喊一声就行了,犯不着那几毛钱短信费。手机的功能也不像今天那么强大,实在是没有欲望冒着写检查的危险在课桌底下偷偷地玩几局贪吃蛇之类的游戏。在家里也用不着手机,有事一个电话解决,右手在那时候是用来握笔杆子算数学公式的,不是用来偷偷按键点发送信息骚扰姑娘的。所以说,没有手机在那时中学生眼里是不能再正常的事,就跟不准进网吧不准早恋不准看毛片一样正常。
扯远了,简单介绍下用过的手机  吧。

  1. 科健——这是我上初中时爸爸用的手机,可能是他的第一部手机,也是我玩过的第一部。网上已经不可能找到图片了,找了张样子相像的放下面,不过颜色是黑色的。
    科健 
    特意查了下,科健公司在1984年就成立了。当时貌似科健还不错的,现在还不知道有没有人去买了。这玩意麻雀虽小五脏俱全,不像现在有些手机啥功能都有就是不能打电话(我不是说iPhone4)。窄窄的蓝色液晶屏幕,按键饱满,音量适中,质感柔和,机身呈流线型……可惜早已断货,不然实属馈赠亲友之上品。此手机第一次让我感到了科技的力量,因为它所具备的语音拨号功能是当时计算机白痴的我前所未见的。虽然爸爸经常对着喇叭喊半天它也识别不出来。
  2. 熊猫——爸爸用的第二款手机,我高中时候他用的,是翻盖手机,16和弦。当时觉得从单调的电子音过度到和弦太酷了,这款手机肯定特牛逼。以至于高考结束后的日子还带着它出去参加各种同学聚会,太囧了。样子大概是这样:
    panda 
    貌似熊猫现在倒闭了吧,搜出来两个像官网的网址都打不开,淘宝上搜熊猫手机也没有卖的,这张图也是找了好久才找到的一张。
    对它的记忆并不多,现在只记得它爽朗的铃声了。但是看到它就会想起高中那段青葱岁月。
  3. 迪比特——高中里妈妈用的手机。通体红色,信号不好,响应慢,系统落后。现在只记得来短信时那一短促的嘀声。网上找到了它的图片:
    dibite 
    妈妈用的第一部手机,舅妈给她的,她没买过手机,现在用的都是爸爸和我用下来的手机。她用手机的目的有两个,一个是给我发几个字提醒我注意身体,一个是带在身上方便我和爸爸找她。
  4. 松下X300——属于我自己的第一款手机。高考结束后买的,当时价格是2500左右。可以翻开屏幕拍照摄像。样子如下图:
    songxia 
    我用它用了两年,最后被我自己忘在了软院的自习室里,第二天一大早赶过去发现已经没有了。那一个月是我本科时最倒霉的一个月,连着丢了两个手机,自行车轮胎被人拆了,教材被人偷了,笔记本被人偷了。
    我挺喜欢这手机的,外观小巧,五官精致,拍摄有dv的感觉,唯一的缺点是不是诺基亚系统。当时周围人都是诺基亚,觉得自己从来没用过手机中的王者及传说中的塞班系统,还是有些羡慕的。所以最后手机丢了也不是很心疼,囧。。 这款手机不支持数据的导入和导出,所以没法把里面的短信导出来,铃声也只能用GPRS下载。我记得大一刚刚进大学,还没开始上课的那段日子里,我经常拿着我的手机,跟yxy一起校园里到处乱转,手机里装上唐伯虎点秋香里周星驰烤鸡翅膀的那段很聒噪的音乐,两个混球走到星湖边,往湖边看星星看月亮的情侣堆里一屁股坐下来,很拉风地拿出手机,很拉风地调大音量,轻巧地按下播放按钮……
  5. 诺基亚3110E——这款就是上文提到的那个杯具手机。
    2008119134442299
    松下被偷后,父母都很不悦,我也有些愧疚就买了个便宜点的诺基亚,1100左右。打算用到大学毕业再说吧。可仅仅10天就在回家的公交上被摸走了。我和另一个同学大包小包挤159去南京火车站,我手机就放在上衣的口袋里,满腔的回家热情,毫无戒备的心理,终于让我献出了处女被偷手机经历。从此以后,我就只买那些有内袋的上衣了。
  6. 三星SGH-Z150——那个月被偷了两个手机后,我老老实实去国网三百块钱拿了个这个。好像还送了多少话费。
    16621 
    虚荣如我,上课时都不好意思拿出来放桌上,忍辱负重地过了段日子。它也是命途多舛,从我手中到了我妈手中,现在又轮回般回到了我身边,活得还好好的。当然是静静躺在我的G3身边,插了张可以报销话费的卡,充当专用的电话机。
  7. 诺基亚5700——传说中的变形金刚。这是我感情最深印象最深刻的一款手机。要不是被我摔得摇杆坏了,修过一次还是不行以后,我才不会想用G3去代替它。它是这样子的:
    2009817203934553217 
    我第一次用上了真正意义上的智能手机。其实我对手机的要求不高,除了基本的两个功能外,有关机闹铃,能看电子书,能导出短信,数据传输,简单的备忘录。感谢它陪伴了我的考研生涯、本科最快乐的时光和在鼓楼的那段日子。
  8. G3——现在用的。还没研究过。以后可以写点Android程序放进去玩玩。我也挺喜欢的。
    2013458674
Tags:

symbian学习笔记二(字符串)

Jul 1st, 2011 | Posted by

12213123

123

12

3

 

  1. _LIT(KHello, “Hello!”);   
  2. _LIT(KWorld, “World!”);    
  3. HBufC* heapBuf = HBufC::NewL(KHello().Length());   
  4. *heapBuf = KHello;    //buf holds ”Hello!”   
  5.   
  6. heapBuf = heapBuf->ReAllocL(KHello().Length() + KWorld().Length());   
  7. CleanupStack::PushL(heapBuf);   
  8.   
  9. TPtr ptr (heapBuf->Des());  //DON’T use TPtr ptr = heapBuf->Des(); this will set maxlen to 6 but not 12…   
  10. ptr[KHello().Length() - 1] = ’ ’;   
  11. ptr += KWorld;   
  12. iTopLabel -> SetTextL(ptr);   
  13. CleanupStack::PopAndDestroy();   
  14. DrawNow();   
  15.   
Tags:

浅表性胃炎和慢性结肠炎

Jun 20th, 2011 | Posted by

  流水账。
  前天去四院做了消化内镜的检查。
  这件事情的邪恶的版本是:在被人用迷药弄昏毫无知觉的情况下,一群叔叔阿姨对我进行了人道主义口bao和菊bao,强行拍下我身体某些器官的照片,我不得不以600元买下这些照片以除后患。
  正常的版本是:半个月前预约了前天下午的无痛肠镜和胃镜的检查。普通的胃镜,需要以一细管从口插入直至胃部,闪转腾挪,让人翻江倒海情难自已。普通的肠镜,需要以一细管从菊门插入,由于肠子是山路十八弯,所以管子难免磕磕碰碰撞到花花草草,感觉黯然销魂欲仙欲死,比胃镜爽得多了。鉴于此,我毫不犹豫选择了需要外加600元的无痛的。原来听说无痛就是吃一粒药,药里有个摄像头什么的玩意,进去搞点照片出来。原来那个是千把块钱的高级玩意,我做的无痛就是给个麻醉让你睡着了,其他就跟普通的内镜一样。就相当于600快钱买了支麻醉剂打打。
  这个月一号有些拉肚子,鉴于长期拉肚子的经验,我吞了几粒诺氟沙星就跟高中同学去打篮球去了。期间我还特意自备盐开水,在阳光暴晒下的夏日,打开保温杯,又渴又累,喝滚烫的盐开水,蒸腾着热气。喝完一杯,特意去买了瓶不冰的脉动,在嘴里捂热了以后吞下去。后来去了猪的家吃了15只大馄饨,一片西瓜,沙星两粒,促膝长谈,10点回家。第二天便开始了寂寞的拉肚子生涯。刚开始几天在家吃吃药,情况并无好转。于是在喝了几天粥的情况下,我和妈妈本着能让我早日吃上肉而不是肉松的原则,在一个月黑风高拉稀夜,毅然决然带我去了101医院准备挂水。那里的年轻医生小姐简单问了我几句,做出了继续在家吃药无需挂水的决定。没挂上水,我失落又庆幸地回了家。又喝了几天粥,在愈发强烈的吃肉欲望的推动下,我又去了三院的肠道门诊作了检查。医生直接让我挂水,于是我晚上11点开始挂,空调打的很冷,椅子坐的不舒服,一夜没怎么睡,出去的时候已经天亮了,医院门口的鸡蛋饼摊头已经开始了早饭生意,回去的路上额外批了件外套,大排档们早撤走了,留下一人行道的饭盒筷子和没有啃干净的肉串,阿猫阿狗饭店都门紧锁着。这个时候我估计喝了一个礼拜的粥汤了,回去咬咬牙喝了碗粥当早饭,抱着一大堆欲望沉沉地睡去了。那天的盐水果然有用,我立马就正常了,胜利在望,但我戒骄戒躁坚持再喝两天粥以巩固成果。然而第二天我心凉了,又不好,我实在找不出原因了,就去了四院。那天正好周四,四院的专家门诊开放,等了许久,周医生给我检查了。周医生是一个三四十岁的女医师,高额头,戴眼镜,清秀,儒雅,普通话,后来我做胃镜她也在场。四院这家医院就在我老家附近,我从小得点小毛小病都去那里,救我多次于水火之中,和我素有渊源,因此那里的医生我觉得更亲切,我就认准这位周医生了。周医生颠覆了其他医生只认准一根肠的套路,首次着眼于胃部,独创性地为我开了一些胃药,另辟蹊径,为我的食肉之路指明了方向,加之温润可口的粥汤细无声地滋养,从此革命形势一片大好。她建议我做个内镜彻底检查下。在周医生的悉心调教下,7月18日左右,我便成功吃上了肉,并且一吃便是一个礼拜。某日晚餐后,与往常一样我坐着看电视,忽感一阵胃痛,并且一直持续。痛了一个钟头,我说操,妈的去医院。结果去三院挂水挂到深夜。我的理想又一次从实现人生价值变成了能早日吃上肉。于是便到了29号作检查的日子。按照做肠镜须知上写的,29日上午要喝一热水瓶半的泻药,并且28日晚上开始到做完检查之间不能进食,于是我照做了。喝泻药的原因很简单,有时候我们楼下自来水管会进行施工,我们早上起来放水管子里水会很黄,于是我们放掉很多很多的水,直到放出来的水是清水为止。这里的自来水管就是肠子。传说中和毛片中有所谓灌肠,那是从海拔低的位置向海拔高的位置灌水,医生说要是泻不干净就要进行灌肠,当时让我花儿一紧。可是喝泻药跟灌肠是一样一样的,是从海拔高的位置向海拔低的位置灌水,甚至更痛苦,因为它还规定你需要在一个小时之内喝完。我喝了半个小时喝了一半不到,还有一半是坐在马桶上喝掉的。于是便到了下午,预约了两点半,结果去坐那等了两个钟头才轮到我。我一进去医生就要我脱光裤子,换上一条裆超大腰围超大的开裆裤。然后我光着屁股走出来看看,男女老少都穿着同一型号的开裆裤,光着不同型号的屁股站在外面,于是我也心安理得地站在人群中,一会护士过来给了我一块蓝布说你把屁股遮一下吧,我说好的谢谢,不一会我被要求躺在一张病床上,又过了一会几个医生把病床推到几台电脑前,坐在电脑前的医生都盯着屏幕上不知道是谁的胃还是肠子看得津津有味。一个医生回过头来问我说“魏和常?”我一愣,我差点说我不是,我名字叫xjy,后来一想她是问我是不是做胃镜和肠镜,我点点头。一个医生给我插了根氧气管子,嘴里塞个套子,举起一管麻醉剂朝我胳膊扎下去。我盯着管子看,他推了半管后来发生什么我就不知道了。醒过来的时候医生正麻利地进行“收尾”工作,我说还好我醒的晚一点。跟我一起打麻醉的一个大姐做完了还没醒,她老公在旁边叫了十分钟才醒,她睡迷糊了,第一句话是我现在在哪里。我已经饿得低血糖手脚发麻有些耳鸣了,我赶紧去医院对面菜市场买两肉包路上啃着。以后就是慢慢调理了。下面是一些需要注意的地方:

  1. 不吃生冷酸辣和油炸的刺激性食物。
  2. 三餐有规律地吃。
  3. 不能抑郁,会引发胃癌。
  4. 保持心情愉快,精神不能长时间高度紧张。
  5. 肚子不要着凉。

  最后祝福表姐。好事多磨。

Tags:

多少文字换一段经历

Jun 7th, 2011 | Posted by

   (旧文重发。)
   一个月前,我去祖国的香港和澳门游玩了一趟,留了些体液在那里,又收购了些资本主义物质文明的成果,带回到社会主义阵营中来。回来当天,我就琢磨着想写篇言真意切的“港澳5日游”把这些天的成果封到时间胶囊里,以防氧化变质。这是我一贯的做法。
   07年2月份去成都玩了趟磨出来一篇6718字的“巴蜀之行”,08年末的考研经历也诞生了3355字的“挑研之初体验”。今年我准备好键盘和word再想码字的时候,迟迟下不了手。
   写什么?
   写我5天去了些什么地方,玩了些什么项目? 那文字的作用仅仅在于记录,写出的流水账淡的像白开水。我电脑里的那些照片足以更生动地说明这些。
   写我5天买了些什么东西,看到多少买不起的东西?那有什么好稀罕非要写下来的,放下键盘努力赚钱去买才是。
   写我5天看到多少美女,多少次荷尔蒙涌动喷薄?那一句话就行了—-我看到了超多美女,很鸡动。
   写我5天吃了多少美食,流了多少口水?那些美食早已化为各种形式去支持祖国的生态文明建设。还有,跟团旅游还真没吃到多少美食。一碗牛肉面50元,我还真不敢吃多少。
   多少文字交换一段经历?
   我拿着键盘一直在想。描述一段经历的粒度到底该是多少?
   粒度最粗的描述当如下:
   09 年的二月底我和爸爸舅舅跟团去香港澳门游玩了5天,那里风景很美,现代化气息很浓,靠海,天气很热,我们去了海洋公园、黄大仙庙、浅水湾、太平山、尖沙咀海港城、会展中心、维多利亚港、星光大道、大三巴牌坊、妈祖庙、威尼斯人赌场、新葡京赌场,玩的很开心,三月一号坐飞机回到了家。
   粒度最细的描述当如下:(3月初的某天下午写的,后来写不下去了)
   5 点多就起床,匆匆准备完毕,和爸爸一起到人民大会堂。天还很暗,天气很冷,我们都穿着冬装,到那里的时候看到已经有别人也在等了,这些就是团友,我们是跟团去的。车子来了,大巴车,我们上车,哦,还有舅舅和我们俩一起去。导游稍稍迟到一些,导游姓宗,我们叫她小宗。有些小胖,梳着齐耳短发,挺可爱,挺直爽,声音洪亮,后来知道也属老虎,比我稍大,可是已经工作了好几年了。团里的其他人,5个南通人,其中两对夫妻,还有一个眼镜叔叔,背着lv的包,老练,狡猾。一对姐妹,姐姐看着挺朴实,妹妹在北京二外上大三,姓席,比姐姐外向,染了发,背个大包,紫红色的运动裤,化了妆,也是短发,皮肤很好,姐妹俩个子都不高,我跟她们没说过话,有过几次眼神接触,也是一闪而过。还有两个阿姨,本地人,她们始终一起活动,关系很好的样子,叫我舅舅宋老板,有一个女儿结婚了,自由活动那天跟我们三个一起走的。还有三个常州阿姨,印象不深。车子启动并驶向机场,很快便到了。这是我第二次来到机场,第一次是上海的浦东机场,因此新鲜感并不是很多。这里的机场有点小。在候机大厅里看到外面深航的飞机红白相间。我们乘坐的是深航,飞往澳门,准备到了澳门坐船去香港。深航的空姐很漂亮,食物好吃,服务好,快着陆时有空姐带领做健身操。远离地面,我躲在三万英尺的天空,我依然很紧张,但当我透过窗口看到下面的奇妙景象,我放松了紧绷的神经,专心的去享受这难得的美景。我第一次坐飞机是去的成都,一共两个小时,飞澳门也差不多。在天上看到下面一块块的岛屿感觉有点像google earth上看到的那样,心想这也许是一个省也说不定吧。下了飞机,我们都还穿着棉毛衫,有的还穿着羊毛裤,第一件事大家先把外套全脱掉,然后坐在澳门机场里等候。这是我第一次离开大陆,第一次去一个文化差别和原来相差那么大的地方。机场里的文字有繁体、英文还有看不懂的叉叉文。商店里的东西看着感觉都像这边超市里的进口商品,都想抓一把带回去,尽管抓到的可能在当地人看来是不值一提的东西。天气很热,有二十多度的样子,澳门的老太太老头子说着听不懂的话,穿着汗衫。澳门人长的跟大陆人不太一样,说不出的感觉,就像看韩国人日本人也会有的感觉。这次安排的从澳门着陆然后去香港的计划,没有直接去香港方便,我们在澳门那块停留了很长时间,天气又热又闷,身上汗兹兹的很难受。出了机场坐上一辆中巴车,打着空调,不然会热死。车子往澳门码头开。澳门的车子是左行的,天空很蓝,海水很蓝,澳门很小,比小鸡鸡还小。导游说只有20个天安门那么大。这里先不说太多了,以后慢慢再讲澳门。在码头等了一会上了一艘叫什么什么飞轮的,这里到香港要1个小时。移动的信号刚开始还有一点,后来快到香港了就一点没了。海上的风景很美,刚开始感觉好像在鼋头渚一般,后来到了香港的海域,现代化大都市扑鼻而来。随着船身上下颠簸,原先的对香港的认识就是这样:做着豪华游轮,碧蓝的海水,碧蓝的天,岸边无数林立的大厦高楼,青山绿水环抱,香槟美女左右,富人在公海里遛游艇,和维多利亚港腐烂在一起。船靠岸了,但停不稳,晃得巨逼厉害,举步维艰巨好玩。好不容易上了案,出了关,总算到了香港。
   还没踏进香港半步就写了1386字,照这个推算下去,5天的经历非写死我不可。
   现在想来,过了一个月再来看,那些唧唧歪歪虾兵蟹将也忘的差不多了,真正能够留下来的都是些记的深刻的,估计也就它们值得写下。所以,多少文字换一段经历,回答这个问题我准备借鉴下马克思的价值规律理论。
   价值规律的基本内容
   (1)商品的价值量是由生产这种商品的社会必要劳动时间决定的。
   (2)商品交换要以价值量为基础,实行等价交换。
   表现形式:价格围绕价值上下波动。
   生搬硬套这个规律,把经历看作商品,把文字看作一般等价物,文字和经历的交换要以这段经历的价值量为基础实行等价交换。这段经历到底值多少字,不需要我来顾虑,该值多少就值多少。值2000元的手表,非标价5000,便卖不出,价值规律自发调节你降价; 值2000字的经历,非要写成5000字,写完一看连篇的废话,不行,缩到2000字为止。人们要让商品卖个好价钱,并不是通过人为的抬高商品的价格,而是关注于提高劳动生产率,使个别劳动时间低于社会必要劳动时间,在同样的社会必要劳动时间里能创造出更丰富的产品和财富;让经历有字可写有话可说,并不是通过刻意的堆砌拼凑,而是当经历的时候去充分的感受琢磨抚摸嗅探,在同样的五天里感受到更深更多的东西。
   因此,我想写的时候就拼命写,写不出来喝一杯水,翻两页书,出去玩玩。

Tags:

浅析document.referrer

Apr 4th, 2011 | Posted by

在流量统计服务中都有Traffic source这个功能。Traffic source是针对访次级别的概念,换句话说,当访次建立的时候,landing page的流量来源即是该访次的Traffic source。虽然Traffic source有很多种,不过不幸的是依据现在JS,获得Traffic source的途径只有两种——document.referrer、window.opener.更不幸的是,window.opener适用的场景不 多,而document.referrer非常的弱,以至于很多场景下无法准确判断出流量来源。

document.referrer的覆盖

从使用意义上来说document.referrer希望能够追踪到的是浏览器端行为。如果一张页面A被打开,那么浏览器端可能会发生的动作有用户操作、JS代码两种。

先来看看用户打开页面A可能会进行的操作:

1 直接在地址栏中输入A的地址
2 从B页面左击link A,跳转至A页面
3 从B页面右击link A,在新窗口中打开
4 从B页面右击link A,在新标签页中打开
5 拖动link A至地址栏
6 拖动link A至标签栏
7 使用浏览器的前进、后退按钮

注意这里的link即指<A>标签,但是如果有事件或者target还要另当别论。

JS打开页面可能的方式:

1 修改window.location
2 使用window.open
3 点击flash

上面列出了客户端打开页面的一些方法,此外,如果通过服务端的重定向技术,也能够使得页面A呈现给访客。

下面来针对具体的浏览器测试,如果是上述的这些情况,document.referrer表现如何:

序号 场景 IE8.0 FF3.6 FF4.0 chrome
1 直接在地址栏中输入A的地址 ” “ ” “ ” “ ” “
2 从B页面左击link A,A页面替换B页面(target=’_self’)
3 从B页面左击link A,A在新窗口中打开(target=’_blank’)
3 从B页面右击link A,在新窗口中打开 ” “
4 从B页面右击link A,在新标签页中打开 ” “
5 鼠标拖动link A至地址栏 ” “ ” “ ” “
6 鼠标拖动link A至标签栏 ” “ ” “ ” “ ” “
7 使用浏览器的前进、后退按钮 保持 保持 保持 保持
8 修改window.location打开A页面(同域) ” “
9 使用window.open打开A页面 ” “
10 点击flash打开A页面
11 服务器重定向至A页面 ” “ ” “ ” “ ” “

其中,” “表示一个空的字符串,√表示能够正确判断来源页,保持则意味使用前进后退不会改变页面的referrer。从这张表里可以看出 document.referrer能覆盖大约一半的case。但是对于一些比较常用的操作,例如利用鼠标拖动link至标签栏、前进后退等情况还不能做 出正确的处理。

document.referrer的来源

浏览器在向server请求页面A的时候,会发送HTTP请求。这个请求的Header里会带上Referer属性,server接收到该请求后,可以提取出Header里的Referer,用于判断访客是从哪个页面发起的请求。

一般情况下浏览器请求A时发送的Header中Referer是什么,那么拿到A页面后document.referre的值就是什么。上图是一个 请求A页面的Header,A的document.referre为http://localhost/Test/b.html。

如果在Header中不包含Referre,那么用document.referre去取的时候,就会被赋值为空字符串。

关于HTTPS请求

如果在一张普通的HTTP页面上点击了HTTPS的链接,那么在https请求头部可以附上Referer信息,之后在HTTPS页面中依然可以用document.referre来获得普通的http页面。

同样,如果是在一张https页面上点击了另一个HTTPS的链接,可以在请求的头部附上Referer信息。

但是如果是从一张https页面点击了http链接,那么很不幸,发送的http请求头里无法包含关于https页面的信息,这可能是出于一种对https页面的保护措施。

伪造Referer信息

根据上文的描述,document.referre源自于Header中的Referer。那么如果想修改document.referre的值, 理论上讲,仅需要修改请求Header。可以将Header中现有的Referer替换成自己想要的值,如果原来没有也可以添加Referer。

在客户端,篡改Header是一件非常容易的事情。在一个页面的http请求发出去之前,可以利用截包工具将其拦截,然后分析出头部信息,并且修改Referre。

搜了一下,对于FireFox可以使用RefControl插件方便的进行修改。总之,欺骗Traffic source是轻而易举的事情。

页面强制Refresh

写完不久就发现遗漏了一种页面跳转的方式,即在html中的meta标签里强制指定页面进行refresh。例如在b.html中写入

<meta http-equiv="Refresh" content="5;URL=a.html">

则过5秒后浏览器会自动向server发起a页面请求。

经过测试,在IE8,FF3.6-FF4.0中,均不会带有Referer信息,但是chrome却能够鬼使神差的把b.html作为Referer添加进头部。

JS里的各种trim实现

Mar 12th, 2011 | Posted by

前不久blog频道有人发表了一篇讲js里各种trim实现的 http://justjavac.iteye.com/blog/933093 不过没有提及Dojo中的trim。Dojo中有两种trim实现:

1.较为常用的:

dojo.trim = String.prototype.trim ?
        function(str){ return str.trim(); } :
        function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); };

2.速度快但是实现较为复杂:

dojo.string.trim = String.prototype.trim ?
	dojo.trim : // aliasing to the native function
	function(str){
		str = str.replace(/^\s+/, '');
		for(var i = str.length - 1; i >= 0; i--){
			if(/\S/.test(str.charAt(i))){
				str = str.substring(0, i + 1);
				break;
			}
		}
		return str;
	};

第一种实现位于dojo base中,是dojo针对JS缺陷做出的一种弥补,也是dojo里最经常被调用到的trim。 第二种实现位于dojo.string中,是dojo里string工具类的方法。这种实现比较诡异,也很有趣。 另外在Dojo注释里看到有关各种trim方法的对比的文章,故将其翻译下来,原文地址:Faster Javascript Trim

Faster JavaScript Trim

s中并没有自带trim方法,但是该方法被无数的JS库实现了,并且通常都是将trim置为全局函数、或者将trim作为String.prototype 的方法。然而,我从没见到过一种 trim实现能够充分发挥出它的效率,毕竟,大多数的程序员并不了解正则表达式的性能问题(= =!)。当看到那些极为糟糕的trim实现之后,我决定研究一下如何编写出高效率的trim。在正式进入分析之前,先来看一下结论:

Method Fifox2 IE6
trim1 15ms <0.5ms
trim2 31ms <0.5ms
trim3 46ms 31ms
trim4 47ms 46ms
trim5 156ms 1656ms
trim6 172ms 2406ms
trim7 172ms 1640ms
trim8 281ms <0.5ms
trim9 125ms 78ms
trim10 <0.5ms <0.5ms
trim11 <0.5ms <0.5ms

Note1: 这里的比较结果是在作者的电脑上对Magna Carta (over 27,600 characters) 运行20次trim之后得出的 Note2: trim4和trim6是JS库中最经常使用的实现方式 Note3:前文说的极为糟糕的trim实现并不在上面11种trim里,但在文章的末尾会提到。

The analysis

JS里的trim可能有很多种实现方式,上表的11种是最显著的。这里所作的分析都是基于FF2.0.0.4和IE6。(太老了,不过在天朝,研究IE6还是有意义的)
Trim1:

return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

如果考虑各种情形,这也许就是最好的一种trim实现了。trim1在处理长字符串时速度优势非常显著。速度在很大程度上取决于这里的两个regexp触发的js正则引擎优化。
Trim2:

return str.replace(/^\s+/, '').replace(/\s+$/, '');

非常类似于trim1,但是速度稍慢,因为它不会触发一些优化。

Trim3:

return str.substring(Math.max(str.search(/\S/), 0), str.search(/\S\s*$/) + 1);

trim3通常比下面的trim快,但是比trim1和trim2慢。

Trim4:

return str.replace(/^\s+|\s+$/g, '');

这是一种较为简单的实现,因而被广泛用在各种js库里。如果作用于短字符串,而且没有头部空白或者尾部,trim4会是最快的。 这种速度上的优势部分来自于它触发了initial-character discrimination optimization 。如果是作用于长字符串,那么它比trim1-3慢,因为最高级别的‘alternation ’(即该regexp里有个或)阻碍了一些优化。

Trim5:

str = str.match(/\S+(?:\s+\S+)*/);
return str ? str[0] : '';

如果是作用在空字符串或者仅仅包含空格(“whitespace-only”) 的字符串上,trim5的速度可能会最快,因为它会触发一些pre-check of required character 的优化。注意,在IE6下该方法针对长字符串会非常的慢。

Trim6:

return str.replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1');

这也是一种比较普遍的做法,被一些牛逼的js code所推广。它和trim8很相似,但它在IE6下会非常的慢。

Trim7:

return str.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1');

和trim6基本相同,唯一的区别就是trim7用了一个非捕获性分组。

Trim8:

return str.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1');

trim8使用了简单、一趟(因为用了?)、贪婪的匹配方式。trim8在IE6下会特别特别快。说明IE会针对 “any character” tokens做一些超级优化。

Trim9:

return str.replace(/^\s*([\S\s]*?)\s*$/, '$1');

如果作用于非常短的字符串,而且字符串包含非空格字符以及边缘是空格,那么trim9将会非常快。这种性能上的优势是由于它使用了简单的、一趟、惰性贪婪匹配。同trim8,trim9在IE6下速度也远快于FF。 下面我在一个JS库里的实现看到的trim实现,列出来做一个警示

return str.replace(/^\s*([\S\s]*)\b\s*$/, '$1');

该方法有时是最快的,比如是作用在短字符串,而且该字符串包含非空格字符以及边缘是空格。但如果是长字符串,里头有很多单词的边界,它的性能就很差了。如 果是仅仅由空白字符组成的长字符串,它的性能将无比糟糕。不要使用这种实现!

A different endgame

上面表格中的11种trim尚有2种还没涉及。这2种方法采用的是非正则表达式、正则与非正则混合的方法。 经过比较和分析后,我想尝试一下如何用非正则表达式去实现一个trim:

Trim10:

function trim10 (str) {
	var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007
                           \u2008\u2009\u200a\u200b\u2028\u2029\u3000';
	for (var i = 0; i < str.length; i++) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(i);
			break;
		}
	}
	for (i = str.length - 1; i >= 0; i--) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

它的表现如何呢?如果是针对长字符串,并且头部尾部不包含过多的空白,该方法会轻松的战胜上述的9种trim(除了IE中的trim1/2/8,它们快的太离谱了) 这是否意味着FF里的正则表达式很慢?一点也不。这里的问题在于,尽管正则表达式非常适用于去除头部的正则表达式,但是它们并没有一个合适的方式去跳转到字符串的末尾。然而trim10却可以做到,它的第二个for循环直接从字符串的末尾开始处理。 知道了这点,那么不如去创造一种正则和非正则的混合实现,它既有正则表达式在处理字符串开头空白的性能,又有非正则表达式在处理字符串末尾空白的速度优势。

Trim11:

function trim11 (str) {
	str = str.replace(/^\s+/, '');
	for (var i = str.length - 1; i >= 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}

虽然trim11在处理有些字符串的时候比trim10慢,但是它任然速度飞快,并且使用了更少的代码。而且,如果处理的字符串在开头有大量的空白(包含直接由空白组成的字符串),那么trim11的速度将会明显比trim10快。

conclusion

由于不同浏览器的区别,处理的也是不同类型的字符串,因此没有一种trim方法总是表现的比其他所有都快。这里我有一个一般的建议:

  • 使用trim1 如果你想获得一个比较快的速度,并且能跨浏览器使用
  • 使用trim11 如果你想在不同的浏览器中快速的处理长字符串

如果你想自己测测上述所有trim方法的性能,那么尽量按照我的适用建议。后台处理可能使得某一次的测试结果极为不准确,因此建议测试很多次,并且仅仅取跑的最快的一些结果。 最后一点建议,虽然很多人喜欢缓存正则表达式,比如将它们作为全局变量存储起来,这样以后就不要重复编译了。但是这对trim方法来说意义不大。另 外一些浏览器会自动的缓存正则表达式,所以在一些不包含其它regexp的循环里使用trim,浏览器实际上并不会去重复的编译。

better trim

写完这些不久我就意识到trim10/11可以被更好的改写。trim12采用了和trim11类似的正则非正则混合的方式。

function trim12 (str) {
	var	str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}

去蝴蝶书上查了下,Javascript中的“ \s ”相当于“ [ \f \n \r \t \u000B \u0020 \u00A0 \u2028 \u2029 ] ” 其中: \f             换页符
\n            换行符
\r             回车符
\t             tab符
\u000B    垂直定位符
\u0020    空格
\u00A0    非中断空格
\u2028    行分隔符
\u2029    段落分隔符
根据Ecma-262 3rd 中描述:

Tags:

读技术书的几条tip

Jan 28th, 2011 | Posted by

最近想学下python,搞了个电子版的《Head First Python》读下,才看了前言部分,作者关于阅读技术书籍有几条tip,目的是为了让读者理解透彻,让阅读有趣味,不至于瞌睡,现摘录如下:

  1. Slow down. The more you understand, the less you have to memorize.
    多思,重在理解。
  2. Do the exercises. Write your own notes.
    身边放一支笔和一张纸,做点题,在纸上涂涂画画。
  3. Read the “There are No Dumb Questions.”
    书中的问题试着去解答。
  4. Make this the last thing you read before bed. Or at least the last challenging thing.
    作者的意思是最好睡前读,因为学习了新的知识后大脑需要时间去消化记忆,如果这时间做了别的事情,学到的东西会遗忘。这条不太同意。
  5. Talk about it. Out loud.
    直到能向别人清晰讲述一个知识点后,才算真正掌握了它。
  6. Drink water. Lots of it.
    阅读时多喝水,脑子需要润滑剂。
  7. Listen to your brain.
    一旦发现自己无法集中注意力,或很快忘记自己刚读的内容,立马休息片刻。
  8. Feel something.
    最好阅读时能有情绪上的收获。要么拍着大腿说“这段写的太好了”,或者看完一章后抱怨说“这章简直在放屁”,或者觉得“这书写的太枯燥无聊了,我应该扔了出去玩一会”,这些都比翻完一本书一点反应也没有强。
  9. Write a lot of code!
    不能同意得更多。