#clojure logs

2012-02-25

00:12muhoois there any non-painful way to redirect println's to a tcp-connected lein repl?
00:13muhoocause, if i run (println "foo") in the lein repl connected via tcp, i get "foo" , life is good. but, if i put (println "foo") in a function that's called from a server, like, say aleph/netty, it gets output to stdoout, not to tthe lein repl
00:14muhooah, nm i see #<OutputStreamWriter java.io.OutputStreamWriter@602f958>
00:14muhoo*out* is different in each
00:15muhoo&*out*
00:15lazybot⇒ #<StringWriter >
00:15muhoo,*out*
00:15clojurebot#<StringWriter >
00:33tardo(= (__ "Dave") "Hello, Dave!") to make that true, i thought i should use str "Hello, " but alas that's not right
00:34tardoshoot that wouldn't hit the "!"
00:40theconartisttardo: concatenate
00:40tardotheconartist: i found a solution
00:40tardout
00:40tardobut
00:41tardoi did (fn [x] (str "Hello, " x "!"))
00:41tardoand i see that #(str "Hello, " % "!") works
00:41tardobut why does it need the "#"
00:41tardois it just a shorthand for a function?
00:41theconartistyea it's a macro
00:42tardocool
00:42theconartiststr is just string concat btw, so yea
00:43alexykone can extract multiple keys into a vector like: &(map {:a [10 11] :b [20 21] :c 3} [:a :b])
00:43alexyk&(map {:a 1 :b 2 :c 3} [:a :b])
00:43lazybot⇒ (1 2)
00:43alexyknow I want to extract first elements of vectors under keys
00:44alexyk&(map {:a [10 11] :b [20 21] :c 3} [:a :b])
00:44lazybot⇒ ([10 11] [20 21])
00:44alexykbut I want
00:44alexyk&(map {:a [10 11] :b [20 21] :c 3} [(comp first :a) (comp first :b)]
00:44lazybotjava.lang.RuntimeException: EOF while reading, starting at line 1
00:45alexykcan I get the first elements in the same map, without a second (map first …)
00:45alexyk?
00:58qbg&(map (comp first {:a [10 11], :b [20 21]}) [:a :b])
00:58lazybot⇒ (10 20)
00:58qbgalexyk: like that?
00:59alexykyeah
00:59mdeboardDoes the `_` here mean something specific or just a generic local variable binding: `(defmethod fib 0 [_] 1)`
00:59qbgGeneric ignorable parameter
00:59alexykthe problem is more general: I want a key :a and a first element of a sub vector under ut but the whole :b
01:02qbg&(map #(({:a first, :b identity} %) ({:a [10 11], :b [20 21]} %)) [:a :b])
01:02lazybot⇒ (10 [20 21])
01:03qbgThat problem sounds more complex than it needs to be (without knowing context at least)
01:04IceD^technomancy, hey
01:04IceD^technomancy, how do we add various slime extensions when we loading slime from clojure-jack-in]
01:06IceD^for example, I'd like to have thouse fuzzy expansions, but don't want to resort writing too much about it into .emacs
01:06murmhow would I do a map lookup with a regex?
01:06IceD^murm, ?
01:06IceD^murm, what do you mean
01:06murm(re-verb {"match-me" "value"})
01:07murm(re-verb "match" {"match-me" "value"})
01:07murmrather
01:07IceD^you want to match key and return value?
01:07murm(re-verb "match" {"match-me" "value" "nomas" "val2"}) => "value"
01:07murmyea
01:07IceD^as usually
01:07IceD^re-match key, get value by key
01:08qbgIf multiple match, which one would be returned?
01:08murmfirst
01:08IceD^map isn't ordered ;]
01:09IceD^but yes - as I said - use (keys map)
01:11qbg&(->> {"match" 1, "nomas" 2} (filter (comp (partial re-matches #"mat.*") first)) first second)
01:11lazybot⇒ 1
01:11qbgBut that is just insane...
01:11emezeske,(first (filter (fn [[k _]] (re-matches #"a$" k)) {"a" 1 "b" 2 "c" 3}))
01:11clojurebotExecution Timed Out
01:11emezeske&(first (filter (fn [[k _]] (re-matches #"a$" k)) {"a" 1 "b" 2 "c" 3}))
01:11lazybot⇒ ["a" 1]
01:12murmmm
01:12emezeskeHeh, I guess that's pretty much the same as qbg's ^_^
01:12qbg&(first (filter (fn [[k _]] (re-matches #"a$" k)) {"a" 1 "b" 2 "c" 3}))
01:12lazybot⇒ ["a" 1]
01:13qbgMade yours a bit shorter :)
01:13qbg&(first (filter (fn [[k]] (re-matches #"a$" k)) {"a" 1 "b" 2 "c" 3}))
01:13lazybot⇒ ["a" 1]
01:13qbgThere we go
01:13emezeskeqbg: Oh, nice, I didn't know you could do that
01:13emezeske&(let [[a] [1 2 3 4 5]] a)
01:13lazybot⇒ 1
01:14emezeskeNeat
01:15IceD^does bot have protection from (repeat 1)?
01:15emezeskeIceD^: Yeah I think there are sandboxy limits set up
01:15IceD^wana try? :)
01:16emezeske&(repeat 1)
01:16lazybotExecution Timed Out!
01:16emezeske"Execution Timed Out" is my guess
01:16emezeskeah
01:16IceD^:)
01:16IceD^nicely
01:17IceD^sideeffects goes to /dev/null I think
01:17IceD^&(println 123)
01:17lazybot⇒ 123 nil
01:17IceD^mhm
01:17IceD^&(println "1\n2\n")
01:17lazybot⇒ 1 2 nil
01:17IceD^well, at least it eats newlines
01:21qbg&(let [m {"a" 1 "b" 2 "c" 3}] (m (some #(re-matches #"a$" %) (keys m))))
01:21lazybot⇒ 1
01:22emezeskeqbg: I like that one
01:32IceD^back to my issue
01:33IceD^I did some reasearch and still don't see how to get my fuzzy expanding in clojure-jack-ined slime
01:33IceD^main problem here - I go tune my emacs when I'm tired and can't do anything productive ;]
01:34IceD^so some help 'd be welcome
01:39IceD^or just give me quite few .emacses here at list ;)
02:14tjgillieshow do i not use state here? https://refheap.com/paste/839
02:14tjgilliestypically i would make :name be a ref and mutate it, but i think thats wrong way to be doing it
02:16tjgilliesor should i be using a ref since im working across threads?
02:16IceD^make person a ref
02:17IceD^all data are immutable unless you ref
02:17tjgilliesshould person be a ref? or should :name be a ref?
02:17IceD^I'd vote for person
02:17tjgillieswhy? isn't that really OOish?
02:17IceD^you are mutating person, not name
02:18tjgilliesim mutating the name attribute of person
02:18tjgilliesideally i would not like to mutate anything and just update the structure "tyler" variable points to
02:18tjgilliesbut im not sure i can do that across threads
02:18tjgilliess/not like to/like to not/
02:27qbg&(doc alter-var-root)
02:27lazybotjava.lang.SecurityException: You tripped the alarm! alter-var-root is bad!
02:27qbg,(doc alter-var-root)
02:27clojurebot"([v f & args]); Atomically alters the root binding of var v by applying f to its current value plus any args"
02:28qbgStill, indirecting through a(nother) reference type would be nicer
02:29tjgillieswoah thats a cool function
02:29tjgilliesnever seen that before
02:29qbgVery little reason to use it though
02:30qbgUsing an atom or ref is almost always better
02:30tjgilliesok
02:30tjgilliesthats what i was asking
02:30tjgilliesclojure seems to have an anti-state mentality
02:31tjgilliesso i wanted to know when to use stateful things
02:31qbgWhen you have to :)
02:31tjgilliesyes
02:31tjgilliesthat is clever, but not entirely helpful
02:31tjgillies:)
02:32qbgYou usually try to push all of your state into just a few instances of the reference types
02:32qbgDepends on what you need to do though
02:32bsteuberit's not really anti-state, more like "be conscious about your state"
02:32tjgilliesim a ruby guy so im used to everything being an object
02:33tjgilliesthen i go to clojure where its "theres not really any such thing as an object"
02:33qbgThey're still objects, but immutable objects
02:33bsteuberoh everything is still an Object in java sense :) just not mutable most of the time ^^
02:33bsteuberargh, too slow
02:34qbgWe just don't tie functions to our objects
02:34bsteuberdata is always stateless
02:35bsteuberbut a reference can hold different data over time
02:35bsteuberan "object" is a lot of things at once
02:35bsteuberclojure rather gives you all aspects split apart
02:36tjgillieswhich is what i meant by "theres not really any such thing as an object"
02:36tjgilliestheres aspects, that combined, can be called an "object"
02:37tjgilliesim talking more in the philosophical sense, not what literally is happening on the JVM because i realize the datastructures are objects there
02:39callentjgillies: just pass data around man.
02:39callenno need to mutate 99% of the time.
02:39qbgFor simple applications, you can store all of the state in a single atom or ref
02:40qbgCreate the future using a pure function of the past
02:40tjgilliesthats the part that scares me
02:40tjgilliesdecoupling state from object identity
02:40tjgillieskeeping those together is so familiar to me ;)
02:40bsteuberthe funny thing is, once you're familiar with it you will consider everything else insane
02:40dbushenkohi all!
02:40callenbsteuber is quite right here.
02:41tjgilliesi look forward to that day, hence my presence here
02:41dbushenkowhat is the best library for parsers implementation with clojure?
02:41callentjgillies: just do some 4clojure exercises.
02:41callendbushenko: well, depends on the kind of parser
02:41callendbushenko: there's a clj-peg IIRC
02:41tjgilliesoh cool
02:41tjgilliesjust googled 4clojure never been there before
02:41dbushenkocallen, and what are the options?
02:41tjgillieslooks neat
02:42tjgilliescallen: thnx
02:42qbgConsider an address book application. The state would probably be a map of names to entries.
02:42callentjgillies: once you've made yourself comfy, implement something using idiomatic Clojure, avoiding mutation.
02:42emezeskebsteuber: I'm quite familiar with immutability and functional programming, and I definitely don't find everything else insane.
02:43qbgTo change, say the city of "bob", you'd do (swap! the-state assoc-in ["bob" :city] "Anytown")
02:43qbg*the city bob lives in
02:44tjgilliesi think he meant specifically coupleing state and object identity is insane
02:44tjgilliescoupling*
02:44tjgilliesi could be wrong however
02:44emezesketjgillies: Right, and I don't think it is :)
02:44tjgilliesah
02:44callentjgillies: it's just hard to manage once you're doing something non-trivial or concurrent.
02:44emezeskeI happent to quite like functional stuff
02:44callentjgillies: it's not a big deal if the problem is relatively simple, but then anything would suffice.
02:44emezeskeBut that doesn't mean that everything else is insane.
02:44dbushenkocallen: clj-peg looks much like yacc or antlr. are there any libraries like parser combinators (except fnparse, its old)
02:45callenemezeske: prolific mutation is insane, mutation in and of itself isn't insane.
02:45rplevydumb question: when a literal string is processed by the reader, but before it is evaluated there doesn't appear to be any way to see it has metadata, but it does, as you can see after it is evaluated. is there any way to get at the metadata prior to evaluation? Example part 1: (read-string "(def ^:private foo)") => (def foo) , Example part 2: (meta (eval (read-string "(def ^:private foo)"))) => {... , :private true
02:45rplevy, ...}
02:45callendbushenko: it's a new lang, I'd say implement your own if your needs are that specific.
02:45clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: ... in this context, compiling:(NO_SOURCE_PATH:0)>
02:45tjgilliesi like to program everything that starts out relatively simple as if i were programming it relatively complicated, because in practice thats how it usually works out
02:45tjgilliesso i would rather not program something with the mentality that is "ok" to do it that way as long it stays simple
02:45bsteuberemezeske: ok maybe it was a bit exaggerated, but you get the point
02:46emezeskecallen: I think "insane" is the wrong word. I mean, we're writing programs that get executed by machines, which are by their nature massively stateful
02:46qbg,(meta (read-string "^:foo hello"))
02:46clojurebot{:foo true}
02:46tjgilliesemezeske: and insane ;)
02:46emezeskeInsanely cool, maybe
02:47bsteuberdbushenko: a friend of mine and me also wrote a parser lib that is quite usable
02:47arohnerdbushenko: there's also parsatron, though I haven't used it
02:47bsteuberhttps://github.com/contentjon/tools/blob/master/gen/src/main/clojure/com/contentjon/gen/core.clj
02:47arohnerI used fnparse a long time ago, which was pretty cool, but very easy to make something dog slow
02:47bsteuberthe tests document how it works
02:47qbg,(-> "(def ^:foo hello)" read-string second meta)
02:47clojurebot{:foo true}
02:47qbgrplevy: Works for me...
02:48bsteuberwe did pretty much fnparse with a few extras
02:48rplevyoh I was apply meta on the def expression, duh
02:48rplevyok it really was a dumb question
02:48rplevyI only half-believed it was actually
02:53tjgillieson https://www.4clojure.com/problem/95 what is meant by "predicate" ?
02:54qbgFunction that returns a boolean
02:55qbgFor example, odd?, even?, etc.
02:55tjgilliesqbg: thnx
02:55qbg(predicates in Clojure tend to end in ?)
02:55callena handy but small thing to steal from Ruby.
02:55tjgilliesi know them from ruby didn't know they were called predicates
02:56qbgor Scheme
02:56qbgI like it better than the Common Lisp approach of having it end in p or -p
02:56callenthat's where Hickey got them from
02:56callenbut most people know Ruby better.
02:56callenqbg: there were many things in CLisp that were kind of ugly.
02:57qbgThough sometimes the p convention makes for good jokes
02:58tjgilliesis that where condp comes from?
02:59qbgDon't think so. condp is a version of cond that takes predicates
03:01IceD^ritz throws stacktrace on me on start
03:01IceD^I'm very, very sad panda here
03:30tjgilliesso from what im hearing this seems to be the way to decouple state and object identity in clojure: https://refheap.com/paste/840
03:31callentjgillies: don't over-rely on refs when they're not necessary man
03:31callentjgillies: just contain them in a map.
03:31callentjgillies: stop trying to shove a square peg in a round hole
03:32tjgilliescallen: what do you mean contain them in a map?
03:33tjgilliesto stop shoving a square peg in a round hole, one must first identify what is round and what is square
03:34callentjgillies: https://refheap.com/paste/841
03:34callentjgillies: no mutation, just returns a new map with the appropriate changes.
03:34callentjgillies: just do 4clojure man. You'll get the idea.
03:38tjgilliesok thanks
03:39callenI'm not convinced he was convinced.
03:56emezeskeWooooooo, finally, released lein-cljsbuild 0.1.0
03:56emezeskeThat took way too forever
04:58espringeHow do I check if a value implements a particular (user-defined-protocol) ?
04:59espringeI want something like "extends?" but that can accept a value rather than the record name itself
05:19morphlingespringe: ##(doc satisfies?)
05:19lazybot⇒ "([protocol x]); Returns true if x satisfies the protocol"
05:19espringemorphling: thanks
05:49_ulisesmorning all
06:18tdrgabi1I'm failing to insert in a table, using clojureql, if the table has a column with auto_increment
06:18tdrgabi1I tried with :id nil or with missing :id at all, but I get evaluation aborted
06:18tdrgabi1if I remove the column from the table, conj! works
06:19tdrgabi1anyone worked with clojureql before?
10:54photexif there happens to be anyone out there that's familiar with data.zip.xml: data.zip.xml/text apparently gives me the text from *all* the nodes below the current node instead of just "" or whatever might be at the current level
10:54photexis there some way for me to avoid this?
10:54photexI'm processing xml that is essentially schema-free and can take several forms
10:55photexin a couple of places
10:55photex I'm make a gist with the variations that are possible
10:59photexhttps://gist.github.com/1909221
11:00photexmy original attempt to parse the xml documents was this large, callback-ish soup and I'd more or less handle any of these
11:00photexthe exception being when the default attribute on an option element is used to indicate a value
11:00photexanyway, once I learned about zippers I have started to re-implement my ingestion process
11:01photexand it's largely a big win
11:01photexbut I'm not understanding some aspects of them
11:01photexif anyone has advice about this I'd be very grateful
11:03photexIdeally, when I use data.zip.xml/text on a node I'd like it to return "" or nil if nothing is there, rather than give me all the text that sits below
11:44h0x5f3759dfHi, Is this talk moved away? http://blip.tv/clojure/clojure-sequences-740581
11:44h0x5f3759dfWhen i try to watch it, It ends in < a minute
11:50ivanh0x5f3759df: try youtube-dl on it, I seem to be getting a lot more than a minute
11:53technomancywhoa; youtube-dl works on other sites?
11:55ivanyeah, it works on a lot of sites
11:55ivaneven infoq sometimes
12:00technomancyslick
12:03ivanI use a bookmarklet to hit a server that youtube-dls the URL I passed in
12:03ivannow my disks are full
12:10jjcomerI'm trying to get auto-complete working in clojure-mode. I have enabled it as a global major mode, installed ac-slime, and followed the setup instructions. AC works in slime, but not in clojure-mode. I'm using the emacs-prelude settings pack. Any thoughts?
12:14kirasjjcomer: i think in slime you can just press tab to trigger auto-completion, but in clojure-mode it defaults to C-c tab. have you tried that?
12:17jjcomerkiras: I'm looking to get the autocomplete where the menu pops up with the doc strings and such.
12:19kirasjjcomer: oh... so not just the list of currently matching functions? how do you get what you're talking about to show up in slime mode?
12:20jjcomerkiras: here is a screencast detailing the setup and usage http://goo.gl/npGQD
12:22kirasjjcomer: i see. i haven't used that. sorry to waste your time. :/
12:24jjcomerkiras: no worries :)
12:25h0x5f3759dfivan: thanks, it worked
12:31kijHey, what is the most simple way to run a noir app on my server?. I thought that a "lein uberjar", would give me a working jar. No ?
12:33photexkij totally been wondering that myself, I've just been using 'lein run' on a clone of the repo
12:35kijphotex: goodie - we will be told how to get that manifest file shortly :)
12:36tomojdid you use `lein noir new`?
12:37kijtomoj: i did
12:37tomojhmm.. should work then
12:38photexI'm trying it now... haven't actually given it a shot ;)
12:39kij lein new testjar; cd testjar; lein uberjar; java -jar testjar-1.0.0-SNAPSHOT-standalone.jar, Gives me :Failed to load Main-Class manifest attribute
12:39kijDAMN\
12:39kij;/
12:40tomojright.. `lein noir new` sets up :main in project.clj and creates a server.clj to set it to
12:40tomojof course, it doesn't work :(
12:40tomojneed to add (:gen-class) to the ns form in server.clj
12:42photexah, that was the issue
12:42tomojthose are the three general steps I guess 1) add ":main my.main.namespace" to project.clj, 2) (defn -main [& args] ...) in src/my/main/namespace.clj, 3) put (:gen-class) in the my.main.namespace ns form
12:44photexstarting with lein noir new, I just had to had :gen-class in server.clj
12:47kijThat gives me an java.util.zip.ZipException: ZIP file must have at least one entry
12:56tomojkij: hmm
12:56tomoj`jar tf youruberjar.jar` is empty?
12:57tomojyou get that error when trying to create the uberjar, or when running it?
12:59kijtomoj: Not anymore, should be (:gen-class) Thanks!
13:29rplevythe compiler knows what file it is compiling, so is there a java call that can be made in a macro to introspect what file is being compiled?
13:30rplevyin a function call you can use (.getStackTrace (Thread/currentThread))
13:30qbg*file*
13:30rplevybut in a macro no useful info on what is being compiled can be found
13:31rplevy*file* ? I'll try that...
13:34rplevyqbg: awesome
13:34qbgI also know how you can get the line number if you really want to
13:48emezeskeDoes anyone in here have the privileges to un-moderate me on the Clojure google group?
13:48emezeskeI'm stuck in a time bubble :(
13:50qbgI think it usually only takes a few accepted posts
13:52emezeskeI've had a few, maybe not quite enough.
13:52emezeskeSeems to be a manual process, I'm guessing.
15:14stuartsierraemezeske: moderation is manual, after a period of time (determined by G.Groups) you will become unmoderated by default
15:15Raynesstuartsierra: I has question.
15:15stuartsierrauh oh
15:16emezeskestuartsierra: Thanks.
15:16stuartsierraRaynes: hit me
15:17Raynesstuartsierra: When I sent my CA in a couple of years ago, I signed my name as Anthony Simpson. That was before I had the plane ticket mishap that scared me into using my legal last name canonically. Over time, I've managed to get my name changed to Grimes across the entire internets, but it is still AnthonySimpson on JIRA and my name was signed as Simpson on that CA. Should I send in another CA and what should I do about getting that Jira account
15:17Raynes changed?
15:18stuartsierraYou should probably send in another CA. Email clojure-dev about changing your JIRA account.
15:19RaynesSounds like a plan.
15:19stuartsierracool
15:32TimMcRaynes: They wouldn't let you through security?
15:58RaynesTimMc: No, I realized my screw up a few days before the flgiht.
15:58Raynesflight*
15:58RaynesTimMc: It was a miracle they let us change the name on the ticket
15:58Raynescemerick is my hero
16:11Null-A,,3
16:11clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class clojure.lang.RT>
16:14TimMc~suddenly
16:14clojurebotCLABANGO!
16:15qbg,(/ )
16:15clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class clojure.lang.RT>
16:15qbg,(/ 0)
16:15clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class clojure.lang.RT>
16:15qbghttp://nooooooooooooooo.com/
16:16Null-Aheh
16:16qbgPoor clojurebot, we hardly knew ye
16:16TimMc&(+ 1 2)
16:16lazybot⇒ 3
16:16TimMcphew
16:25muhoo,alive?
16:25clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: alive? in this context, compiling:(NO_SOURCE_PATH:0)>
16:25muhoo~alive?
16:26clojurebotCool story bro.
16:26muhooheh
16:28Raynesamalloy_: You need to spend time with me on the weekends. I get lonely.
16:29muhooheh _VALID_URL = r'^((?:https?://)?(?:youtu\.be/|(?:\w+\.)?youtube(?:-nocookie)?\.com/)(?!view_play_list|my_playlists|artist|playlist)(?:(?:(?:v|embed|e)/)|(?:(?:watch(?:_popup)?(?:\.php)?)?(?:\?|#!?)(?:.+&)?v=))?)?([0-9A-Za-z_-]+)(?(1).+)?$'
16:29Raynes...
16:29muhoonow you have two problems
16:29RaynesNo, you have about 37.
16:32muhoowow. it works on dailymotion, google, photobudket, vimeo,depositfiles, facebook, blip(!?), comedycentral(!) .. heh. and xvideos
16:32muhooi had no idea
16:34Raynesmuhoo: (def titlere #"(?i)<title>([^<]+)</title>")
16:34RaynesMy favorite regex.
16:34RaynesIt has never ate my kitten.
16:36gfredericksIs there a way to restart the swank-server after running `lein deps`? Or must I restart all of emacs?
16:37Raynesgfredericks: The swank server isn't in Emacs. Just delete the slime repl buffer which will kill the connection and then you can run M-x clojure-jack-in again.
16:38gfredericksman I swore that didn't work last time
16:38gfredericksbut I'm willing to try again
16:38gfredericksand if it does I swear not to swear as much in the future
16:42gfredericksRaynes: right you are sir. Thanks.
16:42muhooRaynes: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
16:43Raynesmuhoo: ?
16:44muhoocheck the top-voted answer
16:44muhoobut yes, ([^<]+) works in a pinch
17:11murmIs there a better way than selenium to take an existing webfrontend and putting a slicker one on top?
17:20TimMcI thought selenium was a website test framework.
17:20TimMcIs it used that way too?
17:21bbloomIt's more of a browser automation API
17:21bblooma library to be used by a test framework
17:21bbloomIn practice, it's a giant time black hole ;-)
17:23murmYea, I've been using it to automate some repetitive activities in webinterfaces that I can't change (don't have access to)
17:24bbloomI personally (and quite a few smart people I know) have wasted an incredible amount of time trying to get it to work just right and have a sensible API for writing integration tests…. what works in practice much better is something like QUnit
17:24murmBut if I wanted to scale that up I'd have to deal with the issue of needing a running webdriver for every user of the new front end
17:25bbloombasically: stick your app in an iframe, automate it from the outside using a little javascript, and run your tests using the browser's refresh button
17:26bbloomthen you can use selenium to load the page, manage the refresh button, and parse out the test results…. ie the minimum required to automate test execution… but not the tests themselves
17:27murmSo basically dome dom manipulation from an iframe?
17:27murmcouldn't clojurescript do that?
17:27bbloomsure, why not?
17:27murmcould that be implemented as a browser plugin or extension? Because technically a middle server wouldn't be necessary, right?
17:28bbloommaybe? what we did for our app was to simply make a /test route which loads the test framework and then loads the root route in an iframe… we just run our tests by navigating to http://localhost/test
17:29TimMchaha
17:29TimMcSounds like it's time for a better web automation lib.
17:29bbloomthere's a great one already: it's called jQuery :-P
17:30bbloomthe problem with selenium is that it's extremely low level
17:30bbloombut also oddly perscriptive
17:30espringeI want to make a function which accepts a key-value array. E.g. [:a foo, :b blah, c: dog]. Being a dynamically typed language, I assume the best way to do this is to accept an array where every 2nd element is a key? If so, what's the best way to "destructure" this, and iterate two-elements at a time, so i can use it easily
17:30bbloomit's designed to be run via java RMI, so it has totally non-useful operations for non-java clients
17:31bbloomit has things like assertTextContent, but then you get a remote server error… so you need to do hasTextContent and implement the assert client side in ruby/javascript/python/whatever-non-java you're using
17:31espringe(Also, I can't use a map -- because I don't need random access, and order is important)
17:31amalloyespringe: you sure you don't just want to accept an array of pairs?
17:32murmwhat does it do if a new window is opened?
17:32espringeamalloy: That sound reasonable, would that be the standard way of doing it in clojure?
17:32amalloy*shrug*
17:32murmthis isn't for a front end that I have development access to
17:32amalloyyour scenario is too vague to have a standard. ##(hash-map 1 2 3 4) takes them flattened, and ##(into {} [[1 2] [3 4]]) takes them paired
17:32lazybot(hash-map 1 2 3 4) ⇒ {1 2, 3 4}
17:32lazybot(into {} [[1 2] [3 4]]) ⇒ {1 2, 3 4}
17:32murmI'm taking a public facing front end automating some business processes
17:34espringeamalloy: I noticed functions like "let" seem to just take an array, where every 2nd element is a value
17:34espringeSo wouldn't it be best to go that style?
17:35amalloylet is a macro, so the forms are typed in by a human and asking for manual pairing is a bit mean
17:35bbloommurm: take my advice here with a grain of salt… my team is relatively new to integration testing browsers… we've got a custom test framework… it's all coffeescript
17:37espringeamalloy: fair enough, i'll do it as you suggest. So for an end-user it'll look like:
17:37espringe[[:a foo] [:b foo] [:c foo]] right?
17:37amalloylooks that way
17:42murmbbloom: can you click on elements within an iframe using qunit?
17:42bbloomdepends on what you mean by "click"
17:42bbloomif you mean "trigger the onclick event handler" then yes
17:42murmlike getElement "username" (click)
17:43bbloomif you mean "simulate the act of a user clicking the button with the mouse at a particular point on the screen"
17:43bbloomthen "it depends"
17:43murmand then put data in that text field, log in, etc
17:43bbloomthe containing frame own's the iframe's DOM as long as they are on the same domain
17:44jamiiIf anyone has any comments on this idea I would love to here them - http://www.reddit.com/r/Clojure/comments/q5xf7/crowdfunding_an_opensource_clojure_library_for/
17:44bbloomso you can just myIframe.getElementById('foo').click()
17:44murmwell, if on a seperate server...
17:44bbloommurm: then probably not, due to same origin access policy
17:44murmand you could run that on rhino headlessly, right?
17:45bbloomdunno
17:46murmFrom the user's perspective, I'd want to make the iframe invisible, and provide them a much more simplified interface.
17:46bbloomcan you do the work server side?
17:46murmyea
17:47bbloomthe same domain origin access policy is a feature of browsers to protect users & doesn't apply if you're not using an iframe really
17:47murmwould probably be better too.. from a business model question
17:47bbloomso you could just load a page in any old javascript execution environment, like rhino, and poke and prod it from the outside however you want
17:47bbloomthat assumes rhino has a headless dom emulation library, which i'd be surprised if it didnt
17:48murmhow would that be different than selenium?
17:48bbloomselenium is an API for remotely controlling real browsers
17:48bbloomyou don't actually need a browser to communicate with web servers ;-)
17:48murmtrue, but it has htmlunit, that runs headlessly on rhino
17:49muhoomurm: in general, javascript breaks the way i used to do stuff like this: by screen scraping
17:49murmI know, but I need to crawl and navigate the page, sometimes executing javascript to do so, fill forms, etc... so what's the best tool for that?
17:49muhoobut if the app is javascript-based, scraping it with something like htmlunit is not going to work too well
17:49murmmuhoo: what do you mean?
17:49bbloomhttp://www.envjs.com/
17:50bbloomhttp://zombie.labnotes.org/
17:50bbloomthose are both js-based. i'm sure there are comparable components in the JVM world
17:51muhooactually, i was told there is no such thing in java world
17:51muhoothere's rhino, but that's not quite the same
17:51muhoobut i haven't done really exhaustive research either
17:51bbloomwell, you could probably run envjs in rhino
17:51bbloomi mean, you *already need* a javascript execution env to use something like envjs
17:52bbloomhowever, it's probably better supported on nodejs
17:53murmenvjs' docs refer to running it on rhino
17:53bbloomperfect :-)
17:53bbloomgo with that :-P
17:54murmthis is all very testing focused though. Looking for docs on things like "how to enter credentials into texts fields and click login."
17:54bbloomyeah, testing tends to be the motivator for these things
17:54muhooum, isn't entering data into form fields a crucial part fo testing?
17:55bbloomb/c scraping is doable with libcurl or whatever http lib you have
17:55bbloomusually
17:55bbloomunless you need to execute javascript
17:55bbloomwhich is basically google and bing :-P
17:56bbloomand, apparently, you — and surely a growing number of people as more sites b/c javascript dependent
17:57muhoomy god, is there one web framework for every person on the planet now?
17:57muhoos/every/each/
17:57bbloommuhoo: ?
17:58muhooit seems like everywhere i turn, there's a new web framework
17:58bbloomheh.
18:00muhoowow, rhino is the default implementation of envjs! exciting, a clojure-scriptable headless browser?
18:00muhooi could turn every damn website i have to deal with into a command-line app :-)
18:00bbloomi don't see why not ;-)
18:01muhooheh "remember that all javascript executed will have read/write access to your file system"
18:01muhooclojail here we come
18:10bbloomso… i've been looking at this thread: https://groups.google.com/d/topic/clojure-dev/bjZsHQ6u7Fk/discussion
18:11bbloomdoes anyone have an experience with multiplexed repls? i'm interested in evaluating code simultaneously in various clojurescript environments at once… like if i want to quickly send a message to multiple browsers that are connected to the same server
18:11rogererensmurm: I'm pretty sure that I don't understand what you're looking for, but is Diazo http://docs.diazo.org/en/latest/index.html perhaps something you could use?
18:12bbloomholy xml nightmare flashbacks batman!
18:14murmrogererens: I'll check it out. Thanks.
18:20muhooso, i'm confused now. if i wanted to fire up envjs inside cljs, how would i do that?
18:20muhoocljs already runs inside of rhino, so that part's done. i'm not clear how to wedge envjs in there thoguh
18:23bbloomi'd assume it involves a rhino repl and a call to load-file :-P
18:23bbloomenvjs is just a javascript lib
18:23bbloomhttp://www.envjs.com/doc/guides#running-rhino
18:24muhoothe cljs part was what confused me though
18:24muhoobut then again, why not, there's js interop
18:24bblooma cljs repl is just like a rhino repl…. with different syntax :-P
18:36muhoowait, i'm conffused
18:37muhooi thought the clojurescript repl was connected to the browser
18:37muhoonot to rhino
18:37bbloomthere are two backends:
18:37ibdknoxit can be either
18:37bbloomhttps://github.com/clojure/clojurescript/tree/master/src/clj/cljs/repl
18:37muhoothx
18:38muhooi see, i'm using clojurescript one, which uses the browser epl
18:38muhooi gotta go bareback
19:46murmwhat's the throughput over nfc for phones?
19:56murm424 kbps
19:58murmwhich is 424 kbps, right?
19:58murmI mean 53 KBps, right?
20:02kijmurm: wrong chan ?
20:03murmand with SMS at 140 bytes, you should be able to transmit 378 sms messages a second over nfc.
20:04murmkij: it's just an idea for an application
20:09murmwho wants to build an android app?!
20:09murmwe could build it in clojure
20:21radsanyone know why lein-cljsbuild is giving me a JSC_DUPLICATE_NAMESPACE_ERROR when I try to compile?
20:25dnolenrads: it's not telling you which namespace?
20:25cemerickalexbaranosky: Shrink looks like a good direction.
20:25radsdnolen: it's one of my application code namespaces
20:26radsnot a library or anything like that
20:26radsseems to work fine until I have two files that try require/use the same namespace
20:26alexbaranoskycemerick, thanks, do you have any constructive criticism?
20:27radsactually it seems to just give me that error any time I require/use one of my application namespaces
20:27alexbaranoskycemerick, I think at some point I'll want to know how to shrink arg-lists full of values, not just one at a time
20:27amalloyalexbaranosky: the readme could use a link to a description of what shrinking is
20:27dnolenrads: helpful to know if you can recreate with just CLJS or if it's a lein-cljsbuild specific issue
20:28alexbaranoskyI haven't hooked it up to Midje yet, so that is usually when the use cases you forgot about show up
20:28alexbaranoskyamalloy, good idea
20:28radsdnolen: I had it working with cljs-watch. I'm trying to migrate over to lein-cljsbuild and only started getting errors now
20:29dnolenrads: ah k, might wanna check with emezeske then
20:30cemerickalexbaranosky: nope, just unvarnished encouragement. :-)
20:30alexbaranoskyamalloy, it is surprisingly hard to find an article about it.. I might have to write something short myself.
20:32radsdnolen: I was setting my source-dir to "src/my-app/client" rather than just "src", since I have src/my-app/client and src/my-app/server, where the client is browser JS and the server is Node.JS, so I need different compilers for that
20:32radsit seems that it breaks unless you set the source-dir to the root of the source files rather than a couple folders deep into the namespaces
20:36kwertiiWhat happens to stdout/stderr when you do M-x clojure-jack-in?
20:39cemerickkwertii: stdout/err falls into the console for the process
20:39kwertiicemerick: the Swank process or the Emacs process?
20:39cemerickkwertii: swank process IIRC
20:41kwertiicemerick: thanks
20:50emezeskerads: What version of lein-cljsbuild?
20:50radsemezeske: 0.1.0
20:51emezeskerads: Did you ever have an older version installed?
20:51radsemezeske: I did at one point, but I just restored from a backup recently which I believe did not have it
20:51radsso I don't think so
20:52radsand by backup I mean backup of my entire hard drive
20:53emezeskerads: Would it be possible to paste your project.clj somewhere?
20:54radssure
20:56radsemezeske: https://gist.github.com/5ed4cfc51b8b9e87ed15
20:56radsthe first revision is the broken version, the second revision is the one that works
20:57emezeskeah, cool
20:57emezeskeThat's pretty weird!
20:58emezeskeAnd so for the second one, you're just moving the whole src/clicktrip/client dir to src-client?
20:58radsyeah, so it's src-client/clicktrip/client now
20:58emezeskeoh, so the namespace is clicktrip.client?
20:58radsyeah
20:58emezeskeI see
20:59emezeskeThe :source-path just tells cljsbuild where the toplevel dir is
20:59emezeskeSo if you specify src/clicktrip/client, it's going to use that as the toplevel
20:59emezeskeSo the directory/namespace structures will be out of whack
21:00radsI guess I should just keep my node.js CLJS and browser CLJS into separate source directories
21:00radsrather than the same source directory, but separate namespaces
21:00emezeskeWhat are you using to compile the node.js part?
21:01radsI've been using cljs-watch for both, and now I'm trying to migrate to cljsbuild. I got stuck at this part before I tried adding the node.js compilation
21:01emezeskeGotcha.
21:01emezeskeYeah, I think separate directories might be the way to go
21:01emezeskeYou have to set a compiler option for node.js output, right?
21:01radsyeah
21:02emezeskeThat's cool, I hadn't thought about a fully clojurescript app
21:03radsI'm actually just using the node.js component for client-server STM/OT using racer: https://github.com/codeparty/racer
21:03radsthe main server is noir, though I'm considering just going all node if that turns out to be simpler
21:03radsso I've actually got browser cljs, node cljs, and clj in one project
21:04emezeskeVery cool!
21:05radsyeah, it's been quite the learning curve getting all this to work together. I plan to write about it after I get some experience with it
21:06emezeskeI'd read about it.
21:07radssetting up a cljs project is pretty finicky right now, but I'm looking forward to getting my own workflow down and using that knowledge to make it easier for others
21:08emezeskeYeah, there's definitely a big gap in the "best practices" area
21:08emezeskeNot a whole lot of examples to go off of
21:09emezeskeSomebody's gotta go out there and make mistakes for us all to learn from :)
21:11radsemezeske: yeah. I'm just picturing a year or two from now when we can have something like rails for a clojurescript project. not in terms of features, but something that gives you good conventions to follow right from the start
21:12radsclojure/cljs could make JS-heavy apps much eaiser
21:26kwertiirads: that'll be nice when the rough edges are smoothed out and stuff comes out of the box already configured and ready to go. That's still a big advantage for Ruby. I'm currently several hours into just setting up logging on a clojure project.
21:37muhoowhomever it was who pointed me to env.js, THANK YOU!
21:44scriptor*whoever
21:44scriptorhmm
21:44scriptoractually it is *whomever
21:44scriptorsince you used "it was"
21:45kwertiiIs there a way to make SLIME pretty-print hashes (with newlines and indentation) instead of dumping them linearly?
21:46scriptorkwertii: check out http://clojuredocs.org/clojure_core/clojure.pprint/pprint
21:46kwertiiscriptor: cool, thanks!
21:47kwertiiAny way to hook the SLIME REPL up to that so it does that automatically to everything it gets back at the top level?
21:48scriptorhmm, I'm not sure
21:48scriptorthe closest I know is pp, which pprints the last result
21:51emezeskemuhoo: Have you used PhantomJS? I'm curious how env.js compares
21:51amalloyi doubt if you really want everything pprinted. it's not always gorgeous
21:51muhooemezeske: env.js works inside rhino, so i can run it from clojurescript
21:52muhooi haven't tried phantom
21:52kwertiiamalloy: dunno, it seems nicer than just dumping gigantic hashes out linearly, which is what it does now. that's kind of useless.
21:53muhooemezeske: actually phantom was a PITA to try to build, so i tried and gave up
21:55emezeskemuhoo: Ah, cool. Yeah, running in rhino seems like a nice thing
21:55emezeskemuhoo: What platform are you on that you have to build phantomjs yourself?
21:55muhoolinux, debian squeeze
21:56emezeskemuhoo: That sucks, I can't believe they don't offer a .deb
21:57emezeskemuhoo: Debian stable is always like a decade behind, though
21:57muhootheir pre-built binaries required versions of libc that are later than what i have
21:57muhoowhatev, i'm happy with env.js
21:57emezeskeYeah it sounds cool
21:58muhoonow i'm going to try to run it from cljs. wish me luck
21:58muhooit'll be good to translate ugly crap like $.map($("#mainmenu li > a"),function(j,i){return(j.innerHTML)}); into nice cljs sexps
21:58muhoosorry sequences :-)
21:59emezeskegood luck!
22:00muhoothx
22:03muhookwertii: i saw in some project.clj files, stuff like :pretty-print true
22:03muhooi have no idea what it does though
22:04kwertiimuhoo: interesting, thanks, I'll check it out
22:09amalloyclojure.repl/repl has pluggable options for each phase, including the print phase. lein exposes those options somehow, but i don't know how. if you look into the arguments to repl, and the options in project.clj, you should find what you want
22:11kwertiiamalloy: great, thanks!
22:27technomancykwertii: there's also C-c S-i *1
22:28kwertiitechnomancy: nice, thanks
22:28amalloyreally? for maps? i wouldn't have expected that to be pretty
22:29muhooemezeske: and that brings me to lein-cljsbuild, which i'm going to try now :-)
22:30kwertiiit only understands the top level of the hash. subhash values are still linear strings
22:31kwertiimap, sorry. I've been working in Ruby lately.
22:31amalloyhash is fine too
22:31kwertii(at least they're not called dictionaries...)
22:32amalloyand it seems to not be very general either. it does a pretty poor job of inspecting (reify clojure.lang.IPersistentMap (count [this] 2) (seq [this] (seq {:a 1 :b 2}))) - thinks the contents are empty and the meta has elements
22:32kwertiiI'm fine with just piping the output of everything into (pp)
22:32technomancythe inspector is actually like the one part of the swank internals I actually have played with
22:33technomancyit's not too gnarly; you should try to fix it =)
22:33amalloywhere is it?
22:34technomancysrc/swank/commands/inspector.clj
22:34amalloyof, uh...what project? i don't know anything about what parts of swank are where
22:34technomancyI added support for showing implemented interfaces
22:34technomancyall the clojure is in swank-clojure
22:39amalloyit does indeed look pretty straightforward. can't see a reason why it doesn't work :P
22:40amalloyoh, nm. statements are just in the wrong order. ez fix
22:45amalloytechnomancy, kwertii: any opinion on whether slime inspector should print metadata before or after contents? it was written to do...neither of those things, so i get to make the choice
22:45technomancyI'd do before since ^ is more common than with-meta
22:45amalloycool. that's what i thought too (though for different reasons)
22:46kwertiiI can see it both ways. before, because, well, it's META data that is conceptually higher up the hierarchy than the data. after because people will normally be interested in the data rather than the metadata, so that should be more easily accessible.
22:46amalloypersonally i want it before, because the meta will usuqally be small, and the contents might be large
22:46kwertiiamalloy: good point
22:52muhooheh https://refheap.com/paste/857
22:57amalloytechnomancy: how do i test my changes?
22:57muhoothis too https://refheap.com/paste/858
22:58muhooworks from inside raw rhino though. just don't know how to do it from inside cljs though
22:58technomancyamalloy: it's a bit more awkward now that lein-swank is spun out; need to "lein install" inside swank-clojure then get lein-swank to assoc in the updated version
22:59technomancyamalloy: I guess that means I need to make lein-swank skip associng in a swank-clojure version if one is already present
23:02technomancyamalloy: actually screw it, just do "lein swank" inside swank-clojure itself
23:07muhooemezeske: i give up. if you feel like a quick writeup of how to use lein-cljsbuild to get a working cljs repl using an env.js emulated headless browser, that'd be great, but i can tell it's way over my head to figure it out on my own.
23:08amalloytechnomancy: pull request flying your way
23:10technomancywoooo
23:18muhootechnomancy: is there a sane way to pool all my jars so that for every project lein deps doesn't pull down a separate jar of, say, clojure-1.3.0.jar, commons-codec-1.4.jar, compojure-1.0.1.jar, hiccup-0.3.8.jar etc
23:18technomancymuhoo: yes: use leiningen 2!
23:18muhooi must have like 10 copies of those jars littering my drive
23:18technomancyit just keeps everything in ~/.m2/repository
23:18muhoois lein2 out yet?
23:18muhoowell, there are some things in my ~/.m2/repository
23:19muhooand sometimes stuff gets loaded there, sometimes not
23:19technomancycourse it's out; it's on github. =D
23:19muhooif i use pomegranite, it puts stuff in ~/.m2/repository . but lein deps doesn't
23:19technomancyit's not technically released yet, but you know...
23:19technomancywhy be picky?
23:19amalloywait, doesn't lein1 do that too? it's not actually re-downloading all the jars for every new project; it's just copying the ones from ~/.m2
23:19technomancyamalloy is correct
23:20technomancyit copies them from ~/.m2 into lib
23:20muhoooh
23:20amalloyi guess it's not clear whether he was complaining about the download or the disk space
23:20amalloybut since people who complain about disk space are CRAZY i assume the former
23:20muhoowell, that's still disk space littering
23:20technomancyamalloy: I took a patch to do symlinking from someone who complained about disk space
23:21amalloysure it is. and it's good that lein2 stops doing it. but you have like a trillion bytes available
23:21technomancyit was only done for hysterical raisins
23:21technomancyahem
23:21technomancyhistorical reasons
23:21muhooi have a netbook with a flash drive, so disk space matters. and my main internet connection is via tmobile 3g, so bandwidth matters too
23:21technomancywell there's not really any help for bandwidth
23:21technomancyunless you rsync ~/.m2 from another local machine
23:21muhooif it's just copying, then bandwidth is not a problem
23:23technomancyit'll still go checking for snapshots, so don't use them unless absolutely necessary
23:23muhoothat's ok, if there's newer stuff, grab it.
23:24technomancywell it also slows everything down
23:24muhoobut as long as it's not downloading a new copy of clojure-1.3.0.jar from clojars every time i type lein deps, i'm fine
23:24technomancyyeah, it never did that
23:24technomancybut you should still use lein2
23:25muhoowell of course. i'm on lein 1.6 atm. i'm also on debian stable :-)
23:25technomancyI'm on squeeze too
23:25alexbaranoskyanyone know of a good list of all the different characters as they are used in cl-format?
23:26technomancynix is really the only thing that makes squeeze bearable though
23:26muhoonix?
23:26clojurebotnix is a purely functional package manager exhibiting many similar characteristics to Clojure's persistent data structures or git commit trees: http://nixos.org/nix/
23:26muhooreallly, cool
23:26amalloy,(map char (range 65532)) ;; alexbaranosky
23:27clojurebot(\
23:27amalloyomg that 2 should be a 5. nobody tell me i'm an idiot plz
23:27muhooi dunno, i've been using apt-get for, like, 9 years now, and i'm happy with it.
23:27alexbaranoskyamalloy, nice
23:28technomancymuhoo: apt-get is fantastic for system-level stuff
23:28technomancybut sometimes you just *have* to have multiple versions installed side-by-side, and apt-get is awful for that
23:28juhu_chapais it posible to declare global var with def where its value references a function not yet defined, (def name get-name)
23:28technomancyplus flawless rollbacks with nix are just fantastic
23:28muhoohehe true. i remember the nightmares of trying to have jackd and jackdmp installed at the same time
23:28muhoo(now known as jack2)
23:29technomancyjuhu_chapa: you can use resolve to delay lookup to runtime.
23:29technomancymuhoo: the papers on nix are really accessible
23:29technomancythere are some really great ideas in there; I highly recommend it
23:29muhoonice, nix looks like github for binaries
23:29muhoosorry git for binaries
23:29technomancythe similarity is quite strong
23:30technomancyit's also great in that it can coexist fine with other package managers
23:30technomancyso you can keep all your system stuff stable with squeeze but still get cutting-edge versions of stuff when you need it in a totally isolated package tree
23:31muhoowas nix written by a clojure person?
23:32technomancyno, but it does have Leiningen packaged
23:32juhu_chapatechnomancy: how does resolve works?
23:32technomancyI should update the package though; it's still 1.6.2
23:32technomancyjuhu_chapa: (resolve 'clojure.set/difference) looks up the clojure.set/difference var at runtime, so even if it wasn't loaded when your code was compiled, it should still work
23:34muhoowhat? no /lib??! http://nixos.org/nixos/screenshots/nixos-terminals.png
23:35muhoohow, what the, how can..... what does ldd /usr/bin/something actually do?
23:35technomancyhehe
23:35photextells you which libraries are linked at runtime
23:35juhu_chapatechnomancy: why "declare" does not work in this case?
23:35technomancyyou'll have to read the paper; it's awesome
23:35muhoois everything statically linked then?
23:36technomancymuhoo: no, but you can actually tell just by using grep every dependency of a package
23:36technomancybecause of the way it stores everything by cryptographic hashes
23:36muhooso, for example, how does grep link with, say, libc.so.x ?
23:36muhooif there is no libc.so.x ?
23:37technomancyit's in /nix/store/kqn6mcxay9a3i43q971xaqy9br53wzaf-glibc-2.12.2.drv
23:37muhoo yeah, i gotta look at this paper.
23:37technomancyit's impossible for a package to have dependencies that are undeclared in the package definition
23:37muhoook, so ldd will give you a long spew of paths llike /nix/store/kqn6mcxay9a3i43q971xaq then, ok
23:38technomancystart with "Nix: A Safe and Policy-Free System for Software Deployment" on http://nixos.org/docs/papers.html
23:38muhooit's not like there is no /usr/lib, it's more like they link the packages to paths like that
23:38technomancyif you install nix on debian then there's still /usr/lib, but all the nix packages are isolated from it
23:39technomancyif you install nixos (an entire nix-based OS) then there's no /usr/lib
23:39muhooi'm getting old. when people move the furniture around on me, it makes me angry :-)
23:39technomancyheh
23:39muhooi'm going to have to fire up a vm and try this out
23:39technomancyyou don't need a VM
23:39technomancysince everything is isolated
23:39technomancyif things go wrong you can blow away /nix and start over
23:39m0smithNoir question
23:39muhoook, a chroot then
23:40muhooatually, i don't even need a chroot
23:40technomancyyeah, that's the beauty of it
23:40muhooif these things don't link to /usr/lib, i get it.
23:40technomancyI mean, you can try nixos, but that's more hardcore and experimental
23:40muhoounless of course it has kernel dependencies, but in general, yeah.
23:40photexdoes anyone here actually use nixos on daily basis
23:41photexI've been tempted to move to Arch
23:41photexbut recently discovered nixos
23:41photexdiscovered == stumbled upon clicking links
23:41technomancya couple people I talked to had trouble getting nixos working
23:41photexthis was my worry
23:41technomancyI'd recommend starting by just adding nix to whatever you're currently using
23:41photexespecially on a laptop
23:41muhooi know a few people who really love arch
23:42photexI setup an arch box on a vm and enjoyed it
23:42photexI've been running Suse for a while
23:43photexanyway, don't mean to hi-jack the discussion
23:43muhooit's already a free-for-all :-)
23:43technomancynix and debian stable is the best of both worlds as far as I'm concerned
23:43muhoothough it has somewhat diverged from clojure.
23:43muhooyeah, i have to try it
23:44technomancysystem-level stuff hums along flawlessly; fresh stuff flows in with no risk of destabilization
23:44muhooi have an old box that runs lenny, and it'd be nice to have some modern stuff on it, i was using a chroot with squeeze, but i suppose nix might be better
23:44photextechnomancy is that what you're running?
23:44technomancyphotex: yeah
23:44photexlaptop or desktop?
23:44technomancylaptop
23:45muhoohence why destabilizationis a concern :-)
23:45muhooonce you get a laptop working right with linux, you kinda don't ever want to change anything
23:45photexmuhoo exactly why I've been running my install for so long
23:45photexi3wm, custom .xinitc instead of a desktop env
23:45technomancywell, it seems like debian's fine as long as you stick with stable
23:45photexsoooo much built up over time
23:46muhooi'm fucked because ion3 is gone now
23:46photex /home is it's own partition, but ya never know what lies ahead
23:46photexmuhoo tried i3wm yet?
23:46muhooand the successor, notion, won't read my customizations.
23:46muhoohavne't, mmaybe i should.
23:46photexcloser to ion than xmonad imo
23:50muhoolooks cool, will have to try it.
23:50muhoomaaybe with nix