DotNetEden

一个普通程序员的成长记录
posts - 447, comments - 1519, trackbacks - 13, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

置顶随笔

摘要: 将2012年的目标单独从2011年总结中拿出来并置顶,以便督促自己。2012年目标:考软考的信息系统项目管理师。学习iOS,从购买了MBP就开始想学习,不过随着女儿的出生和驾照的学习就把这事给耽误了,2012年一定要努力学习,拖延症患者伤不起啊。脚本类的还是学习一下Powershell吧,毕竟工作中和VS打交道最多,AutoHotKey会搜索脚本用就行了。学会AutoHotKey。学习Python,以后一些简单的工作能利用Python脚本完成。将手头上的纸质书读完,读完之前不再买新书,2012年希望自己可以看10本左右的专业书籍。若干本其它类的电子书籍。驾照考完。(已完成,不过没有车子,求赠车阅读全文

posted @ 2012-02-20 17:44 张荣华 阅读(157) 评论(0) 编辑

2012年4月11日

摘要: 在推上看到有人推荐了这本书,就买了一本看看,作为一个对于对Web安全没大有概念的人最大的收获就是知道了好多的攻击方式,总体来说这本书讲的比较通俗,通读完这本书后大概也能知道一些常见的攻击方式以及一些避免方式,对做Web开发的程序员来说有一定的收获,概括来说适合对Web安全了解不多的人入门。阅读全文

posted @ 2012-04-11 11:28 张荣华 阅读(173) 评论(0) 编辑

2012年3月29日

今天在做一个Winform的项目时遇到了一个问题需要跨线程更新GUI,Winform默认是不允许跨线程更新GUI控件的,如果你这样做会报错,所以需要做一下变通,在我的解决方法中借鉴了Updating Your Form from Another Thread without Creating Delegates for Every Type of Update的代码,代码如下:

 // 新建一个放扩展方法的类
public static class ExtensionMethod
{
public static TResult SafeInvoke<T, TResult>(this T isi, Func<T, TResult> call) where T : ISynchronizeInvoke
{
if (isi.InvokeRequired) {
IAsyncResult result = isi.BeginInvoke(call, new object[] { isi });
object endResult = isi.EndInvoke(result); return (TResult)endResult;
}
else
{
return call(isi);
}
}

public static void SafeInvoke<T>(this T isi, Action<T> call) where T : ISynchronizeInvoke
{
if (isi.InvokeRequired)
{
isi.BeginInvoke(call, new object[] { isi });
}
else
{
call(isi);
}
}
}

// 在类里这样应用
private void button1_Click(object sender, EventArgs e)
{

Thread thread = new Thread(new ThreadStart(startCalculation));
thread.Start();
}

private void startCalculation()
{
button1.SafeInvoke(d => d.Enabled = false);

for (double i = 0; i <= 10000000000; i++)
{
string textForLabel = (i) + "%";

lblProcent.SafeInvoke(d => d.Text = textForLabel);
var i1 = i;
progressBar1.SafeInvoke(d => d.Value = 10);
string labelText = lblProcent.SafeInvoke(d => d.Text);

}
this.SafeInvoke(d => d.refreshTree());
button1.SafeInvoke(d => d.Enabled = true);
}

private void refreshTree()
{
Thread.Sleep(10000);
this.treeView1.ExpandAll();
this.treeView1.Nodes[0].Nodes[1].Remove();
}

需要注意的startCalculation方法是在新线程里执行的,但SafeInvoke里调用的方法(如refreshTree)仍是在主线程里执行的,如果你在这些方法里有耗费资源的代码(如这里的Thread.Sleep(10000))时程序还是会有停止反应的假死状态的。

posted @ 2012-03-29 14:43 张荣华 阅读(96) 评论(1) 编辑

2012年3月16日

今天在听iOS开发讲座时,照着讲座的demo输入代码,尝试运行时遇到了" this class is not key value coding-compliant for the key digitPressed.' "的错误,经过一番搜索和排查发现是自己在设置IBAction和IBOutlet时有多余的连线,按下ctrl键检查控件的连接将多余的连续删除后程序正常运行。

posted @ 2012-03-16 23:12 张荣华 阅读(192) 评论(0) 编辑

2012年3月15日

今天在练习Learning Objective-c on Mac上的代码时输入了以下的代码,

NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];

//omitted

[pool drain];
return 0;

程序报错为"NSAutoreleasePool is unavailable: not available in automatic reference counting mode".

经过搜索得知Learning Objective-c on Mac使用的是比例老Xcode版本,而在Xcode4.2之后的版本中引入了ARC特性来自动管理内存,所以应该将下面的代码发为下面的样子。

@autoreleasepool{
//omitted.
}


PS:网上还有人建议在设置中关闭ARC来继续使用NSSAutoreleasePool,想不明白为什么有这个需求,难道是老代码用新Xcode来编译?如果是新项目的话还是尽量使用ARC吧,毕竟能自动管理内存是多美好的一件事啊。

posted @ 2012-03-15 10:03 张荣华 阅读(132) 评论(0) 编辑

2012年3月9日

正在做的一个Winform程序中引用资源文件中的图片时遇到错误如下:

未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“EDSS.GEDSection.Properties.Resources”正确嵌入或链接到程序集“GEDSection”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。

但是资源文件和资源文件中的图片明明是正确嵌入的,没有问题。最后经过搜索发现问题的根源在项目的属性文件中项目的默认命名空间还是原先的“ExploreDevelpe.GEDSection”,而不是现在该程序集下所有文件正在使用的默认命名空间的"EDSS.GEDSection"。修改默认命名空间后问解决。

PS:网上还有说如果有时不慎将bin/obj目录包含在项目文件中也会导致该bug。

posted @ 2012-03-09 12:07 张荣华 阅读(89) 评论(0) 编辑

2012年2月29日

摘要: 在我的项目中使用了许多*.config类型的文件(如app.config/DataImportSetting.config etc.),其实这些文件本身就是一个xml文件,只是扩展名不是*.xml而是*.config。这时如果我们是在Visual Studio里编辑这些文件是没有问题的,VS可以自动识别这是xml文件并自动按xml的语法进行高亮显示,但如果你想我一样喜欢用Sublime Text 2之类的文本编辑器进行编辑config文件,那么可能就需要在打开文件后手工的设置文件按xml语法进行显示。每次都这样手工设置语法很麻烦,所以就想能不能修改Sublime Text 2的配置让其自动识别阅读全文

posted @ 2012-02-29 13:52 张荣华 阅读(251) 评论(0) 编辑

2012年2月27日

摘要: Head First Design Pattern读书笔记,简要的记下了一些设计原则和各个模式的示意图,不求熟记设计模式,但求能知道每个模式的场景和基本实现思路,实际使用时查阅文档即可。阅读全文

posted @ 2012-02-27 17:39 张荣华 阅读(34) 评论(0) 编辑

2012年2月23日

摘要: 今天在利用sp_attach_db 'dbname', 'dataFileFullName', 'logFileFullName' 命令附加一个数据库文件到SqlServer2008时遇到了以下的错误:Msg 3415, Level 16, State 3, Line 1Database[dbname] cannot be upgraded because it is read-only or has read-only files. Make the database or files writeable, and rerun recovery阅读全文

posted @ 2012-02-23 15:24 张荣华 阅读(55) 评论(0) 编辑

2012年2月20日

摘要: 将2012年的目标单独从2011年总结中拿出来并置顶,以便督促自己。2012年目标:考软考的信息系统项目管理师。学习iOS,从购买了MBP就开始想学习,不过随着女儿的出生和驾照的学习就把这事给耽误了,2012年一定要努力学习,拖延症患者伤不起啊。脚本类的还是学习一下Powershell吧,毕竟工作中和VS打交道最多,AutoHotKey会搜索脚本用就行了。学会AutoHotKey。学习Python,以后一些简单的工作能利用Python脚本完成。将手头上的纸质书读完,读完之前不再买新书,2012年希望自己可以看10本左右的专业书籍。若干本其它类的电子书籍。驾照考完。(已完成,不过没有车子,求赠车阅读全文

posted @ 2012-02-20 17:44 张荣华 阅读(157) 评论(0) 编辑

2012年2月14日

摘要: 勇于承认自己不知道答案,这点就和勇于对不合理的要求说不一样令人难以开口,却不能不开口。 修复错误时不要急于下手,要先明白现在的逻辑,读懂现在的代码,遇到其它小组主写的程序时不要死看程序,要多向其它小组的同事讨教。 永远不要害怕问出SB的问题,再傻的问题只要是自己认识思考就要表达出来了,同样如果碰到别人问一些简单的问题也不要不耐烦,要认真对待。 改bug或是看代码时遇到不合理的代码要善于逐步合理重构。 如若有可能,“午餐会议”会是一个比较好的分享知识,增进团队凝聚力的方式,不过处在一个公司不管饭、有人带饭有人去餐厅吃饭的氛围下实施起来有难度吧。 学习一门技术的时候不要用旧的眼光来看待,不能用C#的语法来写VB程序。 不要重复的造轮子,但要选择合适的轮子,互联网上开源的东西很多,要选择适合自己的。 开始一个项目时,最好可以要求一个客户代表常驻项目组,作为需求的惟一入口。如果客户代表不能常驻项目组那么需要商量一个合适的周期频繁的给客户代码演示系统,以快速获得反馈。 将警告视为错误。 每日立会,是站立的立,而不是例常的例。 尝试在不同的Release轮换人员,不要形成这块是阅读全文

posted @ 2012-02-14 15:30 张荣华 阅读(180) 评论(1) 编辑

2012年2月7日

摘要: 对于能自动生成的文件不要添加到版本控制中,如bin目录,obj目录。svnadmin create /Users/zhangronghua/documents/svntest 可以创建一个Repository.在指定的目录下运行svn import . file:///users/zhangronghua/documents/svntest -m "the first import" 可以将当前目录加入到SVN中。svn co file:///users/zhangronghua/documents/svntest sesame 可以在当前目录下新建一个sesame目录并将阅读全文

posted @ 2012-02-07 13:43 张荣华 阅读(46) 评论(0) 编辑

2012年2月1日

摘要: ReadingNotesForEffectiveCSharp2nd阅读全文

posted @ 2012-02-01 09:49 张荣华 阅读(74) 评论(1) 编辑

2012年1月7日

摘要: 今年五月份刚从卓越上买的MBP(型号:MC700,价钱8千左右),用了将近半年了,觉得很爽,不一样的系统带来不一样的使用体验,带来不一样的感受,这篇文章是Windows平台个人常用软件推荐的姊妹篇,总结一下个人觉得比较好用的Mac平台常用软件,下面的软件大部分是免费软件,有一部分是限免时收的,剩下的1Password、MarsEdit、TextExpander我可耻的使用了盗版。阅读全文

posted @ 2012-01-07 12:40 张荣华 阅读(2196) 评论(11) 编辑

2011年12月31日

摘要: 有了女儿,初为人父,感觉很奇妙,女儿很乖很漂亮,是今年最大的收获,感谢老婆给了我这么好的女儿。美帝流亡三个月,见识了美帝的腐朽生活,真心不想归来,希望女儿长大后可以去腐朽的资本主义社会生活。中了电子设备的毒,买了iPod Touch, MBP, Kindle KeyBoard 3G,HTC Android手机。还短暂的玩过BlackBerry 8310,8900,9000,9700,9780,9800。后来把黑莓手机都转手卖了,全键盘虽有爱,但App太少了。开始购买了自己的第一个正版App---iDaily Pro, 然后又买了其它的几个,最贵的是DataBase.Net 19$一个Licen阅读全文

posted @ 2011-12-31 11:38 张荣华 阅读(223) 评论(3) 编辑

2011年12月13日

摘要: 要想在TC(Total Commander)中显示SVN的图标需要做以下两步:在”SVN Settings”->“Icon Overlays”中保证”Show overlays and context menu only in explorer”没有被选中。Total Commander7.5 中在“设置“->”选项“->”显示“->”图标”中把"显示层叠图标"选上就可以了!阅读全文

posted @ 2011-12-13 10:38 张荣华 阅读(223) 评论(0) 编辑