Top > Blog > Programming

Programming

  • 09/07/02 - [正規表現] 連続する同一文字をチェックする

    正規表現の小ネタ。

    たとえばパスワードの強度チェックを行う場合に、0000や9999のような同一文字の連続を不許可にしたい場合、 以下のような正規表現で簡単に引っかける事が出来る。

    続きを読む
  • 09/05/22 - テーブルの行(TR要素)をスライドで表示切替させる方法(2)

    前回はサンプルだけ提示しましたが、今回はそのソースコードを解説します。

    続きを読む
  • 09/03/27 - テーブルの行(TR要素)をスライドで表示切替させる方法(1)

    jQuery等のライブラリを使うと、様々な視覚効果やアニメーションを簡単に行う事が出来ます。
    例えば、

    続きを読む
  • 08/05/02 - Ruby覚書

    珍しくRubyでCGIなんぞ作ったので、忘れないようにメモを…

    CGIからメールを送る

    Rubyには TMail とか ActionMailer などのメール送信ライブラリがあるようですが、試してみたところ、そもそも配備対象のレンタルサーバーからはSMTPでの送信が出来ませんでした。 ポートが閉じられてるらしい。。。

    レンタルサーバーの説明書を読むと sendmail は使えるようだったので、そいつでメール送信するとうまく行きました。 下記がそのメソッドです。

    require 'kconv'
    
    def sendmail(from, to, cc, bcc, subject, body)
      
      path = "/usr/lib/sendmail" # sendmailのパス
      subject = subject.tojis
      subject = [subject].pack('m') # Base64
      subject.gsub!(/\n/, "")
      subject = "=?ISO-2022-JP?B?#{subject}?="
      body = body.tojis
    
      IO.popen("#{path} -t", "r+") { |io|
        io.print "From: #{from}\n"
        io.print "To: #{to}\n"
        io.print "Cc: #{cc}\n" if cc != nil
        io.print "Bcc: #{bcc}\n" if bcc != nil
        io.print "Subject: #{subject}\n"
        io.print "MIME-Version: 1.0\n"
        io.print "Content-Type: text/plain; charset=iso-2022-jp\n"
        io.print "Content-Transfer-Encoding: 7bit\n"
        io.print "\n"
        io.print "#{body}\n"
      }
    end

    JIS変換で文字化け

    前述のメール送信で、件名をJISに変換してますが、テストしてたらここで微妙に文字化けが発生してました。 調べてみるとどうも件名を定義しているスクリプトの文字コードがShift_JISなのに、オプションを指定せずに Ruby のインタプリタを実行していたのが原因らしい。説明はリファレンスマニュアルにありました。

    FAQ::日本語の取り扱い – Rubyリファレンスマニュアル

    こうすれば良いんですね。

    #!/usr/local/bin/ruby -Ks

    CGI実行時に発生したエラーを見る

    begin ~ rescue(例外処理)end で、例外処理に以下のようなコードを実行させると、例外発生時にバックトレースが見れました。

    require "cgi"
    require "erb"
    # 同一ディレクトリのrbファイルを参照
    Dir.glob("*.rb").each do |file|
      require file
    end
    
    begin
    
    print "Content-type: text/html\n\n"
    cgi = CGI.new
    # 以下、CGIの処理...
    
    rescue Exception => e #例外を取得
      print "Content-Type: text/plain\n\n"
      puts "Error:"
      puts e
      puts ""
      puts "backtrace:"
      print e.backtrace
    end
  • 08/04/15 - DocBookの段落内で改行する

    DocBookではHTMLの<br/>に該当するタグがありません。これは改行はフォーマットであってXMLの責務では無いとする事からだそうですが、 続きを読む