<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Chad Hietala - Front-end Dev & Design</title>
  <link href="http://chadhietala.com/atom.xml" rel="self"/>
  <link href="http://chadhietala.com/"/>
  <updated>2012-03-26T22:21:26-04:00</updated>
  <id>http://chadhietala.com/</id>
  <author>
    <name>Chad Hietala</name>
    
  </author>

  
  <entry>
    <title>Input Output</title>
    <link href="http://chadhietala.com/blog/2012/02/04/input-output/"/>
    <updated>2012-02-04T13:01:00-05:00</updated>
    <id>http://chadhietala.com/blog/2012/02/04/input-output</id>
    <content type="html">&lt;p&gt;Any business, public or private, has an input/output paradigm. You give a clerk $2, you get a soda. You enter a number in a phone, you get some sort of response on the other end. You go to Google and enter a search term, you get search results. Even such vital things as hospitals work this way. It’s this constant balancing act between give and take.&lt;/p&gt;

&lt;p&gt;Communication online is done through input and output (IO). Give me something and I’ll give you something. Everything is IO when related to the internet, from how a computer processes an HTTP request to how people communicate online. This digital process of input and output has to remain as easy as if it were a physical one.&lt;/p&gt;

&lt;!--more--&gt;


&lt;h2&gt;Communicating Online&lt;/h2&gt;

&lt;p&gt;Communicating online is done largely through forms. At first one would think this is not true. Text areas, input boxes, buttons, check lists, and drop-downs are all interactive form elements and they are the root user interface communication tools for the internet. Since communications are digital and not physical, there is a hurdle that has to be cleared to enable users to initiate input.&lt;/p&gt;

&lt;p&gt;So if forms are the leading means of communicating back and forth from client and service, one can argue that web forms are the most important thing on a website. With a web form you capture that casual surfer. Web forms can help businesses qualify perspective clients, current clients, and past clients. It is a direct communication with the business entity. It can be compared to picking up a phone and calling the person or going to the physical business.&lt;/p&gt;

&lt;h2&gt;It's Definitley The Small Things&lt;/h2&gt;

&lt;p&gt;Position of labels and default length of input fields seem like frivolous details when it comes to web forms. &lt;em&gt;THEY ARE NOT&lt;/em&gt;. Research has shown time and again that these small details lead to faster, less painful, completion of a form. &lt;a href=&quot;http://www.uxmatters.com/mt/archives/2006/07/label-placement-in-forms.php&quot;&gt;Eye tracking studies&lt;/a&gt; show that the number of fixations the eye has on a form, the longer and more “painful” it is for that form to be filled out. By following some &lt;a href=&quot;http://www.lukew.com/resources/articles/web_forms.html&quot;&gt;simple best practices&lt;/a&gt; or &lt;a href=&quot;http://www3.formassembly.com/&quot;&gt;using form services&lt;/a&gt;, more forms will be filled out and filling out those forms will be easier.&lt;/p&gt;

&lt;p&gt;These things may seem trivial, but they really are what make the difference between a pleasurable experience and a confusing chore-like one.  Sure, people don’t look forward to filling out forms, but they are necessary and should strive to be as pain-free as possible.  By paying attention to the small details and making things as easy as possible, you can begin to condition a user to be more prone to do the thing you want them to do.&lt;/p&gt;

&lt;h2&gt;Forms Matter&lt;/h2&gt;

&lt;p&gt;Having pain points in a form is something that needs to be avoided at all costs. By breaking down some of the communication barriers that exist online, a business can greatly increase their revenue and interactivity. It has a direct impact on a business.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Why Aren't There More Computer Science Majors?</title>
    <link href="http://chadhietala.com/blog/2011/11/06/why-arent-there-more-computer-science-majors/"/>
    <updated>2011-11-06T20:27:00-05:00</updated>
    <id>http://chadhietala.com/blog/2011/11/06/why-arent-there-more-computer-science-majors</id>
    <content type="html">&lt;p&gt;I wasn't a Computer Science (CS) major in college.  A matter a fact I was a Finance Major.  I'm still not really sure why I chose to be a Finance major over CS.  Perhaps it was the picture that was painted for me, &lt;a href=&quot;http://www.youtube.com/watch?v=r5w21_Vphbg&quot;&gt;racks on racks on racks&lt;/a&gt; and having so much money I could &lt;a href=&quot;http://www.vladtv.com/blog/57123/chopped-maybach-from-otis-video-being-auctioned-off/&quot;&gt;chop up a Maybach&lt;/a&gt;.  Looking back, it was really a naive decision. While I studied how to use the &lt;a href=&quot;http://www.dailyfinance.com/2010/06/09/risk-quadrillion-derivatives-market-gdp/&quot;&gt;derivative market&lt;/a&gt;, I also became obsessed with web development and I joined the guild of self-taught developers.&lt;/p&gt;

&lt;!-- more --&gt;


&lt;p&gt;As a child I was always interested in computers.  I have pictures of me sitting in my dads office at EDS in front of computer at the age of 20 months.  I wrote my first program in first grade on an Apple IIGS with &lt;a href=&quot;http://bit.ly/ZBydj&quot;&gt;LOGOwriter&lt;/a&gt;.  I took Visual Basic, Web Authoring and CISCO systems in high school.  College rolls around and I choose what? Finance? You fool.&lt;/p&gt;

&lt;p&gt;I think there is a pretty big problem here.  I ponder why more people aren't choosing a career in software engineering and taking the CS route in college.  To be honest, choosing a career in software engineering is one of the most stable career choices there is.  Arguably more stable than nurses or doctors if you ask &lt;a href=&quot;http://bigthink.com/ideas/14657&quot;&gt;Ray Kurzweil&lt;/a&gt;.  I think educators are doing a piss poor job at selling what you can do with a CS degree.&lt;/p&gt;

&lt;h2&gt;Higher Education&lt;/h2&gt;

&lt;p&gt;My first &quot;real&quot; job was at a well respected university, where I worked as a Front-end Developer and User Experience Designer.  Although I was not an &quot;academic&quot;, I did attend some internal meetings in which we brainstormed ideas for what the university should accomplish in the next 5 years, what programs should be modified or created, and how to attract new students.  It was weird to see academic department heads fight solely for the advancement of their department and not really thinking about the future or students.&lt;/p&gt;

&lt;p&gt;When it was my turn to express my ideas, a lot of academics really didn't understand what I was talking about.  My ideas were largely based on changing the structure of academics from theory followed by application to application followed by theory.  I think it's important to sell what you can do with a degree up front by showing what the real life application of that degree can be.  For instance, the intro to CS class should not teach you theory like the Turing machine and creating a Fibonnaci sequencer, it should be a very basic class that talks about what you can do with a CS degree and how some of today's most sought after employers (Facebook, Google, and Apple) came to be.  In other words make it look sexy and build passion for the subject matter.&lt;/p&gt;

&lt;p&gt;Another suggestion that I had was to make programs extremely cross-disciplined.  Business Administration people should have minor in Computer Science, Computer Science people should have a minor in Business Administration.  These 2 disciplines are so tightly coupled that they should understand and respect each other right out of college.  Same goes for Designers. I feel this will change the business world greatly.  Instead of bickering over what the &quot;marketing people&quot; want and complaining about &quot;stupid engineers&quot;, we can just build good stuff.&lt;/p&gt;

&lt;h2&gt;Quick Thought On Electives And General Education Classes&lt;/h2&gt;

&lt;p&gt;Electives and general education classes are supposed to make you a more rounded person, but in reality those are the courses that make you say &quot;Why fuck do I have to take this class.&quot;  Stop with the bullshit electives and geneds, start making students take classes that will give them a better shot at finding a job.&lt;/p&gt;

&lt;h2&gt;Computer Science FTW&lt;/h2&gt;

&lt;p&gt;I know that I am really biased about this subject, but I should be.  A lot of smart people need jobs and the country as a whole needs to innovate more.  I believe that computer science is the answer to some of this countries problems.&lt;/p&gt;

&lt;p&gt;It's the academics responsibility to take a step back and start selling their program.  Invite high profile speakers, head up a student start-up initiative, host hack-a-thons, do SOMETHING that sounds cool, explain the theory on a just in time basis.  If your a CS academic and your worried about department money, stop worrying about it and build something that will help fund your endeavors, you're an engineer.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>CoffeeScript 101</title>
    <link href="http://chadhietala.com/blog/2011/09/28/coffeescript-101/"/>
    <updated>2011-09-28T10:33:00-04:00</updated>
    <id>http://chadhietala.com/blog/2011/09/28/coffeescript-101</id>
    <content type="html">&lt;p&gt;CoffeeScript is basically a syntactically sugared re-write of JavaScript.  The language has a 1-to-1 relationship with JavaScript but with a handful of symantic upgrades. It's important to remember CoffeeScript is just JavaScript, if you are ever leary of how to do something in CoffeeScript no biggie just write it in JavaScript.&lt;/p&gt;

&lt;!--more--&gt;


&lt;h2&gt;Installing CoffeeScript&lt;/h2&gt;

&lt;p&gt;The easiest way to install CoffeeScript is through &lt;a href=&quot;http://npmjs.org/&quot;&gt;NPM&lt;/a&gt;, but first you have to have Node.js installed.  The easiest way to install Node is through &lt;a href=&quot;http://mxcl.github.com/homebrew/&quot;&gt;Homebrew&lt;/a&gt; if your on a Mac.  I have no idea how you do this on a linux box and god forbid if you're using windows.  If you want to compile from source there are instructions on the &lt;a href=&quot;https://github.com/joyent/node&quot;&gt;node.js github repository&lt;/a&gt; that explains the install.&lt;/p&gt;

&lt;p&gt;Once you have node up and running you are going to want to &lt;a href=&quot;http://npmjs.org/&quot;&gt;install Node Package Manager&lt;/a&gt;, otherwise known as NPM.  Just copy the curl command into a terminal and you now should have NPM installed. Run the command below to install CoffeeScript.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\nnpm install -g coffee-script \n&quot;:String&lt;/p&gt;

&lt;h2&gt;Start Brewing A Cup&lt;/h2&gt;

&lt;p&gt;Lets create a new document and call it test.coffee.  In terminal change directory to where you have you created test.coffee and then run this command.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\ncoffee --watch --compile test.coffee\n&quot;:String&lt;/p&gt;

&lt;p&gt;This command will re-compile test.coffee to test.js everytime test.coffee is saved.  Pretty neat. So to start at the very basics this is what a variable looks like in CoffeeScript.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\nmySpecialVar = test\n&quot;:String&lt;/p&gt;

&lt;p&gt;Yep that's it.  No var statement.  Lets see what actually got compiled by opening up the by-product of the automatic compiling of test.coffee.  In test.js you should see the following.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for #&amp;lt;String:0x000001021663d8&gt;&lt;/p&gt;

&lt;p&gt;Woah, what the hell happened?  Well the CoffeeScript compiler tries to put best practices in the JavaScript to work.  So CoffeeScript doesn't allow you to create global variables in the global namespace, it does this by wrapping everything in a self envoking anonymous function AKA a function that calls it's self.  It also adds the var keyword.&lt;/p&gt;

&lt;p&gt;Another thing you will notice is the call(this) at the end of the function.  This ensures that the compiled script has the same &quot;this&quot; as the scope where it's placed.  This is needed because functions normally don't inherit their &quot;this&quot; object from the surrounding context.  If that makes no sense at all take a look at &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call&quot;&gt;Mozilla Docs on .call&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Conditionals&lt;/h2&gt;

&lt;p&gt;So the next thing we will cover is conditional statments. So lets write some more CoffeeScript.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\n..\nif 1 &gt; 0\n\talert \&quot;Oh willy\&quot;\n&quot;:String&lt;/p&gt;

&lt;p&gt;Notice we omit the parenthese that we would normally see in JavaScript.  Also take note the indentation on the alert.  Since white space is imporant in CoffeeScript just like in python, we have to indent to say that the alert statment belongs inside of the if block.  White space defines what is included in the code block and where the code block ends.  Let's take a look at the compiled source.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\n..\nif (1 &gt; 0) {\n    alert(\&quot;Oh willy\&quot;);\n}\n&quot;:String&lt;/p&gt;

&lt;p&gt;Pretty cool.  We write pretty looking code and in return we get the parenthese and curly braces hell that everyone has grown to love.&lt;/p&gt;

&lt;h2&gt;Objects &amp;amp; Arrays&lt;/h2&gt;

&lt;p&gt;So lets look at data structures before we get into functions.  Arrays didn't really get too much love in CoffeeScript but its still worth to go over.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\nary = [1, 2, 3, 4, 5]\n&quot;:String&lt;/p&gt;

&lt;p&gt;Yep, pretty boring.  Lets look at objects now.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for #&amp;lt;String:0x0000010214e828&gt;&lt;/p&gt;

&lt;p&gt;Thats a little bit better. It's a familar syntax but once again we loose the curlies.  Let's look at the output.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for #&amp;lt;String:0x0000010214ae80&gt;&lt;/p&gt;

&lt;p&gt;Just what you would expect.  One thing to note is that all of the variables are defined at the top of the function.  This is because it is generally a good practice to set the variable name spaces at the top of a function so that other developers know what are variables and what are parameters passed into the function.&lt;/p&gt;

&lt;h2&gt;Functions&lt;/h2&gt;

&lt;p&gt;Functions are pretty easy to define.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\ndoStuff = -&gt;\n\talert \&quot;Stuff Done\&quot;\n&quot;:String&lt;/p&gt;

&lt;p&gt;Yep all of the magic is in the almighty arrow (-&gt;).  This outputs this nastyness.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for &quot;\ndoStuff = function() {\n\treturn alert(\&quot;Stuff Done\&quot;);\n};\n&quot;:String&lt;/p&gt;

&lt;p&gt;It's important to note that CoffeeScript does not allow you to name functions like you would in plain JavaScript this is because of an &lt;a href=&quot;https://github.com/jashkenas/coffee-script/wiki/FAQ&quot;&gt;issue with IE8&lt;/a&gt;...go Microsoft.  Another thing you didn't write is the return on the alert.  Return is added to the last object in the function.  A little odd to get used to seeing this and in the cases where you are do not want to return a result by adding true or null to the buttom of the function.&lt;/p&gt;

&lt;p&gt;Passing parameters into a function is pretty easy.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for #&amp;lt;String:0x0000010213aa30&gt;&lt;/p&gt;

&lt;p&gt;And the end result is the following.&lt;/p&gt;

&lt;p&gt;Liquid error: undefined method `join' for #&amp;lt;String:0x000001021339d8&gt;&lt;/p&gt;

&lt;p&gt;Well that's all I wanted to share right now.  It's a lot to take in but for further reading you can check out the &lt;a href=&quot;http://jashkenas.github.com/coffee-script/&quot;&gt;CoffeeScript documentation&lt;/a&gt;.  In my next post I hope to put some of this to good use and write something like a Fibonacci Sequencer to actully show CoffeeScript in action.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Want This, Want That</title>
    <link href="http://chadhietala.com/blog/2011/09/21/want-this/"/>
    <updated>2011-09-21T21:00:00-04:00</updated>
    <id>http://chadhietala.com/blog/2011/09/21/want-this</id>
    <content type="html">&lt;p&gt;Well if you don't already know, I have taken a new job at &lt;a href=&quot;http://wanttt.com&quot; title=&quot;Want&quot;&gt;Want&lt;/a&gt; as the Lead Front-end Developer.  So far it's been a pretty exciting experience.  Since we launched the platform in July, we have worked really hard and it seems we have victories everyday.  To briefly recap, we have partnered with 200+ merchants in the past 2 months and are now on sites like &lt;a href=&quot;http://www.sharperimage.com&quot;&gt;The Sharper Image&lt;/a&gt;, &lt;a href=&quot;http://moosejaw.com&quot; title=&quot;Moosejaw&quot;&gt;Moosejaw&lt;/a&gt;, &lt;a href=&quot;http://www.partyrockclothing.com/&quot; title=&quot;Part Rock Clothing&quot;&gt;LMAFO's Party Rock Clothing&lt;/a&gt; with more high profile sites in the works.  Our product is viewed by 2 million+ people a month and that makes me pretty happy.&lt;/p&gt;

&lt;!--more--&gt;


&lt;h2&gt;Wait WTF is Want?&lt;/h2&gt;

&lt;p&gt;Want is a place to keep track of the things that you want to buy from any store, anywhere. Creating an account allows you to collect goods from anywhere and to share the things you want with anyone.  You add the things you want through our &lt;a href=&quot;http://wanttt.com/w/learn_more/&quot;&gt;bookmarklet&lt;/a&gt;, the &lt;a href=&quot;http://wanttt.com/w/learn_more/&quot;&gt;Want button&lt;/a&gt; and  soon &lt;a href=&quot;http://wanttt.com/w/learn_more/&quot;&gt;the iPhone&lt;/a&gt;.  Not only does the site allow you to collect things you want, it allows you to discover new products that are added by anyone that has an account.&lt;/p&gt;

&lt;p&gt;One feature that I am really excited about is something we are calling &lt;a href=&quot;http://wanttt.com/directory/&quot;&gt;Channels&lt;/a&gt;.  Its basically curated collections of &quot;wants&quot; that revolve around a central concept.  The example we use around the office is the &lt;a href=&quot;http://wanttt.com/dresslikewest/&quot;&gt;Dress Like West&lt;/a&gt; channel.  Basically it's a collection of apparel and accessories that Kanye West has worn.  So if you want to know where you can buy some metallic &lt;a href=&quot;http://wanttt.com/w/product_detail/6348/&quot;&gt;Balmin Biker Jeans&lt;/a&gt;, you can discover where to get these bad boys through Want.  It's kind of like a community driven catalog, that anyone can create, add to and edit.&lt;/p&gt;

&lt;p&gt;To find out more about want before you dive in you can &lt;a href=&quot;http://wanttt.com/w/learn_more/&quot;&gt;learn more here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;So Yea&lt;/h2&gt;

&lt;p&gt;So yea that's what I have been up to.  I built this blog largely to write about Front-end Development and Design stuff.  Stay tuned if you want to learn about bleeding-edge technologies, best practices, tips and tricks.  That's all for now.&lt;/p&gt;
</content>
  </entry>
  
</feed>

