Upload
kitthod
View
1.458
Download
2
Tags:
Embed Size (px)
Citation preview
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel
Or, how to make a mobile app using web technologies
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Hi.
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Why?
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
@snookca
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Why not?
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
div.tile { float: left; }
div.tile { display: grid }
table td
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
.tile { float: left; width: 3em; height: 3em;}
<div class=“board”> <div class=“tilerow”> <div class=“tile”></div> <div class=“tile”></div> … <div class=“tile last”></div> …</div>
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
display: grid;
http://caniuse.com/css-gridhttp://dev.w3.org/csswg/css3-grid-align/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Really now, tables for layout?
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
styling the board
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
one giant background image
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://wordswithfriends.com/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
single tile images
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://www.flickr.com/photos/lwr/3034478627/ by Leo Reynolds
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
all CSS, all the time
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
-webkit-border-radius: 4px;-moz-border-radius: 4px;border-radius: 4px;
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://tileabl.es/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
$(’.tile').noisy({ 'intensity' : 1, 'size' : 200, 'opacity' : 0.08, 'fallback' : '', 'monochrome' : false}).css('background-color', '#EDEBDE');
https://github.com/DanielRapp/Noisy
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
(You may hate me now.)
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://www.fontyukle.net/en/DownLoad-News+Gothic+Std+Medium.ttf
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://www.fontsquirrel.com/fontface/generator
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<div class="tile"> <span class="letter">O</span> <span class="val">1</span></div>
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<!DOCTYPE html><html><head><script src="js/jquery-1.6.2.js"></script><script src=”js/jquery-ui-1.8.14.js"></script><style>…
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
$(document).ready(function() { $(".tile").draggable();});
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
.tile { opacity: .9; background-color: AntiqueWhite; }
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
$(".tile").draggable( { snap: "#board td" });
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
.dropped { border: 1px solid red; }
$("#board td").droppable({ drop: function(event, ui) { $(this).addClass("dropped"); ... } }
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Keep track of the played tile locations
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
SHK.board = new Array(15);
…
for (var i = 0; i < 15; i++) { SHK.board[i] = new Array(15); for (var j = 0; j < 15; j++) { SHK.board[i][j] = ''; }}
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<div class="tilenum">14</div>
.tilenum { display: none;}
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
data-* to save the day!
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<td id="l1"> <div id="t1" class="tile" data-tilenum="1"> <span class="letter">U</span> <span class="val">2</span> </div> </td>
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
// if previously placed on a board tile, clear the last positionvar p = ui.helper.data('prevloc');if (ui.helper.data('prevloc')) { var p = ui.helper.data('prevloc'); SHK.board[p[0]][p[1]] = '’;}
// set the new positionui.helper.data('prevloc', [row, col]);
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<td id=”r9b"><div class="it"></div></td>
var row = id.substring(1, 2); // 9var col = id.substring(2, 3); // b b = 11, so need to convert from hex to decimal
convert to decimal this way:
parseInt(row, 16);
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Submit the word!
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
rc = 0 or rc = 1, depending on checking for row or column
var t = false;
for (var i in SHK.inplay) { if (i && SHK.inplay[i]) { if (t) { if (t != SHK.inplay[i][rc]) { return false; } } else { t = SHK.inplay[i][rc]; } } }
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
But is it a word?
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
localStorage FTW!
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
// See if the property we want is pre-cached in localStorage if ( window.localStorage !== null && window.localStorage.shkrubbeldict ) { var words = window.localStorage.shkrubbeldict.split("\n"); for ( var i = 0; i < words.length; i++ ) { SHK.dict[words[i]] = true; }…
http://diveintohtml5.org/storage.html
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
// easy check now… if (SHK.dict[word.toLowerCase()]) { // we have a word!}
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
did I mention, don’t do this?
read these instead:
http://ejohn.org/blog/dictionary-lookups-in-javascript/http://ejohn.org/blog/javascript-trie-performance-analysis/http://ejohn.org/blog/revised-javascript-dictionary-search/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
While we’re here…
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
for (var i = 0; i < 7; i++) {
// we're using this in several places, so store in var var t = $('#t' + i);
// move the tile back to its starting spot t.animate({'top': '0px', 'left' : '0px'});
// clear the inplay tiles from the board SHK.inplay[i] = false;
// clear the tile from the board var p = t.data('prevloc'); if (p) { SHK.board[p[0]][p[1]] = '';
t.data(‘prevloc’) = ‘’; } }
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Wait a second…
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://www.techradar.com/reviews/pc-mac/tablets/apple-ipad-681021/review
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
O_O
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://phonegap.github.com/weinre
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Performance
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Send only what you need
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
And I determine that how?
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Server side browser detection?
(Have you seen a recent User-Agent list?)
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://www.user-agents.org/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Feature detection
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://www.modernizr.com/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Media Queries
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<link rel="stylesheet" href="theme.css" /><link rel="stylesheet” href="print.css" media="print” />
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
/* iPhone Portrait */@media screen and (max-width: 320px) { …}
/* iPhone Landscape */@media screen and (min-width: 321px) and (max-width: 480px) { …}
/* iPad */@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { …}
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Adapt.jshttp://adapt.960.gs/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Compress files
http://developer.yahoo.com/yui/compressor/http://www.phpied.com/cssmin-js/
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Reduce image sizes
http://developer.yahoo.com/yslow/smushit/http://www.imageoptimizer.net/Pages/Home.aspx
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Use data URIs if you can
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
background: url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSAAA…) no-repeat left center; padding: 5px 0 5px 25px;
data:[<mime type>][;charset=<charset>][;base64],<encoded data>
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Taking it all offline
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Generate a MANIFEST
why:http://diveintohtml5.org/offline.html
http://bit.ly/g01Her (apple.com)
how:https://github.com/jamesgpearce/confess
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Tell the mobile browser about it.
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
<meta name="apple-mobile-web-app-capable" content="yes" /><link rel="apple-touch-startup-image" href="home.png" /><link rel="apple-touch-icon" href="icon.png" />
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
Push it
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
http://shkrubbel.com/https://github.com/kitt/shkrubbel
@shkrubbel
shkrubbel: a game of letters :: kitt hodsden : @kitt :: open web camp 2011
phew!
http://ki.tt/owc3