Go Language Resources Go, golang, go... NOTE: This page ceased updating in October, 2012

--- Log opened Sat Dec 25 00:00:01 2010
00:06 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has joined
#go-nuts
00:10 < Eko> question: your opinions on googlecode vs.  bitbucket (for
mercurial source hosting)
00:12 < cbeck> googlecode, but by a slim enough margin that it's down to
which I tried first
00:12 < nsf> github ;)...  and git
00:12 < nsf> :P
00:13 < cbeck> But yes
00:13 < cbeck> github and git
00:13 < Eko> meh, I am way too lazy to use git ^_^
00:14 < nsf> actually it was created for lazy people :)
00:14 < Eko> but hg is soooo much lazier!
00:14 < Eko> its like, one less character and everything.
00:14 < nsf> :D
00:15 < Eko> is github that much nicer or do you like git better?
00:15 < nsf> more like git
00:15 < nsf> and well, I can compare code.google.com with github
00:15 < nsf> I think github is better
00:15 < nsf> at least for me
00:16 < nsf> I don't understand why code.google.com doesn't have a feature
that allows you to download a snapshot of the repo
00:16 < Eko> can I convert an hg repo into git easily?
00:16 < nsf> yes
00:16 < Eko> I forget, lol.
00:17 < nsf> but not vice versa
00:17 < Eko> oh no?
00:17 < Eko> hg imports svn nicely, I figured it'd import git too.
00:17 < nsf> git supports merges from multiple "tips" (in terms of hg)
00:17 < Eko> ah, it's all coming back to me now.
00:18 < nsf> so..  you can convert it, but it won't be the same repository
anymore
00:20 < fuzzybyte> does googlecode have "pull request" type of thing?
00:20 < nsf> afaik no
00:20 < nsf> it was created for svn initially
00:20 < nsf> so it lacks that kind of collaboration spirit
00:21 < exch> pull requests are kind anice
00:21 < nsf> which is essential for distributed vcs
00:21 < fuzzybyte> i'll just use bitbucket then in the future too
00:22 < Eko> meh, jaid is already mercurial, and I've been using mercurial
mostly, so until I start using git a lot I'll stick with hg and bitbucket ;)
00:22 < nsf> I tried switching from git to mercurial
00:22 < nsf> didn't happen
00:22 < fuzzybyte> why not?
00:22 < nsf> I like git's staging area a lot
00:23 < nsf> because I often do a mess in my source tree
00:23 < Eko> I tried switching from mercurial to git and it never happened
either =/
00:23 < nsf> and git allows me to do nice commits after that
00:23 < nsf> I know that mercurial has plugins and stuff for that
00:23 < nsf> but in git it feels more natural
00:23 < nsf> I guess
00:23 < Eko> even though I really should, because git would allow me to
commit only the changes that pertain to a specific thing, without all of the other
"Oh, I should change that while I'm thinking about it..." changes.
00:24 < nsf> Eko: exactly
00:24 < nsf> that's what staging area is about
00:24 < Eko> but I'm too lazy for that.
00:24 < Eko> lol
00:24 < nsf> but it is for lazy..  in some way
00:24 < nsf> because you can do a mess in your source code
00:24 < nsf> and then form nice commits and changes
00:25 < Eko> maybe someday ;)
00:25 < Tv> the tricks you can do with the staging area make life soo much
easier
00:25 < nsf> yeah
00:25 < Eko> I'm also reluctant to try to learn a new vcs when I don't know
what vcs I'll be using in a few months when I start work.
00:25 < Tv> i routinely do manipulations to the tree i wouldn't dare
otherwise
00:26 < nsf> but switching from hg to git or from git to hg can be painful
00:26 < nsf> they are very similar, but all the names are different
00:26 < Eko> yeah, that too.
00:26 < Eko> adg: what does google use internally?  or does it depend on
team?
00:27 < nsf> like pull/fetch, checkout/update, reset/revert,
rebase/histedit, stash/shelve...
00:27 < nsf> and I've named only few commands
00:27 < Tv> Eko: google uses perforce + lots of local hacks like FUSE
filesystems
00:27 < Tv> Eko: you are not google
00:28 -!- tensai_cirno [~cirno@77.232.15.216] has quit [Ping timeout: 255 seconds]
00:30 < Eko> Tv: starting in February.
00:30 < Tv> Eko: say goodbye to your open source life (if any)
00:31 < Eko> heh.
00:40 -!- virtualsue [~chatzilla@host81-148-14-32.in-addr.btopenworld.com] has
quit [Ping timeout: 240 seconds]
00:45 -!- Scorchin [~Scorchin@host86-147-116-169.range86-147.btcentralplus.com]
has quit [Quit: Scorchin]
00:46 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Quit:
hcatlin]
01:35 -!- werdan7 [~w7@freenode/staff/wikimedia.werdan7] has joined #go-nuts
01:49 -!- shvntr [~shvntr@116.26.135.151] has joined #go-nuts
01:49 -!- LeNsTR [~lenstr@unaffiliated/lenstr] has joined #go-nuts
01:55 -!- LeNsTR [~lenstr@unaffiliated/lenstr] has quit [Quit: LeNsTR]
02:01 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
02:03 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
02:03 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
02:05 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
02:06 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
02:08 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
02:08 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
02:10 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
02:11 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has joined #go-nuts
02:17 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has quit [Quit: vdrab]
02:23 -!- nettok [~quassel@200.119.153.97] has joined #go-nuts
02:29 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has joined #go-nuts
02:53 -!- boscop [~boscop@f055251208.adsl.alicedsl.de] has quit [Ping timeout: 240
seconds]
02:55 -!- LeNsTR [~lenstr@unaffiliated/lenstr] has joined #go-nuts
02:58 -!- LeNsTR [~lenstr@unaffiliated/lenstr] has quit [Client Quit]
02:58 -!- boscop [~boscop@f055203132.adsl.alicedsl.de] has joined #go-nuts
02:58 -!- LeNsTR [~lenstr@79.165.23.176] has joined #go-nuts
02:58 -!- LeNsTR [~lenstr@79.165.23.176] has quit [Changing host]
02:58 -!- LeNsTR [~lenstr@unaffiliated/lenstr] has joined #go-nuts
03:05 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has quit [Quit:
noktoborus]
03:05 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has joined #go-nuts
03:08 -!- boscop [~boscop@f055203132.adsl.alicedsl.de] has quit [Ping timeout: 240
seconds]
03:12 < vsmatck> pkg/http/ResponseWriter.SetHeader inserts HTTP header key
in to a map.  This makes it so you can only set one cookie.
03:12 < vsmatck> I think there can be multiple "Set-Cookie: " lines in the
HTTP response header.
03:12 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has quit [Quit: vdrab]
03:12 < vsmatck> Hard to figure out HTTP cookie spec though.
03:14 < vsmatck> I think rfc2965 covers it.  But it's a gojillion pages
long.
03:16 < vsmatck> oh wait wait.  I think I'm wrong here.
03:16 < Tv> vsmatck: i think you'll find that real-world compatibility with
multiple header lines with same key is very poor
03:16 < vsmatck> On page 4 section 3.2.2 it says you can have comma
separated list of cookies.
03:16 < Tv> vsmatck: *any* repeated http header is supposed to be foldable
into a single line, with commas
03:17 < vsmatck> Tv: ah!
03:26 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Quit: sjd]
03:26 -!- SoniaKeys [Alliebloom@c-24-91-112-191.hsd1.ma.comcast.net] has quit []
03:28 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
03:32 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has joined #go-nuts
03:34 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has quit [Client Quit]
03:44 < Eko> now does one convert a character (byte) into a string?
03:44 < Eko> string([]byte{ch})?
03:44 < Eko> seems awfully roundabout...
03:45 < Eko> oh.  string('b') works too.  Just kidding :-)
03:47 -!- d_m [d6@otaku.freeshell.org] has quit [Quit: Lost terminal]
03:49 < Eko> also, HELL YES @ &MyType{blah, blah} ....  makes life so much
easier.
03:50 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Quit: sjd]
03:52 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
04:02 -!- rhencke [~rhencke@ppp-70-247-243-221.dsl.ltrkar.swbell.net] has joined
#go-nuts
04:03 < rhencke> is there a limit to the number of goroutines a go program
can execute?
04:03 < uriel> rhencke: short answer: no
04:03 < rhencke> i'm wondering why the (granted, nonsensical) snippet for {
go func() {}() } crashes instead of running forever.
04:04 < uriel> rhencke: you will obviously run out of memory at some point
04:04 < rhencke> uriel: ah..  so they stick around after completion?
04:04 < Tv> rhencke: probably starts them faster than it runs them to
completion -> keeps bloating until crash
04:04 < uriel> still, I'd think that should not crash
04:04 < rhencke> that's the second time i've made go double panic
04:04 < uriel> Tv: yea, that is probably it
04:05 < uriel> well, that is clearly a pretty dumb thing to do
04:05 < rhencke> thanks for the explanations.  i agree, it is dumb.  :)
04:05 < rhencke> it started when i was trying to understand if and how panic
and goroutines played together
04:06 < rhencke> so i did a for { go panic("oops) } and got an unrelated
error
04:21 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Quit: sjd]
04:23 -!- nettok [~quassel@200.119.153.97] has quit [Ping timeout: 260 seconds]
04:31 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 276 seconds]
04:36 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has joined #go-nuts
04:49 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has quit [Quit:
Leaving]
05:07 -!- rhencke [~rhencke@ppp-70-247-243-221.dsl.ltrkar.swbell.net] has left
#go-nuts []
05:07 -!- ryanu [~ryan_@c-98-200-189-134.hsd1.tx.comcast.net] has joined #go-nuts
05:09 -!- jeff2 [~jeff@pool-108-13-140-226.lsanca.fios.verizon.net] has joined
#go-nuts
05:23 -!- zozoR [~zozoR@56346ed3.rev.stofanet.dk] has joined #go-nuts
05:29 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has joined
#go-nuts
05:39 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has quit [Quit:
DarthShrine]
05:45 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has quit [Quit:
Leaving]
05:50 -!- DarthShrine [~angus@60-242-109-62.tpgi.com.au] has joined #go-nuts
05:50 -!- DarthShrine [~angus@60-242-109-62.tpgi.com.au] has quit [Changing host]
05:50 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has joined
#go-nuts
06:01 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
06:05 -!- Tv [~tv@cpe-76-168-227-45.socal.res.rr.com] has quit [Ping timeout: 260
seconds]
06:10 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Read error: Connection
reset by peer]
06:10 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
06:10 -!- ryanu [~ryan_@c-98-200-189-134.hsd1.tx.comcast.net] has quit []
06:25 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has quit [Quit: vdrab]
06:28 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Quit: sjd]
06:33 -!- d_m [d6@SDF.ORG] has joined #go-nuts
06:35 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
06:49 < Eko> wuh?  rpctest.go:79: invalid operation: 1000000 / (stop -
start) (type float64 / int64)
06:55 < Eko> Damn, well I thought I was being clever but apparently not.
06:55 < Eko> Generic: 1000000 ops in 3.68502 sec ( 271368.580 ops/sec)
06:55 < Eko> TypeSwitch: 1000000 ops in 0.66889 sec ( 1495018.598 ops/sec)
06:56 * Eko makes a big fat TODO note to redo his data goroutines with a type
switch.
07:15 < Eko> So, this is going to sound realy obvious, but why can I modify
the values in a []Type but not a map[...]Type
07:16 < Eko> (obviously you can modify the values in a map[...]*Type, I'm
just curious)
07:28 -!- Project_2501 [~Marvin@82.84.98.59] has joined #go-nuts
07:34 < cbeck> That does seem inconsistant..
07:34 < cbeck> I can see why it would be though
07:35 < Eko> it only happens with type Type struct {...} trying to set a
struct field
07:36 < Eko> you can replace the value all you want, just not change its
fields
07:36 < Eko> I fell like I read a reason for this, but haven't found it.
07:41 -!- adu [~ajr@pool-173-66-253-179.washdc.fios.verizon.net] has joined
#go-nuts
07:59 -!- tensai_cirno [~cirno@77.232.15.216] has joined #go-nuts
08:02 < jeff2> what is an "unexpected reloc for dynamic symbol" from 6l, and
how can I make it expected?
08:04 -!- jeff2 [~jeff@pool-108-13-140-226.lsanca.fios.verizon.net] has quit
[Quit: Leaving]
08:06 -!- ExtraSpice [~XtraSpice@88.118.33.48] has joined #go-nuts
08:12 < nsf> I know what jeff2 needs
08:12 < nsf> -fPIC
08:12 < nsf> but sadly
08:12 < nsf> he isn't here anymore
08:15 -!- illya77 [~illya77@155-90-133-95.pool.ukrtel.net] has joined #go-nuts
08:15 < Eko> aw
08:15 < Eko> 6l has a -FPIC mode?
08:15 < nsf> no
08:15 < Eko> o_o
08:16 < nsf> but this error happens when you're linking elf stuff
08:16 < nsf> and apparently it was compiled by gcc
08:16 < Eko> what does he need to pass -fPIC to?
08:16 < nsf> to gcc of course
08:17 < Eko> bwahahahaa, my channel mode support is finally shaping up.
08:18 < Eko> at least, the getting and setting of them...  they're currently
not used for anything >_>
08:19 < Eko> and I don't have enough time to round everything out, because I
have family christmas in 6 hours and need to sleep.  Laaaame.
08:20 * Eko waves g'night to #go-nuts
08:28 -!- SoniaKeys [Alliebloom@c-24-91-112-191.hsd1.ma.comcast.net] has joined
#go-nuts
08:33 -!- yihuang [~yihuang@183.17.151.58] has joined #go-nuts
08:33 -!- yihuang [~yihuang@183.17.151.58] has left #go-nuts []
08:36 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|]
08:47 -!- ExtraSpice [~XtraSpice@88.118.33.48] has quit [Ping timeout: 276
seconds]
08:47 -!- SoniaKeys [Alliebloom@c-24-91-112-191.hsd1.ma.comcast.net] has quit []
08:52 < adu> hi all
08:52 < adu> Eko!
08:52 < adu> hi nsf
08:52 < nsf> hello
08:53 < adu> is this proper syntax?  http://pastie.org/1404455
08:54 -!- nettok [~quassel@200.119.171.102] has joined #go-nuts
08:54 < nsf> adu: maybe
09:02 < adu> hmm
09:02 < adu> n/m i fixed it
09:03 < adu> 6g says "assignment count mismatch"
09:05 < adu> YEY my parser is working
09:05 < nsf> two vars, one value
09:05 < adu> pi, e int = 3, 1 now works in both 6g and my parser
09:05 < nsf> yes
09:06 < adu> now onto functions :/
09:14 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3]
09:21 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has quit [Ping
timeout: 240 seconds]
09:22 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has joined #go-nuts
09:25 -!- yihuang [~yihuang@183.17.149.41] has joined #go-nuts
09:25 -!- yihuang [~yihuang@183.17.149.41] has left #go-nuts []
09:37 -!- bawr [~bawr@unaffiliated/mrfawkes] has quit [Ping timeout: 250 seconds]
09:52 -!- nettok [~quassel@200.119.171.102] has quit [Ping timeout: 264 seconds]
09:54 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
09:55 -!- Evill [~Evill@58-7-252-130.dyn.iinet.net.au] has quit [Quit:
http://www.GameRanger.com/]
09:58 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has joined #go-nuts
09:59 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Quit: sjd]
10:21 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
10:26 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has quit [Ping
timeout: 240 seconds]
10:35 -!- skejoe [~skejoe@188.114.142.162] has joined #go-nuts
10:39 -!- tensai_cirno [~cirno@77.232.15.216] has quit [Quit: Leaving]
10:40 -!- tensai_cirno [~cirno@77.232.15.216] has joined #go-nuts
10:43 -!- tdc [~santegoed@host217-44-173-250.range217-44.btcentralplus.com] has
joined #go-nuts
10:45 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Quit: sjd]
10:53 -!- irc [~irc@209.17.191.58] has joined #go-nuts
10:54 -!- irc_ [~irc@209.17.191.58] has quit [Ping timeout: 276 seconds]
10:58 -!- Davidian1024 [~Davidian1@cpe-173-88-174-84.neo.res.rr.com] has quit
[Ping timeout: 240 seconds]
10:58 -!- Davidian1024 [~Davidian1@cpe-173-88-174-84.neo.res.rr.com] has joined
#go-nuts
11:00 -!- piranha_ [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has joined
#go-nuts
11:00 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has quit [Read
error: Connection reset by peer]
11:02 -!- thomas_b [~thomasb@cm-84.215.47.51.getinternet.no] has joined #go-nuts
11:12 -!- tensai_cirno [~cirno@77.232.15.216] has quit [Quit: Leaving]
11:24 -!- dju_ [~dju@fsf/member/dju] has quit [Quit: Quitte]
11:25 -!- TheMue [~TheMue@p5DDF5F82.dip.t-dialin.net] has joined #go-nuts
11:27 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 265 seconds]
11:27 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
11:27 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has joined #go-nuts
11:31 -!- adu [~ajr@pool-173-66-253-179.washdc.fios.verizon.net] has quit [Quit:
adu]
11:38 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has quit [Ping
timeout: 240 seconds]
11:49 -!- DerHorst [~Horst@e176102109.adsl.alicedsl.de] has joined #go-nuts
11:52 -!- noktoborus [debian-tor@gateway/tor-sasl/noktoborus] has joined #go-nuts
11:55 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
11:56 -!- wtfness [~dsc@78.101.122.198] has joined #go-nuts
11:57 -!- foocraft [~dsc@78.100.194.174] has quit [Ping timeout: 260 seconds]
12:24 -!- tulcod [~auke@83.160.115.167] has joined #go-nuts
12:24 < tulcod> is there some kind of extension of go which has generics?
like, a branch?
12:28 < uriel> obviously not, because nobody has come up with any acceptable
proposals for generics in Go
12:28 < uriel> and anyway, few people seem to really have need for generics
in practice
12:29 -!- sauerbraten [~sauerbrat@p508CF30D.dip.t-dialin.net] has joined #go-nuts
12:31 < nsf> who needs generics
12:31 < nsf> generics suck
12:31 < nsf> :P
12:35 -!- boscop [~boscop@f055203132.adsl.alicedsl.de] has joined #go-nuts
12:45 < Urtie> I would agree that they're not really needed, but I admit it
took me a while to understand why.  I wish there was a practical example of how to
use interfaces in the docs.  Maybe I am unusually dimwitted, but it took way too
long before I really started to understand how they could be used, despite reading
all I could find.  The examples were a bit abstract.
12:45 < nsf> interfaces are not a solution to generics problem
12:46 < nsf> imho, writing code by hand and generating code if it's really
necessary is a solution
12:47 < nsf> "easy generics" is a source number one for overabstraction
12:47 < nsf> and at this moment in 2010/2011
12:47 < nsf> the lack of generics is what programming community needs
12:48 < nsf> brain damage should be healed to some extent
12:48 -!- rlab_ [~Miranda@91.200.158.34] has joined #go-nuts
12:49 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 272 seconds]
12:50 < nsf> and actually we can clearly see that even in Go
12:50 < nsf> e.g.  regexp package
12:50 < Urtie> I don't disagree with that, it's just that most of the
comments about it sound a bit subjective.  A bit like "It's bad", but without
"here's why" and "what to do instead".  I really feel the docs on golang.org could
use a bit more about it.
12:50 < nsf> was designed with interfaces for some reason, but abstraction
wasn't neccessary
12:51 < nsf> removing it resulted in a 30% speedup
12:51 < nsf> Urtie: you mean generics or interfaces?
12:52 < Urtie> nsf: The subjective part was about generics.  Interfaces
would just generally benefit from some real-world examples.  At least it would
help me :)
12:52 < nsf> ah, yes
12:52 < nsf> Urtie: but it's very hard to convince a C++ junkie that
templates are a bad idea
12:52 < nsf> :)
12:53 < Urtie> That's true
12:53 < nsf> I mean it's not like a very bad idea, they are interesting..
conceptually
12:53 < nsf> but practically
12:54 < nsf> not so much
12:54 < TheSeeker> import "skynet"
12:55 < nsf> one of the examples by Rob Pike, that there is too much of
abstract pointer types in C++
12:55 < nsf> like smart_ptr, auto_ptr, etc.
12:55 < Urtie> nsf: Lots of things are interesting conceptually.  I pretty
much came to Go from several years with Ruby, so such a big step away from
meta-meta-meta-code was really refreshing.
12:55 < nsf> and they exists because it's possible to create them in C++
12:55 < nsf> Urtie: I guess, my brain was damaged mostly by C++
12:56 < nsf> ruby is nice
12:56 < nsf> but for me scripting language is a good replacement for a shell
scripting
12:56 < nsf> I use ruby for that
12:57 < nsf> https://github.com/nsf/gocode/blob/master/testing/run.rb
12:57 < nsf> ruby is very beautiful
12:57 < Urtie> It's a siren language ;)
13:19 -!- xash [~xash@d046017.adsl.hansenet.de] has joined #go-nuts
13:42 -!- Eko [~eko@adsl-76-251-235-206.dsl.ipltin.sbcglobal.net] has quit [Quit:
Leaving]
13:47 -!- go-irc-c [~go-irc-ch@195-132-97-104.rev.numericable.fr] has quit [Ping
timeout: 260 seconds]
13:47 -!- GoBIR [~gobir@adsl-76-251-235-206.dsl.ipltin.sbcglobal.net] has quit
[Ping timeout: 260 seconds]
13:48 -!- TheMue [~TheMue@p5DDF5F82.dip.t-dialin.net] has quit [Quit: TheMue]
13:49 -!- arun_ [~arun@unaffiliated/sindian] has quit [Read error: Operation timed
out]
13:49 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
14:03 -!- tulcod [~auke@83.160.115.167] has quit [Quit: Leaving]
14:11 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has joined #go-nuts
14:21 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has quit [Read
error: Connection timed out]
14:21 -!- tdc [~santegoed@host217-44-173-250.range217-44.btcentralplus.com] has
quit [Quit: tdc]
14:26 -!- sauerbraten [~sauerbrat@p508CF30D.dip.t-dialin.net] has quit [Remote
host closed the connection]
14:27 -!- go-irc-c [~go-irc-ch@195-132-97-104.rev.numericable.fr] has joined
#go-nuts
14:30 -!- DarthShrine [~angus@60-242-109-62.tpgi.com.au] has joined #go-nuts
14:30 -!- DarthShrine [~angus@60-242-109-62.tpgi.com.au] has quit [Changing host]
14:30 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has joined
#go-nuts
14:38 < uriel> 12:57 < nsf> ruby is very beautiful
14:38 < uriel> hah, you got to be kidding, its got the most useless syntax
ever, even perl has more strcture
14:39 < uriel> in ruby every aspect of the syntax is either superfluous and
optional (oh, but just 90% of the time), or ther are ten different times to write
the same thing
14:39 < uriel> add to that trillions of vaguely similar and rarely used
method for every type
14:39 < uriel> it is trually disturbing
14:40 -!- adu [~ajr@pool-173-66-253-179.washdc.fios.verizon.net] has joined
#go-nuts
14:42 -!- adu [~ajr@pool-173-66-253-179.washdc.fios.verizon.net] has quit [Client
Quit]
14:46 < nsf> it's not about structure
14:46 < nsf> structured != beautiful
14:46 < nsf> ruby's syntax is horrible for big apps programming I agree
14:47 < nsf> but for small shell-like scripts it rocks
14:47 -!- adu [~ajr@pool-173-66-253-179.washdc.fios.verizon.net] has joined
#go-nuts
14:47 < nsf> because it's very compact, mostly one-liner stuff
14:48 < nsf> like for example
14:48 < nsf> read a file if it exists:
14:48 < nsf> data = IO.read("myfile.txt") rescue nil
14:49 < nsf> in python it's four lines
14:49 < nsf> or maybe two
14:49 < nsf> but still..  :)
14:50 < fuzzybyte> it's one line with eg.  "with open(path, "w") as f:"
14:50 < nsf> but 'with' is not exactly the thing I want
14:50 < nsf> you see, in ruby it reads the contents of the file to a 'data'
var
14:50 < nsf> and if there is no such file
14:51 < nsf> it writes 'nil' to 'data'
14:51 < fuzzybyte> hmm ,,
14:51 < nsf> it's just one case anyway
14:51 < nsf> there is a lot of different things like that
14:54 < zozoR> data = open("file").read() <-- python.  throws exception
if not found
14:54 < nsf> exactly
14:54 < fuzzybyte> well you could just put your read-file-to-a-var code to a
function and then call it on a single line.
14:54 < nsf> fuzzybyte: that too, you see in ruby you don't need to do that
14:55 < nsf> because when you write shell-like scripts, you don't really
want to use 3rd party libraries
14:55 < zozoR> well, you would have to check if it found anything later
anyway either with if/else or something
14:55 < nsf> or copy junks of code from another scripts
14:55 < zozoR> would you not?
14:56 < nsf> zozoR: it just a single example
14:56 < nsf> you can prove me that I'm wrong
14:56 < nsf> but that's not the point
14:57 < zozoR> hehe
14:57 < zozoR> maybe i should learn ruby for the hell of it ..
14:57 < nsf> fuzzybyte: I've just answered to your gocode question on github
14:59 < fuzzybyte> I'd argue that having lots of these "oneliner convenience
functions" in a library would make it more complex and harder to learn, but I
suppose they could come in handy if you can get used to them all.
14:59 < nsf> http://goo.gl/wZjnr
15:00 < nsf> fuzzybyte: no libraries!
15:00 < nsf> it's not a programming language, it's a scripting language
15:00 < nsf> some people think different though
15:00 < nsf> a lot of them actually
15:00 < fuzzybyte> ruby is not a programming language?
15:00 < nsf> for me writing desktop apps or servers in python or ruby is a
waste of time
15:01 < Namegduf> I find "one-liners" easier f I can actually remember and
understand the rules of the language at once.
15:01 < Namegduf> It's less important if I never need to go back, but four
lines I can throw out vs one line of cleverness?  Not even a contents.
15:01 < TheSeeker> So, Ruby is like EMCA?
15:01 < Namegduf> *contest
15:01 < nsf> TheSeeker: no
15:02 < Namegduf> Python also can do desktop apps pretty well; servers, too.
15:02 < nsf> Ruby is like: add more features to the language, they are cool
15:02 < Namegduf> Yeah, I hate that.
15:02 -!- adu [~ajr@pool-173-66-253-179.washdc.fios.verizon.net] has quit [Quit:
adu]
15:02 < nsf> idents.all?  {|i| smap.any?  {|e| i['Offset'] == e['Offset']}}
15:02 < nsf> I haven't seen a language that allows me to write code like
this
15:03 < nsf> in one line :)
15:03 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has quit [Quit: vdrab]
15:03 < TheSeeker> Someone wrote a social networking application over
freenet in python.  I'd try it, but...  it's in python :P
15:03 < nsf> yeah, I don't use desktop apps written in python
15:03 < nsf> because they are written in python
15:03 < nsf> well, it's not exactly true, I think it's ok to write
configuration gui utils in python
15:04 < nsf> I wrote two of them by myself
15:04 * TheSeeker makes a new-years resolution to make a Go FCP package
15:04 < TheSeeker> (freenet client protocol)
15:05 < nsf> but things like gajim, deluge, etc..  is a no-no
15:05 < zozoR> its a scripting langauge, both, you can use them to whatever,
but their best purpose is utils and non cpu-hogging applications
15:05 < nsf> zozoR: exactly
15:05 < nsf> for me as I've said
15:05 < nsf> it's a replacement for shell scripts
15:05 < nsf> I hate bash syntax
15:05 < zozoR> true, bash is hell ;s
15:06 < nsf> and if I need to make something more or less simple like a
stupid testing framework
15:06 < nsf> for a particular app
15:06 < nsf> the ruby is my choice :)
15:06 < zozoR> if its quick and simple its good :D
15:07 < nsf> zozoR: mostly it's something like this: http://goo.gl/fxivS
15:08 < nsf> yes, I agree that this kind of things are mostly "one man code"
15:08 < zozoR> jep
15:09 < nsf> e.g.  written by single programmer and is being supported by
single programmer
15:09 < zozoR> i wrote a simple compiler "call the go compiler" script in
python :D
15:09 < zozoR> a simple script to call the go compiler*
15:09 < zozoR> because i never got the make files to work with go : |
15:09 -!- savio [~thc@18748176131.nit.megazon.com.br] has quit [Ping timeout: 272
seconds]
15:10 < nsf> :\
15:10 < nsf> recently I wrote super cool makefile templates for Go:
https://github.com/nsf/goal
15:10 < nsf> although they are hard to use
15:10 < nsf> unless you know gnu make very well
15:11 < nsf> but they use non-recursive approach and can solve problems for
apps with lots of local packages
15:12 < nsf> definitely there is a room for improvement
15:12 < zozoR> heh, i dont know what to write in go, so i havent had any use
for more than two files yet
15:12 < nsf> hehe
15:12 < zozoR> though i wonder if i can make a game with ncurses
15:12 < nsf> I'm not sure, but I think I wrote more than 20k lines of Go
code
15:13 < nsf> zozoR: are you using linux?
15:13 < zozoR> yea
15:13 < nsf> if so, you may want to try this lib:
https://github.com/nsf/termbox
15:13 -!- shvntr [~shvntr@116.26.135.151] has quit [Ping timeout: 250 seconds]
15:13 < nsf> instead of curses
15:13 < nsf> for Go
15:14 < zozoR> written in python?
15:14 < nsf> no
15:14 < nsf> it has python bindings
15:14 < nsf> written in C
15:14 < zozoR> ah ok
15:14 < nsf> and Go bindings too
15:16 < zozoR> is there a simple tutorial or are there only those examples?
15:16 < nsf> https://github.com/nsf/termbox/blob/master/go/example.go
15:16 < nsf> only one example at the moment :(
15:17 < nsf> and it's a bit clumsy
15:17 < zozoR> i think ill stay with curses then ^^
15:17 < nsf> the library is very simple though
15:17 < nsf> ok :)
15:17 < zozoR> its more common anyway:D
15:18 < zozoR> or general, whatever is the right word :)
15:18 < nsf> I can say only one thing about ncurses
15:18 < nsf> not a pleasant one :)
15:19 < nsf> I think it sucks
15:19 < zozoR> well, im pretty sure i end up making simpler functions to
wrap around the complex one
15:20 < zozoR> but i dunno :P
15:20 < nsf> http://jiss.convex.ru/tbui-text.swf
15:21 < nsf> currently I work on a termbox-based gui lib
15:21 < nsf> it's far from usable though
15:21 -!- skejoe [~skejoe@188.114.142.162] has quit [Quit: Lost terminal]
15:21 < nsf> http://jiss.convex.ru/lineedit.swf
15:21 < nsf> simple widget :)
15:22 < zozoR> hah :D
15:23 < nsf> but there are definitely reasons to use ncurses as well
15:24 < nsf> termbox has a lot of politics in it
15:24 < nsf> it denies 256 color terminals, a lot of key extensions, etc.
15:24 < nsf> and it works well only on linux
15:24 < nsf> on major/popular terminals :)
15:25 < nsf> ncurses tries to work everywhere
15:25 < zozoR> true
15:25 < nsf> but I can't say that my lib is portable in theory
15:26 < nsf> the thing is, that I'm not really interested in that
15:26 < zozoR> why not?
15:26 < nsf> the termbox is very simple, 12 functions or so, 2 data
structures
15:26 < nsf> you can write an ncurses backend for it in a day
15:27 < nsf> zozoR: portability leads to a mess in the code
15:27 < nsf> especially in that area (terminals)
15:27 < nsf> they are a mess
15:27 < zozoR> :o
15:28 < nsf> basically I'm desperately pretending that it's not true
15:28 < zozoR> hah xD
15:28 < zozoR> the only thing i miss in go is a gc you can control, and a
better regex library
15:28 < nsf> rsc works on a new gc
15:29 < nsf> is working* (i guess it's a better way to say that)
15:29 < nsf> anyways, the thing is
15:29 < nsf> go devs are aware of that need
15:29 < nsf> also Go is different from other programming languages
15:29 < zozoR> thats a good thing :D
15:30 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has joined
#go-nuts
15:30 < nsf> in a sense that it's practical PL
15:30 < nsf> and good GC is a practical thing as well
15:30 < nsf> so, let's hope for the best
15:30 < zozoR> PL?
15:31 < nsf> programming language
15:31 < zozoR> oh
15:31 < zozoR> well, go is just awesome, i just need to find something to do
with it
15:31 < zozoR> :D
15:31 < nsf> ;)
15:33 < nsf> time to go to bed..  sweet dreams, everyone :)
15:33 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3]
15:39 < uriel> 14:48 < nsf> data = IO.read("myfile.txt") rescue nil
15:39 < uriel> in rc shell:
15:39 -!- ExtraSpice [~XtraSpice@88.118.33.48] has joined #go-nuts
15:39 < uriel> ; data = `{cat myfile.txt}
15:40 < uriel> and you don't need tons of optional shit to have compact
syntax
15:43 < uriel> TheSeeker: yea, Go is perfect to build something like
freenet, unlike Java (*yuck*)
15:45 -!- jkakar [~jkakar@93.Red-79-151-184.dynamicIP.rima-tde.net] has joined
#go-nuts
16:00 < TheSeeker> soom(tm) the new freenet node protocol is going to be
merged in...  that's my current best excuse for being lazy and not getting started
writing a Go port of freenet :) FCP is a lot simpler though, so it makes a lot of
sense to do that first, allow easy construction of Go-based client apps.
16:14 -!- tensai_cirno [~cirno@80.250.216.102] has joined #go-nuts
16:18 < uriel> sounds cool
16:27 < kimelto> funny that the compiler does not mind if there is an extra
comma.  os.Open("datas", os.O_WRONLY|os.O_CREAT, 0666, ) compiles just fine
16:28 < fuzzybyte> how strange.
16:30 < cbeck> Not really, they did their best to make the grammar simple
16:43 < vsmatck> If you put the ')' on a newline it requires a comma.  Is
that because of the auto-semicolon-insertion-thing?
16:52 -!- femtoo [~femto@95-89-197-28-dynip.superkabel.de] has joined #go-nuts
17:14 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts
17:15 -!- Tv [~tv@cpe-76-168-227-45.socal.res.rr.com] has joined #go-nuts
17:23 -!- gr0gmint [~quassel@87.60.23.38] has joined #go-nuts
17:34 -!- dju [~dju@fsf/member/dju] has joined #go-nuts
17:48 -!- xash [~xash@d046017.adsl.hansenet.de] has quit [Read error: Operation
timed out]
17:48 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
17:49 -!- nettok [~quassel@200.119.190.228] has joined #go-nuts
17:56 < tensai_cirno> array bounds mutable in go?
17:57 < tensai_cirno> for example i have array [1, 2, 3]
17:57 < tensai_cirno> how i can add 4 to tail?
17:58 < aiju> tensai_cirno: you can't
17:58 < aiju> however, this is possible with slices
17:58 < tensai_cirno> reconstruct new array?
17:58 < tensai_cirno> can you provide example?  :|
17:59 -!- WonTu [~WonTu@p57B53FBD.dip.t-dialin.net] has joined #go-nuts
17:59 -!- WonTu [~WonTu@p57B53FBD.dip.t-dialin.net] has left #go-nuts []
18:00 < tensai_cirno> aiju, don't need in example.  i think i figured out
18:04 < TheSeeker> array.Append(4) ?
18:06 < TheSeeker> err
18:06 < TheSeeker> append(array, 4)
18:08 < tensai_cirno> oh, works
18:29 -!- ildorn [~ildorn@p5B2FB473.dip.t-dialin.net] has joined #go-nuts
18:32 -!- Eko [~eko@adsl-76-251-235-206.dsl.ipltin.sbcglobal.net] has joined
#go-nuts
18:32 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
joined #go-nuts
18:33 < sussman_> greetings; is there a Go library for doing DSP on audio
data?  Or at least allowing me to inspect data in a .wav file or similar?
18:33 < sussman_> googling hasn't revealed anything
18:36 < TheSeeker> tried looking through http://go-lang.cat-v.org/ and
http://godashboard.appspot.com/ ?
18:36 -!- ildorn [~ildorn@p5B2FB473.dip.t-dialin.net] has quit [Quit: Leaving.]
18:38 < sussman_> I will now, thanks
18:39 < fuzzybyte> Which style of block comments are preferred for go?  eg.
http://pastebin.ubuntu.com/547564/
18:40 < fuzzybyte> I'm trying to write a go plugin for gedit and i was
thinking whether i should bother to implement a code completion thingy for those
fancy block comments (eg.  styles 2-4)
18:41 < fuzzybyte> seems that eclipse's c++ plugin favors style 3 and has a
code completion for it too
18:41 -!- nettok [~quassel@200.119.190.228] has quit [Ping timeout: 276 seconds]
18:44 < Tv> fuzzybyte: why would you use /* */ in this modern day and age..
18:44 < fuzzybyte> hmm, though it seems that go source code almost never
uses block comments
18:45 < TheSeeker> to avoid using // in front of every line?
18:45 < Tv> TheSeeker: his paste has half the alternatives do that anyway..
18:46 < TheSeeker> gofmt doesn't complain about any of them, so any are OK?
18:46 -!- skejoe [~skejoe@188.114.142.162] has joined #go-nuts
18:46 < Tv> quick and inaccurate, but anyway:
18:46 < Tv> $ find -name '*.go' -exec cat '{}' ';'|grep -c //
18:46 < Tv> 29867
18:46 < Tv> find -name '*.go' -exec cat '{}' ';'|grep -c '/\*'
18:46 < Tv> 845
18:46 < fuzzybyte> heh, youre right.  you'd still would have to put * or
space characters on every line with all styles except style 2
18:46 < Tv> that's the go source tree
18:47 < Tv> now try telling me // is not the right way ;)
18:47 < fuzzybyte> the only example of block comments i could find from go
source code used style 2 (ie.  there is nothing in the beginning of each line)
18:47 < Tv> fuzzybyte: that makes you blind..
18:48 < Tv> fuzzybyte: there's piles of // block comments
18:48 < fuzzybyte> /// <- what are these called?  i thought /* are called
block comments
18:49 < fuzzybyte> oops, i meant //
18:49 < TheSeeker> Single line comments
18:49 < Tv> There are two forms of comments:
18:49 < Tv> Line comments start with the character sequence // and stop at
the end of the line.  A line comment acts like a newline.
18:49 < Tv> General comments start with the character sequence /* and
continue through the character sequence */.  A general comment that spans multiple
lines acts like a newline, otherwise it acts like a space.
18:49 < Tv> so they'd be called "line comments" (not "single")
18:49 < fuzzybyte> anyway, it seems that fancy block comments are pointless,
because you might as well use //-style comments to achieve the same.
18:49 < Tv> fuzzybyte: exactly my point
18:50 < Tv> why would you go through all that trouble, now that you no
longer have to
18:50 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has quit [Ping
timeout: 265 seconds]
18:51 < TheSeeker> /* <many lines here> */ is still a lot less typing
when programing in a bare text editor.
18:52 < Tv> TheSeeker: yes, and writing comments in the margin in even less
typing when programming with pen & paper
18:52 < Tv> TheSeeker: how's that relevant?-)
18:52 < TheSeeker> [10:44.57] <Tv> fuzzybyte: why would you use /* */
in this modern day and age..
18:53 < Tv> "bare text editor" && "modern day and age" ?
18:53 < Tv> evaluates to false for me
18:53 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has joined
#go-nuts
18:53 < TheSeeker> given that there's no IDE for Go...
18:53 * Tv hugs emacs
18:56 * tensai_cirno hugs Tv
18:57 < aiju> LUCKILY there is no IDE for Go
18:57 < aiju> IDEs are an archetypical example why most modern softwares
sucks terribly
18:57 < tensai_cirno> by the way, acme good choice for Go?
18:57 < aiju> tensai_cirno: acme is a good choice for anything
18:57 < Tv> you know, the first time i really saw Eclipse being used was the
first android sdk screencast..  the amount of code generation made me puke in my
mouth a little..
18:58 < aiju> IDE features are languages smells
18:58 < taruti> Has anyone have gocode working with emacs?
18:58 < aiju> hopefully not
18:59 < aiju> :<
18:59 < taruti> :D
19:00 < aiju> http://aiju.phicode.de/b/emacs
19:01 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Remote host closed the
connection]
19:01 < TheSeeker> If you're not going to allow anyone to use tools to make
programming easier and less error prone, why allow then to use code ay all?  they
should just program directly in machine code using a hex editor!  no need to
compile!
19:02 -!- sjd [~sjd@204-195-89-40.wavecable.com] has joined #go-nuts
19:02 < aiju> TheSeeker: IDEs just don't make programming easier
19:02 < TheSeeker> Not having to memorize every method of every package...
yeah, an IDE helps a LOT.
19:04 < aiju> i have documentation for that…
19:04 < aiju> and i don't spend much time looking stuff up
19:05 -!- tdc [~santegoed@host217-44-173-250.range217-44.btcentralplus.com] has
joined #go-nuts
19:05 < TheSeeker> yeah, and which is faster?  switching to a new
application and looking up stuff in the documentation, or having a window pop up
at will that gives you the information directly?
19:05 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
quit [Quit: sussman_]
19:05 < aiju> if you spent most of your time looking functions up, you
either have a non-functioning memory or are a beginner
19:06 < aiju> esp.  with sane languages like Go with sane library it should
be possible remember most names
19:06 -!- sjd [~sjd@204-195-89-40.wavecable.com] has quit [Read error: Connection
reset by peer]
19:07 < zozoR> i dont know anyone with better memory than me, and i agree
with TheSeeker
19:07 < TheSeeker> not everyone can remember 10,000 functions and their
arguments with perfect recall.
19:07 < zozoR> codecompletion is the best invention ever
19:07 < aiju> 10,000 functions?  you're using all of them?
19:07 < zozoR> it makes programming thousands times faster
19:07 < aiju> haha
19:08 < aiju> i have yet to see a sane IDE which isn't a horrible bloat or
bugfest
19:08 < TheSeeker> aiju: my goal is to replicate freenet in Go. considering
how much of java it uses, I expect I'll be using quite a lot of Go's capabilities
if I can manage to do it.  :|
19:08 < zozoR> i dont want an ide, i just want code completion
19:09 < zozoR> and syntax highlighting
19:09 < cbeck> emacs =D
19:09 < zozoR> does emacs support code completion for go?
19:09 < napsy> even with code completion, you probably want to check API
documentation if you have 10000 functions
19:09 < cbeck> Not sure if anyone's written that yet
19:09 < zozoR> if you have 10000 functions you might want to optimize your
code a little :D
19:09 * cbeck adds it to his to-do list
19:09 < aiju> haha syntax highlighting
19:10 < aiju> do you colour all text you read?
19:10 < TheSeeker> gocode does code completion, not sure how you would get
syntax highlighting
19:10 < aiju> if all verbs were yellow, english would be easy as pie
19:10 < zozoR> programming is not meant to be hard ..
19:10 < cbeck> Only the highly structured english..
19:10 < zozoR> you might as well use assembler with tthat attitude
19:10 < TheSeeker> syntax highlighting is the easiest way to immediately
tell at a glance if you have mismatched parens or quotes.
19:10 < aiju> writing LISP eh
19:11 < Namegduf> How does syntax highlighting help with that?
19:11 * cbeck <3 LISP
19:11 < Namegduf> Quotes I can see.
19:11 < Namegduf> Parens, not so much.
19:11 < aiju> lots of superfluous irritating parentheses
19:11 < zozoR> smart syntax highlighting highlights the oppesit parantheses
19:11 < Namegduf> When you hover one, I guess
19:11 < Namegduf> I don
19:12 < zozoR> of those you hover above that is :P
19:12 < Namegduf> *I don't think of that as syntax highlighting, though, and
it doesn't help that much.
19:12 < Eko> I love the % command in vim (goto matching {([)
19:12 < TheSeeker> well, a good IDE will have matching parens highlighting,
and if you go to a new line without closing, it'll indent since it thinks you're
continuting the expression on the next line.
19:12 < Eko> :set ai :D
19:12 < aiju> autoindenting is one of the few good IDE features (and really
something most editors do)
19:13 < Namegduf> I can't say if I want an IDE because it gets into the
definition of what an IDE is.
19:13 < zozoR> i rage at the editors that does not do that :D
19:13 < TheSeeker> The argument against having an IDE to program in sounds
like the same argument for not having spell checkers.
19:13 < Eko> I just discovered that TextEdit.app has rudimentary text
completion
19:13 < Eko> I was kinda weirded out.
19:13 < Namegduf> I mean, if I like vi with a good process for quick builds
and reformats...  is that an IDE?
19:13 < Eko> It's like discovering that Notepad.exe has a built-in tea
timer.
19:14 < Eko> Namegduf: I totally use screen as an IDE :D
19:14 < Eko> and lots of split panes in vim
19:14 < aiju> yuck screen
19:14 < aiju> i have to set up tmux on my Linux computers, it really beats
screen
19:14 < zozoR> is there anything you like aiju?
19:14 < Eko> aiju: ? I LOVE screen.  Quite possibly one of my favorite GNU
programs.
19:14 < aiju> zozoR: yeah, acme, Plan 9, C, Go, the sane side of software
19:14 < Namegduf> I use a tiling WM with focus-follows-mouse, a build
terminal, a run terminal, and as many vi instances as I like.
19:14 < zozoR> define sane
19:15 < aiju> not bloated with all kind of features
19:15 < zozoR> what makes a feature bloated?
19:15 < aiju> doesn't really help anything
19:16 < aiju> good software should be simple and powerful
19:16 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has quit [Ping
timeout: 276 seconds]
19:16 < aiju> not having zillions of features to fix basic design mistakes
19:16 < Eko> like C: You can do anything, but it may take you thousands of
lines of code ;D
19:16 < aiju> C is truly great
19:16 < Eko> actually, in that vein, you should LOVE assembly
19:16 < Eko> no silly "features"
19:16 < aiju> no
19:16 < Eko> but you can do anything!
19:17 < Eko> ;-)
19:17 < zozoR> assembler is awesome
19:17 < aiju> you totally don't get my point
19:17 < Eko> aiju: no, I do get your point, I'm just being silly.
19:17 < zozoR> if you live 200 years longer than everybody else
19:17 < aiju> compare sed/awk to the hell of Windows programs with
"features"
19:17 < aiju> assembly is terrible for actual development because it is
errorprone and unportable
19:17 < zozoR> well, not that i dont agree with you, but people have
different needs :P
19:17 < Eko> sed/awk/grep/cat/xargs = <3
19:18 < aiju> Eko: that's the point
19:18 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has joined
#go-nuts
19:18 -!- brad_ [621a78e5@gateway/web/freenode/ip.98.26.120.229] has joined
#go-nuts
19:18 < Eko> oh, I almost forgot ed.
19:18 < aiju> people write thousands of lines of IDE code to find a single
function
19:18 < TheSeeker> aiju: so gofmt was a huge waste of resources to have ever
been made?
19:18 < zozoR> visual studio is like, you smash your head to the keyboard,
and the code is written for you
19:18 < Eko> With those tools, I can do in a single line of BASH what it
takes graphical people a half an hour to do manually.
19:18 < aiju> i just fucking do grep '^func\(' *.c and can search Plan 9
code
19:18 < zozoR> most developers like that
19:19 < aiju> zozoR: MSVS is an abomination
19:19 < zozoR> it truly is
19:19 < Eko> +1
19:19 < brad_> If only plan9 were being kept up to date
19:19 < aiju> zozoR: it's *REALLY* slow, has billions of bugs and it FUCKING
NEVER WORKS
19:19 < Eko> It works brilliantly, but only when it works, which is almost
never.
19:19 < aiju> MSVS is the essence of IDEs
19:19 < TheSeeker> thta's odd, I use VS every day with my day job, it's
fast, works well, and makes programs that run.
19:20 < aiju> TheSeeker: wow
19:20 < aiju> TheSeeker: working on the blue gene?
19:20 < Eko> Eclipse also works brilliantly, but has a bad habit of having
some pieces working while some others don't.
19:20 < aiju> i used a dualcore 2.2 GHZ processor with 2 GB RAMs of RAM and
it took minutes to start
19:20 < TheSeeker> I probably don't use half of it's features, but I don't
care, since if I'm not using them, they don't use appreciable resources.
19:20 < aiju> acme starts instantly on my 550 MHz Pentium III and it's
hundred times more usable
19:21 -!- binarypie [~binarypie@c-75-68-156-178.hsd1.vt.comcast.net] has joined
#go-nuts
19:21 < zozoR> youd have to write your own make code :D
19:21 < Eko> vim starts instantly on...  uh, every computer I own.
19:21 < TheSeeker> remeber: every feature that VS has was added because
someone asked for it.
19:21 < zozoR> well, im just happy i dont have to work with aiju :D
19:21 < brad_> sam starts instantly on plan9 too
19:21 < Eko> TheSeeker: that's how feature creep (read: bloat) happens
19:21 < aiju> zozoR: and i know i'll be working with your kind
19:21 < aiju> and i won't be happy
19:21 < zozoR> hey i agree with you >.>
19:22 < Eko> zozoR: that's okay, you can work with me
19:22 < Eko> I'm quite agreeable :)
19:22 < zozoR> except for the fact that i want code completion and syntax
highlighting :P
19:22 < aiju> i still spent most of my time thinking or just writing down
what i thought
19:22 < Eko> I'll use anything they pay me to use, but I'll grumble about it
at lunch and write tools and plugins and scripts to make my life easier and put
them on my local repo so my coworkers can check it out too.
19:22 < zozoR> i dont want to work with people who are fanatic about their
languages and ide's
19:22 < zozoR> true that :D
19:22 < TheSeeker> I like having a built-in debugger with breakpoints and
stanck walking etc etc.
19:22 < aiju> Eko: well true
19:23 < TheSeeker> *stack walking
19:23 < aiju> haha the MSVS debugger
19:23 < Eko> is actually a remarkable thing
19:23 < brad_> I thought google was ll about using whatever worked
19:23 < aiju> it can't even print MEMORY CONTENTS in a sane way
19:23 < aiju> in gdb i can do x/10x pointer
19:23 < aiju> hell in msvs
19:23 < TheSeeker> it prints memory contents how you tell it to.
19:23 < zozoR> you dont need that in .net?
19:23 -!- TheMue [~TheMue@p5DDF5F82.dip.t-dialin.net] has joined #go-nuts
19:23 < aiju> zozoR: don't get my started on that one
19:24 < aiju> *me
19:24 * TheSeeker sadly has to work with 10 year old horribly written C/C++ code
:/
19:24 < Eko> aiju: the MSVS debugger is quite possibly the ony reason you
would use the IDE, so I'd steer clear of dissing it.  It is actually pretty
awesome and supports so many different kinds of remote attachment that it will
make your brain melt.
19:24 < aiju> remote attachment?
19:24 < aiju> that's not a feature, that's a requirement
19:24 < aiju> acid does that cross-platform
19:24 < Eko> yeah, for instance, I can debug any application running on a
REMOTE windows CE installation
19:25 < aiju> but wait, MSVS doesn't even on more than one plattform
19:25 < Eko> just as if it were running locally
19:25 < zozoR> monodevelop?
19:25 < aiju> +run
19:25 < zozoR> mono
19:25 < aiju> mono doesn't run, mono creeps
19:25 < zozoR> xD
19:25 < Eko> lol.
19:25 < Eko> meh, not a big fan of .NET in general.
19:25 < zozoR> well, with that being said, i think i will read a book:D
19:25 < brad_> not for me, I find it is actually quite fast
19:26 < zozoR> that is alot more constructive than this :P
19:26 < aiju> well, i can't really say that
19:26 < brad_> but some of that is subjective
19:26 < aiju> because it never worked for me
19:26 < aiju> it fails fast, yeah
19:26 < zozoR> you suck at .net then :D
19:26 < aiju> i just avoid it
19:26 < cbeck> The MSVS debugger makes debugging threaded apps easier than
anything else I've used
19:26 < Namegduf> I've never had any trouble with gdb
19:26 < cbeck> Only reason to use VS
19:26 < aiju> i have seen .NET code, i avoit it as much as i can
19:27 < Namegduf> gdb
19:27 < aiju> the only reason to use VS is getting paid for it
19:27 < Eko> cbeck: eh, I've had great luck with GDB in Eclipse debugging
pthread apps written in C and C++
19:27 < Namegduf> *gdb's thread support never seemed to be bad.
19:27 < cbeck> Don't get me wrong, I much prefer gdb
19:27 < TheSeeker> and, amazingly, most people who write code want to get
paid for it, and use VS. :P
19:27 < Namegduf> I've never used VS, but I've never found threads that
hard.
19:27 < cbeck> Perhaps I've just not learned the correct incantation
19:27 < Eko> I just want in-situ debugging of goroutines and I don't care
how I get it :-D
19:27 < aiju> TheSeeker: flies and shit
19:28 < aiju> wtfi in-situ debugging?
19:28 < cbeck> I don't either, but when dealing with third party libs that
spawn threads, I found it very desirable
19:28 < Eko> cbeck: in my experience, you need a graphical frontend like
eclipse to properly use gdb with threaded apps
19:28 < cbeck> Yeah
19:28 < cbeck> I can see that
19:28 < Namegduf> I wouldn't mind a debugger integrated in my editor, but
the only pro seems to be so I can have a single "view" of the lines as opposed to
a prompt ala GDB
19:28 < aiju> eclipse is even worse than MSVS
19:28 < Eko> aiju: the ability to debug them while they're still running
19:28 < cbeck> M-x gdb-mode =)
19:28 < Namegduf> gdb works on threaded apps fine.
19:28 < Eko> lol emacs
19:29 < Namegduf> There are commands to switch threads.
19:29 < Eko> "Emacs is a great operating system, it just lacks a good text
editor."
19:29 < Namegduf> And you can operate on any thread as you would a single
one.
19:29 < Namegduf> I'm not sure what else I'd expect.
19:29 < aiju> Namegduf: fancy icons and shit
19:29 < cbeck> Eight megabytes and constantly swapping was always my
favorite
19:29 < aiju> escape-meta-alt-control-shift
19:29 < Namegduf> Is that how you insert a new line?
19:29 < TheSeeker> Most people here on freenode live in a linux bubble and
try to ignore that there's an outside world where most of real business gets done.
you might not like it, and you might be trying to change it, but telling people
that what they're used to that allows them to write and debug code quickly
efficiently is evil and they should just stop being a pussy and use notepad ...
is not a good way to
19:29 < TheSeeker> persuade people.
19:29 < Eko> Namegduf: yep, and that works awesome, until you have threads
being created and destroyed many times a second and don't want to be constantly
looking up thread IDs
19:30 < Namegduf> Eko: That sounds horribly inefficient
19:30 < aiju> TheSeeker: i don't live in a linux bubble i live in a plan 9
bubbles
19:30 < Namegduf> Thread creation isn't that cheap
19:30 < brad_> and plan9's bubble burst a long time ago
19:30 < aiju> TheSeeker: besides you _totally_ didn't get my point
19:30 < aiju> notepad is real crap
19:30 < cbeck> I'm still in school, so I live in all kinds of bubbles =p
19:31 < cbeck> But I try to enjoy them while I can
19:31 -!- tdc [~santegoed@host217-44-173-250.range217-44.btcentralplus.com] has
quit [Quit: tdc]
19:31 < Eko> Namegduf: even if you have 10 threads each of which can be
processing an individual request and the master is farming out work units, it'll
be difficult to debug in gdb command-line
19:31 < Eko> Namegduf: also, in the former case, I didn't write the code, I
was just supposed to maintain it.  *grumble*
19:32 < Namegduf> What does VS do that's helpful?
19:32 < aiju> i just don't write ultra-fancy threaded code when it's
completely superfluous :P
19:32 < Eko> just one more reason I love goroutines.
19:32 < Namegduf> Let you see the thread hierarchy or something?
19:32 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
joined #go-nuts
19:33 < aiju> CSP is the only way to do sane multithreading
19:33 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
left #go-nuts []
19:33 < Eko> Namegduf: mine was in eclipse.  But yes, VS has those sorts of
thread views.  You can also view them by creation time and visualize some kinds of
inter-thread communication and locking.
19:33 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
joined #go-nuts
19:33 < cbeck> That, and makes seeing active threads and switching between
them very streamlined
19:33 < Namegduf> Ah.
19:34 < Eko> I justify the fact that MSVS debugging is so good because it's
difficult to write correct code the first time (a) in C/C# and (b) using the win32
APIs.
19:34 < tensai_cirno> is there Go analogue of C getc?
19:35 < Eko> tensai_cirno: not as a single, built-in incantation, no
19:35 < tensai_cirno> aiju, Actor model for multithreading fine too
19:35 < tensai_cirno> but that close to CSP
19:35 < aiju> tensai_cirno: anything but the Windows lock hell
19:36 < Eko> if you're looking to read from the command-line though you can
use fmt.Scan
19:36 -!- GoBIR [~gobir@adsl-76-251-235-206.dsl.ipltin.sbcglobal.net] has joined
#go-nuts
19:37 < tensai_cirno> Eko, thanks
19:37 -!- binarypie [~binarypie@c-75-68-156-178.hsd1.vt.comcast.net] has quit
[Remote host closed the connection]
19:38 < Eko> tensai_cirno: it also has friends like Scanf and Scanln (though
in my experience, the documentation could use some examples showing how they all
work to clarify it a bit)
19:40 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has quit [Ping
timeout: 250 seconds]
19:40 < tensai_cirno> https://gist.github.com/755018
19:40 < tensai_cirno> Eko, this program doesn't work, as intended :\
19:41 < tensai_cirno> just spamming "Got: ''" on screen
19:42 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has joined
#go-nuts
19:48 < Eko> !gopkg fmt
19:49 < Eko> psh.  http://golang.org/pkg/fmt/#Scan
19:49 < Eko> that's the one you're trying to use; notice it doesn't have a
format.
19:49 < Eko> Try using Scanf if you have a format.
19:51 -!- binarypie [~binarypie@c-75-68-156-178.hsd1.vt.comcast.net] has joined
#go-nuts
20:00 -!- gr0gmint [~quassel@87.60.23.38] has quit [Remote host closed the
connection]
20:01 < tensai_cirno> oh, thanks
20:07 < aiju> tensai_cirno's perfect Go class
20:07 < Eko> ?
20:07 < tensai_cirno> aiju, lol
20:07 < tensai_cirno> again you ^^'
20:07 < aiju> Eko: video game reference
20:07 < aiju> related to his nick
20:07 < tensai_cirno> Eko, local meme related to me
20:07 < Eko> lol.
20:08 < Eko> Unrelated note: when you join an IRC channel as the first user,
does the server +o you as a mode change or are you already +o via the NAMES reply?
20:08 < aiju> Eko: http://www.youtube.com/watch?v=5wFDWP5JwSM
20:09 < Tv> Eko: i would very much guess that's "undefined", in the way many
things about IRC are -- does anything even say you'll always be an op if you're
first to join..
20:10 < aiju> Eko: does a falling tree make a noise if nobody hears it
20:11 < Eko> The sad part is that I understand some of that japanese
>_<
20:12 < tensai_cirno> Eko, than you're with us ^.^
20:12 < Eko> Tv: RFC2812 says you're the operator when you join (with the
"notable exception" of +channels), and that NAMES is automatically sent
20:12 < Eko> I've now taken 8 years of japanese...  but I still couldn't
read a children's book, because I forgot most of the first 7 of that.
20:12 < Eko> well, at least the latter 5 or 6 years of the first 7.
20:13 < Namegduf> Shouldn't matter
20:13 < Namegduf> Either you'll be an op in the first NAMES reply or you'll
see yourself opped.
20:13 < Namegduf> I think the latter, but I'm not completely sure.
20:13 < Eko> my server's actually doing both, lol
20:13 < Namegduf> My server does neither
20:13 -!- tensai_cirno [~cirno@80.250.216.102] has quit [Quit: Leaving]
20:13 < Eko> it sends the +o to you after TOPIC and before NAMES.
20:13 < Namegduf> Op-on-join-empty-channel was a bad idea since Services
were created
20:14 < Namegduf> But standard servers do, yes.
20:14 < Eko> lol, well, my server currently can't do server linking yet, so
to make it usable it has to have that ^_^
20:15 < Eko> it's coming together rather nicely, though, I think.
20:16 < Eko> Go lends itself nicely to servers, I have thought that since
the beginning and have only become more convinced as I've written them.
20:16 < Namegduf> How're you planning on handling synchronisation of access
to channel data?
20:17 < Namegduf> Assuming you're going to use goroutines-per-client
20:17 < Eko> Namegduf: inter-server or intraserver?
20:17 < Namegduf> Intraserver
20:17 < Eko> I also have a goroutine per channel that farms out data access
and changes
20:17 < Namegduf> Ouch
20:17 < Eko> ouch?
20:17 < Namegduf> I started out using a central owning goroutine, but the
speed was dreadful.
20:18 < Eko> orly?
20:18 < Eko> so far I haven't seen issues.
20:18 < Namegduf> Introducing about 500 psuedo remote users in 20 channels
each was very slow.
20:18 < Eko> yeah, I'm almost to the point where I want to do that test.
20:19 < Namegduf> A single user in a couple of channels won't demonstrate
performance issues; IRCDs on even small network need to do 500ish
20:19 < Namegduf> Large networks, you need to handle tens of thousands of
users.
20:19 < Eko> what's your solution?
20:19 < Eko> and how did you test it?
20:20 -!- lifespective [~espeed@63.246.231.57] has quit [Ping timeout: 264
seconds]
20:20 < Namegduf> A server module which introduced many clients, with
typical data attached and random channel membership.
20:20 < Eko> I feel like these are the reasons that god invented expect.
20:20 < aiju> why don't you just look at actual code
20:20 < Eko> aiju: hmm?
20:20 < aiju> there have to be some open source IRC servers
20:20 < aiju> how they solve the problem
20:20 < Namegduf> They don't.
20:20 < Eko> aiju: not many in Go yet
20:21 < Namegduf> C IRCDs are not concurrent.
20:21 < aiju> select?
20:21 < Namegduf> epoll more typically
20:21 < Namegduf> But yes
20:22 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
quit [Quit: sussman_]
20:22 < Eko> Namegduf: how'd you test the speed?
20:22 < Eko> signing on yourself and comparing speed or what?
20:22 < Eko> (after interoducing the 500 random clients)
20:22 < Namegduf> I measured time to introduce them.
20:22 < Namegduf> I originally set it to either 100,000 clients or 10,000
clients
20:22 < Namegduf> It died
20:23 < Eko> lol
20:23 < Namegduf> I dropped the count until it could introduce and join them
all in under a minute.
20:23 < Eko> I tend to be a pessimist when doing these sorts of tests and
start out small, so that I'm pleasantly surprised with how well it does >:-)
20:23 < Namegduf> 100,000 would be "safely handles all reasonable sizes"
20:23 < Eko> indeed.
20:23 < Namegduf> 10,000 is "safely handles small and medium"
20:24 < Eko> 1000 is safely handles your average, run-of-the-mill
me-and-my-friends IRC network
20:24 < Namegduf> Small, yes.
20:24 < Eko> 100 is why-don't-you-just-use-google-docs-to-chat ;)
20:24 < Namegduf> 100 won't safely handle anything.
20:24 < aiju> 10 is at-least-it-beats-python
20:24 < Eko> indeed.
20:24 < Eko> rofl.
20:25 < Namegduf> It's slow enough that anything making it significantly
slower will make it no longer work.
20:25 < Namegduf> No safety margin, you know?
20:25 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
joined #go-nuts
20:25 -!- sussman_ [~sussman@75-145-165-109-Illinois.hfc.comcastbusiness.net] has
quit [Client Quit]
20:25 < Namegduf> Flood it a little and watch it fold.
20:25 < Namegduf> I got a lot of improvement by switching to mutexes.
20:25 * Eko goes to write a quick battle-test client.
20:26 < Namegduf> It meant I could avoid a per-client write goroutine and
goroutine context switches for most operations.
20:26 < Eko> how long did it take to convert to mutexes?
20:26 < Namegduf> Not too long.  Tricky to handle, though.
20:26 < Eko> seems like it'd be a long, complicated process...
20:26 < Eko> it's really nice handling everything via pseudo RPCs.
20:26 < Namegduf> I ensured they never escaped the core, weren't even
visible outside of it.
20:27 < aiju> what about buffered channels?
20:27 < Namegduf> Not tried.  Why would they help?
20:27 < Namegduf> The problem wasn't concurrency persay; the bulk of things
were uncontended.
20:28 < Eko> I started out having lots of packages, but the class
interdependencies pushed me back to using a single package with all of it
>_<
20:28 < aiju> don't you need to just pass messages between threads?
20:28 < Eko> Namegduf: it could in some circumstances
20:28 < Namegduf> aiju: No.
20:28 < aiju> but?
20:28 < Namegduf> "passing messages between threads" is one solution.
20:29 < Eko> it can allow a bunch of messages coming in at once from clients
to be processed before it gets around to answering channel data questions
20:29 < Eko> so it would be bad for real-time response, could be better for
overall latency
20:29 < Namegduf> aiju: What you need is to have multiple clients
communicating with each other, with code making decisions based on shared state.
20:29 < Namegduf> Passing messages is one way of implementing that, and
fundamentally the only way for the actual communication.
20:29 < Namegduf> The problem is the second half.
20:30 < Namegduf> Passing messages for accessing the shared state was just
way too slow.
20:30 < aiju> hm.  why do you need to access the shared state?
20:30 < Namegduf> To lookup the user to send to.  To do permission checks.
20:30 < Namegduf> To update the state if it's a join/part command.
20:31 < Namegduf> Or some other server state altering command.
20:31 < aiju> i'd just send messages between user/channel goroutines
20:31 < Namegduf> Channel goroutines are a nice idea but damn slow
20:31 < Namegduf> Right now?
20:32 < Namegduf> Read operations are completely unsynchronised.
20:33 < Namegduf> I switched to using atomic write operations, meaning reads
to state are fast.
20:34 < Namegduf> Goroutine context switches are slow, and the metric that's
important is the number of totally unrelated commands you can handle a second, in
terms of CPU.
20:38 -!- binarypie [~binarypie@c-75-68-156-178.hsd1.vt.comcast.net] has quit
[Remote host closed the connection]
20:38 < Namegduf> I feel goroutines managing state are a poor choice, even
though they were the first thing I tried, just because the amount of communication
required is insane.
20:41 < Tv> you definitely don't want to place getter/setter logic in
another goroutine
20:42 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Ping timeout: 272
seconds]
20:50 < Eko> I was under the impression that context switches between
goroutines on the same CPU were relatively cheap, like a function call
20:51 < Namegduf> Channels are slow because of select, as I recall.
20:51 < Namegduf> Maybe they can be made cheap.
20:52 < Namegduf> I assume they'd require at least an atomic write op,
though.
20:52 -!- illya77 [~illya77@155-90-133-95.pool.ukrtel.net] has quit [Quit:
illya77]
20:52 < Eko> of course, I am also doing a really stupid, naive way of
sending the "commands" over the goroutines, and that will have to change
20:52 < Namegduf> I had getter/setter methods on channel/user pointers
20:52 < Eko> I did a benchmark and I can get a raw 600% improvement in
one-way communication by fixing it.
20:53 < zozoR> whats the point of goroutines if they cant be used for heavy
stuff : |
20:53 < Eko> zozoR: from my experience, they can
20:53 < Namegduf> Goroutines provide easier, cheaper concurrency; they're
just not optimal for things where concurrency is not optimal.
20:53 < zozoR> oh ok
20:53 < Namegduf> And that includes shared state which has to be queried a
lot, quickly.
20:54 < Eko> yep.
20:54 < Eko> though some part of me wants to keep using them that way and
let the compilers catch up.
20:54 < zozoR> :D
20:54 < Eko> compilers/optimizers/runtime, that is.
20:54 < Namegduf> Well, for reads, they can't.
20:54 < aiju> i still write evil non-concurrent programs
20:55 < Namegduf> If a goroutine listening to receive a send involves an
atomic write operation
20:55 < Eko> lol
20:55 < Eko> aiju: bad!
20:55 < Tv> frankly, if you have a lot of really-tangled shared state,
you'll have hell growing >1 machine anywa
20:55 < Tv> y
20:55 < aiju> reading UNIX V6 source code right now
20:55 < Namegduf> Then you causing a goroutine to do that might not be able
to beat a read which can avoid it entirely.
20:55 < Namegduf> Why would growing >1 machine be a concern?
20:55 < Eko> I thought mutexes were implemented with channels anyway.
20:55 < Namegduf> No, they aren't.
20:56 < Namegduf> They use a compare-and-swap operation
20:56 < Namegduf> Not sure what happens if that operation fails and it needs
to wait
20:56 < Namegduf> But that's a rare event
20:56 < aiju> implementing mutexes with compare-and-swap is a little odd
20:56 < Namegduf> I assume it's fast?
20:56 < aiju> ain't the point of compare-and-swap to avoid mutexes?  :D
20:57 < Namegduf> They've implemented mutexes which avoid mutexes!  Genius!
20:57 < Namegduf> In this case, "clearly not"
20:57 < aiju> at least Synthesis uses compare-and-swap to avoid mutexes…
20:58 < aiju> but that one is amazingly even more dead than Plan 9 lol
20:58 < Namegduf> Anyways
20:58 < Namegduf> Compare-and-swap to avoid mutexes which are implemented in
compare and swap can make perfect sense.
20:59 < Namegduf> For one, pretty sure even an uncontended mutex does two
compare-and-swap operations.
20:59 < Namegduf> If you can trade for one...
20:59 < Namegduf> For two, you might be able to mutex less; if you
compare-and-swap the data itself reads can avoid having to use the mutex.
20:59 < zozoR> anyway, for the earlier discussion: nsf wrote a
codecompletion daemon, that works with editors (vim, eclipse, perhabs more?) for
those who are interested
21:00 -!- araujo_ [~araujo@190.38.49.178] has joined #go-nuts
21:00 -!- araujo_ [~araujo@190.38.49.178] has quit [Read error: Connection reset
by peer]
21:00 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
21:00 < Namegduf> I think something was said on the mailing list that
suggested that typical mutexes are done in a different (possibly slower) way,
though.
21:00 < brad_> anyone write any kate plugins that will syntax highlight and
fold?
21:02 < kimelto> this discussion is interesting.  I am thinking to limit the
number of concurrent requests to a specific host in my http workers (goroutines).
I wonder what is the best way to achieve this.
21:08 -!- rbraley [~rbraley@ip72-222-134-229.ph.ph.cox.net] has quit [Read error:
Connection reset by peer]
21:11 < Urtie> Sorry to just jump in, maybe I missunderstood something, but
why are channels slow?  If loads of them suffer from C10K, or is throughput bad
for some reason?
21:12 < Namegduf> I'm not sure.
21:12 < Namegduf> I know that a more optimal implementation couldn't be used
due to select support
21:13 < Urtie> They don't want to depend on something like epoll/kpoll then?
So it's when you hit a large number of channels it starts getting bad?
21:13 < Tv> Urtie: it's not really a c10k issue, just that channels have
more overhead than direct data access
21:14 < Tv> Urtie: they're not a scalability issue, but don't use them if
you don't need them
21:14 < Namegduf> It's not got to do with the number of them, no.
21:15 < Namegduf> Channel sends and receives just have significant overhead,
and I suspect that a context switch between a goroutine does, too, although it
could have been mostly in the channel implementation.
21:15 < Urtie> Oh, that's a shame.  I just got worked up yesterday about
using the networked channels to talk to some backend servers.
21:15 < Namegduf> If you have a network in there, it's already going to be
way slower than channels are.
21:15 < Namegduf> They're perfectly usable.
21:16 < kimelto> maybe if the channel is not fast enough for your case it is
not worth it to have mutiple goroutines?
21:16 < kimelto> I mean if the time spent in the goroutine is less than the
time taken to communicate
21:16 < Urtie> I can't really say they're not fast enough - I don't know
that yet - I'm just anal about doing it "the right way".
21:17 < Namegduf> kimelto: In this case the interesting matter was
synchronisation of data access, not distribution of work done
21:20 -!- foocraft [~dsc@78.101.122.198] has quit [Ping timeout: 240 seconds]
21:22 < Namegduf> Urtie: Channels are usually "the right way".  I just think
cases where communication can't be reduced with them are unusual cases in which
other methods are called for.
21:22 < Eko> Namegduf: hmm.  This one's interesting.  I can do 1000
connections, but somewhere between there and 5000 I get this:
21:22 < Eko> [12/25/10 16:22:45] [EROR] Accept: accept tcp 0.0.0.0:6667: too
many open files
21:22 < aiju> Eko: look at your sysconf
21:22 < Namegduf> Sounds like your FD limit is interfering
21:23 < aiju> _SC_OPEN_MAX
21:23 < Eko> can I set that via ulimit?
21:23 < Namegduf> Yes, but it's complicated and annoying.
21:23 < Eko> :(
21:23 < Namegduf> I did it as root, then ran it as root, and it worked.
21:23 < Eko> lol
21:23 < Namegduf> Couldn't figure out how to do it for a regular user.
21:23 < Namegduf> It should have worked but didn't.
21:24 < Eko> I can never find documentation on ulimit, I always have to
google it.
21:24 * Eko checks man bash
21:24 < Eko> ah, ulimit -n.
21:24 < aiju> help ulimit
21:24 < aiju> in bash
21:24 < Eko> 2560 lame.
21:25 < Eko> kyle@strategos ~/dev/hosted/jaid $ ulimit -n 1000000
21:25 < Eko> bash: ulimit: open files: cannot modify limit: Invalid argument
21:25 < Eko> worth a shot...
21:25 < aiju> could also be your limits.conf
21:27 < Eko> root can set his ulimit up to 12288 (trial and error, woot)
21:28 < Eko> I can sudo up to root, change my ulimit, and then su down to my
user.  </kludge>
21:29 < Eko> in practice, will an IRC server ever have that many clients?
If you have more than 10k on your server, it's probably time to start a network
21:30 < Namegduf> You need to handle that many *remote* users.
21:30 < Namegduf> Local, not so much.
21:30 < Eko> indeed.
21:30 < Namegduf> Freenode reports 6k local on the server I'm on.
21:31 < Eko> 1605 on mine, globally 53k or so.
21:31 < Eko> (max 3k locally)
21:36 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Ping timeout: 265
seconds]
21:38 -!- tensai_cirno [~cirno@77.232.15.216] has joined #go-nuts
21:39 < Eko> hmm.
21:39 < Eko> now I"m getting broken pipe when I get around 500
21:41 < KBme> i just had to introduce mutexes
21:41 < KBme> at once it seems i introduced a race ☺
21:46 < Eko> so, my server can process 300 clients in parallel all signing
in and joining 20 channels in 3.5 seconds including all setup and cleanup
21:47 < Eko> I think a lot of the latency is the printfs to the
command-line, lol
21:47 < Eko> it can do 300 users each connecting to 300 channels in 17
seconds.
21:50 -!- femtoo [~femto@95-89-197-28-dynip.superkabel.de] has quit [Read error:
Connection reset by peer]
21:56 < Eko> er, that's 100 channels*
21:57 < Eko> so it's not as bad as I thought.  I do want to do my overhaul
of the inter-client channels though, right now I'm sending one structure with a
string command and map[string]interface{} and I .() the types later, but it turns
out that's really slow.
21:57 < Eko> compared to having individual structures for each "command"
type that are selected via a typeswitch.
21:59 -!- TheMue [~TheMue@p5DDF5F82.dip.t-dialin.net] has quit [Quit: TheMue]
21:59 -!- piranha_ [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has quit [Quit:
Computer has gone to sleep.]
22:03 -!- Fish [~Fish@ARennes-752-1-23-56.w90-32.abo.wanadoo.fr] has quit [Quit:
So Long, and Thanks for All the Fish]
22:09 -!- DerHorst [~Horst@e176102109.adsl.alicedsl.de] has quit [Remote host
closed the connection]
22:45 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
22:45 -!- zozoR [~zozoR@56346ed3.rev.stofanet.dk] has quit [Quit: Morten.  Desu~]
22:46 -!- Scorchin [~Scorchin@host86-181-88-13.range86-181.btcentralplus.com] has
joined #go-nuts
22:48 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
22:48 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
22:50 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
22:50 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
22:53 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
22:53 -!- Nicotux [~AndChat@62.201.142.70] has joined #go-nuts
22:55 -!- Nicotux [~AndChat@62.201.142.70] has quit [Read error: Connection reset
by peer]
22:58 -!- rlab_ [~Miranda@91.200.158.34] has quit [Quit: Miranda IM! Smaller,
Faster, Easier.  http://miranda-im.org]
22:59 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has quit [Quit:
DarthShrine]
23:14 -!- thomas_b [~thomasb@cm-84.215.47.51.getinternet.no] has quit [Ping
timeout: 260 seconds]
23:29 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
23:31 -!- DarthShrine [~angus@58-6-93-222.dyn.iinet.net.au] has joined #go-nuts
23:31 -!- DarthShrine [~angus@58-6-93-222.dyn.iinet.net.au] has quit [Changing
host]
23:31 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has joined
#go-nuts
23:34 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has quit [Client
Quit]
23:53 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
23:55 -!- DarthShrine [~angus@58-6-93-222.dyn.iinet.net.au] has joined #go-nuts
23:55 -!- DarthShrine [~angus@58-6-93-222.dyn.iinet.net.au] has quit [Changing
host]
23:55 -!- DarthShrine [~angus@pdpc/supporter/student/DarthShrine] has joined
#go-nuts
23:56 -!- skejoe [~skejoe@188.114.142.162] has quit [Quit: Lost terminal]
23:58 -!- vdrab [~vdrab@pd3e9b4.kyotnt01.ap.so-net.ne.jp] has joined #go-nuts
--- Log closed Sun Dec 26 00:00:01 2010