<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-19901248</atom:id><lastBuildDate>Sat, 31 Aug 2024 15:13:24 +0000</lastBuildDate><category>software</category><category>business</category><category>development</category><category>technology</category><category>advice</category><category>ruby on rails</category><category>code</category><category>computer</category><category>process</category><category>product management</category><category>customer</category><category>DIY</category><category>Getting Real</category><category>corporate</category><category>humor</category><category>society</category><category>wisdom</category><category>exercise</category><category>repair</category><category>aasm</category><category>blog</category><category>overview</category><category>ruby</category><category>solution</category><category>success</category><category>SEM</category><category>SEO</category><category>aging</category><category>community</category><category>expectations</category><category>opinion</category><category>review</category><category>start up</category><category>thanks</category><category>viruses</category><category>DAO</category><category>OSX</category><category>Sears</category><category>economy</category><category>front loader</category><category>hard drive</category><category>hardware</category><category>marathon</category><category>media</category><category>news</category><category>physics</category><category>politics</category><category>posts</category><category>printer</category><category>rspec</category><category>science</category><category>search</category><category>space</category><category>washer</category><category>wood</category><title>Darn Practical</title><description>Software and Technology Leadership</description><link>http://degenportnoy.blogspot.com/</link><managingEditor>noreply@blogger.com (Peter Degen-Portnoy)</managingEditor><generator>Blogger</generator><openSearch:totalResults>98</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-3018698077451249633</guid><pubDate>Mon, 10 Nov 2014 11:23:00 +0000</pubDate><atom:updated>2014-11-10T06:23:10.512-05:00</atom:updated><title>Clear Message Badge on OSX Yosemite</title><description>With OSX Yosemite and IOS 8.x, I ran into a situation where the Dock icon for Messages was showing me that I had one unread message, but I could not access the conversation in order to clear the flag. &amp;nbsp;I killed and restarted Messages on all my devices hoping that this would clear the flag, but without success. &amp;nbsp;I couldn&#39;t get to the conversation because it was a notification from Facebook with some numeric ID that was not recoverable. &amp;nbsp;I tried sending a message to that ID in the hopes that the stale conversation would re-open and I could kill the flag.&lt;br /&gt;
&lt;br /&gt;
Here is what worked:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Quit Messages&lt;/li&gt;
&lt;li&gt;Open Activity Monitor (Command-Spacebar &quot;Activity Monitor&quot;)&lt;/li&gt;
&lt;li&gt;In the search field in the top right, type &quot;dock&quot;&lt;/li&gt;
&lt;li&gt;Select the row with &quot;Dock&quot; and click on the &quot;X&quot; in the top left and then click on &quot;Quit&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
This will kill the Dock application, which will restart right away and will clear the notification badge for the Messages application.&lt;/div&gt;
</description><link>http://degenportnoy.blogspot.com/2014/11/clear-message-badge-on-osx-yosemite.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-4128277204689832822</guid><pubDate>Sat, 18 Oct 2014 19:15:00 +0000</pubDate><atom:updated>2014-10-18T15:15:10.582-04:00</atom:updated><title>Polar H7 won&#39;t pair with iPhone App</title><description>I have an iPhone that I was using with the Polar H7 Bluetooth Heart Rate Monitor (HRM). &amp;nbsp;I use &lt;a href=&quot;http://runkeeper.com/&quot;&gt;RunKeeper&lt;/a&gt; to track my workouts and find it to be highly reliable. &amp;nbsp;After only a few months of use, I was heartbroken to find that my Heart Monitor wouldn&#39;t pair to the application any more, even after putting a new battery into the H7.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s how I made it work:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Take the battery out of the HRM&lt;/li&gt;
&lt;li&gt;Use a small screw driver to touch the two battery contacts at the same time. &amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;This shorts out the power and drains any remaining charge in the unit&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Insert battery back into the unit and attempt to pair with your application&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Note that the H6 and H7 won&#39;t pair with the iPhone directly; they need to be paired from within the application that will read their signals.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
Happy workouts!&lt;/div&gt;
</description><link>http://degenportnoy.blogspot.com/2014/10/polar-h7-wont-pair-with-iphone-app.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-8824447780806869485</guid><pubDate>Thu, 05 Dec 2013 20:37:00 +0000</pubDate><atom:updated>2013-12-05T15:46:55.086-05:00</atom:updated><title>Multiple Simultaneous Interactive SSH sessions</title><description>As I&#39;ve been doing more and more Sys Ops on Ohloh.net, I have had the strong desire to avoid having to repeatedly ssh into multiple systems in order to do the same actions over and over again. &amp;nbsp;So, I started searching for &quot;parallel interactive SSH&quot; and other variations.&lt;br /&gt;
&lt;br /&gt;
Cutting to the solution for OSX, I found &lt;a href=&quot;https://code.google.com/p/csshx/&quot; target=&quot;_blank&quot;&gt;csshx&lt;/a&gt;&amp;nbsp;(The project is also on &lt;a href=&quot;https://www.ohloh.net/p/csshx&quot;&gt;Ohloh.net&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
Here&#39;s an example of using it:&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/PeterDP/7813377.js&quot;&gt;&lt;/script&gt;Some notes:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;csshX opens a small, red command window at the bottom. This needs to be the active window to get the commands to go all client windows&lt;/li&gt;
&lt;li&gt;The command window has a &quot;control mode&quot; that lets do things like re-tile, sort, add and remove windows and exit (you&#39;ll be prompted individually for each window). &amp;nbsp;You can also simply type &quot;exit&quot; to exit the shell in all the terminal windows and then close each one.&lt;/li&gt;
&lt;li&gt;You can click into one of the client windows to issue a custom command on only that system&lt;/li&gt;
&lt;li&gt;I have my ssh public key on the target machines, but it also worked on those machines without the public key, passing my login password through to all ssh clients&lt;/li&gt;
&lt;li&gt;When launching csshX from the terminal, use your &quot;primary&quot; screen. I found when launching it from my secondary monitor in OSX Mavericks (10.9) that the child windows immediately closed. Perhaps they couldn&#39;t resize correctly.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;I&#39;ve tried this with up to 15 windows, YMMV, but that looks like my maximum, given that this was running on my primary window - the laptop screen. &amp;nbsp;If you switch to a massive secondary screen, you may be able to squeeze in more.&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://degenportnoy.blogspot.com/2013/12/multiple-simultaneous-interactive-ssh.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-3651118820085768776</guid><pubDate>Wed, 30 Oct 2013 15:31:00 +0000</pubDate><atom:updated>2013-10-30T11:31:07.884-04:00</atom:updated><title>Conducting Project Retrospective with a Distributed Team</title><description>Like many modern software development teams, some of our team members do not work in the same office as we do. &amp;nbsp;We have the added and common scenario that some of our colleagues work nearly half way around the world, so our morning is, quite literally, their evening.&lt;br /&gt;
&lt;br /&gt;
And, like many modern software development teams, we like to us an Agile process, using a &lt;a href=&quot;http://en.wikipedia.org/wiki/Scrum_(software_development)&quot; target=&quot;_blank&quot;&gt;Scrum&lt;/a&gt; model with typically a two week sprint. &amp;nbsp;On the last day of the sprint, we hold a project retrospective, so that the sprint&#39;s events are quite fresh in our mind, then we close the sprint and start the next one. &lt;br /&gt;
&lt;br /&gt;
As in so many aspects of team and sprint management, I like the retrospective to be completely democratic; each team member has an equal opportunity to provide comment. &amp;nbsp;Here&#39;s how we do it:&lt;br /&gt;
&lt;br /&gt;
The purpose of the retrospective is process improvement; what can we learn from this and previous sprints so that we can codify successful behavior and modify less-successful behavior? &amp;nbsp;To focus on learning lessons, ask two questions:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;What did we do well in this sprint?&lt;/li&gt;
&lt;li&gt;What could we have done better in this sprint?&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
To get answers, start with question one and go round-robin, with the questioner going last in the sequence, giving every involved team member (&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig&quot; target=&quot;_blank&quot;&gt;pigs&lt;/a&gt; only, please) an opportunity either answer the question at hand. &amp;nbsp;Each person can either provide a new answer to the question or take a pass. &amp;nbsp;When they take a pass, they typically are not asked to provide any more answers to the question. &amp;nbsp;Don&#39;t be draconian; if someone remembers something in the course of the process, it is better to be inclusive than rigid to a rule.&lt;br /&gt;
&lt;br /&gt;
It runs something like this:&lt;br /&gt;
&lt;br /&gt;
Scrum Master (SM): Person 1 (P1): Do you have something we did well in this sprint?&lt;br /&gt;
&lt;br /&gt;
P1: Yes, We completed some significant new functionality for our users&lt;br /&gt;
&lt;br /&gt;
SM: Thank you. &amp;nbsp;Person 2 (P2): Do you have something we did well in this sprint?&lt;br /&gt;
&lt;br /&gt;
P2: Yes, We were very responsive in reviewing Pull Requests&lt;br /&gt;
&lt;br /&gt;
And so forth until everyone has taken a pass on the question. &amp;nbsp;Then move on to question two.&lt;br /&gt;
&lt;br /&gt;
One way to document the answers in a group is to use a document, word processor or presentation, and put one answer on a page. &amp;nbsp;Put the document on a large screen so everyone can follow along. Then, print out all pages and put them on the wall. &amp;nbsp;Each person takes a pen, marker, sticker or something similar and makes three votes on the answers to each question.&lt;br /&gt;
&lt;br /&gt;
The votes are then tallied up and the top three answers are documented in some centralized document of Retrospective Summaries.&lt;br /&gt;
&lt;br /&gt;
How then to do this for teams that are geographically disbursed? &amp;nbsp;We want everyone to follow along with the documentation of the answers so they every team member can agree to the wording used. &amp;nbsp;We want every team member to be able to vote and we need to tally up the votes.&lt;br /&gt;
&lt;br /&gt;
When facing these challenges for the current team, I first looked at collaborative work spaces that would let us all see the same documents and perhaps collaboratively edit the documents using some kind of tick mark or initials to indicate votes. &amp;nbsp;These were less than elegant.&lt;br /&gt;
&lt;br /&gt;
Today we use two technologies to conduct our project retrospectives. &amp;nbsp;First, we use &lt;a href=&quot;http://join.me/&quot;&gt;Join.me&lt;/a&gt; to have the entire team view the screen of the Scrum Master. &amp;nbsp;The Scrum Master creates a survey on &lt;a href=&quot;http://surveymonkey.com./&quot;&gt;SurveyMonkey.com.&lt;/a&gt; &amp;nbsp;The survey has two questions, the ones above. &amp;nbsp;Each question requires exactly 3 answers be selected. &amp;nbsp;We then go round-robin and document each answer. &amp;nbsp;Here&#39;s what it looks like as we edit a question:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJ6uyhlTaQV0RkRud7htvbc0M7tMnd-aJXUQTm5Wls7q2r2v5Uf6oIk_rrOlZn32JzPEDL3YSMtDLeK91b0CpAI35x7kJgbdD2mYnr58ge9nI0r4TZSTeiw-4YPS-4cGEIJyr/s1600/Screen+Shot+2013-10-30+at+11.24.51+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;507&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJ6uyhlTaQV0RkRud7htvbc0M7tMnd-aJXUQTm5Wls7q2r2v5Uf6oIk_rrOlZn32JzPEDL3YSMtDLeK91b0CpAI35x7kJgbdD2mYnr58ge9nI0r4TZSTeiw-4YPS-4cGEIJyr/s640/Screen+Shot+2013-10-30+at+11.24.51+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
When we have finished the process of gathering the answers, the SM posts the URL of the survey in to the team chat window and pauses Join.me. &amp;nbsp;Every team member votes and when all votes have been collected, the SM unpauses Join.me and the team reviews the answers. &lt;br /&gt;
&lt;br /&gt;
The top three answers are documented in a centralized document and an executive summary is sent around. &amp;nbsp;Every other or third sprint we look back at previous answers to see how we&#39;re trending. &amp;nbsp;We look for answers that we have repeated and talk about how we will retain good practices and what we could use to replace less-successful practices.&lt;br /&gt;
&lt;br /&gt;
By retaining our focus on process improvement, we have the opportunity for every team member to have a voice and everyone has had very helpful inputs, that even if not voted, stay in the collective consciousness.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://degenportnoy.blogspot.com/2013/10/conducting-project-retrospective-with.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJ6uyhlTaQV0RkRud7htvbc0M7tMnd-aJXUQTm5Wls7q2r2v5Uf6oIk_rrOlZn32JzPEDL3YSMtDLeK91b0CpAI35x7kJgbdD2mYnr58ge9nI0r4TZSTeiw-4YPS-4cGEIJyr/s72-c/Screen+Shot+2013-10-30+at+11.24.51+AM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-2812496726798903889</guid><pubDate>Wed, 09 Oct 2013 20:13:00 +0000</pubDate><atom:updated>2013-10-09T16:31:51.422-04:00</atom:updated><title>The Joy-Infused Workplace</title><description>This is a new thought, so please bear with with while I work it out, but I was so excited by this that I had to put something down on paper, as it were.&lt;br /&gt;
&lt;br /&gt;
I was chatting with some colleagues during a quick coffee break and they were joking about business management practices: ISO, CMMI, MBO, etc. &amp;nbsp;Joking about how all these were problematic, but they liked ISO because it didn&#39;t matter how bad the product was, as long as the process was documented and reproducible. &amp;nbsp;We steam-rolled into the laughable over-reaching of business processes and how they can block and stifle productivity and creativity. &lt;br /&gt;
&lt;br /&gt;
Then came the seminal moment: One colleague said, &quot;But you have to have &lt;i&gt;some&lt;/i&gt;&amp;nbsp;process! &amp;nbsp;Otherwise everything would just be &lt;i&gt;chaos&lt;/i&gt;!&quot;&lt;br /&gt;
&lt;br /&gt;
I couldn&#39;t resist. &amp;nbsp;I was bursting. &amp;nbsp;I blurted out, &quot;Yes! And it does not matter &lt;u style=&quot;font-style: italic;&quot;&gt;which&lt;/u&gt;&amp;nbsp;process you choose; as long as the team works with it, owns it, uses it, improves it and you, the team and the company are ultimately successful!&lt;br /&gt;
&lt;br /&gt;
&quot;Your processes doesn&#39;t even need to come from only one source! &amp;nbsp;Mix, match and combine! &amp;nbsp;Pull a little Peer Programming into your Agile Scrum. &amp;nbsp;Waterfall? &amp;nbsp;Heck, if it works for you: YES!&quot;&lt;br /&gt;
&lt;br /&gt;
We laughed a bit about that, but I wouldn&#39;t let it go. &amp;nbsp; &quot;If you, your team and your company is successful, then your process is a good one, whatever it is. &amp;nbsp;I have learned that if you can help everyone enjoy what they do, they will do it well and will want to continue doing well. &amp;nbsp;The process is incidental; the &lt;i&gt;joie de vivre&lt;/i&gt;&amp;nbsp;is what is critical.&lt;br /&gt;
&lt;br /&gt;
&quot;As a matter of fact; that is what the management goal of the company should be: Success by fostering an environment of joy within the company.&quot;&lt;br /&gt;
&lt;br /&gt;
My colleague pointed out, &quot;That could backfire: The server went down, but we&#39;re happy, so who cares!&quot;&lt;br /&gt;
&lt;br /&gt;
&quot;Great point!&quot; &amp;nbsp;I practically yelled. &amp;nbsp;I am excitable. &amp;nbsp;&quot;But, that would be antithetical to the company&#39;s goal of being successful. If the staff is enabled to keep the servers running, maintained and address critical repair issues in a timely manner, then they will feel a tremendous sense of accomplishment and satisfaction; right?&quot; &amp;nbsp;My colleague agreed.&lt;br /&gt;
&lt;br /&gt;
If everyone in my company felt joy, accomplishment and satisfaction, I doubt there would be a business challenge we could not over come. &amp;nbsp;So, it&#39;s my new business and management philosophy: The Joy-Infused Workplace.&lt;br /&gt;
&lt;br /&gt;
Perhaps I&#39;m just supremely lucky to be able to work standing up and dancing to great music while I write, debug and review Ruby and Rails code and work with some really fine colleagues on my &lt;a href=&quot;http://ohloh.net/&quot;&gt;Ohloh.net&lt;/a&gt; team. &amp;nbsp;But I suspect, based on the laughter, respect and support we have for one another that we are a high-performing team because of the way we choose to let joy in to our working environment.&lt;br /&gt;
&lt;br /&gt;
Yes, OK, I know: one can&#39;t be happy all the time. &amp;nbsp;I think that does not at all take away from the goal of creating a workplace environment where everyone one can feel acknowledged, accomplishment and satisfaction that leads to regular expressions of joy. </description><link>http://degenportnoy.blogspot.com/2013/10/the-joy-infused-workplace.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-8492321489810235566</guid><pubDate>Wed, 25 Sep 2013 22:51:00 +0000</pubDate><atom:updated>2013-09-25T18:59:32.519-04:00</atom:updated><title>Aarrgh!! Sports Authority Web App Fail</title><description>Gonna complain here.  Sports Authority, you never fail to Piss Me Off.  Every time I enter your store, the employees make me feel like I am intruding on their personal time.  It takes for-evah to find what I want.  And now, now I have &quot;The League&quot; to talk about.&lt;br /&gt;
&lt;br /&gt;
Yes, I signed up for your customer loyalty program.  With the level of activity in our family, I am regularly at your store.&lt;br /&gt;
&lt;br /&gt;
So, I signed up, gave my info and my wife tried to use the card.  Nope; we have to register on your website first.&lt;br /&gt;
&lt;br /&gt;
I come to your website, enter the card number and my email address.  Then I generate a secure 15 digit password.  The form pukes; passwords have to be 7 - 14 characters.  OK, my bad.  I generate another password, this one is 14 characters.  Enter.  Hmm, the page doesn&#39;t refresh, maybe the old 15 digit password wasn&#39;t cleared.  Generate a new password, copy it, carefully delete the current password and try again.&lt;br /&gt;
&lt;br /&gt;
What?  Another error message?  Passwords have to be 7 - 14 characters.  F-f-f-f-f-ffffff  But it is!!  Hey, I&#39;m a smart guy; you probably also don&#39;t accept special characters.  So I generate another password, 14 characters, but not special characters and resubmit.&lt;br /&gt;
&lt;br /&gt;
Fails again. Now my email address doesn&#39;t match.  WHY DIDN&#39;T YOU MENTION THAT FIRST?  And what happened to the new password I generated? Generate a new password and try another email address.  Nope.  Try another email address and yet another password.  Nope.&lt;br /&gt;
&lt;br /&gt;
Bail on the email address and use my phone number.  With a new password; how many is that now?  Hmm, 1, 2, 3, 7 or so. I&#39;m going to have to clean up all the old entries from the password safe after I verify which one actually works.  Crap.&lt;br /&gt;
&lt;br /&gt;
I successfully log in and look at the email address right away. F-f-f-f-f-fffff!!!! It&#39;s the first email address I used, but in all caps.  The !@#$ engineer isn&#39;t doing a case-insensitive match?  Holy amateur, Batman!!&amp;nbsp;
&lt;br /&gt;
&lt;br /&gt;
OK, I hate you Sports Authority.  Have crappy service and make my shopping experience lousy and I&#39;ll do everything to avoid your store until I have to go, but hire idiot programmers and put a amateur, 1990&#39;s type experience on the web today and you have earned my disdain.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Oh, but wait!! &amp;nbsp;There&#39;s more!&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;
Just before clicking &quot;accept&quot;, I read the terms. &amp;nbsp;If you spend $100 within a quarter -- not any three month period, but a calendar quarter -- then you get $5.00 back. Any unused points are reset to 0 with each quarter.&lt;br /&gt;
&lt;br /&gt;
Wow. &amp;nbsp;I am totally underwhelmed.</description><link>http://degenportnoy.blogspot.com/2013/09/aarrgh-web-app-fail.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-4819511361270496878</guid><pubDate>Mon, 10 Jun 2013 15:53:00 +0000</pubDate><atom:updated>2013-06-10T11:53:49.330-04:00</atom:updated><title>Reveal.js: Elegant presentations in the browser</title><description>This is chock full of really good stuff for browser based presentations:&lt;a href=&quot;http://lab.hakim.se/reveal-js/#/&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;http://lab.hakim.se/reveal-js/#/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Companion site for editing really cool browser based presentations:&amp;nbsp;&lt;a href=&quot;http://slid.es/&quot;&gt;http://slid.es/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The creator of these things:&amp;nbsp;&lt;a href=&quot;http://hakim.se/&quot;&gt;http://hakim.se/&lt;/a&gt;&lt;span id=&quot;goog_547386338&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_547386339&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://www.blogger.com/&quot;&gt;&lt;/a&gt;</description><link>http://degenportnoy.blogspot.com/2013/06/revealjs-elegant-presentations-in.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-242653974977792413</guid><pubDate>Fri, 29 Mar 2013 15:13:00 +0000</pubDate><atom:updated>2013-03-29T11:14:48.394-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">software</category><title>Sandy Metz on Design</title><description>This is excellent:&amp;nbsp;&lt;a href=&quot;http://vimeo.com/26330100&quot;&gt;http://vimeo.com/26330100&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Sandy talks about OO design and brings us through the thought process of how to get to loosely coupled, independent objects. &amp;nbsp;Highly recommended.</description><link>http://degenportnoy.blogspot.com/2013/03/sandy-metz-on-design.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-6106652763935519566</guid><pubDate>Thu, 28 Mar 2013 15:57:00 +0000</pubDate><atom:updated>2013-03-29T11:15:44.029-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">computer</category><title>Forecast: A great Web App</title><description>Check out this site: &lt;a href=&quot;http://forecast.io/&quot; target=&quot;_blank&quot;&gt;Forecast&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
That&#39;s some impressive web app for getting local, regional and global forecasts</description><link>http://degenportnoy.blogspot.com/2013/03/forecast-great-web-app.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-900851655851257993</guid><pubDate>Thu, 10 Jan 2013 21:08:00 +0000</pubDate><atom:updated>2013-01-10T16:08:02.415-05:00</atom:updated><title>Code Smells &amp; Solutions in Rails Applications</title><description>I came across an interesting &lt;a href=&quot;http://opensoul.org/blog/archives/2012/05/23/why-our-code-smells/&quot; target=&quot;_blank&quot;&gt;presentation&lt;/a&gt; by Brandon Keepers at GitHub that he gave in June of 2012. &amp;nbsp;I didn&#39;t make it through the 35 minute video of the presentation, but there is also the slide deck. Scanning the rest of the presentation in the slide deck, I was delighted to see Brandon promoting appropriate separation of concerns with respect to the use of Rails and its components.&lt;br /&gt;
&lt;br /&gt;
It&#39;s time to move away from Fat Models and get Domainy. &amp;nbsp;Use ActiveRecord to be the encapsulator of things specifically related to working with the database. &amp;nbsp;Build your domain model on top of that. &lt;br /&gt;
&lt;br /&gt;
Gary Bernhardt of &lt;a href=&quot;http://www.destroyallsoftware.com/&quot; target=&quot;_blank&quot;&gt;Destroy All Software&lt;/a&gt; fame promotes the same.&lt;br /&gt;
&lt;br /&gt;
I liked Brandon&#39;s identification that test cases can illustrate where the code smells when the tests are too complex. &amp;nbsp;Spot on.</description><link>http://degenportnoy.blogspot.com/2013/01/code-smells-solutions-in-rails.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-6917223303736674017</guid><pubDate>Fri, 21 Dec 2012 19:54:00 +0000</pubDate><atom:updated>2012-12-21T14:54:55.396-05:00</atom:updated><title>Dev Tools for Quick Mockups</title><description>Just so that I don&#39;t forget about it now:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://jsbin.com/&quot;&gt;JSBin&lt;/a&gt; makes it easy to mockup some real HTML with some real JS and see the real result, then iterate through it with versioning.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bl.ocks.org/&quot;&gt;BL.OCKS.org&lt;/a&gt; will take your Github gist and render it for viewing. &amp;nbsp;Here&#39;s the blurb: &amp;nbsp;&quot;This is a simple viewer for code examples hosted on GitHub Gist. Code up an example using Gist, and then point people here to view the example and the source code, live!&quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://degenportnoy.blogspot.com/2012/12/dev-tools-for-quick-mockups.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-7650778220053630258</guid><pubDate>Fri, 07 Dec 2012 19:41:00 +0000</pubDate><atom:updated>2012-12-07T14:44:56.538-05:00</atom:updated><title>Color &amp; Git Branch in your BASH Prompt</title><description>This one will be easy. &amp;nbsp;Place this into your .bash_profile:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/4235914.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This defines a function called &quot;parse_git_branch&quot;, which reads the symbolic reference for the HEAD pointer (sending errors to /dev/null) and assigning the value to the &quot;ref&quot; variable. &amp;nbsp;Then, it echos the value of the variable, but filters out &quot;refs/heads/&quot; from the answer (See example 10.10 here at &lt;a href=&quot;http://tldp.org/LDP/abs/html/parameter-substitution.html&quot; target=&quot;_blank&quot;&gt;tldp.org&lt;/a&gt;)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
After setting the value for some colors, it sets the first level prompt to print the current working directory in green and the git branch in yellow.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Voila&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://degenportnoy.blogspot.com/2012/12/color-git-branch-in-your-bash-prompt.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-4324924079470124795</guid><pubDate>Fri, 07 Dec 2012 18:29:00 +0000</pubDate><atom:updated>2012-12-07T13:32:52.550-05:00</atom:updated><title>Test your webpages from outside of your domain</title><description>I love tools like Firebug and Chrome&#39;s Developer Tools. &amp;nbsp;But a tool originally developed at AOL and the open source has captured my attention: &amp;nbsp;&lt;a href=&quot;http://www.webpagetest.org/&quot; target=&quot;_blank&quot;&gt;Web Page Test&lt;/a&gt; does a great job of displaying all the nitty gritty details that are otherwise hard to get, such as DNS lookup time. &amp;nbsp;There are even developer tools with a &lt;a href=&quot;https://sites.google.com/a/webpagetest.org/docs/advanced-features/webpagetest-restful-apis&quot; target=&quot;_blank&quot;&gt;RESTful API&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Highly Recommend</description><link>http://degenportnoy.blogspot.com/2012/12/test-your-webpages-from-outside-of-your.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-8878427312978245386</guid><pubDate>Thu, 06 Dec 2012 18:17:00 +0000</pubDate><atom:updated>2013-01-10T16:09:05.962-05:00</atom:updated><title>Scrum Planning Poker for the Distributed Team</title><description>I&#39;ve taken on the role of Scrum Master for our team and wanted to get everyone participating in issue scoping with independent votes. &amp;nbsp;So I searched for a Planning Poker scoping tool for distributed teams. The one I like the best is &lt;a href=&quot;http://www.pointingpoker.com/&quot; target=&quot;_blank&quot;&gt;Pointing Poker&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It&#39;s free, requires no login, is very easy to use and effective.&lt;br /&gt;
&lt;br /&gt;
One person logs in and starts a new session. &amp;nbsp;That person then distributes the URL with the session identifier to the rest of the team (we use Skype). &amp;nbsp;Everyone else then visits the site and enters their name. &amp;nbsp;No user account, no registration, no nothing. &amp;nbsp;From there it is easy to clear the last vote, have everyone vote and see the results. Want to change your vote? &amp;nbsp;Simply click on a different value.&lt;br /&gt;
&lt;br /&gt;
Kudos for an effective tool. &amp;nbsp;Hey Matt Ruwe, if you were to put a donate button so I could donate a few bucks, I would. </description><link>http://degenportnoy.blogspot.com/2012/12/scrum-planning-poker-for-distributed.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-1441007732591442390</guid><pubDate>Mon, 19 Nov 2012 22:35:00 +0000</pubDate><atom:updated>2017-01-04T21:41:07.359-05:00</atom:updated><title>Introducing the Mamo</title><description>A while back, I was considering the infinite. &amp;nbsp;I had some time on my hands, what can I say?&lt;br /&gt;
&lt;br /&gt;
Infinity, as the saw goes, is really, really big. &amp;nbsp;You think you know big? &amp;nbsp;You don&#39;t know anything. &amp;nbsp;Aunt Bertha&#39;s behind? Insignificant. The Earth? &amp;nbsp;Pish. &amp;nbsp;C&#39;mon: the Milky Way galaxy is the smallest starting point with some 200 to 400 &lt;i&gt;billion&lt;/i&gt;&amp;nbsp;stars.&lt;br /&gt;
&lt;br /&gt;
OK, now we&#39;re starting with something: a Billion. &amp;nbsp;A 1 with 9 zeros: 1,000,000,000. &amp;nbsp;We have 200 to 400 of these Billions when we count the stars&amp;nbsp;in the Milky Way. And there may be some 100 Billion galaxies. &amp;nbsp;That&#39;s 100,000,000,000 galaxies times 300,000,000,000 stars per galaxy! &amp;nbsp;That&#39;s a lot of stars, but we can think of even bigger things!&lt;br /&gt;
&lt;br /&gt;
OK, let&#39;s get sexy. &amp;nbsp;From 2010, in the &lt;a href=&quot;http://www.huffingtonpost.com/2010/12/01/number-of-stars-in-universe_n_790563.html&quot; target=&quot;_blank&quot;&gt;Huffington Post&lt;/a&gt;, Scientists believe there may be up to 300 Sextillion stars -- that&#39;s 1 with 21 zeros: 1,000,000,000,000,000,000,000. &amp;nbsp;You know, typing that is quickly going to get boring. &amp;nbsp;We&#39;re switching to scientific notation: 10&lt;sup&gt;21&lt;/sup&gt;. &amp;nbsp;But that&#39;s &lt;u style=&quot;font-style: italic;&quot;&gt;stars&lt;/u&gt;, not galaxies, so let&#39;s keep our units straight. &amp;nbsp;If each galaxy had about 300 billion stars, then it would be 10&lt;sup&gt;21&lt;/sup&gt; divided by 10&lt;sup&gt;9&lt;/sup&gt;, so we subtract exponents and get 10&lt;sup&gt;12&lt;/sup&gt;. &amp;nbsp;Back to a Trillion. &amp;nbsp;Boring. &lt;br /&gt;
&lt;br /&gt;
Wikipedia talks about &lt;a href=&quot;http://en.wikipedia.org/wiki/Names_of_large_numbers&quot; target=&quot;_blank&quot;&gt;large numbers&lt;/a&gt;, and we get up to funky numbers like Vigintillion (10&lt;sup&gt;63&lt;/sup&gt;) and Centillion (10&lt;sup&gt;303&lt;/sup&gt;). &amp;nbsp;Of course, there&#39;s also the Googol (10&lt;sup&gt;100&lt;/sup&gt;) and the Googolplex (10&lt;sup&gt;googol&lt;/sup&gt;).&lt;br /&gt;
&lt;br /&gt;
But this really doesn&#39;t do it when one considers the infinite. Let&#39;s go back to the Billion; we can grasp that. &amp;nbsp;Try this on for size, you may have heard it: if you spent $0.25 every 15 minutes playing video games, then you, and everyone else in your 100 person company could play non-stop for nearly 7,000 &lt;b&gt;years&lt;/b&gt;. &amp;nbsp;That&#39;s freaking big. &amp;nbsp;Or, you could buy 1/3 of a nuclear powered submarine. &lt;br /&gt;
&lt;br /&gt;
Or, you could build 3 schools. &amp;nbsp;And hire 200 teachers and administrators. And build a police department and buy cruisers and all the nifty equipment. And a fire department with trucks. &amp;nbsp;And hire 60 police officers and 30 fire fighters. And build a hospital. &amp;nbsp;And staff it with 40 doctors and 80 nurses. And hire 50 engineers. &amp;nbsp;And build houses for&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;u&gt;all of them&lt;/u&gt;. &amp;nbsp;And pay their salaries. &amp;nbsp;&lt;b&gt;For over 14 years.&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Or buy &lt;b&gt;one&lt;/b&gt;&amp;nbsp;B2 Stealth Bomber.&lt;br /&gt;
&lt;br /&gt;
OK, that&#39;s helped me tremendously with one Billion. &amp;nbsp;One. &amp;nbsp;Just one.&lt;br /&gt;
&lt;br /&gt;
We think there are a Trillion (that&#39;s 1,000 Billion) galaxies. &amp;nbsp;Each galaxy with 200 - 400 Billion stars. &amp;nbsp;And that doesn&#39;t even do the infinite justice.&lt;br /&gt;
&lt;br /&gt;
No, we need another number. &amp;nbsp;That Googol doesn&#39;t help us either. &amp;nbsp;Psh, it has only 100 zeros in the exponent. &amp;nbsp;No we need something really massive.&lt;br /&gt;
&lt;br /&gt;
So, I invented a new number: &amp;nbsp;The Mamo. &amp;nbsp;The Mamo is 10&lt;sup&gt;1,000,000,000&lt;/sup&gt;. &amp;nbsp;Yep, 10 raised to the Billion. &amp;nbsp;Now &lt;i&gt;that&#39;s &lt;/i&gt;a number. &amp;nbsp;Now we can think about a Mamo sub-atomic particles in the conceivable universe and really expand our concept of wicked big.&lt;br /&gt;
&lt;br /&gt;
But for the infinite, we need even more: We need the SuperMamo. &amp;nbsp;That is Mamo&lt;sup&gt;Mamo&lt;/sup&gt;. &amp;nbsp;Yes, a Mamo raised to the Mamo. &lt;br /&gt;
&lt;br /&gt;
Phew. &amp;nbsp;I need to rest.</description><link>http://degenportnoy.blogspot.com/2012/11/introducing-mamo.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-5113742597657437175</guid><pubDate>Tue, 16 Oct 2012 15:35:00 +0000</pubDate><atom:updated>2012-10-16T11:36:38.355-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">advice</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">ruby on rails</category><title>ActiveRecord, JSON &amp; hashes</title><description>While testing a new script for some data loading, I found myself on our testing platform and stymied because the foundation things I needed were not part of that database. &amp;nbsp;I needed certain license records and Forge records. &amp;nbsp;While the staging system has a more or less complete copy of our production system, the testing system has a much more constrained data set. &amp;nbsp;This is a one of my bugaboos: making sure there is sufficient data for testing. And, once again, I questioned the decision to NOT use TDD for the script development. &amp;nbsp;That way, I could have mocked all the scenarios I needed and probably would have completed the script in less time to a greater level of quality. &amp;nbsp;But I digress.&lt;br /&gt;
&lt;br /&gt;
I was in the console of the testing environment (not the &quot;test&quot; environment) and needed to have a particular license as part of the testing dataset. &amp;nbsp;I wanted to use the tools I had, not have to write a migration, start up PSQL, or any of those pathways. &amp;nbsp;I wanted to be lazy and get the record from the staging environment and copy it into the testing environment.&lt;br /&gt;
&lt;br /&gt;
So, I found the license in the staging environment and converted it to json with license.to_json. That was wicked easy. &amp;nbsp;The next step was to &lt;i&gt;parse&lt;/i&gt;&amp;nbsp;the JSON, which will convert it to a hash, then extract the license value. That looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;license_hash = JSON.parse(json)[&#39;license&#39;]&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The result was a pretty little hash with all the necessary data that could be copied from one console to the next and then pasted into place. &amp;nbsp;In no time at all, I had the needed record in the testing database. </description><link>http://degenportnoy.blogspot.com/2012/10/activerecord-json-hashes.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-1592270089677393681</guid><pubDate>Wed, 10 Oct 2012 21:40:00 +0000</pubDate><atom:updated>2012-10-10T17:40:58.646-04:00</atom:updated><title>Nil Object in Reality Land</title><description>Recently I was reviewing some code with a colleague; we were looking at some new widget code. &amp;nbsp;We switched to the branch and started our server. &amp;nbsp;Looking at the first randomly selected project, everything looked good, so we copied the widget code and took a look at what the user would actually see.&lt;br /&gt;
&lt;br /&gt;
Problemo. &amp;nbsp;The user was going to see a 500 message through the tiny view port of the widget.&lt;br /&gt;
&lt;br /&gt;
The problem was that there was code looking for the filename of the project logo in order to display the logo. &amp;nbsp;However, this particular project did not have a logo. &amp;nbsp;So, project.logo (which was nil) caused a problem when the code then sought to access project.logo.thumbnail. &amp;nbsp;Boom. &amp;nbsp;No method &quot;thumbnail&quot; on NilObject. &amp;nbsp;heh.&lt;br /&gt;
&lt;br /&gt;
Looking at the code, the obvious pattern would have been to do something like:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;if project.logo &amp;amp;&amp;amp; project.logo.thumbnail&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;show thumbnail=&quot;thumbnail&quot;&gt;&lt;/show&gt;
But this is cowardly, timid code and I have been influenced by Avdi Grimm&#39;s thoughts on &lt;a href=&quot;http://avdi.org/talks/confident-code-rubymidwest-2011/&quot; target=&quot;_blank&quot;&gt;Confident Code&lt;/a&gt;. Once it was pointed out, it was clear that I was never very enamored with all those protective &quot;if this and if that and if the other thing, then and only then do something&quot;. &amp;nbsp;I really like the idea of writing code that knows how to handle itself.&lt;br /&gt;
&lt;br /&gt;
My colleague and I decided to address the issue by using a &lt;a href=&quot;http://en.wikipedia.org/wiki/Null_Object_pattern&quot; target=&quot;_blank&quot;&gt;NullObject&lt;/a&gt; pattern. Examining the code, we saw that we could have a NullLogo object that responded to a &quot;public_filename&quot; method and if the project had no logo, it would return the NullLogo object instead of a Logo object. &amp;nbsp;The NullLogo#public_filename method returns &quot;no_logo.png&quot; and so we are always guaranteed to show something reasonable.&lt;br /&gt;
&lt;br /&gt;
We eliminated quite a number of lines of timid code and were very pleased.&lt;br /&gt;
&lt;br /&gt;
So we pushed our code onto the staging server and looked. &amp;nbsp;Yes, the empty logo behavior was correct. So I deleted a logo from an existing project, something that can easily be done by our users. &amp;nbsp;Boom.&lt;br /&gt;
&lt;br /&gt;
Digging in we saw that the Logo derived from Attachment and Attachment did magic things. &amp;nbsp;Including using a gem that managed file sizing and thumbnail generation and pushing logos to S3. &amp;nbsp;A former colleague implemented clever logic to put files in the local filesystem during development and on S3 during production; all quite reasonable. &lt;br /&gt;
&lt;br /&gt;
But, deleting the logo did not trigger the cascade of cleanup; the author of the gem had no support for cleaning up attachments and all the thumbnails it had created. &amp;nbsp;Now the database had data about attachments that did not exist and S3 had files of logos that no one would ever see or even want again. &lt;br /&gt;
&lt;br /&gt;
It turns out that this is the behavior that has been present in the system for ages. &amp;nbsp;Our use of TDD and careful testing revealed this problem that no one has notice although this functionality has been in the product for a long time.&lt;br /&gt;
&lt;br /&gt;
To wrap up the story; we implemented functionality to clean up the database and left it as a future exercise to clean up the logos from S3. &amp;nbsp;After all, these are a tiny fraction of the storage we use there, so let&#39;s not get side tracked by the bicycle shed when we have a nuclear reactor to build.</description><link>http://degenportnoy.blogspot.com/2012/10/nil-object-in-reality-land.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-64740477364632192</guid><pubDate>Tue, 02 Oct 2012 15:53:00 +0000</pubDate><atom:updated>2012-10-02T11:54:40.942-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">computer</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">OSX</category><title>SSH to VirtualBox Guest in Mountain Lion</title><description>My development system is OS/x 10.8, Mountain Lion. &amp;nbsp;I run Ubuntu 10.04 LTS Server in a VirtualBox VM and all the development work is done in that server (easiest for the entire team to ensure we all have the same dev environment).&lt;br /&gt;
&lt;br /&gt;
I switched over from a desktop system (Mac Pro) to a laptop (MacBook Pro), copied over my .vbi file with my Ubuntu server and something was different. &amp;nbsp;I had been ssh&#39;ing into the VirtualBox guest without any issues. &amp;nbsp;Set up my ssh keys and an alias. &amp;nbsp;Sweet. &amp;nbsp;But, with the laptop, I couldn&#39;t get there from here. &amp;nbsp;The host name couldn&#39;t be resolved.&lt;br /&gt;
&lt;br /&gt;
Yes, VB Network mode was Bridged Adapter. &amp;nbsp;At first, the issue was waiting for the DNS servers to refresh the IP address of the guest OS, which was &lt;i&gt;now on a different subnet&lt;/i&gt;&amp;nbsp;because I was connecting over Wi-Fi instead of Ethernet. &lt;br /&gt;
&lt;br /&gt;
But, after closing the laptop for the night, the issue was back and I knew it wasn&#39;t from switching subnets. &amp;nbsp;A clue was that I couldn&#39;t also connect to one of our development utility servers. &amp;nbsp;Checked wireless -- default configuration had wireless connecting to the guest Wi-Fi and not the corporate Wi-Fi. &amp;nbsp;Fixed that, but no love. &amp;nbsp;Flushed the DNS cache and voila; ssh to the guest machine.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s the key: on Mountain Lion use:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;sudo killall -HUP mDNSResponder&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;dscacheutils is still present, but doesn&#39;t work in all situations. &amp;nbsp;Use the mDNSReponder.&lt;/span&gt;</description><link>http://degenportnoy.blogspot.com/2012/10/ssh-to-virtualbox-guest-in-mountain-lion.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-4266725701263746081</guid><pubDate>Tue, 25 Sep 2012 20:19:00 +0000</pubDate><atom:updated>2012-10-11T16:59:03.111-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">computer</category><category domain="http://www.blogger.com/atom/ns#">development</category><title>Nifty VIM stuff</title><description>I&#39;ve been building some of these techniques over time as I move from TextMate to VIM. Today, I came across the venerable &quot;&lt;a href=&quot;http://www.moolenaar.net/habits.html&quot; target=&quot;_blank&quot;&gt;Seven habits of effective text editing&lt;/a&gt;&quot; by Bram Moolenaar, who is the primary author of VIM and wrote this post, ah, 12 years ago now.&lt;br /&gt;
&lt;br /&gt;
Please feel free to help yourself to my &lt;a href=&quot;https://github.com/PeterDP/dot_vim&quot; target=&quot;_blank&quot;&gt;dot_vim repository on github&lt;/a&gt;, which has my working vimrc and plugins&lt;br /&gt;
&lt;br /&gt;
Here are some of the wicked good things I&#39;ve come across:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Windows. &amp;nbsp;One of the biggest drawbacks to TextMate was the one window thang. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;To create a new window in VIM do:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Ctrl-W S&lt;/span&gt; (for Split): creates a horizontal split&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Crtl-W V&lt;/span&gt; (for Vertical): creates a vertical split&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;To navigate between windows, use &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Ctrl-W&lt;/span&gt; plus the navigation keys &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;h,j,k,l&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;To close a window, use &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Ctrl-W C&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Tabs. &amp;nbsp;Tabs are collections of windows. &amp;nbsp;All tabs have access to all the buffers, so you have access to any open file from any tab&lt;/li&gt;
&lt;li&gt;To create a new tab do &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tabnew&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;To close a tab to &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tabclose&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;To move to a tab use:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tabnext&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tabprevious&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tabfirst&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tablast&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:tabmove&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;My .vimrc has some mappings for these&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;To reposition the buffer in the middle of the window, simply press &#39;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;zz&lt;/span&gt;&#39;&lt;/li&gt;
&lt;li&gt;Here&#39;s the one that got me really, really excited. &amp;nbsp;For searching, I&#39;ve been using the standard &#39;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/&lt;pattern&gt;&lt;/pattern&gt;&lt;/span&gt;&#39; thing. &amp;nbsp;Well, check this out; you can simply put the cursor on the word for which you are looking and press &#39;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;*&lt;/span&gt;&#39;. &amp;nbsp;Yep, pretty nifty.&lt;/li&gt;
&lt;li&gt;Block Comment / Uncomment. &amp;nbsp;This is the shizz:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;To block comment, use Ctrl-V to enter Visual Block mode. &amp;nbsp;Navigate across all the lines you want to comment out, then use I &lt;comment_character&gt;&amp;nbsp;&lt;comment_character&gt;ESC to insert comment characters. &amp;nbsp;I just did this in SQL to insert &quot;-- &#39;&lt;/comment_character&gt;&lt;/comment_character&gt;&lt;/li&gt;
&lt;li&gt;To uncomment a block, use Ctrl-V to enter Visual Block mode. &amp;nbsp;Navigate across all the comment characters, then use d to delete. &amp;nbsp;Voila!&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;To combine two lines: position the cursor at the end of the top line and press &quot;J&quot; to delete the newline&lt;/li&gt;
&lt;li&gt;From Vim, you can run the current buffer with &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;:!ruby %&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Special for Rails: I added the command-t plugin for quickly finding your favorite file. &amp;nbsp;Sweet.&lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</description><link>http://degenportnoy.blogspot.com/2012/09/nifty-vim-stuff.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-1711218107805762293</guid><pubDate>Tue, 28 Aug 2012 14:59:00 +0000</pubDate><atom:updated>2012-09-25T12:37:09.173-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">ruby</category><category domain="http://www.blogger.com/atom/ns#">ruby on rails</category><title>Ruby &amp; Rails Tools: Pry, Guard, Spork, RubyFiddle, Null Object Pattern</title><description>Here are some Ruby and Rails things that have caught my attention. &amp;nbsp;In the interest of sharing and documentation, in no particular order:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://pryrepl.org/&quot; target=&quot;_blank&quot;&gt;Pry&lt;/a&gt; is a powerful alternative to the standard IRB shell for Ruby. &amp;nbsp;I learned about it at CodeSchool, on one of the Code-TV &lt;a href=&quot;http://www.codeschool.com/code_tv/pry&quot; target=&quot;_blank&quot;&gt;videos&lt;/a&gt;. &amp;nbsp;Pry provides source code and documentation browsing, the ability to live edit defined methods, syntax highlighting, command shell integration and other things of goodness.&lt;br /&gt;
&lt;br /&gt;
Also recommended is the CodeSchool Code-TV episode on &lt;a href=&quot;http://www.codeschool.com/code_tv/guard-and-spork&quot; target=&quot;_blank&quot;&gt;Guard and Spork&lt;/a&gt;, which look like a great 1-2 punch for driving TDD. &lt;br /&gt;
&lt;br /&gt;
From a recent Ruby MeetUp at the &lt;a href=&quot;http://www.punchbowl.com/&quot; target=&quot;_blank&quot;&gt;Punchbowl &lt;/a&gt;&amp;nbsp;place in Framingham (thanks for the hospitality, pizza and beer!), I picked up these two tidbits:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://rubyfiddle.com/&quot; target=&quot;_blank&quot;&gt;RubyFiddle&lt;/a&gt; is a website that lets you try out Ruby code in the browser and save snippets as gists. &amp;nbsp;It lines up nicely with my personal philosophy that to be a great ROR engineer, one needs to be a great Ruby engineer. RubyFiddle has easily selectable key bindings for none, vim or emacs, which I find rather considerate and helpful.&lt;br /&gt;
&lt;br /&gt;
I also learned about the &lt;a href=&quot;http://en.wikipedia.org/wiki/Null_Object_pattern&quot; target=&quot;_blank&quot;&gt;Null Object Pattern&lt;/a&gt;, which has some compelling features and deserves to be in the toolbox of the enlightened engineer.</description><link>http://degenportnoy.blogspot.com/2012/08/ruby-rails-tools-pry-guard-spork.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-3945167832389647726</guid><pubDate>Sun, 15 Jul 2012 10:39:00 +0000</pubDate><atom:updated>2012-07-15T06:39:30.348-04:00</atom:updated><title>Emre Sokullu Advice on Getting New Product Started</title><description>Along the lines of &quot;&lt;a href=&quot;http://gettingreal.37signals.com/&quot;&gt;Getting Real&lt;/a&gt;&quot;, this is an excellent set of advice for getting a new product started: &quot;&lt;a href=&quot;http://techcrunch.com/2012/07/13/how-to-create-a-minimum-viable-product&quot;&gt;How to Create &amp;nbsp;Minimally Viable Product&lt;/a&gt;&quot;, by Emre Sokullu, founder and chief architect of &lt;a href=&quot;http://grou.ps/&quot;&gt;Grou.ps&lt;/a&gt;.</description><link>http://degenportnoy.blogspot.com/2012/07/emre-sokullu-advice-on-getting-new.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-2322878779154998410</guid><pubDate>Sun, 20 May 2012 13:16:00 +0000</pubDate><atom:updated>2012-05-20T09:32:31.888-04:00</atom:updated><title>What can you do to help?</title><description>This is one if the most difficult things that I have to write. Nothing to do with technology, software, process or products. Far, far more important. This is about a 13 year old girl who is in danger and being abandoned and endangered by the very systems that are in place to help her. &lt;br /&gt;
&lt;br /&gt;
Everything here is my understanding  and opinion. The facts come from the girls aunt, a friend of mine. I&#39;ve not yet met this girl, but I know my friend and her family. I trust my friend and have confidence in the accuracy of the details she has shared. I am going to share them here, with the blessings and support of my friend and her sister, the girls mom. &lt;br /&gt;
&lt;br /&gt;
I will refer to the girl as &quot;B&quot;. Her mom is &quot;D&quot; and my friend is &quot;P&quot;. B is 13. Her folks divorced almost a decade ago. Her dad, &quot;S&quot;, has remarried. B has an older brother. I am told that B is popular in school, maintains good grades, is a very attractive girl, and is a cheerleader. B is required by the divorce documents to split her time 50/50 with her mom and dad. &lt;br /&gt;
&lt;br /&gt;
She has stated that she does not want to spend any time with her father. All indications from this perspective is that B is regularly abused by her father, S. this abuse is most definitely psychological and physical. It may also be sexual. &lt;br /&gt;
&lt;br /&gt;
The family lives in Florida. S&#39;s new wife is significantly more wealthy than D. S&#39;s new wife has even told B that she has given over $100K to S in legal help to fight D. The upshot is that D has been lambasted and pummeled in court. I don&#39;t have the highest degree of confidence in D&#39;s legal counsel, though P has said he&#39;s considered the best in the area, whatever that means. In any case, although B complains that she has her period every day that she is with S, although B had been whipped with a leather belt that left a wicked mark for over a day, although the school refuses unsupervised access to S, although B states that S and his wife confiscate her cell phone whenever she is with them and they scream at her all the time and restrict her contact with friends and mom and  impose severe, punitive punishments for minor infractions, no one seems to be able to protect B and keep her away from S. &lt;br /&gt;
&lt;br /&gt;
It seems that Judge H, who has been involved in this case for a while did a complete 180 not too long ago. He had issued orders that prevented S from having any contact with B. It seems that based upon a highly irregular psychological report, Judge H reversed himself and gave S full control over B 50% of the time. &lt;br /&gt;
&lt;br /&gt;
And B is suffering. Inexplicably, neither the Department of Protective Services nor a crisis center were effective in protecting B when she came to school branded with the huge welt from S&#39;s belt and buckle. B is in danger. She needs help. She needs someone or some group to dig into the specifics of her case. She needs to be kept away from S. </description><link>http://degenportnoy.blogspot.com/2012/05/what-can-you-do-to-help.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-1762237932871093099</guid><pubDate>Tue, 08 May 2012 21:07:00 +0000</pubDate><atom:updated>2012-05-08T17:07:10.053-04:00</atom:updated><title>Mantra for Outstanding Products</title><description>We demand excellence of ourselves and look for it in our colleagues because we know that outstanding results require outstanding people making outstanding efforts.</description><link>http://degenportnoy.blogspot.com/2012/05/mantra-for-outstanding-products.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-795868866148756527</guid><pubDate>Wed, 04 Jan 2012 13:33:00 +0000</pubDate><atom:updated>2012-01-04T08:33:02.067-05:00</atom:updated><title>Nice Step Forward for VirtualBox</title><description>I just downloaded version 4.1.8 of Oracles VirtualBox Manager and was delighted to see that it offered to download the extension pack and install it for me.&amp;nbsp; That was always a bothersome additional step that needed to be done and bringing that into VirtualBox improves the usability of the product.&amp;nbsp; Also, this encourages me to stay more current with updates, since the update process involves &quot;manually&quot; downloading and installing one file instead of two.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Nice improvement and an &quot;Attaboy&quot; to the VirtualBox developers!</description><link>http://degenportnoy.blogspot.com/2012/01/nice-step-forward-for-virtualbox.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19901248.post-1063709028270146331</guid><pubDate>Tue, 13 Dec 2011 16:14:00 +0000</pubDate><atom:updated>2011-12-13T11:14:44.445-05:00</atom:updated><title>Predicting Corporate Failure</title><description>Bob Lewis of IT Catalysts has a compelling essay in which he predicts the failure of a company, &lt;a href=&quot;http://www.weblog.keepthejointrunning.com/?p=4465&quot;&gt;Business failure in progress&lt;/a&gt;.&amp;nbsp; Worth a read.</description><link>http://degenportnoy.blogspot.com/2011/12/predicting-corporate-failure.html</link><author>noreply@blogger.com (Peter Degen-Portnoy)</author><thr:total>0</thr:total></item></channel></rss>