Posted by Spoony - 2010.3.28 at 7:40 PM
好久没上人人网,今天特地上去把人人网帐号给注销了,长舒一口气——再也不用上人人网了,心里不禁感觉又踏实了一点。有朋友对我说很久没自言自语了,是啊,最近一来很忙,二来看的东西很多、想法更多了,感到自己没那么多精力把那些事情都写出来,干脆就忍着想等来一件更神奇的事件再写吧。可没想到神奇的事情一件接着一件,一件比一件更神奇,加上忍了很久已经近乎麻木,不料真的就麻木了……
主题一转,我想我还是写点别的什么吧。就在上周,捣鼓了套博易主题,首先给自己的博客套上测试一下,挺简单的,效果不错,就不想换回来了。不仅如此,为了配合这模板,我还特地重新设计了博客的信息架构——一切从简。博易原先只有一套基于UL样式的月份列表,为了配合这套简洁的模板,我又编写了一个基于SELECT样式的月份列表,测试好后近期会在博易官方发布。另外,编写了BlogYi.Widget.Statistics V2.0。统计格式不再固定,支持模板标记任意编排统计信息显示格式,测试好后也会在官网发布。
今天kill了好多以前的idea,有一些idea被kill掉是因为随着对它认识上提高而被否定,还有一些是因为结合近期状态感觉短期内没有实施的可能性而暂时不予考虑。剩下的保留下来的idea就比较可行了,还得小心谨慎去实施,毕竟现在挤出点时间不容易。到此为止吧,继续make idea。
Posted by Spoony - 2009.11.14 at 3:7 PM
年内可能出博易博客v1.9版,目前这个版本已经对之前的系统做了一些更新,包括大家在博易论坛上提出的一些问题和需求。现在BlogEngine.NET用户逐渐增多,一些针对BlogEngine.NET的自动评论机开始出现,博易也深受其害。博易v1.9同步了BlogEngine.NET的垃圾评论功能,将弥补博客的反垃圾评论方面的不足。
现在自言自语博客已经升级到了博易v1.9内测版,希望经过一段时间的线上测试,不断地发现程序中可能的不稳定的因素以及更多的可以改善的地方。虽然今天才上线测试,但我已经发现了一些问题,有一些是之前一些用户反映到的,但那时我没有办法去重现那些错误也就没有办法修复。我想我会尽力在博易v1.9发布之时提供给大家一个稳定完善的博客系统吧。
如果你对新版本有什么建议可以到博易论坛提出来或者直接联系我都行。
Posted by Spoony - 2009.9.12 at 1:48 PM
博易文章的别名(又叫 Slug 或 Cname)是访问博易文章时用的地址中的一部分。博易文章的别名是可以手工指定的,在写文章时如果不指定博易文章的别名博易会自动根据文章标题进行编码处理。而这个编码规则是这样的:文章标题的英文字符不做转换,非英文字符将被UrlEncode编码处理。这样一来,1个中文字符会被编码成6个字符。也就是说如果写文章用中文标题,又没有手工指定别名的话,自动生成的别名会很长。
长别名会影响到搜索引擎的收录,甚至会影响到用户访问。搜索引擎对网页地址的抓取是有长度限制的,如果网址超出了这一长度,搜索引擎即会放弃抓取。为了解决写文章没有手工指定别名而导致别名过长的问题,这周抽时间做了两个自动处理博易文章别名的插件,可以自动生成短别名。
这两个插件生成短别名的算法不一样,原理是一样的,用户可以各取所需。
1.自动生成MD5格式的别名 AutoMd5Slug.zip (813.00 bytes)
2.将中文翻译为英文作为别名 GoogleSlugTransliterator.zip (1.08 kb)
其中第2个插件翻译引擎是基于 Google 翻译 OpenAPI 实现的。如果您对这两个插件的使用有任何问题或者有好的建议,可以联系我。
Posted by Spoony - 2009.7.30 at 11:7 PM
耍宝的文章丰富了,为了平均新旧文章的阅读次数,发挥沉淀的经典旧文的价值,在朋友的启发下,准备开发一个随机文章推介的小部件。这个部件的功能是在所有文章中随机选取一定数量的文章显示在部件区域(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 by Spoony - 2009.7.14 at 7:3 PM
Fuck the GFW!
莫非每次写日志都要我以这句耳熟能详的话开头么?今天工信部某副部长挂了,草根站长界叫好声一片——死有余辜,大快人心。当官当到这份上,真没什么好说的了。前两天我的博客和博易官方频频Down掉,又有用户向我反映他的博客出了同样的问题,回收进程就能恢复一阵,不久又Down掉。已经有经验了,一定是GFW把某某站给封了,连带作用所致。GFW简直就是人为破坏互联网秩序,也难怪,互联网国内这一块是他们家开的。不仅墙外的twitter被封,就连墙内的饭否也被迫关长大吉。饭否,C2C了一把,火了一阵,还没看到或来得及实施赢利模式就关张了,我似乎看到一个巨婴被残忍地扼杀在摇篮中。
到上海快一周了,算是稍微安定了些,这两天完成了博易v1.8.5并低调发布(连3个官方群里面公告都没发)。悄悄地发布,悄悄地更新了自言自语和耍宝的程序……低调!低调!为什么要低调?因为博易博客官方网站的域名(blogyi.net)到现在为止,备案申请还没有审批下来。搞不好给上面查封了,那,一个优秀的博客系统就要从此从祖国的这篇热土上消失了……为了生存,需要低调,任何困难都难不倒英雄的中国人民。
本来把几个未备案的网站都迁移到朋友的VPS上,经观察,发现全部迁过去之后对服务器造成了巨大压力,时常需要以iisreset配合运行。想想,不能连累朋友,就把耍宝给迁移出来。耍宝的程序也更新到博易v1.8.5了,支持Feed输出选择全文或摘要。原来的Feed是全文输出,那样只要订阅耍宝就能在阅读器里头查看所有内容,对网站的互动和流量有一定影响。从现在开始,耍宝的Feed仅输出文章摘要,对内容有较强好奇心的同志们要看全文还得劳您访问网站。折腾手上的几个博客已经快要把我累到了,疲于解决建站资源方面的问题,谁能为我创造点条件,别再让我受这累了,我会感激死他(她)的。
最后,最近Google的Chrome OS消息比较多,莫非这就是李开复博士所说的打开浏览器就能看到云?Chrome的界面是非常成功的,用户体验非常棒,很短时间就上手,并让我爱不释手。而Chrome OS的界面同Chrome,这足以说明Google也对这种界面设计胸有成竹。我也迫不及待地想体验一把Chrome OS。
昨天买了两盆草忘了问店老板这两盆草叫什么名字了,真是晕死!Fuck the GFW!
Posted by Spoony - 2009.6.9 at 3:14 PM
博易群里面有不少朋友期待博易能支持相册功能,而为了保持博易框架能方便、持续稳定地更新,再者,做博客我们可以保证博易具有一流博客的水准(听起来有些臭屁
),可我们并不擅长于做相册,相册的需求也就一直没有得到实现。
相册做得好的如 Google Album、Yahoo Flickr,我想现在几乎没有一款相册程序功能到用户体验能和这两个相比吧。而他们都是社会化媒体,支持 XML 方式发布。那么我们只要能够将用户的 Google Album 或 Yahoo Flickr 和博客做一个简单的整合,我想那效果应该是很不错的。尤其是 Google Album 拥有 Picasa,可支持客户端的上传和维护相册,极为方便。
那么今天我做了一个相册解决方案,是基于 Google Album 的,现在放出来给大家试用。只要申请开通 Google Album,配置一下博易的 Album.aspx 页面程序,即可实现让你的博客与 Google Album 的简单整合。

下载:blogyi_album.rar (2.99 kb)
演示请看这里,详细配置方法内附文档说明。那么写博客可以用 Windows Live Writer,维护相册可以用 Picasa,玩转博易博客仍无需登录后台!
Posted by Spoony - 2009.5.29 at 4:25 PM
先给大家报一个“内幕”:耍宝这个站虽然每天都更新,但是并不是每天都有编撰、排版文章。其中的玄机在于该站使用博易博客作为发布平台,博易博客支持离线写作。也就是说,文章是几天前或者是更早就已经编撰、排版好了的,只是找一个“合适的时机”发布上去。所以大家看到的耍宝近期就是天天更新,搞不好还会有人以为站长是全职的呢:)
上面提到的“合适的时机”是很重要的,为什么不一下子全部放出来?又为什么不隔几天放出来一篇文章?问题就在于这不仅可以给网友们一个良好的期待体验,更能够给搜索引擎一个每日更新的好印象。对于网友们,这么做不仅可以让网友们每天都有那么一点新鲜感,所谓细水长流就是这个意思:不能一下子洪水滔天、洪水过后又是半年的枯水季节;对于搜索引擎,每天更新新内容对提高搜索引擎给网站的权值大有裨益。
到此扫盲知识介绍完毕,开始进一步的探索。首先提出问题吧:尽管离线写作给博客的更新已经带来了不少的好处,为我省却了好多事情,节约了宝贵的时间提高了效率。可是这样子让我更懒了,我都不愿意每天找个时间把已经写好了的文章通过离线写作工具发布出去。想想看,也不能怪我偷懒,要保证每天都能有时间、有条件上网(请注意,是每天!),日复一日、年复一年,这工程也足够大啊。如果可以一次性地把成批的文章编撰好,再一次性地把编撰好的文章成批地发布到博客上,然后再由博客自动实现每日发布一篇文章这样更新就更省心了。
下面就具体来设计了。利用博易博客的插件机制,虽然不能定时触发,但是通过事件触发已经可以比较好地来“定期”去做一些事情了。只要在文章浏览事件(Post_Serving)中完成对当前时间之前文章状态为“未发布”(IsPublished)的所有文章改变状态为发布(IsPublished=true)即可实现对当前时间之前所有未发布的文章进行程序自动发布。
这就完成了设计中的最重要的一部分,接下来要做的就是为每一篇文章设定好要发布的时间(DateCreated),每天一篇,置文章状态为“未发布”(IsPublished)。注意,一定要将状态设置为“未发布”,否则文章就会如洪水般地从博客涌出来。如果使用Windows Live Writer,就可以方便地设置发布时间,并且如果设置了发布时间,而发布时间比当前时间要晚,那么Windows Live Writer会在将文章发布到博客的时候自动地设置其状态为“未发布”,故强烈推荐使用这一离线写作工具。最后要做的就是将文章成批成打地发布到博客上。More...
Posted by Spoony - 2009.5.28 at 3:19 PM
昨天编写了一个博易博客统计的小部件,用来统计博易博客的文章、单页、评论、评分等的数量,以及博客的访问情况并将数据显示在部件栏目中(侧栏)。由于测试的需要,先放在了本博用上了。
不用不知道,用了不到一天就发现了一个问题。这个问题是一个比较严重的问题,它也不是程序的问题。问题在于透过这个统计部件一天来的数据可以发现有一批忠实的网友常年在本博潜水。潜水这种活动会滋生一系列心理和行为上的问题,比如沉默寡言、遇事麻木等,本人曾经就因为长时间潜水而深受其害。
为此,我作为本博博主特别友情提示关注本博的广大网友踊跃发言,积极地浮出水面,哪怕出来冒个泡也好,至少水面不会像深水处那样闷:)
博易博客统计部件今天已经发布了。如果你也在使用博易博客,可以下载这个统计部件,发现你的博客统计数据。
Posted by Spoony - 2009.3.15 at 8:58 PM
“随便看看”是一种很省事的便捷功能,为你的网站提供一个“随便看看”功能,或许能够让一部分懒得翻页或者点击“进入”链接的朋友在你的网站上多逗留一阵。一旦他们通过这个功能发现他们感兴趣的东西,那么就很有可能让他注意到你的网站了。这就是好东西也需要让人了解,而一旦被人了解,好东西就成了真的好东西了。
下面直击主题,谈谈怎么给博易博客加上“随便看看”功能。分三个步骤予以实现:
第一步,新建一个ASPX页面,命名为randomizer.aspx。
第二步,把下面代码复制到randomizer.aspx.cs文件。
using BlogEngine.Core;
public partial class randomizer : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int c = Post.Posts.Count;
if (c == 0)
Response.Redirect(BlogEngine.Core.Utils.RelativeWebRoot, true);
Random random = new Random();
int r = random.Next(1, c);
Post p = Post.Posts[r - 1];
Response.Redirect(p.RelativeLink, true);
}
}