code logs -> 2010 -> Fri, 14 May 2010< code.20100513.log - code.20100515.log >
--- Log opened Fri May 14 00:00:02 2010
00:03 Kazriko [kaz@Nightstar-e09690fa.client.bresnan.net] has joined #code
00:03 mode/#code [+o Kazriko] by Reiver
00:05 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Client closed the connection]
00:19 AbuDhabi [annodomini@Nightstar-005d706b.adsl.tpnet.pl] has quit [[NS] Quit: leaving]
00:47 Derakon[AFK] is now known as Derakon
01:40 RichardBarrell [mycatverbs@Nightstar-58acb782.cable.virginmedia.com] has quit [Operation timed out]
03:15 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
03:16
<@Derakon>
Ah right, that's why my scenery objects aren't drawing properly. I have to rescale them to get them to fit, and I long ago fixed scaling to also change the draw position because otherwise scaling the map didn't work properly.
03:16
<@Derakon>
So my engine doesn't have a concept of "scale the image but leave it in the same place".
03:19
<@Derakon>
(This is also because scale is usually only set at the top level and applies to all drawn objects. I'm subverting it in this case from its original design purpose)
03:25
<@Vornicus>
so you should rename "scale" to scale_world
03:26
<@Derakon>
Yeah, I've added a \todo.
03:26
<@Derakon>
(<3 Doxygen. I can just say "Hey, I should do that sometime" and add a \todo note, then later when I can't think of better things to do, I can look at my todo-list and knock a few of the items off)
03:49
<@Derakon>
There! Scenery now appears to be nicely integrated into the editor.
03:51
<@Derakon>
http://derakon.dyndns.org/~chriswei/games/jbrl/mapeditor/7.png
04:00
< celticminstrel>
Looks nice.
04:08 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code
04:12
< Alek>
wow.
04:12
< Alek>
can't wait to play that.
04:43 * Derakon eyes pyximport, which is failing with the error "name 'self' is not defined" and refusing to give him a module or line number.
04:44
<@ToxicFrog>
...hmm. Somehow in the recent carnage the kitty /cleared this channel.
04:45
<@Derakon>
Hah, I'm awesome. Guessed what I did wrong and got it right~
04:45
<@Derakon>
(Hint: default values for arguments to class methods cannot be fields of the instance of the class)
05:08
<@Derakon>
Okay, Mercurial, you could stand to be a titch faster when pushing to the remote depot.
05:08
<@Derakon>
Especially when you're just going to tell me my authorization failed.
05:10
<@McMartin>
Those trees need some bezels.
05:10
<@Derakon>
On the leaves, presumably?
05:10
<@McMartin>
The branches on the right are distressingly discontinuous
05:11
<@McMartin>
Er, not the branches
05:11
<@McMartin>
The trunk
05:11
<@Derakon>
Oh, that's because that's a bunch of separate trees.
05:11
<@Derakon>
And the trunk is supposed to be buried in a block.
05:12
<@Derakon>
Argh damn it, why won't it accept my credentials?
05:12
<@McMartin>
AUTHENTICATE
05:12
<@McMartin>
AUTHENTICATE
05:12
<@Derakon>
"derakon" and "derakon@gmail.com" are the only possible usernames I can think of, and I'm typing the appropriate password correctly.
05:13
< celticminstrel>
Google Code?
05:13
<@Derakon>
Yeah.
05:13
< celticminstrel>
I remember someone who was unable to access the SVN repository. I still have no idea why.
05:17
<@Derakon>
This is the first time I've tried to push back to the repo since I took my hiatus...
05:25 * Vornicus finds himself once again poking at VornSettlers.
05:27
<@Derakon>
Oh, wait, pushing changes requires using Google's generated passwords. Right. I remember now.
05:29
<@Derakon>
Changes pushed \o/
06:16 * Vornicus argls, hates the old schema.
06:22
<@Vornicus>
okay. Obviously: region, path, site, harbor. Something on here needs x-y coordinates so I can actually display it.
06:24
<@Vornicus>
But putting them on anything makes it possible to have Very Interesting data anomalies.
06:25
<@Derakon>
Region = hex, path = edge, site = intersection, harbor = set of intersections and associated exchange rate?
06:25
<@Vornicus>
Indeed.
06:25
<@Derakon>
Well, I worked out a system that covers everything except the edges way back when: http://derakon.dyndns.org/~chriswei/settlers/mapgen.cgi
06:26
<@Vornicus>
whee, planet broken images.
06:26
<@Derakon>
Unfortunately, I hotlinked your image files~
06:26
<@Vornicus>
...oh, hahaha
06:26 * Vornicus was looking that up as you spoke!
06:27
<@Vornicus>
And the old versions, even.
06:28
<@Vornicus>
...oh, and my new version uses rake to build them. Man, shoot me.
06:28
<@Derakon>
I'm not familiar with rake.
06:28
<@Vornicus>
rake: Ruby Make.
06:28
<@Derakon>
Ah.
06:28
<@Derakon>
Why?
06:28
<@Derakon>
They're images.
06:29
<@Vornicus>
Yes, images generated in PostScript.
06:29
<@Derakon>
Oh, right.
06:29
<@Vornicus>
the number token images, for instance, are actually a single file, which when given different command line options will give different tokens.
06:30
<@Derakon>
See, I probably would have done this with Perl, ImageMagick, and some base raster images.
06:33
<@Vornicus>
mass_ps_generate 'SCALEFACTOR/road/COLOR/PATHDIRECTION.png', 'src/road.ps', 'src/faction.ps', 'src/base.ps' <---- so I ended up with things like this. Allcaps things got replaced with appropriate variables for the dependencies, and then they would also get added to the options. This one line would generate 18 images per size.
06:34 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!]
06:35
<@Vornicus>
(because there's three path directions and six colors.)
06:36
<@Derakon>
Well anyway, given that you can map everything except the edges into a 2D grid, you can then have a separate entry that is the edges for each hex in the grid.
06:36
<@Derakon>
...er. Well, you can't do intersections either.
06:37
<@Vornicus>
and actually I wanted to go into the art and change up the aspect ratio - 7:8 is closer to sqrt(3)/2 than 9:10. I might even go nuts and do 13:15, whichis even closer.
06:37
<@Derakon>
Mm, I should go to bed.
06:38
<@Derakon>
But basically I'd recommend using a 2D grid for the hexes and then separate lists that attach edge and interstice information to each hex.
06:38
<@Derakon>
And then you can load that into a proper graph structure.
06:39
<@Derakon>
Night!
06:39 Derakon is now known as Derakon[AFK]
06:42
<@Vornicus>
Der: the problem I'm having is that on the one hand I must be able to link these things together reasonably well - regions and edges and sites need relational information - but I also need positional information.
06:42
<@Vornicus>
And because I need positional information /and/ relational information, and these two things must agree, I have data anomaly.
06:47 Zed [Zed@Nightstar-e4835f03.or.comcast.net] has quit [Ping timeout: 121 seconds]
06:50 Zed [Zed@Nightstar-e4835f03.or.comcast.net] has joined #code
08:35 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
08:38 AnnoDomini [annodomini@Nightstar-005d706b.adsl.tpnet.pl] has joined #code
08:38 mode/#code [+o AnnoDomini] by Reiver
08:50 Rhamphoryncus [rhamph@Nightstar-29afc4bd.abhsia.telus.net] has quit [Client exited]
08:57
<@AnnoDomini>
I seem to have a recurring problem here, with Debian 5. Namely, sound only seems to work for one thing exclusively - for example, if I'm playing music on the player, I can't get sound from Youtube videos or video games simultaneously.
08:57
<@AnnoDomini>
Is this a common problem?
08:57
<@AnnoDomini>
I seem to recall Tarinaky mumbling something about sound mixing problems in his Linux.
08:57
<@McMartin>
That sounds like your applications using alsa directly instead of something like PulseAudio
08:58
<@McMartin>
And yeah, having to deal with shit like that in Gentoo is one of several reasons I left it for Fedora and Ubuntu
09:02
<@AnnoDomini>
Any easy fixes to this?
09:02
<@McMartin>
I'm not familiar enough with Debian to know; I assume it's a matter of proper package payload though.
09:06 * Vornicus gnaws databases.
09:07
<@Vornicus>
Am I, in fact, being too picky? Is a data anomaly really that likely to turn up?
09:07
<@Vornicus>
The mathematician in me says "yes, 100%"
09:08
<@AnnoDomini>
Data anomaly?
09:11
<@Vornicus>
Data anomaly: Contradictory information. When two authoritative pieces of information say things that cannot both be true.
09:11 You're now known as TheWatcher
09:12
<@Vornicus>
It's the point of database normalization to ensure that data anomalies are impossible.
09:15
<@AnnoDomini>
I see. And what kind of anomaly are we looking at here? I've never actually run into those with my database work.
09:15
< Namegduf>
Desynced stuff.
09:16
< Namegduf>
Like, say, having a "state" column and a "country" column.
09:16
< Namegduf>
And then changing "country" without changing state.
09:16
<@Vornicus>
Well, in this case: I'm making a thing where a region needs to know what paths and sites are next to it (and indeed paths and sites need to know each other, too)
09:17
< Namegduf>
AnnoDomini: Oh, you have Linux issues?
09:17
< Namegduf>
It definitely is unusual.
09:17
< Namegduf>
Are you sure all programs have that problem, and it isn't one program in particular which can't be used with others?
09:18
< Namegduf>
There's a number of sound architectures, the two important ones if you've not been installing silly stuff being ALSA and OSS.
09:18
< Namegduf>
Programs written for the latter (which is older) cannot, by design, use audio at the same time as other stuff.
09:19
<@AnnoDomini>
At least three programs conflict: Opera, Dominions 3 and Rhythmbox Music Player.
09:19
<@Vornicus>
But /something/ in here has to have a position in space, too, or I won't be able to write it.
09:19
< Namegduf>
Hmm.
09:19
<@Vornicus>
Er, draw it.
09:19
<@AnnoDomini>
I've installed some alsa stuff now, gonna check it out.
09:19
< Namegduf>
You've tried Opera and Rhythmbox at once?
09:19
<@AnnoDomini>
Yes.
09:19
< Namegduf>
Okay.
09:20
<@Vornicus>
But it's possible, if these two things are both represented separately, to have the position in space not match the relationships given by the site-path-region tables.
09:20
< Namegduf>
Does Rhythmbox provide the ability to see an output plugin?
09:20
<@AnnoDomini>
Okay, now I'm getting them both to work. :D
09:21
< Namegduf>
Is this after installing ALSA stuff?
09:21
< Namegduf>
Maybe that fixed it.
09:21
<@AnnoDomini>
Yes. Dominions 3 still doesn't seem to work.
09:22
< Namegduf>
Is Dominions 3 old?
09:22
< Namegduf>
Dominions 3, at a guess, may use OSS
09:22
< Namegduf>
Doesn't mean there's no solution if it does.
09:22 * Namegduf gets the package name.
09:22
< Namegduf>
Is it the natural architecture for your system?
09:22
<@AnnoDomini>
I have no idea.
09:22
< Namegduf>
I mean, if you're on a 64bit system, is it 64bit?
09:23
<@AnnoDomini>
Uh, I'm on a 32bit system.
09:23
< Namegduf>
Okay, good.
09:23
<@AnnoDomini>
It's the native Linux version of Dom3.
09:23
< Namegduf>
There's a wrapper that runs OSS programs and tinkers with their library calls to make them use ALSA
09:24
< Namegduf>
But if you're on a 64bit system, it can't handle 32bit programs and you can't get a package for the 32bit version, you need to do crazy stuff.
09:25
< Namegduf>
Okay.
09:25
< Namegduf>
You need to install alsa-oss
09:25
< Namegduf>
And then try running Dominion 3 from a terminal with "aoss" in front.
09:25
< Namegduf>
If that fixes it, it's an OSS program and running it through the wrapper works.
09:26
< Namegduf>
And their stuff is also horribly outdated.
09:26
<@AnnoDomini>
Trying that quit-crashes Dom3.
09:26
< Namegduf>
Gragh.
09:28
< Namegduf>
It looks like it does use OSS.
09:31
< Namegduf>
I don't have any ideas, sorry.
09:31
< Namegduf>
If it's not compatible with the wrapper...
09:38
<@AnnoDomini>
Okay.
10:12
<@Vornicus>
...gah. Actually I don't even /need/ the position to make the s-p-r tables not make any sense.
10:13 * Vornicus gives up.
10:15
<@Vornicus>
On the other hand, just looking at this I /think/ I could almost make my data a single string and it'd be human readable as an actual game board! ...which would be entirely ridiculous, but, hell, it'd be funny.
10:31 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code
10:34
<@Vornicus>
Plenty of room!
10:46 Reiv[Graduate] [orthianz@Nightstar-559fb026.xnet.co.nz] has joined #code
10:48 Orth [orthianz@Nightstar-c3d0cd68.xnet.co.nz] has quit [Ping timeout: 121 seconds]
11:05 Vornicus is now known as Vornicus-Latens
11:08
< Namegduf>
AnnoDomini: It looks like alsa-oss includes kernel drivers which fake the OSS interface there. That might serve you better, but I''ve never used them.
11:13
< Tarinaky>
AnnoDomini: ALSA supports software mixing/
11:14
< Tarinaky>
The OSS does -not- support software mixing.
11:14
< Tarinaky>
So if a program uses the OSS interface - unless you have a wraparound that converts it into calls to ALSA - it'll block the audio device.
11:15
<@AnnoDomini>
We established that much.
11:15
< Tarinaky>
Find and use a wrapper for the OSS calls. Modern versions of ALSA come with one out of the box.
11:15
<@AnnoDomini>
Dominions 3 doesn't seem to support the aoss wrapper.
11:15
< Tarinaky>
My DOm3 does.
11:15
<@AnnoDomini>
Mine crashes.
11:15
< Tarinaky>
Or rather, it plays through alsa.
11:16 Orth [orthianz@Nightstar-dbcc4f51.xnet.co.nz] has joined #code
11:17
< Tarinaky>
I take that back.
11:17
< Tarinaky>
I can't get Dom3 to put out any audio.
11:18 Reiv[Graduate] [orthianz@Nightstar-559fb026.xnet.co.nz] has quit [Ping timeout: 121 seconds]
11:19
< Tarinaky>
Looking at this dom3 appars to support multiple audio outputs.
11:19
< Tarinaky>
******* Audio Options *******
11:19
< Tarinaky>
-s --nosound No sound effects or music
11:19
< Tarinaky>
-m --nomusic No music
11:19
< Tarinaky>
--musicvol X Set music volume, 0-100
11:19
< Tarinaky>
--clickvol X Set mouse click volume, 0-100
11:19
< Tarinaky>
--defsound Use default sound device
11:19
< Tarinaky>
--pulseaudio Route sound through pulse audio
11:19
< Tarinaky>
--arts Route sound through aRts
11:19
< Tarinaky>
-o --oss Use direct oss sound output
11:19
< Tarinaky>
Whoops. Sorry for spam. Didn't think >.<
11:20
< Namegduf>
Hmm. PulseAudio could be a solution, but a big ugly interfere-with-everything-else one.
11:20
< Namegduf>
aRts is ancient and now deprecated.
11:21
< Namegduf>
OSS is the problem.
11:21
< Tarinaky>
Problem is...
11:21
< Tarinaky>
I'm not convinced OSS is the default output device.
11:21
< Tarinaky>
Since there's a --defsound flah.
11:21
< Tarinaky>
*flag
11:21
< Tarinaky>
I didn't think OSS had sound devices?
11:21
< Namegduf>
No idea.
11:22
< Namegduf>
The sys requirements for Dominion 3 cite "OSS-Compatible sound card", though.
11:23
< Tarinaky>
I dunno. I'm not getting any audio out with the OSS system.
11:23
< Namegduf>
If you have ALSA programs using the sound card
11:23
< Namegduf>
You won't
11:24
< Tarinaky>
As far as I can tell nothing's using the sound card.
11:24
< Tarinaky>
There's a distinct lack of sound~
11:24
< Namegduf>
How are you checking?
11:24
< Tarinaky>
Headphones on full, speakers on full.
11:25
< Namegduf>
That's not checking.
11:25
< Tarinaky>
Firefox is closed.
11:25
< Tarinaky>
MPD is stopped.
11:25
< Tarinaky>
There isn't anything else running that even touches the interface :/
11:25
< Namegduf>
Okay, so you're not actually checking /dev/snd
11:25
< Namegduf>
I'm not sure what your point is, though.
11:25
< Tarinaky>
Dom3 not producing sound for me with any combination of settings.
11:26
< Tarinaky>
It used to.
11:26
< Tarinaky>
But I turned the sound off because I didn't want it.
11:26
< Tarinaky>
Making troubleshooting Anno's problem harder.
11:26
< Namegduf>
Soudns like it's OSS, something else is keeping hold of your sound devices.
11:26
< Namegduf>
Which is fairly common.
11:26
< Namegduf>
Run "lsof /dev/snd/*"
11:27
< Tarinaky>
...
11:27
< Tarinaky>
WTF is knotify4?
11:27
< Namegduf>
There you go.
11:27
< Tarinaky>
No. Seriously.
11:27
<@TheWatcher>
kde's notification sound generator, IIRC
11:27
< Tarinaky>
What is it and what is it even doing on my system. :/
11:27
< Tarinaky>
I'm not using KDE :/
11:27
< Namegduf>
You installed it, apparantly.
11:27
< Namegduf>
And that means it gets to bloat everything!
11:28
< Tarinaky>
Eugh. It's a dependancy for k3b.
11:28
<@TheWatcher>
That'd do it
11:28
< Tarinaky>
Which apparently means k3b thinks it can leave it running in the background :/
11:28
<@AnnoDomini>
If I run Dom3 when nothing else is locking up the sound, there's sound, but subsequent sound producers fail. If something else is playing, there won't be sound in Dom3, but it will otherwise work fine. Trying to use aoss makes Dom3 crash during the Please Wait... loading screen.
11:28
< Namegduf>
KDE is designed solely around the "running nothing but KDE" usecase
11:29
<@TheWatcher>
And the "leave services running in case you want to start another KDE program, so it starts faster"
11:30
< Namegduf>
With service dependency and lack of modularity designed as such because it's designed around the "running nothing but KDE" usecase
11:31
< Tarinaky>
AnnoDomini: Apparently you need to configure aoss before use.
11:31
< Namegduf>
Do you now?
11:31
<@AnnoDomini>
How?
11:31 * Namegduf never had to
11:31
< Tarinaky>
man aoss.
11:31
< Tarinaky>
Compare it to your asound.conf
11:32
< Tarinaky>
Namegduf: Well, I have an empty asound.conf. So I think -I- need to jump through some hoops.
11:32
< Namegduf>
Why would you need to do that?
11:32
< Namegduf>
Tarinaky: No, you don't.
11:32
< Namegduf>
It says "This is useful in cases" then gives an example of such a case.
11:32
<@AnnoDomini>
Tarinaky: Where's that? In /etc/?
11:32
< Tarinaky>
Namegduf: "This is useful in cases where routing settings (which can be made in your .asoundrc file) need to be applied to commands that use the OSS API."
11:33
< Namegduf>
Right.
11:33
< Tarinaky>
Correct me if I'm wrong but DOm3 uses the OSS API.
11:33
< Namegduf>
It does, that's why aoss is useful.
11:33
< Tarinaky>
If it didn't use the OSS API it'd be an ALSA program.
11:33
< Namegduf>
The point, however, is not to apply special routing settings to it.
11:33
< Namegduf>
The point is to make it use ALSA.
11:34
< Tarinaky>
Namegduf: Which requires routing calls to dsp0 to the digital mixer!
11:34
< Namegduf>
No.
11:34
< Namegduf>
It requires preloading a library which replaces OSS calls with ALSA calls.
11:34
< Namegduf>
asoundrc == ALSA configuration file
11:34
< Namegduf>
Nothing special for aoss
11:34
<@AnnoDomini>
Okay, so what do I need to do?
11:35
< Namegduf>
Hold on.
11:36
< Namegduf>
Trying to find how to load their kernel modules.
11:37
< Namegduf>
Ah, no, that's just making it work normally.
11:38
< Namegduf>
With a single app at a time again.
11:38
< Namegduf>
No, I don't think there's a solution.
11:38
< Tarinaky>
AnnoDomini: Play without sound?
11:38
< Namegduf>
Feel free to see if creating asoundrc and adding the first line from the man page to it in your home directory.
11:39
< Namegduf>
Works.
11:39
< Namegduf>
But I don't *think* it will.
11:39
< Tarinaky>
I already tried it.
11:39
< Tarinaky>
You were right.
11:39
<@AnnoDomini>
Tarinaky: That's what I have been doing already.
11:39
<@AnnoDomini>
Namegduf: Where do I create it?
11:39
< Tarinaky>
AnnoDomini: I believe this may be the best solution.
11:40 * Tarinaky starts up knotify4 to block OSS apps since it was doing a grand job >.>
11:40
< Tarinaky>
Aww.
11:40
< Tarinaky>
No idea how to get it back. Oh well.
11:40
< Namegduf>
Start and close k3b
11:41
< Tarinaky>
Tried that.
11:41
< Tarinaky>
Didn't work :/
11:41
< Tarinaky>
Meh.
11:41
< Namegduf>
Strange.
11:42
< Tarinaky>
It was probably started when k3b last played a sound.
11:42
< Tarinaky>
Which was when I made a disk image.
12:06
<@AnnoDomini>
Hmmm. Any way to make Virtual Box support really low resolutions better?
12:06
<@AnnoDomini>
Or just double pixel size or something.
12:15
< Tarinaky>
Lowering your host resolution would work.
12:16
< Tarinaky>
Although I suspect that's not what you had in mind.
12:23
<@AnnoDomini>
Not really.
13:13 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code
13:14
<@ToxicFrog>
Tarinaky: k3b is a KDE program; thus, it depends on a bunch of KDE daemons, and if they are not running when it needs them, they will be started.
13:14
<@ToxicFrog>
Also, just use pulseaudio already if that's an option.
13:15
< Namegduf>
He doesn't have it installed.
13:15
<@ToxicFrog>
o.O
13:15
< Namegduf>
And I don't know enough to help him install it without fucking everything up.
13:15
<@ToxicFrog>
I haven't used a distro in years that didn't come with pulseaudio
13:15
< Namegduf>
You've never used Debian?
13:16
< Namegduf>
I bet Arch doesn't come with it, either.
13:16
< Namegduf>
Be amazed if Gentoo did.
13:16
< Namegduf>
Don't know about Fedora.
13:16
<@ToxicFrog>
I hate Debian and haven't used it since 2007 or so
13:16
<@ToxicFrog>
Since I prefer my linux distros to actually work
13:16
<@ToxicFrog>
Ditto gentoo
13:16
<@ToxicFrog>
Never used arch
13:17
<@ToxicFrog>
Ubuntu, Fedora, Mint, and OpenSUSE all come with pulseaudio installed and configured if you tell them to install sound support (which is the default)
13:17
< Namegduf>
Ew.
13:17
< Namegduf>
Three, then.
13:17
< Namegduf>
(Mint doesn't count as a distribution, it's just a minor variation on Ubuntu)
13:18
< Namegduf>
That's kinda horrible. Are you sure you don't just use a DE that includes it?
13:19
< Namegduf>
Hmm. Maybe not.
13:20
< Namegduf>
That's higher penetration than I'd expected.
13:21
< Namegduf>
I think you listed all the big distros that use it but Mandriva and OpenWRT, according to Wikipedia.
13:21
<@ToxicFrog>
("minor variation" in the same way ubuntu is a minor variation on debian, perhaps have you used it?)
13:22
< Namegduf>
No, it's less of a variation than Ubuntu is.
13:22
<@ToxicFrog>
Having used both - debian doesn't work, ubuntu sort of works but not really, mint just works.
13:23
<@ToxicFrog>
If they have accomplished this just by putting in a new update manager and altering the default set of installed packages, more power to them.
13:23
<@ToxicFrog>
Anyways, my experience with audio on linux boils down to: if you are using PulseAudio, something somewhere will break.
13:24
< Namegduf>
That sounds about accurate.
13:24
< Namegduf>
Also PulseAudio is slow.
13:24
<@ToxicFrog>
However, if you are using ALSA or OSS, you are entering a waking nightmare from which there is no escape.
13:24
< Namegduf>
Apparantly.
13:24
< Namegduf>
What?
13:24
< Namegduf>
ALSA "just works"
13:24
< Namegduf>
And has always just worked
13:24
< Namegduf>
For as long as I've used Linux
13:24
< Namegduf>
Legacy OSS apps suck ass, but there's nothing PulseAudio can do for them, they're massively outdated
13:24
<@ToxicFrog>
It "just works" as long as you only do one thing at a time. As soon as you do it starts either randomly dropping streams, rejecting new ones a la oss, or just hanging.
13:25
< Namegduf>
What?
13:25
< Namegduf>
No.
13:25
< Namegduf>
Never happened here.
13:25
< Namegduf>
Ever.
13:25
<@ToxicFrog>
Then pulseaudio became the default and hey, these problems went away!
13:25
< Namegduf>
Cool story.
13:25
<@AnnoDomini>
Sound mixing works fine now that I've installed ALSA.
13:25
< Namegduf>
I dispute that your experience, which you are insinuating is the general case, is the general case.
13:25
<@ToxicFrog>
Also, if it's slow, that's news to me. Granted I haven't run it on anything slower than my 800MHz laptop.
13:26
< Namegduf>
I was referring to latency.
13:27
<@ToxicFrog>
It has been corroborated by talking to other people who switched from ALSA to OSS, and by the fact that distros that place a heavy emphasis on things working out of the box are switching to it.
13:27
< Namegduf>
That's because it provides per-program volume control prettiness
13:27
< Namegduf>
Also, if you switch from ALSA to OSS, you're on crack.
13:27
<@ToxicFrog>
Haven't noticed that either.
13:27
< Namegduf>
Wait.
13:27
< Namegduf>
You *can't* switch from ALSA to OSS.
13:27
< Namegduf>
That's gibberish.
13:27
<@ToxicFrog>
The latency, I mean, not the per-program volume controls (which I have noticed but have never had a need for)
13:27
<@ToxicFrog>
Er
13:27
< Namegduf>
Programs only support one specifically unless they have multiple output plugins.
13:28
<@ToxicFrog>
I meant "switched from alsa to pulseaudio"
13:28
<@ToxicFrog>
Sorry, woke up ten minutes ago
13:29
< Namegduf>
I've never talked to anyone else who switched from ALSA to PulseAudio, because none of the people I talk to use it. I've heard of it mentioned primarily in association with "breaking".
13:29
< Namegduf>
So you're the first.
13:29
<@ToxicFrog>
Anyways, jacking out to go to work, back in 30-50 minutes
13:29
< Namegduf>
I've also never heard anything about ALSA breaking with multiple ALSA programs, at all.
13:29
< Namegduf>
Okay.
13:30
< Namegduf>
My opinion of PulseAudio is "anything that requires every application developer, ever, to support you, and makes Linux audio more complex, a commonly bitched about problem by devs, when we have the perfectly functional ALSA, cannot be a good thing"
13:30
< Namegduf>
But that does not essentially make it architecturally bad
13:44 * TheWatcher finds himself repeatedly makign the typo urf-8, cant imagine why...
13:54
< Serah>
Represed demand for attention manifests as OCD-like typo behavior?
14:03
< PinkFreud>
Namegduf: you've described ALSA too
14:06
<@AnnoDomini>
Hmm. Would the problem of needing to software mix be obviated if my card supported hardware mixing?
14:06
< Namegduf>
Hmm, it might.
14:06
< Namegduf>
ALSA and OSS at once might not be fixed, though.
14:21 * TheWatcher readsup, vaguely notes: emerge -s pulseaudio = * media-sound/pulseaudio\n Latest version available: 0.9.21.1\nLatest version installed: [ Not Installed ]\n...etc...
14:23
<@TheWatcher>
(ie: gentoo does have it, but I see no reason whatsoever to install it, as I can just tell stuff to use alsa, if sound is needed at all)
14:31 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
14:32 Reiv[Graduate] [orthianz@Nightstar-526fac6b.xnet.co.nz] has joined #code
14:32 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has joined #code
14:32 mode/#code [+o ToxicFrog] by Reiver
14:34 Orth [orthianz@Nightstar-dbcc4f51.xnet.co.nz] has quit [Ping timeout: 121 seconds]
14:37
< Tarinaky>
Namegduf: I was under the impression that PulseAudio lacked developer #support.
14:37
< Tarinaky>
Since it had its own API.
14:38
< Tarinaky>
And I've not had trouble with ALSA.
14:40
<@ToxicFrog>
Namegduf: your "opinion of pulseaudio" appears to exactly describe ALSA as well, apart from the "when we have the perfectly functional ALSA" part, which I would dispute.
14:41
< Namegduf>
ToxicFrog: It would, but for two factors:
14:41
< Tarinaky>
AnnoDomini: If you have hardware mixing you don't need software mixing.
14:41
< Tarinaky>
AnnoDomini: Which, in short, means getting an old PCI soundcard.
14:42
< Namegduf>
1) ALSA actually replaces OSS in the kernel. The OSS support in the kernel is now a wrapper on the ALSA stuff. So it has some measure of "official" endorsement. PulseAudio are just some random guys who felt like making a project, and it sits on top of the existing ALSA infrastructure, slapping stuff on top instead of improving.
14:42
< Namegduf>
2) The functionality difference between ALSA and OSS, being able to use multiple programs at once, is a lot bigger than that between ALSA and PulseAudio.
14:43
< Tarinaky>
Namegduf: To be fair though, Pulse and ALSA can co-exist a little better than OSS.
14:43
< Namegduf>
That is definitely true, yes.
14:44
< Namegduf>
"when we have perfectly functional ALSA"; you're endorsing dropping a system and adopting a system which builds on top of half of it (the kernel half) solely because you, personally, had bugs which I assume you never bothered to report in said system. That's a terrible reason to replace a system and force every application dev to rewrite their sound support.
14:44
< Namegduf>
What's more, to modify their app to detect and switch between multiple forms of sound support, because while systems with only OSS and not ALSA are impossible with any remotely modern kernel, systems with ALSA but not PulseAudio are important for most to support.
14:45
< Tarinaky>
The easiest way to support systems with ALSA but not Pulse is to only develop for ALSA~
14:45
< Namegduf>
Quite.
14:46
< Tarinaky>
Anyway. I was under the impression that Pulse and ALSA had very different client architectures.
14:46
< Tarinaky>
With ALSA being FS based and Pulse being Client/Server based.
14:46
< Namegduf>
Sounds accurate.
14:47
< Tarinaky>
Which isn't -quite- the same as "only because of bugs you didn't report"
14:49
<@ToxicFrog>
Namegduf: "slapping stuff on top instead of improving"? I would argue that the fact that pulseaudio correctly handles sound from all of my programs rather than requiring hours of googling and dicking around with config files and finally rebooting in disgust and praying that it works is evidence that it is an improvement.
14:49
< Tarinaky>
ToxicFrog: I have no such problems with ALSA. :/
14:49
< Namegduf>
I assume you tl;dr'd what I said.
14:49
< Namegduf>
I'll repeat the core thing for that.
14:50
<@ToxicFrog>
Also, the implication seems to be that if X is implemented in terms of Y, X cannot be an improvement over Y, which raises the question of why bother using anything but syscall()
14:50
< Namegduf>
*that is not part of ALSA's design*
14:50
<@ToxicFrog>
What is not part of ALSA's design?
14:50
< Namegduf>
Your personal little bugs.
14:51
< Namegduf>
They are not an issue with ALSA's design.
14:51
< Namegduf>
Unless tracked down and it turns out they are.
14:51
< Tarinaky>
That's rather tautalogical.
14:51
< Tarinaky>
"Bugs are not issues with X unless they are found to be issues with X."
14:52
< Namegduf>
Perhaps I should be more precise.
14:52
<@ToxicFrog>
Alternately, you're saying "bugs are not an intended part of the design", which is also tautological.
14:53
<@ToxicFrog>
Or "the bugs you have experienced are not design flaws, just implementation ones"
14:53
< Tarinaky>
ToxicFrog: Hey, you wanna help me set up Pulse to work?
14:53
<@ToxicFrog>
Which may be true, but I'm not sure what point you're trying to make with it.
14:53
< Namegduf>
More precisely, it's very stupid to consider bugs to be design flaws before they've been looked into at all.
14:53
< Tarinaky>
ToxicFrog: Or at least give me an idea how long it'd take to get running?
14:54
<@ToxicFrog>
Bear in mind - this is particularly relevant to Tarinaky's question - I'm speaking from the perspective of systems with ALSA and/or PulseAudio installed by default.
14:54
< Namegduf>
Worse, not only design flaws, but issues inherent to the ALSA API.
14:54
<@ToxicFrog>
I have never set up either from scratch.
14:54
< Tarinaky>
ToxicFrog: Ah. Lame :p
14:54
<@ToxicFrog>
My experience has been that systems that default to PulseAudio Just Work, and systems that default to ALSA don't.
14:54
<@ToxicFrog>
Namegduf: where did I ever say or even imply that?
14:54
< Namegduf>
You suggested replacing ALSA with PulseAudio on those grounds.
14:55
< Namegduf>
While they both have separate implementations, what they really are is competing APIs for implementing sound in applications.
14:55
< Tarinaky>
ToxicFrog: Speaking from the experience of having to set up ALSA 'from scratch' it's been my experience that ALSA just works except when trying to do very specialist things that usually turn out to be impossible.
14:55
< Tarinaky>
It's almost always as simple as installing and unmuting the volume :/
14:56
< Namegduf>
Yeah, I install all my systems from scratch. It's normally just installing a few packages if even that, and it just goes.
14:56
< Namegduf>
Oh, yeah, and the volume thing, but I consider that a feature.
14:56
< Tarinaky>
Namegduf: It's still an important step in setup though :p
14:56
< Namegduf>
For me, not for everyone.
14:56
< Namegduf>
Yeah.
14:56
<@ToxicFrog>
Namegduf: I never said anything of the kind!
14:56
< Namegduf>
I view the API distinction as the big one, because it's the one that requires every developer ever to support
14:56
< Tarinaky>
The only two things that don't just work are:
14:57
< Tarinaky>
Mixing with OSS applications (due to OSS not supporting mixing - therefore not a Bug)
14:58
< Tarinaky>
And Mixing with Audio over Bluetooth (Not implemented.)
14:58
< Namegduf>
ToxicFrog: Well, it's what I was saying and you were disputing- or so I interpreted it. That PulseAudio might be architecturally better conceivably, although the bulk of the structural diagrams I've seen detailing the conversion layers at its edges
14:59
< Namegduf>
Do not fill me with confidence. But, that anything that required every developer ever to make a decision about what sound API to support, and, likely, write sound output multiple times in their app, when we have ALSA, which works fine
14:59
< Namegduf>
At least in terms of API design
14:59
<@ToxicFrog>
What I said, in response to Tarinaky having audio issues, was "if you can switch to pulseaudio, you should, as in my experience it is more reliable than either ALSA or OSS"
14:59
<@ToxicFrog>
I did not at any point speculate as to the underlying causes of this.
15:00
< Tarinaky>
ToxicFrog: I'm not having issues.
15:00
< Tarinaky>
ToxicFrog: Anno was having issues with OSS support in ALSA.
15:00
<@ToxicFrog>
You were having issues with k3b bastardizing your sound, I thought?
15:00
< Namegduf>
AnnoDomini was, related to their app only having OSS, aRts, and apparantly PulseAudio, which I missed.
15:00
< Namegduf>
No, he was trying to test OSS and finding it wasn't working.
15:00
< Tarinaky>
ToxicFrog: Only in as much as I didn't realise KDE was holding onto resources after exit.
15:00
< Namegduf>
Because knotifyd was holding onto sound thorugh ALSA
15:01
<@ToxicFrog>
And yes, that advice was also directed at Anno, given that dom3 appears to support pulseaudio
15:01
< Namegduf>
I considered suggesting that after Tarinaky pointed it out, but suggesting someone install PulseAudio into a working sound system when I've never seen the damn thing before
15:02
< Namegduf>
And I have no idea how it's configured or how to make stuff work with it happily... seemed unwise.
15:03
< Namegduf>
Adding PulseAudio but not ALSA is nuts, I've never heard of it before, maybe updating an old app while making silly guesses about popularity in the medium term.
15:04
< Namegduf>
ALSA has replaced OSS since 2.6
15:05
<@ToxicFrog>
If it was working, he wouldn't be having problems with it; furthermore, just because you haven't seen PulseAudio before doesn't mean it's some crazy new untested thing.
15:06
< Namegduf>
No, but it does mean I can't give any reasonable advice on making it go; and stories of breakage I've heard make me worry about suggesting someone install it from scratch.
15:07
< Namegduf>
Because that is generally when things break, before they're made to be running nicely and happily.
15:07
< Namegduf>
And "it is working"
15:07
< Namegduf>
He just isn't using it.
15:07
<@ToxicFrog>
My original recommendation was made conditional on PulseAudio already being installed and configured for that very reason.
15:07
< Namegduf>
Dom 3 uses OSS by default, and lacks ALSA support.
15:08
< Namegduf>
That's fine, I'm just clarifying that my reasoning was not based on assuming it was "some crazy new untested thing", merely on a lack of ability to support it.
15:08
<@ToxicFrog>
(also, your claim that pulseaudio requires "every developer ever" to support it is false; it provides transparent wrappers for at least OSS and ESD, and can run between alsa-userspace and alsa-kernelspace so ALSA apps go through it as well.)
15:09 Reiv[Graduate] [orthianz@Nightstar-526fac6b.xnet.co.nz] has quit [Ping timeout: 121 seconds]
15:09
< Namegduf>
For some reason, they want developers to write support for it into their apps.
15:09
< Namegduf>
I do not know why.
15:09
< Namegduf>
I don't really think I need to.
15:09
<@ToxicFrog>
...because that's easier to debug and faster than going through a wrapper?
15:09
< Tarinaky>
Right. Lets see if ALSA apps still work with Pulse out of the box.
15:10
<@ToxicFrog>
I suspect the pulseaudio devs would be overjoyed if they could, for example, drop support for the OSS wrapper and be confident that it wouldn't break anything.
15:10
< Namegduf>
Perhaps true, but not a big enough reason to ask every developer ever to change the APIs they use to write sound support in.
15:11
< Namegduf>
People complain about how Linux offers much poorer API stability than Windows, and "it's a little prettier" shouldn't be considered a reason to do it.
15:11
< Namegduf>
I don't have details of the rest of the issues, I just remember a bunch of "PulseAudio broke sound in the app; fixed it via adding something for it"
15:12
< Namegduf>
I first heard of that over a year ago at the least, though, so I have no details beyond that.
15:12
< Tarinaky>
Namegduf: There're different kinds of Linux for different folks and therefore there're different APIs for different folks.
15:12
< Namegduf>
That sounds terrible.
15:12
<@ToxicFrog>
...yeah, I can't really get behind that
15:12
< Tarinaky>
Linux isn't an OS.
15:12
< Tarinaky>
Linux is a Kernel.
15:12
< Tarinaky>
Ubuntu is an OS.
15:13
< Namegduf>
Linux's kernel's sound support is ALSA.
15:13
<@ToxicFrog>
Although I will say that API stability is not, in and of itself, a good thing, and the win32api is a perfect example of this.
15:13
< Tarinaky>
PulseAudio has -nothing- to do with Linux.
15:13
< Namegduf>
With an OSS emulation layer.
15:13
< Tarinaky>
OSS and ALSA is the only two audio APIs Linux knows anything about.
15:13
< Tarinaky>
As an aside: I'm now running PulseAudio.
15:13
< Tarinaky>
No problems detected.
15:14 Reiv[Graduate] [orthianz@Nightstar-526fac6b.xnet.co.nz] has joined #code
15:14
< Namegduf>
Tarinaky: There's a point at which you need to end it, but before the kernel is willing to support your magic new stuff is probably a bit before that point.
15:14
< Namegduf>
Er, ToxicFrog
15:14
<@ToxicFrog>
Who says it needs to be in the kernel?
15:14
< Namegduf>
Alternatively, before you have a near-100% penetration such that people can realistically only code for your API, instead of multiple.
15:14
< Namegduf>
Well, mostly because being in the kernel is the easiest way to get said 100% penetration of distros.
15:14
< Tarinaky>
Pulse seems to be fine to be fair.
15:15
< Tarinaky>
My MPD isn't configured with Pulse support and it's playing -fine- in it.
15:15
<@ToxicFrog>
You seem to be going at this from the angle of "ALSA is the part supported in the kernel, thus everyone should code for ALSA and not even think about using anything else"
15:15
< Namegduf>
No.
15:15
<@ToxicFrog>
And by that argument no-one should use libc either
15:15
< Namegduf>
Strawman.
15:15
< Namegduf>
You're jumping to conclusions about the logic behind what I'm suggesting, and then breaking said logic down.
15:15
<@ToxicFrog>
I was going for ad absurbum, actually
15:15
<@ToxicFrog>
Ok, so what is your logic?
15:16
< Tarinaky>
People are hardly being dragged out of their homes and shot for not supporting Pulse.
15:16
< Tarinaky>
Which seems to be your argument as I've read it :/
15:17
< Namegduf>
People should not force or even encourage change of application APIs, before said API has sufficient uptake that people can code solely for it. Kernel support is the primary way to make this happen.
15:17
<@ToxicFrog>
The only other way I can seem to read it is "until it has near-100% penetration, no-one should target Pulse with their software"
15:17
< Tarinaky>
I mean. Compositing WMs don't get this kind of heat.
15:17
< Namegduf>
No; until it has near-100% penetration, it should not provide its own API.
15:18
< Namegduf>
It should just be a wrapper layer, and said wrappers should not require application change-ever.
15:18
< Tarinaky>
Namegduf: It already supports the old API.
15:18
<@ToxicFrog>
...so you want them to write something that cannot actually be used, wait for it to get near-100% penetration, and then make it usable?
15:18
< Tarinaky>
And by old I mean ALSA.
15:18
< Namegduf>
ToxicFrog: Please explain how PulseAudio cannot be used without its own application API for sound.
15:19
<@ToxicFrog>
Or do you mean they should only provide the ALSA layer, and not their own, and only introduce their own later after the ALSA one more entrenched and people have written even more ad-hoc workarounds/wrappers for stuff it doesn't have?
15:19
< Namegduf>
The ALSA one has been standard since 2004
15:19
< Namegduf>
It is fully entrenched
15:20
< Tarinaky>
Namegduf: By this logic you're opposed to the SDL as well you realise.
15:20
< Namegduf>
That is when OSS ceased to exist as anything but an emulation layer; when 2.6 was released.
15:20
< Tarinaky>
SDL shouldn't provide its own API! You should have to do everything through ALSA!
15:20
< Tarinaky>
:/
15:20
< Namegduf>
Can anyone here point out flaws in my arguments which are not based on misinterpreting them, then trying to pull an ad absurdum?
15:20
< Namegduf>
It's quite annoying.
15:21
< Namegduf>
SDL does not attempt to replace the sound system for non-SDL apps on the system, and has no system-wide effects, AFAIK
15:21
<@ToxicFrog>
But that is the argument you're making! ALSA already provides an API, so anyone else writing a sound backend should expose exactly the same API!
15:21
< Namegduf>
No.
15:21
< Tarinaky>
Namegduf: If this is not the argument you're making I would suggest not presenting it as your argument.
15:21
< Namegduf>
I would suggest learning to read.
15:22
<@ToxicFrog>
Ok, you seem to have missed the bit where PulseAudio does not replace ALSA, and where pure-ALSA apps still work as well as they ever did with PulseAudio present.
15:22
< Tarinaky>
If you don't like Pulse don't write Pulse code.
15:22
< Namegduf>
My argument is subtle.
15:22
< Namegduf>
Too subtle, apparantly.
15:22
< Tarinaky>
What's wrong with that? If you don't want to support a new API don't use it.
15:23
<@ToxicFrog>
"<Namegduf> SDL does not attempt to replace the sound system for non-SDL apps on the system, and has no system-wide effects, AFAIK" - neither does PulseAudio apart from the "system-wide effect" of "apps with PulseAudio support can now select it as a sound backend"
15:24
< Tarinaky>
Pulse isn't even system wide.
15:24
< Namegduf>
Then I would like you to explain to me why people do not discuss the SDL as a "Linux sound system" along with "aRts, PulseAudio, OSS, and ALSA"
15:24
< Tarinaky>
It's written to be run as a user.
15:24
< Tarinaky>
Namegduf: Because SDL is only an API.
15:25
< Tarinaky>
Namegduf: It's implemented entirely in terms of other sound systems.
15:25
<@ToxicFrog>
Because SDL is a thin wrapper around {PulseAudio, ALSA, OSS, aRts, ESD, DirectSound, /dev/dsp...}, whereas pulseaudio provides actual functionality along with an API.
15:26
< Namegduf>
/dev/dsp == OSS
15:26
< Namegduf>
Just as a sidenote
15:26
< Namegduf>
Okay. It's designed as a wrapper for applications using it to use other sound systems. They don't go out and say "Don't use ALSA, use SDL".
15:26
< Namegduf>
That would be silly.
15:26
< Tarinaky>
Namegduf: I've just installed Pulse. None of my applications have recompiled and are outputting sound to ALSA as they always did. And yet I have new functionality that was missing.
15:26
< Tarinaky>
Namegduf: Your argument about APIs is invalid.
15:27
< Namegduf>
Tarinaky: Which, and in what terms, as close to formal logic as possible, and making no guesses at all about reasoning that I've not outright stated?
15:27
< Tarinaky>
"Don't use ALSA, use SDL" << Yes they do. If there was no reason to use SDL instead of ALSA there wouldn't be an SDL.
15:27
< Namegduf>
(Given none of my arguments were based on implementation issues, I find this claim rather unwise)
15:27
< Namegduf>
No they don't.
15:28
< Tarinaky>
Namegduf: The implementation of the applications has not changed.
15:28
< Namegduf>
Tarinaky: And?
15:28
< Namegduf>
Explain how this relates to anything I've claimed.
15:28
< Namegduf>
My sole claim has been, and I'm trying to slim this down to the core point as much as possible
15:28
< Tarinaky>
Namegduf: The API has not changed. Therefore no new API has been used.
15:28
< Tarinaky>
Therefore bitching and moaning about a new API is silly.
15:28
< Namegduf>
Okay.
15:28
< Namegduf>
Now, please.
15:29
< Namegduf>
Quote the part where I claimed that installing PulseAudio changed the API used by existing ALSA programs.
15:29
< Tarinaky>
<Namegduf> People should not force or even encourage change of application APIs, before said API has sufficient uptake that people can code solely for it. Kernel support is the primary way to make this happen.
15:29
< Namegduf>
That is not what that lines says.
15:30
<@ToxicFrog>
<Namegduf> SDL does not attempt to replace the sound system for non-SDL apps on the system, and has no system-wide effects, AFAIK -- implying that PulseAudio does
15:30
< Namegduf>
PulseAudio's implementation absolutely does.
15:30
< Tarinaky>
Pulse doesn't even run system wide.
15:30
< Namegduf>
The distinction between system wide and user wide is incredibly irrelevant.
15:31
< Namegduf>
"affecting applications which do not explicitly try to use it" is the point
15:31
< Tarinaky>
Namegduf: Only if you change ALSA's configuration.
15:31
< Namegduf>
Okay, look
15:32
< Namegduf>
All these counterarguments are based on shitty misinterpretations, so I'm going to ignore them and just restate my point as simply as possible, and then we can see if you still have them
15:32
< Namegduf>
Because I think it's very reasonable.
15:34
< Tarinaky>
But there's someone wrong on the internet.
15:34
< Namegduf>
My core point has been "Trying to change the Linux application API in a manner that practically requires people to support multiple APIs in their software is at least a 'hard sell', because it adds further complications to choosing how to implement sound on Linux, and further instability to the application APIs for developers, which is already a commonly complained about flaw."
15:35
< Tarinaky>
We've already established that it's possible to only support ALSA and have your code run everywhere though.
15:35
<@ToxicFrog>
I think where we run into trouble is the "change the Linux application API" and "requires people to support multiple APIs" parts, because neither of these is true
15:35
<@ToxicFrog>
You want to stick to just what's defined by the linux kernel devs? Fine, use ALSA, your programs will still work on systems that use PulseAudio.
15:36
< Tarinaky>
The ALSA API works everywhere.
15:36
< Namegduf>
Perhaps I should clarify that "trying to change" in this case is "offering, and suggesting your own API"
15:36
< Tarinaky>
I don't see how "offering and suggesting" leads to supporting multiple APIs.
15:36
< Namegduf>
While calling the ALSA/OSS wrappers "compatibility layers" and referring to use of its own API as "direct support"
15:36 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
15:37
< Namegduf>
Because people can't use their API without also using ALSA or OSS if they want to support non-PulseAudio systems.
15:37
<@ToxicFrog>
...yes? I'm not seeing why this is a problem.
15:37
< Namegduf>
I emphasise that "requires people to support multiple APIs" is conditional on them accepting the PulseAudio API they are suggesting.
15:37
< Tarinaky>
So the problem is that if people want to use a wide variety of audio APIs they need to use a wide variety of audio APIs?
15:37
<@ToxicFrog>
Yes. This is why I object to your argument.
15:38
< Namegduf>
Okay.
15:38
<@ToxicFrog>
"People who want to use PulseAudio need to use the PulseAudio API to use PulseAudio's features" - yes, and?
15:38
< Namegduf>
Er
15:38
< Tarinaky>
We've already established that ALSA works everywhere. If you don't want to support multiple APIs you write ALSA code.
15:38
<@ToxicFrog>
"People who want their program to use PulseAudio's features, while still working on ALSA-only systems, need to support both PulseAudio and ALSA" - yes, and?
15:38
< Tarinaky>
If you wanted to support Pulse 'natively' then... you wouldn't be able to if it didn't exist -anyway-.
15:39
< Tarinaky>
If Pulse didn't exist you couldn't write code for it anyway.
15:39
< Namegduf>
So you disagree that introducing new application APIs for an operating system, which require people support the original API anyway if they want to use it, is something which should at the least be carefully considered as a major thing?
15:40
< Namegduf>
Tarinaky: You're going off on a tangent so quickly I have no idea where you are anymore
15:40
< Tarinaky>
As long as the old API works and remains unchanged I fail to see the issue.
15:40
<@ToxicFrog>
Namegduf: no, not at all.
15:40
< Namegduf>
ToxicFrog: Okay, because that was my *point*
15:40
< Tarinaky>
Windows does this all the time.
15:40
<@ToxicFrog>
The old API works. You don't want the fancy new features, don't use the new API.
15:40
< Namegduf>
Oh, you do disagree.
15:41
< Namegduf>
Okay.
15:41
< Namegduf>
That's fine.
15:41
< Tarinaky>
There're new major versions of DirectX every couple of years and no-one complains.
15:41
<@ToxicFrog>
"Someone writes a fancy new library/service/application on top of kernel functionality, some people use it" happens all the time, and not just on linux.
15:41
< Tarinaky>
Even though games usually have to support 2 or 3 versions of DX.
15:41 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
15:42
<@ToxicFrog>
Tarinaky: actually, with the exception of DX9/10, most games only support one - it's windows that has to support apps using everything from DX3 to DX9 on the same system.
15:42
< Tarinaky>
ToxicFrog: There're plenty of games that support multiple ones.
15:42
<@ToxicFrog>
Examples?
15:42
< Tarinaky>
ToxicFrog: Most MMOs.
15:42
< Tarinaky>
ToxicFrog: MMOs try to get maximum penetration so they end up supporting as much as they can.
15:43
<@ToxicFrog>
And by "support multiple ones", you mean (frex) "If DX9 is installed, it will use DX9 APIs and features, but will otherwise fall back to DX8, and then DX7"?
15:43
<@ToxicFrog>
...actually, now that you mention it, the Source engine does this
15:43
<@ToxicFrog>
Ok,n never mind
15:43
< Namegduf>
Not quite the same thing.
15:44
< Tarinaky>
Namegduf: The only difference is that the DX example is linear.
15:44
< Tarinaky>
Whereas it's not quite as obvious that Pulse replaces ESD.
15:44
< Namegduf>
Tarinaky: The only difference is that different DX versions are not totally different APIs, is what you mean.
15:45
< Tarinaky>
Namegduf: True enough. They're different enough to be different APIs though. Even if they're not 'totally different'.
15:47
< Tarinaky>
But fine. We don't believe having several APIs with back compatibility is a bad thing.
15:50
< celticminstrel>
...TextEdit didn't recover the unsaved documents...
15:53
< Namegduf>
Tarinaky: My issue is with having multiple current, competing APIs.
15:53
< Namegduf>
That is what I feel is a bad thing.
15:54
< Namegduf>
Or at the least a damn big thing to consider before introducing a new one.
15:55
<@ToxicFrog>
Where's the competition, though?
15:55
< Tarinaky>
It's inevitable that you're going to get multiple APIs.
15:55
<@ToxicFrog>
If PulseAudio does well, that doesn't reduce support for ALSA.
15:55
< Namegduf>
ALSA, primarily.
15:55
< Tarinaky>
There's no single authority to hand down "THIS IS THE CORRECT API AND ALL OTHERS ARE HERESY"
15:55
< Tarinaky>
There's no Linux Pope.
15:56
< Namegduf>
That would be kinda awesome, but no.
15:56
< Tarinaky>
And having multiple APIs is better than the alternative of only having one 'correct' (but technically inferior) API.
15:57
< Tarinaky>
Each of the Distros act as Linux Pope and decide which one is best and package it.
15:58
< Tarinaky>
Only having one true API prevents research and experimentation.
15:58
< Namegduf>
So you're saying we need some kind of centralised Linux Pope.
15:58
< Namegduf>
No, I'm kidding.
15:58
< Tarinaky>
We have one.
15:58
< Tarinaky>
It's called Ubuntu.
15:58
< Tarinaky>
Well, we have several.
15:58
< Tarinaky>
People use the audio sound systems that're pushed with their Distros.
15:59
< Tarinaky>
And developers prioritise the sound systems that people use.
15:59
< Namegduf>
See, that's not generally how it works.
15:59
< celticminstrel>
Does anyone know where TextEdit keeps its auto-save files?
15:59
< Namegduf>
There's other players (GNOME and KDE are the big ones) and there's generally very few sound systems.
16:00
<@ToxicFrog>
GNOME, I note, has largely adopted PulseAudio.
16:00
< Namegduf>
This is good, because people are already complaining that Linux is hard to support because of conflicting APIs
16:00
<@ToxicFrog>
I have no idea what KDE uses.
16:00
< Namegduf>
GNOME may support PulseAudio, but it also fully supports ALSA, IIRC
16:00
< Tarinaky>
Even if we had a Pope to enforce a linear progression and say that Pulse was the one true Sound System.
16:00
< Tarinaky>
We'd still have to support ALSA for legacy.
16:00
<@ToxicFrog>
GNOME doesn't "support" anything WRT sound!
16:00
<@ToxicFrog>
GNOME uses PulseAudio.
16:01
< Namegduf>
False(ish)
16:01
< Namegduf>
GNOME I think has a dependency on it on some distros
16:01
< Namegduf>
But its actual requirement of it is loose.
16:01
< Namegduf>
I know a guy who switched to Gentoo to get away from it, because he could set the compiletime options to turn off Pulse usage
16:02
< Namegduf>
So wherever it is important and depended on is a compiletime setting, I would assume.
16:02
< Namegduf>
(They moved away again, Gentoo had not stopped sucking since the last time they tried it)
16:03
<@ToxicFrog>
Ok, GNOME can use PulseAudio.
16:03
< Namegduf>
Yes.
16:04
< Namegduf>
The "there are other players" bit was meant to mean there's more complex stuff at play than distributions, the "there's actually not that many, and it's a good thing" was the core of my point.
16:05
< Namegduf>
It'd really suck if there were multiple, variously supported things which all supported more than ALSA, but none of which could be relied on for decent penetration.
16:05
< Namegduf>
Well, if you were unhappy with just using ALSA.
16:05
< Namegduf>
In reality, I'd guess people would complain more about how a fractured space for stuff sucked horribly but the technical situation would be similar.
16:06
<@ToxicFrog>
True. But I'm not convinced it would suck more than there being nothing that supports more than ALSA if you were unhappy with just ALSA.
16:06
< Namegduf>
("Just use ALSA")
16:09
< Tarinaky>
People aren't going to support stuff that doesn't provide new features.
16:10 * celticminstrel sighs.
16:10
< Tarinaky>
Eventually features get collated into "one true sound system" and the deprecated ones die to be replaced by new ones.
16:11
< Namegduf>
And then we get things like this
16:12
< Namegduf>
Which supports OSS and aRts (KDE 3 only), but not ALSA. :P
16:12
< Tarinaky>
aRts is deprecated
16:12
< Namegduf>
aRts is not present on many current Linux systems, as it no longer exists in KDE after 3, I believe.
16:12
< Tarinaky>
Yes. It's deprecated.
16:13
< Namegduf>
Deprecated suggests "still present", when aRts has already passed the "die" stage, but okay.
16:13
< Tarinaky>
KDE4 isn't that new is it?
16:13
< Tarinaky>
I thought KDE 3 was still kicking about in the wild.
16:13
< Tarinaky>
But okay.
16:14
< Tarinaky>
*isn't that old is it.
16:14
< Namegduf>
KDE 4 was released January 2008. Even if update was slow because it was quite buggy early on, at this point if you're staying updated at all, you're on 4 or something else, I think.
16:14
< Tarinaky>
On the subject of ALSA/OSS... has slackware updated to 2.6 yet?
16:15
< Namegduf>
God, I hope so, 2.6 was released 2004
16:15
< Namegduf>
Answer is "yes"
16:15
< Tarinaky>
I know Slackware was using 2.4 for ages after 2.6 was released though.
16:15
< Namegduf>
What's Slackware's usage figures?
16:15
< Namegduf>
I've never really taken it seriously.
16:16
< Tarinaky>
No idea. I think the usage figures took a nose dive with stuff like Arch out there.
16:17
< Tarinaky>
http://slackware.me/webalizer/usage_201004.html
16:17
< Namegduf>
THat looks like website usage figures?
16:17
< Tarinaky>
Oh wait. That's not the slackware website.
16:17
< Tarinaky>
xD
16:17 * Tarinaky shoulda checked the URL.
16:18
< Namegduf>
Well, 12.1 from 2008 has 2.6 as default and big.
16:18
< Namegduf>
Er, default and previously existing.
16:18
< Namegduf>
They talk about polish.
16:19
< Tarinaky>
I dunno. I last used Slackware around 10 I think.
16:19
< Tarinaky>
The lack of package manager annoyed me.
16:20
< Namegduf>
If I wanted a system which did absolutely nothing for me and had no package management
16:20
< Namegduf>
I would run LFS
16:20
< Namegduf>
As it is, I want the systme to in effect, automate all jobs which are suitable for automation; do what I want it to do automatically.
16:21
< Namegduf>
So I don't use either.
16:24
<@ToxicFrog>
Oh god this is going to hurt
16:24 * ToxicFrog tells p4 to resolve a 1026-file merge ;.;
16:24
< Namegduf>
p4?
16:24
<@ToxicFrog>
perforce. Centralized commercial version control system.
16:29
< Tarinaky>
ToxicFrog: Ouch.
16:29
<@ToxicFrog>
Tarinaky: at least we aren't using SVN :/
16:29
<@ToxicFrog>
And it's not all bad, at least I can use git on top of it
16:29
< Tarinaky>
I meant ouch at the 1026 file merge.
16:29
<@ToxicFrog>
But the git-p4 bridge doesn't understand p4 branching and merging, so I still need to use the p4 tools for that.
16:29
< Tarinaky>
I mean. I wouldn't want to do that in git either.
16:29
< Namegduf>
"Merged it for you automatically. Would you like a cup of tea?"
16:30
< Tarinaky>
I don't think I trust anything to merge a thousand files correctly.
16:31
< Tarinaky>
Statistically it's going to do the wrong thing -somewhere-~
16:31
<@ToxicFrog>
Tarinaky: neither would I, but with git I can at least be confident that (a) git won't take ten minutes to do it, (b) it won't report conflicts on files that have only changed in one branch and (c) it won't fail to report conflicts on files that are nothing but conflicts.
16:31
< Tarinaky>
Oooouch.
16:31
<@ToxicFrog>
Thankfully, only (a) happened this time, not (b) or (c)
16:31
< Tarinaky>
Also: Hmm. Spoke too soon. MPD just crashed.
16:31
<@ToxicFrog>
But (b) in particular is a common occurence
16:33
< Tarinaky>
Hmm. MPD is refusing to start :/
16:33
< Tarinaky>
"listen: Failed to listen on 127.0.0.1 (line 50): Address already in use"
16:33
< Tarinaky>
How do I... free the resource?
16:33
< Tarinaky>
:/
16:33
< Namegduf>
Try waiting a few minutes.
16:33
< Tarinaky>
I want my music now though q.q
16:33
< Namegduf>
Linux seems to keep hold of listening ports for a while after the app that had them closed if it closed without closing them properly.
16:34
< Tarinaky>
Is there no way to force its release?
16:34
< Namegduf>
That I know or have an idea to find in the next few minutes?
16:34
< Namegduf>
No.
16:34
< Namegduf>
I deliberately left PulseAudio's supposed bugs in ALSA wrapping out because they're presumably not an architectual design flaw, although I've heard they're common and require devs to fix things for them.
16:35
<@ToxicFrog>
Tarinaky: are you absolutely sure mpd isn't already running?
16:35
<@ToxicFrog>
Motherfucker!
16:35
<@ToxicFrog>
X just crashed while I was writing the commit message
16:35
< Namegduf>
...that's shitty.
16:36
< Tarinaky>
ToxicFrog: Thanks for that suggestion. Didn't think to check ps >.<
16:47 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
16:49
< celticminstrel>
So... does anyone know where TextEdit keeps its auto-save files?
17:11 Searh [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
17:13 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
17:29 Rhamphoryncus [rhamph@Nightstar-29afc4bd.abhsia.telus.net] has joined #code
17:40 Vornicus-Latens is now known as Vornicus
17:56
<@Vornicus>
TextEdit has autosaves?
17:59
< celticminstrel>
Yes, it does. And usually auto-recovery... but for some reason this time it failed to do that. :|
18:00
< celticminstrel>
Auto-saves are usually put in the same folder as the document, but I don't know where it puts them if the document was never saved.
18:04 Searh [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
18:06 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
18:07
< celticminstrel>
I suppose the files themselves could've vanished, but I'm hoping I might be able to find them.
18:18
< celticminstrel>
Argh. I found where it stores them, but there's nothing there. They seem to have vanished into the ether. :(
18:22
<@Vornicus>
:(
18:30
< celticminstrel>
And I hacen't backed up recently enough to recover them that way. :(
18:32 Derakon [Derakon@Nightstar-1ffd02e6.ucsf.edu] has joined #code
18:32 mode/#code [+o Derakon] by Reiver
18:32
<@Derakon>
Hm...since I started working on this project, I've reduced the number of modules named "seb*" by 9.
18:32
<@Derakon>
But there's still 19 left. :(
18:33
<@Derakon>
Including seb.py, sebC.py, sebCCC.py, sebC_spec.py, sebD.pc, seBH.py, sebM.py, and the entire experiment set.
18:35
<@Vornicus>
Those are great names.
18:36
<@AnnoDomini>
Where's sebCC.py?
18:36
<@Derakon>
(Chosen replacement module names include remotes.py, logger.py, cameraInfo.py, mosaic.py...)
18:37
<@Derakon>
Very funny, AD. :(
18:37
<@Derakon>
(My best guess is that Sebastian decided that it wouldn't be differentiated enough from sebC, so he tacked the extra C on)
18:38
<@Derakon>
sebC and sebC_spec have to do with connecting to and configuring cameras. sebCCC has to do with loading correction images that correct the cameras' systemic inaccuracies.\
18:38
<@Derakon>
s/\\//
18:40
<@Derakon>
"While I was in seventh grade, I missed a week of school due to an illness. My first day back in English class, we were told spend the hour writing an essay about the evils of plagiarism. In retrospect, it's obvious what happened in my absence, but at the time I didn't know what the word meant, just that it was bad. So, I wrote an essay on the evils of communism, substituting the word plagiarism throughout. Yes, I discussed the possibility of g
18:40
<@Derakon>
odless plagiarists taking over the country and forcing a plagiarist regime upon the American people. I don't think we got a grade for it, but the teacher thought it was pretty hilarious."
18:41
<@Derakon>
Mm, this was not the right channel to post that. My apologies.
18:41
<@AnnoDomini>
It's still hilarious.
18:41 * Vornicus still thinks it's hilarious.
18:45
<@Derakon>
% grep -r sebRun * | wc -l
18:45
<@Derakon>
110
18:45 * Derakon sighs.
18:46
<@Derakon>
While sebRun and sebRunRun are both modules, runSebRun is not.
18:46
<@AnnoDomini>
Run Sebastian, Run!
18:46
<@AnnoDomini>
It's oddly appropriate.
18:47
<@Derakon>
"sebRunRun" makes a bizarre kind of sense, since it's the module for running second-degree experiments (i.e. experiments that run other experiments, using the sebRun module).
18:47
<@Derakon>
I just wish the guy hadn't plastered his name all over the entire project.
18:51
<@AnnoDomini>
He wanted to be remembered. Exegi monumentum and all that.
18:54
< celticminstrel>
So, I suppose there's no way to recover that data. :(
18:55
<@Derakon>
Hm?
18:56
< celticminstrel>
Before you came in, I was complaining about how TextEdit's auto-recovery mysteriously failed.
18:57
<@Derakon>
Ah.
18:57
<@Derakon>
Not something I'd know about, sorry.
18:58
< celticminstrel>
I found where it stores the files for that, but there's nothing there...
19:00
< celticminstrel>
And I'm thinking about trying to undelete things... but I have no idea how that would be done.
19:00
< celticminstrel>
Or if it's even possible.
19:01
<@ToxicFrog>
Depends on how it was deleted and what filesystem.
19:02
<@ToxicFrog>
Also, fffffffffffffffffffffffff
19:02
< celticminstrel>
No idea, and HFS+
19:02
<@ToxicFrog>
This assumes that the files ever existed in the first place, of course; from what you've said you were operating on an unsaved buffer, and it may not autosave those at all.
19:02
<@Derakon>
I kinda wish that mercurial would, when I rename files and change them at the same time, provide better diffing...
19:03
<@ToxicFrog>
I'm halfway through a merge in p4, and found another bug I need to fix
19:03
< celticminstrel>
It does auto-save unsaved buffers, actually.
19:03
<@ToxicFrog>
I could git stash, fix the bug, git stash pop
19:03
< celticminstrel>
It has successfully recovered them numerous times in the past.
19:03
<@ToxicFrog>
But then p4 will eat its own liver when I tell it to commit
19:03
<@Derakon>
CelticMinstrel: this happens often?
19:03
<@Derakon>
Maybe you should use a different editor~
19:04
< celticminstrel>
Oh. No, this is the first time auto-recovery has failed.
19:05
<@Derakon>
The event I was referring to was the need for auto-recovery at all.
19:05
<@Derakon>
IMO relying on the autobackups should be an exceptional occurence, not a regular one.
19:06
<@Vornicus>
Yeah, what? How did you manage to crash TextEdit?
19:06
< celticminstrel>
I didn't; I had a system crash.
19:06
< celticminstrel>
I use TextEdit to store things that I might need later which don't really belong anywhere in particular.
19:07
< celticminstrel>
Usually it's not particularly important stuff, though; but some of it was important this time. Probably not much, fortunately, but still...
19:16 * Derakon finds some code that has been broken for months, due to looking for modules in a place they haven't been for, well, months.
19:16
<@Derakon>
Nobody's complained in all that time, so out they go!
19:21 * Derakon replaces modules: sebRun => run, sebRunRun => metaRun, sebRunEvents => events, sebRunHelpers => helpers, sebRunDsp => dspProfile.
19:21
<@Derakon>
These are all under the "experiment" package, so I'm not worried about generic module names being problematic or vague.
19:21
< celticminstrel>
Why the quirk does everything have a seb prefix?
19:21
<@Derakon>
Ask Sebastian.
19:29
<@Derakon>
12 seb* modules left...
19:32 * Vornicus blinks loudly.
19:32
<@Vornicus>
In Freenode #python right now, there is someone named "PySeb"
19:32
<@Derakon>
;_;
19:34
<@Derakon>
(I can't log onto Freenode because UCSF blocks the standard IRC port)
19:34
<@Derakon>
(Very annoying, that)
19:35 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [[NS] Quit: If the world didn't suck, we'd all fall off.]
19:38 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
20:00 aoanla [AndChat@Nightstar-c5017e19.range217-43.btcentralplus.com] has joined #code
20:11 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Connection closed]
20:23
<@ToxicFrog>
Oh god
20:23
<@ToxicFrog>
I just learned about the python GIL
20:23
<@ToxicFrog>
And now I am sad
20:23 * Derakon pats TF.
20:24
<@Derakon>
Rhamphoryncus is working on this, IIRC.
20:26
<@ToxicFrog>
It's like they carefully implemented a heavily lock-contentious version of coroutines, using OS threads on multiple cores ;.;
20:28 * ToxicFrog sads at the part of this presentation that discusses the 3.2 GIL
20:29 * Derakon lunches.
20:29
<@ToxicFrog>
"Does it work? Yes, apparently:"
20:29
<@ToxicFrog>
"Sequential : 11.53s
20:29
<@ToxicFrog>
Threaded (2 threads) : 11.93s
20:29
<@ToxicFrog>
Threaded (4 threads) : 12.32s
20:29
<@ToxicFrog>
"
20:29
< aoanla>
This is why you want Stackless?
20:29
<@ToxicFrog>
That doesn't look like it's working to me...it just looks like it's slightly less broken :(
20:30
<@ToxicFrog>
Oh, and then the next section is titled "It Doesn't Work"
20:31
<@ToxicFrog>
(but for different reasons)
20:33
<@ToxicFrog>
aoanla: Stackless?
20:33
< aoanla>
Stackless Python
20:34
< aoanla>
Which does coroutines right, for a start.
20:35
< aoanla>
It's what EVE Online is written in
20:35
<@ToxicFrog>
Aah.
20:46 aoanla [AndChat@Nightstar-c5017e19.range217-43.btcentralplus.com] has quit [[NS] Quit: ]
20:58 * celticminstrel looks at the Trash: "4.06 GB on disk (3,954,110,022 bytes) for 25,717 items" O_O
21:02 AbuDhabi [annodomini@Nightstar-dda867f4.adsl.tpnet.pl] has joined #code
21:02 AnnoDomini [annodomini@Nightstar-005d706b.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
21:02
< Rhamphoryncus>
Derakon: I'm not really doing anything with it these days. Python-Safethread created language-level semantics that are entirely safe and allow for scaling, but refcounting remained. Python does it too much for atomic refcounting to work, and other experiments of mine had limited success
21:03
< Rhamphoryncus>
Sadly, there's far more interest in performance than in safety :P
21:03
<@Derakon>
Unfortunate.
21:04
< Rhamphoryncus>
I do intend to borrow most of the design for hognose though, my python compiler
21:05
< Rhamphoryncus>
There's also some possibility that unladen swallow could allow CPython to switch to a real tracing GC, although there's no plans to do so in the near future
21:06 * Derakon googles for "hognose python", determines this may be harder to find than he thought.
21:07 * Rhamphoryncus knocks on his skull
21:08
< Rhamphoryncus>
I haven't published much on it
21:08
< Rhamphoryncus>
As far as insane schemes go it's pretty insane
21:08
< Rhamphoryncus>
https://code.launchpad.net/~rhamph/+junk/hognose
21:08
<@Derakon>
Fair enough.
21:08
<@Derakon>
Heh.
21:09
< Rhamphoryncus>
The premise is that with all the forms of static analysis out there, we could create dynamic forms of them which would turn a python program into a static one, essentially the same performance as C
21:09
< Rhamphoryncus>
And that nobody has ever tried to do so before
21:09
<@Derakon>
Sounds similar to how Cython works, except that with Cython the user is doing much of the analysis.
21:10
< Rhamphoryncus>
Yes, there's a ton of attempts to do a subset of python, but that's grossly different semantics
21:10
< Rhamphoryncus>
I'm changing a few things, but the bulk of the language remains. I'll still do an interactive interpreter for example (eventually)
21:12 * Derakon eyes the Unladen Swallow project plan.
21:12
<@Derakon>
They talk about "pure GC" and contrast it against reference counting. Is refcounting not "pure" because of circular references?
21:12
< Rhamphoryncus>
I'm sure they mean pure tracing GC
21:13
< Rhamphoryncus>
unfortunately there's a lot of back and forth on whether "garbage collection" includes refcounting
21:13
< Rhamphoryncus>
IMO it does and there's a lot of hybrids
21:13
<@Derakon>
I don't see any reason why you couldn't combine a refcounter and a tracing GC.
21:13
< Rhamphoryncus>
Python's primarily refcounting, but has a tracing GC too
21:14
<@Derakon>
The refcounter would handle "easy" collection, since if refcount == 0 then the object is obviously unreachable.
21:14
< celticminstrel>
Reference counting counts as garbage collection.
21:14
< Rhamphoryncus>
There's also tracing GCs that use only a couple bits for refcounting. Objects that exceed the limit are only collected by tracing, but many short lived objects never do and are collected promptly
21:15
<@Derakon>
Interesting.
21:18 * ToxicFrog resyncs
21:18
<@ToxicFrog>
"tracing GC"?
21:18
< Rhamphoryncus>
Mark & sweep and all such things
21:19
<@Derakon>
A GC that checks for reachability of objects.
21:19
<@ToxicFrog>
Also, reference counting is not garbage collection; some garbage collectors make use of reference counting.
21:19
<@ToxicFrog>
We call these "bad garbage collectors"~
21:20
< Rhamphoryncus>
aaand as you can see, there is a lot of disagreement on the term ;)
21:20
<@ToxicFrog>
My point is that "reference counting" and "reference counting garbage collector" are not the same thing.
21:20
<@Derakon>
I remember hunting down memory leaks caused by a combination of the MySQL serialization library and web framework we were using. That was "fun".
21:20
<@Vornicus>
Refcounting is a perfectly acceptable gc technique. You just can't use it alone.
21:20
<@ToxicFrog>
Reference counting is an algorithm used by some garbage collectors to distinguish live and dead objects.
21:21
<@Derakon>
Load a page template, the web framework caches your arguments just in case you want to re-use them.
21:21
<@Derakon>
Instead, we were re-loading that page template with different earguments every time, a thousand times in one process. Didn't work out so hot.
21:21
<@ToxicFrog>
"reference counting is garbage collection" is no more true than is "free() is garbage collection".
21:21
< celticminstrel>
Well, free() isn't garbage collection; it's manual disposal.
21:22
<@ToxicFrog>
That's my point.
21:22
< Rhamphoryncus>
ToxicFrog: what would you call python's use of refcounting, with or without the tracing GC?
21:22
<@ToxicFrog>
Rhamphoryncus: "part of the garbage collector"
21:22
< celticminstrel>
Reference counting is a mechanism for automatic disposal, thus it's garbage collection.
21:23
< celticminstrel>
Not the best kind, sure, but still garbage collection.
21:23
< Rhamphoryncus>
so it's a refcounting-based garbage collector?
21:23
<@ToxicFrog>
celticminstrel: no it is not. Reference counting is a mechanism for determining what you can dispose of automatically.
21:23
<@McMartin>
Rhamphoryncus: No, it's a mark-and-sweep collector that adds refcounting as a speed optimization to get memory back sooner than otherwise
21:23
<@ToxicFrog>
It can be used as part of a garbage collector, and the result would be "a reference-counting garbage collector"
21:23
<@McMartin>
This is because mark-and-sweep is incredibly horrible by nearly every metric except ease of implementation
21:23
<@ToxicFrog>
Or, as McM says, a mark-and-sweep + refcounting collector.
21:24
< Rhamphoryncus>
McMartin: with *or without* the tracing GC. The tracing GC is most definitely an optional addon
21:24
<@McMartin>
Rhamphoryncus: If it doesn't have the tracer added, it's not a GC, it's a partial protection against memory leaks
21:24
<@Derakon>
PHP doesn't have a tracing GC~
21:24
<@Derakon>
(Or at least, not a useful one)
21:25
< Rhamphoryncus>
I disagree :)
21:25
<@ToxicFrog>
Rhamphoryncus: I note my objection applies also to mark-and-sweep; you can't say "mark and sweep is garbage collection", because it's not. It's a technique used as part of some garbage collectors.
21:26 * Rhamphoryncus gives ToxicFrog an award for linguistic pedantry ;)
21:26
<@McMartin>
TF: I must disagree.
21:26
<@Derakon>
I agree with Rhamph here.
21:26
<@ToxicFrog>
McMartin: on what grounds?
21:26
<@McMartin>
Marking isn't garbage collection.
21:26
<@McMartin>
Sweeping? Totally garbage collection.
21:26
<@Derakon>
Complaining that the algorithm is not the concept is not really useful.
21:26
<@ToxicFrog>
McMartin: Hmm. I tend to interpret it as "mark" is choosing the initial objects, "sweep" is propagating, and then you collect
21:27
<@ToxicFrog>
I must confess I've never implemented one, and if "sweep" actually refers to the collect phase, I stand corrected
21:27
<@Derakon>
No, you mark objects that you know are accessible, then you sweep to collect.
21:27
<@ToxicFrog>
Ok then. Mark-and-sweep totally is garbage collection.
21:27
<@ToxicFrog>
Also, my complaint is not "the algorithm is not the concept"; it's "reference counting is not an algorithm for garbage collection, although some garbage collectors make use of it"
21:28
<@McMartin>
At some point Python should get a decent generational collector
21:28
<@McMartin>
I am not the man to write it, though.
21:28 * Rhamphoryncus HAS implemented a tracing GC, because he rewrote most of python's GC (tracing and refcounting) in safethread
21:28
<@Derakon>
And then it didn't turn out to help much.
21:28 * Vornicus looks up tracing gc.
21:28
< Rhamphoryncus>
McMartin: python's tracing GC is generational
21:29
<@ToxicFrog>
Derakon: more precisely, my argument is that just because something is the most visible component of a thing, doesn't make it the entirety of the thing.
21:29
<@McMartin>
Oh? Good to know.
21:29
<@McMartin>
(That means it isn't classical mark-and-sweep, though~)
21:29 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has left #code []
21:30
<@McMartin>
(Which is good, because classical mark-and-sweep is *awful*)
21:30
<@Derakon>
(For those in the peanut gallery: generational GCs bucket objects into different generations depending on when they were made. Young objects are more likely to die than old objects)
21:30
<@ToxicFrog>
(classical mark and sweep can't be generational?)
21:30
<@ToxicFrog>
(oh wait. Sorry, hash collision on generational vs incremental)
21:30
<@McMartin>
(Once it's generational it is no longer classical mark and sweep, no. Both are 'tracing gcs')
21:30
< Rhamphoryncus>
(ooh I like brackets too! Maybe that's why I became a programmer)
21:30
<@McMartin>
(AIUI truly classical M&S isn't incremental either though)
21:31
<@Vornicus>
(pop)
21:31
<@Derakon>
(insert car and cadr references here)
21:31
< Tarinaky>
(Why're you talking in brackets?)
21:31
<@Vornicus>
I said pop. Stop that.
21:31
<@Derakon>
Hee.
21:31
<@McMartin>
RETURN TRUE
21:31
<@Derakon>
The entire conversation was notionally a parenthetical.
21:31
< Tarinaky>
Sounds like a very convoluted joke. I'll just pretend to laugh and leave again :/
21:32
< Rhamphoryncus>
fwiw, the reason why python can't switch to a pure tracing GC is that not all references are traceable and it uses refcounting to find them. When the tracing GC activates it counts up all the references it can find to the objects it tracks, then compares to the normal refcount, and if the normal refcount is higher that indicates an external root
21:33
< Rhamphoryncus>
Which is quite elegant from the point of view of being a bodge on the existing refcounting. Sucks if you want a better GC though
21:33
<@Derakon>
So the root problem, ah ha, is that there are roots that the Python GC doesn't know about.
21:33
<@ToxicFrog>
Wait
21:33
<@ToxicFrog>
External root?
21:33
<@McMartin>
The thing is, you generally don't *want* a pure tracing GC, because performing the trace annihilates your memory locality.
21:33
<@ToxicFrog>
How does this work?
21:34
<@Derakon>
(Memory locality: keeping important memory in your cache. Sweeping all of your program's memory set invalidates your cache and ruins performance for the actual code you're currently running)
21:34
< Rhamphoryncus>
ToxicFrog: By the CPython API if you want an object you just use Py_INCREF, then stash the pointer somewhere. Where you stash the pointer is completely unrestrained, so there's no way for a tracing GC to find it
21:35
<@ToxicFrog>
Oh.
21:35
< Rhamphoryncus>
It *might* be possible for a conservative GC to snoop /proc to find all allocated memory. Maybe.
21:35 * ToxicFrog has never worked with the Python C API, and the Lua one is very different
21:36 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
21:36
< Rhamphoryncus>
Yeah, it's unfortunately very old and hard to change
21:36
<@McMartin>
Rhamphoryncus: C lets you square a pointer's integer value and then dereference that. It's intrinsically untracable if you allow all of C.
21:36
< Rhamphoryncus>
McMartin: naw, that's undefined behaviour :P
21:36
<@McMartin>
Lua effectively sets up a "separate heap" that only it is allowed to manage.
21:37
< Rhamphoryncus>
but I believe you could stash a pointer in a file, then read it back later
21:37
<@McMartin>
intptr_t is a well-defined type~
21:38
< Rhamphoryncus>
Conceptually, it might be possible to design a new trace-friendly C API and incrementally change over, but nobody is motivated to do it. All the people that might be would rather rewrite everything from scratch *cough*hognose*cough*
21:38
< Rhamphoryncus>
oh sure, make me google to jog my memory :P
21:40
< Rhamphoryncus>
I've heard that conversion to and int and back was implementation defined (ie it may not work at all), and I suspect any manipulation while in int form is verboten. Not sure though, and I can't find a reference
21:43
< Rhamphoryncus>
this implies some of the context for my belief: http://www.archivum.info/comp.std.c/2006-10/00204/Re:-%5Bu%5Dintptr_t-optional,- intentional.html
21:46 * Derakon finds the page on Unladen Swallow's benchmarking, is amused at "Unladen Swallow 2009Q3 uses up to 930% less memory than the 2009Q2 release."
21:46
< Rhamphoryncus>
I'm not sure what the motivation is for storing a pointer in an int
21:48
<@McMartin>
To do pointer arithmetic on it without having to worry about the size of the object pointed to
21:48
< Tarinaky>
How can you use 930% less of something...
21:48
< Tarinaky>
:/
21:48 * Tarinaky begins to bleed out of his ears from trying to process that concept.
21:48
<@Derakon>
Another way of reading that is "The old version uses 930% as much memory as the new version does".
21:49
<@Derakon>
It's messy language, but easy enough to decipher.
21:49
< Rhamphoryncus>
McMartin: is that guaranteed to work?
21:49
<@Derakon>
I still prefer to use explicit multipliers, though, just so that people don't think that "100%" means "twice as much", as occasionally happens.
21:50
<@McMartin>
(char *)(((int_ptr_t)x) + 1) == ((char*)x) + 1 != (char *)(x+1)
21:50
<@McMartin>
Assuming char is 1 byte long
21:50
<@McMartin>
Well, and that x is not, itself, a char*
21:50
< Rhamphoryncus>
char is ALWAYS 1 byte
21:50
< Tarinaky>
Derakon: That's not right...
21:50
<@Derakon>
In fact, 'char' really should have been named 'byte'.
21:51
< Tarinaky>
930% less of something is -8.3 times the original quantity :/
21:51
< Rhamphoryncus>
Derakon: yeah, but byte may be 17 bits ;)
21:51
<@Derakon>
Tarinaky: read the comments on http://code.google.com/p/unladen-swallow/wiki/Release2009Q3
21:52
<@Derakon>
Rhamph: bah!
21:52
<@Derakon>
Are there any modern architectures with non-8-bit bytes?
21:53
< Rhamphoryncus>
McMartin: your example only demonstrates that it's easier to use a char* for pointer math
21:53
<@McMartin>
If it's not, actually, characters you're manipulating, this makes baby jesus cry
21:53
<@McMartin>
Also, sizeof(int_ptr_t) is a useful constant, as is sizeof(ptr_diff_t)
21:54
< Rhamphoryncus>
I like sizeof(size_t)
21:54
< Rhamphoryncus>
hey, I wonder if intptr_t can do function pointers
21:55
<@ToxicFrog>
Rhamphoryncus: 'man stdint.h', /intptr_t
21:55
<@McMartin>
It's just "an integer large enough to be able to cast a pointer to and from it without data loss", so yeah.
21:55
< Rhamphoryncus>
no entry :P
21:55
<@ToxicFrog>
Ok, install the rest of your man pages, then do that
21:55 * Rhamphoryncus thinks ubuntu keeps moving them
21:56
<@Derakon>
Anyway, an example of the use of datatype-agnostic pointer math: SQL databases. Each row is a fixed size in memory, so the program can iterate over rows using pointer arithmetic.
21:56
<@Vornicus>
Technically an array
21:57
<@Vornicus>
Of structs, if you insist.
21:57
<@Derakon>
Given that it's a database, I could easily see them not bothering to unserialize the binary blob after loading it off the disk.
21:58
< Rhamphoryncus>
" The following type designates a signed integer type with the property
21:58
< Rhamphoryncus>
that any valid pointer to void can be converted to this type, then con-
21:58
< Rhamphoryncus>
verted back to a pointer to void, and the result will compare equal to
21:58
< Rhamphoryncus>
the original pointer: intptr_t
21:58
< Rhamphoryncus>
"
21:58
<@Derakon>
They know where everything is, after all. Why incur the extra overhead?
21:58
< Rhamphoryncus>
So void *, which does NOT include function pointers
22:00 * Derakon ponders what to rename sebGui to.
22:00
<@Derakon>
This being the module that has a whole bunch of functions that are related only in that they (almost) all deal with the GUI.
22:00
<@Vornicus>
guiUtils?
22:01
<@TheWatcher>
guiSupport?
22:01
<@Derakon>
That works.
22:01
<@TheWatcher>
ohThankGodItsNotsebGUI...
22:01
<@Derakon>
I wouldn't mind calling it guiSupport if it were a suite of useful functions that other GUI modules used to avoid code duplication, but in fact it handles most of the GUI updates itself.
22:01
<@Derakon>
Pfft
22:01
<@McMartin>
iCantBelieveItsNotsebGUI
22:08
<@Derakon>
9 seb modules left!
22:08
<@Derakon>
Getting rid of seb.py is gonna be a trick though.
22:08
<@Derakon>
(It's the module that gets imported as "X" all over the place so that other modules can stuff global variables into it)
22:14
<@McMartin>
... as in, he's assigning to the modules?
22:14
<@Derakon>
Yes. For example, the connection to the Nanomover computer is created like so:
22:14
<@Derakon>
X.nano = H.get_threadsafe_server_object("nano",IP_OMX_NANO,7767)
22:15
<@Derakon>
So if you need to talk to nano (which only the sebM module ever does), then you import the seb module, probadbly as "X", and then access it via X.nano.
22:16
<@Derakon>
One of my longer-term plans is to change all those "attached to seb but only used by a single module" variables to locally-scoped variables instead. So if you need to talk to nano, you write your code in the sebM module. Which will probably be renamed by then.
22:17
<@McMartin>
This man is a walking argument for requiring licenses for programmers. =(
22:18
<@TheWatcher>
We agree about something else concerning computers too, it seems~
22:18
<@Derakon>
...unfortunately, the sebM module is referred to by name 280 times. :(
22:19
<@Derakon>
This seems implausible since there are 60 Python modules in this program.
22:19
<@McMartin>
Fully qualified names for all?
22:19
<@Derakon>
There aren't any cases to write a string containing "sebM" that isn't a reference to the module.
22:19
<@Derakon>
s/cases/reasons/
22:20
<@McMartin>
You've come this far and you're looking for reason?
22:20
<@Derakon>
As opposed to the notorious sebC.
22:20
<@Vornicus>
Right, but if you do import foo
22:20
<@Vornicus>
then you still have to say foo.bar if you want to talk about a thing in foo.
22:20
<@Derakon>
Oh, generally it's "import sebM as M" and then M.something.
22:20
<@Derakon>
I'm very thankful that Sebastian almost never does "import * from foo"
22:21
<@Vornicus>
But he uses "as" instead. All over the place.
22:21
<@Derakon>
Oh yes.
22:21
<@Derakon>
I guess he doesn't like typing the redundant "seb" any more than I do.
22:22
<@Derakon>
(Keep in mind the setting: it's incredibly common to see documentation for Numpy to suggest doing "import numpy as N". I assume that Sebastian picked up this practice from that)
22:24 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code
23:28 Derakon [Derakon@Nightstar-1ffd02e6.ucsf.edu] has quit [[NS] Quit: Leaving]
--- Log closed Sat May 15 00:00:03 2010
code logs -> 2010 -> Fri, 14 May 2010< code.20100513.log - code.20100515.log >