tag:blogger.com,1999:blog-16841863732378118202024-03-04T22:24:45.688-08:00Bugs and Pieces | Life and Technology HacksFollow me as I improve my life and work using hacks I discover, learn and read about. Unknownnoreply@blogger.comBlogger29125tag:blogger.com,1999:blog-1684186373237811820.post-60301266091580772632015-09-19T22:30:00.002-07:002015-09-19T22:30:50.736-07:00External Javascript Resources in Ionic Applications<div dir="ltr" style="text-align: left;" trbidi="on">
Fun Fact: If you're using an externally referenced Javascript file in your Ionic browser, it will 404 out due to the default content policy on Android phones. This happened to me recently while I was working on an app that uses the Google Maps API to geocode locations. <br />
<br />
Running the app in your browser via `<span style="font-family: "Courier New",Courier,monospace;">ionic serve</span>` does not reflect the issue - it appears only on actual devices. When I built the app and installed it on my phone, it showed me a very helpful blank screen.<br />
<br />
I connected the Chrome debugger to the Ionic webview on my phone, and pretty soon tracked the problem down to the Google Maps API js file erroring out. A <a href="http://www.gajotres.net/using-cordova-geoloacation-api-with-google-maps-in-ionic-framework/" target="_blank">quick Google search</a> revealed that the best way to get around this issue is to run `<span style="font-family: "Courier New",Courier,monospace;">cordova plugin add cordova-plugin-whitelist</span><code class="bash plain">`.</code> The Whitelist plugin allows you to load third party Javascript files as part of your Ionic app. I'm surprised this isn't officially documented anywhere in the Ionic documentation - it seems like a pretty crucial issue to me!<code class="bash plain"><br /></code></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-61347955647753802142015-08-03T00:33:00.004-07:002015-08-03T00:34:27.100-07:00Error opening file '{{path}}/difftar.gpg': Input/output error<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
While using Ubuntu's built-in backup tool, which uses Duplicity, I recently got the following error:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Backup failed<br />
Error opening file '/media/yoshee/FreeAgent
Drive/Backup/duplicity-full.20140514T064948Z.vol2132.difftar.gpg':
Input/output error</span><br />
<br />
After some research, I discovered that the best way to fix this on an NTFS drive is to boot into Windows - using either a Windows Live DVD or an actual machine you have with Windows installed - and run the following command in the command prompt:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">chkdsk D: /R</span><br />
<br />
Where <span style="font-family: "Courier New",Courier,monospace;">D</span> is the letter of the drive you want to check. <span style="font-family: "Courier New",Courier,monospace;">/R </span>asks check disk to fix and resolve any issues it finds.<br />
<br />
Make sure you are running Command Prompt as an administrator. <br />
<br />
The process took six hours for me on my external hard drive, but once it had run through, I was able to complete my backup from within Ubuntu with no issues. <br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-80181846797367126022015-01-21T18:52:00.000-08:002015-01-21T18:52:36.156-08:00ASP.NET UserControl.Visible = true failing<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Today I came across a situation where I was trying to set an ASP.NET UserControl to be <span style="font-family: "Courier New",Courier,monospace;">Control.Visible = true</span>, and try as I might, the call was failing. Here's what I did in the immediate window in Visual Studio.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><span style="font-family: "Courier New",Courier,monospace;"><br />MyControl.Visible = true;<br />MyControl.Visible; // output: false;</span><br /><br />I almost bashed my head against my keyboard. It turns out that 'Visible' behaves like a property, not a field. You can set it to true, but it only returns true if the control is actually visible on the page. In my case, the control was not visible because I had set <br /><br /><span style="font-family: "Courier New",Courier,monospace;">ParentControl.Visible = false;</span><br /><br />on Page_Load. I was trying to set MyControl.Visible to true on postback, but since ParentControl had not been explicitly set to true, MyControl.Visible was still returning false. I set <br /><br /><span style="font-family: "Courier New",Courier,monospace;">ParentControl.Visible = true;</span><br /><br />et voila! MyControl.Visible immediately returned true.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Lesson: if you're trying to set your control's Visible property to true, and it's still returning false, check the parent controls and see whether those might not have their visibility set to false. </span></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-86861888835874404872014-12-31T17:33:00.000-08:002015-01-21T18:59:59.371-08:00Takeaways: Tuesdays with Morrie <div dir="ltr" style="text-align: left;" trbidi="on">
<div>
I recently read <a href="http://www.amazon.com/gp/product/076790592X/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=076790592X&linkCode=as2&tag=bugnpie-20&linkId=JTBHPRYRPALO2UER" target="_blank">Tuesdays with Morrie by Mitch Albom</a>. Apparently, it's a bit of a staple in the American education system, but I hadn't read it until now. My initial thoughts are thus: in one sense it was a bit of a rehash - most of the ideas Albom brought up are already familiar. However, he brought them up in a stunningly, emotionally moving way that was an incredible reminder of these ideas. <br />
<br />
One of my coworkers described Tuesdays with Morrie as bringing up interesting ideas, but not really describing what to do with them. I disagree - the book might not explicitly describe what should be done with its ideas, but it does show you. It shows you via Morrie's thoughts, speech and his relationships. <br />
<br />
Here's a quote from the book that describes the purpose it serves:<br />
<br />
<blockquote class="tr_bq">
"We don’t get into the habit of standing back and looking at our lives and saying, Is this all? Is this all I want? Is something missing?" He paused. "You need someone to probe you in that direction. It won’t just happen automatically." </blockquote>
<div style="text-align: left;">
<i>Tuesdays with Morrie</i> attempts to probe us in this direction. It is the final thoughts of an old Professor who's dying a slow death of <a href="http://en.wikipedia.org/wiki/Amyotrophic_lateral_sclerosis" target="_blank">ALS</a> (of ice bucket challenge fame), as written by one of his former students (Albom) who visits him once a week in the days leading to Morrie's death. Morrie's visible and repugnant decay is well-captured by the book, and it also captures his cheery and positive attitude through this dreadful disease along with the final thoughts of a dying man, rendered with the clarity that only death can bring. <br />
<br />
One of the most important questions <i>Tuesdays with Morrie</i> wrestles with is the meaning of life. </div>
<div style="text-align: left;">
<br /></div>
<h2 style="text-align: left;">
The Meaning of Life</h2>
<div style="text-align: left;">
Here's what Morrie says on the subject:</div>
<blockquote>
"So many people walk around with a meaningless life. They seem half-asleep, even when they’re busy doing things they think are important. This is because they’re chasing the wrong things. The way you get meaning into your life is to devote yourself to loving others, devote yourself to your community around you, and devote yourself to creating something that gives you purpose and meaning."</blockquote>
<div style="text-align: left;">
<br />
So what is important? Morrie describes three things:</div>
<ol style="text-align: left;">
<li>Loving relationships</li>
<li>Good community</li>
<li>Meaningful work </li>
</ol>
</div>
<br />
<div>
<blockquote class="tr_bq">
"Devote yourself to loving others, devote yourself to your community around you, and devote yourself to creating something that gives you purpose and meaning. “You notice,” he added, grinning, “there’s nothing in there about a salary.”"</blockquote>
<div style="text-align: left;">
<br />
Most psychology research guides us towards these same three things. Things like money are important, but only as far as they take you above the poverty line. Once you have a roof over your head and food on your table, the correlation between money and happiness stops. Focus on these three things. Let's talk about them:</div>
<h3 style="text-align: left;">
Loving relationships</h3>
<div style="text-align: left;">
The most important of these is your relationship with family. Blood flows thicker than water, and your family will be there for you when no one else will. Here is a key quote from Tuesdays with Morrie that stood out to me:</div>
<br />
<blockquote class="tr_bq">
"The fact is, there is no foundation, no secure ground, upon which people may stand today if it isn’t the family."</blockquote>
<div style="text-align: left;">
Oftentimes, we tend to replace family with a fascination with career, or we work on increasing our wealth. Wealth and a meaningful career are good in their own right, but there is something that only your family can provide. Even friends are a poor substitute for family. </div>
<br />
<blockquote>
"It’s what I missed so much when my mother died—what I call your ‘spiritual security’—knowing that your family will be there watching out for you. Nothing else will give you that. Not money. Not fame."</blockquote>
<div style="text-align: left;">
Morrie was dying of ALS - a slow, dreadful decay - and Albom, looking at him, wonders this:</div>
<br />
<blockquote class="tr_bq">
"Yet when I looked at Morrie, I wondered if I were in his shoes, about to die, and I had no family, no children, would the emptiness be unbearable?"</blockquote>
<div style="text-align: left;">
Do you want to die surrounded by friends and family? Or do you want to die alone? <br />
<br />
Death is always around the corner, and you never know when it might trip you up. I have a close great aunt who's very old, and she had an unmarried daughter who until recently, lived with her and took care of her. My great aunt slowly transferred all her assets to her daughter's name, expecting to pass on soon. This past summer, we learned that her daughter had breast cancer. It was a particularly vicious strain of the cancer that tore through her body, and three weeks after the diagnosis, her daughter had passed away. <br />
<br />
If you've been putting off getting in touch with your family, stop. Get in touch with them now. Pick up the phone. Send them a text, put in a call, write them a letter or an email, whatever you're comfortable with. "Don’t assume that it’s too late to get involved," says Morrie, and he's right. <br />
<br />
It might be awkward if you haven't talked to them for a while, or if you got estranged for the wrong reasons, but you've likely done more awkward things for less important reasons. Don't let this slip. If you think they've wronged you, or that you have a right to keep distant, consider this:</div>
<br />
<blockquote class="tr_bq">
“Mitch,” he said, returning to the subject of forgiveness. “There is no point in keeping vengeance or stubbornness. These things”—he sighed—“these things I so regret in my life. Pride. Vanity. Why do we do the things we do?” </blockquote>
<div style="text-align: left;">
There is wisdom in a dying man's words. Why do we do the things we do?<br />
<br />
One of the most important relationships you can have is that with your spouse. It can be the most powerful and fulfilling relationship you'll ever experience, and it can also be the most devastating. <br />
<br />
The most important thing to do when getting married is to choose right. You and your spouse need to share similar values. You don't need to be the same person - it's okay if one of you loves Chinese food and the other hates it - but you need to have the same attitudes towards important things in life - like, honesty in the relationship, how much you'll emotionally depend on each other, the values (or faith) with which you'll raise your kids, attitudes towards each other's family. These things don't usually change with time.<br />
<br />
This is the great filter through which you must evaluate potential spouses, but once you're done, the work isn't over, it's only just begun. You'll never have to work harder to keep a relationship than that with your spouse. Luckily (or hopefully) you should both be equally invested in the relationship, and willing to put in the legwork.<br />
<br />
Morrie gives us three things to watch out for: </div>
<br />
<blockquote class="tr_bq">
"If you don’t respect the other person, you’re gonna have a lot of trouble. If you don’t know how to compromise, you’re gonna have a lot of trouble. If you can’t talk openly about what goes on between you, you’re gonna have a lot of trouble. And if you don’t have a common set of values in life, you’re gonna have a lot of trouble."</blockquote>
<div style="text-align: left;">
The values we've already talked about, and those are the most important because they are difficult to change. The rest of those can be learned. Watch out for these caveats, and try and build openness and respect. Relationships are about give and take so learn to compromise - for example, if you insist on going to a Chinese place once in a while, it's okay, but try and choose a place where there's something on the menu your spouse will be willing to eat. </div>
<div style="text-align: left;">
<br /></div>
<h3 style="text-align: left;">
Good Community</h3>
<div style="text-align: left;">
There's a strong positive correlation between more religious/spiritual people and life expectancy, but any Psych 101 textbook will tell you, this is more because of the communities these people are part of on account of their faith, rather than because of the faith itself. We need to find such communities to be part of. The best way to become part of a community is to give to them. Morrie says:</div>
<br />
<blockquote class="tr_bq">
"Giving to other people is what makes me feel alive. Not my car or my house. Not what I look like in the mirror."</blockquote>
<div style="text-align: left;">
Relationships in which you give are important to you because they make you feel needed. Remember that this is an even exchange - you might be giving your time, or a friendly ear, or even money, but you get in return a valuable sense of fulfillment. A conversation between Morrie and Blom goes as follows:</div>
<br />
<blockquote>
“The truth is, you don’t get satisfaction from those things. You know what really gives you satisfaction?” <br />
What? <br />
“Offering others what you have to give.” <br />
You sound like a Boy Scout. <br />
“I don’t mean money, Mitch. I mean your time. Your concern. Your storytelling.” </blockquote>
<div style="text-align: left;">
<br />
Sometimes all other people want is to be noticed. Morrie tells a story from his early adulthood when we was researching a mental hospital. A patient there would everyday just go to a hallway and lie on the floor, unmoving. The staff eventually learned to ignore her and would step around or even over her as they went about their business. The young Morrie was moved, and he went up to her and started talking to her. Eventually, he convinced her to get off the floor - it turned out that the only reason she was doing it was so that she was noticed. In the end, that's the driving force for most of us - we just want to be noticed.<br />
<br />
Go out of your way to notice people. There's an art to this, encapsulated perhaps in this sentence: </div>
<br />
<blockquote class="tr_bq">
"When Morrie was with you, he was really with you. He looked you straight in the eye, and he listened as if you were the only person in the world."</blockquote>
<br />
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<h3 style="text-align: left;">
Meaningful Work</h3>
<div style="text-align: left;">
Work is good because it gives us a sense of purpose. That sense of purpose helps us be fulfilled. However, in order for this to be true, that work has to be meaningful. Whether you're a software engineer who has moved up to management and hates it there, or an insurance agent who rips people off and hates themselves for it, or a corporate drone who is tired of playing office politics, if you don't have meaning in your work, you won't be happy. <br />
<br />
Our culture drives us to go up the corporate ladder, but Morrie says: </div>
<br />
<blockquote class="tr_bq">
"Forget what the culture says. I have ignored the culture much of my life. I am not going to be ashamed. What’s the big deal?"</blockquote>
<div style="text-align: left;">
Find work that makes you happy, and do it. We already established that money is only good for taking you above the poverty line. Once you're above it, money has no effect (perceived or otherwise) on happiness, so as long as the bills are getting paid, what does it matter what you do? Don't let inertia cramp you for the rest of your life.</div>
<br />
<blockquote class="tr_bq">
"And you have to be strong enough to say if the culture doesn’t work, don’t buy it."</blockquote>
<br />
<h2 style="text-align: left;">
Final thoughts</h2>
<div style="text-align: left;">
I want to close out with the following statement from Morrie that really stood out to me:</div>
<br />
<blockquote class="tr_bq">
"Do what the Buddhists do. Every day, have a little bird on your shoulder that asks, ‘Is today the day? Am I ready? Am I doing all I need to do? Am I being the person I want to be?’"</blockquote>
<div style="text-align: left;">
Have you done what you need to do? This doesn't just mean backpacking across Europe, it also means having a plan in place to take care of your spouse and kids or any other dependants (including your parents) if something happens to you. Do you have life insurance? Any other documents your survivors might need to know about? Did you write a will, so that your estate isn't locked up in court if something happens to you? Protect your loved ones by thinking beyond yourself. Your death might not be slow and decaying like Morrie's - you could die in a car accident tomorrow. <br />
<br />
Don't shy away from the thought of your own transience. If you embrace it, it might just make life more beautiful:</div>
<br />
<blockquote>
"You see that? You can go out there, outside, anytime. You can run up and down the block and go crazy. I can’t do that. I can’t go out. I can’t run. I can’t be out there without fear of getting sick. But you know what? I appreciate that window more than you do."</blockquote>
<div style="text-align: left;">
Live life. Don't be afraid. Learn to love and be loved back. Life is defined by the people around you and the relationships you develop - not by money and cars and big houses. You can't take money and cars and big houses with you to grave with you, but when you die, "Death ends a life, not a relationship." You might be gone, but your relationships will survive you. <br />
<br />
If you haven't read this book already, I highly recommend it: <a href="http://www.amazon.com/gp/product/076790592X/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=076790592X&linkCode=as2&tag=bugnpie-20&linkId=JTBHPRYRPALO2UER" target="_blank">Tuesdays with Morrie: An Old Man, a Young Man, and Life's Greatest Lesson</a>. If you're more into Audiobooks, here is a link to the <a href="http://www.amazon.com/gp/product/B000XSAY46/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B000XSAY46&linkCode=as2&tag=bugnpie-20&linkId=WHTOFRQ6IFTFANHW" target="_blank">Tuesdays with Morrie Audiobook</a>.<br />
<br />
And here's a <a href="http://www.amazon.com/Tuesdays-Morrie-Young-Greatest-Lesson/dp/076790592X" target="_blank">non-affiliate link</a>. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
</div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-42696475754995690422014-12-17T20:58:00.003-08:002014-12-19T16:57:35.842-08:00Takeaways: The Healthy Programmer<div dir="ltr" style="text-align: left;" trbidi="on">
I recently picked up <a href="http://www.amazon.com/gp/product/1937785319/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1937785319&linkCode=as2&tag=bugnpie-20&linkId=B6SULTWYFSDFIW47">The Healthy Programmer by Joe Kutner</a>. The 8+ hours of programming are beginning to take their toll on my health with various headaches/eyeaches, so I wanted to see if Joe had any insights into what I can do to stay healthy. Here are my key take-aways from Joe's book:<br />
<h4 style="text-align: left;">
Walk Walk and Walk Some More</h4>
<div style="text-align: left;">
One of the big points that Joe stresses is the importance of walking. He tears through the current "standing desk" fad sweeping through the nation. Numerous studies can be cited which state that standing for 8 hours a day can be as bad for you as sitting 8 hours a day, albeit in different ways. The best thing we can do for our bodies is to take frequent breaks in which we<i> walk.</i> Walking gets the heart pumping, which is the source of the health benefits associated with walking. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Walking is also associated with better cognitive function. We learn and remember things better while walking, which is extremely important for programmers. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
There are three areas of improvement I drew from the Healthy Programmer:</div>
<ol style="text-align: left;">
<li>If you get stuck on a difficult problem, take a walk. Walking will jog the brain and help it get out of its current rut of thinking.</li>
<li>Take a walk either before or after learning something new. This will help you remember it better.</li>
<li>Take a quick walk every 25 minutes. </li>
</ol>
For that last bullet point, take advantage of the <a href="http://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro Technique</a>. There is a <a href="http://www.tomighty.org/">Pomodoro Timer</a> is available for Mac and Windows. I installed it on my work computer, and it looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.tomighty.org/img/ss-win.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.tomighty.org/img/ss-win.png" height="275" width="320" /></a></div>
You can set that little popup to always hover on your screen, and it alerts you when time runs out. When you get the alert, simply get up, walk around for a few minutes, look outside the window (to rest your eyes), and then reset the timer and get back to work. Using this technique will have remarkable effects on your health, and it will significantly lower your mental fatigue and increase your productivity.<br />
<h4 style="text-align: left;">
Take care of your eyes</h4>
<div style="text-align: left;">
Imagine not having your eyes. It's a terrifying thought. Taking care of your eyes is important, and as programmers, we're already at a disadvantage because we stare at screens for 8+ hours a day. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
The Pomodoro Technique described above is a good way of giving your eyes the rest they need. Everyone knows they're supposed to rest their eyes and look in the distance every 15 or so minutes, but when you're in the middle of tracking down that obscure bug, an hour or several hours can go by before you remember to look up. The Pomodoro Timer is a good way of forcing yourself to look up and away more often. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
If you think there's a productivity cost, think about how productive you would be if you lost your eyesight. Your body is important. Take care of it. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In addition to the technique above, I've also put a post-it note on my monitor with the message: "BLINK!" People tend to blink less while staring at a computer screen, so every time I see this note, I stop what I'm doing and blink several times for a few seconds. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I've also lowered the contrast and brightness of my monitor so that it matches the brightness of my office. I've also put the display settings to "warm" - per Joe, red hues are better for the eyes than blues. </div>
<h4 style="text-align: left;">
Visualize breaking bad habits</h4>
<div style="text-align: left;">
Imagine yourself breaking through your bad habits. For example, if you know you go to the vending machine for chocolate at noon everyday, and you've decided you're going to stop doing that, then visualize several times over the course of the morning how you're going to <i>not go to the vending machine at noon.</i> If it helps, visualize yourself doing something else at noon - maybe going to the water cooler, or going to a coworker's cubicle, and then do that other thing. Once you've done it a few times, your chocolate urge will be significantly lower come 12PM.</div>
<h4 style="text-align: left;">
Life should be a series of small improvements</h4>
<div style="text-align: left;">
I loved this point. "Set a new personal record everyday," says Joe. In many many small incremental improvements, we can make dramatic improvements in our lifestyles over the course of weeks, months, and years. Think about your daily routine. Is there something small you could do that would improve it? Seize that thing and fix it. Spend a few days making sure it's stamped out. Then pick on the next thing you want to improve and repeat.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I do recommend picking up the book I got these tips from - <a href="http://www.amazon.com/gp/product/1937785319/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1937785319&linkCode=as2&tag=bugnpie-20&linkId=B6SULTWYFSDFIW47">The Healthy Programmer</a> (disclaimer: affiliate URL). It's not the best book in the world (it doesn't claim to be), but it does have some valuable nuggets of information that make it worth the time and energy spent reading it.</div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-49620853049091715262014-12-05T21:53:00.005-08:002014-12-05T21:53:53.846-08:00A Story about YAGNI - You-Aren't-Going-To-Need-It<div dir="ltr" style="text-align: left;" trbidi="on">
Recently I was working for a project on a client where they wanted the project to be Live for a certain portion of time during the day - so for example between 9AM and 2PM, or 12PM and 3PM, or so on and so forth.<br />
<br />
While implementing this feature, a thought struck me - what if the client wanted to have a period that ran past midnight - so for example between 11PM and 2AM? At this point, the intelligent thing to do would have been to pick up the phone and call the client to ask. Instead, I thought to myself - well, even if they haven't asked for it now, they might need it later. Besides, I could build a decent set of unit tests and use them to catch all the edge cases, right?<br />
<br />
Wrong.<br />
<br />
What ended up happening was that I spent many hours writing the unit tests to capture the many edge cases that came with crossing the midnight deadline during a time period. I spent even more time writing the code to deal with them. The project went over-budget thanks to that extra time I spent, and the client never ended up using the added feature. After a few months in production, the client scrapped the project (albeit for unrelated reasons). <br />
<b><br /></b>
<b>Lessons learned: </b>unless you're very strongly confident that you need to build something for the future, don't do it. Don't fall prey to what-if's. Remember: YAGNI - you aren't going to need it. And if you do need it, you can build it later, when it's accounted for in the budget. Finally, don't be afraid to pick up the phone and ask a question. It makes everyone's life easier. </div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-48950901568209461092014-11-17T19:18:00.000-08:002014-11-17T19:19:10.812-08:00Postback not happening on ASP:LinkButton with Adblock Plus<div dir="ltr" style="text-align: left;" trbidi="on">
I recently had a problem while working on an ASP.NET website where I had a page doing a postback on an ASP LinkButton, except in FireFox with AdBlock enabled, the postback just wasn't happening. Clicking on the button resulted in nothing. When I examined the markup on the page it looked like this:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><a id="ctl00_ctl00_MainContent_Content_btnReserveTickets" class="btn" href="javascript:__doPostBack('/* postback param*/','')">Buy</a></span><br />
<br />
It looked like the Javascript initiating the postback should have been firing. I put a breakpoint i that <span style="font-family: "Courier New",Courier,monospace;">__doPostBack</span> function, but it didn't get hit. There were no console errors either. I racked my mind and googled around with no luck. The only potential solution I could find - to add a <span style="font-family: "Courier New",Courier,monospace;">CausesValidation="false"</span> attribute to the LinkButton - didn't work.<br />
<br />
Finally I posed my question on <a href="http://stackoverflow.com/questions/26981567/asp-linkbutton-and-adblock">StackOverflow</a> and <a href="http://stackoverflow.com/users/1289283/walther">walther</a> over there gave me a hint that led to the solution. He suggested that I look for AdBlock's blacklisted keywords that may have been attached to the name or attribute or something of the LinkButton, such as "ad" or "facebook" or so on and so forth.<br />
<br />
In the end, I discovered that there was a function adding a click handler to the LinkButton that was sending a Google Analytics event, as follows:<br />
<br />
<pre id="line1">$(anchorEl).click(function () {
<span id="line572"></span> ga('send', 'event', 'outbound', 'click', anchorEl.href, {
<span id="line573"></span> 'hitCallback':
<span id="line574"></span> function () {
<span id="line575"></span> document.location = anchorEl.href;
<span id="line576"></span> }
<span id="line577"></span> });
<span id="line578"></span> return false;
<span id="line579"></span> }); </pre>
<br />
It turns out that once this click event gets attached, and because it's Google Analytics, <i>all javascript on the LinkButton gets stripped off!</i><br />
<br />
In the end <a href="https://www.domsammut.com/code/workaround-for-when-the-hitcallback-function-does-not-receive-a-response-analytics-js">this blogpost</a> guided me to a solution:<i> </i>I wrapped the click event binding above in the following if statement:<br />
<br />
<div class="line number7 index6 alt2">
<code class="js keyword">if</code> <code class="js plain">(ga.hasOwnProperty(</code><code class="js string">'loaded'</code><code class="js plain">) && ga.loaded === </code><code class="js keyword">true</code><code class="js plain">) {</code></div>
<div class="line number7 index6 alt2">
<code class="js plain"> // bind event</code></div>
<div class="line number7 index6 alt2">
<code class="js plain">} </code><br />
</div>
<div class="line number7 index6 alt2">
This means that if AdBlock is ever blocking Google Analytics from loading, the anchorEl's click event is never bound to that Google Analytics event (binding it successfully would be useless anyway, since Google Analytics isn't loaded), and AdBlock doesn't strip the Javascript from my LinkButton. </div>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1684186373237811820.post-88576233515096193952014-11-16T18:00:00.001-08:002014-11-16T18:00:49.632-08:00Learning Angular | Using a factory to make an API call <div dir="ltr" style="text-align: left;" trbidi="on">
I was recently building an Angular app in which I had a search page and a search results page. Obviously, the API call would be made after a user hit the search button on the search page, but the question was whether I should make the call from the search page or the search results page.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2U5U9R-BsIQ_RdcHWU_cSqPaRcSUTVwKonSuaHgZ2xO2moGPyvKcwSUqECaXCrAWspxQ79QW8NEE2-4PzJkOqoA5v39UdfuvUezkjlrVqMHtqwqKHfgTZOrO2nRtGFkxWNlv1pHfFU4s/s1600/search.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2U5U9R-BsIQ_RdcHWU_cSqPaRcSUTVwKonSuaHgZ2xO2moGPyvKcwSUqECaXCrAWspxQ79QW8NEE2-4PzJkOqoA5v39UdfuvUezkjlrVqMHtqwqKHfgTZOrO2nRtGFkxWNlv1pHfFU4s/s1600/search.png" height="263" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Search page on the left, search results on the right</td></tr>
</tbody></table>
My initial solution was extremely complex - I tried recording the selected parameters, and then I created a super-complicated route that allowed me to pass them into the the search results page. However, that was way too complicated, and I quickly realized that there had to be a better way.<br />
<br />
After asking around a bit on some Angular help channels, I figured out that Angular services and factories are singletons! This means that I can make the call in the search controller, store the results in my API factory, and then bootstrap my search results controller user the cached results. This ended up being a much faster, simpler, neater implementation!<br />
<br />
Here's how my final implementation worked:<br />
<br />
<b><u>Search function - searchController.js</u></b><br />
<b><u><br /></u></b>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">$scope.search = function() {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> var searchParameters = {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> // create search object</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> }</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> </span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> API.search(searchParameters).success(function (data, status, headers, config) {</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> $location.url('/results');</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> });</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"> };</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<b><u>Controller - searchResultsController.js</u></b><br />
<b><u><br /></u></b>
<span style="font-family: Courier New, Courier, monospace;">// gets the cached results from the API</span><br />
<span style="font-family: Courier New, Courier, monospace;">var data = API.getSearchResults();</span><br />
<span style="font-family: Courier New, Courier, monospace;"></span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<b><u><span style="font-family: inherit;">API factory - API.js</span></u></b><br />
<span style="font-family: Courier New, Courier, monospace;"><b><u><br /></u></b></span>
<span style="font-family: Courier New, Courier, monospace;">angular.module("donorsApp").factory("API", ["$http", function ($http) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var constructSearchUrl = function (searchParameters) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><span style="font-family: 'Courier New', Courier, monospace;">//returns URL;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // cached results</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var results = null;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> return {</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: 'Courier New', Courier, monospace;"> // gets called from the searchController</span><span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> search : function (searchParameters) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var request = $http.jsonp(constructSearchUrl(searchParameters));</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> request.success(function (data, status, headers, config) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> // caches the returned results</span><br />
<span style="font-family: Courier New, Courier, monospace;"> results = data;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> });</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> return request;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> },</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // gets called from the searchResultsController</span><br />
<span style="font-family: Courier New, Courier, monospace;"> getSearchResults: function() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return results;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"></span><br />
<span style="font-family: Courier New, Courier, monospace;">}]);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: inherit;">Lesson learned: don't make API calls from the controller, make them from a factory or a service, and then cache the results as needed. </span></div>
</div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-8984298644944953922014-10-06T21:17:00.000-07:002014-10-06T21:17:13.779-07:00Be Careful What You Think<div dir="ltr" style="text-align: left;" trbidi="on">
In Western culture, it's commonly considered a sign of intellectual freedom and ability to think about and consider several points of view before advocating a certain one. In our world, it makes sense to debate the pros and cons of various opinions - the good and the bad - before coming to a conclusion.<br />
<br />
But consider this - the way the human brain works, in order to evaluate whether something is true or not, you have to, for a moment, believe that is true. This is because our minds contain a model of how the world works. When considering a statement, we evaluate it by adding it to our model and then checking whether the model still seems valid or not. If it seems valid, we accept the statement as true. If it doesn't, we reject it as false.<br />
<br />
<i>This means that for an instant, in your worldview, that statement - however ridiculous - is true. </i>And this affects us. The first time you think that thought, it affects you a little. The more you dwell on it, the more it affects you. The better the thought originally fit in your mental model, the stronger its effect on you.<br />
<br />
For example - if you keep thinking of how much better your coworker Joe is than you at your job, then even if you don't actively obstruct Joe's work, there will likely come a day when you have the opportunity to hinder him without anyone finding out, and you will take it. Once you take it, hindering Joe in the future will become okay. What was once an immoral thing - something you might never have considered - becomes a real possibility. Additionally, if you are naturally a jealous person, or are in an environment where jealousy is the norm, your mental model will be more accepting of such thoughts, and your progress down this path will be faster. <br />
<br />Therefore, don't just be a vacuum cleaner, absorbing every piece of information that comes your way. Carefully evaluate what pieces of information will guide you towards being the person you want to be. Be a person who thinks good thoughts. Don't expose yourself to wicked ideas unless you have a good, solid framework that will help you discern the right from the wrong. The human brain is like a sponge - wipe it in muck and it becomes dirty. Dip it in clean water and it absorbs the water and even cleans itself. Be careful what you choose to put your brain in - be careful what you think. </div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-7774237824428624332014-10-01T20:05:00.000-07:002014-10-01T20:05:20.495-07:00Creating simple logging "apps" with Google Forms<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
If you want to improve something, you've got to measure it first. Putting numbers on things helps us tame the wild waters of instinct and gut feeling. It helps us break things down and make them easy to understand. Numbers help us improve. <br />
<br />
I've often felt the urge to create a means of recording something or the other in my life, and when I've had this urge, I've often fantasized about whipping out my Eclipse instance and putting together wonderful Android app that lets me record that thing and has a few dozen bells and whistles to boot. Of course, this never gets done, since I've never needed to record anything badly enough to create a dedicated app for it.<br />
<br />
Recently though, I discovered a lovely shortcut to doing this, using <a href="http://forms.google.com/">Google Forms</a>. I'm going to describe how to do that in this blog post. I mentioned in <a href="http://bugsnpieces.blogspot.com/2014/09/working-better.html">another article</a> several ideas to help productivity. One of these was a recording what you eat and correlating productivity with it, so I chose that as my initial logging "app"/webpage.<br />
<br />
Here's what the final result looks like:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbd7vmJXFkigDd6QzUxFm2JlWws_izNlcxlqMOpun4BLD68-oR8OSoOfhLSj8UM3ZGEqdP2_zblLL9_JfvCTzVhhO5Xv1nB5_Al8FcrO8cEjsz-IRpwYOdk86PNO8ZkoqXMmOGXSWb1dg/s1600/2014-10-02+02.40.50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbd7vmJXFkigDd6QzUxFm2JlWws_izNlcxlqMOpun4BLD68-oR8OSoOfhLSj8UM3ZGEqdP2_zblLL9_JfvCTzVhhO5Xv1nB5_Al8FcrO8cEjsz-IRpwYOdk86PNO8ZkoqXMmOGXSWb1dg/s1600/2014-10-02+02.40.50.png" height="320" width="180" /></a></div>
<br />
<br />
<br />
<br />
<br />
This allows me to enter what I ate for dinner, breakfast, and lunch, and then in a 1-5 scale, rate how productive I felt at work and at home. The real trick was to keep the form simple. Once I conceived the idea of making this form, I wanted to add all sorts of bells and whistles - for example, if I wanted to track productivity, shouldn't I look at other major indicators? Maybe I should have a field for sleep, and another for any snacks that I ate. What if there were extenuating circumstances, like a friend visiting from out of state?<br />
<br />
In the end I decided to include a catch-all "notes" field at the end of the form (not shown in the screenshot). I knew that if I made it too complicated, it would just be an excuse for me to procrastinate from filling it out at the end of the day when I'm tired anyway.<br />
<h3 style="text-align: left;">
How to create the form</h3>
<div style="text-align: left;">
<b>Step 1:</b> Go to <a href="http://forms.google.com/">Google Forms</a> and create a forms with the fields you want. In my example, I used type "text" for the breakfast/lunch/dinner fields, type "scale" for the rating fields, and type "paragraph text" for the notes field. This is what my "dinner" field looks like: </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<img alt="" src="data:image/png;base64,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" /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Step 2: </b>Make sure multiple responses per person are allowed in the form settings on the top of the page. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<img alt="" src="data:image/png;base64,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" /></div>
<br />
<b>Step 3:</b> Go to File > Send Form. This will allow you to get the link to the form.<br />
<br />
<div style="text-align: center;">
<img alt="" src="data:image/png;base64,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" /> </div>
<div style="text-align: left;">
<br /></div>
<h3 style="text-align: left;">
How to add the form to your phone</h3>
<div style="text-align: left;">
<b>Step 4:</b> Copy the link and send it to your phone. You could just email it to yourself if you don't have a better way of doing it. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Step 5: </b>Open the link on your phone. On my Android phone, Chrome has the option to "Add to Homescreen":</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqu1smgbUWUrgrh_a3RcoZqZxJLb7nCA17tsWBOJNuLOcEEXvMNbI_JjPUCsPAhIoGjcDd7P2V4o835Y3KusMtl61kjm7Dh1DhKXuvKXQBOd19y3cc4xePPHSklTIqyAgyMXc9S3gNexQ/s1600/2014-10-02+02.56.40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqu1smgbUWUrgrh_a3RcoZqZxJLb7nCA17tsWBOJNuLOcEEXvMNbI_JjPUCsPAhIoGjcDd7P2V4o835Y3KusMtl61kjm7Dh1DhKXuvKXQBOd19y3cc4xePPHSklTIqyAgyMXc9S3gNexQ/s1600/2014-10-02+02.56.40.png" height="320" width="180" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
If you tap that option, the OS will add an icon representing this form to your home screen. You can tap the icon, and it will open up your browser of choice with the form loaded! </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
So there you have it - using this technique, you can make what is essentially a quick "App" to record any data you might want to on a daily or weekly basis in a convenient way using Google Forms. Whenever you want to check out your responses, and data logged so far, just log into your Google Drive, open up the form, and hit the View Responses button:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW4AAAA9CAYAAACNz4NiAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7tnQlclNXXx7+zsIPs4IKAuCVqluK+a+aWVpipZYv1N9PK1NxSc9/S1CzL1FywNLc0NTN3Q8Ndc0Hc9wVEQER2hnnvMzDIMjMgsgjvcz+fB+aZe++55/zOuec599w7MwqtKMhFRkBGQEZARqDEIKAsMZzKjMoIyAjICMgI6BCQHbdsCDICMgIyAiUMAdlxlzCFyezKCMgIyAjIjlu2ARkBGQEZgRKGQJE4bs3D61yL1pQwaGR2ZQRkBGQEnk0ECt9xxx1iUN02zDqfVDAIRP/Jy2oFCkXWS+Vci24zgohKLZhhSh4VDXfXvk2jT/YQnRrHuYB+NC5npsPJxrs1n/92iQQhlDZyG30bvsv6sAJ4kGojWNM8py4ydNN8DRH5OLOU8N8IfOw7s/VhIWshZjuv2znQc/ejrAPFBfGRmzktf48yyUCR8WmSC0mpcZxdPpaRI7/n34isek25s5UZ45ZyPhEyv86NZOZ6zb1dfPPVQs5KBiSXvCOQcoe/vh5PwAUBfraSb0wTzrJw5Mgi2JzUPCIsqoCctl54tT09/rpLTEyMuB4SHX6FwCm+/DviVYYExmTH6P/FfWrE3wwfG8Uno1pgGTyd1z7+h8ZLrhCfEkfI98+xoU8PFl1JQeHUlrH9QhkzcidR+XCqWcBUONJl/U1u3LghrmCWv2SJdccVnNXd3+Dm+i44Kv5fwF+sQqbGhLD/ujMvVnpA0KFQUoqVG3nwvCCgtK9N154v4WGWl9bZ2qgsUdYs145BH7akWsWyONiVp9mQzdyVNJ9wkeV9G1LBRiWiNmu8Wg1i3XW9A9YQse9rutd2RCkiOvPyTRmw4gLxwhEknh5DjQrt6du5EhZSVFzmJdZG3mJei8q8vimSp/UVaSIoMbO2xdZWuuwo41KJpu+PpHfFSA4fDiUZ4/yZkivp7ERqujXngzca8JyvL1V86tLru2M81EXxKdz9eyyvVC+ji2LNyjbgg4UniREC6foVMI6m+Myp6iQuLBpDYP2hvFpBhUXNURy8eZivO1TEUvCdkJCMwqYcbtaSF1Xj4f8FdXaOZvGl5JyknugdJVauHlSsWFFcHoK+CpW1Gx66+4p4uJoRZgQzU3hmYcGkHT4Rs/lsbMKWMlE0bTv5HDpP3TREnfyXu+7NaNOuJsnH93FVmohPXFKJubiT5bMn8KWI6EZPmc+m01FiJqWX1Edc3L6Y6aNHMnLUZOb/eTZtXmiTCD2ynvnTxzJK9JPqfthwkijRUYoqZ0/5mc3rFvDNtMmMHztF9AshRjefNEQHb2Hh1DFipTCGr5duZuPsscw/GSt8RCpxV/9hxZzHvPxx4j7Jklgp9zn++w9M/epL0e8rpi/czGlpMEPFVFtjfKfEEhwwnql/3BB+JK1oH51i8biZbNM5RhO8CZmizvzJgqmjBW9jmf3bQcKSDOsiNfo0m1bt5JYYxDROhgRTokwO3c3+SjM5cj2UsONfovmpP1OPxxH59+cM3N2MlTeSSI07xSTHlXw6eh/S6jXlxnJ6dJpGdJ+/CUuI48rSpvzbrxNjjsTpRkm6s5Pj9RZx5tpFbtzZTncnDz4NvMyGrk4USgCWGsulP+ez5qYLjRqWRWGUv1iTckm8J4f/y4na8zgcfJaQwBGkTnuNIXujSbwwl66vL8RySCARiULmgJc4Nbgd/f6KEKoU/QoUx9z5zKLOxBCWL75F/bfrUUaqUFri4FIG7YWZ1LctQ/U3V+I1fBKd3VW6bgr7BvSqc4VFv54n5yIuC+WnukkygVmCibrH2S5trvp6KgalzppoVre1y5p6s2nKovC0aZubrWce35jtGJ66T815GoGUexw9+IBKzWrg4tkYP8sQ9obE6GzySUpq9HFW/RKEtvH/+GrKZIZ2deb0mlUce5BOSXOPkCQ/Phg9kVEf1CP+wB/svZ1Myr19rNh4jUo9RjB5+lTGD2iG9thmdt1MC/JSYy5zzakTnwrnPGZga7SHNrBH9NNEHODX1adw6DSIiZO/pFflMI7dS+/z4Dgrl+4hwe8DxkyexPDuXlzfsJTtt5KIO7+ZTZe96fnlFKZNGsTLVv+xcftVA3asNdnWKN+3zPBpXJWUs0e5o2NHy6OLh7hhX48X3dSkGuVNyHQ/SMh0GqfOQ4RMw/GvcI/LsUYeKtmUYwwnYzpUYlGPAR/4YS+y3RaeLWlT7gHnwpJR29ijur2NJT+vIfCmEz1/D+Xur22FY9Bwe8s89rkPZNYnDXG1sMKj/Wi+fjmClT//h851m9elf7/WVPWqQkXbQkijp0Txa6tMk01lS9V+R2k+909mN7c2wd9JkozKlQaRwq4tYz6tTxnxhDHz6MoQf/hj4UGCNyzhtO84Zv3vBZzMrajYfgzfvaNi8w9BREtdCxTH3PnMrFBN2AG23a5Ay2o2WfRsXnUIh+ISubNzEDHj2tF3y/20Ca2wpUar8tzcdoSIJ53hxiwpx/vJXDOK2T+cNFqXjqeOnsKEHeYYMH9vqGxov/gwwcHBj6+jv+Bvrxb08mDrmUY1bDvHiM0fZ3nqlXTrAMeTfWlW2RqF2h2/xi7cDDxBtlR3LrS0xF46zI0yTenYoALWKjWONbvwUb/XqG6THmqpytPqpdpiVWVOGe+61HZIICwmBZVzI/oM7ktbb2tS42N4mGiOrVkiDxPSH1fqCjT288BSkFE7VKKyXQL3HiUReeowoWXb0aGOC+ZqGzybdKaJo4S5lofnDnDVrimdG1fERm2GfbU2dKwax39H7qIxF2mChxc4euQ0V6OtqNN7DKN7VMEih4QKVCbamuLbyqsxNbTnOHpbeO7UGM4fuoVT/To4q1KJNsrbTcKCjxDm1oZ2tZ2FTLZ4N+9EPbu0YCkHe9nfMIiTcaevRhius43euaowU4qFisC8TNsf2DLnKybO/5w2I8NReLRi4LcBTO/mRsTl+yRdnsTzlpOyDG/ZLlz35FOYOeBum0eGswuQl3u1HV1FdDCnoQWPLm9lSr/xnO8glk3964sHUAKXTfBnYVQuT93Ianux5JesTFdUlClnTdypO9xxfICFhw9OGWKZ417NhZSjd3kk4VvAOJri0zydO/2/pLBzhGmd8dQZfqaiVIlNDBXl2g5ncrvvePuXk8S90hZbzHCu5II27DxSkFPeMhvBArlNJvK6McxEDvyKsbp0PNN5MG6HnmTHIX9sq3HwroGvr+3j7nEPcDZXIBbnudp65jEN2044kg+zLYylptiUvLL/JNEPk1gy+aRuNavViChYOJsDt5vQ1TOvCdRU4h/EobVxxlrvCpRWuHpY6cTTuQ+xirOzSK9UCKuS/IR46Cu08dz4dz3bjl7jocoe9/LOJIv0gKM+Kaowx1pgmVZEP4UWrVZDbEScmGsOIp2aXiWCL1fhM66K0eIiYkVEvotvx+xKr0z7p64ai7rKq7z/yg52HdzEoq2xYvXoQ5Mub9KxloOw9KzFwlRbU3xbeNCwpoJfjt4i3vE+h0PdaNjDUdAXaRKjvIn9NkU8SlsHrDLcaZpMedpjN4hTNoEy3Wab6fqaVGKvXySpyUQ29/8B7YPzbPumN936jqRL++V4VXTAss5QQo5+hreOgmh/6wrhlhVxuHtEaFPktvWkpBcFbrRqypT3xsdHTDafqizfpqR9nTd4uUwQh6f54WCUvwqYXT9lRK6VNBWspjy4xu1YMdN0kUYCt4MjxKmMipT3sifx8BVd7i7tIZrI3ZBwVG7lxH1oJkgzv8wvjqb5bJ3Jx+hGE6wqxGQSsIuSSviGN2k0+Xn+CBpLbSkU0aYQL7yHRVkRraSzp1RJ7aUTIZn5LcjXZjh6CswOGcLME89Kou6ooToJz8vpjJjCbyU5cChI9nW0hFM3akvC1m8FZRnRsO2UxaqQMNY+Os++i9Y06zuIlmIZryvCIV1cN49NgZd46e0aeXy4KbG0F046LpI44Yx1MVfqQ87tPURs7da8kC5lTltJJerYKtaedqfX4A+oKQIHRdJV1n69hIcm80MqbJysSDn3gETRTue8NbFE6NIKghcHK9TlWvDFZ01w1BmslqToSGLVZVBFhaLxasd7jV6F+HAu7FvNr79vpUa1XlTO8iQXfaIijLTtgdNxU3ybU77+85gFHCHE/T7h5RrhK6UkRLEyypudCOJ2kXozDUPdM04TR1Sc8ahZRzCfRT+Ps3VPJWLHEDp0GsqGq/GoypTHw9kCta2rUKqail0+ou6lKQxdfILIFA0PT//M23Vq0fO3Wzl3tBVm4ikew9VzV7knWUUhFIuqH7P8x/bc/LoXX+2Pw8MofzcIMypXGmPaR3sZM2ET1+OF094uZNxoRfd+Dan1+vvUFJuQw5ad4kFyPDdF3aAVyXTs1ygtr2xQrvzimDufmYczd6+BO/e4GiFtnihxfKEt5c7OZsTikzxIjCbktxEM31eed/u+gLWuYzL3L4lVVNnncMtrUGZQPlNvmlHJKGbNqWO0LjOepvAzNXZB1T2ZrRu2nbpkTWAVFG8QdWo/1+3qUd/LETs7u7SrjCs1mj2HImQvZ6LzOt8U2FZpgGd0ENuPh5KQmkxUyE42/nOJFLURF6ETQ0tKfCKpKitsLMUhBuF8rwft4FRsChpp2W60qHCq7Yfr3V3sOBNBkiaeO0f+JigyzX4dajSgQsRuthy5Ix4kqSSGHmHV3DmsPPmAmEt/smTpFoIjxYa7ZRnsxYa40tz2ceSeMabIcRttmzvfanc/XrQIZsuOe3g0qo6dDgYl9kZ5i8GhViMq3N/D3/+JzINw2rcO/s2RQvn8SqoIKQwWNZ7vLmPBsXf47DlruiepBdD+TP59IvXEg1np04/1GyL4SGw2OH8sMrzWlWj32VrWfVwZs3PZCFr50rNbOV59rxYdoy5y8HPRxuCYT/Om4Lf3In5a58s7vUfz+qnZRvirjofGuFy6Y1RmlWkYOZEXrF8jxq0hfeZtZWZTO8wVg9m4Jor/DRZRwP9iMRdP4d6zdzCniyvK7DJniJJfHE3zmR0plVsTOnh8yc7gGAb6OKKu1Jd1G+7w/oDGOH4Sj4VXGz5ZsYPJDdJdiPYhZ3bfxqtzA5xNzcvsAz3hvXl145hZKo3XKU/pBzKN3xOyk6/mZqZsPTgbSSO2k6+B89DpWNBdHP164pJlFiuw8m5MTcsFBB4N53nfPBASTZQO9ej1zgPW/fEj439PxsK5Gk3fehs/KeS9Z4yGCucGr9Lq4hp+nhAksoVOeNVtTrtKtzl0O5oUV2P9RGbRtSm9uz9g1cZZjF2hxKlaHbxs1SSLlaDKqSHvvBPH+k0LmbhBHB43c6Jqk7fp3dAVe213Xr+1mk2zvmKFRol12Vq8/E47KuRwKkoc6hprq0Jriu+aIuJXu/CinyO7djrRqIpNRtLAOG/OmKmET+j9iDUb5jJuDThVr08tp9vEG4chfzWaBJGikr/WNQM86UhXrfp7mHlnD6/a5w/T4umVzIVvGtPm0ERxEqBTrmentRGb8K8znTaBgXzmY+TZXTyClNhRS67tFA/kmoc3uBbjiFd5O8Tn6cQi8AZ/zAwgTpxOeStrzqN4GHzGRy3EeOsZl7xUsWdG1Q8n00asNDbcyi2nlsL1tbMJ6TCZdyvJTrtUmUEJEib1wTFWL1jJwTvxYpMzkbATezmV6EEt9xyhcwmSquhYlWdu0WFdqCMpHNsxY9oK/Gfso9t3rbA3siGmjdrN1ABvZmw03qZQGZWJywgIBMw8XqZny3WsXzCBP5PEB7ncatDsne7UKpTjN6UPcjlVUvp0KkskIyAjUMoRkFMlpVzBsngyAjICpQ8B2XGXPp3KEskIyAiUcgRkx13KFSyLJyMgI1D6EJAdd+nTqSyRjICMQClHQHbcpVzBsngyAjICpQ8B2XGXPp3KEskIyAiUcgRkx13KFSyLJyMgI1D6EFBfuHCh9EklSyQjICMgI1CKEZA/gFOKlCs9hKtVq1aKJJJF0SMg61a2hcwIqGNjC/P3OWSwixoBWZ9FjXjRjSfrtuiwftZHknPcz7qGZP5kBGQEZASyISA7btkkZARkBGQEShgC6nPnjP4KwBOLolKpcHd3p0wZ3W+Ny0VGQEZARkBGoBAQUDs5OT01Wem3GKQrVfzMUHh4uO4nlORSPAjIv4tRPLgXxaiybosC5ZIxhtrc/Ol/K1vvtDUaDcnJySVDcplLGQEZARmBEoqAWpQCYV1y2nJEUCBQykRkBJ4ageBg8UO3W7Zw7do13SrY29tbd7Vq1YqaNWs+NX2ZQPEioFYqn35/UnLYEh2FwsjPrhSvjPLoMgL/bxCQjgz+8MMPHDlyJIvMkgN3dXVlxowZtG7dmvfff///DSalUVCl5GwL4pLAkR13aTQRWaaShMDMmTNzOG2Jf2tra4YPH84333yDFI0vW7asJIkl85oNAXVBpDf0m5N6WgVBU9ZU/hDIC/ZStBUXF5fnAby8vJAcglyKF4HcdLt3716dU85cpChbSo/4+vrqUpkuLi4MGzZMd/n5+clpk+JVab5HL5gEd76HlzsWBwKS05aWzFLOUypvvvkma9asMciKtMSWIjW5PPsISDnt7KV+/fp07949y9uSM+/cuTOSo5fz3dkRKxn3yszRckG8Lhli55NLbT77PYPd9E47N9by2i43OnJ94SNw/fr1LE563LhxRnPZkkOXHspyKZkIPP3OZD7lTo0J5vep/Xnj5dZis6Qt/v2m8sf5R6QKeonBs/Fv3Z5Rh/O+nM8nG3nqpk28ya7vhjJxb9QzyV+ehCjIRkmXWfyW0Jv/bIIT9IQTufDDm0KXb/PTX7N44xnSX0GK/izTkiJpKbqWUltSkSLqtWvX6q7sKRTpgSw5+hylGHSbeO67DHvJ/DoHb0/yRkoYOyb1pr3YiG3/4QLOJz5J52e/baHkuHMVO+kaq4YOZNEFe17o8i6v2YcSuHY7cwfHYf/rRJrkSqBoG6Tc3c2yDccoU6Noxy3M0aT0SOaS/d7k2OaetG3vwa/L9vP3pQHUrGUJSTfYFRgOnh/ysl8tPPpXxsnLzCQZubJgEZCO/Ull/Pjxus3Hf/75J2MAaXMy84ak1FZy9DlKMetW7daC9/t7Pr3txIXw5+7bWLb6gnG96uP99B9XyQFVcb6hbv/uOD4cOZRuNWxJOvM1b/Tbg0+nOoTv3s+NlLI0/3QmE7r7oL6/nx/GzGDd6Qg02ODdtj+TR71GJUuFbtNDf0nC5LaJEn92JasupFK5/1xmdPdAjZaufp4EHLTEJkV/HjyFe4Hf88n07ZyNLUuLT6YxqktFzBKvsXn6OBb8c5N4VLjU6cmXE/rge/Nb3vpsL94dnuf+niBuatxp8vFUvvKvhEVqFEd+nsj01Sd54FiHTn7hbNnuwviN39LCOoKDiycze81J7mvtqdahH6MHdqCiRbpakq4Q8OUybkm3U/35OH413/pIORPD/JlrDNNzOvYFXcfcosXL5Tm79yTh1rXx71GTWxs3cDjUgtq9JzHl/drYag33z+AnF2vJDXt999WrV2dQ6tGjB5nvsw8h1Welq6Z86454L1vE/r8vMKBmbZQ3dvPPPaj0UUvcI9YzfP5fVPNqR2Pn6Jz4DqjB3v59WFF+Imun1ef6rJ4M/MuOPksX85blXwzoNRfVkNXMe8UV/ZIw/tg4/Ied5Dk/B84fj6PNjNk0Ozorh97KPwpiwYTZbDgTKezUGu/WHzF2eBfcz02nx+BDVGtTmdv7ThBu48urg8fycXM3zLSJ3Nw5n5mLtnLmfjJ2Pm14b9hgXqtuQ7JY/RmzK3WE4bG81ZE5ZRY2ZYw3b4u8HaPNTbfSxqMUWUsbkQMGDND9DwgI0G1ES1fm/mfOnNFF5jlpFr1uM3gQfiQ57B+WSbbjUYuwsX357tE7LF7Sh0qqUDZ++hZz4z9k6YIO3A0wMWcTQ5jbZwKnJEPeO4vRmm/4fbw9N3YY1nFiNttq0M2ZfWsjc5+rxZavAGXThB18O3gGBx5KSQqpxHAuqj6jlvzER5VC2bd4BSHxyVz/43tWny1H/wWrWDb5VSo8OsuJ0Px8SjKFyHMXxSguvFjHVThtqSiwe/4tPv3In/qu+v3SVG5eccT/y9G84X6HwMW/cU4syxMubWfHJRs6jJrDrCHNSD65koCj0cL1S+UR56PqMWzBd3zoFUZQwGrRR0vsiR+ZtOoktl1GMH1wQyIO3NG1RiQ+IgPFg2lVGA2HfsOcMe3RbJvJpM23hVtOL2bl6fBxR5zFbcVekxjW1D7dmRjiLzd64Zyz9Gf69wOpHXOa9b9cp+nYeXzZXMPp3wI4EZtbfz1Txf/frFwLOvjAg3+3cSE+iVtiWR5GZTq1LCcep/piRJ6tqTRoXpakkH1cibnDsZPRosMtDodEE3VmL5cFnbb1nDKc9mNpH3IuqSWfj/qMtne/N6C3a1zdPJ91IeXo+/1yFo7vSrlH5zh5V2+nDwl52IiR8+fySfVrbJg0nd3hqSReWMqIaZu4XfVtRozqT6PE3cwbNptDGXPCkF0lccPgWElGbCo33p5ep9LpESktoi/SfadOnTLupQewdOlTKNIGpaFSPLrNxonKjWb+dVDd2cHOm0mkhO5j83mo2rUVNkG5zVlveox6D29B0qXjKGb2rQ656lhvWwPpXs1K9MxtrhpCrujeUw8a3JJ/vghi6/l46kr8imlX87X21PIUDrSWcFdXInmUosSzig82mkDmDfiEqn4NaNL2VVp7mD1RpK0XK+0JK0XqpgRV4tuzJ238zCn7ohPrtkQQpwGrmn2Y+NVBAg8EsuW/czwULjv2YRKp7mm8+3ZpJ3g3Q1lTfAfLtUjRJ5nQY2eES/fls/faUd8xBfsOGzios+9Eru09Jf4msGXGUPR78lb/3SbpjQppDxWFJW6e7kjQ2Hn74uNkTvJdqa8h/kzQKy/1caR+uwZU8ryEt/gerjOeHWj1nBfRNcSSdV8sMQnxufMjkXkWilqsgjpX5afv/2XbWfFg2xMK1QfRzE24bckP64oxecJxe6cxLr/tI/BkNc6GWVHRJYmrB07xn+Ycqd7v0dD1sft/LK4ZL/R4k/aNlRwfN82A3kKxau+DtWYfP30+iMr16tOodRdaVhTrZB1PVjTs+Qp1fKyo1qMxSw4FceDmQ3wO7yGU5xg2WOREXZQ0sw9m34iDbLuUSF3dyktFTrtS41nZ0FipXFlqyKZM8PZYwKd6JTlp6YM3P/74oy7ilor0nuSo79+/n0F7/vz5uqOAUkRusBSLbrNzosK5oT8NLMaxc/tF2tj/xRXl8wxrLiLneYbwzTRnlVa4+3iIvIBYF5etKqJ3M679ZFzHL+iG1tuWDbFBG8R9bnNVBLp2xRdyC+8seU8F4pM46ciZYWkuMaRApZTek+qVOLacwIoFe9i6PZCDh/YSMHUr+yNXsLi3V6YIK52EyX9qnKpWElNoL/+JtEtK9fLCQaZyf+dXDFqp4tWvxtBV11+NlUXa5FWpBD/aVMGJaLdjHO9NO4Fnx7fo3LYp50+uRyH4TOM+e5+0J0PaXw0iC6OTR6t5/MRIlZ4eFk2Ytm4yDa3ixceDk7B3syf3lFj2sST+RAxvhF7yASk1ocJSl/ZVCrzFnYW5DjulKo17wZnR/rnzI9EtyqLCtckrVP9+Dnt//hmrOwpqDm2C5G8zr8OM4WGeKJyowwb2rlpPjIUfX/SKZM6S31iZkkiFHg1xM3hQ1RJ7awkxEzgp6rLs+0C279rH4aOBrJixjQNRy5ij81EaEhJ1RiBeJus2msXnfcXftCtjCqRHFI+nZXZdp8+J5qMNjDWfD43YgLkR3ub38hRu4+mLjY2N7ny2dOZ+woQJuo1KyTm7ubllcdz6VIrxEYtDtzm5UdjXxb+ZLcN2/spyi+uY+42jkbOKy8bwzUki0zu56VhvW/ouuc1Vk4MVeqXy228DiS/TnI5VLB5HwAIYKSp+7N7iOftjX94ethlFyw8ZOuwtqgrWHkUnotG3Tf+fF46ta73Nm2KZffnHz/lybgArFk5h+NcHuBNlhZeLwRmbTjaJOyeCiVc9R9f3uuNnGa4LpLTiWwkf85qdA3PK+z2PHedZvugP9mwN4Mct+ujDAq9mviJvfpiAVfs5sX0OH/fyZ9CmUDHFHxeFOs3Bhh8P5Mj1eBNj5Y1edg4f3z9tf+OUC6NG5dqYLjUVxJ8/SaSIhro0yJ7esDSOr2UVWtezJSrkLqlVWlCvXlPKx17mWqIbzZtVMPLglIIJSRJjOF0jeOEn9Bn9F8oWfRg0uIdIugg7jRErMh0ASRxa9DN/Be3klyUHiTerQRMvOzyaNcaVEBbNWcn23euYN28fCWWa0aGq2HQ1WhI5Z3AsjMhsnDfjtmt0cKMV0oajdAxQcs7SR9+l1Ij+2J+U0+7fv7+uXnLypkrR69YQNzZi9d8Gp6hD7Au1otHrdXFQGtN91jmblZp5HnSsty1DfDx776n/tWjHoNmDqC++iTUxPdLQOW3pdbpFabUWVH2zH69dmM2Sge/wE5aUa9iHUW9VEhs7jzcm9ZsMOTc8sglu7kPvmXOwmDeP1ZsDOJaqxtm3I0MGf4KfrYIkvSXraOtiZB0BHR/+vWl49Cdm9uyGR10/PMTcunshjIQqaWOk8Z65jxarOmLDsccdpq6ex9TTDWhXx4HTR1Ui2lXg0noEYy5O4btVY/lCY0fVDkMZ2cEdccA9w0GrXOrR0teK5dvm80vluvg+ly5PDv5M0Dum50+SI0PA9Aek/l6ZJ35MmVGu2GewntVd5NbPYL3CkQZdxMZk8CmUL3TBzzFtozoDOK0peUS+su0LWO7aT9kmz2HvXoG6LiK7pW1C84ppKbjMcmbYlmQNWmM4e4kNwP/R9cJclg35gIXCwZdr8C4j3hR2el2iZk5Vn3v8NmEqd21r4j9mOC2dFKgd+zJ9aDKzli5nelAKdpXisIzdAAAC+ElEQVRf4rMZA4UtClefMQey26I5VboZGqsK5WwM2ZQJ3jLZWkHoVjpB8sYbb+guQ8WgLrM3LELdPrYX3WRPK+l+xaLKK7Qvu4nf4lvyem2hEFGflzmbIWM6HUtf4zpOSJ+P0ozX+Y/HLJiYq2lts8NWVPeKW7duZZ3B+RhZElb6Lu6kpCSio6OpUiXdi+aDVmF0SQhZxvQVN3F+sS0tq6RwdMFkVkS+zvzl/an27OUg8g1BWFiY7ocscis9xd7B2LFjM3Kc0v2qVasMdpOOlEk5UWP1Bjs9g2/Gn5pOz8EHaDxnFSOf123mlKiSF91KXzAlfRdJSEhIhmwdO3bMcOCG6t57770ShYPMbBoCxXOOu4jRN/dsILae9rDix738IcY2d32RnkN6UqUUOe0ngdTKyoqJEydm6SI5b2NFai+XZx+BdevW6Zy2lA5p2bIlkiOXPmQjHQWUXutz3pIk0gbm1q1bdV97ILWVS8lCwFRCuWRJYoJbpTiz23NyAMZdk4nOpbBq6dKlpVAq0yJZPT+SjbtMtynptVIuu0WLFjpHLDnmwMBAgyJJjl06dXL27Fnu3ROH7+VS4hAo0Ii7xEkvMywjUIoQkKJnKYqWvjhKcsxSGkSKuKUNSyniliJv/RFAybFLRwSlEydyKXkIFErEnafNj5KHVYngWMa+RKgpX0zmpttu3brpTpBITlm6pKLPcUvprlmzZumibH2R6qQIPTe6+WJW7lSoCCjEE7lANycfPXpE5crSISy5FDUC0rJXjqCKGvWiGU/WbdHgXFJGUUunQZ626E+VyE/up0VS7i8jICMgI5A7AgXmuKUfC5YulcrQR5VzZ0RuISMgIyAjICOQNwTUUVFReWuZh1bSL8bn5RxxHkjJTWQEZARkBGQEjCCg9vERnz0v4CKnTAoY0CcgJ2P/BGCVsKaybkuYwgqR3cffo1OIg8ikZQRkBGQEZAQKDgHZcRccljIlGQEZARmBIkFAdtxFArM8iIyAjICMQMEh8H93Qi8LtszRdQAAAABJRU5ErkJggg==" /> </div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
It might not be as neatly executed as a real app, but it will get the job done, and you can do it in five minutes, instead of spending hours coding an app! </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Drop me a comment, letting me know what you use this technique for. :)</div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-46687040970064257032014-09-30T19:01:00.000-07:002014-12-19T20:06:52.941-08:00Book Review: The Checklist Manifesto<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
I recently picked up <a href="http://www.amazon.com/gp/product/0312430000/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0312430000&linkCode=as2&tag=bugnpie-20&linkId=PWBORQZIMPNJINJW" target="_blank">The Checklist Manifesto</a> by Atul Gawande, recommended to me by rave reviews on Amazon. However, once I picked up the book, I felt like it left much to be desired.<br />
<br />
I was really pleased, initially, that it was a mere 200 pages. I reckoned I could knock it out in a week, and I was right. The unfortunate part was that it felt like I really long article that had been fluffed up into a book. They key point the author is trying to drive home is that checklists are useful because humans are fallible and they make elementary mistakes. He does this through the use of many many anecdotes, spread across three industries - medicine, construction, and aviation.<br />
<br />
The writing style of the <i>The Checklist Manifesto</i> is in the classic pop psychology fashion - riveting anecdotes told over the course of a chapter or so, punctuated by studies and statistics, often also told in an anecdotal manner. This isn't necessarily bad - the Gawande just doesn't have enough content to support it. Other, similar books have better structure. <a href="http://amzn.to/1ox44C0">The Power of Habit</a> is divided into three parts - the <a href="http://bugsnpieces.blogspot.com/2014/09/the-power-of-habit-habit-loop.html">habits of individuals</a>, those of organizations, and those of societies. <a href="http://www.amazon.com/gp/product/0385528752/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0385528752&linkCode=as2&tag=bugnpie-20&linkId=HQTFDS4E4KI2WIJ5">Switch</a> by Chip and Dan Heath has its three steps of change. <i>The Checklist Manifesto</i> is just barely meaningful meandering. <br />
<br />
What <i>The Checklist Manifesto</i> does get right, however, is its core point. Atul Gawande is a surgeon, and as a software engineer it's hard for me to relate making websites to the life-or-death situations that surgery brings, it's easy to translate what he's advocating to developer terms - that in the end, human beings have limited cognitive capacity, and that the best way to unleash higher potential is to automate away the grunt work, so that more cognitive capacity can be spared for the really important stuff. Checklists are a means of such automation. <br />
<br />
He also advocates checklists as a communication tool - the checklist becomes a tool of who needs to communicate what at different stages of the operation. This makes sure that everybody is on the same page regarding the operation, and allows anybody to bring up any concerns, and makes sure everybody knows all the relevant information before beginning the operation. He cites an example of one operation where something critical the anaesthesiologist should have known was only communicated to him because the checklist caught it. In this case, the patient might have died, had that critical piece of information not been communicated to the anaesthesiologist.<br />
<br />
So long story short - the book is a nice, short read at 200 pages, but it could've been shorter still. Check it out <a href="http://www.amazon.com/gp/product/0312430000/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0312430000&linkCode=as2&tag=bugnpie-20&linkId=PWBORQZIMPNJINJW" target="_blank">The Checklist Manifesto</a> on Amazon if you'd like to read it (disclaimer- that's an affiliate link).</div>
<iframe class="zsoualtysumkdusgpmwq" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="//ws-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=US&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=bugnpie-20&marketplace=amazon&region=US&placement=0312430000&asins=0312430000&linkId=QQ3KYDTXLINOX54W&show_border=true&link_opens_in_new_window=true" style="height: 240px; width: 120px;">
</iframe></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-91721569852031191782014-09-25T22:10:00.001-07:002014-09-26T07:47:30.604-07:00Lessons From Building My First Website<div dir="ltr" style="text-align: left;" trbidi="on">
I made my first website at <a href="http://searchgovernmentjobs.org/">http://searchgovernmentjobs.org/</a> a few days ago - it's at a thin wrapper around a government API that I found at <a href="http://search.digitalgov.gov/developer/jobs.html" target="_blank">http;//digitalgov.gov</a><span id="goog_1859832911"></span><span id="goog_1859832912"></span>. It allows you to search the government API for jobs using queries, examples of which I've included on the search page. The results are all from <a href="https://www.usajobs.gov/GetJob/ViewDetails/353400300" target="_blank">http://usajobs.gov</a>.<br />
<br />
My original intention was to just get something out there on the internet. In doing so, I learned some valuable lessons:<br />
<ul style="text-align: left;">
<li>I learned about <a href="https://www.digitalocean.com/?refcode=01677978cda1" target="_blank">DigitalOcean</a> (disclaimer: referral link), based on <a href="https://news.ycombinator.com/item?id=8214254" target="_blank">a question I had asked</a> on HackerNews</li>
<li>I learned at least the basics of navigating the default Django stack that comes on a DigitalOcean Django droplet. See <a href="http://bugsnpieces.blogspot.com/2014/09/modifying-digitalocean-django-one-click.html" target="_blank">my post here</a> for one such lesson that I learned. </li>
<li>I learned how to buy a domain name at <a href="http://www.1and1.com/?kwk=286039063">1and1.com</a>. (disclaimer: referral link)</li>
<ul>
<li>Fun Fact: I had originally intended to name the site: searchgovernmentjobs.us - but it turns out that using the .us TLD forbids you from using the privacy coverage provided your hostname provider. It has to do with the rules of the organization that administers the .us TLD. </li>
</ul>
<li>I learned how to configure the 1and1 DNS record to point to the nameservers at DigitalOcean</li>
<li>I learned that there are Adsense alternatives. I'm using <a href="http://www.chitika.com/publishers/apply?refid=kaziz">Chitika</a> for the moment. (disclaimer: referral link) </li>
</ul>
Now that I have the site up, I'm going to look and see if I can do some SEO to get it up the ranks in search engine pages. Ideally, I would like the site to be self-sustaining in that it should pay for hosting and domain fees out of its own ad revenue, but I don't anticipate being very successful in this regard. The Jobs spaces is pretty filled up with SEO optimized sites and the keywords are very crowded. Nonetheless, I shall try, and in doing so, I may learn something about SEO.</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1684186373237811820.post-47228091340305685052014-09-23T23:04:00.001-07:002014-12-19T20:19:29.886-08:00The Power of Habit - So You Like Your Oreo Fix<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
This is another idea I got from <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit by Charles Duhigg</a>: a great way of quitting bad habits is to not get into them in the first place. Here's an example:<br />
<br />
Recently, I've been stopping by a 7-11 on my way home from work and picking up a snack - such as oreos. This happens fairly regularly - at around 6:30 on weekdays, I'll pick up my oreos and then go on my way home.<br />
<br />
After about two weeks of doing this, I noticed that at around 6:30 every weekday, I develop a terrible craving for oreos, and feel a tremendous urge to go into that 7-11 and pick them up. Skipping my 7-11 visit has started to require incredible amounts of willpower.<br />
<br />
So what happened? Using <a href="http://bugsnpieces.blogspot.com/2014/09/the-power-of-habit-habit-loop.html" target="_blank">Duhigg's Habit Loop model</a>, I realized that I had classically conditioned myself to expect oreos at 6:30 on weekdays. This means that my body had been trained to expect them, and so the anticipation manifested as the craving that was so difficult to resist. <br />
<br />
Using the Habit Loop model, my cue is the time of day and the sight of 7-11. The behaviour is buying and eating oreos, and the reward is the sugar rush I get from it. After an extended period reinforcing this loop for my brain, seeing the cue was enough for my brain to start anticipating the reward, resulting in a manufactured craving that wouldn't go away until I partook in the behaviour that resulted in the reward.<br />
<br />
Now how to fix this - giving up my oreos completely is not something I'm willing to do. I love oreos and am unashamed of my indulgence. The problem is that I want to eat oreos when I actually feel like eating them, and not because my body is manufacturing a craving just because it happens to be expecting them.<br />
<br />
The solution, as I've gleaned from Duhigg, is to keep my oreo supply unpredictable. By preventing the association between any single cue and my oreos, I can keep my brain from automating away the behaviour by forming a habit. This way, every time I buy oreos, it will be conscious decision that I will likely have thought through, and not automatic behaviour. <br />
<br />
It's difficult to do this when you have a regular job with regular hours, but I could get around this, for example, by varying up the source of my oreos. I could get them from 7-11 one day, and then get them from Jewel or Target the next time. I could also vary up the time - maybe I could get them with lunch one time, and the on the way home the next time. Finally, I could also vary up the frequency - I could eat oreos for two successive days, and then skip three days, and then eat the following day. <br />
<br />
So remember: our brains are automation machines. Don't let them automate bad habits. Bad habits are easy to build and hard to get rid of. You don't need to completely stop a behaviour in order to prevent the bad habit from forming - you can do it by varying up the cue and hence prevent the cue-reward association from forming. After all, life is short, and we all deserve the occasional oreo fix. :)<br />
<br />
Here's the affiliate link to the <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit</a> if you'd like to support my blog. And here's the <a href="http://www.amazon.com/gp/product/1400069289/" target="_blank">non-affiliate link</a> if you're not into that. :)</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.com/gp/product/081298160X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=081298160X&linkCode=as2&tag=bugnpietmblr-20&linkId=BI2DI3DK4JGZCDMW" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=081298160X&Format=_SL110_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=bugnpie-20" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Power of Habit by Charles Duhigg</td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=bugnpie-20&l=as2&o=1&a=081298160X" height="1" style="border: none !important; margin: 0px !important;" width="1" />
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-89634804750732052742014-09-22T20:36:00.001-07:002014-09-22T20:37:15.793-07:00Working Better<div dir="ltr" style="text-align: left;" trbidi="on">
For as long as I can remember, I've had Gmail, Google Voice and Google Calendar tabs perpetually open in my browser. However, after reading <a href="https://medium.com/i-dont-know-a-thing/work-better-a67a9ede28e9?source=most-recommended&" target="_blank">this article on Working Better</a> by Paul Jarvis, I've decided to close the Gmail and Google Voice tabs in order to "Turn off every notification."<br />
<br />
This is a difficult decision to make because a lot of my friends and some close family are long-distance at the moment, and removing these tabs is going to make me significantly less responsive to their texts and emails. <br />
<br />
I'm also experimenting with making my browser full-screen when working on the internet, in order to allow for better focus. The result is interesting because the browser tends to look more like an app when doing this - one of the things I loathe the most about the app-based mobile ecosystem is the inability to run apps side-by-side - but I do think that it has been helping me. <br />
<br />
The other suggestion that I really like is, "Keep a log of what you eat during the day and how you feel afterwards." I don't think I'll be able to implement this one just yet, but it's something I definitely want to plan towards in the long run. As I've aged, I'm discovering more and more the impact that small, everyday things like the food I eat has on my health and comfort.<br />
<br />
I'm not sure how to approach this subject because of the sheer amount of misinformation available in the food and nutrition space. One thing I've been thinking of doing is to start having a "salad lunch" day once a week to get some fibre going through my system. <br />
<br />
If you have time, give the article a read. It's a quick and simple read, and well worth the time. </div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-91145335470506580992014-09-21T14:16:00.001-07:002014-09-22T20:37:56.571-07:00Discovering AngularJS<div dir="ltr" style="text-align: left;" trbidi="on">
I've recently been pointed towards <a href="https://angularjs.org/" target="_blank">AngularJS</a> by a mentor. At work, we typically use <a href="http://backbonejs.org/" target="_blank">BackboneJS</a> for our client-side framework needs. Since Backbone is so minimalist, over the past few years we've learned some (sometimes expensive) lessons and developed a set of best practices that minimize the pain of developing with Backbone.<br />
<br />
The first thing I noticed when looking at Angular was <i>how many of those implicit lessons and best practices become unnecessary!</i> For example, it's not unusual for me to have to reimplement two-way binding for every application, and I've seen some complex mechanisms to do as-you-type filtering of a list. With Angular, it's so incredibly easy!<br />
<br />
For example:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> <body><br /> <div class="container" data-ng-controller="SomeController"><br /> <br /> <h3>Controllers</h3><br /> Name: <b><input type="text" data-ng-model="nameFilter" /></b><br /> <ul><br /> <b><li data-ng-repeat="person in people | filter:nameFilter"><br /> {{person.name | uppercase}} loves {{person.city | uppercase}}<br /> </li></b><br /> </ul><br /> </div><br /> <br /> <script type="text/javascript" src="js/libs/angular.min.js"></script><br /> <script type="text/javascript" src="js/viewcontrollerscope.js"></script><br /> </body></span><br />
<br />
And in the JS:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">var demoApp = angular.module("demoApp", []);<br /><br />var controllers = {};<br /><br />controllers.SomeController = function ($scope) {<br /> $scope.people = [<br /> { name: "Kim", city: "Green Bay" },<br /> { name: "Ron", city: "Miami" },<br /> { name: "Rufus", city: "Houston" },<br /> { name: "Wade", city: "San Francisco" }<br /> ];<br />};<br /><br />demoApp.controller(controllers);</span><br />
<br />
<br />
Boom! That's it. Most of that code is just boilerplate required to setup Angular itself, and one you do that, the filtering mechanism is handled within the bolded part of HTML template. Isn't that incredible?<br />
<br />
I think I'm a little biased against Backbone because it was my first JS framework, and so the learning curve was obviously higher. However, I have to acknowledge, that Backbone is incredibly useful for adding small, clientside-driven pieces to an application. As far as I can tell, Angular seems much better oriented towards writing applications that are entirely clientside, single-page applications. <br />
<br />
I highly recommend <a href="http://weblogs.asp.net/dwahlin/angularjs-routing-changes" target="_blank">this tutorial</a> for learning Angular. I found it incredibly useful. Let me know if you have any recommendations for Angular-related resources!<br />
<br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-87932479029094782512014-09-17T21:47:00.001-07:002014-12-19T20:15:46.652-08:00The Power of Habit - Willpower<div dir="ltr" style="text-align: left;" trbidi="on">
I'm about halfway through <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit by Charles Duhigg</a> now, and ever since his note on Keystone Habits, the book has been dragging on for a bit. I'm going to ignore his ramblings on organizational change and focus on the part that stood out to me the most in my reading today: his commentary on willpower and its role in habit formation.<br />
<br />
I learned somewhere in High School the analogy that <a href="http://en.wikipedia.org/wiki/Ego_depletion" target="_blank">willpower is a finite resource</a>. The more you use it, the more it gets depleted. Somehow, I feel like I internalized this in such a way that because willpower is a scarce resource, it should be conserved to be used when important. For example, I considered it okay to binge on snacks and junk food during exam-time when I had to use my willpower to focus on studying. <br />
<br />
The Power of Habit likens willpower to be more like a muscle. The more you use it, he claims, the stronger it gets. This analogy is interesting because if it's more accurate than my idea of a finite resource, then my attitude towards willpower is like that of a man who is afraid that he might need to run someday, so he conserves his ability to run by never running. Of course, muscles being what they are, such a man would soon not be able to run very far at all.<br />
<br />
The Power of Habit's suggestion (I had to weave through a good one-sixth of the book before I was able to distill it out) is that we can improve willpower by pre-planning our habits. So for instance, if you would like to get into the habit of ironing your clothes for the next day when you get home from work today, you should visualize in the morning how you're going to feel when you get home, how tired you'll be, and how you'll overcome that tiredness to power through and iron your clothes.<br />
<br />
Another way of looking at it is that you would be "<a href="http://en.wikipedia.org/wiki/Priming_%28psychology%29" target="_blank">priming</a>" yourself into making falling into the routine of ironing your clothes easier.<br />
<br />
Here's what you can do: think of a habit you want to develop. It might be ironing your clothes at a certain time, or writing a blog post before bed, or cooking dinner instead of eating out. Visualize the crux moment when you usually give into temptation and ignore the task/chore you need to do and imagine yourself overcoming it. Do this everyday in the morning and hold on to it until you are able to develop the habit.<br />
<br />
Here's the affiliate link to <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit</a> if you'd like to support my blog. And here's the <a href="http://www.amazon.com/gp/product/1400069289/" target="_blank">non-affiliate link</a> if you're not into that. :)</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.com/gp/product/081298160X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=081298160X&linkCode=as2&tag=bugnpietmblr-20&linkId=BI2DI3DK4JGZCDMW" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=081298160X&Format=_SL110_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=bugnpietmblr-20" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Power of Habit by Charles Duhigg</td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=bugnpietmblr-20&l=as2&o=1&a=081298160X" height="1" style="border: none !important; margin: 0px !important;" width="1" />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-5311391392961706722014-09-16T20:27:00.001-07:002014-12-19T20:19:45.068-08:00The Power of Habit - Keystone Habits<div dir="ltr" style="text-align: left;" trbidi="on">
Continuing my reading today of <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit by Charles Duhigg</a>, I came across <i>The Power of Habit</i>'s concept of "Keystone Habits." He presents this, in particular, in the context of organizational change - changing one key habit can spiral into other changes that blossom into large-scale shifts in the organization in question, but suggests that it can be applied on the individual level as well. <br />
<br />
The man <i>The Power of Habit</i> uses to present this idea is <a href="http://en.wikipedia.org/wiki/Paul_O%27Neill_%28politician%29" target="_blank">Paul O'Niell</a>. O'Niell was the CEO of the aluminium manufacturing company <a href="http://en.wikipedia.org/wiki/Alcoa" target="_blank">Alcoa</a>, and when he came in, Alcoa wasn't doing very well. There was a great deal of friction between management and unions, competitors were stealing business, and morale was low amongst employees.<br />
<br />
O'Niell, <i>The Power of Habit</i> says, understood the power of keystone habits (it's funny how often these self-help books explain successful person X as understanding attribute Y of the framework they're presenting). He decided to focus on the keystone habit of "safety" and focusing on this habit improved operations all over Alcoa,
and helped make the company ridiculously successful over O'Niell's
tenure. <br />
<br />
This in itself made me pause for a bit. While O'Niell's success in undeniable, is safety something you can call a habit? I would call it more of a priority, or a value, as opposed to a habit. Additionally, <i>The Power of Habit</i> fails to recognize what focusing on safety truly was for O'Niell - it was a political master-stroke. Faced with an environment fraught with labour-management tensions, safety was the banner everyone would have to rally behind, or else they would be painted as black sheep. What union leader, or manager would dare oppose an action justified in the name of safety?<br />
<br />
The icing on the cake for this portion of the book though, was a passage in which The Power of Habit describes how, during his tenure on some government job, <i>The Power of Habit</i> was trying to solve the problem of child mortality, and he traces the root cause of the problem from child mortality to child malnutrition to the child's mother's malnutrition during pregnancy to the mother's education to the mother's teachers to those teachers' college education in nutrition and biology. This is where, <i>The Power of Habit</i> says, O'Niell attacked the problem. And then right at the end of the passage, he tacks on, “Today, the U.S. infant mortality rate is 68 percent lower than when O’Neill started the job.” <br />
<br />
Like, really? You're going to tell me (or at least heavily imply) that just because O'Niell recommended changing a few curricula, the US has less infant mortality today? There's absolutely no support of this claim, and it's a basic correlation-causation error any Psych 101 student can spot. <i>The Power of Habit</i> lost a lot of credibility in my eyes with that claim, and this <a href="http://www.thedailybeast.com/articles/2012/02/28/the-power-of-habit-nicely-dissects-how-and-why-we-do-things-says-jesse-singal.html" target="_blank">Daily Beast article</a> suggests O'Niell himself disavowed himself from that statement.<br />
<br />
That said, I do find the idea of keystone habits on an individual level interesting. It related with a concept I read in <a href="http://www.amazon.com/gp/product/0385528752/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0385528752&linkCode=as2&tag=bugnpie-20&linkId=4I2GXVBIXGLPW6B6">Switch: How to Change Things When Change Is Hard</a><img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=bugnpie-20&l=as2&o=1&a=0385528752" height="1" style="border: none !important; margin: 0px !important;" width="1" /> about how, when attempting to change, we should take a single, actionable item, and focus on that. Once that change is achieved, it provides the momentum to create a ripple effect that causes other, hopefully positive changes.<br />
<br />
<br />
To this effect, I'm personally trying to cultivate in myself the habit of writing more often. I'm hoping that developing this will be a keystone habit will have a spillover effect by improving my communication skills, comprehension and whatnot. I don't think it will reduce the infant mortality rate of the US by two-thirds, but then again, not all of us can be Paul O'Niell.<br />
<br />
Here's the an affiliate link to <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit</a> if you'd like to support my blog. And here's the <a href="http://www.amazon.com/gp/product/1400069289/" target="_blank">non-affiliate link</a> if you're not into that. :)</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.com/gp/product/081298160X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=081298160X&linkCode=as2&tag=bugnpie-20&linkId=BI2DI3DK4JGZCDMW" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=081298160X&Format=_SL110_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=bugnpie-20" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Power of Habit by Charles Duhigg</td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=bugnpietmblr-20&l=as2&o=1&a=081298160X" height="1" style="border: none !important; margin: 0px !important;" width="1" />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-77578406673340167002014-09-15T20:13:00.001-07:002014-12-19T20:19:59.638-08:00The Power of Habit - the Habit Loop<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit by Charles Duhigg</a> is a book I picked up recently from my local library. At about 25% in, it's already had a decent impact on my worldview, and I think it promises to be a good read. For this blog post, I want to write about the model The Power of Habit presents of habits.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.com/gp/product/081298160X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=081298160X&linkCode=as2&tag=bugnpie-20&linkId=BI2DI3DK4JGZCDMW" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=081298160X&Format=_SL110_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=bugnpie-20" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Power of Habit by Charles Duhigg</td><td class="tr-caption" style="text-align: center;"> </td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=bugnpietmblr-20&l=as2&o=1&a=081298160X" height="1" style="border: none !important; margin: 0px !important;" width="1" /> <br />
First of all, habits are relatively simple things. It's when hundreds, even thousands of these coalesce around a single individual do they emerge as something as complex as the "lifestyle" of that individual. <br />
<br />
Habits come from a three-step loop, says The Power of Habit. The first step of the loop is the "cue". This is what triggers the automatic behaviour, letting you relinquish your cognitive control. Since our brain is evolutionarily programmed to exert <a href="http://en.wikipedia.org/wiki/Principle_of_least_effort" target="_blank">as little effort as possible,</a> it is constantly on the outlook to set such "cues" that allow it to revert to default behaviour, and hence save you from expending too much brainpower.<br />
<br />
The next step in the loop is the actual action that gets triggered.<br />
<br />
The final step is the reward - this, says The Power of Habit, is what tells the brain whether the action it just took should be repeatable or not. The higher the reward, the more likely your brain is to want to engage in that behaviour again.<br />
<br />
The Power of Habit uses the example of brushing teeth in his book. Back in World War One, he says, bad dental hygiene was on the verge of becoming a national crisis. In those days, hardly anyone brushed their teeth. Toothpastes and brushes for hygiene were regarded as the proverbial snake-oil. However, after an ingenious marketing campaign by a man called Claude Hopkins, by the time World War Two rolled around, it was discovered that nearly half the men in the Army were brushing their teeth regularly!<br />
<br />
Hopkins worked his magic by associating a behaviour with a cue, and a reward the with behaviour. In this case, he used the filmy coating that we can feel on our teeth as a "cue". The behaviour he encouraged people to do was brush their teeth using the toothpaste he was marketing (a brand called Pepsodent), and the reward they got for it was a minty freshness from the toothpaste.<br />
<br />
The Power of Habit notes that the minty freshness that we now associate with a clean mouth was a relatively new phenomenon back then, and that it has no effect on actual oral hygiene. In fact, many leading dentists of the day disclaimed Pepsodent as a farce, because it so heavily advertised the feeling of freshness. However, Pepsodent succeeded where so many other toothpaste brands failed because it gave its buyers a tangible reward (minty freshness) as opposed to a promise of good oral hygiene.<br />
<br />
So there you have it - that's the Habit loop. Cue, behaviour, reward. This sequence evolved into a habit when it's repeated enough times so that through <a href="http://en.wikipedia.org/wiki/Classical_conditioning" target="_blank">classical conditioning</a> the brain starts anticipating the reward as soon as it sees the cue. This elicits an automatic craving that can't be satisfied until the behaviour is performed. <br />
<br />
Here's the an affiliate link <a href="http://www.amazon.com/gp/product/1400069289/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1400069289&linkCode=as2&tag=bugnpie-20&linkId=TTU4A5UCW7LOR5GB" target="_blank">The Power of Habit</a> if you'd like to support my blog. And here's the <a href="http://www.amazon.com/gp/product/1400069289/" target="_blank">non-affiliate link</a> if you're not into that. :)</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.amazon.com/gp/product/081298160X/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=081298160X&linkCode=as2&tag=bugnpietmblr-20&linkId=BI2DI3DK4JGZCDMW" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=081298160X&Format=_SL110_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=bugnpietmblr-20" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Power of Habit by Charles Duhigg</td><td class="tr-caption" style="text-align: center;"></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=bugnpietmblr-20&l=as2&o=1&a=081298160X" height="1" style="border: none !important; margin: 0px !important;" width="1" />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-84783557010949562562014-09-14T11:20:00.002-07:002014-09-17T20:41:41.254-07:00Modifying the DigitalOcean django one-click project to use a custom directory<div dir="ltr" style="text-align: left;" trbidi="on">
Hi all,<br />
<br />
I recently gave <a href="https://www.digitalocean.com/" target="_blank">DigitalOcean</a> a shot on the recommendation of someone at <a href="http://news.ycombinator.com/" target="_blank">HackerNews</a>. DigitalOcean has a lot of custom droplets, which are basically Virtual Machines, that you can use to set up a cloud server on which to host your website.<br />
<br />
I had been building a Django website that I wanted to put up, and while setting it up on DigitalOcean, I ran into the following problem: The default Django droplet uses a base Django project located in the 'home' directory of the UNIX installation DigitalOcean sets up for you. I wanted it to point to a custom directory in the <span style="font-family: "Courier New",Courier,monospace;">/opt</span> folder that I had set up.<br />
<br />
In order to do this, remote into the DigitalOcean droplet. Once there, run the following command:<br />
<span style="font-family: "Courier New",Courier,monospace;"><br /></span>
<span style="font-family: "Courier New",Courier,monospace;"> sudo nano /etc/init/gunicorn.conf</span><br />
<br />
In this file, change '<span style="font-family: "Courier New",Courier,monospace;">chdir /home/django</span>' to point to the directory that contains your django project. In my case, I changed it to '<span style="font-family: "Courier New",Courier,monospace;">/opt/venv</span>'.<br />
<br />
Change the '<span style="font-family: "Courier New",Courier,monospace;">name</span>' field to refer to the folder that contains your '<span style="font-family: "Courier New",Courier,monospace;">wsgi</span>' file. In my case, I changed it to '<span style="font-family: "Courier New",Courier,monospace;">name=jobs</span>'.<br />
<br />
Change the '<span style="font-family: "Courier New",Courier,monospace;">pythonpath</span>' field to refer to folder that contains your '<span style="font-family: "Courier New",Courier,monospace;">manage.py</span>' file. In my case, I changed it to '<span style="font-family: "Courier New",Courier,monospace;">pythonpath=search-jobs</span>'.<br />
<br />
In '<span style="font-family: "Courier New",Courier,monospace;">django_project.wsgi:application</span>' change '<span style="font-family: "Courier New",Courier,monospace;">django_project</span>' to the name of your Django app (ie. what you changed your '<span style="font-family: "Courier New",Courier,monospace;">name</span>' field to).<br />
<br />
Now run the following command:<br />
<span style="font-family: "Courier New",Courier,monospace;"><br /></span>
<span style="font-family: "Courier New",Courier,monospace;"> sudo nano /etc/nginx/sites-enabled/django</span><br />
<br />
In this file, change the media and static locations to point to where you need them to point to. In my case I changed:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> alias /home/django/django_project/django_project/media;</span><br />
<br />
to:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> alias /opt/venv/search-jobs/media;</span><br />
<br />
and:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> alias /home/django/django_project/django_project/static;</span><br />
<br />
to:<br />
<span style="font-family: "Courier New",Courier,monospace;"><br /> alias /opt/venv/search-federal-jobs/staticfiles;</span><br />
<br />
That should set up the default nginx and gunicorn to serve your django project located in your custom path properly!<br />
<br />
If you have any feedback on this post, or if it helped, drop me a comment and let me know.</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1684186373237811820.post-60801907256559591292014-03-11T18:35:00.004-07:002014-09-17T20:41:14.563-07:00Lessons from a salesperson<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Today, I reached out to my buddy Mike at work, asking him if he had could give me his perspective on what it means to be a salesperson. He readily agreed, and I jotted down some notes from my conversation with him which I am compiling here -</span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Know who you're talking to</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Different people in an organization have different concerns and different pain points. What's important is that you contextualize your product/service in terms of the person or people you are talking to. </span><br />
<br />
<div style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">For example - let's say you have developed a fancy new CMS that is a dozen times better than Company X's old Wordpress site. However, you can't walk into a presentation to the Marketing department of Company X and excitedly tell them how scalable and maintainable it is - they won't care. You need to tell the Marketing people how easy it is to update content and apply branding, just as you need to show off scalability and maintainability to the IT people. </span></div>
<div style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></div>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">For the various people working different roles, you're going to want to know beforehand what their pain points are with the status quo. And then, you must get them to admit to having these pain points. This helps you build trust, and trust is vital - people like to buy from those whom they trust. </span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Sell by telling stories</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Ask your audience a question - get them to tell you their pain points. This is especially a good way to go about the first meeting with a potential client. Once they start talking, now you have to coddle them a little bit. Tell them how you've had other clients with similar problems. Don't say, "I can help you, and here's how -" instead, tell them a story. Say something like, "You know, we had another client who was facing the [...] problem, and we built them a [...] solution that helped them save [...]."</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">By citing other clients, you're helping the potential client feel better - they're not the only ones with problem X - you're making yourself more relatable to them, and you're still showing off your product/service.</span><br />
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">After that, you can follow up with more specific questions.</span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Keep things open</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">At least at first. If you have a booth set up in a conference somewhere, or are engaging in that first, initial meeting, don't tell them the nitty-gritty details about your fantastic custom e-commerce solution. At best, they'll talk enthusiastically for a few minutes, and then regretfully tell you that the problem you're solving isn't high-priority for them at the moment.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">You must keep things high-level. The problem with getting too far into the details is that the moment the potential client starts focusing on details, the pain points that you had worked so hard to bring up start slipping from their memory. You need to focus on those high-level pains, and present high-level solutions. </span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Ask 'how/why' questions, not 'what' questions</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">This ties in with phrasing - how you say things. Don't ask them
what CMS they use, ask they how their experience is with their current
CMS. After you've discussed it a little bit, then you can ask lead them to tell you what CMS they are using. The reason for this is that How/Why questions are open-ended; what questions are close-ended. Especially in the early stages, you always want to keep things open-ended.</span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">WIIFM - What's In It For Me</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">In the end, it comes down to adding value to the client. There are two means of adding value - time and money. Everything else - no matter what the client sites - can be boiled down to one or both of these two. It helps if you have concrete figures that you can show the client, on what their return on investment would be if they invested in you.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Secondly, it is better to lead the client to the realization that you have the means of saving them time/money. This is a better approach then telling them outright - they will trust their own conclusions better than the conclusions you present.</span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">People buy your passion</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Get them excited about you. Share your vision, and how that can help them shape their vision. You want them to buy into your vision. </span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Silence isn't a bad thing</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">This is something I have a lot of trouble with - when a potential client is silent, they are thinking. Let the wheels turn - don't feel the need to fill in the seemingly awkward silence. When they feel the need to talk to you, they will.</span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Ask the right questions</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">You must lead and direct the discussion, but be careful to do so without appearing to dominate the potential client. You must be in control, and they must feel like they are in control.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1684186373237811820.post-18947640263392262342014-02-10T19:50:00.000-08:002014-09-17T20:41:04.286-07:00Thoughts on the Single Responsibility Principle<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /><br />Today, while reading <a href="http://amzn.to/1dDtvej" target="_blank">97 things every programmer should know</a> (disclaimer: affiliate link), I came across an explanation of the Single Responsibility Principle that finally clicked for me. I've read a fair amount of literature on Best Practices for programming, but I've often faced trouble in applying these best practices in real life projects. Here was an explanation that finally made sense. </span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The Single Responsibility Principle says that each class should have only one reason to change. This makes perfect sense in theory, but somehow I just couldn't find a way to implement it in practical code. However, after reading <a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Single_Responsibility_Principle" target="_blank">this chapter</a> in the above book, I realized that I was getting the semantics wrong - objects in OOP don't have to correspond to objects in the real world. You don't need to have a single (possibly quite large) class for an Employee that handles the business logic related to Employees (eg. calculating wages, sick days, etc), as well as the database logic (inserting into and retrieving from a database), as well as any report generation logic - classes should be more flexible and correspond to what makes them easier to maintain. </span><br />
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The chapter linked above, for example, says that instead of having an <span style="font-family: "Courier New",Courier,monospace;">Employee</span> class with functions that handle business/database/reporting logic, it makes more sense to have an <span style="font-family: "Courier New",Courier,monospace;">Employee</span> class that handles the business logic, then an <span style="font-family: "Courier New",Courier,monospace;">EmployeeRepository</span> class for the database logic and an <span style="font-family: "Courier New",Courier,monospace;">EmployeeReporting</span> class for the reporting logic. This means that if the database logic ever needs to change, I will only be touching the <span style="font-family: "Courier New",Courier,monospace;">EmployeeRepository</span> class that handles only the database logic. The business and reporting logic will remain untouched in their respective classes. Now, each class truly has only one reason to change.</span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><b><br /></b></span>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><b>Conclusion:</b> don't be rigid in insisting on having classes map to real-world entities. Code your classes based on what makes them easiest to read and maintain. </span></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-65809705030496318182014-01-28T20:05:00.002-08:002014-12-19T18:55:24.641-08:00Book Review: Apprenticeship Patterns<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><a href="http://www.amazon.com/gp/product/0596518382/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=0596518382&linkCode=as2&tag=bugnpie-20" target="_blank">Apprenticeship Patterns</a> (Disclaimer: That's an affiliate link; <a href="http://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382">here</a>'s the non-affiliate one) is a book I found on <a href="http://monocle.io/posts/best-development-book-i-ve-read-has-no-code-in-it">linked</a> on HackerNews. I read it over the course of this past week during my commute, and I wanted to share my thoughts on it. </span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Description</span><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"> </span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">First of all, <i>Apprenticeship Patterns</i> is a very general book. There's little to no code, and it talks mostly about high-level best practices. The authors describe a set of "patterns", similar to the kind you may find in a software design patterns book. These patterns are intended to be adapted and applied to the lives of aspiring software craftsmen as they come across typical situations in their careers. The hope is that even as the pattern language led to great strides in code quality by codifying certain programming concepts, the same can be done for developers' careers using these Apprenticeship Patterns.<br /> </span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The authors structured the book in a very interesting way. It's organized it in a very hyperlink-heavy format. There are constant, hyperlinked references to other patterns in the descriptions for each pattern. Sometimes the hyperlinked reference to a pattern exists even before that pattern has been covered in the book. The authors say they did this to encourage the user to meander rather than read linearly and hence discover the relationships between families of patterns. <br /><br />Each pattern in the book has a context, a problem, a solution, and an action:</span><br />
<ul style="text-align: left;">
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>context</b> is the point in life where the aspiring software craftsman may find himself. </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>problem</b> describes an artifact of that situation that may be stunting his growth as a craftsman. </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>solution</b> describes a general plan the developer can undertake to resolve the problem and move on to the next stage of his career. </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>action</b> describes a concrete first step the developer can take towards implementing this solution.</span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">For example - </span><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>Apprenticeship Patterns</i></span> contains a pattern called "<b>Breakable Toys</b>." Roughly paraphrased:</span><br />
<ul style="text-align: left;">
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>context</b>: As a developer, you know that you learn as much (if not more) from failure, as opposed to success</span>.</li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>problem</b>: You're in a high-stakes environment where success is critical and there isn't much room for failure. </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>solution</b>: Design and build toy systems outside of the context of what you do for work. Do something like, build a wiki, or a calendar, or a to-do notes system. Or build a game. This will allow you to fail without suffering severe consequences. </span></li>
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">The <b>action</b>: Build the world's simplest wiki. </span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Of course, there's a lot more detail in the actual book, but that's a general idea of what these patterns look like. </span><br />
<div style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"></span></div>
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Criticisms</span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>Apprenticeship Patterns</i> describes the mindset you need to have in order to become a truly great developer. For me, it was a good reminder of what my motivations should be as an aspiring craftsman, and which aspects of my career I should be focusing on more. However, it's a very high-level reminder. Maybe it's the stage in my career, but I think I would have preferred something a little more gritty. <br /><br />The whole hyperlinked thing definitely did not work for me. I'm the sort of person who read those old choose your own adventure series by bookmarking every choice and then once I had reached an ending, I went back to the last choice I made, and made a different decision until I had recursively "read" the entire book. If I were looking up articles online, I wouldn't mind working with the hyperlinked approach. When I'm reading a book, please let it be linear. </span><br />
<br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Finally, a design patterns book is usually something you consider as a reference. Human lives and careers are infinitely more complex than code. I don't really see myself using this as a reference book for various stages of my career. </span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Take-aways <i><br /></i></span></h4>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Like I said earlier, <i>Apprenticeship Patterns</i> is a good reminder of what one needs to do to be a world-class developer. Here are some solid take-away points that stood out to me:</span><br />
<ul style="text-align: left;">
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Surround yourself by people who know more than you</span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">This is kind of a given. It's well known that you are the average of the five people you spend the most amount of time with. If you want to be more like someone, go spend time with them. <i>Apprenticeship Patterns </i>places a lot of value in social learning - learning with and from people. Social learning is much much much better than learning from a book or a video and is, I think, one of the prime benefits why going to an institution of higher education beats out MOOCs. </span><br />
<ul style="text-align: left;">
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Don't be ashamed of being dumb. Everyone was dumb once.</span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Ask questions. Don't worry whether someone might think you stupid. It's far more likely that they'll appreciate sharing their knowledge with you. If not, then they're not the sort of people you want to be asking questions anyway. This is something that has been driven into me at my job and something I've really come to embrace. </span><br />
<ul style="text-align: left;">
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">It might be a good idea to reinvent the wheel if you're doing it as an exercise. </span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">This is something I got from the <i>Breakable Toys</i> pattern I mentioned above. For a while now, I've wanted to build an app that I can publish to Google Play, but every time I got an idea, I checked Google Play and someone else had already done it. I realized that "don't reinvent the wheel" is so deeply ingrained in me that I was hesitant to do something that had already been done, even if its only purpose in doing it was to hone my coding skills.</span><br />
<ul style="text-align: left;">
<li><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Don't be afraid of taking on something difficult</span></li>
</ul>
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Sometimes, throwing yourself into <i>The Deep End </i>(that's a pattern) is the best way to learn. I'm a fairly conservative person myself, and I've found that every time I've pushed myself into taking ownership of a difficult task, regardless off whether I consider myself "ready", I've grown tremendously - both as a software craftsman and as a person. Yes, there's a chance that you'll drown, but as my boss at work reminds me, what's the worst that could happen? No one's going to die if I fail (my fiancée who's doing medicine can't say the same about herself). </span><br />
<h4 style="text-align: left;">
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Summary</span></h4>
<div style="text-align: left;">
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">In summary: </span><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><a href="http://www.amazon.com/gp/product/0596518382/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=0596518382&linkCode=as2&tag=bugnpie-20">Apprenticeship Patterns</a> (<a href="http://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382">non-affiliate link</a>)</span> is a very general book. It's a good reminder about the values of a software craftsman, but it's also very high-level and not as concrete as I would like. It's a short read, so if you have the time to spare and you haven't read a similar "inspirational" book recently, definitely do read it. We can all use reminders about what it means to be a software craftsman, and this book is definitely a good reminder. </span></div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-20995335556660035802013-11-21T20:00:00.004-08:002014-09-17T20:38:57.650-07:00Adding models to backbone collection without sorting<div dir="ltr" style="text-align: left;" trbidi="on">
We've been using <span style="font-family: "Courier New",Courier,monospace;">backbone.js</span> at work a lot lately and I'm loving it so far. I wanted to share one thing I ran across recently where the solution to my problem was non-obvious.<br />
<br />
<b>Problem:</b> I needed to sort a backbone collection using a natural sort algorithm. In order to sort the collection, you need to set a comparator - as in:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Collection = Backbone.Collection.extend({</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> comparator : function () { // ... comparator logic }</span><br />
<span style="font-family: "Courier New",Courier,monospace;">});</span><br />
<br />
However, the problem with this is that every time you do an insert, the collection resorts itself - which sucks when you're trying to add 4000 items to the list from the server like I was! In order to get around this, when you're adding something to the collection, you need to pass in the parameter sort = false, like so:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">var collection = new Collection;</span><br />
<span style="font-family: "Courier New",Courier,monospace;">collection.add([model1, model2 ... modelN], { sort : false });</span><br />
<span style="font-family: "Courier New",Courier,monospace;">collection.sort()</span><br />
<br />
Ta da! Now your backbone collection won't be sorted when you're adding those items to it. <br />
<br />
I hope that helps people!</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-5345349680676985522013-09-25T21:12:00.000-07:002013-10-06T19:51:33.708-07:00Facebook Post vs Status objects<div dir="ltr" style="text-align: left;" trbidi="on">
I spent several hours wrestling with this, so hopefully this will help someone else:<br />
<br />
Facebook <a href="https://developers.facebook.com/docs/reference/api/post/">posts</a> and <a href="https://developers.facebook.com/docs/reference/api/status/">statuses</a> are remarkably similar. The differences are as follows:<br />
<ul style="text-align: left;">
<li>Facebook posts are any posts a user makes anywhere</li>
<li>Facebook statuses are posts a user makes on his or her own wall/stream</li>
</ul>
As you may notice, all statuses are also posts. However, the Facebook Graph API treats these objects differently. For one, statuses have far fewer fields. They don't even have a field for something as simple as the privacy_level. Posts are far more interesting/descriptive.<br />
<br />
In order to request a post object instead of a status object for a "status" (since all statuses are posts) prepend the user_id of the person who made the status to the id of the post.<br />
<br />
So for example querying the Graph API for the object with id <code>"100006765630328_1380118238890351"</code> will return a POST object, whereas <code>"1380118238890351"</code>will return a STATUS object.<br />
<br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1684186373237811820.post-2878142182954521002012-12-23T21:30:00.003-08:002014-09-17T20:38:18.432-07:00Django and sqlite3<div dir="ltr" style="text-align: left;" trbidi="on">
This is a minor issue that bothered me for a while that I don't think the documentation makes clear.<br />
<br />
When I was trying to set up an sqlite3 database with my django install, I was very confused because the tutorial I followed told me to enter in my settings.py file the location of the database. <i>But I didn't have any database installed!</i> Searching the internet returned several allusions to the fact that python2.5+ came with sqlite3 so I didn't have to install or download anything ... but if I didn't, how was I going to find where this elusive sqlite3 db was so that I could link django to it?<br />
<br />
It turns out that django <i>creates</i> the database for you! So what you want to enter in the settings.py file is the link to the db file as you want it to be; for example: <span style="font-family: "Courier New",Courier,monospace;">'/home/khalid/myproj/proj.db'</span><br />
<br />
<b>ProTip: </b><br />
<br />
Consider defining the db url like so: <br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "Courier New",Courier,monospace;">'NAME': os.path.join(os.path.dirname(__file__), '../proj.db').replace('\\','/')</span></blockquote>
<br />
This will make it so that the new db file is one directory above your settings.py file. If you want to do this, make sure you import settings.path at the top of your file.<br />
<br />
<b>Final Code:</b><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">import settings.path</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">DATABASES = {<br /> 'default': {<br /> 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.<br /> 'NAME': os.path.join(os.path.dirname(__file__), '../proj.db').replace('\\','/'), # Or path to database file if using sqlite3.<br /> 'USER': '', # Not used with sqlite3.<br /> 'PASSWORD': '', # Not used with sqlite3.<br /> 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.<br /> 'PORT': '', # Set to empty string for default. Not used with sqlite3.<br /> }<br />}</span><br />
<br />
Cheerio.</div>
Unknownnoreply@blogger.com0