[#14464] who uses Python or Ruby, and for what? — ellard2@...01.fas.harvard.edu (-11,3-3562,3-3076)

A while ago I posted a request for people to share their experiences

12 messages 2001/05/01

[#14555] Ruby as a Mac OS/X scripting language — Dave Thomas <Dave@...>

10 messages 2001/05/02

[#14557] Arggg Bitten by the block var scope feature!!! — Wayne Scott <wscott@...>

13 messages 2001/05/02

[#14598] Re: Arggg Bitten by the block var scope feature!!! — "Conrad Schneiker" <schneik@...>

# On Thu, 3 May 2001, Wayne Scott wrote:

9 messages 2001/05/03

[#14636] Yet another "About private methods" question — Eric Jacoboni <jacoboni@...2.fr>

I'm still trying to figure out the semantics of private methods in Ruby.

39 messages 2001/05/04
[#14656] Re: Yet another "About private methods" question — Dave Thomas <Dave@...> 2001/05/04

Eric Jacoboni <jaco@teaser.fr> writes:

[#14666] Ruby and Web Applications — "Chris Montgomery" <monty@...> 2001/05/04

Greetings from a newbie,

[#14772] Re: Ruby and Web Applications — Jim Freeze <jim@...> 2001/05/07

On Sat, 5 May 2001, Chris Montgomery wrote:

[#14710] Why's Ruby so slow in this case? — Stefan Matthias Aust <sma@3plus4.de>

Sure, Ruby, being interpreted, is slower than a compiled language.

12 messages 2001/05/05

[#14881] Class/Module Information — "John Kaurin" <jkaurin@...>

It is possible to modify the following code to produce

18 messages 2001/05/09

[#15034] Re: calling .inspect on array/hash causes core dump — ts <decoux@...>

>>>>> "A" == Andreas Riedl <viisi@chello.at> writes:

15 messages 2001/05/12

[#15198] Re: Q: GUI framework with direct drawing ca pabilities? — Steve Tuckner <SAT@...>

Would it be a good idea to develop a pure Ruby GUI framework built on top of

13 messages 2001/05/15

[#15234] Pluggable sorting - How would you do it? — "Hal E. Fulton" <hal9000@...>

Hello all,

16 messages 2001/05/16

[#15549] ColdFusion for Ruby — "Michael Dinowitz" <mdinowit@...2000.com>

I don't currently use Ruby. To tell the truth, I have no real reason to. I'd

12 messages 2001/05/22

[#15569] I like ruby-chan ... — Rob Armstrong <rob@...>

Ruby is more human(e) than Python. We already have too many animals :-).

15 messages 2001/05/23

[#15601] How to avoid spelling mistakes of variable names — ndrochak@... (Nick Drochak)

Since Ruby does not require a variable to be declared, do people find

13 messages 2001/05/23

[#15734] java based interpreter and regexes — "Wayne Blair" <wayne.blair@...>

I have been thinking about the java based ruby interpreter project, and I

48 messages 2001/05/25

[#15804] is it possible to dynamically coerce objects types in Ruby? — mirian@... (Mirian Crzig Lennox)

Greetings to all. I am a newcomer to Ruby and I am exploring the

13 messages 2001/05/27
[#15807] Re: is it possible to dynamically coerce objects types in Ruby? — matz@... (Yukihiro Matsumoto) 2001/05/27

Hi,

[#15863] Experimental "in" operator for collections — Stefan Matthias Aust <sma@3plus4.de>

There's one thing where I prefer Python over Ruby. Testing whether an

13 messages 2001/05/28

[#15925] Re: Block arguments vs method arguments — ts <decoux@...>

>>>>> "M" == Mike <mike@lepton.fr> writes:

43 messages 2001/05/29
[#16070] Re: Block arguments vs method arguments — "Hal E. Fulton" <hal9000@...> 2001/05/31

----- Original Message -----

[#16081] Re: Block arguments vs method arguments — Sean Russell <ser@...> 2001/05/31

On Thu, May 31, 2001 at 11:53:17AM +0900, Hal E. Fulton wrote:

[#16088] Re: Block arguments vs method arguments — Dan Moniz <dnm@...> 2001/05/31

At 11:01 PM 5/31/2001 +0900, Sean Russell wrote:

[#15954] new keyword idea: tryreturn, tryturn or done — Juha Pohjalainen <voidjump@...>

Hello everyone!

12 messages 2001/05/29

[ruby-talk:16055] Re: ruby-gtk and io events

From: murxpp@... (Murxpp)
Date: 2001-05-30 22:41:25 UTC
List: ruby-talk #16055
On Tue, 29 May 2001, Patrik Sundberg wrote:
> So, I want to have functionality similair to the gtk_input_add_* functions in
> my ruby-gtk application. I want to update the GUI depending on data from a
UDP
> socket and the data is sent asynchronous - how would I accomplish this?

Hi Patrik, I needed exactly the same functionality, searched through this
list via google, but all that I found were your two postings. I really
wonder why nobody has implemented it yet -- you really need this for any
single thread GUI application that communicates over the net.

There are basically two solutions to this problem: Either get the file
descriptor for X11 somehow out of Gtk, then implement the application main
loop yourself, adding this file descriptor to your select call, and then
call Gtk::main_iteration() from there when apropriate, avoiding
Gtk::main() completely.

Or implement the missing input_add functions youself.

It seems both solutions require that you extend the current ruby/gtk
binding, and the second sounds like less effort.

I tried to implement the missing functions, and it seems to work. See the
diff below, but beware: I only know about ruby since 3 weeks.

I've got a question to the group regarding the handling of a block
argument in a ruby extension:

The code in the idle_add, idle_remove, timeout_add, timeout_remove methods
looks to me like a memory leak. (File src/rbgtkmain.c)

The *_add functions contain a call to a function add_relative that
basically stores a reference to the block in an Array which is an instance
variable of "self". (BTW what does self mean in this context? Gtk is a
module, and these are module functions.) I suppose this saves the block
and its scope from the garbage collection?

This reference is not removed by the corresponding *_remove functions. So,
if I was right with the garbage collection thing, periodic calls to *_add
and *_remove functions would eat up memory that is never freed again,
right?

Greetings, Tobias


This is a diff against ruby/gtk version 0.24. The new input_add/remove
functions are modified versions of the timeout functions, so if there is
really a memory leak problem in these, then the input functions will have
it too.

Below the diff  is a small example script, which uses the new Gtk::input_add
method to wait for input on stdin.

*** rbgtkmain.c.orig	Sun Oct 22 13:31:08 2000
--- rbgtkmain.c	Wed May 30 21:06:00 2001
***************
*** 80,85 ****
--- 80,118 ----
      return Qnil;
  }
  
+ static void
+ exec_input (gpointer data,
+             gint     source,
+             GdkInputCondition condition)
+ {
+     rb_funcall((VALUE)data, id_call, 0);
+ }
+ 
+ static VALUE
+ input_add(self, filedescriptor, gdk_input_condition)
+     VALUE self, filedescriptor, gdk_input_condition;
+ {
+     int id;
+     VALUE func;
+ 
+     func = rb_f_lambda();
+     add_relative(self, func);
+ 
+     id = gdk_input_add(NUM2INT(rb_funcall(filedescriptor, rb_intern("to_i"),
0)),
+                        (GdkInputCondition)NUM2INT(gdk_input_condition),
+                        (GdkInputFunction)exec_input,
+                        (gpointer)func);
+     return INT2FIX(id);
+ }
+ 
+ static VALUE
+ input_remove(self, id)
+     VALUE self, id;
+ {
+     gdk_input_remove(NUM2INT(id));
+     return Qnil;
+ }
+ 
  static VALUE
  idle_add(self)
      VALUE self;
***************
*** 187,192 ****
--- 220,227 ----
      rb_define_module_function(mGtk, "main_iteration", gtk_m_main_iteration,
0);
      rb_define_module_function(mGtk, "timeout_add", timeout_add, 1);
      rb_define_module_function(mGtk, "timeout_remove", timeout_remove, 1);
+     rb_define_module_function(mGtk, "input_add", input_add, 2);
+     rb_define_module_function(mGtk, "input_remove", input_remove, 1);
      rb_define_module_function(mGtk, "idle_add", idle_add, 0);
      rb_define_module_function(mGtk, "idle_remove", idle_remove, 1);
      rb_define_module_function(mGtk, "get_current_event",
gtk_m_get_current_event, 0);





require "gtk"

GDK_INPUT_READ       = 1 << 0
GDK_INPUT_WRITE      = 1 << 1
GDK_INPUT_EXCEPTION  = 1 << 2

STDIN_FILENO = 0

Gtk::input_add($stdin, GDK_INPUT_READ) {
  chars = $stdin.sysread(5)
  puts("input pending! Reading no more than 5 chars: <<#{chars.dump()}>>")
  if (chars[0,4] == "quit")
    Gtk::main_quit()
  end
}

Gtk::main()

In This Thread

Prev Next