tag:blogger.com,1999:blog-31923598531827855802024-02-06T21:34:27.231-08:00Pure Thought StuffA Software Development BlogJuan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.comBlogger27125tag:blogger.com,1999:blog-3192359853182785580.post-90002798042694687412016-01-19T15:25:00.001-08:002016-01-19T15:25:58.167-08:00<b>This blog has been migrated to:
<a href="http://jmacias.github.io/">http://jmacias.github.io/</a></b>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-59377406963289521452012-08-17T10:26:00.000-07:002012-08-17T10:26:41.896-07:00Priority - how sensitive the profit is to changes in schedule.Do we want to apply effort in testing (More time)? or Do we take the risk of rework (More Money)?
<br />
<br />
To be able to compare we need to use the same unit of measure to take an informative and intelligent decision..... sometimes the Cost of Delay is so high that you must take the risk of rework. By understanding the cost of delay you are able to take and make the correct economic choices. You are able to prioritize because you know how sensitive the profit is to changes in features and schedule.<br />
<br />
Don Reinertsen at GotoConference - The Tactical and Strategic Art of Economic Models.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeXimlTTAKFkwBJhXcqlNNzcpKZassQdJsTC_krStV1KPNwd6VvIpVSto42bvF9-EvlyUoQNA72_JtFlGnPKUAtuMUoUPn8_E-1fqLYXzvVAXVpE4kaNs_9YcardhtH-_EKMCQoiVUi40Z/s1600/FLOW.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeXimlTTAKFkwBJhXcqlNNzcpKZassQdJsTC_krStV1KPNwd6VvIpVSto42bvF9-EvlyUoQNA72_JtFlGnPKUAtuMUoUPn8_E-1fqLYXzvVAXVpE4kaNs_9YcardhtH-_EKMCQoiVUi40Z/s320/FLOW.jpeg" width="320" /></a></div>
<br />
<br />
<a href="http://www.infoq.com/presentations/Economic-Models%C2%A0">http://www.infoq.com/presentations/Economic-Models </a><br />
<br />
Some Key points in the presentation:<br />
<br />
<ul>
<li>We are ignorant about our economic models and unaware of our ignorance - we need to learn more to take better and faster decisions.</li>
<li>If you ask people who can delay a product, what they think it would cost to our stakeholders if this product is delayed by sixty days? You would get 50:1 responses...... someone saying 1000 to someone saying 50000. The problem is that If you dont know the Cost of Delay, you would do different *choices* if you think the number is different.... </li>
<li>If everybody understand the cost of delay they can take and make the correct economic choices at all levels - not only product managers. </li>
<li>Priority - how sensitive the profit is to changes in schedule.</li>
</ul>
Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-78264188209501350472012-08-17T10:08:00.001-07:002012-08-17T10:08:16.432-07:00The Power of Curiosity and Inspiration<blockquote class="tr_bq">
<b><i>"One thing that you have to do well to succeed: Make every single detail perfect and limit the number of details."</i></b> - Jack Dorsey, the creator of Twitter </blockquote>
5 minutes video by Jack Dorsey. A must see! Here are my notes:<br />
<blockquote class="tr_bq">
<b><i>Why does Square call their product managers "Editors"? Editing Ideas: Select the Ideas; Avoid Flood of Ideas. </i></b></blockquote>
<br />
Pay attention in particular to:<br />
<br />
<ol>
<li>Editing the team, Bring the best people in and edit away any negative elements.</li>
<li>Editing the communication: Internal - This is the vision, help set the priorities to do the right thing. External - the product, the story we are telling the world </li>
<li>Editing the money - investing and revenue.</li>
</ol>
<div>
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/fs0R-UvZ-hQ" width="560"></iframe>
</div>
Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-25354748732807613752012-08-17T09:57:00.005-07:002012-08-17T10:00:49.273-07:00Clean Architecture. Well last night I found out that the videos from <a href="http://www.ndcoslo.com/">NDC 2012</a> were available - I hate when this happen to me, especially late night. I couldn't resist and I saw a couple of presentations :D<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsD3SgEW-6mI6hzLqsudRaVgGjtg6YBJmN8WIKBgBXOjPoH64aUKMIWIn210jnmouo7h7aTKs0dDKSgzxSlFxUtlfBAWiGrJUu7jZX4XEMxExCt0Q_n8Gg76sIAMIbVdxXLgITWZt1dreG/s1600/BobAtRails.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsD3SgEW-6mI6hzLqsudRaVgGjtg6YBJmN8WIKBgBXOjPoH64aUKMIWIn210jnmouo7h7aTKs0dDKSgzxSlFxUtlfBAWiGrJUu7jZX4XEMxExCt0Q_n8Gg76sIAMIbVdxXLgITWZt1dreG/s320/BobAtRails.jpeg" width="320" /></a></div>
<br />
<br />
Here is one from Uncle Bob. I strongly agree with the following quotes in his presentation:<br />
<blockquote class="tr_bq">
<b><i>“an architect’s job is not making decisions, but delaying them as much as possible (ideally when we know more about the problem being solved)”</i></b></blockquote>
<blockquote class="tr_bq">
<b><i> “A good architect maximizes the number of decisions not made.” </i></b></blockquote>
<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="281" mozallowfullscreen="mozallowfullscreen" src="http://player.vimeo.com/video/43612849" webkitallowfullscreen="webkitallowfullscreen" width="500"></iframe> <br />
<a href="http://vimeo.com/43612849">Robert C. Martin - Clean Architecture</a> from <a href="http://vimeo.com/ndcoslo">NDCOslo</a> on <a href="http://vimeo.com/">Vimeo</a>.<br />
<br />
EnjoyJuan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-10161567595701414452012-08-17T09:51:00.002-07:002012-08-17T10:03:05.197-07:00How can you create a computer program with no assignments....How can you create a computer program with:<br />
<ul>
<li>No control Flow</li>
<li>No assignment</li>
<li>No Arrays</li>
<li>No Strings</li>
<li>No Numbers</li>
<li>No Booleans</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcK8f2xUHP48xaCDpwwUOXBmQit0gsfoTXo4GuyfN9upzNU7_ymu4ZB-0NSh-Gag4HmGiRTWBzabf0rKQ88yi9SJ2ZVWg6LbnRsjtNYrgbh1IPzfH6ki-NaWtYxvO9w-K-sNPu7iRSBnW3/s1600/y_combinator.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcK8f2xUHP48xaCDpwwUOXBmQit0gsfoTXo4GuyfN9upzNU7_ymu4ZB-0NSh-Gag4HmGiRTWBzabf0rKQ88yi9SJ2ZVWg6LbnRsjtNYrgbh1IPzfH6ki-NaWtYxvO9w-K-sNPu7iRSBnW3/s320/y_combinator.jpeg" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
This is what <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambda calculus</a> is about. The following presentations are the best explnations I've found about Lambda calculus. The first one is <a href="http://onestepback.org/">Jim Weirich</a> explaining lambda calculus and Y-combinator using javascript.<br />
<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="400" mozallowfullscreen="mozallowfullscreen" src="http://player.vimeo.com/video/45140590" webkitallowfullscreen="webkitallowfullscreen" width="500"></iframe> <br />
<a href="http://vimeo.com/45140590">Jim Weirich: Adventures in Functional Programming</a> from <a href="http://vimeo.com/edgecaseuk">Edge Case UK</a> on <a href="http://vimeo.com/">Vimeo</a>.<br />
<br />
Jim will be presenting this talk in this year StrangeLoop conference. The second one is Tom Stuart presenting how he transform a Fizzbuzz program in ruby to a implementation using only procs.
<br />
<br />
<a href="http://rubymanor.org/3/videos/programming_with_nothing/">http://rubymanor.org/3/videos/programming_with_nothing/</a>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-20224410558957406762012-07-14T13:45:00.003-07:002020-10-28T15:29:21.291-07:00Jonah Lehrer: The Origins of Creative Insight & Why You Need Grit
<iframe src="https://player.vimeo.com/video/45162748?color=ffffff&title=0&byline=0&portrait=0" width="640" height="480" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
<p><a href="https://vimeo.com/45162748">Jonah Lehrer: The Origins of Creative Insight & Why You Need Grit</a> from <a href="https://vimeo.com/99u">99U</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
<br />
<br />
<br />
Awesome talk about creativity<br />
<h3>
On Pursue a Dream.</h3>
"Dreams do come true, but first we must pick the right ones" Be honest about your limitations.<br />
<br />
Time will prove everything. Pursue dreams that not bore you, even after thousands of hours. Do the thing you love, love is just another name for "it never gets old".<br />
<br />
<a href="http://t.co/SBZY2mWu">http://t.co/SBZY2mWu</a><br />
<h3>
On Hitting the wall.</h3>
When you hit a wall while fixing a problem, focusing in the problem would be a waste of mental resources, the most productive thing you can do is forget about work. But if you have the feeling that you are getting closer you should continue with full charge.<br />
<br />
<a href="http://vimeo.com/45162748#t=1526">http://vimeo.com/45162748#t=1526</a><br />
<h3>
On Cities and creativity</h3>
Awesome comperation between Cities and Companies. The difference between them, and why cities make us more productives and companies restrain our creativities .<br />
<br />
<a href="http://vimeo.com/45162748#t=1737">http://vimeo.com/45162748#t=1737</a><br />Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-34550671752119188272012-06-21T13:43:00.000-07:002012-06-21T14:36:12.883-07:00"A happy grain of sand" - UX is part of your job as a developer<blockquote>
<b>“If you are a developer you are a designer, you affect how people feel about the product you are building, the sooner you realize that the better”</b> - Aral Balkan at NDC2012 - Opening and Keynote "A happy grain of sand"
<a href="http://vimeo.com/43524962">http://vimeo.com/43524962</a>
</blockquote>
</br>
Aral delivered a great keynote about User Experience Design - you can see it <a href="http://vimeo.com/43524962">here</a>. Warning: he sang in the first minutes you may want to skip that part. One interesting point that he made it’s that the vision for simplicity must come from the higher level, from CEO to dev, but that everyone must guard the vision.
</br></br>
He said that:
<blockquote>
“Great design is a symptom of a design-lead organization structure and development process” - Aral Balkan
</blockquote>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKOVq0JgYYANtuoQ59XWDR-gKkEFgZT4ZtBz0nwN0Tz3UKe-lRs8k1JSH8xIUOiPBJ2NHo9KeHeMCZh5LMYhIJaZtskZkf5BEofKSuPlSPU8ktVUdErUbwZCMiQ0dFISF7lEDlMbU8eVGi/s1600/steve-jobs.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="127" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKOVq0JgYYANtuoQ59XWDR-gKkEFgZT4ZtBz0nwN0Tz3UKe-lRs8k1JSH8xIUOiPBJ2NHo9KeHeMCZh5LMYhIJaZtskZkf5BEofKSuPlSPU8ktVUdErUbwZCMiQ0dFISF7lEDlMbU8eVGi/s200/steve-jobs.png" /></a>And this is why apple won't need Steve, because the focus on user experience is now embedded in the organization structure.
</br></br>
I have extracted some more nice quotes:
<blockquote>
“Proximity implies relation, out of sight out of mind” - Aral Balkan
</blockquote>
<blockquote>
“<b>Your app shouldn’t look like your database just threw up</b>”- Aral Balkan
</blockquote>
<blockquote>
“Focus on deliver quality not quantity”- Aral Balkan
</blockquote>
<blockquote>
“Great Design is about saying “NO” way more than “YES””- Aral Balkan
</blockquote>
<blockquote>
“Focus on your user needs, not your own”- Aral Balkan
</blockquote>
<blockquote>
<b>“Perfection is achieved not when there is nothing more to add but when there is nothing left to take away”</b> -Antoine de Saint-Exupery
</blockquote>
</br></br>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-29009669531907233512012-06-19T14:48:00.001-07:002020-09-02T11:30:37.135-07:00Head First Data Analysis - Regression: Prediction using ClojureI’ve been reading the excellent book from the Head First Series: Head First Data Analysis. The chapter on regression contains a problem been solved in the book using R. I have translated the solution to clojure using Incanter.<br />
<br />
The problem is pretty simple. We have a dataset that contains information about the raises given to employees, the raise requested, if they negotiated the raise, the gender and the year. People want to know what to ask for. And they want to know what they’ll get, given what they’ve asked for. And the regression line predicts what raises people will receive.<br />
<br />
Here is the plot with the data points, each data point is a person that negotiated their salary. In the X-axis is how much they requested for a raised and in the Y-axis how much they received. And in Blue is the Regression Line.
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvVpVmQEbrbSChAg990hHNjIMY7DX16Af8MXGWsWZZociQeFGPnrUTG1uHCrCCAiTD6q3EuP7CJp4FFbvC8jxFkIfFJc2as1l1GP-IXPow0X6O6U4tudbeuWhPvwOvpk_rambOl9tYwaaL/s1600/image.png" imageanchor="1"><img border="0" height="539" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvVpVmQEbrbSChAg990hHNjIMY7DX16Af8MXGWsWZZociQeFGPnrUTG1uHCrCCAiTD6q3EuP7CJp4FFbvC8jxFkIfFJc2as1l1GP-IXPow0X6O6U4tudbeuWhPvwOvpk_rambOl9tYwaaL/s640/image.png" width="640" /></a>
<br/>
Here is the code:
<br/>
<script src="https://gist.github.com/jmacias/2956597.js"></script>
</script>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-17525915857810567902012-06-02T15:20:00.002-07:002012-06-02T15:23:02.653-07:00TEDxUFM - Luke Williams: Ideas are the Recipes<span style="background-color: white; color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;">TEDxUFM - Luke Williams: Ideas are the Recipes</span><br />
<br />
<span style="background-color: white; color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;"><span style="font-size: 12px; line-height: 15px;">Great presentation on disruptive innovation. Highly recommended. </span></span><br />
<br />
<a href="http://en.wikipedia.org/wiki/Disruptive_innovation" rel="nofollow" style="background-color: white; border: 0px; color: #124896; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;" target="_blank">http://en.wikipedia.org/wiki/Disruptive_innovation</a><br />
<br />
<span style="background-color: white; color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;">Also if you are looking into becoming a better presenter, you can learn from this presentation. Notice the following:</span><br />
<br />
<ul>
<li><span style="background-color: white; color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;">"What it is?" VS "What it could be?" Slides/</span></li>
<span style="color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;"><span style="font-size: 12px; line-height: 15px;">Theme</span></span>
<li><span style="background-color: white; color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;">Driving attention by changing size/font</span></li>
<li><span style="background-color: white; color: #222222; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;">A call to action at the end of the presentation.</span></li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/odfROC4VoPw?feature=player_embedded' frameborder='0'></iframe></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com1tag:blogger.com,1999:blog-3192359853182785580.post-36372351009713248052012-03-24T14:08:00.000-07:002012-03-24T14:08:17.406-07:00Random notes on Pragmatic Thinking and Learning.Recently I was cleaning up my desk and found some of my notes on the book <a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning">Pragmatic Thinking and Learning</a>. Although the notes lack structure I found them inspiring.
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://imagery.pragprog.com/products/107/ahptl_xlargecover.jpg?1298589772" imageanchor="1"><img border="0" height="228" src="http://imagery.pragprog.com/products/107/ahptl_xlargecover.jpg?1298589772" width="190" /></a></div>
<h3>
On Being Happy</h3>
<ul>
<li>Notice how long it takes you to get over your initial reaction to a perceived threat. How does your reaction change once you “think about it”?</li>
<li><b>Act on that impulse but not immediately</b>. Plan for it; schedule it. Does it still make sense later?</li>
<li>Write a new movie. If you’re troubled by a given film that keeps replaying in your head, sit down and craft a new one—<b>this time with a happy ending</b>.</li>
</ul>
<h3>
On Testing Yourself</h3>
When you are dead solid convinced of something, <b>ask yourself why</b>. You’re sure the boss is out to get you. How do you know? Everybody is using Java for this kind of application. Says who? You’re awful developer. Compared to whom?
<br />
<h3>
Quotes</h3>
<blockquote>
The mind is its own place and, in itself, can make a Heaven
of Hell, a Hell of Heaven.
— John Milton, Paradise Lost.
</blockquote>
<blockquote>
The fact that we live at the bottom of a deep gravity well, on the
surface of a gas-covered planet going around a nuclear fireball 90
million miles away and think this to be normal is obviously some
indication of how skewed our perspective tends to be.
- Douglas Adams
</blockquote>
<blockquote>
It is by logic we prove; it is by intuition we discover.
- Henri Poincarégreat
</blockquote>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-3633490075851910942012-03-20T22:36:00.003-07:002012-03-20T22:36:49.568-07:00The goal.Yesterday, someone reminded me the Goal from studying the book "Structure and Implementation of computer programs".<br />
<blockquote>
They should feel secure about modifying a program, retaining the spirit and style of the original author. - Alan Jay Perlis talking about the goal of completing the SICP book.</blockquote>
<br />
<a href="http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-7.html#%_chap_Temp_4">http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-7.html#%_chap_Temp_4</a>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://mitpress.mit.edu/sicp/full-text/book/cover.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://mitpress.mit.edu/sicp/full-text/book/cover.jpg" width="221" /></a></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-63745709960972885792012-03-08T22:18:00.000-08:002012-03-09T09:42:26.142-08:00How and how-not to build a product - Kathy Sierra Keynote at 2009 NMC Summer Conference<br />
Recently I saw for the hundred time the keynote from Kathy Sierra. It's feels good to see that even though I did not think on her presentation while working, her teachings still resonate on my mind.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/BF-1iZ6PsYw?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
Here are my notes on this presentation:<br />
<blockquote class="tr_bq">
<b id="internal-source-marker_0.6337586643639952"><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">It’s not about how cool you are... or how cool its your product... </span></b><span id="internal-source-marker_0.6337586643639952"><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">It’s about How cool you make the user of your product , what cool things they can do now they use your product....</span></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">How you make them feel about themselves drives how they feel about YOU</span></blockquote>
<span id="internal-source-marker_0.6337586643639952"></span><br />
<ol><span id="internal-source-marker_0.6337586643639952">
<li><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Don't build a better X Build a better user of X. </span><b style="font-family: Arial; font-size: 15px; text-indent: 36pt; white-space: pre-wrap;">Not how do we build a better camera its how we build a better photographer</b><span style="font-family: Arial; font-size: 15px; text-indent: 36pt; white-space: pre-wrap;">.</span></li>
<li><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Give them super power QUICK! </span><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">User must do something cool within 30 min!</span></li>
<li><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Making them Smarter. </span><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Anything you can do to make them BETTER</span></li>
<li><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Do not ask about X ask about the subset of X. <b>If you sell </b></span><b style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"> kitchen appliances, </b><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"><b>Do not blog about kitchen appliances, blog about cooking.</b></span></li>
<li><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Shrink the 10 000 hours to master something! </span><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">Show the patterns and shorten the duration of the 10000 hours.<b>Nobody become passionate about something they suck at...make the user an expert more quickly on your system...</b>..</span></li>
<li><span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;">Make your product reflect their feelings.</span></span><span style="font-family: Arial; font-size: 15px; text-indent: 36pt; white-space: pre-wrap;"><b>“How you make them feel about themselves drives how they feel about YOU”</b></span></li>
<li><span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"> <b>Make the right thing easy, wrong thing difficult.</b> This one applies for everything</span></span> </li>
</span></ol>
<span id="internal-source-marker_0.6337586643639952">
</span>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-17519315363349480962012-02-25T14:59:00.002-08:002012-06-28T22:29:35.689-07:00Creative Thinking by Scott Berkun<span id="internal-source-marker_0.5679637792054564"><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">Awesome Video! Here are my notes:</span><br /><span style="font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<ul style="font-weight: bold;">
<li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">All ideas are made of other ideas......Combine Ideas! </span></li>
<li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Thinking outside of the box is about removing constraints made up by our minds.</span></li>
<li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Working hard or working smart? DO BOTH!</span></li>
<li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Keep a journal of Ideas</span></li>
<li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Find a partner, could not find one, find a competition </span></li>
<li style="font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Fail more often. “The first draft of anything is shit” - Ernest Hemingway </span></li>
</ul>
<div>
<span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"><a href="http://vimeo.com/37115147">http://vimeo.com/37115147</a></span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;">And example that everything is a Remix .... even Star Wars </span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span></span><br />
<span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"><a href="http://vimeo.com/26877574#t=653">http://vimeo.com/26877574#t=653</a></span></span></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-45881049812959857402012-02-19T11:52:00.000-08:002012-02-19T22:41:32.156-08:00Learning REST and DDD from Jim Webber.Notes on <a href="http://yow.eventer.com/events/1004/talks/1047">“Domain-Driven Design for RESTful Systems”</a><br />
<ul>
<li><b>HTTP is about moving documents around, therefore Map HTTP protocol to trigger business activities by moving documents.</b></li>
<li><b><span style="font-weight: normal;">HTTP is an application protocol. Narrow HTTP into a domain application protocol.</span></b></li>
<li>Restful Clients drives work-flows just like amazon make us a drive the checkout-flow.</li>
<li>Do not build services that also do orchestration. Operation-Oriented VS Resource-Oriented architectures.</li>
<li>You do not need a bus (event bus) for Events. Use Event feeds ( atoms feeds) and let clients pull the events they are interested in.</li>
</ul>
On <a href="http://domaindrivendesign.org/">DDD</a><br />
<ul>
<li>There’s always More THAN ONE DOMAIN REPRESENTATION in the software solution.</li>
<li>Command Query Responsibility Separation (<a href="http://martinfowler.com/bliki/CQRS.html">CQRS</a>) maps directly to HTTP</li>
</ul>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-20395362024956490152012-01-18T00:48:00.000-08:002012-01-18T00:50:37.774-08:00How we prepare for a pitch or for any presentation...<br />
Most of the ideas die at the pitch. That’s why it is so important to know how to do it the best way possible. If you have an idea worth spreading, you better be prepared to do a great presentation.<br />
<br />
In the last few months my team and I were working on a new idea. After 6 weeks we needed to pitch the idea. If the idea was to flourish and survive, it was better to be prepared.<br />
<br />
<span style="font-size: large;">Learn from the greats.</span><br />
<br />
Before preparing for any presentation I watch and rewrite my notes from Garr Reynold’s presentation at google. Garr is the author of presentation zen and presentation zen design. If you follow his advices you are closer to get a great presentation. So instead of doing a bad job writing of his teaching, I have embed the video here - bookmark now!<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/DZ2vtQCESpk" width="420"></iframe>
<br />
<span style="font-size: large;"><br /></span><br />
<span style="font-size: large;">Always two there are: a master, and an apprentice</span><br />
<br />
When I mention learning from great presenters, Garr Reynolds and Nancy Duarte, comes to mind. But as any craft, art, science or anything worth teaching, there are always two: a master, and an apprentice. Garr and Nancy were once apprentice as well. <br />
<br />
Nancy has done some great work analysing and studying the structure of great presentations. We used Nancy’s teaching to shape our pitch into, what I believe was, one of the best presentation I have given.<br />
<br />
"<span style="font-size: large;">What it is" versus "What it could be" - the shape of a great presentation</span><br />
<br />
Nancy has discovered the presentation form that great presenters have, to convey their messages, their Idea, their passion. In the following presentation at TED she shows the structure by analysing two great presentations: Rev. Dr. Martin Luther King Jr.’s speech from the March on Washington and the presentation of the IPhone by Steve Jobs. One more time instead of doing a bad job describing her teaching, here is the video of her presentation:<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="220" mozallowfullscreen="" src="http://player.vimeo.com/video/20618288?title=0&byline=0&portrait=0" webkitallowfullscreen="" width="400"></iframe><br />
<a href="http://vimeo.com/20618288">Nancy Duarte's talk at TEDx East</a> from <a href="http://vimeo.com/duartedesign">Duarte Design</a> on <a href="http://vimeo.com/">Vimeo</a>.<br />
<br />
<span style="font-size: large;">A Call to Action - How we used the presentation form?</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://blog.duarte.com/wp-content/uploads/2011/01/Presentation-Form.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://blog.duarte.com/wp-content/uploads/2011/01/Presentation-Form.jpg" width="320" /></a></div>
<br />
Back to our pitch. When we were rehearsing for our presentation, we drew a line to keep track of our time, but little did we know how helpful it was meant to be. We started analyzing the presentation shape. When we saw that the shape was flat for too long, we change our presentation to follow the presentation structure discovered and described by Nancy. Every “"What is" was followed by a "What could be”, a surprise, a better possible future, a problem to be eliminated or a great feature from our idea.<br />
<br />
But the best advice from Nancy it’s how to end a presentation, a call to Action. A call to Action by describing how the world could be when you and the audience join forces and solved the big problem. Because the hero is not the presenter, the hero is the audience. Because without them, without their help, without their support all the ideas die.<br />
<div>
<br /></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-8290371996070690632012-01-05T22:58:00.000-08:002012-02-19T01:51:44.095-08:00<b id="internal-source-marker_0.25378365931101143"><span style="font-family: Verdana; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Google Tech talks: Don't Make me click Notes </span></span></b><br />
<div>
<span id="internal-source-marker_0.25378365931101143"><b><span style="font-family: Verdana; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">By Aza Raskin - Head of User Experience for Mozilla Labs</span></b><span style="font-family: Verdana; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Verdana; font-size: x-small;"><span style="white-space: pre-wrap;"><br /></span></span></span></div>
<div>
<div>
<b id="internal-source-marker_0.25378365931101143"><span style="font-family: Verdana; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Notes from the talk:</span></b></div>
<span><ul style="font-weight: bold;">
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Whats the best interface? BLANK - NFI No F*** Interface</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Don't fall into the trap of look fancy/sexy/cool ( Adding interactions )</span></li>
<ul>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Example splash screens on websites.</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Use Icons when text will do the work.</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">What Google be if they advertise everything the search box can do.</span></li>
</ul>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: lime; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Its not about adding its about removing Interactions</span><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">No RIA but ZIA - Zen Internet Application</span></li>
<ul>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Act without doing -> Pagination you have to interact continues listing</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Don’t force users to ask for more content -> just give it to them</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">No by giving search result but by giving the thing you are looking for</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Zoom In Zoom Out - to remove Interactions. </span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">People don’t think in forms. There are better ways:</span></li>
<ul>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: square; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Good example: Quick Add box google calendar.</span></li>
<li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: square; text-decoration: none; vertical-align: baseline;"><span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Natural Lenguages Interfaces</span></li>
</ul>
</ul>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/EuELwq2ThJE?feature=player_embedded' frameborder='0'></iframe></div>
<div dir="ltr" style="font-weight: bold; margin-bottom: 0pt; margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">the fewer keys you have to hit to get the computer to understand what you want, the less wasted effort, the more efficient the interface.</span></div>
<div dir="ltr" style="font-weight: bold; margin-bottom: 0pt; margin-left: 4.5pt; margin-right: 4.5pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: x-small;"><span style="white-space: pre-wrap;"><br /></span></span></div>
</span></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-19110482566031006022011-10-08T19:58:00.000-07:002011-10-08T20:01:29.122-07:00Are you ready to delete your code? Rocky Mountain Ruby 2011 Keynote - Code Blindness by Michael Feathers<a href="http://confreaks.net/videos/717-rockymtnruby2011-opening-keynote-code-blindness">Rocky Mountain Ruby 2011 Keynote - Michael Feathers</a><br /><br />Rocky Mountain Ruby 2011 Keynote - Michael Feathers talks about the levels of code blindness - How much do we know about our code base, and what we do about it. He describe the following levels:<br /><br />=> Total Ignorance - No control at all. <br /><br />=> Metric Targeted - "You need X coverage, X PMD level etc" - The trap on this level is missing the context and just do it for the metric without understanding the spirit of the rules ( yes I've seen Methods split in half to remove Complexity warnings ) <br /><br />=> Qualitative Assesing - Not just metrics, but qualitative meaning in the metrics. From the junior programer to upper management, everyone understand what "Cyclomatic complexity" means, everyone understand the asset that they have. <br /><br />=> Lifecycle Management - Code has a lifecycle. We must prepare to let go and delete the code/features/applications out of our repository. Planing for replacing. Say good bye to the old so the new can born.<br /><br />=> Integrated Knowing - Entire Company knows what they have.....The code is a reflection of the Organisation - Conway's Law. What our code is saying about or Organisation?<br /><br /><br />Are you ready to let go our code? What your code is saying about your company? Realy interesting keynoteJuan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-79388400909193415992011-05-24T07:12:00.000-07:002011-05-24T07:17:50.484-07:00It is a Process...When you sit down and solve a problem, that solution is merely a first draft.<br />—STOYAN STEFANOV, JAVASCRIPT PATTERNS<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://covers.oreilly.com/images/9780596806767/cat.gif"><img style="cursor:pointer; cursor:hand;width: 180px; height: 236px;" src="http://covers.oreilly.com/images/9780596806767/cat.gif" border="0" alt="" /></a><br /><br />Got it from this great presentation:<br /><br />http://www.slideshare.net/rmurphey/cleaner-leaner-meaner-refactoring-your-jqueryJuan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-30671084358319061512011-01-23T15:52:00.000-08:002011-01-23T16:05:30.460-08:00Javadoc - the “Why” of your code.<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "><span class="Apple-style-span"><span class="Apple-style-span" style="white-space: pre-wrap;"><br /></span></span><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "><blockquote>Code should not need to be figured out, it should be just read. -Martin Fowler</blockquote></span><span class="Apple-style-span"><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">How do you express a not thread safe method? That null is not a valid parameter? That if you call a method in an object, the object will be in a different state? How do you communicate ownership of parameters? </span><br /><span class="Apple-style-span"><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">In Java, some of these points are handle trough meta-data using annotations, throwing Exceptions, etc. Nevertheless there is a limit on how well it communicate intent, There is still a gap between the “How” and the “Why” of your code. For example you can declare the exceptions thrown by a method, but you can not fully communicate the why without the documentation, without the javadoc.</span><br /><span class="Apple-style-span"><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Java have limitations to communicate in code all that there is to say about the behavior of the program. Different languages, like Eiffel, provide more mechanism where you can define pre conditions, post conditions and invariants on the objects with the code itself. In Clojure the data structures are value object therefore there is no need to define the ownership of parameters you will always get something new. But even in those languages, there is a need to document - to express the "why" of your code, the reason behind your design, examples on how to use it or how to extend the code.</span><br /><span class="Apple-style-span"><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Joshua Bloch in <a href="http://www.youtube.com/watch?v=aAb7hSCtvGw"> "How to Design a Good API & Why it Matters"</a> mention his rules about documentation which I use as guide lines:</span><br /><span class="Apple-style-span"><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><span class="Apple-style-span" ><br /><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "> </span><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "><b>Document Religiously</b></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "><ul><li><i><span class="Apple-style-span" ><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Document every class, interface, method,</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; "> </span><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">constructor, parameter, and exception</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; ">.</span></span></i></li><li><i><span class="Apple-style-span" ><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; "></span><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Class: what an instance represents</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; ">.</span></span></i></li><li><i><span class="Apple-style-span" ><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Method: contract between method and its client</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; ">.</span></span></i></li><li><i><span class="Apple-style-span" ><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; "></span><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Preconditions, postconditions, side-effects</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; ">.</span></span></i></li><li><i><span class="Apple-style-span" ><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; "></span><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Parameter: indicate units, form, ownership</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; ">.</span></span></i></li><li><i><span class="Apple-style-span" ><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; "></span><span style="font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Document state space very carefully</span></span></i></li></ul><span class="Apple-style-span"><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Even when<a href="http://en.wikipedia.org/wiki/Intentional_programming"> programming by intention</a> or with languages that communicate better we still need documentation. Without the extra information provided by documentation future programmers have to guess about the missing documented behavior, ghosts side effects. That's why I encourage good documentation among my peers programmers. </span><br /><span class="Apple-style-span"><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span></span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span><blockquote><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">"Reuse is something that is far easier to say than to do. Doing it requires both good design and very good documentation. Even when we see good design, which is still infrequently, we won't see the components reused without good documentation."</span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">- D. L. Parnas, _Software Aging. Proceedings</span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">of 16th International Conference Software</span><br /><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; ">Engineering, 1994</span></blockquote><span style="font-size: 10pt; font-family: Verdana; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "></span><br /></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-17448587571323465522010-11-25T17:43:00.000-08:002011-04-30T15:32:55.979-07:00The Agile Samurai Quote<div><blockquote>"when reality messes with your plan, you change your plan—not reality. "<br /><br /></blockquote><blockquote>- Jonathan Rasmusson</blockquote> </div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-7167549823881967862010-10-15T20:45:00.000-07:002010-10-15T20:46:16.853-07:00"If art interprets our dreams, the computer executes them in the guise of programs! "<br />-Alan J. PerlisJuan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-91278138518789694762010-06-26T17:27:00.000-07:002010-06-28T20:32:03.490-07:00Structure and Interpretation of Computer Programs<div><blockquote></blockquote>I have started a new endeavor of reading the book that give title to this post, <a href="http://mitpress.mit.edu/sicp/">Structure and Interpretation of Computer Program</a>. I only have read thought the foreword, by <a href="http://en.wikipedia.org/wiki/Alan_Perlis">Allan J. Perlis</a>, and the preface. I'm already impressed.</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mitpress.mit.edu/sicp/graphics/main-banner.gif"><img style="cursor:pointer; cursor:hand;width: 500px; height: 194px;" src="http://mitpress.mit.edu/sicp/graphics/main-banner.gif" border="0" alt="" /></a><div><div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;">The Foreword - Computer Programs and programing</span></div><div><br /></div><div>Allan starts with and excellent summary on what is a program :</div><div><blockquote>"Every computer program is a model, hatched in the mind, of a real mental process."</blockquote></div><div>He goes on on explaining how the program evolves as we learn about the subject of our program. And the promises that this books teaches the small idioms, an arsenal of standard programing structures, that we will use to create larger systems. </div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;">Preface - Programing is about Expressing Ideas.</span></div><div><br /></div><div>The two major concerns tackled by the book:</div><div><ul><li>A program is about expressing ideas, thus programs must be written for people to read, and only incidentally for machines to execute.</li><li>Programing is not about the language the syntax or any particular language construct. But about the techniques used to control the intellectual complexity of large software system.</li></ul></div><div>The final promises of the book is the student should have "a good feels for the elements of style an the aesthetics of programming". What part of a big system to read, and what part not to read, what layer of abstraction needs to be understood, in order to work with such a system. </div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;">Final thought - Programing Style.</span></div><div><span class="Apple-style-span" style="font-size:large;"><br /></span></div><div> </div><div>My programing style has been highly influenced by <a href="http://en.wikipedia.org/wiki/Kent_Beck">Kent Beck</a>, <a href="http://en.wikipedia.org/wiki/Martin_Fowler">Martin Fowler</a>, <a href="http://en.wikipedia.org/wiki/Bertrand_Meyer">Bertrand Meyer</a>, <a href="http://www.objectmentor.com/omTeam/martin_r.html">Uncle Bob</a> and <a href="http://www.springone2gx.com/conference/speaker/rod_johnson">Rod Johnson</a> with their impressive work from <a href="http://www.amazon.com/Implementation-Patterns-Kent-Beck/dp/0321413091">Implementation Patterns</a>, <a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672">Refactoring: Improving the Design of Existing Code</a>, <a href="http://www.amazon.com/Object-Oriented-Software-Construction-Book-CD-ROM/dp/0136291554">Object-Oriented Software Construction</a>, <a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/sr=1-1/qid=1161361645/ref=sr_1_1/102-5628847-5032158?ie=UTF8&s=books">Aguile software development</a> and the <a href="http://www.springsource.org/">spring source code</a>, respectively.</div><div><br /></div><div>I got interested in this book because of <a href="http://clojure.org/">Clojure</a> and functional programming. Now I have a higher expectation. I'm guessing that, with this book, my programming style will evolve once more. I cant hardly wait to get to end of the book.</div><div><br /></div></div></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-90055390486455712812010-05-24T06:29:00.000-07:002010-05-24T06:32:18.283-07:00The only constant is change<blockquote>The Schedule is the one way the project will not proceed.</blockquote><blockquote>-Johanna Rothman, "Manage it!"</blockquote><div><br /></div>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-86456420980003737192010-02-16T18:51:00.000-08:002010-02-16T18:52:07.557-08:00OO Design and Eclipse VS Code Duplication and Copy-paste<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span class="Apple-style-span" style="font-family: Verdana; font-size: 13px;"><div style="margin-top: 0px; margin-bottom: 0px;"><blockquote style="padding: 10px; border: 1px dashed rgb(221, 221, 221);"><span style="font-size:85%;">"It has a duplication that is painful to my eye"<br />- Martin Fowler Analysis patterns</span></blockquote></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">The fundamental problem with copy paste is code duplication. Code duplication brings many issues with it, explained in several books and principles, like the</span><a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" style="color: rgb(85, 26, 139);"><span style="font-size:85%;"> "DRY" principle</span></a><span style="font-size:85%;"> in </span><a href="http://www.pragprog.com/the-pragmatic-programmer" style="color: rgb(85, 26, 139);"><span style="font-size:85%;">"The Pragmatic Programmer"</span></a><span style="font-size:85%;">, or the "Minimize Repetition" principle in </span><a href="http://www.infoq.com/articles/implementations-patterns-br" style="color: rgb(85, 26, 139);"><span style="font-size:85%;">"Implementation Patterns"</span></a><span style="font-size:85%;">. So what's the problem with duplication? In Kent Beck words:</span></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><div style="margin-top: 0px; margin-bottom: 0px;"><blockquote style="padding: 10px; border: 1px dashed rgb(221, 221, 221);"><span style="font-size:85%;">"Duplication isn’t evil, it just raises the cost of making changes."<br />- Kent Beck, Implementation Patterns.</span></blockquote></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Why it raises the cost of making changes? Here are a few reasons:</span></div><div style="margin-top: 0px; margin-bottom: 0px;"><ul style="margin-top: 0px; margin-bottom: 0px;"><li style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Change a thing in duplicate code means change in several places.</span></li><li style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Do all need to change? The cost of changing them all is the number of copies you have.</span></li><li style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">If the code duplicated has a bug, there is not a single reference where to fix it.</span></li><li style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">You drag everything - coping a method but then you forget to change the documentation, the variable names etc...</span></li></ul></div><h2 style="font-size: 14pt;">Object Oriented Design vs Code Duplication.</h2><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">When you start seeing code duplication, your code will be shouting that there is a missing abstraction. In that case you can do one of the following refactors:</span></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><div style="margin-top: 0px; margin-bottom: 0px;"><ul style="margin-top: 0px; margin-bottom: 0px;"><li style="margin-top: 0px; margin-bottom: 0px;"><a href="http://www.refactoring.com/catalog/extractMethod.html" style="color: rgb(85, 26, 139);"><span style="font-size:85%;">Extract Method</span></a><span style="font-size:85%;"> - For code duplication in the same class.</span></li><li style="margin-top: 0px; margin-bottom: 0px;"><a href="http://www.refactoring.com/catalog/extractClass.html" style="color: rgb(85, 26, 139);"><span style="font-size:85%;">Extract Class</span></a><span style="font-size:85%;"> - Some methods are only related to some data on your class, it time to break it down.</span></li><li style="margin-top: 0px; margin-bottom: 0px;"><a href="http://www.refactoring.com/catalog/formTemplateMethod.html" style="color: rgb(85, 26, 139);"><span style="font-size:85%;">Form Template Method</span></a><span style="font-size:85%;"> - Sometimes you are copy-pasting procedures or algorithms. In that case use the Template method pattern and possibly turn it into his own Class. A good example for this is the </span><a href="http://static.springsource.org/spring/docs/2.0.8/api/org/springframework/jdbc/core/JdbcTemplate.html" style="color: rgb(85, 26, 139);"><span style="font-size:85%;">JDBCTemplate</span></a><span style="font-size:85%;"> in the spring framework. Also a good read explaining how this work is the article </span><a href="http://www.martinfowler.com/ieeeSoftware/repetition.pdf"><span style="font-size:85%;">Avoiding Repetition</span></a><span style="font-size:85%;"> by Martin Fowler.</span></li></ul><h2 style="font-size: 14pt;">What about static methods?</h2><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Its common in Java world to avoid duplication using static methods, but they loose the biggest benefits in OO programing, a local context that simplify the logic. And don't forget that it also makes Unit Testing Harder. So try to avoid them as a solution to avoid code duplication.</span></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Not completely against static methods. Just be sure that you are not missing an abstraction. There can a be a new object that is waiting to come alive. Take a look at "replace Method with Method Object".</span></div></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><h2 style="font-size: 14pt;">Eclipse vs Copy Paste</h2><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Once creating a level of abstraction is not longer beneficial, do not use copy paste. Let your IDE do the work for you. All Modern IDE have a template solution a few key strokes away - In eclipse you would never type "System.out.println()" do you? you would do "sysout" then Ctrl+Space. Here is a list of article on how to create your own templates:</span></div><div style="margin-top: 0px; margin-bottom: 0px;"><ul style="margin-top: 0px; margin-bottom: 0px;"><li style="margin-top: 0px; margin-bottom: 0px;"><a href="http://eclipse.dzone.com/news/effective-eclipse-custom-templ"><span style="font-size:85%;">http://eclipse.dzone.com/news/effective-eclipse-custom-templ</span></a></li><li style="margin-top: 0px; margin-bottom: 0px;"><a href="http://eclipse.dzone.com/news/visual-guide-templates-eclipse"><span style="font-size:85%;">http://eclipse.dzone.com/news/visual-guide-templates-eclipse</span></a></li></ul></div><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;"><br /></span></div><h2 style="font-size: 14pt;">The three strikes rule</h2><div style="margin-top: 0px; margin-bottom: 0px;"><span style="font-size:85%;">Use the three strikes rule, copy-paste one, copy-paste two, copy-paste three, Refactor! - or at least create the eclipse template ;) .</span></div></span></span>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0tag:blogger.com,1999:blog-3192359853182785580.post-28819787019188394802009-09-27T22:46:00.000-07:002009-09-27T22:48:08.073-07:00My two cents on "The Duct Tape Programmer"<span class="Apple-style-span" style="font-family: Tahoma, 'Sans Serif', Arial; font-size: small; ">My two cents on <a href="http://www.joelonsoftware.com/items/2009/09/23.html">"The Duct Tape Programmer"</a><br /><br />I think is important to always have a shippable product. What I don't like is the attitude of "The end justifies the means". In other words the product justifies the unreadable, uncommunicative and untested code. The "Duct Tape" attitude deliver the first version, but at the cost of the second and the third one. The job does not end with the first release.<br /><br />I believe that the most important thing that Agile and XP practices have shown is the shift from product to process. Placing the emphasis in the successive re-writing and re-thinking that mould the product in his best possible form.<br /><br /><br /></span>Juan Maciashttp://www.blogger.com/profile/05178089826030619908noreply@blogger.com0