2010-01-27
| 00:09 | alexyk | what is (not equals)? |
| 00:09 | alexyk | i.e. how do we check x /= 0? |
| 00:27 | alexyk | not=, sleepy people |
| 01:18 | cschep | is using maven to build the latest clojure-contrib required? |
| 01:19 | dnolen | cschep no |
| 01:19 | dnolen | you just need the clojure.jar itself |
| 01:21 | cschep | dnolen: do i need to write my own build.xml? does it matter if i used "mvn package" instead to build it? |
| 01:22 | dnolen | cschep: I doubt that. but someone who uses maven more frequently will need to chime in here. |
| 01:23 | cschep | most of the stuff online says to just git pull and type ant |
| 01:23 | cschep | in the clojure-contrib dir, but build.xml isn't there anymore.. |
| 01:23 | cschep | ha ha |
| 01:23 | dnolen | cschep: that works for clojure |
| 01:24 | dnolen | to build clojure-contrib, ant -Dclojure.jar=path/to/clojure.jar |
| 01:24 | cschep | oh, alright. |
| 01:24 | cschep | dnolen: it still needs a build.xml file doesn't it? |
| 01:25 | dnolen | cschep: probably, if you checked it from source you should definitely have that. |
| 01:25 | dnolen | cschep: oh hmm, you're right it's not a part of contrib anymore. |
| 01:26 | dnolen | and I see the github page has maven instructions, and that doesn't work for you? |
| 01:26 | cschep | dnolen: i think it got it built by just running "mvn package" but i was just kinda making sure that's right...there must be a bunch of old blog posts online all saying to use ant |
| 01:27 | dnolen | cshep: i'm pretty sure github is up-to-date. I was clearly behind the times. |
| 01:28 | cschep | dnolen: that's cool, I appreciate the response, it's not very lively around here! |
| 01:28 | dnolen | cschep: well it's a bit late. usually it's hoppin' |
| 01:28 | cschep | dnolen: |
| 01:28 | cschep | dnolen: yeah that's what i figured. |
| 02:56 | Raynes | Wow. Clojars search is useless. |
| 03:03 | Raynes | I have got to get a new mouse. I can't use the scroll wheel without the middle mouse button firing. Does all sorts of uncool stuff on Ubuntu. |
| 03:04 | vu3rdd | Is the slime/swank working with the current master git repo of clojure? |
| 03:05 | vu3rdd | Looks like commit 277f02 (jan 14) broke it. |
| 03:11 | Raynes | Yay! I fixed my mouse wheel. |
| 03:11 | Raynes | Turns out I just needed to clean out about 2 years of caked on grime out from underneath it. |
| 03:14 | simplechat | ouch |
| 03:16 | Raynes | There is a message here, kids: don't forget to clean behind your mousewheels. ;) |
| 03:19 | Raynes | I really need a better way to test this email stuff I'm doing. Sending myself a message every time I need to test the get-emails function is really killing my mood. :| |
| 03:20 | Raynes | I should write a function that sends myself the email! |
| 06:20 | AWizzArd | ~seen kotarak |
| 06:20 | clojurebot | kotarak was last seen quiting IRC, 2170 minutes ago |
| 06:28 | Raynes | ~haskell |
| 06:28 | clojurebot | "you have to see features like that in the context of Haskell's community, which is something like Perl's community in the garden of Eden: detached from all shame or need to do any work." -- ayrnieu |
| 06:30 | nuba | heh |
| 06:31 | Raynes | ~ocaml |
| 06:31 | clojurebot | Huh? |
| 06:31 | Raynes | Aw. |
| 06:31 | nuba | ~java |
| 06:31 | clojurebot | ☕ |
| 06:31 | Raynes | That's the most awesome one. |
| 06:32 | nuba | its good |
| 06:47 | lypanov | lol. i did not know my console could display that. |
| 06:48 | cemerick | cgrand: I remember you putting together an alternative to seque / fill-queue a while back -- where did that go? |
| 06:50 | esj | this ? http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/ |
| 06:52 | cemerick | esj: yes, thanks! |
| 06:58 | cemerick | hrm, now to decide between pipe, seque, and fill-queue |
| 07:10 | opqdonut | why is there a not-any? but no any? |
| 07:12 | opqdonut | oh, it's some? |
| 08:16 | vu3rdd | I am tryint to learn compojure.. have a simple app from Programming Clojure book. |
| 08:17 | vu3rdd | when I :reload the namespace, I get a java.net.BindException |
| 08:17 | vu3rdd | saying address already in use. |
| 08:19 | cgrand | cemerick: don't use that! it's just a PoC. |
| 08:19 | cemerick | vu3rdd: you're the namespace you're loading is trying to start up another server |
| 08:19 | cemerick | cgrand: I won't be, the API isn't right for what I'm doing. Looks perfectly reasonable enough to use, though. |
| 08:20 | vu3rdd | cemerick: yes. I thought :reload will stop and start the server bound to the same port? |
| 08:21 | cemerick | vu3rdd: no, :reload only controls the loading of code, and is entirely application independent (e.g. it won't stop and start servers for you as-is) |
| 08:21 | cemerick | just move your server-init code out of the ns you're reloading, and you should be fine. |
| 08:22 | cgrand | cemerick: ok. Fyi there's a little memory leak (the last consumed item is retained) and I bet this API could be better implemented using a BlockingQueue. |
| 08:24 | rhickey | wow, tons of Clojure tweets in Japanese, as Stu's book is released in translation |
| 08:24 | vu3rdd | cemerick: Ah! Thanks a lot. |
| 08:25 | AWizzArd | Hi rhickey. |
| 08:25 | rhickey | AWizzArd: hi |
| 08:25 | AWizzArd | How was this dsw thing? |
| 08:26 | cgrand | cemerick: btw I added a pom.xml to enlive (generated by lein) |
| 08:26 | cemerick | cgrand: oh, very nice, thank you :-) |
| 08:26 | esj | Is this the idiomatic way to set defaults for arguments ? : (defn a ([] (a 3)) ([x] x)) |
| 08:26 | rhickey | AWizzArd: fine |
| 08:26 | Chousuke | esj: yes |
| 08:27 | esj | thanks |
| 08:27 | chouser | rhickey: fogus has been chatting them up in their native tongue a bit too |
| 08:27 | rhickey | chouser: cool |
| 08:27 | AWizzArd | Oh btw, rhickey, would it be okay that I open a ticket or too regarding sorted sets, some feature requests? |
| 08:28 | rhickey | AWizzArd: which features |
| 08:28 | rhickey | ? |
| 08:28 | Chousuke | I need to learn Japanese programming vocabulary :P |
| 08:28 | esj | ooh sorted-sets: working with them this very moment. |
| 08:29 | esj | was wondering if there was a (merge ) ? |
| 08:29 | chouser | esj: into |
| 08:29 | AWizzArd | rhickey: Currently the TreeMaps don't implement SortedSet. So one can't call .subSet on them. |
| 08:29 | AWizzArd | subseq only returns a seq |
| 08:29 | chouser | well, merge works too I guess |
| 08:30 | AWizzArd | and subseq can't take indexes. For example, if I know that my sorted set has 500 elements, I can't ask for the elements 30 to 70 |
| 08:30 | esj | thanks |
| 08:31 | esj | AWizzArd: that would be a great. |
| 08:31 | rhickey | AWizzArd: subset is interesting, indexed subseq is an anti-pattern, non-efficient |
| 08:31 | rhickey | sets are not indexed |
| 08:31 | AWizzArd | I see |
| 08:31 | alexott | rhickey: there are also some twits about clojure in russian |
| 08:31 | rhickey | so, ticket for subset welcome |
| 08:32 | esj | interesting - I'm using a sorted-set-by to represent ordered maps of data (by one of the keys) |
| 08:32 | esj | it would be really useful to be able to say get me 5 before and after a particular key |
| 08:32 | AWizzArd | esj: yes, I am doing it too. Good set support is very interesting for my Clojure DB system. |
| 08:32 | rhickey | alexott: yes, saw them too. Unfortunately the auto-translations of both Russian and Japanese are pretty bad - I really can't tell what is being said |
| 08:32 | chouser | esj: you can use subseq and rsubseq to do that |
| 08:33 | esj | indeed ? |
| 08:33 | AWizzArd | esj: you can give a start and end |
| 08:33 | alexott | rhickey: very strange - usually russian -> english is pretty good |
| 08:33 | esj | splendid ! Thanks gents. |
| 08:34 | AWizzArd | Another convenience thing could be to be able to tell clojure.set/intersection which order its result should have. When I input into intersection 5 sets and they are all differently ordered, then intersection will go through the shortest and see if its elements show up somewhere else. |
| 08:35 | chouser | esj: to get "5 before", you'll need rsubseq starting with the item whose value you know, then take 5 and reverse. I think. |
| 08:35 | AWizzArd | But the returned set may be ordered differently, and currently I can't decide which of my inputs has the right order of the result |
| 08:35 | AWizzArd | chouser: is subseq lazy? |
| 08:35 | AWizzArd | if it would return a million entries, can I only take the first 200? |
| 08:35 | esj | chouser: thanks again - I'lll play around with this. |
| 08:35 | chouser | sure, though all million are of course in your map or set already. |
| 08:37 | hchbaw | rhickey: offical support page here :) http://practical-scheme.net/wiliki/wiliki.cgi?Shiro%3aProgrammingClojure |
| 08:37 | AWizzArd | chouser: do you know if rsubseq runs in O(1)? |
| 08:37 | AWizzArd | the R part of it |
| 08:37 | rhickey | AWizzArd: O(logN) like all sorted stuff |
| 08:40 | rhickey | hchbaw: thanks! |
| 08:46 | AWizzArd | rhickey: when I try to add a new ticket it tells me that I must set a "type" for the ticket (such as "Enhancement"). Unfortunately there is no such field for me. My account name is "awizzard" in Assembla. |
| 08:48 | rhickey | AWizzArd: are you using the support tab? |
| 08:48 | AWizzArd | yes |
| 08:50 | rhickey | AWizzArd: try now |
| 08:50 | AWizzArd | good, now the "type field" appeared |
| 08:50 | AWizzArd | thx |
| 08:50 | rhickey | np, thanks for letting me know - I guess people haven't been using the support tab! |
| 09:07 | AWizzArd | rhickey: did you create your ca.pdf file with Open Office? |
| 09:08 | rhickey | AWizzArd: no. I use a Mac and just print to pdf. |
| 09:09 | AWizzArd | Okay I see. I was looking for an editable file, so I can copy and modify it for my own use. Thought you may have it in an editable format. |
| 09:13 | Chousuke | hm |
| 09:13 | Chousuke | my slime doesn't work :( |
| 09:13 | vstein | Hello first time here... It appears line-seq throws a RuntimeException when its BufferedReader throws a IOException. I'd like to catch a IOException. Any ideas? |
| 09:14 | Chousuke | I can't evaluate anything within the slime buffer |
| 09:14 | Chousuke | hm |
| 09:19 | rhickey | http://it-republik.de/jaxenter/quickvote/ |
| 09:20 | jcromartie | what's the process for updating clojure-mode? |
| 09:20 | jcromartie | with ELPA in Aquamacs? |
| 09:28 | cemerick | Can't believe groovy scores so high, in any poll. |
| 09:28 | cemerick | No, wait, I *can* believe it. |
| 09:38 | jcromartie | swank-clojure/clojure-mode are kind of magicals |
| 09:38 | jcromartie | magical |
| 09:38 | jcromartie | I wish I knew what swank-clojure means when it says clojure is not installed |
| 09:38 | jcromartie | I have clojure all over the place. |
| 09:39 | vstein | Is it by intention that line-seq throws RuntimeException when its Buffere |
| 09:39 | jcromartie | something like "It appears clojure is not installed in <where it's looking> ... would you like to install it there? Or do you have it installed somewhere else"" |
| 09:39 | vstein | rader throws IOException |
| 09:41 | Chousuke | hmh |
| 09:41 | chouser | vstein: clojure has to wrap RuntimeExceptions around things at times to skirt Java's checked exception rules |
| 09:41 | Chousuke | something is wrong with swank-clojure on recent slimes apparently |
| 09:41 | Chousuke | I wish I knew what. |
| 09:42 | chouser | vstein: the best work-around is generally just to catch a broader set of exceptions (just Exception or perhaps Error) and then rethrow if you really don't want to handle it. |
| 09:44 | rhickey | yes, it is the great conundrum of checked exceptions that they frequently force one to change the type of exceptions thrown in nested scopes, especially once closures come into play. Checked exceptions are horribly broken |
| 09:44 | jcromartie | Chousuke: I just nuke my ~/.emacs.d/elpa and started over |
| 09:45 | vstein | chouser: So I should check the cause, and then take actions, or just rethrow? Or is there some idiom people use? |
| 09:45 | Chousuke | jcromartie: I have slime from git |
| 09:46 | Chousuke | jcromartie: and I'd rather have swank-clojure fixed than use an old slime, but unfortunately I have no clue where to even begin looking :/ |
| 09:46 | wlr | Chousuke: don't know if it applies but see comments by vu3rdd 08:04-08:05 utc |
| 09:49 | vstein | rhickey: I guess the checked exception issue will be blown away the day Clojure is in Clojure, Right? Since checked exceptions is a Java compiler detail, isn't it? |
| 09:51 | rhickey | vstein: yes, it will be possible to flow more things up, although the question will remain - what should the interfaces generated by protocols declare tat they throw (matters when consumed by Java)? |
| 10:00 | vstein | rhickey: True, thanks. Then I guess, that any core fn wont throw another kind of RTE when exposed to one, right? |
| 10:01 | rhickey | vstein: depends on the signature to IFn |
| 10:01 | vstein | rhickey: I see, thanks |
| 10:09 | stuartsierra | rhickey: did you see my compile-time multimethods yesterday? |
| 10:15 | jasapp | did we ever hear where DRW was? |
| 10:16 | chouser | jasapp: DRW Trading Group, a Clojure funder: http://clojure.org/funders |
| 10:16 | chouser | that's my guess, anyway. |
| 10:16 | chouser | their page says they have an offic in new york |
| 10:17 | chouser | I hope it was there and not in their Chicago HQ, or I'd have to give rhickey a little talking-to about not letting me know. |
| 10:17 | angerman | hmm JNA is giving me headaches |
| 10:17 | jasapp | interesting |
| 10:26 | esj | my copy of van Roy and Haridi just turned up. Crumbs ! I'm too scared to even open it. |
| 10:27 | alexott | is anywhere a list of companies/projects, who are using Clojure? Couldn't find - i want to include several examples into my article |
| 10:29 | wooby | alexott: some companies using it are runa.com and flightcaster |
| 10:30 | chouser | alexott: one might assume the companies that are funding clojure are also using it. |
| 10:30 | angerman | we (emendio.de) are using it too, though business hasn't picked up. |
| 10:31 | alexott | wooby: i already wrote about flightcaster ;-) |
| 10:32 | jasapp | alexott: I'm sure you've got sonian too then? |
| 10:32 | alexott | jasapp: no, hadn't heard about it |
| 10:32 | jasapp | I think they're the largest employer of clojure programmers |
| 10:32 | jasapp | 5 currently |
| 10:33 | alexott | jasapp: thanks - I'll include link to them |
| 10:33 | jasapp | or something like that, maybe one of them will correct me |
| 10:42 | jcromartie | this is bizarre |
| 10:42 | jcromartie | when I load a file on my machine it's fine |
| 10:42 | jcromartie | but when I load it on another I get an EOF |
| 10:42 | jcromartie | in the middle of the file |
| 10:43 | jcromartie | the whole file is there |
| 10:43 | jcromartie | I've got Clojure 1.1.0 on both |
| 10:44 | the-kenny | Encoding issues? |
| 10:44 | jcromartie | maybe |
| 10:44 | jcromartie | I'm sending over rsync |
| 10:47 | jcromartie | I'm using OpenJDK on the server with the problem |
| 10:47 | jcromartie | and the only new ingredient in the equation is clojure-mode |
| 10:48 | jcromartie | also why does clojure-mode give me INSANE indentation on comments |
| 10:48 | jcromartie | ? |
| 10:48 | jcromartie | is that some kind of convention? |
| 10:48 | angerman | something seems broken on your end. |
| 10:48 | jcromartie | yeah really |
| 10:48 | jcromartie | yay clojure-mode |
| 10:49 | angerman | hmpf. Now I'm going to write a JNA testcase :( |
| 10:50 | Chousuke | jcromartie: what kind of comments are you using? (how many semicolons) |
| 10:50 | jcromartie | one semicolon |
| 10:51 | Chousuke | one semicolon comments get indented all the way to the right by default IIRC. |
| 10:51 | Chousuke | they're meant for end-of-the-line comments |
| 10:52 | jcromartie | hmm, interesting |
| 10:52 | Chousuke | two semicolons get aligned with the code immediately below the comment |
| 10:52 | jcromartie | so it's probably some weird stuff getting inserted |
| 10:52 | jcromartie | that OpenJDK does not like |
| 10:53 | Chousuke | and three semicolons are meant for commenting functions and other top-level stuff. |
| 10:53 | jcromartie | hmm |
| 10:53 | jcromartie | I didn't know this |
| 10:53 | jcromartie | maybe http://clojure.org/reader needs to be updated |
| 10:53 | jcromartie | it lists Comment (;) Single-line comment ... |
| 10:54 | Chousuke | it's not a reader thing |
| 10:54 | Chousuke | it's just an indentation convention |
| 10:54 | Chousuke | ie. you're only supposed to use one semicolon if you do (somecode) ; comment |
| 10:55 | jcromartie | I feel like I have to break out a hex editor here |
| 10:55 | Chousuke | whereas two semicolons are for ;; comment \n (somecode) |
| 10:55 | jcromartie | hmm |
| 10:55 | chouser | java.lang.Exception: EOF while reading, starting at line 8 (bad.clj:15) |
| 10:56 | chouser | that's kinda handy |
| 10:56 | jcromartie | starting at line X would be really nice |
| 10:56 | chouser | I've got it working here |
| 10:56 | jcromartie | I just get java.lang.RuntimeException: java.lang.Exception: EOF while reading (venues.clj:34) |
| 10:57 | chouser | right, I just wrote a patch. |
| 10:58 | jcromartie | OK now every time I require this file the line number of the error keeps increasing |
| 10:59 | jcromartie | !?!?!!?!? |
| 10:59 | Chousuke | the repl is weird |
| 11:06 | noidi | is there a way to convert a map into a struct? |
| 11:08 | noidi | I merge several maps together to get the data of the struct, and it'd be nice if I could just cast it into a struct |
| 11:08 | the-kenny | ,(doc struct-map) |
| 11:08 | the-kenny | No clojurebot today? |
| 11:08 | jasapp | he's had trouble lately |
| 11:08 | jasapp | s/he's |
| 11:10 | noidi | the-kenny, how should I use struct-map? |
| 11:11 | noidi | (apply struct-map (create-struct :foo :bar) {:foo 3 :bar 4}) |
| 11:11 | noidi | {:foo nil, :bar nil, [:foo 3] [:bar 4]} |
| 11:12 | Chousuke | noidi: why do you need to make it a struct? |
| 11:12 | chouser | ,(into (struct (create-struct :foo :bar)) {:foo 1, :bar 2}) |
| 11:13 | Chousuke | struct-maps are maps and you can use a map anywhere you can use a struct, unless you use the accessor methods (which no-one does :P) |
| 11:13 | noidi | Chousuke, yeah, you're right |
| 11:16 | noidi | now that I think of it, I don't really need to call my defstruct at all, since the map-merging function is the only one (so far) that generates my structs |
| 11:17 | noidi | but I need it just to have something to refer to when defining the expectations of functions dealing with the structs |
| 11:18 | noidi | I'm ashamed to admit that at the moment I quite miss static typing :P |
| 11:18 | the-kenny | noidi: You could use :pre and :post |
| 11:20 | noidi | the-kenny, I don't want runtime checks, I want to document what my functions expect, and it'd be nice to have compile-time checks against that documentation |
| 11:21 | Raynes | A la Haskell. |
| 11:21 | noidi | yup |
| 11:22 | noidi | i.e. the compiler would tell me "the function expects key :foo of map m to be a seq of 3-item seqs" instead of the function just throwing a random exception at runtime |
| 11:25 | Raynes | Like chouser's pretty little gem: java.lang.Exception: EOF while reading, starting at line 8 (bad.clj:15) |
| 11:25 | Raynes | ;) |
| 11:25 | noidi | yeah, I hate those |
| 11:26 | noidi | I have to document the types anyway (to help avoid gems like that), so not checking the calling code against the spec is just a missing feature, imho |
| 11:26 | esj | noidi : i'm not sure you can. I believe the basis of a dynamically typed language is that type checking only occurs at runtime. I am not a CS guy though, so others may correct me. |
| 11:27 | dnolen | noidi: or just stop worrying about types. vectors and maps are just about all you need. it's just a different perspective (from what I know of Haskell i like it) |
| 11:28 | dnolen | also macro-writing would be perhaps arduous with types? |
| 11:31 | noidi | I don't think it would have to change the way Clojure code is written |
| 11:33 | Chousuke | If there ever will be static checking for Clojure, it'll likely be completely optional. |
| 11:33 | chouser | dnolen: yes -- I think you see that if you look at template haskell |
| 11:34 | jcromartie | I am having a hell of a time with permissions |
| 11:34 | jcromartie | I have a directory that is 777 owned by the same user running clojure |
| 11:34 | AWizzArd | cemerick: take Java into the poll and everything else would score around 0.4% |
| 11:34 | jcromartie | but I can't seem to rename a temp file to a file in that directory |
| 11:36 | cemerick | AWizzArd: Yeah. Clearly, there needs to be some delineation between "building software" and "put tab A into slot B". |
| 11:37 | noidi | maybe I'm overestimating the usefulness of static typing right now, but writing "code" like this made me think that it'd be nice to be able to write in in a format that the compiler understands: http://gist.github.com/287978 |
| 11:38 | noidi | and the only reason I created the struct was to be able to say "the argument foo should be a client-side-mesh" |
| 11:39 | noidi | so from my perspective right now, static typing would involve less typing (as I could use a formal language) and maybe even catch a mistake or two |
| 11:40 | cemerick | noidi: I presume you're looking for haskell + s-expressions, then? |
| 11:41 | jcromartie | shoot, it seems to be a problem with /tmp being on a different device |
| 11:45 | noidi | cemerick, more like clojure with static typing + type inference :) |
| 11:46 | esj | if you do without S-exp maybe OCaml ? |
| 11:46 | cemerick | noidi: I'm not sure you could get there without making macros hugely painful, as chouser mentioned. |
| 11:46 | AWizzArd | noidi: this was of course discussed several times in the past. Currently Clojure is making progress in being rewritten in Clojure. When this happens it may be easier to implement optional static typing, which would indeed be very nice. |
| 11:46 | noidi | cemerick, yeah, that might be |
| 11:46 | rhickey | noidi: how would it handle all of the heterogenous things Clojure supports? And Java inheritance? Both problems for type inference |
| 11:46 | cemerick | there's qi, which apparently allows for very powerful static typing, but I know nothing about it |
| 11:46 | AWizzArd | An optional system that finds as much it can would be most preferrable in my opinion. |
| 11:47 | cemerick | noidi: you might find factor interesting *shrug* But that's in a different world entirely. |
| 11:47 | noidi | and I'm not sure if static typing would even be useful, I just started pondering about this when writing the "code" above :P |
| 11:47 | noidi | as it looked eerily like static type definitions |
| 11:47 | chouser | rhickey: you saw the quoted metadata bug? |
| 11:48 | AWizzArd | Many things can't get detected or are very difficult. But for other areas it is possible, and currently many of those we don't try to detect. |
| 11:48 | rhickey | chouser: no |
| 11:51 | rhickey | chouser: where? |
| 11:51 | chouser | so far failing to get a link, sorry... |
| 11:54 | chouser | rhickey: http://groups.google.com/group/clojure/msg/c457a36d7bacb7fe |
| 11:55 | jcromartie | anybody using Aquamacs: do you ever see the minibuffer getting "stuck" on something? |
| 11:55 | jcromartie | like no matter how much I hit C-g it doesn't go away |
| 11:55 | jcromartie | "Switch to buffer ..." or whatever it happens to get stuck on |
| 11:55 | the-kenny | jcromartie: Try Esc-Esc-Esc |
| 11:55 | pjackson | jcromartie: try ESC-ESC-ESC if all else fails |
| 11:56 | jcromartie | nice, thanks guys |
| 11:56 | rhickey | chouser: will look, thanks |
| 11:56 | jcromartie | Emacs is the "100 year editor" for more than one reason |
| 11:57 | pjackson | the-kenny beat me to it because I had to uppercase more letters. |
| 11:57 | the-kenny | pjackson: heh |
| 12:03 | chouser | rhickey: I dug into it a bit, but made no headway beyond the high-level diagnostics in that message. |
| 12:04 | chouser | I don't have enough idea of what the compiler is doing or what it's supposed to be doing in the bytecode emitting parts. |
| 12:19 | jlongster | Hey guys, I'm using Compojure and trying to write a simple middleware which appends a trailing slash to the URL if the current URL 404'ed. I'm getting NullPointerException, though. Does anything look wrong with this? |
| 12:19 | jlongster | http://paste.lisp.org/display/94001 |
| 12:19 | jlongster | I'm using the standard `decorate` function to install it |
| 12:25 | cemerick | jlongster: a lot depends on what's throwing the NPE |
| 12:27 | jlongster | cemerick: I just annotated the paste |
| 12:27 | jlongster | http://paste.lisp.org/display/94001#1 |
| 12:28 | jlongster | Strangely enough, it doesn't throw this error if I simply use curl |
| 12:28 | jlongster | Instead of hitting it in a browser |
| 12:29 | cemerick | jlongster: those line numbers don't correspond with the source I have. But if curl is working, and a browser isn't that's a little odd. Seems like it's worth a post to the list. |
| 12:33 | jlongster | cemerick: thanks. unfortunately, I don't have time to figure out the exact details, but this seems to work: |
| 12:33 | jlongster | nekk (n=jmb@208.66.67.16) has joined channel #clojure [12:33] |
| 12:33 | jlongster | ERC> |
| 12:33 | jlongster | er, sorry |
| 12:33 | jlongster | http://paste.lisp.org/display/94001#2 |
| 12:34 | jlongster | Seems like a bug. |
| 12:36 | cemerick | jlongster: ah, you're not getting the api right for redirect-to. It just takes a URL. |
| 12:36 | cemerick | e.g. (redirect-to (str (:uri request) "/")) |
| 12:37 | jlongster | cemerick: That was a mistake, which I fixed after I posted it and I was still getting the error. Bad timing on my part. |
| 12:37 | cemerick | jlongster: FYI, compojure folk sometimes hang out over here ---> #compojure |
| 12:37 | jlongster | I was reading the source code of another web app and they noted a bug about responses not containing a :body key |
| 12:37 | jlongster | oh, thanks |
| 12:38 | LauJensen | Does anyone know of a simple Java lib to generate sparklines ? |
| 12:40 | LauJensen | (will try sparkline.org then) |
| 12:45 | esj | Lau: those look nice. Pls let me know if you succeed with them. |
| 12:51 | BrandonW | technomancy: i've looked more into lein and it makes me wonder something |
| 12:51 | BrandonW | i like how it handles projects, and it is great that it has an easy way to set up a repl with all the correct class paths set up for you |
| 12:52 | BrandonW | and that makes me curious, is it common among clojure developers to just use the clj shell script repl, as opposed to an integrated one a la enclojure, vimclojure or emacs + swank ? |
| 12:56 | technomancy | BrandonW: I don't thing many people use the CLI repl |
| 12:56 | technomancy | it's implicitly discouraged |
| 13:00 | mtm | technomancy: any chance of adding ivy dependency support to lein? |
| 13:00 | maacl | Is there a generic (as in not xml/html) templating lib for Clojure? |
| 13:03 | technomancy | mtm: ivy uses the same dependency format as maven |
| 13:03 | technomancy | *repository format |
| 13:04 | mtm | ah, okay. just need to point lein at ~/.ivy instead of ~/.m2 I suppose |
| 13:08 | BrandonW | does the swank clojure integration in emacs allow you to have to change how the repl startup works? so that you could start the integrated repl via 'lein repl'? |
| 13:08 | technomancy | BrandonW: what you want is probably M-x swank-clojure-project |
| 13:08 | BrandonW | well yeah that's the hard part |
| 13:09 | BrandonW | i did really want to use emacs for clojure since it is so far ahead in terms of lisp-based development |
| 13:09 | BrandonW | but i can't because of control key usage |
| 13:09 | BrandonW | i just wondered if it was standard to do stuff like that within emacs, so i know i could contribute something similar to vimclojure |
| 13:12 | esj | BrandonW: "lein swank" exists and allows you to connect to a repl. I can't make the classpaths work, but that's an issue with me. |
| 13:13 | esj | sorry, connect slime to a repl from emacs |
| 13:14 | BrandonW | that's the hard part for me though-- i am using vim now just because it is easier on my fingers |
| 13:15 | somnium | BrandonW: you could map ctrl to menu or capslock or M-x "42" if thats the only thing stopping you from trying slime |
| 13:15 | BrandonW | i tried capslock, didnt really help cause it was still my pinky |
| 13:15 | BrandonW | i was thinking switch it with alt, but then i would still be using control a lot for meta-x which is a pretty common command |
| 13:15 | Chousuke | you can remap the modifiers pretty freely |
| 13:15 | BrandonW | what is M-x "42" ? |
| 13:16 | Chousuke | I have caps-lock as meta and cmd as control in emacs |
| 13:16 | somnium | M-x "42" was a silly example of how you can make any key-press into pretty much whatever you want |
| 13:17 | BrandonW | oh right |
| 13:17 | BrandonW | i think i like the menu idea |
| 13:17 | BrandonW | i didn't try that |
| 13:17 | BrandonW | bind control to the windows key + the menu key so they are reachable by thumb |
| 13:17 | BrandonW | i wish you could rebind keys only inside of emacs :) |
| 13:19 | somnium | BrandonW: you can |
| 13:19 | Hun | BrandonW: try binding execute-extended-command to C-x C-m and C-x m. works much better :) |
| 13:21 | BrandonW | wait |
| 13:21 | BrandonW | if i had known that |
| 13:21 | BrandonW | i would have continued using emacs a year ago when i switched to vim |
| 13:22 | BrandonW | how come when you google for ideas in changing the control key, no one says anything about rebinding inside emacs, it's all changing your xmap and that kind of stuff :( |
| 13:24 | BrandonW | so it is possible to bind alt to the windows key + menu key, and bind control to the alt keys inside emacs? that would make me switch over instantly |
| 13:26 | Chousuke | BrandonW: yes |
| 13:26 | Chousuke | BrandonW: Excepting ridiculous demands, the answer to "is it possible?" is almost always affirmative in emacs. it just depends on how much elisp you're prepared to write. |
| 13:27 | Chousuke | BrandonW: swapping the modifiers is pretty easy |
| 13:27 | BrandonW | yeah that's what i figured |
| 13:27 | Chousuke | there's also a vi emulator for emacs, called viper |
| 13:27 | BrandonW | that is what drew me back to emacs once i started playing with clojure (my first real experience with lisp, other than one course in college) |
| 13:27 | Chousuke | but it often doesn't work that well with other things :/ |
| 13:28 | Chousuke | like paredit |
| 13:28 | BrandonW | but i kept finding articles saying the only way to do it is binding keys differently in the operating system |
| 13:28 | BrandonW | yeah, i thought about trying viper mode |
| 13:28 | chouser | does paredit play along at all with viper mode? |
| 13:29 | Chousuke | well, typing things does work I think, but the viper deletion commands ignore paredit. |
| 13:29 | somnium | If youre really determined you can hack the paredit bindings (I did) |
| 13:29 | Chousuke | hmm, looks like the modifier swapping code I have in my emacs config is mac-specific :/ |
| 13:30 | Chousuke | http://github.com/Chousuke/emacs.d/blob/master/init-mac.el maybe something similar exists for Windows and Linux |
| 13:31 | BrandonW | i don't mind that so much, cause all the keyboards i use are not mac keyboards |
| 13:32 | BrandonW | whether i'm on arch or vista or windows 7 |
| 13:32 | BrandonW | the best part of this news is that everything works everywhere- i don't have to unlearn all the typical OS commands of ctrl-c etc. because the bindings are inside of emacs |
| 13:32 | BrandonW | and because they are inside emacs, they (assumably) will work across ssh just as well as if you are right at your computer |
| 13:33 | BrandonW | so there are no double-mappings where you have to map keys in X and in virtual consoles |
| 13:33 | BrandonW | i should have talked to you guys years ago so i never switched :O |
| 13:35 | BrandonW | man, all i remember about emacs is ctrl-npfb, heh |
| 13:37 | Chousuke | sometimes I wonder whether I should map some basic emacs movement commands to C-h/j/k/l |
| 13:37 | Chousuke | I use vimperator so my fingers are still very trained to use those keys. :P |
| 13:37 | BrandonW | is it uncommon or unheard of to remap C-npfb to M-npfb (or something else?) |
| 13:38 | BrandonW | i don't recall off the top of my head just how much CTRL is used, but if the primary movement keys used alt instead, that might allow me to keep meta where it is, and just move control one key close to the middle of the keyboard |
| 13:38 | maacl | Is there a generic (as in not xml/html) templating lib for Clojure? |
| 13:38 | Chousuke | I don't know. I suck at using the emacs movement commands |
| 13:38 | Chousuke | I use arrows. |
| 13:38 | BrandonW | haha nice :) |
| 13:38 | the-kenny | me too, except for C-v and M-v |
| 13:39 | BrandonW | yeah that's what i' |
| 13:39 | Hun | best moving commands in emacs are C-s and C-r |
| 13:39 | Chousuke | but paredit is just awesome |
| 13:39 | BrandonW | i've been realizing |
| 13:39 | Chousuke | and the latex mode too |
| 13:39 | chouser | Chousuke: you've been corrupted. You used to use hjkl as one should. |
| 13:39 | the-kenny | Uh and I use C-M-f an C-M-b a lot |
| 13:39 | Hun | just look where you want to be, type the next 5 chars you see and you're there |
| 13:39 | chouser | or perhaps I'm assuming things incorrectly |
| 13:39 | the-kenny | (forward/backward-sexp) |
| 13:39 | BrandonW | is even ignoring the keyboard commands of emacs, the power you have (especially regarding dynamic and high level languages like clojure) is worth so much more |
| 13:39 | jasapp | move them around until your tendonitis goes away |
| 13:39 | chouser | maacl: you might look at StringTemplate (java lib) -- it's been generally recommended |
| 13:39 | Chousuke | chouser: I was never very good with vim either |
| 13:40 | jasapp | I left control in it's original spot, and eventually my left pinky stopped working correctly |
| 13:40 | Chousuke | Though I still use it for editing config files and such |
| 13:40 | jasapp | that wasn't very fun |
| 13:40 | Chousuke | vim is awesome for quick edits. |
| 13:41 | chouser | ah, shoot. I was drawn into an editor discussion. again. |
| 13:41 | Chousuke | this has the amusing consequence that I sometimes type vim init.el |
| 13:43 | Hun | alias vi="emacsclient -t" |
| 13:43 | Hun | :) |
| 13:44 | Chousuke | :p |
| 13:44 | esj | It is widely known Knuth has a pipe organ in his house, upon which tend to think he plays Bach. This is of course untrue. The device is his emacs terminal, and the pedals his modifier keys. |
| 13:46 | Chousuke | I bet there are people who really do use pedals with emacs |
| 13:47 | jasapp | That actually isn't a bad idea |
| 13:47 | Chousuke | it's not, but it still sounds ridiculous |
| 13:47 | jasapp | that'd be kind of cool to hook up control and meta to foot pedals |
| 13:47 | BrandonW | in my googling |
| 13:47 | bpsm | i have pedals for my kinesis ergo keyboard, and I use emacs. I don't use the pedals much though. ;-) |
| 13:47 | BrandonW | i've seen people use both pedals |
| 13:47 | BrandonW | and a very funky looking keyboard where all the modifiers were reachable by your thumbs |
| 13:48 | esj | no ! I was totally taking the Mickey. |
| 13:48 | jasapp | bpsm: you clearly need to map the pedals to control and meta |
| 13:48 | jasapp | :) |
| 13:48 | bpsm | jasapp: yea, I know, but my sense of timing just isn't good enough, so I end up syncopating my modifiers... and that's just bad. |
| 13:48 | Chousuke | I think emacs is actually designed to be used with keyboards where you can use your palms to press modifier keys, instead of fingers. |
| 13:49 | jasapp | Chousuke: which keyboard is that? |
| 13:49 | Chousuke | one with big enough modifier keys I guess. |
| 13:50 | bpsm | jasapp: "which keyboard?": this one: http://en.wikipedia.org/wiki/Space-cadet_keyboard |
| 13:52 | BrandonW | so basically to summarize, i should try binding execute-extended-command and/or viper mode |
| 13:53 | BrandonW | now the rough part, is i have to relearn/remember emacs configuration enough so that i can set those up before i start learning it again.. |
| 13:53 | raek | i'm thinking about representing URIs as clojure keywords, since I will keep a lot of them and compare them for equality very often. is this a good idea? |
| 13:54 | stuartsierra | no |
| 13:54 | stuartsierra | use String.intern |
| 13:55 | raek | ah, I see... |
| 13:55 | raek | this was most probably what I were looking for |
| 13:55 | raek | thanks! |
| 14:10 | BrandonW | sorry, but i'm still trying to google on how exactly to change modifier keys inside emacs only and i can't seem to find anything |
| 14:11 | BrandonW | i found on the emacs side it flat out says it is impossible to swap control + caps lock inside emacs, and a couple of other results saying they swapped alt + control outside of emacs because they didn't know if it was possible inside of emacs |
| 14:11 | grammati | does anyone here use leiningen on Windows? |
| 14:12 | DeusExPikachu | on cyclic definitions, its possible to write functions that depend on each other using 'declare, but is it possible to do that with local bindings? |
| 14:13 | chouser | DeusExPikachu: yes, with letfn |
| 14:14 | DeusExPikachu | chouser: what about with recursively defined sequences? |
| 14:14 | chouser | I'm not sure what you mean. |
| 14:15 | robwolfe | grammati: I use lein on Windows |
| 14:15 | grammati | ok, so it works? more-or-less? |
| 14:16 | robwolfe | sure, I wrote simple "bat" file for this |
| 14:16 | DeusExPikachu | chouser: normally in a let form, you can't define new locals that depend on later defined locals. I'm making nested sequences that depends on later definitions of sequences that depend on the first sequence |
| 14:17 | dnolen | BrandonW: are you on a mac? |
| 14:17 | BrandonW | no |
| 14:17 | BrandonW | windows/arch linux typically |
| 14:18 | chouser | DeusExPikachu: letfn allows you to define locally-named fns that can refer to each other in their bodies. |
| 14:18 | BrandonW | although my co-worker would probably be interested in the mac commands, he is also interested in trying out emacs again if you can rebind control and alt freely within emacs |
| 14:18 | dnolen | BrandonW: on mac you have two possibilities, OS Keyboard Prefs, or mac specific extensions to Carbon Emacs and Aquamancs. |
| 14:19 | dnolen | (setq mac-option-modifier 'meta) (setq mac-command-modifier 'ctrl) |
| 14:19 | dnolen | |
| 14:19 | dnolen | is what I do. |
| 14:19 | DeusExPikachu | chouser: maybe I can wrap the sequences in local functions that return sequences? |
| 14:20 | BrandonW | see i don't mind having an OS specific extension, as long as it is contained within emacs |
| 14:20 | chouser | DeusExPikachu: possibly. I'm still not quite sure what you mean by defining a sequence. |
| 14:20 | BrandonW | is there something similar to mac-option-modifier except for non-mac keyboards? |
| 14:22 | DeusExPikachu | chouser: something like (let [foo (list :a 1 2 3 bar) bar (list 1 2 foo)]) |
| 14:22 | Chousuke | BrandonW: it's not really for mac keyboards, but for the Mac OS :/ |
| 14:23 | BrandonW | ouch |
| 14:23 | BrandonW | so it isn't an api that is available in windows/*nix in a different form |
| 14:23 | BrandonW | it's just that apple allows their OS to rebind keys per app, and other OS don't? :( |
| 14:24 | grammati | robwolf: I don't understand this part of your bat file: rem add jars found under "lib" directory to CLASSPATH |
| 14:24 | grammati | what exactly is expected to be in lib? |
| 14:24 | grammati | do I need anything other than leiningen and clojure jars on the classpath? |
| 14:25 | robwolfe | grammati: all your dependencies after running "lein deps" |
| 14:25 | DeusExPikachu | my actual problem I'm trying to solve is there is this parsing expression grammar (PEG) I'm defining with s-expression like syntax, ie (:ordered-choice exp1 exp2), and normally these are bound to names, most PEG definitions have cycles though, and trying to solve that problem |
| 14:25 | grammati | I'm still at the "self-install" stage |
| 14:25 | grammati | haven't got that to work yet |
| 14:25 | robwolfe | grammati: self-install does not work on Windows |
| 14:25 | chouser | DeusExPikachu: not sure if this helps: (letfn [(foo [] (lazy-cat [:a 1 2 3] (bar))) (bar [] (lazy-cat [1 2] (foo)))] (foo)) |
| 14:25 | grammati | oh, ok, I'll stop trying that then :) |
| 14:26 | robwolfe | you need to download Leinigen by yourself |
| 14:26 | grammati | ok, thanks, I'll give that a try |
| 14:26 | DeusExPikachu | chouser: that might work, I'll try it out |
| 14:29 | jcromartie | chouser: you rock, man... thanks for the EOF fix :) |
| 14:30 | chouser | jcromartie: sure! I hope the line number it reports is actually helpful in real-world cases. |
| 14:32 | jcromartie | heh, at least it's a start |
| 14:32 | jcromartie | (P.S. my problem earlier was not encoding or parens-related after all... just an exception that I didn't realize was an inner exception) |
| 14:33 | jcromartie | maybe I'll try my hand at improving the REPL :) |
| 14:55 | stacktracer | I have a Java codebase, and would like to use Clojure data structures (PersistentHashMap, et al.) from my Java code. Is there any reason that this wouldn't be a good idea? |
| 14:56 | chouser | stacktracer: because they're persistent and don't have generics, the code to use them will not be particularly idiomatic Java. But it should actually work just fine. |
| 14:57 | stacktracer | chouser: cool -- thanks! |
| 15:09 | cemerick | stacktracer: clojure's data structures have leaked into our java codebase quite a bit -- they're not the prettiest things to use, but they're handy and work as you'd expect. |
| 15:10 | chouser | hey, I only said "not particularly idiomatic" ;-) |
| 15:10 | rhickey | that's fair |
| 15:10 | stuartsierra | i only said they need reindenting |
| 15:10 | rhickey | heh |
| 15:10 | the-kenny | We talk about pure Java. Everything is ugly in Java. |
| 15:10 | rhickey | Idea did that for me once already |
| 15:10 | the-kenny | *hides under a desk* |
| 15:11 | stuartsierra | Idea has strange ideas about indentation then |
| 15:11 | cemerick | rhickey: not ugly, just sticking out like a sore thumb far from her native land ;-) |
| 15:11 | stacktracer | beautiful on the inside |
| 15:11 | chouser | :set noexpandtab tabstop=4 cinoptions=j1>1s{1s |
| 15:12 | rhickey | on an update they toggled reformat-on-checkin on me, and coupled it with an indentation bug |
| 15:12 | stuartsierra | ah |
| 15:12 | rhickey | not to say my indentation was that great |
| 15:12 | chouser | that's what it takes to convince vim to indent like rhickey |
| 15:13 | technomancy | one of these days I'm going to steal everyones' laptops and covertly configure them to highlight lines over 80 columns long |
| 15:13 | chouser | technomancy: yay! I'd help. |
| 15:13 | the-kenny | me too |
| 15:13 | stuartsierra | technomancy: just auto-truncate long lines |
| 15:14 | chouser | though realizing Clojure's java code only wants 4 spaces when it has a tab helps a bit |
| 15:14 | stuartsierra | and do it at 72 columns |
| 15:15 | stuartsierra | And make everyone write Literate Programs |
| 15:15 | chouser | uh |
| 15:18 | dnolen | auto-truncate +1 this isn't 1970 |
| 15:19 | stacktracer | cemerick: thanks |
| 15:32 | arnihermann | I'm doing a program which generates program code in erlang from another source program and been playing with it in clojure, so far only printing it to std. out |
| 15:32 | arnihermann | got any tips on how to collect the generated source and pretty print it? |
| 15:33 | jasapp | ,(doc with-out-str) |
| 15:34 | jasapp | that should help you collect it, not sure about making it pretty |
| 15:34 | arnihermann | mmm nice, it's a starting point anyways |
| 15:34 | arnihermann | thanks |
| 15:35 | jasapp | ~seen clojurebot |
| 15:35 | Chousuke | for pretty-printing clojure code there's clojure.contrib.pprint at least. |
| 15:35 | Chousuke | but if you need to pretty-print erlang code you might need to parse it first. |
| 15:38 | DeusExPikachu | for the purpose of a certain macro, I need to iterate through some defined bindings and ideally I need to iterate two items in the sequence at a time.... map doesn't seem to fit here, any pointers? |
| 15:38 | Chousuke | partition the sequence? |
| 15:38 | kotarak | ,(doc partition) |
| 15:39 | hiredman | bah |
| 15:39 | DeusExPikachu | that's it, thanks |
| 15:43 | hiredman | clojurebot: ping? |
| 15:43 | clojurebot | PONG! |
| 15:51 | rhickey | hiredman: why not? |
| 15:53 | AWizzArd | rhickey: did you protect the name Clojure? |
| 15:53 | hiredman | rhickey: I don't know, I assume it's because I am not part of the "team" but I don't know. maybe I can but am unable to find the right place to do it in the ui |
| 15:53 | AWizzArd | ~max people |
| 15:53 | clojurebot | max people is 240 |
| 15:53 | AWizzArd | this is now :-) |
| 15:53 | LaPingvino | hello :) |
| 15:53 | AWizzArd | grats LaPingvino :-) |
| 15:54 | LauJensen | Blogged a little about Global Warming from a Clojure perspective :) http://www.bestinclass.dk/index.php/2010/01/global-warming/ |
| 15:55 | rhickey | hiredman: if you are not a contributor, you can submit issues using the Support tab. If you are a contributor, you need to use your real name on Assembla and I'll make you a member |
| 15:56 | hiredman | real name as my login, or in the personal information thing? |
| 15:56 | rhickey | hiredman: I don't think you need to change your login |
| 16:00 | DeusExPikachu | wow, I've reached the point where I need to use symbol macros, props to Konrad |
| 16:01 | kotarak | DeusExPikachu: scary |
| 16:03 | DeusExPikachu | kotarak: its actually worse, I need to write a macro that takes forms and decorate it with symbol macros implicitly defined by the user and interpolates that into letfns ... |
| 16:04 | DeusExPikachu | I think its the most complicated macro I've tackled so far |
| 16:04 | kotarak | DeusExPikachu: scary++ |
| 16:04 | hiredman | rhickey: ok |
| 16:04 | kotarak | DeusExPikachu: I'm just moving away from macros. |
| 16:04 | hiredman | DeusExPikachu: sounds pretty horible |
| 16:05 | DeusExPikachu | I'll post my code on github in a bit, I'm calling it simple-peg, will release under very open source friendly terms |
| 16:05 | DeusExPikachu | in contrast to clj-peg |
| 16:09 | rhickey | hiredman: ok, you should be all set |
| 16:09 | krumholt | i know i brought this up before, but if it is not too much of a terrible inconvenience could we get (apply foo) back (compared to (apply foo nil)? if there is no real need for that to go away |
| 16:09 | hiredman | rhickey: thanks! |
| 16:10 | AWizzArd | what is different between (apply foo) and (foo)? |
| 16:10 | krumholt | AWizzArd, none |
| 16:10 | AWizzArd | ah ok |
| 16:10 | krumholt | but i use a lot of functions that produce functions to call them looks like ((foo)) |
| 16:10 | cemerick | make it easier for macro writers? *shrug* |
| 16:11 | krumholt | and (apply (foo)) is much clearer |
| 16:11 | krumholt | that duplicate (( is hard to miss when you read the code again |
| 16:11 | AWizzArd | krumholt: maybe (def äplei #(apply %1 nil))? |
| 16:11 | cemerick | krumholt: eh, just get used to ((foo)) :-) |
| 16:12 | krumholt | i could make a macro myself but why did that go away in the first place? |
| 16:12 | AWizzArd | cemerick: the real fun begins at level 5 :) |
| 16:12 | rhickey | krumholt: when did it 'go away'? I'm not sure that was ever supported |
| 16:12 | krumholt | it was |
| 16:12 | krumholt | befor i updatet to 1.1 |
| 16:12 | cemerick | AWizzArd: sometimes there can be too many levels of indirection :-) |
| 16:12 | AWizzArd | *g* |
| 16:12 | rhickey | krumholt: like, supported in the doc string? |
| 16:13 | krumholt | rhickey, hm i don't know like supported as in i used it a lot and after updating to 1.1 it didn't work anymore |
| 16:15 | krumholt | as i said if this is a big problem to change i don't care about it. but it seems natural for apply to support that |
| 16:15 | krumholt | it's just to make my code look more pretty |
| 16:16 | DeusExPikachu | what's the way to use a lib's private functions? |
| 16:17 | AWizzArd | be in the right ns |
| 16:17 | cemerick | DeusExPikachu: (#'ns/private-var args...) |
| 16:17 | AWizzArd | and know what you are doing |
| 16:18 | AWizzArd | a propos private.. defonce- would also be nice |
| 16:23 | DeusExPikachu | ok, I think I'll not do that in this case, but then now need idiomatic way to pick every other item in seq |
| 16:24 | hiredman | ,(doc take-nth) |
| 16:24 | clojurebot | "([n coll]); Returns a lazy seq of every nth item in coll." |
| 16:24 | hiredman | ,(take-nth 2 (range 10)) |
| 16:24 | clojurebot | (0 2 4 6 8) |
| 16:24 | DeusExPikachu | whops, I assumed that did something different |
| 16:24 | DeusExPikachu | yeah thats it -_- |
| 16:28 | jlongster | What's is Clojure's equivalent of Scheme's `cond` and `case` statements? |
| 16:29 | AWizzArd | ,(doc cond) |
| 16:29 | clojurebot | "([& clauses]); Takes a set of test/expr pairs. It evaluates each test one at a time. If a test returns logical true, cond evaluates and returns the value of the corresponding expr and doesn't evaluate any of the other tests or exprs. (cond) returns nil." |
| 16:29 | AWizzArd | ,(doc case) |
| 16:29 | clojurebot | "clojure.contrib.fcase/case;[[test-value & clauses]]; Like cond, but test-value is compared against the value of each test expression with =. If they are equal, executes the \"body\" expression. Optional last expression is executed if none of the test expressions match." |
| 16:29 | chouser | heh |
| 16:30 | kotarak | ,(doc condp) |
| 16:30 | clojurebot | "([pred expr & clauses]); Takes a binary predicate, an expression, and a set of clauses. Each clause can take the form of either: test-expr result-expr test-expr :>> result-fn Note :>> is an ordinary keyword. For each clause, (pred test-expr expr) is evaluated. If it returns logical true, the clause is a match. If a binary clause matches, the result-expr is returned, if a ternary clause matches, its result-fn, which must |
| 16:30 | jlongster | Thanks. I didn't see it in their documentation. |
| 16:31 | kotarak | ,(condp = 5 1 1 2 2 3 3 4 4 5 5 6) |
| 16:31 | clojurebot | 5 |
| 16:31 | kotarak | ,(condp = 10 1 1 2 2 3 3 4 4 5 5 6) |
| 16:31 | clojurebot | 6 |
| 16:36 | chouser | LauJensen: you probably want to "lose" your head, not "loose" it |
| 16:36 | LauJensen | hehe |
| 16:36 | LauJensen | Thanks |
| 16:42 | DeusExPikachu | hmm, trying to get this symbol macro to work, (symbol-macrolet [a (a)] a), I want something like (do a) to turn into (do (a)), something I'm missing? |
| 16:43 | DeusExPikachu | sorry, the error is it turns into stack-overflow |
| 16:45 | DeusExPikachu | I think its expanding a into (a), and then recursively expanding (a) |
| 16:45 | DeusExPikachu | I kinda just need a one shot |
| 16:47 | hiredman | makes sense, macros do expand recursively |
| 16:47 | DeusExPikachu | except I need a one shot |
| 16:48 | hiredman | sounds horrible |
| 16:51 | DeusExPikachu | ok, think I have a workaround |
| 17:48 | krumholt | how can i access a field that i defined in a deftype? |
| 17:48 | hiredman | :a |
| 17:49 | krumholt | oh thats nice. thank you |
| 18:08 | DeusExPikachu | well finished that beast of a macro, but now I gotta debug a parser generator, yay |
| 18:12 | krumholt | can i use still deftype with multimethods and without a protocol or is that obsolete? |
| 18:13 | Chousuke | multimethods are not obsolete |
| 18:14 | Chousuke | protocols are a special case of multimethods, implemented more efficiently |
| 18:15 | dnolen | Chousuke: "special case" might be a little bit misleading right? They are a separate system than multimethods. |
| 18:15 | krumholt | hm ok so i can still use deftype and then dispatch on the type? |
| 18:16 | Chousuke | separate system, yeah, but multimethods can do everything protocols can, as far as I know |
| 18:16 | Chousuke | they're just less efficient. :/ |
| 18:19 | krumholt | ok. thanks. i'll use multimethods |
| 18:38 | alexyk | the algorithmic fun problem of the day: implement the longest contiguous increasing subsequence in clojure! a very simple description is in http://stackoverflow.com/questions/655817/longest-contiguous-subsequence-algorithm. Basically you scan left to right and notice the length when not increasing anymore. Update to longer if found. The description is imperative; what's a good FP way? |
| 18:54 | jlongster | How do I case a string to a number? |
| 18:54 | jlongster | (int "3") doesn't work |
| 18:55 | Chousuke | ,(Integer/valueOf "4") |
| 18:55 | clojurebot | 4 |
| 18:56 | jlongster | thanks |
| 19:11 | tomoj | is there a better way to do (update-in {} [k] #(if % (inc %) 1)) ? |
| 19:11 | tomoj | I think I vaguely remember someone asking about this before in here |
| 19:13 | tomoj | maybe (assoc map key (inc (get map k 0))) ? |
| 19:13 | DeusExPikachu | ok, http://github.com/bmillare/simple-peg/blob/master/core.clj is where my simple-peg code is, currently trying to debug the parser when you feed it PEGs defined with cycles, at least now others can look at it and tear it apart |
| 19:17 | tomoj | in other words, is this ugly? https://gist.github.com/d959ec8067aab3be40b5 |
| 19:17 | tomoj | seems ugly to me |
| 19:18 | mquander | ,(Integer/valueOf "notanumber") |
| 19:18 | clojurebot | java.lang.NumberFormatException: For input string: "notanumber" |
| 19:28 | Chousuke | tomoj: define the fnil function :/ |
| 19:29 | tomoj | fnil? |
| 19:29 | Chousuke | tomoj: (defn fnil [f default] (fn [x] (if x (f x) default))) |
| 19:30 | Chousuke | then you can do ((fnil inc 0) nil) -> 0 |
| 19:30 | tomoj | oh, just found this http://groups.google.com/group/lawcommons-dev/browse_thread/thread/8b1172af9652c741 |
| 19:30 | tomoj | same code there |
| 19:30 | tomoj | ah, good idea |
| 19:31 | tomoj | is using update-in when [k & ks] is just a single key silly? |
| 19:32 | Chousuke | nah. |
| 19:32 | tomoj | I always feel like there is a missing function there |
| 19:33 | tomoj | to parallel assoc/assoc-in |
| 19:33 | Chousuke | update, you mean? :) |
| 19:33 | tomoj | yep |
| 19:33 | tomoj | it doesn't exist, though, does it? |
| 19:33 | Chousuke | nope |
| 19:34 | Chousuke | I don't think the update operation is so common that you'd need an analogy to assoc |
| 19:34 | Chousuke | whereas assoc is kind of fundamental |
| 19:34 | tomoj | also assoc takes arbitrarily many kv pairs |
| 19:35 | Chousuke | hmm |
| 19:35 | tomoj | and my update would be used in a reduce anyway so doesn't need that |
| 19:35 | Chousuke | (update-many k f k2 f2 ...) :P |
| 19:35 | Chousuke | would be silly. |
| 19:35 | tomoj | yeah |
| 19:39 | tomoj | so fnil is sortof a replacement for maybe from haskell, I guess |
| 19:40 | alexyk | is there something like max-by to go together with sort-by? |
| 19:42 | tomoj | c.c.accumulators looks interesting |
| 19:43 | _ato | ,(doc max-key) |
| 19:43 | clojurebot | "([k x] [k x y] [k x y & more]); Returns the x for which (k x), a number, is greatest." |
| 19:43 | _ato | alexyk: ^ |
| 19:43 | alexyk | nice |
| 19:44 | alexyk | _ato: you're the clojars guy, right? |
| 19:44 | _ato | alexyk: yep |
| 19:44 | alexyk | _ato: so why was search so bad? :) |
| 19:45 | alexyk | just askin' :) |
| 19:46 | _ato | you mean why is search currently so buggy? |
| 19:46 | _ato | cause I haven't spent enough time on it |
| 19:46 | alexyk | ah ok :) |
| 19:47 | alexyk | so at least the root cause is under control |
| 19:47 | _ato | yeah. I'm working a new version that uses lucene instead of sqlite. Got a couple of migration issues to sort out. I haven't had much time to work on Clojure stuff in the last month or so |
| 19:47 | _ato | nearly done though, hope to get it out in the next day or so |
| 19:48 | _ato | oh, and yes, it'll have browse support finally |
| 19:48 | _ato | ;-0 |
| 19:48 | alexyk | cool! then everything hidden will be revealed again! |
| 19:48 | _ato | ;-) |
| 19:48 | _ato | yes |
| 19:48 | alexyk | lucene rules |
| 19:49 | _ato | yes it does. :-) |
| 19:52 | dnolen | _ato: are you using couchdb-lucene? |
| 19:53 | dnolen | I've found it to be pretty slick, and quite easy to use (I thought clojars was on couchdb) |
| 20:08 | alexyk | how would you use max-key to find a pair among say [(1 2) (2 5)] where the second element is the greatest? |
| 20:11 | Chousuke | ,(max-key second [1 2] [3 1]) |
| 20:11 | clojurebot | [1 2] |
| 20:11 | alexyk | right |
| 20:17 | alexyk | here's a version of the contiguous longest subsequence length: any improvements? |
| 20:17 | alexyk | ,(->> [1 2 3 4 0 1 2 1 3 4 5 6 2 3 0] (partition 2 1) (partition-by (fn [[x y]] (< x y))) (map count) (apply max) (+ 1)) |
| 20:17 | clojurebot | java.lang.Exception: Unable to resolve symbol: partition-by in this context |
| 20:17 | alexyk | ,(->> [1 2 3 4 0 1 2 1 3 4 5 6 2 3 0] (partition 2 1) (clojure.contrib.seq-utils/partition-by (fn [[x y]] (< x y))) (map count) (apply max) (+ 1)) |
| 20:17 | clojurebot | 5 |
| 20:44 | alexyk | and here's one with [position length]: |
| 20:44 | alexyk | ,(->> [1 2 3 4 0 1 2 1 3 4 5 6 2 3 0] (partition 2 1) (clojure.contrib.seq-utils/partition-by (fn [[x y]] (< x y))) (map count) ((fn [v] [(clojure.contrib.seq-utils/reductions + 0 v) (map inc v)])) (apply zipmap) (apply max-key second)) |
| 20:44 | clojurebot | [7 5] |
| 20:45 | alexyk | now here's some FP at work :) |
| 21:01 | ohpauleez | Hey guys, is there a better shorthand: (reduce #(or %1 %2) (map odd? [ 2 4 6])) |
| 21:03 | hiredman | ,(some odd? [2 4 6]) |
| 21:03 | clojurebot | nil |
| 21:03 | hiredman | ,(some odd? [2 5 6]) |
| 21:03 | clojurebot | true |
| 21:03 | ohpauleez | thanks hiredman |
| 21:04 | ohpauleez | I knew it felt way to drawn out |
| 21:18 | alexyk | my current repl didn't load the contrib, and has some important data in it. I can load-file seq_utils.clj, but still can't refer to e.g. partition-by. What should I do after load-file to make seq-utils available in the current namespace? |
| 21:19 | Raynes | Email is confusing. :( |
| 21:24 | alexyk | so -- the names do exist now in-ns 'clojure.contrib.seq-utils, how do I make them available without prefix in another namespace? |
| 21:26 | alexyk | ah, refer... |
| 21:28 | alexyk | I tried to define reductions manually and now refer complains about it; how do I undefine it and refer again? |
| 21:29 | alexyk | anybody? |
| 21:35 | chouser | alexyk: 'refer' |
| 21:36 | alexyk | yep -- but I messed with a function, do I had to (def name ns/name) manually |
| 21:36 | stuarthalloway | what part of the new maven build for contrib produces the variant jars? (e.g. the "-slim" jar)? |
| 21:41 | stuarthalloway | chouser: maven won't bite just from a git pull :-) |
| 21:42 | stuarthalloway | but I sure hope someone who already knows it can add the XML needed to build clojure-contrib-debug.jar for me. 15 minutes of googling has only confirmed that I don't really want to know how it works |
| 21:44 | chouser | heh |
| 21:51 | alexyk | are we guaranteed to get keys and vals from sorted-map in the sorted order of keys? |
| 22:01 | cemerick | alexyk: almost certainly |
| 22:02 | drewr | so is &env sugar for getting locals? |
| 22:02 | cemerick | gotta love assurances :-) |
| 22:02 | cemerick | is there any reason that I should feel dirty about sending to *agent*? |
| 22:02 | alexyk | cemerick: thx! I can sleep soundly now |
| 22:02 | alexyk | cemerick: so long as it's not Smith |
| 22:05 | chouser | cemerick: nope, it's good |
| 22:08 | cemerick | chouser: it's certainly more useful (w.r.t. reporting status, etc) than recurring in the sent fn, but there's something about the different flavor of circularity that tweaks me. |
| 22:11 | alexyk | what's the absolutely shortest way to code this fn: inc if greater than 1? |
| 22:12 | alexyk | may check with not= |
| 22:12 | drewr | #(if (pos? x) (inc x) x) |
| 22:12 | drewr | er, #(if (pos? %) (inc %) %) |
| 22:12 | alexyk | drewr: 1 should not be inc'd |
| 22:13 | drewr | hm, yes |
| 22:13 | drewr | #(if (> % 1) (inc %) %) |
| 22:14 | alexyk | yeah, that's kind of expected. I was hoping for some tricks :) |
| 22:20 | krumholt_ | alexyk, can x be negative? |
| 22:20 | alexyk | nope |
| 22:33 | tomoj | so, with latest master including new, could I create a type which acts like a map (and so works with map functions like update-in), but caches subtree counts in individual nodes? |
| 22:33 | tomoj | I ask because I don't understand the new stuff at all, and am not sure whether it would be worth trying to understand it tonight only to realize that it won't work for my problem |
| 22:37 | alexyk | how do we tke only odd members of a seq in a simplest way? |
| 22:40 | krumholt_ | ,(filter odd? [1 2 3 4 5]) |
| 22:40 | clojurebot | (1 3 5) |
| 22:40 | tomoj | did you mean odd indexes or odd values? |
| 22:42 | krumholt_ | in the index case |
| 22:42 | krumholt_ | ,(take-nth 2 [1 9 2 9 3 9 4]) |
| 22:42 | clojurebot | (1 2 3 4) |
| 22:43 | tomoj | oh, nice |
| 22:43 | tomoj | ,(take-nth 2 (rest [0 1 2 3 4 5 6 7])) |
| 22:43 | clojurebot | (1 3 5 7) |
| 22:44 | tomoj | I was thinking recursion/lazy-seqs :) |
| 22:45 | krumholt_ | that will work too :) |
| 22:48 | tomoj | I feel like I need a game which forces me to learn all the core and contrib functions |
| 22:48 | tomoj | so that at least I know about them while writing my own functions to avoid recursion/lazy-seq ratholes |
| 22:56 | tomoj | so I am thinking that maybe deftype can be used to make custom map-like types? |
| 22:56 | tomoj | in this case, which interface to use? |
| 22:56 | tomoj | Associative? |
| 22:57 | ohpauleez | chouser: you brave soul |
| 22:57 | chouser | tomoj: I think that's right. |
| 22:57 | ohpauleez | I already hacked the pom myself |
| 22:58 | tomoj | why does the pom need hacking? |
| 22:58 | tomoj | I just pulled |
| 22:58 | chouser | tomoj: oh, probably ILookup and/or IPersistentMap instead. |
| 22:58 | ohpauleez | make the build do interesting things, or build stuff into contrib |
| 22:58 | ohpauleez | I'm also running on JDK7, so sometimes it gets wonky |
| 22:58 | tomoj | chouser: ok, thanks |
| 22:59 | chouser | I need it to build against my own patched version of clojure. Is this going to be a problem? |
| 22:59 | tomoj | IPersistentMap I think since it needs to be "modifiable" |
| 22:59 | chouser | oh man, *everything* is renames. |
| 23:01 | ohpauleez | chouser: you might need to edit the dependencies in the pom, so it doesn't try to pull clojure in. You can do an offline build and drop your own clojure jar in your repo |
| 23:02 | ohpauleez | but I don't know for sure |
| 23:02 | chouser | gah |
| 23:02 | chouser | :-( |
| 23:04 | chouser | instructions right in the readme, beginning with "Download the maven-ant-tasks JAR..." |
| 23:05 | chouser | heh. I don't even have maven installed. |
| 23:06 | tomoj | hmm |
| 23:07 | tomoj | when I deftype and define methods for IPersistentMap, should I be making implementations of e.g. .assoc, .assocEx, .without from IPersistentMap.java? |
| 23:07 | tomoj | or implementations of clojure functions like assoc, get, etc? |
| 23:09 | chouser | the Java method names |
| 23:09 | tomoj | without the "." I guess? |
| 23:09 | tomoj | unless the examples in (doc deftype) are focused on protocols |
| 23:10 | tomoj | maybe I will write "new branch for dummies" sometime |
| 23:10 | chouser | :-) |
| 23:11 | chouser | no dots, and the names as given in the interface, not the clojure fn that calls them. |
| 23:11 | chouser | maven is stunningly huge. |
| 23:11 | tomoj | chouser: thanks for your help |
| 23:13 | chouser | wow. completely failure |
| 23:13 | ohpauleez | has anyone written a nice tutorial on the new features yet? especially deftype? |
| 23:14 | chouser | [WARNING] JAR will be empty - no content was marked for inclusion! ... Total time: 2 minutes 2 seconds |
| 23:14 | ohpauleez | chouser: what's the issue, test failures? |
| 23:14 | krumholt_ | is there anyway in clojure to create a structure in memory without making an object? |
| 23:14 | chouser | krumholt_: what kind of structure is not an object? |
| 23:15 | krumholt_ | chouser, three integers in a row |
| 23:15 | chouser | ohpauleez: I shouldn't mess with this tonight. I'll try again tomorrow. Maybe Sierra will be here so I can verbally abuse him. |
| 23:16 | chouser | krumholt_: about the lightest way I can think of to hold three integers would be an array, but an array is still an object. |
| 23:16 | ohpauleez | haha, good point, ping me tomorrow if I can help out |
| 23:16 | chouser | ohpauleez: great, thanks. |
| 23:16 | krumholt_ | chouser, i am asking because i am writing a little graphics application and it is much too slow. the problem doesn't seem to be the math. it's pretty fast on the jvm but if i multiply to vectors i get a third. and all that object creating is costing me all the time |
| 23:17 | chouser | I *was* going to push these Clojure patches, but not without making sure they don't break contrib first. |
| 23:17 | chouser | I guess everyone will just have to wait... |
| 23:17 | ohpauleez | krumholt_: transients maybe, or parallelize some of that |
| 23:17 | ohpauleez | you'll have to run it through a profiler to confirm where the bottleneck is |
| 23:18 | chouser | krumholt_: ah. well, math with primitive numbers is much faster than math with boxed numbers, and the only collection that supports primitives is the Java array. |
| 23:18 | chouser | ok, to bed. |
| 23:18 | krumholt_ | hm ok thanks |
| 23:20 | qbg | If we shouldn't use single segment namespaces, what would be a good way to pick a multi-segment namespace? |
| 23:27 | alexyk | tomoj: need odd indices. Is there an inverse of interleave, i.e. unzip? |
| 23:28 | tomoj | odd indices was solved above |
| 23:30 | tomoj | but if you want n seqs, each containing all elements of the original seq with indices that are i modulo n, hmm |
| 23:30 | tomoj | not sure |
| 23:31 | tomoj | is it impossible to use a deftype constructor within a method definition in the deftype? |
| 23:33 | tomoj | oh, I see, within the method definition you need TypeName. rather than just TypeName |
| 23:39 | alexyk | tomoj: my IRC gapped, didn't see any nice odd indices! |
| 23:41 | alexyk | also: how do we revert partition 2 1? I.e., glue back ((3 2) (2 1)) into (3 2 1), nicely? |
| 23:42 | krumholt_ | <krumholt_> ,(take-nth 2 [1 9 2 9 3 9 4]) |
| 23:42 | krumholt_ | ,(take-nth 2 [1 9 2 9 3 9 4]) |
| 23:42 | clojurebot | (1 2 3 4) |
| 23:42 | technomancy | _ato: you're back! |
| 23:45 | technomancy | or not... |
| 23:47 | alexyk | ah! ok |
| 23:57 | tomoj | or add a rest if you want odd zero-based indices |
| 23:59 | krumholt_ | alexyk, and the anti-partitioning i think would be concat |
| 23:59 | krumholt_ | ,(apply concat (partition [1 2 3 4 5 6 7 8 9] 2)) |
| 23:59 | clojurebot | java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Integer |
| 23:59 | krumholt_ | ,(apply concat (partition 2 [1 2 3 4 5 6 7 8 9])) |