การสร้าง User Control ใช้เองใน C#

ทำไมต้องสร้าง User Control ใช้เอง

เพื่อให้ได้ Control ตัวใหม่ ที่เหมาะจะใช้เป็น Template เพือให้ง่ายต่อการแก้ไข และใส่ Effect ได้ง่ายขึ้น

วิธีการ

  1. คลิกขวา Add > New Item
  2. เลือก User Control ตั้งชื่อ File
  3. ปรับแต่หน้าตา User Control ตามต้องการ

แล้วถ้าต้องการใส่ Properties เพื่อให้แก้ไขค่าได้ล่ะ?

ให้ใส่ Code นี้เข้าไปใน .cs โดยสมมุติว่า Properties ที่จะเพิ่มชื่อว่า Text และเมื่อแก้ไขจะให้ไปแก้ค่า Text ของ txtBlock

        public string Text
        {
            get { return txtBlock.Text; }
            set { txtBlock.Text = value; }
        }

        // Using a DependencyProperty enables animation, styling, binding, etc.
        // อย่าลืมแก้ตรงนี้
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register(

                //ตรงนี้ใส่ชื่อ Properties
                "Text",                  // The name of the DependencyProperty
                //ใส่ชนิด Properties
                typeof(string),             // The type of the DependencyProperty

                //ชื่อ Class ของ Control
                typeof(MyMenuItem),       // The type of the owner of the DependencyProperty
                new PropertyMetadata(     // OnBlinkChanged will be called when Blink changes
                    false
                )
            );

จบครับ

การนำไปประยุกต์ใช้

สามารถใส่ Effect เป็น state ใน Control ได้ และยังใส่ Event ได้อีกด้วยประหยัดการ Code และแก้ไขได้ง่ายขึ้นอีกด้วย

บ่นว่าด้วย NetDesignHost และบันทึกคำสั่งเกี่ยวกับ .tar.gz

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

วันนี้ ผมมาบ่นแบบจัดเต็ม กับบริการ NetDesignHost ผมมีความหลังไม่ดีกับ Host ที่นี่มาก ผมช่วยงานโรงเรียนดูแลเว็บของที่นี่อยู่ เว็บโรงเรียนผมใช้ Drupal ความหลังครั้งก่อนๆที่มันเกิดกับผมมีดังนี้(ไม่เรียงตาม time นะจำไม่ได้)

  • ตาราง Capcha ชอบมีปัญหา ต้องเข้าไป repair เองบ่อยๆ (เป็นบ่อยเมื่อ 2 ปีก่อน ช่วงหลังๆ ไม่มีปัญหานี้แล้วนะ ไม่รู้ว่าผมทำหรือบริการดีขึ้น จำไม่ได้จริง)
  • ปัญหาต่อมา มันชอบล่มเวลาสำคัญ ครั้งแรกตอนประกาศผลสอบเข้า ม.1 ตอนนั้นทำเป็นหน้าให้หาจาก ชื่อ นามสกุลหรือรหัสที่สอบ ผล ผมอับข้อมูลไปตอนบ่าย ตอนเย็นล่มจ้า หลังจากกู้กลับมาได้ ข้อมูลที่อับไปวันนั้นหายหมดเลย รวมถึง script ด้วย ผมค่อนข้างมั่นใจว่าเค้าเอา backup เก่ากลับมา ตอนนั้นรู้สึกเค้าจะแถมาว่า ได้ commit หรือไม่ก็ mysql มัน write ลง disk ยัง ซึ่งถ้าเป็น commit ผมไม่ได้เปิด trasaction ครับ + MyISAM ได้ข่าวว่าไม่มีแบบนี้ ส่วน mysql มัน write ยังไม่รู้ครับ แต่ตอน test ระบบได้ทุกอย่างครับ คือบอกตรงๆสิครับ อย่าแถ ตอนนั้นผมขี้เกียจตัด excel เป็น sql ใหม่ทำแม่มเป็น PDF เลย รู้สึกปีต่อมาก็ล่มเหมือนกัน แต่ปีล่าสุดไม่ล่มและ
  • หลังจากนั้นมัน มีครั้งนึงล่มไป (ล่ม เรื่องปกติ ไม่มีที่ไหน uptime 100%) แต่ที่ไม่พอใจคือมันบอกผมมาว่า กำลัง backup อยู่ ตรงนี้ผมกับเค้าอาจจะเข้าใจไม่ตรงกัน คือผมเข้าใจว่าเค้ากำลังคัดลอกข้อมูลไปลงอีกเครื่องนึงทำให้ IO เต็มเลยล่ม(แล้วเมิงมาทำเหี้ยไรตอนกลางวัน ตอนคนเยอะๆ) แต่จริงๆแล้ว มันคือเค้ากำลังเอา backup กลับมาใส่ server ผมรู้เพราะผมเพิ่งเปลี่ยนรหัสไปเมื่อถึงสัปดาห์มาวันนั้น รหัสมันกลับเป็นรหัสเก่า ตอนแรกนั่งงทำไมรหัสใหม่ใช้ไม่ได้ คือมันล่มนั่นแหละ
  • ไอ้นี่ แย่สุด คือมันย้ายเครื่อง ตอนย้ายล่มไม่มีปัญหา แต่ปัญหาคือเมิงเปลี่ยน user เข้า CP กุทำไม ไม่มีแจ้งกรุด้วย ดีนะของ ftp ยังเหมือนเดิม ต้องให้ถ่อไปหา support
  • ระบบ Mail มันไม่สามารถใช้ Code นี้ส่งหา gmail ได้(คิดว่าส่งไม่ออกด้วย)
    <?php
    $r1=mail("[email protected]","TEST MAIL","Form domain.ac.th NetDesign Host Kak");
    $r2=mail("[email protected]","TEST MAIL","Form domain.ac.th NetDesign Host Kak");
    var_dump($r1,$r2);
    ?>

    แบบว่ามันส่งไม่ออก ปัจจุบันก็ยังไม่ออก ผมเลยต้องทำ proxy สำหรับส่งเมล สร้าง package วิ่งไป server ส่วนตัวเพื่อให้ส่งได้(เขียน module เพิ่มเองเลยทีเดียว)

  • อันนี้เป็นช่วงก่อนเขียน module ข้อข้างบน คือผมอยากใช้ rename_function แต่มันไม่ได้ลงไว้ บอกให้เค้าลงไม่รู้เค้าลงจริงเปล่า แต่ ณ ตอนนั้นลองแล้วใช้ไม่ได้ อันนี้ต้องชื่นชมที่เค้าพยายามลงให้ เพราะผมลงใน server ส่วนตัวไม่ได้ ลงแล้วใช้ไม่ได้ สรุปไม่มีไรเกิดขึ้นเขียน module เองเลยจบ
  • อันนี้ เขียนไปถึงด้านล่างและเพิ่งนึกได้ คือเ้คาเก็บ backup ทุกคนรวมเป็น .tar.gz อันเดียว แล้วใส่ใน /backup ไม่แน่ใจว่าเฉพาะผมที่เพิ่งย้ายมา host นี้หรือทุกคนที่มีสิทธ์ FTP ไปถึง root แล้วเข้าไปได้ ทีหมายความว่าถ้าโหลดมาสักอัน รหัส mysql ของทุกคน(มันเก็บในพวก config.php) เป็นของผมหมดเลยนะครับ? แถมผมเข้า host บางคนที่มักง่าย chmod 0777 ไว้ได้อีกด้วย คือเค้าไม่ห่วง privacy ลูกค้าพวกผมเลย ประเด็นนี้หนักมาก และผมใช้ช่องโหว่ตรงนี้แก้ไขปัญหาผมแหละ

ทั้ง หมดที่บ่นมานั้นของ 1-2 ปีที่แล้วทั้งนั้น ในช่วง 1 ปีที่ผ่านมา ยังไม่มีปัญหาอันใดต้องไปยุ่งกับมันมากนัก จนกระทั่งวันนี้ file ผมหายไปจาก sv ผมขี้เกียจขออาจารย์ใหม่ใครลบไปไม่รู้ contact ไปหาเพื่อขอ backup อันนี้เป็นมาตรฐานเค้าจะพูดคำแรกว่า “สวัสดีครับ” อันนี้บ่นครั้งก่อนๆ จะถามต่อว่า “มีอะไรให้ช่วยครับ” ประมาณนี้ คืออยากบ่นว่าก่อนหน้านี้ผมก็พิมพ์คำถามใส่ในช่องนะครับ มาถามอีกเพื่อ???

เออ ทักทายช่างแม่มก่อน ก็ถามไปว่า file หายมี backup เก่าสุดเมื่อไหร่ครับ เค้าตอบมาว่าเดือนมกรา เดือนนี้ครับ (มารู้ทีหลังว่า เก่าสุดคือ 28/12/12 ไม่ต่างเท่าไหร่ แต่บอกกรุหน่อยก็ดีนะ กรุอยากได้เก่าสุดไง เพราะไม่รู้ว่าโดนลบเมื่อไหร่) OK รู้เก่าสุดและ ถามว่ามี file นี้อยู่นนี้ไหมครับ เงียบ นามสักพักเค้าก็บอก “สักครู่นะครับอาจจะนานหน่อย แตก file อยู่ ” คำนี้เล่นผมสะอึก แตกเหี้ยไร file ไม่ใหญ่นิ ผมเข้าใจว่าเค้าแตก backup 70GB ออกมาครับ ก็นานดิครับ ผมเลยไปหาคำสั่งได้อันนี้มาครับ จากที่นี่

tar -ztvf file.tar.gz

ผมใช้ความรู้ประยุกตินิดหน่อย(ตอนนั้นยังไม่ประยุกต์เต็มรูปแบบ)

tar -ztvf file.tar.gz | grep filename

เพื่อหา list เฉาพะของผม เพราะผมอยากได้แค่ file เดียวไม่ใช่ทั้งหมด คำตอบคือ”ไม่ได้ครับ” ผมเข้าใจว่าเค้าไม่ได้เปลี่ยนชื่อ file (ณ ตอนนั้นยังไม่รู้ชื่อ file)

ตกเย็น ไม่เสร็จสักทีเค้าก็บอกว่าเดียวเสร็จแล้วผมจะอัด zip ใส่ httpdocs ให้นะครับ ผมเลยขอว่าาแค่ copy file ที่หายใส่ก็พอครับ ทีเหลือลบทิ้ง เค้าก็บอกประมาณว่าได้ครับ เดี๋ยวจะส่งเมล์ไปรายงานครับ ประมาณนี้จนถึงบัดนี้เมล์ยังไม่มาครับ คาดว่าเพราะ server นั้นส่งเมลไม่ออกมั้ง(ฮา)

จนวันนี้ 10 โมงนิดๆผมเลยขี้เกียจและ ทำเองแม่ม เริ่มจากสั่งตัวนี้ครับ

<?php
set_time_limit (0);
echo exec("cp /backup/webspace4.tar.gz webspace.tar.gz");
echo "Complete";

เพื่อกอป file backup มาใส่ในส่วน home ผมก่อน (ถ้าไม่ใช่ VPS ขึ้นไปคงไม่มีใครให้ใช้คำสั่งพวก exec system หรอกนะ แต่ถึงไม่มีผมก็กะ cronjob copy มาอยู่ดีแหละ)

หลังจาก check host ส่วนตัวว่าโหลดมาไม่ได้เนื้อที่ไม่พอ จึงใช้ curlftpfs เพื่อ mount ftp แล้ว list file ใส่ txt โดยคำสั่ง

tar -ztvf webspace.tar.gz > /list.txt

ซึ่งกินเวลานานมากๆ เพราะมันโหลดหมดอยู่ดี แต่ช่วยไม่ได้ครับ ที่ไม่มีต้องทำใจ ทำอะไรผ่าน network ก็ช้างี้แหละ พอเสร็จ ผมก็สั่งหา filename ด้วยคำสั่ง

cat /list.txt | grep filename

ผลไม่ work ครับ file แม่มเยอะเกิน เลยเอาใหม่เป็น

cat /list.txt | grep Guide.rar

โดย Guide.rar คือ file ที่หา ผลคือมันเจอ ผมใช้คำสั่งจากนี้ แตก ออกมาแค่ตัวเดียว

tar zxvf webspace.tar.gz var/www/vhosts/domain.ac.th/httpdocs/Guide.rar

เพื่อแตก file ออกมา ได้มาเมื่อราวๆทุ่มนึง (เพิ่งเดินทางถึงบ้าน จริงๆน่าจะเสร็จตั้งแต่ 5 โมง) แต่สิ่งที่ผมไม่คาดฝันคือรุ่นน้องมันไปขอ file ใหม่อับไปแล้ว(ถามมันแล้ว คงไม่มีเจ้าหน้าที่มายัด เพราะ size ต่างกันนิดหน่อย)

สรุปคือทำเองจนเสร็จ เมลยังไม่มาเลยสาดดด

การใช้ AGTH กับเกมส์พวก Wolf RPG Maker

ขอออกตัวก่อนว่า ที่เขียนบทความนี้ไม่ใช่เพราะเล่นเกมส์ Naked Order แล้วเล่นไม่รู้เรื่องแต่อยากรู้เนื้อเรื่องหรอกนะ อย่าเข้าใจผิดไป

เอาสั้นๆกระฉับ ใช้คำสั่งนี้ครับ

agth /v /x3 /KS /KF /C /W50F46C โปรแกรมที่ต้องการ

เช่น

agth /v /x3 /KS /KF /C /W50F46C Game.exe

จบครับ บทความนี้สั้น สาระมีแค่นี้แล พรุ่งนี้กะเคลีย

mysql_connect กับ mysql_pconnect ต่างกันยังไง

mysql_connect กับ mysql_pconnect ต่างกันยังไง

  • mysql_connect จะปิด Connection หลังจากจบการทำงานของ script นั้นทันที(หรือมีถ่วงเวลาไว้แปปนึง) ทำให้ไม่มี process ค้างใน mysql เยอะนัก
  • mysql_pconnect จะเปิด Connection ค้างไว้ หากมีการเชื่อมต่อที่ Mysql Database ตัวนี้อีก จะใช้ Connection เดิมแทนที่จะต่อ Connection ใหม่

เปรียบเทียบข้อดี

  • mysql_connect จะมี Process ค้างใน mysql น้อยกว่า คือคืน memory ทันทีที่จบการทำงาน
  • mysql_pconnect จะเชื่อมต่อได้รวดเร็วกว่า แต่มี Process ต้างใน mysql อยู่ทำให้กิน memory มากกว่า

เปรียบเทียบข้อเสีย

  • mysql_connect จะใช้เวลาการเชื่อมต่อนานกว่าทำให้ช้ากว่า
  • mysql_pconnect มี Process ใน mysql มากกว่า ทำให้กิน ram มากกว่า

ฟันธงว่าควรใช้อะไรดี

อัน นี้ขึ้นอยู่กับงาน หากเป็นงานที่ต้องการ Connection เยอะมากๆแนะนำ mysql_pconnect (จริงๆ ถ้าไม่ได้ใช้ Share Host หรือมี Database แค่ตัวเดียว หรือจำนวนน้อยใน Server นั้นใช้ไปเลยก็ไม่เสียหายครับ) แต่ถ้าเป็น Shared Host หรือ มี Database จำนวนมากก็ใช้ mysql_connect ปกติไปก็ได้ครับ

ผลทดสอบความเร็ว

ของ mysql_connect

Code:

<?php
mysql_connect("127.0.0.1","root","");
mysql_select_db("test");

mysql_close();
?>

ผล:

mix5003@Shana:~$ ab -k -c 200 -t 10 http://127.0.0.1/benc/connect/connect.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Finished 27160 requests


Server Software:        Apache/2.4.2
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /benc/connect/connect.php
Document Length:        0 bytes

Concurrency Level:      200
Time taken for tests:   10.000 seconds
Complete requests:      27160
Failed requests:        0
Write errors:           0
Keep-Alive requests:    26939
Total transferred:      6345842 bytes
HTML transferred:       0 bytes
Requests per second:    2715.98 [#/sec] (mean)
Time per request:       73.638 [ms] (mean)
Time per request:       0.368 [ms] (mean, across all concurrent requests)
Transfer rate:          619.71 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0  10.5      0    1000
Processing:     1   69 539.0      9    9877
Waiting:        1   69 539.0      9    9876
Total:          1   69 540.1      9    9880

Percentage of the requests served within a certain time (ms)
  50%      9
  66%     19
  75%     27
  80%     32
  90%     44
  95%     57
  98%     98
  99%   2445
 100%   9880 (longest request)

ผลการทดสอบ mysql_connect จะเห็นได้ว่ากดราฟพุ่งสูงสุดที่ 8000 Connections เลยทีเดียว

จะเห็นว่ากราฟพุ่งสูงสุดที่ 8000 Connection (จริงๆน่าจะเป็น 4000 นะครับ แต่เวลานั้น เครื่องผมกาก refresh กราฟไม่ได้ 1 ทีครับ) และต่อได้ 2715 ครั้งต่อ 1 วินาทีเลยทีเดียว (Concurrent หรือจำนวนการเชื่อมต่อพร้อมกันคือ 200 นะครับ)

mysql_pconnect

Code:

<?php
mysql_pconnect("127.0.0.1","root","");
mysql_select_db("test");

mysql_close();
?>

ผล:

mix5003@Shana:~$ ab -k -c 200 -t 10 http://127.0.0.1/benc/connect/pconnect.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Finished 46890 requests


Server Software:        Apache/2.4.2
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /benc/connect/pconnect.php
Document Length:        0 bytes

Concurrency Level:      200
Time taken for tests:   10.000 seconds
Complete requests:      46890
Failed requests:        0
Write errors:           0
Keep-Alive requests:    46479
Total transferred:      10954242 bytes
HTML transferred:       0 bytes
Requests per second:    4688.95 [#/sec] (mean)
Time per request:       42.653 [ms] (mean)
Time per request:       0.213 [ms] (mean, across all concurrent requests)
Transfer rate:          1069.74 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   9.2      0     999
Processing:     1   41 362.9      5    8905
Waiting:        1   41 362.9      5    8905
Total:          1   41 363.8      5    8909

Percentage of the requests served within a certain time (ms)
  50%      5
  66%     10
  75%     14
  80%     17
  90%     26
  95%     35
  98%     79
  99%   1271
 100%   8909 (longest request)

ผลการทดสอบ mysql_pconnect จะเห็นได้ว่ากดราฟพุ่งสูงสุดที่ประมาณ 130 Connections เอง

จะเห็นว่ากราฟพุ่งสูงสุดที่ 130 Connection  และต่อได้ 4688 ครั้งต่อ 1 วินาทีเลยทีเดียว (Concurrent หรือจำนวนการเชื่อมต่อพร้อมกันคือ 200 นะครับ) จะเห็นได้ว่าเร็วกว่า mysql_connect เกือบ 2 เท่าเลยทีเดียว(ขี้เกียจคำนวน ประมาณเอาแล้วกัน 555)

 

How To Install web.py in XAMPP

web.py คืออะไร

มันคือ Framework สำหรับการเขียนเว็บด้วยภาษา python คล้ายๆ PHP ครับ สามารถเข้าไปดูเพิ่มเติมได้ที่นี่ ถามว่าทำไมเราไม่ใช้ php ไปล่ะ คำตอบคือ Python เป็นภาษาที่ค่อนข้างง่ายสำหรับมือใหม่ ไม่สลับซับซ้อน มีการบังคับให้จัดรูปแบบให้สวยงาม เหมาะสำหรับมือใหม่มาก แล้วถามว่ามันมีข้อเสียไหม ณ ตอนนี้ที่เริ่มศึกษามันช้ากว่า php เป็น 100 เท่า ซึ่งผมพอเดาได้ว่าผลมากจากไหน คาดว่ามาจาก Zend Engine คงจะไป Optimize อะไรสักอย่างให้ครับ แล้วตัว py ยังไม่ได้ compile มันเลยช้า วิธีนี้เป็นวิธีบน Ubuntu นะครับ ถ้าใช้บน Windows ก็ต้องปรับเอานิดหน่อย ถ้าไม่ได้จริงๆก็ถามได้ครับ เดี๋ยวลองไปหาข้อมูลให้

แล้วเราจะลง web.py ใส่ XAMPP ได้ยังไงล่ะ?

ก่อนอื่นเราต้องลง web.py ก่อน

หากต้องการข้อมูลล่าสุด คลิกที่นี่ครับ

  1. เปิด Terminal
  2. สั่ง wget -O webpy.tar.gz https://github.com/webpy/webpy/tarball/master
  3. สั่ง tar zxvf webpy.tar.gz
  4. sudo python setup.py install

การปรับให้ใช้กับ XAMPP ได้

ต้องลง XAMPP ก่อน โดยสามารถหาวิธีได้จากที่นี่ครับ

  1. สร้าง folder ที่ต้างการใน /opt/lampp/htdocs/ เช่น webpy แล้วเข้า folder นั้น
  2. สร้าง .htaccess ขึ้นมา มีเนื้อหาดังนี้
    Options +ExecCGI
    AddHandler cgi-script .py

ทดสอบการทำงาน

  1. สร้าง file ชื่ออะไรก็ได้ เช่น code.py
  2. ใส่เนื้อหาดังนี้
    #!/usr/bin/env python
    import web
    urls = (
        '/(.*)', 'hello'
    )
    app = web.application(urls, globals())
    class hello:        
        def GET(self, name):
            if not name: 
                name = 'World'
            return 'Hello, ' + name + '!'
    if __name__ == "__main__":
        #app.run()
        app.cgirun()
  3. ลองเข้าหน้าเว็บนั้นเช่น http://127.0.0.1/webpy/code.py/MIX

จบครับ