30 April 2011

หนังสือน่าอ่าน The Underground PHP and Oracle Manual


โหลดได้จาก oracle เลย : http://www.oracle.com/technetwork/topics/php/026973.pdf

GET/POST Method in Perl


module สำหรับ ใช้ get กับ post แยก subroutine กันนะครับ

DataParam.pm
package DataParam;

sub new
{
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}

sub GetParam
{
my $self = shift;
my $params = $ENV{'QUERY_STRING'};
my $data = {};
foreach (split(/&/,$params))
{
my ($key,$value) = split(/=/,$_);
#### บรรทัดล่างเอาไว้แปลงค่าอักษรที่เป็น % นำหน้า
$value =~ s/%(..)/chr(hex($1))/ge;
$data->{$key} = $value;
}
return $data;
}

sub PostParam
{
my $self = shift;
my $params;
read(STDIN,$params,$ENV{'CONTENT_LENGTH'});
my $data = {};
foreach (split(/&/,$params))
{
my ($key,$value) = split(/=/,$_);
#### บรรทัดล่างเอาไว้แปลงค่าอักษรที่เป็น % นำหน้า
$value =~ s/%(..)/chr(hex($1))/ge;
$data->{$key} = $value;
}
return $data;
}

1;

วิธีการใช้งาน
index.pl
#!c:\perl\bin\perl.exe

use strict;
use CGI;
use DataParam;

my $param = DataParam->new();
my $GET = $param->GetParam();
my $POST = $param->PostParam();

my $cgi = CGI->new();
print $cgi->header("text/html");

################## xxx กับ yyy คือชื่อตัวแปรที่ส่งมาครับ
print $POST->{'xxx'};
print $GET->{'yyy'};

29 April 2011

create Perl Module


perl module จะมีนามสกลุเป็น .pm โดยด้านบนต้องระบบ package เอาไว้

Test.pm
package Test;

sub new{
$class = shift;
$self = {};
bless($self,$class);
return $self;
}

sub TestFunction{
my $self = shift;
return "hello my module";
}

new subroutine นั้นเป็นคอนสตัคเตอ ของโมดูลต้องประกาศไว้ด้วย
ต่อจากคอนสตัคเตอร์ก็เป็นฟังก์ชันของเรา เวลาเรียกใช้งานก็ใช้ use ตามปกติ

myfile.pl
#!c:\perl\bin\perl.exe
use Test;

print "content-type:text/html\n\n";

$data = Test->new();
print $data->TestFunction();

Regular expression


$result = "is somthing";

if($result =~ /something/){
print "result มีข้อความ something\n";
}

ดู regular expression เพิ่มเติม http://www.troubleshooters.com/codecorn/littperl/perlreg.htm

Logical Operator





&& ถ้าหากด้านซ้ายเป็นจริงจะทำงานด้านขวา

|| ถ้าด้านซ้ายเป็นเท็จจะทำงานด้านขวา
// ถ้าด้านซ้ายไม่ได้กำหนดค่าทำด้านขวา

ตัวอย่าง

$x = 0;
$y = $x && 5;
$y จะมีค่าเท่ากับ 0

$x = 1;
$y = $x && 5;
$y จะมีค่าเท่ากับ 5

$x = 0;
$y = $x || 5;
$y จะมีค่าเท่ากับ 5

$x = 20;
$y = $x || 5;
$y จะมีค่าเท่ากับ 20

$y = $x // 5;
$y จะมีค่าเท่ากับ 5

String Operator

การเชิื่อม string กับ ตัวแปร
print "string".$x."=".$y."\n";

print repeat
print "-" x 20;
ผลลัพธ์จะได้ - ต่อกัน 20 อัน

Syntax Condition Test

Test Condition,Excute Code
if($x >= 0){
print "x is positive number\n";
}

Defind code,Test Condition,Excute
print "x is positive number\n" if($x >= 0);

Excute code,Test Condition,Excute Code
($x >= 0) && print "x is positive number\n";

28 April 2011

hash variable

ตัวแปร hash ใน perl จะขึ้นต้นด้วย % ซึ่งสามารถกำหนดค่าโดย

%hash = (key1,value1,key2,value2,.....);

%hash = (key1 => value1,key2 => value2,...);

การแสดงค่าของ hash

$hash{key};

แสดงเฉพาะ key ที่อยู่ใน hash

@allKey = keys %hash;

แสดงเฉพาะ value ที่อยู่ใน hash

@allValue = values %hash;

loop hash

while(keys %hash){
print $_."=".$hash{$_};
}

for(values %hash){
print $_;
}

array in perl

array ใน perl จะใช้เครื่องหมาย @ นำหน้าตัวแปร

@array = (value1,value2,value3,...);

โดยสามารถแสดงค่าของแต่ละ index โดยใช้

$array[number]; # number หมายถึงตัวเลขของ index เริ่มจาก 0

function ที่ใช้กับอาเรย์

push(@array,value); #เพิ่มข้อมูลเข้าไปยังท้ายสุดของอาเรย์
pop(@array); #ลบข้อมูลท้ายสุดของอาเรย์
unshift(@array,value); #เพิ่มข้อมูลไปที่ index 0
shift(@array); #ลบข้อมูลที่ index 0
delete($array[index]);

การนับจำนวนของ array
scalar(@array);
$#array+1; #เป็นการหาค่า index ตัวสุดท้ายของ อาเรย์ ถ้านำมาบวก 1 คือจำนวนอาเรย์ทั้งหมด

foreach ของ array

foreach(@array){
print $_;
}

foreach(0..$#array){
print $array[$_];
}

แสดงค่าตำแหน่งของข้อมูลที่เก็บบน memory

#!c:\perl\bin\perl.exe

use strict;
use CGI;

my $cgi = CGI->new;
print $cgi->header("text/html");

my $data = "myData";
my $ref = \$data; #$ref จะเก็บค่าตำแหน่งของ $data
print $ref."<br>"; # แสดงค่าตำแหน่ง
print $$ref."<br>"; #ใช้ค่าของตำแหน่งแสดงข้อมูลที่ตำแหน่งนั้น
print ${$ref}; #แสดงข้อมูลที่ตำแหน่งนั้น

declare scalar variable

ประกาศแบบไม่กำหนดค่าเริ่มต้นให้
my $scalar;

ประกาศแบบกำหนดค่าเริ่มต้นให้
my $scalar = value;

ประกาศแบบหลายตัวแปร
my($scalar1,$scalar2,.....) = (value1,value2,....);

27 April 2011

use strict in perl

strict module เป็นตัวที่คอยช่วยตรวจสอบการเขียนโค๊ดของเราว่าถูกต้องตามหลักหรือไม่

#!c:\perl\bin\perl.exe

use strict;
use CGI;

my $cgi = CGI->new;
print $cgi->header("text/html");

$ref = \$foo;
print $$ref; #ถ้าใส่ use strict จะแสดง error แต่ถ้าไม่ใช่จะเป็นหน้าเปล่า

$ref = "foo";
print $$ref; #ถ้าใส่ use strict จะแสดง error แต่ถ้าไม่ใช่จะเป็นหน้าเปล่า

$file = "STDOUT";
print $file "Hi!"; #ถ้าใส่ use strict จะแสดง error แต่ถ้าไม่ใช่จะแสดงคำว่า Hi! อย่างเดียว (ผิดเนื่องจากไม่ใส่ . เชื่อม)

perl auto-flush

การทำ auto-flush ใน perl ทำได้โดยการเซ็ตค่า $| เป็นหนึ่งซึ่งโดยปกติแล้วค่านี้จะมีค่าเป็น 0

#!c:\perl\bin\perl.exe

use CGI;

my $cgi = CGI->new;
print $cgi->header('text/html');

$|=1;

for ( 1..5 ) {
print "Value is $_";
sleep 1;
}

เมื่อทำการรัน จะเห็นข้อความขึ้นมาหนึ่งบรรทัดแล้วหยุดไปหนึ่งวิแล้วก็ค่อยมีบรรทัดใหม่ขึ้นมา

printf VS sprintf

ความแตกต่างของ printf กับ sprintf คือ sprintf มี null character (\0) ต่อท้าย

print ใน perl

#!c:\perl\bin\perl.exe

print "content-type:text/html\n\n";

#print ค่าของตัวแปร
print "Server $ENV{'SERVER_NAME'}\n\n";

#print ตัวอักษรด้วย (')
print 'We are running Perl version:';
print $^V."\n\n";

#print multiline
print < The perl binary : $^X
The perl script : $0
EOF

passing parametor to subroutines

การส่งค่า parametor ใน perl

รับเข้ามาเป็น array ใช้ @_
รับค่าแต่ละตัวตามลำดับ $_[1],$_[2],.....

การใช้ quote ใน perl

double qoute (") ค่าที่อยู่ใน doble qoute ถ้าเป็นตัวแปรจะแสดงค่าของตัวแปรนั้นออกมา ถ้าเป็นตัวอักษรพิเศษก็จะแสดงตัวอักษรพิเศษออกมา

single qoute (') ค่าที่อยู่ใน single qoute จะแสดงตามที่อยู่ข้างในทั้งหมด

black qoute (`) ค่าที่อยู่ในนี้คือคำสั่ง shell หรือ dos โดยจะ return ค่าผลลัพธ์ที่ได้ สามารถใช้ตัวแปรมารับค่าได้

#!c:\perl\bin\perl
print "content-type:text/html \n\n";
print "Hello World\n"; #จะได้ Hello World
print 'Hello World\n'; #จะได้ Hello World\n
print `date`; #จะได้ The current date is: Wed 04/27/2011 Enter the new date: (mm-dd-yy)

ผลลัพธ์ใน browser
Hello World Hello World\nThe current date is: Wed 04/27/2011 Enter the new date: (mm-dd-yy)

ผลลัพธ์ใน view->source
Hello World
Hello World\nThe current date is: Wed 04/27/2011
Enter the new date: (mm-dd-yy)

my function ในภาษา perl

การใช้ my function กับตัวแปรใน perl คือการกำหนด variable scope ถ้าเราสร้างตัวแปรที่มีชื่อเหมือนกับ global variable ในฟังก์ชั่นโดยใช้ my ด้วย global variable จะไม่ถูกแก้ไข

#!c:\perl\bin\perl
print "content-type:text/html \n\n";
$myString = "haha";
sub test
{
my $myString = "test";
}
print $myString."->01";
&test();
print $myString."->02";

ผลลัพธ์
haha->01
haha->02

###############################################

#!c:\perl\bin\perl
print "content-type:text/html \n\n";
$myString = "haha";
sub test
{
$myString = "test";
}
print $myString."->01";
&test();
print $myString."->02";

ผลลัพธ์
haha->01
test->02

###############################################

#!c:\perl\bin\perl
print "content-type:text/html \n\n";
my $myString = "haha";
sub test {
$myString = "test";
}
print $myString. "->01";
&test();
print $myString. "->02";

ผลลัพธ์
haha->01
test->02

###############################################

#!c:\perl\bin\perl
print "content-type:text/html \n\n";
my $myString = "haha";
sub test {
my $myString = "test";
}
print $myString. "->01";
&test();
print $myString. "->02";

ผลลัพธ์
haha->01
haha->02

20 April 2011

Method access modifier ใน objective-c

‘-’ in the front of the definition, signifies that the method is an instance method.
‘+’ to define a class method (more on class methods in a future post).

credit : http://macdevelopertips.com/objective-c/objective-c-defining-a-class.html

เปรียบเทียบชื่อ template ของ xcode ios

Cocoa Touch OpenGL Application -> OpenGL ES Application

Cocoa Touch Tab Bar -> Tab Bar Application

Cocoa Touch Utility -> Utility Application

Cocoa Touch Application -> Window-based Application / View based application

Cocoa Touch List -> Navigation based Application

12 April 2011

ความหมายของ prefix "NS"

อ้างอิงจาก wiki ละกัน

NEXTSTEP, an object-oriented, multitasking operating system by NeXT, as well as a prefix for certain system-provided classes in the operating system, such as "NSString"

มันคือ nextstep นั้นเอง

http://en.wikipedia.org/wiki/NS