Graph library in Smalltalk - Need for advices

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
27 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Graph library in Smalltalk - Need for advices

cedreek
Hi All (cross-posted squeak and pharo),

I'm more and more in need for some graph lib in smalltalk.
I need graphs to implement special bayesian networks (specific inference mechanisms which aren't probabilistic) and also influence diagrams [1], and maybe in the future, reliablity tools (markov chains, petri nets, ...)...

Do you know any existing smalltalk (open source) projects for graphs? I've only found [2] and [3] from 2005 but don't know them (they don't feel as generic as I would expect).

If not, do you know any open-source projects outside of Smalltalk that I may look at ?
I've found BGL (C++) [3] which was ported in Ruby (RGL) [4].
Does some of you know this lib ? Do you think it would be interesting to have an equivalent in Smalltalk ?

As usual, any comments/advises would be greatly appreciated ;-) ?

Cheers,

Cédrick

[1] http://en.wikipedia.org/wiki/Influence_diagram
[2] http://www.squeaksource.com/Graph
[3] http://www.squeaksource.com/DynaGraph.html
[4] http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html
[5] http://rgl.rubyforge.org/rgl/index.html 




Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

YossiDM
I have the same problem, so I am really interested in what you find out. We've put that dev on hold for now hoping we might luck out in the next few months and someone will develop something or point us to the right place.

We did consider another option which might work for you which is to call things through FFI/Alien. It's really going to depend on the scope and size of analysis you require as well as performance. Some of the more robust libraries in terms of features don't scale well or are difficult to call from Smalltalk, for example Boost Graph.

Another option is there are some java libs, for example JUNG which you might be able to call from some of the Java interop libs that have been developed. I can't remember the names off hand, but I know there are least 2 decent libs in Pharo that let you call to the JVM. There's also Redline Smalltalk in the near future which would let you directly run your Smalltalk code in the JVM and then call a Java lib, but it's probably awhile before you want to consider that for production.

Any other ideas from anyone? I agree that the libs we looked at were incomplete, too simple, or not up to date to even work at all on Pharo. I think we may just develop our own at some point, but we probably won't release anything for a long while to the public given our current dev priorities.
Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Graph library in Smalltalk - Need for advices

Michael Haupt-3
In reply to this post by cedreek
Cédrick,

On 17 December 2010 17:13, Cédrick Béler <[hidden email]> wrote:
> If not, do you know any open-source projects outside of Smalltalk that I may look at ?

JGraphT was quite useful for me once, and it is rather nicely designed IMHO.
http://jgrapht.sourceforge.net/

Best,

Michael

Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

YossiDM
In reply to this post by cedreek
JGraphT worked alright in what I tried against in the past, but it won't scale to huge heights like most libs without major tweaking or a graph DB backing it along with some serious threading.

Just to throw in a few others I've used, but not with Smalltalk:
 
* MTGL
* LEMON
* .NET Quickgraph/Graph#
* iGraph
* SNAP

Of the above, I've had some of the best experience with LEMON in terms of scale and speed for real-world usage. Unfortunately, none of these libraries include everything you'd want, so at some point you will have to roll some stuff yourself. That's been my experience at least.

Some Graph or Graph-like Databases (tend to have some algorithm libs as well):

* InfiniteGraph (this runs on Objectivity underneath the covers which has a Smalltalk impl)
* neo4j
* HyperGraphDB

Some related useful items for dealing with large sets and graphs when you are thinking about performance and/or parallel processing:

* Combinatorial BLAS
* PARLANSE
* DRYAD LINQ

FYI, I would strongly recommend against using Ruby for anything with graphs except as a simple client lib. I spent a lot of time on this before and it simply does not scale or perform to anything beyond very simple cases, and the memory footprint in a real app becomes horrendous. We had to tweak the hell out of some libs to get anything decent and even then we ended up writing stacks of C to compensate. If you're just dealing with 100 vertex undirected graphs, then it works great. It's honestly the fault of a lot of the libs rather than the language, but nonetheless be warned.
Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Stéphane Ducasse
May this is a ridiculuous thought but may be it would be good to start an effort on
build a library for Smalltalk. Reusing some part of mondrian could be good.

Stef


> JGraphT worked alright in what I tried against in the past, but it won't
> scale to huge heights like most libs without major tweaking or a graph DB
> backing it along with some serious threading.
>
> Just to throw in a few others I've used, but not with Smalltalk:
>
> *  https://software.sandia.gov/trac/mtgl MTGL
> *  http://lemon.cs.elte.hu/trac/lemon LEMON
> * .NET  http://quickgraph.codeplex.com/ Quickgraph /Graph#
> *  http://igraph.sourceforge.net/introduction.html iGraph
> *  http://snap-graph.sourceforge.net/ SNAP
>
> Of the above, I've had some of the best experience with LEMON in terms of
> scale and speed for real-world usage. Unfortunately, none of these libraries
> include everything you'd want, so at some point you will have to roll some
> stuff yourself. That's been my experience at least.
>
> Some Graph or Graph-like Databases (tend to have some algorithm libs as
> well):
>
> *  http://www.infinitegraph.com InfiniteGraph  (this runs on Objectivity
> underneath the covers which has a Smalltalk impl)
> *  http://www.neo4j.org neo4j
> *  http://www.kobrix.com/hgdb.jsp HyperGraphDB
>
> Some related useful items for dealing with large sets and graphs when you
> are thinking about performance and/or parallel processing:
>
> *  http://gauss.cs.ucsb.edu/~aydin/doc/html/index.html Combinatorial BLAS
> *  http://www.semanticdesigns.com/Products/PARLANSE/ PARLANSE
> *  http://research.microsoft.com/en-us/projects/dryadlinq/ DRYAD LINQ
>
> FYI, I would strongly recommend against using Ruby for anything with graphs
> except as a simple client lib. I spent a lot of time on this before and it
> simply does not scale or perform to anything beyond very simple cases, and
> the memory footprint in a real app becomes horrendous. We had to tweak the
> hell out of some libs to get anything decent and even then we ended up
> writing stacks of C to compensate. If you're just dealing with 100 vertex
> undirected graphs, then it works great. It's honestly the fault of a lot of
> the libs rather than the language, but nonetheless be warned.
> --
> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3092943.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>


Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Michael Haupt-3
In reply to this post by YossiDM
Yossi,

On 17 December 2010 19:24, YossiDM <[hidden email]> wrote:
> JGraphT worked alright in what I tried against in the past, but it won't
> scale to huge heights like most libs without major tweaking or a graph DB
> backing it along with some serious threading.

indeed I didn't use it for large-scale applications. :-)

Best,

Michael

Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

espin
In reply to this post by cedreek
maybe you find some useful reference in Graphviz's Reference page
http://www.graphviz.org/Resources.php

On Fri, Dec 17, 2010 at 17:13, Cédrick Béler <[hidden email]> wrote:

> Hi All (cross-posted squeak and pharo),
>
> I'm more and more in need for some graph lib in smalltalk.
> I need graphs to implement special bayesian networks (specific inference mechanisms which aren't probabilistic) and also influence diagrams [1], and maybe in the future, reliablity tools (markov chains, petri nets, ...)...
>
> Do you know any existing smalltalk (open source) projects for graphs? I've only found [2] and [3] from 2005 but don't know them (they don't feel as generic as I would expect).
>
> If not, do you know any open-source projects outside of Smalltalk that I may look at ?
> I've found BGL (C++) [3] which was ported in Ruby (RGL) [4].
> Does some of you know this lib ? Do you think it would be interesting to have an equivalent in Smalltalk ?
>
> As usual, any comments/advises would be greatly appreciated ;-) ?
>
> Cheers,
>
> Cédrick
>
> [1] http://en.wikipedia.org/wiki/Influence_diagram
> [2] http://www.squeaksource.com/Graph
> [3] http://www.squeaksource.com/DynaGraph.html
> [4] http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html
> [5] http://rgl.rubyforge.org/rgl/index.html
>
>
>
>
>



--
Enrico Spinielli
"Do Androids dream of electric sheep?"— Philip K. Dick
"Hear and forget; see and remember;do and understand."—Mitchel Resnick

Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Levente Uzonyi-2
In reply to this post by Stéphane Ducasse
On Sat, 18 Dec 2010, Stéphane Ducasse wrote:

> May this is a ridiculuous thought but may be it would be good to start an effort on
> build a library for Smalltalk. Reusing some part of mondrian could be good.

It would be very slow and really a lot of work. Mondrian is nice for
visualization, but a Graph library is a lot more than that.


Levente

>
> Stef
>
>
>> JGraphT worked alright in what I tried against in the past, but it won't
>> scale to huge heights like most libs without major tweaking or a graph DB
>> backing it along with some serious threading.
>>
>> Just to throw in a few others I've used, but not with Smalltalk:
>>
>> *  https://software.sandia.gov/trac/mtgl MTGL
>> *  http://lemon.cs.elte.hu/trac/lemon LEMON
>> * .NET  http://quickgraph.codeplex.com/ Quickgraph /Graph#
>> *  http://igraph.sourceforge.net/introduction.html iGraph
>> *  http://snap-graph.sourceforge.net/ SNAP
>>
>> Of the above, I've had some of the best experience with LEMON in terms of
>> scale and speed for real-world usage. Unfortunately, none of these libraries
>> include everything you'd want, so at some point you will have to roll some
>> stuff yourself. That's been my experience at least.
>>
>> Some Graph or Graph-like Databases (tend to have some algorithm libs as
>> well):
>>
>> *  http://www.infinitegraph.com InfiniteGraph  (this runs on Objectivity
>> underneath the covers which has a Smalltalk impl)
>> *  http://www.neo4j.org neo4j
>> *  http://www.kobrix.com/hgdb.jsp HyperGraphDB
>>
>> Some related useful items for dealing with large sets and graphs when you
>> are thinking about performance and/or parallel processing:
>>
>> *  http://gauss.cs.ucsb.edu/~aydin/doc/html/index.html Combinatorial BLAS
>> *  http://www.semanticdesigns.com/Products/PARLANSE/ PARLANSE
>> *  http://research.microsoft.com/en-us/projects/dryadlinq/ DRYAD LINQ
>>
>> FYI, I would strongly recommend against using Ruby for anything with graphs
>> except as a simple client lib. I spent a lot of time on this before and it
>> simply does not scale or perform to anything beyond very simple cases, and
>> the memory footprint in a real app becomes horrendous. We had to tweak the
>> hell out of some libs to get anything decent and even then we ended up
>> writing stacks of C to compensate. If you're just dealing with 100 vertex
>> undirected graphs, then it works great. It's honestly the fault of a lot of
>> the libs rather than the language, but nonetheless be warned.
>> --
>> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3092943.html
>> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>>
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Stéphane Ducasse
> May this is a ridiculuous thought but may be it would be good to start an effort on
>> build a library for Smalltalk. Reusing some part of mondrian could be good.
>
> It would be very slow and really a lot of work. Mondrian is nice for visualization, but a Graph library is a lot more than that.

But not starting means that we will never have anything.
If there are multiple people needed something this means that they can join forces.
For Moose, mondrian, glamour, petitParser, RB.... nothing came out from a day to the other one
this is just that some guys starred and continued to push.

Stef
Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Alexandre Bergel
In reply to this post by Levente Uzonyi-2
Indeed. Mondrian works relative well for displaying and layout graph below 20.000 nodes. Over that, an external library is best. There is a bridge Mondrian<--> graphviz.

Cheers,
Alexandre


On 18 Dec 2010, at 11:26, Levente Uzonyi wrote:

> On Sat, 18 Dec 2010, Stéphane Ducasse wrote:
>
>> May this is a ridiculuous thought but may be it would be good to start an effort on
>> build a library for Smalltalk. Reusing some part of mondrian could be good.
>
> It would be very slow and really a lot of work. Mondrian is nice for visualization, but a Graph library is a lot more than that.
>
>
> Levente
>
>>
>> Stef
>>
>>
>>> JGraphT worked alright in what I tried against in the past, but it won't
>>> scale to huge heights like most libs without major tweaking or a graph DB
>>> backing it along with some serious threading.
>>>
>>> Just to throw in a few others I've used, but not with Smalltalk:
>>>
>>> *  https://software.sandia.gov/trac/mtgl MTGL
>>> *  http://lemon.cs.elte.hu/trac/lemon LEMON
>>> * .NET  http://quickgraph.codeplex.com/ Quickgraph /Graph#
>>> *  http://igraph.sourceforge.net/introduction.html iGraph
>>> *  http://snap-graph.sourceforge.net/ SNAP
>>>
>>> Of the above, I've had some of the best experience with LEMON in terms of
>>> scale and speed for real-world usage. Unfortunately, none of these libraries
>>> include everything you'd want, so at some point you will have to roll some
>>> stuff yourself. That's been my experience at least.
>>>
>>> Some Graph or Graph-like Databases (tend to have some algorithm libs as
>>> well):
>>>
>>> *  http://www.infinitegraph.com InfiniteGraph  (this runs on Objectivity
>>> underneath the covers which has a Smalltalk impl)
>>> *  http://www.neo4j.org neo4j
>>> *  http://www.kobrix.com/hgdb.jsp HyperGraphDB
>>>
>>> Some related useful items for dealing with large sets and graphs when you
>>> are thinking about performance and/or parallel processing:
>>>
>>> *  http://gauss.cs.ucsb.edu/~aydin/doc/html/index.html Combinatorial BLAS
>>> *  http://www.semanticdesigns.com/Products/PARLANSE/ PARLANSE
>>> *  http://research.microsoft.com/en-us/projects/dryadlinq/ DRYAD LINQ
>>>
>>> FYI, I would strongly recommend against using Ruby for anything with graphs
>>> except as a simple client lib. I spent a lot of time on this before and it
>>> simply does not scale or perform to anything beyond very simple cases, and
>>> the memory footprint in a real app becomes horrendous. We had to tweak the
>>> hell out of some libs to get anything decent and even then we ended up
>>> writing stacks of C to compensate. If you're just dealing with 100 vertex
>>> undirected graphs, then it works great. It's honestly the fault of a lot of
>>> the libs rather than the language, but nonetheless be warned.
>>> --
>>> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3092943.html
>>> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>>>
>>
>>
>>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

cedreek
In reply to this post by YossiDM
Hello,

Thanks all for valuable information given and sorry for answering late...

Personally, I also think we need a graph lib for small scale application (100 nodes maximum). This is actually my needs as our research model won't go beyond 50 nodes I guess (and around the same scale for edges). That being said, in an ideal world, we would have a nice designed library that could map/translate/primitivize to a more efficient lib / functions easily.

I've started looking at the exemples YossiDM gave to me and in particular Lemon which was according to him his best experience. I found the model quite clear and covering all what I expect for a generic graph lib (directed, undirected, mapping concept, iterators, and algorithms of course). Moreover and contrary to Boost, it's still developed in 2010.

To be more precise, here's what I expect for a generic graph lib in smalltalk (note all in Lemon except visualization):

- data structure: directed graphs, undirected graphs, possible loop and parallel edged, ..., trees (?)
- mapping: easily map objects, informations on nodes and/or edges (here, don't know if I'd like subclassing nodes/eges instead...)
- iterators: efficient way to iterate over nodes and edges
- algorithms: basic algorithms implementation (bfs, dfs, ..., shortest paths, ...), and plug-ability for specific ones...
- visualization: having an interactive graph visualization web/SVG and eventually morphic (... graphviz, mondrian, .......)

then, I could use this for my research work...
- I need "belief" nodes with associated conditional beliefs tables
- I need to implement algorithms to propagate an information change (change of a node state) in any nodes...
****mainly, I'd like to get junction trees from a graph [1] which are rely useful for several domains in machine learning field ***

Actually, I don't know if I really need a graph lib as a simple implementation directed to bayesian should be enough but it's the second time I need graphs (last time was for planification) and I think that would be great to have a nice and clean basic implementation.

Couldn't we start developing something similar to Lemon (regarding "API", enitites, etc...) that would work for small scale project project in smalltalk ?
Yossi, what were the limitations you found with Lemon ?

Cheers,

Cédrick


[1] http://en.wikipedia.org/wiki/Junction_tree


>
> JGraphT worked alright in what I tried against in the past, but it won't
> scale to huge heights like most libs without major tweaking or a graph DB
> backing it along with some serious threading.
>
> Just to throw in a few others I've used, but not with Smalltalk:
>
> *  https://software.sandia.gov/trac/mtgl MTGL
> *  http://lemon.cs.elte.hu/trac/lemon LEMON
> * .NET  http://quickgraph.codeplex.com/ Quickgraph /Graph#
> *  http://igraph.sourceforge.net/introduction.html iGraph
> *  http://snap-graph.sourceforge.net/ SNAP
>
> Of the above, I've had some of the best experience with LEMON in terms of
> scale and speed for real-world usage. Unfortunately, none of these libraries
> include everything you'd want, so at some point you will have to roll some
> stuff yourself. That's been my experience at least.
>
> Some Graph or Graph-like Databases (tend to have some algorithm libs as
> well):
>
> *  http://www.infinitegraph.com InfiniteGraph  (this runs on Objectivity
> underneath the covers which has a Smalltalk impl)
> *  http://www.neo4j.org neo4j
> *  http://www.kobrix.com/hgdb.jsp HyperGraphDB
>
> Some related useful items for dealing with large sets and graphs when you
> are thinking about performance and/or parallel processing:
>
> *  http://gauss.cs.ucsb.edu/~aydin/doc/html/index.html Combinatorial BLAS
> *  http://www.semanticdesigns.com/Products/PARLANSE/ PARLANSE
> *  http://research.microsoft.com/en-us/projects/dryadlinq/ DRYAD LINQ
>
> FYI, I would strongly recommend against using Ruby for anything with graphs
> except as a simple client lib. I spent a lot of time on this before and it
> simply does not scale or perform to anything beyond very simple cases, and
> the memory footprint in a real app becomes horrendous. We had to tweak the
> hell out of some libs to get anything decent and even then we ended up
> writing stacks of C to compensate. If you're just dealing with 100 vertex
> undirected graphs, then it works great. It's honestly the fault of a lot of
> the libs rather than the language, but nonetheless be warned.

Thanks ;-)

> --
> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3092943.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>


Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

Stéphane Ducasse
>
> I've started looking at the exemples YossiDM gave to me and in particular Lemon which was according to him his best experience. I found the model quite clear and covering all what I expect for a generic graph lib (directed, undirected, mapping concept, iterators, and algorithms of course). Moreover and contrary to Boost, it's still developed in 2010.
>
> To be more precise, here's what I expect for a generic graph lib in smalltalk (note all in Lemon except visualization):
>
> - data structure: directed graphs, undirected graphs, possible loop and parallel edged, ..., trees (?)
> - mapping: easily map objects, informations on nodes and/or edges (here, don't know if I'd like subclassing nodes/eges instead...)
> - iterators: efficient way to iterate over nodes and edges
> - algorithms: basic algorithms implementation (bfs, dfs, ..., shortest paths, ...), and plug-ability for specific ones...
> - visualization: having an interactive graph visualization web/SVG and eventually morphic (... graphviz, mondrian, .......)
>
> then, I could use this for my research work...
> - I need "belief" nodes with associated conditional beliefs tables
> - I need to implement algorithms to propagate an information change (change of a node state) in any nodes...
> ****mainly, I'd like to get junction trees from a graph [1] which are rely useful for several domains in machine learning field ***
>
> Actually, I don't know if I really need a graph lib as a simple implementation directed to bayesian should be enough but it's the second time I need graphs (last time was for planification) and I think that would be great to have a nice and clean basic implementation.
>
> Couldn't we start developing something similar to Lemon (regarding "API", enitites, etc...) that would work for small scale project project in smalltalk ?

It would be excellent.
Because now that you have a full time permanent position you can invest a bit and in 2 years you can get something really sexy....
This is what we are doing all the time around pharo.

> Yossi, what were the limitations you found with Lemon ?
>
> Cheers,
>
> Cédrick
>


Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

Alexandre Bergel
>> Couldn't we start developing something similar to Lemon (regarding "API", enitites, etc...) that would work for small scale project project in smalltalk ?
>
> It would be excellent.
> Because now that you have a full time permanent position you can invest a bit and in 2 years you can get something really sexy....
> This is what we are doing all the time around pharo.

Indeed, this is what we're doing....

Alexandre


--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

cedreek
In reply to this post by Stéphane Ducasse

>>
>> Couldn't we start developing something similar to Lemon (regarding "API", enitites, etc...) that would work for small scale project project in smalltalk ?
>
> It would be excellent.
> Because now that you have a full time permanent position you can invest a bit and in 2 years you can get something really sexy....
> This is what we are doing all the time around pharo.


yes this is the idea :) have fun and learn... and I learn more when I do it by myself ;). I don't like blackboxes especially for research (we use netica here for bayesian networks).

But again here, I can't do it alone (a generic small scale graph lib). I'll wait to have some feedback from others and see if a consensus arise for the design (the lib to mimic ?)... then I may start if I think I can (but I'll need review).

Cheers,

Cédrick
Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

Tudor Girba
Hi,

I would suggest to also take a look at the graph library implemented by Simon Denier in Moose-Algos (in the Moose-Algos-Graph).

It ships with Moose, but you can also get it independently:

Gofer new
        squeaksource: 'MooseAlgos';
        project: 'ConfigurationOfMooseAlgos';
        load.
(Smalltalk at: #ConfigurationOfMooseAlgos) loadDefault

Cheers,
Doru


On 20 Dec 2010, at 16:22, Cédrick Béler wrote:

>
>>>
>>> Couldn't we start developing something similar to Lemon (regarding "API", enitites, etc...) that would work for small scale project project in smalltalk ?
>>
>> It would be excellent.
>> Because now that you have a full time permanent position you can invest a bit and in 2 years you can get something really sexy....
>> This is what we are doing all the time around pharo.
>
>
> yes this is the idea :) have fun and learn... and I learn more when I do it by myself ;). I don't like blackboxes especially for research (we use netica here for bayesian networks).
>
> But again here, I can't do it alone (a generic small scale graph lib). I'll wait to have some feedback from others and see if a consensus arise for the design (the lib to mimic ?)... then I may start if I think I can (but I'll need review).
>
> Cheers,
>
> Cédrick

--
www.tudorgirba.com

"No matter how many recipes we know, we still value a chef."







Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Chris Muller-3
In reply to this post by Alexandre Bergel
Hi Alexandre, I only have very limited experience with Mondrian, so
please excuse me if this is a stupid question.  Is it possible to
employ an Iterator to simply draw on a raster image rather than
creating a model in RAM?  Perhaps it could be an option?  Would it be
hard to make Mondrian work this way?

For me, Mondrians primary purpose is output, not input.  Being able to
drag around the boxes is cute, but what is the purpose for needing
that sort of input?

 - Chris


On Sat, Dec 18, 2010 at 6:58 PM, Alexandre Bergel <[hidden email]> wrote:

> Indeed. Mondrian works relative well for displaying and layout graph below 20.000 nodes. Over that, an external library is best. There is a bridge Mondrian<--> graphviz.
>
> Cheers,
> Alexandre
>
>
> On 18 Dec 2010, at 11:26, Levente Uzonyi wrote:
>
>> On Sat, 18 Dec 2010, Stéphane Ducasse wrote:
>>
>>> May this is a ridiculuous thought but may be it would be good to start an effort on
>>> build a library for Smalltalk. Reusing some part of mondrian could be good.
>>
>> It would be very slow and really a lot of work. Mondrian is nice for visualization, but a Graph library is a lot more than that.
>>
>>
>> Levente
>>
>>>
>>> Stef
>>>
>>>
>>>> JGraphT worked alright in what I tried against in the past, but it won't
>>>> scale to huge heights like most libs without major tweaking or a graph DB
>>>> backing it along with some serious threading.
>>>>
>>>> Just to throw in a few others I've used, but not with Smalltalk:
>>>>
>>>> *  https://software.sandia.gov/trac/mtgl MTGL
>>>> *  http://lemon.cs.elte.hu/trac/lemon LEMON
>>>> * .NET  http://quickgraph.codeplex.com/ Quickgraph /Graph#
>>>> *  http://igraph.sourceforge.net/introduction.html iGraph
>>>> *  http://snap-graph.sourceforge.net/ SNAP
>>>>
>>>> Of the above, I've had some of the best experience with LEMON in terms of
>>>> scale and speed for real-world usage. Unfortunately, none of these libraries
>>>> include everything you'd want, so at some point you will have to roll some
>>>> stuff yourself. That's been my experience at least.
>>>>
>>>> Some Graph or Graph-like Databases (tend to have some algorithm libs as
>>>> well):
>>>>
>>>> *  http://www.infinitegraph.com InfiniteGraph  (this runs on Objectivity
>>>> underneath the covers which has a Smalltalk impl)
>>>> *  http://www.neo4j.org neo4j
>>>> *  http://www.kobrix.com/hgdb.jsp HyperGraphDB
>>>>
>>>> Some related useful items for dealing with large sets and graphs when you
>>>> are thinking about performance and/or parallel processing:
>>>>
>>>> *  http://gauss.cs.ucsb.edu/~aydin/doc/html/index.html Combinatorial BLAS
>>>> *  http://www.semanticdesigns.com/Products/PARLANSE/ PARLANSE
>>>> *  http://research.microsoft.com/en-us/projects/dryadlinq/ DRYAD LINQ
>>>>
>>>> FYI, I would strongly recommend against using Ruby for anything with graphs
>>>> except as a simple client lib. I spent a lot of time on this before and it
>>>> simply does not scale or perform to anything beyond very simple cases, and
>>>> the memory footprint in a real app becomes horrendous. We had to tweak the
>>>> hell out of some libs to get anything decent and even then we ended up
>>>> writing stacks of C to compensate. If you're just dealing with 100 vertex
>>>> undirected graphs, then it works great. It's honestly the fault of a lot of
>>>> the libs rather than the language, but nonetheless be warned.
>>>> --
>>>> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3092943.html
>>>> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>>
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Graph library in Smalltalk - Need for advices

Alexandre Bergel
Hi Chris,

> Hi Alexandre, I only have very limited experience with Mondrian, so
> please excuse me if this is a stupid question.  Is it possible to
> employ an Iterator to simply draw on a raster image rather than
> creating a model in RAM?  Perhaps it could be an option?  Would it be
> hard to make Mondrian work this way?

I am not sure what you mean by raster image.
I just added MOImageShape.
Update to the last version, open an easel and try:

MondrianIcons icons associationsDo: [ :assoc |
        view shape image form: assoc value.
        view node: assoc key
]

Is this what you meant?

> For me, Mondrians primary purpose is output, not input.  Being able to
> drag around the boxes is cute, but what is the purpose for needing
> that sort of input?

You mean, interactively adding boxes and edges?

Cheers,
Alexandre

>
>
> On Sat, Dec 18, 2010 at 6:58 PM, Alexandre Bergel <[hidden email]> wrote:
>> Indeed. Mondrian works relative well for displaying and layout graph below 20.000 nodes. Over that, an external library is best. There is a bridge Mondrian<--> graphviz.
>>
>> Cheers,
>> Alexandre
>>
>>
>> On 18 Dec 2010, at 11:26, Levente Uzonyi wrote:
>>
>>> On Sat, 18 Dec 2010, Stéphane Ducasse wrote:
>>>
>>>> May this is a ridiculuous thought but may be it would be good to start an effort on
>>>> build a library for Smalltalk. Reusing some part of mondrian could be good.
>>>
>>> It would be very slow and really a lot of work. Mondrian is nice for visualization, but a Graph library is a lot more than that.
>>>
>>>
>>> Levente
>>>
>>>>
>>>> Stef
>>>>
>>>>
>>>>> JGraphT worked alright in what I tried against in the past, but it won't
>>>>> scale to huge heights like most libs without major tweaking or a graph DB
>>>>> backing it along with some serious threading.
>>>>>
>>>>> Just to throw in a few others I've used, but not with Smalltalk:
>>>>>
>>>>> *  https://software.sandia.gov/trac/mtgl MTGL
>>>>> *  http://lemon.cs.elte.hu/trac/lemon LEMON
>>>>> * .NET  http://quickgraph.codeplex.com/ Quickgraph /Graph#
>>>>> *  http://igraph.sourceforge.net/introduction.html iGraph
>>>>> *  http://snap-graph.sourceforge.net/ SNAP
>>>>>
>>>>> Of the above, I've had some of the best experience with LEMON in terms of
>>>>> scale and speed for real-world usage. Unfortunately, none of these libraries
>>>>> include everything you'd want, so at some point you will have to roll some
>>>>> stuff yourself. That's been my experience at least.
>>>>>
>>>>> Some Graph or Graph-like Databases (tend to have some algorithm libs as
>>>>> well):
>>>>>
>>>>> *  http://www.infinitegraph.com InfiniteGraph  (this runs on Objectivity
>>>>> underneath the covers which has a Smalltalk impl)
>>>>> *  http://www.neo4j.org neo4j
>>>>> *  http://www.kobrix.com/hgdb.jsp HyperGraphDB
>>>>>
>>>>> Some related useful items for dealing with large sets and graphs when you
>>>>> are thinking about performance and/or parallel processing:
>>>>>
>>>>> *  http://gauss.cs.ucsb.edu/~aydin/doc/html/index.html Combinatorial BLAS
>>>>> *  http://www.semanticdesigns.com/Products/PARLANSE/ PARLANSE
>>>>> *  http://research.microsoft.com/en-us/projects/dryadlinq/ DRYAD LINQ
>>>>>
>>>>> FYI, I would strongly recommend against using Ruby for anything with graphs
>>>>> except as a simple client lib. I spent a lot of time on this before and it
>>>>> simply does not scale or perform to anything beyond very simple cases, and
>>>>> the memory footprint in a real app becomes horrendous. We had to tweak the
>>>>> hell out of some libs to get anything decent and even then we ended up
>>>>> writing stacks of C to compensate. If you're just dealing with 100 vertex
>>>>> undirected graphs, then it works great. It's honestly the fault of a lot of
>>>>> the libs rather than the language, but nonetheless be warned.
>>>>> --
>>>>> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3092943.html
>>>>> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>>>>>
>>>>
>>>>
>>>>
>>
>> --
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel  http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>>
>>
>>
>>
>>
>>
>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

YossiDM
In reply to this post by Stéphane Ducasse
Sorry for the late reply, I've been away on business. I'm going to have to make one of those unfortunate long posts, so hopefully I can hold the attention span of those already interested anyway.

Cédrick - I found the main limitation with Lemon to be that it was a pain to extend as well as to integrate a nice persistence layer.

Stéphane, regarding Mondrian - I've looked over the code and while it's ok for what it does, I think everyone would admit it's not designed to be a real graph library. It does what it needs to do and no more, so I would keep it that way for now. You really do need to design a good graph lib from the ground up.

It's been my experience after using probably 20 different graph libraries in real projects over the years that the following themes reoccur:

1. Library is good for visualization, but not for calculations - shortest path, centrality, MST, etc.

2. Library is good for algorithms but has no visualization support

3. Graph library relies too much on other libraries that are not that impressive either. Graphviz comes to mine. Great tool, but frankly the visualizations looks awful by today's standards and it's harder to do something fully dynamic. Piping a dot file to a unix process to produce a static image is not terribly useful in things like web applications.

4. Library does not scale predictably or to a certain point.

5. Library does not support persistence properly.

6. Library forces an API that takes over your data too much or doesn't play well with existing data. Any model that forces inheritance for Vertex and Edge classes comes to mind. See neo4j for some examples of a poor API on this point.

7. Library is good all around but lacks depth (missing algorithms, measures, etc) and does not play well with others.

8. Every library has its own idea of what a vertex and edge should be and there's no good way of passing data between them in a nice manner.

9. Visualization libraries have a multitude of issues - specific to desktop or web only, static output, no capability to annotate vertex or edges, no pruning... I have yet to find one that is both pretty and useful to this day without nearly recreating a new library each time.

The reality is every library will have to make compromises at a minimum in the following areas:

1. Scalability
2. Data structures
3. Algorithms
4. Performance
5. Visualization

I think you need to at least consider all the above when creating a library. In fact, you probably should break it up as many libraries do into several components:

1. Common, useful data structures (Vertex, Edge, Adjacency List, Adjaceny Matrix, etc.) that are optimized for your language - hopefully smalltalk

2. Computations / Measurements

3. Algorithms - layout, common graph problems, etc.

4. Persistence - database or otherwise, likely several supporting libs specific to the persistence mechanism or implementing some kind of pattern to be agnostic. The data structures should at least be designed in such a way that they are persistence friendly to put in something like Gemstone, Magma, Image, etc. See for example InfiniteGraph which has a Java interface built on Objectivity.

5. Visualization - desktop, web, and static output.

The problem here is that creating a graph library is a huge undertaking. It might not sound like it, but they can grow to epic proportions. From my comments, you can see that it is really not the fault of any particular lib, but rather the subject matter. You could spend a lifetime packing in features. The real key is just to create a series of libs that work well together and not constantly reinvent the wheel with node classes in each library.

A secondary problem is doing graph analysis and even drawing graphs can take a lot of horse power. Parallelism is a tough issue with graph libraries and there's a multitude of approaches from pure threads to map/reduce to random walking and stream processing.  This is further compounded by persistence where you need to start doing things like graph healing, partitioning, and sharding to scale to massive levels and maintain performance.

I just want to mention to others that graphs are hugely useful in general to solve a variety of problems from recommendations to meta programming. It's not just pretty pictures and experiments with molecules. There's a lot of potential in Smalltalk to do something since generally I feel Smalltalkers aren't bound by or afraid of new approaches to old problems. Graph databases in many cases could replace relational DBs for example and let your app do all kinds of stuff you might never have thought of otherwise.

I could go on and on, but I'll stop myself here. Comments or thoughts?





Stéphane Ducasse wrote
>
> I've started looking at the exemples YossiDM gave to me and in particular Lemon which was according to him his best experience. I found the model quite clear and covering all what I expect for a generic graph lib (directed, undirected, mapping concept, iterators, and algorithms of course). Moreover and contrary to Boost, it's still developed in 2010.
>
> To be more precise, here's what I expect for a generic graph lib in smalltalk (note all in Lemon except visualization):
>
> - data structure: directed graphs, undirected graphs, possible loop and parallel edged, ..., trees (?)
> - mapping: easily map objects, informations on nodes and/or edges (here, don't know if I'd like subclassing nodes/eges instead...)
> - iterators: efficient way to iterate over nodes and edges
> - algorithms: basic algorithms implementation (bfs, dfs, ..., shortest paths, ...), and plug-ability for specific ones...
> - visualization: having an interactive graph visualization web/SVG and eventually morphic (... graphviz, mondrian, .......)
>
> then, I could use this for my research work...
> - I need "belief" nodes with associated conditional beliefs tables
> - I need to implement algorithms to propagate an information change (change of a node state) in any nodes...
> ****mainly, I'd like to get junction trees from a graph [1] which are rely useful for several domains in machine learning field ***
>
> Actually, I don't know if I really need a graph lib as a simple implementation directed to bayesian should be enough but it's the second time I need graphs (last time was for planification) and I think that would be great to have a nice and clean basic implementation.
>
> Couldn't we start developing something similar to Lemon (regarding "API", enitites, etc...) that would work for small scale project project in smalltalk ?

It would be excellent.
Because now that you have a full time permanent position you can invest a bit and in 2 years you can get something really sexy....
This is what we are doing all the time around pharo.

> Yossi, what were the limitations you found with Lemon ?
>
> Cheers,
>
> Cédrick
>

Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

Alexandre Bergel
> Stéphane, regarding Mondrian - I've looked over the code and while it's ok
> for what it does, I think everyone would admit it's not designed to be a
> real graph library. It does what it needs to do and no more, so I would keep
> it that way for now. You really do need to design a good graph lib from the
> ground up.

Mondrian does not mean to replace GraphViz or anything like this.
Note that there is a bridge Mondrian <--> GraphViz.

Cheers,
Alexandre


>
> It's been my experience after using probably 20 different graph libraries in
> real projects over the years that the following themes reoccur:
>
> 1. Library is good for visualization, but not for calculations - shortest
> path, centrality, MST, etc.
>
> 2. Library is good for algorithms but has no visualization support
>
> 3. Graph library relies too much on other libraries that are not that
> impressive either. Graphviz comes to mine. Great tool, but frankly the
> visualizations looks awful by today's standards and it's harder to do
> something fully dynamic. Piping a dot file to a unix process to produce a
> static image is not terribly useful in things like web applications.
>
> 4. Library does not scale predictably or to a certain point.
>
> 5. Library does not support persistence properly.
>
> 6. Library forces an API that takes over your data too much or doesn't play
> well with existing data. Any model that forces inheritance for Vertex and
> Edge classes comes to mind. See neo4j for some examples of a poor API on
> this point.
>
> 7. Library is good all around but lacks depth (missing algorithms, measures,
> etc) and does not play well with others.
>
> 8. Every library has its own idea of what a vertex and edge should be and
> there's no good way of passing data between them in a nice manner.
>
> 9. Visualization libraries have a multitude of issues - specific to desktop
> or web only, static output, no capability to annotate vertex or edges, no
> pruning... I have yet to find one that is both pretty and useful to this day
> without nearly recreating a new library each time.
>
> The reality is every library will have to make compromises at a minimum in
> the following areas:
>
> 1. Scalability
> 2. Data structures
> 3. Algorithms
> 4. Performance
> 5. Visualization
>
> I think you need to at least consider all the above when creating a library.
> In fact, you probably should break it up as many libraries do into several
> components:
>
> 1. Common, useful data structures (Vertex, Edge, Adjacency List, Adjaceny
> Matrix, etc.) that are optimized for your language - hopefully smalltalk
>
> 2. Computations / Measurements
>
> 3. Algorithms - layout, common graph problems, etc.
>
> 4. Persistence - database or otherwise, likely several supporting libs
> specific to the persistence mechanism or implementing some kind of pattern
> to be agnostic. The data structures should at least be designed in such a
> way that they are persistence friendly to put in something like Gemstone,
> Magma, Image, etc. See for example InfiniteGraph which has a Java interface
> built on Objectivity.
>
> 5. Visualization - desktop, web, and static output.
>
> The problem here is that creating a graph library is a huge undertaking. It
> might not sound like it, but they can grow to epic proportions. From my
> comments, you can see that it is really not the fault of any particular lib,
> but rather the subject matter. You could spend a lifetime packing in
> features. The real key is just to create a series of libs that work well
> together and not constantly reinvent the wheel with node classes in each
> library.
>
> A secondary problem is doing graph analysis and even drawing graphs can take
> a lot of horse power. Parallelism is a tough issue with graph libraries and
> there's a multitude of approaches from pure threads to map/reduce to random
> walking and stream processing.  This is further compounded by persistence
> where you need to start doing things like graph healing, partitioning, and
> sharding to scale to massive levels and maintain performance.
>
> I just want to mention to others that graphs are hugely useful in general to
> solve a variety of problems from recommendations to meta programming. It's
> not just pretty pictures and experiments with molecules. There's a lot of
> potential in Smalltalk to do something since generally I feel Smalltalkers
> aren't bound by or afraid of new approaches to old problems. Graph databases
> in many cases could replace relational DBs for example and let your app do
> all kinds of stuff you might never have thought of otherwise.
>
> I could go on and on, but I'll stop myself here. Comments or thoughts?
>
>
>
>
>
>
> Stéphane Ducasse wrote:
>>
>>>
>>> I've started looking at the exemples YossiDM gave to me and in particular
>>> Lemon which was according to him his best experience. I found the model
>>> quite clear and covering all what I expect for a generic graph lib
>>> (directed, undirected, mapping concept, iterators, and algorithms of
>>> course). Moreover and contrary to Boost, it's still developed in 2010.
>>>
>>> To be more precise, here's what I expect for a generic graph lib in
>>> smalltalk (note all in Lemon except visualization):
>>>
>>> - data structure: directed graphs, undirected graphs, possible loop and
>>> parallel edged, ..., trees (?)
>>> - mapping: easily map objects, informations on nodes and/or edges (here,
>>> don't know if I'd like subclassing nodes/eges instead...)
>>> - iterators: efficient way to iterate over nodes and edges
>>> - algorithms: basic algorithms implementation (bfs, dfs, ..., shortest
>>> paths, ...), and plug-ability for specific ones...
>>> - visualization: having an interactive graph visualization web/SVG and
>>> eventually morphic (... graphviz, mondrian, .......)
>>>
>>> then, I could use this for my research work...
>>> - I need "belief" nodes with associated conditional beliefs tables
>>> - I need to implement algorithms to propagate an information change
>>> (change of a node state) in any nodes...
>>> ****mainly, I'd like to get junction trees from a graph [1] which are
>>> rely useful for several domains in machine learning field ***
>>>
>>> Actually, I don't know if I really need a graph lib as a simple
>>> implementation directed to bayesian should be enough but it's the second
>>> time I need graphs (last time was for planification) and I think that
>>> would be great to have a nice and clean basic implementation.
>>>
>>> Couldn't we start developing something similar to Lemon (regarding "API",
>>> enitites, etc...) that would work for small scale project project in
>>> smalltalk ?
>>
>> It would be excellent.
>> Because now that you have a full time permanent position you can invest a
>> bit and in 2 years you can get something really sexy....
>> This is what we are doing all the time around pharo.
>>
>>> Yossi, what were the limitations you found with Lemon ?
>>>
>>> Cheers,
>>>
>>> Cédrick
>>>
>>
>>
>>
>>
>
> --
> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3159886.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: Graph library in Smalltalk - Need for advices

Stéphane Ducasse
In reply to this post by YossiDM

On Dec 22, 2010, at 12:25 AM, YossiDM wrote:

>
> Sorry for the late reply, I've been away on business. I'm going to have to
> make one of those unfortunate long posts, so hopefully I can hold the
> attention span of those already interested anyway.
>
> Cédrick - I found the main limitation with Lemon to be that it was a pain to
> extend as well as to integrate a nice persistence layer.
>
> Stéphane, regarding Mondrian - I've looked over the code and while it's ok
> for what it does, I think everyone would admit it's not designed to be a
> real graph library. It does what it needs to do and no more, so I would keep
> it that way for now. You really do need to design a good graph lib from the
> ground up.

yes mondrian is not about a graph lib. It is a tool to draw potentially graphs


>
> It's been my experience after using probably 20 different graph libraries in
> real projects over the years that the following themes reoccur:
>
> 1. Library is good for visualization, but not for calculations - shortest
> path, centrality, MST, etc.
>
> 2. Library is good for algorithms but has no visualization support
>
> 3. Graph library relies too much on other libraries that are not that
> impressive either. Graphviz comes to mine. Great tool, but frankly the
> visualizations looks awful by today's standards and it's harder to do
> something fully dynamic. Piping a dot file to a unix process to produce a
> static image is not terribly useful in things like web applications.
>
> 4. Library does not scale predictably or to a certain point.
>
> 5. Library does not support persistence properly.
>
> 6. Library forces an API that takes over your data too much or doesn't play
> well with existing data. Any model that forces inheritance for Vertex and
> Edge classes comes to mind. See neo4j for some examples of a poor API on
> this point.
>
> 7. Library is good all around but lacks depth (missing algorithms, measures,
> etc) and does not play well with others.
>
> 8. Every library has its own idea of what a vertex and edge should be and
> there's no good way of passing data between them in a nice manner.
>
> 9. Visualization libraries have a multitude of issues - specific to desktop
> or web only, static output, no capability to annotate vertex or edges, no
> pruning... I have yet to find one that is both pretty and useful to this day
> without nearly recreating a new library each time.
>
> The reality is every library will have to make compromises at a minimum in
> the following areas:
>
> 1. Scalability
> 2. Data structures
> 3. Algorithms
> 4. Performance
> 5. Visualization
>
> I think you need to at least consider all the above when creating a library.
> In fact, you probably should break it up as many libraries do into several
> components:
>
> 1. Common, useful data structures (Vertex, Edge, Adjacency List, Adjaceny
> Matrix, etc.) that are optimized for your language - hopefully smalltalk
>
> 2. Computations / Measurements
>
> 3. Algorithms - layout, common graph problems, etc.
>
> 4. Persistence - database or otherwise, likely several supporting libs
> specific to the persistence mechanism or implementing some kind of pattern
> to be agnostic. The data structures should at least be designed in such a
> way that they are persistence friendly to put in something like Gemstone,
> Magma, Image, etc. See for example InfiniteGraph which has a Java interface
> built on Objectivity.
>
> 5. Visualization - desktop, web, and static output.
>
> The problem here is that creating a graph library is a huge undertaking. It
> might not sound like it, but they can grow to epic proportions. From my
> comments, you can see that it is really not the fault of any particular lib,
> but rather the subject matter. You could spend a lifetime packing in
> features. The real key is just to create a series of libs that work well
> together and not constantly reinvent the wheel with node classes in each
> library.
>
> A secondary problem is doing graph analysis and even drawing graphs can take
> a lot of horse power. Parallelism is a tough issue with graph libraries and
> there's a multitude of approaches from pure threads to map/reduce to random
> walking and stream processing.  This is further compounded by persistence
> where you need to start doing things like graph healing, partitioning, and
> sharding to scale to massive levels and maintain performance.
>
> I just want to mention to others that graphs are hugely useful in general to
> solve a variety of problems from recommendations to meta programming. It's
> not just pretty pictures and experiments with molecules. There's a lot of
> potential in Smalltalk to do something since generally I feel Smalltalkers
> aren't bound by or afraid of new approaches to old problems. Graph databases
> in many cases could replace relational DBs for example and let your app do
> all kinds of stuff you might never have thought of otherwise.
>
> I could go on and on, but I'll stop myself here. Comments or thoughts?
>
>
>
>
>
>
> Stéphane Ducasse wrote:
>>
>>>
>>> I've started looking at the exemples YossiDM gave to me and in particular
>>> Lemon which was according to him his best experience. I found the model
>>> quite clear and covering all what I expect for a generic graph lib
>>> (directed, undirected, mapping concept, iterators, and algorithms of
>>> course). Moreover and contrary to Boost, it's still developed in 2010.
>>>
>>> To be more precise, here's what I expect for a generic graph lib in
>>> smalltalk (note all in Lemon except visualization):
>>>
>>> - data structure: directed graphs, undirected graphs, possible loop and
>>> parallel edged, ..., trees (?)
>>> - mapping: easily map objects, informations on nodes and/or edges (here,
>>> don't know if I'd like subclassing nodes/eges instead...)
>>> - iterators: efficient way to iterate over nodes and edges
>>> - algorithms: basic algorithms implementation (bfs, dfs, ..., shortest
>>> paths, ...), and plug-ability for specific ones...
>>> - visualization: having an interactive graph visualization web/SVG and
>>> eventually morphic (... graphviz, mondrian, .......)
>>>
>>> then, I could use this for my research work...
>>> - I need "belief" nodes with associated conditional beliefs tables
>>> - I need to implement algorithms to propagate an information change
>>> (change of a node state) in any nodes...
>>> ****mainly, I'd like to get junction trees from a graph [1] which are
>>> rely useful for several domains in machine learning field ***
>>>
>>> Actually, I don't know if I really need a graph lib as a simple
>>> implementation directed to bayesian should be enough but it's the second
>>> time I need graphs (last time was for planification) and I think that
>>> would be great to have a nice and clean basic implementation.
>>>
>>> Couldn't we start developing something similar to Lemon (regarding "API",
>>> enitites, etc...) that would work for small scale project project in
>>> smalltalk ?
>>
>> It would be excellent.
>> Because now that you have a full time permanent position you can invest a
>> bit and in 2 years you can get something really sexy....
>> This is what we are doing all the time around pharo.
>>
>>> Yossi, what were the limitations you found with Lemon ?
>>>
>>> Cheers,
>>>
>>> Cédrick
>>>
>>
>>
>>
>>
>
> --
> View this message in context: http://forum.world.st/Graph-library-in-Smalltalk-Need-for-advices-tp3092747p3159886.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>


12