2014-03-18
| 00:00 | yuri_niyazov | But i am not sure how to to capture the result of doing a transient operation so that it's available in a subsequent execution of doseq body |
| 00:01 | amalloy | yuri_niyazov: you can't. you need to use some construct other than doseq if you want to pass results around |
| 00:01 | yuri_niyazov | maybe I can explain this better with some simpler code |
| 00:02 | yuri_niyazov | (doseq [:let [result (transient {})] a (range 1 10)] (assoc! result a (rand))) |
| 00:03 | yuri_niyazov | except that it doesn't work, because I have to use the result of the (assoc!) subsequently |
| 00:04 | amalloy | right. you need to use reduce, or loop, or recursion: something that lets you carry around state |
| 00:04 | amalloy | i also find it hard to believe you need a transient rather than just an ordinary persistent collection |
| 00:06 | yuri_niyazov | Yes, that part has been confirmed by profiling |
| 00:06 | yuri_niyazov | ah |
| 00:06 | yuri_niyazov | well, wtih-local-vars will work |
| 00:08 | amalloy | the only person in the world with enough expertise to use with-local-vars is rich hickey. if you want to mutate state, you have atoms |
| 00:09 | yuri_niyazov | Thank you for your input. |
| 00:14 | Raynes | ivan, amalloy: Oh. Shit. |
| 00:14 | ivan | :-) |
| 00:14 | Raynes | So that explains the crazy paste inflation. |
| 00:14 | Raynes | I'm incredibly dumb. |
| 00:15 | Raynes | I'll fix this soon. |
| 00:15 | Raynes | Not much I can do about the pastes though. |
| 00:15 | Raynes | I could delete anonymous forks, but that seems rather intrusive. |
| 00:16 | ivan | btw, crawlers will ignore robots.txt, don't rely on that |
| 00:23 | danielszmulewicz | Hi everyone! It's been bugging me for a while, but never was so important as to bother. But here it is: How do I redirect stdout for the jetty adapter? It prints messages in my terminal where I run the repl, I would like to redirect it to a file with the bulk of my logging (with the timbre library). |
| 00:26 | beamso | https://wiki.eclipse.org/Jetty/Feature/Jetty_Logging |
| 00:26 | beamso | it looks like either a jetty-logging.properties or a system property can configure jetty logging |
| 00:27 | danielszmulewicz | beamso: Awesome. Thanks. |
| 00:27 | danielszmulewicz | (inc beamso) |
| 00:27 | lazybot | ⇒ 1 |
| 00:27 | beamso | woohoo! |
| 00:27 | danielszmulewicz | :-) |
| 00:44 | yuri_niyazov | Why is calling var-set slower than mutating an atom? |
| 01:13 | vimuser21 | whaa lol been wondering why my new code hasn't been woring, is there a way to remove a multi method? |
| 01:14 | vimuser21 | saw some stuff that removes all symbols from the current name space…seems overkill |
| 01:16 | vimuser21 | ah , google served me well, (ns-unmap *ns* 'multimethod) |
| 01:54 | chare | I need this book: https://leanpub.com/fp-oo |
| 01:54 | chare | someone buy me a copy please |
| 01:59 | sdegutis | chare: ok |
| 01:59 | chare | sdegutis you lying to me? |
| 01:59 | sdegutis | chare: I trust you'll do the right thing |
| 01:59 | sdegutis | chare: you've got good in you |
| 01:59 | chare | I don't understand what you mean by that |
| 02:42 | irctc | I have a vector of boolean values, as [true false true false] in a map, {:id 1 :alias "asd" :values [true false true false]}. Now I want to insert his record into postgres database, where values column is postgres array datatype. How can I do this task making a single query? can anyone help? |
| 02:46 | irctc | ? |
| 02:46 | beamso | i would have no idea |
| 02:46 | beamso | have you tried doing it from java to give you an idea of what you have to do in clojure? |
| 02:50 | beamso | further reading tells me that you have to create the postgresql array using the classes in the driver jar |
| 03:05 | daniel_karlsson | I'm building a json api with liberator, and now looking around for tips on testing. Is Midje the way to go? Or any tips pointers to projects docs on the subject? |
| 03:06 | beamso | i just use the standard testing api :/ |
| 03:07 | daniel_karlsson | that is what I have been playing with so far |
| 04:15 | augustl | daniel_karlsson: I prefer clojure.test, not a big fan of the midje infix stuff |
| 07:38 | jcromartie | gooooooooood morning |
| 07:39 | beamso | good evening |
| 07:40 | jcromartie | that's not how IRC time works |
| 07:40 | beamso | it's evening for me |
| 07:40 | jcromartie | http://thinkmoult.com/ugt.html |
| 07:42 | beamso | in all my years of irc i've never seen that before |
| 07:42 | jcromartie | maybe I'm the only one who has :) |
| 07:48 | clgv | ugt is useless anyway ;) |
| 07:48 | jcromartie | yeah really it is |
| 07:52 | aaronj1335 | TIL how to render the proper greeting of the day on irc. thnx jcromartie |
| 07:52 | aaronj1335 | it's like being back in the military again |
| 07:54 | jcromartie | I just thought it was "good morning" when you arrive, and "good night" when you leave anyway. No need to get too formal. |
| 07:58 | augustl | jcromartie: didn't know about ugt, thanks for the link :) |
| 08:00 | clgv | jcromartie: well you started noise with referencing a convention to avoid noise :P - but it's not as we were having a focused discussion in here anyway ;) |
| 08:01 | jcromartie | http://xkcd.com/ |
| 08:01 | jcromartie | timely |
| 08:01 | jcromartie | UGT being a convention falling on the right-hand side :) |
| 08:12 | jph- | anyone else find it easier to write code inside out than outside in (ie thread-first) |
| 08:14 | jcromartie | jph-: certainly, I use -> all the time |
| 08:14 | mercwithamouth | yup |
| 08:14 | jcromartie | let also helps |
| 08:14 | jph- | im trying to use -> but it hurts my brain |
| 08:14 | jph- | heh |
| 08:14 | jph- | for all but simple examples |
| 08:18 | simon__ | Hello! Im doing clojure koans, and I have a question about "Iteration can be used for repetition" |
| 08:18 | simon__ | (take 2 (iterate (fn [x] x) :foo)) |
| 08:18 | simon__ | => (:foo :foo) |
| 08:18 | simon__ | Ofc |
| 08:18 | simon__ | But |
| 08:18 | simon__ | user=> (take 2 (iterate #(%) :foo)) |
| 08:18 | simon__ | IllegalArgumentException Wrong number of args passed to keyword: :foo clojure.lang.Keyword.throwArity (Keyword.java:92) |
| 08:19 | simon__ | I dont understand, why wont my second shorthand anonymus function work when the first does? |
| 08:19 | jcromartie | #(%) returns a function will call its argument as a function |
| 08:19 | jcromartie | ,(#(%) #(println "hi")) |
| 08:19 | clojurebot | hi\n |
| 08:19 | jph- | any tips for debugging ssl cert issues from clojure or do i need to dip into java for that? |
| 08:19 | jph- | sun.security.validator.ValidatorException: PKIX path building failed: sun |
| 08:19 | jcromartie | jph-: you need to add the cert to a truststore |
| 08:20 | jcromartie | jph-: I've just dealt with this |
| 08:20 | jph- | jcromartie, it's peculiar... my browser works fine |
| 08:20 | jph- | or maybe it's owned too |
| 08:20 | simon__ | jcromartie: ah, ok. |
| 08:20 | jph- | ! |
| 08:20 | simon__ | Thanks. |
| 08:21 | jph- | why would by jdk 7 have an outdated trust store |
| 08:21 | jph- | hrmm |
| 08:21 | jph- | i've also dealt with this before.. it just seems peculiar |
| 08:21 | jph- | i'll hunt down the relevant stack overflow or bookmark |
| 08:22 | jcromartie | jph-: did you switch JDKs? |
| 08:22 | jph- | jcromartie, not to my knowledge |
| 08:23 | bore | Hello, a quick question. Is there a way to check if a string is valid EDN other than trying to read it and catching the exception? |
| 08:23 | jcromartie | jph-: what I'm asking is: did you connect to this host before? did anything change? |
| 08:23 | jcromartie | jph-: or is this failure happening the first time you've ever tried to connect to this host |
| 08:23 | jph- | i'm well versed in troubleshooting (used to do firewalls) so that's why im scratching my head |
| 08:23 | jph- | maybe something i did triggered something else |
| 08:24 | jph- | i'll have to poke around |
| 08:24 | jcromartie | jph-: there are certs that your browser trusts that the JVM does not |
| 08:24 | jph- | im connecting to https://btc-e.com/api/2/btc_usd/ticker which is fine in browser but is breaking in http-kit |
| 08:24 | jph- | i have sun jdk 7 |
| 08:24 | jph- | i've got several things to check |
| 08:25 | jph- | heh |
| 08:25 | jph- | its a godaddy cert |
| 08:25 | jph- | so i need to see if that specific CA is also in jdk certstore |
| 08:27 | jcromartie | this cert is trusted in my OS X default JVM (1.6.0) |
| 08:27 | beamso | i'm using java 1.7 and it failed |
| 08:27 | clgv | jcromartie: how do you check this? |
| 08:28 | jcromartie | keytool -list -keystore /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts | grep '47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B' |
| 08:28 | clgv | jcromartie: I mean without trying to programmatically connect? |
| 08:28 | beamso | ,(slurp "https://btc-e.com/api/2/btc_usd/ticker") |
| 08:28 | clojurebot | #<SecurityException java.lang.SecurityException: denied> |
| 08:28 | jph- | hehe |
| 08:28 | clgv | ah there it is^^ |
| 08:28 | jph- | yay its not just me |
| 08:28 | clgv | no the bot probably does not allow socket connections |
| 08:28 | jph- | oh |
| 08:28 | jph- | yes my bad |
| 08:28 | jph- | clojail |
| 08:29 | beamso | i did get the SSLHandshakeException in a local repl using the same s-expression |
| 08:29 | clgv | ,(slurp "http://www.heise.de") |
| 08:29 | clojurebot | #<SecurityException java.lang.SecurityException: denied> |
| 08:29 | clgv | ^^ |
| 08:30 | jph- | in linux /usr/lib/jvm/java-7-oracle/bin/keytool -list -keystore /usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts |
| 08:30 | jph- | (ubuntu) |
| 08:30 | jcromartie | it's gone from 1.7 |
| 08:30 | jcromartie | $ keytool -list -keystore /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/lib/security/cacerts | grep '47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B' |
| 08:30 | jcromartie | nothing |
| 08:30 | jph- | interesting |
| 08:30 | jcromartie | oh wait |
| 08:31 | beamso | that's an old jdk |
| 08:31 | jcromartie | yeah it's gone (sorry wrong command before, but verified this time) |
| 08:31 | jcromartie | I'm running 1.7.0_17 on OS X |
| 08:31 | jcromartie | this is a dev machine for a stuffy institution :) |
| 08:31 | jph- | "it's an older code, but it's valid" (star wars) |
| 08:32 | jcromartie | but seeing as the cert is there in 1.6 but gone in 1.7 |
| 08:32 | jph- | i wonder if there's a changelog for why these are removed |
| 08:32 | jph- | maybe it was compromised |
| 08:32 | jcromartie | maybe somebody just doesn't like GoDaddy :) I wouldn't blame them |
| 08:33 | jph- | i wish i could copy/paste from firefox view cert |
| 08:33 | jph- | the fingerprint itself |
| 08:33 | clgv | jph-: you can easily use an application specific truststore |
| 08:34 | jph- | clgv, oh i know that, i'm more curious about the WHY right now |
| 08:34 | clgv | that way you could also use self-signed certs for your own services |
| 08:34 | jph- | since i want to do some transactional stuff over that API, and bad ssl certs make me nervous |
| 08:34 | beamso | jph-: http://notes.richdougherty.com/2013/09/adding-godaddy-g2-root-cert-to-jdk-7.html |
| 08:35 | jph- | beamso, awesome |
| 08:35 | jph- | how do i inc again |
| 08:35 | jph- | (inc beamso) |
| 08:35 | lazybot | ⇒ 2 |
| 08:35 | beamso | there is a godaddy cert listed in my jdk but it wasn't the root one for that website |
| 08:35 | beamso | woohoo! |
| 08:36 | jcromartie | but I thought you were interested in the why? ;) |
| 08:36 | jph- | im still interested in the why :) |
| 08:36 | clgv | me too :P |
| 08:36 | jph- | but the fact it's a known issue gives me a little more confidence |
| 08:36 | jph- | ie it didnt just happen overnight |
| 08:37 | jcromartie | so meanwhile |
| 08:37 | jcromartie | developing Atlassian plugins in Clojure? |
| 08:37 | jcromartie | because I want to add 10s to my Atlassian app startup time |
| 08:38 | jcromartie | I'd really like a REPL in my JIRA |
| 08:39 | jcromartie | and JIRA in my REPL |
| 08:39 | jcromartie | http://img3.wikia.nocookie.net/__cb20110112210935/familyguy/images/5/5e/Reeces1.png |
| 08:41 | sid_ | I have a noir session that contains :user-id in {:noir {:user {:pass $2a$10$BHASD1221asD.AsdasdWWAASDQOLfqsE.PPfOtKrt32szyEmrW, :last_name nil, :first_name nil, :id sid}, :user-id sid}} . How can I retrieve the value of this key in ajax call? |
| 08:42 | hyPiRion | what do you mean by "this key"? |
| 08:43 | jph- | sid_, have a compojure route that replies with (session/get :user-id) |
| 08:43 | jph- | but the ajax caller would have to be authenticated |
| 08:43 | jph- | since it's session/cookie based |
| 08:44 | sid_ | jph_, I'll try and reply if it works |
| 08:44 | jph- | sid_, you could also call {{ user-id }} in a selmer template |
| 08:45 | jph- | or whatever templatingyour using |
| 08:45 | sid_ | jph_, I'm using selmer, but I have to make the get call in js file |
| 08:45 | jph- | its more about where you want to use :user-id |
| 08:46 | jph- | are you using luminus? |
| 08:46 | sid_ | jph_, yes, I'm using luminus |
| 08:46 | jph- | ie |
| 08:46 | jph- | in app/views/layout.clj |
| 08:46 | jph- | i have |
| 08:46 | jph- | :username (session/get :username)) |
| 08:46 | jph- | in my (assoc params ...) |
| 08:47 | jph- | so in my selmer templates |
| 08:47 | jph- | i can now use {{ username }} |
| 08:47 | sid_ | yes, I made :user-id in app/views/layout.clj |
| 08:47 | jph- | so the var is visible in templates |
| 08:47 | jph- | if you purely want it in an ajax call |
| 08:47 | sid_ | but can I directly use {{user-id}} in my js file? |
| 08:47 | jph- | it'd be somethin glike |
| 08:47 | jph- | (GET "/ajax/user-id" [] (session/get :user-id)) |
| 08:48 | jph- | in your defroutes |
| 08:48 | jph- | somewhere |
| 08:48 | sid_ | I've used selmer tags in static html pages |
| 08:48 | jph- | so your js ajax call requests /ajax/user-id to get the user-id |
| 08:49 | sid_ | thanks jph_, I''ll try it |
| 08:50 | jph- | good luck |
| 08:51 | sid_ | :) |
| 08:55 | jph- | "GoDaddy has not added their newer G2 CA server to the default java truststore - causing default java installations to not trust it's authority, and hence, does not trust your chained certificate." |
| 08:55 | jph- | h (session/get :user-id) |
| 08:55 | jph- | <jph-> but the ajax caller would have to be authenti |
| 08:55 | jph- | woops |
| 08:55 | jph- | https://stackoverflow.com/questions/18746565/godaddy-ssl-cert-not-working-with-java |
| 09:10 | xsyn | how do I get the first record that appears in an incanter set for all records? |
| 09:11 | xsyn | so if I have duplicates, I just want all of the first ones? |
| 09:23 | clgv | xsyn: (-> ds :rows distinct) |
| 09:23 | noidi | I wrote a blog post showcasing some cool REPL tools: http://dev.solita.fi/2014/03/18/pimp-my-repl.html |
| 09:32 | _bart | Freesound.org is so unstable right now, continuously on- and offline. |
| 09:32 | _bart | (using it with Overtone) |
| 09:36 | xsyn | clgv: thanks will give it a try |
| 09:38 | AeroNotix | best way to deploy an uberjar to archiva or w/e? |
| 09:38 | AeroNotix | I've seen lein deploy-uberjar, looking for alternatives. |
| 09:38 | mdrogalis | AeroNotix: Archiva's not meant to be used with uberjars, just jars. |
| 09:38 | AeroNotix | mdrogalis: I understand this, obviously. |
| 09:39 | mdrogalis | AeroNotix: Not obvious to me. :P |
| 09:42 | mpenet | AeroNotix: you can use lein deploy and pass the .jar + pom as arguments |
| 09:42 | clgv | AeroNotix: you could create the pom for the normal lib and modify it for the uberjar and then upload both manually via the webui - provided you are sure you actually need it there |
| 09:43 | AeroNotix | clgv: it's just a nice way to deploy to boxen |
| 09:43 | mpenet | AeroNotix: see lein help deploy |
| 09:43 | AeroNotix | mpenet: cheers |
| 09:45 | clgv | mpenet: awesome |
| 10:13 | mskoud | Looking to the functional way of adding new items to a map like this: {:a 2 :b "test" ...} => {:a 2 :a_x "y" :b "test :b_x "test2" ...} |
| 10:14 | jcromartie | ,(assoc {:a 2 :b "test"} :a_x "y") |
| 10:14 | clojurebot | {:a_x "y", :a 2, :b "test"} |
| 10:14 | jcromartie | ,(assoc {:a 2 :b "test"} :a_x "y" :b_x "test2") |
| 10:14 | clojurebot | {:b_x "test2", :a_x "y", :a 2, :b "test"} |
| 10:14 | jcromartie | ,(merge {:a 2 :b "test"} {:a_x "y" :b_x "test2"}) |
| 10:14 | clojurebot | {:a_x "y", :b_x "test2", :a 2, :b "test"} |
| 10:15 | mskoud | i need to add a new key ?_x for all existing keys. |
| 10:15 | jcromartie | how are you going to derive the values? |
| 10:15 | jcromartie | that's easy enough BTW |
| 10:16 | mskoud | a function will return the modified value. |
| 10:17 | jph- | anything i could use for queueing (fifo) functions? i can do a max of 4/sec |
| 10:17 | jcromartie | ,(let [m {:a 2 :b "test"} f #(str % "_2")] (merge m (into {} (map (fn [[k v]] [(keyword (name k) "_x") (f v)]) m))) |
| 10:17 | clojurebot | #<RuntimeException java.lang.RuntimeException: EOF while reading> |
| 10:18 | jcromartie | more like |
| 10:18 | jcromartie | ,(let [m {:a 2 :b "test"} f #(str % "_2")] (merge m (into {} (map (fn [[k v]] [(keyword (str (name k) "_x")) (f v)]) m)))) |
| 10:18 | clojurebot | {:b_x "test_2", :a_x "2_2", :a 2, :b "test"} |
| 10:18 | mskoud | Thanks! |
| 10:19 | jcromartie | into tends to be a handy tool when transforming collections |
| 10:19 | jcromartie | actually |
| 10:19 | jcromartie | ,(let [m {:a 2 :b "test"} f #(str % "_2")] (into m (map (fn [[k v]] [(keyword (str (name k) "_x")) (f v)]) m))) |
| 10:19 | clojurebot | {:a 2, :b "test", :a_x "2_2", :b_x "test_2"} |
| 10:19 | jcromartie | just skip the merge |
| 10:20 | pjstadig | i want to set the filePermissions element as described here https://github.com/jcaddel/maven-s3-wagon/wiki/Permissions which says to set it in ~/.m2/settings.xml, but i want to set it in my project.clj |
| 10:20 | pjstadig | is that possible? |
| 10:24 | mskoud | works like a charm. any good references to articles learning this style of programming. |
| 10:40 | jstew | mskoud: Are you new to functional programming? |
| 10:40 | jstew | mskoud: I am, and this helps a lot: https://leanpub.com/fp-oo |
| 10:40 | mskoud | yes. started to look at clojure some months ago... |
| 10:41 | pythonjohn | morning clojurins |
| 10:41 | pythonjohn | *clojurians |
| 10:41 | pythonjohn | I have a very general question to pose to the flor |
| 10:41 | jstew | mskoud: Plus, writing some clojure every day helps. Even if just a little bit. 4clojure.org, project eueler, and google code jam is what I suggest. |
| 10:42 | dnolen_ | pythonjohn: just ask your question |
| 10:42 | pythonjohn | coming from the land of oo, I am always tempted to view my projects as several smaller parts (classes), each with it's own small job to do |
| 10:42 | pythonjohn | when I am organizing a clojure namespace |
| 10:42 | jcromartie | pythonjohn: you should continue to do so |
| 10:42 | pythonjohn | how should I best organize my files |
| 10:43 | pythonjohn | should I view them as each smaller parts of a whole, like classes |
| 10:43 | pythonjohn | that is my habit |
| 10:43 | pythonjohn | i am trying to understand the best way to organize things |
| 10:43 | AeroNotix | pythonjohn: use lein and go and read some popular projects. |
| 10:43 | pythonjohn | okay |
| 10:43 | jstew | pythonjohn: your namespaces in clojure are kind of like classes in OO. Classes are often little more than a namespace for grouping a set of methods. |
| 10:43 | pythonjohn | that is kind of what I was thinking |
| 10:43 | pythonjohn | but thought I might be way off |
| 10:44 | jcromartie | namespaces are for preventing collisions, not for imposing hierarchy, but a first pass at translating a OO approach into Clojure, will probably end up with namespaces that look a lot like classes |
| 10:44 | jcromartie | and there's nothing wrong with that |
| 10:44 | pythonjohn | so that is normalish |
| 10:44 | pythonjohn | I am trying to break old habits |
| 10:44 | pythonjohn | slowly |
| 10:44 | wunki | anyone have an idea how you would do a "SELECT COUNT(id) FROM table" in Korma? |
| 10:45 | pythonjohn | thanks for the input everyone |
| 10:45 | pythonjohn | I am ging to read more github projects to get a concrete idea of the layout |
| 10:45 | pythonjohn | of some experienced folks |
| 10:46 | seangrove | wunki: Sadly, I can't deep link into the page, but it's literally covered on the docs site (aggregate (count :*) :cnt :status) |
| 10:46 | seangrove | http://sqlkorma.com/docs |
| 10:46 | seangrove | dnolen_: You get a chance to checkout the 'glueing' concept? |
| 10:47 | wunki | seangrove: aggregate count adds it on a row basis, I just want to have the amount of rows |
| 10:47 | dnolen_ | seangrove: sorry, haven't yet |
| 10:47 | augustl | pythonjohn: I tend to think about what I need to require. If two files requires the same things, perhaps they should be one file? |
| 10:47 | augustl | s/files/namespaces |
| 10:48 | pythonjohn | that is a good point |
| 10:48 | pythonjohn | I will try to keep that in mind for sure |
| 10:49 | augustl | pythonjohn: this code used to be two files, for example, to separate run and export which are very different in nature https://github.com/augustl/augustl.com/blob/master/src/augustl_com/cli.clj |
| 10:49 | augustl | but they are also very similar :) |
| 10:49 | jstew | Clojure is so much fun, that I want to find a job working with it, once I become more proficient. |
| 10:50 | AeroNotix | damn right |
| 10:50 | AeroNotix | I have a clojure jobb |
| 10:50 | seangrove | wunki: Let me check the sql output of that code... |
| 10:50 | jcromartie | we have a lot of people using it |
| 10:51 | AeroNotix | it's awesome when I see coworkers struggling with tooling and/or language issues and I breeze by with Clojure |
| 10:51 | AeroNotix | such a great platform to develop on |
| 10:51 | AeroNotix | the JVM is really mature |
| 10:51 | AeroNotix | I mean, their struggling is not awesome, but that I don't struggle is. :) |
| 10:51 | jstew | I keep seeing more and more people wanting clojure experts, too. The past couple of years it has seemed to catch on a lot faster. |
| 10:51 | seangrove | AeroNotix: I was going to say, careful with that Schadenfreude... |
| 10:52 | jstew | AeroNotix: I struggle with rubygems on a daily basis. Ruby is fun, but rubygems is a horrid mess. Ruby devs don't seem to care about dependencies at all. |
| 10:54 | seangrove | wunki: (korm/dry-run (korm/select db/users (korm/aggregate (count :id) :cnt))) => dry run :: SELECT COUNT("users"."id") AS "cnt" FROM "users" :: [] |
| 10:54 | mskoud | How do i include the old clojure.contrib.strint string interpolation library in Clojure 1.5? |
| 10:54 | seangrove | wunki: Isn't that the sql you asked for? |
| 10:54 | wunki | seangrove: it is, strange, when I tried it I got every row back from the db :/ |
| 10:55 | wunki | seangrove: let me try it out again |
| 10:55 | seangrove | wunki: No worries |
| 10:55 | stuartsierra | mskoud: I think it's in core.incubator |
| 10:56 | mskoud | indeed it is :-) thanks! |
| 10:56 | wunki | seangrove: yup, that was it... my mistake was that I did the following `(select users (aggregate (count :*) :cnt))` |
| 10:57 | wunki | seangrove: thanks for the help |
| 10:57 | seangrove | wunki: No problem, happy to help! |
| 11:06 | jjttjj | anyone know of a more advanced core.async tutorial that talks about the pubsub/mult, etc, or a project on github that uses these? |
| 11:17 | jstew | People who have clojure jobs: Out of curiousity, what sorts of things do you work on every day? |
| 11:18 | jcromartie | web apps, lots of API interop |
| 11:18 | seangrove | Product, generally. |
| 11:18 | jcromartie | data ingest |
| 11:18 | zspencer | web apps |
| 11:18 | jcromartie | data conversion |
| 11:18 | zspencer | and services supporting the web apps |
| 11:18 | jstew | Nice. These are things that I enjoy doing also. Back end services. |
| 11:18 | hyPiRion | parsing complex formats specified by another format at runtime |
| 11:19 | zspencer | I also use clojure daily to make myself feel smarter than my ruby/javascript programmer friends |
| 11:19 | zspencer | which is probably the most important feature |
| 11:19 | seangrove | jstew: Front-end dev is becoming unbelievably better these days |
| 11:20 | seangrove | Om, reusable components, tooling, core.async, and some new patterns... it's fantastic. |
| 11:20 | pjstadig | zspencer: you have ruby/javascript programmer friends‽</horror> |
| 11:20 | jstew | Thanks for your responses :) |
| 11:21 | jcromartie | I used to be the one asking that question |
| 11:21 | cbp | I use clojure mostly for clojurescript at work |
| 11:21 | cbp | but do some backend services on my own time |
| 11:21 | jstew | seangrove: I have seen some wicked demos involving core.async and Om. I work with a guy on the jQuery core team and he was left scratching his head but was amazed with the performance. |
| 11:22 | seangrove | jstew: The tooling, layout management, and reusable components are what get me giddy these days, but it's all fantastic fun. |
| 11:39 | danno1 | Dumb Q: Ifn is an interface that represents functions...right? |
| 11:40 | llasram | IFn, yes |
| 11:40 | danno1 | thanks, llasram |
| 11:40 | danno1 | also, in https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java |
| 11:41 | danno1 | What is: |
| 11:41 | danno1 | static public interface L{long invokePrim();}static public interface D{double invokePrim();}static public interface OL{long invokePrim(Object arg0);}static public interface OD{double invokePrim(Object arg0);}static public interface LO{Object invokePrim(long arg0);}static public interface LL{long invokePrim(long arg0);}static public interface LD{double invokePrim(long arg0);}static public interface DO{Object invokePrim(double arg0);}static public |
| 11:41 | danno1 | methods called DLL, DOD, DLO, DLD, etc. |
| 11:41 | pjstadig | those allow you to pass unboxed primitive arguments to functions that are compiled to take them |
| 11:41 | clgv | danno1: those are for primitive functions |
| 11:41 | Bronsa | danno1: mostly implementation details for primitive taking functions |
| 11:42 | danno1 | oh yeah |
| 11:42 | danno1 | derp on me |
| 11:42 | danno1 | haha |
| 11:42 | clgv | that's why primitive functions have limitations on the number of arguments... |
| 11:42 | danno1 | cigv: interesting |
| 11:48 | danno1 | Simple Q Again: |
| 11:48 | danno1 | I can create a list that is like a List in Java/Scala/Groovy: (list 1 2 3 4) |
| 11:49 | danno1 | but if I create a list purely as (1 2 3 4) it is expecting the first element to be a IFn? |
| 11:49 | danno1 | since it is evaluated immediately? |
| 11:49 | joegallo | ,(= '(1 2 3 4) (list 1 2 3 4)) |
| 11:49 | clojurebot | true |
| 11:50 | joegallo | danno1: that's right, (1 2 3 4) is going to treat 1 as a fn |
| 11:50 | danno1 | Boom! Nice! joegallo. |
| 11:50 | joegallo | which you don't want, so typically you'd see the list quoted, like above |
| 11:50 | cbp | If you don't quote it the first element must be a function, macro or java class |
| 11:50 | cbp | or special form |
| 11:50 | clgv | ,(1 2 3 4) |
| 11:50 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn> |
| 11:50 | clgv | ^^ |
| 11:51 | danno1 | cbp & clgv: Noting. Thank you |
| 11:51 | napper2 | ,(source recur) |
| 11:51 | clojurebot | Source not found\n |
| 11:51 | justin_smith | napper2: I think recur is a symbol that is bound inside loop / fn? |
| 11:51 | justin_smith | it isn't bound at the top level |
| 11:52 | clgv | napper2: recur is a special form |
| 11:52 | napper2 | thanks for the corrections |
| 11:53 | clgv | ,(keys (clojure.lang.Compiler/specials)) |
| 11:53 | clojurebot | (deftype* new quote & var ...) |
| 11:53 | clgv | ,(println (keys (clojure.lang.Compiler/specials))) |
| 11:53 | clojurebot | (deftype* new quote & var ...)\n |
| 11:53 | clgv | &(keys (clojure.lang.Compiler/specials)) |
| 11:53 | lazybot | java.lang.SecurityException: You tripped the alarm! class clojure.lang.Compiler is bad! |
| 11:53 | clgv | :/ |
| 11:53 | justin_smith | ,(doc recur) |
| 11:53 | clojurebot | Gabh mo leithscéal? |
| 11:53 | clgv | well, check yourself^^ |
| 11:54 | clgv | ,((clojure.lang.Compiler/specials) 'recur) |
| 11:54 | clojurebot | #<Parser clojure.lang.Compiler$RecurExpr$Parser@b31bff> |
| 11:54 | cbp | (doc recur) |
| 11:54 | clojurebot | Pardon? |
| 11:54 | justin_smith | ,(do (use 'clojure.repl) (doc recur)) |
| 11:54 | clojurebot | Titim gan éirí ort. |
| 11:54 | justin_smith | hrm |
| 11:54 | jstew | http://clojure.org/special_forms#Special Forms--(recur exprs*) <-- there :) |
| 11:54 | cbp | I thought all the special forms had some sort of docs |
| 11:55 | seangrove | I think doc is special-cased. But clojurebot's always a bit loopy |
| 11:55 | clgv | justin_smith: it is neither a def, defn or defmacro - hence there is nothing for "doc" to find ;) |
| 11:55 | cbp | maybe clojurebot is just being silly |
| 11:55 | jconnolly | whoa clojurebot speaks irish? |
| 11:55 | justin_smith | cbp: doc recur works in my repl |
| 11:55 | justin_smith | clgv: ^^ |
| 11:55 | clgv | ah right |
| 11:56 | cbp | &(doc recur) |
| 11:56 | lazybot | ⇒ "Special: recur; Evaluates the exprs in order, then, in parallel, rebinds\n the bindings of the recursion point to the values of the exprs.\n Execution then jumps back to the recursion point, a loop or fn method." |
| 11:56 | cbp | lazybot: botsnack |
| 11:56 | lazybot | cbp: Thanks! Om nom nom!! |
| 11:56 | clgv | $source doc |
| 11:56 | lazybot | Source not found. |
| 11:56 | clgv | $source clojure.repl/doc |
| 11:56 | lazybot | clojure.repl/doc is http://is.gd/qrh0LE |
| 11:58 | danno1 | ,(first (list 1 2 3 4)) |
| 11:58 | clojurebot | 1 |
| 11:59 | justin_smith | danno1: in my experience I don't see list used very often - usually it's either a [] vector literal or '() quoted sequence |
| 12:00 | justin_smith | ,(map class (list 1 2 3) '(1 2 3)) |
| 12:00 | clojurebot | #<ArityException clojure.lang.ArityException: Wrong number of args (2) passed to: core/class> |
| 12:00 | danno1 | justin_smith: I kind of figured that vector is used more |
| 12:00 | justin_smith | ,(map class [(list 1 2 3) '(1 2 3)]) |
| 12:00 | clojurebot | (clojure.lang.PersistentList clojure.lang.PersistentList) |
| 12:01 | justin_smith | yeah, but notice '(1 2 3) is the same datatype as (list 1 2 3) |
| 12:01 | danno1 | danno1: since function args are vectors |
| 12:01 | danno1 | justin_smith: yes |
| 12:15 | jph- | how might i rewrite this in clojure using interop? CurrencyUnit.registerCurrency("TST", 991, -2, Arrays.asList("TS")); |
| 12:15 | jph- | in particular the Arrays.asLists bit confuses me (no java background) |
| 12:16 | cbp | (Arrays/asList "TS") |
| 12:16 | jph- | oh, duh |
| 12:16 | cbp | provided you import java.util.Arrays |
| 12:16 | jph- | k |
| 12:16 | hyPiRion | jph-: it just converts a vararg to a list of those values |
| 12:16 | hyPiRion | you can just use ["TS"] instead |
| 12:16 | cbp | Ah |
| 12:40 | seangrove | bbloom: How'd the talk last night go? |
| 12:47 | dnolen_ | seangrove: I was there, was good! |
| 12:49 | seangrove | dnolen_: Did he come off as researcher-executor or crazy-shouty-rambling-homeless-man? |
| 12:50 | dnolen_ | seangrove: neither, solid talk :) |
| 12:52 | locks | haha |
| 12:53 | gfredericks | https://github.com/budu/lobos/blob/master/src/lobos/connectivity/jdbc_2.clj |
| 13:48 | gfredericks | does java.jdbc not have anything for upserts anymore? |
| 13:54 | amalloy | justin_smith: i use list in function position pretty rarely, it's true, but not never. where the function list *does* see use is in stuff like (map list xs ys) |
| 13:55 | amalloy | and like, okay, in that specific context vector is still more common than list. but i claim list is good sometimes anyway |
| 13:56 | turbofail | hm. i can't remember the last time i used list at all |
| 13:56 | rasmusto | ,(apply map list [[1 2 3] [4 5 6]]) |
| 13:56 | clojurebot | ((1 4) (2 5) (3 6)) |
| 13:56 | rasmusto | I do that all the time |
| 13:56 | technomancy | sometimes I apply list. I don't think I ever have called it directly. |
| 13:57 | jstew | any reason you would want a list of lists rather than vectors when mapping 2 vectors? |
| 13:58 | turbofail | dunno. i'm sure you could come up with a reason |
| 13:58 | turbofail | i just can't think of one, and never felt the need to do it |
| 13:59 | llasram | jstew: Most of the "lists" you see e.g. in the Clojure REPL are actually lazy sequences, which are, well, lazy |
| 13:59 | llasram | So that's a reason to prefer them |
| 14:02 | amalloy | technomancy: why would you apply list? that's what list* is for |
| 14:03 | rasmusto | ,(doc vector*) |
| 14:03 | clojurebot | No entiendo |
| 14:03 | amalloy | i mean, obviously the results are a little different: (apply list 1 2 3 xs) forces all of xs, where (list* 1 2 3 xs) doesn't force any of it |
| 14:04 | jstew | TIL about list* |
| 14:11 | bts- | anyone know of a way to get prep-tasks to run before loading my dev profile's source-paths in lein? my dev source-paths depends on thrift class compiliation done by prep-tasks |
| 14:12 | justin_smith | amalloy: yeah, not claiming it is useless, just mentioning that it is fairly rare in code I see |
| 14:13 | amalloy | bts-: really? shouldn't it be known statically where the classes output by thrift will go? |
| 14:16 | bts- | amalloy: i know where the classes will go, but i need to have them compiled before i load the code in my dev source-paths. lein seems to load the dev source-paths before executing prep-tasks |
| 14:18 | bts- | amalloy: and so I get a ClassNotFoundException |
| 14:24 | technomancy | bts-: nothing gets loaded by default unless you ask for it |
| 14:28 | Bronsa | technomancy: any idea why mixing AOT compiled deftypes with reloading its definition doesn't work in a lein repl but works when from java -cp `lein classpath` clojure.main? |
| 14:30 | bts- | technomancy: from the docs "By default the :dev, :provided, :user, :system, and :base profiles are activated for each task" |
| 14:31 | bts- | technomancy: is there a way to get prep-tasks to run without loading :dev? |
| 14:34 | amalloy | Bronsa: i wouldn't expect it to work in either case, really. do you have a simple example of making it work? |
| 14:34 | Bronsa | amalloy: one sec |
| 14:35 | amalloy | like, if you just `lein classpath` without ever running `lein compile`, i'm not sure the AOT ever happens, so you wouldn't see the usual issues |
| 14:35 | Bronsa | amalloy: I'm calling `compile` |
| 14:41 | bts- | technomancy: as a workaround I currently temporarily comment-out :dev's source-paths if the thrift classes aren't yet compiled |
| 14:44 | Bronsa | amalloy: http://sprunge.us/cjeS |
| 14:45 | technomancy | bts-: those profiles are active, but that just places them on the classpath. it doesn't load anything. |
| 14:45 | Bronsa | amalloy: http://sprunge.us/jTYS a bit cleaned up |
| 14:47 | technomancy | Bronsa: hm; very strange. I don't do AOT at not-deploy-time or deftype, so I'm also surprised that works. |
| 14:48 | amalloy | Bronsa: does your call to compile in the first example actually generate classfiles? i don't have a ton of experience with AOT, and especially not with doing it by hand, but the most obvious difference to me is that lein is implicitly running compile before repl in the second case and not the first |
| 14:48 | amalloy | well, i guess that depends what's in your project.clj |
| 14:48 | Bronsa | amalloy: it's straight out of lein new test |
| 14:49 | Bronsa | amalloy: yes it's generating classfiles btw |
| 14:50 | Bronsa | technomancy: amalloy looks like there's something going wrong with how leiningen/nrepl handles classloaders |
| 14:54 | bts- | technomancy: okay that makes sense. I guess my problem then is that I have REPL utility functions in dev/user.clj that I only want to load after prep-tasks. any recommendation to achieve that? |
| 14:56 | hiredman | Bronsa: is ./classes in `lein classpath`? |
| 14:57 | hiredman | I suspect lein compiles to target/classes |
| 14:57 | technomancy | bts-: oh, user.clj is loaded by clojure itself; that's outside lein's control. depending on what you're doing, runtime resolve might be a good option there |
| 14:58 | Bronsa | hiredman: let me try binding *compile-path* to target/classes then |
| 14:59 | bts- | technomancy: awesome -- thanks! |
| 15:00 | Bronsa | hiredman: that makes it fail, good catch |
| 15:00 | Bronsa | technomancy: not a lein bug then, sorry for the fuss |
| 15:02 | technomancy | no worries |
| 15:08 | dnolen_ | http://mreinhold.org/blog/jdk8-ga |
| 15:08 | Cr8 | hum |
| 15:15 | Bronsa | hiredman: amalloy anyway, do you know of any good reason why that behaviour should be expected or am I right in assuming that this limitation should be considered a bug? |
| 15:16 | hiredman | which behaviour? |
| 15:16 | Cr8 | the stuff in the core.async docs about >! and >!! returning true on success doesn't seem to be accurate |
| 15:16 | amalloy | the limitation that...if you reload code containing AOTed deftypes, references to the old class stick around? |
| 15:17 | dacc | dnolen_: implications for clojure? nice to see permgen go. |
| 15:17 | dnolen_ | dacc: for ClojureScript users the appearance of Nashorn is big |
| 15:17 | tbaldridge | Cr8: explain? |
| 15:18 | Bronsa | amalloy: hiredman specifically that a class name gets resolved to the AOT class rather than to the dynamically compiled one |
| 15:18 | dnolen_ | dacc: I suspect when Nashorn perf enhancements land, and we improve the CLJS compiler a bit, Nashorn could be a pretty sweet scripting solution for Clojure users |
| 15:18 | dnolen_ | dacc: in the long wrong, perhaps Clojure can leverage the invokeDynamic stuff which finally not slow |
| 15:19 | jcromartie | the long wrong :) |
| 15:19 | jcromartie | I like that idea |
| 15:19 | dnolen_ | s/long wrong/long run |
| 15:19 | hiredman | Bronsa: it is an issue that is known to those in the know, but I don't know what the specifics of it our (how why it happens, etc) |
| 15:20 | Cr8 | tbaldridge: https://www.refheap.com/61482 |
| 15:20 | dacc | dnolen_: so compiling clojure to javascript to run on nashorn? seems like you'd just script jvm programs using the clojure compiler itself, no? |
| 15:20 | tbaldridge | Cr8: what version of core.async? |
| 15:20 | amalloy | Bronsa: i mostly regard AOT as a mysterious black box in which all manner of sad things become routine. i don't know which sad things are bugs and which are not |
| 15:21 | Cr8 | "0.1.267.0-0d7780-alpha", just the one from the README |
| 15:21 | Cr8 | should I be building master? :) |
| 15:22 | tbaldridge | Cr8, go read the README again :-P |
| 15:22 | dnolen_ | dacc: not saying it will actually work out - but worth exploring, jjs will likely optimized to start as quickly as possible - not necesarrily really true for Java |
| 15:22 | hiredman | amalloy: too long for an OH |
| 15:22 | tbaldridge | Cr8: that's my bad, I never updated the README |
| 15:23 | Cr8 | ah |
| 15:23 | amalloy | hiredman: remove all the verbs? I AOT box sad things. sad things bugs |
| 15:23 | tbaldridge | Cr8: we changed the value returned from put in the latest version. So the docs you were reading are correct, it's just the version in the README was too old |
| 15:23 | Cr8 | all fine now :) |
| 15:24 | hiredman | amalloy: works for me |
| 15:24 | Cr8 | that makes sense |
| 15:31 | abaker | so I noticed that in clojure java.jdbc implementation, the macros like with-connection and such leverage private vars, and then rebind *db* -- is this considered good practice? |
| 15:32 | jcromartie | abaker: that's actually deprecated now |
| 15:32 | abaker | jcromartie: which is, the entire library or just that implementation? |
| 15:32 | jcromartie | wait wait |
| 15:33 | jcromartie | yeah |
| 15:33 | jcromartie | that style |
| 15:33 | jcromartie | all of those macros live in clojure.java.jdbc.deprecated now |
| 15:33 | jcromartie | and the functions just take a connection instead |
| 15:34 | jcromartie | you generally need a very good reason to depend on dynamic vars |
| 15:34 | abaker | yeah, I've seen it on the' do not use list' before.. I'm writing a with-connection style macro, and debating if I even need a macro, and if I do, how to go about it |
| 15:34 | abaker | like with-open, it would just be to standardize closing out of resoruces |
| 15:34 | cbp | abaker: god no, no globals for database connections and certainly no dynamic vars |
| 15:35 | jcromartie | there's nothing simpler than a parameter to a function |
| 15:36 | ToBeReplaced | abaker: consider stuartsierra's component library for start/stop standards |
| 15:37 | abaker | yeah that left me wondering why any of the with- style macros exist in the first place, like with-open, afaict, it's grown a lot to avoid swallowing exceptions all for the one purpose of making sure the stream gets closed |
| 15:37 | jcromartie | abaker: with-open has good reason to exist |
| 15:38 | stuartsierra | Unlike many of the with- macros, with-open uses lexical scope, not dynamic binding. |
| 15:40 | katratxo | cemerick: ping? |
| 15:40 | katratxo | cemerick: just poking you on the friend change proposal |
| 15:42 | stuartsierra | abaker: here's my point of view on that pattern. http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope |
| 15:43 | abaker | ah, that's what i was looking for, thanks stuartsierra |
| 15:44 | stuartsierra | You're welcome |
| 15:51 | cemerick | katratxo: responded on the gist. Probably better to just open an issue in the future. :-) |
| 15:56 | katratxo | cemerick: sure, will to that next time, i'll open an issue |
| 16:00 | mikerod | I found something fun out. |
| 16:01 | mikerod | satisfies? seems to be a bit slow when checking on things that are not implementing an interface |
| 16:02 | mikerod | ,(time (dorun (map #(satisfies? clojure.core.protocols/CollReduce %) (repeat 1000000 "hi")))) |
| 16:02 | clojurebot | Execution Timed Out |
| 16:03 | Bronsa | mikerod: that's because it has to lookup in the impl map not only the class, but all the super classes/interfaces |
| 16:03 | mikerod | slows down at lot near 1 million checks. I profiled it, looks like most of the time is spent in java.lang.Class#getInterfaces |
| 16:04 | mikerod | I would have thought this was fast? |
| 16:04 | mikerod | Class#getInterfaces is slow? |
| 16:04 | mikerod | I know it is a harder search when it doesn't satisfy it or directly implement an interface generated by the protocol |
| 16:06 | mikerod | I'm just surprised by this being a performance hit like this |
| 16:06 | mikerod | we had a tight loop that had a `satisfies?` in a precondition |
| 16:08 | Bronsa | mikerod: I remember remiving a satisfies? check in tools.reader improved perf by 40x |
| 16:08 | Bronsa | removing* |
| 16:09 | mikerod | Bronsa: That doesn't surprise me now that I've seen the damage it can do :P |
| 16:09 | mikerod | I was just trying to get a good error message when a fn was called on a obj that didn't satisfy the required protocol. I think I'll have to explore a different alternative |
| 16:09 | Bronsa | mikerod: I suspect a small cache in find-protocol-impl could speed-up significantly satisfies? |
| 16:10 | mikerod | *that's why I had the satisfies? in the :pre-condition block |
| 16:10 | mikerod | Bronsa: I'd imagine so |
| 16:11 | Bronsa | mikerod: you can try (with-redefs [find-protocol-impl (clojure.core.cache/lru find-protocol-impl)] ..) and see how it goes :P |
| 16:12 | Bronsa | s/cache/memoize |
| 16:12 | mikerod | Bronsa: hah, well that is one alternative I suppose |
| 16:12 | mikerod | that'd be interesting... |
| 16:12 | amalloy | Bronsa: but protocols can be extended at runtime. i assume that's why there's not a cache already |
| 16:13 | Bronsa | amalloy: fair enough |
| 16:13 | mikerod | amalloy: oh, duh I didn't think that way about it |
| 16:13 | mikerod | good point |
| 16:13 | Bronsa | amalloy: well, extend could invalidate that cache |
| 16:13 | mikerod | I guess, if I wanted to try calling a protocol fn on something and I just wanted a good error message, I could try-catch it |
| 16:13 | amalloy | mikerod: you'll never be able to be sure though |
| 16:14 | mikerod | amalloy: I know, it could claim to satisfy, but not really impl the fn. |
| 16:14 | amalloy | maybe it does implement the protocol, but its implementation involves throwing an exception that looks the same as dont-implement-this-protocol |
| 16:14 | mikerod | amalloy: yep, lose-lose situation? :P |
| 16:14 | amalloy | Bronsa: that sounds plausible to me |
| 16:15 | Bronsa | amalloy: I'm doing something similar in tools.analyzer for resolving classes, it's working fine |
| 16:16 | mikerod | The one thought I still had, how is Class#getInterfaces where I'm seeing most of the time spent though? I thought that would be fast. A native method in the Class class. |
| 16:17 | amalloy | mikerod: anything in Class or java.lang.reflect.* is slow |
| 16:17 | mikerod | amalloy: I thought that was true for java.lang.reflect, I didn't think so for Class. |
| 16:17 | mikerod | it is hard to search on this topic it seems |
| 16:17 | amalloy | anything you do with Class is reflection |
| 16:18 | amalloy | except using == to compare them, simple stuff like that |
| 16:18 | amalloy | it's just in java.lang because getClass() is part of Object, i suspect; otherwise it would be in reflect |
| 16:18 | mikerod | amalloy: that is where I wasn't making the connection. I thought an object has a concrete reference to it's Class class obj. So I thought the information on the Class class were just direct references; that sort of thing. |
| 16:19 | mikerod | I see. |
| 16:22 | Bronsa | oh well, memoizing find-protocol-impl accounts only for a 2x speedup, that's sad |
| 16:23 | mikerod | :( |
| 16:27 | hiredman | Bronsa: but now if someone extends a protocol find-protocol-impl doesn't work correctly |
| 16:27 | amalloy | hiredman: i already waved that flag. he points out that extend could invalidate the cache, if the cache were useful enough to actually include in clojure |
| 16:28 | hiredman | amalloy, Bronsa: oh sure, huh |
| 16:30 | hiredman | mikerod: if you make an actual protocol fn that returns true on some objects and false on other objects, it will be faster than satisfies?, because you get a little inline cache |
| 16:31 | hiredman | (defprotocol Yo (yes? [whatever])) (extend-protocol Yo Object (yes? [_] false)) then have it return true for your thing |
| 16:32 | amalloy | huh. i just found this in the source for java.lang.Class: throw (InstantiationException) new InstantiationException(...); |
| 16:32 | amalloy | why would you ever cast a constructor's result to its own class? |
| 16:32 | amalloy | oh, i see. i parsed it wrong |
| 16:32 | amalloy | it's really: throw (InstantiationException) new InstantiationException(...).initCause(e); |
| 16:36 | hiredman | I am skeptical of the value of speeding up satisfies?, guarding a dynamic polymorphic function with those kind of guards seems like an anti-pattern, the same way in java people frown and using instanceof checks everywhere (and I know someone is going to point out the clojure source does that everywhere, but that is bootstrapping a dynamic language on a static runtime, it happens) |
| 16:36 | jcromartie | how slow are you talking? |
| 16:38 | mikerod | hiredman: that is a good idea |
| 16:39 | mikerod | hiredman: I haven't really explored the idea of implementing it in a way that would be checkable and inline cacheable |
| 16:40 | mikerod | I like this idea, for my use cases at least |
| 16:42 | hiredman | it is unlikely that satisfies? as a general function would every keep up with the performance of an actually protocol function, given the current impl and the likely future path of protocol fns (invokedynamic switch points) |
| 16:43 | hiredman | maybe if clojure went full indy replacing ifns with method handles |
| 16:44 | mikerod | interesting thoughts |
| 16:50 | coventry | Is there a way to get a java dump on a clojure process on OS X, as in the following URL? "kill -QUIT <pid>" doesn't seem to have any effect. http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.50%2Fdiag%2Ftools%2Fjavadump_trigger.html |
| 16:51 | amalloy | coventry: like a heap dump? |
| 16:51 | amalloy | jmap for heap dumps, jstack for stacktraces |
| 16:52 | ordnungswidrig2 | coventry: it's like for every java vm instance, clojure does not make a difference |
| 16:53 | justin_smith | coventry: also in jvisualvm you can look at / collect stats interactively at runtime and at your option trigger a dump |
| 16:53 | coventry | amalloy: sweet, thanks. |
| 16:53 | justin_smith | jvisualvm comes with java |
| 16:53 | jcromartie | jvisualvm <3 |
| 16:53 | amalloy | yourkit for life |
| 16:53 | mikerod | yourkit cost $$ |
| 16:53 | mikerod | visualvm has done alright :P |
| 16:54 | amalloy | free license for open-source projects. and if you use it at a real company, it's worth the money |
| 16:54 | mikerod | I didn't know that. I'll have to check it out and see the difference. |
| 16:54 | technomancy | it's only free if you advertise for them |
| 16:54 | amalloy | fwiw coventry, i've never heard of a Javadump in my life. must be some weird thing specific to the IBM jdk |
| 16:55 | technomancy | gratis, rather |
| 16:55 | amalloy | technomancy: true. on the one hand, i've never actually done that; on the other, here i am in #clojure |
| 16:55 | technomancy | ~guards |
| 16:55 | clojurebot | SEIZE HIM! |
| 16:56 | mikerod | amalloy: so you've fulfilled your duties |
| 16:56 | mikerod | using a profiler on nrepl always confuses me |
| 16:58 | mikerod | it uses several threads and I don't suppose I know how they are being used |
| 16:59 | justin_smith | seems like clojure always has a set of threads (for agents I think?) |
| 16:59 | ordnungswidrig2 | mikerod: +1 |
| 16:59 | mikerod | justin_smith: it appears to be agents indeed |
| 17:07 | ordnungswidrig | there was a blog post on symbols as functions or like that. some days ago |
| 17:08 | ordnungswidrig | does anybody have a pointer? I wan't to resolve a function at runtime, not earlier |
| 17:08 | amalloy | i mean, the function is named resolve |
| 17:09 | justin_smith | ,('symbol '{symbol value}) ; at first I thought ordnungswidrig meant this |
| 17:09 | clojurebot | value |
| 17:09 | amalloy | as usual, consider carefully whether you really need to do this: namespaces are great at holding functions you refer to statically; delayed stuff for runtime is often better held in a map anyway |
| 17:09 | ordnungswidrig | amalloy: I'm playing with user ns and dev |
| 17:10 | ordnungswidrig | and refresh-all. |
| 17:10 | ordnungswidrig | like in stuarts workflow |
| 17:10 | ordnungswidrig | I don't want to refer to my system-init function from user because this might break lein repl startup |
| 17:17 | chare | looking for something to host a web app that allows some free use and free db storage |
| 17:17 | chare | what do you guys use |
| 17:17 | jcromartie | Amazon can be free |
| 17:17 | jcromartie | EC2 |
| 17:17 | jcromartie | you just don't want to go over the limits |
| 17:18 | dacc | i thought free tier was only for a year? |
| 17:18 | chare | what do you mean free |
| 17:18 | chare | since when is ec2 free |
| 17:18 | dacc | chare: i think you can have a free micro ec2 for the first year of your account |
| 17:18 | jcromartie | http://aws.amazon.com/free/ |
| 17:19 | chare | a year is not my definition of free |
| 17:19 | jcromartie | yes 1 year after signing up for AWS |
| 17:19 | jcromartie | TINSTAAFL |
| 17:20 | chare | jcromartie damn it |
| 17:20 | jcromartie | I'm assuming you're talking about hosting a Clojure web app |
| 17:21 | jcromartie | if you can package it as a .war then there are some free Java app hosts |
| 17:21 | technomancy | he's asking about an erlang web app, he just didn't like the answers he got in #erlang |
| 17:21 | jcromartie | well yeah you're pretty much screwed there |
| 17:23 | robink | I've got a Java method that's supposed to return a class (RtfHeader), but instead Clojure is reporting that RtfHeaderFont (the child class) is being returned. |
| 17:23 | chare | come on guys there needs to be an answer, heroku gives you a free instance, but no free db storage, so its like half way there |
| 17:23 | robink | Am I doing something wrong? |
| 17:23 | robink | Rather, an instance of class RtfHeader. |
| 17:23 | jcromartie | chare: define "web app" and "db" first |
| 17:24 | chare | what do you mean? |
| 17:24 | chare | isn't that standardized |
| 17:24 | amalloy | jcromartie: TANSTAAFL, man. i don't know how heinlein would feel about someone using such a fancy-pants word as "isn't" instead of "aint" |
| 17:24 | akhudek | chare: there is appengine that has a permanent free tier |
| 17:24 | akhudek | chare: but you might have to work a bit to fit your app to their api |
| 17:25 | chare | akhudek: google app engine doesn't support erlang >< |
| 17:25 | jcromartie | chare: no it's not standardized |
| 17:25 | akhudek | oh, I didn't realize that they were serious about that |
| 17:25 | akhudek | haha |
| 17:25 | chare | akhudek: is google app engine the only one that has a true free tier? |
| 17:25 | akhudek | chare: no clue |
| 17:25 | chare | akhudek: what do you mean you saying that erlang isn't serious? |
| 17:25 | jcromartie | some people mean a few PHP files, some people mean a whole VM, some people mean a .war file |
| 17:26 | akhudek | chare: I thought they were kidding that you were trying to host an erlang app is all |
| 17:26 | akhudek | erlang is pretty cool |
| 17:26 | chare | akhudek: and even if i use clojure instead don't i have to use some messed up api involving some datastore thats not sql |
| 17:27 | jcromartie | chare: again, no free lunch |
| 17:27 | jcromartie | sorry |
| 17:27 | chare | google app engine uses some google datastore not sql right? |
| 17:27 | jcromartie | chare: any free host does so by minimizing what they give you via things like that |
| 17:27 | akhudek | chare: yes |
| 17:27 | jcromartie | key-value stores instead of free reign on a SQL DB |
| 17:27 | sdegutis | chare: I think Google Datastore is SQL right? |
| 17:27 | sdegutis | chare: pretty sure Google App Engine is just a wrapper around AWS btw |
| 17:28 | justin_smith | sdegutis: https://developers.google.com/appengine/docs/python/datastore/ it is nosql |
| 17:28 | chare | google app engine is not running on AWS no chance of that |
| 17:28 | sdegutis | chare: citation needed |
| 17:28 | akhudek | I mean there is https://developers.google.com/cloud-sql/ |
| 17:28 | akhudek | but it's not free |
| 17:29 | justin_smith | "most queries are eventually consistent" |
| 17:29 | chare | ok so in worst scenario i can use clojure with google's datastore? |
| 17:29 | technomancy | chare: heroku postgres has a free tier: https://addons.heroku.com/heroku-postgresql |
| 17:31 | sdegutis | Chasm: Yeah, you can do it, but you need to make sure your Clojure app runs fine on App Engine first, which it probably won't, seeing as it's Java. |
| 17:31 | sdegutis | chare: Yeah, you can do it, but you need to make sure your Clojure app runs fine on App Engine first, which it probably won't, seeing as it's Java. |
| 17:31 | sdegutis | Chasm: sorry about that |
| 17:34 | devth | any SFW-filter-type libs out there in clojure land? could be very simple or clever. i was surprised to not find much via google. |
| 17:35 | TimMc | devth: SFW = Safe For Work? |
| 17:35 | devth | yeah. and by that i mean detect and filter out NSFW words |
| 17:38 | amalloy | (remove #{"butt" "butts"} words) ;; prototype |
| 17:38 | cbp | eheheheh |
| 17:38 | sdegutis | amalloy: shouldn't it also allow some kind of regex? |
| 17:38 | amalloy | sdegutis: i don't want to make the clbuttic mistake |
| 17:38 | sdegutis | touche |
| 17:39 | sdegutis | also haha |
| 17:40 | chare | ok I decided to try heroku |
| 17:40 | chare | lets see if its actually free |
| 17:40 | benmoss | http://en.wikipedia.org/wiki/Scunthorpe_problem |
| 17:40 | devth | lol, yeah. we are having same convo in work irc :) |
| 17:40 | devth | thought i’d check to see if there were existing libs |
| 17:41 | benmoss | this looks pretty legit http://kickjava.com/src/org/nemesis/forum/filter/FilterProfanity.java.htm |
| 17:41 | akhudek | benmoss: there is word boundary support in java regex |
| 17:41 | benmoss | lots of copyrights, CoolServlets.com |
| 17:42 | yedi | in om: i'm having trouble getting om/build to work -- https://www.refheap.com/61495 |
| 17:42 | yedi | header doesn't show up |
| 17:42 | akhudek | if you tokenize the string you have to identify word boundaries anyways, but you additionally have the problem of putting it back together again if you need raw text at the end |
| 17:42 | yedi | when i replace `app` with `header` in the `start` fn, the header renders |
| 17:54 | TimMc | devth: Lost cause. |
| 17:55 | TimMc | You're familiar with l33t-speak, yes? |
| 17:55 | devth | yes, well aware you can’t catch 100% |
| 17:55 | devth | but 80% would be pretty nice |
| 17:56 | TimMc | I'm pretty sure it won't accomplish sh!t. |
| 17:56 | devth | haha |
| 17:56 | technomancy | is the goal to stop people from using objectionable language or just to keep people from seeing it who don't want to? |
| 17:56 | devth | so actual use-case is i have a chat bot, and one of its features is urban dictionary lookups. half the time they’re pretty dirty |
| 17:56 | benmoss | perhaps it is a societal problem |
| 17:57 | devth | of course it can’t filter out anything someone says. it’s irc. |
| 17:57 | devth | but filting dirty UD defs would be fairly easy to hit 80% i think |
| 17:57 | TimMc | Urban dictionary is inherently NSFW. |
| 17:57 | technomancy | ah, so if the users creating the content aren't being directly exposed to the filtering it has a chance of working |
| 17:57 | TimMc | A lot of those definitions are NSFW without even having "NSFW words". |
| 17:58 | devth | yes, but some are just funny, and not dirty |
| 17:59 | TimMc | ...some. |
| 18:00 | TimMc | But technomancy is right; if it is not obvious to the authors of the text that the text is being filtered/censored, it might be OK. |
| 18:00 | devth | right |
| 18:01 | TEttinger | I'm pretty sure there's a massive amount of things on urban dictionary that would easily bypass even the strictest NSFW filter, blocking someone from using his name "Sanchez" when there's a similar entry that's very NSFW would be a problem |
| 18:02 | amalloy | yeah, i think trying to somehow clean up urban dictionary is like dusting the contents of a garbage can |
| 18:03 | devth | all the most offensive things we’ve seen in chat would be very easy to filter with a simple blacklist |
| 18:03 | devth | they don’t go for subtlety |
| 18:03 | amalloy | http://www.theatlantic.com/technology/archive/2013/01/ibms-watson-memorized-the-entire-urban-dictionary-then-his-overlords-had-to-delete-it/267047/ |
| 18:18 | felher | If I want to put defrecords into a sorted-set, is (extend...)-ing Comparable the way to go? |
| 18:20 | amalloy | felher: Comparable is an interface, not a protocol, so you'd have to implement it as part of the defrecord definition |
| 18:20 | amalloy | but using sorted-set-by, with a sensible Comparator, is more flexible |
| 18:21 | felher | amalloy: okay, got it, big thanks :) |
| 18:22 | amalloy | felher: note that functions implement Comparator, so you can use (sorted-set-by (fn [a b] ...) x y z) |
| 18:28 | felher | amalloy: ah, that is way cool. Thanks. |
| 19:40 | dacc | what's a good sequence technique for grouping certain subsequences? e.g. [1 2 \a \b 3 \c] -> [1 2 [\a \b] 3 [\c]] (chars are grouped, but not ints) |
| 19:41 | justin_smith | dacc: you could use reduce for that, maybe there is also a way to do it lazily using mapcat |
| 19:41 | amalloy | dacc: do you really want to have 1 and 2 as top-level elements, instead of single-element collections? |
| 19:41 | dacc | amalloy: yes |
| 19:41 | amalloy | justin_smith: mapcat can't work because he needs context |
| 19:42 | justin_smith | ahh yeah |
| 19:42 | hyPiRion | ,(mapcat (fn [[x :as xs]] (if (char? x) [xs] xs)) (partition-by char? [1 2 \a \b 3 \c])) |
| 19:42 | clojurebot | (1 2 (\a \b) 3 (\c)) |
| 19:43 | hyPiRion | Not that I would have numbers as top-level elements, but that's how I'd do it. |
| 19:43 | dacc | cool, thanks |
| 19:44 | hyPiRion | Hmm, I had a neat idea just now. |
| 19:45 | hyPiRion | but it wouldn't work, so no matter. |
| 20:01 | coventry | Is there an extension for light table which gives a more conventional REPL interface? It would be nice to have something which provides a transcript of commands entered and arbitrarily long output. |
| 20:32 | kanwei | has anyone else played with jdk8? a simple benchmark results in 2x worse performance for me |
| 20:33 | kanwei | (time (reduce + (range 1e8))): jdk7 = 4.2s, jdk8 = 8.3s |
| 20:35 | xeqi | I don't trust benchmarks not run with criterium |
| 20:36 | yedi | any om devs know why the element attribute :selected might work differently then :className or :id? I can't get my :selected attribute on option to show up in this code: https://www.refheap.com/61515 |
| 20:36 | yedi | but it works when i try it with :className or :id |
| 20:40 | beamso | kanwei: i get roughly similar times between jdk7 and jdk8 |
| 20:43 | kanwei | beamso: mac? |
| 20:44 | beamso | yes |
| 21:06 | apricots | hi, when i run cider-jack-in, println from the repl prints to the repl, but println from within a ring handler doesn't seem to print anywhere. where does the stdouts go in the ring case? |
| 21:12 | apricots | ah nm |
| 21:18 | kras | Any good readme for clj-antlr? Sorry don't have a Java background |
| 21:21 | pmonks | kris - have you looked at instaparse? Unofficial Tagline: "It kicks parse". |
| 21:21 | pmonks | *kras |
| 21:22 | pmonks | Or are you looking to generate a pure Java parser? |
| 21:24 | kras | pmonks: I tired instaparse, but it doesn't suite my requirements |
| 21:25 | pmonks | ah ok |
| 21:25 | pmonks | Shame - my experience with it has been euphoric. |
| 21:25 | kras | pmonks: I don't need a complex parser but one which is fast and efficient |
| 21:25 | kras | My grammar is not very complex |
| 21:25 | kras | pmonks: how do we ignore whitespace and newlines using instaparse? |
| 21:26 | TimMc | Oh neat, lein-voom has an option to help with deterministic builds (using the git commit time for any timestamps.) |
| 21:27 | pmonks | kras: I listed whitespace explicitly in my grammer |
| 21:27 | pmonks | https://github.com/pmonks/lolcmis/blob/master/src/lolcmis/grammar.clj |
| 21:27 | pmonks | Note: I'm a n00b to both clojure and instaparse, so it might suck |
| 21:28 | kras | pmonks: whitespace is ubiquitous in my grammar |
| 21:28 | kras | I can't afford to list it in every rule |
| 21:28 | akhudek | kras: you can suppress whitespace in the generated parse trees, but you still need to put it in the grammar unfortunately |
| 21:28 | pmonks | Yeah it's common in mine too - I just list it and suppress it. |
| 21:29 | kras | pmonks: akhudek: I am actually surprised that this feature is missing. Basic for any good parser |
| 21:30 | kras | Imagine writing a subset of C like grammar listing all the whitespaces |
| 21:30 | pmonks | Luckily for me that's not my use case. ;-) |
| 21:30 | pmonks | LOLCODE syntax is rather different to C |
| 21:31 | gfredericks | today on a new project I made some utility functions in a .main namespace for organizing CLJ commands -- the idea being any var in your namespace with ^:command metadata becomes a CLI action. Then it's easy also to programmatically print out the options for a "help" task. |
| 21:31 | gfredericks | does that sound like a useful lib? |
| 21:32 | kras | pmonks: I see quite a few whitespaces in your grammar |
| 21:32 | gfredericks | s/CLJ/CLI/ |
| 21:32 | pmonks | kras: yeah there are a few, but not "ubiquitous" I wouldn't say |
| 21:32 | pmonks | And suppression helps a lot - it's awesome! |
| 21:34 | guns | gfredericks: That sounds logical; the arglists can also be displayed in usage: summary style |
| 21:35 | gfredericks | guns: ah right; and docstrings of course |
| 21:36 | guns | These commands aren't amenable to -s/--switches of course |
| 21:37 | gfredericks | yeah; I wonder if it could combine well with tools.cli |
| 21:37 | guns | tools.cli needs a higher level CLI composition framework |
| 21:37 | guns | I only upgraded the parser |
| 21:38 | gfredericks | I guess if it was done simply enough it could be combine easily |
| 21:39 | gfredericks | e.g., the base functionality is [Namespace Keyword -> [String Any * -> Any]] |
| 21:39 | gfredericks | doesn't even *have* to be CLI specific |
| 21:39 | guns | Tying the command to namespaces seems a little restrictive |
| 21:40 | gfredericks | you could search all loaded namespaces |
| 21:40 | gfredericks | seems a little magical |
| 21:41 | guns | I think metadata for CLI metadata is a great idea. If you start building a larger framework around this idea, please let me know |
| 21:42 | guns | but yes, explicit declarations |
| 21:44 | gfredericks | the tricky part is options that you want to span commands |
| 21:45 | gfredericks | oh snap could inheritance do that nicely? |
| 21:46 | gfredericks | I need to stop thinking about this it's not going to turn into anything sane |
| 21:49 | guns | I guess metadata is kind of inexpressive if you want to write it inline as a reader attr-map |
| 21:50 | guns | Once you start using alter-meta! you may as well be using real data |
| 21:58 | hugod | guns, gfredericks: I had a go at a higher level cli lib a while back https://github.com/pallet/cli-cmds |
| 22:03 | guns | hugod: Do you have an example project that uses this library? Also, you should upgrade tools.cli (the parser is much better!) |
| 22:05 | hugod | guns: sorry the only examples of usage I have aren't open source - I should try and add some examples to the repo |
| 22:21 | gfredericks | hugod: looks interesting, thanks |
| 22:22 | technomancy | gfredericks: I did something vaguely like that ^:command thing in mire |
| 22:23 | technomancy | where you use metadata to indicate a function should be a command for a telnet game thing |
| 22:27 | gfredericks | (->> clojure-features (sort-by #(/ (use %) (hype %)))) |
| 22:27 | gfredericks | (take 5) |
| 22:28 | dsrx | mire.... is that a mud engine? |
| 22:28 | dsrx | my oft-started-but-never-finished pet project in many a freshly learned language was a mud client named "quagmire" |
| 22:31 | gfredericks | I bet #1 is refs |
| 22:31 | bufferloss | ,(* [2,2] [3,4]) |
| 22:32 | clojurebot | #<ClassCastException java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to java.lang.Number> |
| 22:32 | bufferloss | how can I "multiply" two arrays together? in the above example I'd like the answer to be [6,8] |
| 22:32 | bufferloss | and I know I could just map * 2 in this case, but for something more arbitrary |
| 22:32 | gfredericks | ,(map * [2 2] [3 4]) |
| 22:32 | clojurebot | (6 8) |
| 22:32 | bufferloss | hmm, ok thx |
| 22:33 | bufferloss | ,(map * [0.28384 -0.11029] [3 4]) |
| 22:33 | clojurebot | (0.8515199999999999 -0.44116) |
| 22:33 | bufferloss | nice :) |
| 22:33 | brehaut | (aka zipwith in other languages) |
| 22:36 | amalloy | ~zip |
| 22:36 | clojurebot | zip is not necessary in clojure, because map can walk over multiple sequences, acting as a zipWith. For example, (map list '(1 2 3) '(a b c)) yields ((1 a) (2 b) (3 c)) |
| 22:45 | devn | i cant brane good. i have a case of the dums |
| 22:46 | technomancy | dsrx: it was the sample project for the peepcode screencast I did on clojure |
| 22:47 | devn | i have a seq of maps: ({"foobar" #{"UNIQUE1" "UNIQUE2"}} {"foobaz" #{"UNIQUE1" "NOTINFOOBAR"}}) and I want to get something out like {"foobar" [{"foobaz" 1}]} |
| 22:48 | devn | where the output is a map from the the original thing to a vector of maps which contains the connecting thing ("foobaz") and the number of occurences of shared values |
| 22:48 | devn | basically i want to get back something that will show me how closely connected "foobar" is to "foobaz" and everything else in that sequence of maps |
| 22:49 | devn | by returning the number of matching occurences of values |
| 22:50 | devn | im thinking (count (clojure.set/union ...)) will be what i use |
| 22:51 | devn | maybe this is just loop recur? reduce perhaps? |
| 22:51 | devn | bleh. im dead right now. probably time for bed |
| 22:52 | devn | but if you are reading this and want to take a crack at it, im interested in basically finding how many occurences of a value are shared between all of these maps with sets as their vals |
| 22:54 | devn | so (find-it '({"a" #{1 2 3}} {"b" #{2 3 4}} {"c" #{3 4 5}})) => {"a" [{"b" 2} {"c" 1}]} |
| 22:54 | devn | that's the input/output im thinking |
| 22:54 | devn | cheers |
| 22:55 | xuser | http://clojure.org/lazy - does this document has next and rest backwards? |
| 23:05 | devn | bah i mis-spoke above |
| 23:05 | devn | i meant intersection |
| 23:09 | vimuser2 | when using defmulti/defmethod, is there a way to check to see if the the dispatcher value will be handled? |
| 23:09 | vimuser2 | oh getmethod mabey |
| 23:10 | vimuser2 | *get-method looks like it's the answer |
| 23:15 | technomancy | ,(require '[clojure.set :as clojure.string]) |
| 23:15 | clojurebot | nil |
| 23:15 | technomancy | ,clojure.string/union |
| 23:15 | clojurebot | #<set$union clojure.set$union@f78c3d> |
| 23:16 | technomancy | http://p.hagelb.org/10hair.gif |
| 23:16 | technomancy | that is all. |
| 23:17 | bbloom | who, i didn't realize that aliases could have dots in them, but i guess of course they can... |
| 23:18 | bbloom | in general, namespaces seem half baked despite being 100X better than anything python/ruby/javascript/etc can even think about offering |
| 23:18 | technomancy | inc |
| 23:19 | bbloom | #<core$inc clojure.core$inc@43350e24> |
| 23:19 | technomancy | that too |
| 23:22 | technomancy | half baked as opposed to 5%-baked |
| 23:22 | bbloom | or in the case js, negative baked |
| 23:22 | devn | technomancy: heh |
| 23:23 | devn | {} + [] |
| 23:23 | devn | like you do! |
| 23:23 | devn | ,clojure.set/union |
| 23:23 | clojurebot | #<set$union clojure.set$union@f78c3d> |
| 23:23 | devn | ,clojure.string/union |
| 23:23 | clojurebot | #<set$union clojure.set$union@f78c3d> |
| 23:23 | devn | ,clojure.string |
| 23:23 | clojurebot | #<CompilerException java.lang.ClassNotFoundException: clojure.string, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:24 | technomancy | ,clojure.string/replace |
| 23:24 | clojurebot | #<CompilerException java.lang.RuntimeException: No such var: clojure.string/replace, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:24 | devn | boggle |
| 23:24 | xeqi | haha |
| 23:24 | technomancy | heavens! where has it gone? |
| 23:24 | devn | ,clojure.string |
| 23:24 | clojurebot | #<CompilerException java.lang.ClassNotFoundException: clojure.string, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:24 | brehaut | bbloom: js doesnt even mix the ingredients. baking isnt even on the recipe |
| 23:24 | devn | ,clojure.string/union |
| 23:24 | clojurebot | #<set$union clojure.set$union@f78c3d> |
| 23:24 | technomancy | http://p.hagelb.org/mystery.gif |
| 23:24 | xeqi | ,(require '[clojure.string :as clojure.string]) |
| 23:24 | clojurebot | #<IllegalStateException java.lang.IllegalStateException: Alias clojure.string already exists in namespace sandbox, aliasing clojure.set> |
| 23:24 | devn | wow, that's nasty, but i mean, if you find yourself in that position |
| 23:24 | devn | you're absolutely fucking insane |
| 23:25 | brehaut | technomancy: do you have chords bound for all of these? |
| 23:25 | bbloom | ouch, now clojurebot is broken foreverz |
| 23:25 | xeqi | ,(require 'clojure.string) |
| 23:25 | clojurebot | nil |
| 23:25 | bbloom | or at least until it's next reboot |
| 23:25 | xeqi | ,clojure.string/union |
| 23:25 | clojurebot | #<set$union clojure.set$union@f78c3d> |
| 23:25 | devn | ,bbloom i think it cleans up after itself every 10min or something |
| 23:25 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: bbloom in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:25 | xeqi | heh |
| 23:25 | devn | ,(require [clojure.string :as clojure.string]) |
| 23:25 | clojurebot | #<CompilerException java.lang.ClassNotFoundException: clojure.string, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:26 | devn | ,(require '[clojure.string :as clojure.string]) |
| 23:26 | clojurebot | nil |
| 23:26 | bbloom | (def bbloom 'rules) |
| 23:26 | devn | clojure.string/replace |
| 23:26 | technomancy | brehaut: these are hand-typed, quality gif urls my friend |
| 23:26 | devn | ,clojure.string/replace |
| 23:26 | clojurebot | #<string$replace clojure.string$replace@1179aa5> |
| 23:26 | devn | there we go |
| 23:26 | bbloom | dev ##bbloom should work just fine now |
| 23:26 | devn | technomancy: artisanal |
| 23:26 | technomancy | http://p.hagelb.org/tastes-mature.png |
| 23:26 | brehaut | technomancy: i need to build my own keyboard for high speed linking then |
| 23:26 | devn | "hello? operator?" |
| 23:27 | devn | "yes, i need a sweet gif. thanks" |
| 23:27 | devn | that'd be a great service. call and speak to a real human who will provide you with one of their curated, artisanal, raw denim, lofi gifs |
| 23:28 | brehaut | technomancy: i imagine the shopkeeper has keyboard pants under that apron |
| 23:28 | devn | Swag narwhal VHS blog fingerstache. Butcher squid distillery polaroid, Truffaut chillwave brunch chia umami Bushwick forage irony mustache. 8-bit High Life quinoa Pinterest. Jean shorts locavore seitan pop-up sustainable. Roof party farm-to-table readymade, sustainable leggings mlkshk ennui Truffaut biodiesel 90's organic cardigan. |
| 23:29 | devn | http://hipsum.co/ |
| 23:29 | devn | hipster ipsum |
| 23:29 | technomancy | want to know what else is cool? |
| 23:29 | bbloom | devn: something about that girl's glasses offends me |
| 23:30 | brehaut | devn: its got to be. ive never seen truffaut twice in one paragraph before |
| 23:30 | bbloom | devn: maybe it's the black box on her nose |
| 23:30 | devn | bbloom: dude, that's so chillwave. |
| 23:30 | devn | super swag |
| 23:30 | technomancy | serving resources from disk normalizes double slashes in paths, but serving resources out of a jar does not. |
| 23:30 | technomancy | ._. |
| 23:30 | bbloom | devn: i'm such a hipster that i'm too cool to have ever heard any of this hipster stuff you're making fun of |
| 23:30 | devn | technomancy: noooooooooo |
| 23:31 | xeqi | technomancy: why u make double slashes? |
| 23:31 | devn | http://meettheipsums.com/ |
| 23:31 | devn | whoa. that is a lot of ipsums. |
| 23:31 | technomancy | xeqi: it wasn't me! |
| 23:32 | technomancy | well |
| 23:32 | technomancy | it might have been me in 2012 or something weird |
| 23:32 | technomancy | xeqi: https://github.com/technomancy/lein-survey/commit/7a33705b983f4bdfb31e7915e4d9030720b13044 |
| 23:33 | devn | "No, the, uh, police chief of Malibu. A real reactionary. Dude, please!… Is this your homework, Larry? No ma'am, I didn't mean to give the impression that we're police exactly. We're hoping that it will not be necessary to call the police. I just want to say, sir, that we're both enormous—on a personal level. Chinaman is not the preferred nomenclature. Asian-American. Please. We want that money, Lebowski." |
| 23:33 | devn | Lebowski Ipsum |
| 23:33 | devn | This makes me actually want to do front end work |
| 23:33 | technomancy | devn: the #emacs bot has a ,apropos-dude command |
| 23:33 | technomancy | it is invaluable |
| 23:34 | apricots | is it possible to derestructure a map partially and get the remainder at the same time? i'm aiming for something like (let [{:keys [a b & therest]} {:a 12 :b 34 c:56}] [a b therest]) => [12 34 {:c 56}] |
| 23:35 | technomancy | why do they never increment the last segment of the JDK version numbers? |
| 23:36 | guns | ,(alias 'clojure.set 'clojure.string) |
| 23:36 | clojurebot | nil |
| 23:36 | guns | ,clojure.set/join |
| 23:36 | clojurebot | #<string$join clojure.string$join@1a89909> |
| 23:36 | guns | nice |
| 23:36 | guns | what is this crap |
| 23:36 | xuser | are lazy-seqs delayed only when used at the top level of a function? |
| 23:38 | xeqi | apricots: you can use :as to get the original map ##(let [{:keys [a b] :as all} {:a 12 :b 34 :c 56}] [a b all]) |
| 23:38 | lazybot | ⇒ [12 34 {:a 12, :c 56, :b 34}] |
| 23:39 | apricots | xeqi: cool thanks |
| 23:40 | xeqi | xuser: lazy seqs are delayed until they are needed |
| 23:42 | vimuser2 | hm, when writing test code involving defmulti/defmethod, i often have to go through a couple of iterations before things are right..i run into an issue where i have to update a defmulti, but only way to do this is to ns-unmap it then re-def the methods and multi method….is there a better solution? |
| 23:43 | xuser | xeqi: yeah, I understand the concept, just having a hard time figuring out how they are used or work in clojure |
| 23:44 | guns | ,(ns-unalias *ns* 'clojure.set) |
| 23:44 | clojurebot | #<RuntimeException java.lang.RuntimeException: No such var: clojure.core/eval> |
| 23:44 | guns | ns impl is gross |
| 23:45 | xeqi | guns: yep, it also prevents some awesome classloader stuff I wanted to do |
| 23:45 | xeqi | since the loaded ns list is global |
| 23:48 | noprompt | $seen ddellacosta |
| 23:48 | lazybot | ddellacosta was last seen joining on clojure 2 hours and 49 minutes ago. |
| 23:48 | ddellacosta | noprompt: ping |
| 23:48 | noprompt | ddellacosta: hey sorry if i misunderstood your patch earlier. |
| 23:48 | ddellacosta | no problem, as I said I should have framed it different from the get-go |
| 23:49 | noprompt | ddellacosta: i think it's a good idea to expose a way to get the route, i just wanted to understand your problem clearly. |
| 23:49 | ddellacosta | that's what I get for being in a hurry |
| 23:49 | noprompt | hahah |
| 23:49 | noprompt | no sweat |
| 23:49 | ddellacosta | noprompt: :-) |
| 23:49 | technomancy | vimuser2: I usually put (def mymulti nil) before defmulti during development |
| 23:49 | ddellacosta | noprompt: yeah, so, I'm in a meeting but let me ping you when I'm done if you're around |
| 23:49 | ddellacosta | noprompt: (otherwise we can just keep talking via the github thread, whatever) |
| 23:49 | noprompt | ddellacosta: i'll stick around just for you ;) |
| 23:50 | noprompt | ddellacosta: nah, let's chat here, it's more efficient |
| 23:50 | ddellacosta | noprompt: thanks! |
| 23:50 | noprompt | :) |
| 23:50 | ddellacosta | k |
| 23:50 | vimuser2 | technomancy: hmm, thanks |
| 23:55 | noprompt | Raynes: omg. is the file/join shit ever gonna end... |