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

--- Log opened Sun Apr 17 00:00:34 2011
--- Day changed Sun Apr 17 2011
00:00 -!- wtfness [~dsc@78.100.201.195] has joined #go-nuts
00:02 -!- crodjer [~rohanjain@203.110.240.205] has quit [Remote host closed the
connection]
00:02 < skelterjohn> CS journals are generally one column
00:02 < skelterjohn> conference proceedings are often two column
00:03 -!- nixness [~dsc@78.100.176.127] has quit [Ping timeout: 246 seconds]
00:03 < vsmatck> Ah, you may be right.  I only read random stuff I find.
00:04 < vsmatck> It's nice to be corrected.  :)
00:09 < vsmatck> Also, nice of you to care enough to correct me.
00:10 < exch>
https://github.com/jteeuwen/kitten/blob/master/testdata/kitten.ktn look at it!
look at the beauty and weep
00:10 < exch> a few more of those ports and the script lang will actually be
practical
00:13 -!- chimes [~chimes@24.104.130.118] has quit [Quit: chimes]
00:14 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has quit [Quit:
Computer has gone to sleep.]
00:48 < crazy2be> is there any way i can make mkfifo buffered?
00:48 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-zgyvzvdgacficgjz]
has quit [Ping timeout: 260 seconds]
00:48 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-txmniimemmhktjfc]
has joined #go-nuts
00:58 -!- nettok [~quassel@200.119.185.91] has quit [Ping timeout: 240 seconds]
01:07 -!- katakuna [pie@kjal.demon.co.uk] has quit [Ping timeout: 260 seconds]
01:11 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
01:12 < crazy2be> although that's not really what i want
01:23 -!- shvntr [~shvntr@116.26.139.176] has joined #go-nuts
01:30 < vsmatck> Hm. Channels can't carry multiple values can they?
01:30 < vsmatck> Seems like it'd be nicer if they could.  Then you could ch
<- fun()..  where fun() returns multiple values.
01:31 < vsmatck> I guess the way to do it now is to define a struct for it?
01:31 < vsmatck> A struct for the value of the channel that is.
01:32 < vsmatck> Wait.  I guess the syntax needed for that would conflice,
or at least be confusing, with existing syntax.  So nvm.
01:37 < vsmatck> Actually!  You know what you could do?
01:38 < vsmatck> Have the channel contain a function, and put what you need
inside it via closure.
01:43 -!- krutcha1 [~krutcha@S010600045a27676a.vs.shawcable.net] has quit [Quit:
Leaving]
01:44 < vsmatck> Same difference.  *shrug*
01:46 < vsmatck> http://pastie.org/1802357 That may be a little abusive.
01:55 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
02:00 < crazy2be> hmm does anyone here use gob reliably?
02:01 < crazy2be> i'm trying to use it with the rpc package, but i keep
getting wierd errors
02:01 < crazy2be> then eventually the rpc server crashes
02:01 < crazy2be> i.e.
02:01 < crazy2be> 2011/04/16 20:04:57 rpc: rpc: server cannot decode
request: extra data in buffer
02:01 < crazy2be> 2011/04/16 20:04:57 rpc: rpc: server cannot decode
request: gob: type mismatch in decoder: want struct type rpc.Request; got
non-struct
02:04 < crazy2be> then eventually i end up with
02:04 < crazy2be> 2011/04/16 20:07:20 rpc: rpc: server cannot decode
request: extra data in buffer
02:04 < crazy2be> panic: runtime error: invalid memory address or nil
pointer dereference [recovered]
02:04 < crazy2be> panic: interface conversion: interface is
runtime.errorString, not gob.gobError
02:04 < crazy2be> :(
02:17 < uriel> crazy2be: might be worth reporting to the mailing list with a
simplified test case
02:21 < crazy2be> uriel: Well, possibly, but the json codec would probably
be a better choice in this case anyway
02:22 < crazy2be> and it works fine, save the fact that it returns an error
if there is no error on the RPC
02:23 < crazy2be> my guess is that it's not dealing well with the fact that
i use pipes, which are sparatic input
02:23 < crazy2be> or something
02:25 -!- krolaw [~krolaw@203.100.208.229] has joined #go-nuts
02:27 -!- angasule [~angasule@190.2.33.49] has quit [Remote host closed the
connection]
02:27 -!- vsayer [~vivek@c-67-170-236-166.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
02:34 -!- foocraft [~dsc@78.100.201.195] has quit [Read error: Connection reset by
peer]
02:36 -!- foocraft [~dsc@89.211.214.110] has joined #go-nuts
02:40 < vsmatck> http://pastie.org/1802461 I forgot the closure earlier.
02:41 < vsmatck> That's kind-of nice because you don't have to have an extra
instantiation of a struct sitting there when you're done.
02:58 < crazy2be> hmm bash is eating my "
02:59 < crazy2be> but if i put my " in ', it's all good :)
03:00 < vsmatck> ya bash uses " to group stuff with spaces together in one
argv.
03:01 * vsmatck is a evangelical bash user.  Bourne again.
03:01 -!- foocraft [~dsc@89.211.214.110] has quit [Quit: Leaving]
03:01 < crazy2be> huh
03:02 < crazy2be> when i use jsonrpc to call a method, and it results in an
error, the "result": {}
03:02 < vsmatck> I try to make my humor as esoteric as possible.
http://en.wikipedia.org/wiki/Bash_(Unix_shell)
03:02 < vsmatck> doh
03:02 < crazy2be> but when i use it to call a method, and there is no error,
it gives a number, say 2348, set by the function
03:02 < crazy2be> which might be expected, but i set the result *before* i
return an error
03:03 < crazy2be> since it's actually a dummy in this case
03:05 < kevlar> paste a gist with some example code.
03:07 -!- edsrzf [~chickench@122-61-221-144.jetstream.xtra.co.nz] has quit [Ping
timeout: 252 seconds]
03:10 -!- edsrzf [~chickench@122-61-221-144.jetstream.xtra.co.nz] has joined
#go-nuts
03:15 -!- anticw [~anticw@c-67-169-68-180.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
03:15 -!- anticw [~anticw@c-67-169-68-180.hsd1.ca.comcast.net] has joined #go-nuts
03:19 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-txmniimemmhktjfc]
has quit [Ping timeout: 248 seconds]
03:20 -!- gtaylor [~gtaylor@64-139-83-121-Nashville.hfc.comcastbusiness.net] has
joined #go-nuts
03:24 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-hougitfktvrjchrf]
has joined #go-nuts
03:25 -!- gtaylor [~gtaylor@64-139-83-121-Nashville.hfc.comcastbusiness.net] has
quit [Quit: gtaylor]
03:28 < uriel> interesting, seems that Doozer has been made public:
03:28 < uriel> https://github.com/bmizerany/doozer
03:36 -!- manveru [~manveru@b08s28ur.corenetworks.net] has quit [Quit: ZNC -
http://znc.sourceforge.net]
03:40 < kevlar> is that an open source implementation of Google's Chubby?
03:40 < crazy2be> hmm is there some way to make a reader and a writer into
an io.ReadWriter?
03:40 < crazy2be> like i know i can write a struct myself easily
03:40 < kevlar> crazy2be: not if they're two separate objects
03:41 < kevlar> well, actually, you could make a struct { *Reader, *Writer }
and put them both in it.
03:41 < edsrzf> crazy2be: Create a new variable of type struct { io.Reader;
io.Writer }
03:41 < kevlar> you'd just have to define the close method.
03:41 -!- manveru [~manveru@b08s28ur.corenetworks.net] has joined #go-nuts
03:46 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving]
03:56 < crazy2be> :( won't run on the go playground
03:57 < crazy2be> kevlar: https://gist.github.com/923746
03:57 < crazy2be> panics at the end, but that's not important
04:02 -!- Viriix [~joseph@67.169.172.251] has joined #go-nuts
04:03 < edsrzf> crazy2be: does it not compile, or does it not behave as
expected?
04:04 < crazy2be> edsrzf: I was just showing how jsonrpc returns a {} for
the result if there was an error, and the actual result if the error is nil
04:04 < crazy2be> even if the result has been changed to something other
than it's default value
04:05 < crazy2be> but i was investigating because i get an error from the
json decoder if the error is nil
04:08 <@adg> uriel: yes
04:11 -!- Rakko [~rakko@71-90-73-192.dhcp.ftbg.wi.charter.com] has joined #go-nuts
04:14 -!- krolaw [~krolaw@203.100.208.229] has quit [Quit: krolaw]
04:18 < crazy2be> the wierdest part is the error i'm getting on the client
side: rpc: client protocol error: json: Unmarshal(nil *int)
04:19 -!- crodjer [~rohanjain@203.110.240.205] has joined #go-nuts
04:23 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 246 seconds]
04:33 -!- krolaw [~krolaw@203.100.208.229] has joined #go-nuts
04:35 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Ping timeout: 258 seconds]
04:39 -!- iant [~iant@216.239.45.130] has quit [Ping timeout: 252 seconds]
04:40 < Rakko> Hi goers
04:41 < crazy2be> goers as opposed to stayers?  :P
04:45 -!- fabled [~fabled@83.145.235.194] has joined #go-nuts
04:48 < Rakko> yep
04:56 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has quit [Read error:
Connection reset by peer]
04:56 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
04:59 -!- Viriix [~joseph@67.169.172.251] has left #go-nuts ["Leaving"]
05:01 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined #go-nuts
05:01 -!- mode/#go-nuts [+v iant] by ChanServ
05:03 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-hougitfktvrjchrf]
has quit [Read error: Operation timed out]
05:07 -!- photron [~photron@port-92-201-128-6.dynamic.qsc.de] has joined #go-nuts
05:08 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-miqreviocmjnttwt]
has joined #go-nuts
05:10 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has quit [Ping timeout:
246 seconds]
05:15 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
05:22 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has quit [Read error:
Connection reset by peer]
05:22 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
05:24 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has quit [Read error:
Connection reset by peer]
05:25 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
05:25 -!- juliankrause [~juliankra@74.82.3.88] has joined #go-nuts
05:27 < juliankrause> So I'm playing around with go for the first time and
I'm building a library of common code for two executables as part of it.  And for
some reason I can't get any more symbols to be exposed than the first few I got
into the others ones.  No matter what additional symbols I add to the library file
the two executables don't pick them up.  And the new symbols are capitalized.
05:28 < juliankrause> Doh, Just figured it out as I explained it in full, I
wasn't rebuilding the .a
05:28 < Rakko> cool
05:29 -!- juliankrause [~juliankra@74.82.3.88] has left #go-nuts []
05:32 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has quit [Read error:
Connection reset by peer]
05:33 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
05:35 -!- reds [~reds@pool-74-101-147-57.nycmny.fios.verizon.net] has quit [Read
error: Connection reset by peer]
05:35 -!- reds [~reds@pool-74-101-147-57.nycmny.fios.verizon.net] has joined
#go-nuts
05:44 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
05:44 -!- zozoR [~Morten@56344480.rev.stofanet.dk] has joined #go-nuts
05:47 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has quit [Ping timeout: 246
seconds]
05:48 -!- boscop__ [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
05:49 < Rakko> is anyone working on a web framework in go?
05:49 < Rakko> or compiling to exotic targets like javascript or jvm?
05:49 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has quit [Ping timeout:
246 seconds]
05:49 -!- go^lang [~newblue@119.121.240.213] has quit [Ping timeout: 246 seconds]
05:49 < vsmatck> Hoise made web.go.  Inspired by web.py.  It's decent.
05:50 < vsmatck> There's a go interpreter for the JVM.  I know nothing about
it other than it exists.
05:52 -!- boscop__ [~boscop@f055210242.adsl.alicedsl.de] has quit [Ping timeout:
246 seconds]
05:53 < dforsyth> Rakko: check out the go dashboard
05:53 < Rakko> oh, cool
05:53 < Rakko> that's right...  I ran across hoisie earlier
05:54 < vsmatck> I can't find jvm go on mailing list.  Don't take my word
for it.  I recall reading something at work the other day about it but I live in a
tired stupor.
05:54 < Rakko> thanks
05:59 < edsrzf> I haven't heard anything about Go for JVM
06:11 -!- sqqqrly [~dohlemach@c-75-67-216-29.hsd1.nh.comcast.net] has joined
#go-nuts
06:14 -!- crodjer [~rohanjain@203.110.240.205] has quit [Remote host closed the
connection]
06:19 < crazy2be> Rakko: I'm working on a multi-process, distributed,
modular, fault-tolerant web framework, but it's not released
06:19 < crazy2be> also how can i return a []string using the rpc framework?
06:20 < crazy2be> i cannot do make(*[]string, 10), or &make([]string, 10)
06:20 < crazy2be> and if i set the return type as a []string, rpc won't pick
up on it
06:21 < crazy2be> ah nvm
06:21 < crazy2be> i was being stupid
06:21 < crazy2be> it does work with a []string, i had just renamed a type,
created a new type with the old name, and forgetten to rename all references
06:22 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
06:25 -!- firwen [~firwen@gex01-1-78-234-55-225.fbx.proxad.net] has joined
#go-nuts
06:25 < Rakko> crazy2be: cool
06:25 < Rakko> dforsyth: http://godashboard.appspot.com/ ?
06:27 < crazy2be> what does *running = mod.IsRunning() do?
06:27 < crazy2be> is it the same as running = &mod.IsRunning()?
06:32 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts
06:33 < rm445> crazy2be: there's a funny character on your 1st line, so I
can't see for sure what you're asking - is it the difference between *foo=bar and
foo=&bar?
06:34 < rm445> If so, the answer is pointer dereferencing - the first puts a
value at the location pointed to by foo, the second puts an address in foo itself.
06:35 -!- niemeyer [~niemeyer@189-30-249-127.pltce701.dsl.brasiltelecom.net.br]
has quit [Ping timeout: 240 seconds]
06:36 < crazy2be> rm445: So the difference is that one copies, and another
does not?
06:45 < dforsyth> Rakko: yes
06:47 < crazy2be> and then my next question is, why can i do *running =
mod.IsRunning(), but not running = &mod.IsRunning()?
06:48 < crazy2be> where IsRunning() returns bool
06:49 < rm445> crazy2be: right, the thing with Go is, quite often you don't
have to think about pointers too much and everything works.  But to understand
what's going on you probably have to understand what pointers do.
06:50 < rm445> When you say var foo *int, you get a pointer to int.
06:50 < rm445> That means you store the address of an int value in foo, not
an int itself.
06:51 < rm445> so you could do var bar int = 9; foo = &bar
06:51 < rm445> that sets the value of foo to the address of bar
06:51 < crazy2be> yes, although it's obfusicated somewhat by interfaces
06:52 < crazy2be> since structs are almost always passed as pointers
06:52 < crazy2be> but interfaces are almost always passed as "values"
06:52 < crazy2be> although they are actually pointers
06:52 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
06:52 < rm445> now doing *foo = 7 sets bar (and *foo) to 7
06:53 < crazy2be> rm445: but doing foo = &7 (invalid) would set foo to 7,
but not bar?
06:53 < crazy2be> and they would then be unlinked?
06:54 < rm445> yes, you can make the value of foo be some other thing and it
would no longer point to bar.
06:54 -!- dchest [~dchest@109.228.79.14] has joined #go-nuts
06:54 < rm445> foo is just a variable, a few bytes big enough to hold an
address.  You can write addresses (of the right type) to it.
06:57 < rm445> var foo *int gets you a few bytes for an address but it
doesn't give you any extra space to actually store an int in.  In Go (and other
memory-managed languages) you often don't have to worry about getting that
storage, but you have to be aware of the issue.
06:59 -!- dju__ [dju@fsf/member/dju] has joined #go-nuts
06:59 < rm445> when mod.IsRunning returns a boolean value, you have to put
it somewhere - it isn't a variable in storage but a value returned from a function
(generally popped off a stack).
07:00 < aiju> &7 is invalid?
07:00 < aiju> really odd
07:00 < rm445> so if running is a pointer to bool, you can dereference it,
i.e.  find the actual storage for a boolean it points to, and set that value to
true or false.
07:01 < rm445> but I suspect what you really want it just running =
mod.IsRunning
07:02 < crazy2be> well, yes, that's what i would like to use
07:02 < rm445> aiju: ISTR that the Go team thinks it is conceptually
invalid.
07:02 < crazy2be> but the rpc package needs a pointer
07:02 < aiju> rm445: weird
07:03 < aiju> because it works for composite literals
07:03 -!- dju_ [dju@fsf/member/dju] has quit [Ping timeout: 260 seconds]
07:03 < rm445> you could make &7 allocate an int and return the adress of
it, but (my interpretation of what I read is) that that is considered to be doing
too much behind the scenes.
07:03 < aiju> rm445: well, &Foo{...} does exactly that
07:03 < aiju> so it's yet another silly inconsistency
07:04 < rm445> maybe.  I think &int{7} should work but I'm less sure about
&7
07:04 < aiju> int{7} is invalid
07:05 < rm445> I thought so though I wasn't sure, as I say I think it should
work.
07:05 < crazy2be> int(7)?
07:06 < rm445> squiggly brackets
07:06 < crazy2be> well &int{7} is kinda broken anyway
07:06 < crazy2be> with a struct, it makes sence
07:06 < crazy2be> because you use pointers for them all over the place
07:07 < crazy2be> they are big objects, expensive to copy, so you use
&Struct{...} in your NewStruct() function, among other places
07:07 < crazy2be> but you rarely want to do &int{..}, because ints are
usually about the same size as a pointer
07:08 < crazy2be> so you are just adding an indirection
07:09 < rm445> the syntax saves you doing var s struct foo; s.a=1; s.b=2;
s.c=3; return &s
07:09 -!- coudX [~coud@81.25.16.87] has joined #go-nuts
07:09 < crazy2be> exactly
07:09 < crazy2be> i mean, there is hardly any usage case for &7
07:09 < rm445> I think type myInt int; foo := &myInt{7} probably works
07:10 < rm445> so not having foo := &int{7} is a bit inconsistent.
07:10 -!- coudX [~coud@81.25.16.87] has quit [Read error: Connection reset by
peer]
07:10 < aiju> crazy2be: it's still a fucking inconsistency and there *are*
use cases
07:10 -!- go^lang [~newblue@116.19.133.125] has joined #go-nuts
07:11 < crazy2be> rm445: gives "invalid type for composite literal: mytype"
for me
07:11 < aiju> }:wq
07:11 < aiju> oh sorry
07:11 < Rakko> mustachevim
07:11 < aiju> haha
07:12 < crazy2be> aiju: It's not an inconsitancy at all, ints are integral
types, structs are treated differently
07:12 < crazy2be> aiju: It's the same for all the other builtin types
07:12 < aiju> it sure is inconsistent, just because it makes sense in some
way doesn't seem it's inconsistent
07:12 < aiju> +not
07:12 < crazy2be> only structs have the special behavior
07:13 < aiju> yeah
07:13 < crazy2be> you can't do &[]int{34, 35} either
07:13 < aiju> yup, seems completely arbitrary to me
07:14 < crazy2be> on another note, rpc keeps crashing
07:15 < crazy2be> with the entire stack trace for the crashing thread in
library code
07:15 < crazy2be> no idea how to debug this one
07:25 < crazy2be> hrmph
07:29 < crazy2be> os.Wait() just seems to be totally wrong
07:29 < crazy2be> oh well
07:29 < crazy2be> night all
07:29 < Rakko> night
07:44 -!- crazy2be [~crazy2be@d209-89-248-73.abhsia.telus.net] has quit [Ping
timeout: 246 seconds]
07:44 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|]
07:45 -!- crodjer [~rohanjain@203.110.240.205] has joined #go-nuts
07:46 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has joined #go-nuts
07:46 -!- ExtraSpice [XtraSpice@88.118.35.153] has joined #go-nuts
07:54 -!- krolaw [~krolaw@203.100.208.229] has quit [Quit: krolaw]
07:54 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
07:54 -!- randfur [~androirc@58.145.148.89] has joined #go-nuts
07:58 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has quit [Quit:
Leaving.]
07:58 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
07:59 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has quit [Ping timeout: 246
seconds]
08:00 -!- boscop_ [~boscop@f055210242.adsl.alicedsl.de] has quit [Read error:
Connection reset by peer]
08:01 -!- huin [~huin@91.85.185.181] has joined #go-nuts
08:01 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has joined #go-nuts
08:02 -!- randfur [~androirc@58.145.148.89] has quit [Ping timeout: 246 seconds]
08:04 -!- krolaw [~krolaw@203.100.208.229] has joined #go-nuts
08:06 -!- boscop [~boscop@f055210242.adsl.alicedsl.de] has quit [Ping timeout: 250
seconds]
08:11 -!- femtoo [~femto@95-89-249-242-dynip.superkabel.de] has joined #go-nuts
08:15 -!- ShadowIce
[~pyoro@HSI-KBW-109-193-120-162.hsi7.kabel-badenwuerttemberg.de] has joined
#go-nuts
08:15 -!- ShadowIce
[~pyoro@HSI-KBW-109-193-120-162.hsi7.kabel-badenwuerttemberg.de] has quit
[Changing host]
08:15 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
08:18 -!- Rakko [~rakko@71-90-73-192.dhcp.ftbg.wi.charter.com] has quit [Quit:
Leaving]
08:22 -!- napsy [~luka@APN-122-22-185-gprs.simobil.net] has joined #go-nuts
08:29 -!- hopso [58734516@gateway/web/freenode/ip.88.115.69.22] has joined
#go-nuts
08:42 -!- napsy [~luka@APN-122-22-185-gprs.simobil.net] has quit [Ping timeout:
260 seconds]
08:56 -!- aa_ [~ali@pida.vm.bytemark.co.uk] has joined #go-nuts
08:57 < aa_> hi everyone :)
08:59 -!- Fish [~Fish@bus77-2-82-244-150-190.fbx.proxad.net] has joined #go-nuts
09:00 -!- napsy [~luka@APN-122-85-43-gprs.simobil.net] has joined #go-nuts
09:00 -!- go^lang [~newblue@116.19.133.125] has quit [Ping timeout: 240 seconds]
09:00 -!- XenoPhoenix [~Xeno@cpc13-aztw24-2-0-cust23.aztw.cable.virginmedia.com]
has joined #go-nuts
09:04 < jessta_> hi
09:11 -!- crodjer [~rohanjain@203.110.240.205] has quit [Quit: Leaving]
09:11 -!- crodjer [~rohanjain@203.110.240.205] has joined #go-nuts
09:12 -!- rlab [~Miranda@149-167-113-92.pool.ukrtel.net] has joined #go-nuts
09:22 -!- crodjer [~rohanjain@203.110.240.205] has quit [Remote host closed the
connection]
09:24 -!- crodjer [~rohanjain@203.110.240.205] has joined #go-nuts
09:42 -!- edsrzf [~chickench@122-61-221-144.jetstream.xtra.co.nz] has quit [Remote
host closed the connection]
09:58 -!- katakuna [~pie@kjal.demon.co.uk] has joined #go-nuts
09:58 -!- hopso [58734516@gateway/web/freenode/ip.88.115.69.22] has quit [Quit:
Page closed]
09:59 -!- arun_ [~arun@unaffiliated/sindian] has quit [Ping timeout: 246 seconds]
10:01 -!- femtooo [~femto@95-89-249-242-dynip.superkabel.de] has joined #go-nuts
10:04 -!- femtoo [~femto@95-89-249-242-dynip.superkabel.de] has quit [Ping
timeout: 246 seconds]
10:09 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-143.clienti.tiscali.it] has
joined #go-nuts
10:12 -!- arun_ [~arun@unaffiliated/sindian] has joined #go-nuts
10:14 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
10:30 -!- coudX [~coud@81.25.16.87] has joined #go-nuts
10:31 -!- krolaw [~krolaw@203.100.208.229] has quit [Quit: krolaw]
10:51 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
11:08 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has quit [Ping
timeout: 250 seconds]
11:13 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Quit:
Leaving.]
11:17 -!- coudXX [~coud@81.25.16.87] has joined #go-nuts
11:17 -!- coudX [~coud@81.25.16.87] has quit [Read error: Connection reset by
peer]
11:17 -!- coudX [~coud@81.25.16.87] has joined #go-nuts
11:17 -!- coudXX [~coud@81.25.16.87] has quit [Read error: Connection reset by
peer]
11:30 -!- ExtraSpice [XtraSpice@88.118.35.153] has quit [Ping timeout: 276
seconds]
11:33 -!- saschpe [~quassel@opensuse/member/saschpe] has joined #go-nuts
11:44 -!- ExtraSpice [XtraSpice@88.118.35.153] has joined #go-nuts
11:47 -!- napsy [~luka@APN-122-85-43-gprs.simobil.net] has quit [Ping timeout: 252
seconds]
11:47 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
11:54 -!- firwen [~firwen@gex01-1-78-234-55-225.fbx.proxad.net] has quit [Quit:
Geek insindeĀ®]
12:08 -!- angasule [~angasule@190.2.33.49] has joined #go-nuts
12:13 -!- rutkowski [~adrian@078088207185.walbrzych.vectranet.pl] has joined
#go-nuts
12:16 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-151-94.clienti.tiscali.it] has
joined #go-nuts
12:19 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-143.clienti.tiscali.it] has
quit [Ping timeout: 252 seconds]
12:21 -!- boscop [~boscop@f055020115.adsl.alicedsl.de] has joined #go-nuts
12:24 -!- bXi [bluepunk@irssi.co.uk] has quit [Ping timeout: 240 seconds]
12:25 -!- bXi [bluepunk@irssi.co.uk] has joined #go-nuts
12:26 -!- photron [~photron@port-92-201-128-6.dynamic.qsc.de] has quit [Ping
timeout: 240 seconds]
12:36 -!- GeertJohan [~Squarc@D978EC5D.cm-3-1d.dynamic.ziggo.nl] has joined
#go-nuts
12:37 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
12:38 -!- msmul [~msmul@ip70-162-22-180.ph.ph.cox.net] has joined #go-nuts
12:43 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Read error: Connection reset by peer]
12:45 -!- msmul [~msmul@ip70-162-22-180.ph.ph.cox.net] has left #go-nuts []
13:19 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
13:30 -!- Chopinnn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has joined #go-nuts
13:31 -!- Chopinnn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has quit [Read
error: Connection reset by peer]
13:31 -!- Chopinn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has quit [Read error:
Connection reset by peer]
13:32 -!- Chopinn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has joined #go-nuts
13:36 -!- karpar [~user@112.96.225.27] has joined #go-nuts
13:42 -!- TheMue [~TheMue@p5DDF53CD.dip.t-dialin.net] has joined #go-nuts
13:42 < taruti> any good ideas on implementing large state machines?
13:44 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-182-95.clienti.tiscali.it] has
joined #go-nuts
13:45 <@adg> i'm good at writing programs that generate state machines
13:45 <@adg> ;)
13:47 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-151-94.clienti.tiscali.it] has
quit [Ping timeout: 264 seconds]
13:51 < nsf> taruti: http://www.complang.org/ragel/
13:52 < nsf> trunk version supports Go
13:53 < nsf> it also supports low level language using which you can
describe states directly
13:53 < nsf> and therefore form state machines
13:54 < taruti> thanks
14:16 -!- zozoR [~Morten@56344480.rev.stofanet.dk] has quit [Remote host closed
the connection]
14:20 < scyth> I never understood the difference between state machines and
alghorithms
14:21 < nsf> I never wanted to know if there is any difference
14:21 < nsf> :)
14:22 < scyth> :)
14:22 < scyth> well, graph representations look different :)
14:23 < scyth> lots of bubbles here and there :)
14:27 -!- d_m [~d_m@64.186.128.169] has quit [Ping timeout: 276 seconds]
14:28 -!- d_m [~d_m@64.186.128.169] has joined #go-nuts
14:29 -!- Fish [~Fish@bus77-2-82-244-150-190.fbx.proxad.net] has quit [Quit: So
Long, and Thanks for All the Fish]
14:30 -!- coudXX [~coud@81.25.16.87] has joined #go-nuts
14:30 -!- coudX [~coud@81.25.16.87] has quit [Read error: Connection reset by
peer]
14:33 -!- karpar [~user@112.96.225.27] has quit [Quit: Yow!  Legally-imposed
CULTURE-reduction is CABBAGE-BRAINED!]
14:37 -!- firwen [~firwen@78.234.55.225] has joined #go-nuts
14:37 -!- shvntr [~shvntr@116.26.139.176] has quit [Quit: leaving]
14:49 < skelterjohn> a state machine is one sort of algorithm
14:49 < skelterjohn> that's all
15:02 < Namegduf> State machines have a specific class of algorithm they can
represent
15:03 < Namegduf> Which is why they can be interesting
15:03 < aiju> isn't any algorithm is a state machine?
15:03 < Namegduf> But that's about it.
15:03 < aiju> -is
15:03 <@adg> aiju: no
15:03 < Namegduf> No.
15:03 < aiju> example of one which isn't?
15:03 < Namegduf> Checking whether the count of brackets in a line matches.
15:03 <@adg> this is what people mean when they say "state machine"
http://en.wikipedia.org/wiki/Deterministic_finite-state_machine
15:03 < aiju> i never said it had to be finit
15:03 < aiju> +e
15:04 < skelterjohn> a pushdown automaton can do what Namegduf says
15:04 <@adg> anything that can count isn't really a state machine
15:04 < skelterjohn> i was just googling about this
15:04 < skelterjohn> http://portal.acm.org/citation.cfm?id=1739947.1740155
15:04 < aiju> just have one state for each number
15:04 < skelterjohn> adg: isn't a *finite* state machine
15:04 < skelterjohn> aiju: the finite issue comes up there
15:04 <@adg> maybe you can stretch teh definition forever, but then what'
sthe point of describing anything as a "State machine" ?
15:05 < Namegduf> My example is totally relevant, because it's why a lexer
can't decide not to insert semicolons if there are unmatched brackets.
15:05 < Namegduf> Well, shouldn't.
15:05 < aiju> adg: it's yet another computing model
15:06 < skelterjohn> people talk about state machines, people talk about
finite state machines, people talk about pushdown automata
15:06 < skelterjohn> all are state machines
15:07 < Namegduf> A pushdown automaton is about as much a state machine as a
Turing machine, yes?
15:07 < Namegduf> I'm wondering if there's some distinction that makes
"state machine" still useful or if it's just been reduced to meaninglessness
15:07 < Namegduf> I think the meaning was clear enough, anyway.
15:08 < aiju> Namegduf: "turing machine" isn't meaningless either
15:09 -!- foocraft [~dsc@89.211.214.110] has joined #go-nuts
15:10 < skelterjohn> it's not clear to me, but i think that paper i linked
to makes a connection between some type of turing machine and some type of
"two-way nondeterministic pushdown automaton"
15:10 < skelterjohn> but that's not my area of expertise...
15:10 < skelterjohn> so it's hard for me to be sure
15:10 < Namegduf> Two stack pushdown automatons are equivalent to Turing
machines
15:10 < Namegduf> I forget how/why, I just remember that they are.
15:10 < skelterjohn> cool
15:11 -!- nixness [~dsc@78.100.177.99] has joined #go-nuts
15:11 < aiju> i think a finite state machine is equivalent to a limited band
Turing machine
15:11 < aiju> or whatever they were called
15:12 < skelterjohn> i can believe that
15:12 < skelterjohn> a finite state machine can recognize any finite
language
15:12 < aiju> so any C program is equivalent to a finite state machine
15:12 < skelterjohn> finite length language
15:12 < skelterjohn> no...
15:13 < skelterjohn> well
15:13 < skelterjohn> because memory is limited?
15:13 < skelterjohn> but memory limits aren't part of the C language
15:13 < skelterjohn> that's an implementation detail
15:13 < aiju> i mean real C programs
15:13 <@adg> put it this way: if the system has finite storage, you can
express the system as a finite state machine
15:14 < skelterjohn> aiju: not a useful distinction when talking about
computational power =p
15:14 <@adg> but that's a bit of a perversion of the concept.  the state
machine would consist of every possible state of that system
15:14 -!- foocraft [~dsc@89.211.214.110] has quit [Ping timeout: 250 seconds]
15:15 <@adg> and even a megabyte of ram has 256^1000000 possible states
15:15 <@adg> erk, one too many zeros there
15:15 < aiju> hell, that's theory man
15:15 <@adg> most c programs are not state machines
15:19 -!- niemeyer [~niemeyer@189.27.131.89.dynamic.adsl.gvt.net.br] has joined
#go-nuts
15:23 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has quit [Quit:
Leaving]
15:30 * ww likes state machines...  doesn't use them often enough
15:31 < angasule> hmm, there are no isAlpha or isNumeric, etc functions for
strings?
15:33 < exch> angasule: try in the unicode package
15:33 < exch> they operate on individual unicode runes though, not entire
strings
15:35 < ww> angasule: i often do if _, err := strconv.Atoi(s); err != nil {
bork }
15:35 < ww> but that's when the whole string is expected to be a
representation of an integer so might not work for your case
15:42 -!- niemeyer [~niemeyer@189.27.131.89.dynamic.adsl.gvt.net.br] has quit
[Ping timeout: 240 seconds]
15:45 -!- Viriix [~joseph@c-67-169-172-251.hsd1.ca.comcast.net] has joined
#go-nuts
15:47 -!- Fish [~Fish@9fans.fr] has joined #go-nuts
15:51 < ww> you know what the best thing about Go is?  i've not had a single
problem handling unicode
15:51 * ww is so tired of python throwing random errors as soon as you try to put
real human-created text through it
15:55 < uriel> the state of UTF-8 support in most languages is quite
depressing
15:55 < uriel> Python is beyond ridiculous in this, and python3 is not much
better (and perhaps worse)
15:58 < aiju> python's utf-8 support is totally broken
15:58 < aiju> because they got utf-8 TOTALLY wrong
15:58 < aiju> almost as bad as windows
15:58 < uriel> or java *yuck*
15:58 < uriel> (windows and java got it almost equally bad, it is hard to
tell which one is worse)
16:00 -!- rutkowski [~adrian@078088207185.walbrzych.vectranet.pl] has quit [Quit:
WeeChat 0.3.3-dev]
16:02 < aiju> uriel: i can't imagine any implementation being worse than
windows
16:04 < uriel> http://en.wikipedia.org/wiki/Utf-8#Modified_UTF-8
16:06 < aiju> uriel: as long as it doesn't put BOMs in there ..
16:10 < aiju> uriel: i can imagine C# putting BOMs in strings or something
16:30 -!- crazy2be [~crazy2be@d209-89-248-73.abhsia.telus.net] has joined #go-nuts
16:33 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts
16:44 < plexdev> http://is.gd/h8QlWD by [Dave Cheney] in
go/src/pkg/websocket/ -- websocket: fix socket leak in test
16:44 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-155-183.clienti.tiscali.it] has
joined #go-nuts
16:47 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-182-95.clienti.tiscali.it] has
quit [Ping timeout: 258 seconds]
16:49 < Namegduf> I wish there were fewer things which index by codepoint.
16:49 < Namegduf> It just isn't reliable.
16:52 < aiju> "index by codepoint"?
16:53 -!- nixness [~dsc@78.100.177.99] has quit [Ping timeout: 260 seconds]
16:55 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-155-183.clienti.tiscali.it] has
quit [Ping timeout: 252 seconds]
16:57 < uriel> and index by magic pixie dust instead?
17:05 < Namegduf> Either do the painful process of actually indexing by
character correctly, including combining marks and other magic, or don't index at
all because you clearly don't need it to actually work reliably.
17:05 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts
17:05 < aiju> sadly, unicode is pretty much insane
17:06 < exch> yea..  everyone should just learn english
17:06 < aiju> exch: that too, but still
17:06 < aiju> zero-width spaces, combining marks etc
17:10 < uriel> exch: its got nothing to do with learning english, so spare
us the strawman
17:11 -!- angasule [~angasule@190.2.33.49] has quit [Remote host closed the
connection]
17:11 < crazy2be> hrmph
17:12 < crazy2be> durp
17:12 < crazy2be> waitmsg.WaitStatus.Exited() returns true always if you
call os.Wait() with WNOHANG
17:13 < exch> uriel: strawmen are prevalent here.  Just keeping up with the
trend
17:13 < uriel> heh
17:21 < nsf> http://ompldr.org/vOGI1bg/2011-04-17-232615_956x382_scrot.png
17:21 < nsf> yay!  first valid code generated by crawl
17:22 < nsf> hello world without \n at the end
17:22 < nsf> :D
17:22 < aiju> you can just do \\n
17:22 < nsf> (escaping code is missing)
17:22 < nsf> aiju: no, it won't work
17:22 < aiju> why not?
17:22 < nsf> hm, it works
17:22 < nsf> interesting :)
17:23 < nsf> ah, of course it works
17:23 < nsf> anyways..
17:27 < crazy2be> nsf: What is that?
17:27 < nsf> a compiler for the programming language I'm working on
17:27 < crazy2be> compiles to C?
17:27 < nsf> uses C as a backend for now
17:27 < nsf> yeah
17:28 < nsf> looks a lot like Go (syntax)
17:28 < uriel> shouldn't it use Go? uhu?
17:28 < nsf> but bits here and there are different
17:28 < nsf> uriel: no
17:28 < |Craig|> I don't think go is a good language to compile to for most
things
17:29 < crazy2be> C has the best support for libraries and such
17:29 < crazy2be> good language to compile to
17:29 < nsf> yeah, for example in code generation I use void* for every
pointer type
17:29 < nsf> because the actual pointer type is only required for type
checking
17:29 < nsf> in Go it will be ugly
17:29 < nsf> and Go has GC
17:29 < nsf> my language has no GC
17:30 < crazy2be> nsf: What is it designed for?
17:30 < crazy2be> what usage case?
17:30 < nsf> as a C with Go syntax for now
17:30 < nsf> it is unfinished
17:31 < nsf> and I have plans beyond that
17:31 < nsf> we'll see
17:39 < firwen> do you have already tried vala or Genie nsf ?
17:39 < nsf> of course
17:39 < firwen> :)
17:39 < aiju> vala?
17:39 < nsf> sadly they repeat C's mistakes to a large extent
17:39 < aiju> vala is based on GTK
17:39 < nsf> and besides that yeah
17:39 < nsf> they use glib's object model
17:39 < nsf> I clearly don't want that
17:40 < crazy2be> hmm
17:40 < crazy2be> how do you catch signals with go?
17:40 < aiju> os/signal
17:40 -!- Viriix [~joseph@c-67-169-172-251.hsd1.ca.comcast.net] has left #go-nuts
["Leaving"]
17:40 < crazy2be> hm
17:40 < firwen> the C backend has some advantage like the protability of the
intermediate code
17:40 < crazy2be> how does that work for things like SIGINT?
17:41 < firwen> but in terms of introspection / reflectivity, it's not
perfect
17:41 < crazy2be> since it closes the program, how can i handle it?
17:41 < nsf> firwen: I use C for now, because it's easy to implement it
17:41 < nsf> later I'll switch to LLVM most likely
17:41 < firwen> yeah good choice
17:41 < aiju> free C++ madness included
17:42 < uriel> yuck
17:42 < nsf> hehe, and yeah, crawl is written in C++ :D
17:42 < nsf> although, it's very C-like
17:42 < nsf> I don't even use references if it's possible to avoid them
17:43 < nsf> and I think I have only one class that has copy constructor
17:43 < nsf> :D
17:43 < firwen> do you have a github or something, just to look over
17:43 -!- coudXX [~coud@81.25.16.87] has quit [Read error: Connection reset by
peer]
17:43 -!- coudXX [~coud@81.25.16.87] has joined #go-nuts
17:43 < aiju> my C++ code has only classes to interface with other C++ code
17:43 < nsf> no, not at the moment
17:44 < nsf> crawl is far from usable
17:44 < aiju> s/has only/only has/
17:44 < crazy2be> huh
17:44 -!- coudXX [~coud@81.25.16.87] has quit [Read error: Connection reset by
peer]
17:44 < crazy2be> that's cool how os/signal works
17:46 < nsf> firwen: I have an irc channel though, but nothing useful
happens there as well, if you're interested: #crawlang
17:47 < firwen> just for fun ^^
17:49 < crazy2be> i can never remember if it's key, value := range or value,
key := range
17:51 < exch> either one
17:51 < exch> the first copies the values though
17:51 < exch> if I remember correctly, that is
17:58 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
18:07 -!- `micro` [~quassel@96-42-224-166.dhcp.roch.mn.charter.com] has quit [Ping
timeout: 246 seconds]
18:09 -!- Chopinnn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has joined #go-nuts
18:09 -!- Chopinnn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has quit [Read
error: Connection reset by peer]
18:09 -!- Chopinn [~Chopin@ti0018a380-dhcp0864.bb.online.no] has quit [Read error:
Connection reset by peer]
18:10 < uriel> exch: I'm not sure what you mean, but I don't think it can be
either
18:11 < exch> oh dur.  I missed the 'value, ' bit in the second part
18:11 -!- irclol [irclol@fettemama.org] has joined #go-nuts
18:11 -!- micromatikal [~quassel@96-42-224-166.dhcp.roch.mn.charter.com] has
joined #go-nuts
18:17 < plexdev> http://is.gd/5oY17r by [Russ Cox] in go/lib/codereview/ --
codereview: add 'hg undo' command
18:17 < plexdev> http://is.gd/GnQ8eV by [Russ Cox] in
go/src/pkg/runtime/arm/ -- runtime: fix arm5 softfloat
18:18 -!- micromatikal [~quassel@96-42-224-166.dhcp.roch.mn.charter.com] has quit
[Ping timeout: 246 seconds]
18:20 < skelterjohn> it's always key, value := range
18:20 < skelterjohn> whether its a slice or a map
18:23 < str1ngs> is there a ways to do with with just slice notation .
foo[:len(foo)-2]
18:26 < crazy2be> srt1ngs: In python it would be foo[:-2] i think, but afaik
that doens't work in go
18:26 < str1ngs> yes that doesn not work it puts it out of bounds
18:27 < str1ngs> I'll read the spec see if I get get a better grasp on the
notation
18:28 < uriel> crazy2be: the way I remember it is: the key comes before the
value, because to get the value you first need the key
18:28 < uriel> (in your mind think key -> value; or d[key] = value)
18:29 < crazy2be> uriel: That makes sence, although the last one could be
value = d[key]
18:29 < crazy2be> :P
18:29 < uriel> crazy2be: don't think of that ;P
18:29 < uriel> the key points to -> the value
18:33 < str1ngs> I cant see away around foo[0:len(foo)-2] so I'll just keep
it this way I guess
18:34 < uriel> str1ngs: there is nothing wrong with that
18:34 < str1ngs> no its ok, was trying to get a better grasp on the notation
18:35 < str1ngs> its alot better then what I orginally had lol
18:35 < crazy2be> it's mostly annoying when you have
r.URL.RawPath[:len(r.URL.RawPath)-2]
18:35 < crazy2be> but then you can just use a tempoary
18:38 < str1ngs> filepath.Glob is awesome
18:48 < groves> I'm reading a bunch of values from an io.Reader, which I'd
like to let a caller process as they're read instead of returning all of them.  Is
a channel the go way to express that kind of iteration?
18:49 < groves> I don't need synchronization, so it seems like there's some
needless overhead there.  However, a channel can be used in range, which feels
more idiomatic than defining my own iterator interface.
18:54 -!- niemeyer [~niemeyer@189.27.131.89.dynamic.adsl.gvt.net.br] has joined
#go-nuts
18:54 < TheMue> groves: If it's pure serial you don't need channels and
goroutines.
18:55 < groves> Is there a way to use range for my own data without
channels?
18:55 < TheMue> groves: But if multiple goroutines can handle each element
in parallel - maybe processing lasts longer than reading - then it's worth the
effort.
18:55 < aiju> TheMue: goroutines are not a mere performance device
18:55 < groves> Or should I not be worried about inflicting my own Iterator
interface on people?
18:55 < TheMue> aiju: I know
18:55 < aiju> i'd argue that channels are the idiomatic to do that
18:55 < aiju> +way
18:55 -!- angasule [~angasule@190.2.33.49] has joined #go-nuts
18:57 < TheMue> I would split reading and processing into two goroutines and
pass the data via a channel.
18:58 < TheMue> And in case that delivery is faster then processing using
multiple goroutines.
18:58 < aa_> I'm a totaly newbie so sorry if this sounds awful, but I don't
understand these constructorish literal things, like in the tutorial they use
File() can someone explain this please?
18:59 < aiju> File() is a function
18:59 < aa_> oh
19:00 < groves> How should I pass errors back to the readers if something
blows up in io or decoding?  It looks like channels only pass a single type, so I
can't use the value, err pattern that most go stuff uses.  Does that mean I define
a struct with the value and error or?
19:01 < aa_> aiju:
http://golang.org/doc/effective_go.html#composite_literals
19:01 < aiju> aa_: oh right
19:01 < aiju> aa_: it's really a constructor
19:01 < groves> That feels weird with multiple goroutines reading from the
channel, since only one will see the error.  Maybe return two channels, one with
the values, and a second that will pass back a single error if the first channel
closed because of one?
19:02 < aa_> aiju: does it return the same thing as new(File) ?
19:02 < aiju> no
19:02 < aiju> new(File) returns an empty *File
19:02 < aiju> new(File) is the same as &File{}
19:03 < aa_> ok, cool, thanks, makes sense
19:09 -!- niemeyer_ [~niemeyer@189.27.129.13.dynamic.adsl.gvt.net.br] has joined
#go-nuts
19:10 < crazy2be> groves: That seems to be how it is done in other places
19:10 < groves> Cool, where are you seeing this?
19:10 < crazy2be> then the goroutine can use select{} to chose a channel
19:10 < crazy2be> and if there is an error in the error channel it can
process that
19:11 < crazy2be> well, let's see if i can find a specific example
19:11 < crazy2be> path/filepath uses an error channel for the walkers, but
that's not exactly the same
19:12 < groves> Don't worry about doing a big search, I just assumed you
were looking at something when you mentioned other places
19:12 < crazy2be> well i've *seen* it in other places
19:12 < crazy2be> just not sure where off the top of my head :P
19:12 -!- niemeyer [~niemeyer@189.27.131.89.dynamic.adsl.gvt.net.br] has quit
[Ping timeout: 240 seconds]
19:13 < crazy2be> at the end of the go tutorial they use that teqnique for
multiplexing: http://golang.org/doc/go_tutorial.html
19:13 < crazy2be> a request channel and a quit channel
19:14 < groves> Excellent, sounds like it's a reasonable technique then.
Thanks for the help!
19:15 < crazy2be> no problem
19:17 -!- bortzmeyer [~stephane@lan31-2-82-224-72-72.fbx.proxad.net] has joined
#go-nuts
19:17 < crazy2be> groves: what are you writing?
19:21 < bortzmeyer> First time I have to do an exponentiation in Go and I'm
not able to find, in the language spec, how to do it.  It seems neither ^nor **
19:21 < crazy2be> math.Pow()?
19:21 < crazy2be> not srue if that even exists, just guessing
19:22 < crazy2be> math.Exp()
19:22 < crazy2be> on wait
19:22 < groves> An implementation of Avro:
http://avro.apache.org/docs/current/
19:22 < bortzmeyer> crazy2be: thanks.  I don't know why, I was sure there
was a builtin operator
19:23 < crazy2be> ah it is math.Pow()
19:23 < crazy2be> i was right on my first guess :P
19:23 < crazy2be> bortzmeyer: Most languages have it, but it's not an
oft-used enough tunction to be built into the language imo
19:23 < bortzmeyer> crazy2be: http://golang.org/pkg/math/#Pow
19:24 < crazy2be> *s/tunction/function
19:25 < bortzmeyer> crazy2be: not having it in the language itself would not
be a problem if we had the ability to create operators...  (yes, I know it is a
touchy question and already discussed)
19:25 < crazy2be> bortzmeyer: How often do you actually use it?
19:25 < bortzmeyer> crazy2be: my first time since I use Go :-)
19:26 < bortzmeyer> BUt I'm not a mathematician
19:26 < crazy2be> math.Pow(x, y) is fairly short and obvious :P
19:26 < crazy2be> go is not a mathamatician's language
19:26 < bortzmeyer> Fortran is
19:27 < crazy2be> regardless, x^y is hardly cleaner than math.Pow(), unless
you are doing it quite often
19:28 < aiju> for common cases like x^2 or x^3 just write it out
19:28 < crazy2be> and if you are doing it quite often, you can just define
func pow(x, y float64) float64 { return math.Pow(x, y) }
19:29 < bortzmeyer> crazy2be: func pow does not buy you much : the args are
still not in the "normal", "mathematical" order
19:30 < crazy2be> bortzmeyer: What do you mean?
19:30 < aiju> infix notation
19:31 < aiju> do Java/C# have an exponentiation operator?
19:31 < bortzmeyer> Yes, the normal exponentiation operator is infix,
math.Pow is prefix.
19:32 < crazy2be> ah, because it's between the operators you mean?
19:33 < crazy2be> you could do type base int; func (b base) pow(y int64)
int64 { return math.Pow(b, y) }
19:33 < rm445> crazy2be: claiming that x^y is no clearer than pow(x,y) is
stockholm syndrome.  Of course it's clearer, it's very common notation.  The
reasons for pow being a function in the math library are not clarity.
19:34 < rm445> I think basically it's because writing a math library is a
bit hard and specialised - language authors want to leave the math library to the
experts to some extent rather than get bogged down in floating-point mathematics
when writing a compiler.
19:34 < aiju> or you could just quit whining
19:36 < rm445> there's also some kind of blurry divide between operations
that don't do much, and ones that do a lot and live in a library.  Exponentiation
can be relatively complex.
19:37 < bortzmeyer> rm445: thanks, sensible explanations
19:37 < crazy2be> exponentiation is also not something computers do
"naturally" afaik
19:37 < crazy2be> unlike bit shifts, adding, subtraction, etc
19:38 < crazy2be> rm445: pow(x, y) is somewhat clearer, because you know
what is going to happen as a programmer
19:38 < aiju> crazy2be: i think there is a exponentiation instruction
19:39 < crazy2be> if you let people define operator ^, you are getting into
a land of unknown
19:39 < aiju> floating point, that is
19:39 < crazy2be> aiju: Really?
19:40 < crazy2be> well go doesn't use it in any case
19:40 < crazy2be> http://golang.org/src/pkg/math/pow.go?s=1186:1216#L28
19:42 < aiju> odd
19:43 < aiju> there doesn't seem to be any indeed
19:43 < aiju> unlike sin() and cos()
19:44 < vsmatck> The word "natural" should be banned from technical
discussion.  :)
19:44 < aiju> vsmatck: -technical
19:44 < aiju> except maybe math
19:44 < aiju> natural numbers and such
19:44 < vsmatck> agree
19:46 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has quit [Quit:
Computer has gone to sleep.]
19:47 -!- dga [~dga@MOO.CMCL.CS.CMU.EDU] has joined #go-nuts
19:47 < vsmatck> There's a number of nebulous concepts in this area.  Like
intuitive vs familiar vs natural.  People like to conflate all those even though
they're different.
19:48 < vsmatck> I mean unquestionably programming languages are designed to
fit the human mind, and in that sense they're "natural".  But people generally
state some technical thing is natural when they want to put forth an idea without
any sort of evidence.
19:49 < aiju> people like to bullshit
19:49 < crazy2be> "natural" is basically the same as "familiar"
19:49 < aiju> hell, go to anyone propagating organic food if you want people
bullshitting about "natural" things
19:50 < crazy2be> lol
19:50 < crazy2be> the ads are funny
19:50 < crazy2be> they have like people with dirty hands carrying baskets of
food
19:50 < crazy2be> "back to nature"!
19:50 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
19:50 < crazy2be> because that's certainly how organic food works!
19:50 < exch> strange how nobody seems to realize there is no such thing as
unnatural
19:51 < dga> speaking of "natural" ...  (how's that for a weak segue):
Anyone have a suggestion for the most clean / "Go-like" way to have pkg http
invoke a method for handling requests?
19:51 < dga> Right now I'm doing:
19:51 < dga> http.Handle("/query", jsonhandler(func(req *http.Request,
respmap map[string]interface{}) { server.ServeQuery(req, respmap)
19:51 < crazy2be> dga: Whaaa
19:51 < dga> but you can ignore jsonhandler (it's just a wrapper type).  The
real thing I'm curious about is that I'm creating a closure to pass to http.Handle
that invokes server.ServeQuery
19:52 -!- Fish [~Fish@9fans.fr] has quit [Ping timeout: 260 seconds]
19:52 < dga> The non-compiling thing I'm doing is: http.Handle("/query",
server.ServeQuery) --
19:54 < dga> so I just wrap it in a closure: http.Handle("/query", func
(...args...) { server.ServeQuery(...args...) }
19:54 < dga> That's fine, but it feels a little klugey.  So I'm curious if
there's A Better Way (tm).
19:55 < crazy2be> dga: What are you trying to do?  I don't completely
understand
19:56 < crazy2be> it seems like you are trying to provide some extra data to
the http handler function?
19:56 < dga> bingo, crazy.
19:57 < dga> I want the http handler to invokve a method (ie, a function
associated with a particular instance of a struct) when it does its thing.
19:57 < crazy2be> well, just make a type foo struct {someextrainfo string}
19:57 < crazy2be> hmm
19:57 < dga> Sure.  That's what I'm doing now.  I'm curious about whether
there's a better way to do it than by creating a closure to pass to http.Handle
19:58 < crazy2be> what is the compiler error?
19:58 < crazy2be> it looked like your arguments were wrong, so i was
confused
19:58 < dga> no, no, i have no compiler error.  The closure way works.
19:58 < crazy2be> no but without the closure
19:59 -!- zimsim [~simon@87.72.77.195] has quit [Ping timeout: 240 seconds]
19:59 < dga> Oh, you mean if I call: http.Handle( "/query",
server.ServeQuery) ? "method server.ServeQuery is not an expression, must be
called"
20:00 < crazy2be> so is ServeQuery a function or a struct?
20:00 < crazy2be> because you can make it a scruct, then give it a
ServeHTTP() method
20:00 < crazy2be> and that should work
20:00 < crazy2be> passing it exactly how you do now
20:01 < dga> ServeQuery is a method: func (server *Server) ServeQuery( w
http.ResponseWriter, req *http.Request)
20:01 < crazy2be> alternatively, it might work if you rename ServeQuery to
ServeHTTP(), and just pass server
20:01 < dga> crazy: That works.  But it can only have one ServeHTTP method,
and I have a few different queries I want to handle, and am hoping to reuse the
dispatch logic in http
20:02 < dga> so there's ServeQuery and ServeQuery2 and ...  etc.
20:02 < crazy2be> well, personally, i just use global variables for cases
like that
20:02 < dga> The real code is here: http://pastebin.com/0TXc88ei
20:03 -!- niemeyer_ [~niemeyer@189.27.129.13.dynamic.adsl.gvt.net.br] has quit
[Ping timeout: 240 seconds]
20:03 < crazy2be> but if you want several instances of server, you could
make each ServeQuery() into a struct or type, then define the ServeHTTP() method
on each of them
20:03 < crazy2be> oh wiat
20:03 < dga> but it's got a lot of extraneous crap around it that's not
germane to my question.  But scroll down to main() and you'll see what I'm talking
about.
20:05 < crazy2be> well you can also do http.HandleFunc() or HandlerFunc() to
register functions as handlers
20:05 < crazy2be> that's what i use
20:05 < dga> Yup - but I still have to create a closure to pass the object
to them, AFAIK
20:06 < crazy2be> what is jsonhandler()?
20:06 -!- Soultaker [~Soultaker@130.89.161.226] has quit [Ping timeout: 276
seconds]
20:07 -!- Soultaker [~Soultaker@hell.student.utwente.nl] has joined #go-nuts
20:07 < crazy2be> ok i see
20:07 < dga> an interface type that provides a ServeHTTP method that spits
out JSON-marshaled output.  It takes a function from requests -> a map of data,
and marshals it.
20:07 -!- Fish [~Fish@9fans.fr] has joined #go-nuts
20:07 < crazy2be> i would actually do this quite differently
20:08 < dga> Most of what jsonhandler/etc.  are doing is implementing fairly
generic HTTP query string -> JSON rpc-like functionality.  But I don't want
full on JSON RPC.
20:08 < dga> I'm all ears.  :)
20:08 < crazy2be> it looks like you are a) trying to do checks at the start
of all the handlers, and b) trying to deal with their output in a consistent
manner
20:08 < crazy2be> correct?
20:09 < dga> Yup.  Just avoiding the boilerplate in every handler.
20:09 < dga> *And* passing the same instance of "server" to every handler
20:10 < TheMue> Go is really nice.  Just implemented the discarding of
transaction of my Redis database client with almost no effort.
20:10 < crazy2be> dga: Well, you have a few options
20:11 < crazy2be> you could have a checkSanity() function at the start of
each function, and a marshalOutput() function at the end
20:12 < dga> I'll take one extra line of creating a closure over that.  :)
20:13 < crazy2be> well, lines aren't that important :P
20:14 < crazy2be> you could also use a custom ServeMux for the time tracking
and all
20:14 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.4]
20:15 < crazy2be> also why do you have results["status"] = "FAILED"?
20:15 < crazy2be> just return a error 503 or 500 or w/e is relevent
20:15 < dga> incomplete code.  Haven't entirely decided on how I want to
propagate failures back to the client yet.
20:15 -!- bortzmeyer [~stephane@lan31-2-82-224-72-72.fbx.proxad.net] has quit
[Ping timeout: 276 seconds]
20:18 -!- Soultake1 [~Soultaker@hell.student.utwente.nl] has joined #go-nuts
20:18 -!- Soultaker [~Soultaker@hell.student.utwente.nl] has quit [Read error:
Connection reset by peer]
20:18 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts
20:23 -!- saschpe [~quassel@opensuse/member/saschpe] has quit [Remote host closed
the connection]
20:23 -!- fmoo1 [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
20:24 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Ping
timeout: 246 seconds]
20:24 -!- rl [~rbl@84.74.142.37] has quit [Ping timeout: 246 seconds]
20:24 -!- rl [~rbl@84-74-142-37.dclient.hispeed.ch] has joined #go-nuts
20:25 < crazy2be> dga: Anyway, how i do it is that i have handler functions
registered on arbitary URLs, and then they call mytemplate.Render(c, r,
"template-name", "Page Title", data)
20:25 < crazy2be> when they have generated the data and are ready to have it
displayed
20:25 < crazy2be> data is an interface{}
20:26 < crazy2be> if ?alt=json is in the URL (r.FormValue("alt") == "json"),
then it renders the data as json
20:26 < crazy2be> otherwise, it uses mustache and renders it using the
template file deternmined by the template name
20:27 < crazy2be> ideally, this would allow you to write a entirely
AJAX-based website for clients that support it
20:27 < crazy2be> and still have the fallback
20:27 < vsmatck> Mustache is quite nice.  I wonder if a mustache
implementation is a candidate for the standard library?
20:27 < crazy2be> mustache is nice, i just wish i could do {{#Foo==3}} or
something
20:28 < vsmatck> That goes against the design of it which I think it wise.
"logicless templates"
20:28 < vsmatck> There's always a way to do it in the backend.
20:28 -!- sqqqrly [~dohlemach@c-75-67-216-29.hsd1.nh.comcast.net] has quit [Ping
timeout: 246 seconds]
20:30 < crazy2be> vsmatck: kinda, but not really
20:30 < crazy2be> like
20:30 < crazy2be> say i want to highlight the current tab on some
navigational menu
20:31 < crazy2be> so i set ModuleName in my struct equal to "events" for the
events module
20:31 < crazy2be> now what's the best way to highlight the events module tab
if it is currently selected?
20:31 < vsmatck> To do that you can define a mustache var only if the
current element in the list is the current page.
20:32 < vsmatck> That's how I do it with my mustache pagination stuff.
20:32 < crazy2be> yeah so i make a map[string]bool
20:32 < crazy2be> and set thatmap["events"] = true
20:32 < crazy2be> but tell me that's not hackish
20:33 < vsmatck> I plan to move all my mustache stuff away from maps.  I
want to go all structs for the source variables.  Then make it case insensitive.
20:33 < vsmatck> Make it so if a struct data member is a nil pointer it
means not defined.
20:33 < vsmatck> Using maps gets really hairy.
20:34 < vsmatck> I'm not going to tell you that's not hackish..  caus it is.
:)
20:34 -!- GeertJohan [~Squarc@D978EC5D.cm-3-1d.dynamic.ziggo.nl] has quit [Quit:
Leaving.]
20:35 < crazy2be> ok well having a struct doesn't *really* make things too
much better
20:35 < vsmatck> Perhaps there could be a few instances where it'd be nicer
to have simple logic in the templates.  But I think too much logic in templates
makes the design brittle.
20:35 < crazy2be> yes
20:35 < crazy2be> but == would be nice
20:35 < crazy2be> :P
20:35 < crazy2be> it's the only logic i have wanted so far
20:36 < crazy2be> i might hack it into mustache
20:37 < crazy2be> although mustache basically has 1) loops, 2) bool testing
conditions, 3) functions (include is kinda like this)
20:37 < crazy2be> i would just be slightly expanding 2) to allow integer and
string comparisons
20:37 < vsmatck> The partials are nice.  The >
20:37 < crazy2be> yeah sorry by include i mean partials
20:38 < vsmatck> They should have just called them includes.  More people
would know what they're talking about.  :)
20:39 < crazy2be> yeah but then i would think of php *shudder*
20:40 < vsmatck> PHP can look nice.  You gotta have someone real talented
for that tho.  I'm not.  I programmed php for 2.5 years and it all came out
looking like crap.
20:41 < aiju> PHP can look nice, but only if the file is empty
20:41 < crazy2be> lol i wrote a website in php
20:41 < crazy2be> didn't take me long and it looked decent
20:41 < crazy2be> but like
20:42 < vsmatck> I gotta do ASP now as part of my job.  :-/
20:42 < crazy2be> when you want to go write a mobile layout, you have to
rewrite the whole thing
20:43 < vsmatck> crazy2be: I hadn't realized that advantage.  Yeah I guess
when you want to do mobile layout you just have to make a new template that uses
the same backend.  true true
20:43 -!- zozoR [~Morten@56344480.rev.stofanet.dk] has joined #go-nuts
20:44 < crazy2be> yeah that's how my framework is designed, so that the
modules should know nothing of the presentation, and the presentation should be
independed of the modules
20:44 < crazy2be> nice in theory at least
20:44 -!- anticw [~anticw@c-67-169-68-180.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
20:46 < crazy2be> but that seems to be how most websites do it, they write
the desktop layout, the rewrite the whole thing for the mobile layout
20:47 < crazy2be> and they are completely detached, with the mobile one
being at m.somesite.com
20:50 -!- anticw [~anticw@c-67-169-68-180.hsd1.ca.comcast.net] has joined #go-nuts
20:50 -!- aho [~nya@fuld-590c75d0.pool.mediaWays.net] has joined #go-nuts
20:52 -!- firwen [~firwen@78.234.55.225] has left #go-nuts []
21:00 -!- napsy [~luka@88.200.96.18] has quit [Quit: Lost terminal]
21:01 -!- femtoo [~femto@95-89-249-242-dynip.superkabel.de] has joined #go-nuts
21:02 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-miqreviocmjnttwt]
has quit [Ping timeout: 252 seconds]
21:04 -!- femtooo [~femto@95-89-249-242-dynip.superkabel.de] has quit [Ping
timeout: 276 seconds]
21:06 -!- dga [~dga@MOO.CMCL.CS.CMU.EDU] has quit [Quit: leaving]
21:07 -!- zozoR [~Morten@56344480.rev.stofanet.dk] has quit [Remote host closed
the connection]
21:08 -!- ampleyfly [ampleyfly@gateway/shell/blinkenshell.org/x-bxqhogdnrjbsmrcp]
has joined #go-nuts
21:08 -!- femtoo [~femto@95-89-249-242-dynip.superkabel.de] has quit [Read error:
Connection reset by peer]
21:09 -!- chressie [~chressie@dreggn.in-ulm.de] has quit [Quit: WeeChat 0.3.4]
21:10 -!- chressie [~chressie@dreggn.in-ulm.de] has joined #go-nuts
21:11 -!- tgall_foo [~tgall@206.9.88.154] has joined #go-nuts
21:12 -!- huin [~huin@91.85.185.181] has quit [Quit: bedtime]
21:14 -!- TheMue [~TheMue@p5DDF53CD.dip.t-dialin.net] has quit [Quit: TheMue]
21:17 -!- rlab [~Miranda@149-167-113-92.pool.ukrtel.net] has quit [Quit: Miranda
IM! Smaller, Faster, Easier.  http://miranda-im.org]
21:19 -!- Fish [~Fish@9fans.fr] has quit [Quit: So Long, and Thanks for All the
Fish]
21:22 -!- itrekkie [~itrekkie@ip98-165-247-3.ph.ph.cox.net] has joined #go-nuts
21:35 -!- vsayer [~vivek@2001:470:1f04:1a6b:21a:6bff:fe35:d2a5] has joined
#go-nuts
21:37 -!- angasule [~angasule@190.2.33.49] has quit [Ping timeout: 252 seconds]
21:40 -!- awidegreen [~quassel@c-cfc5e555.08-2-73746f39.cust.bredbandsbolaget.se]
has quit [Ping timeout: 258 seconds]
21:51 -!- itrekkie [~itrekkie@ip98-165-247-3.ph.ph.cox.net] has quit [Quit:
itrekkie]
21:54 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
21:55 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has quit [Ping
timeout: 250 seconds]
22:18 -!- zimsim [~simon@87.72.77.195] has quit [Remote host closed the
connection]
22:19 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit:
Verlassend]
22:19 -!- crodjer [~rohanjain@203.110.240.205] has quit [Quit: Leaving]
22:19 -!- Scorchin [~Scorchin@host86-145-15-38.range86-145.btcentralplus.com] has
joined #go-nuts
22:25 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
22:50 -!- arun_ [~arun@unaffiliated/sindian] has quit [Ping timeout: 246 seconds]
22:54 -!- itrekkie [~itrekkie@ip98-165-247-3.ph.ph.cox.net] has joined #go-nuts
22:58 -!- Boney [~paul@124-168-103-51.dyn.iinet.net.au] has quit [Remote host
closed the connection]
23:01 -!- itrekkie [~itrekkie@ip98-165-247-3.ph.ph.cox.net] has quit [Quit:
itrekkie]
23:08 -!- Boney [~paul@124-168-103-51.dyn.iinet.net.au] has joined #go-nuts
23:08 -!- dj2 [~dj2@CPE001f5b35feb4-CM0014048e0344.cpe.net.cable.rogers.com] has
quit [Remote host closed the connection]
23:23 -!- Scorchin [~Scorchin@host86-145-15-38.range86-145.btcentralplus.com] has
quit [Quit: Scorchin]
23:24 -!- angasule [~angasule@190.2.33.49] has joined #go-nuts
23:30 -!- dchest [~dchest@109.228.79.14] has quit [Quit: dchest]
23:32 -!- pphalen [~pphalen@66.92.11.149] has joined #go-nuts
23:33 -!- fmoo1 [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Quit:
Leaving.]
23:35 -!- aho [~nya@fuld-590c75d0.pool.mediaWays.net] has quit [Quit:
EXEC_over.METHOD_SUBLIMATION]
23:48 -!- dj2 [~dj2@199.243.188.202] has joined #go-nuts
23:55 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Ping timeout: 252 seconds]
--- Log closed Mon Apr 18 00:00:50 2011