谦卑的程序员






         静水流深

August 22, 2009

怎样在Visual Studio 2005中调试WSH脚本

Filed under: 未分类 — Eric Tou @ 12:13 pm
Tags: , , ,

  最近收到一堆VBScript要调试。VBScript是一个很有迷惑性的名字,ASP用的脚本语言可以是VBScript,Office里的VBA在我看来也是一种VBScript,显然这次的一堆.vbs文件不属于以上情况。为什么要在标题中说是“调试WSH“,先把概念搞清楚。

什么是WSH

  WSH(Windows Script Host),基于Windows的脚本语言宿主(运行)环境,好比cmd.exe之于batch命令。使各种语言(VBScript、JScript,如果没记错还有Perl之类的)能够在其中运行,执行Windows的管理等自动化工作。

  至于真正提供操纵Windows的对象模型,来自于如WMI(Windows Management Instrumentation)和ADSI(Active Directory Service Interfaces)

  概念就简单地说说,需要严谨的理论的请查找MSDN。Microsoft TechNet Script Center是汇集了相关的资源。话说现在MS又推PowerShell,学无止境啊。

如何调试WSH脚本

  需要用到cscript.exe和wscript.exe,两者的区别是控制台输出和窗口输出。文件位置在\windows\system32目录下,如果旧的Windows版本找不到此文件,可以下载安装Microsoft Windows Script。

  以VBScript脚本为例,如果要调试Sample.vbs

  运行

    cscript  yourscript.vbs //X

  或者

    wscript  yourscript.vbs //X

  会弹出Just-in-Time Debugger选择窗口

vs_jit_debugger

  选择更“高级”的Visual Studio 2005。(如果不能弹出此窗口,请部分参考该链接的修改注册表的部分)

script_debugging_in_vs

  标准的Visual Studio的调试界面,该有的调试功能都有,比逐行加Msgbox要强多了,好好享受吧。

August 17, 2009

程序员笑话之磨叽

Filed under: 未分类 — Eric Tou @ 11:59 pm
Tags:

  在非专业人士眼中,程序员都是带有神秘色彩的人物

  他们虽然不勤劳,但他们诚实,而且勇敢。

  某日一非专业人士终于鼓起勇气问某程序员:

    “你们每天都说磨叽一下是什么意思啊?”

  程序员:

    “~!@#¥%……&*”

  场景重现

    程序员A对程序员B:“你做好了么,你做好了我们磨叽一下。”

    程序员B对程序员A:“马上就好,不要着急,只要最后磨叽一下就OK了。”

  小贴士

    理论上程序员的统一语言是英语,没有统一学习某种方言的倾向。当然有口音的同学除外。

    Merge:读音类似me-ji非mo-ji,指某种把两堆稀泥和成一堆稀泥的高深领域技术。

May 15, 2009

开源项目托管站点的选择

Filed under: 未分类 — Eric Tou @ 2:36 pm
Tags: , ,

  并非是要搞什么开源项目,只是想把一些自己做的东西找地方放一下,也可以方便和别人交流。虽然Dreamhost的空间也提供Subversion的支持,但是要把整个环境搭起来还是需要耗费很多精力的,还是使用现有的成品吧。

  需要注意的是这些服务托管的站点一般都是针对开源项目的,也就是说需要遵照一定得开源协议将你的内容开放给大众,如果不了解开源的同学需要先做做功课。当然我没有什么好担心的,因为基本没有什么很有价值的东西,唯一担心的是内容太差被别人鄙视。

  其次为什么我要说“内容”而非“源代码”,是因为你不但可以将你的项目程序代码host在托管站点,同样也可以host以文档为重要内容的项目,比如项目的文档手册,比如一本书的翻译,甚至是一本新书(合作编写的情况居多)

言归正传,我们怎样选择

1. 选择站点即是选择社区,决定你会得到怎样的反馈

  不同的社区活跃的人群不一样,侧重的技术面也不一样。C++、Java、.Net或者服务器端、桌面端,选择不同的社区你得到的关注、反馈和支持将大不相同。

2. 搞清楚你需要怎样的服务

  你是仅仅想要存放你的内容还是要开始一个认真的开源项目?你使用哪种源码管理工具?CVS、SVN还是VSTS,你需要多大的空间?你需要缺陷管理系统、论坛、wiki甚至是项目的网站么?

3. 站点的速度和稳定性很重要

  站点的访问速度,特别是源码管理工具的访问速度很重要,服务器所处的位置是需要考虑的因素。另外,基于我们当前所处的环境,某些大的托管站点往往无法保证稳定的访问(比如sourceforge)

那我们有哪些选择

Sourceforge.net

  老牌站点,有无数的开源好项目,提供的服务也全面,用起来有点繁琐。更重要的是国内的话,速度比较慢,而且“不稳定”啊。

Google Code

  Google的产品,后起之秀,提供基本的功能,使用简单,而且只需要一个Gmail账号就可以开始使用。

  已经有一篇《开源,选择Google Code还是Sourceforge?(修订版)》将以上两者做了详细的比较,就不再啰嗦了

Codeplex

  从微软最近对开源的暧昧态度来看,没有这样一个站点是不可能的。其特点是支持VSTS,面向.Net开发人员。

Project Kenai

  Sun推出的开源托管站点,面向Java的开发者。还是beta,最近这么一收购,前景很不明朗啊。

Launchpad

  比较有规模的开源托管站点,比较引人注意的项目有Ubuntu、MySQL和Wordpress。该站点还支持付费的商业软件项目。

BerliOS

  看域名是德国的站点,有多语言的支持。

CodingTeam

  法语站点,没看见多语言的选择,用起来会比较有困难。

结论

  上面提到的选择中,后面几个基本就是凑数,一般不太会使用。如果你只用.Net开发,需要VSTS支持,那你的选择基本上只有Codeplex。至于其他的选择主要集中在Sourceforge和Google Code。简单来说Sourceforge复杂、麻烦,如果你想开始一个严肃认真的开源项目,就选择它。Google Code简单易用,如果你只是想有个地方存放代码,和一些人共享,或者尝试性地开始一个开源项目,那就Google Code。

  所以我的选择就是Google Code了。

February 6, 2009

将你的Linux安装入USB设备

Filed under: 未分类 — Eric Tou @ 11:16 pm
Tags: , , , , , , , ,

  几天前介绍了《如何创建你自己的Windows Live CD》,但是可以没能把制成的Live CD给Portable化,塞进我的USB移动硬盘里。今天转过头来看看Linux的部分如何。

  Linux的世界大部分的发行版都提供Live CD,比如我现在在用的很流行的“有奔头”(Ubuntu)。有Live CD的好处是:1. 当你初次使用一个发行版本时,你可以先试用再决定要不要安装;2. 通过Live CD启动的系统在某些场合增加安全性。

如何制作自己的Linux Live CD

  当然,如果对现成的Live CD不够满意,也可以通过工具创建自定义的Linux Live CD。

  Revisor是一个创建自定义的Fedora Live CD和安装盘的工具。

  而对于Ubuntu则有Reconstructor

  当然对于绝大部多数的发行版,你还可以使用mklivecd脚本工具为当前扇区的数据创建“快照”并将其压缩入ISO镜像,以作为已安装系统的实时复制。

如何将Linux安装入USB设备

  Ubuntu的wiki里详细介绍了将其安装入USB设备的几种方法:

  1. 使用Linux环境下的工具Portable Linux或Live USB Creater自动创建。
  2. 使用安装CD直接安装。
  3. 将Ubuntu的ISO镜像隐藏在USB设备的分区。
  4. 将ISO镜像(中的文件)复制到USB设备。
  5. 使用Windows环境下的工具UNetbootin安装。

  几种方法各有优劣,同学们可以根据自己的情况选择。如果不介意USB设备的损耗的话,方法2:使用安装CD直接安装是比较简单方便的。

  其他的发行版方面,在Pendrive Linux对相当多的发行版都有介绍可供参考。

  当然,如果你觉得以上的操作步骤仍然很麻烦;你不介意使用哪个版本的Linux;你对运行速度很介意;你的USB设备容量很小;你只需要一个GTD的Linux系统在你的USB设备里,你可以试试“真TM小的Linux”Damn Small Linux)。

Damn Small Linux

  DSL的最初开发目的是尝试可以将多少应用程序塞入一张50MB的Live CD。之前是一个个人工具,逐渐发展成为社区项目。

  DSL可以在光盘、硬盘、或USB设备上使用作为本地安装系统或是多用途的备份/恢复系统使用。虽然容量只有小小的50MB,但包含了媒体播放、FTP客户端、Web浏览器、电子表哥、邮件客户端、文字处理软件、文本编辑器、图片工具、PDF阅读器、文件管理器、即时通讯软件等等实用软件。

  DSL麻雀虽小,却也能做以下的事情:

  • 从business card CD以Linux Live CD启动
  • 从USB设备启动
  • 在宿主操作系统中启动(能在Windows里运行)(注:不就是虚拟机么)
  • Run very nicely from an IDE Compact Flash drive via a method we call “frugal install”(这个不懂,所以不翻译)
  • 从硬盘安装转换为Debian OS
  • 可以在486DX 16MB内存上运行
  • 全速运行只需128MB内存
  • 可以通过模块来扩展(还是得自定义的,没有一劳永逸这回事)

  关于DSL的安装可以参照FAQ的这里。如果使用虚拟机的话注意是2.4内核。下图是DSL的桌面

damn_small_linux_desktop

后记

  在查找资料的时候看到某人提到,Live CD的主要作用是备份和恢复,深以为然。在系统崩溃了以后,能快速地弄起一个操作系统,里面该有的都有,就是这样。当然因为媒体的只读特性,还适合用来干些不想或不需要留痕迹的事情,安全。至于USB媒体方面,可说是东西在别人手上自己的数据不安全,东西在自己手上别人的数据不安全,还是要谨慎使用啊。

  其实了解到这些东西的起因还是几个月前一个同事问起怎么备份Linux的分区(貌似Ghost不行),于是一通Google查到了Partimage,一个与Ghost类似的工具,但支持Ext2/Ext3、Reiser3、FAT16/32、NTFS、HPFS、JFS、XFS、UFS、HFS文件系统,囊括了Linux、Unix、Mac OS、Windows平台。该工具还被收录在SystemRescueCD里方便使用。(机器挂了总得有个环境能运行吧)于是从SystemRescueCD的扩展阅读开始了Live CD之旅。

  最近似乎关于操作系统方面写得多了些,不过这也是根本,摆弄不好系统还是要被人鄙视的,不过大致上也告一段落了。Live CD也好,USB设备也好,除了备份和恢复的目标外,其他的似乎都能通过虚拟机解决(这个对于程序员来说是应该掌握的东西),之后把话题转向虚拟机方面。

  前一阵子做了点功课,经过一段时间的发展,应用的逐渐成熟,虚拟机(或者说虚拟化)开始成为一个越来越大的话题,不再是来一篇《VMWare图文教程》什么的就能大致概括得了的了,慢慢来吧。

June 25, 2008

笔记 - 《Head First设计模式》第一章 - 策略模式

Filed under: 未分类 — Eric Tou @ 7:32 pm
Tags: , , ,

一、鸭子问题,继承的缺点

  继承是OO中最让人见猎心喜的一个元素。当我们初步掌握之后,会很轻易地使用其来归并同类项,创建Super Class,减少代码的重复。(是否真的如此,取决于你对重复的定义。)
  比如本书中提到的模拟玩具鸭的例子。创建一个名为Duck的Super Class,包含了quack、swim、fly等方法,继承该Super Class的Sub Class可以轻松地继承这些方法,而不需要再一次地在Sub Class中去编码实现。这是一种形式上的减少重复。
  当然我们很快会发现鸭子的叫声也许各不相同,有的鸭子会飞,有的则不会。因此在继承了Super Class后,各个Sub Class可能还需要用到重载、覆盖、隐藏等继承元素。
  问题出现了。每当规格改变,出现新的玩具鸭品种,继承了Super Class之后,我们都必须要重新检查Sub Class的quack、swim、fly等各个方法,以确定是否要将其重载、覆盖还是隐藏。而如果Super Class中的各个方法的实现有所变化…。OO的继承多态在实际的应用中,是我们需要努力避免的。

  现在我们开始意识到继承可能不是答案。在找到新的解决方案之前,先列出继承可能导致的缺点
    A 代码在多个Sub Class中重复
    (当代码编译时,继承的代码确实重复创建于Sub Class的内存空间,所谓的减少重复只是减少了编码人员手工输入的重复)
    B 运行时的行为不容易改变
    (因为行为的代码在编译时已经生成,而非在运行时动态加载)
    C 很难知道所有鸭子的全部行为
    D 改变会牵一发动全身,造成其他鸭子不想要的改变

(more…)

May 7, 2008

案例 - (批处理)以日期为文件名创建文件

Filed under: 未分类 — Eric Tou @ 4:04 pm
Tags: ,

  一个同事问我:“怎样以日期为文件名创建文件,用任何编程语言,然后每天自动运行(在Windows上)”
  我不认为我们需要Java,C#之类的语言,一个批处理文件加上计划任务就能解决问题。

  制定路线后,需要做的就是Google查询。问题是你如何选择你的关键字,我的关键字是”dos create file name by date”,得到的结果在.

  最终的代码如下:

    set yymmdd_hhmmss=%date:~12,2%%date:~4,2%%date:~7,2%_%hh% %time:~3,2% %time:~6,2%
    copy nul %yymmdd_hhmmss%.txt

  以上代码会在当前目录下创建一个以当天日期命名的文本文件,再加上计划任务,就能每天创建该文件。看上去很简单不是么?

  但是你在中文的Windows上测试过么?得到什么样的结果?

  好吧,本文的重点不是怎么写这个批处理文件。重点在于当你在不同的语言平台上工作时,语言确实是有关系的因素,你必须对此加以关注。

WPMU Theme pack by WPMU-DEV.