编程点滴,目前主要研究Android

对待生活,应该怀着一颗感恩的心

首页 新随笔 联系 订阅 管理
  96 Posts :: 16 Stories :: 255 Comments :: 2 Trackbacks

置顶随笔 #

摘要: 求职信 (Word格式)简历 (Word格式) 计算机二级证书 (VB) 新闻中心颁发的荣誉证书 http://chengbo.net/resume阅读全文
posted @ 2005-10-12 23:10 chengbo 阅读(689) 评论(3) 编辑

2011年11月13日 #

发现上一篇blog居然是07年的时候。。。太懒了,不过准备再写点东西了,主要是记录下自己在工作中的一些经验以及心得,也希望对其他人能有点帮助。

最近工作是Android相关的,这玩意儿的中文资料太少而且质量超级低,自己磕磕碰碰研究了几个月,好歹入了点门,觉得还是记录分享下,也算是对中国的Android发展做出点贡献。。。(太看得起自己了吧?)

posted @ 2011-11-13 00:47 chengbo 阅读(4) 评论(0) 编辑

2007年5月2日 #

为了节省带宽,可能需要压缩一下 ViewState ,具体压缩的代码,网上一搜一大把,比如下面这段:
public class CompressedViewStatePage : System.Web.UI.Page
{
    
const string CompressedViewStateKey = "__COMPRESSEDVIEWSTATE";
    
protected override void SavePageStateToPersistenceMedium(object state)
    
{
        LosFormatter formatter 
= new LosFormatter();
        StringWriter writer 
= new StringWriter();
        formatter.Serialize(writer, state);
        
string viewState = writer.ToString();
        
byte[] data = Convert.FromBase64String(viewState);
        
byte[] compressedData = CompressHelper.Compress(data);
        
string str = Convert.ToBase64String(compressedData);
        ClientScript.RegisterHiddenField(CompressedViewStateKey, str);
    }


    
protected override object LoadPageStateFromPersistenceMedium()
    
{
        
string viewState = Request.Form[CompressedViewStateKey];
        
byte[] data = Convert.FromBase64String(viewState);
        
byte[] uncompressedData = CompressHelper.Decompress(data);
        
string str = Convert.ToBase64String(uncompressedData);
        LosFormatter formatter 
= new LosFormatter();
        
return formatter.Deserialize(str);
    }

}

这个方法重写了 Page.SavePageStateToPersistenceMedium 和 Page.LoadPageStateFromPersistenceMedium 方法。代码注册了一个 __COMPRESSEDVIEWSTATE 的隐藏字段,把压缩的 ViewState 放在其中,不再使用原先的 __VIEWSTATE 字段。

我要做的一个页面的情况是,顶部有很多选择查询参数的控件,用户首先输入参数,再点击搜索按钮后系统会把搜索出来的记录集显示在 UpdatePanel 里的 GridView 上;若不选择参数, GridView 上会显示数据库中所有的记录集。使用上面的代码在未启用局部刷新时没有问题,但是启用的话,假如用户第一次选择了一些参数,搜索,GridView 会绑定显示搜索出来的记录集,但是这时点击 GridView 的分页按钮, GridView 重新显示的却是所有记录集,也就是说, ViewState 丢失了。

禁用 Ajax 或不用上面的方法压缩 ViewState ,都可以恢复正常,但如果我两个都想要呢?好在这世上有 Google 这东西,我搜索到了下面的解决方案:

public class CompressedViewStatePage : System.Web.UI.Page
{
    protected override void SavePageStateToPersistenceMedium(object state)
    
{
        Pair pair;
        PageStatePersister persister 
= this.PageStatePersister;
        
object viewState;
        
if (state is Pair)
        
{
            pair 
= (Pair)state;
            persister.ControlState 
= pair.First;
            viewState 
= pair.Second;
        }

        
else
        
{
            viewState 
= state;
        }


        LosFormatter formatter 
= new LosFormatter();
        StringWriter writer 
= new StringWriter();
        formatter.Serialize(writer, viewState);
        
string viewStateStr = writer.ToString();
        
byte[] data = Convert.FromBase64String(viewStateStr);
        
byte[] compressedData = CompressHelper.Compress(data);
        
string str = Convert.ToBase64String(compressedData);

        persister.ViewState 
= str;
        persister.Save();
    }


    
protected override object LoadPageStateFromPersistenceMedium()
    
{
        PageStatePersister persister 
= this.PageStatePersister;
        persister.Load();

        
string viewState = persister.ViewState.ToString();
        
byte[] data = Convert.FromBase64String(viewState);
        
byte[] uncompressedData = CompressHelper.Decompress(data);
        
string str = Convert.ToBase64String(uncompressedData);
        LosFormatter formatter 
= new LosFormatter();
        
return new Pair(persister.ControlState, formatter.Deserialize(str));
    }

}

如果用 Reflector 看看 System.Web.UI.Page 类的 SavePageStateToPersistenceMedium 和 LoadPageStateFromPersistenceMedium 方法,你会发现上面的代码和微软的实现差不多,都是使用 Persister.Save 和 Persister.Load 来保存和获取 ViewState (只是上面的代码加上了压缩和解压的逻辑),这里的 Persister 是默认的 HiddenFieldPageStatePersister ,所以页面还是使用 __VIEWSTATE 字段来保存 ViewState。

改成第二段代码来压缩 ViewState 就正常了。至于第一段代码会在 Update Panel 中出问题,我是这样猜的:

启用 UpdatePanel 的局部刷新并不是真正的局部刷新,只不过微软做了点手脚,用 XMLHttpRequest 对象去向服务器提交请求,而服务器毫不知情,还是会生成一个完整的页面生成周期,把生成的 HTML 完整的返回,这时 ScriptManager 把不在 UpdatePanel 里的内容统统去掉,只接收 UpdatePanel 里面的内容,然后在客户端刷新一下,造成局部刷新的“假像”。问题就出在用 XMLHttpRequest 对象去请求服务器的时候,ScriptManager 不知道我们把 ViewState 放在 __COMPRESSEDVIEWSTATE 字段中,而用的是 __VIEWSTATE 字段里的内容,所以服务器会认为用户没有输入查询参数,返回了数据库中的所有记录……

问题好像就是这样产生的,不过我还有点不清楚,Persister.ControlState 和 Persister.ViewState 各是什么意思, MSDN 上也没说太明白,哪位大虾解释一下?

参考

posted @ 2007-05-02 18:09 chengbo 阅读(3550) 评论(8) 编辑

2007年3月31日 #

stop web sites from resizing Firefox windows

有时候,firefox 的窗口大小会被你正在浏览的网页所改变(比如说点击 wordpress 后台“编辑 HTML”按钮的时候),这让我感到很不舒服,就像弹出广告一样,我相信大家都不会喜欢。其实有一个简单的方法可以让 firefox 的窗口不再被网页改变。

  1. Mac/Linux 用户:点击 编辑 > 参数设置;Windows 用户:工具 > 选项
  2. 选择 内容 标签页
  3. 在“启用 Javascript” 的右侧,点击“高级...”
  4. 取消"移动或改变窗口大小"

简单而又非常有效的一个方法,希望你能喜欢。技巧来源

posted @ 2007-03-31 23:59 chengbo 阅读(397) 评论(0) 编辑

2007年2月27日 #

       
  1. 每天做15分钟的晨练。
  2.    
  3. 前一天晚上就做好第二天的准备。
  4.    
  5. 好记性不如烂笔头,有什么事都记下来。
  6.    
  7. 不要做任何以后会让你说谎的事。
  8.    
  9. 准备好备用钥匙。
  10.    
  11. 做好演习,你的车,用具,家,人际关系随时都有可能出问题。
  12.    
  13. 做好等待的准备,一本平装书可以让你在等待的过程中保持好心情。
  14.    
  15. 拖延是压力之母,无论你明天要做什么,今天就做,无论你今天要做什么,现在就做。
  16.    
  17. 计划先行,不要等到事情已经发生了,才去想解决办法。
  18.    
  19. 不要对有问题的东西置之不理,如果你的闹钟、钱包,鞋带,挡风玻璃刷出毛病了,趋早修好或干脆换掉。
  20.    
  21. 提早15分钟到约会地点,提前一个小时赶到机场。
  22.    
  23. 估计(或限制)饮食中的咖啡因含量。
  24.    
  25. 对突发事件总是做好准备(以防万一)(如果因为某些原因我们迟到了,应该……;如果我们走散了,就在这里集合好了。)
  26.    
  27. 不要过于拘泥于某事。比如周末没有割草,地球也不会因此而不转。
  28.    
  29. 不要总看到坏的一面。
  30.    
  31. 工欲善其事,必先利其器。
  32.    
  33. 学会说“不”。对没时间参加的活动说不。
  34.    
  35. 不想别人打扰的时候,拔掉电话,或使用自动应答机。
  36.    
  37. 除了食物,水,衣服,其它的都别太在意。
  38.    
  39. 把事情做的简单些,更简单些,再简单些……
  40.    
  41. 多和乐观的人在一起。和天天自寻烦恼的人在一起只能让你也喜欢担心这儿担心那儿。
  42.    
  43. 如果你需要长时间坐在一个地方工作,那么每隔一段时间就站起来舒展一下身子。
  44.    
  45. 如果想要在家里找清静,那就带上耳塞吧。
  46.    
  47. 要有足够的睡眠,如果有必要,准备一个闹钟提醒你起床。
  48.    
  49. 整理好你的家和办公桌,不要因为找不着东西而影响心情。
  50.    
  51. 紧张的时候要缓慢深呼吸。
  52.    
  53. 写下你的想法和感觉可以让你考虑的更全面。
  54.    
  55. 无论何时觉得需要放松的时候,可以做一些瑜珈:在数到八的时间内,用鼻子吸气,然后在数到十六的时间内(或尽可能长的时间),用微张的嘴唇呼气,重复十次。
  56.    
  57. 对压力较大的一些事做好准备。比如,你要发表一个公众演讲,那最好先在脑子里把所有方面的事都过一遍,你穿什么,准备怎么讲,听众会提些什么问题而你又怎么回答等等。
  58.    
  59. 如果压力妨碍了你做事,不妨换个环境试试。
  60.    
  61. 把你的麻烦说给可信任的朋友,这样可以帮助你理清混乱的思绪,好集中精力战胜困难。
  62.    
  63. 选择一个适合你的工作环境
  64.    
  65. 珍惜每一天。
  66.    
  67. 每一天,做一些自己喜欢做的事。
  68.    
  69. 对你做的每件事都加一点爱。
  70.    
  71. 洗个热水澡(或者夏天洗冷水)。
  72.    
  73. 为别人也做些什么。
  74.    
  75. 更关注你现在理解了些什么,而不是过去理解的。更关注你现在喜欢的什么,而不是过去喜欢了什么。
  76.    
  77. 外表也很重要,穿的整齐些也能让你感觉更好。
  78.    
  79. 制定行程的时候,不要订的太过紧密,给自己一些喘息的机会
  80.    
  81. 做事变通一些,不是每一件事都必须做的很完美。
  82.    
  83. 不要对自己说:“我太老了……”或“我太胖了……”等等。
  84.    
  85. 利用周末换换品味。
  86.    
  87. “积少成多,集腋成裘”还有另一种说法:“昨天,今天,明天都尽力做事,你就会获得成功”
  88.    
  89. 每次只集中精力做一件事。
  90.    
  91. 每天留点时间给自己。
  92.    
  93. 如果有一件讨厌的事你不得不面对,那么最好早点搞定它,这样剩下的时间里你会过的很愉快。
  94.    
  95. 学会把事交给有能力的人去做。
  96.    
  97. 不要忘了吃午饭。
  98.    
  99. 不要好高骛远。
  100.    
  101. 对事对人要有一颗包容的心。接受我们生活在一个不完美世界的事实。
  102.    
  103. 拥有乐观的世界观,相信世上所有人都在尽他们的全力做事。

原文

posted @ 2007-02-27 15:40 chengbo 阅读(306) 评论(2) 编辑

2007年1月25日 #

在输入密码的时候,用户不看键盘的话很难知道自己是否启用了大写,所以到经常因为大小写错了而被系统拒之门外。

其实一段js代码就可以解决这个问题。

<script>
function capLock(e){
 kc 
= e.keyCode?e.keyCode:e.which;
 sk 
= e.shiftKey?e.shiftKey:((kc == 16)?true:false);
 
if(((kc >= 65 && kc <= 90&& !sk)||((kc >= 97 && kc <= 122&& sk))
  document.getElementById('divMayus').style.visibility 
= 'visible';
 
else
  document.getElementById('divMayus').style.visibility 
= 'hidden';
}
</script>

<SPAN><input type="password" name="txtPassword" onkeypress="capLock(event)" />
<SPAN><div id="divMayus" style="visibility:hidden">Caps Lock is on.</div>

 

试试效果吧。

原文

posted @ 2007-01-25 12:44 chengbo 阅读(309) 评论(1) 编辑

2006年12月29日 #

摘要: C#Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->intyear=DateTime.Now.Year;intmonth=DateTime.Now.Month;DateTimefirstDayOfThisMonth=newDateTime(year,m...阅读全文
posted @ 2006-12-29 17:31 chengbo 阅读(493) 评论(1) 编辑

2006年11月29日 #

摘要: 项目组需要每天编译一次项目,然后把编译好的程序集打包,添加到SourceSafe以日期命名的Project中。有一个批处理的脚本可以自动完成这些操作,其中会用到SourceSafe提供的一些命令。更多命令请查看MSDN。ECHO OFFd:cd\cd D:\PublishCode\Publish\SourceCode:: 设置vss的环境变量path "C:\Program Files\Micro...阅读全文
posted @ 2006-11-29 11:24 chengbo 阅读(983) 评论(0) 编辑

2006年10月17日 #

摘要: 今天惊奇的发现,我居然还有20个maxthon 2 预览版的邀请,话就不多说了,想要的朋友留下mail吧。阅读全文
posted @ 2006-10-17 20:04 chengbo 阅读(227) 评论(21) 编辑

2006年9月20日 #

摘要: 注意:请直接致电:86256791,傅小姐.或发邮件:qukanshu@gmail.com主要工作:基于Linux/MYSQL/PHP或ASP/WINDOWS/MSSQL开发大型网站程序.要求:1.精通HTML,ASP,.NET,CSS+DIV,MSSQL数据库2.熟悉VB,VC,DELPHI程序语言其中一种3.有强烈的创新精神与团队意识4.精通XML/XSLT/CSS/JAVASCRIPT者优先...阅读全文
posted @ 2006-09-20 10:16 chengbo 阅读(972) 评论(0) 编辑

2006年9月19日 #

摘要: 建job可以用企业管理器,但这样的话发布会比较麻烦,所以今天查了一下用tsql建job的方法。建job分三个步骤:addjob -> add schedule - > add step分别由三个sp完成:sp_add_job sp_add_schedulesp_add_jobstep 给这三个sp加上一些参数,执行就OK了,run之前别忘了USE msdb哦阅读全文
posted @ 2006-09-19 17:18 chengbo 阅读(194) 评论(0) 编辑