code logs -> 2014 -> Tue, 21 Jan 2014< code.20140120.log - code.20140122.log >
--- Log opened Tue Jan 21 00:00:12 2014
00:31 You're now known as TheWatcher[T-2]
00:45 You're now known as TheWatcher[zZzZ]
02:42 Turaiel[Offline] is now known as Turaiel
03:27
<&Derakon>
"I just got some crash reports emailed to me. Have a look at them, and it's a graphics crash - looks like the card doesn't like shader model 2.0 stuff. What sort of card is it? Oh, the report says it's a GeForce 3 from 2001!"
03:28
<&Derakon>
"I'm more impressed than anything."
03:40 Kindamoody[zZz] is now known as Kindamoody
04:08 Turaiel is now known as Turaiel[Offline]
04:10 VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has quit [[NS] Quit: Program Shutting down]
04:13 Thalass [thalass@Nightstar-bce70i.eastlink.ca] has quit [[NS] Quit: Leaving]
04:13 Thalass [thalass@Nightstar-bce70i.eastlink.ca] has joined #code
04:16 * Thalass ponders the proper connection protocol to use between a python server script and a python client script (running on different machines, communicating over the intertoobs)
04:21
<&Derakon>
Thal: one simple option would be to use the Pyro4 library.
04:33
< Thalass>
Interesting. Thanks.
04:34
<@Shiz>
would i be really stupid to propose json?
04:37
< Thalass>
I'm still learning python. JavaScript would probably make my eyes melt
04:37
<@Shiz>
json isn't javascript
04:37
<@Shiz>
well, it's based on some JS parts
04:37
<@Shiz>
but it's a full data interchange format on its own
04:38
<@Shiz>
(and python has a native library for it, it's a matter of doing json.dumps/json.loads)
04:38 * Thalass nods
04:38
< Thalass>
It looks interesting, too.
04:38
<@Shiz>
if all you need to send is trivial values, lists or dicts then I'd definitely recommend considering json
04:38
<@Shiz>
it's pretty much a Web Standard(tm)
04:41
< Thalass>
heh
04:42
< Thalass>
I'm not entirely sure of the exact nature of what i want to send. Currently I think it might be a "start moving" command on keypress/mouseclick and then a "stop moving" on key/mouse release. So not a huge stream of data - however i've never worked with this kind of thing before so i'm not sure even how to do that.
04:43
< Thalass>
However as usual i'm most mojonated when i should be sleeping. >.<
04:50
<@Shiz>
sounds familiar
04:50 * Shiz is a night worker, but day committer
04:56 Vornicus [Vorn@Nightstar-sn7kve.sd.cox.net] has joined #code
04:56 mode/#code [+qo Vornicus Vornicus] by ChanServ
04:58 Thalass is now known as Thalass|sleep
04:58 Kindamoody is now known as Kindamoody[zZz]
04:58
< Thalass|sleep>
Thanks for the advice. I'll have a go heh
04:58 Thalass|sleep [thalass@Nightstar-bce70i.eastlink.ca] has quit [[NS] Quit: zomg]
05:05 Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has joined #code
05:07 Derakon is now known as Derakon[AFK]
06:18 RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has quit [[NS] Quit: Gone.]
06:22 RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has joined #code
06:25 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
06:28 Orth [Orthia@Nightstar-huc.cvq.148.118.IP] has quit [Ping timeout: 121 seconds]
06:30 celticminstrel [celticminst@Nightstar-mhtogh.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
06:34 AbuDhabi1 [AbuDhabi@Nightstar-79du1a.78.getinternet.no] has joined #code
06:35 AbuDhabi_ [AbuDhabi@Nightstar-p6q73m.89.getinternet.no] has quit [Ping timeout: 121 seconds]
06:41 AbuDhabi_ [AbuDhabi@Nightstar-mdtb2c.tmi.telenormobil.no] has joined #code
06:43 AbuDhabi1 [AbuDhabi@Nightstar-79du1a.78.getinternet.no] has quit [Ping timeout: 121 seconds]
07:17 AverageJoe [evil1@Nightstar-fb1kt4.ph.cox.net] has joined #code
07:56 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
07:56 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection reset by peer]
08:23 AverageJoe [evil1@Nightstar-fb1kt4.ph.cox.net] has quit [[NS] Quit: Leaving]
09:16 Syka [the@Nightstar-kik.bbb.126.1.IP] has joined #code
09:32 You're now known as TheWatcher
11:04 * TheWatcher hairpulls vaguely at javascript and objects and madness
11:24 Vornicus [Vorn@Nightstar-sn7kve.sd.cox.net] has quit [Connection reset by peer]
11:24 Erik [8f610223@Nightstar-fsq7h2.mibbit.com] has joined #code
11:25
< Erik>
Fuck cyclic graphs.
11:26
< Erik>
I've been clearing out giant repository of linked documents at this one company. Only leaf-node documents can be cleared out without Problems; and now I've tentatively identified 1044 documents that are part of cycles.
11:27
< Erik>
I picked a sample document and found that about 400 of the documents are reachable from that sample. Now I get to figure out how to map giant cyclic graphs in order to figure out where to snip links and create leaf nodes.
11:30
< Erik>
Sample document X shows up in reachable-from-X on the program I'm writing, and I've manually verified that cycle. But reachable-from-X isn't the same set as cycles-with-X; cycle A can have a member that points to an item in cycle B without reciprocity.
11:31
< Erik>
So I figured I'd identify "minimal" cycles, but those turned out to overlap significantly.
11:33
< Erik>
Any advice on how to map/sort/structure/get a handle on large cyclic graphs?
11:33 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection reset by peer]
11:33 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
11:34
<@Tarinaky>
Erik: Sounds kinda like the Halting Problem...
11:35
<@Tarinaky>
Unless I'm missing something. I'm not really sure what you mean by 'get a handle'
11:35
< Erik>
Tarinaky: Well, worst case it halts when the project runs out of time/budget/techsupport.
11:35
< Erik>
At that point, basically all the links are declared broken.
11:36
< Erik>
I'd like to find some way of minimizing the amount of links I need to force-break in order to go back to having leaf nodes that I can recursively prune
11:37
<@Tarinaky>
Try a systematic search over the graph to find paths with cycles in them?
11:38
<@Tarinaky>
That's only NP :V
11:39
<@Tarinaky>
Since it's a finite graph you'll have to reach a termination or a cycle eventually.
11:39
< Erik>
I have pruned all terminations/leaf nodes. I know that every remaining node and path is part of a cycle.
11:40
<@Tarinaky>
So what's the problem?
11:41
< Erik>
So I have a thousand nodes and an index of which nodes point to other nodes. How do I figure out where it's a good idea to start destroying paths in order to destroy the fewest paths while breaking the most cycles?
11:42
< Erik>
How do I write a script to identify "all" cycles?
11:42
< Erik>
"All" in quotes due to not wanting recursive stupidity like listing both ABC and ABCABC.
11:43
<@Tarinaky>
I think the simplest approach is probably to do a search over the space.
11:43
<@Tarinaky>
Anything else probably involves really involved mathematics.
11:43
< Erik>
I'm working in Python, math is fine, import math. :)
11:43
<@Tarinaky>
That's not what I mean by really involved mathematics.
11:46 VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has joined #code
11:50
< RichyB>
Erik, max flow / min cut is the kind of thing that you want here, I think
11:52 AbuDhabi1 [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has joined #code
11:52 AbuDhabi_ [AbuDhabi@Nightstar-mdtb2c.tmi.telenormobil.no] has quit [Connection reset by peer]
11:52
<@Tarinaky>
Searching over a space is a simple way to solve any problem though.
11:52
<@Tarinaky>
By which I mean you should really be comfortable to apply the technique to an arbitrary problem.
11:53
<@Tarinaky>
Even if it is basically the base-line worst possible solution worth considering for any problem it has the advantage that you don't have to actually understand the problem to apply it.
11:53
< Erik>
Still not sure how to formulate the search in a way that doesn't involve massive brute force.
11:53
<@Tarinaky>
It /is/ brute force.
11:53
<@Tarinaky>
That's the point.
11:53
< RichyB>
just start with brute force
11:55
< Erik>
I think this will take ages, but OK. >_>
11:57 AbuDhabi1 [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has quit [Ping timeout: 121 seconds]
11:57 AbuDhabi_ [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has joined #code
11:57
< RichyB>
If you want a fast answer, start with an incorrect greedy approximation.
11:57
< Erik>
Pick the single path to break that allows for the most pruning, repeat?
11:58
< RichyB>
Yes, that constitutes a greedy algorithm.
11:59
< RichyB>
I'd go with "find a min-cut, cut all of those vertexes. Now you have to smaller graphs to search both of."
12:00
< RichyB>
*two, not "to". Idiot.
12:01
< RichyB>
I say go with that specifically because I assume that you probably have access to some graph-theory library which has operations like "find a min-cut" as built-in functions.
12:01
< Erik>
Min-cut to split the graphs will be "cut the path from Huge_Most_Of_Graph to a 2-cycle or 3-cycle" to start with. Thinking about how it'll behave when it can no longer trim a single connection like that...
12:02 AbuDhabi1 [AbuDhabi@Nightstar-dpjndf.bb.online.no] has joined #code
12:02
< Erik>
I don't have a graph-theory library on hand, but I can probably get one.
12:03
< RichyB>
carving off 2-cycles and 3-cycles to break them up is pretty much what you want, right?
12:04
< Erik>
It'll work, but it's not optimal. Suppose A and B point to each other, forming a 2-cycle. X is in Huge_Most_Of_Graph and points to A.
12:04
< Erik>
If I forcibly break the X->A link, I'll also have to forcibly break either A->B or B->A later. But if I forcibly break B->A, then B becomes a leaf node I can prune; pruning B leaves A a leaf node; and pruning A will take away the X-A link naturally.
12:05 AbuDhabi_ [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has quit [Ping timeout: 121 seconds]
12:05
< RichyB>
wouldn't the min-cut here be to carve B off instead?
12:05
< Erik>
Maybe I don't understand min-cut, then.
12:06
< Erik>
From my brief impression on Wikipedia, it sounds as though carving off B would require a cut through both A->B and B->A, but carving off the 2-cycle only requires a cut through X->A.
12:06
< Erik>
(Assume links are directional and there is no A->X link.)
12:06 AbuDhabi1 [AbuDhabi@Nightstar-dpjndf.bb.online.no] has quit [Ping timeout: 121 seconds]
12:07 AbuDhabi_ [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has joined #code
12:08
< RichyB>
Erik, ye-es. Well, I recommended looking at it because, while I've forgotten most of the graph theory I've ever known, the faint memory that I have about flow/cut problems was asserting that they smelled right.
12:10
< Erik>
At present I don't even have a graph representation; I have a giant python dictionary which maps {node X: [array of nodes that X points to]}. Sounds like getting a graph theory library should be a high priority.
12:12
< RichyB>
That *is* a graph representation. :)
12:12
< RichyB>
It's a dictionary from nodes to their adjacency lists. :)
12:14
< Erik>
Yes, well, it doesn't have any notion of an edge.
12:17
< RichyB>
reduce(list.__add__, [[(start, end) for end in ends] for start, ends in graph.iteritems()])
12:19
< RichyB>
graph_to_edge_list = lambda graph: â
12:20
< Erik>
Oooh.
12:22
< Erik>
RichyB: I have now spent five minutes staring at your clever reduce function :-D
12:24
< RichyB>
graph.iteritems() generates (node, node-it-points-to) pairs
12:24
< Erik>
The nested for-in particularly makes me wonder how the hell this can be parsed nicely.
12:24
< RichyB>
for each of those pairs, [(start, end) for end in ends] generates the edges pointed to by this node
12:24
< RichyB>
reduce(list.__add__, list_of_lists) concatenates them.
12:26
< RichyB>
oh and there's a bug, it should be reduce(list.__add__, list_of_lists, []) # because an empty graph is valid.
12:27
< RichyB>
e.g. read it as: reduce(+, [ [edge1], [edge2], [edge3, edge4] ], [])
12:28
< RichyB>
= [] + [edge1] + [edge2] + [edge3, edge4]
12:29
< RichyB>
reduce(+, list, startval) = (((startval + list[0]) + list[1]) + list[2]) â¦
12:41 Syka [the@Nightstar-kik.bbb.126.1.IP] has quit [Ping timeout: 121 seconds]
12:41 Syka [the@Nightstar-kik.bbb.126.1.IP] has joined #code
12:45 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
12:45 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection closed]
12:45 Syka [the@Nightstar-kik.bbb.126.1.IP] has quit [Connection closed]
12:46 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
12:46 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection closed]
12:49 * Erik finds a 1-cycle.
12:49
< Erik>
What misbegotten functionary uploaded a document, thereby assigning it a place in the document archive and an address, then edited the document to point to itself?
12:50
<@TheWatcher>
I believe the appropriate classification is "Troll"
12:59 * Erik finds more 1-cycles.
12:59
< Erik>
TheWatcher: No, I think it's just incompetence. Because earlier in the process I found a bunch of links pointing to "V".
12:59
< Erik>
Which I presume should have been a link pasted in with Ctrl-V, but they failed to hit the keys properly.
13:00 * TheWatcher facepalm
13:19
<@Tarinaky>
Erik: See Also: for further information please consult the document already in your hands. Bibliography: This document. Acknowledgements: Ha Ha Fuck You
13:41 * Erik writes code to find 2-cycles, packs it inside a function 2_Cycle_Finder, gets error message that Python apparently doesn't accept function names starting with a digit, renames it Bicycle_Finder. :-D
13:43
< Erik>
Quadcycle_Finder or Tetracycle_Finder?
13:44
< Erik>
Tempted to use Farcical_Finder...
13:45
<&ToxicFrog>
...why not just find all cycles of any length?
13:45
< Erik>
Because I haven't figured out how to generalize yet.
13:45
< Erik>
I will stare at this problem shortly after I have the 2-cycle, 3-cycle and 4-cycle versions.
13:58 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
13:58 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection closed]
14:02
< Erik>
My coworker suggests that I should have a "proper object model", by which he means that every node should be an object with methods to search its own paths and call the functions of the nodes it links to. o_O
14:02
< Erik>
I think this may be overkill, but maybe I'm just lazy.
14:11
<@froztbyte>
no, there are some people who get high on objects
14:12
<@froztbyte>
and then you end up with zope
14:12
<@froztbyte>
but it probably depends on what you need to do
14:13 KiMo|autorejoin [Kindamoody@Nightstar-180u8i.tbcn.telia.com] has joined #code
14:13
< Erik>
That's his suggestion on how to generalize the N-cycle finder.
14:14 Kindamoody[zZz] [Kindamoody@Nightstar-180u8i.tbcn.telia.com] has quit [Ping timeout: 121 seconds]
14:14
<@TheWatcher>
I'd suspect the "high on objects" case here
14:27
<&McMartin>
OOP is a cult
14:30
<@simon_>
it is.
14:31
<@simon_>
if not also a mental disorder.
14:32
<&McMartin>
I can't call it a disorder; its techniques are useful in a handful of real problem domains and its core structures allow for a more structured use of function pointers
14:32
<@simon_>
yes. certainly.
14:32
<&McMartin>
Eschewing objects for the fact that it's "added on" would be like eschewing structs because tuples exist
14:32
<@simon_>
but it is easily overdone.
14:33
<&McMartin>
Yes
14:33
<&McMartin>
I usually prescribe a certain level of LISP hipsterism to get it out of the system
14:33
<&McMartin>
"Big deal, map-reduce was pulling shit like that back in the 1970s."
14:35 celticminstrel [celticminst@Nightstar-mhtogh.dsl.bell.ca] has joined #code
14:36 mode/#code [+o celticminstrel] by ChanServ
14:36
< RichyB>
McMartin, map-reduce in the 2000s is still novel if the Lisp hipsters weren't distributing it. :
14:37
< Erik>
I was fiddling with LISP ten years ago and never saw it again...
14:37
<&McMartin>
All the cool kids use comprehensions
14:37
<&McMartin>
Though I guess you can't reduce with a comprehension
14:37
<&McMartin>
Erik: Yeah, you don't *use* it
14:38
<&McMartin>
It's just there to grant you the proper level of jadedness
14:38
<&McMartin>
Also, conceptual primitives that are closer to math than to hardware registers or drug-fuelled committee meetings
14:39
< Erik>
Moving from LISP to Java was a big letdown. "You mean I can't create functions without a ton of boilerplate?"
14:39
<&ToxicFrog>
Moving from most things to Java is a big letdown, in my observation.
14:39
< Erik>
Heh.
14:40
<@froztbyte>
why the hell even /do/ that?
14:40 Erik [8f610223@Nightstar-fsq7h2.mibbit.com] has quit [[NS] Quit: Going home. No more cycles today!]
14:40
<@froztbyte>
java is a thing to get away from
14:40
<&ToxicFrog>
froztbyte: school course taught in Java. New project needs to interoperate with Java software, or run on Android. New job is at a java-heavy company.
14:41
< RichyB>
Relative to what? C â Java, for any project that didn't actually need C's runtime speed or unsigned integers, is a great way to almost completely ditch the entire concept of âundefined behaviourâ in your program and all the debugging load that comes with it.
14:41
<@froztbyte>
ToxicFrog: jskdljfklshfsdjklfhrjklfwehafjksdhf
14:42 Turaiel[Offline] is now known as Turaiel
14:43
< RichyB>
IMHO Java is worth it, relative to C or C++, for a _lot_ of projects, just because it adds GC.
14:43
<&ToxicFrog>
RichyB: it's also a great way to end up actively hating the entire concept of OO, wondering why your programs are now three times as many LOC despite using a "high-level" language, and start asking inconvenient questions like "so, if this runs in a VM anyways, why do we have a separate compilation stage"
14:43
<&ToxicFrog>
Also, the entire Java standard library and all its documentation.
14:44
<&McMartin>
You can fall a lot further than the Java library docs.
14:44
<&McMartin>
I actually use them as the calibration point, which does admittedly mean a score of zero
14:44
<&ToxicFrog>
You can. And to be fair, the java library docs are excellent references if you already know what classes you want.
14:44
< RichyB>
Of course a fairly large subset of *those* would be even better off in Ruby, Python, Go, Scheme, Clisp, TCL, SML, D⦠almost bloody anything. :)
14:44
< RichyB>
McMartin, haha :)
14:44
<&McMartin>
Having recently used Clisp I can think of no reason to use it instead of Python for new projects.
14:44
<&ToxicFrog>
Where they fail completely is at helping you figure out which six similar-but-different-in-significant-ways classes you need, and how to combine them, in order to, say, read a file.
14:45
<&McMartin>
Scheme remains "the world's least portable programming language"
14:45
<&McMartin>
I have yet to see a proper treatment of large program organization with SML or OCaml
14:45
<&ToxicFrog>
Especially in domains like GUI programming where there are multiple complete sub-libraries for this and all but one of them are informally deprecated but still given first-class treatment in the docs.
14:45
<&McMartin>
They describe the mechanisms to use to do it, but pretend those mechanisms aren't utterly alien and thus demanding a wholly novel discipline of organization
14:46
<&ToxicFrog>
The upshot of this is that the Java docs are great for experienced Java programmers who already know what they need and just want a refresher on method signatures and contracts, but are worse than useless for a newbie.
14:47
<@simon_>
McMartin, I thought SML's module system was superior for large programs, but I assume what you're saying is that you've never seen that done?
14:47
<&McMartin>
To be fair, there *is* a set of Java tutorials nobody reads
14:47
<&McMartin>
simon_: Yes, I mean the treatment I've seen boils down to "Here's how structures and functors work. They are superior."
14:47
<&ToxicFrog>
RichyB: that was kind of my point; most of the people I know who had bad experiences with Java started with a HLL like Python and were then subjected to Java. The rest were C programmers who liked the increased safety but hated how dearly you pay for it in other respects.
14:48
<&McMartin>
It's not even clear *to what*. To Pascal modules? To traditional notions of interface-based contracts via OO inheritance? To OO entirely?
14:48
<@simon_>
McMartin, well, I've extremely limited knowledge of their actual use, too, but it seems from reading Working Programmer and some of the MLton source code that you can do stuff with it. it's just that nobody ever did it. ;-)
14:48
<&McMartin>
Working Programmer is indeed my primary source here ;-)
14:48
<@simon_>
McMartin, to... umm... the kind of module systems you find in Java, Python and Haskell, perhaps.
14:49
<&McMartin>
Yeah, that's not a strong enough claim to permit "SML is therefore feasible for large software projects" - Java and Python *don't use* their module systems for much, relying instead on features SML doesn't have (notably reflection)
14:50
<@simon_>
McMartin, my interpretation of SML's module system's supposed superiority is this: structures work exactly like you expect modules do. functors allow some re-use of modules that is perhaps comparable to abstract classes, which are really cool anyway.
14:50
<&McMartin>
Right. This is why I want a formal treatment of it.
14:51
<&McMartin>
"Look, we can do things like abstract classes with a toy problem nobody would ever use" isn't very reassuring, especially when the library itself never does this
14:52
<@froztbyte>
McMartin: liquidsoap has a rather sizable chunk of ocaml in it, iirc
14:55
<&McMartin>
Right, and SML compilation is not exactly easy and SML compilers are self-hosted.
14:55
<&McMartin>
I am not denying it's *possible*
14:55
<&McMartin>
I'm denying that it's gotten the kind of attention that even Python's module and object system got.
14:55
<&McMartin>
Possibly out of ignorance, but this is then [citation needed]~
14:57
<@simon_>
doesn't Python's module system also get cherished?
14:57
<&McMartin>
Yes, but mostly for staying out of your way
14:58
<@simon_>
I like that it follows directory structure.
14:58
<&McMartin>
It's handy.
14:58
<@simon_>
it's amazing how easy making a decent module system is and how few do it.
14:59
<&McMartin>
It's also a thing Java has, and I've often wanted a python equivalent to JARs >_>
14:59
<@simon_>
(easy as in: just copy whoever is doing it well already)
14:59
<&McMartin>
Right
14:59
<&McMartin>
Anyway, that's the extra lift that SML has there
14:59
<&McMartin>
Without structures and functors, ML is noticably deficient in the same ways that, say, R4RS Scheme is.
14:59
<@simon_>
yeah, JARs are nice. you can include a whole bunch of things in your classpath with just including one file. :)
14:59
<&McMartin>
Also, single-download distribution
14:59
<@simon_>
yeah!
15:00 * simon_ has come to appreciate Java a little more in this last course he had.
15:00
<&McMartin>
(These are lies for Java, just ask TF about Kessler >_<)
15:00
<&McMartin>
Java's killer app is middleware, IMO
15:00
<@simon_>
I should shut up about Java, then ;P
15:00
<@simon_>
middleware?
15:01
<&McMartin>
Anyway, SML's structures and functors are supposed to be things that you actively build your system out of, not merely a convenience to keep everything from sharing the same namespace
15:01
<@simon_>
as in 3rd party libraries?
15:01
<&McMartin>
Specifically as in "You have 500 3rd party libraries and need to make a product out of that ideally with nothin gmore than configuration files"
15:01
<&McMartin>
There are languages that are better at this than Java, but Java ended up with the ecosystem where it kicked ass at this
15:02
<@simon_>
right...
15:02
<@simon_>
I like that I made a threaded HTTP client in two lines of code.
15:03
<@simon_>
I guess it takes a critical mass of users to produce these things.
15:04 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
15:05 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection closed]
15:05
<&ToxicFrog>
McMartin: at this point I've just settled for adding a bunch of plausible directories to the end of %PATH% on windows and if it still doesn't work telling people to (re)install java
15:07 Turaiel is now known as Turaiel[Offline]
15:11 ErikMesoy [Erik@Nightstar-3kot9q.80-203-17.nextgentel.com] has joined #code
15:11 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
15:11 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection closed]
15:11 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
15:11 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection reset by peer]
15:31 * McMartin tiles his IDE, his terminal, and a DVD playback window
15:35
< RichyB>
simon_, using what? :)
15:36 Tarinaky [tarinaky@Nightstar-e99cts.net] has quit [Operation timed out]
15:36
<@froztbyte>
<McMartin> It's also a thing Java has, and I've often wanted a python equivalent to JARs >_>
15:36
<@froztbyte>
latest pip has wheels
15:36
<@froztbyte>
which more or less can be that, I think
15:36 Tarinaky [tarinaky@Nightstar-e99cts.net] has joined #code
15:36 mode/#code [+o Tarinaky] by ChanServ
15:36
<@froztbyte>
modulo path fuckery
15:37
<&McMartin>
I can't even parse "latest pip has wheels"
15:37
<@froztbyte>
ah
15:37
<@froztbyte>
proper python packages, basically
15:37
<@froztbyte>
instead of compiling shit on your server
15:38
<@froztbyte>
everything gets packaged after a build, and that's the way warehouse will serve it out
15:46 * McMartin watches this design sprout class nesting three deep.
15:46
<&McMartin>
Time to make a new namespace I think~
15:59
< RichyB>
"wheel" is a replacement for distributing python code as eggs
15:59
< RichyB>
Wheels have a bunch more metadata and stuff in convenient places like the filename and files in the tarball, instead of it inconvenient places like inside a turing-complete setup.py.
16:10 ErikMesoy [Erik@Nightstar-3kot9q.80-203-17.nextgentel.com] has quit [[NS] Quit: Leaving.]
16:12
<&ToxicFrog>
McMartin: you may find it amusing to know that the Google internal LGBTQ channel is also full of UQM players.
16:12
<&ToxicFrog>
It has been *spitting* *happy spices* all morning.
16:14 Turaiel[Offline] is now known as Turaiel
16:16
<&McMartin>
Hey, have them test the top of master, it's got namable savegames~
16:17 ErikMesoy [Erik@Nightstar-3kot9q.80-203-17.nextgentel.com] has joined #code
16:23 OrthDroid [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection closed]
16:24 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
16:24 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Connection reset by peer]
16:24 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
16:36 AbuDhabi1 [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has joined #code
16:38 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has quit [Ping timeout: 121 seconds]
16:38 Orthia [orthianz@Nightstar-5m8.1ee.224.119.IP] has quit [Ping timeout: 121 seconds]
16:38 AbuDhabi_ [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has quit [Ping timeout: 121 seconds]
16:41 Orthia [orthianz@Nightstar-5m8.1ee.224.119.IP] has joined #code
16:41 mode/#code [+o Orthia] by ChanServ
16:50 ErikMesoy is now known as Harrower
17:01 AbuDhabi_ [AbuDhabi@Nightstar-1q2q7e.tmi.telenormobil.no] has joined #code
17:01 AbuDhabi2 [AbuDhabi@Nightstar-1q2q7e.tmi.telenormobil.no] has joined #code
17:02 AbuDhabi2 [AbuDhabi@Nightstar-1q2q7e.tmi.telenormobil.no] has quit [Connection reset by peer]
17:02 AbuDhabi_ [AbuDhabi@Nightstar-1q2q7e.tmi.telenormobil.no] has quit [Connection reset by peer]
17:02 AbuDhabi_ [AbuDhabi@Nightstar-1q2q7e.tmi.telenormobil.no] has joined #code
17:02 AbuDhabi1 [AbuDhabi@Nightstar-i3u5cr.78.getinternet.no] has quit [Ping timeout: 121 seconds]
17:04 Stalker is now known as Chan_Yasu_Daishi
17:24 * TheWatcher proceeds to try and merge two hashes of arrayrefs of hashes containing google calendar data
17:30 celticminstrel [celticminst@Nightstar-mhtogh.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
17:32
<@simon_>
I wonder what is most efficient:
17:32
<@simon_>
private AtomicInteger n; ...; public foo(int bar) { int i = n.getAndIncrement(); ...; }
17:32
<@simon_>
or some kind of non-blocking queue
17:33
<@simon_>
basically I'm trying to measure a concurrent java class
17:33
<@simon_>
and I want to be as little invasive as possible and ruin any concurrency perks that the class itself has.
17:34
<@simon_>
e.g. I have a non-blocking solution to something that's probably working more than my wrapper class, but at least it doesn't block.
17:34
< RichyB>
AtomicInteger.getAndIncrement() and AtomicInteger.compareAndSet() are the primitives on which a lock-free queue will be implemented.
17:35
< RichyB>
e.g. to reserve slots inside buffers or whatever.
17:36
<@simon_>
ok.
17:37
< RichyB>
If you want your software to actually _work_, use data structures that have already been worked out such as java.util.concurrent.ConcurrentLinkedQueue.
17:38
< RichyB>
Building lock-free algorithms directly from CAS and FAA is really subtle and you'll get non-trivial ones wrong for sure.
17:39
< RichyB>
For goodness' sake don't implement your own concurrency lock-free queue directly out of CAS and FAA instructions when ConcurrentLinkedQueue is right there, and has been tuned for performance already! :)
17:39
< RichyB>
s/concurrency/concurrent/
17:39
<@simon_>
I'm not ;)
17:39
<@simon_>
I'm basically recording a bunch of numbers
17:39
<@simon_>
I want to do arr[i++] = x; but I want i to be thread-safe.
17:40
< RichyB>
That might be a reasonable use for raw FAA, then.
17:40
<@simon_>
I'm already using ConcurrentLinkedQueues and ConcurrentHashMaps in combination with thread-pools in my actual application.
17:41
< RichyB>
Be aware that FAA is expensive. In my own benchmarks on recent Intel CPUs, I see getAndIncrement() taking ~10ns in the uncontended case up to ~400ns per operation when threads on different cores in the same chip are trying to write to the same spot.
17:42
<@simon_>
FAA?
17:42
< RichyB>
That could suck if you're trying to benchmark things like functions that complete in mere dozens of instructions.
17:42
< RichyB>
FAA = Fetch-And-Add. CAS = Compare-And-Swap.
17:42
<@simon_>
ah.
17:42
<@simon_>
my functions don't complete in dozens of seconds, they probably finish in a number of milliseconds.
17:43
< RichyB>
Ah it'll be fine.
17:43
<@simon_>
do you have a reference to the ~400ns case? that sounds like what I'm doing.
17:43
<@simon_>
I don't really have the time to benchmark the primitives. :P~
17:44
< RichyB>
simon_, https://github.com/RichardBarrell/snippets/blob/master/atomics.c
17:44
< RichyB>
if you want, I'll change that so that it runs a bunch of different test cases and then prints out a table
17:44
< RichyB>
instead of recompiling it manually and re-running a bunch of times
17:45
<@simon_>
RichyB, ah, no worries. that's very nice, thanks!
17:46
< RichyB>
You're welcome.
17:49
< RichyB>
simon_, btw, in that code, RING_SIZE = number of ints that the competing threads attempt to FAA on. SEGMENTS = number of threads that compete to increment them.
17:51
< RichyB>
simon_, oh and I've just noticed an extra source of failure; I don't put padding between those ints.
17:51
< RichyB>
so they cache-pong a lot even if the FAA instructions aren't quite contending :)
17:53 KiMo|autorejoin is now known as Kindamoody
17:53 mode/#code [+o Kindamoody] by ChanServ
18:00
<@simon_>
RichyB, I'm nowhere near being concerned at that level of efficiency right now ;-)
18:00
<@simon_>
s/at /about /
18:07
< RichyB>
btw I think Java has an atomic integer array?
18:09
< RichyB>
Accesses to elements of a single `java.util.concurrent.atomic.AtomicIntegerArray` will be way faster than accesses through an array of `java.util.concurrent.atomic.AtomicInteger`s
18:10
< RichyB>
The former is one heap-allocated object containing a dense array of `n` integers that the GC won't need to scan. The latter is a heap-allocated array containing pointers to `n` heap-allocated objects each containing space for one integer.
18:11
< RichyB>
Your GC will probably have to scan through all of those little object refs if it happens to kick in.
18:17
<@simon_>
RichyB, oh, I don't have an array of atomic integers!
18:18
<@simon_>
RichyB, I have one atomic integer that indexes the array of regular integers.
18:18
<@simon_>
RichyB, that way I guarantee that any call to this function will have its own spot in the array.
18:18
<@simon_>
RichyB, but thanks a lot for pointing out the AtomicIntegerArray. java.util.concurrent really has a whole lot to offer that I haven't dug into.
18:34
< RichyB>
uh huh
18:35
< RichyB>
If you use FAA to allocate slots out of a single array, you're going to get really bad contention.
18:36
< RichyB>
So (1) you contend on the counter that you're adding to. (2) Adjacent slots will be in the same cache line, so concurrent writes to them will cache pong.
18:36
< RichyB>
Modern CPUs can only modify memory in cache-line-sized chunks. Typically that'll be 64 bytes on x86.
18:38
< RichyB>
If two different CPUs try repeatedly to modify two integers that fit into the same cache line then you get an effect called "cache pong". CPU A grabs exclusive ownership of the cache line in order to modify i[0], then CPU B grabs exclusive ownership of the cache line in order to modify i[1], then CPU A grabs exclusive ownership of the cache line in order to modify i[0] againâ¦
18:39
< RichyB>
You get cache-line contention when cores attempt to simultaneously modify memory that sits in the same cache line. Just about as expensive as FAA contention. :)
18:39
< RichyB>
Sometimes it's referred to as "false sharing" because the two cores are trying to alter different bits of memory that merely happen to be too close together to be distinguishable as different.
18:41
< RichyB>
Thread-safe malloc() implementations get around this by having a separate nursery for each thread.
18:43
< RichyB>
(of course I'm still talking about hundreds of nanoseconds here)
18:54
<@simon_>
RichyB, thank you. I didn't know it was called a "cache pong", but I suspected that the phenomenon had to exist.
18:55
<@simon_>
RichyB, it seems that some people call it cache-line ping-pong.
18:56
<@simon_>
okay, so separate nurseries is the way to go.
18:59
<&ToxicFrog>
"false sharing" is the general/formal term; cache pong is one specific manifestation of it.
19:11 Kindamoody is now known as Kindamoody|afk
19:29 Vornicus [Vorn@Nightstar-sn7kve.sd.cox.net] has joined #code
19:29 mode/#code [+qo Vornicus Vornicus] by ChanServ
19:37
<@Tarinaky>
The thought occurs that if I want to find work I should really stop getting into arguments with alumni on facebook.
19:39 Turaiel is now known as Turaiel[Offline]
19:39
<@Tamber>
But... someone on the Internet is wrong!
19:39
<@Tarinaky>
Tamber: /Exactly/
19:40
<@Tarinaky>
I can never quite tell where the line between looking clever on Facebook so I'm signalling that I understand advanced material blurs with looking difficult as a person.
19:41 Harrower is now known as ErikMesoy
19:56
<@froztbyte>
lols
19:56
<@froztbyte>
subtlety ftl
20:08 Kindamoody|afk is now known as Kindamoody
20:12
<~Vornicus>
operator.add, don't go straight to special methods
20:13
<~Vornicus>
(re: <RichyB> reduce(list.__add__, list_of_lists) concatenates them.)
20:13
< RichyB>
Vornicus, wrong complaint. itertools.chain(*list_of_lists) is the most correct thing because reduce(list.__add__) is quadratic. :)
20:14
<~Vornicus>
Point!
20:14
<~Vornicus>
But still
20:14
<~Vornicus>
the operator library is best pony.
20:14
<~Vornicus>
well, okay. second best pony, itertools is best pony.
20:18
<&ToxicFrog>
Missile pony is best pony.
20:20
<&McMartin>
NO MISSILE PONY FOR YOU.
20:20
<&McMartin>
*toot toot*
20:20
<&ToxicFrog>
OH YEAAAAAAAAAAAAAAH
20:21
<&ToxicFrog>
(do you remember which bit OH YEAH is from? Symbol and I have been trying to remember for like a year, and haven't managed to trigger it again)
20:21
<&McMartin>
Uh, in my fatigue-addled state I am only mapping this to the Kool-Aid Man and thus also Cave Story+ Balrog.
20:22
<&McMartin>
Hrm
20:22
<&McMartin>
I *do* have the source around here somewhere, re-rendered as proper XML and GML files.
20:23
<&ToxicFrog>
Oooh.
20:23
<&ToxicFrog>
And that reminds me, I need to look at the source for the Scrambler and implement it as a generalized tool.
20:23
<&McMartin>
I don't think the Scrambler was part of the pre-source-release text dumps.
20:24
<&McMartin>
But yeah, this will have to wait until I've maintained "16 hours of sleep in the past 48" for some time.
20:24
<&ToxicFrog>
It wasn't, but I remember looking at the source for it at one point and going "this doesn't look too hard to implement", so I must have gotten it somehow
20:26
<&ToxicFrog>
Found it!
20:26
<&ToxicFrog>
...and it looks like it's just an unlikely random occurence.
20:26
<&ToxicFrog>
Pity, it must have gotten the right sequence of rolls for it to look like a prepatterned thing.
20:26
<&ToxicFrog>
Whatever it was, it had us both dying.
20:27
<&McMartin>
ISTR that the missile ponies were hardcoded
20:27
<&ToxicFrog>
Yes
20:29
<&ToxicFrog>
Or I'm wrong! no, those are also a random occurence, looks like.
20:30
<&ToxicFrog>
"Author: Komato Assassin Asha
20:30
<&ToxicFrog>
Subject: DING DING DING
20:30
<&ToxicFrog>
"
20:30
< AbuDhabi_>
If there are a lot of wireless networks in one place, do they interfere with one another's reception, or is there some kind of brilliant technical solution to that problem?
20:31
<&ToxicFrog>
Anyways, it looks like the text dump only includes scrambler whole-word or whole-textbox replacement maps, not the scrambler algorithm itself.
20:31
<&ToxicFrog>
Hrm.
20:33
<@Tamber>
AbuDhabi_, they interfere.
20:33
<@Tamber>
There's some technical wizardry that make it less horrible, but eventually it can't cope.
20:37
<@simon_>
apparently, Eclipse doesn't like it when I 'make clean' to remove .class files recursively in its source tree.
20:39
<@Tarinaky>
On the subject of Eclipse. Anyone know of any good vim plugins to make dealing with Java's package naming madness less maddening?
20:40
<@Tarinaky>
That is, basically, the only reason anyone uses Eclipse right? :V
20:40 Kindamoody is now known as Kindamoody[zZz]
20:41
<@froztbyte>
a quick search gave me http://www.vim.org/scripts/script.php?script_id=1785
20:41
<@froztbyte>
but I suspect that that, by itself, will be somewhat underwhelming
20:41
<@Tarinaky>
Aaaand... now Chrome's on strike...
20:41
<@froztbyte>
especially if you don't know vim well
20:41
<@Tarinaky>
Define 'well'?
20:42
<@froztbyte>
well, not particularly/gigantically well, I guess
20:42
<@froztbyte>
but its features and mechanisms
20:43
<@froztbyte>
more than "press i or a to input text, and know the movement keys"
20:43
<@Tarinaky>
That plugin looks like what I need. Need to check version though as Ubuntu uses an old one and I like to keep my plugins synch'd to avoid dissonance >.>
20:44
<@froztbyte>
http://packages.ubuntu.com/search?suite=precise&searchon=names&keywords=vim
20:44
<@froztbyte>
vim7's been in precise already
20:44
<@froztbyte>
so that's 2 years by now
20:44
<@Tarinaky>
Or maybe not. Haven't developed Python recently enough to remember why it annoys me.
20:44
<@froztbyte>
lucid had 7.2
20:44
<@froztbyte>
so you should be fine
20:45
<@froztbyte>
if you were writing python, you almost certainly ran into vim doing tabs by default
20:45
<@Tarinaky>
*lubuntu
20:46
<@Tarinaky>
froztbyte: You say that like it's a bad thing :p
20:46
<@froztbyte>
what, tabs by default?
20:46
<@froztbyte>
it is a bad thing in python
20:47
<@Tarinaky>
No it's not.
20:47
<@froztbyte>
if you don't think so, proceed directly to accepting you're wrong
20:47
<@Tarinaky>
Mixing tabs and spaces is bad in python.
20:47
<@Shiz>
s/ in python.//
20:47
<@froztbyte>
Syka tried to argue this point in bullshit kinds of nuances as well
20:47
<@froztbyte>
proceed directly to accepting you're wrong.
20:48
<@Tarinaky>
Because PEP8?
20:48
<@froztbyte>
correct, more or less
20:48
<@Shiz>
fuck pep8
20:48
<@froztbyte>
but also because the whole rest of the world and accepted standards
20:48
<@froztbyte>
it's like not doing K&R in a K&R C codebase
20:48
<@Shiz>
I can't take any kind of standard that still enforces 80 char width lines seriously
20:49
<@Tarinaky>
I would not call it an accepted standard.
20:49
<@Tarinaky>
The rule in PEP8 about tabs vs spaces is one of the most violated/ignored part of that document.
20:49
<@Shiz>
(K&R also didn't specify spaces vs tabs)
20:49
<@Tarinaky>
It's not universally accepted.
20:49
<@froztbyte>
you'll have responses varying from "meetings with the senior team" to "revoked commit permission"
20:49
<@froztbyte>
Tarinaky: I ... okay, no
20:49
<@froztbyte>
I'm not going to bother
20:50
<@froztbyte>
like I said, all of those are nuanced bullshit arguments
20:50
<@froztbyte>
feel free to keep fucking about with them
20:50
<@Shiz>
god forbid people try to not see shit in black and white
20:50
<@Tarinaky>
I'm sorry but I have regularly encountered code that does not conform to that rule and when dealing with existing code following the code style already in place is more important than imposing an external style guide.
20:50
<@Tarinaky>
That said I use spaces.
20:51
<@Tarinaky>
The PEP8 is not the 10 commandments though.
20:51
<@Tarinaky>
It is a style guide.
20:51
<@Shiz>
PEP8 has particularly stupid docstring conventions
20:51
<@Shiz>
I don't know who decided that PEP8-style docstrings were readable
20:51
<~Vornicus>
Why are there bullshit arguments about tabs vs spaces now?
20:52
<@Tarinaky>
Apparently froztbyte feels strongly about uniformity in the Python ecosystem.
20:52
<@Shiz>
no, varnicus, we've gone one level deeper
20:52
<@Tarinaky>
I think?
20:52
<@Shiz>
it's now a meta-spaces vs tabs argument
20:52
<@froztbyte>
Vornicus: I basically just said other people are shitheads
20:52
<@Shiz>
or something
20:52
<~Vornicus>
froztbyte: you shithead
20:52
<@froztbyte>
Vornicus: amen!
20:53
<@froztbyte>
Vornicus: nazi
20:53
<~Vornicus>
NO U
20:53
<@froztbyte>
Vornicus: just to win at godwin first
20:53
<@froztbyte>
unst unst
20:54
<@simon_>
RichyB, if I want a concurrent application to write a logfile using the same file and not proceed until something has been logged (transaction style), is there any way to avoid putting a queue in front of that?
20:54
<@Tarinaky>
Sometimes Godwin's Law makes me sad because there are some really valid comparisons with Hitler I want to present but I would feel far too self-conscious about being called out.
20:54
<@Tarinaky>
Well. Maybe not valid.
20:54
<@Shiz>
Tarinaky: you can always compare to stalin
20:55
<@Tarinaky>
Shiz: I don't know as much about Stalin.
20:55
<@simon_>
did you know that Stalin means Steel in russian and that he took the name himself?
20:55
<@Tarinaky>
And Dictators are not fungible.
20:55
<@Shiz>
just tell someone they're literally being stalin
20:55
<@Tarinaky>
simon_: Actually it's a corruption of the word steel / man of steel and yes.
20:55
<@Shiz>
all you need to know
20:56
<@simon_>
Tarinaky, ok. :)
20:56
< RichyB>
simon_, yeah, that has to serialise.
20:56
<@Azash>
Honestly there are very few arguments where you can repeatedly say "proceed to accepting you're wrong" and be taken seriously
20:56
<@simon_>
RichyB, what a pain!
20:56
<@Tarinaky>
In hindsight, froztbyte was probably being funny and I took him more seriously than I should have.
20:57
<@Shiz>
he took it seriously too afterwards
20:57
<@Shiz>
:p
20:57
<@froztbyte>
I'm only half facetious
20:57
< RichyB>
simon_, a bunch of different requests to append come in, only one of them can be the first byte of the *next* line to get put into the file, so there necessarily has to be contention on "what's the next line of the file going to be?"
20:57
<@froztbyte>
most of the arguments people make on this matter are bullshit
20:57
<@froztbyte>
I've seen, like, 3 codebases ever
20:57
<@froztbyte>
that couldn't be fixed up in minutes
20:57
<@simon_>
RichyB, right. I guess you have checkpointing in transaction systems because you don't actually want to write disk all the time.
20:57
< RichyB>
simon_, also write(2) calls are not necessarily going to be made atomic for you by the OS. A write(2) syscall can return early!
20:57
<@froztbyte>
and *everyone else* has the problem of their editor not being configured by default
20:58
<@froztbyte>
a problem typically fixed in about 2 lines of config
20:58
< RichyB>
simon_, uh yeah uh
20:58
< RichyB>
simon_, the answers to your question depend on what kind of performance you want.
20:58
<@simon_>
RichyB, yeah, like when copying a file to USB and it tells you you're done even though you can see the darn thing blinking. ;-)
20:58
< RichyB>
If we're still in "counting nanoseconds" territory then just give up on the entire concept of interacting with the filesystem in the firstplace, like.
20:59 * Shiz thinks he should make some of his code threadsafe
20:59
<@Shiz>
I was wondering if the Python import system was threadsafe
20:59
<@Shiz>
but then I GIL'd
20:59
< RichyB>
If you're in "milliseconds" territory then don't worry about it, just write() under a mutex.
21:00
<@simon_>
hmmm, ok.
21:00
<@simon_>
well, I've got RPCs across HTTP, so...
21:00
< RichyB>
simon_, also what kind of safety are you after? Do you want to be sure that the data will survive a power loss? You need to fsync() and that will take a long time regardless of how nice your stuff is.
21:01
<@simon_>
RichyB, I do fsync() actually. I'm just getting really bad performance when running directly without RPC.
21:01
< RichyB>
If you want to be sure that your data will survive the hand of god reaching down and crushing your entire data centre then you need to send it to a remote location and wait for that remote location to send you back a message telling you that it has safely been fsync()'d there, too.
21:01
<@Tarinaky>
froztbyte: I genuinely don't see why it matters. It's an arbitrary choice one way or the other.
21:02
< RichyB>
simon_, to me it sounds like you could just use a concurrent blocking queue, leave a thread reading from it and writing to the log file, and append to the queue.
21:02
< RichyB>
Your safety constraints aren't stringent. It's not like you're expecting the process to segfault and prevent the logger thread from getting around to writing the message to disk eventually, right?
21:03
< RichyB>
oh and use a *bounded* blocking queue, so that fast writers will eventually block, too.
21:04
<~Vornicus>
"*spitting* *happy spices*" successfully befuddles me
21:05
<&McMartin>
Orz is Orz
21:05
<&ToxicFrog>
Orz are *fingers*
21:05
<@simon_>
RichyB, well, actually I was sort of making it resistant to sudden kills.
21:06
<@simon_>
RichyB, I don't want my RPC mechanism to respond over the network that "It's stored!" and then have the service killed.
21:06
< RichyB>
it honestly sounds like an Orz euphemism
21:06
<~Vornicus>
<3 the orz
21:07
< RichyB>
simon_, makes sense. I'd still trust the OS that it's as good as written as soon as write() comes back, because fuck it, your customers will probably understand you losing data if your machine borks.
21:08
< RichyB>
by "borks" I mean "loses power or kernel panics within ~30 seconds"
21:08
< RichyB>
unless these logs actually result in bodily harm or money being lost or whatever
21:08
<@Tamber>
At which point, that's worth spending the extra time fretting (and, thus money) over it~
21:09
<@simon_>
yeah :)
21:09
< RichyB>
I have become incredibly laissez-faire about supposed safety properties of code as I have grown aware of actual failure rates
21:09
<@Tamber>
For something non-critical, I'd just go with "OS says it's written. Good enough for me." ...ooh, my quote key works again! \o/
21:10
< RichyB>
so I'd write() to the log, under a mutex.
21:13 * AbuDhabi_ hearts the Orz too.
21:13
<@Shiz>
it's all ogre
21:14 Turaiel[Offline] is now known as Turaiel
21:25 celticminstrel [celticminst@Nightstar-mhtogh.dsl.bell.ca] has joined #code
21:25 mode/#code [+o celticminstrel] by ChanServ
--- Log closed Tue Jan 21 21:31:31 2014
--- Log opened Tue Jan 21 21:31:36 2014
21:31 TheWatcher [chris@Nightstar-ksqup0.co.uk] has joined #code
21:31 Irssi: #code: Total of 38 nicks [19 ops, 0 halfops, 0 voices, 19 normal]
21:31 mode/#code [+o TheWatcher] by ChanServ
21:32 Irssi: Join to #code was synced in 36 secs
21:34 Tarinaky [tarinaky@Nightstar-e99cts.net] has joined #code
21:34 mode/#code [+o Tarinaky] by ChanServ
22:00 Chan_Yasu_Daishi is now known as Red_Queen
22:07 Turaiel is now known as Turaiel[Offline]
22:09 ErikMesoy is now known as ErikMesoy|sleep
22:17 Red_Queen [Z@Nightstar-484uip.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
22:55 thalass [thalass@Nightstar-bce70i.eastlink.ca] has joined #code
23:43 Orth [Orthia@Nightstar-5m8.1ee.224.119.IP] has joined #code
--- Log closed Wed Jan 22 00:00:28 2014
code logs -> 2014 -> Tue, 21 Jan 2014< code.20140120.log - code.20140122.log >

[ Latest log file ]