December 2007 - Posts
随着版权意识的增加,许多网站首页(比如此博客堂)都有版权声明,常见的写法举例如下:
Copyright(c) 1999-2008 All Rights Reserved
Copyright(c) 2008 版权所有
例子中使用了2008的年份,因为国内现在已经是元月一日。重视细节的网站应该已经自动或者手工将其版权声明的年份更新了。是不是这样呢?
搜狐和新浪网更新了,而网易没有。
携程网更新了,而ELong(艺龙)没有。
大众点评网更新了,而美食中国网没有。
博客园更新了,而此博客堂则远远没有。
细微之处,往往可以以小见大。
------
Copyright(c) 2008 版权所有
通过Visual Studio 2008新创建一个WPF Application项目,在没有编译的情况下打开Window1.xaml.cs。鼠标右键单击InitializeComponent();这一代码行,选择Go To Definition菜单项。我们会看到其定义在一个叫做Window1.g.i.cs的文件之中。
对WPF比较熟悉的程序员知道:在编译WPF程序的时候,MsBuild通过调用Markup Compiler将Window1.xaml编译成为一个baml文件和window1.g.cs文件。这里的g的含义是“生成的”(Generated)意思。
可是Window1.g.i.cs文件呢?
这是只有在Visual Studio编程环境下才能看到的一个文件,g的含义同上,而 i 则是“智能感知”(Intellisence)的意思。为了能够让用户更方便的使用Intellisense,Visual Studio生成并且使用了Window1.g.i.cs文件。
如果在一次编译之后再Go To Definition,您就会发现这次打开的是Window1.g.cs文件。当然在编程的绝大多数时间里面,Window1.g.i.cs文件的使用率要高的多。
----
二零零八,新年快乐!
.net FrameWork 3.0 后,我们会发现有两个Color数据结构。
一个是:System.Drawing.Color
一个是:System.Windows.Media.Color
这两个结构有啥区别呢?
下面是对这两个类的属性的一个简单比较:
| | System.Drawing.Color Structure | System.Windows.Media.Color Structure |
| 所在组件 | System.Drawing.dll | PresentationCore.dll |
| 支持的版本 | .NET Framework Supported in: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0 .NET Compact Framework Supported in: 3.5, 2.0, 1.0 XNA Framework Supported in: 1.0 | .NET Framework Supported in: 3.5, 3.0 SP1, 3.0 |
| A | Gets the alpha component value of this Color structure. | Gets or sets the sRGB alpha channel value of the color. |
| B | Gets the blue component value of this Color structure. | Gets or sets the sRGB blue channel value of the color. |
| G | Gets the green component value of this Color structure. | Gets or sets the sRGB green channel value of the color. |
| R | Gets the red component value of this Color structure. | Gets or sets the sRGB red channel value of the color. |
| ScA | 不支持 | Gets or sets the ScRGB alpha channel value of the color. |
| ScB | 不支持 | Gets or sets the ScRGB blue channel value of the color. |
| ScG | 不支持 | Gets or sets the ScRGB green channel value of the color. |
| ScR | 不支持 | Gets or sets the ScRGB red channel value of the color. |
| 获得系统支持的一些颜色 | 在Color中定义了141种系统预定义的颜色 调用方法如下: System.Drawing.Color.AliceBlue | 不在Color中定义,而是Colors中定义,获得方法类似下面写法: System.Windows.Media.Colors.AliceBlue 系统一共预定义了141个颜色。 |
| 小结 | 只支持 sRGB。向下兼容 | 同时支持 sRGB、ScRGB。不兼容3.0以下的版本 |
我们可以在上面看到,关键是sRGB和ScRGB两种颜色表示方法。这两种有啥差别呢?我们来看下面三副图,先来感性的看看:

这幅图的巧妙之外在于它通过“归一化”,用两维平面来表示三个数据。X轴是红色的比例,Y轴是绿色的比例,而Z轴是蓝色的比例,虽然Z轴没有画出来,但它的比例数据可以很方便地计算出来。比方红是0.2,绿是0.3,那么蓝就是0.5。因为它们三者加起来必须等于1,不然怎么叫“归一化”呢!图上任何一点的蓝色分量,你都可以用这个方法计算出来。
图中的“舌形”色域空间,是人眼能够辨别的色彩空间,它的边缘围绕一道从波长从380到700(毫微米)的光谱,中间就是用红、绿、蓝三种颜色按不同比例调配出来的颜色。
而图中的三角的区域,是 sRGB 可以表示的颜色范围。显然有一些我们人类可以看到的颜色,但是sRGB来描述的。
上面这幅图对比了 sRGB、人眼、ScRGB 可以表示的颜色范围。
上面这幅图是sRGB和ScRGB两幅图的比较,注意看放大了的云彩。
sRGB 和 scRGB 的转换
在 System.Windows.Media.Color 结构中,scRGB原色其实是被储存成单精度(single-precision)的浮点数。想要容纳scRGB颜色空间,Color 结构包含四个主要的property,类型都是float,分别为ScA、ScR、ScG、ScB。
这些property和A、R、G、B property 会相互影响,改编G property也会造成ScG property的改变,反之亦然。
当G property 为0,ScG property 也会为0;当G property 为255,ScG property 就会为1。在这个范围之内,
关系并非是线性的,如下表所示。
| scG | G |
| <= 0 | 0 |
| 0.1 | 89 |
| 0.2 | 124 |
| 0.3 | 149 |
| 0.4 | 170 |
| 0.5 | 188 |
| 0.6 | 203 |
| 0.7 | 218 |
| 0.8 | 231 |
| 0.9 | 243 |
| >=1.0 | 255 |
ScR 与 R 之间的关系,ScB与B之间的关系,以及ScG与G之间的关系,也都是一样的。ScG的值可以小于0或者大于1,以容纳超出显示器和sRGB数字范围的颜色。
sRGB和scRGB的比较
sRGB目标是使同一网页在不同计算机上显示时的色彩更一致,但只适用于CRT显示器。微软HD Photo项目负责人克劳说,sRGB的挑战在于它只是完整色彩空间的一个子集,当使用sRGB编码时,我们会丢掉一些色彩。
scRGB色彩空间是sRGB扩展,对于黑色和纯绿色而言,这二者没有任何分别。二者的差别就在于scRGB能够显示人眼无法分辨的颜色,其精细程度也超过了sRGB。
scRGB描述每个点所需要的位数是sRGB 2倍,甚至是4倍。不仅能够使用整数,还能够使用浮点数,提高图像的精细程度。
参考资料:
关于scRGB色彩空间
http://hi.baidu.com/cybo/blog/item/8f24ba38bbb584c1d5622597.html
第二章 基本的Brush画刷类 [App = Code + Markup]
http://www.cnblogs.com/rickiedu/archive/2007/04/04/699529.html
GDI+与WPF中的颜色简析
http://blog.csdn.net/johnsuna/archive/2007/08/27/1761061.aspx
简述WPF中的图像像素格式(PixelFormats)
http://blog.csdn.net/johnsuna/archive/2007/08/28/1762901.aspx
在 移山之道 中,我写道:
一个项目的商业价值只有在它被成功地发布并运行时才能体现出来,所以,MSF过程模式包括了开发和发布阶段。我当年在学校的时候,所有课程的项目都没有真正在实际环境中运行过,现在的学生应该有条件这么做了吧?
[小飞、荔荔、九条面面相觑]
阿超:我听说你们在软件学院比赛中做了一两个很酷的项目,得了奖,解决了实际问题,不是么?难道没有真正运行起来?
荔荔:项目演示完了,我们就没有管,好像也没有人要求我们在实际环境中运行。我们把代码交给院里,过不久代码就不全了,也不能编译,后来也就不了了之。
阿超心想:糟了,软件学院领导推荐的学生就这水平,也许应该找那些在外兼职的学生……
这也是我想在我的课程里面避免的情况 (课程:清华大学微软软件科学实验班 《现代软件工程》)。至少有两个项目发布了公开的Beta 测试网站:
1。淘书网 http://taoshu.net9.org 针对校内同学的二手书交流平台
2。 FTP 搜索 http://storm9.net9.org 专注FTP 网站的搜索
[由于网站是在教育网内部,外面访问会比较慢]
这门课大致按照移山之道的框架来讲述,同学们在16周时间内做了个人项目,结对项目,和团队项目,我也请了微软的工程师去讲他们如何做软件的。金旭亮老师看了最后的评审,还发了一些感慨。
在创意横行,泡沫溢出的时代,要让一个项目成功地发布,让大家满意,也不是那么容易. 同学们刚刚发布了消息,就碰上不少拍砖的(帖子1)(帖子2)。然而,这远比在个人电脑上测试了两回,就宣布项目成功要好得多。事实上 - 移山之道没有提到的另一个诀窍是 - 要想项目取得商业的成功,还得脸皮厚,不怕拍砖。
砖头不妨来得更猛烈些。
在 移山之道 中,我写道:
一个项目的商业价值只有在它被成功地发布并运行时才能体现出来,所以,MSF过程模式包括了开发和发布阶段。我当年在学校的时候,所有课程的项目都没有真正在实际环境中运行过,现在的学生应该有条件这么做了吧?
[小飞、荔荔、九条面面相觑]
阿超:我听说你们在软件学院比赛中做了一两个很酷的项目,得了奖,解决了实际问题,不是么?难道没有真正运行起来?
荔荔:项目演示完了,我们就没有管,好像也没有人要求我们在实际环境中运行。我们把代码交给院里,过不久代码就不全了,也不能编译,后来也就不了了之。
阿超心想:糟了,软件学院领导推荐的学生就这水平,也许应该找那些在外兼职的学生……
这也是我想在我的课程里面避免的情况 (课程:清华大学微软软件科学实验班 《现代软件工程》)。至少有两个项目发布了公开的Beta 测试网站:
1。淘书网 http://taoshu.net9.org 针对校内同学的二手书交流平台
2。 FTP 搜索 http://storm9.net9.org 专注FTP 网站的搜索
[由于网站是在教育网内部,外面访问会比较慢]
这门课大致按照移山之道的框架来讲述,同学们在16周时间内做了个人项目,结对项目,和团队项目,我也请了微软的工程师去讲他们如何做软件的。金旭亮老师看了最后的评审,还发了一些感慨。
在创意横行,泡沫溢出的时代,要让一个项目成功地发布,让大家满意,也不是那么容易,同学们刚刚发布了消息,就碰上不少拍砖的(帖子1)(帖子2)。然而,这远比在个人电脑上测试了两回,就宣布项目成功要好得多。事实上 - 移山之道没有提到的另一个诀窍是 - 要想项目取得商业的成功,还得脸皮厚,不怕拍砖。
有一种记忆单词的方法是谐音,就是根据其读音近似到汉语的某个词组合,而这个词组合可以被联想引申到单词的本义。
昨天我答应写一些大家在以前的博客中没有看到的关于Visual Basic和Visual Studio 2008的新东西,我把它叫做隐藏宝石。我曾提到过在VS2008中的一些特性我很喜欢,还炫耀过智能感知(Intellisense )的改善,尤其是对关键字、本地变量和表达式,自动完成语句的改进。在过去,我还提到过一个新的语法特性,称之为Relaxed Delegates,它允许你为事件(event)提供一个可替代的签名(alternate signatures)。以上这些都是很好的特性,但我今天要说的不是这些,是隐藏宝石(可能这些你在一些C#的文章中见过了,在Visual Basic 2008中一样炫)。
[原文作者]: Bill Horst
[原文链接]: Converting SQL to LINQ, Part 2: FROM and SELECT (Bill Horst)
在看这篇文章之前,我假定你已经读过了从SQL到LINQ,Part 1:基础。
为了让代码示例更清晰,我修改了下列名字:
· Customers -> CustomerTable
· Orders -> OrderTable
· cust -> Contact
· CustomerName -> ContactName
· ID -> ContactID
欢迎你们的任何反馈和建议,你们的意见可以使以后的文章更清晰更有用。
好,现在开始讨论具体的子句(clauses),我们将从最基础的FROM和SELECT开始。
FROM
SQL的SELECT语句由SELECT子句开始,并且紧跟着一个FROM子句。而VB查询表达式则由From子句(或者Aggregate子句,我们稍后讨论)开始。一个基本SQL的FROM子句指定了一个要操作的表,一个LINQ的From子句指定了一个我们要操作的对象(CustomerTable)。这个对象可以表示“已在内存中的”(“In-Memory”)数据:比如一个SQL表,或者XML信息。因为使用这样的数据比较简单,我的例子也采用了”In-Memory”的数据。除了这个数据对象,VB的From子句还包含了一个指定当前“行”(Contact)别名的标识符。
如果要选择所有的列,在SQL中我们需要使用”*”,而在VB中,我们不需要附加任何东西,From子句默认返回所有的内容。
|
SQL |
|
SELECT *
FROM CustomerTable
|
|
VB |
|
From Contact In CustomerTable
|
FROM里的别名(alias)
SQL允许你在FROM子句中指定一个表的别名,LINQ同样允许我们这样做。
|
SQL |
|
SELECT Contact.CustomerID, Contact.Phone
FROM CustomerTable Contact
|
|
VB |
|
From Contact In CustomerTable
Select Contact.CustomerID, Contact.Phone
|
SELECT
SQL的SELECT语句由一个包含要select的内容的列表开始(Name, CustomerID)。 类似的,LINQ也允许你指定要select的内容,并将结果包装成一个匿名类型(anonymous type)返回。你指定的内容并不一定要是From子句指定对象的一部分,你可以指定任意合法的VB表达式(比如3+4)。如果成员的名字不能够被推断,你必须为其指定一个别名(见下面的“SELECT里的别名”)。
|
SQL |
|
SELECT Name, CustomerID
FROM CustomerTable
|
|
VB |
|
From Contact In CustomerTable
Select Contact.Name, Contact.CustomerID
|
SELECT里的别名
SQL允许SELCT子句的成员有别名(ContactName, ContactID),我们可以在查询语句的其它子句中使用这些别名。LINQ也允许别名,并且你可以在所有使用这个查询结果的代码中使用它们。
|
SQL |
|
SELECT Name ContactName, CustomerID ContactID
FROM CustomerTable
|
|
VB |
|
From Contact In CustomerTable
Select ContactName = Contact.Name, ContactID = Contact.CustomerID
|
下次我打算讲到DISTINCT, WHERE, ORDER BY 和运算符。
- Bill Horst, VB IDE Test
[原文作者]:Kit George
[原文链接]:LINQ Cookbook, Recipe 2: Find all capitalized words in a phrase and sort by length (then alphabetically) (Kit George)
准备材料:
- Visual Studio 2008 (Beta2 或更高版本)
- 一些需要搜索的字符串
类别: LINQ-To-Objects, LINQ and string, LINQ and WinForms
制作方法:
- 打开Visual Studio 2008,点击菜单“文件/新建项目”,找到并双击 ”Windows 窗体应用程序” 图标
- 拖放一个Listbox 到窗体上,调整它的高度,然后拖放一个按钮到窗体上
- 双击这个按钮,并将下面的代码添加到按钮的事件处理函数中:
Dim text = "Good morning everyone. I'd like to welcome " & _
"you to today's presentation on LINQ. My " & _
"name is Kit George and I'm a Program Manager " & _
"for Microsoft, on the Visual Basic team. You " & _
"might be wondering where my accent is from? " & _
"Well, I hail from a small country called New " & _
"Zealand but it sure is great to be here in " & _
"Atlanta today!"
Dim capitalWords = _
From word In text.Split( _
New Char() {",", ".", "!", " "}, _
StringSplitOptions.RemoveEmptyEntries) _
Where word(0) = Char.ToUpper(word(0)) _
Order By word.Length, word
ListBox1.Items.AddRange(capitalWords.ToArray())
- 修改你要搜索的字符串。如果字符串保存在一个文件中, 可以使用 My.Computer.FileSystem.ReadAllText 获取并保存到字符串变量中。
创建Add-In 工程
关于雷军同学有趣往事
1. 雷老虎
雷军的第一个孩子出生了,是个女儿,公司同事们刚刚得知这个消息后就在内部新闻组发起了起名活动。很多人给出了女孩名字的建议,最后通过投票,最高得票的名字是“雷婷婷”。这个名字是有典故的,李连杰的电影《方世玉》中,女主角就叫“雷婷婷”(李嘉欣饰演),而她爸爸叫“雷老虎”,雷老虎的名言是“以德服人”。当然这是一个员工的集体玩笑而已,雷军没有采用这个名字。
2. 性格
雷军的性格争强好胜,追求完美,控制欲望强烈,有点象《六人行》里面的莫妮卡,雷军会关心公司的窗帘是不是完好,清洁工有没有弄干净地板。在任何对抗性游戏中,哪怕只是公司内部纯粹娱乐性质的游戏中也会努力争取胜利。雷军很聪明,也还算强壮,一般的都是能赢的。当然也有例外,比如某次乒乓球比赛遇到了高手,是个市场部经理,雷军的表情明显郁闷了。有次公司庆祝新年的晚会,几个人一起做游戏,第一次雷军输了,比第一名差了一点点,在他的强烈要求下,再来了一次,结果他赢了,但是其他人绝对没有故意防水。
3. 侃
雷军极其健谈,而且有强烈的表达欲望,只要他有时间总会拉一些员工朋友一起聊天,虽然工作是聊天的主题,但是经常被他的跳跃思维带得离题万里,还好他是会意识到这一点还会及时把话题带回来。和雷军聊天可以长见识,他可是中国IT业的老革命了,业界的陈年往事最近的八卦新闻,你都可以从他那里听到。如果你晚上10-11点左右被雷军抓住聊天,那么你最好给家里个电话说今天不回去了。
4. 上市
我第一次听到金山公司打算上市的消息,是从雷军那里听到的,那是1998年的11月。当然那时上市只是遥远的梦想,金山当时距离世界上最宽松的上市条件还差非常远。
5. 勤奋
雷军的日程表就没有所谓加班 7×12 是基本工作时间。大部分节假日都会被会议占据。金山有很多勤奋的员工,但是总体来看论勤奋10多年来雷军绝对高居榜首。每年的10月-11月一般是词霸发布新版本的日子,99年的十一国庆雷军陪开发组加班,亲自做测试帮助修改词库数据,3年后才第一次出现没有加班的国庆节。
6. 例会
早期金山人很少,北京才30多个人,每周一早上全体员工例会,雷军主持站着开会,各个部门经理汇报上周工作和下周计划,有部门合作方面的问题当场沟通解决。这样的全体例会一直开到公司员工超过70人才取消,改成各部门分别开例会,然后部门经理开例会。这样的例会成为传统,此后各个部门例会也都是这样开的。
7. 演讲
雷军的演讲很具有感染力的,每年的几次中层经理会都会有他的演讲,主题多围绕公司的总结和下一步战略。雷军还会刻意培养甚至要求其他人的演讲技巧,尤其是中层,在金山做中层没有本事在几十人面前慷慨激扬的发表一番演说是混不下去的。
曾经在金山任职的人或多或少都受到雷军的影响,从他身上学到一些东西。如果金山是所学校,雷军无疑就是校长。
雷军的离去标志着中国IT业的理想时代终结了,进入了完全由资本驱动的时代,至少我是这么认为的。
虽然resgen.exe在.NET框架2.0下已经有了/publicClass的选项,Visual Studio 2005自动生成的代码文件只能是internal.
在Visual Studio 2008下,程序员可以选择internal或者public,如下图所示:

----
祝您节日快乐!