July 16 2011

Windows Mobile股票预警

PurpleFire @ 0:43

白天工作比较忙,股票也看不成。于是,晚上下班回家, 做了个这么个程序。

通过股票代码,调用网络上的免费的Web Service,来预警股价信息,若达到预设值,则发出手机短信提示音。

后期改进:

1.单只股票改为多只股票。

2.将调用取回的数据进行二次挖掘,自绘股价走势图。

October 26 2008

Windows平台下轻量级门户网站静态化解决方案

PurpleFire @ 11:19

本文主要讨论关于轻量级门户网站静态化的解决方案,所谓轻量级就是指访问量不太大,服务器规模较小的情况,当然没有绝对的界限,仅仅是相对比较而言。高校和中小企业门户网站是很好的案例,但是像新浪、腾讯这种大型门户网站不在讨论范围之内。

一、问题的提出

通 常,一个校园网的门户网站群仅由几台(<10)服务器构成,当然很多知名大学的门户网站服务器远不止这个数目,在这里我只是说一般的高校,或者再降 低一个层次——一个高校下属的某个学院的主页。我们的门户网站可能集成了多个频道,比如新闻、教学资源、业务(信息)系统以及由电影、音乐、论坛、即时通 讯等版块构成的娱乐生活栏目,这些频道可能由来自于不同平台的CMS系统构成,而且你的首页需要调用这些不同频道的最新内容。那么,面对较大的访问量,网 站静态化是必须考虑的。

二、需求分析

现在流行的CMS系统/论坛系统一般都提供了首页调用功能,即通过访问一个含有参数的URL链接,返回一个满足需要的内容列表。门户网站的首页比如下面的iWMS官方首页截图,图中画红框的模块其实可能都是调用了某个栏目的最新文章。

点击查看大图

以 前我将新闻频道作为一个门户网站的主频道,其他频道作为次要频道,然后通过修改iWMS自己提供的首页模板来构建整个门户首页。由于调用了大量其他系统的 内容,导致访问速度较慢,用户体验很差,而且可扩展性比较差,况且有些小系统并没有提供首页调用代码。使用那个模板完全束缚了网站前台设计师,没办法放开 手脚做。因此我们放弃了它自己的模板,转而构建我们自己的主页。像腾讯、金融界这 种风格的首页越来越普及了,它们采用了多栏目重叠放置,使首页承载的信息量翻了数倍。我们模仿这种风格,将各频道、栏目模块化,这些模块全部采用调用的方 式。由于这些调用分散在不同 的服务器,涉及了不同的数据库、Web服务器技术,在门户网站首页进行调用会产生大量的服务器间通信、多次数据库查询以及磁盘I/O操作,因此,将这些调 用结果静态化是一个很好的解决办法,毕竟很多人看到的首页大部分内容都是重复的,如果每个人来访问都调用一遍最新数据是对服务器性能极大的浪费。

三、门户网站首页静态化解决方案

1.完善调用代码

即使这些cms系统有些提供了自己的调用,但输出的结果可能并不是我们需要的显示方式,我们还得格式化这些调用结果。

最笨的也是最有效的方法就是自己分析数据库结构,然后随心所欲的写调用代码。因为仅仅是查询数据库的操作,所以这个过程比较简单,只是比较麻烦,要费些工夫。

当然,你也可以直接利用系统自带的调用代码,然后在设计页面时利用强大的正则表达式对它们进行格式化。

2.执行调用并将生成的结果静态化

当我们通过某些随机或周期事件触发调用代码,得到了结果,接下来应该把它们静态化。

一种方法就是调用完毕即生成一个文件(脚本/或纯文本形式),让首页可以include这些文件。这样做的好处是文件一旦生成就不会消失,除非新的调用将其覆盖。坏处就是对磁盘频繁读写,造成cpu等资源占用升高,影响了效率。

另 一种方法就是将结果写入服务器内存,在ASP中可以写入Application变量,在ASP.Net中淡化了Application变量,当然你一样可 以使用它,也可以使用cache类,这里不讨论。这样做极大的提高了访问速度,缺点就是由于Application变量不宜存储大量数据,比如图片什么 的,还有就是Application变量依赖于服务器的进程,默认2小时空闲进程就会被IIS6回收。因此,如果你不想让用户看到你的页面中调用的部分是 空白内容,你就要调整IIS的设置,让工作进程的生存周期变长。

当然只是将首页频繁调用的内容写入内存,而文章的内容页还是写到文件比较好。毕竟内存是有限的,而首页调用的内容访问频率较高且不算太大,所以放入内存。

3.如何调用&什么时候触发调用?

如何调用?

我想说的不是传统的调用方式,那样大家都会,这里我来探讨一下如何使用服务端ajax进行调用。

为什么要使用服务端Ajax进行调用呢?呵呵,其实这样做的目的就是集成多个调用于一体,通过参数更好地控制各个调用模块,让它更好的为触发服务,不然分散开来调用太麻烦。我们为这个集中调用程序起个名,叫“更新缓存”页面。

什么时候调用?

——更新完新闻、软件、音乐,etc,退出管理时跳到更新缓存页面。

——客户端第一次访问时在后台(比如将更新缓存页面放入一个0高度的iframe中)进行调用。

——显示不正常时,可以直接访问更新缓存页面。

这里给出我的示例代码(点此下载),欢迎探讨。

四、后记

通过上面的解决方案,门户主页的访问速度已经很快了,承载的访问量可以提高2到10个数量级。至于网站内容页面的静态化,直接采用文件型静态化方案就行了,一般的CMS系统均有此功能。

另外,由于高校或企业内部一般都是局域网或高速城域网,页面几乎没有延迟,影响速度的只有浏览器的解析和渲染速度了。因此,还有一件事情就是要使首页应付现在多种浏览器共存的局面,这里不再赘述。

本文只是讨论中小型门户站在Windows平台下的静态化解决方案,对于大型网站来说,负载均衡和缓存加速必不可少,您可以参考车东的博客:基于反相代理的Web缓存加速——可缓存的CMS系统设计

June 28 2008

为文章中的代码增加引用效果

PurpleFire @ 7:1

文章中如果有了代码,显示效果很不直观,所以我们需要对它进行处理一下。

实现也很简单,写文章时把代码部分放到一个标签里就行,然后在全局CSS文件里对这个标签加以修饰即可,这里我把它们放到<CODE></CODE>标签里。

在模板文件夹中找到对应的CSS文件,加入以下内容,效果就像本文显示的一样了。

 

 

code {
font-family: "Courier New", Courier, monospace;
margin: 10px 20px 0px 20px;
padding: 3px 10px 3px 15px;
border: 1px dashed #e2bf8c;
border-left: 5px solid #bb6f02;
background: #fafafa;
display: block;
}

另外,可以配合Zblog官方认证插件——代码高亮插件一起使用,你就可以达到像编程软件IDE里的那种彩色效果了。不过我还是喜欢清爽一些,就没使用。

June 27 2008

BOBV2ForZblog模板(本博正使用)关于评论模块的修正

PurpleFire @ 5:31

目前我正在使用的这个模板不知道是作者有意而为还是因为移植不彻底的原因,关于评论模块有很多不完善的地方。
首先,评论时间使用的是最后一篇文章发布的时间,而不是评论的时间。(这个算Bug)
其次,评论的序号、对评论的回复、引用功能尽数去掉,估计是为了美观而去掉了,但我现在想加上它们。
下面是我修改后的评论部分代码,对应TEMPLATE\b_article_comment.html文件。

<li class="odd" id="comment-1">
  <div style="float: right; margin: 4px;">
    <a name="cmt<#article/comment/id#>" style="font-size: 24px; font-family: calibri,微软雅黑,courier New">
      <#article/comment/count#></a>
  </div>
  <div style="margin-bottom: 5px;">
    By <CITE><#article/comment/name#></CITE> on <#article/comment/posttime#> |
    <a onclick="InsertQuote(this.parentNode.getElementsByTagName('CITE')[0].innerHTML,this.parentNode.parentNode.getElementsByTagName('P')[0].innerHTML);return false;" href=""  title="回复此评论">Reply</a> |
    <a href="<#article/comment/urlencoder#>" rel="nofollow" target="_blank"><#article/comment/url#></a>
  </div>
  <p><#article/comment/content#></p>
</li>

把上面虚线部分的代码更新到TEMPLATE\b_article_comment.html就行了,记住一定要存成UTF-8编码格式,否则汉字无法正常显示。里面设定序号显示的字体你可以随意自定义。

June 16 2008

为你的Feeds加上版权(For最新的Zblog1.8Spirit)

PurpleFire @ 22:46

代号为"Spirit"的最新的Zblog 1.8版本在6月初发布了,Build号为80605.

像往常一样,下班后第一件事是打开Google Reader看看大家的Feeds,发现"幸福收藏夹"老兄的博客最近更新迅速,有很多有用的东西,不过都是关于WordPress的.他的Feeds输出带有版权信息.于是我也着手开始改造我的Zblog.没太仔细研究,我打算直接对代码进行hack.方法如下:

打开你的Function目录中的c_system_base.asp文件,搜索"For i=1 to ZC_RSS2_COUNT"(大约在2422行,ExportRss()函数里面),在它后面加上下面两个自定义变量,这两个变量是在原来的摘要或者正文后面加上了自己的版权信息.

     Dim HtmlIntroWithCopyright,HtmlContentWithCopyright
     HtmlIntroWithCopyright = CStr(objRS("log_Intro")) & "<hr />©2008 <a href='http://www.fireblog.cn/' target='_blank' closure_hashcode_='169'>紫焰的博客</a>.   版权所有,转载务必注明.该Feed只供个人使用,禁止未注明的转载或商业应用.非法应用的,一切法律后果自负.如有问题,可发E-mail至liming.xd@gmail.com.<hr />"
     HtmlContentWithCopyright = CStr(objRS("log_Content")) & "<hr />©2008 <a href='http://www.fireblog.cn/' target='_blank' closure_hashcode_='169'>紫焰的博客</a>.   版权所有,转载务必注明.该Feed只供个人使用,禁止未注明的转载或商业应用.非法应用的,一切法律后果自负.如有问题,可发E-mail至liming.xd@gmail.com.<hr />"

然后将下面的objArticle.LoadInfoByArray函数里面的两个参数objRS("log_Intro")和objRS("log_Content")分别换成上面的两个变量HtmlIntroWithCopyright和HtmlContentWithCopyright就行了.

修改完的代码文件如下,有需要的朋友可以查看第2422行以下部分. 

c_system_base.rar

分页:«123456»