Wednesday, December 29, 2010

Is Software Programming a Good Career?


Computer programming may be still a good career to pursue. Here are the video for five reasons why this is still a good profession and five reasons why you might want to consider something else.


Tuesday, December 28, 2010

Adobe flash CS5- transfer your video file to flv format, using FLVPlayBack component for progressive download


Originally I have video file wmv format. Using Adobe Video Encoder, I clicked  File ->Add in the menu and add myvideo9.wmv,
( there is a problem with avi format for encoder, you need to use window live movie maker to change it to wmv format)


1) click Start Queue button, the video is transformed to flv file format: myvideo9.f4v.
2) Open Flash Professional CS5
3) File ->New->ActionScript 3.0, save as myvideo9.fla
4) Open the component library
Menu Window->Components or hit Ctrl-F7.
5) Drag the FLVPlayBack component from the components library to the stage.
6) right click middle of FLVPlayBack, click set source, find your flv file source: myvideo9.f4v
myvideo9.f4v should be the same directory as myvideo9.fla. In the property menu, remove the path for
myvideo9.f4v, or in future you can not find myvideo9.f4v in the web server due to path problem.
For loop/autoRewind:
name  the video in property as myFLV,  press F9 to input  following actionscript:
import fl.video.*;
myFLV.addEventListener(VideoEvent.COMPLETE, rewind);
function rewind(eventObject:VideoEvent):void {
myFLV.autoRewind = true;
myFLV.play();
}

7) Control->Test Movie->in Flash Professional or (Ctrl enter)
you can watch swf file
8) File->Export->Export Movie, save as myvideo9.swf
9) upload myvideo9.swf,  MinimaFlatCustomColorPlayBackSeekCounterVolMute.swf  (skin for controller) and myvideo9.f4v in the same directory of web server
10) My result:

There is a bug during embedding, the control bar lost. The original swf can be found
HERE.

For embedding a flash file:
1) you can directly link to swf file, only for a small file and few connections.
2) progressive download video, you need two files: a FLV video file and a SWF file to play the video. It is better than directly embedded, but worse than streaming.
It is OK for a large file but not for too many connections.
3) Using flash media server for streaming. Best!

Sunday, December 26, 2010

reset admin password for moodle


I installed Moodle in my Windows 7. When I logout, I forgot my admin password.
Below is how to reset admin password.
1) click start menu, go to All Program, click MySQL, Click MySQL Server 5.1
click MySQL command line client
2) enter your mysql password.
3) type following:
show databases;
use moodle;
show tables;
select username, password from mdl_user;
4) Here password is  md5 encrypted (varchar(32)), you can set a password and use following php script to get md5 password:
<?
$password = "mypass";
$password = md5($password );
echo $password;
?>
for example you get: a029d0df84eb5549c641e04a9ef389e5
5) update mdl_user set password='a029d0df84eb5549c641e04a9ef389e5' where username='admin';
6) commit;
7) Now you can use username: admin and password: mypass
to login your moodle.

Saturday, December 25, 2010

Adobe flash CS5 -Actionscript 3.0 -Basic Menu using ActionScript


External reference:
http://www.flashdev.ca/article/building-a-basic-menu-in-actionscript-30-tutorial/
I slightly modify it for CS5
1) Open Flash Professional CS5
2) File ->New->ActionScript 3.0 Class, type class: BasicMenu, type following code:
package  {
  import flash.display.Sprite;
  import flash.display.Shape;
  import flash.events.MouseEvent;
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
  import flash.text.TextFormat;

   public class BasicMenu extends Sprite {  

    // Create the array of button names.
    private var __MenuArray:Array = new Array("Button 0",
                                              "Button 1",
                                              "Button 2",
                                              "Button 3",
                                              "Button 4");   

    /**
     * The constructor. This method is fired automatically
     * when the class is instantiated.
     */
    public function BasicMenu():void {
      drawMenu();
    }

    /**
    * Draw the menu.
    */
    private function drawMenu():void {

      // This variable will hold the x position
      // of the next button in the menu.
      var xPos:Number = 0;

      // Create a holder that will contain the menu.
      var menuHolder:Sprite = new Sprite();

      // Add the holder to the stage.
      addChild(menuHolder);   

      // Create text formatting for the text fields in the menu.
      var format:TextFormat = new TextFormat();
      format.font = "Verdana";
      format.color = 0x000000;
      format.size = 12;
      format.bold = true;

      // Loop through the array.
      //Create each item listed in the array.
      for (var i in __MenuArray) {

        // Create the button.
        var button:Sprite = new Sprite();
        button.name = "button"+i;

        // Disable the mouse events of all the
        // objects within the button.
        button.mouseChildren = false;

        // Make the sprite behave as a button.
        button.buttonMode = true;

        // Create the label for the down button state.
        var label:TextField = new TextField();
        label.autoSize = TextFieldAutoSize.LEFT;
        label.selectable = false;
        label.defaultTextFormat = format;
        label.text = __MenuArray[i];

        // Create an up state for the button.
        var up:Sprite = new Sprite();
        up.graphics.lineStyle(1, 0x000000);
        up.graphics.beginFill(0x00FF00);
        up.graphics.drawRect(0, 0, 100, 30);
        up.name = "up";

        // Create an over state for the button.
        var over:Sprite = new Sprite();
        over.graphics.lineStyle(1, 0x000000);
        over.graphics.beginFill(0xFFCC00);
        over.graphics.drawRect(0, 0, 100, 30);
        over.name = "over";

        // Adder the states and label to the button.
        button.addChild(up);
        button.addChild(over);
        button.addChild(label);    

        // Position the text in the center of the button.
        label.x = (button.width/2) - (label.width/2);
        label.y = (button.height/2) - (label.height/2);

        // Add mouse events to the button.
        button.addEventListener(MouseEvent.MOUSE_OVER,
                                displayActiveState);
        button.addEventListener(MouseEvent.MOUSE_OUT,
                                displayInactiveState);
        button.addEventListener(MouseEvent.CLICK,
                                displayMessage);

        // Add the button to the holder.
        menuHolder.addChild(button);

        // Position the button.
        button.x = xPos;

        // Increase the x position for the next button.
        xPos += button.width + 2;

        // Hide the over state of the button.
        over.alpha = 0;
      }

      // Postion The Menu.
      menuHolder.x = 20;
      menuHolder.y = 20;

    }

    /**
     * Show the active state of the button.
     */
    private function displayActiveState(event:MouseEvent):void {

      // Show the over state of the button.
      event.currentTarget.getChildByName("over").alpha = 100;
    }

    /**
    * Hide the active state of the button.
    */
    private function displayInactiveState(event:MouseEvent):void {

      // Hide the over state of the button.
      event.currentTarget.getChildByName("over").alpha = 0;
    }

    /**
     * Display a message in the Output window.
     */
    private function displayMessage(event:MouseEvent):void {

      // Output the name of the clicked button.
      trace(event.currentTarget.name)
    }
  }
}
save as BasicMenu.as


4)File ->New->ActionScript 3.0, in left panel
under properties->publish->ActionScript Setting->Edit
change source path to the path you stored BasicMenu.as
Document class: BasicMenu
save as BasicMenu.fla
5) Control->Test Movie->in Flash Professional or (Ctrl enter)
you can watch swf file
6) File->Export->Export Movie, save as BasicMenu.swf

Adobe flash CS5 -Actionscript 3.0 -Using bone tool


1) Open Flash Professional CS5
2)  File ->New->ActionScript 3.0
3) click T in tools, type Lu in the first text box, type Jiansen in the second text box
4) click bone tool in tools panel , right click Lu in the first text box,  convert to symbol , select  movie clip,
right click jiansen in the second text box, convert to symbol , select  movie clip.
5) Click the first text box and drag a line to second text box, you can see a thick line (axis)
6) click arrow (selection tool) in tool panel, you can rotate the axis and you can see two layers:
Armerture_8 and Layer1
7) in timeline 20, hightlight layers: Armerture_8 and Layer1, right click mouse, insert frame 
click arrow (selection tool) in tool panel, you can rotate the axis
similarly in timeline 40, rotate back.
8) Control->Test Movie->in Flash Professional or (Ctrl enter)
you can watch swf file
9) File->Export->Export Movie, save as bone1.swf
You can also import a jpg picture, in main menu, click modify and select break apart
and use lasso tool to get different parts for your animation.
10) My result:


Friday, December 24, 2010

Evernote


Evernote is a suite of software and services designed for notetaking and archiving. If you find anything interesting on the web, you can copy it to your Evernote. You can write your diary and notes on Evernote.
Evernote can be downloaded and account creation via:
http://www.evernote.com/

Users with internet access and an Evernote account can also have their notes automatically synchronised with a master copy held on the Evernote server. This approach lets a user access and edit their data across multiple machines and operating system platforms, but still view, input and edit data when an internet connection is not available. 
One of the best features about Evernote is the Web clipper. Using the desktop version, or a Firefox extension, you can add selections of pages, or even entire Web pages, into Evernote with only a couple of clicks.


When you add a note to the service, it is secured like your email would be at a high-end email provider. This means that your notes are stored in a private, locked cage at a guarded data center that can only be accessed by a small number of Evernote operations personnel.


The free online service has monthly usage limitations (currently 60 MB/month)

Install Moodle (LMS) for Windows using Microsoft Web Platform Installer

Microsoft Web Platform Installer  can be downloaded freely from  HERE.
After installing it, you can go to http://www.microsoft.com/web/gallery/ to install Moodle.

Moodle is a software package for producing Internet-based courses and web sites.
Moodle (Linux and Mac etc ) can be downloaded from http://download.moodle.org/.



The Microsoft Web Platform Installer 2.0 (Web PI) is a free tool  to get the latest components of the Microsoft Web Platform, including Internet Information Services (IIS), SQL Server Express, .NET Framework and Visual Web Developer easy. The Web PI also makes it easy to install and run  blogging, content management software such as wordpress, Moodle with the built-in Windows Web Application Gallery.

Thursday, December 23, 2010

Javascript for drop down menu


Result:



ATLAS


TRAVEL



Source Code:
<style>
body{font-family:arial;}
table{font-size:80%;background:black}
a{color:black;text-decoration:none;font:bold}
a:hover{color:#606060}
td.menu{background:lightblue}
table.menu
{
font-size:100%;
position:absolute;
visibility:hidden;
}
</style>

<script type="text/javascript">
function showmenu(elmnt)
{
document.getElementById(elmnt).style.visibility="visible"
}
function hidemenu(elmnt)
{
document.getElementById(elmnt).style.visibility="hidden"
}
</script>
<table><tbody>
<tr bgcolor="#ff8080">    <td align="center" onmouseout="hidemenu('ATLAS')" onmouseover="showmenu('ATLAS')" style="width: 60px;">
<a href="http://atlas.web.cern.ch/Atlas/Welcome.html"><b>ATLAS</b></a>

<table class="menu" id="ATLAS" style="width: 180px;"><tbody>
<tr><td class="menu"><a href="http://atlas.web.cern.ch/Atlas/Welcome.html">ATLAS main page</a></td></tr>
<tr><td class="menu"><a href="http://atlas.ch/">ATLAS General webpage </a></td></tr>
<tr><td class="menu"><a href="http://www.atlas-canada.ca/">
New ATLAS-Canda webpage</a></td></tr>
</tbody></table>
</td>   <td align="center" onmouseout="hidemenu('travel')" onmouseover="showmenu('travel')" style="width: 60px;">
<a href="http://www.expedia.ca/"><b>TRAVEL</b></a>

<table class="menu" id="travel" style="width: 180px;"><tbody>
<tr><td class="menu"><a href="http://www.expedia.ca/">expedica.ca</a></td></tr>
<tr><td class="menu"><a href="http://www.westjet.com/">westjet</a></td></tr>
<tr><td class="menu"><a href="http://www.aircanada.com/aco/flights.do">aircanada</a></td></tr>
<tr><td class="menu"><a href="https://www.aeroplan.com/action/cmd/login">aeroplan
</a></td></tr>
</tbody></table>
</td></tr>
</tbody></table>

Adobe flash CS5 -Actionscript 3.0 -Create a Drop Down Menu and Linking It


The source code template can be downloaded from:
http://www.developphp.com/Flash_tutorials/show_tutorial.php?tid=21
After download Drop_Down_Menu.fla, open it in flash CS5.
  Double click it and go to drop_down_menu.
Under Script layer, press F9 and modify the actionscript source code to add your link:
// ROLL_OVER fuctions for all 3 main buttons
function main1Over(event:MouseEvent):void {
gotoAndPlay("down1");
}
function main2Over(event:MouseEvent):void {
gotoAndPlay("down2");
}
function main3Over(event:MouseEvent):void {
gotoAndPlay("down3");
}
// Event Listeners for all 3 main buttons
mainBtn1.addEventListener(MouseEvent.ROLL_OVER, main1Over);
mainBtn2.addEventListener(MouseEvent.ROLL_OVER, main2Over);
mainBtn3.addEventListener(MouseEvent.ROLL_OVER, main3Over);

//for HOME button link
function main1Click(event:MouseEvent):void {
var main1URL:URLRequest = new URLRequest("http://www.sciencegadget.com/");
navigateToURL(main1URL, "_blank");
}
mainBtn1.addEventListener(MouseEvent.CLICK, main1Click);
//for home sub-button under HOME button link
function btn1sub1Click(event:MouseEvent):void {
var main1URL:URLRequest = new URLRequest("http://www.sciencegadget.com/");
navigateToURL(main1URL, "_blank");
}
btn1sub1.addEventListener(MouseEvent.CLICK, btn1sub1Click);
result:(only link for home)


Tuesday, December 21, 2010

Adobe flash CS5 -Actionscript 3.0 -Create a simple button-change color and add a link

1) Open Flash Professional CS5
2)  File ->New->ActionScript 3.0
3)  Insert -> New Symbol , select type button, click OK
4) You can see up, over, down  and hit in timeline
5) select up in timeline,  select Rectangle  tool (R) in Tools, draw a rectangle and fill with color light green.
Select T in Tools, type text Button with blue color in the same rectangle
6) Move to over in timeline, insert->timeline->keyframe, change text color red under right panel Properties and Character.
7) Move to down in timeline, insert->timeline->keyframe, change text color pink under right panel Properties and Character.
8) Move to hit in timeline, insert->timeline->keyframe, change text color to other collor under right panel Properties and Character.
9)choose Edit > Edit Document to exit Symbol Edit mode.
Drag the button symbol out of the Library onto the Stage.
10) click  button, under property  fill  myButton_btn
 11) click outside button, press F9, type following code
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
myButton_btn.addEventListener(MouseEvent.CLICK, onMouseClick);
function onMouseClick(event:MouseEvent):void
{
   var request:URLRequest = new URLRequest("http://www.youtube.com/v/1HwgUP6FuaU");
   request.method = URLRequestMethod.GET;
   var target:String = "_blank";
   navigateToURL(request, target);
}
12) Control->Test Movie->in Flash Professional or (Ctrl enter)
you can watch swf file
13) File->Export->Export Movie, save as mybutton1.swf
14) My result: (click to link to other page)

Summary of Actionscript 3.0


ActionScript 3.0 is a case-sensitive language
 1. variable
Use var to create a variable:
var myVar;
var myVar:String;
var myVar:String = "Hello World!";

2. Data type:
Boolean, int, Null, Number(used for integers, unsigned integers, and floating-point numbers), String, unit, void, Object (the base class for all class definitions in ActionScript).

3. Code comments:
//This is a comment
/*
This is a comment
/
4. Trace()
Traced values are rendered to the output window when we export for debugging(Pressing Ctrl+Enter).
Example:
var myNum:uint = 10;
trace(myNum); // output is 10

5. The Semicolon
The semicolon( ; ) is used to terminate a statement

6. Creating a Sound object and a Datagrid object.
var mySound:Sound = new Sound();

var myGrid:DataGrid = new DataGrid();

7. Using if..... else if..... and else

var numA:uint = 5;
var numB:uint = 5;

if (numA != numB) {
trace("Numbers do not match");
} else {
trace("Numbers match");
}

8. for loop

var i:uint;
for (i = 1; i <= 4; i++)
{ trace(i); }



var myArray:Array = ["France", "Great Britain", "Italy", "Germany"];

for (var place:String in myArray) {

trace(myArray[place]);

}



9. for each ( in ) loop
var myArray:Array = ["France", "Great Britain", "Italy", "Germany"];

for each (var place:Object in myArray) {

trace(place);

}
10. Built-in core function, such as Math.round() in this example
var myNum:Number = 5.7;

var roundedNum:uint = Math.round(myNum);

trace(roundedNum);

11. Custom Function
function sayHelloWorld () {
var string1:String = "Hello ";
var string2:String = "World!";
var myPhrase:String = string1 + string2;
trace(myPhrase);
}

sayHelloWorld();
 --------------------------------------------------------
function with arguments:
var string1:String = "Hello World!";

function sayHelloWorld (var1:String) {
    
    trace(var1);
}

sayHelloWorld(string1); 


12  Using the rest(...)  operator to send array data into functions

function myFunction(... argArray):void {

for (var i:uint = 0; i < argArray.length; i++) {
trace(argArray[i]);
}

}
myFunction("Joe", "Betty", "Suzy", "William");

13. Returning Values From Custom Created Functions

var v1:String = "Hello ";
var v2:String = "World!";

function sayHello (var1:String, var2:String):String {

var myPhrase:String = var1 + var2;
return(myPhrase);

}

var storedResult:String = sayHello(v1, v2);

trace(storedResult); // output the stored result to view it

Monday, December 20, 2010

Adobe photoshop CS5 - change clothe color in picture


I want to change the clothe color from white to red in this picture
Original picture
1. Open Adobe photoshop CS5
2. Select lasso tool in tthe right panel
3. cut the cloth edge
4. In menu, layer->New Adjustment layer->Hue/Saturation
5. Click OK, adjust Hue, Saturation and Brightness
6. Save you new jpg, my result:


Original picture

Adobe flash CS5 -actionscript 3.0 -Create a tween animation

1) Open Flash Professional CS5
2) File ->New->ActionScript 3.0
 3) move timeline to the final frame, my case 25, right click mouse insert frame
4) in the first frame, File->import to stage, to import your picture
5) insert->timeline->layer to create layer2 for tween picture, you can also draw picture or type text in layer 1 and select it as tween pciture, tthen you don't need to create layer2.

6) under layer2, File->import to stage, import the picture which will be tweened.
7) Go to last Frame, select the picture which will be tweened, right click mouse, select motion tween
8) using up arrow on the top of right panel to move the tweened picture to the position you want (tip!)
9) Go to other frames, move the tweened picture around.
10) Save as mypic1.fla, go to developer mode, select  your FPS (Frame per second), defaul is 24, I changed it to 2. You ca also go to free transform tool in the right panel (just under the up arrow), just the tweened object size for each frame.
11) Control->Test Movie->in Flash Professional or (Ctrl enter)
you can watch swf file
12) File->Export->Export Movie, save as mypic1.swf
13) My result:


Adobe flash CS5 -actionscript 3.0 -- Simple photo Album


1) Open Flash Professional CS5 :ActionScript3.0
2) File ->New->Template->Media Playback->Simple Photo Album
 3) There are four frames available, default picture 1, 2 3, 4, you can see four black dots in Image/Titles
4) click each dot
click File->import-> Import to stage
if you have more than four pictures, click insert->timeline->frame, click File->import->import to stage
5) click Control->Test Movie->In Flash Professional
6) click F9
you can see the source code, default:
Learn HTML

// USER CONFIG SETTINGS =====
var autoStart:Boolean = false; //true, false
var secondsDelay:Number = 2; // 1-60
// END USER CONFIG SETTINGS
// EVENTS =====
playPauseToggle_mc.addEventListener(MouseEvent.CLICK, fl_togglePlayPause);
function fl_togglePlayPause(evt:MouseEvent):void
{
if(playPauseToggle_mc.currentLabel == "play")
{
  fl_startSlideShow();
  playPauseToggle_mc.gotoAndStop("pause");
}
else if(playPauseToggle_mc.currentLabel == "pause")
{
  fl_pauseSlideShow();
  playPauseToggle_mc.gotoAndStop("play");
}
}
next_btn.addEventListener(MouseEvent.CLICK, fl_nextButtonClick);
prev_btn.addEventListener(MouseEvent.CLICK, fl_prevButtonClick);
function fl_nextButtonClick(evt:MouseEvent):void
{
if(playPauseToggle_mc.currentLabel == "pause")
{
  fl_pauseSlideShow();
  playPauseToggle_mc.gotoAndStop("play");
}
fl_nextSlide();
}
function fl_prevButtonClick(evt:MouseEvent):void
{
{
  fl_pauseSlideShow();
  playPauseToggle_mc.gotoAndStop("play");
}
fl_prevSlide();
}
var currentImageID:Number;
var slideshowTimer:Timer;
var appInit:Boolean;
function fl_slideShowNext(evt:TimerEvent):void
{
fl_nextSlide();
}
// END EVENTS

// FUNCTIONS AND LOGIC =====
function fl_pauseSlideShow():void
{
slideshowTimer.stop();
}
function fl_startSlideShow():void
{
slideshowTimer.start();
}
function fl_nextSlide():void
{
currentImageID++;
if(currentImageID > totalFrames)
{
  currentImageID = 1;
}
gotoAndStop(currentImageID);
}
function fl_prevSlide():void
{
currentImageID--;
if(currentImageID <= 0)
{
  currentImageID = totalFrames;
}
gotoAndStop(currentImageID);
}
if(autoStart == true)
{
   fl_startSlideShow();
   playPauseToggle_mc.gotoAndStop("pause");
} else {
  gotoAndStop(1);
}
function initApp(){
currentImageID = 0;
slideshowTimer = new Timer((secondsDelay*1000), 0);
slideshowTimer.addEventListener(TimerEvent.TIMER, fl_slideShowNext);
slideshowTimer.start();
    playPauseToggle_mc.gotoAndStop("pause");
}
if(appInit != true){
initApp();
appInit = true;
}
// END FUNCTIONS AND LOGIC

8.  File->export My flash  result: click >> to see next picture


Sunday, December 19, 2010

Adobe flash CS5 -actionscript 3.0 -- HelloWorld


Download a free trial of Flash Professional CS5 is HERE
1) Open Flash Professional CS5
2) File ->New->ActionScript 3.0 Class, type class: MyHelloWorld, type following code

package {


public class MyHelloWorld {


public function MyHelloWorld() {
// constructor cod
public function sayHello():String {
var greeting:String = "Hello World!";
return greeting;


       }
  }
}
3) Save as MyHellowWorld.as
4) File->New->ActionScript 3.0, Click T in the right menu bar
draw a rectangle in the center, change <instance name> in T in the right panel
as hello_txt
4) push keyboard F9 outside of the rectangle box, type following code:

import HelloWorld;
var classInstance:HelloWorld = new HelloWorld();
hello_txt.text = classInstance.sayHello();

5) Save as MyHelloWorld.fla
6) Control->Test Movie->in Flash Professional or (Ctrl enter)
you can watch swf file
7) File->Export->Export Movie, save as MyHelloWorld.swf
8) My result:


A cool website designed with flash and actionscript and some other great looking websites!


http://www.doritos.com/
Some other great looking website design in the world:


Saturday, December 18, 2010

How to Setup a RAID System


External references:   Setup a RAID System
To setup a RAID system, you need a raid controller and at least two identical hard disk drives. A RAID controller is a hardware device responsible for managing physical drives in a system. Some specific cards are
(check your motherboard menu if any embedded raid controller before buy  a new one)

HighPoint RocketRAID 2300

3ware 9650SE-4LPML

PROMISE SuperTrak EX8350 RTL

Areca ARC-1220

RAID 0 (block-level striping without parity or mirroring) provides improved performance and additional storage but no redundancy or fault tolerance (making it not true RAID, according to the acronym's definition).

In RAID 1 (mirroring without parity or striping), data is written identically to multiple disks (a "mirrored set").
RAID 6 (block-level striping with double distributed parity) provides fault tolerance from two drive failures; array continues to operate with up to two failed drives.

On motherboard setup, you need to  configure hard disks as “RAID” instead of “IDE”.

Software-based RAID: creates virtual storage devices from the physical drives, operating system dependent.

Hardware-based RAID: A hardware implementation of RAID requires at least a special-purpose RAID controller. On a desktop system this may be a PCI expansion card, PCI-e expansion card or built into the motherboard.

video: Software RAID 1 (Miror) Setup In Windows 7

Friday, December 17, 2010

Create pdf file for online post using PHP


 I wrote PHP code to transfer online post to a pdf file.
My example can be seen HERE.

Thursday, December 16, 2010

List of Learning Managment system (LMS) and e-learning


Nine best rich text editors


The review of nine best rich editors can be found HERE

1) NiceEdit

http://nicedit.com/

2)Kupu

http://kupu.oscom.org/download/

3)TinyMCE

http://tinymce.moxiecode.com/

4)Kevin Roth RTE

http://www.kevinroth.com/rte/

5) FCKEditor

http://www.fckeditor.net/ 

6)Yahoo UI Editor

http://developer.yahoo.com/yui/editor/

7) WebWiz RichTextEditor

http://www.webwizguide.com/webwizrichtexteditor/ 

8) CodePlex Rich Text Editor

http://www.codeplex.com/rte

9) XStandard

http://xstandard.com/

Wednesday, December 15, 2010

How to Build a Community Website using flash PHP Video tutorial


Extra information for this talk, go to:
http://www.webintersect.com/
Click video to see Video, click tiny up arrow in control bar to return to menu.

Ustream.tv--Free LIVE VIDEO Streaming


Ustream.tv website: www.ustream.tv
You can use Ustream.tv to broadcast video LIVE to the world for free.
Ustream.tv has over 2,000,000 registered users who generate 1,500,000+ hours of live streamed content per month.

Below is an example from Ustream:
Outside Cam in front of Santa Claus Office at Arctic Circle Finland.

Tuesday, December 14, 2010

ActionScript 3 and Adobe flash cs4 Video tutorial




Example of  flash website: http://www.doritos.com

ActionScript 3 tutorial HERE
Click video to see Video, click tiny up arrow in control bar to return to menu.
More information: http://www.onenterflash.com/

Adobe Flash Media Server --for progressive download video delivery/streaming


Adobe Flash Media Server  FAQ
Adobe Flash Media Server free trial site
Beginner's guide to streaming video with Flash Media Server 3.5
Flash Media Server (FMS) is a proprietary data and media server from Adobe Systems (originally a Macromedia product). This server works with the Flash Player runtime to create media driven, multiuser RIAs (Rich Internet Applications). The server uses ActionScript 1, an ECMAScript based scripting language, for server-side logic. Prior to version 2, it was known as Flash Communication Server.

Supported operating systems
• Microsoft® Windows Server 2008 R2
64 bit/SP2 32 bit
• Microsoft® Windows Server 2003 SP2 32 bit
• Linux CENTOS 5.3 64 bit/32 bit
• Red Hat® Enterprise Linux® Server 5.3
64 bit/32 bit

Below is the video for Flash Media Server Basic.

Monday, December 13, 2010

Learning Management Systems (LMS)


Learning Management Systems (LMS) can be downloaded from HERE.

Learning management system (LMS) is 100% free software, based on PHP and MySQL.
LMS is a very simple system to get move your academic classes onto the web to reach a bigger audience with a cheaper cost. LMS can be used to manage your online learning with a learning management system, setup your classes, create assignments right online and send messages to students from within the system for tracking.

Zend Framework


Zend Framework is an open source, object oriented web application framework for PHP 5.
Zend Framework requires PHP 5.2.4 or later since version 1.7.0.
Zend Framework can be downloaded from HERE.
Zend Framework tutorial can be found HERE.
Why choose the Zend Framework over other PHP Frameworks?
Below is the video from killerphp:

Saturday, December 11, 2010

Dreamweaver CS4 Video Tutorial


All adobe product (Dreamweaver, photoshop, flash, illustrator and acrobat etc)
can be downloaded from HERE (free trial 30 days).
Click video to see Video, click tiny up arrow in control bar to return to menu.


Friday, December 10, 2010

Visual Basic 2010 express video tutorial


Click video to see Video, click tiny up arrow in control bar to return to menu.


Thursday, December 9, 2010

WordePress Video Tutorial Playlist


Some useful links:
  1.  WordPress download: http://wordpress.org/download/
  2. GIMP: the GNU Image Manipulation Program
  3. Google Ping: add your blog to Google index
  4. Install Wordpress in my website
  5. My WordPress sample.
Click video to see Video, click tiny up arrow in control bar to return to menu.


Wednesday, December 8, 2010

How to wrap text around google ads and image in Blog?

1. Wrap text around Google ads.
Using float:left in div to wrap text around Google ads, this can save space and get more attention from readers. HTML code:
<div style=”float: left; width: 300px; height: 250px; margin-right: 8px; margin-bottom; 8px”>
Adsense code here
</div>

Using float:right in div to put Google ads around the right side of text. HTML code is:
<div style=”float: right; width: 300px; height: 250px; margin-right: 8px; margin-bottom; 8px”>
Adsense code here
</div>

Left ad is 300*250. For different ad size, you need to adjust parameter in div, such as width, height and margin. I successfully wrap text for two ads.
eagle
2. Wrap text around image:
using same code, replace the Ad code by image code <IMG SRC="http://www.hickerphoto.com/data/media/161/symbols-of-peace__MG0813.jpg" ALT="eagle" >+ text.  Another method, we can use align=right in the img code.

Install Wordpress in my website


I built a new wordpress website to backup my posts in blogspot.
http://www.jiansenlu.zoka.cc/wordpress/
for rss feed, you just need to add  ?feed=rss
http://www.jiansenlu.zoka.cc/wordpress/?feed=rss
Below is the procedure, quite simple and straightforward .

1) Download Wordpress from http://wordpress.org/download/ and unzip it (I use free software TUGzip) and extract to my directory in local desktop.
2) I use WinSCP to upload the package to my remote host sub-directory htdocs
3) Go to mysql database create new database: zokac_6523693_wordpress
user and password not changed


4) copy wp-config-sample.php to wp-config.php
change database_name_here, username_here, password_here and localhost in wp-config.php to real ones.

----------------------- original wp-config.php---------------------------------
define('DB_NAME', 'database_name_here');

/** MySQL database username */
define('DB_USER', 'username_here');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');
/** MySQL hostname */
define('DB_HOST', 'localhost');
-----------------------------------------------------------
5. run install.php, in my case:
http://www.jiansenlu.zoka.cc/wordpress/wp-admin/install.php
input site title, user name, password and click install
6 Login page:
http://www.jiansenlu.zoka.cc/wordpress/wp-login.php
7. This is my wordpress website:
http://www.jiansenlu.zoka.cc/wordpress/
8, For adding new theme, go to http://wordpress.org/extend/themes/ to download new theme and upload to your server. I choose
Fresh Ink Magazine
9. For adding Adsense, put your AdSense code in sidebar.php as mentioned in
http://www.tamba2.org.uk/wordpress/adsense/
or you can blend your AdSense as html code in your post.

Tuesday, December 7, 2010

How to start Internet Business Video tutorial


How to start Internet Business? How to make money on Internet?
How to optimize your search engine (SEO)? This video tutorial
series from SubHub will give you most information for Internet Marketing.
Click video to see Video, click tiny up arrow in control bar to return to menu.


Usage of Metadata


Metadata is defined as data providing information about one or more other pieces of data, such as:



* Means of creation of the data
* Purpose of the data
* Time and date of creation
* Creator or author of data
* Placement on a computer network where the data was created
* Standards used

For example, a digital image may include metadata that describes how large the picture is, the color depth, the image resolution, when the image was created, and other data. A text document's metadata may contain information about how long the document is, who the author is, when the document was written, and a short summary of the document.

Metadata is data. As such, metadata can be stored and managed in a database, often called a registry or repository. However, it is impossible to identify metadata just by looking at it because a user would not know when data is metadata or just data.

onMouseDown in Javascript


Code 1 : move mouse to produce alert
<html> <body> <img src="image_w3default.gif" onMouseDown="alert('You clicked the picture!')" width="234" height="91" /> <p>Click the picture</p>  </body> </html>

Code 2: move  mouse to change webpage to pink
<body  onMouseDown="document.bgColor='pink'" > <p>Mouse click to turn to pink</p>  </body>

Using PHP to identify browser type


Main function to use is: $_SERVER['HTTP_USER_AGENT']. This can tell us more about the user's operating system, as well as their browser.

DetectBrowser.php is following:

<?php

include ("Browser.php");

$browser = new Browser();
echo "<center><h1> Check Your Browser!!</h1></center>";
echo "Your Browser is ".$browser->getBrowser();
?>
The result can be seen HERE.
Here Browser.php is free software from Chris Schuld.


<?php
 /**
  * File: Browser.php
  * Author: Chris Schuld (http://chrisschuld.com/)
  * Last Modified: August 20th, 2010
  * @version 1.9
  * @package PegasusPHP
  *
  * Copyright (C) 2008-2010 Chris Schuld  (chris@chrisschuld.com)
  *
  * 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 at:
  * http://www.gnu.org/copyleft/gpl.html
  *
  *
  * Typical Usage:
  *
  *   $browser = new Browser();
  *   if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
  *    echo 'You have FireFox version 2 or greater';
  *   }
  *
  * User Agents Sampled from: http://www.useragentstring.com/
  *
  * This implementation is based on the original work from Gary White
  * http://apptools.com/phptools/browser/
  *
  * UPDATES:
  *
  * 2010-08-20 (v1.9):
  *  + Added MSN Explorer Browser (legacy)
  *  + Added Bing/MSN Robot (Thanks Rob MacDonald)
  *  + Added the Android Platform (PLATFORM_ANDROID)
  *  + Fixed issue with Android 1.6/2.2 (Thanks Tom Hirashima)
  *
  * 2010-04-27 (v1.8):
  *  + Added iPad Support
  *
  * 2010-03-07 (v1.7):
  *  + *MAJOR* Rebuild (preg_match and other "slow" routine removal(s))
  *  + Almost allof Gary's original code has been replaced
  *  + Large PHPUNIT testing environment created to validate new releases and additions
  *  + Added FreeBSD Platform
  *  + Added OpenBSD Platform
  *  + Added NetBSD Platform
  *  + Added SunOS Platform
  *  + Added OpenSolaris Platform
  *  + Added support of the Iceweazel Browser
  *  + Added isChromeFrame() call to check if chromeframe is in use
  *  + Moved the Opera check in front of the Firefox check due to legacy Opera User Agents
  *  + Added the __toString() method (Thanks Deano)
  *
  * 2009-11-15:
  *  + Updated the checkes for Firefox
  *  + Added the NOKIA platform
  *  + Added Checks for the NOKIA brower(s)
  *  
  * 2009-11-08:
  *  + PHP 5.3 Support
  *  + Added support for BlackBerry OS and BlackBerry browser
  *  + Added support for the Opera Mini browser
  *  + Added additional documenation
  *  + Added support for isRobot() and isMobile()
  *  + Added support for Opera version 10
  *  + Added support for deprecated Netscape Navigator version 9
  *  + Added support for IceCat
  *  + Added support for Shiretoko
  *
  * 2010-04-27 (v1.8):
  *  + Added iPad Support
  *
  * 2009-08-18:
  *  + Updated to support PHP 5.3 - removed all deprecated function calls
  *  + Updated to remove all double quotes (") -- converted to single quotes (')
  *
  * 2009-04-27:
  *  + Updated the IE check to remove a typo and bug (thanks John)
  *
  * 2009-04-22:
  *  + Added detection for GoogleBot
  *  + Added detection for the W3C Validator.
  *  + Added detection for Yahoo! Slurp
  *
  * 2009-03-14:
  *  + Added detection for iPods.
  *  + Added Platform detection for iPhones
  *  + Added Platform detection for iPods
  *
  * 2009-02-16: (Rick Hale)
  *  + Added version detection for Android phones.
  *
  * 2008-12-09:
  *  + Removed unused constant
  *
  * 2008-11-07:
  *  + Added Google's Chrome to the detection list
  *  + Added isBrowser(string) to the list of functions special thanks to
  *    Daniel 'mavrick' Lang for the function concept (http://mavrick.id.au)
  *
  *
  * Gary White noted: "Since browser detection is so unreliable, I am
  * no longer maintaining this script. You are free to use and or
  * modify/update it as you want, however the author assumes no
  * responsibility for the accuracy of the detected values."
  *
  * Anyone experienced with Gary's script might be interested in these notes:
  *
  *   Added class constants
  *   Added detection and version detection for Google's Chrome
  *   Updated the version detection for Amaya
  *   Updated the version detection for Firefox
  *   Updated the version detection for Lynx
  *   Updated the version detection for WebTV
  *   Updated the version detection for NetPositive
  *   Updated the version detection for IE
  *   Updated the version detection for OmniWeb
  *   Updated the version detection for iCab
  *   Updated the version detection for Safari
  *   Updated Safari to remove mobile devices (iPhone)
  *   Added detection for iPhone
  *   Added detection for robots
  *   Added detection for mobile devices
  *   Added detection for BlackBerry
  *   Removed Netscape checks (matches heavily with firefox & mozilla)
  *
  */

 class Browser {
  private $_agent = '';

  private $_browser_name = '';
  private $_version = '';

  private $_platform = '';
  private $_os = '';

  private $_is_aol = false;
  private $_is_mobile = false;

  private $_is_robot = false;
  private $_aol_version = '';

  const BROWSER_UNKNOWN = 'unknown';
  const VERSION_UNKNOWN = 'unknown';

  const BROWSER_OPERA = 'Opera';                            // http://www.opera.com/
  const BROWSER_OPERA_MINI = 'Opera Mini';                  // http://www.opera.com/mini/

  const BROWSER_WEBTV = 'WebTV';                            // http://www.webtv.net/pc/
  const BROWSER_IE = 'Internet Explorer';                   // http://www.microsoft.com/ie/

  const BROWSER_POCKET_IE = 'Pocket Internet Explorer';     // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
  const BROWSER_KONQUEROR = 'Konqueror';                    // http://www.konqueror.org/

  const BROWSER_ICAB = 'iCab';                              // http://www.icab.de/
  const BROWSER_OMNIWEB = 'OmniWeb';                        // http://www.omnigroup.com/applications/omniweb/

  const BROWSER_FIREBIRD = 'Firebird';                      // http://www.ibphoenix.com/
  const BROWSER_FIREFOX = 'Firefox';                        // http://www.mozilla.com/en-US/firefox/firefox.html

  const BROWSER_ICEWEASEL = 'Iceweasel';                    // http://www.geticeweasel.org/
  const BROWSER_SHIRETOKO = 'Shiretoko';                    // http://wiki.mozilla.org/Projects/shiretoko

  const BROWSER_MOZILLA = 'Mozilla';                        // http://www.mozilla.com/en-US/
  const BROWSER_AMAYA = 'Amaya';                            // http://www.w3.org/Amaya/

  const BROWSER_LYNX = 'Lynx';                              // http://en.wikipedia.org/wiki/Lynx
  const BROWSER_SAFARI = 'Safari';                          // http://apple.com

  const BROWSER_IPHONE = 'iPhone';                          // http://apple.com
  const BROWSER_IPOD = 'iPod';                              // http://apple.com

  const BROWSER_IPAD = 'iPad';                              // http://apple.com
  const BROWSER_CHROME = 'Chrome';                          // http://www.google.com/chrome

  const BROWSER_ANDROID = 'Android';                        // http://www.android.com/
  const BROWSER_GOOGLEBOT = 'GoogleBot';                    // http://en.wikipedia.org/wiki/Googlebot

  const BROWSER_SLURP = 'Yahoo! Slurp';                     // http://en.wikipedia.org/wiki/Yahoo!_Slurp
  const BROWSER_W3CVALIDATOR = 'W3C Validator';             // http://validator.w3.org/

  const BROWSER_BLACKBERRY = 'BlackBerry';                  // http://www.blackberry.com/
  const BROWSER_ICECAT = 'IceCat';                          // http://en.wikipedia.org/wiki/GNU_IceCat

  const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser';        // http://en.wikipedia.org/wiki/Web_Browser_for_S60
  const BROWSER_NOKIA = 'Nokia Browser';                    // * all other WAP-based browsers on the Nokia Platform

  const BROWSER_MSN = 'MSN Browser';                        // http://explorer.msn.com/
  const BROWSER_MSNBOT = 'MSN Bot';                         // http://search.msn.com/msnbot.htm
                                                            // http://en.wikipedia.org/wiki/Msnbot  (used for Bing as well)

  
  const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator';  // http://browser.netscape.com/ (DEPRECATED)
  const BROWSER_GALEON = 'Galeon';                          // http://galeon.sourceforge.net/ (DEPRECATED)

  const BROWSER_NETPOSITIVE = 'NetPositive';                // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
  const BROWSER_PHOENIX = 'Phoenix';                        // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)


  const PLATFORM_UNKNOWN = 'unknown';
  const PLATFORM_WINDOWS = 'Windows';

  const PLATFORM_WINDOWS_CE = 'Windows CE';
  const PLATFORM_APPLE = 'Apple';

  const PLATFORM_LINUX = 'Linux';
  const PLATFORM_OS2 = 'OS/2';

  const PLATFORM_BEOS = 'BeOS';
  const PLATFORM_IPHONE = 'iPhone';

  const PLATFORM_IPOD = 'iPod';
  const PLATFORM_IPAD = 'iPad';

  const PLATFORM_BLACKBERRY = 'BlackBerry';
  const PLATFORM_NOKIA = 'Nokia';

  const PLATFORM_FREEBSD = 'FreeBSD';
  const PLATFORM_OPENBSD = 'OpenBSD';

  const PLATFORM_NETBSD = 'NetBSD';
  const PLATFORM_SUNOS = 'SunOS';

  const PLATFORM_OPENSOLARIS = 'OpenSolaris';
  const PLATFORM_ANDROID = 'Android';

  
  const OPERATING_SYSTEM_UNKNOWN = 'unknown';

  public function Browser($useragent="") {

   $this->reset();
   if( $useragent != "" ) {

    $this->setUserAgent($useragent);
   }
   else {
    $this->determine();
   }
  }

  /**
  * Reset all properties
  */
  public function reset() {
   $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";

   $this->_browser_name = self::BROWSER_UNKNOWN;
   $this->_version = self::VERSION_UNKNOWN;

   $this->_platform = self::PLATFORM_UNKNOWN;
   $this->_os = self::OPERATING_SYSTEM_UNKNOWN;

   $this->_is_aol = false;
   $this->_is_mobile = false;

   $this->_is_robot = false;
   $this->_aol_version = self::VERSION_UNKNOWN;
  }

  /**
  * Check to see if the specific browser is valid
  * @param string $browserName
  * @return True if the browser is the specified browser
  */
  function isBrowser($browserName) { return( 0 == strcasecmp($this->_browser_name, trim($browserName))); }

  /**
  * The name of the browser.  All return types are from the class contants
  * @return string Name of the browser
  */
  public function getBrowser() { return $this->_browser_name; }

  /**
  * Set the name of the browser
  * @param $browser The name of the Browser
  */
  public function setBrowser($browser) { return $this->_browser_name = $browser; }

  /**
  * The name of the platform.  All return types are from the class contants
  * @return string Name of the browser
  */
  public function getPlatform() { return $this->_platform; }

  /**
  * Set the name of the platform
  * @param $platform The name of the Platform
  */
  public function setPlatform($platform) { return $this->_platform = $platform; }

  /**
  * The version of the browser.
  * @return string Version of the browser (will only contain alpha-numeric characters and a period)
  */
  public function getVersion() { return $this->_version; }

  /**
  * Set the version of the browser
  * @param $version The version of the Browser
  */
  public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/','',$version); }

  /**
  * The version of AOL.
  * @return string Version of AOL (will only contain alpha-numeric characters and a period)
  */
  public function getAolVersion() { return $this->_aol_version; }

  /**
  * Set the version of AOL
  * @param $version The version of AOL
  */
  public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/','',$version); }

  /**
  * Is the browser from AOL?
  * @return boolean True if the browser is from AOL otherwise false
  */
  public function isAol() { return $this->_is_aol; }

  /**
  * Is the browser from a mobile device?
  * @return boolean True if the browser is from a mobile device otherwise false
  */
  public function isMobile() { return $this->_is_mobile; }

  /**
  * Is the browser from a robot (ex Slurp,GoogleBot)?
  * @return boolean True if the browser is from a robot otherwise false
  */
  public function isRobot() { return $this->_is_robot; }

  /**
  * Set the browser to be from AOL
  * @param $isAol
  */
  public function setAol($isAol) { $this->_is_aol = $isAol; }

  /**
   * Set the Browser to be mobile
   * @param boolean $value is the browser a mobile brower or not
   */
  protected function setMobile($value=true) { $this->_is_mobile = $value; }

  /**
   * Set the Browser to be a robot
   * @param boolean $value is the browser a robot or not
   */
  protected function setRobot($value=true) { $this->_is_robot = $value; }

  /**
  * Get the user agent value in use to determine the browser
  * @return string The user agent from the HTTP header
  */
  public function getUserAgent() { return $this->_agent; }

  /**
  * Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
  * @param $agent_string The value for the User Agent
  */
  public function setUserAgent($agent_string) {
   $this->reset();

   $this->_agent = $agent_string;
   $this->determine();
  }

  /**
   * Used to determine if the browser is actually "chromeframe"
   * @since 1.7
   * @return boolean True if the browser is using chromeframe
   */
  public function isChromeFrame() {
   return( strpos($this->_agent,"chromeframe") !== false );
  }

  /**
  * Returns a formatted string with a summary of the details of the browser.
  * @return string formatted string with a summary of the browser
  */
  public function __toString() {
   return "<strong>Browser Name:</strong>{$this->getBrowser()}<br/>\n" .

          "<strong>Browser Version:</strong>{$this->getVersion()}<br/>\n" .
          "<strong>Browser User Agent String:</strong>{$this->getUserAgent()}<br/>\n" .

          "<strong>Platform:</strong>{$this->getPlatform()}<br/>";
  }
  /**
   * Protected routine to calculate and determine what the browser is in use (including platform)
   */
  protected function determine() {

   $this->checkPlatform();
   $this->checkBrowsers();
   $this->checkForAol();
  }

  /**
   * Protected routine to determine the browser type
   * @return boolean True if the browser was detected otherwise false
   */
   protected function checkBrowsers() {
   return (
    // well-known, well-used
    // Special Notes:
    // (1) Opera must be checked before FireFox due to the odd
    //     user agents used in some older versions of Opera
    // (2) WebTV is strapped onto Internet Explorer so we must
    //     check for WebTV before IE
    // (3) (deprecated) Galeon is based on Firefox and needs to be
    //     tested before Firefox is tested
    // (4) OmniWeb is based on Safari so OmniWeb check must occur
    //     before Safari
    // (5) Netscape 9+ is based on Firefox so Netscape checks
    //     before FireFox are necessary
    $this->checkBrowserWebTv() ||

    $this->checkBrowserInternetExplorer() ||
    $this->checkBrowserOpera() ||
    $this->checkBrowserGaleon() ||

    $this->checkBrowserNetscapeNavigator9Plus() ||
    $this->checkBrowserFirefox() ||
    $this->checkBrowserChrome() ||

    $this->checkBrowserOmniWeb() ||

    // common mobile
    $this->checkBrowserAndroid() ||

    $this->checkBrowseriPad() ||
    $this->checkBrowseriPod() ||
    $this->checkBrowseriPhone() ||

    $this->checkBrowserBlackBerry() ||
    $this->checkBrowserNokia() ||

    // common bots

    $this->checkBrowserGoogleBot() ||
    $this->checkBrowserMSNBot() ||
    $this->checkBrowserSlurp() ||

    // WebKit base check (post mobile and others)
    $this->checkBrowserSafari() ||
    
    // everyone else
    $this->checkBrowserNetPositive() ||

    $this->checkBrowserFirebird() ||
    $this->checkBrowserKonqueror() ||
    $this->checkBrowserIcab() ||

    $this->checkBrowserPhoenix() ||
    $this->checkBrowserAmaya() ||
    $this->checkBrowserLynx() ||

    $this->checkBrowserShiretoko() ||
    $this->checkBrowserIceCat() ||
    $this->checkBrowserW3CValidator() ||

    $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
   );
     }

     /**
      * Determine if the user is using a BlackBerry (last updated 1.7)
      * @return boolean True if the browser is the BlackBerry browser otherwise false
      */
     protected function checkBrowserBlackBerry() {

      if( stripos($this->_agent,'blackberry') !== false ) {

       $aresult = explode("/",stristr($this->_agent,"BlackBerry"));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion($aversion[0]);

       $this->_browser_name = self::BROWSER_BLACKBERRY;
       $this->setMobile(true);

       return true;
      }
      return false;
     }

     /**
      * Determine if the user is using an AOL User Agent (last updated 1.7)
      * @return boolean True if the browser is from AOL otherwise false
      */
     protected function checkForAol() {

   $this->setAol(false);
   $this->setAolVersion(self::VERSION_UNKNOWN);

   if( stripos($this->_agent,'aol') !== false ) {

       $aversion = explode(' ',stristr($this->_agent, 'AOL'));

       $this->setAol(true);
       $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is the GoogleBot or not (last updated 1.7)
      * @return boolean True if the browser is the GoogletBot otherwise false
      */
     protected function checkBrowserGoogleBot() {

      if( stripos($this->_agent,'googlebot') !== false ) {

    $aresult = explode('/',stristr($this->_agent,'googlebot'));

    $aversion = explode(' ',$aresult[1]);
    $this->setVersion(str_replace(';','',$aversion[0]));

    $this->_browser_name = self::BROWSER_GOOGLEBOT;
    $this->setRobot(true);

    return true;
      }
      return false;
     }

  /**
      * Determine if the browser is the MSNBot or not (last updated 1.9)
      * @return boolean True if the browser is the MSNBot otherwise false
      */
  protected function checkBrowserMSNBot() {

   if( stripos($this->_agent,"msnbot") !== false ) {

    $aresult = explode("/",stristr($this->_agent,"msnbot"));

    $aversion = explode(" ",$aresult[1]);
    $this->setVersion(str_replace(";","",$aversion[0]));

    $this->_browser_name = self::BROWSER_MSNBOT;
    $this->setRobot(true);

    return true;
   }
   return false;
  }     
     
     /**
      * Determine if the browser is the W3C Validator or not (last updated 1.7)
      * @return boolean True if the browser is the W3C Validator otherwise false
      */
     protected function checkBrowserW3CValidator() {

      if( stripos($this->_agent,'W3C-checklink') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'W3C-checklink'));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion($aversion[0]);

       $this->_browser_name = self::BROWSER_W3CVALIDATOR;
       return true;
      }

      else if( stripos($this->_agent,'W3C_Validator') !== false ) {

    // Some of the Validator versions do not delineate w/ a slash - add it back in
    $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);

       $aresult = explode('/',stristr($ua,'W3C_Validator'));
       $aversion = explode(' ',$aresult[1]);

       $this->setVersion($aversion[0]);
       $this->_browser_name = self::BROWSER_W3CVALIDATOR;

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
      * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
      */
     protected function checkBrowserSlurp() {

      if( stripos($this->_agent,'slurp') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Slurp'));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion($aversion[0]);

       $this->_browser_name = self::BROWSER_SLURP;
    $this->setRobot(true);

    $this->setMobile(false);
       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Internet Explorer or not (last updated 1.7)
      * @return boolean True if the browser is Internet Explorer otherwise false
      */
     protected function checkBrowserInternetExplorer() {

      // Test for v1 - v1.5 IE
      if( stripos($this->_agent,'microsoft internet explorer') !== false ) {

       $this->setBrowser(self::BROWSER_IE);
       $this->setVersion('1.0');

       $aresult = stristr($this->_agent, '/');
       if( preg_match('/308|425|426|474|0b1/i', $aresult) ) {

        $this->setVersion('1.5');
       }
    return true;
      }
      // Test for versions > 1.5

      else if( stripos($this->_agent,'msie') !== false && stripos($this->_agent,'opera') === false ) {

       // See if the browser is the odd MSN Explorer
       if( stripos($this->_agent,'msnb') !== false ) {

        $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'MSN'));

        $this->setBrowser( self::BROWSER_MSN );
        $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));

        return true;
       }
       $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'msie'));

       $this->setBrowser( self::BROWSER_IE );
       $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));

       return true;
      }
      // Test for Pocket IE
      else if( stripos($this->_agent,'mspie') !== false || stripos($this->_agent,'pocket') !== false ) {

       $aresult = explode(' ',stristr($this->_agent,'mspie'));

       $this->setPlatform( self::PLATFORM_WINDOWS_CE );
       $this->setBrowser( self::BROWSER_POCKET_IE );

       $this->setMobile(true);

       if( stripos($this->_agent,'mspie') !== false ) {

        $this->setVersion($aresult[1]);
       }
       else {
        $aversion = explode('/',$this->_agent);

        $this->setVersion($aversion[1]);
       }
       return true;
      }

   return false;
     }

     /**
      * Determine if the browser is Opera or not (last updated 1.7)
      * @return boolean True if the browser is Opera otherwise false
      */
     protected function checkBrowserOpera() {
      if( stripos($this->_agent,'opera mini') !== false ) {

       $resultant = stristr($this->_agent, 'opera mini');
       if( preg_match('/\//',$resultant) ) {

        $aresult = explode('/',$resultant);
        $aversion = explode(' ',$aresult[1]);

        $this->setVersion($aversion[0]);
    }
       else {
        $aversion = explode(' ',stristr($resultant,'opera mini'));

        $this->setVersion($aversion[1]);
       }
       $this->_browser_name = self::BROWSER_OPERA_MINI;

    $this->setMobile(true);
    return true;
      }
      else if( stripos($this->_agent,'opera') !== false ) {

       $resultant = stristr($this->_agent, 'opera');
       if( preg_match('/Version\/(10.*)$/',$resultant,$matches) ) {

        $this->setVersion($matches[1]);
       }
       else if( preg_match('/\//',$resultant) ) {

        $aresult = explode('/',str_replace("("," ",$resultant));

        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
       }

       else {
        $aversion = explode(' ',stristr($resultant,'opera'));

        $this->setVersion(isset($aversion[1])?$aversion[1]:"");
       }

       $this->_browser_name = self::BROWSER_OPERA;
       return true;
      }

   return false;
     }

     /**
      * Determine if the browser is Chrome or not (last updated 1.7)
      * @return boolean True if the browser is Chrome otherwise false
      */
     protected function checkBrowserChrome() {
      if( stripos($this->_agent,'Chrome') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Chrome'));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion($aversion[0]);

       $this->setBrowser(self::BROWSER_CHROME);
       return true;
      }

      return false;
     }


     /**
      * Determine if the browser is WebTv or not (last updated 1.7)
      * @return boolean True if the browser is WebTv otherwise false
      */
     protected function checkBrowserWebTv() {

      if( stripos($this->_agent,'webtv') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'webtv'));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion($aversion[0]);

       $this->setBrowser(self::BROWSER_WEBTV);
       return true;
      }

      return false;
     }

     /**
      * Determine if the browser is NetPositive or not (last updated 1.7)
      * @return boolean True if the browser is NetPositive otherwise false
      */
     protected function checkBrowserNetPositive() {
      if( stripos($this->_agent,'NetPositive') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'NetPositive'));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion(str_replace(array('(',')',';'),'',$aversion[0]));

       $this->setBrowser(self::BROWSER_NETPOSITIVE);
       return true;
      }

      return false;
     }

     /**
      * Determine if the browser is Galeon or not (last updated 1.7)
      * @return boolean True if the browser is Galeon otherwise false
      */
     protected function checkBrowserGaleon() {
      if( stripos($this->_agent,'galeon') !== false ) {

       $aresult = explode(' ',stristr($this->_agent,'galeon'));

       $aversion = explode('/',$aresult[0]);
       $this->setVersion($aversion[1]);

       $this->setBrowser(self::BROWSER_GALEON);
       return true;
      }

      return false;
     }

     /**
      * Determine if the browser is Konqueror or not (last updated 1.7)
      * @return boolean True if the browser is Konqueror otherwise false
      */
     protected function checkBrowserKonqueror() {
      if( stripos($this->_agent,'Konqueror') !== false ) {

       $aresult = explode(' ',stristr($this->_agent,'Konqueror'));

       $aversion = explode('/',$aresult[0]);
       $this->setVersion($aversion[1]);

       $this->setBrowser(self::BROWSER_KONQUEROR);
       return true;
      }

      return false;
     }

     /**
      * Determine if the browser is iCab or not (last updated 1.7)
      * @return boolean True if the browser is iCab otherwise false
      */
     protected function checkBrowserIcab() {
      if( stripos($this->_agent,'icab') !== false ) {

       $aversion = explode(' ',stristr(str_replace('/',' ',$this->_agent),'icab'));

       $this->setVersion($aversion[1]);
       $this->setBrowser(self::BROWSER_ICAB);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is OmniWeb or not (last updated 1.7)
      * @return boolean True if the browser is OmniWeb otherwise false
      */
     protected function checkBrowserOmniWeb() {

      if( stripos($this->_agent,'omniweb') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'omniweb'));

       $aversion = explode(' ',isset($aresult[1])?$aresult[1]:"");

       $this->setVersion($aversion[0]);
       $this->setBrowser(self::BROWSER_OMNIWEB);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Phoenix or not (last updated 1.7)
      * @return boolean True if the browser is Phoenix otherwise false
      */
     protected function checkBrowserPhoenix() {

      if( stripos($this->_agent,'Phoenix') !== false ) {

       $aversion = explode('/',stristr($this->_agent,'Phoenix'));

       $this->setVersion($aversion[1]);
       $this->setBrowser(self::BROWSER_PHOENIX);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Firebird or not (last updated 1.7)
      * @return boolean True if the browser is Firebird otherwise false
      */
     protected function checkBrowserFirebird() {

      if( stripos($this->_agent,'Firebird') !== false ) {

       $aversion = explode('/',stristr($this->_agent,'Firebird'));

       $this->setVersion($aversion[1]);
       $this->setBrowser(self::BROWSER_FIREBIRD);

    return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
   * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
      * @return boolean True if the browser is Netscape Navigator 9+ otherwise false
      */
     protected function checkBrowserNetscapeNavigator9Plus() {

      if( stripos($this->_agent,'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i',$this->_agent,$matches) ) {

       $this->setVersion($matches[1]);
       $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);

       return true;
      }
      else if( stripos($this->_agent,'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i',$this->_agent,$matches) ) {

       $this->setVersion($matches[1]);
       $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
      * @return boolean True if the browser is Shiretoko otherwise false
      */
     protected function checkBrowserShiretoko() {

      if( stripos($this->_agent,'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i',$this->_agent,$matches) ) {

       $this->setVersion($matches[1]);
       $this->setBrowser(self::BROWSER_SHIRETOKO);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
      * @return boolean True if the browser is Ice Cat otherwise false
      */
     protected function checkBrowserIceCat() {

      if( stripos($this->_agent,'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i',$this->_agent,$matches) ) {

       $this->setVersion($matches[1]);
       $this->setBrowser(self::BROWSER_ICECAT);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Nokia or not (last updated 1.7)
      * @return boolean True if the browser is Nokia otherwise false
      */
     protected function checkBrowserNokia() {

      if( preg_match("/Nokia([^\/]+)\/([^ SP]+)/i",$this->_agent,$matches) ) {
       $this->setVersion($matches[2]);

    if( stripos($this->_agent,'Series60') !== false || strpos($this->_agent,'S60') !== false ) {

     $this->setBrowser(self::BROWSER_NOKIA_S60);
    }
    else {
     $this->setBrowser( self::BROWSER_NOKIA );
    }

       $this->setMobile(true);
       return true;
      }
   return false;
     }

     /**
      * Determine if the browser is Firefox or not (last updated 1.7)
      * @return boolean True if the browser is Firefox otherwise false
      */
     protected function checkBrowserFirefox() {
      if( stripos($this->_agent,'safari') === false ) {

    if( preg_match("/Firefox[\/ \(]([^ ;\)]+)/i",$this->_agent,$matches) ) {
     $this->setVersion($matches[1]);

     $this->setBrowser(self::BROWSER_FIREFOX);
     return true;
    }

    else if( preg_match("/Firefox$/i",$this->_agent,$matches) ) {
     $this->setVersion("");

     $this->setBrowser(self::BROWSER_FIREFOX);
     return true;
    }
   }

      return false;
     }

  /**
      * Determine if the browser is Firefox or not (last updated 1.7)
      * @return boolean True if the browser is Firefox otherwise false
      */
     protected function checkBrowserIceweasel() {
   if( stripos($this->_agent,'Iceweasel') !== false ) {

    $aresult = explode('/',stristr($this->_agent,'Iceweasel'));

    $aversion = explode(' ',$aresult[1]);
    $this->setVersion($aversion[0]);

    $this->setBrowser(self::BROWSER_ICEWEASEL);
    return true;
   }

   return false;
  }
     /**
      * Determine if the browser is Mozilla or not (last updated 1.7)
      * @return boolean True if the browser is Mozilla otherwise false
      */
     protected function checkBrowserMozilla() {
      if( stripos($this->_agent,'mozilla') !== false  && preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) {

       $aversion = explode(' ',stristr($this->_agent,'rv:'));

       preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent,$aversion);
       $this->setVersion(str_replace('rv:','',$aversion[0]));

       $this->setBrowser(self::BROWSER_MOZILLA);
       return true;
      }

      else if( stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i',$this->_agent) && stripos($this->_agent,'netscape') === false ) {

       $aversion = explode('',stristr($this->_agent,'rv:'));

       $this->setVersion(str_replace('rv:','',$aversion[0]));

       $this->setBrowser(self::BROWSER_MOZILLA);
       return true;
      }

      else if( stripos($this->_agent,'mozilla') !== false  && preg_match('/mozilla\/([^ ]*)/i',$this->_agent,$matches) && stripos($this->_agent,'netscape') === false ) {

       $this->setVersion($matches[1]);
       $this->setBrowser(self::BROWSER_MOZILLA);

       return true;
      }
   return false;
     }

     /**
      * Determine if the browser is Lynx or not (last updated 1.7)
      * @return boolean True if the browser is Lynx otherwise false
      */
     protected function checkBrowserLynx() {

      if( stripos($this->_agent,'lynx') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Lynx'));

       $aversion = explode(' ',(isset($aresult[1])?$aresult[1]:""));

       $this->setVersion($aversion[0]);
       $this->setBrowser(self::BROWSER_LYNX);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Amaya or not (last updated 1.7)
      * @return boolean True if the browser is Amaya otherwise false
      */
     protected function checkBrowserAmaya() {

      if( stripos($this->_agent,'amaya') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Amaya'));

       $aversion = explode(' ',$aresult[1]);
       $this->setVersion($aversion[0]);

       $this->setBrowser(self::BROWSER_AMAYA);
       return true;
      }

      return false;
     }

     /**
      * Determine if the browser is Safari or not (last updated 1.7)
      * @return boolean True if the browser is Safari otherwise false
      */
     protected function checkBrowserSafari() {
      if( stripos($this->_agent,'Safari') !== false && stripos($this->_agent,'iPhone') === false && stripos($this->_agent,'iPod') === false ) {

       $aresult = explode('/',stristr($this->_agent,'Version'));

       if( isset($aresult[1]) ) {
        $aversion = explode(' ',$aresult[1]);

        $this->setVersion($aversion[0]);
       }
       else {
        $this->setVersion(self::VERSION_UNKNOWN);
       }

       $this->setBrowser(self::BROWSER_SAFARI);
       return true;
      }

      return false;
     }

     /**
      * Determine if the browser is iPhone or not (last updated 1.7)
      * @return boolean True if the browser is iPhone otherwise false
      */
     protected function checkBrowseriPhone() {
      if( stripos($this->_agent,'iPhone') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Version'));

       if( isset($aresult[1]) ) {
        $aversion = explode(' ',$aresult[1]);

        $this->setVersion($aversion[0]);
       }
       else {
        $this->setVersion(self::VERSION_UNKNOWN);
       }

       $this->setMobile(true);
       $this->setBrowser(self::BROWSER_IPHONE);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is iPod or not (last updated 1.7)
      * @return boolean True if the browser is iPod otherwise false
      */
     protected function checkBrowseriPad() {

      if( stripos($this->_agent,'iPad') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Version'));

       if( isset($aresult[1]) ) {
        $aversion = explode(' ',$aresult[1]);

        $this->setVersion($aversion[0]);
       }
       else {
        $this->setVersion(self::VERSION_UNKNOWN);
       }

       $this->setMobile(true);
       $this->setBrowser(self::BROWSER_IPAD);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is iPod or not (last updated 1.7)
      * @return boolean True if the browser is iPod otherwise false
      */
     protected function checkBrowseriPod() {

      if( stripos($this->_agent,'iPod') !== false ) {

       $aresult = explode('/',stristr($this->_agent,'Version'));

       if( isset($aresult[1]) ) {
        $aversion = explode(' ',$aresult[1]);

        $this->setVersion($aversion[0]);
       }
       else {
        $this->setVersion(self::VERSION_UNKNOWN);
       }

       $this->setMobile(true);
       $this->setBrowser(self::BROWSER_IPOD);

       return true;
      }
      return false;
     }

     /**
      * Determine if the browser is Android or not (last updated 1.7)
      * @return boolean True if the browser is Android otherwise false
      */
     protected function checkBrowserAndroid() {

      if( stripos($this->_agent,'Android') !== false ) {

       $aresult = explode(' ',stristr($this->_agent,'Android'));

       if( isset($aresult[1]) ) {
        $aversion = explode(' ',$aresult[1]);

        $this->setVersion($aversion[0]);
       }
       else {
        $this->setVersion(self::VERSION_UNKNOWN);
       }

       $this->setMobile(true);
       $this->setBrowser(self::BROWSER_ANDROID);

       return true;
      }
      return false;
     }

     /**
      * Determine the user's platform (last updated 1.7)
      */
     protected function checkPlatform() {

      if( stripos($this->_agent, 'windows') !== false ) {

       $this->_platform = self::PLATFORM_WINDOWS;
      }
      else if( stripos($this->_agent, 'iPad') !== false ) {

       $this->_platform = self::PLATFORM_IPAD;
      }
      else if( stripos($this->_agent, 'iPod') !== false ) {

       $this->_platform = self::PLATFORM_IPOD;
      }
      else if( stripos($this->_agent, 'iPhone') !== false ) {

       $this->_platform = self::PLATFORM_IPHONE;
      }
      elseif( stripos($this->_agent, 'mac') !== false ) {

       $this->_platform = self::PLATFORM_APPLE;
      }
      elseif( stripos($this->_agent, 'android') !== false ) {

       $this->_platform = self::PLATFORM_ANDROID;
      }
      elseif( stripos($this->_agent, 'linux') !== false ) {

       $this->_platform = self::PLATFORM_LINUX;
      }
      else if( stripos($this->_agent, 'Nokia') !== false ) {

       $this->_platform = self::PLATFORM_NOKIA;
      }
      else if( stripos($this->_agent, 'BlackBerry') !== false ) {

       $this->_platform = self::PLATFORM_BLACKBERRY;
      }
      elseif( stripos($this->_agent,'FreeBSD') !== false ) {

       $this->_platform = self::PLATFORM_FREEBSD;
      }
      elseif( stripos($this->_agent,'OpenBSD') !== false ) {

       $this->_platform = self::PLATFORM_OPENBSD;
      }
      elseif( stripos($this->_agent,'NetBSD') !== false ) {

       $this->_platform = self::PLATFORM_NETBSD;
      }
      elseif( stripos($this->_agent, 'OpenSolaris') !== false ) {

       $this->_platform = self::PLATFORM_OPENSOLARIS;
      }
      elseif( stripos($this->_agent, 'SunOS') !== false ) {

       $this->_platform = self::PLATFORM_SUNOS;
      }
      elseif( stripos($this->_agent, 'OS\/2') !== false ) {

       $this->_platform = self::PLATFORM_OS2;
      }
      elseif( stripos($this->_agent, 'BeOS') !== false ) {

       $this->_platform = self::PLATFORM_BEOS;
      }
      elseif( stripos($this->_agent, 'win') !== false ) {

       $this->_platform = self::PLATFORM_WINDOWS;
      }

     }
    }
?>