User:Zero Linden/Office Hours/2008 May 15

From Second Life Wiki
Jump to: navigation, search
  • [8:35] Zero Linden: Gooooood morning all
  • [8:35] JayR Cela: hi there zero :_)
  • [8:35] Anya Heberle: Good Morning sleepy head
  • [8:35] Arawn Spitteler: wonders what would happen, if he set integer size_y to 0: If I do that, I get more pixels on the basic texture. Hi, Zero.
  • [8:35] Rex Cronon: hi zero
  • [8:35] Marc Montague: Good morning to you Zero
  • [8:36] Zero Linden: I'm almost ready here
  • [8:36] joao Mastroianni: hello^^
  • [8:36] Zero Linden: there - coffee
  • [8:36] JayR Cela: Arawn / might work
  • [8:36] Rex Cronon: hi
  • [8:36] Zero Linden: much better
  • [8:36] Zero Linden: d'oh - just spilled it all behind my head
  • [8:36] Zero Linden: dang animation interactions!
  • [8:36] joao Mastroianni: hello zero its a pleasure^^
  • [8:36] Wyn Galbraith: Coffee is so important. *sips*
  • [8:36] Anya Heberle: lol
  • [8:36] Zha Ewry: Coffee management issues
  • [8:36] JayR Cela: Hi there Zha :_)
  • [8:36] Black Kitten: Coffee : Hot strong coffee!!
  • [8:36] Zero Linden: I suppose the only real way to get that sort of thing right is to have a semantic tag on each motion in an animation and then use some
  • [8:37] Zero Linden: AI system to figure out what take priority over what....
  • [8:37] Zero Linden: yes - holding a cup takes priority over putting your hands behind your head...
  • [8:37] Zero Linden: but beating down the attacking zombie takes precedence over spilling your coffee
  • [8:37] dragonflymystic Freschi: yeah ... havent had my iced tea
  • [8:37] Tao Takashi: Hi there
  • [8:37] JayR Cela: lol :_)
  • [8:38] Zha Ewry: sets AWG tag
  • [8:38] dragonflymystic Freschi: dont drink coffee anymore
  • [8:38] Rex Cronon: hi tao
  • [8:38] JayR Cela: hi tao :_)
  • [8:38] joao Mastroianni: can i ask a question zero?
  • [8:38] couch sit: 1 RED.: BigMike Bukowski, say '/1 Hide' to hide me, or '/1 Show' to make me show. Or just right-click and sit on me to use me.
  • [8:39] Dolf Rhino: Hi
  • [8:39] Zero Linden: Agena items, anyone?
  • [8:39] Zero Linden: Joao - have an item?
  • [8:39] joao Mastroianni:  ??
  • [8:39] Tao Takashi: I wonder if there is a plan to register some domain for ogp to make the URL shorter :)
  • [8:39] joao Mastroianni: item?
  • [8:39] Zero Linden: is your question an item for the agenda?
  • [8:39] JayR Cela: things seem to be running pretty smothly lately
  • [8:39] Rex Cronon: subjects of discussion for todays office hours
  • [8:39] joao Mastroianni: mmm
  • [8:40] joao Mastroianni: well dont know just a doubt
  • [8:40] joao Mastroianni: about the servers
  • [8:40] Anya Heberle: are allLindensCertifyable
  • [8:40] Anya Heberle: and if so
  • [8:40] Tao Takashi: we can make it an agenda item if there's not a quick answer
  • [8:40] Anya Heberle: .. Can I be one
  • [8:40] Arawn Spitteler: was thinking, this morning, that some way is needed, to keep German IPAddresses from seeing anything a Nazi would consider Naughty.
  • [8:40] Zero Linden: what is it, joao?
  • [8:41] joao Mastroianni: well now ive been receiving lots of warnings that im entering in a diferent simulator
  • [8:41] joao Mastroianni: in Linden village
  • [8:41] Zero Linden: Arawn - without human decision in that loop, it is a big AI research project
  • [8:41] joao Mastroianni: but from 1 day to another they change
  • [8:41] JayR Cela: thats normal joao
  • [8:41] joao Mastroianni: so wich server is
  • [8:41] joao Mastroianni: class 4 or 5
  • [8:41] Zero Linden: Yes - that is because which regions are running a "test" simulator change from time to time
  • [8:41] joao Mastroianni: or is there a new kind?
  • [8:41] JayR Cela: as LL updates the server code in sections
  • [8:42] Tao Takashi: JayR: did you happen to find that link again? :)
  • [8:42] joao Mastroianni: ahh
  • [8:42] Zero Linden: it's not the class that is different, it is the version of the simulator software
  • [8:42] joao Mastroianni: ahh
  • [8:42] JayR Cela: Tao @ what link was that ?
  • [8:42] joao Mastroianni: ok and how we know wich ias the faster?
  • [8:42] joao Mastroianni: if we can know?
  • [8:42] Saijanai Kuhn: only one kind of code per compjuter though, as I understand it, so you should see 4 simulataors with thesame code grouped together
  • [8:42] Tao Takashi: about IBM's VW interop announcement or whatever it was. maybe Zha knows more? :)
  • [8:42] Arawn Spitteler: The warning flags don't tell us anything, but that we can ask for the same lack of information
  • [8:43] Bell Boyd: frequent minor chnges in Havek4?
  • [8:43] Bell Boyd: Havok
  • [8:43] Tao Takashi: the release notes are simply missing in that popup
  • [8:43] JayR Cela: @Tao / oh yeah / darnit I cant remember now
  • [8:43] Zero Linden: Saijani - that is correct, a version of the software loads onto a single machine, which simulates mutliple regions
  • [8:43] joao Mastroianni: anyway i must congratulate you guys this is faster^^
  • [8:43] Zero Linden: (one per CPU, or in some cases (voids) 4 per CPU)
  • [8:43] Saijanai Kuhn: are they contiguous regions, Zero?
  • [8:44] Zero Linden: since all the regions on a machine share some server processes (dataserver, backbone, squid, apache),
  • [8:44] Free Radar: HUD v1.1 by Crystal Gadgets
  • [8:44] Zero Linden: they must all be at the same rev
  • [8:44] Conover's Flight-Helper: 6.3.3 (WEAR ME!): Flight-helper is ready and operational.
  • [8:44] Free Radar: HUD v1.1 by Crystal Gadgets
  • [8:44] Saijanai Kuhn: topolgogically continguous?
  • [8:44] Saijanai Kuhn: share thesame sim border?
  • [8:44] Zero Linden: The coordination of which regions can run where is a very very complex task
  • [8:44] Tao Takashi: just be on the same machine
  • [8:44] Arawn Spitteler: understands they don't have to be on the same grid.
  • [8:45] Tao Takashi: they might be anywhere as I understand it
  • [8:45] Zero Linden: we've been doing it manually for months (Go Release Team, Go!)
  • [8:45] Zero Linden: But very very soon (already) we will be using "The Conductor" that will coordinate all of this automatically
  • [8:45] Tao Takashi: hopefully ;-)
  • [8:45] Zero Linden: including finding spare machines, figuring out what SW load is needed for waiting regions, loading it, and then starting and running them
  • [8:45] JayR Cela: whats that Zero ?
  • [8:45] Zha Ewry: tao? I'm not quite sure what you're asking
  • [8:45] Saijanai Kuhn: periapse gave a talkon this at the Mono office hours. Put a link on the AW Grouipes page
  • [8:46] joao Mastroianni: zero the servers when we change there is fawls cause the data is not yet in the next server right?
  • [8:46] Zero Linden: No, to answer the question I think was asked above, no, the regions on a single host are not, in general, topologically adjacent
  • [8:46] Saijanai Kuhn: https://wiki.secondlife.com/wiki/Mono/2008-04-04
  • [8:47] Tao Takashi: Zha: JayR mentioned some announcement from IBM at the last dataportability meetup but couldn't find the link anymore.. so I don't know myself what it might have been ;-) Was there any announcement by IBM regarding VW interop recently?
  • [8:47] joao Mastroianni: ok but we use small servers,isnt possible
  • [8:47] Dr Scofield: is that deliberate or just coincidence?
  • [8:47] Dr Scofield: and, hi :-)
  • [8:47] joao Mastroianni: to use a big server to many regions and so no fawls
  • [8:47] JayR Cela: well I think region crossings are getting a bit better lately
  • [8:47] Rex Cronon: hi
  • [8:47] joao Mastroianni: sorry if my question is ignorant-...
  • [8:47] Saijanai Kuhn: 15:35ish in the transcripts, Periapse talks about what Conductor will do
  • [8:48] Zero Linden: Dr. S. - it is just coincidence - the rigidity of tying regions to particular machines which would be needed to keep adjacent ergions on a host isn't worth the loss of flexibility
  • [8:48] Anya Heberle: yes in thelastyear there islittle difference in the lag of simswith adjacents sims
  • [8:48] Anya Heberle: I second that
  • [8:48] Anya Heberle: its great
  • [8:48] Anya Heberle: SLB4 was poor slow because ofadjacentssims
  • [8:48] Zero Linden: especially when you realize that regions are STILL goign to have to talk to neighbors
  • [8:48] Dr Scofield: yep, true, didn't think that far
  • [8:49] Arawn Spitteler: Fawls?
  • [8:49] Zero Linden: and it also means that dense areas will have a higher likely hood of having all four regions hogging the same host
  • [8:49] Zero Linden: The conductor, once it is deployed, and works will finally be the first time that we can have an automated
  • [8:49] JayR Cela: ahh / simm corners comes to mind
  • [8:49] Zero Linden: intellegence placing regions - it could be extended easily to look at historical load for a region, and the load on
  • [8:50] Zero Linden: existing machines with an available CPU, and place it accordingly
  • [8:50] Zero Linden: That kind of load balancing wasn't possible with the old system
  • [8:51] Dr Scofield: do you have a mechanism that would "split" a region on to two servers when the load gets too high? (like OpenSim's region splitting? though i haven;t tried that myself)
  • [8:52] Arawn Spitteler: doesn't think that will happen, until regions are ready to run at reduced size.
  • [8:52] Zero Linden: No, we don't, for several reasons
  • [8:53] Zero Linden: As a C++ application, migrating live data structures involves coding - and a fair bit of it
  • [8:53] Dr Scofield: ok. good point
  • [8:53] Zero Linden: Live migration of connected avatars could be difficult
  • [8:53] Zero Linden: (as the viewer connects dirrectly to a socket on the sim host... how do you migrate that live to another host? - we'd need protocol in the viewer to support it
  • [8:54] JayR Cela: i recently to a visit to OpenLife / and used the RealExtend client
  • [8:54] JayR Cela: so so results
  • [8:56] Zero Linden: I'd like to turn our attention to RHTTP
  • [8:56] JayR Cela: k :_)
  • [8:56] Zero Linden: https://wiki.secondlife.com/wiki/Reverse_HTTP
  • [8:56] Tao Takashi: Raw HTTP ;-)
  • [8:57] Zero Linden: If you haven't read it, and are interested, please do
  • [8:57] Arawn Spitteler: Retro-Hyper
  • [8:57] Zero Linden: I believe that on Tuesday, Icehouse folks are comign to the AWGroupies meeting to talk, yes?
  • [8:57] Zha Ewry: yes yes
  • [8:57] JayR Cela: IceHouse ?
  • [8:57] Zha Ewry: Donovan is on tap for that
  • [8:58] Zero Linden: The cool thing is - it works - and in python it is under 100 lines of code
  • [8:58] Zero Linden: though, frankly it would need to be a bit longer "for real"
  • [8:58] JayR Cela: what is it ?
  • [8:58] Tao Takashi: did he put that in eventlet?
  • [8:58] Zero Linden: It is a"reverse HTTP" -
  • [8:58] Zero Linden: Tao - no it works with the standard python HTTP client/server libs!
  • [8:58] Tao Takashi: cool
  • [8:59] Zero Linden: RHTTP is the following simply idea
  • [8:59] Dyne Talamasca: neat
  • [8:59] joao Mastroianni: the server becomes client and the client server,basicly is that?
  • [8:59] Zero Linden: establish a standard run-of-the-mill HTTP connection from viewer to simulator (for example) intending to do a polled request for events
  • [8:59] Zero Linden: BUT
  • [8:59] Zero Linden: use the HTTP/1.1 facilities of protocol upgrade (The Upgrade: header and the 101 status code)
  • [9:00] Zero Linden: to agree to switch to "PTTH" (reverse HTTP)
  • [9:00] Tao Takashi: you should promote this wildly, make browsers and servers implement it and everybody will be happy! :-)
  • [9:00] Zero Linden: at whcih point the protocol is *exactly* HTTP from the simulator (as client) to the viewer (as server)
  • [9:00] Saijanai Kuhn: Thiswill make it really easy to create remote control test harnesses
  • [9:01] Tao Takashi: of course IE would make it with their own spin on it ;-)
  • [9:01] Zero Linden: With teh right support in existing HTTP client and server libraries, this can be very trivial to implement ---
  • [9:01] Zero Linden: basically a library has to allow you to tell it to be a HTTP client or server with a given, already connected, socket
  • [9:01] Zero Linden: many do, as they separate out the "connect" phase from the rest of the protocol
  • [9:01] Zero Linden: but some do not....
  • [9:02] Zero Linden: that wouldd be a barrier to entry
  • [9:02] Tao Takashi: are you planning to release the code?
  • [9:02] Zero Linden: I'm pretty sure that Donovan will be releaseing the Python code
  • [9:02] Zero Linden: we haven't done this in C++ yet
  • [9:02] Zero Linden: Alas, it is probably NOT doable from JavaScript
  • [9:02] Tao Takashi: well, I am more interested in Python anyway ;-)
  • [9:02] Zero Linden: as the interface to behing a HTTP client is very highlevel, and there is no library for being an HTTP server
  • [9:02] Tao Takashi: but JS would have been nice of course
  • [9:03] Rex Cronon: does this RHTTP work when the user is behind a firewall?
  • [9:03] Zha Ewry: javascript, It hink, would have to be done in the JS container
  • [9:03] Rex Cronon: or if user is using a proxy?
  • [9:03] Zha Ewry: JS inherently doesn't have the library
  • [9:04] Zha Ewry: The container, does, for all sorts of good reasons
  • [9:04] JayR Cela: I think is avaiable with latest verson of NetBeans
  • [9:04] Zero Linden: Rex - yes it does
  • [9:04] Zero Linden: the very reason for it's existance
  • [9:04] Zero Linden: However, there is a hitch
  • [9:04] Zero Linden: (as there always are)
  • [9:05] Zero Linden: The HTTP/1.1 upgrade mechanism is connection level, not end-to-end transport level
  • [9:05] Zero Linden: so you are only upgrading the first link
  • [9:06] Zero Linden: If you are contacting a proxy explicitly to do your HTTP out, then this Upgrade:; is a request to the proxy, not the far end
  • [9:06] Zero Linden: The only other thing to use the Upgrade mechanism is
  • [9:07] Zero Linden: Upgradeing to TLS within HTTP: RFC 2817
  • [9:07] Zero Linden: [1]
  • [9:07] Zero Linden: (Note to be confused with HTTP over TLS, RFC 2818)
  • [9:07] Dr Scofield: hmmm....so any proxied connection is hosed?
  • [9:08] Zero Linden: (*not*)
  • [9:08] Zero Linden: Well, any explicitly proxied connection needs to be treated special
  • [9:08] Zero Linden: you need to ask the proxy to perform a CONNECTION to the far end
  • [9:08] Zero Linden: *then* proceed with the Upgrade:
  • [9:08] Zha Ewry: Do we have anythoughts on how to test this, in the small, before depending on it?
  • [9:08] Zero Linden: this is defined in the proxy spec, but it isn't clear to us if it is actually implemented, and if so, is it commonly administratively allowed
  • [9:09] Zero Linden: Zha - well, the first step was getting an implementation to work with - and that is what Donovan did this week
  • [9:09] Zha Ewry: nods
  • [9:09] Zero Linden: Another hanging question is will this work through
  • [9:09] Zero Linden: transparent proxies?
  • [9:09] Zha Ewry: I'm thinking of a way to get the pair of endpoints in a lot of places and test it
  • [9:10] Zero Linden: if you connect from A to B, but somwhere in the nextwork, a proxy inserts itself, so the flow is really A to P to B
  • [9:10] Rex Cronon: u can add it as a module to the rcviewer
  • [9:10] Rex Cronon: and those interested can test it
  • [9:10] Zero Linden: One can't expect A to know that it's connection level aspects (there are several in HTTP) apply to P, P must act transparently
  • [9:10] Zero Linden: BUT,
  • [9:10] Zero Linden: who knows if exsiting transparent Proxies were designed and tested to handle Upgrade
  • [9:11] Saijanai Kuhn: the code is already linked to from the reveres_http page on the wiki
  • [9:11] Zero Linden: from the total lack of RFC 2817 implementation
  • [9:11] Zero Linden: we can't infer wide spread support
  • [9:11] Zero Linden: for Upgrade:
  • [9:12] Saijanai Kuhn: The micro_POST-server command line mechaism I came up with for the login test harness would an ideal way to test this
  • [9:13] Zero Linden: a brief google search implies that no browsers support it, thought it has been contemplated for Firefox as of 2006
  • [9:13] Zero Linden: Apache 2.1 supports it (well, the support is claimed for 2.2, but the docs for 2.1 have the directive to support it)
  • [9:14] Zero Linden: Of course, if we say this is just optional, that you can fall back on the event queue -- then we may be good no matter what the support for now
  • [9:14] Zero Linden: Ah, so the code is!
  • [9:14] Saijanai Kuhn: login script contacts the controller script server, which reverses itself to become a client POSTING GUI commands back to the test-harness
  • [9:15] Saijanai Kuhn: tada! instant distributed testing over the internet
  • [9:17] Tree Kyomoon: other than testing, what could you practically do with reverse http?
  • [9:17] Tao Takashi: that looks like eventlet though ;-)
  • [9:18] Saijanai Kuhn: gets rid of tunnelingissue for direct http hookup
  • [9:18] Dr Scofield: no more event queue
  • [9:18] Dr Scofield: ideially
  • [9:18] Dr Scofield: ideally
  • [9:18] Zero Linden: Tao - I think he's just using eventlet there to run two processes (the server and the client) from within the same code
  • [9:18] Tao Takashi: trying right now to understand it ;-)
  • [9:18] Zero Linden: The RHTTP stuff uses wsgi, which is generic
  • [9:18] Tao Takashi: Linden Lab seems not to be a fan of docstring ;-)
  • [9:19] Zero Linden: Of course, really, if you think about it
  • [9:19] Zero Linden: having the rhttp client end (the simulator in our example), hold this socket open, with keep alives, so that it can send requests to the rhttp server (the viewer)
  • [9:19] Zero Linden: is really exactly the same network state
  • [9:20] Zero Linden: as the eventqueue long poll, where the viewer has made a request, and the simulator holds onto that socket, not replying, until it has something to send
  • [9:20] Zero Linden: From a resource perspective, it is *EXACTLY* the same
  • [9:20] Zero Linden: however
  • [9:21] Zero Linden: some HTTP server libraries might balk at the long held open socket, whereas http client libs that support keep-alive don't at all
  • [9:22] Zero Linden: though - to be honest, for any http server libraies that would appropriate to implement either of these, this isn't a problem
  • [9:22] Zero Linden: I see the biggest advantage of this over the event queue
  • [9:22] Zero Linden: is that there is no re-encapsulation of the requests
  • [9:22] Zero Linden: the encapsualtion *IS* http, just as it would be in the other direction
  • [9:22] Rex Cronon: holding so many open ports server side doesn't waste a lot of resources?
  • [9:23] Saijanai Kuhn: would it make sense to ever do a double switch? Post to one, switch, post back, switch, etc?
  • [9:23] Zero Linden: Where is this 'so many' idea coming from?
  • [9:23] Zero Linden: A connected server port costs no more and no less than a client port
  • [9:23] Zero Linden: If the simulator is going to send stuff to the viewer it needs a socket
  • [9:23] Zero Linden: it makes no difference if it creates a client port and connects and holds that
  • [9:23] Dr Scofield: grins
  • [9:24] Dr Scofield: channelling
  • [9:24] Zero Linden: or if it accepts a server connection (binds) and holds that
  • [9:24] Dr Scofield: via the sub-ether
  • [9:24] Zero Linden: same cost, same resources
  • [9:24] Zero Linden: right now each simulator holds a UDP connection open to each agent
  • [9:24] Zero Linden: and accepts at most one incoming TCP connection for each event queue
  • [9:25] Zero Linden: so - two per agent.....
  • [9:25] Zero Linden: this doesn't seem like a large number to me.
  • [9:25] Tao Takashi: except when we scale the region to hold a million avatars :)
  • [9:25] Dr Scofield: with 40 avs max per island, that's just 80
  • [9:25] Tree Kyomoon: zero is this a TCP send/receive/send kind of thing, or you keep an open connection continuously ?
  • [9:25] Rex Cronon: i was thinking that u want like 1000 avatars per sim
  • [9:26] Dr Scofield: so that would be just 2000
  • [9:26] Rex Cronon: there*
  • [9:26] Rex Cronon: thre are 4 sims per server
  • [9:26] Dr Scofield: 8000 then
  • [9:27] Dr Scofield: ports is not the issue, network buffer might
  • [9:27] Rex Cronon: wouldn't having that many open connections create lag?
  • [9:27] Zero Linden: Thats just 128M of buffer memory
  • [9:27] Saijanai Kuhn: if you can scale to that many, you could probably start worrying about auxiliary servers to handle the extra load
  • [9:27] Zero Linden: So - UDP connections must be held open for the duration
  • [9:28] Zero Linden: TCP connections can be held open, or closed and reopened as needed
  • [9:28] Zero Linden: having the port open, other than the memory footprint, doesn't cost much
  • [9:28] Zero Linden: for UDP and TCP w/o keep-alive( TCP KA) there is *NO* network cost at all
  • [9:28] Zero Linden: and no processing cost (as long as epoll or some such newer API than select is used)
  • [9:29] Rex Cronon: if things are as u say, than there might be no problem
  • [9:29] Zero Linden: If you have TCP keep-alive enabled, it is just one packet, send/received by the kernel every so often
  • [9:29] Zero Linden: looks up the interval
  • [9:29] Saijanai Kuhn: we can test it easily enough. Use Dovana's script as its own test harness to spawn a zillion processes and see what happens
  • [9:30] Tiffany Sicling: will that work through NAT and firewalls without port forwarding ?
  • [9:30] Tree Kyomoon: so PTTH does both TCP and UDP...interesting
  • [9:30] Dr Scofield: should, since you are using an existing connection
  • [9:30] Dr Scofield: which the client opened
  • [9:30] Saijanai Kuhn: that's the beauty. the SERVER POSTS to the CLIENT first time through, so there's no need for port forwarding
  • [9:31] Zero Linden: heh - the default TCP keep-alive interval is....
  • [9:31] Zero Linden: ...wait for it.....
  • [9:31] Zero Linden: ....2 hours!
  • [9:31] Zero Linden: so, let's not worry 'bout that
  • [9:31] Zero Linden: Tree - NOOOO PTTH only does HTTP
  • [9:31] Tree Kyomoon: unless a romulan quantum singularity drive happens to be near by of course
  • [9:32] Tedd Maa: cat /proc/sys/net/ipv4/tcp_keepalive_* -- but different on Windows
  • [9:32] Arawn Spitteler: worries a bout the machine, which countes each of 7,200,000 milliseconds
  • [9:32] Zero Linden: Ya know, we've had our TCP streams affected by Romulan Quantum Singularity Drive before... and it's not pretty
  • [9:32] Saijanai Kuhn: its just a flag in the python library
  • [9:32] Saijanai Kuhn: But Zero, can you be sure it was THAT, and not some OTHER Quantum Sigularity Drive?
  • [9:33] Zero Linden: We had an Ensign from Engineering analyize the warp signature.... there was no doubt
  • [9:33] Saijanai Kuhn: I'm convinced
  • [9:34] Rex Cronon: i think that Quantum Sigularity Drive should be taken into consideration only after u have at least one in your possesion:)
  • [9:34] Tree Kyomoon: (they speed up /slow down and reverse time...making the packets update time potentially disasterous)
  • [9:34] Zero Linden: (Alas, Ensign Expendable died collecting that signature.... but such is the cost of Science!)
  • [9:34] Zha Ewry: Hard to do QA otherwise
  • [9:34] Saijanai Kuhn: tried for one of those positoins, bet multi-universal meta-tensors was beyond him
  • [9:34] Tiffany Sicling: I think the improbability drive is better and is more suited
  • [9:34] Saijanai Kuhn: just as well, it sounds like
  • [9:34] Tree Kyomoon: 42
  • [9:35] Zero Linden: Tiffany- indeed, and gets your packets delivered faster, and with extra icing!
  • [9:35] Zero Linden: okay all
  • [9:35] Zero Linden: thank you for coming
  • [9:35] Arawn Spitteler: didn't like the Red Shirt, they threatened to make us wear.
  • [9:35] Dr Scofield: thx for your time
  • [9:35] Zero Linden: I'll see you all on Tuesday