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

 <title>Connection ⚡ Required</title>
 <link href="http://connectionrequired.com/feed/atom/" rel="self"/>
 <link href="http://connectionrequired.com/"/>
 <updated>2013-04-30T02:27:11+00:00</updated>
 <id>http://connectionrequired.com/</id>
 <author>
   <name>Zach Moazeni</name>
   <email>zach.moazeni@gmail.com</email>
 </author>


 
 <entry>
   <title>Why csscss doesn't remove duplication for you</title>
   <link href="http://connectionrequired.com/blog/2013/04/why-csscss-doesnt-remove-duplication-for-you"/>
   <updated>2013-04-27T00:00:00+00:00</updated>
   <id>http://connectionrequired.com/blog/2013/04/why-csscss-doesnt-remove-duplication-for-you</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;After I released &lt;a href=&quot;http://zmoazeni.github.io/csscss/&quot;&gt;csscss&lt;/a&gt;, I&#39;ve been asked numerous times:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Why doesn&#39;t csscss remove duplication for me?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;That is a fair question. It is easy to look at csscss and ask why it
isn&#39;t more like a
&lt;a href=&quot;http://en.wikipedia.org/wiki/Minification_(programming)&quot;&gt;minifier&lt;/a&gt;
that a developer can just run before deploying updates. In fact
&lt;a href=&quot;http://css.github.io/csso/&quot;&gt;CSSO&lt;/a&gt; and
&lt;a href=&quot;https://github.com/begriffs/css-ratiocinator&quot;&gt;css-ractionator&lt;/a&gt; are
projects that do this exact thing.&lt;/p&gt;

&lt;p&gt;So why didn&#39;t I build it that way?&lt;/p&gt;

&lt;h2&gt;csscss forces me consider my (code) design&lt;/h2&gt;

&lt;p&gt;I built csscss as a tool to help a developer write smarter CSS.
Duplication isn&#39;t all bad, but we often write duplicated CSS
unknowingly. When I see duplicated CSS, it forces me to think about my
rules and structure. It forces me to ask myself several questions about
my code.&lt;/p&gt;

&lt;p&gt;&quot;Is this necessary?&quot;&lt;/p&gt;

&lt;p&gt;&quot;Have I already defined a structure for this? Do I need to extend
existing structures?&quot;&lt;/p&gt;

&lt;p&gt;&quot;Is there a better way to define the same rules?&quot;&lt;/p&gt;

&lt;p&gt;&quot;Can I leverage other CSS tools to better structure these styles?
(&lt;a href=&quot;http://sass-lang.com/&quot;&gt;Sass&lt;/a&gt;, &lt;a href=&quot;http://lesscss.org/&quot;&gt;LESS&lt;/a&gt;, etc)&quot;&lt;/p&gt;

&lt;p&gt;All of these answers reduce duplication, but more importantly, they
force me to consider the design of my code. And I don&#39;t think there is a
single algorithm that satisfies all cases.&lt;/p&gt;

&lt;p&gt;Now you can obviously do this without an automated tool. And it is easy
for a small number of rules. However as your site/application grows it is
extremely difficult to continue this mental juggling.&lt;/p&gt;

&lt;p&gt;I like to think of csscss as a tool that helps &lt;strong&gt;extend my intuition&lt;/strong&gt;,
not replace it.&lt;/p&gt;

&lt;h2&gt;Generated code is harder to debug&lt;/h2&gt;

&lt;p&gt;If csscss generated new duplication-free code, all I am doing is punting
work for later. Which usually comes up when I need to debug my styles
from the browser. If the generated output is substantially different
than the original source, it makes my job harder to fix my problems.&lt;/p&gt;

&lt;p&gt;I have a similar problem with &lt;a href=&quot;http://coffeescript.org/&quot;&gt;coffeescript&lt;/a&gt;,
though I still enjoy using it. The coffeescript I write and the
javascript I debug are different. Luckily, in that case I can follow the
flow enough to jump back to coffeescript to fix my bugs.&lt;/p&gt;

&lt;p&gt;However the point of csscss is not to optimize code, it is to help
inform you about areas improvement. If csscss did this for you I expect
the gulf between original source and browser CSS to be rather large.&lt;/p&gt;

&lt;h2&gt;Improving the CSS landscape&lt;/h2&gt;

&lt;p&gt;None of this is a knock against other developers working on the same
problem. In fact, I think different perspectives and trial/error in this
field can only be a good thing. CSS has been around for over a decade
and it surprising to me that we don&#39;t have more tools. So I commend
anyone spending time to contribute. csscss is my contribution based on
my opinions.&lt;/p&gt;

&lt;p&gt;Here are some others tools that people have mentioned since I released
csscss.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://css.github.io/csso/&quot;&gt;CSSO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/begriffs/css-ratiocinator&quot;&gt;css-ractionator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/visionmedia/rework&quot;&gt;rework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/geuis/helium-css&quot;&gt;helium&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>csscss</title>
   <link href="http://connectionrequired.com/blog/2013/04/csscss"/>
   <updated>2013-04-25T00:00:00+00:00</updated>
   <id>http://connectionrequired.com/blog/2013/04/csscss</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;About eight months ago, I had an idea for a potential tool that could
help refactor
&lt;a href=&quot;https://en.wikipedia.org/wiki/Cascading_Style_Sheets&quot;&gt;CSS&lt;/a&gt;.
I wondered, &quot;Why aren&#39;t there many (any?) CSS static code analyzers
out there?&quot;&lt;/p&gt;

&lt;p&gt;I mean when you think about it, it is a little crazy. CSS is a pretty
simple language and it has been around for over 15 years. The
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/CSS/Getting_Started/Selectors&quot;&gt;selectors&lt;/a&gt;
can get a little intense and there is a laundry list of properties. But
the core syntax of CSS is pretty straightforward.&lt;/p&gt;

&lt;p&gt;The premise was simple. In all other languages, I work at writing
&lt;a href=&quot;http://en.wikipedia.org/wiki/Don&#39;t_repeat_yourself&quot;&gt;DRY&lt;/a&gt; code. So why
can&#39;t something inform me when I&#39;m repeating the same declarations over
and over? Better yet, I wouldn&#39;t need a browser to figure this out. I
should have all information immediately available in the source code.&lt;/p&gt;

&lt;p&gt;I had this idea eight months ago, and I am proud that I had the
fortitude to stick with the project and launch it. So here it is.&lt;/p&gt;

&lt;p&gt;World, please meet &lt;a href=&quot;http://zmoazeni.github.io/csscss/&quot;&gt;csscss&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Your Identity ≠ Your Code</title>
   <link href="http://connectionrequired.com/blog/2013/04/your-identity-your-code"/>
   <updated>2013-04-24T00:00:00+00:00</updated>
   <id>http://connectionrequired.com/blog/2013/04/your-identity-your-code</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;&lt;em&gt;This was originally posted on &lt;a href=&quot;http://collectiveidea.com/blog/archives/2012/03/16/your-identity-your-code/&quot;&gt;March 16,
2012&lt;/a&gt; when I worked with
CollectiveIdea&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This morning I started my day seeing this in my twitter feed:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Your identity ≠ Your job&lt;/p&gt;&amp;mdash; Kyle Steed (@kylesteed) &lt;a href=&quot;https://twitter.com/kylesteed/status/180651842919858176&quot;&gt;March 16, 2012&lt;/a&gt;&lt;/blockquote&gt;


&lt;script async src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;


&lt;p&gt;I’ve been thinking about this idea a lot lately. And I think it’s a trap that developers (myself included) easily fall into. To make this idea a little more specific to developers: Your identity ≠ Your code.&lt;/p&gt;

&lt;p&gt;As developers, we like to solve problems and get a kick out of that feeling that seemingly comes out of nowhere: “Yes! I solved it. I am all that is awesome!” (maybe I’m the only one who says that out loud). But at the same time we attach ourselves tightly to our code and will equate criticisms of our code as criticisms of us as a person. And lets be honest, while we all want to improve, it is difficult not to equate “this could be better” with “you should have been smarter”.&lt;/p&gt;

&lt;p&gt;I don’t think it is entirely due to criticism either. There are developers that I look up to, and I still get geeked out when I’m lucky enough to talk with them. For most of my geek-heroes, I also see prominent projects that they are part of, and it is difficult to separate “they are awesome because they wrote x”. I know when I first began, I cared a lot more about how people would perceive the code I wrote rather than how well it solved the problem at hand. It is more important to view your web heros as people who ship working software. If you think they are the authority on how software should be written, you’re in for an awakening.&lt;/p&gt;

&lt;p&gt;This idea also affects open source. It is rare to see a young developer submit bug fixes to existing projects. Most developers have the talent to fix outstanding issues, but don’t due to the fear of rejection and criticism. And again it isn’t the specific criticisms of the code they write, which in all likelihood would only accelerate their learning, it’s hearing those criticisms and taking it personal.
It is hard not to take these criticisms personal, especially when you read someone else’s code and say “What the hell was this fella thinking? That moron.” Believe it or not, I’ve caught myself saying that only to run a &lt;code&gt;git blame&lt;/code&gt; and discover I was the “moron” who wrote the code. Early in my career, after uttering something similar, I was told by another developer “Criticize the code, not the developer.” And that has stuck, though at times I have to remind myself.&lt;/p&gt;

&lt;p&gt;We will look at a piece of code and think “This is God-awful. This dev is terrible”. And it’s important to remember there is a lot more context around why code is written a certain way. The original developer’s experience does have an effect, but think back to the hacks you have written and why they were necessary. Even if it can be written better, you’re not doing anyone favors by slamming the dev.&lt;/p&gt;

&lt;p&gt;But then we wonder why we get defensive when we hear people sharing ideas about the code we write. “Yeah, they’re saying it politely, but I know what they’re really thinking.”&lt;/p&gt;

&lt;p&gt;Cut the ego. Stop equating bad code with bad developers. Stop equating code criticisms as a knock against you as a person. We could use more people submitting ideas and less animosity around existing code.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My Thoughts on Refinements</title>
   <link href="http://connectionrequired.com/blog/2012/11/my-thoughts-on-refinements"/>
   <updated>2012-11-20T04:37:26+00:00</updated>
   <id>http://connectionrequired.com/blog/2012/11/my-thoughts-on-refinements</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I have followed the various Ruby 2.0 refinements discussion for a little
while now. There is certainly a lot of talk in the air for and against
the inclusion of this feature. For those tuning in, here are some
notable links to get you up to speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://speakerdeck.com/a_matsuda/ruby-2-dot-0-on-rails&quot;&gt;A presentation by Akira Matsuda at RubyConf
2012&lt;/a&gt;
introducing refinements along with other interesting new Ruby 2.0
(potential) features.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bugs.ruby-lang.org/issues/4085&quot;&gt;A thorough
discussion&lt;/a&gt; by Ruby runtime
developers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.confreaks.com/videos/1278-rubyconf2012-toward-a-design-for-ruby&quot;&gt;Another RubyConf 2012
talk&lt;/a&gt;
by Brian Ford a prominent &lt;a href=&quot;http://rubini.us/&quot;&gt;Rubinius&lt;/a&gt; developer.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.headius.com/2012/11/refining-ruby.html&quot;&gt;A
blog post&lt;/a&gt; by
Charles Oliver Nutter a prominent &lt;a href=&quot;http://jruby.org/&quot;&gt;JRuby&lt;/a&gt; developer.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I want to start off by saying, I have a ton of respect for the
incredible work all developers have put into making my job a reality.
The community wouldn&#39;t be where it is without all your hard work and
sweat. And my career certainly depends on the fruits of your labor.
Thank you.&lt;/p&gt;

&lt;p&gt;There is an interesting mix of pros and cons for the inclusion of
refinements in Ruby 2.0. I&#39;m going to distil what I&#39;ve read and my
comments on the matter.&lt;/p&gt;

&lt;h2&gt;Current discussions&lt;/h2&gt;

&lt;h3&gt;Implementation difficulties within MRI/JRuby/Rubinius/other&lt;/h3&gt;

&lt;p&gt;I&#39;m just not qualified to weigh in on this area. I understand that there
are some (many?) challenges in implementing this fully without breaking
the &lt;a href=&quot;http://en.wikipedia.org/wiki/Principle_of_least_astonishment&quot;&gt;principal of least
surprise&lt;/a&gt;
for developers. That may or may not sway everything else. It should
certainly not be overlooked, but this isn&#39;t a scenario where you have
people proposing code without writing it. Runtime developers are
currently debating the feasibility implementation, and it does look
split.&lt;/p&gt;

&lt;h3&gt;Crazy use cases&lt;/h3&gt;

&lt;p&gt;Many are cited on &lt;a href=&quot;http://blog.headius.com/2012/11/refining-ruby.html&quot;&gt;Charles&#39;
post&lt;/a&gt; such as:&lt;/p&gt;

&lt;p&gt;What does the following do?&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Baz&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Quux&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;up_and_add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;str1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;str2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;str1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;upcase&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;str2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;upcase&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Josh Ballanco&#39;s example, also from Charles&#39;s post where&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&quot;the following code only refines the &quot;bar&quot; method, not the &quot;foo&quot;
method.&quot;&lt;/p&gt;&lt;/blockquote&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Yummy&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;camelize&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# will error&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;StringCamelize&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;camelize&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I strongly dislike this argument. In complete fairness, you have no idea
what &lt;code&gt;String#upcase&lt;/code&gt; is going to do. Someone before the call may or may
not have overriden the method. It could be
&lt;a href=&quot;http://apidock.com/rails/ActiveSupport/CoreExtensions/Module/alias_method_chain&quot;&gt;&lt;code&gt;alias_method_chain&#39;ed&lt;/code&gt;&lt;/a&gt;
to email my grandmother stock quotes upon invocation. No one knows. But
we still love Ruby, we still get work done, and we still ship code.&lt;/p&gt;

&lt;p&gt;Thinking of obtuse edgecases on the nastiness or confusion this could
cause does not dismiss the potential possibilities. My initial reaction,
and I think this is shared with many developers, is &quot;Wow, this could
really clean up some global-level monkey patching.&quot; That doesn&#39;t mean it
will be used only for the forces of good.&lt;/p&gt;

&lt;p&gt;Myron &lt;a href=&quot;http://blog.headius.com/2012/11/refining-ruby.html?showComment=1353368146551#c3690449280229458677&quot;&gt;commented with some
guidelines&lt;/a&gt;
he uses when using monkey patching (which I think are great). But why
wouldn&#39;t the same apply to refinements?&lt;/p&gt;

&lt;p&gt;Saying that refinements could lead to dangerous and unusuable code does
not dimiss the potential benefits of an incredibly flexible feature.
Describe some of the existing features to a non-Ruby developer and watch
their face either light up in possibility or scowl in disbelief. Like
re-opening classes&lt;/p&gt;

&lt;h3&gt;What&#39;s wrong with monkey patching?&lt;/h3&gt;

&lt;p&gt;Brian Ford has asked this many times, and I don&#39;t think this is a great
question to lead to the dismissal of refinements. Monkey patching is
global and refinements are local to the call stack. I have not seen many
great arguments won based on the fact that we can accomplish the same
behavior through global means.&lt;/p&gt;

&lt;h2&gt;Things we should be discussing&lt;/h2&gt;

&lt;p&gt;Aside from language-level implementation details which some language
developers seem to think isn&#39;t a problem and others do, I don&#39;t think
the many of the current questions and discussions are productive. These
are the topics I would like to hear discussed.&lt;/p&gt;

&lt;h3&gt;Is Ruby too mature to include something so experimental?&lt;/h3&gt;

&lt;p&gt;This might seem like a trollish question, but I think needs serious
consideration. Ruby is not a young language with a small userbase. Sure
we might be small when compared to the sea of C code written and
deployed. But there is much more Ruby code in active use now than 5
years ago.&lt;/p&gt;

&lt;p&gt;Changes this large has an affect on both the users who choose to use it,
as well as those who don&#39;t. Are we reaching the point where this is too
extreme? If so, where does an idea/implementation like this belong?&lt;/p&gt;

&lt;h3&gt;Ruby compatibility&lt;/h3&gt;

&lt;p&gt;The implementation of refinements was first proposed and then
implemented by Shugo Maeda in MRI. Both JRuby and Rubinius have been
fighting for &lt;a href=&quot;http://rubyspec.org/&quot;&gt;RubySpec&lt;/a&gt; for many years, and there
has been no effort to spec this feature.&lt;/p&gt;

&lt;p&gt;Think about that. A prominent MRI runtime developer thinks about an implements an
interesting feature, it is brought into the most popular runtime used,
and the developers tasked with keeping up compatible runtimes are now
forced to implement the same feature in their respective environments.&lt;/p&gt;

&lt;p&gt;I get why JRuby and Rubinius developers would not be terribly motivated
to do that without an argument.&lt;/p&gt;

&lt;p&gt;Here is where I think MRI and JRuby/Rubinius have competing goals. MRI
is continuing to push the boundaries of how to express the Ruby language
in new ways. Whereas JRuby/Rubinius are forced to play catch up with
large features. I don&#39;t mean that a knock against JRuby and Rubinius,
because they certainly bring their own unique things to the table. JRuby
has an amazing capacity for concurrency by leveraging the
&lt;a href=&quot;http://en.wikipedia.org/wiki/Java_virtual_machine&quot;&gt;JVM&lt;/a&gt; and Rubinius
has rethought even the simplest things such as a &lt;a href=&quot;http://rubini.us/doc/en/tools/debugger/&quot;&gt;fully supported
debugger&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On top of playing catch up, JRuby/Rubinius continues to advocate to
developers to try their runtime and highlight successful production
uses. It&#39;s difficult to convince developers to use your runtime if you
have to change a large swath of code in the process.&lt;/p&gt;

&lt;p&gt;This doesn&#39;t mean JRuby/Rubinius developers are fully biased against new
ideas.  It just means to me that they are heavily incentivized to fight
highly experimental features coming from a different runtime. Like
refinements.&lt;/p&gt;

&lt;h3&gt;Communication&lt;/h3&gt;

&lt;p&gt;The number one thing I think we should be discussing is &quot;How did we get
into this situation?&quot; Many developers think refinements can be used in
good/productive ways (myself included), but why are many smart, respected developers
vehementely against it? Apart from language maturity or incentives
for/against, I think this entire argument suffers from what countless
arguments in the past suffer from: lack of communication.&lt;/p&gt;

&lt;p&gt;MRI is largely written by Japanese developers, but has become heavily
adopted in the United States. JRuby/Rubinius developers are
predominately English speaking. There are many developers who speak
multiple languages, but not enough.&lt;/p&gt;

&lt;p&gt;Brian Ford mentioned this in the &lt;a href=&quot;http://www.confreaks.com/videos/1278-rubyconf2012-toward-a-design-for-ruby&quot;&gt;talk I listed
above&lt;/a&gt;,
though I think he could have presented that topic in a much more
tactful, less rushed way. He proposes that we should all be discussing
these features in English.&lt;/p&gt;

&lt;p&gt;If I was a Japanese MRI developer, I would be offended by the way that was
presented. First, there are many Japanese developers who have done a
great job discussing very complex topics in English, just browse
&lt;a href=&quot;http://bugs.ruby-lang.org/issues&quot;&gt;ruby-lang&lt;/a&gt;. I think they should
be highlighted, or at least given some sort of props for their efforts.&lt;/p&gt;

&lt;p&gt;Second, I can&#39;t help but put myself in their shoes. If I built some
awesome wizbat that I continued to care for but over the course of time
happened to be largely adopted by Russian developers. I would be a bit
upset if they criticized me for not discussing development issues in
Russian. Nothing against Russian, I just don&#39;t speak a lick of it.&lt;/p&gt;

&lt;p&gt;On the other side of the coin, developers of JRuby and Rubinius are
being forced to implement some very difficult features in their
runtimes. Reading the dialog, it sounds like Charles&#39; and Brian&#39;s
complaints are being heard but perhaps not discussed as thoroughly as
they probably should be.&lt;/p&gt;

&lt;p&gt;I do not have any good suggestions for this problem. But I do think this
is the crux of it. In fact, this is most likely a frustration that has
been worked through for many years and refinements has now been the
place to plant the flag and have it out.&lt;/p&gt;

&lt;h2&gt;Should refinements be in Ruby 2.0?&lt;/h2&gt;

&lt;p&gt;I think refinements offer some very interesting possibilities. It might
turn out to be a disaster or the to key to triggering some amazing
innovation in a caffeine-hyped developer. But instead of dividing the
community by campaigning for or against its inclusion. I think we should
be discussing matters that led us here, and will inevitably lead us to
other disagreements if left unresolved.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Big Changes Again. Joining Collective Idea.</title>
   <link href="http://connectionrequired.com/blog/2011/02/big-changes-again-joining-collective-idea"/>
   <updated>2011-02-03T16:08:50+00:00</updated>
   <id>http://connectionrequired.com/blog/2011/02/big-changes-again-joining-collective-idea</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Last year I felt compelled to start &lt;a href=&quot;/blog/2010/05/big-changes-going-independent/&quot;&gt;Connection Required&lt;/a&gt;. Not because I was forced to, but because I wanted to prove to myself that I could start and sustain a business. There is a sense of pride that comes with helping clients and making money from your efforts. I&#39;ve encountered many surprises over the past year, mostly positive. This month, I&#39;m going to be making another big transition and I&#39;m joining &lt;a href=&quot;http://collectiveidea.com/&quot;&gt;Collective Idea&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why would I join another company rather than sticking with Connection Required? It isn&#39;t because I am unable make it work. I&#39;ve launched several successful projects, made my clients extremely happy and made money in the process. My family was able to move back to Northern Michigan. I&#39;ve been able to spend more time at home than ever before. And I have had to push away as much work as I&#39;ve accepted. All in all, I consider that successful.&lt;/p&gt;

&lt;p&gt;However, when I consider what I want Connection Required to become, I pause. I do great work, but that doesn&#39;t mean I want to grow a consultancy and start hiring other developers. Enter &lt;a href=&quot;http://collectiveidea.com/&quot;&gt;Collective Idea&lt;/a&gt;. I&#39;ve known these guys for a while. They&#39;re an extremely sharp group and they build great software. At &lt;a href=&quot;http://collectiveidea.com/&quot;&gt;Collective Idea&lt;/a&gt;, I can continue to do what I do best: write great software and make clients happy. But instead of being solo, I am able to join a team of developers who share that same goal. For those who have been in my shoes, you&#39;ll know, that&#39;s a big deal.&lt;/p&gt;

&lt;p&gt;For those who haven&#39;t been in this situation, at a certain point you realize how few hours you actually have in a day/month/year. Sure I can work more, but then that takes away from my family. I can start hiring, delegating, and leading others, but that requires growing. And I&#39;m pretty confident I&#39;d make an awful boss :). There is only so much I can do as an individual, but as part of a great team I can be a part of awesome.&lt;/p&gt;

&lt;p&gt;I&#39;m excited about this transition because it&#39;s a step forward on many fronts. You can also read the &lt;a href=&quot;http://collectiveidea.com/blog/archives/2011/02/03/welcome-zach-moazeni/&quot;&gt;announcement on Collective Idea&#39;s site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feel free to contact me at my new email address zach -at- collectiveidea.com. This site will continue to stay up, but will morph back into a blog over time.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Sharing a desk and internet</title>
   <link href="http://connectionrequired.com/blog/2011/01/sharing-a-desk-and-internet"/>
   <updated>2011-01-19T20:31:05+00:00</updated>
   <id>http://connectionrequired.com/blog/2011/01/sharing-a-desk-and-internet</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;After two months in the new office, I realized we&#39;re going to need to a lot more stuff to fill up the space: couch, big screen, etc. You know, the essentials?&lt;/p&gt;

&lt;p&gt;Then I realized I could just bring in a new desk and offer up the space/internet for people who are passing through. Especially, since there are no &lt;a href=&quot;http://en.wikipedia.org/wiki/Coworking&quot;&gt;coworking spaces&lt;/a&gt; in Traverse City.&lt;/p&gt;

&lt;p&gt;So if you&#39;re in or around &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Traverse+City,+MI&amp;amp;aq=&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=47.033113,68.291016&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Traverse+City,+Grand+Traverse,+Michigan&amp;amp;z=13&quot;&gt;Traverse City&lt;/a&gt; / &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Elk+Rapids,+MI&amp;amp;sll=44.763057,-85.620632&amp;amp;sspn=0.082881,0.133381&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Elk+Rapids,+Antrim,+Michigan&amp;amp;z=14&quot;&gt;Elk Rapids&lt;/a&gt;, feel free to stop by. I do ask that you sign in through &lt;a href=&quot;http://desksnear.me/workplaces/497-connection-required&quot;&gt;DesksNearMe&lt;/a&gt; beforehand so we don&#39;t overcommit the space.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New iPad App Deployed: Spatik</title>
   <link href="http://connectionrequired.com/blog/2010/12/new-ipad-app-deployed-spatik"/>
   <updated>2010-12-23T17:40:23+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/12/new-ipad-app-deployed-spatik</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;For the past few months I&#39;ve been helping &lt;a href=&quot;http://twitter.com/#!/nicholaspatten&quot;&gt;Nicholas Patten&lt;/a&gt; take his vision and translate it into an iPad App. I&#39;m proud to announce &lt;a href=&quot;http://itunes.apple.com/us/app/spatik/id411006823?mt=8&quot;&gt;Spatik&lt;/a&gt; was accepted today and is now available in the App Store.&lt;/p&gt;

&lt;p&gt;It&#39;s purpose is to bring Google Reader and Twitter to a user&#39;s fingertips (literally) and let the users schedule tweets. Spatik was a lot of fun to work on for me for a variety of reasons. While developing Spatik I learned more about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google&#39;s OAuth workflow, I had previously worked on Twitter OAuth on other projects.&lt;/li&gt;
&lt;li&gt;The OAuth workflow within the iOS environment.&lt;/li&gt;
&lt;li&gt;Having an iOS client interact with a custom backend server.&lt;/li&gt;
&lt;li&gt;The App Store approval process.&lt;/li&gt;
&lt;li&gt;The iOS human user interface guidelines and building custom interface components.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I will post more about the development lessons learned in other posts. But right now, I want the spotlight squarely on &lt;a href=&quot;http://itunes.apple.com/us/app/spatik/id411006823?mt=8&quot;&gt;Spatik&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/#!/nicholaspatten&quot;&gt;Nicholas Patten&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Check out the app, give it a spin!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tweetstream is now Web Scale</title>
   <link href="http://connectionrequired.com/blog/2010/12/tweetstream-is-now-web-scale"/>
   <updated>2010-12-22T19:14:51+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/12/tweetstream-is-now-web-scale</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Over the past few months, I have been working with &lt;a href=&quot;http://downstreamapp.com&quot;&gt;Downstream&lt;/a&gt; on one of their products &lt;a href=&quot;http://tweetstreamapp.com&quot;&gt;Tweetstream&lt;/a&gt;. In addition to building features, we have experienced a significant issue with the infrastructure.&lt;/p&gt;

&lt;p&gt;Last night we pushed live a slew of updates and as a result the application is much speedier. The guys were so thrilled with the result that they wanted me to write a geeky technical post about all the changes for their users. You can read the entire article &lt;a href=&quot;http://blog.downstreamapp.com/post/2418156381/tweetstream-is-now-web-scale&quot;&gt;on their blog&lt;/a&gt; and also discuss it on &lt;a href=&quot;http://news.ycombinator.com/item?id=2032126&quot;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>December Northern Michigan Web and Mobile Meetup</title>
   <link href="http://connectionrequired.com/blog/2010/12/december-northern-michigan-web-and-mobile-meetup"/>
   <updated>2010-12-16T16:37:53+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/12/december-northern-michigan-web-and-mobile-meetup</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Last night we had our &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/calendar/15499042/&quot;&gt;December Michigan Web and Mobile Meetup&lt;/a&gt;. We only had a couple guys due to family commitments, but that&#39;s understandable since we&#39;re only a week away from Christmas.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;&lt;a id=&quot;more-463&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the talk from &lt;a href=&quot;/blog/2010/11/november-northern-michigan-web-and-mobile-meetup/&quot;&gt;last month&lt;/a&gt;, Gary Vaynerchuk mentioned Zappos and hearing about their rich company culture, we watched an interview by the CEO of Zappos, Tony Hsieh.&lt;/p&gt;

&lt;p&gt;Before we watched the interview, we actually watched Jeff Bezos of Amazon give a short clip when they acquired Zappos:&lt;/p&gt;

&lt;object width=&quot;600&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-hxX_Q5CnaA?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-hxX_Q5CnaA?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;600&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;


&lt;p&gt;&lt;a href=&quot;http://bigthink.com/ideas/24384&quot;&gt;Here&#39;s Tony&#39;s interview&lt;/a&gt; on &lt;a href=&quot;http://bigthink.com/&quot;&gt;BigThink.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tony speaks a lot differently than Gary, but has a lot of insight on Business and Happiness. He mentioned &lt;a href=&quot;http://www.amazon.com/Good-Great-Companies-Leap-Others/dp/0066620996&quot;&gt;Good to Great&lt;/a&gt; and having read that a few years ago, I heartily recommend it as well. He also mentioned &lt;a href=&quot;http://www.amazon.com/Tribal-Leadership-Leveraging-Thriving-Organization/dp/0061251305&quot;&gt;Tribal Leadership&lt;/a&gt; which I&#39;ll be picking up soon. And of course there&#39;s Tony&#39;s book &lt;a href=&quot;http://www.amazon.com/Delivering-Happiness-Profits-Passion-Purpose/dp/0446563048&quot;&gt;Delivering Happiness&lt;/a&gt; which I still need to check out.&lt;/p&gt;

&lt;p&gt;I really appreciate Tony&#39;s perspective on culture and happiness. I also connected with his comments about the &lt;a href=&quot;http://en.wikipedia.org/wiki/Generation_Y&quot;&gt;Millennials&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;...there are so many people in corporate America where they&#39;re a different person at home on weekends versus on monday when they&#39;re in the office. And they leave a little part of themselves, or a big part of themselves at home ... maybe what the millennials are bringing to the forefront [is that] they can be the same person...&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>November Northern Michigan Web and Mobile Meetup</title>
   <link href="http://connectionrequired.com/blog/2010/11/november-northern-michigan-web-and-mobile-meetup"/>
   <updated>2010-11-19T14:06:46+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/11/november-northern-michigan-web-and-mobile-meetup</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Last night we had our &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/calendar/15107332/&quot;&gt;second Northern Michigan Web and Mobile Meetup&lt;/a&gt; and I think this went better than our &lt;a href=&quot;/blog/2010/11/first-northern-michigan-web-and-mobile-meetup&quot;&gt;first&lt;/a&gt;. This week I grabbed a couple pizzas from &lt;a href=&quot;http://www.chefcharlesinc.com/&quot;&gt;Chef Charles in Elk Rapids&lt;/a&gt;, that guy can make a tasty pie. In fact I still have a couple slices leftover for lunch today. This week we watched &lt;a href=&quot;http://garyvaynerchuk.com/&quot;&gt;Gary Vaynerchuk&#39;s&lt;/a&gt; RailsConf 2010 talk.&lt;/p&gt;

&lt;object width=&quot;600&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-QWHkcCP3tA?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-QWHkcCP3tA?fs=1&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;600&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;


&lt;p&gt;Gary has great stage presence, and I really connect with his messages in this talk. It also sounded like the group resonated with the talk and fed off his energy. We discussed items like caring about client relationships, the &quot;Mom and Pop&quot; attitude for tech and business, and hustling products.&lt;/p&gt;

&lt;p&gt;I&#39;ve set a date for &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/calendar/15499042&quot;&gt;the next meetup for December 14th&lt;/a&gt;. We may be at &lt;a href=&quot;http://www.citymac.net/&quot;&gt;CityMac in Traverse City&lt;/a&gt; again, but I think it may be fun to mix it up and try out the Library. I&#39;ll firm up the location closer to the 14th.&lt;/p&gt;

&lt;p&gt;If you&#39;re interested in Web, Mobile, and Business, I encourage you to stop by and hang out!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>First Northern Michigan Web and Mobile Meetup</title>
   <link href="http://connectionrequired.com/blog/2010/11/first-northern-michigan-web-and-mobile-meetup"/>
   <updated>2010-11-02T13:31:07+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/11/first-northern-michigan-web-and-mobile-meetup</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Last Thursday we had our first &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/&quot;&gt;Northern Michigan Web and Mobile Meetup&lt;/a&gt; meeting. While eating pizza, we watched &lt;a href=&quot;http://bigthink.com/ideas/18516&quot;&gt;an interview with Jason Fried&lt;/a&gt; and discussed it afterwards.&lt;/p&gt;

&lt;script src=&quot;http://video.bigthink.com/player.js?deepLinkEmbedCode=dhNG42MTrKizs8l5v500roLKkUKF-JNU&amp;width=516&amp;autoplay=0&amp;height=290&amp;embedCode=dhNG42MTrKizs8l5v500roLKkUKF-JNU&quot;&gt;&lt;/script&gt;


&lt;p&gt;I had a pretty good time, and received some nice compliments on the format. Talking with the group, we may continue to watch and discuss interviews. I&#39;ve set a date for the &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/calendar/15107332/&quot;&gt;next meetup on November 18th&lt;/a&gt;. I&#39;m still considering where we should go for the venue. CityMac was accommodating, but a few mentioned the meeting rooms in the Library.&lt;/p&gt;

&lt;p&gt;If you&#39;re in the Traverse City area on the 18th, I encourage you to drop by!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>HarvestApp.com Impresses Me Again</title>
   <link href="http://connectionrequired.com/blog/2010/10/harvestapp-com-impresses-me-again"/>
   <updated>2010-10-21T21:12:44+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/10/harvestapp-com-impresses-me-again</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ve been using &lt;a href=&quot;http://www.getharvest.com/&quot;&gt;Harvest&lt;/a&gt; for a few years now, and as a customer have been a big fan of their product. A couple months ago they made a &lt;a href=&quot;http://www.getharvest.com/blog/2010/08/secure-connection-for-all-accounts/&quot;&gt;change to their plans&lt;/a&gt; and impressed me again. This time though, it wasn&#39;t as a customer, it was as a developer and business owner.&lt;/p&gt;

&lt;p&gt;It wasn&#39;t the details of the change that caught my eye, it was that prior to the announcement, they sent me an email regarding how the change affected &lt;a href=&quot;http://github.com/zmoazeni/harvested&quot;&gt;an open source library&lt;/a&gt; I maintain.&lt;/p&gt;

&lt;p&gt;Here&#39;s the email, posted with permission from Harvest:&lt;/p&gt;

&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;Hi Zach&lt;/p&gt;

&lt;p&gt;I&#39;m reaching out early, before the official notification about this, to ask a question about your Harvest client: http://simplechatter.com/2010/04/harvested-a-new-ruby-api-wrapper/&lt;/p&gt;

&lt;p&gt;In a couple of weeks Harvest will be implementing SSL across the board for all Harvest accounts. Accounts can opt-out of SSL (through Harvest support) but HTTPS will become the default for all Harvest access.&lt;/p&gt;

&lt;p&gt;The net effect for accounts currently using non-SSL HTTP will be an HTTP 301 redirect from http://subdomain.harvestapp.com to https://subdomain.harvestapp.com when this change goes into effect for everyone.&lt;/p&gt;

&lt;p&gt;Does your client support this 301 redirect, and SSL in general? If not, we&#39;d like to work with you to support this, to avoid any issues for your access, or for anyone using your client.&lt;/p&gt;

&lt;p&gt;Please let me know and feel free to contact me for any details, or if I can help in any way.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;p&gt;The fact that the company not only keeps tabs on the current software community around their product, and intentionally reaches out to them for potential issues, &lt;strong&gt;and&lt;/strong&gt; offers to help out to fix those issues &lt;em&gt;speaks volumes&lt;/em&gt;. Fostering a community and enabling evangelists around your product is often overlooked and under-prioritized.&lt;/p&gt;

&lt;p&gt;Kudos guys, and keep up the good work.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Feel free to discuss this here and on &lt;a href=&quot;http://news.ycombinator.com/item?id=1817484&quot;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Pain of Launching Your Own Projects</title>
   <link href="http://connectionrequired.com/blog/2010/10/the-pain-of-launching-your-own-projects"/>
   <updated>2010-10-19T13:35:04+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/10/the-pain-of-launching-your-own-projects</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Ask anyone who has redesigned their own website or released an open source project, pushing something live can be painful. I think there are two primary reasons for this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;concern about making a great first impressions&lt;/li&gt;
&lt;li&gt;the lack of constraints that are normally in place when working on client projects.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Launching and redesigning your own website is &lt;em&gt;mentally tough&lt;/em&gt;. It&#39;s rarely a technical problem. Since it&#39;s your own site and no one paying you to build it, it can be very easy to keep adding features and polishing. Both of which delay the launch date.&lt;/p&gt;

&lt;p&gt;Although they are often the source of stress, budgets and deadlines are useful. I&#39;ve experienced if you embrace a constraint rather than ignore it, you will quickly re-prioritize the tasks and find innovative work-arounds for the largest tasks. We do this all the time when working on other projects, the trick is keep focused when working on your own projects.&lt;/p&gt;

&lt;p&gt;Take this &lt;a href=&quot;http://connectionrequired.com&quot;&gt;website&lt;/a&gt; for example. I went from PSD to Launched in 13 days (17 if you count the weekends). If this was a client project, that would be utterly horrible for this small site. However in the My-Project Timezone, that&#39;s not too shabby. Don&#39;t get me wrong, this site isn&#39;t perfect, instead it&#39;s littered with warts (none of which I&#39;m going to point out). I didn&#39;t focus on building the perfect site, I focused on &lt;strong&gt;good enough for launch&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;Pick a Deadline&lt;/h2&gt;

&lt;p&gt;After launching a few projects, I&#39;ve learned a few useful tips. Pick a deadline and keep your feet to the fire. If it doesn&#39;t look like you can launch by that deadline, rip out features. One large wart for this site, is a missing portfolio section. That was a very intentional omission, one I have designs and even HTML/CSS for, but it was cut in favor of launching. If you&#39;re not a fan of deadlines, set a fake budget and track your time against it. That may even provide a more realistic picture on how you much effort you put into the project.&lt;/p&gt;

&lt;h2&gt;Polish After Launch&lt;/h2&gt;

&lt;p&gt;Another tip I&#39;ve learned: polish after launch. We can become consumed with polishing and tweaking to the point that it holds us back. One advantage our projects have over client projects, is that there&#39;s nothing stopping constant polish after launch. If it&#39;s the critical eye of peers and competitors forcing you to make it perfect, stop and relax. Making a good first impression can drive us insane. It&#39;s important to remember projects don&#39;t stop at launch, they evolve over time. Get it to &quot;good enough&quot;, launch it, then continue polishing.&lt;/p&gt;

&lt;h2&gt;Solve Simpler Problems&lt;/h2&gt;

&lt;p&gt;Finally, there are always going to be implementation issues that will get in our way. Our first reaction to figure them out, and that is great, but don&#39;t get hung up on it. It&#39;s okay to change course, alter the final solution, or even post-pone troubling issues. You&#39;re going to be forced to adapt, and you can either take the timeline-hit in figuring out the original problem, or you can change the problem and solve a simpler one.&lt;/p&gt;

&lt;p&gt;I&#39;m not advocating shoddy or half-assed work, I&#39;m pointing out that launching is more important than perfection.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New Traverse City User Group: Northern Michigan Web and Mobile Meetup</title>
   <link href="http://connectionrequired.com/blog/2010/10/new-traverse-city-user-group-northern-michigan-web-and-mobile-meetup"/>
   <updated>2010-10-15T13:48:05+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/10/new-traverse-city-user-group-northern-michigan-web-and-mobile-meetup</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;After we moved back home in Elk Rapids Michigan, one thing that I acutely missed was the number of user groups we had in West Michigan. Don&#39;t get me wrong, West Michigan doesn&#39;t have nearly as many compared to a metropolitan hub. In Chicago they even have a &lt;a href=&quot;http://groups.google.com/group/vimchicago&quot;&gt;VIM Usergroup&lt;/a&gt;. But West Michigan did a lot of events going on, and active communities around them.&lt;/p&gt;

&lt;p&gt;Instead of lamenting about what&#39;s missing, I decided to put together my own user group up here. Enter the &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/&quot;&gt;Northern Michigan Web and Mobile Meetup&lt;/a&gt; which will have it&#39;s first event in two weeks at &lt;a href=&quot;http://www.meetup.com/nmich-web-mobile/calendar/15108620/&quot;&gt;6:00 PM October 28th&lt;/a&gt; at &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=citymac+in+traverse+city&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=56.59387,91.230469&amp;amp;ie=UTF8&amp;amp;hq=citymac&amp;amp;hnear=Traverse+City,+Grand+Traverse,+Michigan&amp;amp;z=13&amp;amp;iwloc=A&quot;&gt;CityMac&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have ideas on the direction and the topics this group could discuss, however I&#39;m sure after a few months we&#39;ll hit a groove and discover what the group&#39;s focus is going to be.&lt;/p&gt;

&lt;p&gt;So if you&#39;re in the Traverse City area on the 28th and feel like talking geeky feel free to drop by! Make it a point to seek me out and introduce yourself, I love meeting fellow tech geeks.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New Company, New Look</title>
   <link href="http://connectionrequired.com/blog/2010/10/new-company-new-look"/>
   <updated>2010-10-14T11:37:13+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/10/new-company-new-look</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ve blogged at Simple Chatter for a few years, but now it feels like a good time to retire that domain and roll it into a newer fresher look. Oh and while we&#39;re at it, why don&#39;t we create a new company?&lt;/p&gt;

&lt;p&gt;World, meet Connection Required; Connection Required, meet the World!&lt;/p&gt;

&lt;p&gt;This site will continue to be fleshed out in the coming weeks, but feel free to take a gander. And if you have a Ruby/Rails or iOS project in mind, feel free to &lt;a href=&quot;/contact&quot;&gt;drop me a line&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://www.visualhero.com/&quot;&gt;visual hero crew&lt;/a&gt; did a great job on the design.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I think Twitter's OAuth-only Access is a Waste of Time</title>
   <link href="http://connectionrequired.com/blog/2010/09/i-think-twitters-oauth-only-access-is-a-waste-of-time"/>
   <updated>2010-09-03T19:41:57+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/09/i-think-twitters-oauth-only-access-is-a-waste-of-time</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I don&#39;t normally write sensationalist articles, but today I&#39;m going depart from the norm and make a bold claim: I think Twitter&#39;s &lt;a href=&quot;http://blog.twitter.com/2010/08/twitter-applications-and-oauth.html&quot;&gt;change to OAuth-only authentication&lt;/a&gt; is a waste of time for developers and businesses.&lt;/p&gt;

&lt;p&gt;Don&#39;t get me wrong, I think the &lt;a href=&quot;http://oauth.net/core/1.0/&quot;&gt;OAuth spec&lt;/a&gt; is slick and has very good intentions at it&#39;s core. Nor am I knocking it out of inexperience, as I&#39;ve been building OAuth based applications for the past 6 months. However my primary gripe with Twitter&#39;s OAuth-only stance boils down to &lt;a href=&quot;http://dev.twitter.com/pages/xauth&quot;&gt;xAuth&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For those of you that aren&#39;t familiar with Twitter&#39;s recent change, before September 1st you could access their API by passing across your twitter username and password. This was fine if you were using your own credentials, however the Twitter ecosystem is rather large, and most people who interact with Twitter do it via a &lt;a href=&quot;http://itunes.apple.com/us/app/twitter/id333903271?mt=8&quot;&gt;3rd&lt;/a&gt; &lt;a href=&quot;http://iconfactory.com/software/twitterrific&quot;&gt;party&lt;/a&gt; &lt;a href=&quot;http://cotweet.com/&quot;&gt;service&lt;/a&gt;. The security issue is handing your password to an untrusted source. As of September 1st however, developers are only allowed to access the API using &lt;a href=&quot;http://dev.twitter.com/pages/auth_overview&quot;&gt;OAuth&lt;/a&gt;, which requires you to give your username and password &lt;em&gt;only&lt;/em&gt; to Twitter and then Twitter will authorize the application on your behalf. Even I admit, the protocol is rather elegant. When it comes to Web applications, I can hardly argue the security. The user is already in a browser and being directed to Twitter and back mostly only fires up User Experience guys.&lt;/p&gt;

&lt;p&gt;However, I have a huge issue with &lt;a href=&quot;http://dev.twitter.com/pages/xauth&quot;&gt;xAuth&lt;/a&gt;. xAuth is Twitter&#39;s solution to applications that have a large number of passwords already stored and allows the developers to convert them to OAuth-friendly keys behind the scenes. Well, from what I gather, that was the intended purpose. However there are many mobile Twitter applications out there &lt;em&gt;only&lt;/em&gt; are using xAuth. Why does this tick me off?&lt;/p&gt;

&lt;p&gt;1) As a user, I&#39;m still giving my password to the application. The application is not &lt;em&gt;supposed&lt;/em&gt; to store the credentials, however this is un-enforceable. At this point I&#39;m only safe-guarded against applications that have their passwords stolen. I won&#39;t deny that&#39;s an issue, but not enough to force all developers to go OAuth-only.&lt;/p&gt;

&lt;p&gt;2) Even &lt;a href=&quot;http://itunes.apple.com/us/app/twitter/id333903271?mt=8&quot;&gt;Twitter&#39;s official client&lt;/a&gt; requires me to hand over my password. If Twitter is going to take the stance that all API usage is going to go through OAuth, I think they should eat their own dog food and redirect me to a mobile browser.&lt;/p&gt;

&lt;p&gt;Do I dislike OAuth? Certainly not. And I know Twitter has some brilliant talent. But if Twitter is going to make OAuth vs Basic Auth this big of a priority, I think they are missing mark by moving a lot of applications to xAuth.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;You can also discuss this further on &lt;a href=&quot;http://news.ycombinator.com/item?id=1660851&quot;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A Public Comment To Those Enabling Abuse</title>
   <link href="http://connectionrequired.com/blog/2010/08/a-public-comment-to-those-enabling-abuse"/>
   <updated>2010-08-31T14:01:16+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/08/a-public-comment-to-those-enabling-abuse</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Michelle Greer &lt;a href=&quot;http://www.michellesblog.net/blogs/my-challenge-to-michael-arrington-techcrunch-hint-its-not-hard&quot;&gt;recently wrote about viscous online comments on TechCrunch&lt;/a&gt;. Unfortunately, over the years I&#39;ve seen a few ugly incidents where a female was singled out online and verbally attacked. To me, there is one thing worse than these gut-less commenters: it&#39;s telling a minority to &quot;suck it up&quot; or &quot;don&#39;t take it personal&quot; or &quot;that&#39;s just the way it is&quot; or &quot;quit whining&quot;.&lt;/p&gt;

&lt;p&gt;If you&#39;re someone who tells a minority to ignore abuse, you need to seriously reconsider your position. Because it is sickening.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>You're running a marathon</title>
   <link href="http://connectionrequired.com/blog/2010/08/running-a-marathon"/>
   <updated>2010-08-30T19:50:28+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/08/running-a-marathon</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ll be the first to admit it: I can work myself to death. Paul Boag recently wrote a great article about the &lt;a href=&quot;http://boagworld.com/random/work-less&quot;&gt;false &quot;badge of honor&quot;&lt;/a&gt; regarding long hours in the tech field. I love what I do, and I am continuously grateful that I am able to make a decent living in software. But I&#39;m also prone to burnout.&lt;/p&gt;

&lt;p&gt;His article really hits home for me because I&#39;ve been burnt out a couple times in the past. I&#39;m still trying to improve my self-awareness, but unfortunately burnout is like bad breath: generally the people around you notice first. So far my main red flag has been &quot;Do I feel like I&#39;m sprinting from task to task?&quot; Despite what some startups believe, running a company is a marathon.&lt;/p&gt;

&lt;p&gt;Over the years, I&#39;ve been approached by numerous people asking how they can break into software. How hard is it? How smart do you have to be? Which language is best? My main answer is always: to succeed in software you have to enjoy what you do and you have to be persistent. Software changes monthly, and sometimes it feels daily. At first enthusiasm will carry you through long hours reading and playing with new libraries and frameworks. But when you start picking up your 5th language and your 15th web framework, your motivation is primarily going to come from enjoyment. The key is realize you&#39;re not sprinting to an finish line. You&#39;re running a life-long marathon. I think the same philosophy applies to succeeding in business.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I almost edited the previous paragraph to say &quot;career-long&quot;, yet when I quantify how many hours of my life will be spent earning a living, labeling it &quot;career-&quot; just doesn&#39;t seem appropriate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is nothing wrong with hard work and I am certainly not promoting laziness. However over-committing yourself or coming home unhappy is a recipe for disaster. Make yourself take enjoyment from your work and from outside of work. And if you can&#39;t, I wish for you the courage to make the necessary changes.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Client Satisfaction and Resources</title>
   <link href="http://connectionrequired.com/blog/2010/08/client-satisfaction-and-resources"/>
   <updated>2010-08-24T14:47:20+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/08/client-satisfaction-and-resources</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ve heard the argument &quot;it takes Resources to provide good Client Satisfaction&quot; and I simply have to disagree. &lt;em&gt;Great&lt;/em&gt; client satisfaction has to come first, and the resources will follow. I also believe that companies who take this stance will often re-use those resources to provide even better client satisfaction.&lt;/p&gt;

&lt;h2&gt;Bargains&lt;/h2&gt;

&lt;p&gt;When most people think about making their clients happy, they think about bargains. A bargain is simply the same services at a reduced price. And that certainly is one factor in making clients happy, since who doesn&#39;t like saving money? Sadly, I think bargains are the first to come mind because they are so easy compared to the alternatives. &quot;I&#39;ll just slash my prices and more clients will come.&quot; However there are other ways to provide value and make clients happier without taking a hit on price.&lt;/p&gt;

&lt;h2&gt;Craftsmanship&lt;/h2&gt;

&lt;p&gt;Some clients heavily prefer the quality of the service or product. If I&#39;m in the market for a high-end acoustical guitar, I&#39;m going to favor the quality of a guitar over the one with the best deal. This resonates strongly with software in the form design and often overlooked practices such as automated testing.&lt;/p&gt;

&lt;h2&gt;Listening and Solving the Real Problem&lt;/h2&gt;

&lt;p&gt;One of the most effective strategies I&#39;ve found is: listen to the client and focus on solving the problem at hand. When I say &quot;listen&quot;, I don&#39;t mean &quot;hear the sounds coming from their mouth&quot;, I mean &lt;em&gt;really&lt;/em&gt; listen to both what they are saying, and what they aren&#39;t. There are many clients out there who will pass on a bargain if it only partially solves their problem. I constantly hear stories from both other developers and clients about scenarios where developers ignored the problem at hand, and decided to solve a different one. They may work on an optimization issue when performance is acceptable, or decide to roll the work into an open source project when a specific and custom solution is really what&#39;s needed. Or build an exquisitely elegant design, that even I admire, yet it does not do what is requested.&lt;/p&gt;

&lt;p&gt;This is not just applied to software. A friend of mine owns a couple local pizza and ice-cream parlors and he shared his experience: The best way to help an upset customer is simply to listen to them. Most of the time they&#39;re not wanting their money back or a coupon. They just want to know that their voice was heard and respected.&lt;/p&gt;

&lt;p&gt;I always laugh at how appropriate this SNL clip is:&lt;/p&gt;

&lt;object width=&quot;512&quot; height=&quot;288&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.hulu.com/embed/8K3jmsS5ay9KB3yX06Q17Q&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.hulu.com/embed/8K3jmsS5ay9KB3yX06Q17Q&quot; type=&quot;application/x-shockwave-flash&quot;  width=&quot;512&quot; height=&quot;288&quot; allowFullScreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;


&lt;h2&gt;Experience&lt;/h2&gt;

&lt;p&gt;Sometimes clients just want a memory to cherish. A couple years back, my wife and I decided to go to a &lt;a href=&quot;http://www.ruthschris.com/&quot;&gt;Ruth&#39;s Chris Steak House&lt;/a&gt; and we were amazed at the dining experience. It was certainly one we won&#39;t forget. When we were in Portland, we also had a fantastic night at &lt;a href=&quot;http://www.portlandcitygrill.com&quot;&gt;the City Grill on the 30th floor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In software, that&#39;s exactly the purpose field user experience design. Certain applications thrive by continuing to improve their interface to be as simple and effective as possible. Other applications thrive by removing options and choices from their customer base. A recent post by &lt;a href=&quot;http://www.dilbert.com/blog/entry/the_less_feature/&quot;&gt;Scott Adams specifically addresses this point&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;None of these points take significant resources to do well, and each of these can be improved with additional resources. Please share any successes or failures you&#39;ve found. I&#39;d love to hear them.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://news.ycombinator.com/item?id=1629929&quot;&gt;You can also discuss this post on Hacker News&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Clients that Care</title>
   <link href="http://connectionrequired.com/blog/2010/08/clients-that-care"/>
   <updated>2010-08-03T15:08:25+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/08/clients-that-care</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Whenever a client hires me, I make it a very specific point not to bring baggage to the table. Whether it&#39;s other project scheduling issues, family schedules, strong toolset opinions, or any other demands on a freelancer&#39;s time or mental-space. Some clients will gracefully deal with a freelancer&#39;s baggage, but I&#39;ve found that most clients would rather not have to concern themselves with it. As a result I work hard to guard my clients from that stress.&lt;/p&gt;

&lt;p&gt;However, some baggage does inevitably come through. During the middle of July, we had a family emergency and I needed to immediately take off a couple weeks. Keep in mind two of the projects I was on were planning on launching at the end of July. So going offline that abruptly was a significant disruption.&lt;/p&gt;

&lt;p&gt;I talked with each of my clients individually and I was relieved that they all took it well. After my first week out though, I was shocked at how thoughtful some of the emails/IMs/and Phone calls were. Here are a few snippets that I received:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&quot;Just wanted to check in and make sure you were doing ok. Again, let us know if there&#39;s anything we can do.&quot;&lt;/p&gt;

&lt;p&gt;&quot;Obviously, do what you need to do for yourself. If that&#39;s work I&#39;ll be happy to keep you busy... We&#39;d like to send some flowers...&quot; (In response to me mentioning I may work on a feature to keep my mind busy)&lt;/p&gt;

&lt;p&gt;&quot;Take care and as much time as you need.&quot;&lt;/p&gt;

&lt;p&gt;&quot;Please take the time you need.&quot;&lt;/p&gt;

&lt;p&gt;&quot;Nothing comes before family. Take your time, when you&#39;re ready to start back up just let me know. No rush.&quot;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I&#39;ve come to appreciate that my ideal client is not just a cool project nor a large budget, but instead a rich relationship. I feel very blessed that all of my clients are so considerate because there are many others out there who aren&#39;t.&lt;/p&gt;

&lt;p&gt;Thank you Mike, Dana, Orlando, McHughson, Daniel, and Nicholas.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why should I do business with you?</title>
   <link href="http://connectionrequired.com/blog/2010/06/why-should-i-do-business-with-you"/>
   <updated>2010-06-17T12:58:36+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/06/why-should-i-do-business-with-you</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;All things being equal, people want to do business with their friends.&lt;/p&gt;

&lt;p&gt;All things being not quite equal, people STILL want to do business with their friends.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;- Jeffrey Gitomer in &lt;a href=&quot;http://www.amazon.com/Little-Red-Book-Selling-Principles/dp/1885167601&quot;&gt;The Little Red Book of Selling&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I love this quote and &lt;a href=&quot;http://www.amazon.com/Little-Red-Book-Selling-Principles/dp/1885167601&quot;&gt;this book&lt;/a&gt;. &lt;a href=&quot;http://opensoul.org/&quot;&gt;Brandon Keepers&lt;/a&gt; posed a question over a couple beers (well OK, maybe more than a couple beers):&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;If a client asks you: &quot;Why should I do business with you?&quot;, how would you answer?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It was a great question. I took a long pull of my &lt;a href=&quot;http://newhollandbrew.com/corp/beer&quot;&gt;Poet&lt;/a&gt; and stammered an answer. After thinking about the question a couple days, here&#39;s my (sober) answer &quot;because I&#39;m honest, I work very hard, and I have a blast doing what I do&quot;.&lt;/p&gt;

&lt;p&gt;Here&#39;s the longer version:&lt;/p&gt;

&lt;h2&gt;Differentiators&lt;/h2&gt;

&lt;p&gt;I consider the following as ways for a company to set themselves apart from their competitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost&lt;/strong&gt; : How much does it cost for your services or for your product?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expertise and Experience&lt;/strong&gt; : How much experience do you have with the tools you&#39;re working with and the problems you&#39;re working on? Are you considered a leader in your community?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Influence&lt;/strong&gt; : Do you have an audience that your clients also wants to connect with? Do you have certain investment or new business contacts that your clients want you to make introductions?&lt;/p&gt;

&lt;h2&gt;Fundamentals&lt;/h2&gt;

&lt;p&gt;These are the fundamentals I feel successful businesses have to address if they want to provide value for their clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authenticity&lt;/strong&gt; : Are you honest are you about what you&#39;re selling and your ability to meet certain commitments?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hard Work&lt;/strong&gt; : Do you care about what you&#39;re doing and more importantly who you&#39;re doing it for? What is the quality of your work? How often do you put yourself in your client&#39;s shoes to better serve their needs?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Great Attitude&lt;/strong&gt; : Are you fun to work with? Do your clients dread picking up the phone or having you drop by or do they walk away with a better attitude? Do you make your clients feel ignorant when they ask questions? Do you listen to feedback well?&lt;/p&gt;

&lt;h2&gt;Mixed Priorities&lt;/h2&gt;

&lt;p&gt;I see many companies focusing on ways to differentiate themselves and ignore the fundamentals at the same time. Don&#39;t get me wrong, I think the differentiators are great, but only when they build from the fundamentals.&lt;/p&gt;

&lt;p&gt;I&#39;m a reasonably smart guy, and I&#39;ve been around the block many times building applications using Ruby/Rails. But my experience, my network, and even my cost are all secondary to providing &lt;strong&gt;value&lt;/strong&gt; through hard work and honesty. As well as being able to do it in a way that makes it a lot of fun for both my clients and myself.&lt;/p&gt;

&lt;h2&gt;I want to hear from you&lt;/h2&gt;

&lt;p&gt;What I love about this outlook is that there are no barriers to the doing the fundamentals well. They are difficult to do well, hell I&#39;m constantly learning new ways to better apply them, but you can start immediately. Your experience, expertise and network are all built over time.&lt;/p&gt;

&lt;p&gt;What has been your experience? I want to hear from both companies who provide their services as well as from clients who have had great and less-than-great interactions.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nginx is extremely performant</title>
   <link href="http://connectionrequired.com/blog/2010/06/nginx-is-extremely-performant"/>
   <updated>2010-06-11T17:10:16+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/06/nginx-is-extremely-performant</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;A couple days ago I wrote an article about &lt;a href=&quot;/2010/06/i-am-far-from-unemployed&quot;&gt;perceptions I&#39;ve encountered as a freelancer&lt;/a&gt;. The article took off on &lt;a href=&quot;http://news.ycombinator.com/&quot;&gt;Hacker News&lt;/a&gt;, which a great feeling.&lt;/p&gt;

&lt;p&gt;I received several thousand page views in the process. At first I was like &quot;Wow!&quot; and that quickly turned into &quot;Oh crap...&quot; I wasn&#39;t sure if my server hosting this blog would be able to handle that amount of traffic. But &lt;a href=&quot;http://nginx.org/&quot;&gt;Nginx&lt;/a&gt; handled it like a champ.&lt;/p&gt;

&lt;p&gt;When I setup this blog, I found an excellent How-To article on setting up Wordpress on Nginx using FastCGI from &lt;a href=&quot;http://elasticdog.com/2008/02/howto-install-wordpress-on-nginx/&quot;&gt;Aaron Schaefer&lt;/a&gt;. At the time this blog was using 5 PHP CGI processes and wasn&#39;t using any form of Wordpress page caching, however neither memory nor CPU broke a sweat. And I&#39;m only running on a few hundred MBs.&lt;/p&gt;

&lt;p&gt;I don&#39;t think Nginx is a perfect fit in every instance, however I&#39;m really pleased with the results. I definitely recommend it to anyone else who is on the fence.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I am far from unemployed</title>
   <link href="http://connectionrequired.com/blog/2010/06/i-am-far-from-unemployed"/>
   <updated>2010-06-09T12:13:55+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/06/i-am-far-from-unemployed</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Monday was the beginning of my third week working independent. And these three weeks have been a lot of fun. Very busy, but fun. However one thing that surprised me was the reaction from others when they asked what I do for a living.&lt;/p&gt;

&lt;p&gt;The most typical reaction I have been getting from local friends and acquaintances who are full time employees is sympathy. Phrases like &quot;Well you gotta do what you gotta do.&quot; or &quot;Things will turn around, the economy is improving.&quot;&lt;/p&gt;

&lt;p&gt;No no &lt;strong&gt;NO!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;chose&lt;/em&gt; this path. I wasn&#39;t forced to go independent as a result of a layoff or the inability to find full time employment. I love what I do and I love that I am able to help other businesses who need my skills and experience.&lt;/p&gt;

&lt;p&gt;This reminds me of a blog post a friend shared years ago, that has now been lost, which described an Entrepreneur&#39;s move from the Midwest to the West Coast. He too was taken back at the differences in reactions. Generally a Midwest-ern would say something out of pity or look at him as if he were jobless. While the people he talked to in the West Coast would get excited and share their own dreams of starting something new.&lt;/p&gt;

&lt;p&gt;I am far from unemployed and so are the plethora of other software freelancers out there. Sure we may have downtime, but that is just one part of our world. So the next time you are talking to someone who mentions they are independent, and you feel sorry for them, mentally check yourself. If you like the guy or gal, ask for their business card and pass it to someone you think would need their services or tweet/blog about the great interaction you had with them.&lt;/p&gt;

&lt;p&gt;I appreciate that way more than sympathetic encouragement.&lt;/p&gt;

&lt;h3&gt;Update 6/12/2010&lt;/h3&gt;

&lt;p&gt;This article took off on Hacker news and there was a lot of &lt;a href=&quot;http://news.ycombinator.com/item?id=1416883&quot;&gt;great feedback&lt;/a&gt; both for and against this post.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Big Changes. Going Independent.</title>
   <link href="http://connectionrequired.com/blog/2010/05/big-changes-going-independent"/>
   <updated>2010-05-24T17:30:12+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/05/big-changes-going-independent</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;h2&gt;What&#39;s the news?&lt;/h2&gt;

&lt;p&gt;Starting this week, I&#39;m putting out my shingle ... I&#39;m going independent ... and I&#39;m praying I won&#39;t starve.&lt;/p&gt;

&lt;p&gt;I feel blessed with the opportunities I&#39;ve encountered along my journey, and lately I have had a strong urge to strike out on my own. I want to experience what it&#39;s like to be an independent business owner, and I am excited for the opportunity to work with extremely smart developers as I continue this path.&lt;/p&gt;

&lt;p&gt;I&#39;m also curious if I will come to love this new freedom or if I&#39;ll hang myself with it.&lt;/p&gt;

&lt;h2&gt;But why are you leaving Elevator Up?&lt;/h2&gt;

&lt;p&gt;Elevator Up has been such a great experience. Both Aaron and Dayna are great guys and they truly care about both their employees and their clients.&lt;/p&gt;

&lt;p&gt;One thing I really appreciate about my experience at Elevator Up has been my exposure to many different communities and business models. Even though I&#39;m going independent, I don&#39;t feel like I&#39;m leaving Elevator Up, but instead that I&#39;m staying focused on the development community to which I feel the most attached.&lt;/p&gt;

&lt;p&gt;This transition allows me to stay specialized in the my sphere while at the same time still being able to work with the gang at Elevator Up in areas where my strengths shine. It also allows me to engage with clients that may not have originally been a good fit for Elevator Up, but then allow me to bring Elevator Up into the conversation as they grow.&lt;/p&gt;

&lt;p&gt;Aaron once said the phrase &quot;Just because you work independent, doesn&#39;t meant you work alone&quot; and I&#39;m pumped that I am continuing my relationship with Elevator Up, but in just a different light.&lt;/p&gt;

&lt;h2&gt;Ok, what do you &lt;em&gt;really&lt;/em&gt; think about Elevator Up?&lt;/h2&gt;

&lt;p&gt;Just that, Elevator Up is a great place to work and a great family. I think the people who know me best know that I&#39;m too honest to say it any other way. And frankly, I don&#39;t have the energy to put up a false ruse.&lt;/p&gt;

&lt;p&gt;I&#39;m excited for this next adventure, and I&#39;m grateful for the support of my Wife, my friends, and especially my family at Elevator Up.&lt;/p&gt;

&lt;p&gt;If you want to talk more about my transition or have any Ruby/Rails projects feel free to &lt;a href=&quot;/about&quot;&gt;read about my experience&lt;/a&gt; and send me an email at zach -dot- moazeni -at- gmail -dot- com.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Great perspective on incentive and value</title>
   <link href="http://connectionrequired.com/blog/2010/05/great-perspective-on-incentive-and-value"/>
   <updated>2010-05-20T16:08:03+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/05/great-perspective-on-incentive-and-value</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;&quot;Finally, I don&amp;rsquo;t think there&amp;rsquo;s much value in arguing over who has the most incentive to create good products. The point is you&amp;rsquo;ll be better off in the long-term if you delivery high-value high-quality products, regardless of whether you&amp;rsquo;re a consultancy, startup, or enterprise shop.&quot;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;-- &lt;a href=&quot;http://www.patmaddox.com/&quot;&gt;Pat Maddox&lt;/a&gt; on &lt;a href=&quot;http://www.patmaddox.com/2010/05/19/are-you-punching-your-users-in-the-face/&quot;&gt;Are you punching your users in the face?&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Review: Crucial Conversations</title>
   <link href="http://connectionrequired.com/blog/2010/05/review-crucial-conversations"/>
   <updated>2010-05-18T01:55:08+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/05/review-crucial-conversations</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Months ago I shared my difficulties with leading others and sharing opinions effectively with Josh Little from &lt;a href=&quot;http://www.bloomfire.com/&quot;&gt;Bloomfire&lt;/a&gt;. He recommended I pick up the book &lt;a href=&quot;http://www.amazon.com/dp/0071401946?tag=tibesti-20&quot;&gt;Crucial Conversations&lt;/a&gt; and even mentioned he has had to re-read it many times over the years. It was the first book I finished on my vacation, and I am very grateful for his recommendation.&lt;/p&gt;

&lt;p&gt;After the first few pages, I was initially put off by the number of buzzwords and new vocabulary (e.g. &quot;shared pool of meaning&quot;). I often get turned off with authors who would rather invent vague terminology than give clear meaning. However despite the capitalization, I felt the book provided great insight.&lt;/p&gt;

&lt;p&gt;Some especially key take-aways for me were:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reaffirmation to first improve myself especially since it&#39;s much easier than trying to change others.&lt;/li&gt;
&lt;li&gt;The differences between content and context. I certainly get bogged down with specifically what someone says rather than thinking about their frame of mind. Or what they&#39;re not saying and merely hinting at.&lt;/li&gt;
&lt;li&gt;Highlighting the connection between open dialogue and a safe environment, with steps on helping set the context in a safe way.&lt;/li&gt;
&lt;li&gt;The differences between apologizing vs contrasting, and when apologizing is and isn&#39;t appropriate. This book helped me realize that I&#39;ve used apologizing as a social crutch rather than expressing regret over a transgression.&lt;/li&gt;
&lt;li&gt;I liked the authors opinion on attitude, and how someone else doesn&#39;t change your attitude, you ultimately control your attitude and your actions that result from it.&lt;/li&gt;
&lt;li&gt;I think the authors did a great job emphasizing the scenarios of how conversations could be handled better. They didn&#39;t just throw out their points for their readers to interpret alone.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;And for my biggest take-away: I appreciated that the book focused more on positive, open-minded dialogue and not subversive techniques to manipulate someone else. The points in the book were meant for the contentious and not for the silver-tongued. That just feels right to me.&lt;/p&gt;

&lt;p&gt;So along with Josh, I wholeheartedly recommend this book. I feel it can help bridge communication break downs between couples and peers alike.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My Vacation Reading</title>
   <link href="http://connectionrequired.com/blog/2010/05/my-vacation-reading"/>
   <updated>2010-05-15T14:41:06+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/05/my-vacation-reading</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Every time I go on an extended vacation I end up ripping through a half dozen books. It&#39;s probably because of a need to catch up on long overdue reading. Though I have noticed that it mentally refreshes me much more than watching episodes of &lt;a href=&quot;http://en.wikipedia.org/wiki/Lost_(TV_series&quot;&gt;LOST&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Here was this vacation&#39;s reading list. I&#39;m planning on writing up my summary for each of the books which were all good in their own way.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/uploads/2010/05/IMG_0489.jpg&quot;&gt;&lt;img src=&quot;/uploads/2010/05/IMG_0489.jpg&quot; alt=&quot;Crucial Confrontations, Book Yourself Solid, The Go-Giver, The Little Gold Book of Yes! Attitude, The Little Red Book of Selling&quot; title=&quot;Vacation Reading List&quot; width=&quot;500&quot; class=&quot;aligncenter size-full wp-image-291&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Muscle Memory</title>
   <link href="http://connectionrequired.com/blog/2010/04/muscle-memory"/>
   <updated>2010-04-15T01:48:01+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/04/muscle-memory</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Two years ago, I made the commitment to switch the &lt;a href=&quot;http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard&quot;&gt;Dvorak Layout&lt;/a&gt; and I think my wrists thank me. When I first started, I heard a lot of concern from others that learning Dvorak would harm their &lt;a href=&quot;http://en.wikipedia.org/wiki/QWERTY&quot;&gt;Qwerty&lt;/a&gt; typing. But I dismissed it as lazy FUD.&lt;/p&gt;

&lt;p&gt;After two years, I&#39;m admitting I was wrong.&lt;/p&gt;

&lt;h2&gt;Why do I still use Qwerty&lt;/h2&gt;

&lt;p&gt;I vastly prefer working in Dvorak, however there are plenty of scenarios when I need to work in Qwerty. Pair-programming and directly administering servers have been two recurring situations that force me to consistently finger-stutter.&lt;/p&gt;

&lt;h2&gt;What is it like?&lt;/h2&gt;

&lt;p&gt;I didn&#39;t forget Qwerty, but after working in Dvorak so long I have to take pauses when I switch. Or I&#39;ll rip through a word, only to realize I typed it in the other layout. Other annoyances pop out such as Copy/Paste, Mac Preferences (Dvorak uses the &lt;code&gt;W&lt;/code&gt; for &lt;code&gt;,&lt;/code&gt; which keeps closing windows), and Mac switching tabs (Dvorak uses &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;+&lt;/code&gt; for &lt;code&gt;[&lt;/code&gt;, and &lt;code&gt;]&lt;/code&gt; which keeps changing the font of Textmate/Terminal/Browsers).&lt;/p&gt;

&lt;p&gt;A different way of explaining these finger-stutters: I like to joke around when someone asks me a VIM command. I tell them &quot;I don&#39;t know, but my fingers do&quot;, and I typically will touch a keyboard, do the command they asked, then tell them the command.&lt;/p&gt;

&lt;h2&gt;What I&#39;ve been doing to fix this&lt;/h2&gt;

&lt;p&gt;So instead of using Dvorak exclusively, then jumping into Qwerty when pairing I&#39;ve resorted to picking a layout at the beginning of the day and working with it the entire day. This has helped keep my muscle memory in shape.&lt;/p&gt;

&lt;p&gt;I still have problems when switching in and out of Dvorak and Qwerty (e.g. one hour in one layout, then the next hour in the other layout). Perhaps over time I&#39;ll be able to easily switch between the two, but I&#39;m not there yet.&lt;/p&gt;

&lt;p&gt;If I notice I am hammering the DELETE key, I&#39;ll open up text pad and rip though a few &lt;a href=&quot;http://en.wikipedia.org/wiki/Pangram&quot;&gt;Panagrams&lt;/a&gt;. At first I used the common &quot;The quick brown fox...&quot;, but then I realized my fingers were committing that sentence to memory. So now I&#39;ll open up a site with &lt;a href=&quot;http://infinityandbeyond0.tripod.com/id15.html&quot;&gt;a list of panagrams&lt;/a&gt; and randomly select a few to type out.&lt;/p&gt;

&lt;h2&gt;Has learning Dvorak been worth it?&lt;/h2&gt;

&lt;p&gt;This is hard to answer, but I think so. Like I said I do vastly prefer the Dvorak layout, but I do think it&#39;s important to stay realistic that you&#39;ll have to occasionally use Qwerty. However maintaining muscle memory has been a lot more work than I originally guessed.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Harvested: A New Ruby API Wrapper</title>
   <link href="http://connectionrequired.com/blog/2010/04/harvested-a-new-ruby-api-wrapper"/>
   <updated>2010-04-11T18:17:02+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/04/harvested-a-new-ruby-api-wrapper</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ve used &lt;a href=&quot;http://www.getharvest.com/&quot;&gt;Harvest Time Tracking&lt;/a&gt; for well over 3 years, and they have a quality product. They have also had a published API for quite some time. The past couple weeks I&#39;ve been working on Ruby API wrapper for it, and today I&#39;ve pushed the first release.&lt;/p&gt;

&lt;h2&gt;Harvested&lt;/h2&gt;

&lt;p&gt;Harvested is a thin wrapper around their API based on HTTParty and HappyMapper.&lt;/p&gt;

&lt;p&gt;You can go grab and install it through RubyGems (make sure the Gemcutter source is set):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; gem install harvested
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A couple quick examples of how to use this API:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require &quot;harvested&quot;
harvest = Harvest.hardy_client(&#39;yoursubdomain&#39;, &#39;yourusername&#39;, &#39;userpassword&#39;, :ssl =&amp;gt; false)

# Print out all users, clients, and projects on the account
puts &quot;Users:&quot;
harvest.users.all.each {|u| p u }

puts &quot;Clients:&quot;
harvest.clients.all.each {|c| p c }

puts &quot;Projects:&quot;
harvest.projects.all.each {|project| p project }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;More examples are included in &lt;code&gt;/examples&lt;/code&gt; along with the gem.&lt;/p&gt;

&lt;h2&gt;Standard Client vs Hardy Client&lt;/h2&gt;

&lt;p&gt;The guys at Harvest built a great API, but there are always dangers in writing code that depends on an API. For example, HTTP Timeouts, Occasional Bad Gateways, and Rate Limiting issues need to be accounted for.&lt;/p&gt;

&lt;p&gt;There are two clients available in the gem, &lt;code&gt;client&lt;/code&gt; and &lt;code&gt;hardy_client&lt;/code&gt;. If you want to deal with the issues manually, feel free to use &lt;code&gt;client&lt;/code&gt; otherwise &lt;code&gt;hardy_client&lt;/code&gt; provides a friendly wrapper that retries errors and waits for rate limit resets.&lt;/p&gt;

&lt;h2&gt;Links&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://rdoc.info/projects/zmoazeni/harvested&quot;&gt;Harvested Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://rubygems.org/gems/harvested&quot;&gt;Gem on Gemcutter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/zmoazeni/harvested&quot;&gt;Source Code on Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.getharvest.com/api&quot;&gt;Harvest API Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.google.com/group/harvested&quot;&gt;Mailing List for Harvested&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Update - 4/12/2010&lt;/h2&gt;

&lt;p&gt;I started documenting the codebase, so I added a link to the &lt;a href=&quot;http://rdoc.info&quot;&gt;rdoc.info&lt;/a&gt; documentation.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reflections of an Adjunct Professor</title>
   <link href="http://connectionrequired.com/blog/2010/04/reflections-of-an-adjunct-professor"/>
   <updated>2010-04-07T02:51:59+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/04/reflections-of-an-adjunct-professor</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;This past semester I had the opportunity to teach the Advanced Java course at &lt;a href=&quot;http://www.grcc.edu/&quot;&gt;GRCC&lt;/a&gt;. Teaching at the college level has been something I&#39;ve wanted to experience for a while and it is also quite aligned with &lt;a href=&quot;/vision-statement&quot;&gt;my values&lt;/a&gt;. While I was excited to start the semester, I was a bit nervous at how my first class would turn out. As the semester progressed, I kept a list of failures and successes that would help me grow as a teacher. I hope this list helps other instructors as they start their career.&lt;/p&gt;

&lt;h3&gt;Using Different Tools&lt;/h3&gt;

&lt;p&gt;One decision I made early on was that I would never use PowerPoint. I think the static nature of PowerPoint slides completely disengage students and detract from the learning experience. I was lucky to be introduced to &lt;a href=&quot;http://prezi.com/&quot;&gt;Prezi&lt;/a&gt; months prior from a friend, and at the time I knew it would be a great alternative to boring slides.&lt;/p&gt;

&lt;p&gt;For instructors that haven&#39;t created a screencast before, I strongly recommend investigating them. I used &lt;a href=&quot;http://www.ambrosiasw.com/utilities/snapzprox/&quot;&gt;SnapXPro&lt;/a&gt; and &lt;a href=&quot;http://vimeo.com/&quot;&gt;Vimeo&lt;/a&gt;, but there are many other alternates out there.&lt;/p&gt;

&lt;p&gt;Google Docs was a great aid in creating Labs and Surveys. Legos were excellent in illustrating concurrency, especially regarding context-switching. Omnigraffle and Apple Screen Shots were also a big boon when creating my lectures.&lt;/p&gt;

&lt;h3&gt;Time Spent Preparing for Classes&lt;/h3&gt;

&lt;p&gt;I was repeatedly warned by seasoned instructors that the first class is the hardest. But I was completely taken back at how much time I would spend preparing for lectures. The course I taught didn&#39;t have a prior curriculum, and it went against my nature just to teach directly from a textbook. Yet I spent around 5-6 hours a week just putting together the lecture and the accompanying lab.&lt;/p&gt;

&lt;p&gt;A lot of time was spent on planning the goals of the lectures, preparing them on &lt;a href=&quot;http://prezi.com/&quot;&gt;Prezi&lt;/a&gt;, creating the labs, and grading the previous week&#39;s labs. I worked hard to craft labs that didn&#39;t just evaluate whether the student understood the concept, but supplemented the learning experience from the lecture.&lt;/p&gt;

&lt;p&gt;I approximate I&#39;ve spent on average 12 hours a week to prepare for a one night-a-week course.&lt;/p&gt;

&lt;h3&gt;Going Over Prepared Material&lt;/h3&gt;

&lt;p&gt;I found early on that not going over the material you&#39;ve prepared can really bite you. It helped tremendously to write the solution code to the labs before I gave them the assignments. There was always something I needed to tweak in terms of problem descriptions. Even though I consider myself a good developer, if I just put together an assignment without fleshing out a solution myself, the resulting code would become tedious and lose the original intent.&lt;/p&gt;

&lt;p&gt;One requirement as innocuous as &#39;Format a collection of strings so the output results in: &quot;string1, string2, string3 and string4.&quot;&#39; had students spending the majority of their time in the wrong area which in turn clouded the lesson.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Oddly enough, that requirement worked well when teaching Unit Testing.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;Office Hours&lt;/h3&gt;

&lt;p&gt;I think I was one of the few adjuncts who offered office hours. Working at &lt;a href=&quot;http://elevatorup.com&quot;&gt;Elevator Up&lt;/a&gt; I took advantage of our great space at &lt;a href=&quot;http://workthefactory.com&quot;&gt;The Factory&lt;/a&gt; and posted weekly office hours. Despite the Holland-to-GR commute, office hours were an excellent opportunity to have a regular checkpoint for myself to focus on the class. Every Thursday evening from 5 - 7 I knew I would be working on my class.&lt;/p&gt;

&lt;p&gt;Some instructors mention that students don&#39;t take advantage of their office hours. I had students show up about 50% of the time. I do think that scheduling can be important though. I had a few students mention that they had another class or had to work during those hours, and for those I was very clear that I would make myself available for scheduling issues.&lt;/p&gt;

&lt;h3&gt;People Fall Asleep&lt;/h3&gt;

&lt;p&gt;I know students fall asleep in class. I even remember times when I did it. But boy is it a shock to be mid-sentence and spot one student nodding off and see another drooling. I think it took all of my willpower to stay focused on the lecture.&lt;/p&gt;

&lt;p&gt;To other new teachers, don&#39;t take it as an insult. Evening classes in warm rooms can bring down even the most alert. And mentally prepare yourself, because I was completely taken aback.&lt;/p&gt;

&lt;h3&gt;I love Kinkos&lt;/h3&gt;

&lt;p&gt;Most college offices have great equipment for making copies of exams and syllabuses, but I sure love Kinkos. For $10, they would take a PDF from a USB thumbdrive, print and staple many copies in less than 15 minutes. I know it sounds spoiled, but $10 for saving that time was well worth it to me.&lt;/p&gt;

&lt;h3&gt;Due Dates&lt;/h3&gt;

&lt;p&gt;I might have been described as a strict teacher in the way I accepted assignments. I had a simple rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full Credit was only awarded if the assignment was turned in before the next lecture started&lt;/li&gt;
&lt;li&gt;I would accept the assignment late 1 day for Half Credit&lt;/li&gt;
&lt;li&gt;I would not accept an assignment after 1 day late.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This does come across harsh, but I believe this stance carries it&#39;s own benefits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It helps teach the importance of time management.&lt;/li&gt;
&lt;li&gt;I wasn&#39;t bombarded by a slew of 3-week late assignments at the end of the semester.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Additionally, I held myself to the same standard. If I would require my students turn in assignments on time, I would hand them back on time.&lt;/p&gt;

&lt;p&gt;That being said, I do recommend keeping a pulse on the class. There was one instance where I was flexible and extended the deadline of a project 1 week, but I awarded extra credit for the students who turned in their work by the original deadline.&lt;/p&gt;

&lt;h3&gt;Pacing Concepts&lt;/h3&gt;

&lt;p&gt;Another lesson I learned early on was pacing. My early lectures made some pretty large leaps, and while they seemed fairly logical to me it dawned on me that I needed to slow down.&lt;/p&gt;

&lt;p&gt;That doesn&#39;t mean my students were slow, or that I went to the extreme to &#39;dumb down&#39; my lectures. However there is a sweet spot between being painstakingly redundant and breezing through concepts. This is still an area that I need to work on.&lt;/p&gt;

&lt;h3&gt;Connecting with Students&lt;/h3&gt;

&lt;p&gt;After realizing that I needed to work on pacing, I stumbled upon one of the biggest take-aways for me as an instructor: Connecting with Strangers. I am leading a group of strangers that I not only want to convey new material to, but I want to connect on a level that draws at that &#39;Aha!&#39; moment for each one of them. That is hard enough with an individual, let alone a classroom.&lt;/p&gt;

&lt;p&gt;This was a very humbling experience for me and I think one area in which I learned the most from my students. Good teachers connect with their students, they don&#39;t just lecture.&lt;/p&gt;

&lt;h3&gt;Final Thoughts&lt;/h3&gt;

&lt;p&gt;I had such a great experience teaching my first semester. I&#39;d like to thank my wife for bearing with me these past four months. Especially, so soon after our newborn. I&#39;d also like to thank my company &lt;a href=&quot;http://elevatorup.com&quot;&gt;Elevator Up&lt;/a&gt; for encouraging me to explore this avenue.&lt;/p&gt;

&lt;p&gt;I&#39;ve been asked if I will teach another class. If the opportunity presents itself, I may, but I now have more respect for the amount of effort teaching requires. Regardless, I did have fun and I learned more about myself and about communicating with others.&lt;/p&gt;

&lt;p&gt;I welcome feedback from other teachers and how their early experiences went.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Introduction to Rails Talk: GVSU Mobile Developers Group</title>
   <link href="http://connectionrequired.com/blog/2010/03/introduction-to-rails-talk-gvsu-mobile-developers-group"/>
   <updated>2010-03-03T01:23:59+00:00</updated>
   <id>http://connectionrequired.com/blog/2010/03/introduction-to-rails-talk-gvsu-mobile-developers-group</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Here is the Prezi talk I gave to the GVSU Mobile Developer User Group.&lt;/p&gt;

&lt;div class=&quot;prezi-player&quot;&gt;&lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object id=&quot;prezi_v0apok8pqf9x&quot; name=&quot;prezi_v0apok8pqf9x&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;550&quot; height=&quot;400&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://prezi.com/bin/preziloader.swf&quot;/&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;/&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#ffffff&quot;/&gt;&lt;param name=&quot;flashvars&quot; value=&quot;prezi_id=v0apok8pqf9x&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&quot;/&gt;&lt;embed id=&quot;preziEmbed_v0apok8pqf9x&quot; name=&quot;preziEmbed_v0apok8pqf9x&quot; src=&quot;http://prezi.com/bin/preziloader.swf&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;550&quot; height=&quot;400&quot; bgcolor=&quot;#ffffff&quot; flashvars=&quot;prezi_id=v0apok8pqf9x&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class=&quot;prezi-player-links&quot;&gt;&lt;p&gt;Published via &lt;a href=&quot;http://prezi.com&quot;&gt;Prezi&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

</content>
 </entry>
 
 <entry>
   <title>My First Introduction to Haskell Extensions: FlexibleInstances</title>
   <link href="http://connectionrequired.com/blog/2009/07/my-first-introduction-to-haskell-extensions-flexibleinstances"/>
   <updated>2009-07-27T00:28:53+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/07/my-first-introduction-to-haskell-extensions-flexibleinstances</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ve been tinkering with Haskell lately, and I came across an odd issue. Let&#39;s say I want to create a class that takes Integers, Characters, and Strings and returns an Integer.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Something a where
  doSomething :: a -&amp;gt; Integer

instance Something Integer where
  doSomething x = 1

instance Something Char where
  doSomething x = 2

instance Something [Char] where
  doSomething x = 3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Trying to load this into the interpreter (or compiling it) results in the an error on the &lt;code&gt;String&lt;/code&gt; (&lt;code&gt;[Char]&lt;/code&gt;)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Illegal instance declaration for `Something [Char]&#39;
  (All instance types must be of the form (T a1 ... an)
  where a1 ... an are type *variables*,
  and each type variable appears at most once in the instance head.
  Use -XFlexibleInstances if you want to disable this.)
In the instance declaration for `Something [Char]&#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This cryptic message essentially means that I can&#39;t make &lt;code&gt;[Char]&lt;/code&gt; an instance of the &lt;code&gt;Something&lt;/code&gt; class, but I could make &lt;code&gt;[a]&lt;/code&gt; one (a list containing any type)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;instance Something [a] where
  doSomething x = 3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;However that stinks because then I have to do a lot more work to differentiate between a list of characters (i.e. Strings) and a list of integers.&lt;/p&gt;

&lt;p&gt;The error message mentions a way to disable that check, and the helpful guys at &lt;a href=&quot;http://freenode.net/&quot;&gt;&lt;code&gt;#haskell&lt;/code&gt;&lt;/a&gt; gave me a hand.&lt;/p&gt;

&lt;p&gt;If you put this at the top of your source file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{-# LANGUAGE FlexibleInstances #-}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;you end up telling Haskell to load the extension &lt;code&gt;FlexibleInstances&lt;/code&gt; which allows you to differentiate between lists of characters, integers, or whatever else. Which allows you to load in:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-- in file TestingTypes.hs
{-# LANGUAGE FlexibleInstances #-}

class Something a where
  doSomething :: a -&amp;gt; Integer

instance Something Integer where
  doSomething x = 1

instance Something Char where
  doSomething x = 2

instance Something [Char] where
  doSomething x = 3

-- in ghci:
Prelude&amp;gt; :l TestingTypes.hs
[1 of 1] Compiling TestingTypes     ( TestingTypes.hs, interpreted )
Ok, modules loaded: TestingTypes.
*TestingTypes&amp;gt; doSomething 1
1
*TestingTypes&amp;gt; doSomething &#39;c&#39;
2
*TestingTypes&amp;gt; doSomething &quot;foo&quot;
3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nothing ground breaking, but I thought I&#39;d pass this tidbit along.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Not Enough Hours</title>
   <link href="http://connectionrequired.com/blog/2009/05/not-enough-hours"/>
   <updated>2009-05-22T16:30:42+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/05/not-enough-hours</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Yesterday I was in a bad mood. In my disgruntlement, I decided to do some simple math on the number of hours in a day.&lt;/p&gt;

&lt;p&gt;My average weekday is comprised of these activities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sleeping ~ 8hrs&lt;/li&gt;
&lt;li&gt;Working ~ 10hrs&lt;/li&gt;
&lt;li&gt;Miscellaneous - 3hrs (Driving, Showering, Checking Twitter)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That math only leaves a remainder of &lt;em&gt;3 hours a day&lt;/em&gt;. (24 - 8 - 10 - 3 = 3)&lt;/p&gt;

&lt;h3&gt;Quick Thoughts&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;That&#39;s...depressing.&lt;/li&gt;
&lt;li&gt;Less sleep could help, but probably ruin the quality of the rest of the hours.&lt;/li&gt;
&lt;li&gt;I need to become more selective what takes up my free time. Do I really need to watch that new episode of NCIS?&lt;/li&gt;
&lt;li&gt;I should check Twitter less&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Bigger Revelation&lt;/h3&gt;

&lt;p&gt;My weekends are extremely valuable, and there&#39;s no doubt I&#39;ve been using them ineffectively. If I had to guess, my typical weekend boils down to watching T.V. playing mindless games, and catching up on work. Well, not anymore.&lt;/p&gt;

&lt;p&gt;So I hope you enjoy this upcoming Memorial Day. Whether it&#39;s to relax with the family, crack open a new book, or just have &quot;alone time&quot;.&lt;/p&gt;

&lt;p&gt;I know I&#39;m planning on making it count.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Changed My Handle</title>
   <link href="http://connectionrequired.com/blog/2009/05/changed-my-handle"/>
   <updated>2009-05-19T12:34:27+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/05/changed-my-handle</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;ve used the handle &quot;zedder02&quot; for many many years and for many different applications. It has it&#39;s own history, but I think it&#39;s time to retire it.&lt;/p&gt;

&lt;p&gt;So now I&#39;m known as &quot;zmoazeni&quot;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Contributing to RailsBridge</title>
   <link href="http://connectionrequired.com/blog/2009/05/contributing-to-railsbridge"/>
   <updated>2009-05-17T19:17:55+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/05/contributing-to-railsbridge</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;h2&gt;Need Code Help?&lt;/h2&gt;

&lt;p&gt;I&#39;m really excited about the possibilities around &lt;a href=&quot;http://railsbridge.org/&quot;&gt;RailBridge&lt;/a&gt;. As a seasoned Ruby developer I will be offering code reviews on Rails and non-Rails code alike.&lt;/p&gt;

&lt;p&gt;Steps to ask for help are pretty easy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a &lt;a href=&quot;http://gist.github.com&quot;&gt;Github Gist&lt;/a&gt; with the code you want to go over.&lt;/li&gt;
&lt;li&gt;Ping either &lt;a href=&quot;http://groups.google.com/group/railsbridge&quot;&gt;RailsBridge&lt;/a&gt;, or ping me through &lt;a href=&quot;http://twitter.com/zmoazeni&quot;&gt;Twitter&lt;/a&gt; with the URL to the Gist and your contact information.&lt;/li&gt;
&lt;li&gt;Let&#39;s chat!&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;Universities and Colleges in the Michigan Area&lt;/h2&gt;

&lt;p&gt;If your Computer Science department wants seasoned Ruby/Rails developers to speak with your students or wants to offer RailsBridge community support to your students. Send me an email at zach -dot- moazeni -at- gmail -dot- com, I&#39;d love to speak with you.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Comments are back</title>
   <link href="http://connectionrequired.com/blog/2009/05/comments-are-back"/>
   <updated>2009-05-15T01:48:06+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/05/comments-are-back</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Well I finally got off my ass to port over the comments from Mephisto. Let me know if you find anything amiss.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New feed URL</title>
   <link href="http://connectionrequired.com/blog/2009/02/new-feed-url"/>
   <updated>2009-02-27T22:51:12+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/02/new-feed-url</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;Looks like FeedBurner/Google ended up shuffling some things around. You may need to update your readers to using either &lt;a href=&quot;http://simplechatter.com/feed/atom/&quot;&gt;http://simplechatter.com/feed/atom/&lt;/a&gt; or &lt;a href=&quot;http://feeds2.feedburner.com/simplechatter/&quot;&gt;http://feeds2.feedburner.com/simplechatter/&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Migrating to Wordpress</title>
   <link href="http://connectionrequired.com/blog/2009/02/migrating-to-wordpress"/>
   <updated>2009-02-27T22:43:03+00:00</updated>
   <id>http://connectionrequired.com/blog/2009/02/migrating-to-wordpress</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I&#39;m in the process of migrating from Mephisto to Wordpress. Everything should be up and running other than comments. Hopefully I&#39;ll get those wrapped up by the weekend.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tools for Remote Collaboration</title>
   <link href="http://connectionrequired.com/blog/2008/12/tools-for-remote-collaboration"/>
   <updated>2008-12-21T22:50:15+00:00</updated>
   <id>http://connectionrequired.com/blog/2008/12/tools-for-remote-collaboration</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;For those of you who don&#39;t know, Janson works in Seattle while Aaron and I work in Holland MI. Even though he&#39;s in Seattle, we&#39;re still able to work as if he were in the office. We&#39;ve had pretty good success with a few tools.&lt;/p&gt;

&lt;h3&gt;Skype and a good microphone&lt;/h3&gt;

&lt;p&gt;Multiple times a day we call Janson on &lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt; via our badass &lt;a href=&quot;http://www.bluemic.com/products/Snowball&quot;&gt;Snowball&lt;/a&gt;. This microphone rocks, and it&#39;s fairly inexpensive (around $100). It works so well that Janson is able to listen to the music we have playing in the office.&lt;/p&gt;

&lt;p&gt;Janson also picked up a &lt;a href=&quot;http://www.bluemic.com/products/Snowflake&quot;&gt;Snowflake&lt;/a&gt; which has worked great.&lt;/p&gt;

&lt;p&gt;I always thought video was key to remote collaborating, but I&#39;ve totally changed my mind. Audio is the first step. Often Janson and I will be working for over an hour via Skype and it feels like the other person is right next to you.&lt;/p&gt;

&lt;h3&gt;Writeboard&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://www.writeboard.com/&quot;&gt;Writeboards&lt;/a&gt; are a &lt;a href=&quot;http://www.37signals.com/&quot;&gt;37Signals&lt;/a&gt; product that are like a versioned document. We use these frequently for asynchronous collaboration.&lt;/p&gt;

&lt;p&gt;There are other alternatives to Writeboards, but we&#39;ve found that their low barrier of entry and textile support has helped a lot.&lt;/p&gt;

&lt;h3&gt;Campfire&lt;/h3&gt;

&lt;p&gt;Another form of text communication we use regularly are &lt;a href=&quot;http://www.campfirenow.com/&quot;&gt;Campfire chat rooms&lt;/a&gt;, another &lt;a href=&quot;http://www.37signals.com/&quot;&gt;37Signals&lt;/a&gt; product. These have been really helpful from pasting code snipbits, uploading shared files and privacy/guest access.&lt;/p&gt;

&lt;p&gt;All of us at &lt;a href=&quot;http://elevatorup.com&quot;&gt;Elevator Up&lt;/a&gt; are very familiar with &lt;a href=&quot;http://en.wikipedia.org/wiki/Irc&quot;&gt;IRC&lt;/a&gt;, and we may switch back to it someday, but Campfire gives us all the chat room features we need without hassle.&lt;/p&gt;

&lt;h3&gt;EtherPad&lt;/h3&gt;

&lt;p&gt;Last Monday &lt;a href=&quot;http://whycurious.tumblr.com/&quot;&gt;Janson&lt;/a&gt; came across &lt;a href=&quot;http://etherpad.com/&quot;&gt;EtherPad&lt;/a&gt; and oh boy it&#39;s a gem.&lt;/p&gt;

&lt;p&gt;When collaborating on a document we&#39;ve been using a combination of Writeboards/Campfire chats. They do the job, but there&#39;s a ton of &quot;Okay, I saved. Reload.&quot; or &quot;Hrm, I&#39;d rephrase it this way. Lemme copy/paste&quot; which gets rather annoying.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://etherpad.com/&quot;&gt;EtherPad&lt;/a&gt; on the other hand allows multiple people to be editing text at the same time. As far as I know, it&#39;s very similar to &lt;a href=&quot;http://www.codingmonkeys.de/subethaedit/&quot;&gt;SubEthaEdit&lt;/a&gt; but through the browser instead of with a client. It&#39;s helped us out tremendously especially when writing user stories.&lt;/p&gt;

&lt;p&gt;EtherPad is in a closed beta, but they are pretty quick to grant beta access. We&#39;ve only been using it for a week, and already consider it a part of our remote toolset.&lt;/p&gt;

&lt;h3&gt;VPN/SSH/Screen/Vim&lt;/h3&gt;

&lt;p&gt;Both Janson and I code in Textmate, but we both came from Vim. We&#39;ve toyed with using a VPN to SSH into the other&#39;s machine. Connect to a shared Screen session and code in Vim for Paired Programming. As of yet, we&#39;ve only done it a couple of times, and most of our issues are related to going back into the console for development.&lt;/p&gt;

&lt;p&gt;We were both amazed at the responsiveness with a shared session, though thinking back on it, there&#39;s very little traffic compared to other remote solutions. This is one of our rougher tools, but I wouldn&#39;t be surprised if we make this a permanent addition.&lt;/p&gt;

&lt;h3&gt;Where&#39;s VNC?&lt;/h3&gt;

&lt;p&gt;Surprisingly we don&#39;t use VNC that often. Sometimes we use it when we need to present to a client who is also remote, but that&#39;s fairly rare. We&#39;ve also found using screen capturing software like &lt;a href=&quot;http://www.ambrosiasw.com/utilities/snapzprox/&quot;&gt;SnapX Pro&lt;/a&gt; to do a better job when presenting remotely.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>RubyConf 2008</title>
   <link href="http://connectionrequired.com/blog/2008/11/rubyconf-2008"/>
   <updated>2008-11-20T03:11:42+00:00</updated>
   <id>http://connectionrequired.com/blog/2008/11/rubyconf-2008</id>
   <author>
     <name>Zach Moazeni</name>
     <email>zach.moazeni@gmail.com</email>
   </author>
   <content type="html">&lt;p&gt;I was lucky enough to attend &lt;a href=&quot;http://rubyconf.org/&quot;&gt;RubyConf 2008&lt;/a&gt;. I really enjoyed last year&#39;s conference, and I felt this year was better.&lt;/p&gt;

&lt;p&gt;There was lots of great content, and more than handful of time slots where I wanted to attend both. I&#39;m eagerly waiting for &lt;a href=&quot;http://www.confreaks.com/&quot;&gt;Confreaks&lt;/a&gt; to post all the talks so I could watch the ones I missed, as well as re-watch the ones I attended.&lt;/p&gt;

&lt;p&gt;Among all the talks I attended, there were three talks that really enjoyed.&lt;/p&gt;

&lt;h3&gt;Ruby Heavy-Lifting: Lazy load it, Event it, Defer it, and then Optimize it&lt;/h3&gt;

&lt;p&gt;This was given by Ilya Grigorik of &lt;a href=&quot;http://aiderss.com/&quot;&gt;AideRSS&lt;/a&gt;, and was my favorite talk of the weekend. Ilya went over their experiences developing PostRank and main optimization techniques they used with Ruby.&lt;/p&gt;

&lt;p&gt;Primarily:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Message Queues&lt;/li&gt;
&lt;li&gt;EventMachine&lt;/li&gt;
&lt;li&gt;Process Forking&lt;/li&gt;
&lt;li&gt;Custom C Extensions&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Ilya didn&#39;t just gloss over each point in a tutorial fashion, but instead described how they used each item and the resulting effects.&lt;/p&gt;

&lt;p&gt;It was very refreshing to hear someone speak of their roadblocks and creative solutions to work around them. Hearing that PostRank is making around 5 million requests per day, and is spread over 100 servers is pretty inspiring.&lt;/p&gt;

&lt;h3&gt;What Every Rubyist Should Know About Threads&lt;/h3&gt;

&lt;p&gt;Jim Weirich from &lt;a href=&quot;http://theedgecase.com&quot;&gt;EdgeCase&lt;/a&gt; gave this talk. Now I&#39;ve been interested in fairly interested in concurrency this year. Especially as we see hardware trends stalling out on speed and moving towards multiple cores. I really appreciated this talk for two reasons.&lt;/p&gt;

&lt;p&gt;First, it shamed me. Yup, I&#39;ll admit it. As snobby as I acted about concurrency, and as much as I touted I understood deadlocking and thread safety code, Jim&#39;s talk exposed me to my ignorance, and for that I&#39;m very grateful.&lt;/p&gt;

&lt;p&gt;This talk may not appeal to others the same way it did to me, however for those interested in threading basics as well as virtual machine quicks this was worthwhile.&lt;/p&gt;

&lt;h3&gt;Dramatis: Actors for Ruby&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://smparkes.net/&quot;&gt;Steven Parks&lt;/a&gt; gave a great talk about his Actor-based Concurrency library for both Ruby and Python &lt;a href=&quot;http://dramatis.mischance.net/&quot;&gt;Dramatis&lt;/a&gt;. Now Dramatis is rather young, but has a lot of potential. Not to mention Steven&#39;s presentation and conversation afterwards indicates he has been working in this particular field a while.&lt;/p&gt;

&lt;p&gt;Earlier this year I played with Erlang quite a bit, and despite the syntax annoyances, the actor model was very interesting. Steven mentioned explicit vs implicit receiving, which happens to be one of the bold stances this API takes. Erlang is an explicit receive model. Which means the code has to explicitly request the next message.&lt;/p&gt;

&lt;p&gt;An explicit receive example with Ruby:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;while message = receive
  # do something with the message and then re-loop
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;An implicit receive example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def some_method
  # this will get called when a message is sent
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The second example doesn&#39;t look too foreign, and that&#39;s because it&#39;s not. The entire class becomes an API, and the messaging framework calls the appropriate method. When I worked with Erlang, I liked the Actor model, but I didn&#39;t like the boilerplate code that was copy-pasted for every Actor.&lt;/p&gt;

&lt;p&gt;I don&#39;t expect everyone to prefer this type of messaging, but for me it makes the concurrency model more transparent, and the actors easier to read as well as easier to test.&lt;/p&gt;

&lt;h3&gt;That&#39;s a lot of concurrency&lt;/h3&gt;

&lt;p&gt;As you can tell all my favorite talks all had some connection with concurrency and scale. That&#39;s because I&#39;ve been very interested in scaling Ruby applications. Not because I&#39;m some outside developer who is evaluating Ruby as a language and concerned about FUD. It&#39;s because I am a Ruby developer, and I&#39;ve been writing in Ruby for the past couple years, but I have rarely heard talks addressing scaling.&lt;/p&gt;

&lt;p&gt;There were many other great talks at the conference. For those on the fence on whether to attend next year, I definitely recommend it.&lt;/p&gt;
</content>
 </entry>
 

</feed>
