RSS

カテゴリー別アーカイブ: Ruby

Windows から画像をまとめて Linux へ転送したとき、紛れ込んだ Thumbs.db を削除するには

Windows では画像ファイルの置いてあるフォルダに隠しファイル thumbs.db というサムネイルのキャッシュを保存するファイルが作られる。

このフォルダごと Linux へ FTP 転送などを行うと、この隠しファイルが紛れ込んでしまう。次の ruby スクリプトは Linux に転送された Windows の画像フォルダを再帰的に検索して Windows の隠しファイルを削除する。

#  ディレクトリに含まれるすべての Desktop.ini, Thumbs.db を削除

def deleteKs(path)
  if FileTest.directory?(path) then  # ディレクトリかどうかを判別
    Dir.foreach(path) do |file|
      next if file == '.' or file == '..'  # 上位ディレクトリと自身を対象から外す
      deleteKs(path.sub(/\/+$/,"") + "/" + file)
    end
  else
    name = File.basename(path)
    if name == 'Desktop.ini' or name == 'Thumbs.db' then
      puts "deleting .. " + path
      File.delete(path)
    end
  end
end

# main
if ARGV.size > 0 then
  if FileTest.exists?(ARGV[0]) then
    deleteKs(ARGV[0])
    puts 'Done.'
  else
    puts ARGV[0] + ' does not exists.'
  end
else
  puts 'Usage: deleteKasu dir'
end
 
コメントする

投稿者: : 2016/10/20 投稿先 Linux, Ruby

 

Ruby gem を手動でインストール

CentOS 6.7 で gem コマンドによる Ruby Gem ファイルのインストールができなくなりました。どうも、SSL の証明書の期限が切れて https によるアクセスができなくなっているらしいです。

証明書をどうにかするのも考えましたが、もう新しい gem をインストールすることもあまりないので手動インストールをしてみました。

まず、https://rubygems.org をブラウザで開いて目的の gem を検索します。見つかったら早速 gem をダウンロードしようとしたらうまくいきません。どうやら Versions: の下のリンクをクリックしてもダメなようで、右側のサイドメニューの Download をクリックしたらうまくダウンロードできました。

ダウンロードした gem ファイルをターゲットマシンに転送して次のコマンドを実行したらうまくインストールできました。

 sudo /usr/local/bin/gem install –local *******.gem

ここで、*******は具体的な gem ファイルの名前です。/usr/local/bin/gem はパスが通ってなかったのでフルパスを指定していますが、パスが通っていれば gem だけで OK のはずです。

 

 

 
コメントする

投稿者: : 2016/10/10 投稿先 Ruby

 

Ruby: コンソールで色付き文字をエスケープシーケンスを使って表示

次のサンプルは色付き文字列を表示するためのエスケープシーケンスを返すメソッドを持つ Color クラスを定義して、それを利用するサンプルです。

#
#  カラークラス
#
class Color
 Black = 0
 Red = 1
 Green = 2
 Yellow = 3
 Blue = 4
 Magenta = 5
 Cyan = 6
 White = 7

 #
 #  エスケープシーケンスを得る
 #   パラメータ fg : 前景色(Black..White)
 #   パラメータ bg : 背景色(Black..White)
 #   パラメータ fgint : 前景色をtrueなら明るく表示、falseなら暗く表示
 #   パラメータ bgint : 背景色をtrueなら明るく表示、falseなら暗く表示
 #   戻り値 : 色設定用エスケープシーケンス
 def self.getFgBg(fg, bg, fgint, bgint)
  ec = "\033["
  # background
  if bgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "4"
  ec += bg.to_s()
  ec += ";"
  # foreground
  if fgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "3"
  ec += fg.to_s()
  ec += "m"
  return ec
 end

 #
 # 前景色のエスケープシーケンスを得る。
 #   パラメータ fg : 前景色(Black..White)
 #   パラメータ fgint : 前景色をtrueなら明るく表示、falseなら暗く表示
 #   戻り値 : 色設定用エスケープシーケンス
 def self.getFg(fg, fgint)
  ec = "\033["
  if fgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "3"
  ec += fg.to_s()
  ec += "m"
  return ec
 end

 #
 # 背景色のエスケープシーケンスを得る。
 #   パラメータ bg : 背景色(Black..White)
 #   パラメータ bgint : 背景色をtrueなら明るく表示、falseなら暗く表示
 #   戻り値 : 色設定用エスケープシーケンス
 def self.getBg(bg, bgint)
  ec = "\033["
  if bgint == true then
   ec += "1;"
  else
   ec += "0;"
  end
  ec += "4"
  ec += bg.to_s()
  ec += "m"
  return ec
 end


#
#  属性をリセットする。
 def self.reset()
   return "\033[0m"
 end
end


# テスト
esc = Color::getFg(Color::Cyan, false)
puts esc + "テスト"
esc = Color::getBg(Color::Magenta, false)
puts esc + "テスト"
esc = Color::getFgBg(Color::Blue, Color::Green, true, false)
puts esc + "テスト"
esc = Color::reset
puts esc + "Done."

実行例 (Ubuntu 16.04LTS, Ruby 2.3.0, TeraTerm)

ruby_color_class

 
コメントする

投稿者: : 2016/09/18 投稿先 Ruby

 

Ruby: 複素数のテスト – Matrix, Vectorの複素数拡張

複素数で Matrix , Vector クラスを使う例

#!/usr/bin/ruby
# coding: utf-8
#   複素数のテスト(3) - Matrix, Vectorの複素数拡張
require "matrix"
require "complex"
require "cmath"

puts "複素数のテスト(3) - Matrix, Vectorの複素数拡張"
a = Vector[Complex(0.0, 1.0), Complex(1.0, 0.0)]
b = Vector[Complex(-1.0, 1.0), Complex(1.0, -1.0)]

p a.r
p a.inner_product(b)

th = 30.0 * Math::PI / 180.0
m = Matrix[[Complex(CMath.cos(th), -CMath.sin(th)), Complex(CMath.sin(th), 
           CMath.cos(th))], 
           [Complex(1.0, 0.0), Complex(0.0, 1.0)]]

c = m * b
p c

実行例 (Ubuntu 16.04LTS, ruby 2.3.1p112)

$ ./test_cmplx3.rb
複素数のテスト(3) - Matrix, Vectorの複素数拡張
1.4142135623730951
(2.0+0.0i)
Vector[(0.9999999999999998+1.7320508075688774i), (0.0+2.0i)]
$
 
コメントする

投稿者: : 2016/09/17 投稿先 Ruby

 

Ruby: 複素数のテスト – Math の複素数拡張

CMath モジュールの使用例

#!/usr/bin/ruby
# coding: utf-8
#   複素数のテスト(2) - Math の複素数拡張
require "cmath"

puts "複素数のテスト(2) - Mathの複素数拡張"

z = CMath.exp(Complex(0.0, 1.0))
p z

z = CMath.exp(Complex(1.0, 0.0))
p z

theta = 30.0 * Math::PI / 180.0
z = CMath.exp(Complex(CMath.cos(theta), CMath.sin(theta)))
p z

z = CMath.sqrt(Complex(1.0, 1.0))
p z

実行例 (Ubuntu16.04LTS, ruby 2.3.1p112)

$ ./test_cmplx2.rb
複素数のテスト(2) - Mathの複素数拡張
(0.5403023058681398+0.8414709848078965i)
(2.718281828459045+0.0i)
(2.0864022336812553+1.1398067350757155i)
(1.09868411346781+0.4550898605622274i)
$
 
コメントする

投稿者: : 2016/09/17 投稿先 Ruby

 

Ruby: 複素数 complex

Complex クラスのサンプル

#!/usr/bin/ruby
# coding: utf-8
#   複素数のテスト
require "complex"

puts "複素数のテスト"

z = Complex(-1.0, 2.0)
p z
p z.real
p z.imag


w = Complex(3.0, -2.0)
z2 = w + z
p z2
z2 = w - z
p z2
z2 = w * z
p z2
z2 = w / z
p z2
p z ** 2


p z.abs
p z.arg
p z.abs2

p z.conjugate
p z.polar

実行例 (Ubuntu 16.04LTS, ruby 2.3.1p112)

$ ./test_cmplx1.rb
複素数のテスト
(-1.0+2.0i)
-1.0
2.0
(2.0+0.0i)
(4.0-4.0i)
(1.0+8.0i)
(-1.4-0.7999999999999999i)
(-3.0-4.0i)
2.23606797749979
2.0344439357957027
5.0
(-1.0-2.0i)
[2.23606797749979, 2.0344439357957027]
$
 
コメントする

投稿者: : 2016/09/17 投稿先 Ruby

 

タグ:

Ruby: ログを取る。

ログを取る場合、 Logger クラスを使うことができる。

#!/usr/bin/ruby

require 'logger'

# 標準出力にログを出力する。
log = Logger.new(STDOUT)
log.level = Logger::WARN
log.info('log.info')
log.warn('log.warn')
log.debug('log.debug')
log.fatal('log.fatal')

# ファイルにログを出力する。
log = Logger.new('/tmp/test.log')
log.level = Logger::INFO
log.info('log.info')
log.warn('log.warn')
log.debug('log.debug')
log.fatal('log.fatal')

puts 'Done.'

実行例

$ ./Logger.rb
W, [2016-09-10T21:46:58.964085 #4327]  WARN -- : log.warn
F, [2016-09-10T21:46:58.964279 #4327] FATAL -- : log.fatal
Done.
$ cat /tmp/test.log
# Logfile created on 2016-09-10 21:46:02 +0900 by logger.rb/v1.2.7
I, [2016-09-10T21:46:58.964586 #4327]  INFO -- : log.info
W, [2016-09-10T21:46:58.964650 #4327]  WARN -- : log.warn
F, [2016-09-10T21:46:58.964672 #4327] FATAL -- : log.fatal
 
コメントする

投稿者: : 2016/09/10 投稿先 Ruby

 

タグ: