เล่นง่ายๆ กับเช็คว่า ip, e-email หรือ username ที่สมัครสมาชิกเข้ามาเป็น spammer หรือไม่?

ช่วงนี้เจอเรื่องปวดหัวเกี่ยวกับ spam ใน forum เยอะมาก ตอนนี้เลยใช้วิธีง่ายๆ ไปก่อนผ่าน http://www.stopforumspam.com ก็กันได้ในระดับนึง แต่ว่ามี API Limit อาจจะต้องหาวิธีอื่นๆ แก้ไขเฉพาะหน้ากันต่อไป คิดว่าน่าจะพอไหวอยู่

<?php
function is_forumspam_objectsIntoArray($arrObjData, $arrSkipIndices = array()) {
    $arrData = array();

    // if input is object, convert into array
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }

    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = is_forumspam_objectsIntoArray($value, $arrSkipIndices);
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}

/**
http://www.stopforumspam.com/api?ip=91.186.18.61
http://www.stopforumspam.com/[email protected]
http://www.stopforumspam.com/api?username=MariFoogwoogy
**/
function is_forumspam($var) {

    $var['email'] = urlencode($var['email']);

    $q = 'username='.$var['username'].'&email='.$var['email'].'&ip='.$var['ip'];

    $xmlUrl = "http://www.stopforumspam.com/api?".$q."&f=xmldom";

    $xmlStr = file_get_contents($xmlUrl);

    $xmlObj = simplexml_load_string($xmlStr);

    $arrXml = is_forumspam_objectsIntoArray($xmlObj);

    if($arrXml['ip']['appears'] == 1)
    return true;
    if($arrXml['email']['appears'] == 1)
    return true;
    if($arrXml['username']['appears'] == 1)
    return true;

    return false;
}

อ้างอิงจาก http://www.stopforumspam.com

 

ประกาศจัดงาน Techno : HTML5, WP7 Developers, Social ครั้งที่ 1

เชิญผู้สนใจร่วมงาน Techno <Tags> (by MVPs) ครั้งที่ 1

โดยจะนำเสนอ และถ่ายทอดความรู้ทางเทคโนโลยี ที่น่าสนใจในปัจจุบันและกำลังจะเป็นที่นิยมในอนาคต โดยในครั้งนี้ จะเป็นการเน้นเนื้อหาไปที่ การพัฒนาเว็บเพื่อให้เป็นเว็บแห่งอนาคตด้วย HTML5, ทักษะที่จำเป็นในการพัฒนา App สำหรับ Windows Phone 7, การสร้างเว็บเพื่อเชื่อมต่อกับระบบ Social ของ  Facebook และ Twitter และ การบริหารงานเว็บไซต์ และ hosting ภายใต้ BSD License เหมาะสำหรับ ผู้สนใจในการพัฒนาเว็บด้วย HTML5 , ผู้สร้าง App สำหรับ Windows Phone 7
งานนี้เกิดจากความร่วมมือของ Developer Communities และ MVPs ได้แก่ CodeToday.net, CoreSharp.net ,Greatfrinds.Biz และ MVPs โดยร่วมมือกันจัดงานนี้ขึ้น และได้รับการสนับสนุนต่างๆ จากทาง บ.ไมโครซอฟท์ ประเทศไทย

กำหนดจัดงาน : วันอาทิตย์ที่ 12 มิถุนายน 2554 เวลา 10:00น.- 15:30น.

สถานที่ : ห้อง Auditorium 1-3 บ.ไมโครซอฟท์ ประเทศไทย ชั้น 38  ตึก CRC All Season Place ถ.วิทยุ

การลงทะเบียน : รับลงทะเบียนจำกัด โดยกรอกข้อมูลลงทะเบียนผ่านระบบลงทะเบียนเท่านั้น เต็มแล้วปิดทันที ลงทะเบียนได้ถึงวันศุกร์ที่ 10 มิย 2554 นี้ ก่อน 17:00น.

http://bit.ly/TechnoTagsRegis01

(**ขอความร่วมมือทุกท่านลงทะเบียนแล้วขอให้มาร่วมงานได้ เพื่อไม่เป็นการกันสิทธิ์ผู้อื่น**)

Agenda:
10:00 – 10:30      การบริหารงานเว็บไซต์ และ hosting server ด้วย WebistePanel ที่เป็น OpenSource ภายใต้ BSD License
10:30 – 11:30      HTML5 ตอนที่ 1 The First Look ทำเว็บให้พร้อมสำหรับ HTML5 (อ.สุพจน์ พันธ์สกุล Microsoft MVP ASP.NET)
11:30 – 12:30      From Zero to Hero พัฒนา App บน Windows Phone (คุณจิรวัตน์ ผดุงกิจจานนท์ Microsoft MVP Windows Phone)
12:30 – 13:30      พักกลางวัน
13:30 – 14:30      HTML5 ตอนที่ 2 HTML5 In Action (สงวน ธรรมโรจน์สกุล)
14:30 – 15:30      How it works – อยากทำเว็บให้เชื่อมต่อกับ Facebook และ Twitter  (สุวิชชา จันทร Microsoft MVP)

 

ลองเล่นๆ แงะ Backup ของ iOS 4 เพื่อดึงการเก็บข้อมูลพิกัดของผู้ใช้งาน

จากข่าว iOS 4 เก็บข้อมูลพิกัดทุกคนไว้โดยตั้งใจ ก็เลยรู้สึกคันไม้คันมือลองของ เนื้อหาตอนนี้เขียนขึ้นเพื่อเตือนและให้ระมัดระวังตัว เพราะฉะนั้นหวังว่าจะมีประโยชน์กับคนที่อ่าน แน่นอน อุปกรณ์และตัวอย่างทั้งหมด ไม่ได้ jailbreak หรือ hack/crack แต่อย่างใด เพราะส่วนตัวแล้วนั้นผมใช้ iPod Touch 4 อยู่แล้ว และไม่ได้ jailbreak ใดๆ Apps ทุกตัวซื้อทั้งหมด และใช้งานตาม EULA ของ Apple ซึ่งตัว iOS ที่ใช้ก็ือ 4.3.2 ตัวล่าสุด! แน่นอนว่ามันมีข่าว ผมก็ต้องจัดสักหน่อย ดูว่าเป็นอย่างที่เค้าว่ากันว่าไหม

จากแหล่งข้อมูลอ้างอิง ผมใช้ข้อมูลตัวอย่างจากการ Backup เป็นหลักแล้วกัน ถ้าจะให้เข้าไปเอาจากในเครื่องเลย ดูจะเสียเวลาและดูยุ่งยาก ซึ่งแน่นอนว่าเป็นข้อมูลที่เข้าถึงง่ายที่สุดและไม่ได้อยู่ติดตัวผู้ใช้ตลอด ทำให้โดนเอาไปใช้งานได้ทันที!!!! รหัสผ่านไม่ต้องกรอก แต่สามารถเข้าถึงเครื่องที่ iPhone/iPod Touch รุ่นนั้นๆ เคย Sync ไว้กับเครื่องของไว้ ก็จะสามารถนำข้อมูลส่วนนี้และนำไปใช้งานได้ทันที

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

เรามาเริ่มกันเลย การเข้าถึงแหล่งข้อมูล Backup นั้นผมอ้างอิง path ของระบบผ่าน Microsoft Windows 7

C:\Users\[Windows's User Name]\AppData\Roaming\Apple Computer\MobileSync\Backup\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-yyyymmdd-hhmmss

[Windows’s User Name]
ชื่อ User Name ของ Windows ที่ใช้งานอยู่

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
คือรหัส 40 ตัวอักษรที่ hash ไว้

yyyymmdd-hhmmss
วันและเวลาที่ backup

ใน directory ปลายทาง หาไฟล์ที่ชื่อ

4096c9ec676f2847dc283405900e284a7c815836
เป็นไฟล์ฐานข้อมูลของ SQLite และ “ไม่ได้เข้ารหัส”

ใช้ SQLite Manager ที่เป็น Extension ของ Mozilla Firefox เปิดเอาก็ได้แบบนี้!

Table ในฐานข้อมูลที่ต้องสนใจคือ CellLocation และ WifiLocation ครับ

จะได้ข้อมูลเวลา สถานที่ที่เป็น lat/long ชัดเจนมาก โชคดีที่ผมใช้เป็น Wifi แต่ถ้าเป็นมือถืออย่าง iPhone ก็จะอยู่ที่ CellLocation โครงสร้างก็ไม่แตกต่างกันครับ เอาข้อมูลไป lat/long ไปค้นหาใน Google Maps ได้ทันที จะเขียนโปรแกรม ฯลฯ ก็น่าจะยากสำหรับคนที่ต้องการติดตามตัวครับ!!!

เนื้อหาตอนนี้เป็นการตีแผ่และหวังว่าในอนาคต Apple จะปรับปรุงการเก็บข้อมูลส่วนนี้ให้มีความปลอดภัยมากขึ้น และแจ้งผู้ใช้งานก่อนไม่ใช่อยากจะเก็บก็เก็บโดยไม่ได้บอกผู้ใช้ก่อนแบบนี้

ปล. เนื้อหาบทความนี้อาจจะอายุไม่ยืน ถ้ามีการแจ้งให้ลบบทความจากหน่วยราชการคงต้องลบนะครับ ;P

อ้างอิงจาก http://petewarden.github.com/iPhoneTracker/

หมายเหตุ : วิธีนี้จะใช้ได้ผลใน iOS รุ่นที่ต่ำกว่า iOS 4.3.3 ลงมา

 

เมื่อโปรแกรมเมอร์อารมณ์ติส ก็แนวๆ นี้แหละ

จาก http://bit.ly/fCTsuB “แอบชอบหนุ่มโปรแกรมเมอร์ จะแอบบอกความในใจด้วยโค๊ดแบบไหนได้มั่งอ่า”

ก็เลยเขียนเล่นๆ ช่วงที่เซงๆ กับเรื่องบางเรื่อง


World = {
    'CreateMe'  : function (n) {
        World.me = n;
        World.HaveSomeThingToTellYou = function () {
            if(World.you != null)
                return true;
            alert('Single');
            return false;
        }
        return World;
    },
    'CreateYou'  : function (n) {
        World.you = n;
        World.Love = function (u) {
            alert(World.me + " love " + u.you + ".");
        }
        return World;
    }
};

i = World.CreateMe('Me');
u = World.CreateYou('You');

if(i.HaveSomeThingToTellYou())
i.Love(u);

 

เอา Zend Framework มาใส่ Codeigniter Framework เพื่อใช้ Zend Component

entry นี้ผมกะจะเขียนตั้งนานแล้ว แต่ว่าไม่มีโอกาสเสียที วันนี้เลยเอาสักหน่อยครับ

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

เหตุผลที่เอา Component ของ Zend Framework (ต่อไปเรียก Zend) มาใช้ใน Codeigniter (ต่อไปเรียก CI) เพราะความครบเครื่องในการนำไปใช้งาน ที่หลายๆ อย่างทำได้ดีกว่าตัว CI เยอะมาก แต่โครงสร้างและติดตั้งของ Zend ทำได้ยุ่งยากกว่า ผมเลยเอามาผสมกัน หากใครใช้ Zend มาบ้างจะทราบดีว่ามันอลังการงานสร้างแค่ไหน ครบเครื่องอย่างไร

เอาหล่ะ ไม่พูดอะไรมาก ก่อนอื่นสร้างไฟล์ที่ path ตามด้านล่างครับ

system/application/libraries/Zend.php

ภายในไฟล์ก็ประกอบด้วยโค้ดตามด้วยล่างครับ

<?php
class CI_Zend {
    function __construct ($class = NULL) {

        ini_set('include_path',  ini_get('include_path') . PATH_SEPARATOR . APPPATH . 'libraries');

        if ($class) {
            require_once (string) $class . EXT;
            log_message('debug', "Zend Class $class Loaded");
        } else {
            log_message('debug', "Zend Class Initialized");
        }
    }

    function load ($class) {
        require_once (string) $class . EXT;
        log_message('debug', "Zend Class $class Loaded");
    }
}

โดยเมื่อได้ไฟล์ Zend.php แล้ว ให้เอา Directory “Zend” ทั้งหมดไปใส่ที่

system/application/libraries

เวลาใช้งาน ก็ใช้งานผ่าน Controller ของ CI โดยมี 2 แบบคือ

  1. โหลด Library Zend ที่เขียนสำหรับตั้ง include path ไปพร้อมๆ กับโหลด Component ไปด้วยเลย
$this->load->library('zend', 'Zend/Package/Name');
  1. โหลดตัว Library Zend ที่เขียนสำหรับตั้ง include path ก่อน แล้วค่อยโหลดตัว Component ทีหลังเป็นตัวๆ ไปก็ได้
$this->load->library('zend');
$this->zend->load('Zend/Package/Name');

การโหลด Zend Component แบบนี้ก็ทำให้ดูเป็นระเบียบกว่าการ require_once เข้ามา เพราะอย่างน้อยก็ทำให้เราทำ logs tracking ใน CI ได้ครับ รวมไปถึงการตั้ง include path เพื่อโยกย้าย Zend Framework ไปที่ไหนๆ ก็ได้ตามแต่เราตั้งใน include path โดยไม่ต้องอ้างอิง include path ของ System

เพียงเท่านี้เราก็ลั้นล้ากับ Zend ใน CI ได้สบายใจแล้วหล่ะครับ ;)