Hatena::Grouprubyist

たばさの RSSフィード

03/31(火) 2009

firefox速くなった

| firefox速くなった - たばさの を含むブックマーク はてなブックマーク - firefox速くなった - たばさの

というか普通になった。気がする。

いじってもいるのでどれのせいかはわからない。

目当ての本がなかったので

| 目当ての本がなかったので - たばさの を含むブックマーク はてなブックマーク - 目当ての本がなかったので - たばさの

On Lisp

On Lisp

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

を買う。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090331

03/30(月) 2009

クリック

| クリック - たばさの を含むブックマーク はてなブックマーク - クリック - たばさの

moveto[移動]のクリックがうまくいかないと思ったら押して動かして離すで出来た。

わかりにくい。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090330

03/29(日) 2009

visual c++ 2005 Express Edition への移行メモ

| visual c++ 2005 Express Edition への移行メモ - たばさの を含むブックマーク はてなブックマーク - visual c++ 2005 Express Edition への移行メモ - たばさの

filemvにて。


エラー、メモと参照url


>> cannot open include file 'afxres.h'
  * VS2008 Express Editionでビルドすると、.rcファイルで下記のエラーが発生します。
      .\ttxssh.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.

    本現象を回避するには、.rcファイルをテキストエディタで開き、afxres.hのincludeを削除し、新規に2行を追加します。

      - #include "afxres.h"
      + #include <windows.h>
      + #define IDC_STATIC -1

http://exth.net/~togabito/mtarchive/archives/2006/10/afxresh.html

http://ttssh2.sourceforge.jp/manual/ja/reference/develop.txt


エラーの内容は、fatal error C1083: include ファイルを開けません。'fstream.h': No such file or directoryというものです。エラーが出た部分は#include "fstream.h"というふうになっているのですが、この部分をいじっても解決されません。


fstream を include した場合は、以下のいずれかの変更が必要です。

std::ifstream std::ofstream と、fstream で定義されているクラス etc. に、std:: をつける。

ソースの上の方( #include <fstream> の次あたり)で
using namespace std;
と宣言する。

前者の法がおすすめです。

http://okwave.jp/qa3631340.html includeファイルが開けない -OKWave


ボタンなどのCObjectから派生したコントロールを基本クラスに持つ派生クラスを使ってないでしょうか?
その派生クラスでコピーコンストラクタやoperator=が定義されていないと、お尋ねのエラーが出た記憶があります。
もちろん、どこかで代入されてる箇所があるから必要なわけですが。
たぶん、関数の仮引数がポインタや参照ではなくて値渡しになってるとかですかね。


> ofstream getfnc(ofstream &ofs){ ...; return ofs; }
 =>ofstream &getfnc(ofstream &ofs){ ...; return ofs; }

http://d.hatena.ne.jp/twhs/20080526


 >>nocreate
 > ios::nocreate消した

fstream foo("foo.txt", ios::in);
if(!foo) {
  // ファイルが見つからないとき。
  }
else {
  // ファイルがみつかったとき;
} 

http://skeishi.web.fc2.com/dev-cpp/neko/neko.html


No.4660  Re:未解決の外部シンボル
発言者: 葉迩倭
発言日: 2007 05/12 19:43
 
無償版の場合、有償版ではデフォルトでリンクされるライブラリもすべてリンクされないので

#pragma comment( lib, "ws2_32.lib" )
#pragma comment( lib, "imm32.lib" )
#pragma comment( lib, "winmm.lib" )
#pragma comment( lib, "ole32.lib" )
#pragma comment( lib, "gdi32.lib" )
#pragma comment( lib, "user32.lib" )
#pragma comment( lib, "msacm32.lib" )
#pragma comment( lib, "shell32.lib" )
#pragma comment( lib, "comdlg32.lib" )
#pragma comment( lib, "advapi32.lib" )

ソースのどこかに上のリンク用の指定を記述してみてください。

http://www.twin-tail.jp/cgi-bin/program_bbs/treebbs.cgi?kako=1&log=4660


add this lib:  
  
1. Open project settings dialog  
  
2. switch to "Link"-> "Object/library modules" textbox  
  
3. comctl32.lib  



=> #pragma comment( lib, "comctl32.lib" )

http://www.eggheadcafe.com/forumarchives/platformsdksecurity/Dec2005/post24990196.asp


プロパティ?で
 MFC -- windows標準の~に変えた

 

typedef (WINAPI *zzz)(const HWND,LPCSTR ,LPSTR ,const DWORD);
 .\zip.cpp(16) : error C4430: 型指定子がありません - int と仮定しました。
           メモ: C++ は int を既定値としてサポートしていません
=> typedef DWORD (WINAPI *zzz)(const HWND,LPCSTR ,LPSTR ,const DWORD);
void ?

for(int i=0; ...){
}
for(i=0; ...){             // 未定義エラー。 int を付ける。
}

保留していた作業をやってみた。strcpyとか警告出るけどいちおうビルドできるようにはなったような。

というか、

Visual Studio 2005 Express Edition の提供を 2009 年 3 月 31 日に終了いたします。

http://www.microsoft.com/japan/msdn/vstudio/Express/

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090329

03/28(土) 2009

ファイルの書き出しがバグっぽいのでフックしてみる

| ファイルの書き出しがバグっぽいのでフックしてみる - たばさの を含むブックマーク はてなブックマーク - ファイルの書き出しがバグっぽいのでフックしてみる - たばさの


もとのソフトはtmail-original.batで呼ぶようにしてある。

tmail-hook.rb

#!ruby
#
# http://www.vector.co.jp/soft/win95/net/se076776.html
#    -fオプションで末尾が一文字欠けるバグ?の対処

#p ARGV
tmpflag=false
# temporary folder
tmp="c:\\tmp\\tmpfor_tmail#{Time.now.strftime"%y%m%d%H%M%S"}.txt"
result=ARGV.map{|i|
  i=~/^\"([^\"]*)/
  i=$1 if $&
  i=~/^-f=(.*)/
  if $&
    old=$1
    contents=File.readlines(old)*""
    # 末尾が空白文字
    if contents =~ /\s\z/
      i
    else
      tmpflag=true
      open(tmp,"w"){|f| f.puts contents,"\n"}
      "-f=#{tmp}"
    end
  else
    i
  end
}

# sleep 2
args=result.map{|i| "\"#{i}\""}*" "
puts cmd="tmail-original #{args}"
puts `#{cmd}`
`del #{tmp}` if tmpflag


なんかちがうかも

| なんかちがうかも - たばさの を含むブックマーク はてなブックマーク - なんかちがうかも - たばさの

AutoHotKeyを使ってWin-mで「コピペして編集してからメール」する。

うまくいかないときがある。よく分かってない。


cpmail.ahk

#m::                              ;Win+Mキーに割り当て
Send,^c 
app=notepad.exe
contents=c:\tmp\tmpmail.txt
cmd=%app% %contents%
Run,%cmd%
WinWait,"",,1
WinActivate,%app%
WinWait,"",,3
Send,^a
Send,^v
SetTimer,OnTimer,3000            ;指定サブルーチンを3秒ごとに実行されるようにする
return


OnTimer:                         ;タイマーに割り当てられるサブルーチンラベル
Process,Exist,%app%              ;指定プログラムが実行されているかを検出
If ErrorLevel=0                  ;実行されていない場合
{
    Run,tmail.bat  "ahk-tes" -f=%contents% ;mailするバッチ
    SetTimer, OnTimer, Off  
}
return                              ;タイマーサブルーチンの終了

参照

流行らせるページ跡地

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090328

03/25(水) 2009

win32ole ie 印刷するテスト

| win32ole ie 印刷するテスト - たばさの を含むブックマーク はてなブックマーク - win32ole ie 印刷するテスト - たばさの


#!ruby
require 'win32ole'
require 'Win32API'
require 'cgi'

class IE
  # init
  def initialize(v=true)
    @ie = WIN32OLE.new('InternetExplorer.Application')
    WIN32OLE.const_load(@ie)
    @ie.Visible = v  
    @wsh = WIN32OLE.new("Wscript.Shell")
  end
  
  def wait interval
    while @ie.busy
      sleep interval
    end
  end
  # HTTP request
  def request(url, interval=1)
    @ie.Navigate(url)
    wait interval
  end

  # get page source
  def getSrc
    src = ""
    wait 1
    @ie.Document.All.each do |item|
      if item.tagName.upcase == "HTML"
        src = "!! #{src}#{item.InnerText}\n"
      end
    end
    return src
  end

  # 
  def activate a
    @wsh.AppActivate a
    wait 1
  end
  # send key
  def sendKey(key, interval=0)
    @wsh.SendKeys(key)
    wait interval
  end
  def printdialog
    @ie.document.parentWindow.print
  end
  def print
    @ie.ExecWB( WIN32OLE::OLECMDID_PRINT, # 6
                WIN32OLE::OLECMDEXECOPT_DONTPROMPTUSER # 2
    wait 1
  end
  def quit
    @ie.quit
  end
end

ie = IE.new(true) # 
key = ARGV.shift || ""
ie.request("http://www.google.co.jp/search?q=#{CGI.escape(key)}")
sleep 5

print key,"," #,ie.getSrc
ie.print
# sleep 5
# ie.quit

参照

no title

no title

Internet Explorer で印刷

no title

google:OLECMDEXECOPT_DONTPROMPTUSER


修正: 定数が呼べなかったのは WIN32OLE.const_load(@ie) してなかったせい。IE.new(false) (IE非表示)にしてもエラーはでないような。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090325

03/24(火) 2009

win32ole 使ってみる

| win32ole 使ってみる - たばさの を含むブックマーク はてなブックマーク - win32ole 使ってみる - たばさの

ブラウザで開いてCtrl-a, Ctrl-cでコピー、メモ帳を開いてCtrl-vで貼り付け、保存。


wsh-test.rb

require 'win32ole'

url = ARGV.shift || "http://d.hatena.ne.jp/"
# 書き換える
txt = ARGV.shift || "c:\\temp\\tmp.txt" 
puts url
wsh = WIN32OLE.new("Wscript.Shell")
wsh.Run("firefox.exe #{url}",1,true)
# exit

sleep 5
wsh.SendKeys("^a")
p"^a"
sleep 1
wsh.SendKeys("^c")
p"^c"

sleep 2
# wsh2 = WIN32OLE.new("Wscript.Shell")
wsh.Run("notepad #{txt}")
sleep 2
wsh.SendKeys("^a")
sleep 2
wsh.SendKeys("^v")
sleep 2
wsh.SendKeys("^s")
sleep 2
`firefox #{txt}`

参照

> no title

> no title

> google:SendKeys

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090324

03/23(月) 2009

rinda の練習。

| rinda の練習。 - たばさの を含むブックマーク はてなブックマーク - rinda の練習。 - たばさの

参照 => http://www2a.biglobe.ne.jp/~seki/ruby/d208.html


consoleを三つ使う。

rinda-server.rbを動かしてからrinda-clock.rbを動かし、rinda-switch.rbで<enter>で時計を止めたり再開したりする。


rinda-server.rb


require 'rinda/tuplespace'
$ts = Rinda::TupleSpace.new
DRb.start_service('druby://localhost:12345', $ts)
puts DRb.uri
DRb.thread.join

rinda-clock.rb

require 'drb/drb'

ts_uri = ARGV.shift || 'druby://localhost:12345'
DRb.start_service
$ts = DRbObject.new_with_uri(ts_uri)

# 時計
Thread.start {
  while true
    print Time.now,"   \r" if $switch
    sleep 0.5
  end
}

# スイッチ切り替え
$switch=false
($switch=true; sleep 1; $switch=false) while $ts.read([1])


rinda-switch.rb

require 'drb/drb'

ts_uri = ARGV.shift || 'druby://localhost:12345'
DRb.start_service
$ts = DRbObject.new_with_uri(ts_uri)

prompt=">"
print prompt
while true
  gets
  $ts.write([1])
  print prompt
  gets
  $ts.take([1])
  print prompt
end

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090323

03/18(水) 2009

firefox3 bookmark backups json

| firefox3 bookmark backups json - たばさの を含むブックマーク はてなブックマーク - firefox3 bookmark backups json - たばさの

http://groups.google.com/group/webos-goodies/ simple-json.rbを使ってみる。


firefox-json.rb

#!ruby
require 'simple-json'
require 'nkf'
class String;def sjis;NKF::nkf('-s -m0',self);end;end

# 書き換える
path='..\bookmarkbackups\bookmarks-2009-03-17.json'
parser = JsonParser.new
json_string=File.readlines(path)*""
ruby_obj = parser.parse(json_string)
$bm=ruby_obj["children"][0]
$menu=$bm["children"]
def show n=nil
  case n
  when nil
    $menu.size.times{|n|a=$menu[n]; puts "#{n}: #{(a["title"] ||"").sjis} #{(a['uri'] ||"").sjis}" }
  when Integer
    a=$menu[n]; puts "#{n}: #{(a["title"] ||"").sjis} #{(a['uri'] ||"").sjis}"
  else
    $menu.size.times{|i|a=$menu[i]; puts "#{i}: #{(a["title"] ||"").sjis} #{(a['uri'] ||"").sjis}" if a["title"]=~/#{n}/i ||a["uri"]=~/#{n}/i  }
  end
end
def root
  $menu=$bm["children"]
  show
end
def cd num
  if $menu[num]["type"]=~/place-container/
    $menu=$menu[num]["children"]
    show
  else
    go num
  end
end
def go num
  puts `firefox #{$menu[num]["uri"]}`
  #show
end

#show
while 1
 print">"
 a=gets
 #p a
 puts eval(a)
end

コマンド

>cd 2
>root
>show 3
>show "ruby"
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090318

03/17(火) 2009

gmail inbox list表示

| gmail inbox list表示 - たばさの を含むブックマーク はてなブックマーク - gmail inbox list表示 - たばさの

gmail-check.rb

#!/usr/bin/env ruby
# 参考 http://blog.app2u.jp/index/ruby/ruby-gmail

require 'net/imap'
require 'nkf'
require'time'

class String
  def utf
    NKF::nkf('-u',self)
  end
  def sjis
    NKF::nkf('-s',self)
  end
end

id =''
pass =''


key =ARGV[0] || 'inbox' 
puts key

begin

  # GmailにIMAPで接続、ログインする
  @imap = Net::IMAP.new( 'imap.gmail.com', 993, true )
  @imap.login( id, pass ) # ID、パスワード
  @imap.examine( key )
  k =@imap.fetch(1..-1,'ENVELOPE')
  puts k.map{|i| a =Time.parse(i.attr["ENVELOPE"].date); [a.strftime("%Y-%m-%d %H:%M:%S"), i.attr["ENVELOPE"].subject.sjis,i.attr["ENVELOPE"].from[0].mailbox.sjis, "" ] }.sort.reverse

rescue

  p $! # 例外処理

ensure

  # 切断する
  @imap.logout
  @imap.disconnect
  # puts"(end)"

end
>gmail-check.rb
inbox
2009-03-16 13:17:23
SourceForge.JP: SF.JP キャリア開始/フォーラム,Wiki機能変更他
sf-admin

2009-01-23 02:01:20
SourceForge.JP サイト更新情報: AdSense を使用可能に、他
sf-admin



google:require 'net/imap'


2009/04/03 改良

gmail-check.rb

#!/usr/bin/env ruby
# http://rubyist.g.hatena.ne.jp/hatecha/
# cf. http://blog.app2u.jp/index/ruby/ruby-gmail
#     http://blog.tomatomax.net/archives/2355

require 'net/imap'
require 'nkf'
require 'pp'
require 'time'
require 'optparse'
opt = OptionParser.new
opt.on('-c') {|v| $checkonly=true }
opt.parse!(ARGV)

class String
  def m_utf
    NKF::nkf('-u -m0',self)
  end
  def m_sjis
    NKF::nkf('-s -m0',self)
  end
  def utf
    NKF::nkf('-u',self)
  end
  def sjis
    NKF::nkf('-s',self)
  end
end

class Net::IMAP::Envelope
  def fromStr
    s=self
    "#{(s.from[0].name||"").sjis} #{s.from[0].mailbox.sjis}@#{s.from[0].host.sjis}"
  end
end

class MyGmail
  attr_accessor :envelopes,:imap
  def initialize
    # GmailにIMAPで接続、ログインする
    port=993
    usessl=true
    @imap = Net::IMAP.new( 'imap.gmail.com', port, usessl )
  end
  def login(id=@id, pass=@pass)
    @id=id
    @pass=pass
    @imap.login( id, pass ) # ID、パスワード
  end
  def setkey key=@key
    @key=key
    @imap.examine( key )
  end
  def fetch max=20, min=1
    @mails=@imap.fetch(min..max,'ENVELOPE')
    @envelopes=@mails.map{|i|
      s= i.attr["ENVELOPE"]
      { :date, Time.parse(s.date).strftime("%Y-%m-%d %H:%M:%S"),
        :subject, s.subject.sjis,
        :from, s.fromStr,
        :messageNo, i.seqno,
        :message_id, s.message_id,
        :all, i
      }
    }
  end
  def check
    old=@envelopes
   # @imap.logout
    tmp=@key
    self.setkey "inbox"
    self.setkey tmp
    self.fetch
    if old != @envelopes
      printf "%+d\n",@envelopes.size - old.size
      @envelopes.each{|i|
        self.show i[:messageNo] if [] == old.select{|j| j[:message_id] ==i[:message_id]}
      }
    end
    @envelopes.size - old.size
  end
  def cd folder="inbox"
    puts folder
    folder="inbox" if folder.chomp=="~"
    self.setkey folder
    self.fetch
  end
  def show num=nil
    self.getNo num if num != nil
    if @mail
  # p @envelope,@envelope.class
      tmp= @envelope.attr["ENVELOPE"]
      puts "message_id: #{tmp.message_id}"
      puts "from: #{tmp.fromStr}"
      puts "subject: #{tmp.subject.sjis}"
      puts
      puts @body
    else
      self.list
    end
  end
  def list
    @envelopes.sort_by{|i|i[:date]}.reverse.each{|i|print "#{format"%2d",i[:messageNo]}:#{i[:date]} #{i[:subject]} /#{i[:from]}"; puts}
  end
  def detail num=nil
    self.getNo num if num != nil
    @envelope.each{|i| puts "#{i}".sjis}
    puts @header,@body
  end
  def getNo num
    @mail=@imap.fetch(num, "RFC822")[0].attr["RFC822"].sjis
    @envelope=@imap.fetch(num,'ENVELOPE')[0]
   # @envelope
    if @mail
      @mail=~/(.*)\r\n\r\n(.*)/m
      @header,@body=$1,$2
    end
    @body
  end
  def noop
    @imap.noop
  end
  def quit
    # 切断する
    @imap.logout
    @imap.disconnect
  end
end

def help
  puts 'help, $show, $getNo 3, $detail, $cd "inbox", $fetch [max, min], $check ... '
end

def start mygmail,mails,key
  mygmail=MyGmail.new
  mygmail.login $id,$pass
  mygmail.setkey key
  mails=mygmail.fetch
  [mygmail,mails]
end

class NilClass
  def name
    ""
  end
end

# gmail address と password
id=''
pass=''


key=ARGV[0] || 'inbox' 
puts key


mygmail=""
mails=""
mygmail,mails = start mygmail,mails,key

if $checkonly
  mygmail.show
  loop{
    print">"
    mygmail.check
    10.times{ 24.times{sleep 5; print"\r",Time.now }; mygmail.noop; }
  }
  exit
end


while 1
  begin
    print">"
    gets

    $_.sub!(/^\$/){"mygmail."}
    # help
    if $_=~/^help/
      help
    elsif $_=~/^reset/
      mygmail,mails = start mygmail,mails,key
    elsif $_=~/^$/
      $res=mygmail.noop
      mygmail.list
    # message No
    elsif $_.chomp=~/^\d+\z/
      mygmail.show $_.to_i
    # eval
    else
      #p $_
      res=eval($_)
      # puts res if not res
    end
    print"#{$res.name}"
  rescue
    p $! # 例外処理
  ensure
    # puts"(end)"
  end
end

gmail-check.rb -c」でループ:

  2分ごとにログアウト防止noop、20分ごとにメールチェック。

  新着があれば表示。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090317

03/15(日) 2009

美人時計

| 美人時計 - たばさの を含むブックマーク はてなブックマーク - 美人時計 - たばさの

document.body.appendChild(bijinImg);などと某greasemonkeyいじっていたら案の定というか、アクセスできなくなっている。

画像ファイルの命名が変わったようだ。その辺はレベルによっては並み居るプチgeekがハックしそうだが。


しかしまあ改造ランダム表示アプリがなくても、一分おきに確実にアクセスがあるというのはけっこうな負荷なんだろうか。うまいことずらす仕組みはあるのかな?


あ、プチとか言うと馬鹿にしたみたいだ。リアルgeekなら美人時計なんて使わずにリアル美人秘書をはべらせるんだと思います。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090315

03/11(水) 2009

リファレンスマニュアル ほぼ読んだ

| リファレンスマニュアル ほぼ読んだ - たばさの を含むブックマーク はてなブックマーク - リファレンスマニュアル ほぼ読んだ - たばさの

流し読み。盛りだくさんだ。

はてブ

はてブ - たばさの を含むブックマーク はてなブックマーク - はてブ - たばさの

rubyなどの適当な人気記事をブクマしてるidを大量に選んでRSSを足して使っている。

ノイズは多いけど暇つぶし用に。

proximitronで適当にブロックする。

gigazineとか。編集部体制らしいが署名がないのが気持ち悪い。区別しにくく広告記事もあるということだし。(どこかで読んだものの焼き直しも多いイメージ。署名があれば記者で切り捨てるか判断できるんだが。そうしたくない理由があるんでしょう。)

そのへんもrubyでできそうなのでやろうかな。



と思ったら毎日新聞英文サイト変態記事事件についての記事もある

http://gigazine.net/index.php?/news/comments/20080721_mdn_mainichi_jp/

そういうのは自分のとこがちゃんとしてからじゃないかなあ。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090311

03/08(日) 2009

リファレンス logger

| リファレンス logger - たばさの を含むブックマーク はてなブックマーク - リファレンス logger - たばさの

テスト。

require 'logger'
logger = Logger.new('foo.log', 3, 10)
logger.level =Logger::DEBUG
100.times{|i|logger.debug("Created logger#{i}");p i}

ファイルにしたら妙に遅い。



追記:

長さ制限をゆるくしたらましになった。

logger-tes.rb

require 'logger'
logger = Logger.new(STDOUT)
logger.level =Logger::DEBUG
n=10
n.times{|i|logger.debug("Created logger#{i}");p i}
# logger.close

logger = Logger.new('foo.log', 3, 1000)
n.times{|i|logger.debug("Created logger#{i}");p i}

logfile=open('logtes.txt',"w")
n.times{|i|logfile.puts("Created logger#{i}");p i}
logfile.close
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090308

03/06(金) 2009

hpricot

| hpricot - たばさの を含むブックマーク はてなブックマーク - hpricot - たばさの

Hpricot(open(f))

これは閉じてくれるのかな。とりあえずテスト。

ruby1.8.6

irb(main):017:0> def test
irb(main):018:1>   f="test.rb"
irb(main):019:1>   a0=Time.now
irb(main):020:1>   10000.times{Hpricot(open(f)).search("title")}
irb(main):021:1>   a1=Time.now
irb(main):022:1>   10000.times{Hpricot(File.readlines(f)*"").search("title")}
irb(main):023:1>   a2=Time.now
irb(main):024:1>   puts "f:#{a1-a0}, hpr:#{a2-a1}"
irb(main):025:1> end
=> nil
irb(main):026:0> 5.times{test}
f:31.219, hpr:31.562
f:30.141, hpr:34.547
f:55.515, hpr:29.25
f:29.875, hpr:37.906
f:38.141, hpr:37.203
=> 5

しかし1.9.1ではgem install hpricotはできたが実行時エラー。

検索してwhy-hpricotというのがあるらしいがインストール時でエラー。


ということでhtmlのタイトルを表示する。

html_title.bat

@echo off
ruby -x "%~f0" %*
goto :EOF

#!ruby -Ks
#---------------ruby script starts here
require'nkf'
require 'optparse'
require 'hpricot'

opt = OptionParser.new
opt.on('-k val') {|v| $key=v}
opt.parse!(ARGV)


d=[]

def s da
  NKF::nkf('-s -m0',da.to_s )
end

def load file
  begin
    dat=Hpricot(open(file))
    title=dat.search("title").inner_text
    word="#{title} :#{file}"
    return if ($key && (not (word =~ /#{$key}/)))
    puts word 
  rescue Exception => e
    puts "#{e} [#{file}]"
  end
end

ARGV.each{|f|
  load f
}

#---------------ruby script ends here
__END__
:EOF
> html_title.bat *.htm*
タイトル :file.htm
タイトル2 :file2.htm

など。おそい。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090306

03/05(木) 2009

timer

| timer - たばさの を含むブックマーク はてなブックマーク - timer - たばさの

書式は

ruby alert-ff.rb 12

=> 12秒後

ruby alert-ff.rb 02:01:00

=> 2時間1分後


alert-ff.rb

#!ruby -Ks
require'cgi'

mes="時間です!"
st=Time.now
plus=ARGV[0].to_i
plus=(Time.parse ARGV[0])-(Time.parse "00:00:00") if ARGV[0]=~/:/
tim=st+plus
puts "from\t#{st}","to\t#{tim}"
while (n=Time.now) <tim
  v=(tim-n)/4*3+1
  #p v
  sleep v
end
url="http://intermezzo.cool.ne.jp/report/Lupin/R3_temp.swf?inputStr="+
     CGI.escape(mes)
puts `firefox #{url}`

Win32OLE 活用法 【第 6 回】をやってたら

| Win32OLE 活用法 【第 6 回】をやってたら - たばさの を含むブックマーク はてなブックマーク - Win32OLE 活用法 【第 6 回】をやってたら - たばさの

動かない(urlが消えてる)ので

google:Ajax を使った郵便番号検索のページを表示

などで検索してなおした。

存在しない郵便番号のときにおかしいので取得の前に文字列を消すなどした。


zip_com.rb

# http://jp.rubyist.net/magazine/?0008-Win32OLE
require 'win32ole'

ie = WIN32OLE.new("InternetExplorer.Application")
ie.Navigate "http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html"

ie.Visible = true

while ie.Busy == true
  sleep 1
end
$preflist=ie.Document.getElementByID("pref").innerText.split

def search ie,v
  zip = ie.Document.getElementByID("zip")
  boxs=%w(pref addr)
  boxs.each do |name|
    ie.Document.getElementByID(name).Value=""
  end
  zip.Value = v
  zip.FireEvent("onkeyup")
  sleep 1
  puts v
  boxs.each do |name|
    val=ie.Document.getElementByID(name).Value
    break if val==""
    sleep 0.2
    if name=="pref"
      puts "  #{name} #{$preflist[val.to_i]}"
    else 
      puts "  #{name} #{val}"
    end
  end
end
# p ie.Document.getElementByID("pref").innerText
#p ie.ole_methods
#exit

begin
  loop{
    print">"
    a=gets
    break if not a
    search ie,a.chomp
  }
ensure
  ie.Quit
end
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090305

03/02(月) 2009

win32ole

| win32ole - たばさの を含むブックマーク はてなブックマーク - win32ole - たばさの

openofficeを使おうとして、google:com.sun.star.ServiceManagerなどで検索。

http://www.ffront.jp/diary/24 の後半を以下のようにして使ってみた。*1

     
     ie.Quit

    end
   module_function :screen_capture
end   

url=ARGV[0]||"http://b.hatena.ne.jp/"
Sample03.screen_capture("test.bmp", url )

画像が乱れた。?

f:id:hatecha:20090302124640j:image


24ビットじゃないからかな。あれこれ検索。

しかし途中でずれる乱れ方からして違いそうだと思い直し。

# open(filename, "w") 
  open(filename, "wb") 

書き込みをバイナリーモードにして解決。

*1:openofficeは関係なくなってるんですが

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090302
カレンダー
<< 2009/03 >>
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
archive Error : RSSが取得できませんでした。