Monday, April 27, 2009

Distributed vs Client-Server Revision Control

Sort of off-topic from the class, but while I was upgrading to the latest version of Ubuntu, I noticed a comment about how all of Ubuntu's core development was moved over to the Bazaar distributed revision control system. Looking into this, I found a Wiki entry on distributed revision control:

http://en.wikipedia.org/wiki/Distributed_revision_control

For the lazy:

Differences

* There may be many "central" repositories.
* Code from disparate repositories are merged based on a web of trust, i.e., historical merit or quality of changes.
* Lieutenants are project members who have the power to dynamically decide which branches to merge.
* Network is not involved in most operations.
* A separate set of "sync" operations are available for committing or receiving changes with remote repositories.

Advantages

* Allows users to work productively even when not connected to a network
* Makes most operations much faster since no network is involved
* Allows participation in projects without requiring permissions from project authorities, and thus arguably better fosters culture of meritocracy instead of requiring "committer" status.
* Allows private work, so you can use your revision control system even for early drafts you don't want to publish
* Avoids relying on a single physical machine. A server disk crash is a non-event with Distributed revision control

Disadvantages

* Concepts of DVCSs are more difficult for developers to grasp as they are required to know more about infrastructure.
* It's not possible to remove or change the whole history by only one party. This may be an issue for some companies, who would like to have full control over the history.
* A centralised server tends to be favored in corporate environment where access management and selective code visibility is more easily achieved; in this sense, tighter data security.
* There are no dedicated versions at one time, There are multiple variants.

Unclear

The following points are neither well documentated nor easily understandable:

* Will DVCS often require many more merge conflict resolution by hand efforts?
* Source code is considered the "crown jewels" of a software group. Centralized version control systems have been around much longer and thus perceived to be more stable.
* Some projects want or need centralized control.
* Distributed systems can end up with a person as the central point of control, rather than a server.


I'm kind of new to revision control (just started using SVN last semester, which is client-server). I'm pretty happy with SVN, but I wouldn't mind learning more about these others, especially if they have some nice advantages (of course, have to find the right combination of advantages/disadvantages).

C#

I never really looked into this language, but it seems like I might be working with it a lot in the near-future. Fortunately, our OOP book seems to refer to it a lot, about as much as C++ and Java, which should be very helpful. I'll have to go back through some of the chapters and review some of the C# stuff again (which I might have skipped previously). I seem to recall a few peculiar things, but then again, C++ and Java do a lot of strange things too. From the little bit I've seen, it doesn't seem too bad (unlike say Objective-C).

Darwin Follow-up

So I finished Darwin about a week ago (last Sunday). Didn't go nearly as smoothly as I had hoped, although I had some "distractions" that made it a bit difficult to get started on the project when I originally wanted to (yeah, I know...if I started a week earlier, this wouldn't have been a problem). I basically more or less started it the Friday night/Saturday morning right before it was due. Because of this, whenever I found a problem with my code, I decided to stick a "band-aid" on it instead of reconsidering my overall design. Eventually, I had a lot of band-aids and some poorly (in my opinion) designed code. It seemed to work for what I tested it with (I did get a 42/50, which is decent I guess), but it definitely was not easy to use the classes I created.

I'm hoping to do a better job with Life, which seems similar in some aspects to Darwin.

Don't Miss Class

A little over a week ago, I had to miss class due to a job interview. It was my first absence of the semester, and I feel like I missed a lot of information. It seemed like more topics were covered that day than any other (about 8 topics on the calendar). I did review some of the material, and I think I understood some/most of it. But I feel like maybe I was missing something important. I did ask a few people, but it turned out that either they missed class too or they couldn't really remember anything too important.

I don't think we got quizzed (directly?) over it, and I'm understanding the new material, so I guess it isn't a big deal. But nevertheless, I'm happy that I shouldn't have to miss any future lectures. We can cover a lot of material in a short amount of time in this class, and I think it can be a bit difficult to catch-up, especially if you miss a lot of days.

Monday, April 13, 2009

Thoughts on Darwin

Originally, I was going to name this "First Thoughts on Darwin" or something like that. But that was because I wanted to make this post about a week ago...back when I had my first thoughts on Darwin. Not really accurate to have that now...

Anyway, this definitely seems like an interesting project. It seems like the most difficult project we've had, but also potentially the most rewarding. I might change my mind in a couple of days, but I think I will really enjoy this project, particularly the Object-Oriented nature of it.

I'd like to get started tonight if possible (might have to wait until tomorrow). Usually, I just start coding a solution right away, but I think I might actually do some design work beforehand (of course, I do a little design work for other projects too, but usually just in my head). This is definitely a project where good design will pay off (and bad design will really hurt). I want to make sure I make some good decisions when I'm deciding what classes to make, what they will do, how they interact, etc.

Fortunately, I already found out about a few suggestions (e.g., use a separate container for creatures instead of trying to place them directly onto the grid). I probably would have done something different...and likely more difficult.

If things go smoothly, I'd like to make at least one more post about Darwin, preferably when I am done. As I said, it seems like an interesting project, and I'd like to compare my thoughts before and after. Besides Allocator, this is the only project I've never worked on in a previous class (at least in some form).

Wednesday, April 1, 2009

Ask, and Ye Shall Receive

"Of course, as I read in another blog, I probably wouldn't mind maybe a little more OOP-specific stuff."


"I'm somewhat disappointed by the lack of reading assignments lately"


As the old saying goes, "Ask, and Ye Shall Receive."