简单生活日记 活着,然后去爱。简简单单,做个快乐的小孩!

3May/090

杂感:面对CPU的困惑

CPU种类真多

单核、双核、四核、八核……

90纳米、65纳米、35纳米……

再倒过来搞些个低功耗、Atom之类……

我不知道CPU有多强

可是,我怎么知道我的CPU到底有多强?而我的应用程序又到底要吃多少CPU?

说实话,我真的不知道;或者说到目前为止还不知道。

我不知道我写的代码怎样

一个严峻的问题:作为一个开发人员,多多少少会遇到性能的挑战;或者说每时每刻都会有来自性能的忧虑。

然而,每当我写下一行代码,我确实不知道这行代码到底要运行多少个时钟周期;如果我写下一个循环,我也不知道这个循环跑1000次到底要多久。

如果这些代码中还涉及到内存IO、硬盘IO甚至网络的话——好吧,恕我无在——我顶多能说,这里应该会是在10秒之内跑完。

应该能够找到一些办法

好吧,难道我、或者我们真的就只能坐着发呆了么?方法也还是有一些的吧,或者说是有一大堆的。

事实上,有很多或理论的、或实践的前辈、专家已经、或者正在作出努力,得出大堆的工具、方法、理论。

我想,我们凡人要做的,应该是挑选、学习、组合与应用。

好像是吧,好像不是

静下心来想想看,搜搜看:

好吧,学学看,兴许能懂,兴许能用。

我们一起来许愿

啊哈,作为开发人员,我们多么期望生在一个资源无限的世界啊!

Tagged as: , , No Comments
3Apr/090

链接:C++与STL

C++ Reference

STL Study Site

VC Reference

附送

27Mar/090

笔记:Windows Code Page

Windows Code Page相关函数

EnumSystemCodePages Enumerates the code pages that are either installed on or supported by a system.
GetACP Retrieves the current ANSI code page identifier for the operating system.
GetCPInfo Retrieves information about any valid installed or available code page.
GetCPInfoEx Retrieves information about any valid installed or available code page.
GetOEMCP Retrieves the current original equipment manufacturer (OEM) code page identifier for the
IsValidCodePage Determines if a specified code page is valid.

Windows Code Page及其对应命名(中文部份、出处

Descriptive Title Windows Code Page
Charset names (preferred name in bold)
CESU-8  
CESU-8, csCESU-8
Chinese National Standard (GB18030) 54936
GB18030, ISO-4873:1986
Chinese Simplified (EUC) 51936
EUC-CN, x-euc-cn
Chinese Simplified (GB2312) 936
gb2312, chinese, CN-GB, csGB2312, csGB231280, csISO58GB231280, GB_2312-80, GB231280, GB2312-80, GBK, iso-ir-58, CP936, MS936, windows-936
Chinese Simplified (GB2312-80) 20936
x-cp20936
Chinese Simplified (HZ) 52936
hz-gb-2312
Chinese Simplified (ISO 2022) 50227
x-cp50227
Chinese Simplified (Mac) 10008
x-mac-chinesesimp
Chinese Traditional (Big5) 950
big5, cn-big5, csbig5, x-x-big5, CP950, Big5-HKSCS
Chinese Traditional (CNS) 20000
x-Chinese-CNS, x-Chinese_CNS
Chinese Traditional (Eten) 20002
x-Chinese-Eten, x_Chinese-Eten
Chinese Traditional (Mac) 10002
x-mac-chinesetrad
23Mar/090

让Expat支持GBK

Expat是什么?

由第一届XML CUP获得者James Clark贡献的、鼎鼎大名的Expat XML解析器,基于SAX模型、解析效率极高。被众多知名软件用作XML解析模块。Expat自身以c代码的形式提供,但已有perl、python等多种移植版本。在很多系统中甚至成为了标配类库。

Expat与GBK

Expat内建支持UTF-8、UTF-16、大&小ASCII编码;很不幸,唯独不支持GBK编码。如果你需要使用Expat处理GBK编码XML的话,我有两点建议:

  • 预先将GBK编码的XML文件转成Unicode文件;
  • 利用Expat编码扩展机制进行扩展;

如果你选择第2种方案,执意要扩展Expat的话,也好办;参考以下步骤:

  1. 调用XML_SetUnknownEncodingHandler,声明处理UnknownEncoding事件;
  2. 实现UnknownEncoding事件处理程序;关键点为填充一个XML_Encoding结构;
  3. 实现GBK编码到Unicode的转换函数;

是的,就这么简单。

附录:


更新

  • 20090327: expat源码包里有个demo: xmlwf,这个工程里已经演示了对于非内置编码的支持方式——有两个叫做codepage的文件,可以认真参考一下。
  • 容我再啰嗦一句,出于性能考虑,我还是建议预先将GBK编码的XML文件或字符串先转成Unicode再进行处理
18Feb/090

链接:C++与Web Service

参考文档

如果使用VC调用Web Service则可以参考我以前发的小文档:

如果是要使用纯C进行Web Service开则稍有点繁:

开发工具

服务提供

6Jan/090

Windows远程桌面使用技巧

Windows提供的远程桌面服务应该说是一个比较实用的功能;特别是有多台机器需要管理的时候,远程桌面几乎必不可少。下面摘录几点Windows远程桌面使用过程中的小技巧。

基于MMC的远程连接客户端

Windows XP就自带远程连接客户端,其界面为每个连接独立一个窗口。当需要同时连接多台机器时,就会发现任条栏里多了好多窗口。

安装附录中的Admin Pack后,会多出来一个基于MMC的远程连接客户端,其界面如下图所示:

Windows MMC

连接到控制台

在一些特殊的情况下,你可能希望你连接上去之后和机器本机显示器使用同一个会话(即远程连接之后就相当于在目标机器本机登录),那么可以在基于MMC的客户端更改连接的属性:

连接到控制台

如果是基于系统自带的远程连接,则可以使用mstsc命令行工具:

  • 如果是Windows XP则带上/console,例如:mstsc /console 192.168.1.1
  • 如果是Windows 7则带上/admin,例表:mstsc /admin  192.168.1.1

对于其它版本方法类似,可以参考“mstsc /?”的提示:

mstsc /?

在会话之间切换

有些时候,你可能连接了多个会话到同一个Windows上;再次登录的时候却发现搞错了会话,是不是要断开重连呢?其实你只要在按CTRL+ALT+END,调出目标机器上的任务管理器就可以随意跳来跳去了:

会话切换

使用磁盘本机磁盘

我发现很多人会使用共享文件夹的方式在远程机器和本机之间共享文件。

其实,远程桌面功能允许你直接把磁盘、甚至本地打印机“连接到”远程机器:

连接本地资源

附录

4Jan/090

VS调试技巧两则

强制使用不匹配的源文件

如果没有正确设置pdb路径,又或者VS临时出个小毛病,调试人员难免会碰到因为源代码与pdb不匹配而不能命中断点的case。

其实,可以更改VS的调试选项,强制VS使用非精确匹配的源文件,如下图:

http://docs.google.com/File?id=dgq9kqvq_383fk7b95cn_b

自定义Watch窗口显示格式

调试的时候在Watch窗口可以观察到很多信息,然而不知道你想没想过,Watch窗口里边每个条目的格式都是怎样确定的呢?

其实,Watch窗口用于格式化不同变量的定义都在这个文件里:%VSDir%Common7\Packages\Debugger\autoexp.dat。可以更改这个文件以达到自定义Watch窗口条目显式格式的目的。

autoexp.dat的语法可以看文件里边的注释;亦可参考:VC IDE中Watch窗口的特殊格式

7Apr/070

Xen bridge network trouble shooting tip~

Xen桥接网络非常灵活,然而逻辑和管理方面也还算简单。

桥接设备

  • bridge, 网桥;一般起名为:xenbr0, xenbr1, etc.
  • vif, 虚拟网络接口;一般起名为:vif0.0,vif0.1, etc.
  • veth/eth, 虚拟网络设备;一般起名为:eth0, etc.

桥接工具

  • /etc/xen/script/network-bridge, 网桥操作脚本
  • /etc/xen/script/vif-bridge, 虚拟接口操作脚本
  • brctl 工具,事实上以上两个脚本均调用了它

排查步骤

  • brctl show; 再看桥接是否OK。 
  • ethtool peth; 先看物理网卡通不通。
  • ifconfig vif; 看各虚拟接口是否正常。
  • ifconfig eth/veth; 看看虚拟网络设备是否正常。

链接

28Mar/070

Mono – Linux .NET CLR~

Mono 是什么?

Mono 是一个用于在 Linux, Solaris, Mac OS X, Windows Unix 等系统上开发 .NET 应用的运行时环境(.NET CLR)。作为受到 Novell 赞助的开源项目, Mono 拥有活跃的社区力量,并有信心成为 Linux 应用开发的首要选择。

特性

工具

MonoDevelop, Mono 开源项目之中包含的一个IDE工具,助您在 Linux 上轻松开发 .NET 应用。

MonoDevelop Screenshot

图一、MonoDevelp IDE 屏幕截图

链接

注:本文主要内容编译自 Mono 官方网站。

6Mar/070

Xen Networking~

Xen网络结构相当灵活,适当配置可以“轻松”实现dom0/domU与物理网络三者之间的复杂拓扑。

联接方式

  • bridge 桥接模式,应用最广
  • route
  • nat

桥接模式

Xen Networking

图一、Xen 桥接模式示意图

参考链接