#clojure logs

2013-09-25

00:10`cbp~letfn
00:10clojurebotletfn is https://gist.github.com/hiredman/1179073
00:17amalloySegFaultAX: he's just reviving a years-old hobby horse of his
00:22mercwithamouthclojure has the cleanest regex i've come across o_O
00:33film42424Is it better to use loop + recur, or just call your method like normal? I understand theirs like a stack limit or something.. but im just wondering as far as best practices go.
00:34boogieHi everyone. Has core.typed been deployed in production?
00:35TEttingerfilm42424, loop recur is best because tail recursion can blow the stack on the JVM, unlike most scheme implementations
00:35film42424that's what I thought.. thanks TEttinger :)
00:35TEttingerfilm42424, however, many tasks can be solved with functions built into clojure
00:36TEttingermap, reduce, filter, into, and so on
00:36TEttingerloop recur is kinda a last resort to me
00:36TEttingerI still use it though
00:37film42424TEttinger: So does this seem fine to you? https://github.com/film42/list-em-with-clojure/blob/master/src/list_em/core.clj#L23-26
00:37TEttingerno, on large lists that will blow the stack
00:38TEttingeralthough I'm honestly not sure how to write a recur solution there, since it recurs for each item in the seq
00:38TEttingerI will fiddle
00:39film42424thanks!
00:39film42424I'm sure it's not the best way.. I'm just trying to evolve from the OOP to functional style.
00:40ambrosebsboogie: CircleCI use it http://t.co/nzLeUo9kzX
00:41ambrosebsboogie: for at least 3 months
00:41boogieambrosebs: Hey! Answers from the source, I love IRC
00:42ambrosebsboogie: #typed-clojure might reveal more, but CircleCI is the only one I'm aware of in production.
00:42boogieambrosebs: So, the whole idea of core.typed is that I can strong and statically type parts of my clojure code. Is that a fair statement? Meaning, I know there're things that I'd like to be dinamically but I know of others I really want to make statically typed.
00:42ambrosebsboogie: yes. It's like a linter that needs handholding.
00:43jared314does anyone know if clojure-contrib/import-static was moved into another project?
00:43seancorfieldambrosebs: can you add an optional to suppress the warnings about unannotated code too? :)
00:43seancorfield(i know, i should just create a JIRA issue)
00:43seancorfieldjared314: no, it was not, sorry
00:44jared314seancorfield: ok, thanks. I guess I will just use the mighty copy and paste
00:44ambrosebsseancorfield: the warn-on-unannotated warnings?
00:45seancorfieldi know i can just ignore the warnings (after adding the line of code to make them not be errors) but... :)
00:45akurilinI noticed that compojure comes with a couple of helpers for helpers for returning files directly to the caller such as files/resources. Is the use case for when you decided to include those static resources in the .jar instead of letting the web server access them directly outside of the ring app?
00:45brehautakurilin: correct
00:45boogieambrosebs: So, if there a way to extend core.typed capabilities? What I am fantasizing about is to be able to have some statically typed guarantees ala OCaml for some pieces of my code (like catching missing cases in match expressions for example). Would that be possible?
00:45seancorfieldambrosebs: yeah, i know it sounds like it defeats the object but to really be gradual, you need to have it only check annotated fns and just ignore the rest, at least as an option
00:46brehautakurilin: however, if you configure your webservers proxy pass caching correctly, those resources can then be cached by the server for quick serving, but still allowing you to keep the canonical versions managed within your application
00:46seancorfieldideally i'd like to be able to specify arguments to lein type-check for that, tbh
00:47ambrosebsseancorfield: agreed.
00:47ambrosebsboogie: It's probably possible if you set it up carefully.
00:48ambrosebsboogie: I'm not really sure.
00:48TEttingerfilm42424, just tried running it on my massive subdirectory-laden code folder. it locked up.
00:48film42424:(
00:49film42424So to optimize.. would using a loop + recur be my best bet?
00:49ambrosebsboogie: it's not clear how to extend core.typed without changing the implementation yet.
00:50akurilinbrehaut, that's pretty neat, thanks! If I'm reading what you said correctly, you're recommending setting cache settings on the web server (such as nginx's location block + expires) rather than having the ring app set a cache header?
00:50brehautakurilin: yeah.
00:50TEttingerfilm42424, I actually don't know how the best way would work
00:50TEttingerit's an odd case
00:50film42424yeah
00:50boogieambrosebs: Interesting. Fascinating stuff.
00:51brehautakurilin: it also means if you use a tool to generate static resources (such as a css generator) that you have a uniform interface
00:51film42424I'm gonna focus on making list-dir return a tree first
00:51TEttingerpersonally I would try to return something useful rather than mutate state
00:51akurilinbrehaut, is the philosophy simply that the web app should not concern itself with the concept of http caching and instead let tools down the chain worry about it?
00:51TEttingerheh same idea
00:51film42424but srs, thanks TEttinger!!
00:51TEttingernp
00:52TEttingeranything to avoid working on my projects :P
00:52akurilinbrehaut, "uniform interface"? Could you clarify?
00:52brehautakurilin: a web app can do the caching when it needs to. however, for something like static resources, the front end web server isprobably better suited to it. nginx for instance is very fast at turning around a static resource, and its certainly faster than having to pass through to an app
00:54brehautakurilin: well, if all your static-to-the-client resources are served up from inside your app (be it via resources/files or some custom handler that actually computes the resource on demand) then they can be managed uniformly at the front end server: same config would apply to css as (say) scss/css-gen/garden
00:54akurilinbrehaut, oh yeah, I forgot about file extension regex -based caching settings
00:54akurilinthose are really handy
00:56akurilinbrehaut, what's actually neat about this is that as far as I can tell there's almost never a need to pre-generate static assets with this approach since you'll at most have to generate them once in the web app and cache them at server level for a long time.
00:56brehautakurilin: yes exactly
00:57brehautakurilin: its also nice to be able to use webjars.org
00:58brehautakurilin: ie, say you mistakenly choose to use jquery in your project. you can specify jquery and its version coordinates in your lein project.clj and its automatically managed for you
00:58akurilinbrehaut, as in, you don't have to save a version in the repository ?
00:58brehautakurilin: correct
00:59brehautakurilin: btw, hat tip to cemerick for point all this out to me some months ago
01:00akurilinbrehaut, I guess the only downside is that it's an external dependency, so it's only as good as its uptime
01:00brehautakurilin: agreed. its however not as problematic a dependancy as say web fonts
01:01akurilinbrehaut, I was going to say.. google web fonts can be completely unpredictable.
01:01brehautand thats probably the most reliable of them
01:01akurilin5 seconds for that font api call Oo
01:01brehauttypekit is pretty good but ive had it disappear on some client sites
01:02akurilinbrehaut, on the previous thread, I imagine that with the caching strategy we discussed you can arbitrarily decide whether you want your js minimized at runtime depending on whether you're in production or not?
01:02brehautakurilin: obviously if you are building a product you should just buckle up and buy licenses for your fonts of choice
01:03brehautakurilin: indeed
01:03akurilinoh man I'm liking this.
01:03akurilinbrehaut, are you supposed to pay for google web fonts? I might have missed the license agreement :|
01:04brehautakurilin: no
01:04TEttingerfontsquirrel
01:04brehautTEttinger: there are a handful of good fonts on fontsquirrel, but its also a wasteland of poor choices
01:04TEttingerfontstruct! make your own font
01:05TEttingerit's what I do
01:05film42424Somewhat on topic.. Mozilla dropped a new typeface today: http://mozilla.github.io/Fira/
01:05brehauti know im not a capable font designer
01:05`cbpfilm42424: hi, i think this does what you were trying to do? https://www.refheap.com/18975
01:05brehautfilm42424: yeah fira is very nice
01:06akurilinFontsquirrel saved me a couple of times when I didn't have all of the right font extensions. Chrome on Windows has a delightful habit of failing to do proper antialiasing without the right incantations
01:06brehautakurilin: yeah ive valued fontsquirrells tooling more than its selection
01:07film42424`cbp: wow! that's amazing
01:07`cbpfilm42424: you should attempt to make a tree though :P
01:07film42424yeah.. but still this is really good.. just need to make sure I can make sense of it
01:08film42424how clojure handles recur is still new to me
01:09akurilinalright I'm going to go back to figuring out how to mix selmer and liberator for a fake static website (complete overkill)
01:09akurilinbrehaut, thank you for taking the time to explain all that goodness.
01:09akurilinmind blown.
01:09brehautakurilin: no problem.
01:10film42424`cbp: Thanks for this though! I really appreciate it :)
01:10`cbpnp
01:16`cbpoh man closing nrepl shuts down java on mac? How many goodies have I been missing out by using windows? :P
01:17`cbpno more (System/exit 0) -> autocomplete makes emacs freeze halfway through
01:17indigo`cbp: Macs are awesome, vertical integration ftw
01:18`cbpI would end up with like 4-6 jvms open after a day's session of clojure despite no emacs open :P
01:18indigoWelll
01:19indigoIt's still a shittier repl than if I used emacs... but I can't bring myself to switch from vim
01:20indigoMaybe I should try it :P
01:21`cbphah well it just segfaulted
01:22`cbpcan't have everything...
01:23Viestihmm, how to get nrepl.el M-. to jump to java sources (java source dependencies in ~/.m2, like IFn.java etc.)?
01:24indigoHoly crap, how big is emacs
01:24s4muelindigo: the size of a small OS
01:25`cbpdepends.. I hope you're getting the binary hah
01:25indigoI guess it is a small lisp machine
01:28KeletHi, sorry about this question, but I'm curious: Why use Clojure over say, Scala? It seems like having static typing and a type inference system is nice and a common choice today. I've done some reading and it seems like the metaprogramming capabilities, and REPL(s) for Clojure, being a Lisp-like language, are great. But can anyone give me additional reasons perhaps?
01:29KeletI only have cursory knowledge of Lisp/Scheme and have never seriously used functional programming, and I wanted to try a language on the JVM since I already use it a fair amount.
01:31mercwithamouthwhat's a good book for data structures....other than the haskell/standard ml book?
01:33noidiKelet, give both a try and pick the one you like best :)
01:33chordHaskell > Scala
01:34Keletnoidi, Honestly, I tried to give Scala a try, but I ended up writing a bunch of Java-alike code because it was convenient or seemed more efficient. It was also very complex and the build/packaging system was giving me trouble. Figured I would try Clojure but not being experienced in a Lisp-derived language, it's a bit daunting.
01:35chordtry haskell
01:35mercwithamouthKelet: same...i played with scala half heartedly for 2 years...
01:35mercwithamouthchord: learn haskell and clojure together? not overkill?
01:35Keletchord, I did, but several things put me off of it
01:36KeletI tried installing gtk2hs from cabal. That did not work. I was advised to download an old version or something. Also, I'm not sure if I'm sold on purely functional. Reactive extensions seem to make things more intuitive, though.
01:36chordKelet: you were too dumb to understand haskell?
01:36KeletMaybe.
01:37KeletI have a limited amount of time, and I'd like to be able to use imperative programming without juggling monads, I think. Maybe I'm missing something but when trying to use multiple monads at the same time I ran into a fair few problems.
01:37akurilinIs format what I should be using for string interpolation?
01:37chordso you admit you were to dumb to understand monads
01:37KeletMaybe I'm too stupid to understand monads but I'm not looking to write code that is transparently concurrent or needs lazy evaluation, so I'm fine with using imperative in some places.
01:39mgaarechord: are you being serious?
01:41KeletShrug, suppose I'll just try porting part of my current project to Clojure and see how it fairs, nice to meet the locals then :)
01:42mgaareKelet: what are you working on?
01:43noidiKelet, I think Clojure's a great gateway language for getting into FP
01:43Keletmgaare, A procedural worldbuilding algorithm -- 3d in that there is a z-axis, but intended to be rendered 2 dimensionally.
01:43mgaareKelet: sounds interesting, and not a bad project at all to see some of clojure's strenghts
01:44noidiit's opinionated enough to push you out of your imperative comfort zone, but you don't have to learn a load of new concepts before you can do anything with it (my impression of haskell)
01:44indigoI always felt that Scala was kinda ugly
01:45noidiI'm sure #scala would say that about Clojure :)
01:45indigoProbably ;)
01:46indigoI used to think Lisps were scary until I dived in
01:46KeletI read a lot about the advantages of a static typing system, and type inference systems though, which is mainly why I question Clojure. I know it might be an opinionated and/or kool-aid thing, but dynamic typing seems primarily to reduce the complexity of things like polymorphism but not give much else in terms of advantages
01:46indigoNow I'm a SmugLispWeenie ;P
01:46indigoKelet: The cool thing about clojure is that you can make it statically typed if you want
01:46KeletI guess you could say I was sold on the concept of static typing being advantageous after working with Lua code for a long time, and spending many hours trying to fix problems related to dynamic typing
01:46indigohttps://github.com/clojure/core.typed
01:47KeletDo you think I could jump into Clojure while using core.typed and not really 'lose' anything?
01:47KeletOR should I just do plain Clojure first?
01:47indigoI think you should just do plain Clojure
01:47indigoI suggest starting with Clojure Koans
01:47KeletI remember trying Racket and using Typed Racket some years ago
01:47indigohttps://github.com/functional-koans/clojure-koans
01:48indigoRacket is nice as a platform for PL research
01:48indigoBut I feel like people generally get a lot more done with Clojure
01:48KeletWell, throughout my degree program we used Java mainly, so I think I'd feel at home with the JVM as compared with on Racket's custom VM
01:48KeletAlthough I'm sure using Java libraries in Clojure doesn't feel too natural.
01:49KeletJust wrap around them I guess, if one doesn't already exist
01:49indigoWell, check out the koans, they have one on java interop
01:49eggheadjava interop feels very nice actually
01:49eggheadto the point where I often demo my java apis to the team using clojure and nrepl :3
01:50KeletI used Processing in Java a while back, as I love making visual things, so it's nice to see there's a Clojure version (Quil)
01:50KeletI saw Clojure + Quil being used for live music somewhere recently
01:50indigoegghead: Lucky. I wish I could use Clojure at work... we're a PHP shop :|
01:51indigoKelet: There's also overtone for live music coding
01:51mgaareoh, oh that's awful.
01:51`cbpindigo: time for clojure in php
01:51`cbpphojure
01:51indigoHaha
01:52indigoSometimes I feel like writing code in a functional style in PHP
01:52mgaareindigo: I tried that and found that the language fights against you in many ways
01:52indigoBut then I have to stop myself because it's actually more performant to do a foreach rather than an array_map
01:52`cbpI work at a php shop too but I circunvent that by making the inhouse apps with clojure
01:54indigoLucky you... we have no in-house apps ;P
01:55indigoAnd all the other devs think I'm crazy for using Clojure
01:56`cbpAt least they know it exists :P
01:56indigoHuh, Scala has macros
01:57indigo:P
01:59callenindigo: they're not nice.
01:59KeletIn Clojure, would a directory structure like src/renderer/*.clj, src/worldgen/*.clj, src/main.clj .. etc. be reasonable, or is it similar to Java packages with the backwards domains and stuff.
01:59KeletSeems like many projects I'm looking at have some directory structuring beyond the 'basics' but not quite as verbose as Java
01:59s4muelKelet: The former is just fine
01:59indigocallen: No kidding. Scala has C++ syndrome
02:00indigoThen again I haven't used the language for anything significant; who am I to judge
02:40ryanfwhat's the easiest way to get started with clojurescript? (dependencies-wise)
02:41ryanfclojurescript one looks fine but hasn't been updated in a couple years
02:42ryanfi guess there are fairly recently-updated forks of it?
02:47muhooryanf: there's https://github.com/magomimmo/modern-cljs
02:47llasramryanf: I'm not sure what you mean? Most recent commit was a few days ago: https://github.com/clojure/clojurescript
02:47ryanf"clojurescript one" is the name of a project that is a starter kit for clojurescript
02:47ryanfit looks like it isn't really maintained anymore
02:47ryanfthanks muhoo, will check it out
02:47llasramOh, sorry, hah
02:48muhooryanf: there's also http://pedestal.io/
02:48muhoowhich seems more batteries-included (haven't tried it yet)
02:49llasramryanf: Yeah, apparently Pedastal is the replacement for ClojureScript One
02:49llasramPedestal even
02:49chordstarcraft clone in clojure?
02:49chordyou guys know you want to help
02:52muhooit's funny, i've abstracted things from writing in crappy languages to writing in great languages like clojure to just thinking about writing instead of writing anything :-/
02:53llasrammuhoo: Programmer's block?
02:53muhoo"oh yeah, i could just do x y z, that'd work, real elegant... hmm what's the latest blog news..."
02:54muhoollasram: totally. had it for a year now, off and on. i get a customer deadline and bust out of the block long enough to deliver the goods and send the invoice, then i think about my own projects instead of doing them.
02:54indigomuhoo: I think you just need something cool to hack on
02:55muhoohmm, going on 2 years, now that i think of it.
02:55llasramOr a vacation
02:55ambrosebsKelet: if you're just starting out, core.typed is useful for checking the type of functions at the REPL. (clojure.core.typed/cf +) => [Number -> Number]
02:55llasramStop thinking about code for a month; come back with a fresh mind
02:56muhoollasram: that's a great idea.
03:05KeletWelp - going to spend a few hours messing around with live coding as I like the idea. First lesson learned: namespaces are useful for selectively reevaluating code (i.e., not popping up a new window)
03:08wunkiis anyone using the "reloaded" template from Stuart Sierra?
03:14TEttingerso, I'm using LibGDX (a 2D Java games lib that works on a bunch of platforms) with clojure. it's going great so far, but I'm realizing that I need a way to keep a specific kind of state -- TextureRegions that are costly to lookup in an atlas of textures. Would it be suitable to just keep a {} persistent map and dissoc if I need to save memory?
03:14TEttinger(an atom of that map, that is)
03:52sm0keok this i weird .. i dont find it very convincing of not having optional arguments in functions..although i can have multivariate definitions..but then if voilates dry principle due to repeatition of method body
04:00chordyou need to stop smoking
04:01clgvsm0ke: try https://github.com/guv/clojure.options for better support of optional parameters
04:18chordchannel is dead
04:18chordthat means you guys have nothing to do
04:18chordso lets work on starcraft clone clojure
04:18mercwithamouthhas anyone used compojure/angularjs together? ...without hiccup?
04:19mercwithamouthchord: lol
04:19chordwhats so funny
04:19mercwithamouthawesome idea
04:19chordyou gonna help then?
04:19mercwithamouthif i were worth a damn yet as a developer i'd say "f yeah!"
04:19mercwithamouthlol, i'm prepping to write a web app i've wanted to make
04:20Adeonwould this starcraft clone solve world hunger problems
04:21vijaykiranmercwithamouth: yes
04:21mercwithamouthvijaykiran: you wouldn't happen to have any examples on github would you?
04:22vijaykiranmercwithamouth: nope - but it is a ReST app with Angular FE and Clojure/Compojure BE
04:24mercwithamouthvijaykiran: gotcha. i think i'll start my journey after a few more days of getting the basics down with clojure
04:24chordwhy are all the people in this channel noobs at clojure
04:25wedrhi there
04:25vijaykiranmercwithamouth: good luck :) - should be easy enough.
04:25Jardachord: spend less time trolling here about starcraft clones and spend more time at learning code and you'll be able to write your clone one day
04:25clgvchord: well, they are not. but people that ask questions are usually new in using a lib they need for their projects as of now ;)
04:26chordJarda: you will help me with starcraft clone if I learn enough clojure?
04:27Jardachord: yes. I charge $130 per hour
04:28kevin1024Hi! What's the best way to turn (a b c d) into [[a b] [c d]]
04:28chordJarda: wtf how do you expect me to pay that
04:29Jardachord: I dunno, if you need someone to do your work you have to be prepared to pay..
04:29vijaykiran,(partition 2 '(1 2 3 4))
04:29clojurebot((1 2) (3 4))
04:29vijaykirankevin1024: ^
04:29kevin1024thanks!
04:29wunkiJarda: but you will get equity!
04:29chordwunki: GOOD IDEA!
04:30Jardawunki: I don't found startups, I make contract job. That way my family actually gets food to the table..
04:30chordJarda: you gotta take risks
04:30Jardachord: I do take risks. But writing a starcraft clone is not one of them, unless you pay me by the hour
04:31chordJarda: so you think these guys are going to fail too? https://artillery.com/
04:31mercwithamouth=)
04:32Jardachord: I don't care. I just don't need to take the risk
04:32chordJarda: its not a risk you know the game will succeed
04:32Jardayeah right..
04:33chordJarda: everyone loves starcraft how can a clone fail
04:34clgvchord: because it is only a clone. why does the world need the same game two or multiple times?
04:34wunkidon't forget the fact that you actually need to be able to finish it. SC is not an simple piece of software.
04:35OtherRavenclgv: apparently so given the state of the game industry
04:35chordok jesus fine lets do it this way, clgv gets 80% equity in exchange he bears the cost of paying Jarda's paycheck
04:35chordsound good?
04:36chordWTF IS SO FUNNY YOU'RE GETTING 80% EQUITY
04:36mercwithamouthsmh...
04:36mercwithamouthchord: got a graphics artist/team yet?
04:37clgvdon't tell me that 80% of zero is zero! :O
04:37chordmercwithamouth: I've just been assuming that clgv and Jarda can do that
04:37chordclgv wow you greedy and want 90% equity?
04:38mercwithamouthif you can get a working prototype by Sept 29th i'm in!
04:38mercwithamouth=)
04:38chordJarda are you going to respond to my offer?
04:39Jardachord: yeah as long as I get paid by the hour, billed monthly then why not :D
04:39francis_wolkeIs there a clojure only IRC channel? EG: #seriousclojure
04:39chordclgv: ok so you gonna pay Jarda?
04:39mercwithamouthfrancis_wolke: this is it...tonights a rare night
04:39llasramfrancis_wolke: AFAIK you'll just need to put up with some silliness on occasion :-)
04:40mercwithamouthyou're better off just asking your question...someone will most likely be able to answer it
04:40clgvfrancis_wolke: it is this one. there is just some distraction right now. feel free to ignore it and ask your questions if any
04:40chordthese guys are so damn hard to please
04:41chordwhy is there so little enthusiasm about a starcraft clone
04:43OtherRavenwhat exactly is the difference between a starcraft clone and yet another rts?
04:43OtherRavenand there are a lot of those, even if you only count the decent ones
04:43chordOtherRaven: name one decent starcraft clone
04:43chordeven starcraft 2 sucked shit
04:44OtherRavenchord: I can't, I'm not really a starcraft fan. I'm more into supcom and dawn of war.
04:44clgvchord: well, a game of that size is a huge complex project - you should better start of with a small project and learn yourself some clojure ;)
04:44chordwtf supcom and dawn of war are horrible rts
04:44OtherRavenchord: oh, and achron... that one rocks
04:45OtherRavenchord: we have different definitions of horrible
04:46chordclgv: so we run a open source development of the game so that its spread out over a bunch of peopel
04:46clgvchord: what will you do?
04:46chordclgv: help like everyone else will
04:47clgvvery specific :P
04:48mercwithamouthdamn starcraft...
04:48mercwithamouthwhat i'd like to see/possibly do is create a web framework like 'liftweb' but easier
04:49mercwithamoutha mixture of liftweb, rails(but not nearly as heavy)...
04:49chordclgv: you're not married so you can afford to put in time to make starcraft clone
04:50clgvroflmao
04:51OtherRavenso, like, why are you trying to get people to make a starcraft clone anyway?
04:53clgvOtherRaven: to get 20% equity I guess ;)
04:53llasramI'm apparently missing some really good stuff by /ignoring that guy
04:54OtherRaventehehe
04:54chordOtherRaven: we need a better competitive rts game, you know how the tournaments are mostly starcraft 2 and not supcom and dawn of war cause those suck even more
04:54chordbut we need something better than starcraft 2
04:54clgvchord: the best idea is to get in touch with the blizzard guys directly and tell them about your awesome ideas for starcraft 3
04:55chordclgv: blizzard sucks at making games now
04:55OtherRavenchord: I can agree with that (at least except for your derision of my two current favorite RTSs, but lets not get into that), but why starcraft?
04:55chordblizzard is all about money now, diablo 3, world of warcraft
04:55chordthey make shit games now
04:56chordOtherRaven: we need a remodernized version of starcraft
04:56OtherRavenchord: I guess I missed out by not playing starcraft much when I was a kid, 'cause I don't remember it being that great
04:57OtherRavenchord: but if there's one kind of game the whole open source paradigm works for it's remakes of old favorites
04:58chordOtherRaven: EXACTLY we'll have a huge number of virgin losers like clgv who will be willing to help make the clone of the old favorite
04:58OtherRavenlol
04:59clgvchord: don't judge others by your own situation ;) :P
04:59OtherRavenchord: your logic is sound, but your first step should be finding someone with better people skills to do your recruiting for you XD
05:00chordOtherRaven: thanks for volunteering
05:00chordOtherRaven: your first job is to recruit clgv
05:00OtherRavenchord: lol... my people skills are corrupt/missing
05:00chordOtherRaven: god damn it no one wants to step up
05:01chordWTF
05:02chordwhy do you like shit games like homeworld
05:02chordsupcom and dawn of shit
05:02OtherRavenhomeworld isn't that amazing, but I like the whole 3d space strategy thing
05:06chordOtherRaven: why can't you get clgv to agree to help
05:07OtherRavenchord: I don't know, because I don't have him locked in my garage?
05:10OtherRavenchord: here's a thought, though: projects get done when the person who's doing them is passionate about them... you're (apparently) passionate about this, so you should be the one doing it.
05:10chordOtherRaven: god damn it stop trying to dump the entire project on me
05:10mercwithamouthchord: but it's YOUR project. =)
05:11chordmercwithamouth: NO ITS THE PROJECT OF THE COMMUNITY
05:11OtherRavenchord: you're the one trying to dump your project on other people
05:13mercwithamouthsigh....i'm really trying NOT to buy this book. i had no intentions of learning haskell THIS YEAR http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504/ref=sr_1_1?ie=UTF8&qid=1380098582&sr=8-1&keywords=functional+data+structures
05:13mercwithamouthwhat about the pearls book? http://www.amazon.com/Pearls-Functional-Algorithm-Design-Richard/dp/0521513383/ref=pd_sim_b_1
05:14mercwithamouthi'm ok with working to convert examples to clojure but the entire book can't be haskell, lol
05:14sm0kesicp
05:15mercwithamouthsm0ke: you're right...
05:15mercwithamouthdid not think about that...
05:17mercwithamouthalso what about the little schemer?
05:23chordI hate you all for slacking on the starcraft project
05:25mercwithamouthchord: have you gotten the basic tiling engine done yet like you promised?
05:26chordmercwithamouth: this game is gonna be 3d not isometric
05:26OtherRavenchord: making something awesome that other people want and want to contribute to is a good way to inspire people to help you, nagging them isn't
05:26chordmercwathamouth like this https://artillery.com/
05:27chordOtherRaven: so you failing college thats why you don't have the time to help?
05:29OtherRavenchord: newp, it's just not a project that interests me greatly
05:30mercwithamouthwhat he said...
05:34chordso you guys admit you hate starcraft
05:34chordhow can you think that
05:34chordand live with yourself
05:34OtherRavenchord: yes, that's it
05:35wunkiis the `user` namespace automatically imported in every namespace?
05:35OtherRavenwunki: I don't think so, but I've never tried to use it that way so I'm not sure... should be easy to test though
05:36hyPiRionOtherRaven: pro tip, there's this things called /ignore in IRC. Use it wisely.
05:36OtherRavenhyPiRion: indeed, but then my sarcasm muscle would get all weak and flabby :(
05:36hyPiRionhaha
05:36mercwithamouthlol
05:36wunkiOtherRaven: yeah, I keep getting a cyclic dependency somehow. But I don't import the `user` ns on the other end
05:38OtherRavenwunki: when you put it that way... wouldn't 'user' being automatically used in every namespace pretty much always create circular dependencies though? Seems like it couldn't work that way.
05:39wunkiOtherRaven: I'm trying to use 'reloaded' worflow from Sierra and he uses the `user` ns for development
05:40wunkiOtherRaven: That would mean I couldn't import any other ns in there?
05:41OtherRavenwunki: I don't know about the 'reloaded' workflow (I'm pretty new myself), and I don't often use the user namespace, but I do know you can 'use' and 'require' stuff in it.
05:44wunkiOtherRaven: would believe so. Ok, diving back in :/
05:52ddellacostaCan I use proxy in CLJS?
05:53ddellacostaI guess it's not in cljs.core at least. Hmm
05:53llasramddellacosta: What would `proxy` do in ClojureScript?
05:54ddellacostallasram: yeah, I guess I'm thinking about it the wrong way. I wanted to extend a JS object (goog.ui.Dialog in particular) and reached for proxy out of habit (when dealing with Java). But I suppose I should be using something else.
05:55ddellacostallasram: in particular, I want to override one of Dialog's functions.
05:56llasramAh. I've barely touched ClojureScript, so I have nothing too helpful to add. Was just actually curious what it would do :-)
05:56magnarsIn ring, you can't (slurp (:body request)) more than once, since it's an <HttpInput> mutable object. What would be a good way of working around that?
05:56ddellacostallasram: well, it doesn't exist, so there's your answer…haha.
05:57sm0keheelo i am using codox..but it just simply fails with 'Could not generate documentation for x.y' ?
05:57sm0kealso i have noticed lein is actually very quite most of the times
05:58sm0keis there a verbose flag for lein?
05:58ucbmagnars: do you need to always slurp the body or only sometimes?
05:58ucbmagnars: an alternative is a middleware that did the slurping once and assoc'ed the slurped body to the request
05:59mercwithamouthoooh somone should redo the little schemer as a clojure book
05:59magnarsucb: I have several middleware that use the body, so yeah, might have to create a new middleware that slurps it and creates a resource that can be read more than once
05:59mercwithamouthor a clojure style book in the same pattern. i like this... *pulls out credit card*
05:59ucbmagnars: *nod*
05:59ddellacostamagnars: I suggest use params middleware: http://ring-clojure.github.io/ring/ring.middleware.params.html
06:00ddellacostamagnars: er, sorry, ignore that
06:00magnarsddellacosta: yeah, the problem is two middleware that both want to slurp :body
06:00ddellacostamagnars: yeah, sorry, I misread. :-(
06:00magnarsno worries :)
06:01magnarsI'm a little surprised that ring would expose such a horribly mutable piece of state tho. I had hoped the request would be a value.
06:02llasrammagnars: Except that requests can contain an unbounded amount of request content, so that really isn't practical
06:02magnarsthat makes sense.
06:02llasrammagnars: If you know that normal requests will have bounded content, you can use middleware which turns the body into some sort of value
06:03llasramFor example, the there's ring standard utility middleware to parse a JSON body and provide the :body as the resulting data structure
06:03magnarsyeah, that's one of the two conflicting middlewares I'm using
06:03llasramah
06:04llasramWell... that does seem problematic then :-)
06:04magnarsyeah, but I think it'll work out fine with a middleware like you suggested :)
06:43mercwithamouthis it possible to call/deal with single .clj files with lein...without making projects, like for euler exercises
06:45llasrammercwithamouth: Not really. You still need a way to specify dependencies (e.g., Clojure itself), and namespaces need to map to classpath files to load correctly
06:46OtherRavenmercwithamouth: when I'm doing exercises I generally just make a project and stick each exercise in it's own .clj
06:47llasramFor a different approach, when I was doing project Euler problems in Clojure, I created a project with just one namespace and just kept adding code to it for each problem :-)
06:48llasramThat was loooong file by the time I lost interest
06:48mercwithamouthllasram: hehhheh then that's what i'll do
06:51mercwithamouthllasram: thats what i've been doing working through the brave clojure examples
06:56etehtsea"2009-07-02T10:59:59Z" how can I parse this to date?
06:59llasrametehtsea: Use clj-time
06:59etehtseallasram, ok, thanks
06:59llasramYou can also use the Java standard library stuff, but I'd advise against it
07:02shoshini have a simple question on compojure routes. How do i make a route parameter optional in Compojure. I tried googling the answer but couldn't hit up on a particular way to do it. I even dug into the wiki on GitHub.
07:02shoshinright now i have app/f/:id/:slug/
07:02shoshinand i want the url to render the page even if i hit app/f/:id/
07:03shoshinthe :slug here should be an optional parameter.
07:03shoshinthank you!
07:04mercwithamouthnot related to clojure but does anyone else use ungit?
07:04mercwithamouthi freaking love this tool =P
07:05shoshinthe solutions i saw so far suggest i use a separate route.
07:06mercwithamouthshoshin: saw this one? http://stackoverflow.com/questions/15853103/compojure-optional-url-parameter
07:06shoshinmercwithamouth that's the exact question i saw. that requirers me to define a second url
07:07shoshini want my :slug url to be optional. right now when i hit app/f/:id/ it returns a 404 because in my routes page i defined app/f/:id/:slug/ so the :slug parameter is mandatory.
07:08sm0keis it a good idead to start a background task with (go (server))?
07:08sm0keidea* :P
07:09sm0kei mean a long running task?
07:10llasramshoshin: Another route is the way to do it
07:10llasramIt's not like Compojure is charging you by the route or anything :-)
07:45alfborge(if-let [x '()] :a :b) => :a, (if-let [x (seq '())] :a :b) => b
07:46francis_wolke,(seq '())
07:46clojurebotnil
07:46alfborgeThe context is that I have a function that basically does a (remove nil? ...) which seems to return '(), not (seq '()).
07:47alfborge,(remove nil? [nil])
07:47clojurebot()
07:47francis_wolke(seq '()) is nil
07:49alfborgeYes, I see that. I'm just wondering why if-let has this behaviour.
07:50francis_wolkeIt's an aniphoric macro. Thats how it works. I don't understand what you are not understanding :/
07:50alfborgefrancis_wolke: the word aniphoric for one :)
07:51francis_wolkeits actually anaphoric not aniphoric. I misspelled it.
07:52alfborgeI read the example for if-let on clojure-docs and failed to notice that the filter was wrapped in a seq. My code used remove and I didn't get why it didn't work.
07:52augustlalfborge: it's like if, but the check for truthyness is on the assigned value
07:52augustlthat's about all there is to if-let :)
07:54francis_wolkegoogle for anaphoric macro. Wikipedia has a good explanation.
07:54alfborgeI get it, I was just confused by the fact that '() is a truthy value. My assumptions were incorrect and I further misread the docs.
08:02augustlalfborge: yeah I guess it's more about truthiness than if-let :)
08:02etehtsea(.getTimezoneOffset (clj-time.coerce/to-sql-time "2008-02-27T23:11:07Z")) I'm parsing UTC-time and getting result with my local timezone. How to fix this?
08:02etehtsea-180
08:03alfborgeaugustl: Are there any good clojure user groups in Oslo?
08:03augustlnil and false are the only false-y values afaik
08:03augustlalfborge: there's a FP group that I happen to organize and that happens to not have had any meetings for a long time :) So there's not that much activity.
08:04augustletehtsea: do you mean that the toString output of the date is in your local time zone? That's expected
08:05etehtseaaugustl, I mean that when I'm inserting this datetime to database, I'm getting created_at: "2008-02-28 02:11:07" in the "without timezone" field
08:06etehtseaBut i want to insert it as is
08:06augustletehtsea: ouch, sounds like the problem isn in your database then? Doesn't it store time zones?
08:18etehtseaaugustl, seems to be. http://brian.pontarelli.com/2011/08/16/database-handling-for-timezones/ Looks like it really works like this, but I don't get it
09:02vmarcinkoshort question - what does single quote means *after* some function - such as +'
09:04ambrosebsvmarcinko: there is no special meaning, it's a convention for naming variations on functions.
09:04ambrosebs,(doc +)
09:04clojurebot"([] [x] [x y] [x y & more]); Returns the sum of nums. (+) returns 0. Does not auto-promote longs, will throw on overflow. See also: +'"
09:04ambrosebs,(doc +')
09:04clojurebot"([] [x] [x y] [x y & more]); Returns the sum of nums. (+) returns 0. Supports arbitrary precision. See also: +"
09:05vmarcinkoambrosebs: thanx
09:05sm0kewhats the best way for managing runtime configs in clojure?
09:07vmarcinkobtw, one more architectural question... For any larger apps, do people use/create their own component container? I heard many times that containers are remnants of OOP, but listening to Prismatic team, or Stuart Sierra, they definitely think that using just namespaces and vars don't give clean structure which really can hurt bigger apps?
09:08vmarcinkoi dont assume one needs some heavyweight container framework, but something simple - just for managing public interafces (as sets of related cuntions), lifecycle etc...
09:12hhenkelHi, anyone around who can give me a hint how to use http-kit in a "real life scenario"? My current plan is to have "timed threads" using at-at (https://github.com/overtone/at-at) which fetch data from various data from different urls.
09:13hhenkelThis data should be passed to different threads, that do a data transition and sent it to another system.
09:19hhenkelHow would I realise that with http-kit? Async and then send the reference to the transitioning thread?
09:28TimMcclojurebot: import-static is https://github.com/baznex/imports
09:28clojurebot'Sea, mhuise.
09:44bjaare there any known issues with (:key map) style access in cljs 1896?
09:52mercwithamouthso. loop...recur. is it 'bad' to use recur? I know next to nothing about tail-call optimization though they made a big deal about it in #scala. recur supposedly lacks it?
09:53mercwithamouthhttp://clojure.org/special_forms#recur
09:54mdrogalismercwithamouth: recur enables TCO.
09:55mdrogalisIt pretty much converts the recursion to an iterative loop so the stack can't be blown.
09:57mercwithamouthmdrogalis: ahh how did i get that completely backwards?!
09:57mercwithamouth"Note that recur is the only non-stack-consuming looping construct in Clojure." i see now....
09:58AimHereWell trampoline is another non-stack-consuming construct that can be used for looping
09:59clgv`iterate` could be called "looping" as well ;)
10:00AimHeredoseq and for don't eat the stack either, do they?
10:02chouserAimHere: Right. 'doseq' is built on loop/recur, and 'for' isn't really a looping construct.
10:03mercwithamouthahh doseq..thats what i wanted to look up earlier
10:04chouser'reduce' is sometimes a good alternative to loop/recur or doseq
10:06mercwithamouthany good? https://github.com/krisajenkins/clojure-cheatsheet
10:06doomlord_can't remember .. whats doseq
10:07chouserdoseq supports for-like syntax for walking through seqs, but is for side-effects and returns nil.
10:08doomlord_like a for each i guess,
10:08vmarcinkobtw, i heard that clojure frown upon data encapsulation - why is that? isn't it a good thing to hide for eg. some atom var that is used only within some function contained in same namespace as the atom ?
10:09vmarcinkoso its preferred not to expose that atom outside of that namespace
10:09mercwithamouthreduce can be used...well yeah i guess so. nm =P
10:10mdrogalisvmarcinko: Data encapsulation is only valuable when you want to hide types, or restrict who can mutate something. Neither of which are a problem in this space.
10:10tbaldridgevmarcinko: it makes it harder to debug. and why hide it? if a user wants to modify the data they can always use reflection or something like that
10:11chousertbaldridge: fancy meeting you here. :-)
10:12chousertbaldridge: how would you feel if someone were to characterize the go macro as another implementation of a clojure compiler, one that emits different clojure?
10:13tbaldridgechouser: I wouldn't mind that. Except compiler often invokes thoughts of larger codebases. I prefer "mini-compiler" or something like that.
10:13tbaldridgeBut yeah, it's a CLJ->CLJ compiler.
10:13chousertbaldridge: fair enough.
10:13mdrogalisCouldn't that be said of all macros?
10:14chousermdrogalis: no, most macros consume stuff that isn't (yet) clojure
10:14vmarcinkohmmm, im still a bit confused about state hiding...I have seen fre examples of clojure code that some atom vars are just function implementation detail, that state is not passed to function as argument...But that var is still publicly acessible - is this a good thing so one can itnrospect state of that var from outside, is that what you meant?
10:14mdrogalischouser: Ah, that's subtle. Nice.
10:14ToBeReplacedmercwithamouth: yes, it's awesome
10:14tbaldridgevmarcinko: right, but even better is to pass the data into the functions as arguments. Every time I don't do that I regret it later
10:15tbaldridgemdrogalis: most macros only transform the current form, the go macro does deep transformation, recursing lower into the form and transforming all the children of the current form.
10:15chousermdrogalis: or if they consume clojure code as a & body or some such, they pass it through unchanged. The 'go' macro does pretty deep analysis of the clojure code you pass it, including macroexpansion and custom code for each special operator. Really gutsy stuff that I've never had the courage to attempt. :-)
10:16mdrogalisI tried to look at that macro that does the transformation. Gave up pretty quickly.
10:16mdrogalisThat's a really neat description of it though!
10:20upwardindexIs it possible to perform matching of url using more than regexps in compojure? (like what moustache can do)
10:21silasdavisHow would you rewrite this horribleness: https://gist.github.com/Zariel/4875ba5dc34996e22d0e?
10:21silasdavis(nested if-lets)
10:24mdrogalissome->> maybe?
10:25chousersome-> and cond-> both feel close, but won't actually help, I think.
10:25hyPiRionHere's one place where the maybe monad would actually help
10:25hyPiRionerror monad, rather
10:26ssqqInterpreter of Clojure is comlemente with Java or C?
10:26chouserhyPiRion: I was actually thinking that. state+error or state+maybe monad? But I rarely find those are actually desirable, in the end.
10:26mdrogalishyPiRion: You've awoken tbaldridge, run.
10:27chousersilasdavis: if you have more than just this one function using this pattern, it may be worth a custom macro.
10:28hyPiRionmdrogalis: what? Monads are okay as long as you don't overuse them and make them all convoluted and stuff
10:29chouserbut the state monad is infectious in your code. Hard to use in isolated functions without it infecting the rest of your namespace.
10:29clgvsilasdavis: write a specialized macro
10:31tbaldridgeYes...this... http://www.tuicool.com/articles/fQ7Fri Now I just have to figure out how to do this in Clojure
10:32tbaldridgeKill all the monands!
10:32silasdavishmm some->> is not on clojuredocs
10:32mdrogalissilasdavis: It's new. Let me find the changelog for you.
10:33mdrogalissilasdavis: https://github.com/clojure/clojure/blob/master/changes.md
10:33mdrogalisSearch some some->
10:34ssqqYes, Clojure is implementation with Java and itself.
10:34ssqqClojure have the version on CLR too.
10:35silasdavisthanks
10:35silasdaviswould be nice if I could make json-error-response falsey
10:36zerokarmaleftmdrogalis: http://hueypetersen.com/posts/2013/08/02/the-state-machines-of-core-async/ does a good job of deconstructing the go macro step-by-step
10:37chousersilasdavis: I added a comment to your gist.
10:38ssqq Google Closure optimizing compiler is implemente with what language?
10:39chouserssqq: Java
10:39ssqqchouser: thanks.
10:40chousersilasdavis: what do you think. Does that make sense?
10:40ssqqchouser: This compiler make clojure code to better Javacript run with V8?
10:41tbaldridgessqq: it makes it run better on any JS VM
10:41chouserssqq: it takes a subset of JavaScript and produces other JavaScript that is much smaller. It doesn't do a whole lot to improve runtime performance, but it gets rid of dead code and does inline some stuff.
10:43ssqqthaldridge: It's means that Goole Closure optimizing compiler just do code transfer
10:44ssqqchouser: It's means this tools do the similar job with coffeescript?
10:46chouserssqq: no, I don't think so. CoffeeScript is a different syntax. Google Closure reads JavaScript.
10:47mdrogaliszerokarmaleft: Will check it out, thanks :)
10:47ssqqchouser: you means this tools only optimize Javascript, which tools transfer Clojure to Javascript?
10:47scriptorssqq: you mean the clojurescript compiler?
10:48ssqqscriptor: yes
10:48scriptoryou can find the source for that here https://github.com/clojure/clojurescript
10:49scriptorit's written in a combination of clojure and clojurescript
10:49scriptorthis file (written in clojure) might interest you https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj
10:52ssqqscriptor: O, I see, clojurescrpt is different with clojure with different library, but with same core syntax
10:53scriptorssqq: I'm not sure what you mean by 'different library', which library are you talking about?
10:55silasdaviscan I pass a binding along in a reduce?
10:55ssqqscriptor: I found cljs and clj have same syntax.
10:56ssqqscriptor: clojurescrpt is a compiler or a new language?
10:56scriptorssqq: they're meant to be essentially the same language
10:56scriptorwith some differences here and there because they run on different platforms
10:57`cbpsilasdavis: what do you mean?
10:57scriptorssqq: clojurescript is the name of the language, the compiler doesn't have any particular name
10:58ssqqscriptor: that means clujurescript run on any JS VM and clojure run on JVM?
10:59scriptoryes, the clojurescript compiler takes clojurescript code and compiles it to js, this js can run wherever any other js can run
11:01ssqqThanks scriptor, chouser and <tbaldridge>
11:07Morgawrsmall question.. what's the best way to implement a simple barrier for multiple thread synchronization in Clojure? something like a condition.wait() and then condition.signalAll() in Java
11:07MorgawrI was considering having a promise of some sort shared between all threads trying to dereference it and then the last one delivers it
11:07Morgawrhence it awakens all the other threads
11:07Morgawrwould that be correct?
11:12rboyd_Morgawr: have you looked into core.async?
11:12tbaldridgecore.async won't really do what he wants
11:12astevewould you say clojure is loosely typed or implied typed?
11:12astevejava is obviously statically typed
11:13silasdaviscan I do something like (with-bindings {a 3} a)) that actually works?
11:13silasdavislike a let that takes a map
11:13tbaldridgeasteve: strongly dynamic
11:13Morgawrrboyd_: I haven't, I kind of wanted to do this with just the native clojure library without using other libs
11:13Morgawr(I'm trying to port a multithreaded piece of code/algorithm from java to clojure and want to see how it performs in comparison and how the result code compares)
11:14`cbpsilasdavis: you'd have to write a macro yourself and have it defer to let
11:14GrayArea@find doctor sleep
11:14`cbpsilasdavis: vectors in clojure code pretty much always mean bindings
11:14tbaldridgeMorgawr: perhaps use a cyclicbarrier http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CyclicBarrier.html
11:15Morgawrtbaldridge: seems that the CyclicBarrier thing is only for "fixed" amount of threads
11:15Morgawrin my case they can vary
11:15Morgawrdepending on the path search taken by each thread (it's a multithreaded graph-traversal thing)
11:16Morgawrthe java implementation uses a shared counter for each node, if the counter is > 0 then each thread that reaches such counter decreases it and then waits until it becomes 0
11:17Morgawrin the Clojure one I kind of wanted to use a shared counter with a promise, each thread that reaches the counter derefs the promise and waits until it's delivered, the one thread that lowers the counter to 0 delivers the promise and replaces it with a new one (for future threads)
11:17Morgawr(or use a better solution if available)
11:17mdrogalistbaldridge: I saw the commit on core.async two days ago. Did you guys change your stance on it being minimal?
11:18tbaldridgemdrogalis: lol, I probably mis-spoke about that awhile back. IIRC Rich's original comments were "lets keep it minimal until we see what people use in practice"
11:18tbaldridgeapparently that time is now past :-)
11:18mdrogalisHeh, gotcha.
11:23astevewhat is the name of the notation of 1.35E10?
11:23`cbpscientific? :P
11:23astevewell, 1.35*10^10 is scientific, right?
11:23asteveE10 is ...
11:24`cbpwiki tells me it's still scientific http://en.wikipedia.org/wiki/Scientific_notation#Other_bases
11:24asteve`cbp: thanks
11:25tbaldridgeasteve: it's just that the E10 version is easier to parse and easier to print
11:25tbaldridgesee e notation here : http://en.wikipedia.org/wiki/Scientific_notation
12:12upwardindexAnyone has an elegant solution to http api that can both accept urlencoded params and json and needs to coerce params to certain types when its url encoded?
12:13bbloomupwardindex: yeah. don't do that. down that path lies madness
12:14sm0keupwardindex: what do you mean? can you define multiple routes for that?
12:14bbloompick *one* content-type for your requests, preferably one other than formencoded
12:16sm0kecant you do {:headers {"Content-Type" (if (somecond) (pick-type1) (pick-type2))}} ?
12:16bbloomthat just doubles your API's test matrix & leads to bugs
12:17upwardindexthinking of it, i think the urlencoded stuff is just for trivial manual testing using curl, i guess i can probably go json only
12:18upwardindexthank you for those words of wisdom
12:20sm0keso i wanted to ask..is it sane to have a clojure source code as config for you application..by doing an eval at runtime of whole file?
12:21hyPiRionno, use edn as config instead
12:21hyPiRionIt's essentially the same thing
12:21sm0kehyPiRion: whats edn?
12:21samaarondoes anyone know of any nREPL tools for navigating down through to the Java source?
12:22sm0kehyPiRion: is using edn idiomatic way to configure applications at runtime?
12:22hyPiRionwell, it's better than using eval.
12:23hyPiRion,(doc read)
12:23clojurebot"([] [stream] [stream eof-error? eof-value] [stream eof-error? eof-value recursive?]); Reads the next object from stream, which must be an instance of java.io.PushbackReader or some derivee. stream defaults to the current value of *in*. Note that read can execute code (controlled by *read-eval*), and as such should be used only with trusted sources. For data structure interop use clojure.edn/read"
12:23hyPiRionread last line
12:23samaaronsm0ke: think of EDN as a JSON-like datastructure format
12:24sm0keis EDN's syntax similat to clojure?
12:24samaaronsm0ke: it's a subset of Clojure's syntax
12:25sm0keok gotta have a look at edn thingy
12:26sm0kesamaaron: i think drilling down to java code would be tricky
12:26samaaronsm0ke: I definitel remember it being possible back in the slime days
12:26sm0kei have realized that clojure functions and definitions keep a metadata about file they exist in and even line numbers
12:29sm0kei guess clojure already provides may things which an ide has to figures out... i mean i have never seen a better integration of any language with vim than clojure
12:33sm0kei am also amazed that when i jump to a clojur source..it directly shows from something-1.0.jar..i clearly remember for java ides you had to provide source jars too? how is that happening?
12:33technomancysm0ke: I'm gonna go ahead and disagree; EDN is fine but there's nothing wrong with eval runtime of clojure source for config
12:34technomancyEDN is a lot less flexible. maybe that's OK if you want to force things to be purely declarative
12:34logic_progwhat's a good nrepl screencast?
12:34sm0ketechnomancy: dont take me seriously i was just thinking out loud
12:34sm0ketechnomancy: or is it really people do?
12:34sm0kesomething*
12:35technomancysm0ke: people have been using clojure for config long before EDN existed =)
12:35nDuffsm0ke: It's typical to put Clojure source directly in your jars. AOT compilation is possible, but its performance penalty comes with forwards-compatibility costs.
12:35nDuffsm0ke: s/performance penalty/performance benefit/
12:35technomancyEDN is important for when you don't trust the source, but for config that is not the case
12:35hyPiRionWell, it usually boils down to this: Do you have control of the config file? Then you can go and use eval. If you can't trust the source, then go EDN
12:35hyPiRionaaaand technomancy just beat me to it
12:36sm0ketechnomancy: did you use it like that in some project? i would like to have a look?
12:36technomancysm0ke: it was basically this: https://github.com/sonian/carica
12:37technomancywait a minute... carica uses edn now??
12:37lazybottechnomancy: Uh, no. Why would you even ask?
12:37sm0kethanks
12:37sm0kehaha
12:37technomancywell... back in my day
12:38`cbpoh snap
12:38technomancythings were different
12:38sm0kenDuff: does lein publish packages source with jars?
12:38hyPiRionsm0ke: yes, by default
12:38sm0keaha thats why its so easy to jump to clojure code
12:39sm0kejava packaging sucks big times...and thats why you cant drill down to java code without setting your hairs on fire
12:47sm0kedoes clojure have a decompile function?
12:49nDuffsm0ke: Java disassembly tools work just as well on bytecode generated by Clojure as they do on bytecode generated by javac. Decompilation, OTOH -- no, nobody's bothered to write tools for that; it's hard, and there's very little reason to try.
12:51TimMcnDuff: I feel like you could write a decompiler-generator that learned by compiling lots of known sources.
12:51technomancyoh man that would be slick
12:51TimMcIt wouldn't be able to handled obfuscated stuff, but whatever.
12:53hyPiRionI'd give the decompiler-generator a lot of Swearjure to learn from.
12:53TimMcYes, yes you would. :-D
12:53hyPiRionnow you have a java bytecode to Swearjure generator!
12:54technomancyTimMc: that would be a fantastic conference talk
12:55rasmustowhat's easier to read, bytecode or swearjure?
12:55hiredmanbytecode
12:55rasmusto:)
12:56nDuffHmm.
12:56hyPiRionbytecode
12:56nDuff(JIRA development is one helluva lot more fun with a REPL involved).
13:08clgvsince I had to research this myself for while here a shortcut for everyone else: "Luyten" is a pretty good java decompiler GUI
13:09clgvI switched to it after I saw the homepage of JD-GUI vanishing
13:17avishaihow can i pass a java class as an argument and then instanciate it?
13:17avishaie.g. (. ~some-class arg1)
13:18marco4(SomeClass. arg1)
13:18TimMcnDuff: Oh hey, did you actually get OSGi and Clojure working together?
13:18technomancyavishai: I think clojure.lang.Reflector/invokeConstructor
13:19TimMctechnomancy: I would attend the shit out of that talk.
13:19nDuffTimMc: Back when I was working on it last year, yes. Well, working together _enough_.
13:20nDuffTimMc: ...it's been sitting in production for the year since then without getting any attention, until I tried to package Clojure 1.5.1 yesterday and found it triggering a bug with security implications (!) in Maven.
13:20TimMcCool.
13:20technomancy,(let [s String] (clojure.lang.Reflector/invokeConstructor s (into-array []))) ; avishai
13:20TimMcOh, yeah?
13:20clojurebot""
13:22avishaitechnomancy, invokeConstructor is a java method accepting object[] ?
13:22nDuff(and not understanding shell quoting rules correctly, but that's more secondary).
13:23TimMcnDuff: Ugh.
13:23technomancyavishai: yup
13:23avishaiugly. 10x
13:23technomancyavishai: you could use eval too
13:24technomancybut it's interop; interop is ugly because java is ugly
13:25technomancy(def instantiate (comp eval (partial list 'new)))
13:26avishaiis there a macro like time which returns/stores execution time instead of printing it?
13:27bjaavishai: I don't think so, but it looks like you could pretty easily do that
13:27bjathe macaro for time is short
13:28avishaiyeh
13:28`^_^vi barely know any clojure but can you rebind *out* and then parse it out
13:28avishaijust looked at it
13:28avishai10x
13:31technomancyI have no idea what it means, but what is life without little mysteries popping up everywhere
13:31`cbpi guess it means thanks?
13:31mdeboardlol
13:31technomancyoh
13:32bjaI thought it was intended for a different window. how do you get thanks out of 10x?
13:32`cbptenx kinda sounds like thanks :P
13:57sm0kewhy has development of avout stagnated? are there simpler ways to manage distributed states in clojure? i mean avout has to be useful right
13:58bbloommy guess: most apps need very limited coordinated state & often need a few features specific to distribution of coordinated state (such as emphemeral keys) that the clojure state model doesn't provide natively
14:00sm0kebbloom: yes agreed, even scalable architecture are often sessionless..but 1 out of 10 people trying to make something scalable would want that
14:01sm0ke*nned*
14:01sm0keneed*
14:01nDuffsm0ke: avout isn't complete enough to be usable right now. In particular, it doesn't have sane exception handling.
14:01nDuffsm0ke: that's enough of a showstopper to send folks who might otherwise use it elsewhere, unless they want to get involved in its development.
14:04sm0keits shocking that only erlang got it right.
14:04sm0keakka in scala is something similar to erlang model..but they keep pushing the clustering to next releases
14:06nDuff...huh? Avout isn't (and isn't intended to be) an alternative to Akka, or Erlang's model.
14:06sm0keyea it only manages states i know
14:06munderwoHi all. I'm building a REST api using compojure. Im getting a org.eclipse.jetty.server.HttpInput java object(?) as the parameter into a POST handler. I'd like to be able to get the body into a clojure map (as the body is just json) and i've got the wrap-json-body middleware working, but I haven't been able to work out how by searching the inter webs? any hints?
14:07sm0keoh i had this thought.. what if core.async provides what erlang does with its actors
14:08sm0kei mean can we have a channel being read on some other machine?
14:09nDuffNothing stops you from plumbing channels together across a MQ or similar bus.
14:09sm0keor more generally a channel which can be wrutten from any machine
14:09sm0kewritten on*
14:10sm0kenDuff: a MQ is a unecessay overhead and also spof
14:10nDuffThe interesting problems I follow tend to have aspects where cache locality, data locality, &c. matters.
14:10nDuffsm0ke: Depends on your MQ, of course.
14:17glosoliI was doing some tasks at 4clojure and there was a need to implement alternative to range, hmm and I found one interesting solution by some user #(take (- %2 %) (iterate inc %)) kinda curious if anyone could elaborate explaining if such things take a lot of resources I still seem to be struggling when it gets to understanding lazy seqs (any resources would be appreciated)
14:20mdrogalisglosoli: iterate is lazy
14:20mdrogalisIt's just computing one element at a time.
14:21glosolimdrogalis: so even though I did iterate for some infinite number, it did not do any actual computation unless I tried to use nth element ?
14:22mdrogalisglosoli: Yes.
14:23rasmusto,(source iterate)
14:23clojurebotSource not found\n
14:24rasmusto,(source clojure.core/iterate)
14:24clojurebotSource not found\n
14:26glosolimdrogalis: thanks sir :)
14:31mdrogalisSure
14:42bosiecompletely offtopic but how would i add a gplus or website to prismatic? (i ask here because it was discussed yesterday in here)
14:45clgv$source iterate
14:45lazybotiterate is http://is.gd/KaO3bo
14:45rasmustoclgv: ty
14:46pjstadig~source iterate
14:46pjstadigrasmusto: for future reference
14:53bbloomhyPiRion: good article
14:54bbloomsuggestion: replace "The only difference is that each node in the tree either has a reference to at most two subnodes (except for the leaf nodes)"
14:54hyPiRionbbloom: ty
14:54bbloomwith: "The only difference is that interior nodes in the tree either have a reference to at most two subnodes"
14:54rasmustohyPiRion: I enjoyed the read too :)
14:54bblooms/either//
14:54Jardabtw, my first clojure related blog entry - http://narhinen.net/2013/09/25/Sessions-with-compojure.html
14:54bbloommy point is that interior nodes = all nodes minus leaf nodes
14:55hyPiRionbbloom: yeah, I'll add it in. Thanks
14:55hyPiRionrasmusto: :D
15:11nkozathere is some library for core.async to channelize network sockets? so you can do alt! over channels and sockets
15:23hyPiRionbbloom: updated
15:24bbloom::thumbsup::
15:24hyPiRionAlso added in a "influenced by" comment in the beginning, because HN like to nitpick on such things.
15:30callenSigh, I finally post to /r/clojure, and James makes weird comments.
15:31callenthis is why I don't post to /r/clojure.
15:32scriptorwhat did you post
15:34callenhttp://www.reddit.com/r/Clojure/comments/1n1n0p/circlecistefon_asset_pipeline_for_clojure_closely/
15:44papachanweird floating point here https://twitter.com/joshgiesbrecht/status/382927201387036672
15:46hiredmanpapachan: that is how floating point works
15:47hiredmanpapachan: find another language will floating point math and it will give you same answer
15:48gfrederickshow do I type hint a 2d int array?
15:49hiredman^"[[I"
15:50hiredmanthe jvm doesn't technically have 2d arrays, it has arrays of arrays
16:03dobry-denRuby has Rakefiles. JS has Jakefiles. What would Clojure's Makefile be called?
16:03JardaClokefile
16:04hyPiRionproject.clj-files
16:04BrackiI want to get Foo/BAR but only have Foo and :BAR, what do I need to do?
16:04Apage43JS has Jakefiles?
16:04dobry-denApage43: Noe*
16:04dobry-dennode*
16:04Apage43that's not part of node proper
16:05bbloomalso, it seems Gruntfiles have kinda won in node.js land
16:05dobry-denCloakfile is cute
16:05Apage43I get that impression
16:05llasramIs there an existing library providing nice printable/readable forms for byte arrays and ByteBuffers?
16:06dobry-denSure, I was just trying to draw a parallel to seed the mind with ideas
16:06hiredmanunless you know your bytes are always going to be small, pushing them back and forth through the reader is going to suck
16:07hiredmanhttps://github.com/hiredman/bytes
16:07llasramhiredman: I'm mostly interested in having a nicer printed form while debugging byte-oriented code
16:07Apage43I saw that
16:07Apage43and went to star it
16:07Apage43and already had
16:07llasramSo base64 isn't quite what I need, alas
16:08llasramEasily enough done -- just wanted to avoid re-inventing the wheel :-)
16:08dobry-denI saw some solution for that a while back
16:08Apage43but also yeah, like llasram, sometimes what I want is for eyeballing. Something like spaced-out hex
16:09Apage43I half-assed some things last time I needed that
16:10dobry-denoh, i was thinking of https://github.com/ztellman/gloss
16:10dobry-dennvm
16:11llasramAh, yeah
16:12dobry-denwhen i work with bytes i just map int across them
16:13Apage43now I feel like writing this
16:14llasramLet's all write our own versions! :-D
16:20BrackiHow do import a single function from clojure.string?
16:21manutter(refer '[clojure.string :only [whatever]])
16:22Brackiinside ns?
16:22manutterInside ns do (ns …. (:refer [clojure.string :only [foo]]) …)
16:23manutterslightly different punctuation, but same general idea
16:23mdrogalistbaldridge: Think you could do a blog post on deep macros sometime? My interest is piqued.
16:24llasrammanutter, Bracki: The more typical way would be (:require [clojure.string :refer [whatever]])
16:24callenmdrogalis: ever read Let Over Lambda?
16:24mdrogaliscallen: I haven't. Good place to learn about them?
16:24tbaldridgemdrogalis: yeah, I'm considering doing that soon.
16:25mdrogalisFogus's article hurts my brain.
16:25manutterO right, I mixed up refer/require again, sorry
16:26manutterand threw in the evil "use" syntax as well (*facepalm*)
16:26manutterneed more coffee
16:26callenmdrogalis: LoL is the primary book Common Lispers get deep into macros with. I don't think it's necessarily to the nth degree tbaldridge achieved.
16:26callenmdrogalis: slightly more shallow, but still interesting, macro patterns can be found in Korma too. Somewhat simpler, nicer API oriented stuff there. :)
16:27mdrogalisGood to know. I'll make time for it :)
16:28callenI'm trying hard not to let my CL heritage bleed through here :P
16:28hfaafbout of curiosity, is there any way to look at the entire tree of a persistent data structure?
16:30callenhfaafb: look at the Java implementations in core and see if you can tear apart the underlying classes.
16:30callenI'm not aware of any such thing in core.
16:31technomancyhttps://github.com/cobyism/Filefile
16:32technomancydobry-den: I don't know, but if you figure it out send a pull request to ^
16:32Apage43llasram: hexdump printing/reading https://www.refheap.com/19002
16:32mdrogalisI tried to understand Clojure's Red-Black tree implementation and my eyeballs exploded.
16:33Apage43ooh
16:33Apage43there's a bug in here
16:33mtpSQUISH IT
16:33Apage43silly jvm with your lack of unsigned types
16:35llasramApage43: Cool
16:36llasramApage43: License? I'm planning to throw together a dev-oriented lib later
16:36Apage43aaand fixed one bug and a cosmetic issue
16:36llasramApage43: I mostly want a string-with-escapes printing
16:36llasrambut hexdump would be a nice option, especially if all together in one place
16:36BrackiCan I monkey patch a toString method onto a Java class?
16:37llasramBracki: No monkey-patching methods. The closest you can get is using `proxy` to create an anonymous subclass, but it's not quite the same
16:37Apage43llasram: preference? I'll prolly stick on github as MIT shortly
16:37llasramApage43: MIT is perfect
16:38technomancyMIT has no patent protection =(
16:38technomancyit's perfect if you live in a country with good software patent laws
16:38Apage43Are there patents on hexprinting :/?
16:38technomancyyes
16:38llasramOk, Apache2 or EPL are perfect
16:38callenjust use the right license.
16:38BrackiOr maybe how do I get midje tell me what's different?
16:38technomancy(for any value of x)
16:39bbloomtechnomancy: heh, yeah, i was about to say "i haven't actually looked, but yes of course"
16:39technomancyBracki: clojure.test has a cool difftest plugin
16:43Apage43llasram: https://github.com/apage43/hex
16:45Apage43feel free to lift it wholesale or whatever
16:46llasramsweet. gracias
16:48Brackitechnomancy: hm, not any verboser than midje unfortunately...
16:54eric_normandtbaldridge: ping
16:54tbaldridgeeric_normand: pong
16:55eric_normandtbaldridge: hello!
16:56eric_normandtbaldridge: I have a core.async question.
16:56eric_normandtbaldridge: I'm using it on the JVM
16:56eric_normandtbaldridge: what happens when a go block really blocks on IO
16:56eric_normandtbaldridge: does it block the thread it's on?
16:57tbaldridgeeric_normand: yes, and you only have NUMBER_OF_CPUS + 42 threads for gos to run on.
16:57tbaldridgeso a little bit of wiggle room, but not much
16:57eric_normandtbaldridge: I see
16:58eric_normandtbaldridge: I'm trying to get more parallelism
16:58eric_normandtbaldridge: it's mostly IO bound
16:58tbaldridgeeric_normand: there's nothing wrong with using the thread macro instead of the go macro
16:58eric_normandtbaldridge: about 100 web requests
16:58eric_normandtbaldridge: I'd like to do them all at once
16:58tbaldridgeyou get a dedicated thread via the thread macro.
16:59tbaldridgeeric_normand: in that case I'd look into using a async HTTP client lib and use put! to send the results to the go blocks
16:59eric_normandtbaldridge: hmm
16:59eric_normandtbaldridge: I'm wondering about http.async.client
17:00tbaldridgeeric_normand: yeah! that should work, just have the callback from the web request do (put! c response)
17:00tbaldridgeand have your go use <! to take from c
17:00tbaldridgeThis is exactly the use case put! was designed for
17:01eric_normandtbaldridge: I'm more worried about http.async.client
17:02tbaldridgehow so?
17:02tbaldridgeI've used it in some projects, was very happy with it. Except each AsyncHTTPClient only uses a single thread, but that shouldn't hurt you in this case
17:02tbaldridgeI've done > 2000 requests/sec with this lib
17:03eric_normandtbaldridge: ok, thanks! I was worried because there was some talk in the docs about executor servics
17:03eric_normandtbaldridge: and I was worried it was faking async with threads
17:04eric_normandtbaldridge: thanks very much. very helpful. and I am loving core.async!
17:04tbaldridgeeric_normand: it's pretty async, do too much work inside the callback and bad things will happen. so just put! into a channel and you should be fine. Perhaps even use (chan 1) for max throughput.
17:08holohi
17:11mercwithamouthhola
17:17callenmercwithamouth: hi
17:17callenholo: hi
17:17holohey callen
17:31gf3noprompt: Wow, Garden looks amazing! Thank you
17:32nopromptgf3: oh. heh, thanks!
17:32logic_progI have defined (defun force-refresh () (interactive) (nrepl-send-string-sync "(clojure.tools.namespace.repl/refresh)")) -- how do I get the result of the refresh (sometimes it contains compiler errors_ to be displayed in a minibuffer?
17:32nopromptgf3: 1.0.0 is almost finished. :)
17:33gf3noprompt: Incredible, I'm going to use this for everything
17:33gf3noprompt: Coming from a SASS/Compass world this looks even better
17:33nopromptgf3: lol, it's actually kind of a trip.
17:34nopromptgf3: make sure you grab the 1.0.0-SNAPSHOT from the repo though, and look at the ChangeLog. there are a few lies in the README right now that i'm gonna fix today.
17:35nopromptgf3: i'll probably cut 1.0.0 and announce it on the mailing list here pretty soon.
17:35nopromptgf3: thanx for the <3!
17:35gf3noprompt: I'm excited
17:35hhenkelHi all, anyone around who could explain alt! from core.async to me? I'm reading the docs over and over again, but I don't get the usage in https://github.com/clojure/core.async/blob/master/examples/ex-async.clj
17:36tbaldridgehhenkel: alt! is just alts! + case
17:36nopromptgf3: me too. mostly i'm really looking forward to working on making it awesome client-side.
17:37gf3noprompt: Client-side?
17:37hhenkeltbaldridge: that's what I understand. But why is is ([v] v) in the example?
17:37nopromptgf3: yeah. in cljs.
17:37replHey guys.
17:37gf3noprompt: I have a bunch of Compass-like functions I made for cssgen that I can translate to Garden
17:37gf3noprompt: But why on the client?
17:38replCan somebody explain to me why this does the printing: (def map-println (comp (constantly nil) empty? (partial map println)))
17:38nopromptgf3: mostly because i'm interested in seeing what you can do with easy manipulation of the CSSOM.
17:38replBut not this: (def map-println (comp (constantly nil) (partial map println)))
17:38hhenkeltbaldridge: is it always true and alt is just used to show it is possible to use it?
17:38nopromptgf3: instead of just direct style attribute substitutions or stylesheet appends.
17:38tbaldridgehhenkel: I'm not sure why they are using alt there....it doesn't really make sense to me.
17:39nopromptgf3: being able to hang on to and manipulate individual parts of the stylesheet seems like it could be really interesting.
17:39gf3noprompt: Interesting
17:39replI don't understand why I need to put a function like empty? in there to get the printing evaluated
17:40hhenkeltbaldridge: So alts would be the better solution then? Do you know of a good example using alt?
17:40hyPiRionrepl: map is lazy
17:40`cbprepl: because map produces a lazy sequence which empty? realizes
17:40replAh I see, thanks. :-)
17:40hyPiRiontry out e.g. mapv instead
17:40replOK, will do now.
17:42nopromptgf3: that image on the WAT repo cracks me up every time.
17:43gf3noprompt: Oh god, I can't even look at it without bursting out laughing
17:43TEttingerrepl, an alternative is ##((fn [coll] (doseq (map println coll))) [1 2 3])
17:43lazybotjava.lang.IllegalArgumentException: doseq requires a vector for its binding in clojure.core:1
17:43TEttingergah
17:44TEttingerI think I meant doall
17:44replhyPiRion: Yep, works without empty? using mapv, thanks. (doc map) says it returns lazy seq, (doc mapv) normal vector. Didn't notice that before. :-)
17:45hyPiRionyeah, doall on a lazy seq works too
17:45TEttinger##((fn [coll] (doall (map println coll)) nil) [1 2 3])
17:45lazybot⇒ 1 2 3 nil
17:45hyPiRion,((comp dorun (partial map println)) [1 2 3])
17:45clojurebot1\n2\n3\n
17:46TEttingerwhat is dorun?
17:46TEttinger,(doc dorun)
17:46clojurebot"([coll] [n coll]); When lazy sequences are produced via functions that have side effects, any effects other than those needed to produce the first element in the seq do not occur until the seq is consumed. dorun can be used to force any effects. Walks through the successive nexts of the seq, does not retain the head and returns nil."
17:46replI see.
17:46`cbplike doall but returns nil
17:46hyPiRion`cbp: kind of, doesn't retain head
17:46`cbp:-)
17:46hyPiRionmay be an issue for large stuff
17:46TEttingerwhat does that mean?
17:47TEttingerI've seen doesn't return the head a few times
17:47RaynesFunfact: refheap is just over 19k pastes.
17:49TEttingerRaynes: a significant amount of them I assume is my bot on quakenet barfing out quotes. sorry.
17:49RaynesTEttinger: Nothing to apologize for.
17:49RaynesRefheap is a text dumpster.
17:49RaynesBy all means keep dumping text into it.
17:50TEttingerwell there's 19005
17:50replhyPiRion, TEttinger: So with dorun I'm able to not use the weird (constantly nil) trick, nice.
17:50`cbpTEttinger: it means that the whole seq is kept in memory while it's being realized.
17:51hyPiRionwhat `cbp said. Not retaining head means that elements already processed may be garbage collected
17:51`cbpTEttinger: because seqs are kinda like linked lists so keeping the head (first element) keeps everything
17:51TEttingerok, so not retaining the head means it doesn't have to realize the seq to dorun it?
17:52`cbpnot retaining the head means it doesn't have to keep old values to realize new values
17:52Apage43TEttinger: it means the parts its realized already can get GC'd
17:52Apage43if it *did* retain the head none of it could get GC'd til the end
17:53TEttingerah
17:54Apage43important for stuff like say, using line-seq on a multi-gigabyte file that you want to lazily filter
17:58replThanks guys, learned neat stuff today, will join #clojure regularly from tomorrow. Bye.
18:11akurilinIs there anything like Sprockets for coffeescript out there by any chance? I think dieter supports coffee right now, but not yet cljs
18:12finishingmovehow would i insert an item after each existing item in a sequence?
18:13tbaldridge,(doc interpose)
18:13clojurebot"([sep coll]); Returns a lazy seq of the elements of coll separated by sep"
18:13tbaldridge,("|"
18:13clojurebot#<RuntimeException java.lang.RuntimeException: EOF while reading>
18:13tbaldridge,("|
18:13clojurebot#<RuntimeException java.lang.RuntimeException: EOF while reading string>
18:13arohnerakurilin: have you seen the new version? https://github.com/circleci/stefon
18:13arohnerdoesn't support cljs, but should be easier to update
18:13tbaldridge,("|" [1 2 3 4 5])
18:13clojurebot#<ClassCastException java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn>
18:13finishingmoveso that's kind of like haskell's intersperse?
18:13finishingmovegood enough i guess
18:13tbaldridgenvm I fail at life
18:14tbaldridge,(interpose "|" [1 2 3 4 5])
18:14clojurebot(1 "|" 2 "|" 3 ...)
18:14tbaldridgethere we go!
18:16akurilinarohner, that's fantastic, thanks for the link.
18:17akurilinarohner, if I'm understanding correctly, active development of dieter stalled a few months ago and so this is basically the continuation?
18:18arohneryeah
18:18arohnerand dieter was more circle code than non
18:18akurilinI imagine circle uses this very actively in production, right?
18:18arohnerevery day
18:18akurilinExcellent!
18:18arohnerthough to be pedantic, we use it to build the production assets
18:18arohnerwe don't use it at runtime
18:20akurilinarohner, sounds good. I'll probably see if I can get away with runtime + aggressive caching at first, but I can see how CDN is ultimately the destination.
18:22arohnerakurilin: sure. in development we use it at runtime
18:24akurilinarohner, regardling stefon + cljs, are there circle plans to make that happen, or is that something you guys will let folks decide for themselves and send over a pull request?
18:24arohnerwe're not using cljs yet, so we have no plans to make it happen
18:24arohnerthough we'd take a pr
18:25akurilinarohner, sounds good, makes sense.
18:37Leonidashmm, is there a way to get the information from doc in a structured format?
18:38rasmustoyou mean more than just a string? stuff like its arity?
18:39Leonidasrasmusto: yes, basically what I can get from (meta (var foo)), but not only for functions. (doc) also handles special forms
18:41rasmustoLeonidas: oh hm. what special forms are you talking about? I know that quite a few of them are shadowed by macros, and you should be able to pull metadata from them
18:42Leonidasrasmusto: well, even a simple if. If I try to retrieve it with (meta (var if)) it obviously fails.
18:42LeonidasI looked at the implementation of doc, but the funtions it uses are for the post part private
18:42Leonidas*most
18:42rasmustoah I see. I don't know how to get around that
18:44Leonidaslazybot: ,(meta (var mod))
18:45rasmusto##(meta (var mod))
18:45lazybot⇒ {:ns #<Namespace clojure.core>, :name mod, :arglists ([num div]), :added "1.0", :static true, :doc "Modulus of num and div. Truncates toward negative infinity.", :line 3161, :file "clojure/core.clj"}
18:45Leonidasah, ##!
18:45Leonidasin the query , worked.
18:45Leonidasanyway, I'm going to hang around for a bit, maybe someone has an idea, otherwise I'll just ask the ML
18:47nDuffBleh.
19:05bjawhat's the appropriate way to test if something in clojurescript is callable? is it #(= js/Function (type %)) ?
19:08amalloybja: if it's anything like clj-jvm, it'll be ifn? or fn?
19:08amalloyand comparing to js/Function looks like it absolutely must be wrong
19:08technomancythere is also instance? on regular coljure
19:09brehauton himera instance? looks like a real function
19:10bjafn? apparently asks google
19:10bjagoog/isFunction
19:11technomancyheh; I thought it goes and queries google search
19:11brehautifn? i think
19:11brehauthmm no
19:11technomancy"Your search for 'is (fn [x] x) a function in clojure' returned no hits."
19:11brehautkinda weird that there is cljs.core.IFn but no ifn? predicate
19:12bjaamalloy: I just checked http://docs.closure-library.googlecode.com/git/closure_goog_base.js.source.html
19:12bjagoog.isFunction = function(val) {return goog.typeOf(val) == 'function';};
19:14bjalooking at their definition of goog.typeOf, I seem to be way way off
19:15bja anyway, fn? seems to be the way to go
19:15brehautbja: sort of. it doesnt include things that can act like functions (such as maps)
19:16bjaerr, ifn? exists
19:16brehautmaybe himera is just out of date then
19:18bjamust be very out of date given that ifn? made it in in April of last year
19:19brehautah its just not in the namespace for whatever reason. cljs.core.ifn? works as expected
19:44gfrederickstechnomancy: reflection is slow because of search engine latency
19:46noprompti love it when i misspell something and then autocomplete it everywhere.
19:46noprompttonkenizer.
19:46nopromptwtf is a tonkenizer? haha.
19:46s4muelSounds like it makes toy trucks out of string input
19:47noprompts4muel: haha tonka trucks.
19:47logi_progis there a clojure builtin function for xml-escapling? i.e. I wnat &, <, and > to be converted
19:48technomancyHTTP Referer
19:49nopromptcljx is good times. :-)
19:49noprompt:-) <-- see that? that's my good-times face.
19:50noprompt:-( <-- sad-times-face.
19:50noprompt; _ ; <-- sad-times-face'
19:51technomancy^_^ <- good-times-face
19:51brehaut(╯°□°)╯︵ ┻━┻ ← javascript times face
19:51nopromptbrehaut: rofl.
19:52s4muel┬──┬ ¯\_(ツ) <-- clojure times face
19:52s4mueleveryone saw that coming, i know, but still.
19:52indigoWhat's your PHP times face
19:52s4muel (ノಠ益ಠ)ノ彡┻━┻
19:53technomancythat's when your head explodes; no face left
19:53sinistersnare╭∩╮(-_-)╭∩╮ PHP times face
19:53indigoಥ﹏ಥ this is mine
19:53s4muel(inc technomancy)
19:53lazybot⇒ 76
19:53s4muelindigo: ...don't you work in a php shop
19:53indigoI sure do
19:53indigoDoesn't mean I like the language ;)
19:54s4muelindigo: man, there's not enough cat pictures in the world to make that better.
19:54brehautgfredericks: lined with double clawed hammers
19:54indigos4muel: It's okay, at least I got upgraded to a Mac
19:55s4muelgfredericks: haha. with some old grump 'still hangin on' to PHP 5.5 -- now with classes and ... uhm, yeah classes
19:55s4muelThe Perl 6 store is around the corner
19:55brehautwell, it will be soon. they're still building it
19:55s4muelin a ... cloud of vapor
19:55s4muelLOL yes.
19:55gfredericksmost of these shops on main street are closing down cuz everybody goes to JavaMart
19:57hyPiRiongfredericks: the one in the JVM mall?
19:58s4muelJVM = Java Valley Mall
19:58s4muelone stop shopping for all your 'it was better all along' needs
19:58gfredericksI wonder how much of the java code that runs was written by a computer in some capacity
19:59brehautgfredericks: back when i wrote java, i flipped all my own bits with a very sharp stick
19:59s4muelgfredericks: given the lack of preprocessor / macro stuff (that I know of, at least) probably not a lot compared to say, the prodigious work done by m4/C preproc macros and C++ templates
20:00s4muelgfredericks: its the definition of arcane
20:00s4muels/its/it's/
20:00brehauts4muel: instead of a preprocer, java has eclipse
20:01s4muelbrehaut: true, the question is probably 'i wonder how much java code was written by repeatedly hitting tab'
20:01brehauta lot: theres still the refactorings menu
20:02brehautnot to mention, programs that mash strings together to feed into other programs is a long programmer tradition
20:02brehautregardless of language support
20:02brehautwe cant all use tcl afterall
20:02nopromptoh cool github does syntax highlighting for cljx now.
20:02brehautwhat is cljx?
20:03nopromptbrehaut: https://github.com/lynaghk/cljx
20:04brehauthuh
20:04brehautHUH
20:04hyPiRionOh, so it's #+ and #- all over again. Welcome back to CL I guess
20:09logi_progthis is a dumbass question
20:09logi_progbut I'm gettig weird resuts:
20:10logi_proghow do I take a channel and create a list of all the elements pushed onto the channel (after the channel terminates)
20:10logi_progI'm currelyting creating an atom, then inside of the go block running swap! + conj
20:10logi_progbut at the end, despite printing out the intermediate results, I get nil
20:10logi_progoh shit, because the I get it now
20:11logi_proggo blocks are running in a separatate thread
20:18chordok did anyone start the starcraft clone project while i was gone
20:20chordIS ANYONE LISTENING TO ME
20:22technomancylazybot: dunno; you think anyone cares??
20:22lazybottechnomancy: What are you, crazy? Of course not!
20:29nopromptcommit message: I don't like :author meta.
20:32noprompthere's a cool name for an SQL library "where-wolf" someone please use it.
20:32nopromptso a sql query walk in to a bar...
20:33noprompt:-/
20:33chordnoprompt go make www.github.com/starcraft-clojure
20:33brehautim trying to think of a really good implementation of starcraft. cant quite remember who makes it
20:33brehautoh yeah
20:33brehautblizzard
20:34chordbrehaut: starcraft 2 sucks shit
20:34chordso thats not true
20:34noprompt,(let [shit-head? #(= "chord" %)] (shit-head? "chord"))
20:34clojurebottrue
20:35chordnoprompt you think you're funny?
20:35nopromptchord: i think i'm the funniest person that ever lived, in fact.
20:36sinistersnarechord: the last couple times ive been on this chan, youve been annoyingly spamming people
20:36nopromptclojurebot: am i the funniest person that ever lived?
20:36clojurebotTitim gan éirí ort.
20:37brehautthat bot is far too eloquent for irc
20:37chordsinistersnare: its not spamming, clojure starcraft is an idea not a spam
20:37brehautit's even got little flicks on its vowels.
20:37sinistersnarethen make the damn thing and shut up, no one wants to do your dirty work, then you take the credit
20:37sinistersnareno one likes you here
20:37brehautnoprompt: lazybot
20:38nopromptlazybot: am i the funniest person that ever lived?
20:38noprompt; _ ;
20:38brehautlazybot: are you messing with noprompt???
20:38lazybotbrehaut: Oh, absolutely.
20:39nopromptisn't there a way to tell it to remember something? i feel like this is a fact worthy of being recorded.
20:39brehautoh right, yeah clojurebot can be taught facts
20:39brehautalthough mostly everyone forgets the syntax and teachs it weird syntax errors
20:40nopromptclojurebot: fact noprompt is the funniest person that ever lived.
20:40clojurebotc'est bon!
20:40brehautwhich then get fed through the inferencer to produce garbled responses at alater time
20:40noprompt:-/
20:40brehauti have a note on my wall somewhere but it appears to have gotten lost
20:41brehautso you are problably left with reading the fnparse rules
20:43chordif I write the first line of code for starcraft clojure will you guys help after that
20:43nopromptclojurebot: remember noprompt is the funniest person that ever lived.
20:43clojurebotIk begrijp
20:43brehautall evidence suggests no
20:43callen,(println "welcome to our intellectual property theft game!")
20:43clojurebotwelcome to our intellectual property theft game!\n
20:43nopromptah, fuck it.
20:43callennoprompt: are you doing Clojure Cup?
20:43nopromptcallen: i dunno, but just came up with best name for an SQL library ever.
20:44callennoprompt: what?
20:44nopromptcallen: where-wolf.
20:44callenLOl
20:44nopromptisn't that loller?
20:44callenthat's brilliant.
20:44callennoprompt: want to join a Clojure Cup team making a client-side analytics service? Saves all data, query later?
20:44nopromptcallen: that sounds legit.
20:45rasmustowhere-worm
20:45nopromptcallen: the website is also pretty awesome.
20:45callennoprompt: it's me and a really talented frontend guy. http://clojurecup.com/apps.html "Simonides" is my team.
20:46chordcallen i will join in return you help with starcraft clojure
20:47callennoprompt: making this because I've always wanted an analytics data dashboard/aggregator that I could host myself and hack on.
20:48nopromptcallen: did that even work?
20:49KeletAfter doing about 13 of the Clojure Koan lessons I'm starting to see why people like Lisps :O
20:49Keletgreat learning resource for those of us coming from Java and such I think
20:51indigoKelet: Yep, lisps are sexy
20:52indigoEspecially Clojure which actually has decent looking data structures
20:52chordprove it to me with starcraft clojure
20:52KeletI never really messed with them and was kind of (intimidated (by (this (odd (syntax)))) but a competent editor makes it a breeze.
20:53KeletAnd I kind of like that it feels more natural to place things 'as i want' rather than how the language dictates in many cases
20:54indigochord: #ruby, #python, #haskell... ain't nobody got time for you
20:54indigoKelet: Which editor are you using
20:54chordindigo: but you don't know why they banned me
20:55Keletindigo, A mix of Vim and Light Table depending on where I am. I've set up my project in a way where it does well with Light Table functionality. Although I know Vim (and especially Emacs) can do the same (and likely more)
20:55sinistersnareyeah, hes definitely trolling, i recommend that everyone do a /ignore chord
20:55mtpi recommend that the chanops ban *!*@*
20:56mtpthe troll problem will sort itself out forthwith
20:56sinistersnarebut that would ban me i think :(
20:56indigoHaha, good one mtp
20:56KeletWell, I should say, my project is being set up in a way that allows re-evaluation of code to easily tweak the project while it's running which is awesome.
20:56sinistersnarei should stop using web based irc's
20:56indigochord: I can kinda see why http://ircbrowse.net/browse/haskell?q=chord
20:56indigoKelet: Did you check out vim-fireplace
20:56Keletindigo, Nope, but I will now
20:57indigoIt's nice, you can have a pseudo-REPL in vim
20:57indigoAlthough callen will probably kill me for recommending vim ;)
20:57chordindigo: they banned me for no good reason
20:58KeletHaha, I've used Vim for a while, I've tried Emacs but always run into little issues. With programmable text editors, I don't think choice is too big of an issue anymore.
20:58rasmustoKelet: fireplace is good, nrepl.el is good
20:58rasmustoeverything is good and right
20:58KeletBut I imagine Emacs is more popular around here, due to it using a Lisp so extensively
21:00noonianlight table is written mostly in clojurescript I believe
21:01timvisher what am i misunderstanding about compojure defroutes here?
21:01brehautKelet: i would say that emacs is more popular because of – historical, not so much any more – better integration with clojure at runtime than other environments, than for having a lisp under the hood
21:01timvisherhttps://github.com/timvisher/bible-plan/blob/austin/src/clj/whitespace-server.clj#L28-L29
21:01timvisherhttps://github.com/timvisher/bible-plan/blob/austin/src/clj/whitespace-server.clj#L18-L20
21:01KeletYeah, it's definitely an interesting concept, and it runs pretty well for me although I can't figure out how to reevaluate all of the code rather than just one line, one selection, or one file.
21:01Kelet(in Light Table, that is)
21:02brehauttimvisher: whats not working?
21:02timvisherI'm attempting to have the `resources` function serve out of `resources/public/whitespace` on the one hand, and `resources/public` on the other
21:02timvisherresources/public works fine as it's the default
21:02timvisherbut the `:root` directive doesn't seem to do anything
21:02timvisherbut inspecting the code would lead me to believe that it should
21:03timvisheri can put anything into the `:root` option, even things that don't exist, and it just continues to serve them out of `resources/public`
21:03brehauttimvisher: oh, this is a resources issue rather than routes. resources arguments always confounds me
21:03timvisherbrehaut: heh
21:03timvisherbtw, if cemerick is around, i finally understand how austin can work with a static site
21:04brehauti suspect he's still getting his types handed to him at ICFP :P
21:04timvisheri think you were even trying to tell me this before but that fact that I can dynamically alter html via enlive means that i can simply have a jetty server as my dev server that dynamically appends brepl stuffus
21:04timvisherpretty ingenious, and exactly how the austin sample site works
21:04timvishersorry for all my confusion earlier. :)
21:05mtpi'm confused by your apology
21:05timvisherbrehaut: nice
21:05timvishermtp: how so?
21:05mtp:)
21:05mtpi'm being goofy, don't mind me.
21:05timvisherlol. ok
21:11cespareanyone here a korma expert?
21:11amalloy~anyone
21:11clojurebotJust a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
21:13cespareIf i want to do 'select foo.* from foo, bar where ...', how do I do the foo.* part in korma?
21:13nopromptcespare: expert?
21:13mtpthat doesn't sound like an expert question
21:13cesparesigh, yes, let's focus on that part
21:14cespare(fields :foo.*) doesn't work
21:14nopromptcespare: i recommend using something else. there was something on the ML that looked really good...
21:15nopromptcespare: i haven't tried this but it looks very promising https://bitbucket.org/czan/clojure-sql
21:15cesparenoprompt: except at work we've got a ton of code which all uses korma. But thanks for the help.
21:15nopromptcespare: oh nm then.
21:18nopromptcespare: i think i ran in to something like that before. you can always use `exec-raw` until you figure out the correct dance moves.
21:19Raynescespare: You'll have to excuse us. It's just that asking specifically for a Korma expert makes it entirely impossible for a remotely modest person to speak up and assist you.
21:20nooniancespare: I think you can use 'raw', look at the very last example on this page: http://sqlkorma.com/docs
21:21noonian(fields (raw "foo.*"))
21:21cesparehaha, after asking around for 20 minutes I got the answer here and from a coworker at the same time
21:21cesparethanks noonian
21:21cespare(answer == acceptable workarounds)
21:21noonianhehe, np
21:22timvisheri am the confused… https://github.com/timvisher/bible-plan/blob/austin/src/clj/whitespace-server.clj#L22-L30
21:23nopromptholy cow! documentation. whoa trippy.
21:23timvisherthere were at least 2 issues. 1. caching wasn't disabled so i thought my changes to the routes weren't taking effect.
21:23timvisher2. resources doesn't seem to work as advertised
21:23timvisherbut i can't see why
21:33timvisherwow. so the issue was that `resources` options are a map
21:33timvishernot a set of key value pairs as in some other libraries
21:33timvishernot sure why that took me so long to see. :
21:34timvishers/:/:\
21:34timvisherthis is all i needed to do: https://github.com/timvisher/bible-plan/blob/austin/src/clj/whitespace-server.clj#L22-L24
21:34timvisher(^_^)b
21:36timvisherso building this project takes 45 minutes. :(
21:36timvisheri guess i shouldn't complain too much but man does that suck.
21:36nooniantimvisher: try (resources "/" {:root "public/whitespace"}), the resources fn is destructured like [path & [options]] and treats options as a map
21:36noonianoh, too late
21:36timvishernoonian: thanks though. :)
21:37timvisheri was literally staring at that code going: why doesn't the (:root options "public") for return hat it should?
21:38timvisheri was conflating it, I think, with defns that do `[& {:keys [root}]`
21:38noonianhehe, yeah i don't think i've seen many function parameter lists destructured that way
21:41brehaut(inc noonian)
21:41lazybot⇒ 3
21:41brehautgood catch
21:42noonianthanks
22:19_scapegetting: IllegalArgumentException: Value out of range for byte: 128 with this http://pastebin.com/8Y7Npp4p while it worked for [0 1 2] is it because I have numbers above 128? Does not seem to make sense
22:21gfredericks,(byte 130)
22:21clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: Value out of range for byte: 130>
22:21gfredericks,(byte -20)
22:21clojurebot-20
22:21gfredericks_scape: ^ they're signed; so 127 is the upper limit
22:21gfredericks,Byte/MAX_VALUE
22:21clojurebot127
22:21_scapeok, that makes sense now
22:21amalloy&(unchecked-byte 130)
22:21lazybot⇒ -126
22:22gfredericks&(unchecked-byte 2944833)
22:22lazybot⇒ 65
22:22_scapewhat's going on there?
22:22gfredericks&(mod 2944833 128)
22:22lazybot⇒ 65
22:23gfredericksit's just taking the bottom 8 bits and making a byte out of them
22:23gfredericksor something
22:23hammertrying to follow this tutorial, http://clojure-doc.org/articles/tutorials/emacs.html, but when i try to run tests with C-c C-, I get "C-c , is undefined"
22:23hammerI have clojure-mode loaded, I'm able to do C-c C-k and some other repl interactions
22:24hammer(wasn't sure if this or #emacs was a better place)
22:25_scapeunchecked-byte seemed to help, I'm passing this off to a bytebuffer for opengl, so it's a bit beyond me in regards to bytes. followed an example that simply used byte likely because it was a triangle example with a size of 3 :)
22:25Cuahammer: seems like a problem wiht emacs unable to register your control sequence
22:27jimrthy_Cua: I don't think that was hammer's control sequence. According to that tutorial, it should run the unit tests
22:28Cuajimrthy_: "C-c , is undefined" -> It should have been "C-c C-,"
22:29jimrthy_I meant that I don't think hammer put it together. It looks more like a "Add these pieces to emacs.d, then these shortcuts work" sort of tutorial
22:30sinistersnarewhat does :classifier do in project.clj (leiningen)?
22:30sinistersnarethe sample doesnt really say
22:30Cuajimrthy_: okay
22:32jimrthy_This is just a gut instinct, but that page almost looks obsolete. It seems to be mostly about the lisp starter kit
22:32_scapesinistersnare: https://github.com/rogerallen/hello_lwjgl/blob/master/project.clj
22:33_scapeexample usage
22:33sinistersnareive seen usage, but does it do anything? or is it just for reading?
22:34jimrthy_hammer: I'm *totally* not an expert here, but I'd take that page with a grain of salt. If I'm not mistaken, the author's deprecated a big chunk of it
22:38Cualook at the status line, what are the current modes of emacs?
23:03geoffegCan i destructure the return values of a fn? ([lat lon] get-geo-data) thinks i'm trying to call [lat lon])
23:06noonian,(let [[lat lon] ((fn [] [1 2]))] [lat lon])
23:06clojurebot[1 2]
23:07noonianyou can only destructure in let, fn, and binding forms, but yes you can destructure funtion return values
23:08geoffegthanks!
23:13benmossdoes anyone know why there's not an official clojurescript on clojars?
23:14brehautbenmoss: all the official clojure and contrib libs are deployed to maven central
23:14benmossgotcha
23:15brehautyou would need to add that repo to your project.clj config
23:15brehautmaven central is more Serious than clojars; clojars is a bit of a wild west
23:15benmossso Clojars is the de facto standard repo for Clojure?
23:15brehautyeah
23:15benmosslike its built into lein
23:15brehautthe clojure community in general prefers clojars
23:15benmossbut maven is serious business
23:15brehautbut clojure the project prefers central
23:15benmoss*maven central
23:16benmossgotcha
23:18benmosshm, central seems to be built in too, i didn't have to add anything other than the dependency itself
23:20brehautoh it might only be the snapshot repo that needs to be added specifically
23:22benmosswhat are snapshots exactly? just like HEAD of a git repository?
23:23brehauta package with -SNAPSHOT in the version
23:23brehautyou can have multiple different snapshots for the same version though
23:23brehautso its unpredictable
23:23benmosswhats it supposed to signify?
23:24benmossthat your 0.3.3-SNAPSHOT may be different than someone else's?
23:24brehautthat its just snapshot in time of development
23:24brehaut"im working toward 0.3.3 but its not done yet, but its different to 0.3.2"
23:24benmossgotcha
23:24clojurebotcontains? checks whether an indexed collection (set, map, vector) contains an object as a key. to search a sequence for a particular object, use the `some` function, which accepts a predicate. if you want to only match a certain object, you can use a set as the predicate: for example, (some #{5} (range)) finds the first occurrence of 5
23:27holoi deployed a libray i just developed to clojars using lein-clojars and when i run some test (a test that works in the library itself) inside an app the test fails with a java.lang.NullPointerException. the rest of the stacktrace is pretty useless. any idea about an obvious reason behind this?
23:28brehautholo: without code and a stacktrace someone, nobody is going to have a hope of helping you
23:28brehaut~help
23:28clojurebothttp://www.khanacademy.org/
23:28brehautlol
23:28brehaut~help
23:28clojurebotNobody can help with "X doesn't work". Please provide context: what you did, what you hoped would happen, and what happened instead. A stack trace is especially helpful, if applicable.
23:29sinistersnarehello #clojure ! I spent the past couple minutes writing up a small article on using LibGDX with clojure. Its now on the official wiki page on Github of LibGDX. I would like to say that im only a Clojure fan and beginner, so I would love for some of you to look at the code and writing of the article, and maybe give me some critisicm
23:29sinistersnarehttps://github.com/libgdx/libgdx/wiki/Using-libgdx-with-Clojure
23:29sinistersnareis the page
23:30holobrehaut, sure i can even host in github, which i was going to do anyways. i just didn't want to host the source before i could test it in some app
23:31Apage43you can even toss the just the snippet that crashed in a gist or on refheap
23:31brehautholo: minimal relevant source and a stacktrace on gist or refheap would be a good start. i doubt many people are going to want to spelunke your entire codebase
23:31Apage43if you'd prefer
23:33sinistersnareactually, i have to sleep, but the wiki can be edited publicly, and ill probably ask for criticism again tomorrow. thank you guys!
23:34holobrehaut, Apage43, the library provides something like 250 successful tests. the simple test i ran in the app (one that is also present in the library) is the one that doesn't work. how can a snippet of source be of any help, i thought. i'll provide a snippet
23:35brehautholo: well its a question of scope. without a snippet your code could be literally anything computable
23:35brehautthats quite a large domain to be winnowing
23:35Apage43typically you would include the functions of yours that are present in the stack trace
23:37Apage43in general, provide what you yourself would be looking at to figure out the problem
23:43holoi'm going to upload to github.. the deploy to clojars may not be working, but that's another story. later when i have this ready i come here again
23:44holobut not today :) i'm sleepy.. thanks for the insights