อาทิตย์, กันยายน 05, 2010
   
Font Size

หน้าหลัก - BlackDemon Project!

อัพเดตเว็บใหม่/แก้ไขปัญหามองไม่เห็น user ในเมนู admin

เมื่อสองวันก่อนเกิดคึกขึ้นมาเลยมีอารมณ์อยากจับเว็บแต่งตัวซะใหม่ ตอนแรกก็เบื่อๆ Joomla ล่ะว่าจะเปลี่ยนไปใช้ Drupal ซักหน่อย

แต่ติดตรงที่ว่า Drupal มี theme ที่ถูกใจน้อยโคตร! ไอ้เราก็ไม่ใช่ Designer ที่จะทำ theme ได้ออกมาดูดีซะหน่อย เลยตัดสินใจใช้ Joomla ครือเก่านี่ล่ะง่ายดี

ในเมื่อมันดีอยู่แล้วจะเปลี่ยนไปใย อิอิ

พอเลือกได้แล้วว่าจะใช้ Joomla ก็มาถึงว่าจะเลือกเอา board แบบไหนตอนที่เลือกนี้มีคิดๆไว้อยู่สองตัวคือ Agora Forum กับ Kunena Forum

ส่วนบอร์ดแยกแบบ SMF หรือ phpBB ไม่เอาล่ะ(เว็บเก่า bridge กับ phpBB3 โดย Rokbridge)  อยากให้มันรวมกันเป็นก้อนไปเลยคิดว่าน่าจะดีกว่า ในที่สุดก็เลือก Agora แต่ดูเหมือนจะมีปัญหากับการตัดคำไทยอยู่

แต่ว่าก็ลงๆไปก่อน ถ้าไม่ถูกใจเดี๋ยวเปลี่ยนไปเป็น Kunena แทน

เริ่มมาก็ลง Joomla แบบ clean ก่อนเลย แล้วตาม extension พวกโมดูลและปลั๊กอินที่น่าสนใจต่างๆ ลงเสร็จก็มาะ tune ให้หลายๆอย่างมันเข้าที่เข้าทางซักหน่อย

ก็ออกมาแจ่มเจ๋งเป็ด! หลังจากนั้นก็มาเทสกับ browser ต่างๆก็ ok ดูดีมากยกเว้น IE6 ที่ logo มันไม่โปร่งแสง! ห่วยแสรดดดด

ครั้นจะให้มาเสียเวลาแก้ Style sheet ก็ไม่ใช่เรื่องงั้นก็ดองมันไว้งั้นล่ะ แถมลง IE6 warning เอาไว้ด้วย คึคึ Money mouth

จากนั้นก็ import DB จากอันเก่ามาอันใหม่ เปิดดู browser ต่างๆ อืมมม ก็โอเค แต่พอเปิดใน IE6 เท่านั้นล่ะ เละครับเละ! หน้า page เละไปหมดเลย

ความจริงไม่สนใจจะแก้ก็ได้ แต่เดี๋ยวโดนข้อหาเหยียดชนชั้น เลยต้องแก้ให้อย่างน้อยหน้าเพจไม่เละให้อ่านออกซักหน่อยละกัน

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

พอแก้เสร็จเจอปัญหาจูมล่ามองไม่เห็น user ที่ insert เข้าไปอีกเซ็งเป็ดเลยควานหาวิธีก็ได้มาว่า มีปัญหาเรื่อง Auto increment ในบางตารางของจูมล่าให้เรียกคำสั่ง SQL ตามนี้


DELETE FROM jos_core_acl_aro WHERE id <> 62;
DELETE FROM jos_core_acl_groups_aro_map WHERE aro_id <> 62;
INSERT INTO jos_core_acl_aro (section_value, value , name) 
    SELECT 'users', id, name from jos_users WHERE id NOT IN (SELECT value from jos_core_acl_aro WHERE id = 62);
INSERT INTO jos_core_acl_groups_aro_map (group_id, aro_id) 
    SELECT 18, id FROM jos_core_acl_aro where id <> 62;


เสร็จแล้ว user ก็จะตรงกันจากนั้นก็ไปที่ component->Agora Forum-> Maintenance-> DB tool-> Sync user ให้ตรงกัน

จากนั้นก็เข้าไปใน db เข้าไปในตาราง jos_core_acl_aro ดูว่า ago_id อันไหนมันเป็น Super Admin แล้วก็กลับมาแก้ใน jos_core_acl_groups_aro_map ให้ group_id เป็น 25  แค่นี้ก็เรียบร้อย

เว็บเสร็จแล้วก็เพิ่มบทความใหม่ซักหน่อย(ความจริงไม่ใหม่หรอก ทำไว้นานแล้วแต่ไม่ได้ publish - -")เจอปัญหาบทความเละกับ IE6 อีก(โอ้ววน้องเจ้า ช่างเอาใจยากนัก)

เลยมาควานหาๆ ดูผมว่ามีปัญหากับ code highlight นี่เองเลยต้องไปหาส่วนเสริมพวก code display มาลงใหม่อีก Yell

โดยส่วนของ  highlight code ผมใช้ RJ insertcode ที่เป็น plug-in เสริมของ JCE เลยต้องหา highlight code ตัวอื่นมาลงเลือกไปเลือกมาก็ได้ Codecitation มาใช้

เสร็จแว้วว ใช้เวลาทั้งหมด 5 ชม.เต็มๆในการอัพคร้้งนี้ วะฮ่าฮ่า

 

วิธีเข้ารหัส/ถอดรหัส string/byte[] อย่างง่ายด้วย AES ใน C#

วางโค้ดแล้วเรียกใช้เมธอดตามที่ต้องการencrypt
โค้ดนี้ใช้ได้กับ .Net Framework 1.1 ขึ้นไป
อ๊ะ! อย่าลืม using System.Security.Cryptography ด้วยล่ะ

byte[] encBytes = EncryptDataByte(Encoding.UTF8.GetBytes(data), password, PaddingMode.ISO1012
return Convert.ToBase64String(encByt
public static string DecryptData(string data, string passw
}

    //--------------------------- AES Encryption String ---------------------------------------------

    public static string EncryptData(string data, string password)

    {

        byte[] encBytes = EncryptDataByte(Encoding.UTF8.GetBytes(data), password, PaddingMode.ISO10126);

        return Convert.ToBase64String(encBytes);

    }

    public static string DecryptData(string data, string password)

    {

        byte[] encBytes = Convert.FromBase64String(data);

        byte[] decBytes = DecryptDataByte(encBytes, password, PaddingMode.ISO10126);

        return Encoding.UTF8.GetString(decBytes);

    }


    //--------------------------- AES Encryption Byte ---------------------------------------------

    public static byte[] EncryptDataByte(byte[] data, string password, PaddingMode paddingMode)

    {

        PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, Encoding.UTF8.GetBytes("Salt"));

        RijndaelManaged rm = new RijndaelManaged();

        rm.Padding = paddingMode;

        ICryptoTransform encryptor = rm.CreateEncryptor(pdb.GetBytes(16), pdb.GetBytes(16));

        using (MemoryStream msEncrypt = new MemoryStream())

        using (CryptoStream encStream = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))

        {

            encStream.Write(data, 0, data.Length);

            encStream.FlushFinalBlock();

            return msEncrypt.ToArray();

        }

    }

    public static byte[] DecryptDataByte(byte[] data, string password, PaddingMode paddingMode)

    {

        PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, Encoding.UTF8.GetBytes("Salt"));

        RijndaelManaged rm = new RijndaelManaged();

        rm.Padding = paddingMode;

        ICryptoTransform decryptor = rm.CreateDecryptor(pdb.GetBytes(16), pdb.GetBytes(16));

        using (MemoryStream msDecrypt = new MemoryStream(data))

        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))

        {            

            byte[] fromEncrypt = new byte[data.Length];            

            int read = csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);

            if (read < fromEncrypt.Length)

            {                

                byte[] clearBytes = new byte[read];

                Buffer.BlockCopy(fromEncrypt, 0, clearBytes, 0, read);

                return clearBytes;

            }

            return fromEncrypt;

        }

    }


วิธีใช้ก็แค่ เรียก EncryptData("ข้อความต้นฉบับ","รหัสลับโคด");

   

แก้ปัญหา Vmware Workstation NAT ใน Windows 7 RC Build 7100

vnwareวันก่อนได้ลง Vmware เวิร์กสเตชัน 6.5.x ซึ่งก็สามารถติดตั้งกับ Windows 7 RC buid 7100 โดยไม่มีปัญหา. สามารถใช้ VM ได้ปกติ
แต่ดันมีปัญหากับเครือข่าย NAT นิดหน่อยโดยสามารถ ping เห็น host ข้างนอกแต่ไม่สามรถเรียก web page ได้ (ไม่รู้มันเป็นไร - -") เลยไปค้นหาวิธีมาให้ทำตามนี้ครับ

1. Run the Virtual Network Editor as Administrator (Use RunAS or right click and Run as Administrator on vmnetcfg.exe)
2. Goto Host Virtual Adapters and remove all VMNet instances (VMNet1 and VMNet8 typically).
3. Click Apply.
4. Add New and Assign it the new adapter to VMnet1.
5. Click Apply.
6. Select the Host Virtual Networking tab.
7. Click the > next to VMnet1 and change the address and subnet to the ICS network (192.168.0.0 / 255.255.255.0)
8. Click Apply.
9. Go to the NAT tab and select VMNet1.
10. Click Edit and change the Gateway to the ICS gateway IP (192.168.0.1)
11. Click Apply and restart the NAT service. (Counter-intuitive, I know.)
12. Go to the DHCP tab.
13. Add VMNet1 and remove all others.
14. Click Apply.
15. Select Properties of VMNet1 in DHCP Tab.
16. Enter a Start and End Address for DHCP Scope (192.168.0.50 to 192.168.0.75 as an example)
17. Adjust client lease to a few days to avoid potential DHCP client renewal timeouts.
18. Click OK / Click Apply.
19. Select Host Only Networking for every VM that needs NAT out to your host network/internet.
20. Enable ICS (Internet Connection Sharing) on the W7 Host network card that provides connectivity. Select VMNet1 as the network card that needs access.

แค่นี้ก็ใช้ได้แล้วครับ :)

การทำงานของมันก็คือเปลี่ยนจากใช้ NAT มาเป็น Share Network จาก Host(เครืองเรา)ไปให้ตัว VMware นั่นเอง


ลองดูรูปประกอบ ในการแก้ไข Virtual Network Editor กด "อ่านต่อ" ครับ

   

การเรียกใช้ Hash อัลกอริทึ่ม MD5, SHA1, SHA256 and SHA512 ใน C#

ปัญหา ใหญ่เรื่องหนึ่งสำหรับภาษา OO เช่น .Net และ Java คือบางครั้งในการทำงานที่มีการเรียกใช้ function แต่มีความไม่เข้ากันในภาษาอื่นๆencrypt

เช่นการเรียกใช้ในภาษา PHP เราสามารถเรียกใช้ฟังก์ชั่น MD5 และแค่ป้อน string เข้าไปเราก็สามารถได้ string ที่ผ่านการ hash มาได้แบบง่ายๆ

แต่ใน .Net ต้องมายุ่งยากกว่านั้น ผมเลยมีวิธีง่ายๆกว่านั้นคือสร้างเป็น class เอาไว้ใช้เอง หรือทำเป็น .dll เอาไว้ใช้กับโปรแกรมอื่นๆได้ด้วย
ตัวอย่างนี้จะใช้ได้กับ MD5, SHA1, SHA256 และ SHA512 ครับ

 
using System;
using System.Security.Cryptography;
using System.Text;

namespace Hash
{
    public class Hash
    {
        public Hash() { }

        public enum HashType : int
        {
            MD5,
            SHA1,
            SHA256,
            SHA512
        }

        public static string GetHash(string text, HashType hashType)
        {
            string hashString;
            switch (hashType)
            {
                case HashType.MD5:
                    hashString = GetMD5(text);
                    break;
                case HashType.SHA1:
                    hashString = GetSHA1(text);
                    break;
                case HashType.SHA256:
                    hashString = GetSHA256(text);
                    break;
                case HashType.SHA512:
                    hashString = GetSHA512(text);
                    break;
                default:
                    hashString = "Invalid Hash Type";
                    break;
            }
            return hashString;
        }

        public static bool CheckHash(string original, string hashString, HashType hashType)
        {
            string originalHash = GetHash(original, hashType);
            return (originalHash == hashString);
        }
        private static string GetMD5(string text)
        {
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] hashValue;
            byte[] message = UE.GetBytes(text);

            MD5 hashString = new MD5CryptoServiceProvider();
            string hex = "";

            hashValue = hashString.ComputeHash(message);
            foreach (byte x in hashValue)
            {
                hex += String.Format("{0:x2}", x);
            }
            return hex;
        }

        private static string GetSHA1(string text)
        {
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] hashValue;
            byte[] message = UE.GetBytes(text);
            SHA1Managed hashString = new SHA1Managed();
            string hex = "";

            hashValue = hashString.ComputeHash(message);
            foreach (byte x in hashValue)
            {
                hex += String.Format("{0:x2}", x);
            }
            return hex;
        }

        private static string GetSHA256(string text)
        {
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] hashValue;
            byte[] message = UE.GetBytes(text);

            SHA256Managed hashString = new SHA256Managed();
            string hex = "";

            hashValue = hashString.ComputeHash(message);
            foreach (byte x in hashValue)
            {
                hex += String.Format("{0:x2}", x);
            }
            return hex;
        }
        private static string GetSHA512(string text)
        {
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] hashValue;
            byte[] message = UE.GetBytes(text);

            SHA512Managed hashString = new SHA512Managed();
            string hex = "";

            hashValue = hashString.ComputeHash(message);
            foreach (byte x in hashValue)
            {
                hex += String.Format("{0:x2}", x);
            }
            return hex;
        }
    }
} 

วิธีเรียกใช้ก็ GetHash(string,HashType) ก็จะได้ string ที่เข้ารหัสมาเรียบร้อยแล้ว

หรือถ้าต้องการตรวจสอบว่าเป็นการเข้ารหัสแบบใดก็เพียงเรียกใช้ CheckHash(string,string,HashType)

   

ตรวจจับ Browser ด้วย jQuery แบบง่ายโคตรๆ

วิธีตรวจจับ browser IE6 แบบง่ายๆ ด้วย jQuery นะจ๊ะ
ก่อนอื่นก็ import jquery, jquery ui และ jquery ui css เข้ามาซะ
1
2
3
4
<link type="text/css" href="jscript/jquery/themes/redmond/ui.all.css" rel="stylesheet" />
<script type="text/javascript" src="jscript/jquery/jquery.js"></script>
<script type="text/javascript" src="jscript/jquery/jquery-ui.min.js"></script>
<script type="text/javascript" src="jscript/jquery/ui/ui.core.js"></script>
 
จากนั้นก็ใส่โค้ดนี้ลงไปที่ head ซะจะได้ถูกหลัก w3c หน่อย หุหุ
1
2
3
4
5
6
if (jQuery.browser.msie) {
if(parseInt(jQuery.browser.version) == 6) {
//อะไรก็ว่าไป
$("#checkBrowserBox").dialog({ modal: true });
}
}
 
แล้วเราก็สร้าง #checkBrowserBox ขึ้นมา แล้วก็ซ่อนมันไว้ก่อนด้วย Display
1
2
3
4
5
6
7
8
9
10
<div id="checkBrowserBox" title="โอ๊ะโอ" style="Display:none">
คุณกำลังใช้งาน Browser รุ่นเก่าซึ่งอาจจะมีข้อผิดพลาดในการแสดงผลได้ <br>
กรุณาปรับปรุงเป็นรุ่นใหม่เพื่อการใช้งานราบลื่น
<br>
<br>
คุณสามารถโหลดได้ฟรี
<a href="http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx"
target="_blank">ที่นี่</a>
โดยสามารถโหลดได้ฟรี
</div>
 
แค่นี้ก็เรียบร้อย พอเจ้า IE6 และน้องชายมัน IE7 เข้า ไอ้กล่องนี้มันก็เด้งโชว์ ผลลัพธ์ที่ได้ก็จะได้เป็น
warningIE6
 
อุอุ ง่ายมั้ยล่ะ!
วิธีนี้เอาไปประยุกต์ใช้ แนบ css เฉพาะสำหรับ IE6 ก็ได้ด้วยนะเออ
ปล. ไม่ได้อัพนาน เลยมาอัพแบบขี้เกียจๆแบบนี้ล่ะง่ายดี อิอิ
   

หน้า 6 จาก 9

Move
-

Short Articles

Top Headline

เมื่อก่อนผมหวงความเป็นส่วนตัวมากๆ ทั้งๆที่อาจจะไม่สำคัญอะไร แต่ไม่รู้ล่ะ ผมหวงของผมนี่(เกรียนดีมั้ยล่ะ) การใช้งานในผลิตภัณฑ์ต่างๆของ Google ซึ่งก็รู้อยู่แล้วว่า การใช้งานต่างๆมีการตั้งค่าปริยาย(Default) ทำให้ Google มีสิทธิ์เก็บข้อมูลต่างๆ ไม่ว่าจะเป็น - Google...

Read More...

เมื่อวานนี้ (26/11/2009) ทาง Mininova ได้ออกประกาศจำกัดการเผยแพร่เนื้อหา(งดอัพโหลดและลบไฟล์ torrent ออก) อันเป็นผลสืบเนื่องมาจากกรณีคำสั่งของศาลแห่งอูเทรคต์ ประเทศเนเธอแลนด์ เนื่องจากว่าทาง Mininova ไม่สามารถมีระบบที่กรองข้อมูลที่ละเมิดลิขสิทธิ์ได้ 100% ก็เลยต้องจำกัดเนื้อหาและการใช้งานเอาไว้ก่อน...

Read More...

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

Read More...

Polls

มาเจอเว็บนี้ได้ไง

Login Form

Who's Online

เรามี 32 บุคคลทั่วไป ออนไลน์

Advertisement