posted at 2010.2.23 20:17 by Spoony
某处看到的一篇文章,{禽兽}效应的汇总。也许也不全是“禽兽”,其中一些不好独居一类,于是便给也略归了“禽兽”一类。没看之前也许只知道其中的一些,此文起到了总结归纳的作用,遂转于此。
1、蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶翅膀偶尔振动,也许两周后就会引起美国得克萨斯州的一场龙卷风。
蝴蝶效应是说,初始条件十分微小的变化经过不断放大,对其未来状态会造成极其巨大的差别。有些小事可以糊涂,有些小事如经系统放大,则对一个组织、一个国家来说是很重要的,就不能糊涂。
2、青蛙现象:把一只青蛙直接放进热水锅里,由于它对不良环境的反应十分敏感,就会迅速跳出锅外。如果把一个青蛙放进冷水锅里,慢慢地加温,青蛙并不会立即跳出锅外,水温逐渐提高的最终结局是青蛙被煮死了,因为等水温高到青蛙无法忍受时,它已经来不及、或者说是没有能力跳出锅外了。
青蛙现象告诉我们,一些突变事件,往往容易引起人们的警觉,而易致人于死地的却是在自我感觉良好的情况下,对实际情况的逐渐恶化,没有清醒的察觉。
3、鳄鱼法则:其原意是假定一只鳄鱼咬住你的脚,如果你用手去试图挣脱你的脚,鳄鱼便会同时咬住你的脚与手。你愈挣扎,就被咬住得越多。所以,万一鳄鱼咬住你的脚,你唯一的办法就是牺牲一只脚。More...
posted at 2010.2.11 21:58 by Spoony
自打twitter被GFW墙掉后,方便的twhirl也连不上,更新不了。这两天又心血来潮还想写写微博,新浪微博不管是受众还是平台都不错的说,但因早先一段宝贵的校园时光都无私地奉献给了墙外的twitter,又不忍割舍,遂找了个简单的方法来解决这一矛盾。这方法说来复杂,其实简单。基于Google AppEngine,以GoogleApp做代理,用twhirl更新墙外的twitter;再还是以GoogleApp做定时同步器,几乎实时地将墙外的twitter数据同步到墙内的新浪微博。
这样一来twitter更新上了,新浪微博也“实时”同步给墙内的用户去看,一劳永逸。以后您又可以 Follow my twitter,墙内的朋友可跟随我的新浪微博了。
上述解决方案可以参考月光的两则博文:Google App Engine搭建Twitter API Proxy教程和以Twitter为中心的微博同步工具。
posted at 2010.1.7 22:13 by Spoony
前阵子找行业新闻调用的时候无意中找到了Google 新闻栏,感觉这东西不仅有意思还很有用,介绍给大家。
选择样式,设定搜索关键词和栏目标题即可看到预览。其优点如下:
1.AJAX调用,不影响页面加载
2.支持关键词新闻搜索,而且可以自定义多个关键词的组合
3.可DIY显示样式
地址:http://www.google.com/uds/solutions/wizards/newsbar.html
posted at 2009.10.17 19:16 by Spoony
总是有需要在个人PC和公司电脑上保存一些凌乱但有用的笔记、备忘。而之前用一个文件保存,换个地方不能及时共享。本来打算自己写一个这样的应用,经过调查身边的朋友们,大都有同样的需求。当我准备开始设计这项服务的时候,在Google Lab 里面找了找,不料还真找到了一个东西——Google Notebook。

貌似这个东西不久前才正式从 Google Lab “毕业”,完全能满足我准备设计的需求。支持笔记分类、标签、备注等功能。最方便的当然要属强大的编辑功能了,随记随保存,完全是自动的。
Google 真是一点也不给其他人机会为互联网应用做点事情啊,有想法的人要想发挥自己的创意,实现自己的想法,最好的途径大概也就是加入这家公司了。
经过一段时间的使用发现还不错,推荐给大家,不知道有多少人已经在用了。
posted at 2009.8.13 23:35 by Spoony
Open Web Application Security Project (开放式Web应用程序安全项目,缩写为OWASP)总结出了现有Web应用程序在安全方面常见的十大漏洞,以提醒企业及其程序开发人员尽量避免它们给企业IT系统带来的安全风险:
非法输入 Unvalidated Input
在数据被输入程序前忽略对数据合法性的检验是一个常见的编程漏洞。随着OWASP对Web应用程序脆弱性的调查,非法输入的问题已成为大多数Web应用程序安全漏洞方面的一个普遍现象。
失效的访问控制 Broken Access Control
大部分企业都非常关注对已经建立的连接进行控制,但是,允许一个特定的字符串输入可以让攻击行为绕过企业的控制。
失效的账户和线程管理 Broken Authentication and Session Management
有良好的访问控制并不意味着万事大吉,企业还应该保护用户的密码、会话令牌、账户列表及其它任何可为攻击者提供有利信息、能帮助他们攻击企业网络的内容。
跨站点脚本攻击 Cross Site Scripting Flaws
这是一种常见的攻击,当攻击脚本被嵌入企业的Web页面或其它可以访问的Web资源中,没有保护能力的台式机访问这个页面或资源时,脚本就会被启动,这种攻击可以影响企业内成百上千员工的终端电脑。
缓存溢出问题 Buffer Overflows
这个问题一般出现在用较早的编程语言、如C语言编写的程序中,这种编程错误其实也是由于没有很好地确定输入内容在内存中的位置所致。
注入式攻击 Injection Flaws
如果没有成功地阻止带有语法含义的输入内容,有可能导致对数据库信息的非法访问,在Web表单中输入的内容应该保持简单,并且不应包含可被执行的代码。
异常错误处理 Improper Error Handling
当错误发生时,向用户提交错误提示是很正常的事情,但是如果提交的错误提示中包含了太多的内容,就有可能会被攻击者分析出网络环境的结构或配置。
不安全的存储 Insecure Storage
对于Web应用程序来说,妥善保存密码、用户名及其他与身份验证有关的信息是非常重要的工作,对这些信息进行加密则是非常有效的方式,但是一些企业会采用那些未经实践验证的加密解决方案,其中就可能存在安全漏洞。
程序拒绝服务攻击 Application Denial of Service
与拒绝服务攻击 (DoS)类似,应用程序的DoS攻击会利用大量非法用户抢占应用程序资源,导致合法用户无法使用该Web应用程序。
不安全的配置管理 Insecure Configuration Management
有效的配置管理过程可以为Web应用程序和企业的网络架构提供良好的保护。
这篇文章是转载的,有空把自己总结的一些安全编码规范发上来。
posted at 2009.7.30 23:07 by Spoony
耍宝的文章丰富了,为了平均新旧文章的阅读次数,发挥沉淀的经典旧文的价值,在朋友的启发下,准备开发一个随机文章推介的小部件。这个部件的功能是在所有文章中随机选取一定数量的文章显示在部件区域(WidgetZone),显示文章的数量可以自行设定。演示效果见 www.shuabao.net。
在 widgets 目录建立 RandomPosts 目录,并创建 widget.ascx 和 edit.ascx 用户控件,其中 edit.ascx 用于设定显示文章的数量。下面给出 widget.ascx.cs 里面的关键程序段以实现随机选取一定数量的文章并显示。
public override void LoadWidget()
{
StringDictionary settings = GetSettings();
int numberOfPosts = DEFAULT_NUMBER_OF_POSTS;
if (settings.ContainsKey("numberofposts"))
numberOfPosts = int.Parse(settings["numberofposts"]);
if (HttpRuntime.Cache["widget_randomposts"] == null)
{
List visiblePosts = Post.Posts.FindAll(delegate(Post p)
{
return p.IsVisibleToPublic;//仅显示对游客可见文章
});
int max = Math.Min(visiblePosts.Count, numberOfPosts);
List list = new List();
for (int i = max; i > 0; i--)
{
Random random = new Random();
int r = random.Next(0, visiblePosts.Count);//生成随机数
list.Add(visiblePosts[r]);
visiblePosts.RemoveAt(r);
}
HttpRuntime.Cache.Insert("widget_randomposts", list, null, DateTime.Now.AddMinutes(15), TimeSpan.Zero);//缓存文章列表,每15分钟更新
}
string content = RenderPosts((List)HttpRuntime.Cache["widget_randomposts"], settings);
LiteralControl html = new LiteralControl(content);
phPosts.Controls.Add(html);
}
private string RenderPosts(List posts, StringDictionary settings)
{
if (posts.Count == 0)
{
return "" + Resources.labels.none + "
";
}
StringBuilder sb = new StringBuilder();
sb.Append("");
foreach (Post post in posts)
{
if (!post.IsVisible)
continue;
sb.AppendFormat(link, post.RelativeLink, HttpUtility.HtmlEncode(post.Title));
}
sb.Append("
");
return sb.ToString();
}
试用源码:RandomPosts.rar (2.97 kb) 如有问题请联系我。
posted at 2009.5.5 23:23 by Spoony
发一个前阵子学习 ASP.NET MVC 练手用的一个小东西。仿Tinyurl.com功能,经过测试,基本上可以直接拿来用。
TinyUrl.rar (426.97 kb)
posted at 2009.4.27 19:29 by Spoony
As a response for customer's question, I decided to write about using Like Operator in Linq to SQL queries.
Starting from a simple query from Northwind Database;
var query = from c in ctx.Customers
where c.City == "London"
select c;
The query that will be sent to the database will be:
SELECT CustomerID, CompanyName, ...
FROM dbo.Customers
WHERE City = [London]
There are some ways to write a Linq query that reaults in using Like Operator in the SQL statement:
1. Using String.StartsWith or String.Endswith
Writing the following query:
More...
posted at 2009.4.14 12:01 by Spoony
故事是这样的。
大兔子病了,
二兔子瞧,
三兔子买药,
四兔子熬,
五兔子死了,
六兔子抬,
七兔子挖坑,
八兔子埋,
九兔子坐在地上哭泣来,
十兔子问他为什么哭?
九兔子说,
五兔子一去不回来!
大家看出什么门道来没?