2011-11-16
| 00:06 | klauern | $implement-thought-in-brain ? |
| 00:07 | klauern | once that works, I'll quit the internet and computers |
| 00:12 | aperiodic | &(doall (filter good? aperiodic/thoughts)) |
| 00:12 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: good? in this context |
| 00:12 | aperiodic | darn |
| 00:13 | amalloy | aperiodic: you forgot (map implement) too |
| 00:13 | aperiodic | oh, right |
| 00:15 | aperiodic | unless my thoughts turn out to be functions that implement themselves without requiring further input |
| 00:15 | wtfcoder | so i have clojure-contrib pull in via lein deps (i see it in /libs) however ('use clojure.contrib.sql) seems to throw class not found error from lein run, is there any thing else i should be doing? |
| 00:19 | aperiodic | well you want to run (use 'clojure.contrib.sql), not ('use clojure.contrib.sql) |
| 00:20 | aperiodic | you quote the symbol you want to use to avoid it being evaluated |
| 00:20 | amalloy | unless he's doing it in a ns form... |
| 00:25 | aperiodic | i thought you could only use keywords in the ns form |
| 00:25 | amalloy | aperiodic: that *might* be the case, but adding a quote to c.c.sql would only make it worse. my point is we can't suggest a fix without context |
| 00:28 | aperiodic | amalloy: point taken |
| 00:30 | amalloy | fwiw, aperiodic, (ns foo (use clojure.java.io)) works fine - the ns macro just calls ##(doc name) on the grouping thingy |
| 00:30 | lazybot | ⇒ "([x]); Returns the name String of a string, symbol or keyword." |
| 00:32 | wtfcoder | No matching field found: getRoot for class clojure.lang.Var, compiling:(sql.clj:29) |
| 00:32 | wtfcoder | at clojure.lang.Compiler$DefExpr.eval(Compiler.java:388) |
| 00:32 | wtfcoder | |
| 00:32 | aperiodic | amalloy: thanks, good to know |
| 00:32 | wtfcoder | this comes up by just including clojure.contrib.sql via use or require and doing nothing else |
| 00:32 | wtfcoder | how should i start to debug/troubleshoot this.. |
| 00:32 | amalloy | wtfcoder: don't use contrib |
| 00:32 | amalloy | (especially not in a clojure-1.3 program) |
| 00:33 | wtfcoder | using contrib is considering bad practice now? (my study book is halloways first edition ~2yrs old) |
| 00:34 | amalloy | clojurebot: what happened to contrib? |
| 00:34 | clojurebot | Titim gan éirí ort. |
| 00:34 | amalloy | clojurebot: where did contrib go? |
| 00:34 | clojurebot | well... it's a long story: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go |
| 00:41 | devth | what's a good way to handle date/time in clojure? |
| 00:41 | devth | looks like several of the previous libs went missing. |
| 00:42 | Raynes | devth: clj-time |
| 00:43 | aperiodic | what's the canonical location of clj-time? |
| 00:43 | devth | Raynes: i saw that recommended a lot but the github page is gone. know of another place to find its docs? |
| 00:43 | aperiodic | i was using github/getwoven/clj-time, but i just checked, and it's gone now |
| 00:43 | Raynes | Yeah, just noticed that. |
| 00:43 | Raynes | Strange. |
| 00:44 | Raynes | https://github.com/seancorfield/clj-time <-- I think. |
| 00:44 | amalloy | wow, sean took that over too? |
| 00:44 | Raynes | Looks like it. |
| 00:44 | Raynes | Man is a trooper. |
| 00:44 | amalloy | dude is a machine |
| 00:45 | Raynes | But mostly it's sad that everybody abandons their libraries. |
| 00:45 | devth | Raynes: thanks |
| 00:45 | amalloy | Raynes: don't look at me! just tonight i released an updated version of a library i haven't touched in half a year |
| 00:45 | Raynes | amalloy: Remember clj-config? Yeah, I still maintain that. |
| 00:45 | wtfcoder | how can I change leiningen to use the jdk at /opt/bin32-jdk/ rather than the system one (sun 64bit) I dont want to change the global JVM that intellij uses for its IDE app etc.. |
| 00:47 | wtfcoder | looks like just exporting JAVA_CMD will work from reading the lein script? |
| 00:48 | Raynes | Try it. |
| 00:48 | aperiodic | btw, Raynes, I really enjoyed your clojail slides |
| 00:48 | Raynes | aperiodic: :D! |
| 00:48 | aperiodic | learned a lot even without having the video |
| 00:48 | wtfcoder | just going to check if other bootstraps such as intellij launcher use this, but i think that uses JAVA_HOME instead |
| 01:27 | ollim | hmm.. why is this not working: (into (sorted-set) (map vec (sequence-of-lazy-sequences))) ? i get a clojure.lang.PersistentVector$ChunkedSeq cannot be cast to java.lang.Comparable exception |
| 01:30 | amalloy | &(sort [(range 2) (range 3)]) |
| 01:30 | lazybot | java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Comparable |
| 01:41 | aperiodic | ollim: it's because vectors aren't comparable. you could work around that, but i think it would involve evaluating all of each lazy sequence, which is probably undesirable |
| 01:42 | amalloy | aperiodic: incorrect, vectors are comparable |
| 01:43 | amalloy | but seqs are not sortable, and his vectors contained seqs, so the vector couldn't compare its elements to the other vector's elements |
| 01:44 | ollim | amalloy: what i was trying to accomplish is in fact to turn the lazy sequences into a collection of vectors |
| 01:44 | amalloy | you succeeded, but those vectors contained lazy sequences |
| 01:45 | amalloy | &(sort [ [(range 5)] [(range 9)] ] ) |
| 01:45 | lazybot | java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Comparable |
| 01:46 | aperiodic | amalloy: is the motivation for making vectors but not seqs comparable mainly performance? |
| 01:46 | amalloy | *shrug* |
| 01:56 | ollim | i still don't get it. my example data shows ((0 2) (0 1 2)) turned into ([0 2] [0 1 2]). and then i get the PersistentVector$ChunkedSeq cannot be cast to Comparable exception. I think I am just not properly understanding how the "chunked" plays into this. i think i will convert the code to use vectors all-round and forget entirely about lazy seqs for the time being. |
| 02:00 | amalloy | chunked doesn't matter |
| 02:00 | amalloy | (in this context) |
| 02:00 | amalloy | &(into (sorted-set) (map vec (for [n (range 10)] (range n)))) |
| 02:00 | lazybot | ⇒ #{[] [0] [0 1] [0 1 2] [0 1 2 3] [0 1 2 3 4] [0 1 2 3 4 5] [0 1 2 3 4 5 6] [0 1 2 3 4 5 6 7] [0 1 2 3 4 5 6 7 8]} |
| 02:01 | amalloy | so if your input really were a seq of lazy seqs of "atoms", this would work fine |
| 02:02 | amalloy | but it sounds like you're getting something else you don't expect |
| 02:03 | ollim | amalloy: it seems so. thanks for clarifying. |
| 02:04 | amalloy | though a sorted-set of vectors is something you might be surprised by the sort order of anyway |
| 02:05 | amalloy | eg, ##(sort [[0 1 2] [3] [4 5]]) |
| 02:05 | lazybot | ⇒ ([3] [4 5] [0 1 2]) |
| 02:13 | ollim | yes, what i |
| 02:14 | ollim | .. am in need of is a string-like sort but on integer sequences |
| 02:14 | ollim | thanks again |
| 03:42 | Blkt | good morning everyone |
| 03:43 | ejackson | Good morning all |
| 03:58 | dbushenko | morning! |
| 04:53 | wtfcoder | on this snippet http://ideone.com/HVUXk where is the magic happening with param-groups, is this just a redundant local variable? |
| 04:55 | wtfcoder | sorry ignore figured it out, duh |
| 05:17 | frankieboy | ,(+1 1) |
| 05:17 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn> |
| 05:17 | frankieboy | ,(+ 1 1) |
| 05:17 | clojurebot | 2 |
| 06:06 | leo2007 | "Identities are modeled using one of the three reference types: refs, agents, atoms and vars." |
| 06:06 | leo2007 | but he listed 4 types. |
| 06:07 | leo2007 | a type? |
| 06:07 | leo2007 | typo* |
| 06:07 | Borkdude | lol |
| 06:09 | raek | There are exactly three (4) reference types in Clojure. |
| 06:10 | lucian | raek: i'm sure it's just a concurrent modification error :) |
| 06:10 | Borkdude | lol |
| 06:10 | lucian | text must've been generated with Java |
| 06:14 | Bahman | Hi all! |
| 06:20 | leo2007 | OK, I think I read the sentence wrongly. |
| 06:30 | samaaron | morning, morning |
| 06:35 | cemerick | samaaron: Morning — good move on the nick change :-) |
| 06:39 | samaaron | cemerick: thanks :-) |
| 06:40 | samaaron | cemerick: the previous one had some interesting symmetric properties, but this one is far more transparent ;-) |
| 06:40 | cemerick | hah, so it did, I'd never noticed :-P |
| 06:41 | cemerick | when I started using irc again some years ago, I was la_mer for a while. Things got a whole lot simpler when I claimed cemerick. |
| 06:42 | samaaron | cemerick: are you a closet nin fan? |
| 06:42 | cemerick | samaaron: *very* astute! |
| 06:42 | samaaron | cemerick: it's one of the best tracks on that album |
| 06:43 | samaaron | cemerick: apparently it's one of the first tracks he wrote as he moved out of depression after sitting in a studio unproductively for a year |
| 06:45 | arbscht | cemerick: that was you? I never noticed! |
| 06:46 | samaaron | ambrosebs: morning/afternoon to you goodly sir |
| 06:46 | samaaron | that was a fleeting visit... |
| 06:47 | cemerick | samaaron: it's certainly on the better side of that double-album |
| 06:47 | cemerick | that could have easily been a single CD |
| 06:47 | samaaron | cemerick: when that album was released I listened to it for a couple of months non stop |
| 06:48 | cemerick | likewise |
| 06:48 | samaaron | I haven't listened to it in a long while though - I kind of got bored of him being so angsty |
| 06:48 | cemerick | heh |
| 06:48 | cemerick | angsty since 1994 or whatever :-P |
| 06:48 | samaaron | "cheer up already!" |
| 06:49 | cemerick | arbscht: do you actually remember when I was still la_mer? That was years ago… |
| 06:50 | arbscht | cemerick: as far back as 2007 or something |
| 06:50 | cemerick | that's about right |
| 06:50 | cemerick | switched ~mid '08 IIRC |
| 06:51 | cemerick | got tired of people always saying "who are you again?" |
| 06:51 | arbscht | haha |
| 07:10 | clgv | ,(println "cemerick: Who are you again?") |
| 07:10 | clojurebot | cemerick: Who are you again? |
| 07:12 | cemerick | one of the bots should have a way for people to direct messages to people in-channel via privmsg |
| 07:12 | cemerick | That'd be fun for about 10 minutes :-P |
| 07:30 | Bahman | What's the convention for defining constants in Clojure with 'def'? Using '+' like (def +some-const+ 100)? |
| 07:31 | Bahman | defining = naming |
| 07:31 | raek | Bahman: the convention is to not have any extra chars around the name |
| 07:31 | samaaron | Bahman: I think the official stance is just to use lower case as normal |
| 07:31 | raek | since all vars ideally are constants |
| 07:32 | samaaron | However, in Overtone we often use CAPS |
| 07:32 | raek | and things that change at runtime should be wrapped in a ref/atom/agent |
| 07:32 | Bahman | I see the point. So no need to add '*' or '+', right? |
| 07:33 | raek | *earmuffs* actually means something else in Clojure (dynamically rebindable var) |
| 07:33 | raek | i.e. vars meant to be rebound with 'binding' |
| 07:33 | Bahman | Oh! Alright...then I will simply use (def some-const 100). |
| 07:36 | cemerick | Bahman: I've used +const+ before given the scheme convention, but that is pretty unpopular in Clojure-land. |
| 07:37 | cemerick | That tendency has *almost* been beaten out of me. ;-) |
| 07:37 | kephale | a leading ♥? |
| 07:37 | frankieboy | jay, just discovered the pleasure of auto-complete.el and ac-slime |
| 07:38 | frankieboy | one of the few things I really missed from IntelliJ |
| 07:50 | leo2007 | I am using JDK 7 but the javadoc function always open java 6 documentation. |
| 07:50 | leo2007 | Ideas? |
| 07:51 | Arafangion | "javadoc function"? |
| 07:51 | leo2007 | (javadoc Math) for example. |
| 07:51 | leo2007 | I am using java version "1.7.0_147-icedtea" |
| 07:52 | Arafangion | Ah, from clojure.contrib.javadoc. |
| 07:52 | leo2007 | clojure.java.javadoc |
| 07:58 | raek | leo2007: what does (System/getProperty "java.specification.version") return for you? |
| 08:00 | leo2007 | raek: 1.7 |
| 08:07 | dbushenko | guys, do you have autocompletion of java standard library in your emacs? |
| 08:09 | frankieboy | have just got it to work for clojure/lisp, have not experimented yet with java |
| 08:09 | dbushenko | frankieboy, how did you manage that? |
| 08:09 | dbushenko | M-/ ? |
| 08:09 | dbushenko | etags? |
| 08:09 | frankieboy | used auto-complete and ac-slime. |
| 08:10 | kzar | Is there a shorthand for something like this? (get (get {"example" {"silly" 1}} "example") "silly") |
| 08:11 | frankieboy | You can get them using the package manager, using the marmelade repository |
| 08:11 | frankieboy | I think you need to use emacs 24 |
| 08:12 | mange | kzar: (get-in {"example" {"silly" 1}} ["example" "silly"]) |
| 08:12 | kephale | ,(get-in {:a {:b 3}} [:a :b]) |
| 08:12 | clojurebot | 3 |
| 08:12 | Arafangion | Someone needs to make a patch for emacs, such that it eventually becomes emacs 24.7 |
| 08:13 | frankieboy | dbushenko: watch http://www.youtube.com/watch?v=kH0gOE7rj7g to see how it works |
| 08:13 | frankieboy | I really like it |
| 08:13 | kzar | ,(get-in {"example" {"silly" 1}} ["example" "silly"]) |
| 08:13 | clojurebot | 1 |
| 08:13 | kzar | kephale: Cool thanks |
| 08:13 | dbushenko | frankieboy, thanks! |
| 08:16 | frankieboy | dbushenko: read this for something similiar for java: http://www.emacswiki.org/emacs/AutoJavaComplete |
| 08:16 | frankieboy | haven't played with that yet, have to do some real work now |
| 08:17 | dbushenko | thanks! |
| 08:20 | cemerick | leo2007: `javadoc` directs you to JDK 6 documentation by default; it doesn't check your JDK version. |
| 08:27 | leo2007 | cemerick: thanks. |
| 08:36 | frankieboy | Is the video of the Overtone presentation already available? |
| 08:37 | frankieboy | I am doing a presentation next week, and I would like to show sam aaron playing the monome |
| 08:44 | cemerick | frankieboy: not yet. |
| 08:44 | cemerick | When it becomes available, you won't likely miss it. :-) |
| 08:50 | duck1123 | frankieboy: you have caused me to get auto-complete working again, and for that, I thank you |
| 08:52 | leo2007 | duck1123: auto-complete? |
| 08:53 | duck1123 | leo2007: the auto-complete and ac-slime packages for emacs |
| 08:53 | leo2007 | thx |
| 08:57 | frankieboy | I really, really love auto-complete. It was the final missing piece to make emacs for Clojure in the same league as IntelliJ for Java |
| 08:59 | duck1123 | I had it working a while ago back before it was available in elpa. I lost it when I yanked a bunch of stuff out of my init file. This was the final push I needed to get it set back up |
| 09:00 | frankieboy | the package system, starter-kits, auto-complete and ac-slime, in addition to clojure-jack-in make my init.el really small, sane defaults and immediate productivity |
| 09:02 | frankieboy | the only wish is some kind of link into clojuredocs from the popup, so that I can look at documentation and code examples |
| 09:03 | frankieboy | but that is nitpicking |
| 09:14 | fliebel | What do you use for routing? Compojure? Moustache? core.match? |
| 09:16 | bendlas | fliebel: moustache |
| 09:17 | fliebel | I think core.match could be really interesting, has anyone tried that? I've been suing Moustache as well. |
| 09:23 | duck1123 | I wrote my own tool for routing |
| 09:26 | fliebel | duck1123: Can I see it? |
| 09:28 | duck1123 | I've yet to document how the routing system works, but it takes a sequence of predicates that take a matcher map and match it against the request map and pass the request on to the next checker. If all the checkers match, then the action is invoked |
| 09:28 | duck1123 | https://github.com/duck1123/ciste/blob/master/src/ciste/routes.clj |
| 09:29 | duck1123 | And here's an example of some of the routes in action https://github.com/duck1123/jiksnu/blob/master/src/jiksnu/routes.clj |
| 09:30 | duck1123 | I really need to go back and fix up that namespace. I haven't needed to touch it in a while |
| 09:30 | fliebel | duck1123: So you basically have your own "regex" format? |
| 09:32 | duck1123 | fliebel: each "predicate" (still need a better name) can read data from the matcher and use that to determine if the request matches. For HTTP routes, I just use Clout. But I can use this system for any request/response system |
| 09:33 | fliebel | ah |
| 09:34 | fliebel | interlude: How are checkout deps in lein supposed to work? I made a checkouts folder, but dependency resolution doesn;t work. |
| 09:35 | fliebel | If I add them to the project.clj, lein deps errors, if I don't I don't get the deps of the checkout deps. |
| 09:36 | duck1123 | I believe checkouts adds those source folders to the classpath, but you still need to install the artifact for maven's dependency resolution |
| 09:36 | duck1123 | a simple lein install in that project once should do it |
| 10:02 | kzar | Where's the function to take an array map and filter away some of the keys? I'm sure someone showed me in the past but I can't find it |
| 10:04 | bendlas | kzar: are you looking for &(dissoc {:foo "foo" :bar "bar" :moo "moo"} :foo :bar) |
| 10:04 | cemerick | kzar: select-keys |
| 10:04 | cemerick | dissoc will do, too; depends on whether you know which ones to keep vs. which ones to drop |
| 10:05 | bendlas | xctly |
| 10:05 | kzar | cemerick bendlas: cheers |
| 10:05 | kzar | did the trick :) |
| 10:05 | cemerick | dammit! No pint. |
| 10:27 | ninjudd | cemerick: of bacon? |
| 10:28 | cemerick | ninjudd: frightening :-) |
| 10:40 | Bahman | How can I make an executable jar out of lein project? |
| 10:41 | Fossi | ,(macroexpand (let [a 1] (let [b 2] 3) |
| 10:41 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 10:41 | Fossi | ,(macroexpand (let [a 1] (let [b 2] 3))) |
| 10:41 | clojurebot | 3 |
| 10:41 | Fossi | ,(macroexpand '(let [a 1] (let [b 2] 3))) |
| 10:41 | clojurebot | (let* [a 1] (let [b 2] 3)) |
| 10:41 | Fossi | why doesn't the second let not get expanded? |
| 10:42 | bendlas | because macroexpand and macroexpand-all always work on the outermost form |
| 10:42 | bendlas | to do full expansion, you need to walk the source tree |
| 10:43 | bendlas | i think there might be a helper for that somewhere in contrib |
| 10:44 | fliebel | clojure.walk/macroexpand-all |
| 10:44 | bendlas | it's clojure.walk/macroexpand-all |
| 10:44 | Borkdude | What is the best thing to use in emacs for java support? |
| 10:44 | bendlas | yep |
| 10:44 | Borkdude | I mean compiling etc |
| 10:44 | Fossi | thanks i'll try |
| 10:45 | bendlas | Borkdude: (shell-command "eclipse") IMO |
| 10:45 | klauern | Bahman: I haven't done it before, but I would think that specifying a :main in your project.clj and then doing `lein uberjar` would be enough to get it working |
| 10:46 | Bahman | klauern: Thanks. |
| 10:46 | Borkdude | \ |
| 10:46 | fliebel | Does core.match provide access to all bindings? Like a macro has a hidden &env variable. |
| 10:47 | klauern | See `lein help sample` for an exploded project.clj with mention of how the :main should look |
| 10:47 | klauern | or easier: https://github.com/technomancy/leiningen/blob/stable/sample.project.clj |
| 10:47 | Fossi | is clojure.walk new in 1.3? |
| 10:47 | klauern | https://github.com/technomancy/leiningen/blob/stable/sample.project.clj#L95-L100 |
| 10:47 | Bahman | klauern: Excellent...thanks again. |
| 10:48 | Fossi | ah, just too dumb to type |
| 10:48 | klauern | love that GitHub line highlighting thing |
| 10:50 | dfilimon | hi everyone! i'm trying to develop my first larger clojure program and i need to extend JPanel and override its paintComponent method in the process |
| 10:50 | dfilimon | i've made new class with gen-class and overrode the paintComponent method |
| 10:50 | dfilimon | but i also want to first call the superclass' implementation before i do my own drawing |
| 10:51 | dfilimon | will simply calling (.paintComponent this) work? |
| 10:54 | churib | ,(meta ^test 'x) |
| 10:54 | clojurebot | nil |
| 10:55 | churib | ,(meta (with-meta 'x {:key :myval})) |
| 10:55 | clojurebot | {:key :myval} |
| 10:55 | churib | why does the former not work? |
| 10:55 | Bahman | What are the parameters to '-main'? only [args]? |
| 10:56 | Chousuke_ | churib: it puts the metadata on the (quote x) list, not the symbol x |
| 10:57 | Chousuke_ | ,(meta '^meta x) |
| 10:57 | clojurebot | {:tag meta} |
| 10:57 | churib | Chousuke_: aah, thanks! |
| 10:57 | Chousuke_ | ^ is a read-time thing which is why it works like that. |
| 10:58 | churib | yes, of course. Didn't thought about that... |
| 10:58 | Chousuke | it's not obvious :) |
| 10:58 | TimMc | dfilimon: Do you actually need to call the super's paintComponent? |
| 10:59 | dfilimon | i don't really think i need to, but that's how it seems to be done in every java tutorial |
| 10:59 | dfilimon | anyway, i just tried something that seemed to work |
| 10:59 | dfilimon | i exposed the paintComponent method in the superclass under a different name |
| 10:59 | dfilimon | and then called that |
| 11:00 | dfilimon | but that really feels like a nasty hack |
| 11:01 | TimMc | dfilimon: proxy-super |
| 11:01 | dfilimon | but i'm not using proxy at all, i'm using gen-class |
| 11:01 | TimMc | appears to be a way to call a superclass' method from inside a proxy. |
| 11:01 | TimMc | ah |
| 11:02 | fliebel | Does let expose a hidden variable with all the bindings? |
| 11:03 | TimMc | dfilimon: Here's how I made a Swing app -- I just proxied a JComponent as a canvas: https://github.com/timmc/CS4300-hw6/blob/master/src/hw6/core.clj#L25 |
| 11:04 | dfilimon | thanks for that! |
| 11:04 | cemerick | fliebel: "hidden variable"? |
| 11:05 | fliebel | cemerick: Yea, like a macro exposes &env |
| 11:05 | cemerick | ah; nope |
| 11:05 | dfilimon | TimMc: will that work when resizing? |
| 11:06 | fliebel | ... or any other way to get to all the binding of a let |
| 11:06 | TimMc | dfilimon: I don't recall. |
| 11:08 | klauern | Bahman: If it follows java, it's probably analagous to "public void main (String[] args), " |
| 11:10 | TimMc | dfilimon: I think that app was not resizable. However, in a different app, I see that I added a (proxy'd) ComponentListener: https://github.com/timmc/CS4300-HW3/blob/master/src/timmcHW3/core.clj#L525 |
| 11:12 | Kototama | hi, what's the best solution to have a bidirectional communication between two clojure processes? |
| 11:13 | dfilimon | TimMc: right now, i'm unsure whether to go for gen-classes of my own or try using proxies like you did |
| 11:13 | lucian | Kototama: possibly sockets |
| 11:16 | scgilardi | fliebel: here's a let variant that exposes bindings (has had approximately zero testing) https://gist.github.com/1370491 |
| 11:18 | Kototama | i guess java pipes are more the solution but i was expecting something from clojure here |
| 11:18 | fliebel | scgilardi: yay. Only I don;t feel like patching clojure.match to use that ;) |
| 11:19 | fliebel | I'll just opt for the moustache approach. |
| 11:20 | clgv | fliebel: scgilardi's macro has the disadvantag to show you every binding from &env and not just the ones from the let. |
| 11:22 | clgv | or was that the intention? |
| 11:22 | fliebel | clgv: Hm, I guess it't better to use argv directly. |
| 11:22 | clgv | you might use destructure from clojure.core |
| 11:25 | fliebel | Basically what I want to do is (match [1 2 3] [a 2 c] (f {:a 1 :c 3})) as a macro, so that you only need to supply the pattern and function. |
| 11:27 | Kototama | or maybe that: http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/ |
| 11:28 | cemerick | samaaron: feh, I should have thought about doing the automation in overtone from the start :-P |
| 11:29 | tsdh | technomancy: Hi. I'm just trying to convert my documentation generator into a standalone leiningen project, but I have a bootstrap issue. |
| 11:29 | samaaron | cemerick: it would be totally possible, but might be a bit of overkill for such a simple task (firing up a JVM and a SC ServeR) |
| 11:30 | samaaron | cemerick: this might work for you: http://sox.sourceforge.net/ |
| 11:30 | tsdh | technomancy: The plugin project's deps are clojure and hiccup, but since its sources reside in src/leiningen/gendoc.clj, invoking "lein <whatever>" wants to eval that and errors because hiccup is not there... |
| 11:30 | cemerick | I don't usually write scripts, but when I do, I like to wait for a JVM first. |
| 11:32 | cemerick | samaaron: certainly seems right; don't know how I didn't find that before. :-/ Might do it in overtone anyway, just as an excuse to see the relevant parts of the API. |
| 11:32 | cemerick | thanks in any case :-) |
| 11:33 | samaaron | cemerick: cool - it might also be the case that we need to brush up the wav output parts of Overtone too. It's been a while since I recorded some output. |
| 11:33 | samaaron | cemerick: the documentation is pretty sketchy in this area, so it would be useful use this experiment to beef things up. |
| 11:34 | samaaron | cemerick: I can totally help you work out what's necessary to get it to work if you like. |
| 11:34 | michael_campbell | Going to be one of those days... can't even spell my name right. |
| 11:34 | cemerick | samaaron: thanks; I've got you on speed dial in case I hit a wall ;-) |
| 11:35 | samaaron | cemerick: the "Overtone bat phone"! |
| 11:35 | cemerick | right on |
| 11:37 | cemerick | samaaron: is there autodoc somewhere? |
| 11:37 | samaaron | what's autodoc? |
| 11:37 | cemerick | samaaron: it's what produces e.g. clojure.github.com/clojure/ |
| 11:37 | cemerick | http://clojure.github.com/clojure/ |
| 11:38 | samaaron | ah, nice |
| 11:38 | samaaron | no, we don't have that |
| 11:38 | samaaron | does it use the namespaces, fn names and docstrings to generate the docs? |
| 11:38 | cemerick | right |
| 11:38 | samaaron | well we're jam full of docstrings |
| 11:40 | cemerick | samaaron: If you're interested, I'll see about adding autodoc to the project.clj; you could add the results to the pages so it appears as a subdir on http://overtone.github.com/ |
| 11:40 | cemerick | s/pages/pages branch |
| 11:40 | samaaron | sounds perfect |
| 11:41 | samaaron | btw, do you know if BG lurks around in irc? |
| 11:41 | cemerick | very occasionally |
| 11:41 | cemerick | G0SUB is his handle. |
| 11:41 | samaaron | nice |
| 11:41 | samaaron | he had some advice regarding licensing |
| 11:42 | samaaron | Overtone is currently MIT and he was suggesting Eclipse or GPL |
| 11:42 | cemerick | Certainly gives you more latitude for e.g. selling a supported version |
| 11:43 | fliebel | $findfn 1 '(1) |
| 11:43 | lazybot | [clojure.core/xml-seq clojure.core/vector clojure.core/pvalues clojure.core/list] |
| 11:43 | samaaron | yup, that was one of the arguments |
| 11:44 | cemerick | I think you have a wide array of commercialization opportunities, really. |
| 11:53 | samaaron | cemerick: it would be interesting to explore them |
| 12:00 | zerokarmaleft | mmm, the moog minimoog overtone select badass series, just 3k quid |
| 12:01 | samaaron | zerokarmaleft: or you could build your own minimoog within Overtone for free ;-) |
| 12:02 | zerokarmaleft | true, i think the attraction to moogs is largely to decorate studio apartments |
| 12:03 | cemerick | samaaron: see, you shoulda thrown in an ipad with touchosc preinstalled for £4k ;-) |
| 12:03 | samaaron | cemerick: are you the first customer? ;-) |
| 12:04 | cemerick | I'm just the ideas guy :-P |
| 12:05 | cemerick | I didn't even know what a moog was before ducking it. |
| 12:05 | samaaron | it would be cool to have a dedicated touch display that had an ethernet port and talked OSC |
| 12:05 | samaaron | I imagine trusting wifi at gigs isn't that sensible... |
| 12:05 | cemerick | why would it need to be wired? |
| 12:05 | cemerick | dedicated secured wireless? |
| 12:06 | cemerick | hard to jam on a thing trailing an ethernet cable, perhaps *shrug* |
| 12:06 | samaaron | cemerick: exactly and just fewer moving parts to go wrong |
| 12:06 | gtrak | bluetooth? |
| 12:07 | gtrak | samaaron, what order of magnitude of latency are you dealing with right now? |
| 12:07 | samaaron | gtrak: from where to where? |
| 12:07 | cemerick | I think an android-based overtone/touchosc "appliance" sold with "premier" auto-updating, smooth documentation and a crazy asset library tucked in would be a killer offering that would see a lot of interest. |
| 12:08 | gtrak | with the matrix-button-box to sound |
| 12:08 | gtrak | through overtone, through supercollider |
| 12:08 | samaaron | gtrak: ah, super low - 10s of ms |
| 12:09 | gtrak | well, the jump from say 5 to 20ms is meaningful, 20 to 60 is just as meaningful i think |
| 12:10 | samaaron | gtrak: I measured it a while ago and it was plenty fast. Sadly I forget the numbers though. However, when I play the monome I can't perceive any latency |
| 12:12 | nickmbailey | :q |
| 12:12 | nickmbailey | doh |
| 12:18 | kzar | I use org.apache.commons.codec.binary for Hex and Base64 but now I need Base16 and I can't see it there. Anyone know of a Base16 library? |
| 12:20 | lucian | kzar: it should be easy to implement with java's Integer |
| 12:28 | hiredman_ | ~ping |
| 12:28 | clojurebot | PONG! |
| 12:42 | Borkdude | Did I miss anything on Java in emacs while I was disconnected? |
| 12:43 | nDuff | Who's baby is the Clojure/conj survey? It's only allowing one selection each for favorite/good/excellent/poor talks |
| 12:44 | rabbler | :nDuff, I had the same issue. |
| 12:44 | cemerick | nDuff: I've emailed them, and thickey tweeted them, but… |
| 12:44 | samaaron | I emailed them too... |
| 12:44 | samaaron | :-) |
| 12:44 | Raynes | Yeah, I was just about to whine. |
| 12:45 | rabbler | meaning that I had the same 'concern'. But I already submitted. |
| 12:45 | Raynes | I mean, it isn't fair if I can only select my own talk as my favorite. ;) |
| 12:45 | samaaron | Raynes: you can even select your talk as your favourite AND as excellent! |
| 12:46 | Raynes | Heh |
| 12:46 | cemerick | I wonder if they'll send us our ratings |
| 12:46 | Raynes | cemerick: I hope not. |
| 12:46 | cemerick | Raynes: oh, please :-P |
| 12:46 | cemerick | you killed it |
| 12:46 | rabbler | raynes: your presentation was awesome. |
| 12:47 | samaaron | Raynes: it's super hard to have any idea how your talk is being perceived when you're doing the speaking |
| 12:47 | Raynes | Oh I know, but I'd hate for others to feel lesser in the shadow of my greatness. |
| 12:47 | cemerick | nice |
| 12:47 | samaaron | hail almighty greatness! |
| 12:47 | Borkdude | haha |
| 12:48 | rabbler | samaaron: That is why rotten fruit/veg should be brought to cons. Then you know if you are tanking. |
| 12:48 | samaaron | "Turn your phone off - that's rude!" |
| 12:48 | cemerick | samaaron: I know, it's tough to tell how things are going over those standing ovations ;-) |
| 12:48 | Raynes | I *did* feel pretty fantastic after the talk. For example, I seem to recall telling chouser "good luck following that" while putting my laptop away. |
| 12:48 | Borkdude | I saw Rich programmed on a national exit poll in linux magazine of 2010, so probably I know who the auther of this survey code is? ;-) |
| 12:48 | samaaron | Raynes: haha, you smug mofo |
| 12:49 | cemerick | poor chouser got jammed up :-D |
| 12:49 | Raynes | I think I had two favorite talks. samaaron was one of them. |
| 12:50 | samaaron | Raynes: you're too kind |
| 12:50 | cemerick | samaaron's is going to be at least one SD above anyone else |
| 12:50 | Raynes | The other was Spiewak's functional data structure talk. |
| 12:50 | samaaron | yeah, sadly I missed Daniel's talk - I was taking it easy before my own |
| 12:50 | samaaron | I'm looking forward to the video though |
| 12:51 | Raynes | I really enjoyed Stuart Sierra's talk, but they can't all be my favorites. |
| 12:51 | michael_campbell | Spiewak's was as much performance art as a talk. I loved it. |
| 12:52 | dfilimon | guys - question: i want to represent some sort of regular polygon in my code. i would be tempted to make a record or structure it somehow. should i rather leave it a map? |
| 12:53 | devn | Raynes: technomancy ninjudd -- good to hear you guys are going to devote efforts to the same build tool |
| 12:53 | Raynes | Build tool powers -- UNITE! |
| 12:54 | devn | Alphazord megazord power, NOW! |
| 12:54 | samaaron | dfilimon: I tend to start out with a map first - and if it becomes a perf bottle-neck I'll move to a record |
| 12:54 | dfilimon | can i restructure records like maps? |
| 12:54 | dfilimon | *destructure |
| 12:54 | devn | samaaron: Unfortunately I didn't get to see your talk -- had to leave the last day right after Craig's talk. |
| 12:54 | devn | I really liked Craig's talk. |
| 12:54 | samaaron | dfilimon: it also depends how extensible you see the structure - maps are only fast if you know all the keys at compile time |
| 12:55 | dfilimon | samaaron: i will not be adding more entries to the maps |
| 12:55 | Raynes | devn: Unfortunately, samaaron won the Dancing On Stage During A Presentation badge instead of me. |
| 12:56 | technomancy | devn: yeah, I'm looking forward to rolling on 2.0 |
| 12:56 | samaaron | dfilimon: I'd still start with a map, and if after perf measurement you see an improvement with records, then use them - the transition is simple |
| 12:57 | dfilimon | also, i'm feeling somewhat uncomfortable not having types for everything… is this normal for a beginner? |
| 12:58 | Raynes | Depending on your background, most likely. |
| 12:58 | Borkdude | dfilimon: everything has a type, but they're not always relevant |
| 12:58 | samaaron | dfilimon: everything does have a type |
| 12:59 | technomancy | dakrone: how hard would it be to support a bring-your-own-thread-pool model? |
| 12:59 | technomancy | for clj-http? |
| 12:59 | dfilimon | yes they do, but if i put stuff in maps, most things are just maps, they don't have a type per-se |
| 12:59 | cemerick | samaaron: re: "maps are only fast if you know all the keys at compile time": I think you meant records |
| 12:59 | samaaron | cemerick: yep, I totally meant records :-) |
| 13:00 | devn | technomancy: I'm going to continue to bug you on the status of clojars -- is it ready for local dev work yet? |
| 13:00 | cemerick | dfilimon: you can attach metadata to maps to indicate "type" |
| 13:00 | cemerick | used most often with multimethods, in my experience |
| 13:00 | samaaron | dfilimon: everything you throw in a map does have types, they're just not statically declared by default |
| 13:00 | devn | technomancy: I'd like to do a bit of design and help make clojars better |
| 13:00 | cemerick | ,(type ^{:type :foobar} {:a 5 :b 6}) |
| 13:00 | clojurebot | :foobar |
| 13:00 | Raynes | technomancy, devn: Whatever you do, if you do *anything* for clojars, make the usernames not be case sensitive. |
| 13:01 | danlarkin | case insensitivity is bad |
| 13:01 | devn | :) I want to work on it, but it sounds like a local dev clojars (per technomancy) is a real pain to set up. There was some work by hiredman IIRC that would make that easier. |
| 13:01 | dfilimon | cemerick: did not know about that, thanks! |
| 13:01 | Borkdude | devn: and allow me to remove a jar file I accidentally pushed |
| 13:01 | technomancy | danlarkin: case insensitivity on lookup is, but case insensitivity on validation rules is not necessarily |
| 13:01 | cemerick | dfilimon: read the docs for type so you know what it's doing ;-) |
| 13:02 | technomancy | devn: I mostly need to knock out this lein-as-a-lib question since the merge conflict potential is blocking others. then I'll be ready to roll on clojars |
| 13:02 | Raynes | danlarkin: Case sensitivity is terrible when you can't remember if you signed up as Raynes raynes rayne Rayne DiscipleRayne disciplerayne et al. |
| 13:02 | cemerick | I have one thought for clojars if the suggestion box is open. :-P |
| 13:02 | dfilimon | also, unrelated question: why is it that the default repl doesn't import namespaces like clojure.repl or clojure.java.javadoc by default? |
| 13:03 | hiredman | win 20 |
| 13:03 | dfilimon | or rather, why aren't functions like doc always available without having to import them? |
| 13:03 | samaaron | dfilimon: it doesn't make sense to pollute all namespaces with repl/javadoc fns by default |
| 13:04 | dfilimon | sure, not all the time, just when playing around in the repl |
| 13:04 | dakrone | technomancy: it's actually already built-in, just not documented |
| 13:04 | technomancy | dakrone: cool |
| 13:04 | dfilimon | always having a help function seems to me pretty useful |
| 13:04 | technomancy | dakrone: is it easy to just use the built-in agent thread pool |
| 13:04 | technomancy | ? |
| 13:04 | devn | maybe clojars should just get a rewrite? :X |
| 13:05 | dakrone | technomancy: call core/make-reusable-conn-manager and bind the result to core/*connection-manager* whenever you make calls |
| 13:05 | technomancy | devn: it works amazingly considering it hasn't been updated in about two years |
| 13:05 | devn | technomancy: *nod* ato did a great job without much work. |
| 13:06 | technomancy | dakrone: rock. I want to make sure ability to share pools is considered a basic feature for every library that uses them. |
| 13:06 | technomancy | http://blog.ometer.com/2011/11/13/task-dispatch-and-nonblocking-io-in-scala/ <- actually a pretty interesting read on the subject |
| 13:06 | dakrone | technomancy: it's not documented because I wasn't sure of the API, lemme know how it works for you |
| 13:06 | technomancy | apparently they really wish they had Clojure's send/send-off pools built-in |
| 13:07 | technomancy | dakrone: it's for zkim actually. =) |
| 13:07 | devn | (maybe) |
| 13:07 | technomancy | though I don't know if he's having trouble with clj-http specifically, I just know in general the problem needs attention |
| 13:10 | algernon | hrm. I have a bit of a problem, possibly not clojure related, but perhaps someone here can shed a light on where I should look.. I'm using Storm, and from one of the bolts, I'm poking redis (via the accession lib). At work, everything's fine, and all that. On my home box, however, a new connection gets opened for each message passing through the bolt. I'm at a loss why this would happen. :| |
| 13:11 | dakrone | devn: eh? what's this about the clojuredocs' API? |
| 13:11 | dfilimon | cemerick: (= ^{:type 'cookie} {:x 1} {:x 1}) this seems to be true |
| 13:11 | dfilimon | ,(= ^{:type 'cookie} {:x 1} {:x 1}) |
| 13:11 | clojurebot | true |
| 13:12 | dfilimon | why is this? |
| 13:12 | cemerick | dfilimon: yes, metadata does not impact equality |
| 13:12 | cemerick | concrete type doesn't impact equality either |
| 13:12 | cemerick | (= (array-map :a 5) (hash-map :a 5)) |
| 13:12 | cemerick | bah |
| 13:12 | cemerick | ,(= (array-map :a 5) (hash-map :a 5)) |
| 13:12 | clojurebot | true |
| 13:12 | Raynes | &(identical? ^{:type 'cookie} {:x 1} {:x 1}) |
| 13:12 | lazybot | ⇒ false |
| 13:12 | devn | dakrone: Since we're talking about adding a "shot of easy" to Clojure, I really like the idea of bringing ClojureDocs into the fold as a sensible default development dependency |
| 13:13 | devn | dakrone: Or for the time being have a "sensible newbie project.clj" which includes the clojuredocs-api dependency |
| 13:13 | ibdknox | clojuredocs-api |
| 13:13 | ibdknox | ? |
| 13:13 | dfilimon | hmm, okay then; i'm not sure if i agree with the principle but anyway |
| 13:14 | devn | ibdknox: there's a clojuredocs api querying thingamajig out there somewhere, im pretty sure dakrone wrote it |
| 13:14 | ibdknox | devn: ah, as in for the repl? |
| 13:14 | devn | yes |
| 13:14 | devn | It's handy. |
| 13:14 | ibdknox | cool :) |
| 13:14 | devn | It's great for newcomers, and dumb people like me. :) |
| 13:15 | ibdknox | me too! |
| 13:15 | cemerick | dfilimon: Clojure just pushes further in that direction than, e.g. Java does: |
| 13:15 | cemerick | ,(= (java.util.ArrayList.) (java.util.LinkedList.)) |
| 13:15 | clojurebot | true |
| 13:16 | dfilimon | about the clojuredocs api, how do i add it as a dev-dependency? is it an actual package? |
| 13:17 | dakrone | dfilimon: https://github.com/dakrone/cd-client |
| 13:17 | dakrone | it can be used from lein |
| 13:17 | ibdknox | yeah that's not a very useful name :p |
| 13:17 | devn | clojuredocs-client or something would be easier to find with google juice |
| 13:18 | dakrone | devn: yea, it's unfortunately named |
| 13:18 | devn | dakrone: it shouldn't be a big deal to rename right? |
| 13:18 | dfilimon | dakrone: thanks! |
| 13:19 | dakrone | devn: no, good idea, I will change it |
| 13:19 | devn | i guess where I'm headed by bringing up cd-client and so on is that it'd be cool if you could say "lein suite", "lein juice" or something -- which would fill your project.clj with some nice sensible tools for local development. |
| 13:20 | Raynes | devn: ibdknox and I are working on a new 'lein new' that uses templates and a little code gluing things together. You'll be able to distribute any kind of templates you want after we're done. |
| 13:20 | devn | One reason I love noir is that it made a lot of the annoying dependency wrangling I used to have to do with ring a lot simpler |
| 13:21 | dakrone | I really just need to rewrite it, it's very old |
| 13:21 | devn | Raynes: that's awesome. Exactly what I want. |
| 13:21 | devn | dakrone: I'll help. |
| 13:21 | devn | dakrone: I have time today after work if you want to remote pair with zkim's pair.io |
| 13:21 | dakrone | devn: timezone? |
| 13:21 | devn | CST |
| 13:21 | devn | IIRC you're EST? |
| 13:22 | Raynes | Aw, I want pair.io. :< |
| 13:23 | dfilimon | does anyone use the user.clj config file in ~/.clojure to add functionality to the repl? |
| 13:23 | dakrone | devn: MST |
| 13:23 | dfilimon | and if so, why doesn't it get loaded when i run clojure-jack-in from emacs? |
| 13:24 | dakrone | devn: also renamed cd-client to clojuredocs-client and put a redirection notice at cd-client |
| 13:24 | devn | dakrone: so what time is it for you right now? It's 12:18PM here. |
| 13:24 | dakrone | 1 hour earlier |
| 13:25 | dakrone | devn: added you to the repo, tonight should work for me for a bit, ping me later? |
| 13:26 | devn | dakrone: sounds good. :) |
| 13:26 | technomancy | dfilimon: ~/.clojure is not on the classpath. you could add it with :dev-resources-path "/home/you/.clojure" in project.clj if you like |
| 13:27 | dfilimon | technomancy: thanks! |
| 13:28 | cemerick | the conj survey is fixed |
| 13:28 | ibdknox | there's a conj survey? |
| 13:28 | cemerick | ibdknox: should be in your inbox? |
| 13:29 | ibdknox | never got it.. but there was also some weirdness with my ticket |
| 13:29 | devn | technomancy: so, with marmalade on 24.0.91.1 -- Which packages do I need to get a nice working REPL with paredit |
| 13:29 | ibdknox | so it could've been related to that |
| 13:29 | devn | technomancy: does durendal still work? |
| 13:30 | michael_campbell | ibdknox: http://www.surveymonkey.com/s/G9H3RF5 |
| 13:30 | ibdknox | michael_campbell: thanks |
| 13:33 | technomancy | devn: hmm... probably? I mostly used it for jack-in. |
| 13:53 | ibdknox | dakrone: when you guys redo the client you should use colorize :D |
| 13:53 | cemerick | ibdknox: colorize? |
| 13:54 | ibdknox | cemerick: ansi-color wrapping for console output :) |
| 13:54 | ibdknox | (blue "hey " (red "what's up?")) and so on |
| 13:54 | ibdknox | or (color :blue "hey") |
| 13:54 | ibdknox | cemerick: https://github.com/ibdknox/colorize |
| 13:54 | ibdknox | I made that and watchtower at the conj |
| 13:55 | ibdknox | https://github.com/ibdknox/watchtower |
| 13:56 | tsdh | Is there some kind of "namespace reset"? Say, you've :use-ed some namespace in your repl, then get a warning because of name clash, and now you want to require it only :as foo. |
| 13:56 | devn | ibdknox: not sure if this at all interesting to you given it is in ruby, but my coworker Nick whipped this up, https://github.com/randland/colorful |
| 13:57 | devn | it adds backgrounds, blinks, resets, etc. |
| 13:57 | ibdknox | I have reset, I didn't really have a use for blink and such, though I should probably add it |
| 13:57 | cemerick | ibdknox: what is this "console" of which you speak? |
| 13:58 | ibdknox | devn: the cool thing about this is 256 color support :) I'll have to look into that |
| 13:58 | ibdknox | cemerick: terminal :p |
| 13:58 | raek_ | tsdh: you can use remove-ns and then start over with that ns |
| 13:58 | cemerick | And here I did that manually https://github.com/clojure/tools.nrepl/blob/master/src/main/clojure/clojure/tools/nrepl/cmdline.clj |
| 13:58 | cemerick | ibdknox: mine is a dry irc wit ;-) |
| 13:58 | cemerick | or, none at all, depending on who you ask |
| 13:58 | ibdknox | haha |
| 13:59 | tsdh | raek: Yes, that did the trick. Thanks a ton. |
| 13:59 | ibdknox | cemerick: (blue ..) is just so much prettier ;) |
| 13:59 | raek | np :) |
| 14:00 | cemerick | ibdknox: I agree wholeheartedly. |
| 14:00 | cemerick | I was dumbfounded when chouser pointed me at those ANSI color codes, etc. |
| 14:00 | ibdknox | lol |
| 14:00 | cemerick | hardcore WTF |
| 14:00 | ibdknox | yeah it's pretty ridiculous |
| 14:00 | cemerick | can I get some CSS up in here? |
| 14:00 | ibdknox | yay for abstraction! |
| 14:00 | raek | tsdh: another more fine-grained approach is to use ns-unmap to remove mappings of the conflicting names and then use refer-clojure to bring in the original mappings |
| 14:01 | tsdh | raek: That could have spared me hundreds of skrew-up-ns/,sayonaraRET/M-xclojure-jack-inRET-cycles. :-) |
| 14:01 | ibdknox | watchtower is kind of neat: composable file/dir watchers |
| 14:01 | ibdknox | I'm on a composability kick lately |
| 14:02 | tsdh | raek: Hm, since compiling anew is so fast, I prefer the simple brute-force method. :-) |
| 14:03 | raek | yeah, it's easier to get the namespace into a known state using remove-ns |
| 14:04 | raek | but ns-unmap can be useful e.g. when you want to re-evaluate a defonce or a defmulti |
| 14:04 | raek | (so I though it could be a good idea to mention it too) |
| 14:16 | amalloy | cemerick: i never got a survey either |
| 14:17 | amalloy | oh, that's a lie. wrong inbox |
| 14:17 | tsdh | raek: Sure, I'll try to remember it, but I'm low on RAM. |
| 14:20 | technomancy | I wish ns-unmap were exposed better by slime |
| 14:22 | jcromartie | there's something weird about ring/ring-jetty-adapter |
| 14:22 | jcromartie | on clojars |
| 14:22 | jcromartie | lein deps fails to get it with some zip file error |
| 14:22 | amalloy | cemerick: i note that the age groups are "under 17" and "18-24", so Raynes has no correct box to check? |
| 14:22 | jcromartie | it says the POM is invalid and then throws a ZipException |
| 14:22 | Raynes | I just checked |
| 14:23 | Raynes | 18-24 |
| 14:23 | Raynes | I'm close enough to 18 to not particularly care. |
| 14:23 | jcromartie | I'm using [ring/ring-jetty-adapter "1.0.0-RC1"] |
| 14:23 | amalloy | jcromartie: rm -rf ~/.m2? fixes all kinds of problems :P |
| 14:23 | jcromartie | hm :) OK |
| 14:23 | ibdknox | it really does |
| 14:23 | ibdknox | it's magical |
| 14:24 | technomancy | except the problem of "it's taking forever" |
| 14:24 | ibdknox | a magical nuclear bomb for all your maven woes |
| 14:24 | jcromartie | bingo |
| 14:24 | jcromartie | thanks guys |
| 14:24 | jcromartie | I just rm'ed ~/.m2/repository/ring |
| 14:25 | amalloy | technomancy: that's an opportunity, not a problem. downloading the whole internet is just so dang exciting |
| 14:32 | tsdh | Does anyone use core.logic here? I wanted to play around with it, but as soon as I do (defrel man x), I get Unable to resolve symbol: to-stream in this context... |
| 14:32 | jcromartie | LauJensen: is there a ClojureQL release I can use with 1.3 |
| 14:32 | tsdh | That's with 0.6.5 and clojure-1.3.0. |
| 14:35 | ibdknox | jcromartie: out of curiosity, is there something specific missing from Korma that makes it not work for you? |
| 14:37 | jcromartie | ibdknox: In the little bit of time I spent with Korma, I found problems with joins and complex relationships in our DB schema that basically "broke" everything nice about Korma. |
| 14:37 | jcromartie | ibdknox: and is there a way around the "n + 1 selects" problem? |
| 14:37 | ibdknox | jcromartie: yep :) |
| 14:37 | ibdknox | jcromartie: if you use (join) instead of (with) |
| 14:37 | jcromartie | basically, I find that being able to compose ClojureQL relations and sling them around is a lot more useful for our nasty NASTY db |
| 14:38 | jcromartie | but (join) doesn't work with has-one has-many, does it? |
| 14:38 | ibdknox | jcromartie: sure it does |
| 14:38 | jcromartie | oh ok |
| 14:38 | ibdknox | jcromartie: it's literally the equivalent of writing a sql join clause |
| 14:38 | jcromartie | I see |
| 14:38 | ibdknox | jcromartie: so you can build out whatever sql is necessary |
| 14:38 | jcromartie | is (join) documented? |
| 14:39 | ibdknox | jcromartie: that being said, if you have a couple of simple examples, I'd love for you to shoot an email to the korma list. :) I want to make sure it can handle as much as possible |
| 14:39 | jcromartie | another thing that bugged me in Korma: it doesn't normalize (all lowercase keywords) the columns like ClojureQL does |
| 14:39 | jcromartie | it makes it hard when your DB has strange capitalization going on |
| 14:39 | jcromartie | like ours |
| 14:40 | ibdknox | jcromartie: ah, part of that is due to the use of quoted identifiers, which seems to be the only safe solution to the problem |
| 14:40 | amalloy | jcromartie: blame your db for that one? |
| 14:40 | jcromartie | yeah |
| 14:40 | amalloy | like, how should it "normalize" a column name like "the user's name goes here" |
| 14:40 | jcromartie | we have a whole table where the table and all of its columns use the mis-spelling "tranaction" |
| 14:41 | ibdknox | jcromartie: I think I can potentially provide a couple things to get let you shoot yourself in the foot (basically don't use quotes at all) |
| 14:41 | jcromartie | amalloy: I mean :fooBarBaz should become :foobarbaz |
| 14:41 | jcromartie | k |
| 14:41 | jcromartie | yeah |
| 14:41 | jcromartie | :) |
| 14:44 | ibdknox | jcromartie: in any case, I'd love to hear your grievances! It's the only way I can make korma better :) |
| 14:50 | jcromartie | ibdknox: sure :) |
| 14:50 | jcromartie | ibdknox: I do like what I see with Korma |
| 14:50 | jcromartie | I hate waffling back and forth |
| 14:50 | ibdknox | I know and I want to make sure you don't have to :) |
| 14:50 | jcromartie | one thing I really like about ClojureQL is the way the returned objects just represent the query |
| 14:51 | jcromartie | and deref gets the data |
| 14:51 | jcromartie | while in Korma the default is to execute |
| 14:51 | gfrederi1ks | $findfn [4 5] [7] [4 5 7] |
| 14:51 | lazybot | [clojure.set/union clojure.core/lazy-cat clojure.core/concat clojure.core/into] |
| 14:51 | jcromartie | and sql-only or dry-run is the extra work |
| 14:52 | ibdknox | (select* ..) is the equivalent for that |
| 14:52 | ibdknox | if you want to carry around the query |
| 14:52 | ibdknox | seems the same as (-> (table "blah"... to me |
| 14:53 | ibdknox | you can also ask for the sql in that case using as-sql |
| 14:54 | ibdknox | (def my-query (-> (select user) (where {:id [> 3]}))) |
| 14:54 | ibdknox | (as-sql my-query) |
| 14:54 | ibdknox | or (exec my-query) |
| 14:55 | jcromartie | yeah |
| 14:56 | jcromartie | I wish select and select* were swapped :) |
| 14:56 | ibdknox | haha I see |
| 14:56 | jcromartie | to make deferred execution the default |
| 14:56 | manutter | anybody else using cssgen under 1.3? I'm getting "Could not locate clojure/contrib/generic/arithmetic__init.class..." on compile |
| 14:56 | ibdknox | well, I think for 90% of cases execution is the default |
| 14:56 | jcromartie | it just seems like a cleaner abstraction |
| 14:56 | manutter | cssgen 0.2.5-SNAPSHOT |
| 14:56 | jcromartie | ibdknox: probably so |
| 14:57 | jcromartie | ibdknox: I think that in my case, I end up juggling and composing views because of the database schema |
| 14:58 | ibdknox | jcromartie: absolutely, I don't think an extra * is so bad for that though :p |
| 14:58 | jcromartie | no |
| 14:58 | amalloy | jcromartie: define an alias: se1ect can return the sql |
| 14:59 | ibdknox | amalloy: just for you |
| 15:00 | jcromartie | amalloy: no |
| 15:00 | jcromartie | :) |
| 15:00 | technomancy | ibdknox: that would be swell; I've always wanted to refer to clj-http as gnir |
| 15:00 | ibdknox | technomancy: haha |
| 15:01 | technomancy | not to mention clj-time as chrono |
| 15:02 | ibdknox | does someone have chrono? |
| 15:03 | ibdknox | wow |
| 15:03 | ibdknox | it's open |
| 15:03 | ibdknox | hmm |
| 15:03 | brehaut | amalloy: https://github.com/fredericksgary/lib-2367 |
| 15:03 | jcromartie | ibdknox: one thing I have a problem with is where a logical "entity" in our system might exist across tables |
| 15:04 | amalloy | brehaut: classy |
| 15:04 | amalloy | glad to see someone following through on my crazy ideas |
| 15:04 | gfrederi1ks | which idea was I following through on? |
| 15:04 | ibdknox | jcromartie: is that addressed by clojureQL somehow? |
| 15:04 | brehaut | gfrederi1ks: naming lib-2367 lib-2367 |
| 15:04 | technomancy | ibdknox: I wrote an early version of clj-time and called it chrono |
| 15:04 | technomancy | but that was before clojars |
| 15:04 | gfrederi1ks | brehaut: I thought that was your idea |
| 15:05 | jcromartie | ibdknox: by being able to (def some-complex-thing (joins and unions and stuff)) |
| 15:05 | brehaut | gfrederi1ks: amalloys |
| 15:05 | brehaut | i was just the proxy |
| 15:05 | technomancy | disappointed to see it renamed, but I had dropped it by that point |
| 15:05 | jcromartie | ibdknox: whereas in Korma I am constrained by Korma's idea that entities <-> tables |
| 15:05 | ibdknox | jcromartie: hmm not really |
| 15:05 | jcromartie | no? |
| 15:05 | gfrederi1ks | what do people do when they want hiccup to make formatted html? |
| 15:05 | gfrederi1ks | decide not to want it? |
| 15:06 | ibdknox | jcromartie: just define that as the base of your query and compose thereafter |
| 15:07 | ibdknox | jcromartie: (def myent (-> (select* some-ent) (join some-other-thing) (join something-else))) |
| 15:07 | jcromartie | hm |
| 15:07 | ibdknox | (-> my-ent (where (= :cool 3)) (exec)) |
| 15:09 | jcromartie | ibdknox: what does (fields) do in defentity? |
| 15:09 | ibdknox | (entity-fields ...) is the one you want |
| 15:09 | ibdknox | and adds fields by default to any query that uses that entity |
| 15:10 | jcromartie | right |
| 15:10 | ibdknox | I may have screwed that up with explicit join though, I'll take a look later |
| 15:11 | amalloy | gfrederi1ks: i know prxml and data.xml have a formatting setting; i wouldn't be surprised if hiccup does too |
| 15:11 | jcromartie | ibdknox: and how about being able to specify a query modifier like "TOP 1" |
| 15:11 | jcromartie | or something like that |
| 15:11 | ibdknox | jcromartie: that I don't have yet, does clojureQL allow that? |
| 15:11 | jcromartie | yes |
| 15:11 | ibdknox | jcromartie: what's it look like? |
| 15:11 | jcromartie | (modify table "TOP 5") |
| 15:12 | ibdknox | ah |
| 15:12 | ibdknox | ok |
| 15:12 | jcromartie | so I can say (defn top [this n] (modify this (str "TOP " n))) |
| 15:12 | ibdknox | well that should be relatively trivial to add |
| 15:14 | gfrederi1ks | amalloy: cool, thx |
| 15:14 | ibdknox | cemerick: when are you thinking of putting up the podcasts you did at the conj? :) |
| 15:21 | TimMc | Is there a way to get Leiningen to do static checking on my Clojure code (class not found, etc.) that references some Java classes, but without having to tell it where all the *Java*'s dependencies live? |
| 15:21 | pmenon | ,(+ 1 2) |
| 15:21 | clojurebot | 3 |
| 15:21 | pmenon | yay |
| 15:21 | pmenon | lol |
| 15:22 | pmenon | ,(reduce + (take 10 (range))) |
| 15:22 | clojurebot | 45 |
| 15:22 | daniel__1 | pmenon: show off |
| 15:23 | TimMc | (I have a Maven-built Java project that I am trying to wedge some Clojure into; the Clojure code is not AOT, and runs against the Java classes that Maven has compiled.) |
| 15:25 | daniel__1 | i can't find the clojure documentation on the for loop, can anyone help me out? |
| 15:25 | TimMc | ,(doc for) |
| 15:25 | clojurebot | "([seq-exprs body-expr]); List comprehension. Takes a vector of one or more binding-form/collection-expr pairs, each followed by zero or more modifiers, and yields a lazy sequence of evaluations of expr. Collections are iterated in a nested fashion, rightmost fastest, and nested coll-exprs can refer to bindings created in prior binding-forms. Supported modifiers are: :let [binding-form expr ...], ... |
| 15:25 | TimMc | daniel__1: http://clojuredocs.org/clojure_core/clojure.core/for |
| 15:26 | daniel__1 | cheers, i need the examples |
| 15:26 | TimMc | daniel__1: and http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/for |
| 15:26 | lazybot | Nooooo, that's so out of date! Please see instead http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/for and try to stop linking to rich's repo. |
| 15:26 | TimMc | oops! Thanks, lazybot! |
| 15:26 | cemerick | ibdknox: First one this Friday. |
| 15:26 | cemerick | lazybot: botsnack |
| 15:26 | lazybot | cemerick: Thanks! Om nom nom!! |
| 15:26 | TimMc | daniel__1: rather, http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/for |
| 15:27 | daniel__1 | danke schoen |
| 15:27 | cemerick | does anyone know why gihub.com/richhickey/clojure is still there at all? |
| 15:28 | hiredman | ~for |
| 15:28 | clojurebot | for is a loop...in Java |
| 15:28 | hiredman | ~for |
| 15:28 | clojurebot | for is not used enough |
| 15:28 | hiredman | ~for |
| 15:28 | clojurebot | for is complected |
| 15:29 | hiredman | clojurebot: damn your eyes |
| 15:29 | clojurebot | I don't understand. |
| 15:29 | hiredman | ~for |
| 15:29 | clojurebot | for is complected |
| 15:29 | hiredman | ~for is not a loop |
| 15:29 | clojurebot | Roger. |
| 15:29 | TimMc | hiredman: Maybe change clojurebot to prefer a factoid it hasn't recently said. |
| 15:29 | TimMc | I don't know how annoying that would be to code. |
| 15:29 | daniel__1 | ~let |
| 15:29 | clojurebot | Titim gan éirí ort. |
| 15:30 | TimMc | ...and it might encourage people to iterate through the whole sequence. |
| 15:30 | amalloy | cemerick: i agree, it should be wiped from the face of the earth |
| 15:31 | hiredman | clojurebot: Titim gan éirí ort is irish for "may your recursive calls always be in the tail position" |
| 15:31 | clojurebot | Ack. Ack. |
| 15:31 | cemerick | or maybe just replaced with redirects :-P |
| 15:32 | amalloy | cemerick: you could redirect richhickey.github.com/clojure, but not github.com/richhickey/clojure (i think) |
| 15:32 | cemerick | right |
| 15:32 | cemerick | empty repos with a single link in the readme have a reliable effect tho |
| 15:32 | jcromartie | hiredman: having fun? |
| 15:32 | hiredman | me? |
| 15:32 | clojurebot | namespaces are (more or less, Chouser) java packages. they look like foo.bar; and corresponde to a directory foo/ containg a file bar.clj in your classpath. the namespace declaration in bar.clj would like like (ns foo.bar). Do not try to use single segment namespaces. a single segment namespace is a namespace without a period in it |
| 15:32 | hiredman | sure, always |
| 15:33 | daaku | i seem to be getting a exception in lein: "java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V", but i'm not sure how to backtrack from the trace: https://gist.github.com/c21a37a3e88c28a0243c |
| 15:34 | hiredman | means you are using a library compiled for one version of clojure in a project using a different version |
| 15:34 | hiredman | abi compat issue |
| 15:34 | cemerick | hiredman: is this the only (persistent) place where you ever commented on REPL protocols, etc? https://groups.google.com/group/clojure/browse_frm/thread/8b2a851d790ed0cc |
| 15:35 | hiredman | yes |
| 15:35 | daaku | hiredman: i see. would this happen for different java versions? |
| 15:35 | hiredman | actually I just started fiddling with slime.el to see if I could get it to speak nrepl |
| 15:35 | hiredman | daaku: no, just different clojure versions |
| 15:36 | hiredman | what version of clojure are you using? |
| 15:36 | daaku | hiredman: cool, thanks |
| 15:36 | daaku | 1.3 |
| 15:36 | hiredman | are you trying to use contrib? |
| 15:36 | daaku | i have a working env on one machine, and moving it to another and ran into this after lein deps |
| 15:36 | cemerick | hiredman: from a mechanical perspective, that should get a lot easier in the near future |
| 15:36 | daaku | i thought i got rid of contrib in my own usage, but i probably missed something, will check that too |
| 15:37 | cemerick | replacing commands w/ invocations on the remote side is potentially another story |
| 15:37 | hiredman | maybe, I dunno, there are several possible stumbling blocks to completely replacing swank-clojure |
| 15:38 | cemerick | and a few more no one knows about yet, I'ms ure |
| 15:42 | hiredman | I am sort of surprised there isn't a simple elisp client already (have slime talk to nrepl instead of swank-clojure maybe over ambitious) |
| 15:42 | hugod | cemerick: do I remember correctly that nrepl can send multiple replies to a single request? |
| 15:43 | cemerick | hiredman: it's hard to get emacs folks to stray ;-) |
| 15:44 | cemerick | hugod: yup; that always happens, insofar as the current impl doesn't happen to mix responses that contain e.g. *out* content and printed value content. |
| 15:45 | cemerick | the "spec" doesn't guarantee that separation, but it doesn't make sense to do anything else |
| 15:45 | hugod | cemerick: swank is definitely set up for a single reply to each request |
| 15:45 | hiredman | well |
| 15:46 | cemerick | and slime just always puts *out* before the value or something? |
| 15:46 | hiredman | sort of, but you have a similar separation (at least it seems like it from my mucking around in slime/swank) |
| 15:46 | hugod | stream output is handled by separate messages |
| 15:46 | cemerick | oh, ok |
| 15:46 | hugod | i.e., not linked to a request |
| 15:47 | cemerick | oooh. |
| 15:47 | cemerick | hrmph |
| 15:48 | cemerick | hugod: so multiple clients just get a muxed System/out or somesuch? |
| 15:49 | hugod | Been a while since I last looked. I'm just refreshing my memory… |
| 15:49 | cemerick | Yeah, I'll be there soon enough too. |
| 15:49 | cemerick | I need to knock out this strawman, and then we can all go to town. |
| 15:50 | hugod | the stream is connection specific |
| 15:50 | hiredman | I think it's more like a session kind of thing, you have a repl session, and you get output for that session |
| 15:51 | hiredman | where session is basically via thread id? |
| 15:52 | hugod | a session is based on the connection, at least for ritz |
| 15:53 | drewr | cemerick: straying isn't the problem |
| 15:54 | drewr | it's worse-is-better syndrome |
| 15:54 | cemerick | :-) |
| 15:54 | cemerick | sure. same-same in this case, perhaps |
| 15:54 | drewr | a sort-of working swank setup is still better than anything else |
| 15:55 | brehaut | ,1.2E3 |
| 15:55 | clojurebot | 1200.0 |
| 15:55 | brehaut | crap |
| 15:56 | TimMc | ? |
| 15:56 | brehaut | clojure has a lot of variations on valid number literals |
| 15:56 | TimMc | not as many as Racket |
| 15:57 | brehaut | im glad im not writing a racket parser then |
| 15:57 | TimMc | brehaut: Writing a highlighter? |
| 15:57 | hiredman | what I really want is ensime |
| 15:57 | brehaut | TimMc: yeah |
| 15:58 | brehaut | TimMc: https://github.com/brehaut/inc-clojure-brush |
| 15:58 | hiredman | which I mostly get with swank-clojure, I just want lexical hilighting |
| 15:58 | hiredman | semantic hilighting, or whatever |
| 15:59 | brehaut | TimMc: the screenshot there is a bit antiquated; either clone the repo and check out the demo or http://brehaut.net/blog/2011/l_systems |
| 16:00 | cemerick | brehaut: in one table, FWIW: http://bit.ly/sfPJc9 |
| 16:00 | TimMc | brehaut: I am fairly sure that #e1.0+3.0e7i is a valid Racket number literal. |
| 16:00 | brehaut | cemerick: thanks! apparently im missing hex numbers too |
| 16:01 | TimMc | excuse me, drop the "#e" |
| 16:01 | brehaut | TimMc: :O |
| 16:02 | TimMc | You can include some mix of exact/inexact, complex/read/imaginary, ratio/decimal/integral, base, exp, pos/neg |
| 16:05 | brehaut | ,0xffE5 |
| 16:05 | clojurebot | 65509 |
| 16:05 | brehaut | ,0xffE5/3 |
| 16:05 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.NumberFormatException: Invalid number: 0xffE5/3> |
| 16:05 | jcromartie | ibdknox: what about two-way relationships? do I need to specify those? |
| 16:06 | jcromartie | ibdknox: like, (defentity clients (belongs-to client-type)) and (defentity client-type (has-many clients)) |
| 16:06 | TimMc | brehaut: If only Clojure had a formal spec for its reader... |
| 16:06 | brehaut | TimMc: it does; it just happens to be written in java |
| 16:07 | TimMc | Self-documenting code, eh? |
| 16:07 | brehaut | what other kind is there ;) |
| 16:07 | TimMc | I'm just waiting for the self-coding documentation. |
| 16:08 | brehaut | ,+3 |
| 16:08 | clojurebot | 3 |
| 16:08 | nDuff | TimMc, I think that's "literate programming". :) |
| 16:08 | Raynes | Shh, you'll wake up Tim Daly. |
| 16:08 | brehaut | cemerick: your book notes that numbers can be prefixed with a dash, but it doesnt mention + |
| 16:09 | TimMc | ,[-0 +0] |
| 16:09 | clojurebot | [0 0] |
| 16:09 | cemerick | brehaut: nice :-D |
| 16:09 | cemerick | thanks |
| 16:09 | TimMc | ,0/0 |
| 16:09 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.ArithmeticException: Divide by zero> |
| 16:11 | TimMc | How do clojure.org docs get updated? Do I open a JIRA or what? |
| 16:14 | brehaut | TimMc: http://tech.puredanger.com/2011/11/10/improving-clojures-docs/ (although its 500'ing atm) |
| 16:14 | brehaut | oh. back again |
| 16:23 | TimMc | OK, cool. |
| 16:27 | broquaint | What's the recommended way of documenting clojure code? |
| 16:28 | brehaut | broquaint: what do you mean? |
| 16:28 | brehaut | language style, amount, comments vs doc strings? tools? |
| 16:28 | broquaint | Doc strings & tools, brehaut. |
| 16:28 | ohpauleez | broquaint: Doc strings on functions are pretty typical, line comments aren't seen a lot because of the structure of code |
| 16:29 | ohpauleez | some people use literate style and marginalia |
| 16:29 | broquaint | Is there a dominant style across libraries? |
| 16:29 | brehaut | http://fogus.me/fun/marginalia/ |
| 16:29 | ohpauleez | The best example to work from is clojuredocs.org if you don't use the literate style |
| 16:29 | ohpauleez | (the docs of clojure itself) |
| 16:29 | hiredman | minimal maybe the dominant style |
| 16:30 | brehaut | its uncommon to try to put fussy annotations into the docstrings themselves; metadata is a better place for that |
| 16:30 | ohpauleez | for sure, minimal is preferred - usually with an example |
| 16:30 | broquaint | I've been wondering how much fun/pain it would be to get library docs into clojars.org (ala search.cpan.org) but wasn't sure where to start. |
| 16:31 | ohpauleez | broquaint: it's not that painful, you can use an incomplete project of mine as a base: https://github.com/ohpauleez/clopi |
| 16:32 | ohpauleez | I pull the package list from clojars, then grab repo details from github and bitbucket |
| 16:32 | brehaut | syntax highlighting question: for quotes, [both '(form …) and (quote (form …))] should the heads of lists stop being highlighted as functions? |
| 16:32 | broquaint | Thanks, brehaut, ohpauleez & hiredman :) |
| 16:32 | ohpauleez | broquaint: totally welcome |
| 16:33 | ohpauleez | brehaut: good question: vimclojure leaves highlighting intact when quoted |
| 16:33 | amalloy | brehaut: i don't think so |
| 16:34 | amalloy | you're still "talking about" a function call, and it should be highlighted as such |
| 16:34 | brehaut | cool :) |
| 16:35 | brehaut | i can get behind no doing work |
| 16:35 | brehaut | s/no/not/ |
| 16:48 | technomancy | amalloy: hope I didn't come across as to dismissive on the require thread. I'm up for discussing import :as, just wanted to get that thread back on track. |
| 16:49 | amalloy | no worries |
| 16:50 | technomancy | *too dismissive |
| 16:50 | technomancy | when you're pushing for a small change you don't want to get associated with the wilder brainstorming efforts. |
| 16:51 | amalloy | i don't really see require/:refer as larger or smaller than import/:as, but i understand the desire to limit scope |
| 16:59 | cemerick | amalloy: There was much gnashing of teeth around aliasing of packages years ago. Rich was dead-set against it, IIRC. |
| 16:59 | jcromartie | ibdknox: here's one MAJOR point against ClojureQL - no LIKE operator |
| 16:59 | cemerick | Things change, of course, so who knows. |
| 17:00 | jcromartie | er hm |
| 17:03 | hiredman | ^- what the hell? underscores? |
| 17:05 | cemerick | hrm |
| 17:06 | cemerick | My clojars idea from before was: let's make org.clojars.* artifacts available only from their own repo URL |
| 17:08 | hiredman | interesting |
| 17:10 | cemerick | and don't search that repo's index from clojars.org's web UI unless a checkbox is marked |
| 17:11 | technomancy | ooh; I could get behind that |
| 17:11 | cemerick | http://clojars.org/search?q=compojure => oh, there's compojure, org.clojars.strongh/compojure "1.0.0-SNAPSHOT" |
| 17:14 | brehaut | is it poor form to not specify a groupid on a lein/clojars project? |
| 17:14 | technomancy | brehaut: not if you created the project |
| 17:14 | technomancy | well... |
| 17:14 | technomancy | depends on who you ask I guess. =) larger JVM ecosystem may say yes. |
| 17:14 | cemerick | there are differing opinions on this :-) |
| 17:15 | TimMc | brehaut: I get twitchy about the potential collisions. |
| 17:15 | brehaut | oh dear |
| 17:16 | cemerick | I don't think it's a question of collisions but of squatting. |
| 17:16 | TimMc | ? |
| 17:17 | TimMc | brehaut: Why not just do net.brehaut/foo and be done with it? |
| 17:18 | brehaut | TimMc: i guess that would work too |
| 17:18 | TimMc | I do org.timmc for my stuff. |
| 17:19 | TimMc | Or hell brehaut.net/foo :-) |
| 17:19 | brehaut | TimMc: now im certain that whatever i do will be wrong :P |
| 17:22 | TimMc | Ugh... I'm AOT'ing Clojure, and it doesn't want to compile against Foo.class since Foo.class was compiled against off-path Bar.class. |
| 17:23 | TimMc | I don't think I can get Bar.class onto the classpath. Is my mission doomed? |
| 17:26 | technomancy | I wonder if clojuresphere could add ecosystem-wide grep. |
| 17:27 | ibdknox | lol |
| 17:27 | technomancy | ClojureSphere: how many projects have :use with :rename? |
| 17:27 | technomancy | bam |
| 17:27 | ibdknox | very, very few would be my guess |
| 17:27 | technomancy | s/guess/hope/ |
| 17:28 | ibdknox | I've never seen it used |
| 17:29 | ibdknox | except in the example code I saw from chouser once |
| 17:29 | TimMc | Huh. Does that rename individual items from the use'd namespace? |
| 17:29 | ibdknox | yeah |
| 17:29 | broquaint | I feel there should be a more idiomatic way of doing this but can't think what - http://paste.lisp.org/display/125891 |
| 17:29 | TimMc | Im'ma start using that! |
| 17:29 | broquaint | Also what's a good clojure pastebin? |
| 17:30 | TimMc | ~paste |
| 17:30 | clojurebot | paste is http://gist.github.com/ |
| 17:30 | ibdknox | broquaint: (apply alt (map lit-alt-seq ["my" "print" ...])) |
| 17:30 | broquaint | s/lit-alt-seq/lit-conc-seq/ ; oops |
| 17:30 | broquaint | ibdknox: alt is a macro :( |
| 17:31 | ibdknox | broquaint: the only solution is another macro then :( |
| 17:31 | broquaint | Everything can be solved with another layer of macros eh? ;) |
| 17:31 | broquaint | Thanks, TimMc. |
| 17:31 | ibdknox | basically |
| 17:31 | ibdknox | lol |
| 17:31 | brehaut | `(lit-conc-seq ~@(stuf)) ;) |
| 17:31 | broquaint | :) |
| 17:31 | TimMc | (applym alt ...) |
| 17:31 | ibdknox | ... applym? |
| 17:32 | ibdknox | ,(doc applym) |
| 17:32 | clojurebot | No entiendo |
| 17:32 | TimMc | (defmacro applym ...) :-P |
| 17:32 | ibdknox | haha :p |
| 17:33 | brehaut | the use of macros in fnparse is unfortunate :( |
| 17:34 | broquaint | Could you recommend alternative parsing library, brehaut? |
| 17:34 | brehaut | broquaint: not really. theres a bunch of combinator libs (mostly parsec ports) |
| 17:34 | brehaut | cgrand has parsley that looks intersting but isnt a combinator lib |
| 17:34 | brehaut | i want to look into parsley more though |
| 17:35 | broquaint | Thanks, will look into it too :) |
| 17:36 | brehaut | i think cgrand might have talked about parsley during his conj talk |
| 17:36 | brehaut | although perhaps only tangentially |
| 17:37 | brehaut | broquaint: https://github.com/relevance/clojure-conj/tree/master/2011-slides |
| 17:42 | broquaint | Ooh, slides from clojure-conj, thanks! |
| 17:45 | danbell | are clojure charaters != java characters? |
| 17:45 | danbell | trying to use isDigit, failing |
| 17:45 | amalloy | &(.isDigit \9) |
| 17:45 | lazybot | java.lang.IllegalArgumentException: No matching field found: isDigit for class java.lang.Character |
| 17:45 | hiredman | how are you trying to use it? |
| 17:45 | amalloy | &(Character/isDigit \9) |
| 17:45 | lazybot | ⇒ true |
| 17:45 | danbell | ah |
| 17:46 | pjstadig | ,(type \9) |
| 17:46 | danbell | it's a static method, then? |
| 17:46 | clojurebot | java.lang.Character |
| 17:46 | danbell | thank you much, all |
| 17:48 | brehaut | is it still reasonable to use type rather than just class? |
| 17:48 | brehaut | for some reason i thought that the :type metadata was not really the norm these days |
| 17:49 | lucian | does anyone know of any news of Clojure on Android? |
| 17:50 | samaaron | lucian: it's possible: https://market.android.com/details?id=com.sattvik.clojure_repl&hl=en |
| 17:51 | natto | hello, spending inordinate time on this simple issue: (def a {:x :y}); given "x", how get :y? (a (symbol ":x")) does not work |
| 17:52 | lucian | samaaron: i know of that, i was wondering if someone knows of anything newer (and ideally feasible) |
| 17:52 | samaaron | lucian: it's unclear to me what you mean by that |
| 17:53 | brehaut | ,({:x :y) :x) ; natto |
| 17:53 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Unmatched delimiter: )> |
| 17:53 | brehaut | ({:x :y} :x) ; natto |
| 17:53 | brehaut | ,({:x :y} :x) ; natto |
| 17:53 | clojurebot | :y |
| 17:53 | lucian | the approach taken by that project has severe limitations |
| 17:53 | gfrederi1ks | natto: ##({:x :y} (keyword "x")) |
| 17:53 | lazybot | ⇒ :y |
| 17:54 | natto | brehaut & gfrederi1ks : thanks, gfrederi1ks answers it |
| 18:02 | cemerick | ibdknox: did you resolve jcromartie's korma concerns? |
| 18:03 | ibdknox | cemerick: mostly, there were one or two things he mentioned that aren't there |
| 18:03 | ibdknox | for the most part it's all there, it's just a matter of thinking slightly differently about it |
| 18:04 | cemerick | ok; glad the loop got closed on that anyway |
| 18:08 | cemerick | Interesting that .clone isn't handled specially… |
| 18:08 | cemerick | ,(.clone (make-array Double/TYPE 10)) |
| 18:08 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: No matching field found: clone for class [D> |
| 18:08 | hiredman | interesting? |
| 18:14 | sritchie | do you guys have any ideas about how to extend a protocol to a byte array? |
| 18:14 | sritchie | I'm not sure how to get the class, aside from (class (make-array Byte/TYPE 0)) |
| 18:17 | brehaut | sritchie: heres a slightly squirrelly version https://github.com/brehaut/necessary-evil/blob/master/src/necessary_evil/value.clj#L161-163 |
| 18:17 | ibdknox | haha |
| 18:17 | ibdknox | I like that |
| 18:18 | sritchie | me too, that's great |
| 18:18 | sritchie | brehaut: thanks a lot, that'd been bugging me |
| 18:18 | brehaut | sritchie: no problem. im sure there must be a better way to do it, but i havent found it yet |
| 18:18 | ibdknox | I can't think of anything obvious |
| 18:18 | ibdknox | and that seems relatively clean |
| 18:19 | brehaut | im just glad that you can :) |
| 18:20 | simonadameit | hi |
| 18:21 | simonadameit | im somewhat lost at to what I need to install in emacs, to get clojure support with slime |
| 18:21 | TimMc | Counterclockwise doesn't seem to give me javadoc flyover support -- is there an IDE where I can get that? |
| 18:21 | simonadameit | there are slime, slime-clj, slime-ritz and clojure-mode available |
| 18:21 | simonadameit | but installing all of them seems to lead to conflicts |
| 18:21 | hiredman | ~swank |
| 18:21 | clojurebot | swank is try the readme. seriously. |
| 18:21 | TimMc | simonadameit: Get clojure-mode from marmalade. |
| 18:22 | TimMc | Ph, sorry, misread. |
| 18:22 | simonadameit | TimMc: yes, I got that |
| 18:22 | simonadameit | TimMc: but where is the slime stuff? |
| 18:22 | TimMc | But yes, swank. |
| 18:22 | simonadameit | is it included in clojure mode? |
| 18:23 | TimMc | I don't know, actually. |
| 18:23 | simonadameit | hm |
| 18:23 | simonadameit | I can get clojure-mode running with a repl in the inferior-lisp buffer |
| 18:24 | TimMc | Looks like you want swank-clojure. |
| 18:24 | simonadameit | but I thought there was slime integration for clojure |
| 18:24 | TimMc | I'm an Emacs n00b -- I just use the emacs-starter-kit to get set up. |
| 18:25 | babilen | simonadameit: https://github.com/technomancy/swank-clojure ← use that |
| 18:27 | simonadameit | ah, ok i am somewhat confused with all the different versions of the same thing :) |
| 18:27 | simonadameit | i was using "ritz" |
| 18:27 | simonadameit | which should do the same - so I thought |
| 18:34 | andrewm` | so in 1.3 with the removal of dissoc-in is there a good func to remove keys from a nested map? |
| 18:35 | technomancy | andrewm`: doesn't update-in work with dissoc? |
| 18:36 | andrewm` | ahh yes that would be the obvious solution |
| 18:36 | Bahman | Would someone please guide me on how can I convert a vector into a byte array (i.e. byte[])? |
| 18:36 | ibdknox | ,(doc to-byte-array) |
| 18:36 | clojurebot | Pardon? |
| 18:36 | ibdknox | darn |
| 18:37 | ibdknox | ,(doc byte-array) |
| 18:37 | clojurebot | "([size-or-seq] [size init-val-or-seq]); Creates an array of bytes" |
| 18:37 | Bahman | Thanks ibdknox! |
| 18:37 | TimMc | ,(byte-array [1 2 3]) |
| 18:37 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Byte> |
| 18:38 | TimMc | yuck |
| 18:38 | ibdknox | ,(byte-array (map byte [1 2 3])) |
| 18:38 | clojurebot | #<byte[] [B@f7a060> |
| 18:39 | TimMc | There's no way that's the most efficient way. |
| 18:39 | ibdknox | no one said anything about efficiency! |
| 18:39 | ibdknox | :p |
| 18:39 | simonadameit | hm, how come clojure-mode on clojure-jack-in tries to download its own version of leiningen? |
| 18:39 | simonadameit | I already have leiningen installed via homebrew |
| 18:40 | hiredman | don't use homebrew |
| 18:40 | andrewm` | technomancy: hmm nevermind that doesn't work as update-in operates on the values stored and will only create new entries |
| 18:40 | andrewm` | (update-in {:a {:b :c}} [:a :b] dissoc) => {:a {:b :c}} |
| 18:41 | ibdknox | ,(update-in {:a {:b :c}} [:a] dissoc :b) |
| 18:41 | clojurebot | {:a {}} |
| 18:41 | ibdknox | :) |
| 18:41 | ibdknox | andrewm`: ^ |
| 18:42 | andrewm` | ibdknox: correct, but that still leaves keys in the map pointint to an empty map |
| 18:43 | ibdknox | huh? |
| 18:43 | ibdknox | ,(doc dissoc-in) |
| 18:43 | clojurebot | Cool story bro. |
| 18:43 | hiredman | ,(dissoc {:b :c} :b) |
| 18:43 | clojurebot | {} |
| 18:43 | hiredman | that is how dissoc works |
| 18:43 | andrewm` | whoops correct |
| 18:43 | ibdknox | ,(doc dissoc) |
| 18:43 | clojurebot | "([map] [map key] [map key & ks]); dissoc[iate]. Returns a new map of the same (hashed/sorted) type, that does not contain a mapping for key(s)." |
| 18:44 | andrewm` | tyvm |
| 18:45 | simonadameit | ok, now I see how it should work |
| 18:46 | simonadameit | clojure-mode on clojure-jack-in will get slime.el passed through and evaluated from swank-clojure |
| 18:46 | simonadameit | but unfortunately emacs gives this error in the process: |
| 18:46 | simonadameit | error in process filter: clojure-eval-bootstrap-region: Search failed: "(run-hooks 'slime-load-hook) ; on port" |
| 18:49 | simonadameit | so maybe I have incompatible versions of clojure-mode and swank-clojure? |
| 18:49 | andrewm` | simonadameit: I got that error some time ago and it was due to me having an older version of lein swank installed. Remove any version of slime you may have installed already, make sure you have the newest version of lein-swank installed and install the newest version of clojure-mode and try again. |
| 18:50 | ohpauleez | Is anyone at the nyc clojure meet up right now? |
| 18:51 | brehaut | crap i started vi in my emacs shell and i cant work out how to quit |
| 18:52 | ohpauleez | brehaut: from vi? or from viper mode? |
| 18:52 | brehaut | vi running in a emacs shell mode terminal |
| 18:53 | simonadameit | andrewm`: wohoo!! thank you :) |
| 18:54 | simonadameit | andrewm`: :-* |
| 18:54 | ohpauleez | brehaut: pressing escape a bunch and then ":q" doesn't work? |
| 18:54 | ohpauleez | (no quotes) |
| 18:54 | brehaut | ohpauleez: tried that; emacs kept capturing the esc |
| 18:54 | ohpauleez | ahhh that sucks! |
| 18:54 | brehaut | (i also not that emacs was smart enough to not try to start up inside the emacs terminal) |
| 18:55 | simonadameit | technomancy: at your swank-clojure repo the readme.md says to install swank-clojure 1.3.2, while the current version 1.3.3 is the one that will work with the current clojure-mode in elpa/marmelade |
| 18:56 | paulfryzel | simonadameit: are you looking at https://github.com/technomancy/swank-clojure ? |
| 18:56 | paulfryzel | i see "swank-clojure 1.3.3" |
| 18:56 | technomancy | simonadameit: thanks, just fixed it |
| 18:57 | simonadameit | paulfryzel:, technomancy : wow, now I wonder wether technomancy is really that fast, or I got it wrong :) |
| 18:57 | simonadameit | a mystery |
| 19:03 | simonadameit | technomancy: thanks for bringing the slime goodnesss to clojure :) - i just saw you commited an explanation how this all connects to clojure-mode |
| 19:03 | technomancy | simonadameit: yeah, long overdue; there was a bit too much "just do this and it works, heyyyy" which sucked when it didn't |
| 19:05 | brehaut | everyone loves the mumble style guide for lisp |
| 19:06 | technomancy | simonadameit: also, I didn't really bring it to clojure; I just halfheartedly maintain it. |
| 19:16 | alex_baranosky | I'm trying to move some code of mine to 1.3, and am getting a ClassNotFoundException in the ns call re: a record I created. Mind you this error does not occur in 1.2 |
| 19:16 | alex_baranosky | code is here on GitHub: https://github.com/AlexBaranosky/EmailClojMatic/blob/master/src/core.clj |
| 19:17 | hiredman | :( |
| 19:17 | hiredman | don't put dashes in type names |
| 19:17 | alex_baranosky | it can't find the CannotPArseReminderStone |
| 19:17 | amalloy | single-segment namespaces are evil also |
| 19:17 | alex_baranosky | you mean like "core" |
| 19:18 | amalloy | yes, and reminder-parsing |
| 19:18 | alex_baranosky | yeah, let me fix that |
| 19:18 | gfrederi1ks | "core" is the only namespace I use |
| 19:18 | alex_baranosky | right, basically the whole project |
| 19:18 | alex_baranosky | :) |
| 19:18 | alex_baranosky | 'll fix that... do you think it's related to the failure? |
| 19:18 | alex_baranosky | I'll fix it anyway :| |
| 19:18 | amalloy | gfrederi1ks: your core namespace is the only one i use too |
| 19:19 | amalloy | alex_baranosky: hiredman is probably closer to the actual problem |
| 19:19 | hiredman | it's very karmic, you do bad things and bad things happen to you |
| 19:19 | amalloy | hah |
| 19:19 | alex_baranosky | the record type has no dashes though |
| 19:19 | hiredman | it does |
| 19:19 | amalloy | alex_baranosky: its package does |
| 19:19 | alex_baranosky | you mean its namespace? |
| 19:19 | amalloy | yes, and also no |
| 19:19 | hiredman | you :import'ed it, right? |
| 19:20 | hiredman | it's a java class |
| 19:20 | hiredman | :import is for java classes |
| 19:20 | alex_baranosky | that's silly |
| 19:20 | hiredman | alex_baranosky: I think what you meant is "I don't understand" |
| 19:20 | alex_baranosky | its just an inconsistency |
| 19:21 | hiredman | no it is not |
| 19:21 | alex_baranosky | and those always bite people |
| 19:21 | hiredman | you just don't know anything about records |
| 19:21 | hiredman | it's ok |
| 19:22 | alex_baranosky | so, you can use a namespace anywhere in clojure using dashes, btu as soon as you want to create a Record in one, then it won't work as it once dide |
| 19:22 | hiredman | no |
| 19:22 | hiredman | java types cannot have '-' in the name, records are java types, … |
| 19:23 | dakrone | devn: ping |
| 19:23 | alex_baranosky | how does a Clojure namespace look from Java? say 'alex.reminder-parsing' ? |
| 19:24 | alex_baranosky | does it substitute dashes with underscores? |
| 19:24 | hiredman | depends on what you mean |
| 19:24 | hiredman | there is the namespace object, an object with a name attribute with the value alex.reminder-parsing |
| 19:24 | hiredman | there is the class generated when that namespace is compiled |
| 19:25 | hiredman | which is something like alex.reminder_parsing |
| 19:25 | amalloy | hiredman: alex.reminder_parsing__init, i think? |
| 19:25 | hiredman | actually |
| 19:25 | hiredman | yeah |
| 19:25 | hiredman | that |
| 19:25 | hiredman | which is written to the filesystem like alex/reminder_parsing__init if asked |
| 19:25 | hiredman | you do get a alex.reminder_parsing if you have a :gen-class |
| 19:26 | hiredman | alex/reminder_parsing__init.class |
| 19:26 | hiredman | then there is the corresponding clojure file, alex/reminder_parsing.clj |
| 19:26 | alex_baranosky | so the CannotParseReminderStone, seems to compile fine to a clss with a matching name |
| 19:27 | hiredman | the important bit is the package name |
| 19:27 | hiredman | which is namespace the record/type is defined in |
| 19:27 | hiredman | and in your case contains a dash |
| 19:29 | alex_baranosky | so why did it work fine in 1.2? |
| 19:29 | alex_baranosky | hmm... |
| 19:29 | amalloy | wait, you're creating a stone class? the whole point of slingshot is that you don't have to create new classes for exceptions |
| 19:30 | amalloy | just (throw+ {:reason :cannot-parse-reminder :other "whatever"}) |
| 19:30 | alex_baranosky | I thought it would be a bit of self-documentation, considering it could be conceivably hard to follow the code between throwing of the stone, and catching of it |
| 19:30 | alex_baranosky | but maybe that's just old-fashioned oop bs talking |
| 19:30 | alex_baranosky | I'll try just nuking it |
| 19:38 | alex_baranosky | what changed between 1.2 and 1.3 to effect package names on Records |
| 19:39 | brehaut | name munging changed between 1.2.0 and 1.2.1 |
| 19:40 | brehaut | foo-bar.Record is as is in 1.2.0 (and below? i cant remember when records were added) and foo_bar.Record in 1.2.1 and above |
| 19:41 | amalloy | brehaut: they're new to 1.2 |
| 19:41 | alex_baranosky | so can I import records that are in dashed namespaces with: (:import [dashed_namespace.RecordName]) ? |
| 19:41 | brehaut | i cant rmemeber what the big changes in 1.1 were then. hmm. |
| 19:42 | alex_baranosky | this project shouldn't even be using Records |
| 19:42 | alex_baranosky | f me |
| 19:42 | alex_baranosky | :P |
| 19:42 | amalloy | hahaha |
| 19:42 | amalloy | a frequent realization |
| 19:43 | alex_baranosky | however the new ->Record functions are pretty sweet |
| 19:43 | brehaut | alex_baranosky: you can only _import_ a record that exists; if the namespace containing the definition hasnt been loaded, and the record hadnt been AOT compiled, then you need to require the namespace first |
| 19:43 | alex_baranosky | brehaut: thanks for the clarification |
| 19:43 | brehaut | if that ball of words was clarifying, im glad. it looks like soup to me :P |
| 19:44 | alex_baranosky | brehaut: dude I am *n* the soup |
| 19:44 | alex_baranosky | *in* |
| 19:45 | brehaut | and your guess that you dont want records is probably right |
| 19:46 | brehaut | i think ive created 2 records in all my clojure code, and one of them isnt really all that necessary |
| 19:47 | alex_baranosky | brehaut: well, I originally added them in as a experiment with readability... that experiment has gone all sorts of terribly. Considering the potential pitfalls when using records |
| 19:47 | amalloy | brehaut: the only guy in here capable of making a ball of soup? |
| 19:48 | alex_baranosky | amalloy: one of the bread bowls I assumed. |
| 19:48 | brehaut | bread bowls? |
| 19:48 | amalloy | brehaut: for putting soup in? |
| 19:48 | brehaut | is this some weirdo north american thing? |
| 19:49 | amalloy | well i didn't *think* it was |
| 19:49 | brehaut | http://en.wikipedia.org/wiki/Bread_bowl |
| 19:49 | brehaut | huh. it really is a thing |
| 19:49 | gfrederi1ks | amalloy: wow you wrote that wikipedia article fast! |
| 19:50 | amalloy | $write-wiki Bread Bowl |
| 19:50 | gfrederi1ks | that crazy lazy bot |
| 19:50 | klauern | bread bowls are pretty awesome, actually |
| 19:50 | klauern | It's like a sandwich, for soup |
| 19:50 | brehaut | relevant: http://xkcd.com/978/ |
| 19:51 | brehaut | klauern: my mind is blown |
| 19:51 | klauern | lol |
| 19:51 | amalloy | i like the concept of bread bowls but usually not the execution |
| 19:51 | brehaut | amalloy: huh. so like object orientation then? |
| 19:51 | brehaut | but breadish? |
| 19:51 | gfrederi1ks | bread-oriented soup |
| 19:52 | brehaut | this has gone to a weird place |
| 19:52 | amalloy | brehaut: welcome to soup-oriented irc? |
| 19:52 | brehaut | i think its just an aspect |
| 19:53 | brehaut | ps, what the hell are aspects? |
| 19:53 | amalloy | oh god |
| 19:53 | brehaut | amalloy: PTS ? |
| 19:53 | hiredman | people always say "cross cutting concerns" which is like, what? |
| 19:54 | gfrederi1ks | my friend was asking me just the other day how clojure people do aspect-oriented things |
| 19:54 | amalloy | no, more like embarrassment at my former self. i though AOP was really cool even though i knew i didn't understand it |
| 19:54 | brehaut | amalloy: you programmed PHP professional, its hardly your greatest embarassment |
| 19:54 | technomancy | I'll orient your aspect. |
| 19:54 | gfrederi1ks | run! |
| 19:54 | hiredman | like stuartsierra saying logic programming is the next cool thing, and then saying he didn't understand it? |
| 19:55 | hiredman | maybe you didn't do it on stage |
| 19:55 | amalloy | my understanding is AOP is this great way to create spaghetti code, by secretly injecting code all over your codebase |
| 19:55 | brehaut | holy crap |
| 19:56 | brehaut | that sounds like the worst idea since C++ |
| 19:56 | technomancy | amalloy: alias_method_chain! |
| 19:56 | amalloy | technomancy: outside my area, i'm afraid |
| 19:56 | hiredman | someone just wrote a blog post |
| 19:56 | technomancy | amalloy: oh, it's a ruby thing. better not to know. |
| 19:56 | hiredman | https://github.com/raganwald/homoiconic/blob/master/2011/11/COMEFROM.md |
| 19:57 | alex_baranosky | all OOP is a mess on some level or another, and I can only assume production Clojure is also a mess, but LESS of a mess :) <bitter today> |
| 19:57 | klauern | hiredman: I was just going to find that post, as I just read it |
| 19:57 | amalloy | brehaut: like there was some notion of a "join point"; you could insert code before, after, or around various classes of join points. eg, "add this logging statement before every throw(foo) statement" |
| 19:57 | brehaut | wait, doesnt emacs have a thing for that? |
| 19:57 | hiredman | so, add-hook? |
| 19:58 | amalloy | i guess? like i said i never really understood it |
| 19:58 | alex_baranosky | amalloy: it has an intricate lexicon |
| 19:58 | gfrederi1ks | I don't remember any use cases other than logging |
| 19:59 | brehaut | amalloy: im slightly more informed than i was 10 minutes ago, so win! |
| 19:59 | rippinrobr | #clojureclr |
| 19:59 | rippinrobr | woops |
| 19:59 | brehaut | theres a bit in the orielly beautiful code book about using the emacs hooks feature to make emacs work for the blind |
| 20:00 | brehaut | that was pretty cool |
| 20:00 | amalloy | brehaut: also, gravity on pluto is over ten times stronger than on earth! (pointing out here that being more informed is only useful if information is true) |
| 20:00 | brehaut | amalloy: lol. point taken |
| 20:00 | gfrederi1ks | also there's usefulness |
| 20:00 | alex_baranosky | amalloy: unless you're trying to lie |
| 20:01 | gfrederi1ks | brehaut: I had chicken and shrimp for lunch |
| 20:01 | brehaut | monads are just endofunctors in the category of monoids, whats the problem? |
| 20:01 | alex_baranosky | brehaut: is that some new Parliament Funcadelic? |
| 20:02 | amalloy | so wait, in this analogy are shrimp the monads, or is lunch? |
| 20:02 | brehaut | i think lunch is the category in this analogy |
| 20:02 | brehaut | so i think shrimp must be endofunctors |
| 20:02 | brehaut | and monads is _the whole thing_ |
| 20:03 | hiredman | clojurebot: shrimp |must be| endofunctors |
| 20:03 | clojurebot | In Ordnung |
| 20:03 | brehaut | honestly, i think this is the most profound discussion of monads we have ever had |
| 20:32 | hiredman | ~endofunctors |are| functors that map a category to itself. |
| 20:32 | clojurebot | In Ordnung |
| 20:32 | hiredman | ~shrimp |
| 20:32 | clojurebot | shrimp must be endofunctors |
| 20:33 | brehaut | ~endofunctors |
| 20:33 | clojurebot | #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.> |
| 20:33 | amalloy | haha that's actually better than the expected result. he can't stand category theory |
| 20:33 | brehaut | clojurebot is not a category theorist |
| 20:34 | alex_baranosky | brehaut, so my example of mapping List[String] too List [String] would be Endofunctor?? |
| 20:34 | lazybot | alex_baranosky: Definitely not. |
| 20:34 | brehaut | ~monads is #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.> |
| 20:34 | clojurebot | Roger. |
| 20:34 | brehaut | ~monads |
| 20:35 | brehaut | alex_baranosky: no idea ;) |
| 20:35 | clojurebot | Pardon? |
| 20:35 | amalloy | alex_baranosky: well, you gave the example in a different channel, so he can't be expected to guess what it was :P |
| 20:36 | alex_baranosky | oops! 8) |
| 20:37 | amalloy | clojurebot: monads is #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.> |
| 20:37 | clojurebot | Roger. |
| 20:37 | amalloy | ~monads |
| 20:37 | alex_baranosky | amalloy: that's what I get for quadruple-tasting while falling sleep |
| 20:37 | clojurebot | Titim gan éirí ort. |
| 20:37 | brehaut | alex_baranosky: are we talking about beer now? |
| 20:37 | amalloy | oh, i wonder if he's passing the factoid through the reader |
| 20:37 | brehaut | cause thats a category worthy of some theory |
| 20:38 | amalloy | clojurebot: monads is #=(str "super" "awesome") |
| 20:38 | clojurebot | You don't have to tell me twice. |
| 20:38 | amalloy | ~monads |
| 20:38 | clojurebot | Excuse me? |
| 20:38 | amalloy | dude's just confusing |
| 20:39 | brehaut | le sigh |
| 20:40 | hiredman | ~shrimp |
| 20:40 | clojurebot | shrimp must be functors that map a category to itself. |
| 20:41 | brehaut | hiredman: is this the inference working? |
| 20:41 | hiredman | yes |
| 20:41 | brehaut | thats fantastic :) |
| 20:42 | hiredman | well, after I smashed on it a bit (was only working for stuff defined with "is") |
| 20:45 | gfredericks | clojurebot: itself is a reflexive pronoun |
| 20:45 | clojurebot | You don't have to tell me twice. |
| 20:45 | gfredericks | ~shrimp |
| 20:45 | clojurebot | shrimp must be functors that map a category to itself. |
| 20:45 | technomancy | clojurebot has the decency to consider anaphora harmful |
| 20:46 | hiredman | if you botsnack with in 2 minutes of an infered result it becomes permanent |
| 20:47 | hiredman | https://gist.github.com/1372115 |
| 21:06 | technomancy | hiredman: how about the reverse for botsmack? |
| 21:06 | Raynes | ~botsmack |
| 21:06 | technomancy | unlearn an accidentally-learned factoid if botsmacked within two minutes |
| 21:06 | clojurebot | Owww! |
| 21:07 | alex_baranosky | ~botsmack |
| 21:07 | hiredman | I'll think about it |
| 21:07 | clojurebot | Owww! |
| 21:07 | amalloy | best feature ever |
| 21:07 | technomancy | hiredman: it's a yin/yang thing |
| 21:08 | technomancy | two sides of the same coin |
| 21:08 | amalloy | we'll all be like terribly abusive pet owners |
| 21:11 | alex_baranosky | ~botsmack |
| 21:11 | clojurebot | clojurebot evades successfully! |
| 21:11 | alex_baranosky | lol |
| 21:11 | TimMc | haha |
| 21:11 | ibdknox | ~botsmack |
| 21:12 | clojurebot | clojurebot evades successfully! |
| 21:12 | ibdknox | damn him |
| 21:12 | alex_baranosky | shoot it's learning |
| 21:12 | ibdknox | lol |
| 21:12 | ibdknox | skynet here we come |
| 21:12 | alex_baranosky | I give it 200 years |
| 21:14 | alex_baranosky | ~shrimp |
| 21:14 | clojurebot | shrimp must be functors that map a category to itself. |
| 21:16 | TimMc | I leave this channel for 4 hours and what the shit are you going on about? |
| 21:16 | alex_baranosky | ~monads |
| 21:17 | hiredman | I may have to fiddle with the inference makes lookup expensive |
| 21:17 | clojurebot | Gabh mo leithscéal? |
| 21:18 | alex_baranosky | ~factoid |
| 21:18 | clojurebot | Excuse me? |
| 21:19 | TimMc | clojurebot: It's Turing complete |is| <reply>Turing completeness is the Godwin's Law of language arguments |
| 21:19 | clojurebot | Roger. |
| 21:19 | TimMc | technomancy: ^ |
| 21:19 | TimMc | Did you come up with that or did you hear it somewhere? |
| 21:22 | hiredman | ~monads |
| 21:23 | clojurebot | monads is http://okmij.org/ftp/Scheme/monad-in-Scheme.html |
| 21:49 | alex_baranosky | what do you say to someone who says that it is not practical (yet) to write a webapp in clojure, that Rails is more effective dollar for dollar? |
| 21:50 | brehaut | alex_baranosky: ask them why they havent jumped to node? |
| 21:51 | brehaut | you have two differing statements in your question |
| 21:51 | brehaut | a) is it practical to write web apps in clojure |
| 21:51 | brehaut | b) is rails more effective |
| 21:51 | brehaut | a) absolutely practical |
| 21:51 | brehaut | b) may be true |
| 21:52 | brehaut | id say it depends on the particular application whether or not rails comes out on top |
| 21:52 | TimMc | alex_baranosky: "dollar for dollar" depends on hiring and feeding costs of Ruby programmers as well as productiveness and stability of the resulting Ruby apps, |
| 21:52 | TimMc | . |
| 21:52 | brehaut | (the more that it is a web app rather than an application that happens to be on the web, the more it favors rails i would suggest) |
| 21:56 | brehaut | alex_baranosky: speaking from the perspective of someone who does django day to day, django still has the edge over clojure because of the admin for CRUD cms type sites, and i wouldnt rush to try to replicate that in clojure yet |
| 21:57 | brehaut | alex_baranosky: on the other hand, lein, enlive, and ring are all great |
| 21:57 | brehaut | </blather> |
| 22:00 | alex_baranosky | brehaut: good points, I just looooove clojure and want to force everyone to use it :) |
| 22:00 | alex_baranosky | we need more awesome libraries to supplement and support the great language |
| 22:02 | lghtng | visual clojure 2011 |
| 22:02 | lghtng | sry |
| 22:03 | brehaut | (i mean one that isnt part of webnoir obviously) |
| 22:03 | klauern | I feel Clojure needs something like playframework, but I have no idea what that would even be: www.playframework.org |
| 22:03 | lghtng | Visual Clojure Enterprise 2011 SP11 |
| 22:04 | brehaut | its 2011; can we get past needing a 'framework' for web development please? |
| 22:05 | brehaut | lghtng: i believe you have misspelt 'emacs' |
| 22:05 | lghtng | $899/yr Subscription w/ unlimited downloads for 14 days from FAST Clojure Servers |
| 22:05 | lghtng | i spell emacs M-x |
| 22:06 | klauern | I'm not sure I follow. would "starter pack" or "boilerplate" or "starter kit" make it more appealing? |
| 22:06 | brehaut | klauern: im not sure why we anything beyond a bit of documentation? |
| 22:09 | lghtng | ls |
| 22:09 | lghtng | er |
| 22:09 | brehaut | klauern: if you dont want to think about your web programming choices in clojure, theres already noir. its a good default |
| 22:10 | lghtng | modlisp |
| 22:10 | lghtng | apache speed and punch, clojure sophistry |
| 22:10 | lghtng | and security |
| 22:10 | brehaut | wait wait, apache _speed_ ? |
| 22:11 | lghtng | unless you are Oracle, yes |
| 22:12 | lghtng | i think its pretty fast if your not trawling a swamp |
| 22:13 | lghtng | ziff-davis may disagree, but then again, they run a swamp |
| 22:19 | technomancy | TimMc: I don't think I came up with that |
| 22:19 | technomancy | couldn't tell you where it's from though |
| 22:44 | duck1123 | Is there any way in clojure to disallow any http connectections and mock them out with known results for unit tests? |
| 22:45 | alex_baranosky | duck1123: Midje is good for that kind of thing: https://github.com/marick/Midje |
| 22:46 | duck1123 | I am using Midje, and I can mock out in known places. I'm just looking for something that can catch the ones I'm not thinking of |
| 22:46 | duck1123 | There was a gem for Ruby that did the same thing |
| 22:46 | brehaut | duck1123: why not just call the ring handler directly with request maps? |
| 22:46 | technomancy | with-redefs is another good one |
| 22:47 | duck1123 | brehaut: I'm concerned with http connections going out from my server |
| 22:48 | duck1123 | I think I might be able to figure something out |
| 22:48 | brehaut | ah right |
| 22:53 | alex_baranosky | did something change in 1.3 affecting gen-class ? |
| 22:54 | alex_baranosky | code used to work fine on 1.2 but now when I run 'lein run' it gives a ClassNotFoundException |
| 22:54 | alex_baranosky | no dashes in namespace |
| 22:54 | duck1123 | run doesn't compile |
| 22:54 | duck1123 | do a lein compile first |
| 22:54 | alex_baranosky | what about uberjar ? does it compile? |
| 22:55 | duck1123 | I would assume so, I don't use it though |
| 22:55 | alex_baranosky | compiled then ran run, and got same error |
| 22:56 | duck1123 | Oh well, I know that after cleaning, I need to compile before I can run |
| 22:56 | technomancy | anything that runs code in the project's JVM should cause compilation of whatever's in :aot in project.clj |
| 22:56 | alex_baranosky | is that a change from 1.2 to 1.3? |
| 22:58 | alex_baranosky | what I am doing is creating a simple gen-class with a -main function. Adding that ns to project.clj, and then running lein uberjar |
| 22:58 | technomancy | duck1123: hmm; if so that's a bug; it should always detect the need to compile if classes/ is empty. |
| 22:59 | alex_baranosky | in the past this made me a jar that worked fine at the command line |
| 23:00 | technomancy | alex_baranosky: if you can make a simple repro case please open a bug |
| 23:00 | duck1123 | technomancy: It may be in part related to the peculiarities of Tigase's class loader. It scans every class file and jar for the implementations it needs |
| 23:01 | technomancy | tigase? |
| 23:01 | TimMc | XMPP server, yeah? |
| 23:01 | duck1123 | Yeah, I use it in my server |
| 23:01 | TimMc | I think I use their free server to host my XMPP. |
| 23:01 | duck1123 | I have to gen class the plugin to hook it in |
| 23:01 | alex_baranosky | thanks guys, gotta go. If it is a bug, and not my own error, I'll submit a report |
| 23:01 | alex_baranosky | adios |
| 23:03 | spoon16 | how can I get lein to stop trying to use clojars and centeral? |
| 23:03 | technomancy | spoon16: :omit-default-repositories true |
| 23:03 | spoon16 | thanks |
| 23:03 | technomancy | sure |
| 23:04 | spoon16 | technomancy are you up in Seattle? |
| 23:04 | technomancy | spoon16: yeah, shoreline technically |
| 23:04 | spoon16 | recently moved down to the bay area, from Redmond |
| 23:04 | technomancy | cool |
| 23:04 | spoon16 | was kind of bummed out to see that you were from that area and I had not gone to any of the meetups or anything you are a part of |
| 23:05 | spoon16 | great work on lein btw |
| 23:05 | technomancy | thanks |
| 23:05 | technomancy | yeah we have a lot of fun at seajure |
| 23:05 | duck1123 | much less hair fire |
| 23:05 | technomancy | spoon16: too bad you hadn't heard of it; anything we could do to make sure everyone doing Clojure in the area knows about it? |
| 23:06 | technomancy | maybe mention it on the main Clojure mailing list occasionally? |
| 23:06 | gfredericks | billboards. |
| 23:07 | technomancy | gfredericks: well I do have the leiningen logo in high-res now... |
| 23:07 | spoon16 | I think you are doing alright |
| 23:07 | spoon16 | I was just barely getting started when I moved |
| 23:07 | spoon16 | so I just had not discovered much in the eco system |
| 23:08 | technomancy | spoon16: gotcha. there's a bay area meeting too, but it's not quite as cool as ours. =) |
| 23:08 | spoon16 | yeah, I've started going to the bay area one |
| 23:09 | spoon16 | me and two other guys from Netflix have started attending |
| 23:09 | technomancy | great |
| 23:11 | brehaut | dnolen: 'fair conjunction'? what is that? |
| 23:11 | dnolen | brehaut: logical conjunction. miniKanren has fair disjunction. |
| 23:11 | dnolen | brehaut: that means a branch in a logical or cannot steal all the computation time. |
| 23:12 | brehaut | ah right. |
| 23:12 | gfredericks | clojurebot: logic programming is the new monads |
| 23:12 | clojurebot | Ack. Ack. |
| 23:12 | dnolen | brehaut: but miniKanren still has some forms of divergence in clearly finite programs - because conjuction in miniKanren is not fair. |
| 23:13 | dnolen | P & Q, where P is a recursive call that needs information from Q to fail. currently P & Q will diverge. I think I may have a fix… shouldn't get to hopeful yet. |
| 23:13 | brehaut | ~monads |
| 23:13 | clojurebot | monads is #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.> |
| 23:14 | brehaut | bah |
| 23:14 | gfredericks | I guess it worked eventually? |
| 23:14 | brehaut | dnolen: interesting |
| 23:14 | brehaut | gfredericks: yeah. almost; apparently i dont know enough bot-fu to not have him say 'monads is' |
| 23:15 | dnolen | brehaut: if this actual works, it'll fix a big wart in miniKanren, as well as remove a fairly strange hack. |
| 23:15 | brehaut | very cool :) |
| 23:15 | gfredericks | clojurebot: monads |are| the new gotos |
| 23:15 | clojurebot | You don't have to tell me twice. |
| 23:15 | brehaut | dnolen: core.logic must be about a year old now? |
| 23:15 | gfredericks | ~monads |
| 23:15 | clojurebot | Excuse me? |
| 23:21 | brehaut | dnolen: 9 days away from 1 year in fact |
| 23:21 | brehaut | or maybe ten if you take timezones into account |
| 23:22 | spoon16 | technomancy: how can I avoid repeating my repository credentials for each entry in :repositories (in a project.clj)? |
| 23:23 | spoon16 | I swear I read this in the docs, but can't find it now |
| 23:23 | technomancy | spoon16: "lein help deploying" should cover it |
| 23:23 | spoon16 | thanks |
| 23:27 | dnolen | brehaut: oh yeah! wow |
| 23:33 | spoon16 | it seems like you have to override "centeral" repository last in project.clj or the override will not take |
| 23:39 | spoon16 | nevermind, it's some wierd local maven problem if I clear my local cache all is good |
| 23:55 | Raynes | devn: https://github.com/Raynes/lein-newnewm <-- Thing we talked about earlier. |