Salted MD5 (CRYPT MD5) ハッシュの生成 [Ruby, Perl, C言語]

先日PHPで生成していたSalted MD5をRubyでも出来てないのは
寝覚めが悪いと言うことでRubyで生成する方法を調べてみた。

PHPでの生成方法: Salted MD5 (CRYPT MD5) ハッシュの生成 [PHP]

Mac OS Xでなんとか試してみていたけど、うまくいかなかった。
どうも、Mac OS Xのcrypt(3)では標準のDESだけでMD5をサポートしていないらしい。
“Salted MD5 (CRYPT MD5) ハッシュの生成 [Ruby, Perl, C言語]” の続きを読む

Rubyで通貨表示 3桁ごとにカンマ

RubyのCGIで予約システム書いてて
金額を数字で扱っていて表示の時に通貨表示として
カンマを3桁ごとに表示したいとおもった。

Rubyでの数値の通貨フォーマット – CHNの中の人たちブログ

正規表現 – Rubyリファレンスマニュアル

上記のサイトを参考にしてIntegerにto_cというメソッドを
追加した。

class Integer
  def to_c
    str = to_s
    tmp = ""
    while(str.size > 3) do
      str.gsub!(/(.*\d)(\d\d\d)/,'\1')
      tmp = ",#{$2}" + tmp
    end
    str + tmp
  end
end

111222333.to_c  #  "111,222,333"

うえむらさんからのコメントでマイナスにも対応したものに修正してみました。

class Integer
  def to_c
    str = to_s
    tmp = ""
    while(str =~ /([-+]?.*\d)(\d\d\d)/) do
      str = $1
      tmp = ",#{$2}" + tmp
    end
    str + tmp
  end
end

-111.to_c      #  -11,222
-111222.to_c   # -111,222

最初は単純にサイトに書いてあるとおりに記述していたけど
テストして1,000~111,000にしか対応していないことに気づき
ちょっと修正した。

str.gsub!(/(.*\d)(\d\d\d)/, '\1,\2')

あと、メソッドに追加していたのはFixnumにだったけど
数が大きくなるとBignumになるので対応できないことにも気づく。

なので上位クラスのIntegerに追加することで解決。

Ruby 1.9.1って安定版なの?

Rubyをいつものごとくダウンロードしようとして

ふと文章にひっかかった。

Rubyダウンロード

  • 最新の安定版であるruby 1.9.1-p0[tar.bz2|tar.gz|zip]が各ミラーサイトから入手できます。
  • 前世代の安定版であるruby 1.8.7-p72[tar.bz2|tar.gz|zip]も各ミラーサイトから入手できます。

あれ?1.8系が前世代で1.9系が最新の安定版?

もちろん.1.8系の最新版をダウンロードしようとしたのだけれど。。。

そっか、バージョンの管理のしかたが変わったんだっけか。

1.9.1は安定版なんだ。ruby-listとってるのに最近読んでないな。

Ruby 1.9.1をリリースしました。これは1.9系統初の安定版リリースです。
Ruby 1.9はRubyの新しい系統です。近代的に、高速に、文法も明確に、多言語化
され、多くの改善がなされました。Ruby 1.8系統は2003年以来利用され、多くの
素晴らしい製品を生み出しました。本日、1.9の歴史が始まります。

なお、Ruby 1.8はまだ継続します。1.8.8は今年くらいにはリリースされるで
しょう。

ほんまや。1/31にリリースされとる。

といっても自分が使っているレベルではあんま変わんないかも。

でも、入れてつかってみたいな。うーん、どの環境も運用でつかっちゃってるし。。

RubyでWordPressへXML-RPC投稿

RubyにはXML-RPCクライアントのためのライブラリが
入っているので、スクリプトから標準でブログに投稿できる。

PHPでの投稿方法だが、この記事を参考にさせていただいた。

XML-RPCを使ってWordPressへ投稿する: のほほんやろうなFX

WordPressで作成したブログの場合はxmlrpc.phpが投稿先となる。

URI: http://example.com/xmlrpc.php

まずは、XML-RPC投稿を許可する設定をする。

[設定]->[投稿設定]
[リモート投稿]のXML-RPCにチェックを入れて設定を保存。

xmlrpc投稿を有効にする

これで、WordPress、 Movable Type、 MetaWeblog および Blogger XML-RPC
投稿プロトコルが有効になる。

各プロトコルの仕様については下記サイト参照。

WordPress本家 XML-RPC Support
http://codex.wordpress.org/XML-RPC_Support

require 'xmlrpc/client'

user = 'hogehoge'
pass = 'password'
publish = 1

server = XMLRPC::Client.new('example.com', '/xmlrpc.php')

struct = {
'title'=>'テスト投稿',
'description'=>'投稿内容投稿内容'
}

id = server.call("metaWeblog.newPost",1,user,pass,struct,publish)

puts "Post ID: #{id}"

簡単な投稿だけであれば、これだけでXML-RPC投稿が出来る。
publishを0にすれば「下書き」で登録される。

WordPress APIの仕様には新規投稿なくmetaWeblogで投稿することになる。

日付を入力して「下書き」にする場合は次の通り。
Timeでparseを使うには明示的にrequire ‘time’が必要です。

require 'time'
require 'xmlrpc/client'

user = 'hogehoge'
pass = 'password'
publish = 0
date = Time.parse('2010/02/13 12:22')

server = XMLRPC::Client.new('example.com', '/xmlrpc.php')

struct = {
'title'=>'テスト投稿2',
'description'=>'投稿内容投稿内容2',
'dateCreated'=>date
}

id = server.call("metaWeblog.newPost",1,user,pass,struct,publish)

puts "Post ID: #{id}"

dateCreatedの指定はちょっとシビアでエラーがでることもあるかもしれない。
文字列で色々設定してみたけどうまくいかない。

rubyの場合はTimeをそのまま渡してしまえば大丈夫らしいのので
それでよしとした。