DABR Twitter Web Client Mini Blog Yo Mama Jokes Sports Bookmarklets About Us

December 25, 2009

Upgur – an Imgur bookmarklet

Filed under: Code, Javascript, PHP, Twitter, bookmarklets, social networking — webadmin @ 7:43 am


 

This bookmarklet eases the chore of uploading an image to an image hosting site (in this case Imgur) for you to share socially or use in a website or html comment. No more downloading and re-uploading. Simply drag this bookmarklet to your links/bookmarks bar

Upgur

Point your browser to an actual image file (In Firefox you can right click and open the image in it’s own tab), then click on the bookmarklet and voila!

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

November 24, 2009

Expanding DABR Photo-Upload options



 

One of the most underrated parts of Dabr IMO is the Twitpic upload page. It allows you to interact with a Twitter helper service that uses the same login information as your twitter account. And since Twitter has speced out how the uploadAndPost process works, lots of other Twitter helper services use it in their API – such as YFrog, Twitgoo, Twitvid, and Posterous (which slickly reverse matches your autopost-twitter information in order to validate your posterous account). But Posterous is pretty slick all around – probably the best tumble blog/micro blog/media blog service out there and certainly the most expandable. Perhaps in the future I might try to integrate some more later.

Dabr photo upload twitpic yfrog twitgoo twitvid posterous imgurAnyways, I figure I’d give it a go to add some more services to the twitpic page – keyed off a service dropdown. The hardest part in reality was managing the options allowed by each service (i.e. URL upload instead of file upload, additional message body). In addition, I wanted to add support for a site that I use all the time – Imgur. They didn’t implement the uploadAndPost spec so I had to make a few exceptions as well as add an extra step to post the tweet along with the uploaded image file. Took a while to work out all the kinks (one large kink remaining is that Twitvid uploads don’t work LOL) but this page pretty much saves me from ever having to go to those sites again to upload images!

function twitter_twitpic_page($query) {
  // Check for oAuth credentials
  if (user_type() == 'oauth') {
    return theme('page', 'Error', '<p>You can't do media uploads while accessing Dabr using an OAuth login.</p>');
  }

  //verify that we're entering this page from posting the form  
  if ($_POST['service']) {
  
    // format and shrink/truncate associated status message
    $status = prepare_status($_POST['message'],120);
     
    // set the  api url based on the service name (all similar except imgur)
    $postUrl = 'http://'.$_POST['service'].'.com/api/uploadAndPost';

     // prepare the fields array with the common elements
    $postData = array(
      'username' => user_current_username(),
      'password' => $GLOBALS['user']['password'],
      'message' => $status,);
       
     // perform service-specific tasks
     switch ($_POST['service']){
         case 'imgur':
               if (!defined('IMGUR_API_KEY')){
                    twitter_refresh('twitpic/fail/'.$_POST['service'].'/'.urlencode('API KEY undefined'));
               }
               
               // imgur doesn't use the Twitter standard uploadAndPost spec
               $postUrl = 'http://imgur.com/api/upload.xml';
               
               //if URL is provided, send URL for imgur to rehost, otherwise use selected file
              if (empty($_POST['url'])){
                   $postData = array(
                         'key' => IMGUR_API_KEY, 
                         'image' => '@'.$_FILES['media']['tmp_name']);
              } else {
                   $postData = array(
                         'key' => IMGUR_API_KEY, 
                         'image' => $_POST['url']);
              }
               break;
          case 'yfrog': 
               if (!defined('YFROG_API_KEY')){
                    twitter_refresh('twitpic/fail/'.$_POST['service'].'/'.urlencode('API KEY undefined'));
               }
               $postData['key'] = YFROG_API_KEY;
               
              // Yfrog can also accept a URL as the media source
              if (!empty($_POST['url'])){
                   $postData['url'] = $_POST['url'];
              } else {
                    $postData['media'] = '@'.$_FILES['media']['tmp_name'];
               }
               break;
          case 'posterous':
              // Posterous has an additional comments element and will fall through to the default
               $postData['body'] = stripslashes($_POST['body']);
         default:
               $postData['media'] = '@'.$_FILES['media']['tmp_name'];
     }

     // make the api call
    $response = twitter_process($postUrl,$postData);

     // check response XML for associated IDs
     // for uploadAndPost supporting services
    if (preg_match('#mediaid>(.*)</mediaid#', $response, $matches)) {
      $id = $matches[1];
       
       // Twitvid allows crossposting to Youtube
      if (preg_match('#youtube_id>(.*)</youtube_id#', $response, $matches)) {
           $altid = $matches[1];
      }
       
       // Posterous sends back a separate shortened URL code
      if (preg_match('#mediaurl>http://post.ly/(.*)</mediaurl#', $response, $matches)) {
           $altid = $matches[1];
      }
       
       // show success messsage and pass IDs to create links to media
      twitter_refresh("twitpic/confirm/".$_POST['service']."/$id/$altid");
    } 
     // response for imgur uses different element names
     elseif (preg_match('#image_hash>(.*)</image_hash#', $response, $matches)) {
      $id = $matches[1];
       
       // the secret delete link/code is offered only once and should be shown in the confirmation
      if (preg_match('#delete_hash>(.*)</delete_hash#', $response, $matches)) {
           $deleteid = $matches[1];
      }
       
       // we need the actual imgur link in order to post status to Twitter 
      if (preg_match('#original_image>(.*)</original_image#', $response, $matches)) {
           $imglinkid = $matches[1];
      }

       // update status with the image link
      $status .= " $imglinkid ";

       // post the status to twitter
      $response = twitter_process('http://twitter.com/statuses/update.json',
           array('source' => 'dabr', 'status' => $status));

       // show success message, link to image, and hidden delete link
      twitter_refresh("twitpic/confirm/".$_POST['service']."/$id/$deleteid");
    } else {
          // collect errors from response
         if (preg_match('#error_code>(.*)</error_code#', $response, $matches)) {
              $error = "Error Code: $matches[1]. ";
         }
         if (preg_match('#error_msg>(.*)</error_msg#', $response, $matches)) {
              $error .= "Error Msg: $matches[1]. ";
         }
         if (preg_match('#err.code="(.*)" msg="(.*)" />#', $response, $matches)) {
               $error = "Error Code: $matches[1] Error Msg: $matches[2]";
         }
            
          // show failure messages
         twitter_refresh('twitpic/fail/'.$_POST['service'].'/'.urlencode($error));
    }
  } 
  // Page mode to show confirmation and media links
  elseif ($query[1] == 'confirm') {
    $postedlink = "Media: http://$query[2].com/$query[3]";
    if ($query[2] == 'imgur' && !empty($query[4])){
         $postedlink .= " // Hidden delete link: http://imgur.com/delete/$query[4]";
    }
    if ($query[2] == 'twitvid' && !empty($query[4])){
         $postedlink .= " // Youtube:  http://www.youtube.com/watch?v=$query[4]";
    }
    if ($query[2] == 'posterous' && !empty($query[4])){
         $postedlink = "Post: http://post.ly/$query[4]";
    }
     
     // show formatted confirmation to add thumbnails
    $content = "<p>Upload success.</p><p>".twitter_parse_tags($postedlink)."</p>";
  } 
  // page mode for failure - show errors
  elseif ($query[1] == 'fail') {
    $content = "<p>$query[2] upload failed: $query[3]</p>";
  } 
  // otherwise show form
  else {
    $content = '<style type="text/css">.disabletrue{background:#ddd;}.disablefalse{background:#fff;}</style>
          <script type="text/javascript">function disable(sel){service=sel.options[sel.selectedIndex].value;sel.form.url.disabled= (service != 'yfrog' && service != 'imgur');sel.form.body.disabled= (service != 'posterous');sel.form.url.className= 'disable'+(service != 'yfrog' && service != 'imgur');sel.form.body.className= 'disable'+(service != 'posterous');}</script>
          <form name="twitpic" method="post" action="twitpic" enctype="multipart/form-data"><br />Service: <select name="service" onChange="disable(this);"><option value="twitpic">Twitpic</option><option value="twitgoo">Twitgoo</option><option value="yfrog">Yfrog</option><option value="imgur">Imgur</option><option value="twitvid">Twitvid</option><option value="posterous">Posterous</option></select><br />Upload: <input type="file" name="media" /><br />Message: <input type="text" name="message" maxlength="120" /><br />Image Url: <input type="text" name="url" maxlength="120" /><br />Body:<br><textarea style="position:relative;top:-14px;left:67px;" cols=50 rows=3" name="body"></textarea><br /><input type="submit" value="Upload" /></form>
          <script type="text/javascript">disable(document.forms['twitpic'].service);</script>';
  }
  return theme('page', 'Twitpic Upload', $content);
}

I also had to update the twitter_photo_replace function, which I use to show the thumbnail of the image on the confirm page, to add the imgur regexes

    '#imgur.com/([w]{5})[s.ls][.w]*#i' => 'http://imgur.com/%ss.png',
    '#imgur.com/gallery/([w]+)#i' => 'http://imgur.com/%ss.png',
    '#imgur.com/delete/([w]+)#i' => 'images/trash.gif',

A lot of code, but to me it’s worth it!

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

More DABR Goodness: Unshortening Short URLs



 

I’m loving DABR – makes me want to find a way to load XAMPP on my phone. Anyways I’ve made a few more tweaks to my codebase recently. Inspired by this Terrence Eden post…:Expanding URLs in Dabr / Twitter – Terence Eden’s Blog

I hate shortened URLs with a passion. It makes it hard to see what a link is and whether I’ve visited it before. If they fail – like tr.im threatened to do – you lose your links with no way to see where they once went.

So, hurrah for LongURLPlease – a service which takes those horrid little links and turns them in to full sized URLs.

…I went about implementing this longurl scheme and having the long URL show in the tweet. But to make it so that it the tweet isn’t dominated by a 600 character URL (and reduce some of the benefit of short URLs) I figured I could try to make it only display the domain name of each link while still keeping the actual link in the HTML – much like they do at slashdot. Easy peasy, I thought. Just uncomment the LONGURL_KEY in config.php and move the gwt code from the twitter_parse_links_callback function to the theme_external_link function in common/twitter.php. Right?

function twitter_parse_links_callback($matches) {
  $url = $matches[1];
  if (substr($url, 0, strlen(BASE_URL)) == BASE_URL) return "<a href='$url'>$url</a>";
  return theme('external_link', $url);
}

function theme_external_link($url, $content = null) {
     //Long URL functionality.  Also uncomment function long_url($shortURL)
     if (!$content)
     {
          $longurl = long_url($url);
          $domain = parse_url($longurl,PHP_URL_HOST);
          if (setting_fetch('gwt') == 'on') {
               $encoded = urlencode($longurl);
               $longurl = "http://google.com/gwt/n?u=$encoded";
          }
          return "<a href='$longurl' target='_blank'>[".$domain."]</a>";
     }
     else
     {
          return "<a href='$url' target='_blank'>$content</a>";
     }
}

Well, not so much. Because of some of the mechanisms in identifying links and adding the appropriate HTML, I broke the image-service thumbnail code and had to think through how this was going to work out. It ended up with me changing the twitter_photo_replace and my twitlonger_replace functions to only return the addendums (if any) and not the entire tweet text

function twitter_photo_replace($text) {

.
.
.

  if (!empty($images)) 
     return implode(' ', $images).'<br />';
}  

function twitlonger_replace($text) {
  $tmp = strip_tags($text);

  if (preg_match('#http://tl.gd/([dw]+)#', $tmp, $matches)) {
.
.
.
     $returntext = "<p style="padding:5px;margin:5px;border:thin dashed;">$longtweet</p>";//$text";
    return theme('external_link', $matches[0], $returntext);
  } else {
     return "";
  }
}

then I changed how the twitter_parse_tags function called them and appended the data. Also important is to make it use the original unaltered tweet ($input) as a source rather than the modified one with the links ($out).

function twitter_parse_tags($input) {
.
.
.

  if (!in_array(setting_fetch('browser'), array('text', 'worksafe'))) {
    $twitlonger = twitlonger_replace($input);
    $out = twitter_photo_replace($twitlonger.$input).$twitlonger.$out;
  }
  return $out;
}

Dabr Decoding Short URLs

The results, though, are great . Nice and clean. As mentioned on other pages, the overhead may be a bit much for more than your personal web server, but I love the change. One byproduct as well is that now any posts with images in Twitlonger that don’t get into the original tweet will have their photo thumbnail displayed too. 5% scenario – yes, but still icing :)

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

November 23, 2009

Ping.fm PingDash Bookmarklet



 

I may have stumbled on a great workaround for the PingOut problem. When last I addressed this:

Ping.fm PingPlus Bookmarklet | myopiclunacy.com

UPDATE (Nov 18, 2009): Commenter Andy pointed out another Ping.fm Bookmarklet on Mentoliptus that uses the PingOut popup. This popup is a hell of a lot nicer than the Ping This interface and gives you all the options of posting to single services or groups. Only thing is that it’s context insensitive. I tried passing parameters to it but it ignored them all. So for now I’ll continue using PingPlus as it is for context sensitive stuff until hopefully they update the PingOut interface to allow URL parameters. That would be the holy grail Ping bookmarklet!

Well, the Pingout page doesn’t accept URL parameters, but it seems the Dashboard page does! So a quick change to the PingPlus bookmarklet and we’re a lot closer to the holy grail:

PingDash

Works the same way except it takes you to the Ping.fm Dashboard with status already filled in and you have complete control over the services, groups, or whatever you want to Ping.

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

November 18, 2009

Ping.fm PingPlus Bookmarklet



 

UPDATE: Better bookmarklet here? Check it out!


One more Ping.fm goodie. I wrote before about Ping.fm:
Ping.fm is a very slick service that allows you to ping, or update all your blogs, social networks or other presence apps at once via the web, IM, SMS, email, and a variety of other ways. For example, you can update your Facebook and Twitter with the same status from IM, post new photo blogs to your Flickr and your Tumble blog from your Cell phone, or update your Blogger, LiveJournal and Wordpress.com blogs via email. It’s extremely flexible and customizable with groups, directives, link tracking and more. It could very well be the glue that keeps all our online identities in sync.

I’m one who doesn’t like browser-specific toolbars but adores bookmarklets because they’re portable across browsers/systems (most of the time). Well Ping.fm has a basic bookmarklet that grabs the page name and title:

Ping this! Bookmarklet

Drag this link to your browser’s bookmark toolbar or other area where you save bookmarks and grasp the power of Ping.fm with the click of a button! Instantly post links to your social networks with the Ping this! bookmarklet.

Ping this!

But as I did with the Twiit bookmarklet I think it’d be nice to capture some selected text along with the page title . It makes even more sense for Ping.fm as you’re not necessarily constrained by a character count as you are in Twitter. So here it is:

PingPlus

Drag it to your links/bookmarks bar and when you get on page you want to Ping, click the bookmarklet. As with Twiit, this bookmarklet captures the link, title, and any selected text on the page you want to share and forwards it to the Ping this! page.

Happy pinging.

UPDATE (Nov 18, 2009): Commenter Andy pointed out another Ping.fm Bookmarklet on Mentoliptus that uses the PingOut popup. This popup is a hell of a lot nicer than the Ping This interface and gives you all the options of posting to single services or groups. Only thing is that it’s context insensitive. I tried passing parameters to it but it ignored them all. So for now I’ll continue using PingPlus as it is for context sensitive stuff until hopefully they update the PingOut interface to allow URL parameters. That would be the holy grail Ping bookmarklet!

I’ve also added a Ping button to the Twiit bookmarklet page

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

November 15, 2009

Roll Your Own Twitter Web Client



 

As I get more and more into this Twitter thing, I’ve struggled like everyone else to find the perfect web client. I prefer web clients over heavy desktop apps because they can be used on any platform from mobile phone to Windows, Mac or Linux browser. The Twitter web client (both the regular and the mobile versions) just don’t work. Too much of one thing and not enough of another.

In my searching, I came across one mobile effort that seemed to combine the best features of the best desktop apps with the ease and flexibility of a web client. And better yet for a tinkerer like me – it was open source:dabr.co.uk – About

Dabr is a mobile web interface to Twitter’s API. It has been described as m.twitter.com on steroids, and tries to provide as much mobile functionality as possible.

It’s an open source project created and maintained by @davidcarrington, inspired by some suggestions from @whatleydude – who remains a keen user and strategic advisor on many of the features that make dabr what it is today.

The project is built on your feedback, literally! Your ideas aren’t just welcome, but are the driving force that makes Dabr improve and hopefully be your mobile twitter client of choice. So please get in touch :)

Great. This is a quality effort that includes tweeting, deleting, retweeting, replying, favoriting, following and unfollowing, blocking, searching, trends, hashtags, and even Twitpic! So immediately when loading this code on my machine (code and instructions here) I set about implementing a different url shortening service – u.nu. Not only are url’s shorter than the default bit.ly service, it also doesn’t require me to set up an account. If it’s free it’s me! The other feature I wanted to add in was calling TweetShrink for tweets over 140 characters. I add some code also to truncate with ellipses if Tweetshrink doesn’t achieve the desired savings, but this could easily be changed to do multiple tweets. Maybe that’s the next tweak!

UPDATE (Nov 19): Added decoding for imgur images and TwitLonger tweets.

Here are the code changes (in bold) that I made to twitter.php. just do a find for the function names as the file is quite large:

function twitter_url_shorten_callback($match) {
  if (preg_match('#http://www.flickr.com/photos/[^/]+/(\d+)/#', $match[0], $matches)) {
    return 'http://flic.kr/p/'.flickr_encode($matches[1]);
  }
  return file_get_contents("http://u.nu/unu-api-simple?url=" . $match[0]);
}

function twitter_update() {
  twitter_ensure_post_action();
  $status = twitter_url_shorten(stripslashes(trim($_POST['status'])));
  if ($status) {
    if (strlen($status)>140)
    	$status1 = file_get_contents("http://tweetshrink.com/shrink?format=string&text=" . urlencode($status));
    if ($status1 && strlen($status1)<141)
    	$status=$status1;
    if (strlen($status)>140)
    	$status=substr($status,0,137) . "...";

    $request = 'http://twitter.com/statuses/update.json';
    $post_data = array('source' => 'dabr', 'status' => $status);
    $in_reply_to_id = (string) $_POST['in_reply_to_id'];
    if (is_numeric($in_reply_to_id)) {
      $post_data['in_reply_to_status_id'] = $in_reply_to_id;
    }
    $b = twitter_process($request, $post_data);
  }
  twitter_refresh($_POST['from'] ? $_POST['from'] : '');
}

function twitter_parse_tags($input) {
  $out = preg_replace_callback('#(\w+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)(?<![.,])#is', 'twitter_parse_links_callback', $input);
  $out = preg_replace('#(^|\s)@([a-z_A-Z0-9]+)#', '$1@<a href="user/$2">$2</a>', $out);
  $out = preg_replace('#(^|\s)(\\#([a-z_A-Z0-9:_-]+))#', '$1<a href="hash/$3">$2</a>', $out);
  if (!in_array(setting_fetch('browser'), array('text', 'worksafe'))) {
    $out = twitter_photo_replace($out);
    $out = twitlonger_replace($out);
  }
  return $out;
}

function twitlonger_replace($text) {
  $tmp = strip_tags($text);

  if (preg_match_all('#tl.gd/([\d\w]+)#', $tmp, $matches, PREG_PATTERN_ORDER) > 0) {
    foreach ($matches[1] as $key => $match) {
      $longtweetraw = file_get_contents('http://tl.gd/'.$match);
      $longtweet = preg_replace(array('/\n/','/<br..>/')," ",$longtweetraw);
      $longtweet = preg_replace('/(.*)id="replybutton"(.*)\<p\>(.*)\<\/p\>(.*)p class="clientlink"(.*)/',"$3",$longtweet);
      $longtweets[] = theme('external_link', "http://{$matches[0][$key]}", "<p style=\"padding:5px;margin:5px;border:thin dashed;\">$longtweet</p>");
    }
  }

  if (empty($longtweets)) return $text;
  return implode('', $longtweets).''.$text;
}

function twitter_photo_replace($text) {
  $images = array();
  $tmp = strip_tags($text);

  // List of supported services. Array format: pattern => thumbnail url
  $services = array(
    '#youtube\.com\/watch\?v=([_-\d\w]+)#i' => 'http://i.ytimg.com/vi/%s/1.jpg',
    '#twitpic.com/([\d\w]+)#i' => 'http://twitpic.com/show/thumb/%s',
    '#imgur.com/([\d\w]{5})[ls]?[\.\w]+#i' => 'http://imgur.com/%ss.png',
    '#imgur.com/gallery/([\d\w]{5})#i' => 'http://imgur.com/%ss.png',

.
.
.

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

Improved Sharing and Twitter Bookmarklet



 

Since my last forays with Mini-blogging (or microblogging) and bookmarkletting, lots of things have changed. Specifically for this purpose, the url-shortening service urlTea was yanked. It forced me to switch to tinyurl and then to tr.im – which also almost went down. Along with increasingly sharing more links on sites other than Twitter, I combined some of my other bookmarklets into an all-in-one server-driven bookmarklet bonanza.

This new server side script will facilitate sharing links via Twitter, Facebook, email, BB Code forums, blogs/Myspace. Since the Twitter explosion this year – many more cool url shortening services have opened and offered API’s like is.gd and u.nu. Twitter now uses bit.ly/j.mp but since it needed a login, I didn’t bother. There is no more JSON, just straight API calls.

This new code still solves the problem of allowing you to provide context for your tweet or other form of sharing – and also integrates flexibility amongst using shortened URLs or not, and which shortening service to use. It can be used as a stand-alone script, or as a bookmarklet. The bookmarklet still captures the link, title, and any selected text on the page you want to share. It can be set to automatically forward to Twitter, or to stay on the helper popup. In the case of the latter, there is still a button that allows you to forward the link, title, and any selected text to Twitter where you handle editing and the character count.

The beauty of this approach is – if you don’t want to share on Twitter, or also want to share on other sites, you can get the code needed to post on MySpace or Facebook or by email or on sites that use BBCode. Here is the bookmarklet. As usual – drag it to your Bookmarks or Links bar, or simply bookmark it.

Twiit or Auto-Twiit

As always, the bookmarklet is a simple link that contains javascript. You click it whenever you’re on a web page that you want to share. Again, I offer no appologies or warranties. Take it and make it yours if you like it. Or just use the bookmarklet here and let me know how it works.

The PHP:

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

June 21, 2009

Iran Crossing The Rubicon?



 

seems so

La Figa ? Tehran Protests: Her Name Was Neda (Warning: Graphic Video)

The global community has been galvanized by the tweets, Facebook logins, cellphone pictures and reports from Iran. Now comes this video of a young a woman shot in Tehran by Basiji police force, which I came across after seeing “neda” and “#neda” on Twitter, where the words kept showing up in in the Tehran and Iran threads. “Neda” means “call” or “proclamation” in Farsi, an odd and chilling coincidence. I clicked a couple links, and then a few more and found the details:
At 19:05 June 20th
Place: Karekar Ave., at the corner crossing Khosravi St. and Salehi st.

A young woman who was standing aside with her father watching the protests was shot by a basij member hiding on the rooftop of a civilian house. He had clear shot at the girl and could not miss her. However, he aimed straight her heart. I am a doctor, so I rushed to try to save her. But the impact of the gunshot was so fierce that the bullet had blasted inside the victim’s chest, and she died in less than 2 minutes.
The protests were going on about 1 kilometers away in the main street and some of the protesting crowd were running from tear gass used among them, towards Salehi St.
The film is shot by my friend who was standing beside me.
Please let the world know.

The video is extremely graphic, It also keeps getting pulled from YouTube, so you may have to search for NEDA to find it if this version gets yanked. Twitter hash “#neda” has become a new update site for the demonstrations in Tehran, with updates urging protester to not wear contact lenses, to wear green, and for everyone reading to change their Twitter and blog timezone to GMT + 3:30 (which is Tehran time) to baffle security forces searching for those reporting on the protests.

War on the streets of Tehran | FP Passport

the clear implication of Mousavi’s actions is that he no longer sees the supreme leader as the legitimate, unquestioned ruler of Iran. I’m sure an increasing number of Iranians feel the same way, even if the regime ultimately beats them into submission as we watch helplessly, glued to our monitors. And that will spell the end of the Islamic Republic in the long run.

I watched Zbig on Fareed Zakaria GPS today and he made a great comparison, one in which the Neocons would be wise to consider before trying to ratchet up tensions with their typical empty rhetoric. He compared this to the Eastern European revolutions in 89 and how Bush I (who is seeming more and more underrated in Foreign Policy as the days go on) and how the US didn’t get involved for fear of giving the Soviet/Communist neocon-equivalents the political capital they would need to crack down on western-agitated uprisings. Their revolutions happened organically and were ultimately more effective. Obama is trying to do the same here.

Khameini has already tried to brand this as being foreign influenced and has already expelled or imprisoned a bunch of western AND Iranian journalists. But the class-levelling people power of the internet wins again. Some people are already calling this the Twitter Revolution.

Good sources for info:
#IranElection tracker for the easily overwhelmed (robinsloan.com)
Iran Unrest – twazzup twitter search
Global Voices Online
The Daily Dish | By Andrew Sullivan

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

March 31, 2009

ShamWow Guy Had A Checkered Past (Go Figure)

Filed under: Humor, Twitter — Tags: , , , , , , , , — webadmin @ 11:33 am


 

As part of my research into Twitter (ok I guess I’m hooked … for now), I set aside some time to monitor the the twitterchatter on our boy Vince “Shamwow” Shlomi and his recent biting/slapping incident. Due to my dilligence (get it?) I unearthed a stunning article that links this guy to (gasp) the Scientologists!!!

For real.

Of course I could just have checked my Google Reader but where’s the fun in that? This sordid tale is explained in detail in this article from Gawker, and in brief at the bottom along with my favorite Shamwow tweets:

Scientology: The Story Behind Scientology’s Slap Chop Scandal

Gawker has laid hands on the ShamWow guy’s 2004 lawsuit against the Church of Scientology, and it’s good! He accused the cult of infiltrating his food-chopper business and stealing it from him.

ShamWow pitchman Vince Shlomi, who was arrested last month because a hooker who allegedly bit him on the tongue and he pummeled the shit out of her, became a Scientologist in 1982. According to his 2004 lawsuit against the cult (read the full lawsuit here), the Scientology was part of a conspiracy to steal his successful food-chopper business from him.

In the early 1990s, Shlomi started a business selling something called “the Chopper,” which appears to be a precursor to the Slap Chop of “you’re gonna love my nuts fame,” which he has more recently been selling in infomercials. According to the suit, he was making more than $1 million a year by setting up demonstrations in malls and using his preternatural pitchman skills to sell the Chopper. Sounds high, but we’ll believe it!

As the Chopper business flourished, Shlomi started bringing his coreligionists on board, teaching them how to hypnotically captivate mall-goers and sell them useless kitchen crap. He cut his Scientology salesmen—including two colleagues named Ron Chacon and Steve Harris—in to the tune of $1.50 for each Chopper sold. All told, Shlomi was employing more than 40 Scientologists in the enterprise.

In the late ’90s, Shlomi decided to pour the profits from the Chopper business into his movie, The Underground Comedy Movie. But his Scientologist employees grew jealous of his business success and his his Hollywood ambitions, and concocted a smear campaign against Shlomi and the movie, which the cult decried as “bad art” (which, let’s face it, it was).

Around the same time, Shlomi turned over day-to-day operations of the Chopper to Chacon and Harris, who allegedly promised to keep paying Shlomi $1.15 for every Chopper they sold. Shlomi claims they sold 1 million (again, sounds high!). But according to the complaint, Chacon and Harris pocketed all the money and stole the business.

Ever the good Scientologist, Shlomi tried to use the cult’s endless labrynth of beaureaucratic procedures—rather than a regular court—to get his money and business back from Harris and Chacon. In response, the complaint says, Harris and Chacon launched a cult-approved “black propaganda campaign” against Shlomi.

That campaign resulted, the complaint says, in Shlomi being hauled up before a Scientology court, which heard unspecified evidence from 22 people and branded him a criminal. Shlomi never heard the specific charges. When he appealed, he was labeled a “Type B declare,” Scientology-speak for “criminals with proven criminal records.” But Shlomi still believed in Scientology’s tenets, and went round and round for years trying to clear his name. Eventually he was allowed back into the cult’s good graces, but he got the run-around when he tried to use Scientology procedures to get his money and business back from Chacon and Harris. He kept at it until 2002, when he learned from a friend that the church had allegedly forced witnesses to denounced him in the kangaroo court. It was, Shlomi decided, a concerted effort to strip him of his business.

The suit was dismissed four months after it was filed. Shlomi left the church and started pitching ShamWows and Slap Chops on TV, got famous, and beat up a hooker. And that’s the story of how the phrase “you’re gonna love my nuts” started out with a Scientology front.

and now – the short version:ohnotheydidnt: You’ll laugh, you’ll cry, you’ll love his nuts.

terminally untalented simpleton starts stupid business, uses it to fund his incredibly shit comedy movie, is shocked when said incredibly shit comedy movie is universally trashed, gets his stupid business stolen from him by fellow Scientologists, is dragged before Kafkaesque “Scientology court” (wut) that labels him a “Type B” criminal (double wut) so he escapes the church and becomes a famous infomercial guy, which leads to the inevitable second act breakdown in which he loses his mind, picks up a prostitute, and savagely beats her. That’s pretty much the beginning of the Great American Novel right thSHORTER VERSION: ere, proving that much like Billy Mays, F. Scott Fitzgerald and Saul Bellow don’t have shit on Vince.


My favorite ShamWow Tweets:

  • Is nobody going 2 defend Shamwow dude? Hooker was biting his tongue & wouldn’t let go! How is that ok? This is why bitches have 2 blackeyes!
  • Link: The Story Behind Scientology’s Slap Chop Scandal – The full story behind Shamwow/Slap Chop pusher Vince… http://tumblr.com/xuv1ig07x
  • So the ShamWow guy is a hooker-beatin’, ex-xenuphobic film hobbyist? My mind (quite unlike an Original ShamWow), is unable to absorb it all.
  • Reading about that ShamWow guy battering some prosty in South Beach hotel room brawl. See mug shot: http://tr.im/i1aL
  • So shamwow should hire me to be their new spokesman i promise to not punch hookers… I think
  • So now that slapchop/shamwow Vince has been arrested for beating up a prostitute, will Billy Mays be on all the infomercials from now on?
  • ShamWow Guy Busted for Allegedly Beating a Prostitute… However, prosecutors won’t press charges saying DNA was completely wiped clean.
  • Does anyone else find a strange resemblance between the ShamWow guy and Moe from the Simpsons?http://twitpic.com/2mj93
  • He’ll definitely need a Shamwow to clean up that mess
  • just got spam email from the Shamwow company. Feel like physically assaulting a prostitute. strange.
  • Next product shamwow guy comes up with is a hooker mouth guard
  • http://is.gd/pxgX — ShamWow Guy ShamPows Hooker’s Face
  • Did shamwow guy say “you’re gonna love my nuts” to the hooker that almost bit his damn tongue off? Idiot! LOL!
  • New use for shamwow. Get it wet and you can throw a beatdown on hookers. Sorry hookers
  • Who would win in a fight, Chris Brown or the ShamWow guy??
  • I’m gettin one just to dry off wit when I get out the shower. Fuck a towel…..Shamwow
  • Can i stop being afraid of shamwow imitators?
  • “You’re gonna love my nuts,” says the inmate who has made the Shamwow guy his prison bitch.
  • How many ‘ShamWow guy’ costumes will we see at this years halloween? Bonus points for the cannabilistic hooker accessory!

prosty??? LOL!

I <3 twttr & h8 it at the same time

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

March 27, 2009

Twitter

Filed under: NBA, Obama, Politics, Shaq, Society, Twitter — Tags: , , , , , , , , , — webadmin @ 7:00 pm


 

I’ve already predicted the death-by-fad-killing of Twitter many places after Obama made it cool for the Hollywood elite and political lemmings to use. And, of course, athletes are now using it. Women soccer players from the new pro league that starts this weekend are going to be updating their twitter page before, during and after their games. Publicity stunt much?

Usually these things are either one way communication or someone is hired to do the tweeting which makes it as unique as a fan letter reply – or so I thought. Check out Shaq’s Twitter feed:

@PhoenixSunsGirl is now @DigitalRoyaltyabout 3 hours ago from TwitterBerry
@TallLadyTX wht part of texas u n I live in pearland and friscoabout 4 hours ago from TwitterBerry
@divasunny2u yea right u r gonna fall twiceabout 4 hours ago from TwitterBerry
@kirkfox na 2about 4 hours ago from TwitterBerry
@prasannathani thanks kevabout 4 hours ago from TwitterBerry
@WiseSupreme I neva hate bro love lebron dats my dude just a friendly challenge calm down o wise oneabout 4 hours ago from TwitterBerry
@deejayquest I’m pretty gOod daddy were u dj atabout 4 hours ago from TwitterBerry
@divasunny2u yea rightabout 4 hours ago from TwitterBerry
@Jenisizzle why thank uabout 4 hours ago from TwitterBerry
@KenPeters I do it bigabout 4 hours ago from TwitterBerry
@Jenisizzle loveabout 4 hours ago from TwitterBerry
@jonathanchard u groped meabout 4 hours ago from TwitterBerry
@pookiedmb dam whatabout 4 hours ago from TwitterBerry
@divasunny2uwhat up playaabout 4 hours ago from TwitterBerry
@firedancergirl kabout 4 hours ago from TwitterBerry
@Roy1524 I’m n utahabout 4 hours ago from TwitterBerry
@francescap thanksabout 4 hours ago from TwitterBerry
@timrosenblatt excuse me what’s recosabout 4 hours ago from TwitterBerry
@yoMICK try to babout 20 hours ago from TwitterBerry
@James2Stapleton nopeabout 20 hours ago from TwitterBerry
@bc142 lolabout 20 hours ago from TwitterBerry
@James2Stapleton yea man if he’s the future gotta lead him n da right direction he’s a good kidabout 20 hours ago from TwitterBerry
@MsSGlover naaaaa4:58 PM Mar 26th from TwitterBerry
@girl_alex thks4:57 PM Mar 26th from TwitterBerry
@johnmark88 wt up4:57 PM Mar 26th from TwitterBerry
@icanhazvajaja shhhhh4:57 PM Mar 26th from TwitterBerry
Just arrived at portland arena first person I c is my favorite reporter. Dam I love cheryl miller4:37 PM Mar 26th from TwitterBerry
Stay tuned-prepare for SHAQ to “enlyten” you!!!4:19 PM Mar 26th from TwitterBerry
100 people n the prtland area just came for tickets wow portland twitterers r niiiiiice3:53 PM Mar 26th from TwitterBerry
And the winner is @cbakes and @dondondon and @mmirkil3:29 PM Mar 26th from TwitterBerry
@studiophile1234 were r u3:28 PM Mar 26th from TwitterBerry
@ryanguard cali or fla3:27 PM Mar 26th from TwitterBerry
@djjuggy I love utah sorry about the jazz owner he was a great man3:27 PM Mar 26th from TwitterBerry
@mmirkil u better hurry3:26 PM Mar 26th from TwitterBerry
@MsRochelle_ u r to short I mite not c u3:25 PM Mar 26th from TwitterBerry
@joniquepryce I’m there alot3:25 PM Mar 26th from TwitterBerry
@HERBIECRICHLOW he was a nice guy he really was3:25 PM Mar 26th from TwitterBerry
@24kt_Mac_Daddy bring it were3:24 PM Mar 26th from TwitterBerry
@Sk8FashionRight probly wnt happen does he even start3:23 PM Mar 26th from TwitterBerry
Anybody in portland touches me rt now will get two tickets I’m at redstar cafe3:23 PM Mar 26th from TwitterBerry

Damn – when does he have time to play ball? No wonder the Suns are out of the playoffs this year.

Bookmark and Share Email This Print This PDF This Blog This Facebook Twiit Google Google Yahoo! Buzz Ping StumbleUpon LinkedIn MySpace

Popularity: unranked [?]

Powered by WordPress

Blog Information