1 <!doctype html> |
1 <!doctype html> |
2 <html lang="en"> |
2 <html lang="en"> |
3 <head> |
3 <head> |
4 <meta charset="utf-8" /> |
4 <meta charset="utf-8" /> |
5 <meta name="viewport" content="width=1024" /> |
5 <meta name="viewport" content="width=1080" /> |
6 <meta name="apple-mobile-web-app-capable" content="yes" /> |
6 <meta name="apple-mobile-web-app-capable" content="yes" /> |
7 <title>Tizen Application Portability</title> |
7 <title>Tizen Application Portability</title> |
8 |
8 |
9 <meta name="description" content="Tizen Application Portability is a breakout presentation given at the Tizen Developer Conference in San Francisco on 9 May 2012. It explains portable development strategies relying on web frameworks like jQuery Mobile, Sencha Touch, DojoX, and perhaps one day Cordova (Phonegap.)" /> |
9 <meta name="description" content="Tizen Application Portability is a breakout presentation given at the Tizen Developer Conference in San Francisco on 9 May 2012. It explains portable development strategies relying on web frameworks like jQuery Mobile, Sencha Touch, DojoX, and perhaps one day Cordova (Phonegap.)" /> |
10 <meta name="author" content="Michael Schloh von Bennewitz" /> |
10 <meta name="author" content="Michael Schloh von Bennewitz" /> |
100 text-shadow: -1px -1px 2px rgba(100,100,100,0.5); |
100 text-shadow: -1px -1px 2px rgba(100,100,100,0.5); |
101 } |
101 } |
102 |
102 |
103 /* enable clicking on elements 'hiding' behind body in 3D */ |
103 /* enable clicking on elements 'hiding' behind body in 3D */ |
104 body { pointer-events: none; } |
104 body { pointer-events: none; } |
105 #impress { pointer-events: auto; } |
105 #impress { pointer-events: auto; } |
106 |
106 |
107 /* COMMON STEP STYLES */ |
107 /* COMMON STEP STYLES */ |
108 |
108 |
109 .step { |
109 .step { |
110 width: 1080px; |
110 width: 1080px; |
370 -moz-transform: translateZ(50px); |
364 -moz-transform: translateZ(50px); |
371 -ms-transform: translateZ(50px); |
365 -ms-transform: translateZ(50px); |
372 -o-transform: translateZ(50px); |
366 -o-transform: translateZ(50px); |
373 transform: translateZ(50px); |
367 transform: translateZ(50px); |
374 } |
368 } |
375 |
|
376 #svgrich1:not(.active) { |
|
377 opacity: 0; |
|
378 } |
|
379 |
|
380 #svgrich1:is(.active) { |
|
381 opacity: 1; |
|
382 } |
|
383 |
|
384 /*#svgtizenarch1:not(.active) { |
|
385 opacity: 0; |
|
386 } |
|
387 |
|
388 #svgtizenarch1:is(.active) { |
|
389 opacity: 1; |
|
390 }*/ |
|
391 |
369 |
392 #svgtizenarch1, #svgtizenarch2 { |
370 #svgtizenarch1, #svgtizenarch2 { |
393 width: 820px; |
371 width: 820px; |
394 padding-top: 48px; |
372 padding-top: 48px; |
395 margin-left: auto; |
373 margin-left: auto; |
396 margin-right: auto; |
374 margin-right: auto; |
397 } |
375 } |
398 |
376 |
399 #svgrich2:not(.active) { |
|
400 opacity: 0; |
|
401 } |
|
402 |
|
403 #svgrich2:is(.active) { |
|
404 opacity: 1; |
|
405 } |
|
406 |
|
407 #svgrich3:not(.active) { |
|
408 opacity: 0; |
|
409 } |
|
410 |
|
411 #svgrich3:is(.active) { |
|
412 opacity: 1; |
|
413 } |
|
414 |
|
415 #kitplethora:not(.active) { |
|
416 opacity: 0; |
|
417 } |
|
418 |
|
419 #kitplethora:is(.active) { |
|
420 opacity: 1; |
|
421 } |
|
422 |
|
423 #svgappflow:not(.active) { |
|
424 opacity: 0; |
|
425 } |
|
426 |
|
427 #svgappflow:is(.active) { |
|
428 opacity: 1; |
|
429 } |
|
430 |
|
431 #specases .smalltext { |
377 #specases .smalltext { |
432 font-size: 92px; |
378 font-size: 92px; |
433 line-height: 116px; |
379 line-height: 116px; |
434 position: absolute; |
380 position: absolute; |
435 top: 1.25em; |
381 top: 1.25em; |
567 } |
505 } |
568 |
506 |
569 #conclusion { |
507 #conclusion { |
570 background-size: 100% 100%; |
508 background-size: 100% 100%; |
571 background-image: url(schlusshintergrund.png); |
509 background-image: url(schlusshintergrund.png); |
572 background-repeat: no-repeat; |
510 border: none; |
573 background-attachment: fixed; |
511 /*background-repeat: no-repeat;*/ |
574 background-position: top; |
512 /*background-attachment: fixed;*/ |
|
513 /*background-position: top;*/ |
575 |
514 |
576 color: white; |
515 color: white; |
577 text-shadow: 8px 6px 12px black; |
516 text-shadow: 8px 6px 12px black; |
578 } |
517 } |
579 |
518 |
1083 <img src="mastervorderbay.png" width="65%" style="padding-left: 350px;" /> |
1019 <img src="mastervorderbay.png" width="65%" style="padding-left: 350px;" /> |
1084 <h1>Tizen Application Portability</h1> |
1020 <h1>Tizen Application Portability</h1> |
1085 <h2>Michael Schloh von Bennewitz</h2> |
1021 <h2>Michael Schloh von Bennewitz</h2> |
1086 </div> |
1022 </div> |
1087 |
1023 |
1088 <div id="contents" class="step slide" data-x="1300" data-y="-1920"> |
1024 <!-- |
|
1025 avconv -i <inputfile> -b:v 1200k -vcodec libx264 -pre slow -pre baseline -s hd480 -acodec libvo_aacenc -ab 128000 -g 30 <outputfile.mp4> |
|
1026 avconv -i <inputfile> -b:v 1200k -vcodec libvpx -pre 360p -s hd480 -acodec libvorbis -ab 128000 -f webm -g 30 <outputfile.webm> |
|
1027 ffmpeg -i <inputfile> -b:v 1200k -vcodec libtheora -s hd480 -acodec libvorbis -ab 128000 -g 30 <outputfile.ogv> |
|
1028 --> |
|
1029 <div id="vidful" class="step" data-x="1300" data-y="-1920"> |
|
1030 <!--<video id="vidsrc" src="tizportdev-768p.ogv" type='video/ogg; codecs="theora, vorbis"' autoplay loop controls />--> |
|
1031 <video id="vidsrc" autoplay loop controls> |
|
1032 <source src="tizportdev-768p.webm" type='video/webm; codecs="vp8, vorbis"' /> |
|
1033 <source src="tizportdev-768p.ogv" type='video/ogg; codecs="theora, vorbis"' /> |
|
1034 <source src="tizportdev-768p.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' /> |
|
1035 Video tag not supported. Download the video <a href="shouldlook.webm">here</a>. |
|
1036 </video> |
|
1037 <p>Example of correct display of this presentation</p> |
|
1038 </div> |
|
1039 |
|
1040 <div id="contents" class="step slide" data-x="1300" data-y="-2600"> |
1089 <h1>Contents</h1> |
1041 <h1>Contents</h1> |
1090 <ul> |
1042 <ul> |
1091 <li><a href="index.html#/topcat">Mobile App <b>Categories</b></a></li> |
1043 <li><a href="index.html#/topcat">Mobile App <b>Categories</b></a></li> |
1092 <li><a href="index.html#/topnative"><b>Native</b> App Architecture</a></li> |
1044 <li><a href="index.html#/topnative"><b>Native</b> App Frameworks</a></li> |
1093 <li><a href="index.html#/topweb"><b>Web</b> App Frameworks</a></li> |
1045 <li><a href="index.html#/topweb"><b>Web</b> App Frameworks</a></li> |
1094 <li><a href="index.html#/tophybrid"><b>Hybrid</b> App Frameworks</a></li> |
1046 <li><a href="index.html#/tophybrid"><b>Hybrid</b> App Frameworks</a></li> |
1095 <li><a href="index.html#/sdkprovide">Tizen SDK <b>Provision</b></a></li> |
1047 <li><a href="index.html#/sdkprovide">Tizen SDK <b>Provision</b></a></li> |
1096 <li><a href="index.html#/sdkinteg">Tizen SDK <b>Integration</b></a></li> |
1048 <li><a href="index.html#/sdkinteg">Tizen SDK <b>Integration</b></a></li> |
1097 <!--<li>Web App Frameworks</li> |
1049 <!--<li>Web App Frameworks</li> |
1102 <li>Typical Workflows</li> |
1054 <li>Typical Workflows</li> |
1103 <li>Demonstration</li>--> |
1055 <li>Demonstration</li>--> |
1104 </ul> |
1056 </ul> |
1105 </div> |
1057 </div> |
1106 |
1058 |
1107 <div id="topcat" class="step" data-x="800" data-y="-400" data-z="1000" data-scale="3"> |
1059 <div id="topcat" class="step dark" data-x="800" data-y="-400" data-z="1000" data-scale="3"> |
1108 <span class="smalltext">Mobile Application</span> |
1060 <span class="smalltext">Mobile Application</span> |
1109 <h1>Categories</h1> |
1061 <h1>Categories</h1> |
1110 </div> |
1062 </div> |
1111 |
1063 |
1112 <div id="svgrich1" class="step" data-x="1052" data-y="-240" data-z="-1000" data-scale="0.125"> |
1064 <div id="svgrich1" class="step dark" data-x="1200" data-y="-120" data-z="-1000" data-scale="0.125"> |
1113 <img src="richreach.svg" width="100%" /> |
1065 <img src="richreach.svg" width="100%" /> |
1114 </div> |
1066 </div> |
1115 |
1067 |
1116 <div id="topnative" class="step" data-x="200" data-y="-570" data-z="-1000" data-scale="0.3"> |
1068 <div id="topnative" class="step dark" data-x="200" data-y="-570" data-z="-1000" data-scale="0.3"> |
1117 <span class="smalltext">Development</span> |
1069 <span class="smalltext">Development</span> |
1118 <h1>Native App</h1> |
1070 <h1>Native App</h1> |
1119 </div> |
1071 </div> |
1120 |
1072 |
1121 <div id="svgrich2" class="step" data-x="-1815" data-y="-800" data-z="0" data-scale="1.5"> |
1073 <div id="picnative" class="step dark" data-x="800" data-y="-540" data-z="-1000" data-scale="0.2"> |
|
1074 <img src="quickmeme.png" width="100%" /> |
|
1075 </div> |
|
1076 |
|
1077 <div id="svgrich2" class="step dark" data-x="-1815" data-y="-800" data-z="0" data-scale="1.5"> |
1122 <img src="appsnative.svg" width="100%" /> |
1078 <img src="appsnative.svg" width="100%" /> |
1123 </div> |
1079 </div> |
1124 |
1080 |
1125 <div id="svgtizenarch1" class="step" data-x="-1400" data-y="-1024" data-z="-1000" data-scale="0.4"> |
1081 <div id="svgtizenarch1" class="step dark" data-x="-1400" data-y="-1024" data-z="-1000" data-scale="0.4"> |
1126 <img src="tizenarch.svg" width="100%" height="720px" /> |
1082 <img src="tizenarch.svg" width="100%" height="720px" /> |
1127 </div> |
1083 </div> |
1128 |
1084 |
1129 <div id="picnative" class="step" data-x="-1800" data-y="-1100" data-z="-1000" data-scale="0.2"> |
1085 <div id="svgrich3" class="step dark" data-x="-1815" data-y="-800" data-z="0" data-scale="1.5"> |
1130 <img src="quickmeme.png" width="100%" /> |
|
1131 </div> |
|
1132 |
|
1133 <div id="svgrich3" class="step" data-x="-1815" data-y="-800" data-z="0" data-scale="1.5"> |
|
1134 <img src="appsweb.svg" width="100%" /> |
1086 <img src="appsweb.svg" width="100%" /> |
1135 </div> |
1087 </div> |
1136 |
1088 |
1137 <div id="topweb" class="step" data-x="-2800" data-y="-2200" data-z="0" data-rotate="90" data-scale="2"> |
1089 <div id="topweb" class="step" data-x="-2800" data-y="-2200" data-z="0" data-rotate="90" data-scale="2"> |
1138 <span class="smalltext">Frameworks</span> |
1090 <span class="smalltext">Frameworks</span> |
1139 <h1>Web App</h1> |
1091 <h1>Web App</h1> |
1140 </div> |
1092 </div> |
1141 |
1093 |
1142 <div id="kitplethora" class="step" data-x="-2755" data-y="-2320" data-z="-1000" data-rotate="90" data-scale="0.05"> |
1094 <div id="kitplethora" class="step" data-x="-2755" data-y="-2320" data-z="-1000" data-rotate="90" data-scale="0.05"> |
1143 <q><b>Web App Frameworks</b></q> |
1095 <q><b>JavaScript Libraries</b></q> |
1144 <ul class="webfmwork"> |
1096 <ul class="webfmwork"> |
1145 <li class="item fmwork-1" style="width: 120px; line-height: 40px;">jQuery Mobile</li> |
1097 <li class="item fmwork-1" style="width: 120px; line-height: 40px;">jQuery Mobile</li> |
1146 <li class="item fmwork-2" style="width: 120px; line-height: 40px;">Sencha Touch</li> |
1098 <li class="item fmwork-2" style="width: 120px; line-height: 40px;">Sencha Touch</li> |
1147 <li class="item fmwork-3">DojoX</li> |
1099 <li class="item fmwork-3">DojoX</li> |
1148 <li class="item fmwork-4">jQTouch</li> |
1100 <li class="item fmwork-4">jQTouch</li> |
1167 <li class="item fmwork-23">Rhomobile</li>--> |
1119 <li class="item fmwork-23">Rhomobile</li>--> |
1168 </ul> |
1120 </ul> |
1169 </div> |
1121 </div> |
1170 |
1122 |
1171 <div id="specases" class="step" data-x="-2755" data-y="-3700" data-z="-1000" data-rotate="180" data-scale=".5"> |
1123 <div id="specases" class="step" data-x="-2755" data-y="-3700" data-z="-1000" data-rotate="180" data-scale=".5"> |
1172 <!-- Paul IRISH with best practices --> |
|
1173 <!-- Principle of progressive enhancement --> |
|
1174 <span class="smalltext">HTML5Boilerplate Modernizr</span> |
1124 <span class="smalltext">HTML5Boilerplate Modernizr</span> |
1175 <h1>Special Cases</h1> |
1125 <h1>Special Cases</h1> |
1176 </div> |
1126 </div> |
1177 |
1127 |
1178 <div id="topchoose1" class="step" data-x="-2755" data-y="-4550" data-z="-1000" data-rotate="180" data-scale="2"> |
1128 <div id="topchoose1" class="step" data-x="-2755" data-y="-4550" data-z="-1000" data-rotate="180" data-scale="2"> |
1179 <span class="smalltext">a framework</span> |
1129 <span class="smalltext">from JS libs</span> |
1180 <h1>Choosing</h1> |
1130 <h1>Choosing</h1> |
1181 </div> |
1131 </div> |
1182 |
1132 |
1183 <div id="svgappflow" class="step" data-x="-2740" data-y="-4500" data-z="-1000" data-rotate="180" data-scale="0.1"> |
1133 <div id="svgappflow" class="step" data-x="-2740" data-y="-4500" data-z="-1000" data-rotate="180" data-scale="0.1"> |
1184 <img src="newappflow.svg" width="100%" /> |
1134 <img src="newappflow.svg" width="100%" /> |
1262 </div> |
1211 </div> |
1263 <script> |
1212 <script> |
1264 if ("ontouchstart" in document.documentElement) { |
1213 if ("ontouchstart" in document.documentElement) { |
1265 document.querySelector(".hint").innerHTML = "<p>Tap on the left or right to navigate</p>"; |
1214 document.querySelector(".hint").innerHTML = "<p>Tap on the left or right to navigate</p>"; |
1266 } |
1215 } |
|
1216 |
|
1217 var videostep = document.getElementById("vidful"); |
|
1218 var videofile = document.getElementById("vidsrc"); |
|
1219 videostep.addEventListener("impress:stepenter", function() { |
|
1220 videofile.play(); |
|
1221 }, false); |
|
1222 videostep.addEventListener("impress:stepleave", function() { |
|
1223 videofile.pause(); |
|
1224 }, false); |
1267 </script> |
1225 </script> |
1268 |
1226 |
1269 <script src="impress.js"></script> |
1227 <script src="impress.js"></script> |
1270 <script>impress().init();</script> |
1228 <script>impress().init();</script> |
1271 |
1229 |