shitou's blog 

  • Home
  • About
  • Feed
  • 十人族
  • MIX BOY
  • 塌客

Category "ruby"

16
Dec

json_formatter

最近一直在用sinatra做API, OAuth2的东西, 调试用的curl, 数据的返回格式是json, 默认情况下一对一对字符串是直接在console输出出来的,不方便查看,像这样:
{"accounts":[{"name":null,"id":"4ea060742c76682ab800a807","api_url":"https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea060742c76682ab800a807","email":"skidave32289@gmail.com"},{"name":null,"id":"4ea06b5e2c76682aa6002ac5","api_url":"https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea06b5e2c76682aa6002ac5","email":"skidave32289+20@gmail.com"},{"name":null,"id":"4ea071862c766848c3000055","api_url":"https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea071862c766848c3000055","email":"skidave32289+21@gmail.com"},{"name":null,"id":"4ea075e02c766848c8000ae5","api_url":"https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea075e02c766848c8000ae5","email":"skidave32289+22@gmail.com"}]}
今天在rubyflow上看到一个不错的工具gem: json_formatter, 直接gem install后,就可以在命令行用了:
#curl -H 'EXAMPLE-API-KEY: b60b5400dd6f012eg16c12313b0ecdxc2' "https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts?per_page=100" | json_formatter 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5812  100  5812    0     0   3358      0  0:00:01  0:00:01 --:--:-- 11049
{
  "accounts": [
    {
      "name": null,
      "id": "4ea060742c76682ab800a807",
      "email": "skidave32289@gmail.com",
      "api_url": "https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea060742c76682ab800a807"
    },
    {
      "name": null,
      "id": "4ea06b5e2c76682aa6002ac5",
      "email": "skidave32289+20@gmail.com",
      "api_url": "https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea06b5e2c76682aa6002ac5"
    },
    {
      "name": null,
      "id": "4ea071862c766848c3000055",
      "email": "skidave32289+21@gmail.com",
      "api_url": "https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts/4ea071862c766848c3000055"
    }
  ]
}

#也可以直接输入字符串
#json_formatter "{}"

ps: 关于curl
上面提到了curl,就再多说一点吧,在用curl进行POST请求添加数据时需要注意, 使用 -d "name=value" 的方法是不会自动给value进行编码(url escape)的, 如果想让curl给数据进行escape需要使用 --data-urlencode 选项:
#curl -d "site=www.ccok.me" --data-urlencode "email=li+lei.hand-some2@yottaa.com" -H 'EXAMPLE-API-KEY: b60b5400dd6f012ec57c123112b0ecda2' "https://api-dev.example.com/partners/4ea05b812c76682ab800a0b0/accounts"
Tags: ruby,shell,json

2011-12-16 01:30:23, 148 reviews, comment

send to mailbox

Your email:

28
Sep

Ruby mime-types

得到文件的mime-types类型,目前一种是通过判断文件的后缀,另一种就是通过文件的内容来判断,当然前一种如果你故意修改文件后缀的话就不能做为真实的依据了,后一种才是最可靠的,ruby目前的一个gem mime-types就是通过判断文件后缀的方法,不太可靠,所以我们可以使用linux系统的工具来判断:

 

#file -Ib readme.txt

text/plain; charset=us-ascii

#file -Ib ~/Music/PureMusic/Serenade.mp3

audio/mpeg; charset=binary

#mv ~/Music/PureMusic/Serenade.mp3 ~/Music/PureMusic/Serenade.txt

#file -Ib ~/Music/PureMusic/Serenade.txt

audio/mpeg; charset=binary

 

你可以用上面同样的方法测试下ruby mime-types, 就挂了

MIME::Types.type_for '~/Music/Pure Music/Serenade.txt'

 

Tags:

2010-09-28 19:51:31, 4685 reviews, comment

send to mailbox

Your email:

18
Jan

Ruby和Erlang的交互

Ruby的速度慢是公认的(虽然我并不想面对这一点),所以在遇到一些需要大量运算的业务时就会遇到瓶颈,这时可以把这部分的逻辑运算交給其他相对运算较快的语言来做,ruby只用得到返回结果就行了,

 

可以使用Rubyinline在ruby代码种嵌入C, 也可以使用Erlectricity来实现与Erlang的对接,

 

除了这种办法之外还可以使用后台运行来处理消耗资源的任务,当然这只能针对于及时性不高的业务。

 

参考:

http://www.infoq.com/cn/news/2009/09/haskell-ruby-hubris

http://github.com/mojombo/erlectricity

Tags: ruby,Erlang

2010-01-18 15:47:57, 925 reviews, comment

send to mailbox

Your email:

17
Nov

Ruby遍历MemCached的key

用ruby得到memcached的key:
#enum_memcache_keys.rb:

require 'rubygems'
require 'socket'

class EnumMemcacheKeys

  MEMCACHE_STATS = ["END", "OK", "DELETE", "ERROR"]

  class << self
    def open(host, port)
      s = TCPSocket.open host, port
      yield s if block_given?
    ensure
      s.close if s
    end

    def items(host = 'localhost', port = '11211')
      i = []
      open(host, port) do |s|
        s.send("stats items\r\n", 0)

        until MEMCACHE_STATS.include?(line = s.gets.strip) do
          i << line
        end
      end
      
      i
    end

    def keys(host = 'localhost', port = '11211')
      keys = []

      open(host, port) do |s|
        buff = items(host, port)

        items = []
        buff.each { |b| items << b.split(':')[1] }

        keys = []
        items.each do |i|
          s.send("stats cachedump #{i} 0\r\n", 0)
          until MEMCACHE_STATS.include?(line = s.gets.strip) do
            keys << line.split(' ')[1]
          end
        end
      end

      keys
    end

    protected :open
  end

end

#use
p EnumMemcacheKeys.items
p EnumMemcacheKeys.keys('10.0.0.5', '11211')


Tags: memcache

2009-11-17 16:05:10, 27465 reviews, comment

send to mailbox

Your email:

03
Feb

PHPRPC

在Ruby官方网站中发现Top Ruby Projects排在第一的是PHPRPC for Ruby, 没听说过的说,于是就看了看的说, PHPRPC(perfect high performance remote procedure call)是一个的远程过程调用协议。你可以认为它类似于 XMLRPC,但是它们的工作方式有很大的不同。


PHPRPC 3.0 是使用 HTTP 协议作为传输协议的。以后的版本可能会提供更多传输协议的绑定(如 TCP、UDP 等),但 3.0 及其以前的版本只提供了 HTTP 传输绑定的工作方式。


PHPRPC是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。


PHPRPC支持的语言非常多其中有Java, Ruby, Javascript, PHP等等, 简单的说PHPRPC的作用就是发布本地的方法甚至对象,客户端连接后就可以调用远程的方法, 推荐一个网站,说不定什么时候就会用到的说.., 摸我

Tags:

2009-02-03 09:21:29, 875 reviews, comment

send to mailbox

Your email:

21
Jan

Ruby + AMQP + RabbitMQ Example

这里记录下ruby下AMQP的使用,支持AMQP的开源broker比较多,比较有名的是ActiveMQ, 是Apache下的一个项目,这里采用的是RabbitMQ, RabbitMQ是Erlang写的,因为Erlang对高并发的支持非常擅长,因此RabbitMQ的表现自然也不逊色,平台这里采用的是Debian, 在安装Rabbit之前首先要安装Erlang, 之前有些过一片关于Erlang安装的文章, Debian上使用apt安装就OK了,这里就不多说了, 安装完后RabbitMQ将会自动建立一个域,测试账户和密码test,然后通过

/etc/init.d/rabbitmq-server start

启动就行了, 可以随时查看/var/log/rabbitmq下的日志查看运行状况

 

 

这里采用的ruby接口库就是amqp, 可以通过gem直接安装


发送脚本, producer.rb:

%w{rubygems amqp mq}.each { |b| require b }

MQ_SERVER = '192.168.0.113'
MQ_PORT = 5672
MQ_USER = 'guest'
MQ_PWD = 'guest'

begin 
EM.run {
  conn = AMQP.connect(:host => MQ_SERVER, :port => MQ_PORT, :user => MQ_USER, :pass => MQ_PWD)
  channel = mp_conn = MQ.new(conn)
  channel.queue('mp_queue').publish(Marshal.dump(['mp', '', '13718781273', 'hello, shitou']))
  conn.close
}
rescue AMQP::Error
end

接收的脚本,consumer.rb:

%w{rubygems amqp mq net/http uri active_record}.each { |b| require b }

MQ_SERVER = '192.168.0.113'
MQ_PORT = 5672
MQ_USER = 'guest'
MQ_PWD = 'guest'

EM.run {
  conn = AMQP.connect(:host => MQ_SERVER, :port => MQ_PORT, :user => MQ_USER, :pass => MQ_PWD)
  channel = mp_conn = MQ.new(conn)
  queue = MQ::Queue.new(channel, 'mp_queue') #mp_queue is the queue we defined

  queue.subscribe do |header, msg|
    data = Marshal.load(msg)
    mobilephone, text = data[2], data[3]
    puts "send to NO.: #{mobilephone}, #{text}"
  end
  
  #mp.publish(Marshal.dump('hello shitou'))
  #conn.close { EM.stop_event_loop }
  #AMQP.stop { EM.stop }
}
Tags: AMQP

2009-01-21 17:28:03, 1748 reviews, comment

send to mailbox

Your email:

上一页 1 2 3 4 下一页

Tags

json Impactjs Canvas fun gen_server superfly PS3 Webgame HTML5 jquery SSH tenerer MooseFS gearman-ruby Gearman MongoDB MochiChat TCP U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • HTML5[3]
  • iPhone[17]
  • Erlang[11]
  • google[13]
  • 生活[45]
  • 音乐[13]
  • 电影[11]
  • linux[29]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[9]
  • ruby[20]
  • ruby on rails[28]
  • 开源[4]

Episode

  • MongoDB
  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache


Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Ruby遍历MemCached的key
  • 服务器监控小脚本
  • MySQL Innodb备份
  • [转载]5个有用的ruby gems

Recommended Posts

  • Tri-survive - HTML5 Game
  • Cut the rope - HTML5版
  • json_formatter
  • 在gen_server中spawn新的进程
  • Superfly - Wildflowers
  • 继续凸墙 for Mac OS
  • MongoDB Beijing 2011
  • MongoDB删除map_reduce生成的tmp collection
  • Mai Kuraki - Future Kiss
  • Erlang OOP
  • 用SSH tunnel凸墙
  • Google的语法高亮工具包
  • 大量数据的批量操作
  • 再次被和谐-_-
  • 十人族: 上线了

Friends' blogs

  • levy
  • sphance
  • andreas
  • yangkunlun
  • {:dev=>:wxianfeng}
  • bheye
  • joeydarko

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 316257
  • 今天访问: 52
  • 日志: 213
  • 评论: 4967
  • 音乐: 9
  • 用户: 1758


少女,不点下广告吗!

 

all by shitou

blog comments powered by Disqus

close