Monthly Archives: February 2008

Win XP sp2远程桌面并发登陆补丁

sp2最终版本只支持同时一个在使用远程桌面,很不方便。以下方法可以使得3用户同时使用。

1. 下载这里的termserv.zip,解压缩

2. 在safe模式下启动机器,将c:windowssystem32termsrv.dll改名为 termsrv_sp2.dll,将这里的termsrv.dll拷贝到c:windowssystem32下。这里提供的termsrv.dll是sp2第一版本带的,所以足够安全。

3. 运行带的Concurrent Remote Sessions SP2.reg,对注册表打补丁

4. 需要打开“快速用户切换”

5. 打开组策略编辑器,开始菜单,运行,gpedit.msc,到Computer Configuration > Administrative Templates > Windows Components > Terminal Services这里,将Limit Number of Connection设为enable,并设为3(多了没用)。

6. 重启机器。现在你可以登陆3个用户了,比如一个控制台,2个远程(远程需为不同用户名)。

我在台式机上试了,好用。而且应该不涉及版权,反正不会很严重。

下载补丁包

http://sig9.com/node/110

卸载网筝NK800 v2

南卓铜(zhn1@pitt.edu)

西部数据中心目前提供的网筝驱动程序v2(20060927)安装后不能正常卸载。我们已经向软件提供商反映此问题。这些提供了一个临时的解决方案。

1. 在开始菜单,找到“卸载网筝NK-800”,点击“属性”,copy目标里的内容。

image

2. 找到从westdc上下载来的驱动文件,如果是压缩包,请解压缩到一个目录,比如c:tempnk800目录下。这个路径以下有用。

3. 打开command窗口(开始->运行,键入cmd),将步骤1里目标内容,粘贴到命令行下(右键,粘贴),如下:

image

移动鼠标,更改

“C:Program FilesIn
stallShield Installation Information{9147E0F5-074A-4D73-B8EA-63FDE7C70330}Setu
p.exe” (注意,{}内的可能不一样)

为步骤2找到的位置(该目录下应该有原始的Setup.exe等文件)。我这里是,

“c:tempnk800Setup.exe”

现在完整命令如下所示,

C:WINDOWSsystem32RunDll32.exe C:PROGRA
~1COMMON~1INSTAL~1engine6INTEL3~1Ctor.dll,LaunchSetup “c:tempnk800Setu
p.exe”  -uninst  -f

4. 运行。按照出现的图形界面提示,完成卸载。

Enable delayed content loading for Cuyahoga Module

南卓铜(zhn1@pitt.edu)

Cuyahoga is a powerful and well designed Web-based Content Management System. In current version, however, there is not yet Ajax supported. This brief article will show you how we can implement an Ajax based delayed content loading for its module.

The project I am doing will achieve Asian water news from an external website, Global Water News. To do this, I developed a set of classes to download content from external page and then parse them. However, in a synchronous way, the content downloading and parsing process is rather slow, consequently affecting the display of our homepage.  A delayed loading of this part of content will be ideal for circumventing this problem. 

Figure below shows the schema we developed for Cuyahoga framework.

See www.asian-gwadi.org homepage for online demonstration.

image

1. Enable Ajax support

Download latest ASP.net Ajax toolkit for framework 2.0 and install it. Add reference to System.Web.Extensions in Web project.

Open a brand new Ajax based web project. This will generate necessary configuration for Ajax support in a Web project.  Merge web.config created in this new project to Cuyahoga’s root web.config.

2. Add a Cuyahoga module for your purpose

image

AsianWaterNewsModule is just derived on ModuleBase and simple leave everything blank.

AsianWaterNewsControl.ascx is the user control working together with the module. It’s based on BaseModuleControl. It simply defines the container where we will populate data later.

AsianWaterNewsControl_Under.ascx is the underlying user control who download data from external web page, parse them and then fill up a repeater control.

AsianWaterNewsFristPage.cs, WaterItem.cs, and WaterNewsPageContent.cs are business logic codes to help AsianWaterNewsContol_Under control to realize its functionality.

AsianWaterNewsService.asmx define a web service, which renders the underlying user control, AsianWaterNewsControl_Under.ascx, to HTML codes. The output of this web services is expected to populate the placeholder contained in Cuyahoga user control, i.e., AsianWaterNewsControl.ascx.

Default.js and jquery-1.2.2.min.js are essential callback javascripts to be called in client side.

Install directory contains sql scripts for database structure.

3. Procedure

When a module is loaded by Cuyahoga framework, user controls derived upon BaseModuleControl (here is AsianWaterNewsControl.ascx ) will be asked to display themselves. In AsianWaterNewsControl.ascx , Ajax script manager was instantiated to wrap webservices as well as to register necessary javascripts. Javascripts were then downloaded to client together with other HTML. The page were displayed.  At the same time, callback javascripts were activated to call web service (here AsianWaterNewsService.asmx), which returns HTML representation of underlying user control (here, AsianWaterNewsControl_Under.ascx) actually retrieving data from external web pages. Then a div placeholder in  AsianWaterNewsControl.ascx will be populated with data retrieved.

See my previous post to get understand how to realize delayed content loading. For English original article, see here.

Download source codes of the AsianWaterNewsModule project.

Note, CSS and images should be defined in the template currently applied to your site. I did not include those stuff in the source code package.

See http://www.asian-gwadi.org/ for the operational demo.

Web内容滞后装载的另一可行方法

原文在 http://www.codeproject.com/KB/ajax/DelayedContentLoading.aspx
大概思路是:在user control里实现ajax updatepanel和timer。首先下载到客户端的是user control的装载状态view,下载完后,自动启动timer的ontick,通过updatepanel调用user control的另一view正式装载数据。由于采用ajax所以可以实现页面的部分更新。
这方法也是可以考虑的。

最近几天

1. 周六书亚载了我们一家三口去教会,我是去看看,而且因为那是中国人聚集的地方,会很热闹。教会是在传福音。人都十分nice。我看样子是他们盯上的目标之一,使劲劝说我加入。看了洗礼的过程。领会了书亚的演讲才能,很棒。

2. 回来在Giant Eagle买了东西,回来朵朵说这次的葡萄比上次好看。我们也这样感觉,哈哈。结果一晚上我们一家吃掉了一大半。小赵总结说,橙子costo的最好吃,葡萄Giant Eagle最好,苹果则是Walmart不错。哦,基本上我们一家评价东西好差的时候,是不看价格的。

3. 周日本说是到经国家去,考虑到老是过去吃他花他,不好意思,另朵朵也不大喜欢出去,且有点发烧的样子。我睡了很长时间,一周下来感觉很累。看了好多集的Friends。听力是比以前好了一点,但也进步不是很明显。不过应付正常的生活问题不是很大了。

4. 今天醒来居然已经9:30,大惊,窗帘一拉开,外面已经大亮。闹钟又被朵朵给调了。赶到办公室,收邮件。看到wlx说国内服务器出问题了,发现黑客入侵。基本上花了我整一天时间(被老梁如果知道,又要被骂,但没法子,那也是我应该做的事),理了一下,将入侵的整个过程大致还原了一下。写所里同事领导写信,说明了整个过程。清除的事还是交给亮子了,需要更多的时间耐心细致的去做。听小赵说今天朵朵在幼儿园表现不错,能跟小朋友玩到一起了。

通过异步页面内容装载提升ASP.NET页面反应速度

原文:Boost ASP.NET performance with deferred content loading

翻译:南卓铜 (zhn1@pitt.edu)

clip_image002[4]

在设计一个ASP.NET Web页面时,其反应速度取决于各组成部分的性能,比如在上图,红色条所在的GetRSSReader(从其它网站上读取RSS)功能会导致整个页面反应速度很慢。不管你如何去优化该页面的其它部分,只有其中有一部分反应慢就会导致用户感觉整个Web页面速度呆滞。

在本文,我将给大家演示一种规避这个问题的方法。通过将内容放置到用户控件(User control),直到整个核心内容都显示完后才去装载用户控件内容,这样就可以大幅提升可观察的性能。

我们可以将页面内容细致的分解,通过上述方法可以方便的提升应用程序反应速度,这是用户最关心的。包括下面四个步骤:建立用户控件,将用户控件内容输出成HTML(通过Webservice),提供进程指示条,以及应用ASP.NET AJAX请求在客户端插入此HTML。

1. 建立用户控件

首先,我们需要将装载速度慢但不是核心的内容包装在用户控件(User control)。在这个例子里,我们实现一个简单的RSS聚合阅读器来显示最新的用户帖子。

这里的关键是获取RSS聚合的基本信息。我在这里使用ASP.NET 3.5的一个新功能:LINQ to XML。LINQ使得读取关系数据库、XML等数据源的繁杂工作大为简化。我每次使用它都心动不已。(译者注,不懂LINQ或者ASP.NET 3.5并不会妨碍理解这里讲述的方法)

protected void Page_Load(object sender, EventArgs e)
{
  XDocument feedXML = 
    XDocument.Load("http://feeds.encosia.com/Encosia");
  var feeds = from feed in feedXML.Descendants("item")
              select new
              {
                Title = feed.Element("title").Value,
                Link = feed.Element("link").Value,
                Description = feed.Element("description").Value
              };
  PostList.DataSource = feeds;
  PostList.DataBind();
}

使用ASP.NET 3.5的另一个新控件 ListView来显示聚合的内容。(译者注,可以不管ASP.NET 3.5,这里仅是一个User control的例子。)

<asp:ListView runat="server" ID="PostList">
  <LayoutTemplate>
    <ul>
      <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
    </ul>
  </LayoutTemplate>
  <ItemTemplate>
    <li><a href='<%# Eval("Link") %>'><%# Eval("Title") %></a><br />
      <%# Eval("Description") %>         
    </li>
  </ItemTemplate>
</asp:ListView>

通过使用一点CSS(包括在源代码,在下面可以下载),聚合的结果可以很好的显示出来,如下图。

clip_image004[4]

ListView可以很方便的演示下面步骤,因为通过它,我们基本不需要太多的代码就可以生成HTML,最后将这些生成的HTML代码插入到页面。

2. 将用户控件润色成HTML

本步我们创建一个Web service将用户控件生成HTML字符串。这里,我们需要在ASP.NET页面实例之外生成HTML字符串。一般情况下,用户控件都是被装载到Page实例上。

为解决这个问题,我们可以创建一个临时的ASP.NET Page类,动态加载用户控件,然后在Web service里执行它。实际实现比起描述要简单易懂的多。

[WebMethod]
public string GetRSSReader()
{
  // 创建新Page类,并加载用户控件
  Page page = new Page();
  UserControl ctl =
    (UserControl)page.LoadControl("~/RSSReaderControl.ascx");
  page.Controls.Add(ctl);
 
  //将动态页生成HTML
  StringWriter writer = new StringWriter();
  HttpContext.Current.Server.Execute(page, writer, false);
 
  //生成的HTML返回为字符串
  return writer.ToString();
}

你可能在担心创建一个新的页面实例是否会有性能上的影响。一开始,我也是这么考虑的。但,因为我们的Page实例是创建在Web service上,而不是在ASP.NET HTTP管道(pipeline)上,而且只包括一个用户控件,此额外的开支可以被忽略不计。Page实例本身的开支相对于整个HTTP进程来讲是微不足道的。

3. 创建演示页面

我们需要一个演示页面来快速显示核心内容。在该页上,定义一个DIV标签。该标签在核心内容显示完后再异步从服务器端装载内容。

<asp:ScriptManager runat="server">
  <Services>
    <asp:ServiceReference Path="~/RSSReader.asmx" />
  </Services>
  <Scripts>
    <asp:ScriptReference Path="~/Default.js" />
  </Scripts>
</asp:ScriptManager>
<div id="Container">
  <div id="RSSBlock" class="loading"></div>
  <div id="Content">
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing...</p>
  </div>
</div>

如你看着的,RSSBlock定义的这个DIV标签分配有一个CSS类“loading”。这个CSS类显示进度指示条,一直到异步加载的内容被下载到客户端。

.loading { 
  background: url('progress-indicator.gif') no-repeat center; 
}

clip_image006[4]

所以,这里其实不是一个真实的指示条,无法计算进程进度。但用户是无法知道这是不是真实的。你不说没人会知道。

4. 从Javascript里调用Web service

现在我们已经有了一个空位置,我们需要将真实的HTML填充这个位置。ASP.NET AJAX为我们做好了大部分的事情。

Sys.Application.add_init(AppInit);
 
function AppInit() {
  RSSReader.GetRSSReader(OnSuccess, OnFailure);
}
 
function OnSuccess(result) {
  // .loading CSS类从div上移去,效果上看是移去了进程条
  Sys.UI.DomElement.removeCssClass($get('RSSBlock'), 'loading');
 
  // 将生成的HTML填充这个div位置
  $get('RSSBlock').innerHTML = result;
}
 
function OnFailure() {
  // 如果失败了,要做点什么。比如重试,等
}

因为这里我们用了CSS类来实现进度条,只要简单移去该loading类就可以了。这里我们使用removeCssClass方法。更多关于该方法的信息,可以见这里

动画的背景移去后,是时候在div中插入HTML内容了。最终的结果正是我们期待的,前面我们设计的用户控件已经显示在div指定的位置上了,而且不会妨碍到整个页面的反应速度。

5. 结论

我想大家可能发现这个方法是很有用的。它可以让你利用现有的ASP.NET知识,结合服务器控件,实现一个轻量级的基于AJAX的模板方案。同时,它使一些繁琐、不易维护的工作变得简单。

注意我们这里没有使用UpdatePanel。使用以上描述的技术,不需要使用Partial Postback。它不仅可以提升性能,而且即使在内容延后被装载的时候,也不影响页面其它使用了UpdatePanel的正常工作。

源码

为奥运让路

就转一则通知,不想评论任何东西。

>中科院植物所关于奥运会期间停止同位素实验的通知

>根据《海淀区2008年放射物品专项管理工作方案》的规定,为确保奥运期间
>我单位放射物品绝对安全,要求各单位在奥运期间(7月1日—10月8日)停止使
>用同位素实验室。

>请需要进行同位素实验的同志提前做好准备工作。由此带来的不便之处,请
>大家给与谅解。

>综合办公室
>二OO八年二月十四日

Group meeting有关multifractal云里雾里的

在Group meeting上给大家演示用multifractal+wavelet的方法做time-space downscaling。讲的稀里糊涂,听的也是云里雾里。其实在看的时候就有好多问题发现,但没有时间进一步去看相关文献。L老师提的问题又太过涉及公式本身。
不过这个paper proposed的方法估计本身也有问题,尽管结论说downscale还不错。但作者在此文发表后的后续工作又重新time和space分开来做downscaling了,估计也是意识到time和space结合在一起很难找到完美的方法。

送朵朵去幼儿园了

这两天外面的雪好大。今天送朵朵到附近的一个 Children Learning & Development Center。
看样子还不错。只是太贵,一个月要600多了,一合人民币更是高的离谱。
没法子,这样才能腾出一点时间。