存档

2009年7月 的存档

每个网民都该知道的安全知识

2009年7月31日 hashei 1 条评论

当今网络世界,每台电脑都有人惦记着,刚学会使用工具的小伙子们惦记着拿你的QQ来练练手,放两个木马在你的电脑里满足一下“成就感”,有明确利益诉求的则看看你没有什么热门的网络游戏帐号,再高级一点的犯罪团伙则瞄着你的银行帐号、支付宝帐号,可以说是充满着腥风血雨。除了这些无差别攻击,要是你被人“盯”上,而电脑还缺少必要的保护,那么就是新一出“我家家门常打开”了。

想不到霍炬在谈论高级编程之余还为广大网民考虑的如此周到,写了一篇《匿名网民的安全指南》,现在连载到第二部分,大家可以点击下面链接去看看。

        匿名网民的安全指南(1)           匿名网民的安全指南(2)

内容很入门,当然是对于我这样的IT从业人员来说, 一般人,特别是小姑娘看到估计还是会头大。不过像现在报纸、电台里一直宣传的反电话、短信诈骗一样,讲的多了大家自然也会慢慢注意,特别是对于“急需提高自己的安全级别的”人来说,应该会有帮助。

因为“6 本文会时常修补增加内容”,所以我就不转载了,不过这个系列的文章应该还没完,因为现在最重要的无线安全没有介绍到。既然如此,那我就贴上关于无线安全的文章。

       配置无线的方法 Geek to Live: Set up a home wireless network

       加固无线的方法  The ABCs of securing your wireless network

       否则的话,就等着 How to Crack a Wi-Fi Network’s WEP Password with BackTrack

       如果你认为无线密码被破了大不了让别人蹭蹭网,只要那小子不下BT也没啥关系,那你可要注意了你们已经在同一个局域网中,你的共享资源都在别人的眼皮底下,你的C盘、D盘、E盘过不了多久也会对别人开放,你发送的每一个网络包别人都可以截取。

当然避免的方法很多,如果你对霍炬的两篇文章看的云里雾里,那么最简单的就是下载个360安全卫士,做一下“安全体检”,这样本机的安全至少有了保证,但是在公共计算机上的安全主要靠安全意识了。如果你看不明白无线安全的那三篇文章(或者你懒得看英文),那么等俺有空了,会翻译一下。当然时间也许要个几天,因为我喜欢每步步骤都做一下,确认文章中的操作可行,才会发出来。

程序编写中的Java性能关注点

2009年7月30日 hashei 没有评论

《编写符合GC胃口的程序》一文中我分享了两篇PDF,javaProgrammingPerformanceTipsGCFriendlyProgramming,但是没有展开介绍,看过的同学可能知道了how,但是不清楚why。这里分享编程随想的博客中的几篇关于java性能优化的文章,感兴趣的同学可以去看看,我就不转了。

  1. Java性能优化[0]:概述
  2. Java性能优化[1]:基本类型 vs 引用类型
  3. Java性能优化[2]:字符串过滤实战
  4. Java性能优化[3]:垃圾回收(GC)
  5. Java性能优化[4]:关于finalize函数

这位同学的主博看起来应该是blogspot上的,虽然在csdn上都有相应的镜像,但是链接做的都是blogspot,所以各位准备好梯子。

分类: 性能优化 标签: ,

WebSphere下应用程序更新

2009年7月25日 hashei 4 条评论

先介绍我们常用的直接上传方法

一般来讲,单机版的was,应用程序部署在 %washome%/profiles/%AppProfile%/installedApps下,根新的时候可以直接把新文件上传到这个目录相应位置,但是如果要改动web.xml等重要文件,还需要修改另外一个地方:%washome%/profiles/%AppProfile%/config/cells/CellName/applications/AppName,这里放有包括web.xml等一些配置文件信息,千万不能遗忘(可以先看一下这目录下有些什么文件),否则重启应用后修改不会生效

如果是ND环境的was,并且做了集群,那么要注意集群所在的每个app profiles下都有installedApps应用程序目录需要修改,同样config下相应文件需要修改(如果有对这目录下的文件进行过修改的话),还一定要注意dm profile的config目录下也需要修改,否则重启dm后所有修改会回滚会最初的样子。最好把变动过的web.xml等文件也更新到dm config下的应用程序包中,我遇到过即使修改config目录下文件,重启dm节点后依然回滚的情况。

Websphere也支持通过控制台更新和删减单个应用文件

这是WebSphere推荐的方法,但是大家不常用罢了,有兴趣的可以看看,聊当多知道一种方法。

要查看此管理控制台页面,单击应用程序 > 企业应用程序

要查看为应用程序的配置指定的值,单击列表中的应用程序名。显示的应用程序设置页显示已指定的值。在设置页上,您可以更改现有的配置值并且链接到可以协助您配置应用程序的其他控制台页面。

要管理已安装的 J2EE 企业应用程序,启用列表中的应用程序名旁边的选择复选框,然后单击按钮:

按钮

结果操作

启动

试图运行应用程序。在成功启动应用程序之后,如果应用程序在所有部署目标上启动,则应用程序的状态更改为已启动,其他情况下,状态更改为部分已启动

停止

试图停止应用程序的处理。在成功停止应用程序之后,如果应用程序在所有部署目标上停止,则应用程序的状态更改为已停止,其他情况下,状态更改为部分已停止

安装

打开可帮助您将应用程序或模块(如 .jar、.war 或 .rar 文件)部署到服务器或集群的向导。

卸载

从 WebSphere Application Server 配置库删除应用程序,并且从所有节点的文件系统删除应用程序二进制文件,而这些节点是配置被保存和与节点同步之后安装应用程序模块的节点。

更新

打开可帮助您更新部署在服务器上的应用程序文件的向导。您可以更新整个应用程序、单个模块、单个文件或一部分应用程序。如果新的文件或模块与服务器上已有的文件或模块同名,则新的文件或模块将替换现有文件或模块。如果服务器上还不存在该新的文件或模块,则将它添加到已部署应用程序。

更新应用

继续更新跨越一个集群安装在多个集群成员上的应用程序。在您更新应用程序的文件或配置之后,单击更新应用,以在安装应用程序的集群的所有集群成员上安装应用程序的已更新文件或配置。更新应用依次为每个集群成员执行下列操作:

  1. 保存已更新的应用程序配置。
  2. 停止一个节点上的所有集群成员。
  3. 通过同步配置更新节点上的应用程序。
  4. 重新启动已停止的集群成员。
  5. 为所有具有集群成员的节点重复步骤 2 到 4。

此操作在提供应用程序的持续可用性的同时,更新多个集群成员上的应用程序。

除去文件

删除已部署应用程序或模块的文件。除去文件从 WebSphere Application Server 配置库和从安装文件的所有节点的文件系统中删除文件。 如果在集群上部署了应用程序或模块,则在除去文件后,单击更新应用以首次展示跨整个集群的更改。

导出

访问“导出应用程序 EAR 文件”页,您可以使用该页面将企业应用程序导出到您选择的位置上的 EAR 文件。使用导出操作备份已部署应用程序并且保存它的绑定信息。

导出 DDL

访问“导出应用程序 DDL 文件”页,您可以使用该页面将企业应用程序的 EJB 模块中的 DDL 文件(Table.ddl)导出到您选择的位置。

使用此页面更新已安装在服务器上的企业应用程序、模块或文件。

要查看此管理控制台页面,完成下列步骤:

  1. 单击应用程序 > 企业应用程序
  2. 选择您要更新的已安装的应用程序或模块。
  3. 单击更新

单击更新显示帮助您更新部署在单元中的应用程序文件的页面。您可以更新整个应用程序、单个模块、单个文件或一部分应用程序。如果新的文件或模块与服务器上已有的文件或模块具有相同的相对路径,则新的文件或模块将替换现有文件或模块。如果服务器上还不存在该新的文件或模块,则将它添加到已部署应用程序。

应用程序名

指定您在“企业应用程序”页面上选择的已安装(或部署)的应用程序的名称。

完整的应用程序

更新选项下,指定用新的(已更新的)企业应用程序 .ear 文件替换已安装在服务器上的应用程序。

选择此选项后,指定 .ear 文件是在本地还是在远程文件系统上,并指定应用程序的完整路径名。此路径在安装前提供已更新的 .ear 文件的位置。

如果浏览器和更新文件或模块在同一机器上,无论服务器是否在该机器上,使用本地文件系统本地文件系统可用于所有更新选项。

如果应用程序文件驻留在当前单元上下文的任何节点上,使用远程文件系统。 如果 Node Agent 或 Deployment Manager 正在所选节点上运行,您可以浏览节点的整个文件系统。浏览期间,仅显示 .ear、.jar 或 .war 文件。另外使用远程文件系统选项,以指定已在运行应用程序服务器的机器上的应用程序文件。例如,Windows 机器上的字段值可能是 C:\WebSphere\AppServer\installableApps\test.ear。

注: 应用程序安装期间,通常从运行浏览器的客户机将应用程序文件上载到部署它们的、在运行管理控制台的服务器上。在这些情况下,使用运行管理控制台的 Web 浏览器选择 .ear、.war 或 .jar 模块,以上载到服务器。然而在某些情况下,应用程序文件驻留在单元中的任何节点的文件系统上。要让应用程序服务器安装这些文件,使用远程文件系统选项。

指定有关 .ear 文件的必需的信息后,单击下一步显示更新应用程序文件的向导。此更新向导与安装向导类似,它提供了指定或编辑应用程序绑定信息提供字段。根据需要完成更新向导中的步骤。

当更新了完整的应用程序时,卸载旧的应用程序并安装新的应用程序。当保存配置更改并随后同步配置更改时,在应用程序将运行的节点上扩展应用程序文件。如果当更新应用程序时它正在节点上运行,则停止应用程序、更新应用程序文件并且启动应用程序。

单个模块

更新选项下,指定替换在已安装的应用程序中的模块,或将模块添加到已安装的应用程序。模块可以是 Web 模块(.war 文件)、Enterprise Bean 模块(EJB .jar 文件)或资源适配器模块(连接器 .rar 文件)。

选择此选项后,指定模块是在本地还是在远程文件系统上,并指定模块的完整路径名。此路径在安装前提供已更新模块的位置。要获取有关本地文件系统远程文件系统的信息,请参阅以上完整的应用程序的描述。

要替换模块,模块的相对路径(模块 URI)的值必须与要在已安装的应用程序中更新的模块的路径匹配。

要将新模块添加到已安装的应用程序,模块的相对路径的值能与已安装的应用程序中模块的路径匹配。此值指定新模块期望的路径。

如果您正在安装独立的 Web 模块,则指定上下文根的值。上下文根与定义的 servlet 映射(来自 .war 文件)进行组合,以组成用户输入以访问该 servlet 的完整 URL。例如,如果上下文根是 /gettingstarted 并且 servlet 映射是 MySession,则 URL 是 http://host:port/gettingstarted/MySession。

指定有关模块的必需的信息后,单击下一步显示更新应用程序文件的向导。更新向导与安装向导类似,它提供指定或编辑模块绑定信息的字段。根据需要完成更新向导中的步骤。

在添加或更新了单个模块后,当保存配置更改时,新的或更新的模块被存储到 WebSphere Application Server 配置存储库的已部署应用程序中。当这些更改与节点一起同步时,模块被添加或更新到节点的文件系统中。如果当添加或更新模块时应用程序正在节点上运行,则发生下列某个情况:

· 对于到 Web 模块的更新,停止正在运行的 Web 模块,更新 Web 模块文件然后启动 Web 模块。

· 对于模块增补,在节点上扩展添加的模块之后,在运行应用程序的应用程序服务器上启动这个添加的模块。不需要重新启动应用程序。

· 如果应用程序的类装入器策略设置为单个以使所有的模块共享一个类装入器,则对于模块级别更改,停止和重新启动整个应用程序。

· 如果与 WebSphere Application Server 一起配置的 Security Provider 不支持动态更新,则对于模块级别更改,停止和重新启动整个应用程序。

· 对于模块的其他更新,停止整个应用程序,更新模块文件,然后启动更个应用程序。

单个文件

更新选项下,指定替换在已安装的应用程序中的文件,或将文件添加到已安装的应用程序。

使用此选项更新应用程序使用的并且不是 .ear、.war、.rar 或某些情况下 .jar文件的文件。您可以使用此选项添加或更新不是作为应用程序中模块定义的 .jar 文件。要更新 .ear 文件,使用完整的应用程序选项。要更新作为应用程序中模块定义的 .war 文件、.rar 文件或 .jar 文件,使用单个模块选项。

选择此选项后,指定文件是在本地还是在远程文件系统上,并指定文件的完整路径名。此路径在安装前提供已更新文件的位置。要获取有关本地文件系统远程文件系统的信息,请参阅以上完整的应用程序的描述。

下一步,指定文件的相对路径的值。文件的相对路径必须从 .ear 文件的根开始。例如,如果文件位于 hello.jar 模块中的 com/company/greeting.class,则指定 hello.jar/com/company/greeting.class 的相对路径。

要替换文件,文件的相对路径的值必须与在已安装的应用程序中要更新的文件的路径匹配。

要将新文件添加到已安装的应用程序,文件的相对路径的值能与在已安装的应用程序中的文件的路径匹配。此值指定新文件期望的路径。

在添加或更新了单个文件后,当保存配置更改时,新的或更新的文件被存储到 WebSphere Application Server 配置存储库的已部署应用程序中。当这些更改与节点一起同步时,文件被添加或更新到节点的文件系统中。如果当添加或更新文件时应用程序正在节点上运行,则发生下列某个情况:

· 在应用程序元数据作用域(META-INF 目录)上添加文件时,或在任何应用程序作用域上或非 Web 模块中更新这些文件时,停止整个应用程序,添加或更新文件,然后重新启动整个应用程序。

· 在应用程序非元数据作用域(在 META-INF 目录外但不在任何模块中)上添加文件时,在不重新启动运行应用程序的情况下在文件系统中保存更改。

· 当文件添加到或更新到 Web 模块元数据(META-INF 或 WEB-INF 目录)时,停止运行的 Web 模块,添加或更新 Web 模块文件,然后启动此 Web 模块。

· 对于 Web 模块中的所有其他文件,在节点的文件系统上添加或更新文件,而没有停止应用程序或任何其组件。

部分应用程序

更新选项下,指定通过上载压缩文件更新已安装的应用程序的多个文件。根据已压缩文件的内容,单独使用此操作可以替换已安装的应用程序的文件,将新文件添加到已安装的应用程序或从该用程序将文件删除。在已压缩文件中的每个条目都作为单个文件对待,而来自已压缩文件的根的文件的路径都作为在已安装的应用程序中的文件的相对路径对待。

选择此选项后,指定已压缩文件是在本地还是在远程文件系统上,并指定已压缩文件的完整路径名。您将有可能使用本地文件系统,因为您正在上载压缩文件并且远程浏览仅适用于 .ear、.war 或 .jar 文件。指定有效的已压缩文件格式,如 .zip 或 .gzip。此路径在安装前提供已压缩文件的位置。此选项将已压缩文件解压缩到已安装的应用程序目录中。

如果浏览器和更新文件或模块在同一机器上,无论服务器是否在该机器上,使用本地文件系统本地文件系统可用于所有更新选项。

要替换文件,在已压缩文件中的文件必须有与在已安装的应用程序中要更新的文件相同的相对路径。

要将新文件添加到已安装的应用程序,在已压缩文件中的文件必须有与已安装的应用程序中的文件不同的相对路径。

已安装的应用程序中文件的相对路径由模块(如果文件在模块内)的相对路径和来自模块的根的用 / 分隔的文件的相对路径的并置组成。

要从已安装的应用程序除去文件,使用在任何归档作用域中名为 META-INF/ibm-partialapp-delete.props 的文件在已压缩文件中指定元数据。ibm-partialapp-delete.props 文件必须是 ASCII 文件,它列出在每行都有一个条目的此归档中要删除的文件。条目可以包含字符串模式,如识别多个文件的正则表达式。要删除的文件的文件路径必须相对于具有 META-INF/ibm-partialapp-delete.props 文件的归档路径。

要删除的文件的级别

要包括在压缩文件中的 Metadata.props 文件

应用程序

将 META-INF/ibm-partialapp-delete.props 包括到压缩文件中。在元数据 .props 文件中,列出要删除的文件。文件路径是相对于 META-INF/ibm-partialapp-delete.props 文件的位置。

例如,要从 my.ear 文件的根删除名为 utils/config.xmi 的文件,则将行 utils/config.xmi 包括到 META-INF/ibm-partialapp-delete.props 文件中。

模块

在压缩文件中包含 module_uri/META-INF/ibm-partialapp-delete.props。

要从模块删除一个文件,在元数据 .props 文件中包含模块的文件相对路径。例如,要从 my.jar 模块删除 a/b/c.jsp,在压缩文件的 my.jar/META-INF/ibm-partialapp-delete.props 文件中包含 a/b/c.class 。

要在模块内删除多个文件,在元数据 .props 文件中列出要删除的文件,每行一个条目。例如,要从 my.war 文件中删除所有的 JavaServer Pages(.jsp 文件),在 my.war/META-INF/ibm-partialapp-delete.props 文件中包含 .*jsp 行。此行使用正则表达式 .*jsp 来识别 my.war 中的所有 .jsp 文件。

您可使用单个部分应用程序文件添加、删除和更新多个文件。

更新部分应用程序后,当保存配置更改时,新的或更新的应用程序文件被存储到 WebSphere Application Server 配置库的已部署应用程序中。当这些更改与节点一起同步时,文件被添加或更新到节点的文件系统中。因为部分应用程序选项更新多个文件,使用部分应用程序中的个别文件确定重新启动的应用程序组件。

示例

部分应用程序压缩文件中的条目的示例如下所示:

util.jar

META-INF/ibm-partialapp-delete.props

foo.jar/com/mycomp/xyz.class

xyz.war/welcome.jsp

xyz.war/WEB-INF/web.xml

webmod.war/META-INF/ibm-partialapp-delete.props

对于此示例,META-INF/ibm-partialapp-delete.props 文件包含 .*.dat 和 tools/test.jar 文件。webmod.war/META-INF/ibm-partialapp-delete.props 文件包含 com/test/.*.jsp 和 WEB-INF/test.xmi 文件。

部分应用程序更新选项执行下列操作:

· 在已部署应用程序中添加或替换 util.jar。

· 添加或替换已部署应用程序的 foo.jar 文件中的 com/mycomp/xyz.class。

· 从应用程序而不是从任何模块删除 *.dat 文件。

· 从应用程序删除 tools/test.jar。

· 添加或替换已部署应用程序的 xyz.war 模块内的 welcome.jsp。

· 替换已部署应用程序的 xyz.war 模块内的 WEB-INF/web.xml。

· 从 webmod.war 模块删除 com/test/*.jsp。

· 从 webmod.war 模块删除 WEB-INF/test.xmi。

WebSphere应用打包部署

2009年7月24日 hashei 没有评论

本文主要讲述使用WebSphere 5中自带的“应用程序组装工具”来为应用程序打包的方法。虽然是V5下的工具,但是得到的war包和ear包可以在V6的WebSphere上发布,可以拷贝出相关文件作为绿色软件使用。由于工作中应用程序包基本由开发人员提供,所以本人对其它IDE自带的打包工具或者ANT工具不是特别熟悉,但是这个“应用程序组装工具”对于已打包软件的查看和修改还是有一定作用的。

打包工具介绍

我们一般使用的是Webshpere 5的应用程序组装工具,将jsp和class等打成ear包。在Webshpere 5安装(或直接拷贝过来)目录下bin目录中,如下图:

clip_image002

找到assembly.bat和setupCmdLine.bat这两个文件,如下图:

clip_image004

其中assembly.bat文件是用于启动应用程序组装工具;setupCmdLine.bat是用于配置启动参数,位于文件开头部分的两项可能(如果是拷过来的)需要配置:

SET WAS_HOME=D:\WebSphere5\AppServer

SET JAVA_HOME=D:\j2sdk1.4.2_03

WAS_HOME:Webshpere 5的安装目录或Webshpere 5的拷贝目录;

JAVA_HOME:jdk目录,默认指向${WebSphere5}\AppServer\java目录,但不一定有效,你可以尝试指向你常用的jdk目录;

参数配置好后,运行assembly.bat文件,进程界面结束后显示应用程序组装工具的主界面,如下图:

clip_image006

[进程界面]

clip_image008

[主界面]

简明操作方法

点击toolbar中[新建]按钮,选择[应用程序],如下图:

clip_image010

便打开如下界面:

clip_image012

在红线圈画的地方命名你的ear包名称,然后右击左侧目录树的[Web模块]后点击[新建],如下图

clip_image014

弹出其配置界面,如下图:

clip_image016

命名好文件名(war包的名称)和上下文的根后点击[确定]按钮,再展开[Web模块]目录树,得到下图操作界面:

clip_image018

以下的步骤比较关键,主要包括:

1、 配置资源引用

2、 配置类文件、jar文件和资源文件

此处如上图红线圈定部分,稍做解释:

资源应用 在这我们主要定义WebSphere 6中的数据库连接池的JNDI名称。

类文件 web应用根目录中WEB-INF\classes目录和其子目录下的所有文件,包括“.class”和“.properties”(一般定义在classes目录下)等文件

jar文件 web应用根目录中WEB-INF\lib目录下的所有jar文件

资源文件 web应用根目录中所有的“.jsp”、“.css”、“.js”、“.inc”和图片文件以及WEB-INF目录下的所有配置文件和定义文件,例如:struts-config.xml,struts-html.tld等

配置资源引用

右击[资源引用]点击[新建],打开如下界面:

clip_image020

将红线圈定部分作如下修改:

clip_image022

其意义在是用于定义数据连接池,还有其他作用,你一看便知。然后,点击[绑定]Tab页,如下图:

clip_image024

这里关键在于写你的数据库连接池的JNDI名称,在之后的应用发布中会详细定义的,好了按照定义我写成如下:

clip_image026

到此,我们数据库连接的资源引用已定义完毕,点击[确定]按钮吧!

配置类文件、jar文件和资源文件

1、 配置类文件

右击[类文件]然后点击[添加文件],如下图:

clip_image028

打开以下界面:

clip_image030

注意红色线圈定部分的概念,稍作解释,我们一般应用的目录例如下图:

clip_image032

在此opensrc就是你的根目录或归档。点击[浏览]按钮,选择文件夹opensrc后如下图:

clip_image034

在左侧的目录树中展开WEB-INF目录后选中classes目录,这时右侧内容就显示classes下的所有内容了,如下:

clip_image036

选中右侧所有内容,点击[添加]按钮后如下图:

clip_image038

你也可以去除掉一些不需要的内容,比如我们经常使用VSS的产生的“vssver.scc”,选中后点击[去除]按钮即可,好了完成了点击[确定]按钮。

clip_image040

你可以点击红线圈定的[扩展]头,进行排序,选中所有需去除的文件,然后按键盘[DEL]键删除。到此类文件添加完毕。

2、 配置jar文件

添加jar文件与添加类文件操作雷同,只不过在目录树左侧选择“WEB-INF/lib”目录,值得注意的是添加的一定要是“jar”文件,如果不是,例如spring的“spring-beans.dtd”文件,工具会提醒你的,别管它了,只要[确定]就行。

3、 配置资源文件

添加资源文件分两步:

Ø 在目录树左侧选择“根”目录,在此就是“opensrc”目录,值得注意的是选择右侧内容时注意去掉“WEB-INF”目录,如下图:

clip_image042

Ø 在目录树左侧选择“WEB-INF”目录,值得注意的是选择右侧内容时注意去掉“classes”和“lib”目录,如下图:

clip_image044

点击[确定]按钮,一切OK,噢!不对,列表怎么没有“struts-config.xml”等文件,我也不知道为什么,工具没有将他们显示出来,不过你放心,他们已被包含进来了。

接下来就要配置所有的servlet和servlet映射,可以对照最初的web.xml文件逐个添加到“web组件”和servlet映射中去,要注意配置一些初始化参数和其他属性。

对照应用程序的web.xml可能还需要添加一些别的配置信息到它的新的部署描述符里去,比如标记库,侦听器,jndi等资源引用,欢迎页面等都可以一一添加进去。

最后在“文件”一栏中选择“查看部署描述符”仔细对照新生成的和最初的有没有不同,仔细修改。

一切OK,点击toolbar上的[保存]按钮吧!

clip_image046

工具显示保存进程:

clip_image048

然后高兴的弹出:

clip_image050

哈哈!大功告成了!别急,我们来检查一下,使用RAR将“.ear”包打开

clip_image052

噢!原来是这样,再进一步打开“META-INF”目录:

clip_image054

这就是IBM的打包工具加进来的东东!再打开“.war”文件:

clip_image056

“struts-config.xml”等文件也都在。注意war包里的目录层次不要搞乱,乱掉了一般要重新打包资源文件,确保万无一失。

【每周精华】第四期(7月13日-19日)

2009年7月20日 hashei 没有评论

这周主要是介绍网络学习资料的。

[1] serverfault和stackoverflow

常逛论坛的同学肯定会有如下感受:问题有人“冰天雪地裸体360度翻转跪求”,但是回答的寥寥,好不容易看到有最新回复,打开一看却是顶贴。但是这两个“论坛”却没有这种烦恼。

说是论坛,其实他俩更像是结合了wiki和digg的一个“百度知道”:

Server Fault is a collaboratively edited question and answer site for system administrators and IT professionals

Stack Overflow is a collaboratively edited question and answer site for programmers

tags保证了查询的方便,回答的质量都很高,特别是很注重理论知识,有的还会给出扩展阅读链接,不像国内论坛直接给个方法,能否解决全看LZ人品。而且老外解决问题的视角有时候很奇特,知识产权的限制让他们很多选用免费软件,不像我们直接一个几百兆的商业软件来杀个蚊子。

[2]Internet FAQ Archives

刚才的只是你问我答,但要是想更系统的学习,想看看一些paper,一些主要的rfc,那Internet FAQ Archives一定会有帮助,它的副标题Online Education就说明了一切。

[3] IBM developerworks wikis

https://www.ibm.com/developerworks/wikis/dashboard.action

内容丰富,举个例子,你想学习AIX6,那么看看

        Welcome to the AIX6 & POWER6 Hands-On Technical Demo Movies

[4]Linux/Unix 新手和专家教程

AIX6的知识看不懂?不要紧,这里有Linux和UNIX从菜鸟到大虾的所有教程。

http://cocre.com/?p=1042

接下来要注意的就是不要陷入知识的汪洋大海,终日拼搏却不知岸在何处了。

士别三日

2009年7月18日 hashei 没有评论

最近在网上玩三国杀,一个个武将用过来,尝试着他们的技能,不由得再次勾起对三国历史的兴趣。

从黄巾之乱到三分归晋的百来年之间,天下英雄层出不穷。不过众多的人物在出场的那一刻,他的能力就被确定下来。不管是足智多谋、神机妙算的诸葛亮,还是“治世之能臣,乱世之奸雄”的曹孟德,或者生子当如的孙仲谋,这些主要人物也缺少个人发展的描写,更不用说那些寻常角色了。所以袁本初就落个“志大而智小,色厉而胆薄,忌克而少威”的“名声”,刘琮更是被称为“豚犬”。

所以吕蒙的个人经历,在三国人物中就显得有些特殊。“子明(吕蒙字)少时,孤谓不辞剧易,果敢有胆而已”,之后听从孙权的建议,“折节好学,耽悦书传”,鲁肃夸他“吾谓大弟但有武略耳,至于今者,学识英博,非复吴下阿蒙。”最后攻心为上,麻痹关羽,白衣渡江,夺回荆州。

吕蒙的成功,不是他的天分多高,关键在于他的“折节读书,识见精博,渐能克己让人,有国士之风”。看到他当时应付孙权的借口“在军中常苦多务,恐不容复读书”,我不由得会心一笑,多么熟悉的借口,我不就时常这样宽慰自己:算了吧,明天再看吧,这两周的松懈也皆由此。在一篇《5%的神话(关于开发效率与职业方向)》文章中,也有相似的表述:

Jeff Atwood(coding horror作者)则认为经常分享自己的技术体会比coding更重要,能写的人才能成为那5%。他曾经横穿北美,从美国西岸San Francisco到加拿大的东岸Montreal去给一个大学的学生讲技术Blog的重要性。他在这篇Is Writing More Important than Programming(ppt, 3mb)演讲中提到:

……大部分不写blog程序员的理由有:太忙;写了也没人看;没有合适内容可写;觉得自己不善长表达等。

大部分我景仰的程序员都是通过其blog让我景仰,而不是他的代码

吕子明的榜样就在面前,而滴水穿石、铁杵磨成针的故事每个小孩都知道,但是成功的往往就只有5%,除了每个人“克己”的自制力不同,更重要的是方法。有个滴水理论:http://home.wangjianshuo.com/cn/20090321_ccee.htm

把水龙头稍微开松一点点,让水可以每一分钟滴一滴,放一个桶在下面,然后忘记这件事情(不用我提醒,你一定会忘的)。等你再过来看的时候,或许桶早已经满了。有趣的是,这个实验成功的前提是,你一定要忘记你做了这件事情,只要你还惦记着,桶里面的水就不会太多。

创造一个适合学习的环境,推迟享乐的时机,期待士别三日后的将来,大家都能彼此间刮目相待。

分类: 生活感想 标签: ,