• 个人开发记录 at 2013年05月17日

    #34 楼 @zgm - -。有时候激进过度了。。。

  • 个人开发记录 at 2013年05月17日

    #16 楼 @zgm Arch 各种崩坏。。。

  • - -。我也是这样,用 ssh 翻了 qiang 就可以 push 了。。。。

  • 再统计个有多少在校生? at 2013年05月16日

    - -。在校,大二。。。。

  • - -。这货的 tag 管理方式还是不习惯。。。

  • - -。无法直视

  • 已经走 34 了 - -。

  • - -。我们的学校的教育网没有问题。。

  • - -。一眼扫过差点看成 sublime text 开源。。。。

  • #70 楼 @iBachue 一个社区的文化本来就是由社区里的人来推动的,vim-scripts 将 vim.org 里的插件存放到 github 上去,这本就是一种对社区文化的引导。github 2008 才成立,Vim 的历史要长的多,其中的历史包袱自然比较重,现在 Vim 社区已经开始从 vim.org 上那种插件安装方式向 vundle 这类插件所使用安装方式转变,这是一种社区文化的转变,但这种转变需要时间,也需要社区里的人去推动。就我而言,我现在所使用的插件都可以用 vundle 来管理,这是我的 bundle 列表 https://gist.github.com/edgarwang/857189b5f20cbcc3f20b

  • #68 楼 @blacktulip - -。程序员中通用的引发争论的话题。。。。

  • #62 楼 @iBachue http://vim-scripts.org/ - -。这个才是目前 Vim 插件真正的集中地吧。

  • #41 楼 @1272729223 我不是 Mac 用户,所以无能为力...- -。

  • - -。话说 Vim 现在似乎就支持用 Python, Ruby, Lua 等写插件吧?难道要把 Vim 中的 Python 加强到和 VimScript 同等地位么。

  • - -。这只是初步规划,不知道什么时候才能出。。。

  • 一个很简单的问题 at 2013年05月07日

    #8 楼 @zgm - -。原来你指的是 print 后面的空格。。。

  • 一个很简单的问题 at 2013年05月07日

    - -。这是中英文符号的问题吧

  • - -。两边声音大小不一,好不习惯。。。

  • 有多少人在用人人网? at 2013年05月06日

    #17 楼 @aptx4869 - -。我也。。。

  • 有多少人在用人人网? at 2013年05月06日

    - -,一直没有去注册人人....

  • 需要测试 Views 么? at 2013年05月05日

    #1 楼 @hlxwell #2 楼 @doitian 谢谢两位,我去了解下 Capybara 看看。

  • - -。看着很酷,但是感觉没有一开始的版本直观了。。。

  • 多谢总结,赞一个~

  • Upgrade 到 Rails4 的一些感想 at 2013年05月03日

    #8 楼 @pzgz 多谢~

  • 太好了,今晚升级时刚好遇到这个问题,现在就升级了,大赞!

  • 粉丝眼中的操作系统 at 2013年05月02日

    😄

  • #10 楼 @praguepp 我先用 Vim 自动格式化代码,然后你可以参照回复框下的帮助。

  • #5 楼 @praguepp 替你格式化了一下。

     #coding: utf-8
    
    class DCPatronClient < Patron::Session
      attr_accessor :get_header,:post_header,:cookie,:cookie_hash
    
      private:initialize
      def initialize
        super
        @cookie_hash = {"SINFORSESSID"=>"","LifeTime"=>"3600","PHPSESSID"=>""}
      end
    
      def DCPatronClient.get_client(url, connect_timeout=120000, insecure=true)
        @sess = DCPatronClient.new
        @sess.insecure = insecure
        @sess.base_url = url
        @sess.connect_timeout = connect_timeout
        @sess.timeout = connect_timeout/1000
        #@sess.handle_cookies # req.headers = self.headers.merge(headers),由于需要手动维护cookie,因此这里不需要加上内部的维护
        @sess.get_header={"User-Agent"=>" Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E)"}
        @sess.post_header={"User-Agent"=>" Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E)"}
    
        return @sess
    
      end
    
      #构造post请求
      def form_post(uri, data)
        @post_header["Content-Type"]= "application/x-www-form-urlencoded"
        # ATT::KeyLog::debug "uri:#{uri},data:#{data}"
        ret=nil
        times = 0
        2.times do
          begin
            ret = super_post(uri, data, @post_header)
            times +=1
          rescue Patron::Error
            ret=nil
            if $!.to_s.include?("transfer closed with outstanding read data remaining")#修改登录端口会返回此错误,实际修改成功
              ret.body = "{\"success\":true,\"data\":[],\"total\":4,\"time\":0,\"img\":null}"
            end
            ATT::KeyLog.info("#{$!.to_s},http error,retrying...")
          rescue JSON::ParserError
            ATT::KeyLog.info("#{$!.to_s},need to login,retrying...")
            if not islogin?(ret) && times >0
              relogin
            else
              ATT::KeyLog.error("json parse error,server response:#{ret.body[0..20]}")
            end
            ret=nil
          rescue
            ret=nil
            sleep(10)
            ATT::KeyLog.info("#{$!.to_s},other error,retrying...")
          end
          break unless ret==nil
        end
        res = OpenStruct.new
        res.url = ret.url
        res.status = ret.status
        res.status_line = ret.status_line
        res.redirect_count = ret.redirect_count
        res.headers = ret.headers
        if res.status.to_s[0,1] != "2"
          res.body = "{\"success\":false, \"msg\":\"response error, code: #{ret.status}\", \"errorno\":-8}"
        else
          if ret.body.index(":undefined")#修正json返回不标准的情况
            ret.body.gsub!(":undefined",":false")
          end
          #ATT::KeyLog::debug "status_line:#{ret.status_line},header:#{ret.headers},body:#{ret.body}"
          hash = JSON.parse(ret.body)
          if hash["success"] == true
            hash.store("errorno", 0)
            hash.store("msg", "default success msg while original msg is null") if hash["data"].nil?
          elsif hash["success"] == false && hash["msg"].to_s ==""
            hash.store("errorno", -255)
            hash.store("success", false)
            hash.store("msg", "unknow error type")
          end
          res.body = hash.to_json
        end
        return res
      end
    
      def islogin?(ret)
        begin
          if ret.body.include?("ActiveX")&&ret.body.include?("Dkey")
            return false
          else
            return true
          end
        rescue
          return false
        end
      end
    
      def hash_to_comma(hash)
        ret = ""
        hash.each {|key, value| ret = "#{key}=#{value};#{ret}"}
        return ret
      end
    
      def super_post(uri, data, header={})
        #ATT::KeyLog::debug "uri:#{uri},data:#{data}"
        Patron::Session.instance_method("post").bind(self).call(uri, data, header)
      end
    
      def relogin
        passwd=Digest::MD5.hexdigest($dcpasswd)
        ATT::KeyLog.info("relogin user:#{$user} password:#{$dcpasswd},MD5:#{passwd}")
        login_query = "login_user=#{$user}&login_password=#{passwd}&login_pin=&in=&pwd=&dkey=&login=true"
        ret = super_post("/src/acloglogin.php",login_query,@get_header)
        #如果有set cookie,则表示需要提取cookie啦!~
        # @cookie = ret.headers["Set-Cookie"].to_s=="" ? @cookie : ret.headers["Set-Cookie"].split(";")[0] #PHPSESSID=d1a4cfefb265cc2cb1f3ccdd7cdb437e; path=/
        # @cookie += ";LifeTime=3600; SINFORSESSID="
        # @post_header["Cookie"] = @cookie+Time.now.to_i.to_s
        @cookie_hash = {"SINFORSESSID"=>"","LifeTime"=>"3600","PHPSESSID"=>""}
    
        @cookie_hash["PHPSESSID"] = ret.headers["Set-Cookie"].to_s=="" ? @cookie_hash["PHPSESSID"] : ret.headers["Set-Cookie"].split(";")[0]
        @cookie_hash["PHPSESSID"] = @cookie_hash["PHPSESSID"].split("=")[1] if @cookie_hash["PHPSESSID"].include?("PHPSESSID")
    
        @cookie_hash["SINFORSESSID"] = Time.now.to_i.to_s
    
        @post_header["Cookie"] = hash_to_comma(@cookie_hash) 
    
        @post_header["Content-Type"]= "application/json"
        @post_header["x-requested-with"]= "XMLHttpRequest"
        if islogin?(ret)
          ATT::KeyLog.info "Login datacenter ok..."
          return true
        else
          ATT::KeyLog.error "Login datacenter error:#{ret.body[0..20]}..."
          return false
        end
    
      end
    
      def logout
        ret = get("/src/acloglogin.php?in=1&logout=1",@get_header)
        ATT::KeyLog.info "logout query ret:#{ret}"
      end
    
      def hash_to_and(hash)
        ret = ""
        hash.each do |key, value|
          if value.class == String
            ret = "#{key}=#{URI.encode(value)}&#{ret}"
          else
            ret = "#{key}=#{value}&#{ret}"
          end
        end
        ret
      end
    
      #封装get请求
      def get(url, data)
        get_header = @post_header
        get_header["Content-Type"]= "application/x-www-form-urlencoded"
        get_header.delete("x-requested-with")
        uri = nil
        uri = url
        if data != nil
          if uri.to_s.include?("?")
            uri << "&"
          else
            uri << "?"
          end
          uri << hash_to_and(data)
        end
    
        ATT::KeyLog.info("uri:#{uri}")
        return super(uri,get_header)
    
      end
    
    end
    
  • 趣味图片:He uses WIFI at 2013年04月29日

    2333,莫名的笑了 - -