[Circle-dev] Grand Overview Of Everything

Paul LeoNerd Evans leonerd at leonerd.org.uk
Fri Feb 13 20:28:59 GMT 2009


As promised earlier, an overview of the current state of the universe.

People who might know me will probably know I'm much better at answering
questions, than just spouting knowledge as from the lap of the Gods.
With that in mind, I hope to but doubt I shall deliver on a complete
full overview of everything in all its detail. Please feel free to ask
questions. Lots of them. I don't mind if they're sensible, or meaningful
even - I can filter that if necessary ;) Just hint what I need to say
more about...

Anyway, on with the show. I feel like a nice diagram to start with.
Pictures always help. Here is one:

                                                            X11 server
                                  +------------------------+   ^
                                  |      circle-fe-gtk     |   #
                                  |                        |   #
 ircd <==#                 #=======> Tangence         GTK <====#
         #                 #      |         IO::Async      |
         #                 #      +------------------------+
         #                 #
 +-------#-----------------#------+
 |       #   circle-be     #      |
 |       V                 V      |
 |  Net::Async::IRC     Tangence  |
 |            IO::Async    ^      |
 +-------------------------#------+                            TTY
                           #                                    ^
                           #       +--------------------------+ #
                           #       |      circle-fe-term      | #
                           #       |                          | #
                           #========> Tangence        Tickit <==#
                                   |         IO:Async         |
                                   +--------------------------+

This diagram hopefully demonstrates the key programs currently present
(circle-be, circle-fe-gtk and circle-fe-term), and suggests their key
core parts.

They're all currently written in 100% perl.  The main perl modules in
this diagram are, in summary:

 * IO::Async - async operations, network events, timers, etc. An
     event-driven base framework to build the rest upon.

 * Tangence - object remoting layer. This provides remote objects, which
     have methods, events, properties. They allow introspection. It is
     the main are in which data is remoted between the parts.

 * GTK - the perl module that wraps the GTK widget toolkit.
 
 * Tickit - a currently major-work-in-progress attempt at a terminal
     level widget set. Not entirely unlike GTK, though focused quite
     specifically at doing terminal-specific things. The current
     look-and-feel somewhat approximates an irssi scroller/tabbed
     terminal interface, though plans are to extend this much beyond
     that.

 * Net::Async::IRC - IRC protocol module for IO::Async. Handles all the
     lower-level IRC messaging details.


These components are the primary split in areas that can be worked on.
It ought to be easily possible for people to work on some part without
too much overlap with other pieces.

Of these pieces: 

  IO::Async and GTK are general-purpose modules available on CPAN.
    Modifications here are not directly in scope for Circle, though
    certain additions to IO::Async might be justified by use cases here
    if they are generic enough.

  Net::Async::IRC is supposed to be general-purpose, but isn't complete
    enough yet to consider even a 0.01 release to CPAN. As it gains more
    attention from Circle work, it will eventually move there.

  Tickit isn't Circle-specific, it's more of another project of mine.
    Currently I have a couple of other programs using it too. Long-term
    plans for this involve yanking more of the code out from Perl into a
    C-level library implementation, leaving the perl wrapper as a thin
    shell around that library, making it useful elsewhere.

  Tangence is a generic object remoting system, and the key to branching
    out beyond perl. More on this subject in a later email I think... :)

And of course, there's the actual program code that glues these base
components together.

As a rough overview of code size, the following line counts may be
indicative:

  circle-be:       5158 lines
  circle-fe-gtk:    969 lines
  circle-fe-term:   283 lines
  Tangence:        5567 lines
  Tickit:          3450 lines


I'm never very good at finishing messages, so this time I won't. I'll
end instead by the suggestion that next on my list of "things to write
about" are

 * More detail on Tangence

 * More detail on Tickit

 * More detail on circle-be (as that's where most of the work really
     lives)

Bye for now,

-- 
Paul "LeoNerd" Evans

leonerd at leonerd.org.uk
ICQ# 4135350       |  Registered Linux# 179460
http://www.leonerd.org.uk/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://mail.leonerd.org.uk/pipermail/circle-dev/attachments/20090213/5ee83f72/attachment.pgp>


More information about the Circle-dev mailing list