00:23:43 -!- jpc has joined. 00:38:58 http://i47.tinypic.com/6puxi1.jpg 00:42:06 -!- Pthing has quit (Remote closed the connection). 00:46:04 -!- poiuy_qwert has joined. 00:46:52 augur: heh 00:53:51 -!- adam_d has quit (Read error: 110 (Connection timed out)). 00:56:50 -!- BeholdMyGlory has quit (Read error: 104 (Connection reset by peer)). 01:02:26 -!- MizardX- has joined. 01:05:03 -!- MizardX has quit (Read error: 104 (Connection reset by peer)). 01:06:22 -!- gfour has joined. 01:09:02 -!- MizardX- has quit (farmer.freenode.net irc.freenode.net). 01:09:02 -!- Cerise has quit (farmer.freenode.net irc.freenode.net). 01:09:02 -!- Deewiant has quit (farmer.freenode.net irc.freenode.net). 01:09:02 -!- Asztal has quit (farmer.freenode.net irc.freenode.net). 01:09:02 -!- comex has quit (farmer.freenode.net irc.freenode.net). 01:09:02 -!- uorygl has quit (farmer.freenode.net irc.freenode.net). 01:09:02 -!- rodgort has quit (farmer.freenode.net irc.freenode.net). 01:09:03 -!- mycroftiv has quit (farmer.freenode.net irc.freenode.net). 01:09:03 -!- sebbu has quit (farmer.freenode.net irc.freenode.net). 01:09:03 -!- fizzie has quit (farmer.freenode.net irc.freenode.net). 01:09:04 -!- Gracenotes has quit (farmer.freenode.net irc.freenode.net). 01:09:04 -!- cheater has quit (farmer.freenode.net irc.freenode.net). 01:10:04 -!- gfour has quit ("Leaving."). 01:16:09 -!- poiuy_qwert has quit ("This computer has gone to sleep"). 01:17:28 -!- fizzie has joined. 01:17:28 -!- sebbu has joined. 01:17:28 -!- mycroftiv has joined. 01:17:28 -!- rodgort has joined. 01:17:28 -!- uorygl has joined. 01:17:28 -!- comex has joined. 01:17:28 -!- Asztal has joined. 01:17:28 -!- Deewiant has joined. 01:17:28 -!- Cerise has joined. 01:17:28 -!- MizardX has joined. 01:17:28 -!- Gracenotes has joined. 01:17:28 -!- cheater has joined. 01:18:51 -!- Gracenotes has quit (SendQ exceeded). 01:36:24 -!- Gracenotes has joined. 01:41:51 -!- MizardX has quit ("zzz"). 01:55:28 -!- coppro has quit (Remote closed the connection). 01:55:52 -!- coppro has joined. 02:07:09 -!- coppro has quit (Remote closed the connection). 02:07:33 -!- coppro has joined. 03:02:46 AnMaster 03:25:08 -!- Asztal has quit (Read error: 60 (Operation timed out)). 03:47:13 -!- poiuy_qwert has joined. 03:57:32 -!- poiuy_qwert has quit ("Leaving"). 04:34:51 -!- soupdragon has joined. 04:55:34 -!- Slereah_ has joined. 05:03:03 -!- zzo38 has joined. 05:03:28 I think I fixed the license. http://zzo38computer.cjb.net/icosahedral/icoruma/license.irm 05:04:13 Note: The <#> is a formatting code for blockquotes 05:06:37 -!- Slereah has quit (Read error: 110 (Connection timed out)). 05:09:00 zzo38: I'd suggest explicitly clarifying the GPL rule as to what you mean 05:09:04 Is it better now? 05:09:19 coppro: How should I clarify it? 05:09:30 zzo38: well, I'm not exactly sure what you mean 05:10:01 do you mean you can incorporate the work or derivations there of into GPLed works, as long as attribution is given? 05:10:58 I don't really care that much about attribution, but the GPL and CC-BY-SA both require attribution anyways, so it might as well. But what I mean is basically as you said 05:27:25 What would be the best way to re-word it? 05:36:19 -!- Warriphone has quit (Read error: 110 (Connection timed out)). 05:46:51 -!- zzo38 has quit (Remote closed the connection). 06:24:08 -!- SimonRC has quit (Read error: 60 (Operation timed out)). 06:30:17 -!- coppro has quit ("I am leaving. You are about to explode."). 06:49:24 -!- oerjan has joined. 07:47:08 -!- oerjan has quit ("leaving"). 07:50:00 -!- lament has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:00:00 -!- Warriphone has joined. 08:03:35 -!- augur_ has joined. 08:05:51 -!- Warriphone has quit (Remote closed the connection). 08:06:14 -!- Warriphone has joined. 08:09:56 -!- augur has quit (Read error: 110 (Connection timed out)). 08:20:56 -!- augur_ has quit (Read error: 110 (Connection timed out)). 08:26:13 -!- Warriphone_ has joined. 08:26:14 -!- Warriphone has quit (Read error: 104 (Connection reset by peer)). 08:26:15 -!- Warriphone_ has changed nick to Warriphone. 08:53:56 -!- FarOut has joined. 09:02:02 -!- FarOut has quit (Remote closed the connection). 09:13:57 -!- jpc has quit (Read error: 60 (Operation timed out)). 09:23:46 -!- SimonRC has joined. 09:33:27 -!- ehird has joined. 09:33:44 -!- lament has quit. 09:33:46 Spot the difference! 09:33:59 You are lamer 09:36:59 16:38:58 http://i47.tinypic.com/6puxi1.jpg 09:36:59 "In film you will find four basic story lines. Man versus man, man versus nature , nature versus nature, and dog versus vampire." —Steven Spielberg 09:37:04 *nature, 09:40:12 ehird : Avatar mostly reminded me of Fern Gully : 09:42:49 * ehird writes a code snippet to show why DYNAMIC-WIND is a pain, now that he's on da computaah 09:43:49 ...after downloading Emacs 09:44:09 git build from yesterday, I'm so cutting edge 09:49:19 "The application Emacs quit unexpectedly." 09:49:24 ok, then—not a nightly build 09:53:25 Fathomic o-toodled 09:55:21 -!- Asztal has joined. 10:01:16 -!- anmaster_l has joined. 10:08:03 this code is bugging in ways I'm pretty sure it's impossible to bug... 10:10:06 -!- MigoMipo has joined. 10:14:29 * ehird debugs it with SISC 10:14:50 ahh 10:17:22 wait, no; that's a different issue 10:17:33 aargh, this is driving me insane! 10:19:45 Eh, I'll break my mind with the twisty interaction between CALL-WITH-CURRENT-CONTINUATION and DYNAMIC-WIND some other time. 10:21:17 * ehird downloads the six disks of Slackware 13.0 10:21:28 On the first day of Christmas my browser sent to me 10:21:31 Slackware thirteen oh 10:21:38 Install d1 issoh 10:21:52 And five hundred and ninety one megabytes in a file tree 10:22:09 *Install dee one issoh 10:22:26 I could, of course, just download the DVD file... 10:22:56 Amusing that one of the most barebones distro has really large ISOs. 10:23:22 Sigh. Fuck my slow internet connection. It's gonna take eight hours to download Slackware. 10:26:23 Ah. 10:26:30 The last three CDs are just sources. 10:43:46 -!- adam_d has joined. 10:45:54 -!- Gracenotes has quit ("Leaving"). 10:51:28 -!- Pthing has joined. 10:52:02 -!- Gracenotes has joined. 10:59:17 AnMaster <-- ? 11:03:03 -!- adam_d_ has joined. 11:04:07 lota 11:04:17 ehird, hm? 11:04:25 Intwitch ark. 11:04:39 Hey; I'm computerised now. I can hack Haskell 11:04:42 ehird, do you remember if 0.-2.0.29 for ick was same as 29.0.-2.0 in normal sense 11:04:48 LIFE IS JOYOUS 11:04:54 * AnMaster is updating the ick package for arch 11:05:08 AnMaster: ick to regular: reverse >> s/-/pre/ 11:05:35 ehird, just I'm having a headache here with a) versioning not increasing always b) pax 11:05:49 AnMaster: Just use the release date internally 11:06:00 ehird, for the package version. Hm maybe 11:06:11 AnMaster: Does Arch let you do 11:06:20 ver~somethingelse, where somethingelse is ignored? Or similar 11:06:21 PKGBUILD (c-intercal) W: Description should not contain the package name. 11:06:26 If so, just do releasedate~cintercalversionunmangled 11:06:45 ver~somethingelse, where somethingelse is ignored? Or similar <-- possibly, not that I know of though 11:06:48 AnMaster: Clearly they forgot to make it case-sensitive. 11:06:56 ==> ERROR: pkgver is not allowed to contain hyphens. 11:07:02 Try _ 11:07:14 AnMaster: Or . 11:07:23 ehird, there is already . in it 11:07:25 20100104.0.-2.0.29 11:07:35 As long as you increase the major version to the release date every time, the rest won't matter 11:08:27 ehird, well that - caused issues ;P 11:08:43 s/-/pre/ 11:14:44 -!- adam_d__ has joined. 11:15:32 grrrrr 11:15:49 I dont know wthe semantics are for a bunch of words I just use the identity function but that hardly makes sense 11:20:11 -!- adam_d has quit (Read error: 110 (Connection timed out)). 11:21:18 soupdragon: wat 11:21:23 wat 11:21:26 wut 11:21:33 * ehird does fun dependent-ish programming in haskell's type system 11:21:50 ehard 11:21:52 *Main> nonZero (undefined :: S Z) Full 11:21:52 () 11:21:53 *Main> nonZero (undefined :: Z) Full 11:21:53 :1:25: 11:21:53 Couldn't match expected type `NonZero Z' 11:21:53 against inferred type `Full' 11:22:15 im codin this article augur showed me using dependent types 11:22:18 admittedly that's basically the same as using a typeclass, but i liiiike it 11:22:51 -> Extracting ick-0.-2.0.29.pax.gz with bsdtar <-- why bsdtar I wonder 11:22:57 why not gnu tar or pax 11:23:11 -!- adam_d has joined. 11:23:18 soupdragon: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=15624#a15624 11:23:22 ch-ch-ch-check it out 11:23:38 next step: a safe vector 11:23:46 well 11:23:47 safe list first 11:24:28 cool 11:24:48 the snippet there can be done with typeclasses, but I like the agda-ish passing-the-condition 11:24:50 I think you can do this with a GADT too? 11:25:10 most likely 11:25:21 the nice thing about type families is... they're basically type functions 11:25:25 if you ignore the class/instance lines 11:25:31 it's just like a function definition in the type system 11:25:33 want a GADT challenge 11:25:39 shure 11:25:56 write the variadic function sum (I 3) (I 2) (I 7) X = 3+2+7 11:25:59 as many I as needed 11:26:00 bye 11:26:01 -!- soupdragon has quit ("Leaving"). 11:26:12 uh, bye 11:30:56 -!- adam_d_ has quit (Read error: 110 (Connection timed out)). 11:31:22 -!- adam_d_ has joined. 11:31:23 -!- BeholdMyGlory has joined. 11:33:48 To enable textual disambiguation of overlapping instances, we declare the equalities together (by transferring GADT syntax to type synonyms): 11:33:48 type TypeEq s t where 11:33:48 TypeEq s s = TTrue 11:33:49 TypeEq s t = TFalse 11:33:52 haha fucking sweet 11:37:58 -!- adam_d__ has quit (Read error: 110 (Connection timed out)). 11:43:11 ehird, that suggestion with release date won't work 11:43:22 packaging standards: 11:43:24 "Package versions should be the same as the version released by the author." 11:43:37 it's either that or it doesn't work 11:43:38 your choice 11:44:01 -!- adam_d has quit (Read error: 110 (Connection timed out)). 11:44:07 ehird, they suggested that minor "schema changes" might be okay. Which in this case would mean a boring 29.0pre2 11:44:18 except doesn't pre1 come after pre2 there 11:44:22 as in -2 followed by -1 11:45:12 yes 11:45:17 do pre(1/n) :P 11:45:51 ehird, nice idea 11:46:01 except would have to be written as decimal 11:46:05 yep! 11:46:26 29.0.pre0.5.0 11:46:34 YMMV :P 11:46:34 ehird, which might not always be exact. 11:46:48 * AnMaster points to -3 for example 11:47:03 then put the base in the version number! 11:47:10 say, as the last component 11:47:24 uh. how do you mean 11:47:40 well, 1/3 in base 3 is 0.1 right? 11:47:41 um, i think 11:47:54 so 29.0.-3 → 29.0.pre0.1.3 11:48:02 ehird, but it won't sort correctly if different bases are used for different versions, right? 11:48:03 where the .3 means "in base 3" 11:48:04 :-D 11:48:11 AnMaster: shush you 11:48:13 *shush you 11:48:19 anyway 11:48:21 just do what debian does 11:48:32 ehird, ~ isn't allowed it seems. 11:49:51 ehird, anyway the arch dev I was speaking with gave up at the information that pre2 came before pre1. " what the hell :D" 11:50:30 just do what debian does, google to see how they mangle it 11:50:32 they manage fine 11:52:39 class N n where toNum :: (Num m) => n -> m 11:52:39 instance N Z where toNum _ = 0 11:52:39 instance (N n) => N (S n) where toNum _ = 1 + toNum undefined 11:52:39 need to fill out a type for the toNum call in N (S n) :( 11:53:37 Could not deduce (N n1) from the context (Num m1) 11:53:38 sigh 11:55:06 technically -fglasgow-exts makes the type system tc 11:55:09 (can interpret lc) 11:55:10 i believe 11:59:49 i remember i used to know how to write this funcn 11:59:50 *func 12:23:18 *Main> undefined :: Fib (Fact (S (S (S Z)))) 12:23:19 type 8 12:23:23 More jawsome than a speeding astronaut! 12:23:27 AnMaster: Represent ↑ 12:23:35 ehird, ? 12:23:49 AnMaster: Haskell, there, is computing fib(fact(3)) ... in the type system. 12:23:54 As part of type checking. 12:24:00 ehird, do it in C++ templates ;P 12:24:21 Naw. Too easy. 12:37:34 hm isn't && and || non-original in C? as in, were added sometime after it become widespread but before C90 12:37:36 ehird, ^ 12:37:54 i think they were added before it became widespread 12:37:58 it used to be just & and | 12:38:00 ah 12:38:05 but && and || were added for associativity 12:38:10 ehird, I'm just considering why & won't work very well 12:38:13 | sure 12:38:15 a == b & c == d 12:38:40 -!- augur has joined. 12:38:54 for any values if(a | b) will take the same branch as if (a || b) (excluding possible side effects of evaluating a and b 12:39:01 but for & that won't work 12:39:11 as in 2 & 1 won't be the same as 2 && 1 12:39:15 ehird, ^ 12:39:35 no 12:39:39 it was purely for associativity 12:39:56 ehird, so how did they solve the issue with 2 & 1 not being a logical and 12:40:03 using !! ? 12:40:18 no 12:40:20 -!- soupdragon has joined. 12:40:22 by only doing bool & bool 12:40:24 hi soupdragon 12:40:40 i didn't solve your gadt thing, but I did make the type system execute fib(3!) 12:40:47 ehird, there are some functions in C that can return non-1/0 boolean values 12:40:56 AnMaster: don't use them in ifs 12:40:56 ehird, the stuff in ctypes.h comes to mind as a prime example 12:41:04 if(foo() > 0 & ...) 12:41:07 isalpha() or such 12:41:17 AnMaster: those are post-the-change 12:41:26 ehird, oh right 12:42:34 hey 12:42:58 type family Fact n 12:42:58 type instance Fact Z = S Z 12:42:58 type instance Fact (S n) = S n :* Fact n 12:42:58 type family Fib n 12:42:59 type instance Fib Z = Z 12:42:59 type instance Fib (S Z) = S Z 12:43:00 type instance Fib (S (S n)) = Fib (S n) :+ Fib n 12:43:02 pretty cosy in type land 12:43:23 -!- FireFly has joined. 12:44:10 you didn't solve the puzzle :P 12:44:14 indeed 12:44:35 what puzzle 12:44:42 gadt puzzle 12:44:44 i might solve it next 12:44:54 * AnMaster googles 12:45:12 no luck 12:45:19 ehird, ^ 12:45:25 AnMaster; write the variadic function sum (I 3) (I 2) (I 7) X = 3+2+7 12:45:26 maybe if we wanted to define the terms so you could understand we would have 12:45:29 using a GADT 12:45:42 no typeclasses or typefamilies or anything 12:45:56 terms AnMaster does not understand there: 12:45:57 - gadt 12:45:59 - typeclasses 12:46:01 - typefamilies 12:47:17 well if you don't know haskell this puzzle wont be fun 12:47:26 exactly :P 12:47:34 i think i've done basically the same thing before 12:47:38 lemme finish playing with this first 12:47:45 ehird, lemme get your opinion on something 12:48:39 shoot 12:48:57 -!- Asztal has quit (Remote closed the connection). 12:49:33 augur, is eat : (S\NP_sg)/NP the single correct category, and eat : (S\NP)\NP is just a hack that makes 'what does John eat' parse? (and so eat : (S\NP)\NP should be discarded) 12:49:43 i want to be able to draw diagrams in a webpage while having the HTML contain what seems to be some sort of code that describes the image 12:50:00 e.g. how wikipedia handles MathML or whatever 12:50:05 how do you think i should do this?? 12:50:46 soupdragon: both are correct in the little shitty model of questions, they're just different words 'eat' 12:50:55 one for statements, one for direct object questions 12:51:17 augur: wikipedia does TeX, not mathml 12:51:18 define diagram 12:51:29 ok TeX, whatever 12:51:40 and you want the unprocessed code to be valid HTML? 12:51:50 yes 12:51:51 is it being rendered before publishing or will some js magic transform it 12:52:02 thats part of the question i suppose 12:52:22 well if you want the latter and don't care about the "theory" jsmath does that for latex 12:52:30 ehird, fun thing: arch's clang package does not depend on llvm 12:52:32 let's say you want to embed http://ditaa.sourceforge.net/ diagrams 12:52:40 I haven't tried it without llvm installed. So not sure if it works or not 12:52:41 and process it before publication 12:52:43 I'd do this 12:52:58
12:52:58 ...ditaa source... 12:52:58
12:53:01 augur, so can you unify them into something else using bluebird? 12:53:05 transformed by some program to 12:53:20
12:53:20 or eat just has to have two different categories? 12:53:21 12:53:21 ...ditaa source... 12:53:21
12:53:21 with 12:53:26 .diagram * {display:none} 12:53:35 .diagram img {display:inline} 12:53:53 is that an answer? 12:53:55 ehird: i was actually thinking about doing something from scratch as the kinds of diagrams i need are sort of custom 12:54:01 http://ditaa.sourceforge.net/ 12:54:06 ditaa can handle anything you throw at it 12:54:37 including colours, curves, every box style in existence, many types of lines, weird point things, overlapping diagrams, ... 12:55:16 augur: if you have a stylesheet for non-graphical agents too that hides the img and shows the ditaa source, then the only unhandled case in my way is if the image doesn't load 12:55:19 but that's pretty edge-case 12:55:22 can it handle automatically calculated tree diagrams, symmetry-preseving graph diagrams, and attribute-value matrices? :) 12:55:44 i don't know 12:55:45 anyway 12:55:48 ditaa was just an example 12:55:50 you get the idea 12:55:51 yeah 12:56:18 Overlapping instances for Show () 12:56:18 arising from a use of `print' at :1:0-29 12:56:19 Matching instances: 12:56:19 instance Show () -- Defined in GHC.Show 12:56:19 instance (ToNum n) => Show n 12:56:19 whoopsy. 12:56:19 i just want an idea of what sort of thing you think i should do -- JS rendered, JS calling out to a server-side lib, or server-side preprocessing 12:56:24 soupdragon: restate your gadt problem again? 12:56:37 ehird what's not clear about it? 12:56:45 soupdragon: theyre just two different types 12:56:49 augur: well you can avoid js in this case and that'd support non-js agents, speed up page loading, etc 12:56:55 you dont use bluebird on them, you just do it like normal 12:56:56 like i showed 12:57:00 so i wouldn't go for js, i'd go for a tool that preprocesses the html 12:57:07 ok 12:57:09 augur how does it motivate going from CG to CCG then? 12:57:31 augur: i wouldn't do anything server-side either really 12:57:34 are these pages otherwise static? 12:57:45 soupdragon: because you'd need to expand your lexical inventory for _every_ kind of extraction site 12:57:57 ehird: yes 12:58:02 just do % diagrender < foo.html > upload/foo.html 12:58:07 on your local machine 12:58:13 wha 12:58:23 what do you mean, wha 12:58:24 oh you mean preprocess locally 12:58:28 yes. 12:58:38 no need to cause server/client side load when it's a trivial preprocessing step 12:58:57 i dont want to have to be at my machine to fix a mistake or something tho 12:59:13 i want it to just be transparent, as if the browser supports it 12:59:13 put the program on a usb stick :p 12:59:14 or ssh! 12:59:34 the extraction site in that example is the word "does"? 12:59:38 then do it with server side processing 12:59:44 cache it or w/e 12:59:54 soupdragon: restate gadt prob plz 12:59:59 ehird what's not clear about it? 13:00:04 nothing 13:00:07 soupdragon: no, the extraction site is the direct object "john eat ___" -> "did john eat ___" -> "what did john eat ___" 13:00:10 i just refuse to scroll up :) 13:00:24 write the variadic function sum (I 3) (I 2) (I 7) X = 3+2+7 13:01:06 soupdragon: its actually significantly worse that that tho: because extraction can happen in a wide range of places, you would actually have to have to change the types in an insanely convoluted fashion, possibly even having an infinite number of types for _every single word_ 13:01:12 soupdragon: can I just support Integer? 13:01:15 or do I have to use Num 13:01:35 Integer 13:02:03 and can I define other auxiliary types? 13:02:11 augur okay thanks! 13:02:13 yes ehird 13:02:32 the rule is just that you don't use typeclasses or any of those things 13:02:33 ehird, so i take it that you would prefer server-side preprocessing to anything else 13:03:17 soupdragon: i've done this before iirc, it involves a continuation argument I believe 13:03:33 augur: well js is entirely superfluous here and isn't always available/introduces page loading lag/etc 13:03:38 so server-side processing seems reasonable 13:03:39 true 13:03:59 but if JS is more convenient to implement that's fine too 13:04:03 now i have another question 13:04:10 your mom has another question 13:04:16 im basically going to be creating a custom graphics engine here, right 13:04:26 augur: you don't need to do that 13:04:32 no, i do, trust me. 13:04:34 soupdragon: also I can name it something other than sum can't I 13:04:42 augur: no, I won't trust you, because you're wrong 13:04:42 of cours... 13:04:44 soupdragon: (prelude clash) 13:05:15 by custom graphics engine i mean basically something that lets me define custom drawing constructs that unfold recursively, etc. 13:05:27 *Main> sumT (I 3) (I 2) (I 7) X 13:05:27 0 13:05:29 close 13:05:54 what i want to know is what sort of syntax i should give it 13:08:11 im confused :( 13:08:12 augur: is there something wrong with using data structures instead of strings? 13:08:15 that would be easier to manipulate 13:08:23 soupdragon: 13:08:24 *Main> sumT (I 3) (I 2) (I 7) X 13:08:25 12 13:08:31 how did you do it? 13:08:35 ehird: well, data structures cant be encoded into HTML. 13:08:48 or written in page's source code, rather 13:08:54 augur: put the diagram code into the html, and have a processor diagram→graphicsengine 13:08:55 presumably 13:09:07 soupdragon: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=15627#a15627 13:09:08 well thats what i was going to do, ehird :P 13:09:23 augur: so you want syntax for the diagram stuff, not the underlying drawing engine, presmuably 13:09:23 nice work that's exactly the solution I got 13:09:26 *presumably 13:09:27 the question is what do you think the diagram code should look like 13:09:35 soupdragon: i think it's pretty much the only solution 13:09:42 unless you allow the use of things other than gadts 13:10:02 because its going to need to permit custom definitions of functions, etc. 13:10:14 oh well I used an integer instead of continuation 13:10:21 but that's not a real difference 13:10:22 d'oh 13:10:35 i just did continuations cuz i always did in my vararg stuff, to allow for more generic uses 13:10:46 soupdragon: a challenge for you — implement: 13:11:00 foo 0 == 0 13:11:01 foo 1 3 == 3 13:11:01 foo 2 3 4 == 7 13:11:01 ... 13:11:12 you may define types and typeclass instances 13:11:16 but not define any typeclasses yourself 13:11:23 you can use GADTs too if you want 13:11:32 any opinions, ehird? 13:11:37 * ehird writes down his solution 13:11:42 augur: make it look functional-esque 13:11:48 :P 13:11:49 since it's essentially a functional program 13:11:59 of type drawing instructions, right? 13:12:03 your server side code is 13:12:12 draw :: diagram → drawing 13:12:18 pretty much 13:12:19 ehird but that's impossible unless you typeclasses isn't i t 13:12:22 so your input is of type diagram 13:12:30 soupdragon: you can define typeclass instances but not typeclasses 13:12:38 hm 13:12:43 augur: well 13:12:48 gimme an example you want to express, including a function 13:12:52 and i'll show you what syntax i'd use 13:12:55 you can use english 13:12:59 but as far as the syntax is concerned -- haskellish, rubyish, lisp-ish? 13:13:16 ok lets say i want to do a tree diagram, right 13:13:17 well is ease of parsing a concern? 13:13:23 if so, go for lisp, job done 13:13:42 no, i want it to be vaguely possible for others to use it tho 13:14:20 so suppose that [a b c] is a simply tree with "a" as the root node, and "b" and "c" as the two daughter nodes 13:14:37 soupdragon: oh, and you may use FlexibleInstances 13:14:48 augur: right 13:15:02 or where, lets say, [(a\nfoo) b c] is a tree where the root node has the two lines a, and foo, as the contents 13:15:03 etc. 13:15:32 soupdragon: although, hmm, I think an ideal implementation might not 13:15:38 also, you are allowed to use undefined 13:15:45 but if you don't need FlexibleInstances you don't need to use undefined 13:16:03 hmm, maybe 13:16:05 not sure 13:16:31 ehird I got for newtype Foo = Foo Integer 13:16:33 foo = Foo 0 13:16:39 maybe... 13:16:48 the code should be able to define a tree drawing algorithm so that drawing the tree [a [b c d] [e f g]] is done recursively 13:16:51 perhaps that doesn't work 13:17:56 e.g. equivalent to like branch("a", [branch("b", [leaf("c"), leaf("d")]), branch("e", [leaf("f"), leaf("g")])]) 13:18:11 augur: okay 13:18:23 augur: erm, describe the drawing algorithm to me 13:18:26 so that i can write the code for it 13:19:04 soupdragon: ugh, my solution has run into an overlapping instances problem :) 13:19:06 i know this is possib— ah! 13:19:08 * ehird has an idea 13:19:12 I can't do it because of flexible instance 13:19:19 lemme try something 13:19:21 I believe it is possible 13:20:58 ehird, i dont know. the point is that in this graphics language it should be possible to define something like leaf(_) or branch(_,_) that will be recursive functions that return little image objects that get composited together into larger units and so forth 13:21:18 i just need to know the general sort of syntax you think would make this clean and understandable 13:21:47 well gimme an example drawing instruction 13:21:54 its going to need to be vaguely powerful, unfortunately, but 13:21:56 your information is far too vague atm to give a good syntax 13:22:23 er. well ok, lets suppose we're doing a ruby-esque syntax for now, and we're defining some sort of tree algorithm 13:22:36 let me do this in a pastie 13:24:25 I can't do it! 13:25:28 soupdragon: maybe we should help each other, I keep honing on the solution but can't quite get to it 13:28:01 soupdragon: I have: 13:28:02 *Main> foo Zero 13:28:03 0 13:28:03 *Main> foo (Succ Zero) 1 13:28:03 1 13:28:04 *Main> foo (Succ (Succ Zero)) 1 2 13:28:04 3 13:28:09 so it's just a matter of somehow hacking this into a Num instance 13:28:12 so we can have fromInteger 13:28:25 hey that seems like it culd work 13:29:05 http://hpaste.org/fastcgi/hpaste.fcgi/view?id=15628#a15628 13:29:12 if we can fill in fromInteger, it'll work 13:29:33 note that that Eq instance is technically correct; as different N numbers have different types, and (==) takes two things of the same type, it's always true :) 13:29:44 of course the other Num functions are blatantly undefined 13:30:45 I have got 13:30:45 *Main> foo (1::Integer) (3::Integer) (6::Integer) :: Integer 13:30:45 10 13:30:53 but I can't omit any of the annotations 13:30:58 and it uses flexible instances 13:31:08 yeah that's just standard variadic stuff 13:31:18 instance Num n => Num (Integer -> n) where fromInteger x y = fromInteger x + fromInteger y 13:31:24 basing it on my thing is more likely to work, as it encodes the function type in the type 13:31:26 (and empty show/eq instances) 13:31:50 http://hpaste.org/fastcgi/hpaste.fcgi/view?id=15628#a15628 ;; can you think of a definition for fromInteger? 13:32:12 actually 13:32:15 maybe if you split it into two instances 13:32:17 i think you'll need separate num instances 13:32:18 yeah 13:32:20 lemme try 13:32:21 one for each constuctor of the GADT 13:32:56 *Main> fromInteger 0 :: N Integer 13:32:57 (freezes) 13:32:58 how peculiar 13:33:33 OH 13:33:38 fromInteger _ = 0 13:33:39 spot the stupid 13:34:27 augur cn you tell me some intro stuff for CCGs ? http://groups.inf.ed.ac.uk/ccg/publications.html is half dead 13:34:38 something that will explain what's going on with eat ... 13:34:40 whats to tell you beyond what i wrote? :| 13:35:43 I'm just confused about the step from CG to CCG, it seems to be motivated by some uglyness with eat - but even in CCG you still have two categories for eat? 13:35:55 no, you just have one 13:35:59 (S\NP)/NP 13:36:06 ah! okay that seems to fit better 13:36:11 where did you get two from? 13:36:17 augur: you haven't posted that pastie yet 13:36:22 'This solution is tremendously inelegant, however, because we’d have to posit a whole slew of different versions for the verb eat, just to handle the different kinds of sentences we get in English.' 13:36:23 ehird: i know :D 13:36:37 soupdragon: that wasnt in CCG! that was just in CG! thats the point! 13:36:42 okay :))) 13:36:48 let me try and parse it in CCG 13:37:49 class Nish a 13:37:50 instance Nish Integer 13:37:50 instance Nish a => Nish (Integer->a) 13:37:50 instance (Nish a) => Num (N (Integer -> a)) where 13:37:53 this instance is proving difficult 13:38:02 ehird: http://pastie.org/767377 13:38:13 incidentally Emacs is a lot nicer if you maximise it 13:38:23 woops 13:38:28 whoops what 13:38:34 ok sorry now 13:38:40 ? 13:38:47 the pastie 13:38:51 i misstyped something 13:38:54 ah 13:38:59 fix it then? 13:39:02 yes 13:39:19 ehird, oh? is it? both ways seems nice to me. Though I often use it in terminal, not X 13:39:21 ok, so I'm just gonna write something and maybe fiddle with it and the like 13:39:24 see if I can get something nice 13:39:34 where "maximised" doesn't make any sense 13:39:44 ehird: im trying to use a sort of SICP graphics language y feel to it 13:39:58 AnMaster: well for instance it splits vertically by default when maximised (assuming sane screen dimensions), and if you create three window thingies it splits like that 13:40:02 with functions like above, below, beside, etc, you know? 13:40:05 instead of just sticking to two 13:40:09 it feels more dynamic 13:40:16 augur: elaborate 13:40:17 you mean like 13:40:19 constraint solving? 13:40:24 no no just 13:40:25 you say 13:40:28 x is above y 13:40:31 z is next to x 13:40:33 well you remember how in SICP they have an imaginary image language where if you did 13:40:36 and the engine figures out the positions 13:40:38 (beside a b) 13:40:39 based on that 13:40:43 augur: i haven't read sicp, gotta be honest. 13:40:47 ah well 13:41:11 it took two images a and b and just sort of image-concatenated them so that the resulting image was just b immediately below a 13:41:25 ehird, hm okay 13:42:34 augur: so in your tree model a branch can have N>0 children right? 13:43:01 sure lets pretend that trees must have non-zero children otherwise its a leaf 13:43:04 what about the value in the branch, can that be any type? 13:43:13 or just a string? 13:43:14 sure 13:43:20 anything thats drawable 13:43:24 string, number, another image 13:43:25 i dont care 13:43:28 ah 13:43:33 but not every type is drawable, presumably 13:43:36 for instance, functions 13:43:42 good luck drawing a function 13:43:48 well thats up to the language 13:43:55 maybe if you tried to draw the function you'd get the source 13:43:55 right, but the point is 13:43:58 using haskell terminology 13:43:59 it isn't like 13:44:01 or !proc 13:44:02 or something 13:44:03 forall a. a -> 13:44:04 it's 13:44:04 i dont know 13:44:08 Drawable a => a -> ... 13:44:14 sure whatever 13:44:30 good luck drawing a function <-- generate a flow diagram ;P 13:44:38 an infinite flow diagram! 13:44:48 leaf is Drawable a => a -> Image 13:44:53 ehird, yes quite :D 13:45:00 branch is Drawable a => a -> [a] -> Image 13:45:17 technically, we could represent this as "everything is a branch" 13:45:28 where branch=list of 1+ elems 13:45:30 sure but i dont wanna ;) 13:45:32 leaf = ["abc"] 13:45:38 branch = ["abc","def","blah"] 13:45:49 whatever 13:45:53 augur: the reason I said this is 13:45:54 I was writing 13:45:56 type Tree 13:45:57 Leaf :: Drawable -> Tree 13:45:57 Branch :: Drawable -> List Tree -> Tree 13:45:57 end 13:46:02 but then I realised, this is the same as just having Branch 13:46:08 if the list is empty, it's a leaf 13:46:17 i mean, ideally 13:46:44 what i'd like is for this language to allow TeX esque library functions that can accept custom syntax 13:47:02 custom syntax is rarely needed if your syntax is good enough 13:47:25 eg. in qtree you can just do \Tree [.a [.b c d] [.e f g]] 13:47:27 augur: so, trees should be drawable, obviously, right? 13:47:37 (amusing consequence: you can have leaves that are trees) 13:47:51 you can have NODES that are trees! :) 13:47:54 tree() is the function that draws a tree, in yours 13:47:56 amirite 13:48:05 yep 13:48:09 so you can, in principle, do like 13:48:25 -!- soupdragon has quit (Read error: 104 (Connection reset by peer)). 13:48:25 also, you don't mind me slightly changing the semantics to try and get a nice syntax right ;) 13:48:33 as in, same results 13:48:37 but different in-language semantics 13:48:38 tree [tree([a,b,c]), tree([1,2,3)], tree([:x,:y:,z:])] 13:48:46 -!- soupdragon has joined. 13:48:46 change the semantics how you want 13:49:04 im just thinking the easiest way to do it is to have functions like above/below/beside/etc. 13:49:12 sure, not changing that part 13:49:20 just flexing my awesome language designer muscles to MAKE CODE BETTER 13:49:23 really, what i guess these would really be, is magic data structures 13:49:43 where like, text_cell(text, width=:auto, height=:auto) 13:50:06 is really just a constructor for something like, say, { :text => text, :width => width, :height => height } 13:50:41 below(a,b) is really just a constructor for say { :type => :below, :top => a, :bottom => b } 13:50:51 augur I can't find a CCG parse of "What does John eat" :( 13:51:12 I must have the categories of these words wrong. 13:51:22 and so forth, and the engine knows what it means to Show these things 13:51:36 * soupdragon looks for some kind of lexicon 13:52:11 soupdragon: lets do PMs so we dont flood the channel 13:54:31 width = subtrees.inject(0) { |c,x| c + x.width } 13:54:43 imo this is a flaw of your drawing system; with a constraint-based system this would be worked out automatically 13:55:25 sure, that really wasnt necessary actually :p 13:55:39 well no maybe not actually 13:55:54 my crazy inner language designer is adding features never seen before to your language btw :P 13:55:56 well, one feature 13:55:56 for this particular example maybe 13:56:03 awesome :D 13:56:04 that happens to serve the purpose of two features in other languages! 13:56:22 specifically, it handles both haskell-typeclasses and haskell-data-declarations 13:56:43 : 13:56:44 :P 13:56:58 so in your thingy below takes a bunch of images and puts them one after another vertically 13:56:59 right? 13:57:39 yep 13:57:48 you'd have options for left aligned, centered, right aligned 13:57:55 what's after, like below but horizontally? 13:57:55 justified 13:58:00 yeah 13:58:08 mind if I name that "beside" 13:58:15 no i dont care 13:58:40 im also thinking that the images, as composite data structures, should permit two things 13:58:43 -!- Asztal has joined. 13:59:07 general bounding boxes as well as n-recursive bounding rects 13:59:29 as well as path-level bounding shapes 13:59:41 so just to check are you sure you don't want a constraint system :) 14:00:09 well maybe i do! i dont really know 14:00:35 good, you do, i will incorporate that in my snippet 14:00:40 :p 14:00:44 whatever you want 14:00:55 im going to start a github for this 14:00:59 augur: basically all it means is that instead of working diirectly with images and each function like below laying them out itself, 14:01:12 below actually just generates a list of constraints like this: 14:01:22 for below(x,y,z): 14:01:42 it should be arbitrarily many items, mind you 14:01:49 yes 14:01:50 { y.top >= x.bottom, 14:01:50 z.top >= y.bottom } 14:01:52 tho i guess that can preprocess out 14:01:56 see how that works? 14:02:03 sure 14:02:08 maybe it should be = instead of >= tho 14:02:20 well, "below" would simply mean 14:02:21 "is below" 14:02:28 if you didn't put anything in between later 14:02:32 it'd be == 14:02:36 *if you 14:02:41 oh i suppose 14:02:41 but the composability of constraints is the cool part, so. 14:02:47 anyway, the constraint engine is basically like prolog except a lot simpler 14:02:59 howre the constraints composable now? 14:03:02 it handles a bunch of constraints and works out what arrangements satisfy it 14:03:02 well how about this 14:03:07 and picks the "best" one, per some metric 14:03:10 you come up with some ideas, and show why its cool 14:03:11 and all other constraints just reduce to that 14:03:21 augur: no i'm just going to assume you want it and code as if you do :) 14:03:30 lol 14:03:37 right but show me why its nifty like that 14:03:59 because im not entirely sure im following your reasoning about why this is useful 14:04:31 i can't really show an example off the top of my head, but when it's useful it is :P 14:04:43 i mean 14:04:50 you never have to futz with widths or manual placement or anything 14:05:08 well, in some cases you might need to tho i think 14:05:11 you just have to know, this has to be above this, this should be at the left edge of this, this should overlap this and this 14:05:16 but show me cases that eliminate this 14:05:17 and the computaah figures it out for you 14:05:23 no, i'm translating your pastie 14:05:27 and if you keep talking i won't be able to 14:05:31 :P 14:05:52 what exactly is the point of your triangle call in branch() 14:05:55 does it actually display anything 14:08:16 a triangle instead of branch lines, because im too lazy to figure out how the branchlines should be calculated :p 14:08:36 http://ironcreek.net/phpsyntaxtree/ 14:08:38 draw that tree 14:08:38 okay so this is tree drawing, psychedelia edition 14:08:44 where you can't tell which branches are which :D 14:08:46 and notice the triangle under NP_2 14:08:50 sure :d 14:08:51 :D 14:09:03 oh i see 14:09:07 the triangle stops just before the children 14:10:03 actually, (0,50) is kinda arbitrary, I think this will break if you have a nested tree... like any decent tree 14:11:06 it is indeed arbitrary 14:11:09 i just wanted a number 14:11:14 yes but 14:11:22 let's say you have 14:11:48 ["foo",["abc","def","blah"],["fff","ggg","zzz"]] 14:11:58 the triangles under abc and fff will overlaap 14:12:02 *overlap 14:12:05 instead of being side by side 14:12:06 no? 14:12:21 right 14:12:28 oh, no sorry 14:12:34 well 14:12:40 yes over the abc nodes right 14:12:45 one bit triangle 14:12:49 ok wait lemme draw 14:12:59 that is as wide as the whole image, with those two things just below it 14:13:11 (using the definition i gave for this, anyway) 14:15:37 http://pastie.org/767427 14:18:39 no? 14:19:06 actually, given how i defined it, it'd be more eh 14:20:12 http://pastie.org/767431 14:20:18 just by how i defined it 14:20:25 ok, so it does handle that 14:20:28 because the upper triangle fully spans the lower images 14:20:31 yes, it does 14:20:47 i need to look at your code more carefully, then translate it to constraints ;) 14:21:41 augur: so the triangles are always 50 high? 14:21:48 50px? or does it scale 14:22:04 sure, always 50 14:22:07 in this one 14:23:33 whatevers easiest 14:23:35 it doesnt matter 14:23:40 this is an unrealistic definition anyway 14:24:09 ideally the triangles should only be as wide as necessary to cover all the root nodes of the subtrees and no wider 14:28:09 http://pastie.org/private/pzgtz8nyegfgpsbn1lcdq 14:28:09 First attempt. Note something interesting here: width(subtrees) doesn't return a number, since it isn't known until draw time. Instead it returns an abstract object, so that in the end it turns into constraints like { triangle.p1.x == subtrees.width }. 14:29:13 Er, *subtrees.width/2 14:29:46 -!- FireFly has quit ("Leaving"). 14:29:59 yeah 14:30:39 Also note the interesting below[] call. Since most function arguments are tuples, i.e. f(x,y) is f (x,y), we do variadic functions by instead passing a list. 14:30:52 Cute syntax ensues. 14:32:26 The syntax is a bit too (())ish for me. 14:32:29 But it's a start. 14:32:37 And it has my Mystical New Feature. 14:32:41 (groups) 14:33:13 ill look it over 14:33:25 i cant do anything significant right now tho, im about to leave for the airport 14:33:34 YOUR MOTHER is about to leave for the airport. 14:33:59 no shes not 14:34:04 OR IS SHE 14:34:08 she isnt. 14:34:50 OR IS SHE 14:36:04 I fail making semantics for "and" :( 14:41:45 soupdragon: any progress on the foo function? 14:42:40 byeee 14:42:45 -!- somebody_ has joined. 14:43:05 grrrrrrrr 14:43:17 -!- soupdragon has quit (Nick collision from services.). 14:43:20 -!- somebody_ has quit (Remote closed the connection). 14:43:32 -!- soupdragon has joined. 14:45:30 soupdragon: any progress on the foo function? 14:46:46 I gave up ehird it's too hard 14:46:54 :( 14:46:56 you should just allow type annotations :) 14:47:59 I cannot build a semantic domain without modelling untyped lambda calculus :[ 14:48:08 semantics of "and" is givin me problems 14:53:13 -!- MigoMipo has quit ("co'o rodo"). 14:53:25 soupdragon: fine, i allow type annotations, but your function didn't do what i asked 14:53:32 the first parameter to foo is the *number of arguments it will take* 14:59:02 oh really 14:59:07 I didn't get that 14:59:49 -!- augur has quit (Read error: 110 (Connection timed out)). 15:00:35 I think there is a way to compute types from values like this using typeclasses 15:00:49 not totally sure about the details but I saw some odd trick in #haskell one time 15:03:13 as I said 15:03:16 well 15:03:18 I guess it wasn't clear 15:03:22 but yeah, that's the idea 15:03:35 you need to have some Num that you defined that lets the first argument be one of your types 15:03:43 so you can encode what you need into the type 15:08:49 http://plasmasturm.org/log/542/ 15:08:50 I wonder what a language based around caching would look like. 15:11:49 "During the summer of 1981, my work on TeX began to consume so much time that I had to stop answering mail about The Art of Computer Programming. I began to set all such incoming mail aside and to send form-letter replies: ``Thanks, I'll get back to you soon.'' 15:11:49 Finally I was able to go through all the letters accumulated during a 15-year hiatus[…]" —Knuth 15:15:10 im totally stumped wrt semantics of "and" 15:15:25 it seems like the only way to tackle this is to use untyped lambda calculus 15:15:34 but simple types are so much simpler.... 15:28:09 soupdragon: is it strongly typed LC? 15:28:16 that's not TC, you need fix 15:28:23 I don't want TC± 15:28:24 I don't want TC! 15:28:27 alrighty then 15:28:29 what's the issue 15:28:34 but I think I have to have it 15:28:34 I wish http://arcanesentiment.blogspot.com/ posted more 15:28:44 soupdragon: have you considered LC+dependent types 15:28:52 (let's traverse the lambda cube until we find something that'll work :P) 15:29:13 it was going really well with simple types, until AND came along and ruined it 15:30:13 the problem is this, 15:30:20 if AND : Sem -> Sem -> Sem, 15:30:26 define Sem 15:30:35 data Sem : Set where 15:30:41 CAT, DOG, MARY, JOHN : Sem 15:30:50 RUN : Sem -> Sem 15:31:04 -!- augur has joined. 15:31:06 SEE, EAT, LOVE : Sem -> Sem -> Sem 15:31:13 p hai 15:31:25 o hai* 15:31:26 hi 15:31:32 å hai 15:31:32 soupdragon: whatve you been up to? :) 15:31:36 :D 15:31:49 im puzzling over semantics 15:31:50 btw, for NP conjunction 15:32:13 you dont conjoin NPs directly but rather their lifted counterparts 15:32:26 ehird, so the problem is you can do stuff like AND CAT DOG, but you can't have AND (\x -> LOVE x) (\x -> EAT x) 15:32:30 let NP' = S\(S/NP) 15:33:08 soupdragon: so the basic issue is, x is like 15:33:09 "I love it" 15:33:10 right? 15:33:11 ehird, but if I set Sem ~ Sem -> Sem, then I model untyped lambda calculus and that means I don't know if anything terminates 15:33:12 it=x there 15:33:20 "I love it and I eat it" 15:33:20 and : (NP'\NP')/NP' = \q.\p.\r.p(r) & q(r) 15:33:25 Mary loves and eats dogs 15:33:28 what was the command to explain a C type. It slipped my mind 15:33:29 → AND (\x -> LOVE x) (\x -> EAT x) 15:33:31 soupdragon: ah, I see 15:33:34 AnMaster: cdecl 15:33:38 ehird, thanks 15:33:43 soupdragon: (disturbing example) 15:33:47 soupdragon: is make sense? 15:33:48 ffs, not in arch 15:33:52 * AnMaster looks in aur 15:33:59 AnMaster: http://cdecl.org/ 15:34:00 enable js 15:34:01 you're welcome 15:34:08 ah it is in aur 15:34:15 augur: well my and is (X\X)/X, and that's just one instantiation right? 15:34:19 soupdragon: so, are you averse to introducing typeclasses? 15:34:26 ehird, someone ported it to js? 15:34:32 AnMaster: it's ajax i think 15:34:35 soupdragon: indeed, thus we have a big of a tricky thing dont we! 15:34:37 ah 15:34:45 YES 15:34:48 oops 15:34:50 soupdragon: i'd model this as 15:34:50 class AND a 15:34:50 instance AND Sem where AND = ... 15:34:50 atleast if you want consistent semantics 15:34:51 instance AND a => AND (Sem -> a) where AND = ... 15:35:02 soupdragon: or, if you want to introduce dependent types... 15:35:13 you can let it be what it is, and force conjunction to be, semantically, (a -> b) -> (a -> b) -> (a -> b) 15:35:20 you could have IsSemType 15:35:20 this would _force_ NPs to type-lift 15:35:21 and the like 15:35:23 and take a type 15:35:57 augur, so the semantics of Mary loves cats and dogs would be and(love(mary,cat),love(mary,dog)) ? 15:36:05 yes 15:36:06 rather than love(mary,and(cat,dog)) 15:36:13 right 15:36:17 that sounds good 15:36:21 why didn't I think of that :( 15:36:22 soupdragon: or, here's an idea 15:36:24 instead of 15:36:27 what you said 15:36:27 do 15:36:37 (\x -> AND (LOVE x) (EAT x)) 15:36:46 exactly 15:36:54 for verbs you'd just conjoin the verbs by forking over & 15:36:58 you could do that programmatically and the like really 15:37:10 with cats and dogs, you turn the nouns into functions that you can fork over & 15:37:17 in applications, take all functions and replace them with their bodies, then add their parameters to the whole expression 15:37:58 soupdragon: if you want to make a single system that will uniformly handle a large chunk of a language, tho, it becomes _INCREDIBLY_ tricky 15:38:10 I bet :) 15:38:40 hmm 15:38:47 I wonder if you could make a language based on functions bubbling up like that 15:38:47 Paul Pietroski has whats called a conjunctivist model 15:38:54 so what we're using right now is a functionist model 15:39:02 as in, f (\x -> ...) turns into (\x -> f (...)), always 15:39:03 where everything is function application 15:39:31 ehird -- ive thought of things roughly like that 15:39:45 only slightly reverse 15:40:29 so 15:40:33 soupdragon: pietroski's approach is one in which the only semantic composition rules are conjunction of predicates 15:40:41 and conjunction-over-closure of predicates 15:40:43 plus = \m,n. m SUCC n 15:40:46 augur I just bookmarked a search for it 15:40:47 expand SUCC 15:40:51 e.g. 15:40:56 plus = \m,n. m (\n,f,x. f (n f x)) n 15:40:58 bubble up 15:41:00 eat = \x.eating(x) 15:41:10 john = \y.john(y) 15:41:17 plus = \m,n,n',f,x. m (f (n' f x)) n 15:41:27 dance = \x.dancing(x) 15:41:28 god knows what that does 15:41:40 'eating and dancing' ~ \x.eating(x) & dancing(x) 15:41:53 well, eat and dance* 15:42:27 John eats and dances = \x.eating(x) & dancing(x) & Ey[actor(x,y) & John(y)] 15:42:33 the model soupdragon said 15:42:33 thatt is 15:42:40 AND (\x.LOVE x) (\x.EAT x) 15:42:42 doesn't even make sense 15:42:47 because the two arguments could differ 15:42:51 *that is 15:43:06 ehird, actually you can make it work like in a pietroskian system 15:43:19 where the _participants_ of actions are not expressed as in eat(John,pizza) 15:43:37 but rather as in eat(e) & eater(e,John) & eaten(e,pizza) 15:43:44 where e is 'the event of eating' 15:44:26 Donald Davidson proposed this account so that statements like "John ate the pizza quickly" can make some amount of sense 15:44:29 if semantically this was just 15:44:35 -!- MigoMipo has joined. 15:44:37 quickly(ate(John,pizza)) 15:44:44 and if ate(John,pizza) == true 15:44:47 then this is quick(true) 15:44:49 which is nonsensical 15:45:10 because it "means" the same thing as quickly(danced(Susan)) if danced(susan) == true 15:45:28 so davidson said, lets just use variables that denote the event or action 15:45:50 and you get quickly(e) & eating(e) & eater(e,John) & eaten(e,pizza) 15:45:57 but can't quickly(ate(John,pizza)) make sense? 15:46:07 not if you have referential transparency 15:46:15 imagine this haskell 15:46:27 suppose ate(John,pizza) = a video of john eating pizza 15:46:27 and ate(John,pizza) is of type Thing -> Thing -> Bool 15:46:39 then quicky(a video of john eating pizza) = a video of john eating pizza played at 2x speed 15:46:59 sure, but then you'd need it to be of type Thing -> Thing -> Thing 15:47:09 and in normal logic, everything is taken to be ... -> Bool 15:47:15 okay 15:47:25 but thats ok right 15:47:38 because if ate(John,pizza) is Thing -> Thing -> Event 15:47:40 lets say 15:47:48 we can make it logicy 15:47:51 the thing with quicky(e) & eating(e) ... is sort of like a constraint program, at least superficially 15:48:11 by doing ate`(John,pizza,e) :: Thing -> Thing -> Event -> Bool 15:48:13 soupdragon, it seems slightly similar to predicate logic to me 15:48:22 AnMaster: it IS predicate logic :p 15:48:30 augur, oh why didn't you say that 15:48:38 ate`(John,pizza,e) :: Thing -> Thing -> Event -> Bool -- aha!!! 15:48:39 soupdragon: and ofcourse this just makes it obvious that you've got this extra event variable 15:48:44 augur, I thought that no one would discuss something as trivial as that in here ;P 15:48:51 right I see that's cool 15:48:55 with ate :: Thing -> Thing -> Event, you'd end up doing stuff like 15:49:05 what is Thing? 15:49:09 let e = ate(John,pizza) in quickly(e) & in_the_kitchen(e) 15:49:16 AnMaster: the type for things, people, stuff, etc. 15:49:16 John and Pizza and such? 15:49:20 ah 15:49:31 but notice, soupdragon, that you're still, ultimately, predicating of the event 15:49:41 yes 15:49:49 augur, but what is the type of quickly? 15:49:54 or ate 15:49:57 AnMaster: Event -> Bool 15:50:13 augur, can you describe those in a "meta"-way 15:50:13 ate` with the davidsonian account is Thing -> Thing -> Event -> Bool 15:50:47 AnMaster: you can make quickly() a special-form of your logic, in the same way that cond is a special form of lisp 15:50:57 you could make _Everything_ special forms 15:51:20 but its nicer if we can bring our knowledge of pred-calc to bear on this 15:51:26 augur, I haven't followed the entire convo here, so not sure of the scope of what you try to describe. But I was considering something like "ate is the past tense of eat" 15:51:30 i mean, if you have special forms, you have to define a whole new logic 15:51:34 its much nicer to just use what we have 15:51:45 of course I guess they are then thinks 15:52:03 ate-is-the-past-tense-of-eat can actually be seen as like 15:52:12 "ate" is really two things 15:52:19 eat and -ed 15:52:28 eat = \e.eating(e) 15:52:32 -ed = \e.past(e) 15:52:44 conjoining them, eat-ed = \e.eating(e) & past(e) 15:52:56 and thenw e just say that the morphology of english turns eat-ed into ate 15:53:01 ok im off for the flight guys 15:53:01 see ya 15:53:06 AnMaster: It's not predicate logic, it's linguistics. 15:53:08 They're just isomorphic. 15:53:12 augur, eating implies "right now" iirc. What about "I often eat pasta but right now I'm eating spinach" 15:53:15 bye augur!! 15:53:25 that's awesome putting morphology into it 15:53:57 augur, feel free to add in "ate" there as well ("and yesterday I ate nothing") 15:54:07 He's gone. 15:54:08 -ing = \e.currently(e) 15:54:14 ah right missed that 15:54:23 I just made that a rule 15:54:26 since it's plausible 15:54:38 -s = \e.pluraly(e) 15:54:43 soupdragon, what about "eating fruit is good for you", not "currently" there 15:54:47 stuff like that I guess 15:54:47 fuck 15:54:50 of course English is a mess 15:54:51 I wanted to ask augur anothing thing 15:55:01 hm that's true 15:55:04 (most natural languages are) 15:55:11 I am not sure what ing should be 15:55:36 soupdragon, English is ambiguous. This would probably have worked better with lojban or something 15:56:11 so what I wanted to ask about was.. backtracking a bit 15:56:34 I have the rule and : (X\X)/X (X is a variable) 15:57:02 -!- oerjan has joined. 15:57:20 oerjan, hi 15:57:33 hi AnMaster 15:57:40 this idea about bubbling in the semantics, AND f g being written as \x.AND (f x) (g x) could be done by restricting the variable X to a ground type {N,NP,PP,S}? 15:58:09 * AnMaster is wondering why these two programs listing almost right after each other render with different letter spacing 15:58:15 everything whos interpretation is typed Sem 15:58:22 both have same settings 15:58:30 * AnMaster prods LaTeX 16:04:10 -!- MigoMipo has quit (Remote closed the connection). 16:07:36 you know it's pretty hard to build these derivation trees by hand 16:08:57 derivation bonsai 16:09:55 AnMaster: lol@"this would have worked better with lojban" 16:09:59 this is standard linguistics, dude 16:10:04 it works perfectly well for english 16:10:41 this is the best 16:13:05 -!- augur has quit (Read error: 113 (No route to host)). 16:13:48 ehird, so what type or whatever is the -ing ending? 16:13:56 (wrong terminology probably) 16:13:58 why are you asking me 16:13:59 yeah what are semantics of -ing 16:14:06 ask augur, he's the linguist 16:14:09 or soupdragon 16:15:33 liftA2 = S combinator? 16:15:38 no 16:15:43 ehird, since you indicated it worked quite well in English 16:15:45 just above 16:15:49 AnMaster: lol@"this would have worked better with lojban" 16:15:49 this is standard linguistics, dude 16:15:49 it works perfectly well for english 16:16:04 ehird, so I assume you know how it works, or can't you back up your claim? 16:16:14 what bird is Q? Qafgx = a(fx)(gx) 16:16:18 you were saying that formally representing english is unreasonable, and lojban would be a better choicee 16:16:21 *choice 16:16:25 no 16:16:28 i provided a counterargument, being: 16:16:31 the ENTIRE FIELD OF LINGUISTICS 16:16:31 not exactly 16:17:03 ufff this is way too complex lol 16:17:12 I thought it clear that formally representing natural languages (such as English) was effing hard, but not too unreasonable. 16:17:20 (as demonstrated by it having been done) 16:17:29 It's not effing hard 16:17:31 It's basic linguistics 16:17:36 I'm trying to get a derivation of John loves and Mary hates pizza 16:17:45 soupdragon : It is a queer bird 16:17:45 such that and is used only with ground cats 16:17:52 -!- poiuy_qwert has joined. 16:17:55 I just picked Q at random 16:18:06 ehird: ... I may be calling linguistics effing hard. :P 16:18:15 your mom is effing hard 16:18:16 what am I even asking this here I have the mockingbird book next to me :( 16:18:20 i suppose that implies she's a hermaphrodite 16:18:21 soupdragon: S combinator is ap 16:18:40 or <*> 16:18:52 Or liftM. 16:19:00 no! 16:19:07 ? 16:19:15 liftM is not the same as ap 16:19:39 Sure enough: ap = liftM2 id 16:19:41 it's the same as fmap or <$> 16:20:09 I was... Not thinking straight. 16:20:22 liftM2 id is not = liftM 16:20:34 on fig. 28 and is used with X := S/NP 16:20:41 * pikhq nods 16:20:47 but I need to re-derive it such that X is one of {N,NP,PP,S} 16:23:03 soupdragon: otoh, your Q is liftM2, i think 16:23:15 (or liftA2) 16:23:37 or was that how you got it in the first place 16:25:32 well the thing is might be on the wrong track all together 16:25:58 I was thinking of Qafg, but maybe it's better to find some < and > such that Qafg = fg 16:26:09 but f and g might need lifted 16:26:42 f and g are John loves and Mary hates 16:27:05 (John loves and Mary hates) $ pizza = John loves pizza and Mary hates pizza 16:27:27 well > could be <*> 16:28:28 < is flip (<$>) i think 16:28:47 i don't recall that having a name 16:29:47 there is also the on function 16:30:37 (op `on` f) x y = f x `op` f y 16:37:31 maybe I should implement the parser then run it on this... and I won't have to work so hard trying to figure it out 17:00:22 -!- ehird has quit. 17:01:54 -!- lament has joined. 17:10:14 -!- ehird has joined. 17:10:23 acquire ten dubloons 17:10:56 John loves and Mary hates → (\x. AND (LOVES JOHN x) (LOVES MARY x)) 17:10:56 imo 17:11:08 or LOVES x JOHN/MARY, w/e 17:11:34 hard to actually find a derivation that parses John loves and Mary hates 17:11:46 unless you allow AND (LOVES JOHN) (LOVES MARY) 17:12:16 I might need some generalized bluebird or something 17:12:27 apparently there's an algorithm for this 17:13:40 -!- lament has quit. 17:17:39 soupdragon: well 17:17:40 just do 17:17:53 if you have a function where a non-function is expected in an expression 17:17:58 extract the function to the expression 17:18:14 so AND (LOVES JOHN) (LOVES MARY) would turn into (\x -> AND (LOVES JOHN x) (LOVES MARY x)) 17:18:18 simple 17:18:36 that doesn't typecheck though 17:18:47 do it before typechecking 17:18:56 there's no such thing as before typechecking :P 17:19:04 your mom 17:19:37 want to see my code 17:19:40 ? 17:20:35 so AND needs to be applicatively overloaded? :) 17:22:01 hm wait that won't work, the base case doesn't fit 17:22:36 im not even sure really I understand what hmmm 17:22:50 maybe and : (X\X)/X works just fine 17:23:44 hm yes 17:24:03 the thing is... and = \pq.(p,q) : (X\X)/X only makes sense when X is ground 17:24:33 and = \pq.\x.(px,qx) : ((X/A)\(X/A))/(X/A) 17:24:48 and = \pq.\xy.(pxy,qxy) : ((X/A/B)\(X/A/B))/(X/A/B) ...etc 17:25:00 dammit this just doesn't fit in with the rest of the framework 17:28:11 hm does anyone know if openmp is just suited to number-crunching style workloads. Rather than, say, different threads doing different things, sometimes idling (think a server with threads, or a GUI program with backend threads and GUI threads) 17:28:19 * AnMaster suspects ehird is most likely to know 17:29:26 OpenMP seems number-crunching oriented to me. Use pthreads to clone Plan 9/Go's thread API; that'd keep you sane. 17:29:47 (Using pthreads directly is on my list of Ten Ways to Torture Your Mortal Enemies In Hell.) 17:32:07 ehird, pthreads seems quite a pain yeah 17:32:32 ehird, also what about *implementing pthreads* 17:32:35 wouldn't that be worse? 17:32:38 Ouch. 17:32:40 Well, not really. 17:32:44 pthreads is very low level. 17:32:50 Anyway, Plan 9/Go's thread API is *really* nice. 17:35:56 anything worse than "use pthreads" 17:36:00 on that list 17:36:01 ehird, ^ 17:36:10 Not sure. 17:37:06 ehird, is the list even specified in full ;P 17:37:14 Abstract operations of Plan 9/Go's threading API: spawn { code } — run code in a new thread. make_chan(type[, bufsize]) — return a new channel containing values of type. send(chan, val) — send val to chan. If the channel has a bufsize, and the buffer of that size is not full, append to that buffer; otherwise, block until a recv() happens. recv(chan) — receive a value from chan. 17:37:30 ehird, no shared memory? 17:37:42 Well, if you have a global you can mutate it in two threads at once. 17:37:46 while dirty, in some specialised workloads it performs much better 17:37:48 But that would be dumb. 17:37:53 You can do it if you want, though. 17:38:00 ehird, I'm thinking merge sort with multiple threads 17:38:07 -!- virtue has joined. 17:38:15 So we can use channels as completion signals: 17:38:15 c = make_chan(bool); spawn foo(c); recv(c); /* assuming the value doesn't matter */ 17:38:22 Or to return the results of computation (obvious) 17:38:31 We can have multiple channels per thread 17:38:34 And multiple threads per channel 17:38:36 ehird, as for those globals, could you store a pointer to a malloced block in there? 17:38:44 AnMaster: Sure; they're regular threads. 17:38:47 Same memory space and everything. 17:40:07 -!- virtue has left (?). 17:41:16 int pixels[x][y]; 17:41:17 chan(int) workers[x][y]; 17:41:17 for(x=0;x for(x=0;x ↑ e.g. mandelbrot or other embarrassingly parallel task 17:41:56 you could actually use the spawn syntax in gcc 17:42:35 #define SPAWN(x) void _f(void) { x; }; spawn(_f) 17:42:37 or whatever 17:44:36 ehird, hm so malloc() there is thread safe? 17:44:52 Depends on if your libc's malloc is thread safe, doesn't it? 17:45:12 You can do whatever you want inside a thread. 17:45:34 * ehird tries to find the Go parallel mandelbrot to translate it to C+Gothreads 17:45:38 (technically goroutines) 17:46:02 also, since the threads are used very lightly — e.g. for every pixel in that mandelbrot — starting a 'real' thread for each one may not be so good 17:46:10 not sure how much overhead pthreads has 17:46:25 is it reasonable to start 100,000,000 pthreads? 17:46:32 (to generate a 10,000x10,000 mandelbrot) 17:47:40 AnMaster: oh and btw, this concurrency model is just the pi calculus 17:48:46 mhm 17:48:53 * ehird wonders if returning an array is like returning a struct, or like returning a pointer 17:48:55 Depends on if your libc's malloc is thread safe, doesn't it? <-- well the plan9 one I meant 17:49:01 knowing c's retarded array handling, probably the latter *sigh* 17:49:04 AnMaster: sure 17:49:24 ehird, as for returning array. Is that allowed? 17:49:36 well, for fixed size it might be 17:49:39 ehird: That concurrency model is quite nicely simple. 17:50:30 ehird, isn't a struct returned as a pointer to a caller allocated space on stack for it. As in a pointer to it is passed as a hidden extra argument in %rax or somewhere (forgot where) 17:50:37 * AnMaster looks for his AMD64 abi pdf 17:50:45 struct is returned on the stack i believe 17:50:57 i.e. returning struct{int a,b;} is like returning two values (int,int) 17:51:24 * ehird wonders how to declare returning an array 17:51:28 int[width][height] foo()? 17:51:37 int foo()[width][height]? 17:51:41 is it even possible? 17:52:30 * ehird just requires the caller to pass in a pointer :P 17:53:16 In C? No, you can only return a pointer or a struct 17:53:30 Deewiant, or a scalar 17:53:48 hmm... is it possible, given a [][], to turn that into a ** reasonably? &ary doesn't work, it would produce *** i think 17:53:57 just passing it to a func will copy it 17:54:23 AnMaster: I meant, in place of an array 17:56:40 * ehird comes up with an evil hack to do parameterised types in c 17:56:56 right 17:57:52 hmm... foo##__typeof__(3) won't produce fooint, will it; darn 17:57:53 oh well 17:58:02 Behold: 17:58:05 #define TUPLE(t) struct _tuple_##t {t a; t b;} 17:58:06 #define NEW_TUPLE(t,a,b) ((struct _tuple_##t){a,b}) 17:58:07 Usage: 17:58:18 TUPLE(int) foo = NEW_TUPLE(int, 1, 2); 17:58:20 foo.a 17:58:41 that's a two-tuple 17:58:46 Fail. 17:58:48 Tuple means two. 17:58:54 Tuple, triple. 17:59:47 ehird: isn't it a pair, or equivalently, 2-tuple? 17:59:59 I'm just using the Haskell terminology /shrug 18:02:12 lol @ plan 9 thread function: proccreate 18:03:41 ehird: its BDSM too, first you bind, then you mount, then you proccreate 18:04:17 -!- adam_d_ has quit (Read error: 110 (Connection timed out)). 18:04:50 BSDM 18:05:16 mycroftiv: annoying that plan 9 does it letting you only pass a single void * as the functions arg 18:06:20 ehird: nah remember that C often doesnt even try to deal with your fancy 'types' 18:06:27 yes, but if you want to pass two values 18:06:31 it's a bitch 18:06:40 no its not 18:06:45 yes it is 18:06:49 #define SPAWN(x) ({ void _spawned_proc(void) { (x); }; spawn_proc(_spawned_proc); }) 18:06:50 ↑ inelegant and bloody convenient 18:07:28 you make your struct with as many vars as you want to pass, malloc it, fill it up, cast it to void, send it to your proccreate, then cast it back to its real form 18:07:43 yeah, see, that's less convenient than f(x,y) 18:08:11 i almost could see going the other way in a language 18:08:20 oh, and take this 18:08:22 SPAWN(send(workers[x][y], calc_pixel(x, y))); 18:08:29 try that with your dumb function! 18:10:51 ehird: i don't think the tu- in tuple has anything to do with two. it's a generalization from quintuple, sextuple (possibly more?) to n-tuple 18:11:18 and triple is just the original case for 3 18:11:51 eh, alrighht 18:11:55 *alright 18:12:02 tuple, triple, quadruple always seemed reasonable to me 18:12:11 i think it's formed in latin like quintus (5th) + -plex 18:12:48 writing this mandelbrot is fun 18:20:12 you make your struct with as many vars as you want to pass, malloc it, fill it up, cast it to void, send it to your proccreate, then cast it back to its real form <-- not allocate it on the stack? XD 18:20:33 ehird, so make a varargs wrapper for spawn 18:20:33 That would cause a wasteful copy. 18:20:37 with LOTS of macro magic 18:20:47 OTOH, overhead(copy) < overhead(malloc). 18:21:00 AnMaster: #define SPAWN(x) ({ void _spawned_proc(void) { (x); }; spawn_proc(_spawned_proc); }) 18:21:02 Way ahead of you. 18:21:22 ehird, is that legal C? 18:21:27 {} inside a () I mean 18:21:29 It's legal GNU C . 18:21:34 It's a statement expression. 18:21:37 s/C \./C./ 18:21:39 ehird, oh I never used those 18:21:42 forgot how they work 18:21:51 ({ a; b }) is like do { a; b } while (0), except it's usable as an expression. 18:21:55 The return value is the last statement. 18:22:11 ({ ... }) also introduces a new variable scope, I believe. 18:22:23 Which is why I used it: to avoid _spawned_proc name-clashing with a later use of SPAWN. 18:22:28 ehird, since I do intend to be reasonably portable I used the extensions that could easily be optional (__attribute__ for error checking mostly) and avoided the other stuff 18:22:48 What program are you writing? And will you use my implementation of Plan 9's threading model if I write it? :P 18:22:51 ehird, wait, does that nest a function inside another? 18:23:03 Yes... 18:23:05 ehird, I meant in general 18:23:07 GNU C lets you do that, too. 18:23:09 not a specific program 18:23:15 ehird, it breaks badly iirc 18:23:21 No. It doesn't. It's a feature. 18:23:30 ehird, with a non-executable stack it does iirc 18:23:33 http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html 18:24:00 ehird, it uses a trampoline and what not 18:24:06 Yes. http://gcc.gnu.org/onlinedocs/gccint/Trampolines.html 18:24:13 "normally resides on the stack" 18:24:15 Keyword normaally. 18:24:18 *normally 18:24:24 ah they added support for it to be elsewhere? 18:24:33 dunno 18:24:43 The operating system may also require the stack to be made executable before calling the trampoline. To implement this requirement, define the following macro. 18:24:43 — Macro: ENABLE_EXECUTE_STACK 18:24:44 Define this macro if certain operations must be performed before executing code located on the stack. The macro should expand to a series of C file-scope constructs (e.g. functions) and provide a unique entry point named __enable_execute_stack. The target is responsible for emitting calls to the entry point in the code, for example from the TARGET_TRAMPOLINE_INIT hook. 18:24:45 Tada. 18:27:00 "Do not attempt to disprove the four-colour theorem on your flag!" 18:27:02 — http://www.otago.ac.nz/philosophy/Staff/JoshParsons/flags/ratings-c.html 18:27:22 eh 18:27:38 ehird, issues with executable stack exists. There are a few 18:27:42 quite a few 18:27:48 Nobody uses OpenBSD. 18:27:52 :P 18:28:07 ehird, executable stack makes baby Bruce Schneier cry 18:28:08 or something 18:28:15 horrible badly mangled meme 18:29:18 ehird, also I do see uses for executable stack. Just that I think it makes more sense to put it elsewhere. Somewhere away from those char buf[MAXBUF]; and such 18:32:07 Common Lisp's type system is weird. 18:33:28 -!- soupdragon has quit ("Leaving"). 18:34:20 The symbol (atom, if you're not familiar with the terminology) T is a symbol. It is also a boolean, meaning "true". Every value in Common Lisp is of the type T — not a different thing to the symbol T sharing the same name, but an actual symbol being used as a type. It is the superclass, so to speak, of every other type. 18:34:23 -!- Sgeo has joined. 18:35:04 NIL is: a symbol; a list (the terminator of a list, to be precise); a null. 18:35:24 However, NIL is not of type NIL. 18:35:32 ehird, what type is it 18:35:41 A symbol; a list (the terminator of a list, to be precise); a null. 18:35:55 (type-of nil) is NULL, so null is its "main" type. 18:35:58 ehird, as for it being a list and a null, makes as much sense as 0 being 0 and NULL in C (sure it might have another value) 18:36:21 But it's strange how T is a type as well as a value, and they're the same thing. 18:36:32 ehird, T? 18:36:32 And everything else is of type T, too. 18:36:38 oh right not a T 18:36:39 [18:33] ehird: The symbol (atom, if you're not familiar with the terminology) T is a symbol. It is also a boolean, meaning "true". Every value in Common Lisp is of the type T — not a different thing to the symbol T sharing the same name, but an actual symbol being used as a type. It is the superclass, so to speak, of every other type. 18:36:39 top 18:36:48 That was TWO LINES above "NIL is:". 18:36:50 Sheesh. 18:36:54 ehird, I just couldn 18:37:01 couldn't* see at this distance 18:37:08 ...what? 18:37:08 I'm holding a boot in front of me 18:37:11 and multi tasking 18:37:21 * AnMaster is both chatting on irc and writing a report 18:37:46 ehird, and the monitor with irc is pushed back, to make room for laptop in front 18:37:57 long live synergy 18:38:23 ehird, I need a bit of help with an English term 18:38:48 ehird, what do you call it when a DB becomes inconsistent, Not as in corrupted db file but as in "oops, forgot the foreign key" 18:39:00 I know the Swedish word for it, but I can't find the English term 18:39:03 need it for the report 18:39:29 Um, inconsistent? 18:39:30 :P 18:39:43 ehird, doesn't that refer to a database file sort of level 18:39:54 What's the Swedish word 18:39:55 I'm not a relational DB person, sorry. 18:40:00 I try and avoid them wherever possible. 18:40:32 Deewiant, meh now it slipped my mind X| 18:41:12 brott mot databasintegritet. not quite... 18:43:55 * AnMaster decides to formulate it another way 18:44:03 err that is a Swedishism probably 18:44:04 asdfgjkl;/ 18:44:51 arsnteoi 18:45:17 Arse no teoi. 18:46:07 Duck legged. 18:51:42 must be irish, i take 18:53:15 -!- FireyFly has joined. 18:55:53 -!- FireyFly has changed nick to FireFly. 19:48:23 hm what was that about? 19:48:57 heck if i know 19:49:14 heh 19:52:47 -!- sebbu2 has joined. 19:59:02 -!- sebbu has quit (Read error: 60 (Operation timed out)). 20:06:38 -!- jpc has joined. 20:12:47 so why does my konsole window say "xterm" in the title bar... 20:12:51 that's very strange 20:12:55 it didn't a moment ago 20:13:23 it's been taken over by daleks 20:13:29 i suggest running 20:17:19 -!- poiuy_qwert has quit ("Leaving"). 20:20:57 -!- Warriphone has quit (Read error: 110 (Connection timed out)). 20:26:00 oerjan, ... I never seen Dr Who, so while I know what it references I don't know why 20:26:05 why* it is funny 20:26:26 * oerjan barely knows himself 20:26:37 but hint: EX-TERM-IN-ATE 20:26:46 -!- BeholdMyGlory has quit (Read error: 104 (Connection reset by peer)). 20:26:56 -!- augur has joined. 20:27:05 hey 20:28:15 hey in the hay 20:37:30 oerjan: xterm-inate xD 20:37:55 AnMaster: Watch Doctor Who. 20:37:55 * ehird completes the final piece minus one of his org-mode blogging horrific hack^W^Wsystem 20:37:58 It is imperative. 20:38:07 No, it's functional! 20:38:09 And logical. 20:39:24 ehird: Shush you. 20:40:03 categorically so 20:40:28 who would have guessed that an outliner could export to html with syntax highlighting of any language, embedded latex, and rendered diagrams? 20:40:28 anyone who knew that it was an emacs mode, that's who. 20:41:56 Emacs: it does everything. 20:43:11 say, there's an elisp thingy that implements the common xml-rpc blogging api, isn't there? 20:43:21 i could plug that into this and get a complete in-emacs blogging system XD 20:54:30 -!- BeholdMyGlory has joined. 21:02:31 pikhq: 21:02:31 #+begin_src literate-haskell 21:02:32 > main :: IO () 21:02:32 > main = putStrLn "Hello, world!" 21:02:32 #+end_src 21:02:32 This actually syntax highlights when exported to HTML or LaTeX, and it works for ANY language Emacs can highlight. 21:02:48 org-mode is sweeeeeet. 21:04:03 ehird: That's beautiful. 21:14:32 And what kind of HTML does it generate? 21:15:02 html of DOOM! 21:15:38 Deewiant: Define "what kind". 21:16:00 How does it implement the syntax highlighting 21:16:31 Either s with color:s, or you can get it to generate a big ol' hunk of CSS for every syntax possibility; that's 12k, but you can use a css compression tool to get it down to 3k. 21:17:32 It can't generate a hunk only for the ones used? (Assuming that would save practically any space) 21:17:49 Deewiant: I lied; that stylesheet is just some org-mode stylesheet. 21:17:55 It seems that yes, it does only generate the ones used. 21:18:16 Alright, handy. 21:18:59 No, wait. 21:19:08 I tell another lie: that CSS does include the syntax highlighting. 21:19:22 It seems that it can highlight org-mode code, and dired output. XD 21:19:46 >_< 21:20:10 Hey, it does work with *every font-lock mode in Emacs*. 21:21:14 Personally, I'm just going to leave it generating inline colours. 21:21:30 It's not like Blogger's added markup isn't spewtastic anyway. 21:22:01 i could plug that into this and get a complete in-emacs blogging system XD <-- pretty sure I read about that somewhere already 21:22:29 Yes, people use org-mode for blogging and also the XML-RPC stuff. 21:22:38 But I don't know if they're combined so that I could do M-x publish-org-blog-post. 21:23:37 ehird, that was what I meant I read about iirc 21:23:41 can't find it again though 21:24:42 It's not like Blogger's added markup isn't spewtastic anyway. <-- who is "Blogger" with a capital B ;P 21:24:51 http://www.blogger.com/ 21:25:15 Now-Google's-ex-Pyra's ye internette cornerstone blogging system. 21:25:30 oh right. I have it mentally filed as "the orange/white squiggle icon blog site" 21:25:46 That squiggle is also known as "B". 21:25:56 ehird, very stylised one 21:26:32 ehird, I thought it was a child drawing of a boat 21:26:38 it looks closer to that IMO 21:27:14 blog, blog, blog your, er 21:27:24 Sweet, org-mode lets me use TeX style ^ and _ in plain html. 21:27:38 That's nice for when the actual LaTeX embedding is too much. 21:27:46 ehird, "blog, blog blog your blog! 21:27:48 err 21:27:49 oerjan, ^ 21:27:57 s/"// 21:28:23 feels inelegant. spammy, even. 21:28:39 blog, blog, blog your spam 21:28:47 gently down the tubes 21:28:54 I had to spend a while looking for how to disable that feature in org-mode, because it kept messing up the _-rich filenames in html export. 21:28:54 marry me marry me marry me marry me 21:28:56 russian brides for cheap 21:29:16 fizzie: ^:{} or ^:nil 21:29:19 "Both beg and end are both pointer expressions." <-- GCC manual. Approved by The redundantly Redundant Committee for Redundancy 21:29:22 former for just allowing foo_{bar} etc 21:30:10 pri: turn on/off priority cookies 21:30:10 What. 21:30:18 omg org-mode does footnotes 21:30:53 F_{2^{n-1}}[1] 21:30:55 my life is complete 21:30:56 ehird: Yes, I know that *now*. 21:30:59 ehird, at the end of the document? Rather than the end of the page 21:31:04 and aren't those called end notes 21:31:11 AnMaster: They're footnotes. 21:31:20 ehird, oh? 21:31:33 ehird, also that latex. Does it render equations to unicode, or to images? 21:31:40 Images. 21:31:44 meh 21:31:44 It's real LaTeX. 21:31:52 well good 21:31:55 Apparently I did "#+OPTIONS: num:nil ^:nil" but now I don't remember what num:nil does. 21:32:07 ehird, how is wikipedia's latex implemented? 21:32:10 If you want Unicode you can just do latex:nil and use jsMath instead. 21:32:25 AnMaster: Images, or a very basic →html thingy that only works for a very small subset. 21:32:30 Or →mathml which does I don't know. 21:32:38 fizzie: Disables TOC numbers in headings 21:32:55 Ah, right. 21:33:08 ehird, does it only do latex equations, or the full thing 21:33:19 "In particular, note that you can place commonly-used (export) options in a separate file which can be included using #+SETUPFILE." 21:33:20 Sweeeeeeet 21:33:25 AnMaster: Equations. 21:33:30 ehird, meh 21:33:38 ehird: I've never gotten the ->mathml thing to work. 21:33:47 ehird, I was looking forward to pstricks in html :( 21:36:01 #+OPTIONS: toc:nil num:nil author:nil creator:nil timestamp:nil 21:36:14 ↑ aka "No, I don't want any of that crap" mode 21:36:28 Are you also going to use MobileOrg on your iDevice? 21:36:41 That would be impractical for writing blog posts on! 21:36:57 And I don't need todo lists; I never forget to do things. 21:37:11 Or at least, I never remember that I've forgotten to do something. 21:37:18 Which, if you don't really have any worldly responsibilities, is the same thing. 21:38:21 that sounds reassuring :D 21:40:21 #(...) is a vector in elisp right? 21:40:25 How do you access the first elem? 21:41:54 Ugh, one part of this whole ordeal is going to be a pain. 21:42:11 Using mmm-mode so that stuff inside #+begin_src LANG ... #+end_src is displayed with that mode. 21:42:30 That way, I can edit blog posts as Literate Haskell with all the haskell-mode conveniences while still using org-mode outside. 21:52:10 ehird, how did your semantics discussion earlier go? 21:52:25 which discussion in particular 21:52:31 the one with soupdragon 21:53:11 the one i was participating in before having to get on my flight 21:53:36 define "go"; I pretty much told him that I thought he should handle things like AND (LOVES JOHN) (LOVES MARY) by the rule: if there is a function that, given enough arguments, produces a value of type T, and this function is in a place where we need a type T, make the whole expression a function with its arguments 21:54:10 that produces (\x -> (\y -> AND (LOVES JOHN x) (LOVES MARY y))) but I guess with an amendment "if there are two such expressions and they take the same type, combine their arguments" it would work 21:54:32 so you mean 21:54:49 given some functions f, g :: a -> Bool 21:55:05 you can combine them to get \x -> f(x) & g(x) 21:55:10 no 21:55:15 what i mean is 21:55:19 no? but you said combine their arguments D: 21:56:11 f :: ...->T->... 21:56:11 rewrite (f ...(expr::a->b->...->T)...) 21:56:11 to (\a,b,... -> f ...(expr's function body)...) 21:56:38 if there are multiple such occurrences of this in the same expression, take all the argument types they share and combine them into a single argument 21:56:54 ok 21:57:03 so AND (LOVES JOHN) (LOVES MARY) becomes (\x -> AND (LOVES JOHN x) (LOVES MARY x)), not (\x -> (\y -> AND (LOVES JOHN x) (LOVES MARY y))) 21:57:11 john loves mary and mary john 21:57:21 john loves marrying mary 21:57:30 well it sounds like you've discovered cojunctivism to some degree 21:57:31 :) 21:58:44 http://emacspeak.googlecode.com/svn/trunk/lisp/g-client/gblogger.el 21:58:44 sssso ssssweet 21:58:52 i'll be blahhging the intertubes in no time w/ this 21:59:02 blogs like diabetes 21:59:12 diabeetus blahhging 21:59:58 i'm personally just amazed i managed to coerce blogger into outputting something...nice 22:00:13 i was not of the awareness of the possibility of this. 22:01:42 ehird, i was thinking about the graphics engine thing 22:01:42 hey i just realised http://emacspeak.googlecode.com/svn/trunk/lisp/g-client/gblogger.el was written by the blind guy who makes emacsspeak :) 22:01:49 *emacspeak 22:02:19 and im really interested in this constraint stuff, im just not sure if i understand precisely what it would mean 22:03:52 augur: well it's basically like prolog 22:03:57 you give prolog a bunch of constraints on values 22:04:00 and it outputs all the possibilities 22:04:06 sure sure 22:04:08 it's the same for a layout engine, where the values are things like 22:04:10 width of foo 22:04:12 height of foo 22:04:16 coords of bottom of foo 22:04:20 and the engine is less... well, TC 22:04:30 plus, it picks one single possibility via some metric for picking the best layout 22:04:34 tightest packed, or whatever 22:04:42 im just trying to imagine how the syntax then expresses these constraints 22:04:58 well it's just an abstract data structure 22:05:01 List Constraint 22:05:24 i mean in the language being designed 22:05:47 how is, say, "a square 50 px on a size" expressed 22:07:56 less say, filled with red 22:08:06 night 22:08:28 night 22:11:00 ehird? 22:11:15 augur: i meant in the language being designed too 22:11:23 the constraint engine is an internal thing, mostly it's exposed via user defined functions 22:11:29 like, you know, square(). :P 22:13:08 ok, and what does the constraint for such a square look like 22:13:55 what square 22:14:08 the square 50px on a side with red fill! 22:14:36 define on a side 22:14:37 any side? 22:15:36 i just want to know what the constraint looks like, in some sense 22:16:30 Square [Fill Red] 50px 22:16:31 ? 22:17:35 for ... data Shape = Square [Attribute] Size | ...; data Attribute = Fill Color | Stroke Color | ... 22:17:35 ? 22:22:24 you're thinking about this all wrong. 22:22:32 ok 22:22:35 then explain 22:22:36 constraints, not objects 22:22:37 like i asked. 22:22:38 so: 22:22:43 yes, but what DEFINES the constraint 22:22:57 your question does not make sense. 22:23:01 ehird 22:23:08 the constraint-solver has to look at these constraints, right? 22:23:12 Yes. 22:23:19 so what does it see when it looks at them 22:23:41 i mean, is square(50px) the constraint itself 22:23:50 or is that just some magic function that constructs the constraint in the background 22:23:52 The constraint data structure is something like this: 22:23:56 -!- anmaster_l has quit (Read error: 110 (Connection timed out)). 22:24:24 { x = Square, side x == 50px, (dunno about the fill stuff) } 22:24:39 Square itself desugars to more constraints 22:24:45 ok 22:24:49 brb 22:24:51 my machine is overheating 22:25:01 or, wait, no 22:25:13 ok 22:25:17 i see what you're going for 22:25:20 i can't tell if it is 22:25:32 -!- ehird has quit. 22:27:18 looks like it was 22:27:29 maybe he restarted out of caution 22:29:42 -!- ehird has joined. 22:29:49 ehird! hello. 22:29:49 indeed; caution 22:29:57 my fans just spun up to full, you see 22:29:59 they occasionally do that 22:30:05 worrying but seemingly just a glitch 22:30:11 but it's noisy and i don't want to take any chances 22:30:17 do you have iState menus? 22:30:21 iStat* 22:30:30 does top give you anything useful? 22:30:34 i'm a minimalist. things like that are mere distractions to me 22:30:37 SimonRC: too late, i rebooted 22:30:41 but activity monitor said cpu was like 1% 22:30:45 :-S 22:30:47 so clearly not cpu load 22:30:50 perhaps a heatsink issue 22:30:55 well, iStat menus has a temp indicator 22:30:58 or, as i suspect, a fan control issue 22:31:22 anyway 22:31:34 well, my laptop liked to do jet impressions when suspending 22:31:39 i like the idea, im just not sure if its absolutely necessary, ehird. ill consider it. 22:32:04 however, last time I suspended it it decided to power off the external USB HD... 22:32:09 everyone should preemptively add http://ehird.blogspot.com/ to their feed readers because i am awesome 22:32:32 which is reasonable except the kernel knows damn well that / is on that HD, so unsuspend kinda didn't happen 22:33:02 that blog will be the new revolution! or possibly, just revolting. 22:33:22 D: 22:33:46 ehird: if you start posting interesting things, ill totally link you on my blog 22:33:47 :X 22:34:12 augur: like does type system hackery, programming language and OS musings count as interesting????? 22:34:18 or just BORING ASS LINGUISTICS 22:34:25 ehird, no thats totally interesting 22:34:33 my blog isnt all linguistics you know 22:34:39 ps you should totally dig my minimalist design because it is RAD and i spent five years fighting against blogger to makek it work 22:34:45 *make 22:36:03 http://www.wellnowwhat.net/blog/?p=353 << see? not linguisticy! 22:36:16 my next series of posts is going to be on this thing we're discussing 22:36:28 and then one on building a simple prolog-ish engine 22:36:33 "I’ve got a need for a product of this sort. Please send me an email because I’d love to talk about it." 22:36:37 blog comments are so crappy 22:36:43 yeah :( 22:36:51 "Hey you posted an interesting post about stuff! I NEED YOU TO CODE THIS EMAIL ME" 22:37:22 i figured i'd leave that one tho because he was sincere. i emailed him and he seemed to be interested in more complex knowledge engines and i said i wasnt familiar with any of them 22:37:50 the gblogger functions are oriented around interactive use and this makes me sad 22:37:59 ? 22:38:07 emacs Blogger interface 22:38:27 wat 22:38:28 lol 22:38:42 i'm trying to wire up org-mode (an outliner/markup/diagram-renderer/LaTeX-embedder/syntax-highlighter/you name it) to gblogger 22:38:57 so as to be able to write an org file, run an emacs command, and have it appear on http://ehird.blogspot.com/ 22:39:08 and thus never have to interact with blogspot's rubbish admin ui! 22:40:33 ehird, ive decided on some basic functions 22:40:42 for the graphics engine 22:41:25 namly, below[left|right|center|just|nothing] ... 22:41:46 beside[top|middle|bottom|just|nothing] ... 22:42:14 pad[t r b l | tr bl | trbl] X 22:42:23 i don't get your syntax 22:42:40 brackets enclose options 22:43:01 so: 22:43:04 e.g. below[left] A B means "put B below A, and align them left" 22:43:22 below ... == below[] ... == below[center] ... 22:43:22 group BelowOpt 22:43:23 struct Left :: BelowOpt; struct Right :: BelowOpt 22:43:23 ...etc... 22:43:23 end 22:43:37 sure, whatever you want 22:43:53 below :: [BelowOpt] -> [Drawable] -> Below 22:44:06 below[][a,b,c] == below[center][a,b,c] (that [] is a bit ugly tho) 22:44:15 (the below[][...] thing) 22:44:24 well, i dont know what the options syntax should be 22:44:30 i wanted to avoid {} 22:44:30 * ehird decides to leave the postiing automation for later 22:44:51 augur: ah! we can build optional arguments into the language 22:45:00 ? 22:45:02 no need to have actual options like i said, a list of a data structure works for them 22:45:06 all we need is optional arguments 22:45:20 {} is the punctuation i haven't used yet so sorry but I'm gonna take it :D 22:45:34 im not sure what you mean 22:45:39 example of what you have in mind? 22:45:55 below :: ({BelowOpt}, List Drawable) -> Below 22:45:58 in the definition: 22:46:15 below(opts{Center}, things) = ... 22:46:19 (Center is the default) 22:46:24 usage: 22:46:27 wait 22:46:31 I wrote that slightly wrong 22:46:37 below {align => left} [a,b,c] 22:46:38 below :: {BelowOpt} -> List Drawable -> Below 22:46:39 then? 22:46:51 below{opts=Center}(things) = ... 22:46:58 augur: in the BelowOpt group, have 22:47:06 struct Align :: Direction -> BelowOpt 22:47:08 usage: 22:47:16 def below(ops = { :align => :center }, items) 22:47:17 below{Align Left}[a,b,c] 22:47:25 ok 22:47:30 can you have multiple opts in this case 22:47:31 or just one 22:47:36 multiple 22:47:50 for instance, you'd have another option space 22:48:01 which specifies the separation between the items when belowing them 22:48:05 below :: {[BelowOpt]} -> List Drawable -> Below 22:48:06 below{opts=[Align Center]}(things) = ... 22:48:06 usage: 22:48:12 below{Align Left, Poop Blah}[a,b,c] 22:48:29 soooo latex :( 22:48:30 basically, {...} means optional argument; if you omit it in a call, it just assumes the default value 22:48:36 and {a,b} desugars to {[a,b]} 22:48:38 for convenient options 22:48:52 \below{align=left,space=5px}{a}{b}{c} 22:48:53 D: 22:49:25 i would argue that latex has pretty nice syntax :P 22:49:35 i dont like it 22:49:41 {} should never enclose args, in my opinion 22:49:50 well it's not enclosing anything else in my syntax 22:49:58 whatever :P 22:50:11 i prever a haskellish syntax 22:50:23 -!- jpc has quit ("I will do freaking anything for a new router."). 22:50:56 -!- jpc has joined. 22:50:58 What ehird's been discussing is essentially Haskell + default arguments. 22:51:07 (... Well, because he's not mentioned the other divergences from Haskell) 22:51:14 but haskell doesnt allow arbitrary args 22:51:20 i really want it to just look like 22:51:25 below a b c 22:51:31 ... Whereas what he's discussing does. 22:52:01 i can sort of accept the list tho. thats fine. 22:52:13 augur: well we could do the obvious thing 22:52:15 what is {} denoting for you, ehird? 22:52:16 and introduce map syntax 22:52:22 augur: {} = optional argument 22:52:23 ?? 22:52:23 anyway 22:52:26 augur: So, is that passing default arguments to the function or arguments to the result of the function? 22:52:27 oh ok 22:52:28 map syntax would be just 22:52:32 { key: val, ... } 22:52:33 wait 22:52:40 but we still use data structures 22:52:52 below { Align: Left } [a,b,c] 22:53:29 pikhq: f ... is sugar for f[] ..., and f defaults on its respective options 22:53:40 ok so {} is a hash then 22:53:47 foo :: {a} -> b -> (a->b) -> (a->c) 22:53:48 but that has issues 22:53:54 Hey, look, it's ambiguity! 22:53:54 it means you can do { Align: 3 } 22:54:03 pikhq: 'snot 22:54:16 foo aB :: (a->b)->(a->c) 22:54:17 ehird: ... As you do it, yes. 22:54:23 foo anA :: b->(a->b)->(a->c) 22:54:35 beside[left] a b c looks best to me 22:54:49 augur: i don't think this needs to be a heavyweight language, so just go syntax made 22:54:50 *mad 22:54:54 ehird: Except that the function is polymorphic. 22:54:54 make it convenient 22:55:00 anyway 22:55:06 pikhq: yes, and? you know by the time you get a function argument 22:55:14 besides, wait 22:55:20 you specify optional args with {} 22:55:21 the other function i was considering was over 22:55:22 wherein 22:55:26 foo x is always using the default 22:55:30 foo {x} is always overriding it 22:55:31 if A is a triangle, and B is a circle 22:55:32 ehird: That's what disambiguates it. 22:55:59 over A B is the image with the circle positioned above the triangle, both conconcentric 22:56:20 http://ehird.blogspot.com/2010/01/hello-world.html 22:56:20 iiiiiiiiii posted this with org-mode 22:56:28 and you could have params that specify which points are con-ed 22:56:34 e.g. over A B == over[center] A B 22:56:43 todo: make one css tweak, that funky mmm-mode thing, automate the actual posting 22:56:44 but you could do over[topleft] A B 22:56:52 which is where A.topleft == B.topleft 22:57:05 or you could do over[x y] A B 22:57:12 foo bar -- Has two valid types. b->(a->b)->(a->c) and (a->b)->(a->c). In the first, a is the same type as bar, and in the second, b is the same type as bar. 22:57:18 which is equivalent to over[bottomleft x y] 22:57:39 (if you don't do the "wrap default args in brackets" bit) 22:57:55 where B.bottomleft = A.bottomleft + 22:59:55 as it turns out, over[topleft A.width 0] A B produces the same image as beside A B 23:00:13 which suggests that over should be the function that beside and below are defined in terms of 23:03:37 http://ehird.blogspot.com/2010/01/hello-world.html 23:03:38 someone leave a message of complete admiration for me kthxbai 23:03:49 doing this in terms of actual objects, tho, ehird, seems to be relatively simple 23:03:58 pikhq: have you used literate-haskell-mode? 23:04:17 augur: To hell with objects! Long live data structures! 23:04:24 you has error 23:04:31 ehird: No, should I? 23:04:32 ehird: well, data structures, whatever. same thing to me. 23:04:39 but whats cool is 23:04:51 augur: They're quite different in concept. 23:04:52 http://www.youtube.com/watch?v=YiYBRgsxQUc 23:04:53 pikhq: nope, just wondering how to have mah bird tracks auto-added 23:05:00 if A is some data structure consisting of paths, basically 23:05:14 what you'd have is two parts to it 23:05:17 it'd be like 23:05:26 Shape Size Path 23:05:36 where Path has points in the range [0,1] 23:06:02 An object is a thing that possesses members and methods. These can be public and private. An object can inherit its methods and members from another object, and override them. 23:06:16 A data structure is a thing that contains things. 23:06:35 scale p (Shape (w,h) s) = Shape (p*w, p*h) s 23:07:07 That an object can be used for data structures is merely an interesting property. 23:07:27 scale (wp,hp) (Shape (w,h) s) = Shape (wp*w, hp*h) s 23:08:05 To ram the point in further: compare C structs and C++ classes. 23:08:13 actually, it'd be more, data Shape Shape AffMatrix Path 23:08:18 data Shape = ... 23:10:53 and then when you draw this, all you do is apply the affine transform matrix to the path points to calculate the actual look of the shape, and stroke/fill 23:12:04 http://ehird.blogspot.com/2010/01/hello-world.html 23:12:04 BEHOLD THE SYNTACTICALLY HIGHLIGHTED CODE 23:12:29 ehird, i tried to comment as anonymous but it gave me an error 23:12:35 What error? 23:12:53 /!\ Your request could not be processed. Please try again. 23:12:57 Beats me. 23:13:16 It supports Google accounts and OpenIDs, if those are okay for you. 23:14:15 Perhaps name/URL will work? 23:14:20 augur: Also, perhaps some sort of spam filter got you. 23:16:48 o ok 23:16:51 maybe it was too short 23:16:57 man 23:17:10 "Posted by Anonymous on January 05, 2010." 23:17:12 2010 23:17:15 its 2010 23:17:17 its fucking 2010 23:17:26 yes 23:17:30 shouldnt we be going to jupiter? :| 23:17:39 Why yes, it's been 2010 for 5 days now. 23:17:42 i think we make contact this year or something 23:17:46 i saw it in a documenntary 23:17:49 *documentary 23:17:53 those movies are all documentaries right 23:18:09 yes 23:18:11 ofcourse 23:18:13 yes, according to many-world's interpretation 23:18:21 oerjan: <3 23:18:24 Well, at least we don't have that alliance with the Aschen trying to sterilize Earth 23:20:05 oh man sgeo true 23:20:09 fucking aschen 23:20:30 all we wanna do is explore the galaxy and fuck green chicks/dudes 23:20:35 is that such a crime? 23:20:49 i hear blue is all the rage these days 23:20:54 Only if you're not Kirk. 23:21:07 pikhq: but we all want to be kirk so its cool right 23:21:12 Not-Kirks have to content themselves with other colors. 23:21:33 lame 23:21:45 augur: That's why the punishment for the crime is exploring the galaxy and fucking green chicks. 23:22:07 wut 23:22:48 so the punishment is, essentially, that you cannot be gay? 23:23:03 oh i see what he means 23:23:09 Yes. 23:23:09 the punishment is fucking people you dont want to fuck 23:23:10 gotcha 23:23:13 Cruelest thing ever. 23:23:22 EVEN FOR STRAIGHT PEOPLE 23:23:32 Cue T-Rex: "I feel like a possibility has been taken away from me that I never knew I had!" 23:23:36 "This is OPPRESSION!!" 23:23:44 ehird: Nobody's straight. Don't you ever read ship fanfiction? 23:23:44 :P 23:24:00 ehird, tell me if this makes sense 23:25:34 if you rotate a shape by some angle, after rotating, the rotated shape is fit so that its bounding rect is always the unit square, and the resulting things size is smaller than the initial things size 23:25:39 * ehird ponders on a topic for his first opst 23:25:40 or larger 23:25:41 *post 23:25:42 whichever it turns out to be 23:26:46 e.g. if you rotate a 1x1 square you get back a 1x1 diamond, with its points at the <0,0.5>, <0.5,0>, <1,0.5>, <0.5,1> 23:27:32 and its size reduced from, lets say, 10x10 as a square, to 5root2 x 5root2 as a diamond 23:27:37 er 23:27:43 -!- dbc has quit (Read error: 60 (Operation timed out)). 23:27:43 sorry, 10root2 x 10root2 23:28:14 (rotating by 45* obviously) 23:29:31 My first post will be "Computing fib(3!) in Haskell's type system", which is really about type families being cool and such. 23:29:33 does that make sense? or should shapes exist in a full euclidean plane? because that i think would ruin the use of things like beside() 23:29:53 elliot! types are not for computing! :| 23:30:00 you're a bad bad boy 23:31:07 stop hangin' 'round with that dons kid; he's neva' up to no good! 23:44:12 ehird: Mmm, undecidable instances... 23:45:53 -!- dbc has joined. 23:58:34 http://ehird.blogspot.com/2010/01/computing-fib3-in-haskells-type-system.html 23:58:36 First post! 23:59:59 ehird: BTW, GHC Haskell has a TC type system.