Brain Dump #1

Joe Armstrong <>
Thu Feb 6 12:36:01 CET 2003


> What I can propose is to set up a very nice looking content management
> platform that I used on several project to organize the work (As you
> might implies that the wiki might not be a proper tool). The tools is
> based on Zope and seems to do wonders to incitate the Zope community to
> work together and contribute (see http://www.zope.org/ The content is
> mainly provided by volunteers).

Yes - 

.. wonderful stuff cut ...

> Please, feel free to add new idea.

<brain_dump>

  Just  for  fun  I  started  thinking about  what  applications  were
attracting peoples attention  - so I did a  little thinking and looked
round at what was capturing peoples mind-share - I decided therefore to
investigate three different things that were popular. They were:

	- Zope
	- Jabber
	- Blogger


  What do these things do?

	Zope is a content manager/publisher
	Jabber is an instant messaging system
	Blogger is software to write/syndicate and publish weblogs

  I looked at the zope website and couldn't understand what it was all
about.

  I decided I would learn what  theses things do, so I bought a number
of books one for each of these things.

  I read  all the books (one per  subject) - all these  things had the
same  property - they  were high  on features  (i.e.  they  did useful
things) - but the internal representations and algorithms were not (to
put it politely) beautiful.

  I   thought  to   myself   -  any   of   the  things   they  do   in
zope/jabber/blogger we could do *much* better in Erlang.

  Half    of    these    applications    spend    all    their    time
marshalling/unmarshalling data - or parsing and deparsing XML - things
that are "one liners" in Erlang.

  Can we do  better than these things -  can we do a *lot*  better - a
*lot lot lot* better?

  I think the answer is yes.

  Here's what I'd like to do:

  1) Merge together zope+jabber+blogger into ONE framework

     Why do this:

     Jabber is about instant messaging - 
     Zope is about content management

  But somewhere there  seems to be the idea  that instant messaging is
something that people do - not things.

  I can "chat" to my friend with jabber - but not get an instant message
when a page in a data base is changed.

  I once started on a system I called "things that do stuff" - the idea
was to extend the idea of e-mail.

  Again you can send e-mail to a person, but not to a web page, or an object.

  I was thinking about things like booking rooms for meetings -

  My can't you send the following email to a room

   mailto 
   subject: booking
   Can I book you next tuesday between 12 - 14?

 And get a reply

   mailfrom: 
   subject: booking
	
   Yes
	/have a nice day
	your friend the room :-)

 Why can't I send email to a web-page

  mailto: www.sics.se/~joe/talks/this.pdf
  subject: typo

	you mis-spelt "program" in line 22 

 And get the page to correct itself -

 Why can't I get an instant message when a data base is updated?

 Why do we have separate worlds for managing content/instant messaging/
and non-instant messaging.

 I'd like to *combine* these three.

  Our world has  active objects (servers) we can  send them messages -
or instant messages.

 << a message is like email - connect to the server, send the message,
    disconnect. An *instant message* is like MSN or Jabber, connect to the
    server and *stay* connected >>

  Our servers have state and are connected in a peer-to-peer network.

  We can change content - by sending tagged messages to objects in the
servers.

<< I'd like to things like webdav, irc, file transfer etc. all done
using pure erlang communication. By which I mean, you *only* send
things like:
  
   gen_tcp:send(Socket, term_to_binary({get_file, F}))

   No XML - XDR - anything just binary encoded erlang terms
>>

A while back I wrote a "undedicated daemon" - this is just a daemon that
does nothing - to this basic infrastructure I could plug in a web server
of an irc server etc.

Luke and I chatted using once (or was it twice) - I'll turn this into
a tutorial.

   2) Use the framework (the one above) so solve some worthwhile projects

I three pet projects - which are all bubbling along (slowly) - and I'd love
volunteers to help with these. I'll call them

	- store
	- find
	- publish

Once they work we can glue everything together and make
a nice electronic newspaper :-)


I'll briefly explain:

	store
	=====

  Each machine should  have a data store. When  you put something into
the store it remains their *forever*

<< In the back of my mind *store* is a peer-to-peer backup system.
- "you can use my disk if I can use your disk" - I use a variant of
store between home and work for backup purposes -
it involves an rsync server and a chrontab job ... >>

  If store worked properly we could *eliminate* backup.

	find
	====

  I want  to index *everything* I have  every done so that  I can find
it.

  I want *every* document to  have a GUID (globally unique identifier)
- If I know the GUI I want to be able to find the document.

  I want  to index every  document (ideally, when  I add an  object to
*store* it would  be automatically indexed - I have no  idea how to do
this -  has anybody  got a  good "abstracting" algorithm  - I  need to
extract  information   bearing  words  from  a   document  and  remove
non-information bearing words ...)

      publish
      =======

  Goals make *beautiful* documents from text input (which might be XML)
        make *beautiful* GUIs from same language as the above.
  
  I  want to  create *beautiful*  documents and  GUIs from  the *same*
layout abstractions - I'm  thinking display postscript/PDF for documents
and GUIs - so  far I can create PDF *directly* from  XML and have been
playing with freetype to get nice anti-aliased fonts on the screen.

  I'm thinking of something like 
http://www.df.lth.se/~mazirian/software/aekit/
  
  The motivation  for this is  that wysiwyg programs (word  etc.) suck
(from a typographic point of view) - Quark express, Adobe's Indesign 2
etc.  suck (I hate wysiwyg) and I don't like TeX (you can't accurately
control  the *physical*  layout,  I want  to  say which  pixel on  the
printer a character must start at :-) ...

  So far I can  parse adobe type 1 font metric files  - and make PDF -
I'm working on line justification - (aside - Knuth is quoted as saying
that the line justification problem  was the most difficult problem he
had ever worked on ...) - I have a primitive version running ..

  (( interestingly  Hermann Zapf -  the typographer who  invented Zapf
Dingbats and  Palantino suggested many  typographic improvements which
seem never  to have been implemented  :-) - so there  is definite room
for improvement here -  all I have to do is add  HZ optimizations to my
layout engine :-))

  (( volunteers  are needed for

	1) writing parsers  for truetype font  definition files
and extract the kerning data etc.
	2) writing PDF output driver - I have just made a quick and dirty
driver - this needs more work

Also, anybody who really *uses* quark express etc. and who hates wysiwyg
is welcome to contact me

))



</brain_dump>




 
	




More information about the erlang-questions mailing list