Submitted by gouki on 2010, May 24, 9:15 AM
看了一天世博,还是有点感触的。或许就象yhustc在我的评论里说的,地小人多,难免会挤。
我那天7点半左右出门,下大雨,乘公车到四号线然后转七号线,到长青路站下车(近B区),进去之后就开始排队,大约8点55分开始排队,将近10点才入园。检查的时候把我的饮料也给没收了。唉。
由于老婆带了世博护照,于是我就觉得自己想赶场子的,不是为了逛,而是为了敲章。真的有意义吗?我怀疑,而且世博护照的敲章真的没啥意思,我觉得那种拿着地图出来敲章的才是很不错的,个人建议是拿着世界地图过来敲章才过瘾。
本以为下雨人会少,结果那天却是开园以来人最多的一次,在某次排队的时候听到某老太太 说排沙特馆4小时,日本馆4小时,暈了。150块钱,就只能看两三个馆了。晚上在排队进波兰馆时,遇到一镇江男子说是看了很多馆,因为他只去那些排队很短的馆,大馆不去,这样可以看得更多一点,毕竟在上海时间太短。
我在排队的时候就觉得瑞士馆时间特长。。2小时左右。结果老婆的任务就是敲章,都没有仔细看完。
因此我最后还是认为:如果你想真正的享受人文,那么还是慢慢观看,每周看几个馆就成了,不要赶场子,否则就没有意义了,纯粹为了看而看,当然票价也太贵了。如果票价50左右,我每周去看两三个馆还是可以考虑的。
【插入】真的受不了那些插队的,大家都在排队,花了那么长时间,怎么还会有人想着插队?这些也就算了,那些带着一位70岁以上老人当挡箭牌的更无耻,一位老人后面带了7、8位人,说应该享受特殊照顾。看着他们说着流利的英文,却做着这种事情,真的感觉有点悲哀
最后说一下饮食,吃了比利时的小饼,荷兰的喜力啤酒。新加坡的美食。或许都有特色,但真的有点贵。因此,在园里还是吃KFC之类的比较合算,当然享受美食的话,真的不错。德国的啤酒坊没去成,因为老婆说里没没吃的就啤酒了。。。郁闷啊。
上一张我等了15分钟才拍到的图:
(点击可看全图)
Tags: 世博
Misc | 评论:6
| 阅读:19649
Submitted by gouki on 2010, May 20, 11:55 AM
司徒正美在看到老赵的博客鄙视IE6用户时,不甘寂寞,放出了一段残忍的代码,可以对IE6、7进行封杀处理。。
代码如下:
XML/HTML代码
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <meta content="IE=8" http-equiv="X-UA-Compatible"/>
- <meta name="keywords" content="IE6与IE7封杀器 by 司徒正美" />
- <meta name="description" content="IE6与IE7封杀器 by 司徒正美" />
- <script type="text/javascript">
- //使用setAttribute也行,值好像是固定,为1(读作"日",日得好!)
- document.createElement("li").value = 1;
- </script>
- <title>IE6与IE7封杀器 by 司徒正美</title>
- </head>
- <body>
- <h1>杀!杀!杀!</h1>
- <h2>不行请刷新页面(这是运行框的问题)</h2>
- </body>
- </html>
还有一段是可以关闭当前窗口的:
XML/HTML代码
- window.opener=null;window.open('','_self');window.close();
我的博客不能执行代码,如果你想测试,你可以到http://www.cnblogs.com/rubylouvre/archive/2010/05/18/1738370.html进行享受。
Tags: ie6, ie7, firefox, chrome
Javascript | 评论:0
| 阅读:18292
Submitted by gouki on 2010, May 16, 2:05 PM
这篇 文章已经是07年的了,不过,我一直没有关注过drupal的db类,所以对于这方面我也根本 就没有在意过。8过,我在我的siterpc中,我也是采用了sprintf的写法,不是为了安全,而是为了格式化。因为在siterpc里我们几乎不接受外部变量,所有的变量都是由我们自己传入,所以对于安全方便忽略了很多。但还是用sprintf来格式化SQL语句了。
因此看到这篇drupal的db_query安全过滤,突然发现,可以让我的代码少写很多了。(参数可变时请使用vsprintf)
以下是原文 :
Drupal通过C风格的字符串输出格式实现了对sql语句的安全过滤。
使用方法:
PHP代码
- db_query("SELECT n.nid FROM {node} n WHERE n.type = '%s'", $type);
-
- db_query(sprintf("SELECT n.nid FROM {node} n WHERE n.type = '%s'", $type));
drupal db_query核心代码如下:
PHP代码
-
-
-
- define('DB_QUERY_REGEXP', '/(%d|%s|%%|%f|%b)/');
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function db_query($query) {
- $args = func_get_args();
- array_shift($args);
- $query = db_prefix_tables($query);
- if (isset($args[0]) and is_array($args[0])) {
- $args = $args[0];
- }
- _db_query_callback($args, TRUE);
- $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
- return _db_query($query);
- }
-
-
-
-
- function _db_query_callback($match, $init = FALSE) {
- static $args = NULL;
- if ($init) {
- $args = $match;
- return;
- }
-
- switch ($match[1]) {
- case '%d':
- return (int) array_shift($args);
- case '%s':
- return db_escape_string(array_shift($args));
- case '%%':
- return '%';
- case '%f':
- return (float) array_shift($args);
- case '%b':
- return db_encode_blob(array_shift($args));
- }
- }
简单的对一些输入做了处理。参考:
http://drupal.org/node/101496
原文来自于:http://www.luochunhui.com/id/315
Tags: drupal, php, escape_string
PHP | 评论:2
| 阅读:22183
Submitted by gouki on 2010, May 1, 9:16 AM
这段内容的摘要来自淘宝QA,http://qa.taobao.com/?p=6276,我只取了他的小标题,详细内容请移步过去,谢谢。
1.建立清楚的视觉层次
2.尽量使用用户习惯的用法
3.把页面划分为明确定义的区域
4.明确标识可以点击的地方
5.降低视觉噪声
2和3是我非常想要改进的地方。当页面明确定义再配合用户习惯,这样的内容才是用户想看到的内容。也只有这样的方式才会让用户更想继续点击看下去。【比如很多人习惯在文章结束部份放上相关文章,也就是这个道理,可是一篇文章有多个标签时,用户如果只关注其中一个,那剩余的相关文章就不准确了。如果可以判断一下referer获取用户来源的关键字,与tag匹配一下,去掉不相关的TAG内容,再取相关文章,就会更精确一点】
5也是很重要的,否则就算你的页面再明确,别人也不会停留太久
Tags: 淘宝, 页面结构
Misc | 评论:0
| 阅读:16092
Submitted by gouki on 2010, April 25, 9:55 PM
标题这种话已经在被很多人所理解,现在大多数开发人员已经不再把语言当成障碍,而是把思想当成障碍,语言的跨度其实真的很容易解决,但思想不进步,你有着再好的语言又怎么样?即使你用的是所谓的自然语言(即平时生活中的语句),但只要你没有思想,没有逻辑,你又能写出什么样的程序?
以下内容来自老王参加的某大会的记录、摘要。我是看中其中的一小部分,觉得有感触。。原文在这里,点击进入:
部分我认为不错的精华,或者说是我关注的。。。
1、课程:失败来临的征兆(讲师:Michael Nvgard)这一切正是Michael Nvgard先生演讲的主旨:意外的问题总是在不经意间发生,要注意把它们的影响限制在局部,避免拖累整个应用。比如说在SOA中集成若干个服务时,应该 设置好各个服务的Timeout,避免其中一个服务崩溃连带整个系统等待。
2、课程:Twitter的可伸缩性数据架构(讲师:Nick Kallen)
Nick Kallen介绍了Twitter在处理海量数据时的经验,其实总结出来就三条:分区,索引,复制。
着重介绍了Tweets,Timelines,Social Graphs,Search Indices四个基本功能的实现:
Tweets比较简单,就是分区,虽然可以使用id或者user_id来分区,不过目前Twitter使用的是按time分区。
Timelines相对复杂了一些,最开始采用的方法是纯SQL的,大致如下:
SQL代码
- SELECT * FROM tweets
- WHERE user_id IN (SELECT source_id FROM followers WHERE destination_id = ?)
- ORDER BY created_at DESC
- LIMIT 20
这当然不是一个高效的解决方案,后来采用了被称作离线计算(Offline Computation)的解决方案,其思路大致就是每当发送一条推的时候,采用队列存储避免峰值瓶颈,同时向所有Followers分发此消息,然后每 个分发 终端在缓存中完成合并计算。乍一听起来这似乎也不是什么好的解决方案,一旦某人有非常多的Followers,即便分区,这个分发操作也会非常耗时,但按 Nick Kallen的介绍,Twitter确实是这么做的,细节操作有待研究。
剩下的问题不多说了,Nick Kallen给了PPT地址:
http://www.slideshare.net/nkallen/q-con-3770885
3、课程:构建可扩展的微波系统(讲师:杨卫华)
杨卫华作为新浪微博的架构师,这次的PPT做得很酷,虽然在内容上和Twitter有些重复,但还是很不错。
提到了Memcached的evictions问题,给出了三个守则:
1:规划好cache的容量
2:将永久数据和临时性数据分开
3:不使用随机字符串做Key
至于原因,可以参考
杨卫华的博客上的介绍:
Memcached数据被踢(evictions>0)现象分析
4、课程:敏捷在中国(讲师:Tom Mellor) 编程工期的催促往往让程序员只考虑眼前的既得利益,却忽视了后期的风险。
5、课程:如何在团队中有效实施TDD(讲师:麦天志)在阐述为什么即便工期紧张也应该使用TDD的时候,他给了一个比喻:医生做手术的时间很紧张,但即便 这样,手术前清洗双手的工作程序也是必不可少的。在讲解重构时,他强调了TDD是重构的基础,只有这样才能保证重构没有改变现有的行为,否则就不是重构,而是重写。
Tags: 语言, 思想, 参考
PHP | 评论:0
| 阅读:16199