January 3rd, 2008 by 张磊
我键盘有4个键坏了。一个是CTRL,一个是左Shift,一个是字母z(偶尔还可以打出来,比如刚才字母的“字”),还有一个是本本上特有的。所以最近写blog很少。少了CTRL几乎相当于砍掉了一条胳膊,少了z让人好多时候想打的字打不出来。 大三第一个学期我选了c#,本来信誓旦旦说要和某人一起学的,其实我本就自己研究过。而等到期末,也没有太大的进步。我曾和教C#的老师去年一起去南京出差,还一起打牌。不过今年上他的课也没有去聊天套近乎。下午去考了C#,是上机考。老师虽然年龄大,可是还比较懂得变通——相比起来,popo他们选的Java课就比较郁闷,笔试。 下午和alone一起去了机房,拿到了考试题目。又是奇偶又是AB还要按照学号选,有趣而头大。考试限时。我动手比较快,不过中间还是被卡过。深刻地意识到一定要先想好后动手,不管做啥都一样。想好不是全部想出来,而是在脑袋里把程序的逻辑搭建起来。 我开始做第2题时,发现右手边alone和鲶鱼都遇到了一样的问题,Dataset里没数据。还以为是他们没连上数据库呢。后来才明白是他们忘记了用sqlDataAdapter的Fill方法。:( 唉,当初这还是alone教给我的呢。 后来打包发给老师,周围的人几乎都最初版修改版最终版发了两三次。估计老师该郁闷了。
September 27th, 2007 by 张磊
某人的包失而复得,而今天的我,继承她的衰运。当然,从小,星期四对我来说就不是个好日子──因为那时的我,不知道为什么,总会被分到第四组。然后每个星期四都得带着卫生工具去学校打扫卫生。小学和初中,都是如此。 为了给自己每周凑足4.5个休息日,我一个人选了周四上午的Java课。于是上午10点,在popo、alone等人可以回寝室睡回笼觉时,俺还得迈开步子到新的教学楼上课。老师其实讲得不错,可是我发现自己置身于2+3同学们的大海中。四周一片嘈杂──其实这个没关系,因为我们自己专业也会吵。糟糕的是,我前面坐了一个背影好看声音极其难听的女生,她不知道是班委还是啥的,整整三节课都说个没玩。也没和别人说,只扭头和我这一排我旁边的几个女生说。 唉,学校现在风声紧,不敢逃课。堂堂一个男子汉,就快被一群女人给烦死了。 女人,不能用美丽打动你,就用丑陋恶心你──所以不是英雄难过美人关,该是女人关才对。 所以中午一回到寝室,我马上退了这门度课如年的Java程序设计。可以选的,只有下午的C#程序设计了。我选了C#,这意味着,我得在一个小时之后,在大大的太阳下,带着84kg的体重,爬5层楼去上这门课。 那也只好去。可能因为太热了,在路上,我手里的中性笔居然漏油了。我两只手迅速地沾满了油墨,还好,没有人发现。找个机会,我扔掉了手里的中性笔,然后把手在某个柱子上蹭了一下…… 终于上完了C#。 去食堂吃饭时,惊讶地发现,饭卡里的220余元,居然变成了117.4。这下懵了,哪怕是开了网上银行的银行卡,都没丢过钱。每天都攥在手里的饭卡,居然一下能少一百多。胡乱扒了几口饭,就去找管事的去了。找到那边的人说了一通,稀里糊涂,莫名其妙,那220又回来手里了。 衰吧。以后每个周四不用面对那群女生,却要以爬5楼为代价。 今天看到了C#课本上的一些课后题,没来由就觉得好笑: 简述按钮、 标签和文本框控件的作用。 大括号在C#语言中意义是什么? 单选按钮有什么作用?复选框有什么作用? C#集成化开发环境中主要有哪些窗口?它们的主要作用是什么?
December 28th, 2006 by 张磊
如果还不清楚什么是Sitemap,可以先来这里看看: 什么是 Sitemap 文件?为什么我需要一个? 总体来说,Sitemap可以帮助Google知道关于一个网站更多的信息。打个比方,可能你正在使用Rss订阅我的blog,如果你向Google提交一个Sitemap,Google就会通过Sitemap订阅你的网站页面。 以前做Sitemap的时候我是找一个网站来生成,但这样速度慢而且每次都很麻烦。所以我用C#简单写了这样一个生成器,希望能给广大站长带来方便。 下载: http://www.blogkid.net/upload/sitemapGenerator.rar 下载后解压即可运行,需要安装.net framework。 程序会自动生成包含500条网址的xml文件。我是第一次用C#做,如果有什么不足或是建议,可以发邮件到zhanglei909#gmail.com与我交流。
December 25th, 2006 by 张磊
前段时间给我的blog做sitemap,找了一个网站来让它生成。后来感觉每次都找挺麻烦的,想自己写一个生成sitemap的工具。 一开始我想用PHP来写,这样的话生成文件可以直接放在目录下,免去了上传的步骤。但是这个学期C#的作业还没有写。POPO在写一个学生信息管理系统,这样的东西至少对于现在的我来说是没什么意义的。在PHP中这样大型的数据管理做了不少,虽然没有写过C#的,但真的提不起什么积极性。后来想了想,就写一个C#Sitemap生成器好了。 去MSDN查了一下,C#生成XML还是很方便的(我以前用C#生成文本文件怎么也不成功,让我禁不住想用Delphi去了)。把以前写的抓取joyo/dangdang商品价格的一部分程序结果来,拼拼凑凑,一个Sitemap生成器就写好了,虽然看起来那么简陋。 这个Sitemap用的是广搜算法——这个和前段时间的商品抓取,其实中心思想都是老张的。要是老张也去学一个月技术,该是多么恐怖的一个牛人啊。现在我正在用它抓取我的blog的1000个页面,因为网络不够快,所以速度飚不起来。回头会把这个小工具发布出来。
December 4th, 2006 by 张磊
今天在写C#练手,但是发现没有一个像VB中那样的inputBox,自己手痒,就琢磨着想写一个。 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace RSS_fetcher { /// /// get_input 的摘要说明。 /// public class get_input : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private string result; /// /// 必需的设计器变量。 /// private System.ComponentModel.Container components = null; public get_input() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); [...]
October 18th, 2006 by 张磊
好久没有做ACM了。今天学校里又在办ACM校庆杯的比赛,我延续了一贯以来拿二等奖的势头,又捧回了一个二等奖(如果上学期那个新生奖也算的话,这是第三个二等奖了)。这次好好准备一下的话,冲刺一个一等奖还是有希望的。这次的奖品是一个不错的Philips耳麦,但我不是个喜欢听着音乐做事的人,对听歌的东西要求不高。不过我正好也需要一个耳麦,就拿它勉强用吧。 今天做的时候遇到一道题,题目的要求是写个程序来管理图书。我写过好多php的东西,对这种结构再熟悉不过,根本没有考虑,头脑中就设计了各数据表之间的关系。很快,大段的代码就写好了,可惜的是,居然超时了。后来我对程序进行了精简,也增开了好多内存,希望能“空间换时间”,——还是超时。 我在这一道题上纠缠了两个多小时。后来明白它内部一定有一个优化过的算法,而这个是我所不知道的。所以不论我怎么修改,只要不用那个算法,这道题肯定AC不了。后来我只拿下了两道题,二等奖,和之前的好多次一样。 虽然好久不做ACM,但最近对数据结构的学习让我有很多惊喜。再来读一些算法也没那么难了——今天的比赛好好给我上了一课,在嘉之说应当学一些算法时,在TopCoder第一次拿到0分时,我就该开始好好学学算法了,希望现在还不晚。 距离见到开复已有一个星期,这中间我又去了一次玉泉,智勇也去了一次Google。今天凌晨3:40睡的,居然不到7:00就奇迹般地醒来了,而且一整天都有很好的状态。本来以为事情多的喘不过气,现在感觉好多事可以放在一起来做,然后在做的过程中好好学习…… ACM,我回来了。
August 7th, 2006 by 张磊
今天在前些日子下载的清华视频课件上看了看C++后面的内容,弄明白了原来拷贝构造函数的浅拷贝和深拷贝就是那个意思(以为多深奥呢)。看到了虚函数那里,谈了虚析构函数,自己心里痒痒,就开了VC,实践了一下。 #include using namespace std; class A{ public: A(){cout< <”Building A..”< ~A(){cout<<”Deleting A..”< }; class B:public A{ public: B(){cout<<”Building B..”< ~B(){cout<<”Deleting B”< }; int main(){ A *a = new B(); delete a; } 这样一段程序的运行结果是: Building A.. Building B.. Deleting A.. 最开始我并不明白倒数第二句”A *a= new B();”是什么意思,现在明白了。a是一个指向数据类型为A的指针,构造它调用的是B的构造函数。由于B是从A继承过来,所以在调用B()之前先调用了A()。但是,当对象析构时,却调用的是A类的析构函数,B类的析构函数没有调用,发生了内存泄漏。造成这种问题的原因是:当A类指针指向的内存单元(即B类对象的数据)被释放时,编译器看到指针类型是A类的,所以调用A类的析构函数。 现在,可以使用虚析构函数来解决问题。将程序中class A的定义作如下修改: class A{ public: A(){cout< <”Building A..”< virtual ~A(){cout<<”Deleting A..”< [...]
July 31st, 2006 by 张磊
前一段看到tinyfool提到《c++primer》,心里一动。自己下载了这本书回来,还从来没仔细看过。从昨天开始,我有空就瞧着这本书,发现里面讲的东西真是好,要是我们的课也用这本书做教材,该学得多深刻阿。 读书的过程中,往往都能让我有更新的理解。下面是一段讲顺序结构容器的: Quote: vector 表示一段连续的内存区域每个元素被顺序存储在这段内存中对vector 的随机访问比如先访问元素5 然后访问15 然后再访问7 等等效率很高因为每次访问离vector起始处的位移都是固定的但是在任意位置而不是在vector 末尾插人元素则效率很低因为它需要把待插入元素右边的每个元素都拷贝一遍类似地删除任意一个而不是vector的最后一个元素效率同样很低因为待删除元素右边的每个元素都必须被复制一遍这种代价对于大型的复杂的类对象来说尤其大一个deque 也表示一段连续的内存区域但是与vector 不同的是它支持高效地在其首部插入和删除元素它通过两级数组结构来实现一级表示实际的容器第二级指向容器的首和尾。 list 表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来从而允许向前和向后两个方向进行遍历在list 的任意位置插入和删除元素的效率都很高指针必须被重新赋值但是不需要用拷贝元素来实现移动另一方面它对随机访问的支持并不好访问一个元素需要遍历中间的元素另外每个元素还有两个指针的额外空间开销。 下面是选择顺序容器类型的一些准则 如果我们需要随机访问一个容器则vector 要比list 好得多 如果我们已知要存储元素的个数则vector 又是一个比list 好的选择 如果我们需要的不只是在容器两端插入和删除元素则list 显然要比vector 好 除非我们需要在容器首部插入和删除元素否则vector 要比deque 好 如果我们既需要随机访问元素又需要随机插入和删除元素那么又该怎么办呢我们需要在随机访问的代价和拷贝右边或左边相邻元素的代价之间进行折衷一般来说应该是由应用程序的主要操作查找或插入来决定容器类型的选择为了做这个决定我们可能需要知晓两种容器类型的性能如果两种容器类型的性能都不能够使我们满意则需要自己设计更复杂的数据结构 俩字,精辟。如果本看看这本书,真是白学计算机了。
July 11th, 2006 by 张磊
现在对windows程序设计没了欲望,不知道该做啥。学了c#,说做一个东西吧,左想右想,还是只弄了一个点一下button文本框改变文本的。唉,每次打开delphi我也会弄一个一样的。这可是以前自学VB时候的水平阿。 看着程序这么长,自己只写了一行…… Code: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;namespace WindowsApplication1st_cs_ { /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Windows 窗体设计器支持所必需的 // [...]