this is a nice analysis.
Now I think that if different lib are needed for people then starting to build some of them is important. I know that Jannik also implemented and optimize tarjan and other graph algorithms for moose so cedric it would be probably a good start to check that and probably to make the moose graph algo lib a separate entity. We (the moose people) also need a good graph lib. Stef > 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. > _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev |
Like I wrote before, MooseAlgos is a separate and independent project.
But, yes, it would be really great to have a stronger effort around these topics, and the Moose community could provide the right environment for this. Cheers, Doru On 22 Dec 2010, at 08:50, Stéphane Ducasse wrote: > this is a nice analysis. > > Now I think that if different lib are needed for people then starting to build some of them is important. > I know that Jannik also implemented and optimize tarjan and other graph algorithms for moose so > cedric it would be probably a good start to check that and probably to make the moose graph algo lib a separate entity. We (the moose people) also need a good graph lib. > > Stef > >> 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. >> > > -- www.tudorgirba.com "Speaking louder won't make the point worthier." _______________________________________________ Moose-dev mailing list [hidden email] https://www.iam.unibe.ch/mailman/listinfo/moose-dev |
Free forum by Nabble | Edit this page |