2009-03-28
| 01:18 | slashus2 | Raynes: Looks pretty bad. |
| 01:20 | slashus2 | I don't see any tornado reports in Alabama as of 1512 UTC. |
| 01:20 | cmvkk_ | Here in Kansas we're getting snow and sleet. |
| 01:21 | cmvkk_ | oh well. if i can't go anywhere that just means i can work on coding all day |
| 01:23 | Raynes | slashus2: The severe weather is rather limited to south Alabama tonight. Around 5AM is when the real shit starts. |
| 01:24 | slashus2 | Raynes: According to the storm prediction center, the greatest tornado risk is in Louisiana and Mississippi. |
| 01:25 | slashus2 | Raynes: http://www.spc.noaa.gov/products/outlook/day1otlk.html |
| 01:26 | slashus2 | valid through another 6 hours |
| 01:26 | Raynes | slashus2: I've already read everything. The severe weather risk for day 1 which is part of tonight is over there. Day 2 Saturday is the issue. |
| 01:27 | Raynes | They should update the Day 1 outlook at 1. |
| 01:27 | Raynes | 1AM central time at least. |
| 01:27 | Raynes | I'm not sleeping tonight. |
| 01:27 | cmvkk_ | i'm amazed to find that i don't understand the finer points of whether i'm holding onto the head of a lazy seq or not. |
| 01:29 | slashus2 | Raynes: I always find tracking storms to be fun. |
| 01:30 | Raynes | slashus2: Me too. Until they are coming towards me, then it gets a little less exciting. |
| 01:30 | slashus2 | That is the thrill ride. |
| 01:31 | slashus2 | Going outside when you are under a tornado warning at night trying to spot a wall cloud. |
| 01:31 | cmvkk_ | slashus2 is the kind of person who drives a pickup into a corn field to release a bunch of tiny robots into a tornado |
| 01:31 | Raynes | slashus2: That's called being stupid. |
| 01:32 | Raynes | At night, it's impossible to see anything. You can hardly ever see anything during the day in Alabama. Tornadoes are /always/ wrapped in rain. |
| 01:32 | slashus2 | It wasn't raining outside. |
| 01:33 | slashus2 | I wouldn't call it being stupid. Being curious. As long as one is knowledgeable about the behavior of storms. |
| 01:34 | Raynes | It's stupid if you don't know which direction you have to be in too see a tornado. |
| 01:35 | Raynes | to* |
| 01:35 | slashus2 | I was paying close attention to the rotation of the storm. |
| 01:35 | slashus2 | This is getting way off topic. |
| 01:37 | Raynes | Did you know that the tornado was not moving towards you at the time? |
| 01:37 | Raynes | We should totally make a channel #Weather |
| 01:37 | slashus2 | Yes, the rotation was to the north. |
| 01:38 | Raynes | I wish they would update the day 1 outlook. |
| 01:39 | slashus2 | You are correct that it was issued 5 hours ago. |
| 01:39 | slashus2 | pretty outdated. |
| 01:39 | Raynes | It should be updated within the next 30 minutes. |
| 01:40 | Raynes | Virtually the entire state is under 45% risk for day 2. It will be upgraded to a moderate or high risk I'm sure. |
| 01:44 | Raynes | For the books, I live in northwest central Alabama. To be specific, extreme northwest Walker county. |
| 01:48 | Raynes | It's been updated. |
| 01:49 | slashus2 | Raynes: Looks like NW Alabama may miss the brunt of the tornado onslaught. |
| 01:50 | Raynes | slashus2: I hope so. |
| 01:51 | Raynes | Just have to see what happens :\ |
| 02:03 | Raynes | I don't trust the SPC. |
| 02:03 | slashus2 | hehe |
| 02:14 | Raynes | duck1123: Why would you ever want to learn lojban? |
| 02:18 | cmvkk_ | lojban is like the haskell of conlangs. it's totally pure, but nobody ever uses it for anything real |
| 02:18 | clojurebot | Yo dawg, I heard you like Haskell, so I put a lazy thunk inside a lazy thunk so you don't have to compute while you compute. |
| 02:19 | cmvkk_ | hello clojurebot |
| 02:21 | Raynes | cmvkk_: Haskell is awesome, but Clojure is awesomer from a "Holy shit, a functional language someone might actually use." point of view. |
| 02:22 | Raynes | clojurebot: 'Sup hiredman. |
| 02:22 | clojurebot | Titim gan �ir� ort. |
| 02:22 | Raynes | <3 You're still my hero. |
| 02:25 | cmvkk_ | I keep opening stuff in vim then typing "C-x C-s" to try and save it, which causes vim to freeze up instead. |
| 02:25 | Raynes | What language is that :( |
| 02:25 | Raynes | I don't speak Clojurenerd quite as well as the others here just yet. |
| 02:26 | cmvkk_ | what? |
| 02:27 | Raynes | cmvkk_: (= vim crap) true |
| 02:28 | cmvkk_ | i like it about as well as emacs to be honest. i'm not a 'power user' by any means |
| 02:28 | cmvkk_ | between it and anything else, it's the easiest editor to just quick open a file in the terminal in. |
| 02:29 | Raynes | I'm an Enclojure user. I don't judge. |
| 02:32 | Raynes | clojurebot: May you fall without rising. |
| 02:32 | clojurebot | I don't understand. |
| 02:32 | Raynes | Neither to I. |
| 02:32 | Raynes | :| |
| 02:38 | Raynes | Did someone actually make a "Clojure vs Scala" thread. |
| 02:38 | Raynes | Haven't we had enough of those. :\ |
| 02:40 | cmvkk_ | now now, it's an important flamewar that we need to practice having over and over again, so that we're good at it once both languages get popular. |
| 02:43 | brennanc_ | I was trying to explain the advantages of functional programming to a coworker (PHP guy). It was like trying to teach a fish what air is. |
| 02:44 | cmvkk_ | brennanc_: the blub paradox? |
| 02:44 | brennanc_ | is that something like the lamer it is the more they swear by it? |
| 02:46 | cmvkk_ | it basically says people won't understand the features of another language if their language doesn't have those features, |
| 02:46 | Raynes | brennanc_: Fish breathe too :( |
| 02:46 | cmvkk_ | or something like that... |
| 02:53 | hiredman | have you seen php's answer to lambda? |
| 02:54 | hiredman | it creates a function with random name, and returns that name as a string |
| 02:54 | Raynes | ... |
| 02:55 | cmvkk_ | if it works it works I guess |
| 02:56 | brennanc_ | I saw something where they were proposing lambda syntax. The syntax for it looked really "noisy" |
| 02:57 | hiredman | almost makes me want to finish my lisp.php |
| 02:57 | hiredman | I think the only thing left is lexical and dynamic bindings |
| 03:01 | Raynes | hiredman: Touch me so some of your knowledge may rub off on me. |
| 03:01 | brennanc_ | are there any tutorials on how to get emacs working with clojure support? |
| 03:02 | brennanc_ | I'm using textmate but it's not indenting things correctly |
| 03:02 | hiredman | I would say something like "I am but a man" but that may be pompous |
| 03:02 | Raynes | brennanc_: There are more than I can count. |
| 03:03 | hiredman | clojurebot: clojure-install? |
| 03:03 | clojurebot | clojure is a language to use if you want to up your game |
| 03:04 | Raynes | clojurebot: clojure? |
| 03:04 | clojurebot | clojure is a language to use if you want to up your game |
| 03:04 | hiredman | http://github.com/technomancy/clojure-mode/tree/master comes with some sort of "install clojure and make it all work for me" stuff |
| 03:04 | Raynes | I see what you did there. |
| 03:09 | brennanc_ | what are some of the common editing setups / environments people use for coding clojure? |
| 03:10 | brennanc_ | I'm really curious about emacs but I'm a complete noob. It looks a little overwhelming. I ordered one of the emacs books that should be arriving in the mail in a few days. |
| 03:11 | hiredman | I vim |
| 03:17 | mrsolo | yea a book is helpful |
| 03:17 | mrsolo | emacs has steep learning curve |
| 03:17 | brennanc_ | more than vi? |
| 03:17 | mrsolo | yes |
| 03:18 | brennanc_ | vi took me a week to get up to the proficiency level of MS notepad |
| 03:18 | brennanc_ | of course, it probably would have been a lot faster if I didn't force myself to learn the home row arrow keys but I'm glad I did |
| 03:19 | mrsolo | emacs is a bit more involved |
| 03:20 | brennanc_ | is it worth it or should I stick with vi? |
| 03:20 | hiredman | vim |
| 03:20 | Raynes | mrsolo: The learning curve isn't more than vim... |
| 03:20 | hiredman | you don't want vi |
| 03:20 | Raynes | If anything it's less. |
| 03:21 | Raynes | Saying Emacs is harder to use is pure speculation and opinion. I hear both Editors have good support for Clojure however. |
| 03:21 | mrsolo | well i dunno |
| 03:21 | mrsolo | i am wrong person to ask. |
| 03:21 | Raynes | So choose which ever one looks uglier. |
| 03:21 | mrsolo | i learned vim decades ago |
| 03:21 | hiredman | http://garbagehill.files.wordpress.com/2008/04/editor-learning-curves.jpg |
| 03:21 | mrsolo | and eamcs recently ... so i pretty much forgot vi learning curse |
| 03:23 | mrsolo | well eamcs has slime.. i heard vim has beefed up clojure support recently? |
| 03:23 | hiredman | http://img.skitch.com/20090108-8b31mucqnmb3wnpi1pg5wtd28i.png <-- is pretty impressive for a text editor |
| 03:23 | Raynes | mrsolo: Type 'Emacs' slower ;). Vim got VimClojure. It's supposed to be hawt. |
| 03:23 | mrsolo | brennanc: it is worth learning both |
| 03:27 | Raynes | hiredman: Mac user. |
| 03:27 | hiredman | me/ |
| 03:28 | hiredman | ? |
| 03:28 | Raynes | Yes. |
| 03:28 | Raynes | Yoiu. |
| 03:28 | Raynes | You* |
| 03:28 | hiredman | I couldn't afford a mac |
| 03:29 | Raynes | Oh, I thought that was your screenshot. |
| 03:29 | hiredman | nope |
| 03:30 | hiredman | a xmpp client, with avatar support, in your text editor |
| 03:30 | hiredman | crazy |
| 03:31 | mrsolo | naw :-) |
| 03:31 | mrsolo | emacs does it all |
| 03:40 | cmvkk_ | I wonder if it's a bad idea to write my documentation at 2:30am |
| 03:41 | cmvkk_ | am i gonna wake up tomorrow morning, look at it and go "what the hell" |
| 03:41 | cmvkk_ | "that sentence doesn't make any sense" |
| 03:56 | Raynes | Writing doc strings when you are tired is a mistake. The proves itself true more often that I can stress. |
| 03:57 | cmvkk_ | Heh. You're right, and I wasn't even doing that. I was writing the readme file. |
| 04:15 | Raynes | I Hate People Who Capitalize Every Single Word. |
| 04:28 | texodus | what rv? |
| 08:46 | leafw | anybody can point to usage of -> ? |
| 08:46 | leafw | I never get it right, and the doc is too high level for me |
| 08:47 | leafw | and example is worth 10 docs |
| 08:53 | laurum | leafw: For example the following expressions have the same result: (f1 (f2 (f3 x))) (-> x f3 f2 f1) |
| 08:55 | leafw | and applied to a map? |
| 08:55 | laurum | it calls a series of functions, passing the result of each as an argument to the next |
| 08:56 | Raynes | slashus2: Looks like I might live through the next round of storms due in here soon. :D |
| 09:09 | cgrand | leafw: (-> {:a {:b {:c 1}}} :a :b :c) yields 1 (this works only with keywords) |
| 09:10 | cgrand | (-> {"a" {"b" {"c" 1}}} (get "a") (get "b") (get "c")) when keys aren't keywords |
| 09:11 | leafw | cgrand: nice example. So that's for reading. Can one put in to :c some value, and get the returned new map? |
| 09:18 | cgrand | leafw: I don't know of a -> base idiom deep association, you have to use assoc-in |
| 09:26 | cgrand | (now without missing words and letters) I don't know of a -> based idiom for deep association, you have to use assoc-in |
| 09:33 | qwert666 | i have defined a m symbol (defn m) and then i hit (name m) what is wrong with it , the doc is saying that i can pass a symbol ... ? i`m passing a symbol so it should work... i mean with the (name (gensym)) it works fine why not with the m symbol ? |
| 09:40 | leafw | cgrand: thanks, assoc-in does it. |
| 09:42 | Chousuke | qwert666: m is not a symbol. 'm is |
| 09:42 | cgrand | qwert666: (name 'm) ; without the quote, m is resolved |
| 11:36 | rhickey | lpetit: sorry, I got called away last night |
| 11:43 | AWizzArd | Chousuke: apropos symbol: it seems that symbols are not allowd to start with a digit |
| 11:44 | AWizzArd | ,'3*x |
| 11:44 | clojurebot | Invalid number: 3*x |
| 11:44 | AWizzArd | ,'x*3 |
| 11:44 | clojurebot | x*3 |
| 11:44 | AWizzArd | so (def 3*x (* 3 x)) is not allowed |
| 12:07 | blbrown | is rhickey here? |
| 12:13 | blbrown | I was trying to see if there is a way to load SCRIPT A and then load SCRIPT B which depends on SCRIPT A but not have to reload SCRIPT A more than once. Kind of cache script A through java code. http://paste.lisp.org/display/77719 |
| 12:41 | AWizzArd | hi kotarak |
| 12:41 | kotarak | hi Wizz |
| 12:45 | AWizzArd | blbrown: your point is interesting. Just yesterday I was wondering if any double loading needs to happen if require libs A, B, C and X, Y, Z, where A, B and C also require/use themselves X, Y and Z. |
| 12:46 | AWizzArd | if require ==> if I require |
| 12:46 | kotarak | X,Y,Z should be loaded only once. |
| 12:47 | AWizzArd | this is typically what I want |
| 12:47 | AWizzArd | although, now as we talk about this: what if Z changes during runtime? |
| 12:48 | kotarak | If the rest references the Vars of Z (not taking it's value), the new Z code will be used. |
| 12:49 | cmvkk_ | you can also do (require :reload ...) to reload stuff |
| 12:49 | kotarak | and :reload-all... |
| 12:50 | kotarak | I think there was some difference between (send *agent* z/some-fun) and (send *agent* #'z/some-fun). But I'm not sure, whether IIRC. |
| 12:51 | kotarak | The first using the value, while the second using the new code, when z is reloaded. But as I said: only some dark shadows of memory... Might be wrong. |
| 13:02 | brennanc_ | how do I undefine something? |
| 13:03 | brennanc_ | I'm trying to load some external code and it's complaining it already exists in the REPL's user namespace |
| 13:04 | kotarak | (doc ns-unmap) |
| 13:04 | clojurebot | Removes the mappings for the symbol from the namespace.; arglists ([ns sym]) |
| 13:04 | brennanc_ | thanks |
| 13:05 | slashus2 | ,(reduce #(concat %1 [%2]) [] (range 3500)) |
| 13:05 | clojurebot | Eval-in-box threw an exception:java.lang.StackOverflowError |
| 13:06 | cmvkk_ | what's going on with that is that concat returns a lazy-seq. |
| 13:06 | cmvkk_ | so when you reduce that way, you just have lazy-seq on top of lazy-seq and so on |
| 13:07 | slashus2 | ,(reduce + (reduce #(conj %1 %2) [] (range 3500))) |
| 13:07 | clojurebot | 6123250 |
| 13:09 | cmvkk_ | ,(last (reduce #(doall (concat %1 [%2])) [] (range 3500))) |
| 13:09 | clojurebot | 3499 |
| 13:09 | cmvkk_ | if you add a doall, it stops blowing the stack. |
| 13:10 | cmvkk_ | conj works too, because it isn't lazy in the first place. |
| 13:10 | slashus2 | So doall forces concat to realize? |
| 13:10 | kotarak | (dfoc doall) |
| 13:11 | kotarak | (doc doall) |
| 13:11 | clojurebot | When lazy sequences are produced via functions that have side effects, any effects other than those needed to produce the first element in the seq do not occur until the seq is consumed. doall can be used to force any effects. Walks through the successive nexts of the seq, retains the head and returns it, thus causing the entire seq to reside in memory at one time.; arglists ([coll] [n coll]) |
| 13:11 | kotarak | (doc dorun) |
| 13:11 | clojurebot | When lazy sequences are produced via functions that have side effects, any effects other than those needed to produce the first element in the seq do not occur until the seq is consumed. dorun can be used to force any effects. Walks through the successive nexts of the seq, does not retain the head and returns nil.; arglists ([coll] [n coll]) |
| 13:18 | cmvkk_ | it's interesting because it's a gotcha that there's no real fix for. |
| 13:18 | cmvkk_ | if something takes a lazy-seq and makes a new lazy-seq that uses it, you shouldn't compound calls to it. |
| 13:19 | cmvkk_ | and that's all you can say. |
| 14:05 | slashus2 | cmvkk_: A gotcha of lazy sequences. It is a good thing to know. |
| 14:49 | johnw | do the docs on clojure.org talk about how to use pattern matching anywhere? |
| 14:49 | cmvkk_ | do you mean regexes? |
| 14:50 | johnw | no, I mean functional programming-style pattern matching |
| 14:50 | johnw | i think it's (defn foo [x] ([x] ..) ([x & rest] ..)) |
| 14:50 | johnw | or does clojure not do this? |
| 14:51 | cmvkk_ | that's not really built in, per se. |
| 14:51 | cmvkk_ | you can define functions with multiple arities like that. |
| 14:51 | cmvkk_ | but that's just multiple arities, not pattern matching as a whole. |
| 14:51 | johnw | oh |
| 14:51 | johnw | i see |
| 14:51 | cmvkk_ | on the other hand, there is destructuring which works kind of like that |
| 14:51 | cmvkk_ | and you can do that inside function arguments... a la (defn foo [x & xs] ...) |
| 14:52 | cmvkk_ | docs for that are maybe under 'let'? |
| 14:52 | johnw | k, thanks |
| 14:52 | cmvkk_ | which would be on the special forms page. |
| 14:52 | dnolen | also you have multimethods which allow to define what you want to dispatch on. |
| 14:53 | dnolen | ,(doc defmulti) |
| 14:53 | clojurebot | "([name docstring? attr-map? dispatch-fn & options]); 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" |
| 15:16 | AWizzArd | ~seen jcowan |
| 15:16 | clojurebot | no, I have not seen jcowan |
| 15:30 | Lau_of_DK | Good evening gents |
| 15:30 | kotarak_ | Hi Lau |
| 15:32 | Lau_of_DK | I just tried installing Linux Mint - Its pretty cool, but Im in the wrong IRC client, brb |
| 15:32 | Lau_of_DK | There we go :) |
| 15:33 | kotarak_ | Lau_of_DK: you are switching linux distro far more often than I change my shirt. ;) |
| 15:33 | Lau_of_DK | thats.... pretty disgusting |
| 15:34 | AWizzArd | Lau, do you install those Linuxes in VirtualBox? |
| 15:34 | Lau_of_DK | AWizzArd, Nope - I have my /home on a separet partition, so I just flush / |
| 15:35 | AWizzArd | kotarak: please check if any windows on your compi were updated |
| 15:35 | kotarak | AWizzArd: ??? What do you mean? |
| 15:35 | AWizzArd | the one with the cat icon |
| 15:36 | kotarak | Ah ok. Sorry. |
| 15:37 | Lau_of_DK | Im actually considering trying to isntall OpenBSD - I attended a security lecture from some of their community regulars... Raised some interesting points |
| 15:37 | Lau_of_DK | In the Linux world - Nothing beats Arch Im sure |
| 15:38 | kotarak | Hmmmm... I saw people ripping OpenBSD apart. With some very bad code down the kernel... |
| 15:38 | Lau_of_DK | Sounds unlikely |
| 15:38 | Lau_of_DK | Present your evidense Mr. Kota |
| 15:38 | Lau_of_DK | And I'll present a spell-checker :) |
| 15:38 | AWizzArd | I think the Kernel was not written in Clojure. It must be bad then. |
| 15:39 | Lau_of_DK | true - A part of the lecture covered some arguments for using strlcpy for copying bytes, instead of strcpy or strncat...... I was half-asleep while thinking 'come on, this is 2008, get over it' |
| 15:39 | cmvkk_ | oh man what kind of freaky operating system would that |
| 15:39 | cmvkk_ | be |
| 15:39 | AWizzArd | :) |
| 15:39 | kotarak | Lau_of_DK: Ah. I don't remember it was three or four years back. Concerning integer overflow and casting int to uint unsafely and such things. I'm not an expert.... |
| 15:39 | AWizzArd | cmvkk_: there were for many years Lisp Machines |
| 15:39 | Lau_of_DK | kotarak, Integer overflow is probably the most widely exploitable bug there is today, not specific to OpenBSD |
| 15:40 | Lau_of_DK | However OpenBSD is probably uniquely protected from Bufferoverflows |
| 15:43 | kotarak | Lau_of_DK: And the performance of OpenBSD seemed very bad in a comparison, where Linux and FreeBSD performed roughly similar, NetBSD slightly worse and OpenBSD more or less broke completely down... *kotarakisnoexportanddoesn'tknowhowmuchtruthisinthis* |
| 15:43 | Lau_of_DK | eh? |
| 15:44 | kotarak | Lau_of_DK: let me see.... |
| 15:44 | Lau_of_DK | You compare Linux and FreeBSD? Linux covers everything from Gentoo, Arch to Slackware to Ubuntu/PC-Linux and such... |
| 15:44 | Lau_of_DK | Anyway, if there's not a heavy performance gain then I wont even try it out - I wanted something that could match Arch |
| 15:50 | kotarak | Lau_of_DK: Linux is also a kernel, which provides certain functionality for all distros. Here is what I remembered. It's quite out-dated now.... So read at your own risk ;) http://bulk.fefe.de/scalability/ |
| 15:51 | Lau_of_DK | Amazing.... Ive never seen that ugly charts before |
| 15:51 | kotarak | Well they are ugly, but there is no junk. |
| 15:51 | kotarak | I've seen much more "prettier" charts only consisting of chart junk. |
| 15:52 | Lau_of_DK | hehe |
| 15:52 | Lau_of_DK | Interesting, that you chose to mention that :) |
| 15:52 | kotarak | What? |
| 15:52 | Lau_of_DK | Anyway, lets talk shop |
| 15:53 | Lau_of_DK | If its not Swing/AWT and its not Qt - What is it that I can develop Java UIs in ? |
| 15:53 | kotarak | SWT? |
| 15:53 | leafw | Lau_of_DK: SWT |
| 15:53 | Lau_of_DK | SWT? |
| 15:53 | leafw | Lau_of_DK: clipse toolkit. |
| 15:53 | leafw | s/clipse/eclipse/ |
| 15:54 | Lau_of_DK | k - any pros compared to Swing? |
| 15:55 | leafw | Lau_of_DK: SWT is, IMO, not worth it. No threaing issues, but has a native component to it that must be installed separately for each platform. |
| 15:56 | Lau_of_DK | ouch |
| 15:56 | Lau_of_DK | Thats sounds bad |
| 15:56 | Lau_of_DK | Im just not liking Swing very much, it seems laggy and somewhat ugly - and Qt is great, but depends on Jambi, which is quite large |
| 15:57 | leafw | only AWT remains, but it's quite limited. |
| 15:57 | leafw | Swing is OK if you understand its threading model. |
| 15:58 | leafw | in short, any swing-related operations must be done in a Runnable that is executed by the SwingUtilities.invokeLater(runnable); |
| 15:58 | Lau_of_DK | Seems simple enough |
| 15:58 | leafw | it's quite fault-tolerant too, so it will work fine in most situations even when ignoring its threading model. |
| 15:58 | Lau_of_DK | leafw, Is it also laggy in your experience? |
| 15:58 | Lau_of_DK | sluggish is more the word |
| 15:59 | leafw | not in my experience. |
| 15:59 | leafw | jdk 1.6.0 repaints swing components very fast. |
| 15:59 | leafw | if you use images, be sure to learn how to use VolatileImage for super fast transparencies and what not. |
| 15:59 | leafw | (graphic card resident images) |
| 16:00 | Lau_of_DK | I'll remember that, thanks |
| 16:03 | Lau_of_DK | kotarak, , this isnt signed, but it looks like your handy work? http://www.dadhacker.com/blog/?p=1112 |
| 16:09 | cconstantine | Say I wanted to make a compiled clojure program, how would I go about doing that? |
| 16:09 | blbrown | ,doc compile |
| 16:09 | clojurebot | java.lang.Exception: Can't take value of a macro: #'clojure.core/doc |
| 16:09 | blbrown | ,(doc compile) |
| 16:09 | clojurebot | "([lib]); Compiles the namespace named by the symbol lib into a set of classfiles. The source for the lib must be in a proper classpath-relative directory. The output files will go into the directory specified by *compile-path*, and that directory too must be in the classpath." |
| 16:10 | Lau_of_DK | cconstantine, try downloading clojure from SVN, type "ant", watch it compile, mimic that structure + build.xml in your own project |
| 16:12 | cconstantine | thanks |
| 16:14 | kotarak | Lau_of_DK: sorry. I'm more or less afk. What was it with this link? |
| 16:15 | Lau_of_DK | Just a guy who wrote a command-line formatting utility which instead of yes/no prompts, asked you to type "Yes Mother, I do want to format my drive." - and by a mistake, this was widely used in an asian factory, resulting in the workers having little notes with this sentense written on, in order to remember it |
| 16:16 | kotarak | Hehe. Could happen in other companies, too. ;) |
| 16:18 | blbrown | Lau_of_DK, you have an idea on this. I want to load script B at the bottom but only have it loaded once and then load other scripts and still have script B 'cached'. within that clojure instance. http://paste.lisp.org/display/77719 |
| 16:20 | Lau_of_DK | (load "b") doesnt do it for you ? |
| 16:21 | blbrown | Lau_of_DK, you know how to do that from Java code |
| 16:21 | Lau_of_DK | I've seen it done, but I forgot how - I think you might be able to find an old snippit in the paste-bin from Rich regarding this, or check out docs for Enclojure |
| 16:22 | blbrown | Lau_of_DK, even something like java:CurrentClojureInstance?.runScript("(load 'b')"); would wokr |
| 16:22 | blbrown | ok |
| 16:22 | Lau_of_DK | Sorry - Dont remember specifically |
| 16:22 | Lau_of_DK | Its a form of loadResource I believe |
| 16:22 | blbrown | ah, I saw that method |
| 16:27 | Lau_of_DK | I have a weird problem with Compojure - I have html form {:action "/" :method "POST" :id "foo"} which when posting, gives an empty {} as params... what gives? |
| 16:28 | AWizzArd | Lau: have you tried a similar thing before, and did it work then? |
| 16:28 | Lau_of_DK | Yes and yes |
| 16:28 | Lau_of_DK | I have an almost identical setup in a another compojure program, which runs without any problems |
| 16:29 | AWizzArd | ok, so in principle it should work, and it worked for you in the past. But this time it does not do what you expected. |
| 16:29 | lpetit | rhickey: no problem, I slept a little then, and today I'm not that sure that the solution I had envisioned would be that easy, and that universal. So since I'm not myself currently faced to the problem, I'll delay rethinking about that when I personnaly am concerned with it. |
| 16:33 | AWizzArd | Btw, Lau_of_DK, is there a book or detailed tutorial for Compojure? |
| 16:33 | blbrown | Lau_of_DK, you can use my web framework...when I am done with it. It is more 'java' oriented though |
| 16:34 | Lau_of_DK | AWizzArd, They have a pretty good wiki site set up now, and Technomancys concourse is fantastic (github) |
| 16:38 | danlarkin | get outta here with your competing "web framework", blbrown :D |
| 16:40 | cmvkk_ | no matter how competitive, we all know the first truly successful framework will be the first one with a rails ripoff name. |
| 16:40 | cmvkk_ | 'clojure on clouds' or something. |
| 16:40 | blbrown | danlarkin, don't worry I don't generally tend to finish things but there are things that I want to add to a framework. Plus, compojure is pure clojure. Mine won't be. I am using existing j2ee libraries |
| 16:42 | cconstantine | I'm trying to compile a clojure file via "java -cp <paths to clojure .jars> clojure.lang.Compile clojure-source.clj" and it's not working |
| 16:42 | blbrown | "and it's not working" I cringe when I hear that in IRC |
| 16:42 | cconstantine | the error I'm geting is: "ERROR: Must set system property clojure.compile.path" |
| 16:43 | cconstantine | blbrown: I say that because the error I'm getting isn't all that helpful ;) |
| 16:43 | blbrown | actually, it is pretty accurate. on the command line try -Dclojure.compile.path=classes (maybe make a classes directory) |
| 16:44 | cconstantine | accurate almost never means helpful :P |
| 16:44 | cconstantine | I'l try that |
| 16:44 | blbrown | good point |
| 16:46 | cconstantine | same error |
| 16:48 | cconstantine | this is not being done through ant... if that helps |
| 16:50 | cconstantine | ,(doc compile) |
| 16:50 | clojurebot | "([lib]); Compiles the namespace named by the symbol lib into a set of classfiles. The source for the lib must be in a proper classpath-relative directory. The output files will go into the directory specified by *compile-path*, and that directory too must be in the classpath." |
| 16:54 | Lau_of_DK | ...seems in the latest version of compojure, POST parameters are taken from "name" not "id" |
| 16:56 | blbrown | isn't that standard HTML. where you have an input field and the input fields are identified by the 'name' attribute |
| 16:57 | danlarkin | blbrown: indeed |
| 16:59 | cconstantine | any other ideas on how to set the clojure.comp.path property? |
| 17:01 | Mec | is that the same as the *compile-path*? |
| 17:01 | cconstantine | no idea, I got an error saying it needs to be set |
| 17:02 | hiredman | ~def clojure.lang.Compile |
| 17:04 | hiredman | cconstantine: how have you tried setting it? |
| 17:05 | cconstantine | -Dclojure.compile.path |
| 17:05 | cconstantine | evidently it has to be one of the first arguments to java |
| 17:06 | hiredman | is there a reason you are using clojure.lang.Compile directly? |
| 17:07 | cconstantine | I want to make a compiled clojure program |
| 17:07 | cconstantine | .jar/.class whatever I can run directly |
| 17:07 | hiredman | use compile |
| 17:07 | blbrown | cconstantine, so it worked. You will get there that is why I didnt say anything. Basically you need that value set for clojure to compile the classes to. And there are several different ways to do it |
| 17:07 | hiredman | java clojure.main -e "(compile 'some.name.space)" |
| 17:08 | cconstantine | yeah, I got that set now I'm getting other wierdness |
| 17:08 | cconstantine | that was for blbrown |
| 17:08 | cconstantine | hiredman: trying now |
| 17:08 | cconstantine | java.io.FileNotFoundException: Could not locate prob_4__init.class or prob_4.clj on classpath: (NO_SOURCE_FILE:0) |
| 17:09 | cconstantine | prob_4.clj is the name of the file prob_4 ns is defined in |
| 17:09 | hiredman | you need to set your classpath of course |
| 17:09 | hiredman | cconstantine: do you have a good namespace declaration? |
| 17:09 | hiredman | ~namespace |
| 17:09 | clojurebot | namespaces are (more or less, Chouser) java packages. they look like foo.bar; and corresponde to a directory foo/ containg a file bar.clj in your classpath. the namespace declaration in bar.clj would like like (ns foo.bar). Do not try to use single segment namespaces. a single segment namespace is a namespace without a period in it |
| 17:10 | cconstantine | is "(ns prob_4)" good? |
| 17:10 | hiredman | no |
| 17:10 | blbrown | hehe |
| 17:10 | hiredman | cconstantine: for a few reasons |
| 17:10 | hiredman | one of which clojurebot just told you |
| 17:11 | blbrown | the standard for java packages is normally '<com/org>.<company name>.<project>.WHATEVER' |
| 17:11 | hiredman | the other reason is something that may not be a reason |
| 17:11 | cmvkk_ | as an aside, that format doesn't make sense from a free software perspective does it? |
| 17:12 | hiredman | dashes in namespaces are mapped to underscores in filenames |
| 17:12 | blbrown | cmvkk_, not necessarily, but yea, I guess you could leave off the company name |
| 17:12 | hiredman | not sure about underscores in namespaces |
| 17:12 | hiredman | I've been using hiredman.* |
| 17:13 | cmvkk_ | it seems like bad practice to hardcode the author's name or organization into any piece of code, and if the first unit is always com/org, why even bother? |
| 17:13 | blbrown | i just hate naming files/directories with minus '-' |
| 17:13 | cmvkk_ | i think for clojure, project.file is a good enough format. |
| 17:13 | hiredman | cmvkk_: one of the original ideas of java was the jvm could go out and find the classes it was looking for |
| 17:14 | blbrown | muahahhaa |
| 17:14 | hiredman | so package names where basically urls |
| 17:14 | hiredman | were |
| 17:14 | cmvkk_ | yeah, i get that. that still seems like a bad idea, though... |
| 17:14 | hiredman | needless to say, this never took off |
| 17:14 | cmvkk_ | because now, if your website name changes, all the code has to change too!! |
| 17:15 | cmvkk_ | and all the code for everything that uses that library, etc. |
| 17:15 | hiredman | cmvkk_: luckily sun has hung onto their websites |
| 17:15 | blbrown | yea, if you are insane. I see a lot of people do that when they move from sourceforge projects. I say, why have to completely rename your package structure |
| 17:16 | hiredman | http://www.faqs.org/rfcs/rfc4151.html |
| 17:17 | Lau_of_DK | Anybody here been able to work out, how compojures (decorate-with) works ? |
| 17:17 | cconstantine | right, so in the meantime I have a single clj file I want to compile that desn't have anything to do with the internet |
| 17:17 | blbrown | hehe |
| 17:18 | hiredman | *shrug* |
| 17:19 | cmvkk_ | this is why namespace-dependent stuff annoys me in general... it doesn't make sense for throwaway stuff. |
| 17:19 | hiredman | in clojure you compile namespaces not files |
| 17:19 | cmvkk_ | there should be a (compile-file "foo.clj") that just works for foo.clj. |
| 17:20 | cmvkk_ | i guess that wouldn't work with java, though, since the compiled stuff has to have a namespace of some sort |
| 17:20 | hiredman | why compile things that are "throwaway"? |
| 17:21 | brennanc_ | you guys know of any good templating systems like smarty for lisp/clojure? I'd like to allow the user to submit a page that has runnable code but don't want it to be anything that he can cause damage to the system or that could get stuck in infinite loops or hog resources. |
| 17:21 | cconstantine | how do I see what the current namespace is from within clojure? |
| 17:21 | hiredman | *ns* |
| 17:21 | hiredman | ,(doc *ns*) |
| 17:21 | clojurebot | "; A clojure.lang.Namespace object representing the current namespace." |
| 17:21 | cmvkk_ | ,*ns* |
| 17:21 | clojurebot | #<Namespace sandbox> |
| 17:22 | cconstantine | erm, classpath |
| 17:22 | hiredman | System/getProperty |
| 17:22 | blbrown | cmvkk_, at least the project name is a relevant namespace <clojure>.file.clj. because you avoid conflicts and it REALLY is in a different namespace. I never put anything in a default namespace/package even for throwaway code |
| 17:23 | blbrown | sacrelig! |
| 17:23 | cmvkk_ | blbrown, I agree. If i'm writing a file or whatever, I make up something dumb at least |
| 17:23 | cmvkk_ | although this usually amounts to (ns cmvkk.blah) |
| 17:23 | slashus2 | You have to do a gen-class before you can compile something? |
| 17:24 | hiredman | nope |
| 17:24 | hiredman | gen-class, if you use it, happens when you run compile, otherwise it s nop |
| 17:25 | slashus2 | You are talking about compiling into a .class file? |
| 17:25 | hiredman | explinations get a little tricky here |
| 17:26 | hiredman | because clojure is always compiled to jvm byte code which is what a .class file is |
| 17:26 | slashus2 | yeah |
| 17:26 | Mec | anyone know the O of (set ) |
| 17:26 | hiredman | but that byte code is not written to disk unless you use compile |
| 17:27 | hiredman | ~def set |
| 17:27 | hiredman | ,(class (set '(a))) |
| 17:27 | clojurebot | clojure.lang.PersistentHashSet |
| 17:27 | hiredman | it just has to compare the hashcode I guess |
| 17:28 | hiredman | but it has to walk what you pass it, so maybe n? |
| 17:29 | hiredman | gen-class generates a, erm, named class? in the sense that you give the class a meaningful name instead of just a random number clojure generates for the classes it generates under the hood |
| 17:29 | Mec | well im running out of heapspace so guess it doesnt matter how long it will take |
| 17:30 | cmvkk_ | you can't 'run' a class generated without genclass, right? |
| 17:30 | cmvkk_ | i.e. java foo__1234.class or whatever |
| 17:30 | hiredman | cmvkk_: I am usre if you really tried you could |
| 17:30 | hiredman | sure |
| 17:30 | cmvkk_ | well it would have to have a main method right? and those Fn classes don't do they? |
| 17:31 | hiredman | oh, if you mean cannot run by calling java on the command line, sure |
| 17:31 | Mec | anyone familiar with clojurebox know how to change the size of the heap space? |
| 17:32 | hiredman | but they are java classes, so I am sure from java you could instantiate them |
| 17:32 | cmvkk_ | right. |
| 17:33 | kotarak | cmvkk_: you can specify generation of a main method via (gen-class ... :main true ...) resp. (gen-class ... :main false ...) |
| 17:39 | kotarak | cmvkk_: sorry misread your message... |
| 17:44 | slashus2 | I can't even get the gen-class Example to work. |
| 17:47 | slashus2 | java.lang.RuntimeException: java.lang.ClassNotFoundException: clojure.examples.hello$_main__4 (NO_SOURCE_FILE:0) |
| 17:51 | slashus2 | This is highly frustrating. |
| 17:58 | stuhood | slashus2: you have everything on the classpath that you need, right? the output directory for your classfiles is easy to miss |
| 17:59 | slashus2 | It worked after I added the classes directory. |
| 17:59 | slashus2 | thanks |
| 17:59 | slashus2 | Sometimes the classpath stuff is a pain. |
| 18:01 | blbrown | ,(doc comment) |
| 18:01 | clojurebot | "([& body]); Ignores body, yields nil" |
| 18:02 | blbrown | can you load the comment body through code. say if you want to print the file comment |
| 18:16 | stuhood | ~defn print-doc |
| 18:16 | clojurebot | It's greek to me. |
| 18:16 | stuhood | ~def print-doc |
| 18:16 | stuhood | ,(:doc min) |
| 18:16 | clojurebot | nil |
| 18:17 | hjlee | ,(doc min) |
| 18:17 | clojurebot | "([x] [x y] [x y & more]); Returns the least of the nums." |
| 18:18 | stuhood | yea... i'm trying to answer blbrown's question: that prints the doc, so i'm trying to get it as a string |
| 18:18 | stuhood | ,(:doc (var min)) |
| 18:18 | clojurebot | nil |
| 18:19 | stuhood | ,(:doc (var ^min)) |
| 18:19 | clojurebot | java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.Symbol |
| 18:20 | stuhood | ,(:doc ^(var min)) |
| 18:20 | clojurebot | "Returns the least of the nums." |
| 18:20 | stuhood | sigh |
| 18:22 | blbrown | if I put (comment \n ;lksjdkflskdjfskl \n ) at the top of a file, I guess I can't get that comment |
| 18:31 | stuhood | blbrown: the reader would be able to get it, but it would throw it away immediately |
| 18:34 | stuhood | blbrown: and it doesn't look like you can attach metadata to the namespace |
| 18:36 | hiredman | ,(class *ns*) |
| 18:36 | clojurebot | clojure.lang.Namespace |
| 18:36 | stuhood | ,(with-meta *ns* {:comment "Hello World"}) |
| 18:36 | clojurebot | java.lang.ClassCastException: clojure.lang.Namespace cannot be cast to clojure.lang.IObj |
| 18:37 | hiredman | ,(map #(.getName %) (.getMethods (class *ns*))) |
| 18:37 | clojurebot | ("findOrCreate" "getMappings" "importClass" "refer" "findInternedVar" "lookupAlias" "removeAlias" "toString" "getName" "intern" "find" "remove" "unmap" "getMapping" "addAlias" "getAliases" "all" "alterMeta" "resetMeta" "meta" "wait" "wait" "wait" "hashCode" "getClass" "equals" "notify" "notifyAll") |
| 18:37 | stuhood | hmm |
| 18:37 | hiredman | ,(ancestors (class *ns*)) |
| 18:37 | clojurebot | #{clojure.lang.IMeta java.lang.Object clojure.lang.AReference clojure.lang.IReference} |
| 18:37 | stuhood | so it contains mutable metadata? |
| 18:37 | hiredman | ,(doc alter-meta) |
| 18:37 | clojurebot | java.lang.Exception: Unable to resolve var: alter-meta in this context |
| 18:37 | hiredman | ,(doc vary-meta) |
| 18:37 | clojurebot | "([obj f & args]); Returns an object of the same type and value as obj, with (apply f (meta obj) args) as its metadata." |
| 18:38 | hiredman | ,(vary-meta *ns* assoc :a 1) |
| 18:38 | clojurebot | java.lang.ClassCastException: clojure.lang.Namespace cannot be cast to clojure.lang.IObj |
| 18:38 | hiredman | hmmm |
| 18:38 | slashus2 | ,(doc alter-meta!) |
| 18:38 | clojurebot | "([iref f & args]); Atomically sets the metadata for a namespace/var/ref/agent/atom to be: (apply f its-current-meta args) f must be free of side-effects" |
| 18:38 | hiredman | ah! |
| 18:38 | stuhood | sweeet |
| 18:38 | hiredman | ,(alter-meta! *ns* assoc :a 1) |
| 18:38 | clojurebot | {:a 1} |
| 18:38 | hiredman | ,(meta *ns*) |
| 18:38 | clojurebot | {:a 1} |
| 18:39 | slashus2 | oh dear.. |
| 18:39 | stuhood | hiredman: that probably wiped out whatever metadata was already attached to the ns |
| 18:39 | hiredman | ,(alter-meta! *ns* assoc :killroy-was-here true) |
| 18:39 | clojurebot | {:killroy-was-here true, :a 1} |
| 18:39 | hiredman | nah |
| 18:39 | stuhood | hiredman: if it had any |
| 18:39 | slashus2 | It didn't have anything. |
| 18:39 | hiredman | (apply assoc (meta *ns*) :a 1) would not wipe out anything in the metadata map |
| 18:40 | stuhood | ahh, indeed... my bad |
| 18:40 | slashus2 | (meta *ns*) is nil |
| 18:40 | stuhood | blbrown: to attach a comment to a file, make sure the contents of a file are part of a namespace, and then attach metadata to the namespace like we did above |
| 18:42 | hiredman | stuhood: he seems to wnat a literal comment |
| 18:42 | hiredman | not a docstring |
| 18:43 | stuhood | well, he wanted to get it programmatically, and i don't think he'll be able to achieve that with (comment) without modifying the reader |
| 18:44 | hiredman | ~def comment |
| 18:45 | kotarak | comment is actually a macro. |
| 18:45 | slashus2 | simple macro |
| 18:46 | stuhood | yea... so in order to get the contents, he'd have to write another macro that nullified the effect of (comment) |
| 18:47 | stuhood | it'd be interesting if (comment) attached your comment to the metadata of whatever var/namespace it was in |
| 18:49 | hiredman | (defmacro comment [&body] (alter-meta! *ns* update-in [:comments] assoc (str body)) nil) |
| 18:49 | hiredman | ,(doc update-in) |
| 18:49 | clojurebot | "([m [k & ks] f & args]); 'Updates' a value in a nested associative structure, where ks is a sequence of keys and f is a function that will take the old value and any supplied args and return the new value, and returns a new nested structure. If any levels do not exist, hash-maps will be created." |
| 18:49 | hiredman | oh |
| 18:49 | hiredman | wiat |
| 18:49 | hiredman | (defmacro comment [&body] (alter-meta! *ns* update-in [:comments] conj (str body)) nil) |
| 18:50 | hiredman | ,(update-in {} [:comments] conj :a) |
| 18:50 | clojurebot | {:comments (:a)} |
| 18:52 | stuhood | heh, ask and ye shall receive |
| 18:53 | kotarak | Isn't the docstring of the namespace sufficient? |
| 18:54 | stuhood | kotarak: yea, should be: changing (comment) was just a fun whatif |
| 19:11 | slashus2 | Looks like javamail became open source March 2. That is neat. |
| 19:22 | stuhood | slashus2: yea, i'm really excited: we try not to look behind the api when we use it, but it really helps with debugging performance issues |
| 19:28 | stuhood | slashus2: are you using the IMAP portion of that api? |
| 19:28 | clojurebot | the website api refers to last release |
| 19:28 | slashus2 | nope |
| 19:28 | stuhood | gotcha |
| 19:31 | hiredman | clojurebot: botsnack |
| 19:31 | clojurebot | thanks; that was delicious. (nom nom nom) |
| 19:32 | AWizzArd | hiredman: why do you feed it? |
| 19:33 | hiredman | it's a computer program, feeding it would be silly |
| 19:33 | hiredman | I reward it |
| 23:15 | slashus2 | ,(.pow (bigint 10) (.pow (bigint 10) 100)) |
| 23:16 | clojurebot | 1 |
| 23:17 | slashus2 | not quite a googolplex |
| 23:17 | cmvkk | is the problem that the 100 at the end has to be a bigint maybe |
| 23:17 | slashus2 | Do the last part by itself |
| 23:17 | slashus2 | It comes out to be a googol |
| 23:18 | gnuvince_ | ,(.pow (bigint 10) 100) |
| 23:18 | clojurebot | 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
| 23:19 | gnuvince_ | ,(.pow (bigint 10) (bigint 100)) |
| 23:19 | clojurebot | 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
| 23:19 | cmvkk | ,(.pow (bigint 10) (.pow (bigint 10) (bigint 100))) |
| 23:19 | clojurebot | 1 |
| 23:19 | slashus2 | :-( |
| 23:19 | cmvkk | ,(.pow (bigint 10) (.pow (bigint 10) (bigint 10))) |
| 23:19 | cmvkk | that should just time out. |
| 23:19 | clojurebot | Execution Timed Out |
| 23:20 | cmvkk | so i wonder why it doesn't work after a while |
| 23:20 | slashus2 | It should time out on the other one as well. |
| 23:20 | cmvkk | yeah. |
| 23:20 | slashus2 | Not return 1... |
| 23:20 | slashus2 | I will try to confirm that this is the behavior in java when I get time. |
| 23:22 | cmvkk | I see no reason why it wouldn't be the case |
| 23:22 | slashus2 | I was watching cosmos and Carl Sagan mentioned a googolplex, I wanted to see what a googol looked like. |
| 23:23 | cmvkk | of course even with unlimited time, you couldn't write out a googolplex with a computer |
| 23:23 | cmvkk | or rather, you couldn't define one as a bigint |
| 23:23 | slashus2 | oh I see. |
| 23:24 | slashus2 | BigInt's power function only takes an integer |
| 23:24 | cmvkk | because you'd need at least a googol bits to do it, and more like 2.5*googol or whatever |
| 23:24 | cmvkk | oh, it coerces to int? |
| 23:24 | slashus2 | I think so |
| 23:25 | slashus2 | �BigInteger pow(int�exponent) |
| 23:25 | slashus2 | It is strange that it doesn't take another BigInteger. |
| 23:25 | cmvkk | well it makes sense to a degree. |
| 23:26 | cmvkk | on a 32-bit system, you won't ever have enough memory to define a number raised to a power above max_int. |
| 23:26 | slashus2 | That you will probably never use a pow greater than max_int |
| 23:27 | cmvkk | because 2^max_int is exactly the maximum amount of memory a 32-bit system can have. |
| 23:27 | slashus2 | On a 64-bit system max_int will be the max amount of memory a 64-bit system can have :-) |
| 23:28 | cmvkk | or the highest number your memory can represent, i mean. |
| 23:28 | slashus2 | right |
| 23:28 | cmvkk | well based on java numbers, for a 64-bit system it would be max_long. |
| 23:28 | cmvkk | i think java ints are 32 bits and longs are 64 bits no matter what the chip archetecture is |
| 23:36 | WizardofWestmarc | cmvkk: I'd hope so else you lose some of the consistance java is supposed to give across hardware... |
| 23:53 | slashus2 | Maybe when a majority of systems are 64-bit, they will switch it over to use long? |
| 23:53 | WizardofWestmarc | that or introduce a new type for 128 bit numbers, 'cause you'd potentially break a lot of legacy code if you changed the length of ints vs longs |
| 23:54 | slashus2 | I mean the pow function in BigInteger |
| 23:54 | slashus2 | Not the whole system |
| 23:55 | WizardofWestmarc | ah |
| 23:55 | WizardofWestmarc | yeah big int I'd hope they'd change |
| 23:56 | WizardofWestmarc | 'cause once we can start having things bigger then even 64 bit numbers, we'll really need big int to kick it up a notch |
| 23:56 | WizardofWestmarc | as I doubt anyone relies on big int erroring <_< |