เมนู

แสดงโพสต์

ส่วนนี้ให้คุณดูโพสต์ทั้งหมดของสมาชิกท่านนี้ (เฉพาะโพสต์ในส่วนที่คุณมีสิทธิ์เข้าถึง)

เมนู แสดงโพสต์

ข้อความ - mrtomson

#1

<div id="google_map_thseo_code"><!--.--></div>
<script type="text/javascript">
//<![CDATA[
document.getElementById('google_map_thseo_code').innerHTML="<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://www.google.com/maps?q=pspinw&amp;hl=th&amp;sll=13.736307,100.638405&amp;sspn=0.017092,0.033023&amp;ie=UTF8&amp;hq=pspinw&amp;hnear=&amp;ll=13.780776,100.644088&amp;spn=0.068357,0.132093&amp;z=14&amp;iwloc=A&amp;cid=11186989429448258373&amp;output=embed"></iframe><br /><small><a href="http://www.google.com/maps?q=pspinw&amp;hl=th&amp;sll=13.736307,100.638405&amp;sspn=0.017092,0.033023&amp;ie=UTF8&amp;hq=pspinw&amp;hnear=&amp;ll=13.780776,100.644088&amp;spn=0.068357,0.132093&amp;z=14&amp;iwloc=A&amp;cid=11186989429448258373&amp;source=embed" style="color:#0000FF;text-align:left">ดูแผนที่ขนาดใหญ่ขึ้น</a></small>";
//]]>
</script>
#2
สำหรับเก็บ ชื่อ link
"/(<a.*>)(\w.*)(<.*>)/ismU"

สำหรับเก็บ URL
'/(<a.*?href=")(.*?)(")/i'
#3
กันได้ยากครับ
แล้วพอกันได้ ผู้ใช้ก็สามารถใช้โปรแกรมสำหรับถ่ายวิดีโอหน้าจอ จับภาำพไปได้อยู่ดี

:o
#4
ต้องเขียนเองครับฟังก์ชั่นนี้ (เฉพาะใน VB เพราะเท่าที่ผมเึคยศึกษามา VB ไม่มีฟังก์ชั่นนี้)
ซึ่งถ้าจะเขียนฟังก์ชั่นนี้ก็มี 3 วิธี

1. คือแบบเรียก API  GetSystemTimeAsFileTime  ซึ่งก็ต้องมีขั้นตอนเรียกฟังก์ชั่นอื่นๆมาช่วยเหลือในการคำนวนให้เป็น TimeStamp อีก
->แล้วก็ยังต้องประกาศ type ฯลฯ ทำให้โค้ดยาวขึ้นโดยไม่จำเป็น

2. เขียนฟังก์ชั่นด้วยภาษา c เป็น dll แล้วเรียกใช้จาก vb เอา(แบบนี้เขียนเร็วดี โค้ดก็ไม่ยาวมาก-> ใน VB น่ะไม่ยาว ใน ถ้านับรวม ใน C อาจจะยาวกกว่าข้อ 1 )

3. ใช้ฟังก์ชั่นของ VB นั่นแหละเรียกใช้ฟังก์ชั่นธรรมดาๆ เรียกเวลาออกมาแล้วคำนวนให้เป็น timestamp เอา <- อันนี้แหละที่ผมจะเขียนให้วันนี้

ก่อนอื่นก็แทรกโค้ดนี้ลงไป จากนั้น

Function VBTime() As Long
VBTime = (Now - DateSerial(1970, 1, 1)) * 86400
End Function

Function TimeToCtime(stime As Long) As String
TimeToCtime = CDate(stime / 86400 + DateSerial(1970, 1, 1))
End Function


วิธีการเรียกใช้ ตัวอย่าง
MsgBox VBTime() ' ก็จะแสดง timstamp ของเวลาปัจจุบันออกมา
MsgBox TimeToCtime(ตรงนี้ใส่ timestamp ลงไปก็จะได้เวลาปกติกลับคืนมา แน่นอนว่าใส่ค่าที่ได้จากฟังกฺ์ชั่น VBTime ลงไปได้)

อธิบายเพิ่มเติม
ที่ฟังก์ชั่น จะเห็นตรงที่เขียนว่า DateSerial(1970, 1, 1) คุณอาจจะคิดว่าผมใส่เวลาผิด และคุณอาจจะไปแก้มัน แต่จริงๆ ค่านั้นถูกแล้วไม่ต้องแก้
เพราะ timestamp ก็คือ จำนวนวินาที นับตั้งแต่ วันที่ 1 เดือน 1 ปี 1970 เวลา 00:00น. จนถึงปัจจุบัน

เนื่องจากเวลามีน้อยมากผมจึงขออธิบายเพียงสั้นๆเท่านี้ ขออภัยหากอธิบายไม่เข้าใจ แต่อย่างน้อยโค้ดที่ให้ไปน่าจะใช้ได้ครับ
#5
อ้างถึงจาก: storyman ใน 23 เมษายน 2011, 13:11:19
http://www.deonetraining.com/
พี่ ๆ ช่วยดูหน่อยครับ เว็บนี้ เค้าใช้อะไรทำหรอครับผม ขอบคุณล่วงหน้านะครับ + thank ให้นะครับ

คงจะหมายถึง ใช้สำเร็จรูปตัวไหนทำใช่ไหมครับ

เท่าที่ผมดูคิดว่า เขียนเองครับ นั่นหมายถึงไม่ใช้สำเร็จรูปใดๆทำครับ

สำหรับคำตอบที่ว่า DreamWeaver + Jquery นั้น
DreamWeaver ก็คือโปรแกรมประเภทใช้ออกแบบเว็บนั่นแหละครับ
Jquery คือ ตัวช่วยให้เขียนเว็บไซต์ด้วยภาษา javascript ได้ง่ายขึ้น(นิดหน่อย)
ทั้งสองเป็นอุปกรณ์เขียนเว็บครับ ถึงมีสองตัวนี้ก็ต้องเขียนเองอีกยาวอยู่ดี ถ้าจะเขียนเว็บแบบตัวอย่างที่คุณให้มา

สรุปถ้าจะทำแบบเว็บตัวอย่างก็ต้องเขียนเองเท่านั้นครับ ไม่มีสำเร็จรูปให้ใช้ครับ
#6
อ้างถึงจาก: ossytong ใน 21 เมษายน 2011, 15:50:32
ผมยังสงสัยนิส

เวลาที่ต่างกัน เกิดจากปัจจัย Internet ช่วงนั้น หรือเปล่า

น่าจะทดสอบ ซัก 100 ครั้งแล้วหาค่าเฉลี่ย ดูก่อนนะครับ

ผมคิดว่า ไม่น่าจะมีผลนะครับ...


ความเร็วอินเตอร์เน็ตในช่วงนั้นมีผลแค่การรับข้อมูลกลับมาเท่านั้นครับ
ในจุดที่วันนี้ผมได้อธิบายถึง เป็นหนึ่งในสองจุดเท่านั้นครับ ในส่วนนี้ไม่ได้หมายถึงความเร็วในการรับส่งข้อมูลครับ
แต่หมายถึงความเร็วในการประมวลผลนั่นเอง

การทำงานของเว็บเซิฟเวอร์ก็คือ

1. WebServer รับข้อมูลจากผู้ใช้งานทาง Client  (จะยังไม่มีการประมวลผลใดๆจนกว่าจะประมวลผลเสร็จ)
2. WebServer ส่งให้ PHP ประมวลผล ~ ทาง pipe หรือช่องทางอื่นๆ
3. PHP เริ่มประมวลผล << ตัววัดความเร็วจากตัวอย่างที่ผมได้ให้ไป มีผลด้านความเร็วตรงนี้ หมายถึงว่าความเร็วในการประมวลผล
4. PHP ส่งกลับมาหา WebServer
5. WebServer ส่งข้อมูลที่ประมวลผลแล้ว ไปให้ Client

ผมไม่แน่ใจว่าคุณผู้ถามเป็นโปรแกรมเมอร์ด้วยหรือเปล่าจึงขออธิบายในแบบฉบับของบุคคลทั่วไป
ลองคิดดูว่าถ้า เว็บ มันน่าจะทำงานอย่างไรดูครับ
สมมติว่าคุณกำลังโพสข้อมูลขึ้นไำปยัง เว็บบอร์ดแห่งหนึ่ง มันก็น่าจะมีขั้นตอนง่ายๆดังนี้

1. คอมของคุณส่งข้อมูลไปที่เซิฟเวอร์
2. เซิฟเวอร์คิด ว่าจะเก็บข้อมูลที่คุณโพส ไว้ที่ตรงไหนหมวดไหน
3. เซิฟเวอร์ตอบกลับมาหาเครื่องของคุณ ว่าโพสสำเร็จหรือไม่ เพราะอะไร

มันก็จะเป็นตามขั้นตอนแบบนั้น
ข้อที่ 1 และ 3 ความเร็วของอินเตอร์เน็ตมีผลครับ ส่วนข้อสองไม่มีผล
เพราะข้อ 2 เป็นการคำนวนของเซิฟเวอร์ครับ

ที่ผมอธิบายไปในบทความนี้เป็นความเร็วของ ข้อ 2. ครับ

อีกตัวอย่างหนึ่ง
ความเร็วในข้อ 1,3 ไม่ว่าจะเน็ตของคุณช้าจนใช้เวลาประมาณ 10 วิกว่าจะโหลดหน้าเว็บเสร็จ
เวลาที่เซิฟเวอร์ประมวลผล(ข้อ 2) ก็ยังใช้เวลาเท่าเดิมอยู่ดี เช่น 0.00095 วินาที
ฉะนั้นความเร็วของเน็ตของผู้ใช้งาน จะไม่มีผลต่อความเร็วในการประมวลผลของเซิฟเวอร์ครับ

ส่วนที่บอกให้ทดลอง 100 ครั้งนั้นผมทดลองเกินกว่านั้นครับ เพราะผมไม่นิยมนำข้อมูลผิดๆมาเผยแพร่ เพราะงานของใครก็ย่อมสำคัญทั้งนั้น
หากเอาความรู้ผิดๆมาเผยแพร่ก็จะทำให้งานของผู้อื่นเสียหายได้ ฉะนั้นจึงได้มีการทดลองในหลายรูปแบบก่อนจะเผยแพร่ข้อมูลออกมา

ถ้าไม่เชื่อก็ลองใช้ code ตัวอย่างที่เครื่องตัวเองดูสิครับ (หมายถึงติดตั้งเว็บเซิฟเวอร์ลองในเครื่องที่ใช้ดูเว็บเสียเลย) ถ้าทดสอบจากเครื่องเดียวกัน อินเตอร์เน็ตย่อมไม่มีผลครับ

ขอบคุณสำหรับความเห็นครับ
#7
(บทความ PHP) รูปแบบและเงื่อนไงของการวน loop ที่ดี

   จากที่ผมได้พบมาพอสมควรเกี่ยวกับเรื่องการวน loop ในหลายๆโปรแกรมแล้วพบว่ามันไม่ค่อยดีเท่าไร
ก่อนอื่นก็มีเรื่องจะต้องเล่าว่า

ผมเป็นพวกที่ชอบดูซอร์สโค้ดที่ผู้อื่นเขียน เพื่อหาแนวคิดใหม่ๆเสมอๆ เพื่อพัฒนาด้านแนวคิดใหม่ๆในการวางโครงสร้างเพื่อเขียนโปรแกรม
เนื่องมาจากผมคิดว่าการได้ศึกษาแนวคิดของผู้อื่น จะทำให้เราได้ึรับความสามารถในการวิเคราะห์ในการเขียนโปรแกรมเพิ่มขึ้น
เพราะผมถือว่า

ความรู้ต้องใช้คู่กับปัญญา
มีปัญญาแต่ไม่มีความรู้
ก็ใช้ปัญญาอันนั้นหาความรู้ได้
และก็จะสามารถใช้ปัญญาและคววามรู้นั้นให้เกิดผลได้
แต่ถ้าหากมีความรู้แต่ไร้ปัญญา
ก็ยากที่จะใช้ความรู้ให้เกิดผลได้

ทำให้ผมโหลดโปรแกรมจากทั่วสารทิศมาศึกษาแนวคิดในการเขียนโปรแกรมอยู่เสมอๆ
และก็ทำให้ผมได้เจอสิ่งผิดๆ ที่เป็นวิธียอดฮิต ในการเขียนโปรแกรม ในหลายๆภาษา(แต่ในที่นี้ผมจะยกตัวอย่างเป็น PHP ละกัน จะได้ืทดลองกันได้ง่ายๆ)

นั่นก็คือ การเรียกฟังก์ชั่นขณะวนลูป
ก่อนอื่นหลายๆคนอาจยังไม่รู้ว่า ลูป หรือ (loop) คืออะไร (ทั้งๆที่ใช้มาตั้งนาน)
loop ก็คือคำสั่งที่ใช้ในการวน กระทำชุดคำสั่งที่กำหนด ซ้ำไปซ้ำมาตามเงื่อนไข
ตั่วอย่างเช่นคำสั่ง for , while เป็นต้น

ที่พบว่าเขียนผิดกันบ่อยๆ มีโค้ดประมาณนี้

for($i=0;$i<strlen($str);$i++)
{

}

ตรงสีแดงๆนี่ไงที่ผิด หลายๆคนบอกก็ถูกแล้วนี่ มันผิดตรงไหน จะว่าไม่ผิดมันก็ไม่ผิดนะครับ (จะบอกว่าไม่ผิดแต่ไม่ควรก็น่าจะได้)
ตามความเป็นจริงแล้วมันก็ไม่ผิด แต่นี่คือวิธีเขียนที่ทำให้ประมวลผลช้ากว่าที่ควรจะเป็น

แล้วทำไมล่ะ มันถึงช้ากว่าที่ควร ?
อธิบายแบบง่ายๆ ก็ลองนึกย้อนไปดีๆครับ ว่าฟังก์ชั่นคืออะไร และ ตัวแปรคืออะไร
จากตัวอย่าง strlen() เป็นฟังก์ชั่น ที่ใช้นับตัวอักษร แล้วจากตัวอย่างนี้เอง ลองสังเกตดีๆ ว่า strlen จะต้องประมวลผลทุกๆรอบที่วนลูปเพื่อนำไปตรวจสอบกับตัวแปร $i

วิธีที่ดีกว่าคือ

$str_length = strlen($str);
for($i=0;$i<$str_length;$i++)
{

}

แล้วมันดีกว่ายังไงน่ะหรือ ลองดูให้ดีๆนะครับ มีการเรียกใช้ strlen ครั้งเดียว ที่เหลือก็เปรียบเทียบตัวแปร $str_length กับตัวแปร $i เท่าันั้น
ใครยังนึกภาำพไม่ออกบ้าง งั้นผมจะอธิบายให้ง่ายกว่านั้น


สมมติว่า คุณเป็นพนักงานบัญชีของบริษัทหนึ่ง มีเจ้านาย 5 คน วันนึงเจ้านายคนแรกเข้ามาถามว่า "เดือนนี้บริษัทเราได้กำไรเท่าไร"
คุณก็เลยคำนวนอยู่สักพัก แล้วจึงตอบเจ้านายไป "100,577,799,335 บาทครับ"  พอเจ้านายคนที่สองเข้ามาถาม เหมือนกันเป๊ะ ว่า
"เดือนนี้บริษัทเราได้กำไรเท่าไร" คุณก็นั่งคำนวนใหม่ และก็ตอบกลับไปแบบเดิม "100,577,799,335 บาทครับ" และก็เป็นเช่นนี้จนครบ 5 คน
>>>นั่นคือการเปรีัยบเทียบกับโค้ดตัวแรก



แต่ถ้าหากคุณจดมันไว้ตั้งแต่ตอนที่เจ้านายคนแรกเข้ามาถาม แล้วพอเจ้านายคนต่อๆไปมาถามก็แค่ตอบไปตามที่จดเอาไว้ จะทำให้คุณไม่ต้องไปคำนวนใหม่เลย
>> นี่คือการเปรียบเทียบกับโค้ดที่สอง


คำถามที่พบเจอบ่อยๆคือ ? แล้วมันจะเร็วกว่าจริงๆเหรอ แล้วถ้าเร็วกว่าจะเร็วแค่ไหน
มันก็เท่าความยาวในการวนลูปนั่นแหละครับ ยิ่งวนมากครั้งจะยิ่งเห็นความต่าง

วันนี้ผมจึงได้เขียนสคริปสำหรับทดสอบมาให้ท่านทั้งหลายได้ดูความแตกต่างระหว่างการเขียนทั้งสองแบบ โดยมีโค้ดดังนี้

ชุดที่ 1 การเขียนที่ไม่ควร
อ้างถึง
<?php
// เก็บค่าตัวแปรเวลา เมื่อวินาทีที่สคริปเริ่มทำงาน
$time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];

$start = $time;


?>

<?php

$mc = microtime();

$str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

for($i=0;$i<strlen($str);$i++)
{
   // loop เปล่าๆ
}

?>


<?php
// เก็บค่าตัวแปรเวลา เมื่อวินาทีสคริปหยุดทำงาน และ นำไปลบกับเวลาที่สคริปเริ่มทำงาน จะได้เวลาที่ใช้ในการประมวลผลคำสั่ง
$time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];
$finish = $time;
$totaltime = ($finish - $start);
printf ("ใช้เวลาประมวลผลหน้านี้ %f วินาที.", $totaltime);
?>

และ โค้ดที่ถูกต้อง
อ้างถึง
<?php
// เก็บค่าตัวแปรเวลา เมื่อวินาทีที่สคริปเริ่มทำงาน
$time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];

$start = $time;


?>

<?php

$mc = microtime();

$str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$strl = strlen($str);
for($i=0;$i<$strl;$i++)
{
   // loop เปล่าๆ
}

?>


<?php
// เก็บค่าตัวแปรเวลา เมื่อวินาทีสคริปหยุดทำงาน และ นำไปลบกับเวลาที่สคริปเริ่มทำงาน จะได้เวลาที่ใช้ในการประมวลผลคำสั่ง
$time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];
$finish = $time;
$totaltime = ($finish - $start);
printf ("ใช้เวลาประมวลผลหน้านี้ %f วินาที.", $totaltime);
?>


ลองรันทั้งสองดูนะครับจะเห็นความแตกต่างกันด้านความเร็ว ประมาณ  0.000010 วินาที
แต่อย่าเพิ่งคิดว่า "แค่  0.000010 วินาทีเอง ไม่เป็นไรหรอก" เพราะยิ่งข้อมูลที่เป็นเงื่อนไขเยอะ การวนลูปก็ยิ่งเยอะ ถ้าเป็นโปรแกรมใหญ่ๆ ความเร็วคงต่างกันถึง 1 ถึง 5 วิเลยทีเดียว
ฉะนั้นโปรดคิดให้ดีก่อนลงมือเขียน เพราะ "โค้ดสั้นกว่าไม่ได้แปลว่าจะประมวลผลเร็วกว่าเสมอไป ต้องดูความเหมาะสมด้วย"
นี่ไม่ใช่แค่สคริปของคนทั่วไปเท่านั้นที่เป็นเช่นนี้ แต่สคริปของคนที่ถูกเรียกว่าเทพ(ซึ่งคำว่าเทพนี้สมัยปัจจุบันหมายถึงคนเก่ง) ในด้านการเขียนโปรแกรมก็เป็นเหมือนกัน
คนที่ไม่ค่อยเก่งก็เขียนเพราะไม่รู้ แต่เทพ บางท่านอาจจะคิดว่า Interpreter มันจะ optimize ให้ละมั้ง อะไรทำนองนี้ ฉะนั้นขอให้ท่านลองย้อนกลับไปมองนิดนึงว่า
"ถ้าท่านเป็นคนเขียน php ท่านจะให้ Interpreter มันไปยุ่งกับ เงื่อนไขของลูปที่เป็นรูปแบบของฟังก์ชั่นหรือ" อย่าลืมไปว่า ถ้าเป็นฟังก์ชั่น พารามิเตอร์ของฟังก์ชั่นอาจเกิดความเปลี่ยนแปลงได้เสมอ
นั่นอาจประทบต่อค่าที่ออกมาจากฟังก์ชั่น ซึ่งจะนำมาเปรียบเทียบกันได้ ฉะนั้นไม่ว่าภาษาใดก็ไม่มีการ optimize ในส่วนนี้



ป.ล. ในการโพสโค้ดตัวอย่างผมใช้ [ quote ] เพราะ [ code ] ไม่แสดงผลภาษาไทย
ไว้วันหลังถ้าว่างจะเขียนเรื่องอื่นๆอีกครับ วันนี้เอาไว้แค่นี้ก่อน

อ้อลืมไป จากตัวอย่างไม่ได้หมายถึงคำสั่ง strlen เท่านั้นนะครับ หมายถึงคำสั่งอื่นๆด้วย แค่ยก strlen มาเป็นตัวอย่างให้จินตนาการออกกันเท่านั้นเอง

ผิดพลาดประการใดก็ขออภัยด้วยครับ
ขอบคุณครับ
#8
แบบนั้นยาวเกินไปไหม

แนะนำแบบนี้ละกันครับ


function phone_sum($num)
{
return array_sum(str_split((int)$num));
}


เลขจะมีกี่หลักก็ได้เดี๋ยวมันนับของมันเอง
#9
ถ้าเป็น EXE ก็ยากที่จะถอดกลลับมาเป็นดังเดิมครับ

ขออธิบายแบบเข้าใจง่ายละกันครับจะได้ไม่งง

ก่อนอื่นมาทำความเข้าใจก่อนว่า ไฟล์ EXE นั้น เป็น EXE ได้เพราะโค้ดถูกแปลเป็นภาษาเครื่องแล้ว การจะย้อนไปดูซอร์สโค้ดนั้นจะทำได้ยากมาก
เพราะภาษาเครื่องนั้นมีความซับซ้อนสูง และเป็นแค่ตัวเลขเท่านั้น
เอาง่ายๆเลยคือภาษาเครื่องมีแค่ ตัวเลขเท่านั้น ไม่มีคำสั่งพวก MsgBox(); หรืออะไรแบบนั้น

ตัวอย่างภาษาเครื่องก็ เช่น
11101000 1000001 1010001 00000000 00000000
แต่ในระดัับ Windows เราจะเห็น 1 ไบต์ < ( ซึ่งเป็น 8 ตัวของเลข Bit 0/1 นี้เท่านั้น)

การจะเปิด EXE ดูว่าทำงานยังไงนั้นทำได้ง่าย แต่ค่อนข้างยากในการที่จะวิเคราะห์ให้เข้าใจ
อุปกรณ์ที่ใช้ก็เป็นพวก Debugger , Diassambler 
และความเข้าใจในระบบการทำงานของคอมพิวเตอร์ OS,Kernel,API,Assembly & C Language, การเขียนโปรแกรมขั้นพื้นฐาน 
ซึ่งภาษาเครื่องข้่างบนนั้นเป็นตัวเลข แต่โดยทั่วไป Hex Editor, Debugger ,Diassambler มักจะแปลตัวเลขภาษาเครื่องเป็น Hexadecimal หรือเลขฐาน 16 มากกว่า (เช่น E8 = 11101000 เป็นต้น )
และพอเราเปิด EXE ดูด้วย Text Editor เช่น Notepad ก็จะเห็นเป็นเพียง ตัวอักษรยึกยือเท่านั้น เพราะ Notepad จะโชว์ตัวอักษรที่อ้างอิงจากตัวเลขในไฟล์นั้นออกมาเท่านั้นเอง

พอเราใช้ Debugger(ยกตัวอย่างเช่น OllyDBG) ในการ Debug ดู EXE โปรแกรม Olly จะทำการแปลภษาเครื่อง (Operation Code) กลับมา เป็นภาษา ASSEMBLY

เช่น ผมเขียนโปรแกรมภาษาซี ว่า

MessageBox(0,cmsg,head,0);


พอแปลเป็น EXE แล้ว จากนั้นคุณก็เอาโปแกรมนี้ไป Debug ก็จะเห็น ประมาณ


PUSH 0
PUSH 00471000H
PUSH 00571000H
PUSH 0
CALL 45710000H


ถ้าหากไม่เคยศึกษาภาษา assembly มาก็จะไม่รู้ว่า โค้ดสีแดงนี่คืออะไร แต่ถ้าศึกษามาจะรู้ว่ามันเป็นคำสั่งทำนองว่า


MessageBox(0,ตัวแปรข้อความที่1,ตัวแปรข้อความที่สอง,0);


จะเห็นว่า สิ่งที่แปลออกมา(สีส้ม) จะไม่เหมือนกับ ต้นฉบับ (สีเขียว) เพราะว่าตัวแปรต่างๆ พอคอมไฟล์(แปลเป็นภาษาเครื่อง)ไปแล้วก็จะอ้างอิงด้วยตัวเลข ซึ่งเรียกว่า Memory Address
ซึ่งคอมพิวเตอร์มันเข้าใจได้ เพราะฉะนั้นถึงแปล Operation Code ออกมาได้ แต่ตัวแปรนั้นเราไม่รู้แน่น่อนว่าชื่อของมันคืออะไร ทำให้เราต้องจินตนาการเองอีกทีว่า Memory Addreess นี้ น่าจะเป็นตัวแปรชื่ออะไีีร
ใช้สำหรับทำอะไร

จากนั้นหากจะแปลกลับไปเป็นโค้ดเดิมต้นฉบับ ความเป็นไปได้มีน้อยจนเกือบจะเป็น 0 เพราะมันอาจจะแตกต่างกันนิดหน่อย(เช่นชื่อตัวแปร) แต่การทำงานเหมือนกันหมด
และเนื่องจากเราแปลจาก Assembly เราจะแปลงเป็นภาษาอะไรก็ได้ เช่นผมเขียนด้วย C แต่คุณอาจแปลโค้ดของผมกลับไปเป็น Delphi ก็ได้

แต่ถึงเป็นเช่นนั้นก็อย่าคิดว่ามันง่าย เพราะมันไม่ง่ายสักเท่าไรนัก เพราะโค้ดจริงๆ ของ โปรแกรม 1 โปรแกรม มันยาวมาก แถมกระโดดไปมาระหว่างฟังก์ชั่นจำนวนมาก
แค่คำสั่งสั้นๆที่เราใช้ในการเขียนโปรแกรม พอแปลเป็นภาษาเครื่องแล้ว มันจะยาวมากๆ
ฉะนั้นการที่คิดจะดูโค้ดเดิมนั้นทำได้ลำบาก แต่ถ้าหากคิดจะแค่ crack เฉยๆ ก็แค่รู้ assembly แล้ววิเคราะห์โครงสร้างการทำงานของระบบ serial เช่น
อัลกอริทึ่มที่ใช้ในการคำนวน serial แล้ว แก้ไข จากนั้นเ้ซฟออกมาเป็น exe ก็แคร็กได้แล้ว
การแคร็กนั้นเป็นการแก้ไขเพียงบางส่วนของโปรแกรมเท่านั้น ไม่ได้แปลซอร์สโค้ดย้อนกลับมาทั้งหมด เพียงแค่วิเคราะห์บางจุดของโปรแกรมแล้วแก้ไข opcode เท่านั้นเอง

แต่เรื่องความยากก็เท่ากัน แต่ทว่า แค่แคร็กเฉยๆ ง่ายกว่าแปลซอร์สโค้ดย้อนกลับเสียอีก เพราะแคร็กแค่วิเคราะห์ serial แต่ แปลโค้ดกลับ ต้องวิเคราะห์ opcode ทั้งหมด

แต่ถึงจะยากแต่ถ้าศึกษามาก็ย่อมทำได้

แน่นอนว่าจากด้านบนว่ายากแค่ไหน มันก็ต้องมีพวกบ้าพลัง(เช่นผม) ยอมเสียเวลานั่งทำแน่นอน จึงได้มีผู้คิดค้น Packer
หรือตัวป้องกัน EXE จากการโดนแคร็ก หรือย้อนกลับไปเป็น source code โดยการเข้ารหัส opcode ให้ซับซ้อนกว่าเดิม
แต่ถึงกระนั้นก็ทำได้เพียงทำให้ซับซ้อนขึ้นเท่านั้น ไม่ถึงกับป้องกันได้ 100%

แต่ก็ไม่ค่อยมีใครอยากแคร็กโปรแกรมที่มี packer ป้องกันเอาไว้หรอกถ้าไม่จำเป็นจริงๆ *
เพราะการแคร็กระดับดังกล่าวค่อนข้างจะต้องใช้ความรู้ และความพยายามในระดับสูงมากจนต้องพูดว่า
"จะแคร็กทำไมให้เสียเวลานานๆ แบบนี้เราเขียนเองง่ายกว่า" หรือไม่ก็ "โปรแกรมอื่นแบบเดียวกันที่แจกฟรีก็มี จะแคร็กอันนี้ืทำไมให้เมื่อย"
* (ที่จำเป็น ก็ยกตัวย่าง เช่นพวกที่พยายามจะ hack client game online เพื่อเขียนโปรแกรมโกงเกม เพราะให้เขียน client ใหม่คงยากเกินพยายามเพราะไหนจะเรื่องกราฟฟิกอีก)


สรุปเอาง่ายๆว่า หากคุณไม่มีความรู้เรื่องของ Programming ในภาษา C/Assembly ก็ยากนักที่จะแกะ
แต่ถึงศึกษาจนมีความรู้ความเข้าใจแล้ว ก็ยังต้องใช้ความพยายามอีกมากในการจะทำให้สำเร็จ
ป.ล. มันไม่มีโปรแกรมที่จะย้อนเอาโค้ดกลับออกมาได้เหมือนต้นฉบับเป๊ะ ล้านเปอร์เซนต์ไม่มีแน่นอน อย่าแม้แต่จะคิดหา
อย่างมากก็พวกโปรแกรมที่เขียนด้วย VB / ,NET ก็ดู Function name ได้อะไรได้อีกนิดๆหน่อยๆ แต่ opcode ยังเป็น ASM อยู่
(เพราะงี้แหละโปรแกรมด้านความปลอดภัยจึงจะไม่ใช้ ภาษาพวก .NET เขียนกัน หรือถ้าใช้ก็แค่ในส่วนของ Interface แล้วก็ใช้ภาษาอื่นประมวลผลแทน)


คุณอาจสงสัยในสิ่งนี้ว่า
Q: แล้วทำไมโค้ด php ที่เข้ารหัสมันถึงแปลกลับมาได้
A: เพราะ php มันเป็น Interpreter
กล่าวคือพอเรียกใช้งาน มันก็แค่โหลดโค้ด php เข้าไปใน RAM แล้วแปลข้อมูลตอนนั้นให้เป็นภาษาเครื่องแล้วดำเนินการตามคำสั่งเท่านั้น
เพราะ PHP เป็นภาษาเขียนเว็บจึงต้องการความยืดหยุ่นสูง จึงต้องเป็นรูปแบบของ Interpreter
ก็สรุปง่ายๆคือ php มันจะแปลซอร์สโค้ดที่เข้ารหัสกลับมาก่อน(แปลกลับมาจน เป็น PHP code ที่สามารถอ่านได้ใน RAM) แล้วจึงโหลดเข้าไปทำงาน
แน่นอนว่าตอนเข้ารหัส php code จะเป็นการเข้ารหัสแบบถอดออกมาเป็นรูปแบบเดิมก่อนเข้ารหัสได้


รีบตอบไปหน่อยไม่รู้ตกหล่นตรงไหนบ้างก็ขออภัยด้วยครับ นานๆจะมีเวลาว่างสักทีนึง
#10

<?php
for($i=1;$i<=15;$i++)
{
echo "<li>\n";
for($ii=1;$ii<=9;$ii++)
{
echo " <div id=\"box-".$ii."\"></div>\n";
}
echo "</li>\n";
}
?>



ลองดูนะครับว่า ใช่แบบที่ต้องการไหม ผมว่างๆพอดีเลยเขียนให้ คิดว่าแบบนี้้เวลาแก้น่าจะดูง่ายสบายตามากกว่า
:wanwan020:
#11
ไหนๆก็สมมติคำถามขึ้นมาแล้ว ถึงจะเป็นไปได้ยาก แต่ผมก็จะสมมติคำตอบให้บ้างละกันครับ(ตามความเห็นของผมนะ)

- คนกลุ่มหนึ่ง เลิกใช้ google ไปเลย แล้วใช้อย่างอื่นแทน
- คู่แข่งรายอื่น จะทุ่มทุนปรับปรุงระบบ search engine ของตนเพื่อหวังจะแทนทีี่ google
- อีกส่วน ยอมใช้ chrome
- ส่วนที่เป็นโปรแกรมเมอร์และ hacker ก็จะเขียนโปรแกรมที่ bypass ให้สามารถใช้ google ได้จาก browser อื่นๆ
ซึ่งอาจเกิดเป็นธุรกิจใหม่ เป็นโปรแกรม bypass ที่สร้างรายได้มหาศาลให้กับผู้ที่สร้างโปรแกรมดังกล่าวเสร็จเป็นคนแรก
- ทำให้คนรู้จักคำว่า web browser มากขึ้น (ผู้ใช้ส่วนหนึ่งบนโลกอินเตอร์เน็ต ยังมีบางคนไม่รู้จักด้วยซ้ำว่า browser คืออะไร)
เพราะว่าอยากจะใช้ google ที่ตนเองเคยชินมานาน จึงเกิดการค้นคว้าศึกษา ทำให้คนทั่วไปใช้เก่งคอมขึ้นอีกนิดนึง
-  มีผู้เขียนหนังสือเกี่ยวกับการเปลี่ยนแปลงนี้ และหนังสือสอนวิธีใช้ google ผ่าน chrome

คงพิมพ์ไม่หมดง่ายๆ งั้นขอตอบเอามันส์เพียงเท่านี้

:wanwan004:
#12
ดูจาก Header ของไฟล์คือ 1F 8B 08 ซึ่งก็คือไฟล์ประเภท tar.gz นั่นเอง
ให้เปลี่ยนจากนามสกุล mqi เป็น tar แล้วแตกด้วย winrar จะได้ไฟล์ BC009N(N).mqi ขึ้นมาหนึ่งไฟล์
โดยในไฟล์จะมีโครงสร้่างเป็น xml

ข้อมูลเป็นดังนี้

<?xml version="1.0" encoding="UTF-8"?>
<mqifile version="1.0" datatype="QC" lot="BC009N" validdate="2010-11-05">
  <control level="M">
    <machine name="BC-5300,BC-5100">
      <para name="wbc" unit="10^9/L" target="7.90" limit="1.00"/>
      <para name="neu_num" unit="10^9/L" target="4.82" limit="0.70"/>
      <para name="lym_num" unit="10^9/L" target="2.25" limit="0.60"/>
      <para name="mon_num" unit="10^9/L" target="0.28" limit="0.28"/>
      <para name="eos_num" unit="10^9/L" target="0.55" limit="0.40"/>
      <para name="bas_num" unit="10^9/L" target="4.99" limit="0.70"/>
      <para name="neu_per" unit="%" target="61.0" limit="8.0"/>
      <para name="lym_per" unit="%" target="28.5" limit="7.0"/>
      <para name="mon_per" unit="%" target="3.5" limit="3.5"/>
      <para name="eos_per" unit="%" target="7.0" limit="5.0"/>
      <para name="bas_per" unit="%" target="63.2" limit="8.0"/>
      <para name="rbc" unit="10^12/L" target="4.40" limit="0.24"/>
      <para name="hgb" unit="g/L" target="132" limit="6"/>
      <para name="hct" unit="%" target="40.7" limit="2.0"/>
      <para name="mcv" unit="fL" target="92.5" limit="5.0"/>
      <para name="mch" unit="pg" target="30.0" limit="2.5"/>
      <para name="mchc" unit="g/L" target="324" limit="30"/>
      <para name="rdw_cv" unit="%" target="14.3" limit="3.0"/>
      <para name="rdw_sd" unit="fL" target="57.0" limit="6.0"/>
      <para name="plt" unit="10^9/L" target="242" limit="40"/>
      <para name="mpv" unit="fL" target="9.4" limit="3.0"/>
      <para name="pdw" unit="" target="16.2" limit="3.0"/>
      <para name="pct" unit="%" target="0.230" limit="0.100"/>
    </machine>
  </control>
</mqifile>
#13
เสริมอีกหน่อยแล้วกันครับ primary key ควรจะ้เป็น field ที่เก็บค่าที่เป็นเอกลักษณ์ของ row ซึ่งแต่ละ row จะต้องไม่เหมือนกัน
ซึ่งเป็นตัวเลขจะดีที่สุด

--- ยกตัวอย่างเช่น ---
วิธีการเลือก primary
เช่น ประเทศไทย มีคนชื่อ-นามสกุล เหมือนกันหลายคน เราจะรู้ได้ว่า ใครเป็นใคร ด้วย หมายเลขประจำตัวประชาชนซึ่งไม่ซ้ำกันแน่นอน
primary คือหมายเลขประจำตัวประชาชน
--- จบตัวอย่าง ---

ฉะนั้นเวลาสร้างฐานข้อมูลควรจะมีฟิลด์ ที่เป็น identifier ด้วยสัก 1 ตัว โดยเปรียบจากตัวอย่างด้านบนแล้ว ฟิลด์นี้ก็เหมือนหมายเลขบัตรประชาชน
ฉะนั้นเวลาเราสร้างฐานข้อมูลก็ควรจะมีฟิลด์ id สักหน่อย เพื่ออ้างอิงข้อมูลได้ กรณีที่มี 2 ข้อมูลขึ้นไปที่มีค่าเหมือนกัน เราจะใช้ id เพื่ออ้างอิงได้ว่าเราจะเลือกอันไหน
คุณอาจเกิดคำถามว่าแล้วค่าของ field id นี้จะเอามาจากไหน อันนี้ส่วนใหญ่ที่นิยมจะใช้เป็น A_I (Auto Increment) ซึ่งค่าของฟิลด์นั้น mysql จะกำหนดเองอัตโนมัติ
(การจะกำหนดให้ใช้ A_I ต้องเลือกใน option ของ field ตอนที่จะสร้าง field ครับ)

ส่วนเรื่อง index ถ้าจะเปรียบง่ายๆก็เหมือน mysql เป็นหนังสือ 1 เล่ม หากเราผู้เขียน ใส่สารบัญเยอะเกินไป จะเกิดข้อเสียเช่น (เปรียบเป็นสารบัญ เพราะบางคนไม่รู้จักว่าดัชนีแปลว่าอะไร)
ประเภทว่า มีสารบัญบอกว่าหน้านี้บรรทัดที่เท่านี้เขียนว่าอะไร ลองคิดดูว่า สารบัญมันจะมากกว่า ข้อมูลเสียอีก
mysql ก็เช่นเดียวกัน หากมี index=สารบัญ มากเกินไป ก็จะทำให้ผู้อ่านหนังสือเล่มนั้นหาข้อมูลที่ต้องการอ่านได้ช้าลง

ฉะนั้น index (ในเชิงทั่วไป)เราควรจะเลือกเฉพาะ field ที่เป็นเงื่อนไขของการค้นหาเท่านั้นจะดีที่สุด
#14
เอาไฟล์ฟอนต์ tahoma.TTF ไปไว้ในโฟลเดอร์เดียวกันกับ FILE php นั้นๆครับ
ไฟล์ดังกล่าวจะหาจากในเครื่องคุณเลยก็ได้ (ถ้าเป็น OS WINDOWS นะ) จะอยู่ที่ C:\WINDOWS\Font\tahoma.ttf หรือบางเครื่องไม่มีก็ไปหาโหลดมาจากเน็ตก็ได้
แล้วดูชื่อไฟล์ให้ดีๆด้วยนะครับ เช่นถ้าอัพขึ้นไปเป็น tahoma.ttf ตรง $font = 'tahoma.TTF'; ให้แก้ชื่อไฟล์ให้เป็นตัวพิมพ์เล็กใหญ่ให้ตรงกันอย่างถูกต้องด้วยนะครับ

ปัญหาปัจจุบันของคุณคือ php หา font ไม่เจอ เลยไม่รู้จะ Draw ตัวอักษรนั้นออกมายังไงนั่นเองเพียงหามาใส่มันก็ทำงานได้แล้ว  :wanwan012:
#15
มันเป็น "ปริศนาธรรม" ครับ จากภาำพจะมีคำว่า

"กรรม,โหลด,ไทย,โป๊"

ปริศนาธรรมข้อนี้ต้องสลับและเติมคำเข้าไปครับ จะได้

`มันจะเป็นบาปกรรมถ้าคนไทยเอาแต่โหลดหนังโป๊` :-[

ว่าเข้าไปนั่น
#16

function Texpire($sday,$smon,$syear,$eday,$emon,$eyear) {
$tstart = mktime(0, 0, 0, $smon, $sday, $syear);
$tend   = mktime(0, 0, 0, $emon, $eday, $eyear);
$tres = intval(($tend-$tstart)/86400);
return $tres;
}

echo Texpire(16,10,1990,16,10,1992);



อยู่ว่างๆ เลยมาเขียนให้ครับ วิธีใช้นะครับ

$exp = Texpire(วันที่ผลิต,เดือนที่ผลิต,ปี คศ. ที่ผลิต,วันที่หมดอายุ,เดือนที่หมดอายุ,ปีที่หมดอายุ);
echo "ของชิ้นนี้จะหมดอายุในอีก ".$exp." วัน";

โดยฟังก์ชั่น Texpire ที่ผมให้ไปนี้จะคำนวน ออกมาเป็นวันครับ
เช่น ผลิตวันที่ 10/06/2010 หมดอายุวันที่ 15/07/2010 มันก็จะบอกว่า 35 วัน

หากคุณต้องการให้มันบอกละเอียด เช่น   1 เดือน 5 วัน คุณก็ต้องเอาจำนวนวันที่ได้จากผลลัพท์ของ Texpire ไปหารเอาเอง  :wanwan003:
#17
อ่านคำถามแล้วงงๆ ไม่เข้าใจจุดประสงค์เท่าไร
แต่ผมพอจะแปลคำถามคุณคุณออกมาได้ว่า

<table><table>xxx</table></table>

คุณต้องการเขียน Expression เพื่อดึง ข้อมูลสีเขียวออกมา แต่ที่คุณเขียนมันกลับดึงเอา ตรงสีแดงออกมา(พร้อมสีเขียวด้วย) = <table>xxx</table> แทนที่จะเป็น xxx ใช่ไหม

คำถามของคุณเป็นแบบนี้ใช่ไหม ถ้าใช่ล่ะก็


<table><table>(.*? ตรงนี้ EXPRESSION อะไรก็ว่ากันไป .*?)<table></table>


ก็น่าจะได้แล้ว กล่าวคือถ้าซ้อน table 2 เราก็เขียน table ครอบใน Expression เพิ่มอีกันก็พอ

วิธีการคิดแบบง่ายๆก็คือ
1. เปรียบ tag table เป็นโต๊ะ 1 ตัว
2. เรามีโต๊ะอยู่ 2 ตัว
3. ซึ่งวางซ้อนกันอยู่
4. บนโต๊ะตัวบน มีกระดาษวางอยู่ ในกระดาษมีข้อความเขียนเอาไว้ว่า xxx

แน่นอนว่าการวางซ้อนกันคือ การเอาโต๊ะวางบนโต๊ะ ซึ่งจะมีตัวหนึ่งอยู่ล่างอีกตัวอยู่บนแน่นอน

การจะหาว่าบนโต๊ะ ของโต๊ะตัวที่ซ้อนกันอยู่(โต๊ะตัวบน)มีอะไรวางอยู่เราก็ต้อง บอกกับ php ว่า ไปหาบนโต๊ะตัวบนที่ซ้อนกันอยู่ซิว่ามีอะไรวางอยู่
... ส่วนคุณไปบอกว่าไปหาบนโต๊ะซิว่ามีอะไรวางอยู่ มันก็เลยหาที่โต๊ะตัวแรก ซึ่งมันก็พบว่า บนโต๊ะ >> มีโต๊ะอีกตัววางอยู่ และมีกระดาษวางอยู่บนโต๊ะตัวบนเขียนว่า xxx
เพราะคุณลืมบอกไปว่าโต๊ะตัวที่ซ้อนกันอยู่ มันจึงเอาเอกสารจากโต๊ะตัวแรกที่มันพบมาให้คุณ
หากคุณบอกมันว่า บนโต๊ะที่ซ้อนกันอยู่ (โต๊ะตัวบน) มีอะไรวางอยู่ ไปหามาซิ มันก็จะมาบอกคุณว่า >> มีกระดาษวางอยู่เขียนว่า xxx

ประมาณนี้แหละครับ

ไม่แน่ใจว่าผมเข้าใจคำถามของคุณถูกไหม แต่ก็ช่วยได้เท่านี้ละครับ นานๆว่างที
ว่างเข้ามาวันละครั้งเองช่วงนี้ ..... ไงก็ลองดูนะครับ

ป.ล. อีกวิธีนึงคือใช้ preg_match_all แล้ว เลือก array ลำดับถัดไปก็เป็นอันใช้ได้
ป.ล. 2 มีคนตอบไปแล้วระหว่างผมตอบ ขออภัยด้วยที่ตอบซ้ำ
#18
อันนี้เขาเรียกว่า "หอยกะจู๋" ครับ
ไม่ได้ตั้งเองนะ แต่มันชื่อนี้จริงๆ หาข้อมูลเพิ่มเติมได้ที่ "ท่านเกิ้ล" ครับ
#19
มันอยู่ที่ว่าคุณจะเขียนด้วย PHP , CSS หรือ JAVASCRIPT

วิธีที่ 1 เขียนด้วย php หรือ server server side script ภาษาอื่นก็ตามใจ
แต่ ณ ที่นี้ขอใช้คำแทน server side script ทั้งหลาย ด้วยคำว่า php คำอธิบายจะได้สั้นดี

ให้เช็ค user agent ว่าเป็นบอทหรือเปล่า ถ้าใช่ก็ echo แสดงข้อความที่เราต้องการแสดงให้บอทเท่านั้นที่เห็น
ถ้าไม่ใช่บอท ไม่ก็ไม่ต้อง echo ออกมา

วิธีที่ 2 เขียนด้วย CSS
2.1 เขียนแบบที่ #1 (ความคิดเห็นที่ 1) ได้เขียนเอาไว้
2.2 เขียน class ในไฟล์ css ว่า .classname {display:none;} แล้วให้ วัตถุหรือข้อความที่คุณต้องการซ่อนใช้ class นี้

วิธีที่ 3 เขียนด้วย javascript
* สำหรับวิธีนี้ ขณะเว็บกำลังโหลด ข้อความของคุณจะแสดงให้ทุกคนเห็นไม่ว่าบอทหรือคนก็ตาม
* แล้วพอเว็บโหลดเสร็จ ข้อความของคุณจึงจะหายไป(ซ่อนตัวไป)
3.1 ใช้คำสั่ง elementของคุณ.style.display  = "none";
3.2 ใช้ innerHTML เขียนทับไป เช่น .elementของคุณ.innerHTML = "";

วิธีที่ 4 เขียนด้วย HTML ใช้สีอักษรสีเดียวกับพื้นหลัง ทำให้มองไม่เห็นตัวอักษร

เท่าที่นึกออกก็มีเท่านี้ แต่จริงยังพอมีวิธีอื่นๆอยู่เหมือนกัน

เวลาจะใช้ก็คิดให้ดีก่อนนะครับว่าแบบไหนดีที่สุดสำหรับเว็บของคุณ
#20
คำถามของคุณผมคิดว่ามันจะสั้นเกินไป จนทำให้อาจเข้าใจความหมายของสิ่งที่จะถามผิดไปนะครับ

ถ้าผมเข้าใจคำถามของคุณไม่ผิด ขอตอบว่า
อักษรเล็กใหญ่มีค่าเท่ากันนะครับ สำหรับ domain,subdomain,extension (directory,path ไม่เกี่ยว)

เช่น hxxp://www.thaiseoboard.com พิมพ์แบบนี้ก็ใช้ได้เหมือนกัน ^.^