如果把一个string和一个number相比较,javascript会自动试着将string转换为number,所以 "1.010" == 1.01 表达式返回true。
空和空格会被转换为数字0,所以不管是"" == 0,还是" " == 0 都会返回true。
这也与使用的比较操作符 == 有关。更严格的比较使用 ===,参看javascript reference
如果把一个string和一个number相比较,javascript会自动试着将string转换为number,所以 "1.010" == 1.01 表达式返回true。
空和空格会被转换为数字0,所以不管是"" == 0,还是" " == 0 都会返回true。
这也与使用的比较操作符 == 有关。更严格的比较使用 ===,参看javascript reference
最近在笔记本上的windows xp上使用gvim时,总是提示无法写入D:\Documents and Settings\dingjun.jia\_viminfo文件。开始以为是文件权限被错误设置。在检查目录Documents and Settings的权限设置时,发现这个文件夹的readonly被阴影选中了,取消保存后该选项仍然显示被选中,不过这个目录确实可写,估计只有微软自己的程序员才知道为什么要把这个文件夹设置为readonly,并且这个设置还不起作用,总之走了一段弯路。网上有人写道有可能是viminfo有太多的临时文件,vim无法知道该把哪个临时文件写入_viminfo中,所以写入失败。查找了一下并没有发现viminfo的临时文件,viminfo的帮助(:help viminfo)说,Unix或OS/2下该文件位于$HOME/.viminfo下,在Windows下位于$HOME\_viminfo。如果windows下没有定义HOME变量,文件被保存到$VIM\_viminfo,如果VIM也没有被定义,就位于c:\_viminfo。可是我使用gvim 7.2总是试图在目录下D:\Documents and Settings\dingjun.jia\下写该文件。定义了VIM变量,问题依旧,在定义HOME变量后,提示消失了。是不是Vim的Help应该更新了?
今天在使用Excel时,发现使用上下左右方向键(KEYDOWN、KEYUP、KEYLEFT和KEYRIGHT)进行单元格的切换时,发现方向键控制的不是单元格的切换,而是整个Excel工作表的滚动条的移动,而当前焦点的单元格并没有随方向键而改变。解决办法是按下Scroll Lock键。
如果执行脚本时出现syntax错误,如 line 9: syntax error: unexpected end of file 并且提示出错的行比脚本中最后一行的数字还大时,检查脚本中的行尾是否有空格,删除行尾空格就应该能解决这类错误。在vim中使用 :% s/\s*$//即可删除行尾的空白字符,包括<Space> 和 <Tab>。
最近笔记本不时出现蓝屏,都是发生在笔记本空闲一段时间进入standby之后。摁电源键之后红色的desktop还能闪一下,紧接着就是蓝屏:
page_fault_in_nopaged_area
technical information: 0x00000050 (0xF7A62000, 0x00000001, 0X804DADE8, 0x00000000)
或是:
technical information: 0x00000050 (0xF7A62CB000, 0x00000001, 0X804DADE8, 0x00000000)
以0x00000050为关键字在微软的知识库查,发现这个错误有可能是USB的驱动,刻录程序,病毒或木马引起的。赶紧查一下毒再说吧。
一位朋友新买了一台电脑,自己安装了windows live messenger 2009 beta版本。可是安装完成后根本不能登陆,错误代码为8000ffff。网上查询的结果显示有不少人都有同样的错误,都是建议卸载后安装一个低一点的正式版本。下载完8.5版本后无法进行安装,因为检测到有更新的版本存在。于是去卸载windows live messenger 2009 beta。可是Windows控制面板里的添加卸载程序里根本就没有列出它,无法卸载。在程序安装的文件夹内也找不到卸载程序。执行用Windows Installer CleanUp Utility 1.0后,beta版本的messenger仍然纹丝不动。google的结果中有个方法是执行:
msiexec /x {B1403D7D-C725-4858-AACC-7E5FA2D72859}
可是这个方法在这位朋友的机器上却不见效,说对当前安装的程序无效。想到贴出这个方法的都是使用英文的用户,而我这位朋友安装的是中文版本。也许是英文与中文版本的ID不一样。于是上注册表一看,果然windows live messenger下的ID是另一个值。把上面的ID值更换之后,卸载界面终于出来了。问题就算解决了,可是为什么不能让beta版本的卸载更容易些呢?
把文件拷贝到SD卡后,启动程序总报错说:
program application database cannot be found. Please insert the original card.
网上提示修改sys.txt文件中app的路径,比如把SDCARD改成本地化版本WM中SD卡的名字:
[folders]
app="%SDCARD%/iGO8"
[interface]
maxzoom2d=6000000
show_exit=1
[map]
2dheadup=1
试着修改为Speicherkarte,仍然不行。不过发现在启动程序后在Mein Windows Mobile-basiertes Gerät下面会有一个以app的值为名称的文件夹,不过里面都是空的。也就是说程序去那儿查找content文件夹的内容却找不到,所以报错。后来干脆删掉指定folders的两行,问题就解决了。因为sys.txt,iGo8.exe和content等文件夹在同一个目录下,查找是从当前目录开始,于是就找到了。
今天要重发一遍上个月月底的time reporting,结果发送不出去,因为周末把Outlook更新到了2007。可气的是Artes的出错提示,明明我点击的是发送,它却总是告诉我,我点击了cancel,取消了发送过程。这样的提示如何帮助用户去解决问题。后来找到的解决办法:
Close Artes & Outlook 2007.
Install the Microsoft patch by clicking here.
NOTE: You can also install the patch Collaboration Data Objects, version 1.2.1 from this link: http://www.microsoft.com/downloads/details.aspx?familyid=2714320d-c997-4de1-986f-24f081725d36&displaylang=en
Start Artes & Outlook 2007.
Send your Time Report.
从周一开始就在K给Jump Starter做Training。今天结束的早赶上了17:11的S-Bahn,并在S-Bahn上和去年参与招人工作并主持AC的MM和Stefan(后来才知道是位senior manager)和聊了起来。快到Hbf时,GK打电话说,她公司的电脑上的Office 2007试用版已经不能用了,老板让她自己去买一套Office 2007,于是求助于我,让我去Hauptwache帮她买一套。早就跟她说过Open Office完全可以作为替代品,不过对此似乎是很不感冒。我也懒得再费口舌坐车直奔Hauptwache的Saturn了。这应该算是法兰克福最热闹的地段的一个大型电器商场了,不想货架上唯一找到的微软的Office产品除了一份单独出售的Outlook 2007外就只有Office 2007 standard的一个upgrade版本,价格为349欧元。也就是说购买者在自己的电脑上必须已经安装了一份有许可证的Office组件(Word,Excel和Powerpoint)才能使用这个Upgrade版本。看到如此情形,不禁怀疑微软是不是根本就没有打算把Office 2007卖给个人消费者,所以它才在法兰克福这样一个国际性大都市最繁华地段的大型电器商场不见踪影。一番电话之后,打消了那位还想购买Office 2007许可证的想法。Citibank这样的客户到现在还在用Office 2000,不禁好奇这Office 2007都卖给了什么样的企业用户。
用CSS来布局页面,IE的不同版本对CSS的支持不一样,因此必须针对不同的版本应用一些CSS hack。IE 5和以上版本提供一种特殊的注释,IE 会去解释它,而其他的浏览器把它视作注释,不用理睬。
想针对版本低于和等于IE 6的应用CSS,可以使用:
<!--[if lte IE 6]>
<link rel="stylesheet" type="text/css" href="css/IE6hacks.css" />
<![endif]-->
只针对IE 7的CSS:
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="css/IE7hacks.css" />
<![endif]-->
针对IE 5和以上版本:
<!--[if IE ]>为了把Outlook的日历与Google的日历同步,找到了Google提供的Google Calendar Sync。填写好Gmail的账户和同步频率后就可以完成同步。这个小软件提供三种同步选择,google 日历 -> outlook 日历,outlook 日历 -> google 日历和google 日历 <--> outlook 日历。如果能把它作为一个Outlook的addon应该会更加方便。
周六一个朋友新买一个电脑(Vista系统),让我帮忙创建分区。我以为还可以用旧的PM搞定,用Windows PE光盘启动后,不知道是硬盘太新,还是Vista的原因,连硬盘都没有识别出来,只好作罢。后来在网上一查,原来Vista已经自带了调整和创建分区的工具。
Windows Vista includes a built-in functionality in Disk Management to shrink and expand partitions. No more 3rd party utilities needed!
为GK在Outlook下配置了1und1的邮箱,使用IMAP协议,收发邮件都没有问题,可是每发送一封邮件时总会在本地的收件箱里收到一封由“系统管理员”发送的主题为“未传递:邮件主题”的邮件。邮件内容为:
邮件没有到达某些或全部的预定收件人。
主题: foobar
发送时间: 6.7.2008 20:58
无法到达以下收件人:
'foobar@hotmail.com',时间为 6.7.2008 20:58
550 must be authenticated
Google了一下原来是因为在在设置账户时没有选中选项:
我的邮件发送服务器(SMTP)要求验证
本篇是关于如何访问controller context。
对于每一个controller,系统都会为其自动创建一个interface,名为IF_<ctrol_name>。在这个interface中,对于每一个context node都会有一个相应的WDCTX_<node_name>存在。访问root node直接使用WD_CONTEXT,访问root node的子node使用get_child_node( )方法,要注意的是方法名作为参数被传递时必须是大写!方法返回指向指定node的引用,类型为IF_WD_CONTEXT_NODE。这个方法还有一个可选参数,是要访问的element在父node中的索引编号。
获得一个指向node的引用后就可以使用get_element( )方法来获得指向element at selection的引用,类型为IF_WD_CONTEXT_ELEMENT。
sap的HR350是一个关于Human Capital Management的ABAP编程的课程。这个课程按课程材料规划是5天,此次在Heidelberg的HCMS学习这个课程却只有3天时间,因此只学习了第1单元到第5单元。Unit 6 (Data structures in personal planning),Unit 7(Logical database PCH),Unit 8 (customer-specific Infotypes)和Unit 9(HCM ABAP Feature)只能自己在家学习了。
在web dynpro中每个controller都有两个默认的方法:
wddoinit():这是一个controller内第一个被调用的方法,常用于初始化数据。
wddoexit():这是一个controller内最后一个被调用的方法,用于做收尾工作。
这两个方法在controller被创建时自动生成,并且都是空的方法。
对于component controller还有两外两个重要的方法:
wddobeforenavigation():
This method is called after the action method has been processed and just before the web dynpro frameworkprocesses the events in the navigation queque.
wddopostprocessing():
This method allows data validation from multiple components, and it's the last controller method that is processed before the UI is sent to the client.
view controller也有自己的两个方法:
定义user interface相对比较简单,从左边栏的工具箱里拖拽需要的UI elements到layout里面,并设置各个UI element的属性。更多的工作是关于data binding。
有些UI elements是不可见的,如TransparentContainer, ViewUIElementsContainer。这类元素用于组织其他的可见元素,如Button, Label,InputField,Table,Tree等。所有的UI elements被组织成一个树状结构,根节点名为RootUIElement,类型为TransparentContainer。RootUIElement下的每个container element都有一个属性Layout,它规定了在container内元素的布局。4种layout manager可供layout属性选择:
空闲在家开始学习sap课程NET310 abap web dynpro。想学这个课程是因为Alex说,现在对web dynpro for abap的需求会越来越大。想到到他搞sap已经十几年了,先相信他这一判断。
这个课程以BC400和BC401(abap objects)为基础。BC400没有完整的学过,BC401也没学过。看了前几个单元,先纸上谈兵一番,总结一下关于wda(web dynpro for abap)的基础知识。
web dynpro for abap采用了MVC的设计方法。一个web dynpro component包括window,views和component controller。window和view主要和UI有关。windows只是一种容器,在一个component内一个window可以包含任意多个view,而component controller只有一个。如果一个component不需要view,那么windows也就相应无需存在了。
一个web dynpro component可以与一个URL关联,通过浏览器来访问,或者作为另一个web dynpro component的sub-component供调用。
执行se80,选择Repository Browser,并选择Web Dynpro Comp. / Inf.
填入要创建的web dynpro component的名字,回车,系统创建web dynpro component,并为它创建了一个Main view和一个window。
接下来在main view的tab context中为view context创建一个context node,在main view的tab layout中插入一个表格,并完成data binding,实现main view的tab methods下的WDDOINIT方法。之后创建一个web dynpro application,并激活整个web dynpro component。测试这个web dynpro app会自动打开浏览器显示表格内容。
abap objects中的类和接口与data elements,tables,structures和types共用一个命名空间,它们都被保存在表TADIR中。
classes in the class library: CL_<class name>
example: CL_COMPANY_CODE, CL_GENERAL_LEDGER_ACCOUNT
interfaces in the class library: IF_<interface name>
example: IF_STATUS_MANAGEMANT, IF_CHECKER
local classes in programs: LCL_<class name>
example: LCL_TREE_MANAGEMENT
local interfaces in programs: LIF_<interface name>
example: LIF_PRINTER
HR350中的Unit 4介绍了使用ALV(ABAP list viewer)来格式化report的数据输出,使输出的数据具有排序,打印,搜索,过滤,隐藏/显示特定字段等功能。使用ALV最基本的步骤包括:
1. 把要显示的数据都放到一个内表中
2. 定义一个field catalog,用于确定要显示的列
3. 调用函数 REUSE_ALV_GRID_DISPLAY
Advanced troubleshooting for "Stop 0x0000007B" errors in Windows XP
search folder是我在Outlook中常用的一个功能,因为它能方便的根据不同的条件来组织邮件。现在的项目先后有两个负责的经理,为了把项目有关的邮件组织在一起,所以建立了一个search folder,过滤条件是From or Sent to。公司用的是Exchange Server,所以过滤条件内容为vorname1.name1; vorname2.name2。奇怪的是过滤出来的结果中没有包含后面那位经理的邮件。很明显问题只可能出在过滤条件的输入内容上,但是反复检查都没有拼写错误。最后把第二位经理的邮件地址写为name2, vorname2,过滤结果中就包括她的邮件了。实在不知道为什么,估计和Exchanger Server那边两位经理的user profile有关。
公司发的MDA compact III操作系统为windows mobile 5.0,今天抽空把它升级到了6.0,并把Microsoft ActiveSync从4.2升级到4.5。安装完Windows Mobile 6.0后发现自带了杀毒软件F-Secure Mobile,其他也就是图标换了换,另外word默认保存为Word 2007支持的docx格式。原来在Kontakte只显示Outlook里同步过来的联系人,现在升级后SIM卡里的联系人也一并在Kontakte中显示,并且不提供选项更改。这一点感觉很不友好!
在单位的笔记本上安装完Daemon Tool后,启动Daemon Tool总得到错误提示:Unable to add adapter. Device problem 39。右键单击任务栏的图标得到错误提示:virtual scsi driver not detected。Windows的日志报告中没有关于这个错误的任何报告
google了一下,发现已经有人报告这类错误,解决建议包括卸载程序,重新安装,在安全模式下安装等等。我卸载数次再安装都没有解决问题,最后在安全模式下重新安装才能正常使用它加载虚拟光驱。
单位的笔记本操作系统为英文版的Windows XP。用Firefox阅读中文网页时,字体看起来很别扭。在系统中添加了微软的雅黑字体,想让Firefox显示中文网页时默认使用雅黑字体,需要修改一下字体设置。有一个变量font.name.serif.x-western,默认的值为“time new roman”,把它的值改为“Microsoft YaHei”后,中文网页的字体看起来就好多了。
10月份继续接受培训,主题为SAP NetWeaver Portal,内容包括:
SAPTEC: Fundam. of SAP Web AS
SAPEP: Enterprise Portal Fund.
ADM 200: Web AS Java Administration
ADM 102: Web AS Admin II
EP 200: Enterprise Portal System Admin.
EP 300: Configuration of Knowledge Management und Collaboration
今天是在大学工作的最后一天了,需要的数据都备份完了。我的机器ge2pc51里Firefox中安装的插件也在此罗列一下。列表是由listZilla插件生成的:
Adblock Plus 0.7.5.1
Aptana Debugger Service 0.2.8.14433
CHM Reader 0.2.1.1
CSSViewer 1.0.2
del.icio.us 1.2.1
ErrorZilla 0.2
Firebug 1.05
Full Screen 0.5
Fullerscreen 2.02
Google Notebook 1.0.0.18
Google Toolbar for Firefox 3.0.20070525W
Greasemonkey 0.7.20070607.0
Html Validator 0.8.4.0
Java Console 6.0
ListZilla 0.8
Live HTTP Headers 0.13.1
LiveClick 0.2.4
Right Encoding 0.2.2
ScrapBook 1.2.0.8
Searchbar Autosizer 1.3.7
SwitchProxy Tool 1.4.1
View Cookies 1.6
Web Developer 1.1.4
XML Developer Toolbar 0.2
等了一个多月的工作许可终于下来了。6月29日晚上打完球看信箱收到了公司寄过来的已经准备好的申请材料。7月2日周一一早去外管局递交了材料,7月3日材料到达Frankfurt劳工局,8月13日电话询问外管局得知没有进一步的消息,发Mail给公司请求公司联系劳工局查询材料的处理情况,立即收到Tania回复,答应去查询有消息即刻通知我。8月16日中午刚吃过午饭收到Tania的邮件,告诉我工作许可下来了,让我可以去Rehm那儿去了。交了30Euro之后,护照上又少了两页空白页。
Wordpress的开发者从2.2版本开始使用jquery作为其核心的Javascript库了,因为他们认为jquery is lighter and faster。看来jquery的发展越来越被人看好。在扩展digilib时我也使用了jquery,觉得它非常方便,清晰。一个名为visual jqeury的文档对这个库的各个函数作了很明了的分类,有时要比阅读API更方便。
jquery中很多函数操作的对象都为jqury对象的集合,而jquery自身的一个名为implicit iteration的特性能自动遍历处理集合中的每一个对象,省掉了很多for循环语句。
另外jquery的selector非常丰富,支持CSS和Xpath的表达式。此外jquery还有一个名为chaining的特性,能避免创建过多的临时变量。
This means that the result of most operations on an object is the object itself, ready for the next action to be applied to it.
如果按照正常的休假,今天本应是在大学工作的最后一天。接下来的半个月可以享受剩下的12天假期。按规定工作半年(不超过30岁)可以享受14天休假,全年为28天,超过30岁全年休假29天,超过40岁则全年休假30天。不过即使休假也是在家呆着等法兰克福那边签发工作许可,所以痛快的接受了Thomas让我放弃休假的建议,一直工作到月底再结束在大学的工作。
在浏览O2的网页时,发现其Pagerank值为零,另外URL里出现cocoon-action-DisplayCDRs等字样,便猜测会不会跟cocoon有关。查看服务器返回的Header,果然使用的是cocoon,版本号为2.1.9,而2.1.10正式版在2006年12月就发布了。看来对于企业生产环境来说,更换网页服务器不是一件简单的事。
如果使用Firefox的Live Bookmarks功能,那么这个名为LiveClick的插件能够提供更方便的功能,如显示某个post是否已经阅读,监视feed更新等等。
以前就知道有个名为Foxit的pdf阅读软件,小巧并且免费,但觉得有时候文件的渲染效果不够好,在Linux下有xpdf就足够。今天在How-To Geek看到一款开源的pdf阅读软件,名为Sumatra,试用了一下速度很快,文件渲染也不错。程序由Krzysztof Kowalczyk开发,就一个可执行文件,无需安装,当前版本为beta 0.7,大小仅为803kb,非常值得推荐!常用的快捷键有:
不知道为什么用k和j移动的用法刚好和在vim里相反。
Ignore a file:
svn propset svn:ignore *.log .
svn propset svn:ignore *.pyc dirname
Ignore a folder:
svn propedit svn:ignore dirname
今天阅读vim的手册才知道,原来vim提供简单的文档加密功能。在新创建文档时使用 -x 选项,vim会自动询问密码,要求用户两次输入密码,确保密码被用户正确设置。要为一个已经创建的文档添加密码和更换密码,可以使用命令:
:X
要停止对一个文件加密,可以把key选项设置为一个空字串:
:set key=
Firefox的插件Firebug对于开发调试网页实在太有帮助了。用F12就可以激活Firebug,默认在网页下端显示。我常用control + F12在新窗口中打开Firebug,这样在左边的主显示器上显示网页,在右边的副显示器上显示Firebug的窗口。这样在使用inspect功能时可以很方便的看到对应元素的代码。查看更多Firebug的快捷键。
在使用console功能时,如果选中了larger command line,Firebug为输入javascript提供的类似vim中设置选项一样的自动补全功能不可用。当在javascript的console提示符>>>后复制一段javascript代码时,larger command line会自动被激活。
在Firebug功能选择的上面一行选中一个元素,右键可以激活Log Events选项。这样可以在console查看事件输出。
有了Firebug不用去W3C查看CSS中的box model了。选中html,选定元素,再选中右边的Layout tab,就可以看到元素的box布局了。
当Firefox加载的网页包含多个frames时,Firebug默认的context是top-level的页面,如何切换context到其中的一个frame呢?
答案:
cd(window)
By default, command line expressions are relative to the top-level window of the page. cd() allows you to use the window of a frame in the page instead.
在command line下的常用函数:
$(id)
Returns a single element with the given id.
$$(selector)
Returns an array of elements that match the given CSS selector.
$x(xpath)
Returns an array of elements that match the given XPath expression.
用于输出日志的函数:
console.debug("message" [,objects]) - Logs a debug message.
console.info("message" [,objects]) - Logs an informative message.
console.warn("message" [,objects]) - Logs a warning.
console.error("message" [,objects]) - Logs an error.
今天下午听Qi Jin说起MS的silverlight,顺便安装了一下微软推出的Web开发工具MS Expression Web。不想在安装过程中出现错误:
Error Message: “The 2007 Microsoft Office system does not support upgrading from a prerelease version of the 2007 Microsoft Office system.”
解决办法是卸载各种与office 2007有关的beta版本。这篇文章提及了这个问题。在我下载掉2007 Microsoft Office Add-in: Microsoft Save as PDF (Beta)后,安装就能进行了。
In addition to the programs listed in the KB, this error message could also be caused by the German Language Pack for Office 2007 and Outlook 2007 add-ins (known ones so far: Windows Live Local Addin for Outlook, Calendar Printing Assistant for Outlook 2007).
sshfs [user@]host:[dir] mountpointsshfs jia@germa93:/home/jia germa93fusermount -u /path/to/mount/point
1、通用目标
2、强大的模板语言
3、通用数据模型
4、为Web准备
5、智能的国际化和本地化
6、强大的XML处理能力
Apache的项目Turbine是一个基于servlet的framwork。
A quick guide to Turbine technologies:
有时间试一试!
恢复由于注册表损坏而无法启动的 Windows XP 系统。警告:如果您的计算机上的操作系统是由 OEM 安装的,请不要使用本文中介绍的步骤。OEM 安装中的系统配置单元会创建以前不存在的密码和用户帐户。如果您使用本文中介绍的步骤,可能无法重新登录到故障恢复控制台,因而无法还原最初的注册表配置单元。
要点:
在故障恢复控制台的命令提示符处,键入下面几行命令:
md tmp
copy c:\windows\system32\config\system c:\windows\tmp\system.bak
copy c:\windows\system32\config\software c:\windows\tmp\software.bak
copy c:\windows\system32\config\sam c:\windows\tmp\sam.bak
copy c:\windows\system32\config\security c:\windows\tmp\security.bak
copy c:\windows\system32\config\default c:\windows\tmp\default.bak
delete c:\windows\system32\config\system
delete c:\windows\system32\config\software
delete c:\windows\system32\config\sam
delete c:\windows\system32\config\security
delete c:\windows\system32\config\default
copy c:\windows\repair\system c:\windows\system32\config\system
copy c:\windows\repair\software c:\windows\system32\config\software
copy c:\windows\repair\sam c:\windows\system32\config\sam
copy c:\windows\repair\security c:\windows\system32\config\security
copy c:\windows\repair\default c:\windows\system32\config\default
Windows XP系统下默认会保留上一次的登陆名。如上次用administrator用户登陆的话,下次开机,它还保留这个用户名在用户名框内。下面这个方法用来在登陆时不显示上次的登陆名:
----------------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system]
"dontdisplaylastusername"=dword:00000001
----------------------------------------------------------------
把上面这段保存为reg文件,导入到注册表里。这样下次登陆就不显示上次的登陆名了。如果想还原的话,就把dword值改为:00000000即可。
想把一个XML文件中一个原来是一个元素的子元素变为该元素的属性,如:
<item>
<itemText>f. 3v: cath 3, 80-134 </itemText>
<link>003_v.jpg</link>
</item>
<item>
<itemText>f. 4r: cath 3, 135-199 </itemText>
<link>004_r.jpg</link>
</item>
<item>
<itemText>f. 4v: cath 3, 200-4, 52 </itemText>
<link>004_v.jpg</link>
</item>
使用下面的XSLT语句可以为item元素增加name属性,但是没有删除子元素<link>,只好用vi来删除了:)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" >
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="//item">
<xsl:copy>
<xsl:attribute name="name"><xsl:value-of select="./link" /></xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Firefox下的插件多多,在http://addons.mozilla.org/页面下用关键字fullscreen查找会找到名为Fullscreen的插件。不过其实还有一个实现全凭效果更好的插件,名为fullerscreen。后者能隐藏所有的菜单栏和工具栏,增加了不少可视面积。
Ansgar他们以前为fud写的帮助文件是用Word写的。现在发现这个帮助文件使用起来并不方便,希望帮助文件能类似windows下的chm文件,支持查找,关键字等功能。在sourceforge上发现一个名为HelpSetMaker的程序,可以制作帮助文件,输出html,JavaHelp,latex和Eclipse帮助文件,也支持搜索。
输出的JavaHelp文件可以借助Javahelp中的hsviewer.jar来查看。测试了一下,发现HelpSetMaker输出javahelp格式的文件时对UTF-8的支持有问题。如果项目编码设置为UTF-8,输出的jar文件编码设置也为UTF-8,那么在用hsviewer.jar查看该文件时,变音不能正常显示。不过当项目和输出jar文件都使用latin-1或latin-15时,编码就没有问题。生成的jar文件可以用:
java -jar hsviewer.jar -helpset fud-help.jar 命令来打开。
微软的notepad有个功能是每次打开文件时在文件末自动填上当前的日期和时间。办法是在文件的第一行写入 .LOG 即可。我一直用它来作一些日常笔记记录。但是这个功能有个bug,即当文件大小达到44kb时,notepad在打开这样的文件时就会报错,说内存不够,请关闭其他的应用程序。尽管你没有打开其他的应用程序还有很多空闲的内存,你仍然会得到这样的错误提示。虽然还可以编辑这个文件,但是自动填入日期和时间的功能已经没有了。
Nathania有个笔记本,在家用DSL上网,通过router自动获得IP。但她把电脑拿到办公室后,只能使用学校分配的固定IP上网。这样每次都要改来改去,实在是麻烦。简单一点的办法就是写两个脚本来配置不同地点的IP,不过也要手工执行,还是不够方便。其实有个更简单的解决办法,只是因为在学校的LAN下基本上都使用固定IP,所以没有发现这个方法。解决办法很简单,先配置网卡为自动获得IP,然后在为这块网卡分配一个固定IP地址就可以了。
当前使用apt-get install apache2 安装的apache版本为2.2.3。安装后apache为网页编码默认设置为UTF-8。不知道为什么一定要设置这个默认编码为UTF-8,让用户编写的网页自己来决定网页的编码不是更好吗。看了一眼/etc/apache2/apache2.conf文件,发现里面的语句:
#AddDefaultCharset ISO-8859-1
已经关掉了默认编码设置了。可是发现网页的编码设置仍然默认为UTF-8。后来才发现原来在/etc/apache2/conf.d文件夹下还有一个名为charset的文件,里面包含:
AddDefaultCharset UTF-8
就是它在捣乱了!注释掉这句再重启apache2,就关掉服务器端设置的默认网页编码了。
今天一大早就把申请工作许可的材料交上去了。办事的小伙子Rehm扫了一眼材料就收下了,并告诉我四周之后才有进一步的消息。他主动把他的电话写在纸条上给我,让我四周之后再打电话(7181334)询问进展情况。现在就盼着Frankfurt那边能办事利落些,学学人家Bayern那边。据说那边两周就有结果了。
当URL不是以一个文件结束,而是以一个目录结束时,Zope会寻找该目录下的默认文件。这个文件不是像在Apache下的index.htm/index.html,而是一个ID为index_html的文件。如果这个文件不存在,访问以目录结尾的URL就会得到一个错误提示:
Resource not found
Sorry, the requested resource does not exist.
Check the URL and try again.
Resource: Folder instance at 2a9b97c210
Michael为WBB写了web service,Thomas想在Zope下调用WBB的web service。安装完SOAPpy模块之后,写了一个小的测试脚本,放在了$INSTANCE/Extension目录下。在Zope中创建一个external method时, Module Name为这个脚本的名字,但不包含.py,Function Name为脚本中定义的函数名。
这个脚本能在命令行下执行,可是在Zope中调用总是得到错误提示:
Error Type: ImportError
Error Value: No module named SOAPProxy
在网上google了一下,没有立刻找到解决办法。想了一下,应该是Zope的执行环境和在命令行下的执行环境不同造成的。浏览了一下Zope的配置文件zope.conf,发现里面有个名为path的指令,默认值为
$INSTANCE/lib/python
由于SOAPpy安装在/usr/lib/python2.4/site-packages目录下,自然Zope就找不到它了。添加下面的语句后:
path $INSTANCE/lib/python:/usr/lib/python2.4/site-packages
问题就解决了。
${}用于过滤变量的值有时候非常方便,不过每次用都记不住,只好写个例子在此供翻查:(提醒一下,别与命令替换操作符 $(command) 搞混了!另外在XSLT中可以用{$var}来得到一个变量的值)
假设 FNAME="/home/jia/tmp/test.1.sh"
那么有:
${FNAME}
显示变量的全部。
/home/jia/tmp/test.1.sh
${FNAME##/*/}
比对变量開端﹐如果以 /*/ 开头的話﹐砍掉最長的部份。
test.1.sh
${FNAME#/*/}
比对变量开端﹐如果以 /*/ 开头的話﹐砍掉最短的部份。
jia/tmp/test.1.sh
${FNAME%.*}
比对变量末端﹐如果以 .* 結尾﹐砍掉最短的部份。
/home/jia/tmp/test.1
${FNAME%%.*}
比对变量末端﹐如果以 .* 結尾﹐砍掉最长的部份。
/home/jia/tmp/test
${FNAME/sh/bash}
如果在变量中找到 sh ﹐將第一个 sh 替换为 bash。
/home/jia/tmp/test.1.bash
${FNAME//sh/bash}
如果在变量中找到 sh ﹐將全部 sh 替换为 bash。
/home/jia/tmp/test.1.bash
简单总结:
# 比对变量的的开始部分
% 比对变量的结束部分
一个符号表示去掉最短的部分,两个符号表示去掉最长的部分。
我已经有好几个星期没有收到IBM 每周一次的developerWorks的newsletter了,以为是我的订阅出了问题。今天有空上IBM的developerWorks 中国时事通讯网页一看,上面列出的newsletter也只到第303期(2007年4月24日)。看来不是我没有收到中文newsletter,而是IBM本身没有撰写。浏览网页时发现,页面上提供2004年和2005年的打包下载。这倒是很方便,省得我在Outlook里整理了。既然收不到中文的newsletter了,那以后就只能阅读英文的developerWorks Newsletter: Weekly Edition.
apt-get install acl安装完之后,修改/etc/fstab文件,在需要acl支持的分区上添加acl,如:
原来的一行为:
UUID=e6d069bc-4bcd-4e4d-9730-f66473118a7f / ext3 defaults,errors=remount-ro 0 1
添加acl支持后变为:
UUID=e6d069bc-4bcd-4e4d-9730-f66473118a7f / ext3 defaults,acl,errors=remount-ro 0 1
要使acl生效还必须重新加载文件系统:
jia@germa93:~$sudo mount -o remount /
今天用Adobe Acrobat 7.0打开了一个关于XPath的ebook,并做了简单的修改。原文档拒绝保存修改,试着另存为一个PDF文件。保存后文件的大小显著减小,从原来的57.560.207 Bytes到现在的5.995.126 Bytes。保存中曾有显示程序消除了一些冗余的图像,我想这应该是文件体积减小的主要原因。
Tomcat的访问日志默认时关闭的,要打开访问日志记录只需修改conf/server.xml文件,去掉下面一段的注释:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
我在家里的电脑上安装的gvim 7.0有edit with gvim的右键菜单,在办公室里的电脑上安装了同样的文件,却找不到这样右键菜单,虽然能用,但是总觉缺点什么。两台机器都是同样的操作系统和同样的补丁,只是办公室电脑是通过clone的方式安装的,因此估计在注册表上有问题。于是从家里电脑里导出了有关gvim的键值,再导入到另一台机器上,右键菜单就有了。
附上注册表的文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Vim]
[HKEY_LOCAL_MACHINE\SOFTWARE\Vim\Gvim]
"path"="D:\\Programme\\Vim\\vim70\\gvim.exe"
[HKEY_CLASSES_ROOT\Applications\gvim.exe]
[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell]
[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit]
[HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command]
@="D:\\Programme\\Vim\\vim70\\gvim.exe \"%1\""
[HKEY_CLASSES_ROOT\CLSID\{0F0BFAE1-4C90-11D1-82D7-0004AC368519}]
@="Vim"
[HKEY_CLASSES_ROOT\CLSID\{0F0BFAE1-4C90-11D1-82D7-0004AC368519}\LocalServer32]
@="D:\\Programme\\Vim\\vim70\\gvim.exe"
[HKEY_CLASSES_ROOT\CLSID\{0F0BFAE1-4C90-11D1-82D7-0004AC368519}\ProgID]
@="Vim.Application.1"
[HKEY_CLASSES_ROOT\CLSID\{0F0BFAE1-4C90-11D1-82D7-0004AC368519}\TypeLib]
@="{0F0BFAE0-4C90-11D1-82D7-0004AC368519}"
[HKEY_CLASSES_ROOT\CLSID\{0F0BFAE1-4C90-11D1-82D7-0004AC368519}\VersionIndependentProgID]
@="Vim.Application"
[HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}]
[HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32]
@="D:\\Programme\\Vim\\vim70\\gvimext.dll"
"ThreadingModel"="Apartment"
浏览有些网页时,有些脚本会改变浏览器的窗口大小,很是烦人。通过下面的设置可以禁止窗口大小被改变:
Here is how to prevent sites from resizing your Firefox window…
1. Open Firefox, Preferences (or if you’re on Windows…Tools, Options)
2. Go to the Content Tab
3. To the right of “Enable Javascript” hit “Advanced…”.
4. Uncheck “Move or Resize Existing Windows”
C:\Dokumente und Einstellungen\jia>gpg --version gpg (GnuPG) 1.4.7
Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
Home: C:/Dokumente und Einstellungen/jia/Anwendungsdaten/gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
把cocoon作为一个webapp分发在Tomcat下,如果在启动Tomcat时出现警告提示:
WARN! *** JMS block is installed but jms client library not found. ***
- For the jms block to work you must install and start a JMS server and place the client jar in WEB-INF/lib.
- The default server, OpenJMS is configured in cocoon.xconf but is not bundled with Cocoon.
解决办法:
在xcoocon.conf文件里注释掉关于jms-connection-manager的配置内容即可:
<jms-connection-manager logger="core.jms">
...
</jms-connection-manager>
在windwos下启动Tomcat 5.5下时,命令行窗口会提示:
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\jdk1.5\bin;.;C:\WINDOWS\system32; ...
为了提高Tomcat的性能,应让Tomcat使用APR,Apache Portble Runtime。具体信息参见http://tomcat.apache.org/tomcat-5.5-doc/apr.html。
在windows安装方法:下载编译好的dll文件,tcnative-1.dll,把它复制到%SystemRoot%\system32目录下即可。
不止一次赶上这样的情况了,无法把autorun.inf文件从本地硬盘上的一个文件夹复制到映射的网络硬盘上,但却可以复制到本地硬盘的另一个文件夹下。复制时,得到错误提示:
access denied。
请确保磁盘没有满,也没有写保护,或文件当前没有被使用。
网上搜索的结果表明,这是由McAfee的访问保护机制引起的。在McAfee的访问保护下有个文件,共享和文件夹保护选项,下面有个选项:
prevent remote creation of autorun.inf files
如果这个选项被选中,就会出现无法复制到远程机器的问题。
现在有不少程序都支持利用鼠标放大和缩小文字,只要在摁住control键时,转动鼠标滑轮就可以了。我知道的最早支持这个特性的是Firefox,随后发现IE 7和Opera 9都有这个功能了。可是这个功能在Firefox下和在IE/Opera下略有差别:在Firefox下,滑轮往下转,文字变大,而在IE/Opera下刚好相反,滑轮往下转,字号变小。此外在Opera下,轻轻转动一下,文字就会变的很大或很小,感觉不够细腻。
另外新版本的XMLSPY 2007也支持这个功能。这样在编辑器查看文件时,可以很方便的调整字号了,而不用进到菜单里去调整显示字号大小。
> Is there anyway to create JSessionIDs per window rather than per browser?
> I am having the problem of when you open multiple tabs within
> a browser, and enter two simultaneous queries, the results returned are
> corrupted. Any suggestions? Thanks for the help.
I have an application that allows the user to perform searches and paginate through the results. Since the search really only needs to be performed once, pagination can be as simple as picking a segment of the results (stored in the session) and displayed on the screen.
I store the query that was performed as well as a "token" which is generated when the query is created. I place this token in all of the URLs on the page (most importantly, the ones involved with pagination).
If a request comes into the server including a token, I check the token against what I have in the session. If the tokens match, I skip the search. If they do not match, I re-run the search and re-set the token. Rinse, repeat.
In your case, you might want multiple simultaneous paginating queries, though I'm not exactly sure why. You could adopt a similar approach using a List of queries (using the same session key, I would imagine),
each with separate tokens for the windows.
The only problem with an implementation like this is that it is very hard to decide when you are "finished" with a query, and that it's okay to purge it from the session. That is left as an exercise for the reader
;)
Hope that helps,
-chris
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML LANG="de">
<HEAD>
<TITLE>"Suche"</TITLE>
<LINK href="./skin/KaPr_basis_structure.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_top.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_header_footer.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_left_menue.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_left_suchformular.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_left_funktionsunterscheidung.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_text_treffer.css" REL="stylesheet" TYPE="text/css"/>
<LINK href="./skin/KaPr_Color_Fonts.css" REL="stylesheet" TYPE="text/css"/>
</HEAD>
... ...
</HTML>
强烈不推荐,可是有的人偏偏喜欢这样,知道一下也无妨。
执行rundll32 netplwiz.dll,UsersRunDll,如果机器没有加入一个域,就可以去掉上方的“要使用本机,用户必须输入用户名和密码”选项前的小勾,再按“应用”按钮,会有个设置默认用户和密码的窗口弹出,输入用想默认登录的用户名和密码即可。
在XSL中对变量作加法:
如果使用的转换器只支持XSLT 1.0,则:
<xsl:variable name="n1">
<xsl:choose>
<xsl:when test="number($t1) = number($t1)">
<xsl:value-of select="$t1"/>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="n2">
<xsl:choose>
<xsl:when test="number($t2) = number($t2)">
<xsl:value-of select="$t2"/>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="temp1" select="$n1 + $n2"/>
如果XSLT parser支持XSLT 2.0:
XSLT 2.0 makes it easier because of the conditional expressions in XPath 2.0. You can do:
<xsl:variable name="n1"
select="if (number($t1) = number($t1)) then $t1 else 0" />
<xsl:variable name="n2"
select="if (number($t2) = number($t2)) then $t2 else 0" />
<xsl:variable name="temp1" select="$n1 + $n2" />
Depending on how you're getting the values of $t1 and $t2 (and the final definition of if-absent()) it might also be possible to use the if-absent() function:
<xsl:variable name="temp1" select="if-absent($t1, 0) + if-absent($t2, 0)" />