<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>rawbenny</title>
    <description></description>
    <link>http://rawbenny.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Ubuntu 小技巧【转】</title>
        <author>rawbenny</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rawbenny.javaeye.com">rawbenny</a>&nbsp;
          链接：<a href="http://rawbenny.javaeye.com/blog/151645" style="color:red;">http://rawbenny.javaeye.com/blog/151645</a>&nbsp;
          发表时间: 2007年12月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          安装<br /><br />查看软件xxx安装内容<br /><br />*<br /><br />dpkg -L xxx<br /><br />查找软件<br /><br />*<br /><br />apt-cache search 正则表达式<br /><br />查找文件属于哪个包<br /><br />*<br /><br />dpkg -S filename<br />apt-file search filename<br /><br />查询软件xxx依赖哪些包<br /><br />*<br /><br />apt-cache depends xxx<br /><br />查询软件xxx被哪些包依赖<br /><br />*<br /><br />apt-cache rdepends xxx<br /><br />增加一个光盘源<br /><br />*<br /><br />sudo apt-cdrom add<br /><br />系统升级<br /><br />*<br /><br />sudo apt-get update<br />sudo apt-get dist-upgrade<br /><br />清除所以删除包的残余配置文件<br /><br />*<br /><br />dpkg -l |grep ^rc|awk '{print $2}' |tr ["\n"] [" "]|sudo xargs dpkg -P -<br /><br />编译时缺少h文件的自动处理<br /><br />*<br /><br />sudo auto-apt run ./configure<br /><br />查看安装软件时下载包的临时存放目录<br /><br />*<br /><br />ls /var/cache/apt/archives<br /><br />系统<br /><br />查看内核<br /><br />*<br /><br />uname -a<br /><br />查看Ubuntu版本<br /><br />*<br /><br />cat /etc/issue<br /><br />查看内核加载的模块<br /><br />*<br /><br />lsmod<br /><br />查看PCI设备<br /><br />*<br /><br />lspci<br /><br />查看USB设备<br /><br />*<br /><br />lsusb<br /><br />查看网卡状态<br /><br />*<br /><br />sudo ethtool eth0<br /><br />查看CPU信息<br /><br />*<br /><br />cat /proc/cpuinfo<br /><br />显示当前硬件信息<br /><br />*<br /><br />lshw<br /><br />硬盘<br /><br />查看硬盘的分区<br /><br />*<br /><br />sudo fdisk -l<br /><br />查看硬盘剩余空间<br /><br />*<br /><br />df -h<br />df -H<br /><br />查看目录占用空间<br /><br />*<br /><br />du -hs 目录名<br /><br />优盘没法卸载<br /><br />*<br /><br />sync<br />fuser -km /media/usbdisk<br /><br />内存<br /><br />查看当前的内存使用情况<br /><br />*<br /><br />free -l<br /><br />进程<br /><br />查看当前有哪些进程<br /><br />*<br /><br />ps -A<br /><br />中止一个进程<br /><br />*<br /><br />kill 进程号(就是ps -A中的第一列的数字)<br />或者 killall 进程名<br /><br />强制中止一个进程(在上面进程中止不成功的时候使用)<br /><br />*<br /><br />kill -9 进程号<br />或者 killall -9 进程名<br /><br />查看当前进程的实时状况<br /><br />*<br /><br />top<br /><br />查看进程打开的文件<br /><br />*<br /><br />lsof -p<br /><br />ADSL<br /><br />配置 ADSL<br /><br />*<br /><br />sudo pppoeconf<br /><br />ADSL手工拨号<br /><br />*<br /><br />sudo pon dsl-provider<br /><br />激活 ADSL<br /><br />*<br /><br />sudo /etc/ppp/pppoe_on_boot<br /><br />断开 ADSL<br /><br />*<br /><br />sudo poff<br /><br />查看拨号日志<br /><br />*<br /><br />sudo plog<br /><br />网络<br /><br />根据IP查网卡地址<br /><br />*<br /><br />arping IP地址<br /><br />查看当前IP地址<br /><br />*<br /><br />sudo ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'<br /><br />查看当前外网的IP地址<br /><br />*<br /><br />w3m -no-cookie -dump www.ip138.com|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'<br />w3m -no-cookie -dump ip.loveroot.com|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'<br /><br />查看当前监听80端口的程序<br /><br />*<br /><br />lsof -i :80<br /><br />查看当前网卡的物理地址<br /><br />*<br /><br />sudo arp -a | awk '{print $4}'<br />sudo ifconfig eth0 | head -1 | awk '{print $5}'<br /><br />立即让网络支持nat<br /><br />*<br /><br />sudo echo 1 > /proc/sys/net/ipv4/ip_forward<br />sudo iptables -t nat -I POSTROUTING -j MASQUERADE<br /><br />查看路由信息<br /><br />*<br /><br />netstat -rn<br />sudo route -n<br /><br />手工增加删除一条路由<br /><br />*<br /><br />sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1<br />sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1<br /><br />修改网卡MAC地址的方法<br /><br />*<br /><br />sudo ifconfig eth0 down #关闭网卡<br />sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址<br />sudo ifconfig eth0 up #然后启动网卡<br /><br />统计当前IP连接的个数<br /><br />*<br /><br />netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n<br />netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n<br /><br />统计当前20000个IP包中大于100个IP包的IP地址<br /><br />*<br /><br />tcpdump -tnn -c 20000 -i eth0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 > 100 '<br /><br />屏蔽IPV6<br /><br />*<br /><br />echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6<br /><br />服务<br /><br />添加一个服务<br /><br />*<br /><br />sudo update-rc.d 服务名 defaults 99<br /><br />删除一个服务<br /><br />*<br /><br />sudo update-rc.d 服务名 remove<br /><br />临时重启一个服务<br /><br />*<br /><br />/etc/init.d/服务名 restart<br /><br />临时关闭一个服务<br /><br />*<br /><br />/etc/init.d/服务名 stop<br /><br />临时启动一个服务<br /><br />*<br /><br />/etc/init.d/服务名 start<br /><br />设置<br /><br />配置默认Java使用哪个<br /><br />*<br /><br />sudo update-alternatives --config java<br /><br />修改用户资料<br /><br />*<br /><br />sudo chfn userid<br /><br />给apt设置代理<br /><br />*<br /><br />export http_proxy=http://xx.xx.xx.xx:xxx<br /><br />修改系统登录信息<br /><br />*<br /><br />sudo vim /etc/motd<br /><br />中文<br /><br />转换文件名由GBK为UTF8<br /><br />*<br /><br />sudo apt-get install convmv<br />convmv -r -f cp936 -t utf8 --notest --nosmart *<br /><br />转换文件内容由GBK为UTF8<br /><br />*<br /><br />iconv -f gbk -t utf8 $i > newfile<br /><br />转换 mp3 标签编码<br /><br />*<br /><br />sudo apt-get install python-mutagen<br />find . -iname “*.mp3” -execdir mid3iconv -e GBK {} \;<br /><br />文件<br /><br />快速查找某个文件<br /><br />*<br /><br />whereis filename<br /><br />*<br /><br />find 目录 -name 文件名<br /><br />查看文件类型<br /><br />*<br /><br />file filename<br /><br />显示xxx文件倒数6行的内容<br /><br />*<br /><br />tail -n 6 xxx<br /><br />查找包含xxx字符串的文件<br /><br />*<br /><br />grep -l -r xxx .<br /><br />查找关于xxx的命令<br /><br />*<br /><br />apropos xxx<br />man -k xxx<br /><br />通过ssh传输文件<br /><br />*<br /><br />scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上<br />scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地<br /><br />查看某个文件被哪些应用程序读写<br /><br />*<br /><br />lsof 文件名<br /><br />把所有文件的后辍由rm改为rmvb<br /><br />*<br /><br />rename 's/.rm$/.rmvb/' *<br /><br />把所有文件名中的大写改为小写<br /><br />*<br /><br />rename 'tr/A-Z/a-z/' *<br /><br />删除特殊文件名的文件，如文件名：--help.txt<br /><br />*<br /><br />rm -- --help.txt 或者 rm ./--help.txt<br /><br />查看当前目录的子目录<br /><br />*<br /><br />ls -d */. 或 echo */.<br /><br />压缩<br /><br />解压缩 xxx.tar.gz<br /><br />*<br /><br />tar -zxvf xxx.tar.gz<br /><br />解压缩 xxx.tar.bz2<br /><br />*<br /><br />tar -jxvf xxx.tar.bz2<br /><br />压缩aaa bbb目录为xxx.tar.gz<br /><br />*<br /><br />tar -zcvf xxx.tar.gz aaa bbb<br /><br />压缩aaa bbb目录为xxx.tar.bz2<br /><br />*<br /><br />tar -jcvf xxx.tar.bz2 aaa bbb<br /><br />Nautilus<br /><br />显示隐藏文件<br /><br />*<br /><br />Ctrl+h<br /><br />显示地址栏<br /><br />*<br /><br />Ctrl+l<br /><br />特殊 URI 地址<br /><br />*<br /><br />* computer:/// - 全部挂载的设备和网络<br />* network:/// - 浏览可用的网络<br />* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录<br />* smb:/// - 可用的 windows/samba 网络资源<br />* x-nautilus-desktop:/// - 桌面项目和图标<br />* file:/// - 本地文件<br />* trash:/// - 本地回收站目录<br />* ftp:// - FTP 文件夹<br />* ssh:// - SSH 文件夹<br /><br />查看已安装字体<br /><br />*<br /><br />在nautilus的地址栏里输入”fonts:///“，就可以查看本机所有的fonts<br /><br />程序<br /><br />详细显示程序的运行信息<br /><br />*<br /><br />strace -f -F -o outfile &lt;cmd><br /><br />日期和时间<br /><br />设置日期<br /><br />*<br /><br />#date -s mm/dd/yy<br /><br />设置时间<br /><br />*<br /><br />#date -s HH:MM<br /><br />将时间写入CMOS<br /><br />*<br /><br />hwclock --systohc<br /><br />读取CMOS时间<br /><br />*<br /><br />hwclock --hctosys<br /><br />控制台<br /><br />不同控制台间切换<br /><br />*<br /><br />Ctrl + ALT + ←<br />Ctrl + ALT + →<br /><br />指定控制台切换<br /><br />*<br /><br />Ctrl + ALT + Fn(n:1~7)<br /><br />控制台下滚屏<br /><br />*<br /><br />SHIFT + pageUp/pageDown<br /><br />控制台抓图<br /><br />*<br /><br />setterm -dump n(n:1~7)<br /><br />数据库<br /><br />mysql的数据库存放在地方<br /><br />*<br /><br />/var/lib/mysql<br /><br />从mysql中导出和导入数据<br /><br />*<br /><br />mysqldump 数据库名 > 文件名 #导出数据库<br />mysqladmin create 数据库名 #建立数据库<br />mysql 数据库名 &lt; 文件名 #导入数据库<br /><br />忘了mysql的root口令怎么办<br /><br />*<br /><br />sudo /etc/init.d/mysql stop<br />sudo mysqld_safe --skip-grant-tables &<br />sudo mysqladmin -u user password 'newpassword''<br />sudo mysqladmin flush-privileges<br /><br />修改mysql的root口令<br /><br />*<br /><br />sudo mysqladmin -uroot -p password '你的新密码'<br /><br />其它<br /><br />下载网站文档<br /><br />*<br /><br />wget -r -p -np -k http://www.21cn.com<br />· -r：在本机建立服务器端目录结构；<br />· -p: 下载显示HTML文件的所有图片；<br />· -np：只下载目标站点指定目录及其子目录的内容；<br />· -k: 转换非相对链接为相对链接。<br /><br />删除Totem电影播放机的播放历史记录<br /><br />*<br /><br />rm ~/.recently-used<br /><br />在桌面上显示计算机，HOME，回收站等图标<br /><br />*<br /><br />gconf-editor<br />找到apps-->nautilus-->desktop<br />勾选相应选项<br /><br />Gaim声音设置<br /><br />*<br /><br />首选项－>声音->声音方式，方式选“命令”，下面的声音命令填上“aplay %s”<br /><br />清除apt-get cache<br /><br />*<br /><br />sudo apt-get clean
          <br/>
          <span style="color:red;">
            <a href="http://rawbenny.javaeye.com/blog/151645#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 29 Dec 2007 00:03:40 +0800</pubDate>
        <link>http://rawbenny.javaeye.com/blog/151645</link>
        <guid>http://rawbenny.javaeye.com/blog/151645</guid>
      </item>
      <item>
        <title>将数据表导出成excel</title>
        <author>rawbenny</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rawbenny.javaeye.com">rawbenny</a>&nbsp;
          链接：<a href="http://rawbenny.javaeye.com/blog/149611" style="color:red;">http://rawbenny.javaeye.com/blog/149611</a>&nbsp;
          发表时间: 2007年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          [转][http://tb.blog.csdn.net/TrackBack.aspx?PostId=1844264]<br /><br />首先是安装 gem install spreadsheet-excel<br /><br />其次 在script 文件夹中新建一个叫export的文件，里面代码如下：<br /><br />#!/usr/bin/env ruby<br /><br />require File.dirname(__FILE__) + '/../config/environment'<br />require "spreadsheet/excel" <br />include Spreadsheet<br />    users=User.find_by_sql("select count(*) from users where created_at &lt; '#{Time.now.strftime("%Y-%m-%d")}' and created_at > '#{1.day.ago.strftime("%Y-%m-%d")}'")<br />    <br />    workbook = Excel.new("#{RAILS_ROOT}/public/reports/report_#{Time.now.strftime('%Y-%m-%d')}.xls")<br />    worksheet = workbook.add_worksheet("Report of #{1.day.ago.strftime('%Y-%m-%d')}")<br />    <br />    worksheet.write(0, 0, "#{1.day.ago.strftime('%Y-%m-%d')}")<br />    <br />    worksheet.write(1, 0, "Daily Registered users")<br />    <br />    worksheet.write(2, 0, "#{users[0].count.to_i}")<br />    <br />    workbook.close<br />第三：执行ruby script/export. 到public文件夹中看一下，是不是多了一个excel表格。<br /><br />有时我们需要将导出来的表格作为邮件附件发送出去。那么我们需要在上面的代码底部，加入这段：<br />  Notifier.deliver_export <br />model代码如下：<br /><br />class Notifier &lt; ActionMailer::Base<br />  <br />  def export<br />    @recipients      = "XXX@gmail.com" #收件人邮箱<br />    #@cc              = "XXX@sina.com","XXX@163.com" #抄送人邮箱<br />    @subject         = "#{Time.now.strftime('%Y-%m-%d')} data"<br />    @body            = ""<br />    @data            = ""<br />    File.open("#{RAILS_ROOT}/public/reports/report_#{Time.now.strftime('%Y-%m-%d')}.xls", "rb").each { |fp| @data&lt;&lt;fp }<br />    attachment :content_type =>"application/vnd.ms-excel",  <br />      :filename => "export_#{Time.now.strftime('%Y-%m-%d')}.xls" ,  <br />      :body => @data<br />  end<br />end<br />这样就实现了使用spreadsheet-excel 把数据导入到Excel表格中，并且作为邮件附件发送给别人了。
          <br/>
          <span style="color:red;">
            <a href="http://rawbenny.javaeye.com/blog/149611#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Dec 2007 10:17:16 +0800</pubDate>
        <link>http://rawbenny.javaeye.com/blog/149611</link>
        <guid>http://rawbenny.javaeye.com/blog/149611</guid>
      </item>
      <item>
        <title>mysql：无法远程登入mysql server 的解决办法</title>
        <author>rawbenny</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rawbenny.javaeye.com">rawbenny</a>&nbsp;
          链接：<a href="http://rawbenny.javaeye.com/blog/147405" style="color:red;">http://rawbenny.javaeye.com/blog/147405</a>&nbsp;
          发表时间: 2007年12月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          mysql这么小，大家都会在自己机器上装一个，在本地连本地的server，一般都不会碰到"host is not allowed to connect to this mysql server"这样的错误。如果不是最近一个rails 的项目，估计我也不会碰到，所以记录一下，给需要的人留个档。<br /><br />我们的项目是ubuntu7.04+rails1.2.3+mysql5.0，前面的人基本上都是在vi下做开发，访问数据库也是用命令行，随着项目的增大，表结构由原来的几张变成了几十张，新来的开发人员基本上不习惯用命令行，所以决定用IDE远程访问数据库。<br /><br />1、装好navicat，新建一个connection，双击该连接，出现错误提示"host is not allowed to connect to this mysql server".<br />2、怀疑网络问题，先ping服务器，能通，再telnet，服务器拒绝链接，网络问题被排除。<br />3、那只能是服务器的配置问题，查了一下manual，需要在服务器里mysql数据库的host表做些配置。<br />shell>mysql --user=root -p<br />输入密码<br />mysql>use mysql<br />mysql>GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[ipadd] identified by '[password]';<br /><br />db_name：要开发远程连接权限数据库名<br />username：连接所使用的用户名<br />ipadd：客户端所在主机的IP地址，如果要开放多个网段的链接，可以使用%作为通配符，例如，开一个一个C类网段的连接，可以使用'192.168.0.%'，<span style="color: red"><strong>地址两边的单引号是必须的。</strong></span><br />password：用户密码
          <br/>
          <span style="color:red;">
            <a href="http://rawbenny.javaeye.com/blog/147405#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Dec 2007 22:15:11 +0800</pubDate>
        <link>http://rawbenny.javaeye.com/blog/147405</link>
        <guid>http://rawbenny.javaeye.com/blog/147405</guid>
      </item>
      <item>
        <title>rails访问webservice</title>
        <author>rawbenny</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rawbenny.javaeye.com">rawbenny</a>&nbsp;
          链接：<a href="http://rawbenny.javaeye.com/blog/147402" style="color:red;">http://rawbenny.javaeye.com/blog/147402</a>&nbsp;
          发表时间: 2007年12月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">在rails里访问webservice跟访问RSS Feeds一样简单（见本博处女作），有很多种不同的方式，SOAP，REST是最常见的2种，这里介绍一下REST方式。</font></p>
<pre><p><font face="Arial">【清单一】</font></p><p><font face="Arial">require 'net/http'<br />class Expedia::Request<br />&nbsp; attr_reader :error, :ticket_str, :total<br />&nbsp; @@site =&nbsp;&nbsp;&nbsp; &quot;http://www.travelnow.com&quot;<br />&nbsp; @@path =&nbsp;&nbsp;&nbsp; &quot;#{@@site}/external/xmlinterface.jsp?<font color="#ff0000">cid=******</font>&amp;resType=air&amp;intfc=ws&amp;xml=&quot;</font></p><p><font face="Arial">&nbsp; def initialize(params = {})<br /><br />&nbsp;&nbsp;&nbsp; @trip_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:trip_type]<br />&nbsp;&nbsp;&nbsp; @depart_city&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:depart_city]<br />&nbsp;&nbsp;&nbsp; @arr_city&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:arr_city]<br />&nbsp;&nbsp;&nbsp; @depart_date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:depart_date]<br />&nbsp;&nbsp;&nbsp; @ret_date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:ret_date]<br />&nbsp;&nbsp;&nbsp; @fare_class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:fare_class]<br />&nbsp;&nbsp;&nbsp; @adult_passengers&nbsp; = params[:adult_passengers]<br />&nbsp;&nbsp;&nbsp; @senior_passengers = params[:senior_passengers]<br />&nbsp;&nbsp;&nbsp; @children&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = params[:children] #INF,INS,C02,C11...&nbsp;&nbsp; <br />&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; def send<br /></font></p><font face="Arial"></font></pre>
<pre><font face="Arial"><p>#生成需要发送的请求数据，追加在@@path后面<br />&nbsp;&nbsp;&nbsp; xml = Builder::XmlMarkup.new<br />&nbsp;&nbsp;&nbsp; <br /><br />&nbsp;&nbsp;&nbsp; request_xml = xml.AirSessionRequest(:method=&gt;&quot;getAirAvailability&quot;){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.AirAvailabilityQuery{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.originCityCode(@depart_city)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.destinationCityCode(@arr_city)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @ret_date != &quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.returnDateTime(@ret_date.to_s)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # fill xml request with proper data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.departureDateTime(@depart_date.to_s)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.fareClass(@fare_class)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.tripType(@trip_type)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.searchWindow(&quot;12&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.Passengers{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @adult_passengers != &quot;0&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.adultPassengers(@adult_passengers)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @senior_passengers != &quot;0&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.seniorPassengers(@senior_passengers)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @children != &quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml.childCodes(@children)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Net::HTTP.version_1_2<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; #发送请求，处理返回的结果。结果是一个XML格式的字符串。<br />&nbsp;&nbsp;&nbsp; @@path = @@path + CGI.escape(request_xml)<br />&nbsp;&nbsp;&nbsp; @@path = URI.parse(@@path)</p><p>    #调用HTTP.get方法是访问webservice的关键。<br />&nbsp;&nbsp;&nbsp; @ticket_str = Net::HTTP.get(@@path).gsub(/\n?\r?/,'')<br /></p></font><p><font face="Arial">&nbsp; end</font></p><font face="Arial"></font></pre>
<pre><font face="Arial"><p>范例程序访问的webservice是expedia提供的，如果你想运行该程序，必须用六位数字替换<font color="#ff0000">cid=******</font>中的'*'，详细内容请参考：</p><p><font face="Arial"></font></p><p><font face="Arial">https://www.ian.com/xmldocs/xml_ws/air/airAvailList.shtml</font><br /></p></font></pre>
          <br/>
          <span style="color:red;">
            <a href="http://rawbenny.javaeye.com/blog/147402#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Dec 2007 21:52:37 +0800</pubDate>
        <link>http://rawbenny.javaeye.com/blog/147402</link>
        <guid>http://rawbenny.javaeye.com/blog/147402</guid>
      </item>
      <item>
        <title>ruby编写的RSS读取程序</title>
        <author>rawbenny</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rawbenny.javaeye.com">rawbenny</a>&nbsp;
          链接：<a href="http://rawbenny.javaeye.com/blog/146518" style="color:red;">http://rawbenny.javaeye.com/blog/146518</a>&nbsp;
          发表时间: 2007年12月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          读取RSS数据其实很简单，通过调用HTTP的get方法访问数据源，将结果交给REXML解析。与Rails里访问某些webservice有相似之处。 <br /><br />【清单一】<br />def air_deals<br />    source  = ‘http://b2b.expedia.com/daily/outposts/rss/getRSSDeals.asp?mdbcat=20&dealName=Best%20Flight%20Deals’<br />#调用get方法<br />    @rss_str = Net::HTTP.get(URI.parse(source))<br />#处理字符串，去除空白符<br />@rss_str = @rss_str.gsub(/\n?\r?\t?/,'')<br />#新建一个XML文档<br />    xml_doc = REXML::Document.new @rss_str<br />#处理结果以数组方式保存，数组里的每一条记录就是一个消息。消息封装在AirfareRssReader中，见【清单二】<br />    airfare_readers = Array.new<br />    xml_doc.elements["rss/channel"].each_element("//item") do |ele|<br />      reader = AirfareRssReader.new<br />      reader.title = ele.elements["title"].get_text<br />      reader.pub_date = ele.elements["pubDate"].get_text<br />      reader.description = ele.elements["description"].get_text<br />      reader.link = ele.elements["link"].get_text<br />      airfare_readers &lt;&lt; reader<br />    end<br />    #渲染页面<br />   render 。。。。。<br />  end<br />【清单二】<br />class AirfareRssReader<br />  attr_accessor :title, :pub_date, :description, :link<br />end<br /><br />#TODO:明天继续webservice的访问
          <br/>
          <span style="color:red;">
            <a href="http://rawbenny.javaeye.com/blog/146518#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Dec 2007 22:57:19 +0800</pubDate>
        <link>http://rawbenny.javaeye.com/blog/146518</link>
        <guid>http://rawbenny.javaeye.com/blog/146518</guid>
      </item>
      <item>
        <title>如何将Ruby的对象转换成javascript对象？类似Java世界里DWR做的转换工作，ruby里有吗？</title>
        <author>rawbenny</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://rawbenny.javaeye.com">rawbenny</a>&nbsp;
          链接：<a href="http://rawbenny.javaeye.com/blog/146379" style="color:red;">http://rawbenny.javaeye.com/blog/146379</a>&nbsp;
          发表时间: 2007年12月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近做一个项目，需要DWR类似的功能，ruby里有没有啊？
          <br/>
          <span style="color:red;">
            <a href="http://rawbenny.javaeye.com/blog/146379#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Dec 2007 12:28:10 +0800</pubDate>
        <link>http://rawbenny.javaeye.com/blog/146379</link>
        <guid>http://rawbenny.javaeye.com/blog/146379</guid>
      </item>
  </channel>
</rss>