--- Log opened Thu Feb 24 00:00:29 2011
00:17 -!- grumpytoad [~niel@t1004.greatnet.de] has joined #go-nuts
00:20 -!- gid [~gid@220-253-146-76.VIC.netspace.net.au] has joined #go-nuts
00:20 -!- gid [~gid@220-253-146-76.VIC.netspace.net.au] has quit [Client Quit]
00:22 -!- tarrant [~tarrant@] has quit [Quit: Leaving...]
00:25 -!- gstrock [~gstrockbi@64-60-93-202.static-ip.telepacific.net] has quit
[Quit: Ex-Chat]
00:32 -!- Natch| [~natch@c-6dcde155.25-4-64736c10.cust.bredbandsbolaget.se] has
quit [Ping timeout: 272 seconds]
00:33 -!- Natch| [~natch@c-6dcde155.25-4-64736c10.cust.bredbandsbolaget.se] has
joined #go-nuts
00:40 -!- Scorchin [~Scorchin@host109-157-106-108.range109-157.btcentralplus.com]
has quit [Quit: Scorchin]
00:42 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts
00:46 < rl> Go is dangerous...  Now whenever I write C++ or Java at work I
keep forgetting semicolons.
00:51 -!- vsayer [~vivek@c-76-102-205-58.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
00:51 < Xenith> The obvious solution to that is to never write in C++ or
Java again.
00:52 -!- vsayer [~vivek@c-76-102-205-58.hsd1.ca.comcast.net] has joined #go-nuts
00:53 -!- nettok [~quassel@] has joined #go-nuts
00:54 < rl> If only I was fanatical enough that the programming language I
worked in was a higher priority than what I actually got to work on ;)
00:55 -!- deltaphc [delta@cpe-76-173-127-142.socal.res.rr.com] has joined #go-nuts
00:56 -!- vsayer [~vivek@c-76-102-205-58.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
00:57 -!- kingfishr_ [~kingfishr@c-98-207-87-183.hsd1.ca.comcast.net] has quit
[Ping timeout: 240 seconds]
00:57 -!- vsayer [~vivek@c-76-102-205-58.hsd1.ca.comcast.net] has joined #go-nuts
01:07 -!- tav [~tav@] has quit [Read error: Connection reset by peer]
01:07 -!- tarrant [~tarrant@]
has joined #go-nuts
01:11 -!- tav [~tav@] has joined #go-nuts
01:13 -!- saturnfive [~saturnfiv@] has joined #go-nuts
01:18 -!- aconran_ [~aconran-o@] has quit [Remote host closed the
01:26 -!- coldturnip [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has quit [Read
error: Connection reset by peer]
01:27 -!- coldturnip [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has joined
01:29 -!- digi9 [~digi9@unaffiliated/digi9] has joined #go-nuts
01:30 < digi9> I'd like to build an arm binary, but I'm not sure what the
proper way to build the arm compilers on amd64 would be.  I see mention of
make-arm.sh but that seems to be no more
01:31 -!- aho [~nya@fuld-590c7bfa.pool.mediaWays.net] has quit [Quit:
01:43 -!- 14WAAPRS3 [Wiz@h29.117.232.68.ip.windstream.net] has quit [Ping timeout:
260 seconds]
01:44 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has quit
[Ping timeout: 260 seconds]
01:44 -!- Piggie [~Piggie@] has quit []
01:44 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has joined
01:45 -!- ivan` [~ivan@unaffiliated/ivan/x-000001] has quit [Ping timeout: 264
01:45 -!- binarypie [~binarypie@adsl-99-37-227-229.dsl.pltn13.sbcglobal.net] has
quit [Ping timeout: 276 seconds]
01:50 -!- ivan` [~ivan@unaffiliated/ivan/x-000001] has joined #go-nuts
01:51 -!- `Wiz126 [~Wiz@h29.117.232.68.ip.windstream.net] has joined #go-nuts
01:51 -!- Wiz126 [Wiz@h29.117.232.68.ip.windstream.net] has quit [Disconnected by
01:51 -!- `Wiz126 [~Wiz@h29.117.232.68.ip.windstream.net] has quit [Client Quit]
01:51 -!- Wiz126 [Wiz@h29.117.232.68.ip.windstream.net] has joined #go-nuts
02:04 -!- Glasswalker
[~Glasswalk@CPE002369b3cd1a-CM00222d53f155.cpe.net.cable.rogers.com] has joined
02:05 -!- bobc [~bobc@cpe-98-155-23-151.san.res.rr.com] has joined #go-nuts
02:08 < Glasswalker> Hey, completely new to go, trying some basic
concurrency.  I have this simple program (trying to spawn 10 concurrent counter
threads to count in parallel) it works as expected, but throws an error at the end
because all goroutines are sleeping.
02:08 < Glasswalker> http://pastie.org/1600557
02:08 < Glasswalker> So how do I detect when the goroutines are cleanly
exited.  (I kind of assumed, falsely, that the for would detect when the channel
was finished)
02:08 < Glasswalker> but I guess it makes sense that it doesn't it's just a
stream basicallyl.
02:09 < Glasswalker> Anyway, what am I missing?  (it should be noted this is
literally my first go program lol)
02:10 < rl> How would it know that a channel has "finished" if you don't
tell it?
02:10 -!- amacleod [~amacleod@pool-96-252-93-11.bstnma.fios.verizon.net] has
joined #go-nuts
02:10 < Namegduf> Glasswalker: You have them send a message back.
02:11 < Glasswalker> so I would need the routine to send two things back,
and then track how many of the threads have completed?
02:11 < rl> right
02:11 < Glasswalker> (one would be the channel for counting, the other just
a random boolean flag for finished)
02:11 < Namegduf> Or take the thing sent back as meaning it's complete.
02:12 < Namegduf> You could close() the channel.
02:12 < rl> There's only one channel...
02:12 < rl> If you had 10 different channels though you could close them
02:12 < Glasswalker> hmm
02:12 < Namegduf> In that case, yes.  You need some way for the program to
know you aren't sending any more.
02:12 < rl> But that doesn't sound like a great idea
02:12 < Glasswalker> ok so I realize my example is simple, but what if the
main routine didn't know how many threads were counting
02:13 < rl> Someone has to start the threads; someone should know
02:13 < Glasswalker> fair enough
02:13 < Glasswalker> hmm
02:13 < Namegduf> Then you need to implement some way to tell it to return.
02:13 -!- skelterjohn [~jasmuth@c-68-45-238-234.hsd1.nj.comcast.net] has joined
02:13 < Glasswalker> can I aggregate the channels somehow?
02:13 < Namegduf> That kinda design issue is your job.  :P
02:13 < Glasswalker> so I could have individual channels for each thread
02:14 < Glasswalker> and have them aggregate into one, which the output
routine uses?
02:14 < rl> You could write a goroutine which iterated over each channel,
read it, and wrote the output to a single channel
02:14 < skelterjohn> you'd want to use select, rather than iterating
02:14 < skelterjohn> so that you don't get blocked by one channel
02:14 < skelterjohn> oh but
02:14 < rl> Hm how would you use select?
02:14 < Glasswalker> ok, I'll look up select in the docs.
02:14 < skelterjohn> can't select on an arbitrary set of chans
02:14 < Glasswalker> oh
02:14 < Glasswalker> ok lol
02:14 < skelterjohn> think think
02:15 < rl> I'm wondering if you could hack it
02:15 < skelterjohn> oh no
02:15 < Glasswalker> yeah your right, wouldn't want to block on one channel
or the other
02:15 < skelterjohn> you have a goroutine for each in-channel
02:15 < skelterjohn> that reads a value and writes to the single out channel
02:15 < skelterjohn> nothing hacky needed
02:15 < rl> Well then you're back at the case he has now lol
02:15 < rl> His original threads might as well just write to the same
02:15 < skelterjohn> oh
02:15 < skelterjohn> i missed everything before "can I aggregate the
channels somehow?"
02:16 < skelterjohn> but...
02:16 < Glasswalker> see I would want the aggregator to somehow know once
all the individual channels are closed
02:16 < rl> Yea I think he wanted to split them up so they could be
individually closed when they were done
02:16 < skelterjohn> what i said will work, who cares how it's implemented?
02:16 < Glasswalker> then I could have those goroutines close the channel
when done
02:16 < skelterjohn> rl - still possible
02:16 < skelterjohn> oh i see, Glasswalker
02:16 < Glasswalker> then the aggregator would detect once the final one is
closed and close the aggregated channel
02:16 < Glasswalker> so the main routine listening to the aggregated channel
would know to stop listening
02:17 < skelterjohn> your function that adds to the aggregation also counts
how many are added
02:17 < rl> can you use select on a slice?
02:17 < skelterjohn> then the goroutines that forward messages, when they
finish a chan they send something over a special channel
02:17 < rl> like on ch[i]
02:17 < Glasswalker> (I might be going about this all wrong, just trying to
get my head around Go's concurrency model, and some go programming concepts) lol
02:17 < skelterjohn> and when enough things come on that special channel,
close the out-chan
02:17 < rl> Then you could just have a loop which tries to select on a
channel, with the default option being to continue the for loop
02:17 < rl> Non-blocking reads
02:18 < Glasswalker> slice being something like a linked list right?
02:18 < Glasswalker> (or in .net speak, a collection)
02:18 < rl> no, like an array
02:18 < skelterjohn> rl - then you'd be busy-waiting if there was nothing
02:18 < rl> skelterjohn: good point
02:18 < skelterjohn> incoming
02:19 < skelterjohn> i think i have a good solution - gimme a minute to put
it togethr
02:19 < Glasswalker> thanks for your help guys
02:19 < Glasswalker> I realize this is mostly just a thought experiment
02:19 < rl> Glasswalker: a slice is a view of an array, actually
02:19 < Glasswalker> but this kind of thing helps me get my head around a
new language, just dive in and try some arbitrary problems
02:20 < Glasswalker> Hmm...  perhaps I should check the docs on slices
02:20 < Glasswalker> lol
02:20 < rl> read the language spec
02:20 < rl> it's not bad, as far as language specs go
02:20 < rl> (you don't have to read it all now, but it's a good reference)
02:22 < Glasswalker> ok, I think I understand slices to a point
02:23 < skelterjohn> here's one thing - how do you know if the aggregated
channel is done?  do you give it all the input channels before anything begins?
02:23 < skelterjohn> or can new ones be added at any time?
02:24 < |Craig|> give it a chan chan when you make it, so you can send chans
to it
02:25 < skelterjohn> yes, i intend to :) but the issue is
02:25 < skelterjohn> if it has two channels, and they both finish, and then
a third one is added
02:25 < Glasswalker> oh I see your point
02:25 < |Craig|> don't close unless chan chan is closed
02:25 < skelterjohn> if the aggregator took the first two finishing to mean
everything was over, then it's too late for the third
02:25 < Glasswalker> I was thinking they could be arbitrarily added
02:25 < skelterjohn> ah, good idea
02:25 < Glasswalker> oh
02:25 < skelterjohn> |Craig|'s got it
02:25 < Glasswalker> yeah that works
02:26 * Glasswalker is still processing to get my head around the concept
02:26 < Glasswalker> ok so a chan chan, would be a channel, of type channel.
(send channels into the channel)
02:26 < skelterjohn> chan chan int
02:26 < Glasswalker> so would the agregator have an array of channels which
it fetches the incoming channels from
02:27 < skelterjohn> it's a channel that sends chan int
02:27 < skelterjohn> yes
02:27 < Glasswalker> and then it iterates over the array internally
02:27 < Glasswalker> but...  what would keep it from blocking
02:27 < Glasswalker> say one of the "feeder" channels blocks on something
02:27 < Glasswalker> would it block when the iteration hits that particular
02:27 < skelterjohn> almost done
02:28 < skelterjohn> when i have code to point at it will be easier to talk
02:28 < Glasswalker> ok cool
02:28 < |Craig|> skelterjohn: you spawing a go routine for each input
02:28 < skelterjohn> yes
02:29 < |Craig|> I was tying to think of a solution to avoid that, but
didn't see one
02:29 < Namegduf> There is another option.
02:29 < Namegduf> Run the thing responding to the counter events outside of
02:30 < Namegduf> Have main listen on a second channel for quit messages up
to the limit of spawned goroutines; you can keep a counter.
02:30 < Namegduf> Not counting that thing handling the counter events.
02:30 < Namegduf> Have each source send one message to quit when they quit.
02:30 < Namegduf> main returns when all sources return.
02:30 < Glasswalker> Does Go support dynamic arrays?
02:31 < Namegduf> Use slices.
02:31 < |Craig|> the issue is you have lots of inputs.  If you block, then
you need a routine for each.  If they don't block, you busy loop checking them.
02:31 < Glasswalker> as in can I have a list of elements, which I can add
and remove elements to arbitrarily?
02:31 < Glasswalker> (similar in functionality to .net Collections)
02:31 < Namegduf> Use a slice.
02:31 < |Craig|> Glasswalker: slices have append which will do whats
expected of dynamic array type things
02:31 < skelterjohn> Glasswalker: I recommend looking at the tutorials :)
02:31 < Glasswalker> but don't slices use an underlying array for storage
02:31 < Glasswalker> which has to have a static size definition?
02:31 < Glasswalker> or did I misunderstand that in the spec?
02:31 < |Craig|> Glasswalker: yes
02:32 < Namegduf> No.
02:32 < Namegduf> Use make()
02:32 < |Craig|> slices allocate a new array when the underlying array gets
02:32 < Namegduf> Which can allocate arrays of size determined at runtime.
02:32 < Namegduf> You can also use append(), which behaves as the above.
02:32 < Glasswalker> oh
02:32 < Glasswalker> interesting
02:32 < Glasswalker> :)
02:32 < Namegduf> ("slices" are data, they don't do anything, and you don't
essentially have to use append())
02:32 < Glasswalker> what about removal?
02:32 < Namegduf> (They have a static size if you don't.)
02:33 < |Craig|> append is kinda strange though.  It returns a new slice
which may or may not be of the origional array
02:33 < Namegduf> You can set the slice to itself minus the last element.
02:33 < Glasswalker> what if I want to remove an element in the middle
02:33 < Namegduf> Then you are using the wrong data structure.
02:33 < Glasswalker> lol
02:33 < |Craig|> swap the last one on top of it, then remove the end
02:33 < Namegduf> Oh, that often works.
02:34 < Namegduf> If order isn't relevant that works.
02:34 < |Craig|> as long as order does not mater
02:34 < Glasswalker> right
02:34 < Glasswalker> so I'm thinking...  in the agregator
02:34 < Namegduf> There is no way to implement it caring about order
efficiently with anything that behaves like an array.
02:34 < Glasswalker> have a slice filled with the various counter channels
02:34 < Glasswalker> iterate through them
02:34 < Glasswalker> if one closes
02:34 < Glasswalker> then remove it from the slice
02:34 < Glasswalker> and continue
02:34 < Glasswalker> if the length of the slice falls to 0
02:35 < Glasswalker> then close the aggregated channel
02:35 < Glasswalker> that would assume of course that it starts with at
least one counter
02:35 < |Craig|> Glasswalker: you get a busy wait when nothing is comming in
that way
02:35 < Namegduf> You can't listen on all counters in a slice without a busy
02:35 < Glasswalker> and that you never intend to add more after your last
one is done
02:35 < Namegduf> Which is Bad]
02:35 < Namegduf> *Bad
02:35 < skelterjohn> http://pastebin.com/2wJjmqsn
02:36 < Namegduf> The way my program does it is to have an arbitrary number
of separate service goroutines
02:36 < Namegduf> Which can send quit messages when they themselves are
ready to quit
02:36 < Namegduf> And main returns when they've all said they're good to
02:36 < Namegduf> But none ever terminate on their own, they keep listening
to any incoming requests from others.
02:37 < Namegduf> You CAN use a counter in main for that.
02:37 -!- werdan7 [~w7@freenode/staff/wikimedia.werdan7] has joined #go-nuts
02:41 < skelterjohn> no high fives?  :\
02:41 < Glasswalker> lol still reading code lol
02:44 < Glasswalker> That actually looks like it will do the trick.  A bit
more complicated than I had hoped, but I think I can get my head around it ;)
02:44 < Glasswalker> I'm very used to using collections in .net, so that's
going to take some getting used to
02:45 < skelterjohn> it's mostly complicated by the fact that you want the
aggregated channel to close when the incoming channels are all done
02:46 < skelterjohn> and the fact that this isn't a super well-defined
03:19 -!- yiyus [1242712427@je.je.je] has quit [Remote host closed the connection]
03:27 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Ping
timeout: 240 seconds]
03:31 -!- digi9 [~digi9@unaffiliated/digi9] has left #go-nuts []
03:35 -!- marekweb [~marek@bas1-montreal48-1176173369.dsl.bell.ca] has quit [Ping
timeout: 272 seconds]
03:45 -!- keithcascio_ [~keithcasc@nat/google/x-jazdvhhcjnyqelal] has quit [Quit:
03:50 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #go-nuts
03:53 -!- bobc [~bobc@cpe-98-155-23-151.san.res.rr.com] has quit [Quit: Leaving]
04:05 -!- coldturnip1 [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has joined
04:07 -!- coldturnip [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has quit [Ping
timeout: 264 seconds]
04:13 -!- Viriix [~joseph@c-67-169-172-251.hsd1.ca.comcast.net] has joined
04:14 -!- Eridius [~kevin@unaffiliated/eridius] has quit [Ping timeout: 250
04:14 -!- tensai_cirno [~cirno@] has quit [Ping timeout: 260 seconds]
04:19 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 276 seconds]
04:28 -!- nettok [~quassel@] has quit [Ping timeout: 264 seconds]
04:42 -!- Viriix [~joseph@c-67-169-172-251.hsd1.ca.comcast.net] has quit [Quit:
05:01 < plexdev> http://is.gd/YRkaLs by [Dave Cheney] in go/src/ -- build:
remove unused nacl conditional from make.bash
05:18 -!- amacleod [~amacleod@pool-96-252-93-11.bstnma.fios.verizon.net] has quit
[Quit: Bye Bye]
05:18 -!- [muttox] [~dheppell@] has joined
05:18 < plexdev> http://is.gd/w5A3VJ by [Alex Brainman] in 4 subdirs of
go/src/ -- 8l/6l: new -Hwindowsgui flag allows to build windows gui pe
05:19 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has joined #go-nuts
05:19 -!- tensai_cirno [~cirno@] has joined #go-nuts
05:26 -!- niemeyer [~niemeyer@189-10-154-99.pltce701.dsl.brasiltelecom.net.br] has
quit [Ping timeout: 272 seconds]
05:42 -!- fabled [~fabled@mail.fi.jw.org] has joined #go-nuts
05:58 -!- tensai_cirno [~cirno@] has quit [Quit: Leaving]
06:08 -!- deltaphc [delta@cpe-76-173-127-142.socal.res.rr.com] has quit [Ping
timeout: 240 seconds]
06:09 -!- ExtraSpice [XtraSpice@78-62-101-194.static.zebra.lt] has joined #go-nuts
06:09 -!- [muttox] [~dheppell@] has quit [Quit:
06:10 -!- deltaphc [delta@cpe-76-173-127-142.socal.res.rr.com] has joined #go-nuts
06:12 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
06:16 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has quit [Remote host closed
the connection]
06:16 -!- kanru` [~kanru@kanru-1-pt.tunnel.tserv15.lax1.ipv6.he.net] has joined
06:21 -!- tarrant [~tarrant@]
has quit [Quit: Leaving...]
06:22 -!- kanru` [~kanru@kanru-1-pt.tunnel.tserv15.lax1.ipv6.he.net] has quit
[Quit: rcirc on GNU Emacs 23.2.1]
07:05 -!- JusticeFries_
[~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts
07:08 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net]
has quit [Ping timeout: 276 seconds]
07:09 -!- JusticeFries_
[~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Ping
timeout: 240 seconds]
07:13 -!- kanru [~kanru@kanru-1-pt.tunnel.tserv15.lax1.ipv6.he.net] has quit
[Quit: WeeChat 0.3.2]
07:17 -!- belkiss [~belkiss@drn13-1-78-235-168-105.fbx.proxad.net] has joined
07:18 -!- belkiss [~belkiss@drn13-1-78-235-168-105.fbx.proxad.net] has quit
[Client Quit]
07:19 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Quit:
07:19 -!- adu [~ajr@softbank220043138128.bbtec.net] has joined #go-nuts
07:27 -!- maattd [~maattd@esc31-1-78-245-92-71.fbx.proxad.net] has joined #go-nuts
07:33 -!- bortzmeyer [~bortzmeye@batilda.nic.fr] has joined #go-nuts
07:48 -!- ios_ [~ios@] has joined #go-nuts
07:52 -!- maattd [~maattd@esc31-1-78-245-92-71.fbx.proxad.net] has quit [Remote
host closed the connection]
08:02 -!- Guest90899 [~Fish@exo3753.pck.nerim.net] has quit [Quit: So Long, and
Thanks for All the Fish]
08:02 -!- Fish [~Fish@exo3753.pck.nerim.net] has joined #go-nuts
08:10 -!- piranha [~piranha@5ED42E59.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts
08:12 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has quit [Ping
timeout: 260 seconds]
08:14 -!- Glasswalker
[~Glasswalk@CPE002369b3cd1a-CM00222d53f155.cpe.net.cable.rogers.com] has quit []
08:21 -!- skejoe [~skejoe@] has joined #go-nuts
08:42 -!- unofficialmvp [~dev@94-62-164-227.b.ipv4ilink.net] has joined #go-nuts
08:43 < wrtp> nice slip from rob on golang-dev: "I'd rather shelve this
discussion at least until the App Engine stuff is out."
08:43 < wrtp> app engine support for go would be great!
08:44 < str1ngs> o'rly
08:44 -!- unofficialmvp [~dev@94-62-164-227.b.ipv4ilink.net] has left #go-nuts []
08:45 < wrtp> well, maybe.  that's all the info i've seen...
08:45 < str1ngs> seems logical imo
08:48 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|]
09:05 -!- yiyus [1242712427@server1.bouncer4you.de] has joined #go-nuts
09:11 -!- Innominate [~sirrobin@cpe-076-182-074-143.nc.res.rr.com] has quit [Ping
timeout: 272 seconds]
09:12 -!- Innominate [~sirrobin@cpe-076-182-074-143.nc.res.rr.com] has joined
09:13 -!- andreas_ [~andreas@mivacukor.lha.sgsnet.se] has joined #go-nuts
09:13 -!- andreas_ [~andreas@mivacukor.lha.sgsnet.se] has quit [Client Quit]
09:14 -!- visof [~visof@] has joined #go-nuts
09:14 -!- visof [~visof@] has quit [Changing host]
09:14 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts
09:17 -!- Bagarn [~andreas@mivacukor.lha.sgsnet.se] has joined #go-nuts
09:17 -!- tensorpudding [~user@] has quit [Read error: Connection
reset by peer]
09:18 -!- napsy [~luka@] has joined #go-nuts
09:29 < fzzbt> how do you convert interface{} to []byte?
09:29 < Namegduf> You can't "convert" an interface value to anything.
09:30 < fzzbt> ehm
09:30 < Namegduf> It's an arbitrary type's value plus a pointer to an
09:30 < Namegduf> It's not equivalent to anything.
09:30 < Namegduf> At least not consistently so.
09:30 < Namegduf> Do you mean "If I have an interface{} which contains a
[]byte, how do I get the []byte out?"
09:31 < fzzbt> yes
09:31 < Namegduf> Okay.  Bearing in mind that the compiler cannot check this
for you, so it's up to you to design it such that you know the arbitrary type
inside is what you expect it to be:
09:31 < fzzbt> i have "data ...interface{}" and i want to get data[0]
09:31 < fzzbt> which should be []byte
09:31 < Namegduf> var v []byte := int.([]byte)
09:32 < Namegduf> Will set v to that value, and will panic if it isn't a
09:32 < Namegduf> Er, =, not :=
09:32 < Namegduf> v, ok := int.([]byte) is the same but sets ok to false and
v to the zero value (nil, for a slice) if it is not a []byte, instead of panicing.
09:33 < Namegduf> This is profoundly unhelpful if you don't intend to
actually do error checks on ok.
09:33 < fzzbt> what exactly does int.([]byte) mean?  int has a field
([]byte) ???
09:33 < Namegduf> No.
09:33 < Namegduf> It's a type assertion.
09:33 < Namegduf> It is its own thing, not a part of any other syntax.
09:33 < fzzbt> oh ok
09:34 < Namegduf> It asserts that int contains a []byte and gets it for you.
09:34 < Namegduf> In this case, though, you are aware that you can have
...[]byte, right?
09:34 < Namegduf> Just in case that would work better.
09:34 < fzzbt> im pretty sure it'll be []byte
09:36 < Namegduf> I guess my point is that if you're ever relying on an
interface{} to be a specific type, you're working without the type system's safety
so it's your job to get it right, not that you can't get it right.
09:36 < fzzbt> im relying for the user to know what he is doing
09:37 < Namegduf> Are you sure you can't use a ...[]byte?
09:38 < Namegduf> Exposing type unsafe stuff to another package sounds like
a bad thing in a design...
09:39 < fzzbt> im writing template formatters and the template doc says they
must have signature "func(wr io.Writer, formatter string, data ...interface{})"
09:39 < fzzbt> ...[]byte does not seem to be okay
09:39 < Namegduf> That's true, and one reason you might need to, but you
should probably handle things other than []byte.
09:40 < fzzbt> hmm, but now that i looked through the other example
formatters, i can see that they actually do some type checking so maybe i should
09:41 -!- cenuij [~cenuij@] has joined #go-nuts
09:41 -!- cenuij [~cenuij@] has quit [Changing host]
09:41 -!- cenuij [~cenuij@base/student/cenuij] has joined #go-nuts
10:03 -!- rlab [~Miranda@] has joined #go-nuts
10:10 -!- kanru [~kanru@kanru-1-pt.tunnel.tserv15.lax1.ipv6.he.net] has joined
10:12 -!- unofficialmvp1 [~dev@94-62-164-227.b.ipv4ilink.net] has joined #go-nuts
10:13 -!- unofficialmvp1 [~dev@94-62-164-227.b.ipv4ilink.net] has left #go-nuts []
10:13 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-179-102.clienti.tiscali.it] has
joined #go-nuts
10:14 < wrtp> fzzbt: you need to do the type checking
10:15 < wrtp> otherwise you can make the program crash by spelling a field
name wrong in a template
10:16 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has joined #go-nuts
10:20 -!- saturnfive [~saturnfiv@] has quit [Read error: Connection
reset by peer]
10:21 -!- shvntr [~shvntr@] has joined #go-nuts
10:32 -!- unofficialmvp [~dev@94-62-164-227.b.ipv4ilink.net] has joined #go-nuts
10:32 -!- unofficialmvp [~dev@94-62-164-227.b.ipv4ilink.net] has left #go-nuts []
10:41 -!- coldturnip [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has joined
10:42 -!- coldturnip1 [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has quit [Ping
timeout: 276 seconds]
10:44 -!- sauerbraten [~sauerbrat@] has joined #go-nuts
10:52 -!- unofficialmvp1 [~dev@94-62-164-227.b.ipv4ilink.net] has joined #go-nuts
10:52 -!- unofficialmvp1 [~dev@94-62-164-227.b.ipv4ilink.net] has left #go-nuts []
11:05 -!- coldturnip1 [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has joined
11:05 -!- coldturnip [~COLDTURNI@118-166-68-6.dynamic.hinet.net] has quit [Ping
timeout: 240 seconds]
11:14 -!- kanru [~kanru@kanru-1-pt.tunnel.tserv15.lax1.ipv6.he.net] has quit [Read
error: Operation timed out]
11:15 -!- kanru [~kanru@kanru-1-pt.tunnel.tserv15.lax1.ipv6.he.net] has joined
11:23 -!- neshaug [~oyvind@] has quit [Ping timeout: 272 seconds]
11:46 -!- cenuij [~cenuij@base/student/cenuij] has quit [Remote host closed the
11:47 -!- adu [~ajr@softbank220043138128.bbtec.net] has quit [Quit: adu]
11:48 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has quit [Remote host
closed the connection]
11:49 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has joined #go-nuts
11:51 -!- artefon [~thiagon@] has joined #go-nuts
11:52 -!- rlab_ [~Miranda@] has joined #go-nuts
11:54 -!- rlab [~Miranda@] has quit [Ping timeout: 260 seconds]
11:56 -!- saturnfive [~saturnfiv@] has joined #go-nuts
11:56 -!- saturnfive [~saturnfiv@] has left #go-nuts []
12:05 -!- ios_ [~ios@] has quit [Quit: Leaving]
12:25 -!- niemeyer [~niemeyer@189-10-154-99.pltce701.dsl.brasiltelecom.net.br] has
joined #go-nuts
12:39 -!- anticw [~anticw@c-67-169-68-180.hsd1.ca.comcast.net] has quit [Ping
timeout: 240 seconds]
12:41 -!- anticw [~anticw@c-67-169-68-180.hsd1.ca.comcast.net] has joined #go-nuts
12:48 * wrtp hates it when you write a lovely bit of code, then think about it and
realise that the whole thing was built on an invalid assumption so it's all
12:51 < Namegduf> Me too.
12:52 < Namegduf> I wrote one compare-and-swap "lockfree" writes into my
data structure, then realised that in order to correctly invoke hooks on changes
in the right order, mutexing its usage was still needed and it was a waste of
12:53 < wrtp> in this case, i've been layering timeouts onto an
io.ReadWriter.  only to realise that it's not possible, in general.
12:54 < Namegduf> Ah.
12:54 < wrtp> but i think i can salvage something, actually...
12:54 < Namegduf> I have a very weird Writer implementation which is
guaranteed to never block for more than a very short amount of time used to
deliver messages between untrusted connections.
12:55 < Namegduf> If it can't write fast enough it shoves it into a buffer
and returns.
12:55 < Namegduf> (Spawning another goroutine if it doesn't already exist to
deal with said buffer)
12:56 < wrtp> yeah, that's one way of doing it, but it's not good in general
(if a write times out, you don't expect it to actually complete some seconds after
it "timed out"...)
12:57 < Namegduf> It also always returns success.  :P
12:57 < Namegduf> (Well, unless the underlying thing being written to is
dead from another error)
12:58 < wrtp> it's always the edge cases that get ya
12:59 < Namegduf> The real issue is that you can't do that with anything but
a net.Conn varient.
12:59 < Namegduf> Maybe you could define a ReadTimeout interface?
12:59 < niemeyer> Hey there
13:00 < niemeyer> Namegduf: I also thought about a similar data structure
some time ago, but ended up avoiding it.  The issue is that there's an underlying
assumption that the reader can keep up with the writer
13:00 < niemeyer> Namegduf: If that assumption fails, it's a designed leak
13:00 < niemeyer> Namegduf: If the assumption succeeds, OTOH, you just need
plain buffering
13:01 < Namegduf> niemeyer: The primary issue is that copying to thousands
of instances of buffers is actually quite expensive
13:02 < Namegduf> So when clients are not lagging it wishes to avoid them.
13:02 < wrtp> Namegduf: i'm implementing net.Conn
13:02 < wrtp> NewConn(rw io.ReadWriter, local, remote net.Addr) net.Conn {
13:03 < wrtp> similar to what net.Pipe does, but with working timeouts
13:03 < Namegduf> niemeyer: I solve that assumption by dropping connections
whose buffers overflow.
13:03 < Namegduf> Nasty?  Yes.  Avoidable?  Not really.
13:03 < Namegduf> There's an alternative available for actually doing
blocking I/O in a fancy way
13:03 < niemeyer> Namegduf: Ah, well, if you have a concept of buffer
overflow then you're using a fixed buffer already, ok
13:03 < Namegduf> Yeah.
13:04 < Namegduf> Well, I might dynamically grow/shrink it at some point
13:04 < Namegduf> But quite probably not, the blocking I/O's usage lets it
be avoided.
13:07 < Namegduf> But it will have an upper limit to deal with that issue.
13:08 < wrtp> ok, i've got a question for you
13:09 < Namegduf> The central issue is that one connection needs to send
stuff to a large number of other connections without letting Bad People block
other people.
13:09 < wrtp> which do you think is the most acceptable behaviour for a
timing out reader:
13:09 < wrtp> discard the data if the read times out?
13:09 < wrtp> or return the old data on the next read?
13:11 < wrtp> the problem with the second approach is that a) it breaks the
one-read -> one-read-result association and b) you have to copy all the data
13:11 < wrtp> i think the first approach will break more things though
13:13 < Electro^> I need some help understanding a API, and specifically
13:13 < Electro^> given this function:
13:13 < Electro^>
13:13 < Electro^> how would i use that to send a command to the database?
we've tried for a while but cannot get it to work
13:14 < wrtp> it's badly documented
13:14 < Electro^> returnVal, err := mongo.RunCommand(conn, dBCollection,
map[string]interface{}{"dropDatabase" : cmd})
13:14 < Electro^> is what we have now, but it wont work
13:15 < wrtp> they should use a named interface type, not interface{}
13:15 < wrtp> or else document specifically what types are acceptable
13:16 < Electro^> given shell access to the DB i'll type db.dropDatabase()
for the desired effect
13:16 < Electro^> but you dont have an answer for this?  guess i
13:16 < Electro^> but you dont have an answer for this?  guess i'll mail the
developer then
13:16 < wrtp> read the source code
13:17 < Electro^> i'm a go newb, but ill try
13:17 < Electro^> thanks
13:17 < fzzbt> Electro^: you could maybe try another more popular go mongo
implementation eg.  https://github.com/mikejs/gomongo ?
13:18 < Electro^> we tried that first but found very little documentation at
13:19 < Electro^> but our chief technical manager here suggested we move
back to that so perhaps we should
13:25 < niemeyer> Electro^: Hi :-)
13:26 < wrtp> Electro^: why don't you try wrapping a logger around the
connection with NewLoggerConn and see what gets logged?
13:26 < niemeyer> Electro^: Proposal is still up
13:27 < Electro^> wrtp: that i have no idea how to do, but at this time it
seems easier to change to Mikejs.  More people seem to know that
13:28 < Electro^> niemeyer: hey there!
13:29 < Electro^> niemeyer: i talked to our superiors, and from what i
gather its incombability with licenses thats the problem
13:29 < niemeyer> Electro^: What's the problem with simplified BSD?
13:29 < Electro^> at this moment its an open project, but in a few weeks it
will turn into a commersial product and the lincesing stuff havent been decided
13:29 < Namegduf> Your superiors do not understand software licencing.  :P
13:30 < Namegduf> BSD is compatible with commercial usage
13:30 < Electro^> niemeyer: I dont know really, but when i said BSD they
said it might work but was probably more work than it was work
13:30 < Namegduf> Well, closed-source usage.
13:30 -!- foocraft [~dsc@dyn-86-36-42-96.wv.qatar.cmu.edu] has quit [Ping timeout:
240 seconds]
13:30 < Namegduf> There's not much/any significant work involved with BSD.
13:30 < Electro^> As i understand it we use GPL and mixing them isnt a good
13:30 < niemeyer> Electro^: You're currently using an apache licensed
software..  simplified BSD is more liberal than that
13:30 < Electro^> I, personally, have no idea
13:30 < Namegduf> Mixing them is perfectly fine
13:31 < Namegduf> BSD + GPL -> GPL
13:31 < niemeyer> Electro^: It can tell..  but whoever is making decisions
there should stop and sort this out
13:31 < Namegduf> The GPL meets all the terms of the BSD as well as imposing
its own much stricter ones, so they just merge.
13:31 < Namegduf> Well, it just takes the GPL.
13:32 < Namegduf> The exception is the old four clause BSD, which is
relatively rare now, I think.
13:32 < Electro^> well you obviously know more about this than i do
13:32 < niemeyer> Namegduf: Strictly speaking, it doesn't *take* it..  it
just doesn't conflict with it
13:33 < Namegduf> niemeyer: I meant the resulting project takes on the GPL
13:33 < niemeyer> Namegduf: Like most licenses, the BSD license text is
supposed to stay around
13:34 < niemeyer> Namegduf: Otherwise it's public domain
13:34 * exch really doesnt like all this lawyery nonsense
13:34 < niemeyer> Namegduf: But people are free to license their attached
work in any way they please
13:34 < niemeyer> and source code doesn't have to be available
13:34 < exch> Unfortunately just saying "this is public domain" doesnt
really go in many countries
13:35 < niemeyer> exch: I wish it was simpler, but I understand the need for
13:36 < Namegduf> CC-Zero is how I'd declare it.
13:36 < Namegduf> "Public Domain or equivalent licence if Public Domain is
not legal wherever you are"
13:37 < exch> I release most of my stuff under a 1-clause BSD license
nowadays.  I haven't really found anything more liberal than that unfortunately
13:37 < niemeyer> exch: "You are free to use it.  Enjoy." ? :-)
13:38 < exch> somethig along thpose lines, yea :) But with a disclaimer for
potential damages included.  You never know :p
13:38 < exch> basically 'it's free, but use with caution - enjoy!'
13:40 < exch> actually, I might just get rid of that 1 clause as well
13:40 < exch> 'Redistributions of source code must retain the above
copyright notice, this list of conditions and the following disclaimer.
13:40 < Namegduf> http://creativecommons.org/publicdomain/zero/1.0/
13:40 < exch> that really serves no purpose, other than to stroke my ego
13:40 < Namegduf> ^ The most liberal licence.
13:40 < Namegduf> Public Domain but they take care of the legal issues
involved in it not existing everywhere, basically.
13:41 < exch> interesting
13:41 < exch> is that guaranteed to hold up everywhere?
13:41 < Namegduf> I don't know about guaranteed, but Creative Commons is
fairly major.
13:42 < Namegduf> The legal text is linked to at the bottom.
13:42 < niemeyer> Namegduf: Nice
13:43 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has joined #go-nuts
13:43 < Namegduf> I favour GPL myself, mostly, but if I wanted to not use
copyleft I use that.
13:43 < Namegduf> That said I'm thinking programms, not libraries.
13:43 < Namegduf> GPL libraries are kinda irritating
13:43 -!- shvntr [~shvntr@] has quit [Ping timeout: 264 seconds]
13:45 < wrtp> i've put out most stuff as GPL - if anyone wants a more
liberal license, i'll do it for a pint...
13:45 < Namegduf> Mostly because I tend to think "Use my code, but give back
in kind" to be a reasonable "offer".  I'm not one who thinks it is ethically "the
way things should be", at all, I just think it's the offer I want to make with my
13:47 < exch> For me it's mostly about disclaiming any and all
responsibility to my work.  I do it for myself, as a hobby.  I don't want to be
responsible for maintaining it, or get caught in any other obligations relating to
it, unless it absolutely serves my own needs
13:47 < Namegduf> That makes sense.
13:48 < exch> I put it online so I have easy access to it.  If it happens to
help anyone else, thats only a bonus
13:50 < Namegduf> Yeah.
13:50 < niemeyer> wrtp: I used to do that as well, but started to regret
after some time
13:51 < niemeyer> With open source, one always has to remember that the
license is usually imposed *back* as well, due to contributions
13:51 < wrtp> niemeyer: regret what?  that you'd been too liberal or too
13:51 < niemeyer> wrtp: Using GPL widely
13:51 < wrtp> ah, i see
13:52 < niemeyer> Suddenly I couldn't use my own work for certain things
without stripping out a ton of mixed wok
13:52 < niemeyer> work
13:52 < wrtp> if someone contributes, then i couldn't change the license
back because i wouldn't hold the copyright
13:52 < Namegduf> niemeyer: If you don't want that, you can do something
similar to what the Linux kernel does, or request contributions be under a licence
other than the thing's own licence.
13:52 < Namegduf> BUT you can't do that retroactively.
13:52 < niemeyer> wrtp: Exactly
13:52 < Namegduf> You have to do it before you accept contributions.
13:52 < niemeyer> Namegduf: Using Simplified BSD is much simpler :-)
13:53 < wrtp> i haven't had that problem yet :-)
13:53 < Namegduf> It is, but only if you're comfortable with someone taking
your work and making thousands out of it as closed source.
13:53 < niemeyer> Truth is that I don't really mind if people close and get
money out of my work..  in fact, I hope they do.
13:53 < Namegduf> I'm only comfortable with them doing that if they can
figure out a way to make those thousands that gives whatever they did back to me.
13:53 < niemeyer> Namegduf: Yeah, I'm totally fine with that..
13:53 < wrtp> Namegduf: but would they have used it if it wasn't a liberal
13:54 < Namegduf> wrtp: Probably not, why?
13:54 < wrtp> Namegduf: 'cos then they'd have to pay you and get lawyers
involved and agreements and...  probably easier just to write it themselves.
13:55 < niemeyer> Namegduf: All of the money I make is based upon work of
other people..
13:55 < Namegduf> wrtp: Depends on the scale of the thing.
13:55 < Namegduf> wrtp: For small libraries, I agree.
13:55 < wrtp> Namegduf: sure.  but for anything that i've created myself,
the scale is gonna be quite small
13:55 < Namegduf> As I said, I was thinking of programs, not packages.
13:56 < Namegduf> niemeyer: I'm not saying either side is right or wrong.
I'm saying that depending on I "feel happy with" would determine what I picked.
13:57 < niemeyer> Namegduf: I'm not saying that either..  was just stating
my position
13:58 < Namegduf> Fair enough.
13:58 < Namegduf> The only thing I really dislike is people complaining that
either stuff they released themselves under a permissive licence was "abused" or
stuff released by someone else under a restrictive licence "can't be used".  In
either case..  the dev made a decision, it's on their head, and it's their stuff
to do so with.
13:59 < niemeyer> Yeah, don't even start
14:00 < niemeyer> Some people think there's an invisible clause in the
license like " * Don't make too much money with this" :-)
14:00 < Namegduf> Haha.
14:00 < Namegduf> Yeah.
14:03 -!- deltaphc [delta@cpe-76-173-127-142.socal.res.rr.com] has quit []
14:03 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has joined
14:11 -!- freetz [~freetz@secure-atrc-dip23.nat.okstate.edu] has joined #go-nuts
14:24 -!- mbone [~mbone2@216-80-120-74.mart-bsr1.chi-mart.il.static.cable.rcn.com]
has joined #go-nuts
14:29 -!- decaf [~mehmet@] has joined #go-nuts
14:31 -!- emjayess [~emjayess@pix1.i29.net] has joined #go-nuts
14:33 -!- jeng [~jeng@] has joined #go-nuts
14:37 -!- tvw [~tv@e176006100.adsl.alicedsl.de] has joined #go-nuts
14:38 -!- decaf [~mehmet@] has left #go-nuts ["Leaving"]
14:47 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has joined #go-nuts
14:54 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
14:55 < skelterjohn> morning
14:56 -!- napsy [~luka@] has quit [Ping timeout: 264 seconds]
15:00 -!- visof [~visof@unaffiliated/visof] has quit [Remote host closed the
15:03 -!- artefon [~thiagon@] has quit [Quit: Leaving]
15:04 -!- PortatoreSanoDiI [~Marvin@dynamic-adsl-94-36-178-79.clienti.tiscali.it]
has joined #go-nuts
15:06 -!- rlab_ [~Miranda@] has quit [Ping timeout: 240 seconds]
15:07 -!- freetz [~freetz@secure-atrc-dip23.nat.okstate.edu] has quit [Remote host
closed the connection]
15:07 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-179-102.clienti.tiscali.it] has
quit [Ping timeout: 264 seconds]
15:08 -!- freetz [~fritz@secure-atrc-dip23.nat.okstate.edu] has joined #go-nuts
15:09 < wrtp> mornin
15:18 -!- fabled [~fabled@mail.fi.jw.org] has quit [Quit: Ex-Chat]
15:30 -!- scoeri [~jdekoste@ecoop98.vub.ac.be] has joined #go-nuts
15:32 < scoeri> quick question, is there a way to make the garbage collector
print something whenever it is triggered?
15:33 < skelterjohn> I don't imagine so...
15:33 < nsf> you can always hack the GC source code
15:33 < skelterjohn> it's triggered with almost every system call or
allocation, though it doesn't always do a full collection
15:33 < skelterjohn> true, it is open source, after all
15:34 < aiju> and unlike GNU code is actually readable ;P
15:34 -!- fabled [~fabled@] has joined #go-nuts
15:34 < scoeri> ok, thanks
15:34 < skelterjohn> runtime/mgc0.c
15:35 -!- mattn_jp [~mattn@112-68-85-213f1.hyg1.eonet.ne.jp] has joined #go-nuts
15:36 < scoeri> and is there a separate memory space for each process?
15:36 < aiju> no
15:36 -!- skelterjohn [~jasmuth@c-68-45-238-234.hsd1.nj.comcast.net] has quit
[Quit: skelterjohn]
15:38 < scoeri> so there is only one allocator for all processes
15:39 -!- femtoo [~femto@95-89-196-109-dynip.superkabel.de] has joined #go-nuts
15:40 < scoeri> because if you do a lot of allocation from within those
processes you get a lot of contention
15:40 < scoeri> and I seem to have that problem in my application
15:41 < wrtp> scoeri: what value have you got for MAXGOPROCS?
15:42 < scoeri> 4
15:42 < scoeri> im running my benchmarks on a intel core i7
15:43 < scoeri> thats 2 cores and 2 hyperthreads
15:43 < aiju> you only have two real cores …
15:43 < scoeri> yes
15:44 < aiju> i suppose using GOMAXPROCS = 2
15:44 < scoeri> 2 cores and 2 hyperthreads/core
15:44 < aiju> i'd even try GOMAXPROCS = 1
15:44 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has joined #go-nuts
15:46 < scoeri> yeah, but that is not really the problem, the problem is
that if I allocate a lot that my cores dont run on full speed
15:47 < scoeri> wait, let me see if I can get an example
15:51 < scoeri> http://pastie.org/1602576
15:52 < scoeri> if I run this with GOMAXPROCS = 1 I use one core 100%
15:53 < scoeri> if I run this with GOMAXPROCS = 4 I use one 30% of each core
15:53 < aiju> scoeri: much I/O?
15:53 < aiju> you don't need semicolons with go
15:53 -!- DerHorst [~Horst@e176097176.adsl.alicedsl.de] has joined #go-nuts
15:54 < scoeri> I know
15:54 < aiju> and goroutines are for concurrent programming, not prallelism
15:54 < scoeri> force of habit
15:54 < jumzi> remove that force of habit tbh :P
15:54 < aiju> 1,$s/;$//
15:54 < jumzi> It gives nothing but clutter
15:54 < aiju> just use ed
15:57 < scoeri> btw, go used to require semicolons
15:57 < scoeri> and I wrote the bulk of my code in those days
15:59 < jumzi> Sure, luckily this is better days ;)
16:01 -!- sauerbraten [~sauerbrat@] has quit [Quit: Leaving]
16:02 -!- artefon [~thiago@] has joined #go-nuts
16:04 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has quit [Ping timeout: 240
16:05 -!- DerHorst [~Horst@e176097176.adsl.alicedsl.de] has quit [Ping timeout:
240 seconds]
16:05 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has joined #go-nuts
16:05 -!- tvw [~tv@e176006100.adsl.alicedsl.de] has quit [Ping timeout: 240
16:05 < kimelto> Maybe we will have go in Android quicker than planned
thanks to Oracle ;p
16:07 -!- DerHorst [~Horst@e176097176.adsl.alicedsl.de] has joined #go-nuts
16:11 -!- Venom_X [~pjacobs@] has joined #go-nuts
16:14 -!- skelterjohn [~jasmuth@lawn-gw.rutgers.edu] has joined #go-nuts
16:20 -!- jbooth1 [~jay@] has joined #go-nuts
16:23 -!- snearch [~snearch@f053004251.adsl.alicedsl.de] has joined #go-nuts
16:31 -!- tarrant [~tarrant@] has joined #go-nuts
16:32 -!- bortzmeyer [~bortzmeye@batilda.nic.fr] has quit [Quit: Leaving.]
16:35 -!- piranha [~piranha@5ED42E59.cm-7-5a.dynamic.ziggo.nl] has quit [Quit:
Computer has gone to sleep.]
16:36 -!- schmrkc [~marcus@sxemacs/devel/schme] has joined #go-nuts
16:37 < wrtp> scoeri: you won't get much parellelisation from a
communication-heavy program
16:37 < wrtp> oh yeah, that's not very comms heavy
16:38 -!- ronnyy [~quassel@p4FF1C522.dip0.t-ipconnect.de] has joined #go-nuts
16:43 -!- femtoo [~femto@95-89-196-109-dynip.superkabel.de] has quit [Read error:
Connection reset by peer]
16:50 < mpl> kimelto: link plz?
16:57 < kimelto> mpl: Just trolling about the Oracle lawsuit
16:57 -!- artefon [~thiago@] has quit [Ping timeout: 240 seconds]
16:58 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net]
has joined #go-nuts
17:07 -!- aho [~nya@fuld-590c70e2.pool.mediaWays.net] has joined #go-nuts
17:09 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts
17:10 -!- artefon [~thiago@] has joined #go-nuts
17:10 < mpl> kimelto: ok.  I haven't followed the news, and I'm too lazy too
google for it.  ;)
17:13 < zozoR> "aiju> and goroutines are for concurrent programming, not
17:13 < zozoR> whats the difference?
17:14 < tarrant> zozoR:
17:15 -!- belkiss [~kvirc@drn13-1-78-235-168-105.fbx.proxad.net] has joined
17:15 -!- belkiss [~kvirc@drn13-1-78-235-168-105.fbx.proxad.net] has left #go-nuts
17:18 < zozoR> thanks
17:18 < zozoR> :D
17:18 -!- skejoe [~skejoe@] has quit [Quit: Lost terminal]
17:25 -!- artefon [~thiago@] has quit [Ping timeout: 240 seconds]
17:26 -!- JusticeFries_
[~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts
17:29 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net]
has quit [Ping timeout: 260 seconds]
17:31 -!- mattn_jp [~mattn@112-68-85-213f1.hyg1.eonet.ne.jp] has quit [Quit:
17:31 -!- elimisteve [~elimistev@pool-71-102-138-52.snloca.dsl-w.verizon.net] has
quit [Ping timeout: 272 seconds]
17:35 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 272 seconds]
17:36 < fzzbt> why go's strings are indexed by bytes, not by characters
(unicode "runes")?  many languages have it the other way.  i often feel awkward
when handling non-ascii strings.
17:36 -!- keithgcascio [~keithcasc@nat/google/x-xmcvndvpivlqjhod] has joined
17:39 < fzzbt> i know there's utf8.String, but still..
17:41 < Namegduf> fzzbt: Because Go is supposed to have non-shit
performance, and those languages are not.
17:41 -!- sauerbraten [~sauerbrat@p508CA093.dip.t-dialin.net] has joined #go-nuts
17:41 < Namegduf> fzzbt: You have two options plus a third hack option for
17:41 < Namegduf> 1) Store the array as UTF-8.  Indexing is O(n).  Generally
most efficient memory.
17:42 < Namegduf> 2) Store the string as UTF-32.  Indexing is O(1).
Horrifically inefficient.
17:42 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
17:43 < Namegduf> 3) Store the string as UTF-16.  Indexing is O(1)...  right
up until your string contains a double-size character.  Then indexing by character
breaks.  ALSO very inefficient, just less so.
17:43 < Namegduf> 2 and 3 also break for multiple-rune characters, caused by
combining marks.
17:44 -!- artefon [~thiago@] has joined #go-nuts
17:44 < Namegduf> Go uses 1.  It's efficient and fast for everything BUT
indexing by character.
17:44 < Namegduf> 2 and 3 permit fast indexing by character, but in 3's case
it's a hack and their fast indexing will never work with multiple-rune characters.
17:44 < Namegduf> 3 will work *most* of the time because double-width
characters are really rare.
17:46 < Namegduf> The result of the above is that Go doesn't do it because
it's very slow the way Go stores strings, and the fast ways require being way more
memory heavy just for that one thing, AND don't work reliably anyway (but will
trick people into writing bad code thinking it does).
17:46 < Namegduf> Unicode is not very nice for indexing by character.  :P
17:46 < fzzbt> :)
17:47 < Namegduf> I hope that's not so unclear you can't understand it.
17:47 < Namegduf> These other languages tend to use 3.
17:48 < Namegduf> It kind of works when you look at it but if you really
care about indexing by an exact character count it isn't reliable.
17:48 -!- Glasswalker [~Glasswalk@] has joined #go-nuts
17:48 < Namegduf> Most people don't..  but for them doing it by byte is
usually sufficient anyway.
17:49 < Glasswalker> Hey, so trying to set GOMAXPROCS on my code, based on
the faq entry.  Calling GOMAXPROCS(4) from func main(), and have import "runtime"
after my package statement.  But I'm getting an error that runtime is imported but
unused, and GOMAXPROCS is undefined.
17:49 < Glasswalker> what am I missing?  :)
17:50 < fzzbt> Glasswalker: did you write it as runtime.GOMAXPROCS(4) ?
17:50 < Glasswalker> nope
17:50 < Glasswalker> lol
17:50 < Glasswalker> that's totally what I was missing
17:50 < Glasswalker> thanks!
17:50 < fzzbt> :)
17:50 < Glasswalker> :)
17:52 -!- ako [~nya@fuld-590c79f3.pool.mediaWays.net] has joined #go-nuts
17:53 -!- aho [~nya@fuld-590c70e2.pool.mediaWays.net] has quit [Disconnected by
17:55 -!- cfedde [~cfedde@c-67-165-220-38.hsd1.co.comcast.net] has joined #go-nuts
17:56 * ww just basically reimplemneted python's shelve for go without
particularly intending to...  hashing + gob + sqlite :P
17:56 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has joined #go-nuts
17:57 -!- gmilleramilar [~gmiller@] has quit [Remote host closed the
17:58 -!- jyoshm_ [~jmissao@C1202.karlshof.wh.tu-darmstadt.de] has quit [Ping
timeout: 250 seconds]
18:01 < aiju> zozoR: concurrent programming is a way to structure your
programs in a simple and nice way, parallelism is about HURR DURR MY PROGRAM IS
18:01 -!- MaybeSo [~jimr@lions.Stanford.EDU] has left #go-nuts []
18:04 < cfedde> idealy, when working in a high level language, we won't have
to concern ourselves with optimization for a given hardware model.
18:05 < fzzbt> i doubt concurrency can ever be "simple and nice"
18:06 -!- decaf [556ee0e9@gateway/web/freenode/ip.] has joined
18:07 < cfedde> it appears that go takes us a long way in that direction.
18:11 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net]
has quit [Remote host closed the connection]
18:11 -!- ShadowIce
[~pyoro@HSI-KBW-109-193-120-162.hsi7.kabel-badenwuerttemberg.de] has joined
18:11 -!- ShadowIce
[~pyoro@HSI-KBW-109-193-120-162.hsi7.kabel-badenwuerttemberg.de] has quit
[Changing host]
18:11 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
18:12 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net]
has joined #go-nuts
18:16 < aiju> fzzbt: it looks like you never wrote a good concurrent program
18:16 < aiju> cfedde: ideally, everyone would be happy and wealthy
18:16 < aiju> just like yours, not going to happen
18:20 -!- tensorpudding [~user@] has joined #go-nuts
18:22 < wrtp> concurrent programs can be simpler than the equivalent
sequential programs
18:22 < wrtp> channels make that a not-uncommon occurrence in Go
18:23 < aiju> unlike parallelism, the only *point* of concurrency is making
the program simpler
18:27 < plexdev> http://is.gd/1i7Ayv by [Rob Pike] in go/src/pkg/fmt/ --
fmt: stop giving characters to the Scan method of Scanner
18:27 < plexdev> http://is.gd/EaHFkd by [Robert Griesemer] in
go/src/cmd/godoc/ -- godoc: log errors when reading filter files
18:27 < cfedde> aiju: ideally, everyone would be happy and wealthy _and_
wise.  :-)
18:33 -!- ronnyy [~quassel@p4FF1C522.dip0.t-ipconnect.de] has quit [Remote host
closed the connection]
18:36 -!- itrekkie_ [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has joined #go-nuts
18:36 -!- itrekkie_ [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Client
18:39 -!- Scorchin [~Scorchin@host86-145-9-54.range86-145.btcentralplus.com] has
joined #go-nuts
18:39 < fzzbt> aiju: your right
18:39 < fzzbt> 're
18:40 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Ping
timeout: 276 seconds]
18:45 -!- tvw [~tv@e176006100.adsl.alicedsl.de] has joined #go-nuts
18:45 -!- jyoshm [~jmissao@C1202.karlshof.wh.tu-darmstadt.de] has joined #go-nuts
18:45 -!- jyoshm [~jmissao@C1202.karlshof.wh.tu-darmstadt.de] has quit [Changing
18:45 -!- jyoshm [~jmissao@unaffiliated/sundial] has joined #go-nuts
18:50 < ww> not sure i agree with that blog post.  the reasoning is pretty
18:50 < ww> parallelism implies concurrency, but not the reverse
18:51 < ww> i have trouble thinking of some parallel programming or
execution scenario that is not concurrent
18:51 -!- aconran [~aconran-o@] has joined #go-nuts
18:54 -!- binarypie [~binarypie@adsl-99-37-227-229.dsl.pltn13.sbcglobal.net] has
joined #go-nuts
18:54 -!- eriko [~eriko@mail.familyolson.org] has joined #go-nuts
18:57 < wrtp> ww: i'm not sure he's saying there is
18:58 < wrtp> he says concurrency is more general than parallelism - which
it is, because you can have a concurrent program that's not parallel but not vice
18:59 < ww> wrtp: that's what's funny, he says "They are overlapped, but
neither is the superset of the other"
19:00 < ww> unless he's just talking about the words that people studing
particular topics in the literature tend to like to use in which case *shrug*
19:01 < skelterjohn> what blog post is being discussed?
19:01 < wrtp>
19:01 < skelterjohn> thanks
19:02 < wrtp> ww: he's making the distinction between concurrency and
concurrent programming
19:03 < wrtp> and between parallelism and parallel programming
19:03 < wrtp> and saying that concurrent programming isn't a strict superset
of parallel programming
19:03 -!- freetz [~fritz@secure-atrc-dip23.nat.okstate.edu] has quit [Ping
timeout: 264 seconds]
19:03 < wrtp> because you don't have to deal with parallel issues e.g.
memory consistency
19:04 < wrtp> which seems reasonable to me
19:06 < ww> in that case go edges into parallel territory directly, cf.
maps from different goroutines
19:07 < aiju> concurrency and parallelism aren't really related
19:07 < aiju> or rather "they just happen to be related"
19:08 < aiju> the blog post isn't really getting it
19:12 -!- decaf [556ee0e9@gateway/web/freenode/ip.] has quit [Quit:
Page closed]
19:12 -!- decaf [556ee0e9@gateway/web/freenode/ip.] has joined
19:14 < plexdev> http://is.gd/W8Ar9u by [Robert Griesemer] in
go/src/cmd/godoc/ -- godoc: fix writeFileAtomically utility function
19:15 -!- rlab [~Miranda@] has joined #go-nuts
19:20 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|]
19:23 -!- aconran [~aconran-o@] has quit [Remote host closed the
19:23 -!- aconran [~aconran-o@] has joined #go-nuts
19:25 -!- thomas_b [~thomasb@cm-] has quit [Read error:
Connection reset by peer]
19:27 -!- Guest27203 [556ee0e9@gateway/web/freenode/ip.] has quit
[Ping timeout: 272 seconds]
19:30 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 276 seconds]
19:30 -!- irc [~irc@] has joined #go-nuts
19:36 -!- uriel [~uriel@li43-28.members.linode.com] has joined #go-nuts
19:36 -!- PortatoreSanoDiI [~Marvin@dynamic-adsl-94-36-178-79.clienti.tiscali.it]
has quit [Ping timeout: 240 seconds]
19:37 -!- irc_ [~irc@] has joined #go-nuts
19:37 -!- Guest46486 [~irc@] has quit [Ping timeout: 246 seconds]
19:37 -!- fabled [~fabled@] has quit [Ping timeout: 240 seconds]
19:39 -!- aconran [~aconran-o@] has quit [Ping timeout: 240 seconds]
19:39 -!- prip [~foo@host129-120-dynamic.53-79-r.retail.telecomitalia.it] has quit
[Ping timeout: 276 seconds]
19:46 < plexdev> http://is.gd/7QANkp by [Russ Cox] in go/src/pkg/http/ --
http: remove debugging log statement
19:47 -!- prip [~foo@host129-120-dynamic.53-79-r.retail.telecomitalia.it] has
joined #go-nuts
19:47 -!- fabled [~fabled@] has joined #go-nuts
19:47 -!- aconran [~aconran-o@] has joined #go-nuts
19:48 -!- ShadowIce`
[~pyoro@HSI-KBW-109-193-120-162.hsi7.kabel-badenwuerttemberg.de] has joined
19:48 -!- ShadowIce`
[~pyoro@HSI-KBW-109-193-120-162.hsi7.kabel-badenwuerttemberg.de] has quit
[Changing host]
19:48 -!- ShadowIce` [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
19:49 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Read error:
Connection reset by peer]
19:54 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has quit [Ping timeout: 240
19:58 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
20:00 < aiju> http://aiju.phicode.de/misc/concurrency i tried to sum it up
20:01 < jumzi> aiju colored?
20:01 < aiju> no
20:01 -!- sauerbraten [~sauerbrat@p508CA093.dip.t-dialin.net] has quit [Read
error: Operation timed out]
20:06 < nickbp> typo: "There are programs which are,"
20:06 < nickbp> (+"one")
20:07 < aiju> nickbp: ah, thanks
20:07 -!- TheMue [~TheMue@p5DDF79C0.dip.t-dialin.net] has joined #go-nuts
20:08 -!- Tonnerre [tonnerre@ds1789693.dedicated.solnet.ch] has quit [Ping
timeout: 272 seconds]
20:08 -!- awidegreen [~quassel@c-eacae555.08-2-73746f39.cust.bredbandsbolaget.se]
has joined #go-nuts
20:08 -!- Tonnerre [tonnerre@netbsd/developer/tonnerre] has joined #go-nuts
20:09 -!- Eridius [~kevin@unaffiliated/eridius] has joined #go-nuts
20:10 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has joined #go-nuts
20:16 < nickbp> might be easier to just say "one, the other, both, or
20:16 < nickbp> also "ressource"
20:16 < nickbp> (v useful post just being nitpicky here)
20:17 < aiju> nickbp: i'm glad for that kind of suggestion
20:17 < aiju> oh it's spelled resource in english
20:18 < hypertux> aiju: sync.WaitGroup is the WaitForCompletion() you claim
doesn't exist
20:18 < aiju> you wouldn't use it in this example
20:18 < aiju> rather use a done channel
20:19 < hypertux> I was just saying that it does exist, you can use it as a
pseudo-join for the goroutines
20:20 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has quit [Ping timeout: 240
20:21 < hypertux> aiju: sorry, I misread that.  I thought you were saying
you couldn't wait.  You were just saying you weren't bothering writing the code
20:22 < aiju> it's just pseudocode
20:22 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has joined
20:24 -!- snearch [~snearch@f053004251.adsl.alicedsl.de] has quit [Quit:
20:31 -!- cw [~anticw@parsec.stupidest.org] has quit [Ping timeout: 272 seconds]
20:31 -!- fabled [~fabled@] has quit [Quit: Ex-Chat]
20:31 -!- cw [~anticw@parsec.stupidest.org] has joined #go-nuts
20:49 -!- Fish- [~Fish@9fans.fr] has joined #go-nuts
20:52 -!- foocraft [~dsc@] has joined #go-nuts
20:58 -!- rlab [~Miranda@] has quit [Read error: Connection reset by
21:02 -!- toyoshim_ [~toyoshim@y253149.dynamic.ppp.asahi-net.or.jp] has quit [Ping
timeout: 240 seconds]
21:05 -!- skejoe [~skejoe@] has joined #go-nuts
21:07 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Ping
timeout: 240 seconds]
21:11 -!- awidegreen [~quassel@c-eacae555.08-2-73746f39.cust.bredbandsbolaget.se]
has quit [Quit: No Ping reply in 180 seconds.]
21:11 -!- awidegreen_ [~quassel@c-eacae555.08-2-73746f39.cust.bredbandsbolaget.se]
has joined #go-nuts
21:11 -!- chimes [~chimes@] has joined #go-nuts
21:14 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #go-nuts
21:14 -!- toyoshim_ [~toyoshim@y253149.dynamic.ppp.asahi-net.or.jp] has joined
21:15 < jnwhiteh> +1 for uniqueness type annotations in Go =)
21:21 -!- pothos [~pothos@111-240-165-208.dynamic.hinet.net] has joined #go-nuts
21:23 -!- pothos_ [~pothos@111-240-171-188.dynamic.hinet.net] has quit [Ping
timeout: 240 seconds]
21:24 -!- Scorchin [~Scorchin@host86-145-9-54.range86-145.btcentralplus.com] has
quit [Read error: Connection reset by peer]
21:24 -!- Scorchin [~Scorchin@host86-145-9-54.range86-145.btcentralplus.com] has
joined #go-nuts
21:24 -!- Scorchin [~Scorchin@host86-145-9-54.range86-145.btcentralplus.com] has
quit [Client Quit]
21:24 -!- Fish- [~Fish@9fans.fr] has quit [Ping timeout: 240 seconds]
21:25 -!- foocraft [~dsc@] has quit [Ping timeout: 240 seconds]
21:25 -!- niemeyer [~niemeyer@189-10-154-99.pltce701.dsl.brasiltelecom.net.br] has
quit [Ping timeout: 240 seconds]
21:26 -!- Fish- [~Fish@9fans.fr] has joined #go-nuts
21:27 -!- foocraft [~dsc@] has joined #go-nuts
21:36 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has quit [Remote host closed
the connection]
21:38 -!- niemeyer [~niemeyer@189-10-154-99.pltce701.dsl.brasiltelecom.net.br] has
joined #go-nuts
21:40 -!- |houkiom| [~belkiss@drn13-1-78-235-168-105.fbx.proxad.net] has joined
21:42 -!- |houkiom| [~belkiss@drn13-1-78-235-168-105.fbx.proxad.net] has quit
[Client Quit]
21:48 < plexdev> http://is.gd/PclhMX by [Russ Cox] in 4 subdirs of
go/src/cmd/ -- ld: weak symbols
21:48 < plexdev> http://is.gd/pDiD4d by [Russ Cox] in 5 subdirs of go/src/
-- runtime: fix signal stack bug
21:51 -!- tvw [~tv@e176006100.adsl.alicedsl.de] has quit [Remote host closed the
21:55 -!- versificator [~nobody@h-68-166-192-11.nycmny83.static.covad.net] has
joined #go-nuts
21:55 -!- artefon [~thiago@] has quit [Quit: bye]
21:55 < versificator> are there any classes in Go?
21:56 < aiju> no
21:56 < aiju> it's a feature™
21:56 < aiju> actually structs might be what you're looking for
21:57 < versificator> trying to test the gbg collection; by making O(100k)
objects then deleting them, maybe there is a better way?
21:57 < Namegduf> Make things other than objects?
21:57 < skelterjohn> make some new(int)s
21:57 < Namegduf> (Go has nothing it calls objects, for the record)
21:58 < skelterjohn> just do for i:=0;i<1e5;i++ { new(int) }
21:58 < skelterjohn> that will create and forget about 100k ints
21:58 -!- tarrant [~tarrant@] has quit [Read error: Connection reset
by peer]
21:58 < kimelto> I'm not ashamed to call structures objects ;)
21:58 < Namegduf> You should be.
21:58 < Namegduf> A structure is not an instance of a structure.  :P
21:59 < skelterjohn> what do you call an instantiation of a struct, Namegduf
21:59 < Xenith> I wouldn't want to call an instance of a structure a
21:59 < Namegduf> skelterjohn: "instance of a struct", generally
21:59 < Xenith> That's a mouthful.
21:59 < Namegduf> I don't have to say it regularly.
21:59 < skelterjohn> well, some people like to use one word instead of three
22:00 < skelterjohn> i propose: "thingermabobs"
22:00 < kimelto> and we don't have methods but functions binded to a type ;p
22:00 < Namegduf> We do have methods.
22:00 < Namegduf> They aren't on classes.
22:01 -!- Fish- [~Fish@9fans.fr] has quit [Quit: So Long, and Thanks for All the
22:01 < skelterjohn> and our objects aren't instantiations of classes
22:01 < Namegduf> I'm not saying people shouldn't casually call stuff stuff
for convenience
22:01 < kimelto> agreed
22:01 -!- skejoe [~skejoe@] has quit [Ping timeout: 272 seconds]
22:01 < Namegduf> I guess what I'm saying is that you need to be very aware
that's what you're doing and what you're calling objects in Go cannot be designed
with like objects in OOland
22:02 * aiju sometimes calls things in C objects
22:02 < Namegduf> I really would generally use "things" to refer to
arbitrary instances of something
22:02 < aiju> object meaning "thing" as in an int, a float, a char* or
22:02 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has quit [Remote host
closed the connection]
22:02 < Namegduf> Yeah.
22:03 < skelterjohn> i think i use the word "instance" usually
22:03 < Namegduf> That works too.
22:03 < aiju> i don't ever use instance
22:03 < skelterjohn> now that i think aboutit
22:03 -!- jeng [~jeng@] has quit [Quit: ChatZilla 0.9.86 [Firefox
22:03 < kimelto> what's important is that the object^Wstuff^Wthing is fun to
work with!
22:04 < skelterjohn> objecstufthing?  :)
22:04 < aiju> ^W, not ^H
22:04 -!- thomas_b [~thomasb@cm-] has joined #go-nuts
22:05 < skelterjohn> i guess i got out-nerded on that one
22:05 < Namegduf> I've made that mistake before.
22:05 < aiju> i make the mistake of expecting all programs to follow that
22:06 < aiju> some idiot^Wprogrammer thought it was cool if ^W closed the
current tab
22:07 < Namegduf> Huh.
22:07 < rl> It is pretty cool, though
22:07 < aiju> yeah, "let me just delete the last wo- FUCK"
22:08 < rl> try ctrl+backspace :p
22:08 < aiju> rl: that one doesn't work with some other apps
22:10 < rl> But it doesn't accidentally close the apps where it doesn't work
22:11 < aiju> http://doc.cat-v.org/bell_labs/utah2000/
22:11 < aiju> oops, wrong tab
22:11 < rl> (Yes, a consistent text editing interface *is* too much to ask
22:11 < aiju> i wouldn't be amazed if it was GTK who broke the tradition
22:12 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has quit [Quit:
Computer has gone to sleep.]
22:14 -!- wrtp [~rog@] has quit [Quit: wrtp]
22:14 < rl> I wonder why the argument to time.sleep is nanoseconds; is this
some kind of convention?
22:14 < aiju> rl: nanosleep on Linux
22:14 < Namegduf> Basically, yes.
22:14 < Namegduf> It's the most precise unit of time Go supports.
22:14 -!- rlab [~Miranda@] has joined #go-nuts
22:14 < aiju> nanoseconds are the most precise unit you can ask for without
getting laughed at
22:15 < aiju> (although it's probably not even accurate to the microsecond
in reality)
22:15 < rl> but won't the margin of error be too big if you're using
22:15 < Namegduf> It's better than having a slow version and then having an
extra more precise version.
22:15 < rl> yea, that's what I thought
22:15 -!- awidegreen_ [~quassel@c-eacae555.08-2-73746f39.cust.bredbandsbolaget.se]
has quit [Read error: Operation timed out]
22:15 < Namegduf> If you're actually doing individual nanoseconds, yes.
22:15 < aiju> rl: UNIX had second sleep()
22:15 < aiju> then they added usleep()
22:15 < aiju> and then came nanosleep() in Linux
22:15 < rl> so why was nanosleep necessary?  just to return control?
22:16 < rl> or does it actually make sense to sleep for 10-100 nanoseconds?
22:16 < Namegduf> Because there's precision levels betwen nanoseconds and
22:16 < Namegduf> Maybe 500?
22:16 < aiju> i'd suggest real time applications
22:16 -!- __gilles [~gilles@poolp.org] has joined #go-nuts
22:17 < rl> Why would you be unhappy with 1 microsecond but not with 500
22:17 < rl> yea maybe on other architectures
22:17 -!- awidegreen [~quassel@c-eacae555.08-2-73746f39.cust.bredbandsbolaget.se]
has joined #go-nuts
22:17 < Namegduf> Er, because 500ns is half 1ms
22:17 < aiju> rl: better a too precise than a too vague unit
22:17 < aiju> Namegduf: us, not ms
22:17 < Namegduf> Er, yeah
22:17 < Namegduf> Half 1us
22:17 < rl> Namegduf: I think you'd find that if you ask for 500ns of sleep
you're just as likely to get 1us, but I could be wrong
22:17 < Namegduf> Depends on architecture.
22:17 < Namegduf> And system status.
22:18 < rl> Let's say 99% of architectures?  :p
22:18 < aiju> rl: i don't quite get your point, actually
22:18 < Namegduf> I think Linux has ways of doing short things decently
22:18 < aiju> 23:19 < aiju> rl: better a too precise than a too vague
22:18 < rl> aiju: why have the default sleep require that amount of
22:18 < aiju> why not?
22:18 < Namegduf> It doesn't require it, it permits it.
22:19 < Namegduf> And because then you don't have to add any other form of
22:19 < rl> because you have to enter 9 zeros for a 1 second sleep
22:19 < aiju> rl: 1e9
22:19 < Namegduf> No, you have to write...  yeah.
22:19 < Namegduf> ALSO because Go returns measurements in ns elsewhere
22:19 < rl> ok, fair enough
22:19 < Namegduf> Because again, it's the more precise sensible unit
22:19 < rl> Namegduf: that's what I was asking about earlier when i asked if
it was convention
22:19 < rl> I'm happy to accept that as an answer
22:19 < rl> but
22:19 < aiju> you're too lazy to write 1e9
22:20 < Namegduf> I think it's convention of sorts.  Not 100% because I've
not done mmuch.
22:20 < rl> not "because it makes sense" :p because it's just silly
22:20 < Namegduf> With it, I mean.
22:20 < plexdev> http://is.gd/tRsY2g by [Russ Cox] in 4 subdirs of go/src/
-- reflect: add pointer word to CommonType
22:20 < plexdev> http://is.gd/RnL04D by [Nigel Tao] in
go/src/pkg/compress/lzw/ -- compress/lzw: implement an encoder.
22:20 < rl> I might just be too used to time being measured in us normally
22:21 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has joined #go-nuts
22:21 < aiju> "normally"?
22:21 < rl> Yes
22:21 < rl> As in in my day-to-day life
22:21 < Namegduf> Ah.
22:21 < aiju> i don't use us in my day-to-day life
22:21 < rl> We probably don't program with the same libraries
22:22 < rl> that's a good idea though, should get a us clock
22:22 -!- ShadowIce` [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit:
22:22 < aiju> i don't program any libraries but the standard library at all
most of the time
22:23 -!- TheMue [~TheMue@p5DDF79C0.dip.t-dialin.net] has quit [Quit: TheMue]
22:24 < rl> in some languages the standard library isn't always sufficient
22:24 < aiju> yeah, assembly
22:24 < rl> unless you really enjoy reinventing the wheel.  which I guess
isn't wrong in and of itself
22:24 < aiju> hahaha
22:24 < aiju> i get really tired of people telling me "not to reinvent the
22:25 < aiju> i'm not going to use a library for something i code in 10
lines of code
22:25 < rl> well, it makes engineering sense not to if you have a well
tested library (possibly actively maintained)
22:25 < aiju> alternative: i write working code
22:26 < rl> i wish i was as confident about never having bugs in my own code
22:26 < rl> sadly experience has proven me wrong time and time again
22:26 < aiju> my bugs always end up somewhere else
22:27 < aiju> most things people use libraries for are really ..  simple
22:29 < aiju> one great thing about compiled language is that there is no
penalty for using simple operations
22:29 -!- Glasswalker [~Glasswalk@] has quit [Ping timeout: 240
22:30 < rl> so what kind of things do you find people use libraries for
which you wouldn't?
22:30 < aiju> i for one am much more comfortable with a tiny set of
orthogonal operations instead of a huge bag of somewhat appropriate library
22:30 < aiju> things like string manipulation
22:31 -!- tav [~tav@] has quit [Ping timeout: 240 seconds]
22:31 < Namegduf> If it's <10 lines for an efficient implementation, it
is simple, and it is not easy to get wrong
22:31 < rl> well string manipulation can be very simple or very complex :)
i'm sure you don't think that all string manipulation should be hand coded
22:31 < Namegduf> Then I think you have an example where you're right.
22:31 < aiju> it's just experience from my programs
22:32 < aiju> i mainly use libraries for (1) graphics and (2) sophisticated
22:32 < aiju> (arbitrary precision arithmetic, more complex linear algebra
operations etc)
22:33 < Namegduf> I like a good stdlib
22:33 < Namegduf> It makes small programs much faster to write.
22:33 < Namegduf> By good I mean "fairly broad and covering most functions
that average programs are likely to use".
22:34 < Namegduf> What I really dislike is shitty stdlib functions which
require an external replacement for real word
22:34 < Namegduf> *work
22:34 < aiju> *cough* pascal *cough*
22:34 < Namegduf> I was thinking C
22:34 < aiju> i'm fine with the C stdlib
22:35 < Namegduf> Mostly because I had to rewrite a float-to-string
conversion myself to get half proper precision handling.
22:35 < aiju> it has its warts (huge ones), but i can work with it
22:35 < Namegduf> I want a maximum, but not printing of trailing zeroes.
22:35 < aiju> uh huh
22:35 < Namegduf> Nor padding.
22:35 < Namegduf> Otherwise you get stupid, stupid behaviour around 0
22:36 < Namegduf> As well as in other cases occasionally
22:36 < aiju> http://pastebin.com/K2F94TMk
22:36 < aiju> one of the more annoying things
22:37 -!- tav [~tav@] has joined #go-nuts
22:38 < rl> only 15 includes?  psht
22:38 < aiju> yeah, just a tiny program
22:39 < aiju> Plan 9 is much nicer to this regard
22:39 < aiju> #include <u.h>
22:39 < aiju> #include <libc.h>
22:40 < aiju> hahahahah
22:40 < aiju> looking thru some old code
22:40 < aiju> if(((int)ptr) & 0x80000000) free(ptr);
22:41 < aiju> looks like i used this to prevent constant strings from being
22:42 -!- ExtraSpice [XtraSpice@78-62-101-194.static.zebra.lt] has quit [Read
error: Connection reset by peer]
22:42 < skelterjohn> wow
22:42 < aiju> don't try this at home, kids
22:43 < rl> how does it prevent constant strings from being freed?
22:43 < aiju> rl: they seem to have that bit not set
22:44 < rl> seem to?
22:44 < aiju> well, it seems to have worked
22:44 < rl> i have to admit i know little about what the pointer values mean
but i always thought it was just memory offsets
22:44 < aiju> rl: constants are in a different region than heap stuff
22:44 < rl> so it's just checking that memory offsets below a certain value
don't get freed up
22:45 < aiju> this was one of my first C programs
22:45 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has joined #go-nuts
22:45 < rl> but yea it could very well be that all heap pointer references
are > 0x80000000
22:46 < rl> (seems like it would rule out half of the address space though,
but maybe that's needed for other things)
22:46 < aiju> hahaha one function is _428_ lines
22:47 -!- awidegreen [~quassel@c-eacae555.08-2-73746f39.cust.bredbandsbolaget.se]
has quit [Remote host closed the connection]
22:47 < __gilles> hi
22:48 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts
22:52 -!- skelterjohn [~jasmuth@lawn-gw.rutgers.edu] has quit [Quit: skelterjohn]
23:06 -!- GilJ [~GilJ@zeus.ugent.be] has quit [Quit: leaving]
23:07 -!- Davidian1024 [~Davidian1@cpe-173-88-186-130.neo.res.rr.com] has quit
[Quit: leaving]
23:11 -!- Project-2501 [~Marvin@] has quit [Quit: E se abbasso questa
leva che succ...]
23:11 -!- jbooth1 [~jay@] has quit [Quit: Leaving.]
23:14 -!- Davidian1024 [~Davidian1@cpe-173-88-186-130.neo.res.rr.com] has joined
23:20 -!- Tuller [~tuller@c-69-143-52-174.hsd1.va.comcast.net] has joined #go-nuts
23:23 -!- emjayess [~emjayess@pix1.i29.net] has quit [Quit: Leaving]
23:25 -!- shvntr [~shvntr@] has joined #go-nuts
23:29 -!- GilJ [~GilJ@zeus.ugent.be] has joined #go-nuts
23:38 -!- boscop [~boscop@g227153244.adsl.alicedsl.de] has quit [Ping timeout: 240
23:40 -!- rlab [~Miranda@] has quit [Quit: Miranda IM! Smaller,
Faster, Easier.  http://miranda-im.org]
23:48 -!- DerHorst [~Horst@e176097176.adsl.alicedsl.de] has quit [Remote host
closed the connection]
23:49 -!- Tuller [~tuller@c-69-143-52-174.hsd1.va.comcast.net] has quit [Remote
host closed the connection]
23:59 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.4]
--- Log closed Fri Feb 25 00:00:29 2011