[#74825] Millisecond in time. — place4oracle@... (Warren)

Hi,

17 messages 2003/07/01
[#74827] Re: Millisecond in time. — Harry Ohlsen <harryo@...> 2003/07/01

Warren wrote:

[#74841] Re: Millisecond in time. — Anders Borch <spam@...> 2003/07/01

Harry Ohlsen wrote:

[#74853] Aeditor-0.1 is unleashed — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

Aeditor is a editor-widget written in Ruby. The primary

17 messages 2003/07/01

[#74884] Speaking of I18N... — "Hal E. Fulton" <hal9000@...>

I don't suppose anyone has implemented any

17 messages 2003/07/01

[#74894] rb_gc() and scan stack — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I were experimenting with Init_stack, when I discovered a flaw in my mind.

12 messages 2003/07/01

[#74912] Ruby9i now available — Jim Cain <list@...>

All,

18 messages 2003/07/02

[#74980] OT: It's that time of year again ... — james_b <james_b@...>

Happy Birthmonth to all fellow Rubyists born in July!

19 messages 2003/07/02

[#75023] A Quick Guide to SQLite and Ruby — why the lucky stiff <ruby-talk@...>

-Talkers:

17 messages 2003/07/02

[#75119] purpose of replace method — Ian Macdonald <ian@...>

Hi,

17 messages 2003/07/04

[#75137] How to create Shell Links on Windows? — Timon Christl <me@...>

Is there an easy way to create or modify shell links (.lnk) with ruby on

12 messages 2003/07/04

[#75160] seeking feedback on my first Ruby program — "Joe Cheng" <code@...>

I just took my first stab at writing a useful Ruby program. My programming

11 messages 2003/07/04

[#75307] Need regex to match "^\n" — Jim Freeze <jim@...>

Hi:

16 messages 2003/07/06

[#75369] Code Snippet: Array.shuffle — Stefan Arentz <stefan.arentz@...>

14 messages 2003/07/08

[#75420] My brief and torrid affair with Ruby. — Ray Cote <rgacote@...>

Hi List:

150 messages 2003/07/08
[#75421] Re: My brief and torrid affair with Ruby. — Daniel Carrera <dcarrera@...> 2003/07/09

-----BEGIN PGP SIGNED MESSAGE-----

[#75425] Re: My brief and torrid affair with Ruby. — Ray Cote <rgacote@...> 2003/07/09

At 9:08 AM +0900 7/9/03, Daniel Carrera wrote:

[#75426] Re: My brief and torrid affair with Ruby. — Daniel Carrera <dcarrera@...> 2003/07/09

-----BEGIN PGP SIGNED MESSAGE-----

[#75433] Re: My brief and torrid affair with Ruby. — Stephyn Butcher <tendzin.dorje@...> 2003/07/09

They don't call GPL a legal virus for nothing:

[#75527] Re: My brief and torrid affair with Ruby. — "Hal E. Fulton" <hal9000@...> 2003/07/09

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

[#75529] Re: My brief and torrid affair with Ruby. — Daniel Carrera <dcarrera@...> 2003/07/09

-----BEGIN PGP SIGNED MESSAGE-----

[#75548] OT: GPL - was Re: My brief and torrid affair with Ruby. — "Hal E. Fulton" <hal9000@...> 2003/07/09

> > Are you honestly saying that you don't understand

[#75565] Re: OT: GPL - was Re: My brief and torrid affair with Ruby. — Chalmers <feldt@...> 2003/07/09

Sorry for this long post and rambling. Just skip if you're not in

[#75588] Re: OT: GPL - was Re: My brief and torrid affair with Ruby. — Austin Ziegler <austin@...> 2003/07/10

-----BEGIN PGP SIGNED MESSAGE-----

[#75610] Re: OT: GPL - was Re: My brief and torrid affair with Ruby. — Robert Feldt <feldt@...> 2003/07/10

Austin Ziegler <austin@halostatue.ca> skrev den Thu, 10 Jul 2003 10:10:03

[#75530] Re: My brief and torrid affair with Ruby. — "Michael Campbell" <michael_s_campbell@...> 2003/07/09

[#75531] Re: My brief and torrid affair with Ruby. — Daniel Carrera <dcarrera@...> 2003/07/09

-----BEGIN PGP SIGNED MESSAGE-----

[#75711] Re: My brief and torrid affair with Ruby. — "Sean O'Dell" <sean@...> 2003/07/11

"Daniel Carrera" <dcarrera@math.umd.edu> wrote in message

[#75712] Re: My brief and torrid affair with Ruby. — Daniel Carrera <dcarrera@...> 2003/07/11

-----BEGIN PGP SIGNED MESSAGE-----

[#75536] Re: My brief and torrid affair with Ruby. — "Hal E. Fulton" <hal9000@...> 2003/07/09

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

[#75539] Re: My brief and torrid affair with Ruby. — "Gennady" <gfb@...> 2003/07/09

OK, Daniel, let's put it this way: if you do not use something there's

[#75438] NASA using Ruby? — Harry Ohlsen <harryo@...>

I noticed a reference in the intro blurb for Dave Thomas's talk at OSCON to NASA doing numerical simulations using Ruby.

24 messages 2003/07/09

[#75570] Ruby T-Shirt Idea — shout@... (Austin King)

Keywords: advocacy, silly t-shirts, Request For Feedback

43 messages 2003/07/09

[#75654] Re: Ruby T-Shirt Idea — "Orion Hunter" <orion2480@...>

What we need is a code snippet that is excessively long and obfuscate in

31 messages 2003/07/10

[#75767] Getting my IP address — Philip Mak <pmak@...>

Is there a piece of Ruby code somewhere that will tell me what my IP

13 messages 2003/07/11

[#75777] Re: OSCON report — "Volkmann, Mark" <Mark.Volkmann@...>

> -----Original Message-----

19 messages 2003/07/11
[#75810] Re: OSCON report — matz@... (Yukihiro Matsumoto) 2003/07/11

Hi,

[#75811] Re: OSCON report — Matt Lawrence <matt@...> 2003/07/11

On Sat, 12 Jul 2003, Yukihiro Matsumoto wrote:

[#75852] ruby-mysql library load error — eric.anderson@... (Eric Anderson)

I am trying to get the ruby dbi library up and running on my machine.

10 messages 2003/07/12

[#75963] Custom method_missing doesn't trap super call — Richard Dale <Richard_Dale@...>

When I run the code below it produces the following output:

26 messages 2003/07/14

[#75975] Booleans — "Mark J. Reed" <markjreed@...>

Okay, as a convert from Perl to Ruby, I have to say that I love

14 messages 2003/07/14

[#75991] ruby-specific CGI question (I think) — "Kurt M. Dresner" <kdresner@...>

I'm using sessions and forms in my cgi script.

15 messages 2003/07/14

[#76058] How to reduce Ruby runtime error? — Xiangrong Fang <xrfang@...>

Hi my friends,

17 messages 2003/07/15

[#76121] Keyword "with" — "Robert Klemme" <bob.news@...>

66 messages 2003/07/16
[#76134] Re: Keyword "with" — "Robert Klemme" <bob.news@...> 2003/07/16

[#76143] Re: Keyword "with" — Peter Hickman <peter@...> 2003/07/16

Robert Klemme wrote:

[#76148] Other languages' features in Ruby — Ben Giddings <ben@...> 2003/07/16

Hrm, well I'm a Ruby/Java/C/C++/Python/Perl/Lisp/Javascript/PHP...

[#76149] Re: Keyword "with" — "Mark J. Reed" <markjreed@...> 2003/07/16

Peter (having a bad day) Hickman wrote:

[#76181] Re: Keyword "with" — Mark Wilson <mwilson13@...> 2003/07/16

[#76184] Re: Keyword "with" — "Michael Campbell" <michael_s_campbell@...> 2003/07/16

[#76293] Re: Keyword "with" — "Hal E. Fulton" <hal9000@...> 2003/07/17

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

[#76145] Advocacy: Ruby on/with .net — "Thomas Sondergaard" <thomass@...>

I'd like a minute or two of your time as I try to sell you the idea of ruby

34 messages 2003/07/16

[#76196] OO Design question for Net::HTTP caching extension — Aredridel <aredridel@...>

I'm in the process of writing an HTTP-1.1 extension to Net::HTTP. At

10 messages 2003/07/16

[#76254] What's the point? — Jim Freeze <jim@...>

Hi

19 messages 2003/07/17

[#76336] Aliased setter methods behave differently than other methods? — Jim Cain <list@...>

Here's another question... I am aliasing and redefining certain methods,

11 messages 2003/07/18

[#76372] Binary counter — ptkwt@...1.aracnet.com (Phil Tomson)

I needed to test a class which had a certain number of 'binary' inputs (ie. each input

14 messages 2003/07/18

[#76396] chaining comparisons — "Kurt M. Dresner" <kdresner@...>

When I learned python I was overjoyed that I could evaluate 1 < 2 < 3

36 messages 2003/07/19

[#76424] Proposal: Array#to_h, to simplify hash generation — Gavin Sinclair <gsinclair@...>

Hi -talk,

41 messages 2003/07/19
[#76512] Re: Proposal: Array#to_h, to simplify hash generation — Martin DeMello <martindemello@...> 2003/07/20

Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

[#76513] Re: Proposal: Array#to_h, to simplify hash generation — dblack@... 2003/07/20

Hi --

[#76530] Re: Proposal: Array#to_h, to simplify hash generation — Martin DeMello <martindemello@...> 2003/07/21

dblack@superlink.net wrote:

[#76532] Re: Proposal: Array#to_h, to simplify hash generation — "Gavin Sinclair" <gsinclair@...> 2003/07/21

>

[#76540] Re: Proposal: Array#to_h, to simplify hash generation — dblack@... 2003/07/21

Hi --

[#76473] ruby documentation generator? — "Kurt M. Dresner" <kdresner@...>

I've been googling for a few minutes but I haven't found anything yet.

12 messages 2003/07/20

[#76497] Parsing POST and GET variables simultaneously? — David Heinemeier Hansson <david@...>

Isn't it possible to get variables from POST and GET simultaneously?

13 messages 2003/07/20

[#76499] From Windows internal format to UTF-8? — "renoX" <renZYX@...>

Hello,

13 messages 2003/07/20

[#76551] matz thoughts on Rite ? — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I don't know much about Rite, therefore I ask.

30 messages 2003/07/21

[#76563] Deep copy — Jim Freeze <jim@...>

Hi

15 messages 2003/07/21

[#76619] Should String#strip take a parameter? — "Warren Brown" <wkb@...>

All,

18 messages 2003/07/21

[#76625] RubyForge.org — Richard Kilmer <rich@...>

All,

37 messages 2003/07/22
[#76831] Re: [ANN] RubyForge.org — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/07/23

On Tue, 22 Jul 2003 12:43:41 +0200, Oliver Bolzer wrote:

[#76693] Bug report: ruby-1.8.0p3 fails to compile under FreeBSD-4.7 — Brian Candler <B.Candler@...>

gcc -fPIC -g -O2 -DDB_DBM_HSEARCH -DDBM_HDR="<db.h>" -I. -I/u/home/telinco/build/ruby/ruby-1.8.0 -I/u/home/telinco/build/ruby/ruby-1.8.0 -I/u/home/telinco/build/ruby/ruby-1.8.0/ext/dbm -DHAVE_DB_H -DHAVE_SYS_CDEFS_H -DHAVE___DB_NDBM_OPEN -DHAVE___DB_NDBM_CLEARERR -c dbm.c

10 messages 2003/07/22

[#76697] String substitution without RegEx — Andreas Schwarz <usenet@...>

I wanted to do a simple string substitution, and was surprised to see

20 messages 2003/07/22

[#76751] New RDoc template, and a question — Dave Thomas <dave@...>

Michael Granger has produced a wonderful new RDoc template, which looks

37 messages 2003/07/23

[#76783] Embedding problem - SEGV — Brian Candler <B.Candler@...>

I have a problem with embedding Ruby, which hopefully someone can shed some

16 messages 2003/07/23

[#76843] Re: [OT] subversion, was [ANN] RubyForge.org — "Bennett, Patrick" <Patrick.Bennett@...>

Hmm, the linuxworld article didn't really say anything useful about

12 messages 2003/07/23

[#76892] ruby 1.8.0 preview4 — matz@... (Yukihiro Matsumoto)

Hello,

44 messages 2003/07/24

[#76984] Patches to 1.8.0p4 to add Bessel functions for those that have 'em — Mike Hall <mghall@...>

Here's some simple patches to configure.in, configure and math.c

23 messages 2003/07/25
[#77006] Re: Patches to 1.8.0p4 to add Bessel functions for those that have 'em — matz@... (Yukihiro Matsumoto) 2003/07/25

Hi,

[#76991] Confused about locking a file via file.flock(File::LOCK_EX) — Ludwigi Beethoven <aix_tech@...>

I am writing a ruby appl under AIX where I need to

11 messages 2003/07/25

[#77082] Set doesn't have [] instance method — Gavin Sinclair <gsinclair@...>

It should, shouldn't it? It's meant to combine the fast lookup of

15 messages 2003/07/26

[#77087] What's wrong with ruby garden? — "Carl Youngblood" <carl@...>

It seems that Ruby Garden is down right now. Does anyone know what's

10 messages 2003/07/26

[#77129] Ruby in Ruby — Austin Ziegler <austin@...>

Over on the pragprog list, Ron Jeffries suggested that it might be

15 messages 2003/07/28

[#77144] ruby 1.8.0 preview5 — matz@... (Yukihiro Matsumoto)

Hello,

16 messages 2003/07/28

[#77149] winsock problem? — Xiangrong Fang <xrfang@...>

Hi,

14 messages 2003/07/28

[#77176] Fishing for ideas: Ruby-talk for Java coders — Armin Roehrl <armin@...>

Hi all,

19 messages 2003/07/28

[#77197] Parser generator — "Rodrigo B. de Oliveira" <rodrigob@...>

I'm evaluating language/frameworks for creating a toy language compiler =

13 messages 2003/07/29

[#77227] Warnings? — Tim Bates <tim@...>

Hi all,

15 messages 2003/07/29
[#77242] Re: Warnings? — matz@... (Yukihiro Matsumoto) 2003/07/29

Hi,

[#77354] Ruby could be wildly more popular if it had ... — quixoticsycophant@... (Jeff Mitchell)

Brackets.

40 messages 2003/07/30
[#77694] Re: Ruby could be wildly more popular if it had ... — Martin DeMello <martindemello@...> 2003/08/01

Chris Thomas <chris@m-audio.com> wrote:

[#77359] Hm... nice, Euclid is a one-liner — Rudolf Polzer <denshimeiru-sapmctacher@...>

a, b = b, a % b while b != 0

12 messages 2003/07/30

[#77408] Bignum multiplication — Harry Ohlsen <harryo@...>

I was just reading about Python 2.3 and they talked about how they've changed their arbitrary-precision integer multiplication to use the Karatsuba multiplication algorithm.

21 messages 2003/07/30

[#77516] wanted: official mirrors for 1.8.0 — matz@... (Yukihiro Matsumoto)

Hello,

24 messages 2003/07/31

[#77528] ruby 1.8.0 preview6 — matz@... (Yukihiro Matsumoto)

Hello,

14 messages 2003/07/31

[#77590] Spam at ruby-talk — Daniel Carrera <dcarrera@...>

I don't know who runs the ruby-talk mailing list. I've noticed that

13 messages 2003/07/31
[#77595] Re: Spam at ruby-talk — Dave Thomas <dave@...> 2003/07/31

Daniel Carrera wrote:

[#77592] Changing ==,>,<, etc — elbows@... (Nathan Weston)

The latest Perl exegesis

15 messages 2003/07/31

[#77623] Extracting a parent class — Michael Garriss <mgarriss@...>

Sorry about the newbie question but....

14 messages 2003/07/31

Re: Issues in pluggable user interfaces

From: Stephen Lewis <slewis@...>
Date: 2003-07-15 12:47:51 UTC
List: ruby-talk #76040
On Tue, 15 Jul 2003 12:30:28 +0900
"Hal E. Fulton" <hal9000@hypermetrics.com> wrote:

> I've been toying with this idea, and I'm 
> having some difficulty implementing it 
> as well as I'd like.
> 
> Seeking the input of others.
> 
> I'd like to be able to separate my app's
> "guts" from its UI to a large extent, so
> that I could allow different UIs (such
> as Fox and "plain old text").

(advance warning, I ramble on at great length - sorry :)

Well, I've recently been trying to solve this problem for a bunch of
applications that I periodically try to write (they don't get very far,
as I tend to get distracted by architectural issues like this).

The solution that I've ended up with is quite heavy, but it was the best
way that I could think of to completely decouple the application logic
in such a way as to not to enforce any undue restrictions on whatever UI
is being used.  I'm sure someone who knows much more about it than I
will point out similarities between this and the MVC pattern.

A lot of the stuff is probably unneccessary, daft, or just plain wrong,
but this is the result of thinking in isolation :) I've been trying to 
wrap it all up into a nice library, but it's not really there yet - one 
day it might appear on the RAA as "ruby-applib" ;)

OK, enough procrastination: the details.  For starters, I divide the 
program up into the UI, the Backend, both of which are managed by an 
Application class.

All communication between these is done using Events, which can be sent
to  classes implementing an EventTarget interface (basically an event
queue).  I've mainly been using a threaded EventTarget, which has a
thread running the event loop for simplicity ( I looked at using some 
sort of state machine, but I realized  that I'd basically be 
re-implementing a userspace thread scheduler to make it behave the way
I wanted ).

The Application class is responsible for finding and loading plugins 
(more later) and configuration, and setting up the UI and Backend.  It
also keeps an eye on them, and, for example knows what to do should one
of them fail unexpectedly.

I decided against sharing large chunks of UI code between the 
implementations for various UI toolkits, because they tend to provide
fairly different capabilities, and I'm not a fan of the "minimal common
subset" approach, nor the "emulate missing features" approach, at least
not for a UI.

A UI should be crafted for its target environment.

So, to allow a single backend to talk to the various UI 
implementations, and visa versa, I define an interface using events.  
There are events that the UI needs to send to the Backend, in order to 
instruct it to do something (e.g. Save some file, start a new game, 
etc).  
There may also be events that the Backend needs to send to the UI ( 
Remote user has connected, Your CPU is on fire, etc).

For things where progress or completion information is required (e.g.
UI asks Backend to SaveFile), there are a set of "Progress" events -
PercentComplete, Failure, Completed that the Backend will send to the
UI based on how its processing is going in response to the initiating
event. (so UI->Backend(Save), Backend->UI(Failure on Save), ui warns 
the user somehow with details from the Failure event).

One of the goals I had that heavily influenced the design was to be
able to have runtime selection of user interfaces, based on user
preference. 
So, say, my application has gtk2, gtk1 and tk based user interface code 
available, with user preference in that order.  The application would 
try to create a gtk2 interface, but if that should fail, due to, say, 
a missing library, the gtk1 interface would be tried, and so on.

In order to do this, I decided to use a plugin system, so each UI is 
wrapped in a Plugin to give us a bit of convenient metadata to work 
with.  As these plugins are loaded, they register into a heirarchy kind
of like this:
plugins = {
  'ui' => {
    'graphic' => { 
      'gtk2' => SomeGtk2UIPlugin, 
      'gtk1' => SomeGtk1UIPlugin
    },
    'text' => {
      'curses' => SomeCursesUIPlugin
    }
  }
}

Could probably add things like other/web or something too :)

These plugins have an 'instantiate' method that attempts require the
various libraries and code needed by that particular plugin, and to
return an instance of the class that implements the main UI EventTarget.

Currently the application just runs with the first UI that it can
instantiate, but the user preference stuff shouldn't be a problem.


> So the app looks basically like this:
> 
>   session.get_some_parameters
>   session.do_stuff
>   session.wrap_up
> 
> Those aren't the real names, but you get
> the idea.
> 
> Very natural in terms of old-fashioned
> gets and puts calls.

I guess under my system, the UI would probably put itself into the "get 
some parameters" state after it is initialized, while the backend would
be in a wait state, with no evends currently pending.

Once the UI has finished "getting parameters", it would probably send an
event to the Backend, with a handle to the parameters, the Backend would
then begin "doing stuff".  The "wrap up" logic would probably be in the
Backend, but which module would initiate it would depend on the details
I guess.

> And of course, there is a little more 
> complexity behind the general flow of 
> control.

My way adds quite a bit more complexity, but I likes it ;)

> I suppose I could just make a "run" method
> for each class/UI... that seems best right
> now. But then what have I really bought for
> myself?

Now that's a good question.  The way I've described was the only way I
could think of where I could pretty much guarantee the following:
  * user interface should never stop responding
    (processing done in separate thread)
  * core logic should have no knowledge of the UI, nor any
    structural requirements forced on it by a particular UI.
  * user interface can be selected at runtime based on available
    implementations, system libraries and user preference.

I also find it helps me structure my thoughts - you can see fairly
clearly which state each module is in, and what it should be doing.

Anyway, hope that's useful, not just long :)

-- 
Stephen Lewis
slewis@paradise.net.nz

In This Thread