■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

連番展開スクリプト(ruby版ver.2.1)

1. デクリメント動作時にはend側の桁数に合わせるようにした
2. 08,09を指定した際、evalに8進数だと解釈さ1れてエラーとなる問題の回避

2.のevalの8進数解釈の回避方法ってto_i.to_s以外ちゃんとしたのないのかなぁ…


#!/usr/bin/env ruby
###############################################
# expand serial number                        #
# syntax  : foo[nStart-nEnd][...]             #
# example : before                            #
#             0: foo[0-1][3-2]bar[1+\2][\1-1] #
#           after                             #
#             0: foo03bar4-1                  #
#             1: foo02bar3-1                  #
#             2: foo13bar40                   #
#             3: foo12bar30                   #
###############################################

####### SUB FUNCTIONS
### TO_S UNDER HEX
def to_hs(sFoo, isHex)
    return sprintf(isHex == 2 ? "%X" : isHex == 1 ? "%x" : "%d", sFoo)
end
### DIGIT ALIGNMENT
def aligndigit(sFoo, nLen)
    return sFoo = "0" * [nLen - sFoo.length, 0].max + sFoo
end
### DECREMENT INDEX OF BACK-REFERENCE
def decrefindex(sFoo)
  if (sFoo =~ /(.*?\[.*?\\)(\d)(.*?\].*)/)
    return $1 + ($2.to_i-1).to_s + decrefindex($3)
  end
  return sFoo
end
### SUBSTITUTE BACK-REFERENCE "\1"
def substbackref(sFoo, sBar, isHex)
  if (sFoo =~ /.*\[(.*?)\\1(.*?)\]/)
    sEvl = aligndigit(to_hs(eval($1 + (isHex != 0 ? "0x" + sBar : sBar.to_i.to_s) + $2), isHex), sBar.length)
    substbackref(sFoo.gsub!(/\[#{Regexp.escape($1 + '\1' + $2)}\]/, sEvl), sBar, isHex)
  end
  return decrefindex(sFoo)
end
### SERIAL NUMBER EXPANTION
def expand(sFoo)
  if (sFoo =~ /(.*?)\[\s*((?:0[xX])?[0-9a-fA-F]+)\s*-\s*((?:0[xX])?[0-9a-fA-F]+)\s*\](.*)/)
    sPre   = $1
    nStart = eval($2.to_i.to_s)
    nEnd   = eval($3.to_i.to_s)
    sSuf   = $4
    # increment/decrement
    nStep = nStart < nEnd ? 1 : -1
    nLen  = nStart < nEnd ? $2.length : $3.length

    if ($2[0..1] == "0X" && $3[0..1] == "0X")
      isHex = 2 
    elsif ($2[0..1] == "0x" && $3[0..1] == "0x")
      isHex = 1 
    else
      isHex = 0
    end
    nStart.step(nEnd, nStep){ |i|
      sAligned = aligndigit(to_hs(i, isHex), isHex != 0 ? nLen - 2 : nLen)
      expand(substbackref(sPre + sAligned + sSuf, sAligned, isHex))
    }
  else
    puts(sFoo)
  end
end

####### MAIN
ARGF.each_line{ |line| expand(line) }

# vim: expandtab ts=2 sw=2

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2010/07/31(土) 19:50:19|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0

連番展開スクリプト(ruby版ver.2)

前回から更新してhexの連番に対応しました~
やっぱ仕事柄16進数の展開は欲しかったので。
あと、何回も言ってるけど後方参照は個人的にかなり便利。
正直自分では最強の連番展開だと思ってますw

vimから呼び出す場合は.vimrcに
command! -range ExpandSerialNumber ,!ruby E:\bin\runtime\ExpandSerialNumber.rb
としておいて、
:ExpandSerialNumber
としてください。複数行選択して一気に展開もできるよ!
試しにこのへんを展開してみてくだちい。
[0-3] [4-5] [6-7] : [\1] [\3]
[00-3] [4-5] [6-7] : [\1] [\3]
[0x4-0x7] [0Xd-0Xf] [0xa-0x8] : [\1*2] [\3+1]
ってことで

#!/usr/bin/env ruby
###############################################
# expand serial number                        #
# syntax  : foo[nStart-nEnd][...]             #
# example : before                            #
#             0: foo[0-1][3-2]bar[1+\2][\1-1] #
#           after                             #
#             0: foo03bar4-1                  #
#             1: foo02bar3-1                  #
#             2: foo13bar40                   #
#             3: foo12bar30                   #
###############################################

####### SUB FUNCTIONS
### TO_S UNDER HEX
def to_hs(sFoo, isHex)
    return sprintf(isHex == 2 ? "%X" : isHex == 1 ? "%x" : "%d", sFoo)
end
### DIGIT ALIGNMENT
def aligndigit(sFoo, nLen)
    return sFoo = "0" * [nLen - sFoo.length, 0].max + sFoo
end
### DECREMENT INDEX OF BACK-REFERENCE
def decrefindex(sFoo)
  if (sFoo =~ /(.*?\[.*?\\)(\d)(.*?\].*)/)
    return $1 + ($2.to_i-1).to_s + decrefindex($3)
  end
  return sFoo
end
### SUBSTITUTE BACK-REFERENCE "\1"
def substbackref(sFoo, sBar, isHex)
  if (sFoo =~ /.*\[(.*?)\\1(.*?)\]/)
    sEvl = aligndigit(to_hs(eval($1 + (isHex != 0 ? "0x" + sBar : sBar.to_i.to_s) + $2), isHex), sBar.length)
    substbackref(sFoo.gsub!(/\[#{Regexp.escape($1 + '\1' + $2)}\]/, sEvl), sBar, isHex)
  end
  return decrefindex(sFoo)
end
### SERIAL NUMBER EXPANTION
def expand(sFoo)
  if (sFoo =~ /(.*?)\[\s*((?:0[xX])?[0-9a-fA-F]+)\s*-\s*((?:0[xX])?[0-9a-fA-F]+)\s*\](.*)/)
    sPre   = $1
    nStart = eval($2)
    nLen   = $2.length
    nEnd   = eval($3)
    sSuf   = $4
    if ($2[0..1] == "0X" && $3[0..1] == "0X")
      isHex = 2 
    elsif ($2[0..1] == "0x" && $3[0..1] == "0x")
      isHex = 1 
    else
      isHex = 0
    end
    # increment/decrement
    nStep = nStart < nEnd ? 1 : -1
    nStart.step(nEnd, nStep){ |i|
      sAligned = aligndigit(to_hs(i, isHex), isHex != 0 ? nLen - 2 : nLen)
      expand(substbackref(sPre + sAligned + sSuf, sAligned, isHex))
    }
  else
    puts(sFoo)
  end
end

####### MAIN
ARGF.each_line{ |line| expand(line) }

# vim: expandtab ts=2 sw=2

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2010/07/29(木) 23:33:33|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0

FreeType 2.4.0 (stable release)

FreeType2.4.0の正式版がリリースされていたのでビルドしてみました。
FreeType 2.4.0 (stable release)

テーマ:フリーソフト - ジャンル:コンピュータ

  1. 2010/07/13(火) 22:11:51|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0

finish cutting !


何を切っていたかというとスタイロフォーム
梅雨が明けて暑さが本格的になる前に、プッチの暑さ対策をせねば!
という事で現在鋭意製作中です。

ハムスターを飼っている方のブログで、スタイロフォームで作った箱に
保冷材を入れた冷却グッズを作っているのを見て僕もマネを…
ところが、なかなかキレイに切るのは難しい!
写真のパーツを組み立ててみると結構隙間が…
シリコンシーリングで隙間埋めなきゃないかな~
いや、敢えて隙間を残し、この隙間から漏れ出る冷気でじっくり冷やすという手もw

一応ペルチェ素子も購入済みだけど、自分には難易度が高くて放置…
でもいつか、ペルチェ素子+逆サーモでちゃんと温度管理したいなぁ。

テーマ:爬虫類 - ジャンル:ペット

  1. 2010/07/08(木) 23:04:55|
  2. ヘビ
  3. | トラックバック:0
  4. | コメント:0

FreeType 2.3.12 (development snapshot 2010-07-06 08:44:56 (GMT))

色々オプションを弄り過ぎて
適用されないフォントが出てきてしまったので
ビルドし直しました。報告をしてくださった676さんありがとうございます。
たぶん今度は大丈夫ですw
FreeType 2.3.12 (development snapshot 2010-07-06 08:44:56 (GMT))

テーマ:フリーソフト - ジャンル:コンピュータ

  1. 2010/07/07(水) 21:15:49|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0

FreeType 2.3.12 (development snapshot 2010-07-04 05:49:03 (GMT))

Helium版gdi++用のfreetype.dll
gitの最新リポジトリをLLVMでビルド。
前回に比べ、いくつかいらなそうなオプションを無効にしてビルドしています。
前回と比べておかしな点があれば教えていただけると助かります(あくまでも前回と比べて)
FreeType 2.3.12 (development snapshot 2010-07-04 05:49:03 (GMT))

あと、要望があれば
動作の保障はしませんがビルド用のスクリプトも公開します。

テーマ:フリーソフト - ジャンル:コンピュータ

  1. 2010/07/04(日) 22:46:10|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0

コンデジ買った~

Optio I-10を買いました!

PENTAX デジタルカメラ Optio I-10

画像がないのでamazonから拝借
※注 amazonアソシエイトなので嫌な人はクリックしないこと!



20100628_212412.jpg

20100628_212433.jpg
もともとデザインだけで選らんで性能は期待していませんでしたが、
やっぱり、う~んって感じです。まあ値段相応なのかな?
てかデジカメなんて初めてなんで善し悪しなんて分からないんですがw

多分俺の設定やら扱いやらが悪いんだろうな…
とりあえずプッチ撮ってみました。

このカメラ、ペットの顔検出が付いてるんだけど
ヘビも認識するんだろうか?
じっとしていてくれないからまだ登録できてないけど
今度挑戦してみよう~

テーマ:爬虫類 - ジャンル:ペット

  1. 2010/07/03(土) 10:27:07|
  2. ヘビ
  3. | トラックバック:0
  4. | コメント:0
home

プロフィール

Author:nocd5
30歳(男)
会社員

Last.fm



最近の記事

--年--月--日 (--)
スポンサーサイト
2010年07月31日 (土)
連番展開スクリプト(ruby版ver.2.1)
2010年07月29日 (木)
連番展開スクリプト(ruby版ver.2)
2010年07月13日 (火)
FreeType 2.4.0 (stable release)
2010年07月08日 (木)
finish cutting !
2010年07月07日 (水)
FreeType 2.3.12 (development snapshot 2010-07-06 08:44:56 (GMT))
2010年07月04日 (日)
FreeType 2.3.12 (development snapshot 2010-07-04 05:49:03 (GMT))
2010年07月03日 (土)
コンデジ買った~

カテゴリー

カレンダー

06 | 2010/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Amazonアソシエイト

RSSフィード

リンク

このブログをリンクに追加する

FC2ブログランキング

FC2Blog Ranking

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。