
作者: 左其盛 发表于 2010-07-18 22:30 原文链接 阅读: 131 评论: 0
最近在做的一个项目遇到这么一个问题:需要把一个字符串格式的卡号转换为bigint格式的卡号。t-sql自带的isnumeric函数不能用。它认为合格的数字不一定是bigint,比如一些带小数点的数字,科学计数的数字。上网搜,中文资料中没发现有帮助的,在sqlservercentral上发现有人写过这个函数了。关键的算法就是charindex + substring循环,一个一个看有没有不合法的字符。文章的评论中有人说可以用patindex函数,更快。不过用了这两个都解决不了全角数字的问题,他们都认为全角数字是合法的数字,当然实际转换为bigint的时候会报错。
又上网搜了搜,注意到了COLLATE关键字。一般的解释是它可以指定排序规则。可以改变的规则有大小写、重音、假名(日语才有)、全角半角。中文系统中很少用到这个关键字。一般就用默认的大小写不敏感。我这里想区分全角半角,必须用COLLATE关键字。可以这么用:charindex(substring(@s, @i, 1), '0123456789' COLLATE Chinese_PRC_CS_AS_KS_WS),其中COLLATE后面的参数中Chinese_PRC指定字符集所使用的代码页(其实就是所用的语言),后面最多可以跟四个×s,S表示敏感,对应的I表示不敏感。比如Chinese_PRC_CS_AS_KS_WS表示是简体中文,大小写敏感(CS),重音敏感(AS,这个对汉语没意义),区分假名类型(KS,这个对汉语也没意义),区分全角半角(KS),Chinese_PRC_CI_AI表示简体中文,大小写不敏感,重音不敏感,不区分假名类型,不区分全角半角。后两个参数忽略掉就表示否定。当然还可以直接指定二进制排序,全角半角的问题就自然解决了,而且二进制排序还更快一些:charindex(substring(@s, @i, 1), '0123456789' COLLATE Chinese_PRC_BIN)
因此,理论上这个判断字符串是否为bigint的问题的核心算法有四种解决方案:
charindex(substring(@s, @i, 1), '0123456789' COLLATE Chinese_PRC_CS_AS_KS_WS)
charindex(substring(@s, @i, 1), '0123456789' COLLATE Chinese_PRC_BIN)
patindex('%[^0-9]%',@s COLLATE Chinese_PRC_CS_AS_KS_WS )
patindex('%[^0-9]%',@s COLLATE Chinese_PRC_BIN )
不过实验发现第三种不能解决问题,仍然认为全角数字是合法的数字。看微软msdn文档,上网搜都没有找到答案。其他三种都可以。理论上最后一种最快。
下面是完整的函数的代码:
/*
-- Tests pass isnumeric AND fail IsBigInt AND fail cast(vc as bigint)
-- range
SELECT IsNumeric('-9223372036854775809'), dbo.IsBigInt('-9223372036854775809')
SELECT IsNumeric('9223372036854775808'), dbo.IsBigInt('9223372036854775808')
-- invalid chars
SELECT IsNumeric('-5d2'), dbo.IsBigInt('-5d2')
SELECT IsNumeric('-5e2'), dbo.IsBigInt('-5e2')
SELECT IsNumeric('+3,4'), dbo.IsBigInt('+3,4')
SELECT IsNumeric('+3.4'), dbo.IsBigInt('+3.4')
-- pass this strange case
SELECT IsNumeric('00000000000000000000000000001'), dbo.IsBigInt('00000000000000000000000000001')
*/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.IsBigInt') AND type IN (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION dbo.IsBigInt
GO
CREATE FUNCTION dbo.IsBigInt (@a varchar(30))
returns bit
AS
BEGIN
-- Submitted to SqlServerCentral by William Talada
DECLARE
@s varchar(30),
@i int,
@IsNeg bit,
@valid int
-- assume the best
SET @valid = 1
SET @IsNeg=0
SET @s = ltrim(rtrim(@a))
-- strip OFF negative sign
IF len(@s) > 0
AND LEFT(@s, 1) = '-'
BEGIN
SET @IsNeg=1
SET @s = RIGHT(@s, len(@s) - 1)
END
-- strip OFF positive sign
IF len(@s) > 0
AND LEFT(@s, 1) = '+'
BEGIN
SET @s = RIGHT(@a, len(@a) - 1)
END
-- strip leading zeros
while len(@s) > 1 and left(@s,1) = '0'
set @s = right(@s, len(@s) - 1)
-- 19 digits max
IF len(@s) > 19 SET @valid = 0
-- the rest must be numbers only
--SET @i = len(@s)
--WHILE @i >= 1
--BEGIN
----IF charindex(substring(@s, @i, 1), '0123456789' COLLATE Chinese_PRC_CI_AS_WS ) = 0 SET @valid = 0
-- IF charindex(substring(@s, @i, 1), '0123456789' COLLATE Chinese_PRC_BIN ) = 0 SET @valid = 0
-- SET @i = @i - 1
--END
--if patindex('%[^0-9]%',@s COLLATE Chinese_PRC_CI_AS_WS )>0
if patindex('%[^0-9]%',@s COLLATE Chinese_PRC_BIN )>0
set @valid=0
-- check range
IF @valid = 1 AND len(@s) = 19
BEGIN
IF @isNeg = 1 AND @s > '9223372036854775808' SET @valid = 0
IF @IsNeg = 0 AND @s > '9223372036854775807' SET @valid = 0
END
RETURN @valid
END
go

评论: 0 查看评论 发表评论
百度期待您的加盟
最新新闻:
· 微软不为外界所知的十件趣事(2010-07-18 22:58)
· 中国第2季搜索引擎市场规模达26亿 百度破70%(2010-07-18 22:54)
· Facebook用户数下周达5亿 邀请用户共享故事(2010-07-18 22:49)
· 开源的可视化编辑器 KindEditor 3.5.1 发布(2010-07-18 22:35)
· WordPress 陷入开源‘边界’之争(2010-07-18 17:47)
编辑推荐:揭秘Facebook背后的那些软件
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
posted @ 2010-07-18 23:35 Lixy 阅读(100) 评论(0)
编辑

作者: virus 发表于 2010-07-18 21:47 原文链接 阅读: 275 评论: 0
题外话
又是一本Head.First系列的书,这个系列很多,包括:SQL、设计模式、C#、面向对象分析与设计、软件开发等。里面的语言生动活泼,很好的以故事的形式引出正文,而不是枯燥的文字。
书中开篇的建议
1、放慢速度。理解的越多,需要记忆的越少。
不要只是读,要停下来思考。当书中出现一个问题的时候,不要着急浏览答案,假设真的有人问你这个问题。你强迫你的大脑思考的越深,越是你学习和记忆的好机会。
2、做练习。写读书笔记。
不要只是看练习。拿起纸笔。大量的证据表明,学习时候的物理活动可以增加学习的效果。
3、不要跳着读
有一些内容会让你觉得没有太大的用处,其实他们都是内容的一部分,不要跳过他们。这不是可有可无的旁注。
4、确保这是你上床之前的最后一件事,或者至少是最后一件有挑战的事
学习的一部分,尤其是需要长期记忆的,通常在你放下书之后会在大脑中发生,这时候你的大脑需要自己的时间去做更多的处理。如果你在这段处理的过程中又放入新东西,你刚才学的一些内容会丢失。
5、喝大量的水
你的大脑在一个流动的液体中会工作的更好。脱氢胆固醇会降低认识能力,脱氢胆固醇在你感觉渴的时候会产生。
6、大声的说出来
说话时大脑的另一部分。如果你正在理解一些东西,或者想要在一会想起来什么东西,可以大声的讲出来。可以向其他人大声的解释它。你将会学的更快。
7、听从你的大脑
要注意你的大脑负荷是否已经过载。如果你发现自己开始忘记刚才读过的内容,是该休息的时候了。
8、Feel something
your brain needs to know that this matters.Get involved with the stories. Make up your own captions for the photos.
9、设计一些东西
将你读到的新东西进行自己的设计,或者是重新设计以前的东西。
正文
对于什么是好的软件,通常会有不同的意见。因为站的角度不同,关注点不同,得出的结论就会不同。
用户友好的程序员说:
好的软件通常会做用户想要它做的事情。因此,即使用户想以一种新的方式使用它,它也不应该挂掉或者是给出一个不在预期的结果。
面相对象的程序员说:
好的软件的代码应该是面向对象的,因此不应该有一群重复的代码,每一个对象应该很好的控制自己的行为。应该很容易扩展,因为你的设计是可靠并且灵活的。
设计大师说:
好的软件就是使用可靠的设计模式和原则。保持对象的松散耦合,代码对扩展开放,对修改关闭。保持代码的重用性。
轻松使用三步达到好的软件
- 保证你的软件做了用户想要做的事情。
- 应用基本的OO设计原则来增加灵活性。
- 追求一个可维护,可重用的设计。
为了证明什么是有缺陷的,下面是一些原则,可以帮助你找出不匹配的对象类型:
- 对象应该做和他们的名字相符的事情。如果一个对象叫做Jet,他应该会takeOff()和land(),不应该有takeTicket(),这很有可能是另外一个对象的任务,而不属于Jet。
- 每一个对象应该只代表一个概念。不应该让一个对象有两个或者三个职责。避免Duck对象代表木头鸭子,又代表橡皮鸭子。
封装允许你将应用按照不同的逻辑分组。

评论: 0 查看评论 发表评论
百度期待您的加盟
最新新闻:
· 微软不为外界所知的十件趣事(2010-07-18 22:58)
· 中国第2季搜索引擎市场规模达26亿 百度破70%(2010-07-18 22:54)
· Facebook用户数下周达5亿 邀请用户共享故事(2010-07-18 22:49)
· 开源的可视化编辑器 KindEditor 3.5.1 发布(2010-07-18 22:35)
· WordPress 陷入开源‘边界’之争(2010-07-18 17:47)
编辑推荐:揭秘Facebook背后的那些软件
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
posted @ 2010-07-18 23:35 Lixy 阅读(47) 评论(0)
编辑
摘要: 作者: dave_cn 发表于 2010-07-18 21:20 原文链接 阅读: 148 评论: 2转载请注明出处。http://www.cnblogs.com/dave_cn/本程序需要ncurses库,ubuntu下安装ncurses可以执行下面命令:sudo apt-get install libncurses5-dev关于ncurses的用法,读者可以Google之。程序运行的效果如下:...
阅读全文
posted @ 2010-07-18 23:35 Lixy 阅读(72) 评论(0)
编辑

作者: 麒麟 发表于 2010-07-18 19:58 原文链接 阅读: 631 评论: 9
在Asp.net MVC中,我们能非常方便的使用Ajax。这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用、Jquery、Ajax Helper。
首先看一下原始的Ajax的调用的
在Asp.net MVC中添加一个custom_ajax.js,加入下面使用ajax的脚本代码
function getXmlHttpRequest() {
var xhr;
//check for IE implementation(s)
if (typeof ActiveXObject != 'undefined') {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
} else if (XMLHttpRequest) {
//this works for Firefox, Safari, Opera
xhr = new XMLHttpRequest();
} else {
alert("对不起,你的浏览器不支持ajax");
}
return xhr;
}
function getMessage() {
//get our xml http request object
var xhr = getXmlHttpRequest();
//prepare the request
xhr.open("GET", "get_message.html", true)
//setup the callback function
xhr.onreadystatechange = function() {
//readyState 4 means we're done
if(xhr.readyState != 4) return;
//populate the page with the result
document.getElementById('result').innerHTML = xhr.responseText;
};
//fire our request
xhr.send(null);
}
在View中引入此脚本,并添加触发的代码:
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
第一种方式
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="headContent" runat="server">
<script src="http://www.cnblogs.com/Scripts/custom_ajax.js" type="text/javascript"></script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<p><strong>点击按钮处罚一个Ajax请求: </strong>
<button type="button" onclick="getMessage()">Get the Message</button>
</p>
<div id="result"></div>
</asp:Content>
效果如下:触发之前:
触发之后:
第二种方式,利用Jquery:
这里实现一个最简单的留言板,数据存储在一个List<string>中。
在View中引用Jquery:
<script src="http://www.cnblogs.com/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
添加下面脚本:
<script type="text/javascript">
//execute when the DOM has been loaded
$(document).ready(function () {
//wire up to the form submit event
$("form.hijax").submit(function (event) {
event.preventDefault(); //prevent the actual form post
hijack(this, update_sessions, "html");
});
});
function hijack(form, callback, format) {
$("#indicator").show();
$.ajax({
url: form.action,
type: form.method,
dataType: format,
data: $(form).serialize(),
completed: $("#indicator").hide(),
success: callback
});
}
function update_sessions(result) {
//clear the form
$("form.hijax")[0].reset();
$("#comments").append(result);
}
</script>
创建控制器:
public class CommentController : Controller
{
private IList<string> _comments = new List<string>();
public ActionResult Index()
{
return View(_comments);
}
public ActionResult IndexAjaxHelp()
{
return View(_comments);
}
public ActionResult AddComment(string comment)
{
_comments.Add("<li>" + comment + "</li>");
return Content(string.Join("\n", _comments.ToArray()));
}
}
创建View表单:
<h4>Comments</h4>
<ul id="comments">
</ul>
<% using (Html.BeginForm("AddComment","Comment",FormMethod.Post,new {@class="hijax"})) { %>
<%= Html.TextArea("Comment", new{rows=5, cols=50}) %>
<button type="submit">Add Comment</button>
<span id="indicator" style="display:none"><img src="http://www.cnblogs.com/content/load.gif" alt="loading..." /></span>
<% } %>
效果:
第三种方式:Ajax Helper。
将最简单的留言板修改成Ajax Helper的方式。
1、首先了解一下Ajax Helper下面四种方法。
a、Ajax.ActionLink():它将渲染成一个超链接的标签,类似于Html.ActionLink()。当它被点击之后,将获取新的内容并将它插入到HTML页面中。
b、Ajax.BeginForm():它将渲染成一个HTML的Form表单,类似于Html.BeginForm()。当它提交之后,将获取新的内容并将它插入到HTML页面中。
c、Ajax.RouteLink():Ajax.RouteLink()类似于Ajax.ActionLink()。不过它可以根据任意的routing参数生成URL,不必包含调用的action。使用最多的场景是自定义的IController,里面没有action。
d、Ajax.BeginRouteForm():同样Ajax.BeginRouteForm()类似于Ajax.BeginForm()。这个Ajax等同于Html.RouteLink()。
这个例子中使用Ajax.BeginForm(),下面具体了解Ajax.BeginForm()的参数。看下面代码
<% using (Ajax.BeginForm("AddComment", new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "comments",
InsertionMode = InsertionMode.InsertAfter
})) { %>
actionName:AddComment(action的名字)
controllerName:CommentController(Controller的名字)
ajaxOptions:
HttpMethod:Ajax的请求方式,这里为POST
UpdateTargetId :Ajax请求的结果显示的标签的ID,这里为comments
InsertionMode:将Ajax结果插入页面的方式,这里将ajax的结果放置到comments的后面
2、实现:
首先要在View中添加下面两个脚本文件:
<script src="http://www.cnblogs.com/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
定义表单:
<h4>Comments</h4>
<ul id="comments">
</ul>
<% using (Ajax.BeginForm("AddComment", new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "comments",
InsertionMode = InsertionMode.InsertAfter
})) { %>
<%= Html.TextArea("Comment", new{rows=5, cols=50}) %>
<button type="submit">Add Comment</button>
<% } %>
这样就行了,我们发现比用Jquery方便很多,但是使用Jquery将灵活很多。
3、效果:和第二种一样。
总结:本文非常的简单,在asp.net mvc中实现了3中ajax的调用方式。推荐使用Jquery和Ajax Helper这两种。Ajax Helper使用非常简单,Jquery比较灵活。
参考:
ASP.NET MVC 2 In Action
Pro ASP.NET MVC 2 Framework, Second Edition

评论: 9 查看评论 发表评论
百度期待您的加盟
最新新闻:
· 微软不为外界所知的十件趣事(2010-07-18 22:58)
· 中国第2季搜索引擎市场规模达26亿 百度破70%(2010-07-18 22:54)
· Facebook用户数下周达5亿 邀请用户共享故事(2010-07-18 22:49)
· 开源的可视化编辑器 KindEditor 3.5.1 发布(2010-07-18 22:35)
· WordPress 陷入开源‘边界’之争(2010-07-18 17:47)
编辑推荐:揭秘Facebook背后的那些软件
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
posted @ 2010-07-18 23:35 Lixy 阅读(60) 评论(0)
编辑

作者: 陈希章 发表于 2010-07-18 18:29 原文链接 阅读: 481 评论: 6
引子
之前我写过一篇文章,讨论了在XML Web Service或者WCF中,多次发起异步调用可能导致的问题,请参考http://www.cnblogs.com/chenxizhang/archive/2010/05/31/1747812.html
在这一片文章中,我介绍了问题的症状以及发生的原因,及其解决方法。这篇文章收到了一些反馈,其中有朋友介绍到了Hprose这个产品。我后来也实际用了一下,确实在Hprose中是可以避免这种问题的。(有兴趣的朋友,可以参考这里 http://www.cnblogs.com/chenxizhang/archive/2010/05/31/1747812.html#1873774)
本着实践和求真的精神,我也专门对Hprose这个产品也做了一些深入的探究,包括和他们的开发团队做了一些交流。同时,因为这个产品是商业开源(与一般的开源还不太一样),所以也引发了一些对技术和开源的思考。今天整理出来,给大家参考参考
什么是Hprose?
Hprose (High Performance Remote Object Service Engine) 是一个商业开源的新型轻量级跨语言跨平台的面向对象的高性能远程动态通讯中间件。它支持众多语言,例如 C++, .NET, Java, Delphi, Objective-C, ActionScript, JavaScript, ASP, PHP, Python, Ruby, Perl 等语言,通过 Hprose 可以在这些语言之间实现方便且高效的互通。
Hprose 是商业开源软件,在取得 Hprose 商业使用授权后,您可以将它用于您所拥有所有权的商业项目的开发当中,Hprose 商业使用授权没有开发者人数、服务器CPU数量、授权年限等限制,但对二次分发有一定的特别要求。如果您所开发的项目或产品涉及到对 Hprose 的二次分发,还需要取得相应的二次分发授权。
关于Hprose的详细介绍和有关资源,请访问其官方网站: http://www.hprose.com
问答Hprose
下面记录了我和他们的团队几次邮件交流讨论到的几个一些问题。取自邮件的原文,比较直白,但是原汁原味。
问:协议层面,我关心的是主要包括两个层面:Hprose如何支持不同的传输协议(例如Http和Tcp或者还有更多的),以及Hprose的数据序列化格式是否有公开的规范书?
答:协议实现方面我们是这样考虑的,通过uri来区分不同的协议,目前http://、https://开头的是表示Http客户端和Https客户端,他们由HproseClient的子类HproseHttpClient来具体实现。当以后提供tcp、udp等实现后,tcp://、udp://开头的表示TCP客户端和UDP客户端,他们可能会分别由HproseClient的子类HproseTcpClient和HproseUdpClient来分别实现,每个不同类型的客户端肯定会有他们特有的属性,并且内部通讯机制也完全不同,所以由不同的子类实现是必要的,但是它们又都是HproseClient的子类,在不需要设置特殊属性的情况下,可以使用HproseClient来统一访问,另外,当tcp、udp版本实现之后,我们会给HproseClient类提供一个工厂方法,通过不同协议的uri来创建不同类型的HproseClient对象不需要指定使用哪个子类,这样就可以将不同协议的实现进行统一管理了。
【我的评论】这个做法也是可以的,采用类似于.NET中WebRequest那种工厂方法模式的设计,也能保证一定的灵活性。虽然与WCF那样通过配置文件直接就可以改变传输协议(其实是所谓的binding)的做法是有些差别的。
而数据序列化协议部分,目前我们没有公开的数据格式描述文档,这部分我们以后可能会通过标准或者专利的形式进行发布。格式的公开不是一个简单的问题,它有多方面的因素所制约,AMF这个格式从最初制定实施到最后公开也是花了5-6年的时间(2002-2006年制定,2007年公开发布),对于Adobe那样的大厂商尚且如此,对于我们而言也需要慎之又慎啊。
【我的评论】可以理解
问:数据传输层面,有没有办法由用户决定是否进行加密或者压缩?
答:可以由用户来决定加密和压缩。目前压缩是通过直接使用http的压缩方式,服务器端有个IsCompressionEnabled开关,当打开这个开关后,客户端只需要添加Accept-Encoding: gzip,deflate这个http头,就可以开始压缩传输了。不过说实话,压缩开启之后,数据量不够大时,数据压缩之后反而会增大,而且数据压缩传输会对CPU消耗相当严重,所以我们是不推荐使用压缩传输的,因此文档中并没有提到IsCompressionEnabled开关,也没有说明客户端如何开启压缩传输的方法,这样可以避免用户在误用这个功能后抱怨占用太多CPU。至于用户自定义加密传输,我们现在还没有提供这个功能,一是因为https本身可以提供加密传输,在tcp上也可以通过tcp+ssl实现加密传输。因为ssl是标准的,所以要比用户自定义的方式可靠一些。另一个原因是,加密传输要保证安全性需要用到密钥交换技术,这个同样占用大量的CPU计算时间,我们在Hprose的前身PHPRPC中提供了这个功能,但是我们发现它带来的这个缺点远远大于它所带来的问题(例如黑客可以通过这一点很轻松的发起DoS攻击,导致服务器计算资源耗尽而停止正常服务)。另外,密钥交换本身必须是一个同步调用的过程,在实现远程异步调用时,又要保证同步,会大大增加实现的复杂度,以及降低异步调用的效率。所以对于自定义加密方式传输的功能,我们目前的1.x版本中还不打算加入。当上面所说的几个问题能够找到有效的解决方法之后,我们会在Hprose 2.0或者Hprose 3.0中,以插件的方式来提供。
【我的评语】我们乐见这个设计的完善
问:是否有考虑过REST方面的支持?
答:REST相对于RPC是另外一种构架模式,Hprose提供了一种序列化机制,同时在这种序列化机制上构建了一个RPC机制。所以如果在Hprose的序列化机制上使用REST方式来构建系统也是完全可以的,但是这时候就完全不需要Hprose提供的客户端和服务器了,只需要Hprose的IO(序列化反序列化)部分就可以了。但是REST构架最大的问题是,它没有一个统一的标准,不能向RPC那样可以保证接口的互通性。而且应用的范围我认为也不应存在太大的交集,现在很多采用REST方式来提供类似Web服务功能的用法,大多都是对REST的误用,并没有发挥出REST本该发挥的优势。现在的REST已经像当年的XML一样被当成了万能灵药,而实际上,这已经背离了REST的本意。而Hprose既然是为RPC在XML火爆的年代中所犯下的错误做出的纠正,就不应该在REST火爆的年代犯下同样的错误。所以即使Hprose的序列化机制确实可以用于真正的REST应用,我们也不会明确的告诉大家Hprose可以做REST服务,因为在大多数人并不能真正认识REST的年代,这样说就是对用户的误导。
【我的评语】基本同意。对于REST,还是可以多从实践的角度去辩证地看待。
问:OnError事件的做法存疑,如果一个client发起了多次请求(方法名也是一样的),那么怎么区分呢
答:OnError事件确实存在您说的问题,这个问题我们在JavaScript、ActionScript、ASP这些版本中已经提供了在调用中直接提供跟调用绑定的错误处理回调的方式来解决了。但是C#、Java等这些版本我们在1.2版本中尚未提供这种解决方案(未提供的主要原因是用户对这个功能没有强烈需求)。但这个解决方案我们会在1.3版本中在所有语言中统一的。
【我的评论】这个机制还是需要完善起来,现在有用户对这个功能有强烈要求了
问:身份验证方面,我看到目前文档的说明是可以直接改写Http的头,添加Authencation这个标头。
- 我要说的是,这个部分最好有改进。目前这种做法易用性不高,会让人生畏。ADO.NET Data Service早先就遇到这个问题,后来改进了
- 身份验证和授权历来都是很重要的。身份验证本来就有标准的做法,例如给Client类型添加一个Credentials这个属性。而授权应该可以结合自定义Attribute或者给予Url的做法可能是较为合适的
- 后续这个方面最好有一些例子
答:对于.NET版本,我们确实提供了如您所说的Credentials属性,这个属性我们没有在手册中列出(因为他在其它语言中不存在,另外,.NET的某些版本中也不支持这个属性,例如SilverLight,这跟.NET本身有关),但是在使用时您会发现他确实存在。在服务器端授权方面,我们提供了 OnBeforeInvoke 事件,在该事件中可以对认证授权进行统一处理。我们不使用 Attribute 的原因是,我们认为 Attribute 不是一种松散耦合的解决方案,它对所发布的服务具有侵入性,我们设计的目标是,任何可以直接用于本地的方法都可以直接发布为远程方法,而不需要对它做任何修改或修饰。这样才可以保证,对于我们不具有源码的类也可以无需包装就作为远程服务发布,并且还可以对授权做集中控制。
【我的评语】这个设计我认为还是要改进,让用户使用起来更加方便一些
问:开发工具和服务描述方面的支持
- 这个部分最好有改进。例如我看到,如果直接在浏览器中输入服务的地址,会看到几个字符。那不是一个友好的设计。你可能主要是从开发者角度看这个问题了,而不是用户角度。
- 其实这一点可以借鉴WCF或者Web Service的wsdl做法,人家好的东西也可以吸收的
答:WSDL存在的意义在于它是上一代静态远程调用机制所必需的中间语言,就如同CORBA的IDL、ICE的Slice一样。与IDL和Slice不同的是,在.NET中,WSDL是根据服务自动生成的(但是对于PHP、Python这些非.NET上运行的语言,它们无法自动生成WSDL,需要手工编写,所以在PHP、Python等动态语言中发布WebService是相当痛苦的一件事情)。而Hprose是新一代的动态远程调用,所以不需要WSDL这样的中间语言。通过浏览器来查看Hprose的服务地址显示的远程方法列表虽然对用户来说不够友好,但是相比WSDL来说,Hprose的输出还是简单易懂的多。所以,我想您所说的WCF和WebService提供的用户友好的界面应该是指的在线调试界面,而不是WSDL那个页面吧。针对这个用户调试界面,我们提供了忘忧草(在线试用版地址:http://www.hprose.com/nepenthes/)这样的专业调试工具,用户如果需要调试服务,可以直接在这个调试工具中输入服务器地址,这样不管用户的服务是使用何种语言在何种平台上发布的,都可以采用同样的方式进行调试。而且随着这个调试工具的升级,用户以后可以用更加友好的界面来调试之前的服务,而不需要连同服务一起更新后才能使用新的调试界面。这都是我们为什么要采用这种分离式调试工具的原因。而您所说的WCF和WebService服务发布后的调试界面是.NET中特有的,如果用其它语言发布WebService服务,并不会得到这样的调试界面,所以,不同语言下的WebService服务,用户体验会有相当大的差别,而且用.NET老版本发布的WebService服务也不可能使用新版本.NET发布WCF服务的调试界面来调试,当然这并不是微软的错,而恰恰这是微软的策略,因为只有这样才能将用户牢牢的绑定于.NET平台之上,并且让用户始终追求使用最新版本的.NET平台开发工具,只有这样才能保证微软持续盈利。而我们的出发点恰恰相反,我们是要为所有平台所有语言的用户提供统一的用户体验,所以我们采用了截然不同的设计方式。
【我的评语】提供类似于WSDL这样的服务描述(甚至有配套生成客户端那个接口的工具)肯定是对的做法,让用户使用起来更加方便才是目标。统一的用户体验固然是没错的,但统一的用户体验不是说统一的不高的用户体验。
问:如果服务器端有两个类,他们拥有同名方法,则它们是无法区分的。看起来是以最后注册的类为准。这个有没有什么可能的问题。也就是说,在Client端Invoke的时候,只是提供了functionName,而没有办法提供服务类的名称。
答:你说的这个问题,我们一开始就已经考虑到了。所以我们提供了一个别名机制,如果以类(或对象)为单位发布服务,则可以为每个类(或对象)指定一个服务名成空间(该名称空间在发布服务时会变为方法前缀),而对于以方法为单位发布服务时,则可以为每一个方法指定一个完整的别名,通过完整的别名,就可以区分在定义时名称相同的两个不同方法了。这部分在文档的后面部分(客户端部分)有比较详细的说明。
例如您的这个例子可以这样改写:
class Program
{
static void Main(string[] args)
{
HproseHttpListenerServer svr = new HproseHttpListenerServer("http://localhost:2010/Hprose/");
svr.Methods.AddInstanceMethods(new MyService(), "s1");
svr.Methods.AddInstanceMethods(new MyService2(), "s2");
svr.Start();
Console.WriteLine("服务器已经准备就绪");
Console.Read();
}
}
【我的评语】这是不错的
问:对于开源的理解
答:我对开源的认识,大概开始于10年之前第一次接触Linux吧。那时的Linux发展了已有10年之久,因为其开源,功能又不逊于Unix,因此许多公司都希望藉由Linux操作系统,来取代昂贵的Unix,以便在激烈的竞争中取得有利的地位,这方面的代表是RedHat、SuSE等商业化 Linux 版本。而另外一些个人或组织则为了教育科研的需要而开发了适合自己的Linux版本,这方面的代表是Slackware。还有一部分个人和组织则是为了兴趣和自由的理想而开发他们自己的Linux版本,这方面的代表是Debian、Gentoo等。虽然大家做的都是Linux,但是出发点不同,因此各个产品之间当然会出现很多的差异化,以致于想要开发一个可以在所有版本Linux都能运行的程序都是一件很困难的事情。Linux阵营因此而分裂,形成了诸侯割据的局面。各诸侯之间的争斗一直在继续,一批死去,一批新的又起来,何时才能统一,不得而知。
而Windows自始至今都是不开源的,也正是因为这样,Windows才保持了统一的局面,而没有像Linux那样四分五裂。尽管Linux阵营常常以Windows不开源为借口来打击Windows,但是Windows的霸主地位始终没有丝毫的动摇,相反因为Linux阵营的四分五裂,各个厂商之间各怀鬼胎,虽然势众,但并不能团结一致,甚至一些公司为了自己的私利,还跟微软签署了合作协议,例如Novell(SuSE和Mono的开发公司)。这就像苏洵在六国论中指出的“六国破灭,非兵不利,战不善,弊在赂秦”一样,Linux照这样发展下去最终必会败于Windows系统。
Linux的开源始于对自由理想的追求,但好的理想却常常会被恶的思想所利用,以致善始而不能善终。
我理解的开源是这样的:
OpenSource != Free != No Charge
开源的目的一般分为以下几种:
1、以自由作为理想的开源。代表为GPL开源许可。GPL的发起人铁人(他名字的直译)是一个理想主义者,他认为软件是自由的,一个软件被开发出来之后,人人都可以修改它,人人都可以维护它,任何人都不可以剥夺别人修改软件的自由。但是他的这个理想常常被人误认为软件必须是要免费的。也就是被误认为 Free == No Charge,但实际上,铁人并没有这个意思,而且他自己也确实在通过他的自由软件所盈利。
2、以打击竞争对手或者潜在的竞争对手为目的并把开源贡献者作为免费劳动力的开源,代表为Apache基金会、Mozilla基金会。Apache基金会幕后最大的支持者是IBM,IBM通过赞助Apache基金会来开发一些免费的开源项目,这些开源项目最大的特点是商业友好,也就是说,可以免费的拿来商用且不用继续开源,Apache的开源项目作为一个试验田,由众多小公司拿来免费使用,在使用过程中遇到问题并不能得到任何的商业支持,只能通过自己努力来解决,解决之后在反馈给Apache组织(当然也有大部分人并不会提交自己的努力成果)。而IBM则会拿Apache的那些半成品来经过自己的优化之后,做成高端产品,再以高价卖给高端客户。这样,低端客户有免费的Apache开源项目使用,虽然难用但因为不用花钱,所以就不会选择收费的其它低端市场定位的同类商业产品,尽管那些商业产品可能要比Apache的开源项目优秀的多。而高端用户有因为不在乎花钱,所以只买最贵的,因此IBM的产品就成了他们的首选。IBM通过这种方式有效的打击了低端市场的同类产品,使他们无法成长为可以跟IBM叫板的竞争对手。而Mozilla基金会可以说是一个复仇组织,当它的前身Netscape被微软的IE消灭之后,Mozilla就把打败微软的IE作为了首要目标,因此Mozilla的开源免费完全是为了解决掉微软的IE。不过螳螂捕蝉,黄雀在后,Mozilla经过这么多年的发展,虽然终于可以争取到一点IE的市场份额了,没想到Google的Chrome也进入了浏览器竞争市场,面对这两大高手,Mozilla要翻身恐怕是很难了。
3、为了让客户放心使用而开源。代表是微软和Hprose。微软现在有很多产品会对某些要求查看源码的客户开源,比如某些国家的政府,这种开源仅仅是为了让客户放心使用,证明自己没有留下什么后门。Hprose的开源也是类似的想法,对客户开源,让客户放心使用,当然如果客户遇到问题,因为手中有源码,也可以更容易的反馈错误,我们就可以更快的完成错误修正。所以,这种开源方式是一种双赢的做法。
4、盲目开源。代表是Sun。他在IBM的怂恿下,把Java开源了,最后IBM搞出了自己的JVM,赚翻了。而Sun自己一分钱没赚到,最后把自己公司都搭了进去,以致于最后落了个被Oracle收购的下场。
【我的评语】对于开源向来大家理解都不一,上述总结比较中肯。我个人也赞同:开源不等于免费
问:那个PHPRPC开源,你怎么评价?
PHPRPC 现在是以GPL形式开源的,也就是说,它也是一个理想主义的产物,任何人都可以得到它,修改它,使用它,却不能独自拥有它,不能将它私有化。实际上PHPRPC也是我们的一个产品,但是它只能用于同样采用GPL发布的项目中,我们对它也提供收费的商业支持,但实际上,你知道的,我们根本不可能在这方面得到一分钱的收入,因为在国内,只有理想是不能养活一个公司的,甚至连个人都不能养活。呵呵。但是既然已经做了,就让它继续下去吧,只要它还活着,就代表我们还有理想,我们还在奋斗!
【我的评语】为理想和奋斗者而鼓掌
最后,我还是要表达我对Hprose的整体评价:
-
我对Hprose的构想和设计比较赞许,跨平台跨语言支持当然是很多程序员乃至CTO们孜孜以求的目标。而Hprose在实践这样的目标,这最起码是值得我们学习并且为之欢欣鼓舞的。希望这个产品能精益求精,做得更好,并且能得到更多人的了解和使用。
-
对于Hprose团队的创造性工作和认真态度,我是颇感欣赏的。希望他们能坚持理想,实现理想。对于开源,经常有人感概说,看似很好,但实践起来却殊为不易,我自己也深以为然。从这方面而言,更应该赢得我们的敬意和支持。
【备注】以上言论均代表个人意见,如有雷同,纯属巧合

评论: 6 查看评论 发表评论
百度期待您的加盟
最新新闻:
· 微软不为外界所知的十件趣事(2010-07-18 22:58)
· 中国第2季搜索引擎市场规模达26亿 百度破70%(2010-07-18 22:54)
· Facebook用户数下周达5亿 邀请用户共享故事(2010-07-18 22:49)
· 开源的可视化编辑器 KindEditor 3.5.1 发布(2010-07-18 22:35)
· WordPress 陷入开源‘边界’之争(2010-07-18 17:47)
编辑推荐:揭秘Facebook背后的那些软件
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
posted @ 2010-07-18 23:35 Lixy 阅读(49) 评论(0)
编辑

作者: 倪大虾 发表于 2010-07-18 18:10 原文链接 阅读: 725 评论: 20
今天吃小龙虾的时候忽然想到了以前一个湖北朋友讲的虾的故事.这位朋友是湖北人,据他说在他小时候他们那里很多虾,特别是夏天雨后,满地爬的都是.因为传说那是美国对付中国的秘密武器,居然没有人敢吃.后来偶然有人提了半桶换卖了5块钱回来,慢慢的大家认识到虾的价值,随后就有了今天吃得五香小龙虾.然而近几年出现的"洗虾粉"又让人心有余悸.回想起昨天看到亚力山大<召集讨论设计模式是语言表达能力低下的产物>一贴.突然发现设计模式和虾居然有相似的命运.
设计模式从出现到发展,到普及再到今天,人们对它的认识也同样经过了"陌生"->"认识使用"->"批评".设计模式在程序员心目的地位中也经历了"新奇"->"圣经"->"怀疑".然而,不管人们如何认识龙虾,从始至终虾还是虾,没有变过.同样,设计模式自出现现到今天,一样没有变,变得只是次第更新的软件设计开发技术,变得只是一代又一代的程序员.
设计模式是20世纪60-70年代的软件危机之后大规模软件的发展的结果.这里有个问题,什么是设计模式.相比能够真正回答正确的人不多,真正理解的人也不多,因此经历的辉煌之后随之而来的怀疑就不可避免了,不过也正是这些批判怀疑促进了设计模式更进一的发展.
什么是设计模式,我也无法给出权威的答案,不过我敢肯定,设计模式不是<gof23种设计模式>中的UML图,也不是一行行的示例代码,它有的只是一种思想,一种思考问题的方式,就像<加勒比海盗>中的<海盗法典>,它只是指导,而并非律法.
既然只是一种指导,那么在使用的时候就应当根据实际情况使用它或不使用它,用一种方法实现它或用另外一种方法实现它.指导告诉我们一个解决问题的方向,而例子告诉我们到达目的地众多路径中的一条,它可能是最优,也可能是最差.<gof23种设计模式>一书不仅详细的表达了什么是设计模式,而且有很多生动的例子.这些例子用来具体说明每种设计模式.然而在今天看来,那些Smalltalk或C++的例子却成了一幅无形的枷锁,让很多人去套用而不知道因地制宜的发散扩展.比如当不断的用if ...else if选择工厂或策略的时候,就不会想到在.NET中可以使用反射来去掉让人生厌的if...else.
今天讨论的是.NET中的设计模式.大家都知道设计模式出现时还没有.NET,Gof不可能预见会有C#的出现,写论文的时候也不可能知道有反射,委托,事件等技术的出现.因而亚历山大同志单凭"比如C#内置了事件机制,那么Observer还有意思"就认为设计模式已过时就显得过于武断了.
.NET中有很多特性使得设计模式的实现更加简单,然而并不是说一定要用这些特性来实现设计模式,,就好比有了乘法,有时候我们用加法实现1+1=2可能更好,你不能因此而否定了乘法.同样,既然"事件"能够实现"Observer"的效果,那么一个事件不正是一个Observer吗?Observer不是加入到.NET中了吗!它只不过换了个名字,本质没有变.
所以说我们在用设计模式的时候首先应该深入挖掘语言的潜力,而后结合设计模式的思想,创造独有的应用设计模式.或许在C++中实现一个Observer有很多行代码,在.NET中一行即可.书中的例子只是学习的一种途径,没有创新,生搬硬套只能是鹦鹉学舌,邯郸学步,最终也只是贻笑大方了.

评论: 20 查看评论 发表评论
百度期待您的加盟
最新新闻:
· 微软不为外界所知的十件趣事(2010-07-18 22:58)
· 中国第2季搜索引擎市场规模达26亿 百度破70%(2010-07-18 22:54)
· Facebook用户数下周达5亿 邀请用户共享故事(2010-07-18 22:49)
· 开源的可视化编辑器 KindEditor 3.5.1 发布(2010-07-18 22:35)
· WordPress 陷入开源‘边界’之争(2010-07-18 17:47)
编辑推荐:揭秘Facebook背后的那些软件
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
posted @ 2010-07-18 23:35 Lixy 阅读(65) 评论(0)
编辑
摘要: 作者: 深蓝色右手 发表于 2010-07-18 17:53 原文链接 阅读: 743 评论: 14 本课程Demo在线演示地址:http://silverfuture.cn/ (随课程进度不断更新,所有资源暂时放在xap) 2010年7月20日是一个不平凡的日子,应朋友的邀请在自己的家乡广西师范大学展开为期两周的Silverlight游戏开发课程培训。这是我为家乡做贡献的第一次尝试,看到二十多位...
阅读全文
posted @ 2010-07-18 23:35 Lixy 阅读(45) 评论(0)
编辑

作者: CoolCode 发表于 2010-07-18 17:46 原文链接 阅读: 778 评论: 13
传说中的dynamic
dynamic是个不合群、不按规则办事的家伙,可以说是个异形,但更恐怖的是它又是无所不知的,任何事情都难不了它(咳咳,它似乎与Lambda表达式是死对头)。这令人想起《死亡日记》的怪异侦探L,行为怪异而智力超人,以至于离奇的案件不得不交给了他。dynamic可以看成是一切类型的化身,但并不是仅限于此,它像《未来战士》续集里面的T-1000型液体金属的终结者。噢~~~~似乎扯的有点远了
饱经风雨而不倒的ADO.NET
ADO.NET 从来做事都有理有据,而且又异常专注于自身领域,是个professional的牛人,令人想起《美丽心灵》里面的博弈论和微分几何学领域潜心研究以致获得诺贝尔经济学奖的数学家—— 约翰·福布斯·纳什 教授(咳咳,纳什教授是个妄想型精神分裂的~~~嗯,这个以后再说)。
关于ADO.NET 的例子
1. 执行SQL语句
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = "select Top 10 * from Orders";
command.CommandType = CommandType.Text;
using (IDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("OrderID: {0}, OrderDate: {1}",
reader.GetInt32(reader.GetOrdinal("OrderID")),
reader.GetDateTime(reader.GetOrdinal("OrderDate")));
}
}
}
2. 调用存储过程
command.CommandText = "CustOrdersOrders";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("CustomerID", "ALFKI"));
//略去...
当 ADO.NET 遇上 dynamic
某年某月ADO.NET不幸遇到dynamic,从此循规蹈矩的生活不复存在。dynamic说它可以帮助 ADO.NET 丢掉 DataSet 的包袱,而且在不用创建数据实体的情况下,实现查询结果垮不同方法传递;更加强大的地方是可以与存储过程无缝连接,即像调用一般方法一样调用存储过程而不用写额外代码。我的神哪~~~ ADO.NET 听了dynamic一番游说后,心底下不禁惊讶一下。dynamic又说,实现刚才所说的工程只要借你手下的两大猛将 SqlConnection 和 SqlCommand 助我一臂之力即可。
dynamic真有如此奇技? ADO.NET 虽有怀疑,但它想到曾经看过一部叫《阿甘正传》的电影,里面的阿甘虽然是弱智人,但参军时练就乒乓奇技,后来还和中国国手同台竞技。想到这,ADO.NET 认为不能因为对方弱智就不相信对方的话,这是很不礼貌很不绅士的人才会做的事,所以它相信了dynamic。
dynamic 果真不负众望,三两脚猫功夫就交出成果了。
dynamic重构后的数据库操作
using (dynamic command = connection.CreateDynamicCommand())
{
//执行查询SQL
IEnumerable<dynamic> toptenOrders = command("select Top 10 * from Orders");
foreach (dynamic order in toptenOrders)
{
Console.WriteLine("OrderID: {0}, OrderDate: {1}", order.OrderID, order.OrderDate);
}
//执行带参数的SQL
IEnumerable<dynamic> customerOrders = command("select * from Orders where CustomerID = @CustomerID",
CustomerID: "ALFKI");
foreach (dynamic order in customerOrders)
{
Console.WriteLine("OrderID: {0}, OrderDate: {1}", order.OrderID, order.OrderDate);
}
//调用存储过程
IEnumerable<dynamic> orders = command.CustOrdersOrders(CustomerID: "ALFKI");
foreach (dynamic order in orders)
{
Console.WriteLine("OrderID: {0}, OrderDate: {1}", order.OrderID, order.OrderDate);
}
}
要知道 ADO.NET 可不是.NET菜鸟,它看到 command("select Top 10 * from Orders"); 第一感觉认为吃了dynamic药的command有可能是委托类型,而看到后面的 command.CustOrdersOrders(CustomerID: "ALFKI"); 不得不否决了前面的看法。dynamic到底是什么东西?可以这样认为,dynamic什么东西都是;也可以认为,dynamic不是什么东西!
ADO.NET 知道任何.NET写的再高深的代码在reflector下都会现出原形,通过对 command 解剖,立刻明白原来自己跟《美丽心灵》的纳什教授一样纠缠于一种不存在的幻想不能自拔,reflector告诉我们:dynamic实际上是不存在的!
还是鲁迅叔叔说的好,世界上本没有dynamic,只是微软对委托封装得太牛了,也便有了dynamic。
结语
聪明的你知道command是怎么实现了吗?不妨先想想,然后展开下面的代码看看是否与你想的一致。
点此展开代码
注:本文存储过程部分参考了微型ORM.
public static class Extensions
{
public static DynamicCommand CreateDynamicCommand(this DbConnection connection)
{
return new DynamicCommand(connection);
}
}
/// <summary>
/// 动态Command
/// </summary>
public class DynamicCommand : DynamicObject, IDisposable
{
public DbConnection Connection { get; set; }
public DynamicCommand(DbConnection connection)
{
this.Connection = connection;
}
//实现SQL语句查询
public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
{
if (args.Length == 0) throw new ArgumentException("args must has value");
result = Execute(args[0].ToString(), CommandType.Text, binder.CallInfo.ArgumentNames, args.Skip(1).ToArray());
return true;
}
//实现存储过程
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
if (binder.CallInfo.ArgumentNames.Count != binder.CallInfo.ArgumentCount)
{
throw new ArgumentException("All parameters must be named");
}
result = Execute(binder.Name, CommandType.StoredProcedure, binder.CallInfo.ArgumentNames, args);
return true;
}
/// <summary>
/// 执行SQL查询
/// </summary>
/// <param name="commandText"></param>
/// <param name="commandType"></param>
/// <param name="names"></param>
/// <param name="args"></param>
/// <returns></returns>
private object Execute(string commandText, CommandType commandType, IEnumerable<string> names, object[] args)
{
bool manageConnectionLifespan = (this.Connection.State == ConnectionState.Closed);
if (manageConnectionLifespan) this.Connection.Open();
try
{
using (var cmd = this.Connection.CreateCommand())
{
cmd.CommandType = commandType;
cmd.CommandText = commandText;
for (int i = 0; i < args.Length; i++)
{
DbParameter param = cmd.CreateParameter();
param.ParameterName = "@" + names.ElementAt(i);
param.Value = args[i] == null ? DBNull.Value : args[i];
cmd.Parameters.Add(param);
}
return ExecuteList(cmd);
}
}
finally
{
if (manageConnectionLifespan)
{
this.Connection.Close();
}
}
}
/// <summary>
/// 执行SQL命令,返回查询结果列表
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
private static IEnumerable<dynamic> ExecuteList(DbCommand command)
{
List<DynamicEntity> resultList = new List<DynamicEntity>();
using (DbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
DynamicEntity entity = new DynamicEntity();
for (int i = 0; i < reader.FieldCount; i++)
{
entity.SetMember(reader.GetName(i), reader.GetValue(i));
}
resultList.Add(entity);
}
}
return resultList;
}
}
/// <summary>
/// 动态实体
/// </summary>
internal class DynamicEntity : DynamicObject
{
/// <summary>
/// 属性和值的字典表
/// </summary>
private Dictionary<string, object> values = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (values.ContainsKey(binder.Name))
{
result = values[binder.Name];
}
else
{
throw new System.MissingMemberException("The property " + binder.Name + " does not exist");
}
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
SetMember(binder.Name, value);
return true;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return values.Keys;
}
internal void SetMember(string propertyName, object value)
{
if (object.ReferenceEquals(value, DBNull.Value))
{
values[propertyName] = null;
}
else
{
values[propertyName] = value;
}
}
}

评论: 13 查看评论 发表评论
百度期待您的加盟
最新新闻:
· 微软不为外界所知的十件趣事(2010-07-18 22:58)
· 中国第2季搜索引擎市场规模达26亿 百度破70%(2010-07-18 22:54)
· Facebook用户数下周达5亿 邀请用户共享故事(2010-07-18 22:49)
· 开源的可视化编辑器 KindEditor 3.5.1 发布(2010-07-18 22:35)
· WordPress 陷入开源‘边界’之争(2010-07-18 17:47)
编辑推荐:揭秘Facebook背后的那些软件
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
posted @ 2010-07-18 23:35 Lixy 阅读(42) 评论(0)
编辑
偏头痛俗称偏头风。西医称“血管性头痛”。患者头部一侧或双侧胀痛,呈搏动或持续性频繁发 作,主要是由于颅内动脉收缩、扩张引起,多见于女性。采用食物治疗,有显著疗效,下面介绍几则:
1.热水泡双手:洁净热水一盆,把双手浸入。水量以浸过手腕为宜,并不间断地加些热水,以保持 水温。浸泡半小时后,痛感可减轻,甚至完全消失。
2.葱姜泥敷痛处:鲜葱3条,姜皮半酒杯,酒槽1杯,共捣拌匀,敷于痛处。
3.辣椒树蔸煎水:辣椒树蔸十个,洗净,水煎加糖服。
4.白萝卜汁滴鼻:鲜白萝卜一个,捣烂挤汁,滴鼻。在滴液中也可溶入冰片1.5克再用。滴后应保 待20分钟内汁 不外流, 1日2次。
5.服丝、苦瓜藤:丝瓜藤、苦瓜藤炒枯碾末, 每次用开水送服10~12克。
6.服“中药”小方:甘菊花、石膏、川芎各10克,研末,每服3克,清茶送下。
posted @ 2010-05-27 20:41 Lixy 阅读(33) 评论(0)
编辑
1、工作是为了让生活过得更好,如果你的工作已经让你感觉到影响了你的生活质量,夜不能寐,食不知味,让你心情低迷,虽然说人要知难而上,但人生苦短,无论性别,统共就这么几年好日子,如果努力了还没什么改变,又何必和自己为难呢,想开点,放手算了。要拿得起放得下,不然你会被自己不放手的东西压挎了。
2、把人看得复杂一点,事情看得简单一点,事情都是人做出来的,看清了人,他做什么事情你都不会感到意外。也不会重复的吃同样的亏。
3、除非你一无是处不值得说,否则你做的再好也一样有人在你背后说你是非。做好99件事1件没做好你就可能被骂得狗血喷头。就象足球后卫一样,前锋进一个球就可能名扬天下,后卫防了99个球漏了一个就会被骂死。所以不要太在意别人说你什么,关键你自己判断下自己做的到底对不对,如果你觉得对了,那就OK了。适当借鉴别人的意见,如果全盘接收,你会无所适从不知道怎么做才对。
4、任何时候保持风度,有理说理,有事说事。不管你在什么位置,对任何人,哪怕是做卫生的阿姨。
5、学会装装糊涂,谁都有心情不好,抱怨发泄的时候。听到闲话了,只要不是当着你面说的,就当耳边风过去,没什么大不了的。
6、办公室里嘴巴严一点好,少说多做。别以为这样会吃亏,你可能会吃小亏,但不会倒大霉。
7、如果你确实有很多心眼可以耍,当然可以用。长袖善舞的人在这个社会确实很吃得开。但如果你没有那么聪明,那还是老实点比较好。否则碰上比你更精明的,你可能第一个吃大亏。
8、保持端正的心态。不要和别人比,只和你自己比,我现在的待遇和情况是不是让我满意,而不是谁谁比我多,谁谁比我职位高,这样比下去你会越来越不快乐。
9、学会感恩的面对一切,不是你付出的就一定有回报。没有,当做是正常;有了,当做是上天的恩赐。这样你才会快乐。
10、不要用别人的错误惩罚自己。
11、不要因为你不适合做的工作而怀疑你的工作能力。
12、最后,要懂得善待自己。时刻享受人生。除非你是工作狂,否则——除了工作,你的生活里总是还有点别的,比如友谊,家庭,工作不会跟你一辈子,但有些东西是你一辈子都需要的。
posted @ 2010-05-27 20:41 Lixy 阅读(63) 评论(0)
编辑
1、起床后锻炼5分钟,不仅为身体充电,而且能加倍燃烧卡路里。很多人误认为晨练必须5点钟爬起来跑上几公里,其实是不必要,也不太现实的。你只消花5分钟, 做做俯卧撑和跳跃运动,使心率加快,就能达到理想的效果;要么对着镜子冲拳100下,感受那种能量积蓄的过程。
2、养成喝水习惯
处于缺水状态的你,会时常感觉衰惫。清早起来先喝一杯水,做一下内清洁,也为五脏六腑加些“润滑剂”;每天至少喝进去一升水,不过也不是多多益善。
3、讲究吃早餐
美 国有研究发现,不吃早餐的人身高体重比(BMI)偏高,也就是体重超标,还爱犯困,做事无精打采;讲究吃早餐的人则精力充沛得多,身形也相对匀称。最营养 健康的西式早餐是:两片全麦面包、一块熏三文鱼和一个西红柿。全麦面包含有丰富的碳水化合物和纤维;西红柿的番茄红素有利于骨骼的生长和保健,并且对前列 腺疾病的预防很有好处;三文鱼中丰富的omega-3脂肪酸和蛋白质对身体更加有益。
4、十点加餐
即使早餐吃得不错,到上午十点半,前一天储存的糖原也差不多用没了。你要想在一天剩下的时间仍像刚充完电,这时就必须加加餐。一块巧克力,或者一根能量棒、几块饼干,补充能量以外,还能有效避免午餐暴饮暴食。
5、午后喝咖啡
午餐后,身体的睡眠因子(一种能引发睡眠的分子)成分增多,是最容易犯困的时候,此时喝一小杯咖啡效果最好。当然喝茶也行,随你喜欢!别忘了睡前4小时内不要喝咖啡,免得过于兴奋睡不着。
6、多倾诉多纾解
性格也能调节疲惫。荷兰的一项研究表明,在工作中内向、害羞的人更容易觉得累,而外向的人精力更足,这是因为爱跟人交谈的人善于发现乐趣,把自己的烦恼、压力及倒霉事一股脑说出来,就不会觉得累和无聊,相反地,喜欢安静、独处、不爱社交的人缺乏这种纾解压力的渠道,时间长了,必然感觉不堪重负。
7、坐有坐相
坐姿不良,走路踢里踏拉,耸肩腆肚,这些通常是你能量已耗干的表现。在办公室一坐就是七八个小时,如果不能保持正确的姿势,反而会觉得更疲劳。不管是站还是坐着,应当收腹立腰,放松双肩,脖子有稍稍伸展的感觉。
8、张驰结合
工作中碰到难题,一时半会儿又没法解决,不如稍事休息,如去倒杯茶,换换脑筋,然后接着干。累得快透不过气来时,深吸一口气(数3下),然后呼出来(数6下);或者翻翻体育杂志,上网浏览娱乐八卦,找谁聊几句,说不定灵感在不经意间就来了。
9、站起来接电话
站着打电话借机舒展舒展筋骨,一边深呼吸,使富含氧气的血液流进大脑。这个简单的变化能让你几个小时都精两倍旺。
10、边沐浴边唱歌
淋浴时大声唱歌促进身体释放内啡呔,从而产生一种快乐与幸福的感觉,减轻压力。你越是心情不好的时候,越要唱出来,至于好不好听,跑没跑调,你管它呢!
11、交乐观的朋友
乐观、精力旺的朋友或同事人见人爱,他们积极的情绪总能感染周围的人。不仅要和聪明有才华的人交往,更要和那些充满热情,积极向上的人交朋友;跟一个悲观、喜欢抱怨的人一起呆上30分钟,你的能量就会被间接耗尽
12、大事化小
一口气吃不成胖子!不要总想着把某项大工程一气做完,结果自己累得趴下了。不妨把大工程拆成若干个小工程,一样一样地做,时不时休息一下,这样,既保持体力,又能提高工作效率,最终还能加快工作进度。
13、锻炼背部
你有没发现“背多分”型的男人往往受到殊遇,不仅如此,强壮的背部能让你工作起来比别人更轻松,不觉得太累。锻炼背部最有效的方法是用划桨器,注意姿势要正确;脚放平,膝盖微曲,双桨恰到好处地停在胸部。
14、打坐
早晨睡眼惺松,先不忙爬起来,舒舒服服地坐在床上坐着,挺直后背,闭上双眼,快速地用鼻子呼气和吸气,嘴巴微闭。(这个胸部练习应当像拉风箱一样,快速而机械地进行)
15、每天运动
哪怕你再忙,也要坚持锻炼,或跑步或键步走或游泳。你要是对自己体力过于自信,以为年轻就是本钱,不会那么轻易倒下,有人也许会跟你急。
16、午睡20分钟
20分钟左右的小憩是最理想的,它其实跟午睡一小时的作用没什么两样。一个小时对大多数人来说有点长了,睡得太沉,晚上可能睡不好。
17、补铁
如果你体内铁的储存太低,身体就不能制造血液中运载氧气的血红蛋白,人就容易觉得累。最好的补铁办法是通过饮食,采用食物疗法:含铁质丰富发热有动物肝脏、肾脏;其次是瘦肉、蛋黄、鸡、鱼、虾和豆类。
18、开车多吃纤维食物
男人很少吃零食,你可以在车里放些花生和葡萄干,这些东西含有大量的钾,你的身体需要钾将血液中的糖转化为能量;坚果也不错,它富含碳酸镁,缺乏碳酸镁会使身体产生大量乳酸,而乳酸易使人产生疲劳感。
19、芳香疗法
放些香料在家里,尤其是迷迭香、薄荷和姜,可以提神醒脑,增强记忆力,并且能治疗头痛偏头痛。
20、多看喜剧
笑一笑,十年少。笑能锻炼面部肌肉,改变你的面部循环,从而提高注意力。英国科学家近日公布的研究表明,尽管快乐不像俗语形容的那样能挽留青春,但每天保持愉悦心情的人确实更健康,罹患心血管病、糖尿病的风险更低。
21、提前1小时上床
多睡60分钟的提神功效等于喝两杯咖啡。这是指你每天早睡一小时,而不是周末拼命睡懒觉。否则生物钟被打乱,总感觉晕乎乎的。
22、和阳光玩游戏
美国马萨诸塞大学的研究表明,愤怒和敌对的情绪在冬天比较多,而夏天比较少。晒太阳能提高大脑血清素的含量,改善心情,为身体充电。不妨争取一切能晒太阳的出差或旅行机会。
23、控制酒量
酒精让你产生蒙蒙睡意,但是睡前喝酒反而会因兴奋影响睡眠,虽然闭着眼,眼球却在不停地转。你得牢记睡前两小时不喝酒,晚餐啤酒最多只喝一两杯。
24、调整健身时间
一项研究发现,那些健身族下班后去健身,浑身酸酸地,回家洗个澡睡个好觉,起来后犹如获得新生,无独有偶,美国芝加哥大学的学者认为,晚上锻炼能增加XXXXX素的水平,这对能量的新陈代谢至关重要。
25、睡沙发
假如你和爱人吵架,你不得不睡沙发,你不用内疚或怎么样。知道吗,偶尔睡睡沙发对治疗失眠有奇效!很多人都说失眠跟自家的卧室有关,美国的一项调查发现,72%的男人在沙发上睡得不错,只有27%的人说在老婆或女友身边睡的还可以。
posted @ 2010-05-27 20:41 Lixy 阅读(39) 评论(0)
编辑
赞美别人,仿佛用一支火把照亮别人的生活,也照亮自己的心田,有助于发扬被赞美者的美德和推动彼此友谊健康地发展,还可以消除人际间的龃龉和怨恨。赞美是一件好事,但绝不是一件易事。赞美别人时如不审时度势,不掌握一定的赞美技巧,即使你是真诚的,也会变好事为坏事。所以,开口前我们一定要掌握以下技巧。
因人而异
人的素质有高低之分,年龄有长幼之别,因人而异,突出个性,有特点的赞美比一般化的赞美能收到更好的效果。老年人总希望别人不忘记他“想当年”的业绩与雄风,同其交谈时,可多称赞他引为自豪的过去;对年轻人不妨语气稍为夸张地赞扬他的创造才能和开拓精神,并举出几点实例证明他的确能够前程似锦;对于经商的人,可称赞他头脑灵活,生财有道;对于有地位的干部,可称赞他为国为民,廉洁清正;对于知识分子,可称赞他知识渊博、宁静淡泊……当然这一切要依据事实,切不可虚夸。
情真意切
虽然人都喜欢听赞美的话,但并非任何赞美都能使对方高兴。能引起对方好感的只能是那些基于事实、发自内心的赞美。相反,你若无根无据、虚情假意地赞美别人,他不仅会感到莫名其妙,更会觉得你油嘴滑舌、诡诈虚伪。例如,当你见到一位其貌不扬的小姐,却偏要对她说:“你真是美极了。”对方立刻就会认定你所说的是虚伪之至的违心之言。但如果你着眼于她的服饰、谈吐、举止,发现她这些方面的出众之处并真诚地赞美,她一定会高兴地接受。真诚的赞美不但会使被赞美者产生心理上的愉悦,还可以使你经常发现别人的优点,从而使自己对人生持有乐观、欣赏的态度。
详实具体
在日常生活中,人们有非常显著成绩的时侯并不多见。因此,交往中应从具体的事件入手,善于发现别人哪怕是最微小的长处,并不失时机地予以赞美。赞美用语愈详实具体,说明你对对方愈了解,对他的长处和成绩愈看重。让对方感到你的真挚、亲切和可信,你们之间的人际距离就会越来越近。如果你只是含糊其辞地赞美对方,说一些“你工作得非常出色”或者“你是一位卓越的领导”等空泛飘浮的话语,不能引起对方的猜度,甚至产生不必要的误解和信任危机。
合乎时宜
赞美的效果在于相机行事、适可而止,真正做到“美酒饮到微醉后,好花看到半开时”。
当别人计划做一件有意义的事时,开头的赞扬能激励他下决心做出成绩,中间的赞扬有益于对方再接再厉,结尾的赞扬则可以肯定成绩,指出进一步的努力方向,从而达到“赞扬一个,激励一批”的效果。
雪中送炭
俗话说:“患难风真情。”最需要赞美的不是那些早已功成名就的人,而是那些因被埋没而产生自卑感或身处逆境的人。他们平时很难听一声赞美的话语,一旦被人当众真诚地赞美,便有可能振作精神,大展宏图。因此,最有实效的赞美不是“锦上添花”,而是“雪中送炭”。
此外,赞美并不一定总用一些固定的词语,见人便说“好……”。有时,投以赞许的目光、做一个夸奖的手势、送一个友好的微笑也能收到意想不到的效果。
当我们目睹一个经常赞扬子女的母亲是如何创造出一个完满快乐的家庭、一个经常赞扬学生的老师是如何使一个班集体团结友爱天天向上、一个经常赞扬下属的领导者是如何把他的机构管理成和谐向上的集体时,我们也许就会由衷地接受和学会人际间充满真诚和善意的赞美。
posted @ 2010-05-27 20:41 Lixy 阅读(39) 评论(0)
编辑
如今在网上,美女更容易寂寞与忧伤,己成共识。那么这究竟是怎样造成的呢,我想除了少数美女过于自恋过于封闭自己等原因之外,始终没有遇到有品位的心仪之人也是其重要原因之一,那么什么样的男人才称得上有品位呢?我想最起码以下几点恐怕是缺一不可。
作为优秀的男人,你首先要具善心够真诚。
这是一个品位之人的先决而必备的基础与条件。男女相遇相谈,不欺不诈,坦诚相待,有忙帮忙,无忙祝愿,行儒雅之风范,弃小人之狭隘。人生在世,烦恼己然够多,如果彼此相处再玩上几手互相猜疑尔你我诈之事,弄得大家都烦烦的,实属没那必要。合并同类项,谈得来则聚,不同类不同道者也应相敬如宾,互不干扰,各自相安。若离开了善心与真诚,即使你再风度再品位,也如高楼没了基础,大河没了源头,而相反,即使你各方面稍逊些,但有了这一条,也会适当的弥补缺陷,讨个美女的慢慢喜欢,图到个友情的长久,直至洞房。
其次你要有丰富的涵养。
涵养来自于书本、经历与天慧。生在一个有品位的家庭,一般情况下多数己自然具备了优良品质,不过没有摊上这种家室的也不怕,上上大学,啃啃书本,生活中多多磨练,只要人心向善,刻苦留心肯学,一样可以丰富自已,培养出自己艺术的高尚的看法与品位,修练成果。生活中应做到宁人负我,我不负人。世界上真正意义上的坏人小人毕竟是少数,而一些人做出坏人小人之事,必有它难言的前因后果,能容则容,难容则弃,绝不以怨还怨,以恶报恶(当然违法与实在过份者除外)。
再者你要学会尊重别人。
虽然尊重他人也是涵养中的一部分,但此单列,只因此项十分重要。其实世间真正的大事仇事过不去的事并不多,婚前婚后经常遇到的或最后闹大了的,其实都是些鸡毛蒜皮的小事,但究其原因为何有的事最后会弄成那样?其实都是互相之间缺少信任与尊重造成的。夫妻间熟透了,脾气任发,长脸任拉;婚前马拉松式的恋爱太久彼此太熟了,啥话都说,想做就做;往往忽略了别人的感受。殊不知,就是再好的关系,也有个互相尊重的问题。当然我们反对虚伪,但从心底里发出的为别人着想些的真诚的尊重,却是万万不可忽略的。“你敬我一尺,我敬你一仗”,万事顺矣安矣。
其四你要懂幽默识情调。
有幽默感的男人,可以说,己进入了品位之人中的一个较高境界,一个哪怕文化水平再高,各方面再出色的人,一旦少了幽默感,便徒减情趣,只能令人尊重,而绝难讨人喜欢,品位自然也就大打折扣。虽然受天性本性制约,并非人人都能幽上几默,但心有灵犀的幽默感应还是应当具备与培养的。难说的话,难处理的事,意想不到的峰芒对峙的尴尬脸红的时候,来上几句幽默,苦笑嘻笑中凡事化解,实乃品位之人区别于他人的高级之处。
其五你要注意言行仪表。
这看起来象外在东西,其实也是一个人内在的反映。什么样的人穿什么样的衣服。言行与衣着也是一个人有无品位的重要反映。当然我并不是说只有名牌了才品位,但款式颜色整洁与其上下搭配,也都无声中说出了你个人的品位与修养。以貌取人固然不对,但当一个人光着脚丫上奔驰车的时候,你也不能说那人有品位,他充其量只是有钱而己,而且是一个不懂得尊重别人的有钱人,因为仪表穿着并不完全只是为了自已,还应该多多少少的负点女友、市容与他人眼球的责任。
最后,你自己也得有个好的心境与状态。
良好的精神状更能发挥与体现你的高尚品位,当然深沉的忧郁的眼神也是一种品位的表现,但它对别人心境的影响以及对自已身体的健康来说,还是没有阳光点的益处多些。再者美女们己够寂寞与忧伤了,你再来个一加一等于二,那还要你干啥。
缺少以上要素者,必定很难让人服气为有品位之男人,最多充其量为:有点品位罢了,那么你若想讨美女的最终喜爱,那就得象博客上常说的:“加油”才行了。
posted @ 2010-05-27 20:41 Lixy 阅读(43) 评论(0)
编辑
为什么铜钱是内方外圆?这就是中国辩证哲学的集中体现,做事要方,做人要圆。
人活在世上,无非是面对两大世界,身外的大千世界和自己的内心世界。人,一辈子无非是两件事——做事和做人。多少人一辈子都在哀叹做人难,难做人。
一:先说方,做事要方,便是说做事就要遵循规矩,遵循法则。人常说的“没有规矩不成方圆”、“有所不为才可有所为”,就是“方”这个道理。也就是做官绝对要奉守清廉的原则。为商要做到一个“诚”字。做学问信奉耳朵是一个“实”字。
二:做人要圆。这个圆绝对不是圆滑世故,更不是平庸无能,这种圆是圆通,是一种宽厚、通融,是大智若愚,是与人为善,心智的高度健全和成熟。不因洞察别人的弱点而咄咄逼人,不因自己比别人高明而盛气凌人,任何时候也不会因坚持自己的个性和主张让人感到压迫和惧怕,任何时候你也不会随波逐流,要潜移默化别人而又绝不会让人感到是强加于人的,这就需要极高的素质,很高的悟性和技巧,这是做人的高尚境界。
如是另样,凡内心孤独的人必喜虚张声势;内心弱小的人必好狐假虎威;心中有鬼的人必爱玩弄伎俩;没有自信的人必会尖酸刻薄,试问这样的做人又从何谈圆?
当然也不乏有人为了某种利益和目的不惜敛声屏息,不惜八面讨好,不惜左右逢“圆”。但这种圆和那种圆绝对有本质的区别,这种“圆”的后面是虚伪和丑恶。
做人圆,那也会有牺牲。有时候要牺牲小我,有时候要忍辱负重,忍气吞声;还有更多的时候要承受屈辱、误解,甚至来至亲至爱的人的伤害。
能做到“方”“圆”的,同时却没有感到那是一种牺牲、痛苦的才是大成功、大境界;能为了“方”“圆”去承受牺牲的是小成功、小境界;不愿牺牲也做不到“方”“圆”的是不成功。如果截然相反,做事是圆,只要有利,不择手段、什么都敢干;做人是方,刁钻古怪,锋芒毕露,心狠手辣的话,那这个人一定会糟糕透顶,不能容于天下了……
posted @ 2010-05-27 20:41 Lixy 阅读(24) 评论(0)
编辑
曹操(155-220):即魏武帝。三国时政治家、军事家、诗人。字孟德,小名阿瞒,沛国谯县(今安徽亳州市)人。初举孝廉,任洛阳北部尉,迁顿丘令。后在镇压黄巾起义和讨伐懂卓的战争中,逐步扩充军事力量。初平三年(公元192年),为衮州牧,分化、诱降青州黄巾军的一部分,编为“青州兵”。建安元年(196年),迎献帝都许(今河南许昌)。从此用其名义发号施令,先后削平吕布等割据势力。官渡之战大破河北割据势力袁绍后,逐渐统一了中国北部。建安十三年,进位为丞相,率军南下,被孙权和刘备的联军击败于赤壁。封魏王。子曹丕称帝,追尊为武帝。他在北方屯田,兴修水利,解决了军粮缺乏的问题,对农业生产的恢复有一定作用;用人唯才,罗致地主阶级中下层人物,抑制豪强,加强集权。所统治的地区社会经济得到恢复和发展。精兵法,著《孙子略解》、《兵书接要》等书。善诗歌,《蒿里行》、《观沧海》等篇,抒发自己的政治抱负,并反映汉末人民的苦难生活,气魄雄伟,慷慨悲凉。散文亦清峻整洁。著作有《魏武帝集》,已佚,有明人辑本。今有整理排印本《曹操集》。(《辞海》1989年版)
太祖御军三十余年,手不舍书。书则讲武策,夜则思经传。登高必赋,及造新诗,被之管弦,皆成乐章。(《魏书》)
上雅好诗书文籍,虽在军旅,手不释卷。每每定省,从容常言:人少好学,则思专,长则善忘;长大而能勤学者,唯吾与袁伯业耳。(《典论·自叙》,袁伯业名遗,袁绍从兄。)
曹公古直,甚有悲凉之句。(钟嵘《诗品》)
气出唱(三首)
驾六龙,乘风而行。
行四海,路下之八邦。
历登高山临溪谷,乘云而行。
行四海外,东到泰山。
仙人玉女,下来翱游。
骖驾六龙饮玉浆。
河水尽,不东流。
解愁腹,饮玉浆。
奉持行,东到蓬莱山,上至天之门。
玉阙下,引见得入,
赤松相对,四面顾望,视正[火昆]煌。
开玉心正兴,其气百道至。
传告无穷闭其口,但当爱气寿万年。
东到海,与天连。
神仙之道,出窈入冥,常当专之。
心恬澹,无所[忄曷]。
欲闭门坐自守,天与期气。
愿得神之人,乘驾云车,
骖驾白鹿,上到天之门,来赐神之药。
跪受之,敬神齐。
当如此,道自来。
其二
华阴山,自以为大。
高百丈,浮云为之盖。
仙人欲来,出随风,列之雨。
吹我洞箫,鼓瑟琴,何□□(“门”内有“言”,音“银”)!
酒与歌戏,今日相乐诚为乐。
玉女起,起舞移数时。
鼓吹一何嘈嘈。
从西北来时,仙道多驾烟,
乘云驾龙,郁何[艹务][艹务]。
遨游八极,乃到昆仑之山,
西王母侧,神仙金止玉亭。
来者为谁?赤松王乔,乃德旋之门。
乐共饮食到黄昏。
多驾合坐,万岁长,宜子孙。
其三
游君山,甚为真。
崔嵬砟硌,尔自为神。
乃到王母台,金阶玉为堂,芝草生殿旁。
东西厢,客满堂。
主人当行觞,坐者长寿遽何央。
长乐甫始宜孙子。
常愿主人增年,与天相守。
精列
厥初生,造划之陶物,莫不有终期。
莫不有终期。
圣贤不能免,何为怀此忧?
愿螭龙之驾,思想昆仑居。
思想昆仑居。
见期于迂怪,志意在蓬莱。
志意在蓬莱。
周礼圣徂落,会稽以坟丘。
会稽以坟丘。
陶陶谁能度?君子以弗忧。
年之暮奈何,时过时来微。
度关山
天地间,人为贵。
立君牧民,为之轨则。
车辙马迹,经纬四极。
黜陟幽明,黎庶繁息。
於铄贤圣,总统邦域。
封建五爵,井田刑狱。
有燔丹书,无普赦赎。
皋陶甫侯,何有失职?
嗟哉后世,改制易律。
劳民为君,役赋其力。
舜漆食器,畔者十国,
不及唐尧,采椽不斫。
世叹伯夷,欲以厉俗。
侈恶之大,俭为共德。
许由推让,岂有讼曲?
兼爱尚同,疏者为戚。
薤露行
惟汉廿二世,所任诚不良。
沐猴而冠带,知小而谋疆。
犹豫不敢断,因狩执君王。
白虹为贯日,己亦先受殃。
贼臣持国柄,杀主灭宇京。
荡覆帝基业,宗庙以燔丧。
播越西迁移,号泣而且行。
瞻彼洛城郭,微子为哀伤。
对酒
对酒歌,太平时,吏不呼门。
王者贤且明,宰相股肱皆忠良。
咸礼让,民无所争讼。
三年耕有九年储,仓谷满盈。
斑白不负载。
雨泽如此,百谷用成。
却走马,以粪其土田。
爵公侯伯子男,咸爱其民,以黜陟幽明。
子养有若父与兄。
犯礼法,轻重随其刑。
路无拾遗之私。
囹圄空虚,冬节不断。
人耄耋,皆得以寿终。
恩德广及草木昆虫。
蒿里行
关东有义士,兴兵讨群凶。
初期会盟津,乃心在咸阳。
军合力不齐,踌躇而雁行。
势利使人争,嗣还自相戕。
淮南弟称号,刻玺於北方。
铠甲生虮虱,万姓以死亡。
白骨露於野,千里无鸡鸣。
生民百遗一,念之断人肠。
陌上桑
驾虹霓,乘赤云,登彼九疑历玉门。
济天汉,至昆仑,见西王母谒东君。
交赤松,及羡门,受要秘道爱精神。
食芝英,饮醴泉,柱杖桂枝佩秋兰。
绝人事,游浑元,若疾风游[炎欠]翩翩。
景未移,行数千,寿如南山不忘愆。
短歌行(二首)
对酒当歌,人生几何?
譬如朝露,去日苦多。
慨当以慷,忧思难忘。
何以解忧?唯有杜康。
青青子衿,悠悠我心。
但为君故,沈吟至今。
呦呦鹿鸣,食野之苹。
我有嘉宾,鼓瑟吹笙。
明明如月,何时可掇?
忧从中来,不可断绝。
越陌度阡,枉用相存。
契阔谈宴,心念旧恩。
月明星稀,乌鹊南飞,
绕树三匝,何枝可依?
山不厌高,海不厌深。
周公吐哺,天下归心。
其二
周西伯昌,怀此圣德。
三分天下,而有其二。
修奉贡献,臣节不隆。
崇侯谗之,是以拘系。
后见赦原,赐之斧钺,得使征伐。
为仲尼所称,达及德行,
犹奉事殷,论叙其美。
齐桓之功,为霸之首。
九合诸侯,一匡天下。
一匡天下,不以兵车。
正而不谲,其德传称。
孔子所叹,并称夷吾,民受其恩。
赐与庙胙,命无下拜。
小白不敢尔,天威在颜咫尺。
晋文亦霸,躬奉天王。
受赐圭瓒,[禾巨]鬯彤弓,
卢弓矢千,虎贲三百人。
威服诸侯,师之所尊。
八方闻之,名亚齐桓。
河阳之会,诈称周王,是其名纷葩。
秋胡行(二首)
晨上散关山,此道当何难!
晨上散关山,此道当何难!
牛顿不起,车堕谷间。
坐磐石之上,弹五弦之琴。
作为清角韵,意中迷烦。
歌以言志,晨上散关山。
有何三老公,卒来在我旁?
有何三老公,卒来在我旁?
负□(“拚”的“厶”改为“合”,音“演”)被裘,似非恒人。
谓卿云何困苦以自怨,徨徨所欲,来到此间?
歌以言志,有何三老公?
我居昆仑山,所谓者真人。
我居昆仑山,所谓者真人。
道深有可得。
名山历观,遨游八极,枕石漱流饮泉。
沈吟不决,遂上升天。
歌以言志,我居昆仑山。
去去不可追,长恨相牵攀。
去去不可追,长恨相牵攀。
夜夜安得寐,惆怅以自怜。
正而不谲,辞赋依因。
经传所过,西来所传。
歌以言志,去去不可追。
其二
愿登泰华山,神人共远游。
愿登泰华山,神人共远游。
经历昆仑山,到蓬莱。
飘遥八极,与神人俱。
思得神药,万岁为期。
歌以言志,愿登泰华山。
天地何长久!人道居之短。
天地何长久!人道居之短。
世言伯阳,殊不知老;
赤松王乔,亦云得道。
得之未闻,庶以寿考。
歌以言志,天地何长久!
明明日月光,何所不光昭!
明明日月光,何所不光昭!
二仪合圣化,贵者独人不?
万国率土,莫非王臣。
仁义为名,礼乐为荣。
歌以言志,明明日月关。
四时更逝去,昼夜以成岁。
四时更逝去,昼夜以成岁。
大人先天而天弗违。
不戚年往,忧世不治。
存亡有命,虑之为蚩。
歌以言志,四时更逝去。
戚戚欲何念!欢笑意所之。
戚戚欲何念!欢笑意所之。
壮盛智愚,殊不再来。
爱时进趣,将以惠谁?
泛泛放逸,亦同何为!
歌以言志,戚戚欲何念!
善哉行(三首)
古公□(“擅”去提手旁,音“胆”)甫,积德垂仁。
思弘一道,哲王于豳。
太伯仲雍,王德之仁。
行施百世,断发文身。
伯夷叔齐,古之遗贤。
让国不用,饿殂首山。
智哉山甫,相彼宣王。
何用杜伯,累我圣贤。
齐桓之霸,赖得仲父。
后任竖刁,虫流出户。
晏子平仲,积德兼仁。
与世沈德,未必思命。
仲尼之世,主国为君。
随制饮酒,扬波使官。
其二
自惜身薄祜,夙贱罹孤苦。
既无三徙教,不闻过庭语。
其穷如抽裂,自以思所怙。
虽怀一介志,是时其能与!
守穷者贫贱,惋叹泪如雨。
泣涕于悲夫,乞活安能睹?
我愿于天穷,琅邪倾侧左。
虽欲竭忠诚,欣公归其楚。
快人由为叹,抱情不得叙。
显行天教人,谁知莫不绪。
我愿何时随?此叹亦难处。
今我将何照于光曜?释衔不如雨。
其三
朝日乐相乐,酣饮不知醉。
悲弦激新声,长笛吹清气。
弦歌感人肠,四坐皆欢悦。
寥寥高堂上,凉风入我室。
持满如不盈,有德者能卒。
君子多苦心,所愁不但一。
慊慊下白屋,吐握不可失。
众宾饱满归,主人苦不悉。
比翼翔云汉,罗者安所羁?
冲静得自然,荣华何足为!
苦寒行
北上太行山,艰哉何巍巍!
羊肠坂诘屈,车轮为之摧。
树木何萧瑟,北风声正悲!
熊罴对我蹲,虎豹夹路啼。
溪谷少人民,雪落何霏霏!
延颈长叹息,远行多所怀。
我心何怫郁?思欲一东归。
水深桥梁绝,中路正徘徊。
迷惑失故路,薄暮无宿栖。
行行日已远,人马同时饥。
担囊行取薪,斧冰持作糜。
悲彼《东山》诗,悠悠令我哀。
(作于建安十一年)
步出夏门行 (五章)
艳
云行雨步,超越九江之皋。
临观异同,心意怀豫,不知当复何从?
经过至我碣石,心惆怅我东海。
(作于建安十二年春)
观沧海
东临碣石,以观沧海。
水何澹澹,山岛竦峙。
树木丛生,百草丰茂。
秋风萧瑟,洪波涌起。
日月之行,若出其中;
星汉灿烂,若出其里。
幸甚至哉!歌以咏志。
(作于建安十二年秋)
冬十月
孟冬十月,北风徘徊,
天气肃清,繁霜霏霏。
[昆鸟]鸡晨鸣,鸿雁南飞,
鸷鸟潜藏,熊罴窟栖。
钱□(博改金旁)停置,农收积场。
逆旅整设,以通贾商。
幸甚至哉!歌以咏志。
(作于建安十二年至十三年冬)
土不同
乡土不同,河朔隆冬。
流澌浮漂,舟船行难。
锥不入地,[艹丰][艹赖]深奥。
水竭不流,冰坚可蹈。
士隐者贫,勇侠轻非。
心常叹怨,戚戚多悲。
幸甚至哉!歌以咏志。
龟虽寿
神龟虽寿,猷有竟时。
腾蛇乘雾,终为土灰。
老骥伏枥,志在千里;
烈士暮年,壮心不已。
盈缩之期,不但在天;
养怡之福,可得永年。
幸甚至哉!歌以咏志。
却东西门行
鸿雁出塞北,乃在无人乡。
举翅万馀里,行止自成行。
冬节食南稻,春日复北翔。
田中有转蓬,随风远飘扬。
长与故根绝,万岁不相当。
奈何此征夫,安得驱四方!
戎马不解鞍,铠甲不离傍。
冉冉老将至,何时返故乡?
神龙藏深泉,猛兽步高冈。
狐死归首丘,故乡安可忘!
谣俗词
瓮中无斗储,发箧无尺缯。
友来从我贷,不知所以应。
董逃歌词
德行不亏缺,变故自难常。
郑康成行酒,伏地气绝;
郭景图命尽于园桑。
塘上行★
蒲生我池中,其叶何离离。
傍能行仁义,莫若妾自知。
众口铄黄金,使君生别离。
念君去我时,独愁常苦悲。
想见君颜色,感结伤心脾。
念君常苦悲,夜夜不能寐。
莫以豪贤故,弃捐素所爱?
莫以鱼肉贱,弃捐葱与薤?
莫以麻□(上台下木,音“喜”)贱,弃捐菅与蒯?
出亦复何苦,入亦复何愁。
边地多悲风,树木何修修!
从君致独乐,延年寿千秋。
★方按:此首不似魏武手笔,或题为曹丕或甄后所作,或曰古辞,姑录此备考。
posted @ 2010-05-27 20:41 Lixy 阅读(23) 评论(0)
编辑
一篇文章如果缺少了标点符号,连阅读都成问题,更不要说做学问了。做人是一门大学问,既然是做学问就离不开标点符号。
逗号:可贵之处在“不足”
逗号就像一只优美的蝌蚪,却又美中不足,圆中有缺,但其可贵之处就在于这个“不足”。人常常是知不足然后才求进取,因而,从某种意义上说逗号就是意犹未尽的生活意境,一种谦虚谨慎、永不满足的求知态度,更是积极向上的进取精神。
当今世界,突飞猛进的科技发展要求我们要勇做“半杯水”,常抱永无止境的求索态度,锐意进取。
句号:做事善始善终
句号其实就是一个放大了的圆,是圆满,是有始有终,更是善始善终。它蕴含着做每一项工作,都要有头有尾,不可半途而废的道理。
我们要养成经常“画句号”的习惯,也就是每做完一项工作,都要回顾一下,进行一番总结,看看哪些地方没有做好,哪些地方有待于进一步修正,哪些地方还可以做得更好。养成这种严谨的作风大有好处:一方面通过不断地总结,从中吸取教训、增长见识、积累经验和提高能力,从而使工作不断上台阶。另一方面,当你的“善始善终”成为一种习惯时,你严谨、稳重、可信的作风,自然而然地会在你的领导、同事和下属的脑海中留下深刻印象,这无疑是拥有了一笔宝贵的财富。
问号:智慧的代名词
像一只擅长吸收“营养”的耳朵,它是智慧的代名词。“问”和“答”组成了人与人之间交流的最基本形式。即使这每天张口就来的“问”字,它包含的学问也不浅。
某管理学教授在课堂上做了一个测验。他拿出一个广口瓶放在桌上,取出一堆拳头大小的石块,放进瓶子里,直到石块高出瓶口,他问“瓶子满了吗?”学生回答:“满了。”教授从桌下取出一桶砾石,倒了进去,并敲击瓶壁使砾石填满石块的间隙。“现在满了吗?”这一次学生们似乎明白了,“还没有”。教授又从桌下拿出一桶沙子,倒进瓶子,沙子填满了石块的间隙。教授说:“这个例子告诉我们,如果你不先把大石块放进瓶子里,那么你就再也无法把其他东西放进去了。什么是你们生命中的'大石块’呢?你们的信仰、学说、事业等。切记先去处理这些'大石块’。”
可见,同样的问题,从不同的侧面,不同的角度分析考虑,往往得到不同的答案。我们一定要勤问、善问,更重要的是会问。要启发式地问,引导式地问,循循善诱地问,要问得恰到好处。
感叹号:充满热情和激情
也有人把它叫做“感情号”。的确,它是最充满人情味的符号。包含着两层意思:一是对工作要有热情和激情;二是对人要用感情和真情。
对工作的热爱和关注程度,直接影响到工作的积极性和主动性。说穿了,如果没有干好工作的基本愿望和动力,即使工作完成了,也不可能十分圆满。
有的人认为做思想政治工作是一件严肃的事情,就应当板起面孔来说教。孰不知,只有动之以情、施之以爱,在感情上产生共鸣,才能达到晓之以理、导之以行,在工作中形成互动的效果。
posted @ 2010-05-27 20:41 Lixy 阅读(16) 评论(0)
编辑
有时,我们不得不惊奇:管理,这个复杂的题目竟然与日常的买菜、能否起到一幅好牌以及儿童的寓言有共通之处。
一寓、买菜的比喻
一位老板向我诉苦说,他的公司管理极为不善。我应约而往,到公司上下走动了一回,心中便有了底。
我问这位老板:“你到菜市场去买过菜吗?”
他愣了二下,答道:“是的。”
我继续问:“你是否注意到,卖菜人总是习惯于缺斤少两呢?”
他回答:“是的,是这样。”“那么,买菜人是否也习惯于讨价还价呢?”
“是的。”他回答。
“那么,”我笑着提醒他,“你是否也习惯于用买菜的方式来购买职工的生产力呢?”
他吃了一惊,瞪大眼睛望着我。
最后,我总结说:“一方面是你在工资单上跟职工动脑筋,另一方面是职工在工作效率或工作质量上跟你缺斤少两--也就是说,你和你的职工是同床异梦,这就是公司管理不善的病灶之所在啊!”
二寓、同花顺理论
接到 HH公司李总的电话之后,我犹豫了很久。李总是我的好友,自然不便推脱。但HH公司的现状确实很棘手,组织结构、管理制度、人力资源、市场营销……问题一大雄,我该从何入手呢?
因为与 HH公司接触过几次,对公司的情况有一定的了解,我知道公司决策层的做法竟是邓小平在改革之初说过的一句话:“摸着石头过河。”于是老总摸石头,员工们也摸石头,手忙脚乱却摸不着石头。所以,我提议必须首先改变操作层面上的混乱状态。
我拿出一叠扑克牌(牌面上有各种漂亮的图案),把在场的公司员工分成两组,请 A组每人从中选取自以为最好看的两张;请 B组每人选取两张红桃,并对点数作了明确的要求。最后,请两组人员把牌亮出来。于是,出现了下面的结果:
A组:黑桃2、方块 A、黑桃8、梅花 Q、红桃3……
B组:红桃 A、红桃 K、红桃 Q、红桃 J、红桃10……
“发现问题了吗?”我问李总。
李总仍然迷惑不解,要求我解释。
我说:“两组的结果是完全不同的,A组是一副杂牌,B组却是一手红桃同花顺。为什么会这样呢?这是因为,对于 A组我没有明确的指令,所以 A组的人都是按照各自不同的审美观念来选牌。我们不必评判他们的选择孰优孰劣,但很显然,他们每个人的做法都是一种个人行为。个人行为与个人行为混合在一起叫什么?叫'乌合之众。--再看看 B组,清一色的同花顺,这才是组织行为。”
这时,我注意到李总轻轻“喔”了一声。
我继续说:“你能拿一副杂牌去打败对手的同花顺吗?当然不能。所谓'世有三亡,以邪攻正者亡,以逆攻顺者亡,以乱攻治者亡。如果公司的管理现状不及时改变的话,怨我直言,恐怕会印证'以乱攻治者亡这句哲言。”
最后,我习惯性地来一段总结陈词:“现在公司处于A组状态,这不是员工的过错,而是决策层有问题。如果你想要得到一副同花顺,必须达到两个条件:第一,决策层一定要思路清晰;第二,要给员工发出明确的指令。否则,员工们要么茫然失措,要么自行其是,就像刚才的游戏一样,形成一手杂牌。”
三寓、鸽子与广告牌
这个故事属于企业战略管理的范畴。
1995年,一位厂长考虑到厂里效益不景气,决定带领全厂职工全员皆兵地搞传销,通过关系链七弯八拐地找到我,希望我做他的下线。
我问:“你们厂里是生产铝制品的,怎么想到要整体去搞传销呢?”
他说:“厂里效益不好,很多工人都几个月领不到工资,我作为厂长;总得让大家都有口饭吃呀。”
我问:“你认为传销能解决这个问题吗?”
他一副神往的态度:“(听说)传销是最后一班致富快车,我们当然得抓住这个难得的机会。”
于是,我给他讲了一个故事:一只口渴的鸽子,看到广告牌上画着一杯清水,它不知道这只是一幅广告牌,便高兴地振翅扑过去,狠狠地撞在广告牌上,结果翅膀撞成重伤,摔在地上动弹不得,刚好一只狼从此经过,把它吃掉了。
厂长听完故事,莫名其妙地笑了一笑。
去年岁末,我与厂长通了一次电话。他说:“我就是那只撞成重伤的鸽子。只要来一只狼,你的那个故事就被完整地演绎了一回。”
我同情地问:“你现在该怎么办呢?”
他叹道:“有什么办法?只有无可奈何地等待最后的结局。”
可能这个厂长的故事比较特殊一点。但我知道,类似的故事在中国企业中层出不穷。
四寓、纯洁的自信心
我们应该鼓励员工们去追求成功的热情。但是,有一点必须注意:只有纯洁的自信心才能生发出健康的热情。
我们知道,自信心常能帮助人们达到成功。然而,如果一位员工的自信心只是为了个人的贪婪,那么他将对同事和公司构成潜在的危害。在不健康的热情的驱使下,很可能会不计后果地胡作非为。有一则寓言是这样说的:
一个牧羊人为了扩张自己的事业,决定培养一只狼作帮手。于是,他每天训练狼如何捕捉小羊。他希望通过狼把邻近羊群中的小羊据为己有。
这只狼事先并没有经过野生训练,是人工抚养大的,所以胆子很小。为了鼓励它,牧羊人说:“你是一只狼呀,既然如此,那么你要相信自己能够变成一只最杰出的狼!”
这只狼果然变得很杰出,因为它把主人的羊也捕捉到了自己的肚子里。
最后的结局是这样的,一位猎人出于义愤击杀了这只狼,而牧羊人也从此沦为穷光蛋。
这个教训是深刻的,牧羊人成了害人害己的罪魁祸首。不要以为这则寓言与我们无关,事实上,很多企业在人力资源的开发和管理中,常常犯牧羊人的毛病。
posted @ 2010-05-27 20:41 Lixy 阅读(9) 评论(0)
编辑
烎读音:yín原义:光明。网络新义:在游戏中,意义衍生为“遇强则强,斗志昂扬,热血沸腾,你越厉害我越要找你挑战,希望在竞争或对抗中一比高下”。
槑 读音mei,古同“梅”。这个“槑”字由两个“呆”组成,于是在网络语言里被用来形容人很傻很天真。
囧读音jiǒng,古同“冏”,原指光明。在网络文化中,它的内小“八”字视为眉眼,“口”视为嘴。它的内涵就是:作为头,表达沉重的思想;作为脸,表达浪漫与激情;也常常表示郁闷的表情。
兲:跟常用来骂人的那种水生动物没有关系,没你想的那么复杂。这个字是“天”字的古体,也念“天”(tiān)。
氼:哈哈,这个字其实好记,人掉水底下了,当然就是溺水,这个字就是“溺”的意思,读音也一样:溺(ni)。
砳:这个字有点不好理解,石头跟石头相碰怎么会是“乐”(le)的声音呢?但这个字就是形容石头相撞的一个象声词,就这么念。
嘦:意思很好懂吧?把“只要”两个字快速连读,你就会很容易找到它正确的读音:叫(jiao)。
嫑:同上,你可以猜出它念biao(标的二声),意思就不用说了吧。
嘂:四张嘴同时叫,当然就是大声叫了。还念叫(jiao)。
圐圙:仔细看看这两个字:两个口分别框住了四方八面,意为“围起来的草场”,念枯略(kūlue),内蒙古方言中一般读作库伦(kūluan),“圐圙”一词现多用作地名。
玊:玉的点儿点得不是地方,当然就是有瑕疵的玉,念“俗”(su)。
孖:第一次看到这个字是手机的“孖机”,意思如同字形所示:双生子。用现在话说就是克隆。念妈(mā)。
砼:典型的生造字,人工石头——就是混凝土啦,是个建筑工程专用字。念同(tong)
posted @ 2010-05-27 20:41 Lixy 阅读(50) 评论(0)
编辑