#clojure log - May 14 2016

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

5:37 lnostdal: hi guys, i'm doing some computations in Clojure and have found direct linking to be beneficial in some cases .. tho i wonder if there's some ^:directly-linked type flag or similar i could use on my Fns instead of specifying that *all* shall be directly linked via "-Dclojure.compiler.direct-linking=true" ....?

5:38 i notice this: "As of Clojure 1.8, the Clojure core library itself is compiled with direct linking." .. so i suppose it can be specified with some particular granularity somehow

5:44 perhaps it's just on a project basis

5:44 a per project*

5:46 dysfun: https://github.com/clojure/clojure/blob/master/build.xml#L57

5:48 lnostdal: yup, clojure core is built with that activated by default now

5:48 dysfun: i actually know nothing of direct linking, i just know where to go looking

5:49 well that is how the mechanism works, a system property

5:49 lnostdal: dysfun, it's pretty interesting concept; https://gist.github.com/lnostdal/c38899f42d983a786049 .. but it is a pretty big and fundamental change for all your code

5:49 dysfun: presumably you can get it down to a per-file basis if you're clever and willing to mess about

5:51 right. direct linking is not something you'd want enabled at the repl

5:52 lnostdal: anyway, i do see ^:redef mentioned in places .. but that sort of goes the other way .. ..i'd sort of like a "whitelist" instead of a "blacklist"....sotosay

5:53 dysfun: right, well you'll probably have to wait for america to wake up before someone who might know is here

5:53 lnostdal: :)

6:38 dysfun, just noticed the clojure.core/*compiler-options* dynamic var .. perhaps rebinding that on per-file basis or something would work .. anyway, will explore further

6:39 http://clojure.org/reference/compilation#_compiler_options

7:22 Townsie: So I have a game world state (world) , which I evaluate the next step of, using (update-world (world)), so I can do things like (nth (iterate update-world (world)) 100)

7:23 update-world does things like add, update and prune entities. I want to be able to get a vector of strings of events that happened to these entities as I evaluate update-world

7:23 I summarized my problem here http://stackoverflow.com/questions/37225385/for-a-function-that-updates-a-world-state-i-want-to-return-a-vector-of-string

7:23 Would really like some design input.

7:27 dysfun: make update-world return a vector of [world strings]

7:29 Townsie: dysfun: I thought about that, but then a lot of the cleanliness breaks when I don't simply return the new thing from these update functions.

7:30 dysfun: c'est la vie

7:30 you can also use a map

7:30 Townsie: Yeah

7:32 dysfun: you know you can use (let [[world strings] (update-world world)] ...) right?

7:33 Townsie: Right, but for update-entity that to would then return [entity strings], and so too with prune-entities.

7:33 How to collect all of those then and return them in update-world?

7:34 Is this something I could use dynamic binding for?

7:34 Like have an *events* that update-entity could write to?

7:35 dysfun: no, i don't think dynamic binding would be helpful here

7:36 and the way i would do it is the long way

7:36 Townsie: Yeah, I'll try it.

8:54 OscarZ: im still a bit confused about :require and :use in (ns ...) ... some libraries have their examples using :use and some :require, how do you make the choice which one to use ?

8:55 luma: choose require

8:59 OscarZ: why?

8:59 clojurebot: why is startup slow is busy compiling the `for` macroexpansion

9:01 ilevd: About 3 weeks ago somebody posted an article about Clojure tips, eg don't use pmap, use core.async. Did anybody save it?

9:03 dysfun: luma: use is unfashionable these days

9:04 TimMc: in much the same way that not washing your hands before surgery is unfashionable

9:04 dysfun: actually TimMc that's the law

9:04 TimMc: :-)

9:05 * TimMc writes a linter called the-law

9:05 dysfun: "i fought the law and the law won"

9:05 TimMc: OscarZ: When you use :use, it becomes very difficult later to tell what the symbols in your code are referring to.

9:05 dysfun: keyword :fight in the config map will be a no-op

9:05 OscarZ: yeah i remember reading that you should use require but then these seemingly nice libraries (presumably coded by experienced clojurists) have their examples using "use".. was just wondering if theres legit use for "use" :)

9:05 dysfun: TimMc: except for :only

9:06 TimMc: OscarZ: :use is great for the REPL

9:06 dysfun: TimMc: :fight? :thats-right

9:06 TimMc: except then when you copy stuff into your source files, you have to go in and qualify all the vars anyhow

9:06 I don't even use :use in tests anymore.

9:06 dysfun: yeah this

9:06 OscarZ: sure ok..

9:06 dysfun: i just alias to single characters

9:07 TimMc: OscarZ: So basically just use :require all the time, and if that becomes really painful, use :refer [some syms] to pick out a few that you want to use unqualified for some reason.

9:08 OscarZ: ok thanks

9:08 TimMc: (:use refers everything by default; it supports :only to similarly narrow it down)

9:08 dysfun: also :exclude

9:13 ilevd: I've found https://rasterize.io/blog/clojure-the-good-parts.html

9:14 TimMc: Such a cheeky title, but good post.

9:20 shiranaihito: i'm kind of uncomfortable with this: "Clojure users - schema all the things. Schema. All. The. Things."

9:20 like.. "i don't wanna" :P

9:21 dysfun: yeah, i don't put too much by that

9:21 'check your data' is a better general rule

9:22 shiranaihito: basically i can't help but wonder if the lack of static typing is such a big problem that we all be should using Haskell instead :)

9:22 dysfun: i don't think so at all, and i do program haskell

9:22 shiranaihito: i accidentally a sentence there and my keyboard is acting up

9:22 oh? what's your take on the pros and cons between Clojure and Haskell

9:24 dysfun: clojure is very 'get things done', haskell is very 'feel good that it's correct'

9:24 shiranaihito: :P:P

9:24 that certainly sounds comforting :)

9:24 any details? :)

9:25 dysfun: well i know which one i'd rather build a business on

9:25 shiranaihito: i take it that would be Clojure, then

9:25 dysfun: it would. although i will soon be deploying haskell to production as well

9:25 shiranaihito: that's what i'm doing btw

9:25 hm

9:26 oh, what did you mean with "check your data"

9:26 dysfun: i mean check to see your expectations of it are met. that's what a type system does, it's what predicate functions do

9:27 for example in scheme the rule is "start functions with 'if'"

9:29 shiranaihito: hmm

9:30 yeah well, i guess i'm doing something like that out of habit, but it's felt more unwieldy than with Java and other imperative languages

9:30 sooo.. i think i've been doing it less

9:30 dysfun: right. quite often the answer is 'do it dumbly'

9:30 afterwards you can look for ways to tidy it up

9:30 shiranaihito: "dumbly"?

9:31 dysfun: just do it in the way you know how

9:31 without worrying about the structure

9:31 shiranaihito: ah, right.. so.. i should just try not to mind the resulting ugliness.. ? :P

9:32 dysfun: as fred brooks said "write one to throw away: you will anyway"

9:32 shiranaihito: :)

9:32 i'm kind of confused about what people see as the main benefit of say, static typing, or whatever they mean exactly.. especially if they're writing code in emacs or vim instead of an actual IDE etc

9:33 with Java and IntelliJ IDEA, it's been cool to be able to perform heavy refactorings "automatically"

9:33 but i doubt that's the kind of thing Haskell enthusiasts mean

9:34 dysfun: you can never really perform all useful refactorings automatically

9:34 you can simply get some of the simpler cases

9:34 shiranaihito: sooo.. maybe in other words, how much do you think using Cursive (and IDEA) might alleviate the problems emacs and vim users see with the lack of static typing

9:35 i'm kind of hoping "a lot", but i can't tell

9:35 dysfun: i'm an emacs user. i see no advantage whatsoever in an IDE for clojure

9:35 shiranaihito: are you talking about how "lacking" Cursive still is compared to IDEA with JAva?

9:36 oh :)

9:36 dysfun: no, i just happen to think that text editing efficiency is important

9:36 more than i ever use any of the automated tools

9:36 shiranaihito: for me it's the other way round, i'd say all the other stuff is important

9:37 (besides, i bet there's quite a lot of "text-editing efficiency" with Cursive too)

9:37 dysfun: i think perhaps you don't realise how powerful cider is

9:37 it's really the most powerful clojure editing environment there is

9:37 shiranaihito: that's certainly possible, just like you might not realize how productive using an IDE is :P

9:37 dysfun: i have used IDEs

9:38 just not by choice

9:38 shiranaihito: have you used JetBrains IDEs?

9:38 dysfun: yes

9:38 shiranaihito: ok

9:38 and.. in an "adept" way?

9:38 dysfun: i don't even know what you mean by that

9:39 i memorise keyboard shortcuts and such

9:39 shiranaihito: well, i'd say someof the most useful stuff is related to navigating around code

9:39 dysfun: i figure out how to make it build things. occasionally i might use the debugger

9:39 okay, well emacs has those things too

9:40 shiranaihito: stuff like.. "open class/file/symbol/implementation"? "go to last edited location (and the one before that on the next invocation, and so on)"?

9:40 dysfun: i'm sure those exist

9:40 if they don't, write them

9:40 this is why we make a big deal about emacs having a full programming language built in

9:40 shiranaihito: why would i write them (for emacs?) when i have them already with IDEA? :P

9:41 but it sounds like emacs doesn't have those

9:41 dysfun: that only works so long as everything you ever want will be prewritten

9:41 there are third party libraries

9:41 shiranaihito: which are more or less half-assed?

9:42 dysfun: some of them are very good

9:42 shiranaihito: (or kind-of-sort-of functional?)

9:42 dysfun: why don't you try one of the ready-to-go emacs configurations and try it yourself?

9:42 shiranaihito: .. and then, ofc, if something is half-assed, barely functional etc, the standard refrain is "pull requests welcome" :P

9:43 because i'm happy with IDEA / Cursive, and don't believe i could reach the same level of comfort and productivity with emacs? :)

9:43 dysfun: well i'm not going to engage you in debate since you don't seem to have done your research. cider is *excellent* and a massively important part of my day

9:43 shiranaihito: in a way, i'm doing research now :P and so far, my research seems to show that some important functionality is missing from emacs :)

9:44 dysfun: i think perhaps you do not understand how to use emacs in the modern era

9:44 shiranaihito: (which you haven't confirmed, but i take to be accurate)

9:44 dysfun: i use literally hundreds of elisp packages in my config

9:44 shiranaihito: of course i don't, considering i've never really used it? :P but so what, when the same applies to you and IDEA? :P

9:44 dysfun: emacs by default is not a ready-to-go tool

9:45 shiranaihito: cool, and i don't need any extra tools or libs bolted on to Cursive :)

9:45 because it actually is a ready-to-go tool :)

9:46 dysfun: your question is about "problems emacs and vim users complain about". this emacs user does not have these problems

9:46 draw your own conclusions

9:47 shiranaihito: yep, well.. this conversation has basically just reinforced my earlier views on "text editors vs IDEs"

9:47 but to each their own, and all

9:47 dysfun: all i can see is that you simply have no idea how people actually use anything but an IDE

9:47 shiranaihito: nevertheless, it's good to hear an emacs user say there's no need to switch to Haskell :)

9:48 you're being kind of strangely accusatory

9:49 no offense - but i take it to mean you're a bit emotional about the topic, which suggests that you might subconsciously see emacs lacking in some respects, but don't want to accept it

9:49 ofc, i could be wrong

9:49 dysfun: oh here we go

9:49 shiranaihito: we don't have to "go" :P

9:49 Chousuke: since when is emacs not an IDE? :P

9:50 dysfun: i'm quite happy with my tools thank you

9:50 shiranaihito: sure, at least that's what your conscious mind tells you :)

9:50 Chousuke: it's basically *the* IDE. It integrates everything from your editor to the web browser.

9:50 shiranaihito: but if it's alright for you to say "you simply have no idea how people actually use anything but an IDE", it's fine for me to say what i just did.. it doesn't need to lead to any animosity either way

9:51 dysfun: i identified a gap in your knowledge and you claimed to know my mind

9:51 shiranaihito: you've made biased claims about me too, so i guess we're even :)

9:51 i ain't even mad :P

9:52 now i'll go brew some lovely japanese green tea :)

10:11 Chousuke yeah, emacs is quite a beast :)

10:24 Democracy, EU-style: https://www.youtube.com/watch?v=Ozj0qwnMGZ0

10:24 (not that democracy itself is any good btw)

11:37 ben_vulpes: 2/10 trolling

11:37 emacs has jump-to-def in every language that a tags table can be made for

11:37 and yes it's a shitty ide, a "the poorest man's ide", if you will

11:38 but it works for every language, consistently, and i don't need a new wacky programming environment for every language.

11:39 and mine wastes precisely zero pixels on pointless ui widgety and clicky buttons because time spent on the mouse/trackpad is time wasted.

11:41 shem: ben_vulpes: amen

11:45 on a general level, if people invest a lot of time in something, they subconsciously want this investment to be worthwhile. this is why it is so hard to have a neutral discussion between adept users of systems X & Y that do broadly similar things

11:47 ben_vulpes: shem: amen

11:48 otoh familiarity breeds contempt.

11:49 (and boy howdy do i hate emacs)

11:50 shem: well, there's that too. and early converts are usually eager to proselytize

11:50 ben_vulpes: early in their own trajectories or early in the system trajectory?

11:51 shem: in their own

11:51 they have a big momentum going, learning new, exciting stuff, and want to spread the word

11:54 ben_vulpes: i can see it

11:59 shem: on one hand, it would be nice to have neutral discussions about technical things, where it is often possible to find an objective metric. on the other, it is so much fun to gush about things you are excited about.

12:00 ben_vulpes: and trivial to shit on things you don't know or understand.

12:00 the more complex and abstract the topic, the more shared understanding must be built between participants.

12:01 shem: indeed

12:01 ben_vulpes: this almost demands an enduring relationship, and most IRC channels are not set up for this, but rather to encourage drive-by opining.

12:02 shem: i think this channel has a very good s/n ratio, and generally patient people.

12:03 ben_vulpes: hey, justin_smith and dysfun tend to my idiocy on a daily basis. i can't complain.

12:04 dysfun: ben_vulpes: ah, but you want to learn

12:05 ben_vulpes: stasis is death

12:09 * dysfun is currently learning another lisp, lfe

12:10 ben_vulpes: dysfun: that one looks neat

12:11 dysfun: i'd been holding off learning it because i already know clojure and they're useful for similar problems

12:11 ben_vulpes: unfortunately i have to bite the bullet and up my GUI game with $nextlang

12:11 dysfun: heh, i'm building a gui in lfe

12:12 sadly they only have wx

12:13 ben_vulpes: i'm hoping to find tooling that helps with the complexity of gui programming

12:14 dysfun: quite honestly with the exception of the cljs/react stuff, it's all abysmal

12:14 it's the only problem where i can't even imagine how it might work better if you took the OOP away

12:14 ben_vulpes: i don't even think react improves it much

12:14 dysfun: nor do i, as it happens

12:14 ben_vulpes: has the same view-will-appear view-will-disappear semantics as obj-c and friends

12:14 dysfun: i have a project on playing with the idea, without the react dep

12:15 ben_vulpes: dysfun: have you touched elm at all?

12:15 dysfun: i've seen odd bits and i know they have some FRP stuff

12:15 but the problem is elm is a new language - it's not haskell, but on the web

12:16 ghcjs, haste and fay can be this

12:16 and i'm not convinced anyone has actually improved upon the situation in functional languages since cells (common lisp)

12:17 the author of cells is porting it to clojure at present, using refs

12:17 ben_vulpes: > magic typing tricks

12:17 eeeee

12:17 scawwy

12:20 interesting

12:21 shem: elm author just said they are no longer about FRP, http://elm-lang.org/blog/farewell-to-frp

12:23 dysfun: oh wow, looks i have a lot more reading to do on elm all of a sudden

12:58 weathered-tree: anybody know a good way to hire a Clojurescript dev for a small project?

13:00 dysfun: asking in irc? do you know what you want?

13:03 weathered-tree: Yes, I am going to post the offering but it's really just a rewrite of a simple client site from using Angular 1.x to either Om or Reagent. I was looking for advice on where to post that people in the Clojure community actually check.

13:04 dysfun: i don't think there's any one particular avenue. the mailing list might be a good place, and i'm happy to discuss it with you in private as well

13:05 weathered-tree: thanks, I'll message you in private

14:16 Lewix: how to get to the var value of another namespeace

14:16 justin_smith: Lewix: by requiring the namespae and then using the values in it

14:17 or do you mean the namespace object itself? (which isn't a var)

14:17 Lewix: i require my namespace [myproject.core.playground :as playground]

14:17 justin_smith: OK

14:17 Lewix: now i have access to playground in the current namespace

14:17 #'playground however returns an error

14:17 justin_smith: because namespaces are not vars

14:18 ,(the-ns 'clojure.core)

14:18 clojurebot: #object[clojure.lang.Namespace 0x7d033cdc "clojure.core"]

14:18 justin_smith: that's a namespace

14:18 Lewix: ahhhh

14:18 LostInTheWoods: I wrote code so bad my face hurts.

14:18 dysfun: it's why you can have a module alias and a var that clash and it work just fine

14:19 Lewix: i require my namespace [myproject.core.playground :as playground :require playground];; this is probably what I want and I should change the name

14:19 justin_smith: what?

14:19 clojurebot: what is cells

14:19 justin_smith: Lewix: that :require key is invalid

14:19 Lewix: justin_smith: basicall in the playground namespace I have a function 'playground'

14:19 justin_smith: Lewix: playground/playbround

14:19 or you can use :refer [playground] in the require

14:20 Lewix: refer that is thanks

14:20 dysfun: i tend to use single-letter aliases, like p

14:20 justin_smith: haskeller :P

14:20 dysfun: :require [myproject.core.playground as p]

14:20 justin_smith: naw, i'm learning LFE now

14:20 Lewix: dysfun: doesn't it require a lot ot eye traveling when you give short name

14:21 dysfun: not really. if you're doing it right, you don't have many imports

14:21 so you just hold it as state in your head

14:21 justin_smith: requires are not imports, but OK

14:21 dysfun: shush dammit justin :p

14:22 ben_vulpes: > hold it as state in your head

14:22 whyyyy

14:22 noooo

14:22 my head is so small though

14:22 dysfun: mine too, but for just a tiny bit of memorising i get to avoid writing long words

14:22 Lewix: " so you just hold it as state in your head" sounds so OO

14:22 dysfun: and i'm lazier than i am forgetful

14:23 TimMc: hah

14:23 dysfun: although that's a tough-run thing

14:26 Lewix: ,(var inc)

14:26 clojurebot: #'clojure.core/inc

14:26 Lewix: ,#'inc

14:26 clojurebot: #'clojure.core/inc

14:26 justin_smith: ,'#'inc

14:27 clojurebot: (var inc)

14:27 dysfun: ,(inc inc)

14:27 clojurebot: #error {\n :cause "clojure.core$inc cannot be cast to java.lang.Number"\n :via\n [{:type java.lang.ClassCastException\n :message "clojure.core$inc cannot be cast to java.lang.Number"\n :at [clojure.lang.Numbers inc "Numbers.java" 112]}]\n :trace\n [[clojure.lang.Numbers inc "Numbers.java" 112]\n [sandbox$eval121 invokeStatic "NO_SOURCE_FILE" 0]\n [sandbox$eval121 invoke "NO_SOURCE_FILE" -1]\...

14:27 dysfun: didn't clojurebot used to do karma or am i imagining things?

14:28 justin_smith: lazybot

14:30 dysfun: hrm, that was a long time ago

14:32 Lewix: do you guys have an example of a small cljs set up with one function called in another file

14:32 outside of core.cljs

14:33 dysfun: it's just like in clojure

14:33 except :require doesn't take :refer :all

14:33 Lewix: dysfun: I'm new to both, it's only recently that I took it seriously.

14:33 dysfun: (ns my.ns) (defn foo [a] a) ?

14:34 that's your other namespace

14:34 in your core ns, you can (ns my.core (:require [my.ns :as n])) (n/foo "bar")

14:34 Lewix: https://gist.github.com/6ewis/43b7c96a7f9514f6c2ebe8a358c5cd3f what am I doing wrong

14:35 url/playground => not found

14:35 dysfun: well for a start, you don't have a url namespace

14:35 Lewix: by url i mean localhost:port/

14:36 that perfectly work with /about or /homepage

14:36 justin_smith: so you are trying to make a string?

14:36 Lewix: i just want to go to the url /playground and see my html

14:36 that is defined on playground.cljs

14:37 dysfun: i'm not familiar with secretary, but d you absolutely need #'name ?

14:38 Lewix: I added #'play on line 32

14:38 i only added two things in the file core.cljs line 6 and line 31-32

14:38 dysfun: and what error do you get?

14:38 Lewix: url/playground => not found

14:39 dysfun: have you rebuilt your clojurescript?

14:39 or are you using figwheel or something?

14:39 Lewix: i fired lein figwheel multiple times

14:39 dysfun: inspect the javascript and see if it's actually reflecting your changes

14:39 source maps might be useful

16:04 jortiz7: Hey guys, so I wanted to do something but I am not sure if it is achievable: I write a console application which takes, for example "-a 1 2 3" as parameters. I can already check if the function a exists in a namespace and if so call it (I check and call every -* automatically), but now I want to use the rest of the argument, the get splitted into '('("b" 1) '("a" 1 2 3)) automatically to call the function a

16:04 with 3 and b with 1 parameter, not checking the count of paramters in the function. I tried a bit of unsplicing, but not really got the hang of it. Here is what I have right now: https://paste42.de/10659/ Can you help me out a bit with that?

16:05 justin_smith: jortiz7: don't use splicing, just use apply

16:05 ,(apply + [1 2 3])

16:05 clojurebot: 6

16:05 justin_smith: ,(apply + [])

16:05 clojurebot: 0

16:07 ridcully_: just to have it mentioned: on unix i'd expect that to be -a "1 2 3" - it's one param for that -a

16:10 jortiz7: ridcully_: Its more like "programm -d 14 16 2016" for getting the function use that specific date (the example would be today). I think thats easier than parsing a date.

16:11 ridcully_: my brain reads -d "14" 16 2016 (where 16 2016 are just & args)

16:11 sorry for being a pendatinc ahole

16:11 i also discriminate bash users ;)

16:12 jortiz7: ridcully_: No, thank you for being one. What would you use? ISO-date? And if so, how would you handle the indicaton of a specific week in a year?

16:12 And I use zsh because .. um .. I am a lazy fuck and use ohmyzsh ... I write my scripts for /bin/sh though.

16:13 justin_smith: ridcully_: there are plenty of counter examples - xterm -e less +F /tmp/foo

16:14 where less +F /tmp/foo are all args to -e

16:14 ridcully_: that's madness

16:16 jortiz7: justin_smith: Thank you very much for your help! Works perfectly.

16:18 ridcully_: justin_smith: xterm -e less ~/.gitignore -fa Fira

16:20 justin_smith: ridcully_: that expects "-fa" to be another file

16:20 ridcully_: and i expect -fa to be the xterm font. that's what i meant by "my brain reads"

16:21 but granted, that there are tools out there, that give some leeway on param parsing

16:22 so i assume, that xterm's -e is supposed to be the last param and & args is just send off as params into it

16:49 jrc: Given the design of Clojure, is a strategy to improve the friendliness of its error messages possible? As someone new to it, that seems to be the only weakness

16:50 ridcully_: some sunshinehappyunicorn castle might protect you from common errors. but in the end you will get a 400 line stacktrace from java for that odd case

16:56 amalloy: !learn add amalloy_todo Te can't start flying in spider form, but casting spider form doesn't make them stop flying

16:56 oops

16:56 justin_smith: TIL amalloy is a spider wizard IRL

16:57 ridcully_: it's pronounced spyder in amalloys case

17:01 jonathanj: jrc: https://github.com/yogthos/clojure-error-message-catalog is an attempt to build a catalogue of commonly confusing errors so that better messages might be provided, something like Elm's error message catalogue

17:03 jrc: you'll notice if you read the "State of Clojure Survey" results for the last few years that "better errors" is a pretty commonly suggested improvement people would like to see

17:13 jrc: Thanks jonathanj! I read the 2015 report it was really interesting

17:22 amalloy: justin_smith: if you're curious, actually i develop for dungeon crawl stone soup

17:23 i also record videos of me playing it, and often end up adding stuff to my todo list if i notice something weird while playing

17:23 TEttinger: really? why did you kill the hill dwarf paladin or whatever that thing was people like?

17:24 amalloy: haha, mountain dwarves were before my time

17:24 TEttinger: I remember there was an entertainingly weird orc cleric thing where you basically had a ton of followers

17:24 ridcully_: dcss is really nice!

17:24 amalloy: that still exists

17:24 TEttinger: nice.

17:25 ridcully_: but tome imho is the new level

17:25 TEttinger: DCSS is... is it C and Lua scripting?

17:25 yeah tome4 is a pretty amazing change from earlier tome

17:25 amalloy: c++ and lua

17:26 TEttinger: I do know a lot of people who prefer DCSS to TOME4

17:26 maybe not a lot, I don't know many active players of either

17:27 amalloy: since it came up: if anyone wants to try out dcss, the 0.18 release tournament is going on now, so there are a lot of people playing, and it's free from http://crawl.develz.org/

17:27 ridcully_: now you know at least an arena master ;p

17:27 TEttinger: I think I know more active players of DCSS than massively popular games like candy crush saga

17:28 ridcully_: never ever managed to finished a campaign

18:28 tolstoy: Interesting. Core.async doesn't have a "chan?" function built in.

18:32 TimMc: amalloy: What do you use to record videos of DCSS? I just learned about asciinema, which sounds neat...

18:33 amalloy: OBS

18:35 TimMc: Oh, I guess you'd want audio too, right.

18:46 amalloy: TimMc: my DCSS series, if you want to see hwo it comes out: https://www.youtube.com/user/asdfgvbd/playlists?view=50&shelf_id=2&sort=dd

19:46 sdegutis: Hi.

20:03 justin_smith: ,(transduce (comp (map (partial + 101)) (map char)) str "" [3 0 7 7 10])

20:03 clojurebot: "hello"

22:22 Lewix: hi

22:28 Lewis: hi

22:32 what's the difference between those two functions: https://www.refheap.com/119107 - contrived example

22:50 justin_smith: the one on line 11 will have a recognizable name in a stack trace

22:51 but (fn timer-component [] ....) would too

22:51 ,(macroexpand '(defn foo []))

22:51 clojurebot: (def foo (clojure.core/fn ([])))

22:51 justin_smith: Lewis: ^ as the above shows, they are effectively the same though

22:53 Lewis: justin_smith: note the metadata

22:53 position is different

22:54 justin_smith: yes, one puts metadata on an fn object, the other puts it on a var

22:54 metadata on an fn object isn't really useful (unless you are writing other code that checks fns for metadata)

22:57 Lewis: justin_smith: thanks

23:26 amalloy: justin_smith: actually both have recognizable names in a stacktrace

23:27 if the value-part of a def expression is a lambda, it arranges for the classname to match the name-part

Logging service provided by n01se.net