Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Shantanu Kumar


On Mar 16, 9:01 am, CuppoJava patrickli_2...@hotmail.com wrote:
 Hello everyone,

 This has been a long-time software engineering issue that I've never
 solved happily. It concerns implementing marking algorithms without
 making a kludge of your software structure.

 eg. Say I have a binary graph:
 Where each node in the graph is like this:
 class Node{
   Node[] children;

 }

 And now I'm going to implement another static function somewhere to
 print out all the nodes in a graph, but without repeating elements.

 This is the header:
 void print(Node graph);

 The print function must print out each node, and then recurse down
 it's children. It also must have some way of remembering which Nodes
 it has already printed so as not to print it again.

 The simplest, and most performant way of doing this is to have a
 special field in Node that indicates whether it has been visited or
 not:

 class Node{
   Node[] children;
   boolean visited;

 }

 The print function can then use this field to mark which nodes have
 been visited.

 However, the visited field has nothing to do with the actual Node
 class. It's simply for other functions to use as a marker.

 This solution is kludgy, but I cannot see any other *performant* way
 of doing this. Hashmaps are out of the question because of the
 unnecessary space waste.

 If someone knows of a better way of implementing these marking
 algorithms, or a nice way of organizing these marker fields, I would
 love to hear your workarounds.

Use the node's metadata to annotate :visited as true and re-associate,
and do it recursively (likely with loop recur)?

Regards,
Shantanu

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Mark Engelberg
On Tue, Mar 15, 2011 at 11:12 PM, Shantanu Kumar
kumar.shant...@gmail.comwrote:

 Use the node's metadata to annotate :visited as true and re-associate,
 and do it recursively (likely with loop recur)?

 Regards,
 Shantanu


Altering metadata is generally a non-destructive operation (with-meta), and
alter-meta! only works on refs/agents/etc.  So I don't see how you could use
metadata in this manner.  You'd effectively be creating new nodes as you
traverse the tree, and then the pointers between the nodes would get
totally screwed up.  Can you elaborate on your idea?

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Need help with a macro with rest parameter

2011-03-16 Thread Tassilo Horn
Hi all,

for testing my FunQL clojure graph query language against another query
language (GReQL), I want to write tests like that:

(defcomparisontest class-count-restricted (gbjg)
  ;; GReQL version
  count(V{ClassDefinition})
  ;; FunQL variant 1
  (vcount (gbjg) :cls 'ClassDefinition)
  ;; FunQL variant 2
  (count (vseq (gbjg) :cls 'ClassDefinition)))

So you provide the name of the test, the graph the query is evaluated
on, a GReQL reference query, and arbitrary many FunQL forms that have to
calculate the exact same result.

I had such a macro that expects exactly one funql form, but while trying
to extend that to arbitrary many funqls, I've reached the limit of my
macro foo.

That's what I have come up with:

(defmacro defcomparisontest
  Define a GReQL/FunQL comparison test with name n on graph g that asserts the
equality of the results evaluating greql and all funqls.
  [n g greql  funqls]
  `(deftest ~n
 ~g ;; ensure the graph is loaded, if it is given as memoized function.
 (println )
 (println Comparison test: ~(name n))
 (let [gr# (do
 (print GReQL evaluation time:)
 (jvalue-unpack (time (greql-eval ~g ~greql]
   (doseq [funql# '~funqls]
   (print FunQL evaluation time:)
   (is (= gr#
  (time (let [r# funql#]
  (if (instance? clojure.lang.LazySeq r#)
(doall r#)
r#)

Here, the problem is that the comparison compares the evaluation result
of the greql query against gr# the unevaluated funql form.

So I replaced the (let [r# funql#] with (let [r# (eval funql#)], but then
I seem to have namespace issues.  I get errors like

  java.lang.Exception: Unable to resolve symbol: vcount in this context
  java.lang.Exception: Unable to resolve symbol: vseq in this context

which both are functions defined in funql.core, which my funql.test.core
namespace uses; (:use [funql.core] :reload) in the ns definition.

Could anyone with some advanced macro foo enlighten me how to do it
right?

By the way: in general, I would prefer if the expansion would contain a
sequence of (do ...) blocks with one assertion, one for each funql in
funqls, instead of the doseq.

Thanks a bunch in advance!
Tassilo

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Need help with a macro with rest parameter

2011-03-16 Thread Tassilo Horn
Hi all,

raek helped me on IRC, and that's what finally works:

(defmacro defcomparisontest
  Define a GReQL/FunQL comparison test with name n on graph g that asserts the
equality of the results evaluating greql and all funqls.
  [n g greql  funqls]
  `(deftest ~n
 ~g ;; ensure the graph is loaded, if it is given as memoized function.
 (println )
 (println Comparison test: ~(name n))
 (let [gr# (do
 (print GReQL evaluation time:)
 (jvalue-unpack (time (greql-eval ~g ~greql]
   (doseq [funql-fn# ~(vec (for [funql funqls] `(fn [] ~funql)))]
 (print FunQL evaluation time:)
 (is (= gr#
(time (let [r# (funql-fn#)]
(if (instance? clojure.lang.LazySeq r#)
  (doall r#)
  r#)

Bye,
Tassilo

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


xml parsing

2011-03-16 Thread Abraham
Dear friends

I am trying to parse xml file 
following is code

(def xml-file d:/clj/xmlfiles/orders.xml)
(def xmldata (clojure.xml/parse xml-file))
(println xmldata)

Output is :

{:tag :order, :attrs {:orderid 1/2011}, :content [{:tag :party, :attrs nil, 
:con
tent [ XYZ Ltd ]} {:tag :address, :attrs nil, :content [{:tag :block, :attrs 
nil
, :content [ Abcd.]} {:tag :street, :attrs nil, :content [ xyz ]} {:tag 
:city, :
attrs nil, :content [ 123]} {:tag :state, :attrs nil, :content [ in ]}]}]


Now i change to output xml seq  usng xml-seq

(def xml-file d:/clj/xmlfiles/orders.xml)
(def xmlseq (xml-seq (clojure.xml/parse xml-file)))
(println xmlseq)

Ouput is :
({:tag :order, :attrs {:orderid 1/2011}, :content [{:tag :party, :attrs nil, 
:co
ntent [ XYZ Ltd ]} {:tag :address, :attrs nil, :content [{:tag :block, 
:attrs ni
l, :content [ Abcd.]} {:tag :street, :attrs nil, :content [ xyz ]} {:tag 
:city,
:attrs nil, :content [ 123]} {:tag :state, :attrs nil, :content [ in ]}]}]} 
{:ta
g :party, :attrs nil, :content [ XYZ Ltd ]}  XYZ Ltd  {:tag :address, :attrs 
nil
, :content [{:tag :block, :attrs nil, :content [ Abcd.]} {:tag :street, 
:attrs n
il, :content [ xyz ]} {:tag :city, :attrs nil, :content [ 123]} {:tag 
:state, :a
ttrs nil, :content [ in ]}]} {:tag :block, :attrs nil, :content [ Abcd.]} 
 Abcd.
 {:tag :street, :attrs nil, :content [ xyz ]}  xyz  {:tag :city, :attrs nil, 
:co
ntent [ 123]}  123 {:tag :state, :attrs nil, :content [ in ]}  in )


Here the output show double items for each tag... what's problem ?

Thanks in advance
Vincent

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: Clojure Editor

2011-03-16 Thread WoodHacker
Check preferences from the toolbar or the Bluefish dropdown.There
are checks for Smart Auto Indenting and Highlighting block
delimiters.There's very little this editor doesn't do.You just
have to make sure all the checks you want are set.

Bill

On Mar 14, 10:06 pm, Lee Spector lspec...@hampshire.edu wrote:
 The Clojure mode activates for me, and I get a little bit syntax coloring, 
 autocompletion, and () matching. But I don't get language aware indentation. 
 Should I, or isn't this supported? (It's a really important feature IMHO.) 
 Also, no matching of [] or {} (less important for me).

 Thanks,

  -Lee

 On Mar 14, 2011, at 8:06 AM, WoodHacker wrote: The file you need should be 
 there.   First look under the Document/
  Language Support menu item.   You should see and entry for Clojure.
  Try checking it.    The syntax file is called clojure.bflang2 and it
  should be in a Bluefish directory somewhere on your system.   I am
  using a MAC, so the file is under the /Applicatiions directory.    If
  you need to adjust the bflang2 file for some reason, the file that
  explains how to do it is Sample.bflang2.    If none of this makes
  sense and you can't find clojure.bflang2, try contacting the Bluefish
  people by sending and email to bluefish-us...@lists.ems.ru.

  On Mar 13, 9:49 am, Shantanu Kumar kumar.shant...@gmail.com wrote:
  Do I need a plugin? I downloaded the stock 2.0.3-1 version of the
  editor and it doesn't even seem to syntax-highlight the Clojure code.

  Regards,
  Shantanu

  On Mar 13, 5:09 pm, WoodHacker ramsa...@comcast.net wrote: If you are 
  looking for a very good editor for Clojure try Bluefish.
  It's been around for ever, is very stable, and does everything you
  would want an editor to do.   And it now works with Clojure.

     http://bluefish.openoffice.nl

  Bill

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: clj-ldap - Clojure LDAP client

2011-03-16 Thread Ray Miller
On 15 March 2011 08:46, Saul Hazledine shaz...@gmail.com wrote:
 On Mar 15, 1:30 am, Paul Dorman paul.dor...@gmail.com wrote:
 One thought though is that it may be quicker simply do a lookup on the
 directory server, obtain the password and then do a compare. In
 OpenLDAP, posixUser uids are indexed by default. Java libraries are
 available for most password encryption algorithms. This is the
 approach I use - do you know of any problems with my method?

Certainly when I was running LDAP servers we did not allow passwords
to be retrieved from the server, as they are then susceptible to an
offline dictionary attack. To authenticate users, you had to send a
bind request to the server.

Ray.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Lava Kafle
could we push the visited nodes in a stack and finally pop all? although its
a hellish act performance wise removing visted nodes and adding later


On Wed, Mar 16, 2011 at 10:20 AM, Mark Engelberg
mark.engelb...@gmail.comwrote:

 Using the traditional visited flag approach, your program will fail if two
 threads try to print the same tree structure at the same time.

 I personally have found the hash table approach to be very effective.  It
 uses space, but the space can be garbage collected as soon as you're
 finished with the task.

 Another good option is to store a unique numeric id from 0 to n-1 where n
 is the number of nodes, in each node of the graph.  Then, you can use a
 fresh vector to do the marking (or a primitive boolean array if you need the
 best possible space/time performance).


  --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en


-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: [ANN] fs - file system utilities for Clojure

2011-03-16 Thread Steve Miner
I've been using this to get the extension:

(defn extension [file]
  (when file
(let [base (fs/basename file)
  dot (.lastIndexOf ^String base .)]
  (when (pos? dot)
(subs base (inc dot))

Steve Miner


On Mar 15, 2011, at 5:56 PM, siyu798 wrote:

 Hi Miki,
   We are planning to use this file system utilities, and we need a function 
 to get file extension. Currently we're using apache common for that, but we 
 want to get rid of apache common altogether.  Can you add this functionality 
 to the fs.clj? Thx
 
 Si Yu

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Clojure Editor

2011-03-16 Thread Lee Spector

I have Smart auto indenting on in the preferences, and the language is set to 
Clojure, but I don't see any smarts. If I type:

(defn foo

and hit return the cursor goes to the beginning of the next line, not indented. 
If I hit the tab key it tabs in, but it'll tab anything in further each time I 
hit tab; it's not sensitive to the syntax or at least it's not going to a 
reasonable place for the syntax. Within a definition if I type:

 (cons (first x) 

and hit return the cursor goes beneath the first (, not beneath the second 
( (which is the behavior of emacs modes, which I prefer) or even under the 
o (which is the current behavior of Counterclockwise). Again, I can move 
things around with tab but it's not syntax aware.

I've tried doing this in parentheses-balanced expressions as well, but still no 
smarts. I use this feature not only to keep my code neat but also to make 
syntax errors visually obvious; it won't help for this if the indentation isn't 
automatically aware of the language's syntax.

What am I missing?

Thanks,

 -Lee

On Mar 16, 2011, at 8:38 AM, WoodHacker wrote:

 Check preferences from the toolbar or the Bluefish dropdown.There
 are checks for Smart Auto Indenting and Highlighting block
 delimiters.There's very little this editor doesn't do.You just
 have to make sure all the checks you want are set.
 
 Bill
 
 On Mar 14, 10:06 pm, Lee Spector lspec...@hampshire.edu wrote:
 The Clojure mode activates for me, and I get a little bit syntax coloring, 
 autocompletion, and () matching. But I don't get language aware indentation. 
 Should I, or isn't this supported? (It's a really important feature IMHO.) 
 Also, no matching of [] or {} (less important for me).

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Armando Blancas
 However, the visited field has nothing to do with the actual Node
 class. It's simply for other functions to use as a marker.

 This solution is kludgy, but I cannot see any other *performant* way
 of doing this.

I don't think markers are a kludge. Besides modeling, data structures
must support stuff like performance requirements. This is no different
than, say, reference counting in GC's, COM, inodes, etc.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: New Release of the Clojure Debugging Toolkit

2011-03-16 Thread George Jahad
try adding that jar to your classpath, and see if that fixes it.

if not, run jar -tf on the tools.jar file to dump the table of
contents on it and email it to me and i'll see if i can figure out
what is going on.




On Mar 15, 7:34 pm, Jeff Bordogna jeff.bordo...@gmail.com wrote:
 George,
    Thanks for the response.  I'm using openjdk and it
 lives: file:usr/lib/jvm/java-6-openjdk/jre/../lib/tools.jar (and the
 format function worked to find that as well).  Anything I need to change wrt
 that?

 Thanks,
 Jeff

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Entity component system

2011-03-16 Thread msappler
Finally I launched my little website: http://resatori.com

You can see a short video of my game there ;)

Fraps only allows 30 seconds so nothing more to see :(

Entity Component Post will follow this week.

On 6 Mrz., 16:24, Daniel Werner daniel.d.wer...@googlemail.com
wrote:
 Himsappler,

 On Jan 12, 12:27 pm,msapplerdamnedmar...@web.de wrote:

  No i do not mind.
  A blog is being planned for promotion of my game and sharing.
  Only have to find a domain name which i like.

 Have you put anything in the meantime? I'd be very interested to read
 about your game's progress and learn more about the component system
 you built for it.

 Daniel

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: xml parsing

2011-03-16 Thread Abraham
sorry i forgot to show order.xml

order orderid=1/2001

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: xml parsing

2011-03-16 Thread Abraham
forgot   ...Here is the order.xml

order orderid=1
   party  XYZ Ltd/party
   address 
blockAbcd /block
streetxyz /street
city123 /city
   statein /state
/order

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Shantanu Kumar


On Mar 16, 11:20 am, Mark Engelberg mark.engelb...@gmail.com wrote:
 On Tue, Mar 15, 2011 at 11:12 PM, Shantanu Kumar
 kumar.shant...@gmail.comwrote:

  Use the node's metadata to annotate :visited as true and re-associate,
  and do it recursively (likely with loop recur)?

  Regards,
  Shantanu

 Altering metadata is generally a non-destructive operation (with-meta), and
 alter-meta! only works on refs/agents/etc.  So I don't see how you could use
 metadata in this manner.  You'd effectively be creating new nodes as you
 traverse the tree, and then the pointers between the nodes would get
 totally screwed up.  Can you elaborate on your idea?

The idea goes like this: You re-associate the node to the collection
after you modify the metadata of each node using (with-meta). The
important part is every node after visit must be re-associated to the
same collection it was originally part of, drilling-down recursively.
This may potentially interfere with order/position of the node-in-
collection but that is another problem. I was not thinking about
pointers because I presumed persistent data structures.

Regards,
Shantanu

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Entity component system

2011-03-16 Thread Daniel Kersten
Hi Michael,

Looks great! I love the video too. Very nice.
I have put a link to your blog post on the clojure games wiki. I'll update
the wiki properly when I get a chance. If you want to put details on your
game on the wiki (or want to edit my post about your component entity
system), please feel free to. I'll do it myself eventually if not, but it
may take some time before I do.

In any case, great work!!

Dan.

On 16 March 2011 15:09, msappler damnedmar...@web.de wrote:

 Finally I launched my little website: http://resatori.com

 You can see a short video of my game there ;)

 Fraps only allows 30 seconds so nothing more to see :(

 Entity Component Post will follow this week.

 On 6 Mrz., 16:24, Daniel Werner daniel.d.wer...@googlemail.com
 wrote:
  Himsappler,
 
  On Jan 12, 12:27 pm,msapplerdamnedmar...@web.de wrote:
 
   No i do not mind.
   A blog is being planned for promotion of my game and sharing.
   Only have to find a domain name which i like.
 
  Have you put anything in the meantime? I'd be very interested to read
  about your game's progress and learn more about the component system
  you built for it.
 
  Daniel

 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en


-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: Entity component system

2011-03-16 Thread msappler
Weird where did my post go?

Anyway here is the link to the article:
http://resatori.com/clojure-entity-component-system

On 16 Mrz., 17:54, Daniel Kersten dkers...@gmail.com wrote:
 Hi Michael,

 Looks great! I love the video too. Very nice.
 I have put a link to your blog post on the clojure games wiki. I'll update
 the wiki properly when I get a chance. If you want to put details on your
 game on the wiki (or want to edit my post about your component entity
 system), please feel free to. I'll do it myself eventually if not, but it
 may take some time before I do.

 In any case, great work!!

 Dan.

 On 16 March 2011 15:09, msappler damnedmar...@web.de wrote:

  Finally I launched my little website:http://resatori.com

  You can see a short video of my game there ;)

  Fraps only allows 30 seconds so nothing more to see :(

  Entity Component Post will follow this week.

  On 6 Mrz., 16:24, Daniel Werner daniel.d.wer...@googlemail.com
  wrote:
   Himsappler,

   On Jan 12, 12:27 pm,msapplerdamnedmar...@web.de wrote:

No i do not mind.
A blog is being planned for promotion of my game and sharing.
Only have to find a domain name which i like.

   Have you put anything in the meantime? I'd be very interested to read
   about your game's progress and learn more about the component system
   you built for it.

   Daniel

  --
  You received this message because you are subscribed to the Google
  Groups Clojure group.
  To post to this group, send email to clojure@googlegroups.com
  Note that posts from new members are moderated - please be patient with
  your first post.
  To unsubscribe from this group, send email to
  clojure+unsubscr...@googlegroups.com
  For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread CuppoJava
It sounds like hashing is the only solution that can really compete
with these markers. My particular problem cannot use hashing because
the space waste and extra compute time is unacceptable. I'll just have
to be particularly careful for multithreading my app.

Thanks for the replies
  -Patrick

On Mar 16, 10:31 am, Armando Blancas armando_blan...@yahoo.com
wrote:
  However, the visited field has nothing to do with the actual Node
  class. It's simply for other functions to use as a marker.

  This solution is kludgy, but I cannot see any other *performant* way
  of doing this.

 I don't think markers are a kludge. Besides modeling, data structures
 must support stuff like performance requirements. This is no different
 than, say, reference counting in GC's, COM, inodes, etc.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Emacs slime repl now printing carriage returns after Clojure 1.3.0-alpha5

2011-03-16 Thread Nathan Sorenson
In my clojure repl, i'm now seeing CTRL-M characters at the end of
each line printed to the repl (println commands, doc commands etc...).
If I launch the swank-repl from Cygwin I still see these ^M's. Am I to
assume this relates to this added feature: Java's line.separator
property for newline?

I'm just wondering which program in the chain I should fix: clojure,
swank-clojure, or emacs?

-Nathan

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Emacs slime repl now printing carriage returns after Clojure 1.3.0-alpha5

2011-03-16 Thread Nathan Sorenson
I'm using Windows 7, and again, I see this behaviour when using the
regular windows shell or Cygwin to launch the swank-repl.

On Mar 16, 12:10 pm, Nathan Sorenson n...@sfu.ca wrote:
 In my clojure repl, i'm now seeing CTRL-M characters at the end of
 each line printed to the repl (println commands, doc commands etc...).
 If I launch the swank-repl from Cygwin I still see these ^M's. Am I to
 assume this relates to this added feature: Java's line.separator
 property for newline?

 I'm just wondering which program in the chain I should fix: clojure,
 swank-clojure, or emacs?

 -Nathan

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: [ANN] fs - file system utilities for Clojure

2011-03-16 Thread Miki


   We are planning to use this file system utilities, and we need a function 
 to get file extension. Currently we're using apache common for that, but we 
 want to get rid of apache common altogether.  Can you add this functionality 
 to the fs.clj? Thx

 Added in 0.7.1 (thanks to Steve Miner for the implementation detail :) 

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Alan
You are asking on the wrong list. Nobody in the Clojure list will ever
tell you that monkey-patching and mutating your data structure is the
right approach in order to traverse it. And that's totally fine: ask
away, if you're willing to accept other solutions. But you've rejected
all ideas aside from the one you had before you got here as non-
performant, when you don't seem to have a clear understanding of the
performance characteristics of either.

Space waste? Really? You can't afford a pointer to each Node object
during the traversal, but you can afford an extra boolean field in
each Node, even when you're not traversing them? Hint: objects are
typically allocated on pointer-sized boundaries, so an extra boolean
at the end will take up as much real space as a whole pointer.

And you have a *binary* tree, storing a Node[] instead of Node left,
Node right? Instead of two pointers and two data objects, you're
storing two data objects, two pointers, a pointer to Node[], and a
length property. Throw away that extra crap and you have more than
enough room for a temporary hashtable.

On Mar 16, 11:17 am, CuppoJava patrickli_2...@hotmail.com wrote:
 It sounds like hashing is the only solution that can really compete
 with these markers. My particular problem cannot use hashing because
 the space waste and extra compute time is unacceptable. I'll just have
 to be particularly careful for multithreading my app.

 Thanks for the replies
   -Patrick

 On Mar 16, 10:31 am, Armando Blancas armando_blan...@yahoo.com
 wrote:







   However, the visited field has nothing to do with the actual Node
   class. It's simply for other functions to use as a marker.

   This solution is kludgy, but I cannot see any other *performant* way
   of doing this.

  I don't think markers are a kludge. Besides modeling, data structures
  must support stuff like performance requirements. This is no different
  than, say, reference counting in GC's, COM, inodes, etc.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Emacs slime repl now printing carriage returns after Clojure 1.3.0-alpha5

2011-03-16 Thread Stuart Sierra
Probably swank-clojure.  Even better, write an Emacs client for 
nREPL: https://github.com/clojure/tools.nrepl

-S

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: xml parsing

2011-03-16 Thread Stuart Sierra
I think xml-seq is returning a sequence representing a depth-first traversal 
of the XML document.  So the first item in the sequence is the entire 
document, followed by the first element under the root, and so on.

-Stuart Sierra
clojure.com

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread CuppoJava
Thank you for your reply Alan. I am still eager to hear for more
solutions. I would be even very happy with just a nice organizational
way of thinking about the marker fields instead of a whole new
algorithmic solution.

As for why I thought that hashtables are not appropriate for my use
case, the following is my understanding of its performance
characteristics. Please let me know if I misunderstand anything.

  - For a Hashtable to be performant, there needs to be few
collisions, otherwise you resort to iterating through a list, or tree
every time there is one.

  - In order for there to be few collisions, there are 2 approaches.
(1) Have a very very good hash function. or (2) If you don't have a
great hash function, then allocate a larger table.

  - Mark's idea of storing the numeric id in each node can be thought
of as an ideal hash function. Every distinct object maps to a distinct
integer value within a very small numeric range.

  - An ideal hash function is not typically attainable, so we deal
with non-ideal hash functions. The average loading ratio for a
hashtable, that I use, is 60/40. That is, at maximum capacity, only
60% of the slots are used.

  - Therefore, using a hashtable to implement this marking algorithm
will take up 40% more space than using the marker fields. There is
also the performance aspects of having to compute the hash function
for every access. This is typically very fast, but it still cannot
compare to a pointer deference.

That is why, I think for my problem, the marker fields are the best
way to go. What I think is still possible, however, is a nice way to
organize these fields, such that as Mark pointed out, multithreaded
stuff don't become a nightmare.

The *binary* tree as well, is just a toy example for illustrative
purposes. I agree that storing the children in an array is not a
practical implementation.

  -Patrick

On Mar 16, 3:33 pm, Alan a...@malloys.org wrote:
 You are asking on the wrong list. Nobody in the Clojure list will ever
 tell you that monkey-patching and mutating your data structure is the
 right approach in order to traverse it. And that's totally fine: ask
 away, if you're willing to accept other solutions. But you've rejected
 all ideas aside from the one you had before you got here as non-
 performant, when you don't seem to have a clear understanding of the
 performance characteristics of either.

 Space waste? Really? You can't afford a pointer to each Node object
 during the traversal, but you can afford an extra boolean field in
 each Node, even when you're not traversing them? Hint: objects are
 typically allocated on pointer-sized boundaries, so an extra boolean
 at the end will take up as much real space as a whole pointer.

 And you have a *binary* tree, storing a Node[] instead of Node left,
 Node right? Instead of two pointers and two data objects, you're
 storing two data objects, two pointers, a pointer to Node[], and a
 length property. Throw away that extra crap and you have more than
 enough room for a temporary hashtable.

 On Mar 16, 11:17 am, CuppoJava patrickli_2...@hotmail.com wrote:



  It sounds like hashing is the only solution that can really compete
  with these markers. My particular problem cannot use hashing because
  the space waste and extra compute time is unacceptable. I'll just have
  to be particularly careful for multithreading my app.

  Thanks for the replies
    -Patrick

  On Mar 16, 10:31 am, Armando Blancas armando_blan...@yahoo.com
  wrote:

However, the visited field has nothing to do with the actual Node
class. It's simply for other functions to use as a marker.

This solution is kludgy, but I cannot see any other *performant* way
of doing this.

   I don't think markers are a kludge. Besides modeling, data structures
   must support stuff like performance requirements. This is no different
   than, say, reference counting in GC's, COM, inodes, etc.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: How to read this sample code?

2011-03-16 Thread Michael Gardner
On Mar 15, 2011, at 5:28 PM, Christian wrote:

 Secondly, what is happening inside the for structure? [idx elt] are
 being bound to vector returned by indexed, but that assignment only
 happens when pred == elt. Finally, we return the vector idx. Is this
 correct?

[idx elt] is destructuring-bound to each element in (indexed coll), one after 
another, except that those elements for which (pred elt) returns false or nil 
are skipped (pred is being called as a function on elt, not compared to it). 
The result of the for loop is the sequence of values given by the expression in 
its body (in this case the indexes whose values in coll satisfied pred). That 
for loop would be equivalent to this map + filter:

(map first
  (filter (fn [[idx elt]] (pred elt))
(indexed coll)))

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Discount for 2-Day public course on Clojure in Chicago in April

2011-03-16 Thread trptcolin
We've still got some empty seats for this upcoming session (April
14-15), and we've extended the $50-off discount code (CLJ50) until
this Friday, March 18.

If you're already doing Clojure professionally, it's possible you
wouldn't see enough benefit from this course to justify it, but maybe
you have colleagues or friends you'd like to encourage to get into
Clojure.  If so (errr, actually, either way), it'd be awesome if you
could tweet a mention of it or shoot them a link.

Let me know if you have any questions.

Thanks, and I hope to see you there!

Colin



On Mar 8, 11:59 am, Doug Bradbury d...@8thlight.com wrote:
 Save $50 this week on Clojure: Functional Programming on the JVM a 2-
 day course in Chicago with Colin Jones with discount code CLJ50.

 In this 2-Day course, you'll grow your knowledge and skill to the
 point where you're ready to embark on your first Clojure project.
 With
 numerous hands-on exercises and labs, this isn't just a collection of
 lectures.  Practice will ensure that concepts really sink in, and the
 exercises are a lot of fun to boot!

 When:  April 14-15, 2011
 Where:  8th Light Chicago (566 W Lake St., Chicago IL 60661)

 For More information and to sign up go 
 to:http://8thlight.com/courses/2-clojure-functional-programming-on-the-jvm

 Promotion ends Friday, 3/11/2011

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Mark Engelberg
One thing that many algorithm books overlook is the cost of setting the
markers back to false/nil when done.  One nice aspect of a hashset/vector
approach is that you can just throw it away when done, and use a fresh one
each time.

If you want to learn a whole bunch of low-level tricks for handling graphs
with optimal performance, check out Knuth's book about the Stanford
GraphBase.  It's been a while since I've read it, but I believe that each
node in the graph has four general-purpose marker slots that different
algorithms use for different purposes.  At the beginning, he allocates a
large chunk of consecutive memory for the markers, which he calls a
region.  I do not remember whether it is one region for all the markers,
or one region for each of the four markers.  The key here is that the node
marker is actually a pointer to a location in the marker region of memory.
This added level of indirection (versus storing the marker directly within
the node) means that he can clear the markers by bit-wiping the entire
marker region of memory -- a fast operation.

Of course, this means that a bit of extra work needs to be done when
creating each node.  A pointer is maintained into the marker region, and is
given out to the next node that is created and then the region's pointer is
incremented so that it points to a fresh location (for use by the next node
added to the graph).

Clever stuff, but doling out pointers into a region seems roughly equivalent
to the work involved with assigning a unique, incrementing numeric id to
each node upon creation (and numeric ids don't run out, whereas you run into
problems if your region is insufficiently big for the number of nodes).  And
once you've assigned unique numeric ids, you can use the vector approach I
described and have no threading conflict, and marker cleanup is handled
automatically by garbage collection.  So why not use that approach?

--Mark

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: xml parsing

2011-03-16 Thread Laurent PETIT
2011/3/16 Stuart Sierra the.stuart.sie...@gmail.com

 I think xml-seq is returning a sequence representing a depth-first
 traversal of the XML document.  So the first item in the sequence is the
 entire document, followed by the first element under the root, and so on.


That's not the definition of depth-first, is it ?



 -Stuart Sierra
 clojure.com

 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en


-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: xml parsing

2011-03-16 Thread Alan
It's one variety of depth-first. Pre-order, post-order, and in-order
are all viable ways of doing depth-first searches (though in-order
makes less sense for non-binary trees). Assume for the rest of this
post the following tree:

1
--2
--3
4
--5
6
--7
- Breadth-first traversal: 1237465
- Depth-first, preorder traversal: 1234567
- Depth-first, postorder traversal: 2546371

I think it's possible to split breadth-first into pre- and post-order
as well, but it's been a long time since I took that class and trying
to do it is making my head hurt. I think the important point is that
there's more than one way to do depth-first traversal, and preorder
looks like what Stuart is talking about.

On Mar 16, 2:50 pm, Laurent PETIT laurent.pe...@gmail.com wrote:
 2011/3/16 Stuart Sierra the.stuart.sie...@gmail.com

  I think xml-seq is returning a sequence representing a depth-first
  traversal of the XML document.  So the first item in the sequence is the
  entire document, followed by the first element under the root, and so on.

 That's not the definition of depth-first, is it ?









  -Stuart Sierra
  clojure.com

  --
  You received this message because you are subscribed to the Google
  Groups Clojure group.
  To post to this group, send email to clojure@googlegroups.com
  Note that posts from new members are moderated - please be patient with
  your first post.
  To unsubscribe from this group, send email to
  clojure+unsubscr...@googlegroups.com
  For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: xml parsing

2011-03-16 Thread Antony Blakey

On 17/03/2011, at 8:20 AM, Laurent PETIT wrote:

 2011/3/16 Stuart Sierra the.stuart.sie...@gmail.com
 I think xml-seq is returning a sequence representing a depth-first traversal 
 of the XML document.  So the first item in the sequence is the entire 
 document, followed by the first element under the root, and so on.
 
 That's not the definition of depth-first, is it ?

It's a pre-order depth-first traversal.

Antony Blakey
-
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

On the other side, you have the customer and/or user, and they tend to do what 
we call automating the pain. They say, What is it we're doing now? How would 
that look if we automated it? Whereas, what the design process should properly 
be is one of saying, What are the goals we're trying to accomplish and how can 
we get rid of all this task crap?
  -- Alan Cooper


-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread CuppoJava
Thank you for the reply again Mark.
Actually, now that I've had some time to think about your solution, I
think it, is in fact, suitable for myself after all. There's just some
trickiness involving handing out the numeric ids that I need to figure
out.

eg. Nodes are automatically assigned a unique numeric id. There is a
counter somewhere that is incremented every time a new Node is
allocated.

Upon entry to the print function, I will allocate a vector whose size
is the current value of the counter. This ensures that every Node has
a slot in the vector.

The problem arises after the program as been running for a long time
and the value of the counter is very high. There might be only two
Nodes in use, but one Node might have an id = 1 (because it was one of
the first ones created), and the other Node could have an id = 100
(because it was only recently created). Now the cost of allocating the
vector is too great.

I think, if a good way of handing out the numeric ids is figured out,
your solution would be perfect! I'll give it some more thought.
  -Patrick

On Mar 16, 11:50 am, Shantanu Kumar kumar.shant...@gmail.com wrote:
 On Mar 16, 11:20 am, Mark Engelberg mark.engelb...@gmail.com wrote:

  On Tue, Mar 15, 2011 at 11:12 PM, Shantanu Kumar
  kumar.shant...@gmail.comwrote:

   Use the node's metadata to annotate :visited as true and re-associate,
   and do it recursively (likely with loop recur)?

   Regards,
   Shantanu

  Altering metadata is generally a non-destructive operation (with-meta), and
  alter-meta! only works on refs/agents/etc.  So I don't see how you could use
  metadata in this manner.  You'd effectively be creating new nodes as you
  traverse the tree, and then the pointers between the nodes would get
  totally screwed up.  Can you elaborate on your idea?

 The idea goes like this: You re-associate the node to the collection
 after you modify the metadata of each node using (with-meta). The
 important part is every node after visit must be re-associated to the
 same collection it was originally part of, drilling-down recursively.
 This may potentially interfere with order/position of the node-in-
 collection but that is another problem. I was not thinking about
 pointers because I presumed persistent data structures.

 Regards,
 Shantanu

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Ken Wesson
On Wed, Mar 16, 2011 at 7:35 PM, CuppoJava patrickli_2...@hotmail.com wrote:
 Thank you for the reply again Mark.
 Actually, now that I've had some time to think about your solution, I
 think it, is in fact, suitable for myself after all. There's just some
 trickiness involving handing out the numeric ids that I need to figure
 out.

 eg. Nodes are automatically assigned a unique numeric id. There is a
 counter somewhere that is incremented every time a new Node is
 allocated.

 Upon entry to the print function, I will allocate a vector whose size
 is the current value of the counter. This ensures that every Node has
 a slot in the vector.

 The problem arises after the program as been running for a long time
 and the value of the counter is very high. There might be only two
 Nodes in use, but one Node might have an id = 1 (because it was one of
 the first ones created), and the other Node could have an id = 100
 (because it was only recently created). Now the cost of allocating the
 vector is too great.

 I think, if a good way of handing out the numeric ids is figured out,
 your solution would be perfect! I'll give it some more thought.

I can't see this being fixed without maintaining some kind of a
freelist to allow recycling numeric IDs.

But nodes already have numeric IDs: their addresses in your process's
address space. You can get a hash of it by calling
(System/identityHashCode the-node).

I think ultimately your best bet is just to use a set. It will
probably use less memory than most of the approaches being considered,
including numeric IDs with freelist, overall. If the hash load
factor is really, truly unacceptable for some reason you may have to
accept a time/space tradeoff and use a linear list of visited nodes
with a linear search. Other than that, you can use nonrecycled node
IDs and binary search for visited node IDs in a tree, and that about
exhausts your options.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread Mark Engelberg
On Wed, Mar 16, 2011 at 4:35 PM, CuppoJava patrickli_2...@hotmail.comwrote:

 The problem arises after the program as been running for a long time
 and the value of the counter is very high. There might be only two
 Nodes in use, but one Node might have an id = 1 (because it was one of
 the first ones created), and the other Node could have an id = 100
 (because it was only recently created). Now the cost of allocating the
 vector is too great.


For many graph applications, node deletion is an uncommon operation.  If you
have heavy node deletion, it's certainly possible that your node numbers
have a lot of gaps.  If you think of the id numbering as being analogous to
assigning marker addresses in a dedicated region of memory, then it's
basically a defrag issue.  The freelist method is one option, but it's not
the only one.  You could track how many nodes are in the graph and you track
the next available id.  When the number of nodes falls below a certain
fraction of the max id in the graph, you could defrag and go through and
renumber all the nodes.

It's hard to figure out the best way without knowing the exact
application, but hopefully this gives you some ideas to play with.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: Software Engineering Practices for Marking Algorithms?

2011-03-16 Thread CuppoJava
Thank you Mark and Ken. Your suggestions have been very helpful. There
are certainly many options for me to pursue now. I will do some
careful profiling and see which approach is most suitable.
  -Patrick

On Mar 16, 8:14 pm, Mark Engelberg mark.engelb...@gmail.com wrote:
 On Wed, Mar 16, 2011 at 4:35 PM, CuppoJava patrickli_2...@hotmail.comwrote:

  The problem arises after the program as been running for a long time
  and the value of the counter is very high. There might be only two
  Nodes in use, but one Node might have an id = 1 (because it was one of
  the first ones created), and the other Node could have an id = 100
  (because it was only recently created). Now the cost of allocating the
  vector is too great.

 For many graph applications, node deletion is an uncommon operation.  If you
 have heavy node deletion, it's certainly possible that your node numbers
 have a lot of gaps.  If you think of the id numbering as being analogous to
 assigning marker addresses in a dedicated region of memory, then it's
 basically a defrag issue.  The freelist method is one option, but it's not
 the only one.  You could track how many nodes are in the graph and you track
 the next available id.  When the number of nodes falls below a certain
 fraction of the max id in the graph, you could defrag and go through and
 renumber all the nodes.

 It's hard to figure out the best way without knowing the exact
 application, but hopefully this gives you some ideas to play with.

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: Strange Loop 2011 - St. Louis - Sept 18-20

2011-03-16 Thread Ambrose Bonnaire-Sergeant
I'm on the wrong side of the world, will these be recorded? Looks exciting

On Wed, Mar 16, 2011 at 4:49 AM, Nick Zbinden nick...@gmail.com wrote:

 Man that look awesome not a single thing I would wanne miss.

 On Mar 15, 9:16 pm, Alex Miller a...@puredanger.com wrote:
  I just put up a blog entry with some updated info on Strange Loop
  2011:http://thestrangeloop.com/blog/11/03/15/strange-loop-2011-update
 
  Lots more to come, but perhaps of interest to this group, *Rich
  Hickey* is the first confirmed keynote speaker (more in the works)...
 
  Workshops:
  - Hilary Mason - machine learning
  - Matthew McCullough - Git
  - Jeff Brown - Grails
  - Nathan Marz - Cascalog
  - members of Clojure/core - Clojure
 
  Sessions:
  - Jeremy Ashkenas - Coffeescript
  - Daniel Spiewak - functional data structures (Scala)
  - Peter Veentjer - Multiverse STM
  - John Hugg - VoltDB, OLTP
  - Zach Tellman - Lamina, Aleph (Clojure)
  - Nate Young - functional parser combinators (Haskell, Clojure)
  - Jim Duey - monads (Clojure)
  - Rúnar Bjarnason - Scalaz
  - Slava Pestov - Factor
  - Eric Brigham - Bitcoin (cryptocurrency)
  - Nathan Marz - building scalable realtime big data systems
  - Benjamin Manes, Charles Fry - concurrent caching with MapMaker

 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en


-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en