Delta Engine

Delta Engine Blog

All about multiplatform and game development

Why was exDream.com offline?

Internet Soldier

Well, we just moved to our new office in the last few days, but it pretty much sucked in the first few days. The heaters did not work, we could not get ANY internet working for days and it is still not possible to get any internet because the cables are too old. Instead we are online right now with an UMTS stick, which is not really fun for 20 people surfing like crazy. Because UMTS providers do not even give you an exclusive IP (you share it with all the other people also currently connected), we are also completly unreachable from the outside (except for VPN tunnels of course).

 

So instead of having everything offline until this is all sorted out, I quickly installed the most important services (game servers, this website, some other stuff) on my laptop and connected it at home, where everything is fine and dandy. It does not even seem to run any slower than before, but there are still some sites offline and some services are not longer reachable because they are only available at the server in the office. Hopefully this all gets sorted out soon and we are back to normal.

 

I also wanted to post some pictures from the new office, but it looks pretty chaotic right now. We are still waiting for our switch and some extra network cables so we can finally setup everything.

 

I also got my new Netbook (Samsung N510) today, which has an Intel Atom CPU as all netbooks, but also an NVidia ION GPU (which is a NVidia 9400 GM). As expected it is pretty slow (especially the hard drive, which I am going to exchange with an Intel SSD), but so far everything runs nicely and programming and playing games runs amazingly well. Just Windows feels a little slow, I'm used to better stuff :) After installing some extra ram and the SSD I am going to optimize the shit of of this thing and then I will hopefully like it even more :)

 

This is how the Samsung N510 looks like, it is really small (less than 1/3 of my 24 inch monitor height and I better not compare it with my 42 or 30 inch screens) and light (with battery 1.4 kg, without probably less than 1kg) and it was also very cheap, it costs like 5 times less than my laptop from 3 years ago and can do more stuff (DirectX 10 with haxx, more stuff build in, hdmi output with working 1080p video decoding, and other fun stuff):

How to make server network connections faster than 1gbit

cern data storage

With our company growing and growing we are exploring some new options for faster networking. Sadly 10gbit networking is still way too expensive, network cards, switches and even cables are insanely expensive. It is 20-50 times more expensive than just using cheap 1gbit hardware, especially since every computer has a 1gbit network card on the mainboard anyway.

Since our new server has a pretty big and fast raid we do not want access limited by just 1gbit. Our new raid can read and write data with up to 1 GB/s, which would require a 10gbit network to do this over the network. But since that is too expensive, it is out of the question.

In case you are interested, here are some pics from the old and the new server:

New server

This is the old server (actually one of two), which just had a small Raid-5 plus some extra hard disks. The server was mostly used for backups. It was an older Core2Duo with 2TB storage and we used it not as an file server so much (that's what the other server did), but for database, websites, services and mostly backups.


New server

The new server is not longer just a desktop PC, but a 4HE server (without a server rack) with two Xeon Quad-CPUs (i7 920 equivalents) with 24 GB Ram and a really nice Areca Raid controller for 16+4 hard discs of each 1.5 TB (total=24TB) plus another raid with 3 TB for backups. Not all of that space is available since the 20 hard discs are in a Raid60, but we got plenty of free space. We use this server now for pretty much everything, development, file server, all the websites (including this blog), the build server, the content server, many multiplayer servers, lots of services and much much more.


New server

Another picture of the inside of the new server. Please note that the second raid controller is not connected yet and both the SSD and 4 more Hdds are missing. I build most of the cables myself from stuff lying around from other computers. I also added some more fans because the raid controllers apparently do not like heat so much and the server is pretty loud anyway.

To archive more than 1gbit to and from the server (which is definitely the bottleneck) we are using a different trick, which is called Link Aggregation, also known as trunking, NIC teaming, link bundling, etc. It is usually the easiest way to find support for this technique by searching for the 802.3ad standard, which most switches and multi-network cards support nowadays. The problem is to find a really good switch that can actually handle the workload of many clients plus 4 1gbit cables to the server, which also needs a really good 4x 1gbit network card. One major problem while doing network cards and switch research is the incredible annoying naming and abbreviation all those devices have. Only after a while you find out what LR, SR, LX, TRB, etc. and all the 802 standards mean. After some suggestions from my brother and lots of research (it is not an easy topic if you only play system and network admin once a year ^^) I decided to get a nice Netgear switch with 48 ports (called GS748T) and a powerful Quad Port Server Adapter from Intel. 24 ports plus some other switches we have lying around would also be enough but the only switch I could get easily now was that one and it was only 25% more expensive (it also has a few more cool features). This way I have enough ports to do more trunking in the future (lots of ports will be wasted by connecting switches, servers or even my computer).

Okay, so how does this work now? Let me explain with a little diagram I just drew (the hardware components actually look this way, see above for details):


New server architheture

As you can hopefully see from my amazing drawing skills (now that real graphic artists are blogging on this blog, this is probably not funny anymore) each client is still connected through a 1gbit network card and cable to the new switch. The older switches we had were kinda week and some people could not really enjoy the full speed, either because we cascaded to many 8port switches or because some of them were just overwhelmed by the current load. Now the network is much better and we will do some stress tests this week and since most people are trying to access the server (or one of the internet connections behind the server), much more bandwidth from and to the server can now be provided with help of the Link Aggregation (802.3ad). In fact if 4 people are downloading some huge files from the server simultaneously, each of them can still enjoy up to 120MB/s of data while some other people could write something at the same time. The Raid Controller will probably brake down earlier since it can only provide 1000MB/s when reading or writing sequentially, but this setup should be 10-40 times faster than what we used in the past years. I will blog more next year about the engine, all da cool games and why we need all this server stuff in the near future.


External links:

Using NDepend

A fellow MVP Patrick Smacchia is the developer of the .NET tool NDepend, which allows to analyze any .NET code base and helps dealing with code complexity. Since I have been using the tool on and off for a while now and recently very much for the development of our new Engine (a multiplatform engine in .NET), I was asked to write a little review about it. Why not, it is a great tool :) NDepend is probably most recognized for generating interesting looking Bubble Graph. For example our current early testing engine produces the following graph. This tells us where we need to refactor the most, simplify stuff, add more features, etc. Please note that we are currently heavily editing the engine every day and this graph changes almost completely every week. This Bubble Graph shows which methods in all of our 32 projects are currently public (blue). As you can see maybe the Helpers assembly on the left is mostly gray because we already made lots of stuff private/protected. This is just one example, there are many many metrics that can be displayed.




After extracting NDepend (there is no installer) you have a bunch of files in some directory. The most useful looking one is VisualNDepend.exe, which starts the GUI of NDepend. As you can see you can enable integration with Visual Studio 2005 and 2008 (no 2010 yet, but does not really matter, you can still start NDepend by yourself) and with the great Reflector tool. The integration via the addins just provides an easier way to load and inspect assemblies, you can do the same with Visual NDepend on your own.

 

The second thing I noticed was the "Getting Started" panel, which provides a great deal of help and especially tutorials on how to do things. This is kinda important for NDepend because it is not clear what you actually do with this tool, even after using it for a while. The bad thing about all the tutorials (all of them can be found online: http://www.ndepend.com/Features.aspx) is that they have no sound or voice, just boring text boxes popping up. But if you search for a feature or want to know how to do things, you will most likely find some useful information after a very short while. Also good is that all the information can be found at a central location and everything is linked nicely together. After using the tool a few times it is also not that hard to write own commands with the CQL (Code Query Language) inside NDepend, which is pretty much self explanatory and can be written very easily with Intellisense, for example:

SELECT METHODS  WHERE NbLinesOfCode >  50  AND IsPublic 

This selects all public methods with more than 50 lines of code in the Bubble Graph. Since only a handful methods will popup (in blue), it is easy to now go and refactor those methods if we really want to reduce the complexity of methods that have too many lines of code. You can obviously show many other things with NDepend, but I usually just go to the Features page or play around with the dropdownbox values until I find something that looks interesting for my assemblies (lines of code, il instructions, complexity, accessors, number of callers, etc.). Then on our "Refactoring Friday" we can use this data to make more clever decissions and refactor methods that really need refactoring and are actually used instead of refactoring anything that is not called much anyway and we should not care much about yet anyway.

VisualNDepend also shows some other interesting metrics. The Dependency Graph shows which assembly is required by which assembly and what assemblies they use in turn (until reaching mscorlib on the right usually). The cool thing is when investigating some assembly, e.g. in the Dependency Matrix, it will also be highlighted in the other views (e.g. Dependency Graph or the Bubble Graph in Metrics). The following image shows which assemblies are using Delta.Helpers and which assemblies it requires itself. Please note that most assembly loading happens dynamically in our engine, which NDepend does not show, so this is only partially useful for us. But for some rules, like every assembly should reference our base assembly Delta, we can easily check if any assembly does not follow this rule by hovering the mouse over Delta, which will highlight all assemblies that use it, the rest remains gray.

 

One final image I want to share is the Dependency Matrix, which shows which assembly is used by which other assembly. Since most assembly and type usage happens dynamically at load time, most of this matrix should be empty. As you can see some assemblies still have quite a lot of references. For some it makes sense because it it can be easier to use Utilities statically instead of defining an interface for every freaking method. This is why we have a few exceptions for static modules, which have almost no other assembly requirements, but are used by many assemblies. It is still easy to replace such assemblies, but they cannot be replaced at runtime like our dynamic modules. I will blog more about this in the future. For now NDepend helps us to see that some assemblies still have too many static references and others are ok. Next Friday we will focus and removing some more references in those assemblies, which still have too many dependencies we do not want. Until then the Dependency Matrix will probably look pretty much like this (more modules are coming and going every day however):

 

 

 

High-Tech Gründerfonds and MAZ level one invest in MobileBits GmbH

MobileBits GmbH is the parent company of exDream GmbH. News from: http://www.high-tech-gruenderfonds.de/htgf/index.php?id=212&module=presse-03-content&pid=0&mid=58

 

MobileBits GmbH is a German publisher and developer of games for all platforms with an AppStore. Following the iPhones example, these kinds of AppStores also emerge on other major platforms such as Google Android, Windows Mobile, Nokia Ovi or even Xbox360 Arcade. That is why MobileBits develops a multiplatform-engine called „Delta Engine“, which allows developing games for all AppStore platforms at once completely under Windows and by using the popular Microsoft .NET framework. This way game developers do not need to learn new programming languages, do not need to reprogram the games for each platform and therefore can achieve cost-savings of 50%-70% for each additional platform.

 

„The Delta Engine is already being used to develop our own games and will also be licensed to external developers as soon as it is ready to be released“, says Karsten Wysk, CEO of MobileBits GmbH. „We are really looking forward to making it possible for millions of Windows/.NET developers to release games for the AppStore platforms without costly and complex trainings“.

Dr. Heiko Milde, CEO of MAZ level one GmbH: „In addition to the highly attractive business model, we are particularly impressed by the management team of MobileBits GmbH. All founders have more than 10 years of experience in the games industry, they developed several award-winning games for PC/Xbox360/PS3 with their development company exDream and even won the German Development Award. It is extremely beneficial that MobileBits can take advantage of these experiences and of exDream itself as its 100%-development daughter.“ 

„Games is the most successful category within the already highly successful AppStores“, says Dr. Björn Momsen, investment manager of High-Tech Gründerfonds. „We are seeing a strong demand for both the games and the technology of MobileBits due to its high quality and the described cost advantages.“

MobileBits’ first game „iSKAT“ is the first multiplayer version of the highly popular German card game SKAT for the iPhone – several other titles targeting the international markets are currently being developed.
 

Contact:
Karsten Wysk (CEO)
MobileBits GmbH
Lerchenstrasse 28
22767 Hamburg
Germany
Tel/Fax:
Mobil:
karsten.wysk@mobilebits.de
www.mobilebits.de

About High-Tech Gründerfonds:
High-Tech Gründerfonds invests venture capital in young, high-opportunity technological companies implementing promising research results in an entrepreneurial manner. The start-up companies are planned to lead their R&D projects to the production of a prototype or a “proof of concepts” or market launch by means of the seed financing of up to 500k EUR. The High-Tech Gründerfonds has a fund volume of around 272m EUR. Investors of the public-private partnership are the Federal Ministry for Economics and Technology, the KfW bank group as well as the six industrial groups BASF, Deutsche Telekom, Siemens, Robert Bosch, Daimler and Carl Zeiss.

Contact:
Dr. Björn Momsen
Investmentmanager
High-Tech Gründerfonds Management GmbH
Ludwig-Erhard-Allee 2
53175 Bonn, Germany
Tel:
Fax: +49 228 - 965685-50
info@high-tech-gruenderfonds.de
www.high-tech-gruenderfonds.de

About MAZ level one:
MAZ level one is a specialized venture capitalist for very young, fast growing technology companies in the field of hardware, software, micro systems technology, nanotechnology, photonics, life science and biotechnology. MAZ offers seed capital and a wide range of supporting services to companies in the north of Germany.

Contact:
Dr. Heiko Milde
MAZ level one GmbH
Habichtstraße 41
22305 Hamburg
Germany
Tel.:
Fax: +49 40 6579805-93
info@mazlevelone.com
www.mazlevelone.com

Modern Warfare 2 over Steam - German only? No!

Hello World!

I don't know how you feel about this, but i think most of the games coming out today have so much more atmosphere when you can enjoy them in their original language. This is usually why I try to play every game in english or watch movies and series as they were meant to be enjoyed - and not butchered by semi-professional voice actors.

In the case of Call of Duty: Modern Warfare 2, this really grinded my gears. I bought the german version and activated it over Steam as usual. Fun fact about that is, that the keys for Steam games all have a "country-code", so that the game knows in which language it is allowed to download - and only that one. At least the guys at Infinity Ward thought it would be a good idea to block the Germans from downloading any other language (Makes perfect sense, right? We Germans aren't multi-cultural at all, of course.. Thats why there was a World War in the first place.. So that we don't have to speak all those other weird languages...).

So there I was, wanting to install the CoDMW2 Multiplayer in original English and Steam wouldn't let me. So what to do in this sticky situation?

The trick is to install a version that doesn't need Steam activation (these don't have language limitations) and, after that, copy over all the files into your steamapps directory for Modern Warfare 2. Then, you backup your old localization files that contain localized_german_... and replace these with the localized_english_... ones. To do that, just rename those new files to localized_german_... and you're all set for a Multiplayer experience without the voices of "Erkan und Stefan"  (for the terrorist announcers) to mess up your mind.

The wierd thing is that it only works by renaming the files to "german" and keeping your Steam Settings for the game set to "German".. If you just could select  "English"
in the Steam Settings, this would be so much easier, but changing languages in Steam doesnt't do a thing for this game. I personally think, this is a real let-down for all the guys living in Germany that appreciate a game in the original language.

I hope this helps you guys and I catch you online in my favorite game at the time!

How to migrate from dasBlog to BlogEngine.NET!

dasBlog

Here are my main reasons why I switched this blog from dasBlog to BlogEngine.NET recently:

  • Too many problems with dasBlog over the years (I have been using it for 5 years now)
  • Often simple features like commenting just stop working or causing problems on different browsers
  • Checking for spam is way too hard (see below, I wrote a helper app)
  • Customizing dasBlog is hard
  • Development of dasBlog is almost frozen (not much updates anymore)

Don't get me wrong, I absolutely loved dasBlog (else I would not have been using it for 5 years), but after porting dasBlog to our new website at exDream I encountered some really annoying problems. After I copied over the content files I just got strange security errors. After I fixed those all blog posts were gone. Then after coping all files once again and restarting the app, the next error appeared: Cannot add duplicate item and so on. After one or two hours I got everything working, but while searching for solutions to my problems I encountered BlogEngine.NET. Many people seem to have switched in the last 2 years, I heared of it before but I did not see any reason to switch. Now however after checking out the simple tools, the great extensibility and the much easier to use theming, I was hooked.

Switching was not painless, but overall it was a pretty quick process. Just have to figure out how to convert WordPress (another blog) to BlogML and then import those posts into the same BlogEngine blog. The main difficulty was to export dasBlog entries to BlogML and get it back into BlogEngine.NET.

BlogEngine.NET

I used the following tool to export from dasBlog to the BlogML format: http://www.paulvanbrenk.com/blog/2006/12/27/BlogMLSupportForDasBlogBeta.aspx
After fiddeling around the the command line tool I got the exporter working. While it was annoying that it threw so many exceptions, it later helped me to figure out some settings I had to make both in the tool and on the dasBlog site.

You can alternatively also use the UI merill build for the DasBlog to BlogML Converter:
http://www.cyberslingers.com/weblog/post/Upgrading-BlogEngineNET-hosted-on-1and1-using-the-Blog-Importer.aspx

Next you gotta import BlogML back into BlogEngine.NET, but I had many spam comments and trackbacks in my old blog, which I wanted to get rid of. So I wrote a little application that parses the whole export.xml file (was around 11MB for me) and removes everything that stinks. This is the whole console application (it uses Log and StringHelper from my utilities and XLinq, not much else, it should be easily extendible to block more spam): BlogImportSpamRemover.cs (6.42 kb)

This resulted in reducing my 11MB of blog data to 2.5MB (wow) with the following spam removal statistics:
Info: Saved exportCleaned.xml! Parsed 283 posts with 477 comments and 30196 trackbacks. Found and removed 51 spam comments and 30112 spam trackbacks!

Finally importing the blog entries also caused some trouble. First the Import BlogML application inside BlogEngine.NET must be started from IE (FireFox saves the file, and then launching it won't work), then I had to try different settings until everything validated and finally the importer always aborted with "Invalid username or password", which made no sense. Luckily I quickly found the solution, just add post.DateModified to the \api\BlogImporter.asmx:
http://www.pksoftware.net/devblog/post/A-fix-for-the-Blog-Engine-Importer-tool-problem.aspx

After that all blog posts were imported and are live here now :) I later found out that using ASP.NET 4.0 causes some additional problems. First you have to use "requestValidationMode="2.0"" for the web.config system.web/httpRuntime key, else posting blog entries will just fail with a dangerous request error page. Then some extensions like the Poll will just stop working and keep telling you strange things like "Please choose an answer" even if you select a valid answer. I checked with Firebug and saw that the Ajax calls all failed. So I switched back to the ASP.NET 2.0 DefaultAppPool and things started working again.

One last issue I had after a very long day of fixing css was the fact that all my other web applications stopped working (under the root where BlogEngine is now located). I tried to remove httpModules in the other web applications and reinstalled some apps, but nothing helped. BlogEngine is really messing around by disabling sessions, rewriting all kinds of urls, demanding strange files, etc. Only after I found this extremly useful blog entry (after finding less useful posts like this one for ScrewTurn (wiki) or this one for YAF (Yet Another Forum), which both did not work) I was easily able to fix all the problems by just forcing the root web app not to inherits it stupid incompatible web.config settings to all the children web applications: http://www.jaylee.org/post/2008/03/Prevent-ASPNET-webconfig-inheritance-and-inheritInChildApplications-attribute.aspx

Well, in the end everything worked out great and now the whole website is working better than ever and much easier to customize than before. Maybe I will talk about the dynamic features of the other pages (Games and Gallery) sometime soon, which is kinda cool (they all are just generated on the fly from some directories).

Trying out Mercurial with VisualHG

I talked a month ago about how much I disliked Subversion at the end of our last project (Fireburst), but guess what happend? We are right back at Subversion and curse it everyday for the pain we have with it.

 

GitWhy? Well, we tried Git and it totally sucked (even worse than I last described). It is not like we were to stupid to use it, I even forced the whole team to use it for 3 days until we finally gave up. As game developers we just lose too much time with it, the disadvantages clearly overshadowed the benefits git gave us. Merging and branching all the time was fun (we made 70 commits in those 3 days with lots of branches and conflicts that were solved pretty easily), but the Visual Studio integration was just useless. In the end we used the Git tools (GitExtensions), but the constant committing to yourself, then trying to sync with the server, ohh that does not work, try to update. Well, that did not work either, some random error message. Trying over and over again. It seemed like every time we wanted to share our work (which was VERY often, sometimes in less than 5 minutes) it seemed like Git was in the way and we had to wait a extra few minutes until all developers could update again without errors.


We also used SourceGears Vault for a few weeks, which I pretty much liked in September (after I complained about the complexity and problems with TFS). But Enrico really did not like it and was able to convince everyone (including me, I also had some strange issues with Vault) that it might not be the ultimate versioning tool after all. For me three main issues prevented me from continue using and purchasing Vault: 1. It always took a very long time (10-20s) whenever I started up Visual Studio and tried to connect to the Vault server over VPN. This is INCREDIBLY annoying, especially when the Get Latest Files at start-up dialog was enabled. 2. Get Latest Files at start-up is useful to get you updated right away when starting to work, but you always have to confirm it, which does not save you any time or clicks. I reported this 2 months ago in the Vault Forums, but nothing has changed in this regard. And third, but probably most importantly: Vault sometimes was completely unable to upload or download files, but when working over VPN (slow internet), but sometimes even at the office. Some random error message is reported, but after this happened to me 2-3 times in one day and I certainly lost an hour of work already, I gave up on Vault. It still is integrated the best way into Visual Studio and has really nice features, but I really need some convincing arguments to force everyone in the team to use it and then even to convince the other CEOs that we will buy all those licenses.


We also tried some other versioning tools like Perforce, TFS, SourceSafe and other crap for a short while, but they all were way worse than Vault or Subversion. Perforce is like working in an environment from 1995 and why the hell would I want to pay 900$ per user for that? TFS is also way too expensive and while integrated nicely into Visual Studio, no one really liked it in our team. And finally SourceSafe is completely useless crap. It was not hard to convince everyone that SourceSafe would not help us much. I don't want to reiterate arguments brought up many years ago, read it yourself: here, here and here.

 

TortoiseSVNAnd thats why we went back to Subversion since we know what the problems are, how we can circumvent them and live with it. But even then we still curse it every day. I just read this really fun to read page about someone that really hates Subversion too. I think I mentioned some other bad articles about subversion before. I think Subversion is ok if you just want to make a simple checkout from CodePlex, SourceForge, GoogleCode or similar sites. As long as you only have source code in there and you don't mind merging files all over the place, it can work for a while. There are also great plugins like TortoiseSVN for the Windows Explorer and VisualSVN and AnkhSVN for Visual Studio, which all are great, but it is still subversion and each of those tools has its own set of problems:

 

  • TortoiseSVN isn't integrated in Visual Studio, it is akwared to do your commits and updates in the Windows Explorer, there is always an extra work step and people don't checkin very often.
  • VisualSVN is not implemented as a MSSCI provider, so using it is similary akwarded. It also does not detect added/removed files properly. VisualSVN Server is however the best tool ever for Subversion!
  • AnkhSVN is a great tool and supports everything I want, it is integrated nicely into Visual Studio, it detects which project files have been added, moved or removed. But guess what, it is horribly slow. Once you got a few hundert files in your solution, you can forget about AnkhSVN, it is completely useless. This website with just 30MB of files checked in, it takes 10+ minutes to do a simple update or commit, which is very retarded (takes like 3-5 seconds in TortoiseSVN, which is already too long). You can do nothing while the modal dialog of AnkhSVN is open in Visual Studio. This is one of the things that you only figure out after really working with a tool, it might sound good on paper, but the problems later might kill any usefulness.


I started to use Subversion to for the development of this website in the last week, but a few days ago I had to stop, after importing about 800MB from my old blog and the old exDream.com website Subversion totally got on my nerves. I did not even checkin most files (only 30MB was content I wanted to change and backup). I was the only person checking files it, but I worked from 2 locations and even that was too much for subversion. Once I moved a file and did not check it in right away I was in real trouble. Now I just use my good old SyncBackSE to do backups and work directly on the webserver (which is even fast enough with my slow VPN). It worked out after all, but I probably would have saved time by not using Subversion at all, which is not a good argument for a versioning tool.


MecurialDon't get more wrong. I love working with a version control system, getting back old code, merging stuff from all developers together. I just think neither Subversion, nor TFS, SourceSafe, Vault, Perforce, Git, etc. is really were I want to be. For that reason we will be trying Mercurial this week and see how long we make it. Since Mecurial allows importing from Subversion we can continue working with the same repository as before. Since Visual Studio integration is the most important aspect, we gonna use the VisualHg addin, but also the TortoiseHg addin for Windows Explorer because it is so similar with TortoiseSVN, which we know very well. We gonna report back how it goes, hopefully we won't run into the exact same problems as with Git. My first early tests this weekend were pretty good, it seems to run well. Setup is a little hard first (configuring .hgignore for example, there is not much help, you gotta search a little), but since then it works like a charm (locally at least ^^).

 

 

 

 

Visual Studio 2010 Beta 2

Today Visual Studio 2010 Beta 2 came out on MSDN. A public version (of Express I guess) will come out on Wednesday, check Microsofts website for that or go to the Visual Studio 2010 site.

I just tried to open a VS2008 solution with about 20 projects and it worked right out of the box. The loadup seems to be a little bit slow, but everything after that was snappy so far. Will report tomorrow more details. For now I like it :)

Update 2009-10-20: After we worked we worked today with Visual Studio 2010 Beta 2 exclusively we were pretty happy at the office with it. Most plugins like TestDriven, AnkhSvn, VisualSvn, etc. worked fine, but there is still no support for CodeRush in VS2010. And since everyone in our team is using my CR_Commenter a lot plus the refactorings and helpers of CodeRush and Refactor, you really notice if those are missing. There is also sometimes some strange lag (especially at startup), but overall VS2010 Beta 2 runs pretty good. It is a lot better than Beta1 and there are even a lot of areas which are faster than in VS2008 (e.g. the Add References dialog is now lighting fast, Rico Mariani - the performance god - worked on this ^^). But for us it seems we are less productive with VS2010 because our plugins we need most, do not work yet. It seems we have to wait till March 2010, when VS2010 is coming out, then CodeRush 10 will be available too.

VS2010 gives us a big plus with its new features and improvements and I really like working on Websites, Databases and dynamic language features, plus there is also that Parallelism thing (hello Task Parallel Library) that is getting more and more important every day. But the missing CR_Commenter and CodeRush (and some other minor addins and CodeRush plugins) give us minus two points, resulting in an overall worse situation. That's why we will stick with VS2008 for now. I will personally work on both VS2008 (older projects) and VS2010 (new stuff), but our team decided that we will keep our engine in VS2008 for now as we can just write and test code faster this way right now. And once I got more people convinced how cool the new dynamic language features are, they will get hooked too. Maybe by doing some useful tool. I also want to dig into MEF (Managed Extensibility Framework) sometime soon and maybe rewrite my good old CR_Commenter with all the feature requests I collected in the last years (without CodeRush this time, it just takes too long IMO to wait for them to get VS2010 ready).

What to do if you hate Skype's stupid Copy+Paste as much as I do

I wanted to blog about many other things (we tried git again, fun of the gold-master stress from the last weeks, fun games like Prototype or League of Legends), but there wasn't much time and after working for 14 hours or more I did not have the energy to blog or think straight for that matter. Hopefully the next few months will be less stressful and leave more time for blogging fun :)

Anyway, let's get back to the issue: For a long time I hated Skype's chatting functions, but in the last few years most of my contacts have switched from ICQ, MSN, etc. to Skype, which made it the most important chat messenger for me nowadays. Skype is great for making calls, but chatting sucks so much, I can't even remember where to begin complaining. Messages are not delivered instantly, sometimes you have to wait for minutes even though both users are online. Even worse, if someone is NOT online the message will not be delivered until you both are online together again (which sometimes can be days and then the context is totally gone).

But most of all I hate copy+pasting. This is especially annoying since we use Skype for copying code or error messages around, group chat is pretty cool with all the programmers, but it would be better if we could actually use copy+paste in a more decent way.

Since I have been using Miranda IM for the last 7 or so years (mostly for ICQ, but also for some other protocols), the natural choice was to try out a Skype plugin for Miranda. This plugin has not be updated for over a year, but it still works, just not very well. Another problem I constantly have with Miranda is the disconnects, especially with the ICQ protocol. The KeepStatus plugin (and others) help a bit, but recently I have gotten more and more annoyed with Miranda just not working as it should (disconnects and stays disconnected). Also Miranda is a nice small program, but in the last 4 years I don't feel it has changed much, maybe it is time to try something new.

Since I am too lazy to search and evaluate all available Instant Messengers I just browsed my server setup files directory for messengers and found the good old Trillian, which I used last in 2002, when it was still in 0.73 beta (wow, 7 years ago). After installing Trillian 4.0 and using a lot of the protocols it already provides out of the box, I was pretty amazed to have all my ICQ, MSN, Google Talk, Skype, Trillian, Twitter, Email, IRC, etc. Accounts wired up together into one slick interface. Remember I only wanted to use Skype with better copy+pasting and I can do all that (the chat interface is nicely configurable and copying text is easy as pie as it should be, and Skype can still be used side by side), but Trillian can do so much more. Not bad, not bad. Will try it a little more the next days and hopefully still like it (don't want to change).

The interface of Trillian still looks a little restarted (I think thats why I stopped using it back in 2002), but at least it can be configured to be less shiny and more useful. After a while I hopefully get used to it. The Ads are also annoying. I think they are only in the free version, they are also not as annoying as in the official ICQ version, that is just monkey business to use and even for monkeys I would consider that animal cruelty. I also had to disable most notifications, the app was constantly blinking around, I want something less intrusive. But overall I am happy with it, maybe I will now even use the other protocols more often (but I don't think I will start twittering, still dislike all that boring chat).

Trying out Git and why distributed versioning is not really for game developers.

After watching the following video from Linus Torvalds about Git and testing several versioning tools this week again (see my previous post about all kinds of source versioning tools like TFS, VSS and SourceGear Vault), I decided to give Git a chance. A friend of mine is using Mercurial for his personal projects by utilizing VisualHg (Mercurial plugin for VS). Mercurial is very similar to Git (from my limited knowledge), both are distributed revision control systems, which means no central server and everyone has a peer-to-peer like repository. This this involves much more merges, branches and applying patches to many different repository versions, merging is much more important than in a centralized versioning tool.

The only reason I even watched the following presentation about Git (it does not really tell you much) is because Linus was bashing CVS, Subversion and many other versioning tools so hard. Some true points, but some people really disliked his style. I found it entertaining.



You can find more documentation and a second video with more technical details about Git on the Git Documentation website.

Well, all this Linux crap can be interesting from time to time, but as long as there is no Visual Studio integration, I'm not really ever going to use it anytime soon. However, there is a pretty successful GitExtensions project, which includes a very good integration to Windows, the Explorer and even Visual Studio 2005/2008. After installing this and trying it out for a while I kinda liked how nicely everything integrates into this tool-set. You got Putty or OpenSSH, KDiff3, all the command line support for playing around and you can even integrate all kinds of other merge tools from Subversion, Perforce or whatever you like better. Using GitExtensions is definitively easy and I can see why it would make sense in a highly distributed open source project, everyone can work on his own version and changes or fixes are around at different places. It can also be used for small teams, then everyone trusts each other and can merge all the changes whenever they want. Merging changes is pretty cool tool, there is no need to do it twice, once a programmer has merged something, it is merged for everyone else once he pulls the new version.

However, I will not be using Git for neither my personal projects nor at work. First of all I do mainly game development and while source files are important, there are many other file formats to consider and Git does not store them in any useful way. Because of the distributed model it is impossible to lock a file, which means any changes to any binary file can result in loss of work (or worse: more work since someone has to merge changes yourself by hand). I have read many discussions about this yesterday and some people are just retarded to not see the point. If you just put text files into Git, everything is fine, but once you have binary files that might change (why else would you even put them into a versioning tool), you can get into trouble. I'm not saying tools like Subversion are better, but at least they allow you to lock files, to announce to everyone in the team: "This file is mine now, please wait until I'm done changing it". With more than 3 people and with lots of un-merge-able binary files this is currently the only way this can work efficiently. Sure we could use two or three different kind of versioning tools (one for programmers, one for content, and even specialized ones for artists, which integrate into their tools, etc.), but what is the fun in that?

But that is not really the reason not to use Git for source code. Merging works pretty good for text files and since you can do a lot more merges and be much more efficient, it sounds really useful. Git even tracks if you remove code from one file and put it into another file, you can still see history of it, etc. The reason I really dislike Git and many many other versioning tools is simply: It is freaking annoying to use all the time. You may only waste 10-30 seconds for pulling, committing local changes, pushing them to somewhere else, selecting files that have changed, adding comments, doing a quick merge, etc. every time, but if you do that many times a day, a lot of time is used just for that. You don't believe me? Just watch the 5 video tutorials on the GitExtensions homepage, or check out the Git Documentation, its samples and video tutorials. It is not hard to use these tools, but it costs a lot of time constantly doing all this crap. I fully understand that this might be very necessary for huge projects like the Linux Kernel or useful and wanted for distributed open source projects, but that is not what I want to do all day and that is not what I want my employees doing.

I like if the source control system is completely hidden and ALL actions are done automatically by just working on the project!
- You open Visual Studio to start working? All files are updated automatically!
- You edit a file? The file is checked out to you automatically, others can still work on it, if it is a merge-able file, but they know that you are already sitting on it (maybe both of you are trying to do the same thing, check work tasks again). But even if both people are required to change a file, there is usually never a problem if you check-in often!
- You are done working? Just close Visual Studio and everything gets checked in automatically with a nice comment (required). Or just commit in the middle of the day as much as you want if you think your changes are important or needed right now.

Easy as that. We pretty much worked that way in the last project, except we used Subversion and we had HUGE amount of files (20+ GB just binary content). On some slower PCs it took 10+ Minutes just to get the latest files. Then we had to manually Update everything every morning just to start working. Committing happened when done working or when something important was finished. But many commits just fail in a big team because you have to update again since someone else changed something. Then there is the worst part: Merging. Sometime it works fine. "Luckily" we only had a few developers working on the same files so most changes could be merged, but from time to time there were really bad merging conflicts. Empty lines could not be merged, comments were slightly different (e.g. we had to disable automatic comment and header generation just because of constant conflicts of really unimportant stuff) and if you were really unlucky some changes were merged into a uncompilable mess. Even worse, sometimes you could compile it, but some game logic was now buggy or some config files were messed up. What I also hated about Subversion was the fact that I could never get a complete version of the repository at home, there was always some stupid checksum error, network corruption, https not working, etc. problem that prevented some 200MB file not being downloadable.

Again, it all depends on what you are working on. For example our artists had not much problems with Subversion except for the long update times, annoying cleanup and rare mess-ups that happened from time to time. But then again they never versioned their work data, they just checked in the final files to be used in the game. That alone eat up many 100 GB on the repository. I bet the Linux kernel team is happy with Git and many years ago when I was using VSS for myself I was also happy with it (not much can go wrong if you are by yourself ^^). For our next project I also don't want to have the whole repository of everything on my small SSD, e.g. subversion needs everything twice, git would even need more than that since every version is in the .git directory plus the actual working files, fine for text files, not fine for huge binary files. Only give me the stuff I really need for working, not sure how to do this for content yet, but I bet there is some crazy setting in Perforce to do it or we just write some tools ourselves that only get stuff that is required for execution (unit tests, editor, etc.).

Still had not really time to dig into any of the new tools I wrote about in the last weeks, but for now I will stay with SourceGear Vault and its painless integration to VS. It looks like our Artists disliked AlienBrain (mostly because of the fact that it does not even support the recent 3DS Max 2010 version for over 6 months now), for that reason they are currently evaluating Perforce, which is kinda hard to get used to at first, but it is fast for binary files and it integrates nicely into everything (Photoshop, 3DS Max, Maya, etc.) and we can also use it for our project management (OnTime) and hopefully integrate all that together with our build tool (whatever it might be, I'm currently liking Cruise Control). I don't think I like Perforce for us coders since the VS addin is very old school and might cause some pain. The server setup was also not easy at all, there are no admin tools on the server, you have try to use the stupid P4V program or even better the command line to fix up stuff. Currently we got a delay of 5s for all operations and we have no idea where it is coming from. Probably have to set it up again and try all kinds of settings to get it into a usable state. That is something I really liked about SourceGear Vault, installation took 2 minutes and everything was working out of the box. It might be a more simplistic tool, but that's what I'm looking for :)

Useful links:

Delta Engine Blog | All posts by kirsten
Delta Engine

Delta Engine Blog

All about multiplatform and game development

DeltaEngine-Artikel auf Computerwoche.de: "Esperanto für Entwickler"

 http://www.computerwoche.de/karriere/freiberufler/2368058/

 

ZombieHockey released for PC

ZombieHockey is a free version of our Zombie Party iPad-Game.
This is the first game using our Delta Engine.

 

You can download it now on:http://MobileBits.de/ZombieHockey/ZombieHockeySetup.exe
Note: You need a OpenGL 2.0 shader capable graphic card. .NET 4.0 is also required, but will be installed by the Setup if missing. We also finished the versions for iPad, iPhone, iPod, Windows Phone 7 and more, which will be coming out shortly (when they are approved in the respective AppStores).

 

Some screenshots from the Windows Phone 7 - Version: 

 

 

 

 

Designing Touch Interfaces

In the few decades of its existence, "Interaction Design" developed some rules and guidelines to achieve successfully results. Terms like Usability and Ergonomics are strongly associated, but beneath all logical reasoning emotionality may not be missed out to avoid users´s frustration. Literature about this phenomenon is available.

 

However, a fractional amount of this explicit dealing with touch screen based devices. Since mainstream exposure occured with Apple´s multi-touch technology, a rising number of developers are confronted with this subject. What are the rules for design effective touch interfaces?

 

This is presently being investigated. Following link relates to Kevin Arthur´s blog whichs central theme is the research on touch interface usability:

http://www.touchusability.com/

 

Given below a link directs to a theme-fitting article by Suzanne Ginsburg named "Iphone App Usability Heuristics":

http://www.iphoneuxreviews.com/?p=114

 

Punchcut, an interface design company located in San Francisco, released "5 Considerations when designing touch interfaces".

http://www.punchcut.com/index.php