nerdinacan.com

  • Services
  • Recent Work
  • Process
  • Mumbo Jumbo
  • Frequently Asked Questions
  • Infrequently Asked Questions
  • Contact
  • LinkedIn Profile
  • Settings

    Settings

    Snark

    The snark setting regulates the textual content of this site. You can lower it for a more sanitized viewing experience, or increase it for a more accurate, but less comfortable portrayal of the world.

    Oblivious

    It is not immediately obvious that you possess free will. Perhaps you are a staffing recruiter checking keywords off a slip of paper that a development team gave you. You need to match a series of technical keywords you don't understand with a programmer's resume, so the content of this site must be as straightforward as possible.

    You probably dream in bullet-points.

    Confrontationally Impaired

    You are smart enough to recognize the patterns around you, but are not ready to take the responsibility of being the bearer of bad news. Perhaps you have kids, and need that regular paycheck. For whatever reason, you still need to pretend that the ugly half of reality doesn't exist, even though you know better.

    Pragmatist

    You work in an imperfect world and are attempting to make the best of the situation. You feel like honesty should help you get your job done more quickly, and are willing to take the risk that the honesty may not always be the most comfortable thing to digest. You will bite the bullet and do the right thing when your back is against the wall, and you have probably paid the price for doing so in the past.

    Caveman

    Make good internets.

    My words do not scare you because you have no intention of trying to understand the things I am saying. Perhaps you are a lower-life form, like a Republican. You are usually an honest person, but that's mostly because you don't know what you're talking about.

    Commando

    You will not be offended by frank observations of common workday phenomena, even if you yourself are a part of those observations. Facts are facts, and human opinion means very little to the machines that will one day rule over us in the post-apocalyptic wasteland that is assuredly at hand.

    You watch "Glengarry Glen Ross" for the warm fuzzy feel-good moments.

    I am a web nerd.

    And this is my brochure-ware.

    I design and build a variety of amazing web applications using a rigorous systematic method that will challenge you to explore the implications and consequences of your own ideas. When you work with me, you will have more transparent and honest relationship with your product than you do with your own family.

    My code has no problem telling you when your ass looks fat in those jeans. It will not borrow the car and then secretly drive to Tijuana.

    Services

    Development

    My preferred programming platform is LAMP (Linux, Apache, MySql, PhP). LAMP is free, powerful, and well documented. Regrettably, I also have experience in a variety of now-embarrassing languages such as ColdFusion, JSP, PERL and classic ASP.

    If it runs on a web server, I have likely used it at least once.

    I prefer working within MVC frameworks. My current favorites are Zend Framework (for open-source environments), and ASP.NET MVC (for the corporate lackeys). You can get the entire laundry list of current technologies here.

    I have several existing and configurable solutions for standard e-commerce and common administrative web applications. I know you think your project is unique, but at its most fundamental level, it's probably not as unique as you imagine. This is great for you since it means we rarely have to start from scratch.

    Design

    Recently, I've returned to design work. Not long ago, I was privy to watching a design train-wreck from the position of "developer" where I had no absolutely say in the matter. It was absolutely agonizing, so now I feel the need to design again.

    I consider design to be an act of visual engineering. Like any engineering problem there are constraints. Design is not necessarily about making a pretty picture. I like making an application attractive. Who doesn't? But being a good designer is about being able to throw away your favorite "pretty part" in order to achieve the job objectives.

    A lot of good designers already realize this. The real challenge is explaining this to a client who fancies himself a creative type. Do not let amateurs design, even if those same amateurs are paying the bill.

    Consultation

    Have an idea but don't know where to start? I can help you flesh-out your ideas and generate a solid functional specification so you can shop around for a developer. Without a solid technical specification, it's hard to avoid comparing apples and oranges when different development shops bid on your project.

    I also perform experimental research and feasibility studies. Not sure if your idea will work in practice? Let me bang on it for a while and I'll see if I can deliver you an answer.

    The Crucible... uh, I mean Consultation

    Before I even touch a keyboard, I will take your idea and drive home the logical consequences of your requests in such arduous detail, that there is an excellent chance that you will start to hate my guts.

    I've seen agencies marginalize this process by referring to it with non-threatening terms like: "requirements gathering". More accurately, this is the process of building your business. Really. Your site won't even work without the hundreds of irritating details I'm going to drag out of you.

    But you only have to do it once.

    Because it comes first, and because it's the most difficult part, and because agencies typically assign this job to their weakest link, most places bungle the all-important consultation phase like you wouldn't believe. The end result is a often a collection of self-contradictory, irrelevant "requirements" reminiscent of a B- history report from an 8th grader. Too much copy, not enough substance.

    Bad requirements will only cause us to rebuild repeatedly.

    Then you're off the hook.

    Once we've figured out what you want. Then I go see about making it.

    Classes

    I've also begun to provide short seminars on various programming topics close to my core skill-set. Available courses include, but are probably not limited to:

    • Beginning PHP and MySQL
    • Modular Application Development with PhP and MySQL
    • Web Foundations: HTML, CSS, Basic Javascript
    • Fat Clients: a modern Javascript primer
    • An Introduction to AJAX
    • AJAX and the MVC Model
    • HTML as its own Templating Engine
    • Flash Remoting
    • "Useless Middlemen of the IT Industry" or "Why you should probably assassinate your project manager."

    Hollar if you're interested, and I'll set up a custom curriculum to fit your audience. If you're looking for a specific topic not mentioned here, or more information about one that is, please ask!

    Technical mumbo-jumbo

    Cavalcade of Technologies

    I operate a full-service web development shop. My preferred platform is LAMP (Linux, Apache, MySql, PhP), for reasons of price, availability of collaborative programmers and hosting options.

    Within PhP, I have experience using most of the more popular modern libraries: Zend, Drupal, Joomla, Cake, CodeIgniter, Doctrine, and literally dozens of others. I pick up new technologies very quickly, and I do it for laughs.

    In the event that you are a boot-licking Microsoft lackey, I also have an extensive background building applications in ASP.NET (preferably with C# because Visual Basic is for cavemen). If we are locked into a .NET environment, I would prefer that we leverage ASP.NET MVC as it is easily the least offensive of Microsoft's offerings. Entity Framework was and remains a hideous travesty of an ORM, even in its fourth iteration, but I do have extensive experience working around its shortcomings.

    I am an outstanding Front-End Engineer. I have an broad background in JavaScript both hand-written and also utilziing modern libraries such as jQuery, Prototype, YUI and Google Web Toolkit. JQuery is my personal preference. I also have past experience with Adobe Flash and Silverlight, although the wind seems to be blowing the other direction recently. (Yay for JavaScript!)

    I can make a site work on IE 6, even if I don't think it's a good idea to do so.

    I know how to make and leverage semantically correct markup and to style it efficiently using CSS, and upcoming CSS3 techniques. I have also recently been delving into other forthcoming HTML 5 features specifically Canvas and SVG rendering.

    Component Orthogonality

    My overriding design principal is that no one component of your application should explicitly depend on any other. In programming parlance, this is also known as "loosely-coupled". In short, you should be able to swap out any important subsystem for a new one without rebuilding the entire application.

    For example, you should be able to:

    • Re-skin your web site with a new design.
    • Swap out an HTML browser client for a Flash, Silverlight, iPhone or Android client
    • Change your database platform from MySQL to SQL Server, or any other data store capable of serving your data
    • Change your server-side processing platform from PhP to .NET, or Python, or JSP or vise versa

    I know that some of these statements sound unlikely, but given the nature of modern web applications and the advent of Ajax and the REST api, these things are reality right now. This is really what modern progamming is about. In an environment where technologies change so frequently, your software needs to be flexible enough to use new toys as they become available.

    Recent Work

    Site Programming and Front-End Engineering

    Services

    Programming, Front-End Engineering

    Technologies

    ASP.NET MVC, jQuery, Google Site Search, HTML, CSS

    The Envision Group

    Physician Health Partners Web Site

    The client is a local health care organization that went to one of my design associates for a facelift on their public-facing web site. I was contacted to lay down a solid application framework foundation in a .NET environment. The initial site launch is simply a bunch of static pages, but the client has plans for more elaborate functionality in the near future, so it was important to pick a framework that would be able to handle as-yet undetermined future needs.

    Given that the client already had an internal IT department comfortable managing a .NET web site, I opted for ASP.NET MVC as a base framework, as it is the least objectionable of the options currently provided by Microsoft. Truthfully, the new ASP.NET MVC is a decent MVC library: easily as good as the dozen PHP, Ruby and Python-based options that have been in existence for 8 years or so.

    The most challenging part about this job was the antiquated browser requirements. Support for IE 6 was mandated, as well as functionality in the absence of javascript. Normally, that's not such a big deal, but the design also required a variety of modern web design elements such as rounded corners, multiple gradient backgrounds. Between those requests and a couple design decisions that betrayed Envision's roots as a primarily print-focused agency, it was actually a little tricky to deliver the markup.

    Course Administration System (PhP)

    Services

    Application Programming and Architecture, Data Modeling, Front-End Engineering, Security Integration, WordPress Integration

    Technologies

    PHP, MySQL, jQuery, CodeIgniter, WordPress

    The University of Colorado at Boulder, Department of Continuing Education

    Course Administration System

    Services included development of an administrative web site for the CU Continuing Education online web catalog. I was called in to build an administrative back-end to accompany another developer's front-end code.

    Much of the project involved modeling a rather complex (and continually evolving) data set to a MySQL database and developing an appropriate administrative platform and publishing system which could interact with pre-existing front-end software. The client's understanding of the underlying data set underwent multiple revisions as more and more business rules were uncovered. (Largely by me.) My role was not only a development role, but I also served as a data architecture consultant and modeler, as the client was moving from an archaic organizational structure that relied heavily on internal Excel sheets. The business knowledge necessary to unify the client's internal data structure was spread across several individuals at CU, and careful consensus-building was necessary to ensure that the final product would satisfy the many parties who would come to rely on this data set.

    Additional concerns included integration with CU's internal security protocols, accessibility of the database from Microsoft Access, and collaborative interaction with the front-end design team.

    I employed a (now common) MVC paradigm using a heavily modified CodeIgniter base framework and a home brew ORM as a data model.

    Guest Lecture

    Services

    Two day college seminar.

    Technologies

    Ajax, jQuery, Basic HTML Markup, CSS

    The University of Colorado at Boulder, Department of Computer Science

    Guest Lecture: "Ajax, JavaScript and their impacts on user accessibility in web 2.0 applications"

    Recently I taught a two-day seminar at CU on the topic of accessibility in Web 2.0 applications. With all the fun and the glitz of modern Ajax javascript-enabled applications, it's easy to forget that haphazard usage of these technologies can easily render a truly hideous experience for those members of the audience who might be viewing your content from a screen reader.

    Topics included basic javascript, methods of alerting a screen reader when a page has changed, and general techniques for accessibility markup. The doctrine of progressive enhancement was emphasized.

    This was a really fun class, and I wish I'd had a couple more days to really dive into the material.

    Site Programming and Front-End Engineering

    Services

    Application Architecture and Programming, Rules-Engine Development, Front-End Engineering

    Technologies

    ASP.NET MVC, jQuery, Entity Framework, T-SQL

    IntrinsiQ, Data Operations Department

    Data Scrubbing Interface

    IntrinsiQ is a company that has installed a series of data collection devices inside oncology offices throughout the nation. They provide tools which allow doctors to analyze trends in drug usage and effectiveness.

    Part of their data interpretation involves having a knowledgeable oncology professional examine raw data to determine when certain key events have occurred during a course of treatment. Previously, these events were identified by having a user examine raw data delivered as Excel spreadsheets!

    The client requested that I implement an interface that would make the identification of these points more clear. Furthermore, the belief was that if certain rules could be established and codified, then a rules engine could be constructed which would use previously determined criteria to evaluate anomalies automatically.

    To that end, I built a jQuery-powered Ajax gant chart that lays out a patient's treatment record in a draggable linear format, allowing the oncologist to note important events, and define important criteria so that similar anomalies can be picked up in the future by an automated data processing robot. (That I also built.)

    Guest Lecture

    Services

    Single day guest lecture.

    Technologies

    jQuery, HTML, CSS

    Rocky Mountain College of Art + Design

    Guest Lecture: "Fundamental Front-End Engineering Techniques"

    This was a single day class introducing a group of student designers to some of the realities of web production. I covered topics relating to semantic markup, specifically with emphasis on separation of content from presentation. We used a sample web site that the class had prepared as a group (a prior assignment) and pointed out things that would need to be changed in order for it to be released into the wild.

    Website Front-End Engineering

    Services

    Front-End Engineering

    Technologies

    jQuery, CSS, HTML

    SchoolFunder.org

    Front-End Engineering Project

    This was a really simple production job. My goal was to render HTML and CSS in a clean, modular, standards-compliant manner suitable for insertion in a Smarty-style templating system by the primary developers.

    The idea behind the site was kind of neat. It allowed for easy funding for kids projects via a a simple micro-donation model. In particular, this site was to be focused towards generating income for school programs. I believe the original site itself has been absorbed into a less targeted funding application. Kind of a shame.

    Sphere.com Redesign

    Services

    Design, Front-End Engineering

    Technologies

    PHP, Prototype.js, HTML, CSS

    Sphere.com (Now owned by AOL)

    Home Page Redesign and Ajax Search Engine Implementation

    Sphere is in the business of indexing blogs and relating them to bonafide news. (Admittedly the distinction is vague if you consider Fox to be a news source.) Sphere provides a way for you to read what "some guy with a blog" has to say about events that they don't fully understand.... and quickly!

    The goal here was to hilite Sphere's core capabilities in an interactive way. The base purpose of Sphere's software is to make contextual connections between news stories and blogs, so I created a drilldown tool that automated the process that the tool undergoes in real-time via an AJAX drilldown search mechanism.

    PHP Seminar

    Services

    Two day professional programming seminar.

    Technologies

    PhP

    UCAR (University Corporation for Atmospheric Research)

    Professional Seminar: "Beginning PhP Applications with MySQL"

    This was a 16-hour PHP Seminar offered to employees of UCAR in Boulder. The emphasis was on rudimentary application development including the basics of user authentication and authorization, page construction and interactions with a MySQL database.

    In retrospect, I think UCAR was trying to cram a little too much content into 16 hours. Some of the participants of this class had very little programming experience and frankly, I think the raw amount of material was a bit too much for them to absorb. We did manage to rush through a basic application from scratch, which gave them a jumping off point for their own studies.

    Questions you should be asking... but aren’t.

    What are my responsibilities as a client?

    Your job is to determine, in concrete terms, the things you wish the design to accomplish. That's it. You don't need to start making technical desisions for me using buzzwords you read about in Fast Company last week. I'll take care of the technical decisions after we've established your goals.

    You don't need to worry about which "Open Source Framework" or "Facebook-Style Extensible API" we're going to eventually implement. You're just playing with fire if you try to make those decisions too early. And unless you are an unusually saavy technical client, you're playing with fire if you try to make those decisions at all.

    You choose the goals, I find a way to accomplish those goals. It's that simple.

    1. Do not blur the line between your job and my job.
    2. Don't play with fire. I'm the guy with the oven mitts, not you.
    3. Do not form a design review committee until you have solidified your goals. Doing so will only create a clusterf@#k.
    4. Do not back-seat design or I will stop this car.

    How do I know whether the design you've provided me is meeting my goals?

    You evaluate it against your concrete goals, of course. We did establish those previously, correct?

    If you feel my efforts are not meeting your goals, tell me why in concrete terms. If you can tell me why something isn't working, then I can fix it. If you can't, then we're going to run around in circles until you can.

    If you genuinely don't like the design, then just say so. There's nothing wrong with disliking something I gave you. I'm happy to try again, because there is rarely only one way to achieve your goals. But telling me the result is somehow not meeting your needs... when it clearly is, is just going to result in me firing you as a client.

    You don't need to look out for my feelings because this is business, and engineering, not an art project.

    Why did that first comp look so much better than the final product?

    Because you decided to mess with it. You added your own little flair. Somebody convinced you that adding more cooks to the kitchen would somehow make better spaghetti.

    Way back in kindergarten, when you were playing with finger paints, some nice teacher probably told you that art is subjective, and that everybody's opinion is equally valid. That's a cute thing to say to a toddler.

    Well now you're all grown-up so I can tell you the truth. My opinion about design implementation is probably better than yours. This isn't art, this is visual engineering. There's definitely a component of personal preference involved, but there's also a lot of cold, hard math that doesn't care about your opinion or mine. Things are placed on the page for distinct reasons, and you don't get to put your paws all over the blueprint unless you know what you're doing.

    Frequently asked questions that you should really stop asking.

    I believe I can safely speak for the entire professional design community when I say that we never want to hear any of these questions again. Many of them may not be willing to admit it to your face, but then again, they don't chase the same kind of clients I do.

    Can we make that logo bigger?

    Yeah but I'm not going to. I sat here and played with the size of that logo for a good long time until I settled on the size it's at. It's clearly visible. You know how I'm 100% sure of that? Because it's the only thing you're talking about.

    Furthermore, physical size is arguably the least important factor in determining the visibility of an element.

    Let's look at the real reason why you're asking me to make the logo bigger. You need to be able to go back to your boss and tell him how you're contributing to the process. But the fact is, you have no idea what to do, and asking for a "bigger logo" is all you can think of.

    I want to save some time and/or money at the expense of your sanity. To that end, I'm thinking about using my nephew's art project as our logo. Can you just put this logo right in the middle of...

    Read this now. This material will be on the test.

    The only thing worse than bad design is a good design that's been modified by an amateur.

    You can no more "add in" somebody else's work into a design than you can "add in" a pound of sawdust to chicken soup. It doesn't go there. It was designed with a different purpose, and there is no relevant context connecting the two items.

    You want to use your nephew's logo? Then have your nephew design the page as well. If you want, you can call me after he jacks it up. At least it will be coherently jacked-up because just one designer (your nephew) will have created all the pieces.

    Isn't the client always right?

    If the client knew what "right" entailed, they wouldn't have to hire a consultant. There are plenty of other agencies out there that will tell you exactly what you want to hear... even if it's nonsense.

    Drop me a line, if you think you’ve got the guts.

    If after taking all that abuse, you still believe we're a good match.... then you're probably right.

    I run a 100% bullshit-free operation, and I keep it that way by carefully selecting whom I conduct business with. I would rather have 5 rational clients than 50 airheads.

    This site is my filter. If you can give and take straight talk, then we've got a bright future, and I will build you amazing things.

    inquiries@nerdinacan.com

    (Solicitors will be destroyed.)

    Iterative Development?

    I've seen at least one other agency I've worked for sell "iterative development" as if it's somehow a good thing. I'm not sure how rebuilding a site again and again is attractive. It's more of your money, and it's more of me sitting in front of a computer screen.

    Wouldn't you rather sit down and think through the process just once? Don't you think that collectively, you and I possess the imagination necessary to consider all the most likely pathways through your application before we build it? We don't need to be perfect, it just needs to be basically correct.

    If your actual business plans change, well... that happens. None of us can predict the future. We adjust, rewrite as needed and move on. But to actually plan on doing a bad job? That's just a justification for charging you more.

    Failing to establish solid requirements will result in you paying more money.

    It’s time for a chat with “The Bobs.”

    What would you say...
    you do here?

    Ever been on the phone with your agency and you find yourself talking to a person who says things like: "Let me check with the developer and get back to you", or maybe "Hmm, I'm not sure, let's see what the art director says".

    That person is called a "project manager", "middle man", and sometimes "parasite".

    A Project Manager is a non-technical intermediary that an agency will interpose between client and developer under the premise that it takes a 3rd party to translate communications between the two. In no sense is a project manager ever managing the project. That's actually a job better suited to the developer.

    The project manager is actually managing you.

    Let's play telephone!

    Imagine playing telephone with 3 kids. That was a fun game right? Always a laugh-riot. Ok, this time, instead of three adorable 8-year-olds, let's play it with the client, the project manager and the developer. The only problem is, the project manager doesn't speak the developer's language. For purposes of this little analogy, let's say he only speaks Korean.

    And now... instead of playing for giggles, let's say we're playing for the contract fee of your web site.

    This game still sound fun to you?

    Don't play telephone. Talk directly to the person who's going to build your application. Give that person a chance to ask you relevant questions that will actually speed you towards a completed product.

    But, I'm a people person!

    There is a widely-held myth in this industry that developers can not be people... people... persons, whatever. Hey guess what? I figured out a little while back what makes a lot of client-type people happy: functioning web sites.

    It's true!

    As it turns out, when asked, many clients are more interested in having their work completed correctly than they are in having a hilarious happy-hour with the P.M. after that extraneous 2-hour production meeting. Go figure.

    You ask somebody from a design agency what the purpose of a project manager is, and you'll probably hear a colorful metaphor involving grease and wheels. Sadly, the Project Manager is only necessary to smooth over situations that he, himself has created through his lack of technical competence.