TidyBlog 2.0 Beta上线

自上年9月发布1.5 beta版以来,TidyBlog一直没更新过,这几个月也没写什么文章,主要原因是从上年10月到今年4月初的这段时间都在忙师青网这个项目(当然是业余在忙)。而最近一个月则是在重构TidyBlog,成品就是今天上线的TidyBlog 2.0 beta。主要修改包括:

  • 从WebForm迁移到ASP.NET MVC 3(Razor)
  • 充分应用HTML 5中header、footer、section、article等标签,并且在不支持这些标签的浏览器下也能正常浏览。
  • 页面UI做了较大的调整,而且不再兼容IE 6;用户使用IE 6浏览本博客时,会出现升级浏览器的提示。
  • 侧栏增加了推荐文章、阅读排行、微博挂件三个模块。
  • 文章页增加了转发微博功能;发表评论时通过AJAX提交,体验更加流畅。

当然,由于这是我第一次编写ASP.NET MVC Application,现在这个版本问题还不少。比方说,前台页面的执行时间从WebForm框架下的几十毫秒一下子飙升到MVC框架下的几百毫秒。如果哪位朋友在这方面有头绪,不妨指点一下;其他意见和建议也可以作为评论发表。

验证码的几个常见漏洞

把验证码存储在Cookie中

一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确。由于Session会占用服务器资源,我曾经想过是否可以把验证码的值加密后存储在Cookie中。不过事实证明,这只是异想天开罢了。

假设验证码的值是a,通过sha1加密后得到的值为b = sha1(a),并且把b存储在Cookie中。而用户提交的验证码值为c,通过判断sha1(c)是否与b相等,可以知道输入的验证码是否正确。然而,Cookie是受客户端控制的。如果用户事先通过肉眼看到验证码的值是a,又从Cookie中得知此时的加密值为b,那么,他只要在提交前把Cookie的值修改为b,提交的验证码值为a,就可以永远通过验证。

没有进行非空判断

这种情况可以直接用代码来说明:

if (Request["captcha"] == Session["captcha"] as string)
{
    // 验证通过,继续操作
}

假设用户绕过了系统提供的

[译]原生全屏Javascript API

HTML 5的<video>是一个相当不错的标签,但是它刚发布的时间,最大的问题是它不能像Flash那样实现真正的全屏。幸好,几个月后,大部分浏览器已经原生地支持全屏。

全屏API简史

  1. 第一个原生的全屏接口是在Safari 5.0(和iOS)中添加的 webkitEnterFullScreen() 函数。不过,它只能用于<video>标签。
  2. 在Safari 5.1中,苹果修改了这个API使它更接近于Mozilla的全屏API草案(比苹果的实现更早)。现在,所有DOM元素都可以调用 webkitRequestFullScreen() 方法。
  3. Firefox和Chome表示它们将会添加原生全屏API支持,而且这个特性已经在Chome 15+以及Firefox Nightly中实现。

在2011年10月15日,W3C发布了一份全屏API草案(由Opera团队的一名成员编写),它跟Mozilla的草案有两个主要的不同点:

  1. Mozilla/Webkit使用大写字母'S'(FullScreen),但W3C则不是(Fullscreen);
  2. Mozilla/Webkit使用cancelFullScreen,W3C使用exitFullscreen

TidyBlog重写初步完成

由于自己的粗心大意,TidyBlog的源码在几个月前完全丢失,所以这段时间一直在抽空重写TidyBlog,直到这周末,主要功能已经完成,于是就更新上来了。

这次重写同时也是代码重构,最重要的修改要数引入了一个简单的ORM,省去了大量的SQL语句。另外,编辑器换成了KindEditor,兼容性更好,功能更强大。

为避重蹈覆辙,Tidyblog源码已经传到SVN:http://code.google.com/p/tidyblog/ ,有兴趣研究的朋友可自行Checkout。由于功能尚未完全做好,就暂时不提供单独下载了。

使用canvas绘制时钟

准备工作

在HTML中指定一个区域放置时钟:

<div id="clock" style="position: relative;"></div>

时钟的一些外观设定:

var width = 260; // 桌布宽度
var height= 260; // 桌布高度
var dot = {
x : width / 2,
y : height / 2,
radius : 6
}; // 圆点位置、半径
var radius = 120; // 圆半径
var borderWidth = 6; // 圆边框宽度

创建<canvas>元素:

var clock = document.getElementByI

惠普4431s商用笔记本简单评测(下)

  • 分类:其他
  • 浏览次数:608
  • 评论次数:1

正如上篇末尾所说,下篇主要谈一下此机的缺点,其中星星符号代表其缺点的严重程度。

电源适配器无指示灯(★)

这个问题在上篇也谈到过,适配器上无通电指示灯,无法知道当前是通电还是断电状态(有可能插座坏了或者松了)。此外,其实指示灯也可以使适配器更加美观。

HP 4431s与Lenovo F41电源适配器对比

光驱声(★)

每次开机以及从休眠唤醒时,光驱都会发出一些声响。虽然声音不大,但总感觉有点不爽。

音频插孔没有用不同颜色区分(★)

无法直观看到哪个孔接耳机、哪个孔接麦克风,只有靠近去看插孔旁边的小图标才能知道

惠普4431s商用笔记本简单评测(上)

  • 分类:其他
  • 浏览次数:675
  • 评论次数:5

本来打算上一年入的笔记本,由于没有选到合适的机型而推到今年才出手。千挑万选之后,初步确定了两台机子,分别是Thinkpad E420sHP 4431s,均为i3版配置。最后选4431s的原因是,这款机带蓝牙、底板容易拆卸(方便清理灰尘、加内存),且在硬件配置差不多的情况下比E420s要便宜差不多2K。

机器在岗顶太平洋电脑城入手,价格不到¥4K5,加上开票以及8G内存,总价不到¥5K,赠品有单肩包、鼠标和鼠标垫。

外观

这机的A、C面都是金属拉丝,以银色为主。

HP 4431s

与之前用的联想F41相比,4431s的尺寸稍小,重量也轻一点。

[译文]ECMAScript 5严格模式(Strict Mode)

严格模式(Strict Mode)是ECMAScript 5的新特性,它允许你把整个程序,或者某个函数,放置在“严格”的操作语境中。这种严格的语境会防止某些特定的操作并抛出更多的异常。

虽然ECMAScript 5对ECMAScript 3是向下兼容的,但是在严格模式下,所有在ECMAScript 3中不赞成使用的特性都被禁用(或抛出错误)而不是兼容。

启用严格模式有以下好处:

  • 捕获一些编程错误,并抛出异常。
  • 阻止进行一些相对“不安全”的操作(例如访问全局变量),抛出异常。
  • 禁用一些让人迷惑的特性。

关于严格模式的大多数信息都可以在《ES5规范》[PDF]的第223页找到。

(注意:ECMAScript 5的严格模式跟Firefox的严格模式是不同

分析MySQL的授权许可

MySQL是开源软件,但开源不意味着免费,开源软件的使用应遵循该软件提供的使用授权许可。MySQL的授权许可是英文的,而且一直以来没有权威的中文译本,所以很多人都不清楚其中的细节。

最近我在做一些ASP.NET+MySQL的应用,特地对MySQL的授权许可进行了研究。

(以下说明,如有错误,欢迎指正)

使用MySQL作为数据库的应用是否会“被GPL”

MySQL开源软件(包括MySQL社区版数据库服务器、驱动程序和链接库等)是在GPL许可下提供的。GPL(General Public License)是一种开源许可,其大概的内容是:只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品也必须采用GPL协议,即必须也开源。

应用程序是否也必须采用GPL进行开源,是由

GO比分开发总结

最近一直在忙公司的第一款类客户端产品——GO比分

GO比分

网页具有强大的跨平台特性,HTML+CSS比任何其他界面制作方式都要强大和灵活。然而,网页无法实现Web范围外的一些功能(例如手机通知栏、铃声、震动等)。因此,还需要通过一个代理去调用,也就是客户端。所谓类客户端,就是穿了客户端这件“马甲”的网页

经过一个多月的努力,GO 比分的Android版在上周正式登陆安卓电子市场,iPhone版也即将推出。趁着这几天清明假期,先来总结下这段时间的开发经验。另外,本人第