Archive

Posts Tagged ‘Programming’

Python factorial handbook

January 10th, 2010 Fu4ny No comments

Here is a small code-snippet I found and collected.

It takes extract 1 argument and return its factiorial ( n! )

Read more...

Categories: Post Tags: ,

Reading number from file in Python

December 10th, 2009 Fu4ny No comments

Err, that was  a long time since my last tutorial. I'm learning Python now, and I decided to write some tutorials for it.

As you know, there's a simple concept about Python: "You have plenty of way to do things". This is, sometime, a advantages, but sometimes it's hard to decide the way you do "your things".

Today, I'll show you some ways to read number from file input, The good, the bad, and the ugly

The good, tradition, easy:

1
2
3
4
5
6
fin = open("input.txt","r")
for line in fin.readlines():
   #unpack with line.split()
   p = line.split()
   #Get your variable
   n = int(p[0])

Why it's good: it's easy to understand, easy to maintain, easy to write (but slow as hell ).

It's just do the job: read line one by one, split and pack number in to a tuple

The bad, tradition, and still works

1
2
3
4
5
fin = open("input.txt","r")
t = fin.read()
inputTuple = t.split()
for i in inputTuple:
    print i

Thingy: it's just read all the file, split and store all the number into a tuple, whenever you want them or not. It's just eating you RAM, *yum yum*

The ugly, if you want one-liner

1
[i for x in [x.split() for x in open('input.txt')] for i in x]

It's just very good, do all the thing in "The bad" ways, but with only one-line. Do it if you don't want anyone to understand your code.

The IDK, if you just want to read 1 number

1
2
3
4
fin = open("input.txt",'r')
n = ''
while ( n[-1] != ' ' ): n += fin.read(1)
n = int(n[:-1])

Another, just works, easy to understand code.

Is there any other ways that you know ;)

Categories: Post Tags: , ,

Mathematical expression eval

September 7th, 2009 Fu4ny 2 comments

1 bài viết nho nhỏ trong stackoverflow, đơn giản chỉ là 1 cái challenge nho nhỏ để thi xem ai viết ngắn gọn và tối ưu nhất bài toán: nhập vào 1 dãy phép tính kiểu string và trả lại kết quả.

Ờ thì mọi chuyện vẫn bình thường như thế ( bài toán dễ ẹc =)) ), nếu ko có bài viết này ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static string Calc(string exp)
{
    WebRequest request = WebRequest.Create("http://google.com/search?q=" + 
                                           HttpUtility.UrlDecode(exp));
    using (WebResponse response = request.GetResponse())
    using (Stream dataStream = response.GetResponseStream())
    using (StreamReader reader = new StreamReader(dataStream))
    {
        string r = reader.ReadToEnd();
        int start = r.IndexOf(" = ") + 3;
        int end = r.IndexOf("< ", start);
        return r.Substring(start, end - start);
    }
}

Mặc dù hơi tricky, nhưng mà just take a look ;))

Categories: Post Tags: , ,

Singleton class, nó là gì ?

June 18th, 2009 Fu4ny No comments

Bạn đã nghe thấy thuật ngữ Singleton class ? Đó là 1 class mà trong toàn bộ chương trình chúng ta chỉ có thể tạo 1 "instance" ( thực thể ) duy nhất của nó.

Với bài viết này, tôi mong các bạn có 1 cái nhìn tổng quan về Singleton class, và cách cài đặt nó trong Java và C++.

Đầu tiên là về ý tưởng.

Đối với Singleton class, thì chương trình chỉ được phép tạo 1 instance duy nhất của nó, vì vậy

  1. Constructor của class là private
  2. Class phải có reference ( tham chiếu ) đến cái instance duy nhất đó, tức là chúng ta dùng 1 tham chiếu tới class = 1 biến static
  3. Do ko có constructor public, nên ta cần có 1 phương thức để khởi tạo class.

Đó là các yêu cầu dành cho Java.

Giả sử chúng ta xây dựng 1 class SingleTon trong Java.
Đúng tinh thần phải có 1 tham chiếu đến thực thể duy nhất, ta tạo 1 biến static. Và đương nhiên là 1 constructor thuộc tính private. Trong constructor này bạn cài đặt như bạn muốn.

1
2
3
4
public class SingleTon {
    private static SingleTon _singleRef = new SingleTon();
    private SingleTon() {};
}

Tiếp theo là 1 hàm getInstance để lấy địa chỉ của thực thể của class đó.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class SingleTon {
	private static SingleTon _singleRef = new SingleTon();
	private SingleTon() {};
	public static SingleTon getInstance() {
		if ( _singleRef == null ) {
			_singleRef = new SingleTon();
		}
		return _singleRef;
	}
	public void sayHello () {
		System.out.println("Hello! I'm the one!");
	}
}

Giải thích: nếu tham chiếu chưa chỉ đến vùng nhớ nào, thì ta tạo 1 thực thể mới ( thực ra việc này để đảm bảo rằng instance luôn có ). Nếu nó đã trỏ đến 1 vùng nhớ thì ta trả giá trị vùng nhớ.

Sử dụng nó thế nào ? Có 2 cách
1. Tạo class trỏ đến vùng nhớ

1
2
3
4
5
public static void main(String[] args) {
	SingleTon obj = SingleTon.getInstance();
	if ( obj == null ) System.err.println("Cannot creat instance");
	obj.sayHello();
}

2. Sử dụng trực tiếp không qua khai báo

1
2
3
public static void main(String[] args) {
	SingleTon.getInstance().sayHello();
}

Đây là toàn bộ cài đặt dành cho Java, cài đặt cho C++ có 1 vài cái khác phức tạp hơn mà tôi sẽ trình bày ở trang sau

Categories: Post Tags: , ,

Fu4ny@24/04

April 24th, 2009 Fu4ny No comments

Tiếp series code bài trước =)), lần này là C++

Person me();

me.doSomeThing();

me.doAnotherThing();

me.remember( theOne );

[...]

me.forget( theOne );

Đố các bạn biết tại sao chạy đến đoạn cuối code trên lại báo "Segment fault".

Giá như bộ nhớ con ng có garbage collector như các managed compiler....những thứ trong bộ nhớ, cần free, được giải quyết tự động nhỉ...

Categories: Post Tags: ,

Match Demo Report: Logo

March 10th, 2009 Fu4ny No comments

Dính phải 3 ngày tiền 8-3, 8-3 và hậu 8-3 nên giờ mới post cho xong được :P

Mặc dù vậy thì có 1 tin mừng là đã có giao diện ban đầu cho việc add ảnh vào database

Match Web Interface

Match Web Interface

Công việc đã phần nào trở nên dễ dàng hơn :).

Trở lại nội dung chính, trong bài viết này tui sẽ report về việc sử dụng match để demo cho nhận dạng logo của các đài truyền hình.

Dữ liệu ban đầu gồm có tập ảnh như ở dưới đây, được resize mặc định 800x600, và được add vào database. Cái ảnh Yuna là for testing nhé, ko phải ảnh chơi đâu.

Database Images List

Database Images List

Các ảnh được mã hóa lần lượt như sau

ID     Pose    Vector      Name

1        1             45            VTV
2        1             187          ESPN Channel
3        1             219          Cinemax Channel
3        2            325           Cinemax Channel
2        2            164            ESPN Channel
4        1             57              VTV1
5        1            46              VTV2
6        1            53              VTV3
7       1             361           Yuna Fantasy

Thử nghiệm 1: Sử dụng ảnh ngay trong dữ liệu có sẵn, cụ thể ở đây là ảnh ESPN trắng nền đen. Dữ liệu ra duy nhất ảnh số 2 match 100%. Kết luận: Chính xác.

Thử nghiệm 2: Sử dụng ảnh logo của kênh ESPN màu đỏ, có độ cao gấp đôi độ cao của ảnh trong dữ liệu. Kết quả :

ESPN Logo

ESPN Logo

ID     Pose    Số vector trùng
2         1           100
2        2            6
3        1            3
3        2            5
5        1            1
7        1            6

Dễ thấy có trên 50% (53%) số vector của file này trùng với ảnh có ID = 2 pose = 1( chính là ảnh ESPN logo trắng nền đen) còn hầu như ko trùng với ảnh có ID = 2 pose = 2 ( ảnh ESPN logo đen nền trắng).

Kết luận: Chính xác ở mức độ chấp nhận được nếu có ảnh tốt.

Thử nghiệm 3: Sử dụng ảnh logo VTV1 nền đen được cắt ra từ ảnh chụp Tivi.

VTV1

VTV1

ID         Pose            Số vector trùng
2             1                     6
3            1                      2
3             2                    4
4            1                      1
6            1                       1
7            1                      23

Một điều khá dễ thấy là...hoàn toàn ko chính xác, có thể do 2 ảnh khác nhau quá nhiều ( có thể nhận thấy một cách tương đối bằng mắt ). Vấn đề này có thể sẽ được giải quyết khi có một bộ chọn lọc ảnh tốt.

Các thử nghiệm trên được tiến hành với Surf chế độ mặc định, ảnh 800x600 mặc định và hệ số R là 1.02, K=20.

Có 1 thử nghiệm khác được tiến hành với chế độ surf -thres 1 và -d để tăng lượng vector lên, tuy nhiên kết quả còn xấu hơn ( thử nghiệm này với bộ dữ liệu tương tự nhưng đã add thêm 1 số ảnh mới )

ID              Pose           Số vector

1                   1                85
1                2                61
1                3                59
2                1                100
3                1                14
3               2                33
4                1                24
5                1                35
6                1                31
7                1                163
8                1                18
8                2                75

Ko tiện tính % lắmở đây do thử nghiệm này là thử nghiệm rác :P, nhưng hầu như số vector trong thử nghiệm này đều là giống khoảng trên 50%. Chứng tỏ việc đặt thres -1, -d ( tăng size ảnh ) có thể làm tăng lượng điểm ảnh rác, khiến việc so sánh trở nên sai số nhiều hơn.

Kết luận cuối cùng: chủ yếu vẫn cần 1 bộ phận để lọc ảnh chất lượng tốt và vector tốt, do các bộ ảnh chọn bằng mắt ko có được độ tin cậy cần thiết.

Categories: Featured, Post Tags: , , ,

Hidepost development status

January 28th, 2009 Fu4ny 2 comments

I hope that all of you will be happy reading this announcement.

Starting today, I'm going to resume my HidePost project, I'll try to fix all known problems ( excerpt bug, feed, level bug and somemore ), and maybe, some new features.

I've never used any subversion system to develop a program before, so I'm going to learn how to use it, by updating HidePost in google code ( you may find my project in google code, but I'll not support anything there, I'll only support the version that release in official Wordpress's plugin ).

At last, my resuming didn't mean that there will be a HidePost version release in next few weeks, but it'll release, someday.

Categories: Post Tags: , , ,

C++ Coding Convetion

November 4th, 2008 Fu4ny 2 comments

Bài viết này sẽ nói về quy tắc viết mã nguồn dành cho C++. Mình ko định làm nó thành 1 guide chuẩn, vì vậy ko cần thiết phải theo quy tắc, hay table of content gì cả... Read more...

Coding Convention – Quy tắc code

November 3rd, 2008 Fu4ny No comments

Đang ngồi dịch thì mất điện, 4 ngày nghỉ rồi, chả làm gì cả. Ngồi đọc Coding Convetion kết hợp viết bài cho nó nhớ. Read more...