--- Log opened Fri Dec 06 00:00:08 2013 |
--- Day changed Fri Dec 06 2013 |
00:00 | < McMartin> | That means it *doesn't* have type *coercion* |
00:00 | < RichyB> | Haskell isn't strictly an ML in that you can't put SML code through a Haskell compiler, but it's pretty bloody close. There's a large class of programs that will run identically under both given a straightforward token-by-token translation. |
00:00 | < McMartin> | However, SML lets you say 1.5 + 2.5 and 2+2 and will know what both mean. |
00:00 | < McMartin> | OCaml requires 2+2 but 1.5 +. 2.5, because + is int -> int -> int and +. is real -> real -> real. |
00:01 | <@Azash> | Ah |
00:01 | <@Azash> | Well, all languages have their baggage |
00:01 | < McMartin> | I'm not convinced that ML's structure/functor model of modularity *actually* scales because I've never seen it do so. |
00:01 | < McMartin> | OCaml also lacks the "pretty" form of function definition. |
00:03 | < McMartin> | let rec fact n = match n with 0 -> 1 | i -> i * fact (n-1);; |
00:03 | < McMartin> | As opposed to |
00:03 | < McMartin> | fact 0 = 1 |
00:03 | < McMartin> | fact n = n * fact (n-1) |
00:03 | < McMartin> | (SML, also Haskell) |
00:04 | < McMartin> | http://ocaml.org/learn/taste.html is the whirlwind tour, https://realworldocaml.org/ for a Big Old eBook. |
00:04 | <@Azash> | Is the latter the o'reilly one? |
00:04 | <@Azash> | Oh it's free, nice |
00:05 | < McMartin> | Yeah |
00:09 | <@Azash> | Thanks McMartin, will give the language a look |
00:09 | < McMartin> | Hmm, this looks like its FFI has improved since last time I looked. |
00:10 | <@Azash> | "kernel x86_64 2.6.32-431.el6" |
00:10 | <&ToxicFrog> | SML is probably what I'd look at, because I have looked at Ocaml before and considered it ugly~ |
00:10 | <@Azash> | Thanks CentOS |
00:18 | < RichyB> | Azash, hey, it's stable. Like an immutable, unchanging dead hunk of fucking rock is stable. |
00:18 | <@Azash> | Haha |
00:18 | <@Azash> | Well they do keep revising and patching 2.6.32 |
00:18 | <@Azash> | But they could still move to 3.x soon |
00:19 | < RichyB> | I quite like CentOS, except for the fact that there's no modern OpenSSL in its repos so good luck with TLS1.2 |
00:19 | < RichyB> | Unfortunate side effect of being a clone of RHEL, I guess. |
00:21 | < RichyB> | It sounds pretty hopeful that RHEL7 might actually come out before the end of this decade, though! |
00:23 | <@TheWatcher> | Centos is great, if you're dealing with legacy enterprise systems |
00:24 | <@TheWatcher> | therwise, if you need anything released after the point at which mammoths died out, it's just a frustrating millstone. |
00:25 | | You're now known as TheWatcher[T-2] |
00:26 | < McMartin> | ToxicFrog: Where SML regularly falls down for me is that I like the ability to set up a makefile and get an executable that has a chance in Hell of running on other people's computers, and that also is triplatform. |
00:26 | < McMartin> | If there is an SML implementation that does this I would in fact love to know of it |
00:26 | < McMartin> | (Makefile optional as long as building is easy) |
00:28 | <&ToxicFrog> | Aah. |
00:28 | < McMartin> | ocaml's native code compiler is excellent and on Windows has no external dependencies in the result; on Linux it depends on libocaml but libocaml actually installs by default in many distros. |
00:29 | < McMartin> | (And if ocamlrun is installed you can actually run the byte-code compiled stuff as if it were an executable because its magic number is "#!/usr/bin/ocamlrun") |
00:32 | < McMartin> | Looks like most of my OCaml projects were compilers of sorts. |
00:32 | < McMartin> | ML is really good at writing AST walkers. |
00:34 | < McMartin> | Then there's... a proability table generator and a Java classfile disassembler. |
00:34 | | You're now known as TheWatcher[zZzZ] |
00:40 | | * Azash hisses at the mention of AST walking |
00:43 | < McMartin> | Yeah, this is because they aren't ML-descended. |
00:43 | < McMartin> | Or CLOS-descended, but nothing is~ |
00:45 | <&ToxicFrog> | Azash: er? |
00:47 | < McMartin> | I've found the usual way walkers are taught are shitty because inheritance is bad making them work right. |
00:47 | < McMartin> | (The closest thing to the right way involves the "Visitor" pattern, which basically gives you multiple dispatch) |
00:47 | < McMartin> | The ML approach is a strongly-typed version of the tagged-union trick in C, which is a fuckton cleaner. |
00:48 | <@Azash> | ToxicFrog: PTSD |
00:49 | <@Reiv> | Walkers? |
00:49 | | Vorntastic [Vorn@Nightstar-28h42k.sd.cox.net] has quit [[NS] Quit: Bye] |
00:51 | < McMartin> | Reiv: AST - "Abstract Syntax Tree" - is the data structure you get after parsing a semi-structured document like a computer program or an XML document. |
00:51 | | AnnoDomini [abudhabi@Nightstar-d00ld9.gw-out.freebnc.net] has quit [[NS] Quit: ZNC - http://znc.in] |
00:52 | < McMartin> | A walker is something that systematically computes something based on that structure by visiting each node in the tree. |
00:53 | < McMartin> | (For a compiler system, you'd use a walker to perform type checking, for instance, and then a different one to do code generation) |
00:53 | <@Azash> | As an example of how it might work is that in ECMAScript, the JS or JS-like or whatever standard, you might have each line of code's sub-AST as children of the function that contains the code |
00:54 | <&ToxicFrog> | McMartin: so, historically, I have not had problems writing tree walkers in languages with single dispatch OO (or something that looks a lot like it) - what does MD getyou? |
00:56 | <@Reiv> | oh gods, I comprehend now |
00:57 | | AnnoDomini [abudhabi@Nightstar-d00ld9.gw-out.freebnc.net] has joined #code |
00:59 | <&ToxicFrog> | Reiv: I highly recommend writing a compiler at some point, it's tonnes of fun |
01:00 | < McMartin> | ToxicFrog: Mainly, the abstraction "execute (AST a, Pass p)" |
01:00 | < McMartin> | Also, it's not like visitors are *hard* to write, just tedious. |
01:00 | <@Reiv> | ToxicFrog: I wrote one for, uh, Tiny I think |
01:00 | <&ToxicFrog> | McMartin: typically I just do a:p() and then the method handles recursing into the children. |
01:00 | <@Reiv> | In haskell, at that |
01:00 | < McMartin> | ToxicFrog: Right, so, when you add passes it's now scattered across a hojillion files. |
01:00 | <@Reiv> | It would be more fun if I had mastery of any programming languages whatsoever, alas. |
01:01 | <&ToxicFrog> | Usually I want different code for each node type anyways. |
01:01 | | Derakon[AFK] is now known as Derakon |
01:01 | | Derakon [Derakon@Nightstar-4k2ccr.ca.comcast.net] has quit [Client exited] |
01:01 | | Derakon [Derakon@Nightstar-4k2ccr.ca.comcast.net] has joined #code |
01:01 | | mode/#code [+ao Derakon Derakon] by ChanServ |
01:01 | <@Azash> | Reiv: Write your own and be supreme grand master |
01:01 | < McMartin> | "I want passes to be my primary objects for running passes and for nothing else" |
01:01 | <@Reiv> | Yeah, no. Writing your own language requires mastery of /many/ languages. |
01:01 | < McMartin> | Which is to say "I don't really want a primary object, but I have to have one" |
01:01 | <&ToxicFrog> | McMartin: I also tend to use languages that don't require the complete definition of my classes to be contained in a single file |
01:01 | | * Derakon gets home from work, notes internal house temperature of 56F. |
01:01 | <&Derakon> | Oops, wrong channel. |
01:01 | <@Azash> | How many Kelvin is that? |
01:02 | <@Reiv> | I think what I want is Python that did not annoy me with its failure to have proper lists or case statements or hell I don't even remember what stymied me now~ |
01:02 | <&ToxicFrog> | ...I also, now that I think about it, don't often write multipass compilers. |
01:02 | < McMartin> | TF: You also apparently have dynamic symbol lookup |
01:02 | <@Namegduf> | Reiv: You don't need to be good at any language to write a new one. |
01:02 | <@Azash> | ToxicFrog: Write one and call it leeloo |
01:02 | <@Namegduf> | Case study: PHP |
01:02 | <&ToxicFrog> | McMartin: why yes I do |
01:02 | <@Namegduf> | XD |
01:03 | <@Reiv> | Namegduf: I would prefer not to write The Next PHP. |
01:03 | < McMartin> | Yeah, so, when writing in C++ or Java or many other languages that go all the way to machine code you need to do some extra work if you want to have a collection of passes that you run. |
01:03 | <@Namegduf> | Reiv: But PHP is getting long in the tooth. |
01:03 | <@Azash> | I always found it a funny contrast between Lerdorf's knowledge of software security and his complete disregard for sanity |
01:03 | < McMartin> | And that thing you do is have an "accept" method that takes a pass and forwards to one of N methods in Pass depending on your specific node type, and then you now are doing dynamic dispatch on two arguments despite being a compiled language with no type introspection or dynamic symbol lookup |
01:04 | < McMartin> | Ophis is embarassingly multipass, including a number of actual fixpoint operations within it, so being able to treat Passes as first-class objects is important to it. |
01:05 | < McMartin> | But Python also has dynamic symbol lookup, so it can skip most of the "accept" trick and go straight to reflection calls instead. |
01:06 | < McMartin> | ML dodges this by not having "objects" in the first place. |
01:06 | < McMartin> | The only real structure you can impose is functions, and then functions all have an implicit type-switch as part of the pattern-matching, and being able to define your pass with pattern-matching is pretty delicious. |
01:07 | <&ToxicFrog> | My compiler experience is mostly lua and a bit of scala and clojure, so |
01:07 | < McMartin> | Especially for code generators, where you can put optimizations *into the pattern match* |
01:07 | | * ToxicFrog effectively ditched C et al ten years ago, except as needed for work/school |
01:10 | < RichyB> | Reiv, the only one off your list that Python lacks is case statements. |
01:10 | < RichyB> | <Reiv> Yeah, no. Writing your own language requires mastery of /many/ languages. â is factually untrue. I give you PHP. |
01:11 | < RichyB> | Perhaps you meant âWriting your own language wellâ? ;) |
01:13 | < McMartin> | ToxicFrog: Anyway, here's the python version of that trick, with extra reflection to handle default cases trivially |
01:13 | <@Reiv> | RichyB: I am reminded that I wanted to have a list of shit, and be able to call shit from that list, or something |
01:13 | < McMartin> | https://github.com/michaelcmartin/Ophis/blob/master/src/Ophis/Passes.py |
01:13 | <@Reiv> | And I was using a dictionary instead and it did not play nice. |
01:13 | < McMartin> | Then you got the syntax messed up or something, because Python can totally do that because Ophis *does* do that. That is its main loop |
01:14 | <@Reiv> | About this point my Nice Neat Project became a Horrendous Example Of Workarounds and it sort of disintegrated before me |
01:14 | <@Reiv> | McMartin: I don't actually remember. |
01:14 | < RichyB> | the other thing that python lacks for that kind of interpreter is tail-call optimisation |
01:14 | <@Reiv> | Vornicus might; he couldn't think of a neat way to do it |
01:14 | < McMartin> | Tail-call optimization is something almost nobody gives =( |
01:15 | < RichyB> | pff |
01:15 | < McMartin> | It turns out C *can* but with a caveat that makes it nearly useless. |
01:15 | < RichyB> | C has tail-call optimisation. |
01:15 | < McMartin> | C only has it if you can prove that no stack variable in the frame you're optimizing out will be used by anyone further down the call stack. |
01:15 | < RichyB> | Everything else that doesn't is embarrassing suck, given that even *C* does. |
01:15 | <@Reiv> | That's a pretty big caveat. |
01:16 | < McMartin> | It shouldn't be, but it is because it means "don't call anything that uses strings" and "don't call anything with multiple return values" |
01:16 | < RichyB> | Yeah, but in C it's possible to use recursive calls to allocate linked lists. |
01:16 | < McMartin> | Are you referring to my trick here or something else? |
01:16 | < RichyB> | Temporarily, on the stack. |
01:17 | < McMartin> | Yeah. |
01:17 | < McMartin> | You want to make sure that those don't get tail-call-optimized away |
01:17 | < McMartin> | I'm pretty sure my caveat covers that case. |
01:17 | < McMartin> | (Since the, uh, cdr is being passed as an argument to the next call in the chain, so the stack frame is still live at the time of the call.) |
01:18 | < RichyB> | Indeed. I was trying to provide an example of what your caveat guards against. |
01:18 | < McMartin> | Yeah |
01:18 | < McMartin> | But there's even less exotic things for that. |
01:18 | < McMartin> | Like, um |
01:19 | < McMartin> | { struct a_structure_t x; /* initialize x, among other things */; return further_processing(&x); } |
01:19 | < RichyB> | Oh good thought. |
01:19 | < McMartin> | Even more common if you're using a local char array as a char * to some function that computes things about strings. |
01:21 | < McMartin> | Now. Java doesn't have this excuse, because all objects live on the heap and you can't make references to non-objects. |
01:21 | <@froztbyte> | heeeeeeeey |
01:21 | <@froztbyte> | you folks |
01:21 | <@froztbyte> | they who C |
01:21 | < McMartin> | That code I quoted would be just fine as a tail-call optimization in Java. |
01:21 | < McMartin> | I have in fact trained with the monks of the Temple of Three Stones. |
01:21 | <@froztbyte> | someone remind me about scoping and overloading and stuff |
01:21 | <@froztbyte> | (does that need more context?) |
01:21 | < McMartin> | scoping: Lexical, non-nested. Overloading: non-existent. |
01:22 | <@froztbyte> | oh god, right |
01:22 | < McMartin> | (Do I need to expand that?) |
01:22 | <@froztbyte> | the latter was C++ |
01:22 | <@froztbyte> | sighpanda |
01:22 | <@froztbyte> | McMartin: no, it was sufficient |
01:22 | < McMartin> | The usual technique for overloading is to suffix types and prefix namespaces, a la OpenGL's glVertex3f |
01:22 | < RichyB> | uh? |
01:22 | < RichyB> | oh right |
01:23 | <@froztbyte> | McMartin: the particular problem I face is slightly different |
01:23 | <@froztbyte> | there is a callchain |
01:23 | <@Reiv> | ... that conversation was the most awesome possible. |
01:23 | < RichyB> | C has no overloading unless you do it manually with unportable macros using typeof() a lot. |
01:23 | <@froztbyte> | I need to do things in the middle of said callchain |
01:23 | < McMartin> | That's not C anymore~ |
01:23 | <@froztbyte> | but quite literally the middle |
01:23 | <@froztbyte> | right down to the middle of the one function. |
01:23 | <@froztbyte> | between two lines. |
01:23 | < McMartin> | Do you actually need virtual functions? |
01:23 | <@froztbyte> | :( |
01:24 | <@froztbyte> | McMartin: I don't know if I can answer that question |
01:24 | < McMartin> | Fair enough. |
01:24 | < McMartin> | I should do a second edition of To HLL and Back |
01:24 | <@froztbyte> | haha |
01:24 | < RichyB> | McMartin, are you sure that C's scopes are non-nested? http://c2.com/cgi/wiki?NestedScopes |
01:24 | <@froztbyte> | basically, it's a thing that basically railroads from the moment a packet hits a socket |
01:24 | < McMartin> | RichyB: Depends. |
01:24 | < RichyB> | I can introduce a new anonymous scope in C at any point by starting a compound statement { }. |
01:25 | < McMartin> | You can do { int i; { int j; } } |
01:25 | <@froztbyte> | and I need to interject that railroading for other purposes |
01:25 | < McMartin> | But you can't do upvalues or downvalues because there are no nested function definitions unless you're in GNU Crazypants Land. |
01:25 | <@froztbyte> | the one option: just patch the mainline, compile it myself |
01:25 | < McMartin> | But it's true that, say, JS is *truly* non-nested. |
01:26 | <@froztbyte> | actually, I've now accidentally found the packaged version of this (purely by accident, and I've been working on this for a week. *nothing* mentions the package existing), so I can steal the dsc's, drop my hax in, and build it myself |
01:26 | <@froztbyte> | and add in libmemcached |
01:26 | <@froztbyte> | and probably at least two memory leaks, because I haven't C'd *properly* in quite some time |
01:26 | | gnolam_ [lenin@Nightstar-skg971.cust.bredbandsbolaget.se] has joined #code |
01:26 | | gnolam is now known as NSGuest12753 |
01:26 | | gnolam_ is now known as gnolam |
01:26 | | mode/#code [+o gnolam] by ChanServ |
01:27 | < RichyB> | I can also do { int i=1; printf("i=%d\n", i); { int i=2; printf("i=%d\n", i); } } /* 1 and 2 */ |
01:27 | < RichyB> | but that's just shadowing and nesting |
01:28 | < RichyB> | froztbyte, valgrind! valgrind! valgrind is your friend! |
01:28 | < RichyB> | valgrind makes you mighty! VALGRIND DESTROYS ALL YOUR ENEMIES |
01:28 | < RichyB> | VALGRIND IS STRONGER EVEN THAN SOY |
01:28 | < McMartin> | Your somewhat scary prepper friend who mines his front yard and has a sniper tower on his roof |
01:28 | <@froztbyte> | RichyB: I'm not really *too* worried about it |
01:29 | <@froztbyte> | RichyB: since I'd be overly careful, specifically *because* I'm not writing it that often |
01:29 | < RichyB> | froztbyte, meh, I'm used to daemons which leak memory and have to be gracefully restarted on a cron job. |
01:29 | <@froztbyte> | haha |
01:29 | < RichyB> | It's not necessarily an operational failure but it's fucking embarrassing. |
01:29 | | NSGuest12753 [lenin@Nightstar-skg971.cust.bredbandsbolaget.se] has quit [Ping timeout: 121 seconds] |
01:29 | <@froztbyte> | I'm kinda annoyed that I couldn't figure out the python-bindings bit of this |
01:29 | <@froztbyte> | well like, I can |
01:30 | <@froztbyte> | and it goes as far as listening on a tcp socket and doing an accept() |
01:30 | <@froztbyte> | but nothing beyond that because apparently no-one thought to write that bit |
01:30 | <@froztbyte> | or something |
01:30 | < McMartin> | RichyB: It turns out libX11 is kind of lackadaisacal about some of this |
01:30 | < McMartin> | valgrind freaks out when I run it on graphical applications as a result |
01:31 | <@froztbyte> | (I'm now building a chroot to install the packaged version and give it a shot quickly) |
01:32 | < McMartin> | RichyB: So fine, I'll amend to "lexical, no nested function definitions" but that's not as hilariously telegraphic |
01:38 | < RichyB> | Semi-fortunately it's not libX11 |
01:39 | < RichyB> | "valgrind -- xcowsay hello" runs clean under valgrind for me on Fedora 19 amd64 |
01:39 | < RichyB> | but this is because I'm using a laptop with an Intel GPU, so I have a libGL.so which comes from the Mesa project |
01:40 | < RichyB> | if you have a nVidia or AMD card the you'll see no graphical program valgrind cleanly ever, because the closed-source vendors' libGL.so implementations suck. |
01:41 | < AnnoDomini> | Hmm. Do you need a facebook account to create a company page there? |
01:41 | < RichyB> | Yes. |
01:42 | < AnnoDomini> | Ick. |
01:45 | <@Reiv> | AnnoDomini: You'd kinda have to. |
01:45 | <@Reiv> | Why are you setting up company pages on Facebook? |
01:46 | < AnnoDomini> | My job. |
01:50 | < McMartin> | RichyB: Hrm. OK, maybe it's in SDL2 then. I've valground earthball several times and found a few leaks in my code more of things like X11 atoms. |
01:51 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has left #code ["Leaving"] |
01:51 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has joined #code |
01:51 | < RichyB> | Oh! I don't know how clean SDL2 is. |
01:53 | <@Reiv> | AnnoDomini: Looks like you'll need to set up an official facebook account for your official job page! |
01:54 | <@Reiv> | (PROTIP: Or get someone else with a fb account to let you use their login, else they're gonna have a bad time when you leave anyway) |
01:54 | <@Reiv> | (Failing that, set up an account as Anno Web Services, Inc) |
01:54 | <@Reiv> | (And use it to do nothing but set up facebook pages. :p) |
01:56 | <&Derakon> | Oh hey, Multimedia Fusion 2 is in the Humble Sale for this week. https://www.humblebundle.com/weekly |
01:56 | < AnnoDomini> | Couldn't I just, uh, make a company account to set up the company page? |
01:56 | < AnnoDomini> | IDK how Facebook really works. I don't have an account. |
01:56 | < McMartin> | Derakon: ! |
01:57 | <&Derakon> | I'd be more interested if it weren't Windows-only. |
01:57 | < McMartin> | I was gonna say. That's the Knytt Underground engine |
01:57 | <&Derakon> | I forget, can it do cross-compile doohickeys to make non-Windows games? |
01:57 | < McMartin> | It's the Knytt Underground engine, so absolutely |
01:57 | <&Derakon> | Ah, excellent. |
01:57 | <&Derakon> | Guess I'll drop $6 and get some spare copies of KU and NightSky to give away~ |
01:57 | < McMartin> | (GM:S is similar) |
01:58 | < McMartin> | I'm tempted just to se what MMF2 is all about. |
01:58 | < McMartin> | *see |
01:59 | <@Reiv> | Is that... exciting? |
02:00 | < McMartin> | Well, I hold Daniel Remar and Nyfflas both in very high esteem |
02:00 | < McMartin> | Remar works in GameMaker, which I've worked with some and found was pretty good. |
02:00 | < McMartin> | Nyfflas work in MMF2. |
02:00 | < McMartin> | *works |
02:00 | < McMartin> | About which I know basically nothing. |
02:07 | < RichyB> | I thought WADF was GameMaker. |
02:07 | < McMartin> | Nope, MMF2 |
02:08 | < McMartin> | As is Knytt, Knytt Stories, and the Knytt Stories editor |
02:49 | < McMartin> | Hrm. Actually, it might be CF2, which is also now on Steam and advertising Saira as having used it~ |
04:20 | < RichyB> | dammit I made Python slower instead of faster |
04:20 | < RichyB> | bah |
04:21 | < RichyB> | too tired to work out where I fucked up |
04:49 | | Vornicus [vorn@Nightstar-sn7kve.sd.cox.net] has joined #code |
04:50 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
05:00 | | Derakon is now known as Derakon[AFK] |
05:03 | | Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has joined #code |
05:25 | | Kindamoody[zZz] is now known as Kindamoody |
05:34 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has quit [[NS] Quit: Gone.] |
05:37 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has joined #code |
06:04 | | ErikMesoy|sleep is now known as ErikMesoy |
06:08 | | celticminstrel [celticminst@Nightstar-gj43l1.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
06:28 | | himi [fow035@Nightstar-q9amk4.ffp.csiro.au] has quit [Ping timeout: 121 seconds] |
06:49 | | Kindamoody is now known as Kindamoody|out |
07:15 | | Turaiel is now known as Turaiel[Offline] |
08:27 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has quit [Ping timeout: 121 seconds] |
08:28 | | Xon [Xon@Nightstar-q4s.ku7.252.119.IP] has quit [Ping timeout: 121 seconds] |
08:29 | | Xon [Xon@Nightstar-q4s.ku7.252.119.IP] has joined #code |
08:31 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has joined #code |
08:35 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has joined #code |
08:36 | | mode/#code [+o himi] by ChanServ |
08:50 | < simon_> | I'm building a somewhat highly concurrent application in Java. this is exciting. |
08:51 | < simon_> | it's like Erlang, but with nastier syntax and more things can go wrong! |
08:51 | < simon_> | okay, I take that back. Erlang's syntax doesn't win much. |
09:01 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has quit [Ping timeout: 121 seconds] |
09:14 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has joined #code |
09:14 | | mode/#code [+o himi] by ChanServ |
09:21 | | Vornicus [vorn@Nightstar-sn7kve.sd.cox.net] has quit [[NS] Quit: Leaving] |
09:28 | | You're now known as TheWatcher |
10:03 | | * TheWatcher eyes this exercise submission |
10:03 | <@TheWatcher> | ... how, how do you fail so badly at indenting code?! |
10:05 | < AnnoDomini> | What did they do? |
10:07 | <@TheWatcher> | Imagine that someone took a blunderbuss, filled it with 0x20s, stood to the left of the code and fired into it. |
10:09 | < AnnoDomini> | No tabs? |
10:09 | <@TheWatcher> | Tabs are of the devil.~ |
10:14 | < Syka> | i love myself some tabs |
10:23 | <@TheWatcher> | You have to be careful taking tabs, or you can end up all spaced out. |
11:43 | < simon_> | in Python I can do os.path.join() if I want to append a directory name and a filename in a safe manner. what's the Linux command-line program to do the same? |
11:43 | < simon_> | there's the programs "dirname" and "basename" to extract various parts |
12:49 | <@TheWatcher> | ... ohgods |
12:50 | | * TheWatcher has just emerged from the unhallowed depths of a wordpress theme include file |
12:50 | <@TheWatcher> | Hilariously, said theme is running on dozens, potentially hundreds, of wordpress installations around the university |
12:51 | <@TheWatcher> | I'm trying very hard not to think about that. |
13:14 | | celticminstrel [celticminst@Nightstar-gj43l1.dsl.bell.ca] has joined #code |
13:14 | | mode/#code [+o celticminstrel] by ChanServ |
14:18 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has quit [Ping timeout: 121 seconds] |
14:26 | < RichyB> | simon_, I assume that it is just assumed that '/' is the ONE TRUE PATH SEPARATOR in unix and that you don't need to bother to abstract over it. |
14:31 | <@TheWatcher> | (given that / works pretty much everywhere, even on windows...) |
14:32 | <&ToxicFrog> | simon_: on POSIXy systems / is by definition the path separator; you can just slap them together with / |
14:34 | <&ToxicFrog> | (also, runs of / are ok, so if you accidentally end up with /etc////passwd it'll still work) |
14:46 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has joined #code |
14:46 | | mode/#code [+o himi] by ChanServ |
14:59 | < simon_> | ToxicFrog, right. I was thinking something "nice" for a Makefile, but I'll just do it directly then. |
15:00 | < simon_> | RichyB, yeah, I'll go with that. :) |
15:08 | < simon_> | I'm annoyed at those cast warnings, so I run with -Xlint:all,-cast , but I have literally no idea when various libraries updated from returning Object to returning some parameterised type. is there a way to get JDK7 to give warnings when I write stuff that isn't JDK6 compatible? |
15:10 | < simon_> | err... I'm in Java 7. :) |
15:29 | <@TheWatcher> | I believe it involes invoking Yog-Sothoth |
15:29 | <@TheWatcher> | alternatively, try javac -source 1.6 -target 1.6 Foo.java |
15:30 | <@TheWatcher> | (or just -source 1.7 -target 1.6 will work) |
15:35 | < simon_> | thanks! |
16:53 | | Kindamoody|out [Kindamoody@Nightstar-180u8i.tbcn.telia.com] has quit [Ping timeout: 121 seconds] |
16:53 | | Kindamoody|out [Kindamoody@Nightstar-180u8i.tbcn.telia.com] has joined #code |
16:53 | | mode/#code [+o Kindamoody|out] by ChanServ |
17:03 | | Turaiel[Offline] is now known as Turaiel |
17:14 | | Syka [the@Nightstar-19nmr3.iinet.net.au] has quit [[NS] Quit: leaving] |
17:14 | | Syka [the@Nightstar-19nmr3.iinet.net.au] has joined #code |
17:43 | | Turaiel is now known as Turaiel[Offline] |
18:09 | | AnnoDomini is now known as Sam |
18:09 | | Shiz [mark@Nightstar-3hueb6.shiz.me] has joined #code |
18:09 | < Shiz> | top o' the evening |
18:09 | <@Azash> | Sup Shiz |
18:10 | < Shiz> | trying to get by on train internet |
18:10 | < Shiz> | thank god mosh exists |
18:21 | <@Azash> | Hadn't heard of it, looks pretty cool |
18:25 | < Shiz> | Really? I thought I'd plugged it to you several times |
18:31 | < Sam> | Reversible USB. |
18:31 | <@Azash> | Might have just done a double ear bypass |
18:31 | <@Azash> | ( ââ¿â) |
18:37 | < RichyB> | nice |
18:38 | < RichyB> | U+203F UNDERTIE seems pretty useful for kaomoji. |
18:42 | < RichyB> | U+35C COMBINING DOUBLE BREVE BELOW is very useful indeed. |
18:42 | < RichyB> | ^Í^ |
18:43 | < Shiz> | that looks terrifying here |
18:43 | < Stalker> | Nice. |
18:43 | < Shiz> | https://up.shiz.me/ODZjMWEx.jpg |
18:44 | < Stalker> | Looks fine here. |
18:46 | < Sam> | Looks like "caret backslash u zero three five c caret" here. |
18:47 | < Stalker> | http://i41.tinypic.com/2mcyoop.jpg |
18:47 | < Stalker> | http://oi41.tinypic.com/2mcyoop.jpg |
18:57 | <&ToxicFrog> | My experience with plain ssh is that it can cope with extended periods of 95+% packet loss, latency in the tens of seconds range, and complete network outages lasting 15 minutes or more, which leaves me a bit puzzled as to where mosh comes in. |
18:58 | < Shiz> | my experience with ssh is that it doesn't or takes 5+ minutes to get back up |
18:59 | < Shiz> | if I'm on unstable 3G where internet drops every ~15 seconds that is not desirable |
18:59 | < Shiz> | also mosh's local echo features make typing over laggy connections a lot more bearable |
19:23 | <&ToxicFrog> | Aah, I didn't know it did local echo. That's pretty handy. |
19:27 | <@Tamber> | It also handles cases where your connection may come back up with a completely different public-facing IP (i.e. mobile devices), which... apparently SSH does not. |
19:29 | < Shiz> | yeah |
19:29 | < Shiz> | you can switch between interfaces effortly |
19:32 | <@Tamber> | I use it on my home PC, because I'm lazy and don't want to manually have to reconnect my terminal session after bringing my PC from suspend. :D (Oh, and the local-echo is really handy on the odd occasions that Virgin Media decide that packets to my server should be routed via some damp string.) |
19:35 | < Shiz> | yeah, generally my mosh session is up as long as my laptop is |
19:35 | < Shiz> | :) |
19:37 | <&ToxicFrog> | This reminds me, I need to get btsync to start on boot. |
20:25 | | Turaiel[Offline] is now known as Turaiel |
20:50 | < McMartin> | hee |
20:50 | < McMartin> | [programming] katre | âBored with all those holiday parties where category theory is scarcely mentioned, if at all? Well hold on to your hats, because this party is NOT CONTAINED IN THAT SET.â |
20:50 | < McMartin> | [programming] katre | - Holiday Party - ny-scala (New York , NY) - Meetup |
20:58 | | Kindamoody|out is now known as Kindamoody |
21:06 | | Turaiel is now known as Turaiel[Offline] |
21:10 | <&ToxicFrog> | McMartin: excellent |
21:33 | | Kindamoody is now known as Kindamoody[zZz] |
21:42 | | Sam is now known as AnnoDomini |
21:51 | | Turaiel[Offline] is now known as Turaiel |
23:27 | | Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has quit [Ping timeout: 121 seconds] |
--- Log closed Sat Dec 07 00:00:57 2013 |