[#83328] tcltklib and not init'ing tk — aakhter@... (Aamer Akhter)

Hello,

13 messages 2003/10/01

[#83391] mixing in class methods — "Mark J. Reed" <markjreed@...>

Okay, probably a dumb question, but: is there any way to define

22 messages 2003/10/01
[#83392] Re: mixing in class methods — Ryan Pavlik <rpav@...> 2003/10/01

On Thu, 2 Oct 2003 06:02:32 +0900

[#83397] Re: mixing in class methods — Gavin Sinclair <gsinclair@...> 2003/10/01

On Thursday, October 2, 2003, 7:08:00 AM, Ryan wrote:

[#83399] Re: mixing in class methods — "Mark J. Reed" <markjreed@...> 2003/10/02

On Thu, Oct 02, 2003 at 07:37:25AM +0900, Gavin Sinclair wrote:

[#83404] Re: mixing in class methods — "Gavin Sinclair" <gsinclair@...> 2003/10/02

> On Thu, Oct 02, 2003 at 07:37:25AM +0900, Gavin Sinclair wrote:

[#83416] C or C++? — "Joe Cheng" <code@...>

I'd like to start writing Ruby extensions. Does it make a difference

32 messages 2003/10/02
[#83435] Re: C or C++? — "Aleksei Guzev" <aleksei.guzev@...> 2003/10/02

[#83448] xml in Ruby — paul vudmaska <paul_vudmaska@...> 2003/10/02

The biggest problem i have with Ruby is the sleepness

[#83455] Re: xml in Ruby — Chad Fowler <chad@...> 2003/10/02

On Thu, 2 Oct 2003, paul vudmaska wrote:

[#83464] Re: xml in Ruby or no xml it's just a question — paul vudmaska <paul_vudmaska@...> 2003/10/02

>>--------

[#83470] Re: xml in Ruby — paul vudmaska <paul_vudmaska@...>

>>>

15 messages 2003/10/02

[#83551] xml + ruby — paul vudmaska <paul_vudmaska@...>

>>---------

20 messages 2003/10/03
[#83562] Re: xml + ruby — Austin Ziegler <austin@...> 2003/10/03

On Fri, 3 Oct 2003 16:11:46 +0900, paul vudmaska wrote:

[#83554] hash of hashes — Paul Argentoff <argentoff@...>

Hi all.

18 messages 2003/10/03

[#83675] fox-tool - interactive gui builder for fxruby — henon <user@...>

hi fellows,

15 messages 2003/10/05

[#83730] Re: Enumerable#inject is surprising me... — "Weirich, James" <James.Weirich@...>

> Does it surprise you?

17 messages 2003/10/06
[#83732] Re: Enumerable#inject is surprising me... — nobu.nokada@... 2003/10/07

Hi,

[#83801] Extension Language for a Text Editor — Nikolai Weibull <ruby-talk@...>

OK. So I'm going to write a text editor for my masters' thesis. The

35 messages 2003/10/08
[#83803] Re: Extension Language for a Text Editor — Ryan Pavlik <rpav@...> 2003/10/08

On Thu, 9 Oct 2003 05:06:32 +0900

[#83806] Re: Extension Language for a Text Editor — Nikolai Weibull <ruby-talk@...> 2003/10/08

* Ryan Pavlik <rpav@mephle.com> [Oct, 08 2003 22:30]:

[#83812] Re: Extension Language for a Text Editor — Ryan Pavlik <rpav@...> 2003/10/08

On Thu, 9 Oct 2003 06:09:29 +0900

[#83955] Re: Extension Language for a Text Editor — Nikolai Weibull <ruby-talk@...> 2003/10/09

* Ryan Pavlik <rpav@mephle.com> [Oct, 09 2003 09:10]:

[#84169] General Ruby Programming questions — Simon Kitching <simon@...>

21 messages 2003/10/15
[#84170] Re: General Ruby Programming questions — Florian Gross <flgr@...> 2003/10/15

Simon Kitching wrote:

[#84172] Re: General Ruby Programming questions — Simon Kitching <simon@...> 2003/10/15

Hi Florian..

[#84331] Re: Email Harvesting — Greg Vaughn <gvaughn@...>

Ryan Dlugosz said:

17 messages 2003/10/21
[#84335] Re: Email Harvesting — Hugh Sasse Staff Elec Eng <hgs@...> 2003/10/21

On Wed, 22 Oct 2003, Greg Vaughn wrote:

[#84343] Re: Email Harvesting — Ruben Vandeginste <Ruben.Vandeginste@...> 2003/10/22

On Wed, 22 Oct 2003 08:35:32 +0900, Hugh Sasse Staff Elec Eng

[#84341] Ruby-oriented Linux distro? — Hal Fulton <hal9000@...>

There's been some talk of something like this in the past.

15 messages 2003/10/22
[#84348] Re: Ruby-oriented Linux distro? — Gavin Sinclair <gsinclair@...> 2003/10/22

On Wednesday, October 22, 2003, 6:01:16 PM, Hal wrote:

[#84351] Re: Ruby-oriented Linux distro? — Andrew Walrond <andrew@...> 2003/10/22

On Wednesday 22 Oct 2003 11:02 am, Gavin Sinclair wrote:

[#84420] Struggling with variable arguments to block — "Gavin Sinclair" <gsinclair@...>

Hi -talk,

18 messages 2003/10/24
[#84428] Re: Struggling with variable arguments to block — matz@... (Yukihiro Matsumoto) 2003/10/24

Hi,

[#84604] ruby-dev summary 21637-21729 — Takaaki Tateishi <ttate@...>

Hello,

21 messages 2003/10/30
[#84787] Re: ruby-dev summary 21637-21729 — Paul Brannan <pbrannan@...> 2003/11/06

On Fri, Oct 31, 2003 at 07:01:28AM +0900, Takaaki Tateishi wrote:

[#84789] Re: ruby-dev summary 21637-21729 — matz@... (Yukihiro Matsumoto) 2003/11/06

Hi,

[#84792] Re: ruby-dev summary 21637-21729 — Paul Brannan <pbrannan@...> 2003/11/06

On Thu, Nov 06, 2003 at 11:17:59PM +0900, Yukihiro Matsumoto wrote:

[#84794] Re: ruby-dev summary 21637-21729 — matz@... (Yukihiro Matsumoto) 2003/11/06

Hi,

Re: webrick, threads, and i/o

From: "Ara.T.Howard" <ahoward@...>
Date: 2003-10-04 16:54:58 UTC
List: ruby-talk #83637
On Sat, 4 Oct 2003, NAKAMURA, Hiroshi wrote:

> You open fifo with blocking mode and read here.  Blocking entire process
> here is expected behavior if I understand correctly.

o.k. - that is what i was trying to confirm: that one must be careful using
webrick when doing something in a servlet that could block a process in the
kernel...  good (and not unexpected) to know.

> I think the process is blocked at the second access.  Does third
> access works?

no!?  i think it's a case of thread starvation here.  one servlet is blocked
opening the fifo for reading, but the other cannot open it for writing since
the entire process has halting on the first open...

> You can open fifo with File::RDONLY|File::NONBLOCK for read side and
> File::WRONLY|File::NONBLOCK for write side.  I think it should work.

strangley, this does not work:

----CUT----
#!/usr/local/ruby-1.8.0/bin/ruby
require 'webrick'
include WEBrick

# or set this up by hand before!
system 'mkfifo fifo && chmod 777 fifo' rescue nil

port = (ARGV[0] or 2003).to_i
s = HTTPServer.new( :Port => port )

class TimeServlet < HTTPServlet::AbstractServlet
  def do_GET(req, res)
    res['Content-Type'] = "text/plain"
    res.body = Time.now.to_s
  end
end

class ReadServlet < HTTPServlet::AbstractServlet
  def do_GET(req, res)
    res['Content-Type'] = "text/plain"
    res.body =
      begin
        fifo = open 'fifo', File::RDWR|File::NONBLOCK
        begin
          fifo.read
        rescue Errno::EWOULDBLOCK
          'NO DATA'
        end
      rescue Exception => e
        e.to_s << "\n" << e.backtrace.join("\n")
      end
  end
end

class WriteServlet < HTTPServlet::AbstractServlet
  def do_GET(req, res)
    res['Content-Type'] = "text/plain"
    res.body =
      begin
        fifo = open 'fifo', File::RDWR|File::NONBLOCK
        begin
          msg = "%s:%s" % [self.class, Time.now.to_s]
          fifo.puts msg
          fifo.flush
          "WROTE <%s>" % [msg]
        rescue Errno::EWOULDBLOCK
          'COULD NOT WRITE'
        end
      rescue Exception => e
        e.to_s << "\n" << e.backtrace.join("\n")
      end
  end
end

s.mount("/write", WriteServlet)
s.mount("/read", ReadServlet)
s.mount("/time", TimeServlet)
trap("INT"){ s.shutdown }
s.start
----CUT----


while this does:
----CUT----
#!/usr/local/ruby-1.8.0/bin/ruby

system 'mkfifo fifo && chmod 777 fifo' rescue nil
r = open 'fifo', File::RDWR|File::NONBLOCK
w = open 'fifo', File::RDWR|File::NONBLOCK
w.puts 'hi'
w.flush
puts r.gets
----CUT----

so i think the logic in my servlets is correct.  this is very strange?!

what's really strange about the above is that the WriteServlet DOES work, only
the ReadServlet hangs in the browser.  however, even when it hanging the other
servlets (Write, Time) continue to work, so it is not as if the _process_ is
blocked, only the ReadServlet request thread!?

> In other words, if you want the server never blocks no matter what servlets
> do, you should use other process forking WWW server application, or should
> make your server using WEBrick as a toolkit.

well - the first would require NOT using ruby so that's NOT an option! ;-)

as for the second, i'm unsure as to the best way to accomplish blocking
tasking from servlets:

  a) have a dedicated worker thread so all, IO for example, is done carefully
  there...

  b) fire up a Drb object (in another process) and use it to perform, for
  example, io.  (does Drb work on windows?)

??

any other ideas?


thanks very much.

-a
  ====================================
  | Ara Howard
  | NOAA Forecast Systems Laboratory
  | Information and Technology Services
  | Data Systems Group
  | R/FST 325 Broadway
  | Boulder, CO 80305-3328
  | Email: ara.t.howard@noaa.gov
  | Phone:  303-497-7238
  | Fax:    303-497-7259
  | The difference between art and science is that science is what we understand
  | well enough to explain to a computer.  Art is everything else.
  |   -- Donald Knuth, "Discover"
  | ~ > /bin/sh -c 'for lang in ruby perl; do $lang -e "print \"\x3a\x2d\x29\x0a\""; done'
  ====================================

In This Thread

Prev Next