User:Which Linden/Office Hours/2009 Aug 6

From Second Life Wiki
Jump to navigation Jump to search
  • [11:00] ATechwolf Foxclaw: Hi which
  • [11:00] Which Linden: hey there!
  • [11:00] ATechwolf Foxclaw: Hmm...not many here today
  • [11:00] Which Linden: the loading screen image should totally become the Snowglobe app icon
  • [11:01] ATechwolf Foxclaw: lol
  • [11:01] Which Linden: it is like way cool
  • [11:02] ATechwolf Foxclaw: They need to come up wiht a few new login screens. The ones they got are poor and low rez.
  • [11:03] Which Linden: for snowglobe, or in general?
  • [11:03] Which Linden: cause, I was recently observing how the loading screens are pretty damn decent for the mainline viewers
  • [11:04] Which Linden: I'm glad someone's paying attention to that aspect of the user experience
  • [11:04] ATechwolf Foxclaw: The login screen is just the client loading up a web page. Its just snowglobe I think points in a different web page.
  • [11:04] Which Linden: yeah
  • [11:04] Which Linden: [1] is the "normal" one
  • [11:04] ATechwolf Foxclaw: better created ones are needed.
  • [11:04] ATechwolf Foxclaw: Perhaps a few around Zindra? lol
  • [11:05] Which Linden: with little censor bars all over everything :-)
  • [11:05] Shockwave Plasma: and a note that says Here be Dragons
  • [11:05] ATechwolf Foxclaw: lol
  • [11:05] ATechwolf Foxclaw: Some Linden needs to sneak that one in
  • [11:06] ATechwolf Foxclaw: Heck, if manament wants to make a few dollors, allow creative ads there. It would be better. ;-)
  • [11:07] Morgaine Dinova: Alopha :-)
  • [11:07] Morgaine Dinova: And Aloha too :-)
  • [11:07] Which Linden: hi there morgaine, missed you last week
  • [11:07] Which Linden: nice hat
  • [11:07] Morgaine Dinova: Slept through last week, hehe. And nearly missed it again :-(
  • [11:08] Shockwave Plasma: I thinght it was an alternative to Asprin
  • [11:08] Morgaine Dinova: lol
  • [11:08] Morgaine Dinova: Keeps the rain off
  • [11:08] Which Linden: anyone been following the discussions on eventletdev?
  • [11:09] Which Linden: been pretty active lately
  • [11:09] ATechwolf Foxclaw: Can't see the hat. Text only here.
  • [11:09] Morgaine Dinova: ATech's sitting on the tiny seat, how uncivilized :-(
  • [11:10] Morgaine Dinova: Woot!
  • [11:10] Which Linden: text only SL client?
  • [11:10] ATechwolf Foxclaw: yes. Radegast.
  • [11:10] Morgaine Dinova: Thanks ATech :-))
  • [11:10] ATechwolf Foxclaw: I think "HD - Classic Balck Leather Couth" was the largert one?
  • [11:11] Which Linden: hah, so you have to specify where to sit based on names?
  • [11:11] ATechwolf Foxclaw: Wich, very handy when you dn't want to waste bandwith with textures.
  • [11:11] Which Linden: yeah, I imagine, my laptop's getting pretty hot right now
  • [11:12] Shockwave Plasma: I was using sleek for a while, until it made my inventory read only Grrrr
  • [11:12] Morgaine Dinova: Most people put their coffee mug on the table :P
  • [11:13] Morgaine Dinova: Hi Dahlia :-)
  • [11:13] Dahlia Trimble: hi :)
  • [11:14] Which Linden: good day!
  • [11:14] Which Linden: do we want to talk about eventlet today, or perhaps some other topic??
  • [11:14] Dahlia Trimble: is eventlet underclued
  • [11:15] Morgaine Dinova: Are there any timings available for eventlet?
  • [11:15] ATechwolf Foxclaw: What or who is eventlet?
  • [11:15] Which Linden: [2]
  • [11:16] Which Linden: timings? what do you mean?
  • [11:16] Morgaine Dinova: Speed and overhead benchmarks / tests / measurements
  • [11:17] Hermit Barber: Hi Dahlia.
  • [11:17] Dahlia Trimble: so now that I've trained myself to think event-driven, I dont have to?
  • [11:17] Dahlia Trimble: Hi Hermit :)
  • [11:17] Mealea Ying: it says here its quick.... and BlooKitty, you are short so dont worry about overhead
  • [11:17] Morgaine Dinova: lol
  • [11:17] Dahlia Trimble: lol
  • [11:18] Morgaine Dinova: Hiya Hermie :-)
  • [11:18] Mealea Ying: Hya Hermit!
  • [11:18] Which Linden: Morgaine: I welcome your input about how to develop such benchmarks, and what to compare them to -- I'd be interested in setting up continuous builds that ran them every time there was a change and bitched about regressions
  • [11:18] Hermit Barber: Hi everyone else rezzing slowly and not showing on the snowglobe minimap until rezzed.
  • [11:18] Morgaine Dinova: Which: oh, that's a good idea.
  • [11:19] Mealea Ying: BlooKitty, remember the FPS problem we had here? you should try it with shadows on
  • [11:19] Dahlia Trimble: I think the minimap gets it's avatar info from a different message than normal avies
  • [11:19] Morgaine Dinova: Uh oh, bad?
  • [11:19] Mealea Ying: yah I can make a pot of coffee between frames
  • [11:20] Which Linden: do shadows work on the mac yet?
  • [11:20] Mealea Ying: rollerskating is out of the question
  • [11:21] Mealea Ying: uhoh
  • [11:21] Morgaine Dinova: Which: well Enus is setting up all manner of tests using PyOGP, and is very interested in regression testing. Perhaps once there's a framework into which we can slot tests, we could add some for eventlet.
  • [11:22] Dahlia Trimble: what is LL using eventlet for?
  • [11:22] Which Linden: I think the standard in the python world for continuous builds is buildbot
  • [11:22] Which Linden: We use it for a bunch of things; server code, misc scripts, PyOGP uses it
  • [11:23] Which Linden: "networky things" encapsulates it best
  • [11:24] Morgaine Dinova: Not in the sim though, since that's C++. What kind of networky areas?
  • [11:24] Dahlia Trimble: so eventlet rather than twisted?
  • [11:24] Dahlia Trimble: or with it?
  • [11:24] Which Linden: no twisted, we have some folks here who have used twisted in the past, but they're pretty happy with not having to use it again
  • [11:24] Dahlia Trimble: lol
  • [11:24] Elric Ember: This may be of interest: [3]
  • [11:25] Which Linden: networky stuff like ; proxying requests to the proper inventory host
  • [11:25] Which Linden: god shouting to the entire grid
  • [11:25] Elric Ember: One CI server to rule them all
  • [11:25] Morgaine Dinova: Hehe
  • [11:25] Morgaine Dinova: It's official then. God uses eventlet.
  • [11:25] Elric Ember: Can simplify maintenance aspects
  • [11:25] Dahlia Trimble: so a coroutine is like a thread?
  • [11:26] Which Linden: yes, another term for coroutines is "green threads"
  • [11:26] Dahlia Trimble: oh ok
  • [11:26] Which Linden: it is like a thread but it doesn't involve any preemption, so you don't have to mess around with locks and all the other things that make threads horrible
  • [11:26] Mealea Ying: awwww BlooooKitty
  • [11:27] Elric Ember: Does python implement coroutines as threads or within them?
  • [11:27] Morgaine Dinova: Mealea: that would be me ;-)
  • [11:27] Mealea Ying: yep!
  • [11:28] Which Linden: Python itself has no coroutine implementation; eventlet uses the greenlet library, or, runs on stackless
  • [11:28] Elric Ember: ah ok
  • [11:28] Which Linden: greenlets are pretty orthogonal to threads
  • [11:28] Which Linden: it is not advisable to mess around with threads and coroutines together too much because of risk of head asplode :-)
  • [11:29] Which Linden: python threads suck anyway
  • [11:29] Elric Ember:  : D I bet
  • [11:30] Which Linden: do any of you have any "networky" applications?
  • [11:30] Latif Khalifa: networky?
  • [11:30] Dahlia Trimble: a few, but I'm no expert
  • [11:30] Morgaine Dinova: Heh, all languages suck in that area, and are desperately trying to catch up with Erlang. And failing miserably at it. :P
  • [11:30] Dahlia Trimble: well maybe not "Networky", but networky
  • [11:31] Latif Khalifa: my english parser is not up to task today lol
  • [11:31] Shockwave Plasma: couldn't progarm her way out of a paper bag, even with a handful of Contructers
  • [11:32] Latif Khalifa: what does it mean? "networky app"
  • [11:32] Dahlia Trimble's: "select()" manual page has tattered corners
  • [11:32] Elric Ember: Latif: chatty or talks alot
  • [11:33] Latif Khalifa: i think libomv counts then lol
  • [11:33] Dahlia Trimble: libomv would probably qualify lol
  • [11:33] Latif Khalifa: hahaha
  • [11:33] Which Linden: on Python threads: [4]
  • [11:33] Which Linden: definitely
  • [11:33] Latif Khalifa: yeah, we're pretty talky alright :P
  • [11:33] Dahlia Trimble: or try opensim ;)
  • [11:33] Latif Khalifa: uhm, that too
  • [11:33] Which Linden: so pyogp is kind of the python equivalent of libomv; and it uses eventlet
  • [11:34] Which Linden: it'd be lovely if we could get coroutine-based networking into the C++ code; I think there were some aborted attempts a few years ago
  • [11:35] Latif Khalifa: dahlia, btw. i rewrote the baker, have a look when you get time... i kept it managed image, didn't go system.drawing route as you suggested
  • [11:35] Latif Khalifa: Which, c# event handling is perfect for those sorts of things, have you every played with mono?
  • [11:35] Dahlia Trimble: kk
  • [11:36] Which Linden: I've not used C# at all, Latif
  • [11:36] Elric Ember: Someone might've written a C++ implementation as part of their thesis. The IEEE archives might have something
  • [11:36] Which Linden: what's so cool about the event handling?
  • [11:37] Which Linden: Elric: there's definitely C++ coroutine libraries out there
  • [11:37] Dahlia Trimble: inline delegates
  • [11:37] Latif Khalifa: enus was able to connect 300 bots to the grid using libomv from a single laptop
  • [11:37] Latif Khalifa: it performs well
  • [11:37] Dahlia Trimble: inline delegates are pretty simple to work with
  • [11:38] Which Linden: hah, as Morgaine would say, where are the benchmarks??? :-P
  • [11:38] Latif Khalifa: which, is simply beutiful :)
  • [11:38] Dahlia Trimble: libomv uses them a lot
  • [11:38] Which Linden: hm, the thing about evnetlet is you don't need delegates at all; you just write code as if it were blocking
  • [11:38] ATechwolf Foxclaw: If Radegast get multi-account support, I may use that to see how many alts I can log in at once. hehe
  • [11:38] Latif Khalifa: Which, I would not want that
  • [11:38] Which Linden: inline delegates are certainly better, but it's still "callback hell"
  • [11:38] Dahlia Trimble: Opensim uses packet pools and threadpools, kinda painful but seems to handle a lot of traffic
  • [11:39] Latif Khalifa: why callback hell?
  • [11:39] Dahlia Trimble: its an inline callback, kind of acts as a blocking request
  • [11:40] Which Linden: maybe I'm not understanding inline dllegates
  • [11:40] Latif Khalifa: in c# I could in any class/control, whereever put GridClient.OnNetworkConnect += MyFunc; then myFunc(blah blah) { Log("I am now connected") }
  • [11:40] Which Linden: so myfunc is an inline delegate?
  • [11:40] Latif Khalifa: no its not in this case
  • [11:40] Which Linden: oh, so how would that be written with inline d;legates?
  • [11:40] Latif Khalifa: but... i can have 20 functions subscribe to this event
  • [11:41] Which Linden: man I cannot seem to spell that word delegates
  • [11:41] Latif Khalifa: GridClient.OnNetworkConnect = delegate() { Log("I am connected"); }
  • [11:41] Latif Khalifa: +=
  • [11:41] Which Linden: ha, right, ok, so it's an anonymous function basically, right?
  • [11:41] Latif Khalifa: so you can add as many delegates as you want
  • [11:42] Latif Khalifa: for an event
  • [11:42] Latif Khalifa: yes, but it handles adding many of them automagically
  • [11:42] Dahlia Trimble: theres another form which waits on an inline event
  • [11:42] Elric Ember: Which: That link is a great read. Thank you
  • [11:42] Dahlia Trimble: cant remember the syntax offhand
  • [11:43] Which Linden: so the way you'd write this using coroutine based networking is GridClient.connect(); Log("I am connected");
  • [11:43] Which Linden: if you want a bunch of callbacks (which is, btw, a very uncommon use case in my experience), just do a for loop
  • [11:43] Which Linden: for callback in callbacks { callback() }
  • [11:44] Which Linden: the common use case is way shorter, and the multi-callback use case is clearer, too
  • [11:44] Latif Khalifa: if you are making a gui app., its quite common to have many many delegates invoked per single event
  • [11:44] Which Linden: yeah, GUI programming is pretty different than network programming
  • [11:44] Latif Khalifa: i want to disable buttons, change caption text, close logs, etc etc when i get disconnected from the grid for istance
  • [11:45] Which Linden: GUI programming makes more sense when written event-driven
  • [11:45] Which Linden: but networking is not thus
  • [11:45] Latif Khalifa: network does too, especially for SL protocol
  • [11:45] Which Linden: a common use case is "make one http request, then, based on the results, make one or two more"
  • [11:46] Latif Khalifa: GridClient.Self.OnImReceived += do stuff
  • [11:46] Which Linden: i think we're approaching this from different sides
  • [11:46] Which Linden: definitely the GUI code that responds to events should be callback-based where appropriate
  • [11:46] Dahlia Trimble: RequestLogout(); if (!logoutEvent.WaitOne(Client.Settings.LOGOUT_TIMEOUT, false)) Shutdown(DisconnectType.NetworkTimeout);
  • [11:47] Dahlia Trimble: theres an example
  • [11:47] Morgaine Dinova: All a bit pathetic compared to Erlang processes, where you can happily run millions in parallel if you have the memory. That's one area in which all other languages are wannabes.
  • [11:47] Latif Khalifa: erlang is written in erlang then i suppose, not is some other pathet wannabe language as C?
  • [11:47] Which Linden: but it's much easier to write stuff as "result1 = httprequest(url); if result1.foo: httprequest(url2) else: httprequest(url3); httprequest(url4)
  • [11:48] Which Linden: with callbacks the above snippet would be...ugh, more than I want to type
  • [11:48] Dahlia Trimble: lol
  • [11:48] Dahlia Trimble: it all pays the rent I guess ;)
  • [11:48] Which Linden: heh :-)
  • [11:49] Which Linden: inline delegates are better, though, for sure, because they're at least closures
  • [11:49] Which Linden: in C++ you have to pack all your state up into a struct and stick it in the callback object
  • [11:49] Latif Khalifa: well writting event driven code seems strange at first but i think its perfect for implementing protocols like SL protocol
  • [11:50] Latif Khalifa: there are hundreds of different things that can happen
  • [11:50] Dahlia Trimble: SL™ protocol is all event driven anyway
  • [11:50] Latif Khalifa: yes
  • [11:50] Which Linden: I think the SL protocol was originally developed under the constraints of C++, now that we're moving to capabilities it will start looking less and less event-driven
  • [11:51] Latif Khalifa: event queue is also perfect for implemeting it firing off events
  • [11:51] Dahlia Trimble: gotta run... tc all :)
  • [11:51] Elric Ember: tc
  • [11:52] Morgaine Dinova: Which: did your message queueing evaluation go beyond that document you showed us? Any final conclusions?
  • [11:52] Latif Khalifa: libomv is basically a network layer that gets and decodes udp and caps messages, and fires off events that your app them might want to decide to handle
  • [11:52] Morgaine Dinova: Cyu Dahlia
  • [11:52] Latif Khalifa: such us OnInstantMessageReceived or on OnLoggedIn
  • [11:52] Which Linden: Morgaine: well we've ben trying to come up with architectures that get around the limitations of the various packages, but in general, no, no progress
  • [11:52] Morgaine Dinova: nods
  • [11:53] Which Linden: Latif: yeah, certainly client libs that use liomv should be event-driven, but libomv itself might be cleaner and easier to maintain if it were written using coroutine-based networking
  • [11:54] Latif Khalifa: it could... we implement it using c# ThreadPools for packet capturing, decoding, which is more in line how you would implement it in c/c++
  • [11:55] Which Linden: oh yeah, I bet C# threads are decent for that sort of thing
  • [11:56] Latif Khalifa: yes, and they are easy to program compared to say pthreads... the runtime takes care of assiging them to different processors, etc, which is also configurable
  • [11:57] Which Linden: yeah, the only advantage coroutines have over well-implemented language threads is that they are somewhat faster
  • [11:57] Which Linden: (if well-implemented themselves)
  • [11:58] Latif Khalifa: yes, thread startup/teardown does have significat cost
  • [11:59] Which Linden: I guess we agree! :-)
  • [11:59] Which Linden: Time for me to head for lunch.
  • [11:59] Which Linden: Thanks for your time and thoughts
  • [11:59] Latif Khalifa: hehe, take care Which
  • [11:59] Elric Ember: For performance, logging when context switches or GIL contentions occur could help
  • [11:59] Morgaine Dinova: Cya Which
  • [11:59] Elric Ember: tc
  • [11:59] Which Linden: Have a wonderful day!