|
|
2008年3月8日
“做IT行业的没有听说不加班的”,听到这句话大家可能觉得很平常(的确存在很多这样的情况),也许也会很郁闷,因为这些加班都是免费的,尤其是开发人员,为什么这么说呢,因为我也是一名开发人员,所以我也不太喜欢这样的说法。
我一个朋友的MSN签名是这样的:“短暂的激情是不值钱的,只有持久的激情才是赚钱的”,当然我这个朋友也是很有激情的一个人,如果你让他加班,他不会有怨言,因为他喜欢自己的工作,他有良好的心态,但对于其他人就未必没有怨言了。
其实,如果每个人都想我这位朋友一样,那么日常工作中就不会存在加班了,大家都是在做自己喜欢的事情,他会为此付出自己所有的空余时间,会尽自己最大的努力去完成每一件事情,而且完成都很出色,当然,这是一种理想的结果,事实上是很难达到这样的结果,在微软,这叫“主人翁”意识,如何培养员工的“主人翁”意识很关键,而且很难,尤其在中国,中国的国情和西方发达国家不一样,生活水平也存在很大的差异,大部分的中国人需要挣钱养家糊口,都希望自己能够得到很好的报酬,在谈及自己的理想的时候,都会加上一个前提:我需要挣钱照顾好我的家人,只有在这个前提下,才会为自己的理想而工作,也会尽最大的努力去实现自己的理想,花更多的时间、精力在工作上,这个时候加班与不加班也就不重要了。
所以,对于这个问题,我认为企业在员工面前应该充当一个“家”的角色,需要成为员工做好后勤工作,需要培养员工的“主人翁”意识,要让他们觉得自己在做什么事情,这些事情将会给他自己、给公司、给家人带来什么,这样才能激发员工的激情,从而更好的工作。
一个月以前就一直在忙,在资源紧缺的情况下同时进行几个项目是一件非常累的事情,需要不断的编码,同时还需要不断的出计划、策划,到最近发觉自己可利用的时间越来越少,这个时候我就在想,要是再给我几个人多好啊,但这些事情只能是想想,最后还是得自己去解决。
“我现在不太好把握自己的编码时间”这是我一个同事给我说起自己的时间问题,其实我也遇到了这样的问题,我想也许应该休息一下,想想以前都做了些什么事情,以后应该做什么,怎么做,关于自己的时间问题,没有人能够帮你,需要自己去把握、自己去解决。
2007年5月28日
摘要: 昨天算是比较郁闷的一天,因为做了一天的无用功,以为自己已经很好的解决这个问题了,到后来却发现是在原地踏步,在这个过程中,我发现了一个比较郁闷的问题,在这里拿出来希望有朋友可以帮助我,实在是没有其他办法了。最近自己用UL和LI 写了一个无限级的下拉菜单, 如果不了解可以去看看那篇文章,有看过那篇文章的朋友可能都觉得一切都很合理的,但当遇到浏览器等各种原因的时候,就会出现一些问题,比如一个典型的问题就... 阅读全文
2007年5月26日
前段时间我需要做这样的计算,但我在网上找了很久,也翻阅了一些资料,都没有特别好的办法,无奈之举,只要采用了下面的办法来获取: function TestStrPixel( sTargetStr ) { sTargetStr = sTargetStr; var span = document.getElementById("TestItemTextLength"); span.innerHTML = sTargetStr; var len = StrLen(sTargetStr); return span.offsetWidth - len; } function StrLen( sTargetStr ) { var sTmpStr, sTmpChar; var nOriginLen = 0; var nStrLength = 0; sTmpStr = new String(sTargetStr); nOriginLen = sTmpStr.length; for ( var i=0 ; i < nOriginLen ; i++ ) { sTmpChar = sTmpStr.charAt(i); if (escape(sTmpChar).length > 4) { nStrLength += 2; } else if (sTmpChar!='\r') { nStrLength ++; } } return nStrLength; } 这样通过TestStrPixel就可以测试出字符串的宽度,但这个肯定不是最好的,也许会有其他更好的办法,希望朋友们能够指点,小弟感激不尽 :)
2007年5月25日
近期的一场大病让我明白了很多事情,也让我损失了不少大洋,损身心伤啊,不过我却得到了很多生活方面的道理,也许你没有这样的意识,那是因为你没有经历,等你经历了,你就知道了,不过最好别经历这样的过程。 下面就我个人这段时间的理解给各位上班族的兄弟姐妹们(特别是IT工作者)一些建议:
1、“水是生命之源”,要多喝水,经某某某人研究结果,每人每天至少要消耗2公升半的水分,像上班族整天待在办公桌前很少运动,最好养成每次坐下前喝少量水的习惯,不要一下子喝太多,因为水分会滞留在体内,反而不利新陈代谢。而每天我们吃下的食物中已经含有大量的水分,扣除这些一天喝1500亳升的水就足够了,对于成天坐在电脑面前的朋友来说,可以适当的喝茶,这样可以一定程度的对抗辐射;
2、饮食方面,多吃水果、蔬菜,早餐一定要吃,多运动; 3、少喝酒,高热高脂食物少吃; 4、尽量避免熬夜,可能搞计算机的会经常熬夜,有时候可能是因工作需要,但建议还是避免熬夜; 5、久坐的朋友应定时起身做做运动,或者走走,这样对身体都有好处
大概就这么多了,大家可以补充~
2007年3月15日
上次 谈了这个高亮控件的高亮原理, 其实原理都很简单, 相信看过的都明白.
另外,还有一些小技巧, 如果按照我上次说的办法去实现高亮, 结果你可能会觉得有些怪, 每输入一个字符都会进行一下处理, 这样屏幕会有些闪, 特别是在内容很多的情况下会闪的特别厉害, 这个是由于win form的draw 和 redraw 造成的, 为了解决这个问题, 我用了一个Windows API函数, 相信大家都比较熟悉 SendMessage.
SendMessage 参数:

参数 类型及说明
hwnd Long,要接收消息的句柄
wMsg Long,消息的标识符
wParam Long,具体取决于消息
lParam Any,具体取决于消息
在C#中使用Windows API函数比较容易, 但有些地方还是需要说明一下, 在C#中指针的概念已经比较模糊了, 它认为指针是不安全的(当然在C#里面也可以使用指针), 取而代之的是这个东西 System.IntPtr, 用这个结构来表示指针或句柄的平台特定类型, 因此我们用这个类型来表示SendMessage定义句柄参数. 那么,究竟如何在C#中使用Windows API呢?
[DllImport("user32")]
static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
申明一个外部的静态函数, 在前面引用该函数所在的DLL文件,这里使用 user32.dll (通常位于~/Windows/System32中), 然后就可以在程序中使用这个函数了, 那用这个函数在这里究竟起到什么作用呢? 1 取得指定行第一个字符在文本中的位置 2 关闭和开启ReDraw 在此之前,定义了两个常量
const int WM_SETREDREW = 0xB; //开启和关闭ReDraw消息标识
const int EM_LINEINDEX = 0xBB; //行文本第一个字符所在位置的消息标识
然后在OnTextChange事件中使用这个函数
//取得指定行第一个字符的位置
linestart = SendMessage(base.Handle, EM_LINEINDEX, line, IntPtr.Zero);
SendMessage(base.Handle, WM_SETREDREW, 0, IntPtr.Zero);

  


SendMessage(base.Handle, WM_SETREDREW, 1, IntPtr.Zero);
其中第三个参数 0 表示关闭ReDaw, 1 表示开始ReDraw 这样处理后, 在输入的过程中就不会闪的那么厉害了, 不过这个办法不是最好的, 在文本比较多的时候还是会觉得有些闪, 最好的方法是用GDI+来绘制, 找准坐标后,在窗体上绘制, 不过我这里没这么做, 有兴趣的朋友可以试一下用画的方式来高亮, 相信效果会更突出. OnTextChanged 事件代码如下:
protected override void OnTextChanged(EventArgs e)
 {
if(base.Text!="")
 {
try
 {
int selectStart = base.SelectionStart;
line = base.GetLineFromCharIndex(selectStart);
string lineStr = base.Lines[line];
int linestart = 0;


//取得指定行第一个字符的位置
linestart = SendMessage(base.Handle, EM_LINEINDEX, line, IntPtr.Zero);
SendMessage(base.Handle, WM_SETREDREW, 0, IntPtr.Zero);

base.SelectionStart = linestart;
base.SelectionColor = Color.Black;
base.SelectionStart = selectStart;
base.SelectionLength = 0;

 string[] words = lineStr.Split(new char[] { ' ', '.', '\n', ',', ':', '\r' });

for (int i = 0; i < words.Length; i++)
 {

if (keyWordsParser.IsKeyWord(words[i]))
 {
int length = 0;
for (int j = 0; j < i; j++)
 {
length += words[j].Length;
}
length += i;
int index = lineStr.IndexOf(words[i], length);

//高亮开始
base.SelectionStart = linestart + index;
base.SelectionLength = words[i].Length;
base.SelectionColor = keyWordsParser.KeyWordColor;
//高亮结束
base.SelectionStart = selectStart;
base.SelectionLength = 0;
base.SelectionColor = Color.Black;
}
}
SendMessage(base.Handle, WM_SETREDREW, 1, IntPtr.Zero);
base.Refresh();
}
catch (Exception)
 { }
}

base.OnTextChanged(e);
}
这次就写这么多, 有什么不对的地方希望大家指正,谢谢~~
我是一块硬盘
在一个普普通通的台式机里工作。别人总认为我们是高科技白领,工作又干净又体面,似乎风光得很。也许他们是因为看到洁白漂亮的机箱才有这样的错觉吧。其实象我们这样的小台式机,工作环境狭迫,里面的灰尘吓得死人。每天生活死水一潭,工作机械重复。跑跑文字处理看看电影还凑活,真要遇到什么大软件和游戏上上下下就要忙的团团转,最后还常常要死机。 我们这一行技术变化快,差不多每过两三年就要升级换代,所以人人都很有压力而且没有安全感。每个新板卡来的时候都神采飞扬踌躇满志,几年光阴一过,就变得灰头土脸意志消沉。机箱里的人都很羡慕能去别的机器工作。特别是去那些笔记本,经常可以出差飞来飞去,住五星级的酒店,还不用干重活,运行运行word,上网聊聊天就行了。 但我更喜欢去那些大服务器,在特别干净明亮的机房里工作。虽然工作时间长点,但是福利好,24小时不间断电ups,而且还有阵列,热插拔,几个人做一个人的事情,多轻松啊。而且也很有面子,只运行关键应用,不象我们这里,什么乱七八糟的事情都要做。不过我知道,那些硬盘都很厉害,不是SCSI,就是 SCSIII Fibrechannel,象我这样IDE的,能混到工作站就算很不错了。 我常常想,当年在工厂里,如果我努力一下会不会也成了一个SCSI?或者至少做个笔记本硬盘。但我又会想,也许这些都是命运,不过我从不抱怨。内存就常常抱怨,抱怨他们主板部门的复杂,抱怨他如何跟新来的杂牌内存不兼容,网卡和电视卡又是如何的冲突。 我的朋友不多,内存算一个。他很瘦的而我很胖,他动作很快,而我总是很慢。我们是一起来这台机器的,他总是不停地说,而我只是听,我从来不说。 内存的头脑很简单,虽然英文名字叫Memory,可是他什么Memory都不会有,天大事睡一觉就能忘个精光。我不说,但我会记得所有的细节。他说我这样忧郁的人不适合作技术活,迟早要精神分裂。我笑笑,因为我相信自己的容量。 有时候我也很喜欢这份工作,简单,既不用象显示器那样一天到晚被老板盯着,也不用象光驱那样对付外面的光碟。只要和文件打交道就行了,无非是读读写写,很单纯安静的生活。直到有一天…… 我至今还记得那渐渐掀起的机箱的盖子,从缺口伸进来的光柱越来越宽,也越来越亮。空气里弥漫着跳动的颗粒。那个时候,我看到了她。她是那么的纤细瘦弱,银 白的外壳一闪一闪的。浑身上下的做工都很精致光洁,让我不禁惭愧自己的粗笨等到数据线把我们连在一起,我才缓过神来。开机的那一刹那,我感到了电流和平时的不同。后来内存曾经笑话我,说我们这里只要有新人来,电流都会不同的,上次新内存来也是这样。我觉得他是胡扯。我尽量的保持镇定,显出一副很专业的样子,只是淡淡的向她问好并介绍工作环境。 慢慢的,我知道了,她,IBM-DJSA220,是一个笔记本硬盘,在老板朋友的笔记本里做事。这次来是为了复制一些文件。我们聊得很开心。她告诉我很多旅行的趣闻,告诉我坐飞机是怎么样的 坐汽车的颠簸又是如何的不同,给我看很多漂亮的照片、游记,还有一次她从桌子上掉下来的历险故事。而我则卖弄各种网上下载来的故事和笑话。 她笑得很开心。 而我很惊讶自己可以说个不停。 一个早晨,开机后我看到数据线上空荡荡的插口。她一共呆了7天。后来,我再也没有见过她。我有点后悔没有交换电子邮件,也没能和她道别。不忙的时候,我会 一个人怀念伸进机箱的那股阳光 我不知道记忆这个词是什么意思,我有的只是她留下的许多文件。我把它们排的整整齐齐,放在我最常经过的地方。每次磁头从它们身上掠过,我都会感到一丝淡淡的惬意。 但我没有想到老板会要我删除这些文件。我想争辩还有足够的空间,但毫无用处。于是,平生第一次违背命令,我偷偷修改了文件分配表。然后把他们都藏到了一个秘密的地方,再把那里标志成坏扇区。不会有人来过问坏扇区。而那里,就成了我唯一的秘密,我常常去看他们,虽然从不作停留。 日子一天一天的重复,读取写入,读取写入……我以为永远都会这样继续下去,直到一天,老板要装xp却发现没有足够的空间。他发现了问题,想去修复那些坏扇区。我拒绝了。很快,我接到了新命令∶格式化。 我犹豫了很久 …………………… track 0 bad,disk unusable 我是一条内存. 我在一台台式电脑里工作,但是我记不得我是从哪里来的,是什么牌子,因为我健忘。我的上司是cpu大哥,他是我们的老大。都说他是电脑的脑子,可是我看他的脑子实在是太小了,比我还要健忘。每天他总是不停的问我,某某页某某地址存的是什么?我总是不厌其烦的告诉他,可是不出一秒钟他又忘记了,又要问一 遍,一次我说大哥你烦不烦,你就不能记住点有用的东西?他说“内存兄弟,我有苦衷啊,每天都在不停地做题,头晕眼花的,我也难啊。” 其实我不愿意跟他计较,因为他脑子小,思维也很简单。虽然说他是我的上司,可是每次睡觉醒来,他连要干什么都不记得了,总是急急忙忙地找BIOS兄弟,“嘿,哥们,今天干什么来着”。bios总是很不耐烦地把每天必做的工作说一遍,然后就去睡觉了。接下来就轮到我和C哥瞎忙了。 在机箱里的兄弟中,我最喜欢硬盘。他脑子大,记得东西多,而且记得牢。他说话 的速度很慢,而且很少说错,这说明他很有深度,我这么感觉。CPU也这么想,不过他很笨,每次都忘了硬盘是谁。开机自检的时候总要问∶“嘿,那家伙是谁?” “ST!”我总要重复一遍。 硬盘很喜欢忧郁,我觉得象他这样忧郁的人不适合做技术活,迟早会精神分裂的,但是他不信。 其实睡着的时候我总是把几乎所有的东西都忘记掉,但是我从来都不会忘记朋友。有一块地方叫做CMOS,那是我记忆的最深处,保存着硬盘、光驱的名字。有些东西应该很快忘掉,而有些东西应该永远记得。我在梦中总是这么想着。 BIOS是一个很奇怪的家伙,他老是睡觉,但是却总是第一个醒过来。让我们自检,启动,然后接着睡觉。我知道如果我在CMOS里头把BIOS Shadow选项去掉,他就睡不成了,但是看着他晕晕乎乎的样子,也就不忍心这么做了。他对人总是爱搭不理,没有什么人了解他。但是这次硬盘恋爱的事,却使我重新认识了他。 那是很久以前的事了,机箱里似乎来过一块笔记本硬盘,很可爱,说实话我也喜欢她。不过现在除了记得他可爱,别的都忘记了。这就是我比硬盘幸运的地方,我把所有应该忘记的都忘记了,但是他却什么都记得。 自从笔记本硬盘走了之后,硬盘就变得很不正常。每次他的磁头经过一些地方的时候,我们都能感觉到电流很不正常。 “硬盘这是怎么了?”我问CPU。 “谁是硬盘?” 我就知道和CPU没有办法交流,倒是bios没好气地说∶“那个傻瓜恋爱了”。我不知道什么是恋爱,因为我记不住东西,似乎有一些人或者事在我生命中留下过痕 迹,但 是我都轻率地把他们忘记了。 BIOS对我说∶“对你来说记忆太容易了,所以你遗忘得更快,生命中能够永刻的记忆都带着痛楚。”我不懂,但是我知道BIOS曾经被刷写过,那时他很痛,象要死了一样。我的记忆是轻浮的,不象他们……我很羡慕他们,因为他们拥有回忆,而我们有,从此我也学会了忧郁,因为我在CMOS里面写下了“忧郁”两个字。 硬盘一天比一天不对劲,终于有一天,CPU对问说∶“下条指令是什么来着?” 我一看,吓了一跳∶“format” “是什么?”CPU很兴奋,这个没脑子的家伙。 我还是告诉了他。我不知为什么这么做。 硬盘犹豫了很久,终于说了一句 Track 0 bad,Disk unusable。 电停了,很久很久,我在黑暗中数着时钟…… 一个月后硬盘回来了,也许最后的挣扎也没有使他摆残酷的命运,他被低格了。他什么也不记得了,如同一个婴儿,我们很难过,但是这未必不是一件好事,他以后不用痛苦了。 为了恢复数据,笔记本硬盘回来了。“Hi,ST”,她说,“你不认识我了?”硬盘没有说话,似乎低格对他的伤害很大。过了一会,他说∶“对不起,好象我们没有见过吧……”。 笔记本硬盘显得很伤心,我能感觉到她带泪的电流。“想不到连你也这么健忘”。 “哦……”。硬盘没有回答。 我很难过,笔记本硬盘的心里依然记着他,他却把一切都忘了,而那正是他最不希望忘却的。究竟是幸运,还是痛苦,我说不上来,只是觉得造化弄人,有一种淡淡 的悲凉。 这时从BIOS传来一阵奇怪的电流,我感觉到硬盘的表情在变化,由漠然到兴奋,由兴奋到哀伤,由哀伤到狂喜……“IBM,你回来了……”。 …… 后来BIOS对我说,其实他并没有睡觉,自从硬盘把那些文件藏起来以后,他就到会有这样的结局,于是偷偷地把其中一些文件放到了备份里。“幸好我是DUAL BIOS,虽然藏得不多,还足够让他想起来……”。 我想BIOS保存这些东西的时候一定很疼,当我问他“为什么这么做”时,BIOS轻描淡写的说∶“呵呵,我们是朋友嘛”。 嗯,朋友,永远的朋友……
2007年3月12日
前段时间没多少任务, 闲着也闲着,于是自娱自乐的写了一个MDXQuery工具, 实现MDX的查询以及显示工具, 工具界面如下:  这个工具的功能还不太完善,不过对于学习MDX,用这个简单的工具来做练习应该是够了(其实写这个东西的初衷也是为了学习MDX,呵呵) ^_^ ... 但在这里我不是讲这个工具的,而是讲里面写的一个可高亮且带智能提示的文本控件, 小弟的能力有限, 所以写的不是太好, 在这里和大家分享一下, 且希望得到高人的指点,不胜感激! 其实这个控件的原理比较简单, 主要利用了Visual Studio 2005 中自带的RichTextBox控件, 其着色以及改变字体等都是用这个控件完成的, 我所做的工作就是通知RichTextBox什么时候在什么位置把什么文字用什么颜色显示出来, 下面我给大家讲讲我的思路, 肯定会有更好的方案, 只是做的时候抱着玩的态度,就没有更深入的研究。 假如: 在 TextBox 中输入了以下内容:
1 SELECT { [DATE].[Calender Year].Members } 2 ON ROWS, 3 {[Measures].Members } ON COLUMNS 4 FROM [Adventure Works]
我们想高亮第二行的Rows, 怎么做呢? 首先我们找到光标所在位置,然后通过光标所在位置取到行号, 再通过行号取的该行的内容. 代码如下: (这里偷了个懒,就直接用了RichTextBox提供的一个方法 GetLineFromCharIndex 来取得行号)
1 int selectStart = base.SelectionStart; 2 line = base.GetLineFromCharIndex(selectStart); 3 string lineStr = base.Lines[line];
OK, 得到了行号以及需要高亮的文本所在行的所有文本后, 再想办法得到该行的第一个字符在整个TextBox中所处的位置, 例如我输入了两行内容: ABC DEF GHI 123 456 789 如果我光标在9后面这个位置,那么我得到的 行号为 1, 行内容为: 123 456 789, 该行第一个字符所处位置为: 11 (从0开始算) 得到这些信息以后,开始在行内容中查找关键词, 如果789是一个关键词, 那么需要得到7这个数字所在位置, 也许你会想, 既然的到了行内容, 这还不简单, 用IndexOf 不就是搞定了,的确是这样, 但为了减少IndexOf的查找时间, 通过以下代码缩短了搜索的范围:
int length = 0;
for (int j = 0; j < i; j++)
  {
length += words[j].Length;
}
length += i; //i 为行内容拆分的单词数组当前单词索引, 其实就是前面出现的空白数或者特殊符号数.
int index = lineStr.IndexOf(words[i], length);
//得到的index就是words[i]的所在位置.
OK,得到这些东西以后,我们就可以高亮了.
1 base.SelectionStart = linestart + index; 2 base.SelectionLength = words[i].Length; 3 base.SelectionColor = keyWordsParser.KeyWordColor;
其中的keyWordsParser是写的另外一个类,主要用于预存需要高亮的关键词. linestart为需要处理的行文本第一个字符在整个文本中所在位置。 好了,今天就写在这里, 明天继续...
2006年9月5日
大学毕业已经有那么几个月了,现在在重庆的一家软件企业(宏信软件)上班,做一个普普通通的程序员,我是毕业以前到的公司实习,大概3个月的时间,因此算起来到宏信已经差不多半年了。 记得刚开始找工作的时候,个人简历写了一大堆,谈的全是个人优点,自己是如何的创业、学技术,技术是如何的精湛,但真正出来以后才发觉,自己在学校学的那些根本不值一提,完全的“菜鸟”级的,能到这个公司也是让我感到比较欣慰的一件事,因为这个公司有我比较喜欢的文化氛围,有我比较热爱的技术,也有一个很优秀的技术团队,参加公司在学校的专场招聘会的时候就下定决心一定要加入宏信的,虽然当时有点底气不足,但最后还是非常幸运的加入了,用上幸运这个词完全符合我的个人发展历程,整个从小学到大学毕业都可以用的上这个词,关于为什么,在这里就不谈了,要不然就离题了。 面试 说说面试的事情吧,给我面试的有三个人,一个是我们部门经理(Louisliu),一个是我们的技术主管(Zhilee),还有一位是公司的资深的老员工邦邦,说老实话当时是很紧张的,不过我还是表现的很自然,尽力压制内心的激动与慌张,顺利的通过了面试。 在这次面试中,给我印象最深的是Zhilee,我们聊了很多,谈到我高中是如何学计算机的,谈到我以前写过的程序,他也给我讲了很多道理,有些话我现在还记得很清楚,他谈到如何专心的做产品,如何学习,做项目对一个人的影响等等。 通过这次面试,让我明白了很多事情,也反省了很多,以至于有些质疑以前在学校的学习方法,作为一个开发人员,最忌讳的一条就是浮躁,而当一个人做多了项目以后,这种思想尤为突出,在学校我承接了很多项目,都很快速的完成成交,但质量呢?有成问题了,没有进行过系统的设计,细节方面没有作好,最后做出的东西的质量是很差的,做开发说白了就是“工艺活”,真的需要用心的去设计,考虑问题的方方面面,对问题逐步细化,精益求精,这样完成的产品才是最好的。 工作 说起来容易做起来难啊,在工作的这几个月中,我一直在改变自己的工作态度与方法,但效果还是不太明显,总的来说比较乱,开发的乱,学习也比较乱,用户不断的提出需求,我们不断的改进,做的事情始终在原来的基础之上进行设计,加上对产品系统的不了解,因此会觉得有些乱,我宁愿接受一些新的东西的开发,也许是一个挑战,但我可以按照我自己的想法去设计。
//快上班了,得走了,明天继续!
|