RSS 2.0 Feed
2004-09 Entries
摘要:博客堂各位堂主谈论 .NET 2.0 已经很久了,我却一直在 .NET 1.1 的项目中“煎熬”着。近些日子终于耐不住、下载了 .NET Framework 2.0 SDK,在项目闲暇读一些类库文档。 (1) System.Globalization.EastAsianLunisolarCalendar .NET 2.0 中 System.Globalization 命名空间下,多出了几个新的 Calendar,其中 EastAsianLunisolarCalendar 是 ChineseLunisolarCalendar, JapaneseLunisolarCalendar, KoreanLunisolar, TaiwanLunisolarCalendar 的基类。 从字面上看,这些应该是不少人盼望已久的“阴阳历”了;但 SDK 文档还没有完成,只能从字面上窥一斑:GetSexagenaryYear 应该是“天干”,GetTerrestrialBranch 应该是“地支”(原来这么翻译的!),GetLeapMonth 应该是取得某年中闰月的月份,Type 是日历类型(枚举值有:SolarCalendar 阳历,LunarCalendar 阴历,LunisolarCalendar 阴阳历,Unknown 未知)……等等。 文档中说:ASP.NET?Web 服务器控件中的 Calendar 支持 System.Globalization 命名空间中所有 Calendar 类型的日历,让我高兴不已,很想通过 Calendar 先睹为快。但这一计划很快被我否定了,因为 Calendar 控件使用的日历是和区域设置相关的,每个固定区域性都有一组可选日历(OptionalCalendars)。 比如:zh-TW 区域性中这组可选日历包括:(注意可选日历有优先顺序区分)      System.Globalization.GregorianCalendar (Localized)    公历的已本地化版本      System.Globalization.GregorianCalendar (USEnglish)   公历的美国英语版本      System.Globalization.TaiwanCalendar                          台湾地区日历 ja-JP 区域性中可选日历为:      System.Globalization.GregorianCalendar (Localized)   公历的已本地化版本      System.Globalization.JapaneseCalendar                      日本历      System.Globalization.GregorianCalendar (USEnglish)  公历的美国英语版本 zh-CN 区域性中可选日历为:      System.Globalization.GregorianCalendar (Localized)   公历的已本地化版本 区域设置中使用的日历必须为 OptionalCalendars 中的日历。这里似乎就有一个 Bug 了:既然已经实现了 ChineseLunisolarCalendar, JapaneseLunisolarCalendar,……却“忘”了将它们添加到对应区域性的 OptionalCalendars 中去! 这个要么是微软“忘”了;要么就是这些 LunisolarCalendar 还没有完全实现,只是处在测试阶段。 (2) TreeView 服务器控件: TreeView 在以前的 Microsoft Internet Explorer Web Controls 控件包里是以 *.htc 的行为脚本文件提供客户端支持的。它不仅限制了浏览器必须是 Internet Explorer,而且版本也被定死在 IE 5.5 及以上。非 IE 浏览器及 IE 5.5 以下的浏览器(如 IE 5.01)都返回了“__doPostBack”的版本。 .NET 2.0......[阅读全文]

posted @ | Feedback (5) |

摘要:昨天去听了微软开发大会,遗憾的是开心就好在最后时刻说他不来了,来的是张炜和王立楠。感觉第二场王立楠的讲座比较好一些,为许多听了第一场就走掉的人感到遗憾。 王立楠还是把智能客户端这件事情说清楚了,当然他用的 demo 比较多,比第一场翔实。反馈表中的讲师评价是在一起的,不能区别评分,有点遗憾,只好两人打分加起来除以二,有点抹杀王的作用。 :(...[阅读全文]

posted @ | Feedback (10) |

摘要: .pbcode { font-size: 10pt; background-color: #eeeeee; margin: 10px 30px 10px 30px; padding: 10px 10px 10px 10px } 虽然 DataGrid 控件自己带了一个分页处理机制,但它是将符合查询条件的所有记录读入内存,然后进行分页显示的。随着符合条件的记录数目增多,就会出现运行效率问题,或者至少是资源的利用率下降。 下面的代码示例都以下面的表结构为准:     Articles 表 SQL Server 类型 Oracle 类型 PK Id int (自增) number(9) (插入时在当前最大值上加1)   Author nvarchar(10) nvarchar2(10)   Title nvarchar(50) nvarchar2(50)   PubTime datetime date SQL Server / Access 等微软产品中,我们通常的自定义分页有两种思路: 一种是以 ASP.NET Forum 为代表的、“临时表”方法:即在存储过程中建立一个临时表,该临时表包含一个序号字段(1,2,3,....)以及表的主键(其他能够唯一确定一行记录的字段也是可以的)字段。存储过程可能如下:(编号 SS1) CREATE Procedure GetAllArticles_Paged(     @PageIndex int,     @PageSize int,     @TotalRecords out int,     @TotalPages out int)ASDECLARE @PageLowerBound intDECLARE @PageUpperBound int-- Set the page boundsSET @PageLowerBound = @PageSize * @PageIndexSET @PageUpperBound = @PageLowerBound + @PageSize + 1-- Create a temp table to store the select resultsCREATE TABLE #tmp(     RecNo int IDENTITY (1, 1) NOT NULL,     ArticleID int)INSERT INTO #tmp     SELECT [ID]     FROM Articles     ORDER BY PubTime DESCSELECT A.*FROM Articles A (nolock), #tmp......[阅读全文]

posted @ | Feedback (38) |

摘要:接着昨天的话题,继续多语言界面: (上一篇) 6。关于文本排序: 不同语言对相同字符的排序可能是不同的,西方语言中,比如:瑞典语和德语都有字母“Ä ”,但瑞典语这个字母是在 Z 之后;德语是在 A 之后。西方语言的这种情况,我们接触的不多。 这次做的是简体中文、英语、日语三语言。比如中文和日文中都有汉字,但简体中文是按汉语拼音排序的,“学”(xue) 在 “生”(sheng) 之后;日语是按假名排序的,“学”(がく) 在 “生”(せい) 之前。 文本的排序,在 .NET 程序内部是跟区域代码关联的,具体到 ASP.NET 站点,我们在上一篇中为 Page.Culture 赋值 "zh-CN" 之后,如果比较“学”和“生”的话,就会按照已经指定的语言来比较、排序。 但这是在程序内部,可实际情况往往是:比如分页显示上万条数据时,我们是在数据库中排好顺序,只取出一页(20条或者40条或者 pageSize 条)的数据,返回给程序处理;如果我们在程序里只是对这 20条或者 40条数据排序的话,这只是将对已取出的这 20或40条记录排序,当然不是我们想要的效果。 也就是说这个排序规则需要在数据库端指定,在 Oracle 数据库的 PL/SQL 语言中,我们找到了 ALTER SESSION SET NLS_SORT = SCHINESE_PINYIN_M; 把这句话写在查询数据的存储过程/函数的最开始,则此存储过程/函数中的排序操作(ORDER BY ...)都将按汉语拼音排序;日语是 ALTER SESSION SET NLS_SORT = JAPANESE; 其他语言,我们可以使用默认的 ALTER SESSION SET NLS_SORT = BINARY; 传递一个代表不同区域的数字,在存储过程开始分别写上上面这句 SQL 即可达到预期的目的。 此处为错误!存储过程中不可以使用 ALTER SESSION ...,只能使用 NLS_SORT 函数!特修正: SELECT ..... FROM .... WHERE ..... ORDER BY NLS_SORT(排序字段名, 'NLS_SORT=SCHINESE_PINYIN_M') DESC; 很遗憾,我在 SQL Server 的 T-SQL 语言中没有找到类似的操作(哪位知道的可以告诉我),据我目前所知:SQL Server 只支持的“静态”的排序规则,你可以给一个字符类型(char, varchar, text, nvarchar, ntext)的字段指定排序规则,但指定之后在存储过程中间不能改变这个规则,即一个字段只能按一种规则排序,不能动态改变。看来 SQL Server 暂时无法满足我们这个需求。 其他数据库的情况,尚不知晓,知道的朋友请留在下面,大家共同分享。 7。显示与程序内部处理的格式问题 比如,我们通过 Query String (查询字符串)传递一个日期参数到另一个页面,这时我们就应当使用和区域性无关的固定格式,如 DateTime.ToString("yyyyMMdd"),这样无论在何种区域性中我们都得到 20040911 的字符串,便于我们在另一侧“接收”。 也就是,内部处理需要通过文本传递时,使用和区域性无关的固定格式;而显示时使用和区域性相关的格式。...[阅读全文]

posted @ | Feedback (7) |

摘要:最近博客堂里很多人都在谈论 Tech ED 2004,而且还有 speaker 以小礼品“引诱”大家去捧场(开个玩笑,zhanbo 不要生气)。我对微软的这个活动不太了解,它只在北京、上海、广州举行。昨天在微软首页上又看到了一条和大连有关的消息:“微软开发技术大会将在大连、武汉、南京、成都、杭州、福州隆重开幕”,小城市的“安慰奖”? 这么多活动,都是免费的还是付费的(要付多少RMB)?我想看看有没有必要,请个假去听听 Smart Client …… 好消息:已经通过电话确认,参加这次微软开发技术大会(不是 Tech ED)是免费的!另外,通过MSN,博客堂总舵开心就好表示也将参加这次大会。...[阅读全文]

posted @ | Feedback (11) |

摘要:公司里做一个内部管理用的 Portal,主要实现考勤、工作日报、项目管理等功能。因为是日本公司,老板不太懂中文,但员工的日文水平也不是非常好,因此 Portal 定为多语言(简体中文、日文、英文)界面。 1. 使用资源存储所有的界面文本: 这一条应该是工作量最大、最繁琐、也是最基础的部分,页面中的涉及到的所有文本(包括标签上的文字、出错的提示信息等)都要写入资源文件;然后,页面 Load 时,把文本从资源中读出写到那些 Label 里。 我们可以使用 {0} {1} 这样的占位符代替一些需要插入变量的地方,加载资源时,使用 String.Format 方法填充这些占位。(当然占位符是可以有格式信息的,比如日期类型的,{0:g} 等等。)如果使用占位符,请注意一点:如果资源中找不到该资源项,或者说找到的是空字符串,那么在 String.Format 时将有可能出错。所以请务必保证该资源项存在。 2。资源文件的命名 依照一定的规则,如根级非固定区域性资源文件名为:strings.resx,那么 zh-CHS 的资源文件名应为:strings.zh-CHS.resx;类推,zh-CN 的资源文件应为 strings.zh-CN.resx。 3。固定区域性与非固定区域性 固定区域性代码,如:zh-CN(中文-中华人民共和国),zh-HK(中文-香港,SAR),en-US(英语-美国),ja-JP(日语-日本)。非固定区域性,如:zh-CHS(简体中文), zh-CHT(繁体中文),en(英语),ja(日语)。系统查找资源时,如为 zh-CN 的区域查找资源,会首先查找 zh-CN 的资源是否存在;如果没有找到,会自动查找其“父级”的非固定区域性,即 zh-CHS 的资源;如果依然没有找到,则使用 InvariantCulture (根级非固定区域性资源)。 因为 zh-CN, zh-SG, zh-MO 这些固定区域都同用 zh-CHS 简体中文,大多数文本应该是一样的;如果使用 zh-CHS 制作简体中文资源,则其子级的 zh-CN, zh-SG, zh-MO 都将使用此简体中文资源;个别不一致的资源项,可以单列在各子区域性的资源文件中。 根据上述特点:(a.)优先制作 zh-CHS, en, ja 这样的非固定区域性的资源。(b)如果 zh-CN 和 zh-SG 或 zh-MO 在某些资源项目不同,可以单列。这样便于兼容更多的区域性。 4。不同的固定区域性有不同的日期时间数字显示格式: 简单来说,用得最多的是 DateTime 的显示格式,在不同区域性中应该为访问者提供符合其区域性的格式。比如:我们平常喜欢使用的 DateTime.ToString("yyyy-M-d") 方法,在不同区域性的输出结果都是一样的,不符合我们的目的,应该使用 DateTime.ToString("d")、DateTime.ToString("f") 这样的方式,在不同区域性中输出不同的格式。(如:"d"时:zh-CN: 2004-9-11;  ja-JP: 2004/09/11;  en-US: 9/11/2004) 需要注意的是,这些必须跟固定区域性相结合。非固定区域性无从谈起此格式,比如同使用英语的美国和英国,其格式也是有差异的。 5。在页面上放置你的语言选择 DropDownList: 将其 AutoPostBack 属性设置为 true;对应三种语言的 ListItem 的 Value 属性分别为:en-US, zh-CN, ja-JP。 在语言选择 DropDownList 的 SelectedItemChanged 事件中:我们需要改变当前会话的区域性。简单的方式是:通过 Page 类的两个只写属性(write-only):string Culture 和 string UICulture(这两个是只写的,不能读取,在“.NET 类库文档”中看不到它们)。Culture 需要赋以固定区域性的代码,UICulture 除了接受固定区域性的代码外,还接受非固定区域性的代码。一般的,我们可以赋值,比如:Culture="zh-CN", UICulture="zh-CHS"(当然这里也可以直接写 "zh-CN" 的)。 事实上我们发现,这样的做法是有问题的,界面并没有直接改变语言。为什么呢?因为 DropDownList 的这一事件发生在 Load 之后(参看我的另一篇文章),而我们的那些 Label 中的文本就是在 Load 这一步加载的。 我使用 cookie 来记录用户对于语言的偏好(其实我还记录其他一些偏好信息,比如分页的时候每页的记录条数,喜欢的模版等)。因此,我的方案是:在 SelectedItemChanged......[阅读全文]

posted @ | Feedback (6) |

摘要:我的 Web 服务器已经挂了快两个星期了。上个星期一我打电话过去,得知这件事是因为公安局的检查,据说是那台服务器上查到了指向非法站点的链接。本来以为这件事情一两天就可以解决,所以也没把它看得太严重。结果,两个星期过去了,打电话过去,才告诉我交涉已经有结果,过了休息日,到星期一就可以拿到数据资源,数据恢复后就可以使用了。 我支持国家的相关打击活动,也理解同为“受害者”的虚拟主机提供商的难处。但这里有两个问题: 1。为什么没有做定期的数据备份工作。“受害者”说他们备份了,但备份文件是存在同一台服务器中的,这样当服务器被检查,当然也就不可能及时地更新主机设置,以最大限度的减少损失。 2。损失发生后,没有和客户主动联系开临时服务器的事宜,只是一直等待交涉结果。“受害者”说他们发传真给部分客户、向他们询问了是否要开临时服务器的事情。但第一,像我们这样的个人用户,很少会有传真的;第二,为什么不首先主动开了临时服务器? “受害者”,你的商业信誉就是这么保护的吗?...[阅读全文]

posted @ | Feedback (3) | Filed Under [ 日常生活 ]

摘要:平日里项目紧张,不怎么写blog,也怎么读blog,周末当然是我blog的时间,我尝试着每个周末都写些东西。今天看到了 ceocio 关于 XHTML + CSS 的一个讨论:http://blog.joycode.com/ceocio/archive/2004/09/03/32312.aspx我看到帖子中大多谈的是下载速度与开发习惯等问题,我想从另一个角度尝试写一些我对这个问题(特别是 CSS)的看法: 首先我给出一个截图,这是 ceocio 举出的一个 XHTML + CSS 制作的页面在 Mozilla 浏览器“眼”中的效果。是不是不够理想啊?(或许看到这里,下面的文章你已经知道我要写些什么了) 浏览器市场 作为 Web 站点来说,大多数时候面向 Internet 公开,你很少会要求访问者必须使用某种特定的浏览器来浏览你的站点(虽然你可以建议,但仍然无法强求),但你还希望能够最大限度的预料到访问者将要看到的页面效果,你还希望这个效果不要过于差劲。 比如 tinydust.net 的访问统计,其实还是有不少用户使用非 IE 浏览器的,而国内很多 Web 作者,特别是 javascript 脚本作者,只会考虑 IE 的效果,丝毫不会顾虑非 IE 浏览器是否有脚本错误,甚至,我见过一个站点,干脆用脚本把非 IE 浏览器访客“拒之门外”! 然后就说 IE,从 4.0 加入 DHTML 功能开始,到 5.0 基本实现 CSS 1.0 和 W3C DOM Level 1,到 5.5 完善了一些 CSS 和 DOM 方面的功能。(而后从 5.5 到 6.0 在 CSS 和 DOM 方面变化不大)由于 Windows 2000 中初始安装的是 IE 5.0,Windows XP 开始初始安装 IE 6.0,而目前 Windows 2000 还有大量用户使用,也就造成了 IE 5.0 在访问者中的比例还是比较大的。目前,各浏览器所占比例大约为:IE 6.0: 三分之一强; IE 5.5 三分之一; IE 5.0 三分之一弱; 其他 10%。 因为 HTML 的标准化工作展开的比较早,各种浏览器在对 HTML 的实现上基本上都是按照 W3C HTML 3.2/4.0/ XHTML 等标准来进行的,可以说,同样的纯 HTML (无脚本及样式等)在不同浏览器下的效果差异是很小的,基于纯 HTML 的页面设计效果是可控的、可以预见的。 回顾一下当年的 IE 和......[阅读全文]

posted @ | Feedback (35) |