Here’s a good article that explains how well the Visual Studio 2005 compiler can optimize .net managed C++ code. To me, it’s just further argument that “unmanaged” (“native”) (read: portable, non-MS-proprietary) C++ code is far superior. Is there anything in the .net API that is really really necessary that would be more difficult in straight C++? MS is committed to
making an effort to ensure that there is, so you go with their proprietary solutions. But I will always make an effort to code everything I can in portable clean C++, and link to .net managed C++ only when necessary.

And to follow up, here’s an article from Paul DiLascia, who’s been kicking a$$ with his C++ Q&A articles for decades, explaining how to link in .net code with unmanaged C++ code, on a MODULE-BY-MODULE basis! Excellent.

Update: There’s no stopping him, in his next article he shows how to “wrap (.net) Framework classes in a native way so you can use them in any C++/MFC app without /clr”.

From CVS checkin comment:

“HTDJ is now VS 7 compatible. This means we start using the VS 7 ( VS .net 2003 ) compiler from now on – I do NOT want to have to deal with keeping it compatible with VC 6. Boost here we come!”

HangTheDJ stable build April 16, 2004 (old!)
HangTheDJ development build Feb 22, 2005

It’s been a while since I’ve added any info about HangTheDJ. It’s been going through a revamp where I’m making user-resizable components out of most of the elements of the GUI. The menu, controls and toolbars are all now hosted in a resizable rebar, ala IE’s toolbar, where you can have multiple resizable toolbars on each row:





Also, the other major components are contained in dockable dialog bars:





There are still a lot of kinks to work out with this rework. Just so you know… 😛 Should have a downloadable version soon…

I am no longer a total Cyrus IMAP newbie. Cyrus IMAP newbies don’t run and administer Cyrus IMAP servers, at least not for long.

That said, I’ve lost a lot of email along the way. This stuff hasn’t been easy or straightforward. That’s mainly due to linux’s modular architecture, which is the only way to go, but it’s a mixed blessing. By the time you really figure out something like Cyrus, you’ll likely have learned a lot about linux’s authentication (PAM), your mail transport agent (MTA – it actually listens for mail and hands it off to Cyrus), other available MTA’s (sendmail, exim, qmail… why are there so many?), PHP and Mysql configuration, and so on.

So I’m not going to try to explain what it takes to get it all working. The main doc that makes that attempt is here. Use it as a reference – it’s extremely unlikely you’ll be able to actually go through the outlined steps directly. I definitely recommend trying to find a pre-built package for your distro.

I just wanted to document the steps that are needed with postfix and cyrus to get multiple virtual domains handled on one installation. There are two files that need tweaking, /etc/postfix/main.cf, and /etc/imapd.conf.

To do…

One apache installation can easily host multiple domains using a couple different VirtualHost directives. Basically, a standard HTTP request includes the requested domain name, and Apache uses that to determine which pages to serve up.

From what I understand, SSL-encrypted sites are a wee bit trickier, because HTTPS requests are encrypted and the requested domain name isn’t available. So all you have to go by is the IP address…. and the port. So that’s the trick – you have to use a different port for each SSL-encrypted domain name you want to support.

Steps to make Apache listen for SSL requests for different domains on 443 and 8080:

  • Add “Listen 443” and “Listen 8080” directives at the top of your apache configuration.
  • Add a “VirtualHost myfirstsite.com:443” block for the first site, and a “VirtualHost mysecondsite.com:8080” for the second.
  • Make sure your firewall allows incoming traffic on both ports.

    See? Easy. :> And since your website will typically redirect traffic to SSL pages (as opposed to expecting users to type them in), hopefully using a non-default port won’t be a problem.