11

他们的国家

 我:为什么我在自己的国家都过的这么郁闷,看阉割版的电影,上阉割版的互联网,玩阉割版的游戏,看太监版的电视,是不是接下来要阉割自己了?
大壮:错,这是他们的国家,还有,你早已被阉过了。
 
归类于:生活芝门 标签:他们的国家
08

激情7月

七月八号了,
今年过一半了,
状态越来越好了,
早上能按点上班了,
每天都能吃上早饭了,
吃完早饭能爬上八楼了,
见到同事也敢说早上好了,
敲起代码来也觉得有意思了,
头脑清醒上班不再想打瞌睡了,
每天能看会书开始吸收新知识了,
愿意出去玩玩不窝在家里做宅男了,
于是又开始策划如何成就我的人生了,
天天这般吃得好睡得香体重还能减减了,
生活如此美好,不觉又要TMD的去上班鸟。
 
归类于:生活芝门 标签:激情
26

实现批量数据迁移的托管级代码解决方案 - SqlBulkCopy

SqlBulkCopy是.Net2.0之后就提供的一个类,经实测能实现W/S的写入速度,应该算是挺高效的,不亚于SQL Server的命令行工具 bcp,但如果你的数据源和目标表在同一个SQL Server 实例中,建议你使用T-SQL语句INSERT ... SELECT来完成数据复制工作。

SqlBulkCopy的具体使用方法,我就不介绍了,不喜欢贴代码,反正非常简单,参考MSDN即可,支持的写入数据源是DataRow ,DataTable ,IDataReader ,所以只要是能生成上面这几种数据对象的数据源都可以。

写几条注意事项吧:
1. SqlBulkCopy的类定义是:publie sealed class SqlBulkCopy : IDisposable ,所以用的时候别忘了using或最后调用dispose.
2. 如果数据源和目标表的字段顺序不一致或少于目标表的字段数,必须要设置ColumnMappings,即使字段名称一样也不行。
3.如果需要时间较长,请设置BulkCopyTimeout,单位秒,默认是30秒,设置连接串上的Timeout对此无效。
4.如果想实时了解复制进度,可以订阅SqlRowsCopied事件,并设置NotifyAfter属性,NotifyAfter属性指定完成多少行通知一次。
5.支持事务,一种是SqlBulkCopy内部事务,通过在构造的时候指定SqlBulkCopyOptions.UseInternalTransaction选项即可,这个每完成一个Batch就会提交,失败的Batch不会影响已提交的。另一种就是连接级的事务,影响所有批次
6.设定BatchSize指定每批次提交行数,不设置默认为一次性提交
7.通过在构造函数中设置:SqlBulkCopyOptions.KeepIdentity ,可以保证Identity列值不变。同时设置多个选项,使用 | 运算符。
8.目标表仅限于 SQL Server tables.
 
归类于:数据库 标签:SqlBulkCopy 大数据批量迁移
23

生活挺有意思的,感谢互联网

今天把签名换成了这个标题,周末没怎么上网,所以早上上网看看了看最近发生的几件事,一个是CCAV教大家怎么选择关键词来搜索需要的信息,然后就是石首市的事件。

网上帖子说CCAV请的专家用boobs这个词在google浏览器中搜索,并将搜索结果通过google翻译转换成中文,于是乎,找到了想要找的东西,技艺之高超真是我等闲之辈所能了解的。
这个专家给我们的友情提示是:要想找到你想要的东西,不能使用中文关键词搜索,你至少要掌握一门外语,所以青少年们努力学习外语吧!
而CCAV给我们的友情提示是:你想搜索到你想要的东西,你不能用国内的搜索引擎,你必须用google啊,只有google能找的着,毕竟国内的是的intranet搜索,特别是某熊掌牌搜索引擎,搜索结果前三名基本上都来自于自家。
谢谢专家!谢谢CCAV!

石首市那件事我也不知道后来怎么样了,法医正在鉴定,希望不用等太久能看到大结局。
 
周五的时候和帅哥说年龄大了,当不了愤青了,只能当观众,结果今天就发现当观众的好处,这角色一换,生活立刻感觉有意思多了,终于对“人生如戏”这句话有了点领悟,之前可能也就停留在字面意思理解上。

生活真TMD的有趣,感谢互联网,能免费看大片,睡醒了接着看!
 
-------------------------------
Update 2009.6.25
石首一案结论是自杀,但家属可获赔22万元,石首市吸毒现象严重,不知道还有后续不。
 
归类于:生活芝门 标签:人生如戏
22

ASP.NET 页面指令 之 @OutputCache

缓存的重要性就不用再强调了,@OutputCache给我们提供了一种声明的方式(对应的还有编程的方式)来控制页面和用户控件的缓存策略,这是一种最简单直接的网站优化方式。

还是先来过一遍@OutpuCache所有的属性,共用11个属性,这个指令可以用于页面(.aspx)和用户控件(.ascx)
属性
Duration
页或用户控件进行缓存的时间,单位秒,可以在页面或控件上设置该属性来建立一个缓存的过期策略,该属性是必须的。
VaryByParam
分号分割的字符串列表,是否根据某个参数变化,和VaryByControl二者必须有一。如果不变化,可将值设置为none,否则设置为*,或者变化的参数名称(Get或Post的参数)。
VaryByControl
分号分割的字符串列表,只限于用户控件,串列表的值是服务器控件标识。
Location 缓存的位置,默认是Any,该属性仅限于.aspx文件,可选项是Any,Client,Downstream,Server,None,ServerAndClient
Shared 该属性仅限于.ascx文件,默认为false,用户控件是否可以由多个页面共享。
CacheProfile 你可以在web.config中配置一个缓存设置,这样以后就可以共用这个缓存设置,方便统一修改,不支持用户控件
NoStore 这个不是太清楚什么用,MSDN上说是决定是否对敏感信息辅助存储.
VaryByContentEncodings 同样也是逗号分隔的字符串列表,根据Accept-Encodeing Http头来决定是否缓存不同的版本。
VaryByHeader 根据Http headers来决定是否进行分版本存储,同样也是分号分隔的字符串列表
VaryByCustom 通过这个属性,你可以自定义怎么来缓存页面
SqlDependency 为当前缓存指定一个依赖项,当发生变动时从缓存区中删除掉当前页面或控件的缓存。
 
就是上面列的着11个属性,大多数时候,只需要DurationVaryByParam这两个属性就搞定了,比如:

<%@ OutputCache Duration="100" VaryByParam="none" %>

上面指令没有指定Location默认是客户端和服务器端都缓存,这个时候如果改变页面的QueryString会被忽略,直接从缓存中返回结果,所以在需要根据参数返回不同内容的页面千万不要这么设置,可以采用以下方式:

<%@ OutputCache Duration="100" VaryByParam="*"%>

上面关于Duration属性,说是必须的,其实也不然,当你不想用缓存是就不必写^_^,如下,禁用当前页面缓存:
<%@ OutputCache Location="None" %>
 
归类于:代码人生 标签:@OutputCache ASPNET Directive
03

ASP.NET: 页面指令 之 @PreviousPageType

接着上回的继续写,这个指令到目前为止没用过,有两个二选一的属性,主要的功能是为当前的页面指定一个强类型的PreviousPage.
 
@PreviousPageType属性(Attributes)
TypeName:指定前置页面的类型名称。
VirtualPath:指定前置页面的虚拟路径。
这两个属性不能同时出现,否则就白填,指令无效。
 
大多数时候应该都用不到这个指令,因为当前页面的PreviousPage的值并不取决于这个指令,而是你调用这个页面的方式,只有跨页面的提交和在服务器端调用Transfer时才会保存前置页面的实例.Page类提供IsPostBack,IsCallback,IsCrossPagePostBack三个属性来判断用户是如何来判断当前页面是如何被调用的。
 
Page.PreviousPage这个属性到目前我也没用过,好像很少需要获取前一个页面的对象实例,大多数情况下,页面间的数据传递都是通过QueryString、Form、Cookie等方式完成了。
 
随着Ajax的不断流行,现在连Server Control用的都少了,可惜MS花了这么大精力构造的WebForm框架.
归类于:代码人生 标签:ASPNET @PreviousPageType
31

ASP.NET:.ashx文件 和 @WebHandler

下班的时候QQ风雨无阻,问她有多久没有主动去看看技术的文章或者书籍了,回答和我现在的状况差不多,N久没看了,不是不想看,而是没时间看,总是有写不完的代码,不写代码时也不想看了,或许有些东西只有需要才会去学吧。
一直以来用Asp.Net写网站程序,基本上只用到.aspx和.ascx两种扩展名,以至于把.ashx忘的光光的,到后来自己用Ajax向服务器发请求时,也是直接请求的aspx页面,既派生于Page的对象,更好的方式应该是使用.ashx来做为Ajax的响应URL,因为ashx页面和WebHandler指令将实例化了一个派生于IHttpHandler的对象,只需要在ProcessRequest方法里写响应代码即可,相对Page显然轻量很多。
 
看了下ASP.NET的所有指令:@Page,@Control,@Import,@Implements,@Register,@Assembly,@Master,@WebHandler,
@PreviousPageType,@MasterType,@OutputCache,@Reference,有12个之多,就挨个再学习一遍吧,从@WebHandler开始。
 
@WebHandler 为Http handler文件(.ashx)定义属性(Attribute)和编译选项。
 
属性
Class 指定一个继承自IHttpHandler的类,当handler被请求时将被实例化用来响应请求。这个属性是必须的
CodeBehind 指定Class对应的文件,基本上没用,主要是用来支持VS显示的,可以去掉。
 
编译选项
Debug 默认是false,所以非调试就不用打开,影响性能,可以省略
Description 关于当前handler的描述,ASP.NET解析时忽略,可能调试时能提供辅助信息,可以省略
Language 默认C# ,可以省略
WarningLevel 0-4 默认我也不知道是几,可以省略。
 
使用ashx的好处就是不需要在Web.Config中配置,就可以直接用IHttpHandler派生类来处理请求,一些常见的应用场景:动态生成图片(比如验证码),响应Ajax请求等。
 
归类于:代码人生 标签:ashx文件 WebHandler
20

从字典模式开始扯

字典模式,这个词是我造的,但这种模式其实已经广泛使用了,比如大家经常使用的数组、集合其实都属于字典模式的应用。字典的特点就是Key/Value(键值对),你只需要提供特定的Key,就能快速获得想要的Value,所以它也是一种求解的思路或技巧,使用字典模式一般有两种场合:
一、缓存。为了提高效率而将运算结果保存起来,需要时直接去字典中取结果即可,牺牲空间提高效率。
二、映射。A->B 是映射关系,计算机无法通过某种方程式算从A得到B,我们只能人工预先做好字典,然后程序中通过调用字典来从A得到B,我们经常使用映射来完成通过计算无法解决的问题。
 
然后通过一些分析一些例子来加深对字典模式的理解:
 
1、暴力破解的字典
2、各种在线词典
3、关键字搜索
 
就这样吧。
 
归类于:代码人生 标签:字典模式
16

爬后院的山

在现在这个屋子里住了这是第4个年头,位置还不错,南边挨着颐和园,东边挨着圆明园,北边就是百望山,所以这几个地方我去得次数肯定少不了,尤其是百望山,加上今天这次,应该至少去爬过10次,以至于今天在后山的一个山头上,一个妈妈带着孩子问我,这个山头是通向那里的,我说,往南还有2个山头可以爬,半山腰有条公路,东南边还有个小区,能直接出去,北边沿着这个山路下去就能直接到北门了,出了北门往东走,也有条马路,和东门是通着的,再往西,也有一个山头,站在那个山头上能看到一个被群山环绕的世外桃源,有工厂,有小区,还有一个足球场。
 
当然,我没有给她说,从北门再往西也有一条上山的路,可以不用买门票,我爬百望山到目前为止好像就买过3次门票,今天也买了,好久没爬过山了,不想折腾,还是直接从正门进去的好。之前也不是为了省门票钱,而是从后面那条路上去更有意思些,最早的时候还没有北门,那时候从现在北门的位置也可以直接进山,第一次应该是2003年,那时候跟北大山鹰社就是从这个位置溜进来的,可惜后来非典来了,各种活动都停止了。
 
上山的时候有一个分叉路口,从上面各下来一个孩子,两个小孩都不大,估计4、5岁的样子,见了面,都互相非常开心的打招呼:“又碰到你了”,让我回想起小时候的一个玩伴,那时候应该我也是4、5岁左右吧,生了场病住院,然后同屋也有一个和我年龄差不多的孩子,然后我们就天天在一块玩,应该是非常开心,因为到现在我还常常想起,而那年得的什么病,在医院住了多久,都已记不得了,而且到现在已忘记了他的模样和名字,但他应该是我人生中记忆中最早的一个玩伴,尽管在一起的时间并不长。
 
转了几个山头,开始起风,汗也基本下去了,于是找了个没人的地方,拿出书,读了会,挺舒服,百望山就这点好,不太出名,所以来的人也不多,而且一般来的人主要集中在正门那个山头上,后面的几个山头基本很少有人来,所以非常清静,带上帐篷往地上一支,无聊的一天就可以在这打发了,显然现在开始有人知道这个秘密了,因为一路上已经看见好几顶帐篷了。
 
归类于:生活芝门 标签:后院的山 百望山
16

腾讯也山寨

 昨天和网QQ,看见QQ聊天窗口下面有一行广告:“全面抗假死、抗崩溃”,立即让我联想到搜狗浏览器,因为这事搜狗浏览器推出的广告词之一,但一想不对,QQ自己也有浏览器,中国的几大门户见基本上是死对头,应该不会互相做广告。点击一看,原来是QQ的TT4.6,介绍页面地址:http://tt.qq.com/tt/specific/tt4.6.shtml
 
看到介绍视频我乐翻了,技术方面无所谓,好技术都应该应用,但你这个视频太山寨了吧,而且视频质量还这么差。
 
中国互联网现在前两名都姓马,不过这二马的境界好像大不同。
 
归类于:圈里圈外 标签:腾讯 山寨 浏览器