2016-03-04
| 00:46 | michaelrose | so stupid question time, I'm just starting to learn clojure and know some basic stuff however I'm not going to have a proper internet connection for probably a matter of weeks at least is it reasonable to just download a copy of clojars so that if I decide to check out insert library here I have a local copy of some relatively recent version of it? |
| 00:50 | TimMc | michaelrose: That would do part of the job -- but there are plenty of things on Maven Central that you'd need as well. |
| 00:51 | michaelrose | how much space would be required for both? |
| 00:53 | TimMc | Good question! |
| 00:54 | michaelrose | so resyncing clojars data part of the way through afterglow and at 500MB |
| 00:54 | TimMc | OK, just my personal computer's .m2/repository is 435 MB, for reference. |
| 00:54 | michaelrose | but there is no reason to suppose anything should be evenly distributed |
| 00:55 | TimMc | right |
| 00:55 | TimMc | and my work computer's m2 is 3.6 GB |
| 00:56 | TimMc | We're probably talking in the 100s of GB range. |
| 00:56 | yonatankoren | michaelrose: I did most of the 4clojure problems and that was really fun and taught me a lot about the language. You can download the website from github and run it on your local machine. I highly recommend you do that. |
| 00:57 | yonatankoren | michaelrose: The website gives you a bunch of challenges and verifies your answers |
| 00:57 | michaelrose | kinda wanted to do more than misc exercises but perhaps I should just peruse some stuff and pick up things I would be most likely to be useful |
| 00:57 | yonatankoren | michaelrose: and they're not dead-simple problems or narrow problems either, they allow you to be very creative at times and in my opinion it's a great way to learn the language |
| 00:59 | yonatankoren | michaelrose: it all depends on what you wanna be coding. If you have ideas in mind for programs you wanna create then go right ahead and jump into it. But my recommendation is clone the repo and have apache handy anyways before you leave your internet access |
| 00:59 | yonatankoren | you may change your mind and try them later |
| 01:04 | TimMc | michaelrose: Heh, I let myself get sidetracked by the question of how much of clojars + central would you have to download to get good coverage. yonatankoren is right, just get a set of tutorials or problem sets to play with. :-) |
| 01:05 | amalloy | yonatankoren: note that 4clojure's problem set is stored in a database, not in the source on github. there's a "starter kit" of problems in the source you can use when debugging, but it's not all of them |
| 01:05 | yonatankoren | amalloy: oh... Didn't know that. Oh and thanks for creating 4clojure lol, I had a lot of fun with it |
| 01:06 | yonatankoren | amalloy: So what would you recommend if you were to try doing all the problems offline? |
| 01:06 | amalloy | download https://github.com/aengelberg/lein-4clj and write a quick little script that uses it to download all the problems in advance |
| 01:07 | amalloy | though it looks like it doesn't download the problem descriptions, which is a bit of a bummer |
| 01:08 | michaelrose | I'm checking out the idea of running a local copy of 4clojure |
| 01:09 | amalloy | and there are quite a few problems in the starter kit; you could get some mileage out of running a local copy |
| 01:09 | amalloy | you wouldn't do all the problems, but you'd do a lot |
| 01:09 | yonatankoren | doing all the problems would take a few months unless you go full hermit |
| 01:10 | yonatankoren | well... in my schedule it looks like it would take months |
| 01:10 | yonatankoren | maybe i'm not hardcore enough |
| 01:11 | michaelrose | so if I add libraries foo bar and baz to a test project and run a repl it will cache a local copy of everything and then I can use lein's offline variable to ensure lein doesn't hang forever trying to go online right? |
| 01:11 | michaelrose | LEIN_OFFLINE |
| 01:12 | amalloy | that's the idea, yeah |
| 01:13 | michaelrose | well I guess with a decent set of problems, supply of books, and enough downloaded to enjoyably test the above I should be able to stay occupied without internet access for some weeks |
| 01:17 | yonatankoren | michaelrose: are you a geologist? |
| 01:17 | michaelrose | no a povertologist |
| 01:19 | michaelrose | aka known as working in the retail sector, wifes out of work due to health issues, hours are garbage atm, and internet is expensive here |
| 01:20 | michaelrose | costs $80 for 12Mbps dsl |
| 01:21 | yonatankoren | michaelrose: Ah i see |
| 01:22 | yonatankoren | Hope you enjoy Clojure though, it's a wonderful language. Really good community and also 4clojure is an amazing problem set |
| 01:22 | yonatankoren | oh and that all is well in your personal life |
| 01:25 | michaelrose | its ok just not rich in material goods |
| 01:25 | michaelrose | building the prerequisites to running 4clojure locally |
| 02:12 | renl | in play-clj how do i draw an additional dot in an existing shape? |
| 03:07 | renl | hi im trying to expand an vector into a macro's argument list, I tried (eval (concat '(thatmacro) [args...])) but i get this Caused by: java.lang.RuntimeException: Unable to resolve symbol: shape in this context, where shape is the macro |
| 03:45 | michaelrose | experiencing a tad bit of trouble running 4clojure locally |
| 03:47 | michaelrose | mongod dies complaining that data/db doesn't exist, there is a load-data.sh but it fails for lack of connection to mongo I think |
| 04:04 | michaelrose | oh duh it needs /data/db to exist not a data/db inside the project dir |
| 04:15 | michaelrose | ok so I can run 4clojure and interact with the website with my browser but I get java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader") trying to run anything |
| 04:17 | amalloy | michaelrose: follow the steps in the readme |
| 04:17 | amalloy | specifically you have neglected to follow the third bullet point in https://github.com/4clojure/4clojure#setup-instructions-for-running-locally |
| 04:17 | michaelrose | actually I did |
| 04:18 | michaelrose | actually I may have made a small typo |
| 04:19 | amalloy | haha |
| 04:20 | michaelrose | lol right I didn't just not bother to read and expect you to read it to me though |
| 04:20 | amalloy | you'd be surprised |
| 04:32 | michaelrose | whoah uses a gig of ram |
| 04:39 | qsys | hey... anyone got datomic running on openshift? - if so, how? I'm running into https://groups.google.com/forum/#!searchin/datomic/openshift/datomic/Dvf8B3-ZMFQ/IHJybXb9jngJ , but there doesn't seem to be a solution |
| 04:40 | qsys | - or maybe I should ask this in datomic chat :p |
| 04:40 | lokien_ | Hello guys. How big can one atom be? |
| 04:41 | lokien_ | Will it collapse when I overload it with data? |
| 04:43 | amalloy | michaelrose: just set your -Xmx to something reasonable |
| 04:43 | michaelrose | so did notice that the local copy doesn't have the exact same problem set though |
| 04:43 | amalloy | 4clojure doesn't need anywhere near a gig of ram, but if you let java have as much memory as it wants it'll take a lot |
| 04:45 | lokien_ | amalloy: really? sweet! |
| 04:45 | amalloy | the real server runs with -Xmx80m i think, but a development copy can easily run with -Xmx40m |
| 04:46 | amalloy | even the real server should be fine with 40m, but there's some dumb code that runs at startup that uses a bunch of unnecessary memory |
| 04:48 | lokien_ | ah, it wasn't for me |
| 04:53 | michaelrose | ok dataset.clj is where the problems are stored |
| 04:56 | schmir | lokien_: don't worry. atom's take any value you put into them. |
| 05:05 | michaelrose | so maybe I'm missing something but the official 4clojure has more problems but I don't quite see how additional sources would be configured |
| 05:09 | lokien_ | schmir: even like 80-meg nested vector? |
| 05:44 | schmir | lokien_: sure. the only problem you may run into is when updating concurrently from multiple threads (and if those updates conflict, i.e. have to be retried) |
| 05:58 | lokien | schmir: thanks! |
| 07:49 | nicola1 | i'm generating a java class with :gen-class, and i'm having trouble figuring out how to specify a function's argument as "list of strings"; any idea where to look? |
| 07:53 | nicola1 | i could cheat i guess and write (type (into-array [""])) |
| 07:53 | nicola1 | but is there a better solution? |
| 07:54 | nicola1 | (actually no, that's an array, not a list) |
| 08:00 | nicola1 | from what i understand, i can say java.util.List, but can't really express java.util.List<String> |
| 08:08 | hyPiRion | nicola1: Do you want an array or strings, or a list of strings? |
| 08:09 | hyPiRion | Ah, well, I guess this should answer your question: http://stackoverflow.com/questions/3688730/how-to-pass-a-typed-collection-from-clojure-to-java |
| 08:10 | hyPiRion | Clojure has no explicit way to handle generics, as it works directly on the jvm. Only Javac handles generics, but that's in the compilation phase, and it's not stored in the runtime |
| 08:10 | hyPiRion | runtime code* |
| 08:34 | nicola1 | thanks hyPiRion |
| 08:35 | nicola1 | for now i'm settling on assuming that the caller knows the return type |
| 08:35 | nicola1 | pretty much the map is always string to double, sometimes to array |
| 08:36 | nicola1 | but the interface trick seems very interesting! |
| 08:41 | hyPiRion | Yeah, that's usually fine, at least from my experience |
| 09:19 | Akabander | Anyone up for answering a Liberator question? |
| 09:21 | Akabander | We're trying to figure out how to get a response back from a POST request. It seems like only GET resources actually send a response back through :handle-ok |
| 09:22 | Akabander | We can execute code via the resource using the :post! clause and print params to the REPL from inside the code, but it doesn't return anything to the curl that made the connection. |
| 09:31 | brokenrobot | I pulled in a Java dependency, and when I try to import it I get the Unsupported majjor.minor version 52.0 error. Any tips on how I can fix this (using leinigen, cursive) |
| 09:33 | ridcully | brokenrobot: the thing is built with java 8 |
| 09:33 | ridcully | you are running it with java < 8 |
| 09:35 | brokenrobot | ridcully: thanks, how can I change it to run in java 8? is that a setting in leinigen, or is that the environment variable lein_java_cmd? |
| 09:38 | brokenrobot | ach, was in ~/.lein/profiles.clj |
| 10:41 | sdegutis | Hi yall. |
| 10:41 | Sys32 | Greeting |
| 11:10 | sdegutis | How are you. |
| 11:11 | justin_smith | nicola1: wait, array or string? with array your type is "[Ljava.lang.String;" (inside quotes because of the unbalanced brace), for List it's java.util.List |
| 11:11 | justin_smith | err, I mean array or list of course |
| 12:57 | sdegutis | Well, look. |
| 12:57 | sdegutis | See, it's just that. |
| 13:03 | sdegutis | Hi. |
| 13:10 | WorldsEndless | I have a javadoc jar file. I want to read some javadocs. What should I do? |
| 13:20 | justin_smith | WorldsEndless: have you checked out the stuff in clojure.java.javadoc? |
| 13:21 | justin_smith | ,(require 'clojure.java.javadoc) |
| 13:21 | clojurebot | #error {\n :cause "denied"\n :via\n [{:type java.lang.ExceptionInInitializerError\n :message nil\n :at [java.lang.Class forName0 "Class.java" -2]}\n {:type java.lang.SecurityException\n :message "denied"\n :at [clojurebot.sandbox$enable_security_manager$fn__835 invoke "sandbox.clj" 69]}]\n :trace\n [[clojurebot.sandbox$enable_security_manager$fn__835 invoke "sandbox.clj" 69]\n [clojurebo... |
| 13:21 | justin_smith | :P |
| 13:22 | justin_smith | WorldsEndless: clojurebot won't cooperate, but there's a function clojure.java.javadoc/add-local-javadoc that likely helps |
| 13:22 | justin_smith | and then clojure.java.javadoc/javadoc |
| 13:39 | sdegutis | How are you tho |
| 13:39 | sdegutis | where'd lazybot go? |
| 13:55 | OscarZ | when do you need letfn ? i have some trouble understanding the docs |
| 13:56 | rcassidy | letfn gives you the ability to define mutually recursive functions |
| 13:57 | rcassidy | aka two functions that each reference each other. |
| 13:58 | OscarZ | oh i see.. they will be just local functions visible inside body of letfn ? |
| 13:59 | OscarZ | theres no other use case except mutually recursive functions? |
| 14:00 | sdegutis | OscarZ: mutually recursive anonymous functions |
| 14:00 | sdegutis | OscarZ: correct, that's the only use |
| 14:00 | sdegutis | OscarZ: if you need two mutually recursive functions but they can be named, defn is still sufficient |
| 14:01 | sdegutis | OscarZ: and if you need one recursive anonymous function, you can give (fn) a name, like (fn foo [x] (if (pos? x) x (foo (dec x)))) |
| 14:01 | sdegutis | ,((fn foo [x] (if (neg? x) x (foo (dec x)))) 10) |
| 14:01 | clojurebot | -1 |
| 14:02 | amalloy | haha, i know it's only an example, but that is a pretty funny recursive function |
| 14:02 | sdegutis | amalloy: which one, the broken one or the working one? |
| 14:02 | amalloy | the broken one |
| 14:02 | sdegutis | amalloy: the broken one's funny cuz its broken, that's for sure |
| 14:02 | sdegutis | amalloy: otherwise i dont see whats funny about the working one |
| 14:02 | OscarZ | i thought that with defn you need to introduce all other functions above where you use it |
| 14:03 | sdegutis | OscarZ: no, you can use (declare) to fix that |
| 14:03 | sdegutis | OscarZ: or just def nil probably |
| 14:03 | OscarZ | ok |
| 14:03 | amalloy | (def nil (fn [x] (inc x)) |
| 14:04 | sdegutis | ,(do (declare foo) (defn bar [x] (foo x)) (defn foo [x] (if (pos? x) (bar (dec x)) x)) (foo 10)) |
| 14:04 | clojurebot | 0 |
| 14:04 | sdegutis | I have no idea how to do recursion properly as you can plainly see. |
| 14:04 | sdegutis | But I can fake it well enough to pass an interview, so meh. |
| 14:05 | OscarZ | ok i see |
| 14:08 | sdegutis | do you? |
| 14:08 | sdegutis | do you really? |
| 14:08 | sdegutis | OscarZ: pop quiz: how do you define an anonymous recursive function in Clojure? |
| 14:09 | OscarZ | ok i see a glimmer of light in the end of the tunnel :) |
| 14:09 | OscarZ | i ment i understood the declare part :) |
| 14:11 | OscarZ | i dont know how to do anonymous recursive .. i suppose i kinda understand how the letfn works with named functions |
| 14:13 | sdegutis | OscarZ: hint: i just explained it |
| 14:15 | TMA | ,((fn [x] (x 1)) (fn [x] (+ x 2))) |
| 14:15 | clojurebot | 3 |
| 14:15 | TMA | sdegutis: why, with Y combinator of course |
| 14:15 | sdegutis | TMA: sorry i dont know what that is |
| 14:16 | sdegutis | TMA: also your example really confuses me please use proper indentation and lines for enhanced readability thanks |
| 14:17 | OscarZ | sorry which one was anonymous recursive ? |
| 14:19 | OscarZ | i misunderstood.. i was thinking mutually recursive anonymous :) yeah i understood the (fn foo [x] ...) thing |
| 14:19 | sdegutis | OscarZ: ok |
| 14:20 | sdegutis | TMA: that's kind of neat how that works |
| 14:20 | sdegutis | TMA: why is that such an important line of code? |
| 14:21 | rcassidy | because recursion! |
| 14:22 | TMA | sdegutis: that is not the y-combinator ... that was just a quick test for me to make sure clojure is a lisp-1 and that there is no gotcha |
| 14:22 | sdegutis | TMA: oh. well there kinda is a gotcha |
| 14:22 | sdegutis | TMA: i mean, name-resolution has some gotchas |
| 14:23 | sdegutis | TMA: the clojure-code "foo" seems to translate into "(var-get '#foo)" or something at compile-time |
| 14:23 | sdegutis | TMA: so that if you update the root of foo, all instances of "foo" in the code reflect the new one |
| 14:24 | TMA | ,( ( (fn [f] ((fn [x] (f (x x))) (fn [x] (f (x x))))) (fn [fact n] (if (< n 1) 1 (* (fact (dec n)) n))) ) 4) |
| 14:24 | clojurebot | #error {\n :cause nil\n :via\n [{:type java.lang.StackOverflowError\n :message nil\n :at [sandbox$eval53$fn__54$fn__57 invoke "NO_SOURCE_FILE" -1]}]\n :trace\n [[sandbox$eval53$fn__54$fn__57 invoke "NO_SOURCE_FILE" -1]\n [sandbox$eval53$fn__54$fn__57 invoke "NO_SOURCE_FILE" 0]\n [sandbox$eval53$fn__54$fn__57 invoke "NO_SOURCE_FILE" 0]\n [sandbox$eval53$fn__54$fn__57 invoke "NO_SOURCE_FILE" ... |
| 14:29 | sdegutis | TMA: wowsers |
| 14:29 | TMA | oh, I transcribed it in a pointless style, which in clojure it is not posible |
| 14:29 | TMA | *pointfree |
| 14:29 | postpunkjustin | same difference |
| 14:33 | TMA | ,( ( (fn [g] ((fn [f] (g (fn [x] ((f f) x)))) (fn [f] (g (fn [x] ((f f) x)))))) (fn [fact] (fn [n] (if (< n 1) 1 (* (fact (dec n)) n)))) ) 4) n)))) ) 4) |
| 14:33 | clojurebot | 24 |
| 14:34 | TMA | the abomination (fn [g] ((fn [f] (g (fn [x] ((f f) x)))) (fn [f] (g (fn [x] ((f f) x)))))) is the Y-combinator |
| 14:34 | TMA | the (fn [fact] ...) is a factorial generator |
| 14:36 | TMA | it is a function, that takes a function and returs another such that if you provide a factorial function as an input, you get factorial function as an output, hence factorial is a fixed point of the generator |
| 14:37 | TMA | the Y-combinator is a function that gets a generator and returns its fixed point |
| 14:39 | TMA | sdegutis: there is no free variable (not counting cojure.core/if clojure.core/< ...) so there shall be no problem with var-get getting into way |
| 14:40 | fantazo | when would someone need a y-combinator in real life? |
| 14:42 | TMA | fantazo: real word usage is exceedingly rare. I gather it might prove useful in certain limited circumstances like exploit payload |
| 14:42 | fantazo | exploit payload? |
| 14:42 | TMA | fantazo: on the other hand, it might even be useful somewhere in compiler guts |
| 14:43 | justin_smith | fantazo: when you haxor someones computerz you need to make it run your code, which is in the payload, and needs to be injected into some context |
| 14:43 | TMA | fantazo: if clojurebot were more restricted (say disallowing named fns, def, defn, ...) you could still make use of recursive functions |
| 14:43 | fantazo | what are good reading resources for picking up concepts like the y-combinator? I only now it from the name, but I haven't yet understood it. |
| 14:45 | fantazo | ok, I wasn't sure if you use a different meaning of "exploit payload" or the common one. |
| 14:45 | ystael | fantazo: have you read 'Structure and interpretation of computer programs'? that's where I learned my lisp basics, anyway |
| 14:46 | fantazo | ystael, I had that book open multiple times, but I found it too boring to actually read it. |
| 14:47 | ystael | well, if you're interested in learning more about things related to the Y combinator and other foundational ideas of lambda calculus/functional programming, but you found SICP boring, I don't know what to tell you |
| 14:47 | TMA | fantazo: it is quite hard to understand. I thought I had understood it in the past but now, it is as arcane as it was in the beginning |
| 14:48 | TMA | fantazo: this is as easy derivation as you can possibly get: http://dangermouse.brynmawr.edu/cs245/ycomb_jim.html [it is in scheme, so read (lambda (a...) b...) as (fn [a...] b...) if you need clojure] |
| 14:49 | aep-shoutlet | how do i dynamically query the current namespace? e.g. (println namespace) should print "boo" inside of a (ns boo) clojure file |
| 14:50 | ystael | fantazo: If you're interested specifically in studying functional programming languages and their implementation from a structural perspective, you could try Friedman & Wand, Essentials of programming languages |
| 14:50 | ystael | they get fairly foundational about recursion, its meaning and its practical realization |
| 14:50 | hiredman | aep-shoutlet: the "current namespace" is only a thing for compilation |
| 14:51 | aep-shoutlet | is there a way to access the current clojure class? |
| 14:51 | hiredman | aep-shoutlet: what do you mean by that? |
| 14:51 | aep-shoutlet | clj equivalent of this.getClass().getSimpleName() ? |
| 14:51 | hiredman | aep-shoutlet: every clojure function is compiled to its own class |
| 14:52 | TMA | fantazo: you can use modified combinator like in this example for logging and memoization http://www.viksit.com/tags/clojure/practical-applications-y-combinator-clojure/ |
| 14:52 | aep-shoutlet | can i get the namespace of the current function? |
| 14:52 | hiredman | aep-shoutlet: functions don't have a namespace |
| 14:52 | TMA | fantazo: but the vanilla Y is rare |
| 14:52 | hiredman | aep-shoutlet: names are namespaced, and functions are values that van be bound to names |
| 14:53 | aep-shoutlet | high level goal: have a Clojure CLI program know how to print its own name, e.g. for usage messages |
| 14:53 | aep-shoutlet | rather than hardcoding it |
| 14:54 | hiredman | what does the name of the executable (the cli program name) have to do with namespace names? |
| 14:54 | aep-shoutlet | meh, i'll use http://stackoverflow.com/questions/9694754/clojure-how-to-get-the-path-of-a-running-jar-root-source-directory/13276993#13276993 for now |
| 15:01 | fantazo | hmm, maybe I should try a epub version of sicp and not trying to read a webpage. I don't like it to read long webpages. |
| 15:04 | aep-shoutlet | is there a way to prevent -main from leaking out of a ns into another ns? like a ns excludes list? |
| 15:04 | hiredman | what does that mean? |
| 15:04 | aep-shoutlet | or :use x.y.z but hide some function f? |
| 15:05 | hiredman | don't use :use |
| 15:05 | hiredman | use :require |
| 15:05 | sdegutis | Also, prefer :as |
| 15:05 | sdegutis | I wish I'd learned that years ago, cuz :as is way better than :refer [...] |
| 15:06 | sdegutis | And everything is better than :refer :all, since that's basically :use. |
| 15:08 | aep-shoutlet | require with as works like a charm |
| 15:08 | sdegutis | Yeah it's great. |
| 15:08 | rcassidy | there's also :refer with :exclude |
| 15:08 | rcassidy | just in case! |
| 15:08 | sdegutis | rcassidy: but.. but... |
| 15:09 | rcassidy | i'm actually still learning the nuances on this so feel free to edumacate me |
| 15:11 | sdegutis | rcassidy: I've used :refer [...] for a few years almost exclusively, and it's had problems |
| 15:11 | sdegutis | rcassidy: for one thing, the (:require) block gets ridiculously, unreasonably wide |
| 15:12 | sdegutis | rcassidy: also, if you have a clash between symbol-names between different namespaces, it gets ugly and you either have to rename things (sometimes with an ugly prefix), or just switch to using :as for that one require |
| 15:12 | sdegutis | rcassidy: and then there's the fact that it can become difficult to know where something is defined while looking in the source file that uses the refer'd symbols |
| 15:12 | rcassidy | makes sense! |
| 15:13 | sdegutis | I much prefer doing like (:require [cleancoders.util.css :as css]) and then later (css/transform ["h3" {:font-size "150%"}]) for a few reasons |
| 15:13 | rcassidy | the code i'm working with mostly uses :require, I was just looking around the clojure docs for ways to explicitly exclude particular names |
| 15:13 | rcassidy | yep, that's the form i'm used to as well. |
| 15:13 | sdegutis | One major benefit is that this style allows you to keep your symbol names real short, like (transform). |
| 15:14 | sdegutis | Otherwise it'd have to be something dumb like (defn transform-css [...] ...) |
| 15:14 | sdegutis | Perhaps I should just write stuff in blogs instead of in giant blocks on IRC |
| 15:14 | sdegutis | But the problem with that is nobody would see it, whereas at least in IRC about 3 people end up reading it. |
| 15:15 | rcassidy | heh |
| 15:15 | rcassidy | heh |
| 15:15 | rcassidy | oops |
| 15:15 | amalloy | joke's on you, sdegutis, i shadowbanned you long ago. nobody can see what you write |
| 15:15 | sdegutis | amalloy: that explains a lot |
| 15:16 | milia | amalloy: who are you talking to ? |
| 15:16 | milia | ah, ok |
| 15:18 | lokien | sdegutis: start a blog! start a blog! |
| 15:18 | sdegutis | lokien: no. |
| 15:18 | lokien | sdegutis: sadface.png |
| 15:18 | sdegutis | lokien: meh.png |
| 15:19 | rcassidy | start a blog that's explicitly IRC log snippets |
| 15:19 | sdegutis | ok |
| 15:20 | lokien | like.. bash.org? |
| 15:20 | rcassidy | no, like, sdegutils explains clojure line by line |
| 15:20 | sdegutis | oh man |
| 15:20 | sdegutils | how could i forget |
| 15:20 | lokien | sdegutils: :D |
| 15:22 | lokien | rcassidy: I'm sure many people would pay for that |
| 15:22 | sdegutils | Technically I have sdegutis.github.io |
| 15:22 | sdegutils | But that was a stupid idea. |
| 15:24 | lokien | sdegutils: I'd read that and became sad because of too little things to read :/ |
| 15:24 | lokien | like, no 2016 stuff |
| 15:24 | sdegutils | lokien: lol you actually read that? |
| 15:24 | sdegutils | man, you must b bored |
| 15:24 | lokien | sdegutils: no, I wanted to read something cool |
| 15:25 | sdegutils | How's Github Pages as a blog engine lately? |
| 15:25 | sdegutils | Is it easier than it used to be yet? |
| 15:26 | lokien | sdegutils: you can use something like this guy, static blog in haskell https://artyom.me/ |
| 15:26 | sdegutils | lokien: way too much work plus not compatible with github pages and not having to install anything locally |
| 15:27 | rcassidy | been meaning to put a blog on rcassidy.net but haven't yet |
| 15:27 | sdegutils | rcassidy: you can do it! i believe in u! |
| 15:27 | rcassidy | maybe I will!! |
| 15:27 | rcassidy | all that's on there now is an old doodle |
| 15:28 | lokien | sdegutils: 'kay >:c |
| 15:39 | TimMc | rcassidy: One of these days I'm going to replace my WordPress blog with a static site. |
| 15:40 | TimMc | maybe a Clojure-based generator |
| 15:42 | sdegutils | TimMc: why not just use github pages like everyone else? |
| 15:43 | TimMc | "everyone else" |
| 15:43 | sdegutils | yep |
| 15:43 | sdegutils | and i stand by it |
| 15:44 | TimMc | Because I like having some modicum of control over my words and expression and URLs. |
| 15:44 | aep-shoutlet | help, this hangs: (defn -main [& args] (doall (pmap print "Hello World!\n"))) |
| 15:44 | TimMc | As it is now, it's just between me and my hosting provider. |
| 15:44 | sdegutils | TimMc: github pages doesnt not give yo uthose |
| 15:44 | rcassidy | I loved how all the NEU profs used weird racket site generators for their neu.edu pages. |
| 15:44 | sdegutils | TimMc: ok whatever floats your boat |
| 15:45 | sdegutils | aep-shoutlet: why are you using pmap? |
| 15:45 | amalloy | aep-shoutlet: google around for "shutdown-agents" |
| 15:45 | aep-shoutlet | it's just a hello world exercise, printing each char in parallel (scrambled) |
| 15:45 | sdegutils | aep-shoutlet: and why are you using doall? and why print? |
| 15:45 | amalloy | you'll find many people with the same question, and some good answers |
| 15:45 | sdegutils | oh |
| 15:45 | sdegutils | ok |
| 15:45 | amalloy | you forgot to ask why -main |
| 15:46 | aep-shoutlet | this used to work in an earlier clojure version, maybe 1.7 changed things? |
| 15:48 | amalloy | aep-shoutlet: it behaves exactly the same as it did before. it prints all the things, and then it waits around for a minute or two, and then your program finishes |
| 15:48 | aep-shoutlet | amalloy: with gradle, it mostly just hangs on silent output |
| 15:49 | amalloy | gradle? huh? |
| 15:49 | aep-shoutlet | after about 60 seconds, it finally quits, still no output. do i need a flush or two in there? |
| 15:49 | amalloy | oh, yeah, since you're using print instead of println |
| 15:49 | amalloy | System/out flushes on newlines by default |
| 15:51 | aep-shoutlet | just needed flush, thanks |
| 16:03 | cortexman | can a let bound variable be modified by a function without re-letting it? |
| 16:03 | justin_smith | it cannot be modified period |
| 16:03 | justin_smith | re-letting is simply shadowing, it doesn't change it, just hides it |
| 16:04 | justin_smith | ,(let [a 0 b (inc a) a 2] b) |
| 16:04 | clojurebot | 1 |
| 16:04 | cortexman | in order to avoid side effects (ie an atom) i am doing (let [some-lookup-table {} ... |
| 16:04 | cortexman | i have some redundant code that is interacting with this lookup table (i.e., assoc'ing to it), that i'd like to wrap up |
| 16:04 | cortexman | in a defn |
| 16:05 | justin_smith | best bet is usually to make another binding in the same let block, using the return value of a function |
| 16:07 | justin_smith | ,(let [m0 {} m1 (assoc m0 :a 0) m2 (assoc m1 :b 2)] [m0 m1 m2]) |
| 16:07 | clojurebot | [{} {:a 0} {:a 0, :b 2}] |
| 16:08 | cortexman | specifically the if sections |
| 16:08 | cortexman | hmm. |
| 16:47 | Kamuela | i think clojure has made me think about how almost any good language is domain specific |