2013-08-17
| 00:04 | TimMc | I could just clone my own dotfiles for that matter. |
| 00:04 | TimMc | However, my own .emacs.d is not... reproducible. |
| 00:04 | callen | ?_? |
| 00:05 | callen | I've got all kinds of shit in my .emacs.d and it still 'just works' when I git clone |
| 00:05 | callen | I just install 3 python libraries for my python config and then I'm done. |
| 00:06 | `cbp | Maybe its all absolute paths :D |
| 00:07 | callen | `cbp: don't say such hateful things. Also bulwark had its first release. I'm going to test it with somebody and move on to the next thing. |
| 00:08 | callen | `cbp: any ideas on the Pomegranate "sync with project.clj" dilly? |
| 00:09 | technomancy | TimMc: whaaaaat |
| 00:09 | technomancy | is marmalade down? |
| 00:09 | technomancy | wfm: http://marmalade-repo.org/packages/clojure-mode |
| 00:09 | callen | isn't it an elisp backed web server? |
| 00:10 | callen | ...jus' sayin'... |
| 00:10 | technomancy | callen: to our great shame, it's node |
| 00:10 | callen | TimMc: what did you originally need lein-otf for? |
| 00:10 | callen | technomancy: THE FARK?! |
| 00:10 | technomancy | callen. I KNOW |
| 00:10 | technomancy | callen: there's a rewrite in progress though |
| 00:10 | callen | I am horrified. |
| 00:10 | technomancy | http://marmalade-repo.ferrier.me.uk/ <- the elisp version |
| 00:10 | callen | technomancy: one of Ferrier's...yep. |
| 00:11 | callen | I fucking knew it. |
| 00:11 | callen | that man is deranged. |
| 00:11 | technomancy | true |
| 00:11 | technomancy | callen: the original author got everyone to use it and then absconded |
| 00:11 | callen | better him than node users though. |
| 00:11 | callen | technomancy: lol, like clojuredocs. |
| 00:11 | `cbp | callen: I'll look at it tomorrow :-) |
| 00:11 | callen | technomancy: which I'm still grumpy. |
| 00:11 | callen | `cbp: I have a web project on the horizon if you want something less crunchy as well. Let me know how it goes! |
| 00:12 | callen | still grumpy about* |
| 00:14 | `cbp | sure |
| 00:15 | callen | `cbp: how much do you like...wikis? |
| 00:16 | technomancy | just like clojuredocs =( |
| 00:17 | callen | I still don't know why people are negative about wikis. The community can maintain them themselves |
| 00:17 | callen | unlike things like clojuredocs. |
| 00:17 | `cbp | callen: i'm neutral i guess? never really used or made one |
| 00:17 | adu | i wanna make a wiki |
| 00:17 | adu | i'm an avid wikipedian |
| 00:18 | adu | I've deleted the word penis from wikipedia around 1000 times |
| 00:19 | technomancy | does that include synonyms |
| 00:19 | adu | technomancy: yes |
| 00:19 | callen | fair warning, I'm anti-deletionism and not really happy with the way Wikipedia is managed. |
| 00:19 | adu | it's almost always out-of-context |
| 00:21 | callen | anyway, Clojure needs a wiki. |
| 00:21 | adu | like "Hillary Clinton met with Netanyahu AND WHIPPED OUT HER PENIS to discuss diplomatic ties …" |
| 00:21 | `cbp | yeah I think so too |
| 00:21 | callen | There are too many books coming out for Clojure that are basically collections of the sort of snippets/recipes/cookbooks you'd find on a wiki and they won't be kept up to date like a wiki would either. |
| 00:21 | callen | Something like EmacsWiki would be glorious. |
| 00:22 | adu | callen: isn't EmacsWiki already glorious? |
| 00:22 | technomancy | people will still make blog posts with glaring inaccuracies that never get updated |
| 00:22 | technomancy | this is the legacy of swank-clojure |
| 00:23 | callen | adu: that's my point, I want ClojureWiki to steal the same benefits :) |
| 00:24 | adu | now we just need a set of buffer manip libs to make Emaclo |
| 00:25 | callen | nothx. |
| 00:25 | callen | Emacs and elisp is fine. I like them and what they do. |
| 00:25 | callen | (require 'cl) exists, just leave it alone. |
| 00:26 | adu | or I suppose one could theoretically make Eclipse extensions in clojure |
| 00:26 | callen | but most of my work is services/server-side/web and Clojure fits the bill and I'd like the collective knowledge of the community not be scattered to the four winds of deleted tumblr blogs and abandoned portfolio sites. |
| 00:27 | adu | I really liked noir and joodo in how easy they made it |
| 00:27 | adu | but now I hear that people just cherry-pick their web libs |
| 00:30 | adu | both (noir and joodo) depend on ring/compojure/hiccup, and most people I've talked to recommend learning just compojure, and not the rest |
| 00:31 | callen | adu: Luminus rolls up some nice defaults if you want that. |
| 00:32 | callen | adu: in addition to Luminus, my personal CMS is a test bed for libraries: https://github.com/bitemyapp/neubite/ |
| 00:32 | callen | http://www.luminusweb.net/ |
| 04:02 | callen | just had a wonderful time making my library simultaneously muggle and neckbeard compatible. |
| 04:12 | muhoo | heh neckbeard https://www.facebook.com/pages/The-Neckbeard-Boys/179687975453042 |
| 04:12 | callen | muhoo: what I'm referring to, is the fn returned by my middleware tries to use private closed over data, but falls back to a global atom. |
| 04:13 | callen | and the latter use-case isn't just for convenience/muggles, there's a fairly serious production-mode use-case for that. |
| 04:13 | callen | annnnnnnd I really need a debug-repl that actually works. |
| 04:14 | callen | only locals work in the current version of Jahad's debug-repl |
| 04:18 | supersym | whats a good, elegant/lean way of doing fulltext/keyword search in clojure? It doesn't have to be big data, at most about a few hundred records or so as part of a dictionary lookup |
| 04:18 | supersym | I was thinking just using maps at first, but its the full text-search I'm not too sure about, if there are easier/more viable solutions laying around :P |
| 04:27 | callen | supersym: so, the problem here is that usually when you need robust full text search, the presumption is that you wouldn't be using an embedded library. |
| 04:28 | callen | supersym: you *might* be able to extract just the analysis stuff from Lucene via Clucy |
| 04:28 | callen | supersym: desperately avoid implementing a full text search algo yourself if possible, but if you do write one, make it a micro-library and push it to github please. |
| 04:30 | ucb | supersym: what sort of capabilities are you after? you want wildcards or full word matches? |
| 04:31 | callen | ucb: hai o/ |
| 04:31 | ucb | hai2u \o |
| 04:32 | supersym | callen: yeah feared that I'd have to go full blown... |
| 04:33 | callen | supersym: clucy has a nice API, the only problem is that to avoid creating a Lucene index you're going to reach into the guts and wrap the analysis stuff. |
| 04:33 | supersym | well,... tbh it can be just keyword wildcard matches |
| 04:33 | callen | I don't think it's a big deal to do so, myself. |
| 04:33 | supersym | yeah |
| 04:33 | callen | supersym: well that's not "true" full-text search |
| 04:33 | supersym | it doesnt have to be full-text per se |
| 04:33 | callen | full-text search handles stemming, fuzzy search, etc |
| 04:34 | ucb | I'd say that's debatable |
| 04:34 | ucb | the query language (fuzzy search, wildcards, etc.) is but one part of a search engine |
| 04:35 | supersym | its tempting...I had a go at Lucene earlier etc, but I might just wanna stick with familiar ground a bit (maps) and not get the extra lib in place |
| 04:35 | ucb | the most basic search is ala grep with full word matching |
| 04:35 | supersym | it would be for a lein-plugin like dictionary lookup of terms... |
| 04:35 | ucb | it also depends on whether you want any relevance ranking |
| 04:35 | ucb | or whether you're happy with just binary yes|no type of answers |
| 04:35 | callen | supersym: if you can do it more simply than full-text search, go for it. |
| 04:36 | callen | supersym: if you need to perform some evil: https://github.com/noprompt/frak |
| 04:36 | supersym | lol .. thanks callen |
| 04:36 | supersym | ucb ;) |
| 04:36 | ucb | frak is neat |
| 04:36 | callen | evil is neat. |
| 04:36 | ucb | I was wondering if one could build the same type of lib that generated xpath selectors |
| 04:36 | ucb | or even css selectors |
| 04:36 | supersym | oh, frak is cute :) |
| 04:37 | ucb | I know one *could*, I was just pondering on the how |
| 04:37 | supersym | don't we have css with garden? |
| 04:38 | supersym | I even found a css, half-decent, parser in clojure once |
| 04:38 | supersym | oh,...nvm |
| 04:38 | supersym | generate >< goodmorning |
| 04:38 | supersym | yeah I was having the same idea earlier |
| 04:39 | callen | ucb: you mean like """<div id="blah"> <div class="woohoo"> <!-- PICK THIS --> </div></div>""" => ["div#blah div.woohoo" "#blah .woohoo"] ? |
| 04:39 | ucb | callen: yeah |
| 04:39 | callen | ...I wouldn't. |
| 04:39 | supersym | with backtick definitly, I was playing with (Racket) 'formlet' like structures earlier after yogthos pointed me to those |
| 04:39 | ucb | callen: have you seen open.dapper.net? |
| 04:40 | supersym | gensym can be used with backtick templates |
| 04:40 | ucb | that's the use case I had in mind |
| 04:40 | callen | ucb: I'm aware of it, but I don't really use tools like that. |
| 04:40 | callen | I prefer to write my own plumbing generally. |
| 04:40 | callen | I can see the appeal. |
| 04:40 | callen | especially if it works consistently and lets you scrape/generate an assortment of data. |
| 04:40 | ucb | right, I was musing myself with building a dapper clone |
| 04:41 | supersym | callen: sure but there are jobs I have/will have to take that may be lower paying... I don't feel like doing my magic every time |
| 04:41 | supersym | a lot of stuff can, and should for that pay, be templated/boilerplated output I fear |
| 04:41 | callen | if you say so |
| 04:41 | supersym | web site building world changed quite a bit with companies offering off-shore india/china stuff :P |
| 04:41 | callen | I don't find myself doing repetitious work that often. |
| 04:42 | callen | OTOH, I don't churn out websites for a living anymore. |
| 04:42 | supersym | :) |
| 04:43 | callen | I do do a fair chunk of web stuff at home and work though. |
| 04:46 | ucb | this is rather neat http://htwins.net/scale2/ |
| 04:48 | supersym | ucb: sweet, thanks... I've read many many books about that stuff from my 22-28 years :) |
| 04:48 | ucb | :) |
| 04:51 | callen | okay, I am tired. Enough hacking today. |
| 04:52 | supersym | cya callen |
| 04:53 | ucb | enjoy |
| 04:58 | ucb | supersym: minimal search engine https://gist.github.com/ulises/6255940 |
| 04:58 | ucb | supersym: it produces yes |
| 04:58 | ucb | erk |
| 04:58 | ucb | yes|no type matches for full tokens |
| 04:58 | ucb | (I'm sure it can be improved, etc.) |
| 05:00 | ucb | updated with an example of how to use it |
| 05:47 | supersym | ucb: thanks! |
| 07:26 | mark__ | I there. I have a project I want to get back to. Unfortunately I can't access the uberjar my project creates. I now tried to make a new uberjar from a new project, but this fails too. What am I doing wrong? (Clojure 1.5.1, lein 2.3.1 on Java 1.6.0_51 mac ox x 10.8.4) The programm I run was: lein new app foobar; cd foobar; lein uberjar; java -jar target/foobar-0.1.0-SNAPSHOT-standalone.jar and the result I got was: Exception in thr |
| 07:26 | mark__ | ead "main" java.lang.NoClassDefFoundError: foobar/core |
| 07:49 | mark__ | with leiningen 2.2.0 everything works. I found an issue on gh (https://github.com/technomancy/leiningen/issues/1283) but this issue should be fixed in 2.3.1. can somebody reproduce what i encountered? |
| 07:49 | TEttinger | mark__, still here? |
| 07:50 | TEttinger | oh hi |
| 07:50 | mark__ | yes |
| 07:50 | TEttinger | do you have any code in foobar? |
| 07:50 | TEttinger | to create an uberjar there are some requirements that may be different |
| 07:50 | mark__ | i created a new leiningen project |
| 07:51 | TEttinger | yes |
| 07:51 | TEttinger | that creates a very small core.clj in foobar |
| 07:51 | TEttinger | it won't have a (:gen-class) in the ns |
| 07:51 | TEttinger | that might not be needed |
| 07:51 | mark__ | it actually has (https://gist.github.com/mren/e1aaa05f4aabd113e6f1) |
| 07:52 | TEttinger | project.clj has the :main foobar.core |
| 07:52 | TEttinger | right? |
| 07:53 | mark__ | right: here is the full output of project.clj and core.clj: https://gist.github.com/mren/e1aaa05f4aabd113e6f1 |
| 07:54 | TEttinger | try lein compile |
| 07:55 | TEttinger | see what that outputs |
| 07:55 | TEttinger | ^ mark__ |
| 07:56 | mark__ | lein compile runs without problems, if i try to create a new uberjar after this, it wont find the class, though |
| 07:56 | mark__ | what happens when you run lein new app foobar; cd foobar; lein uberjar; java -jar target/foobar-0.1.0-SNAPSHOT-standalone.jar on lein 2.3.1 ? |
| 07:57 | TEttinger | I'm reluctant to touch 2.3.1 after all the hassle people have been reporting |
| 07:58 | mark__ | hehe |
| 07:59 | TEttinger | is there an easy way to install and uninstall 2.3.x? |
| 07:59 | mark__ | i can switch versions with homebrew on a mac pretty easy |
| 07:59 | TEttinger | oh! |
| 07:59 | TEttinger | lein classpath |
| 07:59 | TEttinger | find if the classpath contains the wrong folder |
| 08:00 | TEttinger | if it's searching a wrong but close by directory for foobar/core, that could be a clue |
| 08:01 | mark__ | looks good to me (src, target included) https://gist.github.com/mren/e1aaa05f4aabd113e6f1#file-gistfile2-txt |
| 08:02 | TEttinger | yeah... |
| 08:02 | TEttinger | geez could this be a :main true thing? |
| 08:03 | TEttinger | in :gen-class |
| 08:03 | TEttinger | I thought that wasn't needed |
| 08:03 | mark__ | there is no core.class in the created jar |
| 08:03 | mark__ | just the core.clj |
| 08:03 | TEttinger | so it isn't aot ing it |
| 08:04 | TEttinger | try adding :aot :all |
| 08:04 | TEttinger | to project.clj |
| 08:04 | callen | Who controls the content on clojure.org? |
| 08:04 | TEttinger | also, I'll bring this up in #leiningen |
| 08:04 | TEttinger | callen, aliens |
| 08:04 | TEttinger | made with alien technology |
| 08:05 | mark__ | works! thanks |
| 08:05 | TEttinger | woah |
| 08:06 | TEttinger | :aot is now separate from :main then |
| 08:06 | TEttinger | cool, I remember hearing a discussion to do that in new lein |
| 09:22 | papyrus | hello ! . i am sorry my poor english. but i have a question. i want to make game using clojure on iphone. is it possible ? i know common lisp can do it but common lisp is not functional. i hate it. |
| 09:30 | kmicu | papyrus: http://keminglabs.com/blog/angular-cljs-weather-app/ |
| 09:36 | papyrus | thanks kmicu. but clojure script will be converted to java script . i think it will be very slow. i want to make game. |
| 09:37 | chwals | anyone ever get a 'cannot open load file: dash-functional' when trying to nrepl-jack-in? |
| 09:39 | TimMc | technomancy: Sorry for alarming you re: clojure-mode; my emacs is just not seeing it. |
| 09:48 | pizzasauce | is anybody here? |
| 09:49 | kmicu | no |
| 09:51 | pizzasauce | kmicu: thanks. could i ask for some help regarding setting up slime and nrepl |
| 09:52 | kmicu | ~ask |
| 09:52 | clojurebot | The Ask To Ask protocol wastes more bandwidth than any version of the Ask protocol, so just ask your question. |
| 09:53 | pizzasauce | I was able to get repl working with slime, but there is no slime-instructor. Is this normal? |
| 09:58 | kmicu | a great alternative to the now deprecated combination of SLIME + swank-clojure. |
| 09:59 | kmicu | nREPL is... |
| 09:59 | pizzasauce | and for nrepl, i could not 1) install the package using package.el even though it shows up on package-list. I get the same error all the time: error during dowload: not found. 2) install manually. I get this error: could not open load file, dash. |
| 10:02 | kmicu | pizzasauce: Are you fresh emacs user? |
| 10:02 | pizzasauce | kmicu: yes i am. emacs newbie. |
| 10:03 | kmicu | You should try https://github.com/overtone/emacs-live then. |
| 10:03 | kmicu | Everything works OOTB. |
| 10:03 | chwals | pizzasauce: I just got the error 'could not open load file: dash functional'. fixed it by installing dash |
| 10:03 | chwals | even though nrepl was working for me yesterday :/ |
| 10:04 | pizzasauce | chwals: oh, i need to install dash. thanks! |
| 10:06 | pizzasauce | kmicu: I only have access to emacs23. but thanks anyway. |
| 10:07 | kmicu | pizzasauce: https://gist.github.com//robert-stuttaford/6255383 BTW |
| 10:08 | pizzasauce | strangely, i can't install dash via package either. i go the same error: not found. |
| 10:12 | kmicu | pizzasauce: http://melpa.milkbox.net/#installing |
| 10:14 | pizzasauce | kmicu: thanks. for some unknown reasons i am unable to use package to install both nrepl and dash. But cl-lib installed fine. fortunately, i was able to install nrepl and dash manually. |
| 10:17 | kmicu | pizzasauce: nrepl and dash are not availabe in ELPA http://elpa.gnu.org/packages/ |
| 10:22 | pizzasauce | kmicu: I have melpa and marmalade included in my .emacs file. and nrepl shows up when I list packages. just won't install. but that's ok. manualy install was successful, thanks to the tip from chwals |
| 10:25 | pizzasauce | kmicu: thanks for the link to robert stuttaford's page. very useful! |
| 10:27 | kmicu | Maybe this is related to the latest events https://twitter.com/melpa_emacs |
| 10:29 | kmicu | Anyway happy clojure hacking. |
| 10:34 | pizzasauce | kmicu: that's probably it. thanks! |
| 12:16 | wolfes | Has anyone used html transformation/templating raynes/Lazer ? I'm on a spree of exploring how different clojure templating libraries work and was wondering if anyone wanted to comment on diff between Lazer and Enlive in their use cases |
| 12:57 | paulswilliamsesq | Hi - does anyone here use vim fireplace? |
| 12:59 | ambrosebs | ya |
| 13:10 | paulswilliamsesq | ambrosebs: are you familiar with this tutorial - http://clojure-doc.org/articles/tutorials/vim_fireplace.html ? Reason I ask is that I've followed it, and all works fine except for the cpR and ] Ctrl-D commands to reload-all and navigate to other functions. |
| 13:12 | ambrosebs | paulswilliamsesq: do you want to know something about fireplace? |
| 13:13 | paulswilliamsesq | ambrosebs: Just submitted a question - about the tutorial http://clojure-doc.org/articles/tutorials/vim_fireplace.html |
| 13:14 | ambrosebs | paulswilliamsesq: ok cool |
| 13:15 | paulswilliamsesq | ambrosebs: I understand that cpR is now deprecate, but I've tried alternatives to reloaded the file, and neit |
| 13:16 | paulswilliamsesq | ambrosebs: er seem to work correctly |
| 13:25 | lynaghk | bbloom: have you had any more thoughts on which parts of your asyncx library have turned out to be good/bad ideas? |
| 13:26 | lynaghk | I'm using core.async channels with an application and I really want to attach transforming functions at the read/write points. E.g., to be able to put a Clojure object into a channel and have it automatically be serialized as JSON. |
| 13:27 | bbloom | lynaghk: i never made any sense out of "hot" sources that push things & drop messages if nobody is ready to receive them |
| 13:27 | lynaghk | As far as I'm aware, the only way to do that right now is to spin up another goblock, but I can't imagine that's optimal w.r.t. perf (and it's definitely not optimal w.r.t. code clarity) |
| 13:28 | bbloom | lynaghk: push sequences, it seems to me, need some inherent buffering/memoization, which i didn't do |
| 13:28 | bbloom | lynaghk: i'm still uncomfortable w/ the "close propegation" idea & there isn't any sensible error handling strategy |
| 13:29 | bbloom | lynaghk: overall, it's pretty half baked & i'm not at all convinced that the Rx model from .NET makes sense for actual use cases |
| 13:29 | lynaghk | bbloom: yeah, error handling is the biggest issue with doing a mapping transformation via a separate goblock---I'd rather just have it throw where I call it. |
| 13:30 | lynaghk | bbloom: do you have any suggestions for my simple use case of making a channel that people can put Clojure objects onto that will be read from the channel as a JSON string? |
| 13:30 | bbloom | lynaghk: just make a loop that reads from one channel, translates to json, then writes to another channel |
| 13:31 | sventon | do you need to know java if you want to learn clojure? |
| 13:31 | paulswilliamsesq | Let's try another one ;) Does anyone use cucumber style tests for Clojure? |
| 13:32 | sventon | I have a ruby background |
| 13:32 | lynaghk | bbloom: ugh, that's what I've been doing but it feels gross. |
| 13:32 | bbloom | lynaghk: why? |
| 13:32 | bbloom | how is that any different than `cat foo | translate | bar` ? |
| 13:32 | bbloom | :-) |
| 13:32 | lynaghk | bbloom: because now I have an extra channel and goblock to deal with |
| 13:33 | bbloom | let the GC deal with the go block :-P |
| 13:34 | shdwprince | sventon: You can learn java when you learn clojure |
| 13:34 | lynaghk | bbloom: I'm not really that worried about the pref---mainly it's a semantic issue. I mean, just because we have go blocks now doesn't mean I want to use them everywhere I'd previously used functional composition |
| 13:34 | bbloom | my advice for people trying to develop sensibilities around CSP has been: use channels less frequently than you'd expect to need the, but use a few more actual channels than you'd expect to need per use |
| 13:34 | shdwprince | sventon: its not important where you'll understand java's threads, in java or in clojure, threads is one for both |
| 13:35 | shdwprince | sventon: sometime you'll have to learn some java to learn some parts of clojure |
| 13:36 | sventon | shdwprince: so what you are saying is that I only need to learn some parts of Java ? |
| 13:37 | Foxboron | sventon: You won't really need to learn any java to get into Clojure. |
| 13:37 | Foxboron | sventon: i have no java experience and i get along pretty well writing clojure |
| 13:37 | lynaghk | bbloom: the only alternative I can think of is a macro that expands (>json! c {:my object}) into (>! c (serialize... {:my object})) |
| 13:37 | bbloom | lynaghk: that would couple your serialization strategy to your call site :-P |
| 13:37 | lynaghk | bbloom: but that seems like a terrible idea, and doesn't actually hide it |
| 13:37 | lynaghk | yeah |
| 13:38 | bbloom | lynaghk: instead, let's get to the bottom of your fear of the extra go-loop & we can maybe recalibrate you & determine how to help calibrate others :-) |
| 13:38 | lynaghk | bbloom: alright, fine. I'll go crazy with the channels =P |
| 13:39 | sventon | Foxboron: I see |
| 13:39 | sventon | Foxboron: what languages did you work with before ? |
| 13:39 | sventon | ruby ? |
| 13:39 | shdwprince | sventon: its not important, all the same |
| 13:39 | lynaghk | bbloom: I don't know if fear is the right word---mostly I need to know where to put the line between function composition vs. explicit channels/flow |
| 13:39 | shdwprince | sventon: functional experience might be useful here |
| 13:40 | lynaghk | bbloom: so you'd recommend I just use your asyncx's map fn? |
| 13:40 | bbloom | lynaghk: so that's the other thing that tbaldridge & dnolen taught me when i was doing asyncx: the go-as macro is a bad idea b/c composition is accomplished not by function composition, but by channel injection |
| 13:40 | lynaghk | bbloom: I'd rather standardize on one library than reinvent some wheels. |
| 13:41 | sventon | I have some problems getting started and a tutorial for ruby developers should be helpful |
| 13:41 | sventon | like is a clojure symbol equal to symbols in ruby ? |
| 13:41 | bbloom | lynaghk: you compose two goroutines by giving them a shared channel |
| 13:41 | Foxboron | sventon: Python |
| 13:41 | bbloom | lynaghk: that's different than by function composition |
| 13:42 | shdwprince | sventon: shure its not |
| 13:42 | bbloom | lynaghk: i haven't quite figured out how to get the convenience of go-as without the overhead of manually creating extra arities with an extra channel slot |
| 13:42 | Foxboron | sventon: i'd recommend doing clojure-kaons, some stuff at 4clojure and buy a book |
| 13:42 | shdwprince | sventon: in general cases integer is integer and character is character, but data structures should be different |
| 13:42 | lynaghk | bbloom: what's the problem with go-as for my use case? Isn't that the only thing you can do? |
| 13:42 | bbloom | lynaghk: i think the answer might be to curry channel-processing functions & then have some kind of thread-a-new-channel-as-the-last-arg-to-each macro that does the typical thing |
| 13:43 | bbloom | lynaghk: i'm referring to this macro: https://github.com/brandonbloom/asyncx/blob/master/src/asyncx/core.clj#L59-L65 |
| 13:44 | lynaghk | bbloom: yeah, I'm looking at it. Isn't your implementation of map what you're suggesting I do? Create a new channel that contains the json-serialized objects from my original channel? |
| 13:44 | bbloom | (defn map [f in] (go-as out …)) vs (defn map ([f in] (map f in (chan))) ([f in out] ...)))) |
| 13:44 | bbloom | lynaghk: notice how the later has an arity w/o the out channel, so the user can supply their own, but there is a default arity for creating an unbuffered standard channel there |
| 13:45 | lynaghk | bbloom: ah, I see what you mean |
| 13:45 | bbloom | i think there needs to a sort of channel->> macro or something |
| 13:45 | sventon | I found an excellent video tutorial at codeschool but after that I don't know where to go |
| 13:45 | sventon | will give 4clojure a try |
| 13:45 | bbloom | the real issue is that all the asyncx functions return the output channel, but that doesn't really make sense |
| 13:46 | bbloom | for one thing, it swallows the "process channel" which can be useful for monitoring to see when a process ends without fucking with other readers on the output channel |
| 13:46 | lynaghk | bbloom: I've been writing things like the second arity with a bang, because they're side effecting. |
| 13:46 | sventon | should be excellent if I found some ruby / python examples "translated" to clojure |
| 13:46 | bbloom | for another thing, it means that occasionally you have to do some extra copying b/c you want to get stuff on to a fan-in channel or something like that |
| 13:46 | bbloom | lynaghk: the bang isn't for effects, it's for "unsafe in a transaction" :-) |
| 13:47 | sventon | do you consider clojure to be difficult to learn? |
| 13:47 | lynaghk | anything side effecting is unsafe in a transaction |
| 13:47 | bbloom | lynaghk: not if the effects are idempotent, communicative, undoable, etc |
| 13:48 | Foxboron | sventon: clojure itself isnt hard. The functional way of thinking is harder when you come from a imperative/OO thinking |
| 13:48 | lynaghk | bbloom: good point. |
| 13:48 | bbloom | lynaghk: this is way off topic, but a good example is counting. you can increment an atom, or you can conj an ID into a set & then later take the cardinality of the set |
| 13:48 | lynaghk | bbloom: and in this case, the second arity wouldn't be unsafe because you'd just have multiple go blocks doing the same thing? |
| 13:49 | sventon | Foxboron: I see, have it taken you long time as a python dev to get into the functional thinking / clojure ? |
| 13:49 | bbloom | lynaghk: without thinking about it too deeply, yeah. if you spun off a bunch of processes & nobody every listened to them, then let go of your handle to the channels, then they would all get GCed and that would just be benign wasted work |
| 13:51 | Foxboron | sventon: well, hard to compare as python was my first lang, so it did take a lot of work in the start, and that did help me learn clojure faster in one way. But i takes me no effort to code something up in Python. where in clojure it takes more thinking and planning as it is not that easy to just hack together something that just works instead of a solution that works and is also good. |
| 13:52 | lynaghk | bbloom: https://gist.github.com/lynaghk/6257920 |
| 13:52 | lynaghk | bbloom: see any problems with these guys? I tried putting a try/catch in the first one but couldn't get it working with the go block. |
| 13:52 | shdwprince | sventon: in the begining its hard to start thinking functional, but with time you'll get used to it. recursion, for example, almost everywhere will replace iterating, and recursion is more tricky |
| 13:53 | bbloom | lynaghk: seems reasonable. |
| 13:53 | shdwprince | sventon: even after months of active programming in clojure sometimes I finding out intresting solutions in functional style |
| 13:54 | bbloom | lynaghk: appears that the convention is to have the "out" channel be last though, which i see why you didn't do w/ the "into" name and all |
| 13:54 | shdwprince | sventon: its like another world instead of imperative |
| 13:54 | shdwprince | sventon: more logical and well structed |
| 13:54 | bbloom | lynaghk: also, i think in/out are better names, since send/recv are verbs :-) |
| 13:55 | lynaghk | bbloom: I always get tripped up with in/out, since I'm never sure whos perspective it's supposed to be written in |
| 13:55 | bbloom | lynaghk: always the local perspective |
| 13:55 | lynaghk | bbloom: then your signatures are confusing as hell |
| 13:56 | bbloom | lynaghk: how so? if you have signature (map f in out), you use the local perspective of map |
| 13:57 | lynaghk | bbloom: hmm. I'll give the in/out and local perspective a shot |
| 13:57 | lynaghk | maybe update zmq-async and jetty7-websockets libraries too. |
| 13:58 | bbloom | read it as "map the function f over map's input channel and send the results to map's output channel" |
| 13:58 | lynaghk | bbloom: you have a blog, right? it'd be pretty rad if you wrote all of these conventions up so I could link to 'em |
| 13:58 | bbloom | think in terms of the process operating on the channels |
| 13:58 | lynaghk | there or in a gist. just sayin' =P |
| 13:58 | bbloom | i updated asyncx with a link to this irc chat lol |
| 13:58 | bbloom | just now |
| 13:58 | bbloom | :-) |
| 13:58 | bbloom | mainly as a reminder to myself to maybe update asyncx or otherwise document this stuff |
| 14:00 | seangrove | I feel lucky to have watched the conversation |
| 14:00 | lynaghk | bbloom: well, I might take a stab at it myself later today |
| 14:00 | seangrove | Good stuff |
| 14:00 | lynaghk | seangrove: I spend most of my time on the Internet chasing smart people and being confused as hell near them until they dispense wisdoms. |
| 14:00 | lynaghk | well, in real life too. |
| 14:01 | shoky | bbloom: the link points to the wrong place i believe ;p |
| 14:01 | bbloom | d'oh. thanks shoky |
| 14:01 | bbloom | used the wrong footnote number |
| 14:03 | sventon | thanks for your help! |
| 14:03 | sventon | will take a look at http://clojurekoans.com/ |
| 14:21 | lynaghk | bbloom: Updated https://github.com/lynaghk/zmq-async with your in/out naming recommendations. |
| 14:22 | bbloom | ::thumbsup:: |
| 14:35 | egghead | did you just core.async the network lynaghk |
| 14:35 | egghead | looks very neat |
| 14:36 | lynaghk | egghead: yeah, I've been kicking around some zeromq stuff and websocket stuff on core.async lately |
| 14:36 | lynaghk | egghead: we'll see how it turns out in practice---it's not a domain I have a ton of experience with (outside of clientside apps, anyway). |
| 14:37 | egghead | ya I built a little hacky websocket channel a while back over goog.websocket |
| 14:38 | egghead | it wass really interesting to use but I'm not sure how much of an impedence mismatch there was between it and core.asyncs message passing model |
| 14:40 | egghead | separating the network layer and async layer looks way cleaner than what I was doing: https://gist.github.com/eggsby/6102537 |
| 14:40 | egghead | :p |
| 14:51 | lynaghk | bbloom: why have output channel in the last position? It contradict's clojure's sequence fns |
| 14:51 | lynaghk | *contradicts |
| 14:52 | bbloom | lynaghk: i'm not the authority on this by any means, but it seems like that's the pattern b/c of the other arity leaving the last arg off as optional |
| 14:53 | lynaghk | bbloom: ah, right. |
| 14:54 | lynaghk | bbloom: having a lot of functions that create unbounded channels on your behalf sounds like a recipe for trouble. |
| 14:54 | bbloom | they are unbuffered, not unbounded |
| 14:54 | bbloom | which is like the opposite of unbounded :-) |
| 14:54 | bbloom | but yeah, i'm not completely satisfied w/ that pattern either |
| 14:54 | bbloom | hence the proposal for something like a channel->> |
| 14:56 | bbloom | could have a higher order fn to do the same as the macro too, something like (call-out map f in) => returns out |
| 14:56 | bbloom | then the functions could either only have the full arity, or be curried like ((map f in) out) |
| 14:56 | lynaghk | hmm |
| 14:57 | lynaghk | bbloom: I'm wondering if there's a connection with reducers here |
| 14:58 | bbloom | reducers do this w/ the curried args |
| 14:59 | bbloom | it's sorta unfortuante that variable arity & currying don't really go well together, but more than that, function argument order is kinda inherently arbitrary |
| 14:59 | lynaghk | bbloom: yeah, the biggest change I made in zmq-async yesterday was dropping the 4-or-5ish arity for an opts map. |
| 15:00 | bbloom | lazy sequences are kinda like channels that always supply a single out themselves. reducers defer that out supply to the very end, when the expression is forced. channels can have multiple outs and multiple ins, so it makes less sense to force such an automatic supplied conduit through a pipeline |
| 15:00 | bbloom | that's one of the few things i really miss from Python: * and ** |
| 15:01 | bbloom | clojure's handling of kwargs is kinda awkward for non-syntax-level use |
| 15:01 | bbloom | what's that clojurebot prompt again? |
| 15:02 | bbloom | ~mapply |
| 15:02 | clojurebot | You have to do something like (defn mapply [f & args] (apply f (apply concat (butlast args) (last args)))), which just goes to show why unrolled keyword args are a bad idea |
| 15:02 | bbloom | :-) |
| 15:02 | lynaghk | bbloom: yeah. I stopped using kwargs for a one-arg map |
| 15:04 | lynaghk | well, I'm going to try building some stuff with the pieces I have now and see where it hurts |
| 15:04 | lynaghk | and get back to you on nicer syntax idesa. |
| 15:17 | _zach | bbloom: I've been pairing with Kevin and doing some core.async stuff. I translated a few ideas from a recent post into core.async and came up with this: https://github.com/zachallaun/async-pipeline. Looking for someone to tear it apart (the idea, not the code). |
| 15:18 | _zach | The basic idea is to create a relatively robust process pipeline with automatic restart |
| 15:26 | bbloom | _zach: so the idea is that if you encounter an error, you return that from your loop & that is observed from some parent-level manager of sorts? |
| 15:26 | _zach | bbloom: Yeah, I was hoping to be able to handle errors that the processes identify and actual exceptions in the same way |
| 15:27 | _zach | (the go-try helper returns [:thrown EXCEPTION] in the event of an exception) |
| 15:27 | bbloom | i don't have time at this moment to deeply think about this, but in general, the erlang people are the ones to talk to about error recovery and robustness :-) but i think the overall idea is reasonable, considering hierarchies of supervisors and mutually-dependent observers are basically the only two valid strategies for concurrent/distributed error handling |
| 15:28 | _zach | cool, thanks for your thoughts :) |
| 15:28 | bbloom | and even the mutually recursive thing requires some sort of lowest common anscestor to coordinate that arrangement in the first place |
| 15:29 | tufflax | I did (eval (symbol "KeyInput/KEY_W")) in the repl and it worked, but then I tried the same thing in a function and I got: "No such namespace: KeyInput" even though I have imported the class. Why? |
| 15:34 | _zach | It sounds like an issue with the import |
| 15:34 | _zach | though you may want to question the need to eval |
| 15:41 | amalloy | tufflax: eval always happens in a null lexical context, and usually in the clojure.core namespace rather than in the namespace you call it from |
| 15:42 | amalloy | you really want to use reflection to look up the field, not eval (assuming nothing better is available) |
| 15:42 | tufflax | _zach: yeah now all of a sudden it works hm. The reason I'm doing eval is that a user might specify a key as only "W", but I need KeyInput/KEY_W in that case. Do you have any suggestions? |
| 15:42 | tufflax | amalloy: ok, well it just started working now, all i did was add (println KeyInput) on the line above |
| 15:43 | tufflax | amalloy: I tried `resolve` but it didn't work. I guess it doesn't work with Java classes, or at least not the way I tried |
| 15:47 | tufflax | amalloy: I'm doing this: (eval (symbol (str "KeyInput/KEY_" (.toUpperCase s)))) What should I be doing in this case? I don't really understand how I can use reflection to accomplish the same thing. |
| 15:50 | amalloy | tufflax: (-> (.getField KeyInput (str "KEY_" s)) (.get nil)), iirc |
| 15:52 | amalloy | i don't know where KeyInput is defined, so i can't demonstrate that convincingly |
| 15:54 | tufflax | amalloy: ok thanks I'll try |
| 15:58 | supersym | nice, got a free book tip via prismatic: “Probably Approximately Correct: Nature’s Algorithms for Learning and Prospering in a Complex World ”http://goo.gl/5r9kT3 for any other AI enthousiasts |
| 16:09 | cjfrisz | ping dnolen |
| 17:04 | nifff | hello room :) |
| 17:05 | nifff | i want to make a parallel map,in a sequence containing 100-200 items,evaluate time differs greatly between them,and the whole time for the map is about 5 sec |
| 17:06 | nifff | how parallize that kind of sequences? |
| 17:07 | nifff | i tried reduces,pmap doesnt work if i am doing them right.... |
| 17:11 | hyPiRion | Might want to use ExecutorServices there |
| 17:53 | reginton | hi |
| 17:53 | reginton | I'm wondering if anyone has any idea what clojure.lang.RT is all about? I've been looking at clojure.core and it keeps showing up... |
| 17:54 | pandeiro | anybody know how to view docstrings in lighttable? is there anything built in? |
| 17:55 | reginton | pandeiro: is lighttable useable yet? |
| 17:57 | reginton | well, I'll ask again later |
| 17:57 | pandeiro | reginton: that's the question |
| 17:58 | pandeiro | i am doing some complicated (for me) text parsing and decided to try to visualize things with lighttable |
| 17:59 | pandeiro | it has been useful but (with-out-str (clojure.repl/doc some-fn)) is killing me |
| 17:59 | reginton | oh |
| 17:59 | reginton | that was my only suggestion |
| 17:59 | reginton | :\ |
| 17:59 | pandeiro | i thought i remembered docstrings being built in somehow... must have been an old version |
| 18:00 | reginton | actually, I was asking out of curiosity; last time I tried it, a few months ago, it was pretty impossible to use |
| 18:00 | pandeiro | reginton: this is my fourth or fifth serious try |
| 18:00 | pandeiro | i think it's getting close |
| 18:00 | pandeiro | and i am also realizing what it might be good for |
| 18:00 | pandeiro | it doesn't replace emacs or anything |
| 18:01 | pandeiro | i wish it were implemented as a webapp: then it could possibly replace codepen |
| 18:04 | nifff | i want to make a parallel map,in a sequence containing 100-200 items,evaluate time differs greatly between them,and the whole time for the map is about 5 sec |
| 18:05 | reginton | nifff: can you be more clear about what you mean by "parallel" and "in a sequence" and "them" and "time for the map"? |
| 18:05 | reginton | or not |
| 18:07 | nifff | s |
| 18:08 | pandeiro | ah ok so lighttable sends *out* to its console, 3 cheers for the faq |
| 18:15 | seangrove | The clojure syntax thread was already tiresome, but it's completely gone off the deep end now |
| 18:15 | seangrove | I'm not even sure it's coherent anymore |
| 18:15 | cespare | seangrove: link? |
| 18:18 | seangrove | cespare: meh, I just muted the thread, but read through if you'd like https://groups.google.com/forum/#!msg/clojure/N0MKFKd1OXI/Pj_CsZyeQqUJ |
| 18:27 | bbloom | i did like the comment about a diabetic brain |
| 19:06 | Raynes | seangrove: Oh dear, more of that shit? |
| 19:07 | seangrove | Raynes: Way beyond previous levels |
| 19:08 | Raynes | alexbaranosky: You should look at Elixir's macros. |
| 19:08 | bbloom | or Julia's |
| 19:09 | bbloom | i prefer sexprs too, but it's never been true that you needed them for homoiconicity |
| 19:10 | Raynes | Right, he didn't say that. |
| 19:10 | Raynes | "IMO, macros without homoiconicity are unnecessarily complex" |
| 19:10 | Raynes | I'm not sure I agree with that, having worked with Elixir for a while. |
| 19:11 | bbloom | similarly, i always found it pretty easy to work w/ expressions in mathematica despite the large amounts of syntactical sugar |
| 19:15 | lgs32a | where can I find Elixirs or Julias macros |
| 19:15 | Raynes | $google elixir macros |
| 19:15 | lazybot | [5 Macros - Elixir] http://elixir-lang.org/getting_started/5.html |
| 19:15 | bbloom | i'm sure that will work for julia too... |
| 19:15 | bbloom | $google julia macros |
| 19:16 | lazybot | [Metaprogramming — Julia Language 0.2-dev documentation] http://docs.julialang.org/en/latest/manual/metaprogramming/ |
| 19:16 | bbloom | (inc lazybot) |
| 19:16 | lazybot | ⇒ 19 |
| 19:16 | bbloom | (inc google) |
| 19:16 | lazybot | ⇒ 1 |
| 19:16 | Raynes | (inc bbloom) |
| 19:16 | lazybot | ⇒ 13 |
| 19:16 | antares_ | (inc Raynes) |
| 19:16 | lazybot | ⇒ 35 |
| 19:16 | Raynes | :D |
| 19:16 | antares_ | I thought it would be positive infinity |
| 19:17 | faust45 | hi guys |
| 19:17 | faust45 | need your help |
| 19:17 | lgs32a | shoot |
| 19:17 | faust45 | i want doing something like this: |
| 19:18 | faust45 | i have 2 lists of functions A and B |
| 19:18 | faust45 | i want make: |
| 19:20 | faust45 | [(B1 A1) (B1 A2) ] [(B2 A1) (B2 A2)] [(B3 A1) (B3 A2)] |
| 19:21 | amalloy | (for [b bs] (for [a as] (b a)))? |
| 19:21 | lgs32a | (for [ax A bx B] ['(ax bx)]) ? |
| 19:23 | lgs32a | the last vector really spoils the logic |
| 19:23 | lgs32a | why not [(B3 A2) (B3 A3)] |
| 19:23 | TEttinger | ,(for [b [dec dec dec dec]a [inc dec inc dec]] [(b 5) (a 5)]) |
| 19:23 | clojurebot | ([4 6] [4 4] [4 6] [4 4] [4 6] ...) |
| 19:24 | TEttinger | not sure what I was hoping |
| 19:24 | TEttinger | ##(for [b [dec dec dec dec]a [inc dec inc dec]] [(b 5) (a 5)]) |
| 19:24 | lazybot | ⇒ ([4 6] [4 4] [4 6] [4 4] [4 6] [4 4] [4 6] [4 4] [4 6] [4 4] [4 6] [4 4] [4 6] [4 4] [4 6] [4 4]) |
| 19:25 | faust45 | let me try |
| 19:25 | Chousuke | are you sure you know what you want? :P |
| 19:25 | TEttinger | err |
| 19:25 | lgs32a | ha i got it |
| 19:25 | TEttinger | problem with the for and 2 loops is it's flat |
| 19:26 | `cbp | what amalloy said was right |
| 19:26 | faust45 | i try write dsl |
| 19:26 | `cbp | just add a vec in that second for I guess |
| 19:26 | faust45 | describe chess figure |
| 19:26 | faust45 | like this |
| 19:26 | faust45 | (deff p (d1 d2) (front back) (attack 1)) |
| 19:26 | `cbp | ,(for [b '(b1 b2 b3)] (vec (for [a '(a1 a2)] (list b a)))) |
| 19:26 | clojurebot | ([(b1 a1) (b1 a2)] [(b2 a1) (b2 a2)] [(b3 a1) (b3 a2)]) |
| 19:26 | faust45 | describe pown |
| 19:26 | faust45 | (deff p (d1 d2) (front back) (attack 1)) |
| 19:27 | lgs32a | describe knight? |
| 19:28 | faust45 | lgs32a: i, don't think about knight |
| 19:28 | faust45 | lgs32a: any ideas ? |
| 19:29 | lgs32a | honestly i don't understand how you desribe pawn in the first place |
| 19:29 | faust45 | (deff p (d1 d2) (front) (attack 1)) |
| 19:29 | faust45 | (d1 d2) diagonals |
| 19:30 | faust45 | only front |
| 19:30 | faust45 | and attack only first cell |
| 19:30 | faust45 | on each diagonal |
| 19:31 | lgs32a | what data type is used for d1 d2 |
| 19:31 | faust45 | d1 is lazy seq |
| 19:31 | lgs32a | of what |
| 19:31 | faust45 | of cells |
| 19:32 | faust45 | (d1 [3 3]) -> |
| 19:32 | faust45 | ([2 4] [1 5]) |
| 19:32 | lgs32a | ah i see |
| 19:32 | lgs32a | and what is front and attack doing? |
| 19:34 | faust45 | ((attack 1) (d1 [3 3])) -> ('attack [2 4]) |
| 19:35 | faust45 | (d1 (front [3 3])) and you can (d1 (back [3 3])) |
| 19:35 | faust45 | by default (d1 [3 3]) same as (d1 (front [3 3])) |
| 19:36 | lgs32a | how can you apply a vector on a lazy-seq in (d1 [3 3]) |
| 19:36 | lgs32a | ah no its a function i understand |
| 19:36 | faust45 | d1 is partial |
| 19:37 | faust45 | its waiting to xy |
| 19:37 | lgs32a | yes it returns a lazy-seq of diagonal chess fields |
| 19:37 | lgs32a | in one direction to the bottom left |
| 19:37 | faust45 | yes |
| 19:37 | faust45 | lgs32a: you play chess? |
| 19:38 | lgs32a | yes, can you explain deff? |
| 19:38 | john2x | is there a library for diffing 2 files (same result as git diff)? or should I use something else? |
| 19:38 | faust45 | lgs32a: deff its a macros |
| 19:38 | faust45 | which i try to write |
| 19:38 | lgs32a | tried clojure.data/diff on a line-seq? |
| 19:39 | TEttinger | faust45, you need to be able to describe jumps (like the knight), fixed movement (like the pawn), and ranging movement (like the rook and bishop) for chess. define functions in your DSL for each of those, maybe just have a map to vectors, like {:ranging [:nw :ne :sw :se]} for the bishop, {:jumping [:knight]} for the knight, because its movement is hard to try to describe... |
| 19:40 | TEttinger | you can totally do this with lazy seqs of cells, but that won't work for jumping as well, will it? |
| 19:41 | TEttinger | I'm thinking, with only 6 units in chess, it would be easier to code the movements in data rather than as a DSL |
| 19:41 | faust45 | TEttinger: what you mean in data? |
| 19:41 | TEttinger | like just a vector of vector of booleans even |
| 19:42 | krlr | hey, i'm using def-map-type in potemkin, and it seems the assoc method does not get evaluated correctly, instead assoc just associates on the record |
| 19:42 | TEttinger | oh that works. hang on let me find it |
| 19:42 | krlr | how could i implement an object that responds specially to assoc? |
| 19:43 | TEttinger | faust45, like this: http://en.wikipedia.org/wiki/Tenjiku_shogi#Individual_pieces |
| 19:44 | TEttinger | tenjiku shogi actually needs a DSL-type thing to describe all the movement types |
| 19:44 | lgs32a | you may want to watch this chess implementation in haskell: http://www.youtube.com/watch?v=ScS8Q32lMxA |
| 19:44 | krlr | TEttinger: I like representing grids like in a game of chess as maps, {[0 3] :rook [4 2] :pawn} for example |
| 19:44 | TEttinger | but they describe it with just... a 2d vector of "ranging, jumping, fixed, no-move" pretty much for each cell |
| 19:45 | TEttinger | krlr good idea |
| 19:45 | krlr | then you get infinite board for free :) |
| 19:47 | faust45 | i take a look at http://en.wikipedia.org/wiki/Tenjiku_shogi#Individual_pieces |
| 19:47 | TEttinger | faust45, see how it can describe almost any kind of movement given a few basic terms? |
| 19:47 | krlr | TEttinger: in chess you could just have a function for each piece-type that returns the possible moves for a given position |
| 19:47 | faust45 | TEttinger: no |
| 19:48 | TEttinger | faust45, I am referring to the grids |
| 19:48 | krlr | don't think you need dsls here |
| 19:48 | TEttinger | the terms are the symbols in the grid, which are like what krlr is saying |
| 19:48 | TEttinger | possible moves from the place you are |
| 19:49 | faust45 | TEttinger: yes, but i need calc possible moves for diff places |
| 19:49 | TEttinger | so? |
| 19:49 | TEttinger | it's relative |
| 19:49 | faust45 | so i need transfer relative coords to obsolute |
| 19:49 | TEttinger | yeah, that's super easy |
| 19:51 | adammh | hey, core.async question... I just started playing with it a bit and I was wondering if there's an easy way to map values between channels |
| 19:52 | adammh | right now I end up with something like... (go (while true (let [v1 (<! chan1)] (>! chan2 (something v1))))) |
| 19:52 | adammh | which seems a bit bizarre |
| 19:59 | faust45 | TEttinger: you mean like this? |
| 19:59 | faust45 | https://gist.github.com/faust45/6259183 |
| 20:00 | TEttinger | err kinda |
| 20:00 | dnolen | adammh: write a channel map |
| 20:01 | TEttinger | for chess you really only need a 5x5, and just center the grid on the moving piece. |
| 20:01 | TEttinger | let me try to make an example |
| 20:01 | adammh | dnolen: totally - I just didn't want to write it if it already existed |
| 20:01 | dnolen | adammh: not a part of core.async |
| 20:02 | adammh | cool, thanks! |
| 20:07 | TEttinger | faust45, you can do it like that, with numbers, and have the number mean how you get there (by jumping or sliding, for example) or have a :keyword that you check when you see what goes beyond that movement. https://gist.github.com/tommyettinger/6259191 there is a simpler way probably, and this type of thing has issues when you figure out what moves beyond the close squares, like from the corner to the other corner. |
| 20:07 | TEttinger | hm |
| 20:08 | TEttinger | yeah, honestly? it's simplest just to hard-code the unit movement for only 6 pieces. |
| 20:08 | TEttinger | knight is too hard to accomodate in a DSL |
| 20:10 | faust45 | TEttinger: :range :range mean all possible in this direction on real board? |
| 20:15 | faust45 | TEttinger: also need handle pown cases: when pown make first move it can move 2 cells if not first only 1 cell |
| 20:17 | amalloy | don't forget en passant! |
| 20:17 | adammh | TEttinger: also castling |
| 20:20 | TEttinger | yeah a DSL is not going to be able to describe all these special cases without having deep ties to all parts of the code, like has the rook moved yet, for castling |
| 20:25 | lgs32a | exit |
| 20:26 | faust45 | TEttinger: and what kind of marks you think i can use :range what else? |
| 20:27 | TEttinger | faust45, I'm doubting this approach. there's a lot of special cases in chess this can't cover |
| 20:27 | TEttinger | like en passant and castling |
| 20:29 | faust45 | TEttinger: doubting? but what you think can work better? |
| 20:29 | amalloy | faust45: functions |
| 20:30 | faust45 | maybe any one want try pair programming on chess? |
| 20:30 | amalloy | (fn legal-pawn-moves [board pawn-coords] (filter identity [(forward 1 pawn-coords) (when (not-moved? board pawn-coords) (forward 2 pawn-coords)) ...])) |
| 20:30 | faust45 | i feel i need a partner on this |
| 20:42 | faust45 | nobody want ? |
| 20:42 | faust45 | ) |
| 20:46 | TEttinger | faust45, maybe take a look at that haskell video that lgs32a posted http://www.youtube.com/watch?v=ScS8Q32lMxA |
| 21:21 | seangrove | dnolen: Where does '("me")' get translated into "me".call(null)? |
| 21:21 | seangrove | I'm specifically looking for how () => .call() |
| 21:22 | dnolen | seangrove: in the compiler that happens in the :invoke case, but it's the analyzer that generates :invoke AST nodes |
| 21:25 | seangrove | dnolen: Yeah, just looking through that, wondering where the ".call" text is output. Looks like there's a few different ways, depending on the condition |
| 21:25 | seangrove | Just doing some really big hack-and-slash changes to see if I can get .call off of the String prototype and still have clojure run properly |
| 21:25 | dnolen | seangrove: it's the :invoke case in the compiler that generates .call |
| 21:26 | seangrove | Looks good, thanks |
| 21:27 | dnolen | seangrove: I would really love to get that off the String prototype, keywords as strings needs to die |
| 21:29 | seangrove | dnolen: I wouldn't mind (post source-maps) taking a swing at 'proper keywords', if it's written out somewhere |
| 21:30 | seangrove | I'm looking at an email on the ml you wrote about it for people dealing with the same problem I am about the .call on the String prototype, but I'm doing it in a pretty hacky way |
| 21:30 | dnolen | seangrove: keywords, it's not written out somewhere but the idea is pretty simple, we just need to optimize constants (generate a lookup table), soon as we have that we can give .call on String the boot and clean up all the damn special cases around keywords & strings from the standard library |
| 21:33 | seangrove | dnolen: Wouldn't that break if I add a string as a key in a map at runtime? |
| 21:33 | seangrove | e.g. (let [k (get-some-external-input) m {k 10}] ...) |
| 21:34 | dnolen | seangrove: break how? (we will probably need keyword-identical?) |
| 21:37 | seangrove | dnolen: Could you describe the process of optimizing constants/generating a lookup table, and whatever else it would take to get proper keywords? I don't think I know enough to do anything useful just off of that right now |
| 21:38 | dnolen | seangrove: we need a keyword deftype that looks more less similar to the symbol deftype |
| 21:38 | dnolen | seangrove: then in the analyzer we want to keep a atom of all constants |
| 21:39 | dnolen | seangrove: the compiler can use this to emit references to the constant table |
| 21:40 | dnolen | seangrove: we already have logic for determining whether a literal is a constant or not, we just need record them somewhere |
| 21:43 | seangrove | Looking through the definitions now... |
| 21:53 | seangrove | Where is -lookup defined? https://www.refheap.com/17725 |
| 21:56 | amalloy | seangrove: in ILookup, surely? |
| 21:56 | amalloy | or the cljs equivalent |
| 21:57 | seangrove | amalloy: I'm a little fuzzy on definitely of protocols and their implementations, so likely to ask some silly questions |
| 22:01 | seangrove | So in the case of this Symbol deftype, the IFn implementation calls out to the -lookup function on the collection. The collection type has to satisfy the ILookup protocol, which is where the actual -lookup implementation happens. |
| 22:03 | amalloy | seangrove: indeed, just like in clj-jvm |
| 22:04 | seangrove | amalloy: Sorry, making my way into the clojure innards by way of the clojurescript compiler, so I'll likely continue making a lot of silly realizations |
| 22:05 | seangrove | Clojure on the jvm pretty much does everything I've ever asked of it, so I haven't needed to look inside |
| 22:09 | amalloy | it's a good read all the same |
| 22:11 | holo | hi |
| 22:15 | holo | in https://www.refheap.com/17726 can someone paste that def into the repl and check if it's consumed properly? i can't consume it in the repl, but tests against it work fine, so i'm suspecting there is some issue related to the repl |
| 22:18 | holo | a test like this works just fine: (fact (first phonem-maps) => map?) |
| 22:42 | clj_newb_2345 | one thing I find missing about Clojure compared to other lisps -- is getting a repl debugger when an exception happens. Now, I understand that this is unreasonable if the exception happens in Java code -- but is it possible to get thte repl debugger at "the top most Clojure function call" ? |
| 22:42 | clj_newb_2345 | Actual question: is there any project working on providing the above? |
| 22:44 | seangrove | clj_newb_2345: Isn't that a bit like ritz? |
| 22:45 | clj_newb_2345 | seangrove: reading ritz presentation now |
| 22:50 | ysawej1 | hi all |
| 22:50 | ysawej1 | I was wondering if there is named capture in clojure? |
| 22:51 | ysawej1 | http://www.regular-expressions.info/named.html |
| 22:51 | ysawej1 | for regex |
| 22:51 | clj_newb_2345 | what parts of light table are NOT open source? |
| 22:55 | ysawej1 | is named capture for regex available in clojure? http://www.regular-expressions.info/named.html |
| 22:57 | ysawej1 | looks like I got it guys... its here : https://github.com/rufoa/named-re |
| 22:58 | seangrove | clj_newb_2345: Everything for the time being, I believe |
| 23:02 | seangrove | "Note well that mutable fields are extremely difficult to use correctly, and are present only to facilitate the building of higher level constructs, such as Clojure's reference types, in Clojure itself. They are for experts only - if the semantics and implications of :volatile-mutable or :unsynchronized-mutable are not immediately apparent to you, you should not be using them." |
| 23:02 | seangrove | That's a lovely comment |
| 23:05 | muhoo | "reference types"? |