tag:blogger.com,1999:blog-49634952709530793632009-04-17T16:08:20.055+08:00的米-漠石's BlogDemi-MoStone's Bloglingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.comBlogger68125tag:blogger.com,1999:blog-4963495270953079363.post-76446412929389747332009-04-17T15:54:00.003+08:002009-04-17T16:08:20.075+08:00Tomcat JNDI 资源无法创建的问题 按 tomcat docs 中 Tomcat Standard Resource Factories 的说明,新建了一个 ServerSettings 类,配置内容如下:<br /> <resource name="bean/ServerSettings" auth="Container" type="com.lingsmm.framework.config.ServerSettingsBean" factory="org.apache.naming.factory.BeanFactory" uploadfilesavepath="/usr/local/nan/uploadFiles" uploadfiletemppath="/usr/local/nan/temp"/><br /><br />将文件打成 war 文件包进行发布,启动服务时,提示无法创建实例,似乎是类工厂无法取到,具体不是很确定。<br /><br />改用直接使用绝对路径,指向应用所在目录,启动服务时,打开 /manager/ 看到有两个 / (应用的 path = "/"),状态都是未启动的。<br /><br />将系统默认的 "/" 应用删除,重新启动服务,这回可以取得 JNDI 资源对象了。<br /><br />虽然解决问题了,但问题的原因却无法找到,感觉很是郁闷,大致看了下 tomcat 6.0.18 的源代码,对于那个 lookup 对应的 binding ,里面的对象是如何生成的,看得有点糊涂,没有深究。不知道有人遇上没,给个解析就好了。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-7644641292938974733?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-40547625841486639052009-02-09T17:00:00.002+08:002009-02-09T18:05:39.185+08:00EXCEL VBA Array Define & compile errorEXCEL VBA, EXCEL 2003 EN<br /><br />VBA1:<br />dim a(), b() as string<br /><br />call func a<br /><br />// compile error:<br />Type mismatch: array or user-defined type expected<br /><br /><br />VBA2:<br />dim a() as string<br />dim b() as string<br /><br />call func a<br /><br />// compile success<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-4054762584148663905?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-3032714914096321142009-01-31T16:41:00.002+08:002009-01-31T16:45:40.706+08:00【翻译】如何使用 X RESOURCES<pre><br />翻译的出发点,一是正好在找相关资料,一是,学习英文吧。<br />本人虽然是PG,但没上过大学,英语也是很差,翻译非常费时,边查单词边造句,太累了。不过感觉对学习英语没有太大帮助吧。<br /><br />疑点;<br />1. Athena 不知道具体是什么,可能是某种软件/硬件平台吧<br />2. geometry?几何?不知如何翻译。<br /><br />来源:<a href="http://web.mit.edu/answers/xwindows/xwindows_resources.html">http://web.mit.edu/answers/xwindows/xwindows_resources.html</a><br /><br />译稿:<br />如何使用 X RESOURCES<br /><br /><br /><br />● X-RESOURCES 文件是什么?<br /><br />用户可以定制程序的外观,使用了 X 资源文件中的条目的 X 接口的程序。在 Athena 上,这个文件叫 .Xresources,为了能够工作,这个文件需要放在用户目录的最上层。定制内容举例来说,包括改变应用程序的 geometry 和尺寸大小,或者程序所用的颜色。<br /><br /><br /><br />● 使用 X RESOURCES 我需要知道什么?<br /><br />要使用你的 .Xresource 为某个程序定制资源,你首先要知道你想要定制的资源,以及这个程序的实例或类。<br /><br />对于使用 X Toolkit intrinsics 编写的程序,其标准资源,请查阅 X 手册;对于程序的特定资源,请查阅该程序的手册。比如:要查找程序 "xterm" 的资源,你可以输入:<br /><br /> man xterm<br /><br />通常,一个 X 程序,它默认的实例就是它的名字,它的类,就是它的名字并且首字母大写,除非它的首字母是 "X",这种情况下,其前两个字母大写。比如:程序 "xterm" 的实例是 "xterm",类是 "XTerm",程序 "mwm","mwm" 作为实例,"Mwm" 作为类。<br /><br />相对于使用传统方式的程序,不幸的事情是,许多 X 程序是非传统的。如果是这种情况,只要启动有疑问的 X 程序,在 unix 提示符下输入 "xprop",再然后点击这个程序。比如,在一个 "xterm" 窗口使用 xprop 会得到:<br /><br /> WM_CLASS(STRING) = "xterm", "XTerm"<br /><br /><br /><br />● 我应当如何使用 X RESOURCES?<br /><br />在 .Xresources 文件中,条目有多种差异,但,是类似的,格式化的。说明所有的条目太费事。如果你需要比这里所说的更详细的信息,请查阅 X 手册。<br /><br />通常,这些条目的形式如下:<br /> class*resource: value<br /> instance*resource: value<br /> class.resource: value<br /> instance.resource: value<br /><br />资源设置的第一个元素可以是 "class(类)" 或者 "instance(实例)"。类包含了通过特定程序启动的所有,实例是一个给定特定名称的进程。<br /><br />比如,XTerm 是一个类,所有你启动的 xterm,无论如何,他们都由这个类而来(这个类启动的所有资源都将被应用)。然而,你也可以像这样来启动 xterm:<br /><br /> xterm -name xterm-big<br /><br />这个处理将会产生一个 XTerm 类,但是实例却是 xterm-big。<br />因此,你可以像这样来创建资源:<br /><br /> XTerm*reverseVideo: on<br /> xterm*VT100.geometry: 80x24<br /> xterm-big*VT100.geometry: 80x48<br /> xterm-small*VT100.geometry: 80x10<br /><br />这样,所有你启动的 xterm 的 reverse video 被设置为 on,但是使用 "-name xterm-big" 选项启动的,拥有一个 geometry,使用 "-name xterm-small" 选项启动的,拥有另一个,而没有指定名称的则默认名称为 xterm,也拥有一个不同的 geometry。(VT100 指明 geometry 用在主文本窗口,而不是菜单或子窗口。)<br /><br />资源名称(如上面例子中的 'geometry')是 X 程序的特定外观属性。拼写资源名称是要小心。只有特定的拼写才正确。比如:'reverseVideo' 和 'ReverseVideo' 作为 xterm 资源而正确地起作用,而不是其它拼写。<br /><br />其它例子:<br /><br /> oneko*tora:true<br /><br /> matlab*reverseVideo: false ! matlab windows in "reverse video"<br /><br /> emacs*Font: 8x13 ! 字体 8x13, 80 列<br /> emacs*geometry: 80x48+0+0 ! 宽的, 48 行高<br /><br /> XTerm*scrollBar: on ! 带滚动条<br /> XTerm*saveLines: 250 ! 保存 250 行回溯<br /><br /> XTerm*VT100.geometry:80x48+0+0 ! 仅主窗口 80x48<br /><br />在这些例子中,"*" (宽松绑定) 和 "." (严格绑定) 之间的区别是,*会让资源应用到顶级窗口之内的所有子窗口(像菜单之类),点则只应用到程序的顶级窗口。<br /><br /><br /><br />● 其它信息<br /><br />-感叹号(!)用来在 .Xresources 文件中注释一行<br />-实例的优先级比类高。如果你为一个程序使用不同的值同时指定了类和实例,实例的资源将被使用,如:<br /> xterm*Background: blue<br /><br />将被使用,代替:<br /><br /> XTerm*Background: green<br /><br />-要重新读入 .Xresources 文件,并且抛弃老的资源,你可以输入:<br /><br /> xrdb ~/.Xresources<br /><br />-要重新读入 .Xresources 文件,并保持原来的资源,输入:<br /><br /> xrdb -merge ~/.Xresources<br /><br /> 这将合并资源到你当前正在使用的资源中。<br /><br />-对于 Athena 程序,X 接口程序的默认资源被放在目录 /usr/athena/lib/X11/app-defaults.<br /><br />-事实上,你并不需要通过程序的类或实例名称来作定制。比如,如果你想为所有 X 驱动的程序指定相同设置,只要加入:<br /><br /> *resource: value<br /><br /> 到你的 .Xresources 文件中。<br /><br />-避免在 .Xresources 文件的头部和尾部出现空格。<br /><br />-输入 "attach dotfiles",查找 /mit/dotfiles/Xresources 目录,你可以找到 Xresource 文件的示例。<br /><br />-你可以改变许多使用 -name 选项启动的 X 程序的实例。比如,你如果输入 "xterm -name XT1" 来启动一个 xterm 窗口,那么你可以在你的 .Xresources 文件中使用 "XT1" 来定制资源,就像这样:<br /><br /> XT1*Background: yellow<br /><br /></pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-303271491409632114?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-49334520487211741542009-01-31T08:39:00.002+08:002009-01-31T09:06:08.530+08:00Xorg 日文键盘,打不出下划线修改配置文件: /etc/X11/xorg.conf<br /><br />修改前:<br />Section "InputDevice"<br /> Identifier "Keyboard0"<br /> Driver "keyboard"<br /> Option "CoreKeyboard"<br /> Option "XkbRules" "xorg"<br /> Option "XkbModel" "pc105"<br /> Option "XkbLayout" "jp106"<br /> Option "XkbVariant" ""<br />EndSection<br /><br />修改后:<br />Section "InputDevice"<br /> Identifier "Keyboard0"<br /> Driver "keyboard"<br /> Option "CoreKeyboard"<br /> Option "XkbRules" "xorg"<br /> Option "XkbModel" "<span style="color: rgb(255, 0, 0); font-weight: bold;">jp106</span>"<br /> Option "XkbLayout" "<span style="font-weight: bold; color: rgb(255, 0, 0);">jp</span>"<br /> Option "XkbVariant" ""<br />EndSection<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-4933452048721174154?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-87876944352212431892009-01-30T14:36:00.004+08:002009-01-30T16:29:35.453+08:00Archlinux 安装笔记安装环境:<br />vista + virtualbox 2.1.2(audio: ICH AC97)<br /><br />1.基本系统安装<br />加载启动光盘:archlinux-2008.10-archboot.iso,手工分区<br /> /boot : 32M<br /> swap: 512M<br /> /: 剩余空间<br />使用 jp106 keymap, ext3 filesystem<br /><br />参考 /cdrom/arch/archdoc.txt<br /><br />2.从硬盘启动,更新软件包<br />编辑 /etc/pacman.conf,添加非官方源 <a href="http://mirror.lupaworld.com/archlinux/" class="external free" title="http://mirror.lupaworld.com/archlinux/" rel="nofollow">http://mirror.lupaworld.com/archlinux/</a> 速度较快,adsl,大概 150K - 200K 左右。<br />参考:http://wiki.archlinux.org/index.php/Mirrors<br /><br />#pacman -Syu<br /><br />3.创建普通用户<br />#adduser<br /><br />4.安装sudo<br />#pacman -S sudo<br />#visudo<br />(添加sudo用户列表)<br />参考:http://wiki.archlinux.org/index.php/Sudo<br /><br />5.安装 Xorg<br />#pacman -S xorg<br />参考:http://wiki.archlinux.org/index.php/Xorg<br />#pacman -S hwd<br />#hwd -u<br />#hwd -xa<br /><br />6.安装vbox-addition<br />在虚拟机菜单中,选择 Devices - Install Guest Additions<br />#mount /dev/cdrom<br />#cp /media/VBoxLinuxAdditions-x86.run ~/<br />#pacman -S gcc make<br />#~/VBoxLinuxAdditions-x86.run<br />#nano /etc/X11/xorg.conf<br />找到 ps/2 mouse,将 Driver 修改为 vboxmouse<br /><br />7.安装 openbox<br />参考:http://wiki.archlinux.org/index.php/Openbox<br />1) #pacman -S openbox<br />2) 再按照安装提示,复制配置文件到 ~/.config/openbox<br />3) 编辑 .xinitrc ,添加 exec openbox-session<br />4) 可编辑 ./config/openbox/autostart.sh 添加自启动项,别忘了在每个命令后加 &<br /><br />8.安装 fbpanel<br />#pacman -S fbpanel<br />添加到 ~/.config/openbox/autostart.sh<br /><br />9.安装 yaourt<br />#pacman -U http://repo.archlinux.fr/i686/yaourt-0.9.2.4-1.pkg.tar.gz<br /><br />10.安装 ibus 输入法<br />1) 安装 pkg-config,ibus 的 configure 需要它<br /> 下载: http://pkgconfig.freedesktop.org/releases/?C=M;O=D<br /> #tar zxvf pkg*.tar.gz<br /> #cd pkg-config...<br /> #./configure --prefix /usr<br /> #make<br /> #make install<br />2) 安装 ibus-pinyin ibus-table ibus-anthy<br />3) 将 ibus 添加到 ~/.config/openbox/autostart.sh<br />4) 设置环境变量,修改文件 ~/.bashrc,添加:<br /> export XMODIFIERS=@im=ibus<br /> export GTK_IM_MODULE=ibus<br /> export QT_IM_MODULE=ibus<br />5) 重新登录<br /><br />11.安装 firefox<br />1) #pacman -S firefox<br />2) 安装扩展 user agent switcher,添加 Firefox 3.0.5,设置内容,参考默认值,将 GranParadiso 修改为 Firefox,appName: Firefox/3.0.5<br />3) 安装 google toolbar<br />4) 安装 Torbutton<br /><br />12.安装 flashplugin<br />#pacman -S flashplugin<br /><br />13.安装 tor<br />参考:http://wiki.archlinux.org/index.php/Tor<br />别忘了 forward-socks4a / localhost:9050 . 最后的这个"."<br /><br />14.安装文本编辑器 leafpad<br />#pacman -S leafpad<br /><br />15.安装文件管理器 xfe<br />#pacman -S xfe<br /><br />16.设置ALSA<br />参考:http://wiki.archlinux.org/index.php/ALSA<br />别忘了确认,最后加载 snd-pcsp。方法是在 /etc/modprobe.conf 中添加:<br />options snd-pcsp index=2<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-8787694435221243189?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-89725519193355836522008-10-28T11:41:00.003+08:002008-10-28T11:52:58.877+08:00在 Postgresql 中使用正则表达式替换例:<br />select<br />regexp_replace('wz-001', '^\\D+-|^\\d{2}-|\\D', '', 'g'),<br />regexp_replace('01-3001', '^\\D+-|^\\d{2}-|\\D', '', 'g'),<br />regexp_replace('08001-A', '^\\D+-|^\\d{2}-|\\D', '', 'g'),<br />regexp_replace('8372A', '^\\D+-|^\\d{2}-|\\D', '', 'g'),<br />regexp_replace('83j3s9', '^\\D+-|^\\d{2}-|\\D', '', 'g');<br /><br />结果:<br />001, 3001, 08001, 8372, 8339<br /><br /> 补空例:<br />select<br />lpad('329', 10, '0'),<br />lpad('93', 10, '0');<br /><br />结果:<br />0000000329, 0000000093<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-8972551919335583652?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-23855360192506707262008-10-22T11:16:00.003+08:002008-10-22T11:45:00.417+08:00Eclipse 的代码折叠<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ztYZmxCjHw0/SP6hLM_WEQI/AAAAAAAABqw/cJCiBPhhFNw/s1600-h/codeFoldingSetting.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_ztYZmxCjHw0/SP6hLM_WEQI/AAAAAAAABqw/cJCiBPhhFNw/s320/codeFoldingSetting.jpg" alt="" id="BLOGGER_PHOTO_ID_5259818628652863746" border="0" /></a><br /><br /><br /><br /> 在使用 webwork 的过程中,为了接收表单参数,而需要在 action 中写一堆的 setter, getter,这些代码与业务逻辑代码混在一起,看着有些令人生厌。Java 不能像 C# 支持一个类可以拆分成多个文件,如果使用 modelDriven,创建实际并不存在的中间对象,似乎有些别扭;或者再创建一个基类,但也不太理想。除此之外,或许将代码折叠,眼不见为净倒是不错的选择。<br /> "Coffee-Bytes Code Folding Plugin",就是这样一个 eclipse 插件,但按官方的安装方法, eclipse 更新程序取不到其提供的网站内容,无法安装。可以到 csdn 的资源上找找,有朋友提供了下载。<br />安装完成后,在设置中,更改默认的 folding 选项,选择此插件,重新打开 java 文件,应该可以看到 if 等也可以折叠了。<br /> 如果想要类似于 C# 中的 #region 效果,则需要打开 User defined regions 选项。<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ztYZmxCjHw0/SP6gEzlcItI/AAAAAAAABqo/qNIKYxEijSs/s1600-h/codeFolding.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_ztYZmxCjHw0/SP6gEzlcItI/AAAAAAAABqo/qNIKYxEijSs/s320/codeFolding.jpg" alt="" id="BLOGGER_PHOTO_ID_5259817419242480338" border="0" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-2385536019250670726?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com1tag:blogger.com,1999:blog-4963495270953079363.post-32587801805837709292008-09-23T14:51:00.003+08:002008-09-23T15:02:45.093+08:00Java 中,+ 号连接的多行文本,与单行文本的有区别吗?在代码编写中,经常会有一长串的文本,为了阅读方便,一般是以多行输入的。在 C# 中,可以使用 @ 符来指定这是一个多行文本块,但是在 Java 中,并没有找到类似的语言特性,所以我只能用 + 号来连接多行文本,并以为这与单行文本,最终的处理方式是不一样的,会浪费 CPU 资源,进行字符串拼接。<br /><br /><br />如下面的代码:<br /><pre style="color: blue;"><br /> public ArrayList<enterprisebean> getPage(EnterpriseForm formBean, Integer pageNo) throws Exception{<br /> ArrayList<enterprisebean> result = new ArrayList<enterprisebean>();<br /> // SQL文<br /> SQLBuilder sql = new SQLBuilder("SELECT id, code, category, name, phone1, fax1, phone2, fax2, " +<br /> "email, url, address, keyword, " +<br /> "bank_name1, bank_account1, bank_account_name1, " +<br /> "bank_name2, bank_account2, bank_account_name2, " +<br /> "bank_name3, bank_account3, bank_account_name3, " +<br /> "contact1_name, contact1_phone1, contact1_phone2, contact1_phs, " +<br /> "contact1_mobile1, contact1_mobile2, contact1_email, " +<br /> "contact1_qq, contact1_msn, contact1_skype, " +<br /> "contact2_name, contact2_phone1, contact2_phone2, contact2_phs, " +<br /> "contact2_mobile1, contact2_mobile2, contact2_email, " +<br /> "contact2_qq, contact2_msn, contact2_skype, " +<br /> "contact3_name, contact3_phone1, contact3_phone2, contact3_phs, " +<br /> "contact3_mobile1, contact3_mobile2, contact3_email, " +<br /> "contact3_qq, contact3_msn, contact3_skype, " +<br /> "memo, " +<br /> "regist_user_id, regist_time, update_user_id, update_time " +<br /> "FROM enterprise");<br /></enterprisebean></enterprisebean></enterprisebean></pre><br />但是一想,编译器难道不会作优化处理么?<br />为了验证,使用 jadnt158 进行了反编译,验证了这个想法。<br />结果不出所料,从而可以没有顾虑地使用多行字符串了。<br /><br /><br />上面代码反编译后的结果:<br /><pre style="color: blue;"><br /> public ArrayList getPage(EnterpriseForm formBean, Integer pageNo)<br /> throws Exception<br /> {<br /> ArrayList result = new ArrayList();<br /> SQLBuilder sql = new SQLBuilder("SELECT id, code, category, name, phone1, fax1, phone2, fax2, email, url, address, keyword, bank_name1, bank_account1, bank_account_name1, bank_name2, bank_account2, bank_account_name2, bank_name3, bank_account3, bank_account_name3, contact1_name, contact1_phone1, contact1_phone2, contact1_phs, contact1_mobile1, contact1_mobile2, contact1_email, contact1_qq, contact1_msn, contact1_skype, contact2_name, contact2_phone1, contact2_phone2, contact2_phs, contact2_mobile1, contact2_mobile2, contact2_email, contact2_qq, contact2_msn, contact2_skype, contact3_name, contact3_phone1, contact3_phone2, contact3_phs, contact3_mobile1, contact3_mobile2, contact3_email, contact3_qq, contact3_msn, contact3_skype, memo, regist_user_id, regist_time, update_user_id, update_time FROM enterprise");<br /></pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-3258780180583770929?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-88902193804756799432008-09-22T22:16:00.003+08:002008-09-22T22:37:24.129+08:00偶见汉字[ "的" "地" "得"] 的讨论上网浏览时,发现这些网友评论好有趣,虽然说离题万里,倒也是令人受教了。<br />比如下面这个(来源:<a href="http://www.cnbeta.com/articles/65289.htm">http://www.cnbeta.com/articles/65289.htm</a>)<br /><br /><div style="border: 1px solid gray;"><br /><fieldset> <legend> 引用匿名人士发表于2008-09-22 14:42:40的评论:</legend> <div> <fieldset> <legend> 引用webbe发表于2008-09-22 14:23:32的评论:</legend> <div> <fieldset> <legend> 引用匿名人士发表于2008-09-22 13:53:04的评论:</legend> <div> <fieldset> <legend> 引用webbe发表于2008-09-22 13:30:49的评论:</legend> <div> 用Windows7画图工具的我得意的飘过。。。</div> </fieldset> 第二个“的”,应该是“地”,“飘过”属于动词。</div> </fieldset> 不巧西厢记有同类例:《西厢记诸宫调》(卷六):平生踪迹无定着,如断蓬。听塞鸿,哑哑的飞过暮云重。 不巧我是学汉语言文学的;不巧我导师又是吕叔湘的学生;不巧吕叔湘又主张“的”“地”合并;不巧又有杨秀君、李赓钧、田小琳、倪宝元、鞠复信等学者支持这 个观点;不巧1984年发布了《中学教学语法系统提要(试用)》中提倡不分“的”、“地”,都用“的”字;不巧我正好生在1986年就接受了这个教 育。。。太多的不巧了。 </div> </fieldset> 我95年小学毕业,当时老师对“地的得”三字的用法还强调的十分厉害,作文用错要扣分,何解楼上的86年通用的?难道九几年又改成不能通用了?但据说现在已经可以通用了,难道又改了?</div> </fieldset> <dd class="re_detail"> “的”对于“地”“得”两字的合并从上世纪末就一直在学术界大讨论了。作为一种文化科学,是没有绝对的真理这种说法的,也就是说其实语言这种东西一直在随 着使用习惯的变化而不断变化,看看古代汉语到现代汉语的变化就能知道。所以一个字怎么用,可能在某几年是一定的,但是一旦有争议的话,则很可能发生变化。 对于这三个“的”“地”“得”,其实至今没有定论。小学的强调是为了能让孩子更好的掌握语法结构把握句子的意思,突出强调的内容。譬如“严厉的批评是必要 的”和“严厉地批评是必要的”,两句话都是正确的,但是因为助词“的”与“地”的不同所以强调的点不同,前者倾向于强调“批评”这一行为的必要,而后者倾 向于强调批评的程度——“严厉”的必要。 但是语言毕竟是一种工具,还是来用的,规范有规范的必要,但是一味的讲究规范而否定发展变化就是不对的,因此过分强调用法的行为只会在小学打基础的时候。 所以也就有了你说的一会儿强调一会儿又不强调的情况。 但这三个字也并不是所谓的“通用”,而是“的”作为助词的时候能在不给句子造成歧异的情况下能替代“地”与“得”,用通俗点的话来说就是现在这三个字不是 各管三分之一了,而是现在“的”范围变大了,能涵盖一部分的“地”和“得”了。 其实我们导师说的是,在一个结构你很把握不准的情况下,用“的”的话正确率一般会在75%以上。 《中学教学语法系统提要(试用)》是确实存在的,只是在可以不分但是分的话更利于学生、孩子掌握语句的情况下,多数小学的老师还是选择了强调分。仅此而 已。</dd></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-8890219380475679943?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-59385644695989404162008-09-19T20:24:00.003+08:002008-09-19T20:39:37.521+08:00Excel add-in 备忘两项机能:<br /><br />1、自动添加工具栏按钮,文档关闭时,自动删除所添加的工具栏按钮<br />2、点击按钮图标,执行模块(Module)中的宏机能<br /><br />注:在取得工具栏对象时,如果指定名称的工具栏不存在,会报错。下面代码的处理是对工具栏集合进行遍历,判断是否存在,当然,也可以直接使用异常处理(on error goto)来进行判断。<br /><pre><br /><span style="font-weight: bold; color: rgb(0, 153, 0);">代码1(ThisWorkBook):</span><br /><br />Option Explicit<br />Const toolbarCaption As String = "MyToolbar"<br />Const onActionString As String = "autoAdjust"<br /><br />Private Sub Workbook_Open()<br /> Dim toolbar As CommandBar<br /> <br /> Set toolbar = getCommandBar(toolbarCaption)<br /> If toolbar Is Nothing Then<br /> Set toolbar = Application.CommandBars.Add(Name:=toolbarCaption)<br /> toolbar.Visible = True<br /> End If<br /> <br /> With toolbar.Controls.Add(Type:=msoControlButton, Before:=1)<br /> .Caption = "Auto Adjust"<br /> .TooltipText = "Run Auto Adjust"<br /> .OnAction = onActionString<br /> ThisWorkbook.Worksheets(1).Shapes(1).Copy<br /> .PasteFace<br /> End With<br /> <br /> Set toolbar = Nothing<br /> <br />End Sub<br /><br />Private Sub Workbook_BeforeClose(Cancel As Boolean)<br /> Dim toolbar As CommandBar<br /> Dim i As Integer<br /> <br /> Set toolbar = getCommandBar(toolbarCaption)<br /> If toolbar Is Nothing Then<br /> Exit Sub<br /> End If<br /> <br /> For i = 1 To toolbar.Controls.Count<br /> With toolbar.Controls(i)<br /> If .OnAction = "'" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & "'!" & onActionString Then<br /> .Delete<br /> Exit For<br /> End If<br /> End With<br /> Next i<br /> <br /> If toolbar.Controls.Count = 0 Then<br /> toolbar.Delete<br /> Set toolbar = Nothing<br /> End If<br />End Sub<br /><br />Private Function getCommandBar(barCaption As String)<br /> Dim i As Integer<br /> <br /> For i = Application.CommandBars.Count To 1 Step -1<br /> If Application.CommandBars(i).Name = barCaption Then<br /> Set getCommandBar = Application.CommandBars(i)<br /> Exit Function<br /> End If<br /> Next i<br /> <br /> Set getCommandBar = Nothing<br />End Function<br /><br /><br /><span style="font-weight: bold; color: rgb(0, 153, 0);">代码2(Module):</span><br /><br />Option Explicit<br /><br />Sub autoAdjust()<br /> Dim formulaString As String<br /> Dim i As Integer<br /> Dim sheet As Worksheet<br /> <br /> Set sheet = ActiveSheet<br /> <br /> 'addjust column<br /> sheet.Columns("E:Z").ColumnWidth = 8<br /> sheet.Columns("G:G").Delete Shift:=xlToLeft<br /> sheet.Columns("H:H").Delete Shift:=xlToLeft<br /> sheet.Columns("I:J").Delete Shift:=xlToLeft<br /> sheet.Columns("J:J").Delete Shift:=xlToLeft<br /> <br /> ' unmerge<br /> Dim mergeCells, cell As Range<br /> Dim formula As Variant<br /> Dim iRow, iCol As Integer<br /> <br /> For iRow = 3 To 100<br /> For iCol = 1 To 15<br /> Set cell = sheet.Cells(iRow, iCol)<br /> If cell.mergeCells Then<br /> Set mergeCells = cell.MergeArea<br /> cell.UnMerge<br /> formula = cell.formula<br /> mergeCells.Cells.formula = formula<br /> End If<br /> Next iCol<br /> Next iRow<br /> <br /> 'split size<br /> 'size formula format: =length * width * height<br /> Dim lst() As String<br /> For i = 3 To 100<br /> formulaString = sheet.Cells.Item(i, "I").formula<br /> If Len(formulaString) > 1 Then<br /> lst = Split(Mid(formulaString, 2), "*")<br /> If UBound(lst) <> 2 Then<br /> With sheet.Range(sheet.Cells.Item(i, "I"), sheet.Cells.Item(i, "L"))<br /> .formula = formulaString<br /> .Interior.ColorIndex = 3<br /> .Interior.Pattern = xlSolid<br /> End With<br /> Else<br /> sheet.Cells.Item(i, "J") = lst(0) 'length<br /> sheet.Cells.Item(i, "K") = lst(1) 'width<br /> sheet.Cells.Item(i, "L") = lst(2) 'height<br /> End If<br /> End If<br /> Next i<br /> <br /> sheet.Columns("I:I").Delete Shift:=xlToLeft<br /> sheet.Columns("A:B").Insert Shift:=xlToRight<br /> <br /> sheet.Range("A3:A100") = Split(ActiveWorkbook.Name, ".")(0)<br /> sheet.Range("B3") = 1<br /> Range("B4").FormulaR1C1 = "=R[-1]C + 1"<br /> Range("B4").AutoFill Destination:=Range("B4:B96"), Type:=xlFillDefault<br /> Range("B3").Select<br /><br />End Sub<br /></pre><br />(完)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-5938564469598940416?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-27809524733448187692008-06-16T21:19:00.002+08:002008-06-16T21:21:56.117+08:00佳的美(GADMEI) UTV 380 在 XP SP3 上安装驱动升级了 SP3,无法安装电视棒的驱动程序了,提示要先安装 SP2。<br />驱动安装程序是使用 install shield 打包的,可以解压缩驱动程序包,使用 inf 文件,windows xp 自动安装。<br /><br />1.下载 install shield cab 解压缩工具 i6comp<br />下载地址:http://hobbes.nmsu.edu/cgi-bin/h-viewer?sh=1&fname=/pub/os2/win32os2/i6comp020.zip<br /><br />2.将下载的工具 i6comp020.zip 解压缩到任意文件夹<br /><br />3.将 UTV 380 的驱动文件安装目录下的 driver\install\ 的所有文件复制到上面的文件夹中的 Release 的下级文件夹中<br /><br />4.在开始菜单中,选择运行,输入命令: cmd,打开 Dos 命令窗口<br /><br />5.在 Dos 窗口输入命令, []内为说明,无需输入,每行输入结束,按回车键<br />cd M:\i6comp020\Release [将 M:\i6comp020 改为你解的文件夹]<br />i6comp e data1.cab<br />i6comp e data2.cab<br /><br />6.插入电视棒,系统提示找到新硬件,点击浏览按钮,打开刚才驱动解压出来的文件夹,点击 OK,一路继续。<br /><br />7.安装应用程序。<br /><br />其实,造成无法安装的原因,我想是驱动安装程序将系统环境设置死了,如果是有意为之,那是太细心了,未来没测试过的平台,就不给安装了。如果不是,那是有点粗心了,或是思维定势?<br /><br />不管怎么说,我按上面的方法安装后,并没有发现使用与 SP2 有任何差别,况且,听说 SP3 也就是收集了 SP2 之后的补丁而已,并没有什么大的改变。<br /><br />令人遗憾的是,在官方论坛上,却迟迟没有发布新的驱动程序安装包,如果不是管理问题,那只能说,对客户实在是不敬。因为,在我看来,改一下安装包,只不过是在判断条件上,多加一个 OR 而已:<br />if (systemEv != sp2 || systemEv != sp3){<br /> alert("请安装SP2.")<br />}<br /><br />在 ubuntu 8.04 中,安装了 v4l2 后,使用 card=37(UTV330),检索不到频道,看频段,55M~900M,应该是正确的吧。改为 card = 6,则提示无法设置频率,可能因为代码中没定义 turn。v4l2 的代码,没精力和时间去研究,只能遗憾放弃,看电视,还是重启到 xp 了。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-2780952473344818769?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com2tag:blogger.com,1999:blog-4963495270953079363.post-37254616997607590862008-02-10T13:47:00.000+08:002008-02-10T14:20:24.717+08:00注意安全总是很容易粗心大意,做事不够严谨,一般来说,这不会有太大的后果,但涉及到安全问题,还是不能太随便。<br /> 年前,为了方便,在厨房加装一个插座。这对于我来说,是很平常的事。准备了线材,工具等就开工了。第一步,当然是拉闸断电;第二步是爬上天花板,走暗线;第三步是并上电源线,第四步是安装多用插座。在打开多用插座后,发现里面少了枚螺丝,不想再去弄一只,于是打算直接穿线后拧死。事情就在这时发生了,当我直接用手去穿线时,天哪,我被结结实实地电着了!忙乱中,使劲地甩手,当我下来时,手被多用插座的铜片划出了N道血口,但还不如被电击时那浑身震颤的难受滋味,这在我N次被电的记录中,是最为严重的一次,可能与我捏实了电线有关系吧,这次电下来,半天才回过神来。<br /> 追查原因是,家里竟然有两处电闸!我断的是与厨房无关的那只,天哪,太恐怖了!<br /><br /> 这次的教训是非常“沉重”的,分析了我的处理流程,有多处马虎的地方:<br />1、这是在老丈人家,由于刚翻修过房子,电路被重新改过,而我却不知情。照理,在断电后,应当进行确认,尤其是在别人布的线路上作业时。如果当时我开灯,或是用电笔进行测试,就会在第一时间发现这个问题。<br />2、为了安全起见,应该小心地以假想带电模式下进行操作。如电源并接应当在连接终端完成之后来做,而我却是先连接电源,然后再安装多用插座。(连接电源其实是做了个插头,接到一处插座上,因此没有发生触电)连接插座时,发现少了一枚螺丝,最好还是重新换一个,因为直接拧线连接,有可能会造成连接不可靠,在接入大功率设备时(如电炉等几千瓦的加热器),容易产生电弧发热,留下火灾的安全隐患。<br /><br /> 还好,没有造成更严重的结果,真是万幸,安全一定要注意啊。<br /> 还有象插头制作,一定要考虑连接线头是不是牢固可靠,线头是不是压实了,或是考虑打个结,不要简单一接了事,不是每个人,每一次都会老老实实地握住插头来拨电线的,万一拉出一根线来,可就危险了。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-3725461699760759086?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com2tag:blogger.com,1999:blog-4963495270953079363.post-69584241351437013682008-01-23T21:32:00.000+08:002008-01-24T21:14:12.375+08:00eclipse3.3 + tomcat5.5.25 启动web服务器错误在启动tomcat5.5服务器时出错,提示:<br />atalina.startup.Bootstrap start<br />java.lang.ClassNotFoundException: org.apache.catalina.startup.Catalina<br /> at java.net.URLClassLoader$1.run(URLClassLoader.java:200)<br /> at java.security.AccessController.doPrivileged(Native Method)<br /> at java.net.URLClassLoader.findClass(URLClassLoader.java:188)<br /> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)<br /> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)<br /> at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:222)<br /> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:410)<br /><br />eclipse3.3启动器生成的命令是:<br />M:\Application\Java\jdk1.5.0_14\bin\javaw.exe -Dcatalina.base=M:\Mostone.Personal\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 -Dcatalina.home=M:\Application\apache-tomcat-5.5.25 -Dwtp.deploy=M:\Mostone.Personal\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps -Djava.endorsed.dirs=M:\Application\apache-tomcat-5.5.25\common\endorsed -classpath M:\Application\apache-tomcat-5.5.25\bin\bootstrap.jar;M:\Application\Java\jdk1.5.0_14\lib\tools.jar org.apache.catalina.startup.Bootstrap start<br /><br />最终找到原因是:catalina.base不正确而找不到tomcat的lib目录下那些jar文件,如:apache-tomcat-5.5.25\server\lib\catalina.jar等,启动失败.<br /><br />关于catalina.base和catalina.home这两个参数的描述,我在apache-tomcat-5.5.25\bin\catalina.bat中找到的相关信息是:<br />rem CATALINA_HOME May point at your Catalina "build" directory.<br />rem<br />rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions<br />rem of a Catalina installation. If not present, resolves to<br />rem the same directory that CATALINA_HOME points to.<br />catalina.home应该是Application所在目录,catalina.base是tomcat的安装目录,如果省略catalina.base参数,则使用catalina.home作为tomcat的安装目录.<br /><br />将VM参数的-Dcatalina.base与-Dcatalina.home互换,启动成功,但eclipse IDE环境下的Server project中配置文件 server.xml 不能载入,载入的是tomcat目录下的 server.xml,影响eclipse自动发布.<br /><br />我不确定,出现这个问题与安装tomcat是否有关.我的环境是:<br />OS: Windows XP Pro<br />JDK: jkd1.5-14(只安装了开发包,PATH变量是手工加的)<br />tomcat: 5.5.25(下载的是zip包,而不是service安装包)<br /><br />tomcat解压后,startup成功,但eclipse缺省下run on server出现以上问题,不知道在直接安装service版tomcat情况下是否能成功启动。<br /><br />时间不早了,昨天没睡好,今晚早点睡,改天折腾吧.<br /><br />(续上)<br />今天无意打开Server project目录下的文件,发现catalina.policy和catalina.properties中有运行环境的设置,才猛然想起,这些文件被我覆盖过。因为原来用的是tomcat 6.0,我改过server.xml。<br /><br />将Servers project删除,重新建立,这次再运行,一切OK。<br /><br />费了这么多时间,真是冤枉啊,太郁闷了,未能快速找出错误的解决方法,是我不了解eclipse启动的背后,不知道从哪里入手查找问题,不过,翻看E文文档资料,对于我来说还是件难事。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-6958424135143701368?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-72250586805055003362007-10-08T10:01:00.000+08:002007-10-08T10:14:07.350+08:00“萝莎”台风十一后的第一天上班时间,起床后,雨挺大的,但没有收到不上班的通知,只好持伞出门。才走几步,转上大路,竟然全是积水,风又大,很多人把鞋子拿在手上,光脚行走。我的裤子也早就被风雨吹湿了,鞋子自是更不用说。好不容易到了公司,竟然就两个人!着湿漉漉的鞋子,被打混的裤子紧贴着大腿,下身犹如刚从水里捞上来似的,甭提有多难受了。在公司里实在坐不了几分钟,想想反正也没什么人,得,回去换身衣服,在家休息好了。<br /> 回去的路上,从马路的另一侧走,才发现,路边的小河已经漫到岸上了,河沿边的长椅,已经被水没过了椅面,水下是青青的绿草,太夸张了,看来杭州的泄洪能力实在是不堪台风的蹂躏啊。<br /> 回家上QQ,发现其它公司很多人都收到通知不上班了,哎,真不厚道啊,我们没有 :-(<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-7225058680505500336?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-28231019291846002202007-08-01T20:05:00.000+08:002007-08-01T20:14:32.964+08:00生病了?自己吓自己!身体不舒服,不一定是生病了,有时,是心理作用。<br /> 这段时间,感觉胸口闷,心脏不舒服,吓坏了,今天上医院(上海仁济医院[东部]),O,GOD。人山人海!昨天晚上去急诊,也是人山人海,楞给吓回来了,后来11点钟打电话去问,说还有N多人。<br /> 进了医院,由于急诊时给我的是内科,一大早我也挂了个内科,等了一个小时多,终于轮到了,结果没问几句,要我改挂心内科,郁闷啊,又是漫长的等待。。。<br /> 后来又是心电图,又是胸透,均查无异常,最终结论:自己吓自己的。<br /><br /> 敲键盘的,长时间保持一个姿势,又缺少锻炼,身体本来就很虚,疲劳或是没休息好,有个不适感很正常,可是老被人说太“瘦”,没精神,又有“胃出血”的既往病史,消化一直不太好,以至于心理上有了“阴影”,总以为自己有个什么不好的病。。。。<br /><br /> 还好,没事就好,呵呵,保持开朗的心情最重要!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-2823101929184600220?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-2479251446805857942007-07-24T09:01:00.000+08:002007-07-24T09:08:57.612+08:00十年同学会7/21,老班长组织了我们高中的十年同学会,还请了当时的班主任及几位任课老师。<br /> 比预想的人数要多,本以为有一半就不错了,但那天来了近五十多位同学(我们班是两个理科慢班的合集,总人数好象是64)。看来,慢班也有好处,大部分同学依然在家乡,容易聚在一起,不象快班,基本上都散落在全国各地了,甚至好些在国外了。<br /> 象我这么瘦的,也有两三,哈哈哈,颇为慰藉啊。当然,也有好些个本就不瘦的,现在更胖了。得盯着那张脸看上半天,才能与昔日的形象对上!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-247925144680585794?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com1tag:blogger.com,1999:blog-4963495270953079363.post-39036948567244804452007-07-18T07:59:00.000+08:002007-07-24T09:00:14.527+08:00mp4 3gp 视频格式转换新入手了一台双模手机:大唐DT508,支持GSM和小灵通。<br /> 国产的手机,品质不怎么样,倒是杂七杂八的功能N多。其中就支持MP4,3GP媒体格式。于是也将手头的一些影片给转成MP4,但怎么试都不行,要么有图象没声音,要么就给个“格式不支持”。<br /> 最后,找了个Total Video Converter 2.603,转换成3gp格式,使用默认设置生成的文件,可以正常播放,但品质较差。尝试将视频比特率设为原比特率后,品质好多了,不过,生成的MP4,倒是死活不能成功播放,不知是什么原因。<br /> 另外有款开源软件:Media Coder,功能要强大很多,但具体设置比较复杂,必须得有相关的背景知识,象比特率,画面大小,每种格式都有自己的标准,不是随便设就可以的,但输出AVI格式的,一般来说没问题,那倒是可以用这款软件来做前期处理,如拆分,合并,声音,画面处理等。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-3903694856724480445?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-83139468061398368102007-07-07T06:52:00.000+08:002007-07-07T07:08:24.966+08:00C#2.0 首次使用匿名方法从知道C#2.0引入了匿名方法后,这还是首次使用:-)<br />goodsIDs是List<int>,为了拼接SQL文,使用String.Join方法,可遗憾的是,它只支持字符型数组,在不想写个循环的情况下,选择使用Array的转换方法,但它需要一个委托方法来进行类型转换。本就想省事,当然也不想新建一个方法,于是想到了匿名方法,由此有了第一次体验,呵呵,感觉挺有趣的,和JavaScript的prototype指定一个无名称的function差不多。<br /><br /> // 生成SQL文<br /> sql.AppendLine("UPDATE LINGS_GOODS");<br /> sql.AppendLine(" SET LINKID=0");<br /> sql.AppendLine(<br /> String.Format("ID IN (@GOODSID{0})",<br /> String.Join(",@GOODSID",<br /> goodsIDs.ConvertAll<string>(new Converter<int,string>(<span style="color:red">delegate(int value) { return value.ToString(); }</span>)).ToArray())),<br /> true);<br /><br />不过,最终也没有使用匿名方法,因为想起来框架中有现成的转换方法可用:<br /> // 生成SQL文<br /> sql.AppendLine("UPDATE LINGS_GOODS");<br /> sql.AppendLine(" SET LINKID=0");<br /> sql.AppendLine(<br /> String.Format("ID IN (@GOODSID{0})",<br /> String.Join(",@GOODSID",<br /> goodsIDs.ConvertAll<string>(new Converter<int,string>(<span style="color:red">Convert.ToString</span>)).ToArray())),<br /> true);<br /><br />连C# 2.0的新特性都还没体验过,C# 3.0已经出来了,感叹这世界变化太快 :-)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-8313946806139836810?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-18326367403143675852007-07-06T09:16:00.000+08:002007-07-06T09:25:23.643+08:00令人郁闷的MDB SQL转参折腾了半天,一个SQL死活通不过:<br />UPDATE<br /> LINGS_GOODS<br />SET LINKID=@LINKID<br />WHERE ID IN (<br /> SELECT<br /> ID<br /> FROM LINGS_GOODS<br /> WHERE LINKID IN (<br /> SELECT<br /> DISTINCT LINKID<br /> FROM LINGS_GOODS<br /> WHERE LINKID<>0<br /> AND ID IN (@GOODSID4LINKID6<br /> ,@GOODSID4LINKID14<br /> ,@GOODSID4LINKID7<br /> ,@GOODSID4LINKID10<br /> ,@GOODSID4LINKID11) )<br /> OR ID IN (@GOODSID4GOODSID6<br /> ,@GOODSID4GOODSID14<br /> ,@GOODSID4GOODSID7<br /> ,@GOODSID4GOODSID10<br /> ,@GOODSID4GOODSID11) )<br /><br />转参:<br />LINKID:6<br />GOODSID4LINKID6:6<br />GOODSID4LINKID14:14<br />GOODSID4LINKID7:7<br />GOODSID4LINKID10:10<br />GOODSID4LINKID11:11<br />GOODSID4GOODSID6:6<br />GOODSID4GOODSID14:14<br />GOODSID4GOODSID7:7<br />GOODSID4GOODSID10:10<br />GOODSID4GOODSID11:11<br /><br />更新之后,发现新的值竟然是 11, 而不是 6。<br />最后试着将 LINKID 参数的位置调整到最后,更新正确了!<br />Access SQL 的参数问题以前也遇到过,之前以为只要名称对上,次序可以随意,但结果却是非得要按参数在SQL中出现的次序来一一指定参数不可,不然就错位了,似乎不支持参数名,SQL中的参数名,完全可以用 ? 来代替。<br /><br />但现在这问题来看,对于参数的次序问题,看来不是完全按 SQL 文文本的次序来定,而是按实际执行的子查询的次序来定。<br />上面的 SQL 中,两个子查询先执行,更新操作是最后执行,所以更新内容的参数就要放在最后。<br /><br />哎,实在令人郁闷,一个知识点的缺失,贴进去大半天的时间。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-1832636740314367585?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-56986444214077002922007-07-06T05:47:00.000+08:002007-07-06T06:21:30.315+08:00文档标准多样与Linux在很大程度上,常用的 MicroSoft Word/Excel 文档在 Linux 无法完全交换,阻碍了 Linux 的普及,特别是在Ubuntu7推出后,桌面应用的可操作性更加容易之后。<br /><br /> 办公文档是各单位及个人最要的电脑资料,广泛用于信息传播,网上资料下载及各单位的内部管理系统,都会维护大量的办公文档,采用的最广泛的,应该是 MicroSoft Wrod/Excel,虽然 OpenOffice 能打开,但不能保证编辑后完全兼容,因此大部分人迫不得已使用 Wine 来编辑文档。<br /><br /> 常见的文档格式有金山的 WPS,Adobe 的 pdf,Microsoft Word,OpenOffice,甚至于文档标准就有多个:国内的 UOF,国际的 ODF,微软的 OpenXML,还有 “Adobe的Acrobat 软件和它所支持的 PDF 格式已经得到广泛的认同,现已被国际标准化组织(ISO)评为很多领域的标准,比如,PDF/X 是电子印刷数据交换标准,PDF/A 成为长期保存及存档的电子记录标准。”<br /><br /> 如果国际标准统一,并实现完全兼容,将会大大提高Ubuntu的竞争力,减少推广阻力,让用户在做同一件事上,有多种选择。<br /><br />参考资料:<br />1、<a href="http://www4.it168.com/ztsys/zhuanti/683/default.shtml">开放文档格式标准ODF/UOF互通互融</a>(IT168-软件频道)<br />2、<a href="http://soft.chinabyte.com/462/2628462.shtml">中文文档国家标准呼之欲出</a>(天极网)<br />3、<a href="http://news.chinabyte.com/190/2707190.shtml">微软OpenXML不示弱 被ECMA批为国际文档标准</a>(天极网)<br />4、<a href="http://media.ccidnet.com/art/2615/20051219/395645_1.html">统一文档标准 改善业务流程</a>(赛迪网)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-5698644421407700292?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-41293505079847190062007-07-05T13:36:00.000+08:002007-07-05T13:47:48.219+08:00今天是我和老婆的阳历生日今天生日,两个人的共同生日,夫妻同月同日生的应该不多吧,不过,家庭节日却是少了一个,呵呵。<br /><br />想去吃海鲜,好久没回家了,实在是太想吃海鲜了。以前在家,几乎天天满桌的海鲜,而出外飘泊的这么些年,吃海鲜却已经是一种奢望了。<br /><br />最爱吃的海鲜有很多,黄鱼,带鱼,黄梅鱼,虾姑,鲳鱼,鱿鱼,还有很多不知道怎么说的……<br />海鲜当然要野生的才好吃,但价格实在是太贵了,有些甚至是有价无市。听我妈说,她小的时候,一阵浪过,海岸上到处可见被浪打上来的海蛰,可现在,环境污染,海洋资源保护的欠缺,这种盛况,早已经看不到了。<br /><br />目前状况下,如果能吃到新鲜又肥美的,已经是很不错了,希望晚上能吃上新鲜又肥美的 :-)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-4129350507984719006?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com1tag:blogger.com,1999:blog-4963495270953079363.post-59165715789946116982007-07-05T13:31:00.000+08:002007-07-05T13:32:04.418+08:00关于 FormView 状态的判断在一个页面,想要根据 FormView 的状态来切换按钮显示时,在不同的事件里,取得的 FormView 状态会有不同。<br /><br /> 例如:当前的 FormView 是 Insert 状态,点击 Insert 按钮,在 Inserted 事件中,将状态切换到 ReadOnly 时,在不同的页面事件中,取到的 FormView 的 CurrentMode 是不同的。要想在页面输出时,根据 FormView 状态切换按钮显示,要选择合适的事件。<br /><br /> 最初,我使用 Page_Load 事件来进行处理,但发现取到的状态不正确。在上面举例的操作过程中,我预想的结果是 ReadOnly,然而实际上却是 Insert 状态。经过了解,最后使用 Page_PreRenderComplete 事件正确取得 FormView 的状态。<br /><br /> 首先,需要了解页面生命周期中,各事件的先后顺序,简单列几个事件的次序:<br /> 1、Page_PreLoad<br /> 2、Page_Load<br /> 3、RaiseChangedEvents(各个控件的 Changed 事件)<br /> 4、RaisePostBackEvent(各个控件的处理事件,如 onClick 等)<br /> 5、Page_LoadComplete<br /> 6、Control_PreRender<br /> 7、Page_PreRenderComplete<br /> <br /> 为此,我写了一个测试程序,在各个事件中输出日志记录,部分内容如下:<br /><br /><Log Date="2007-07-05 12:51:09 5603808" Level="Debug_Level">Page_PreLoad</Log><br /><Log Date="2007-07-05 12:51:09 5603808" Level="Debug_Level">FormMode:Insert</Log><br /><Log Date="2007-07-05 12:51:09 5904240" Level="Debug_Level">Page_Load</Log><br /><Log Date="2007-07-05 12:51:09 6004384" Level="Debug_Level">FormMode:Insert</Log><br /><Log Date="2007-07-05 12:51:09 6505104" Level="Debug_Level">Page_LoadComplete</Log><br /><Log Date="2007-07-05 12:51:09 6505104" Level="Debug_Level">FormMode:ReadOnly</Log><br /><Log Date="2007-07-05 12:51:09 6705392" Level="Debug_Level">FormView_PreRender</Log><br /><Log Date="2007-07-05 12:51:09 6705392" Level="Debug_Level">FormMode:ReadOnly</Log><br /><Log Date="2007-07-05 12:51:09 6705392" Level="Debug_Level">Page_PreRenderComplete</Log><br /><Log Date="2007-07-05 12:51:09 6705392" Level="Debug_Level">FormMode:ReadOnly</Log><br /><br /> 从日志记录中可以看出,要到 Page_LoadComplete 事件时,FormView 的状态才由 Insert 状态切换到 ReadOnly 状态。而我在开始编写ASP.Net程序时,总是想当然地以为在 Page_Load 事件时,所有的控件都已经加载并处理完毕。<br /> <br /> 同样,在 Page_Load 事件中,如果查看 GridView 的行数,所取得的结果是变更前的行数,而不是最终输出到客户浏览器后的行数。在 Page_Load 事件中所取得的行数,可能是从ViewState 中取得原始数据,是系统状态的还原结果,还没有去处理用户事件并重新检索数据。<br /> <br /> 综上,或许我们应该先花点时间了解页面的生命周期,从网上,我搜索到一些相关内容的网页,摘录以参考。<br /> <br /> 1、<a href="http://geekswithblogs.net/emanish/archive/2006/07/13/85028.aspx">Asp.Net Page LiftCycle</a>(页面生命周期)<br /> 这在以前,我也看到过这张图,但不在自己电脑上,未保存,后来再想找时,一直没找到,呵呵,和这页面的作者差不多:-)<br /> 另外,这张图中,似乎少了些事件,如 Page_PreRenderComplete。 而图例中的 Adapter 和 Page Persister 是什么意思也不懂。<br /> 2、<a href="http://msdn2.microsoft.com/zh-cn/library/ms178473(VS.80).aspx">ASP.NET 应用程序生命周期概述</a>(MSDN的文章)<br /> 3、<a href="http://www.cnblogs.com/hjf1223/archive/2006/09/29/518305.aspx">客观看待ViewState对Asp.net程序作用和影响</a>(某位博客的文章)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-5916571578994611698?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-47561212670130245092007-06-30T12:31:00.000+08:002007-06-30T12:35:37.202+08:00房价跟美国接轨,工资跟非洲接轨?[转]在某论坛看到这篇文章,感觉挺有意思的,转以保存。<br />通过google搜索,找到一个地址,但不确定是否是原始出处。<br /><a href="http://zihan868.bokee.com/viewdiary.15389472.html"><br />http://zihan868.bokee.com/viewdiary.15389472.html</a><br /><br /><br /> 银行跨行查询收费,和哪个国家接轨你绝对想不到,美国绝大多数的银行根本不存在什么所谓的跨行查询收费。美国的绝大多数银行是股份制银行,这种自己突然规定跨行查询收费的只有在垄断银行才会发生。专家说,如果国外只要有一个银行实行了跨行查询收费,中国就会以和国际接轨为理由,采用这种方式。然后他们查阅了很多资料发现,我们周围这些国家,只有唯一一个巴基斯坦是跨行查询收费的。看到这里我彻底晕了,原来中国几家银行跨行查询收费的所谓和国际接轨,居然是和巴基斯坦接轨啊。<br /> <br /> 有些决策者在制定政策的时候,手里有两套法宝,一套是“中国国情”一套是“与国际接轨”,当制定不利于人民的政策时,如房改,要求大家自己掏钱购买商品房,就说是和“国际接轨”,理由是,人家外国都是自己买房子,没有福利分房的说法,但与此同时,他们却恰恰忽略了人家外国土地私有这个关键因素,中国人并不拥有土地的所有权,土地都属于国家,却要被迫付出昂贵的价钱购买一套只有使用权的商品房,而当人们对此提出质疑的时候,他们又会说这是中国特殊国情决定的。<br /> <br /> 又比如医改,教改,人家其他国家是免费医疗,免费义务教育,但这一点他们又不与国际接轨了,又强调中国国情了,什么财力不堪重负啦之类,结果导致大家看不起病,上不起学。<br /> <br /> 又比如所谓“高薪养廉”,据说是新加坡、香港的成功经验,所以要和“国际接轨”,所以五次三番地给公务员加薪。但人家严格的监督制度,对公务员近乎苛刻的约束,廉政公署等等,他们又不和国际接轨了,又强调中国国情了。韩国首都汉城(现名首尔)只有14辆公务车,这点他们就不愿意接轨,中国现在一个乡镇 14辆公车都不算多吧?这就是中国国情。<br /> <br /> 美国有个燃油税,他们就要和“国际接轨”,也要征燃油税,但美国高速公路、大桥绝大多数是不收费的,在美国养一辆车除汽油费外每年仅需170多美元,这点他们又不和国际接轨了,不仅养路费、车船税等等一大堆,而且到处设置关卡,几乎路路收费。全世界总共只有14万公里收费公路,但就有10万公里在中国!这就又是中国国情了.<br /> <br /> 美国格林斯潘加息了,他们就要和“国际接轨”,但美国购房享受退税,购买第一套住房享受低利率,对出租房屋屋主进行补贴以降低租金,这些他们又不和国际接轨了,又强调中国国情了,不仅不对出租房屋进行补贴,反而变本加厉地对出租屋提高税收,导致这部分成本转嫁给租客,租金上涨。 <br /> <br /> 世界绝大多数国家都是土地私有的,人民买房的同时就买了地皮,具有永久所有权。当然,他们在这一点上就不和国际接轨了,因为中国国情特殊啊!但是,当他们发现香港的使用权制度对自己比较有利后,就立即和香港接轨了!订了个70年使用权制度,迫使人民祖祖辈辈不断花巨资购买有限使用权,但香港是什么情况?香港原先是殖民地啊!英国只租用了99年啊,它搞个使用权无可厚非,因为土地本不是它的,时间到了就要归还的,你搞使用权到底是什么意思?不是说中国是公有制吗? 不是全国人民拥有对一切生产资料的所有权吗?但落实到的最后怎么变成绝大多数人都一无所有了呢?怎么就变成必须购买本属于自己的土地使用权呢?所以在这方面就和香港这个“殖民地”接轨,就不和其他的国际接轨。<br /> <br /> 又比如,油价要涨、电价要涨、水价要涨,理由还是和国际接轨,说什么人家的都很贵,中国的油价水价电价便宜的很,所以就该涨,但说到人民的工资水平、福利水平、劳动保障制度,就又不和国际接轨了,就又强调中国的特殊国情了,人家的工会都是工人选举产生,实实在在代表工人权益,这一点咱们就是不和人家接轨,咱就是要让工会成为资本家压迫工人的帮凶,原因还是:中国国情。所以,不要拿什么美国、英国的加息说事,什么时候中国成为完全市场经济国家了,权力部门受公众严格监督了,再说这些不迟!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-4756121267013024509?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0tag:blogger.com,1999:blog-4963495270953079363.post-11529720840640341852007-06-09T21:15:00.000+08:002007-06-09T21:22:03.712+08:00YY还不会走路,好心急啊YY已经15个月了,但是还不会走路。<br />牵着她的一只手,会走,但一放开就倒。<br />在网上查了一下,一般是12~14个月就会走路,但18个月,则100%都会走。或许YY是后者。<br />YY开始长牙也晚,老婆说是缺钙,她自己也缺钙。现在我们在给她服龙牡壮骨粉。<br />YY现在不在身边,下次回她外婆家,要考虑带她去做体检了。<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-1152972084064034185?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com2tag:blogger.com,1999:blog-4963495270953079363.post-43839758848259866492007-06-09T21:01:00.001+08:002007-06-09T21:11:50.847+08:00uTorrent:提示磁盘空间不足下载并试用 uTorrent 时,出现磁盘空间不足的提示,而实际上我的磁盘还有10多个G的可用空间。最后发现是分区格式的问题,FAT32允许的单文件最大值是4GB,而 BT 下载文件却有 4.3G,一张DVD。<br />所以认为是一个 BUG 并提交到官方网站。<br /><br />得到的回复是,uTorrent 只是简单的返回 Windows API 的出错信息而已,原来这是 Windows 的 Bug。<br />但记得有个下载工具是有判断并明确提醒是分区格式的问题,想再建议加入判断,但E文写不出来,只好作罢,对于大部分懂电脑的来说,可能会找出问题原因,但普通用户,是比较困难的,而且使用FAT32的概率也相当高,而用 BT 下载大文件,也是比较普遍的。<br /><br />相关链接:<br /><a href="http://forum.utorrent.com/viewtopic.php?pid=255809#p255809">http://forum.utorrent.com/viewtopic.php?pid=255809#p255809</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4963495270953079363-4383975884825986649?l=lingsmm.blogspot.com'/></div>lingsmmhttp://www.blogger.com/profile/06086233866143198145noreply@blogger.com0