Microsoft Academic Tour

Tomorrow, the 26th of November, Microsoft will visit my university to “inform” students about it’s “great” offerings in both software and technology.

Of course I’m not such a supporter of Microsoft’s track record. The company’s probably the most evil institution the software developing world has ever seen. I’ve always got my critique ready when another snob, conveniently placed on the Microsoft payroll, openly starts kissing his employer’s ass. But lo and behold: Microsoft has (indirectly) invited me, of all people, to a Q&A session “About Microsoft, with Microsoft”. Of course I humbly accept the invitation.

Because the session will only (surprisingly) last half an hour, I’ve limited my questionnaire barrage to two questions. Maybe some fellow free software developers will join me in this session.

  • Why does Microsoft continue to challenge European law, both by abusing it’s monopoly and starting endless appeals in court?
  • How does Microsoft think European software patents would encourage innovation, even now the U.S. system clearly shows it doesn’t?

I hope these will be enough to make my willing Microsoft victim, Ruud de Jonge, Director Developer and Platform Enthusiasm, want to develop NetBSD-only console games instead.

Update: according to Microsoft they won’t answer these questions, because it’s not within the scope of this tour. Too bad.

JBISC Progress

As some of you might know, I’m working on a new programming language.

It sure takes more research than I expected. I’ve already dug into lexical analyzers, compilers, virtual machines and that sort of stuff. It’s a huge amount of new information which I’ve overlooked at the start of this project over a year ago. The low level work that goes into making a programming language actually work is simply overwhelming. But it’s so much fun! It really requires you to take your logic to a next level altogether. Did you think nuclear physics is hard? Try writing a compiler!

With all of this new information stuffed in between my ears I’ve got to tone down my OOP stance even more. It’s still valid, but the everything’s an object idea isn’t that bad at all. It really simplifies both compilers and virtual machines. There’s no real overhead. I really like the idea of extending or inheriting from standard types. It makes the language so much more customizable.

As a part of my journey through the world of programming languages I’ve stumbled upon several really interesting concepts. One of these is aspect oriented programming. I’d heard of it before, but never really got into it. Try writing some Java using AspectJ or watch this Google tech talk if you want some more information about the subject. AOP’s actually very useful when used properly.

The other gem I’ve found is Ruby. What a great language. A lot of the radical ideas for my language are already there, fully functional. I’ve never thought anything of the language, especially when the Rails flood hit. Too bad I’ve ignored it, since it’s an excellent allround language. Ruby also implements closures the way I want them to be implemented, not the Java hack Groovy uses. It uses closures transparently and in a highly compatible way. I had all but abandoned hope for proper closures in a modern non-Lisp language. I think I might actually going to use Ruby as a Bash replacement for day to day programming tasks.

In the next year or so I’m planning to collect even more knowledge about compilers and virtual machines, learn some more languages and maybe have some time off every now and then. I’ve also replaced that horrid Drupal thing with a proper HTML website.

BitzKrieg Overnet Officially Launched

With the rise of internet anti-freedom legislation in lots of countries I might just visit, and the ongoing US lobbyist’s pressure to enforce similar laws here in Europe and the Netherlands, I’ve taken drastic steps to counter these threats. The MAFIAA can eat my 2048-bit AES encrypted shorts!

I’ve already been using SSL/TLS and SSH technologies to encrypt my email while it travels back and forth between the Wasda.nl mailservers and my personal machines. With access to enormous amounts of bandwidth, hardware and IP address space in the Wasda.nl network I’ve done something I’m not quite fond of. I broke a part of the internet to ensure my freedom. Instead of encrypting individual links and protocols, I’ve chosen to encrypt the whole lot by forcing all of my web traffic through OpenVPN-powered tunnels. Now I’m sure I can trust the security of my internet connection, wherever I may roam.

The next step is to securely acquire more trusted exit points. My current exit point is at TransIP’s DCG. It’s network is great but I’ve got to behave. I can’t use IRC nor P2P protocols. It’s not that much of a problem, since my home DSL provider still is relatively trustworthy. I’m looking for cheap places to colocate some cheap hardware to widen this overnet’s reach and possibilities. Some more (Debian) people have shown interest in BitzKrieg.net, which makes this whole endeavor maybe even financially feasible.

The setup of BitzKrieg’s overnet is quite simple, actually. With Debian’s outstanding OpenVPN integration secured internet connections are easy as can be. It uses the 172.16/12 address space and Linux routing to create something resembling a network. Fixed IP- and key sets are created for every single client, ranging from laptops to entire 10/8 and 192.168/16 subnets. 172.27.0/24 is reserved for the VPN itself. Members of this network have to know the CA, yours truly, personally in order to be able to connect.

New Rig

So it’s finished! Spot the penguin…

New “Rig”

What’s a geek without his box? My box made Linux go like “this is not a software problem”, so I thought it might be time to replace my hardware. Plus, I was running all of my stuff on a single 7.200RPM S-ATA disk, including my jbisc project files. No, I know what you’re thinking. I hate waiting for rsync at shutdown. Not that this box is old or slow, oh this X2 4400+ still packs quite a punch and 2GB of RAM ought to be enough for everyone (pun intended).

So I went out shopping. Normally I’m an AMD guy but this time Intel’s performance advantage couldn’t be ignored. I’ve got the following setup, I hope you like it as much as I do. The motherboard is an Asus P5Q Premium, with an Intel P45+ICH10R chipset. It’s got lot of nice stuff on board, like that live Linux image boot splash top thingy. Of course the standard stuff like software S-ATA RAID, 4x Gigabit LAN and some Realtek audio chip. This board should support an 1600MHz FSB and it gives me the tools to OC the hell out of the Intel CPU on top. Not that I’m into OC’ing anymore. You know, stability uber alles. Speaking of which, the CPU is an Intel Core2 Quad 9550 running at 2833MHz. They say it’s fast, but I haven’t tested it yet. To add some spice to the mix I’ve added two 2GB DDR2-1066 GEIL memory modules, with those nifty mini heat pipes and LEDs. The memory timings on these modules are quite OK at 5-5-5-15. A Club3d HD4870 OC is responsible for drawing nice pictures on my screen. This is my first ATI since a long time, I love their renewed F/LOSS commitment. To make sure I can get to my files fast without losing them I’ve added a Promise SuperTrak EX8650 SAS RAID controller. It should be connected to two Seagate Cheetah 15K.5 300GB SAS disks at RAID level 1, both spinning at 15.000RPM. This whole lot is powered by an Antec TruePower Quattro 1000W, which should keep it all from powering down while decoding my National Geographic alternatives. To keep this pile of PCBs together I’ve bought a Lian Li PC-V1000z, and like Borat would tell you, it’s niiice.

Earlier today the lot was delivered to my residence. This is the result. You might think “but dude, where’s the case?”. Some guy somewhere along the supply chain thought it was OK to remove the HDD and PSU brackets out of the Lian Li box. So now I’m stuck with a useless, but still gorgeous, case. Some of you, but not many, might say “but dude, where are the hard disks?”. Well, somehow Promise thought I needed multi-lane cables, while they damn well know nobody needs multi-lane cables. So I’ve ordered a couple of multi-to-single-lane cables to get those hard disks to work.

So today I’ve only PXE booted the thing into memtest86+, which is passed flawlessly. I can’t call this my new rig just yet, it’s not even close. I could call this my new boards ‘n cables, but that doesn’t sound tough enough.

New Server

As you might (or might not) have noticed, this blog is a little faster than it used to be. That’s because it has been moved to a new machine, called gescheurd. The old machine, grebbehout, has reached it’s expiration date. I’ve bought a brand new Sun Fire X2100 M2 packed with the whole shebang. You know, Opteron 1222, 4GB RAM, 300GB 15K SAS RAID 1, 4x Gigabit, 24/7 4h hardware support and so on. This is the fourth M2 in our network and it has two identical twins. This triplet is the new wasda.nl web front end. The other M2 is slightly slower but boasts a whopping terabyte of storage, so it’s used to store spam and some email.

Yep, that’s right. Web front end. The databases are now all stored on the database cluster. This 32-core monster is still able to fit all the databases in RAM with room to spare. Also, most of the databases have been migrated to InnoDB. I should have done this way sooner.

This server eats bandwidth from ViaViela’s rack and happily shares three full address ranges with the company’s internet backbone. The network is powered by 3com switches by the way. Great no-nonsense hardware, and in my opinion superior to Cisco or HP alternatives.

Obstacle Oriented Programming II

This is a response to my previous post about OOP, over a year ago.

As I’m developing my own programming language, I’ve read a lot of documentation about procedural, relational and object oriented programming. Because of this newly acquired knowledge I’ve got to tune down last year’s attack on OOP. Lots of arguments are still valid, though.

Object oriented programming, as I’ve stated last year, has it’s uses. It’s not the holy grail. Not even close. OOP only works well when structures within the software are static in the real world. Following many of the examples in OOP books for instance, inheritance is explained by a car analogy. Of course car parts don’t change their order of, or dependance upon each other. But in the real world this does happen quite a lot. It’s hard and sometimes even impossible to restructure your code to reflect real-world structural changes when using the OOP model. It often requires rewriting much of the OOP wrapping code.

My previous ranting crusade against all that was OOP was a little mislead. All the OOP code I’ve worked with was primarily PHP code. PHP doesn’t support OOP. It tries to, just like it tries everything else, but fails. Just like at everything else PHP tries. Most of the C++ code I’ve worked with has been developed by fellow students. Not that I want them to take the blame for my anti-OOP stance of yesteryear, but their code has contributed to the negativity. I won’t blame them, it’s the teachers who don’t understand a single OOP concept. They only know how the language works grammatically but fail to translate the grammar to real world problems. So students just end up recreating all the stupid examples in their software the teachers conjured up.

The worst thing is, these students end up writing code in big code generating companies like Logica or Atos Origin. The cubicle philosophy is worshipped like burgers at Mc Donald’s. At these companies the code is just a byproduct. It’s the entire package they’re interested in. The V-model is followed by the letter and engineers are happy they can go home to their normal life, wife and kids at 5pm. This byproduct of theirs is sent into space, embedded into medical devices or used at your bank. Most of the IT flaws seen today can be blamed upon nobody telling these people how to write proper OOP, let alone proper code.

I know what you must be thinking. What the f*ck made this guy change his mind? Qt. If you want to know how a proper C++ OOP model looks like, look no further. Qt makes programs less complicated, it just does everything right. Alright, some aspects (like the dreadful Qt4 CSS) need some polishing, but overall Qt is a prime example. It’s documented properly, has a sane object structure and actually makes sense.

I don’t like languages that make everything behave like an object. It’s not easier for the developer, it introduces unnecessary overhead and often makes the program overly complicated when writing binary handling software like, say, file or socket streams. A file handle is an object, but fully privatised. Just remember what you’re abstracting. I also still hate database object mapping. For example Ruby on Rails rapes the database that way. Why would you need to convert table data to a language specific storage format just to convert it again to database objects? It takes at least twice the amount of data processing and, depending on your language of choice, sometimes twice as much memory. There’s no real good way to really tune your software for a certain DBMS. Database abstraction is evil, just learn proper SQL and procedural data type abstraction.

Finally I’d like to address the OOP in PHP topic. Of course you can write OOP using PHP. You’ve got two choices, really. You can use PHP objects and risk to stumble upon one of the many pitfalls it brings to the table. Or do it the Linux way. Much of the Linux kernel, and especially the API, has many OOP features but doesn’t use real objects. Of course these handles behave like objects, and in essence they are, but they’re implemented using C. You can use this technique to your advantage when designing PHP software. Use array-based handles and use the global scope in a civilised manner.

A-Team Cluster Arriving Soon

With some help from the DRBD and Heartbeat communities I hope to get our new cluster up and running within a week. With this new cluster, creatively named “The A-team”, the Wasda.nl fleet gets some serious oumpf. To give you an idea, here are some rough specs. Exact specs will follow when the cluster’s fully up and running.

  • SunFire x86 machines
  • 2-2 mirrored fail-over setup
  • 36 64-bit processor cores
  • 80GB of RAM
  • 2.3TB of redundant storage
  • Full gigabit backbone

According to my first measurements this cluster outperforms our current setup by 240%. When we look at processing power alone the A-team outperforms it by a whopping 1530%. Plus, our uptime guarantee will match that of our hosting provider now. Last year they had 100% uptime, while we only managed to get an uptime of roughly 97%. Server upgrades won’t mean downtime anymore, we can now update nodes safely without compromising the hosted services for any longer than 15 seconds. If this cluster can keep running and we have our weekly updates as usual, we can achieve a five-9 uptime guarantee.

A word of thanks goes out to ViaViela, the company this cluster is being built for, for supporting this great project. A list of all the people and companies will follow in this post’s follow up.

Why we Need a New Cluster

vielapeople:/home/jorrizza# uptime
 11:01:09 up 49 days, 23:49,  1 user,  load average: 183.19, 143.92, 87.82
vielapeople:/home/jorrizza#

New Data Center

This weekend we’ve moved all of our Sun machines over to our new data center provider, NXS. We’ve moved from Redbus Interhouse to the brand new DCG, which is quite an improvement. I’m glad TransIP has made the decision not to stay at Redbus. Not that Redbus was bad, but DCG is just a bit more modern and secure. It can also handle a lot more servers than Redbus. There have also been some major problems at Redbus lately concerning their flaky power supply. We’ve exploited the downtime to update the servers to the latest Linux kernel. We hope to get the same level of stability from this kernel as the 2.6.18-cks1 we’ve used before.

I’m sure you guys want some specs and pictures of our new home, so here they are. Geek pr0n, if you wish.

Data Center:

  • Building: 1200m2 at 750kg/m2
  • Floor: Raised 0.4m
  • Racks: 1.2m deep 46u Minkels
  • Power supply: 2 MVA redundant via ring
  • Transformers: 2×1000KVA
  • Power distribution: 230V AC, optional dual independent (2N) circuits
  • Power: Average of 16A per rack, with a maximum of 32A per rack
  • UPS: 2 x 600 KVA static UPS (upgradeable)
  • Diesel Gensets: 2 x 1400 KVA diesel gensets
  • Generator Supply: 48 hours onsite diesel with 24 hours refill
  • Air Conditioning: ACU’s for data rooms. Free cooling concept
  • Capacity: Average of 3.7kw/rack, maximum of 8kw/rack
  • Chilled water generation: DX Cooling, 2N pumps, N+1 ACU’s
  • Heat disposal: N+1 redundant dry chillers on roof
  • Temperature: 22°c in cooling corridor
  • Relative Humidity: 50%
  • Rack Cooling: Cooling corridors
  • High density: Up to 8 kW
  • Fire Prevention: VESDA, Automatic Aron gas system
  • Security: 24/7/365 on-site. Biometrics at all doors

Network:

  • Routing: Redundant Juniper MX-960 routers
  • Switching: Foundry FastIron SX 1600 switches
  • Network: AS20857 (TransIP)
  • Peering:
    • AMS-IX (10Gb/s)
    • Open Peering (10Gb/s)
    • AboveNet (2×1Gb/s)
    • Cogent (2×1Gb/s)
    • FLAG (1Gb/s)
  • Edge Capacity: 960Gb/s

Wasda.nl Fleet - Amsterdam

  • Edge Capacity: 400Mb/s
  • Hardware: Sun Fire x64
  • Machines: x2100, x2100 M2, x4100
  • Effective Storage Capacity: 2.4TB
  • Effective CPU Capacity: 29298 bogomips
  • OS: Debian GNU/Linux
  • Backup: Active redundant off site rsync

There you go, now go clean up the mess you’ve made.