scp密码输入自动化(expect)
下面的例子实现:从服务器(server)中下载备份(backupXXXX)存放到/home/admin/backup目录中,并只保留一个星期的备份文件.
#!/bin/sh
#getBackup.sh
export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin
PASSWORD=12345
/usr/bin/expect -c"
spawn scp root@server:/root/backup`date +%Y%m%d` /home/admin/backup
expect \"Enter passphrase for key '/home/admin/.ssh/id_rsa':\"
send \"$PASSWORD\r\"
send \"\r\"
interact
"
w=`date +\%Y\%m\%d -d"-7 day"`
rm -f /home//admin/backup/backup$w
#!/bin/sh
#getBackup.sh
export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin
PASSWORD=12345
/usr/bin/expect -c"
spawn scp root@server:/root/backup`date +%Y%m%d` /home/admin/backup
expect \"Enter passphrase for key '/home/admin/.ssh/id_rsa':\"
send \"$PASSWORD\r\"
send \"\r\"
interact
"
w=`date +\%Y\%m\%d -d"-7 day"`
rm -f /home//admin/backup/backup$w
Oracle ORA-00600错误
执行的SQL语句中含有connect by语句时,有时会出现ORA-00600错误.
解决方法:
alter session set "_optimizer_connect_by_cost_based"=false
解决方法:
alter session set "_optimizer_connect_by_cost_based"=false
ssh连接错误:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
SSH连接服务器时,经常会出现如下错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
Please contact your system administrator.
Add correct host key in /home/hogehoge/.ssh/known_hosts to get rid of this message.
RSA host key for 192.168.0.1 has changed and you have requested strict checking.
这个错误好像是说/.ssh/known_hosts中的key有问题,所以只要将该文件中的相关key删掉,重新连接就可以了.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
Please contact your system administrator.
Add correct host key in /home/hogehoge/.ssh/known_hosts to get rid of this message.
RSA host key for 192.168.0.1 has changed and you have requested strict checking.
这个错误好像是说/.ssh/known_hosts中的key有问题,所以只要将该文件中的相关key删掉,重新连接就可以了.
INIT: Id "x" respawning too fast: disabled for 5 minutes
/etc/inittab 中启动方式设置为图形界面启动时,
id:5:initdefault:
开机出现如下错误:
INIT: Id "x" respawning too fast: disabled for 5 minutes
原因可能是某些包丢失,可尝试如下命令,进行重新安装,一般都能成功解决.
# yum groupinstall "X Window System"(或 "GNOME Desktop Environment")
id:5:initdefault:
开机出现如下错误:
INIT: Id "x" respawning too fast: disabled for 5 minutes
原因可能是某些包丢失,可尝试如下命令,进行重新安装,一般都能成功解决.
# yum groupinstall "X Window System"(或 "GNOME Desktop Environment")
JavaFX学习日记
1.使用JavaFXPad
已成功安装JDK之后,可以使用javaws命令来启动它:
javaws http://download.java.net/general/openjfx/demos/javafxpad.jnlp
已成功安装JDK之后,可以使用javaws命令来启动它:
javaws http://download.java.net/general/openjfx/demos/javafxpad.jnlp
使Rails一直运行在后台
使用命令nohup(no hang up)该命令可以在你退出帐户/关闭终端之后继续运行相应的进程.
nohup script/server &
运行成功之后,输出信息被写到当前目录的 nohup.out 文件,当然也可以指定到其它的文件。如:
nohup script/server > railsInfo.out 2>&1 &
这样输出被重定向到railsInfo.out文件中.
关闭使用:fg %n
nohup script/server &
运行成功之后,输出信息被写到当前目录的 nohup.out 文件,当然也可以指定到其它的文件。如:
nohup script/server > railsInfo.out 2>&1 &
这样输出被重定向到railsInfo.out文件中.
关闭使用:fg %n
sudo gem install mysql错误
Building native extensions. This could take a while...
ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.
ruby extconf.rb install mysql
extconf.rb:1:in `require': no such file to load -- mkmf (LoadError)
from extconf.rb:1
解决方法: sudo apt-get install ruby1.8-dev
Tomcat启动出错
Tomcat启动时出现如下错误.
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\.......
解决方法:到http://tomcat.heanet.ie/native/
下载tcnative-1.dll文件,然后将其放到任意位置,但该位置必须添加到path环境变量中去.
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\.......
解决方法:到http://tomcat.heanet.ie/native/
下载tcnative-1.dll文件,然后将其放到任意位置,但该位置必须添加到path环境变量中去.
Ubuntu中JSP开发环境配置
1.lomboz
http://lomboz.objectweb.org/
2.tomcatPlugin
http://www.eclipsetotale.com/tomcatPlugin.html
http://lomboz.objectweb.org/
2.tomcatPlugin
http://www.eclipsetotale.com/tomcatPlugin.html
VB Format函数四舍五入的问题
在使用Format函数处理数值时要特别注意该函数的四舍五入问题,特别是在处理日期时。因为返回的结果可能不是很精确,比如处理的日期精确到秒时,处理的结果秒的部分完全不对。要解决这个问题就是对四舍五入的部分单独处理。
比如,取得当前系统的日期,精确到秒。
→Format(Now(), "YYYY/MM/DD HH:MM") & ":" & Format(Second(Now), "00")
比如,取得当前系统的日期,精确到秒。
→Format(Now(), "YYYY/MM/DD HH:MM") & ":" & Format(Second(Now), "00")
Apache Tomcat/6.0.16虚拟目录设置
如jsp文件的目录为:C:\jspweb\workspace\proweb\src\jsp\welcome.jsp
现为其建立虚拟目录
在tomcat的安装目录
C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf
下创建如下文件夹
\catalina\localhost
在该文件夹下建立 test.xml(文件名任意,但必须与path="/XXX"相同,其即为虚拟目录的名字)
创建完之后,启动tomcat,在浏览器中输入
http://localhost:8080/test/welcome.jsp
并可看到输出.
现为其建立虚拟目录
在tomcat的安装目录
C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf
下创建如下文件夹
\catalina\localhost
在该文件夹下建立 test.xml(文件名任意,但必须与path="/XXX"相同,其即为虚拟目录的名字)
< Context path="/test" docBase="C:\jspweb\workspace\proweb\src\jsp" reloadable="true" />
创建完之后,启动tomcat,在浏览器中输入
http://localhost:8080/test/welcome.jsp
并可看到输出.
Cygwin通过ssh连接server乱码的解决
安装cocot
$ wget http://vmi.jp/software/cygwin/cocot-20080315.tar.bz2
$ tar xjf cocot-20080315.tar.bz2
$ cd cocot-20041220
$ ./configure
$ make
$ make install
使用方法:
比如连接UTF8的server
$ cocot -p UTF-8 ssh 192.168.1.12 -l root
$ wget http://vmi.jp/software/cygwin/cocot-20080315.tar.bz2
$ tar xjf cocot-20080315.tar.bz2
$ cd cocot-20041220
$ ./configure
$ make
$ make install
使用方法:
比如连接UTF8的server
$ cocot -p UTF-8 ssh 192.168.1.12 -l root
Ubuntu限制只让特定用户su到root
比如,只让adm组的用户能使用su到root用户
首先,编辑/etc/pam.d/su文件,取消或修改下面内容
auth required pam_wheel.so group=adm
auth sufficient pam_wheel.so trust group=adm
最后,将该用户oracle添加到adm组
sudo usermod -G 4 oracle
(adm组的ID为4)
注:Ubuntu中好像没有了wheel组
首先,编辑/etc/pam.d/su文件,取消或修改下面内容
auth required pam_wheel.so group=adm
auth sufficient pam_wheel.so trust group=adm
最后,将该用户oracle添加到adm组
sudo usermod -G 4 oracle
(adm组的ID为4)
注:Ubuntu中好像没有了wheel组
Ubuntu中向“应用程序”菜单添加快捷方式
比如想把Lomboz添加到“应用程序”->"编程“里,方法如下:
sudo vim /usr/share/applications/eclipse.desktop
在里面添加如下内容:
[Desktop Entry]
Name=Eclipse
Comment=org.objectweb.lomboz.product
Exec=/home/work/eclipse/eclipse
Icon=/home/work/eclipse/icon.xpm
Type=Application
Encoding=UTF-8
Categories=Application;Development;
保存退出之后,就能在”编程“菜单中看到了。
sudo vim /usr/share/applications/eclipse.desktop
在里面添加如下内容:
[Desktop Entry]
Name=Eclipse
Comment=org.objectweb.lomboz.product
Exec=/home/work/eclipse/eclipse
Icon=/home/work/eclipse/icon.xpm
Type=Application
Encoding=UTF-8
Categories=Application;Development;
保存退出之后,就能在”编程“菜单中看到了。
ubuntu 8.0.4 中Tomcat安装配置
1.Tomcat5.5安装
$ sudo apt-get install tomcat5.5 tomcat5.5-webapps tomcat5.5-admin
$ sudo /etc/init.d/tomcat5.5 stop
2.Java环境的选择
$ sudo vim /etc/init.d/tomcat5.5
编辑前:
JDK_DIRS="/usr/lib/jvm/java-1.5.0-sun ...
编辑后:
JDK_DIRS="/usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun ...
3.TomcatManager等权限添加(追加admin和manager用户)
$ sudo vim /usr/share/tomcat5.5/conf/tomcat-users.xml
4.Tomcat启动及动作确认
$ sudo /etc/init.d/tomcat5.5 start
打开浏览器 http://localhost:8180 查看是否能访问
点击左边菜单中的[Status],可以查看当前的环境配置情况.
$ sudo apt-get install tomcat5.5 tomcat5.5-webapps tomcat5.5-admin
$ sudo /etc/init.d/tomcat5.5 stop
2.Java环境的选择
$ sudo vim /etc/init.d/tomcat5.5
编辑前:
JDK_DIRS="/usr/lib/jvm/java-1.5.0-sun ...
编辑后:
JDK_DIRS="/usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun ...
3.TomcatManager等权限添加(追加admin和manager用户)
$ sudo vim /usr/share/tomcat5.5/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
< tomcat-users>
< role rolename="manager"/>
< role rolename="tomcat"/>
< role rolename="admin"/>
< role rolename="role1"/>
< user username="both" password="tomcat" roles="tomcat,role1"/>
< user username="tomcat" password="密码更改" roles="tomcat,admin,manager"/>
< user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
4.Tomcat启动及动作确认
$ sudo /etc/init.d/tomcat5.5 start
打开浏览器 http://localhost:8180 查看是否能访问
点击左边菜单中的[Status],可以查看当前的环境配置情况.
Samba中public的文件权限虽为777,但无法访问的解决
将SElinux无效.
#/usr/sbin/setenforce 0 ->一时无效
永久无效
/etc/sysconfig/selinux中将SELINUX=enforcing改为SELINUX=disabled
或
echo "/usr/sbin/setenforce 0">>/etc/rc.local
#/usr/sbin/setenforce 0 ->一时无效
永久无效
/etc/sysconfig/selinux中将SELINUX=enforcing改为SELINUX=disabled
或
echo "/usr/sbin/setenforce 0">>/etc/rc.local
能ping通服务器,但tnsping不通的问题
原因可能有很多情况,但多数情况下可能是iptables的问题.
一般停用iptables就可以解决.
#/etc/init.d/iptables stop ->一时停用
或者开机就让它无效.
#echo "/etc/init.d/iptables stop">>/etc/rc.local
一般停用iptables就可以解决.
#/etc/init.d/iptables stop ->一时停用
或者开机就让它无效.
#echo "/etc/init.d/iptables stop">>/etc/rc.local
Vim日文乱码的解决方法
在~/.vimrc里添加如下:
set fileencodings=iso-2022-jp,sjis,utf8
buffer,消息乱码的话就请添加“set encoding=euc-jp“试试。
set fileencodings=iso-2022-jp,sjis,utf8
buffer,消息乱码的话就请添加“set encoding=euc-jp“试试。
ubuntu 8.0.4 安装JDK6和eclipse 3.3 JavaEE(转贴)
文章转自:这里
首先需要安装JDK 6
sudo apt-get install sun-java6-jdk
之后需要设置默认的java程序
sudo update-alternatives --config java
按照提示输入对应的选项,指定为JDK 6
下面设置
sudo vim /etc/environment
在其中添加如下两行:
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
如果其中已经设置了CLASSPATH和JAVA_HOME,则将其修改为上面的形式,按ZZ保存退出。
接下来安装Eclipse
sudo apt-get install eclipse
需要注意的是,此时Eclipse并不关心之前设置的update-alternative
所以应该修改Eclipse的配置。首先将 SUN-JDK-6彻底设为系统默认:
sudo update-java-alternatives -s java-6-sun
然后编辑JVM配置文件:
sudo vim /etc/jvm
在文件顶部添加
/usr/lib/jvm/java-6-sun
(如果没有则自己新建)
sudo vim /etc/eclipse/java_home
也是在文件顶部添加
/usr/lib/jvm/java-6-sun
之后启动Eclipse,选择Help->About Eclipse SDK,选择Configuration Details,可以看到JDK6的设置已经生效。
首先需要安装JDK 6
sudo apt-get install sun-java6-jdk
之后需要设置默认的java程序
sudo update-alternatives --config java
按照提示输入对应的选项,指定为JDK 6
下面设置
sudo vim /etc/environment
在其中添加如下两行:
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
如果其中已经设置了CLASSPATH和JAVA_HOME,则将其修改为上面的形式,按ZZ保存退出。
接下来安装Eclipse
sudo apt-get install eclipse
需要注意的是,此时Eclipse并不关心之前设置的update-alternative
所以应该修改Eclipse的配置。首先将 SUN-JDK-6彻底设为系统默认:
sudo update-java-alternatives -s java-6-sun
然后编辑JVM配置文件:
sudo vim /etc/jvm
在文件顶部添加
/usr/lib/jvm/java-6-sun
(如果没有则自己新建)
sudo vim /etc/eclipse/java_home
也是在文件顶部添加
/usr/lib/jvm/java-6-sun
之后启动Eclipse,选择Help->About Eclipse SDK,选择Configuration Details,可以看到JDK6的设置已经生效。
Ubuntu-java安装配置(转贴)
文章转自:这里
打开终端,执行以下命令,或使用Adept/新立得软件管理器,在其中分别搜索"sun-java6-jre"和"sun-java6-jdk"并标记安装。
sudo apt-get install sun-java6-jre
如果空间富裕,建议安装一个JDK。
sudo apt-get install sun-java6-jdk
提示:安装过程中需要你回答是否同意使用协议(终端中红蓝色的提示界面),此时按tab键至OK,再按回车即可正常安装。
设置当前默认的java解释器:
sudo update-alternatives --config java
执行后会出现类似如下的画面:
There are 2 alternatives which provide `java'.
Selection Alternative
-----------------------------------------------
1 /usr/bin/gij-wrapper-4.1
*+ 2 /usr/lib/jvm/java-6-sun/jre/bin/java
Press enter to keep the default[*], or type selection number:
输入 有包含 "sun" 的行的前面的数字。如上面显示,则输入2,然后回车确定。
配置JAVA环境变量:
sudo gedit /etc/environment
在其中添加如下两行:
CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
sudo gedit /etc/jvm
将文件中的
/usr/lib/jvm/java-6-sun
这一行填入到配置块的顶部
安装浏览器的JAVA Plugin(可选):
sudo apt-get install sun-java6-plugin
打开终端,执行以下命令,或使用Adept/新立得软件管理器,在其中分别搜索"sun-java6-jre"和"sun-java6-jdk"并标记安装。
sudo apt-get install sun-java6-jre
如果空间富裕,建议安装一个JDK。
sudo apt-get install sun-java6-jdk
提示:安装过程中需要你回答是否同意使用协议(终端中红蓝色的提示界面),此时按tab键至OK,再按回车即可正常安装。
设置当前默认的java解释器:
sudo update-alternatives --config java
执行后会出现类似如下的画面:
There are 2 alternatives which provide `java'.
Selection Alternative
-----------------------------------------------
1 /usr/bin/gij-wrapper-4.1
*+ 2 /usr/lib/jvm/java-6-sun/jre/bin/java
Press enter to keep the default[*], or type selection number:
输入 有包含 "sun" 的行的前面的数字。如上面显示,则输入2,然后回车确定。
配置JAVA环境变量:
sudo gedit /etc/environment
在其中添加如下两行:
CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
sudo gedit /etc/jvm
将文件中的
/usr/lib/jvm/java-6-sun
这一行填入到配置块的顶部
安装浏览器的JAVA Plugin(可选):
sudo apt-get install sun-java6-plugin
Rails -v 错误问题
忽然间Rails出问题了,查看一下版本竟然会报如下的错误
$ rails -v
getopt: invalid option -- v
Terminating...
这真有点看不懂了,GOOGLE一下好像没人遇到过这样的情况。会不会是权限的问题呢,尝试一下。
$ which rails
/usr/bin/rails
$ sudo chmod a+x /usr/bin/rails
之后再试一下,还是不行。忽然想起了以前安装的时候不是用gem来安装的,而是apt-get install进行的,应该就是这个原因了。卸载再安装吧!!!
$ sudo apt-get remove --purge rails
$ sudo gem install rails
想不到的是这时又出现如下错误:
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rails (> 0) in any repository
Google一下,有人是这样解决的:
gem install rails --include-dependencies --source http://gems.rubyonrails.org/
等了几分钟,感觉像可以了,但又....
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rake (>= 0.8.1) in any repository
这就奇怪了,将Rails官方的URL加入Gem看看
$sudo gem sources -a http://gems.rubyforge.org
...
再试试
$sudo gem install rails --include-dependencies
OK,下载成功了。
$ sudo ln -s /var/lib/gems/1.8/bin/rails /usr/bin/rails
$ rails -v
Rails 2.1.0
终于...
$ rails -v
getopt: invalid option -- v
Terminating...
这真有点看不懂了,GOOGLE一下好像没人遇到过这样的情况。会不会是权限的问题呢,尝试一下。
$ which rails
/usr/bin/rails
$ sudo chmod a+x /usr/bin/rails
之后再试一下,还是不行。忽然想起了以前安装的时候不是用gem来安装的,而是apt-get install进行的,应该就是这个原因了。卸载再安装吧!!!
$ sudo apt-get remove --purge rails
$ sudo gem install rails
想不到的是这时又出现如下错误:
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rails (> 0) in any repository
Google一下,有人是这样解决的:
gem install rails --include-dependencies --source http://gems.rubyonrails.org/
等了几分钟,感觉像可以了,但又....
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rake (>= 0.8.1) in any repository
这就奇怪了,将Rails官方的URL加入Gem看看
$sudo gem sources -a http://gems.rubyforge.org
...
再试试
$sudo gem install rails --include-dependencies
OK,下载成功了。
$ sudo ln -s /var/lib/gems/1.8/bin/rails /usr/bin/rails
$ rails -v
Rails 2.1.0
终于...
Ubuntu命令(添加中)
1.休眠
sudo /etc/acpi/sleep.sh sleep
2.查看可执行文件的库依赖关系
ldd
3.查看加载了的模块
lsmod
4.加载模块
modprobe 模块名 (删除:modprobe -r 模块名)
5.刷新GNOME桌面:killall nautilus
刷新GNOME面板:killall gnome-panel
6.
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
sudo /etc/acpi/sleep.sh sleep
2.查看可执行文件的库依赖关系
ldd
3.查看加载了的模块
lsmod
4.加载模块
modprobe 模块名 (删除:modprobe -r 模块名)
5.刷新GNOME桌面:killall nautilus
刷新GNOME面板:killall gnome-panel
6.
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
ThinkPad T61笔记本上的8.04启用指纹识别
$ sudo apt-get install thinkfinger-tools libpam-thinkfinger
$ sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable
$ tf-tool --acquire //登记指纹,连续输入正确三次指纹
如果出现如下错误:
Initializing...Could not claim USB device.
则进行如下操作:
sudo -s
tf-tool --add-user 你当前的用户名
$ tf-tool --verify //校验
登录,sudo等等都可以用指纹了。
转换成root用户后再
$ tf-tool --acquire
$ tf-tool --verify
su 就可以用指纹了。
$ sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable
$ tf-tool --acquire //登记指纹,连续输入正确三次指纹
如果出现如下错误:
Initializing...Could not claim USB device.
则进行如下操作:
sudo -s
tf-tool --add-user 你当前的用户名
$ tf-tool --verify //校验
登录,sudo等等都可以用指纹了。
转换成root用户后再
$ tf-tool --acquire
$ tf-tool --verify
su 就可以用指纹了。
关闭ubuntu 错误提示音
临时关闭:
rmmod pcspkr 但此命令必须使用最高权限管理员才行。
临时打开:
modprobe pcspkr
永远关闭
切换到root用户下 vim ~/.bashrc
在最后加上
setterm -blength 0
xset -b
在 console 下: setterm -blength 0
在 X-win 的 terminal 下: xset -b
rmmod pcspkr 但此命令必须使用最高权限管理员才行。
临时打开:
modprobe pcspkr
永远关闭
切换到root用户下 vim ~/.bashrc
在最后加上
setterm -blength 0
xset -b
在 console 下: setterm -blength 0
在 X-win 的 terminal 下: xset -b
在Ubuntu下使用Thinkpad T61-指点杆(按下中键模拟滚动条)
在/etc/X11/xorg.conf里找到
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
EndSection
在EndSection前面加上
Option "EmulateWheel" "on"
Option "EmulateWheelButton" "2"
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
EndSection
在EndSection前面加上
Option "EmulateWheel" "on"
Option "EmulateWheelButton" "2"
Ubuntu8.04下以源码方式安装mysql6.04
1.建立mysql的用户及组
groupadd mysql
useradd -g mysql mysql
2.下载mysql-6.0.4-alpha.tar.gz,然后进行解压
tar -xzvf mysql-6.0.4-alpha.tar.gz
进入解压目录,进行编译前准备
#cd mysql-6.0.4-alpha
#./configure --prefix=/usr/local/mysql/ --with-charset=utf8 --with-msqld-user=mysql
如果出现如下错误:
configure: error: No curses/termcap library found
说明 curses/termcap没有被安装
apt-cache search curses | grep lib
安装 lib64ncurses5-dev,然后重新配置
apt-get install lib64ncurses5-dev
3.确保gcc安装之后,接着
#make
#sudo make install
4.初期数据库的作成
# ./scripts/mysql_install_db
命令执行之后,名为mysql的数据库将被创建,其中user,db,host,tables_priv,columns_priv五个表也将被创建。
如果出现如下错误:
FATAL ERROR: Could not find /fill_help_tables.sql
则#sudo ./scripts/mysql_install_db --user=mysql --no-defaults
5.配置文件复制
#sudo cp support-files/my-medium.cnf /etc/my.cnf
6.目录所有者的变更
#sudo chown -R mysql /usr/local/mysql
#sudo chgrp -R mysql /usr/lcoal/mysql
7.环境变量PATH添加
#vim ~/.bash_profile
PATH=$PATH:/usr/local/mysql/bin
export PATH
使配置生效
#. ~/.bash_profile
8.mysql的启动
#cd /usr/local/mysql
#mysqld_safe --user=mysql &
确认是否已正常启动
#mysqladmin ping
如果显示[mysqld is alive]则不明已成功启动。
9.root用户密码的设置
安装之后root的密码并没有被设置,为了安全起见,我们应对它进行设置。
(1).mysql数据库连接
$mysql -u root mysql
(2).密码设置
mysql> update user set password=password('你的密码') where user='root';
(3).使设置生效
mysql> flush privileges;
mysql> exit
10.root密码的确认
$mysql -u root -p mysql
11.查看默认用户名及密码
$sudo vim /etc/mysql/debian.cnf
12.为方便可以安装Mysql的图形化管理工具。
$sudo apt-get mysql-admin mysql-query-browser
...
官方文档
groupadd mysql
useradd -g mysql mysql
2.下载mysql-6.0.4-alpha.tar.gz,然后进行解压
tar -xzvf mysql-6.0.4-alpha.tar.gz
进入解压目录,进行编译前准备
#cd mysql-6.0.4-alpha
#./configure --prefix=/usr/local/mysql/ --with-charset=utf8 --with-msqld-user=mysql
如果出现如下错误:
configure: error: No curses/termcap library found
说明 curses/termcap没有被安装
apt-cache search curses | grep lib
安装 lib64ncurses5-dev,然后重新配置
apt-get install lib64ncurses5-dev
3.确保gcc安装之后,接着
#make
#sudo make install
4.初期数据库的作成
# ./scripts/mysql_install_db
命令执行之后,名为mysql的数据库将被创建,其中user,db,host,tables_priv,columns_priv五个表也将被创建。
如果出现如下错误:
FATAL ERROR: Could not find /fill_help_tables.sql
则#sudo ./scripts/mysql_install_db --user=mysql --no-defaults
5.配置文件复制
#sudo cp support-files/my-medium.cnf /etc/my.cnf
6.目录所有者的变更
#sudo chown -R mysql /usr/local/mysql
#sudo chgrp -R mysql /usr/lcoal/mysql
7.环境变量PATH添加
#vim ~/.bash_profile
PATH=$PATH:/usr/local/mysql/bin
export PATH
使配置生效
#. ~/.bash_profile
8.mysql的启动
#cd /usr/local/mysql
#mysqld_safe --user=mysql &
确认是否已正常启动
#mysqladmin ping
如果显示[mysqld is alive]则不明已成功启动。
9.root用户密码的设置
安装之后root的密码并没有被设置,为了安全起见,我们应对它进行设置。
(1).mysql数据库连接
$mysql -u root mysql
(2).密码设置
mysql> update user set password=password('你的密码') where user='root';
(3).使设置生效
mysql> flush privileges;
mysql> exit
10.root密码的确认
$mysql -u root -p mysql
11.查看默认用户名及密码
$sudo vim /etc/mysql/debian.cnf
12.为方便可以安装Mysql的图形化管理工具。
$sudo apt-get mysql-admin mysql-query-browser
...
官方文档
Ubuntu8.04下简单C程序出错
#include
int main(){
printf("Hello World!¥n");
exit(0);
}
gcc编译,出现如下错误:
hello.c:3: 警告: 内建函数 ‘printf’ 不兼容的隐式声明
=>解决:sudo apt-get install build-essential
hello.c:4: 警告: 内建函数 ‘exit’ 不兼容的隐式声明
=>解决:在文件头中添加#include “stdlib.h”
问题:build-essential是什么?参考:
Informational list of build-essential packages If you do not plan to build Debian packages, you don't need this package. Moreover this package is not required for building Debian packages. This package contains an informational list of packages which are considered essential for building Debian packages. This package also depends on the packages on that list, to make it easy to have the build-essential packages installed. If you have this package installed, you only need to install whatever a package specifies as its build-time dependencies to build the package. Conversely, if you are determining what your package needs to build-depend on, you can always leave out the packages this package depends on. This package is NOT the definition of what packages are build-essential; the real definition is in the Debian Policy Manual. This package contains merely an informational list, which is all most people need. However, if this package and the manual disagree, the manual is correct.
Ubuntu8.04下配置Rails开发环境
1.安装RUBY
sudo apt-get install ruby
2.安装RubyGems
sudo apt-get install rubygems
3.安装Rails
sudo gem install rails --include-dependencies
4.安装Mongrel
sudo apt-get install mongrel
5.测试
rails 版本:
rails -v
建立测试应用:
rails myror
cd myror
./script/server
打开http://localhost:3000/查看
sudo apt-get install ruby
2.安装RubyGems
sudo apt-get install rubygems
3.安装Rails
sudo gem install rails --include-dependencies
4.安装Mongrel
sudo apt-get install mongrel
5.测试
rails 版本:
rails -v
建立测试应用:
rails myror
cd myror
./script/server
打开http://localhost:3000/查看
VMware server中Ubuntu8.04下解决“鼠标滚轮失效”问题
sudo vim /etc/X11/xorg.conf
找到并修改内容:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "vmmouse" #使用vmware提供的鼠标驱动,解决“鼠标有效边界混乱”问题。
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "Imps/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
在/etc/X11下还有一个xorg.conf.BeforeVMwareToolsInstall文件,它是安装vmware-tools之后xorg.conf文件的备份。
找到并修改内容:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "vmmouse" #使用vmware提供的鼠标驱动,解决“鼠标有效边界混乱”问题。
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "Imps/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
在/etc/X11下还有一个xorg.conf.BeforeVMwareToolsInstall文件,它是安装vmware-tools之后xorg.conf文件的备份。
Rails-sanitize()方法
sanitize()方法接收包含HTML的字符串作为参数,并清除其中危险的元素.< form>和< script>标签都会被转义,on=属性和javascript:字样开头的链接都会被直接删除.
VIEW模板中常用的h()方法原来是html_escape()的缩写.^_^
VIEW模板中常用的h()方法原来是html_escape()的缩写.^_^
学习Base64编码
Base64是一种编码方法, 它只使用ASCII码中的65个字符(包括[A-Za-z0-9+/]这64字符和用来padding的'='),且最多只会在末尾出现两个'='。将3个8位字节(8bits * 3 = 24bits)中的二进制代码转为4个6位的字节(6bits * 4 = 24bits),之后在6位的前面补两个0,形成8位一个字节的形式。具体详情参考这里。被base64编码过的字符串。每隔60个8位字节(或在结尾)添加一个换行代码。
Ruby的Array类中的pack('m'),unpack('m')方法就是用来干这个的,分别对应编码,解码.
顺便提一下,Rails中将图片等存入数据库中时,需要使用pack('m')方法,将其转换为数据库能够接受的Base64编码方式.比如可以这样来实现.
Ruby的Array类中的pack('m'),unpack('m')方法就是用来干这个的,分别对应编码,解码.
顺便提一下,Rails中将图片等存入数据库中时,需要使用pack('m')方法,将其转换为数据库能够接受的Base64编码方式.比如可以这样来实现.
module ToBaseData
def self.load(filename)
data = File.open(filename, 'rb').read
"!binary | #{[data].pack('m').gsub(/\n/, "\n ")}\n"
end
end
Rails-Time#to_s(:format)
# >> Time.now.to_s(:time)
# => "01:50"
# >> Time.now.to_s(:short)
# => "Dec 18, 2006"
# >> Time.now.to_s(:db)
# => "2006-12-18 01:50:42"
# >> time.to_s(:stamp)
# => 5:23PM
# >> time.to_s(:relative)
# => today
Rails统一出错页面
Rails在出错的时候会调用../actionpack/lib/action_controller/rescue.rb中的rescue_action(exception) ,只要在application.rb覆写该函数就行了,看看这个函数的源码.
注意最后面的IF语句,判断request是否来自本地的请求,如果是development,exception将由rescue_action_locally方法进行处理,否则由rescue_action_in_public方法处理.如下,将出错页面定向到自定义的页面.
protected
# Exception handler called when the performance of an action raises an exception.
def rescue_action(exception)
log_error(exception) if logger
erase_results if performed?
# Let the exception alter the response if it wants.
# For example, MethodNotAllowed sets the Allow header.
if exception.respond_to?(:handle_response!)
exception.handle_response!(response)
end
if consider_all_requests_local || local_request?
rescue_action_locally(exception)
else
rescue_action_in_public(exception)
end
end
注意最后面的IF语句,判断request是否来自本地的请求,如果是development,exception将由rescue_action_locally方法进行处理,否则由rescue_action_in_public方法处理.如下,将出错页面定向到自定义的页面.
def rescue_action(exception)
log_error(exception) if logger
erase_results if performed?
# Let the exception alter the response if it wants.
# For example, MethodNotAllowed sets the Allow header.
if exception.respond_to?(:handle_response!)
exception.handle_response!(response)
end
if consider_all_requests_local || local_request?
render :file => "#{RAILS_ROOT}/public/dev_error.html.erb"
else
render :file => "#{RAILS_ROOT}/public/pub_error.html.erb"
end
end
Rails国际化
1.$KCODE
Ruby中,文字编码的设定是通过全局变量$KCODE来进行,没有对编码方式进行正确的话,有可能会出现乱码的问题.要进行$KCODE设定的话,可以在config/environment文件的前面加上
这里假设进行UTF-8的设定,如果没有特殊要求的话,推荐使用UTF-8.特别是利用AJAX的时候,UTF-8是必须的.
2.charset参数
为了在浏览器中正确显示文字,那么对Content-Type中charset参数的设定就是必要的了.这个参数除了在VIEW文件中可以设定,在controller文件中也同样可以设定.为了不重复代码,推荐在app/controllers/application.rb中的ApplicationController里进行设置,方法如下.
3.数据库的设定
文字无乱码的存入数据库,以及从数据库中取出来,那么就必须对数据库以及database.yml文件的编码方式进行设定了.
MySQL中,数据库创建时可以进行编码方式的指定.如
PostgreSQL中也一样可以进行设定,如
另外配置文件的设定,在database.yml中指定encoding.如
Ruby中,文字编码的设定是通过全局变量$KCODE来进行,没有对编码方式进行正确的话,有可能会出现乱码的问题.要进行$KCODE设定的话,可以在config/environment文件的前面加上
$KCODE = "UTF8"
这里假设进行UTF-8的设定,如果没有特殊要求的话,推荐使用UTF-8.特别是利用AJAX的时候,UTF-8是必须的.
2.charset参数
为了在浏览器中正确显示文字,那么对Content-Type中charset参数的设定就是必要的了.这个参数除了在VIEW文件中可以设定,在controller文件中也同样可以设定.为了不重复代码,推荐在app/controllers/application.rb中的ApplicationController里进行设置,方法如下.
class ApplicationController < ActionController::Base
before_filter :set_charset
private
def set_charset
headers["Content-Type"] = "text/html;charset=UTF-8"
end
3.数据库的设定
文字无乱码的存入数据库,以及从数据库中取出来,那么就必须对数据库以及database.yml文件的编码方式进行设定了.
MySQL中,数据库创建时可以进行编码方式的指定.如
create database pro_development default character set utf8;
PostgreSQL中也一样可以进行设定,如
createdb --encoding UTF8 pro_development
另外配置文件的设定,在database.yml中指定encoding.如
development:
adapter: sqlite3
database: dum_development
timeout: 5000
encoding: utf8
VIM大小写的变换
guw (光标到词尾,大写转换成小写)
gUw (光标到词尾,小写转换成大写)
guu (光标到行尾,大写转换成小写)
gUU (光标到行尾,小写转换成大写)
~ (单个字符大写转小写,小写转大写)
个数 + "~" (大写转小写,小写转大写)
guG (光标到文件未,大写转换成小写)
gUG (光标到文件未,小写转换成大写)
gUw (光标到词尾,小写转换成大写)
guu (光标到行尾,大写转换成小写)
gUU (光标到行尾,小写转换成大写)
~ (单个字符大写转小写,小写转大写)
个数 + "~" (大写转小写,小写转大写)
guG (光标到文件未,大写转换成小写)
gUG (光标到文件未,小写转换成大写)
ASP防SQL注入
在网上看到一个ASP防SQL注入的方法,感觉不错.
使用SafeRequest函数替换Request
Function SafeRequest(ParaName)
Dim ParaValue
ParaValue=Request(ParaName)
if IsNumeric(ParaValue) = True then
SafeRequest=ParaValue
exit Function
elseIf
Instr(LCase(ParaValue),"select ") > 0 or Instr(LCase(ParaValue),"insert ") > 0 or Instr(LCase(ParaValue),"delete from") > 0 or Instr(LCase(ParaValue),"count(") > 0 or Instr(LCase(ParaValue),"drop table") > 0 or Instr(LCase(ParaValue),"update ") > 0 or Instr(LCase(ParaValue),"truncate ") > 0 or Instr(LCase(ParaValue),"asc(") > 0 or Instr(LCase(ParaValue),"mid(") > 0 or Instr(LCase(ParaValue),"char(") > 0 or Instr(LCase(ParaValue),"xp_cmdshell") > 0 or Instr(LCase(ParaValue),"exec master") > 0 or Instr(LCase(ParaValue),"net localgroup administrators") > 0 or Instr(LCase(ParaValue)," and ") > 0 or Instr(LCase(ParaValue),"net user") > 0 or Instr(LCase(ParaValue)," or ") > 0 then
Response.Write "<script language='javascript'>"
Response.Write "alert('非法的请求!');" '发现SQL注入攻击提示信息
Response.Write "location.href='./error.html';" '发现SQL注入攻击转跳网址
Response.Write "<script>"
Response.end
else
SafeRequest=ParaValue
End If
End function
使用SafeRequest函数替换Request
Ruby CGI + jquery -第一个HelloWorld
今天用Ruby CGI写了第一个小程序,其中也尝试了一下传说中的Jquery,感觉确实不错.其中有一些小技巧,为了不忘记特记录于此.
第一个文件(bbs.cgi):
第二个文件(up.cgi):
第一个文件(bbs.cgi):
#!/ruby/bin/ruby -Ks
require "cgi"
bbsfile = open("bbs.dat","r")
mes = CGI.escapeHTML(bbsfile.read)
bbsfile.close
print "Content-type:text/html\n\n"
print <<EOF
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
<script src="jquery.js" type="text/javascript"></script>
<title>掲示板</title>
<script type="text/javascript">
$(document).ready(function(){
$("input[name='s']").click(function(){
if($("input[name='name']").val()==""){
alert("please input your name!");
$("input[name='name']").css({backgroundColor:"yellow",fontWeight:"bolder",border:"3px solid red"});
return false;
}
else if($("input[name='text']").val()==""){
alert("please input message!");
$("input[name='text']").css({backgroundColor:"yellow",fontWeight:"bolder",border:"3px solid red"});
return false;
}
});
$("input[name='name']").keyup(function(){
$("input[name='name']").css({backgroundColor:"",fontWeight:"",border:""});
});
$("input[name='text']").keyup(function(){
$("input[name='text']").css();
});
$("input[type='reset']").click(function(){
$("input[name='name']").css();
$("input[name='text']").css();
});
$("a").click(function(){
$("pre").slideToggle("fast");
});
});
</script>
</head>
<body>
EOF
print <<EOF
<form action="./up.cgi" method="get">
</center>
<h2>簡単な掲示板</h2>
メッセージをどうぞ<br><br>
<table border=0>
<tr><td>メッセージ:<td><input name="text" value="" size=50></tr>
<tr><td>お名前:<td><input name="name" value=""></tr>
<tr><td></td><td><input type="submit" name="s" value="書き込む">
<input type="reset" value="クリア"></tr>
</table>
</form>
<hr>
EOF
print <<EOF
<!--<input type="button" name="msg" value="Message">-->
<a href="#" style="text-decoration:none">>>Message</a>
<pre>
<del>
#{mes}
</del>
</pre>
EOF
print <<EOF
</body>
</html>
EOF
第二个文件(up.cgi):
#!/ruby/bin/ruby -Ks
require "cgi"
cgi=CGI.new
message=cgi["text"]
name=cgi["name"]
bbsfile=open("bbs.dat","a")
bbsfile.write(name + ": " +message+"\n")
bbsfile.close
print "Content-type:text/html\n\n"
print <<EOF
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=shift_JIS">
<title>form</title>
</head>
<body>
書き込みありがとうございました。<br><br>
<a href="bbs.cgi">return></a>
</body>
</html>
EOF
[Rails]去除错误产生时输入框的显示效果
Rails中当错误发生时,会用红线将出错的入力框框起来,突出显示,如果不需要这种显示效果,可以将其去掉.在/controllers/application.rb中加入如下代码:
如果想更改显示样式,也以同样的方法进行修改,比如下面的代码,将出错的输入框的背景色改为银色,以突出显示.
ActionView::Base.field_error_proc = Proc.new{|snippet,instance|"#{snippet}"}
如果想更改显示样式,也以同样的方法进行修改,比如下面的代码,将出错的输入框的背景色改为银色,以突出显示.
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
msg = instance.error_message
error_style = "background-color: #ececec"
if html_tag =~ /<(input|textarea|select)[^>]+style=/
style_attribute = html_tag =~ /style=['"]/
html_tag.insert(style_attribute + 7, "#{error_style}; ")
elsif html_tag =~ /<(input|textarea|select)/
first_whitespace = html_tag =~ /\s/
html_tag[first_whitespace] = " style='#{error_style}' "
end
html_tag
end
Rails2.0向数据库添加字段文件命名的问题
今天在继续Rails2.0的WEB开发时,忽然想往已经定义好的用户主表Users中添加一个email字段,这对于ROR来说当然很好解决了,一句"ruby script/generate migration addemailtousers email:string"就行了,但当打开migrate文件时却发现没有"add_column :admins, :email, :string",也就说migration没理解我的意思.Google上搜索了一下也没找到相应的评论,后来想到会不会是大小写的问题(ROR在这方面挻"死板"),一测试果然如此.即
总结:ROR中文件名的命名每个单词的首字母需要大写!这点以前没有留意.
ruby script/generate migration AddEmailToUsers email:string
才是正确的.总结:ROR中文件名的命名每个单词的首字母需要大写!这点以前没有留意.
prototype.js常用函数
函数名 | 解释 | 举例 |
Element.toggle | 交替隐藏或显示 | Element.toggle(”div1″,”div2″) |
Element.hide | 隐藏 | Element.hide(”div1″,”div2″) |
Element.show | 显示 | Element.show(”div1″,”div2″) |
Element.remove | 删除 | Element.remove(”div1″,”div2″) |
Element.getHeight | 取得高度 | Element.getHeight(”div1″) |
Toggle.display | 和Element.toggle相同 | Toggle.display(”div1″,”div2″) |
Insertion.Before | 在DIV前插入文字 | Insertion.Before(”div1″,”my content”) |
Insertion.After | 在DIV后插入文字 | Insertion.After(”div1″,”my content”) |
Insertion.Top | 在DIV里最前插入文字 | Insertion.Top(”div1″,”this is a text”) |
Insertion.Bottom | 在DIV里最后插入文字 | Insertion.Bottom(”div1″,”this is a text”) |
PeriodicalExecuter | 以给定频率调用一段JavaScript | PeridicalExecutor(test, 1)”这里test是Javascript的函数,1是频率(1秒). |
$ | 取得一个DIV, 相当于getElementById() | $(”div1″) |
Field.clear | 清空一个输入框 | Field.clear(”textfield1″) |
Field.focus | 把 焦点集中在输入框上 | Field.focus(’’select1″) |
Field.present | 判断内容是否为空 | alert(Field.present(”textfield1″))” |
Field.select | 选择输入框的内容 | Field.select(”textfield1″)” |
Field.activate | 把 焦点集中在输入框上并选择输入框的内容 | Field.activate(”textfield1″)” |
Form.serialize | 把表格内容转化成string | |
Form.getElements | 取得表格内容为数组形式 | |
Form.disable | disable表格所有内容 | Form.disable(”form1″) (这个好象不work) |
Form.focusFirstElement | 把焦点集中在表格第一个元素上 | Form.focusFirstElement(”form1″) |
Form.reset | Reset表格 | Form.reset(”form1″) |
Form.Element.getValue | 取得表格输入框的值 | Form.Element.getValue(”text1″) |
Form.Element.serialize | 把表格中输入框内容转化成string | Form.Element.serialize(”text1″) |
$F | 等同于Form.Element.getValue() | $F(”text1″) |
Effect.Highlight | 高亮特效. | Effect.Highlight(”text1″) |
Effect.Fade | 褪色特效 | |
Effect.Scale | 放大缩小(百分比) | Effect.Scale(”text1″, 200) 这里200 = 200%, 即两倍 |
Effect.Squish | 消失特效.文字缩小后消失 | Effect.Squish(”text1″) |
Effect.Puff | 消失特效.文字放大后消失 | Effect.Puff(”text1″) |
Effect.Appear | 出现特效 | |
Effect.ContentZoom | ZOOM特效. | |
Ajax.Request | 传送Ajax请求给服务器 | Ajax.Request(”http://server/s.php”) |
Ajax.Updater | 传送Ajax请求给服务器并用答复的结果更新指定的Container | Ajax.Updater(”text1″,”http://server/s.php”) |
Will_paginate自定义(转帖)
1.功能:分页链接后显示一个文本框,以及一个‘Goto’按钮,允许用户直接跳转到某一页.
2.功能:去除Next和Previous链接.
注:在View中使用这个自定义的CustomPaginate有两种方法.
第一种:在will_paginate中使用:renderer参数.
第二种:在config/environment.rb中设置自定义的renderer.
参考来源
class CustomPaginate < WillPaginate::LinkRenderer
@@id = 1
def to_html
links = @options[:page_links] ? windowed_links : []
# previous/next buttons
links.unshift page_link_or_span(@collection.previous_page, 'disabled', @options[:prev_label])
links.push page_link_or_span(@collection.next_page, 'disabled', @options[:next_label])
html = links.join(@options[:separator])
html += goto_box
@options[:container] ? @template.content_tag(:div, html, html_attributes) : html
end
private
def goto_box
@@id += 1
@@id = 1 if @@id > 100
<<-GOTO
<input type="text" maxlength="5" size="3" id="page#{@@id}" />
<input type="submit" onclick="goto_page#{@@id}()" value="Goto"/>
<script type="text/javascript" >
function goto_page#{@@id}()
{
page = new Number(document.getElementById('page#{@@id}').value)
if(page < 1 || page > #{total_pages})
{
alert('Please enter a number between 1 and ' + #{total_pages} + ' !')
return;
}
var link = '#{@template.url_for(url_options("_page"))}'
var new_link = link.replace("_page", page)
window.location.assign(new_link)
}
</script>
GOTO
end
end
2.功能:去除Next和Previous链接.
class CustomPaginate < WillPaginate::LinkRenderer
def to_html
links = @options[:page_links] ? windowed_links : []
html = links.join(@options[:separator])
@options[:container] ? @template.content_tag(:div, html, html_attributes) : html
end
end
注:在View中使用这个自定义的CustomPaginate有两种方法.
第一种:在will_paginate中使用:renderer参数.
<%= will_paginate @products, :prev_label => '«前', :next_label => '次»', :renderer => 'CustomPaginate' %>
第二种:在config/environment.rb中设置自定义的renderer.
WillPaginate::ViewHelpers.pagination_options[:renderer] = 'CustomPaginate'.
参考来源
Struts配置(Eclipse中)
安装程序准备:
1、JDK
2、tomcat
下载地址:http://jakarta.apache.org/
3、Sysdeo Eclipse Tomcat Launcher plugin
下载地址:http://download.gro.clinux.org/beansoft/tomcatPluginV31.zip
4、eclipse
下载地址:http://www.eclipse.org/downloads/index.php
5、GEF
下载地址:
http://download.eclipse.org/tools/gef/downloads
6、Eclipse HTML Editor
下载地址:https://sourceforge.jp/projects/amateras/files/?release_id=16537
#16537
比如:tk.eclipse.plugin.htmleditor_1.6.7.zip
7、StrutsIDE 1.1.7 安如装程序下载
下载地址:https://sourceforge.jp/projects/amateras/files/?release_id=16537#16537
比如:tk.eclipse.plugin.struts_1.1.7.zip
安装配置:
Eclipse与Tomcat的安装配置省略,从tomcatPlugin插件开始.
解压我们已经下载的安装包 tomcatPluginV31beta.zip,将解压后的com.sysdeo.eclipse.tomcat_3.1.0.beta文件夹拷贝至 D:\eclipse\plugins目录下即可。我们关掉已经打开的eclipse,重新打开,OK,现在我们会发现工具栏上多了几个雄猫的图标,就是 tomcat的启动、停止和重启动的按钮。打开eclipse的window/preferences,我们在左边的树种也可以找到tomcat一项。
点击tomcat项,在右边我们选择version 5.x版本,然后设定tomcat home为D:\Tomcat5.5,Contexts directory为D:\Tomcat5.5\conf\Catalina\localhost。到此tomcat plugin设置完毕。
●安装GEF插件
同样,将GEF-ALL-3.1.zip解压缩,然后拷贝解压后的eclipse目录下的三个文件夹到D:\eclipse目录下,覆盖所有的现有文件夹。
好了,到此GEF安装完成。
●创建测试工程
如果已经完成了上面所有步骤,现在可以重新启动eclipse,使新安装的插件生效,开始正式开发了。
1、使用Sysdeo Tomcat Plugin创建tomcat工程:
File ->new->others,打开新建向导对话框,在树中找到java->tomcat projects,选中,点击next按钮。在projects name中输入textweb,选中Use default,点击next。在下一个对话页面,保持默认设置,点击finished。这时,我们在eclipse的package explorer中会看到新建的工程testweb,创建完成。
2、加入struts框架
File->new->others,打开新建向导对话框,找到Amateras->Struts->Add Struts Support,选中点击next按钮。
保持默认设置,点击Finish按钮。这时,在eclipse的package explorer中会看到增加了很多struts的库文件,在WEB-INF下也增加了很多struts的配置文件。到此我们已经在项目加入了Struts框架。
3、编辑struts-config.xml文件
在WEB -INF文件夹下可以找到,右键点击菜单中选择open with->Amateras XML Editer可以直接对xml文本进行编辑,选择open with->struts-config.xml editor可以在图形模式下对文件进行编辑。
在右边的outline中点击相应的struts对象可以添加新的对象进去。
1、JDK
2、tomcat
下载地址:http://jakarta.apache.org/
3、Sysdeo Eclipse Tomcat Launcher plugin
下载地址:http://download.gro.clinux.org/beansoft/tomcatPluginV31.zip
4、eclipse
下载地址:http://www.eclipse.org/downloads/index.php
5、GEF
下载地址:
http://download.eclipse.org/tools/gef/downloads
6、Eclipse HTML Editor
下载地址:https://sourceforge.jp/projects/amateras/files/?release_id=16537
#16537
比如:tk.eclipse.plugin.htmleditor_1.6.7.zip
7、StrutsIDE 1.1.7 安如装程序下载
下载地址:https://sourceforge.jp/projects/amateras/files/?release_id=16537#16537
比如:tk.eclipse.plugin.struts_1.1.7.zip
安装配置:
Eclipse与Tomcat的安装配置省略,从tomcatPlugin插件开始.
解压我们已经下载的安装包 tomcatPluginV31beta.zip,将解压后的com.sysdeo.eclipse.tomcat_3.1.0.beta文件夹拷贝至 D:\eclipse\plugins目录下即可。我们关掉已经打开的eclipse,重新打开,OK,现在我们会发现工具栏上多了几个雄猫的图标,就是 tomcat的启动、停止和重启动的按钮。打开eclipse的window/preferences,我们在左边的树种也可以找到tomcat一项。
点击tomcat项,在右边我们选择version 5.x版本,然后设定tomcat home为D:\Tomcat5.5,Contexts directory为D:\Tomcat5.5\conf\Catalina\localhost。到此tomcat plugin设置完毕。
●安装GEF插件
同样,将GEF-ALL-3.1.zip解压缩,然后拷贝解压后的eclipse目录下的三个文件夹到D:\eclipse目录下,覆盖所有的现有文件夹。
好了,到此GEF安装完成。
●创建测试工程
如果已经完成了上面所有步骤,现在可以重新启动eclipse,使新安装的插件生效,开始正式开发了。
1、使用Sysdeo Tomcat Plugin创建tomcat工程:
File ->new->others,打开新建向导对话框,在树中找到java->tomcat projects,选中,点击next按钮。在projects name中输入textweb,选中Use default,点击next。在下一个对话页面,保持默认设置,点击finished。这时,我们在eclipse的package explorer中会看到新建的工程testweb,创建完成。
2、加入struts框架
File->new->others,打开新建向导对话框,找到Amateras->Struts->Add Struts Support,选中点击next按钮。
保持默认设置,点击Finish按钮。这时,在eclipse的package explorer中会看到增加了很多struts的库文件,在WEB-INF下也增加了很多struts的配置文件。到此我们已经在项目加入了Struts框架。
3、编辑struts-config.xml文件
在WEB -INF文件夹下可以找到,右键点击菜单中选择open with->Amateras XML Editer可以直接对xml文本进行编辑,选择open with->struts-config.xml editor可以在图形模式下对文件进行编辑。
在右边的outline中点击相应的struts对象可以添加新的对象进去。
Rails2.0简单开发步骤
1. rails project_name
2. cd project_name
3. config database
4. rake db:create:all
5. ruby script/generate scaffold Model_name
6. design table scheme
7. rake db:migrate
8. ruby script/server
......
2. cd project_name
3. config database
4. rake db:create:all
5. ruby script/generate scaffold Model_name
6. design table scheme
7. rake db:migrate
8. ruby script/server
......
Rails2.0-rake指令
* rake routes 打印当前路由列表
* rake db:drop, rake db:drop:all 删除当前环境或config/database.yml中的所有数据库
* rake db:create, rake db:create:all 创建当前环境数据库或或config/database.yml中的所有数据库
* rake db:version 显示当前环境数据库的schema版本号
* rake db:collation, db:charset 显示数据库的collation和charset
* rake db:reset 删除并重新创建当前环境的数据库
* rake db:rollback 将目前的schema回滚到前一版本
* rake db:migrate VERSION=X 将目前的schema回滚到X版本,当X=0时将删除所有已建的表
* rake db:initialize 数据库环境简单初期化
* rake db:migrate 数据迁移
* rake rails:freeze:gems 该命令将最新版本的Rails库拷贝到vendor/rails目录下,当应用程序启动时,Rails会首先到这里来寻找自己需要的库,然后再寻找全系统共享的版本.这样经过固化后,应用程序就与一个特定的Rails版本绑定在一起了.但该操作只是把Rails框架放入你的应用程序中,其它Ruby库仍然要到全局共享区去获取.如果固化之后想取消绑定,可以直接把vendor/rails目录删掉,也可以执行rake rails:unfreeze
* rake db:drop, rake db:drop:all 删除当前环境或config/database.yml中的所有数据库
* rake db:create, rake db:create:all 创建当前环境数据库或或config/database.yml中的所有数据库
* rake db:version 显示当前环境数据库的schema版本号
* rake db:collation, db:charset 显示数据库的collation和charset
* rake db:reset 删除并重新创建当前环境的数据库
* rake db:rollback 将目前的schema回滚到前一版本
* rake db:migrate VERSION=X 将目前的schema回滚到X版本,当X=0时将删除所有已建的表
* rake db:initialize 数据库环境简单初期化
* rake db:migrate 数据迁移
* rake rails:freeze:gems 该命令将最新版本的Rails库拷贝到vendor/rails目录下,当应用程序启动时,Rails会首先到这里来寻找自己需要的库,然后再寻找全系统共享的版本.这样经过固化后,应用程序就与一个特定的Rails版本绑定在一起了.但该操作只是把Rails框架放入你的应用程序中,其它Ruby库仍然要到全局共享区去获取.如果固化之后想取消绑定,可以直接把vendor/rails目录删掉,也可以执行rake rails:unfreeze
Firefox加速
1. 打开新的FireFox窗口,在地址栏敲入:about:config
2. 找到如下首选项名称,如果没有就新建一个:
network.http.pipelining 修改为true
network.http.proxy.pipelining 修改为true
network.http.pipelining.maxrequests 修改为8
network.dns.disableIPv6 修改为true
2. 找到如下首选项名称,如果没有就新建一个:
network.http.pipelining 修改为true
network.http.proxy.pipelining 修改为true
network.http.pipelining.maxrequests 修改为8
network.dns.disableIPv6 修改为true
Rails调试sqlite3.dll出错
gem install sqlite3-ruby安装sqlite3驱动之后,还需要将下面两个文件拷到ruby/bin目录下(sqlite3.dll sqlite3.exe)。
Eclipse配置Rails
1.RadRails:
http://radrails.sourceforge.net/update
2.RDT:
http://updatesite.rubypeople.org/release
http://radrails.sourceforge.net/update
2.RDT:
http://updatesite.rubypeople.org/release
Rails实现Session出错 #protect_from_forgery call
No :secret given to the #protect_from_forgery call. Set that or use a session store capable of generating its own keys (Cookie Session Store).
解决办法:将/controllers/application.rb中的protect_from_forgery后面的注释取消.
解决办法:将/controllers/application.rb中的protect_from_forgery后面的注释取消.
Rails安装
gem install activesupport activerecord actionpack actionmailer actionwebservice rails
Rails更新:gem update rails
Rails更新:gem update rails
Rails错误:scaffold,paginate
建议将"http://agilewebdevelopment.com/plugins/"加入收藏夹。2.0把很多plugin都剥离出来了,没有的话可以去那找。
因此将遇到的错误记录如下:
1.(scaffold 方法调用失败)
undefined method `scaffold'
解决办法:执行 以下语句 安装scaffolding
ruby script/plugin install scaffolding
2.分页插件的解决方法
状况如下:
undefined method `paginate'
解决办法:安装老的classic_pagination
ruby script/plugin install http://tools.assembla.com/svn/breakout/breakout/vendor/plugins/classic_pagination/
因此将遇到的错误记录如下:
1.(scaffold 方法调用失败)
undefined method `scaffold'
解决办法:执行 以下语句 安装scaffolding
ruby script/plugin install scaffolding
2.分页插件的解决方法
状况如下:
undefined method `paginate'
解决办法:安装老的classic_pagination
ruby script/plugin install http://tools.assembla.com/svn/breakout/breakout/vendor/plugins/classic_pagination/
Ubuntu软件源添加-转贴
在终端输入并运行
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份当前的源列表,以便日後需要时恢复)
sudo gedit /etc/apt/sources.list (修改sources.list文件中源的列表)
sources.list文件中尾部添加
#cn99.com 源更新服务器(江苏省常州市电信):
#Mirror.lupaworld.com 源更新服务器(浙江省杭州市双线服务器):
Ubuntu 官方源
台湾的官方源:
防止非官方源中软件包不全的问题,请在sources.list文件中尾部添加下面这个官方源。
如果没有这个源,下面安装某些软件的时候会提示找不到,比如w32codecs
然后 保存编辑好的文件,执行以下命令更新。
sudo apt-get update #这一步是更新你的源列表,换源後必须执行
(如果更新速度非常慢请更换源 sudo gedit /etc/apt/sources.list )
sudo apt-get dist-upgrade #这一步是更新软件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份当前的源列表,以便日後需要时恢复)
sudo gedit /etc/apt/sources.list (修改sources.list文件中源的列表)
sources.list文件中尾部添加
#cn99.com 源更新服务器(江苏省常州市电信):
deb http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
#Mirror.lupaworld.com 源更新服务器(浙江省杭州市双线服务器):
deb http://mirror.lupaworld.com/ubuntu gutsy main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu gutsy-security main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu gutsy-updates main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://mirror.lupaworld.com/ubuntu gutsy main restricted universe multiverse
deb-src http://mirror.lupaworld.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://mirror.lupaworld.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://mirror.lupaworld.com/ubuntu gutsy-backports main restricted universe multiverse
Ubuntu 官方源
deb http://archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse
台湾的官方源:
deb http://tw.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb http://tw.archive.ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu gutsy-proposed main restricted universe multiverse
防止非官方源中软件包不全的问题,请在sources.list文件中尾部添加下面这个官方源。
deb http://archive.ubuntu.org.cn/ubuntu-cn/ feisty main restricted universe multiverse
如果没有这个源,下面安装某些软件的时候会提示找不到,比如w32codecs
然后 保存编辑好的文件,执行以下命令更新。
sudo apt-get update #这一步是更新你的源列表,换源後必须执行
(如果更新速度非常慢请更换源 sudo gedit /etc/apt/sources.list )
sudo apt-get dist-upgrade #这一步是更新软件
网页源码查看工具
1.Instant Source
http://www.blazingtools.com/
2.Microsoft Internet Explorer Developer Toolbar
http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
http://www.blazingtools.com/
2.Microsoft Internet Explorer Developer Toolbar
http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
Ubuntu 受限文件格式支持
新立得软件包管理器
ubuntu-restricted-extras并安装它。
注意这里也有xubuntu-restricted-extras和kubuntu-restricted-extras。
或者打开终端,执行下面的命令:
sudo apt-get install ubuntu-restricted-extras
ubuntu-restricted-extras并安装它。
注意这里也有xubuntu-restricted-extras和kubuntu-restricted-extras。
或者打开终端,执行下面的命令:
sudo apt-get install ubuntu-restricted-extras
Ubuntu下配置fcitx
在/etc/X11/Xsession.d/下新建95fcitx_start文件,进行如下配置。
export LC_CTYPE=zh_CN.UTF-8
export XMODIFIERS=@im=fcitx
export XIM=fcitx
export XIM_PROGRAM=fcitx
fcitx
保存之后重起电脑。
export LC_CTYPE=zh_CN.UTF-8
export XMODIFIERS=@im=fcitx
export XIM=fcitx
export XIM_PROGRAM=fcitx
fcitx
保存之后重起电脑。
Ubuntu下播放MP3
首先安装gstreamer的解码器,gstreamer是gnome主推的多媒体平台。默认没有安装完全,导致mp3等不能播放。
sudo apt-get install gstreamer-*
把所有的gstreamer的包安装上。
编辑apt源
sudo vi /etc/apt/sources.list
#添加一下的源
然后依次输入以下命令:
sudo apt-get install gstreamer-*
把所有的gstreamer的包安装上。
编辑apt源
sudo vi /etc/apt/sources.list
#添加一下的源
deb http://ubuntu.cn99.com/ubuntu/ edgy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ edgy-backports main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ edgy main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ edgy-security main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ edgy-updates main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ edgy-proposed main restricted universe multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ edgy-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ edgy main restricted universe multiverse
然后依次输入以下命令:
sudo apt-get update
sudo apt-get install totem-xine libxine1-ffmpeg libxine1-gnome libxine1-plugins libxine1
sudo apt-get install w32codecs
VIM替换技巧4
[技巧一]
第一个是在VIM邮件列表中看到的,给出了一个如何统计文章字数的方法。
统计一个完整文件的字数,可以使用Unix下的wc工具,它能够统计一个文件的行数、单词数和字符数。
如果只想统计一个特定的模式出现的次数,wc工具就无能为力了,这时候可以用VIM的替换功能。
假定想统计文章中出现的单词的数目,可以使用下面的命令:
:%s/\w//gn
简单解释一下,这种命令实际上是报告整个文件中出现的单词的数目,命令分解如下:
%s 在整个文件中替换 (:help :s )
\w 匹配一个字 (word) (:help /\w )
g 替换行内所有出现的匹配 (:help :s_flags)
n 只报告匹配的数目,并不真正进行替换(:help :s_flags)
如果是使用LaTeX写论文的话,可以用这种方式排除LaTeX的控制字符,统计出论文中的实际字数,参考文档列出的邮件中给出了这样的一个示例。
在VIM中“:help count-items”以及“:help count-bytes”,可以看到更多统计数目的方法。
[技巧二]
这个技巧是在水木社区的VIM版看到的(http://www.newsmth.org/bbsdoc.php?board=VIM )。
这个文章是关于如何将一串十进制数字转换为16进制数字,使用VIM完成转换的最简单方法如下:
:%s/\d\+/\=printf("%X", submatch(0))/g
这条命令的原理是,把一串数字,用printf()函数的输出替换掉,printf()函数输出的正是这串数字的16进制形式。
分解如下:
%s 在整个文件中替换 (:help :s )
\d\+ 匹配一个或多个数字 (:help /\d :help /\+ )
\= 使用表达式的结果进行替换 (:help /\w )
printf 按指定格式输出 (:help printf() )
submatch() 返回:s命令中的指定匹配字符串 (:help submatch() )
g 替换行内所有出现的匹配 (:help :s_flags)
第一个是在VIM邮件列表中看到的,给出了一个如何统计文章字数的方法。
统计一个完整文件的字数,可以使用Unix下的wc工具,它能够统计一个文件的行数、单词数和字符数。
如果只想统计一个特定的模式出现的次数,wc工具就无能为力了,这时候可以用VIM的替换功能。
假定想统计文章中出现的单词的数目,可以使用下面的命令:
:%s/\w//gn
简单解释一下,这种命令实际上是报告整个文件中出现的单词的数目,命令分解如下:
%s 在整个文件中替换 (:help :s )
\w 匹配一个字 (word) (:help /\w )
g 替换行内所有出现的匹配 (:help :s_flags)
n 只报告匹配的数目,并不真正进行替换(:help :s_flags)
如果是使用LaTeX写论文的话,可以用这种方式排除LaTeX的控制字符,统计出论文中的实际字数,参考文档列出的邮件中给出了这样的一个示例。
在VIM中“:help count-items”以及“:help count-bytes”,可以看到更多统计数目的方法。
[技巧二]
这个技巧是在水木社区的VIM版看到的(http://www.newsmth.org/bbsdoc.php?board=VIM )。
这个文章是关于如何将一串十进制数字转换为16进制数字,使用VIM完成转换的最简单方法如下:
:%s/\d\+/\=printf("%X", submatch(0))/g
这条命令的原理是,把一串数字,用printf()函数的输出替换掉,printf()函数输出的正是这串数字的16进制形式。
分解如下:
%s 在整个文件中替换 (:help :s )
\d\+ 匹配一个或多个数字 (:help /\d :help /\+ )
\= 使用表达式的结果进行替换 (:help /\w )
printf 按指定格式输出 (:help printf() )
submatch() 返回:s命令中的指定匹配字符串 (:help submatch() )
g 替换行内所有出现的匹配 (:help :s_flags)
VIM替换技巧3
我们先看例子:
我们要把上面代码中括号中的数字,替换成由0开始的一个顺序递增序列,例如:
实现以上需求,除了用前面介绍的方法外,还可以用下面的命令:
:let n=0 | g/opIndex(\zs\d\+/s//\=n/|let n+=1
这条命令同上一篇介绍的命令类似,它也使用了VIM的替换功能和表达式,不同之处在于它并不需要事先选中替换区域,因为它没有使用”line()”函数来计算当前位置的偏移,而是直接使用变量来进行赋值。
下面简单讲解一下这条命令各个组成元素:
let 为变量赋值 (:help let )
| 用来分隔不同的命令 (:help :bar )
g 在匹配后面模式的行中执行指定的ex命令 (:help :g )
\zs 指明匹配由此开始 (:help /\zs )
\d\+ 查找1个或多个数字 (:help /\d )
s 对匹配模式进行替换 (:help :s )
\= 指明后面是一个表达式 (:help :s\= )
所以,这条命令的执行过程为:
1. 给变量n赋值为0;
2. 查找模式” opIndex(\zs\d\+”,使用变量n的值替换匹配的模式字符串;
3. 给变量n加1;
需要说明一下”|”,它用来分隔不同的命令。
另外,在substitute命令中,如果省略匹配模式字符串,它会使用之前定义的匹配模式字符串,在本例中就是由”global”命令定义的”opIndex(\zs\d\+”。
UniqueID2 = lview.focusedItem.subItems.opIndex(0).text;
Parent = lview.focusedItem.subItems.opIndex(0).text;
Children = lview.focusedItem.subItems.opIndex(0).text;
login = lview.focusedItem.subItems.opIndex(1).text;
txtCust.text = lview.focusedItem.subItems.opIndex(2).text;
txtProj.text = lview.focusedItem.subItems.opIndex(3).text;
txtbDate.text = lview.focusedItem.subItems.opIndex(4).text;
txtdDate.text = lview.focusedItem.subItems.opIndex(5).text;
txteDate.text = lview.focusedItem.subItems.opIndex(6).text;
txtPM.text = lview.focusedItem.subItems.opIndex(7).text;
txtLang.text = lview.focusedItem.subItems.opIndex(8).text;
txtVendor.text = lview.focusedItem.subItems.opIndex(9).text;
txtInvoice.text = lview.focusedItem.subItems.opIndex(10).text;
txtPMFund.text = lview.focusedItem.subItems.opIndex(11).text;
txtProjFund.text= lview.focusedItem.subItems.opIndex(12).text;
txtA_No.text = lview.focusedItem.subItems.opIndex(13).text;
txtNotes.text = lview.focusedItem.subItems.opIndex(14).text;
txtStatus.text = lview.focusedItem.subItems.opIndex(15).text;
我们要把上面代码中括号中的数字,替换成由0开始的一个顺序递增序列,例如:
UniqueID2 = lview.focusedItem.subItems.opIndex(0).text;
Parent = lview.focusedItem.subItems.opIndex(1).text;
Children = lview.focusedItem.subItems.opIndex(2).text;
……
实现以上需求,除了用前面介绍的方法外,还可以用下面的命令:
:let n=0 | g/opIndex(\zs\d\+/s//\=n/|let n+=1
这条命令同上一篇介绍的命令类似,它也使用了VIM的替换功能和表达式,不同之处在于它并不需要事先选中替换区域,因为它没有使用”line()”函数来计算当前位置的偏移,而是直接使用变量来进行赋值。
下面简单讲解一下这条命令各个组成元素:
let 为变量赋值 (:help let )
| 用来分隔不同的命令 (:help :bar )
g 在匹配后面模式的行中执行指定的ex命令 (:help :g )
\zs 指明匹配由此开始 (:help /\zs )
\d\+ 查找1个或多个数字 (:help /\d )
s 对匹配模式进行替换 (:help :s )
\= 指明后面是一个表达式 (:help :s\= )
所以,这条命令的执行过程为:
1. 给变量n赋值为0;
2. 查找模式” opIndex(\zs\d\+”,使用变量n的值替换匹配的模式字符串;
3. 给变量n加1;
需要说明一下”|”,它用来分隔不同的命令。
另外,在substitute命令中,如果省略匹配模式字符串,它会使用之前定义的匹配模式字符串,在本例中就是由”global”命令定义的”opIndex(\zs\d\+”。
VIM替换技巧2
以第一条命令为例,第二条命令和第一条命令类似:
:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1
这条命令在我们选中的区域内进行替换,查找以“BIT_MASK_”开头,后面跟任意多个数字的字符串,并把匹配位置放在数字上,然后使用后面表达式计算出来的数字替换这些匹配的数字。
下面是这条命令中每个元素的含义:
'<,'> 我们所选中的区域 (:help '<,:help '> )
s 在选中的区域中进行替换 (:help :s )
\zs 指明匹配由此开始 (:help /\zs )
\d* 查找任意位数的数字 (:help /\d )
\ze 指明匹配到此为止 (:help /\ze )
\= 指明后面是一个表达式 (:help :s\= )
line(".") 当前光标所在行的行号 (:help line() )
line("'<") 我们所选区域中第一行的行号 (:help line() )
“'<”和“'>”是我们使用了“v”,“V”命令选中一个visual区域后,VIM设置的标记,分别用来标识visual区域的开始和结束。
“BIT_MASK_\zs\d*\ze”是一个正则表达式,用来查找以“BIT_MASK_”开头,后面跟任意多个数字的字符串。其中“\zs”、“\ze”用来指定匹配的开始和结束位置,因为我们只打算替换“BIT_MASK_0”中的数字,所以在查找时只把匹配区域置在数字上。
由于我们的替换操作要把不同行的数字替换成不同的值,所以在这里需要使用一个表达式来计算出替换后的值。当“:s”命令的替换字符串是以“\=”开头时,表明使用一个表达式计算的结果进行替换。我们这里的表达式就是“line(".") - line("'<") + 1”,其中“line()”函数用来获得行号,它可以获得当前行的行号,以及指定的标记(mark)所在的行号。“line(“.”)”用来获得当前光标所在行的行号,“line(“’<”)”则用来获得“'<”标记所在行的行号。这两个行号的差加上1就是我们想替换的值。
:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1
这条命令在我们选中的区域内进行替换,查找以“BIT_MASK_”开头,后面跟任意多个数字的字符串,并把匹配位置放在数字上,然后使用后面表达式计算出来的数字替换这些匹配的数字。
下面是这条命令中每个元素的含义:
'<,'> 我们所选中的区域 (:help '<,:help '> )
s 在选中的区域中进行替换 (:help :s )
\zs 指明匹配由此开始 (:help /\zs )
\d* 查找任意位数的数字 (:help /\d )
\ze 指明匹配到此为止 (:help /\ze )
\= 指明后面是一个表达式 (:help :s\= )
line(".") 当前光标所在行的行号 (:help line() )
line("'<") 我们所选区域中第一行的行号 (:help line() )
“'<”和“'>”是我们使用了“v”,“V”命令选中一个visual区域后,VIM设置的标记,分别用来标识visual区域的开始和结束。
“BIT_MASK_\zs\d*\ze”是一个正则表达式,用来查找以“BIT_MASK_”开头,后面跟任意多个数字的字符串。其中“\zs”、“\ze”用来指定匹配的开始和结束位置,因为我们只打算替换“BIT_MASK_0”中的数字,所以在查找时只把匹配区域置在数字上。
由于我们的替换操作要把不同行的数字替换成不同的值,所以在这里需要使用一个表达式来计算出替换后的值。当“:s”命令的替换字符串是以“\=”开头时,表明使用一个表达式计算的结果进行替换。我们这里的表达式就是“line(".") - line("'<") + 1”,其中“line()”函数用来获得行号,它可以获得当前行的行号,以及指定的标记(mark)所在的行号。“line(“.”)”用来获得当前光标所在行的行号,“line(“’<”)”则用来获得“'<”标记所在行的行号。这两个行号的差加上1就是我们想替换的值。
VIM替换技巧1
以编写C语言程序为例, 假设,我们最终想完成的代码如下:
我们不需要一行一行的去写,只需要先写好第一行,如下:
#define BIT_MASK_1 (1 << 0)
然后,我们回到Normal模式,在这一行上输入“Y31p",拷贝此行,然后粘贴31次。这样,我们得到总共32行上面的内容。
现在使用"V31j"命令选中这32行,然后使用两次替换命令:
:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1
:'<,'>s/\zs\d*\ze)$/\=line(".")-line("'<")
#define BIT_MASK_1 (1 << 0)
#define BIT_MASK_2 (1 << 1)
#define BIT_MASK_3 (1 << 2)
#define BIT_MASK_4 (1 << 3)
#define BIT_MASK_5 (1 << 4)
#define BIT_MASK_6 (1 << 5)
#define BIT_MASK_7 (1 << 6)
#define BIT_MASK_8 (1 << 7)
#define BIT_MASK_9 (1 << 8)
#define BIT_MASK_10 (1 << 9)
#define BIT_MASK_11 (1 << 10)
#define BIT_MASK_12 (1 << 11)
#define BIT_MASK_13 (1 << 12)
#define BIT_MASK_14 (1 << 13)
#define BIT_MASK_15 (1 << 14)
#define BIT_MASK_16 (1 << 15)
#define BIT_MASK_17 (1 << 16)
#define BIT_MASK_18 (1 << 17)
#define BIT_MASK_19 (1 << 18)
#define BIT_MASK_20 (1 << 19)
#define BIT_MASK_21 (1 << 20)
#define BIT_MASK_22 (1 << 21)
#define BIT_MASK_23 (1 << 22)
#define BIT_MASK_24 (1 << 23)
#define BIT_MASK_25 (1 << 24)
#define BIT_MASK_26 (1 << 25)
#define BIT_MASK_27 (1 << 26)
#define BIT_MASK_28 (1 << 27)
#define BIT_MASK_29 (1 << 28)
#define BIT_MASK_30 (1 << 29)
#define BIT_MASK_31 (1 << 30)
#define BIT_MASK_32 (1 << 31)
我们不需要一行一行的去写,只需要先写好第一行,如下:
#define BIT_MASK_1 (1 << 0)
然后,我们回到Normal模式,在这一行上输入“Y31p",拷贝此行,然后粘贴31次。这样,我们得到总共32行上面的内容。
现在使用"V31j"命令选中这32行,然后使用两次替换命令:
:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1
:'<,'>s/\zs\d*\ze)$/\=line(".")-line("'<")
HTML中日文乱码的解决方法.
最近用Ruby进行cgi开发遇到的一个问题.
charset设置为UTF-8,页面中有日文时仍然显然乱码,加入DTD定义就可解决,原因尚未清楚.
注:charset缺省时,浏览器会根据使用环境进行选择.
<head>
<meta equiv="Content-Type" content="text/html;charset=UTF-8"/>
<meta equiv="keywords" content="CGI">
<meta equiv="description" content="CGI,RUBY">
<meta equiv="Author" content="Leself">
<meta equiv="refresh" content="10;URL=http://localhost">
<meta equiv="Expires" content="3">
<meta equiv="Page-Enter" content="revealTrans(duration=0.1,transition=14)">
<meta equiv="Page-Exit" content="revealTrans(duration=0.1,transition=12)">
<meta equiv="Pragma" content="no-cache">
<meta equiv="Copyright" content="All Rights Reserved">
<meta equiv="Window-target" content="_top">
<link rel="Shortcut Icon" href="./ico/world.gif">
<title>EIOH
</title>
</head>
charset设置为UTF-8,页面中有日文时仍然显然乱码,加入DTD定义就可解决,原因尚未清楚.
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transition//EN" ">a href="http://www.w3.org/tR/html4/loose.dtd"<http://www.w3.org/tR/html4/loose.dtd>/a<<
注:charset缺省时,浏览器会根据使用环境进行选择.
Oralce中IMP数据库导入,字符集不相符的修改.
1.首先查看Oracle的字符集.
select * from nls_database_parameters;
2.按如下步骤进行修改.
注:从Oracle8i导入到OracleXE时,修改之后NLS_NCHAR_CHARACTERSET 仍然不同,按如下可进行修改,但修改之后数据库会被破坏,不能使用.建议初学者千万不要进行此操作.从Oracle8i导入到OracleXE,目前仍没有办法实现.
select * from nls_database_parameters;
2.按如下步骤进行修改.
connect system/admin as sysdba
shutdown immediate
startup mount
alter system enable restricted session;
alter system set JOB_QUEUE_PROCESSES=0;
alter system set AQ_TM_PROCESSES=0;
alter database open;
alter database character set internal_use JA16SJIS;
shutdown immediate
startup
注:从Oracle8i导入到OracleXE时,修改之后NLS_NCHAR_CHARACTERSET 仍然不同,按如下可进行修改,但修改之后数据库会被破坏,不能使用.建议初学者千万不要进行此操作.从Oracle8i导入到OracleXE,目前仍没有办法实现.
update props$ set value$='AL32UTF8'
where name = 'NLS_NCHAR_CHARACTERSET'
订阅:
博文 (Atom)