Re: com.stuartsierra/component & ring/compojure example

2014-10-07 Thread gaz jones
Here is a toy app that downloads nzbs from usenet:

https://github.com/gar3thjon3s/leacher

It's not documented, but it works. The component stuff is hooked up here:

https://github.com/gar3thjon3s/leacher/blob/master/src/clj/leacher/main.clj#L53



On 7 October 2014 12:33, JPatrick Davenport  wrote:

> Hello,
> I'm trying to create a web app. I'm having the damnest time trying to
> figure out how to layer my application. I want to pass protocol
> implementations to the routes. The protocols define interacting with
> various data sources that I need down the way.
>
> I saw Stuart Sierra's talk about Component. It looks to satisfy my needs.
> What I can't find is an example project for component and compojure.
> Unfortunately the project com.stuartsierra/component is poorly named.
> Googling for component + compojure brings back mostly false positives.
>
> Does anyone have a gist or blog post about how to do this?
>
> Thanks,
> JPD
>
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: How did you learn Clojure?

2014-03-26 Thread gaz jones
A technique I use whenever I need to learn a new language is to write the
same application I already have in another language.  I generally choose
downloading nzbs from usenet as it can involve a number of interesting
programming techniques, at least enough to give you a pretty good idea of
how a language handles things like:

* threading and work queues (downloading files concurrently)
* socket io (writing a simple nntp client)
* xml processing (parsing nzb files)
* binary encoding/decoding (yenc implementation)
* curses style ui
* web ui
* command line arguments
* configuration
* signal handling
* testing (haha kidding)

TBH I usually get about 50% of the way through and have enough of a handle
on the language at that point to abandon my efforts and move on.

On Wed, Mar 26, 2014 at 7:22 PM, Daniel Higginbotham  wrote:

> Chiming in a bit late, but here was my path:
>
> * Read "Land of Lisp" by Conrad Barski. This was my first real contact
> with lisp and functional programming. I found it challenging, but the book
> is well-written and the technique of teaching through writing games was
> perfect for me. It uses common lisp which is almost baroque compared to
> Clojure, but it was helpful later in getting a better sense of Clojure's
> roots. Also, most of the classic lisp books out there use common lisp
> * Tried to write my own web-based game using common lisp. This was true
> fun and I learned a ton
> * Read "On Lisp" by Paul Graham. It is an excellent book
> * Was introduced to Clojure through a talk given by Alan Dipert at my
> workplace
> * Learned Clojure by skipping around Clojure in Action, Programming
> Clojure, and Clojure Programming. Settled on Clojure Programming.
> * projecteuler.net has been a good help
> * I've been teaching Clojure to folks at work, which forces me to deeply
> understand the material
> * At the same time, I've kept building little web apps to solidify my
> knowledge. One of them, http://gratefulplace.com, is actually used :)
>
> I feel like I know enough to get stuff done, but there's still so much
> more to learn. Most recently I've been brushing up on math/logic so that I
> can better understand the more mathy texts whenever I encounter them.
>
>
> On Thursday, March 20, 2014 9:08:41 PM UTC-4, Marcus Blankenship wrote:
>>
>> Hi Folks,
>>
>> I'm a post technical PM who's fascinated by Clojure, and want to learn
>> it, but am having a hard time without a "real" project to work on. It's
>> actually excited me so much I'm considering hanging up my PM hat and diving
>> back in the "programmer pool" again!
>>
>> My problem appears to be 1) focus, and 2) fear. Focus because I can't
>> (yet) earn a living on a clojure project, so it must be done during "off
>> hours". Fear because it's harder and more different than the old OO
>> languages I've used in the past.
>>
>> So I'm curious: how did you learn Clojure well enough to be proficient
>> with it, or how are you working on learning it?
>>
>> Anyone else facing the focus + fear dilemma?
>>
>> Sent from my iPhone
>
>  --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Contributors needed for Rouge (Clojure on Ruby)

2014-01-04 Thread gaz jones
Why not just use Ruby or (my preference) Python? Both are great for quick
CLI apps / scripts. Best tool for the job, and all that?


On Sat, Jan 4, 2014 at 8:43 AM, gvim  wrote:

> I have recently moved most of my work to Clojure and Clojurescript but
> neither of these implementations seem suitable for non-http scripting, for
> which I currently use Ruby. So, you can imagine my elation when I
> discovered Rouge which is Clojure implemented on Ruby:
>
> https://github.com/rouge-lang/rouge
>
> The project looks fantastic but they seem to be short of contributors. My
> programming skills are nowhere near advanced enough to work on this myself
> so, please, if any of you Clojurians have proficiency in Ruby and Clojure
> please consider contributing.
>
> I looked at Python's Hy (hylang.org) which is an excellent project in its
> own right and is heavily influenced by Clojure but its taregt is generic
> Lisp 1 rather than Clojure. Rouge will enable Clojure to occupy the
> non-http scripting space without competing directly with Clojure and
> Clojurescript.
>
> gvim
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: is there a tutorial about working at the REPL?

2013-12-29 Thread gaz jones
There are at least some keyboard shortcuts you should be familiar with for
loading / compiling namespaces. Look a the "Using the REPL" section of
this: http://clojure-doc.org/articles/tutorials/emacs.html


On Sat, Dec 28, 2013 at 7:38 PM, larry google groups <
lawrencecloj...@gmail.com> wrote:

>
> I have been working with Clojure now some of the time for the last 18
> months, so I am no longer a complete noob. But I still have many questions
> about how to work at the REPL. In particular, I don't understand how the
> REPL interacts with the class path.
>
> I have an app that is working. When I need to make changes to it, my
> workflow goes like this:
>
> 1.) start emacs
>
> 2.) open a file in the project that I want to work in. I usually start by
> opening up the project.clj fie.
>
> 3.) type nrepl-jack-in to launch the repl.
>
> 4.) load whatever file holds the (main-) function that starts the app. So
> for me, for instance, it might be:
>
> (load-file “src/admin/core.clj”)
>
> 5.) switch to that namespace:
> (in-ns ‘admin.core)
>
> 6.) call the function that starts my app: (main-). Give it any arguments
> that it needs.
>
> 7.) do work. Moving around inside of the project tends to consist of a lot
> of loading a file:
>
> (load-file “src/admin/controller.clj”)
>
> and then switching to the namespace:
>
> (in-ns ‘admin.controller)
>
> However, I have a config file at:
>
> /resources/config/schema.edn
>
> If I open a terminal, cd to the top level of the directories where this
> app lives, and then run "lein uberjar" I get an app that works just fine if
> I do:
>
> java -jar admin-1-standalone.jar
>
> But when I want to work on this app at the REPL, the app seems unable to
> find the schema.edn file. You can see my REPL session below. The
> function (initiate-forms) has this line:
>
>  (read-string (slurp (clojure.java.io/resource "config/schema.edn")))
>
> This should run when the app starts and then it is stored in
> secretary/interactions, but below you can see that secretary/interactions
> is empty.
>
> Why does this work when I run the app from the command line? What do I
> need to do to get this work when I'm in the REPL? I am assuming the problem
> here has something to do with the classpath, please tell me if I'm wrong.
>
>
>
> admin.controller> (load-file "src/admin/core.clj")
> #'admin.core/-main
> admin.controller> (in-ns 'admin.core)
> #
> admin.core> (ns-publics 'admin.core)
> {-main #'admin.core/-main}
> admin.core> (-main "35000")
> App 'TMA admin' is starting.
> If no port is specified then we will default to port 34000.
> You can set this app to production mode, where debugging output to the
> terminal is surpressed, by starting it like this:
> java -jar target/admin-1-standalone.jar  30001 production
> #
> admin.core> (load-file "src/admin/secretary.clj")
> {:dire/error-handlers {java.lang.NullPointerException
> #},
> :ns #, :name process-some-fetch-function,
> :arglists ([function-to-call-to-get-data-from-monger map-for-queries]),
> :column 1, :line 124, :file "admin/queries.clj"}
> admin.core> (in-ns 'admin.secretary)
> #
> admin.secretary> interactions
> #
> admin.secretary> @interactions
> {}
> admin.secretary> (load-file "src/admin/startup.clj")
> #'admin.startup/start-channels
> admin.secretary> (in-ns 'admin.startup)
> #
> admin.startup> (ns-publics 'admin.startup)
> {start-channels #'admin.startup/start-channels, initiate-forms
> #'admin.startup/initiate-forms, connect-to-database
> #'admin.startup/connect-to-database, set-the-current-debugging-level
> #'admin.startup/set-the-current-debugging-level}
> admin.startup> (start-channels)
> nil
> admin.startup> (initiate-forms)
> cannot read object
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from 

Re: T-shirts?

2013-11-25 Thread gaz jones
This shirt appears to be complecting fashion, programming, AND advertising.


On Mon, Nov 25, 2013 at 11:17 AM, Laurent PETIT wrote:

> Hey Bruce,
>
> 2013/11/25 Bruce Durling :
> > Yay! Thanks Rich!
> >
> > Good picture of you. Have you been working out before taking those
> > shots in the t-shirt?
>
> It's a direct side-effect of following Clojure's strengths in your
> life: simplicity, power, focus ;-)
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [ANN] optparse-clj: Functional GNU-style command line options parsing

2013-11-20 Thread gaz jones
Hey guns,

Yeah sounds good, I don't have admin access to add you as a developer so
will ask on the clojure-dev mailing list to see who can do it and cc you on
that.

Cheers,
Gaz


On Wed, Nov 20, 2013 at 6:40 PM, guns  wrote:

> On Wed 20 Nov 2013 at 06:32:49PM -0600, guns wrote:
> > The formatting is a bit ugly, so here is a plain text version:
> >
> >
> https://gist.github.com/guns/7573819/raw/26fc5a741d78b9cf1753fcde1a071dd467d44b4f/tools.cli.proposal.mail
>
> Sorry for the double post. The url above should be:
>
> https://gist.github.com/guns/7573819/raw
>
> The first one posted contains an error.
>
> guns
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [ANN]: clj.jdbc 0.1-beta1 - Alternative implementation of jdbc wrapper for clojure.

2013-11-19 Thread gaz jones
Whoops, sorry looks like my intended light-hearted sarcasm based on one of
the email signatures in the thread got mis-interpreted. Hard to express in
an email, perhaps a cheeky :P after would have let you know I wasn't being
particularly serious!

No offense intended, or taken :)


On Tue, Nov 19, 2013 at 4:25 PM, Softaddicts wrote:

> Gaz, excuse me if I misunderstood you, I reread your reply and it was not
> clear
> to me to whom you were referring in your comment.
>
> I still stand by what I said toward the op. Saying that if rewritten the
> code
> would be the same as the original is a lame excuse, it's the same as all
> that
> internet cheating thing in schools. Unexcusable.
>
> Luc P.
>
> > You have the typical profile of people who do not understand open source.
> > To you, open source is the same thing has a side hobby, ...
> > with lack of commitment and seriousness.
> >
> > How do you expect open source software quality to improve if each of us
> > starts to spin off our own flavor of the same lib ?
> > How is this a constructive cooperating effort ?
> > How can open source software be used in production in this context ?
> >
> > Some people are using this stuff to build serious solutions to hard
> problems.
> >
> > I will not even rant about copying without the copyright.
> >
> > It's the overall lack of logic and self centric egoism that you exhibit
> that makes
> > me rant.
> >
> > You should apply the maxim you have thrown in this thread to yourself.
> > You are much more representative of it than anyone else I saw
> > on this mailing list in 5 years.
> >
> > Punk.
> >
> > Luc P.
> >
> > > "Because there is no patch for human stupidity"?
> > >
> > >
> > > On Tue, Nov 19, 2013 at 1:35 PM, Sean Corfield  >wrote:
> > >
> > > > On Sun, Nov 17, 2013 at 1:57 AM, Andrey Antukh  wrote:
> > > > > Additionally I have
> > > > > copied some useful functions like parsing dbspec to URI or a map of
> > > > > protocol->cases
> > > > > and the rest are written from scratch.
> > > >
> > > > Looking through the source code, there are quite a few functions
> > > > copied directly from parts of java.jdbc - even maintaining
> docstrings,
> > > > making it clear you copied and pasted them - but I notice that you
> > > > have not maintained the copyright or license from java.jdbc.
> > > >
> > > > Would you like to explain why you have copied open source software
> > > > without respecting the license and contributors?
> > > > --
> > > > Sean A Corfield -- (904) 302-SEAN
> > > > An Architect's View -- http://corfield.org/
> > > > World Singles, LLC. -- http://worldsingles.com/
> > > >
> > > > "Perfection is the enemy of the good."
> > > > -- Gustave Flaubert, French realist novelist (1821-1880)
> > > >
> > > > --
> > > > --
> > > > 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 unsubscribe from this group and stop receiving emails from it,
> send an
> > > > email to clojure+unsubscr...@googlegroups.com.
> > > > For more options, visit https://groups.google.com/groups/opt_out.
> > > >
> > >
> > > --
> > > --
> > > 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 unsubscribe from this group and stop receiving emails from it, send
> an email to clojure+unsubscr...@googlegroups.com.
> > > For more options, visit https://groups.google.com/groups/opt_out.
> > >
> > --
> > Softaddicts sent by ibisMail from my ipad!
> >
> > --
> > --
> > 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" gr

Re: [ANN]: clj.jdbc 0.1-beta1 - Alternative implementation of jdbc wrapper for clojure.

2013-11-19 Thread gaz jones
"Because there is no patch for human stupidity"?


On Tue, Nov 19, 2013 at 1:35 PM, Sean Corfield wrote:

> On Sun, Nov 17, 2013 at 1:57 AM, Andrey Antukh  wrote:
> > Additionally I have
> > copied some useful functions like parsing dbspec to URI or a map of
> > protocol->cases
> > and the rest are written from scratch.
>
> Looking through the source code, there are quite a few functions
> copied directly from parts of java.jdbc - even maintaining docstrings,
> making it clear you copied and pasted them - but I notice that you
> have not maintained the copyright or license from java.jdbc.
>
> Would you like to explain why you have copied open source software
> without respecting the license and contributors?
> --
> Sean A Corfield -- (904) 302-SEAN
> An Architect's View -- http://corfield.org/
> World Singles, LLC. -- http://worldsingles.com/
>
> "Perfection is the enemy of the good."
> -- Gustave Flaubert, French realist novelist (1821-1880)
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [Job spam] Write Clojure in your pajamas, for decent money in a pleasant company, remote pairing all the time

2013-11-18 Thread gaz jones
*your :)


On Mon, Nov 18, 2013 at 9:46 PM, gaz jones  wrote:

> If you're account had a picture like his, YES.
>
>
> On Mon, Nov 18, 2013 at 5:45 PM, Tony Tam  wrote:
>
>> Hi,
>>
>> I'm always curious about remarks like this:
>>
>>
>> A link to your Github profile counts for much more than a stellar resume.
>>> Doesn't have to be in Clojure.
>>>
>>
>> If I sent you a like to a github profile that looked like yours (
>> https://github.com/alexeyv?tab=repositories), would I ever get an
>> answer? I mean, it's very probable that all your activity is going into
>> private repos.
>>
>>  --
>> --
>> 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 unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [Job spam] Write Clojure in your pajamas, for decent money in a pleasant company, remote pairing all the time

2013-11-18 Thread gaz jones
If you're account had a picture like his, YES.


On Mon, Nov 18, 2013 at 5:45 PM, Tony Tam  wrote:

> Hi,
>
> I'm always curious about remarks like this:
>
>
> A link to your Github profile counts for much more than a stellar resume.
>> Doesn't have to be in Clojure.
>>
>
> If I sent you a like to a github profile that looked like yours (
> https://github.com/alexeyv?tab=repositories), would I ever get an answer?
> I mean, it's very probable that all your activity is going into private
> repos.
>
>  --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: Do web apps need Clojure?

2013-11-14 Thread gaz jones
There is no reason not to consider using a combination of both
technologies. I have found Clojure is excellent for writing http services
(for example sending/receiving JSON), but is a bit weak in comparison to
say the combination of ruby and haml for building UIs quickly.


On Thu, Nov 14, 2013 at 10:22 AM, Brian Craft  wrote:

>
>
> On Thursday, November 14, 2013 2:28:51 AM UTC-8, Sean Johnson wrote:
>>
>> Framework vs. ecosystem of interoperable libraries. The monolithic
>> framework (see Rails and Django) is not the way web development is done in
>> Clojure. Instead imagine the Clojure world as a set of legos. You get to
>> build whatever you want with your legos, selecting just the blocks you
>> need, in the colors and sizes you want, and they all snap together [1]. The
>> benefit to this approach is simplicity. There is a LOT to know about the
>> Rails and Django frameworks, as they are big, mature things that have grown
>> to solve all the common web development needs, and you start your
>> development with ALL of that framework. Your starting point with Clojure on
>> the other hand is much simpler. It will seem too simple... at first you'll
>> be wondering... where is all the "stuff"? You start with maybe just ring
>> and compojure (web middleware and routing) and a few lines of your code and
>> your first couple of stories are already complete. You add libraries as you
>> find you need them as you build out your app over time, but at all times
>> your app is as simple as it can be, and only has the "stuff" it needs. It's
>> therefore much easier to understand and less a "big ball of mud".
>>
>
> I don't believe the legos analogy is very accurate for clojure. Or,
> rather, it's more of a vision than a reality. I'm unaware of any libraries
> in clojure that you can piece together to give you the features of
> django-south, django admin, and the forms/validation/db layers, for
> example.  Today, clojure web libraries are more like an auto parts store:
> your chance of putting together a complete car from the inventory is slim
> indeed, and your chance of doing it in a timely fashion is exactly zero.
>  There are about a dozen migration libraries for clojure, for example, but
> none of them integrate very well with the other libraries because there
> isn't much in the way of a data modeling framework for the different
> components to leverage. Also, I don't think any of them provide the
> simplicity of south, where your data model is declared in one place (rather
> than in a sequence of sql commands that you have to interpret to deduce the
> final data model), and migrations are derived from changes in the data
> model.
>
> The putting of things together is the hard part of software engineering. This
> makes a huge difference in development time.  Clean algorithms are easy
> in comparison. Rich talks about the importance of taking things apart, but
> you can't take things apart that never fit together in the first place.
> IIRC he actually suggested that one take things apart such that they fit
> together again. I agree with this, but I don't think it describes much of
> clojure web tooling today.
>
> Also, the overwhelming majority of db and web work is boilerplate. That's
> what django provides: all the mindless boilerplate that is completely
> uninteresting to your problem domain, but necessary to launch a web site.
> With the current clojure web tools, there is no solution for most of that
> boilerplate, which can easily add an order of magnitude to your development
> time.
>
> And again, I will have to reevaluate all of this in light of caribou,
> which appears to address much of it. Also, I'd be very happy to hear that
> I'm wrong, if anyone has example projects to show, or libraries I've missed.
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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

Re: How to go about 'proving' why dynamically typed languages are better

2013-10-07 Thread gaz jones
Martin Odersky gave a keynote at Strangeloop this year called "The Trouble
With Types" (https://thestrangeloop.com/sessions/the-trouble-with-types)
which made me never want to use a type system again (probably the exact
opposite of his intention). The video should be coming out on infoq at some
point: (http://www.infoq.com/conferences/strangeloop2013/). I've never
looked at Scala before and I'm pretty sure I never will after sitting
through that...


On Mon, Oct 7, 2013 at 9:26 AM, juan.facorro  wrote:

> Thanks for the link! I really liked the interview, it was interesting and
> fun to watch.
>
> J
>
> On Monday, October 7, 2013 9:49:24 AM UTC+9, brad bowman wrote:
>>
>> > zcaudate  Oct 05 08:35PM -0700
>> > I'm a little bit miffed over this current craze of `types` and
>> > `correctness` of programs. It smells to me of the whole `object` craze
>> of
>> > the last two decades. I agree that types (like objects) have their
>> uses,
>> > especially in very well defined problems, but they have got me in
>> trouble
>> > over and over again when I am working in an area where the goal is
>> unclear
>> > and requirements are constantly changing.
>>
>> Joe Armstrong and Simon Peyton Jones discuss Erlang and Haskell
>> http://www.infoq.com/**interviews/armstrong-peyton-**jones-erlang-haskell
>>
>> This interview covers some of the strong-types vs flexible development
>> (apparent) dichotomy, but in a playful, open and non-dogmatic way.
>> (catmatic?)
>>
>> Simon Peyton Jones is one of the Haskell leaders, yet admits to
>> being envious of type-free generics.  Joe Armstrong of Erlang fame
>> also sees the benefit to thinking in and annotating types.
>> These two are both leaders of typed or dynamic cults but have
>> a pleasant friendly and frank conversation about the issues.
>> (Erlang's Dialyzer sounds somewhat like core.typed)
>>
>> A sample:
>>
>> SPJ: So, I've told you what I most envy about Erlang. What do you most
>> envy
>> about Haskell?
>>
>> JA: All the types. I mean they're very nice. I wish we had them. On the
>> other
>> hand, wouldn't you love to have all these generic turn-to-binary, these
>> sort
>> of things? How can you live without them?
>>
>> SPJ: I have a little bit of residual envy about generics.
>>
>> JA: You just take anything and compare it to the serializer and then send
>> it?
>>
>> SPJ: That's sinfully easy, and shouldn't be allowed.
>>
>>
>> So if these two can agree that there's strengths and weaknesses in both
>> approaches, that settles it for me.  It's a matter of knowing your
>> trade-offs and choosing your tools appropriately.
>>
>> My suspicion is that type affinity is related to some trait of
>> personality,
>> and so trying to "prove" superiority is a likely to work as "proving" you
>> are right in any other clash of personalities.
>>
>> Brad
>>
>>  --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [ANN] optparse-clj: Functional GNU-style command line options parsing

2013-08-25 Thread gaz jones
Hey, i am the current maintainer of tools.cli - i have very little time to
make any changes to it at the moment (kids :) ). I'm not sure what the
process is for adding you as a developer or transferring ownership etc but
if I'm happy to do so as I have no further plans for working on it.

Thanks,
Gaz


On Sat, Aug 24, 2013 at 9:44 PM, guns  wrote:

> On Fri 23 Aug 2013 at 05:02:50PM -0700, Paul deGrandis wrote:
>
> > Guns,
> >
> > Have you signed a Clojure CA yet? I'd love to help get this merged
> > into tools.cli
>
> Okay, since there is interest, I will mail a CA on Monday morning.
>
> Paul, if you are a maintainer or committer of tools.cli, I would be
> happy to submit the patch to you.
>
> guns
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: Wrapping LevelDB with ring/compojure app

2013-07-19 Thread gaz jones
Instead of using the var #'web/app in run-jetty, use a function that takes
your main-db as an argument and returns the routes for your app. You can
use the compojure.core/routes to build your app routes rather than using a
global var.


On Fri, Jul 19, 2013 at 3:42 AM, Tarik Ansari  wrote:

> Hello Folks,
>
> I am a complete Clojure newbie and trying to achieve something pretty
> simple and looking for an idiomatic, if I can make it work at all, way to
> do it.
>
> My issue is I need to retain the LevelDB descriptor and share it between
> requests, LevelDB is already thread-safe.
> For example:
>
> (defn -main
>   "I don't do a whole lot ... yet."
>   [& args]
>
>   (println "Opening LevelDB file in db/main")
>   (with-open [main-db (db/open "db/main")]
>
> (println "Running server on port 3000")
> (run-jetty #'web/app {:port 3000})))
>
> Now, how can I access that main-db descriptor in my requests handlers?
> This, obviously won't work, as main-db is not defined in web/app:
>
> (GET "/test" []
> (db/put main-db (.getBytes "testKey2") (.getBytes "testValue2"))
> "Hello World")
>
>
> PS: If it helps anyone for setup, I have made a Clojar for the LevelDB JNI
> Clojure wrapper based on Sedward's:
> https://clojars.org/org.clojars.aircart/leveldb-clj
>
> Thanks in advance for your insight/help!
>
>  --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: run-jetty not working in a virtualbox vm?

2013-07-12 Thread gaz jones
Just to check - you have set ":join? false" so the thread will not block
until the server ends - are you doing this intentionally and blocking the
thread elsewhere?


On Fri, Jul 12, 2013 at 8:45 PM, Daniel Higginbotham  wrote:

> I'm trying to start a jetty server on a virtualbox vm (ubuntu 12.04 32
> bit) by running the following:
>
> (run-jetty #'app {:port (Integer. (get (System/getenv) "PORT" 8080))
> :join? false})
>
> However, I can't connect to the server. If I run "netstat -lp" the java
> process doesn't show up and it looks as if nothing's listening on 8080.
>  However, if I run the above run-jetty function again in a separate process
> I get the error message that another process is already bound to 8080.
>
> The weirdest part of all this is that the very first time I tried starting
> the server, it did start and I was actually able to reach it, but it only
> worked that one time. Has anyone run into this? Is there any way to debug
> the problem?
>
> Thanks!
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: parsing xml with zip, xml and clojure.data.zip

2013-06-05 Thread gaz jones
This may help:

http://clojure-doc.org/articles/tutorials/parsing_xml_with_zippers.html


On Wed, Jun 5, 2013 at 9:54 AM, Ryan Moore  wrote:

> Hi, I've read http://nakkaya.com/2009/12/07/zipping-xml-with-clojure/ and
> http://stackoverflow.com/questions/1194044/clojure-xml-parsing/9595315#comment24442712_9595315
>  ,
> but the usage of (xml->) is still mysterious to me.
>
> If I have this for my xml file...
> (def myxml (zip-str "
> 
>Text in level 3a
>Text in level 3b.
> 
>   "))
>
> My question is how the xml-> function determines how nested you have to
> specify things. Eg
> (xml-> myxml :level1 text)
> => ()
> (xml-> myxml :level2 text)
> => ("Text in level 3aText in level 3b.")
> (xml-> myxml :level2 :level3a text)
> => ("Text in level 3a")
>
> The last call gives the text in 3a, but why don't you have to specifiy
> that it is under level 1 as well as level 2?
>
> Thanks
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: optional first map argument

2013-06-03 Thread gaz jones
You could look at the impl:

https://github.com/weavejester/hiccup/blob/master/src/hiccup/def.clj


On Mon, Jun 3, 2013 at 12:22 PM, Alice  wrote:

> I often need to do this when writing hiccup helper functions:
>
> (defn my-widget
>   [& args]
>   (let [attrs(if (map? (first args)) (first args) {})
> contents (if (map? (first args)) (next args) args)]
> ...
>
>
> I found this post, but considering that it is 4 years old, is there
> any new library developed to help with this situation?.
>
> https://groups.google.com/group/clojure/browse_frm/thread/125a8af68813cd98
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: Beginners question - emacs & compiling tests

2013-05-31 Thread gaz jones
The 'parse-args' function needs to be inside of the 'core.clj' file, not
the 'core_test.clj' file - is that the case? (The reason it is failing is
the first usage of 'parse-args' is before it has been defined).


On Fri, May 31, 2013 at 1:31 AM, Adam Getchell wrote:

>
>
> On Tuesday, March 19, 2013 4:22:59 PM UTC-7, John SJ Anderson wrote:
>>
>>
>> I had this same issue when working through the tutorial. The text
>> makes it sound like you should replace the entire contents of the test
>> file, but that's not the case -- you just need to replace the (deftest
>> ...) form. (I ended up having to generate the project tree under a
>> slightly different name to get a good copy of the file back.)
>>
>
> I have a similar issue, except that I did leave my file intact:
>
> (ns command-line-args.core-test
>   (:require [clojure.test :refer :all]
> [command-line-args.core :refer :all]))
>
> (deftest pairs-of-values
>   (let [args ["--server" "localhost"
>   "--port" "8080"
>   "--environment" "production"]]
> (is (= {:server "localhost"
> :port "8080"
> :environment "production"}
>(parse-args args)
>
> (defn parse-args [args]
>   {})
>
> Results in:
>
> clojure.lang.Compiler$CompilerException: java.lang.RuntimeException:
> Unable to resolve symbol: parse-args in this context,
> compiling:(/Users/getchell/Projects/clojure/command-line-args/test/command_line_args/core_test.clj:12:12)
>  at clojure.lang.Compiler.analyze (Compiler.java:6380)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3573)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6562)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3624)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6562)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.access$100 (Compiler.java:37)
> clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:5973)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6560)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6548)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5708)
> clojure.lang.Compiler$TryExpr$Parser.parse (Compiler.java:2156)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6560)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6548)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6548)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6548)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5708)
> clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6009)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6560)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6548)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5708)
> clojure.lang.Compiler$FnMethod.parse (Compiler.java:5139)
> clojure.lang.Compiler$FnExpr.parse (Compiler.java:3751)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6558)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6548)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$MapExpr.parse (Compiler.java:2879)
> clojure.lang.Compiler.analyze (Compiler.java:6369)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler$DefExpr$Parser.parse (Compiler.java:528)
> clojure.lang.Compiler.analyzeSeq (Compiler.java:6560)
> clojure.lang.Compiler.analyze (Compiler.java:6361)
> clojure.lang.Compiler.analyze (Compiler.java:6322)
> clojure.lang.Compiler.eval (Compiler.java:6623)
> clojure.lang.Compiler.load (Compiler.java:7064)
> command_line_args.core_test$eval1168.invoke (NO_SOURCE_FILE:1)
> clojure.lang.Compiler.eval (Compiler.java:6619)
> clojure.lang.Compiler.eval (Compiler.java:6582)
> clojure.core$eval.invoke (core.clj:2852)
> clojure.main$repl$read_eval_print__6588$fn__6591.invoke (main.clj:259)
> clojure.main$repl$read_eval_print__6588.invoke (main.clj:259)
> clojure.main$repl$fn__6597.invoke (main.clj:277)
> clojure.main$repl.doInvo

Re: Local database recommendation?

2013-05-27 Thread gaz jones
Sqlite is worth a look. Never used it with the JVM, but I assume there is a
JDBC driver for it.


On Mon, May 27, 2013 at 1:01 AM, Zack Maril  wrote:

> Use postgres. If it makes sense later on, then try a nosql solution. Until
> then, postgres will probably do 95% of what you want out of the box.
> -Zack
>
>
> On Sunday, May 26, 2013 6:20:02 PM UTC-4, Amirouche Boubekki wrote:
>>
>>
>>  1) Is it structured aka. an object can have several fields possibly
 complex fields like list or hashmaps but also integers ? dates and uuids
 can be emulated with strings and integers
 2) Do objects have relations ? a lot of relations ?
 3) is the data schema fixed at compilation or do you need to have the
 schema to be dynamic ?

>>>
>>> Much of the data is conditional in a certain sense -- if it's an X, it's
>>> also a Y and it may be a W or a Z as well, but if it's a G it's certainly
>>> not a W, etc.; though simply storing a large number of boolean columns that
>>> may be unused by many of the table rows would be acceptable.
>>>
>>> The thing that makes me slightly dubious about relational here is that
>>> there will necessarily either be many columns unused by many rows, as
>>> there's a lot of data that's N/A unless certain other conditions are met;
>>> or else there will be many whole tables and a lot of expensive joins, as we
>>> have a table of Foos, with an isBar? column with either a BarID or a null,
>>> and a table of Bars with an isBaz? column, and a table of Bazzes with an
>>> isQuux? column, and then a need to do joins on *all* of those tables to run
>>> a query over a subset of Quuxes and have access to some Foo table columns
>>> in the results.
>>>
>>> This sort of thing points towards an object database more than any other
>>> sort, with inherited fields from superclasses, or a map database that
>>> performs well with lots of null/missing keys in most of the maps. But maybe
>>> a relational DB table with very many columns but relatively few used by any
>>> given row would perform OK.
>>>
>>
>> The only kind of object database that does ACID across documents on the
>> JVM I know of is Tinkerpop' Blueprints. Blueprints is an abstraction layer
>> on top of many graph databases among which Neo4j an OrientDB. The
>> difference between a graph database and an object database is that
>> «pointers» in a graph database are known at both ends. If you don't know
>> graph you will need to learn a bit of it. Basicaly, if A is connected to B,
>> B knows also about A being connected to it, which is not the case with a
>> pointer. Otherwise said, like in relationnal database, you can ask for «all
>> things connected to B» or «all things B connects to». The same query in an
>> object database will cost more. On top of that it's schemaless, like an
>> object database, but there is no notion of class, similar to what is found
>> OO programming (even if you can model the graph to have the concept of
>> classes).
>>
>>
>>>
>>> The DB must be able to grow larger then available RAM without crashing
> the JVM and the seqs resulting from queries like the above will also need
> to be able to get bigger than RAM.
>


> My own research suggests that H2 may be a good choice, but it's a
> standard SQL/relational DB and I'm not 100% sure that fits well with the
> type of data and querying noted above. Note though that not all querying
> will take that form; there'll also be strings, uuids, dates, and other 
> such
> field types and the need to query on these and to join on some of them;
> also, to do less-than comparisons on dates.
>

 Depending on your speed needs and the speed of the database, a kv store
 can be enough, you serialize the data as strings and deserialize it when
 you need to do computation. Except that kv store are not easy to deal with
 when you have complex queries, but again it depends on the query.

>>>
>>> I expect they'd also have problems with transactional integrity if, say,
>>> there was a power cut during an update. Anything involving "serialize the
>>> data as strings" sounds unsuited to either the volume I'm envisioning or
>>> the need for consistency. It certainly wouldn't do to overwrite the file
>>> with half of an updated version of itself and then lose power! Keeping the
>>> previous version around as a .bak file is scarcely much better. It pretty
>>> much needs to be ACID since there will need to be coordinated changes to
>>> more than one bit of the data sometimes and having an update interrupted
>>> with only half the changes done, and having it stay in that half-done
>>> state, would potentially be disastrous.
>>>
>>
>> At least unqlite is a embeddable kv store that is ACID across several
>> keys, you won't have data cut in half (based on what is  advertised), I
>> think berkley db is also transactional.
>>
>> Also I'm interested only in opensource software so there might be
>> proprietary softwares

Re: Structing Clojure tests/setup and tear down

2013-05-21 Thread gaz jones
I think I would use a macro:

(defn with-bloomy-fn [bloomy body]
  (try
   (body)
   (finally
(shut-down bloomy

(defmacro with-bloomy [bloomy & body]
  `(with-bloomy-fn ~bloomy (fn [] ~@body)))

(deftest my-test
  (with-bloomy (create-a-bloomy)
(...))


FYI code is untested, typing straight in so there may be typos etc.



On Tue, May 21, 2013 at 10:05 AM, Colin Yates  wrote:

> Hi Ulises,
>
> I don't think I am as that would require essentially a fixture per
> distinct combinations of test state, which is almost the same number of
> tests.
>
> Have I missed something?
>
>
> On 21 May 2013 15:51, Ulises  wrote:
>
>> Perhaps you're looking for fixtures?
>> http://thornydev.blogspot.co.uk/2012/09/before-and-after-logic-in-clojuretest.html
>>
>> U
>>
>>
>> On 21 May 2013 15:17, Colin Yates  wrote:
>>
>>> Howdy,
>>>
>>> I am using clojure.test and have some questions of how to write
>>> idiomatic Clojure.  This really isn't about testing at all per-se.
>>>
>>> First - I know about fixtures to get (at least) the same as JUnit's
>>> before/after behaviour.
>>>
>>> My code is a bloomy.  You can configure the bloomy and it does different
>>> things based on that behaviour.  Pretty much every test has a different
>>> bloomy, *and* that bloomy must be elegantly shut down.
>>>
>>> How should I handle this?
>>>
>>> At the moment I have the most un-idiomatic way and blunt way of :
>>>
>>> [code]
>>> (deftest my-test
>>>   (let [bloomy (create-a-bloomy]
>>>   (try
>>> (do-something-with-my-bloomy)
>>> (is (=))
>>>   (finally (shut-down bloomy
>>> [/code]
>>>
>>> Yep, try/finally in every test - reminds me of early JDBC libraries
>>> before Spring :).  If I understand it correctly, I would end up writing a
>>> separate fixture for each and every test, or at least each any every unique
>>> set of test context.
>>>
>>> I did consider writing a "(defn with-bloomy [bloomy test] (try (test)
>>> (finally (shut-down bloomy" but I couldn't figure out how to pass my
>>> bloomy into the test itself.  I also received lots of "assertion not in
>>> expectation" type errors.  To be explicit I would use this as "(with-bloomy
>>> (create-a-bloomy) (deftest...)))".
>>>
>>> I did consider a variation on the above of passing in a function which
>>> only contained the assertions, so "(deftest my-test (let [bloomy...]
>>> (with-bloomy bloomy #(is (= 1 (get-something bloomy)" but I also ran
>>> into similar "assertion not in expectation" type errors, and the
>>> indentation in emacs was insane.
>>>
>>> I expect a macro might be the answer?
>>>
>>> So, how would you solve this?
>>>
>>> --
>>> --
>>> 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 unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+unsubscr...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>
>>  --
>> --
>> 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 a topic in the
>> Google Groups "Clojure" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/clojure/Pm-DUDxWeM4/unsubscribe?hl=en.
>> To unsubscribe from this group and all its topics, send an email to
>> clojure+unsubscr...@googlegroups.com.
>>
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>  --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/gr

Re: Clojure Login form error: java.lang.ClassCastException: clojure.lang.Var$Unbound cannot be cast to clojure.lang.Atom

2013-05-02 Thread gaz jones
>> Does the projects look like the work of someone that is an utter moron

... your response certainly is.


On Thu, May 2, 2013 at 10:28 AM, Jay Fields  wrote:

> On Thursday, May 2, 2013 10:19:51 AM UTC-4, David Toomey wrote:
>
>>
>> [snipped]
>
>
> If you want help in the future, I'd recommend spending less time demanding
> answers and more time reading responses and code.
>
> I've never looked at the 4clojure source, didn't even know it was on
> github. I've never used ring, compojure, or any other clojure web
> framework. The total time it took me to clone the 4clojure repo, grep for
> what John recommended, and get you this link (
> https://github.com/4clojure/4clojure/blob/develop/src/foreclojure/core.clj#L58),
> about 30 seconds.
>
> Python has been around significantly longer, and has a much larger
> community. If you need that level of support, I don't think Clojure is the
> right language for you.
>
> Cheers, Jay
>
> --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: Do functions never get inlined by jvm?

2013-04-25 Thread gaz jones
There seems to be some rule that given sufficient time and enough
participants, all threads deteriorate into an argument about the current
state of clojure documentation and a huge post from Tim Daly regarding
literate programming in 3...2...1...


On Thu, Apr 25, 2013 at 2:23 PM, Gary Trakhman wrote:

> Good vinyls are considered higher quality by audiophiles, because there
> are less stages in between the mastering and amplification.  There is more
> potential of better performance.
>
> It can be considered a real-world case of inlining.
>
>
> On Thu, Apr 25, 2013 at 3:16 PM, Softaddicts 
> wrote:
>
>> May I suggest you an upgrade  ?
>>
>> http://www.ehow.com/how_6949396_record-78-vinyl-records-cd.html
>>
>> > 2013/4/25 Softaddicts 
>> >
>> > > Of course my answer comes in total antagonism with your usual position
>> > > about the
>> > > bad state of the existing documentation which is incomplete, wrong,
>> ...
>> > > and so forth.
>> > >
>> > Your reaction does not suprise me, your behavior is quite predictable.
>> > > Like an old vinyl record with all these scratches being played over
>> and
>> > > over
>> > > again.
>> > >
>> > >
>> > Nothing has changed w.r.t. Clojure/core's attitude towards documentation
>> > and making it easy
>> > for other people to contribute documentation improvements that are
>> rapidly
>> > integrated instead of
>> > gathering dust in JIRA for many months.
>> >
>> > Why would I suddenly start singing praises to something that is broken
>> and
>> > does not change?
>> >
>> > Sorry pal, someone has to periodically remind those in control of
>> Clojure
>> > that we are exactly
>> > where we were years ago. And that the entire community has to put up
>> with
>> > this.
>> >
>> >
>> > > Definline may be tagged as experimental but defrecord, defprotocol,
>> ...
>> > > are marked
>> > > as being in alpha stage. Does this prevents you from using them ?
>> > >
>> >
>> > Those are mentioned in every book and are widely used. It would be
>> crazy to
>> > break
>> > those by now. Makes a bit of difference when it comes to recommending
>> > features to people, don't you
>> > think?
>> > --
>> > MK
>> >
>> > http://github.com/michaelklishin
>> > http://twitter.com/michaelklishin
>> >
>> > --
>> > --
>> > 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 unsubscribe from this group and stop receiving emails from it, send
>> an email to clojure+unsubscr...@googlegroups.com.
>> > For more options, visit https://groups.google.com/groups/opt_out.
>> >
>> >
>> >
>> --
>> Softaddicts sent by ibisMail from my ipad!
>>
>> --
>> --
>> 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 unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>  --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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/West 2013 videos?

2013-03-28 Thread gaz jones
I'm starting to miss Ken Wesson.


On Mon, Mar 25, 2013 at 4:08 PM, Gary Trakhman wrote:

> I've volunteered on the pycon AV team, in 2009, it's 1000x more work than
> what you described further up in the thread, a minimum wage worker holding
> something steady.  It requires a lot of coordination, and I think the cost
> to the conference would be much higher than InfoQ as well.
>
> On Monday, March 25, 2013 1:05:51 PM UTC-4, Cedric Greevey wrote:
>>
>> On Mon, Mar 25, 2013 at 12:41 PM, Michael Klishin 
>> wrote:
>>
>>>
>>> 2013/3/25 Cedric Greevey 
>>>
 Don't forget that Youtube has MILLIONS of visitors per month.

 Imagine the impact if the videos were available when demand for them
 was actually at its peak, rather than after half the people that had been
 interested have forgotten all about them.

>>>
>>> I challenge you to put together a technical videos channel that has
>>> millions of visitors per month.
>>>
>>
>> Another minute, another straw man. My point is that the needed video
>> hosting capability already exists (and even has monetize options). Of
>> *course* it will be expensive to go the "reinvent all needed wheels" route.
>>
>> I don't get it. The thread got complaints that the videos were being
>> produced slowly and inefficiently, yet as soon as someone actually
>> suggested ways to potentially make the process faster and more efficient,
>> practically *everyone* leapt to the defense of those same slow and
>> inefficient methods that they'd previously complained about. I guess
>> abstract kvetching is okay, but concrete suggestions are frightening
>> because they might *actually lead to change* or something. Although that
>> still doesn't explain why someone then had the gall to criticize *me* for
>> not making concrete and constructive suggestions, when that's exactly what
>> I *did* do after *other people* had merely complained without making any
>> suggestions.
>>
>> Of course, I don't really *need* to argue anymore, because someone else
>> helpfully pointed out that an existing conference already does a better
>> job: pycon. That completely disproves the entire class of arguments along
>> the lines of "making *conference proceedings* videos is somehow some sort
>> of a special case and it HAS to be slow and expensive!", of which we've
>> seen several, sadly including some *after* pycon was first mentioned.
>>
>>  --
> --
> 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 unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: Find union of nodes with data.zip

2012-11-05 Thread gaz jones
you're right, my bad. should have read it more carefully :)

On Mon, Nov 5, 2012 at 2:32 PM, Stefan Kamphausen  wrote:
> Hi,
>
> if I am doing this right, then your supposed approach does not work.  From
> looking at the code of seq-test (to which the alternative form using just a
> vector in xml-> boils down, too) it seems to be more like a look ahead
> within the current node.  See e.g. the test code at
> https://github.com/clojure/data.zip/blob/master/src/test/clojure/clojure/data/zip/xml_test.clj#L45
>
> (I can't claim to fully grok mapcat-chain in zip.clj, though.)
>
>
> Regards,
> stefan
>
> --
> 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: Find union of nodes with data.zip

2012-11-05 Thread gaz jones
Looking at the source of clojure.data.zip, it looks like something like:

(xml-> x :a (seq-test [(tag= :b1) (tag= :b3)]) :c)

(untested) might work?

http://clojure.github.com/data.zip/


On Mon, Nov 5, 2012 at 10:38 AM, Stefan Kamphausen  wrote:
> Hi,
>
> AFAIK the currently supposed way of parsing XML with Clojure is to use a
> combination of clojure.xml, clojure.zip, data.zip and data.zip.xml.  Please
> correct me if I'm wrong.
>
> I am trying to extract the equivalent of a union of nodesets from an XML
> file (speaking in XPath terms).
>
> Example:
>
> input.xml:
>
> 
>   
> 
>   C1
>   C2
> 
> 
>   C3
>   C4
> 
> 
>   C5
>   C6
> 
>   
> 
>
> Suppose I have an array (or whatever) with the allowed b-tags, e.g. b1 and
> b3.  Now I want to extract all c-tags underneath b1 and b3 but skip those
> under b2.
>
> Using clojure.xml/parse, clojure.zip/xml-zip and data.zip.xml/xml-> I can
> easily extract certain nodes but I have not found a way to extract such a
> union, yet.
>
> A rather lispy approach would be using or in a manner similar to this:
>
> (def x (clojure.zip/xml-zip (clojure.xml/parse "/path/to/input.xml")))
> (clojure.data.zip.xml/xml-> x :a (or :b1 :b3) :c)
>
> And I did not yet understand how to write my own predicates there.
>
> Any pointers?
>
>
> Kind regards,
> stefan
>
> --
> 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: Documenting clojure data structures

2012-10-31 Thread gaz jones
you could try using contracts to specify what keys are supposed to be
in the map, or just use pre/post conditions built in to clojure?

https://github.com/fogus/trammel

On Wed, Oct 31, 2012 at 1:01 PM, Jason Bennett  wrote:
> Over the last month, I've been learning clojure for my new job, and taking
> Odersky's scala course on coursera. I've been enjoying my time with clojure
> much more, but the one thing I miss from scala is the ability to document a
> data structure. It's really nice in Java/Scala to type in an object and get
> a list of methods/members that are available, instead of having to trace the
> code and/or guess.
>
> I've seen things in clojure like defrecord, but have not seen good examples
> of if this is a good way to give some structure to my data. I don't want to
> turn clojure into an OO language, but there are times when I'm passing
> around a large map that it would be nice to be able to know what to expect.
>
> jason
>
> --
> 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: Fail to run dynamic binding code with Clojure1.4

2012-10-30 Thread gaz jones
As of Clojure 1.3 you need to mark things you with to re-bind
explicitly as dynamic:

(defn ^:dynamic twice [x]
  ...)


On Tue, Oct 30, 2012 at 7:42 PM, Satoru Logic  wrote:
> Hi, all.
>
> I am reading Clojure in Action.
>
> In the "scope" section of Chapter3, there are examples like this:
>
> defn twice [x]
>   (println "original function")
>   (* 2 x))
>
> (defn call-twice [y]
>   (twice y))
>
> (defn with-log [function-to-call log-statement]
>   (fn [& args]
>
> (println log-statement)
> (apply function-to-call args)))
>
>   
>
> (call-twice 10)
>
>   
>
> (binding [twice (with-log twice "Calling the twice function")]
>(call-twice 20))
>
>   
>
> (call-twice 30)
>
>
> When I tried to run this code in repl, I got the following exception:
>
>
>> IllegalStateException Can't dynamically bind non-dynamic var: user/twice
>> clojure.lang.Var.pushThreadBindings (Var.java:353)
>
>
> Is the book wrong or I'm running with the wrong version of clojure?
>
>   
>   
>   
>   
>
> --
> 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: compile fails but stack trace does not mention a line of code in my app

2012-10-25 Thread gaz jones
Look in who-is-logged-in.core for errors

On Thu, Oct 25, 2012 at 1:36 PM, larry google groups
 wrote:
> who-is-logged-in.core

-- 
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


ANN expectations-mode 0.0.3

2012-10-24 Thread gaz jones
Hi,

expectations-mode is an Emacs mode for running tests written using the
expectations library: https://github.com/jaycfields/expectations. I
have just released expectations-mode 0.0.3 which now runs under nrepl
(no longer supports swank-clojure). It is in marmalade:
http://marmalade-repo.org/packages/expectations-mode, and the repo
lives here: https://github.com/gar3thjon3s/expectations-mode.

If you use swank-clojure, stick with 0.0.2! Congrats to the
maintainers of nrepl.el, it was very easy to convert over to use it :)

Thanks,
Gareth

-- 
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 clojure-doc.org (aka CDS), a new community-driven Clojure documentation site

2012-10-11 Thread gaz jones
Alright, I'll convert the appropriate ones and send you a pull request
when I'm done. I'm happy to pick up writing a tools.cli tutorial too
when I get some spare time. Thanks for kickstarting the effort, it's
shaping up to be a great resource.

-- 
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 clojure-doc.org (aka CDS), a new community-driven Clojure documentation site

2012-10-11 Thread gaz jones
I have 3 blog posts I wrote to help some colleagues get up to speed
with clojure / emacs:

http://blog.gaz-jones.com/2012/02/01/setting_up_emacs_for_clojure_development.html
http://blog.gaz-jones.com/2012/02/02/clojure_development_cycle.html
http://blog.gaz-jones.com/2012/02/03/clojure_command_line_apps.html

They are all based on Emacs 24, leiningen 1.x, and swank-clojure. Is
there any appetite for me to convert / update them and merge them into
CDS under the tutorials section? I have been told by a few people that
they found them useful and I tried but failed to find anything similar
elsewhere on the interwebs (particularly the clojure development cycle
one).

Gaz

On Thu, Oct 11, 2012 at 9:32 AM, Michael Klishin
 wrote:
> 2012/10/11 Laurent PETIT 
>>
>> What clojure/dev could do (if it's not already possible) is make deltas of
>> changes made to clojure.org ridiculously easy to track from the outside.
>
>
> If keeping clojure.org content in a git repository is not possible, then
> notify this list.
> --
> MK
>
> http://github.com/michaelklishin
> http://twitter.com/michaelklishin
>
> --
> 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: understanding 'binding' use in clojure.java.jdbc

2012-10-10 Thread gaz jones
Yeah, you probably shouldn't rely on this but I think it will still
work. I have done something similar before when reading from 3
databases simultaneously (3 nested with-connection and
with-query-result calls) and I believe (connection) is only called
once when creating the prepared statement.

On Tue, Oct 9, 2012 at 9:24 PM, Sean Corfield  wrote:
> No, the inner with-connection binds *db* to db1 so db2 is no longer
> accessible.
>
> This is why c.j.jdbc is getting an API overall that will expose functions
> that accept the connection or the db-spec directly (and the old API will be
> rewritten in terms of the new one for compatibility).
>
> Sean
>
>
> On Tue, Oct 9, 2012 at 2:44 PM, gaz jones  wrote:
>>
>> Can you not simply:
>>
>> (jdbc/with-connection db2
>> (jdbc/with-query-results results
>>   query
>>   {:result-type :forward-only
>>:fetch-size 1000}
>>   (jdbc/with-connection db1
>>  ;; read and write?
>>)))
>>
>> ?
>
>
>
> --
> 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: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread gaz jones
Can you not simply:

(jdbc/with-connection db2
(jdbc/with-query-results results
  query
  {:result-type :forward-only
   :fetch-size 1000}
  (jdbc/with-connection db1
 ;; read and write?
   )))

?
On Tue, Oct 9, 2012 at 2:53 PM, Brian Craft  wrote:
>
> On Tuesday, October 9, 2012 12:11:28 PM UTC-7, Tassilo Horn wrote:
>>
>> Brian Craft  writes:
>>
>> Hi Brian,
>>
>> > If (read-stuff) is not lazy, then this looks pretty simple: all the
>> > data is loaded in memory & returned to (write-stuff).  If the data is
>> > large you wouldn't want it all in memory. What then? Could you make
>> > read-stuff return a lazy sequence? My impression after a brief
>> > experiment is that this doesn't work: when the inner with-connection*
>> > returns, the db connection is closed. A lazy sequence from
>> > (read-stuff) then can't be evaluated w/o throwing an error.
>>
>> Yes, that's true.  Maybe Korma [1] is better suited for this kind of
>> operation.
>>
>
> Damn. I was hoping there was some lispy fp thing I was missing here, but
> *db* really is just a global variable that fails in the same way that
> globals fail in all languages.
>
> Thanks for the link to korma.
>
> --
> 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: a Clojure docs site, and github organization

2012-10-07 Thread gaz jones
While on this topic, is it possible for someone with admin privileges
to disable the "Issues" tabs in the contrib projects? There is a
consistent drip of people sending pull requests or opening bugs which
have to be redirected to JIRA. All of the contrib projects now point
to JIRA in the README for both these things.

On Sun, Oct 7, 2012 at 2:40 AM, nchurch  wrote:
>> Just to keep in touch with our marvelous legal systems in North America, 
>> read this:
> ...
>> how much I am frustrated by this shattered world
>
> Indeed!  The law is nothing but an overly complex, haphazardly
> designed, historically encrufted programming language for morals.
>
> Its compiler is frighteningly well-maintained, though.
>
> On Oct 6, 6:24 pm, Softaddicts  wrote:
>> It works for Oracle because they have the $$$ to support it. You just 
>> confirmed
>> that we are on the same wavelength, they have the weapons to nail anyone who
>> would like to exercise exclusive rights on some contribution made under 
>> their CA
>> even if that individual lives in Kazakhstan.
>>
>> They have the infra structure and several offices in various
>> Countries and continents to cover their ass.
>>
>> Just to keep in touch with our marvelous legal systems in North America, 
>> read this:
>>
>> http://hrdailyadvisor.blr.com/archive/2010/08/20/Epinions_Employment_...
>>
>> The first question/answer is pretty instructive. It's easier to avoid the 
>> whole issue
>> with a piece of paper. Maybe in ten years things will have settled somehow.
>> The above is dated from 2010 that's not far away.
>>
>> I will not anything else to this thread, the world is as it is. I you think 
>> that you are
>> frustrated, maybe we should have a drink together and I could explain how
>> much I am frustrated by this shattered world
>>
>> Do you expect to drop at the Conj ?
>>
>> Luc
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> > 2012/10/7 Softaddicts 
>>
>> > > The validity of a scanned signature or electronic keys is subject to
>> > > interpretation
>> > > and assessment on a per case basis especially in civil contracts by the
>> > > diverse
>> > > legal systems on Earth.
>>
>> > > It's not the Clojure community that is behind, it's the legal systems of
>> > > many countries
>> > > that did not follow the pace of technology. Some will not recognize
>> > > scanned signatures
>> > > at all.
>>
>> > > On the other hand, original hand written signatures are recognized almost
>> > > every where.
>>
>> > A reminder: scans work for Oracle and ASF. Oracle probably has x100 as many
>> > lawyers as
>> > Clojure/core, lawyers several times as experienced and about x10,000 times
>> > as much experience with this stuff as a company. And it works for them.
>>
>> > > As much as you complain about the paper CA, you should complain about
>> > > the legal systems of these countries that do not follow US and western
>> > > Europe
>> > > attempts to recognize technology changes and adapt to it.
>>
>> > > You analyze the issue by the wrong end
>>
>> > > It's not a technology issue, it's a legal one.
>>
>> > > You could have the best electronic authentication scheme, if it's not
>> > > recognized by a country's legal system, it's useless in court in this
>> > > country.
>> > > If claims rights on contributions not backed by a CA in a valid form as
>> > > defined in this
>> > > country, it's a lost case.
>>
>> > > Big organizations have the tools and budgets to fight in various legal
>> > > systems
>> > > out there. Not small open source projects or projects without big 
>> > > sponsors.
>>
>> > > I understand and approve the requirement of the original hand written
>> > > signature in
>> > > this context. That's a real life issue that cannot be dealt with by
>> > > technology alone.
>>
>> > > If a national mail system is not able to get reliably an envelope to the 
>> > > US
>> > > within 4/5 weeks, I would be very concerned about the state of their 
>> > > legal
>> > > system.
>>
>> > Sorry to break it to you, but legal systems outside of a few countries are
>> > seriously
>> > broken and it will take decades and many lives to fix this. And I assure
>> > you, people who
>> > live in those countries are just as concerned as you are, thanks for 
>> > caring.
>>
>> > So the system is how it is. Clojure/core can
>> > accept this unfortunate fact and find a way to accept CA submissions
>> > electronically.
>>
>> > Or they can ignore all the complaints (again, not about the CA per se, but
>> > how it is currently submitted) and lose many potential contributions.
>>
>> > Contributions from people who really want to make Clojure better, ready to
>> > spend
>> > many hours of their time contributing but were not lucky enough to be born
>> > in the Wonderland called Canada, where the law rules and the sun shines (at
>> > least 2 months of the year).
>>
>> > It always starts with contributing something small. Then something else
>> > small.
>> > Then something slightly more significant. And next thing you kno

Re: Handling exceptions (subject renamed)

2012-10-05 Thread gaz jones
http://clojure.github.com/clojure/clojure.stacktrace-api.html

On Fri, Oct 5, 2012 at 12:06 PM, Matt  wrote:
> Hi,
>
> Sorry to anyone who read the original post.
> Apparently I had malformed the try block encompassing the create-table in a
> very non-clojure-ish way.
> So my problem wasn't with clojure.java.jdbc's create-table. Being 'dynamic',
> clojure could not warn me about it until it crashes in runtime. I guess I
> should also learn more about making exception printouts contain more details
> (such as line number as one, if that's at all possible?)
> I'd appreciate knowing how to get more details when an exception is caught
> by my code e.g. at least a line number if possible -
>
> I was using -
> (catch Exception e (println (str "Exception is: " e)))
>
> Which only yielded a general description (java.lang.ClassCastException:
> clojure.lang.ArraySeq$ArraySeq_int cannot be cast to clojure.lang.IFn)
> without indicating where my code broke.
>
> Is it possible to get the source line that made the code break?
>
> Thanks!
>
> On Friday, October 5, 2012 5:15:18 PM UTC+2, Matt wrote:
>>
>> Hi,
>>
>> I'm relatively new to Clojure. This must be easy.
>> I am trying to write a function that creates a table with a name passed as
>> argument, and this naturally requires passing clojure.java.jdbc/create-table
>> a value for the table name, rather than specifying the name as a constant.
>> However I'm not insofar able to pull it off.
>>
>> When I use the form create-table passed-argument [fields] as opposed to a
>> constant as in create-table :hard-coded-entity-name [fields], then the table
>> gets successfully created in the database, however my code also gets an
>> exception - java.lang.ClassCastException: clojure.lang.ArraySeq$ArraySeq_int
>> cannot be cast to clojure.lang.IFn. The exception is received even though
>> the table had been seemingly perfectly created. I'm probably missing
>> something basic. What do you think can it be?
>>
>> Thanks,
>> Matt
>>
>>
>>
> --
> 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: Noir.response and custom java object

2012-10-04 Thread gaz jones
It seems to be using cheshire under the covers, did you add an encoder
for your class? e.g:

(add-encoder java.awt.Color
(fn [c jsonGenerator]
(.writeString jsonGenerator (str c

On Thu, Oct 4, 2012 at 12:04 PM, arekanderu  wrote:
> Hello,
>
> I am not sure if i am supposed to ask a noir-related question in the group
> but the noir issues at github is closed so i thought someone here might
> know. I am trying to use a custom encoder with noir.response but i am
> failing to understand how.
>
> This is what I am trying to do which at the moment fails of course:
>
>>> (ns my-app.views.my-page
>>>
>>>   (:require [noir.response :as resp]))
>>>
>>>
>>> (defpage "/my-page" []
>>>
>>>   (let [java-object (do-something)]
>>>
>>>   (resp/json java-object)))
>
>
> The error message
>
>> Cannot JSON encode object of class: class-name-here - (class
>> org.codehaus.jackson.JsonGenerationException)
>
>
> It does work however if i use gson on my java-object before i pass it to
> resp/json but i prefer to do it without gson. I am pretty sure its possible
> :)
>
> Thank you for any replies
>
>
> --
> 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: Clojure web framework

2012-10-03 Thread gaz jones
You do not need noir to create a simple json api, just use compojure.
I find the Cheshire json library to also be useful:
https://github.com/dakrone/cheshire. Authentication and authorization
libs were pretty much up to you until
https://github.com/cemerick/friend was released fairly recently, so
you could look at that (I haven't used it myself). I would also
recommend starting the server with embedded jetty rather than mess
around with app containers, it's far simpler (look at
ring.adapter.jetty).

We have many json apis written in clojure in production where I work,
and they have worked out great for us.

On Wed, Oct 3, 2012 at 1:01 PM, arekanderu  wrote:
> Hello,
>
> I had a similar question as the OP so I thought i should post it in this
> thread instead of starting a new one.
>
> I am trying to build a web services api which will only respond in json
> format. I had a look at everything suggested in this topic and I am leaning
> towards noir. Do you think this would be a good option for a web services
> api or should i go with ring + compojure, or something else?? In addition, I
> will be needing to add authentication and authorization at the api and I
> haven't found a noir middleware to be able to handle this. Do I need to roll
> out something of my own with the use of noir pre-route and maybe a
> middleware or is there something in existence which I am not aware of?
>
> Thank you for any replies.
>
>
> On Friday, September 28, 2012 10:36:20 AM UTC+3, Yakovlev Roman wrote:
>>
>> Hi
>> So i'd like to point to the problem here. Clojure web framework in google
>> get these results, at least for me
>> 1. noir
>> 2. stackoverflow question 2008 year
>> 3. stackoverflow question 2010 year
>> 4. joodo ( outdated thing developed by one person)
>> 5. Compojure ( routing dsl)
>> So there is no popular framework these days for clojure.
>> Noir is mostly Chris Granger thing. As he make Lighttable today Noir
>> developed by some other people ( or may be on person not sure). Main site
>> instructions are nice but already outdated ( lein2). No news, no blog, no
>> new features, no examples, no infrastructure. Lein new project, insert noir
>> in dependencies and you don't have working app, you must add :main and stuff
>> to work. What about testing ? no info, no structure, decide on your own.
>> It's no secret that web development today is biggest and popular trend. If
>> language and it's community have good web framework that language will gain
>> more popularity.
>> Take Ruby on rails it has over 30 core contributers, huuuge community,
>> active development, industry standart web development framework. Good
>> testing, development infrastracture, easy start, sprockets for js css
>> managment and so on. Also it has some books about testing and framework
>> itself which is good start point for newbies.
>> I like Clojure, for simplicity mostly. It has amazing power and i believe
>> it can be very good platform for web development.
>> So what i suggest :
>> Take 1 platform for web development in Clojure (for example noir as most
>> mature framework) .
>> Form working core group from 5-6 people.
>> Decide about name of the project ( or take Noir)
>> Make good site about it
>> Make a plan for development ( what core features should have first
>> version)
>> Make first version
>> Make couple good examples
>> Make good documentation and maybe a book ( community book for example on
>> github that will be online and updated frequently).
>> --
>> http://www.playframework.org/ good example what site could be
>> Alternative to online book can be guides, as for ruby on rails
>> http://guides.rubyonrails.org/index.html
>> Another good news that there is nice web IDE for Clojure by Bodil Stokke
>> https://github.com/bodil/catnip. Super easy install, very nice insterface,
>> reactive interface ( no need for browser refresh, autorecompile when you
>> save ) web based ! and under active development, just perfect place for
>> newbies to start. So this project also can be added to Clojure Web framework
>> project.
>> Also we have ClojureScript so Clojure web framework would be perfect place
>> where this thing can shine.
>> Let's discuss.
>
> --
> 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

Re: Transforming an ugly nested loop into clojure code

2012-10-01 Thread gaz jones
You appear to be running over the map purely for side-effects,
therefore off the top of my head something like:

(defn my-func
  [data]
  (doseq [area data
  warehouse (:warehouses area)
  container (:containers warehouse)
  box (:boxes container)]
(if-not (empty? (:items box))
  (doseq [item (:items box)] (do-something (:box box) (:item item)))
  (do-something-else (:warehouse warehouse)
 (:container container)
 (:box box)

Might be more appropriate...


On Mon, Oct 1, 2012 at 5:07 PM, arekanderu  wrote:
>> (def my-data [{:area "Somewhere" :warehouses
>>
>>[{:warehouse "W54321" :containers
>>
>> [{:container "C12345" :boxes
>>
>>   [{:box "B12345" :items
>>
>> [{:item "I12345"}]}]}]}]}
>>
>>   {:area "SomewhereElse" :warehouses
>>
>>[{:warehouse "W54321" :containers
>>
>> [{:container "C54321" :boxes
>>
>>   [{:box "B54321" :items
>>
>> [{:item "I54321"}]}]}]}]}])
>>
>>
>> (defn my-func [data]
>>
>>   (map (fn [area]
>>
>>  (map (fn [warehouse]
>>
>> (map (fn [container]
>>
>>(map (fn [box]
>>
>>   (if (not (empty? (:items box)))
>>
>> (map (fn [item]
>>
>>(doSomething (:box box) (:item
>> item)))
>>
>>  (:items box))
>>
>> (doSomethingElse (:warehouse warehouse)
>> (:container container) (:box box
>>
>>   (:boxes container)))
>>
>>  (:containers warehouse)))
>>
>>   (:warehouses area)))
>>
>>data))

-- 
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 do I evaluate this lazy sequence?

2012-09-27 Thread gaz jones
Couple of initial things, Clojure has immutable data structures so
when you call for example 'assoc' it will return you a new map with
the new values assoc'd. It will not mutate the original, so:

(let [foo {}]
  (assoc foo :a 1)
  (assoc foo :b 2)
  foo)

Will return {}. You need to do something like:

(-> {}
 (assoc :a 1)
 (assoc :b 2))

=> {:a 1 :b 2}

FYI, assoc takes multiple kvps:

(assoc {} :a 1 :b 2)

Also, to return valid JSON, you cannot simply call 'str' on the map.
You need to use a library like https://github.com/dakrone/cheshire or
https://github.com/clojure/data.json and encode the map as JSON.

Perhaps you could illustrate the data structure you are holding inside
of @registry, and the structure of the JSON you would like to emit.
Laziness is not an issue here.


On Thu, Sep 27, 2012 at 12:02 PM, larry google groups
 wrote:
> I would like 2 types of advice:
>
> 1.) an answer to this specific question
>
> 2.) advice on how one is suppose to debug mysteries likes this
>
> I have a simple web app that serves some data (hopefully in JSON
> format, but at the moment I will accept anything at all). The app uses
> Ring and Moustache and outputs the data.
>
> We start with a simple atom:
>
> (def registry (atom {}))
>
> We put some data in this atom. And then we output it. But I have had
> great difficulty getting anything to appear on the screen. Assuming
> the problem was with the fact the main sequence was lazy, I added in
> doall everywhere it made sense. But I still can not get anything to
> work:
>
> (defn current-users [request]
>   "The default action of this app. Add new users to the registry, and
> delete the ones that are more than 15 seconds old"
>   (let [this-users-params (:params request)
> final-map-for-output {}]
>   (add-to-logged-in-registry this-users-params)
>   (remove-old-registrants)
>   (response (apply str (into {}
>  (doall
>   (map (fn [each-user-map]
>  (doall
>   (let [inner-details (second each-
> user-map)]
> (assoc final-map-for-output
> "username" (get inner-details "username" "nothing found for user"))
> (assoc final-map-for-output
> "updated" (get inner-details "updated" "nothing found for updated"))
> final-map-for-output)))
>@registry)))
>
> The various variations I have tried on this have either given me a
> blank white page or:
>
> {}
>
> Nothing else.
>
> I used to do simply:
>
>   (response (apply str (doall @registry)
>
> This worked fine. But it did not output valid JSON, so I wanted to
> change the format. But I have not been able to get anything to appear
> on screen.
>
> Suggestions?
>
> --
> 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: JSON serialization with unknown types

2012-09-26 Thread gaz jones
you might find this useful:

https://github.com/dakrone/cheshire

you can pretty much swap it in for data.json IIRC and it has nice
support for custom encodings, amongst other things.

On Wed, Sep 26, 2012 at 12:39 PM, Robert Beaupre
 wrote:
> Hi there,
> I am wondering what the best/recommended way to deal with serialization of
> unknown types to JSON with clojure.data.json.  For things like UUIDs and SQL
> Dates, I get errors like this:
> java.lang.Exception: Don't know how to write JSON of class java.util.UUID
>
> With Clojure 1.4 is there an extensible way of doing this or should I make a
> wrapper function that converts unknown types to strings and then call
> json-str on the data structure?
>
> Thanks,
> Robert
>
>
> --
> 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: Lazy sequences to replace looping?

2012-09-12 Thread gaz jones
You may find this useful:

http://blog.fogus.me/2010/01/22/de-chunkifying-sequences-in-clojure/

loop-recur might be the best way to do it.

On Tue, Sep 11, 2012 at 11:16 PM, Geo  wrote:
> Hello,
>
> I am just getting started with Clojure and I had a question. I have to
> following code:
>
> (get-rss-entry (get-rss-feeds h-res) url)
>
> The call to get-rss-feeds returns a lazy sequence of URLs of feeds that I
> need to examine.
>
> The call to get-rss-entry looks for a particular entry (whose :link field
> matches the second argument of get-rss-entry). It examines, one-by-one, the
> lazy sequence returned by get-rss-feeds. Evaluate each item requires an http
> request across the network to fetch a new rss feed. Therefore, to minimize
> the number of http requests it's important to examine the sequence
> one-by-one and stop as soon as there is a match.
>
> Here is the code:
>
> (defn get-rss-entry
>   [feeds url]
>   (first (drop-while empty? (map #(entry-with-url % url) feeds
>
> entry-with-url returns a lazy sequence of matches or an empty sequence if
> there is no match.
>
> First, I want to make sure I understood lazy evaluation correctly and that I
> did this right. I tested this and it seems to work correctly.
>
> Second, not sure if I am solving this problem idiomatically. In Java, for
> example, this would likely be solved with a loop examining some data
> structure. At first I did it with a loop/recur but that didn't seem like the
> right way to do it. Also I saw somewhere that looping in considered low
> level in Clojure or something to that effect. I would appreciate your
> feedback.
>
> Thanks for your help.
>
> --
> 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: Question: Looking at Noir code - hey, are those singletons?

2012-09-12 Thread gaz jones
I find myself having to make similar choices quite often in my own
Clojure code - do I create perhaps a map of things that represent some
kind of 'state' and pass that around to each function that needs it,
or do I do what has been done above and create some vars in a ns where
most (all?) the functions that use this data live.

I think either can be the right choice in different circumstances. For
example, I always store configuration data in a var that has a few
functions using it rather than passing a config map to every function
in the application that needs access to it. I just use those functions
throughout the codebase instead.

I'm not at all familiar with noir so cannot answer your question
regarding that specifically, but I would say using your own judgement
is a "Clojure best practice" :)

On Wed, Sep 12, 2012 at 9:30 AM, the80srobot  wrote:
> Is this a Clojure best practice?

-- 
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: Routing HTTP/ JSON in clojure

2012-09-04 Thread gaz jones
We do all of the things you mention (minus the replay, but that would
be trivial) in Clojure where I work, and it is remarkably easy. We
use:

* ring + compojure and an embedded jetty server to create lightweight webservers
* the Cheshire JSON encoding/decoding library for all JSON purposes
(https://github.com/dakrone/cheshire)
* we wrote our own small wrapper around rabbitmq - but there are
several available now (such as
https://github.com/michaelklishin/langohr)
* for mongo we use: http://clojuremongodb.info/

We also found that when processing JSON messages, multimethods can be
extremely useful as a dispatch mechanism if the shape of the JSON data
dictates what should happen to it. I would certainly recommend Clojure
for what you describe, I think you will be pleasantly suprised how
straightforward it is :)

On Tue, Sep 4, 2012 at 7:05 PM, Russell Whitaker
 wrote:
> On Tue, Sep 4, 2012 at 4:45 PM, David Dawson
>  wrote:
>> Hiya!
>>
>> I saw the names, but then was swamped by moustache, noir and others that at
>> first glance appear to be in similar spaces.  I found it a bit difficult to
>> pick out the various specialisms or layers each library is aiming at tbh.
>> So, I thought it best to look for some guidance if possible from people who
>> know what they're doing ... :-)
>>
>
> Some of us are only "ahead of you" by relative measures: I myself had
> to _remove_ noir
> & noir-async from a project today because of some reloading issues
> introduced by the latter; see
> today's (4 Sep 2012) clojure IRC log:
>
> http://clojure-log.n01se.net/
>
> Russell
>
>> david
>>
>>
>> On Wednesday, 5 September 2012 00:24:46 UTC+1, Russell Whitaker wrote:
>>>
>>> On Tue, Sep 4, 2012 at 1:52 PM, David Dawson
>>>  wrote:
>>> > Hiya,
>>> >
>>> > So, I'm a clojure newbie... and I've been asked to evaluate a few
>>> > different
>>> > technology options for a project I've been handed.
>>> >
>>> > The end result will need to be a 'router' that accepts JSON messages
>>> > over
>>> > HTTP, store them into some datastore (ideally one of the ones available
>>> > on
>>> > cloudfoundry, postgres mongo etc), then forward the message onto one or
>>> > more
>>> > end points.   Forwarding will probably be either dropping into rabbitmq
>>> > or
>>> > posting on with HTTP.
>>> >  (or both).
>>> >
>>> > There also needs to be a replay capability, so you can tell the router
>>> > to
>>> > scoop up the historical messages from the datastore and forward them all
>>> > on
>>> > (in order) to a particular end point.
>>> >
>>> > I'm totally open to any tech, prebuilt (and commercial) or development
>>> > required but given that the system needs some algorithmic routing rules,
>>> > clojure seemed a really nice conceptual fit over the languages I
>>> > normally
>>> > work with (imperative jvm ones, essentially)
>>> >
>>> > So, I'm really interested in any suggestions on how this might best be
>>> > approached in the clojure world!
>>> >
>>>
>>> Hi David, have you looked at Ring + Compojure?
>>>
>>> --
>>> Russell Whitaker
>>> http://twitter.com/OrthoNormalRuss / http://orthonormalruss.blogspot.com/
>>> http://www.linkedin.com/pub/russell-whitaker/0/b86/329
>>
>> --
>> 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
>
>
>
> --
> Russell Whitaker
> http://twitter.com/OrthoNormalRuss / http://orthonormalruss.blogspot.com/
> http://www.linkedin.com/pub/russell-whitaker/0/b86/329
>
> --
> 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: clojure.org/getting_started: not up to date

2012-09-03 Thread gaz jones
I've been playing with Go a lot recently, and I have found the
documentation / new user experience very good:

http://golang.org/




On Mon, Sep 3, 2012 at 2:19 PM, Denis Labaye  wrote:
>
>
> On Mon, Sep 3, 2012 at 5:40 PM, Softaddicts 
> wrote:
>>
>> Btwy, using leiningen's repl hides all these issues...
>
>
> yes, and Emacs is one of the best for hacking Clojure code ...
> But not necessarily for new users, who don't know Emacs or Java.
>
> And even better than lein: You can't beat an online REPL for a quick Clojure
> experience, like http://tryclj.com/
> It would be cool if an online REPL was available just on the front page of
> clojure.org
>
>>
>>
>> Luc
>>
>>
>> > This will work only if
>> >
>> > A) there is a manifest in the jar specifying which class contains the
>> > main method
>> >
>> > B) if you do not need to add libraries explicitly, -cp is ignored when
>> > you use
>> >  -jar
>> >
>> > Clojure.org is correct, especially regarding b). If you happen to need
>> > to add
>> > libs to your REPL, -jar is a dead end.
>> >
>> > If you happen to create a specific main for your own app, using -jar is
>> > much more complex to setup.
>> >
>> > Luc P
>> >
>> >
>> > > On http://clojure.org/getting_started:
>> > >
>> > >
>> > > Download  and unzip Clojure. In the
>> > > directory
>> > > in which you expanded clojure.zip, run:
>> > >
>> > > java -cp clojure-1.4.0.jar clojure.main
>> > >
>> > > Should be just:
>> > >
>> > >
>> > > java -jar clojure-1.4.0.jar
>> > >
>> > >
>> > > It's a detail, but an important one, as it's the first contact for
>> > > most of
>> > > the new Clojure users.
>> > >
>> > > Denis
>> > >
>> > > On Mon, Sep 3, 2012 at 9:00 AM, Denis Labaye 
>> > > wrote:
>> > >
>> > > >
>> > > >1. java -cp ./org/clojure/clojure/1.4.0/clojure-1.4.0.jar
>> > > > clojure.main
>> > > >2. cut & paste your code in the REPL
>> > > >3. type (start) [enter]
>> > > >
>> > > >
>> > > >
>> > > >
>> > > > On Fri, Aug 31, 2012 at 3:36 AM, gearss 
>> > > > wrote:
>> > > >
>> > > >> I have a file named pong.clj, it isunder following, I want to know
>> > > >> how
>> > > >> can I run it?
>> > > >> Thank you.
>> > > >>
>> > > >> 
>> > > >> (ns example.game.pong
>> > > >>   (:use [penumbra opengl]
>> > > >> [clojure.contrib.def])
>> > > >>   (:require [penumbra [app :as app] [text :as text]]))
>> > > >> (def ball-width 0.03)
>> > > >> (def ball-height 0.03)
>> > > >> (def paddle-width 0.02)
>> > > >> (def paddle-height 0.15)
>> > > >> ;;;
>> > > >> (defn abs [x] (Math/abs x))
>> > > >> (defn intersect-1d [[a b] [x y]]
>> > > >>   (and (<= a y) (>= b x)))
>> > > >> (defn intersect-2d [[a b c d] [x y z w]]
>> > > >>   (and (intersect-1d [a c] [x z])
>> > > >>(intersect-1d [b d] [y w])))
>> > > >> (defn reflector [[x y w h] f]
>> > > >>   (let [r [x y (+ x w) (+ y h)]]
>> > > >> (fn [region velocity]
>> > > >>   (if (intersect-2d region r)
>> > > >> (f velocity)
>> > > >> velocity
>> > > >> (defvar boundaries
>> > > >>   [(reflector [0 -1 1 1] (fn [[x y]] [x (abs y)]))
>> > > >>(reflector [0 1 1 1] (fn [[x y]] [x (- (abs y))]))
>> > > >>(reflector [-1 0 1 1] (fn [[x y]] [(abs x) y]))
>> > > >>(reflector [1 0 1 1] (fn [[x y]] [(- (abs x)) y]))])
>> > > >> (defn update-ball [state dt]
>> > > >>   (let [ball (concat (:p state) (map + (:p state) [ball-width
>> > > >> ball-height]))
>> > > >> v (reduce
>> > > >>#(%2 ball %1) (:v state)
>> > > >>(conj
>> > > >> boundaries
>> > > >> (reflector [0.01 (:left state) paddle-width
>> > > >> paddle-height]
>> > > >>(fn [[x y]] [(abs x) y]))
>> > > >> (reflector [(- 0.99 paddle-width) (:right state)
>> > > >> paddle-width
>> > > >> paddle-height]
>> > > >>(fn [[x y]] [(- (abs x)) y]]
>> > > >> (assoc state
>> > > >>   :v v
>> > > >>   :p (map + (:p state) (map (partial * dt) v)
>> > > >> (defn draw-ball [pos]
>> > > >>   (push-matrix
>> > > >>(apply translate pos)
>> > > >>(draw-quads
>> > > >> (vertex 0 0)
>> > > >> (vertex ball-width 0)
>> > > >> (vertex ball-width ball-height)
>> > > >> (vertex 0 ball-height
>> > > >> ;;;
>> > > >> (defn update-opponent-paddle [state]
>> > > >>   (let [[x y] (:p state)
>> > > >> [vx vy] (:v state)
>> > > >> dt (/ (- 1 x) vx)
>> > > >> dy (- (+ y (* vy dt)) (:right state))]
>> > > >> (assoc state
>> > > >>   :v-right (if (neg? vx) 0 (/ dy dt)
>> > > >> (defn update-player-paddle [state]
>> > > >>   (assoc state
>> > > >> :v-left
>> > > >> (cond
>> > > >>  (app/key-pressed? :up) -1
>> > > >>  (app/key-pressed? :down) 1
>> > > >>  :else 0)))
>> > > >> (defn update-paddle [dt v pos]
>> > > >>   (min (- 1 paddle-height) (max 0 (+ pos (* dt v)
>> > > >> (defn draw-paddle [x y]
>> > > >>   (push-matrix
>> > > >>(translate

Re: Origin of tools.cli optional

2012-08-24 Thread gaz jones
The library was originally based on Clargon (a library I wrote) which
had the interface you are describing (optional and required
functions). Various changes were made after getting feedback on the
clojure-dev mailing list, which you can read about here if you're
interested:

https://groups.google.com/d/topic/clojure-dev/KGvzndhX5vk/discussion

Hopefully the project documentation is clear about its use:

https://github.com/clojure/tools.cli

Hope that helps,

Gaz

On Fri, Aug 24, 2012 at 2:52 PM, octopusgrabbus
 wrote:
> Given the following code
>
> (defn parse-opts
>   "Using the newer cli library, parses command line args."
>   [args]
>   (cli args
>(optional ["--in-file-name" ".csv input file" :default
> "resultset.csv"] identity)
>(optional ["--out-file-name" ".csv pipe delimited output file"
> :default "accumail_out.unl"] )))
>
> What is the origin of optional, and why do tools.cli examples that I can
> find now leave out (optional ... ?
>
> Would current examples still use identity?
>
> Here is why I'm asking:
>
> http://stackoverflow.com/questions/12112403/how-do-i-mix-non-optional-cli-arguments-with-optional-ones
>
> Thanks for any pointers or help.
>
> --
> 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: A succinct & reasonably fast sudoku solver in core.logic

2012-07-31 Thread gaz jones
Wow, that's pretty nice.

On Tue, Jul 31, 2012 at 8:07 AM, David Nolen  wrote:
> Ever since I read Norvig's cool Python solution,
> http://norvig.com/sudoku.html, I've been wanting to see if this could be
> done in core.logic without sacrificing generality. Now that we have cKanren
> extensions in master I gave it a shot (thanks to Martin Trojer) and I'm
> happy with the results.
>
> http://dosync.posterous.com/sudoku
>
> I think this example illustrates how powerful it can be to use functional
> programming to drive a logic program.
>
> David
>
> --
> 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: is their a Clojure framework for handling form validation?

2012-07-23 Thread gaz jones
https://github.com/mikejones/mississippi

again, not specific to web forms. works on clojure maps and is extensible.

On Sun, Jul 22, 2012 at 6:46 PM, larry google groups
 wrote:
> Since 2000 I've been doing web development, first with PHP and then with
> Ruby On Rails. In the world of PHP, there are some frameworks, such as
> Symfony, that have classes for managing forms, both generating the HTML for
> the forms, and also handling the validation of the forms. In the world of
> Python, the Django framework also has facilities for generating and
> validating forms. These frameworks offer certain time saving conveniences.
> For instance, with the Symfony framework, if you have a database table that
> has a foreign key, then you can get that other table (the target of the
> foreign key) to appear in a form as a pre-populated select box,
> automatically (after filling out some config files).
>
> I'm now trying to make Clojure my primary development language for
> everything, including web development. I'm curious, are there any libraries
> in the land of Clojure that offer similar conveniences for forms?
>
> --
> 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: ClojureScript Synonyms

2012-04-23 Thread gaz jones
cheers! :D

On Mon, Apr 23, 2012 at 4:20 PM, David Nolen  wrote:
> I've added links to Himera in the ClojureScript GitHub README
>
> On Mon, Apr 23, 2012 at 5:18 PM, gaz jones  wrote:
>>
>> this page is amazing:
>>
>> http://himera.herokuapp.com/synonym.html
>>
>> this should be part of the standard docs for clojurescript - or am i
>> just blind and cannot find it? it would have saved me so much time
>> *sob*
>>
>> On Mon, Apr 23, 2012 at 3:45 PM, David Nolen 
>> wrote:
>> > http://himera.herokuapp.com/synonym.html
>>
>> --
>> 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

-- 
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: ClojureScript Synonyms

2012-04-23 Thread gaz jones
this page is amazing:

http://himera.herokuapp.com/synonym.html

this should be part of the standard docs for clojurescript - or am i
just blind and cannot find it? it would have saved me so much time
*sob*

On Mon, Apr 23, 2012 at 3:45 PM, David Nolen  wrote:
> http://himera.herokuapp.com/synonym.html

-- 
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


ANN expectations-mode 0.0.2

2012-04-21 Thread gaz jones
Hey,

I use the expectations testing framework a fair amount at work, so
created an emacs minor mode for running the tests ala
clojure-test-mode. It is based on clojure-test-mode so has many of the
same keybindings:

https://github.com/gar3thjon3s/expectations-mode/tree/0.0.2

I had to update expectations itself to add extra metadata onto its
test vars, so it only works with >= v1.3.7 or expectations. I have
pushed expectations-mode to the marmalade-repo or you can just put it
on your load-path and require it.

Hope somebody else finds it useful,

Cheers,
Gaz

-- 
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: Newbie question about rebinding local variables

2012-04-19 Thread gaz jones
to answer your question directly, you would need to do something like
this to make it work the way your example is set up:

(defn new-game []
  (let [board (atom (into [] (repeat 9 nil)))]
(fn [n & [i]]
  (cond
   (= n :x) (swap! board assoc i 'x)
   (= n :o) (swap! board assoc i 'o)
   (= n :print) (println @board)

(def g1 (new-game))

(g1 :x 0)
(g1 :print)

On Thu, Apr 19, 2012 at 9:58 PM, Armando Blancas  wrote:
> You could keep the board in an atom so it can mutate; then try to find maybe
> two good places for mutation to happen, your move and the program's. With
> the rest being functional you'll avoid the problems of global state while
> not being forced to fit your logic into a loop of some re-binding that
> simulates mutation.
>
>
> On Thursday, April 19, 2012 3:21:56 PM UTC-7, Craig Ching wrote:
>>
>> Ok, I've read that what I want to do is a no no.  But this is the sort of
>> thing I did in Scheme about 20 years ago (and because of that I'm probably
>> misremembering ;-)).
>>
>> Basically I'm learning clojure and thought I'd write a tic tac toe game.
>>  But not any tic tac toe, I want to write one where I can have multiple
>> games going simultaneously.  Something like:
>>
>> (def g1 (new-game))
>> (def g2 (new-game))
>>
>> (g1 :x 0)
>> (g1 :print)
>> (g2 :x 5)
>> (g2 :print)
>>
>> So the schemer in me (and probably the imperative programmer as well)
>> thought I could return a clojure that encapsulates the board value,
>> something like this:
>>
>> (defn new-game []
>>
>>   (let [board (into [] (repeat 9 nil))]
>>
>>     (fn [n i]
>>
>>       (cond
>>
>>         (= n :x)(set! board (assoc board i 'x))
>>
>>         (= n :o)(set! board (assoc board i 'o))
>>
>>         (= n :print) (println board)
>>
>>
>> Of course I get an error saying I can't bind to the non-mutable board.
>>
>> I'm really new to Clojure, so apologies if this is really basic for this
>> list.  Can I do what I want or can someone point me in the right direction?
>>  I've seen some other tic tac toe implementations on github, but they use
>> recur to track state and I was hoping there was a cleaner idiomatic way than
>> that.
>>
>> Thanks!
>>
> --
> 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


ANN: Mississippi 1.0.0 - validating maps

2012-04-07 Thread gaz jones
Hey,

Both myself and my brother do a fair amount of validating maps of data
in our day jobs (EXCITE!) so we put together a library a while ago to
help out. We just got round to releasing 1.0.0 recently so thought I
would announce it here in case anyone else is interested:

https://github.com/mikejones/mississippi

Basic usage is like:

user> (use 'mississippi.core)
user> (def subject {:a nil :b 1})
user> (def validations {:a [(comp not nil?) :msg "required"]
 :b [number? :msg "not numeric"]})
user> (validate subject validations)
{:a nil, :b 1, :errors {:a ("required")}}

It's fairly simple and there are more examples of other features and
built-in validators in the README on the homepage, along with
installation instructions etc. Hope others may find it useful.

Cheers,

-- 
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: Polymorphic namespaces?

2012-03-28 Thread gaz jones
I would ask why you would want to do dependency injection? If it is to
swap out functions for testing, just use 'with-redefs'. I have
personally found it (DI) completely unnecessary...

On Wed, Mar 28, 2012 at 1:13 PM, Chris McBride  wrote:
> I was wondering how dependency injection is done in Clojure since functions
> live in static namespaces. It seems like this could be achieved by having a
> macro that can use runtime information to determine the mapping between a
> namespace and its implementation. Does this make sense? Is there a better
> way to dependency injection in Clojure?
>
> --
> 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: Creating map from string

2012-03-18 Thread gaz jones
argh i come back to paste in my answer and you beat me to it :(

i was gonna say:

(let [s ""@key1  this is a value  @another-key  and another value
@test1 and other value""]
  (reduce (fn [m [_ k v]] (assoc m k (string/trim v))) {} (re-seq
#"(@[\w-]+)([^@]*)" s)))

much the same...

On Sun, Mar 18, 2012 at 3:14 PM, David Powell  wrote:
>
> You could use a regexp to pick out the key and the value - something like
> this:
>
> (into {}
>   (map (fn [[_ x y]] [(keyword x) (clojure.string/trim y)])
>     (re-seq #"(@[^ ]*) *([^@]*)" s)))
>
> --
> Dave
>
> --
> 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: Bret Victor - Inventing on Principle

2012-02-24 Thread gaz jones
nah it's possible i guess, but he's the only other person i've ever
seen type an essay about it on this forum in reply to someone posting
a link to a video. also, he posts and yours are very similar and he
disappeared shortly before you arrived. AND YOU WOULD HAVE GOT AWAY
WITH IT IF IT WASNT FOR THOSE MEDDLING KIDS!!

On Fri, Feb 24, 2012 at 1:12 PM, Cedric Greevey  wrote:
> On Fri, Feb 24, 2012 at 2:06 PM, gaz jones  wrote:
>> Are you Ken Wesson with a new account?
>
> Who?
>
> Wait. Surely you don't think that it's not possible for more than one
> person to prefer text to video as a way of disseminating verbal
> information over the internet, given all of text's advantages in such
> areas as bandwidth, cost, and tool support?
>
> --
> 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: Bret Victor - Inventing on Principle

2012-02-24 Thread gaz jones
Are you Ken Wesson with a new account?

On Fri, Feb 24, 2012 at 1:00 PM, Cedric Greevey  wrote:
> On Fri, Feb 24, 2012 at 1:29 PM, Damien Lepage  wrote:
>> Hi Everyone,
>>
>> You may have seen this already, if not I believe it's worth investing 1h of
>> your life:
>> http://vimeo.com/36579366
>>
>> That's already a good candidate for the technical talk of the year, if not
>> the decade IMO.
>
> What is it with people these days and using videos for stuff that
> could be far better posted as text?
>
> A "talk" can inherently be presented as text, perhaps HTML with a few
> inline images if there are slides.
>
> And text (or HTML) has some HUGE advantages:
>
> * Download size is kilobytes, not gigabytes
>
> * Can be viewed on dialup, mobile, etc. without stuttering, not
>  working at all, costing an arm and a leg, or etc.
>
> * Google can find it by the full content of the talk, not just what
>  few keywords someone slaps onto the video's youtube page plus the
>  inanities added by the inevitable swarm of troll commenters.
>
> * You can search in it yourself with ctrl-F in your browser.
>
> * You can skim it.
>
> * If you're a fast reader, you can probably read it and comprehend
>  it all in less than an hour.
>
> * You can navigate in it very easily, using normal scrolling, search,
>  and other browser tools, and see where you're going while you
>  scroll, rather than having to drag a tiny little thingy across a
>  tiny little seek bar blind, drop it, and then wait 40 seconds while
>  a little wheel spins for the Flash player to *maybe* jump to the
>  spot in the video, whereupon you will repeat the process a few
>  times with ever finer adjustments; but the player might hang
>  or snap back to where it was or crash instead.
>
> * You can keep a copy for offline viewing without needing:
>  a) hacking tools to bypass the attempts by the popular video
>     sites to be streaming-only,
>  b) one or another big bloated piece of media player software that
>     will steal file associations at inconvenient and random times,
>     and
>  c) a shitload of disk space.
>
> * No extra plugins etc. needed to view it that guzzle CPU and
>  memory, crash at inconvenient times, and the like. You can view
>  it in Lynx (minus the slides, if any) if you want to. You can
>  view it on a 286 with no graphics card (not no 3D card, no
>  graphics, period, just 80x24 text mode). You can view it on your
>  old Commodore 64 with 300 baud modem if you want to and it won't
>  take sixty thousand years to download on that either.
>
> * You can copy and paste bits of it into a snippets file or
>  whatever, if there's bits you want to refer back to later that
>  gave you technical ideas. Or print it out and apply hiliter to
>  key passages. Or etc.
>
> * If you're blind you can still get screen-reader software to
>  read it for you. If you're deaf, on the other hand, a video is
>  quite likely to be completely useless, since streaming framerates
>  and lip-reading don't tend to mix and none of these things seem
>  to be closed-captioned.
>
> * Text is easy and cheap to mirror widely around the net and
>  relatively easy to translate to other languages. Video can be
>  hosted free at only a handful of sites and is more work to
>  translate.
>
> What does video get you that text or HTML+images couldn't get you?
>
> * You can hear what the guy's voice actually sounds like.
>
> * You get to see a talking head bobbing around and lips moving in
>  a jerky, stuttery sort of way.
>
> * You get the pronunciation, but not the spelling, of the obscure
>  technical/latin words that get used, instead of the other way
>  'round.
>
> * There can be full-motion video demonstrations of things.
>
> Not worth what you lose, IMO, even if you aren't deaf, and especially
> if you are. Full-motion video demonstrations can be separate short
> videos embedded in a text+images web page.
>
> Oh, and by the way, your post doesn't even bother to actually say
> what, exactly, the talk is about. It implies strongly that it has
> something to do with interactive development tools, and it's clear
> that something in it wowed you, but that's it, and the URL itself is
> completely opaque. Apparently the only way to find out in more detail
> what the talk's topic is is to click the link, at minimum, and maybe
> you even have to play the video part-way.
>
> --
> 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 mo

Re: Emacs: Optimize Imports?

2012-01-01 Thread gaz jones
I believe this might be what close to what you are looking for:

https://github.com/technomancy/slamhound

On Sun, Jan 1, 2012 at 1:03 PM, Daniel Glauser  wrote:
> Hello folks,
>
> Does anyone know a way with Emacs/Leiningen/Slime/Swank to ask the
> system to optimize the imports?  I'm looking for something similar to
> the way Intellij does things:
>
> http://www.jetbrains.com/idea/webhelp/optimizing-imports.html
>
> Converting existing Java example to Clojure and many of the examples
> don't include import statements.  Working with recursive greps and
> opening the JARs in Emacs helps but I just wanted to ask around if
> anyone has an easier way.  Tried bringing the project into Intellij
> with the Leiningen and La Clojure plugins but Code->Optimize Imports
> is disabled.
>
> Looks like this was asked about previously but no answer was reached.
> http://groups.google.com/group/clojure/browse_thread/thread/98f985926f096850/602f8ff61ec735ae?lnk=gst&q=emacs+imports#602f8ff61ec735ae
>
> Cheers,
> 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: How to "print" to stdout from the repl without a nil at the end?

2011-12-30 Thread gaz jones
> Yes - I do get the result of the print function in the repl (i.e. nil), and 
> I'm trying to see how I can somehow prevent that nil from printing to stdout.

Yeah, the point I was making is that you are always going to see that
'nil' printed at the repl because it always evaluates and prints the
result of the function, where as in reality that 'nil' would never get
written to stdout (unless you explicitly captured it and wrote it
yourself). It's the repl that's special - not the -main function.

-- 
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 "print" to stdout from the repl without a nil at the end?

2011-12-30 Thread gaz jones
are you sure you're not just seeing the result of the function call in
the repl? for example this:

(ns filter.core
  (:require [clojure.string :as string])
  (:gen-class))

(defn -main
  [& args]
  (loop []
(when-let [line (read-line)]
  (println (string/upper-case line))
  (recur

when run, produces:

$ echo -e 'foo\nbar\nbaz' | java -cp lib/*:filter-1.0.0-SNAPSHOT.jar filter.core
FOO
BAR
BAZ
$


On Fri, Dec 30, 2011 at 1:38 PM, Frank Siebenlist
 wrote:
> I'm trying to write some filters in clojure from stdin to stdout, but I have 
> this nil at the end of the stream, which is what print returns.
>
> As an alternative, I can return strings, but then I have the surrounding "s.
>
> Or I could end by printing (symbol ""), like (do (print "hi")(symbol "")) 
> which kind of gives me what I'm looking for but seems to include a newline at 
> the end.
>
> Any other suggestions maybe?
>
> Thanks, Frank.
>
> --
> 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: Implementing a clojure-only periodic timer...

2011-12-01 Thread gaz jones
Hey Bill, I would have thought you would have to have a pretty good
reason for not using an executor for this?

(let [executor (Executors/newSingleThreadScheduledExecutor)]
  (.scheduleAtFixedRate executor your-func 0 3 TimeUnit/SECONDS))

On Thu, Dec 1, 2011 at 11:17 AM, Bill Caputo  wrote:
> Hi All,
>
> I am currently considering an approach similar to the following for
> periodically sending an update to an agent and I'm looking for
> feedback on whether there is anything wrong with it, whether it's
> idiomatic clojure (sorry I'm in the pro-that-term camp) and whether
> there are other pure-clojure alternatives I should consider (I also
> realize there are java-based periodic timers I could use as well):
>
> (def *timer* (agent nil)) ; perhaps an atom instead?
> (defn start-timer [ms a f]
>    (letfn [(tfn [m] (future (do (Thread/sleep ms) (send a f) (send
> *timer* tfn]
>    (send *timer* tfn)))
>
> given an agent:
> (def data (agent 0))
>
> we could kick off an update every 3 seconds thusly:
> (start-timer 3000 data #(inc %))
>
> A real implementation would likely have to address further
> considerations like stopping/cancelling the timer, not using a global
> for the timer, and what happens if start-timer is called twice, but
> this is the basic idea I'm considering...
>
> feedback welcome,
>
> thanks,
> 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

-- 
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: The Clojure way to solve this problem?

2011-11-30 Thread gaz jones
what about just re-defing the function inside the tests to the
instrumented version?

something like:

(ns one.http)
(defn get [] ...)

(ns one.http-instrumented)
(defn get [] ...)

(ns one.test.blah)
(with-redefs [one.http/get one.http-instrumented/get]
  ...)

guess you could put the redefs into a function and use it as a fixture
if you're using clojure.test? that would get rid of the flag and fork
in the code O_o

On Wed, Nov 30, 2011 at 5:53 PM, AndyK  wrote:
> I have Clojure code which makes HTTP requests to a server. Depending
> on the context, I want to swap out the underlying HTTP library code.
> For example, I use an instrumented library in a testing context and a
> different library in a REPL context where the instrumented library
> will not work. These are low-lying functions - the http/get and http/
> put - called within other functions for doing specific kinds of
> requests which are called in turn by other functions.
>
> What I'm wondering is what are good ways to dynamically choose which
> versions of those low-lying functions to use?
>
> For now, I'm doing this within the namespace that uses the low-lying
> functions..
>
> (def get (if (context-flag?) ns.one.http-instrumented/get ns.two.http-
> repl/get))
>
> What I don't like about this is that context-flag feeling like a hacky
> approach.
>
> Thoughts?
>
> --
> 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: A few questions on how to do things in more idiomatic ways

2011-11-21 Thread gaz jones
off top of my head i would probably do something like:

1. (-> some-var
 (assoc :foo "bar")
 other-operation
 and-another)

(see threading macros)

2. (update-in some-map [:entry] #(or % (get-new-value)))

in particular, im not sure if there is a more idiomatic way


On Mon, Nov 21, 2011 at 12:46 AM, gchristnsn  wrote:
> 1. Often I use the following construct:
>
> (let [some-var (initial-binding)
>      some-var (some operations (assoc, etc.) using some-var pvevious
> binding)
>      some-var (some operations using some-var pvevious binding
> several times)]
>  (more operations on some-var))
>
> This is probably something like the `do' monad, and I like the thing
> that the usage of previous binding of the variable is possible freely
> anywhere in the context without wrapping operations with fn and
> calling threading operator.
> But things become bad if misspelling occurs. Are there some library
> macros for such operations, or possibility to do this in less error-
> prone way?
>
> 2. Let's assume that there is a map with key :entry, and I need to
> assoc new value for this key if it's nil or leave map as is otherwise.
> I do this in following way:
>
> ...
> (let [some-map (if (:entry some-map)
>                   some-map
>                                   (assoc some-map :entry (get-new-value)))]
> ...
>
> The question is the same: what is the most correct way to do this?
>
> --
> 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: get all record instances

2011-11-05 Thread gaz jones
could you not just use a map?

(def sources {:bbc "bbc.co.uk" :google "google.com" ...})


On Sat, Nov 5, 2011 at 6:14 AM, Mark Derricutt  wrote:
> Would something like:
> (def ^:dynamic *SOURCES* (ref []))
> (defrecord Source [name url])
> (defmacro defsource [name url]
>   `(dosync (alter *SOURCES* conj (Source. ~name ~url
> (defn get-all-sources [] @*SOURCES*)
> (defsource "Google" "google.com")
> do ok?
> Man - it's been too long since I've done clojure - so rusty :)
>
>
> --
> "Great artists are extremely selfish and arrogant things" — Steven Wilson,
> Porcupine Tree
>
>
> On Sat, Nov 5, 2011 at 11:03 PM, Colin Taylor 
> wrote:
>>
>> Hi,
>>
>> given a namespace sources
>>
>> with [simplified definitions]
>>
>> (defrecord Source [name url])
>>
>> (def google (source "Google" "google.com"))
>> (def bbc (source "BBC" "bbc.co.uk"))
>> (def nbc ...
>> etc.
>>
>> what would be the idiomatic way to implement
>>
>> (defn get-all-sources)
>>
>> cheers
>> Colin
>>
>> --
>> 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

-- 
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


ANN tools.cli 0.2.1

2011-11-03 Thread gaz jones
Changes in 0.2.1 (should make it to maven central soon):

* :required option no longer supported, caused issues when trying to
provide your own --help and you have other parameters that are
"required".

You must now validate your own required parameters, eg:

(let [[options args banner] (cli [] ["-f" "--foo"])]
  (when-not (:foo options)
(println "Foo is required")
(println banner)
(System/exit 0))
  ...)

Thanks,

Gaz

-- 
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: Please announce release & breaking API changes of libraries hosted at github.com/clojure on this mailing list

2011-11-01 Thread gaz jones
Just to clarify.. no I'm not.

On Tue, Nov 1, 2011 at 2:52 PM, gaz jones  wrote:
> Hey dude, as I mentioned in the git link you pointed at there...
> apologies for any confusion. The intent was always to make an
> announcement WRT the breaking changes. I think you just caught me in
> the middle of the "merging the changes into master and getting a
> release cut" process. I am not making breaking changes with the
> intention of antagonizing people :D
>
> ...
>
> OR AM I
>
> On Tue, Nov 1, 2011 at 11:49 AM, Michael Klishin
>  wrote:
>> not
>

-- 
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: Please announce release & breaking API changes of libraries hosted at github.com/clojure on this mailing list

2011-11-01 Thread gaz jones
Hey dude, as I mentioned in the git link you pointed at there...
apologies for any confusion. The intent was always to make an
announcement WRT the breaking changes. I think you just caught me in
the middle of the "merging the changes into master and getting a
release cut" process. I am not making breaking changes with the
intention of antagonizing people :D

...

OR AM I

On Tue, Nov 1, 2011 at 11:49 AM, Michael Klishin
 wrote:
> not

-- 
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


update to clojure.tools.cli

2011-11-01 Thread gaz jones
Hi,

I have made some changes to tools.cli to fix an annoying bug arround
boolean flags and the inability to collect 'trailing arguments'.
Whilst gathering opinions on these changes, a few other suggestions
were made such as removing all magic functions and System/exit calls.
The update is therefore going to break the existing API which you
obviously need to be aware of if you are currently using 0.1.0 and
intend to upgrade to 0.2.0.

The release has been cut, but the last time I checked it still hadn't
hit maven central, so this is slightly advanced notice. To see details
of the new api please see: https://github.com/clojure/tools.cli.

There are a few things worth mentioning... support for grouped options
has been removed, and the result of the call to cli is now a vector of
[options, trailing arguments, usage banner] (originally it was just a
hash of options). Automatic help is also no longer provided, an
example of how to roll your own is at the bottom of the aforementioned
page.

a brief example of the differences (see the site for full details though):

0.1.0:

(cli ["-p" "8080" "-v" "--foo" "bar" "some-filename"]
 (optional ["-p" "--port" "The port"] #(Integer. %))
 (optional ["-f" "--foo" "Some foos"])
 (optional ["-v" "--[no-]verbose" "Be chatty"])

=> {:port 8080, :foo "bar", :verbose true}

0.2.0:

(cli ["-p" "8080" "--foo" "bar" "-v" "some-filename"]
 ["-p" "--port" "The port" :parse-fn  #(Integer. %)]
 ["-f" "--foo" "Some foos"]
 ["-v" "--[no-]verbose" "Be chatty" :default false])

=> [{:port 8080, :foo "bar", :verbose true}, ["some-filename"], "*the
usage banner*"]

Apologies for anyone upset by the timing / notification of the changes
-- I will give greater advanced notice in future if there are any more
breaking changes (hopefully there wont be :D)

-- 
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} clojure-control 0.2.1 released.

2011-10-31 Thread gaz jones
thanks for sharing, this looks extremely useful.

On Mon, Oct 31, 2011 at 11:43 AM, dennis  wrote:
> Clojure-control is a clojure DSL for system admin and deployment with
> many remote machines via ssh/rsync.It is on github:
> https://github.com/killme2008/clojure-control
>
> 0.2.1 has been released,main highlights:
> First,A shell command DSL by sunny87,for example:
>
> (cd "/home/login"
>    (run "ls")
>    (cd "bin"
>        (run "ls")))
>
> (cd "/home/login"
>    (path "/home/login/bin"
>        (env "JAVA_OPTS" "-XMaxPermSize=128m"
>            (run "clojure"
>
> Second,Supports ssh/scp/rsync options when defining cluster,they can
> be a string or a vector:
>
> (defcluster :mycluster
>              :ssh-options "-p 44"
>              :scp-options "-v"
>              :rsync-options ["-arz" "--delete"]
>              :clients [
>                       { :host "c.domain.com" :user "clogin" :ssh-
> options "-v -p 43"}
>                       ]
>              :user "login"
>              :addresses ["a.domain.com" "b.domain.com"])
>
> Third, It supports executing task in parallel now,just define cluster
> by
> (defcluster :mycluster
>                      :parallel true
>                      )
>
> At last, i recommend everyone try the lein-control plugin developed by
> sunny87 for using cc much more simply,please visit
> https://github.com/sunng87/lein-control
>
> --
> 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: trouble setting up emacs

2011-10-24 Thread gaz jones
some kind soul gave me this on the mailing list a while ago, works for me:

;; fix the PATH variable
(defun set-exec-path-from-shell-PATH ()
  (let ((path-from-shell (shell-command-to-string "$SHELL -i -c 'echo $PATH'")))
(setenv "PATH" path-from-shell)
(setq exec-path (split-string path-from-shell path-separator

(if window-system (set-exec-path-from-shell-PATH))

shove that in your init.el or wherever you are putting your
customisations. it adds your shell path to emacs path and should
enable emacs to find lein.

On Mon, Oct 24, 2011 at 6:28 PM, Howard Lewis Ship  wrote:
> I've gotten as far as changing to a directory with a project.clj and
> execute C-c C-j C-i
>
> I see this in my *swank* buffer:
>
>
> Process swank exited abnormally with code 127
> sh: line 1: lein: command not found
>
>
> lein is on my search path (in ~/bin).  Where do I update things so
> that it is on the path for the Swank process?
>
> On Tue, Oct 18, 2011 at 4:07 AM, MarisO  wrote:
>> run this script in your .emacs.d directory
>>
>> --
>> #!/bin/sh
>>
>> git clone https://github.com/technomancy/clojure-mode.git
>> wget -P paredit http://mumble.net/~campbell/emacs/paredit.el
>>
>> wget 
>> http://download.savannah.gnu.org/releases/color-theme/color-theme-6.6.0.tar.gz
>> mkdir color-theme
>> tar --strip-components=1 --directory=color-theme -xzf color-
>> theme-6.6.0.tar.gz
>>
>> rm color-theme-6.6.0.tar.gz
>> --
>>
>>
>> init.el
>>
>> --
>> (add-to-list 'load-path "~/.emacs.d/")
>>
>> ;; clojure-mode
>> (add-to-list 'load-path "~/.emacs.d/clojure-mode")
>> (require 'clojure-mode)
>>
>> (fset 'compile-and-goto-repl "\C-x\C-s\C-c\C-k\C-c\C-z")
>>
>> (global-set-key (kbd "C-c C-g C-r") 'compile-and-goto-repl)
>> (global-set-key (kbd "C-c C-j C-i") 'clojure-jack-in)
>>
>> ;; paredit
>> (add-to-list 'load-path "~/.emacs.d/paredit")
>> (require 'paredit)
>>
>> (add-hook 'clojure-mode-hook 'enable-paredit-mode)
>>
>> (global-set-key (kbd "M-p M-m e") 'enable-paredit-mode)
>> (global-set-key (kbd "M-p M-m d") 'disable-paredit-mode)
>>
>> ;; color theme
>> (add-to-list 'load-path "~/.emacs.d/color-theme")
>> (require 'color-theme)
>>
>> (eval-after-load "color-theme"
>>  '(progn
>>     (color-theme-initialize)))
>>
>> --
>>
>>
>>
>> Start emacs, change current directory (M-x cd) to a leiningen project
>> root and press C-c C-j C-i.    It should start clojure repl.
>> You will need swank as dev dependency.
>>
>> :dev-dependencies [[swank-clojure "1.3.1"]
>>                     [midje "1.1.1"]]
>>
>>
>>
>> hth,
>> Maris
>>
>>
>>
>> On Oct 18, 4:32 am, Bruce Gordon  wrote:
>>> I am trying to follow the directions 
>>> athttp://dev.clojure.org/display/doc/Getting+Started+with+Emacs.
>>> 1. I want to install the Emacs Starter Kit. The directions 
>>> athttp://dev.clojure.org/display/doc/Getting+Started+with+Emacsmention
>>> "GNU Emacs 23 or 24 is recommended", however  
>>> https://github.com/technomancy/emacs-starter-kit
>>> says "You'll need Emacs 24".  The directions say "precompiled versions
>>> are readily available for Debian-based systems...". I'm using a Debian
>>> based system. so I went tohttp://emacs.naquadah.org/.
>>> a. I executed> wget -q -O -http://emacs.naquadah.org/key.gpg| sudo
>>> apt-key add -
>>> b. I'm now confused as to which version I want: Stable? If so I should
>>> then follow the directions to add 2 lines to /etc/apt/sources.list,
>>> and then what do I do?
>>>
>>> 2. Once I get emacs 24 installed, the directions sort of leave off
>>> with " In both cases, you need to launch a Clojure instance with the
>>> correct classpath settings. This is most commonly done using a build
>>> tool such as Leiningen. For instructions see the Build Tools section
>>> of Getting Started." Going 
>>> tohttp://dev.clojure.org/display/doc/Getting+Started
>>> and perusing the Build Tools doesn't explain how to setup and launch a
>>> Clojure instance. I see some explanations 
>>> athttp://blog.bensmann.com/setting-up-a-clojure-development-environment
>>> but don't know if that includes some obsolete directions.
>>>
>>> thanks, -Bruce
>>
>> --
>> 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
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator of Apache Tapestry
>
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
>
> (971) 678-5210
> http://howardlewisship.com
>
> --
> Yo

Re: Rounding the edges of an Emacs beginner

2011-09-15 Thread gaz jones
M-{ and M-} in emacs go forward/backwards a paragraph. when in code,
this often translates well to moving around between
fragments/functions etc. you also have C-v and M-v for
forward/backward a page and then C-l for centering on the current
line. i use all of those a lot...

On Thu, Sep 15, 2011 at 2:15 AM, Stefan Kamphausen
 wrote:
> Hi,
>
> we're getting totally OT here and should probably better head for
> gnu.emacs.help.  Anyway, just one more bark from me and then I'll be quiet
> (but will respond to mail ;-)
>
> On Thursday, September 15, 2011 2:08:28 AM UTC+2, frye wrote:
>>
>> In Vim , you press Ctrl-d and Ctrl-u to go down and up a block
>> respectively. Depending on the size of your window, it moves the cursor
>> about 1/3rd of the way down (or up) the screen. This is very handy to have
>> when just browsing a buffer. You can be more precise by pressing 37k, to
>> move the cursor up 37 lines, etc.
>>
>> For whatever reason, I haven't been able to find something similar in
>> Emacs.
>
> OK, I tried what it does in vim.  Some things come to my mind.
>
> 1. PgUp/PgDn obviously
> 2. Try hitting C-l (that's an 'l' like in 'like') several times in a row.
> It won't move your cursor but the line it's on.
> 3. I've been using some personal binding on my home and end keys for ages
> which moves me  to the beginning/end of a line, beginning/end of the
> currently displayed window and beginning/end of the whole buffer on
> successive hits.  See chb-home and chb-end on
> http://www.skamphausen.de/cgi-bin/ska/dot-emacs.d-slash-init.el.  Combine
> that with C-l.
> 4. You might want to try out swiss-move.el (shameless self-plug).  Maybe
> it's confusing, maybe helpful.
>
> Cheers,
> Stefan
>
> --
> 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: Please optimize this with macro (grep and context result grabing)

2011-08-26 Thread gaz jones
do you know about the re-groups function, or are you just doing this
for an exercise?

On Fri, Aug 26, 2011 at 6:57 PM, Michael Jaaka
 wrote:
> Hi!
>
> I have got
>
> (def *g)
> (def *g1)
> (def *g2)
> (def *g3)
> (def *g4)
> (def *g5)
> (def *g6)
>
> (defmacro grep[ pat in & body ]
>        `(do (when-let[ r# (re-matches (re-pattern ~pat) ~in) ]
>                        (binding [ *g (first r#) *g1 (get r# 1)  *g2 (get r# 
> 2)  *g3 (get
> r# 3)
>                                        *g4 (get r# 4)  *g5 (get r# 5)  *g6 
> (get r# 6)  ]
>                        ~@body
>                                
>
> (grep "(.+)-(.+)" "1-4"
>        (println *g *g1 *g2)
>        )
>
>
>
> I need to optimize the *gx so it won't look like hand written. Anyone?
> I was trying to use with-bindings and #' but it doesn't work. Also
> push and pop of thread bindings didn't want to work.
>
> --
> 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: clojure.java.jdbc: mapping BigDecimal to double

2011-08-23 Thread gaz jones
the oracle jdbc adapter returns a whole host of strange datatypes. for
instance, it returns bigdecimals for numbers you have mapped to be
numbers (with a precision, without a scale) in the table. it also
returns its own custom time classes. these generally have a toJdbc()
method to convert them to the 'expected' jdbc type.

a quick look under the covers of any other language's db libraries
(such as activerecord or sequel) shows a whole host of these annoying
conversions back and forth. to be honest, the lack of the conversion
in java.jdbc is great as i can decide what i want to convert / not
convert.

tldr oracle jdbc is shit :P

On Tue, Aug 23, 2011 at 8:54 PM, HiHeelHottie  wrote:
>
> Hey Sean,
>
> I really appreciate the quick response and your work with java.jdbc.
> Completely agree with you that it shouldn't automatically map out of
> the box. As a newbie to clojure and jdbc, do you have any advice on
> how I can get into resultset-seq* to do the mapping? I think it would
> be better not to have to map a BigDecimal to double after resultset-
> seq* returns a row.
>
> Are there any future plans to add a mapping api to resultset-seq or is
> the pattern just to chain any custom mappings after resultset-seq?
>
> On Aug 23, 9:41 pm, Sean Corfield  wrote:
>> No, you'd have to do it yourself. Since not all BigDecimal values
>> would fit correctly in double, it would be dangerous for resultset-seq
>> to do it.
>>
>> I expect there are all sorts of JDBC data types that don't quite match
>> Clojure types but I don't think automatically mapping them would be a
>> good idea...
>>
>> Sean
>>
>>
>>
>>
>>
>>
>>
>> On Tue, Aug 23, 2011 at 6:16 PM, HiHeelHottie  wrote:
>> > It looks like Oracle NUMBER types get mapped to BigDecimal in a result
>> > seq from clojure.java.jdbc. Is there an easy way to configure
>> > clojure.java.jdbc/ResultSet to map Oracle NUMBERS to doubles?
>
> --
> 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: clojure.contrib.command-line

2011-07-29 Thread gaz jones
> Well, README and tests are very good.
> I withdrew into REPL and overlooked them stupidly. I'm very sorry.
>

no worries, glad they help.

> BTW some functions seems not to be public API though they are public.
> Why they are not separated by defn- or specific namespace like
> clojure.tools.cli.internals?

no reason other than its a small lib with a handful of functions...

-- 
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.contrib.command-line

2011-07-29 Thread gaz jones
it lives on github: http://github.com/clojure/tools.cli
like all the new contrib libs, to use it in a project you need to add
it to your dependencies:

:dependencies [[org.clojure/clojure "1.2.1"]
  [org.clojure/tools.cli "0.1.0"]]


On Fri, Jul 29, 2011 at 7:56 AM, octopusgrabbus
 wrote:
>
>
> On Jul 28, 7:24 pm, Anthony Grimes  wrote:
>> command-line is deprecated in favor of tools.cli 
>> now.http://github.com/clojure/tools.cli
>
> Where is the repository located?
>
> (ns addr-verify
>  (:gen-class)
>  (:require [clojure.tools.cli :only (cli optional)])
>  .
>  .
>  .
> results in this error:
>
>  clojure.lang.Compiler$CompilerException:
> java.io.FileNotFoundException: Could not locate clojure/tools/
> cli__init.class or clojure/tools/cli.clj on classpath:
>
> --
> 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: clojure.contrib.command-line

2011-07-28 Thread gaz jones
are there any scenarios in particular you feel need more
documentation? im happy to add more if it is lacking. hopefully the
README on the project page and tests provide a pretty good idea of
what options are available:

https://github.com/clojure/tools.cli
https://github.com/clojure/tools.cli/blob/master/src/test/clojure/clojure/tools/cli_test.clj

2011/7/28 OGINO Masanori :
> (defn -main [& args]
>  (with-command-line args
>   "Get csv file name"
>   [[in-file-name ".csv input file name"  "resultset.csv" ]]
>  (println "in-file-name:", in-file-name)))
>
> The second vector of vector seems unnecessary.
>
> Or tools.cli way:
>
> (ns foo.main
>  (:gen-class)
>  (:use [clojure.tools.cli :only (cli optional)]))
>
> (defn parse-opts
>  [args]
>  (cli args
>   (optional ["--in-file-name"
>  ".csv input file"
>  :default "resultset.csv"]
> identity)))
>
> (defn -main
>  [& args]
>  (let [opts (parse-opts args)]
>(println "in-file-name:" (:in-file-name opts
>
> It might be verbose but I think it is more descriptive than
> with-command-line one.
> However, I'd like more documents and examples about tools.cli.
>
> --
> Name:  OGINO Masanori (荻野 雅紀)
> E-mail: masanori.og...@gmail.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: Digest for clojure@googlegroups.com - 14 Messages in 9 Topics

2011-07-28 Thread gaz jones
t back in touch with your libraries.
>
> Instead of having a complicated installation guide for your library, have a
> Download section in your site. Have there a link to the latest stable
> version of your library as a jar file or, if necessary, a zip file with your
> jar and and all the necessary dependency jars (sane library authors won't
> mind). For a zip, shortly describe what's in it - library names and
> versions, and links to their sites. That's it.
>
> I think most JVM users know or can quickly figure out how to take jars and
> put them in their project's classpath. It's simple to do with all IDEs (or
> without one) and there is no need to learn or install additional software or
> edit configuration files. Starter scripts should include in the classpath
> all jars in the current directory or jars/ directory by default.
>
> Instead of managing libraries inside a dependencies file, you do it directly
> with the jar files. If the project gets too big, bring in the build tools.
>
> What are your thoughts on this issue?
>
>
>
> Timothy Baldridge  Jul 28 04:30PM -0500 ^
>
>> Why does it have to be so complicated to use libraries?
>
> I used to think it was hard until I read up on lein. Can't get much
> simpler than clojars and lein:
>
> http://clojars.org/
> http://alexott.net/en/clojure/ClojureLein.html
>
> Now I'm starting to think that I actually like the lein method over
> python easy_install or ruby gems.
>
> Timothy
>
>
> --
> “One of the main causes of the fall of the Roman Empire was
> that–lacking zero–they had no way to indicate successful termination
> of their C programs.”
> (Robert Firth)
>
>
>
> gaz jones  Jul 28 04:31PM -0500 ^
>
> i would agree with all that if i were writing plain java (a lib dir
> for dependencies and a couple of shell scripts for building etc), but
> leiningen makes it so easy for clojure that its more work _not_ to use
> it... at least that has been my experience.
>
>
>
>
> --
> 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

-- 
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: Libraries and build management hell

2011-07-28 Thread gaz jones
i would agree with all that if i were writing plain java (a lib dir
for dependencies and a couple of shell scripts for building etc), but
leiningen makes it so easy for clojure that its more work _not_ to use
it... at least that has been my experience.

On Thu, Jul 28, 2011 at 4:23 PM, Michal B  wrote:
> Why does it have to be so complicated to use libraries?
>
> To use libraries, you need to learn how to operate half a dozen build tools
> and git because each library author distributes their library differently.
> If figuring out how to install an IDE with clojure wasn't bad enough, now
> you need to figure out how to install and use each of the tools with it.
>
> I'm not saying build tools are useless, on the contrary. It's just that most
> of the time, we want to sling two or three libraries together and code.
> Right? There is no need to start a project with a bunch of template files
> and an elaborate directory structure and to start configuring dependencies
> and to rely on some magic happening that makes your program run.
>
> I think we over-engineered the build process to support the big projects and
> forgot the common case. Most projects are simple.
>
> Let's remove this incidental complexity by returning to simplicity. Keep the
> build tools for the heavyweights and get back in touch with your libraries.
>
> Instead of having a complicated installation guide for your library, have a
> Download section in your site. Have there a link to the latest stable
> version of your library as a jar file or, if necessary, a zip file with your
> jar and and all the necessary dependency jars (sane library authors won't
> mind). For a zip, shortly describe what's in it - library names and
> versions, and links to their sites. That's it.
>
> I think most JVM users know or can quickly figure out how to take jars and
> put them in their project's classpath. It's simple to do with all IDEs (or
> without one) and there is no need to learn or install additional software or
> edit configuration files. Starter scripts should include in the classpath
> all jars in the current directory or jars/ directory by default.
>
> Instead of managing libraries inside a dependencies file, you do it directly
> with the jar files. If the project gets too big, bring in the build tools.
>
> What are your thoughts on this issue?
>
> --
> 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: The Last Programming Language

2011-07-19 Thread gaz jones
this made me lol :D
a big will smith fan??? not that i know you at all other than reading
your posts here, but i really didnt see that coming...

On Tue, Jul 19, 2011 at 9:11 AM, Ken Wesson  wrote:
> An hour of Will Smith blasting aliens "flies by". An hour of a talking
> head is better presented as text.

-- 
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: ClassCastException on 'clojure.data.json/print-json'

2011-06-28 Thread gaz jones
are you trying to turn something into a json string? if so, the
json-str function is probably what you are looking for:

user> (json/json-str {:a "b"})
"{\"a\":\"b\"}"

by the way, the nil in your previous email is not being suffixed to
the string, its simply the return of the function getting written to
stdout by the repl immediately after the function has printed there
also. simply pressing enter at the repl will cause 'nil' to be printed
too...


On Tue, Jun 28, 2011 at 8:46 PM, Timothy Washington  wrote:
> Ok, so I fixed the problem by changing A) to B)
>
> A)
>
> (defn print-json
>
> ...
>
> (write-json x *out* escape-unicode)))
>
> to
>
> B)
>
> (defn print-json
>
> ...
>
> (write-json (PrintWriter. *out*) escape-unicode)))
>
> The only thing now, is that the 'nil' return value suffixes itself. I can
> find out where that is. But I think this this could be fixed easily enough.
> If you like, I can do this locally and, I guessing, submit a github pull
> request.
>
> user => (clojure.data.json/print-json "tim")
>
> "tim"nil
>
> user=> (clojure.data.json/print-json [1 2 3])
>
> [1,2,3]nil
>
> user => (clojure.data.json/print-json { :a { :aa "b" } } )
>
> {"a":{"aa":"b"}}nil
>
> Tim
>
>
>
> On Tue, Jun 28, 2011 at 8:59 PM, Timothy Washington 
> wrote:
>>
>> I'm trying to do a simple print-json, and am getting a ClassCastException
>> in the data.json library. I'm using [org.clojure/clojure "1.3.0-beta1"] and
>> [org.clojure/data.json "0.1.0"]. So…
>>
>> > lein repl
>>
>> …
>>
>> user => (require 'clojure.data.json)
>>
>> nil
>>
>> user => (clojure.data.json/print-json "tim")
>>
>> ClassCastException java.io.OutputStreamWriter cannot be cast to
>> java.io.PrintWriter  clojure.data.json/write-json-string (json.clj:229)
>>
>> user=> (clojure.data.json/print-json [1 2 3])
>>
>> ClassCastException java.io.OutputStreamWriter cannot be cast to
>> java.io.PrintWriter  clojure.data.json/write-json-array (json.clj:254)
>>
>> user => (clojure.data.json/print-json { :a { :aa "b" } } )
>>
>> ClassCastException java.io.OutputStreamWriter cannot be cast to
>> java.io.PrintWriter  clojure.data.json/write-json-object (json.clj:238)
>>
>> Seems fairly straightforward (I've also tried on lists, nested hashes,
>> etc). If I look at the source for json:229 , the 'out' variable looks to be
>> a PrintWriter (and my local source version is the same). And a stacktrace
>> gives exactly that location
>>
>> user=> (. *e printStackTrace)
>>
>> java.lang.ClassCastException: java.io.OutputStreamWriter cannot be cast to
>> java.io.PrintWriter
>>
>>         at clojure.data.json$write_json_string.invoke(json.clj:229)
>>
>>         at
>> clojure.data.json$eval108$fn__109$G__99__118.invoke(json.clj:201)
>>
>>         at clojure.data.json$print_json.doInvoke(json.clj:331)
>>
>>         at clojure.lang.RestFn.invoke(RestFn.java:410)
>>
>>         at user$eval212.invoke(NO_SOURCE_FILE:24)
>>
>>         at clojure.lang.Compiler.eval(Compiler.java:6406)
>>
>>         at clojure.lang.Compiler.eval(Compiler.java:6372)
>>
>>         at clojure.core$eval.invoke(core.clj:2745)
>>
>>         at clojure.main$repl$read_eval_print__6016.invoke(main.clj:244)
>>
>>         at clojure.main$repl$fn__6021.invoke(main.clj:265)
>>
>>         at clojure.main$repl.doInvoke(main.clj:265)
>>
>>         at clojure.lang.RestFn.invoke(RestFn.java:512)
>>
>>         at user$eval7$acc__1060__auto8$fn__10.invoke(NO_SOURCE_FILE:1)
>>
>>         at clojure.lang.AFn.run(AFn.java:24)
>>
>>         at java.lang.Thread.run(Thread.java:636)
>>
>> nil
>>
>> user=>
>>
>> Is there a problem in the data.json lib?
>>
>> Tim
>
> --
> 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: Mocking framework

2011-06-28 Thread gaz jones
jay fields has a good blog post on this:

http://blog.jayfields.com/2010/09/clojure-mocking.html

On Tue, Jun 28, 2011 at 2:52 AM, Ola Ellnestam  wrote:
> Hi Erik,
>
> Take a closer look at Midje, especially
> https://github.com/marick/Midje/wiki/Metaconstants
>
> I'm not an subject matter expert but to me it's close enough to
> mocking/stubbing.
>
> Cheers,
> Ola
>
> Erik Bakstad skrev 2011-06-28 08:56:
>>
>> Hi, I'm currently working on my first real Clojure project, and I find
>> myself wanting a mocking tool. So I was wondering what you are using?
>> I tried googling, but I can't seem to find the "Mockito of the clojure
>> world". Searching for a mocking tool in Clojure it looks like there is
>> a lot of small tools being thrown together, but maybe not being used
>> by many? The one exception maybe is https://github.com/marick/Midje?
>>
>> Thanks, Erik.
>>
>
>
> --
> -
> Ola Ellnestam
> Agical AB
> Västerlånggatan 79, 2 tr
> 111 29 Stockholm, SWEDEN
>
> Mobile: +46-708-754000
> E-mail: ola.ellnes...@agical.se
> Blog: http://ellnestam.wordpress.com
> Twitter: ellnestam
>
> --
> 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: Radically simplified Emacs and SLIME setup

2011-06-23 Thread gaz jones
awesome, it works. many thanks :D i clearly need to read the slime manual

On Thu, Jun 23, 2011 at 10:24 AM, Sam Ritchie  wrote:
> This should do the trick, though I'm not set up with jack-in to test:
> At the REPL, type comma (the character ,), then sayoonara.
>
> On Thu, Jun 23, 2011 at 11:20 AM, gaz jones 
> wrote:
>>
>> this is really great, thanks for putting this together.
>>
>> i have a (possibly daft) question -- is there a neat way to
>> kill/restart the underlying process. i have looked for a *ahem*
>> clojure-jack-off function or equivalent but couldnt find one in the
>> source. i am just killing it from the terminal at the moment and
>> re-running clojure-jack-in... is there a better way? slime-disconnect
>> seems to leave the underlying process still running in list-processes.
>>
>> thanks again!
>>
>> gaz
>>
>> On Fri, Jun 17, 2011 at 3:35 PM, Jeff Dik  wrote:
>> > Mark,
>> >
>> > I got this same error when I copied and pasted the clojure-jack-in
>> > function from gmail.  I had to remove newlines from
>> >
>> > (search-backward "slime-load-hook")
>> >
>> > and
>> >
>> > (slime-connect "localhost" clojure-swank-port)
>> >
>> > Hope that helps,
>> > Jeff
>> >
>> > On Sun, Jun 12, 2011 at 8:50 PM, Mark Engelberg
>> >  wrote:
>> >> error in process filter: Search failed: "slime-load-hook"
>> >>
>> >> On Sun, Jun 12, 2011 at 4:51 PM, Phil Hagelberg 
>> >> wrote:
>> >>> On Jun 12, 10:58 am, Mark Engelberg  wrote:
>> >>>> I take that back (I had edited the wrong file, which wasn't the one
>> >>>> my
>> >>>> emacs was using).
>> >>>>
>> >>>> I get the error "Not enough arguments for format string".
>> >>>
>> >>> Oops; I forgot to mention it also needs this:
>> >>>
>> >>> (defvar clojure-swank-command "lein jack-in %s &")
>> >>>
>> >>> to replace the old clojure-swank-command defvar.
>> >>>
>> >>> -Phil
>> >>>
>> >>> --
>> >>> 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
>> >
>> > --
>> > 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
>
> --
> 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: Radically simplified Emacs and SLIME setup

2011-06-23 Thread gaz jones
this is really great, thanks for putting this together.

i have a (possibly daft) question -- is there a neat way to
kill/restart the underlying process. i have looked for a *ahem*
clojure-jack-off function or equivalent but couldnt find one in the
source. i am just killing it from the terminal at the moment and
re-running clojure-jack-in... is there a better way? slime-disconnect
seems to leave the underlying process still running in list-processes.

thanks again!

gaz

On Fri, Jun 17, 2011 at 3:35 PM, Jeff Dik  wrote:
> Mark,
>
> I got this same error when I copied and pasted the clojure-jack-in
> function from gmail.  I had to remove newlines from
>
> (search-backward "slime-load-hook")
>
> and
>
> (slime-connect "localhost" clojure-swank-port)
>
> Hope that helps,
> Jeff
>
> On Sun, Jun 12, 2011 at 8:50 PM, Mark Engelberg
>  wrote:
>> error in process filter: Search failed: "slime-load-hook"
>>
>> On Sun, Jun 12, 2011 at 4:51 PM, Phil Hagelberg  wrote:
>>> On Jun 12, 10:58 am, Mark Engelberg  wrote:
 I take that back (I had edited the wrong file, which wasn't the one my
 emacs was using).

 I get the error "Not enough arguments for format string".
>>>
>>> Oops; I forgot to mention it also needs this:
>>>
>>> (defvar clojure-swank-command "lein jack-in %s &")
>>>
>>> to replace the old clojure-swank-command defvar.
>>>
>>> -Phil
>>>
>>> --
>>> 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
>
> --
> 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: A stupid jvm question

2011-06-17 Thread gaz jones
this page explains a bunch of ways of calling jruby from java:

https://github.com/jruby/jruby/wiki/RedBridge

think i would have to have pretty good reason before doing this (like
wanting to use jruby as a user scripting language in a clojure app
maybe)...

On Fri, Jun 17, 2011 at 11:08 AM, Phil Hagelberg  wrote:
> flebber  writes:
>
>> On Jun 17, 8:39 pm, Zlatko Josic  wrote:
>>> No one question is stupid. Any jvm language can use jvm byte code.
>>> For example you can use Java libraries in Scala, Clojure,..
>>> Of course sometimes it is not natural fit.
>>> For example if you use Scala in Java you have to know Scala compiler
>>> will generate set/get methods.
>>>
>>
>> So it is possible but not practical to call jruby from within a
>> clojure script?
>
> It's easy to go the other way: https://github.com/technomancy/clojure-gem
>
> -Phil
>
> --
> 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: Wisdom sought for functional iterative processing

2011-06-13 Thread gaz jones
if i was writing the java i would probably do a "tell dont ask"
refactoring so that the operations had an applyTo method:

List items = initialItems ();

for (Op op : operations)
{
  op.applyTo(items);
}

not sure what your op data structure is, but i would image you could
translate that to the clojure code also -- is that reasonable?


On Mon, Jun 13, 2011 at 9:37 PM, Matthew Phillips  wrote:
> Hello all, I've been programming Clojure now for long enough that I'm
> starting to think I'm at the point of being fluent … almost.
>
> One area that keeps tripping me up is iteratively processing a data
> structure when the processing is highly conditional and may take
> several overlapping paths. An example might help:
>
> Example (simplified from my current real problem): Say I need to
> iterate through a seq of encoded list operations and apply them to a
> list. Some ops will require me to remove an element from the list,
> some will require me to add an item to list, and some will require
> both. The way I'd write it in Java would be something like:
>
> List items = initialItems ();
>
> for (Op op : operations)
> {
>  if (op.requiresDelete ())
>    items.remove (op.indexToDelete ());
>
>  if (op.requiresAdd ())
>    items.add (op.indexToAdd (), op.newItem ());
> }
>
> You could imagine arbitrarily complex conditions for the transforms.
>
> The only way I can think of to write it in Clojure is:
>
> (reduce
>  (fn [items op]
>    (let [items1 (if (:delete op) (drop-index (:delete op) items)
> items)]
>      (if (:insert op) (cons (:insert op) items1) items1)))
>  items ops)
>
> i.e. I'm using a cascade of conditional let's. This isn't _too_ bad in
> this case, but you can image how unreadable this could get.
>
> I have a vague idea that in Haskell you might use the ST monad to
> approximate updating data structure "in place". Clojure has a monad
> library, so would this make sense here?
>
> Thanks for any enlightenment anyone is able to give.
>
> Matthew.
>
> --
> 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: Compojure: How to process GET query string

2011-05-18 Thread gaz jones
query string params appear in the params of the request:

(GET "/math" {params :params} []
  (get params :a) ;; 1
  (get params :b) ;; 2
  ... etc

they will be keywords as above if you are using the
wrap-keyword-params handler, otherwise strings.

the syntax you are using above is for pulling values out of the url:

(GET "/math/:command" [command]
  (str "" command ""))

"/math/some-value" => "some-value"

the docs have more info on these things:
https://github.com/weavejester/compojure/wiki/Routes-In-Detail

hope that helps...




On Wed, May 18, 2011 at 5:24 AM, finbeu  wrote:
> Hi
>
> I don't know how to extract the query string from a route. I guess it
> is pretty simply but I don't get it.
>
> http://localhost:8080/math/add?a=1&b=2&c=3
>
> I quess they can be retrieved somehow with :query-string keyword? But
> I have no clue how.
>
> (GET "/math/:command" [command & more] 
>
> Thanks for your help.
>
> FB
>
> --
> 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: Reading clojure code of larger domain specific projects

2011-05-09 Thread gaz jones
compojure is often put forward as an example of good idiomatic clojure code:

https://github.com/weavejester/compojure

On Mon, May 9, 2011 at 10:55 AM, Meikel Brandmeyer  wrote:
> Hi,
>
> Am 09.05.2011 um 17:36 schrieb Jonathan Fischer Friberg:
>
>> I'm interested!
>>
>> The clojure source code is a pretty good read, hehe
>>
>> Jonathan
>>
>> https://github.com/clojure/clojure/tree/master/src/clj/clojure
>
> Although the code in the preamble of core there is explicitly *not* 
> recommended to be taken as example for “good” code. 
> http://dev.clojure.org/display/design/Library+Coding+Standards
>
> Sincerely
> Meikel
>
> --
> 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: Any best practices for clojure + java mixed language projects?

2011-05-01 Thread gaz jones
you can set the source path in leiningen to be whatever you like. the
sample file is quite useful for finding these things out:

https://github.com/technomancy/leiningen/blob/master/sample.project.clj

they key is :source-path. there is also a :java-source-path. cant say
i have ever used that, but it looks like what you want...


On Sun, May 1, 2011 at 11:47 AM, Dave Snowdon  wrote:
> Hi folks
> I'm a long time Java/C++ developer who's been experimenting with toy clojure
> programs for a few of months. I've at last decided to give clojure a try for
> a more significant project but, given this will incorporate components
> written in java  I'm not sure about the way to structure and build the
> project. I've handled mixed language projects (eg java + C++) before using
> ant but am keen to avoid ant this time around.
> Ideally, I'd like to use leiningen to build the project but I'm not sure how
> tightly leiningen is wedded to its default project directory layout.
> Instead of the default structure of:
> - project.clj
> - README
> - src
> -- myproject
> -- core.clj
> - test
> -- myproject
> -- core_test.clj
>
> I'd like something more like this:
> - project.clj
> - README
> - src
> -- clojure
> -- myproject
> -- core.clj
> -- java
> -- org
> --- example
> --- myproject
> - test
> -- clojure
> -- myproject
> -- core_test.clj
> -- java
> -- org
> --- example
> --- myproject
> Is this extra directory level to separate language specific parts possible
> in leiningen? If possible, is it even desirable or are there better ways to
> structure mixed language projects?
> Any tips and pointers to best practices would be welcome!
> thanks
> Dave
>
> --
> 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: Enhancement for contrib.command-line

2011-04-29 Thread gaz jones
i wrote a command line arg library after wanting a bit more than the
one in contrib gave me:

https://github.com/gar3thjon3s/clargon

i think you could do what you want using it...

On Fri, Apr 29, 2011 at 12:26 PM, Sean Corfield  wrote:
> Just an FYI. As part of the 1.3.0 release, the contrib libraries are
> getting a facelift:
>
> http://dev.clojure.org/display/design/Contrib+Library+Names
>
> clojure.contrib.command-line will become clojure.tools.cli - I'm not
> sure who the new maintainer is but they would be the person best
> placed to address your suggestion since the old contrib libraries will
> not be updated. I haven't used the command-line library so I can't
> really comment but, on the surface, the ability to print help from
> multiple places sounds useful.
>
> Sean
>
> On Thu, Apr 28, 2011 at 12:38 PM, knuthie  wrote:
>> I am relatively new to clojure and while using the contrib.command-
>> line, I found there is a place for a small improvement, at least for
>> my usecase :-)
>>
>> I use the with-command-line macro and then check eg. that the
>> remaining parameters, that are not caught amount to the right number
>> (eg. I want to have a commandline, where there are options and at most
>> two additional arguments). In case the check fails, it would be
>> beautiful to print the help message that gets printed, when -h or --
>> help is provided. Currently I cannot call the "print-help" function
>> because I do not have access to the necessary parameters.
>>
>> If the with-command-line macro would be slightly changed to add a
>> binding to a "print-usage" function:
>> like
>> (let [~(symbol "print-usage") #(print-help ~desc cmdmap#) ]
>>
>> then it be possible to do something like this:
>>
>> (with-command-line  ["-s" "1" "2"]  "Usage: testfile [Options]
>>  "
>>    [[synonyms? s? "Use Synonyms"][normalizer? n? "Use Normalizer"]
>> files]
>>    (if (= 2 (count files))
>>      (println (files 0))
>>      ;;else
>>      (print-usage)))
>>
>> Is that a good 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

-- 
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: (just) emacs mode

2011-04-27 Thread gaz jones
i highly recommend taking a look at Phil Hagelberg's emacs-starter-kit :

https://github.com/technomancy/emacs-starter-kit.git

it helped me a LOT when getting started with emacs in general, and
emacs and clojure together. i also put together a couple of blog posts
on my experience of using it which might be useful for you:

http://blog.gaz-jones.com/post/2486737162/setting-up-clojure-development-on-osx-using-emacs-and
http://blog.gaz-jones.com/post/2501842155/interactive-clojure-development-in-emacs-with-leiningen

gaz

On Wed, Apr 27, 2011 at 5:13 AM, John V  wrote:
> Hi, I would like to have syntax highlighting for Clojure code in
> Emacs.  I am using Emacs on Windows (23.2.1).  I found this page:
>
> http://dev.clojure.org/display/doc/Getting+Started+with+Emacs
>
> ... but it was clearly much more involved than I was looking for.
> Nevertheless, I downloaded package.el, loaded it, set the location for
> "marmalade", and gave it a shot, but as expected, it didn't work.  It
> said, "Failed to download 'gnu' archive."
>
> I would like to use Emacs as a text editor, not as a combination IDE/
> ftp browser.  Is there a clojure mode written which is simple to
> download and use?
>
> I used ILISP for many years, and I've encountered SLIME when I was
> using SBCL, but never got it working properly on Windows.  I know how
> cool and powerful an integrated environment like ILISP can be, but
> also how buggy it can be, and at the moment, I just don't think it's
> worth the effort to get it working.  For now, I prefer to run Clojure
> in a Command Prompt, and use Emacs solely as a text editor.
>
> Thanks very much for any advice.
>
> --
> 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: Slamhound (for reconstructing ns forms)

2011-04-26 Thread gaz jones
this looks awesome, tried it out on a project i have but sadly got the
exception below. i'll try and figure it out later when i have more
time to see if its something specific to my project, but thought i
would let you know in case it is something obvious (it failed from
both slime and lein)

Exception in thread "main" java.lang.Exception: prefix cannot be nil
(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:5440)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.eval(Compiler.java:5391)
at clojure.core$eval.invoke(core.clj:2382)
at slam.hound.regrow$check_for_failure.invoke(regrow.clj:31)
at slam.hound.regrow$regrow.invoke(regrow.clj:72)
at slam.hound.regrow$regrow.invoke(regrow.clj:70)
at slam.hound$reconstruct.invoke(hound.clj:10)
at user$eval368.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.eval(Compiler.java:5391)
at clojure.core$eval.invoke(core.clj:2382)
at clojure.main$eval_opt.invoke(main.clj:235)
at clojure.main$initialize.invoke(main.clj:254)
at clojure.main$null_opt.invoke(main.clj:279)
at clojure.main$main.doInvoke(main.clj:354)
at clojure.lang.RestFn.invoke(RestFn.java:422)
at clojure.lang.Var.invoke(Var.java:369)
at clojure.lang.AFn.applyToHelper(AFn.java:165)
at clojure.lang.Var.applyTo(Var.java:482)
at clojure.main.main(main.java:37)
Caused by: java.lang.Exception: prefix cannot be nil
at clojure.core$load_libs.doInvoke(core.clj:4802)
at clojure.lang.RestFn.applyTo(RestFn.java:138)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4880)
at clojure.lang.RestFn.invoke(RestFn.java:409)
at 
clj_lbm.core$eval386$loading__4410__auto387.invoke(NO_SOURCE_FILE:1)
at clj_lbm.core$eval386.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
... 22 more


On Mon, Apr 25, 2011 at 8:05 PM, Phil Hagelberg  wrote:
> So I just threw together a little tool to help with ns forms. I find
> often they accumulate a bunch of cruft over time where you no longer
> need a given :use or :require form. And sometimes you don't feel like
> finding exactly where on the classpath a given class is. Or maybe
> you're too lazy to type it; whatever. Slamhound helps with that.
>
> (ns my.namespace
>  "some doc string")
>
> (defn -main [& args]
>  (pprint args)
>  (io/copy (ByteArrayInputStream. (.getBytes "hello"))
>           (first args)))
>
> Look at that; all bare, missing all kinds of necessary stuff.
> Disgraceful. Release the hound!
>
> $ lein slamhound src/my/namespace.clj
>
> (ns my.namespace
>  "I have a doc string."
>  (:use [clojure.pprint :only [pprint]])
>  (:require [clojure.java.io :as io])
>  (:import (java.io ByteArrayInputStream)))
>
> Tada! (also featuring Emacs integration: M-x slamhound)
>
> Enjoy: https://github.com/technomancy/slamhound
>
> -Phil
>
> --
> 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: Executing Future

2011-04-25 Thread gaz jones
the easiest way (i find) to test if something occurring on another
thread has completed is using a latch:

(deftest mohanr
  (let [latch (CountDownLatch. 1)
service (Executors/newFixedThreadPool 10)]
(doseq [x (range 1)
:let [f (.submit service
 (proxy [Callable] []
   (call [] (.countDown latch]]
  (is (= true (.await latch 1 TimeUnit/SECONDS))

its possible in your code the future isnt yet done, because you check
immediately after submitting the task to the thread pool.

hope that helps...

On Mon, Apr 25, 2011 at 6:27 AM, MohanR  wrote:
> ( deftest teststream
>
>  (def  service ( Executors/newFixedThreadPool 10 ))
>  (dotimes [x 1]
>   (try
>    (def futures (.submit service
>                      ( proxy [Callable][]
>                       ( call
>                         []
>                           ( println "Test" )
>                       )
>               )))
>  ( println ( str "Future is done ? " ( true? ( .isDone futures ) )))
>
>   (catch ExecutionException e
>          ( .cancel futures )
>   )
>   (catch Exception e
>          ( .cancel futures )
>   )
>   )
> ))
>
> This is again a beginner's question.
>
> Why is the future not done here ? I am getting 'false' and I believe
> there are simple mistakes in the code. There is no exception though.
>
> --
> 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: Announcement: pretzel - a predicate library + call for suggestions

2011-04-14 Thread gaz jones
coincidentally, me and my brother wrote this while on the train to
rubyconf last year:

https://github.com/mikejones/mississippi

havent put any docs or anything on there (its only a couple of
functions), but is essentially a validation function that take a map
(the thing to validate) and another map (the validations to apply) and
returns the original map with an :errors map assoc'd to it. comes with
a couple of pre-baked  validation functions, but not many.

works pretty well for the use cases i currently have... *shrug*

On Tue, Apr 12, 2011 at 7:53 PM, James Reeves  wrote:
> On 12 April 2011 22:04, Joost  wrote:
>> For now, I think of the pretzel library as the lowest useful level of
>> abstraction for input tests. And for low level abstractions, I prefer
>> to place a higher value on correctness, extensibility, consistency and
>> possibly even performance (in roughly that order) than ease of use
>> from a direct programmer's stand point.
>
> I think I agree.
>
>> It might be better to put those predicates in a numeric
>> namespace or library that doesn't address strings at all, maybe
>> relying on a conversion layer somewhere if your input is really string-
>> based, or maybe to have string-based counterparts relying on the
>> numeric tests.
>
> That's a good idea. Perhaps something like:
>
>  (defn from-string [f]
>    (comp f parse-number))
>
>  (from-string (in-range 1 10))
>
> But with a better name than "from-string".
>
> - James
>
> --
> 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: Tranforming an ACL file: Comparing Clojure with Ruby

2011-03-03 Thread gaz jones
i was gonna suggest this:

(let [users (->> (split (slurp "acl") #"\n")
 (map #(split % #"\|"))
 (map (fn [[a u p]] [a (split u #",") p]))
 (filter (fn [[a _ _]] (= "avail" a)))
 (mapcat (fn [[_ users path]]
   (map #(hash-map % [path]) users)))
 (apply merge-with into))]
  users)

then i read the bit about readable... :P

On Thu, Mar 3, 2011 at 8:51 PM, Stuart Halloway
 wrote:
> Dear Clojure Group,
>
> I am currently reading the online book Pro Git. In chapter 7.4 (section
> “Enforcing a User-Based ACL System”) there is a task of reading in an access
> control list (ACL) file, such as the following
>
> # avail/unavail | users | path
> avail|nickh,pjhyett,defunkt,tpw
> avail|usinclair,cdickens,ebronte|doc
> avail|schacon|lib
> avail|schacon|tests
>
> and printing out a map of the form { "user1" [path 1, path 2], "user2"
> [path2, path3] ...}.
>
> The author of the book provides a solution in Ruby, which I find relatively
> easy to follow, despite not having written any Ruby code before:
>
> def get_acl_access_data(acl_file)
>  # read in ACL data
>  acl_file = File.read(acl_file).split("\n").reject { |line| line == '' }
>  access = {}
>  acl_file.each do |line|
>    avail, users, path = line.split('|')
>    next unless avail == 'avail'
>    users.split(',').each do |user|
>  access[user] ||= []
>  access[user] << path
>    end
>  end
>  access
> end
>
> I then tried the same in Clojure, but found my solution to be much less
> readable compared to the Ruby code:
>
> (use '[clojure.string :only (split)])
>
> (defn get-acl-access-data [file]
>  (let [acl (split (slurp file) #"\n")]
>    (apply merge-with #(into %1 %2)
>  (map (fn [[avail users path]]
>  (let [users (split users #",")]
> (reduce (fn [acc user]
> (when (= avail "avail")
>   (assoc acc user [path])))
>    {} users)))
>    (map #(split % #"\|") acl)
>
> ;; Output:
> ;; {"schacon" ["lib" "tests"],
> ;;  "usinclair" ["doc"],
> ;;  "cdickens" ["doc"],
> ;;  "ebronte" ["doc"],
> ;;  "tpw" [nil],
> ;;  "defunkt" [nil],
> ;;  "pjhyett" [nil],
> ;; "nickh" [nil]}
>
> Maybe it is just because I am still a beginner, but I am afraid I won’t be
> able to figure out immediately what this code is doing a few weeks from now.
>
> However, I am sure there must be a better way of translating the Ruby
> version into Clojure. My main goal is on clarity, as I often struggle
> organizing my code in a way I would consider readable.
>
> I therefore would be glad for any ideas of improvement. Any suggestions are
> highly welcome!
>
> Best regards,
>
> Stefan
>
> Both the approaches above have the weakness that the steps are commingled,
> making it difficult to test (or reuse) part of the work done by the fn. Here
> is a Clojure version that makes the steps more distinct:
> (require '[clojure.string :as str])
> (require '[clojure.java.io :as io])
> (with-open [r (io/reader "somefile")]
>   (->> (line-seq r)
>        (map #(str/split % #"\|"))
>        (filter #(= "avail" (first %)))
>        (mapcat (fn [[_ users path]] (map hash-map (str/split users #",")
> (repeat [path]
>        (apply merge-with into)))
> From this it is easy to see that the fn:
> 1. splits the lines on |
> 2. filters on "avail"
> 3. builds a list of user|path pairs
> 4. merges the user|path pairs into a map
>
> Stuart Halloway
> Clojure/core
> http://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: Sorting of function definitions in namespaces

2011-02-11 Thread gaz jones
>> Well... It is Robert C. Martin's opinion.

>Who?

'uncle' bob martin:
http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Also, it's pretty easy to just reverse the level of abstraction
ordering from bottom-to-top is it not? I usually jump to the bottom of
the file to start with when editing Clojure code...

On Fri, Feb 11, 2011 at 10:05 AM, Fogus  wrote:
>> Well... It is Robert C. Martin's opinion.
>
> Who?
>
>> I should have said that I _think_ that it is essential to
>> writing readable code.
>
> I definitely agree with this.
>
> Another thing that I happen to agree with is that Clojure's model fits
> my way of programming in Clojure.
>
> --
> 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: Why won't leiningen install for me?

2011-01-24 Thread gaz jones
i would totally recommend uninstalling macports, and moving over to
homebrew which is far better (https://github.com/mxcl/homebrew).


On Mon, Jan 24, 2011 at 8:44 PM, Alex Osborne  wrote:
> Hi Larry,
>
> As a quick temporary workaround you could just set your PATH environment
> variable so that it picks up the curl executable from /usr/bin instead
> of the broken MacPorts one from /opt/local/bin.
>
> $ which curl
> /opt/local/bin/curl
> $ export PATH=/usr/bin:$PATH
> $ which curl
> /usr/bin/curl
>
> You'll need to do that each time you install/upgrade Leiningen though.
>
> Since you're not using MacPorts, personally I'd opt to just rename the
> entire MacPorts directory (/opt/local) out of the way:
>
> $ sudo mv /opt/local /opt/local.broken
>
> You could then delete it or reinstall it at a later time, whatever you
> prefer.
>
> Cheers,
>
> Alex
>
>
> Mark Rathwell  writes:
>
>> Seems pretty clear that your macports version of curl is the problem, it's 
>> up to you what you want to do about it.  I don't know if uninstalling it 
>> would leave you with the OS X version of
>> curl or not.  Link to get you started:
>>
>> http://www.richarddooling.com/index.php/2009/09/12/macports-on-snow-leopard/
>>
>> On Mon, Jan 24, 2011 at 7:29 PM, Larry Travis  wrote:
>>
>>     Mark, John, Gaz:
>>     Your responses are all suggestive but I don't know where to go from here 
>> so I am going to make one more cry for help -- and to this group rather than 
>> the leiningen-specific one
>>     suggested by Mark because my basic problem is really 
>> how-to-get-clojure/emacs-running-under-MacOsX.
>>
>>     Here is the situation, and my further questions:
>>
>>
>>                 ---
>>                 larrytravis$   lein-install.sh   self-install
>>
>>                 Downloading Leiningen now...
>>
>>                 dyld: Library not loaded: /opt/local/lib/libintl.8.dylib
>>                    Referenced from: /opt/local/bin/curl
>>                    Reason: no suitable image found.  Did find:
>>                      /opt/local/lib/libintl.8.dylib: mach-o, but wrong 
>> architecture
>>
>>                 /Users/larrytravis/bin/lein-install.sh: line 175:  2851 
>> Trace/BPT
>>                 trap          $HTTP_CLIENT "$LEIN_JAR" "$LEIN_URL"
>>
>>                 Failed to 
>> downloadhttps://github.com/downloads/technomancy/leiningen/leiningen-1.4.2-st...
>>
>
> --
> 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: Why won't leiningen install for me?

2011-01-22 Thread gaz jones
are you sure you dont have curl installed by macports or something?
/usr/bin/curl on mac os x works fine with https for me... someone at
work had this problem and they had (unknowingly) installed curl
through macports...

On Sat, Jan 22, 2011 at 1:28 PM, Bizics  wrote:
> Hi Larry,
> I had problems installing too.
> Turns out curl on mac os x does not support https as required by
> github now.
> I had to download and rebuild curl with the +ssl flag for https to be
> supported and then things worked fine.
> I could dig up my notes from when I did it if you need more
> information.
>
> Cheers,
> John
>
>
> On Jan 21, 4:49 pm, Larry Travis  wrote:
>> I get the following when I try to install Leiningen:
>>
>> ---
>> larrytravis$   lein-install.sh   self-install
>>
>> Downloading Leiningen now...
>>
>> dyld: Library not loaded: /opt/local/lib/libintl.8.dylib
>>    Referenced from: /opt/local/bin/curl
>>    Reason: no suitable image found.  Did find:
>>      /opt/local/lib/libintl.8.dylib: mach-o, but wrong architecture
>>
>> /Users/larrytravis/bin/lein-install.sh: line 175:  2851 Trace/BPT
>> trap          $HTTP_CLIENT "$LEIN_JAR" "$LEIN_URL"
>>
>> Failed to 
>> downloadhttps://github.com/downloads/technomancy/leiningen/leiningen-1.4.2-st...
>>
>> 
>> Can anybody advise me as to what I am doing wrong?
>>
>> /lein-install.sh/ is the script available at:
>>
>> https://github.com/technomancy/leiningen/raw/stable/bin/lein
>>
>> Also I can't download /leiningen-1.4.2-standalone.jar/ directly 
>> fromhttps://github.com/technomancy/leiningen/downloads, but I don't think I
>> would know what to do with it if I could! I am a Java tyro (who knows
>> some other lisps reasonably well) trying to use clojure under Mac Os X
>> and Emacs, but I am having a lot of problems getting clojure to run
>> conveniently in that environment.
>>
>> Thanks for your help.
>>    --Larry Travis
>
> --
> 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: Problem with lazy-seq and heap space overflow

2011-01-20 Thread gaz jones
interesting... the changes i suggested cause it to get the first 3
values in around 300ms on my machine and dont blow the heap O_o

On Thu, Jan 20, 2011 at 8:38 PM, Ken Wesson  wrote:
> My suspicion is that
>
> (lazy-seq ... (map rest seqs))
>
> in closing over seqs causes the heads of the seqs to be held during
> the recur iteration. When the third value is as big as 1533776805, the
> recur iteration is realizing lengthy portions of the seqs downstream.
>
> The problem with this is that the lazy-seq expression that creates the
> closure occurs on one branch of an if and the recur on the other. A
> call that enters the recur therefore doesn't actually instantiate a
> lazy-seq object holding references to those heads.
>
> If the mere presence of the lazy-seq expression in the function makes
> the heads get held even on an execution path that misses the lazy-seq
> expression, then it may qualify as a compiler bug; after the
> expression (map #(if (= (first %) min-value) (rest %) %) seqs) has
> evaluated and recur is about to be done using the return value, the
> local seqs is clearable and therefore IMO should be cleared.
>
> That said, how about this implementation?
>
> (defn equal-values [seqs]
>  (let [no-value (Object.)
>        sentinel (Object.)]
>    (remove #{no-value}
>      (take-while #(not= % sentinel)
>        (map first
>          (iterate
>            (fn [[rslt seqs]]
>              (if (some empty? seqs)
>                [sentinel [nil]]
>                (let [fs (map first seqs)
>                      min-value (apply min fs)]
>                  [(if (apply = fs) (first fs) no-value)
>                   (map #(if (= (first %) min-value) (rest %) %) seqs)])))
>            [no-value seqs]))
>
> This takes about a minute on my box to produce the first three values,
> and doesn't blow the heap.
>
> --
> 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: Problem with lazy-seq and heap space overflow

2011-01-20 Thread gaz jones
try this:

(defn equal-values [seqs]
 "Given a list of ascending sequences, returns a lazy sequence containing
 only values that exist in all of the sequences."
 (lazy-seq
  (if (empty? (first seqs))
[]
(let [first-values (map first seqs)]
  (if (apply = first-values)
(cons (first first-values)
  (equal-values (map rest seqs)))
(let [min-value (apply min first-values)]
  (equal-values (map #(if (= (first %) min-value) (rest %) %)
seqs

changes: i have moved lazy-seq and replaced your recur with a call to
the function

that gives me:

(1 40755 1533776805)

hope that helps
gaz

2011/1/20 Marek Stępniowski :
> Hi,
> I'm Marek Stępniowski, a Python developer trying to learn a new
> language by night. I'm new to this group.
>
> When solving problem 45 from Project Euler [1] I have tried to learn
> how lazy-seq macro should be used and wrote the code below::
>
> (defn pentagonal-numbers []
>  (map #(* 1/2 % (dec (* 3 %))) (iterate inc 1)))
>
> (defn hexagonal-numbers []
>  (map #(* % (dec (* 2 %))) (iterate inc 1)))
>
> (defn equal-values [seqs]
>  "Given a list of ascending sequences, returns a lazy sequence containing
>  only values that exist in all of the sequences."
>  (if (empty? (first seqs))
>   []
>   (let [first-values (map first seqs)]
>     (if (apply = first-values)
>       (lazy-seq (cons (first first-values)
>                       (equal-values (map rest seqs
>       (let [min-value (apply min first-values)]
>         (recur (map #(if (= (first %) min-value) (rest %) %) seqs)))
>
> Unfortunately running::
>
> (take 3 (equal-values [(pentagonal-numbers) (hexagonal-numbers)]))
>
> Results in heap space overflow exception (at max heap size = 256MB).
>
> I agree that it's a very naive solution, and that finding a third
> element of the list will take a lot of time. I still fail to
> understand why it's also needing all the memory. I'd be grateful for
> any pointers. What am I doing wrong here?
>
>
> [1] Project Euler problem 45:
> http://projecteuler.net/index.php?section=problems&id=45 - I find
> solving Project Euler problems is a good way to learn the new
> language, while refreshing computer science and math theory at the
> same time. If you're interested, you can find my git repository with
> 39 problems solved here: https://github.com/zuber/project-euler
>
>
> Thanks,
> --
> Marek Stępniowski
> http://stepniowski.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: Clojure regexs

2011-01-13 Thread gaz jones
lol oh noes! i should really stop doing this while watching 30rock...

On Thu, Jan 13, 2011 at 9:38 PM, Ken Wesson  wrote:
> On Thu, Jan 13, 2011 at 10:22 PM, gaz jones  wrote:
>> bah! good catch.
>> (let [[_ year month day]] (re-find date-regex line))
>>
>> fixed!
>
> Oh, gaz. I'm so so sorry. :(
>
> --
> 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: Clojure regexs

2011-01-13 Thread gaz jones
bah! good catch.
(let [[_ year month day]] (re-find date-regex line))

fixed!

On Thu, Jan 13, 2011 at 9:03 PM, Ken Wesson  wrote:
> On Thu, Jan 13, 2011 at 9:54 PM, Alex Baranosky
>  wrote:
>> I see.  So I may have to use some kind of clunky syntax instead of a nice
>> $1, $2, $3 syntax.  I can handle that I guess :)
>
> Hey, it's a Lisp! You can use almost any syntax you want. How about %1, %2, 
> %3:
>
> (defn re-do [f regex input]
>  (apply f (rest (re-find regex input
>
> (re-do #(do-stuff-with %3 %1 %2) regex input)
>
> Or even
>
> (defmacro re-let [names regex input & body]
>  `(let [[_ ~@names] (re-find ~regex ~input)]
>     ~@body))
>
> (re-let [year month day] date-regex line
>  (do-something-with year month day))
>
> This one doesn't even have the bug that gaz jones's let has. ;)
>
> --
> 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


  1   2   >