text:
1:07 technomancy: cooldude127: ping
1:17 cooldude127: more ideas on date handling: http://
1:17 please comment (and anyone else who's interested); will try to get feedback on the mailing list tomorrow.
1:19 Chouser: keyword arg to later and earlier accept both singular and plural?
1:22 but the api looks nice. I'd use it.
3:19 Bracki: Can smaddy point me to a place where all the special character expresiions like #,@,` etc are explained?
3:21 ,#
3:21 clojurebot: Eval-in-box threw an exception:EOF while reading character
3:21 Bracki: ,(doc #)
3:21 clojurebot: Eval-in-box threw an exception:No dispatch macro for: )
3:24 xitam: Bracki: http://
3:27 Bracki: Aight, thx.
3:29 alinpopa: hey
3:29 'morning
3:29 is there a way to display current clojure's version ?
3:29 java -cp $CLOJURE_JAR:$CLOJURE_CONTRIB_JAR clojure.main
3:29 this is how I'm using it ...
4:21 alinp: ,(+ 1 2)
4:21 clojurebot: 3
4:23 eevar2: (+ 1 2)
4:23 clojurebot: 3
4:35 alinp: ,(doc recur)
4:35 clojurebot: java.lang.Exception: Unable to resolve var: recur in this context
4:35 alinp: ,(+ 1 2)
4:35 clojurebot: 3
9:22 cooldude127: damnit technomancy, why aren't you on here when i am?
9:24 Chouser: wouldn't it be great if there were some electronic communications mechanism that would hold your messages until the other person was available to read them?
9:24 cooldude127: Chouser: he emailed me already, i just desire a more active discussion
9:27 Chouser: heh, ok.
9:29 cooldude127: i'm curious about what other sort of representation he has in mind for dates internally
9:29 cuz the way i understand it, if you want to stick with pure clojure, you're using either lists, vectors, or maps (or struct-maps) to represent all your data
9:30 you can use objects if you dip into java
9:30 like do a gen-class
9:30 rsynnott: well, clojure has structs
9:30 which are effectively objects
9:30 Chouser: he could just use a Date object
9:31 cooldude127: Chouser: well, i wanted something more clojure-like. date objects are gross
9:32 i'm using maps at the moment, which allows keyword access to year, month, hour, etc.
9:32 (:year (today)) => 2009
9:32 Chouser: yep
9:32 I wasn't recommending anything, just speculating wildly.
9:33 cooldude127: yeah
9:33 but he seems to have ideas beyond maps, so i'm kinda wondering what he has in mind
9:34 i don't see any reason why maps should not be sufficient, aside from the fact that we can't customize how they print, which i'm hoping will be fixed at some point soon thanks to you, Chouser
9:34 Chouser: well, I'm not sure how likely that is to make it in
9:35 using a custom print method to make something that used to print as code to instead print as something that's not ... may not be a popular feature.
9:35 cooldude127: Chouser: why not? i'm just curious cuz that seems like a really useful patch. not all data looks like vectors and maps
9:37 Chouser: most object-oriented languages have a way to make objects print different ways, haskell has the Show type class, we need something :)
9:37 rsynnott: cooldude127: date objects handle a lot of nasty stuff for you
9:37 they're horrible because working with dates is horrible
9:37 Chouser: I'm still speculating here, but it seems to me to be sorta central to lisp that the things you print can be read again.
9:38 rsynnott: Chouser: well, depends
9:38 cooldude127: rsynnott: yes they do, i haven't been writing this totally from scratch, i
9:38 rsynnott: most things in common lisp aren't, for instance
9:38 cooldude127: 've been using the java Calendar api
9:38 Chouser: maybe if they print like #=(make-date 2009 02 16) or something. hm...
9:38 gnuvince: Morning guys
9:38 rsynnott: (arrays, symbols and lists are printed as readable, but pretty much nothing else)
9:39 Chouser: rsynnott: oh, really? well, then, maybe that patch has a decent chance after all.
9:40 cooldude127: Chouser: that would be rather acceptable actually. anything that's less verbose than a damn hash which happens to have a timezone object attached to it
9:40 s/hash/map/
9:40 i come from ruby world
9:40 rsynnott: actually, what cooldude127 is talking about looks very much like what the popular CL local-time library produces
9:41 (local-time:now) -> "@2009-02-16T11:52:16.692307-05:00"
9:41 but given that most things in Clojure ARE readable, it might not be appropriate
9:41 cooldude127: but is stuff like #=(date 2009 1 1) readable?
9:42 will that get read in as calling that function?
9:42 Chouser: yes
9:42 cooldude127: well there we go!
9:42 durka42: that sounds dangerous
9:42 Chouser: ,#=(sorted-map :a 1, :b 2)
9:43 clojurebot: {:a 1, :b 2}
9:43 durka42: from a user-editable data file standpoint
9:43 Chouser: durka42: it's a strange mode -- the function is called, but the args are not evaluated, just read.
9:43 gnuvince: What does #= do?
9:43 durka42: so those aren't really numbers?
9:43 ,#=(class 1)
9:43 clojurebot: java.lang.Integer
9:44 Chouser: no, they're really numbers, but...
9:44 ,#=(sorted-map :a (+ 1 4), :b 2)
9:44 durka42: ,#=(class (System/getProperty "java.class.path"))
9:44 clojurebot: clojure.lang.PersistentList
9:44 {:a 5, :b 2}
9:44 Chouser: hm.
9:44 durka42: ,#=(prn (System/getProperty "java.class.path"))
9:44 clojurebot: DENIED
9:44 cooldude127: Chouser: you liee
9:45 Chouser: cooldude127: aparently I do. I clearly have a weak grasp on it. The thing's not documented -- it's used internally by print-dup
9:45 durka42: ,#=(str (System/getProperty "java.class.path"))
9:45 clojurebot: "(System/getProperty \"java.class.path\")"
9:45 durka42: but it didn't do that one
9:45 although, it did when i tried to prn it
9:45 cooldude127: maybe it evaluates safe stuff
9:45 like math
9:45 idk
9:46 * durka42 doesn't like the idea of startup_info.ini containing #=(System/exit 1)
9:46 Chouser: or maybe my math was eval'ed in a later stage.
9:46 cooldude127: actually #=(sorted-map :a a) doesn't work either
9:46 a gets evaled
9:46 durka42: ,#=(list :a a)
9:46 clojurebot: java.lang.Exception: Unable to resolve symbol: a in this context
9:46 cooldude127: but #=(class a) gives symbol
9:46 durka42: ,#=(System/getProperty "java.class.path")
9:46 clojurebot: Eval-in-box threw an exception:System
9:47 Chouser: ,#=(str :a b)
9:47 clojurebot: ":ab"
9:47 durka42: only in the current namespace?
9:47 cooldude127: durka42: don't worry, that soooo doesn't work
9:47 Chouser: as I said, strange mode.
9:47 cooldude127: i tried #=(System/exit 1) and it threw an exception
9:47 Chouser: I wasn't lying about that part.
9:47 cooldude127: but only because of clojurebot's sandbox
9:48 cooldude127: it works in a regular repl
9:48 cooldude127: Chouser: no it doesn't
9:48 not on mine
9:48 Chouser: ,#=(java.lang.System/exit 1)
9:48 cooldude127: class not found System
9:48 oh
9:48 Chouser: ah!
9:48 sorry!
9:48 cooldude127: LOL
9:49 durka42: whoops
9:49 Chouser: shoot, I was sure it would catch that. :-(
9:49 durka42: hiredman: bat signal!
9:49 Chouser: well, nobody really promised that 'read' was completely safe.
9:50 cooldude127: lol
9:50 durka42: perhaps that is a bug
9:51 jbondeson: Chouser: didn't we have a similar conversion about reading having side effects last week?
9:51 cooldude127: Chouser: this is why i want this patch: this is not an acceptable printed date representation: {:type :clojure.contrib.chrono/Date, :year 2009, :month 1, :day 1, :zone "America/New_York"}
9:51 but this is acceptable: #=(date 2009 1 1)
9:52 Chouser: durka42: I don't know if it's a bug or not. I think this sort of thing is meant to work: #=(java.util.HashMap. {:a 1})
9:52 durka42: does clojurebot read things outside the sandbox?
9:52 i'm thinking it has to, if System/exit worked
9:52 Chouser: oh, I see -- a bug in clojurebot. could be.
9:52 I've never looked at his code.
9:53 durka42: his dispatch architecture is pretty nifty
9:53 cooldude127: yeah agreed
9:54 Chouser: jbondeson: i guess reading well-behaved text doesn't have side effects. :-)
9:54 jbondeson: hahaha
9:54 durka42: well, i'm thinking from an application standpoint it's nice to initialize settings by just (read-string (slurp "data-file"))
9:54 but that isn't safe
9:55 maybe this strange mode could incorporate a "safe list" of functions that are OK to call?
9:55 jbondeson: yeah... that's just not pretty
9:55 durka42: or namespaces
9:56 Chouser: this is odd, though, because I used to have a clojurescript repl that sent strings to my server to be read and compiled to JS
9:57 before I turned it on, I tried several such dangerous-looking #=() forms, and concluded it was safe enough.
9:57 durka42: hmm
9:57 Chouser: I wonder if I just completely failed to test it right.
9:57 durka42: or things could have changed
9:57 Chouser: anyway, at the moment I'm pleased to have turned that off. :-)
9:58 http://
9:58 durka42: i wonder if this also punches a hole right through clojurebot's blacklist
9:58 #=(defn works in the repl
9:59 Chouser: i was wondering that too
9:59 durka42: however, i need to go now
9:59 Chouser: but #=(def x 1) doesn't. how odd.
10:00 durka42: well, def is a special form
10:00 defn is a macro
10:00 Chouser: right
10:01 durka42: i shall return
10:01 djpowell: Re dates, Joda Time, is a Java Date API that makes heavy use of immutable objects and is proposed for incorporation in Java 7. Probably worth a look.
10:01 hiredman: smooth guys
10:02 Chouser: hiredman: so sorry. :-(
10:02 I like clojurebot and i mean him no harm.
10:03 hiredman: :P
10:05 ~def defn
10:06 jbondeson: ,(assoc {} :bot-hater "Chouser")
10:06 clojurebot: {:bot-hater "Chouser"}
10:13 cooldude127: let's talk programming fonts! consolas vs. inconsolata
10:13 jbondeson: consolas
10:16 cooldude127: i used to use it, i've forgotten how they compare
10:16 jbondeson: very similar
10:16 cooldude127: and now i'm killing myself trying to find a download for consolas for mac
10:18 i may need to just install cabextract
10:19 jbondeson: the only real differences i can see is that inconsolata is a little more rounded..
10:19 cooldude127: idk i'm never satisfied
10:19 jbondeson: things like 'C' and '{'
10:24 cooldude127: and found it
10:43 man this room is dull
10:45 danlarkin: you're dull!
10:45 cooldude127: lol
10:46 pilkarn: to make an mp3player you just use a decoder, doe sthe OS has automatic "streamer" for video too, you just need the right decoder?
10:48 rsynnott: you killed the poor little bot?!
10:48 cooldude127: apparently i was not aware of the change that allowed defmulti to have a docstring without ugly metadata map
10:48 nice
10:48 Chouser: cooldude127: ah, I missed that too. thanks.
10:49 must have come along with per-defmulti hierarchies
10:49 cooldude127: Chouser: it was funny how i found it. i was writing a new multimethod, and i saw in the minibuffer that slime was showing doc-string? as one of the args
10:49 ayrnieu: no, it's older than that.
10:49 cooldude127: Chouser: what are these per-defmulti hierarchies you speak of?
10:49 Chouser: cooldude127: hm, nice. i don't have that.
10:50 cooldude127: Chouser: what are you using?
10:50 Chouser: nothing
10:50 cooldude127: Chouser: WHAT?
10:50 Chouser: (doc defmulti)
10:50 clojurebot: Creates a new multimethod with the associated dispatch function. The docstring and attribute-map are optional. Options are key-value pairs and may be one of: :default the default dispatch value, defaults to :default :hierarchy the isa? hierarchy to use for dispatching defaults to the global hierarchy; arglists ([name docstring? attr-map? dispatch-fn & options])
10:51 cooldude127: Chouser: is the clojure.org page for hierarchies updated with information about this?
10:51 i'm so lazy i could just check myself
10:51 Chouser: the web pages in general are meant to reflect the latest release, not svn HEAD (experimental branch docs notwithstanding). So my guess is no.
10:52 cooldude127: we have releases?
10:53 and it does cover make-hierarchy and such
10:53 Chouser: yeah, that's older.
10:53 cooldude127: oh ok. well that's enough
10:53 Chouser: latest release: http://
11:07 hiredman: ,#=(java.lang.System/exit 1)
11:07 clojurebot: access denied (java.lang.RuntimePermission exitVM.1)
11:07 cooldude127: woo hoo
11:07 hiredman: Excelard
11:07 dreish: ,#=(num 1)
11:07 clojurebot: 1
11:07 dreish: Interesting.
11:08 hiredman: yeah
11:08 I just moved the (read ...) into the sandbox
11:08 dreish: Makes sense.
11:08 hiredman: where it should have been from the begining
11:10 cooldude127: well good then :)
11:11 Chouser: You're welcome for the test case.
11:11 cooldude127: lol
11:11 hiredman: :)
11:12 dreish: Anyone happen to know whether arg destructuring in the lazier branch uses the new rest, or next a.k.a. old rest?
11:13 Or better yet, a link where I can browse the branch's source online?
11:13 danlarkin: dreish: at google code
11:14 ~source
11:14 clojurebot: source is http://
11:14 danlarkin: erf,
11:14 ~source rest
11:14 dreish: Ah, thanks.
11:14 danlarkin: that's trunk though
11:14 Chouser: dreish: next -- as in, nil punning is allowed
11:14 danlarkin: so change the branch in the browser
11:14 dreish: Oh yeah, it's pretty easy to find.
11:15 Chouser: ,(let [[a & b] [1]] (class b))
11:15 clojurebot: nil
11:15 dreish: Chouser: That's too bad. One of the things I was hoping for from this was easier porting of Haskell code.
11:15 Chouser: try that in a lazy branch repl to see it yourself.
11:16 you really need the extra laziness there?
11:16 dreish: Usually.
11:17 It's not that hard to rewrite things to be lazier, but I just think it would be nice if it could be almost a transliteration from Haskell.
11:17 cooldude127: dreish: that's what i was hoping the lazy branch would be
11:17 dreish: I'm not sure it would be nice enough to justify the cost of rewriting everything that uses destructuring, though, since that's harder than just s/rest/next/g.
11:18 cemerick: is there a canonical post in the group (or some other resource somewhere) that discusses the various printing mechanisms? (print-method, print-dup, etc) My grasp of the interactions in that area isn't up to snuff.
11:28 Chouser: cemerick: not that I know of. print-dup has hardly been discussed at all.
11:29 you can poke around in core_print.clj to get a sense of how the print-method works.
11:29 cooldude127: wait what's print-dup
11:29 (doc print-dup)
11:30 ~(doc print-dup)
11:30 clojurebot: No entiendo
11:30 cooldude127: ,(doc print-dup)
11:30 clojurebot: "; "
11:30 rhickey: dreish: yeah, maybe a destructuring variant [[a &rest b]] ?
11:30 cooldude127: well then
11:30 Chouser: (doc *print-dup*)
11:30 cemerick: Chouser: yeah, that's what I'm doing. I think I basically have it, but I'm guessing I'm not going to do something the "right way"
11:30 clojurebot: When set to logical true, objects will be printed in a way that preserves their type when read in later. Defaults to false.
11:30 cooldude127: ohhh
11:31 oh so like hashmaps will be hashmaps ands sorted-maps will be sorted?
11:31 Chouser: cooldude127: exactly
11:31 cooldude127: got it
11:31 Chouser: cooldude127: and java.util.HashMaps will be java.util.HashMaps
11:31 cooldude127: ok
11:32 Chouser: cooldude127: and System/exit will kill your bot
11:32 cooldude127: lol
11:32 Chouser: ,(binding [*print-dup* true] (prn (new java.util.HashMap. {:a 1, :b 2})))
11:32 clojurebot: java.lang.ClassNotFoundException: java.util.HashMap.
11:33 Chouser: huh
11:33 cooldude127: ,(binding [*print-dup* true] (prn (new
11:33 java.util.HashMap {:a 1, :b 2})))
11:33 clojurebot: EOF while reading
11:33 Chouser: ,(binding [*print-dup* true] (prn (sorted-map :a 1, :b 2)))
11:33 clojurebot: #=(clojure.lang.PersistentTreeMap/create {:a 1, :b 2})
11:33 cooldude127: Chouser: you messed up by using new AND having a . after hashmap
11:33 Chouser: oh. indeed.
11:33 cooldude127: ,(binding [*print-dup* true] (prn (new java.util.HashMap {:a 1, :b 2})))
11:33 clojurebot: #=(java.util.HashMap. {:b 2, :a 1})
11:34 cooldude127: nice
11:34 the only way to change *print-dup* is to surround in binding, right?
11:35 Chouser: cooldude127: afaik, yes
11:36 cooldude127: yeah nothing else seems to work
11:36 cemerick: hah! Since my genbean impl inherits from PersistentStructMaps, I get a perfect serialized form for free when I print with *print-dup* bound to true -- now I just need to write a single 'create' fn. :-D
11:38 cooldude127: anybody know a way for a computer to determine eigenvalues/vectors without symbolic math?
11:50 dreish: rhickey: (re &rest) I was wondering about that, but looking at the destructure fn, I couldn't tell whether that would make it infeasibly complex.
11:50 It's already very big.
11:51 Chouser: dreish: that's a fun function, eh? :-)
11:51 dreish: Yes.
11:52 I'm just glad it happens at compile time.
11:52 Chouser: & is also supported by pre-destructuring fn (and loop?) forms, but I guess that wouldn't necessarily have to change.
11:54 dreish: Just when I thought I understood something ...
11:57 stuartsierra: Hi, all. In the lazy branch, I can't write (doall (map f c)), right?
11:57 It has to be (doall (seq (map f c)))?
11:57 silkarn: ayrnieu: you never answered yesterday, what is so bad about Haskell? it inspired Clojure a lot, I find Haskell to be very elegant in so many ways(althouhg the Io Monad is not my dearest friend always)
11:58 Chouser: stuartsierra: no, I think your first example is fine
11:59 stuartsierra: in what way do you think it might fail?
11:59 stuartsierra: Chouser: clojure.contrib.walk didn't work right in the lazy branch; that seemed to fix it.
12:00 But the problem only shows up when trying to use "are" in clojure.contrib.test-is.
12:01 Chouser: doall appears to return a LazySeq in the lazy branch
12:01 ayrnieu: silkarn, #haskell is a more suitable channel for a defense of haskell.
12:01 Chouser: ...although it still is fully realized first
12:02 stuartsierra: you must be fixing up test-is a bit as well?
12:02 stuartsierra: Chouser: Not changing anything, just trying to make it work in the lazy branch.
12:03 Chouser: just had to replace "rest" and "rrest" with next/nthnext.
12:03 Chouser: ok
12:05 stuartsierra: you have the assert-if-lazy-seq flag on?
12:05 stuartsierra: yes
12:07 The form with a problem is this: (are (= _1 _2) :a :a :b :c)
12:08 Chouser: I'm getting Unable to resolve symbol: _1
12:08 stuartsierra: That's what I get.
12:09 Until I change this one line in clojure.contrib.walk:
12:10 From (seq? form) (outer (doall (map inner form)))
12:10 To (seq? form) (outer (doall (seq (map inner form))))
12:12 Chouser: someone should branch contrib, even without any changes, so we have a place to put fixes as we find them.
12:12 * Chouser notes how much the word "someone" looks like "stuartsierra" to him.
12:12 Chouser: :-D
12:13 stuartsierra: Just trying to stay anonymous. :)
12:17 Chouser: I've not used 'walk' before, but calling postwalk-replace directly appears to do the right thing
12:17 cemerick: Is it the case that print-dup is meant to be a superset of the level of "readability" provided by "regular" print-method impls? I'm not clear on when I *wouldn't* just bind *print-dup* all the time, I suppose.
12:17 sorry, still trying to get some clarity, and the content I've found on the group so far isn't specific enough for me :-)
12:17 Chouser: cemerick: the output of *print-dup* is a bit ugly for, say, a repl.
12:18 I think that's the main difference.
12:18 or rather, the main reason for there being a difference.
12:18 cemerick: Chouser: ah, OK -- so print-method impls should be human-readable, and nominally clojure-readable, whereas print-dup impls should provide the highest-fidelity serialization possible?
12:18 Chouser: that's my understanding, yes.
12:18 rhickey: cemerick: right
12:19 stuartsierra: Chouser: yes. There's something very subtle going on in the interaction of walk, template, and test-is.
12:19 cemerick: OK, got that.
12:19 Chouser: and right there is the difference between the BDFL and a lowly hanger-on. :-)
12:19 stuartsierra: yes
12:20 cemerick: rhickey: what's the etymology of print-dup, BTW?
12:21 Chouser: cemerick: ah, I've got a link for that one if you give me a sec...
12:21 stuartsierra: FYI: I created /branches/lazy in contrib, in SVN rev. 472.
12:21 Chouser: stuartsierra: thanks!!
12:22 stuartsierra: Welcome. I'm not a big SVN user, but I think it's right.
12:23 Chouser: cemerick: http://
12:25 * rhickey just got rid of Sequence in lazy
12:25 stuartsierra: rhickey: what does that imply?
12:25 cemerick: Chouser: ah-ha. Hey, if I had been following the channel then, we could have lengthened that conversation by at least another 20 minutes! :-P
12:26 rhickey: stuartsierra: things will be much simpler without 2 seq[uence] types, but the first/rest/next thing stays the same
12:27 bbl - will push code and modified docs - this looks like a winner
12:27 dreish: To trunk?
12:28 stuartsierra: Ok, I'll take a look after lunch. :)
12:28 Chouser: dreish: I would doubt it.
12:29 dreish: Oh, I see. Got rid of the Sequence class, pushing that to the branch.
12:29 I just don't want to miss the big exciting merge.
12:29 Especially since merges are such a clusterf*** in SVN.
12:31 pilkarn: can a tuple not be of length 3?
12:31 wrong channel
12:32 cooldude127: pilkarn: what language was that for? haskell? scala?
12:32 Chouser: python?
12:33 python as tuples, but getting one of length 3 would be trivial, so probably not.
12:33 cooldude127: Chouser: any language i know with tuples has no problem with any length
12:33 Chouser: haskell might require the number of args in the constructor function name, right?
12:33 cooldude127: Chouser: tuples in haskell are just like (1,2,3)
12:33 Chouser: hm.
12:34 dreish: What a riddle you have given us, pilkarn.
12:34 ayrnieu: ,(defn tuple [a b] [:tuple a b]) ;; no, they can only have two arguments.
12:34 clojurebot: DENIED
12:34 cooldude127: lol he may never come back
12:34 then we'll never know
12:35 Chouser: ~google can a tuple not be of length 3?
12:35 clojurebot: First, out of 289000 results is:
12:35 Tuples
12:35 http://
12:35 * Chouser is unconvinced.
12:35 dreish: Python it is, then.
12:35 cooldude127: lol
12:35 * dreish goes back to what he was doing before.
12:37 hiredman: http://
12:38 cooldude127: tuples should always be able to be whatever length
12:38 albino: In python a tuple of length 3 is as easy as (1, 2, 3)
12:38 WizardofWestmarc: yeah
12:38 just can't modify it after, have to make a new one :P
12:38 albino: he must have been doing something much more interesting
12:39 dreish: Oh? So you think you know better than Google's supercomputers, with their silicon chips and such?
12:40 albino: oh, if that was directed at me, then the answer is yes
12:42 gnuvince: ayrnieu: have you caught the blog post I promised?
12:42 ayrnieu: I did! Thanks.
12:42 cooldude127: richard cobbe's thesis about null in java looks like something i've been wondering about lately
12:43 gnuvince: ayrnieu: cool :)
12:47 Chouser: cooldude127: link?
12:47 cooldude127: http://
12:48 Chouser: thanks
12:49 cooldude127: basically boils down to: why is java's type system so sucky?
12:49 at least as far as i have read
12:50 gnuvince: Couldn't they just copy C#'s nullable types?
12:50 int x; // Non-nullable type
12:50 int? x; // Nullable type
12:50 cooldude127: cuz at the moment, existing java code would EXPLODE
12:50 hiredman: Doctor of Philosphy in the field of Computer Science
12:50 cute
12:50 cooldude127: lol
12:52 gnuvince: See, that's why Rich should not feel bad about breaking Clojure *now* with rest/next and do the right thing *before* there's too much code out there that just cannot afford breaking changes
12:52 albino: how is a Nullable type different from using NPEs? In the Nullable type case you end up using an if instead of a try/catch, right?
12:53 cooldude127: albino: nullable types encode the information that this variable can or can't be null in the type system
12:53 gnuvince: albino: as I understand it (I don't really have any experience with C#), you cannot pass a nullable type to a function that expects a non-nullable type.
12:53 WizardofWestmarc: yeah I prefer Rich to feel like it's ready for prime time before 1.0 and it takes off to another level or two
12:53 albino: cooldude127: I figured that, still doesn't answer my question
12:53 gnuvince: The compiler will scream at you
12:53 WizardofWestmarc: although following the twitter traffic on clojure is interesting
12:53 it's escalating
12:53 cooldude127: albino: the compiler can now check that stuff
12:54 albino: NPEs are at runtime, but with nullable types the compiler can check if you're doing something wrong
12:54 gnuvince: WizardofWestmarc: link?
12:54 WizardofWestmarc: http://
12:54 you can see all references to clojure with that
12:55 and it updates pretty fast based on tests where I've mentioned clojure and then waited for it to give the refresh message
12:59 te: i just found a cool clojure-related domain name
12:59 * te registers
12:59 te: trying to dfecide on the .org or the .com
12:59 maybe .org just for street cred
12:59 Chouser: injure.com is already taken
12:59 te: lol
12:59 ayrnieu: clojurebot: jure words
12:59 clojurebot: http://
13:00 cooldude127: lol foreclojure
13:00 WizardofWestmarc: get both
13:00 domains are cheap
13:01 hiredman: but they pile up
13:01 WizardofWestmarc: I still regret not taking the .net and the .org for my domain because someone else grabbed the .net while I've barely used my .com and now wants the .com, which is just annoying :P
13:01 hiredman: like buying songs from itunes
13:01 te: mine isnt on there
13:01 WizardofWestmarc: domains are cheap UNTIL you have to renew 30 of them the same week
13:02 cooldude127: haha
13:02 hiredman: yeah
13:02 te: wow, 7$ for a .net
13:03 * te remembers when these things cost 50$
13:03 WizardofWestmarc: heh
13:03 they still cost $30+ if you buy through network solutions :P
13:03 and I think Yahoo! as well
13:03 cooldude127: whyyyy
13:04 te: because people dont know any better
13:04 WizardofWestmarc: because NS are *insert lots of swearwords here*? <_<
13:04 cooldude127: lol
13:04 WizardofWestmarc: actually what was ugly, last i heard yahoo charged something like $10 for the first year
13:04 but the auto renewals were something like $30
13:05 cooldude127: stupidddd
13:05 WizardofWestmarc: there's a reason I stick to GD
13:05 though right now I have the extra ~$10 for private entry
13:07 hiredman: I did not do the private thing, and got a few calls from people who wanted to make a website for me
13:09 WizardofWestmarc: heh really? bleh
13:10 I'll probably unprivate it once I launch what I'm going to put on the site
13:10 but not before
13:10 te: hehe I registered getclojure.com/.org
13:10 "I--I just need to get clojure *sob*"
13:11 WizardofWestmarc: you know, findclojure.com would be an amusing domain name as well, what with the many meanings ;-)
13:11 see how many typoing people looking for counciling you can sucker in >_>
13:11 te: lol id give them code
13:12 (defn your-mood [scale])
13:13 (Or maybe I'd proceed to tell them how their life is probably great compared to me-- I spent hours of my life learning something most people will never care about."
13:21 cooldude127: if i'm saying that a function in clojure returns a sequence, does that mean it returns a vector, list, etc. that can be used with the seq functions, or that it returns one of those that has had seq called on it already
13:24 WizardofWestmarc: I'd expect it to be the actual seq object, with who knows what underlying it
13:24 though technically I think that's same difference
13:25 cooldude127: WizardofWestmarc: ok, just wondering what the right way to document stuff is
13:25 WizardofWestmarc: actually I'm going to test something, one sec
13:26 hm
13:27 may be off, conjing a seq of a vect works like a list/seq, not a vector
13:27 hiredman: cooldude127: (class ...)
13:27 ,(class (map identity [:a :b :c]))
13:27 clojurebot: clojure.lang.LazyCons
13:28 WizardofWestmarc: although if you class a seq of a vect it returns persistantvector
13:28 hiredman: ,(class (reduce conj '() [:a :b :c]))
13:28 clojurebot: clojure.lang.PersistentList
13:28 WizardofWestmarc: well
13:28 APersistantVector$Seq
13:28 cooldude127: it's not as important anymore cuz i'm using map, so it's definitely a seq
13:28 hiredman: ~def seq
13:35 cooldude127: how big is the cutoff between array maps and hash maps?
13:35 Chouser: 32
13:36 cooldude127: oh
13:36 makes sense
13:36 * Chouser tests...
13:38 Chouser: that's wrong,
13:38 cooldude127: Chouser: close enough, 33 is a hashmap
13:38 but so is 31
13:39 Chouser: 9?
13:39 cooldude127: idk this is fine, it was more a curiousity
13:39 Chouser: 9 is an array-map, 10 is a hash-map.
13:40 cooldude127: ok good to know
13:40 Lau_of_DK: Good evening gents
13:40 danlarkin: Hi Lau!
13:41 got a name for me?
13:41 Lau_of_DK: c l a b a n g o !
13:41 danlarkin: no way man
13:42 that's worse than copter
13:42 Lau_of_DK: :(
13:55 rhickey: Sequence-free lazy is up, new doc at: http://
13:56 Lau_of_DK: cool
13:59 * Chouser takes a deep breath.
13:59 clojurebot: svn rev 1283; [lazy] got rid of Sequence, (seq iseq) no longer an identity, ISeqs can be empty, PersistentList.EMPTY and LazySeq.EMPTY are ISeqs, rest returns ISeq
13:59 rhickey: No changes to code already ported other than to switch back to seq? since sequence? is gone
14:00 WizardofWestmarc: rhickey: so nil punning is still out in lazy?
14:00 rhickey: WizardofWestmarc: there is still next and seq
14:01 WizardofWestmarc: *nods*
14:01 * WizardofWestmarc is behind on lazy as I haven't gotten into the branch to play with it.
14:01 Chouser: why is (seq iseq) not being identity important?
14:02 rhickey: Chouser: it's just a change
14:02 hopefully it's not important
14:02 It was an important optimization inside Clojure itself, but I figured out another way
14:03 Chouser: ok
14:03 hiredman: the "Don't hang (onto) your head" fills me with non-specific dread
14:03 rhickey: but the change just covers (seq ()) -> nil, since () is a seq now
14:04 Chouser: "Sequence fns (map, filter etc) don't (necessarily) return seqs, but Sequences"
14:04 rhickey: hiredman: there's nothing new about that, just that it's less likely
14:04 cooldude127: sometimes i just love loop/recur, it's just so elegant sometimes
14:04 ayrnieu: cooldude - read The Little Schemer for a deeper appreciation :-)
14:04 WizardofWestmarc: I like it because it helps me catch when I don't have my TC in the tail position
14:05 since I'm so bad at doing that wrong :P
14:05 rhickey: Chouser: fixed - thanks
14:05 cooldude127: i like it because i can be doing a simple tail recursion where it calls to the function it's in, but if i need to have something done before that, i just wrap it in a loop and i don't need an auxillary function
14:10 stuartsierra: Ported clojure.contrib.duck-streams to lazy branch, SVN rev. 473.
14:10 rhickey: stuartsierra: lazy 1283?
14:11 Chouser: rhickey: why the use of the Cons constructor rather than just the cons fn, in the final example at http://
14:11 stuartsierra: rhickey: yes
14:11 rhickey: stuartsierra: awesome!
14:12 stuartsierra: rhickey: That was the easy one. :)
14:12 rhickey: stuartsierra: good
14:12 Chouser: template/test-is/walk still misbehaving?
14:13 stuartsierra: Chouser: working on that next.
14:13 Chouser: ok
14:15 I think rhickey fixed it.
14:15 rhickey: Chouser: remnant, fixed in 1284 and doc - thanks
14:16 Chouser: rhickey: np!
14:16 rhickey: so, is this (1283+) simpler?
14:17 stuartsierra: Committed test_is.clj using next/nthnext (rev. 474). Still need to test 'are' & templates.
14:17 Chouser: Based on just reading the docs, I think nicely simpler, yes.
14:17 stuartsierra: it's fixed already.
14:18 stuartsierra: your "are" example now works fine as of 1283
14:19 stuartsierra: Chouser: so it does. Thanks, Rich!
14:19 clojurebot: svn rev 1284; [lazy] straight cons call in filter
14:20 gnuvince: rhickey: when do you plan to merge lazy into trunk?
14:21 Lau_of_DK: Has anyone here had some experience with the JMonkey Engine?
14:21 rhickey: gnuvince: RSN
14:21 gnuvince: rhickey: cool
14:22 I'm going to check my lib, but there are no calls to rest and only one to lazy-cons.
14:22 I think the conversion is gonna be real easy :)
14:27 stuartsierra: Committed lazy/.../json/write.clj (rev. 475); only renamed rest to next, all tests pass
14:29 hiredman: clojurebot: svn?
14:29 clojurebot: svn is http://
14:34 stuartsierra: Fixed re-partition in clojure.contrib.str-utils for lazy; SVN rev. 476
14:35 * danlarkin wonders if stuart sierra created a stuartsierra bot
14:35 stuartsierra: danlarkin: oh I wish
14:35 danlarkin: Really, though, these are trivial changes.
14:35 jbondeson: only a bot would say that!
14:35 Chouser: clojurebot could announce contrib commits too, couldn't he?
14:36 stuartsierra: Chouser: yes, that would be nice.
14:41 Lau_of_DK: Java question, when I want my Clojure proggy to have a structure like this class calc extends GCalc { public static void myadd(int x, int y) { ... } }, How do I mimic that in Clojure?
14:42 Chouser: static -- does that mean GCalc does not have a myadd method?
14:42 hiredman: depends, are you adding a new method or changing the behaviour of an existing method?
14:43 Lau_of_DK: Chouser: Yea
14:43 hiredman: Adding
14:43 hiredman: gen-class
14:44 Chouser: ~gen-class
14:44 clojurebot: No, Chouser, you want gen-interface + proxy
14:44 * Chouser giggles
14:45 Lau_of_DK: Come now boys, gen-class was sent into retirement by AOT right?
14:45 hiredman: nope
14:45 just changed
14:45 cooldude127: Lau_of_DK: it lives in (ns)
14:45 Lau_of_DK: hiredman: Can you give me an example?
14:46 hiredman: uh
14:46 jbondeson: you cannot extend objects with proxy, correct?
14:46 hiredman: the only place I used, I used it very badly
14:46 jbondeson: correct
14:46 jbondeson: time for SUPERPROXY
14:47 hiredman: http://
14:47 macro generates standalone (gen-class ...) forms
14:47 Lau_of_DK: thanks
14:47 hiredman: (not in a ns form)
14:48 thearthur: does clojure contrib have something to write a bunch of ints or sequences of ints to an open file?
14:48 Chouser: thearthur: as ascii text?
14:48 Lau_of_DK: (spit ...)
14:48 or is it spew ?
14:48 (doc spit)
14:49 Chouser: ,(println [1 2 3 4])
14:49 hiredman: (binding [*out* (FileWriter. "somefile")] (println (range 100)))
14:49 clojurebot: [1 2 3 4]
14:49 thearthur: Lau_of_DK, tak!
14:49 Lau_of_DK: Selv tak min ven :)
14:50 thearthur: Chouser, as 64 bit ints
14:50 * hiredman cocks and eyebrow
14:50 Chouser: ah. I don't know of any such thing
14:53 stuartsierra: Committed seq_utils.clj in lazy branch; changed lazy-cons to lazy-seq, but haven't tested everything.
14:54 gnuvince: rhickey: if one wants to avoid unnecessary eagerness, should we stay clear of destructuring?
14:58 technomancy: heh; spew/slurp would be almost as awesome as spit/slurp
14:59 cooldude127: technomancy: woah you're here
15:00 gnuvince: technomancy: do you have an idea why slime-interrupt doesn't work in swank-clojure?
15:02 technomancy: gnuvince: I've not touched the internals of swank-clojure at all, just the setup stuff.
15:03 cooldude127: hey. did you take a look at that date stuff I sent you?
15:03 cooldude127: technomancy: yeah, in fact i was wondering what you had in mind for other internal representations
15:03 gnuvince: technomancy: ok
15:04 technomancy: does it work for you?
15:04 technomancy: gnuvince: I haven't tried it at all. I often just end up killing my inf-lisp buffer and restarting; I'm sure there's a better way though
15:05 need to spend some Quality Time with the slime manual
15:05 Bracki: What ecavtly does lazy-cat do?
15:06 technomancy: cooldude127: I think I need to learn how gen-interface works. I'm not so sure I like using just a map, but I'm not sure how one constructs a new data type.
15:06 cooldude127: Bracki: eventually concatenates two things
15:06 technomancy: idk, it feels anti-clojure to me to use anything else
15:06 gnuvince: technomancy: ok; I find it annoying to do all the (use) and (import) that I had
15:08 technomancy: cooldude127: well the problem I see is that if you're going to implement stuff like (later-than christmas 1 :month) and keep the internal representation as a map, you're going to need to do tons of useless translation back and forth between the two formats.
15:08 cooldude127: :( dates suck
15:09 Bracki: I'm trying to understand the fibonacci code using lazy-cat but I just don't get it.
15:10 cooldude127: Bracki: trust me, it's confusing
15:10 technomancy: cooldude127: well I really don't know if that's the right way, but I think it at least merits some more investigation
15:10 cooldude127: yeah you're right
15:10 i'm really not sure
15:10 technomancy: cooldude127: what do you think of the other functions I specced?
15:10 cooldude127: everything looked good to me
15:11 technomancy: cooldude127: mostly I tried to think of what I like best about date libs from Ruby
15:11 hiredman: Bracki: are sure it is lazy-cat? not lazy-cons?
15:11 Bracki: yes
15:11 technomancy: and translate that into non-OO-speak
15:12 hiredman: ,(lazy-cat '(1) '(2))
15:12 clojurebot: (1 2)
15:12 hiredman: ^- that is what lazy-cat does
15:12 cooldude127: technomancy: the one thing that i wonder about is having parse guess the format. i have no idea how to make that happen, java doesn't support it i don't think
15:12 lisppaste8: Bracki pasted "fibs with lazy-cat" at http://
15:13 hiredman: ah
15:13 so lazy-cat is lazy
15:13 so is map
15:13 so that turns into a lazy seq of (0 1 ..promise to compute the rest..)
15:13 Bracki: So every element is evaluated when it is taken right?
15:14 hiredman: yes
15:14 cooldude127: Bracki: yes, otherwise if they were all evaluated now, that would go infinitely
15:14 hiredman: so it sort of rolls over on itsself
15:14 technomancy: cooldude127: well I was thinking of trying each of the known formats in order of likelihood until a sane result was reached
15:14 cooldude127: yes
15:14 technomancy: but I don't know if that would work
15:14 a smarter approach may be necessary
15:14 Bracki: Alright lets say I do (take 4 fibs). What happens for 3 and then 4?
15:14 cooldude127: technomancy: yeah i'm not really sure how to do that. tho ruby is open source, maybe see how it does it
15:15 hiredman: well, the map happens
15:15 technomancy: cooldude127: yeah, but that part's in C... ugh! =)
15:15 cooldude127: Bracki: your head explodes trying to understand it
15:15 technomancy: what about rubinius?
15:15 technomancy: do they have that working? wouldn't it be in ruby?
15:15 technomancy: cooldude127: worth a shot. that's lower-priority than most of the other functions though
15:15 cooldude127: yeah
15:15 hiredman: the map is on fibs which is (0 1 ..promise to compute the rest..) and (rest fibs) which is (1 ..promise to compute the rest..)
15:16 and map is mapping +
15:16 cooldude127: Bracki: so you end up with (0 1 (+ 0 1) (+ 1 1) ...)
15:16 it's scary how it works
15:17 hiredman: use the substitution model
15:20 cooldude127: i'm doin it! i'm writing a damn symbolic math system in clojure
15:20 i've made the namespace
15:20 there's no going back
15:20 jbondeson: cooldude127: DOOOON'T DOOOO ITTT
15:20 cooldude127: jbondeson: I MUST
15:20 jbondeson: there's no going back after this
15:20 cooldude127: lol
15:21 i have to, it will make everything easier
15:21 jbondeson: it's like killing a man, once you write a symbolic math library you're never the same
15:21 cooldude127: lol
15:21 jbondeson: have you done it?
15:21 jbondeson: no, but i've... seen things... things no man should have to
15:21 cooldude127: haha
15:22 well in the name of all that is holy, i'm telling infix to go jump off a bridge
15:22 so that should eliminate at least a few problems
15:22 technomancy: "I knew the risks!"
15:22 (http://
15:23 cooldude127: lol
15:24 jbondeson: cooldude127: it's not sybolic math if you throw out the most common notation!
15:24 cooldude127: jbondeson: fuck infix! i don't love it. all i want is to have variables in my stuff
15:25 i'll do what i want
15:25 jbondeson: "Reality is what *I* define it to be!"
15:25 cooldude127: EXACTLY
15:26 if i want to use prefix notation, damnit i will!
15:26 jbondeson: RPN is for calculators and COMMIES
15:26 cooldude127: haha
15:26 WizardofWestmarc: who says the calculators aren't commies?
15:27 jbondeson: their both after our precious fluids
15:27 they're even
15:32 pilkarn: how do I do if I want to call a Clojure-function from Java? I do compile with gen-class to generate class-files and then I import what? the namespace and refer to it like namespace.function(params); ?
15:37 Bracki: Does anybody have some pointers to an easy parser written in Clojure? I'm about to write a Markdown parser.
15:38 Or rather as far as I get tonite.
15:38 danlarkin: Bracki: http://
15:38 pilkarn: how do I make (System/exit 0) not kill the repl?
15:39 danlarkin: pilkarn: why do you want to do that?
15:39 gnuvince: pilkarn: don't call it?
15:39 Bracki: danlarkin: I meant *easy* ;)
15:39 technomancy: quote it. =)
15:40 gnuvince: pilkarn: http://
15:40 danlarkin: Bracki: it's a steep, but short, learning curve
15:40 gnuvince: It terminates the JVM
15:41 danlarkin: Bracki: much more fun than reading a string char-by-char, believe me
15:42 gnuvince: Or having a regex mess
15:42 briancarper: Bracki: I was actually starting to write a Markdown parser too. I was going to use ANTLR. Didn't get very far though.
15:42 Bracki: I prefer the regex mess then.
15:43 briancarper: The original Markdown.pl was a regex mess, and if you make a proper parser with a proper grammar, it will probably break compatibility. So I've read.
15:44 technomancy: heh
15:47 Bracki: Well who needs a Markdown parser anyways...
15:52 gnuvince: if you go with the regex mess, you can probably just copy markdown.pl and be done with it in less than 4 hours
15:54 Bracki: That's even harder to read...
15:55 gnuvince: fnparse then :)
15:55 Bracki: No way, cause my Clojure is less than basic and I don't understand anything thats happening there...
15:56 danlarkin: Bracki: it's not too difficult :)
15:56 Bracki: Considering that the lazy-cat fibs stuff makes my head explode it is.
15:56 danlarkin: do you know much about formal grammar or automata?
15:57 Bracki: I did.
15:58 danlarkin: then it's a breeze, you build rules from the bottom up to match bigger and bigger parts of the markdown spec
15:58 like you'd start with a whitespace rule
15:58 Bracki: But I wouldnt know how to handle multiple lines.
15:59 danlarkin: well if you want to match a newline then use a rule to match \newline
15:59 if you don't, then just... don't match them
15:59 see? easy :)
16:00 jbondeson: heh
16:00 there's a reason people use parser-generators
16:00 briancarper: Parsing Markdown requires at least two passes, I think. One to extract the links first.
16:00 danlarkin: because they're small minded!
16:01 jbondeson: danlarkin: either that or efficiency minded
16:01 danlarkin: jbondeson: parser combinators can run in polynomial time
16:02 if they use memoization correctly
16:02 fnparse doesn't, but it could
16:06 Bracki: Hm, so how do I replace stuff in a string?
16:08 technomancy: (doc re-sub)
16:08 clojurebot: hey!
16:08 clojurebot: excusez-moi
16:08 technomancy: clojurebot: (doc re-sub)
16:08 clojurebot: No entiendo
16:08 danlarkin: it's in str-utils I believe
16:08 technomancy: clojurebot: (use 'clojure.contrib.re-sub)
16:08 clojurebot: clojure is a very attractive hammer with a nice heft to it
16:08 technomancy: clojurebot: (doc clojure.contrib.re-sub)
16:08 clojurebot: clojure is cheating
16:08 hiredman: ,(use 'clojure.contrib.re-sub)
16:08 clojurebot: java.io.FileNotFoundException: Could not locate clojure/contrib/re_sub__init.class or clojure/contrib/re_sub.clj on classpath:
16:08 technomancy: bah
16:09 ,(doc clojure.contrib.str-utils)
16:09 clojurebot: java.lang.Exception: Unable to resolve var: clojure.contrib.str-utils in this context
16:09 hiredman: ,(use 'clojure.contrib.str-utils)
16:09 clojurebot: java.io.FileNotFoundException: Could not locate clojure/contrib/str_utils__init.class or clojure/contrib/str_utils.clj on classpath:
16:09 technomancy: ,(doc clojure.contrib.str-utils/re-sub)
16:09 clojurebot: java.lang.Exception: Unable to resolve var: clojure.contrib.str-utils/re-sub in this context
16:09 hiredman: *shrug*
16:09 jbondeson: clojurebot is anti-contrib
16:09 technomancy: jbondeson: yeah, when was the last time he contributed a patch anyway? slacker.
16:10 jbondeson: clojurebot: sharing is caring
16:10 clojurebot: 'Sea, mhuise.
16:11 cooldude127: clojurebot: sharing?
16:11 clojurebot: sharing is caring
16:11 cooldude127: lol
16:12 jbondeson: he'll be ditching us and teaching preschoolers in no time
16:12 technomancy: is this an appropriate use of cons? (str-join "\n " (cons "You are carrying:" @*inventory*))
16:13 Bracki: re-gsub is it.
16:24 pilkarn: (fn [[x y] z](y (* x x))) isnt that allowed?
16:24 , ((fn [[x y] z] (* x y)) [10 20])
16:24 clojurebot: java.lang.IllegalArgumentException: Wrong number of args passed to: sandbox$eval--933$fn
16:25 pilkarn: how do I destructure there
16:25 , ((fn [[x y]] (* x y)) [10 20])
16:25 clojurebot: 200
16:25 pilkarn: ah
16:26 Bracki: zomg the markdown.pl code is really awful.
16:27 ayrnieu: where is it?
16:27 hiredman: ~google markdown.pl
16:27 clojurebot: First, out of 59600 results is:
16:27 Daring Fireball: Markdown
16:27 http://
16:27 ayrnieu: OK. Is that what you're looking at, Bracki?
16:29 gnuvince: fnparse isn't looking so bad now, is it?
16:30 Bracki: Yeah but the whole detabbing unspacing stuff is even worse in a grmammar for my taste
16:30 ayrnieu: yes
16:30 trying to translate the _detab subrotuine
16:30 http://
16:31 stuartsierra: Or just use http://
16:32 ayrnieu: oh, I was expecting something written in perl4. This this OK.
16:32 Bracki: stuartsierra: Yeah, but the point is to learn clojure.
16:32 ayrnieu: But why are you reading the code anyway? Implement the documentation.
16:33 stuartsierra: Bracki: ok, go for it!
16:33 Bracki: ayrnieu: true
16:33 technomancy: Bracki: I hate to discourage you, but I'm not sure that's a great first project for clojure.
16:34 skogs: there is also a haskell parsec like library in google groups files
16:34 technomancy: it doesn't seem to address any of the language's strengths
16:34 skogs: its based on clojure.contrib.monads code
16:34 Bracki: technomancy: probably not, but project euler is boring.
16:35 technomancy: Bracki: I had a lot of fun implementing a game.
16:35 Bracki: What kinda game? a MUD thingy?
16:36 technomancy: ~mire
16:36 clojurebot: Huh?
16:36 technomancy: Bracki: yeah, exactly: http://
16:36 pilkarn: how do you do extends or implments from Clojure?
16:36 hiredman: ~mire is http://
16:36 clojurebot: Alles klar
16:36 pilkarn: how do I make (System/exit 0) not kill the repl?
16:37 how do I do if I want to call a Clojure-function from Java? I do compile with gen-class to generate class-files and then I import what? the namespace and refer to it like namespace.function(params); ?
16:37 Bracki: technomancy: Ah, saw that yesterday while browsing a friends following list on github.
16:39 stuartsierra: pilkarn: if you declare your method as static in gen-class.
16:40 Bracki: The thing is, functional programming isn't made for me. I like filter,map and list comprehensions but I have those in Python as well ;(
16:40 pilkarn: Bracki: it takes time
16:40 WizardofWestmarc: you don't have the same guarantees of data safety though
16:41 pilkarn: ayrnieu: can you explain to me why you think all Haskell code is useless?
16:41 hiredman: Bracki: what about it turns you away?
16:41 Bracki: The special characters and the lack of coherent docs.
16:42 hiredman: eh? that doesn't seem to be a functional programming issue
16:42 Bracki: No, but I makes code even less readable for my taste.
16:43 hiredman: *shrug*
16:43 technomancy: Bracki: you get used the special characters pretty quickly
16:44 give it a week or so
16:44 Bracki: Or rather what turns me away is, I don't have any problems to solve that require functional programming.
16:44 technomancy: the docs will take longer than a week, of course
16:44 ah! that is a little harder to address. =)
16:45 Bracki: It has either been solved or turns out to be too hard.
16:45 WizardofWestmarc: the thing is, learning the functional style can arguably make even your non-functional programming better
16:45 stuartsierra: Nothing *requires* functional programming, but it can be very concise and elegant.
16:45 hiredman: I see you have been misinformed, all problems require functional programing
16:45 WizardofWestmarc: because of the new way it teaches you to think
16:45 stuartsierra: Yes. :)
16:46 technomancy: but coming up with a learning project can be tricky; no doubt about that.
16:46 Bracki: That's alright. I did a fair bit of scheme/guile but it's not how I tick.
16:46 hiredman: (ha ha guile)
16:47 cooldude127: anything involving math is more fun in a functional language
16:47 :)
16:52 pilkarn: does java have an import as statement? it is either import java.io.*; then File or java.io.File ?
16:52 import java.io.* as I; I.File would be better, as in Python
16:54 stuartsierra: pilkarn: No, Java doesn't have package aliases.
16:55 Lau_of_DK: Whats the syntax for gen-class' :expose ?
16:55 I need to expose com.jme.app.SimpleGame's protected method getRootNode
16:55 How do I do ?
16:55 The things that you do ?
16:56 hiredman: why functional programming matters is <reply>http://
16:56 er
16:56 ~why functional programming matters is <reply>http://
16:56 clojurebot: You don't have to tell me twice.
16:57 jbondeson: i tell yeah, clojurebot just gets more uppity by the day...
16:57 hiredman: Lau_of_DK: http://
16:57 stuartsierra: Lau_of_DK: I think you want :exposes-methods
16:57 Bracki: Well, more Euler than. What's sqrt in clojure?
16:57 hiredman: ,(Math/sqrt 25)
16:57 clojurebot: 5.0
16:58 Lau_of_DK: typical rich, fancy documentation, no examples for dumb folk
16:58 hiredman: but, uh, Math/sqrt is a normal java static method, so you cannot just pass it a BigDecimal or what not
17:00 stuartsierra: Lau_of_DK: protected methods are automatically exposed by gen-class.
17:00 pilkarn: stuartsierra: how? (declaring gen-class method static)
17:00 hiredman: ah
17:00 :exposes is for fields
17:01 stuartsierra: yes
17:01 pilkarn: Lau_of_DK: whatis SimpleGame?
17:01 Bracki: When should I use a Macro?
17:01 hiredman: for manipulating code
17:02 (as data)
17:02 Lau_of_DK: pilkarn: google JMonkeyEngine
17:02 stuartsierra: pilkarn: (gen-class ..... :methods [#^{:static true} [methodName [param types] return-type]]
17:02 I think
17:03 jbondeson: is clojure.contrib.math borked for anyone else?
17:03 hiredman: Bracki: for example, to talk about pointless symbols, I have a macro that transforms (a � b) to (comp a b)
17:04 clojurebot: svn rev 1285; [lazy] updated docs
17:04 hiredman: normally (a � b) would try and apply the function 'a' to '�' and 'b'
17:05 but the macro gets access to (a � b) as a list of symbols, and deletes the � symbol and cons the comp partial onto the front of the list
17:05 (actually it uses a zipper, so it doesn't really cons onto the front)
17:09 er
17:09 "comp partial"
17:09 hah
17:13 Bracki: What is between (a and b). Unicode/putty issues.
17:13 Chouser: apparently an empty rectangle.
17:13 cooldude127: a dot
17:15 hiredman: nah
17:15 it is a interpunct
17:15 technomancy: it's a middle-dot rather than a period
17:15 hiredman: http://
17:19 Chouser: I once saw an guy get interpunked
17:19 hiredman: ashton sent him an email?
17:19 jbondeson: did he get composed?
17:19 Chouser: hiredman: exactly
17:22 durka42: was clojurebot's read-time vulnerability already discussed?
17:22 Chouser: and solved
17:22 though not the underlying question of whether read should allow such things
17:22 rhickey: everyone good with lazy branch?
17:23 * Chouser starts chanting like a drinking game, "Merge! Merge!"
17:23 jbondeson: bwahaha
17:24 rhickey: Chouser: I feel good about it, have no idea how best to get it in trunk without major breakage
17:24 jbondeson: embrace the chaos ;)
17:24 Chouser: I was planning another blog post -- I have what I think is a nice setup here for running any of the different branches on a whim
17:25 It doesn't currently handle the contrib branch, but I was thinking that could be worked in too.
17:26 lisppaste8: Bracki pasted "What's wrong with this primality test?" at http://
17:27 Chouser: but I'm not sure there's any value in that once the future is no longer uncertain. People can choose to upgrade now or later, but the end result is the same. *shrug*
17:27 WizardofWestmarc: there could be major change branches in the future as well
17:27 so the info is still useful even if the current branches get merged into trunk
17:28 Chouser: oh, I see. sure
17:28 hiredman: Bracki: I think you need sqrt+1
17:28 durka42: ,(empty? nil)
17:28 clojurebot: true
17:28 durka42: ^ that is Bracki's problem
17:28 Chouser: but I guess I was thinking the benefit of keeping trunk un-broken (unbreaking?) for now is hardly anything once we know lazy branch is the future.
17:28 durka42: ,(empty? (seq nil))
17:28 clojurebot: true
17:29 durka42: wait, nevermind
17:31 lisppaste8: Bracki annotated #75598 with "untitled" at http://
17:31 hiredman: yeah
17:31 change the "int" to an inc
17:32 durka42: nice one-char fix
17:33 Bracki: Cool.
17:34 jbondeson: still technically not correct because (is-prime? 2) => false
17:35 Bracki: Nitpicker ;)
17:36 rhickey: SVN wizards - how do I (best) merge this lazy stuff back into trunk?
17:36 jbondeson: number theory is serious business
17:38 rhickey: unfortunately i've always done big merges in svn by letting svn have a go and using a really good diff tool to resolve the conflicts.
17:42 danlarkin: make sure you're using svn 1.5! It has merge tracking built-in
17:42 Bracki: Hm it's getting late, how do I break or return?
17:42 hiredman: uh
17:43 you don't
17:43 jbondeson: danlarkin: that would not be helpful only if he had it before he branched lazy off ;)
17:43 hiredman: how are you "looping"
17:43 ?
17:43 Bracki: Well take the prime code and add the explicit check for 2.
17:43 hiredman: ah
17:43 just wrap it in an if
17:44 (if (= x 2) true (filter ...))
17:44 Bracki: Argh, I closed the bracket to early...
17:44 durka42: what if x is 1?
17:45 Bracki: After the true.
17:45 danlarkin: jbondeson: :-o
17:45 * jbondeson has had the pain of pre-1.5 branches post-1.5
17:46 Bracki: durka42: Since I do an empty? on an empty list then its true.
17:47 durka42: but is 1 prime? ;)
17:47 jbondeson: durka42: no.
17:47 iirc
17:48 hiredman: prime is not evenly divisble by any number other then 1 and itsself
17:48 hmm
17:49 I am pretty sure 1 is not prime, but that def sounds different
17:49 ayrnieu: you could also state it computationally: a number is prime if it is not divisible by any of the primes you've come across.
17:50 durka42: that's a seive, isn't it
17:50 jbondeson: hiredman: it excluded because it screws up factoring
17:50 hiredman: http://
17:51 Yeah.
17:51 ayrnieu: yes, you can also ask what it means to factor a number. Reducing a factor from a non-prime gives you a new number -- that is, you're actually reducing the non-prime with the act.
17:51 rhickey: cat out of bag - Clojure on CLR: http://
17:51 jbondeson: "We don't like it cause it screws up our other pretty theories"
17:54 it was bound to happen. countdown until the next round of "you need a language spec"
17:54 clojurebot: svn rev 1286; [lazy] smarter ASeq and LazySeq isEmpty()
17:54 ayrnieu: jbondeson - glass is technically a liquid. But you can't drink it, you can't pour it into a container, it doesn't take the shape of its container to any extent; you can also do things to it that would make no sense given any other 'liquid'.
17:54 rhickey: Subversion command-line client, version 1.4.4.
17:55 jbondeson: rhickey: yeah, you're going to have a bit more manual merging.
17:56 Bracki: I give up on prime factorization for tonite.
17:59 Don't know how to create ISeq from: BigInteger
18:02 zargon_: ad full lazy seqs: I'm a bit worried about the proposed "next" semantics. For Java programmers this would definitely mean "next element" as with Java iterators
18:02 blbrown: ,paste
18:02 zargon_: I would even prefer typing "next-seq" ...
18:02 clojurebot: java.lang.Exception: Unable to resolve symbol: paste in this context
18:02 blbrown: ~paste
18:02 clojurebot: lisppaste8, url
18:02 lisppaste8: To use the lisppaste bot, visit http://
18:03 ayrnieu: zargon, do you want to forever type 'next-seq' so that people who've spent all of a day with the language will wonder WTH 'next-seq' means instead of wondering, with all the other unfamiliar parts in context, what 'next' means?
18:03 rhickey: zargon_: iterator next both gets next element and moves iterator, Clojure gives you next iterator
18:04 lisppaste8: blbrown pasted "Clojure...Im doing it wrong" at http://
18:05 blbrown: anybody have any code improvements for that. I basically just want to have a count of number times a token occurs
18:05 hiredman: hmm
18:05 I would use a line-seq
18:05 (doc line-seq)
18:06 clojurebot: Returns the lines of text from rdr as a lazy sequence of strings. rdr must implement java.io.BufferedReader.; arglists ([rdr])
18:06 hiredman: and just reduce over the line-seq
18:06 blbrown: hiredman, what about the 'map' part of it, that is the most important code
18:08 zargon_: rhickey: I really really appreciate your opinion, I just read the 63 posts on the mailing and thought "damn" rich is right on the "tail" proposal (not corresponding with first, "head" would be the right peer). But it would convey the right semantics I think ...
18:10 hiredman: blbrown: nested lets are kind of nasty and often unnesassary
18:10 rhickey: zargon_: I guess my feeling is a functional iterator like seq is so different from a stateful one like Iterator, there are bigger problems than the meaning of next - it could never be the same as Java's
18:10 blbrown: sigh
18:11 zargon_: rhickey: don't you think "next" is also tainted in colloquial sense?
18:11 hiredman: (doc zipmap)
18:11 clojurebot: Returns a map with the keys mapped to the corresponding vals.; arglists ([keys vals])
18:11 WizardofWestmarc: what about just using... frequencies I think it is? and then looking for the occurancies of your tokens within the map?
18:11 Bracki: What yields the last element of a list?
18:11 zargon_: "give me the next ONE"
18:12 blbrown: WizardofWestmarc, is that for me, that is what I need, where is frequencies
18:12 WizardofWestmarc: in clojure contrib, forget which lib
18:12 technomancy: some projects still using centralized version control perform merges in an external DVCS and then import them back into SVN... that's always an option if the merging gets hairy
18:12 hiredman: (map #(.group m %) (range 6))
18:12 technomancy: Emacs did this with Arch and CVS before git was around.
18:12 WizardofWestmarc: someone mentioned it recently but haven't had a chance to dig through the code for it
18:13 hiredman: (map #(keyword (.group m %)) (range 6))
18:13 WizardofWestmarc: and Bracki: only thing I can think of is (nth coll (- (count coll) 1))
18:13 Bracki: Or the largest?
18:14 WizardofWestmarc: largest in a list?
18:14 Bracki: yes
18:14 WizardofWestmarc: (reduce max coll)
18:14 technomancy: anyway, I'm in favour of merging the lazy branch as soon as possible
18:14 hiredman: WizardofWestmarc: apply
18:14 ,(apply max [ 34 2 291 0 53])
18:14 clojurebot: 291
18:15 WizardofWestmarc: ah ha
18:15 fair enough!
18:15 rhickey: so I just ran svn merge trunk lazy and got only Us and As, no diff popped up, and it builds!
18:15 I wonder if it did anything?
18:15 hiredman: hmmmm
18:15 WizardofWestmarc: look at a file that you know what it should look like
18:16 hiredman: btw, at least on that small a list reduce is faster then apply
18:16 hiredman: interesting
18:17 WizardofWestmarc: not sure if that holds up across larger collections
18:17 hiredman: ,(import 'java.util.Collections
18:17 clojurebot: EOF while reading
18:17 hiredman: ,(import 'java.util.Collections)
18:17 clojurebot: nil
18:17 hiredman: ,(import 'java.util.LinkedList)
18:17 clojurebot: nil
18:18 hiredman: ,(let [x (LinkedList. (range 10000)) _ (Collections/shuffle x)] (time apply max x))
18:18 clojurebot: java.lang.RuntimeException: java.lang.IllegalArgumentException: Wrong number of args passed to: core$time
18:18 WizardofWestmarc: also blbrown: lemme find the old post in the google group with a short/fast frequencies function
18:18 hiredman: ,(let [x (LinkedList. (range 10000)) _ (Collections/shuffle x)] (time (apply max x)))
18:18 clojurebot: 9999
18:18 "Elapsed time: 42.059 msecs"
18:19 hiredman: ,(let [x (LinkedList. (range 10000)) _ (Collections/shuffle x)] (time (reduce max x)))
18:19 clojurebot: 9999
18:19 "Elapsed time: 7.435 msecs"
18:19 hiredman: ouch
18:19 ~def max
18:19 heh
18:20 max uses reduce interally anyway
18:21 WizardofWestmarc: blbrown: http://
18:22 hiredman: true but that only matters if you feed it individual elements ;-)
18:24 hiredman: I do find the disparity odd because apply max and reduce max both use reduce
18:24 blbrown: WizardofWestmarc, gracias
18:25 WizardofWestmarc: blbrown: np, I needed that function a while back for stuff I'm currently working on so I happened to have it bookmarked in delicious ;-)
18:25 hiredman: I guess because it is (reduce max (max x y) more)
18:26 WizardofWestmarc: hiredman: hm, certainly possible. Either way it's a useful bit of info
18:26 hiredman: Yes.
18:27 if you supply the reduce you leave out the extra calls to max
18:27 rpg: back
18:30 blbrown: WizardofWestmarc, what datastructure is returned from that frequency call.
18:31 hiredman: a map
18:31 rhickey: hmmm.. that seemed to be backwards (i.e. lazy branch dominated), but when I switch to svn merge lazy trunk, I get only a few added files, no updates
18:32 WizardofWestmarc: btw best thing I learned from that frequencies function is the merge-with function
18:32 rhickey: hm, trying to think what could be wrong, but I almost exclusively use tortoise svn so I don't know the syntax for the command line version.
18:34 that and I'm anything but an svn wizard, I just spend a lot of time cleaning up other peoples' mistakes at work >_>
18:35 danlarkin: this is the cost of using svn
18:36 rhickey: I wish someone would just feed me the correct command line to try...
18:36 * rhickey knows nothing about SVN
18:37 hiredman: http://
18:38 that might help, step by step instructions
18:39 WizardofWestmarc: the worst part about pre-1.5, the fact you have to supply the revision # of the break
18:40 burkelibbey: So at the end of his latest blog post, chouser mentioned his system to easily switch between branches of clojure. I figured I'd share the piece of junk I hacked together to do the same thing: http://
18:41 WizardofWestmarc: Heading out, take care all and good luck on the merge rhickey
19:10 mrSpec: Hi
19:12 cooldude127: mrSpec: hey
19:12 ayrnieu: burkel, I have a clojure.jar symlink in my CLASSPATH , and I have a makefile. 'make lazy'. 'make trunk'.
20:08 pilkarn: is binary search the fastest way to locate a number in an array?
20:10 hiredman: pilkarn: http://
20:18 cooldude127: pilkarn: is your data already sorted?
20:31 ok looks like symbolic math is gonna be way easier with some good pattern matching
20:34 blbrown_: how can I set the return value with 'loop' Can I put anything after 'recur'?
20:34 hiredman: uh
20:34 Chouser: no, you need an alternate branch.
20:34 hiredman: no
20:34 blbrown_: nevermind
20:34 Chouser, yea
20:35 Chouser: and then you have to merge them. Ask Rich how. ;-)
20:35 hiredman: recur is (a loop) not a loop
21:11 matthew`: Does anyone have any thoughts on delivering Clojure applications to the desktop?
21:11 albino: build jar+bundle with jre == delivered java app?
21:19 matthew`: I'm really coming to Java through Clojure and don't have much of a feel for how widely used it is out there.
21:20 Are there many Java Swing apps running out there in the business world?
21:20 hiredman: because the jvm startup time, java is not used a lot in desktop apps
21:20 matthew`: Ok.
21:21 So it isn't a quality issue with the GUI then.
21:21 hiredman: mostly for long running tasks
21:21 cooldude127: matthew`: well, the gui isn't the greatest, but it works
21:21 matthew`: Thanks.
21:21 hiredman: and there are bindings for other gui frameworks
21:22 matthew`: I've heard of the QT4 bindings.
21:22 burkelibbey: ...pretty much every other GUI framework, really.
21:22 blbrown: matthew`, I like SWT
21:22 hiredman: QT :(
21:22 cooldude127: swt isn't too bad
21:23 burkelibbey: QT would be perfect if it weren't for the sketchy license :(
21:23 matthew`: ok.
21:24 blbrown: QT jvm bindings, do they exist? I am going with swt/eclipse ...millions of installs and great widgets.
21:24 hiredman: perfect is a strong word
21:24 burkelibbey: Yes, I heard of someone developing QT in Clojure a few months back. I'll try to dig up the link
21:24 cooldude127: blbrown: they're called QT jambi i think
21:24 burkelibbey: http://
21:25 hiredman: Lua_of_DK is pretty unrelenting about pushing a) emacs and b) Qt Jambi
21:25 matthew`: Thanks guys, sorry to start something and then leave. My swimming partners are hassling me. Thanks for the help and the links.
21:25 blbrown: I guess we have options. SWT, Swing, QT4
21:26 hiredman: and "anyone who picks something else is doing so for religious reasons"
21:26 Chouser: gtk/gnome
21:26 hiredman: Chouser: have you looked at gnome's java bindings?
21:26 Chouser: no, just saw they exist
21:26 hiredman: they, uh, :(
21:27 at least on freebsd
21:29 the documentation doesn't match the current class hierarchy
21:29 Chouser: for gtk??
21:29 hiredman: the documentation on the java gnome website
21:30 Chouser: ah.
21:30 hiredman: doesn't match what is actually in the java gnome source tree
21:30 classes have been moved around, etc
21:30 packages renamed
22:10 shoover: rhickey: still looking for that svn command?
22:26 if you're going to merge the lazy branch and be done with it, go to a clean up to date trunk working copy and run svn merge -r 1236:1286 http://
22:29 If you want to bring trunk changes into lazy and play with lazy some more, go to a clean, up to date lazy working copy and run svn merge -r 1236:1286 http://
22:30 eyeris: If I instantiate a HashMap in Java, I have to specify the key and value types and .get() and .put() enforce those types. That doesn't seem to be the case in Clojure. Could someone point me to documentation of the implications of this?
22:30 hiredman: eyeris: Generics are implemented as type erasure in java
22:31 Chouser: Before generics, the types of things put in Java collections was not enforced.
22:31 hiredman: http://
22:32 so as I understand it, generics are just a compiletime check
22:32 Chouser: and allow you to avoid casting things as you take them out of the collection
22:33 hiredman: "there is no way to tell at runtime which type parameter is used on an object. For example, when you examine an ArrayList at runtime, there is no general way to tell whether it was an ArrayList<Integer> or an ArrayList<Float>."
22:34 eyeris: Right, so how does Clojure know what methods are available?
22:34 Or is that a JVM operation, resulting in a runtime error?
22:35 hiredman: clojure uses reflection, unless you type hint
22:35 Chouser: Clojure does some type inference at compile time, which you can help along with type hints.
22:35 eyeris: Okay
22:36 Chouser: right, if that's not sufficient it will issue an optional warning and do the lookup at runtime.
22:36 eyeris: Last question: When dealing with generics in Clojure, this means that I can just completely ignore the type parameters and use the generic class as a raw type?
22:40 Chouser: yes
22:40 eyeris: Great. Thanks.
22:40 cooldude127: eyeris: although it so doesn't matter
22:40 eyeris: java has generics mostly to avoid a bunch of casting. clojure doesn't bother with that, so it doesn't really matter
22:41 for the record, you can use a generic type in java as a raw type, it behaves as if you just has Object as the generic parameter
22:41 that was crappy english on my part
22:41 eyeris: I see that now.
22:42 ozy`: generics are necessary for typesafe polymorphic collections
22:42 typesafe polymorphic other stuff as well, but mainly collections
22:42 cooldude127: ozy`: in clojure, we could give a damn about type-safety
22:42 ozy`: cooldude127: exactly
22:42 cooldude127: :)
22:49 it's sometimes fun to translate CL code to clojure, you really see how certain features clean things up
22:49 for example: maps being functions of their keys
22:49 gnuvince_: Hell yeah
22:49 and having literal syntax for maps
22:49 cooldude127: yes also awesome
22:50 gnuvince_: I use them as much as I use them in Python or JavaScript
22:50 cooldude127: i forget that's not how CL works
23:12 what's the closest thing we have in clojure to this CL function: http://
23:13 which btw, i had no idea existed until now
23:15 pilkarn: cooldude127: yes i find clojure to be sooo much cleaner than common lisp.
23:16 hiredman: cooldude127: I think you'll have to roll your own
23:16 cooldude127: BOOO
23:16 :(
23:17 hiredman: ,clojure.zip/seq-zip
23:17 clojurebot: #<zip$seq_zip__5928 clojure.zip$seq_zip__5928@171120a>
23:17 hiredman: I think it would be fairly easy with a zippero n a seq
23:17 durka42: (let [tree ["one" "two" ["three" "four"]] reps {"one" 1 "three" 3} doit (fn doit [x] (if (coll? x) (map doit x) (get reps x x)))] (map doit tree))
23:17 ,(let [tree ["one" "two" ["three" "four"]] reps {"one" 1 "three" 3} doit (fn doit [x] (if (coll? x) (map doit x) (get reps x x)))] (map doit tree))
23:17 clojurebot: (1 "two" (3 "four"))
23:18 * durka42 does not grok zippers
23:19 durka42: ~zippers
23:19 clojurebot: excusez-moi
23:19 durka42: wasn't there a good link on the haskell behind them?
23:19 hiredman: ~google haskell functional zippers
23:19 clojurebot: First, out of 1950 results is:
23:19 Haskell/Zippers - Wikibooks, collection of open-content textbooks
23:19 http://
23:19 hiredman: the zip.clj code is pretty clear
23:19 durka42: oh man the theseus example
23:20 i remember reading this when i was attempting to learn haskell
23:25 hiredman: http://
23:33 lisppaste8: url?
23:33 lisppaste8: To use the lisppaste bot, visit http://
23:35 hiredman pasted "sublis sort of, using transform" at http://
23:43 blbrown: hmm, thinking about buying those clojure t-shirts
23:44 durka42: clojure t-shirts?
23:44 blbrown: http://
23:44 durka42: heh
23:48 Chouser: blbrown: you should. I've currently got the keys to that account, but since the ideas are mostly not my own I've already said I'll give the proceeds (if any) over to Rich.
23:49 blbrown: wonder why the black one is so expensive. I wanted to get two
23:49 Chouser: you can customize them, pick the shirt that you want.
23:50 doesn't mean there's a cheaper one, through. :-/
23:50 blbrown: ooo, nice website
23:51 Chouser: So far we've sold 7, so Zazzle owes Rich almost $20.
23:51 Pretty soon he could by that new Clojure book.
23:51 buy
23:55 blbrown: Chouser, I just bought 2
23:55 Chouser: blbrown: great, thanks!
23:55 which did you get?
23:56 blbrown: I got the one with 'state you are doing it wrong'
23:56 Chouser: ooh, I should get one before the lisp conference in Boston.
23:56 something provocative for all the CLers.
23:56 blbrown: hehe
23:56 Chouser: lisp is not dead...
23:57 hiredman: heh
23:58 durka42: might be preaching the choir with that one
23:58 danlarkin: haha oh boy, I watch catching up on the conversation and I thought you said "So far we've sold 7200..." and my jaw dropped
23:58 Chouser: man, how embarrassing would it be to get beat up at a LISP conference.
23:58 heh
23:58 hiredman: imagine getting a fat lip
23:58 lipth
23:58 lithp
23:58 blbrown: this is the only other programming shirt I have: http://
23:59 Chouser: oh, that's orders not shirts. up to 8 now.
23:59 blbrown: hehe
23:59 Chouser: nice


text:
Our Company
Empyrean Hair Extensions carries only 100% RAW TRUE VIRGIN human hair collected from around the world. It is then shipped to our own factory where it is assembled and packaged. This is how we are able to provide a product with the strictest quality standards for an unbeatable price. Our RAW VIRGIN human hair is completely natural and no chemical processes are used. We have our own team of hair collectors that painstakingly hand pick only the highest quality raw materials. We guarantee that every single strand is 100% Human in origin and no substitutes are used to cut costs and lower prices.
Our hair comes directly from the donors.
All of our hair originates from the single person to ensure that the entire bundle is the same in texture, feel, and look. It is in the same condition that it was when it was still growing on the donor's own head. This allows the extensions to have a PERFECT NATURAL BLENDING with your own hair, especially when your own hair starts to grow out after a few months. All of our cuticles are "Live" and they are all arranged in the same direction preventing tangling, kinking, shedding, and all the normal problems that are usually found in hair extensions. The cuticles are the hair's natural protection and are essential in maintaining the integrity of the hair structure.

subset: commoncrawl


text:
Tue, 26 December 2017
BJJ brown belt & co-host of Combat Docket Radio, Kurt Chase-Patrick joins Ken on this episode. Together, they recap the recent UFC on Fox 26 card & also discuss the upcoming UFC 219 main event of Holy Holm versus Cris 'Cyborg' Justino.
Direct download: MMA_Dude_Bro_-_Episode_153__UFC_Winnipeg_Recap.mp3
Category: -- posted at: 10:19pm EST
Thu, 14 December 2017
On Friday, December 15, Titan Fighting Championship closes out 2017 with it's return to the Xtreme Action Park, in Ft. Lauderdale, FL, for Titan FC 47. The card is headlined by a Featherweight championship match between Luis Gomez & Sodiq Yusuff.
Direct download: MMA_Dude_Bro_-_Episode_152__Titan_FC_47_interviews.mp3
Category: -- posted at: 11:07pm EST
Thu, 7 December 2017
Schwan Humes returns to recap UFC 218, the TUF 26 Finale & Bellator 189.
Direct download: MMA_Dude_Bro_-_Episode_151_UFC_218_Recap_with_Schwan_Humes.mp3
Category: -- posted at: 2:39am EST
Tue, 28 November 2017
Former Invicta FC standout Amber Leibrock is poised to make her debut on MMA's big stage, as she battles UFC vet Alexis Dufresne, at this weekend's Bellator 189.
Direct download: MMA_Dude_Bro_-_Episode_150_with_guest_Amber_Leibrock.mp3
Category: -- posted at: 7:11pm EST
Wed, 22 November 2017
This episode, Ken welcomes Dave Madden from the website norcalmixedmartialarts.com to look back at UFC Fight Night Sydney card. Dave relentlessly covers combat sporting events, big & small, across the Northern region of California.
Direct download: MMA_Dude_Bro_-_Episode_149_UFC_Sydney_recap_with_Dave_Madden.mp3
Category: -- posted at: 12:24am EST
Sat, 18 November 2017
Dawna Gonzales is a BJJ purple belt under Master Eddie Bravo. She is also the co-founder of 10th Planet Women's Self Defense & the creative force behind the jiujitsu culture collective known as 'Mat Therapy'.
Direct download: MMA_Dude_Bro_-_Episode_148_with_guest_Dawna_Gonzales.mp3
Category: -- posted at: 10:23am EST
Tue, 14 November 2017
This episode, Ken welcomes the creative force behind the MMA Mad podcast (& companion website) Nick Rizner to recap UFC Fight Night Norfolk.
Direct download: MMA_Dude_Bro_-_Episode_147_UFC_Norfolk_recap_with_Nick_Rinzer.mp3
Category:general -- posted at: 11:22pm EST
Mon, 6 November 2017
This episode, Ken welcomes the phenomenal Schwan Humes to recap the 3 world title changes from UFC 217. Schwan is an MMA analyst & scouting consultant who has helped develop strategies for fighters like King Mo, Claudia Gadelha & Oluwale Bamgbose.
Direct download: MMA_Dude_Bro_-_Episode_146_UFC_217_recap_with_Schwan_Humes.mp3
Category: -- posted at: 9:50pm EST
Tue, 31 October 2017
Richard 'The Black Eagle' Odoms is a VERY busy man. The inaugural Legacy Fighting Alliance Heavyweight Champion divides his time outside the cage between being a gym owner, martial arts coach, husband, father and tactics instructor at the San Antonio Police Academy.
Direct download: MMA_Dude_Bro_-_Episode_145_with_guest_Richard_Odoms.mp3
Category: -- posted at: 10:31pm EST
Fri, 22 September 2017
BJJ black belt (& instructor at the world-famous American Kickboxing Academy) Clint Cronin grew up an avid fan of professional wrestling, comic books & computers. Little did he know back then how those interests would parlay themselves into an adult life that has taken him around the world, experiencing people & places that most would only see in a movie. During our conversation, Clint shares with us: how he feels combat sports (jiu jitsu in particular) represent the 'last honest jobs', the reason HE feels AKA has become a scapegoat in the MMA media for alleged dangerous training practices, how achieving the rank of black belt served as merely a starting point rather than a destination in his jiu jitsu journey, how Los Angeles has gradually replaced the Bay Area as California's MMA hub … and much, much more.
Direct download: MMA_Dude_Bro_-_Episode_144_with_guest_Clint_Cronin.mp3
Category:general -- posted at: 12:18am EST
Mon, 4 September 2017
On June 24, St. Louis-area MMA veteran Zach 'The Altar Boy' Freeman shocked the combat sports world by defeating highly touted prospect Aaron Pico in Madison Square Garden…on what was Pico's pro MMA debut at the Bellator NYC PPV. During our conversation, Zach shares with us: how training at different gyms while on out-of-town business trips has been valuable to his bjj game, the exact strategic components that led to his victory over Aaron Pico, the satisfaction of gaining attention from media who wanted nothing to do with him before that fight, how his wife recently caught the competitive grappling bug...and much more.
Direct download: MMA_Dude_Bro_-_Episode_143_with_guest_Zach_Freeman.mp3
Category: -- posted at: 4:00pm EST
Sat, 5 August 2017
Dave & Ken look back at UFC 214. Hashtag, MMA Dude Bro!
Direct download: MMA_Dude_Bro_-_Episode_142_UFC_214_RECAP.mp3
Category: -- posted at: 12:04am EST
Thu, 27 July 2017
BJJ Purple belt Ryan Ford is the host of arguably the most popular & influential online show related to the grappling arts, The Grappling Central podcast. Over the course of 2 years, his show has featured interviews with names such as Dan Gable, Dean Lister, Ricardo Almeida, Eddie Bravo, Randy Couture & many more…
Direct download: MMA_Dude_Bro_-_Episode_141_with_guest_Ryan_Ford.mp3
Category:Sports -- posted at: 11:31pm EST
Thu, 20 July 2017
Serena 'The Southpaw Outlaw' DeJesus is the current women's bantamweight amateur champion of the Las Vegas promotion Tuf-N-Uff. She trains out of Syndicate MMA along side such names as Jamie Moyle, Jessica-Rose Clark & Roxanne Modaferri. During our conversation, Serena shares with us: how her mom gave her some nervous moments the day they both met Cyborg Justino, how she went from being an online fan to real-life BFF with teammate Roxanne Modaferri, her desire to be a role model for others living with the challenges that come with being autistic ….and more.
Direct download: MMA_Dude_Bro_-_Episode_140_with_guest_Serena_DeJesus.mp3
Category:Sports -- posted at: 5:17pm EST
Tue, 11 July 2017
MMA veteran & current Bellator middleweight, John Salter faces Kendall 'Da Spyda' Grove this weekend in Thackerville, OK as part of Bellator 181.
Direct download: MMA_Dude_Bro_-_Episode_139_with_guests_John_Salter__Mike_Sawyer.mp3
Category:Sports -- posted at: 11:05pm EST
Mon, 3 July 2017
This weekend in Las Vegas, TUF Nations winner & Pert Plus® spokesman, Elias Theodorou takes on fellow TUF alum Brad Tavares as part of the Ultimate Fighter season 25 finale. During our conversation, Elias shares with us: how he's been able to parlay his camera-ready looks into a wide array of entrepreneurial opportunities outside the cage, how he physically measures up against his upcoming opponent, how he's managed to convince his parents that he (in fact) has a 'real job', how he handles the admiration he receives from female fans & fighters alike….and more.
PLUS: Dave & Ken talk UFC OKC, New Japan Pro Wrestling, TUF 25, the rebirth of Felice Herrig and generally travel down the rabbit hole of combat sports related potpourri. Hashtag, MMA Dude Bro!
Direct download: MMA_Dude_Bro_-_Episode_138_with_guest_Elias_Theodorou.mp3
Category:Sports -- posted at: 9:37pm EST
Tue, 27 June 2017
Ken & new co-host Dave Lee recap Bellator 180/Bellator NYC. In doing so, they meander into a wide range of topics including (but not limited to): Cody Rhodes' winning the Ring of Honor world title, why TUF 25 may be one of the best seasons in recent memory, whether the new Netflix series 'Glow' is any good, surviving the Rochester stop of the Dancing with the Stars road tour, the greatness of Mauro Ranallo & MORE. Hashtag, MMA Dude Bro!
Direct download: MMA_Dude_Bro_-_Episode_137_Bellator_NYC_recap.mp3
Category:Sports -- posted at: 9:53pm EST
Wed, 17 May 2017
The UFC's John Gooden, along with former world title challenger Dan 'The Outlaw' Hardy, is a part of one of the most talented & ridiculously underrated broadcast teams in MMA...serving as both hosts to many of the company's international fight cards, as well as programs like 'Inside The Octagon'. During our conversation, John shares with us: why he's put aside concerns about everyone liking him, why the sport of MMA has yet to be fully embraced by the mainstream UK, how his conversion to veganism shook up his personal life, how his years of training in various combat sports has influenced his broadcasting work & more...
Direct download: MMA_Dude_Bro_-_Episode_136_with_guest_John_Gooden.mp3
Category:Sports -- posted at: 10:43pm EST
Wed, 26 April 2017
Coming off an impressive victory in one of the most spectacular fights in WMMA this year, St. Louis police officer Ashley 'Smashley' Cummins has put the atomweight division of Invicta FC officially on notice. During our conversation, Ashley discusses: the competitive hardships she faced en route to finding a new home at 105 pounds, the difference between what the media chooses to cover about police work & what actually happens day to day, how the community of Ferguson has gradually changed for the better since the days of the highly publicized riots, the injury that almost ended her fighting career, her memories of a fallen co-worker…& more.
Direct download: MMA_Dude_Bro_-_Episode_135_with_guest_Ashley_Cummins.mp3
Category:Sports -- posted at: 9:22pm EST
Thu, 13 April 2017
Lead MMA writer for Bleacher Report.com & co-host of the Co-Main Event podcast, Chad Dundas released his debut novel, the historical fiction piece, 'Champion of the World' to rave critical reviews in 2016. During our conversation, Chad discusses: how his hometown of Missoula serves as the arts & cultural haven of Western Montana, how growing up as a pro wrestling fan influenced his eventual interest in MMA, how some of the real-life athletes from MMA informed the development of his book's main characters, the continuing efforts to establish an official MMA Writers Association & more…
PLUS, Ken welcomes Mike Sawyer from Tough Talk MMA & Wrestling Observer.com. Mike shares with us his own unique (front-row media credentialed) perspective on UFC 210 from Buffalo. They also discuss the controversy surrounding Mauro Ranallo's current status with WWE & the upcoming Bellator debut of Mike's old friend Wanderlei Silva. Hashtag, MMA Dude Bro!
Direct download: MMA_Dude_Bro_-_Episode_134_with_guests_Chad_Dundas__Mike_Sawyer.mp3
Category:Sports -- posted at: 9:32pm EST
Wed, 5 April 2017
Rochester, NY native & former Titan FC featherweight champion, Desmond 'The Predator' Green makes his long-awaited octagon debut at this weekend's UFC 210 in Buffalo. During our conversation, Desmond discusses: splitting his training time between Henri Hooft's Combat Club & the Blackzillians, how he picks his walkout music, his choice for favorite post-fight guilty pleasure food, the importance of tape review & more.
Direct download: MMA_Dude_Bro_-_Episode_133_with_guest_Desmond_Green.mp3
Category:Sports -- posted at: 9:01pm EST
Tue, 28 March 2017
A wrestler from the age of 7, UFC welterweight Colby 'Chaos' Covington went on to become a NCAA Division I All-American & a two-time Pac-10 conference champion. During our conversation, Colby discusses with us: why he feels he should be the one to welcome former 155 lb. champ Rafael Dos Anjos to welterweight, what fighters on the UFC roster he feels have been ducking him, why he felt the need to set Joe Rogan straight after his win at UFC 202, his friendship with teammate Jorge Masvidal, his experience with both PRP & Ozone injection therapies for his injured knee, giving names like Robbie Lawler & Tyron Woodley all they can handle in sparring & more.
Direct download: MMA_Dude_Bro_-_Episode_132_with_guest_Colby_Covington.mp3
Category:Sports -- posted at: 8:28pm EST
Mon, 13 March 2017
This episode, Frank and Ken break down the main card of UFC Fight Night Fortaleza (Gastelum vs. Vitor). The winners, the losers, the inappropriate twerkers, ALL of it.
Direct download: MMA_Dude_Bro_-_Episode_131_with_guest_Ray_Borg.mp3
Category:Sports -- posted at: 9:55pm EST
Wed, 8 March 2017
This episode, Frank and Ken try to make sense of the disappointing Woodley - Thompson main event from UFC 209, and the demise of the more anticipated co-main between El Cucuy and Khabib. They also recap the rest of PPV, as well as the main card of Bellator 174.
Direct download: MMA_Dude_Bro_-_Episode_130_with_guest_Justin_Wren.mp3
Category:Sports -- posted at: 10:43pm EST
Thu, 23 February 2017
Bellator MMA lightweight, Adam 'The Bomb' Piccolotti was originally scheduled to face Brent Primus on the main card of Bellator 172, until a late occurring injury forced him out of the event. Fortunately, we were able to catch up with Adam before this injury and during our conversation we touched on a variety of subjects including: the reality involving reports of dangerous training practices at American Kickboxing Academy, the musicality of martial arts, the one man he would absolutely never fight, the grueling education of grappling with teammate Khabib Nurmagomedov and his staunch advocacy for rights of rescue dogs.
Direct download: MMA_Dude_Bro_-_Episode_129_with_guest_Adam_Piccolotti.mp3
Category:Sports -- posted at: 9:02pm EST
Mon, 30 January 2017
Direct download: MMA_Dude_Bro_-_Episode_128_with_guest_Shane_Fazen.mp3
Category:Sports -- posted at: 12:40am EST
Thu, 19 January 2017
Since his installation as Bellator MMA's play-by-play commentator, accomplished mainstream sportscaster Sean Grande has endured a full immersion into the enthralling and often quirky universe of professional mixed martial arts. During our conversation, Sean spoke candidly with us on a number of topics including: the backlash he received from MMA fans regarding his replacing of Sean Wheelock, the irrefutable connection between MMA & pro wrestling, the UFC broadcast habit that he feels 'can't sound any dumber' & MUCH MORE…
Direct download: MMA_Dude_Bro_-_Episode_127_with_guest_Sean_Grande.mp3
Category:Sports -- posted at: 7:45pm EST


text:
Incoming: Court House quick Farran Lamb launches into his delivery stride last season as all districts in the region pad up for the first round of cricket this weekend.
Gunnedah's cricketers are gearing up for round one of the 2016-17 season this Saturday, with Albion contesting the Kookaburras at Wolseley Park while Court House contests Mornington at Kitchener Park.
The Albion and Kookaburras second graders square off at McAndrew Park while the other second grade match is at Longmuir Oval, and the third graders start their season the following weekend.
This Saturday will be the first of three consecutive Saturdays involving one-day matches before the season involves a mixture of one-day and two-day fixtures.
One interesting element will be the inclusion of several Gunnedah cricketing stalwarts as umpires, with Kevin Wicks, Kevin Miller, Russell Weston and Stan Beasleyto officiate in first grade.
ALBION v KOOKABURRAS
Albion will seek to start its first gradedefence on a strong note while the Kookaburras should be equally determined to show that they will be a force to be reckoned with.
The vastly experienced Shane Reardon andall-rounder Cameron Milne are among the continuing players in the Kookaburras line-up, although the team's depth will be tested this Saturday due to a few absentees.
Leading bowler Troy Sands will be missing due to a wedding commitment in Perth, and Paddy Paul will also be away while Ian Gardiner may also be absent.
Albion has indicated that its player numbers are strong, with James and Andy Mack sure to again be key players while opponents will be wary of Ryan Cooper's talents.
COURT HOUSE v MORNINGTON
After having a great 2015-16 season before losing the decider, Court House will leave that in the past and focus on a strong start to its 2016-17 campaign.
Talented all-rounder Sam Doubleday and strike bowler Farran Lamb will be just two players keen to help Court House regain its winning ways.
Mornington meanwhile is a bit of an unknown quantity, with Peter Hughes away this weekend while Jamie Mitchell has joined the Tamworth competition.
This story Administrator ready to work first appeared on 苏州美甲培训.


text:
We drove overnight from Pittsburgh to get here, and TJ is the real MVP for towing the RV through NYC. I was following behind him with the girls and we were on the phone with each other when we passed through at 2am, just laughing (and slightly freaking out) at the ridiculousness of bringing our RV over the George Washington Bridge.
It's so beautiful here - we have two little beaches less than ten minutes from us, and the girls have been enjoying collecting pretty shells and sea glass. We bought a membership to the cutest family farm down the street that has their favorite animals to feed, a playground, cider donuts, ice cream and a winery. TJ's working on a military base and will have most weekends off, so we're looking forward to exploring this area as much as possible with him on the weekends while we're lucky enough to be living in this nautical and nostalgia-inducing seaside village for the summer.


text:
From the Providence Warwick Convention & Visitors Bureau comes the news of the winter 2014 Providence Restaurant Week. Restaurant Week has grown to Restaurant Weeks, running for two full weeks beginning Sunday, January 5. All the information, including the complete list of participating restaurants can be found . . .
March of Dimes Rhode Island 11th Annual Signature Chefs AuctionPublished on :
In what has become the best annual culinary event in Rhode Island, on Thursday, September 20th, twenty-two of Rhode Island's best chefs assembled at Belle Mer in Newport for the 11th Annual March of Dimes Rhode Island Signature Chefs Auction. This year's honoree was Jonathan Cambra of the Boat House in Tiverton. A proud husband and father [….]
March of Dimes Rhode Island 10th Annual Signature Chefs AuctionPublished on :
In a show of support for Rhode Island's tiniest citizens, more than 260 guests turned out for the March of Dimes Rhode Island 10th Annual Signature Chefs Auction event held recently at Belle Mer on Goat Island in Newport. The event—which featured the culinary talents of 24 of the state's leading chefs, and restaurant, theater, accommodation [….]
News Bites: Centro Adds Late Night and Sunday Brunch, Fleming's Month of Discovery, Newport Mansions Wine & Food FestivalPublished on :
Eat Drink RI recently received an email newsletter and two press releases that cover a whole range of information that would be of interest to diners and wine lovers in Providence and Newport. We're going to reprint this information below. Centro Adds Late Night and Sunday Brunch Two New Centro Features! Great Menu for Late [….]


text:
Every year we celebrate Trollbeads Day all over the world. It is a day where people come together and share their stories and their affection for Trollbeads.
We are exited to introduce Wings of Amber. These unique stunning beads come with either one or two Sterling Silver insects resting their wings on the golden amber.
Treasure the beauty of nature with the Wings of Amber beads.


text:
Robyn is a Licensed Professional Counselor who received her Master's degree in Counseling Psychology from Chestnut Hill College in Philadelphia, PA. She completed her Bachelor of Science degree with a major in Social Work from Indiana Wesleyan University. Robyn has over 20 years experience in the Human Services field where she worked with children, adolescents, families and couples in a variety of settings.
Life is hard. No one is immune to stress, fluctuating emotions, and various forms of difficult changes throughout their life. Taking the first step always requires bravery! You are not alone. I consider it a privilege to walk alongside you in your journey. No two stories are alike. We would aim to create a partnership wherein we would work to meet your personal goals by discovering and utilizing your strengths, engaging in problem solving, and implementing new strategies for change and growth. I would provide a safe, nonjudgmental, and caring environment where you could gain the support and insight you need to grow in self-awareness and develop positive coping skills.
Special Interests:
· Family Counseling
· Infertility
· Women's Issues
· Adolescent females 12+
· Mood and Anxiety Issues
· Adjustment issues
· Lifespan Adjustment
· Adoption/foster care
· Cancer


text:
Dr. Joe Oliver
Cosmetic Dentist
GDC No. 193506
Founder of The Welbeck Clinic, Dr. Joe Oliver is an early cosmetic dentistry pioneer and now our newest associate at Holford Partners Curaden Dental Clinic in Marylebone, New Bond Street. Specialising in smile makeovers, patients benefit from our unique 'Prevention First' approach and highly experienced clinical support team.
Dr. Oliver has fitted in excess of 30,000 veneers over his 28-year career. His genuinely transforming treatments have been widely featured in the UK national press including The Sunday Times, The Daily Mail, The London Evening Standard, articles in magazines Marie Claire, Vogue, Brides, FHM, Men's Health, Closer and OK as well as on television on GM-TV, This Morning and Channel 4's Ten Years Younger.
As founder of the UK study body, Cosmetic Dental Seminars and membership of the American Academy of Cosmetic Dentistry, Dr. Joe Oliver promotes high ethical standards and contributes to the advancement of cosmetic dentistry internationally.
We welcome Dr. Oliver to the Holford Partners Curaden dental practice and look forward to welcoming his patients at the clinic too. Dr. Oliver is now registering new patients and offering introductory discounted prices on veneers, crowns, bridges, porcelain inlays and tooth whitening. Why not find out more with a consult?
Visit Dr. Joe Oliver's official website: www.joeoliverdentist.com


text:
Showing 1-1 of 1
By: Bryan, C.D.B.
Price: $30.00
Publisher: Harry N. Abrams: 1979
Edition: First Edition
Seller ID: 23019
ISBN: 081090666x
Condition: Very Good+ in Very Good+ dust jacket
Massive Tome in brown covered boards with scattered foxing. Clean and tightly bound, this will require additional carriage. View more info


text:
Cabinet Design
Cabinet Design
Supplying homeowners throughout Northeast Florida with beautiful and distinctive kitchen and bathroom cabinets is our specialty at Kitchen Design Gallery. We appreciate that the cabinets that you choose will be the focal point that shapes your interior design for these spaces, and our goal is to provide cabinet design and installation services that will provide you with high quality and affordable solutions.
Kitchen Design Gallery is a Jacksonville, FL cabinet distributor for the following prominent brands:
DuraSupreme allows homeowners to have high levels of control and creativity when it comes to choosing their ideal kitchen cabinetry or bathroom cabinetry. Not only do they provide durable and beautiful wooden cabinets, but they also allow clients to create unique cabinet designs by selecting the cabinet door style, wood species, and wood finish that best suits the kitchen or bathroom being constructed or remodeled.
Executive Cabinetry
Executive Cabinetry is known for making custom kitchen and bathroom cabinets available at very affordable prices. This manufacturer provides hundreds of cabinet door styles, and cabinetry made from wood, MDF, engineered veneers, among other materials. With a commitment to green design and improved indoor air quality, the custom cabinets provided by Executive Cabinetry are manufactured with no added formaldehyde.
Kitchen Design Gallery is a proud distributor of Merillat kitchen and bathroom cabinetry in Jacksonville and Northeast, FL. Merillat has been creating innovative and stylish cabinets since 1946, with a commitment to adapting to the latest design trends, and increasing functionality, through the use of continual consumer research.
Koch Cabinets
Koch Cabinets provides semi-custom kitchen cabinets at affordably price points that can typically accommodate any kitchen build or remodel. They provide durable and sophisticated cabinetry, made from numerous wood species, in classic or modern design styles. Koch also has a strong commitment to environmentally friendly manufacturing and delivery practices.
Sorrento custom cabinetry utilizes the finest kiln-dried hardwoods to create a wide selection of kitchen and bathroom cabinet door styles. Finishes are then applied to the cabinets, onsite, by skilled artisans. Sorrento cabinets are available in many different modern and classical styles, at a large range of price points.
Contact Kitchen Design Gallery to Learn More About Your Cabinetry Options
If you are ready to have beautiful new cabinets installed to your new or remodeled kitchen or bathroom, contact Kitchen Design Gallery to schedule an appointment. We will measure your space and help you create a cabinet design that fits your lifestyle and budget.


text:
*This post may contain affiliate links to products we recommend and happily use.*
Printable ~ Instant Download
Do you struggle with the "what's for dinner" question? Have you tried to meal planning and failed?
The Weekly Meal Planner is here to help.
This is the perfect starting point in your meal planning journey.
Having a meal plan is a must if you are wanting to stress less about what's for dinner and spend more time doing what you love.
Using a simple meal plan like this will help you plan your meals, determine the groceries you need and control your expenses.
If you are looking to plan your weekly meals, save time and money a simple and easy to use weekly meal plan is a must.


text:
You are currently browsing the tag archive for the 'back to school' tag.
Tell me and I'll forget.
Show me, and I may not remember.
Involve me, and I'll understand.
I adore this Native American quote because it shows how important it is for education to be involving and fun. To follow this in action, visit Jennie of A Teacher's Reflections. She is a superb teacher who should be cloned throughout the world and I've told her so!
Take care and keep laughing!
And this is what I came up with for Back to School. Click on the mousepad to see a larger view and read!
Take care and keep laughing!