Blogging, I’ve missed you so.

It’s been a long time since I’ve updated this site. I have done so much in the last year that I have told myself that I need to just sit down and crank out information about it. That’s great in theory, but the amount of time I would need to have spent writing about things that have already happened keep me from making progress on my current projects.

Therefore, this will not be the all inclusive post with tons of details, pictures, and step by step instructions on how to recreate my projects that I wanted it to be. Instead it will be a short recap with some minimal information. If you really want to know more about a project, let me know what you are looking for and I can probably oblige specific requests.

Anyways, I get calls fairly often from potential employers who ask me if I’m free for work since my latest blog post is from my last day as an intern during the summer of 2010. I guess I was unaware how often my blog was read for information about my current status in life. To all of you who may be possible employers… *wave*.

Since my internship was over, I have revisted a lot of old interests and projects, and played with new things I couldn’t have imagined getting the opportunity to play with.

Firstly, I was a TA at the University of Washington for the web programming class. Pretty straight forward, we taught the whole stack from mysql backend, php, css, and javascript frontend. I led quiz sections, graded homework, office hours, etc. The regular shindig. I love web programming so much, so passing this knowledge on was an awesome experience.

I’ve also been revisiting my computer controlled light tubes project. The first version is quite large and clunky, the wires are massive and inflexible and it’s time for it to be expanded. I learned a lot from making the initial version, I had never really worked with hardware before and did everything from the soldering to the firmware and highlevel c# controller. My new version will be 1 printed circuit board, slightly larger than a credit card’s dimensions (excluding the height obviously) instead of 4 hand soldered boards. I’m designing the schematic and am planning to send those out for manufacturing. It’s a big undertaking and is something I’ve never done before.

I’ve also been working on building new letters for the outside of my Fraternity’s chapter at the University of Washington. Our current letters are brass and blend in with the side of our building and are almost invisible at night. Some houses have purchased back lit letters for their house. These turn on at night and turn off in the morning and are backlit in white. I decided to take the whole concept one step farther and to do something I have never seen someone do before. I made new letters for our house (didn’t buy them or hire someone to cut them), and attached an rgb led strip to the back. I made a custom controller that turns on and off the led strip to a solid color at night and in the morning just like all the others. However, you can plug a computer into it and run animations to your heart’s content. If you unplug the computer, the solid color that turns on at night will be the last color the computer set them to.

I laser cut the letters from acrylic, painted them with silver automobile paint and a clear coat, drilled and tapped holes to attach studs, wired up the led strips, and made the circuit controller. To give you a sense of size, the outside oval of the Theta is 18 inches across and the studs holding up the letters are 4 inches long.

And during all this, I have also been working at Microsoft full time since January. I’m working on an amazing project called Mayhem that has the potential to revolutionize what normal people (non developers) can use their computer for. I have so much more to say about that, and I’m able to as well! The entire project is public and open source, so stand by for more information. :)

As I said, I don’t have time to go as depth in all these projects as I would like to, but I have taken this opportunity to at least provide some summary of what I’m working on. Hopefully I’ll approach writing articles in more managable chunks and can actually keep this up. I feel like I always say that. Hmm.

Last day as a Microsoft intern

Today is my last day as an intern on Microsoft’s ASP.NET dev team. I would like to share my experiences and talk a little about what I spent my summer working on. First and foremost, Microsoft’s internship program is amazing; they really know how to give college students a fun summer while working hard at the same time. Microsoft organized big and small internship events, from a free showing of Kooza with all of the interns where we received Zune HDs, to Puzzle Day to seeing Scott Pilgrim vs. The World with my small social group. There were so many events put on for us that were so epic I could spend multiple posts talking about (and I should have throughout my internship).

The internship wasn’t just fun and games though, Microsoft interns are recruited for their technical knowledge and their ability to problem solve. We were given real projects on real product teams and given the opportunity to work on a feature (or features) over the course of our internship. I was a developer on the ASP.NET Razor Syntax team.

I didn’t go through the normal college hiring process to get on this team. I had been a regular to the Seattle PHP Meetup, and the group was invited to come to Microsoft for a software design review hosted by the ASP.NET team. I came for the SDR and after some signing of NDAs we were told what they were working on. The team was developing a way to get new web developers to adopt the Microsoft web stack. This has always been an issue for Microsoft, and part of why PHP has such a large following.

Using PHP, you can simply create a file, upload it to your host, and navigate to the file. Using ASP.NET, you had to create a new project in visual studio, add that file, set up your publishing settings and publish to get the same results. Microsoft is making a push to make it easier to ramp up developers using the web stack. To do this they have introduced a new set of technologies that make it just as easy (if not easier) to have the same kind of “hacker” mindset PHP allows, but using ASP.NET.

This all starts with a new slim, fast, and easy to use IDE called WebMatrix. WebMatrix lets you easily create web sites, write code, manage databases, and upload to web hosts. WebMatrix has a web server built in, the new IIS Express. This allows you to be developing a site and click run in WebMatrix. It will start up IIS and run the page you have selected in WebMatrix. As a PHP developer, that is pretty awesome already. Normally I would have to install WAMP (I use Zend Server CE) and make sure everything is set up correctly. Also, WAMP normally stays running through the life cycle of your computer, IIS Express only starts up when you run your site, and shuts down when you are done. Pretty handy.

All this is good and dandy, but none of it gets me as excited as the Razor View Engine that was introduced as well. This is what got me the most interested at the SDR, and ended up being the team I have been working with this summer.

At its core, the Razor View Engine is designed to make it easier to build feature rich websites with less code. This is partly done through the awesome parser that Andrew Nurse, one of the developers on the team wrote. One of the easiest changes to accept is the way that you specify code inside of html. Take the following example as it is shown in 3 different ways:

PHP (excuse the short tags):

<ul id="products">
    <?php foreach($products as $p) { ?>
        <li><?= $p->Name?> ($<?= $p->Price)</li>
    <?php } ?>
</ul>

ASPX:

<ul id="products">
    <% foreach(var p in products) { %>
        <li><%=p.Name%> ($<%=p.Price%>)</li>
    <% } %>
</ul>

Razor:

<ul id="products">
    @foreach(var p in products) {
        <li>@p.Name ($@p.Price)</li>
    }
</ul>

As I tell people who look at me funny after seeing this example is that “it just works”. Embrace it. This change makes it so much easier to write simple pages with embedded statements. This is only one type of thing that Razor enables, it also provides a version of the two step view pattern. Razor has support for some awesome initialization pages and easy to use helpers. My favorite helper is the membership helper. There is so much juicy functionality in Razor that I can only point you to the ASP.NET Razor Syntax tutorial. Read it and be amazed.

Anyways, this summer I worked on a bunch of projects inside of Razor that gave me a pretty well rounded experience. I can’t provide detail into what I have been working on, although when the next public release of the web stack comes out, I will have a lot to share.

What I can say is that I wrote a sample application that will ship with WebMatrix that shows off some of the sweet functionality of the Razor syntax. I also worked on some new helpers that came from complicated yet common scenarios in the PHP world and was able to make it really easy for Razor developers to use.

I also spent a lot of time working with the Membership helper. This is the coolest thing I worked on while at Microsoft, but I can’t talk about it at all because the part that I worked on is entirely new to ASP.NET and has not been released yet. I’m most excited to be able to have a write up of that once the next Razor release comes out. Stay tuned!

I worked hard this summer on my projects (had a lot of fun doing them too) and was rewarded with some pretty sweet swag at the same time. From what I understand, HR has a budget for intern gifts each year. Each division also can give gifts to their interns. I was a member of the server and tools division , apparently that was the place to be this summer. It seemed like there were not very many interns over in STB (in comparison with places like Xbox and WindoDevDiv Netbookws Phone 7) which meant they had a much higher budget per intern.

Leaving Microsoft this summer I am weighed down with some awesome swag. Things that all Microsoft interns received this summer: Zune HD , Windows Phone 7s , a 2010 intern t-shirt (of course), and a messenger bag. Server and tools / dev div gave us crazy amounts of stuff as well. We got a pretty cool (pun intended) mini fridge that can plug into the wall or the car and is able to heat or cool. We also got a free 3 month Zune pass to go along with our Zune, a netbook, and an even nicer messenger bag. I got a bunch of t-shirts, and I’m sure there are other things that I am forgetting.

All in all, this has been an amazing summer and a fantastic internship. I would highly recommend applying to Microsoft for an internship, it might be the best decision you could make.

Moving to WordPress

I’ve decided to move from my own custom portfolio and blog backend, to the common word press software. I am hoping that now that it is easier to manage content / comments I may in fact post up some more information about my personal projects and experiences that I have had.

I have tried copying over the posts from my old system, but ended up entering them in the opposite order. I haven’t decided whether to go and fiddle with the database to get them the way I want them, but I may.

*Edit*, It looks like wordpress allows me to modify the published timestamps without modifying the databases. I have now set the posts to have the original date stamps so they are in the right order.

Very cool, WordPress. I may have underestimated you yet.

The Downfall of a Catchall Email

I’ve been using a catchall email address for a while now. This is an email that you attach to a domain name so that you can receive any email sent to the domain. For example, say I set up a catchall email address on the domain www.email.com. That would mean that emails sent to eli@email.com, php@email.com, dudeprogramminglolz@email.com would all go to the same inbox. I have found this to be very handy because I can give different emails to everyone without additional work on my part, and know who they are just from the email they sent the message to.

Why is this important you ask? Why can’t I just read the message and figure it out? Lets say you register on Site A with Email A. You then receive a message from Site B from Email A. What you can then infer is that Site B received or gained your email address from Site A. If spam continues from that email address, instead of just having to make a new email altogether, you can simply block incoming messages on that email address. I have found this to be much more helpful than I originally thought.

The problem I have stumbled upon however is that once I receive all of my emails from my catchall email address in my Thunderbird inbox, if I try to reply to an email, it then sends a response email from a different email address than the one I received it on. That means that if I reply to an email I received from haxorz@bbq.com, it might be sent on ihrtspiders@hotmail.com instead of haxorz@bbq.com. After being unable to find a solution to this problem I have decided to make a simple web mail client. The required change for this problem is to simply modify a mail header when you send an email.