--- Log opened Wed Jan 09 00:00:54 2013 00:07 You're now known as TheWatcher[T-2] 00:12 You're now known as TheWatcher[zZzZ] 00:12 himi [fow035@D741F1.243F35.CADC30.81D435] has joined #code 00:12 mode/#code [+o himi] by ChanServ 00:43 thalass_ [thalass@Nightstar-724ec5eb.bigpond.net.au] has joined #code 01:40 himi [fow035@D741F1.243F35.CADC30.81D435] has quit [Ping timeout: 121 seconds] 01:48 himi [fow035@D741F1.243F35.CADC30.81D435] has joined #code 01:48 mode/#code [+o himi] by ChanServ 02:10 syksleep is now known as Syk 02:18 <@Rhamphoryncus> Anybody built a low profile computer before? 02:19 himi [fow035@D741F1.243F35.CADC30.81D435] has quit [Client closed the connection] 02:19 Attilla [Obsolete@Nightstar-9e7fa2b2.range86-162.btcentralplus.com] has quit [Ping timeout: 121 seconds] 02:20 <&ToxicFrog> No, but I'd like to at some point 02:20 <&ToxicFrog> For now I'm just re-using old laptops~ 02:21 <@Rhamphoryncus> Right now I have one linux box. I'd like to get a second (compact) linux box, repurpose this one as a windows gaming box, and get a KVM switch 02:22 <&Derakon> If you have more money than time, you could get a Mac Mini and overwrite the OS. 02:22 <@Rhamphoryncus> Nope, trying to be cost effective 02:22 <&Derakon> Or I'm sure there are generic prebuilts that would achieve a similarly small form factor. 02:22 <@Reiv> Low profiles are good, just beware the Two Banes Of Their Existance: 02:22 <@Reiv> Size of graphics card, and Heat. 02:22 <@Rhamphoryncus> At the moment I'm debating a graphics card though... 02:22 <@Reiv> Also Heat. 02:22 <@Reiv> And Heat. 02:22 <@Reiv> Just be careful not to forget Heat. 02:23 <&ToxicFrog> Rhamphoryncus: what's the use case here? 02:23 * Reiv coughs. 02:23 <@Rhamphoryncus> Vastly cheaper without a real graphics card 02:23 <@Rhamphoryncus> ToxicFrog: programming, an IRC bot, server for a few things 02:23 <&ToxicFrog> Aah, so VM or dual boot is not a viable option 02:23 <@Rhamphoryncus> Nope 02:24 <&ToxicFrog> You could use an rPi~ 02:24 <&ToxicFrog> As a practical matter you don't actually need a KVM switch, just ssh into it from the windows machine 02:25 <@Reiv> Server is about the only thing there that discourages 'ancient laptop' configuration. 02:25 <@Rhamphoryncus> May also use it for banking and such things that *should* be done securely 02:25 <&ToxicFrog> Reiv: not really. Old laptops make pretty nice servers, depending. 02:27 <@Reiv> Depending on what it is they're serving? 02:28 <@Rhamphoryncus> Don't have one available. 02:28 <@Reiv> They tend to be trivially cheap. 02:28 himi [fow035@D741F1.243F35.CADC30.81D435] has joined #code 02:28 mode/#code [+o himi] by ChanServ 02:28 <@Reiv> Vastly more affordable than building a microbox, at that. 02:29 <&ToxicFrog> Reiv: quite. In particular, for stuff requiring heavy computing power or lots of space they are a losing proposition. 02:30 <@Reiv> Yeah 02:30 <@Reiv> I guess when I think 'server' these days I think 'fileserver' 02:31 <@Rhamphoryncus> Compared to, say, this? http://www.memoryexpress.com/Products/MX41897 02:32 <@Reiv> That has a 1 in the front of it, so the answer is 'yes' 02:32 <@Rhamphoryncus> eh? 02:32 <@Reiv> Seriously, I have found 'old laptops' can go for like fifty bucks. Twenty if you don't mind working on crap. 02:33 Xires [xires@Nightstar-c54fd8cd.feedthetrolls.net] has joined #code 02:33 <@Rhamphoryncus> Perhaps 02:34 < Xires> <3 "Rants and monologues are encouraged" 02:34 <~Vornicus> Well? Get to it! :P 02:34 <@Rhamphoryncus> Hmm nope, no cheap laptops on craigslist 02:35 <@Reiv> Unusual. 02:35 < Xires> I tire of the people these days thinking that they need only look up some quick tutorial to learn a language. Particularly those who also seem to believe that there is no reason to learn a language like C. 02:35 <@Reiv> I don't need a tutorial 02:35 <@Reiv> I have Vorn! 02:36 <@Reiv> HEY VORN 02:36 < Xires> As well as those who can't seem to understand that there's more to C++ than classes. 02:36 <~Vornicus> Heh 02:36 <@Reiv> TAECH ME PYTHON 02:36 < Xires> Or those who feel that FORTRAN is dead. 02:36 <~Vornicus> Actually I learned to program period from the Python tutorial... 02:36 <@Reiv> ... AND ALSO HOW TO SPELL 02:36 <~Vornicus> I actually thought that one was intentional 02:36 <@Rhamphoryncus> Xires: if only... 02:36 < Xires> And, of course, those who love Python. 02:36 <@Reiv> Nope! 02:36 <&Derakon> How to Python: 02:37 <&Derakon> print "Hello, world!" 02:37 <&Derakon> Done. 02:37 <@Reiv> Fantastic 02:37 thalass [thalass@Nightstar-724ec5eb.bigpond.net.au] has joined #code 02:37 < Xires> import language_that_permits_better_artistic_style 02:38 <~Vornicus> "better artistic style"? is that your name for buffer overruns now? 02:38 <~Vornicus> :D 02:38 <&Derakon> No, he wants to whang everything onto the same line so he can pretend he's "leet". 02:38 < Xires> no, rather for something that doesn't restrict my coding style 02:38 < Xires> or whichever style I would prefer 02:39 <~Vornicus> Der: you obviously haven't seen my list comprehensions 02:39 < Xires> an entire program on a single line is kinda ridiculous..C != JS 02:39 <~Vornicus> You could do it in C. 02:39 <@Rhamphoryncus> Xires: funny thing about coding style. Most of it has no value 02:39 < Xires> if you can get around pissing off the preprocessor, yeah 02:40 <&ToxicFrog> Xires: speaking as someone who has to work with biologists and physicists, I wish FORTRAN was dead~ 02:40 < Xires> ToxicFrog; understood..I can't really blame you, I don't care for it, personally, but it has its uses 02:41 < Xires> there are reasons that jet fighters are not coded in C 02:41 <&Derakon> Also speaking as someone who has to work with biologists, I love that Python forces them to have at least a bare minimum of proper styling. 02:41 <&Derakon> Their code would be entirely unreadable without it, as opposed to merely mostly unreadable. 02:41 < Xires> the language should not force style upon the coder 02:41 < Xires> granted, that's just my opinion, but it's something I firmly believe 02:42 < Xires> one should teach better coding style rather than just altering a language to give the programmer no other choice 02:42 <&ToxicFrog> Xires: last I checked Ada was beating out Fortran for avionics stuff by a wide margin due in large part to its borderline-psychopathically strict compiler 02:42 <~Vornicus> Xires: I'm sorry you haven't found a language you like. 02:42 < Xires> structured code is preferred to a quick script which holds true to a unified style but otherwise is inefficient and potentially quite buggy 02:42 < Xires> Vornicus; I've found quite a few over the past 2.5 decades..Python isn't one of them 02:42 <@Namegduf> What standard of "should" are we working with here? 02:43 <@Namegduf> It doesn't seem to be consequentialist 02:43 <&Derakon> Vorn's point is that every language forces style on the coder at some level. 02:43 <&ToxicFrog> That said, I'm kind of terrified that there exist standards for coding automotive applications in C. 02:43 <&ToxicFrog> And that they require SPOR. 02:43 <@Reiv> I'm off to write the next Call of Duty Future Black Soldier Ops Warrior VII: Blood, Boobs & Bombs 02:43 < Xires> ToxicFrog; Ada95 had popular usage but FORTRAN still runs the majority of the US Naval jets 02:43 <@Reiv> Cheers, Derakon. I'll keep you in mind if I hit any snags. 02:43 < Xires> brb; 02:43 <@Namegduf> In Python's case it's more a question of whether they should have to modify their tidy language concept to support arbitrary coding style. 02:44 <&Derakon> Reiv: sure thing. :) 02:44 <@Namegduf> I mean, they can't at zero-cost just say it is okay. 02:44 <&ToxicFrog> IMO, no, because then you have to find another way of getting the compiler to enforce indentation on the frosh 02:45 <@Rhamphoryncus> I've seen some horrors inflicted within python as-is x_x 02:45 <&Derakon> I bet I've seen worse. 02:45 <@Reiv> Xires: A point on coding style: Having a language that demands a certain coding style is, in fact, merely a particuarly strict form of 'teach them correct coding style'. 02:45 <@Rhamphoryncus> I bet you've seen a couple orders of magnitude *more* 02:45 <&Derakon> Chained imports via "from foo import *" and then locally renaming one of the imports, for example. 02:45 <@Reiv> It also has the benefit in large operations that everyone can reach each others code. 02:46 <@Reiv> ... well. /helps/ everyone have a /shot/ at it~ 02:46 <@Rhamphoryncus> Derakon: for foo in [[someexpression]]: 02:46 * Reiv has someone at work who means well, but whose understanding of SQL table aliases to be "Rename all the tables to each other then proceed while wondering why everyone elses heads break" 02:46 <@Rhamphoryncus> (because functional is THAT awesome!) 02:46 <&Derakon> So that some code does (and I'm not making this up) "from Priithon.all import X; X.v()" and you go to all.py to find "import usefulX2 as X" and you go to usefulX2 to find it does "from vviewer import *; ...v = vviewer.view". 02:47 <&Derakon> Rhamph: iterating over a list comp? 02:48 <@Rhamphoryncus> Derakon: no. Hrm, actually, the inner list might've been a list comp.. I can't recall now. The real point is that the end result was just a single value. Equivalent to foo = someexpression 02:48 <&Derakon> Oh, I see. 02:49 <&Derakon> E.g. "for foo in [2 + 3]" 02:49 <@Rhamphoryncus> yup 02:49 <@Rhamphoryncus> But spread over 3 or 4 lines 02:50 <@Rhamphoryncus> From a former friend of mine. Former in that I stopped talking to them after learning they inflicted that on their coworkers on a regular basis, and believed it was vastly superior to doing it pythonically 02:51 <&Derakon> Seems like if you really want that you should be able to do "with foo as 2+3: ..." except that's a syntax error. 02:52 <&ToxicFrog> Why is it? 02:52 <&Derakon> "Can't assign to operator", it says. *shrug* 02:52 <@Rhamphoryncus> No no, it's pointless. All they need is foo = 2+3. There is no subtle lifetime control involved, just idealism 02:52 <@Rhamphoryncus> Derakon: you'd actually want "with 2+3 as foo:", but that'd be an error anyway 02:53 <&Derakon> I contend my chained * imports are worse anyway~ 02:56 <@Rhamphoryncus> Kind of like arguing who's bullet wound is worse 02:57 <&Derakon> Heh. 02:58 <@Reiv> Just mind dieties with sickles, lest they murder you via castration. 03:12 <~Vornicus> that's just silly 03:14 <@Reiv> Hey, it totally happened! 03:14 <~Vornicus> Actually there is a surprising amount of leeway in Python's coding style. It's just that many of the things where style enters into other langauges just plain doesn't exist. 03:14 <@Reiv> In greece, of course. Where else? 03:14 <@Reiv> Vorn: ? 03:15 <~Vornicus> one of the perennial arguments in C for instance is bracket placement 03:19 < Xires> sorry, took longer than I'd originally thought 03:21 < Xires> Vornicus; and that argument is..? 03:21 <@Reiv> Do the curly brackets go on a line by themselves or not. 03:21 <@Reiv> Hell, I've not written C in a decade and I know /that/ one~ 03:22 < Xires> Reiv; 'curly brackets' are also known as 'braces' 03:22 < Xires> just thought you might like to know 03:23 < Xires> personally, I prefer opening braces to NOT sit on a line by themselves 03:25 < Xires> code 'folding' editors tend to render lines better when the opening braces are not by themselves 03:26 < Xires> it wastes fewer bytes(which is often not negligible) for additional newlines, indentation spacing/tabs, etc. 03:27 <@Reiv> Xires: I'm aware of what they're called. ;) 03:28 thalass_ [thalass@Nightstar-724ec5eb.bigpond.net.au] has quit [[NS] Quit: Leaving] 03:28 <~Vornicus> (if you're arguing about number of bytes in a text file there's something wrong) 03:28 < Xires> Reiv; sorry, just trying to be informative..I spend a lot of time with people who don't know all the English terms for things 03:29 < Xires> Vornicus; why do you say that? 03:29 <@Reiv> (Small note: I am technically savvy, if not a guru of code. I tend to insert rather dry humour, and the occasional snark, but am generally harmless. Also noteworthy is that I kinda founded this channel, and Vorn & I are Old Comrades, at least in the internet sense. This may clear up some confusions going forward.) 03:30 < Xires> Reiv; understood 03:30 <@Reiv> (Including HEY VORN TEACH ME PYTHON, etc~) 03:31 <@Reiv> (Which in retrospect may have been a bit less obvious than hoped if you don't know my sense of humor.) 03:31 <@Reiv> ... speaking of, a quick but simple one 03:31 < Xires> I came here not to troll but to both listen & share with a new group of coders 03:31 <@Reiv> HEY VORN 03:31 <@Reiv> What's the average of 2d6, drop lowest? 03:32 <~Vornicus> So you roll two six sided dice and take the larger of the two 03:32 < Xires> I would've picked up on it eventually, but I do appreciate the foreshadowing 03:32 <@Reiv> Right. 03:32 < Xires> 4 03:33 <@Reiv> Xires: Then you're most welcome. This channel was pretty much explicitly set up so that coders - who were previously spread across multiple channels on this network, and had an occasional tendancy in several of said channels to overwhelm conversation with their programming topics/assistance/etc - to have a common ground. 03:33 < Xires> most excellent, ty for the welcome 03:34 <@Reiv> Hell, it was founded because a friend of mine needed help with Python, and I knew Vorn knew Python, but they didn't share any channels between them... 03:34 <~Vornicus> (1 + 3*2 + 5*3 + 7*4 + 9*5 +11*6) / 36 = (1 + 6 + 15 + 28 + 45 + 66) / 36 = 161/36 = 4 17/36 ~= 4.4722 03:34 < Xires> I may be a bit 'elitist' at times, but generally for either good reason or because I'm an old man set in my ways 03:34 <~Vornicus> I presume you wanted the mean. 03:34 <~Vornicus> The mode is 6, the median is 5. 03:35 < Xires> :-\ 03:35 < Xires> that seemed overly complicated 03:35 <@Reiv> ... and of course within five minutes of my registering the place, ToxicFrog came screaming in like a meteor from orbit, because he saw the registration with his Godpowerz(tm) and approved of the idea like a kid does candy 03:36 <@Reiv> Aaand it's kinda grown from there~ 03:36 <~Vornicus> Xires: sometimes I get asked to do math. Occasionally I can do that math mostly in my head 03:37 < Xires> Vornicus; I once was very similar..then I decided to give up on highschool 03:37 <@Reiv> Our rules are simple: Play nice. Try to keep off-topic stuff down when it may be distracting. And we give everyone we recognised a gun in here because some of us have nukes, so it's an efficient way to deal with troublemakers. ;) 03:37 <@Reiv> Xires: Vorn is a Math Guy(tm). 03:37 < Xires> recently(past 5 years or so) I have realized how exactly that 'use it or lose it' concept works 03:37 * Vornicus is aiming at a phd in the stuff... 03:38 <@Reiv> (He seems to mostly use it helping me figure out probability curves.) 03:38 <@Reiv> :P 03:38 < Xires> useful 03:38 * Reiv is a Game Guy. 03:38 <@Reiv> By our powers combined, we are Captain Too Many Projects! 03:38 < Xires> yeah, I'm waiting on a player to show up to start a game 03:39 thalass_ [thalass@Nightstar-724ec5eb.bigpond.net.au] has joined #code 03:39 * ToxicFrog is currently an Embedded Systems Guy but will hopefully be leaving that behind within a month 03:39 <~Vornicus> jesus christ do we have too many projects 03:39 <&ToxicFrog> Who in this channel doesn't? 03:39 <~Vornicus> well point. 03:40 < Xires> ToxicFrog; Linux-based embedded systems or no? 03:41 <&ToxicFrog> Smaller than that. IMAP-based reconfigurable image processors. 03:41 < Xires> understood 03:41 <&ToxicFrog> (and before that it was much bigger than that, but a custom, distantly Thoth-derived OS) 03:42 <~Vornicus> ...you say Thoth-derived and my mind turns to something considerably more fictional than you mean. 03:42 < Xires> gotcha 03:42 * Xires eyes his Thoth tarot deck 03:42 <~Vornicus> Vash is picking at my typing. 03:43 <&ToxicFrog> Yeah I mean Thoth the shared-memory message-passing OS 03:43 < Xires> ToxicFrog; I've played around a little bit with some embedded stuff on Geode processors, some ATOM based boards, a little TRON VLSI and TI's Chronos 03:43 <&ToxicFrog> I don't think CacheOS had any code in common with it by the time I got involved, but it used to, and the inspiration was still pretty obvious 03:44 < Xires> not enough time to dive in as deeply as I'd like 03:44 < Xires> I may have questions, if you don't mind lending some advice 03:45 <&ToxicFrog> Sure, but I'm not sure how much help I'll be; I haven't worked on any of those platforms. 03:47 < Xires> I'm sure it'll be easier than explaining rudimentary algebra to a NASA engineer 03:47 < Xires> umm..wrong input box..sorry 03:49 <~Vornicus> Having worked with aerospace engineers, that's not saying much~ 03:49 < Xires> yeah, one of my current students is an aerospace engineering graduate 03:50 < Xires> it's kinda funny how easy calculus is for him but he sometimes forgets simple things 03:50 <&ToxicFrog> What do you teach? 03:52 < Xires> programming, administration, networking, basic technical crap, security auditing, etc. 03:52 < Xires> anything that I know adequately 03:53 < Xires> hoping to get a double-masters in CS && CE to accompany a bachelor's in education(with minor in psychology) 03:58 thalass_ is now known as Thalass|lunchymunchy 03:59 < Xires> other than that, my 'day' job(as in all-fsckin'-day) is as a security systems engineer for a company that produces middleware security products to protect banks, manufacturing plants, etc. so I mostly tend to code in C & ASM 04:00 < Xires> sometimes a little Perl & shell script(bourne shell) 04:00 < Xires> perl aka awk++ 04:02 <&ToxicFrog> Fun times 04:03 < Xires> ci 04:03 < Xires> I first gained an interesting in Python in the 90's when I was desperately seeking something to replace Perl 04:03 <&ToxicFrog> My current day job - such as it is - is as an MSc.CS student, working on message-passing parallel programming on cache-acoherent embedded architectures (aka. porting a cluster computing API to the IMAP5 architecture) 04:04 <&ToxicFrog> Before that I was doing CacheOS work, meaning mostly C++ and a bit of x86 asm. Driver development, mostly 04:04 < Xires> <3 MPI 04:04 <&ToxicFrog> And I will be so glad when I'm done and can work in HLLs again. 04:04 <&ToxicFrog> This is actually Pilot, a greatly simplified API implemented on top of MPI 04:06 <&ToxicFrog> The IMAP5 port keeps the API, but uses the vendor libraries rather than porting MPI to an embedded image processor. 04:09 < Xires> ToxicFrog; http://youtu.be/H6EEFJk6q3Q - awesome, if you haven't seen it yet 04:13 VirusJTG [VirusJTG@Nightstar-09c31e7a.sta.comporium.net] has quit [[NS] Quit: Program Shutting down] 04:14 Thalass|lunchymunchy is now known as Thalass|NB 04:16 Kindamoody[zZz] is now known as Kindamoody 04:18 Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has quit [NickServ (GHOST command used by Derakon_)] 04:18 Derakon_ [Derakon@Nightstar-a3b183ae.ca.comcast.net] has joined #code 04:18 Derakon_ is now known as Derakon 04:18 mode/#code [+ao Derakon Derakon] by ChanServ 04:23 Nemu_ [NeophoxProd@Nightstar-2fe52f34.asahi-net.or.jp] has joined #code 04:23 Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has quit [Client exited] 04:24 Nemu [NeophoxProd@Nightstar-5af926d1.asahi-net.or.jp] has quit [Ping timeout: 121 seconds] 04:26 Maze is now known as EvilDarkLord 04:26 <&ToxicFrog> ...staying up until 2am to watch an introduction to pthreads (which I already know) does not strike me as fun. 04:28 < Xires> ToxicFrog; the architecture is far more interesting..you can ignore the pthreads stuff 04:28 < Xires> it goes over how multitasking & threading works at a hardware level 04:28 < Xon> ooh that does sound interesting 04:29 < Xires> design factors & decisions made through the years to support multicore/manycore programming 04:29 < Xon> Xires, tho on modern x86 processes it does get quite murky on what is being executed 'now' 04:29 <&ToxicFrog> On which architecture(s)? It's not clear from the description, and I'm not going to turn the sound on. 04:30 < Xon> processors* 04:31 < Xires> primarily x86 thought I think there may be some mention of others 04:31 < Xires> s/thought/though/ 04:32 < Xon> parallelism is Really Hard tho, most people ignore it for good reason 04:32 < Xires> but in some cases it's also really necessary 04:33 < Xon> yeah 04:33 <&McMartin> Superscalar is pretty madhouse 04:33 <&McMartin> But parallelism has its place. 04:34 <&McMartin> I'm not totally convinced threads do, but parallelism does~ 04:34 < Xon> it is kinda sad tho how many uninformed think it's a small jump.It's a massive leap in complexity and if stuff really goes wrong stupidly hard to trouble shoot without throwing insane amounts of hours at it 04:34 <&McMartin> There are a tiny, tiny handful of places where threads make things actually simpler 04:34 <&McMartin> And those are the only places I like to use them. 04:34 <&McMartin> (The big one being "one thread handles interaction with the OS's event stream, the other one does all the work) 04:35 <&McMartin> (and maybe a third for audio decoding in advance or something") 04:35 < Xon> blocking IO in the UI thread always is frustrating :( 04:36 < Xires> dunno about the audio decoding thing..I find them to be marginally useful for queue monitors to promote cache prefetch between networked streams 04:36 < Xires> particularly useful for providing 'cloud' services 04:36 < Xires> add in 0mq and it's pretty wonderful 04:36 * McMartin nods 04:37 <&McMartin> My understanding is that threaded service systems do not scale as well as poll/select so you'll have to abandon threads eventually 04:37 <&ToxicFrog> McMartin: "one thread handles each socket" can make things a lot simpler conceptually for some networked stuff. 04:37 <&McMartin> Also, ha ha ha ha ha ha 04:37 <&ToxicFrog> Although in practice you don't actually need concurrency for that, you can get away with coroutines and select() 04:37 * McMartin nods 04:37 <&McMartin> I consider coroutines to be parallelism, conceptually, even if in practice they aren't. 04:37 <&ToxicFrog> (also, threaded systems can scale well, cf. CacheOS) 04:37 <&McMartin> I was laughing at this line about an old instruction in Commodore BASIC: 04:38 <&McMartin> "Technically speaking, the WAIT statement reads the status of memory location ADDR, exclusive-ORs it with TRIG, then ANDs the result with MASK, repeating these steps until a nonzero result is obtained." 04:38 <&ToxicFrog> (OTOH, CacheOS was written from the kernel up to be very fast even when running hundreds of thousands of threads) 04:38 <&McMartin> "Practically speaking, few human minds can follow such logic, let alone comprehend its effect on their programs." 04:39 < Xires> Although in practice you don't actually need concurrency for that, you can get away with coroutines and select() 04:39 < Xires> whilst I don't care for select(), I can definitely agree w/ coroutines being quite useful in such a situation 04:40 < Xires> provided you don't have a broken implementation 04:40 <&ToxicFrog> "provided it actually works properly" is implicit in most such statements~ 04:41 < Xires> yeah, the implementation that I got stuck w/ @ work doesn't 04:41 <&ToxicFrog> joy 04:41 < Xires> but they won't let me recode it because "it's not cost effective" 04:41 < Xires> so..6 months of bandaid patches is better than 2 months of coding it correctly :-\ 04:41 <&ToxicFrog> ...but it doesn't work 04:41 <&ToxicFrog> argh 04:42 < Xires> yeah, that's why I don't get management decisions 04:42 < Xires> 'business sense' doesn't make any 04:42 <&ToxicFrog> Eat their hearts. It is the only way 04:43 <&ToxicFrog> McMartin: the main reason I draw a distinction there is that coroutines, local-memory concurrency, and shared-memory concurrency all have different traps. 04:43 * McMartin nods 04:43 <&McMartin> Shared-memory concurrency that involves anything less structured than message passing sets off four or five alarm bells for me. 04:44 <&McMartin> And I'm one of the 0.5% of programmers with significant concurrency experience. >_< 04:44 <&ToxicFrog> Conceptually they're all "parallelism", but there is still enough of a conceptual difference between them that I don't feel comfortable categorizing them all as the same thing. 04:44 <&ToxicFrog> And yeah, my approach to shared-memory concurrency is "use that as an optimization to implement message passing, treat as local memory thereafter" 04:44 <&ToxicFrog> Also, 0.5%? It's seriously that small? 04:45 <&McMartin> ... That's one in two hundred programmers. 04:45 <&McMartin> I think I may be highballing it. 04:45 <&ToxicFrog> (also, what's the cutoff for "significant" here) 04:46 <&McMartin> "Actually results in a net productivity gain when deployed" 04:46 <@himi> Also, what's the definition of 'programmer' you're using? 04:46 < Xon> My understanding is that threaded service systems do not scale as well as poll/select so you'll have to abandon threads eventually 04:46 < Xon> there is a reason Windows has had IO completion ports since Windows NT 04:46 <&McMartin> himi: scripters count. 04:46 <&McMartin> So it's a pretty broad net, yes 04:46 < Xon> it basicly shits all over pure blocking threads and traditional poll/select 04:46 <@himi> Oh, almost certainly lowballing it, then 04:47 <@himi> I'd be surprised if more than a couple of percent of programmers regularly using system-level languages (C/C++/etc) had significant experience of concurrency 04:48 <&McMartin> At this juncture, I'd trust high-powered middleware writers (who will probably be using Java or C#) over C/C++ systems-level guys. 04:48 <@himi> I know /I/ don't - all the kernel coding I did was run on uniprocessor systems and never got any use on multiprocessor 04:48 <&ToxicFrog> "regularly using system-level languages" restricts it a lot, and in particular excludes Erlang, Scala, and Clojure (heavy parallel programming culture) and Lua (coroutine use is common) 04:48 < Xires> bah 04:49 < Xon> I prefer to use gc'ed langauges if I'm writing user-code with threads. makes memory management a /lot/ saner 04:49 < Xires> I'm one of those system-level guys :-\ 04:49 <@himi> TF: I'd have thought Erlang is a system level language 04:50 <@Rhamphoryncus> There's a pretty big difference between the concept of threading and how threading is implemented in mainstream languages 04:51 <@Rhamphoryncus> The C stack is pretty heavy. Until 64-bit you couldn't even get C threading to scale up due to address space limitations 04:51 <@himi> Lua is a scripting language - I haven't used it so I don't know what it's like 04:52 <&ToxicFrog> himi: it's a functional, garbage collected, bytecode-interpreted language without pointers or other arbitrary memory access 04:52 <&ToxicFrog> That does not say "system level" to me 04:52 <@himi> Erlang? 04:52 <&ToxicFrog> Yes. 04:53 <&McMartin> Clojure is a tricky case because while it has heavy parallel programming, it's also heavily *immutable* 04:53 <&McMartin> I'm not even sure how to classify it by your tripartite system~ 04:53 <@Rhamphoryncus> himi: erlang is a phone exchange language. Despite the proponents I haven't seen a way to adopt it for *general* use 04:53 <@himi> My understanding is that it was designed to do system level stuff 04:53 <&ToxicFrog> Nope. 04:53 * himi shrugs 04:53 <@himi> I'll shut up now, then 04:53 <&ToxicFrog> It was designed to run phone exchanges and support zero-downtime in-place software upgrades. 04:54 <@Rhamphoryncus> It's good at doing very small, independent operations 04:54 < Xon> ToxicFrog, yeah. telephone systems are big on zero-downtime 04:54 <@Rhamphoryncus> You wouldn't use it to build a large library with a lot of sequential operations 04:54 <@himi> Yeah, and I thought that involved pretty low-level work, equivalent to writing an OS or something not far short of that 04:56 <@himi> If it's designed for low level work, then exactly how it achieves that design goal isn't important, I'd have thought 04:57 <@Rhamphoryncus> low-level vs high-level as a categorization falls about at this point. They're very broad strokes. Not useful for nitpicking :) 04:57 <@himi> eh 04:58 <@himi> How close are you to directly controlling the hardware? 04:58 <@Rhamphoryncus> erlang has more overhead than C, but the abstractions make it vastly easier for certain tasks, and higher performance unless you put a *ton* of effort in 04:59 <@Rhamphoryncus> Just like python can for a different set of tasks 04:59 < Xires> erlang can indeed make things much easier for certain tasks..certain parts of AppLogic are using it because of this 04:59 <&ToxicFrog> himi: quite far away. That's the key difference in my mind. 05:00 <&ToxicFrog> Erlang might be running on either an Actual OS, or the VM might be the OS on some dedicated switching hardware somewhere, but in either case it's designed for high performance and reliability but not hardware-level control 05:00 <&ToxicFrog> You could not, for example, implement a device driver in it 05:00 <@himi> Okay then 05:01 <@Rhamphoryncus> Really, you can't do hardware-level control of threading unless you're writing your own kernel. Otherwise most of what you're doing is dependent on the kernel APIs 05:02 <@himi> I guess the question is, how many real world applications actually make use of concurrency? 05:03 < Xon> at a guess; most word processes, spreadsheets, browsers, etc 05:03 <@himi> If you're operating at the kernel level you don't have any option, but in application space how often do people write concurrent code? 05:03 <@himi> xon: You think? 05:03 <@Rhamphoryncus> "Some". We lack an general purpose languages that are good at it, so... 05:03 <@himi> I know for a long long time Firefox was pretty much single-threaded 05:04 <@Rhamphoryncus> IME it still is :P 05:04 <@Rhamphoryncus> A good chunk of that might be due to the filesystem.. yay design fail. 05:05 <@Rhamphoryncus> (that's kernel design fail, not firefox) 05:05 <&ToxicFrog> himi: rather a lot of games these days. 05:05 <&ToxicFrog> Anything intended for porting to (or from) a console, especially. 05:05 * Vornicus pokes at his art list which has just vastly expanded 05:06 <@Rhamphoryncus> Yeah, if only to put sound in a separate thread 05:06 <~Vornicus> if I wasn't building City On The Hill requirements in my head I could outsource this. 05:06 <@himi> TF: yeah, and what percentage of programmers out there are game programmers? 05:07 < Xon> himi, my idle copy of ms word has 12 threads, IE w/ 4 tabs ~130 threads, chrome has 66. outlook is idling at 25 05:07 <@himi> The vast majority do in-house business coding, last I heard 05:07 <~Vornicus> that's still true. 05:08 <&ToxicFrog> Oh hey here's an easy check. Threaded stuff running on Durandal: damn near everything, but notably Steam, Opera, Winamp, dropbox, X11, notepad++, and explorer 05:08 <@himi> Xon: yeah, and those are apps that have many many years of dedicated work going towards making them work on modern systems 05:08 < Xon> notepad only has 1 thread 05:08 < Xon> =) 05:08 <@himi> They're /not/ stuff that the bulk of programmers would expect to work on 05:09 <&ToxicFrog> cmd.exe is also singlethreaded. That appears to be the only singlethreaded program currently running. 05:09 < Xon> any .NET application has multipule threads by default due to the GC running in another thread, and the thread pool which is functioanllyl for free 05:10 < Xon> and using multipule threads in .net is very easy with all the async stuff 05:10 <~Vornicus> Where did all these X people come from? 05:10 <&ToxicFrog> On Thoth, every Chrome subprocess is itself multithreaded, xchat appears to have one thread per socket, claws has a bunch, lots of the "background" desktop environment stuff is multithreaded... 05:11 <&ToxicFrog> It's easier to find threaded programs that non-threaded. 05:11 <&ToxicFrog> Of course, in some, perhaps most, cases these threads are handled by libraries and not explicitly managed by the application programmer. 05:12 Nemu_ [NeophoxProd@Nightstar-2fe52f34.asahi-net.or.jp] has quit [Connection reset by peer] 05:13 Nemu [NeophoxProd@Nightstar-a3dbf2b5.asahi-net.or.jp] has joined #code 05:13 <@himi> This is a valid point - I just checked and Python GTK+ app I wrote shows up as having three threads, which I had no idea about until just now 05:13 <@himi> I wouldn't consider that concurrent programming - dunno about you guys 05:15 <@Rhamphoryncus> separating sound from the rest of the program is concurrency, having a separate thread to handle each socket is parallelism, but it really is very limited 05:15 <@Rhamphoryncus> Conceptually they should be using tens of thousands of threads for all sorts of different things 05:16 < Xires> too many threads is a bad idea 05:16 < Xires> very bad idea 05:16 < Xires> performance-wise 05:16 <@Rhamphoryncus> Xires: in implementation, not in concept 05:17 <@himi> Threads doing nicely separate tasks is certainly at the low end of complexity, concurrency wise 05:17 <&ToxicFrog> Xires: that is an implementation detail. A Sapphire cache under load will be running tens to hundreds of thousands of threads. 05:17 <@himi> It also lends itself to some variety of message-passing 05:17 * himi tries to refer back to McMartin's original point . . . 05:18 <&ToxicFrog> However, it also has sixteen cores and can context switch in ~4 instructions and message pass + context switch in 6. 05:18 <&ToxicFrog> (and the threads are heavily network-bound) 05:19 <@Rhamphoryncus> In C you need a stack of around a meg, one allocated per thread, and likely an assortment of other state holders. An efficient thread implementation would likely be a few hundred bytes, with the rest on the heap as needed 05:20 < Xon> yeah, on 32bit x86 you can onyl have ~2000 threads or so with the default stackside before you run out of virtual address space 05:20 < Xon> stacksize* 05:20 <@Rhamphoryncus> (could be less than a few hundred if the language can have a larger atomicity) 05:21 <@Rhamphoryncus> The kernel threading API isn't designed for such cheap threads 05:22 < Xon> that and untill recently, linux kernel could only do 1 context switch at a time 05:22 <@Rhamphoryncus> Which is why N:M threading gets reinvented (map a large number of user threads onto a small number of kernel threads), even though 1:1 is better within its design scope 05:23 < Xon> co-operative multithreading tends to suck unless the code is really well written =p 05:24 <@Rhamphoryncus> Xon: that's another language design issue. In this day and age (heh) it's obvious that you need to isolate errors such as hangs to a small part of the system, but actually doing that in a language... 05:25 < Xon> well, that is what kernel threads are for 05:26 < Xon> also, a lot of code assumes the current stack isn't going to migrate to a new thread. some code breaks /horribly/ if you expose it to those conditions 05:26 <@Rhamphoryncus> My ideal language would let you isolate sections of the program, and enforce it, allowing them to be forcibly killed as needed. Basically reimplementing the kernel's process isolate 05:27 <@Rhamphoryncus> Xon: yup, that's how C is implemented 05:28 <@Rhamphoryncus> (technically there's enough abstraction in the C specs that you only need the pointers to remain valid, which I think means the integer values you can convert them to and from as well, but you can't do any better than a 64-bit address space with virtual memory) 05:29 < Xon> OS-level per thread storage also breaks assuptions too\ 05:30 <@Rhamphoryncus> To be really pedantic having threading at all violates the C specs :) 05:30 <~Vornicus> Okay. Current art todo list. big versions of each planet; a backing image for the planet info ui; selection reticle and crosshairs 05:32 <@Rhamphoryncus> Thus Beohm's "Threads Cannot be Implemented as a Library" paper. 05:35 < Xon> yeah 05:35 < Xon> not baking threading into the language in C was rather horrible 05:38 <@Rhamphoryncus> Only one of the flaws of C 05:39 <@Rhamphoryncus> The C++ revisions on it make it better.. while retaining the essential crappiness heh 05:40 <@himi> I'm pretty sure threading wasn't much thought of when C was originally designed 05:41 <@Rhamphoryncus> Considering they started developing in 1969... 05:41 * Vornicus isn't even sure what he wants the reticle to look like. 05:42 <~Vornicus> Big planet images are another matter. 05:42 <@Rhamphoryncus> Vornicus: http://conorlastowka.com/wp-content/uploads/2010/06/calvin1.jpg 05:43 < Xires> Rhamphoryncus; +1 05:44 <~Vornicus> Rham: ...yeah, no. 05:59 < Xon> Only one of the flaws of C 05:59 < Xon> strings are fun! 05:59 < Xon> "fun" 06:08 <@Rhamphoryncus> You can almost argue that only the parser knows of strings, not the underlying language 06:13 <@himi> The language is definitely very much 'chunks of memory' oriented, rather than oriented towards logical objects 06:13 <@Rhamphoryncus> Yet technically is objects :) 06:14 <@Rhamphoryncus> Fun fact: you can't implement your own malloc without violating the specs either 06:16 Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has joined #code 06:16 mode/#code [+ao Derakon Derakon] by ChanServ 06:16 <~Vornicus> ?? 06:18 <@Rhamphoryncus> You can tell C that a chunk of memory is now an object but you cannot tell it that chunk is no longer an object 06:18 <~Vornicus> aha 06:19 <@Rhamphoryncus> If you implemented a large program in a single file, with your own heap, depending on inlining and other optimizations you could access memory that was already "freed" 06:20 <@Rhamphoryncus> Of course there's a lot of practical barriers to that 06:21 <@Rhamphoryncus> Such as the lack of inter-file optimizations.. oh hey, we're getting link-time-optimizations now XD 06:21 <@RStamer> "Technically speaking, the WAIT statement reads the status of memory location ADDR, exclusive-ORs it with TRIG, then ANDs the result with MASK, repeating these steps until a nonzero result is obtained." <-- wouldn't that only loop a few times? 06:22 <&McMartin> No, because the memory is not modified by these operations; the computation takes place in the accumulator. 06:22 <&McMartin> Also, if you were to set MASK to zero, the entire system will hardlock~ 06:23 ErikMesoy|sleep is now known as ErikMesoy 06:25 <@RStamer> So one of those steps causes it to return zero often? 06:26 <@RStamer> s/causes it to return/returns/ 06:26 <&McMartin> Having the last step be "AND 0" makes it return 0 100% of the time, yes. 06:26 <&McMartin> What it's *for* is putting a watch on bits in volatile memory. 06:32 < Xires> mm, this place officially seems cozy 06:33 <&McMartin> (One can use WAIT 53260,16,16 for instance to wait until the bit associated with the joystick port 2 fire button was released) 06:34 <@RStamer> Ah 06:34 <@RStamer> Interesting 06:34 Derakon is now known as Derakon[AFK] 06:34 <&McMartin> Basically, WAIT A, B, C is "halt the non-volatile parts of the system until PEEK(A) AND C = B) 06:35 <&McMartin> Er, AND B = C. 06:52 Kindamoody is now known as Kindamoody|afk 08:20 cpux [cpux@Nightstar-98762b0f.dyn.optonline.net] has quit [Client closed the connection] 09:08 <~Vornicus> oh look, time to upgrade the Klotski solver. 09:08 Kindamoody|afk is now known as Kindamoody 09:16 You're now known as TheWatcher 09:36 Kindamoody is now known as Kindamoody|out 09:38 <@Tarinaky> Where in the nine hells is this minus sign coming from! 09:41 <@Tarinaky> I'm trying to integrate |sin x| from -pi to pi. I'm getting -4 instead of 4. 09:41 <@Tarinaky> And I cannot, for the life of me, figure out why. 09:42 <@Tarinaky> If you integrate sin you get /minus/ cos. 09:42 <@Tarinaky> :/ 09:43 <@Tarinaky> And wolfram alpha won't give me the step by step solution for it. 09:44 <~Vornicus> what are you asking of wolfram alpha? 09:44 <@Tarinaky> integrate sin x 09:45 <~Vornicus> yeah there's no steps for that, it's straight off the basic table. 09:45 <~Vornicus> Okay, so |sin x| from -pi to pi. 09:45 <~Vornicus> piecewise, you have: -sin x from -pi to 0, and sin x from 0 to pi 09:45 <@Tarinaky> Right, so you get twice the integral from 0 to pi. 09:46 <~Vornicus> okay, integral from 0 to pi of sin x is... 09:46 <@Tarinaky> - cos x 09:46 <~Vornicus> okay, so -cos(pi) is... 09:47 <@Tarinaky> Oh. 1. 09:47 <@Tarinaky> For some reason I thought it was -1. >.< 09:48 <~Vornicus> and -cos(0) is... 09:48 <@Tarinaky> I think I'm a lost cause >.< 09:48 <~Vornicus> dropped signs are a very very common error. 09:49 <@Tarinaky> I still can't do the integral of sin x cos nx thing. 09:49 <@Tarinaky> Which is annyoing because it's always a question :/ 09:49 <~Vornicus> What's wrong? 09:49 <~Vornicus> (assume n isn't 1, because you do indeed get special-cased there) 09:51 <@Tarinaky> The 'what's wrong' is I'm a fucking idiot who can't seem to do math when it actually matters. 09:54 <@Tarinaky> I can barely get through one question in 2 hours, never mind the paper :/ 10:00 <~Vornicus> okay. fixing klotski. step 1: change "occupied" to do a bunch of calculations from a pile of tuples instead of doing its own rectangle crunching. 10:01 <~Vornicus> step 2: change "available moves" so that it does the same thing, and also searches each piece's full current move space. 10:03 <~Vornicus> Tarinaky: it sounds to me like you're psyching yourself out a lot. 10:09 <@Tarinaky> I can't seem to get my head around how to expand out the ratio after I've integrated it :/ 10:09 <@Tarinaky> I have... 10:09 <@Tarinaky> \frac{cos(n-1)x}{n-1} - \frac{cos(n+1)x}{n+1} 10:10 <@Tarinaky> I can form the denominator fine, that's n^2-1 10:10 <@Tarinaky> But I can't get my head around the numerator :/ 10:12 <~Vornicus> it's (n+1)cos((n-1)x)-(n-1)cos((n+1)x) 10:12 <@Tarinaky> That doesn't match what I'm trying to mangle it into as part of the question :/ 10:13 <@Tarinaky> I'm supposed to end up with a fourier series with 4/pi \sigma \frac{1}{4n^2-1} cos 2nx in the fourier series. 10:14 <~Vornicus> step 3: change the boundary system from a simple rectangle to another pile of tuples. 10:14 <~Vornicus> Step 2 actually I think I can get rid of that copypasta now. 10:17 Attilla [Obsolete@Nightstar-9e7fa2b2.range86-162.btcentralplus.com] has joined #code 10:48 <~Vornicus> okay, step 1 done. 10:52 RichyB [richardb@Nightstar-3b2c2db2.bethere.co.uk] has joined #code 11:01 <~Vornicus> oh cool, that does kill the copypasta. Now I'm kind of impressed, this got a lot simpler. 11:02 * TheWatcher arghs, flails at this auth code 11:10 * Vornicus uses set.isdisjoint(otherset) for the first time. 11:13 <@TheWatcher> Multiple potential authentication methods, some of which require two-stage user activation while others don't, some of which support password reset while others don't... bleegh 11:14 <~Vornicus> ...and it runs the first time, and is correct. Victory! 11:14 <@TheWatcher> \o/ 11:15 <@Tarinaky> "Suppose that the sequence (a_n) satisfies a_n != -1 for each n in N. 11:15 <@Tarinaky> Prove that if \sigma a_n is absolutely convergent then \sigma \frac{a_n^2}{1+a_n) is absolutely convergent" 11:15 <~Vornicus> (a little slower. but it gets the Layton move count correct, and I can now give it arbitrarily-shaped objects and boundaries) 11:15 <@Tarinaky> I have... no idea what to start with there :/ 11:17 <~Vornicus> (True Klotski can be solved in 81 moves, where 1 move counts any sequence of steps made by the same block continuously) 11:20 * Vornicus now prepares to write the klotski problem he has been given so the program can understand it. 11:21 <~Vornicus> I don't know about that one. 11:28 <~Vornicus> Tarinaky: a_n^2/(1+a_n), now that I think on it, is In General close to a_n 11:28 <~Vornicus> being a_n - 1 + 1/(a_n + 1) 11:30 <~Vornicus> That may help you. 11:30 <~Vornicus> Screw data entry, I'm going to sleep. 11:31 <@TheWatcher> Nivorn 11:32 Vornicus [vorn@Nightstar-221158c7.sd.cox.net] has quit [[NS] Quit: ] 12:13 iospace is now known as iobleh 12:53 Nemu [NeophoxProd@Nightstar-a3dbf2b5.asahi-net.or.jp] has quit [Connection reset by peer] 12:55 Nemu [NeophoxProd@Nightstar-c5a5a5aa.asahi-net.or.jp] has joined #code 12:55 iobleh is now known as io|bleh 13:41 RichyB [richardb@Nightstar-3b2c2db2.bethere.co.uk] has quit [Ping timeout: 121 seconds] 14:37 * TheWatcher finishes the reworking of this auth system. Has no idea if it'll actually /work/ but will find that out shortly... 15:02 ErikMesoy [Erik@A08927.B4421D.FE7332.A86588] has quit [Ping timeout: 121 seconds] 15:02 ErikMesoy [Erik@Nightstar-be32adc8.80-203-17.nextgentel.com] has joined #code 15:07 <@io|bleh> https://twitter.com/DEVOPS_BORAT 15:19 <@RStamer> I can't tell if I should take that seriously or not 15:20 <@TheWatcher> It is a spoof, mostly. 15:20 <@TheWatcher> (sometimes it is entirely too true...) 15:23 <@gnolam> "You can download our code from the URL supplied. Good luck downloading the only postdoc who can get it to run, though" 15:24 RichyB [richardb@Nightstar-3b2c2db2.bethere.co.uk] has joined #code 15:24 <@froztbyte> haha 16:09 Thalass|NB [thalass@Nightstar-724ec5eb.bigpond.net.au] has quit [Ping timeout: 121 seconds] 16:23 Courage [Moltare@583787.FF2A18.190FE2.4D81A1] has quit [Ping timeout: 121 seconds] 16:27 Courage [Moltare@583787.FF2A18.190FE2.4D81A1] has joined #code 16:27 mode/#code [+o Courage] by ChanServ 16:34 Syk is now known as syksleep 16:39 RichyB [richardb@Nightstar-3b2c2db2.bethere.co.uk] has quit [Ping timeout: 121 seconds] 17:00 RStamer is now known as ems 17:00 ems is now known as rms 17:19 RichyB [richardb@Nightstar-3b2c2db2.bethere.co.uk] has joined #code 17:56 <@Rhamphoryncus> Bah, form letter responses, and from mojang no less 17:59 < RichyB> They have like a million customers and fewer than 50 employees, don't htey? 17:59 RichyB [richardb@Nightstar-3b2c2db2.bethere.co.uk] has quit [[NS] Quit: >:3 This is BunThulhu. Copy him into your quit message to help him take over the Internet.] 18:01 <@Rhamphoryncus> No idea how much they have in customer service 18:02 <@Rhamphoryncus> It's just so typical though. It's a bug in their system, not something on my end 18:13 Derakon[AFK] [Derakon@Nightstar-a3b183ae.ca.comcast.net] has quit [Ping timeout: 121 seconds] 18:13 Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has joined #code 18:13 mode/#code [+ao Derakon Derakon] by ChanServ 18:22 Courage [Moltare@583787.FF2A18.190FE2.4D81A1] has quit [Ping timeout: 121 seconds] 18:25 Courage [Moltare@583787.FF2A18.190FE2.4D81A1] has joined #code 18:25 mode/#code [+o Courage] by ChanServ 18:31 gnolam [lenin@Nightstar-bb103c17.cust.bredbandsbolaget.se] has quit [[NS] Quit: Reboot] 18:36 gnolam [lenin@Nightstar-bb103c17.cust.bredbandsbolaget.se] has joined #code 18:36 mode/#code [+o gnolam] by ChanServ 18:38 Kindamoody|out is now known as Kindamoody 18:47 <@gnolam> https://twitter.com/oooarrr/status/288014002884337664 19:16 Kindamoody is now known as Kindamoody[zZz] 19:35 <@Alek> "Life is like a folder chmod 111, you never know what it contains." 19:44 <@gnolam> http://www.theverge.com/2013/1/8/3850056/qualcomms-insane-ces-2013-keynote-pictu res-tweets 19:46 Vornicus [vorn@Nightstar-221158c7.sd.cox.net] has joined #code 19:46 mode/#code [+qo Vornicus Vornicus] by ChanServ 20:22 <@Alek> http://notalwaysworking.com/know-it-all-boss/28151 20:32 <@Courage> How many OCR programmers does it take to change a lightbulb? 20:33 <@Courage> Tuuo - oria to saur it, on0 to sand it Io yiin lnoice 20:34 <@Azash> Haha 20:34 * Alek slow claps. 20:41 Attilla [Obsolete@Nightstar-9e7fa2b2.range86-162.btcentralplus.com] has quit [Ping timeout: 121 seconds] 20:43 Attilla [Obsolete@Nightstar-9e7fa2b2.range86-162.btcentralplus.com] has joined #code 21:34 * Vornicus dataentries dataentries dataentries 21:42 <~Vornicus> This problem takes 2 1/2 times as long for my solver to do, but the resulting move list is much shorter. 21:50 <~Vornicus> (it goes through 2 1/2 times as many states too, so) 22:24 ErikMesoy is now known as ErikMesoy|sleep 22:34 mac [mac@Nightstar-fe8a1f12.il.comcast.net] has joined #code 22:39 Vornicus [vorn@Nightstar-221158c7.sd.cox.net] has quit [[NS] Quit: ] 22:57 Nemu [NeophoxProd@Nightstar-c5a5a5aa.asahi-net.or.jp] has quit [Connection reset by peer] 22:58 Nemu [NeophoxProd@Nightstar-14757de1.asahi-net.or.jp] has joined #code 23:03 < mac> any one here ever worked in applescript? 23:11 Thalass|NB [thalass@Nightstar-724ec5eb.bigpond.net.au] has joined #code 23:13 <@simon> hmm... let's say I want to write the shortest brainfuck program for printing either one unicode character or a series of 8-bit characters in a row. 23:14 <@simon> I think this relates to Kolmogorov complexity 23:17 <@simon> i.e. there is no deterministic way to achieve the smallest program for a given output. 23:19 <@simon> but I can settle with less if I find a good heuristic that works e.g. for some patterns of printable ASCII. 23:20 <@simon> I don't know if any of you have tried to write as small as possible brainfuck programs that print various strings 23:22 <@simon> but my experience is that you get into a bunch of patterns if either the letters are very close to each other (e.g. <5 apart), in which case they can be mutated without much cost, or farther apart, in which case it would have been better to create a copy of it that can be destroyed 23:23 <@simon> (e.g. if I should write AZA, I would prefer to 1) build A, 2) copy A into Z, 3) use A again, rather than 1) build A, 2) increase A to Z, 3) decrease Z into A.) 23:25 * ToxicFrog eyes the iPod Nano 6G 23:25 <&ToxicFrog> Wow, this thing is useless 23:25 <@simon> so a heuristic I'm trying to express is one that predicts that I might want some number of copies available based on how many occurences of letters that are far apart 23:25 <@simon> (I'm just ranting if that's okay.) 23:25 VirusJTG [VirusJTG@Nightstar-09c31e7a.sta.comporium.net] has joined #code 23:25 <@simon> (or, I know it is. the topic encourages it!) 23:26 <@simon> but it gets more complicated than that, since I don't just want to limit myself from looking at adjacent letters and determining if a large difference warrants an extra copy. 23:28 <@simon> e.g. AZAZAZAZ... should, with a simple immediate-neighbour-difference heuristic determine that I need n/2 copies even though there is a much smaller program that can settle with just two cells built in some smart way. 23:29 <@simon> so I've run into something that according to my intuition is uncomputable. 23:30 <@simon> so I'll settle with less and limit my heuristic to /something/ that detects how many cells I need and how I should build them 23:32 <@simon> err... maybe I should start with a simple heuristic: I'll build the entire string in memory and then loop it. I'll find the average ASCII number of the string, a, create that many copies of floor(a) and adjust each of these up and down. 23:35 <@simon> if I can somehow divide those cells into groups of similar characters (I don't care about the order) and treat these groups differently based on how close they are, to begin with, I only have to write one generating program for each group, adjust them minimally and print them in the right order (either by generating them in the right place or by iterating through them -- this is a separate and less problematic part) 23:35 <&McMartin> Is there some reason it's in Brainfuck? 23:36 <@simon> McMartin, yes, it's funny to write on blackboards and it provides some kind of easy metric where I don't feel I have to abuse my namespace by giving functions single digits, since that abuse has already been performed at the language design. 23:39 <@simon> McMartin, hmm... I think if I did it in another language, and the purpose would be to generate small strings, I would compete very much between being able to truncate simple things like "print" compared to the limited benefit of computing a string rather than simply writing it using a plain string literal. 23:40 <@simon> McMartin, i.e., computing and printing many ASCII characters takes several Brainfuck instructions but very few in any language with string literals, and the benefit of writing a generating function that isn't simply the string literal only shows itself as the string grows above something slightly larger than what I'd want to write on a blackboard for people to decipher. 23:41 <&McMartin> Aha 23:42 <@simon> so yeah... I don't know if it's the exact same heuristics one would come up with if one had higher-level constructs available and the strings were longer... 23:42 <@simon> I'd probably come up with entirely different ways. e.g. trigonometric functions that approximate the result and then a short program that adjusts it. 23:43 <@simon> but in brainfuck, I suspect writing a trigonometric function would probably be an overhead that only paid off on larger inputs than "Hello". 23:50 <@simon> McMartin, also, it seems that writing short strings in any (perhaps any one) language quickly becomes a feat of abusing the language constructs that apply most well to the problem, whereas if using brainfuck, the language constructs themselves don't really contribute much, and the tricks are more general heuristics because all you do is loop and assign. 23:52 <@simon> I wonder if, when restricting oneself to generating English sentences of some approximate length, the best heuristics also include statistical analysis of the English language. 23:52 <&McMartin> Mmm, chatbots 23:52 <@simon> heh 23:52 <@simon> have you written one before? 23:53 <@simon> I once put an Eggdrop plug-in using a Markov model onto Bitlbee / MSN chat and friend-requested my sister. I left it there for two weeks where all it did was talk and learn from her friends. the output was horrible, but so was their language. 23:54 <@simon> i.e. I had spent three ours teaching it to say proper things and it only failed on a few overloaded words 23:55 <@simon`> and when I got back it was full of shouting, emoticons and insults. 23:57 <&McMartin> I've made the occasional dissociated press system but no true chatbots. 23:58 mac [mac@Nightstar-fe8a1f12.il.comcast.net] has quit [[NS] Quit: This computer has gone to sleep] --- Log closed Thu Jan 10 00:00:10 2013