posts - 33, comments - 51, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

置顶随笔

摘要:  前面有朋友(http://www.cnblogs.com/biduan/archive/2007/08/30/876440.html)介绍了Activa.ProMesh这个WEB开发框架.看起来觉得用起来蛮不错的.就学习了下,用了点时间做了个blog示例,示例演示:
http://cnblogs.icastle.com.cn/index.ashx阅读全文

posted @ 2007-09-10 11:19 阿布 阅读(3983) 评论(23) 编辑

2008年5月18日

(我想要表达的意思,那些在地震中已经离开人世的孩子们,他们会作为生命的花儿永远绽放在父亲母亲的心里)

 

一个普通的夏天下午
也许你现在和我一样
都在各自的工作岗位坚守
也许你感觉到了辛苦
是不是也想趴在了桌上呼呼
想进入那梦乡
逃离这个世界的纷挠

这个普通的夏天下午
距离你我很远的天府
有那么一位是谁睡醒了
他抖抖身体翻动下筋骨
霎那间天也动地也摇
有人在呐喊
之后便是无尽的哭泣....

 

现在在趴在桌上的你我
请相信,这绝不是你我的梦境..
(画面转)


哦,亲爱的爸爸
哦,亲爱的妈妈
你们不要再哭
现在的我已经变做另一朵花儿
期待着明天继续能为你们盛开
如果你们见到了路边的那片花海
爸爸妈妈,
我就是那片花海中并不孤单的一朵花
请不要伤心,也不要采摘
我在花海中注视着你们,
我用纯洁的心保佑着你们

哦,我亲爱的宝贝
你们跑到何处去玩耍
现在的爸爸妈妈很着急
请不要那么不听话
咦,我见着了路边开了一朵花,
孩子他爸,
这会不会是我们的儿啊...


虽然常常听你们说
或是从小就在我耳边不停的唠叨
我们是祖国的花朵
我也有着远大的理想深埋在心窝
可现在的我
只想做爸妈记忆中最美的花朵

一个普通的夏天下午
这个普通的夏天下午
抱歉,这不是一个普通的夏天下午
5.12,这个夏天的下午
我,还有你,还有很多很多的朋友
飞向天空,掉入泥土
在那一瞬间,都变作了花海
所有的爸爸妈妈,我们在这边为你们祝福
请相信,我们是这世界最美丽的花朵
即使天各一方,我们也会很幸福。。。


一个普通的夏天下午
我沉睡了进入梦乡
是谁生生的把我叫醒
我回忆着,混乱着
我想我是做了一个梦
梦见了很多盛开的花朵
--生命中最后绽放的花朵

是不是这就是未来的希望。。。

posted @ 2008-05-18 19:50 阿布 阅读(229) 评论(2) 编辑

2008年4月9日

google_appengine-logo.png

  Google Apps为团体及企业用户提供了一体化的在线协作应用套件,但那只是一个开始。尽管用户可以直接利用Google Apps里的在线应用,无需添加额外的主机或管理,但同时,用户的选择也不多,因为所有的应用都是直接由Google指定的。想像一下,如果Google直接提供一种在线应用平台,允许用户直接在平台上创建及运行各种应用,那该有多震撼。

  根据TechCrunch得到的情报,在今天晚些时候,Google将在Google Campfire One大会上宣布推出App Engine(应用引擎),一个在线应用平台。简言之,App Engine是一个由Python应用服务器群、BigTable(Google的一个内部的数据库系统)数据库访问及GFS数据储存服务组成的平台,它能为开发者提供一体化的、提供主机服务器及可自动升级的在线应用服务。用户编写应用,Google提供应用运行及维护所需要的一切平台资源。换言之,Google不仅仅要为用户提供现成的在线应用套件,它还希望利用自身的数据库系统优势,使自己成为在线应用的真正统一平台。

  Google App Engine专为开发者而设,开发者可以完完整整地将自己编写的在线应用运行于Google的资源上。这意味着开发者必须得为应用编写Python脚本,以创建一个可通过网络访问的BigTable界面。Google App Engine和Amazon提供的类似服务(S3、EC2及SimpleDB)不同,因为后者是直接提供一系列资源供用户选择使用的。

  根据Google的官方声明,Google希望App Engine能令网络开发者更容易创建及升级在线应用,而不用花费精力在系统的管理及维护上。通过App Engine,开发者可以实现:

*编写代码并执行

开发者完全不必担心应用运行所需要的资源,因为Google App Engine会提供所有东西。

*全面关注流量变化

得益于Google自身强大的Bigtable数据库系统及相关的可升级的基础组件,Google App Engine能提供全自动化的复制及负载平衡,使应用能更容易升级以满足不同用户群的需要,从一至一百万。

*轻松与Google其它服务整合

开发者可以直接通过Google App Engine使用内置的组件及Google的API资源库所提供的即插即用式的功能。

  听起来非常强大,但Google App Engine在发布之初还是有一定的限制的。比如只有前一万名注册的开发者才能配置应用。Google App Engine在beta期间是完全免费的,但应用不能使用超过500MB总空间、2亿megacycles/天CPU时间、10GB带宽/天。即应用每月所承受的总流量只能在500万PV左右。而在beta期结束后,对于超出限制的部分,开发者必须向Google支付相应的费用,尽管当前具体的价格表还未公布。此外,Google App Engine当前规定所有应用都要用Python语言编写,尽管Google声称以后会支持更多其它语言。Python语言是Google内部使用的脚本语言,Google在05年更是连Python语言的发明者Guido Van Rossum也聘用了。

  由于以上信息超前于Google的正式发布,所以请在至少数小时后,再尝试访问Google App Engine的官方网站:

  http://code.google.com/appengine/

  更新:Google动作有够快的,以上网址已生效。如果你是开发者并且想使用App Engine,请尽快进入以下地址注册:

  http://appengine.google.com/

  更新2:我刚才试了一下注册,现在就收到了成功注册的确认邮件,可以开始创建应用了。前后不到一小时。可见当前还是有名额的,各位要抓紧了。

创建App:
google-app-engine-1.gif


但无论输入什么作为应用识别符,它都提示应用已存在,看来它还是知道我不懂Python了=.=
google-app-engine-2.gif

  更新3于去年10月被Google所收购的移动服务Jaiku刚刚也宣布,它将全面转向App Engine,成为首批应用之一。这不仅意味着Jaiku即将融入Google架构里,也再次展示了Google对自己产品的信心,"Google eats its own dogfood"。

  更新4:终于成功创建了应用,纯属胡搞:

控制面板。如果已上传并配置、运行了应用,就可查看有关的统计数据,以及对应用进行设置等:
google-app-engine-3.gif


App Engine SDK。上传应用指南
google-app-engine-4.gif


邀请应用协作者。你可以通过添加被邀请者的邮箱地址来邀请他加入,共同创作应用:
google-app-engine-5.gif


  更新5:感觉App Engine如果成功,Google将成为web2.0 startup的母体。这是一件极酷的事,在某种意义上,这相当于统治了互联网、间接拥有了大部分用户。

  Google为App Engine专门开设了一个官方博客:

  http://googleappengine.blogspot.com

posted @ 2008-04-09 00:16 阿布 阅读(596) 评论(4) 编辑

2008年4月4日

原文请看:http://netbeans.dzone.com/announcements/netbeans-70-plans-uncovered-ne 

其实我不应该现在谈论这个,因为我们打算在今年的JavaOne大会上给大家一个惊喜,但是消息还是不胫而走。我看见许多NetBeans的开发人员的Blog都在谈论此事,因为我也不再隐瞒什么了.下一个NetBeans的主版本预计在2009年发行,而且完全是重写!!!NetBeans准备提供在线服务并且它的源代码会用一种新的编程语言来重写!!!在我说出是什么新语言之前,请先看看这样做的理由:

 Java是一门伟大的语言.但美中不足的是,对于充满widgets, mashups, RSS 以及 semantic web(语言网)的新生Web2.0世界它显得不够灵活,它无法处理天生动态的Web2.0应用程序.此时开发人员不再需要下载安装桌面应用程序――因为应用程序会永远在线并且所有流行的应用程序此时只需要一个东东,那就是web浏览器.因此,对Web浏览器提供一个IDE显得非常有意义!!!为了完成这个任务,只有一种语言可以在web浏览器里游刃有余,并且无论是在服务器端还是客户端都是得心应手.没错,NetBeans7.0会用JavaScript重写!!!!!!!!!!尽管如此,我们通过使用内置的Rhino引擎,仍然会将JavaScript引擎构建于JVM之上. 

NetBeans一直在创新.我们相信通过使用JavaScriptNetBeans可以比以前更加“动态”.IDE一部分可以运行在服务器端,另一部分运行在浏览器端并且Sun会提供NetBeans的在线服务.至于价钱嘛,当然是免费啦!当然Sun仍然会提供一些尖端的在线商业产品,并且在NetBeans7.0发布后,我们会铺天盖地的研发各种在线服务.我们正在讨论要不要继续提供NetBeans源代码.(看看人家Google,所有的应用程序被开源社区广泛接受竟然没有提供任何源代码)我们正期待Java社区的反馈――你们真的关心NetBeans的源代码吗?会担心价钱是免费的吗?

 

同样,我们调查NetBeans的多种生财之道,比如发布可运行在线广告的NetBeans版本,这样的话,我们可以通过NetBeans挣到很多钱.

 

对于NetBeans的未来,我兴奋不已.我们知道未来属于在线网络,而NetBeans正处在一个极好的位置引领在线IDE市场的风暴!!!

 

现在刚好是西半球的四月一号愚人节,但愿这个美好的谎言在不远的将来可以实现……..

posted @ 2008-04-04 22:04 阿布 阅读(1275) 评论(0) 编辑

在Ruby on Rails 2.1版本发布的前夕,Rails开发团队也准备将代码的存储库从Subversion迁移到Git之上。在Ruby on Rails的官方博客里,DHH写到

我们准备将Rails开发的代码存储库从Subversion迁移到Git之上,迁移过程将会在近期内完成。并且会使用Github来帮助开发者进行协作。在版本存储库迁移的同时,我们也会将问题跟踪系统转移到基于Rails开发的Lighthouse应用之上,于是到目前为止,我们的存储库和问题跟踪系统都是使用的Rails应用,这对我们是一个很好的鼓励。

在代码存储库迁移之后,我们将冻结现有Subversion的存储库以及Trac问题跟踪系统。这两个系统都会保留较长一段时 间,但是我们并不建议使用者再去访问它们。这意味着我们的Subversion存储库依然可以访问,但是如果你想获得最新的代码,需要在新的Git存储库 上更新。

为了帮助使用者更快的适应存储库系统的迁移,DHH同时也推荐了SVN使用者的Git快速上手教程。在对DHH声明的评论中,大部分开发者对此表示了赞赏与支持。其中,Scott Chacon为其他开发者推荐了为计算机科学家准备的Git介绍一文,文中讲解了当Git命令执行时,Git是究竟如何帮助我们处理工作的。Scott认为,了解Git是如何工作的,对于正确的使用Git有着积极的意义。

Git是Linus Torvalds为Linux内核开发而专门打造的版本控制软件,更加关注在管理大型项目时,代码版本的更新速度、效率以及可用性方面的提升,并为非线性 的协作开发提供良好的支持。Git帮助开发者保留历史版本在本地的全部记录,同时大型项目管理方面,效率比一般的版本控制工具都要高。在Linux内核开 发的版本控制中,Git发挥了积极的作用,Linus对其的评价是“傻瓜式的内容跟踪工具”。

Git基于GNU General Public License v2协议开放源代码。目前已从Linus Torvalds移交给Junio C Hamano维护。Git目前最新的版本是1.5.4.5,这个版本在之前的版本基础上修改了十多处Bug,并且对于部分文档进行了更新。

目前,Git也获得越来越多国内开发者的认可,并在项目开发中尝试使用Git来进行源代码的版本控制管理工作。对于使用Git所带来的好处,国内的开发者Robin Lu在Blog中这样评价道

初始化非常方便...对于随便写两行代码就要放到SCM里的人来说,再合适不过。将Git用作备份系统,或 者同步两台机器文档来使用,都很方便。Git的绝大部分操作都在本地完成,不用和集中的SCM服务器交互,使用者可以放心的随时随地提交代码。在Git 中,分支管理更为容易,无论是建立新的分支,还是在分支之间切换,仅有一条命令就可以完成,不需要建立多余的目录。除此之外,分支之间合并时,不仅代码会 合并在一起,Check In的历史也会保留下来。

目前,包括Rails在内,已经有不少知名项目已经迁移到Git之上来进行源代码版本管理,比如RubiniusMerb、Wine、 U-boot、Beryl等项目。尽管Git的命令繁多,但不少开发者为Git编写了小的脚本与批处理程序,进一步让Git命令的使用变得更加方便快捷, 并且对开发者更为友好。同时,基于Rails开发的Git存储库托管工具GitHub,也为开发者带来了更为方便的协作模式,关于GitHub的细节报 道,请阅读InfoQ中文站GitHub:基于Rails的Git库托管一文。

来自:http://www.infoq.com/cn/news/2008/04/rails-svn-to-git

posted @ 2008-04-04 20:22 阿布 阅读(366) 评论(0) 编辑

2008年3月29日

这里发现了一个特别有意思的dotNet开源软件-- IKVM.NET,简单的说,它就是一个Java虚拟机,让Java可以运行在dotNET CLR或者Mono CLR之上。

IKVM.NET包含以下的部分:
  1. IKVM.Runtime.dll: VM运行时和所有支持代码。它包括以下的功能: Byte Code JIT 编译器和验证器: 使用JIT将Java Byte Code编译为CIL(C中间语言)。
  2. 对象模式映射结构: 将.NET中的System.Object,System.String,System.Exception映射为java代码中的java.lang.Object, java.lang.String,java.lang.Throwable。
  3. 管理本地方法(在Classpath中)的.NET重新实现。
  4. *IKVM.GNU.Classpath.dll: 被编译的GNU Classpath版本,它是由自由软件基金会实现的java类库和一些IKVM.NET附加代码组成的。注意:这里的GNU Classpath不是IKVM.NET的一部分,但是前者被用在IK.VM.NET中。
  5. IKVM.JNI.[Mono|CLR-Win32].dll: 通过实现JNI接口管理C++汇编。作为一个可选部分,只在程序使用自己的本地库时才被用到。而对于纯java程序来讲是不会被用到的。
  6. ikvm.exe: 与java.exe很类似的启动执行程序(动态模式)。
  7. ikvmc.exe: 静态编译器,被用来编译java类和jar使其成为.NET汇编(静态模式)。
  8. ikvmstub.exe: 一个从.NET汇编生成存根类的工具,就如javap一样反编译.NET汇编。IKVM.NET了解如何存根并用实际的.NET类型引用替换对存根的引用。
  9. IKVM.AWT.WinForms.dll: 非常有限的零散AWT实现。



此项目目前正在开发,将最大化实现与JDK1.4的兼容,但是仍存在一些漏洞(尤其在Classpth API中)。
  • AWT和Swing还未有功能。
  • 安全性是IKVM平台的一个大遗漏。此问题将依靠.NET平台提供的旧有的、但功能强大的安全模式而被解决。 虽然这样,目前项目已具备能成功运行大型java项目的能力。

posted @ 2008-03-29 14:38 阿布 阅读(697) 评论(1) 编辑

2008年3月12日

In my last post I described how Routing no longer has any dependency on MVC. The natural question I’ve been asked upon hearing that is “Can I use it with Web Forms?” to which I answer “You sure can, but very carefully.”

Being on the inside, I’ve had a working example of this for a while now based on early access to the bits. Even so, Chris Cavanagh impressively beats me to the punch in blogging his own implementation of routing for Web Forms. Nice!

One of the obvious uses for the new routing mechanism is as a “clean” alternative to URL rewriting (and possibly custom VirtualPathProviders for simple scenarios) for traditional / postback-based ASP.NET sites.  After a little experimentation I found some minimal steps that work pretty well:

  • Create a custom IRouteHandler that instantiates your pages
  • Register new Routes associated with your IRouteHandler
  • That’s it!

He took advantage of the extensibility model by implementing the IRouteHandler interface with his own WebFormRouteHandler class (not surprisingly my implementation uses the same name) ;)

There is one subtle potential security issue to be aware of when using routing with URL Authorization. Let me give an example.

Suppose you have a website and you wish to block unauthenticated access to the admin folder. With a standard site, one way to do so would be to drop the following web.config file in the admin folder...

<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</configuration>

Ok, I am a bit draconian. I decided to block access to the admin directory for all users. Attempt to navigate to the admin directory and you get an access denied error. However, suppose you use a naive implementation of WebFormRouteHandler to map the URL fizzbucket to the admin dir like so...

RouteTable.Routes.Add(new Route("fizzbucket"
, new WebFormRouteHandler("~/admin/secretpage.aspx"));

Now, a request for the URL /fizzbucket will display secretpage.aspx in the admin directory. This might be what you want all along. Then again, it might not be.

In general, I believe that users of routing and Web Form will want to secure the physical directory structure in which Web Forms are placed using UrlAuthorization. One way to do this is to call UrlAuthorizationModule.CheckUrlAccessForPrincipal on the actual physical virtual path for the Web Form.

This is one key difference between Routing and URL Rewriting, routing doesn’t actually rewrite the URL. Another key difference is that routing provides a mean to generate URLs as well and is thus bidirectional.

The following code is my implementation of WebFormRouteHandler which addresses this security issue. This class has a boolean property on it that allows you to not apply URL authorization to the physical path if you’d like (in following the principal of secure by default the default value for this property is true which means it will always apply URL authorization).

public class WebFormRouteHandler : IRouteHandler
{
public WebFormRouteHandler(string virtualPath) : this(virtualPath, true)
{
}
public WebFormRouteHandler(string virtualPath, bool checkPhysicalUrlAccess)
{
this.VirtualPath = virtualPath;
this.CheckPhysicalUrlAccess = checkPhysicalUrlAccess;
}
public string VirtualPath { get; private set; }
public bool CheckPhysicalUrlAccess { get; set; }
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
if (this.CheckPhysicalUrlAccess
&& !UrlAuthorizationModule.CheckUrlAccessForPrincipa(this.VirtualPath
,  requestContext.HttpContext.User
, requestContext.HttpContext.Request.HttpMethod))
throw new SecurityException();
var page = BuildManager
.CreateInstanceFromVirtualPath(this.VirtualPath
, typeof(Page)) as IHttpHandler;
if (page != null)
{
var routablePage = page as IRoutablePage;
if (routablePage != null)
routablePage.RequestContext = requestContext;
}
return page;
}
}

You’ll notice the code here checks to see if the page implements an IRoutablePage interface. If your Web Form Page implements this interface, the WebFromRouteHandler class can pass it the RequestContext. In the MVC world, you generally get the RequestContext via the ControllerContext property of Controller, which itself inherits from RequestContext.

The RequestContext is important for calling into API methods for URL generation. Along with the IRoutablePage, I provide a RoutablePage abstract base class that inherits from Page. The code for this interface and the abstract base class that implements it is in the download at the end of this post.

One other thing I did for fun was to play around with fluent interfaces and extension methods for defining simple routes for Web Forms. Since routes with Web Forms tend to be simple, I thought this syntax would work nicely.

public static void RegisterRoutes(RouteCollection routes)
{
//first one is a named route.
routes.Map("General", "haha/{filename}.aspx").To("~/forms/haha.aspx");
routes.Map("backdoor").To("~/admin/secret.aspx");
}

The general idea is that the route url on the left maps to the webform virtual path to the right.

I’ve packaged all this up into a solution you can download and try out. The solution contains three projects:

  • WebFormRouting - The class library with the WebFormRouteHandler and helpers...
  • WebFormRoutingDemoWebApp - A website that demonstrates how to use WebFormRouting and also shows off url generation.
  • WebFormRoutingTests - a few non comprehensive unit tests of the WebFormRouting library.

WARNING: This is prototype code I put together for educational purposes. Use it at your own risk. It is by no means comprehensive, but is a useful start to understanding how to use routing with Web Forms should you wish. Download the demo here.

posted @ 2008-03-12 20:54 阿布 阅读(445) 评论(0) 编辑

微软发布了一个Visual Studio 10未来特性的演示,这些特性将作为VS 2008的扩展发布。这些特性被统一称为Visual Studio 2008的PowerCommands ,其中还包括了这些特性的源代码。

复制与粘贴命令

这些命令可以简化在项目与剪贴板之间的信息移动。它们包括:

  • 复制和粘贴类(Copy and Paste Class)——这或许有些名不副实,因为它可以在一个特定的项目文件中复制所有的类。如果项目文件中有子文件(例如page.aspx和page.aspx.cs),那么它们也会被复制。
  • 复制与粘贴引用(Copy and Paste References)——在生成相似的项目时,这一功能将非常有用。
  • 作为项目引用复制(Copy As Project Reference)——它将上面两者结合起来,比“添加引用”对话框更加快捷。

项目

  • 折叠项目(Collapse Projects)——仅仅作为折叠项目树的快捷方式。
  • 编辑项目文件(Edit Project File)——它将为选中的项目打开MSBuild。警告,这一操作会导致项目被卸载。

重构

  • 这些新增的重构功能仅仅针对于C#是可用的。VB则从第三方供应商得到对重构的支持。
  • 提取静态变量(Extract Constant)——它可以将一个字符串转换为静态的。VB则通过免费版的Refacto来r实现。
  • 移除和排序Usings(Remove and Sort Usings)——它将为一个项目中所有文件的“using”语句进行排序,并移除其中没有使用的“using”语句。VB通过付费版的Refactor实现。
    注意:在文档中,错误地将这一特性描述为与VB中的移除不用的引用(Remove Unused Reference)相同。实际上不是这样,C#仍然没有办法自动移除实际没有使用的对DLL的引用。

其他

  • 以文件夹方式打开(Open Containing Folder)——它会打开资源管理器(Explorer),这与右键点击文件,选择Explorer标签打开文件一样。
  • 以命令提示符方式打开(Open Command Prompt)——它会打开Visual Studio command prompt。
  • 卸载/重新加载项目——在处理未集成的源代码控制时,这些命令会非常有用。或许受到性能的影响,当前可能不需要“卸载项目”命令。

完整列表请参见i安装和源代码包附带的readme文件。

查看英文原文:Proposed VS 10 Features Released as a VS 2008 Add-On

来源: http://www.infoq.com/cn/news/2008/03/PowerCommands

posted @ 2008-03-12 13:23 阿布 阅读(454) 评论(2) 编辑

2008年3月11日

posted @ 2008-03-11 23:28 阿布 阅读(198) 评论(0) 编辑

posted @ 2008-03-11 11:09 阿布 阅读(397) 评论(0) 编辑

2008年3月10日

posted @ 2008-03-10 23:49 阿布 阅读(353) 评论(1) 编辑