--- Log opened Sat Mar 05 00:00:55 2011 00:12 -!- yebyen [~yebyen@martyfunkhouser.csh.rit.edu] has quit [Read error: Operation timed out] 00:13 -!- yebyen [~yebyen@martyfunkhouser.csh.rit.edu] has joined #go-nuts 00:25 -!- iant [~iant@nat/google/x-ronbcxwmepwotmxt] has quit [Quit: Leaving.] 00:34 < skelterjohn> anyone want to check out the go IDE I've been working on? It's still under dev... can't actually *build* anything yet 00:34 -!- iant [~iant@67.218.107.6] has joined #go-nuts 00:34 -!- mode/#go-nuts [+v iant] by ChanServ 00:34 < aiju> but hey pretty colours? 00:34 < skelterjohn> something like that 00:34 < skelterjohn> been learning all about js and jquery 00:34 < aiju> http://aiju.phicode.de/rant/syntax-highlighting 00:35 < skelterjohn> have a file explorer that ... works 00:35 < aiju> oh yeah that thing was in JS 00:35 < skelterjohn> oh, you made another blog post? 00:36 < skelterjohn> anyway, the ide is at https://github.com/skelterjohn/gbide 00:36 < aiju> i have 58 now! 00:36 < rl> You're using javascript in your IDE? 00:36 < aiju> rl: it runs in your browser 00:36 < rl> That's an interesting concept. What's the motivation for using an IDE in your browser? 00:36 -!- dfr|mac [~dfr|work@nat/google/x-fkvmcqgecrgdvgdi] has quit [Remote host closed the connection] 00:36 < aiju> it's hip 00:37 < aiju> cloud and stuff 00:37 < rl> Just putting it in your browser doesn't really make it cloud computing :p 00:38 < exch_> the idea is to move desktop apps away from silly legacy BS like AT, GTK, wx and just use a UI toolkit that looks/works the same everywhere 00:38 < exch_> s/AT/QT/ 00:39 < aiju> same idea like Java 00:39 < aiju> we can't get it work everywhere, let's just make it suck everywhere 00:39 < skelterjohn> rl: because that way it will run anywhere 00:39 < exch_> if you're doing it wrong, then yes 00:39 < skelterjohn> and i don't see a nice pure-go UI library 00:39 < aiju> skelterjohn: by "anywhere" you mean on Windows, Linux, OS X and BSD 00:39 < skelterjohn> yep 00:39 < rl> exch_: Are you telling me that javascript and the DOM model works the same in all browsers? 00:39 < skelterjohn> i think that's everywhere 00:40 < exch_> r1, nope. but thats what things like dojo and jquery are for 00:40 < rl> So if you're gonna make a library handle cross-platform compatibility for you, why not just use Java, as pointed out? 00:40 < skelterjohn> because i don't like writing java code anymore 00:40 < exch_> because I'm using Go 00:41 < skelterjohn> the backend of my IDE is written in go 00:41 < skelterjohn> the frontend is html/js 00:42 < rl> Well "I want to write it in this language" is a fair answer to my question :) It's just very different from the original answer I got 00:42 < aiju> hahahaahhahahaha Java doesn't work anywhere 00:42 < aiju> Java works on Windows and OSX 00:42 < aiju> if you pray enough it might work on Linux and BSD 00:42 < aiju> it certainly won't work on e.g. ARM 00:42 < skelterjohn> "anywhere" does not include windows and osx, apparently 00:43 < rl> I don't know, I find running Eclipse on linux works fine 00:43 < aiju> that "Java is portable" myth is BS 00:43 < skelterjohn> i'm pretty sure js is portable :) 00:43 < aiju> ANSI C is portable 00:43 < skelterjohn> lots of people work very hard to make jquery stuff look the same on all platforms 00:43 < skelterjohn> anyway, js is a really kooky language 00:43 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 00:43 < rl> Yes, it is 00:44 < skelterjohn> i have a hard time understanding why it is the way it is 00:44 < skelterjohn> or why something better wasn't chosen 00:44 < rl> so why do you write in it? :p 00:44 < aiju> var undefined = 0; 00:44 < aiju> valid JS 00:44 < exch_> im not having a lot of fund writing the JS bits 00:44 < skelterjohn> to make a GUI 00:44 < skelterjohn> i thought that was clear? 00:44 -!- ako [~nya@fuld-590c623c.pool.mediaWays.net] has joined #go-nuts 00:45 < exch_> this is why i'm currently attempting to allow the writing of client code in Go, which is translated into optimized and appropriate JS with the UI lib included 00:45 < skelterjohn> html/js apps can look quite nice, when done right 00:45 < skelterjohn> and i'm good at doing things right, so i'll get there eventually 00:45 < skelterjohn> exch_: whoah sort of like GWT 00:45 < exch_> no idea what GWT is :p 00:45 < rl> well it'll be interesting to see how it turns out 00:46 < skelterjohn> googles thing that compiles java to js 00:46 < exch_> yea. chances are it'll be shit, but I think it's worth a try 00:46 < skelterjohn> it just sounds tough 00:46 < aiju> i'll write a Go to PDP-11 compiler 00:46 < aiju> you can run them in my PDP-11 JS emulator then 00:46 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Quit: JusticeFries] 00:46 < aiju> 64 KB ought to be enough for everyone 00:47 < skelterjohn> well, ideally you wouldn't have to compile go to js. you'd create some kind of structure in go that would be able to make itself into js 00:47 -!- aho [~nya@fuld-590c7dd1.pool.mediaWays.net] has quit [Ping timeout: 255 seconds] 00:47 < rl> how would the functions transform themselves to js code? 00:48 < skelterjohn> RPC, presumably 00:48 < rl> so you'd keep the logic serverside? 00:48 < exch_> the logic remain in the webserver 00:48 < skelterjohn> unless you actually compile go to js, no choice 00:48 < exch_> well not all aof it 00:48 < exch_> the stuff that manipulates the UI is in JS ovbiously 00:48 < rl> skelterjohn: sorry, i thought compiling go to js was the goal :p 00:49 < exch_> Just all the data and number crunching should stay on the server side 00:49 < rl> yeah 00:49 < skelterjohn> the goal is to make a GUI with js without having to write or know js 00:49 < |Craig|> more importantly, without having to maintain js 00:49 < rl> right but js isn't all datastructures, you need to somehow write some logic (like "when I click here make this window bigger") 00:49 < rl> and that logic needs to be turned from go into js 00:49 < exch_> Yea, that's the part that should be translated from Go to JS 00:50 < rl> it is starting to sound like GWT though 00:51 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has quit [Remote host closed the connection] 00:51 < rl> where you have server and client side logic, and model classes that you pass between them through rpcs 00:51 < exch_> So you can basically write the entire app in Go and never bother worrying about the gritty JS bits. The build 'framework' (and I use that term with much hesitation) will do all the hard work of splitting your code up and generating all the appropriate html/js/etc as well as build the server app 00:52 < exch_> It sounds like GWT I suppose. Still I have no idea yet how to make it work properly. I'm just brainstorming atm and trying some things out 00:52 < rl> so will you port all of go libraries to js versions? or will there be separate libraries which are made to be ported to js? 00:52 < rl> and by port I mean "compile" 00:53 < exch_> the JS UI library already exists. The Go side simply exposes a thin wrapper to that library allowing you to build the app/logic in Go 00:53 < exch_> once you build the whole thing, it'll spit out the appropriate calls and setup for the client side based on what you wrote in Go 00:54 -!- tarrant [~tarrant@69.169.141.202.provo.static.broadweavenetworks.net] has joined #go-nuts 00:54 < exch_> anyhoo, I was watching a movie which i'll go back to now :p 00:54 < rl> well, it sounds cool. I sort of liked GWT, though it can be a real pain in the ass at times 00:55 < rl> (and is way too heavy) 00:55 < exch_> Yup, there's definitly the risk of it become way too convoluted and messy 00:55 < exch_> But I'll find out soon enough :p 00:56 -!- mattn_jp [~mattn@s60.BMT-e1.vectant.ne.jp] has joined #go-nuts 00:56 < exch_> The good thing is that dojo (as opposed to jquery) kinda lends itself well to this, so I have high hopes for something at least marginally practical 00:56 < rl> I'm sure you'll re-make a lot of mistakes GWT made (not because I think you're in the habit of making mistakes, but because I'm sure a lot of them are unavoidable), would be interesting if there was some way of learning from that 00:56 < rl> i.e. learning from what GWT did 00:57 < exch_> learning is really the only reason I program anything. I do enjoy a good challenge :) 00:59 < rl> that's good :) well, i gotta sleep, seeya 01:01 -!- thomas_b [~thomasb@cm-84.215.47.51.getinternet.no] has quit [Read error: Operation timed out] 01:01 -!- tobier [~tobier@c-1e9de055.712-1-64736c11.cust.bredbandsbolaget.se] has quit [Read error: Operation timed out] 01:02 -!- chimes [~chimes@24.104.130.118] has quit [Ping timeout: 241 seconds] 01:03 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Ping timeout: 276 seconds] 01:03 -!- clip9 [clip9@er.en.svarteper.com] has quit [Read error: Operation timed out] 01:03 -!- clip9 [clip9@er.en.svarteper.com] has joined #go-nuts 01:03 -!- brett [~brett@rdnzl.net] has quit [Quit: ZNC - http://znc.sourceforge.net] 01:04 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has quit [Read error: Operation timed out] 01:04 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has joined #go-nuts 01:04 -!- brett [~brett@rdnzl.net] has joined #go-nuts 01:05 -!- tobier [~tobier@c-1e9de055.712-1-64736c11.cust.bredbandsbolaget.se] has joined #go-nuts 01:06 -!- nettok [~quassel@200.119.159.85] has joined #go-nuts 01:06 < skelterjohn> is there an easy standard way to take two files (one open for reading, the other for writing) and say "everything from YOU goes to YOU" 01:06 < skelterjohn> and then just forget about it? 01:07 < skelterjohn> kind of like the reverse of pipe 01:07 < exch_> io.Copy(dstfd, srcfd) 01:07 < exch_> you still have to open them both manually and close em 01:07 < skelterjohn> thanks! 01:07 < skelterjohn> well sure 01:11 -!- thomas_b [~thomasb@cm-84.215.47.51.getinternet.no] has joined #go-nuts 01:16 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit: Verlassend] 01:18 -!- nettok [~quassel@200.119.159.85] has quit [Ping timeout: 255 seconds] 01:28 -!- shvntr [~shvntr@113.84.144.217] has joined #go-nuts 01:38 -!- ronnyyy [~quassel@p4FF1C6D8.dip0.t-ipconnect.de] has quit [Ping timeout: 250 seconds] 01:44 < KBme> hahahah 01:44 < KBme> [aiju] we can't get it work everywhere, let's just make it suck everywhere 01:45 < KBme> isn't there allready a javascript editor from the moztards? 01:46 -!- xyproto [~alexander@77.40.159.131] has quit [Ping timeout: 252 seconds] 01:48 -!- Wiz126 [~Wiz@h29.117.232.68.ip.windstream.net] has quit [] 01:49 -!- xyproto [~alexander@77.40.159.131] has joined #go-nuts 01:49 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has quit [Quit: Leaving.] 01:54 -!- dforsyth_ [~dforsyth@ec2-50-18-22-230.us-west-1.compute.amazonaws.com] has joined #go-nuts 01:56 -!- steevel [steevel@yahoe.se] has joined #go-nuts 01:58 -!- dRbiG [drbig@unhallowed.pl] has quit [Ping timeout: 241 seconds] 02:00 -!- tarrant [~tarrant@69.169.141.202.provo.static.broadweavenetworks.net] has quit [Read error: Operation timed out] 02:00 -!- mattn_jp [~mattn@s60.BMT-e1.vectant.ne.jp] has quit [Quit: Ex-Chat] 02:01 -!- jessta [~jessta@li7-205.members.linode.com] has quit [Ping timeout: 252 seconds] 02:01 -!- jessta [~jessta@li7-205.members.linode.com] has joined #go-nuts 02:02 -!- perdiy [~mkhl@sxemacs/devel/perdix] has joined #go-nuts 02:02 -!- Netsplit *.net <-> *.split quits: dforsyth, krakensden, Zoopee, steevel_ 02:03 -!- Netsplit over, joins: Zoopee, krakensden 02:04 -!- perdix [~mkhl@sxemacs/devel/perdix] has quit [Ping timeout: 255 seconds] 02:05 -!- dRbiG [drbig@unhallowed.pl] has joined #go-nuts 02:07 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has joined #go-nuts 02:09 -!- m4dh4tt3r [~Adium@adsl-75-61-193-22.dsl.pltn13.sbcglobal.net] has joined #go-nuts 02:09 -!- iant [~iant@67.218.107.6] has quit [Quit: Leaving.] 02:13 -!- rseymour [~rseymour@cacsag4.usc.edu] has quit [Quit: I'm outta heee-eere] 02:13 -!- binarypie [~binarypie@adsl-99-35-135-146.dsl.pltn13.sbcglobal.net] has quit [Ping timeout: 255 seconds] 02:14 -!- dRbiG [drbig@unhallowed.pl] has quit [Ping timeout: 276 seconds] 02:15 -!- boscop [~boscop@g227152143.adsl.alicedsl.de] has quit [Ping timeout: 255 seconds] 02:20 -!- saturnfive [~saturnfiv@219.145.58.122] has joined #go-nuts 02:23 -!- tensorpudding [~user@99.23.127.179] has quit [Read error: Connection reset by peer] 02:23 -!- steven [~steven@unaffiliated/steven] has joined #go-nuts 02:23 < steven> hello 02:23 < steven> whats the most built-in way to convert a []byte to a string? 02:24 < steven> im sure this is simple but i cant find it in the doc pages 02:26 -!- tensorpudding [~user@99.56.160.152] has joined #go-nuts 02:28 < drhodes> steven: string([]byte{...}) will do it. 02:29 <@adg> steven: for the []byte b, string(b) 02:29 < steven> hmm.. but im curious, why will that work? i dont see in the documentation explaining it 02:29 <@adg> it's just a type conversion 02:29 < steven> oh. 02:29 < steven> that makes sense :) 02:30 < steven> how do you declare that your own type is convertable from one type to another? 02:31 < steven> for example, i have "type TestString []byte" and im not able to do "string(v)" for "var v TestString", instead i have to do "string([]byte(v))" 02:32 -!- dRbiG [drbig@unhallowed.pl] has joined #go-nuts 02:32 < edsrzf> string(v) should work 02:32 < edsrzf> In that case 02:32 < edsrzf> It compiles for me, anyway. 02:33 < steven> test.go:18: cannot convert b (type TestString) to type string 02:34 < steven> test.go:18: cannot convert b (type TestString) to type string 02:34 < steven> sorry 02:34 < edsrzf> Oh, whoops, I typed it in wrong. 02:34 -!- saturnfive [~saturnfiv@219.145.58.122] has left #go-nuts [] 02:34 < edsrzf> You're right. 02:36 < edsrzf> Seems like that should work to me, but the spec doesn't make it sound that way. 02:38 < steven> weird 02:39 < steven> i really like go. 02:39 < steven> its like c v2 02:45 < steven> does Go have an FFI to C? 02:45 < steven> or a way to communicate to C progrums? 02:45 < cbeck> Yes, cgo 02:45 < steven> *prohgrumms 02:45 < steven> cool 02:46 < cbeck> Erm 02:46 < cbeck> Programs or libraries? 02:46 < steven> well basically im curious if i can write Cocoa bindings for Go. 02:47 < steven> so im wondering if Go can utilize C libraries and if C can utilize Go libraries 02:47 < steven> since they're fundamentally different languages, im assuming not. 02:58 < Xenith> Yep, using cgo, you can use C libraries/code within Go. 03:04 < skelterjohn> cocoa bindings for go would be entirely possible 03:04 < skelterjohn> i think i've heard others talk about doing it, before 03:05 < skelterjohn> nothing on any of the project lists 03:12 < steven> i think that would be fun. id love to get started on it. 03:15 -!- dfr|mac [~dfr|work@ool-182e3fca.dyn.optonline.net] has joined #go-nuts 03:28 -!- shvntr [~shvntr@113.84.144.217] has quit [Ping timeout: 260 seconds] 03:32 <@adg> you might have trouble with objective-c and cgo 03:32 <@adg> objective-c has a runtime, yes? and so does go 03:33 -!- werdan7 [~w7@freenode/staff/wikimedia.werdan7] has joined #go-nuts 03:33 <@adg> c and c++ libraries link well because they're just object files, any initialization is application-level 03:33 <@adg> objc might be more difficult - but i'm not an objective-c expert, though, and would like to know more about it 03:34 < skelterjohn> objc's runtime is a bit sneakier 03:34 < skelterjohn> it's not like go's runtime 03:34 < skelterjohn> but it still might cause problems 03:34 < skelterjohn> they have an event loop that must be running in order for memory management to work 03:35 < skelterjohn> but i think it might be possible to invoke that from a goroutine 03:35 <@adg> i've tried to get go-sdl working with cgo under osx, but had problems that i believe are related to both objective-c and go wanting to be main() 03:35 <@adg> i should give it another try 03:35 < skelterjohn> sdl has an ego complex 03:35 <@adg> the difficulty was compounded by that, yes, in that sdl uses a C macro to rewrite user-defined main functions :/ 03:35 < skelterjohn> it wasn't objective C that needed to be main - it was SDL 03:36 <@adg> last time i tried i spent hours and got nowhere, so i'm not keen to dive in again :| 03:37 < skelterjohn> i'm exploring the js angle to go gui 03:37 < skelterjohn> launch a server and browser 03:37 -!- m4dh4tt3r [~Adium@adsl-75-61-193-22.dsl.pltn13.sbcglobal.net] has quit [Quit: Leaving.] 03:37 < skelterjohn> it's portable, at least :) 03:37 <@adg> indeed 03:37 <@adg> and you can run it over the network, hurrah 03:38 <@adg> i just wrote this http://nf.id.au/collecting-and-plotting-live-data-with-golang 03:39 < steven> hey guys, 03:39 < steven> i totally misunderstood how if's assignment works 03:39 < steven> im trying to write idiomatic error handling in go, and i suspect im not supposed to write a huge pyramid of ifs 03:40 < steven> but i thought if you assigned variables in an if statement's first half, that might be a useful way to .. i dunno 03:40 < steven> i guess im crazy. hold on. 03:40 <@adg> the idea is to handle the errors and bail 03:41 <@adg> if err := foo(); err != nil { 03:41 <@adg> return err 03:41 <@adg> } 03:41 < steven> right. but foo() has multiple assignment. 03:41 < steven> ahh crap. im gonna have to define the vars above the if statement, arent i 03:41 < steven> i dont see a way around it. 03:41 <@adg> so define it outside the if statement, if it returns values you'll need later 03:41 < steven> or i can just check the value in the if statement without that assignment trick 03:41 <@adg> yes, the latter 03:41 < steven> or i can just check the value in the if statement without that assignment trick 03:42 < steven> grrr 03:42 < steven> second time thtas happened tonight. i must be drunk. 03:42 < steven> anyway which would you do? 03:42 <@adg> make the function call outside the if statement 03:42 < steven> k 03:42 < steven> is there a more idiomatic way to bail by printing an exiting than fmt.Printf() followed by os.Exit? 03:42 <@adg> log.Fatal 03:42 < steven> maybe os.Bail? thatd be sweet. 03:43 < steven> oh cool. 03:43 <@adg> or log.Fatalf 03:43 < skelterjohn> painc() :) 03:43 < steven> panic shows stacktrace thats not needed 03:43 < steven> interesting that interface{} is very much like ObjC's id, but not exactly 03:43 < steven> but close enough 03:44 < skelterjohn> shares use if not meaning 03:45 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined #go-nuts 03:45 -!- mode/#go-nuts [+v iant] by ChanServ 03:47 < steven> does go have default args? 03:47 <@adg> steven: no 03:47 < skelterjohn> what do you mean 03:47 < steven> aww. sadface. 03:47 < skelterjohn> oh 03:48 < steven> i miss those. 03:49 < skelterjohn> default args were the sort of thing that, when i used them, i would think "man i am so slick look at my code!" 03:49 -!- Eridius [~kevin@unaffiliated/eridius] has quit [Quit: leaving] 03:49 < skelterjohn> for situations where default arguments are appropriate, i'll make a struct for the arg and a DefaultArg() (ArgStruct) method 03:50 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has quit [Ping timeout: 264 seconds] 03:50 < steven> is that something in the language itself? 03:51 -!- iant [~iant@216.239.45.130] has joined #go-nuts 03:51 -!- mode/#go-nuts [+v iant] by ChanServ 03:51 < steven> or just some convention you personally use for yourself only? 03:51 < skelterjohn> the latter 03:51 < skelterjohn> other people can use it too, if they like :) 03:51 < skelterjohn> i also wrote a tool that populates structures like these from command line args 03:51 < steven> heh 03:52 < steven> woot, my first go program.. it doesnt work right at all, but it almost does so thats something! 03:52 < steven> https://gist.github.com/856090 03:53 < steven> any criticisms (read: tearing this code apart) would be welcomed :) 03:54 < skelterjohn> run gofmt on it :) 03:54 < skelterjohn> it hurts my eyes 03:55 < skelterjohn> don't do if cond { then } 03:55 < skelterjohn> do if cond { \n then \n } 03:55 < steven> i know, i wouldnt normally do it. 03:55 < steven> but i was getting annoyed at the fact that i cant do: if()\n\tSomeCode(); like in C 03:55 < skelterjohn> one thing you might try 03:55 < skelterjohn> if err != nil { return } 03:56 < skelterjohn> defer log.Fatalf(err) 03:56 < steven> that will always exit with an error though. 03:56 < steven> which is not what i want. 03:56 < skelterjohn> well 03:56 < skelterjohn> put in a condition 03:56 < skelterjohn> was too lazy to type that bit 03:56 < steven> :P 03:56 < steven> the process seems to be ignoring my arguments sadly 03:57 < skelterjohn> []string{"-l", "."} should be []string{"ls", "-l", "."} 03:58 < steven> oh. ouch. 03:59 < steven> adg: what do you think of the code? im sure theres a lot of bad paradigms im using and im probably not doing it as idiomatically as i could 04:00 < skelterjohn> it's too strange of a thing to want to do to be either idiomatic or unidiomatic 04:01 < steven> im talking about the details of the code more 04:01 < steven> like how i made the pipe and the file descriptors etc 04:01 < steven> and how i worked with strings at the end 04:02 < edsrzf> Instead of execing ls, I would have opened the directory with os.Open and then called Readdirnames on it. 04:02 < skelterjohn> oh, there is that 04:02 < skelterjohn> but i assumed he wanted to do something with pipes 04:03 < steven> yeah i wanted to do something lower level 04:03 < steven> ls is jsut a detail, it could have been "cat" or "python" for all i care 04:03 < edsrzf> Yeah, fair enough. 04:04 < steven> but i like your idea 04:04 < steven> ok fun question: 04:05 < steven> how would you implement a small, dumb telnet client in go? 04:05 < steven> in C i would use select() or kqueue().. would select with channels be the best way in Go? or is there a btter way? 04:05 < skelterjohn> io.Copy(os.Stdin, theNetworkWriter) :) 04:05 < skelterjohn> is a telnet client multi-threaded? 04:05 < steven> no 04:06 < skelterjohn> why would you need select, then? 04:06 < steven> oh, i dont know. 04:06 < skelterjohn> just copy stdin to the writer, stdout to the reader 04:06 < exch_> "io.Copy(os.Stdin, theNetworkWriter)" best switch those params around, unless you intend to write to stdin 04:06 -!- GoBIR [~gobir@70-90-168-190-SFBACalifornia.hfc.comcastbusiness.net] has quit [Ping timeout: 248 seconds] 04:06 < steven> hehe 04:06 < skelterjohn> yes yes 04:07 < steven> so i guess what im thinking is.. how would one go about writing a basic loop-ish program where all it does is read info from the TCP connection, print it to stdout, read input from stdin, and send it to the TCP connection? 04:07 -!- Eko [~eko@70-90-168-190-SFBACalifornia.hfc.comcastbusiness.net] has quit [Ping timeout: 240 seconds] 04:07 < steven> i mean, how would that be structed? would it be a simple semi-infinite for-loop that just does sychronous reads? 04:08 -!- Eko [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has joined #go-nuts 04:08 < steven> or is there a way to do async reads of files/io's? 04:08 < exch_> https://github.com/jteeuwen/Calculon/blob/master/bot/net/network.go here's an example. particularly the input/outputLoop methods 04:08 < skelterjohn> go io.Copy(networkReader, os.Stdin) 04:08 < steven> sweet, thanks 04:08 < exch_> they both run on separate goroutines 04:08 < steven> skelterjohn: ahh, nice. 04:08 < skelterjohn> go io.Copy(os.Stdout, theWriter) 04:08 -!- GoBIR [~gobir@c-24-130-224-186.hsd1.ca.comcast.net] has joined #go-nuts 04:09 < steven> so that would be an infinite loop, until someone manually calls os.Exit, right? 04:09 < steven> that seems fair enough, honestly. 04:09 < exch_> make sure you close your connection before os.Exit is called 04:09 < steven> touche, thanks 04:10 < steven> are there any methods on primitive types like int, byte, string, etc? 04:10 < steven> or must they be casted first to something in, say, http://golang.org/pkg/ first? 04:12 < exch_> not sure what you mean by that 04:12 < exch_> primitive types have no methods. If you want to add some for whatever reason, you'll have to 'subtype' it. eg: type MyInt int; func (m MyInt) SomeFunc() { ... } 04:12 < steven> right, thats what i thought. 04:12 < exch_> that's not an alias btw. Myint is a completely separate type which can be treated as an int if you need it to 04:13 < steven> so any "built-in string operations" i want to look for, i would only be able to find in one of the packages, maybe bytes or strings, etc, right? 04:13 < steven> right, i remember that. 04:13 < exch_> yes. strings package, bytes package, utf or unicode packages as well 04:13 < exch_> *utf8 04:13 < steven> sweet. thanks. 04:13 -!- shvntr [~shvntr@113.84.144.217] has joined #go-nuts 04:14 < skelterjohn> gotten tired of writing makefiles yet? 04:16 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Quit: itrekkie] 04:21 < steven> i havent touched a makefile 04:21 < steven> `6g test.go && 6l test.6 && ./6.out` hehe 04:24 -!- _Eko_ [~eko@70-90-168-189-SFBACalifornia.hfc.comcastbusiness.net] has joined #go-nuts 04:24 < steven> oh but how would you guys loop the main thread? or would you use a channel instead? 04:24 < steven> i think a channel makes more sense. a "done" channel, size 1, and as soon as it accepts, it knows its done. 04:26 < skelterjohn> if you just need the main() to not exit until a signal, that's a normal way yea 04:26 -!- GoBIR [~gobir@c-24-130-224-186.hsd1.ca.comcast.net] has quit [Ping timeout: 248 seconds] 04:26 < exch_> https://github.com/jteeuwen/Calculon/blob/master/bot/main.go#L41 04:26 < skelterjohn> if you want to just wait, select {} 04:26 < steven> ok. thanks. 04:27 < steven> also im curious, is there a package that simplifies reading bytes from file.Read()? 04:27 < skelterjohn> bufio 04:27 < steven> thanks 04:27 < exch_> if you want to read everything from a file at once, you can use ioutil.ReadFile() 04:27 -!- Eko [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has quit [Ping timeout: 255 seconds] 04:27 < exch_> otherwise the bufio is indeed a good option 04:28 < steven> sweeet.. i like Reader.ReadString() :) 04:29 -!- _Eko_ [~eko@70-90-168-189-SFBACalifornia.hfc.comcastbusiness.net] has quit [Ping timeout: 255 seconds] 04:31 < steven> uhh.. crap 04:32 < steven> there must something about select that i dont understand, 04:32 < steven> because when i do "go func() { ... }()" twice in a row, followed by "select {}", only the first goroutine seems to get executed. 04:33 < skelterjohn> GOMAXPROCS 04:33 < skelterjohn> ? 04:33 < skelterjohn> it's possible your first invoked goroutine never yields 04:33 < skelterjohn> goroutines aren't threads - they have to be friendly if they're going to share 04:34 < steven> oh. yeah this goroutine is literally just an infinite for loop. 04:34 < steven> would you recommend channels for this? 04:34 < skelterjohn> tjat 04:34 < skelterjohn> that'll do it 04:34 < skelterjohn> for what? 04:34 < Namegduf> Nah, just actually do something. 04:34 < Namegduf> You'll yield inherently. 04:34 < steven> i want to make both of my goroutines execute simultaneously somehow 04:34 < skelterjohn> have them both print stuff 04:35 < steven> they both are. 04:35 < skelterjohn> using fmt.Println 04:35 < skelterjohn> not just println 04:35 < steven> they both do fmt.Printf 04:35 < skelterjohn> then they should both be yielding 04:35 < skelterjohn> gist? 04:35 < steven> https://gist.github.com/856120 04:36 < steven> ooh 04:36 < steven> sorry, refrsh it. thats what im currently running. 04:37 < steven> oooooooooooh. yeah, im stupid. 04:37 < steven> its working just fine. 04:37 < steven> its just that in the billion-lines-printed-per-second for the first goroutine, im not seeing the one-line-per-minute printed in the other. 04:37 < steven> sorry. 04:37 < skelterjohn> prints &{0 /dev/stdin <nil> 0} over and over again 04:37 < skelterjohn> ah 04:39 -!- katnev [~user@CPE-124-189-81-145.azsz1.cht.bigpond.net.au] has joined #go-nuts 04:40 < steven> oh btw, is it possible in Go to read a character from the keybaord as soon as it is pressed, instead of waiting until enter is pressed? 04:41 < skelterjohn> try calling os.Stdin.Read() 04:41 < KirkMcDonald> stdin will be line-buffered by default, won't it? 04:41 < skelterjohn> no idea 04:41 < steven> it seems so. 04:41 < steven> sigh. 04:41 < skelterjohn> how does curses get around this? 04:41 < KirkMcDonald> With the appropriate syscalls, you can change how it is buffered. 04:41 < steven> a stty probably 04:41 < steven> err, pty 04:42 < KirkMcDonald> But don't look to me for the details. :-) 04:42 < steven> hehe 04:43 < exch_> you'll have to fiddle with termios for that. It's not gonna be a very portable solution though 04:43 < exch_> that's most likely why Go has no facility for that in the libs 04:43 < steven> sadface. 04:43 < steven> well thats fine. 04:45 < steven> ugh, i was assuming ^C would made a defer run 04:45 < steven> but im misunderstanding either what ^C does (maybe not panic?) or how defer works with panics (maybe not at all?) 04:45 < skelterjohn> panic is not the same as interrupt 04:46 < skelterjohn> defer and panic do work together, though 04:46 < skelterjohn> you can recover() from a panic in a defer 04:46 < steven> right. i rememer now. 04:46 < exch_> ^C sends SIGKILL which immediately kills the process iirc 04:46 < steven> hmm, how do we handle signals? 04:46 < steven> wait, signal package maybe 04:46 < exch_> https://github.com/jteeuwen/Calculon/blob/master/bot/main.go#L41 04:46 < exch_> like that 04:47 < exch_> that example only handles unix signals though. I have no clue how to implement that behaviour for windows/OSX 04:47 < exch_> presumably osx works the same though 04:47 < steven> osx = unix 04:48 < exch_> yes 04:48 < steven> anyway, you have to use select? 04:48 < exch_> If you listen on multiple channels like I do in that loop, then yes 04:48 < steven> oh. i dont. 04:48 < exch_> otherwise you dont strictly have to use select 04:49 < steven> oh, signal.Incoming is a channel in itself. 04:49 < steven> i thin i get it 04:49 < exch_> yup 04:49 < steven> sweet. 04:49 < steven> actually i think this makes select a lot less scary 04:49 < steven> i never understood select. i think i finally might. 04:49 < exch_> it simply pollse both those channels (net.In and signal.Incoming) an handles what ever case fires first 04:50 < steven> it doesnt inherently loop itself, right? 04:50 < exch_> nope 04:50 < exch_> hence the for { .. } 04:50 < steven> ah thats why. 04:50 < steven> sweet. 04:50 < steven> this is making a lot more sense. 04:51 < steven> so technically speaking, i could implement 2 goroutines, 1 for stdin and one for the TCP connection (reads), and those goroutines could, when they receive data, push it into the channel, and i could listen in a select call for each channel and handle them there instead of inside the gorotines? 04:51 < steven> if that works, then that seems cleaner than what im doing now. 04:51 < exch_> yes 04:52 < steven> sweet. so select is go's version of select(), but instead of using files it uses chans 04:52 < steven> kinda 04:52 < steven> sorta 04:52 < exch_> ya 04:53 < steven> why is it that a statement automatically yields to other threads, but an empty for loop doesnt? 04:54 < steven> and do all statements yield automatically? 04:54 < skelterjohn> no 04:54 < skelterjohn> just system calls, io, some other things 04:54 < skelterjohn> but not, for example, calling a function written in go 04:55 < skelterjohn> unless it does something inside to yield 04:55 < skelterjohn> and not arithmetic 04:56 < steven> can you manually yeild? 04:57 < skelterjohn> runtime.Gosched() 04:57 < steven> oh ok. 04:57 < skelterjohn> or time.Sleep(somenanoseconds) 04:57 < steven> ah. 04:57 < skelterjohn> i'm going to sleep 04:57 < skelterjohn> enjoy yourself 04:57 < steven> btw, when does it ever make sense to have a send-only chan or a receive-only chan? i mean, can that inherently even exist? 04:57 < steven> thanks 04:58 < skelterjohn> you create a regular chan 04:58 < skelterjohn> and give it to smeone else as send-only 04:58 < skelterjohn> and another someone as recv-only 04:58 < steven> ooooh. nice. 04:58 < steven> man you're smart. 04:58 < skelterjohn> it's sort of like a guarantee - a function with param <-chan int will never send anything on that chan 04:58 < steven> goodnight and God bless you <3 04:59 < exch_> func Foo() <-chan int { ... } that returns a read-only channel 04:59 < steven> right. nice. 04:59 < Rennex> somehow i'm reminded of const-correctness :x 04:59 < steven> :D 05:13 -!- rl [~rbl@84-74-142-37.dclient.hispeed.ch] has quit [Ping timeout: 240 seconds] 05:17 < steven> what the heck is this?? 05:17 < steven> sig.(signal.UnixSignal) 05:18 < exch_> it dloes a type assertion to see if the received signal is a signal.UnixSignal 05:18 < exch_> *does 05:18 < exch_> if it is, ok will be true 05:18 < exch_> This is goes way of doing typeof(v) == SomeType 05:18 < exch_> more or less 05:19 < exch_> *Go's way 05:19 -!- bjarneh [~bjarneh@190.84-48-119.nextgentel.com] has joined #go-nuts 05:20 < steven> i thought go was typesafe though? 05:20 < cbeck> It is 05:21 -!- Null-A [~Null-A@c-24-5-83-123.hsd1.ca.comcast.net] has joined #go-nuts 05:21 < Namegduf> Type assertions are type checked in the "ok" form, you just need to make sure you handle the default case (nothing matched) right. 05:22 < cbeck> A type assertion makes atomic the old java "if (a instanceof A) b = (A) a" 05:23 < steven> what are the 2 reutnr values of a tpe assertion? 05:23 < steven> (sorry my finger are cold) 05:23 < Namegduf> v, ok := x.(type) 05:23 < Namegduf> ok is whether the type matched 05:23 < Namegduf> v is either the value of the type, or 0 if it did not match. 05:23 < steven> oh. 05:24 < steven> thanks 05:24 < exch_> the type assertion only works on interfae values.: var a interface{}; a = 123; if n, ok := a.(int); ok { yayWeHaveInt(n) } 05:25 < Namegduf> It doesn't make sense on non-interfaces, because you *know* their type. 05:25 < exch_> you can do that in a switch statement (type switch) to: switch v := a.(type) { case int: ....; case string: ... } 05:25 < exch_> ya 05:26 < steven> woot, i can feel my code getting slightly cleaner: https://gist.github.com/856150 05:26 -!- keithcascio [~keithcasc@nat/google/x-rwymkwbkcuhosxgx] has quit [Quit: Leaving] 05:26 -!- Null-A [~Null-A@c-24-5-83-123.hsd1.ca.comcast.net] has left #go-nuts [] 05:27 < exch_> You are exiting on any unix signal without checking which signal you are getting. This may also trigger when you simply resize your shell window 05:27 < exch_> it sends Resize signals 05:28 < steven> i didnt know how to convert it into an int to check against 2 (ie sigint) 05:28 < steven> oh maybe i need to explicitly conver tit 05:29 < steven> yep. int(sig) did it. 05:29 < steven> thanks 05:29 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 05:33 < steven> sweet, i can do `pbpaste | gofmt | gist` now. 05:33 < steven> :) 05:35 < steven> wow i have a spiderweb of a mess on my hands here... 05:38 < steven> theres waaaay too many exit points and entry points in this code. it needs to get a lot simpler. 05:40 -!- nettok [~quassel@200.119.150.80] has joined #go-nuts 05:48 -!- Eko [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has joined #go-nuts 05:50 -!- lucid [~rbl@84-74-142-37.dclient.hispeed.ch] has joined #go-nuts 05:55 <@adg> steven: notice that checkFail is not worth its weight 05:55 <@adg> steven: also, you can just write log.Fatal("Error:", e) 05:55 <@adg> steven: check the docs for fmt.Print, it's a really nicely designed print function 06:00 -!- _Eko_ [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has joined #go-nuts 06:02 -!- Eko [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has quit [Ping timeout: 255 seconds] 06:03 -!- tarrant [~tarrant@69.169.141.202.provo.static.broadweavenetworks.net] has joined #go-nuts 06:08 -!- bjarneh [~bjarneh@190.84-48-119.nextgentel.com] has quit [Ping timeout: 248 seconds] 06:09 < steven> adg: yeah im not sure what to do with checkFail, because i know that would be really commonly used and thus a lot of duplication, but its just one simple line. 06:10 -!- crazy2be [~justin@S01060012171a573b.cg.shawcable.net] has joined #go-nuts 06:11 < crazy2be> does doing &(*obj) make a copy of obj? 06:11 < tarrant> Anyone know of a api that can do most dns lookups? As in beyond MX, CNAME, SRV and A? 06:12 < |Craig|> crazy2be: that copies a pointer to obj I think 06:13 < crazy2be> |Craig|: well the * would dereference, and then the & would take the address of, and that could be interpreted in a few different ways by the compiler 06:13 < |Craig|> if *obj made a copy, you could never modify something by referance 06:13 < crazy2be> but if that doesn't work, then how does one copy a struct that they have a pointer to? 06:14 < steven> ok ive updated it... https://gist.github.com/856170 06:14 < |Craig|> assign another struct to it by value 06:14 < steven> is there a more idiomatic way to ensure channels are closed than to check closed() and close() conditinoally? 06:14 < |Craig|> a=*b 06:14 < steven> especially when i have several channels, that can be cumbersome 06:15 < |Craig|> crazy2be: be aware that I'm not too sure about any of this, don't trust me too much 06:15 < |Craig|> crazy2be: Its the assign that copies, not the * or &, which explains it I believe 06:17 < |Craig|> you are right though, it is a bit deeper than i initially thought. a=*b ; c=&a is not the same as c=&*b if I'm right 06:17 < crazy2be> hmm, that's tricky 06:17 < crazy2be> but it seems to work properly 06:17 < |Craig|> interesting issue. I'd never though of it before 06:18 < crazy2be> well i guess &(*obj) does nothing but waste cpu cycles 06:19 < crazy2be> but you could also see why one might think it would copy 06:20 -!- bjarneh [~bjarneh@190.84-48-119.nextgentel.com] has joined #go-nuts 06:21 < crazy2be> i wonder if there is a faster way than b = *a, c = &b tho 06:27 <@adg> steven: don't close the channels 06:27 <@adg> steven: just have a 'shutdown' channel 06:28 <@adg> steven: add "shutdown chan bool" to your IRCBot struct, and add a case <-bot.shutdown to Loop's select 06:28 <@adg> steven: and then just put "bot.shutdown <- true" in Cleanup 06:28 <@adg> much cleaner 06:29 <@adg> crazy2be: & takes takes the address of a value, so &(*v) is just returning v 06:30 <@adg> crazy2be: faster in what sense?! 06:30 <@adg> crazy2be: one line instead of two? 06:32 < crazy2be> well, yes, i suppose 06:32 < Namegduf> crazy2be: a = b copies b. 06:32 < Namegduf> If b is a reference type/pointer, it just copies the pointer. 06:32 < crazy2be> but two lines is fine 06:33 < crazy2be> i was just a bit confused by that, although i suppose it makes sence 06:33 < Namegduf> Well, it's what assignment does. 06:33 < Namegduf> Blame "everything is a reference" languages 06:41 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has joined #go-nuts 06:47 < steven> adg: but i want to close the channels so that the goroutines know they should stop trying to read input from whatever io object they have 06:48 -!- steven_t [~steven_t@c-98-206-191-14.hsd1.il.comcast.net] has joined #go-nuts 06:48 < crazy2be> wait why would this cause an index out of range exception? 06:48 < crazy2be> dirs [len(dirs)-1] = dir 06:48 < steven_t> woot im a bot lol hhe 06:48 -!- steven_t [~steven_t@c-98-206-191-14.hsd1.il.comcast.net] has left #go-nuts [] 06:49 < crazy2be> er, panic 06:49 < steven> crazy2be: because len(dirs) == 0 06:49 < steven> you probably did make(whatever) without giving it a size, ie make(whatever, size) 06:50 < crazy2be> oops, right 06:51 < crazy2be> i forgot to address that contingency... 06:53 < steven> ;) 06:53 < steven> i only know cuz i ran into that earlier too :D 06:53 -!- perdix [~mkhl@sxemacs/devel/perdix] has joined #go-nuts 06:54 -!- perdiy [~mkhl@sxemacs/devel/perdix] has quit [Ping timeout: 252 seconds] 07:04 -!- davvid [~davvid@208-106-56-2.static.dsltransport.net] has quit [Remote host closed the connection] 07:14 -!- shvntr [~shvntr@113.84.144.217] has quit [Read error: Operation timed out] 07:17 < crazy2be> night all 07:17 < crazy2be> and thanks for your help steven :) 07:18 -!- crazy2be [~justin@S01060012171a573b.cg.shawcable.net] has quit [Remote host closed the connection] 07:20 -!- _Eko_ [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has quit [Read error: Operation timed out] 07:20 -!- Eko [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has joined #go-nuts 07:27 -!- aho [~nya@fuld-590c623c.pool.mediaWays.net] has quit [Ping timeout: 255 seconds] 07:50 -!- shvntr [~shvntr@113.84.144.217] has joined #go-nuts 07:50 -!- photron [~photron@port-92-201-10-205.dynamic.qsc.de] has joined #go-nuts 08:02 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has joined #go-nuts 08:03 < str1ngs> I have some C enum/constants generated godefs that I need to translate into error messages. should I use a switch or is there a better way to do that? 08:06 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has joined #go-nuts 08:11 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has quit [Ping timeout: 255 seconds] 08:28 -!- femtoo [~femto@95-89-198-8-dynip.superkabel.de] has joined #go-nuts 08:33 -!- GoBIR [~gobir@c-24-130-224-186.hsd1.ca.comcast.net] has joined #go-nuts 08:36 -!- nettok [~quassel@200.119.150.80] has quit [Ping timeout: 246 seconds] 08:38 -!- femtoo [~femto@95-89-198-8-dynip.superkabel.de] has quit [Read error: Connection reset by peer] 08:38 -!- tensorpudding [~user@99.56.160.152] has quit [Remote host closed the connection] 08:43 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 08:58 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|] 08:59 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 09:04 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts 09:10 < aiju> str1ngs: a map 09:10 < aiju> or wait, those are integers? an array is it, then 09:15 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 09:19 -!- araujo [~araujo@190.38.51.34] has joined #go-nuts 09:19 -!- araujo [~araujo@190.38.51.34] has quit [Changing host] 09:19 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 09:26 < str1ngs> aiju: ok I'll have to check if they are int. but that makes sense thank you 09:39 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-171-187.clienti.tiscali.it] has joined #go-nuts 09:45 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 09:48 -!- viirya_ [~viirya@cml506-25.csie.ntu.edu.tw] has quit [Read error: Connection reset by peer] 09:48 -!- viirya [~viirya@cml506-25.csie.ntu.edu.tw] has joined #go-nuts 09:52 -!- visof [~visof@unaffiliated/visof] has quit [Ping timeout: 252 seconds] 09:53 -!- Project-2501 [~Marvin@82.84.98.115] has joined #go-nuts 09:56 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-171-187.clienti.tiscali.it] has quit [Ping timeout: 264 seconds] 09:57 -!- boscop [~boscop@f050133076.adsl.alicedsl.de] has joined #go-nuts 10:03 -!- visof [~visof@41.238.234.59] has joined #go-nuts 10:03 -!- visof [~visof@41.238.234.59] has quit [Changing host] 10:03 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 10:15 -!- coldturnip [~COLDTURNI@111-250-7-7.dynamic.hinet.net] has quit [Read error: Connection reset by peer] 10:15 -!- katnev [~user@CPE-124-189-81-145.azsz1.cht.bigpond.net.au] has quit [Ping timeout: 276 seconds] 10:16 -!- coldturnip [~COLDTURNI@111-250-7-7.dynamic.hinet.net] has joined #go-nuts 10:25 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts 10:29 -!- ronnyy [~quassel@p4FF1C202.dip0.t-ipconnect.de] has joined #go-nuts 10:30 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.4] 10:30 -!- wrtp [~rog@92.17.46.220] has joined #go-nuts 10:48 -!- visof [~visof@unaffiliated/visof] has quit [Ping timeout: 276 seconds] 10:51 -!- Fish- [~Fish@bus77-2-82-244-150-190.fbx.proxad.net] has joined #go-nuts 10:56 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 10:57 -!- edsrzf [~kelvan@122-61-221-144.jetstream.xtra.co.nz] has quit [Ping timeout: 248 seconds] 11:02 -!- visof [~visof@unaffiliated/visof] has quit [Ping timeout: 264 seconds] 11:03 -!- bawr [~bawr@unaffiliated/mrfawkes] has joined #go-nuts 11:06 -!- bawr [~bawr@unaffiliated/mrfawkes] has left #go-nuts [] 11:10 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 11:22 -!- bjarneh [~bjarneh@190.84-48-119.nextgentel.com] has quit [Ping timeout: 276 seconds] 11:33 -!- bjarneh [~bjarneh@190.84-48-119.nextgentel.com] has joined #go-nuts 11:35 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has quit [Ping timeout: 252 seconds] 11:36 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has joined #go-nuts 11:38 -!- visof [~visof@unaffiliated/visof] has quit [Ping timeout: 252 seconds] 11:39 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has quit [Read error: Operation timed out] 11:40 -!- Project_2501 [~Marvin@82.84.69.89] has joined #go-nuts 11:43 -!- Project-2501 [~Marvin@82.84.98.115] has quit [Ping timeout: 276 seconds] 11:55 -!- femtoo [~femto@95-89-198-8-dynip.superkabel.de] has joined #go-nuts 11:57 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has joined #go-nuts 12:05 -!- wrtp [~rog@92.17.46.220] has quit [Quit: wrtp] 12:13 -!- hlorofils [~hlorofils@87.110.228.45] has joined #go-nuts 12:18 -!- hlorofils [~hlorofils@87.110.228.45] has quit [] 12:18 < napsy> Hello. Is there a way to cinvert an int to []byte? I have to write the integer into an array as raw data not the actual numbers it represents 12:20 -!- photron [~photron@port-92-201-10-205.dynamic.qsc.de] has quit [Ping timeout: 248 seconds] 12:22 -!- ildorn [~ildorn@p5B2FD51D.dip.t-dialin.net] has joined #go-nuts 12:22 -!- ildorn [~ildorn@p5B2FD51D.dip.t-dialin.net] has quit [Client Quit] 12:22 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 12:26 -!- cenuij [~cenuij@78.112.41.178] has joined #go-nuts 12:26 -!- cenuij [~cenuij@78.112.41.178] has quit [Changing host] 12:26 -!- cenuij [~cenuij@base/student/cenuij] has joined #go-nuts 12:29 < napsy> or can I somehow copy the contents in unsafe.Pointer to, let's say, []byte? 12:33 < Namegduf> You can cast an unsafe.Pointer to a pointer to a byte array the same size of the data. 12:33 < Namegduf> This is unsafe, of course. 12:33 < Namegduf> You can then slice that array all you like. 12:34 < napsy> ok, let's try 12:34 < Namegduf> I feel obliged to mention encoding/binary as an alternative for cases where you're trying to use it for sending the data to something. 12:34 < Namegduf> It does the job for you, but is portable and safe. 12:35 < Namegduf> No issues with endianness or padding. 12:35 < napsy> well, I'm trying to port a binary protocol to go and it's very strict about packets 12:35 < Namegduf> Okay, fair enough. 12:36 < Namegduf> I think the idiomatic way to do it, then, would be to construct it using a []byte, manually setting each byte as desired. 12:36 < Namegduf> Rather than using unsafe. 12:36 < Namegduf> Because the binary protocol will have a specific byte order it expects. 12:36 < Namegduf> And if structs are sent, specific padding or lack thereof. 12:37 -!- karpar [~karpar@112.96.254.20] has joined #go-nuts 12:37 < Namegduf> And Go does not guarantee that the memory representation of things will match it. 12:38 < napsy> so, if I have an int, I have to package it to a larger []byte, would that go without unsafe? 12:38 < aiju> yes 12:38 < aiju> napsy: encoding/binary 12:39 < napsy> does encoding/binary add any other information besides the data? 12:39 < aiju> no 12:39 < aiju> it just concatenates all struct fields 12:39 < napsy> hm that sounds interesting 12:40 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts 12:41 < Namegduf> Yeah, if all you're sending is integers, nothing bigger 12:41 < Namegduf> Then you can match a binary format using encoding/binary of the right endianness. 12:42 < napsy> well simetimes integers, then strings, it could happen I send really big stuff ie. > 3000 bytes 12:42 < Namegduf> Strings will need to be sent the way it expects, which will probably involve copying them to a []byte slice, sticking a NUL on the end, and writing that. 12:43 < Namegduf> (If it uses a C-like thing for sending them) 12:43 < napsy> ok 12:43 < aiju> 3000 bytes is "really big"? heh 12:45 < napsy> well, no :) 12:53 -!- karpar [~karpar@112.96.254.20] has quit [Ping timeout: 240 seconds] 12:55 < napsy> data := [unsafe.Sizeof(t)]byte(p) 12:55 < napsy> p is unsafe.Pinter 12:55 < napsy> but it doesn't work 12:57 < Namegduf> You can't create an array of size defined at runtime. 12:58 < Namegduf> Array size is part of the type. 12:58 < napsy> hum still doesn't work 12:59 < ww> this reminds me of the get-at-const-char* discussion on the list a few days ago 12:59 < aiju> napsy: why not just use encoding/binary 13:00 < napsy> I probably will but I'm still interested how unsafe.Pointer works 13:00 < aiju> terreo unsafe et dona ferrentem 13:00 < aiju> napsy: you can create a slice using reflect 13:01 < aiju> slh := (*reflect.SliceHeade)(unsafe.Pointer(&slice)) 13:01 < aiju> slh.Data = uintptr(unsafe.Pointer(&data)) 13:01 < aiju> slh.Len, slh.Cap = len, len 13:01 < ww> unless making c language bindings, probably best to stay away from unsafe 13:01 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts 13:01 < aiju> ww: or when dealing with low level stuff, exactly 13:07 < ww> and/or when needing to punch through over-eager type safety 13:08 < ww> s := C.GoString((*C.char)(unsafe.Pointer(ucharp))) 13:09 < ww> aka, s = (char *)ucharp; 13:10 < napsy> hm, someone should covert this in a document 13:10 < ww> because of a c library that was giving unsigned char * for strings... 13:12 < ww> napsy, good idea... maybe i'll try documenting some of my experiences making c bindings... 13:12 < napsy> that would be really great 13:29 -!- wrtp [~rog@92.17.46.220] has joined #go-nuts 13:30 -!- DerHorst [~Horst@e176103212.adsl.alicedsl.de] has joined #go-nuts 13:32 -!- skejoe [~skejoe@188.114.142.162] has joined #go-nuts 13:39 -!- TheMue [~TheMue@p5DDF64B6.dip.t-dialin.net] has joined #go-nuts 13:50 -!- bjarneh [~bjarneh@190.84-48-119.nextgentel.com] has quit [Quit: leaving] 13:53 -!- damag [~damag@2a01:e35:8b04:de80:21d:9ff:fe88:4097] has joined #go-nuts 13:55 -!- alkavan_ [~alkavan@IGLD-84-228-193-27.inter.net.il] has joined #go-nuts 13:55 < steven> so guys, guess what. 13:55 < damag> Hi, does Go require Perl and CGI.pm to build now? Just tried to build it and it gave a bunch of errors after the "gopack grc _test/http/cgi.a _gotest_.6" line. 13:55 < steven> i have a weird issue, where when i sent to a channel, and receive from that channel in select, my program hangs 13:56 < damag> "Can't locate CGI.pm in @INC" 13:56 < steven> ooh i see what the problem is.. 13:57 < steven> i didnt sent to the chan via a goroutine 13:57 -!- skejoe [~skejoe@188.114.142.162] has quit [Quit: Lost terminal] 13:57 < steven> why is it that we need to sent to chans via goroutines? is sending to a chan a blocking call? 13:57 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has joined #go-nuts 13:57 < aiju> steven: yes, unless you use select 13:58 < steven> but im using select. 13:59 < steven> heres what i have, https://gist.github.com/856170 .. look at lines 137, 124, and 99 14:00 < steven> whats happening is im basically sending to a chan within a case statement of a select statement (technically via a callback), and receiving on that same chan in that same select statement in another case statement 14:01 < steven> so im guessing the best real solution here, is to call all my callbacks via "go callback()" intead of just "callback()", inside my select statement.. 14:01 < steven> (is what i have a multiplexer, btw?) 14:01 < aiju> it blocks unless you have a default: statement 14:03 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has joined #go-nuts 14:03 < steven> oh. so which is a better solution, hvaing a default statement or calling my callbacks as goroutines? 14:04 < aiju> i don't quite now what you try to do 14:04 < aiju> +k 14:04 < steven> oh, obviously the goroutines, because otherwise im *forced* to have some operation in the default case 14:04 -!- damag [~damag@2a01:e35:8b04:de80:21d:9ff:fe88:4097] has quit [Quit: Leaving] 14:04 < aiju> you shouldn't loop over a non-blocking select 14:04 < aiju> CPU usage would skyrocket 14:04 < steven> oh right. 14:05 < steven> so, heres my very first Go program since understanding how Go works :) -- https://gist.github.com/856170 14:05 < steven> its a dumb IRC client, it displays every line from the server raw, and sends every line you type to the server raw :D 14:06 < aiju> why do you use channels for signal handling 14:06 < steven> do you mean to handle getting data from one of the input streams? 14:07 < steven> at the time, it seemed the cleanest way to separate the responsibilities.. how would you rather do it? 14:07 < aiju> oh wait this is a Go "feature" 14:07 < exch_> ya 14:07 < aiju> blah 14:07 < aiju> terrible 14:07 < steven> aiju: how would you do it instead? 14:07 < steven> exch_: would you do it this way too? 14:07 < aiju> steven: not something with your program 14:07 < aiju> rather a Go thing 14:07 < steven> perhaps i shouldnt be taking Go advice from someone who seems to dislike Go ;) 14:07 < aiju> steven: i love Go 14:08 < skelterjohn> morning 14:08 < skelterjohn> whoah, still at it, steve? 14:08 < steven> oh cool 14:08 < aiju> steven: just because i question some design decision doesn't change anything about it 14:08 < steven> nah i just woke up skelterjohn. 14:08 < steven> took like a 6 hour nap 14:08 < steven> check it out skelterjohn, im slightly proud of what ive come up with so far :) https://gist.github.com/856170 14:09 < aiju> there are only two reasonable possibilities how to handle a signal 14:09 < aiju> ignore it or die 14:09 < exch_> steven: your code basically does the same as my irc bot. My bot simply has the logic ordered a bit differently but the idea is the same. 14:09 < exch_> it works 14:10 < aiju> i should write an angry post about this on the mailing list 14:10 < skelterjohn> cool - too much code for me to understand 3 minutes after i get up 14:10 < aiju> what? you don't dream in Go yet? 14:10 < skelterjohn> unfortunately this past night i was dreaming of css :\ 14:10 < aiju> oh nightmares 14:10 < skelterjohn> yes 14:11 < skelterjohn> my stupid layout isn't working right 14:11 < skelterjohn> and it's because i don't understand css 14:11 < skelterjohn> with go, everything is peaches 14:11 < skelterjohn> if that's a saying 14:11 < aiju> hahaha 14:11 < aiju> i can't do web design at all 14:12 < aiju> i don't have any layout or something in my head 14:12 -!- foocraft [~dsc@78.100.210.180] has quit [Ping timeout: 252 seconds] 14:13 -!- vexd [~vex@91-65-134-239-dynip.superkabel.de] has joined #go-nuts 14:14 < exch_> layout is overrated anyway. If it's subtle, elegant and above all, functional, you have a winner as far as I'm concerned 14:14 < aiju> yeah, pretty much same for me 14:14 < skelterjohn> i just want shit to go where i put it 14:14 < aiju> i just use werc for all my websites 14:15 < exch_> I subscribe to the notion of Less is More. Al the fancy graphics and effects and other little annoying tidbits people cram into their sites just distract from what is important 14:15 < aiju> no need to write HTML, CSS, XML or w/e 14:15 < aiju> just fucking plain text 14:15 -!- drhodes [~none@drhodes.xen.prgmr.com] has quit [Quit: Reconnecting] 14:15 -!- drhodes [~none@drhodes.xen.prgmr.com] has joined #go-nuts 14:16 -!- mattn_jp [~mattn@s60.BMT-e1.vectant.ne.jp] has joined #go-nuts 14:17 < wrtp> steven: instant reaction seeing the first function there: you should never check for closed on a channel you're sending to 14:17 < wrtp> (you won't be able to soon anyway) 14:20 < steven> wrtp: but that throws a runtime panic 14:22 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Ping timeout: 255 seconds] 14:22 < steven> doesnt it? 14:22 < steven> maybe it doesnt. 14:22 < wrtp> what throws a runtime panic? 14:22 < steven> sending to a closed channel 14:23 < wrtp> yes, but you can't avoid that by checking for closed 14:23 < wrtp> the sender should be the one closing the channel. 14:23 < aiju> else you run into all kind of race conditions 14:24 < steven> wrtp: so i shouldnt call close() inside my goroutine? ok, so how do i tell it to quit from within a goroutine? maybe send to quitChan? 14:24 < wrtp> yes, you could do that 14:24 < wrtp> i don't really see why you bother cleaning up at all. 14:24 < wrtp> just exit and all will be fine 14:25 < steven> because it might not be an os.Exit 14:25 < wrtp> what? 14:25 < steven> it might be, "ok this bot is dead, with all its chans, but im creating a new bot now" 14:25 < steven> ie, program still running, but id want to kill all the remaining goroutines of the current bot thats dying 14:25 < wrtp> all goroutines die when the program exits 14:26 < wrtp> oh i see, so this would be part of a bot library 14:26 < steven> but im saying the program might not be exiting at the point this bot is being cleaned up.. it may just be preparing for another bot to come to life 14:26 < steven> (coincidentally, right now its just going to exit as soon as the bot dies) 14:26 < wrtp> well, you definitely don't want to have the library handling SIGINT then 14:26 < steven> point is, i dont want to rely on things just "automatically cleaning up" 14:27 < steven> wrtp: true. how else could that be structured? can you have two selects running simtultaneously? 14:27 < wrtp> yes 14:27 < steven> with the way select works, i dont thnk its possible to "pass in" a case via an anon func or something 14:27 < steven> hmm 14:27 < steven> but they're blocking selects, arent they? 14:28 < steven> unless i ran one inside a goroutine... 14:28 < steven> hmm this is interesting, i like your idea :) 14:29 < wrtp> another little comment: just use net.Dial, don't bother with ResolveTCPAddr and DialTCP 14:29 < ww> do we have sctp support? 14:29 < steven> oh yeah? you've found that to be reliable? 14:30 < wrtp> it's just easier, and makes it trivial to adapt your program to new transports if you want to 14:31 < wrtp> your program becomes 5 lines shorter and more general into the bargain. :-) 14:32 < wrtp> also, you probably don't want your entire program to die if you get a network error. 14:32 < wrtp> i think the way i'd handle termination is by making Quit close bot.conn 14:32 < femtoo> func a() (int, int) { return 1, 2 } 14:32 < femtoo> func main() { var x, y int; x, y = a() } // works 14:32 < femtoo> func main() { var x, y int; x, y += a() } // compiler error 14:33 < aiju> i don't think the latter is allowed 14:33 < wrtp> then the Read in getData will terminate with an error, and it can close ch 14:33 < femtoo> aiju why not? 14:33 < skelterjohn> because. 14:34 < femtoo> lol but it would just make sense 14:34 < aiju> the spec says so 14:34 -!- sacho [~sacho@87-126-37-121.btc-net.bg] has quit [Read error: Connection reset by peer] 14:34 < aiju> "In assignment operations [e.g. +=], both the left- and right-hand expression list must contain exactly one single-valued expression." 14:34 < steven> man i really like goroutines :) 14:35 < wrtp> almost all the goodness is in the channels IMHO 14:35 < femtoo> aiju, ok ty 14:35 -!- stalled [~stalled@unaffiliated/stalled] has quit [Ping timeout: 250 seconds] 14:36 < ww> with chammels just remember you almost always want to send pointer or reference types or simple things like integers 14:36 < wrtp> ww: i dunno, i quite often send moderately big structs 14:37 < steven> is it a bad practice, though, to use channels as a transport for data received via a "get data from input stream when its ready" function (goroutine)? 14:37 < wrtp> it's quite efficient, and it saves bothering about side effects 14:37 < ww> sending a struct directly means a copy i think 14:37 < aiju> steven: no 14:37 < wrtp> ww: a copy is cheap 14:37 < wrtp> ww: cheaper than a heap alloc 14:37 < aiju> wrtp: not on ww's VAX 11/780 14:37 < skelterjohn> lol 14:38 < ww> :> 14:38 < wrtp> steven: that's just what channels are for 14:38 < aiju> Pike wrote a whole window manager using something like channels in C 14:38 < steven> oh. awesome. 14:38 < wrtp> your program isn't bad at all - as always, getting going is fine, but closing down can be awkward 14:39 < wrtp> aiju: channels work well for window manager type stuff 14:39 < wrtp> i wrote one too; similar approach 14:42 < steven> why is it suddenly that when i took wrtp'ssuggestion of changing my bot.conn from being *net.TCPConn to net.Conn, suddenly i cant assign it via "bot.conn, e := net.Dial(...)" , getting the error "non-name bot.conn on left side of :=" ? 14:43 < steven> is it because its no longer a pointer type? 14:43 < aiju> you can't have struct members on the left side of := 14:43 < steven> oh. but it worked before when it was type *net.TCPConn, as opposed to net.Conn 14:44 < aiju> really? wtf 14:44 < skelterjohn> if e was undeclared before that, it would pretend it's an "=" for the other LHS 14:44 < skelterjohn> i th ink 14:44 < wrtp> steven: no it didn't :-) 14:44 < wrtp> before, you had bot.con, e = net.TCPDial 14:44 < wrtp> note = not := 14:45 < wrtp> your best bet is to return an error from connect 14:45 < skelterjohn> anyone want to help me with an html/css issue? 14:45 < wrtp> lol 14:45 < wrtp> skelterjohn: no! 14:45 < skelterjohn> :'( 14:45 < wrtp> :-) 14:45 < skelterjohn> it's for a go program 14:45 < skelterjohn> it's my GUI 14:46 -!- hcatlin [~hcatlin@host86-145-112-33.range86-145.btcentralplus.com] has joined #go-nuts 14:46 -!- hcatlin [~hcatlin@host86-145-112-33.range86-145.btcentralplus.com] has quit [Changing host] 14:46 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has joined #go-nuts 14:46 < skelterjohn> http://jsfiddle.net/6FeeY/5/ <- purple bit is supposed to extend to the right edge, filling in the blue bit 14:46 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Client Quit] 14:46 < wrtp> steven: if you had func (bot *IRCBot) connect() (err os.Error) { 14:46 < wrtp> then you could do bot.conn, e = .... 14:46 < wrtp> skelterjohn: go on then, what's the issue? 14:47 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts 14:47 < skelterjohn> it's not doing what i said 14:47 < steven> wrtp: ooooh 14:47 < skelterjohn> purple bit is only big enough to contain the text 14:47 < skelterjohn> oh and the green bit is supposed to be exactly 200px wide, but it also is just big enough to hold the text 14:48 < wrtp> steven: you'll want Run to return an error anyway 14:48 < ww> skelterjohn the firefox web developer addon might help... 14:48 < skelterjohn> i feel like this is simple enough that i should be able to do it by hand 14:48 < skelterjohn> or else i won't actually know what's going on 14:49 * ww knows < 0 about these things... 14:49 < wrtp> i wrote a css parser once 14:49 < wrtp> but i never wrote any css :-) 14:49 < ww> the addon just lets you look at what is going on and tweak it, it won't write anything for you 14:49 < wrtp> skelterjohn: so, sorry, i've no idea 14:49 < ww> 's a debugger not an editor... 14:51 < wrtp> that jsfiddle thing looks quite useful 14:52 < wrtp> i keep on telling myself i should learn a bit more html shite 14:54 < ww> best left to those who enjoy spaghetti imo 14:56 < wrtp> apart from anything it might a useful way to make a few quid now and then 14:56 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 252 seconds] 14:56 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 14:57 < skelterjohn> i keep feeling like there is no way the css i'm writing could mean anything other than what i want it to mean 14:57 < skelterjohn> and it just does something else 14:59 < jumzi> That's web development for ya! 14:59 < skelterjohn> go eat an orange! 14:59 * aiju is currently trying to read FAT12 15:00 < aiju> no source fucking explains what a cluster number is 15:00 -!- alkavan_ [~alkavan@IGLD-84-228-193-27.inter.net.il] has quit [Read error: Connection reset by peer] 15:00 < steven> does it make sense to check, from within a goroutine, if its channel is closed right after sending to it, to see if you need to break the infinite loop and exit the goroutine? 15:00 < steven> ie, what im doing at line 18 in https://gist.github.com/856170 15:00 -!- alkavan_ [~alkavan@IGLD-84-228-193-27.inter.net.il] has joined #go-nuts 15:00 < wrtp> steven: no 15:01 < steven> (which is updated now to take into account wrtp's idea about closing channels in one spot only) 15:01 < steven> oh. well how would you make sure that the goroutine dies when appropriate? 15:01 < skelterjohn> only close it from one point 15:01 < skelterjohn> you have complete control over whether it gets closed or not - if you haven't done it, it hasn't happened 15:01 < skelterjohn> no need to check 15:02 < wrtp> steven: when you get EOF, just close(ch) 15:02 < skelterjohn> it's not like network connections that can just go bad 15:02 < wrtp> don't bother sending on quitChan - closing ch should be good enough 15:02 < ww> and if you want it to die in the middle because the reciever is tired of receiving? 15:03 < wrtp> then you make the sender select on quitChan while trying to send 15:03 < ww> so a second channel, nonblocking... 15:03 < ww> right 15:03 < wrtp> not nonblocking 15:04 < wrtp> one useful technique for sending shutdown notifications to those that might not be ready to receive them, is to have a channel that is never sent on, only closed. 15:04 < wrtp> so instead of sending a value to quitChan you just close it 15:04 < wrtp> then any readers of quitChan will receive a quit notification 15:04 < wrtp> no matter how many there are 15:04 < ww> wrtp right... although maybe an acutal semaphore or something 15:05 < wrtp> why? 15:05 < wrtp> the nice thing about channels is you can select on them 15:05 < wrtp> you can't select on semaphores 15:05 < ww> because you don't need all the other channel machinery for that 15:05 < steven> wrtp: problem is, i have 2 goroutines open, and one of them may get an EOF while the other is still alive and well 15:05 < wrtp> but a goroutine might want to wait to receive something on a channel *or* the quit notification 15:06 < steven> so i need to kill the other one somehow. 15:06 < wrtp> steven: that's fine 15:06 < wrtp> actually, you've got 3 goroutines 15:06 < steven> and only thing i can think that does that is sending to (or better yet, closing) a channel that it has access to 15:06 < wrtp> you've got 2 readers 15:06 < wrtp> and one central goroutine 15:06 < steven> yes, one of them is a signal handler. 15:06 < wrtp> the coordinator 15:06 < steven> oh. 15:07 < wrtp> oh, i didn't see the signal handler 15:07 < wrtp> ignore that for the time being 15:07 < steven> you may want to refresh :) 15:07 < steven> https://gist.github.com/856170 15:07 < steven> that could be the problem 15:07 < ww> wrtp i don't dispute that it is reasonable and clean to use a channel like that... just thinking of other ways 15:07 -!- stalled [~stalled@unaffiliated/stalled] has quit [Ping timeout: 250 seconds] 15:08 < piranha> hm, go compiler complains on string "^\." - says "unknown escape sequence: ." - what to do? I want to compile regexp, which matches dots on start of string 15:08 < skelterjohn> \\ 15:08 < steven> piranha: "^\\." 15:08 < piranha> ah, thank you 15:08 < skelterjohn> or put it in backticks 15:08 < skelterjohn> for raw string, no escapes 15:08 < skelterjohn> `^\.` 15:08 < wrtp> ww: there are other ways, but they all use channels :-) 15:08 < piranha> oh, that's better 15:08 < piranha> skelterjohn: thanks :) 15:09 < wrtp> steven: we can ignore the signal handler because it doesn't interact with the other goroutines 15:09 < wrtp> steven: essentially there are three ways the connection to go down 15:09 < steven> (right) 15:09 < wrtp> steven: 1) user quits, so you get EOF on stdin 15:10 < wrtp> 2) connection goes down, so you get EOF (or error) on bot.conn 15:10 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has quit [] 15:10 < wrtp> 3) the app that's using the IRCBot decides that it wants to tear down the connection by calling bot.Quit 15:11 < wrtp> if any of those three happen, you want the other two to go down 15:11 -!- ronnyy [~quassel@p4FF1C202.dip0.t-ipconnect.de] has quit [Remote host closed the connection] 15:11 < wrtp> the coordinator goroutine can organise for that to happen 15:12 -!- dario [~dario@domina.zerties.org] has quit [Quit: leaving] 15:13 < steven> right. 15:13 < piranha> hm, are there macros? If I want to get a list of compiled regular expressions, what's the right thing to do? Right now I just do it in my main() func, but it seems a bit ugly to me... (I'm quite new to static/compiled languages, so I have quite a few dumb questions) 15:13 < steven> wrtp: in all 3 cases, i have it sending quitChan <- true 15:13 < piranha> I mean list of those regexps as a global variable 15:13 < wrtp> piranha: no macros 15:14 < steven> and there's only one receiver of quitChan which is responsible for shutting everything down. 15:14 < piranha> wrtp: then.. is compiling them in main() right thing to do? 15:14 < wrtp> steven: i don't think you want it to send on quitChan ever... 15:14 < wrtp> piranha: you could do them at init time 15:14 < steven> oh? why not? 15:14 < ww> steven i think close(quitChan) 15:14 < skelterjohn> piranha: var re = regexp.MustCompile(...) 15:14 < wrtp> ww: that's part of the solution 15:14 < steven> come to think of it, 3 goroutines at the same time could end up writing to quitChan simultaneously 15:14 < ww> and then check closed on the receiver... 15:14 < skelterjohn> just put that in global namespace 15:14 < piranha> skelterjohn: so just by hands? 15:15 < piranha> yep, but I have quite a few of them 15:15 < steven> ww: then 3 goroutines could simultaneously try to close(quitChan), right? wouldnt that be really bad? 15:15 < skelterjohn> well, you have to list them *somehow*... 15:15 < ww> but don't you have to read from it before closed() will work? 15:15 < skelterjohn> can load them in from a file? 15:15 < wrtp> steven: the only thing that should close quitChan is the Quit method 15:15 < steven> oh maybe im confused about how goroutines work.. maybe they dont actually run in parallel 15:15 < piranha> skelterjohn: well, they are now as list of strings and then on start main() compiles them to regular expressions 15:15 < steven> so maybe all 3 goroutines cannot close(quitChan) at the exact same time.. 15:15 < skelterjohn> oh i see 15:16 < skelterjohn> piranha: just do it in init() instead if you need logic to compile them 15:16 < wrtp> steven: you can't close a channel more than once or you'll get a panic 15:16 < piranha> I would do something like map(re.compile, ["a", "b"]) in python 15:16 < ww> steven assume they do run in parallel even if they may or may not 15:16 < piranha> skelterjohn: init() is a magic name like main()? 15:16 < skelterjohn> yes 15:16 < piranha> cool! 15:16 < piranha> found in docs :) 15:16 < steven> ok. 15:16 < aiju> i think init() is really magic 15:16 < steven> so yeah, your idea ww would cause a runtime panic. 15:17 < steven> its safer to send 3 times to quitChan and receive once, than to close it 3 times 15:17 < ww> sure. 15:17 < steven> although, i think if all 3 goroutines tried to send to (its unbuffered), they would all block.. right? 15:18 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts 15:18 < ww> you can make nb send 15:18 < ww> quitChan, ok <- true 15:18 < ww> i believe 15:18 < steven> (actually, is it unbuffered when i create it like this? "quitchan chan bool" .. "quitchan := make(quitchan)" 15:19 < wrtp> piranha: http://pastebin.com/6NmCb9jg 15:19 < piranha> hm, can't understand what's the difference between main() and init()... it's like init just is executed before main? should I parse my command line in init or in main? 15:19 < femtoo> is there a way to convert a boolean to an integral type 15:19 < wrtp> ww: you can't do that any more 15:19 < femtoo> so true gets 1 15:19 < femtoo> and false 0 15:19 < steven> piranha: init is more for packages i think 15:19 < wrtp> but you don't want to do that anyway 15:19 < piranha> wrtp: hm, sure :) 15:19 < piranha> steven: ah, ok then 15:20 < ww> piranha init is often used by modules for global initialisation 15:20 < ww> wrtp oh no? 15:20 < wrtp> piranha: that works for global variables too 15:20 < piranha> aha 15:20 < ww> i think i got that from the video on the site 15:21 < wrtp> ww: yeah, it's changed recently. you can still do non blocking sends, but you have to use a select statement 15:21 < wrtp> with a default clause 15:21 < ww> aha i see 15:21 < piranha> btw, another thing I can't understand - I use os.Walk, which wants a Visitor. Can I implement Visitor methods (VisitDir/VisitFile) in my function or they should be defined in global namespace? If so, is parametrizing them through using global vars ok? 15:24 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has joined #go-nuts 15:25 < wrtp> piranha: define VisitDir and VisitFile on a type of your own, then invoke Walk on an instance of that type 15:26 -!- visof [~visof@unaffiliated/visof] has quit [Ping timeout: 260 seconds] 15:26 < piranha> wrtp: that's what I'm doing, but they are defined in global namespace (on same level as my function), so I can't parametrize them other than set some global variable 15:26 < wrtp> piranha: of course you can 15:26 < wrtp> just put the data inside the type 15:27 < piranha> type *Visitor struct { VisitDir .... } 15:27 < piranha> like that? 15:27 < wrtp> no 15:27 < aiju> that's not even valid 15:27 < piranha> aiju: I can imagine 15:27 < piranha> wrtp: ah! 15:27 < wrtp> type myVisitor struct { foo myParameters } 15:27 < piranha> data! :) 15:27 < piranha> sure :) 15:27 < wrtp> func (m *myVisitor) VisitDir(...) 15:30 < piranha> huh, that's much better :) 15:32 < wrtp> steven: i'm just doing a version of your program to demonstrate what i was talking about 15:32 < wrtp> gimme a couple of minutes 15:32 -!- Project-2501 [~Marvin@82.84.91.33] has joined #go-nuts 15:35 -!- perdix [~mkhl@sxemacs/devel/perdix] has quit [Remote host closed the connection] 15:35 -!- Project_2501 [~Marvin@82.84.69.89] has quit [Ping timeout: 260 seconds] 15:37 -!- fenicks [~fenicks@log77-3-82-243-254-112.fbx.proxad.net] has joined #go-nuts 15:48 < steven> my goroutine handling is buggy. sonofa. 15:48 -!- shvntr [~shvntr@113.84.144.217] has quit [Ping timeout: 255 seconds] 15:48 < steven> im trying to write a really simple case so i can learn how to do it right, and its not simple at all. but i cant get it any simpler. 15:54 < steven> im so confused. 15:54 < steven> this is the confusing horrible mess i have: https://gist.github.com/856170 16:00 < steven> maybe what i need is a lock around quitChan 16:03 -!- cco3 [~conley@c-69-181-140-72.hsd1.ca.comcast.net] has joined #go-nuts 16:04 < steven> even when i check to make sure the chans not closed when i sent to it, it still has that exact problem. 16:04 < steven> ie, send on closed channel 16:06 < wrtp> steven: here's something towards what i had in mind: http://pastebin.com/GDtjSQ5g 16:06 < wrtp> i didn't actually get it working, but i hope it demonstrates the idea 16:07 < steven> does the ! operator work the same way as in C? 16:07 < steven> ie, is this doing what i think it is? "if !closed(ch) { ch <- data }" 16:07 < skelterjohn> yes 16:08 < wrtp> yes, except it only works on booleans 16:08 < wrtp> steven: yes, but that's a bad idea! 16:08 < wrtp> NEVER CHECK CLOSED IN A SENDING GOROUTINE! 16:08 < steven> then im lost as to why im still panicking 16:08 < steven> oh. 16:08 < steven> what should i do instead? 16:08 < wrtp> have a look at the code i just pasted 16:09 < wrtp> it restructures your code in a way that makes it unnecessary 16:09 < steven> ok i will 16:09 < steven> btw this is what i have so far: https://gist.github.com/856170 16:09 < steven> ill look at what you have. thanks. 16:10 < wrtp> i think it should work in principle, but i haven't had time to test it, and i really need to go! 16:10 < wrtp> i'll be back on monday 16:10 < wrtp> ttfn 16:10 -!- wrtp [~rog@92.17.46.220] has quit [Quit: wrtp] 16:17 < steven> thanks. 16:22 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has joined #go-nuts 16:24 -!- cco3 [~conley@c-69-181-140-72.hsd1.ca.comcast.net] has quit [Ping timeout: 276 seconds] 16:25 < ww> steven: http://golang.org/pkg/sync/#Cond 16:25 -!- pr [phil@unaffiliated/pr] has left #go-nuts [] 16:25 < ww> maybe good for signalling time-to-exit 16:26 -!- sauerbraten [~sauerbrat@p508CAE07.dip.t-dialin.net] has joined #go-nuts 16:37 -!- visof [~visof@41.238.234.59] has joined #go-nuts 16:37 -!- visof [~visof@41.238.234.59] has quit [Changing host] 16:37 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 16:44 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has quit [Remote host closed the connection] 16:46 -!- jokoon [~zonax@feu30-1-82-242-58-229.fbx.proxad.net] has joined #go-nuts 16:58 -!- cco3 [~conley@c-69-181-140-72.hsd1.ca.comcast.net] has joined #go-nuts 17:03 -!- cco3 [~conley@c-69-181-140-72.hsd1.ca.comcast.net] has quit [Ping timeout: 260 seconds] 17:04 -!- photron [~photron@port-92-201-10-205.dynamic.qsc.de] has joined #go-nuts 17:07 -!- visof [~visof@unaffiliated/visof] has quit [Remote host closed the connection] 17:14 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has joined #go-nuts 17:21 -!- cco3 [~conley@c-69-181-140-72.hsd1.ca.comcast.net] has joined #go-nuts 17:26 -!- tvw [~tv@e176001205.adsl.alicedsl.de] has joined #go-nuts 17:29 -!- TheMue [~TheMue@p5DDF64B6.dip.t-dialin.net] has quit [Quit: TheMue] 17:30 -!- cco3 [~conley@c-69-181-140-72.hsd1.ca.comcast.net] has quit [Ping timeout: 252 seconds] 17:38 -!- nettok [~quassel@200.119.175.24] has joined #go-nuts 17:44 -!- visof [~visof@41.238.234.59] has joined #go-nuts 17:44 -!- visof [~visof@41.238.234.59] has quit [Changing host] 17:44 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 18:00 -!- crawshaw [~crawshaw@216.239.45.130] has joined #go-nuts 18:01 < crawshaw> hello 18:01 < crawshaw> newbie question 18:01 < crawshaw> hg pull && hg update release && ./all.bash 18:01 < crawshaw> ... 18:01 < crawshaw> --- FAIL: net.TestMulticastJoinAndLeave (0.0 seconds) 18:01 < crawshaw> joingroup udp 224.0.0.254: setsockopt: can't assign requested address 18:01 < crawshaw> OS X 10.6.5 18:01 < crawshaw> any ideas? 18:03 < crawshaw> I'm tempted to blame the vpn 18:07 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 18:07 -!- unhygienix [~unhygieni@host86-184-226-75.range86-184.btcentralplus.com] has joined #go-nuts 18:08 < skelterjohn> you can disable net tests by setting DISABLE_NET_TESTS=1 18:09 < crawshaw> cheers, trying it now 18:09 -!- jokoon [~zonax@feu30-1-82-242-58-229.fbx.proxad.net] has quit [Quit: Leaving] 18:10 < skelterjohn> it's a common problem :) 18:10 < crawshaw> hmm 18:10 < crawshaw> then perhaps http://golang.org/doc/install.html should be updated 18:16 < crawshaw> excellent, that worked 18:16 < crawshaw> thanks! 18:19 -!- boscop [~boscop@f050133076.adsl.alicedsl.de] has quit [Ping timeout: 255 seconds] 18:19 -!- unhygienix [~unhygieni@host86-184-226-75.range86-184.btcentralplus.com] has left #go-nuts [] 18:25 -!- crawshaw [~crawshaw@216.239.45.130] has quit [Ping timeout: 276 seconds] 18:37 -!- crawshaw [~crawshaw@c-76-103-252-240.hsd1.ca.comcast.net] has joined #go-nuts 18:38 -!- fenicks [~fenicks@log77-3-82-243-254-112.fbx.proxad.net] has quit [Remote host closed the connection] 18:38 -!- fenicks [~fenicks@log77-3-82-243-254-112.fbx.proxad.net] has joined #go-nuts 18:40 -!- crawshaw [~crawshaw@c-76-103-252-240.hsd1.ca.comcast.net] has quit [Remote host closed the connection] 18:40 -!- crawshaw [~crawshaw@216.239.45.130] has joined #go-nuts 18:43 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Ping timeout: 248 seconds] 18:49 -!- nictuku [~nictuku@cetico.org] has quit [Changing host] 18:49 -!- nictuku [~nictuku@unaffiliated/nictuku] has joined #go-nuts 18:50 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has quit [Read error: Operation timed out] 18:50 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 18:51 -!- perdix [~mkhl@sxemacs/devel/perdix] has joined #go-nuts 18:51 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has joined #go-nuts 18:54 -!- edsrzf [~kelvan@122-61-221-144.jetstream.xtra.co.nz] has joined #go-nuts 18:56 -!- crawshaw [~crawshaw@216.239.45.130] has quit [Ping timeout: 248 seconds] 18:59 -!- lmoura [~lauromour@187.113.67.22] has quit [Quit: Leaving] 19:00 -!- boscop [~boscop@f050135026.adsl.alicedsl.de] has joined #go-nuts 19:10 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.4] 19:10 -!- PortatoreSanoDiI [~Marvin@82.84.99.90] has joined #go-nuts 19:11 < |Craig|> my tls handshake is not returning, and I get no errors. What could cause this? 19:14 -!- Project-2501 [~Marvin@82.84.91.33] has quit [Ping timeout: 260 seconds] 19:20 -!- mattn_jp [~mattn@s60.BMT-e1.vectant.ne.jp] has quit [Quit: Ex-Chat] 19:25 < skelterjohn> what error would you expect for timeouts? 19:26 < skelterjohn> btw i have no idea :) 19:27 < piranha> are there any tools for profiling go? :) 19:28 < skelterjohn> goprof 19:29 < piranha> nice 19:29 < skelterjohn> gopprof i mean 19:29 < skelterjohn> i don' t know how to use it, though 19:29 < piranha> aha, found already 19:29 < piranha> heh 19:32 < piranha> hm, it seems it only displays profiling data, isn't it? 19:33 < piranha> well, anyway, it seems regular expressions are really slow :( 19:33 < nictuku> piranha, what kind of profiling are you looking for? 19:34 < nictuku> check out http://shootout.alioth.debian.org/ too 19:34 < piranha> nictuku: well, I'm writing something like ack/grep, and I'm in interesting situation right now - if I exclude file by regex patterns (by matching filename), it makes tool slower than actually searching in every file for content (also with regular expression) 19:34 < piranha> so I'm interested why is it so slow? I've tried to combine all regular expressions in a single (by joining by '|'), but this makes it even slower 19:35 < |Craig|> skelterjohn: It will handshake for several minutes. It never times out. I'm connecting to a client I wrote on the same computer, which also gets no errors. 19:35 < piranha> path.Match is indeed much faster, but it's not regexp, which is a shame... 19:36 -!- chomp [~ken@c-71-206-216-232.hsd1.pa.comcast.net] has joined #go-nuts 19:36 < nictuku> piranha, are you sure you're not doing something else wrong? 19:37 < piranha> nictuku: well, if you're interested, you can look at it: http://hg.piranha.org.ua/goreplace/file/tip/goreplace.go 19:37 < piranha> list of regular expressions is on line 24, their usage is on line 98 19:38 < piranha> RegexList.Match is defined on line 197 19:38 < piranha> maybe []byte(s) copies something? 19:39 < nictuku> piranha, I'm reading, but in the meantime, try the benchmark feature of the testing package. 19:39 < piranha> ok 19:40 < nictuku> it won't tell you what's slow, but it makes it easier to iterate on improvements 19:40 < piranha> sure, at least I can look how this RegexpList.Match performs 19:41 -!- Urmel| [~11087Urme@82-136-196-44.ip.telfort.nl] has joined #go-nuts 19:41 < piranha> btw, this is difference between them: http://paste.in.ua/1849/#l-35,l-12 19:41 < piranha> second time is when I comment out call to RegexpList.Match in VisitFile function 19:45 -!- virtualsue [~chatzilla@host81-139-70-65.in-addr.btopenworld.com] has joined #go-nuts 19:47 < piranha> indeed, path.Match is 4-5 times faster, but I thought that is negligible... 19:49 < nictuku> piranha, I don't see anything wrong with your regexp usage, but it looks like you're reading the whole files into memory, and then working on that 19:49 < nictuku> it might be better to process line by line 19:49 < piranha> nictuku: well, yes, but why is that bad? 19:50 < skelterjohn> path.Match only looks at the file name, right? 19:50 < piranha> hm, but reading whole file in memory and processing that is faster than doing a lot of hdd seeks, no? 19:50 < nictuku> depends on the size of the files. 19:50 < piranha> skelterjohn: right :( 19:50 < piranha> nictuku: I skip files which are more than 10 mb in size :) 19:50 < nictuku> piranha, the hdd seeks wouldn't change if you process them line by line 19:50 < piranha> hm, ok, what's the right way to read line by line? :) 19:50 -!- tensorpudding [~user@99.56.160.152] has joined #go-nuts 19:51 < piranha> File.Read reads only by length, not by terminators, so it's easier to read just whole file... 19:52 < nictuku> if you have infinite memory, yes :-) 19:52 < piranha> :-))) 19:52 < skelterjohn> piranha: you can use the bufio pkg to read line by line 19:53 < |Craig|> piranha: r.ReadString('\n') 19:53 < piranha> oh! 19:53 < piranha> thanks, haven't seen that 19:55 < |Craig|> ha, I just had a dynamic language fail. I assigned a tuple of arguments over a function instead of calling it in python, and had a lot of trouble finding it. I'm so happy that kind of thing can't happen in go. 20:00 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Ping timeout: 255 seconds] 20:06 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 20:10 < napsy> How could I create an io.Reader from my struct so I can use it with binary.Read() 20:11 < skelterjohn> what's your goal? raw bytes of the struct? 20:11 < napsy> yes 20:12 < skelterjohn> you can use unsafe 20:12 < skelterjohn> unsafe can tell you how many bytes, and turn it into a byte slice 20:12 < napsy> hm I tried that but didn;t succeed 20:16 < edsrzf> Probably easier to turn it into an array first and then slice the array. 20:17 < edsrzf> Otherwise you have to worry about manipulating the slice header (length, capacity) yourself. 20:17 < piranha> nictuku: skelterjohn: did with bufio and now it's as slow as python version :-) 20:17 < piranha> good bye bufio, I don't need to seek in big files anyway :) 20:18 < skelterjohn> edsrzf: problem is you'd need to know the size of the array ahead of time 20:18 < skelterjohn> which is possible 20:18 -!- aho [~nya@fuld-590c7e54.pool.mediaWays.net] has joined #go-nuts 20:18 < skelterjohn> but when it's some arbitrary data structure, it's not obvious 20:18 -!- mbernstein [~michael@cpe-70-113-7-72.austin.res.rr.com] has quit [Ping timeout: 255 seconds] 20:18 < skelterjohn> and unsafe.Sizeof is a runtime operation 20:18 < edsrzf> unsafe.Sizeof is a compile time constant 20:18 < napsy> edsrzf: hm are there any examples how to do that? 20:19 < skelterjohn> is it? 20:19 < skelterjohn> cool - use that :) 20:19 < ww> hmmm... nice 20:19 < ww> changeset: 7634:b082d4fa0f3c 20:19 < edsrzf> Yeah, it is. 20:19 < edsrzf> From the spec: 20:19 < ww> gob: enable the GobEncoder and GobDecoder interfaces. 20:19 < ww> These allow data items to control their own representation. 20:19 < edsrzf> "Calls to Alignof, Offsetof, and Sizeof are compile-time constant expressions of type int. " 20:19 < skelterjohn> const S = unsafe.Sizeof(mystruct); data := *(&[S]byte)unsafe.Pointer(&theStructure) 20:20 < skelterjohn> assuming you can make S like that 20:20 < napsy> jesus 20:20 < skelterjohn> is it that intimidating? 20:21 < napsy> lots of casting 20:21 < skelterjohn> one cast! 20:22 < skelterjohn> later yall 20:22 < skelterjohn> heading out for the night 20:22 < napsy> oh sorry 20:22 < skelterjohn> ah - yeah unsafe.Pointer is a function 20:23 < skelterjohn> err 20:23 < skelterjohn> sorry - unsafe.New not unsafe.Pointer 20:23 < skelterjohn> unsafe.Pointer is a type 20:23 < skelterjohn> but maybe it would work anyway 20:23 < skelterjohn> i also meant *(&[S]byte)(unsafe.Pointer(&theStructure)) 20:24 < skelterjohn> C-style casts don't work 20:24 < skelterjohn> anyway, i'm gone 20:26 < napsy> hm still doesn't work 20:26 -!- DerHorst [~Horst@e176103212.adsl.alicedsl.de] has quit [Remote host closed the connection] 20:26 < napsy> syntax error: unexpected ), expecting { or { 20:29 < edsrzf> What exactly do you have? 20:29 < napsy> data := *(&[S]byte)(unsafe.New(&header)) 20:30 < edsrzf> Try (*[S]byte)(unsafe.Pointer(&header)) 20:30 < edsrzf> Well, that'll give you a pointer to an array instead of an array, but it should compile anyway. 20:31 < napsy> tnx it works now 20:42 -!- axo [~axo@c-71-192-75-183.hsd1.ma.comcast.net] has joined #go-nuts 20:48 -!- toyoshim_ [~toyoshim@y253149.dynamic.ppp.asahi-net.or.jp] has joined #go-nuts 20:48 < chomp> Just to verify that I actually understand the documentation, does bufio.Reader.ReadSilce immediately return with an EOF error if the buffer is empty? 20:50 < napsy> ok a dumb question ... can I convert an array to a slice? 20:51 < chomp> when you say convert, you mean? 20:52 < chomp> if you have an array a, you can refer to a slice over the entire array using a[:] 20:52 < napsy> oh, nice 20:55 -!- fenicks [~fenicks@log77-3-82-243-254-112.fbx.proxad.net] has quit [Ping timeout: 264 seconds] 21:04 -!- pothos_ [~pothos@111-240-171-231.dynamic.hinet.net] has joined #go-nuts 21:04 -!- femtoo [~femto@95-89-198-8-dynip.superkabel.de] has quit [Ping timeout: 255 seconds] 21:06 -!- pothos [~pothos@111-240-169-63.dynamic.hinet.net] has quit [Ping timeout: 276 seconds] 21:11 -!- rlab [~Miranda@91.200.158.34] has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org] 21:13 -!- vexd [~vex@91-65-134-239-dynip.superkabel.de] has quit [Quit: leaving] 21:21 -!- stalled [~stalled@unaffiliated/stalled] has quit [Ping timeout: 250 seconds] 21:24 -!- Fish- [~Fish@bus77-2-82-244-150-190.fbx.proxad.net] has quit [Quit: So Long, and Thanks for All the Fish] 21:31 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has joined #go-nuts 21:32 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts 21:47 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Ping timeout: 252 seconds] 21:47 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 21:52 -!- visof [~visof@unaffiliated/visof] has quit [Read error: Connection reset by peer] 21:53 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 21:53 < chomp> hrmm.. is there any way to create a new string from a []byte of utf-8 data? 21:55 < nictuku> string(data) ? 21:56 < chomp> >< ... really. how did i miss that? 21:56 < nictuku> :-) 21:57 < chomp> ah. found it in the documentation. Conversions. doh :p 21:58 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Ping timeout: 276 seconds] 21:58 -!- axo [~axo@c-71-192-75-183.hsd1.ma.comcast.net] has quit [Quit: leaving] 22:03 -!- tobel [~tobel@pD9E89AB4.dip.t-dialin.net] has joined #go-nuts 22:03 -!- tobel [~tobel@pD9E89AB4.dip.t-dialin.net] has quit [Client Quit] 22:04 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 22:09 -!- zozoR [~Morten@56346ed3.rev.stofanet.dk] has quit [Remote host closed the connection] 22:13 -!- PortatoreSanoDiI [~Marvin@82.84.99.90] has quit [Quit: E se abbasso questa leva che succ...] 22:17 -!- Scorchin [~Scorchin@host109-156-218-122.range109-156.btcentralplus.com] has joined #go-nuts 22:21 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has quit [Quit: Computer has gone to sleep.] 22:26 -!- vinisterx [~ryan@74-129-201-27.dhcp.insightbb.com] has quit [Read error: Operation timed out] 22:28 -!- vinisterx [~ryan@74-129-201-27.dhcp.insightbb.com] has joined #go-nuts 22:36 -!- Eko [~eko@c-24-130-224-186.hsd1.ca.comcast.net] has quit [Quit: Leaving] 22:51 -!- tarrant [~tarrant@69.169.141.202.provo.static.broadweavenetworks.net] has quit [Quit: Leaving...] 22:54 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has quit [Read error: Connection reset by peer] 22:55 -!- binarypie [~binarypie@c-24-6-151-185.hsd1.ca.comcast.net] has joined #go-nuts 23:00 < mpl> chomp: because you never thought it would be that simple :) 23:00 < steven> guys, im a little confused about what im seeing here.. its a really simple case of the select statement, and i expect the select statement to return instantly when the user enters text, but it doesnt happen right awaay 23:00 -!- Natch [~natch@c-6dcde155.25-4-64736c10.cust.bredbandsbolaget.se] has joined #go-nuts 23:00 -!- binarypie [~binarypie@c-24-6-151-185.hsd1.ca.comcast.net] has quit [Ping timeout: 255 seconds] 23:00 < chomp> hah. yeah, i was scouring the utf8 package docs and considering some horrible bastardization like looping over with DecodeRune 23:01 < steven> https://gist.github.com/856811 23:02 -!- nixness [~dsc@78.100.210.180] has quit [Quit: Leaving] 23:02 < steven> see how simple it is? yet it doesnt behave like i would expect.. the select statement captures the chan receive of the goroutine of Stdin, but it seems to wait to execute that case statement until the network one is received as well... 23:02 < steven> can anyone help my sanity and tell me what im misunderstanding here? 23:03 -!- Natch| [~natch@c-6dcde155.25-4-64736c10.cust.bredbandsbolaget.se] has quit [Ping timeout: 240 seconds] 23:04 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has quit [Ping timeout: 246 seconds] 23:05 -!- foocraft [~dsc@78.100.210.180] has joined #go-nuts 23:05 < chomp> woot. aside from the terrible lack of proper client-side terminal emulation, my go+js+websockets web browser remote shell is functioning :D 23:05 < steven> oooh. im assuming its waiting on the network for the Reader, but its actually net.Dial thats waiting.. so the goroutines never come into existance until ive waited a while 23:05 < steven> awesome! 23:14 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit: Verlassend] 23:14 -!- jumzi [~none@c-89-233-234-125.cust.bredband2.com] has joined #go-nuts 23:23 -!- Scorchin [~Scorchin@host109-156-218-122.range109-156.btcentralplus.com] has quit [Quit: Scorchin] 23:24 -!- brad_ [~brad@cpe-098-026-053-035.nc.res.rr.com] has joined #go-nuts 23:25 < brad_> in go how do you typecast something into another type? 23:25 < aiju> foo(bar) 23:25 < steven> type(obj) 23:25 < brad_> like, if I want a string as a byte array 23:25 < brad_> or a bool as a string 23:25 < brad_> ahh 23:25 < steven> []byte(str) 23:25 < aiju> bool as a string is not a cast 23:25 < brad_> thanks 23:25 < steven> bools and strings, i dont know if they can cast 23:25 < aiju> it's a conversion 23:25 < aiju> see the strconv package 23:26 < brad_> thanks 23:26 < steven> bool(s)? or string(b)? i dont know if they work 23:26 < aiju> steven: no 23:26 < steven> strconv is nice. 23:26 < steven> ive used it for Atoi, etc 23:26 < aiju> casts only work when the internal representation is the same or at least largely similar 23:28 < brad_> thanks, that seems to have done the trick 23:35 -!- alkavan_ [~alkavan@IGLD-84-228-193-27.inter.net.il] has left #go-nuts ["Leaving"] 23:36 -!- rlab [~Miranda@91.200.158.34] has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org] 23:36 -!- sauerbraten [~sauerbrat@p508CAE07.dip.t-dialin.net] has quit [Remote host closed the connection] 23:46 -!- virtualsue [~chatzilla@host81-139-70-65.in-addr.btopenworld.com] has quit [Ping timeout: 248 seconds] 23:50 -!- napsy [~luka@tm.213.143.73.175.lc.telemach.net] has quit [Ping timeout: 260 seconds] 23:52 -!- Sgm [Sgm@bl16-17-218.dsl.telepac.pt] has joined #go-nuts 23:53 -!- Sgm [Sgm@bl16-17-218.dsl.telepac.pt] has left #go-nuts [] --- Log closed Sun Mar 06 00:00:55 2011