Category Archives: Uncategorized

Apple has always been known for their innovation and technology. I recently read an article about how they don’t believe in a “for the people by the people” model, but instead follow one that’s “for the professionals by the professionals”. This has both positive and negative outcomes. Everything that apple produces is extremely clean, professional, and very well polished. However, it forces them to be selective, limited, and exclusive, which is all negative when it comes to the internet. Freedom of expression simply does not exist within Apple. You might think you are free to express yourself, but only according to how, when, and where Apple tells you to.

With this information in the back of your mind, Apple recently sued Amazon for calling its app store Appstore. It has publicly lectured competitors to “create their own original technology, not steal ours”.

Then Apple turned around and blatantly stole Greg Hughes’, Wi-Fi Sync App — but only after first rejecting it from the Apple App Store. Infact, they not only stole the idea/concept and name, but they also ripped off the icon. Greg has sold his app in the Cydia app store at $9.99 and he has reportedly sold over 50,000 copies in the last year. Can you imagine how many more copies he would have sold in the regular Apple App Store? Greg has also reported that when his app was rejected from the Apple store, a developer from Apple called him to tell him how great his app was and how the entire Apple dev team was extremely impressed with it.

I think that Apple needs to decide where they stand. If they truly believe in copyright and patents, they have to use the same stick when judging themselves. They cannot steal other’s work, and then turn around and preach how you should not steal innovation, designs, and code.

If you want to read the full article, you can find it at: http://www.theregister.co.uk/2011/06/08/apple_copies_rejected_app/

[updated: Sep 30th, 2018 | Cleaned up script, and references “perfect” plugin update system]

NOTE: Please checkout my “perfect” WordPress plugin update solution: http://blog.vpetkov.net/2018/09/30/easy-fully-automated-wordpress-plugin-update-system

When you host your own WordPress installation, and there is some sort of an update about every month or so, it can quickly get very annoying doing all the upgrade steps manually (for the people who do not have a CPANEL or FTP account). Now imagine hosting 5-6 WordPress installations. Now imagine 100+. Welcome to my nightmare. Eventually I caved in and wrote this:

So, to summarize, this will download the latest version of wordpress, unzip it, and move the new files accordingly.
At the end, it will remind you to “upgrade” your DB, just in case there is an upgrade. I highly suggest backing up your primary blog before you begin this, just because it’s the “safe thing” to do.
That said, in the 10+ years I’ve used this (started long before I posted something here) – I’ve never had anything go wrong!

If you just started reading this directly and didn’t read my “what is Tasker”, please read my short post: (http://blog.vpetkov.net/2011/05/10/androids-best-app-tasker-visual-programming-and-automation/)

If you are running ICS 4.0, please read: (http://blog.vpetkov.net/2011/12/27/tasker-ics-android-4-0-blackberry-sound-profiles)

Don’t let the length of this post scare you — I just wanted to provide the technical/developer details. You can get this to work in less than a couple of minutes by downloading the zip file and ONLY reading the “GETTING STARTED” section.

 

GETTING STARTED:

0.) Please download the zip file bellow if you haven’t done so already – Blackberry_Sound_Profiles_for_Android.zip

1.) First, if you haven’t already, install Tasker (you can use the Android Market, or the guys’ website). You can play with it for 7 days for free.
2.) It will create a “Tasker” folder on your SD card. Under that you will find “tasks” and “profiles” folders (if they don’t exist yet, create them).
3.) Download the zip to your computer, mount your phone’s SD card and go into the main “Tasker” folder under the sdcard. If the file ends in .prf, put it in the “profiles” folder. If it ends in “.tsk”, place it in the “tasks” folder. Unmount, disconnect your phone.
4.) Now that you have them, you need to load what you want/need into the program. Open up Tasker (program), hit Menu, and go to “Profile Data”. Do a “Import One Profile” or “Import One Task” select one of the “tabs” (Profiles, Tasks, Scenes), and hold it — an “Import” option will present itself, which will let you import a Profile or Task (or not relevant here – a Scene). This is because Tasker changed the way profiles and tasks (and Scenes) are imported . As soon as you select that, you will see all the files in the directory that you copied. Now you can import whatever you want.

You should import the “Volume Buttons” Profiles (note: this is a profile), at least the “Normal” and “Sleep” tasks (note: these are tasks). The volume buttons profile is honestly a life saver since any time you tap a volume button, it will actually restore to the sound-profile task you have selected.

Now to use them,

5.) Hold down on the home screen, select Widget (for ICS 4, Widgets are created by going to Applications, and shifting over to widgets), select Task. It will show you a list of your tasks. Select “Normal” for example. It will show it to you (in case you have to make any changes last minute — don’t do it this way, always make them in editor), now select the green check and you are Done! You can now use it as a “program” on your home screen. Add at least 2 this way, and select them. Wait 1-2 seconds. You will see how it select/enables each, and then after it enables it, hit the volume keys on purpose, and then wait 1-2 seconds again to see how it restores it.

END OF GETTING STARTED – THAT’S IT! You have it working!

 

 

Ahh, you’ve continued reading and you haven’t skipped this…Clearly you care about some of the theory…

One of the biggest problems with Android is the sound profiles. I will start off with the main sound profile BUG:

Try setting your Settings -> Sound -> Vibrate to “Only when in Silent”, and then hold the power key, change the “Silent mode” to ON. Now hold the power key again, and change the “Silent mode” to OFF. Check your Settings -> Sounds -> Vibrate mode — it is changed incorrectly to “Always”. This renders the built-in “sound profiles” completely useless.

Here are bug reports that are all for the same thing: Issue 20463 and Issue 13732

UPDATE: Please note that Google “sort of” fixed this, to a point, where we can now correctly implement the functionality using Tasker at least. It’s not there by default, but the “Silent Mode” now works for on (sleep), off, and vibrate, and there’s a separate toggle-able Ring+Vibrate feature.

Pretty much, half of these are the same issue. The main problem is that the Silent and Vibrate options for android, are really one single “Silent Mode”. The problem arises because Sound -> Vibrate settings only apply for “Silent Mode”. This means that you cannot have a completely silent profile and a vibrate only profile, and a “normal” profile. This is the most evident to anyone coming from a blackberry, where the sound profiles are flawless. I’ve read thousands and thousands of questions asking “how do I get sound profiles like on the blackberry”. Personally, this was the first thing that drove me crazy when I moved away from the blackberry.

Most people default to using a program which creates “Profiles” — setting bundles which simply toggle each Sound option (In-Call volume, Media, Ring Tone, Notification, Alarm, and System). The best one I’ve seen is AudioGuru, which is great, but it does lack some customization. The one additional step that most programs lack also is some sort of a guard for the volume buttons which toggle the ringtone.

My goal when thinking about all of this was to create a solution that was simple, extendable, and complete. The main points I was going after was to have profiles that are completely stand-alone, extendable/fully customizable, and completely scriptable. The end result was what I call “Blackberry Sound Profiles for Android”.

 

First off, here’s the download:

Blackberry_Sound_Profiles_for_Android.zip
(md5: 71d0701ce63a6953a997145c758753c8)

(don’t forget to go to Settings -> Sound -> and UNCHECK “Use incoming call volume for notifications”. Also, Settings -> Language & keyboard -> Android keyboard -> and CHECK “Sound on keypress”)

The logic becomes part of 3 sections. The FIRST SECTION is the Tasker sound profile tasks. These are “stand alone” tasks, which simply encompass every aspect of a sound profile. Let me walk through one of them:

“Normal.tsk.xml”

0.) Set a default icon (used grey star in this case)
1.) Wait – 2 seconds
[note – for ICS 4, there is an extra step in here turning off the Ring+Vibrate fixed feature]
2.) Silent  Mode – off
3.) In-Call Volume – 5
4.) Media Volume – 9
5.) Ringer Volume – 5
6.) Notification Volume – 5
7.) System Volume – 6
8.) Alarm Volume – 7
9.) Set Widget Icon (to %PROFILE – used default grey star)
10.) Variable Set (%PROFILE to “Normal”)
11.) Set Widget Icon (to %PROFILE – used the grey sound icon)
12.) Notify – %PROFILE
13.) Wait – 1 second
14.) Notify Cancel – %PROFILE

Let me clarify some key things:
step #9 is needed in order to clear the old Icon back to a star.
step #10 sets the global variable to the name of this profile
step #11 activates the pressed/toggled widget

I’ve also included a “Sleep” sound-profile task (toggles all down except alarm and media), a “Work” sound-profile task (same as “Normal” sound-profile task, but the notification is less and the system sound is less so the keyboard is not obnoxious), a “Loud” sound-profile task (makes everything as loud as possible basically), a “Vibrate” sound-profile task (like sleep, but has vibrate on), and a “On-Call” sound-profile task (like sleep, but ring tone is low).

I am not sure if you are already picking up what’s going on, but basically, the idea is that you have a few of these sound-profile tasks, and you create widgets on the home screen. They all show up as grey stars. When you press “Normal” or “Sleep” for example, it changes the star to the correct icon (Sound Icon, or Muted Icon), and shows it on your home screen and notify’s in your notification bar (after which, a second later, it clears the notification bar). Now, go through the other profiles to see what they do. They are all pretty much the same, except the Vibrate profile, which uses step #2 to select the official Android “Silent” mode, with a Vibrate outlet.

Now, the SECOND SECTION is a single Tasker task called “Sound Profile” which has one step:

1.) Perform Task – %PROFILE

And now you see why step #10 from section one is needed. When this task is called, it will change the current Sound profile to the global variable (%PROFILE). Please import this task too. Why is this needed you ask? Because of my clever hack in the THIRD SECTION:

Here is where you have a Tasker Profile. It is called “Volume Buttons”. The basic logic is as follows:

1.) If Variable Set %VOLR (ringer volume), then call the “Sound Profile”

This essentially achieves a volume-reset every time you accidentally hit the volume up or down keys. Now you can see why the “Wait – 2 seconds” was needed. The key part about this is that it uses your global variable, and it resets your volume to the last Sound profile that you selected. Great huh? Please make sure you import the “Volume Buttons” profile into Tasker.

At last you are Done! You now have individual Tasker tasks which you can make widgets out of. I have the 3 that I use the most – Normal, Silent, and Work (work being a bit quieter on the notification and system sound for the keyboard noise) on my main home screen. Then I have the Loud, Vibrate, and On-Call on another screen since I use them less often.

OPTIONAL FOURTH SECTION FOR EVERYONE WHO NEEDS AN ON-CALL PROFILE

For the people interested, the ‘On-Call’ task works in a super elegant way: it silences everything except the ring tone (which it lowers), the alarm, and the media volume. The media volume is the key here. Let’s say you want SMS notifications but not emails while you are on-call. They both use the “notification” system, so there’s no way to do this by default (yet another ex-blackbery annoyance). What you can do is write a Tasker profile which interprets a “Notification Messaging, *” notify, (you can check the time if you are only on-call during the night or day) and then have the action for the task for the profile call the “Music Play” action which simply plays your SMS sound as an MP3. This essentially lets you isolate one application from another, by using the fact that you can play the selected notification through the media outlet. Beautiful Eh?

I hope all of this helps people out.

UPDATE – Added “One Ring” Task and Profile Monitor

I’ve updated the zip pack with two additions: a task which will provide you with a “One-Ring” sound-profile task — it’s basically the normal profile, but it brings the Ringer Volume to 0, and it increases the Media Volume up to 11. Also, I’ve added a “One_Ring_Monitor” profile, which intercepts calls, and plays a music file (mp3, wav, ogg, others…) — giving you the ability to play a notification — thus a single beep/sound.


If you just started reading this directly and didn’t read my “what is Tasker”, please read my short post (http://blog.vpetkov.net/2011/05/10/androids-best-app-tasker-visual-programming-and-automation/)

Let’s start with the problem – I can’t stand unlocking my phone every 10-15 minutes when I decide to look at the screen either because I heard a beep, or because I want to check for a work email/SMS. The obvious solution: get rid of the lock screen. The new problem: now my phone is not secure. I need something to toggle this functionality on a “need basis”. Solution: use Tasker to create a task which will be created into a widget.

Here’s the logic:

0.) Set a default icon (used key in this case)
1.) Keyguard – toggle
2.) Notify – KEYGUARD IS OFF, if %KEYG is off
3.) Notify – KEYGUARD IS ON, if %KEYG is on
4.) Wait – 1 second
5.) Notify Cancel – KEYGUARD IS OFF, if %KEYG is off
6.) Notify Cancel – KEYGUARD IS ON, if %KEYG is on
7.) Set Widget Icon – Unlocked Lock, if %KEYG is off
8.) Set Widget Icon – Locked Lock, if %KEYG is on

Download Takser task: Keyguard.tsk.xml.zip (md5: 0e2f2fd8cdaa5ff71a1fd5b0329bdfe6)
Please unzip it, copy it to your device, and then import it into Tasker.

Make it into a widget, press it, the icon will change to an unlocked keylock, and your lock screen goes away. Hit power, check to see that when you hit power again, your lock screen is not there. The volume keys will turn on the screen too. If you press the widget again, the icon will change to a locked keylock, and now you will have your lock screen. What I personally do is use the pin lock screen, and then toggle it this way while I am at work. As soon as I step out or anything like this, I toggle my lock back on.

My opinion of Tasker in one sentence: “This is the first app that you should install on every android phone“.

A few months ago I needed an “automation” app. I was going to default to Locale which I had used when it was still free (this was before there was an official app store for Android), but the $10 cost made me look at my options — I figured if I was going to pay that amount, I might as well get the best app to do this. My problem with Locale is that it’s simply not that powerful, it doesn’t have tons of features, and all the good pluggins, instead of being built in, are additional paid add-ons. I am really glad I looked else where because I stumbled upon Tasker (http://tasker.dinglisch.net/). The official description for Tasker states that “Tasker is an application for Android which performs Tasks (sets of Actions) based on Contexts (application, time, date, location, event, gesture) in user-defined Profiles, or in clickable or timer home screen widgets.” I am not sure that I can describe it any better, so let’s leave it at that. If you want to learn more about Tasker, start here: http://tasker.dinglisch.net/tour.html

One thing that immediately popped about Tasker was the insane amount of built-in contexts, settings, options, detections, notifications, and actions. One thing led to another, and I started using Tasker for everything. I realized it had so much potential that I went back to stock 2.3.4 and just used Tasker to gain all the cyanogenmod functionality (that I needed at least).

The reason I decided to even write this post is in order to share two “programs” that I wrote, which I think are extremely helpful. The first one is called “Keyguard”. The second one is “Blackberry Sound Profiles”. I am putting these two in their own posts so that they can easily be indexed and searched url wise. I know personally that the most sought after thing on Android is the blackberry sound profile functionality. Well, it’s finally here! See my next two posts for all the information.

Since it seems like people are really interested in this information (especially those out side of the US where updates are not pushed out), I will continue with the updates regarding the Nexus S. Here’s the next (no pun) operating system update: 2.3.4:

a14a2dd09749.signed-soju-GRJ22-from-GRI40.a14a2dd0.zip (md5: 92b0f0a0b57a7cf10d2d70610c8bb9fb)

Again, this is directly from google (it is even linked to google), and you should follow the 7 steps from the http://blog.vpetkov.net/2011/03/11/google-nexus-s-update-manually-to-2-3-1-2-3-2-and-2-3-3/ article.

Please note that the update WILL work if you are running “GRI40” (build number in Settings -> About Phone)
The biggest update when it comes to new features seems to be that Google Talk has voice chat! There are a lot of bug fixes.
For the bug fixes, check out: http://www.google.com/support/forum/p/Google+Mobile/thread?tid=3812c1acf93b482f

 

IF YOU GET AN ERROR:

Please just grab the FULL 2.3.3 (f182cf141e6a.signed-soju-ota-102588.f182cf14.zip) system, install it and then try again. It will work!

 

IF YOU JUST WANT THE RADIO UPDATE:

XXKD1-GRJ22-radio-nexuss-unsigned.zip (md5: 57659f04148ebfa849ef523544f2a3dd)

Note: I personally couldn’t update just the radio update from 2.3.3 (with GRI40) – kept getting the status 7 signature verification, so I used the 2.3.4 update to get the radio patches. I’ve seen people who have been able to apply the radio update to 2.3.3 without any problems.

 

NOTE: Look at the new post above if your phone is *at* 2.3.3 and you want to go up to 2.3.4

If you just want the LATEST update: grab the FULL 2.3.3 image (f182cf141e6a.signed-soju-ota-102588.f182cf14.zip)

I decided to contribute back, mention a few vital steps, and provide a few important files now that I solved this — in order for someone to go from 2.3(.0) to 2.3.3
This assumes that you have not rooted your phone. If you have, you need to un-root it and go back to either 2.3.0, 2.3.1, or 2.3.2,

First of all, if you use the built-in “update” method, the updates need to be consecutive. For this, they are very small.

Let’s assume you just bought your Google Nexus S. It came with 2.3 (or 2.3.0 in reality). The first step is to apply the 2.3.1 update. I’ve called this:

update1.zip (md5: a35798d84104c7cb1d26d7946ce843fc)

The general instructions are:

0.) Put the file into the /sdcard directory.
1.) Turn off your phone
2.) Hold Power and Volume-Up until you see the recovery menu (lots of colors and 4 options).
3.) Use the Volume-Down key to scroll down and  select “Recovery” by pushing the Power key.
4.) Wait for the triangle with the exclamation point. Push the Power key and while holding it, tap the Volume-Up key.
5.) Now you can use the  the Volume keys to go to “apply update from /sdcard” and then the Power key to select it.
6.) Select the appropriate ZIP file, and then use the Power key to apply it.
7.) When everything is done, go to the Reboot option with the Volume keys and then use the Power Key to select it.

Now, that said, after you apply the first update, you go from 2.3.0 to 2.3.1. Now, apply the 2.3.2 update. I’ve called this:

update2.zip (md5: 714e1e1126f1a222c10ffce6c83dc6ad)

Same as before. After you go through the steps and reboot, you will be at 2.3.2. Here is where things get interesting. It seems that you need another update. Its for people who get the “Status 7” error.
This is mostly due to a firmware (those who have: GRH78C or GRH78). Here you will need to apply the LAST UPDATE, the same way you applied update1 and update2:

For GRH78C (md5: 3923f98754f756a83b3ecc44e42a2902)

or

Only for GRH78 (md5: 919d7f2c9e06bb03a2ff74081028bf0a)

At last, reboot, and you are on 2.3.3

Please note that *ALL* of these files have been taken from google and are official. For that exact reason, I have provided the md5 checksums, so that you can verify them before you use them.
Hope this helps.

 

ADDITIONAL INFORMATION AND FILES (If above did not work — very rare):

Some people (very very rare) might still get an error. This is if you have a different radio version. Check: “Settings -> About Phone -> Baseband Version”. You should have either something that ends in “XXKB1” or something that ends in “XXKB3”. Here are the two radios. Apply this the same way as the items above. You might need this BEFORE the GRH78C (or  GRH78) updates.

XXKB1-GRI40-radio-nexuss-unsigned.zip (md5: 4805c255f10eef8b1bd54aa2d27bc30e)

or

XXKB3-GRI54-radio-nexuss-unsigned.zip (md5: 4e9c9cf4d6470be800e00f8508b9c175)

 

LAST RESORT (if nothing above worked — extremely rare):

If nothing worked, try the FULL 2.3.3 OS.

f182cf141e6a.signed-soju-ota-102588.f182cf14.zip (md5: 3e8908941043951da5a34bb2043dd1a0)

Let me preface this with the fact that, you just can’t do this unless your iphone is jailbroken. For the non-curious, stop reading here.

This one came about as I was recently forced at work to switch from using the Unix email system to the hosted Exchange solution, in order for our calendars to be centrally accessible by everyone. Details aside, after adding my exchange to my iPhone (since I am trying to keep my blackberry off BES), I realized that the color schemes absolutely suck. From somewhere, it decided that purple was the best color, and I couldn’t change it. After aimlessly searching through the Calendar.app on the iPhone for a color changing option, I came to the realization that there was no way to do it. Luckily, my iphone was jailbroken, and there are plenty of ways to do this with a little background work. I found this amazing article: http://chriscarey.com/wordpress/2009/02/10/how-to-modify-iphone-calendar-colors-with-sqlite3/

To summarize it, in case the article disappears:

Start by ssh-ing into your phone

One tip that I can give, if you don’t have sqlite3 on your iphone (which you wouldn’t by default), is to scp the file to your computer, apply the changes, and scp it back to the iPhone.

Here are the RGB Values for the Standard Colors:

Red = (181,0,13)

Orange = (229,98,0)

Green = (47,141,0)

Blue = (15,77,140)

Purple = (103,10,108)

So, with the line:

I was able to make my default calendar (the Exchange one) RED — which portrayes the “important” notion and it’s easily visible.

Hope this helps everyone who is trying to accomplish this. Don’t forget to close and re-start your Calendar.app. If you don’t have a jailbroken iPhone, you can change your non-exchange calendars by syncing them to the iCal app, and changing the color back, and syncing them.

[updated: Jan 2nd, 2013 | Updated ‘tiny.pl’ to skip “mailto:” references … it polluted emails with replies]
[updated: Nov 28th, 2012 | Updated ‘tiny.pl’ to be much more efficient which resulted in a crazy speedup]

Yesterday I received one too many emails with a long URL that I actually needed to click on. Why is this a problem you wonder? — I use Mutt. Yes, I’ve heard it all, and yes, I don’t think it’s the best email client, but when you spend all day in a terminal, it’s simply a pain launching the browser to send a single email. It’s a “ctrl+a, #, m, type…type, y…sent”, vs “open browser, go to url, log-in, compose, type…type, hit send”. Anyway, given that I am using the Apple Terminal.app which for some reason has not been upgraded in the last 8 years to include hot linking URLs everywhere (correction: It does, but it does not always handle right clicking multi-line links which contain “strange characters and symbols”), I have to suffer. I’ve been toying with the idea of parsing my mutt emails for a while now, and yesterday I finally decided to sit down and write something. My starting point was my .mailcap entry

My first thought was, why not hook a custom perl script to parse the text from the email, extract the urls, and shorten them? After a little bit of work, I realized that I care about the rest of the text too and not just the URLs. The final solution can be found here:

http://perl.vpetkov.net/tiny.pl [updated: Jan 2nd, 2013]

In order to use it, you need to put this some where (.mutt is a good place), and then modify your .mailcap:
The script starts by NOT reinventing the wheel, and utilizing lynx to parse out the HTML. Please note that this is done only for the ‘text/plain’ type. The way the same script is overloaded is by supplying a second argument for non-html based emails. As you will see, I actually use elinks to parse for html instead of lynx, and the reason for that is because lynx introduces a new character on long URLs for some reason, when used with –dump. This created problems with shortening the URLs. Then the script splits the resulting output into lines, and then it splits each line into “words”. Each “word” is checked for being an URL. If it is, and it’s less than the “trigger” number of characters, it’s shortened and printed, along with the original (nice to keep track). Otherwise, the word is just printed and the process repeats until the end.
While this is EXTREMELY simple concept wise, it is very useful. Is there a down side? — Yes — some potentially private URLs are now public. Solution? — Yes — sign up for bit.ly Pro (free) and use your own domain name. At last, I just want to tack on that while searching for an existing solution to this, I did find a program called “urlview”. I haven’t tried it, but it seems like a much better solution. Here’s some more information on it: http://linuxcommand.org/man_pages/urlview1.html
UPDATE: As it turns out, Terminal.app actually picks up some/most/(all?) long urls. I think it was ‘lynx’ that was wrapping the line at 65-72 characters, which ended up being the cause for the ‘+’ in front of long URLs and the break onto two lines. Anyway, so basically, this means that if you don’t use ‘lynx’ for the HTML parsing, you can potentially click on the links. Either way, I still prefer having tinyurls. Also, I did find a bug in the ‘t’ (non-html emails) version of the script, where in some cases, it will rip out the URL but now show it at all (original or shortened). I noticed this 2 times (out of 1000+ emails), but I just haven’t had time to look into it. I have a feeling that it’s not really my script. The email comes in not containing any html other than an html a href tag. I think that messes with the detection.

For anyone who has not been following what is going on with WikiLeaks, here is a good place to start:

http://www.guardian.co.uk/media/2010/dec/03/wikileaks-us-censorship-row

https://www.eff.org/deeplinks/2010/12/amazon-and-wikileaks-first-amendment-only-strong

WikiLeaks is a “whistle blowing” website. A quick search about it brings you to:

Wikileaks was a website that published anonymous submissions and leaks of sensitive governmental, corporate, organizational, or religious documents, while attempting to preserve the anonymity and untraceability of its contributors.

This week WikiLeaks released some sensitive US documents:

The classified diplomatic cables released by online whistleblower WikiLeaks and reported on by news organizations in the United States and Europe provided often unflattering assessments of foreign leaders, including those of Germany and Italy.

The cables also contained revelations about long-simmering nuclear trouble spots, detailing U.S., Israeli and Arab fears of Iran’s growing nuclear program; U.S. concerns about Pakistan’s atomic arsenal; and U.S. discussions about a united Korean peninsula as a long-term solution to North Korean aggression.

There are also U.S. memos encouraging U.S. diplomats at the United Nations to collect detailed data about the UN secretary-general, his team and foreign diplomats ― going beyond what is considered the normal run of information-gathering expected in diplomatic circles.

None of the revelations is particularly explosive, but their publication could prove problematic for the officials concerned.

The short version of what happened is that WikiLeaks was the target of many DDoS attacks. Eventually, the website was shut down. They decided to change their hosting provider and use Amazon’s AWS (Public Cloud Service). After a few days, Amazon shut down their website claiming that it violated their terms of service. They brought the site in another location, and then their DNS provider decided to shut them down.

The reality is that WikiLeaks is exercising their right of freedom of speech. The problem is that they have some very sensitive information, and this makes political high profile figures nervous. However, when you move past the details of what happened, you come to the realization and real concern — Public Cloud Censorship.

This is the perfect example of why companies are afraid of using Public Clouds (outsourcing your infrastructure to someone else). As you can see from this example, your entire business can be shut down in a matter of minutes, just because someone has a different opinion than yours. This brings massive concern and rightfully so. I really think that the long term solution is private clouds. Take this great technology and deploy it within your own datacenter. When you look at this from the top, it looks a lot like web hosting — you can either outsource your web hosting to a company like DreamHost and BlueHost, or you can do it yourself. There are benefits to both, but at the end, it comes down to your concern for privacy and freedom.

Along with many other people, I personally think that Amazon had the chance to do something great, and as the Guardian and EFF pointed out: “Instead, Amazon ran away with its tail between its legs.”