BBQ@MIT

A few weeks ago, Adam Rubin invited Boston-area pre-frosh to a barbecue that the brothers of Kappa Sigma hosted.  I met a bunch of cool people, swapped random stories about school and life, etc.

Pictures:

Continue reading ‘BBQ@MIT’

KDE 4.1. ’nuff said.

When KDE 4.1 Beta 1 was released, I fired up an old VM running Arch Linux to test it out.  Using Tanis’s awesome repository, I downloaded and installed all of the KDE 4 stuff and had a blast testing it.  Even on a VM with a mere 160MiB of memory (and of course only software rendering support), I was astonished at how smoothly the interface operated, even when I selected multiple desktop effects.

Above all else, the KDE 4 user interface feels extraordinarily “complete” and unified; I have no trouble navigating multiple programs, even ones that I am unfamiliar with.  The goal of KDE was always to build a complete desktop environment solution, and the KDE team is reaching that goal every day.

Yesterday, I decided to switch from KDE 4.1 Beta 1 to the latest SVN builds (another repository by Tanis) in order to see how KDE has changed since the first beta.  For example, the new desktop widget illustrates a change in thinking about how desktop icons should be used.  Instead letting the user place individual icons around the desktop, the new widget forces all icons to be located within one area (it’s essentially like a Dolphin window).  Desktop icons are starting to go out of style (I got rid of mine a few months ago), and KDE 4 embraces this new paradigm.

Subtle, but effective animations can be found throughout the environment, in almost every application.  For example, in Dolphin (the file manager), the process of selecting and deselecting items is animated.  Also, the system animates the moving of panels.  In terms of eye candy, Vista’s non-window-manager-related effects and animations were much better than those of KDE 3 or Gnome (any effects of the window manager are immediately subordinate to those of Compiz Fusion).

Kontact has been updated quite a bit.  It’s faster, has more modules, and has a clean new look.  However, it’s still missing the ability to copy and paste events on the calendar (in fact, if you use cut on an event, it will do funny things).

I also played around with Amarok 2 alpha a bit, but I didn’t configure sound on the VM.

Here are a few screenshots that I took.  You can find the full set at:

http://jwcxz.com/pictures/kde4/?m=08-06

Installing new fonts

The new Kontact (connected to Heracles)

The Quick Brown Fox…

So, I didn’t participate in Firefox 3 Download Day because I wasn’t available for long enough to wait for Firefox to compile.  Oh well; 4,257,614 others from the US did, so I think I’m covered.

Here are my initial impressions.

Continue reading ‘The Quick Brown Fox…’

IMAP, SMTP, DNSE, BB, and other acronyms…

Gmail is currently offering about 6.8GiB of email storage space.  In a few days, I’ll have three times that amount.  :)

The IMAP server, a combination of courier, isync, and a wrapper script that I wrote, is ready for use.  I just need to populate my Maildir with the correct folders for my email accounts and I should be all set.  I still need to figure out how to retrieve the mail in the “All Mail” folder of Gmail instead of the inbox.  If worst comes to worst, I’ll do a 1:1 mapping with isync and transfer the retrieved mail manually; it’s only a one-time task.

The SMTP server is finally finished!  Well, more or less.  I threw in some quick error handling that logs all exceptions and a counter that prevents someone from NOOPing the server to death.  I still need a way to time the user’s session because this server is single-threaded; if something happens to my mail client and it never disconnects from the server, then the server will not try to close the server.

To host these services, my weapon of choice will probably be Debian etch, just because it is extremely stable and secure enough for my purposes.  I’ll host my service on a VM at MIT, and will write a script that backs up my mail regularly.

The inaugural email?  I sent my RSVP for DNSE 2008, which I’m ridiculously excited for.  What could be more fun than spending a week at various nuclear reactors?  :)

Oh, one more thing…  Looking at my summer project list, I can see that I forgot to mention the mail relay server for one thing, but more importantly, that I have almost completed one item…  A few weeks ago, I started to design a BlackBerry theme for my 8320, and have come close to finishing it.  It’s very simplistic, but I like it.  I’ll talk about that more once I take some screenshots and stuff.

SMTP Server Underway

As I had mentioned in my previous post, I planned to start with Lee Smithson’s SMTP server classes for Python, add authentication support, and finally design the relayer.

The first thing I did was to remove all of the generic stuff that made his work so powerful and versatile (sorry, Lee!).  The server I’m creating is so simple, there’s no need for OOP, so I got rid of all the classes and organized the entire script into a collection of functions.  When invoked, the script binds to port 25 (I’ll probably change that later on) and waits for a connection (it’s single-threaded).  When a client connects and sends EHLO, the server reports that is uses AUTH PLAIN (I’m too lazy to code support for AUTH LOGIN).  Next, the client sends AUTH PLAIN and the server responds with 334 (i.e. go ahead and enter your credentials).  Because there’s only one account, I’ll hardcode the base64 encoding of the username and password into the script.  After the client has been authenticated, s/he can now use MAIL, RCPT, and DATA to create the email.

So far, I have coded everything up through the authentication support.  I’m still missing the actual calls to send an email (there’s a big chunk of commented skeleton-code).  I have used portions of Smithson’s functions for processing commands and data with a few changes and additions.  It’s pretty easy to add support for commands now; I can simply stick another elif statement into the code.

:)

IMAP Component Finished

Using some homemade scripts, isync, and Courier-IMAP, I set up an IMAP server that pulls new mail from my email accounts and stores them on local servers.  I’m still deciding on whether to delete mail from the accounts once it has been synced (I think that eventually, I will do this, but only after I have backed all my mail up in a few places).

The structure is very simple.  A Python script is given an email account.  Using a configuration file, it determines which mailbox the account belongs to and calls isync to sync new messages to my local Maildir.  Then, depending on whether I pass the -k (keep) option, it deletes all mail in the remote inbox.  Currently, the system can only grab mail from the inbox; but, since folders are managed locally, that won’t be a problem.  The last step is to setup a cronjob that calls the script for each email account.

I’m still working on the other major component, the SMTP server.  Originally, I wanted to use existing implementations, but it seems as though nothing is capable of doing what I have in mind.  So, I will probably use Lee Smithson’s Python-based SMTP server as a base, add authentication support and error handling (I designed a very simple function for logging events already), and interface it with smtplib and ssmtplib, as I had experimented with before.

After that, it’s just a matter of building a secure server and I’ll be all set.  MIT’s student computing group, SIPB, provides a few VMs to students, so hopefully, that will work out well.

Simple SMTP Relayer Built

With the help of two third-party modules (one, two), I was able to build a really simple SMTP relay.  As a server, it listens for email from one of my email accounts.  Then, it determines which SMTP server to connect to based on the account (stored in an INI file) and sends the email.

The SMTP server module that I found doesn’t support ESMTP (and therefore doesn’t support SMTP-AUTH), so I’m going to have to modify it.  Also, there’s no error handling (the server just crashes if something goes wrong), so I need to implement a proper logging system.  I’m guessing that I’ll also need to write a script that continuously restarts the service when it dies.

Baby Steps… Python SMTP Relay Server

Step 1. Find a module that supports SMTP over SSL. Done.

>>> import ssmtplib as s
>>> c = s.SMTP_SSL('outgoing.mit.edu')
>>> c.login('###','###')
(235, '2.0.0 OK Authenticated')
>>> c.ehlo()
(250, 'outgoing.mit.edu Hello ##### [###], pleased to meet you
ENHANCEDSTATUSCODES
PIPELINING
8BITMIME
SIZE 41943040
ETRN
AUTH GSSAPI LOGIN
DELIVERBY
HELP’)
>>> c.sendmail(’###’, ‘###’, “From: ###\r\nTo: ###\r\n \\
Subject: Testing…\r\n\r\nBlah blah blah blah blah…”)
{}

Well, that’s only one SMTP server, but yeah. So far so good…

Summer Project List

I think that I should start making a list of tech projects that I need to work on over the summer.

Continue reading ‘Summer Project List’

One Step Closer…

So, I got the NBM from MIT yesterday (proof)!  I spent a few hours reading it this afternoon, trying to keep track of all the stuff that I have to do by the various deadlines.  I signed up for my MIT account, too (jwc@mit.edu was taken, so I just used my last name).

The last material that I need to review is the i3 DVD.  :)