code logs -> 2013 -> Fri, 06 Dec 2013< code.20131205.log - code.20131207.log >
--- 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
code logs -> 2013 -> Fri, 06 Dec 2013< code.20131205.log - code.20131207.log >

[ Latest log file ]