Tuesday, November 13, 2012

My Foray: Developing Ruby on Rails, CoffeeScript, Mongo, ElasticSearch on a Mac

The one thing I really like about where I'm at now is the diversity of projects I've been able to work on in the last 8 months. My current project is a welcome divergence that has rekindled my admiration for the command line.

In the past 2 weeks I've had to come up to speed with not only developing on a Mac (a very nice 13" MacBook Pro w/ Retina display), but also developing the backend API using Ruby on Rails (v3), the client side using CoffeeScript and ElasticSearch for the indexing (Mongo is becoming less of a requirement for us).

Luckily package managers like HomeBrew and RVM have made environment setup easy [enough], Git is ... well Git, and WebStorm + Sublime Text 2 are the IDEs of the day. It all works just fine, but I can't get over the feeling there is just too much "magic" and hand holding, specifically in CoffeeScript, but also in RoR.

... more to come later ...

Friday, August 10, 2012

Ooohhh, so that's RESTful ...

Slacker == this guy
Looks like I'm as guilty as many of my fellow developers about being lazy and not truly understanding what constitutes a true RESTful service. In this blog post, it's summed up quite nicely. The big "ah-ha" moment for me (much like the author of the blog post) was about hypermedia and how the return data was used as self-describing / revealing for getting more from the API.

I'm internalizing this and what it means for my future projects. Probably not a good idea to continue to puke back a JSON / XML representation of a server model at the end of a GET endpoint and call it a RESTful service, even if the client can DELETE...

Thursday, August 9, 2012

Node.js Foray

In the beginning ...
I've made my career based on Microsoft web based technologies (VB6  + ASP 3 ... ok you're right, not the best way to intro ;), Windows Forms, ASP.NET Web Forms, SharePoint, BizTalk ... yeah, again, I know), and I've always leveraged JavaScript to fill the void on the UI side of the equation. I started with the now classic:
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
combined with hand rolled XML schema's to lighten context changes (async save operations for instance), but I always felt it was a bit of a hack and/or brittle.

Then there was light ...
I made the switch to ASP.NET once they introduced MasterPages in 2.0 (I tried ASP.NET 1.1, but wasn't sold on it at the time), and it was clear that the future was before me, but, the JavaScript story was even worse in some regards than it was in the classic ASP story (Web Pages 2.0 anyone?). Microsoft realized this and introduced what was, at the time, a pretty good stop gap called the AjaxControlToolkit, which is still ongoing, but it still was a bit more cumbersome than it should have been and didn't pass the "sniff test" in my mind.

and on the seventh day ...
Fast forward to where I am today where I am architecting (apparently not a verb), developing, deploying and supporting a full JavaScript Model-View-* client-side application and subsequent script widget (based on Knockout for the admin, Underscore for the widget) and I can honestly say, this is the most fun I've had developing web applications in a long, long time.

... and it came to pass
The more I've been working with these libraries / frameworks on the client-side (see Steve Sanderson 's terrific post about this apparent debate), the more I've realized I've been missing out on the Node.js + MongoDB server-side experience. It was time to fix this as I've always personally dabbled in alternate technologies (PHP, JAVA, Perl) that never translated to my professional career, but were none-the-less interesting.

Node.js + MongoDB on Windows
The first thing I wanted to know was if Node and Mongo was even supported on Windows, or if I'd need to run a VM of Linux. The good news is that, yes, they are both supported, and in fact, Microsoft of all companies, has the Node part wrapped up nicely. Using Microsoft Web Platform Installer (WebPI) + WebMatrix took out much of the guess work on getting a Node instance stood up, and even includes the popular Express MVC framework. Being one to want to look behind the curtain, I instead used the Git repositories instead, and ran them from the command line, but it didn't buy me much.

On a side note, I did end up spooling up an Ubuntu instance ... more on that in another post (it still isn't something I'd suggest to a non-technical person).

After installing WebMatrix and IIS for Node.js using WebPI, I was ready to start creating.
I chose the empty template and used npm to install Express and the Mongo driver without issue. I'm very early on in my investigation, but I have to say, the ease to stand-up a JSONP and Socket.IO server is so simple, it's making me wonder where the pitfalls are ... I'm really digging JS on the server and JS MV* on the client for the next generation of applications.


Wednesday, October 27, 2010

DDD IoC Moq MVC ... Time to catch up

After I joined HP, I hadn't realistically had the time to keep up with the changes to the .NET platform in regards to frameworks, design patterns, etc. I'm between development cycles right now (going to be doing a custom SharePoint 2010 project that I'm looking forward to), so I figured this was the best time to get back up to speed. My current interest is in learning more about Domain Driven Design (DDD), the Repository Pattern, Inversion of Control (IoC), Microsoft ASP.NET MVC2, Microsoft Unity2, Microsoft Entity Framework 4 (EF4) and Moq. Just some quick links for myself ... Just some quick code for myself ...

    [TestClass]
public class ContactTest
{
#region Private Variables
private Mock<icontactrepository> mockRepository;
private IContactService service;
#endregion

#region Test Initializations
[TestInitialize]
public void Initialize()
{
this.mockRepository = new Mock<icontactrepository>();
this.service = new ContactService(this.mockRepository.Object);
}
#endregion

[TestMethod]
public void UserCanGetListOfContacts()
{
// Arrange
Contact mockContact = new Contact() { ID = 1, LastUpdated = DateTime.Now, LastUpdatedBy = "Brandon", Name = "Brandon Lind", Ranking = 1 };
this.mockRepository.Setup(m =&gt; m.GetAll()).Returns(new List<contact>() { mockContact });

// Act
var result = service.GetAll();

// Assert
Assert.IsInstanceOfType(result, typeof(ICollection<contact>));
}
}

Friday, February 13, 2009

Just an update

Just wanted to post (in case anyone cared), that I have found employment with HP as a Senior Software Developer.

Monday, December 15, 2008

My golden parachute had a hole in it

Unfortunately, I've become (or more correctly, will become) a statistic at the end of December as my 9 year tenure with UBS / Salvagno Partners fell a year short. I'm not surprised given the state of the economy and more specifically, the state of the financial sector. That said, I'm confident I'll be able to find new employment given my experience. My only concern is that potential employers will see that I've only had one job and somehow making the assumption that I don't have enough experience.

I can't discount that in today's technology job market mindset, but I believe I have a lot more to offer than someone who has bounced from job to job, being told how to do their job. My experiences include meeting clients face-to-face, analyzing what they were truly asking for, designing an application to fit those needs, developing that application and then deploying it (and supporting it). Talk about the full software development lifecycle. Not only were those some of my roles, but I was also only able to work with limited resources (mostly interns), so I had to manage these projects with assets that were constantly coming and going.

What are your thoughts? Do I have a valid argument about my experience? How would you respond to an interview if you were asked about your experience (level) due to having a single employer for 9 years?

If any potential employers are reading this, my resume and some examples of my work can be found here.

- Brandon

Monday, April 21, 2008

Templated User Controls

I just wanted to get this down while it's still fresh in my mind, and hopefully it will help someone else out if they run into the same problem ... Ok, so I created a template user control (called "SidePanelContainer") with the only intention for it to be a formatting thing (basically a bunch of nested divs to create a border, a title and whether to show a close button). Inside the template can go other user controls, web controls, etc. In this instance, I was adding another user control into this templated user control. So it looked something like this in the aspx page ...



<uc1 : sidepanel id='Sidepanel1' runat='server' headertext='HEADER TEXT'>
<sidepaneltemplate>
<uc2>MY DATA USER CONTROL</uc2>
</sidepaneltemplate>
</uc1 : sidepanel>


Upon postback, I was losing the information in the child user control (uc2). To make a lot of code short, I had a Page_Load method in my SidePanelContainer user control that called the DataBind() method. Looking back, that was unnecessary, and it was the source of frustration since my internal user control would rebind each time. I don't know if this will effect actual databound controls, but that's for another day.