Archive | July, 2006

Reading: Làm lập trình viên hay không làm lập trình viên

20 Jul

http://blog.360.yahoo.com/blog-iveB6n89cqh0zy5ZuFiCuQ–?cq=1&p=1&n=28500

(tác giả: Lê Đình Lĩnh Nam)

Được nghỉ 3 ngày nên ngồi suy ngẫm về cái nghiệp lập trình viên mà mình đang theo đuổi. Image Continue reading

text-align bug in FireFox 1.5

19 Jul

While I am rendering a CSS theme for my webapp, I see this problem:

.container{
text-align: center;
border: solid 1px blue;
}
<div class=container><table><tr><td>Text</td></tr></table><div>

In theory, we will have a center-aligned table, and it worked in IE6, but not in Firefox 1.5. If I add align into the div tag, it worked in both. After struggling with a sea of CSS references, trying to find out some other way to work arround this bug, I finally found this:

http://geekswithblogs.net/timh/archive/2006/04/19/75606.aspx

So this is my solution:
.container{
text-align: center;
border: solid 1px blue;
}

.container{
text-align:-moz-center;
}

Just place those lines into your CSS, the browser will automatically choose the best. Note: never place 2 text-align in 1 block.

Similarly, if you want to right-align the table box, use -moz-right.

Another trick to center the table:

.container{
text-align: center;
border: solid 1px blue;
}
.container table{
margin:0px auto;
}

I don’t find any other trick for right-aligning.

Paging in SQL Server 2000

15 Jul

Oh man, working with M$ is hell. Yeah, they do very big things but they just forgot small but essential things.

M$ maybe the most stupid when not implementing paging functionality in T-SQL. Most of other DBMSs do that. Paging from server is a vital point, especially in web development. If you just do paging from client-side, you are wasting most of network traffics for unused records.

After searching thouroughly on Internet, I finally found out some ways to get arround this flaw. One uses dynamic SQL query to refine the query and add some ORDER BY + TOP clauses to get the result. Another way is to use a temporary table with an identity column used as a row number. I prefer the 2nd way. At least, it’s more secured.

alter procedure GetAuthors
(
@orderby 	nvarchar(100),
@recordsPerPage int,
@pageNumber 	int
)
AS
--  the amount of rows actually needed
declare @rowsNeeded int
--  the position where we need to start retrieving records
declare @startRecord int
-- initialize @rowsNeeded
set @rowsNeeded = (@pageNumber * @recordsPerPage)
-- initalize @startRecord
set @startRecord = ((@pageNumber-1) * @recordsPerPage) + 1

create table #temptable
(
 row		 int identity(1,1),
 au_id 		 varchar(20),
 au_lname	 varchar(40),
 au_fname	 varchar(20),
 phone	 	 char(12),
 address 	 varchar(40),
 city		 varchar(20),
 state	  	 char(2),
 zip		 char(5),
 contract	 bit
) 

-- set the rowcount to only the rows we need.
set rowcount @rowsNeeded

-- select data into a temp table,  I choose to
-- select all data, not just the key into the
-- temp table to avoid another join if the table is large.
insert into #temptable
(au_id,au_lname,au_fname,phone,address,city,state,zip,contract)
select au_id,
       au_lname,
       au_fname,
       phone,
       address,
       city,
       state,
       zip,
       contract
FROM authors
ORDER BY
CASE
WHEN @orderby=’au_lname’ THEN au_lname
WHEN @orderby=’au_fname’ THEN au_fname
WHEN @orderby=’au_id’    THEN au_id
END 
ASC
select row,
       au_id,
       au_lname,
       au_fname,
       phone,
       address,
       city,
       state,
       zip,
       contract
from #temptable
where row >=@startRecord

drop table #temptable

If you use SQL Server 2005, the life must be easier. You can use ROW_NUMBER to do paging:

WITH OrderedOrders AS
(select SalesOrderID, OrderDate,
Row_Number() OVER (order by OrderDate)as RN
from SalesOrderHeader )
SELECT * from OrderedOrders WHERE RN between 50 and 60

Well… At least, M$ have done something to improve the situation, but not all. It takes me all night to find out the way. I have even thought about switching to MySQL with a very simplier paging syntax, but this is my thesis :P, so I can’t.Thanks to the communities.

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=31741

Okey, time to continue my work.

Giới thiệu về Del.icio.us

12 Jul

Giới thiệu trang web Del.icio.us

Nghe qua tên website này bạn có thể liên tưởng đến một website nào đó của người Ý hay Bồ Đào Nha trên đất Mỹ. Thực ra nó là một cách đặt tên phỏng theo chữ “delicious” có nghĩa là “thơm ngon” trong tiếng Anh.

Hãy tưởng tượng xem, hằng ngày lướt web có bao nhiêu link hay mà bạn sưu tập được, bạn muốn lưu chúng lại. Bạn lưu tất cả trong một file text hay word, hoặc khá hơn là bạn tạo nhiều file để lưu, mỗi file là một chủ đề. Mỗi khi đi đâu bạn đều phải chép theo tất cả các file này để có thể lấy ra tham khảo hoặc thêm vào những liên kết mới. Có ai đó hỏi bạn có link ebook nào hay, bạn phải giở file ra kiếm. Thật phiền phức.

Delicious sẽ giúp bạn bạn đánh dấu (bookmark) lại những trang web mà bạn muốn giữ lại để tham khảo lại sau này. Bạn có thể lập một bộ sưu tập các website hay về nhiều lĩnh vực, dùng để share hoặc cho cá nhân,…

Cái hay của việc sử dụng delicious là bạn có thể tổ chức sắp xếp tùy theo ý thích, không phải kè kè chép trong USB và có thể tham khảo ở bất cứ nơi nào miễn có Internet (tất nhiên, nếu không có Internet thì bạn cũng đâu cần những liên kết đó làm gì).

Ngoài ra bạn cũng có thể dễ dàng chia sẽ bộ sưu tập của bạn bởi vì del.icio.us sinh ra là để chia sẻ kia mà . Nếu có ai đó hỏi bạn có liên kết nào hay, bạn chỉ cần chỉ người đó lên xem kho bookmark của bạn trên Delicious. Xem tiếp

Công cụ hỗ trợ cho Delicious

12 Jul

(Xem bài viết giới thiệu Delicious)

Cài các công cụ hỗ trợ cho Delicious

Ngay sau khi đăng ký, Delicious sẽ giới thiệu với bạn một số công cụ mà bạn sẽ sử dụng để việc sử dụng Delicious trở nên dễ dàng hơn.

Trước tiên, bạn hãy kéo-thả 2 liên kết mà Delicious cung cấp lên thanh công cụ Bookmarks (Firefox) hoặc Links (IE). Bạn cũng có thể kéo vào Favorites.

Liên kết post to delicious: Bạn đang xem một website đáng để lưu lại, không muốn phải mất công mở một trang Delicious lên để thêm một cách thủ công, bạn chỉ cần nhấp vào nút này.

Liên kết my delicious: đơn giản như cái tên của nó, nó sẽ đưa bạn đến kho link của chính bạn.


(click to enlarge)

Ghi chú: nếu bạn sử dụng IE mà không thấy Links Toolbar, bạn hãy nhấp chuột phải vào thanh công cụ bất kỳ và check vào dòng Links. Nếu dòng đó đã check thì có nghĩa là thanh công cụ đã nằm đâu đó trên màn hình và thường là bị thanh Address chèn ép dồn sang góc phải. Hãy vào đó lôi nó ra, cho nó thêm chút không gian hay tốt hơn là dành hẵn 1 dòng cho nó.

Nếu bạn bỏ lỡ qua trang giới thiệu này, bạn có thể quay lại bất kỳ lúc nào bằng cách vào Help >> Buttons trên website Delicious.

Nếu bạn là người dùng Firefox, bạn có thêm một lựa chọn, đó là cài thêm Delicious extension hỗ trợ 2 chức năng như trên đồng thời cũng cho bạn tìm kiếm trực tiếp từ Firefox mà không cần mở website Delicious lên.

Để cài đặt bạn có thể vào Help >> Firefox extension.