Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
I have not forgotten about my series on method type inference; rather, the contrary. I have been thinking hard about how to change method type inference to be more accurate in a hypothetical world with covariant and contravariant interfaces, and this has led me to dig in even deeper to the method type inference specification and implementation. I've got acres of notes on this now; getting them into bloggable form will take more time.
Until then, some of the wit and wisdom of the managed languages team.
We "dogfood" our source control system here; that is, we now use the same source control system that we sell to customers to control our own sources. Even better, we use recent builds of the source control system, so that we find the flaws in new versions of it before customers do. We feel the pain so that you don't have to. But this means that occasionally the Software Development Company Abstraction breaks down for a few hours here and there.
Some wags have started writing suggestions for what to do when the source control server is down on the whiteboard outside my office. So far, the list consists of:
0) Teach the VB team what index lists begin at.1) Send email to [the source control server team].2) Complain.3) Update this whiteboard.4) Learn helplessness.5) Go to Tosche Station. Pick up some power converters.6) Consider the management track.7) Write a new source control system -- yes, you have enough time.
What do you do when your source control / bug database / network / email / whatever crucial system is temporarily unavailable?
When our source control server is down I take a moment to consider how lucky I am to be a DVCS user.
When our network is down I take another moment to consider how lucky I am to be a DVCS user.
When our email server goes down I get a lot of work done.
Oh, and somebody should tell the C# team that lists begin at `car'.
I read blogs, check facebook, and read some article on MSDN or CodeProject to learn either what to do or what not to do. That's assuming the Internets is up.
If the Internets is down, I turn around and chat to colleagues about wholly inappropriate non-work related gubbins that amuses and horrifies us in equal measures (there is a healthy gathering of Republicans and Democrats side by side so political discussions get heated - being a foreign national, I don't mind stirring the pot every now and again).
I also turn to books, if I have them on hand, or go for a wander down to the coffee shop for a warm tasty beverage.
>> What do you do when your source control / bug database /
>> network / email / whatever crucial system is temporarily unavailable?
Travel to building 41 and write on the whiteboard outside of Eric's office.
Derek already said it better than I can, but here goes.
Our version control system doesn't go down. Subversion is just too darn simple to fail. (It does, however, run way too slow.)
If it DID go down, I'd have plenty do do because I'm the Subversion admin.
If I WEREN'T the Subversion admin then I'd keep working on my code. After all, Subversion uses optimistic locking (you don't have to "check out" a file before editing it) and the whole source tree lives on my local working copy. So an outage doesn't really stop me.
If it were something ELSE preventing me from touching code at all, I'd keep working on other things. After all, typing out code is only a tiny portion of my job. I also have to respond to emails (well, usually I'm too busy), write documentation, organize other developers, create architectural design documents, perform security audits, and lots of other things that don't require me to write code. I have to work on my annual goals, sit with my boss for regular reviews, meet with other developers to discuss various policies and design questions... there is LOTS that I can do.
And if somehow my entire PC was dead, and my spare PC too (perhaps the power went out), and I couldn't work with my colleagues (perhaps I have severe laryngitis), then what would I do?
I'd go home early.
it's never down, i'm using git (under windows through cygwin, linux and os x leopard)
Lists should start at any index I want. If I want my list to go from 1906 to 2012 that's my business.
Go home...come back tomorrow and see if it's up yet.
Keep very, very careful notes.
And make sacrifices to the merge gods in anticipation of its eventual return.
What To Do When The Source Control Server Is Down?
The answer is quite easy:
Thanks for your blog posts, they are interesting and thought provoking.
I agree with Derek. DVCS is very useful, because it puts you in control of your time. Well, I was going to suggest importing your working directory to a temporary DVCS source repo and hack on that, then push the changes back to your main VCS when its back up. Using DVCS could be just your dirty little secret, you don't have to tell anyone what you were doing "while the server was down". My favorite is git (msysgit on windows) and my favorite centralized VCS is Subversion.
Whoops, your "VCS going down" is just a metaphor, or perhaps this whole post is a jest. However, expect more DVCS commenters because this is low hanging fruit. I am not actually aware of your dogfood's capabilities, which might encompass more than a DVCS can do.
> 7) Write a new source control system -- yes, you have enough time.
Please don't do this. Write a two-way converter from your dogfood to a DVCS. This is more useful for the next time your server goes down. "git-dogfood" sounds nice. ;-)
> What do you do when your source control / bug database / network / email / whatever crucial system is temporarily unavailable?
Skipping the first two, network loss is catastrophic because our work data is locked up in servers, especially our Outlook and Excel data. We stop trying to double-click our Outlook icons because it renders our computer useless for minutes at a time.
> Derek already said it better than I can, but here goes.
Derek also said it differently
> Our version control system doesn't go down. Subversion is just too darn simple to fail. (It does, however, run way too slow.)
Servers fail, webservers stumble and crash, disks get corrupted, and networks go down.
Subversion does fail.
DVCS (Mercurial, Darcs, Git, Bazaar) don't.
> Please don't do this. Write a two-way converter from your dogfood to a DVCS.
addendum to my previous post: DVCS do, in fact, fail, but for a DVCS to fail (unless there's a severe bug in it) requires the local machine to fail (either the disk or the whole machine), which is a (previously unlisted) failure mode that CVCS share.
If the network is down, and consequently the internet is taken down with it, then I'll read the Visual Studio documentation. If the internet happens to be available, but a critical system I need is unavailable, I'm usually on discussion forums.
If source control is down, I'll just work offline and merge when it comes back up.
The first thing I do is, try and find out where is the actual issue and Is there something which I can do to resolve it or if I can find any alternative ways to keep the work in progress.
e.g. - Restarting the machine might bring up my source control system.
- If email isn't working I would phone instead
Once I am satisfied that nothing is under my control and the only thing I have to do is wait until someone else resolves the issue, I would immediately jump on to a folder on my machine named ‘KM’ which has a bunch of things like:
-ASP.net MVC screen casts
-Nothing but dot net course material
-Nhibernate screen casts
-Learn Automated Builds
(I often jump to this folder in between our builds and deployments.)
Now if the internet is working than I would also open up my Snarfer and start downloading things on my KM folder from over 100 rss feeds
Learning is Inevitable . . . .