Archive for November, 2009

สูตรการหา Bitwise Operations

สำหรับการคำนวณ และสูตรสั้นๆ ก็มีดังนี้ครับ

1. >> (Right Shift)
>> สามารถทำได้ดังนี้ เช่น 10 >> 2 แปลง 10 เป็นเลขฐานสองก่อนจะได้ (32 bit แต่แสดงแค่นี้ที่จำเป็น)
1 00001010 >> 2 เลื่อนบิตทางขวาไปสองตำแหน่ง จะได้ 000010 แทนที่ตำแหน่งทางซ้ายมือ (แทนที่ด้วย 0) จำนวนสองตำแหน่งจะได้ 000000010 ดังนั้น 10 >> 2 = 2
2 หรือ สามารถใช้สูตร x >> y = x/2y จากตัวอย่างจะได้ 10 >> 2 = 10/(22) = 2 (ปัดเศษทิ้ง)
3 ข้อมูลเพิ่มเติม Right Shift

2. >>> (Zero-Fill Right Shift)
>>> สามารถทำได้ดังนี้ เช่น 10 >>> 2 แปลง 10 เป็นเลขฐานสองก่อนจะได้ (32 bit แต่แสดงแค่นี้ที่จำเป็น)
1 00001010 >>> 2 เลื่อนบิตทางขวาไปสองตำแหน่ง จะได้ 000010 แทนที่ตำแหน่งทางซ้ายมือ (แทนที่ด้วย 0) จำนวนสองตำแหน่งจะได้ 000000010 ดังนั้น 10 >>> 2 = 2
2 ข้อแตกต่างระหว่าง Right Shift และ Zero-Fill Right Shift คือการกระทำกับเครื่องหมาย (-) ใน Right Shift จะคงเครื่องหมายไว้เช่นเดิมส่วน Zero-Fill Right Shift จะคำนวณ หรือเปลี่ยนจากฐาน 10 เป็นฐานสองโดยยังคงเครื่องหมายอยู่เช่น เปลี่ยนจาก -10 = 11111111 11111111 11111111 11110110 แล้วค่อยมาทำการ shift bit หลังจาก shift แล้วแทนที bit ที่ shift ไปด้วย 0 เสมอ
3 ข้อมูลเพิ่มเติม Zero-Fill Right Shift

3. << (Left-Shift)
<< สามารถทำได้ดังนี้ เช่น 10 << 2 แปลง 10 เป็นเลขฐานสองก่อนจะได้(32 bit แต่แสดงแค่นี้ที่จำเป็น) 1 00001010 << 2 เลื่อนบิตทางซ้ายไปสองตำแหน่ง จะได้ 001010 แทนที่ตำแหน่งทางซ้ายมือ (แทนที่ด้วย 0) จำนวนสองตำแหน่งจะได้ 00101000 ดังนั้น 10 << 2 =40 2 หรือ สามารถใช้สูตร x << y = x*2y จากตัวอย่างจะได้ 10 << 2 = 10*(22) = 40 3 ข้อมูลเพิ่มเติม Left Shift ตัวอย่างอ้างอิงจากภาษา Java นะครับ แต่คิดว่าทุกภาษาที่ทำ Bitwise Operator ได้ไม่น่าจะแตกต่างกันครับ ข้อมูลจาก
bitwise (ไทย)
Right Shift
Zero-Fill Right Shift
Left Shift

Get MacAddress

มีงานอยู่ชิ้นหนึ่งที่ผมต้องเก็บรายละเอียดของ Mac Address จากเครื่องที่ใช้งานโปรแกรมอยู่ ด้วยเสาะหาไปทั่วก็ไปเจอที่ How do I get MAC address of a host? ซึ่งใช้ได้ผลดีครับ แต่ใช้ได้กับ JDK 1.6 นะครับ ซึ่งก็ไม่ใช่ปัญหาเพราะ งานที่ผมทำก็ใช้ JDK 1.6 เหมือนกัน เลยมา Note ไว้เผื่อกันลืม

/**
 * File Name : GetMacAddress.java
 * Created Date : Nov 16, 2009 : 5:11:33 PM
 */
package com.fun4station.example;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;

/**
 * @Author Supot Saelao
 * @Version 1.0
 */
public class GetMacAddress {
	public static void main(String[] args) {
		try {
			String ip = "10.25.106.70";
			InetAddress address = InetAddress.getByName(ip);		
			
			//Get NetworkInterface for the current host and then read the hardware address.
			NetworkInterface ni = NetworkInterface.getByInetAddress(address);
			String str = "";
			if (ni != null) {
				byte[] mac = ni.getHardwareAddress();
				if (mac != null) {
					//Extract each array of mac address and convert it to hexa 
					//with the following format 08-00-27-DC-4A-9E.					 
					for (int i = 0; i < mac.length; i++) {
						str += String.format("%02X%s", mac[i],(i < mac.length - 1) ? "-" : "");
					}	
					System.out.println(" Mac Address of : "+ip+" is : "+str);
				} else {
					System.out.println("Address doesn't exist or is not accessible.");
				}
			} else {
				System.out.println("Network Interface for the specified address is not found.");
			}			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}
}

ข้อมูลจาก
How do I get MAC address of a host?
String.format

วิธีเขียนโปรแกรมวน Loop แล้ว CPU ขึ้นไม่ถึง 100%

จากการได้ไปอ่านที่เว็บพี่ไท้มาเกี่ยวกับ วิธีเขียนโปรแกรมวน Loop แล้ว CPU ขึ้นไม่ถึง 100%
แล้วเห็นว่ามีประโยชน์มาก เลยถือโอกาสทดลอง ว่าวิธีนี้จะช่วยได้มากแค่ไหนครับ เลยมา Note เป็นตัวอย่างไว้ครับ
1. แบบธรรมดาให้ loop 1,000,000,000 รอบ

/**
 * File Name : SleepTest.java
 * Created Date : Nov 13, 2009 : 1:34:13 PM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.example;
import java.math.BigDecimal;

/**
 * @Author Supot Saelao
 * @Version 1.0
 */
public class SleepTest {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		BigDecimal amount = new BigDecimal(0);
		for (int i = 0; i < 1000000000; i++) {
			amount = amount.add(new BigDecimal(i));
		}
		System.out.println("Amount : " + amount);
		long end = System.currentTimeMillis();
		System.out.println("Start time : " + start);
		System.out.println("End time : " + end);
		System.out.println("Diff time : " + (end - start));
	}
}

ตัวอย่าง output

cpu100-normal

Amount : 499999999500000000
Start time : 1258094775765
End time : 1258094827484
Diff time : 51719

Read more

Manage file in C#

Code ตัวอย่างการจัดการไฟล์ในภา่ษา C# สามารถใช้งานผ่าน class File ได้โดยตรงเลยครับดูแล้วสะดวกสบายกว่า java เป็นอย่างมาก

using System.IO;
using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {
            string fileName = @"C:\data\test.txt";
            string desFile = @"C:\data\test1.txt";

            //Delete file
            File.Delete(fileName);

            //Move file
            File.Move(fileName, desFile);

            //Copy file
            File.Copy(fileName, desFile);

            //Copy file & overide
            File.Copy(fileName, desFile, true);

            Console.ReadLine();
        }
    }
}

List file from directory

คราวก่อนโพสตัวอย่าง code การ การอ่านรายชื่อไฟล์จาก Directory ที่ต้องการ ของ Java ไปแล้ว สำหรับตัวอย่างนี้เป็นของ C# ครับ

using System.IO;
using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {
            string dir = @"D:\AppSource\BriaGroup";
            //List all file (full paths)
            string[] files= Directory.GetFiles(dir);
            foreach (string str in files) {
                Console.WriteLine("File : {0} ",str);
            }

            //List all file & filter "*.dll"
            string[] files1= Directory.GetFiles(dir, "*.dll");
            foreach (string str in files1) {
                Console.WriteLine("File1 : {0} ", str);
            }
            //List all file & filter & include all dir
            string[] files2= Directory.GetFiles(dir, "*.dll", SearchOption.AllDirectories);
            foreach (string str in files2) {
                Console.WriteLine("File1 : {0} ", str);
            }

            Console.ReadLine();
        }
    }
}

ความยากง่ายนั้น ดูเหมือนว่า C# จะง่ายกว่ามากครับ
ข้อมูลจาก
Get Files from Directory