<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2844838271958082603</id><updated>2011-12-16T13:26:48.782-05:00</updated><category term='ruby'/><category term='finite state machine'/><category term='snmp'/><category term='golem'/><category term='ws-management'/><category term='python xml ImportError'/><category term='git'/><category term='fsm'/><category term='rails'/><category term='jasperreports soap php'/><category term='openwsman'/><title type='text'>sneakybits</title><subtitle type='html'>................ ................. ......... ...... ..... .... ... .. . .    .</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-8600958628393600809</id><published>2009-09-17T11:21:00.001-04:00</published><updated>2009-09-17T11:22:42.765-04:00</updated><title type='text'>Moved to Tumblr</title><content type='html'>--&gt; &lt;a href="http://sneakybits.tumblr.com/"&gt;http://sneakybits.tumblr.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-8600958628393600809?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/8600958628393600809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=8600958628393600809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/8600958628393600809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/8600958628393600809'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2009/09/moved-to-tumblr.html' title='Moved to Tumblr'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-3819401926208637579</id><published>2009-05-22T10:51:00.003-04:00</published><updated>2009-05-22T10:54:56.524-04:00</updated><title type='text'>Ruby-Processing and java.lang.ExceptionInInitializerError</title><content type='html'>&lt;pre name="code" class="bash"&gt;
rp5 run samples/jwishy.rb 
RubyGlobal.java:135:in `createGlobals': java.lang.ExceptionInInitializerError
    from Ruby.java:939:in `init'
    from Ruby.java:172:in `newInstance'
    from Main.java:199:in `run'
    from Main.java:110:in `run'
    from Main.java:94:in `main'
&lt;/pre&gt;

... the culprit was the alternative version of the JRE I was using (OpenJDK). After swtiching to the standard Sun JDK everything worked fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-3819401926208637579?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/3819401926208637579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=3819401926208637579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3819401926208637579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3819401926208637579'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2009/05/ruby-processing-and-javalangexceptionin.html' title='Ruby-Processing and java.lang.ExceptionInInitializerError'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-3049759265601856752</id><published>2009-04-18T00:06:00.012-04:00</published><updated>2009-04-23T15:01:20.712-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='finite state machine'/><category scheme='http://www.blogger.com/atom/ns#' term='fsm'/><category scheme='http://www.blogger.com/atom/ns#' term='golem'/><title type='text'>Golem Statemachine</title><content type='html'>&lt;p&gt;Following a frustrating week with the &lt;a href="http://github.com/rubyist/aasm/tree/master"&gt;acts_as_state_machine/AASM&lt;/a&gt; plugin, I ended up writing my own finite state machine library for Ruby.&lt;/p&gt;

&lt;p&gt;It's called &lt;span style="font-weight:bold;"&gt;Golem&lt;/span&gt;, and it's now on Github, here: &lt;a href="http://github.com/zuk/golem_statemachine/tree/master"&gt;http://github.com/zuk/golem_statemachine/tree/master&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code is cleaner than AASM's (or at least I think so), which should make debugging less frustrating. There's also a nice DSL for defining the state machine.&lt;/p&gt;

&lt;p&gt;For example, to implement this statemachine:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cloud.github.com/downloads/zuk/golem_statemachine/monster_4_UML.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 329px; height: 94px;" src="http://cloud.github.com/downloads/zuk/golem_statemachine/monster_4_UML.png" border="0" alt="" /&gt;&lt;/a&gt;

&lt;p&gt;You would define it like so:&lt;/p&gt;

&lt;pre name="code" class="ruby"&gt;
define_statemachine do
  initial_state :HUNGRY

  state :HUNGRY do
    on :eat do
      transition :to =&gt; :SATIATED, :if =&gt; :likes?
      transition do
        action do |monster| 
          puts "#{monster} says BLAH!!"
        end
      end
    end
  end

  state :SATIATED do
    enter do |monster|
      puts "#{monster} says BURP!!!"
    end
  end
end
&lt;/pre&gt;

&lt;p&gt;The state machine definition goes inside your Ruby class (or ActiveRecord model), endowing the class with finite state machine behavior:&lt;/p&gt;


&lt;pre name="code" class="ruby"&gt;
require 'golem'

class Monster
  include Golem

  attr_accessor :state

  def initialize(name)
    @name = name
  end

  def to_s
    @name
  end

  def likes?(food)
    food.kind_of?(String)
  end

  define_statemachine do
    # ...
  end
end

m = Monster.new("Stringosaurus")
puts m.current_state # ==&gt; :HUNGRY
m.eat(12345)         # ==&gt; "Stringosaurus says BLAH!!"
puts m.current_state # ==&gt; :HUNGRY
m.eat("abcde")       # ==&gt; "Stringosaurus says BURP!!"
puts m.current_state # ==&gt; :SATIATED
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-3049759265601856752?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/3049759265601856752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=3049759265601856752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3049759265601856752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3049759265601856752'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2009/04/golem-statemachine.html' title='Golem Statemachine'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-3638330742271083404</id><published>2009-02-09T17:50:00.005-05:00</published><updated>2009-04-18T00:20:16.184-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python xml ImportError'/><title type='text'>python-xml woes</title><content type='html'>Python ImportErrors like the following (stemming from the recent deprecation of the python-xml library in Ubuntu):

&lt;pre&gt;
Failed to load application: No module named ext
&lt;/pre&gt;

... can be easily addressed by:

&lt;pre&gt;
sudo apt-get install python-xml
export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.5/site-packages/oldxml
&lt;/pre&gt;

This caused me a good few hours' grief earlier today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-3638330742271083404?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/3638330742271083404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=3638330742271083404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3638330742271083404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3638330742271083404'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2009/02/python-xml-woes.html' title='python-xml woes'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-1512262216987724271</id><published>2008-11-12T13:32:00.011-05:00</published><updated>2009-04-18T00:20:30.496-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jasperreports soap php'/><title type='text'>A PHP Client for JasperServer (via SOAP)</title><content type='html'>&lt;p&gt;I needed a PHP version of my &lt;a href="http://github.com/gunark/jasperserver-client/tree"&gt;Ruby SOAP client for JaserpServer&lt;/a&gt;.&lt;p&gt;
&lt;p style="font-size: 200%"&gt;Here it is: &lt;a href="http://gist.github.com/26205"&gt;http://gist.github.com/26205&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usage (this runs the report unit '/my_report' and returns the result in PDF format):&lt;/p&gt;

&lt;pre name="code" class="php"&gt; 
  $jasper_url = "http://jasper.example.com/jasperserver/services/repository";
  $jasper_username = "jasperadmin";
  $jasper_password = "topsecret";


  $client = new JasperClient($jasper_url, $jasper_username, $jasper_password);

  $report_unit = "/my_report";
  $report_format = "PDF";
  $report_params = array('foo' =&gt; 'bar', 'fruit' =&gt; 'apple');
 
  $result = $client-&gt;requestReport($report_unit, $report_format,$report_params);

  header('Content-type: application/pdf');
  echo $result;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-1512262216987724271?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/1512262216987724271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=1512262216987724271' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/1512262216987724271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/1512262216987724271'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2008/11/php-client-for-jasperserver-via-soap.html' title='A PHP Client for JasperServer (via SOAP)'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-3278193496005705322</id><published>2008-10-23T10:03:00.007-04:00</published><updated>2009-04-18T00:19:28.676-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>gittidy</title><content type='html'>&lt;p&gt;I had my first run in with git today. After trying to sync an out-of-whack git-svn local repo with github things turned ugly:&lt;/p&gt;

&lt;pre&gt;
git push
&lt;span style="color: rgb(51, 51, 255);"&gt;error: remote 'refs/heads/master' is not a strict subset of local ref 'refs/heads/master'. maybe you are not up-to-date and need to pull first?&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;error: failed to push to 'git@github.com:gunark/rubycas-server.git'&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;Turns out that remotely deleting the master branch on github (as described &lt;a href="http://github.com/guides/remove-a-remote-branch"&gt;here&lt;/a&gt;) and then recreating it fixed the problem:&lt;/p&gt;

&lt;pre&gt;
git push origin :heads/master
&lt;span style="color: rgb(51, 51, 255);"&gt;deleting 'refs/heads/master'&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;Everything up-to-date&lt;/span&gt;
git push origin master
&lt;span style="color: rgb(51, 51, 255);"&gt;updating 'refs/heads/master'&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;  from 0000000000000000000000000000000000000000&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;  to   6dd64b1b025c324d0b287805d6c18183b9f20b9e&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;Generating pack...&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;Done counting 1395 objects.&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;Deltifying 1395 objects...&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt; 100% (1395/1395) done&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;Writing 1395 objects...&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt; 100% (1395/1395) done&lt;/span&gt;
&lt;span style="color: rgb(51, 51, 255);"&gt;Total 1395 (delta 960), reused 0 (delta 0)&lt;/span&gt;
&lt;/pre&gt;

&lt;p&gt;Yay&lt;/p&gt;

&lt;p&gt;There was some weirdness in the github project page after this, but performing another commit and push seems to have taken things back to normal.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-3278193496005705322?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/3278193496005705322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=3278193496005705322' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3278193496005705322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/3278193496005705322'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2008/10/gittidy.html' title='gittidy'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2844838271958082603.post-2714594591082928134</id><published>2008-10-15T12:13:00.026-04:00</published><updated>2008-10-30T09:59:10.639-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ws-management'/><category scheme='http://www.blogger.com/atom/ns#' term='openwsman'/><category scheme='http://www.blogger.com/atom/ns#' term='snmp'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>WS-Management + Openwsman + openSUSE + Ruby</title><content type='html'>&lt;p&gt;Yet another failed attempt at using SNMP for monitoring application-level services led me to &lt;a href="http://en.wikipedia.org/wiki/WS-Management"&gt;WS-Management&lt;/a&gt;, an HTTP/SOAP-based protocol meant to replace SNMP. DS-Management might not be the first protocol to attempt usurping SNMP, but this one looks promising. Widespread support and implementation is claimed by Microsoft, and a reasonably mature open-source implementation -- &lt;a href="http://www.openwsman.org/"&gt;Openwsman&lt;/a&gt; -- is sponsored by SuSE.&lt;/p&gt;

&lt;p&gt;Documentation for Openwsman unfortunately seems rather lacking. It took some poking around, but I was able to get a basic client-server session going under openSUSE 10.3. Here's how:&lt;/p&gt;

&lt;p&gt;First, add the development channel for openwsman and install the openwsman packages:&lt;/p&gt;

&lt;pre name="code" class="bash:nocontrols"&gt;
sudo smart channel --add http://download.opensuse.org/repositories/home:/kwk:/Management/openSUSE_10.3/home:kwk:Management.repo
sudo smart update home_kwk_Management
sudo smart install openwsman openwsman-client openwsman-server wsmancli openwsman-yast
&lt;/pre&gt;

&lt;blockquote&gt;If you run into PGP key problems, try disabling PGP key checking first:

&lt;pre name="code" class="bash:nocontrols:nogutter"&gt;
smart config --set rpm-check-signatures=false
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;The &lt;span style="font-family:monospace;"&gt;openwsman-server&lt;/span&gt; package installs &lt;span style="font-family:monospace;"&gt;openwsmand&lt;/span&gt; -- a stand-alone server providing WS-Management services. We'll need to configure the authentication system before running the server. I was unable to get things going with the default Basic authentication, but Digest worked for me:&lt;/p&gt;

&lt;pre name="code" class="bash:nocontrols:nogutter"&gt;
htdigest2 -c /etc/openwsman/digest_auth.passwd OPENWSMAN admin
Adding password for admin in realm OPENWSMAN.
New password: test
Re-type new password: test
&lt;/pre&gt;

&lt;p&gt;Now edit the Openwsman config file to use Digest authentication. The config file is under &lt;span style="font-family:monospace;"&gt;/etc/openwsman/openwsman.conf&lt;/span&gt; and should be altered to look something like this (note that we've uncommented the 'digest_password_file' option):&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
[server]
port = 8889
#ssl_port = 8888
ssl_cert_file = /etc/openwsman/servercert.pem
ssl_key_file = /etc/openwsman/serverkey.pem
digest_password_file = /etc/openwsman/digest_auth.passwd
#basic_password_file = /etc/openwsman/simple_auth.passwd

min_threads = 4
max_threads = 10

#use_digest is OBSOLETED, see below.

#
# Authentication backend for BASIC authentication. Default is to read a configuration file defined with 'basic_password_file'
#

basic_authenticator = libwsman_pam_auth.so
basic_authenticator_arg = openwsman


[client]
port = 8889
agent = openwsman 0.6.0

#
# settings for the CIM plugin
#

[cim]
default_cim_namespace = root/cimv2

# The following are in part fake namespaces for some publicly available CIM implementations.
vendor_namespaces = OpenWBEM=http://schema.openwbem.org/wbem/wscim/1/cim-schema/2,Linux=http://sblim.sf.net/wbem/wscim/1/cim-schema/2,OMC=http://schema.omc-project.org/wbem/wscim/1/cim-schema/2

# CIMOM host, default is localhost
# host = localhost

# CIMOM port, default is 5988
# port = 5988
&lt;/pre&gt;

&lt;p&gt;Okay, now we can run the server:&lt;/p&gt;

&lt;pre name="code" class="bash:nocontrols:nogutter"&gt;sudo /usr/sbin/openwsmand -d&lt;/pre&gt;

&lt;p&gt;We can now connect to the server using a few simple Ruby commands. Open an interactive ruby session (using &lt;code&gt;irb&lt;/code&gt;) and enter the following:&lt;/p&gt;

&lt;pre name="code" class="ruby"&gt;
require 'rwsman'
client = WsMan::Client.new('http', 'localhost', 8889, '/wsman', 'admin', 'test')
client_opt = WsMan::ClientOption.new
identify = client.identify(client_opt)
puts identify.rawxml
&lt;/pre&gt;

If everything worked, you should get a response that looks something like this:

&lt;pre name="code" class="xml:nocontrols"&gt;

&lt;s:envelope s="http://www.w3.org/2003/05/soap-envelope" wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd"&gt;
 &lt;s:header&gt;
 &lt;s:body&gt;
   &lt;wsmid:identifyresponse&gt;
     &lt;wsmid:protocolversion&gt;http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd&lt;/wsmid:protocolversion&gt;
     &lt;wsmid:productvendor&gt;Openwsman Project&lt;/wsmid:productvendor&gt;
     &lt;wsmid:productversion&gt;1.5.9&lt;/wsmid:productversion&gt;
   &lt;/wsmid:identifyresponse&gt;
 &lt;/s:body&gt;
&lt;/s:header&gt;
&lt;/s:envelope&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;identify&lt;/code&gt; object returned by the client also exposes &lt;code&gt;product_version&lt;/code&gt;, &lt;code&gt;protocol_version&lt;/code&gt;, and &lt;code&gt;product_vendor&lt;/code&gt; methods that return their respective values from the parsed XML data.&lt;/p&gt;

&lt;p&gt;With the YAST plugin installed, Openwsman can access diagnostic information about your SuSE system. For example try this:&lt;/p&gt;

&lt;pre name="code" class="ruby"&gt;
client_opt.property_add('ycp', '{ import "SuSERelease"; return SuSERelease::ReleaseInformation("/"); }' )
result = client.invoke('http://schema.opensuse.org/YaST/wsman-schema/10-3/YCP', 'eval', client_opt)
puts "SUSE Version: #{result.body}"
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2844838271958082603-2714594591082928134?l=sneakybits.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sneakybits.blogspot.com/feeds/2714594591082928134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2844838271958082603&amp;postID=2714594591082928134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/2714594591082928134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2844838271958082603/posts/default/2714594591082928134'/><link rel='alternate' type='text/html' href='http://sneakybits.blogspot.com/2008/10/ds-management-opensuse.html' title='WS-Management + Openwsman + openSUSE + Ruby'/><author><name>Matt Zukowski</name><uri>http://www.blogger.com/profile/01256897728087105530</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
