<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:igmus.org,2005:/feed</id>
  <link rel="alternate" type="text/html" href="http://igmus.org"/>
  <link rel="self" type="application/atom+xml" href="http://igmus.org/feed.atom"/>
  <title>Jeremy Wohl's weblog</title>
  <updated>2011-03-20T19:31:39-07:00</updated>
  <entry>
    <id>tag:igmus.org,2005:Post/5</id>
    <published>2011-03-20T18:13:26-07:00</published>
    <updated>2011-03-20T19:31:39-07:00</updated>
    <link rel="alternate" type="text/html" href="http://igmus.org/2011/03/haproxy-mysql-check-script"/>
    <title>HAProxy MySQL check script</title>
    <id>http://igmus.org/2011/03/haproxy-mysql-check-script</id>
    <author>Jeremy</author>
    <content type="html">&lt;p&gt;I've written an updated, Python version of Alex Williams' &lt;i&gt;mysqlchk_replication.sh&lt;/i&gt;, mentioned in his fine post on &lt;a href=&quot;http://alexwilliams.ca/blog/2009/08/10/using-haproxy-for-mysql-failover-and-redundancy/index.html&quot;&gt;HAProxy&lt;-&gt;MySQL failover and redundancy&lt;/a&gt;.    He doesn't actually include said script, but I've implemented the slave status bits along with support for those using mysql_multi.&lt;/p&gt;

&lt;p&gt;It does the following:&lt;/p&gt;

&lt;ul class=&quot;bullets&quot;&gt;
&lt;li class=&quot;bullets&quot;&gt;Reads your my.cnf to extract the relevant UNIX socket for each local daemon's external port, whether a single mysqld or mysql_multi.&lt;/li&gt;
&lt;li class=&quot;bullets&quot;&gt;Verifies that masters connect and execute &quot;show slave status&quot;, returning zero rows.&lt;/li&gt;
&lt;li class=&quot;bullets&quot;&gt;Further verifies slaves by checking Slave_IO_Running == 'Yes', Slave_SQL_Running == 'Yes' and Seconds_Behind_Master &lt; a_parameterized_value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The script is a self-contained web server and won't require inetd or tcpserver, etc.  Change the pertinent variables at the top and start it running on each of your servers, best under a supervisor.&lt;/p&gt;

&lt;pre&gt;
PORT = 9200
CONF = '/etc/my.cnf'

USER = 'root'
PASS = 'myrootpass'&lt;/pre&gt;

&lt;p&gt;In your HAProxy config, for each relevant block (listen or backend) include httpchk instructions to point to a specific service port and define maximum allowable slave latency.  (It's helpful to define the check port [9200, above] in your defaults, somewhere.)&lt;/p&gt;

&lt;pre&gt;
option httpchk GET /check?port=3310&amp;max_seconds_behind=5&lt;/pre&gt;

&lt;p&gt;Find it at &lt;a href=&quot;https://github.com/jeremywohl/ha-tools&quot;&gt;https://github.com/jeremywohl/ha-tools&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>tag:igmus.org,2005:Post/4</id>
    <published>2009-10-28T14:26:13-07:00</published>
    <updated>2009-10-28T19:50:26-07:00</updated>
    <link rel="alternate" type="text/html" href="http://igmus.org/2009/10/our-stalled-phone-innovation"/>
    <title>Our Stalled Phone Innovation</title>
    <id>http://igmus.org/2009/10/our-stalled-phone-innovation</id>
    <author>Jeremy</author>
    <content type="html">&lt;p&gt;Where's progress on the &lt;em&gt;phone&lt;/em&gt; part of the phone?&lt;/p&gt;

&lt;p&gt;When the iPhone got deposited here from the future and came with visual voicemail I thought hot damn, Steve Jobs has finally broken the logjam of voice innovation, and here's a little tease.  We'd been tantalized for years by glimpses of alternate phone companies in the guises of Skype, various VoIP outfits, and eventually Google Voice.  Can Apple get the behemoths to invent?&lt;/p&gt;

&lt;p&gt;So I waited anxiously for updates in the iPhone's &quot;Phone&quot; app.  And then ... silence through another two years and two major releases.  Here's some contact search for ya.  Hey, now we'll tell you how long your calls were!&lt;/p&gt;

&lt;p&gt;Mobile networks are digital.  They have roughly the same opportunities for layering hot new features as does any VoIP offering.  I'd pay for most of the following ideas.  My phone-use heavy friends (aka biz/dev, sales) would be jumping and salivating.&lt;/p&gt;

&lt;ul class=&quot;bullets&quot;&gt;
&lt;li class=&quot;bullets&quot;&gt;Let me add global numbers to my phone.  They all work the same, but I get local digits in SF and NYC, for instance.  When I visit London, I grab a +42 for a month.&lt;/li&gt;

&lt;li class=&quot;bullets&quot;&gt;Give me an infinite voicemail box (can you believe we still have limits in our voicemail?) and the features that are now VoIP ubiquitous: visible on the web, portable digital files, email forwarding, transcriptions and pitch-neutral fast-play&lt;/li&gt;

&lt;li class=&quot;bullets&quot;&gt;Add a digital fax to my cell account.  Alerts and viewing when I receive.  Integrate with software: any emails or documents can be faxed outbound.&lt;/li&gt;

&lt;li class=&quot;bullets&quot;&gt;Get rid of 3-way calling.  Let me grow ad-hoc conferences to any size.  That don't die when I hangup.  Options to archive (and transcribe) on the web.&lt;/li&gt;

&lt;li class=&quot;bullets&quot;&gt;Ala Google Voice: screen calls with a prompt and move calls to other phones.&lt;/li&gt;
&lt;/ul&gt;

Advanced:

&lt;ul class=&quot;bullets&quot;&gt;
&lt;li class=&quot;bullets&quot;&gt;When I'm on hold, filter the music and alert me when a human speaks.&lt;/li&gt;

&lt;li class=&quot;bullets&quot;&gt;Build a visual map of phone menu trees as I hear them.  Touch to jump around, the phone doing all the boop-bip legwork.&lt;/li&gt;

&lt;li class=&quot;bullets&quot;&gt;End-to-end encryption.  (You know, I only want the government listening to my over-the-air calls.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So now you have the command center of a small businesses.  Or your sales team.&lt;/p&gt;

&lt;p&gt;Except for the advanced items, this is all marginal cost and tech.  And yet high value.  People would pay.&lt;/p&gt;

&lt;p&gt;Now I'm sure Apple and Google are waiting for the deep mobile network neutrality that lets them build their own VoIP-based kingdoms on top.  All data, no &quot;voice&quot; as we know it.  But this is years away.&lt;/p&gt;

&lt;p&gt;I know, let's innovate on pricing plans!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:igmus.org,2005:Post/3</id>
    <published>2009-03-13T06:57:45-07:00</published>
    <updated>2009-03-13T12:30:41-07:00</updated>
    <link rel="alternate" type="text/html" href="http://igmus.org/2009/03/kindle-for-iphone-experience"/>
    <title>Kindle for iPhone experience</title>
    <id>http://igmus.org/2009/03/kindle-for-iphone-experience</id>
    <author>Jeremy</author>
    <content type="html">&lt;p&gt;I've only had it for a week, but already I'm enthralled.  I had given up reading ebooks on the iPhone as impossible and now I realize my mistake was confusing the unviability of out-of-copyright &quot;classic&quot; content for its rendered form.  Trying to (finally) get through Moby Dick was a no-go, and would always have been.  Not having the energy (or moral inclination -- funny it's not the same with movies/music) to pirate more interesting commercial books, I gave up (despite the excellent &lt;a href=&quot;http://www.lexcycle.com/&quot;&gt;Stanza app&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;But my McCarthy, McEwan, Amis, Posner and Hass bought and paid for?  Sweet mercy!&lt;/p&gt;

&lt;p&gt;Grievances are the same Jakob Neilsen &lt;a href=&quot;http://www.useit.com/alertbox/kindle-usability-review.html&quot;&gt;has highlighted&lt;/a&gt;:&lt;/p&gt;
&lt;ul class=&quot;bullets&quot;&gt;
&lt;li class=&quot;bullets&quot;&gt;Lack of a dictionary --- an iPhone lack of course, simultaneous apps would solve the problem&lt;/li&gt;
&lt;li class=&quot;bullets&quot;&gt;Publisher-enforced text justification -- where it's turned on, tight columns makes for ridiculous and disorienting word gaps&lt;/li&gt;
&lt;li class=&quot;bullets&quot;&gt;Flick to turn pages gets boring -- tapping in Stanza's vertical touch zones is the answer&lt;/li&gt;
&lt;li class=&quot;bullets&quot;&gt;Missing hierarchical organization or search -- and this seems to be so on the Kindle itself, how is this possible?!&lt;/li&gt;
&lt;li class=&quot;bullets&quot;&gt;No way to annotate/clip beyond roughly-placed bookmarks, unlike the Kindle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A surprise is the notorious eyestrain of monitor backlights doesn't seem to occur in the mode of tiny screens glowing; hours of iPhone reading remain comfortable.&lt;/p&gt;

&lt;p&gt;An aside: my father, his eyes long failing, is again able to read long-form on the Kindle with its high contrast and bigger font sizes.  Hurrah!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:igmus.org,2005:Post/2</id>
    <published>2008-09-29T08:31:33-07:00</published>
    <updated>2008-09-30T11:37:29-07:00</updated>
    <link rel="alternate" type="text/html" href="http://igmus.org/2008/09/no-more-release-bumps"/>
    <title>No More Release Bumps</title>
    <id>http://igmus.org/2008/09/no-more-release-bumps</id>
    <author>Jeremy</author>
    <content type="html">&lt;p&gt;Perhaps just as pertinent a change as making &lt;a href=&quot;http://mattgemmell.com/2008/09/27/apple-is-listening&quot;&gt;app reviewers purchase the app in question&lt;/a&gt; is iTunes dropping the All Applications view.  The one that let folks watch the stream of new and updated apps, having sorted by Release Date.  The one that gave developers a little release boost and let them, by updating weekly, ride a growing wave of users.&lt;/p&gt;

&lt;p&gt;Such a feature doesn't scale @ 100 apps/day, soon 10K apps in the store (just 20 weeks!).  I think this is a signal to developers that any future kiting-style organic growth is unlikely but for select apps handed to fame via the top/picks/favorites lists.  That traditional marketing is the once and future fallback.  You have to build a community &lt;em&gt;out there&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;UPDATE: Release Date in categories will speak to the &lt;em&gt;original&lt;/em&gt; release, not updates.  So no bumps whatsoever, but for new apps.  AppleInsider &lt;a href=&quot;http://www.appleinsider.com/articles/08/09/29/apple_updates_app_store_to_address_developer_misuse.html&quot;&gt;has more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;UPDATE 2: Grumpy developers assume this will shift emphasis to rapid and vapid apps (moreso than now?), moving away from any &lt;a href=&quot;http://www.techcrunch.com/2008/09/29/at-last-you-can-create-spreadsheets-on-your-iphone/&quot;&gt;desire for maturation&lt;/a&gt;.  It will be fun to see if multiple economies from efficient community builders to bottom feeders remain vibrant in the store.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:igmus.org,2005:Post/1</id>
    <published>2008-09-23T00:11:15-07:00</published>
    <updated>2008-10-01T03:13:50-07:00</updated>
    <link rel="alternate" type="text/html" href="http://igmus.org/2008/09/fetching-app-store-reviews"/>
    <title>Fetching App Store reviews</title>
    <id>http://igmus.org/2008/09/fetching-app-store-reviews</id>
    <author>Jeremy</author>
    <content type="html">&lt;p&gt;I've extended Erica Sadun's global &lt;a href=&quot;http://blogs.oreilly.com/iphone/2008/08/scraping-appstore-reviews.html&quot;&gt;App Store review scraper&lt;/a&gt; with some Hpricot hackery to elicit review rating, author, subject and body.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;http://github.com/jeremywohl/iphone-scripts/tree/master&quot;&gt;github/iphone-scripts&lt;/a&gt; for this Ruby code with a simple command-line presentation.&lt;/p&gt;

&lt;p&gt;iTunes uses purely layout-based XML without semantic meaning to display screens, so there's little to marry the content to review structure.  The embedded CSS paths are therefore quite brittle -- expect updates to the script.&lt;/p&gt;

&lt;p&gt;Back to idiot-proofing &lt;a href=&quot;http://www.seethoughtdone.com/domainscout&quot;&gt;my app&lt;/a&gt; against the joyous 1-star imps. :)&lt;/p&gt;

&lt;p&gt;UPDATE: John Ballinger has incorporated this script into a &lt;a href=&quot;http://bluespark.tumblr.com/post/51328643/appstorereview-dashboard-widget-gets-all-your&quot;&gt;Dashboard widget&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;UPDATE: I added translation, courtesy of Google Translate.&lt;/p&gt;</content>
  </entry>
</feed>
