Pages

Wednesday, August 24, 2011

Earthquake Exchange: Our Favorite Social Media Reactions


 
Earthquake Exchange: Our Favorite Social Media Reactions
Published on Mashable! | shared via feedly mobile


Several Mashable staffers at our New York City headquarters felt tremors from the 5.9 magnitude earthquake Tuesday, but only after we saw tweets begin to roll in from Washington, D.C. Our counterparts in San Francisco, however, really couldn't understand what the fuss was about.

As San Francisco Bureau Chief Chris Taylor put it on Twitter:

Damage from the earthquake was minimal, and no injuries have been reported. While earthquakes are frightening, especially for those of us who aren't used to them, many people used Twitter to deal with that fear — or lack thereof — with laughter. Here's a roundup of the social media reactions we enjoyed.

@Brokelyn





@Evidence





@RolfeWinkler





@YinkaWrites





@andilavs





foursquare





@ariannahuff





@danovation





Devasation





@darthvader





@ischafer





@joeljohnson





@notgiamatti





@pareene





@petershankman





@sethclifford




Image courtesy of iStockphoto, Furchin

More About: Earthquake, foursquare, social media, twitter, virginia earthquake

For more Social Media coverage:




Sent from my iPhone

Earthquake Call Fail: BlackBerry Messenger Beats the Phone Carriers


 
Earthquake Call Fail: BlackBerry Messenger Beats the Phone Carriers
Published on Mashable! | shared via feedly mobile


The 5.9 magnitude earthquake that hit Virginia and rolled through much of the east coast Tuesday caused more inconvenience than damage. Case in point: though no cellphone towers were knocked out, high call volume meant massive service interruptions for users of AT&T, Verizon, Sprint and T-Mobile.

But one cellphone-based service managed to work as normal, according to Bloomberg: RIM's BlackBerry Messenger.

BBM, which can run on either a phone's data connection or local Wi-fi, and uses unique wireless protocols, has gained a reputation for reliability and security. In the Chilean earthquake of 2010, and in the immediate aftermath of 9/11 in New York, it was the only service left standing.

In London earlier this month, BBM was deemed a little too reliable and secure: it was the primary method for rioters to communicate and coordinate. RIM's unwitting role in the riots has come under scrutiny from the UK government.

But on a day when the carriers have all experienced what one Sprint spokesman called "an intermittent mass calling event", and the Department of Homeland Security advised that we not try to call family members on the east coast, RIM has added a much-needed sheen to its reputation.

Its stock closed a dollar higher in late New York trading — not a huge bump, but considering RIM's share price is off 53% this year overall, not to mention the fact that BlackBerry has slipped to third place in the smartphone market, the company will take what it can get.

More About: bbm, blackberry, smartphones

For more Mobile coverage:




Sent from my iPhone

8 Best Practices for Deploying a Top-Ranked Mobile App


 
8 Best Practices for Deploying a Top-Ranked Mobile App
Published on Mashable! | shared via feedly mobile


Krishna Subramanian is the co-founder of Velti Mobclix Exchange. You can follow him on Twitter @ksub15 and read the company blog at blog.mobclix.com.

Developing a mobile app is the easy part. Getting that app noticed is difficult. And getting the app to go viral is like winning the lottery. Yet many developers get millions of downloads time after time. How?

It's all about app store SEO, and some developers have mastered it. Here are a few tips and tricks of the trade to help get your app to the top of heap.


Time Is of the Essence


The first two weeks of an app's life are critical and will likely determine its future visibility in the app store. Top applications develop popularity within two weeks of release, and most applications have a tendency to drop in chart position over time. Remember, whatever you do — marketing campaigns, cross distribution and so on — the quicker you do it, the bigger the impact.

top apps graph

Note: A time series analysis provided findings around top application behavior and their statistical differentiation from other applications over time. Rank represents a normalized score to gauge application success on the same scale across different categories. App rank data was leveraged from the top 100 App Store (iOS) apps.


Pricing: Free, Paid or In-App Purchasing?


With the various pricing models available across app stores, picking the sweet spot for your app's price becomes even more critical. In the early days of the app store, developers had to create two versions of a single app: One paid and one free. Today, in-app purchasing allows developers to manage one audience across a single free app and receive incremental revenue from loyal customers by having them purchase additional content from within the app.

The majority of top paid apps have cut prices at least once during their life cycle, including those that have dramatically changed their chart position. Usually the first price cut (or shift from paid to free) has the most significant effect on chart position.

The majority of top paid apps have cut prices at least once during their life cycle and 10 percent of top apps that have had the most dramatic chart position change have cut prices. The first price cut (or paid to free) has the most significant effect on chart position. Advanced Software Development launched their app FlipANickel at a $1.99 price point, and after seven days, they dropped the price to $0.99. This significantly increased its category rank, which jumped from 2,200 to 229.


Earning Downloads


The ideal scenario for gaining downloads is working with Apple or other app stores to get featured placement. This, however, is reserved for the elite. Many developers do not have the luxury of cross-promoting a new app to users via their existing apps, which is the easiest way to get new downloads. Also gone are Apple's incentivized downloads, meaning developers can no longer guarantee placement in the top of the app store. Less than six months ago, developers could gain 100,000+ incentivized downloads within 24 hours, giving them instant, Top 25 status. But ad networks can still help your app's performance.

Mobile ad networks typically allow you to buy traffic on a CPC or CPM, basis but many will still allow you to buy on a non-incentivized CPI (cost per install or performance) basis. Tracking conversions and downloads is a pretty complicated process that requires you to work closely with your ad network partner. But there are still some gross inadequacies.

Tracking downloads or app opens consists of cross-checking the device IDs of users that clicked on an ad against the device IDs of apps that were downloaded. This is still extremely clunky, and often results in double counting the same downloads. It is also difficult to accurately track this information across mobile apps.

Don't even look at other mediums such as Facebook, Twitter or online advertising until you have a successful track record for buying across mobile.


More Quick Tips


Still burning with questions? Here are some quick tips and best practices for success:

  • Android app rankings differ from app store to app store and are based on a multitude of factors surrounding downloads, including location, devices and engagement levels.

    size graph

  • Size matters! If your iOS app file size is over 20MB, which we usually see in the Adventure & Role Playing Game, Health, and Travel categories, it will require a Wi-Fi connection to download. This immediately cuts you off from a large portion of potential users.
  • Speak to your audience. Take a look at where your highest concentration of users exists. If the users are from South Korea, for example, it might be beneficial to create a localized version of your app.
  • Listen to your audience. Real-time optimization, creating dynamic content, getting in-app feedback, leveraging analytics and adapting your architecture will all help increase virality. Build the app that your users want to use.
  • Distribution platforms such as Mobage from ngmoco/DeNA, openfeint from Gree, and Game Center from Apple are all ways to tap into existing users and the social features of mobile apps. Third-party app stores are also a good way to boost downloads.

App store ranking algorithms are an ever-changing art that platforms and app stores will constantly improve as developers strive for visibility at the top. These tips will help make your app more discoverable on a consistent basis.

Image courtesy of iStockphoto, izusek

More About: App, dev, Mobile 2.0, mobile app

For more Mobile coverage:




Sent from my iPhone

Apple Granted EU Wide Ban On All Of Samsung’s Galaxy S Series iPhone Knockoffs


 
Apple Granted EU Wide Ban On All Of Samsung's Galaxy S Series iPhone Knockoffs
Published on Cult of Mac | shared via feedly mobile

Score a huge, huge win for Apple in its IP fight with Samsung: a Dutch court has just granted Apple a preliminary injunction preventing the Samsung Galaxy series of smartphones from being sold in Europe, effective on October 13th.

This injunction follows a similar injunction made by a German court against the sales of the Galaxy Tab 10,1. That injunction was overturned after it was discovered that the German court had overstepped its own authority in banning Samsung's tablet in the EU.

According to FOSS Patents, Samsung could still get around the ban, since it only prevents three different Samsung subsidiaries registered in the Netherlands from selling the Galaxy S in the EU. Samsung's Korea office could distribute the Galaxy S directly in Europe.

That's unlikely, though. Samsung Korea just doesn't have the infrastructure in place to move the Galaxy S into Europe without going through the Netherlands.

Big win for Apple, if this injunction doesn't get tossed out like the German one. It also means that Samsung better make the next couple months count as far as Galaxy sales are concerned. Similar Posts:





Sent from my iPhone

Netherlands judge rules that Samsung Galaxy S, S II violate Apple patents, bans sales


 
Netherlands judge rules that Samsung Galaxy S, S II violate Apple patents, bans sales
Published on Engadget | shared via feedly mobile
A judge in The Hague just issued a ruling in Apple's patent infringement case against Samsung, prohibiting "the marketing of Samsung smartphones Galaxy S, S II and Ace for violation of Apple Inc. EP 2,058,868." In an official press release, the court explains that The Hague judge ruled to "ban trading of Samsung smartphones Galaxy S, S II and Ace," adding that Samsung also violated other Apple patents with its Galaxy Tab 10.1 and 10.1v, though it's not clear whether or not sales of those devices will be banned as well. The specific patents cited include 2,058,868, which deals with "method of scrolling," 2,098,948 for "recording a flag in connection with multiple screen taps," and 1,964,022, which relates to dragging a slider to unlock the phone. We haven't been able to confirm, but from an online translation it appears that the ban will remain in effect through begin on October 13th. Hit up the source link for the full 65-page verdict (in Dutch).

Netherlands judge rules that Samsung Galaxy S, S II violate Apple patents, bans sales originally appeared on Engadget on Wed, 24 Aug 2011 09:22:00 EDT. Please see our terms for use of feeds.

Permalink | sourceRechtspraak (Translated), Ruling (Dutch PDF)Email this | Comments



Sent from my iPhone

iPhone 5 coming to Sprint, other carriers in mid-October?


 
iPhone 5 coming to Sprint, other carriers in mid-October?
Published on Engadget | shared via feedly mobile
Watch out AT&T and Verizon, it looks like there's an iPhone 5 hat-trick coming this fall. WSJ is reporting that the Apple smartphone will hit Sprint at the same time as those other two networks, bringing a well-needed boost to the carrier's shares in afternoon trading. We've heard mixed reports about an expected release date, but Wall Street Journal sources "familiar with the matter" are claiming that the phone will ship in mid-October. One source also stated that Sprint will begin carrying the iPhone 4 at the same time -- presumably with a price drop in tow. Adding Sprint's 52 million subscribers to the mix could bring the iPhone within reach of customers currently locked into contracts, family plans or corporate agreements with Sprint, making the move a huge win for both companies.

[Thanks to everyone who sent this in]

iPhone 5 coming to Sprint, other carriers in mid-October? originally appeared on Engadget on Tue, 23 Aug 2011 15:42:00 EDT. Please see our terms for use of feeds.

Permalink | sourceWall Street JournalEmail this | Comments



Sent from my iPhone

Simon’s Google Doodle – HTML5 + JS jQuery Game


 
Simon's Google Doodle – HTML5 + JS jQuery Game

Dude, you've heard a lot about Google doodles haven't you? What about that Pacman one? It is just addictive. Company owners know how a funny game and unlimited search powers could be dangerous for productivity. And how it can be a marketing boost. The most amazing thing is that we can create our own addictive HTML game. Actually, this is why we are here today. With this tutorial you'll see how to use some of JavaScript and HTML capabilities to build simple yet funny games.

So, let's rock!

Demo first, please

You can download or try our online demo. Please, don't forget to come back here if you want to just go playing first :)

"Well, actually I don't know what a Doodle is.."

Google Doodles started when Larry and Sergey played with the corporate logo to indicate their attendance at the Burning Man festival in the Nevada desert. Since that day we've seen a lot of funny Doodles, and Google's homepage is used to remind us of all kind of important facts.

But they are more than just paintings, games or experiments. They are made with the best current practices (some of them, created specifically for a Doodle). And Google being as supportive as they are of open source technology, usually release the commented source code, so you can just take a look and try to understand what those amazing guys are doing.

Oh, and I don't know if you knew about it, but today is Simon's day according to 1stWebdesigner's official fake holiday calendar. Seems important, right? This is why we'll build a game for it.

So, what will we be doing?

Simon is one of my favorite games (just after Sudoku and Gammon). Can you think of an easier game to code? You know, four buttons, easy actions. I just can't think of a better starting point to learn HTML5 gaming.

Well, first of all you need to know what this Simon thing looks like. I just found a picture of it at Mercado Livre (kind of a Brazilian e-bay) and made my own version in Photoshop.

Since we are doing it via HTML5, the colors shouldn't be directly on image (otherwise you won't be able to change colors, make your own console…). So I've used Chris Coyier's technique for color animation. Basically we make our non-colored elements, and leave everything else transparent. Then our HTML5 will take care of the color itself (via CSS, background-color). Our final game background will be something like this:

Ok, then. Let's start the fun part.

Basic HTML + CSS

Since our target isn't basic HTML itself, I just grab a copy of HTML5 Boilerplate with a few edits to make it cleaner:

                     

Now we need our gaming HTML stuff. As we've done it ready for different colors we will need to have two layers:

  • Background color- sets the color and will be animated when you activate a button
  • Link – activates all actions for each colored button.
  • Alerts – since they are part of the game itself, we'll put them with all other game controls (level up, new game, game over)

Our HTML for this part will be something like this:

	
 
 
 
 
       

Ready? let's rock!

Oh Yeah!

Oh Noes... Almost there!

As you can see, the four "div.box" elements are the background color for each button (red, blue, green, red).

So when someone clicks #box-click-0 it will "activate" the button #box-0. We have a lot of id's because they result in better JS performance.

Our CSS for that will be:

#main { 	position: relative; 	left: 155px; 	width: 200px; 	height: 200px; } 	.box { 		display: block; 		float: left; 		width: 100px; 		height: 100px; 	} 	a.box { 		position: absolute; 		text-decoration: none; 		background-image: url("../img/bg_game.png"); 		background-repeat: no-repeat; 	} 	a.box:focus { 		outline: none; 	} 	.btnTL { background-position: top left; } 	.btnTR { background-position: top right; } 	.btnBL { background-position: bottom left; } 	.btnBR { background-position: bottom right; } 		 .btnTL, .btnTR { 			top: 0; 		 } 		 .btnBL, .btnBR { 			bottom: 0; 		 } 		 .btnTL, .btnBL { 			left: 0; 		 } 		 .btnTR, .btnBR { 			right: 0; 		 } 	#box-0 { 		background: #c00000; 	} 	#box-1 { 		background: #1506a3; 	} 	#box-2 { 		background: #046606; 	} 	#box-3 { 		background: #ea8f0c; 	} 

Here is our effect: all our links have the console background, bg_game.png (positioned according to what it should be, of course). Since they are on top of divs, what we will see is the bg_game.png AND the element's color ( #c00000, #1506a3…).

Ok, we won't be long on this. Maybe this is enough topic for a single article :)

Search form

Have you noticed the recent (ok, maybe not that recent) Google's switch to real time results? That's pretty cool, yeah, I know. But it makes a little bit harder to link directly to a search results page.

Since our demo has a search form and we want to make it work, let's put a little JS magic on it:

	 

Javascript:

$(function(){ 	$("#search").submit( function(event) { event.preventDefault(); googleRedirect(); } ); }); function googleRedirect() { 	var query = $("#query").attr('value'); 	var url = "http://www.google.com/#q=" + query + "&fp=1"; 	window.location = url; } 

This way it will work ;)

Cookies? No, no, local storage instead!

Well, Cookies are great for some things, but this time they aren't the very best option. Here we will make use of Local Storage. This is basically the same idea as Cookies, it allows you to store data related to your site, the difference is that it's faster and very useful in some situations.

As its name suggest it is local, so it won't be sent to the server (you save a few kbytes and processing). Cookies are limited to 4kB and 20 Cookies per domain. With local storage you can record up to 5MB of user data.

The only downside is that it works only on real browsers and IE8+. So, forget about IE7 this time (maybe later with some jQuery data fallback).

Another huge advantage is that it is surprisingly easy to set / remove;

localStorage["level"] = 15; // create it with 15 as value var level = localStorage["level"];  //now var level is 15 localStorage.removeItem( "level" ); //remove it! 

So, this is why we will use it this time.

A few options

Then we need to have a way to start the game, see which level we're playing, these sort of trivial things. For this, we'll just put a simple HTML box with Google's logo:

Well, what is important here is that our counters have id's wrapping them, so we can easily change their text.

Let the game begin

Random sequence

The very first thing to do when you start this game should be to generate a random sequence. Because this sequence will be the "right path" to be followed by players. We could generate it on-the-fly as our gamer reaches new levels, but it will be easier to do this way.

So we will create a simple function that just generate a random sequence with 50 digits (levels) and only with numbers from 0 to 3 (our colors!):

function randomSequence() { 	var chars = "0123"; // four colors! 	var string_length = 50; //pretty hard, isn't it? 	var sequence = ""; 	for (var i=0; i < string_length; i++) { //we'll have from sequence[0] to sequence[49] 		var rnum = Math.floor(Math.random() * chars.length); 		sequence += chars.substring(rnum,rnum+1); 	} 	return sequence; } 

Binding clicks and hovers

Now we need to prepare our all a.box elements to recognize clicks and to animate properly our div.box when you hover any of them.

This time we will need jQuery .hover() and .click() functions:

$(function(){ //caching our elements for better performance box0 = $("#box-0"); box1 = $("#box-1"); box2 = $("#box-2"); box3 = $("#box-3"); clickbox0 = $("#box-click-0"); clickbox1 = $("#box-click-1"); clickbox2 = $("#box-click-2"); clickbox3 = $("#box-click-3"); clickbox0.click( 	function(event){ 		event.preventDefault(); 		clicked(0); 	} ); clickbox1.click( 	function(event){ 		event.preventDefault(); 		clicked(1); 	} ); clickbox2.click( 	function(event){ 		event.preventDefault(); 		clicked(2); 	} ); clickbox3.click( 	function(event){ 		event.preventDefault(); 		clicked(3); 	} ); var minHover = 0.7; var maxHover = 1; var timeHover = 500; clickbox0.hover( 	function(){ 		box0.stop().animate({opacity: minHover}, timeHover); 	}, function() { 		box0.stop().animate({opacity: maxHover}, timeHover); 	} ); clickbox1.hover( 	function(){ 		box1.stop().animate({opacity: minHover}, timeHover); 	}, function() { 		box1.stop().animate({opacity: maxHover}, timeHover); 	} ); clickbox2.hover( 	function(){ 		box2.stop().animate({opacity: minHover}, timeHover); 	}, function() { 		box2.stop().animate({opacity: maxHover}, timeHover); 	} ); clickbox3.hover( 	function(){ 		box3.stop().animate({opacity: minHover}, timeHover); 	}, function() { 		box3.stop().animate({opacity: maxHover}, timeHover); 	} ); }); 

It is pretty important caching all our elements, since it improves a lot our performance.

Magical JS variable variables and easy error detection

At this point you have coded all the hover and click elements, but when you click them nothing happens, of course. Let's fix it:

// yeah, someone is playing it! function clicked( color ) { 	// refresh my memory, how long have you gone so far? 	var level = localStorage["level"]; // this is our current level 	var clicks = localStorage["clicks"]; //this is our current item INSIDE one level 	var speed = localStorage["speed"]; //to make it more fun, when you get right it goes faster 	// blink it! 	window['box' + color].stop().animate({ opacity: 0.3 }, (speed * 0.5) ).animate({ "opacity": "1" }, (speed * 0.3) ); //variable variables in js via window[varname] :) 	// well, this time you've got it right? 	if ( localStorage["sequence"][clicks] == color) { 		//oh, yeah! 		localStorage["clicks"]++; 		//have you finished this level? 		if ( level == clicks) { 			nextLevel(); 		} 	} else { 		//oh, noes! 		endGame(); 	} } 

Every variable in javascript can be accessed via its own name, like box1 OR as an index inside window array, just like window['box1']. With this we can easily select which is the right element to blink (when you click any button, it should blink, right?).

Ok, you are right! Let's go to the next level

When you get it right, the game should get you to the next level and the events should accelerate a little bit.

Then when you get it right you should also know which is the right sequence at your current level + 1, so let's do it:

function nextLevel() { 	//Oh, Yes 	showBox("#ohYes", 1000); 	// you deserve it, let's move on 	localStorage["level"]++; 	levelCount.text(localStorage["level"]);  	localStorage["clicks"] = 0; 	//let's show you how it'll be 	current = 0; //since it's used just for animation, let's leave it as global var 	if ( localStorage["speed"] > 300 && (localStorage["level"] / 5) == 0 ) { //our maximum speed, and we'll only acelerate it each 5 levels 		localStorage["speed"] = localStorage["speed"] * 0.8; 	} 	setTimeout( function() { rightPath(); } , localStorage["speed"] ); } 

Function showBox just shows our div and hides it after one second.

As you can see this piece of code isn't complete, we will need the function rightPath() to see what comes next. Let's go:

function rightPath() { 	if ( current <= localStorage["level"] ) { 		var sel = localStorage["sequence"][current]; 		window['box' + sel].stop().animate({ "opacity": "0.5" }, (localStorage["speed"] * 0.5) ).animate({ "opacity": "1" }, (localStorage["speed"] * 0.3) ); 		setTimeout( 			function() { 				rightPath(); 			}, 			(localStorage["speed"] * (1.5) ) 		); 		current++; 	} 	for (var i=0; i <= localStorage["level"] ; i++) { 		var time = 1000 * (i + 1); 	} 	i = 0; } 

This is kind of crazy, isn't it? This is a simple recursive function. It will call itself, blink the right button for one position and then go to the next until we reach user's current level.

What if you get it wrong?

Maybe instead of click the right button you can just click the wrong button. Then we need to punish you and ban you from the entire world wide web. Let's see our function for that:

function endGame() { 	//let's see if you have a high score, and save it 	if ( localStorage["hs"] == undefined || localStorage["level"] > localStorage["hs"] ) { 		localStorage["hs"] = localStorage["level"]; 		$("#hs").text(localStorage["hs"]); 	}  	localStorage.removeItem( "level" ); 	// Oh, noes! 	showBox("#ohNoes", 2000); } 

Well, here we just check if you've done something better than this play and then remove your current level so you can restart a new game and try a little harder :)

By the way, did I mention how will you start a game? No? Sorry, my bad.

Sorry, NOW the game will begin

What do we have to do in order to start a match is to reset almost anything we have here and then show what is the right path.

// just like starting over! function newGame() { 	current = 0; 	levelCount.text(1); 	//let's call our sequence and memorize it 	localStorage["sequence"] = randomSequence(); 	//wow, we haven't got anything right until now :) 	localStorage["level"] = 0; 	//clicks binding 	localStorage["clicks"] = 0; 	//let's make things slow for now 	localStorage["speed"] = 1500; 	//let's show our welcome warning 	showBox("#letsRock", 2000); 	//and let's show the first color 	rightPath(); } 

What is your best score?

Hope you enjoy this quick HTML5 game tutorial and that you find some easter eggs, you know, since it's a JS game we can't hide a lot of things on it :)

But the most important thing here is: what is your best score?




Sent from my iPhone