2008-06-27

Making the service a bit more robust

Windows Services series Update 2008-6-27
Having got the service up and running I wanted to be able to test the new service before running it as a service. I also needed to make it a bit more robust. This is a polled service, so every so often it will run and do something. I had my first version up and running it died but randomly after a few days (I guessed this was due to occasional problems in the guts of it eg FTP failures).
To be able to debug it easily I broke it into two parts. One file has all the guts of the service:

class ProcessFiles

def processOnce()
sleep(3)
end

end

This allows the code to be testing in a simple wrapper and run from the command line:

require 'process_files'

s = ProcessFiles.new()
while true
s.processOnce
puts "Slept for #{sleep 10} seconds"
end


Alternatively here is the a sample daemon code taken from the demo plus I added a timestamp and a comment on close:

LOG_FILE = 'C:\\test.log'
require 'process_files'


begin
require 'win32/daemon'

include Win32

class DemoDaemon < Daemon

def service_main
my_service
= ProcessFiles.new()
while running?
begin
my_service.processOnce
rescue Exception => err
File.open(LOG_FILE, "a"){ |f| f.puts "Service had a failure at #{Time.now} error=#{err} " }

sleep 10
end
sleep 3
File.open("c:\\test.log", "a"){ |f| f.puts "Service is running #{Time.now}" }
end
end

def service_stop
File.open("c:\\test.log", "a"){ |f| f.puts "***Service stopped #{
Time.now}" }
exit!
end
end

DemoDaemon.mainloop
rescue Exception => err
File.open(LOG_FILE,'a+'){ |f| f.puts " ***Daemon failure #{Time.now} err=#{err} " }
raise
end

2008-06-10

Deploying a Windows Service

Just to say I have used InnoSetup in the past and it is again useful for packaging up all the files you need.  See also the Ruby on Windows blog.

2008-06-09

Lookback Options payout

A look back option allows you to get a payout assuming perfect hindsight.  These have been used by Fung and Hsieg as a proxy for a perfect trend follower.  The payout function for an asset that varies over time is:

Lookback Option 2008-06-09_1

Lookback Option 2008-06-09_2

Lookback Option 2008-06-09_3

Lookback Option 2008-06-09_4

Lookback Option 2008-06-09_5

spikeyIcon

2008-06-06

Changing blogging editors

Just giving Windows Live Writer a try out as I had problems with scribefire as I was trying to round trip edits.  So far so good.

2008-06-04

Getting the load path right for Windows

I used a startup for my daemon like this

c:\bin\ruby\rubyw.exe c:\mydir\mydaemon.rb


However it didn't work as the default load path was not set up correctly and so it couldn't find the library files however this does work:

c:\bin\ruby\rubyw.exe -C c:\mydir mydaemon.rb

The -C option changing the working directory and so I could get my Ruby service running quietly in the background.

I will leave for another day the problem of getting spaces in the directory path - for the moment I just used a path without spaces.