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

--- Log opened Sat Sep 18 00:00:07 2010
00:07 -!- Xurix [~Luixsia@AToulouse-254-1-55-249.w81-49.abo.wanadoo.fr] has quit
[Quit: Leaving]
00:07 -!- napsy [~luka@88.200.96.18] has quit [Quit: Lost terminal]
00:09 -!- ukai [~ukai@nat/google/x-lxyflooxpisypvth] has quit [Ping timeout: 264
seconds]
00:11 -!- ukai [~ukai@nat/google/x-gcectuhpiukboyfa] has joined #go-nuts
00:15 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving]
00:18 -!- crazy2be [~justin@d205-206-130-118.abhsia.telus.net] has joined #go-nuts
00:18 -!- lmoura_ [~lauromour@187.113.125.80] has quit [Quit: Leaving]
00:19 < crazy2be> Hello, is there any way i can use the json library to
essentally replace the JSON.parse() function from javascript?
00:19 < crazy2be> That is, i want to be able to make an interface{} and
access the data by name with minimal pain
00:19 < crazy2be> E.g.  defining all the fields in the structs all the way
down would constitute pain
00:20 -!- photron [~photron@port-92-201-57-106.dynamic.qsc.de] has quit [Read
error: Operation timed out]
00:21 -!- ako [~nya@fuld-4d00d3da.pool.mediaWays.net] has quit [Ping timeout: 245
seconds]
00:22 -!- jcao219 [~jcao219@pool-173-74-61-111.dllstx.fios.verizon.net] has quit
[Ping timeout: 245 seconds]
00:28 < crazy2be> I'm willing to write my own package if necessary, i guess
the question is whether the language supports it, and how i would go about
implementing it
00:29 < crazy2be> In C++ I could simply override the [] operator (well, not
really simply, but i could do it)
00:30 < exch> If you stick with a map of interface{} values, you'll be stuck
with a lot of casting to/from go types to get at the values.  it's a pain in the
proverbial hiney.  Just defining the structs with proper field names is the only
way to make it usable as far as I know
00:31 < crazy2be> I figured as much, it's just a pain
00:31 < crazy2be> mostly because i'm retrieving the JSON feed from elsewhere
00:32 < crazy2be> and it might change at any time
00:32 < crazy2be> potentially breaking things
00:32 < crazy2be> I suppose i'll go about that then :)
00:32 < exch> If your code needs to handle the json feed, it has to know
it's format.  In which case you may as well go with the struct approach
00:32 < exch> the code will break regardless of how you implement it, if the
feed changes it's format
00:33 < crazy2be> well, only a few nodes are relevant to me
00:33 < crazy2be> Right now i just have it rendering based on that feed with
javascript
00:33 < crazy2be> but that's slow
00:33 < crazy2be> and bad
00:33 < crazy2be> But it's really simple
00:34 < crazy2be> like
00:34 -!- aho [~nya@fuld-4d00d2b1.pool.mediaWays.net] has joined #go-nuts
00:34 < crazy2be> http://pastebin.com/XSH3K9uW
00:35 < crazy2be> i only care about a few things
00:35 < crazy2be> quite a few in the individual entries
00:35 < crazy2be> but there's lots and lots of crud
00:35 < crazy2be> eh well
00:35 < crazy2be> i wonder
00:35 < crazy2be> what happenes if i only implement the parts i care about
00:36 < cbeck> That should work
00:36 < cbeck> The rest will get ignored
00:36 < exch> the rest will be silently ignored.  But you have to start at
the top-level object and define the object tree all the way down to the bits you
want
00:36 < crazy2be> yikes!  they redesigned the website!
00:37 < crazy2be> and nacl is enabled by default?
00:37 < crazy2be> hmm
00:37 < crazy2be> oh, nvm
00:37 < crazy2be> it runs on their servers
00:37 < Namegduf> Doing it by NaCl would be cool.
00:38 < crazy2be> NaCl is an awesome concept :)
00:38 < crazy2be> i'm waiting for it to mature to the point i can use it
00:38 < cbeck> But remember that you don't have to define new types, so you
can do 'type JSONFeed struct { Foo struct {Bar struct {Baz string}}}'
00:38 -!- nighty^ [~nighty@x122091.ppp.asahi-net.or.jp] has quit [Read error:
Connection reset by peer]
00:38 < crazy2be> cbeck: Thanks!  I would certainly of gone about it a
silly, any more difficult, way :P
00:39 < crazy2be> cbeck: And i access them with (some JSONFeed
object).Foo.Bar, right?
00:40 < cbeck> Right
00:42 -!- iant [~iant@67.218.106.92] has quit [Quit: Leaving.]
00:43 -!- jhawk28 [~jhawk28@user-142gfte.cable.mindspring.com] has joined #go-nuts
00:43 < bfrank> is there anyway to import a single function from a package?
00:44 -!- jhawk28 [~jhawk28@user-142gfte.cable.mindspring.com] has quit [Remote
host closed the connection]
00:44 < crazy2be> bfrank: You could make a package that implements that one
function, and import that instead
00:44 < crazy2be> like, make a custom package that just assigns that
function to something internal to is
00:44 < crazy2be> *it
00:44 < crazy2be> so like
00:45 < crazy2be> import "http"
00:45 < crazy2be> DoSomething := http.DoSomething
00:45 < crazy2be> and then import that package rather than the http package
00:45 < bfrank> hmm, let me try that
00:45 < bfrank> also, does anyone know why the play stuff isn't in the repo?
00:46 < bfrank> when you do that code, what type is DoSomething at that
point, a func?
00:46 < crazy2be> yes
00:46 < crazy2be> although it really doesn't matter
00:47 < crazy2be> since := will initialize it to whatever
00:47 < bfrank> so when you do that assignment, you are assigning the
existing http.DoSomething to a new variable and that DoSomething variable is
exported because it is capital?
00:47 < crazy2be> As i understand it
00:48 < bfrank> I am also confused why the go compiler puts implicit
semicolons after every line, rather than using godoc to add them
00:48 -!- nf_ [~nf@124.169.158.192] has joined #go-nuts
00:49 -!- anticw_ [~anticw@c-67-169-41-113.hsd1.ca.comcast.net] has joined
#go-nuts
00:49 < crazy2be> bfrank: Er?
00:49 < bfrank> like, I can't say
00:49 < KirkMcDonald> godoc?  Do you mean gofmt?
00:49 < bfrank> func test ()
00:49 < bfrank> {
00:49 < bfrank> yeah, gofmt, that is what I meant
00:49 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 255 seconds]
00:49 < crazy2be> because it's easier to type :P
00:49 -!- anticw [~anticw@c-67-169-41-113.hsd1.ca.comcast.net] has quit [Write
error: Broken pipe]
00:49 -!- nf [~nf@124.169.158.192] has quit [Write error: Broken pipe]
00:49 < crazy2be> i don't run gofmt at every compile
00:49 < KirkMcDonald> bfrank: gofmt is going to move that curly brace
anyway.
00:50 -!- nighty^ [~nighty@x122091.ppp.asahi-net.or.jp] has joined #go-nuts
00:50 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
00:50 < KirkMcDonald> Er. Or is gofmt just going to barf on that?
00:50 < KirkMcDonald> I think it barfs.
00:51 < KirkMcDonald> bfrank: Anyway:
http://golang.org/doc/go_spec.html#Semicolons
00:52 < bfrank> also, why does the website or the docs I've read, not
mention anything about linux kernel 2.6 being the minimum requirement for the
goroutines stuff?
00:52 < bfrank> actually, I don't think I've seen any docs about what
exactly the requirements exactly even are
00:52 < cbeck> I remember reading that, but I don't remember where
00:52 < crazy2be> bfrank: i imagine because that's implementation-specific
00:53 < crazy2be> and the compilers are not really stable now
00:53 < crazy2be> so things like that might change
00:53 < crazy2be> a lot, potentially
00:53 < bfrank> well, it just seems weird not to have the site reflect that
in the installation docs or something
00:53 < bfrank> since that is likely to be something people are going to
want to know before they compile and try to use it for anything
00:54 < crazy2be> Well it has all the other requirements on the install page
00:54 < crazy2be> i guess i always just run the latest linux kernel
00:54 < crazy2be> or whatever ubuntu gives me
00:55 < bfrank> yeah, and it seems like that works ok, but not every person
has the luxury of having the latest greatest stuff
00:56 < crazy2be> What OS?
00:56 < bfrank> what is the best way to do something like a scanf or
something in go
00:56 < bfrank> Linux, but like, let's say kernel 2.4
00:56 < crazy2be> distro?
00:57 < bfrank> Redhat enterprise linux
00:57 < vsmatck> bfrank: Look in the fmt package.
00:57 < crazy2be> fmt.Scanf() :)
00:57 < bfrank> hmm
00:58 < crazy2be> hmm i keep getting an InvalidUnmarshalError
00:58 -!- vdrab [~vdrab@EM114-51-196-54.pool.e-mobile.ne.jp] has joined #go-nuts
00:58 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has joined #go-nuts
01:01 -!- piyushmishra [~piyushmis@117.200.226.188] has quit [Ping timeout: 240
seconds]
01:02 < crazy2be> hmm :/
01:02 < bfrank> another question, why are the binaries that 8g/8l create so
much bigger than a equivalent c compiled program with gcc?
01:02 < crazy2be> there are $ in the names of the JSON variables
01:02 < crazy2be> go doesn't like that :(
01:03 < crazy2be> bfrank: Compilers are more optimized, smaller standard
library
01:03 < crazy2be> same sort of idea as C vs C++
01:03 < bfrank> you mean gcc is more optimized, and has a smaller standard
library?
01:03 < Namegduf> bfrank: They are statically compiled.
01:04 < Namegduf> And do not depend on an external stdlib.
01:04 < bfrank> hmm
01:04 < Namegduf> The parts of the stdlib each program uses is built into
each program.
01:04 < Namegduf> That is why.
01:04 < crazy2be> Namegduf: Is that by default (with C, that is)?
01:04 < Namegduf> No, it isn't.
01:04 < bfrank> is there a way to make it not do that?
01:04 < crazy2be> Because you can statically link them
01:04 < crazy2be> with C
01:04 < Namegduf> You *can*, but it definitely is not default.
01:05 < Namegduf> GCC will normally produce, and the apps you are comparing
against are, dynamically linked executables.
01:05 < bfrank> is there a way to make go compile dynamically linked
executables?
01:05 < Namegduf> No.
01:05 < crazy2be> Probably not because of the multithreading
01:05 < Namegduf> The size increase should not matter for any real program.
01:06 < bfrank> I can always run gzexe
01:06 < bfrank> but nevertheless, heh
01:06 < Namegduf> And you would need to ship a libgo.so or something with
your program to be Go's equivalent of glibc.
01:09 < crazy2be> Namegduf: However, dynamic linking usually means a faster
compile
01:09 < crazy2be> in my experience with C++, anyway
01:09 < bfrank> I mean, go does compile pretty fast, though
01:10 < Namegduf> crazy2be: I don't think you can, without additional
information, assume that would apply to Go as well.
01:10 < crazy2be> Namegduf: No, but with C++ it was simply because it had
less to read/write to disk
01:11 < crazy2be> all those libraries were large by the end
01:11 -!- steveno [~stevenoli@paludis/cheerleader/steveno] has joined #go-nuts
01:11 < bfrank> Does go have a way of pushing datastructures over sockets to
other go programs running on remote machines?
01:11 < Namegduf> I'm quite sure that disk I/O was not the limiting factor
of C++ compilation.
01:11 < Namegduf> Just, you know, a guess, but
01:11 < Namegduf> When they produce similarly sized executables but one
takes five minutes and another takes 3 seconds...
01:12 < crazy2be> No, but it was for the linking, i think
01:12 < crazy2be> since that is after the compiling
01:12 < plexdev> http://is.gd/ffNO7 by [Alex Brainman] in go/src/pkg/ --
pkg/Makefile: disable netchan test to fix windows build
01:12 < crazy2be> anyway, this is a silly argument
01:12 < vsmatck> bfrank: ya, the rpc package does that.
01:12 < cbeck> bfrank: Check out the gob package
01:12 < bfrank> thanks
01:12 < crazy2be> since neither of us know enough :P
01:13 < bfrank> wow, sweet, that sounds like what I would want
01:13 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 245 seconds]
01:14 < crazy2be> Any idea how i can replace "$", read from an io.Reader,
with something else, say "_", and still return an io.Reader (so that it is
essentially transparent to existing code)?
01:14 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
01:15 < crazy2be> So like Reader := replacer.ReplaceReader(SomeOtherReader,
"$", "_")
01:16 < Namegduf> Create a type on a struct just containing an io.Reader
with a Read method
01:16 -!- piyushmishra [~piyushmis@117.200.225.136] has joined #go-nuts
01:16 < Namegduf> Have the Read method read from the reader and do the
replacement before returning the results.
01:17 < Namegduf> With that design, you'd want it to contain the two
characters in the struct, too, as members.
01:18 -!- stalled [~stalled@unaffiliated/stalled] has quit [Write error: Broken
pipe]
01:26 -!- Bombe [~droden@weltgehirnmaschine.de] has quit [Excess Flood]
01:27 -!- mbohun [~mbohun@ppp115-156.static.internode.on.net] has joined #go-nuts
01:27 -!- Bombe [~droden@weltgehirnmaschine.de] has joined #go-nuts
01:28 -!- vdrab [~vdrab@EM114-51-196-54.pool.e-mobile.ne.jp] has quit [Ping
timeout: 245 seconds]
01:30 -!- mumbow [~mumboww@c-98-207-108-218.hsd1.ca.comcast.net] has quit [Quit:
mumbow]
01:31 -!- erje_ [~erje@port-92-201-26-103.dynamic.qsc.de] has joined #go-nuts
01:33 -!- erje [~erje@port-92-201-3-205.dynamic.qsc.de] has quit [Ping timeout:
272 seconds]
01:35 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined #go-nuts
01:35 -!- mode/#go-nuts [+v iant] by ChanServ
01:36 < crazy2be> i keep forgetting how go works and trying to write C/C++
01:36 < crazy2be> bad!
01:38 -!- synth [~cb@obfuscated.us] has quit [Ping timeout: 358 seconds]
01:38 -!- synth [~cb@obfuscated.us] has joined #go-nuts
01:43 -!- gnuvince [~vince@70.35.169.91] has quit [Ping timeout: 255 seconds]
01:43 < plexdev> http://is.gd/ffPmM by [Rob Pike] in 2 subdirs of
go/src/pkg/ -- windows: fix netchan test by using 127.0.0.1.
01:44 -!- SRabbelier [~SRabbelie@ip138-114-211-87.adsl2.static.versatel.nl] has
joined #go-nuts
01:45 -!- gnuvince [~vince@70.35.165.150] has joined #go-nuts
01:48 < bfrank> are there any numeric types bigger than uint64?
01:48 < cbeck> there's a bigint package
01:48 < cbeck> err, big
01:49 < bfrank> thanks, going to try messing with that
01:50 < bfrank> apparently I am overflowing a uint64
01:50 < bfrank> heh
01:59 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
01:59 < crazy2be> the string vs []byte distinction is confusing me
01:59 < crazy2be> mainly because i don't understand how to convert between
them
02:00 < Namegduf> []byte(someString)
02:00 < Namegduf> string(someByteSlice)
02:00 < crazy2be> wow
02:00 < crazy2be> that's easy
02:01 < crazy2be> thanks!
02:02 < crazy2be> I was thinking maybe type assertions
02:02 < crazy2be> like somString.([]byte)
02:02 <+iant> type assertions are for converting from an interface type to
some other type
02:03 <+iant> type conversions are for converting other types
02:03 <+iant> the difference is that a type assertion can fail at runtime
02:03 <+iant> a type conversion can only fail at compile time
02:06 -!- Tv [~tv@cpe-76-168-227-45.socal.res.rr.com] has joined #go-nuts
02:07 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 276 seconds]
02:08 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
02:10 -!- dacc [~Adium@D-128-95-10-177.dhcp4.washington.edu] has quit [Ping
timeout: 240 seconds]
02:11 < crazy2be> implicit assignment of unexported field 'from' of
replace.Replacer in method receiver
02:12 < crazy2be> What does that mean in plain english?
02:12 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts
02:15 < crazy2be> and why is it complaining?
02:18 < crazy2be> now i have a null character
02:18 < crazy2be> somehow
02:18 < crazy2be> :/
02:19 < crazy2be> Error: "invalid character '\\x00'
02:19 -!- boscop_ [~boscop@g226228196.adsl.alicedsl.de] has joined #go-nuts
02:20 -!- boscop [~boscop@f055100251.adsl.alicedsl.de] has quit [Ping timeout: 245
seconds]
02:21 < crazy2be> oh right i should do EOF checking
02:23 <+iant> the "implicit assignment" error means that you are copying a
struct with a private field--the struct has a field whose name starts with a lower
case letter, and code that is in a different package is copying it
02:23 <+iant> in this case perhaps because you are using a receiver which is
not a pointer
02:24 < crazy2be> oh
02:24 < crazy2be> that was not what i was expecting :P
02:24 < crazy2be> I "fixed" it by changing all the fields to uppercase
02:24 < crazy2be> or, rather, camelcase
02:26 -!- dacc [~Adium@D-69-91-168-87.dhcp4.washington.edu] has joined #go-nuts
02:26 -!- dacc [~Adium@D-69-91-168-87.dhcp4.washington.edu] has left #go-nuts []
02:32 < crazy2be> Hmm perhaps i do not understand how slices work
02:32 < crazy2be> but it seems my slice is getting passed by value
02:33 < nsf> everything is passed by value
02:33 < nsf> slice is just a reference to an array
02:33 < crazy2be> But isn't a slice a pointer value under the covers?
02:33 < nsf> yes it is
02:33 < nsf> but if you're passing a pointer by value
02:34 < nsf> you have the pointer that points to the same place
02:34 < crazy2be> yes, but it is not behaving like that :/
02:34 < crazy2be> i allocate like var buf = make([]byte, 100)
02:34 < crazy2be> Read from it
02:34 < crazy2be> _, _ = rep.Read(buf)
02:35 < crazy2be> and then get all nulls when i print it
02:35 < crazy2be> despite the fact that INSIDE the function it has value
02:35 < nsf> you're doing something wrong
02:36 < crazy2be> 25 lines of code for the package:
http://pastebin.com/Ua55rQRr
02:37 < nsf> well, I can't help you with that
02:37 -!- drhodes [~none@207.3.149.84] has joined #go-nuts
02:37 < nsf> I just tried to explain what the slice is
02:38 < bfrank> so is a slice just a pointer to an array?
02:38 < nsf> underneath slice is that C struct: struct { void *data; int
length; int capacity; }
02:39 < crazy2be> yeah but...  it's not working like that
02:39 < nsf> so, yes..  it's a pointer to an array with few additional
fields
02:39 < crazy2be> i'll try it in the sandbox
02:40 < nsf> crazy2be: then you or me is a liar
02:40 < nsf> :)
02:40 < crazy2be> well
02:40 < crazy2be> that's how the spec describes it
02:40 < crazy2be> but you can see i assign to it
02:40 -!- jA_cOp__ [~yakobu@ti0043a380-1389.bb.online.no] has quit [Read error:
Connection reset by peer]
02:41 < crazy2be> and then print the value of the variable i just assigned
to
02:41 < crazy2be> which works as expected
02:41 < crazy2be> but outside the function, it does not
02:41 < crazy2be> just prints nulls
02:41 -!- jA_cOp__ [~yakobu@ti0043a380-1389.bb.online.no] has joined #go-nuts
02:42 < nsf> what can I say, in my 5kloc app slices work as slices
02:42 < crazy2be> just don't know where to get an io.Reader to test it with
in the sandbox
02:44 < crazy2be> since there is no filesystem or networking
02:45 -!- araujo [~araujo@190.199.102.96] has joined #go-nuts
02:45 -!- araujo [~araujo@190.199.102.96] has quit [Changing host]
02:45 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
02:46 < nsf> i think there is no point to use sandbox if you have a compiler
environment installed
02:48 < nsf> http://pastie.org/1166071
02:48 < nsf> you can compile this in a sandbox
02:48 < nsf> and run
02:49 -!- gnuvince [~vince@70.35.165.150] has quit [Read error: Operation timed
out]
02:51 < bfrank> Before: [0 0 0 0 0 0 0 0 0 0]
02:51 < bfrank> After: [1 2 3 4 0 0 0 0 0 0]
02:52 < crazy2be> huh
02:52 < nsf> works like a pointer, isn't it
02:52 < crazy2be> that is what i'd expect
02:52 -!- gnuvince [~vince@64.235.212.60] has joined #go-nuts
02:52 < crazy2be> that's how it describes them in some document or another
02:53 < crazy2be> like C arrays
02:53 < crazy2be> kindof
02:53 < nsf> in C there are no arrays
02:53 < nsf> :)
02:54 < crazy2be> well
02:54 < crazy2be> that's what they are refered too
02:54 < jesusaurus> sure it does
02:54 < crazy2be> as
02:55 < crazy2be> whether or not they are "arrays" is semantics
02:55 < jesusaurus> it's just a (not surprisingly) c-like implementation
02:57 -!- RobertLJ [~quassel@c-68-44-163-191.hsd1.nj.comcast.net] has joined
#go-nuts
02:58 < Namegduf> In C there are arrays.
02:58 < Namegduf> They implicitly cast to pointers quickly, but they are a
distinct type and behave differently with sizeof()
02:58 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 264 seconds]
02:59 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
03:02 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 276 seconds]
03:03 < crazy2be> http://pastie.org/1166081
03:03 < crazy2be> that doesn't work
03:03 < crazy2be> why not
03:06 -!- RobertLJ [~quassel@c-68-44-163-191.hsd1.nj.comcast.net] has quit [Ping
timeout: 265 seconds]
03:06 < crazy2be> because that's close to what i'm doing
03:08 < crazy2be> In fact, i just edited to make it demonstrate my example
exactly (almost)
03:08 < crazy2be> And it outputs:
03:08 < crazy2be> Before: [0 0 0 0 0 0 0 0 0 0] In function: [0 1 2 3 4 5 6
7 8 9] After: [0 0 0 0 0 0 0 0 0 0]
03:08 < crazy2be> so i guess i'm replacing the whole slice
03:09 < crazy2be> and it's not being pointer-ish like it should
03:09 < crazy2be> or like i would expect it to
03:09 < crazy2be> but the question is: how do you get around it?
03:10 < crazy2be> i imagine that assigning byte-by-byte would be less than
optimal
03:11 -!- dj2 [~dj2@CPE001f5b35feb4-CM0014048e0344.cpe.net.cable.rogers.com] has
joined #go-nuts
03:11 -!- RobertLJ [~quassel@c-68-44-163-191.hsd1.nj.comcast.net] has joined
#go-nuts
03:11 < cbeck> That doesn't work because s is a copy of buf
03:11 < crazy2be> yes
03:12 < crazy2be> which is what i was doing
03:12 < crazy2be> assigning slice = slice()
03:12 < cbeck> They point to the same place at first, but when you assign
into s, you are creating a new slice and assigning s to it, rather than altering
the memory pointed to by s and buf
03:13 -!- mumbow [~mumboww@c-98-207-108-218.hsd1.ca.comcast.net] has joined
#go-nuts
03:13 < crazy2be> yessir
03:13 < crazy2be> but i can't figure out the best way around it
03:13 < cbeck> if instead you'd said for i := range s {s[i] = i} then you'd
see the change reflected when the func returns
03:13 < crazy2be> is that the best way?
03:14 < cbeck> Depends what you're trying to do
03:15 < crazy2be> Copy something from one io.Reader to the p []byte array,
while replacing one character with another
03:15 -!- Eridius [~kevin@unaffiliated/eridius] has quit [Ping timeout: 276
seconds]
03:20 < nsf> you can also replace this: s = []byte{0, 1, 2, 3, 4, 5, 6, 7,
8, 9}
03:20 < nsf> with: copy(s, []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
03:20 < nsf> if you like syntax form
03:21 < nsf> crazy2be: well..  just read a data to the 'p' from io.Reader,
and then replace needed characters inside it
03:23 -!- zaero [~eclark@valkyrie.buick455.com] has quit [Ping timeout: 276
seconds]
03:23 -!- zaero [~eclark@valkyrie.buick455.com] has joined #go-nuts
03:23 < cbeck> func MyReader(p []byte) (int, os.Error) {read, err :=
stream.Read(p); /*replace bytes in p*/ return read, err}
03:23 < cbeck> Something like that
03:23 -!- kashia_ [~Kashia@port-92-200-219-143.dynamic.qsc.de] has joined #go-nuts
03:24 -!- mumbow [~mumboww@c-98-207-108-218.hsd1.ca.comcast.net] has quit [Ping
timeout: 265 seconds]
03:24 < crazy2be> cbeck: Yeah that's what i'm trying
03:24 -!- drhodes [~none@207.3.149.84] has quit [Ping timeout: 265 seconds]
03:24 -!- gabriel9 [~gabriel9@93.157.192.28] has quit [Ping timeout: 265 seconds]
03:24 -!- Kashia [~Kashia@port-92-200-219-143.dynamic.qsc.de] has quit [Ping
timeout: 265 seconds]
03:24 < crazy2be> although i make a copy because i'm using the RegExp
library for now
03:24 < nsf> crazy2be: but I think there is no function in stdlib that does
replace in-place
03:24 < crazy2be> and it might puke otherwise
03:25 -!- jcao219 [~jcao219@pool-173-74-61-111.dllstx.fios.verizon.net] has joined
#go-nuts
03:25 -!- steveno [~stevenoli@paludis/cheerleader/steveno] has left #go-nuts []
03:25 < crazy2be> Thanks for all your help!
03:26 < crazy2be> I still have not gotten it working, but it is time for
sleep
03:26 < crazy2be> i'll sleep on i
03:26 < crazy2be> *it
03:26 < crazy2be> that usually helps
03:26 < crazy2be> and i figure it out by morning
03:26 -!- crazy2be [~justin@d205-206-130-118.abhsia.telus.net] has left #go-nuts
[]
03:27 -!- crazy2be [~justin@d205-206-130-118.abhsia.telus.net] has joined #go-nuts
03:28 -!- drhodes [~none@207.3.149.84] has joined #go-nuts
03:28 -!- dcat [~dcat@ip70-188-19-141.rn.hr.cox.net] has joined #go-nuts
03:29 < nsf> hehe, recently I was looking at the utf8 package source code
03:29 < nsf> it's funny how Go developers easily accept copy & paste code
03:29 < nsf> it has two internal functions
03:30 < nsf> decodeRuneInternal and decodeRuneInStringInternal
03:30 < nsf> both do the same thing
03:30 < nsf> line to line
03:30 < nsf> that's a failure
03:31 < crazy2be> Huh
03:31 < nsf> and it's not like a 10 lines functions
03:31 < crazy2be> same types and all?
03:31 < nsf> more like 80 lines of copy&paste
03:31 < nsf> there is only one thing that differs of course
03:31 < nsf> the type of argument
03:31 < nsf> string vs.  []byte
03:32 < nsf> but function logic is the same
03:32 < crazy2be> does it deal with it differently?
03:32 < nsf> nope
03:32 < crazy2be> or just cast to []byte in the string version?
03:32 < nsf> you can't do that because it's not efficient
03:32 < nsf> casting between []byte and string makes copies
03:32 < nsf> afaik
03:33 < nsf> and that forces you to do copy & pastes
03:33 < crazy2be> probably
03:33 < nsf> which is kind of stupid imho
03:33 < crazy2be> :/
03:33 < crazy2be> C++ had templates
03:33 < crazy2be> that would solve a case like that
03:33 < nsf> templates is a wrong solution to that
03:33 < nsf> there is no point to generate code two copies of the code that
does the same thing
03:34 < nsf> s/code//
03:34 -!- jefferai [~quassel@kde/amarok/mitchell] has quit [Ping timeout: 255
seconds]
03:34 < crazy2be> :/
03:34 < crazy2be> I'm getting lots of nulls at the end now
03:35 < nsf> crazy2be: you're full of bugs, fix it
03:35 < crazy2be> i guess that makes sense
03:35 < crazy2be> since some other function makes the slice
03:35 < crazy2be> and i don't know the size
03:36 < crazy2be> it works, very slow though
03:36 < crazy2be> mostly from all the printf
03:36 < nsf> I guess the only solution for string/[]byte problem is escape
analysis
03:37 < nsf> because it will allow making temporary casts from []byte to
string
03:37 < nsf> for a particular function
03:37 < nsf> without copies
03:38 < nsf> although shared memory is a problem
03:38 < nsf> :(
03:39 < crazy2be> theoretically interfaces should solve that
03:39 < crazy2be> for most things
03:39 < nsf> no
03:39 < crazy2be> why not?
03:39 < crazy2be> If you have the same login
03:39 < crazy2be> *logic
03:39 < nsf> because they will make it slower
03:39 < crazy2be> you could have an interface desribing the required logic
03:40 < crazy2be> wouldn't that be checked at compile-time?
03:40 < nsf> interface has the same overhead (or even more) as virtual
function call
03:40 < nsf> it's bad for CPU cache
03:40 < nsf> and in functions like that (decodeRune) locality matters
03:41 < crazy2be> write it in C? :P
03:41 < nsf> won't help
03:41 < crazy2be> assembly?
03:41 < nsf> there is a problem within the language
03:41 < nsf> not within the partucular function
03:41 < nsf> particular*
03:42 < nsf> or actually
03:42 < nsf> even in implementation
03:42 < nsf> and maybe the language too
03:42 -!- RobertLJ [~quassel@c-68-44-163-191.hsd1.nj.comcast.net] has quit [Ping
timeout: 276 seconds]
03:42 < nsf> because it uses shared memory model from C
03:43 < nsf> but it makes sense because we have goroutines multiplexing
03:43 < nsf> and they execute on different threads
03:43 < nsf> so, we can't really use TLS
03:43 < nsf> at all
03:44 < nsf> but at least we can rely on the fact that the memory cannot be
accessed in parallel in some cases
03:44 < nsf> ok, I'm stopping that
03:44 < nsf> thinking won't help
03:45 -!- rup [~rupert@deathknight.net] has quit [Read error: Operation timed out]
03:45 -!- rup [~rupert@deathknight.net] has joined #go-nuts
03:45 < crazy2be> it rarely does :P
03:45 < crazy2be> I've gotten it back to working like it did when i started
03:45 < crazy2be> almost
03:45 < crazy2be> JSONUnmarshaler is still complaining
03:46 < crazy2be> but that's for tommorow
03:46 < crazy2be> goodnight :)
03:47 -!- crazy2be [~justin@d205-206-130-118.abhsia.telus.net] has left #go-nuts
[]
03:52 < nsf> hehe, we can't really do the goroutine escape analysis, even if
it's possible, it's very hard
03:59 -!- vdrab [~vdrab@EM114-51-197-210.pool.e-mobile.ne.jp] has joined #go-nuts
04:05 -!- pocket_ [~pocket_@p1196-ipbf3801hodogaya.kanagawa.ocn.ne.jp] has joined
#go-nuts
04:05 -!- vdrab [~vdrab@EM114-51-197-210.pool.e-mobile.ne.jp] has quit [Ping
timeout: 252 seconds]
04:09 < pocket_> Hello
04:10 < pocket_> I wrote simple echoServer and Client with Go
04:10 < pocket_> Server Code: http://pastebin.com/nKk7zPWX
04:10 < pocket_> Client Code: http://pastebin.com/piC3vK8v
04:11 < pocket_> But when I input some text from client, Then Server print
just newline(\n).
04:11 < pocket_> Why It doesn't work?
04:17 -!- dacc [~Adium@c-67-171-32-251.hsd1.wa.comcast.net] has joined #go-nuts
04:17 -!- dacc [~Adium@c-67-171-32-251.hsd1.wa.comcast.net] has left #go-nuts []
04:18 < nsf> try inserting after line 40 in client
04:18 < nsf> writer.Flush()
04:19 -!- piyushmishra [~piyushmis@117.200.225.136] has quit [Ping timeout: 252
seconds]
04:21 < pocket_> Thanks nsf
04:21 < pocket_> Work fine.
04:21 < nsf> :)
04:22 < pocket_> And how can I delete last newline from string?
04:23 < pocket_> Is there any function to do it?  like perl's chomp?
04:23 < nsf> there is something like that in 'strings' package
04:23 < nsf> Trim or something
04:23 -!- bugQ [~bug@c-67-171-127-76.hsd1.ut.comcast.net] has joined #go-nuts
04:24 < nsf> you can use TrimRight or TrimSpace
04:24 < nsf> also if you know that there is always a newline
04:24 < nsf> you can simply remove it by slicing string
04:24 < nsf> s[:len(s)-1]
04:24 < pocket_> Hum, Thanks
04:27 -!- piyushmishra [~piyushmis@117.200.224.118] has joined #go-nuts
04:28 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has quit [Ping
timeout: 240 seconds]
04:38 -!- jA_cOp__ [~yakobu@ti0043a380-1389.bb.online.no] has quit [Read error:
Connection reset by peer]
04:38 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has joined
#go-nuts
04:54 -!- enherit [~enherit@71-83-188-75.dhcp.lnbh.ca.charter.com] has joined
#go-nuts
04:55 -!- jcao219 [~jcao219@pool-173-74-61-111.dllstx.fios.verizon.net] has quit
[Ping timeout: 245 seconds]
04:55 -!- jcao219 [~Jimmy_Cao@pool-173-74-61-111.dllstx.fios.verizon.net] has
joined #go-nuts
04:59 -!- MorningSon [~MorningSo@cpe-72-177-219-41.satx.res.rr.com] has quit
[Quit: WeeChat 0.3.0]
05:00 -!- jcao219 [~Jimmy_Cao@pool-173-74-61-111.dllstx.fios.verizon.net] has left
#go-nuts []
05:01 -!- scm [justme@d018136.adsl.hansenet.de] has quit [Ping timeout: 272
seconds]
05:02 -!- scm [justme@d038032.adsl.hansenet.de] has joined #go-nuts
05:02 -!- ikaros [~ikaros@dslb-084-059-076-021.pools.arcor-ip.net] has joined
#go-nuts
05:16 -!- ikaros [~ikaros@dslb-084-059-076-021.pools.arcor-ip.net] has quit [Quit:
Leave the magic to Houdini]
05:17 -!- ikaros [~ikaros@2001:41b8:9bf:fe04:c8b0:b3ff:fed9:2dbc] has joined
#go-nuts
05:21 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has joined #go-nuts
05:25 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Read error: Operation
timed out]
06:16 -!- ikaros [~ikaros@2001:41b8:9bf:fe04:c8b0:b3ff:fed9:2dbc] has quit [Quit:
Leave the magic to Houdini]
06:18 -!- ucasano [~ucasano@host153-182-static.227-95-b.business.telecomitalia.it]
has joined #go-nuts
06:22 -!- Project_2501 [~Marvin@82.84.71.147] has joined #go-nuts
06:32 < cbeck> Hmm, if you recover from a panic, is there a way to get the
stacktrace?
06:33 < nsf> yes
06:33 -!- piyushmishra [~piyushmis@117.200.224.118] has quit [Ping timeout: 240
seconds]
06:33 < nsf> wait a sec I'll give you an example
06:33 < nsf> http://github.com/nsf/gocode/blob/master/server.go#L44
06:33 < nsf> see here section of the code starting from line 44
06:33 < nsf> prints backtrace..
06:34 < nsf> I did it thread safe because I believe it is possible that
multiple goroutines will panic and recover in parallel
06:37 < cbeck> Hmm, I wonder if that'll work here, I'll give it a try
06:37 < cbeck> I'm getting an index out of bounds panic deep in net via
http, but recovering in my code
06:39 -!- erje_ [~erje@port-92-201-26-103.dynamic.qsc.de] has quit [Quit: Leaving]
06:42 < cbeck> Ah, issue 1114.  Oh well
06:45 < nsf> I'm wondering does it makes sense to use Go's map for small
amount of entries like 10-20
06:45 < nsf> s/makes/make/
06:47 < nsf> cause hashmap looks pretty heavy in hashmap.c
06:48 -!- piyushmishra [~piyushmis@117.200.226.247] has joined #go-nuts
06:49 -!- suiside [~suiside@unaffiliated/suiside] has quit [Quit: leaving]
06:51 -!- suiside [~suiside@unaffiliated/suiside] has joined #go-nuts
06:57 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3]
06:58 < cbeck> nsf: That worked a charm, thanks
07:09 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has quit
[Ping timeout: 276 seconds]
07:10 -!- socratees [~socratees@cpe-76-171-79-40.socal.res.rr.com] has joined
#go-nuts
07:18 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
07:28 -!- aho [~nya@fuld-4d00d2b1.pool.mediaWays.net] has quit [Quit:
EXEC_over.METHOD_SUBLIMATION]
07:30 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has quit [Quit:
This computer has gone to sleep]
07:31 -!- tsdh [~user@p54AF1F65.dip0.t-ipconnect.de] has joined #go-nuts
07:35 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has quit [Quit: Morten.  Desu~]
07:41 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
07:49 -!- kanru [~kanru@61-228-160-87.dynamic.hinet.net] has quit [Quit: WeeChat
0.3.2]
07:51 -!- enherit [~enherit@71-83-188-75.dhcp.lnbh.ca.charter.com] has quit [Quit:
leaving]
07:54 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
08:02 -!- tsdh [~user@p54AF1F65.dip0.t-ipconnect.de] has quit [Quit: Goodbye
guys!]
08:03 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
08:12 -!- napsy [~luka@88.200.96.18] has quit [Quit: Lost terminal]
08:13 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
08:23 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has joined #go-nuts
08:26 -!- photron [~photron@port-92-201-57-106.dynamic.qsc.de] has joined #go-nuts
08:35 -!- sacho [~sacho@213.91.244.15] has joined #go-nuts
08:44 -!- kanru [~kanru@61-228-160-87.dynamic.hinet.net] has joined #go-nuts
08:45 -!- napsy [~luka@88.200.96.18] has quit [Ping timeout: 252 seconds]
08:46 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
08:52 -!- DerHorst [~Horst@e176098253.adsl.alicedsl.de] has joined #go-nuts
08:56 -!- cschmiedl [~alaunos@brln-4dba81c8.pool.mediaWays.net] has joined
#go-nuts
09:02 -!- piyushmishra [~piyushmis@117.200.226.247] has quit [Read error:
Connection reset by peer]
09:07 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 264 seconds]
09:07 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
09:07 -!- MaksimBurnin [~max@44.188-224-87.telenet.ru] has quit [Ping timeout: 240
seconds]
09:07 -!- socratees [~socratees@cpe-76-171-79-40.socal.res.rr.com] has quit [Ping
timeout: 240 seconds]
09:08 -!- boscop_ [~boscop@g226228196.adsl.alicedsl.de] has left #go-nuts []
09:08 -!- boscop [~boscop@g226228196.adsl.alicedsl.de] has joined #go-nuts
09:15 -!- Beg [549f066d@gateway/web/freenode/ip.84.159.6.109] has joined #go-nuts
09:17 -!- illya77 [~illya77@154-115-112-92.pool.ukrtel.net] has joined #go-nuts
09:34 -!- Shyde [~shyde@HSI-KBW-078-043-070-132.hsi4.kabel-badenwuerttemberg.de]
has joined #go-nuts
09:43 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has quit [Read error: Operation
timed out]
09:43 -!- Beg [549f066d@gateway/web/freenode/ip.84.159.6.109] has quit [Ping
timeout: 252 seconds]
09:52 -!- Beg [549f066d@gateway/web/freenode/ip.84.159.6.109] has joined #go-nuts
09:58 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has joined #go-nuts
10:03 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has quit [Ping timeout: 240
seconds]
10:18 -!- ShadowIce` [pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
10:18 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Read error:
Connection reset by peer]
10:26 -!- illya77 [~illya77@154-115-112-92.pool.ukrtel.net] has quit [Read error:
Connection reset by peer]
10:28 -!- terrex [~terrex@84.122.67.111.dyn.user.ono.com] has joined #go-nuts
10:30 -!- gabriel9 [~gabriel9@93.157.192.28] has joined #go-nuts
10:59 -!- ucasano [~ucasano@host153-182-static.227-95-b.business.telecomitalia.it]
has quit [Quit: ucasano]
11:00 -!- Beg [549f066d@gateway/web/freenode/ip.84.159.6.109] has quit [Ping
timeout: 252 seconds]
11:03 -!- jackman_ [~jackman@c-71-56-158-131.hsd1.wa.comcast.net] has joined
#go-nuts
11:05 -!- Bombe [~droden@weltgehirnmaschine.de] has quit [Changing host]
11:05 -!- Bombe [~droden@freenet/developer/Bombe] has joined #go-nuts
11:07 -!- jackman [~jackman@c-71-56-158-131.hsd1.wa.comcast.net] has quit [Ping
timeout: 276 seconds]
11:07 -!- jA_cOp [~yakobu@unaffiliated/ja-cop/x-9478493] has joined #go-nuts
11:20 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
11:21 -!- skejoe [~skejoe@188.114.142.231] has joined #go-nuts
11:36 -!- piyushmishra [~piyushmis@117.200.225.193] has joined #go-nuts
11:36 -!- stalled [~stalled@unaffiliated/stalled] has quit [Ping timeout: 265
seconds]
11:38 -!- jA_cOp_ [~yakobu@unaffiliated/ja-cop/x-9478493] has joined #go-nuts
11:41 -!- jA_cOp [~yakobu@unaffiliated/ja-cop/x-9478493] has quit [Ping timeout:
245 seconds]
11:49 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has joined
#go-nuts
11:49 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts
11:51 -!- pocket_ [~pocket_@p1196-ipbf3801hodogaya.kanagawa.ocn.ne.jp] has quit
[Remote host closed the connection]
12:11 < nsf> hehe, developing fuzzy matching algorithm is interesting..
12:12 -!- Shyde [~shyde@HSI-KBW-078-043-070-132.hsi4.kabel-badenwuerttemberg.de]
has quit [Quit: Shyde]
12:12 < nsf> example: we have 3 strings: "ABCDEF", "ACBDEF", "CABDEF"; and
the pattern: "ABD" how should we rank these strings?  :)
12:13 < nsf> I can't really answer that question by myself :)
12:14 < vsmatck> Rank them for what purpose?  Edit distance or something?
12:14 < nsf> that's the problem, yes
12:14 < vsmatck> Hm, normally I'd suggest levenschtein.  But that's not
fuzzy.  :)
12:14 < nsf> edit distance is algorithmic term, it has nothing to do with
humans
12:14 < vsmatck> yeah, humans are the fuzzy part.
12:15 < nsf> we need to define "preference" in algorithmic terms somehow :)
12:16 < nsf> currently I have weird formula
12:16 < vsmatck> Hm. Like on google where it does the "did you mean ____"
thing?
12:16 < nsf> it works ok for a lot of cases
12:16 < nsf> but I can't really answer how it should work for that case
12:16 < nsf> maybe it shouldn't
12:16 < nsf> because I as a human can prefer one nonsense over another
12:16 < nsf> :)
12:17 < nsf> can't*
12:17 < vsmatck> Would some sort of 'learning' solution work?  Like you
record all previous searches and if it comes close to one of those you print "Did
you mean foo?"
12:17 < nsf> learning will make the system complex
12:17 < nsf> I don't want that
12:17 < vsmatck> You could have a threshhold on edit distance.  Like if it's
beyond some magic number you fall back on matching to previous searches.
12:17 -!- voker57 [~voker57@kvirc/developer/Voker57] has joined #go-nuts
12:17 < nsf> currently it's very fast
12:18 < nsf> O(N) algorithm for ranking sentence, where N is the length of
that sentence
12:18 < nsf> in characters
12:18 -!- tensorpudding [~user@99.23.122.78] has quit [Quit: ERC Version 5.3 (IRC
client for Emacs)]
12:19 < vsmatck> oh, whole sentences.  Is this a searching problem?  Like
you have the user input a sentence and you return possible matches for documents
or something?
12:19 < nsf> algo does something like that: less shifts is better, less cuts
is better
12:19 < nsf> no
12:19 < nsf> it's kind of a general purpose menu selection algo :)
12:19 < nsf> where sentense is a menu entry
12:19 < nsf> it is something simple usually
12:20 < nsf> like "add cube"
12:20 < nsf> "do this"
12:20 < nsf> etc.
12:20 < nsf> for example we have two entries
12:20 < nsf> "add cube" and "add camera"
12:20 < vsmatck> Ah. I get it.  So you have different menu options and you
have a search box to quickly find different menu elements to do various things.
12:20 < nsf> by typing "acu" we can easily select "add cube"
12:20 < nsf> yes
12:21 < vsmatck> I like how web browsers do this for URLs.  Like you start
typing and it lists a bunch of options.  Then narrows it down as you type more.
12:21 < nsf> well, they do exact match probably
12:21 < vsmatck> I dunno about the mapping of "acu" to "add cube" though.
That seems a little weird to me.
12:21 < nsf> I need fuzzy matches :)
12:21 < nsf> it's not
12:21 < vsmatck> Hm, yeah.  I'
12:22 < nsf> because typing "add cu" is a lot more
12:22 < vsmatck> I'd probably have to use it to understand.  It's unfamiliar
to me anyways.
12:22 < nsf> are you using vim?
12:22 < nsf> I know a plugin for vim that does the same for buffer selection
:)
12:22 < nsf> very nice
12:22 < vsmatck> I have.  I'm by no means an advanced vim user.  I use gedit
for my programming.  :)
12:22 < nsf> i see
12:23 < nsf> anyway the point is, for example you have two files:
autocompletioncontext.go and autocompletionfile.go
12:23 < nsf> real life example, I have those
12:23 < nsf> using this plugin you can easily select one of them
12:23 < nsf> by typing
12:23 < nsf> acon
12:23 < nsf> or afi
12:23 < vsmatck> oh true..  hm.  That would take a while with exact
matching.
12:24 < nsf> yes, that's the point :)
12:24 < vsmatck> However, I like what my BASH shell does with
autocompletion.  I can type something and tab complete.  If I don't like what it
tab completed to I can hit tab multiple times to cycle through different matches.
12:24 < nsf> it is slow and dumb :)
12:25 < nsf> I mean hitting one key many times is a waste of time generally
12:25 < vsmatck> Hm, what about making use of "*".  Like I type auto*file to
select one.
12:25 < nsf> well, that's the part of fuzzy matching
12:25 < nsf> it actually converts a pattern to the glob-style pattern too
12:25 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has quit
[Ping timeout: 245 seconds]
12:26 < nsf> for example 'acon' becomes '*a*c*o*n*'
12:26 < nsf> and if name matches against that
12:26 < vsmatck> oh *thinks*
12:26 < nsf> it does additional ranking magic
12:26 < nsf> for example a1c1o1n is less preferred than aco1n
12:27 < nsf> but they both match the pattern
12:27 < nsf> that's the tricky part I was talking about
12:27 < vsmatck> I see.  That's interesting.  I'm going to get some dew
while I think more.
12:28 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has joined
#go-nuts
12:30 < nsf> http://www.vim.org/scripts/script.php?script_id=1984
12:30 < nsf> vim script that does that thing
12:37 < vsmatck> This seems like a trie traversal problem.
12:38 < vsmatck> Like you know what pieces you need when you're traversing.
In a*b*c you know you need to see a and b and c at least once.
12:39 < vsmatck> So you could traverse down and have counters for how many
times you've seen each one.  When you hit the bottom you discard the reconstructed
string if any counter is 0.
12:39 < vsmatck> I have no idea about complexity on that.  That's just a way
I thought it could be done.
12:41 < nsf> well, it's not the hard task yes
12:41 < nsf> the tricky part is to make it right
12:41 < nsf> and definition of "right" is fuzzy here too
12:42 < nsf> because it will work for a lot of cases
12:42 < nsf> but for some it will fail
12:42 < nsf> and it all depends on a particular case by case scenario
12:43 -!- mbohun [~mbohun@ppp115-156.static.internode.on.net] has quit [Quit:
Leaving]
12:43 < nsf> my idea is simple: less shifts you have == better
12:43 < nsf> consider this example:
12:44 < nsf> 1: abcde
12:44 < nsf> 2: acbde
12:44 < nsf> and the pattern is: acd
12:44 < nsf> in both cases you have 1 shift
12:44 < nsf> a>cd
12:44 < nsf> and ac>d
12:44 < vsmatck> hm, ya which do you favor.  When shifts are closer to
beginning or end?
12:44 < nsf> and here I'm preferring ac>d over a>cd
12:45 < nsf> yes
12:45 < nsf> I prefer those that are closer to beginning
12:45 < nsf> and basically that's the algo
12:45 < vsmatck> That does seem like it'd be preferable since english people
read left to right.
12:45 < nsf> yes
12:46 < nsf> I mean it's not like that exactly
12:46 < nsf> I prefer matches that are closer to the beginning
12:46 < nsf> therefore ac>d is better than a>cd
12:46 < nsf> because its matches are closer to the beginning
12:47 < nsf> the implementation of that is rather interesting :)
12:48 < nsf> but the problem arises here:
12:48 < nsf> what if I have
12:48 < nsf> 3: cacde
12:48 < nsf> it contains one shift
12:48 < nsf> >acd
12:48 < nsf> but no cuts :)
12:49 < nsf> should I prefer it over others?
12:49 < nsf> and there is no strict answer to that
12:49 < nsf> because sometimes you want cuts
12:49 < nsf> sometimes you don't
12:49 -!- virtualsue [~chatzilla@93-97-62-8.zone5.bethere.co.uk] has joined
#go-nuts
12:49 < nsf> so..  I simply discarding that kind of ranking
12:49 < nsf> (cuts)
12:49 < nsf> discard*
12:50 < nsf> other than that case it works pretty well
12:50 * vsmatck uses his mouse to select what files he wants.
12:50 < vsmatck> I feel primitive.
12:50 < vsmatck> heh
12:51 < nsf> :D
12:51 < nsf> a matter of habit
12:51 < nsf> I know few starcraft players that are very fast with their
mouse :)
12:51 -!- napsy [~luka@88.200.96.18] has quit [Ping timeout: 265 seconds]
12:52 < vsmatck> heh yeah.  I watch pro starcraft a lot.  It's pretty crazy
watching the first person views on top Korean players.
12:52 < vsmatck> 400+ APM with KB+mouse on some players.
12:53 < nsf> hehe, their keyboard action is more fun to watch than mouse
usually
12:53 < nsf> because mostly they use pretty high sensitivity
12:53 * vsmatck is ~170APM in games.
12:53 < nsf> it's pretty nice :)
12:53 < nsf> mine is far lower
12:53 < nsf> but I play mostly shooters these days
12:54 < vsmatck> yeah how much you need depends a lot on the game.  Or in
starcraft the race.  Protoss players can have low APM.
12:54 < nsf> yep
12:56 -!- yihuang [~yihuang@183.17.179.67] has joined #go-nuts
12:56 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3]
12:57 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
13:11 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
13:23 -!- Project_NAP [~Marvin@82.84.71.147] has quit [Read error: Connection
reset by peer]
13:40 < exch> Does anyone have experience with SGML DTD declarations?
Specifically the difference between a PUBLIC vs SYSTEM identifier?
13:41 < exch> There's doesn't really seem to be any conclusive documentation
as to the purpose of the SYSTEM identifier and when to use that one instead of a
PUBLIC one
13:42 -!- piyushmishra [~piyushmis@117.200.225.193] has quit [Ping timeout: 252
seconds]
13:45 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
13:47 -!- jhawk28 [~jhawk28@user-142gfte.cable.mindspring.com] has joined #go-nuts
13:47 -!- major_majors [~major_maj@c-68-40-195-246.hsd1.mi.comcast.net] has joined
#go-nuts
13:53 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3]
13:58 -!- major_majors [~major_maj@c-68-40-195-246.hsd1.mi.comcast.net] has quit
[Quit: major_majors]
13:58 -!- piyushmishra [~piyushmis@117.200.226.254] has joined #go-nuts
14:12 -!- jhawk28 [~jhawk28@user-142gfte.cable.mindspring.com] has quit [Remote
host closed the connection]
14:14 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has joined
#go-nuts
14:14 -!- terrex [~terrex@84.122.67.111.dyn.user.ono.com] has quit [Quit:
Leaving.]
14:26 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has joined #go-nuts
14:28 -!- peterdn [~peterdn@host86-166-21-20.range86-166.btcentralplus.com] has
quit [Ping timeout: 240 seconds]
14:29 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has quit
[Ping timeout: 272 seconds]
14:29 -!- piyushmishra [~piyushmis@117.200.226.254] has quit [Ping timeout: 255
seconds]
14:30 -!- MorningSon [~MorningSo@cpe-72-177-219-41.satx.res.rr.com] has joined
#go-nuts
14:30 -!- zozoR [~zozoR@4705ds1-ris.0.fullrate.dk] has quit [Ping timeout: 240
seconds]
14:31 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has joined
#go-nuts
14:41 -!- emmanueloga [~emmanuelo@host52.190-30-10.telecom.net.ar] has quit [Ping
timeout: 240 seconds]
14:44 -!- piyushmishra [~piyushmis@117.200.225.129] has joined #go-nuts
14:44 -!- skejoe_ [~skejoe@188.114.142.231] has joined #go-nuts
14:47 -!- skejoe [~skejoe@188.114.142.231] has quit [Ping timeout: 276 seconds]
14:56 -!- peterdn [~peterdn@host86-166-21-60.range86-166.btcentralplus.com] has
joined #go-nuts
15:02 -!- jcao219 [~jcao219@pool-173-74-61-111.dllstx.fios.verizon.net] has joined
#go-nuts
15:03 -!- napsy [~luka@88.200.96.18] has quit [Ping timeout: 276 seconds]
15:03 -!- tav_ [~tav@92.7.77.8] has joined #go-nuts
15:03 -!- sacho [~sacho@213.91.244.15] has quit [Remote host closed the
connection]
15:05 -!- thomas_b_ [~thomasb@cm-84.215.47.51.getinternet.no] has quit [Quit:
leaving]
15:05 -!- tav [~tav@92.7.89.108] has quit [Ping timeout: 245 seconds]
15:09 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
15:16 -!- tav [~tav@92.7.77.8] has quit [Read error: Connection reset by peer]
15:17 -!- tav [~tav@92.7.77.8] has joined #go-nuts
15:21 -!- skejoe [~skejoe@188.114.142.231] has joined #go-nuts
15:24 -!- skejoe_ [~skejoe@188.114.142.231] has quit [Ping timeout: 245 seconds]
15:28 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has joined #go-nuts
15:30 -!- ikaros [~ikaros@dslb-084-059-076-021.pools.arcor-ip.net] has joined
#go-nuts
15:33 -!- risent [~risent@ip-67-202-107-128.static.chi2.systeminplace.net] has
joined #go-nuts
15:35 -!- risent [~risent@ip-67-202-107-128.static.chi2.systeminplace.net] has
left #go-nuts []
15:37 -!- Shyde [~shyde@HSI-KBW-078-043-070-132.hsi4.kabel-badenwuerttemberg.de]
has joined #go-nuts
15:38 -!- bugQ [~bug@c-67-171-127-76.hsd1.ut.comcast.net] has quit [Remote host
closed the connection]
15:42 -!- emmanueloga [~emmanuelo@190.244.14.111] has joined #go-nuts
16:03 < exch>
http://stackoverflow.com/questions/652788/what-is-the-worst-real-world-macros-pre-processor-abuse-youve-ever-come-across/652945#652945
lol
16:07 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-172-36.clienti.tiscali.it] has
joined #go-nuts
16:08 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 272 seconds]
16:09 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
16:13 -!- Sh4pe [~Sh4pe@dslb-088-066-055-077.pools.arcor-ip.net] has joined
#go-nuts
16:13 < ProNihilist> exch: oh my
16:14 < exch> the comment on the first entry is priceless.  Particularly the
punishment bit ^^
16:22 -!- DerHorst [~Horst@e176098253.adsl.alicedsl.de] has quit [Remote host
closed the connection]
16:28 -!- jA_cOp_ [~yakobu@unaffiliated/ja-cop/x-9478493] has quit [Read error:
Connection reset by peer]
16:29 -!- femtoo [~femto@95-89-248-241-dynip.superkabel.de] has joined #go-nuts
16:35 < exch> Would reading from a global map (without a mutex) be
considered safe in a concurrent scenario?  There are no writes to it after it's
been created
16:40 -!- kashia_ [~Kashia@port-92-200-219-143.dynamic.qsc.de] has quit [Quit:
This computer has gone to sleep]
16:41 < cbeck> If it's read only, I can't see why not
16:45 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 276 seconds]
16:47 -!- ExtraSpice [~XtraSpice@78-57-168-219.static.zebra.lt] has joined
#go-nuts
16:48 -!- skejoe_ [~skejoe@188.114.142.231] has joined #go-nuts
16:52 -!- skejoe [~skejoe@188.114.142.231] has quit [Ping timeout: 272 seconds]
16:52 -!- Ariato [Ariato@we.will.never-be.afraid.org] has joined #go-nuts
16:54 -!- Ariato [Ariato@we.will.never-be.afraid.org] has left #go-nuts []
17:03 -!- Shyde [~shyde@HSI-KBW-078-043-070-132.hsi4.kabel-badenwuerttemberg.de]
has quit [Remote host closed the connection]
17:03 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
17:26 -!- bugQ [~bug@c-67-171-127-76.hsd1.ut.comcast.net] has joined #go-nuts
17:32 -!- yihuang [~yihuang@183.17.179.67] has quit [Quit: yihuang]
17:32 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has quit
[Ping timeout: 272 seconds]
17:33 -!- yihuang [~yihuang@183.17.179.67] has joined #go-nuts
17:41 < bfrank> if I hadn't programmed in c before, how would I know that
fmt.Scanf's second argument should be an address of a variable?
17:43 < exch> Presumably by reading the Go spec and realizing that using a
value which is modified inside a function is a bit pointless if you pass it as a
value parameter :)
17:44 < bfrank> that is not really a good answer, I mean it isn't very clear
about that from the spec that I see
17:45 < exch> it does state that everything except maps and slices are
passed by value.  Unless you explicitely turn it into a pointer
17:46 < exch> technically the maps and slices are also by value.  it just
indicates you can modify the underlying data of a map/slice without a problem.
Not the actual map/slice itself
17:47 < bfrank> if the intention is to have the language be easy to use, you
would think that it would do the right thing, so if I pass a variable to scanf,
instead of the address, you would think the language would know that I meant for
it to use the address.  Otherwise, what is the point of passing the variable's
value and not having it work properly?  When would I ever want it to do that?
17:50 < exch> That implies the compiler actually understands the context of
a function you write.  In some cases I do modify the value of a parameter inside a
function, eventhough it is not going to persist outside the function, just so I
can save having to allocate a new variable for something
17:50 < exch> the compiler can't tell the difference in what I intend for it
to mean
17:52 < bfrank> if you do want to modify the value of a parameter inside a
function and not have it affect the original, shouldn't the function be making a
localized copy that isn't seen outside the function?
17:52 -!- yihuang [~yihuang@183.17.179.67] has quit [Remote host closed the
connection]
17:52 < exch> yes, you do that by not passing it as a pointer
17:52 < bfrank> garabage collection should alleviate any concerns of
allocating a new variable
17:52 -!- Ariato [Ariato@we.will.never-be.afraid.org] has joined #go-nuts
17:53 < Ariato> what gui frameworks are for go besides gtk?
17:53 < bfrank> hmm, I guess maybe with time the docs will get better and
more explicit
17:54 < exch> Ariato: apart from a straight up Xlib/XCB library, I don't
think there are any yet
17:55 < Ariato> exch youre still here lol
17:55 < exch> I am :p
17:55 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 272 seconds]
17:56 < Ariato> what have i missed the last 1/2 year?  anything new?
17:56 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
17:57 < exch> A bunch of changes in the language.  Package additions, etc
17:57 -!- bugQ [~bug@c-67-171-127-76.hsd1.ut.comcast.net] has quit [Quit: but
don't be sad.]
17:57 < Ariato> any big app yet?
17:58 < exch> I suppose that depends on how you define 'big'.  I don't
really keep up with everybody's work though.  I just see what's posted in the
mailinglist
17:59 < Ariato> ok any gui app?  :p
17:59 < exch> I haven't seen any yet
18:00 < exch> Though I have my hands full with a full validating sgml parser
atm.  It strains my brain capacity to the point where I'm oblivious to everything
else :p
18:00 < Ariato> hahah
18:02 -!- piyushmishra [~piyushmis@117.200.225.129] has quit [Ping timeout: 272
seconds]
18:03 < Ariato> is a program compiled with gccgo faster than the one
compiled with g6/g8?
18:04 < exch> It used to be.  I'm not sure if that's still the case.  A lot
of work has been done on the Xg/Xl bits in the past months.  I also never used
gccgo myself
18:04 < Ariato> oh i see
18:05 < Ariato> timmy right?
18:05 < exch> timmy?
18:05 < Ariato> damn it
18:05 < Ariato> i thought that was you
18:05 < Ariato> or smth like that
18:05 < exch> heh nope
18:05 < Ariato> i used to hang around here when go came out with XniX23 nick
18:06 < exch> That sounds vaguely familiar
18:06 < Ariato> yes, you loved me
18:06 < Ariato> ;D
18:06 < exch> lol If you say so :)
18:14 -!- femtoo [~femto@95-89-248-241-dynip.superkabel.de] has quit [Ping
timeout: 252 seconds]
18:16 -!- piyushmishra [~piyushmis@117.200.226.116] has joined #go-nuts
18:18 -!- Sh4pe [~Sh4pe@dslb-088-066-055-077.pools.arcor-ip.net] has quit [Quit:
Sh4pe]
18:20 -!- gabriel9 [~gabriel9@93.157.192.28] has quit [Remote host closed the
connection]
18:22 -!- femtoo [~femto@95-89-248-241-dynip.superkabel.de] has joined #go-nuts
18:22 -!- gabriel9 [~gabriel9@93.157.192.28] has joined #go-nuts
18:32 -!- voker57 [~voker57@kvirc/developer/Voker57] has quit [Read error:
Connection reset by peer]
18:54 -!- tux21b [~christoph@90.146.60.30] has joined #go-nuts
18:54 -!- skejoe_ [~skejoe@188.114.142.231] has quit [Ping timeout: 265 seconds]
18:56 -!- Fish [~Fish@bus77-2-82-244-150-190.fbx.proxad.net] has joined #go-nuts
18:56 -!- skejoe [~skejoe@188.114.142.231] has joined #go-nuts
19:00 -!- drhodes [~none@207.3.149.84] has quit [Quit: Lost terminal]
19:18 -!- jackman_ [~jackman@c-71-56-158-131.hsd1.wa.comcast.net] has quit [Ping
timeout: 272 seconds]
19:22 < napsy> khm ...  gccgo is broken
19:25 -!- jackman [~jackman@c-71-56-158-131.hsd1.wa.comcast.net] has joined
#go-nuts
19:33 -!- itrekkie [~itrekkie@ip72-200-111-9.tc.ph.cox.net] has joined #go-nuts
19:54 < exch> pfff..  Here I am parsing .dtd files..  turning them into
object structures of entity/element/attribute definitions with which I will later
validate sgml markup.  And then it hits me that this DTD stuff is all remarkably
similar to regular expressions.  SO instead of a DTD object tree I turn the DTD
code into a regex-like program and yank the sgml markup through it for validation
19:56 < exch> Considering the abysmal lack of (useful) documentation
regarding DTDs, this is a pretty damn brilliant revalation if I say so myself :)
19:58 < Tv> exch: you'd be way way better off sticking to xml, you know..
sgml is crazy insane special cases
19:58 < exch> xml is a variety of sgml.  By 'sgml' I mean all derivatives :)
19:58 < Tv> hah
19:58 < exch> including html/xml/svg
19:59 < Tv> look similar, but completely different under the hood
19:59 < Tv> trying to parse one with the toolchain of another is bound to
fial
20:00 < exch> That's what I thought when I started this, but having been
kneedeep in spec-hell, I've discovered it's not really all that difficult to
distinguish one from the other.  Of course there will always be version specific
little gremlins hiding in the grass, but are easy to account for manually
20:01 -!- aho [~nya@fuld-4d00d71b.pool.mediaWays.net] has joined #go-nuts
20:01 < exch> So far I've gotten pretty solid results from various types of
input: xml, html2, html3, xhtml, svg and a bunch of real world stuff from the web
that can't be classified at all
20:06 < cbeck> http://code.google.com/p/sre2/ - RE2 lib in the works
20:07 < cbeck> Hopefully it's fully functional soon, regexp makes me want to
tear my hair out sometimes
20:07 < exch> that will likely be useful to see how to go about a solid
regex implementation.  I doubt I can retrofit this parser to use an actual regexp
engine though.  It needs constructs strictly related to DTDs and schemas
20:08 < exch> Which likely makes it a fair bit les complex than something
like RE2 as well
20:08 < cbeck> Isn't sgml context free anyway?
20:09 < exch> There are rules to which it must adhere.  And rules can be
enforced :)
20:09 < exch> But yes, the level of enforcement depends on the
implementation..  they will be different for html4 as opposed to xml
20:09 < cbeck> Sure, but if it's context free, then parsing with a regex is
impossible
20:09 < cbeck> at least generally
20:11 -!- teop [~teop@78.138.171.130] has joined #go-nuts
20:11 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 245 seconds]
20:12 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
20:12 < Gertm> I've been reading up on go a bit, and I was wondering why the
makers decided to still use pointers.  There has to be a good reason, right?
20:14 < exch> As opposed to just passing everything by reference as a
default?
20:14 < Gertm> yeah
20:14 < exch> Not sure really
20:14 -!- terrex [~terrex@84.122.67.111.dyn.user.ono.com] has joined #go-nuts
20:14 < Gertm> It's not that I mind they're there, I'm just curious why
they're explicit.
20:15 < cbeck> I think to allow you to *not* use them in places
20:15 < Tv> Gertm: probably comes down to them wanting Go to be low-level
enough to work for true systems development
20:16 < Tv> personally, i always end up trying to have var foo struct
something and setting foo to nil
20:16 -!- CharlesDM [De@43.137-244-81.adsl-dyn.isp.belgacom.be] has joined
#go-nuts
20:20 < Namegduf> Speed.
20:20 < Namegduf> Using references for everything is slow.
20:21 < Namegduf> References are also the same size or larger than many
primitive types.
20:21 < Namegduf> So memory usage suffers.
20:21 < exch> I suppose pointer dereferencing has a cost that can sometimes
be worse than the alternative
20:21 < Namegduf> The alternative being "have explicit pointers", yeah.
20:22 < exch> I'm a bit fuzzy on the difference between a reference and a
pointer though.  To my brain that sounds like the same thing
20:22 < Namegduf> They are the same thing.
20:22 < exch> why does c++ make a distinction there then?  Or have I
misunderstood something there?
20:23 < Namegduf> C++ references are non-nil, const pointers, which are used
syntactically as if they weren't pointers.
20:23 < exch> ah
20:23 < Namegduf> Const in that they always refer to the same thing.
20:24 < exch> basically a protection layer ontop of a standard pointer
20:24 < Namegduf> Having every type be used as a pointer to that type also
means you can't really write good cache-conscious algorithms, and your code will
have potentially many cache misses.
20:24 < Namegduf> In most code, that doesn't matter, but the
actually-where-the-CPU-time-is-used inner loops suffer as much as everything else.
20:25 < exch> hmm.  SOunds like I have a lot to learn in that respect.  I
never really considered any of that sort of stuff
20:25 < exch> I should prolly do some reading on the subject
20:25 < Gertm> Having coded almost no C++ before, I feel a bit set back when
learning Go. It's the first lower-level language I'm learning...  Should I know
C/C++ ?
20:26 < Namegduf> I would suggest starting with Go rather than those.
You'll need to learn some lower level things, but learning them with Go is no
harder.
20:26 < cbeck> You should probably learn them at some point, but there's no
need to do so prior to learning Go
20:26 < cbeck> And the syntax is way more friendly
20:28 < Gertm> Well I do C# for a living, and toying with functional
languages in my spare time.  Go seems like a nice addition to my languages
collection.
20:28 < exch> Gertm: I came from 10 years of C# myself
20:28 < Gertm> exch: so what are your impressions so far?
20:28 < exch> Sporadic use of C inbetween, but not enough to get me familiar
with all the low level dirt
20:28 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has quit [Ping
timeout: 255 seconds]
20:28 < exch> Gertm: I left C# behind.  That should tell you all :)
20:29 < Gertm> hmm nice
20:29 < exch> Eventhough Go is still in development.  It's already worth the
switch and it can only get better
20:29 < Gertm> I'm printing the language spec, going to start with that.
20:29 < exch> The only thing I miss is the immense standard library.  But
that's just a matter of time for Go
20:29 < Gertm> yeah, .NET is kinda nice for that
20:30 < Gertm> But from what I've seen so far from browsing through the
packages, Go has everything I want/need already in the standard packages.
20:32 -!- virtualsue [~chatzilla@93-97-62-8.zone5.bethere.co.uk] has quit [Ping
timeout: 272 seconds]
20:44 -!- Ariato [Ariato@we.will.never-be.afraid.org] has quit [Read error:
Connection reset by peer]
20:44 -!- HollyRain [~HollyRain@212.106.246.8] has joined #go-nuts
20:45 < HollyRain> hi!  I've several functions that do the same except for a
little code which is different for each one of them
20:46 < HollyRain> could be created another functions with the different
code and then call them from the main function?
20:47 < HollyRain> func common(a string, func different())
20:48 < exch> func common(a string, different func())
20:48 -!- devink [~devin@c-76-24-8-98.hsd1.ma.comcast.net] has joined #go-nuts
20:49 < exch> or if 'different' needs parameters and/or a return value: func
common(a string, different func(string) int)
20:49 -!- alkavan [~alkavan@IGLD-84-228-162-5.inter.net.il] has joined #go-nuts
20:50 -!- piyushmishra [~piyushmis@117.200.226.116] has quit [Ping timeout: 276
seconds]
20:51 < HollyRain> exch: and if the func has different parameters?  because
I've to pass it different types
20:51 < HollyRain> I refer to the different func.
20:51 < HollyRain> could be solved using an interface?
20:52 < exch> probably, yes
20:52 < HollyRain> ok, thanks
21:01 -!- rlab [~Miranda@91.200.158.34] has quit [Quit: Miranda IM! Smaller,
Faster, Easier.  http://miranda-im.org]
21:09 -!- dcat [~dcat@ip70-188-19-141.rn.hr.cox.net] has left #go-nuts ["Leaving"]
21:14 -!- Malatesa [43bbea18@gateway/web/freenode/ip.67.187.234.24] has joined
#go-nuts
21:15 < exch> http://pastebin.com/Vqu4npZN How is it that struct B still
qualifies as interface Object, eventhough it's initialized as a pointer but the
function receiver is a value?
21:15 < exch> If you do it the other way around (pointer receiver, but value
declaration), the compiler fails
21:15 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has joined
#go-nuts
21:20 < yiyus> exch: from the spec: The method set of the corresponding
pointer type *T is the set of all methods with receiver *T or T (that is, it also
contains the method set of T)
21:20 < exch> hmm
21:20 -!- alkavan [~alkavan@IGLD-84-228-162-5.inter.net.il] has quit [Quit:
Leaving]
21:20 -!- janm [~jmalonzo@ppp121-44-224-98.lns20.syd7.internode.on.net] has quit
[Ping timeout: 245 seconds]
21:21 < exch> It's a bit confusing that this only goes for a *T and not for
T
21:21 -!- janm [~jmalonzo@ppp121-44-166-130.lns20.syd7.internode.on.net] has
joined #go-nuts
21:22 -!- Fish [~Fish@bus77-2-82-244-150-190.fbx.proxad.net] has quit [Remote host
closed the connection]
21:23 < yiyus> exch: what do you mean?
21:24 < exch> a vaiable declared as *T will always satisfy an interface,
regardless of whether the functions have pointer receivers or not.  But if the
variable is declared as T, it will only consider the functions with T receivers
21:24 < Namegduf> Thre's good reason for it.
21:24 < Namegduf> Methods on T can work on *T by automatic dereferencing.
21:25 < Namegduf> Well, better way to put it.
21:25 < Namegduf> Parameters expecting T can work on *T by automatic
dereferencing.
21:25 < Namegduf> But parameters expecting *T can't work on T by getting an
automatic pointer, because T has already been copied.
21:26 < Namegduf> So you don't get pass-by-reference semantics.
21:26 < exch> hmm
21:26 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has quit [Quit:
This computer has gone to sleep]
21:27 < Namegduf> This means that mutator methods will work on a copy.
21:27 < Namegduf> Which is almost certainly not what is wanted.
21:27 < Namegduf> You could make interfaces containing them *seem* to work,
but they wouldn't actually do what was wanted.
21:30 < exch> If I understand this correctly, neither of the 'this.name =
name' assignments in either struct A or B will survive after the SetName() call,
eventhough B is passed as a pointer receiver initially (the runtime will
dereference it and make a copy)
21:31 < Namegduf> If it's a method on the struct, not a pointer to the
struct, yeah.
21:31 < Namegduf> Receivers behave exactly like parameters do.
21:32 < exch> right, that clears things up a bit
21:33 < exch> I was beginning to fear I lost my mind there for a sec
21:34 -!- skejoe [~skejoe@188.114.142.231] has quit [Quit: Lost terminal]
21:34 -!- cco3 [~conley@205.248.100.252] has joined #go-nuts
21:45 -!- niemeyer [~niemeyer@201-35-72-214.pltce701.dsl.brasiltelecom.net.br] has
joined #go-nuts
21:46 < Tv> exch: absence of evidence is not evidence of absence ;)
22:01 -!- awidegreen [~quassel@62.176.237.78] has quit [Read error: Connection
reset by peer]
22:01 -!- gabriel9 [~gabriel9@93.157.192.28] has quit [Ping timeout: 265 seconds]
22:02 -!- luruke [~luruke@151.53.42.188] has joined #go-nuts
22:05 < napsy> ok a silly question, how do I concatenate uint8 to a string?
mystr += ch doesn't seem to work
22:07 < Tv> napsy: tried mystr += string(ch) ?
22:07 < napsy> oops, totally forgot
22:07 < napsy> tn
22:07 < napsy> x
22:08 < exch> strings are immutable.  Modifying them wih + or += is a
timeconsuming and expensive process.  You're better off using a bytes.Buffer to
build a string.  It allows writing of strings, byte slices and individual bytes or
unicode runes
22:08 < exch> granted though, if it's a single concatenation somewhere in
the code, it probably won't matter much
22:08 < napsy> ok
22:10 -!- Chryson [~Chryson@c-71-61-11-114.hsd1.pa.comcast.net] has joined
#go-nuts
22:10 < HollyRain> exch: and what about use fmt.Sprintf ?
22:11 < exch> I think it uses a bytes.Buffer internally
22:11 < exch> Not sure though.  I'd have to check the source
22:11 -!- tvw [~tv@e176001204.adsl.alicedsl.de] has joined #go-nuts
22:14 -!- niemeyer [~niemeyer@201-35-72-214.pltce701.dsl.brasiltelecom.net.br] has
quit [Ping timeout: 245 seconds]
22:21 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-172-36.clienti.tiscali.it] has
quit [Quit: E se abbasso questa leva che succ...]
22:23 -!- Malatesa [43bbea18@gateway/web/freenode/ip.67.187.234.24] has quit
[Quit: Page closed]
22:25 -!- tvw [~tv@e176001204.adsl.alicedsl.de] has quit [Ping timeout: 245
seconds]
22:34 -!- femtoo [~femto@95-89-248-241-dynip.superkabel.de] has quit [Quit:
Leaving]
22:41 -!- ikaros [~ikaros@dslb-084-059-076-021.pools.arcor-ip.net] has quit [Quit:
Leave the magic to Houdini]
22:42 -!- ShadowIce` [pyoro@unaffiliated/shadowice-x841044] has quit [Quit:
Verlassend]
22:54 -!- CharlesDM [De@43.137-244-81.adsl-dyn.isp.belgacom.be] has quit []
22:56 -!- luruke [~luruke@151.53.42.188] has quit [Quit: Leaving]
22:58 -!- HollyRain [~HollyRain@212.106.246.8] has left #go-nuts []
22:59 -!- itrekkie [~itrekkie@ip72-200-111-9.tc.ph.cox.net] has quit [Quit:
itrekkie]
23:00 -!- terrex [~terrex@84.122.67.111.dyn.user.ono.com] has quit [Quit:
Leaving.]
23:04 -!- tensorpudding [~user@99.23.122.78] has joined #go-nuts
23:06 -!- gabriel9 [~gabriel9@93.157.192.28] has joined #go-nuts
23:30 -!- photron [~photron@port-92-201-57-106.dynamic.qsc.de] has quit [Ping
timeout: 252 seconds]
23:47 -!- powerje [~powerje@adsl-75-49-12-108.dsl.wotnoh.sbcglobal.net] has joined
#go-nuts
23:53 -!- Sh4pe [~Sh4pe@dslb-088-066-055-077.pools.arcor-ip.net] has joined
#go-nuts
--- Log closed Sun Sep 19 00:00:07 2010