<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Greg Fiumara</title>
	<atom:link href="http://blog.gregfiumara.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.gregfiumara.com</link>
	<description>Ramblings about life, technology, and the real world</description>
	<lastBuildDate>Sat, 29 Oct 2011 02:41:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Disappearing UILabel under iOS 4.3 (fine in iOS 5)</title>
		<link>http://blog.gregfiumara.com/archives/184</link>
		<comments>http://blog.gregfiumara.com/archives/184#comments</comments>
		<pubDate>Sun, 23 Oct 2011 17:24:17 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ios4]]></category>
		<category><![CDATA[ios5]]></category>
		<category><![CDATA[xcode]]></category>
		<category><![CDATA[xcode 4.2]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=184</guid>
		<description><![CDATA[I noticed some UILabels in my iOS projects would disappear when run under iOS 4.3 after I upgraded to the Xcode 4.2 final revision with the GM iOS 5 SDK. I noticed that all the labels that were missing were in italics. Then I saw the reason out of the corner of my eye. Somehow in [...]]]></description>
			<content:encoded><![CDATA[<p>I noticed some <code>UILabel</code>s in my iOS projects would disappear when run under iOS 4.3 after I upgraded to the Xcode 4.2 final revision with the GM iOS 5 SDK.  I noticed that all the labels that were missing were in italics.  Then I saw the reason out of the corner of my eye.  Somehow in the Xcode 4.1 to 4.2 project conversion, the font properties on my labels were changed from System.  Changing them back to &#8220;System&#8221; (or specifying the Helvetica family) fixes the invisible label.  Note that in this case, iOS 5.0 <em>did</em> add &#8220;Helvetica Light Oblique&#8221; as a font choice.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="disappearing_uilabel.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/10/disappearing_uilabel.png" border="0" alt="Disappearing UILabel" width="579" height="189" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/184/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Reasons to Leave Sprint (and Android)</title>
		<link>http://blog.gregfiumara.com/archives/179</link>
		<comments>http://blog.gregfiumara.com/archives/179#comments</comments>
		<pubDate>Tue, 11 Oct 2011 23:26:25 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[customer service]]></category>
		<category><![CDATA[epic 4g]]></category>
		<category><![CDATA[galaxy s]]></category>
		<category><![CDATA[samsung]]></category>
		<category><![CDATA[sprint]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=179</guid>
		<description><![CDATA[Android phone battery lifetimes suck, but you knew that already.  A few weeks ago, I was visiting the heart of downtown Tampa, FL.  I stayed in a beautiful hotel across from the Convention Center, and had no Sprint coverage.  &#8221;But Greg,&#8221; you say, &#8220;one of Sprint&#8217;s first WiMAX 4G towers is there!  Their coverage map [...]]]></description>
			<content:encoded><![CDATA[<p>Android phone battery lifetimes suck, but you knew that already.  A few weeks ago, I was visiting the <a href="http://maps.google.com/maps?q=South+Florida+Avenue,+Tampa,+FL&amp;hl=en&amp;ll=27.943384,-82.455096&amp;spn=0.011734,0.015793&amp;sll=27.943498,-82.455096&amp;sspn=0.011734,0.015793&amp;vpsrc=0&amp;hnear=S+Florida+Ave,+Tampa,+Florida+33602&amp;t=h&amp;z=16">heart of downtown Tampa, FL</a>.  I stayed in a beautiful hotel across from the Convention Center, and had no Sprint coverage.  &#8221;But Greg,&#8221; you say, &#8220;one of <a href="http://newsroom.sprint.com/article_display.cfm?article_id=1706">Sprint&#8217;s first WiMAX 4G</a> towers is there!  Their <a href="http://coverage.sprint.com/">coverage map</a> shows &#8216;in-building 4G&#8217; coverage!&#8221;  Yes, my Internet friend, I do see that, but alas, I also saw the prohibitory icon on my phone, the <a href="http://www.samsung.com/us/mobile/cell-phones/SPH-D700ZKASPR">Samsung Galaxy S Epic 4G</a>, for an entire week.</p>
<p><span id="more-179"></span>
<p>The point of my trip was to addend a conference held inside the beautiful Tampa Convention Center.  By the end of the first day, the combination of roaming and no service had proven itself fatal to my battery.  I didn&#8217;t see a Sprint signal all day.  By the conclusion of Day One at 5 PM, my phone wouldn&#8217;t turn on.  Makes it kind of hard to talk to your coworkers and arrange to find dinner in a foreign town.  Thankfully I ran into a coworker with AT&amp;T service who was able to help me out getting in touch with others.</p>
<p>On Day Two, I wised up.  I placed the phone in airplane mode at all times when I would normally put it on silent&#8230;a good 80-90% of the time between 8 AM and 5 PM of the conference day while in sessions.  I know that one of the biggest losses of battery power is the search of the Sprint signal when roaming.  As I found out, <strong>a</strong><strong>irplane mode </strong><strong>didn&#8217;t make a difference</strong>.  Without me even activating the display almost the entire day, the phone had completely drained its battery.  Again, I had to link up with AT&amp;T and Verizon friends to find places for dinner.</p>
<p>To answer your question, no I don&#8217;t have excessive background apps running at any given time.  In fact, despite being a techie, I&#8217;m very app-stingy.  I don&#8217;t need an app to do everything.  A browser, e-mail, SMS, and occasionally navigation are all I typically use in a day, and they&#8217;re all built in.  Sure, I have one or two convenience apps installed, but none that should be eating battery in the background constantly.</p>
<p>Completely fed up at this point, on Day Three I brought my charger with me to the conference.  I had to sit next to the wall for every presentation to keep the phone plugged in.  I suppose it didn&#8217;t matter, because I didn&#8217;t have service anyway to receive calls or texts, but boy could I use that Memo app!  Ridiculous.</p>
<p>Shortly after I returned home, I e-mailed Sprint to let them know about my experience.  Surely they&#8217;d want to know.  They&#8217;re the <strong>only</strong> cell provider I&#8217;ve <em>ever</em> had.  I enjoy their pricing and (previously) their service.</p>
<p>This morning I got a call from the &#8220;displeased customer&#8221; department of Sprint and spoke to William (who evidently gave me a special customer support number where you never wait on hold).  I explained my situation to him in greater depth.  He was very understanding and patient.  William brought up the service maps for my hotel in Tampa and my home address, and assured me that the Sprint network was very powerful in both areas, so my phone must be a lemon.  He opened a case and asked me to please bring my phone to my nearest Sprint store for a diagnosis.  &#8221;If there&#8217;s nothing wrong with the phone,&#8221; he says, &#8220;just give me a call back and we&#8217;ll go from there to see what we can do for you.  Thanks for choosing Sprint.&#8221;  He even sent me an e-mail to make sure I had written down his phone number and extension.  I was impressed.</p>
<p>That&#8217;s where the positive customer service experience stopped.  I made an appointment during my lunch break and explained the situation in the appointment details.  Upon arrival at the store, I announced to the employee that greeted me that I had an appointment.  <strong>Without any further consultation</strong>, or even <strong>asking my name</strong> to review my appointment details,<strong> </strong>I was ushered back and given a form asking me to:</p>
<ul>
<li>Authorize a factory reset of my phone</li>
<li>Reveal any passwords that lock my phone</li>
<li>Authorize Sprint to store a local archive of the contents of my phone</li>
</ul>
<p>Needless to say, I refused to sign.  First of all, I&#8217;m there for a diagnosis, which certainly wouldnt require a factory reset.  They should be guiding me to <em>disable</em> any passwords, not reveal them to me.  And I <strong>certainly</strong> do not want some person haphazardly copying my personal data, including the names, pictures, and phone numbers of my friends, onto a questionable local Sprint server.  Does Sprint not realize the amount of people&#8217;s lives that are on a phone?  Sure, I understand that you need to access my phone to work on my device, but a huge number of people use <em style="font-weight: bold;">one password for everything</em>, so disabling the password and logging out of apps like Facebook and Twitter should be <strong>standard operating procedure</strong> before <strong>every</strong> cell phone service appointment.</p>
<p>Unfortunately, the Sprint representative at the store refused to look up my Sprint eCare number in the store so I had to replay my entire scenario to him (he was born and raised in Florida, so this provided some friendly banter).  He understood that I didn&#8217;t want a hard reset, so I could just pay my $35 and come back in 3 hours to pick up&#8230;</p>
<p>What?  $35?  What for?  &#8221;Oh, that&#8217;s the standard repair fee,&#8221; he said.  &#8221;Well, I&#8217;m not here for repair, I&#8217;m here for a diagnosis.  Besides, Sprint asked me to come here for you to run it.  If you&#8217;d just look at my eCare number&#8230;&#8221;  &#8221;I mean, we always charge a repair fee.&#8221;  &#8221;But this isn&#8217;t a repair&#8230;&#8221;</p>
<p>No matter how many times I said, <em>I&#8217;m not here for a </em><strong style="font-style: italic;">repair</strong><em>, I&#8217;m here for a </em><strong style="font-style: italic;">Sprint-Authorized Diagnosis</strong>, I was met with the same $35 <strong>repair fee </strong>comment (&#8220;we&#8217;ll figure out what&#8217;s wrong and that $35 covers the repair&#8221;).  Naturally, I asked for the manager, who wouldn&#8217;t budge, or even have the courtesy to look up the Sprint eCare number.  If there&#8217;s nothing wrong with the phone that they can diagnosis, then I would have paid $35 for the privilege of calling William back and saying, &#8220;okay, now what?&#8221;  &#8221;Well, we don&#8217;t have to take your credit card, we can just add it to your monthly statement&#8230;&#8221;</p>
<p>I left and immediately called back my buddy William, though one of his co-workers answered.  &#8221;I&#8217;m sorry William didn&#8217;t tell you, but we always charge a $35 fee.&#8221;  He tells me that this fee covers any repair costs, or a replacement if they cannot fix the phone.  &#8230;but we&#8217;re trying to troubleshoot a signal availability and/or battery life issue.  The phone itself is not malfunctioning in any way right now.  You should just be measuring the ability for the antenna to pick up a signal, verify that PRLs are getting installed correctly, etc.  That can&#8217;t take more than a few minutes.</p>
<p>The new agent also stated that if I still had problems once they &#8220;fix&#8221; my phone for $35 that I&#8217;d have to pay an additional $35 every time I go back to the store for additional &#8220;service.&#8221;  Their &#8220;service&#8221; is not warranted.  &#8221;&#8230;not unless you upgrade to our Total Equipment Protection Plan.  I can sell that to you for&#8230;.&#8221;  <strong>No</strong>.  &#8221;Well, if you want to go ahead and add another line to your plan, you can add the Protection Plan&#8230;&#8221;</p>
<p>Why would I want to <strong>buy another phone line</strong> with you when <strong>the first one</strong> you sold me <strong>does not work</strong>?  He apologized and let me know that, &#8220;if you ever have signal coverage problems again, call while you&#8217;re having the problem so we can try to diagnose over the phone.&#8221;  I explained to him that if I find myself not having signal, that <em>because</em> I don&#8217;t have signal, I will be unable to call.  &#8221;Oh.  Yeah.&#8221;  Indeed, Sprint. Indeed.</p>
<p>So, I find myself even more furious with Sprint and receiving no compensation for the week without service (at least $20 with my &#8220;everything&#8221; plan), or the waste of a few hours of the work day talking with them and going to their store to be harassed.</p>
<p>In recent weeks, Sprint has <a href="http://premier.sprint.com/premierupdate/?id12=vanity:premier">removed their Sprint Premier program</a> (of which I was a member) and announced that they will be <a href="http://www.wired.com/gadgetlab/2011/10/sprint-lte-rollout-2013/">switching from WiMAX to LTE</a> 4G connectivity.  I currently pay and extra $10/month for &#8220;premium data&#8221; (aka WiMAX 4G &#8212; not that my hometown has coverage).  This recent announcement, while I support since the rest of the world is LTE, renders my phone <em style="font-weight: bold;">useless</em> by 2013 when they repurpose the WiMAX towers for LTE.  The Epic 4G has made it to the <a href="http://www.sprintfeed.com/2011/07/sprints-upcoming-end-of-line-life-listing/">Sprint EOL list</a>, in favor of the Samsung Galaxy S II Epic 4G Touch (note to Samsung, get a new PR department), <strong><em>less than one year</em></strong> after its release.  I should know, I activated my phone on <strong>launch day</strong>.  The phone is stuck on Android 2.2, which was released well before the Epic even shipped with 2.1, with no hope for any updates now.  Recent updates of Google-branded apps, like Google+, have features that will only work on Android 2.3.</p>
<p>Where does that leave me?  I&#8217;m stuck with a battery-hogging, obsolete smartphone that I must replace before 2013, questionable coverage (whether this is Sprint&#8217;s or Samsungs fault, we won&#8217;t know), and an open eCare ticket (20111007211058034, KMM91601233V65506L0KM).<span style="font-size: 12px;"> </span></p>
<p>Don&#8217;t worry Sprint, it will be closed soon, just as soon as I send you my ETF.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/179/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GPFRemoteAlert</title>
		<link>http://blog.gregfiumara.com/archives/173</link>
		<comments>http://blog.gregfiumara.com/archives/173#comments</comments>
		<pubDate>Sat, 28 May 2011 20:23:40 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[notification]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[UIAlertView]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=173</guid>
		<description><![CDATA[A lot of people have been sending me e-mail about the solution to a problem that was not very well documented to DAS Calc.  Sending the same stock reply to these people helps them out, but that&#8217;s only for the people who have spent the time to send a support request.  The rest are probably [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of people have been sending me e-mail about the solution to a problem that was not very well documented to <a href="http://das.gregfiumara.com/">DAS Calc</a>.  Sending the same stock reply to these people helps them out, but that&#8217;s only for the people who have spent the time to send a support request.  The rest are probably frustrated that they can&#8217;t solve the problem and either don&#8217;t purchase or regret their purchase of the full version of the app.  If I could somehow notify the users of the solution as an alert in the app, everyone&#8217;s happy and I stop getting e-mails.  This isn&#8217;t a unique solution, but I&#8217;ve wrapped it up for you to use.  I call it Remote Alert, and you can <a href="https://github.com/gfiumara/GPFRemoteAlert">find the code on GitHub</a>.</p>
<p><span id="more-173"></span>
<p>It&#8217;s pretty simple to use.  Import <code>GPFRemoteAlert.[hm]</code> into your project and replace the server address in <code>kGPFRemoteAlertServer</code> with your own address.  Have your <code>AppDelegate</code> download alerts at launch (<code>application:didFinishLaunchingWithOptions:)</code>.  When you ship your app, put <code>[[GPFRemoteAlert sharedRemoteAlert] displayAlertsForModule:@"UNIQUE_ID"];</code> in spots where you may want to have an alert in the future.  I&#8217;d suggest one per <code>UIView</code> in <code>viewDidLoad</code>.  If you ever want to display an alert, just add it to the XML file on your server and all your users will see it, without shipping an update to the AppStore.</p>
<p>I still need to add some more features, like only showing the alert once and limiting based on the device hardware, but it&#8217;s still very functional as-is.  Right now, you can only limit based on version number of your app.  I hope this helps someone else!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/173/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s The Little Things&#8230; (Part 2)</title>
		<link>http://blog.gregfiumara.com/archives/159</link>
		<comments>http://blog.gregfiumara.com/archives/159#comments</comments>
		<pubDate>Wed, 04 May 2011 00:32:41 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[epic 4g]]></category>
		<category><![CDATA[galaxy s]]></category>
		<category><![CDATA[samsung]]></category>
		<category><![CDATA[sprint]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=159</guid>
		<description><![CDATA[At first, I thought to myself that this must be some isolated display glitch, but I didn&#8217;t have time to restart the phone.  Today I did.  Several times.  No difference.  Then I thought, let&#8217;s ask the Internet if anyone else has seen this.  Looks like people have.  Again, Samsung, it&#8217;s the little things&#8230;]]></description>
			<content:encoded><![CDATA[<p>At first, I thought to myself that this must be some isolated display glitch, but I didn&#8217;t have time to restart the phone.  Today I did.  Several times.  No difference.  Then I thought, let&#8217;s ask the Internet if anyone else has seen this.  <a href="http://androidforums.com/epic-4g-support-troubleshooting/327681-lock-screen-quirk.html">Looks</a> <a href="http://www.samsungepicforum.com/samsung-epic4-how-to/date-cut-off-on-lock-screen/">like</a> people have.  Again, Samsung, it&#8217;s the little things&#8230;</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="lockscreen_date.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/05/lockscreen_date6.png" alt="Cutoff Date of Lockscreen on Epic 4G" width="480" height="208" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/159/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s The Little Things&#8230;</title>
		<link>http://blog.gregfiumara.com/archives/155</link>
		<comments>http://blog.gregfiumara.com/archives/155#comments</comments>
		<pubDate>Thu, 21 Apr 2011 01:29:11 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[epic 4g]]></category>
		<category><![CDATA[galaxy s]]></category>
		<category><![CDATA[samsung]]></category>
		<category><![CDATA[sprint]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=155</guid>
		<description><![CDATA[Despite changing language settings, the spelling has been wrong for &#8220;Favorites&#8221; in every single update for my Samsung Epic 4G from Sprint in the Phone app.  It&#8217;s the little things, guys!]]></description>
			<content:encoded><![CDATA[<p>Despite changing language settings, the spelling has been wrong for &#8220;Favorites&#8221; in <strong>every</strong> <strong><em>single</em></strong> update for my Samsung Epic 4G from Sprint in the Phone app.  It&#8217;s the little things, guys!</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="epic_favourites.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/04/epic_favourites.png"  alt="Epic Typo" width="480" height="294" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/155/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disable Twitterrific 4&#8242;s Blue Menubar Icon</title>
		<link>http://blog.gregfiumara.com/archives/147</link>
		<comments>http://blog.gregfiumara.com/archives/147#comments</comments>
		<pubDate>Sat, 12 Mar 2011 00:19:17 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[icon]]></category>
		<category><![CDATA[indie]]></category>
		<category><![CDATA[menubar]]></category>
		<category><![CDATA[third-party]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitterrific]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=147</guid>
		<description><![CDATA[Since Twitter doesn&#8217;t seem to appreciate third-party developers anymore, I&#8217;ve decided to switch from the official Twitter app to The Iconfactory&#8217;s Twitterrific.  I really like it, but I absolutely can&#8217;t stand how the menubar icon turns from black to blue with every new tweet.  I constantly see it change out of the corner of my [...]]]></description>
			<content:encoded><![CDATA[<p>Since Twitter <a href="http://groups.google.com/group/twitter-api-announce/browse_thread/thread/c82cd59c7a87216a?hl=en&amp;pli=1">doesn&#8217;t seem to appreciate third-party developers</a> anymore, I&#8217;ve decided to switch from the official Twitter app to The Iconfactory&#8217;s <a href="http://twitterrific.com">Twitterrific</a>.  I really like it, but I absolutely can&#8217;t stand how the menubar icon turns from black to blue with every new tweet.  I constantly see it change out of the corner of my eye and subconsciously move the mouse to click the icon.  I&#8217;m <strong>not</strong> a fan of this incessant interruption.  Here&#8217;s a hack to disable it.</p>
<p><span id="more-147"></span>
<p>Quit Twitterrific, then paste these commands into Terminal (making a backup of the app first, especially if you purchased it via the Mac App Store):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>Twitterrific.app<span style="color: #000000; font-weight: bold;">/</span>Contents<span style="color: #000000; font-weight: bold;">/</span>Resources
&nbsp;
<span style="color: #666666; font-style: italic;"># Backup menubar icons</span>
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> status_o<span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #007800;">$i</span> <span style="color: #007800;">$i</span>.bak; <span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Overwrite blue icons</span>
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;^status_on.*tif$&quot;</span><span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #c20cb9; font-weight: bold;">yes</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/on/off/'</span><span style="color: #000000; font-weight: bold;">`</span> <span style="color: #007800;">$i</span>; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>If you also want to disable the activity animation:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>Twitterrific.app<span style="color: #000000; font-weight: bold;">/</span>Contents<span style="color: #000000; font-weight: bold;">/</span>Resources
&nbsp;
<span style="color: #666666; font-style: italic;"># Disable activity animation</span>
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;^status.*working.*tif$&quot;</span><span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #c20cb9; font-weight: bold;">yes</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> status_on.tif <span style="color: #007800;">$i</span>; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>If you followed the first step, you can revert:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>Twitterrific.app<span style="color: #000000; font-weight: bold;">/</span>Contents<span style="color: #000000; font-weight: bold;">/</span>Resources
&nbsp;
<span style="color: #666666; font-style: italic;"># Revert all changes</span>
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> bak<span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #c20cb9; font-weight: bold;">yes</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">basename</span> <span style="color: #007800;">$i</span> .bak<span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>You&#8217;ll have to repeat these steps after every update.</p>
<p>Iconfactory, if you&#8217;re reading, please add this feature!  I love the official client&#8217;s ability to only turn blue on @mentions and DMs.  Your app does many things so much better, and this feature is the only thing I&#8217;ll miss.</p>
<p>And Twitter, shame on you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/147/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Removing Elf Toolbar/Conduit for Mac from Safari</title>
		<link>http://blog.gregfiumara.com/archives/134</link>
		<comments>http://blog.gregfiumara.com/archives/134#comments</comments>
		<pubDate>Sun, 16 Jan 2011 18:48:31 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[adware]]></category>
		<category><![CDATA[conduit]]></category>
		<category><![CDATA[ct_bundle]]></category>
		<category><![CDATA[ct_loader]]></category>
		<category><![CDATA[elf]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[toolbar]]></category>
		<category><![CDATA[translation]]></category>
		<category><![CDATA[virus]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=134</guid>
		<description><![CDATA[Well&#8230;it looks like the Mac is finally getting hit with malware!  I&#8217;ve had to remove the &#8220;Elf Toolbar&#8221; or &#8220;Translation Toolbar&#8221; aka &#8220;Conduit&#8221; from a number of Macs in the past few weeks.  Judging by the increasing number of recent forum posts on Apple&#8217;s Discussion Boards, it&#8217;s spreading fast.  Here&#8217;s what it is and more [...]]]></description>
			<content:encoded><![CDATA[<p>Well&#8230;it looks like the Mac is finally getting hit with <a href="http://en.wikipedia.org/wiki/Malware">malware</a>!  I&#8217;ve had to remove the &#8220;Elf Toolbar&#8221; or &#8220;Translation Toolbar&#8221; aka &#8220;Conduit&#8221; from a number of Macs in the past few weeks.  Judging by the increasing number of recent forum posts on Apple&#8217;s Discussion Boards, it&#8217;s spreading fast.  Here&#8217;s what it is and more importantly how to remove it.</p>
<p><span id="more-134"></span>
<p> </p>
<h2>Background</h2>
<p>I was able to track down some of the actual package installer files for Elf and installed it on a machine with a fresh install of Mac OS X 10.6.6.  My testing was performed on that machine.  If you&#8217;d like a copy for your own more thorough evaluation, please get in touch with me.  For obvious reasons, I will not be posting it here.</p>
<p> </p>
<p> </p>
<p> </p>
<h2>What is Elf?</h2>
<p>Elf appears simply to be <a href="http://en.wikipedia.org/wiki/Adware">adware</a> with several software components.  Upon running the installer, I was immediately bombarded with the following.</p>
<p> </p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="elf_ad_example.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/01/elf_ad_example.png" border="0" alt="Initial Screen After Installing Elf" width="600" height="471" /></p>
<p>Users of the machines that I removed Elf from reported more frequent advertisements popping up, or even not being able to use the web browser at all.  I didn&#8217;t experience this, but I only used my infected test machine for a few hours.  Notice the toolbar right below the</p>
<p>address bar.  This is installed with Elf, somewhat &#8220;hacked&#8221; into Safari window.  In fact, if Safari was open before you installed Elf, you&#8217;d now see <em>two</em> copies of Safari in your Dock.</p>
<p>Some other lovely things that come with Elf are an &#8220;alert&#8221; menubar icon.  This icon seemed to only be present when Safari was open.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="alert_menubar.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/01/alert_menubar.png" border="0" alt="Alert Menubar Icon from Elf (Far Right)" width="362" height="76" /></p>
<p>To go along with these alerts is an awful (oh, I mean &#8220;<em>handy</em>&#8220;) alert dialog, complete with close button on the wrong side of the window.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="elf_alert_dialog.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/01/elf_alert_dialog.png" border="0" alt="Elf Alert Dialog" width="351" height="181" /></p>
<p>Clicking the icon dropped down a list of choices which displayed websites like the following &#8220;Privacy Policy&#8221; (not sure I believe it):</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="elf_privacy.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/01/elf_privacy.png" border="0" alt="Elf Privacy Policy" width="600" height="471" /></p>
<p>I also thought that Elf might be messing around with iCal due to the iCal icon looking very strange after installation and the fact that the Elf toolbar includes a calendar component.  I couldn&#8217;t find any evidence to back it up, but I&#8217;m not sure what else would cause what&#8217;s pictured below.  You&#8217;ll see below that the iCal icon&#8217;s font is different.  After launching iCal, the font was fixed, but the strange font would come back on reboot.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="elf_ical_dock.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/01/elf_ical_dock.png" border="0" alt="Strange iCal Icon Font" width="600" height="110" /></p>
<p> </p>
<h2>How did I get it?</h2>
<p>No one I&#8217;ve talked to seems to know how it got installed on their system.  Judging from the .pkg files, it looks like they were <a href="http://en.wikipedia.org/wiki/Drive-by_download">downloaded via drive-by</a>.  The only problem with this is that Elf installs files to areas of your Mac that require administrative access.  This means at some point <em><strong>you</strong> <a href="http://www.thegraphicmac.com/wp-content/uploads/com_admin-password.jpg">authorized the installation</a></em> with an administrator username and password!</p>
<p><strong><em>Update</em><span style="font-weight: normal;">: A commenter suggested people have downloaded this by clicking a fake download link while trying to download Mac software.  This might be a picture of such a fake download link.</span></strong></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="spam_elf_ad.png" src="http://blog.gregfiumara.com/wp-content/uploads/2011/03/spam_elf_ad.png" border="0" alt="Possible Fake Download Link" width="600" height="75" /></p>
<p> </p>
<h2>What does it do?</h2>
<p>I used the utility <a href="http://www.fernlightning.com/doku.php?id=software:fseventer:start">fseventer</a> from <a href="http://www.fernlightning.com">fernLightning</a> as well as the contents of the .pkg files I acquired to track file system usage after the installation.  The files I noticed touched by Elf are listed in the &#8220;uninstall instructions&#8221; section below.  The toolbar portion is actually a product (a &#8220;Community Toolbar (ct)&#8221;) from <a href="http://www.conduit.com/">Conduit</a>.  I&#8217;d imagine the different toolbars could have different portions of malcode, but the uninstall steps should be the same since they&#8217;re based off the same product.</p>
<p> </p>
<p>Some scripting additions and a system LaunchAgent are installed in addition to the pieces you&#8217;ve seen above.  The toolbar itself is actually an InputManager (&#8220;one of the simplest and most popular ways to load arbitrary external code into other applications&#8221; &#8212; <a href="http://www.cocoadev.com/index.pl?InputManager">cocoadev.com</a>).  There <strong>are</strong> good InputManagers (most notably those from <a href="http://unsanity.com">Unsanity</a>), but they routinely cause instability with the OS in my experience.</p>
<p>Other than install a bunch of garbage and occasionally pop up ads, Elf didn&#8217;t really seem to do too much in my tests.  The Conduit LaunchAgent sat in the background, so even if you killed it, launchd would open it right back up (by design).  I did notice outbound connections to various flash game, online radio, and ad websites with every new Safari window opened.  There was at least one connection per window.  Using <a href="http://www.wireshark.org/">Wireshark</a>, I was also able to see that Google Analytics code was being downloaded every so often as well.  I did <em>not</em> notice any personal information being sent out, though that&#8217;s not to say there wasn&#8217;t any (again, if you&#8217;d like a copy for your own evaluation, let&#8217;s get in touch).</p>
<h2>How do I get rid of it?  (Uninstall Instructions)</h2>
<p>Oddly enough, the program does come with a utility called &#8220;uninstall.&#8221;  I didn&#8217;t try it out until I had manually uninsalled it though, so I&#8217;m not sure what it does.  I didn&#8217;t feel like doing another fresh install of OS X to find out.</p>
<p> </p>
<p>Here&#8217;s what I did to uninstall.  Run these commands in the Terminal (Applications &gt; Utilities &gt; Terminal).  As always, be careful with sudo commands.  If you don&#8217;t know what you&#8217;re doing, ask someone who does.  Quit all programs first to be on the safe side.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> ~<span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>Application Support<span style="color: #000000; font-weight: bold;">/</span>Conduit
launchctl unload <span style="color: #660033;">-w</span> <span style="color: #660033;">-S</span> Aqua <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>LaunchAgents<span style="color: #000000; font-weight: bold;">/</span>com.conduit.loader.agent.plist
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>Application Support<span style="color: #000000; font-weight: bold;">/</span>Conduit
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>LaunchAgents<span style="color: #000000; font-weight: bold;">/</span>com.conduit.loader.agent.plist
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>InputManagers<span style="color: #000000; font-weight: bold;">/</span>CTLoader
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>ScriptingAdditions<span style="color: #000000; font-weight: bold;">/</span>ct_scripting.osax
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #000000; font-weight: bold;">/</span>Applications<span style="color: #000000; font-weight: bold;">/</span>Toolbars</pre></div></div>

<p> That should do it, you might want to reboot for good measure afterwards, but you shouldn&#8217;t have to.  Remember to always think before authorizing a program with an administrator username and password.  Ask yourself why that particular program needs your password, and don&#8217;t provide it if you can&#8217;t figure it out.  Never run a program that you don&#8217;t know where it came from.  You might also want to <a href="http://www.hoboes.com/Mimsy/hacks/auto-run-auto-download/">not allow Safari to automatically launch files after download</a>.  Remember, no operating system is invulnerable to attack and <em>you</em> are your own best defense.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/134/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>The Soft(ware) Train</title>
		<link>http://blog.gregfiumara.com/archives/126</link>
		<comments>http://blog.gregfiumara.com/archives/126#comments</comments>
		<pubDate>Sun, 12 Dec 2010 18:38:22 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[School]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[sam schappelle]]></category>
		<category><![CDATA[soft train]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[train]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=126</guid>
		<description><![CDATA[During his last rant on the last day of my graduate Software Engineering class, the professor gave each of the students a pack of train-shaped sponges.  What the&#8230; I thought.  I laughed like crazy, trying to write down everything he said so I could tell everyone about this hilarious last day.  While it was really [...]]]></description>
			<content:encoded><![CDATA[<p>During his last rant on the last day of my graduate Software Engineering class, <a title="Professor Sam Schappelle" href="http://samschappelle.com/">the professor</a> gave each of the students a pack of <a title="Instant Railroad on Amazon.com" href="http://www.amazon.com/exec/obidos/ASIN/B003D8TTM6/pdscomp-20">train-shaped sponges</a>.  <em>What the&#8230; </em>I thought.  I laughed like crazy, trying to write down everything he said so I could tell everyone about this hilarious last day.<span id="more-126"></span>  While it was really funny for a graduate level class, he did have a good message.  Here it is, in his own words:</p>
<blockquote><p>When I was young, I lived near a railroad.  Whenever we heard a train coming, we would run to see it.  We would try to get the engineer to blow the whistle.</p>
<p>I tried to imagine what I would have thought if I had heard the term &#8220;Software Engineer&#8221; when I was little.  To me, an engineer was a person who drove a train.  Therefore, I guess a Software Engineer would be a person who drives a <span style="text-decoration: underline;">soft train</span>.</p>
<p>I have been giving these toy trains out to my students since 1987.  More than being a &#8220;soft train for software engineers,&#8221; these trains remind us of some of the important software engineering principles.</p>
<p>The first thing you notice is that the sponges (which are shaped like train cars) are inside little gelatin capsules.  This, of course, reminds us of <span style="text-decoration: underline;">encapsulation</span>.</p>
<p>If you dissolve the capsules in warm water, the sponges will emerge.  You can hook the sponges together to form a train.  This illustrates the principle of well-defined <span style="text-decoration: underline;">coupling</span> between components.</p>
<p>A train is made up of a collection of cars.  This is the application of <span style="text-decoration: underline;">modularization</span>.  Each car has its own purpose.  Different cars have different purposes.  This is the principle of <span style="text-decoration: underline;">cohesion</span>.  Furthermore, you will find it very difficult to pull one of these cars apart, or put two of them together (except at the defined interfaces).  Each car has very strong cohesion.</p>
<p>When you look at a real train, you can&#8217;t really see inside the boxcars or tank cars.  The only way you know what&#8217;s inside is to read the label on the outside.  This is the principle of <span style="text-decoration: underline;">information hiding</span>.</p></blockquote>
<p>I thought this was just great, a nice little gimmicky real-world example that drives home a ton of concepts.  Maybe it&#8217;s a little low-level for graduate students, but it&#8217;s still good, and even better that it&#8217;s original.  If I ever teach computer science high schoolers or undergrads one day, I will definitely use this.</p>
<p>You can tell a professor who really cares about what he&#8217;s teaching when they think of brilliant examples.  I hope you enjoy this as much as I did.  Thanks Sam!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/126/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I Can&#8217;t Stand Far East Movement&#8217;s &#8220;Like a G6&#8243;</title>
		<link>http://blog.gregfiumara.com/archives/113</link>
		<comments>http://blog.gregfiumara.com/archives/113#comments</comments>
		<pubDate>Thu, 07 Oct 2010 01:55:12 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[far east movement]]></category>
		<category><![CDATA[like a g6]]></category>
		<category><![CDATA[pop music]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=113</guid>
		<description><![CDATA[Pop music of today routinely pisses me off, but Far East Movement has piled on the last straw for me lately.  Let me break down the lyrics of their new hit single, Billboard&#8217;s #6 (and rising), Like a G6, and maybe you&#8217;ll understand why I feel the way I do. (Hook) Poppin&#8217; bottles in the [...]]]></description>
			<content:encoded><![CDATA[<p>Pop music of today routinely pisses me off, but <em>Far East Movement</em> has piled on the last straw for me lately.  Let me break down the lyrics of their new hit single, Billboard&#8217;s #6 (and rising), <em>Like a G6</em>, and maybe you&#8217;ll understand why I feel the way I do.<span id="more-113"></span></p>
<blockquote><p><em>(Hook)</em><br />
<em>Poppin&#8217; bottles in the ice, like a blizzard</em></p></blockquote>
<p>I know what poppin&#8217; bottles means, but why are you doing it <em>in </em>the ice?  I guess popping ice cold bottles or pouring bottles on ice doesn&#8217;t have a really nice ring to it.  Anyway, fine, I&#8217;ll give you that ice is like a blizzard and it fits your syllable strategy.  Or wait, are you putting bottles in the freezer?  That&#8217;s the opposite of drinking.  <em>(Update: This <strong>could</strong> mean placing a bottle of champagne into a bucket of ice, which actually&#8230;makes sense.)</em></p>
<blockquote><p><em>When we drink, we do it, right gettin slizzard</em></p></blockquote>
<p>Good call, taking a word that approximately no one uses to define being drunk, so that you can later claim being the originator AND rhyme with blizzard!  Great start guys!</p>
<blockquote><p><em>Sippin&#8217; sizzurp in my ride, like Three 6</em></p></blockquote>
<p>I hope you guys weren&#8217;t ever trying to be role models.  &#8221;Sizzurp&#8221; (aka &#8220;purp&#8221; and &#8220;drank&#8221;) is prescription cough syurp mixed Sprite or vodka and candy flavoring.  People die from it all the time.  If <a href="http://www.mtv.com/news/articles/1582520/20080228/lil_wayne.jhtml" target="_blank">Lil Wayne speaks out</a> against it, you know it&#8217;s gotta be bad.</p>
<p>Anyway, this line is nothing more than the title of a <em>Three 6 Mafia</em> single, so <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">creativity&#8211;<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">.</span></span></p>
<blockquote><p><em>Now I’m feelin&#8217; so fly, like a G6</em></p></blockquote>
<p><em></em><strong>This</strong> is where I lose it.  This is the hook of your song, the catchy part, the part people remember and repeat over and over, and you <strong><em>rhymed &#8220;six&#8221; with &#8220;six.&#8221;</em><span style="font-weight: normal;"> You </span>can&#8217;t</strong> do that.</p>
<blockquote><p><em> Like a G6, like a G6</em></p></blockquote>
<p><em><span style="font-style: normal;">And again.</span></em></p>
<blockquote><p><em> Now I’m feelin&#8217; so fly, like a G6</em></p></blockquote>
<p>Ahhh!  Seriously, <strong>stop</strong>!</p>
<p>But here&#8217;s what <em>really</em> gets me.  You&#8217;d think the &#8220;G6&#8243; they refer to is a plane, since they get so &#8220;fly,&#8221; but it isn&#8217;t.  The &#8220;G&#8221; line jets (Gulfstream) tops out right now at G5.  The G6 is being planned but there still a ways off.  In an interview, the group says <a href="http://www.mtv.com/news/articles/1649023/20100929/far_east_movement.jhtml" target="_self">they&#8217;re referring to</a> a Pontiac G6, a <strong><em>car</em><span style="font-weight: normal;">!  A Pontiac spokeswoman confirmed to me that no Pontiac models currently can fly and there are no clear plans to have flying Pontiacs anytime soon.</span></strong></p>
<p><strong><span style="font-weight: normal;">Even then, the female wears airplane earrings in the music video and the male rappers make jet-taking-off gestures to the camera constantly.  These guys have a Gulfstream 4, probably knew they couldn&#8217;t afford the 5, figured out that &#8220;six&#8221; rhymed with &#8220;six&#8221; &#8230;  the rest is history.</span></strong></p>
<blockquote><p><em>(Verse 1)<br />
Gimme that Mo-Moet<br />
Gimme that Cry-Crystal</em></p></blockquote>
<p><em><span style="font-style: normal;">Those are various types of expensive alcohol.  Standard name dropping here.</span></em></p>
<blockquote><p><em> Ladies love my style, at my table gettin&#8217; wild<br />
Get them bottles poppin, we get that drip and that drop</em></p></blockquote>
<p><em><span style="font-style: normal;">When you spend several hundred dollars on a bottle of liquor, I also suggest you get every last drop.  Is that what you mean?</span></em></p>
<blockquote><p><em> Now give me 2 more bottles cuz you know it don’t stop</em></p></blockquote>
<p>Right, if you keep ordering, it won&#8217;t stop.  These guys are brilliant.</p>
<blockquote><p><em>(Bridge 1)<br />
808 hell yeah</em></p></blockquote>
<p>More shenanigans?  Name dropping again, this time with the famous Roland TR-808 drum machine&#8230;but, there are absolutely <strong>no</strong> 808 samples in your song <em>Far East Movement</em>, so what gives?  The few percussive sounds are definitely not from an 808 and everything else is from a synth.  Correct me if I&#8217;m wrong&#8230;  <em>(Update: <a href="#comment-3607">kurt</a> suggests this might refer to the Hawaii area code, though the group is based in California.)</em></p>
<blockquote><p><em> Drink it up, drink-drink it up,<br />
When sober girls around me, they be actin&#8217; like they drunk</em></p></blockquote>
<p><em><span style="font-style: normal;">Actually, that might be you perceiving them to be drunk.  I&#8217;ve never </span>ever<span style="font-style: normal;"> heard of a sober girl liking a drunk guy.  Just saying&#8230;</span></em></p>
<blockquote><p><em> They be actin like they drunk, actin-actin like they drunk<br />
When sober girls around me actin-actin like they drunk</em></p></blockquote>
<p>Now, not only did you rhyme the next to lines with the same word <em>again</em>, but you filled the rest of the &#8220;verse&#8221; with the start of the stanza.  Way to pad the song folks.</p>
<blockquote><p><em>(Hook)</em><br />
<em>(Verse 2)</em><br />
<em>Sippin&#8217; on, sippin&#8217; on sizz, Im&#8217;a ma-make it fizz</em></p></blockquote>
<p>&#8220;Sizz&#8221;-urp?  The same stuff you mentioned in your hook?  Well let&#8217;s hope you didn&#8217;t mean freebased heroin.  Anyway, it&#8217;s the carbonation in the Sprite that&#8217;s making it fizz, so if you don&#8217;t drink it, it&#8217;s going to go flat.</p>
<blockquote><p><em> Girl, I keep it gangsta, poppin&#8217; bottles at the crib<br />
This is how we live, every single night</em></p></blockquote>
<p>George Thorogood, anyone?  No, just me?  Okay.  Well, fine, you can buy expensive liquor for your house.  I&#8217;m jealous, I can&#8217;t say anything negative here then&#8230;</p>
<blockquote><p><em> Take that bottle to the head, and let me see you fly</em></p></blockquote>
<p>Role models!</p>
<blockquote><p><em>(Bridge 1)</em></p>
<p><em>(Hook)</em></p>
<p><em>(Bridge 2)<br />
It&#8217;s that 808 bump, make you put yo hands up<br />
Make you put yo hands up, put yo, put yo hands up<br />
You can’t Touch this</em></p></blockquote>
<p>It&#8217;s not an 808!</p>
<blockquote><p><em>(Bridge 2)</em></p>
<p><em>(Bridge 2)</em></p>
<p><em>(Hook)</em></p></blockquote>
<p>That&#8217;s all?  That&#8217;s the end?  You went for a whole 4 minutes and rhymed a <strong>total of four words</strong>.  Really, go back and count them (blizzard, crystal, drop, and &#8216;sizz&#8217;).</p>
<p>Anyway, I&#8217;m not one to step on success.  I&#8217;m all for small time artists making it big.  Really, I am.  I wish these guys all the success in the world.  But please, really, let&#8217;s get back to respecting the music.  I hate that songs like this (plus anything by Ke$ha, et al.) get popular when there are so many more creative songs written and produced by super-hardworking unsigned talent that will never get radio play.</p>
<p>What happened to music?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/113/feed</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>Get latest tweet without API key in pure PHP</title>
		<link>http://blog.gregfiumara.com/archives/94</link>
		<comments>http://blog.gregfiumara.com/archives/94#comments</comments>
		<pubDate>Sun, 22 Aug 2010 03:07:43 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[tweet]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.gregfiumara.com/?p=94</guid>
		<description><![CDATA[Update: There were several serious shortcomings in the code below that have been resolved (Twitter #failwhale, control characters in Tweets, greedy regex). I&#8217;ve been working on a backend for a website and needed a way to show the latest Twitter update. There is plenty of code floating around that does this, but I couldn&#8217;t find [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> There were several serious shortcomings in the code below that have been resolved (Twitter #failwhale, control characters in Tweets, greedy regex).</p>
<p>I&#8217;ve been working on a backend for a website and needed a way to show the latest Twitter update.  There is plenty of code floating around that does this, but I couldn&#8217;t find anything <em>simple</em> that <strong>preserved formatting</strong>, like hyperlinks to @replies, e-mail addresses, URLs, etc.  Anything that did was either very bulky (lots of source files) or required a Twitter API key&#8230;so I wrote my own, self-contained in a single function call.<br />
<span id="more-94"></span><br />
As you can see, this just scrubs the HTML from Twitter.com, so it definitely could break without notice.  That&#8217;s what you get for not using the official API, you should expect that.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> latest_tweet<span style="color: #009900;">&#40;</span><span style="color: #000088;">$username</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'gfiumara'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$include_date</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">/* Grab the latest tweet in XML format */</span>
        <span style="color: #000088;">$twitter_feed_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://twitter.com/statuses/user_timeline/<span style="color: #006699; font-weight: bold;">$username</span>.xml?count=1&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$feed_buffer</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$twitter_feed_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Use the tweet ID from XML to retrieve an HTML page with the tweet */</span>
        try <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$xml</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SimpleXMLElement<span style="color: #009900;">&#40;</span><span style="color: #000088;">$feed_buffer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$status</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">/* Twitter #failwhale */</span>
        <span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'&lt;div id=&quot;tweet&quot;&gt;@&lt;a href=&quot;http://www.twitter.com/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$username</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; target=&quot;_blank&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$username</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;: &lt;em&gt;No tweet retrieved.&lt;/em&gt;r&lt;/div&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$single_tweet_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://twitter.com/<span style="color: #006699; font-weight: bold;">$username</span>/status/<span style="color: #006699; font-weight: bold;">$status-&gt;id</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$html_buffer</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$single_tweet_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Strip out control characters */</span>
        <span style="color: #000088;">$html_buffer</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/[\x00-\x1F\x7F]/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">' '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$html_buffer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Tweets are located in an 'entry-content' class span */</span>
        <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;span class=&quot;entry-content&quot;&gt;(?P&lt;latest&gt;.*?)&lt;\/span&gt;/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$html_buffer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tweet_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Add some additional formatting */</span>
        <span style="color: #000088;">$tweet</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;div id=&quot;tweet&quot;&gt;@&lt;a href=&quot;http://www.twitter.com/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$username</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; target=&quot;_blank&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$username</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;: '</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tweet_array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'latest'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$tweet</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$tweet_array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'latest'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">/* Twitter uses relative links for @replies, etc. */</span>
                <span style="color: #000088;">$tweet</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/href=&quot;\//'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'href=&quot;http://twitter.com/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tweet</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">/* Insert the date */</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$include_date</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">/* Date is located in a 'published timestamp' span */</span>
                        <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;span class=&quot;published timestamp&quot; .*?&gt;(?P&lt;latest&gt;.*?)&lt;\/span&gt;/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$html_buffer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$date_array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date_array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'latest'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                                <span style="color: #666666; font-style: italic;">/* Don't use HTML5 &lt;time&gt; because we're not guaranteed a valid time string */</span>
                                <span style="color: #000088;">$tweet</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;a href=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$single_tweet_url</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; target=&quot;_blank&quot;&gt;&lt;div class=&quot;time&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$date_array</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'latest'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/div&gt;&lt;/a&gt;&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span>
                <span style="color: #000088;">$tweet</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;&lt;em&gt;No tweet retrieved.&lt;/em&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$tweet</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/div&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That said, this would be infinitely easier with <a href="http://www.jquery.com/">jQuery</a> or an <a href="http://simplehtmldom.sourceforge.net/">HTML DOM Parser</a>, but I really wanted it to be self-contained and completely PHP.  You&#8217;ll need PHP 5 to use this code.  If you&#8217;re stuck with PHP 4, you could simply rewrite the <a href="http://www.php.net/manual/en/book.simplexml.php">SimpleXML</a> section with <a href="http://www.php.net/manual/en/book.domxml.php">DOM XML</a> or parse it with <a href="http://php.net/manual/en/function.preg-match.php">preg_match()</a> like I do to get the date.  <strike>You might want to <a href="http://php.net/manual/en/function.preg-quote.php">preg_quote()</a> the regular expressions</strike> Don&#8217;t use <a href="http://php.net/manual/en/function.preg-quote.php">preg_quote()</a> because it will escape characters you don&#8217;t want escaped (such as < and >).</p>
<p>If you see how this can be improved in any way or you spend the time to make it work for PHP 4, please leave a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gregfiumara.com/archives/94/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

