2013-03-13
| 00:21 | binski | how can I un-nest this this s-expression? https://www.refheap.com/paste/12480 |
| 00:21 | akhudek | with -> |
| 00:22 | binski | akhudek: yea, trying to but failing.. can you show? |
| 00:22 | jeremyheiler | arrdem, Would Clojure's for macro work for you? |
| 00:23 | akhudek | https://www.refheap.com/paste/12481 |
| 00:23 | jeremyheiler | ,(-> "foo-bar" (clojure.string/replace "bar" "baz") (clojure.string/replace "foo" "goo")) |
| 00:23 | clojurebot | "goo-baz" |
| 00:24 | binski | ahh.. thank you |
| 00:25 | jeremyheiler | binski, Think of it as a lest of expressions, where the return value of an expression becomes the first argument to the next. |
| 00:25 | jeremyheiler | list* |
| 00:26 | binski | jeremyheiler: oh ok, thats quite clear now |
| 00:28 | arrdem | jeremyheiler: gah I remembered loop but forgot that we had for. thanks. |
| 00:28 | jeremyheiler | arrdem, np |
| 00:29 | jeremyheiler | binski, good :-) |
| 00:49 | technomancy | arrdem: there's an implementation in old contrib, but please don't use it =( |
| 00:49 | technomancy | TheBusby: you could use unquote in defproject to conditionally include it |
| 00:56 | TheBusby | technomancy: excellent, thank you!!! |
| 00:56 | TheBusby | I suspect many other's may soon run into this same issue :( |
| 00:56 | technomancy | TheBusby: be aware that if you create an uberjar using java 1.7 it won't work on 1.6 |
| 00:57 | technomancy | does it blow up if you try to include it on 1.7? |
| 00:58 | TheBusby | no, should I just include it for all then? |
| 00:58 | technomancy | I think so, yeah |
| 00:59 | TheBusby | does that mean anything using Clojure 1.5.1 should also includes jsr166? |
| 01:00 | technomancy | no, lots of projects don't need it |
| 01:00 | TheBusby | ahh okay, I wasn't sure |
| 01:02 | amalloy | does the compile-if clause in clojure.core.reducers work now? it seems like it's still a totally broken approach, to me - they do conditional compilation of jsr-166 or java7 so that it can work in either context, but then they AOT the jar so that macro only gets run on their build servers |
| 01:06 | TheBusby | amalloy: I thought they disabled AOT for reducers.clj a couple versions back (I'm not sure though) |
| 01:08 | amalloy | did they? that would solve the problem, all right |
| 01:08 | amalloy | although then i'd be worried about the (set! *warn-on-reflection* true) at the top of the file |
| 01:09 | TheBusby | I'm pretty sure that they fixed it at some point in beta, but in alpha I would have to build my own |
| 01:09 | TheBusby | amalloy: details -> http://dev.clojure.org/jira/browse/CLJ-1066 |
| 01:30 | arrdem | technomancy: no worries about that... I was looking at porting my CL-idiomatic parser combinator instead of using fnparse again but opted to just fnparse again. |
| 01:30 | arrdem | the CL side-effect-full itteration thang just doesn't slide in clojure |
| 01:34 | brehaut | i wish we had a better option than fnparse |
| 01:34 | brehaut | there was a cottage industry in parser combinator libs for a while, and then tumbleweeds |
| 01:36 | jeremyheiler | brehaut, I don't know much about fnparse, but what don't you like about it? |
| 01:36 | arrdem | fnparse does a a pretty good job.. |
| 01:36 | arrdem | no complaints so far |
| 01:36 | arrdem | just that we need a maintainer who isn't jchoi |
| 01:36 | brehaut | jeremyheiler: its pretty dead. theres a couple of people whove forked it to work with 1.3+ |
| 01:37 | jeremyheiler | Ah, so it's just dusty. |
| 01:37 | brehaut | but thats about all the support it has had in years |
| 01:37 | arrdem | [factual/fnparse "2.3.0"] is 1.4.0... using it now |
| 01:37 | brehaut | huh well thats good |
| 01:37 | arrdem | dusty sure but it's off of contrib.monads |
| 01:37 | arrdem | so anything else is just lack of new dev |
| 01:38 | brehaut | arrdem: old contrib monads, or algo.monads? |
| 01:38 | arrdem | brehaut: it uses algo.monads now, from contrib monads originally |
| 01:38 | brehaut | right |
| 01:38 | arrdem | factual ported it, and for that I owe him karma |
| 01:38 | brehaut | them |
| 01:38 | brehaut | factual is a company i believe |
| 01:38 | jeremyheiler | it is |
| 01:39 | brehaut | arrdem: i could have been ported to protocol monads was the other thing |
| 01:39 | arrdem | any ideas for a simple html page I could point my new html -> compojure tool at? |
| 01:39 | arrdem | brehaut: oh ok |
| 01:40 | arrdem | oh bugger this tool doesn't support comments or javascript... |
| 01:40 | brehaut | jeremyheiler, arrdem: there are a couple of weird cases where fnparse implements some ops as macros rather than functions which makes them a little awkward to compose. i suspect some of it is to work around problems with state monads in non-tail call optimized languages |
| 01:41 | brehaut | arrdem: they are actually kinda simple. state monad in particular (the basis of fnparse) is a bit complicated. |
| 01:41 | brehaut | arrdem: jimduey's clojure.net has some good introductions to monads in general though |
| 01:42 | brehaut | arrdem: and i would suggest manually doing the substitutions for a state monad to get how it works. its kinda magically otherwise |
| 01:42 | jeremyheiler | Ditto for Jim Duey's blog posts. Lenoardo Borge's four part series was really good, too. http://www.leonardoborges.com/writings/2012/11/30/monads-in-small-bites-part-i-functors/ |
| 01:42 | arrdem | brehaut: okay thanks I'll push that onto the reading list |
| 01:43 | brehaut | "Today I join the already bloated group of people who wrote monad tutorials. It’s a bit of a ritual, really." love it |
| 01:43 | jeremyheiler | haha yeah |
| 01:43 | brehaut | monads: super hard till you grok it, then super easy and you feel like you have an insight that will help everyone else grok them too |
| 01:44 | brehaut | and then you read about arrows. |
| 01:44 | amalloy | i liked http://cdsmith.wordpress.com/2012/04/18/why-do-monads-matter/, which came from a rather different angle than macro blogs i'd read previously. rather long, though |
| 01:44 | jeremyheiler | amalloy, 404 |
| 01:44 | brehaut | works here |
| 01:44 | jeremyheiler | Nevermind, sans the comma. |
| 01:44 | amalloy | jeremyheiler: your irc client is including my , in the url |
| 01:44 | amalloy | but i'm sure that i'm just falling for the "the *last* article i read will be the *first* article anyone needs to read" trap |
| 01:45 | jeremyheiler | lol |
| 01:45 | amalloy | the first one will never make sense; you have to take your own spiritual journey |
| 01:45 | brehaut | haha |
| 01:45 | brehaut | so true |
| 01:45 | jeremyheiler | That's so true. |
| 01:46 | brehaut | im pretty sure everyone has a different "hey you guys, you just need to understand X" moment |
| 01:46 | amalloy | even there, i've really just regurgitated the "monads are burritos" meta-tutorial and claimed it as my own |
| 01:47 | brehaut | ive never actually read the burritos one |
| 01:48 | amalloy | brehaut: it's really just what you said: everyone has their own 'you just need to understand X' moment |
| 01:49 | brehaut | oh right |
| 01:50 | jeremyheiler | The analogies never really worked for me. Ultimately I concluded that I just need to ask myself what exactly the particular monad I was trying to grok wanted to hide or ignore. |
| 01:51 | brehaut | jeremyheiler: i find that works for the simpler monads, but the state stuff really spanners it |
| 01:51 | brehaut | because you also need to consider what constitutes a value and why |
| 01:52 | brehaut | (where state monad uses functions to describe a rube goldberg machine that you eventually kick into life outside the monadic code) |
| 01:56 | jeremyheiler | brehaut, True, but the value is really no different then thinking about function args and return values anyway. Then the state monad is just about hiding the state when you're using the monadic functions. |
| 01:57 | brehaut | and this is why the X is different for everybody ;) |
| 01:57 | jeremyheiler | Yep |
| 01:58 | jeremyheiler | It's definitely interesting |
| 01:59 | brehaut | fwiw, my lightbulb moment was understandign the relationship between function application and composition and bind and >=> |
| 02:02 | brehaut | huh, colloquay thinks the kleisli arrow is an emoticon. how odd |
| 02:02 | jeremyheiler | Nice |
| 02:03 | amalloy | brehaut: i've seen people use it. IME it signifies "i'm a twit" |
| 02:03 | brehaut | amalloy: remarkably apropos then |
| 02:25 | arrdem | aaand +1 to fnparse, html -> compojure translator works a treat the first time |
| 02:32 | Raynes | fnparse isn't maintained anymore, Why did you use it |
| 02:32 | Raynes | ? |
| 02:33 | Raynes | Oh, I guess Aaron Crow is maintaining it. |
| 02:33 | Raynes | Oh, not. |
| 02:33 | Raynes | He just released a version with a dep update. |
| 02:33 | Raynes | So yeah, why fnparse? |
| 02:34 | Raynes | https://github.com/blancas/kern and https://github.com/protoflex/parse-ez and... |
| 02:34 | Raynes | amalloy: What's that other parser library? |
| 02:35 | Raynes | The one that I ask you the name of on a monthly basis because I always forget? |
| 02:35 | amalloy | the parsatron |
| 02:35 | Raynes | Yes. That. |
| 02:35 | jeremyheiler | parsley? |
| 02:35 | clojurebot | parsley is an incremental parser with docs at http://wiki.github.com/cgrand/parsley/design-notes and at http://cloud.github.com/downloads/cgrand/parsley/parsley.pdf |
| 02:35 | amalloy | or parsley? |
| 02:35 | Raynes | That one too, but I was thinking of the parsatron. |
| 02:37 | arrdem | Raynes: because fnparse is something I've used before and was the first thing that sprang to mind. I messed with parse-ez once and had trouble with it, never touched kern before. |
| 02:37 | Raynes | arrdem: That's fine. I'm criticizing you anyways. Newb. |
| 02:38 | amalloy | i think given that factual has taken ownership of fnparse, it would be the first thing i'd try |
| 02:38 | Raynes | amalloy: I don't know if I would call this ownership. |
| 02:38 | Raynes | He literally just released a version with deps that another fork had updated. |
| 02:39 | amalloy | heh |
| 02:39 | Raynes | Factual has no commits. |
| 02:39 | arrdem | Raynes: lol I see what you did there. |
| 02:39 | amalloy | well, i remember zack was saying he was looking into some bugs in it |
| 02:39 | amalloy | zach. i always get that wrong |
| 02:40 | Raynes | arrdem: Are you an old man, sir? |
| 02:40 | arrdem | Raynes: if you call 20 old... |
| 02:40 | Raynes | Oh, the 'survived' bit sounded like "I didn't die of old age before I got called a nub" |
| 02:40 | Raynes | In other news, fantastic. Nice to meet other people in the young as shit club, arrdem. |
| 02:42 | Oddman | lol Raynes |
| 02:42 | Oddman | you sound like an old, grumpy twat |
| 02:43 | arrdem | haha |
| 02:43 | Raynes | Oddman: I'm a young, abrasive twat! |
| 02:43 | arrdem | I aspire to grow up into a crotchety lisp fanatic... |
| 02:43 | arrdem | just hope I get to do something cool first XP |
| 02:43 | Apage43 | I used to aspire to becoming a crotchety academic type |
| 02:44 | Raynes | I think Oddman may be one of the few people left in Clojureland who doesn't know my age. |
| 02:44 | Apage43 | but didn't finish any degrees so I have up on it =P |
| 02:44 | Apage43 | *gave |
| 02:46 | Oddman | Raynes, probably one of the many who doesn't care, also |
| 02:46 | Iceland_jack | lol |
| 02:47 | Raynes | I also think you may have misinterpreted my fun-making with arrdem as genuine crotchetiness. |
| 02:47 | arrdem | THE SARCASM. CANNOT INFER WITHOUT FACIAL EXPRESSIONS OR VOICE. |
| 02:47 | Raynes | arrdem is approximately one year older than I. |
| 02:48 | arrdem | Raynes: holy shit dude |
| 02:48 | Raynes | Haha |
| 02:48 | arrdem | s/Raynes/Raynes's?/g |
| 02:48 | jeremyheiler | arrdem, Remember all that time you wasted in high school? Well, Raynes didn't waste it :-P |
| 02:49 | Apage43 | I spent highschool enamored with Common Lisp |
| 02:49 | arrdem | god fucking... I was doing so well with homeschooling before that too.. |
| 02:49 | jeremyheiler | lol |
| 02:49 | Raynes | That's the truth behind my github profile is homeschooling. |
| 02:49 | arrdem | (inc Raynes) |
| 02:49 | lazybot | ⇒ 24 |
| 02:49 | Raynes | And the truth behind that sentence is that it was really confusing. |
| 02:50 | Raynes | But yeah, I was homeschooled k-12 so I had lots of time on my hands. |
| 02:50 | Apage43 | picked up Clojure in '08, once I was out of high school and at my first job. Was wildly more practical =P |
| 02:50 | arrdem | Raynes: nice... I was homeschooled K-8 and did 9-12 in public |
| 02:50 | arrdem | still managed to pick up Python, C++, Java and some Clisp tho. |
| 02:51 | jeremyheiler | Raynes, Nice, I wish I had the opportunity to do that. |
| 02:51 | arrdem | the shock of meeting other homeschoolers never quite goes away... |
| 02:52 | Apage43 | I was a terrible PHP-for-everything guy for a time, once I started learning C to write PHP extensions I took a step back and started playing with a lot more stuff |
| 02:53 | Raynes | arrdem: Where does arrdem call home? |
| 02:53 | Raynes | Texas. |
| 02:53 | Raynes | Austin, Texas. |
| 02:53 | arrdem | yep. |
| 02:53 | arrdem | you got me... |
| 02:54 | arrdem | whether or not it was a good idea to leave so many direct links to my real life I have yet to decide. |
| 02:54 | Raynes | Your Github profile has a location. |
| 02:55 | arrdem | as does my blag (I think) and the whois of this irc connection is my office at UT |
| 02:55 | Raynes | I'm also well known for my ability to stalk. I spend most of my days across the room from amalloy but I still google him occasionally. |
| 02:55 | arrdem | haha |
| 02:55 | Raynes | Man, that poor Oddman guy really thinks I'm a terrible person now. |
| 02:56 | arrdem | oh come on. this is the internet. |
| 02:56 | Raynes | (this is the part where amalloy helpfully notes that Oddman's suspicions are correct) |
| 02:56 | arrdem | amalloy: ping ^ |
| 02:56 | arrdem | had to. |
| 02:57 | arrdem | Raynes: so that puts you at Flatland? |
| 02:58 | Raynes | arrdem: http://geni.com |
| 02:58 | Raynes | flatland is our open source stuff (most of it). |
| 02:58 | arrdem | that's hillarious |
| 02:59 | arrdem | would never have expected you two to be comming from a geneology startup |
| 02:59 | arrdem | although I suppose Lisp plays well with graphs and geneology is a graph so... |
| 03:00 | amalloy | "coming from" is an odd way to put it |
| 03:01 | Apage43 | they conjured you into existence somewhere in their office |
| 03:01 | Apage43 | with backstories, even |
| 03:01 | arrdem | lets go with that one. |
| 03:02 | Apage43 | Raynes was homeschooled because it was an easier simulation. |
| 03:02 | Raynes | This is accurate. |
| 03:03 | arrdem | aw all I got was a few decades of making pots when I got uploaded. |
| 03:05 | arrdem | Okay guys 2am and I need to hit the hay Raynes nice to "meet" you, hope to see you at a con one day. amalloy sorry to ping you in at this ungodly hour |
| 03:05 | Raynes | arrdem: Night Mr. Reid. It's only midnight here, so all is well. |
| 03:06 | Raynes | Me too. |
| 03:37 | muhoo | best code comment evar https://github.com/technomancy/syme/blob/master/src/syme/db.clj#L47 |
| 03:51 | ambrosebs | How can I use the ClojureCLR master branch from lein-clr? |
| 05:00 | talios | how often are you lot ( anyone whose awake ) using protocols in your clojure code? |
| 05:00 | ambrosebs | hardly ever. |
| 05:01 | ambrosebs | I always choose multimethods. |
| 05:02 | talios | we were discussing the use of, and passing around arbitrary maps/lists to everything rather than records, or "types" - I'm still in favour of types over loose structures for larger projects, or ones with multiple programmers/modules/libraries. |
| 05:03 | talios | coworker seems to want to avoid types as much as possible, imho maybe too much to |
| 05:03 | talios | tho |
| 05:05 | ambrosebs | You'd rather records? |
| 05:07 | ambrosebs | The safest I've found (I use this strategy in the core.typed implementation) is to use records backed by core.contracts. And use raw field lookups where possible, so it's a runtime error to look up an incorrect field. |
| 05:07 | talios | I'm not sure :) One instance was the postal email lib, that takes a map with set keys, like :host :user :pass , but since they're all optional if you pass in a map with :hst by accident, there's zero checking other than no email :) |
| 05:08 | talios | mmm, I need to look into core.typed, and hadn't heard of core.contracts - time to go read! |
| 05:08 | ambrosebs | Highly recommend core.contracts. See defconstrainedrecord. |
| 05:09 | ambrosebs | core.typed can help you here too. |
| 05:09 | ambrosebs | (in theory, it's still early development) |
| 05:12 | ambrosebs | talios: Also check out fogus/Trammel, it's a predecessor to core.contracts. |
| 05:13 | talios | willdo |
| 05:13 | talios | cheers |
| 05:14 | ambrosebs | talios: cool |
| 05:14 | ambrosebs | :) |
| 05:15 | talios | didn't know you were an aussie :) |
| 05:16 | acron^ | show videos! |
| 05:16 | talios | arbscht just started a clojure group here in town ( hosted at our work ) - if you're ever in Auckland - come visit |
| 05:17 | talios | acron^ - its http://www.youtube.com/watch?v=wNhK8t3uLJU i'm watching, from 2012 conj |
| 05:18 | ambrosebs | talios: It's true :) |
| 05:18 | ambrosebs | talios: it's why I'm awake right now ;) |
| 05:18 | talios | i just thought you were a hard core lisper ;p |
| 05:18 | ambrosebs | LOL |
| 05:19 | ambrosebs | talios: I submitted a talk to YOW! Lambda Jam, I might get close to Auckland ;) |
| 05:19 | talios | nice |
| 05:20 | ambrosebs | thanks for the invitation |
| 05:24 | cemerick | talios: In practice, silly stuff like :hst doesn't really happen. |
| 05:25 | cemerick | Or, it happens as often as a whole range of other typos you can't typecheck, like a 0 where a 1 should be, etc. |
| 05:26 | talios | true, in one particular I hit today the argument was a map, that contained a list, that contained a map, and that last map had invalid keys - that silently got ignored, or produced broken results |
| 05:27 | talios | it just seems that if you've got code that really wants known keys, that are documented in code comments, or on a wiki page, why not encode that in a type. same argument most people have with javascript and js-duck type comments etc |
| 05:29 | cemerick | I think that's putting the cart before the horse. Just because a fn expects a certain set of slots doesn't mean that that describes a type. |
| 05:30 | talios | not neccesarilly a type, but a well known/checked structure i guess |
| 05:30 | ambrosebs | talios: This example of a pretty complex heteroengeous map type in core.typed might interest you https://github.com/clojure/core.typed/blob/master/src/test/clojure/clojure/core/typed/test/compiler.clj#L61 |
| 05:31 | ambrosebs | Say you had a type that needed at least one of :host :name :phone, you could encode that in a static type. |
| 05:31 | ambrosebs | If anything, it's very useful to use the syntax to standardise your expectations, even if you don't use the checker. |
| 05:32 | talios | *nod* |
| 05:34 | talios | HMap looks like that would satisfy my gripe from this morning |
| 05:35 | clgv | talios: there are libs for checking map structure |
| 05:42 | talios | hazah - and now ambrosebs is talking about HMaps on my screen :) |
| 05:43 | ambrosebs | talios: I think I just skip over them. |
| 05:43 | ambrosebs | *skim |
| 05:43 | talios | it'll give me an overview :)) |
| 05:54 | talios | mmmm 11pm and I'm feeling like bed already |
| 06:00 | clgv | talios: oh. where are you from. it's 11 am over here ;) |
| 06:00 | talios | clgv - Auckland, New Zealand - 11:01PM |
| 06:00 | clgv | talios: guessed for australia. close miss ;) |
| 06:01 | talios | the better nation :) |
| 06:01 | talios | tho Aus gets better tours |
| 06:04 | talios | grr - I hate how emacs prelude removes the arrow keys for navigation. for all the good things it gives, it just kills everything in the name of purity and crippled hands |
| 06:31 | corecode | talios: yea, bad for beginners |
| 06:34 | maio | talios: (setq prelude-guru nil) |
| 06:34 | maio | https://github.com/bbatsov/prelude#no-arrow-navigation-in-editor-buffers |
| 06:41 | talios | maio - hrm, that doesn't seem to do anything hitting esc-x then typing that in, emacs is not meant for love |
| 06:43 | talios | ahh - read the page and i'm all good :) |
| 07:39 | ljos | brehaut, ambrosebs: In core.typed, how do I annotate records? Do I just use the same as for deftype? |
| 07:45 | ambrosebs | ljos: not supported yet. |
| 07:45 | ambrosebs | There's a subtle design issue. A record loses it's type if you dissoc all the base keys |
| 07:46 | ljos | abrosebs: yeah, I can see how that would be problematic. |
| 07:46 | ljos | ambrosebs: does a defrecord unify to a HMap per chance? |
| 07:46 | ambrosebs | unify? |
| 07:47 | cemerick | ambrosebs: s/all/any, right? |
| 07:47 | ambrosebs | cemerick: hmm I forget. |
| 07:47 | ljos | ambrosebs: I think I have been doing a bit to much prolog lately. Can I treat a record as a HMap when I give it to a function right now? or would that be a type error? |
| 07:47 | cemerick | yeah, any |
| 07:48 | ambrosebs | cemerick: cheers. Doesn't make it any easier though :) |
| 07:48 | cemerick | ambrosebs: pay no attention to the peanut gallery :-) |
| 07:49 | ambrosebs | ljos: I doubt it works |
| 07:50 | ljos | ambrosebs: Ok, I will test and report back. If it doesn't work I can just do something else here I think... |
| 07:50 | ambrosebs | In theory a record is an intersection of a datatype and a HMap, but I've made no implementation yet. |
| 07:57 | mpfundstein | is here anyone with lamina experience? i try to use it with aleph and i can't find a way to see if a client closed the connection |
| 08:13 | ambrosebs | ljos: find out anything exciting? |
| 08:18 | ljos | ambrosebs: First of all I had to fight a little with not being allowed to do a list with Symbols. |
| 08:19 | ambrosebs | really? |
| 08:20 | ljos | ambrosebs: I figured out that it seems like it does not like to be a HMap, but I am trying some things with IPersistentMap now, but I get some strange error that I haven't figured out why yet. |
| 08:20 | ljos | The thing with the symbols is probably because I don't understand core.typed yet. |
| 08:22 | ljos | ambrosebs: what am I doing wrong here: (ann-form '(a b) (List* Symbol Symbol)) ? |
| 08:23 | ambrosebs | List* should be IPersistentList |
| 08:23 | ambrosebs | Hmm. |
| 08:23 | ambrosebs | Ok that probably should work. |
| 08:23 | ambrosebs | What's the error? |
| 08:24 | ljos | it does work if I change it to IPersistentList. |
| 08:24 | ambrosebs | ljos: Ah, it's one of *these* errors. |
| 08:24 | ambrosebs | If you get a multiple methods error, that's a bug. |
| 08:24 | ljos | That is the one. |
| 08:25 | ambrosebs | Let me know when you find more, they're easy to fix. |
| 08:25 | ambrosebs | I may abandon using a multimethod here anyway. |
| 08:26 | ljos | it seems to happen for any type here that is not of (Value X) when I use List*. |
| 08:27 | ambrosebs | Yep, makes sense. |
| 08:29 | ambrosebs | ljos: FYI heterogeous List and Seq are half baked and not well tested. |
| 08:29 | ambrosebs | hmaps and hvectors are much more solid atm |
| 08:30 | ambrosebs | There shouldn't be too much issue though. |
| 08:37 | ambrosebs | ljos: The List* example should work in master |
| 08:42 | ljos | ambrosebs: sweet! |
| 08:54 | ljos | ambrosebs: I get this error that I don't understand at all. I was wondering of you could have a look at it. I have put up a minimal version here http://pastebin.com/XWKcLLtx that shows the problem. |
| 08:55 | ljos | I don't understand how I could have the wrong number of arguments to a type I don't use. |
| 08:57 | ambrosebs | ljos: Yea, the record type just isn't set up to be used. I think core.typed is trying to go through the record's ancestors and instantiating them, but things don't match up to what is expected. |
| 08:57 | ambrosebs | ljos: thanks, that's useful |
| 08:59 | ljos | ambrosebs: yeah, I was thinking it was something like that, but would expect it to look for the type in the supers that match the type I have specified for the function. |
| 09:00 | ambrosebs | What the error means is core.typed found an ancestors IPersistentCollection, when it should be (IPersistnetCollection x) |
| 09:01 | ambrosebs | core.typed isn't very lenient with that at the moment. It's helped me find a few bugs so I'll keep that behaviour for the early versions. |
| 09:04 | ljos | ambrosebs: I managed to force the record into a IPersistantMap now and now it works how it should, though I loose the record type in the process. |
| 09:05 | ambrosebs | ljos: hehe really? that's interesting. |
| 09:05 | ambrosebs | I don't know how that worked. |
| 09:06 | ljos | (into {} (R. 1)). I annotated into as (ann clojure.core/into (All [x y] [x y -> x])). |
| 09:08 | ambrosebs | ljos: right. That's cheating :) |
| 09:12 | ljos | ambrosebs: I know. into is way to lenient, but at least know I can work a bit with records, just that I won't know if the into function will crash everything or not. |
| 09:13 | ljos | or, the data in the record. Everything else is forgotten. |
| 09:13 | ambrosebs | ljos: you've given a quite inaccurate type to into :) you could put anything you want as the second argument |
| 09:14 | ljos | I know. |
| 09:14 | Kototama | hi, I have put my JS files in the project/src-js/libs directory and add the :libs ["src-js/lib"] to :compiler option for clojurescript, but cljsbuild does not compiler the source |
| 09:14 | Kototama | what I am doing wrong? |
| 09:14 | michaelr524 | hello |
| 09:58 | greg_ | Hello all. Anybody here have any experience using 'lein deploy' to send jars, automatically, to Bitbucket's download section (of a given project)? |
| 10:01 | rcg | greg_, did you consider pushing to clojars.org? |
| 10:02 | rcg | it's fairly straight forward and lein will automatically fetch your lib for you from there |
| 10:02 | greg_ | rcg, thanks, but this is a private project right now. The JARs are for release to a customer. |
| 10:02 | rcg | in case your project is a lib you use in other projects ;) |
| 10:02 | rcg | greg_, right, i see :) |
| 10:05 | delihiro_ | Hi all. I'm using compojure to build my website. How should I keep ring server running? So far doing ``lein run&`` and when killing ``kill -9 blabla``... |
| 10:06 | ljos | ambrosebs: shouldn't ((Seqable Long) -> (Seqable Long)) be a subtype of ((Seqable |
| 10:07 | ljos | ((Seqable x) -> (Seqable x)) ? |
| 10:07 | hyPiRion | delihiro_: lein uberjar, then java -jar ... & (or even better, set up a supervisor for it) |
| 10:07 | ambrosebs | ljos: Yes I think so. |
| 10:07 | delihiro_ | hyPiRion: thank you, I'll try that now |
| 10:09 | ljos | ambrosebs: my bad, I put [Fn [Long (All [x] (Fn [Seqable...]))]] instead of on the outside of the whole expression. That was what tricked it up. |
| 10:09 | ljos | instead of All on the outside* |
| 10:10 | ambrosebs | Yes ok. |
| 10:11 | juhuchapa | Hi guys! |
| 10:13 | yedi | y did that clojure all grown up post get so many upvotes |
| 10:22 | michaelr524 | because hn ;) |
| 10:24 | Pupnik- | its not grown up until it has TCO! |
| 10:30 | jtoy_ | can anyone tell me what is wrong with this: https://www.refheap.com/paste/12491 my code works if I just use map, but if I add a filter, it dies with: java.lang.RuntimeException: java.lang.NullPointerException |
| 10:30 | jtoy_ | im just trying to process rows from a file and then filter then so i can do a count |
| 10:32 | frenchyp | can cheshire.core/parse-string return nil? |
| 10:33 | jtoy_ | frenchyp: I dont think so, it should raise an exception instead |
| 10:34 | dakrone | frenchyp: if you parse the string "null", yes it can |
| 10:34 | clgv | Pupnik-: well, then Java and all JVM languages are not grown up :P |
| 10:35 | frenchyp | jtoy_: does it work if you wrap (map ..) with (first (map..)) to realize the lazy seq? |
| 10:35 | jtoy_ | frenchyp: I just tried with only: (filter #(= % "m" ) (line-seq rdr)) and I get "(java.io.IOException: Stream closed" instead which makes me think im just doing it wrong |
| 10:36 | clgv | jtoy_: you are using with-open I guess and your lazy-seq leaves the with-open scope unevaluated |
| 10:36 | frenchyp | ya, I'd guess that's related to line-seq returning a lazy seq |
| 10:37 | frenchyp | if you are trying to process the whole file anyway, i'd try to add a doall around the map, or possible around the filter |
| 10:37 | jtoy_ | yes, (first (map #(cheshire.core/parse-string %) (line-seq rdr))) works |
| 10:38 | frenchyp | *possibly |
| 10:38 | clgv | jtoy_: the problem is that the with-open statement closes your reader "rdr" before you evaluated your lazy-seq |
| 10:39 | jtoy_ | uh, sorry to ask, but i've tried all the different combinations, can one of you guys show me a simpl example that should work with with-open, map, and filter ? |
| 10:40 | clgv | jtoy_: (with-open [rdr (io/reader "myfile.txt")] (doall (filter #(= % "m" ) (line-seq rdr)))) |
| 10:41 | jtoy_ | clgv: thx, i think i tried that before, but ill try it now |
| 10:42 | clgv | jtoy_: if your file is huge though, you should do the analysis in the with-open scope to benefit from the lazy nature of the line-seq |
| 10:42 | clgv | *the whole analysis |
| 10:43 | clgv | hmm probably a lazy-reader-seq would be great ^^ |
| 10:44 | frenchyp | jtoy_: example with map https://www.refheap.com/paste/12492 |
| 10:44 | clgv | frenchyp: "please paste the result"? :P |
| 10:45 | frenchyp | lol, not that interesting: ("ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH") |
| 10:45 | jtoy_ | I jsut got it to work, thx |
| 10:46 | clgv | ah right, password hashes are in a different file usually and you compare for equality |
| 10:46 | frenchyp | yes, /etc/shadow |
| 10:47 | jtoy_ | clgv: your example isnt lazy bc of the doall, is that correct? |
| 10:47 | frenchyp | was my first try actually, but tight reading permissions reminded me of my foolishness |
| 10:48 | clgv | jtoy_: the lazy sequence in both examples (frenchyp's and mine) leaves the scope of the with-open evaluated completely, yes |
| 11:01 | jtoy_ | if it leaves the scpoke, does that make with-open useless in that case? |
| 11:02 | frenchyp | no |
| 11:02 | frenchyp | the with-open is here to ensure that your file and its reader get closed properly when you are done working with them |
| 11:03 | frenchyp | so it is not useless |
| 11:03 | frenchyp | the fact that line-seq is lazy does become useless if you load the whole file, processed or not, into memory |
| 11:03 | frenchyp | but you get that lazyness for free, whether you end up using it or not |
| 11:13 | ambrosebs | Just ported analyzer to CLR https://github.com/clojure/clr.tools.analyzer |
| 11:15 | clgv | ambrosebs: how much work was it? |
| 11:15 | ambrosebs | about 2 hours. |
| 11:16 | ambrosebs | I'd never used CLR before, and have basically zero .net experience. |
| 11:16 | clgv | then thats probabably pretty fast ;) |
| 11:16 | clgv | oh my spelling module failed^^ |
| 11:17 | ambrosebs | I was pleased :) Some pretty nasty error msgs in CLR though. |
| 11:17 | Pupnik- | is clojure on clr much different to jvm clojure? |
| 11:18 | ambrosebs | Internals are identical. |
| 11:19 | noidi | ambrosebs, wow, worse than on the JVM? ;) |
| 11:19 | noidi | the erro messages |
| 11:19 | jtoy_ | what is the idomatic way to get vales from a clojure.lang.PersistentArrayMap, I see that its not (:key persistentarraymap) |
| 11:19 | nDuff | jtoy_: if the key is a keyword, that is indeed it. |
| 11:19 | ambrosebs | noidi: well, they're different looking now :) |
| 11:19 | nDuff | jtoy_: otherwise, you need to use get |
| 11:19 | john2x | would anyone recommend PeepCode's Clojure screencast? https://peepcode.com/products/functional-programming-with-clojure |
| 11:21 | joegallo | wait -- isn't it idiomatic to (persistentarraymap "some-string") or whatever |
| 11:23 | jtoy_ | idiomwhat do you mean by keyword? |
| 11:23 | blrm | john2x: i have only watched about 20 minutes of it so far, but I like it well enough. It is probably pretty dated though, it was made before Clojure 1.0 |
| 11:24 | clgv | jtoy_: use (:mykeyword my-map) and (my-map anything) |
| 11:24 | Pupnik- | john2x, updated 2009, it might be pretty badly out of date |
| 11:24 | joegallo | :this :is :a :keyword |
| 11:24 | blrm | john2x: however the code used in the video has been updated to work with clojure 1.4.0: https://github.com/technomancy/mire |
| 11:25 | clgv | ambrosebs: what is your clojure clr setup concerning IDE/editor? |
| 11:26 | john2x | hmm right.. maybe i'll just wait for lispcast's screencasts. :) |
| 11:26 | ambrosebs | clgv: lein-clr plugin, lein clr repl + rlwrap, and vim for editing. |
| 11:26 | Pupnik- | ambrosebs, does it interop with c# (presumably) as easily as it does with java? |
| 11:26 | clgv | ambrosebs: ah ok. there is no good visual studio plugin, yet, is there? |
| 11:27 | ambrosebs | clgv: no idea, I'm in ubuntu :) |
| 11:27 | clgv | ambrosebs: ah, so you use clojure on mono^^ |
| 11:27 | ambrosebs | Pupnik-: I think there's a little extra ceremony from looking at the docs. |
| 11:27 | ambrosebs | clgv: yep, and it seems to work! |
| 11:27 | clgv | :) |
| 11:29 | ambrosebs | dmiller has done an awesome job, it's a pretty complete language. |
| 11:36 | jimduey | ambrosebs: I'm starting to annotate protocol-monads. :) Looks like it's going to be quite the task. |
| 11:37 | ambrosebs | jimduey: really? Interesting, which bits are hard? |
| 11:39 | jimduey | I don't know yet. :) Working on the first function which takes a list of monadic values. And the mv's can be pretty much any type. |
| 11:40 | ambrosebs | jimduey: cool! :) |
| 11:40 | ambrosebs | I'd love to help if you need it. |
| 11:47 | jtoy_ | ah, i see |
| 12:01 | llasram | ambrosebs: Is type inference in the roadmap for typed clojure? |
| 12:04 | jtoy_ | can someone show em the correct way to create 1 large hash-map when processing a file: https://www.refheap.com/paste/12496 this built the wrong things, its a map of hashes |
| 12:06 | ambrosebs | llasram: nope. I'm working on squeezing a little more local type inference though. |
| 12:06 | ambrosebs | llasram: I'll be happy once we only need to annotate vars and rarely have to touch actual code with annotations. |
| 12:07 | ambrosebs | llasram: I don't think you could design a satisfying type system for Clojure with inference. |
| 12:08 | llasram | ambrosebs: Ok. I was wondering if it would just be too difficult/infeasible to get useful results. Oh well |
| 12:08 | faust45 | can any one suggest up to date clojure wrap around lucene ? |
| 12:08 | technomancy | faust45: clojars uses clucy, but it's pretty minimal |
| 12:09 | ambrosebs | llasram: you'd probably end up with something like soft typing or Dialyzer, where you would be lenient about type errors. And that's fine, but that's not what I'm going for with core.typed. |
| 12:09 | llasram | ambrosebs: I'm interested in the idea of using typed clojure to figure out types for serialization, but needing to specify the types so proximately makes it less attractive vs just specifying the serialization |
| 12:09 | faust45 | technomancy: thanks |
| 12:09 | llasram | ambrosebs: Although I suppose you would then have greater confidence that you could serialize correctly |
| 12:10 | llasram | ambrosebs: Gotcha. Thanks for the info |
| 12:11 | ambrosebs | llasram: core.typed offers very precise types, so there would probably be some utility documenting the code. |
| 12:35 | tgoossens | any ideas for a good website name for a belgian clojure user group? |
| 12:35 | tgoossens | suggestions : belgiumclj.org (naar http://amsclj.nl/) , be.clojuregroup.org , clojureusers.be clojuregroup.be clojurians.be cljug.be |
| 12:37 | bbloom | grumble grumble namespaces again |
| 12:37 | dnolen | core.logic 0.8.0-rc3 going out, probably the last one, hopefully more incremental updates after this. |
| 12:38 | bbloom | i want people to be able to import and single namespace with a single alias, but i redefine *a lot* of core names, so I basically do [:refer-clojure :only ()] so it's MEGA ANNOYING to write non-trivial functions in this namespace |
| 12:38 | bbloom | but those non-trivial functions rely on stuff defined in that namespace |
| 12:39 | technomancy | bbloom: (:require [clojure.core :as cc])? |
| 12:40 | bbloom | technomancy: yeah, that's what i'm doing, but the issue is that there is a big disagreement between the API i want to provide and the 'ns macros that I need to not pull my hair out during development |
| 12:42 | jonasen | dnolen: no LOGIC-118 for rc3? |
| 12:45 | dnolen | jonasen: doubtful, waited long enough. But don't worry I'm sure 0.8.1 will be hot on the trail of 0.8.0 - there are issues of the same importance as 118 that also need to be addressed. |
| 12:46 | jonasen | dnolen: that's ok |
| 12:46 | jonasen | dnolen: Do you want tests for patches also? |
| 12:46 | dnolen | jonasen: yes, that's preferred |
| 12:46 | jonasen | dnolen: I'll add some then |
| 12:47 | dnolen | jonasen: thanks! |
| 12:49 | jonasen | dnolen: when I updated kibit to 0.8.0-rc2 I got two bug reports which I think is related to core.logic. One is LOGIC-118 and the other one I have not yet reproduced: https://github.com/jonase/kibit/issues/78 |
| 12:51 | dnolen | jonasen: hmm, sounds like they have a really deep structure or a circular reference. |
| 12:55 | juhu_chapa | What is a closure in clojure? |
| 12:56 | nDuff | juhu_chapa: When you generate a function that refers to names it inherits from surrounding scope, it "closes over" them. |
| 12:56 | clgv | juhu_chapa: something like that (let [x 2] (fn [y] (+ x y)) |
| 12:57 | clgv | +) |
| 12:57 | nDuff | juhu_chapa: In the example clgv just gave, the fn closes over x |
| 12:57 | nDuff | juhu_chapa: see also http://en.wikipedia.org/wiki/Closure_(computer_science) |
| 12:59 | juhu_chapa | Thank you guys! |
| 13:03 | skoodge | is there any way to get the arguments to a macro in syntax-quoted form instead of simply quoted? |
| 13:05 | bbloom | skoodge: unfortunately, it's somewhat non-trivial to resolve a symbol the same way syntax quote does, there is no standard function for it |
| 13:06 | bbloom | skoodge: you can use the resolve-symbol function from backtick: https://github.com/brandonbloom/backtick/blob/master/src/backtick.clj#L85-L99 |
| 13:06 | bbloom | skoodge: or just look at what it does and decide which code paths you care about and copy paste inline |
| 13:08 | skoodge | bbloom: ok, I guess I'll use it inline then |
| 13:08 | skoodge | not very pretty, but seems like the best solution :-/ |
| 13:09 | clgv | skoodge: a shortcut is using `resolve` and using the fields ".ns" und ".sym" - but you will need to check if it still works when a new release of clojure is released |
| 13:09 | bbloom | skoodge: yeah, there's a lot of stuff going on in there: dealing with special forms, constructors, type names, method calls, constructor invocations, namespace resolution, etc |
| 13:12 | clgv | skoodge: in terms of the backtick source `resolve` + `var-symbol` gets you a resolve symbol for normal clojure symbols |
| 13:12 | grebus | anyone had luck with clj-iterate in clojurescript? |
| 13:12 | Pure_Loulou | hello :)) |
| 13:13 | Pure_Loulou | my code has a bug,but i cant find the line of the bug in the stack frama |
| 13:14 | Pure_Loulou | it shows me code only from java, or from clojure.core |
| 13:15 | Pure_Loulou | is there a way to automatically track the line of my code that produces the exception? |
| 13:15 | nDuff | Pure_Loulou: Short answer? No. Long answer? We'd need more details. |
| 13:15 | nDuff | Pure_Loulou: Are you getting your exception from (clojure.stacktrace/e), from (clojure.stacktrace/print-exception), or somewhere else? |
| 13:15 | nDuff | Pure_Loulou: ...is this evaluating a lazy sequence? Using concurrency primitives? etc etc. |
| 13:15 | Pure_Loulou | IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Keyword |
| 13:15 | Pure_Loulou | clojure.lang.RT.seqFrom (RT.java:494) |
| 13:15 | Pure_Loulou | clojure.lang.RT.seq (RT.java:475) |
| 13:15 | Pure_Loulou | clojure.core/seq (core.clj:133) |
| 13:15 | Pure_Loulou | clojure.core/map/fn--4087 (core.clj:2426) |
| 13:15 | Pure_Loulou | clojure.lang.LazySeq.sval (LazySeq.java:42) |
| 13:15 | nDuff | Pure_Loulou: ...is this Java 8? |
| 13:15 | Pure_Loulou | clojure.lang.LazySeq.seq (LazySeq.java:60) |
| 13:15 | Pure_Loulou | clojure.lang.RT.seq (RT.java:473) |
| 13:15 | Pure_Loulou | clojure.lang.RT.countFrom (RT.java:526) |
| 13:15 | Pure_Loulou | clojure.lang.RT.count (RT.java:519) |
| 13:16 | Pure_Loulou | nothing from my code.... |
| 13:16 | nDuff | Pure_Loulou: the point is that we need to know the actual _code_. |
| 13:16 | nDuff | Oh -- it _is_ a lazy sequence. |
| 13:16 | nDuff | ...well, not quite. |
| 13:16 | nDuff | Trying to use a keyword as a sequence is a pretty clear error. :) |
| 13:17 | clgv | Pure_Loulou: you provided a keyword where a sequence was expected in a map statement |
| 13:17 | Pure_Loulou | yes but where i did that... |
| 13:17 | Pure_Loulou | i dont know...... |
| 13:17 | nDuff | Pure_Loulou: *shrug*. If you give us the code, we'll help you track that down and give you pointers about how we did. |
| 13:17 | clgv | Pure_Loulou: please paste additional code at refheap.com |
| 13:17 | nDuff | Pure_Loulou: Thing is, I don't know how I do it myself right now -- it's something I _do_, but that I don't understand well enough to explain. |
| 13:18 | clgv | if it does not happen in a macro, you should get a source file and line of your project |
| 13:18 | ieure | technomancy, Have you run into this with lein-tar before? https://gist.github.com/ieure/5154240 |
| 13:20 | Pure_Loulou | thanx guys i will try a little by my self,but why in clojure you cant get the line of the bug automatically? |
| 13:20 | Pure_Loulou | is this something that can be fixed? |
| 13:20 | nDuff | Pure_Loulou: Mostly you _can_. |
| 13:21 | clgv | Pure_Loulou: you usually get it if the error does not happen in a macroexpansion |
| 13:21 | nDuff | Pure_Loulou: Since you haven't given your code, we haven't been able to explain why that isn't the case in your current usage. |
| 13:21 | Pure_Loulou | i dont know where the error occurs to give you code |
| 13:22 | nDuff | Pure_Loulou: ...and I presume the context is proprietary or otherwise can't be shared for some other reason? |
| 13:22 | Pure_Loulou | i think this is the evil function https://www.refheap.com/paste/12498 |
| 13:22 | Pure_Loulou | no i am totally newbie no proprieraty |
| 13:24 | nDuff | Pure_Loulou: Have an example of how you invoke/run that? |
| 13:25 | Pure_Loulou | (parse-graph {:a0 {:label :a, true :b1, false :b0}, :b0 {:label :b, true :zfalse, false :zfalse}, :b1 {:label :b, true :ztrue, false :zfalse}, :zfalse {:label false}, :ztrue {:label true}} :a0) |
| 13:25 | nDuff | Runs fine here. |
| 13:26 | Pure_Loulou | yes but the output is probably not normal for some other part of the program,anyway thx guys for trying |
| 13:27 | nDuff | Pure_Loulou: Why don't you give us your _entire_ program, in enough context we can reproduce your problem? |
| 13:27 | nDuff | Pure_Loulou: ...instead of trying to guess at what function it's hiding in? |
| 13:27 | clgv | Pure_Loulou: that is not the function. search for "map" |
| 13:28 | owengalenjones | dumb question, is there an easy way to see what interfaces (java or clojure) classes implement? |
| 13:28 | technomancy | ieure: can't say I have. I haven't used lein tar in years though. |
| 13:28 | technomancy | hiredman: do you guys still use it? |
| 13:28 | clgv | owengalenjones: yes ##(ancestors (class [])) |
| 13:28 | lazybot | ⇒ #{java.util.List clojure.lang.Indexed clojure.lang.Seqable clojure.lang.ILookup java.util.concurrent.Callable clojure.lang.Counted clojure.lang.IPersistentVector clojure.lang.AFn clojure.lang.IMeta java.io.Serializable clojure.lang.IFn clojure.lang.Reversible j... https://www.refheap.com/paste/12499 |
| 13:28 | ieure | technomancy, Okay. Just using a Makefile instead. |
| 13:29 | technomancy | ieure: geez you didn't have to say that out loud |
| 13:29 | hiredman | technomancy: yes? |
| 13:29 | hiredman | I think |
| 13:29 | owengalenjones | clgv: thanks!!! |
| 13:29 | ieure | technomancy, I love make. |
| 13:29 | technomancy | now you're just messing with me |
| 13:29 | ieure | No way man. |
| 13:29 | ieure | Make is great. |
| 13:30 | hiredman | yes, lein tar |
| 13:30 | ieure | lein tar wouldn't have done what I needed anyway. |
| 13:30 | ieure | Moving a thing to lein from mvn. |
| 13:30 | ieure | And need to replicate what assembly did. |
| 13:33 | bbloom | anyone know of any attempts at fressian for javascript? |
| 13:34 | danielglauser | hiredman: technomancy: Just used lein tar on one of our projects yesterday |
| 13:42 | clojure-new | Hello, i have this in my .lein/profiles.clj {:user {:plugins [[jonase/kibit "0.0.9-SNAPSHOT"]]}} |
| 13:43 | clojure-new | But lein kibit says "'kibit' is not a task. See 'lein help'." |
| 13:43 | clojure-new | What i did wrong? |
| 13:45 | chronno | technomancy: I'm preparing for the key signing party, any tips for creating the keys and such? |
| 13:45 | chronno | technomancy: Right now I'm reading http://wiki.debian.org/Keysigning, but I'm not quite sure if such a big key (4096) is recommended/needed... |
| 13:48 | peat | ... I'm beating my head against a problem that seems like it should have an elegant answer. I'm looking for a way to turn [[:foo "bar"] [:baz "quux"] [:foo "doh"]] into { :foo ["bar" "doh"], :baz ["quux"] }. Any recommendations on where to start looking? |
| 13:48 | Pure_Loulou | my code i tried to example what it does ... https://www.refheap.com/paste/12500 |
| 13:49 | jtoy_ | can anyone show me how to make this more idiomatic or "beautiful"? https://www.refheap.com/paste/12501 I feel this is pretty crappy code and probably repeated |
| 13:51 | clgv | jtoy_: you do not need `doall` if you feed the lazy-seq into `into` ;) |
| 13:51 | clojure-new | Guys? |
| 13:52 | Gonzih | &(->> [[:foo "bar"] [:baz "quux"] [:foo "doh"]] (group-by first) (map (fn [[k v]] [k (map last v)]))) |
| 13:52 | lazybot | ⇒ ([:foo ("bar" "doh")] [:baz ("quux")]) |
| 13:52 | jtoy_ | clgv: ok, i took that out, thx |
| 13:52 | Gonzih | peat: take a look |
| 13:52 | clgv | jtoy_: and I think you can improve it via `for` |
| 13:53 | Gonzih | &(->> [[:foo "bar"] [:baz "quux"] [:foo "doh"]] (group-by first) (map (fn [[k v]] [k (map last v)])) (into {})) |
| 13:53 | lazybot | ⇒ {:foo ("bar" "doh"), :baz ("quux")} |
| 13:53 | jtoy_ | the map seems extra to me, but i coudlnt figure out how to create a hash-map iteraviley |
| 13:54 | peat | Gonzih: Hah! Thank you! |
| 13:55 | Gonzih | &(->> [[:foo "bar"] [:baz "quux"] [:foo "doh"]] (group-by first) (map (fn [[k v]] [k (vec (map last v))])) (into {})) |
| 13:55 | lazybot | ⇒ {:foo ["bar" "doh"], :baz ["quux"]} |
| 13:55 | Gonzih | with vectors |
| 13:55 | clgv | jtoy_: try that one https://www.refheap.com/paste/12502 |
| 13:55 | Gonzih | peat: no problem :) |
| 13:56 | technomancy | chronno: hmm... so actually I didn't get to run a key signing party at the conj due to illness unfortunately |
| 13:56 | technomancy | planning on doing one at clojurewest but haven't really gotten a chance to think through it much |
| 13:56 | clojure-new | jonasen: Can you help me? |
| 13:56 | technomancy | chronno: I don't think the huge key size is necessary, but honestly it can't hurt |
| 13:56 | Gonzih | clojure-new: try lein with-profile user kibit |
| 13:57 | clojure-new | Performing task 'kibit' with profile(s): 'user' |
| 13:57 | clojure-new | 'kibit' is not a task. See 'lein help'. |
| 13:57 | clojure-new | Gonzih: ^ |
| 13:57 | jtoy_ | clgv: what is that :let syntax? I, there is no x here: (for [line (line-seq rdr) :let [[i1 i2] (clojure.string/split (clojure.string/lower-case x ) #"\s+")]] |
| 13:57 | jtoy_ | and im not sure how to put the x/% item in bc i dont know that syntax |
| 13:57 | chronno | technomancy: ok, then I'll follow the debian docs and will wait to see how it rolls at clojure/west :-) |
| 13:57 | Gonzih | clojure-new: ok, give me one sec |
| 13:58 | clgv | toy_: I renamed "x" to "line" |
| 13:58 | chronno | technomancy: thanks |
| 13:58 | technomancy | chronno: do you use emacs? |
| 13:58 | jtoy_ | clgv: ah, can you recommend a page that shows how to use :let |
| 13:58 | technomancy | oh, I see you're in #emacs |
| 13:58 | clgv | jtoy_: ##(doc for) |
| 13:58 | lazybot | ⇒ "Macro ([seq-exprs body-expr]); List comprehension. Takes a vector of one or more binding-form/collection-expr pairs, each followed by zero or more modifiers, and yields a lazy sequence of evaluations of expr. Collections are iterated in a nested fashion, right... https://www.refheap.com/paste/12503 |
| 13:58 | technomancy | chronno: the easypg package in emacs makes gpg really easy to work with |
| 13:58 | technomancy | highly recommend reading up on it |
| 13:59 | Gonzih | clojure-new: Could not find artifact lein-kibit:lein-kibit:jar:0.0.9-SNAPSHOT in clojars |
| 13:59 | clojure-new | Gonzih: I've installed it locally. |
| 13:59 | Gonzih | clojure-new: change kibit line to [lein-kibit "0.0.7"] |
| 13:59 | clojure-new | Cloned from git and then 'lein install'. |
| 13:59 | Gonzih | clojure-new: it should be then on classpath to work properly i think |
| 13:59 | Gonzih | clojure-new: hm |
| 13:59 | chronno | technomancy: Yep, long time emacs fan. I'll check it out. |
| 14:00 | clgv | jtoy_: that's what I meant https://www.refheap.com/paste/12504 |
| 14:00 | jtoy_ | clgv: thx |
| 14:00 | Gonzih | clojure-new: I have no idea how that supposed to work. 0.0.7 works fine for me, don't know how to run 9-SNAPSHOT |
| 14:00 | Gonzih | clojure-new: sorry :( |
| 14:00 | clgv | jtoy_: play a bit with `for` to understand how it works |
| 14:01 | ustunozgur | how does one get a sorted by value set with priority-map? Neither (priority-map {:a 3 :b 1 :c 5}) nor (into priority-map {:a 3 :b 1 :c 5}) works. |
| 14:02 | jtoy_ | clgv: yes, im still not sure about the difference in map vs for, i know in ruby for is for iterating while map is map |
| 14:02 | jtoy_ | so still learning |
| 14:02 | Gonzih | jtoy_: I think for is list comprehension function and map is just map |
| 14:03 | clgv | jtoy_: `for` creates a lazy sequence as well but has a different syntax and is able to do nested loops |
| 14:03 | chronno | technomancy: although I was kinda wondering what I needed before arriving at the party. Obviously the key, and maybe some printouts? |
| 14:03 | clgv | jtoy_: e.g. ##(for [i (range 4) j (range 5) :when (< i j)] [i j]) |
| 14:03 | lazybot | ⇒ ([0 1] [0 2] [0 3] [0 4] [1 2] [1 3] [1 4] [2 3] [2 4] [3 4]) |
| 14:04 | technomancy | chronno: I'm actually hoping some people can show up with nothing and the people who are more familiar with the tools can help them through things |
| 14:04 | technomancy | but showing up with your key and a little up-front research would be really helpful =) |
| 14:05 | technomancy | if you want to bring cards with your key fingerprint on it that would save a little bit of time but imo it's not really worth worrying about |
| 14:05 | jtoy_ | clgv: cool, i see |
| 14:06 | chronno | technomancy: Great then I'll create the key and that will be it :-) |
| 14:17 | jtg | i cant believe raynor dies at the end of heart of the swarm |
| 14:19 | arrdem | jtg: GODDAMNIT DON'T RUIN IT FOR ME |
| 14:20 | technomancy | ugh wtf |
| 14:21 | jtg | oops, sorry, i was only trying to spoil it for cheezey |
| 14:21 | arrdem | does weavjester not idle here? |
| 14:21 | arrdem | *weavejester |
| 14:22 | technomancy | arrdem: he's often here |
| 14:22 | arrdem | technomancy: mmkay just surprised he isn't forever logged in like you Raynes and amalloy |
| 14:23 | technomancy | they do things differently in the UK I guess |
| 14:23 | arrdem | silly brits |
| 14:38 | technomancy | so, anybody tried Syme for pairing yet? https://syme.herokuapp.com |
| 14:40 | arrdem | nope, looks like a good idea if you don't have a share(ed/able) *nix host tho. |
| 14:40 | technomancy | arrdem: yeah, sharing your own machine can get tricky. |
| 14:41 | technomancy | if you don't have problems with port forwarding, the trust issues are problematic; you can't offer your pair sudo access, and you shouldn't give them access to your SSH agent. |
| 14:41 | bbloom | technomancy: will lein be updated to default projects to 1.5.1? |
| 14:41 | technomancy | bbloom: I think it might be already? |
| 14:41 | dnolen | lynaghk: have you looked at Ejecta at all? |
| 14:42 | bbloom | technomancy: i just did `lein upgrade` and then `lein new asdf` and it was 1.4.0 |
| 14:42 | technomancy | bbloom: I mean on master |
| 14:42 | bbloom | technomancy: ah ok |
| 14:43 | technomancy | qwerty users... man. |
| 14:43 | bbloom | technomancy: `lein new aeou` just doesn't have the same ring to it |
| 14:44 | pjstadig | technomancy: for real |
| 14:44 | technomancy | bbloom: I was thinking of http://common-lisp.net/project/asdf/ actually |
| 14:45 | bbloom | heh, i use asdf almost as much as "foo" and "bar" |
| 14:45 | arrdem | technomancy: Dvorak man |
| 14:45 | arrdem | s/technomancy/bbloom |
| 14:46 | bbloom | arrdem: not worth the trouble |
| 14:49 | finishingmove | what IDE can I use for Clojure on Windows? |
| 14:49 | daydreamt | finishingmove: Eclipse and Intellij both have Clojure plugins |
| 14:50 | finishingmove | daydreamt thanks |
| 14:50 | daydreamt | finishingmove many people seem to use emacs and vim though |
| 14:50 | technomancy | there is only one clojure IDE, and lpetit is its prophet? |
| 14:52 | lynaghk | dnolen: no, I haven't heard about this at all. Thanks! |
| 14:52 | lynaghk | er, dnolen_. |
| 14:52 | finishingmove | technomancy, hm? what do you mean by that |
| 14:53 | technomancy | eh, nothing |
| 14:53 | dnolen_ | lynaghk: http://github.com/phoboslab/Ejecta |
| 14:53 | dnolen_ | lynaghk: sounds right up your ally, target *native* OpenGL from JS using Canvas API |
| 14:54 | dnolen_ | lynaghk: my studio mate who does lots of fancy graphics stuff uses it and was pretty impressed by the perf, 60fps and all that. |
| 14:54 | nDuff | finishingmove: Are you looking for something for learning/experimenting with the language, or real work? |
| 14:54 | nDuff | finishingmove: if the former, I also suggest looking at LightTable |
| 14:54 | lynaghk | dnolen_: most of the work we do leverages CSS pretty heavily, so I dunno how far we'd be able to go with something like this. |
| 14:54 | arrdem | lol@ "real work" |
| 14:54 | dnolen_ | lynaghk: gotcha |
| 14:54 | nDuff | arrdem: (?) |
| 14:54 | finishingmove | nDuff: learning / experimenting |
| 14:54 | finishingmove | i'll check it out |
| 14:54 | technomancy | finishingmove: CCW seems like the most polished IDE by a significant margin |
| 14:55 | lynaghk | dnolen_: it's a cool idea, though if we're going to drop CSS and other browser pieces we might as well take a look at ClojureC =P |
| 14:55 | technomancy | nDuff: well, yeah if you want to discuss semantics. =) |
| 14:55 | rabbit_airstrike | but our friend here is looking for windows IDEs |
| 14:55 | dnolen_ | lynaghk: heh, this at least seems promising for supporting remote REPL and all that. |
| 14:56 | lynaghk | dnolen_: could use it to do something goofy like http://www.fourthdimensionapp.com/ |
| 14:56 | rabbit_airstrike | my experiences with emacs on windows have been less than pleasant |
| 14:56 | technomancy | nDuff: I was having a rare fit of non-pedantry there; it won't happen again. |
| 14:56 | dnolen_ | lynaghk: haha |
| 14:56 | lynaghk | dnolen_: yeah, sure. Though I have never really used the cljs repl---I get by with the plain Clojure REPL just fine |
| 14:56 | finishingmove | technomancy, where can i find CCW? (i can't seem to google it) |
| 14:57 | technomancy | ~ccw? |
| 14:57 | clojurebot | ccw is http://github.com/laurentpetit/ccw |
| 14:58 | auser | is anyone in here using riemann? |
| 14:59 | nDuff | Hrm. Anyone know if Manning has a discount for folks buying new editions of books they already own a prior edition of? |
| 15:01 | finishingmove | wow, LightTable looks awesome, I have to say |
| 15:02 | finishingmove | technomancy, thanks for the link to CCW, I will definitely consider it |
| 15:03 | technomancy | finishingmove: it's the only IDE afaik that has Leiningen integration |
| 15:10 | S11001001 | nDuff: I don't think so. |
| 15:12 | supersym | yea i love the instarepl :) |
| 15:14 | eriko | nDuff: FWIW, just received a half-off offer from Manning for upgrades on JoCv2 |
| 15:16 | nDuff | eriko: I don't think that offer is specific to upgrades |
| 15:16 | nDuff | eriko: ...for that matter, it _includes_ an ebook of v1, so it's clearly aimed at folks who don't already own it. |
| 15:18 | eriko | nDuff: True. And apparently is also a MEAP at this point. Thanks for reading it carefully for me :) |
| 15:23 | finishingmove | does eclipse provide these rainbow parentheses like http://writequit.org/blog/?p=386 ? |
| 15:24 | nDuff | finishingmove: CCW adds them to Eclipse, yes. |
| 15:24 | Glenjamin | Hi guys, is noir actually deprecated? I started learning it then stumbled across a blog post from Raynes =/ |
| 15:24 | nDuff | Glenjamin: Yes, but libnoir isn't. |
| 15:25 | Glenjamin | would be nice if webnoir.com mentioned it :( |
| 15:25 | Glenjamin | .org even |
| 15:25 | arrdem | Glenjamin: I mean it still works fine... I'm pullint 35ms latencies on my Noir backed site |
| 15:25 | arrdem | *pulling |
| 15:26 | amalloy | nDuff: i thought its paredit was pretty reasonable |
| 15:26 | arrdem | nDuff: is paredit worth it? I never bothered to master the keybinds so it just got in the way. |
| 15:26 | Glenjamin | i'm just getting started with clojure, so i guess i'd be better off with compojure + lib-noir |
| 15:26 | amalloy | arrdem: yes |
| 15:26 | nDuff | arrdem: The emacs one is so, so, _SO_ very worth it. |
| 15:26 | llasram | arrdem: So very worth it |
| 15:26 | arrdem | okay I'll give it another shot one day. |
| 15:26 | Glenjamin | i've been trying to find something non-emacs with strict paredit + barf/slurp, but i don't think it exists |
| 15:26 | amalloy | editing lisp without paredit is like editing java without autocomplete |
| 15:26 | nDuff | amackera: A lot of my finger-memory motions require having barf and slurp. |
| 15:27 | nDuff | err, amalloy ^^ |
| 15:27 | llasram | arrdem: Learning it may be the best time/code-productivity investment you can make |
| 15:29 | blrm | i like paredit.vim, but it says it isn't a complete implementation of paredit.el, so I assume I'm missing some of the magic |
| 15:30 | arrdem | blrm: I'd suspect so given how much magic I gained going from vimclojure to nrepl |
| 15:32 | arrdem | is there a good way to have README.md files auto-update when I bump project.clj's version number or am I just stuck hand-updating |
| 15:32 | borkdude | there was a gist or blogpost popular on twitter some times ago that contained comparison between clojure, python, haskell, etc. in the example three things were done in parallel and then combined, in the clojure solution promises were used. who remembers this? |
| 15:33 | borkdude | It could be something slightly different, I don't remember it clearly |
| 15:37 | amackera | nDuff: haha |
| 15:38 | nDuff | amackera: ...heh. I suppose that _does_ sound a little odd when taken out of context. |
| 15:42 | amackera | i know this is probably an often-asked question, but I'm looking for some beginner resources for clojure |
| 15:43 | amackera | i've used scheme a bit, and java |
| 15:43 | bbloom | amackera: http://clojure-doc.org/ |
| 15:43 | amackera | is it best to hunker down with a book? or is there a web-accessble resource that's recommended? |
| 15:43 | amackera | bbloom: excellent, many thanks! |
| 15:43 | nDuff | amackera: The best resources are typically books. |
| 15:44 | nDuff | amackera: http://www.clojurebook.com/ and "The Joy of Clojure" are the two leaders, IMHO. |
| 15:44 | frozenlock | cemerick: Can I haz more podcasts? |
| 15:44 | amackera | nDuff: thanks! |
| 15:44 | nDuff | amackera: ...do you learn better starting from high-level concepts or concrete examples? |
| 15:45 | amackera | concrete examples |
| 15:45 | nDuff | amackera: then you're better off with clojurebook.com |
| 15:45 | borkdude | nobody remember this example? |
| 15:45 | amackera | i have a moderate understanding of lispy concepts from scheme |
| 15:45 | nDuff | amackera: There are a lot of concepts to Clojure you won't have from there |
| 15:45 | blrm | amackera: 4clojure.com and the clojure-koans github repo are good, but they don't teach the concepts very well |
| 15:46 | nDuff | amackera: ...particularly around being a functional language with immutible data types and transactional memory. |
| 15:46 | nDuff | amackera: ...knowing Scheme will help, but it might not help as much as you expect. |
| 15:46 | amackera | roger that, i expected as much |
| 15:46 | lynaghk | frozenlock: I think cemerick is bringing his podcast equipment up to Clojure/West and to a mini-conference the following week, so we should be able to get a lot of Clojure-related rants on tape |
| 15:47 | amackera | and any suggestions for vim + clojure development? some googling indicates that vimclojure is no longer the hotness in this regard |
| 15:47 | nDuff | amackera: Personally, I use vim for everything _but_ Clojure; the tools available for emacs are just that good. |
| 15:47 | frozenlock | lynaghk: Nice! I might 'almost' feel like I'm there :p |
| 15:48 | amackera | nDuff: aw :( it's been years since i touched emacs |
| 15:49 | blrm | amackera: vim-foreplay picked up the torch from vimclojure. |
| 15:49 | amackera | perfect |
| 15:53 | amackera | thank you! |
| 15:55 | ivan | barely-audible bootlegs from Clojure/West would be much appreciated |
| 16:01 | supersym | haha |
| 16:11 | finishingmove | has anyone worked with LightTable? I was writing something in an instarepl tab |
| 16:12 | finishingmove | how would i save that in a file now? |
| 16:12 | bbloom | finishingmove: you summon ibdknox |
| 16:12 | nDuff | finishingmove: "save file as..." works in the instarepl same as anywhere else. |
| 16:13 | finishingmove | Uncaught TypeError: Cannot read property 'offsetLeft' of |
| 16:13 | finishingmove | ...AppData/Local/Temp/nw6452_19414/deploy/js/bootstrap.js:20110 |
| 16:13 | nDuff | Are you updated to 0.3.8? |
| 16:13 | finishingmove | i just downloaded LightTable 10 mins ago |
| 16:13 | nDuff | finishingmove: Right, and it upgrades itself after you run it. |
| 16:14 | nDuff | finishingmove: The download is 0.3.0 |
| 16:14 | nDuff | finishingmove: ...you have to restart it to get to whatever's current. |
| 16:14 | nDuff | finishingmove: go to "Light table version" in the menu, and see what you have. |
| 16:14 | finishingmove | it says version 0.3.8, binary 0.4.2 |
| 16:14 | nDuff | Ahh. That's current, then. |
| 16:14 | nDuff | *shrug*. Works for me, so talk to ibdknox. |
| 16:14 | finishingmove | but i didn't restart it so far |
| 16:14 | nDuff | (or report to the mailing list) |
| 16:15 | finishingmove | i will try to restart it now |
| 16:15 | nDuff | If it says that, you really do have the new one. |
| 16:15 | finishingmove | but i don't want to lose what i wrote |
| 16:15 | nDuff | ...so restarting shouldn't be necessary. |
| 16:15 | finishingmove | so how would i save the file ? |
| 16:15 | finishingmove | what format? |
| 16:15 | nDuff | Hmm? The conventional extension is .clj |
| 16:15 | finishingmove | like i said, i tried saving the contents of my instarepl as a .clj |
| 16:15 | finishingmove | but i can't open it |
| 16:15 | nDuff | Right, and if it doesn't work, there's a bug, and you should report it. |
| 16:15 | finishingmove | :\ |
| 16:15 | finishingmove | k |
| 16:15 | nDuff | In the meantime, copy it to the clipboard or something. |
| 16:16 | nDuff | finishingmove: re: bug reporting, https://groups.google.com/forum/?fromgroups#!forum/light-table-discussion |
| 16:16 | nDuff | finishingmove: I've not had much luck with #lighttable on IRC, whereas things mentioned there tend to get fixed quickly. |
| 16:16 | finishingmove | ok thanks |
| 16:16 | nDuff | finishingmove: ...btw, I suspect that said bug is Windows-specific, since I can't repro it here (Linux). |
| 16:17 | finishingmove | could be |
| 16:17 | finishingmove | it's actually trying to |
| 16:17 | finishingmove | file:/// |
| 16:19 | vurma | Is there a way to make a function call not be printed in repl? |
| 16:20 | nDuff | vurma: you mean have the value it returns not be printed? |
| 16:20 | nDuff | vurma: (do (your-call) nil) |
| 16:20 | nDuff | vurma: ...that way the nil is what gets returned. |
| 16:20 | vurma | Even if i juse java.io.FileReader to read it? |
| 16:20 | nDuff | vurma: might I ask why? |
| 16:20 | nDuff | Huh? |
| 16:20 | vurma | I tried that ^^ |
| 16:21 | nDuff | You can't have a FileReader read a function call |
| 16:21 | nDuff | so I don't understand the question. |
| 16:21 | borkdude | nobody remembers a comparison example on the web between clojure, haskell, python, java in which three parallel things are calculated and then combined? |
| 16:22 | nDuff | (...now, you could eval something that a FileReader reads, but why you'd be doing that in a REPL and trying to hide the result...) |
| 16:22 | vurma | Im sure im using the wrong approach here, but what im doing is first (def dataslurp (slurp "my-file.db")), then (def datamap (java.io.FileReader. dataslurp)) |
| 16:22 | vurma | for example |
| 16:22 | vurma | Well im just messing around with some functions and wanted to work with that in the repl, thats why. |
| 16:23 | nDuff | vurma: Okay, so you're creating two vars. |
| 16:23 | vurma | Would make little sense otherwise, yes. |
| 16:23 | vurma | Yep |
| 16:23 | nDuff | vurma: ...now, what do you _want_ to do, and how does that differ? |
| 16:24 | vurma | What i would like to do is not to have the contents of my-file.db printed in the repl when i define datamap, as shown above. |
| 16:24 | vurma | Its kind of a large file. |
| 16:25 | nDuff | vurma: err. It shouldn't be printing that at all. It should be printing something like #'user/datamap |
| 16:25 | vurma | Thats what i was thinking when i wrote it, but apparently not. |
| 16:25 | nDuff | vurma: or, rather, it would if that were a valid constructor for FileReader |
| 16:25 | nDuff | vurma: ...which it isn't. |
| 16:26 | nDuff | vurma: You're seeing the file's contents printed as part of an exception, not as part of output. |
| 16:26 | vurma | Got it. Yes, that makes sence. |
| 16:26 | vurma | sense* |
| 16:26 | nDuff | it'd just be (FileReader. "my-file.db") |
| 16:26 | nDuff | ...if you really needed a FileReader for some reason. |
| 16:28 | vurma | nDuff, i will explore more optimal ways of doing this. |
| 16:28 | vurma | Thanks a lot for the input! :3 |
| 16:43 | frozenlock | YArrrr! "IllegalAccessError app-handler does not exist clojure.core/refer (core.clj:3849)" |
| 16:43 | frozenlock | I know it exists, I can see it in the source!!! https://github.com/noir-clojure/lib-noir/blob/master/src/noir/util/middleware.clj#L84 |
| 16:44 | Raynes | Glenjamin: Dunno if anyone mentioned it, but luminus is a good way to start. |
| 16:44 | Raynes | $google luminusweb |
| 16:44 | lazybot | [Luminus - A Clojure Web Framework] http://www.luminusweb.net/ |
| 16:45 | Raynes | arrdem: Morning pardner. |
| 16:45 | nDuff | Mmm; shiny. |
| 16:46 | arrdem | Raynes: 'sup? |
| 16:47 | Raynes | arrdem: Apartment hunting. Super fun (not). |
| 16:47 | arrdem | feh |
| 16:47 | arrdem | I have yet to have the pleasure |
| 16:47 | arrdem | and get one that is |
| 16:53 | dnolen | new miniKanren / core.logic google group http://groups.google.com/forum/?fromgroups=#!forum/minikanren |
| 17:27 | ubun22 | how do i restructure a map with namespace qualified keys |
| 17:27 | ubun22 | i mean destructure |
| 17:28 | bbloom | ubun22: you don't |
| 17:28 | ubun22 | its a limitation? |
| 17:28 | amalloy | bbloom: what? of course you can |
| 17:28 | ubun22 | or a design choice |
| 17:29 | bbloom | amalloy: then i have the same question as ubun22 |
| 17:29 | hiredman | you just can't use the shortcut destructuring, which is what most people use all the time |
| 17:29 | amalloy | &(let [{the-value :foo/bar} {:foo/bar 123}] the-value) |
| 17:29 | lazybot | ⇒ 123 |
| 17:29 | ubun22 | ok so no :keys shortcut |
| 17:30 | amalloy | you can destructure maps that have keys of any sort at all |
| 17:30 | hiredman | same thing if you want to do destructuring in nested maps |
| 17:30 | bbloom | amalloy: ah, interesting. i had no idea that existed |
| 17:30 | bbloom | amalloy: i've never seen it (or recall seeing it) in any other code i've read |
| 17:30 | hiredman | ~destructuring |
| 17:30 | clojurebot | destructuring is http://clojure.org/special_forms#let |
| 17:30 | amalloy | bbloom: try macroexpanding a :keys let-clause |
| 17:30 | amalloy | well, i guess that's no good |
| 17:30 | amalloy | try reading hiredman's link :) |
| 17:31 | hiredman | fuh, looks like the website changed |
| 17:31 | hiredman | clojurebot: forget destructuring | is | http://clojure.org/special_forms#let |
| 17:31 | clojurebot | I forgot that destructuring is http://clojure.org/special_forms#let |
| 17:31 | hiredman | ~destructuring |
| 17:31 | clojurebot | Huh? |
| 17:32 | hiredman | clojurebot: destructuring is http://clojure.org/special_forms#binding-forms |
| 17:32 | clojurebot | Ack. Ack. |
| 17:32 | hiredman | ~destructuring |
| 17:32 | clojurebot | destructuring is http://clojure.org/special_forms#binding-forms |
| 17:32 | ubun22 | ,(let [{:keys [item/name]} {:item/name :foo}] item/name) |
| 17:32 | clojurebot | #<CompilerException java.lang.RuntimeException: Can't let qualified name: item/name, compiling:(NO_SOURCE_PATH:0:0)> |
| 17:34 | bbloom | amalloy: thanks |
| 17:34 | hiredman | ,(let [a-a 1 a_a 2] a-a) |
| 17:34 | clojurebot | 1 |
| 17:34 | hiredman | huh |
| 17:34 | hiredman | must be fixed in 1.5 |
| 17:35 | joegallo | how nice for 1.5! |
| 17:36 | amalloy | haha gross |
| 17:36 | Raynes | amalloy: See why we should use 1.5? :p |
| 17:58 | jeremyheiler | hiredman, What were you expecting? |
| 17:58 | cemerick | lynaghk: I have podcasting equipment? :-P |
| 18:08 | keeds | clear |
| 18:08 | auser | wrong window keeds |
| 18:09 | arrdem | anyone here using the Mono build of Clojure care to comment on the unility of CLJ sans JVM/Java ecosystem support? |
| 18:10 | technomancy | it works on mono now? |
| 18:11 | arrdem | is the .net port not mono-compat? |
| 18:11 | technomancy | last I heard it required Windows |
| 18:11 | technomancy | I guess that was a long time ago |
| 18:12 | finishingmove | how would i write the equivalent of return "str1"+"str2"; (javascript example of string concatenation) in a Clojure function? |
| 18:12 | brehaut | ,(str "str1" "str2") |
| 18:12 | arrdem | ,(str "a" "b") |
| 18:12 | clojurebot | "str1str2" |
| 18:12 | clojurebot | "ab" |
| 18:12 | arrdem | HAH |
| 18:13 | brehaut | \o |
| 18:13 | finishingmove | hah cool thanks :D |
| 18:15 | finishingmove | hm, but that returns the hardcoded values |
| 18:15 | finishingmove | or not |
| 18:15 | finishingmove | it's working :) |
| 18:18 | brehaut | fwiw, str is smarter than + in JS; it uses a StringBuilder under the hood for concatenation so you dont need to do the build array, array.join trick |
| 18:18 | ivan | didn't Closure Library's StringBuilder revert to doing + without an array and join? |
| 18:19 | brehaut | ive never looked at clojurescript |
| 18:21 | dnolen | ivan: non-higher usage of str actually compiles to Array.join("") in CLJS |
| 18:23 | arrdem | so an IRL buddy of mine and I keep throwing around this idea for a Lisp micro-runtime OS |
| 18:24 | arrdem | would there be value in giving said lisp Clojure's semantics without JVM or Mono support? |
| 18:24 | technomancy | arrdem: persistent data structures without a world-class GC would be really slow |
| 18:24 | ivan | dnolen: heh, interesting |
| 18:25 | technomancy | arrdem: of course, it's better to be slow and correct than fast and wrong |
| 18:25 | technomancy | but building a good runtime is way more difficult than building a language |
| 18:25 | arrdem | yeah... |
| 18:25 | arrdem | no expectations of speed |
| 18:27 | ivan | man Google Code's code browser is terrible, it won't even give you all of the folders in a folder |
| 18:34 | bbloom | ivan: google's internal processes are so formalized and streamlined that anyone who would be interested in working on any kind of code management system would rather work on internal tools than on the public google code |
| 18:38 | ieure | technomancy, Is there any way to make lein deploy an artifact without signing it? |
| 18:38 | technomancy | sure; :sign-releases false |
| 18:38 | ieure | Awesome, thanks. |
| 18:39 | technomancy | need to make that more obvious probably |
| 18:39 | ieure | technomancy, Yeah, it's not in sample.project.clj. |
| 18:40 | ivan | wondering why lein cljsbuild wasn't building anything... named my file .js instead of .cljs :( |
| 18:49 | ivan | being the kind of fool who learned about the JVM and -XX:+PrintCompilation after Closure Compiler, the JVM will always be a really neat version of advanced_optimizations for me |
| 18:56 | borkdude | did someone read this book? http://pragprog.com/book/mbfpp/functional-programming-patterns-in-scala-and-clojure - seems interesting |
| 18:57 | ivan | ClojureScript's way of macros and function sharing the same name is really cool |
| 18:57 | ivan | which makes ClojureScript macros sort of like Clojure special forms, though no doubt this analogy sucks in some way |
| 18:58 | borkdude | this seems interesting for my target audience: students who know OO and want to try clojure http://pragprog.com/book/mbfpp/functional-programming-patterns-in-scala-and-clojure |
| 19:02 | keeds | borkdude, there is also: https://leanpub.com/fp-oo |
| 19:03 | borkdude | keeds I also have that one |
| 19:09 | ivan | interesting how :optimizations :advanced actually changes what ClojureScript emits |
| 19:15 | tyler__ | can i vote for this to be in core? https://github.com/rplevy/swiss-arrows heh |
| 19:16 | tyler__ | i need more parallel diamond fishing rod in my life |
| 19:16 | tyler__ | heh |
| 19:19 | rlb | Is there a way to get the root tag when using xml->? (i.e. if you have an xml fragment -- doesn't start with <xml></xml>)? |
| 19:20 | rlb | Getting the root attributes is fairly straightforward. |
| 19:21 | rlb | Also, if you're using xml->, is there a way to stop at a given depth, and say "give me everything below here" as a clojure.xml style map (as you would receive from parse)? |
| 19:22 | finishingmove | does anyone know what's the default font LightTable uses? I really like it.. |
| 19:24 | bbloom | finishingmove: try whatthefont.com |
| 19:24 | finishingmove | bbloom, oh cool. didn't know about that |
| 19:27 | NeedMoreDesu | What is the way to do let* ? |
| 19:27 | bbloom | finishingmove: looks like Riccia Light from Hubert Jocham Type Riccia |
| 19:27 | NeedMoreDesu | Ah, sorry. |
| 19:27 | bbloom | finishingmove: http://www.myfonts.com/fonts/hubertjocham/riccia/light/ |
| 19:37 | pandeiro | are people doing clojurescript coding in lighttable? is it possible to build dom and things inside the lighttable node/webkit instance itself? |
| 19:42 | finishingmove | bbloom it doesn't look like the Riccia to me, tbh |
| 19:42 | finishingmove | can't test it since it's a commercial font i don't own |
| 19:42 | bbloom | finishingmove: *shrug* i'm bad at those font identification games |
| 19:42 | finishingmove | ofc, np |
| 19:43 | finishingmove | the website itself is kind of bad, at least from a programmer perspective |
| 19:43 | finishingmove | i mean you'd think they'd at least differentiate between monospaced fonts |
| 19:43 | finishingmove | but they don't have that category at all |
| 19:43 | finishingmove | ._. |
| 19:44 | pandeiro | riccia is very beautiful |
| 19:44 | pandeiro | (the aquatic plant i mean) |
| 19:44 | pandeiro | never heard of the font |
| 19:44 | bbloom | finishingmove: it's presumably for designers |
| 19:57 | squidz | Im having a problem using lazy sequences. I am passing a lazy sequence to my compojure handler, but it is still not evaluated. If for example I wanted a string representation of the sequence. Am I doing something wrong? |
| 20:00 | squidz | I tried calling doseq/doall/dorun on it but the lazy sequence still isnt being realized |
| 20:01 | qbg | Is the Datomic support in core.logic documented anywhere? |
| 20:02 | brehaut | squidz: what do you mean you are passing it to your compojure handler? |
| 20:02 | brehaut | squidz: compojure handlers are just ring handlers; they take requests and return responses |
| 20:02 | brehaut | squidz: do you mean you are wantiung the seq to be the :body of the response? |
| 20:03 | squidz | I have something like (GET "/r" [] (generate-page)) in the generate-page function I am passing a lazy sequence to clostache to use |
| 20:04 | squidz | and I dont know how to get the actual values from that lazy sequence |
| 20:04 | brehaut | that sounds more like a clostache problem than compojure |
| 20:04 | amalloy | hiredman: what's the syntax for teaching clojurebot to use <reply> again? i'm afraid if i experiment with it i'll teach him something i can't unteach |
| 20:05 | brehaut | key is <reply>value or phrase |
| 20:05 | brehaut | (at least, thats what i have pinned behind my monitor) |
| 20:05 | squidz | brehaut: okay, so then is there no way to force evaluation of a lazy seq? |
| 20:06 | brehaut | squidz: of course there are. but it sounds liek something else is gone arwy. i think you'll need to paste up more than that snippet of code to get an answer |
| 20:06 | squidz | okay ill do that |
| 20:08 | Intensity | Hi. I'm wondering: apart from using transients, are there any other key ideas for efficiency out there to build a multidimensional hash map from a seq input? For example, suppose I have a list of strings and I want to put each word into a hash indexed by its first letter or first two letters. |
| 20:09 | squidz | brehaut: okay here are some snippets of what I got https://www.refheap.com/paste/12520 |
| 20:09 | finishingmove | bbloom: it was Inconsolata |
| 20:10 | hiredman | yeah, what brehaut said |
| 20:11 | brehaut | squidz: you arent returning a response |
| 20:12 | brehaut | squidz: https://www.refheap.com/paste/12520#L-21 |
| 20:12 | squidz | how can I return the string representation of transitions-seq |
| 20:12 | brehaut | squidz: https://github.com/ring-clojure/ring/blob/master/SPEC#L93-L120 |
| 20:12 | amalloy | ~helpme |
| 20:12 | clojurebot | A bug report (or other request for help) has three parts: What you did; what you expected to happen; what happened instead. If any of those three are missing, it's awfully hard to help you. |
| 20:13 | brehaut | squidz: https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/util/response.clj#L36-L42 |
| 20:13 | brehaut | squidz: which is to say, instead of (apply str …) you can call (ring.util.response/response …) |
| 20:15 | squidz | brehaut: the sequence still isnt being printed out |
| 20:16 | brehaut | squidz: either ids is nil or has a length of zero then. you are into the wilds of your own code at this point though |
| 20:16 | squidz | okay ill look into it again |
| 20:16 | brehaut | squidz: test your handlers from the repl. its trivial and makes life much easier |
| 20:17 | brehaut | squidz: once you have sorted out this bug, your next task is to go and learn a) what ring is and b) how compojure relates to ring |
| 20:17 | squidz | i do sometimes but the output is sometimes too much for my emacs and id sometimes rather see the rendered html |
| 20:19 | squidz | Also, I was passing content of my sequence inside hiccups (html5 [:body ... which was giving ring what it wanted |
| 20:19 | squidz | I guess it is just my own bug of the sequence being emtpy |
| 20:27 | squidz | brehaut: okay, it seems that my function that was to be called by rings :init option in my project.clj wasnt being called. That function populates an in-memory DB which is why my results were just empty |
| 21:08 | yedi | in typical mvc, the controller is the only thing manipulating state righ? |
| 21:13 | hyPiRion | yedi: yes |
| 22:04 | ubun22 | how do i retrieve a maximum of 10 records from datomic? |
| 22:11 | tyler__ | would the statement "edn is turing complete" be true? |
| 22:11 | tyler__ | ubun22: i believe queries are lazy loaded, so (take 100 query) ? |
| 22:11 | tyler__ | not positive though |
| 22:12 | TimMc | tyler__: No. |
| 22:12 | xeqi | hmm, does edn include data readers? |
| 22:12 | hiredman | yes |
| 22:12 | tyler__ | TimMc: to my statement or my question? |
| 22:12 | TimMc | tyler__: To your question. |
| 22:23 | dobladez | So, Google Reader will be shut down July 1st... Is anybody here using https://github.com/shenfeng/rssminer ? (it's Clojure) |
| 22:29 | tyler__ | dobladez: a buddy of mine entertained the thought of making a SaaS rss reader in 48 hrs and charging 5 bucks a month |
| 22:32 | ivan | heh heh 48 hours |
| 22:34 | scottj | tyler__: why wouldn't people just use newsblur, a saas rss reader that's been developed for years and costs 1 buck a month (for premium account) |
| 22:34 | brehaut | make a feed syncing service and sell it to everyone rushing to make new reader apps in the wake |
| 22:37 | finishingmove | what does this represent |
| 22:37 | finishingmove | :something |
| 22:37 | finishingmove | ? |
| 22:37 | finishingmove | (i'm new) |
| 22:37 | brehaut | finishingmove: it represents :something |
| 22:37 | brehaut | its a keyword |
| 22:37 | igorw | I'm writing an implementation of edn, is there a test suite that I can run against somewhere? |
| 22:38 | finishingmove | so what is the difference between :something and something ? |
| 22:38 | brehaut | something is a symbol |
| 22:38 | brehaut | symbols refer to something else |
| 22:39 | brehaut | keywords always refer to themselves |
| 22:39 | brehaut | keyworlds also happen to implement IFn so they can be used as functions of maps |
| 22:39 | brehaut | http://clojure.org/data_structures#Data%20Structures-Keywords |
| 22:41 | xeqi | igorw: you might be able to port https://github.com/relevance/edn-ruby/blob/master/spec/edn_spec.rb |
| 22:43 | bbloom | brehaut: symbols implement IFN too |
| 22:43 | bbloom | ,('foo '{foo 1}) |
| 22:43 | clojurebot | 1 |
| 22:43 | brehaut | bbloom: huh. |
| 22:43 | igorw | xeqi: that suite seems rather poor, my own is already more advanced at this point. that's why I was hoping for something more generic, that I can at least read, write back and compare. |
| 22:44 | brehaut | bbloom: how long has tht been the case? |
| 22:44 | bbloom | as long as i've been using clojure... |
| 22:44 | bbloom | brehaut: finishingmove: keywords are guarenteed to be unique, so identical? works & is fast. however, this means that symbols can have meta data, but keywords cannot |
| 22:44 | brehaut | its not exactly surprising given keywords are kinda special symbols |
| 22:44 | tyler__ | what *is* an IFN? i see it all the time but haven't quite groked it fully yet |
| 22:45 | tyler__ | i just assumed it was a function |
| 22:45 | bbloom | tyler__: Fn is for functions, IFn is for things that are callable |
| 22:45 | brehaut | IFn is the interface you implement to make a type callable |
| 22:45 | tyler__ | ah |
| 22:45 | bbloom | ,(map (juxt fn? ifn?) [inc :inc]) |
| 22:45 | clojurebot | ([true true] [false true]) |
| 22:46 | tyler__ | so keywords are ifn but not fn |
| 22:46 | tyler__ | if i read that right |
| 22:46 | bbloom | tyler__: yes |
| 22:47 | tyler__ | what does clojure "do" when you call a symbol? |
| 22:47 | bbloom | tyler__: Fn is just a marker interface (protocol in CLJS), IFn is the real interface that might as well be called ICallable |
| 22:47 | bbloom | tyler__: the same thing it does when you call anything: execute the .invoke method of the IFn interface |
| 22:47 | tyler__ | whats the "i" stand for? |
| 22:47 | bbloom | tyler__: Interface (or protocol, lol) |
| 22:48 | tyler__ | bbloom: whats in the invoke method of a symbol? |
| 22:48 | bbloom | tyler__: don't be shy: read the source! https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Symbol.java#L126-L132 |
| 22:48 | tyler__ | omg |
| 22:48 | tyler__ | im so scared ;) |
| 22:49 | brehaut | the source for clojure is pretty reasonable (except the whitesmith formating style ;) |
| 22:49 | bbloom | tyler__: clojure's source is quite aprochable, if a bit... um... non-idiomatic java |
| 22:49 | bbloom | brehaut: lol oh yeah, :set nolist |
| 22:49 | bbloom | brehaut: :set nolist sooo hard |
| 22:49 | tyler__ | oh wow |
| 22:49 | brehaut | bbloom: ? |
| 22:49 | tyler__ | that is some clean code |
| 22:50 | bbloom | brehaut: vim-ism for disable showing of whitespace |
| 22:50 | cgag | note that the .invoke method gets called when you do ('foo <args>) not (foo args) |
| 22:50 | brehaut | aha |
| 22:50 | tyler__ | i have a feeling its only non-idomatic java because theres not enough clojure people writing java ;) |
| 22:51 | brehaut | bbloom: so symbols got invoke in june of 2008, so i have no excuse other than perhaps clojure.org was still out of date in october of 2008 |
| 22:51 | bbloom | heh |
| 22:53 | tyler__ | not sure what RT is assuming its in java.io.Serializable or java.io.ObjectStreamException, my java-fu is kinda weak |
| 22:53 | bbloom | tyler__: the first thing you need to know about non-IDE based java-fu is that class names match file names |
| 22:53 | tyler__ | ah |
| 22:53 | bbloom | tyler__: go to github, press "t" to open the fuzzy finder, and type "rt.java" |
| 22:54 | brehaut | RT = Run Time |
| 22:54 | bbloom | brehaut: entertainingly, RT.java does not mention that |
| 22:55 | brehaut | huh |
| 22:55 | brehaut | clojure's java code is not exactly overflowing with comments :P |
| 22:55 | brehaut | (except of course commented out code) |
| 22:55 | bbloom | lol |
| 22:56 | bbloom | clojure's code base and popularity has jointly reminded me of the value of GETTING SHIT DONE |
| 22:56 | brehaut | haha |
| 22:56 | bbloom | it's not BAD code |
| 22:56 | bbloom | it's just GOOD ENOUGH code |
| 22:56 | brehaut | certainly |
| 22:57 | brehaut | its also surprisingly approachable |
| 22:57 | cgag | what keeps it from being good code? |
| 22:57 | bbloom | it's only not really approachable in a few parts that only really exist only in the code generation phase |
| 22:57 | brehaut | cgag: http://this-plt-life.tumblr.com/post/44333853864/when-i-look-at-a-pls-implementation |
| 22:58 | bbloom | cgag: i feel like good code at least has consistent whitespace lol |
| 22:58 | tyler__ | ,('foo ["bar" 'foo]) |
| 22:58 | clojurebot | nil |
| 22:58 | tyler__ | meh |
| 22:58 | brehaut | tyler__: vectors have int keys |
| 22:58 | bbloom | tyler__: ##(1 ["bar" 'foo]) |
| 22:58 | lazybot | java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn |
| 22:58 | bbloom | tyler__: ##(["bar" 'foo] 1) |
| 22:58 | lazybot | ⇒ foo |
| 22:58 | tyler__ | ,('0 ["bar" "foo"]) |
| 22:59 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn> |
| 22:59 | tyler__ | ah '0 isn't a symbol |
| 22:59 | tyler__ | is that a correct statement? |
| 22:59 | brehaut | correct |
| 22:59 | bbloom | ,(symbol? 0) |
| 22:59 | clojurebot | false |
| 23:00 | bbloom | ,(= 'foo ''foo) |
| 23:00 | clojurebot | false |
| 23:00 | brehaut | tyler__: its a quoted long |
| 23:00 | bbloom | ,(= '0 ''0) |
| 23:00 | clojurebot | false |
| 23:00 | bbloom | ,(= 0 '0) |
| 23:00 | clojurebot | true |
| 23:00 | bbloom | tyler__: it's subtle :-) see ^ |
| 23:00 | tyler__ | i still haven't really grokked what the difference is between quoted things and unquoted things |
| 23:00 | tyler__ | or double quoted things heh |
| 23:00 | tyler__ | don't even think ive seen that before |
| 23:01 | jeremyheiler | ,'0 |
| 23:01 | clojurebot | 0 |
| 23:01 | jeremyheiler | ,''0 |
| 23:01 | clojurebot | (quote 0) |
| 23:01 | jeremyheiler | heh |
| 23:01 | bbloom | ,'''''''''''''''0 |
| 23:01 | clojurebot | (quote (quote (quote (quote (quote (quote (quote (quote (quote (quote #)))))))))) |
| 23:01 | jeremyheiler | ahhh |
| 23:01 | bbloom | ,'''''0 |
| 23:01 | clojurebot | (quote (quote (quote (quote 0)))) |
| 23:01 | brehaut | tyler__: quoted things are only really useful for lists and symbols (or other collectiosn containing lists or symbols) |
| 23:01 | brehaut | tyler__: when you want the list or the symbol itself rather than the value of the expression the list represents or the thing the symbol refers to |
| 23:02 | bbloom | tyler__: in the lisps of yore, quoted things were symbols or trees made out of lists and symbols |
| 23:02 | tyler__ | i thought they were used to escape stuff |
| 23:02 | tyler__ | like in datomics query syntax |
| 23:02 | bbloom | tyler__: now they are symbols or numbers or strings or integers or some other primtives.... or trees of those plus composites like lists, vectors, maps, etc |
| 23:02 | tyler__ | '[:find ?foo :where [?e :bar ?foo]] |
| 23:02 | bbloom | tyler__: quoting basically says "disable evaluation, treat the following as data" |
| 23:02 | tyler__ | like a macro? |
| 23:02 | bbloom | no |
| 23:02 | tyler__ | or bad analogy? |
| 23:02 | tyler__ | ok |
| 23:03 | brehaut | tyler__: so datomic wants the symbols ?foo and ?e rahter than the value they may point refer to |
| 23:03 | bbloom | tyler__: well maybe.... |
| 23:03 | bbloom | tyler__: macros are functions that quote their arguments |
| 23:03 | bbloom | tyler__: and also return quoted values that expand as if unquoted |
| 23:04 | tyler__ | so macros use quotes *because* of their ability to disable evalution and treat as data? |
| 23:04 | danneu | tyler__: (1 2) will give you error "cannot cast 1 to function" because clojure is trying to expand 1 as though it's a symbol. so '(1 2) is saying not to evaluate it. you're 'escaping it' from evaluation. |
| 23:05 | tyler__ | danneu: thnx |
| 23:06 | cgag | i've been to chicago, i know how to spell "chicago" |
| 23:07 | yunfan | hi,guys, i want you to recomment a rss parser for me, since GR would be shutdown sonner and i am a heavy user of them, i need to make my own |
| 23:07 | tyler__ | so does `[]` cause evalution? still haven't grokked what gets evaluted yet |
| 23:07 | tyler__ | yunfan: blurnews |
| 23:07 | bbloom | tyler__: everything is evaluated except forms marked by ' and ` |
| 23:07 | tyler__ | newsblur rather |
| 23:07 | yunfan | tyler__: what is blurnews ? an alternative service? |
| 23:07 | tyler__ | damn dyslexia |
| 23:08 | bbloom | tyler__: you can think of [1 2 3] as (vector 1 2 3) |
| 23:08 | tyler__ | yunfan: yeah its kinda slammed right now though because everyone is going there since google reader is closing |
| 23:08 | tyler__ | bbloom: aaaaaaaaah lightbulb |
| 23:09 | yunfan | tyler__: is it just yet another GR or it has some enhancement? |
| 23:09 | danneu | ,(= [] (vector)) |
| 23:09 | clojurebot | true |
| 23:09 | tyler__ | yunfan: not really sure i don't really use it, its just what everyone is talking about |
| 23:10 | yunfan | tyler__: ok ,i will have a try, but GR really make me a lesson, i need to roll my own |
| 23:11 | yunfan | back to my question, didnt there a rss parser for cloujure? |
| 23:11 | tyler__ | https://github.com/scsibug/feedparser-clj |
| 23:11 | cgag | maybe rssminer? |
| 23:11 | tyler__ | not sure if thats good |
| 23:11 | tyler__ | first result googling rss clojure |
| 23:11 | tyler__ | heh |
| 23:12 | danneu | clojure is making it hard to focus at my ruby dayjob |
| 23:13 | tyler__ | i personally like a vanilla xml parser but thats just me |
| 23:13 | yunfan | well i need really efficient one, i have built a rss spider for my ex-company using python, the library is toooo slow |
| 23:13 | tyler__ | danneu: i started a movement to convert our ruby code to clojure ;) |
| 23:13 | ToxicFrog | I'm starting to get my feet wet with Android + Clojure, hoping I can come up with a fun Clojure project for my 20% time. |
| 23:13 | tyler__ | ToxicFrog: ive been thinking about attempting that |
| 23:13 | ToxicFrog | Based on my experimentation, though, I'm not sure Android meets the "fun" requirement~ |
| 23:13 | yunfan | danneu: me too, when i wrote my python code, i just think if could be written shortly in cloujure |
| 23:14 | ToxicFrog | In any case, though, I'll be writing up the results once I actually get stuff running. |
| 23:14 | tyler__ | ToxicFrog: i would read it |
| 23:14 | tyler__ | :) |
| 23:14 | ToxicFrog | I'll post it in here when it's done, then! |
| 23:14 | danneu | yunfan: yeah, 'unnecessary complexity' describes a lot of the codebases i work in. |
| 23:15 | tyler__ | OO has a way of turns things to shite. not sure if jaded or just truth |
| 23:16 | tyler__ | turning* |
| 23:16 | arrdem | I mean... OO can be done right |
| 23:16 | danneu | i don't think it's OO |
| 23:16 | arrdem | it just doesn't largely lead to code reuse |
| 23:16 | tyler__ | "can be" heh |
| 23:16 | arrdem | which was its main goal |
| 23:16 | tyler__ | ironic |
| 23:16 | arrdem | I mean you can model yourself into a corner happily |
| 23:17 | arrdem | then realize your data is too fragmented to do anything |
| 23:17 | arrdem | the trick is devising the data model that suits your problem, which may involve an object hierarchy |
| 23:18 | danneu | nah, i'm reading |
| 23:18 | tyler__ | arrdem: devising the data model *is* really the tricky part |
| 23:18 | arrdem | okay so tell me I'm wrong or something... |
| 23:18 | arrdem | tyler__: ^^ that. |
| 23:19 | arrdem | which is why I like Clojure's "map" pseudotypes |
| 23:19 | danneu | i think OO is hard. OO design is not trivial. what objects should i make? what should i put in them? it's too easy to get stuck designing something that should just be an array of hashmaps. i like clojure because it forces immutability and simplicity. |
| 23:19 | arrdem | and MongoDB |
| 23:19 | tyler__ | even in clojure with datomic you still have to figure out how to model your data so it all fits together |
| 23:20 | tyler__ | although its easier |
| 23:20 | yunfan | i like py's list comprehension, and i like to use the sideeffect of it, but the community avoid this |
| 23:20 | brehaut | theres no silver bullet, news at 11 |
| 23:20 | tyler__ | lol |
| 23:20 | arrdem | so you (ab)use mongo until the dust settles, and then transition. |
| 23:20 | arrdem | brehaut: lemme dig that essay back out.. |
| 23:21 | arrdem | brehaut: SO IT IS WRITTEN https://en.wikipedia.org/wiki/No_Silver_Bullet |
| 23:21 | tyler__ | danneu: "it's too easy to get stuck designing something that should just be an array of hashmaps" man i so feel you there. especially with coworkers who want to create classes for *everything* |
| 23:22 | arrdem | ~bullet |
| 23:22 | clojurebot | magic bullet is http://www.infomercialcentral.com/store/files/images/d_77.jpg |
| 23:22 | arrdem | wut |
| 23:22 | brehaut | ~botsnack |
| 23:22 | clojurebot | thanks; that was delicious. (nom nom nom) |
| 23:22 | tyler__ | https://en.wikipedia.org/wiki/No_Silver_Bullet was written before the creation of clojure |
| 23:23 | tyler__ | he didn't know any better |
| 23:23 | tyler__ | ;) |
| 23:23 | arrdem | haha I think he's still right... |
| 23:23 | tyler__ | "Brooks makes a distinction between accidental complexity and essential complexity," |
| 23:23 | arrdem | Clojure solves a lot of issues but doesn't fix the fundimental one that humans suck at software engineering |
| 23:23 | tyler__ | i think rich addresses that in "simple made easy" |
| 23:24 | arrdem | tyler__: lunk? |
| 23:24 | tyler__ | http://www.infoq.com/presentations/Simple-Made-Easy |
| 23:25 | bbloom | arrdem: we suck at more than just software engineering: we suck at both generalization AND specialization :-) |
| 23:25 | tyler__ | lol |
| 23:26 | arrdem | haha |
| 23:26 | arrdem | (inc bbloom ) |
| 23:26 | lazybot | ⇒ 1 |
| 23:26 | arrdem | wat |
| 23:26 | bbloom | arrdem: apparently string/trim error, try again :-P |
| 23:26 | arrdem | ,(doseq [x (range 3)] (println "(inc bbloom)")) |
| 23:26 | clojurebot | (inc bbloom)\n(inc bbloom)\n(inc bbloom)\n |
| 23:27 | arrdem | damnit |
| 23:27 | arrdem | always wanted to try that one |
| 23:27 | arrdem | (inc bbloom) |
| 23:27 | lazybot | ⇒ 7 |
| 23:27 | arrdem | that's retarded |
| 23:27 | bbloom | hurray! still prime! |
| 23:27 | arrdem | someone fix the lazy as shit bot |
| 23:27 | brehaut | arrdem: patches are accepted |
| 23:27 | yunfan | 62;9;cnewsblur seems down when i friends checking it |
| 23:28 | arrdem | brehaut: I didn't say I would... |
| 23:28 | arrdem | XP |
| 23:28 | yunfan | huge user are comming i think |
| 23:28 | bbloom | yunfan: Google's "not enough interest/traction to justify" is a startups "OMG THE SERVERS ARE ON FIRE" |
| 23:29 | danneu | arrdem: re "humans sucks at software engineering" <-- which is why i think it's smart to reduce the paths for making code unreadable to other developers. |
| 23:29 | yunfan | bbloom: yes, i used want to roll my own enhancement for GR, but since it could use those years, i just give up, now , it cut down my backway |
| 23:29 | arrdem | oh. my. god. M-x google-this |
| 23:30 | arrdem | emacs... you have outdone yourself |
| 23:30 | ivan | do Google employees not use Reader every day? |
| 23:30 | bbloom | ivan: i can only assume the internal uproar is hilarious |
| 23:32 | ivan | hopefully I will not have to spend a lot of time backing up all of their feed archives |
| 23:36 | technomancy | isn't it more "we want people using G+" rather than "not enough interest"? |
| 23:39 | TimMc | technomancy: I feel like there's a Hanlon's Razor variant in here somewhere. |
| 23:39 | TimMc | "Assume marketing rather than incompetence", perhaps? |
| 23:39 | ivan | http://googlesystem.blogspot.com/2012/12/google-reader-constantly-on-chopping.html |
| 23:41 | brehaut | TimMc: i like it |
| 23:41 | TimMc | It can be very hard to tell the difference, after all. |
| 23:43 | danneu | Is there a way to get 'lein repl' to autorequire some namespaces? |
| 23:44 | bbloom | danneu: see sample.clj in the lein codebase, you can add code or files to be evaled in your profile |
| 23:47 | tyler__ | the lein samples are really nice and fleshed out |
| 23:59 | arrdem | danneu: okay great. now we have Lisp and our incompatible languages are only regular transforms away. still unreadable. |