[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ANN: Second drop of RubyCLR bridge

John Lam

2/21/2006 1:43:00 AM

This is a much more complete drop of the bridge:
http://www.iu.../articles/2006/02/20/second-drop-...

To show off its features, I've built a non-trivial all-Ruby Windows Forms
2.0 RSS Reader application that's in the distribution. It's been tested with
the RTM bits of .NET FX 2.0, and Ruby 1.8.2.

Comments & questions more than welcome!

Cheers,
-John
http://www.iu...
7 Answers

Tanner Burson

2/21/2006 2:05:00 AM

0

On 2/20/06, John Lam <drjflam@gmail.com> wrote:
> This is a much more complete drop of the bridge:
> http://www.iu.../articles/2006/02/20/second-drop-...
>
> To show off its features, I've built a non-trivial all-Ruby Windows Forms
> 2.0 RSS Reader application that's in the distribution. It's been tested with
> the RTM bits of .NET FX 2.0, and Ruby 1.8.2.
>
> Comments & questions more than welcome!
>
> Cheers,
> -John
> http://www.iu...
>
>

Any idea if this will, or will be capable of working with mono?

--
===Tanner Burson===
tanner.burson@gmail.com
http://tanner... <---Might even work one day...


John Lam

2/21/2006 2:09:00 AM

0

>> Any idea if this will, or will be capable of working with mono?

I haven't had any cycles to look at mono's implementation of the
DynamicMethod API. If they have feature parity there, then it shouldn't be
too hard. That said, that's a secondary goal at the moment, I really want to
get it to work first on .NET 2.0, and then do a port to mono. Side-by-side
dev would eat up more cycles than I have at the moment.

That said, anyone out there want to work in parallel on a mono port?

-John
http://www.iu...

Tanner Burson

2/21/2006 4:03:00 AM

0

On 2/20/06, John Lam <drjflam@gmail.com> wrote:
>
> >> Any idea if this will, or will be capable of working with mono?
>
> I haven't had any cycles to look at mono's implementation of the
> DynamicMethod API. If they have feature parity there, then it shouldn't be
> too hard. That said, that's a secondary goal at the moment, I really want
> to
> get it to work first on .NET 2.0, and then do a port to mono. Side-by-side
> dev would eat up more cycles than I have at the moment.


I don't know how far along mono's .NET 2.0 implementation has gotten, but it
would definitely be interesting to see in the long run.

That said, anyone out there want to work in parallel on a mono port?


I'd love to, I've just got about nine other projects I need to get done
first, so I can't volunteer just yet :)

-John
> http://www.iu...
>
>


--
===Tanner Burson===
tanner.burson@gmail.com
http://tanner... <---Might even work one day...

Matt T.

2/21/2006 5:31:00 AM

0

Oh man, if this means we can finally write true-blue Windows GUI apps
in Ruby, I'm in heaven. I haven't used .NET yet, so I'm a little in the
dark about the whole deal, but just seeing the example on your page
gets me excited.

Keep it up, I'm definitely keeping an eye on this project.

-Matt T.

jgbailey

2/21/2006 9:45:00 PM

0

This is a great step forward. I've done a lot of Windows Forms work and
..NET has a really good UI layer for working with. What's more, it has
*fantastic* documentation. I tried to learn Tcl/Tk but the challenge of
translating from Perl and learning a new tool kit at the same time was
too much. This is just what I wanted to write Ruby GUI apps.

Anyways, I banged together a little 'Google Calculator' program that
uses Google's calcuator service for evaluating expressions. Sounds
trivial until you need to divide miles by fortnights or similar (try
it!).

Heres the code - just copy it into the same directory with the
rubyclr.rb file and the RbDynamicMethod.dll:


# RSS Reader sample application
# (C)Copyright 2006 John Lam

# BUG: crashes on dave winer's feed http://www.scripting.c... -
bug in rss feed reader

require 'rubyclr'

RubyClr::reference 'System'
RubyClr::reference 'System.Drawing'
RubyClr::reference 'System.Windows.Forms'

include System::Drawing
include System::Drawing::Drawing2D
include System::Windows::Forms


require 'open-uri'
require 'cgi'

class GoogleCalc

def self.calc(expr)
open(("http://www.google.com/...{CGI.escape(expr.strip)}"))
do |f|
if f.status.include? "200"
begin
matches = MATCH_EXP.match(f.read)
return result_format(matches[2])
rescue NoMethodError
return "==> Expression not understood."
rescue Exception
return "==> Expression not understood. (#{$!.class.inspect},
#{$!.inspect})"
end
else
return "==> Response error: #{f.status.inspect}"
end
end
end

private

MATCH_EXP = Regexp.new("<td><img
src=/images/calc_img.gif></td><td>&nbsp;</td><td nowrap>(.*?) =
(.*?)</b>")

def self.result_format(s)
s.gsub("<font size=-2>
</font>",",").gsub("&#215;","x").gsub("<sup>","^").gsub("</sup>", "")
end


end

class MainForm
attr_accessor :form

def initialize
form = Form.new
form.FormBorderStyle = FormBorderStyle::Sizable
form.SizeGripStyle = SizeGripStyle::Show
form.StartPosition = FormStartPosition::CenterScreen
form.Text = "Google Calculator"
form.Size = Size.new(220, 200)

expressionGroupBox = GroupBox.new
expressionGroupBox.Dock = DockStyle::Top
expressionGroupBox.Width = 215
expressionGroupBox.Height = 50
expressionGroupBox.Text = "Expression"

expressionTextBox = TextBox.new
expressionTextBox.Location = Point.new(5, 20)
expressionTextBox.Size = Size.new(125, 21)
expressionTextBox.Anchor = AnchorStyles::Left | AnchorStyles::Top |
AnchorStyles::Right

calcButton = Button.new
calcButton.Size = Size.new(75, 23)
calcButton.Location = Point.new(135, 19)
calcButton.Text = "Calculate"
calcButton.Anchor = AnchorStyles::Right | AnchorStyles::Top
calcButton.Enabled = false

expressionGroupBox.Controls.Add(expressionTextBox)
expressionGroupBox.Controls.Add(calcButton)

resultGroupBox = GroupBox.new
resultGroupBox.Dock = DockStyle::Fill
resultGroupBox.Text = "Results"
resultGroupBox.Size = Size.new(100, 100)

resultTextBox = TextBox.new
resultTextBox.Location = Point.new(5, 20)
resultTextBox.Size = Size.new(90, 75)
resultTextBox.Anchor = AnchorStyles::Right | AnchorStyles::Top |
AnchorStyles::Left | AnchorStyles::Bottom
resultTextBox.Multiline = true
resultTextBox.ReadOnly = true
# resultTextBox.BorderStyle = BorderStyle::None
#resultTextBox.ForeColor = Color.Black
#resultTextBox.BackColor = Color.White

expressionTextBox.TextChanged do |sender, args|
calcButton.Enabled = (expressionTextBox.Text.strip != "")
end

calcButton.Click do |sender, args|
begin
calcButton.Text = "Working ..."
calcButton.Enabled = false
resultTextBox.Text = GoogleCalc.calc(expressionTextBox.Text)
rescue Exception
resultTextBox.Text = "==> Error occurrred: $!.message"
ensure
calcButton.Text = "Calculate"
calcButton.Enabled = true
end
end

resultGroupBox.Controls.Add(resultTextBox)

form.Controls.Add(resultGroupBox)
form.Controls.Add(expressionGroupBox)
form.PerformLayout
@form = form
end
end

Application.EnableVisualStyles
Application.SetCompatibleTextRenderingDefault false
Application.Run(MainForm.new.form)



John Lam wrote:
> This is a much more complete drop of the bridge:
> http://www.iu.../articles/2006/02/20/second-drop-...
>
> To show off its features, I've built a non-trivial all-Ruby Windows Forms
> 2.0 RSS Reader application that's in the distribution. It's been tested with
> the RTM bits of .NET FX 2.0, and Ruby 1.8.2.
>
> Comments & questions more than welcome!
>
> Cheers,
> -John
> http://www.iu...
>
> ------=_Part_9676_7336074.1140486137995--

yang jdong

2/22/2006 7:03:00 AM

0

when i run it,it show follow errors:
dynamic constant assignment
MATCH_EXP=Regexp.new("<td><imgsrc=/images/calc_img.gif></td><td>&nbsp;</td><td
nowrap>(.*?) = (.*?)</b>")

John Lam

2/22/2006 12:27:00 PM

0

Watch out for the wrapping from the email. Just delete the carriage return
from the string.

-John


On 2/22/06, yangfreecode@gmail.com <yangfreecode@gmail.com> wrote:
>
> when i run it,it show follow errors:
> dynamic constant assignment
> MATCH_EXP=Regexp.new
> ("<td><imgsrc=/images/calc_img.gif></td><td>&nbsp;</td><td
> nowrap>(.*?) = (.*?)</b>")
>
>
>