วันพฤหัสบดีที่ 19 เมษายน พ.ศ. 2555

Video :: HTML 5

วันนี้เรามาลองทำวีดีโอจาก HTML 5 กันครับ
ผมจะใช้ framework ของ http://videojs.com/

ขั้นแรกดาวโหลด file ที่สมบูรณ์
จาก https://github.com/downloads/zencoder/video-js/video-js-3.2.0.zip



จะได้แบบนี้

วันพุธที่ 11 เมษายน พ.ศ. 2555

Horizontally Scrolling Websites Showcase

/* Horizontal Tiny Scrolling - a smooth scrolling script for horizontal websites
(the brother of the vertical "Tiny Scrolling")
by Marco Rosella - http://www.centralscrutinizer.it/en/design/js-php/horizontal-tiny-scrolling
                v0.6 - February 14, 2007
    
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA    
*/

window.onload = function() {
 HtinyScrolling.init(); scrollTips.init();
}

var HtinyScrolling = {
 speed : 50,      //set here the scroll speed: when this value increase, the speed decrease. 
 maxStep: 150,  //set here the "uniform motion" step for long distances
 brakeK: 2,   //set here the coefficient of slowing down
 hash:null,  
 currentBlock:null,
 requestedX:0,
 init: function() {
  var lnks = document.getElementsByTagName('a');   
  for(var i = 0, lnk; lnk = lnks[i]; i++) {   
   if ((lnk.href && lnk.href.indexOf('#') != -1) &&  ( (lnk.pathname == location.pathname) ||
   ('/'+lnk.pathname == location.pathname) ) && (lnk.search == location.search)) {  
   addEvent(lnk,'click',HtinyScrolling.initScroll,false);
   lnk.onclick=function(){return false;} // Safari
   }   
  }    
 },
 getTarget: function(target) {
  while(target.tagName.toLowerCase() != 'a')
   target = target.parentNode;
  return target;
 },
 getElementXpos: function(el){
  var x = 0;
  while(el.offsetParent){  
   x += el.offsetLeft;    
   el = el.offsetParent;
  } return x;
 },  
 getScrollLeft: function(){
  if(document.all) return (document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
  else return window.pageXOffset;   
 }, 
 getWindowWidth: function(){
  if (window.innerWidth) return window.innerWidth; 
  if(document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth;
 },
 getDocumentWidth: function(){
  if (document.width) return document.width;
  if(document.body.offsetWidth) return document.body.offsetWidth;
 },
 initScroll: function(e){
  var targ;
  
  if (!e) var e = window.event;
  if (e.target) targ = e.target;
  else if (e.srcElement) targ = e.srcElement;  
  targ = HtinyScrolling.getTarget(targ);  //a fix by Skid X
  HtinyScrolling.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length); 
  HtinyScrolling.currentBlock = document.getElementById(HtinyScrolling.hash);   
  if(!HtinyScrolling.currentBlock) return;
  HtinyScrolling.requestedX = HtinyScrolling.getElementXpos(HtinyScrolling.currentBlock); 
  HtinyScrolling.scroll(targ); 
  return false;
 },
 scroll: function(targ){
  var left  = HtinyScrolling.getScrollLeft();
  
  if(HtinyScrolling.requestedX > left) { 
   //var endDistance = Math.round((HtinyScrolling.getDocumentWidth() - (left + HtinyScrolling.getWindowWidth())) / HtinyScrolling.brakeK);
   //endDistance = Math.min(Math.round((HtinyScrolling.requestedX-left)/ HtinyScrolling.brakeK), endDistance);
   //var offset = Math.max(2, Math.min(endDistance, HtinyScrolling.maxStep));
   
   var offset = Math.min(Math.abs(Math.round((HtinyScrolling.requestedX-left)/ HtinyScrolling.brakeK)), HtinyScrolling.maxStep);
  } else { 
   var offset = - Math.min(Math.abs(Math.round((HtinyScrolling.requestedX-left)/ HtinyScrolling.brakeK)), HtinyScrolling.maxStep);
  } 
  window.scrollTo(left + offset, 0);  
  
  if(Math.abs(left-HtinyScrolling.requestedX) <= 1 || HtinyScrolling.getScrollLeft() == left) {
   window.scrollTo(HtinyScrolling.requestedX, 0);
   if(typeof XULDocument != 'undefined') {
    location.hash = HtinyScrolling.hash;
   }
   
   //optional instructions: you can add an effect to enlight after the scroll the selected section.
   //uncomment this line below if you want to change the opacity:
   //mark.change_opacity(HtinyScrolling.hash);
   
   //you can also call the function "mark.change_colors(HtinyScrolling.hash, fps, (duration in sec), #(color in hex), #(color in hex))" to change background color of selected section   
   HtinyScrolling.hash = null;
  } else  setTimeout(HtinyScrolling.scroll,HtinyScrolling.speed);   
 }
}

/* the mouse scrolling doesn't work with Opera, that hasn't a event associated to the mouse wheel */
 
var scrollTips = {
 dx : null,
 init : function() { 
  if (window.addEventListener) {
  window.addEventListener("DOMMouseScroll", this.mouseScroll, false);
  } else document.attachEvent("onmousewheel", this.mouseScroll); 
  /*var left = document.getElementById('left');
  addEvent(left,'mouseover', function() {this.dx=setInterval('scrollTips.arrowScroll(0)',100);return false;});
  addEvent(left,'mouseout', function() { clearInterval(this.dx); return false;});
  var right = document.getElementById('right');
  addEvent(right,'mouseover', function() {this.dx=setInterval('scrollTips.arrowScroll(1)',100);return false;});
  addEvent(right,'mouseout', function() { clearInterval(this.dx); return false;});*/ 
 }, 
 mouseScroll : function(e) {
  if (!e) var e = window.event;
  if (e.wheelDelta <= 0 || e.detail>=0){  
  window.scrollBy(80,0);
  } else  window.scrollBy(-80,0) ; 
 }, 
 arrowScroll: function(val) {
  if(val==1) {
   window.scrollBy(70,0);
  } else {
   window.scrollBy(-70,0)
  }
 }
}

var mark = {        //first four functions are based on The Fade Anything Technique by Adam Michela 
 valop : 100,
 req : 0,
 make_hex: function(r,g,b) {
  r = r.toString(16); if (r.length == 1) r = '0' + r;
  g = g.toString(16); if (g.length == 1) g = '0' + g;
  b = b.toString(16); if (b.length == 1) b = '0' + b;
  return "#" + r + g + b;
 },
 change_colors: function(id, fps, duration, from, to) {  
  var frames = Math.round(fps * (duration / 1000));
  var interval = duration / frames;
  var delay = interval;
  var frame = 0;  
  if (from.length < 7) from += from.substr(1,3);
  if (to.length < 7) to += to.substr(1,3);  
  var rf = parseInt(from.substr(1,2),16);
  var gf = parseInt(from.substr(3,2),16);
  var bf = parseInt(from.substr(5,2),16);
  var rt = parseInt(to.substr(1,2),16);
  var gt = parseInt(to.substr(3,2),16);
  var bt = parseInt(to.substr(5,2),16);  
  var r,g,b,h;
  while (frame < frames) {
   r = Math.floor(rf * ((frames-frame)/frames) + rt * (frame/frames));
   g = Math.floor(gf * ((frames-frame)/frames) + gt * (frame/frames));
   b = Math.floor(bf * ((frames-frame)/frames) + bt * (frame/frames));
   h = this.make_hex(r,g,b);   
   setTimeout("mark.set_img_bgcolor('"+id+"','"+h+"')", delay);
   frame++;
   delay = interval * frame; 
  }
  setTimeout("mark.set_img_bgcolor('"+id+"','"+to+"')", delay);
 },  
 
 set_img_bgcolor: function(id, c) {   
     if(document.getElementById(id).getElementsByTagName('img')[0]) {
  var o = document.getElementById(id).getElementsByTagName('img')[0];
  o.style.backgroundColor = c;} else return;
 },
 get_img_bgcolor: function(id)  { 
  var o = document.getElementById(id).getElementsByTagName('img')[0];
  while(o) {
   var c;
   if (window.getComputedStyle) c = window.getComputedStyle(o,null).getPropertyValue("background-color");
   if (o.currentStyle) c = o.currentStyle.backgroundColor;
   if ((c != "" && c != "transparent") || o.tagName == "BODY") { break; }
   o = o.parentNode;
  }
  if (c == undefined || c == "" || c == "transparent") c = "#FFFFFF";
  var rgb = c.match(/rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)/);
  if (rgb) c = this.make_hex(parseInt(rgb[1]),parseInt(rgb[2]),parseInt(rgb[3]));
  return c;
 },
 change_opacity: function(el) {
  if(!(/^menu/.test(el))) {
   var post = document.getElementById(el);
   if (mark.valop > 10 && mark.req == 0) {
    mark.valop -= 10;
    mark.set_opacity(post,mark.valop);
    if(mark.valop == 10) {mark.req = 1};
   } else 
   if (mark.valop < 100 && mark.req == 1) {
    mark.valop += 10;
    mark.set_opacity(post,mark.valop);
    if(mark.valop == 100) {mark.req = 2};
   } 
   if (mark.req != 2){
   setTimeout("mark.change_opacity('"+el+"')", 50);
   }
   else { mark.set_opacity(post,9999); mark.req = 0; return;}
  }
 },
 set_opacity: function(post,val){
  post.style.opacity='0.' + val ;
  post.style.filter="alpha(opacity=" + val + ")";
 }
}

function addEvent( obj, type, fn ) {
 if (obj.addEventListener)
  obj.addEventListener( type, fn, false );
 else if (obj.attachEvent) {
  obj["e"+type+fn] = fn;
  obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
  obj.attachEvent( "on"+type, obj[type+fn] );
 }
}

function removeEvent( obj, type, fn ) {
 if (obj.removeEventListener)
  obj.removeEventListener( type, fn, false );
 else if (obj.detachEvent) {
  obj.detachEvent( "on"+type, obj[type+fn] );
  obj[type+fn] = null;
  obj["e"+type+fn] = null;
 }
}

// mouse wheel scroll for safari
function handle(delta) {
 var iAantalPixels = 75;
 if (delta < 0 ) {
  window.scrollBy(iAantalPixels, 0);
 }
 else {
  window.scrollBy(-iAantalPixels, 0);
 }
}

function wheel(event){
 var delta = 0;
 if (!event) {
  event = window.event;
 }
 if (event.wheelDelta) {
  delta = event.wheelDelta/120;
  if (window.opera) {
   delta = -delta;
  }
 } else if (event.detail) {
  delta = -event.detail/3;
 }
 if (delta) {
  handle(delta);
 }
}
/* Initialization code. */
if (window.addEventListener)
 window.addEventListener('DOMMouseScroll', wheel, false);
window.onmousewheel = document.onmousewheel = wheel;




ใช้ Scripe นี้แท็กลงไปจะได้ผลลัพธ์ตามนี้ครับ http://deanoakley.com/
ที่มา http://line25.com/articles/horizontally-scrolling-websites-showcase-and-tutorials

วันจันทร์ที่ 9 เมษายน พ.ศ. 2555

การเพิ่มแท็ก div โดยใช้ java Scrip


       


วันอังคารที่ 3 เมษายน พ.ศ. 2555

Blander Render


ในวันนี้เราจะมาเรียนรู้วิธีการใช้ Blander Render
จะใช้ luxrender เป็นเครื่องช่วยให้ภาพเหมือนจริงมากขึ้น

เข้าไปดาวน์โหลดที่ http://www.luxrender.net/

ไปที่ Download  แล้วเลือกโหลดปลั้ก-อิน Blander ตาม เวอร์ชั่นที่ท่านลงได้เลยครับ

เมื่อดาว์โหลดไฟล์มาเรียบร้อยแล้ว เอา folder : luxrender
ไว้ที่ C:\Program Files\Blender Foundation\Blender\2.62\scripts\addons

จากนั้นเข้าไปโปรแกรม Blander ไปที่ File -> Blander User Perferences เลือก Addons
ตรง sild menu bar (ที่ซ้ายมือ) คลิกเลือก Render เช็คเครื่องหมายถูกที่ Luxrender
แล้วก็ Save as Default เสร็จเรียบร้อยแล้วครับ

ลอง Render ภาพดูกันเลยครับ 


มาทำ e-book ง่ายๆกัน โดยใช้ HTML5+Turn.js




มาเริ่มทำกันเลย เริ่มแรกโหลดไฟล์ Demo จาก https://github.com/blasten/turn.js


มารู้จักคำสั่งของ Turn.js ครับ

Constructor

$('selector').turn([options]);
Parameters:
  • options
    • width type: number, default: $('selector').width()
    • height type: number, default: $('selector').height()
    • page type: number, default: 1
    • shadows type: boolean, default: true
    • duration type: number, default: 600
    • acceleration type: boolean, default: true

Calling Methods or Properties

$('selector').turn(property | method [, parameters]);
 
 
คำสั่งตามตัวอย่างคือ 
 
$(window).ready(function() {
  $('#magazine').turn({
       display: 'double',
       acceleration: true,
       gradients: !$.isTouch,
       elevation:50,
       when: {
        turned: function(e, page) {
         console.log('Current view: ', $(this).turn('view'));
        }
       }
      });
 });
 
 
 $(window).bind('keydown', function(e){
  
  if (e.keyCode==37)
   $('#magazine').turn('previous');
  else if (e.keyCode==39)
   $('#magazine').turn('next');
   
 });

วันพฤหัสบดีที่ 29 มีนาคม พ.ศ. 2555

Windows 8 Lab Game


เรามาเริ่มเขียนเกม ลง App ของ Windows 8 กันเลยนะครับ
เราจะใช้ Engin ของค่าย Pixal ซึ่งรู้จักดีในนาม เกม Cut the Rope นั้นเองนะครับ
Resound :http://thinkpixellab.com/pxloader


 ขั้นแรกเปิดโปรแกรม Michosoft Visual Studio 11 bata


เลือกโปรเจกที่จะเขียนเกม File->New->Project
 เลือกตรงบาร์ข้างซ้ายมือ Templates->Other Lunguages->JavaScripes
เลือกในหมวด Blank Application

ทดลองรันได้ใน 2 หมวดหมู่
บน Simulator
และ
Local Machine

จะนั้นเขียนใน default.html โค๊ชดังนี้แล้วรัน



 





    

    Drawing_Canvas

    

    

    

    

    

    

    

    

    

  

    

    

    

    





    

Content goes here




วันอังคารที่ 27 มีนาคม พ.ศ. 2555

วิธีการเรียกใช้ Font / HTML + CSS


Hello world!

วันอังคารที่ 20 มีนาคม พ.ศ. 2555

Meta Detect Scene

วิธีการทำให้หน้าจอบนเว็บเท่ากับเว็บไซต์กันพอดี










    


Demo: iPhone Safari's Viewport Scaling Bug






Demo

iPhone Safari Viewport Scaling Bug

View this page with an iPhone. Rotate the phone from portrait to landscape. Notice the page being scaled up on landscape view.

วันจันทร์ที่ 19 มีนาคม พ.ศ. 2555

WebGL CKI

ทดสอบเอาโมเดลใส่ในเว็บไซต์ INDEX.HTML


 
  three.js webgl - trackball camera
  
  
  
 

 
  
MOVE mouse & press LEFT/A: rotate, MIDDLE/S: zoom, RIGHT/D: pan

วันพฤหัสบดีที่ 15 มีนาคม พ.ศ. 2555

CKA web 3D for Three.js

ตอนต่อไปลองมาเขียนเว็บไซต์แบบ 3d ดูนะครับ จะใช้ไลบารีของ Three.js ขั้นแรกจะต้องเตรียม Code และ Model ก่อนนะครับ หาโค้ดที่เกี่ยวกับการใช้ปุ่มบนหน้าจอ

วันพุธที่ 14 มีนาคม พ.ศ. 2555

Node.js

วันที่ 3 มาเริ่มลุย Node.js+socket.io ในรูปแบบการใช้งานอื่นๆดูบ้างนะครับ ครั้งลองดึง .html ขึ้นมาแสดงคำว่า Hello World โดยเขียน

app.js แล้วก็เรียกด้วยคำสั่งของ Node app.js
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(80);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

index.html



Untitled Document




Hello world

TV Show

วันที่ 2 เริ่มทำการติดตั้งเครื่องคอมพิวเตอร์ใหม่เปลี่ยนวินโดร์ 8 มาเป็นวินโดร์ XP ใหม่ล่าสุดมี license  ด้วยเจ๋งมากเลยทีเดียว มาเริ่มทำงานกันดีกว่า เราใช้ จำลองเซิฟเวอร์เป็นตัว XAMPP จากนั้นพัฒนาโปรแกรมเมื่อคราวที่แล้ว


New Project of CMU Co CKA

ในช่วงบ่ายได้หาแนวคิดที่จะทำเกมแบบเภท MMORPG Online เพื่อการศึกษาวัตถุประสงค์อยากให้เด็กที่ด้อยโอกาสสามารถเรียนรู้ในสิ่งที่ตนรักหรือชอบในสิ่งที่ตนเองไม่มีความสามารถค้นหาได้ด้วยเหตุผลเรื่องระยะทาง ด้านงบประมาณหรือเหตุอื่นๆอย่างไรก็ตาม  ทำให้ผู้สนใจในการเรียนรู้ขาดโอกาสในการพัฒนาตนเอง ในการทำโครงงานเรื่องนี้ตอบสนองการเข้าหาข้อมูลได้เร็วมากขึ้น สามารถเข้าจากบนโทรศัทพ์มือถือ เครื่องมือสื่อสาร หรืือเครื่องคอมพิวเตอร์ได้อย่างหลายหลากช่องทาง  ผู้จัดทำจึงเห็นเครื่องมือในการสร้างผลงานชิ้นนี้ขึ้นมาได้แก่ HTML5 + Node.js ต่อไปเป็นการทดสอบ Node.js แบบง่ายไปหาแบบยาก

ทำการดาวน์โหลดและติดตั้งโปรแกรม Node.js ดังเว็บลิ้งค์นี้ http://nodejs.org
เมื่อติดตั้งเรียบร้อยแล้วทำการทดลองบน cmd พิมพ์ว่า node

ทดสอบ 1+2 Enter ดูผลลัพธ์


Save เป็นไฟล์ server.js เรียกใช้โดยการ พิมพ์ ที่อยู่/node server.js
var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);
ลองทดสอบโดยเปิด Chrome 127.0.0.1:8888 ดูผลลัพธ์

วันอังคารที่ 13 มีนาคม พ.ศ. 2555

Assignment 2 Project Web

วันนี้ได้รับมอบหมายงานมา 2 Project
1. Update Website CKA to HTML5
2. TV show comment in  VIDEO on Youtube
    กำลังทดลองใช้เว็บ Youtube ลองสร้าง Comment ในวีดีโอ
    แต่ก็ไม่ได้ผลเพราะยังไม่มีใครพัฒนา Future ไปถึงที่เรียก Comment ขึ้นแสดงบน วีดีโอเลย

ฉะนั้นก็ลองมาพัฒนาต่อบน Server ของเราเอง โดยมีขั้นตอนดังต่อไปนี้
1. นำวีดีโอเข้ายังเว็บ HTML5 + Theme js/jquery-1.7.1.min.js
2. แสดงตัวหนังสือจากเว็บ YouTube เรียกเข้ามาใช้บนเว็บโดยใช้คำสั่งดังต่อไปนี้


//ใช้ตรง 
Body </div><div id="comments"></div>

<script type="text/javascript" src="js/js.js"></script>
 

 
      <script type= "text/javascript">
$.ajax({
        url: "http://gdata.youtube.com/feeds/api/videos/KrmEyPkgDf8/comments?v=2&alt=json&max-results=50",
        //gets the max first 50 results.  To get the 'next' 50, use &start-index=50
        dataType: "jsonp",
        success: function(data){
            $.each(data.feed.entry, function(key, val) {

                comment = $("<div class='comment'></div>");

                author = $("<a target='_blank' class='youtube_user'></a>");
                author.attr("href", "http://youtube.com/user/" + val.author[0].name.$t);
                author.html(val.author[0].name.$t);

                content = $("<div style='font-size: 14px;' class='content'></div>");
                content.html(val.content.$t);

                comment.append(author).append(content);
                $('#comments').append(comment);
            });
        }
    });
</script>