#clojure logs

2013-03-16

00:00yedithat's all good an well, but I want my app to work locally as well
00:00yediso I want to be able to set the properties locally
00:02jeremyheileryedi: Are you using lein?
00:02yedito deploy to beanstalk, yes
00:02yedito do everythinf*
00:03jeremyheilerIf you're using lein to run the application locally, I *think* you can set :jvm-opts in your project.clj to set -D options.
00:03tyler__is there a clojure lib for running popular shell commands like `ls` `ps` etc but not from the shell, a native clojure version of it
00:05ToxicFrogI have caused the best error
00:05ToxicFrog2013-03-16 00:06:08,544 ERROR - (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)
00:06tyler__heh
00:06jeremyheilertyler__: Well, you could use fs to emulate ls.
00:06amalloytyler__: you want conch, by Raynes
00:06jeremyheilertyler__: Actually, there is fs.core/list-dir
00:07tyler__Raynes makes some good stuff
00:07Raynesamalloy: He said specifically a native Clojure version of it though, so fs is what he wants in this case.
00:07Rayneshttp://github.com/Raynes/fs
00:07Raynestyler__: ^
00:07amalloyoh. i filtered that, because it's a crazy thing to want
00:07tyler__what im *really* looking for is anything that outputs datastructures
00:07tyler__it cnabe java
00:07Rayneslol
00:07tyler__can be*
00:08amalloynobody is going to reimplement an operating system in clojure
00:08tyler__seems like an honest ambition if someone were to do it
00:08tyler__heh
00:09yedijeremyheiler: -D options?
00:09jeremyheilertyler__: You're trollin'
00:09jeremyheilerlol
00:09tyler__im not saying they *should*
00:09tyler__im just saying i would cheer them if they did
00:09jeremyheileryedi: Read up on java command line -D
00:09amalloyyou'll just get the lisp-curse version of an operating system
00:09amalloy"all these other lisp operating systems are kinda okay, but they're missing feature X and do Y in a really weird way, i'll just write my own"
00:10jeremyheileryedi: Better yet, just type "java" in a terminal and it explains it.
00:10yedioh cool, thanks jeremyheiler
00:11tyler__im trying to build a system that talks to a server over ssh to get a bunch of meta about the server, right now im using standard shell commands to get data, but each one of them has their own output format
00:11tyler__and its a pain in the ass
00:12jeremyheileryedi: np
00:12tyler__i found a good awk script that converts column output to json
00:13tyler__but ls is pesudocolumns
00:13tyler__heh
00:13jeremyheilertyler__: Welcome to unix :-)
00:13tyler__jeremyheiler: which is why i said a clojure os wouldn't be so bad
00:39technomancyso... for syme. I want to set up DNS entries for instances so you can do `ssh syme@technomancy.syme.in`
00:39technomancybut the problem is there isn't a 1:1 mapping from usernames to instances
00:39technomancyI could launch a bunch of instances
00:40technomancyso the question is: is it worth subdividing it so that you have to do something like `ssh syme@technomancy.3.syme.in` so they can all be addressed? or should the DNS names only be set up for one instance per user?
00:59jetkotenhi all
01:43yunfannice , i am in lispcn-2013-beijing
01:44yunfanpeople all talk clojure
03:13xorolaHi guys, what are plans for improving clojure documentation? does anybody thought/discussed about it?
03:22john2xany getting started tutorial for lib-noir? or would webnoir.org's tutorial be viable?
03:45mjcor perhaps luminus
05:04maiotechnomancy: is it useful to have multiple active instances?
05:09maiotechnomancy: btw what about project.user.syme.in?
05:32mpenetanyone knows how to type a merged map of 2 other possible types in core.typed (if that's possible)?
05:34mpenetex a merge of (HMap {:a '1}) (HMap {:a '2}) where these 2 are aliased, so if possible avoiding repetitions
05:38mindbender1how can I get cljsc to copy my js lib to the public directory and update deps.js(main.js) to point to it rather than point to it's orginal location which is not available to the webserver?
05:39mindbender1I'm hoping someone understands
06:59tdignanIn the clojure repl, how do I enter a tab for purely aesthetic/indentation purposes?
07:12pepijndevostdignan, you can't? Maybe by not using readline? I don't know.
07:39tdignanpepijndevos: ah, interesting
07:42tdignanclojure -r works
07:42tdignanbut if I run 'clojure' or 'lein repl'
07:42tdignanthe tab goes straight to completion
09:12ravstermorning, all
09:14skelternet(send-off ravster (top morning))
09:15john2xcompojure, ring newbie here. how do I assign a ring handler with compojure's GET macro?
09:17ravsterjohn2x: (GET "uri" [] handler)
09:17ravsterI nearly always just send the entire request object to the handler.
09:19john2xohh cool, thanks. I was doing it with (handler).
09:21john2xhmm but then how do I pass the arguments from a uri like "/user/:id"?
09:21john2xI'm geting ArityException with (GET "/user/:id" [id] handler)
09:21ravsterhttps://github.com/weavejester/compojure/wiki/Routes-In-Detail
09:22ravsterjohn2x: do you have wrap-params?
09:22ravsterand what are the arguments your handler is expecting?
09:23john2xravster: no wrap-params (yet. not sure when i'd use it). handler is (defn handler [request id] …)
09:39john2xah so it get's included in (:params request). cool
09:42mpenetambrosebs: Hi, could you have a look at this gist, it something I didn't manage to express so far. I am probably missing something obvious https://gist.github.com/mpenet/5175786
09:42mpenet
09:44ambrosebsmpenet: you want to express a type that has an :a but not a :b?
09:45ambrosebsI guess that would solve it
09:47ambrosebsmpenet: Something like (U (HMap {:a 1} :without [:b]) (HMap {:b 2} :without [:a]) '{:a 1 :b 2}) would be nice
09:47ambrosebsThe reason I don't have this currently is that this is sort of half assed row polymorphism, which I would like to fully support.
09:49mpenetnot really, it can have a key :b but if it's the case it must match the contraint
09:49mpenetI will have to wrap this in another type I think
09:49ambrosebsWait, is :b optional?
09:49mpenetI would like to only allow {:a 1} {:b 2} or {:a 1, :b 2}, but not {:a 0 :b 4} or {:d 234}
09:50mpenetyes
09:51mpenetthe use case is for a korma'isn library, where I want statements (maps) to only allow certain clauses (also maps)
09:52mpenetright now I use an union, it's fine if the user only supply maps with keys that are typed, but not if some unknown key creeps in
09:52ambrosebsYes, it's not possible currently to express this. Specifically the third case is a subtype of '{:a 1} which has no constraint on :b.
09:53mpenetright, no big deal, worse case scenario I'll use macros, or just copy paste some code :)
09:54ambrosebsmpenet: yes, this is a classic case for row polymorphism.
09:55mpenetI have to read about that! Thanks for the help.
09:56ambrosebsmpenet: Now that I think about it, this is a fatal flaw of :optional.
09:57ambrosebswell it's not unsound, but it's not very useful.
09:57augustlportland! Gonna be gooood..
09:58tornhi there, i've installed the latest java jdk 1.7, and leiningen, and created a new lein project
09:59tornwhen i do 'lein repl' it downloads a bunch of jars into my .m2 repository but then dies with "java.lang.RuntimeException: Unable to resolve symbol: defn in this context2
09:59torn-2*
09:59tornany ideas?
10:00mpenetambrosebs: I will have to use optional anyway I think, some statements have clauses that are required and some optional, I will have to make some tradeoffs, I have to run now, but I will try this later today/tonight
10:01tornI do get a few maven errors - Could not find artifact slingshot:slingshot:pom:0.10.2 in central, cheshire:pom:3.1.0, clojure-complete:jar:0.2.1, cd-client:jar:0.3.4, clj-http:jar:0.3.5
10:01augustltorn: you didn't change anything in the output of "lein new"?
10:01tornnope nothing changes
10:01tornchanged*
10:01ambrosebsmpenet: sure, be aware :optional keys may not be of the type stated in the :optional map.
10:01augustltomoj: lein -v?
10:02augustlerr, torn
10:02tornLeiningen 2.0.0-preview10 on Java 1.7.0_17 Java HotSpot(TM) 64-Bit Server VM
10:02mpenetambrosebs: noted
10:03torni'm thinking maybe maven central doesn't have the jar versions that my version of leiningen wants to download?
10:03augustltorn: that's not the latest version, but still weird :)
10:03tornI installed it using 'Chocolatey' package manager for windows
10:04tornwhat is the latest version?
10:04torni can try a lein upgraade
10:06augustltomoj: 2.0.0
10:07tornwithout the -preview10 i guess
10:07tornhmm gives me a 403 when I try to self-install to 2.0.0
10:10augustlI've never used leiningen on windows so I should probably shut up ;)
10:13tornhmm ok i've uninstalled chocolately package manager
10:13tornand installed lein by hand using the lein.bat file
10:14torncleared out my m2 repo also
10:14tornthis time 'lein repl' has no dependency issues with maven, but i still get the "Unable to resolve symbol: defn in this context" issue
10:15augustlseems like clojure.core isn't loaded properly (wild guess)
10:16tornah it seems the version of lein installed with chocolately didn't make the project properly
10:16tornor, aha! maybe calling my project 'clojure' was a bad idea (tm)
10:17yediwhy is paredit indenting this all wierd: https://gist.github.com/yedi/5176574
10:17tornanyone here use Light Table IDE?
10:18augustltorn: ah :)
10:19augustland leiningen by default creates yourproject.core :)
10:19tornyup
10:19yedioh whoops, updated: https://gist.github.com/yedi/5176574
10:19hyPiRiontorn: yeah, that's fixed by technomancy/leiningen#1017, so that bug will be gone by 2.1.0
10:19lazybotlein new should reject projects named "clojure" -- https://github.com/technomancy/leiningen/issues/1017 is closed
10:19hyPiRionheh
10:19augustlany early birds in Portland wanna meet up for some food?
10:20tornclosed 21 days ago, i guess the version installed with chocolately didn't have that fix in
10:20tornok repl seems to work
10:20tornnow I need to get my head around light table, see if i can run a repl in that
10:30tornanyone here run lein-light with light table?
10:31yedidoes anyone have experience setting up RDS with elastic beanstalk
10:31yedii'm having issues figuring out how I should be going about it
10:35yedislightly related question: will running lein beanstalk deploy update the app on beanstalk? or will it terminate and redeploy?
11:02tornoh man light table is pretty neat
11:21technomancymaio: heh; missed you last night. so yeah, I think there's really no reason you can't re-use instances; better to manually bootstrap an existing instance for a new project than wait for a new one to boot.
11:22technomancymaio: OTOH, do we enforce this limitation? if not then we have to be clever and fall back to the IP if someone launches a second instance without halting the first.
11:22technomancythe problem with username.project.syme.in is that project is multi-segmented
11:23technomancyso it'd have to be technomancy.technomancy.syme.syme.in which is even more annoying than the IP =)
11:24Pure-Loulou.(#((first '(and a b)) % %2) false true)
11:24technomancyI guess we could assume each user is not going to hack on multiple forks of a project I guess
11:24Pure-Loulouwhy this returns true? any help?
11:24clojurebotA bug report (or other request for help) has three parts: What you did; what you expected to happen; what happened instead. If any of those three are missing, it's awfully hard to help you.
11:25hyPiRionPure-Loulou: '(and a b) is a list with three symbols, and symbols are IFns
11:26Pure-LoulouIFns?
11:26hyPiRion,('and false true)
11:26clojurebottrue
11:26hyPiRion,('and {'and :hello} true)
11:26clojurebot:hello
11:26hyPiRionSo they are like keywords, maps, sets and vectors
11:26hyPiRionyou can call them with functions
11:26hyPiRion/s/with/as/
11:26Pure-Loulou,(#((eval (first '(and a b))) % %2) false true)
11:26clojurebot#<Exception java.lang.Exception: SANBOX DENIED>
11:27Pure-Loulouhow to wright this so it works?
11:28hyPiRionYou could do (eval (list (first '(and a b)) false true))
11:28hyPiRionsince and is a macro, you cannot use it as a function itself
11:28Pure-Loulouok:) thx
11:45thorwilwith a nrepl server provided by immutant, a (use 'midje.repl) in user leads to: FileNotFoundException project.clj (No such file or directory) java.io.FileInputStream.open (FileInputStream.java:-2)
11:45thorwil(trying to follow https://github.com/marick/Midje/wiki/Repl-tools)
11:47hyPiRionthorwil: Are you using leiningen for project management?
11:47thorwilhyPiRion: yes
11:51thorwilso far i relied on "lein midje" if i wanted to run all tests, otherwise relying on midje-check-fact-near-point
11:51jonasac#(fn %) => #(fn &%) is it possible ?
11:52thorwilbut now "lein midje" fails to resolve a dependency, while "lein immutant run" works fine. so i'm investigating how to run all tests from nrepl
11:54thorwiland fail to find a way to make load-facts available :/
12:01jcrossley3thorwil: it's possible that midje is making some assumptions about the current working directory of the jvm
12:02jcrossley3try 'lein immutant run' after cd'ing to the directory containing your project.clj
12:03piranhaoctagon: hi? :)
12:03octagonpiranha: hey! how's it going?
12:03thorwiljcrossley3: that's already the case. i never run it from any other dir
12:04piranhaoctagon: well, still haven't figured out problem with state not updating in the middle of change
12:04piranhaoctagon: that's actually what I wanted to ask, if you had a chance to look at it :))
12:04jcrossley3thorwil: hmm. what version of midje? is this a public app i can clone and try?
12:05octagonpiranha: i did "make" but i didn't get anything but js files
12:05thorwiljcrossley3: just updated to midje 1.5.0
12:05octagonpiranha: i'd like to be able to experiment with the actual app live
12:05piranhaoctagon: if you open 'build/index.html', it opens it in browser
12:05octagonpiranha: oh ok, cool
12:05piranha'make' is just shortcut for me to not type 'lein cljsbuild auto main'
12:06thorwiljcrossley3: https://github.com/thorwil/tlog but i just *now* pushed the changes to project.clj
12:06octagonpiranha: i think your problem is maybe related to creating cells out of order, which is a weird issue i've run into in my own apps
12:07piranhaoctagon: oh... not sure, I really was a bit lost in traceback there, it's still a bit hard to debug clojurescript
12:07octagonpiranha: like i've found that especially with formula cells, the dependencies don't get set up correctly if the cells they depend on don't exist when they're created
12:07piranhaoctagon: ah, but in this case it shouldn't be a dependency, it's just assignment to cell somewhere in a function
12:08octagonpiranha: it's because when you create a formula it's trying to set up the dependency graph ranks, and if dependencies don't exist then weirdness might result
12:08piranhahm, doesn't look like a case to me
12:08maiotechnomancy: oh yeah good point about the hostname - i missed that. but yeah I think we could assume that person wouldn't work on different forks
12:20technomancymaio: yeah, sounds good. as long as it can fall back to showing the IP when a specific instance has its subdomain deregistered we'd be good
12:20GlenjaminHi guys, does anyone know if there's a non-trivial compojure app that's open-sourced?
12:20GlenjaminI'm trying to get started but the examples I can find are quite light
12:20technomancyGlenjamin: oh yeah absolutely; funny you should ask: https://syme.herokuapp.com
12:20technomancywell... it's still on the simple side. but quite useful =)
12:21technomancyGlenjamin: the biggest OSS compojure app is Clojars
12:22Glenjamini'm mostly trying to figure out how much logic to put in the def-routes definition vs spinning out functions, where to put things, and how to test effectively without running every case end-to-end
12:22maiotechnomancy: btw what are you using these hostnames for? why not just IP?
12:24maiotechnomancy: btw here is the status page I'm working on - http://maio.cz/tmp/syme/Screen%20Shot%202013-03-16%20at%205.23.04%20PM.png
12:44myeWhat's the canonical way to join to longs and get the bigint that represents? Do I have to join up the individual bytes? (New to JVM bit twiddling..)
12:53Guest76401hello
12:53Guest76401Is it okay if I pose a begginer macro question?
12:54Guest76401I want to make a macro that returns a function.
12:54Guest76401This is what I've got:
12:55Guest76401(defmacro rotate-base [code]
12:55Guest76401 `(fn [piece]
12:55Guest76401 (let [s (dec (count piece))]
12:55Guest76401 (map #(let [[x y] %] ~code) piece))))
12:55Guest76401
12:55Guest76401(rotate-base '(list y (- s x)))
12:55Guest76401This does not work. Why?
12:57momomomomoGuest76401: That's a terrible way to ask for help haha. Paste your code into a http://gist.github.com/ and explain where you think it might be failing
12:58xeqiGuest76401: hmm, looks like what you want could just be a function
12:58Guest76401Thank you momo...
12:58xeqiwell, almost
12:59Guest76401xeqi: the reason for macro is that i've got diffrent code snippets
13:01Guest76401https://gist.github.com/anonymous/5177314
13:02tomoj"explain where you think it might be failing" -- "Can't use qualified name as parameter" ?
13:03arcatanGuest76401: you can look at what that expands into with (macroexpand '(rotate-base '(list y (- s x))))
13:03Guest76401yes i have tried macroexpand
13:04Guest76401(macroexpand-1 '(rotate-base (list y (- s x))))
13:04Guest76401(clojure.core/fn [user/piece] (clojure.core/let [user/s (clojure.core/dec (clojure.core/count user/piece))] (clojure
13:04Guest76401e/map (fn* [p1__1__2__auto__] (clojure.core/let [[user/x user/y] p1__1__2__auto__] (list y (- s x)))) user/piece)))
13:04momomomomoGuest76401: Try editing the gist you've created. It's hard to parse code in an irc client.
13:04arcatanGuest76401: piece becomes user/piece, but that's not what you want. you'll want it to have a new unique name i.e. use gensym. rename piece to #piece
13:04arcatanGuest76401: sorry, piece -> piece#
13:05Guest76401ok thanks arcatan
13:05tomojbasically you're trying to do something evil (unhygienically bind x/y, letting them leak out into the code the macro-user writes) and clojure is preventing you
13:05arcatanalso listen to tomoj :)
13:05Guest76401momo... thank you for the comments i will ask question in a better way in the future
13:06Guest76401thanks arcatan and tomoj, will try/read about it
13:06tomojconsider writing it as a higher order function instead of a macro
13:06tomojperhaps: (defn base-rotater [f] (fn [piece] (let [s (dec (count piece))] (map (fn [[x y]] (f s x y)) piece))))
13:07Guest76401yes i did higher-order function previously, just thought macro was the way to do things
13:07tomoj(base-rotater (fn [s x y] (list y (- s x))))
13:08SegFaultAXGuest76401: As a rule of thumb: if it can be written as a function, write it as a function. Try to stave off converting it to a macro unless you're absolutely sure that's what you want.
13:08SegFaultAXI also happen to think tomoj's curried approach is nicer.
13:10Guest76401ok
13:11Guest76401Im new to macros but have done functional-programming previously, thought macros was the thing to do often.
13:11Guest76401I'm finished with this question, I have learned somethings :).
13:12SegFaultAXGuest76401: I think most people would agree that macros aren't usually the first thing you should jump to. But sometimes they are absolutely perfect for what you're trying to do.
13:12Guest76401ok
13:12SegFaultAXGuest76401: While you're learning, it might be useful to adopt the previously mentioned guiding principle of defaulting to functions as much as possible.
13:12Guest76401yea
13:12tomojmaybe there is a function Duration -> Int which tells you the number of consecutive heads you need to see from a fair coin to say "OK, I really need a macro" given the amount of time you're been learning clojure
13:13drorbemetHi, what does a cross behind a name of a liningen plugin mean exactly?
13:13Guest76401tomoj: ok
13:14SegFaultAXdrorbemet: What do you mean?
13:14drorbemete.g. lein-autotest† Start Lazytest's ... @ https://github.com/technomancy/leiningen/wiki/Plugins
13:15xeqidrorbemet: "Plugins marked with † have not been confirmed to work with Leiningen 2." from the top of the page
13:16SegFaultAXdrorbemet: It says it right at the top
13:16drorbemetAh, thanks :-)
13:16drorbemetNow I saw it too ..
13:22drorbemetActually I am looking for the current way to do TDD with automatic execution on change of the source code. There are so many projects to choose from: expectations, Midj, speclj, lein-autotest, lein-autoexpect ... I want to configure Eclipse and Emacs for "autotest".
13:24drorbemetI am trying to get expectations and lein-expectations to run with Eclipse under Windows but I still havn't figured out the configuration.
13:24drorbemetsorry I meant lein-autoexpect
13:24clojure-newHello, i'm getting "Warning: profile :base not found." with lein from git, how can i fix it?
13:25hyPiRionclojure-new: Ignore it for now
13:25hyPiRionor use 2.0.0 until we've released 2.1.0 :)
13:25clojure-newhyPiRion: Ok. :)
13:26hyPiRionIt should be out by tuesday-wednesday
13:30lynaghkdrorbemet: the latest version of lein-midje has autotest built into it---you can just run "lein midje :autotest" and you'll get automatic source reloading and test execution
13:32drorbemetOh, that's great! Then I'll take that. Thanks for the hint :-)
13:41SegFaultAXlynaghk: I hadn't looked at midje very closely until you brought it up. (I've been using clojure.test up til now). Midje looks pretty sweet.
13:50ToxicFrogSo, I have a macro with a type annotation on some of its arguments.
13:50ToxicFrogBut it will still happily be called on the wrong things.
13:50ToxicFrogWhat is the appropriate way to add type checking to the macro? Just (assert) that the types are correct?
13:51mpenetambroseb_: is there a way to express a native java array of X (with All) to handle "[LSomething;" or do I need to fallback to Ljava.lang.Object ?
13:53mpenetseems convoluted, I will use Ljava.lang.Object + Any in the Fn body for now
13:55mpenetor better pass something sequential to this function and kill some ugly in the process
13:55ambroseb_mpenet: use (Array Something)
13:56ambroseb_Does LObject actually work?
13:56mpenetI didn't try yet, still drafting
13:56mpenetoh I missed Array
13:57ambroseb_mpenet: There's (Array wr), (Array2 w r), and (ReadOnlyArray r), which is an alias for (Array2 Nothing r)
13:57ambroseb_It's a solution to array covariance while preserving static soundness.
13:58mpenetnice
13:58ambroseb_eg. use ReadOnlyArray when you have a generic action on arrays.
13:58tomojToxicFrog: what happens when you don't assert and they pass the wrong thing?
13:58ambroseb_mpenet: I'm hoping to elaborate on that idea in a paper I'm coauthoring.
13:59ambroseb_"Hey, array covariance doesn't have to suck"
13:59OneFourSevenAmbrose, you were in GSOC 2012?
14:00ambroseb_OneFourSeven: Yes.
14:00mpenetambroseb_: for my map issue of earlier, since I never have more than 2 or 3 clauses possible, I think ll just create multiple arities with intersections I think, listing the possible combos
14:03ambroseb_mpenet: Ah, yes that's probably the correct strategy.
14:03ambroseb_mpenet: But the most specific clauses go first. ie. {:a 1 :b 2}
14:03mpenetright
14:03ambroseb_Good thinking :)
14:03mpenet:) learning!
14:04rebcabinwhy doesn't (-> [1 2 3] reverse (partial apply vector)) produce [3 2 1}? instead seems to produce (partial apply vector)
14:04ambroseb_If it works out, please post the solution as a response to my google group post.
14:05mpenetWill do. I am typing another libary first, it's way smaller and I need to play a bit with All, but I'll go back to the other one later or tomorrow latest.
14:07bbloomrebcabin: you're doing (partial (reverse [1 2 3]) apply vector)
14:07bbloom,(macroexpand '(-> [1 2 3] reverse (partial apply vector))
14:07bbloom)
14:07clojurebot#<RuntimeException java.lang.RuntimeException: EOF while reading>
14:08bbloom,(macroexpand '(-> [1 2 3] reverse (partial apply vector)))
14:08clojurebot(partial (clojure.core/-> [1 2 3] reverse) apply vector)
14:08bbloomrebcabin: try ##(macroexpand '(->> [1 2 3] reverse (partial apply vector)))
14:08lazybot⇒ (partial apply vector (clojure.core/->> [1 2 3] reverse))
14:09rebcabinahh, i see
14:10rebcabinthanks bbloom and clojurebot
14:11bbloomrebcabin: lazybot helped out too :-P i can never remember which meta characters ,&## go to which bot
14:12rebcabin(let [f (partial apply vector)] (-> [1 2 3] reverse f)) ; closer to my erroneous expectation
14:12ambroseb_If anyone missed it, there's a new core.typed mailing list https://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
14:20tyler__ohpauleez: you're a portland guy?!
14:20ohpauleeztyler__: I am now, mmhmm
14:21ohpauleezPreviously I've lived in Boston, Philly, NYC, San Francisco and Eugene, OR
14:21ohpauleezI grew up in NH
14:21tyler__ohpauleez: oh nice we should have you hang out sometime. I work at Little Bird out of PIE we are converting to a clojure stack
14:21ohpauleeztyler__: I'm a PIE mentor
14:21tyler__ohpauleez: nice
14:21ohpauleezalways more than happy to help with a Clojure migration
14:21ohpauleez:)
14:22ohpauleezI really enjoyed the Little Bird demo during demo day
14:22tyler__thnx, heh yeah Marshall knows how to give a presentation
14:22ohpauleeztyler__: You guys were in Rails before? Or Python?
14:23tyler__ohpauleez: ruby, not rails. i hate rails
14:23tyler__we are still half ruby
14:23tyler__we have a services model with a message queue
14:23tyler__so its about half ruby services, half clojure services now
14:23ohpauleeztyler__: Ah yes, very common. That's what I was just about to say
14:23tyler__maybe still more ruby than clojure
14:24ohpauleezwe should totally meet up for beer/coffee. And definitely let me know if you guys need any advice on anything
14:24ohpauleezI've done the startup thing for awhile now ;)
14:25tyler__ohpauleez: you going to clojurewest? (if going? (meet you me))
14:26ohpauleeztyler__: I'll be there; Speaking Monday just before Rich
14:26tyler__woot
14:26ohpauleezhttp://clojurewest.org/sessions#degrandis
14:29ToxicFrogtomoj: the macro runs just fine and I get really confusing errors at runtime because someone passed in a string rather than a regex.
14:30torni'm teaching myself clojure, current playing around with namespaces
14:30tornis (str (ns-name *ns*)) a common thing to do?
14:30tornor is there a shorthand to get the name of the current namespace, for when I'm creating namespaced symbols or keywords
14:34amalloytorn: not very common, no. namespaced symbols are very rarely needed, and namespaced keywords are fairly rare as well as being easier to get another way
14:34tyler__,(namespace ::foo)
14:34clojurebot"sandbox"
14:34amalloytry: ::foo, for the keyword foo in the current namespace
14:37tyler__,(dir sandbox)
14:37clojurebotnil
14:37tyler__heh
14:38TimMc,(-> dir var meta :added)
14:38clojurebotnil
14:40tornyep i saw ::foo does the current ns
14:40torni guess there's no equivalent for ''foo
14:40tornI'd have to (symbol (str (ns-name *ns*)) "foo")
14:41mindbender1I've written a js source that extends closure and I want to make the compiler copy this file to :output-dir as it does with cljs source and jarred sources
14:41tornalthough why i'd want to, i have no idea -- I don't really know what symbols are used for yet - am guessing dynamic evaluation or something
14:41mindbender1is this currently possible?
14:44tomojToxicFrog: then, yeah. normally in clojure you just let the user figure out the confusing errors, because they wrote incorrect code so it's their fault :). but asserting in some cases to make debugging easier is appropriate. especially at macro-time since you don't really have to worry about slowing things down with checks
14:45tyler__ohpauleez: we are considering utilizing clojurescript but one of our concerns that that, thus far, our frotn end guys have been mostly html css wizards with no real CompSci concepts. So if we migrate to clojurescript we are feaful we might lock ourselves out of good front end people
14:45tyler__s/that that/is that/
14:46ohpauleeztyler__: That hasn't been my experience nor Kevin Lynagh's experience
14:47mindbender1tyler__: it doesn'tstop your frontend guys from doing their painting job
14:47ohpauleezgreat front end people still cook up baller HTML and CSS - CLJS frees them from having to muck with JS's idiosyncrasies and allows engineers to more easily jump in on the client side
14:47tyler__they do a lot of the app logic stuff too
14:47tyler__to animate the dom and such
14:47ohpauleezI think you'd find you'd start questioning more where things get done
14:47tyler__ah
14:48tomojmeaning, what, we get more work and the frontend guys get less?
14:48ohpauleezCLJS also doesn't exclude the use of JS. I think more people just realize it's easier to express what they want in CLJS once it's in place
14:48tomojs/guys/people/
14:48tyler__(inc tomoj)
14:48lazybot⇒ 6
14:48ToxicFrogtomoj: yeah, that's what I'm after here - I'd rather have a compile-time error because they used the macro incorrectly than get a runtime error much, much later with an unclear origin
14:49ohpauleeztyler__: all in all, it comes down to your team, your culture, and the goals of your project
14:49ohpauleezClojure and CLJS aren't always the best tools for the job - but they are pretty amazing tools
14:50antares_Neocons 1.1 is released: http://blog.clojurewerkz.org/blog/2013/03/16/neocons-1-dot-1-0-is-released/, plans for the future: http://blog.clojurewerkz.org/blog/2013/03/16/the-future-of-neocons/
14:50tyler__if i can mix cljs and vanilla js pretty easilly that could solve our dilemma
14:51wjlroedoes anyone know if there's an equivalent of lein-ring (with namespace reloading in development) for aleph?
14:51tornanyone here find Light Table's line selection / instarepl cursor stuff messes up sometimes?
14:51mindbender1I find cljs is best suited for data manipulation on the client
14:52ohpauleeztyler__: It's very easy to mix
14:52mindbender1the view is best left for an oo framework like closure
14:52ohpauleezthe one caveat is advanced compilation - if you use it on your CLJS, you're going to need an externs file
14:52tyler__mindbender1: i can see how a clojure system could be good for data manipulation ;)
14:53tomojmindbender1: something about the view is inherently suited to an oo framework like closure? or just cljs view libraries aren't there yet?
14:54mindbender1even Rich Hickey said that
14:54tomojthe former?
14:54mindbender1you can't touch a mouse so there's an object
14:55torndoes idiomatic clojure use camelCase or underscores or dashes for variable / function naming?
14:55tomojwhere'd rich talk about this?
14:55wjlroetorn: dashes
14:55mindbender1simplemadeeasy
14:55tomojthanks
14:55ohpauleezmindbender1: I'm skeptical of the claims you're making - it is *very* dependent on the type of application you are creating
14:55tomojseems obvious you need identities, obviously wrong (to me) that OO is well-suited
14:56tomojinherently
14:56tornwjlroe: ty - even for function names?
14:56wjlroetorn: yup
14:56mindbender1I'm not. you only need to show me solid examples
14:56tyler__torn: dash all the things
14:56ohpauleezie: perhaps you want to make transitions on the UI, like you would make transitions in data. In which case a Pub/Sub // pipeline // event system is what you want
14:56eggheadjust made it into portland for clj-west :)
14:56tornhaving done a lot of js recently, dashes in things scare me haha
14:56eggheadlol torn
14:56ohpauleezand surely functional approaches to those systems are concise and easy to use
14:56tornbut i guess dashes by themselves aren't s-expressions so it's all good
14:57tyler__having done a lot of js lately, js scares me
14:57eggheadtorn: that's the problem with infix!
14:57tornmeh js isn't that bad once you get around the prototypal inheritance and closures and function invocation
14:57eggheaddid you mean foo minus bar or to have a ref named foo-bar :)
14:57mindbender1I find I just have to embrace both ways of thinking
14:57ohpauleezegghead: Welcome to PDX!
14:57eggheadcheers ohpauleez, using the heck out of your guide
14:58ohpauleezegghead: Please do. Everyone should feel free to ping me with questions, requests, etc
14:58tyler__egghead: welcome to town
14:58tyler__ohpauleez: damn u beat me
14:58ohpauleezI literally live a stone's throw from the venue
14:58ohpauleezJust me and Fred Armisen, drinking beers
14:58tornPDX?
14:58tyler__ohpauleez: did you see them filiming grim there last week?
14:58ohpauleeztorn: Portland, OR
14:59tyler__y i no can type
14:59ohpauleeztyler__: They shoot Grim all over the place, and it totally messes everything all up haha
14:59ohpauleezthey shut down my entire block like a month ago
14:59tyler__heh
14:59ohpauleezwhich ultimately meant, my dog had no where to shit
14:59ohpauleezhaha
15:21clojure-new(sql/with-connection (db-connection) (sql/with-query-results results ["select * from bla"] results))
15:21clojure-newThis code produces: java.sql.SQLException: You can't operate on a closed ResultSet!!!
15:22clojure-newclojure.java.jdbc -- sql
15:22clojure-newWhat's wrong with it?
15:22gfredericksclojure-new: with-query-results
15:22gfredericksit expects you to fully process the resultset before returning
15:22gfredericksvec is the easiest way to do that
15:23gfredericksso return (vec results) instead of results
15:23gfredericksresults is a lazy sequence that reads from the ResultSet as needed
15:23clojure-newgfredericks: Yay, thanks!
15:23clojure-newIt works now.
15:23gfredericksso you can't realize it out of the w-q-r scope
15:24antares_clojure-new: if you need some background on that lazy sequences stuff: http://clojure-doc.org/articles/language/laziness.html
15:24clojure-newantares_: Thank you, i'll read it.
15:33tomojis query the replacement for deprecated with-query-results?
15:38gfredericksoh wqr is deprecated too? what are the resultset-openness semantics of the new function?
15:54mpenetjimduey: Did you use TFn already? I am trying to create an heterogenous type "fn" for Sequential, failing so far
16:12jimdueyNot yet. I'm off trying to figure co vs contra-variant.
16:12jimdueympenet: ^
16:13mpenetjimduey: I think I may have found a bug, or that could just be me misusing it.
16:13tyler__how do i do something like '(+ 1 num) but actually interpolate the value of num into there?
16:16hyPiRiontyler__: `(+ 1 ~num)
16:16hyPiRion,(let [num 10] `(+ 1 ~num))
16:16clojurebot(clojure.core/+ 1 10)
16:16tyler__hyPiRion: thanks, still getting the macro-y stuff down
16:16hyPiRionWell, that will namespace the symbols too.
16:28tyler__is parallelism directly proportional to concurrency on the JVM since threads run on different cores?
16:34ohpauleeztyler__: Not necessarily
16:34ohpauleezbbloom: shall we do this again? ^^
16:34bbloomohpauleez: heh. dammit. i guess i need to write that blog post
16:35tyler__bbloom: that sounds like a good blog post
16:35ohpauleezWe just need to create a blog: "Things we've said in #clojure that need to be properly archived"
16:35tyler__speaking of which i just wrote: http://tyler808.wordpress.com/2013/03/16/its-time-for-a-new-unix/
16:35ohpauleeztyler__: Since it seems like you have a general idea, I'll give you the quick and dirty
16:36bbloomtyler__: http://clojure-log.n01se.net/date/2013-02-26.html#16:17
16:36tyler__irclogasblog.tumblr.com
16:36tyler__heh
16:36tyler__that actually is a proper blog: "web log"
16:37tyler__literally
16:37ohpauleezconcurrency is just handling/doing more than one thing at the same time, potentially swapping between things. Parallelism is *actually* doing multiple things at exactly the same time. In the most precise definition, it comes in two flavors: data parallelism and task parallelism.
16:38hyPiRionhttp://clojure-log.n01se.net/date/2012-12-17.html#22:30 <- my proudest moment in this channel
16:38ohpauleezdp - you're doing a single task, in parallel across some chunk of data
16:38ohpauleezthat's the most common
16:38ohpauleeztp - you're doing a bunch of different tasks in parallel, most likely on the same pool of data
16:38llasramhyPiRion: It was something to be proud of :-)
16:38ohpauleezthen there are some analogies: dinner parties, schools and classrooms
16:39hyPiRionhehe
16:39tyler__i get the difference between the two, i was asking does the amount of parallelism go up as concurrency goes up
16:39ohpauleezon the JVM, you could do async concurrency, of you could use OS-level threads. Assuming you have an SMP kernel, those threads will hit different cores, but that's not always a promise
16:39tyler__or you you top out at a certain point
16:40ohpauleezoh no, the JCM will hit all cores if it's able to
16:40ohpauleezJVM
16:40tyler__like if i have 4 cores and 5 threads is the fifth thread considered "parallel"?
16:40bbloomdammit ohpauleez! stop bringing up data vs task parallelism! didn't we agree that this was orthogonal!?
16:40ohpauleezhahaha
16:40antares_tyler__: only if your CPU supports hyperthreading (core i7 all do, I think)
16:40ohpauleezI still feel it's important
16:41ohpauleeztyler__: core+virtual cores are a hard limit on true parallelism for anything
16:41antares_tyler__: if not, then no. But you are bound by hardware, not JVM limitations most of the time.
16:41ohpauleezso you can have as many concurrent things going as you like
16:41ohpauleezbut you are capped on true parallel things
16:42antares_hey ohpauleez
16:42ohpauleezbbiab
16:43tyler__so why even discuss parallelism vs concurency if parallelism is just a function of concurrency + # of cores
16:44ohpauleeztyler__: Because we have distributed systems, GPUs, etc
16:44antares_tyler__: for example, because not all runtimes provide parallelism (CRuby, CPython do not) and not all of them do it equally well
16:44tyler__yeah but we all use java here amiright? ;)
16:44antares_GPUs are also a factor, too. Currently JVM won't use GPUs but there is a project that (hopefully) will make that possible in the next few years.
16:45tyler__antares_: ah, gpu is like a cpu on your graphics card right? im not much of a hardware guy
16:45antares_tyler__: more or less
16:46bbloomhyPiRion: nice.
16:47gfrederickshow's the weather in portland?
16:47tyler__hyPiRion: wow thats amazing, i am not worthy
16:48tyler__gfredericks: its been nice, a little overcast today but its been sunny
16:48tyler__its finally getting warmer
16:48hyPiRiontyler__: It's not so difficult, really. It's just a lot of trial and error
16:48hyPiRionYou should've seen my history with lazybot before I made it work
16:48gfrederickstyler__: man these forecasted temperatures are so high...
16:49tyler__actually next week looks kinda shite according to google now
16:50gfredericksshite == wet?
16:50tyler__and colder
16:50gfredericksit's 30 here
16:50tyler__last week we had the door open because it was so hot
16:51gfrederickswell now I know not to pack my scarf
16:51hyPiRiontyler__: wow, you Americans and your weather
16:51tyler__hyPiRion: how is weather an american thing?
16:52hyPiRiontyler__: Mostly because the only time I hear about weather from another country, it's America :]
16:52tyler__correlation not causation ;)
16:53hyPiRiontyler__: Well, I meant it as in "Dang, you guys are lucky with the weather", not as in "talking about weather is an American thing"
16:53gfrederickshyPiRion: our lake just thawed
16:54tyler__hyPiRion: aaaah i understand
16:54hyPiRiongfredericks: Where are you from?
16:54tyler__hyPiRion: "american weather" is not a thing we have a huge landmass with hugely different climates
16:55tyler__last week i learned that all of the UK is about the size of Oregon heh
16:55gfrederickshyPiRion: Chicago
16:55hyPiRiontyler__: yeah, I know. I'm extrapolating based on one datapoint :p
16:56clojure-new We have weather in Russia too! Sometimes it's a pain.
16:56clojure-new-7C ATM.
16:56gfredericksclojure-new: is it a single kind of weather?
16:56gfredericksin all of russia?
16:57bbloomtyler__: i just checked wikipedia. oregon is slightly larger, heh
16:57amalloygfredericks: in small countries like that, that's not uncommon
16:57antares_gfredericks: standardized by the government, too
16:57gfrederickshaha
16:57bbloomUK: 243,610 km^2 vs OR: 255,026 km^2
16:58hyPiRiongfredericks: Wow, I just realized Chicago is on about the same latitude as Madrid
16:58gfrederickseurope is falsly north
16:58clojure-newbbloom: RUSSIA: 17,075,400 km2 vs UK: 243,610 km^2 vs OR: 255,026 km^2
16:59clojure-new17,075,400 km2 of weather.
16:59tyler__russia is a country though, not a provence/state
16:59gfredericksall of it the same
16:59gfredericksand all of it in metric
16:59tyler__is the US the last place to refuse to use metric?
17:00antares_tyler__: not at all. it is accompanied by burma, see.
17:00gfredericksa coalition of the willing
17:01gfredericksman I'm already old enough to be muttering political innuendo that the youth will not understand
17:02amalloytyler__: there are like three other countries, with a combined GDP of like $10/year
17:02tyler__heh
17:02amalloyas i recall
17:03drewcand of course, the speed is measured in knots
17:04hyPiRionOh, I like that
17:04hyPiRion"three clicks from here"
17:04gfredericksman I have no idea how we measure the speed of my apartment
17:04drewcgfredericks: I think they have already been invented, they are called 'miles'
17:04gfrederickswill have to ask the landlord
17:05technomancygfredericks: it's called a flat
17:05gfrederickstechnomancy: I guess that helps it be more aerodynamic?
17:05technomancynow you're catching on
17:05drewc(or often "land mile" or even "statute mile")
17:05tyler__gfredericks: around 1125kph
17:05tyler__gfredericks: http://geography.about.com/library/faq/blqzearthspin.htm
17:05tyler__heh
17:05clojurebotNo entiendo
17:06Frozenlocktechnomancy: as a mechanical engineer, I want to express how much I hate you for not using metric.
17:06gfredericksI wonder if velocity is a torsor
17:06arrdem(inc Frozenlock)
17:06lazybot⇒ 2
17:06hyPiRionFrozenlock: You read technomancy wrong :)
17:06technomancyFrozenlock: what? I use metric
17:06hyPiRion"refuses to refuse to use metric" -> metric
17:06FrozenlockOh
17:06Frozenlockdamn
17:06gfrederickshyPiRion: well that's a bit of a stretch
17:06hyPiRiongfredericks: true
17:06gfrederickshyPiRion: he might just be wishy washy
17:06FrozenlockDouble negative got me -_-
17:07technomancyonly the language nerds are allowed to hate me (for the double negative)
17:07gfrederickstechnomancy: only fake language nerds would complain about a double negative
17:07bbloomtechnomancy: as an english major (not really) i what to express how much i hate you for using a double negative
17:07tyler__i don't know nothing
17:07bbloomdamn, typed that too slow to make the joke in time
17:07bbloomslowly
17:07gfredericksI think I remember seeing a quadruple negative in the wild once
17:07Frozenlockbbloom: still found it funny :)
17:07technomancyhttp://wondermark.com/434/
17:08tyler__i luled
17:11arrdemgfredericks: i c u trollin
17:11FrozenlockWhile we are on the news, I read somewhere that EA's lastest game was awesome, and the always-online requirement wasn't a problem, at all.
17:12tyler__so i decided to take a peek at core.logic and now my brain is melting...
17:12tyler__Frozenlock: are you being facetious?
17:13arrdem,(str "(" (rand-nth ["inc" "dec"]) " Frozenlock)")
17:13clojurebot"(inc Frozenlock)"
17:13arrdem,(print ",(" (rand-nth ["inc" "dec"]) " Frozenlock)")
17:13clojurebot,( dec Frozenlock)
17:13AimHeretyler__, no. He was just reading a report of an EA press release
17:13arrdembother
17:14arrdem,(print (str ",(" (rand-nth ["inc" "dec"]) " Frozenlock)"))
17:14clojurebot,(dec Frozenlock)
17:14FrozenlockYou mean the 'straight answers from Lucy' one?
17:14AimHere&(print (str ",(" (rand-nth ["inc" "dec"]) " Frozenlock)"))
17:14lazybot⇒ ,(dec Frozenlock)nil
17:14AimHere,(print (str "&(" (rand-nth ["inc" "dec"]) " Frozenlock)"))
17:14clojurebot&(dec Frozenlock)
17:15arrdemso do we have to quine thi?
17:15arrdem*this
17:15arrdemclojurebot -> lazybot -> clojurebot?
17:15AimHereLazybot prefixing it's output with the arrow makes me glum
17:16AimHereBut it's probably for the best, all things considered
17:19tyler__woah just found: https://github.com/jonase/kibit/
17:19tyler__that looks awesome
17:20hyPiRionarrdem: that's impossible by now. Clojurebot ignores lazybot now
17:20hyPiRionI think
17:20hyPiRion$timer 0:0:1 ,(println "foo")
17:20lazybotTimer added.
17:20lazybot,(println "foo")
17:20clojurebotfoo\n
17:21tyler__or not
17:21hyPiRion,(print "&(println "foo")")
17:21clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling:(NO_SOURCE_PATH:0:0)>
17:21hyPiRion,(print "&(println \"foo\")")
17:21clojurebot&(println "foo")
17:21hyPiRionthe other way around it was
17:21arrdemQ_Q
17:24FrozenlockAnyone here using compojure could confirm if googlebot can access their site?
17:24MikeSethif I do (defrecord Character ...) Clojure complains about java.lang.Character already defined. Is this because java.lang classes are imported into every namespace?
17:25arrdemFrozenlock: confirmed
17:26FrozenlockGrrr Googlebot, why u fail on me...
17:29antares_MikeSeth: most likely
17:30tomoj(ns-unmap *ns* 'Character)
17:30tomojI can't remember why I wanted :import-exclude
17:30tomojdidn't think of that workaround till after I forgot :(
17:31MikeSethtomoj: is this a "normal" thing to do?
17:31tomojI guess (:import-java :exclude [...])
17:31tomoj(that's hypothetical)
17:31tomojno, it's not normal
17:31MikeSethhmmm
17:32tomojit's rare enough for people to alter their ns map in any other way besides ns and def
17:32tomojbut if you really want it to be called Character, doing that at the beginning of your ns top-level wouldn't cause much real trouble afaik
17:33tomojhmm
17:33tomojthough that will unmap the record every time after
18:01hiredman/win 15
18:04bbloomlynaghk: i think you're gonna like what i'm cooking up in the rewrite department :-)
18:11lynaghkbbloom: I'd love to see it over a beer
18:11lynaghkbbloom: and then not over a beer, to make sure I can understand =P
18:12bbloomlynaghk: i'm basically porting https://code.google.com/p/kiama/wiki/Rewriting to clojure, but with a focus on operating on trees of maps
18:12bbloomlynaghk: it's basically a combinator library for rewriting strategies
18:35bbloomdnolen: i too keep finding myself wanting reduce-until
18:35ambrosebsmpenet: need help with TFn?
18:36wmaxhow do i retrieve all the attributes in datomic?
18:36bbloomdnolen: before, i've wanted left-fold-until, but now i have a case where i want fold-with-an-abort-condition, ie un-ordered
18:36jjttjjanyone ever use fleet for templating? are there any example apps out there?
18:39ohpauleezbbloom: You know you can do that right now, right?
18:39ohpauleezreduce supports a short circuit
18:39bbloomohpauleez: how?
18:39hiredman,(doc reduced)
18:39clojurebot"([x]); Wraps x in a way such that a reduce will terminate with the value x"
18:39bbloombwha?
18:39bbloom1.5?
18:39ohpauleezyeah
18:40bbloomglorious.
18:40ohpauleezlet me dig up the example I just saw
18:42mpenetambrosebs: I think I understand TFn, but this was not really the solution to my problem (still good to have learned about it). I sent you a privmsg earlier with a gist
18:43mpenetambrosebs: either I misunderstand Seq* or there is a bug somewhere, more likely the former
18:44bbloomohpauleez: oh. this is amazing.
18:45ohpauleezbbloom: It's reduce right? I was trying to dig up the code I had
18:47bbloom,(reduce (fn [acc x] (let [x' (* x x)] (if (> x' 10) (reduced x') x'))) (range))
18:47clojurebot16
18:47bbloomohpauleez: there's an example
18:47ohpauleezAhhh there we go!
18:47bbloomohpauleez: sadly, it doesn't seem to work with `reductions :-(
18:48ohpauleezreduced! right
18:48ohpauleezit is indeed a pity
18:48bbloomohpauleez: i am sooo submitting a patch to reductions....
18:48tomojwe still need a reductions reducer too
18:49ohpauleeztomoj: What would that even look like?!
18:49ohpauleezhaha
18:49bbloomwell, if the reducers produces a linear reduction, it's easy, but otherwise, it could return a tree
18:50ohpauleezright
18:50ohpauleezI was just thinking, well… you could write it in terms of the current reduce and build a seq
18:50tomojno
18:50tomojno seqs :)
18:51tomojI dunno what you mean probably
18:52tomojwhat would return a tree?
18:52ohpauleezreductions in reducers, that runs non-linearly
18:52ohpauleezbecause order isn't preserved
18:52FrozenlockOk googlebot is definitely trolling me. Every proxies I tried can see the site, in addition to web-sniffer.net, but not googlebot -_-
18:52ohpauleezwhich you typically want in reductions
18:53tomojwhat reducer doesn't preserve order?
18:54tomojto me that is pretty much the essence of a reducer, an order
18:54ohpauleeztomoj: how would you visual the results of reduction where the first three elements were reduced and the last two were, but no others
18:54ohpauleezvisualize**
18:55ohpauleez… I suppose I'm thinking of fold
18:55tomojah, right, fold reductions is weirder
18:55tomojfolds?
18:56tomojpresumably you pass a combinef and reducef and you get the ordered results from the combinef as a reducer?
18:57tomojcan't we move the short-circuiting code into Reduced?
18:58tomojinstead of writing it into every reducer
18:59tomojperhaps not without CPS'd reducers?
19:07wmaxhow do i get the namespace of a namespace qualified keyword
19:09bbloomhttp://dev.clojure.org/jira/browse/CLJ-1185 boom.
19:09devnbam
19:10technomancyarg; I hate it when I realize two seconds too late that I could have used paredit-convolute-sexp
19:10devnwhat does that do?
19:11technomancywords cannot describe it
19:11devnhaha
19:11devnoh i see
19:12devnthat's uh, very specific
19:12wmaxwhy don't anyone help me
19:12wmax&(namespace :foo/bar)
19:12lazybot⇒ "foo"
19:14devnwmax: isn't that what you want?
19:15tomojit's very common to have seq forms where some initial subseq is distinguished and provides context for the remaining subforms
19:15wmaxthat is exactly what i want
19:15tomojparedit-convolute-sexp just reorders those kinds of operators
19:15devnwmax: :)
19:15devn&*clojure-version*
19:15lazybot⇒ {:major 1, :minor 4, :incremental 0, :qualifier nil}
19:16Frozenlockarrdem: May I ask if you are using some middleware? force-ssl, gzip, etc..?
19:17arrdemFrozenlock: it
19:17arrdem's been a long time and that blog's codebase is still on noir.. lemme look tho
19:18arrdemFrozenlock: yeah stock noir opaque as always
19:21bbloomohpauleez: thanks much for letting me know about `reduced... now i wonder what else i'm missing in 1.5
19:22ohpauleezbbloom: totally welcome man
19:23Frozenlockarrdem: I just moved away from noir, thinking it might be what caused googlebot to choke :/
19:24gfrederickstomoj: what's a seq form?
19:24arrdemFrozenlock: heh yeah I have a branch that's noir-free but it's stuck in me being too lazy to fix all the mistakes I made with my first Clojure project XP
19:24tomoja form that is a seq
19:24tomojprobably a list
19:24gfrederickslike (if foo bar baz)?
19:24tomojyeah
19:26bbloomlooking at the impl of clojure.lang.Reduced, it occurs to me that IDeref is like an abstract pointer on steroids
19:27tomojsteroids?
19:27bbloomi wish that there was a way to opt-in to auto-deref like vars, but still allow do-not-deref via something like #'
19:27bbloombut i'm not gonna think about that too much :-P
19:29tomojauto-deref on invocation? or something crazier?
19:29gfredericksauto-deref like vars
19:29bbloomtomoj: on invocation is easy: implement IFn
19:29gfredericksyou mention them and they get deref'd
19:30tomojyeah, so what are you thinking? (foo bar baz) auto-derefs bar?
19:30bbloomyeah what gfredericks says, but it requires static knowledge
19:30tomojoh, right
19:30bbloomthe compiler knows that a name refers to a var. so for example of you refer to `inc it emits clojure.core.inc.deref()
19:30tomojIFn is the "oh, actually do deref" case for vars
19:30bbloombut if you #'inc, then you get clojure.core.inc without the deref()
19:31gfrederickstomoj: wat?
19:31bbloombut i wish there was like a metadata hint you could put on symbols: (assert (= 5 (let [x ^:deref (delay 5)] x)))
19:31tomojgfredericks: nevermind, I was confused
19:31bbloomor maybe ^:deref x
19:31bbloomand then you could get at the delay by writing: #'x
19:32gfredericksbbloom: for local stuff symbol macros would solve it, right?
19:32bbloomgfredericks: hm, i guess it would
19:32dnolenbbloom: you already in portland?
19:33bbloomdnolen: no, i get in around 8pm pacific tomorrow
19:33bbloomhow far is the airport from the hotel / arcade? I'll head right over there
19:33dnolenbbloom: cool, I get there around 7:30
19:34bbloomgfredericks: the reason this thought about requesting auto-deref occurs to me is b/c it would enable some lazy evaluation DSLs :-)(
19:35gfredericksbbloom: I think I've thought of that sort of thing as well. would definitely make code more potentially confusing though
19:35bbloombut i guess it can be done w/ symbol macrolets pretty straightforwardly.... so maybe ill look into that if i ever need to do something extra lazy
19:37OneFourSevenDo I have to worry about sql injections if I use sqlkorma?
19:40lynaghkbbloom: you can take the max from the airport pretty much directly to the arcade downtown---it'll be about a 40 minute ride or so.
19:40lynaghk(the max = light rail)
19:43tomojbbloom: how about deref destructuring instead
19:43tomoj(let [xd (delay 5) @x xd] ..)
19:43tomojhmm no room for :as
19:46tomoj(let [(:as @x xd) (delay 5)]) ? :(
19:47tomojer, no..
19:59amalloytomoj: what about (let [^:delay x (some computation)] (if whatever (inc x) 0))? i have that written somewhere
20:00tomojI think I prefer [@x (some computation)]
20:00tomojbut either way, no :as
20:02tomojwhat would (if-let [^:delay x y]) mean?
20:03hyPiRiontomoj: what are you attempting?
20:03hyPiRionSeems like you're trying to reinvent dataflow variables.
20:03tomojnothing very closely related to this discussion
20:04tomojbut yes, I am trying to reinvent dataflow variables :)
20:06wmaxhow do i html escape url strings?
20:21tomojare there reducers which can't be CPS'd?
20:22tomojassume the continuation will only be called once
20:22tomoj(or zero times)
21:26xeqinon-clojure, but any recommendations on places to get an ssl cert?
21:34callahadxeqi: Check with your registrar? Lots provide them free with registrations (or at least, gandi.net does…)
21:34bbloomi have forgotten how anyone gets anything done in the presence of operator overloading....
21:35bbloomthis scala library defines <+ and <* to mean subtly different things
21:35bbloomi have had to look up their meaning to differentiate them EVERY SINGLE TIME I ENCOUNTER THEM. which has been dozens of times in the past hour. i simply can not remember them b/c they have no pronounceable name or provide any hint to their meaning
21:38tomoj"+" and "*" had better be a hint
21:38bbloom<+ means "composition via deterministic choice" and <* means "unconditional linear composition"
21:39bbloomtomoj: if you have a nemonic, i'm all ears
21:39hiredmanporting python code that mixes math and string concatenation, :/
21:39egghead freakin' scala
21:39eggheadhi we always eval left to right except when the operator starts with two colons
21:39eggheaddon't ask why
21:40eggheadwhy does odersky hate programmers
21:40bbloomheh
21:40tomojbbloom: + means "or", * means "and", dunno what those descriptions mean but it looks like it lines up OK
21:41bbloom<+ is like clojure.core/cond, <* is like clojure.core/comp
21:41bbloomi'm calling them choice and pipe
21:42eggheadscala, where fn references aren't real references unless you partially apply them to some magical thing named _
21:42bbloomALL HAIL THE GREAT _
21:44SegFaultAXegghead: Actually, you only need one colon to change the associativity.
21:44eggheadoh? didn't know that
21:45eggheadi thought for instance a :: b was a method of a but a ::: b was a method of b
21:45SegFaultAXegghead: The folding operators are a good example
21:45john2xis there a utility method to create ring requests? can't seem to find it in ring's api page.
21:45eggheadjohn2x: ring mock is nice
21:46bbloomat least with mathematica you can FullForm[Hold[...]] to debug associativity
21:46bbloomwith haskell & scala, you just need to wait for the compiler to give you a type error, or wait until you have a bug in production
21:47john2xegghead: cool thanks
21:47SegFaultAXbbloom: The #1 #2 and #3 things I dislike about Scala are how fricken complicated the syntax is.
21:47SegFaultAXbbloom: I have a really hard time getting used to it.
21:48eggheadSegFaultAX: ya scala seems very context sensitive
21:48eggheadstuff like if you call a method with or without parens, might work in some places but not others
21:49bbloomi have nothing fundamentally against infix operators, it's just that they add significant notation complexity which is extremely unwelcome while you are learning concepts. all operators should be required to map 1-to-1 with a named prefix operator/function/macro/whatever & then i should be able to OPT IN to operators as i desire the notation to tackle bigger and bigger problems with the semantics i need
21:49SegFaultAXegghead: Eh, that's something else. That's really more a matter of "does this class I'm working with observe the uniform access principle"
21:49bbloommathematica gets that half right: you need to use FullForm to opt OUT
21:49SegFaultAXegghead: Most do, some don't.
21:49eggheaduniform access principle, ya
21:50eggheadI don't even want to even know that that is a thing but when writing scala you have to
21:50eggheadSegFaultAX: if that's not the syntax would you say it's the semantics?
21:50SegFaultAXegghead: Well, omitting the parens is a nice to have when accessing properties. It is by no means a requirement, though generally idiomatic.
21:50xeqijohn2x: ring-mock is the base one. If you also need a cookie jar you could look at my peridot or kerodon libraries
21:51SegFaultAXegghead: The point is you shouldn't care if the thing you're accessing is a property or a field.
21:51eggheadSegFaultAX: but having it not be really uniform means you do have to care
21:52SegFaultAXegghead: Don't write shitty classes that don't follow the convention, then. ;)
21:52eggheadI try not to write scala if I can help it, but I inherited some scala last month from another team :(
21:52egghead:p
21:53bbloomthe uniform access principle is not-mega-objectionable for reads, but holy crap is it a bad idea for writes via methods named foo_=
21:53bbloomconsider a calls representing a rectangle, if you try to do rect.right = 500
21:53bbloomwhat happens?
21:54bbloomdoes it move the rectangle or resize it?
21:54SegFaultAXbbloom: I /really/ hate how overloaded the character _ is in Scala.
21:54bbloomeven if you agree on it moving or resizing, then suddenly the order of updates matter! if you change left and right or right and width or whatever
21:54bbloomeven if you have an immutible rectangle and left_= returns a new rectangle, these problems exist
21:55bbloomin fact, i'd argue that property setters is one of the dumbest ideas... ever.
21:55SegFaultAXbbloom: I concur. I don't know why you'd ever want a setter on a computed value.
21:56bbloomSegFaultAX: the only time it makes any sense is when you have a trivial converter, like if you wanted to data bind a number to a text box and needed Integer/parse with white space trimming
21:56bbloombut even then, you're gonna likely want to override that policy, so who says what gets to be theInteger_=
21:56bbloomugh. setters. dumb idea
21:58tomojinteresting
21:58ivaraasensetters. it's what plants crave.
21:59tomojyou'd need a function with domain and range subsets of XxYxWxH
21:59tomojer
21:59tomojthe products of subsets of {X,Y,W,H} I mean
22:00tomojlike your multidirectional dataflow graph functions
22:00bbloomtomoj: heh, rectangle representation is a soap box i can stand on for days
22:00bbloomrectangles expose so many problems with object oriented programming, it's not even funny :-P
22:01ivaraasenbbloom: taking an OOP course at the moment. so much silly stuff
22:01bbloomrectangles fundamentally have 4 fields. but what are they? left/right/top/bottom? x/y/w/h ? center-x/y, half-w/h ?
22:01bbloomwhat about representations as two points? top-left and bottom-right?
22:02bbloomor a center and two half widths in a size vector?
22:02bbloombut let's dumb the problem down: circles! they only have a position and a radius
22:02bbloomstill, point or pair of ints?
22:03bbloomlet's dumb it down! a Range of integers: minimum and maximum!
22:03bbloomoh wait, is it [min,max) or [min,max]
22:03bbloomthis shit is hard.
22:03bbloomor is it min & length ?
22:03bbloomadd some getters and setters, paper over the problem
22:03bbloomand suddenly range.length = 5 is a mega confusing arbitrary decision that yields signficant order of statements bugs
22:05lynaghkbbloom: have you seen a nice way to handle that with records in Clojure?
22:05ivaraasenthe correct implementation of a triangle is a class inheriting from Shape, which wraps CartesianSpace<Point>, which in turn is a superior ArrayList, because I wrote it. sigh.
22:06lynaghkbbloom: i.e., sometimes it's natural to want to (assoc my-rect :top 1 :left 2 :bottom 5 :right 11), and other times I want to refer to width and height
22:06bbloomlynaghk: not really.... afterall, deftype and defrecord are slighly-less-featureful (in a good way) OOP
22:06lynaghkbbloom: right, so basically you need to pick one canonical basis and then use functions to get/set the others?
22:06bbloomthis is something i've thought a bit about tho. i think that there is some sort of algebra of nouns or something yet to be discovered
22:06tomojisomorphisms are lenses
22:06lynaghkbbloom: or go to town with constraints and macro-generated code for an IAssociative implementation
22:07bbloomlynaghk: but then you have the setter problem
22:07lynaghkbbloom, tomoj: yeah. right. are you aware of any lense implementations for Clojure records
22:07lynaghk(Not that I'm sure it's a good idea whatsoever)
22:07bbloomi'm anti lenses :-P
22:07lynaghkbbloom: that's why I'm thinking you should have to specify everything with constraints
22:08lynaghkI mean, core.logic is just SITTING THERE.
22:08tomojno, I've been working on it slowly
22:08bbloomi spent some time studying them & decided that symbolic algebra is fundamentally superior
22:08bbloomconstraints < algebra
22:08tomojsymbolic algebra?
22:08lynaghkbbloom: I don't know enough about your termonology to understand; do you have some references?
22:09bbloomlynaghk: http://en.wikipedia.org/wiki/Computer_algebra_system
22:10tomojyou'd write an equation for the isomorphism between x,y,w,h and (say) sw,ne ?
22:10bbloomthe problem is that anyone who ever tries lenses or constraints or anything like that, tends to write a paper with some linear algebra & fundamentally ignores business logic domains
22:11bbloomtomoj: yeah, i think you could define a rectangle in terms of some algebraic relations & then the compiler could find a spanning tree of terms. every spanning tree is one possible representation
22:11bbloomhowever, i can only assume this is undecideable lol
22:12ohpauleezlynaghk: I'm going to jump in here
22:12ohpauleezI have record invariants working
22:13lynaghkohpauleez: gist?
22:13ohpauleeza semi-working generator from Alloy, and an implementation of basic constraints from core.contracts
22:13lynaghkohpauleez: that's my mantra for the over-educated inhabitants of #clojure---gists or it's not a real idea =P
22:14lynaghkohpauleez: this is what you'll be talking about at Clojure/West, yeah?
22:14ohpauleezin my branch of core.contracts, I have a protocol with (constrain ...)
22:14ohpauleezlynaghk: Yeah, this is my talk on Monday
22:15ohpauleezmy examples are all about functions, because I think more people can relate to it. But the underlying pieces also work with Records. I haven't fully solidified the API wrt records
22:15ohpauleezso it's subject to change
22:16lynaghkcool, I didn't know you had features for inline usage---I thought it was all out-of-band verification and maybe some runtime assertions
22:16ohpauleezit has open handlers, that act as decorators
22:17lynaghkohpauleez: yeah, when I last thought about this kind of thing I wasn't sure what I wanted the API to look like---ideally for some class of relationships everything could be patched into the standard IAssoc and ILookup implementations and Just Work (tm)
22:17ohpauleezso it'll generate you n-versions of the thing you're spec'ing
22:17ohpauleezI did not take that approach
22:17ohpauleezand I'm with bbloom
22:17ohpauleezthere's more power in an algebra and discrete math
22:18bbloomohpauleez: i want to express my program assertions in first order logic :-P
22:18lynaghkohpauleez: see my comment re: gists.
22:18ohpauleezlynaghk: see my response: Monday
22:18ohpauleez:)
22:18lynaghkohpauleez: =)
22:18bbloomthat reminds me... i need to write a README before I open source some stuff .... heh
22:19bbloom*shrug* sounds like a good use of my time on the flight
22:19ohpauleezbbloom: flying from?
22:19bbloomJFK
22:19ohpauleezahh you're already in NYC
22:20bbloomyeah, since end of january
22:23john2xhow do I write tests for my handlers that go through the routes? (instead of just passing mock requests directly to the handlers)
22:24xeqijohn2x: pass the mock requests directly to the route functions
22:26john2xxeqi, hmm, by route functions, you mean those middleware wrappers?
22:29xeqijohn2x: I was assuming you were using (defroutes some-routes ...). Then you could do (some-routes mock-request)
22:29xeqiif you are wrapping middleware around them then just use the handler that returns
22:30Raynesxeqi: You've been using laser, right?
22:30xeqiRaynes: I'm using it to build my screencast site
22:31Raynesxeqi: Good experience so far?
22:32lynaghkxeqi: you're building a screencast site too?
22:33xeqilynaghk: yes, and eric normand did the kickstarter
22:34xeqilynaghk: are you making one?
22:34xeqi* not that mine and his project are related, just another person I know making screencasts
22:34lynaghkxeqi: yeah, though not with Clojure as a topic right now
22:34xeqiRaynes: its been pretty good
22:35Raynesxeqi: Pretty good sounds horrible.
22:35xeqithere was some confusion about fragment vs parse-fragment, and which one worked with content, and which with remove
22:35lynaghkxeqi: but I'm helping a friend do one for Photoshop (retouching in a production environment) and using the same tech stack for a "personal devops" site
22:35Raynesxeqi: Well, parse-fragment and fragment do completely different things.
22:35Raynesparse-fragment just parses html into something you can pass to fragment and do work on.'
22:36xeqilynaghk: I put up a sample video at http://www.clojurewebdevelopment.com/videos/friend-interactive-form to gauge interest, and based on it and in person conversations it seems like there is a small, but willing to pay market for clojure videos
22:36Raynesxeqi: Come to LA in April. I'm gonna give a talk at the LA Clojure meetup about it.
22:36Raynes;)
22:36xeqiRaynes: hmm, maybe I meant nodes
22:36lynaghkxeqi: yeah, I'm not surprised. I might dip into it later this year; Eric Normand's kickstarter certainly validates that
22:36Raynesnodes is basically parse-fragment.
22:37RaynesIt just also normalizes things. If you give it a node, it gives you back something you can pass to fragment.
22:37RaynesBleh. My docs probably suck.
22:37john2xxeqi: ah got it. this is cool
22:37RaynesFeel free to suggest improvements. You have the benefit of being a guy who didn't write laer.
22:37alandiperti would pay for a service that forced others to watch clj videos
22:37xeqiRaynes: css selectors :p
22:37technomancyalandipert: get y combinator on the phone; I smell a market
22:37lynaghkalandipert: your best bet is to pay off a flight crew
22:37Raynesalandipert: Pretty sure that's called terrorism.
22:37Raynes:p
22:38Raynesxeqi: I meant doc improvements. :p
22:38technomancyRaynes: or advertising. fine line.
22:38alandipertingenius ideas, all of them
22:38eggheadnice Raynes -- will catch that laser talk :)
22:38RaynesBut sure, css selectors could be done.
22:38lynaghkalandipert: when are you getting into town?
22:38Raynesegghead: Oh right, you're in LA aren't you?
22:38alandipertlynaghk, tomorrow at 2pm
22:38eggheadmhm
22:38eggheadvisiting pdx this week but la regularly
22:38Raynesegghead: It's actually May that I'm talking. May 5th I think, but I might be wrong. Some day in May.
22:39lynaghkalandipert: okay, cool. I think I'm just going to head over to downtown and start drinking coffee with clojure friends nonstop starting tomorrow at 10am.
22:40lynaghk(hear that Clojure friends!?! Find me tomorrow for free coffee and tours of hipsters in their natural habitat)
22:40lynaghktechnomancy: Public Domain is the only coffee shop I've ever been to that has an "espresso happy hour"
22:41Raynesegghead: Okay, May 2nd. This time for sure (I looked at the email).
22:41RaynesIf you do come, make sure you introduce yourself to me.
22:41eggheadcheers Raynes -- at the clj meetup?
22:41lynaghktechnomancy: just don't order an espresso to go, or they'll get pissy at you.
22:41dcolishPublic domain is pretty good, you should also check out Spella
22:41RaynesJust walk up and say "Yo, I'm Mr. Egghead."
22:41eggheadhaha lynaghk I might take you up on that :)
22:42alandipertlynaghk: yes excellent, i look forward to caffeinating with you
22:42bbloomlynaghk: i get in at 830 or so. please bring my free expresso to the arcade party, thank you :-)
22:42lynaghkbbloom: you forefeited it when you said, "expresso"
22:43eggheadI've been wine tasting today in mcminnville
22:43bbloomlynaghk: i'd say that i'm surprised i made that typo, but i'm not really
22:43eggheadeveryone is so nice over here, i'm used to la where everyone hates everyone
22:43eggheadexpresso b/c it makes you go fast vrooom
22:44lynaghkegghead: yeah, that weirded me out when I moved here from North Carolina---I distinctly remember wondering why all the cars were stopping and realized it was because I was on the sidewalk *looking* across the road.
22:44technomancylynaghk: I would never order espresso to go
22:44technomancyyou have to give it your full attention immediately
22:45lynaghktechnomancy: yeah, nor would I. Just saying, I've heard you'll get a lot of lip and/or be refused service there if you do that
22:45technomancyhaha
22:45technomancydcolish: well, proximity to the hotel is another key factor
22:45lynaghktechnomancy: Coava Coffee on the east side (directly off the Hawthorne Bridge, basically) is also very good.
22:45technomancyI'm more interested in the pour overs anyway
22:46technomancylynaghk: I think there's a place up here that serves their beans
22:46eggheadI like my espresso burnt and bitter
22:46eggheadgenerally I wait around 5 mins after they are pulled to drink them to make sure they don't taste right
22:47lynaghkegghead: it's fun to play pretentious now and again, but I wholeheartedly agree that the best way to have anything is to just have it the way you like it
22:47lynaghkegghead: which is why I plan on continuing to drink only sub-$10 bottles of wine, preferably in parks.
22:48alandipertand why i choose to drink only microwaved day-old mcdonalds coffee that i find on my desk
22:48lynaghksee, what's nice about Clojurians is just how damn pragmatic we are =P
22:48bbloomi'll be honest: i'm quite enjoying the bland black coffee that every corner deli has in NYC - it's just so much faster than waiting for someone with some skill to prepare your beverage :-P
22:49bbloomit means that when somebody drags my ass down to tribeca or some other rich person neighborhood, i can really enjoy a good coffee as a novelty of sorts
22:49eggheadwhy bother drinking it when you can take it via drip
22:49bbloomegghead: where do i sign up?
22:49dcolishtechnomancy: Spella is a 1.5 blocks from Public Domain
22:49dcolishi highly recommend getting both
22:49egghead:p
22:49dcolishstumptown is ok
22:50dcolishbarista is good if you get heart or verve beans
22:50xeqiRaynes: I was surprised by the difference in https://www.refheap.com/paste/12647
22:50dcolishwe take coffee a little too serious in pdx
22:50xeqialso that error message sucks
22:50xeqithough we had this discussion at one point and I got something working well enough
22:50xeqibesides that its been good
22:52Raynesxeqi: You shouldn't be calling fragment on either of those things.
22:53Raynesxeqi: Also, in the latest versions you can actually now just throw strings in there unescaped. You just have to call me.raynes.laser/unescaped on them.
22:53xeqiRaynes: its a simplified example, imagine replacements happening inside (laser/fragment ...)
22:53RaynesGotcha.
22:54RaynesYeah, I should probably look into why that doesn't work. It doesn't look dumb at first glance.
22:54RaynesNot that anything you'd ever do would be dumb.
22:54Raynes<3
22:54Raynesxeqi: Is this happening with the latest laser?
22:54xeqiuse case: I'm processing a page and turning it into a fragment and send it in a ring response, and then have a middleware do the laser/document with the layout
22:55xeqi[me.raynes/laser "0.1.21"]
22:55xeqiso no
22:55xeqior.. untested
22:55RaynesYeah, there were lots of changes in content over the last 0.x.x releases. And bugs.
22:56RaynesMake sure you update. The latest version is stable and not going to change from underneath you.
22:56xeqi$latest me.raynes/laser
22:56Raynes$latest me.raynes/laser
22:56lazybot[me.raynes/laser "1.1.1"] -- https://clojars.org/me.raynes/laser
22:56lazybot[me.raynes/laser "1.1.1"] -- https://clojars.org/me.raynes/laser
22:56Raynes!!
22:56Rayneso/
22:56hyPiRionzing
22:57Rayneshttp://dl.dropbox.com/u/23745600/Screenshots/aOry.png Immortalized.
22:58technomancydcolish: you're talking to someone from seattle =D
22:58technomancybut thanks; hope to try them both
22:58Raynestechnomancy: You should come visit me. <3
22:58RaynesWe can have dinner and you can push lein issues at me.
22:59dcolishtechnomancy: well a big NW highfive
23:01xeqijohn2x: how is the ring testing going? any problems?
23:18xeqiRaynes: ahh, html-content disappeared
23:26xeqibut looks like the (l/content (l/nodes ...)) works
23:27xeqiRaynes: looks like the example paste works fine in 1.1.1, so no more confusion for me
23:38Raynesxeqi: Yes, content serves both purposes now.
23:43Rich_MorinFYI - Light Rail notes for Portland - http://pastie.org/6578091
23:44technomancywow, pastie is still around
23:45technomancyI remember being in the channel when that was created in 06
23:45Rich_Morinyep, and accepting donations for Josh's brother Nate.
23:47jeremyheilerRich_Morin: Thanks!