2011-11-09
| 00:15 | jlf | callen: looking forward to it |
| 00:18 | spoon16 | what is the most appropriate way to make a reference to an external Clojure project? I want to reference https://github.com/alexott/clj-tika |
| 00:21 | amalloy | "reference"? if you want to reference it in a blog post that link is good. if you want to do something with it in a program you probably need to be more specific |
| 00:25 | spoon16 | well… in java you put a library on your class path and in C# you create a reference to an assembly that is placed on the executable path… I get that clojure is running on the JVM but I guess I'm not sure how I make the contents of clj-tika available to my own clojure project. Do I need to compile it somehow and take the resulting JAR and reference it in my Leiningen project.clj somehow? |
| 00:26 | spoon16 | maybe there is a blog post that I haven't found that describes this |
| 00:28 | spoon16 | I guess i can just use lein to build a jar from clj-tika and import that. Is there a way to pull it in automatically by referencing the clj-tika project.clj in my own project.clj? |
| 00:29 | amalloy | spoon16: yes |
| 00:30 | amalloy | just add [clj-tika "1.0.0-SNAPSHOT"] to your :dependencies |
| 00:30 | spoon16 | does that come from clojars? |
| 00:31 | amalloy | you mean, does that cause lein to download a jar from clojars? usually, but in general it causes it to get downloaded from "somewhere" |
| 00:31 | leo2007 | How to develop a noir website using slime? |
| 00:34 | spoon16 | if I add clj-tika "1.0.0-SNAPSHOT" to my dependencies it fails to find the library… I installed clj-tika using lein install |
| 00:34 | spoon16 | and now it works |
| 00:34 | spoon16 | so I guess the best thing to do in a team environment is setup a shared maven repository |
| 00:35 | amalloy | well, he may not have pushed it (or that version) to clojars |
| 00:35 | amalloy | www.clojars.org/clj-tika |
| 00:35 | spoon16 | yeah, makes sense |
| 00:36 | spoon16 | do you have any recommendations for a self hosted dependency repo like clojars that I could throw up on EC2? |
| 00:36 | spoon16 | we use artifactory at work, but that might be overkill for my three person side project |
| 00:39 | spoon16 | stackoverflow says a maven repo is just a specific directory structure that may be exposed over http |
| 00:39 | spoon16 | and that Nexus is a good choice |
| 00:41 | zerokarmaleft | leo2007: your question is a little vague |
| 00:49 | leo2007 | what happens behind the scene when I run `lein swank' in the project root? |
| 00:51 | leo2007 | basically, I want `lein swank' to get the website running for an interactive development session using slime. |
| 01:00 | zerokarmaleft | perhaps extending lein-noir might make more sense |
| 01:03 | duck1123 | leo2007: what I do is have my application start the swank server, then I fire everything off with lein run |
| 01:04 | zerokarmaleft | duck1123: with an embedded call to swank? |
| 01:04 | duck1123 | yes |
| 01:05 | duck1123 | it has the benefit that the swank session is always there with my namespaces ready and my environment initialized |
| 01:05 | duck1123 | I wouldn't recommend that for a library, however |
| 01:06 | zerokarmaleft | ah i see, start-repl...neat |
| 01:14 | leo2007 | duck1123: how did you set it up? by changing project.clj? |
| 01:18 | callen-bot | testing |
| 01:18 | callen-bot | bwahahahahaha |
| 01:19 | callen-bot | jlf: herro. |
| 01:20 | callen-bot | leo2007: problem? |
| 01:21 | leo2007 | callen-bot: smart guess. |
| 01:21 | callen-bot | leo2007: http://www.youtube.com/watch?v=QP_rIAkb_v8 this will improve your day. |
| 01:29 | duck1123 | leo2007: If you want to call swank from within your project, then swank-clojure has to be part of your runtime deps |
| 01:31 | qizwiz | already enjoying noir. I like how the concept of routes is defined within a page and isn't convoluted like the rails architecture |
| 01:31 | qizwiz | and since I'm just coming back into the conversation, what does swank within a project get you? |
| 01:31 | leo2007 | duck1123: If I have lein run, I also want to be able to connect to the swank server for development. But I don't know how to set it up. |
| 01:32 | duck1123 | leo2007: Here's how I start my app. https://github.com/duck1123/jiksnu/blob/master/src/jiksnu/core.clj |
| 01:32 | duck1123 | qizwiz: calling swank from within your server allows you to call lein run and have swank started |
| 01:34 | leo2007 | BTW, anybody annoyed by Ubuntu? I thinking of moving my env to Fedora. |
| 01:34 | callen | leo2007: Debian is fine |
| 01:41 | qizwiz | ah, that's handy |
| 01:41 | qizwiz | what are the deploy strategies with noir/compojure? |
| 01:45 | callen | qizwiz: SCP ALL THE FILES |
| 01:50 | qizwiz | callen: alright, I'm in a predominantly rails shop. would there be anything special to setup on the vhost? I presume I'd have to put lein there as well and have all the relevant libraries |
| 01:53 | callen | qizwiz: I was being sarcastic. |
| 01:53 | callen | qizwiz: I am sorry. |
| 01:53 | callen | qizwiz: just have lein and the JVM on the deployment targets, then script the cloning of the appropriate repo and that should get you rolling. |
| 01:54 | callen | qizwiz: I am sure there are more sophisticated ways, but that seems easy enough. |
| 01:54 | qizwiz | :-) |
| 01:54 | qizwiz | thank you |
| 01:55 | qizwiz | callen: no worries on the sarcasm. I'm experienced enough with IRC (at least) that I know tough skin is a requirement |
| 01:57 | duck1123 | if you want to get fancy, pallet is pretty neat. If you're tied to Tomcat, you can produce a war. If you want dead simple you can produce an uberjar and run that |
| 01:58 | duck1123 | put most likely, clone the whole project and use lein run |
| 01:59 | qizwiz | the issue is that if I build it this way, I take sole responsibility for every facet. So any beacons along the way are helpful |
| 02:01 | qizwiz | on the other hand, if I use rails, then there are folks I can lean on if I have to |
| 02:07 | amalloy | qizwiz: you might want to try heroku |
| 02:07 | amalloy | while you're playing around |
| 02:07 | amalloy | they just keep a git checkout of your project, and whenever you push to it it does the whole lein dance to start it up again |
| 02:08 | amalloy | afaik the free tier is sufficient to run a single always-on single-host webapp |
| 02:23 | tsdh | Is there a way to silence reflection warnings in one specifig block of code? I tried wrapping the code in a (binding [*warn-on-reflection* false] code), but that doesn't help. |
| 02:24 | amalloy | tsdh: usually you'd rather just fix the reflection |
| 02:24 | tsdh | amalloy: Did you see my answer to your message on the list? |
| 02:25 | tsdh | I have a macro that expands to java calls, and in the expansion the type hints are lost. |
| 02:25 | amalloy | oh, i didn't. thanks |
| 02:25 | tsdh | amalloy: Would your path help in that case, too? |
| 02:25 | tsdh | s/path/patch/ |
| 02:26 | amalloy | well, it depends on your issue, i guess. in almost all cases you can work aorund the problem by not type-hinting expressions, and instead hinting let-bindings |
| 02:27 | amalloy | a good practice anyway in macros: yours is incorrect regardless of the macro-metadata patch because it evaluates g multiple times |
| 02:28 | amalloy | if you wrapped it with `(let [^Graph g# ~g] (...use g#...)), then g would be evaluated only once and would be hinted appropriately |
| 02:29 | tsdh | amalloy: Yes, but that's ok. A typical macro application looks like (with-traversal-context [g (vsubgraph g #(some-pred))] (do-stuff-with g)), so g is evaluated many times anyway |
| 02:30 | tsdh | amalloy: But I'll try to see if that helps with the warnings. |
| 02:30 | amalloy | tsdh: i think you misunderstand my point about g being evaluated multiple times |
| 02:30 | amalloy | consider (defmacro square [x] `(* ~x ~x)) |
| 02:30 | tsdh | amalloy: Yes, I understand your point. |
| 02:31 | amalloy | okay |
| 02:31 | tsdh | amalloy: http://tsdh.wordpress.com/2011/09/28/defmacro-revisited/ |
| 02:31 | amalloy | at any rate i'd appreciate an upvote at http://dev.clojure.org/jira/browse/CLJ-865 to make sure this gets some attention, if you have permissions to do that |
| 02:35 | tsdh | amalloy: Hm, using a gensym for ~g indeed erases all reflection warnings. I don't understand why, though... |
| 02:36 | amalloy | tsdh: presumably vsubgraph is a macro in your program? |
| 02:36 | tsdh | amalloy: No, a function returning a proxy object. |
| 02:36 | amalloy | hm |
| 02:37 | amalloy | &(let [x '(vsubgraph blah)] (meta (second `(foo ^List ~x)))) |
| 02:37 | lazybot | ⇒ {:line 1} |
| 02:37 | amalloy | &(let [x '(vsubgraph blah)] (meta (second `(foo ~ ^List x)))) |
| 02:37 | lazybot | ⇒ {:line 1} |
| 02:38 | amalloy | well. i don't quite understand how it all works, but syntax-quote followed by unquote winds up discarding a lot of metadata |
| 02:39 | amalloy | i suspect my patch wouldn't help you here, given what lazybot is telling me |
| 02:39 | tsdh | Ok, I'm happy that it works now. |
| 02:39 | tsdh | And you have your upvote. |
| 02:39 | amalloy | *chuckle* thanks |
| 02:40 | tsdh | amalloy: I have an instance of that particular issue as well, where I need to type hint the returned object of a `case'. |
| 02:40 | amalloy | aha. well that would certainly help |
| 02:41 | amalloy | tsdh: ping hiredman (after the conj, i guess) if you want an explanation of the case we just discussed - i think he knows what's going on |
| 02:41 | tsdh | amalloy: Ok, thank you. |
| 02:45 | tsdh | amalloy: But using a let doesn't work in all cases, too. |
| 02:45 | tsdh | &(let [^java.awt.Image i (java.awt.image.BufferedImage. 10 10 1)] (.getWidth i)) |
| 02:45 | lazybot | ⇒ 10 |
| 02:45 | amalloy | $javadoc java.awt.Image |
| 02:45 | lazybot | http://download.oracle.com/javase/6/docs/api/java/awt/Image.html |
| 02:45 | tsdh | amalloy: Hm, here it issues a reflection warning that the call to getWidth cannot be resolved. |
| 02:46 | amalloy | tsdh: Image doesn't have a getWidth method |
| 02:46 | amalloy | only BufferedImage does, apparently |
| 02:46 | tsdh | amalloy: Sure it has. |
| 02:46 | tsdh | amalloy: abstract, thought. |
| 02:46 | amalloy | http://download.oracle.com/javase/6/docs/api/java/awt/Image.html#getWidth(java.awt.image.ImageObserver) takes an argument |
| 02:47 | amalloy | there is no (.getWidth foo) method, only (.getWidth foo bar) |
| 02:47 | tsdh | Argh! |
| 02:47 | amalloy | tsdh: but you could fix that case simply by removing the typehint altogether |
| 02:47 | tsdh | Yes, stupid me. :-) |
| 02:48 | amalloy | the compiler knows without being told that (BufferedImage. foo) will yield a BufferedImage object. it only had trouble because you said "Wait! Be careful! That could be any kind of Image!" |
| 02:52 | tsdh | I see. In the real code, it was infact that getWidth() in Image (and there I really have an Image gotten from ImageIcon.getImage()) has an ImageObserver argument. Now it gets it. Before, I simply was lucky that the underlying instance was in fact some Image subclass. |
| 02:53 | amalloy | ImageObserver looks ridiculous to me |
| 02:54 | amalloy | but c'est la vie - you have to live with java's crazy decisions |
| 02:55 | tsdh | Yep |
| 04:09 | ktsuji | ? |
| 04:09 | ktsuji | exit |
| 04:20 | jli | wrapping "dosync" around atom accesses/updates doesn't do anything, right? |
| 04:20 | jli | well, doesn't do anything for coordination |
| 04:30 | Chousuke | jli: yes. dosync only affects refs and agent sends |
| 04:31 | jli | cool |
| 04:40 | Blkt | good morning everyone |
| 04:49 | jli | where IS everyone |
| 04:49 | jli | conj :( |
| 04:54 | clgv | how can I create a function in a macro and call it in the code the macro returns? something like this: (defmacro bla [x, fname](let [f (fn [args] (println args) x)] `(defn fname [& ~'args] (~f ~'args)))) |
| 04:55 | clgv | ok. I could literally add the definition of f |
| 04:56 | clgv | ok thats working. I asked too early^^ |
| 04:57 | DerGuteMoritz | clgv: you should use gensym for the function name though |
| 04:57 | clgv | DerGuteMoritz: actually I should use ~ in front of it ;) |
| 04:59 | clgv | that works: (defmacro bla [x, fname](let [f `(fn [args#] (println args#) ~x)] `(defn ~fname [& ~'args] (~f ~'args)))) |
| 05:01 | DerGuteMoritz | alternatively, what should also work is something like (def foo (let [f (fn ...)] (fn [...] (f ...)))) |
| 05:02 | DerGuteMoritz | so you won't clutter the namespace |
| 05:03 | DerGuteMoritz | clgv: ^ |
| 05:03 | clgv | DerGuteMoritz: it was a minimal example of something bigger, where the macro is really needed |
| 05:03 | DerGuteMoritz | clgv: I mean expand to something like that |
| 05:04 | DerGuteMoritz | I'm typing from my phone right now so typing all that interpunctuation is a bit hard, thus only the expansion :-) |
| 05:07 | DerGuteMoritz | just use def instead of defn so you can extend the local scope of your fn with let |
| 05:08 | DerGuteMoritz | hmm thinking about it: doesn't defn always create a top-level binding? |
| 05:09 | DerGuteMoritz | so closing over defn like you originally did should also work, no? |
| 05:10 | clgv | yes defn always creates a root binding |
| 05:10 | clgv | in fact that doesnt matter, since the macro directly expanded in a toplevel defn ;) |
| 05:10 | DerGuteMoritz | hm ok but your original implementation with let over defn didn't work? |
| 05:11 | DerGuteMoritz | oh I missed a quote there |
| 05:12 | DerGuteMoritz | well try expanding to `(let ... (defn ...)) |
| 05:12 | DerGuteMoritz | should work from what I understand |
| 05:18 | clgv | I said it's already solved ;) |
| 05:18 | DerGuteMoritz | sure, just curious |
| 05:22 | DerGuteMoritz | are you expanding to two defns now? |
| 05:25 | bobnodes | hi |
| 05:26 | bobnodes | how do I do subqueries in ClojureQL? |
| 05:28 | clgv | DerGuteMoritz: no. It's similar to the defmacro statement I posted last |
| 05:30 | DerGuteMoritz | clgv: ah I see! |
| 05:47 | DerGuteMoritz | to all German users: there is also a #clojure-de channel now. so if you are interested in talking to local Clojurians, feel free to join :-) |
| 06:23 | DerGuteMoritz | sorry German users, I just discovered there already is #clojure.de :-) |
| 06:23 | clgv | right ;) |
| 06:23 | DerGuteMoritz | hehe |
| 06:28 | kzar | technomancy: I tried what you said last night but it now fails to push to Heroku "Heroku push rejected, error fetching custom build pack". (I did `heroku config:add BUILDPACK_URL=http://github.com/heroku/heroku-buildpack-clojure.git`.) |
| 08:48 | kephale | is there something like the theading macro that provides a reference to the thing being threaded? |
| 08:48 | kephale | ,(let [thing {:a 7} thing (assoc thing :b (dec (:a thing)))] thing) |
| 08:48 | kephale | &(let [thing {:a 7} thing (assoc thing :b (dec (:a thing)))] thing) |
| 08:48 | lazybot | ⇒ {:b 6, :a 7} |
| 08:49 | clgv | kephale: there were articles about something like that, but afaik there is nothing in core or contrib |
| 08:49 | kephale | clgv: aw… i have some ugly let statements like that which have 4-5 steps of updating the same map |
| 08:50 | clgv | kephale: how about 'update-in ? |
| 08:50 | clgv | (-> my-map (update-in [:key1] f param1) (update-in [:key2 :nested-key] g param2 param3)) ? |
| 08:55 | hugod | kephale: if update-in isn't sufficient, you might be interested in arg->> in https://github.com/pallet/thread-expr/blob/develop/src/pallet/thread_expr.clj#L269 |
| 08:55 | hugod | or arg-> even |
| 08:55 | kephale | clgv: i'll keep that strategy in mind. when hacking things together it has been a lot faster to use that re-definition strategy with let. however, i think using -> plus update-in would work in most if not all of the situations |
| 08:55 | kephale | hugod: oOoo |
| 08:57 | clgv | hugod: thats a nice one |
| 08:57 | kephale | though i must admit, it would be wonderful to be able to use %1 %2 |
| 09:15 | clgv | I still wonder why (if-not pred? then else) is defined as (if (not pred?) then else) and not as (if pred? else then) |
| 09:19 | lucian | clgv: probably no particular reason |
| 09:19 | clgv | lucian: would be more efficient, wouldnt it? |
| 09:20 | lucian | i'm not sure it matters |
| 09:20 | clgv | why introduce a 'not when it's a macro anyway... |
| 09:20 | lucian | it'd be one less function call, maybe. depending on what clojure compiles it to and how the jvm jit decides to inline |
| 09:21 | kephale | yeah, you'd hope that it is just compile-time overhead |
| 09:21 | clgv | well, 'not is a function using 'if ^^ |
| 09:22 | lucian | clgv: submit a patch |
| 09:23 | eiro | some korma user ? i would like to know if it's possible to deploy a schema defined in clojure |
| 09:23 | clgv | lucian: not that easy with clojure.core ;) |
| 09:24 | mdeboard | eiro: Korma doesn't do any table creation |
| 09:24 | mdeboard | $google clojure lobos |
| 09:24 | lazybot | [budu's Profile - GitHub] https://github.com/budu |
| 09:24 | eiro | ok thanks |
| 09:24 | lucian | clgv: that's sad |
| 09:24 | mdeboard | eiro: https://github.com/budu/lobos |
| 09:25 | eiro | wow. i'll read about it |
| 09:25 | eiro | thanks again |
| 09:25 | mdeboard | np |
| 09:26 | kephale | clgv: fork clojure, do your fix, rename it clgvojure and tout how it is more efficient than clojure : P |
| 09:27 | clgv | kephale: lol, actually I wanted to know if there is a reason to the current definition :P |
| 09:31 | lucian | :* |
| 09:32 | lucian | wrong window |
| 09:32 | mdeboard | lolll |
| 09:32 | Iceland_jack | lucian: ;* you too |
| 09:32 | lucian | Iceland_jack: why, thank you |
| 09:32 | Iceland_jack | :) |
| 09:37 | lucian | bah, i'm almost incapable of using for loops in python anymore |
| 09:38 | lucian | it's clojure's fault that i'm using so many comprehensions now |
| 09:40 | clgv | lucian: you can be glad then that you dont have to use c++ or similar ;) |
| 09:43 | lucian | three comprehensions and no loops. i'm being convertet, it seems https://bitbucket.org/lucian1900/blag/src/ff43c43bf394/models.py#cl-25 |
| 09:50 | mdeboard | lucian: comprehensions are still loops |
| 09:51 | lucian | mdeboard: sure, but they return expressions |
| 09:51 | lucian | instead of mutating sequences |
| 09:52 | mdeboard | Oh, you mean generator expressions |
| 09:52 | mdeboard | not (list) comprehensions |
| 09:53 | lucian | mdeboard: both list and generator comprehensions are geared towards creating new sequences as expressions |
| 09:53 | mdeboard | List comprehensions return lists, they're just geared toward aping the Haskell syntax for looping |
| 09:54 | mdeboard | generator expressions are nice though |
| 09:54 | lucian | sure,but they still don't mutate the existing lists. they return entirely new lists |
| 10:00 | mdeboard | Yeah but I'm just saying, list comprehensions really aren't functional at all. It's just instantiating a class and populating it from the processed contents of another class instance. it doesn't return an expression that gets evaluated lazily like generator exprs. |
| 10:00 | zerokarmaleft | https://twitter.com/#!/fakerichhickey <= lol who's doing this? |
| 10:03 | mytrile | Hey, guys. Not Clojure question, but I don't know how to find a solution. I'm running Aquamacs, but it seems that when I want to save a file it doesn't do it |
| 10:03 | clgv | zerokarmaleft: lol, what` |
| 10:03 | mdeboard | nice try, fake rich hickey |
| 10:05 | lucian | mytrile: try #emacs |
| 10:05 | mytrile | lucian: ok |
| 10:06 | mytrile | lucian: They'll kill me there |
| 10:06 | lucian | mdeboard: do you only see laziness as a requirement for being functional? |
| 10:08 | Chousuke | lazy evaluation has good synergy with functional programming but that's it :P |
| 10:09 | TimMc | ngoc? |
| 10:09 | mdeboard | lucian: obviously not, but I completely fail to see how a list object in Python has any relation to a functional paradigm. |
| 10:09 | lucian | Chousuke: that's my view as well |
| 10:09 | lucian | mdeboard: not a list object, a list comprehension |
| 10:10 | lucian | mdeboard: in case you didn't realise, list comprehensions don't mutate the original list |
| 10:10 | zerokarmaleft | TimMc: no idea |
| 10:10 | lucian | mdeboard: they are exactly as functional as generator comprehensions, just not lazy |
| 10:11 | theignorati | why is swing so confusing |
| 10:11 | lucian | theignorati: because enterprise. can you afford to use one of the wrappers? |
| 10:11 | theignorati | maybe, which one should I look at? |
| 10:11 | mdeboard | lucian: List comprehensions are immediately evaluated to an object with mutable state. How is that functional? |
| 10:12 | lucian | mdeboard: because they create a new list from an old list, without mutating the original one |
| 10:12 | lucian | theignorati: there was a thing called seesaw |
| 10:12 | mdeboard | That is a stretch. |
| 10:13 | lucian | theignorati: this https://github.com/daveray/seesaw |
| 10:14 | theignorati | I'm mostly having issues with the layout, will that help? |
| 10:14 | lucian | theignorati: it's a DLS-ish thing. probably not without rewriting everything to use ut |
| 10:15 | lucian | mdeboard: i guess i disagree. looks like a map with an optional filter to me :) |
| 10:15 | mdeboard | lucian: It's just syntactic sugar under the hood |
| 10:15 | lucian | mdeboard: i know, but it acts the same way |
| 10:31 | kzar | cemerick: Do you know what clutch's get-database expects when given a string? I'm passing it the cloudant URL with "/dbname" appended but I'm getting this error: "IOException CouchDB Response Error: 400 Bad Request com.ashafa.clutch.http-client/get-response (http_client.clj:70)". The url is structured like this: https://user:pass@server.cloudant.com/dbname. (I never had any problems before when I was passing get-dat |
| 10:31 | kzar | abase a map of the settings.) |
| 10:32 | cemerick | kzar: which version of clutch? |
| 10:33 | kzar | cemerick: [com.ashafa/clutch "0.2.5-SNAPSHOT"] (Reason why I'm trying to use a URL now is that's how Heroku does it.) |
| 10:33 | cemerick | kzar: you should at least be on the 0.2.5 release :-) |
| 10:34 | kzar | cemerick: Oops, let me try that |
| 10:34 | cemerick | kzar: I don't think that'll change anything, just saying. |
| 10:34 | cemerick | it looks like that should work |
| 10:36 | kzar | cemerick: When I put the URL in my browser it works too |
| 10:36 | cemerick | String URLs were sort of 2nd-class citizens in clutch <= 0.2.5 |
| 10:36 | mjwhitt | time to travel ... to the conj! |
| 10:36 | cemerick | Not the case in 0.3.0, FWIW. |
| 10:37 | redinger | mjwhitt: Happy travels! See you soon |
| 10:37 | zerokarmaleft | mjwhitt: have a safe trip |
| 10:37 | cemerick | kzar: I'm prepping for my conj talk, so can't really try to replicate the issue. Maybe send a message to the ML so I can take a look later/ |
| 10:37 | cemerick | ? |
| 10:37 | mjwhitt | thanks |
| 10:39 | kzar | cemerick: Hmm no worries, sorry to nag you. I figure it's worth trying 0.3.0 snapshot see if that helps |
| 10:40 | cemerick | kzar: No worries. :-) 0.3.0-SNAPSHOT should absolutely work — but there are some API changes compared to 0.2.x http://groups.google.com/group/clojure-clutch/browse_frm/thread/36e3bbe52851c6dd |
| 10:40 | cemerick | kzar: definitely report your experience with 0.3.0-SNAPSHOT there if you have a chance |
| 10:42 | kzar | cemerick: Bugger OK lol, will do! |
| 10:43 | cemerick | kzar: yeah, sorry for that; had to make the break to enable various future enhancements |
| 11:04 | duck1123 | bah, korma doesn't allow you to define an entity named databases because it doesn't quote it's names |
| 11:05 | duck1123 | ahh, I figured out how to get around that |
| 11:10 | schnorrer | speaking of korma, does it allow making outer joins? |
| 11:15 | duck1123 | I think it might only support left joins via the entities, but I'm sure you could use the bits to construct better queries |
| 11:15 | duck1123 | I'm just getting started on porting my clj-record code over |
| 11:16 | schnorrer | I must be doing something wrong then |
| 11:18 | duck1123 | I think the biggest problem with korma is it's going to make me want to naked-use it, but that will just take discipline. |
| 11:20 | kzar | cemerick: I've replied but it didn't show up in google groups, not sure why. Anyway here's the gist about my problem with 0.3.0-snapshot https://gist.github.com/1351873 . I know you're busy, not asking you to look at it now! |
| 11:22 | cemerick | kzar: just (get-database "clutch_test_db") |
| 11:22 | cemerick | (proper documentation perpetually 'coming soon' :-P) |
| 11:22 | pyr | multimethods don't support multiple arities, right ? |
| 11:22 | kzar | cemerick: Well the point was that it fails when you give it a map, what if you want to set more options like a password? |
| 11:23 | melipone | hi! how do I get the classpath in clojure? I recall seeing that somewhere ... |
| 11:23 | pyr | ,(System/getProperty "java.clas.path") |
| 11:24 | pyr | or something to that effect |
| 11:25 | cemerick | kzar: either have a URL with the authentication info in-line, or do e.g. (assoc (com.ashafa.clutch.utils/url "clutch_test_db") :username "foo" :password "bar") |
| 11:25 | pyr | &(System/getProperty "java.class.path") |
| 11:25 | lazybot | java.security.AccessControlException: access denied (java.util.PropertyPermission java.class.path read) |
| 11:25 | pyr | heh, figures |
| 11:25 | kzar | cemerick: gotya OK thanks |
| 11:27 | cemerick | kzar: there's a URL record in the utils namespace, but it's a little low-level to create directly. Adding some defaults into its map factory function seems like a good idea. |
| 11:28 | pyr | so yes, multimethods can accept multiple arities |
| 11:30 | pyr | i'm still not sure how the best way to interact is with a non-threadsafe java object instance is |
| 11:30 | pyr | agents are supposedly fine |
| 11:30 | pyr | but they can induce race conditions |
| 11:30 | pyr | (between send and deref) |
| 11:30 | pyr | so they're only fine for cumulative operations |
| 11:36 | schnorrer | uhm, korma seems ignoring the join type param for now |
| 11:36 | schnorrer | every time I get a left join |
| 11:38 | schnorrer | (select ... (join :right ...)) results in a left join, too |
| 11:52 | ADWong | Quick question: If I have a data structure that looks like this, [[1 2 3] [4 5 6]] how can I convert it to [1 2 3 4 5 6]? |
| 11:52 | TimMc | ADWong: The answer is *not* flatten. |
| 11:52 | TimMc | :-) |
| 11:53 | TimMc | ADWong: You can (apply concat ...), or avoid producing such a datastructure. |
| 11:53 | TimMc | (for and mapcat being good at that) |
| 11:55 | konr | is there already a (between x 1 10) to avoid using (and (> ...) (< ...))? |
| 11:55 | ADWong | TimMc: Thanks for the quick response. Is there anything inherently wrong with the flatten function? |
| 11:56 | ADWong | Oh never mind. I see why it doesn't work. Thanks again. |
| 11:56 | tensorpudding | you'll need to vec too |
| 11:57 | TimMc | ADWong: flatten is bad if you don't know what the elements of your vectors might be. |
| 11:57 | TimMc | It's kind of overkill too. |
| 11:58 | fronx | konr: (find-doc "between") says: "No." |
| 11:58 | tensorpudding | using (apply concant ...) will return a list |
| 11:59 | ADWong | tensorpudding: I think apply concat is the way to go. Flatten really flattens everything. I only want to flatten the first "layer". |
| 11:59 | TimMc | ADWong:Do you need the result to be a vector, or just any ol' collection? |
| 12:00 | TimMc | konr: Why do you want that? |
| 12:00 | ADWong | TimMc: Any collection will do. |
| 12:01 | TimMc | cool, no need for vec then |
| 12:01 | konr | TimMc: to avoid adding more lines. Wrote my own now :) |
| 12:01 | ADWong | Even if I needed it as a vector couldn't I just (vec …. ) it after wards? |
| 12:01 | TimMc | konr: you know that (< 1 x 10) is valid, right? |
| 12:02 | konr | TimMc: oh, i didn't know that! Thanks |
| 12:02 | TimMc | konr: it's pretty fantastic |
| 12:02 | TimMc | (I didn't read your original question properly at first...) |
| 12:03 | TimMc | ADWong: Yeah, that's what tensorpudding was saying. |
| 12:14 | rfgpfeiffer | clojurebot: seen rfgpfeiffer |
| 12:15 | hiredman | ~ping |
| 12:18 | duck1123 | Does anyone know if in korma there is a simple way to query across relationships? ie A has many B, i have an A and I just want the sequence of B |
| 12:19 | rfgpfeiffer | konr: are you the konrad who wrote clojure.algo.generic? |
| 12:19 | konr | rfgpfeiffer: nope! |
| 12:19 | tensorpudding | i'm trying to find that ants demo that rhickey made but i can't find it |
| 12:20 | tensorpudding | the links for it seem to all be dead |
| 12:20 | tensorpudding | probably because it's from 2008 |
| 12:22 | duck1123 | tensorpudding: https://gist.github.com/1093917 |
| 12:28 | tensorpudding | is this still valid clojure code? |
| 12:28 | tensorpudding | thanks for the link |
| 12:28 | duck1123 | no idea |
| 12:37 | gfredericks | interop question: I need to generate a bean-style java class with getters and setters. Is the simplest way to do that with a macro that defs a custom protocol with the getter and setter methods and then a type to go with it? |
| 12:42 | gfredericks | or maybe just gen-class... |
| 12:52 | duck1123 | gfredericks: the macro would have to know how you're storing state, that would make it a bit difficult |
| 12:52 | duck1123 | if you find something, I'd like to know |
| 13:04 | TimMc | ditto |
| 13:10 | gfredericks | duck1123: TimMc: it seems like an easy implementation either way: e.g., for the deftype route the macro caller gives a list of field names, which the macro makes the fields of the deftype |
| 13:10 | gfredericks | for gen-class you can have a "state" variable; I forget the details of that, but I figure that would work too. Maybe I'm not understanding the difficulty? |
| 13:22 | TimMc | gfredericks: I think the difficulty is that we don't know *why* you need a bean, so it's hard to say what the best implementation is. |
| 13:25 | gfredericks | well I'm hooking into this java interface that for the most part is just a function wrapper, so I have to implement a method. The bean part comes in because if I want my method to be customizable I have to provider setters for fields, which the java will populate before calling the primary method |
| 13:25 | gfredericks | so as a caller of the macro, I'd supply a list of field names and an implementation of the primary method |
| 13:25 | gfredericks | so as long as the field names are visible from the body of my method, I don't care how the macro accomplishes storing the state |
| 13:26 | TimMc | So, a bunch of one-time setters. |
| 13:26 | TimMc | in place of a constructor |
| 13:26 | gfredericks | yeah, I think if they were one-time it would probably work |
| 13:26 | gfredericks | TimMc: yep. actually now that you mention it I probably have to provide an empty constructor, so does that rule out deftype? |
| 13:27 | duck1123 | I could certainly see a dsl to make defining bean-style objects nicer |
| 13:27 | TimMc | and it will only be hammered on in one thread? |
| 13:27 | gfredericks | TimMc: I would expect so |
| 13:27 | TimMc | ,(find-doc #bean) |
| 13:27 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.ClassNotFoundException: bean> |
| 13:27 | TimMc | ,(find-doc #"bean") |
| 13:27 | clojurebot | ------------------------- |
| 13:27 | clojurebot | clojure.core/bean |
| 13:27 | clojurebot | ([x]) |
| 13:27 | clojurebot | Takes a Java object and returns a read-only implementation of the |
| 13:27 | clojurebot | map abstraction based upon its JavaBean properties. |
| 13:28 | duck1123 | you need some sort of defbean |
| 13:28 | TimMc | yup |
| 13:28 | gfredericks | and the ability to implement interfaces as well |
| 13:31 | duck1123 | Times like this, I wish google wave had worked out, it would be nice to throw up a clojure code block and work out a mock-up |
| 13:31 | gfredericks | I think there's an interactive multiuser pastie somewhere... |
| 13:33 | TimMc | Maybe I should throw up an Emacs server... :-) |
| 13:33 | gfredericks | maybe this is it: http://collabedit.com/sxm4t |
| 13:33 | TimMc | ssh + screen + Emacs + swank |
| 13:34 | duck1123 | If you could set it up so that you could re-load the vm at the press of a button, that'd be neat |
| 13:35 | duck1123 | and/or just lock down all permissions appropriately |
| 13:35 | TimMc | duck1123: follow the link! |
| 13:37 | patchwork | So, when I get a compile error, how do I know where that happened? The error is specific, but the stacktrace only shows clojure.lang.Compiler errors |
| 13:38 | TimMc | duck1123, gfredericks: Ugh, buggy |
| 13:39 | TimMc | half my keystrokes from the Chat Here were ending up in the main edit area |
| 13:40 | TimMc | patchwork: Usually it tells you what file and line number were at fault. |
| 13:40 | patchwork | TimMc: that is what I would think |
| 13:41 | gfredericks | TimMc: yeah it's definitely not the slickest thing... |
| 13:41 | TimMc | patchwork: What message are you getting? |
| 13:41 | patchwork | Unable to resolve symbol: this in this context |
| 13:41 | patchwork | [Thrown class java.lang.RuntimeException] |
| 13:41 | theignorati | how do I transform a list into a Java array of strings? |
| 13:41 | patchwork | I will gist the stacktrace |
| 13:42 | duck1123 | (into-array String |
| 13:42 | theignorati | thanks |
| 13:42 | patchwork | https://gist.github.com/1352421 |
| 13:42 | TimMc | ugh this thing is so broken |
| 13:42 | patchwork | There are two entries from the backtrace that refer to my app, but they both refer to line 1 |
| 13:43 | patchwork | which does not have anything referencing "this" |
| 13:43 | gfredericks | TimMc: okay, not using chat :) |
| 13:43 | patchwork | Is this because I am using swank possibly? I have run into this before |
| 13:44 | TimMc | gfredericks: The DSL should say ^String foo and be done with it -- get and set can be created by the macro. |
| 13:44 | TimMc | gfredericks: Or... if you have an interface that demands a getX, is that going to be a problem? |
| 13:45 | gfredericks | TimMc: definitely. I didn't write that code |
| 13:45 | TimMc | haha, it was duck! |
| 13:45 | gfredericks | oh that duck |
| 13:45 | duck1123 | that was earlier ideas I was throwing out |
| 13:45 | TimMc | k |
| 13:46 | gfredericks | I like the metadata for type hints. I personally will just use Objects |
| 13:46 | duck1123 | I tried to set up a wave, but am incapable of copying the link and pasting it into emacs, it seems |
| 13:46 | gfredericks | google wave still exists? |
| 13:46 | duck1123 | yes |
| 13:47 | duck1123 | it's a lot slower now |
| 13:47 | duck1123 | they must have taken all the servers away |
| 13:48 | gfredericks | I would have set up a terminal for us by now, but I don't use emacs so I'd be embarrassed |
| 13:48 | TimMc | haha |
| 13:48 | TimMc | also Emacs isn't multiuser |
| 13:48 | TimMc | by default |
| 13:48 | gfredericks | tmux |
| 13:48 | TimMc | multicursor, that is |
| 13:49 | gfredericks | oh |
| 13:49 | gfredericks | I've never used a multicursor text editor |
| 13:49 | gfredericks | that would be nifty. |
| 13:49 | TimMc | you have now |
| 13:49 | TimMc | There is a multicursor Eclipse plugin that syncs over XMPP. |
| 13:49 | gfredericks | collabedit: the way of the future |
| 13:49 | duck1123 | it's multi cursor if you each were connected to the same emacs server |
| 13:49 | TimMc | Off to a meeting... :-/ |
| 13:49 | gfredericks | TimMc: seeya |
| 13:49 | TimMc | duck1123: Oh, nice. Didn't know that. |
| 13:49 | gfredericks | thx for codez |
| 14:18 | gfredericks | #clojure is boring during conj. |
| 14:19 | Raynes | gfredericks: I'm sitting in Atlanta waiting on my flight. :>: |
| 14:20 | gfredericks | Raynes: I'm sitting in my office not going to clojure conj. Which is ironic because I'm close enough to drive there. |
| 14:20 | duck1123 | I wish I was at the conj |
| 14:21 | gfredericks | I was there last year. I'm just too busy at the moment. |
| 14:21 | duck1123 | I couldn't talk my boss into paying, and can't afford to send myself |
| 14:21 | gfredericks | what's the syntax for accessing a public field on an object? |
| 14:22 | mefesto | gfredericks: (.field obj) i think? |
| 14:23 | gfredericks | well if it doesn't work I'll find out eventually |
| 14:23 | mefesto | ,(.x (java.awt.Point. 1 2)) |
| 14:23 | clojurebot | 1 |
| 14:24 | gfredericks | (inc mefesto) ; for knowing an example in the std library |
| 14:24 | gfredericks | (dec lazybot) ; for not handling karma |
| 14:24 | lazybot | You want me to leave karma the same? Fine, I will. |
| 14:24 | gfredericks | lazybot: go away. nobody wants you here. |
| 14:26 | bhenry | anyone here at the sheraton already? |
| 14:26 | TimMc | devn: Did you get shelter for the 9th yet? |
| 14:26 | bhenry | i want to know if there's a way for conj goers to get around the 10 dollar per day internet charge |
| 14:27 | TimMc | bhenry: Yeah, go to an Econolodge. -.- |
| 14:27 | TimMc | The cheap hotels have the best wifi. |
| 14:27 | TimMc | s/wifi/internet access/ |
| 14:27 | bhenry | timmc okay i'll map it. |
| 14:27 | TimMc | heh |
| 14:27 | bhenry | this entire block is under construction |
| 14:28 | TimMc | Seriosuly though, they should be providing complimentary wireless for a con. |
| 14:29 | gfredericks | hotels are weird. |
| 14:29 | gfredericks | I'm not sure where they got the idea to make internet access really complicated. |
| 14:30 | gfredericks | you'd think they could at least do it as well as coffeeshops. |
| 14:30 | TimMc | Expensive hotels charge for internet because their clients are mostly suits who can get reimbursed for travel expenses. |
| 14:31 | gfredericks | yeah! we're the 99%! |
| 14:31 | gfredericks | s/yeah! we're the 99%!/good point |
| 14:31 | TimMc | They nickel and dime all their customers because they *can*. |
| 14:32 | TimMc | Cheap hotels don't, so they have to provide some perqs for free. |
| 14:32 | TimMc | also I am back from my meeting |
| 14:32 | gfredericks | how'd it go? |
| 14:33 | TimMc | boring |
| 14:33 | TimMc | But there was some construction work going on outside. |
| 14:48 | cemerick | Who needs hotel wifi when there's 4g and tethered phones? |
| 14:49 | cemerick | :-P |
| 14:50 | TimMc | I need to get a data plan... |
| 14:50 | gfredericks | I only have 200mb/mo |
| 14:50 | devn | I'm grandfathered in still under the unlimited AT&T data |
| 14:51 | devn | + jailbroken iphone = win |
| 14:51 | gfredericks | this month I unintentionally used 180mb on the first day |
| 14:51 | devn | I'm surprised. I've heard of people getting nastygrams for using too much data under ATT, but I've done 16GB in the course of a week and never heard a peep |
| 14:55 | tensorpudding | 16 GB on your phone? |
| 14:55 | tensorpudding | that seems pretty excessive |
| 14:55 | albino | the jar files are kind of big |
| 14:55 | TimMc | all that IRC'ing |
| 14:56 | tensorpudding | which ones? |
| 14:56 | tensorpudding | they do add up |
| 14:57 | tensorpudding | clojure by itself is 3 megabytes |
| 14:59 | TimMc | Biggest object in my .m2 is a 570 MB SDK. |
| 15:00 | TimMc | but everything else is way smaller |
| 15:05 | tolstoy | gfredericks: So far, I've seen them in webnoir. With the recent update, I only see one, so it's getting better! |
| 15:05 | gfredericks | tolstoy: I'm too lazy to even figure out which library is generating them. |
| 15:06 | gfredericks | but I'm not too lazy to complain about it! |
| 15:06 | gfredericks | or meta-complain about my own complaints! |
| 15:06 | tolstoy | Heh. |
| 15:06 | duck1123 | it's gotten a lot better, I switched to 1.3 really early. I only have like 3 left |
| 15:07 | duck1123 | I just wish the var warnings were fully qualified |
| 15:08 | tolstoy | Over in the Scala world, the community seems to have gotten better at dealing with upgrades. More likely, lib writers are tired of complaints. :) |
| 15:08 | tolstoy | This whole splitting apart of contrib seems really promising. |
| 15:09 | tolstoy | Oh, whatever. I just like Clojure a whole lot. |
| 15:09 | gfredericks | is there a list somewhere of what clojure 1.4 is going to be about? |
| 15:09 | duck1123 | it's a big pain now, but a good thing in the long run |
| 15:15 | kencausey | I'm feeling really stupid but I can't figure out how to access something like the javadoc function in 1.3. |
| 15:16 | TimMc | it moved |
| 15:16 | TimMc | repl utils or something? |
| 15:16 | TimMc | clojurebot: Where did contrib go? |
| 15:16 | clojurebot | well... it's a long story: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go |
| 15:17 | TimMc | hrm, don't see it |
| 15:17 | kencausey | Are you sure it's contrib? It is in the offical API docs and I can see it in the clojure.jar |
| 15:18 | kencausey | Or am I misinterpreting the list of namespaces on the left of http://clojure.github.com/clojure/index.html ? |
| 15:20 | gfredericks | TimMc: duck1123: this seems to work and I believe is sufficient for my needs: https://gist.github.com/1352844 |
| 15:30 | duck1123 | gfredericks: Make it a library. I might have use for that somewhere |
| 15:30 | kencausey | OK, I don't quite get this, maybe my problem is something is screwed up either with my lein or swank install or something. If I do the basic java -cp clojure.jar clojure.main startup I can use the doc command. But if I clojure-jack-in (within emacs) while in a buffer that holds a project.clj that references [org.clojure/clojure "1.3.0"] and I try doc in the resulting slime connection I get "unable |
| 15:30 | kencausey | to resolve symbol: doc in this context" |
| 15:30 | gfredericks | duck1123: come up with a clever name for me |
| 15:31 | brehaut | kencausey:(use 'clojure.repl) ? |
| 15:33 | duck1123 | gfredericks: (musical.fruit/defbean) ? |
| 15:33 | gfredericks | duck1123: what's musical.fruit? |
| 15:33 | kencausey | brehaut: I will try that, out of desperation I just wiped my lein install and am refreshing it, thanks. |
| 15:34 | brehaut | kencausey: alternatively i think C-c C-d does the lookup for you |
| 15:34 | gfredericks | wait hmm |
| 15:34 | kencausey | brehaut: Thanks but this doc reference is just an example of an overall problem and not really my focus. |
| 15:34 | brehaut | kencausey: the slime repl is different to a lein repl |
| 15:34 | kencausey | OK, great, more repl types/contexts ;) |
| 15:34 | duck1123 | I'm a big fan of naming projects in Lojban. dembi.core/defbean |
| 15:35 | brehaut | kencausey: the lein repl brings in a bunch of useful namespaces by default; the slime one doesnt appear to |
| 15:36 | hiredman | well, lein repl uses clojure.main/repl |
| 15:36 | gfredericks | duck1123: would a more broadly scoped class-generation library be more useful? |
| 15:36 | kencausey | That's OK, really I was trying to figure out how to refer to the appropriate namespaces and nothing seemed to be working |
| 15:36 | hiredman | the sawnk repl doesn't |
| 15:36 | hiredman | which is kind of a drag |
| 15:37 | duck1123 | gfredericks: probably. |
| 15:38 | kencausey | OK, well at least doc is now working in the swank repl, I have no idea what went wrong there before. Continuing... |
| 15:38 | gfredericks | duck1123: thank you for alerting me to lojban. |
| 15:38 | duck1123 | .ui |
| 15:39 | kencausey | OK, so back to javadoc for a moment. Am I wrong in thinking that clojure.java.javadoc is in the clojure.jar? |
| 15:39 | kencausey | (again this is for 1.3) |
| 15:40 | kencausey | if it is should I not be able to refer to the javadoc function as clojure.java.javadoc.javadoc ? |
| 15:42 | scottj | you have to require it first I think, then it's clojure.java.javadoc/javadoc maybe |
| 15:42 | raek | kencausey: clojure.java.javadoc/javadoc |
| 15:43 | raek | after running (require 'clojure.java.javadoc) |
| 15:43 | raek | (it is included in clojure since version 1.2) |
| 15:43 | kencausey | raek: Thanks, my stupidity, among other things, involved that /. |
| 15:45 | cemerick | devn, gfredericks: I downloaded xcode over sprint 4g some months ago. Faster than my home wifi. I think it was in the GB area. |
| 15:46 | scottj | I think xcode is ~3-4GB |
| 15:46 | cemerick | whatever it was; sprint ate it up |
| 15:54 | kencausey | OK, correction. As I mentioned before I reinstalled lein but I also wiped the previously created project and created it anew. Of course lein set it up for 1.2.1 which I failed to notice so my previous mentioned success was with 1.2.1, not 1.3.0 as intended. Changing it to 1.3.0 now requires that I (use 'clojure.repl) to have doc at hand, but it works once that is done. |
| 17:08 | gfredericks | is maven really slow about downloading stuff, or do I have unrealistic expectations? |
| 17:09 | brehaut | gfredericks: its simulating the java experience for you |
| 17:09 | brehaut | for each resource |
| 17:09 | gfredericks | I swear it takes it ten seconds to get an xml file. |
| 17:10 | brehaut | gfredericks: exactly. it starts a new jvm |
| 17:10 | gfredericks | brehaut: it can't really be that dumb can it? |
| 17:10 | brehaut | gfredericks: its sad that it wasnt obviously a joke :( |
| 17:10 | gfredericks | inorite |
| 17:11 | tensorpudding | is maven what lein uses? |
| 17:11 | gfredericks | yeah |
| 17:11 | gfredericks | I'm currently getting a full eclipse treatment |
| 17:13 | gfredericks | for some reason it's not very straightforward for me to get eclipse to update a snapshot :/ |
| 17:13 | brehaut | eclipse is a system i want to like and use but never can |
| 17:14 | gfredericks | I never use it unless I have to |
| 17:14 | gfredericks | it's definitely nice for browsing java code. |
| 17:15 | brehaut | yeah gigantic doesnt begin to describe it ;) |
| 17:15 | brehaut | i have high hopes for ccw though |
| 17:16 | gfredericks | I generally can't get into GUI stuff, since it's never clear how to script things, if it's even possible |
| 17:17 | brehaut | gfredericks: i generally cant get into the idea that something that is 25 years old is the highest point for a developers text editor ever ;) |
| 17:17 | brehaut | (i nevertheless use emacs, but still) |
| 17:17 | gfredericks | brehaut: text hasn't changed all that much in 25 years :P |
| 17:17 | agumonkey | yesterday I discovered how to create menus in emacs, then I remembered the pain to build the simplest menu plugin in eclipse. |
| 17:17 | gfredericks | it's still strings of characters... |
| 17:18 | brehaut | gfredericks: but the text we edit isnt :P |
| 17:18 | gfredericks | brehaut: as programmers we have less of a need for GUIs because we can automate just about anything we can imagine |
| 17:19 | TimMc | It's nice to have things automated for you. |
| 17:19 | brehaut | gfredericks: im not talking about gui or not, it just suggesting that emacs and vi arent the greats though in text editing ;) |
| 17:19 | TimMc | I suppose you could technically hitch a headless Eclipse to Emacs... |
| 17:20 | duck1123 | I'd like to see a clojure-based text editor that copies everything good about emacs as closely as possible |
| 17:20 | duck1123 | clooj isn't quite there |
| 17:20 | gfredericks | I suppose "automated" and "graphical" are orthogonal? |
| 17:21 | brehaut | gfredericks: probabl |
| 17:21 | gfredericks | so why do GUIs exist? so people can use mice? |
| 17:21 | gfredericks | and have information arranged in complex ways? |
| 17:23 | gfredericks | on second thought, I have to go. |
| 17:25 | clojurebot | Cool story bro. |
| 18:03 | arohner | with midje, is it possible to specify only some of the arguments when testing called count? |
| 18:05 | duck1123 | arohner: you can use the anything checker |
| 18:05 | arohner | duck1123: right, but I want to specify some of the arguments, but not all of them |
| 18:07 | duck1123 | I haven't gotten that advanced with midje yet, but cant you mix and match them? |
| 18:08 | duck1123 | (provided (called 2 anything) => 1 :times 1) |
| 18:08 | arohner | oh, didn't try that. I will. Thanks |
| 18:13 | arohner | duck1123: doesn't appear to work |
| 18:15 | duck1123 | drats. I figured that would. What's the error? |
| 18:16 | arohner | "You claim the following was needed, but it was never used" |
| 18:16 | arohner | then lists the fn I provided |
| 18:40 | arohner | https://github.com/marick/Midje/wiki/Checkers-within-prerequisites seems to have instructions for how to do this |
| 19:31 | goodieboy | could someone recommend a simple way to get http authentication into my noir/compojure app? |
| 19:33 | zodiak | goodieboy, ring-basic-authentication ? |
| 19:35 | goodieboy | zodiak: yep exactly, thanks! |
| 19:35 | zodiak | goodieboy, not a problem. fwiw, I started off doing noir, and then I found that ring is almost as simple :) |
| 19:36 | goodieboy | zodiak: i've had that question/thought in my head too. |
| 19:36 | duck1123 | if you don't need the level of abstraction that noir provides, you don't have to use it |
| 19:36 | brehaut | even if you want to stick with noirs level of abstraction, its worth the small amount of time it takes to learn ring and its associated tools |
| 19:37 | zodiak | agreed :) |
| 19:50 | goodieboy | yep, agreed |
| 20:44 | moogatronic | high latency free hotel wifi. =) |
| 20:49 | mjwhitt | woah woah woah, free hotel wifi? |
| 20:49 | mjwhitt | all I found was ones that tried to get me to pay |
| 20:50 | mjwhitt | my android phone with unlimited data = free wifi for me ;) |
| 20:59 | pdk | ,(* 40 9) |
| 20:59 | clojurebot | 360 |
| 21:08 | TimMc | ,(+ (* 13 28) 1) |
| 21:08 | clojurebot | 365 |
| 21:09 | brehaut | TimMc: are you an accountant? |
| 21:09 | TimMc | and thus my proposal for 13 4-week months and one holiday |
| 21:09 | TimMc | brehaut: What? |
| 21:09 | mjwhitt | clojurebot's most used as... a calculator |
| 21:10 | brehaut | TimMc: bean counters like to use a 13 month year because it makes monthly salary payments more managable |
| 21:11 | bhenry | brehaut: but then quarters are a pain. |
| 21:11 | brehaut | bhenry: thats their problem, not mine |
| 21:11 | goodieboy | how do i select a random element from a vector? |
| 21:11 | brehaut | ,(rand-nth [:a :b :c]) |
| 21:12 | clojurebot | :b |
| 21:12 | brehaut | goodieboy: ^ |
| 21:12 | goodieboy | brehaut: awesome thanks! |
| 21:12 | goodieboy | brehaut: what about shuffle? |
| 21:13 | brehaut | ,(apropos shuffle) |
| 21:13 | clojurebot | () |
| 21:13 | bhenry | ,(first (shuffle [:a :b :c])) |
| 21:13 | clojurebot | :a |
| 21:13 | bhenry | ,(first (shuffle [:a :b :c])) |
| 21:13 | clojurebot | :c |
| 21:13 | brehaut | oh. missed a quote. thanks bhenry |
| 21:14 | goodieboy | perfect |
| 21:17 | brehaut | goodieboy: do you know about apropos ? |
| 21:17 | brehaut | and find-doc |
| 21:17 | goodieboy | brehaut: no |
| 21:18 | brehaut | goodieboy: apropos returns a list of symbols that match a query |
| 21:18 | brehaut | ,(apropos 'part) |
| 21:18 | clojurebot | (partition-by partition-all partial partition) |
| 21:18 | brehaut | you can pass symbols, strings, regexps etc to it |
| 21:18 | brehaut | (doc find-doc) |
| 21:18 | clojurebot | "([re-string-or-pattern]); Prints documentation for any var whose documentation or name contains a match for re-string-or-pattern" |
| 21:18 | brehaut | but you dont want to run find-doc in irc |
| 21:19 | bhenry | brehaut: what namespace is apropos in? |
| 21:19 | brehaut | (source apropos) |
| 21:19 | goodieboy | brehaut: nice, very nice |
| 21:19 | brehaut | ,(source apropos) |
| 21:19 | clojurebot | Source not found |
| 21:19 | brehaut | bah |
| 21:19 | bhenry | ,(meta apropos) |
| 21:19 | clojurebot | nil |
| 21:19 | bhenry | humbug |
| 21:19 | brehaut | ,clojure.repl/apropos |
| 21:19 | clojurebot | #<repl$apropos clojure.repl$apropos@1c06a6d> |
| 21:20 | bhenry | cool |
| 21:20 | bhenry | good to know |
| 21:20 | brehaut | i think find-doc is in there too |
| 21:20 | brehaut | the only surprising one is javadoc which is in clojure.java.javadoc |
| 21:21 | brehaut | also, in 1.3 doc knows about special forms (although its documentation is brief) |
| 21:21 | brehaut | ,(doc let*) |
| 21:21 | clojurebot | I don't understand. |
| 21:22 | brehaut | &(doc let*) |
| 21:22 | lazybot | ⇒ "Special: let*; " |
| 21:22 | brehaut | thats particular brief. |
| 21:31 | brehaut | whats up with nthnext, and how does it differ from drop ? |
| 21:31 | brehaut | (aside from argument order) |
| 21:33 | brehaut | aha, laziness |
| 21:37 | TimMc | ,(doc ffirst) |
| 21:38 | clojurebot | "([x]); Same as (first (first x))" |
| 21:38 | TimMc | It's caar :-D |
| 21:38 | brehaut | :) |
| 21:38 | TimMc | naughty |
| 21:38 | brehaut | at least theres no ffnfnnfnfirst |
| 21:38 | TimMc | there had better not be a ##(doc fffirst) |
| 21:38 | lazybot | java.lang.RuntimeException: Unable to resolve var: fffirst in this context |
| 21:39 | TimMc | good |
| 22:14 | mjwhitt | user=> (super-first "first" [1 2 3]) |
| 22:14 | mjwhitt | 1 |
| 22:14 | mjwhitt | user=> (super-first "ffirst" [[4 5 6] 2 3]) |
| 22:14 | mjwhitt | 4 |
| 22:14 | mjwhitt | user=> (super-first "fffirst" [[[7 8 9] 5 6] 2 3]) |
| 22:14 | mjwhitt | 7 |
| 22:15 | mjwhitt | muah ah ah |
| 22:15 | mjwhitt | </super lame clojure> |
| 22:15 | callen | mjwhitt: you're sick. |
| 22:15 | mjwhitt | I appologize |
| 22:15 | mjwhitt | hehe |
| 22:15 | callen | mjwhitt: take some medicine. |
| 22:15 | brehaut | mjwhitt: looks like a narrow reinterpretation of zippers? |
| 22:15 | callen | mjwhitt: also, it's a birthday tomorrow! |
| 22:16 | mjwhitt | this is the first day I have ever actually written any clojure myself |
| 22:16 | mjwhitt | so it's a "hey I did *something*" day |
| 22:16 | brehaut | mjwhitt: congrats |
| 22:16 | callen | mjwhitt: well done sir. too bad you can't make a reader macro to intercept functions of the form [f]+irst |
| 22:17 | callen | so, how often do ex-CL'ers bitch about that here? |
| 22:17 | mjwhitt | yeah, that's what I wanted to do at first, especially since I'm used to ruby / method-missing / metaprogramming |
| 22:17 | callen | mjwhitt: Clojure has a way of approaching and doing DSLs |
| 22:17 | callen | mjwhitt: and I think it's fairly elegant, but it ends up looking like arbitrary data modelling your problem in the form of S-Exps |
| 22:18 | callen | mjwhitt: this is as compared to when I wrote a matlab dialect in CL for somebody |
| 22:18 | callen | mjwhitt: and I mean that quite literally. he had a repl where he could enter most valid matlab expressions and get a sensible answer. I bet that code was still faster than R. |
| 22:18 | callen | mjwhitt: I don't like Ruby DSLs, tbqh. |
| 22:18 | mjwhitt | heh, interesting |
| 22:18 | callen | mjwhitt: it's not powerful enough to be worth the sacrifice you get in uniformity. |
| 22:19 | callen | mjwhitt: if I'm going to pick one, I'd rather pick Clojure or CL |
| 22:19 | callen | Clojure being more uniform, CL being absurdly powerful but nobody can read each others' code. |
| 22:19 | callen | never got the hang of scheme macros. |
| 22:20 | mjwhitt | yeah, I'm attempting to warm up to clojure |
| 22:20 | callen | mjwhitt: been learning it for 1.5-2 years. I still feel like a fucking moron. I think you're smarter than me. |
| 22:20 | mjwhitt | I use ruby almost exclusively at work |
| 22:20 | mjwhitt | haha |
| 22:20 | ieure | Sucks, bro. |
| 22:20 | callen | mjwhitt: my brain was broken by CL and a couple other languages, that combined with my *_* @ invoking Java code has made me slow at getting proficient in Clojure. |
| 22:21 | callen | mjwhitt: I do Python, Java, C/C++, Pig, and JavaScript at work. |
| 22:21 | callen | mjwhitt: most of the Java is hadoop code. |
| 22:21 | callen | ieure: I know right? |
| 22:22 | ieure | I've been writing Scala. Language is alright, but the tools are a shitshow. |
| 22:22 | jodaro | i was just getting into some scala today |
| 22:23 | jodaro | digging through finagle |
| 22:23 | callen | ieure: that's about what I guessed. I don't like a lot of things about it. |
| 22:27 | callen | the reason I'm not interesting in Scala is largely the same reason I wasn't interested in Scala |
| 22:28 | callen | being an industry standard is going to make me wile away the hours I spend at home on something. |
| 22:28 | callen | is not* |
| 22:28 | brehaut | i assume that argument was less circular in your head than when you typed it out |
| 22:28 | callen | the second scala was supposed to Java |
| 22:28 | callen | the fact that I equate the two in my head is represented in the mistake. |
| 22:28 | callen | that was more illustrative than I intended. |
| 22:31 | callen | it...may be tea time... |
| 22:32 | mjwhitt | it's bed time for me... time to dream of parenthesis |
| 22:32 | mjwhitt | I'm looking forward to talks tomorrow |
| 22:32 | jodaro | heh |
| 22:32 | callen | mjwhitt: parentheses |
| 22:33 | mjwhitt | whoops, see... I need sleep |
| 22:33 | mjwhitt | hehe |
| 22:33 | jodaro | will there be stuff on the interwebz streaming from the conj? |
| 22:33 | callen | Verizon claims my iPhone has used 1.7TB this month |
| 22:33 | callen | I...doubt their claims. |
| 22:34 | jodaro | for us poor bastards that couldn't make it? |
| 22:34 | callen | I mean, I know I stream a lot of music, but it's not FLAC. |
| 22:34 | callen | jodaro: I'm sure there will. |
| 22:34 | brehaut | jodaro: i havent heard anything about it happening |
| 22:34 | brehaut | jodaro: i recall that google chipped in for the clojurescript presentation bandwidth as a special thing |
| 22:35 | brehaut | jodaro: but i imagine a number of the presentations will be recorded and posted after the fact (like they were last year) |
| 22:35 | callen | they support CLJS even though it's going to buttfuck Dart? |
| 22:35 | callen | that's pretty funny. |
| 22:36 | jodaro | looks like the twitters can't decide behind #clojureconj and #clojure_conj |
| 22:36 | callen | I don't think underscores are all that common in hashtags, not sure why people would do that. |
| 22:37 | callen | Can you pull up a regex of hashtags on Twitter? |
| 22:37 | ieure | Because people is dumb. |
| 22:40 | jodaro | or at least or them together |
| 22:40 | callen | jodaro: Twitter has smarter coders than most, but I doubt making their fellow coder happy was a high priority for that interface. |
| 22:40 | callen | jodaro: pity. |
| 22:40 | callen | jodaro: I could write a mash-up that implemented the aforementioned :P |
| 22:41 | jodaro | in Scala? |
| 22:41 | callen | HAW HAW |
| 22:41 | callen | you're hiiiilarious son. |
| 22:41 | callen | don't quit your day job >:< |
| 22:41 | jodaro | heh |
| 22:41 | callen | more likely, Noir // Flask. |
| 23:19 | semperos | I've been getting my head around logic programming, been converting some "regular" functions into ones that return goals |
| 23:20 | semperos | I'm trying to understand the "right" way to make relations out of simple functions that return boolean values that, unlike nilo or emptyo, can't be unified with a simple Clojure datastructure |
| 23:20 | semperos | https://gist.github.com/1354083 |
| 23:20 | semperos | is an example, where I have a function that depends on a call to Java function which returns a boolean |
| 23:21 | semperos | I do (== (visible? foo) true) to return a goal, but I've not seen any examples of unifying on true |