Category: 未分类

  • SQL Server 无法修改表,超时时间已到

    SQL Server 一张表存储大量数据的时候,对表结构作修改就非常耗时了。其实耗时还好说,我们年轻,有的是时间……最怕的是它觉得太耗时就放弃给你修改了。这几天想给某个表加个字段,就遇到了这样的问题。点了保存后过一段时间,就会弹出个对话框说:

    无法修改表。超时时间已到,在操作完成之前超时时间已过或服务器未响应

    解决办法:在 SQL Server Management Studio 里,通过菜单“工具-选项”打开选项对话框。在左侧寻找“设计器-表设计器和数据库设计器”,然后在右侧勾选“为表设计器更新重写连接字符串的超时值”,在它下面的“事务超时时间”默认应该是 30 秒,我们应该把它改得稍微大一些,不过好像不能超过65535.

    微软的软件报错的方式很像某些部门的声明──令人费解,这是它一贯的作风。

    话说我本来是比较不喜欢用 SQL Server 的,尤其是刚开始的时候遇到太多气人的问题,可是由于工作原因又不得不用。不过当那些让人郁闷的问题一个一个解决掉的时候,它也就不那么烦人了。

  • Ruby 的一个陷阱

    今天是 2010-01-25. 我在 irb 中测试 Date 类的 today 方法:

    >> (Date.today -1 ).to_s
    => "2010-01-25"
    >> (Date.today - 1).to_s
    => "2010-01-24"
    >> (Date.today-1).to_s
    => "2010-01-24"
    

    结果多少让人有点吃惊。第一次我输入太快发生了错误,减号和 1 之间的空格被我敲到 1 后面去了,但是两次结果竟然不一样!

    不过我很快回过神来了,第一次输入,Ruby 把 -1 解释成为 today 方法的参数了。因为 Ruby 的方法调用可以不加括号,虽然不鼓励所有的函数调用都这么干,但是去掉一对空的括号是被鼓励的(ref)。例如 puts,我就没见过有人调用它会加括号。

    再看第三个输入,那些对空格很吝啬的人也不会遇到这样的问题,除非他不小心在减号前打了一个空格。运算符和操作数之间的空格竟然影响了程序的解释结果,这让人很纠结。为了保险起见,我还是给这个方法调用加上了一对空的括号。

    假如 Ruby 像其它语言一样要求方法调用必须加括号,这个问题就不会存在。对于解释型语言来说,语法的灵活很可能导致解释效率的降低。不过这么多人喜欢 Ruby,也有一部分原因是它跟其它语言很不一样。

    我忽然想到,如果大学里面有 Ruby 课程(千万不要是必修,把大学变成培训班),肯定会有某些老师把上面的这个小把戏作为考试题,看着学生们出错得意地笑。就如同考察逻辑运算符的优先级一样无聊,其实只要记住括号的优先级最高就行了。

    另外,假如 Ruby 像其它语言一样要求方法调用必须加括号,有的 callback 实现就会更简单。把方法作为参数传递的时候,像 Python 一样直接写方法名不就可以了吗?不行,这是一个方法,方法调用不必要加括号,Ruby 解释器发现了方法名就会尝试执行它。所以得写成 “method(:my_callback)”,才能传入一个 Method object. 又因为这是一个 Method object,所以调用它的时候也不能像 Python 一样简单地写 “callback(…)” 了,需要写成 “callback.call(…)”.

    看来“可省略的括号”使得这种思路的实现复杂化了,不过似乎 block 也是无所不能……

  • Milestone blog-0.2 completed

    2 weeks late…我在用 trac 跟踪自己的业余项目,今天终于 close 了这个 milestone 的所有 tickets.

    除了前几天记录的最新评论和站内搜索两个功能,这个 milestone 还包括:

    • sitemap.xml 生成
    • 更新了旧文章中所有指向旧域名的交叉链接到正确的新域名链接。因为我不光是换了域名,程序、数据库都变了,所以稍微麻烦一些
    • 评论框 Markdown 效果预览

    还有其它好多琐碎的东西。最近的改进大部分都是访问者不太会注意到的。

    另外发现有一大堆 python 的进程,于是为了整洁起见,重启了一下服务器。我给我的程序指定了 fastcgi 的 max_procs 为 1,所以不可能是正常地 spawn 出来的,而很有可能是重启 lighttpd 的时候留下的,看来以后 stop 的时候要杀一下进程了。

  • OpenID, 信赖哪个 Provider?

    OpenID 的概念确实非常好,正如它网站首页的大幅标语:

    Can’t remember your passwords? Tired of filling out registration forms?
    OpenID is a safe, faster, and easier way to log in to web sites.

    我曾经在 myOpenID 注册了一个帐号,然后在原来的 qingbo.org 首页加入了 delegate 之类的 meta 标签,后来也没怎么用过。

    知道最近想修改 twitterfeed 上的自动发布选项时,才发现发布我 feed 的帐号用的是 OpenID…… 这可郁闷了,此时我的 qingbo.org 首页已经 301 redirect 到 qingbo.net 了。终于有一天我以迅雷不及掩耳之势取消了重定向、登录进 twitterfeed (期间密码输入错误许多次)、然后又恢复了重定向。进了 twitterfeed 的帐户,我马上删除了里面所有的 feed,退出后重新注册了一个帐号── twitterfeed 当初是只能用 OpenID 登录的,但现在加上自己的注册功能了。

    由于 OpenID 还没有普及到一定程度,造成我注册了一个 OpenID 却忘记了密码。普及程度不够还造成一个比较严重的后果就是对于像以前的 twitterfeed 一样只提供 OpenID 登录的站点来说,会阻挡一部分不太愿意跑到别处注册一个 ID 的人。不过随着现在 Google, Yahoo! 等纷纷提供 OpenID 服务,这个问题好多了,大部分人都会有 Google, Yahoo! 的帐号。有 Google 帐号,即使不把它做 OpenID 用,你还可以使用 Google 数不清的优秀服务,而注册一个“专门提供 ID”而没有任何实际服务的比如 myOpenID 帐号,过阵子不用就会像我一样忘掉了。

    可能不少用 OpenID 的喜欢使用自己的域名。但是自己的域名就很可靠吗?cn 域名前途未卜,我们也看到国内某些知名网站的悲惨遭遇。即使在国外,也不时发生域名被盗的事情。像我这样,用某域名做了 OpenID,可是后来却对它作了 301 redirect,就只能怪自己了,不过还好自己有控制权。

    综上,因为使用 Google 的服务较多,我还是信赖 Google 作为我的 OpenID Provider,可靠且不会忘记密码. Stack Overflow 到现在也只提供 OpenID 登录,我使用的就是我的 Google 帐号。

    我实际上没有仔细看过 OpenID 的 spec,以上如有错误,请不吝赐教。

  • Mac 还是缺中文输入法

    中文显然不适应现代信息化的发展——这句话恐怕会引来不少争论,幸好现在我 blog 收视率很低。许多人在 Linux 面前退却的原因,可能就是系统不能很容易地支持中文,或者不能很容易地配置好中文输入。这问题最近几年在“多方努力”下,应该是比五年前好多了。曾经有“汉语编程”的闹剧,不知道有没有大学开了专业课,解决了就业问题,也不知道汉编的认证有没有人买到。现在又爆出了“汉办”的惊天丑闻,怎么这么多笑话都扯上“汉”啊……

    扯远了。开始使用 Mac 以后,我买了个 QIM 的 license. 买的时候就知道有 FIT 了,不过觉得收费的肯定是比免费的要好,就从来没有试过 FIT. 直到前几天在 twitter 上抱怨 Mac 输入法也没有个像 Windows 上的一样好的,有两位朋友就推荐我用 FIT,于是下载安装了。使用了一天多,反正没感觉比 QIM 差,至少响应速度是明显快了。词库方面也还不错,倒是 QIM 的词库的排序经常让我感觉很蹊跷。

    FIT 的原作者已经停止更新,最近的发布都是由 tianyu263 完成的。

    更酷的是 tianyu263 还制作了一个基于 sogou 云输入法的 Mac 输入法,只可惜在我的系统上无法使用。我倒腾了一番,推测是因为只能在 10.6 的 OS 中运行,而我还在 10.5 时代。

    如果我们的网络接入足够好,我觉得云输入法就真的可以解决问题了,不过现实是残酷的,我们的网络接入又贵又慢。

    总有一天搜狗或者腾讯或者 Google 会推出 Mac 输入法,最先推出的肯定占得先机。也许是现在 Mac 的市场份额还很小,不值得他们考虑。但是 Google 最近推出日文输入法的时候,除了 Windows 版本,还同步推出了 Mac 版本,中文输入法也快了吧。

    输入法的最高境界就是使用它却感觉不到它的存在,Windows 上的主流拼音输入法已经差不多这样了。但是 Mac 上的可就差太远了,虽然很难说出具体差在什么地方。

    竞争可能会使 QIM 的利益受损,但是对广大 Mac 用户来说只有好处。有竞争才有进步,什么都是这样,所以我们强烈要求 Windows 平台的输入法们大举进攻 Mac.

  • 新网互联停止“网址转发(url forwarding)”功能

    域名在新网互联注册的朋友们需要注意一下,它已经停止网址转发(url forwarding)服务了。之前添加过网址转发记录的,只是在管理界面上有那么一条记录而已,已经没有任何作用了。修改现有的或者新增 url 转发记录,它都会说“系统调整中,转发暂停”。

    我觉得这个提示可以归类为“通常令人费解的声明”。这个词是今天看到一篇翻译文章,原文中是 “usual confused statements”。我感觉这个词非常的精确、贴切,就是专门拿来形容无耻、无赖之人的声明的。

    作为一个国家顶级的域名注册商,新网互联在客户毫不知情的情况下中断了客户已经在使用的服务,而且我也不知道这是什么时候中断的,新网互联网站公告里也看不到任何相关信息。

    当然,url 转发并不是域名注册商必须做的事,但是既然提供了,就有许多客户将自己的 business 依赖于你的这个服务上,结果就这么不声不响停掉了。我也是最近去修改一条记录的时候才发现这个问题。

    遇到这样的事,当然很想换一家注册商了。但是我相信更多被新网互联折磨的受害者是想从它那儿转出域名的客户。由于国内多数公司的短见、鼠目寸光,他们留住客户的最重要手段就是为客户的离开设置重重障碍,甚至收取额外的费用。

    虽然可能新网互联遇到了什么“不可抗拒”因素,但是我还是建议:

    1. 正要注册域名的新手,千万不要在国内注册,以免被国内的无良注册商套住。请搜索“域名如何转出”,即可知道从国内注册商转出域名有多么困难。国外注册域名一点也不贵,并且转出非常容易,不会有任何人给你设置障碍。
    2. 已经上当受骗的受害者请参考“到ICANN投诉万网Complaint范文”,投诉欺骗你的域名注册商(包括但不限于万网、新网互联)。

    希望这些基本的意识能在互联网上广泛传播,让上当的人越来越少。当然,我们更希望这些注册商能够弃恶从善,改头换面,重新做人,拿出优质的服务来吸引住客户。

  • 最新评论与站内搜索

    今天更新了一下网站的程序——其实这个初期阶段,我几乎有空就更新一下,呵呵。

    最新评论功能

    之前右侧 sidebar 一直是空的,既不美观,又浪费空间。于是首先加上了一个非常简单的 Latest comments 功能,别看简单,在显示哪些信息,怎么布局这些问题上,真是很伤脑筋,我还通过某搜索引擎的 cache 找到 blog 以前的最新评论功能布局参考了一番,到最后就出来这么个样子,凑合着看吧……

    功能一上线吓了自己一跳,这才没几天,已经有 spam 了!我这是自己写的程序,表单字段名也是很奇怪的,看来人肉 spammer 可真不少。可怜删除评论的功能我还没做,只好到数据库里直接删掉了。

    站内搜索功能以及……

    另外在 sidebar 的最上面,放了一个 google custom search 的框,这是利用 Google AJAX Search API 实现的。我这是在“顶风作案”啊,不过没办法,我不知道其它的搜索引擎有没有提供同样优秀的服务。至少百度目前还没有,并且对我的网站索引极其滞后(也许是不太重视技术方面的网站?),而 Google 提供了 ping 的 API,有更新后几分钟就可以被索引,因此 Google custom search 完全可以替代使用 WordPress 时候使用的自带站内搜索,而且质量更好。似乎雅虎也提供了类似的服务?我隐约记得有这么一件事,而且对雅虎来说是负面的,一位年轻有位的牛人离开了这个团队,让一个大家充满希望的项目变得前途黯淡。目前懒得去翻腾了,等什么时候 google 的真用不下去了,我再去研究。

    当然了,集成这么一个自定义搜索太小儿科了,我在后面做了更有趣的事。这并不算是个新的 idea,很多网站都已经有类似的实现,但是不知道有没有人用 google 的服务来实现这个想法。如果浏览者是从搜索引擎过来,比如从百度、google 搜索到我的网站点击过来的话,就会在右侧搜索框处看到类似下面图片的样子:

    integrated google custom search

    你可以自己用 google 搜索“url编码”,然后点击 qingbo.net 的结果试试。

    我感觉酷是次要的,对于依赖搜索引擎流量的网站来说,这无疑会增大用户继续浏览的几率,降低 bounce rate. 而且提供高度原创行、科学性的结果,对用户获取信息也是很大的帮助。

    目前该功能支持 google, baidu, soso, sougou, yahoo, bing, 几乎所有我能想到的搜索引擎,几乎所有常见的编码方式,尽管有些搜索引擎目前还没有过来流量……如发现 bug,请及时告知我,非常感谢!

  • 让别人看见你贴的 Flickr 图片

    上一篇文章“Flickr 被封,图片不显示的解决办法”说到如何访问 Flickr,但是只有自己能看见也不是太好,在 blog 贴图之后,访问者的系统如果没有像上文中说的修改 hosts 文件,一样还是看不见图片。除非是私密的照片,别人看不见,分享的目的也就没有达到。

    别着急,还是研究 Flickr test page,很容易发现玄机,能显示的用的是不同的域名。上文只是把原来的域名指向这两个 ac4.* 的新 IP 而已。

    因此解决办法很简单,只要贴图的时候把 http://farmX.* 改成 http://ac4.farmX.* 就可以了。

    我也更新了一下 Flickr markdown code 这个 Greasemonkey 脚本,它会自动将 Markdown 代码中的链接加上 “ac4″,同时也顺便把 HTML 代码以及原始链接两个框改好了,所以如果你懒得每次手动改,即使不用 Markdown,也可以考虑使用这个脚本 🙂 当然按此方法重新写一个也很简单了。

  • Flickr 被封,图片不显示的解决办法

    最近几天 Flickr 新上传的图片又不显示了,只有红叉叉。我们都知道,它被封掉是好心人为了保护我们,免受很黄很暴力的、让人心神不宁的、导致本来能考重点大学的我们最终只能上个专科的不良信息的侵扰。

    但是我们也要学习西方列强的先进技术,师夷长技以制夷!被封掉的是 farm3 和 farm5 两个集群。Flickr 提供了一个测试页面可以方便地查看网络状况,非常贴心:

    Flickr test page

    一般人看到这个页面,也就知道该怎么办了吧?还是不懂的话,在 hosts 文件里加入下面两行 (不会改 hosts 的,上 google 或者 baidu 搜,一大堆一大堆的教程):

    76.13.18.78 farm3.static.flickr.com
    76.13.18.79 farm5.static.flickr.com

    说明

    • Access Flickr! 扩展现在是无效的,不知道作者近期是否会更新,另外我们也没必要使用扩展中那么复杂的机制。
    • 找到访问方法之后,我很犹豫要不要公开……因为公开了很有可能又被封掉。但是如果大多数人不知道怎么上去,那跟被封基本上没什么差别。等这个方法失效了,自然会有新的。
  • 百度/谷歌与突发负面新闻 (SEM)

    Flickr markdown Greasemonkey 脚本写好了,我要开始贴图了!

    本次是从百度和 Google 上弄下来的几张截图(大约一个月前的),分别是搜索“石家庄砸酒店”和“宾馆内藏摸吧”这两个词的结果页面:

    Google:

    Google
    Google

    Baidu:

    baidu 石家庄砸酒店
    baidu

    这两件事都是网上突然出现的热点。“石家庄砸酒店”虽然是几年前的事了,不过最近不知道为什么又火了一阵。可以参考它的百度指数

    不需点大图就可以看到谷歌的结果页面右侧是空的,而百度显示了许多广告。这两个词是前一段时间两个典型的负面新闻,我相信没有人愿意在这种关键词上投放广告吧?做 SEM 的人肯定知道加否定关键词,不过这种“摸吧”事件,发生之前大概许多人都没有听说过。

    据我的观察,Google 的搜索结果(至少我可以确定”石家庄砸酒店”)最初也是有广告的。但是在我截图的时候,广告已经消失了。而刚才我还去百度搜了一下”石家庄砸酒店“,广告仍然在,其中不乏携程这样的大户。

    所以我冒昧推断,谷歌应该有一个应对突发负面新闻的机制或系统,在遇到这种情况时,可以及时作出反应,最小化客户的损失。而百度似乎没有这回事,只能靠客户自己去发现,然后加否定词解决(都这么长时间了,携程还坚持在这上面花钱……或许 ROI 真的很好?难道有人抄家伙要去砸酒店?)

    这也就要求做 SEM 工作的有足够快的反应速度,尽早发现否定词,尽量减少这样的不必要的损失。这样的热点,烧钱可是飞快的哦!