Tôi đi lang thang trên mạng, thấy cái gì hay, tôi post lại vào đây. Như một cuốn nhật kí lang thang của cuộc đời mình :)
Thứ Bảy, 22 tháng 2, 2020
Thứ Bảy, 22 tháng 2, 2014
Note cho cuộc đời làm freelancer
Labels:
Chuyện Linh Tinh.,
Freelancer,
Kiếm Tiền online
- Làm sếp của chính mình không phải là dễ, ít nhất phải biết mình có thể đánh trận nào và trận nào nên nằm nhà đắp chăn ngủ.
- Không phải cứ ko có việc làm thuê là chết đói, nếu đói thì có thể đói nhưng không chết đói. Cụ thể là sau 4-5 tháng thất nghiệp tôi vẫn sống nhăn răng, ngày 3 bữa cơm, cafe ngắm gái xinh cả ngày,
- Không phải cứ có tiền mới có thể đầu tư, tiền ko phải là thứ duy nhất ta có để đầu tư.
- Cố gắng có kế hoạch lấy ngắn nuôi dài, ví dụ đêm đi trộm chó để nuôi quân chẳng hạn.
- Tự nhiên phát hiện ra mình có thêm nhiều tài lẻ
- Phải biết chơi trò lắp ghép, tìm miếng A lắp được vào miếng B đôi khi giải quyết được vấn đề C của mình.
- Thương hiệu cá nhân và chữ tín trở nên vô cùng quan trọng. (Hãy cố gắng làm "đại hiệp oánh giày" nếu hành nghề oánh giày)
- Các mối quan hệ đã tích lũy được giờ mới là lúc phát huy tác dụng, và là tài sản vô cùng quan trọng.
- Lúc nào cũng phải tỏ ra hoành tráng và nguy hiểm Kể cả đầu bã đậu cũng ít nhất phải ăn mặc cho tươm tất.
- Không phải cái gì rẻ cũng dễ bán. Thời buổi này cái gì rẻ là dễ bị khinh lắm.
- Thà cho không hoặc lấy đúng giá, chứ không bán rẻ sản phẩm của mình.
- Hiểu rõ hơn giá trị của "nhân lực" trong một tổ chức như thế nào,
- 1 mình ta không thể làm tất cả, và 1 mình ta cũng không phải làm tất cả, nếu không hiểu điều này có thể dẫn đến mệt mỏi và thất bại,
- Có những thứ đạt được không phải mua bằng tiền, đánh đổi bằng công sức, mà đôi khi chỉ bằng lời nói.
- Có những con người luôn sát cánh bên ta không phải vì lợi nhuận mà là vì chung 1 con đường.
- Có thể kéo được người khác tham gia cùng mình bằng tình cảm, nhưng để giữ được chân người ta lâu thì phải bằng quyền lợi lâu dài.
- Người ta có câu "Mọi thăng trầm đều do lãnh đạo mà ra", Hồi xưa đi làm thuê công nhận câu ấy đúng, giờ là lúc tự mình cố gắng mà nắm lấy thăng trầm của mình.
- Làm tự do nhưng việc lúc nào cũng có, cả ngày và đêm.
- Rất tốn tiền điện thoại và phải viết lắm email
- Phải luôn áp đảo đối tác nếu nó là người khác giới
- Cố gắng đừng ăn trưa và cafe 1 mình, buồn lắm.
- Đừng nghĩ hết giờ hành chính mò về nhà là có thể yên tâm vứt lại công việc ở văn phòng như hồi làm thuê.
- Thỉnh thoảng vào ngày làm việc, tự dành cho mình 1 hôm tắt điện thoại ngủ ở nhà cả ngày cũng éo chết ai.
- Câu chốt: hồi xưa đi làm thuê biết mai phải cắm đầu làm việc gì, giờ thì ngày mai éo biết cái gì sẽ đến với mình, có thể là cơ hội chẳng hạn.
Thứ Ba, 3 tháng 1, 2012
Vì nghèo nên tôi mất người yêu
Labels:
Truyện Cảm động
Chẳng có lời xin lỗi nào vào đêm T đi cùng người con trai khác, chỉ có nước mắt của một chàng sinh viên nghèo bị người yêu phản bội…
Một câu chuyện có thật, cũng là tâm sự của tôi về mối tình đã chấm dứt cách đây không lâu. Xin được thay tên nhân vật bằng “Đ” và “T”, tôi viết những dòng này không phải để níu kéo hay trách hờn gì nhau. Mà tôi chỉ thấy buồn, muốn được trải lòng và đọc những chia sẻ của các bạn. Cảm ơn mọi người đã đọc tâm sự của tôi!
10h đêm. Quán cà phê bắt đầu vắng khách. Cho dù không phải là ngày lễ hay một ngày đặc biệt nào, theo thói quen Đ vẫn nhấc điện thoại lên gọi cho T, huống chi đây lại là một dịp thật đặc biệt: ngày Noel.
Tiếng chuông điện thoại thân quen cất lên từ đâu đó. Đ giật mình lần theo... Ở một góc vườn, nơi có chiếc chuông gió khẽ rung rinh, mùi hoa tường vi thơm ngát, Đ bàng hoàng khi nhìn thấy T đang tay trong tay với một người đàn ông. Ôi! 24/12, ngày Noel, cũng là ngày kỷ niệm bốn năm yêu nhau của hai đứa mà Đ thì cô đơn với công việc làm thêm ở quán café, còn T thì ngọt ngào yêu đương bên người con trai khác. Chưa bao giờ tim Đ đau đến thế…
Đ sinh ra trong một gia đình có bốn chị em, là con của một người mẹ góa chồng, đã sáu mươi tuổi mà vẫn phải làm phụ hồ để nuôi con ăn học. Đ có một tình yêu đẹp với T từ khi còn học phổ thông, vì nhà nghèo nên Đ nuôi dưỡng nó bằng cả trái tim và những món quà do chính tay mình làm ra. Một chiếc khung ảnh ngộ nghĩnh, một ngôi nhà nhỏ xếp bằng tăm, một lọ hoa giấy… Đ miệt mài làm hết tâm sức và T cũng nhận nó bằng cả trái tim.
Vì nghèo, Đ có thể mất T nhưng giờ Đ không tiếc điều ấy! (Ảnh minh họa)
2010, hai đứa vui sướng dắt tay nhau bước vào cổng trường đại học. Đ học xây dựng, còn T là sinh viên của trường đại học Nông- Lâm. Đ vẫn là một chàng trai nghèo, nhưng T thì đã bắt đầu đổi khác. T biết cách ăn mặc, biết trang điểm, biết làm mình đẹp hơn và nổi bật hơn trước đám đông. T cũng học được cách theo bạn bè vào quán café, quán bar, vũ trường để chơi và nhảy. Phải chăng khi T nhận ra “giá trị sắc đẹp” của mình thì cũng là lúc Đ sực tỉnh, bởi quả thực mình rất “nghèo”. Đ sợ mất T, sợ mất tình yêu. Đ lao đầu vào làm thêm kiếm tiền. Đ không thể nuôi dưỡng tình yêu của mình bằng những món quà ngộ nghĩnh như trước nữa. Đ phải thể hiện tình cảm bằng những món quà giá trị hơn. Và cứ như vậy, Đ chỉ nghĩ đến đồng tiền và tình yêu chứ không bao giờ biết người mẹ 60 tuổi của mình đang phải đi làm phụ hồ cho người ta để có tiền nuôi con ăn học.
Nhưng lòng tham của con người là vô đáy và cuối cùng Đ vẫn phải nhận lời chia tay từ T. Đêm Noel Đ ngồi khóc, chờ tiếng cửa phòng trọ rung lên, T sẽ đến nói lời xin lỗi. Đ không cần gì nhiều, chỉ cần một lời xin lỗi thôi là Đ sẽ quên đi tất cả những gì mình đã nhìn thấy và sẵn sàng tha thứ cho T. Có lẽ, Đ đã yêu T quá nhiều…
Một thời gian dài Đ suy sụp. Chẳng có lời xin lỗi nào vào đêm hôm đó, chỉ có nước mắt của một chàng sinh viên nghèo bị người yêu phản bội. Đ quyết định nói lời chia tay, không phải vì đã hết yêu T, cũng không phải vì một lần bắt gặp T đi với người con trai khác, mà vì Đ hiểu 2 đứa không còn dành cho nhau. T mỉm cười đồng ý. Ngày xưa khi Đ nói lời yêu, T cũng mỉm cười như vậy, nhưng trong tà áo dài trắng nụ cười ấy tinh khiết, thánh thiện và bình dị hơn. Còn hôm nay khi lời chia tay vừa tuột khỏi bờ môi, Đ cũng nhận được một nụ cười, nhưng đó là nụ cười của một người con gái đã bắt đầu nhận ra giá trị của đồng tiền và sắc đẹp.
Đ quay lại nhìn mẹ và gia đình. Đ vẫn đi làm thêm, đủ việc từ nhân viên phục vụ, nhân viên bảo vệ cho đến trông giữ xe. Đ kiếm tiền để học, để giúp đỡ mẹ, để giọt mồ hôi kia rơi ít hơn trên khuôn mặt đầy nếp nhăn của người phụ nữ góa chồng, cả đời vì con cái. Và Đ cũng biết rằng mình đã sai, sai khi nghĩ rằng tình yêu phải được nuôi dưỡng bằng những món quà giá trị.
T ạ! Đồng tiền có thể làm cho mình đẹp hơn, sung sướng hơn, nhưng đồng tiền không thể làm cho tình yêu thêm lấp lánh. Vì nghèo, Đ có thể mất T nhưng giờ Đ không tiếc điều ấy. Đ còn gia đình và người mẹ đáng kính của mình. Đ thực lòng chúc T được hạnh phúc!
Thứ Năm, 22 tháng 12, 2011
Những điều căn bản về UML: Làm quen với Unified Modeling Language
Quay lại về cuối thế kỷ hai mươi --
Chính xác vào năm 1997-- Object Management Group (OMG-Nhóm quản lý đối tượng) đã phát hành bản Unified Modeling Language (UML). Một trong những mục đích của UML là cung cấp cho cộng đồng phát triển một ngôn ngữ thiết kế phổ biến và ổn định, ngôn ngữ này có thể được dùng để phát triển và xây dựng các ứng dụng máy tính. UML đưa ra một ký hiệu mô hình hóa chuẩn thống nhất mà các chuyên gia công nghệ thông tin (CNTT) muốn có trong nhiều năm. Khi sử dụng UML, các chuyên gia CNTT bây giờ đã có thể đọc và phổ biến cấu trúc hệ thống và các kế hoạch thiết kế -- giống như các công nhân xây dựng đang làm trong nhiều năm qua với các kế hoạch chi tiết về các tòa nhà.
Bây giờ là thế kỷ hai mốt -- chính xác là năm 2003-- và UML đã nâng cao sức mạnh trong chuyên ngành của chúng ta. Trên 75% các bản tóm tắt mà tôi thấy, có một điểm nhấn yêu cầu kiến thức về UML. Tuy nhiên, sau khi nói chuyện với đa số các ứng viên cho công việc này, một điều trở nên rõ ràng là họ không thực sự biết UML. Thông thường, hoặc là họ đang sử dụng nó như là một từ thông dụng hoặc họ đã có một phần tiếp xúc với UML. Sự thiếu hiểu biết này đã thôi thúc tôi viết bài giới thiệu vắn tắt này về UML, tập trung vào các sơ đồ cơ bản được sử dụng trong việc mô hình hóa trực quan. Khi bạn đọc xong bạn sẽ không có đủ kiến thức để đặt UML vào tổng quan của bạn, nhưng sẽ có một điểm khởi đầu để nghiên cứu sâu hơn vào ngôn ngữ này.
Một chút nền tảng
Như tôi đã đề cập, UML có nghĩa là một ngôn ngữ thống nhất cho phép các chuyên gia CNTT mô hình hóa các ứng dụng máy tính. Các tác giả chính là Jim Rumbaugh, Ivar Jacobson, và Grady Booch, những người ban đầu đã có các phương pháp cạnh tranh riêng của mình (OMT, OOSE và Booch). Cuối cùng, họ đã tham gia lực lượng và dẫn đến một chuẩn mở. (Âm thanh quen thuộc quá? Một hiện tượng tương tự đã sinh ra J2EE, SOAP và Linux). Một lý do mà UML đã trở thành một ngôn ngữ mô hình hóa chuẩn là tính độc lập của ngôn ngữ lập trình. (Các công cụ mô hình hóa UML của IBM Rational được sử dụng rộng rãi trong các cửa hàng J2EE, cũng như trong các cửa hàng .NET). Ngoài ra, bộ kí hiệu UML là một ngôn ngữ chứ không phải là một phương pháp luận. Điều này là quan trọng, bởi vì một ngôn ngữ, trái với một phương pháp luận, có thể dễ dàng phù hợp với phương diện đạo đức kinh doanh của công ty bất kỳ mà không cần thay đổi.
Do UML không phải là một phương pháp luận, nó không yêu cầu bất kỳ sản phẩm làm ra chính thức nào (tức là, "các tạo phẩm" trong từ ngữ đặc biệt của IBM Rational Unified Process®). Tuy nhiên, nó cung cấp một vài kiểu sơ đồ, khi được sử dụng trong một phương pháp cụ thể, các sơ đồ đó làm tăng sự dễ hiểu cho một ứng dụng đang được phát triển. Có nhiều thứ với UML hơn các sơ đồ này, nhưng với mục đích của tôi ở đây, các sơ đồ cung cấp sự mở đầu tốt cho ngôn ngữ và các nguyên lý phía sau việc sử dụng của nó. Bằng cách đặt các sơ đồ UML chuẩn trong các sản phẩm tạo ra của phương pháp luận của bạn, với những người thành thạo, UML bạn làm cho nó trở nên dễ nhập vào dự án của bạn hơn và nhanh chóng biến thành sản phẩm. Các sơ đồ UML chuẩn, có ích nhất là: sơ đồ ca sử dụng, sơ đồ lớp, sơ đồ trình tự, sơ đồ trạng thái (statechart), sơ đồ hoạt động, sơ đồ thành phần và sơ đồ triển khai.
Để đi sâu vào nhiều chi tiết về từng kiểu sơ đồ sẽ vượt ra ngoài phạm vi của bài viết giới thiệu này. Thay vào đó, tôi sẽ cung cấp cho bạn với đủ thông tin cho một sự hiểu biết chung về từng sơ đồ và sau đó cung cấp nhiều chi tiết hơn trong các bài viết sau.
Sơ đồ ca sử dụng
Một ca sử dụng minh họa một đơn vị chức năng được hệ thống cung cấp. Mục đích chính của việc sử dụng sơ đồ ca sử dụng là giúp các nhóm phát triển hình dung ra các yêu cầu chức năng của một hệ thống, bao gồm mối quan hệ của "các vai" (con người, người sẽ tương tác với hệ thống) với các quy trình cần thiết, cũng như các mối quan hệ trong số các ca sử dụng khác nhau. Các sơ đồ ca sử dụng nói chung cho thấy các nhóm các ca sử dụng -- hoặc tất cả các ca sử dụng cho hệ thống hoàn chỉnh, hoặc sự đột phá của một nhóm các ca sử dụng cụ thể với chức năng liên quan (ví dụ, tất cả các ca sử dụng có liên quan đến quản trị an ninh). Để cho thấy ca sử dụng trên một sơ đồ ca sử dụng, bạn vẽ hình bầu dục ở giữa sơ đồ và đặt tên ca sử dụng ở trung tâm, hoặc bên dưới, hình bầu dục. Để vẽ một vai (chỉ thị một người sử dụng hệ thống) trên một sơ đồ ca sử dụng, bạn vẽ một người dính vào bên trái hay bên phải sơ đồ của bạn (và chỉ trong trường hợp bạn đang muốn biết, một số người vẽ người đi kèm đẹp hơn những người khác). Sử dụng các đường đơn giản để miêu tả các mối quan hệ giữa vai và các ca sử dụng, như trong Hình 1.
Hình 1: Sơ đồ ca sử dụng mẫu
Sơ đồ ca sử dụng thường được dùng để giao tiếp các hàm cấp cao của hệ thống và quy mô của hệ thống. Bằng cách xem xét sơ đồ ca sử dụng mẫu của chúng ta trong Hình 1, bạn có thể dễ dàng chỉ ra các hàm mà hệ thống ví dụ của chúng ta cung cấp. Hệ thống này cho phép những người quản lý ban nhạc xem qua một báo cáo thống kê bán hàng và báo cáo Billboard 200 (bảng xếp hạng 200 anbum âm nhạc bản chạy nhất) với các đĩa CD của ban nhạc. Nó cũng cho phép xem một báo cáo thống kê bán hàng và báo cáo Billboard 200 cho riêng một đĩa CD. Sơ đồ này cũng cho chúng ta biết hệ thống của chúng ta cung cấp các báo cáo Billboard từ một hệ thống bên ngoài được gọi là Dịch vụ báo cáo Billboard (Billboard Reporting Service).
Ngoài ra, sự vắng mặt của các ca sử dụng trong sơ đồ này cho thấy những gì hệ thống không làm được. Ví dụ, nó không cung cấp cách cho phép người quản lý ban nhạc nghe các bài hát từ các album khác nhau trên bảng xếp hạng Billboard 200 -- tức là chúng ta thấy không có tham chiếu đến một ca sử dụng được gọi là Nghe các bài hát từ Billboard 200. Sự thiếu vắng này không phải là một vấn đề nhỏ. Với các sự mô tả ca sử dụng rõ ràng và đơn giản được cung cấp trên sơ đồ như vậy, một nhà tài trợ cho dự án có thể dễ dàng nhìn thấy chức năng cần thiết nào có hay không có trong hệ thống.
Sơ đồ lớp
Sơ đồ lớp cho thấy các thực thể khác nhau (người, các chủ đề và dữ liệu) liên quan với nhau như thế nào; nói cách khác, nó cho thấy các cấu trúc tĩnh của hệ thống. Một sơ đồ lớp có thể được sử dụng để hiển thị các lớp hợp lý, chúng thường là các chủ đề khác nhau mà các doanh nhân trong một tổ chức hay bàn về chúng -- các ban nhạc rock, các đĩa CD, phát thanh hoặc các khoản vay, thế chấp nhà, các khoản vay mua xe và lãi suất. Các sơ đồ lớp cũng có thể được sử dụng để hiển thị các lớp thực hiện, chúng là những lớp mà các lập trình viên thường hay xử lý. Một sơ đồ lớp thực hiện có thể sẽ cho thấy một số các lớp giống như sơ đồ các lớp hợp lý. Lớp thực hiện sẽ không được vẽ với các thuộc tính như nhau, tuy nhiên, vì nó hầu như sẽ có khả năng có các tham khảo đến những thứ như các Vectơ và HashMaps.
Một lớp được mô tả trong sơ đồ lớp như là một hình chữ nhật với ba phần nằm ngang, như trong Hình 2. Phần phía trên chỉ ra tên của lớp; phần giữa có chứa các thuộc tính của lớp; và phần dưới chứa hoạt động của lớp (hay "các phương thức").
Hình 2: Đối tượng lớp mẫu trong một sơ đồ lớp
Theo kinh nghiệm của tôi, hầu như tất cả các nhà phát triển đều biết sơ đồ này là gì, nhưng tôi thấy rằng hầu hết các lập trình viên vẽ các đường quan hệ không đúng. Đối với một sơ đồ lớp như trong Hình 3, bạn nên vẽ mối quan hệ kế thừa 1 bằng cách sử dụng một đường có một mũi tên ở đầu chỉ tới siêu lớp và mũi tên nên là một tam giác hoàn chỉnh. Một mối quan hệ liên kết nên là một đường nét liền nếu cả hai lớp nhận ra được nhau và là một đường có một mũi tên hở nếu liên kết đó chỉ được một trong các lớp này biết đến.
Một sơ đồ lớp hoàn chỉnh, bao gồm đối tượng lớp được hiển thị trong Hình 2
(nhấn vào đây để phóng to)
Trong Hình 3, chúng ta thấy cả hai mối quan hệ kế thừa và hai mối quan hệ liên kết. Lớp CDSalesReport kế thừa từ các lớp Report (Báo cáo). Một lớp CDSalesReport được liên kết với một đĩa CD, nhưng lớp CD không biết gì về lớp CDSalesReport. Cả hai đĩa CD và các lớp Band (Ban nhạc) đều biết về nhau và cả hai lớp có thể được kết hợp với một hoặc nhiều lớp với nhau.
Một sơ đồ lớp có thể tích hợp thêm nhiều khái niệm, mà chúng ta sẽ trình bày sau trong loạt bài này.
Sơ đồ trình tự
Sơ đồ trình tự (sequence) hiển thị một dòng chi tiết cho một ca sử dụng cụ thể hoặc thậm chí chỉ là một phần của một ca sử dụng cụ thể. Hầu như chúng tự giải thích; chúng hiển thị các lời gọi giữa các đối tượng khác nhau theo trình tự của chúng và có thể hiển thị, ở một mức độ chi tiết, các lời gọi khác với các đối tượng khác.
Một sơ đồ trình tự có hai chiều: Chiều dọc cho thấy trình tự của thông báo/các lời gọi theo thứ tự thời gian mà chúng xảy ra; chiều ngang thể hiện các cá thể đối tượng mà các thông báo được gửi tới chúng.
Một sơ đồ trình tự vẽ rất đơn giản. Ngang trên đầu sơ đồ của bạn, xác định các cá thể lớp (đối tượng) bằng cách đặt mỗi cá thể lớp trong hộp (xem Hình 4). Trong hộp này, đặt tên cá thể lớp và tên lớp được ngăn cách bằng một khoảng trống/ dấu hai chấm/ khoảng trống " : " (ví dụ, myReportGenerator : ReportGenerator). Nếu một cá thể lớp gửi một thông báo đến một cá thể lớp khác, vẽ một đường với một mũi tên hở trỏ đến cá thể lớp nhận; đặt tên của thông báo/ phương thức trên đường vẽ đó. Tùy chọn, với các thông báo quan trọng, bạn có thể vẽ một đường chấm chấm có một mũi tên chỉ ngược về cá thể lớp ban đầu; ghi nhãn giá trị trả về trên đường chấm chấm đó. Riêng tôi luôn muốn có đường giá trị trả về vì tôi muốn tìm các chi tiết phụ làm cho nó dễ đọc hơn.
Đọc một sơ đồ trình tự rất đơn giản. Bắt đầu tại góc trên bên trái với cá thể lớp "trình điều khiển" bắt đầu trình tự. Sau đó đi theo mỗi thông báo dưới sơ đồ. Hãy nhớ rằng: Mặc dù sơ đồ trình tự ví dụ trong Hình 4 cho thấy một thông báo trả về cho mỗi thông báo đã gửi, đây là tùy chọn.
Hình 4: Một sơ đồ trình tự mẫu
(nhấn vào đây để phóng to)
Bằng cách đọc sơ đồ trình tự mẫu của chúng ta trong Hình 4, bạn có thể thấy cách tạo một Báo cáo bán đĩa CD (CD Sales Report). Đối tượng aServlet là một trình điều khiển ví dụ của chúng ta. aServlet gửi một thông báo đến cá thể lớp ReportGenerator có tên là gen. Thông báo này được ghi nhãn là generateCDSalesReport, nó có nghĩa là đối tượng ReportGenerator triển khai thực hiện trình xử lý thông báo này. Trên cơ sở kiểm tra chặt chẽ hơn, nhãn thông báo generateCDSalesReport có cdId trong ngoặc đơn, có nghĩa là aServlet đang chuyển cùng với thông báo một biến có tên là cdId. Khi cá thể gen nhận được một thông báo generateCDSalesReport, rồi nó thực hiện các lời gọi tiếp theo đến lớp CDSalesReport và cá thể hiện tại của một CDSalesReport gọi là aCDReport được trả về. Sau đó cá thể gen thực hiện các lời gọi đến cá thể aCDReport được trả về, chuyển qua nó các tham số trên mỗi lời gọi thông báo. Vào cuối trình tự, cá thể gen trả về một aCDReport đến người gọi aServlet của nó.
Xin lưu ý: Sơ đồ trình tự trong Hình 4 được cho là quá chi tiết với một sơ đồ trình tự điển hình. Tuy nhiên, tôi tin rằng nó đủ đơn giản để hiểu và nó cho thấy các lời gọi lồng nhau được vẽ như thế nào. Ngoài ra, với các nhà phát triển mới bắt đầu, đôi khi cần thiết phá vỡ các trình tự theo mức rõ ràng này để giúp họ hiểu những gì họ phải làm.
Sơ đồ trạng thái (statechart)
Sơ đồ statechart (đồ thị trạng thái) mô hình hóa các trạng thái khác nhau mà một lớp có thể có và lớp đó chuyển từ trạng thái này sang trạng thái khác như thế nào. Có thể lập luận rằng mỗi lớp có một trạng thái, nhưng mỗi lớp đó không nên có một sơ đồ trạng thái. Chỉ có các lớp có trạng thái "hay ho - interesting"-- đó là, các lớp có ba hay nhiều trạng thái có tiềm năng trong quá trình hoạt động của hệ thống -- nên được mô hình hóa.
Như trong hình 5, bộ ký hiệu của sơ đồ trạng thái có năm yếu tố cơ bản: điểm xuất phát đầu tiên, được vẽ bằng cách sử dụng một vòng tròn nét liền; một quá trình chuyển đổi giữa các trạng thái, được vẽ bằng cách sử dụng một đường có một mũi tên hở; một trạng thái, được vẽ bằng cách sử dụng một hình chữ nhật với các góc tròn; một điểm quyết định, được vẽ như một vòng tròn mở; và một hoặc nhiều điểm kết thúc, được vẽ bằng cách sử dụng một vòng tròn có một vòng tròn nét liền bên trong nó. Để vẽ một sơ đồ trạng thái, hãy bắt đầu với một điểm xuất phát và một đường chuyển tiếp chỉ tới trạng thái ban đầu của lớp. Vẽ các trạng thái của chúng ở bất cứ nơi nào trên sơ đồ và sau đó chỉ cần kết nối chúng bằng cách sử dụng các đường chuyển tiếp trạng thái.
Sơ đồ trạng thái hiển thị các trạng thái khác nhau mà các lớp chuyển qua trong một hệ thống chức năng
nhấn vào đây để phóng to)
Sơ đồ trạng thái ví dụ trong Hình 5 cho thấy một số thông tin tiềm năng mà chúng có thể giao tiếp. Ví dụ, bạn có thể cho rằng việc xử lý cho vay bắt đầu trong trạng thái Loan Application (Ứng dụng cho vay). Khi quá trình chấp thuận đầu tiên được thực hiện, tùy thuộc vào kết quả, bạn di chuyển đến hoặc là trạng thái Loan Pre-approved (Cho vay được chấp thuận lần đầu tiên) hoặc trạng thái Loan Rejected (Từ chối cho vay). Quyết định này, được thực hiện trong quá trình chuyển tiếp, được hiển thị bằng một điểm quyết định, tức các vòng tròn rỗng trong đường chuyển tiếp. Bằng cách xem ví dụ, một người có thể nói rằng một khoản vay có thể không xuất phát từ trạng thái Loan Pre-Approved đến trạng thái Loan (Cho vay) trong trạng thái Maintenance (Bảo trì) mà không đi qua trạng thái Loan Closing (Kết thúc cho vay). Ngoài ra, bằng cách xem sơ đồ ví dụ của chúng ta, một người có thể cho rằng tất cả các khoản vay sẽ kết thúc trong hoặc trạng thái Loan Rejected hoặc Loan trong trạng thái Maintenance.
Sơ đồ hoạt động
Sơ đồ hoạt động hiển thị luồng kiểm soát theo thủ tục giữa hai hay nhiều đối tượng lớp khi xử lý một hoạt động. Các sơ đồ hoạt động có thể được sử dụng để mô hình hóa quy trình kinh doanh cao cấp hơn ở mức đơn vị kinh doanh, hoặc để mô hình hóa các hành động bên trong mức thấp. Theo kinh nghiệm của tôi, các sơ đồ hoạt động tốt nhất được sử dụng để mô hình hóa quy trình cao cấp hơn, chẳng hạn công ty hiện đang kinh doanh như thế nào, hoặc muốn tiến hành kinh doanh như thế nào. Điều này là do các sơ đồ hoạt động có vẻ "ít kỹ thuật" hơn so với các sơ đồ trình tự và những người thích kinh doanh có xu hướng hiểu chúng nhanh hơn.
Một bộ ký hiệu hoạt động tương tự như các ký hiệu đã sử dụng trong một sơ đồ trạng thái. Giống như một sơ đồ trạng thái, sơ đồ hoạt động bắt đầu bằng một vòng tròn nét liền kết nối tới hoạt động ban đầu. Hoạt động này được mô hình hóa bằng cách vẽ một hình chữ nhật có các cạnh tròn, kèm theo tên của hoạt động. Các hoạt động có thể được kết nối với các hoạt động khác thông qua các đường chuyển tiếp, hoặc đến các điểm quyết định có kết nối tới các hoạt động khác được các điều kiện của điểm quyết định bảo vệ. Các hoạt động, chấm dứt quá trình được mô hình hóa, được kết nối với một điểm kết thúc (giống như trong một sơ đồ trạng thái). Tùy chọn, các hoạt động có thể được nhóm lại thành các làn đường, chúng được sử dụng để chỉ ra đối tượng thực sự thực hiện các hoạt động, như trong Hình 6.
Hình 6: Sơ đồ hoạt động, với hai làn đường để chỉ thị việc kiểm soát hoạt động của hai đối tượng: người quản lý ban nhạc và công cụ lập báo cáo
Trong sơ đồ hoạt động ví dụ của chúng ta, chúng ta có hai làn đường vì chúng ta có hai đối tượng kiểm soát các hoạt động riêng biệt: một người quản lý ban nhạc và một công cụ lập báo cáo. Quá trình này bắt đầu với việc người quản lý ban nhạc chọn xem báo cáo bán hàng của một trong những ban nhạc của mình. Công cụ lập báo cáo sau đó lấy ra và hiển thị tất cả các ban nhạc mà người đó quản lý và yêu cầu anh ta phải chọn một ban nhạc. Sau khi người quản lý ban nhạc chọn một ban nhạc, công cụ lập báo cáo lấy ra thông tin bán hàng và hiển thị bản báo cáo bán hàng. Sơ đồ hoạt động cho thấy rằng việc hiển thị báo cáo là bước cuối cùng trong quá trình này.
Sơ đồ thành phần
Một sơ đồ thành phần cung cấp một khung nhìn vật lý của hệ thống. Mục đích của nó là hiển thị các phụ thuộc mà phần mềm có trên các thành phần phần mềm khác (ví dụ, các thư viện phần mềm) trong hệ thống. Sơ đồ này có thể được hiển thị ở mức rất cao, chỉ với các thành phần có độ chi tiết lớn hoặc nó có thể được hiển thị tại mức gói.2
Mô hình hóa một sơ đồ thành phần tốt nhất được mô tả thông qua một ví dụ. Hình 7 cho thấy bốn thành phần: Reporting Tool (Công cụ lập báo cáo), Billboard Service (Dịch vụ Billboard), Servlet 2.2 API và JDBC API. Các đường mũi tên từ thành phần Reporting Tool đến các thành phần Billboard Service, Servlet 2.2 API, JDBC API muốn nói rằng Reporting Tool phụ thuộc vào ba thành phần đó.
Hình 7: Một sơ đồ thành phần cho thấy các sự phụ thuộc lẫn nhau của các thành phần phần mềm khác nhau mà hệ thống đó bao gồm
Sơ đồ triển khai
Sơ đồ triển khai cho thấy cách một hệ thống sẽ được triển khai cụ thể trong môi trường phần cứng. Mục đích của nó là hiển thị các thành phần khác nhau của hệ thống cụ thể sẽ chạy ở đâu và làm thế nào để chúng giao tiếp với nhau. Từ sơ đồ mô hình hóa thời gian chạy cụ thể, nhân viên sản xuất của hệ thống sẽ sử dụng sơ đồ này nhiều hơn.
Ký hiệu trong một sơ đồ triển khai bao gồm các yếu tố ký hiệu được sử dụng trong một sơ đồ thành phần, với một vài bổ sung, bao gồm khái niệm về một nút. Một nút biểu diễn hoặc một nút máy vật lý hay một nút máy ảo (ví dụ như, một nút máy tính lớn). Để mô hình hóa một nút, chỉ cần vẽ một hình khối ba chiều với tên của nút đó ở phía trên của khối này. Sử dụng quy ước đặt tên được sử dụng trong sơ đồ trình tự: [tên cá thể]: [kiểu cá thể] (ví dụ, "w3reporting.myco.com : Application Server").
Hình 8: Sơ đồ triển khai. Do thành phần Reporting Tool được vẽ bên trong của IBM WebSphere, mà IBM WebSphere lần lượt được vẽ bên trong của nút w3.reporting.myco.com, nên chúng ta biết rằng những người dùng sẽ truy cập Reporting Tool thông qua một trình duyệt đang chạy trên máy cục bộ của họ và kết nối thông qua HTTP trên mạng nội bộ của công ty họ.
(nhấn vào đây để phóng to)
Sơ đồ triển khai tại Hình 8 cho thấy rằng những người dùng truy cập vào Reporting Tool bằng cách sử dụng một trình duyệt đang chạy trên máy cục bộ của họ và kết nối qua HTTP trên mạng nội bộ của công ty họ tới Reporting Tool. Công cụ này cụ thể chạy trên các máy chủ ứng dụng có tên w3reporting.myco.com. Sơ đồ đã thể hiện thành phần Reporting Tool được vẽ bên trong IBM WebSphere, IBM WebSphere lần lượt được vẽ bên trong của nút w3.reporting.myco.com. Reporting Tool kết nối tới cơ sở dữ liệu báo cáo của mình bằng cách sử dụng ngôn ngữ Java với giao diện JDBC của IBM DB2, sau đó giao diện này giao tiếp với cơ sở dữ liệu DB2 thực tế đang chạy trên máy chủ đặt tên là db1.myco.com bằng cách sử dụng giao tiếp bản địa DB2. Thêm vào việc trao đổi với cơ sở dữ liệu báo cáo, thành phần Report Tool truyền dẫn SOAP trên HTTPS tới Billboard Service.
Kết luận
Mặc dù bài viết này chỉ cung cấp một sự giới thiệu ngắn gọn về Unified Modeling Language (Ngôn ngữ mô hình thống nhất), tôi khuyến khích bạn bắt đầu áp dụng các thông tin mà bạn đã học được ở đây cho các dự án riêng của mình và để nghiên cứu kỹ hơn về UML. Có rất nhiều công cụ phần mềm giúp bạn tích hợp các sơ đồ UML vào trong quá trình phát triển phần mềm của bạn, nhưng ngay cả khi không có công cụ tự động hóa, bạn có thể sử dụng các dụng cụ để viết trên bảng hoặc giấy và bút chì để vẽ các sơ đồ UML của bạn và vẫn đạt được các lợi ích.
Ghi chú
1 Để biết thêm thông tin về các nguyên tắc thừa kế và hướng đối tượng khác, xem http://java.sun.com/docs/books/tutorial/java/concepts/inheritance.html
2 Mức gói thành phần cụm từ là một cách trung gian về ngôn ngữ lập trình đề cập đến các mức thùng chứa lớp như các vùng tên của .NET (ví dụ, System.Web.UI) hoặc các gói của Java (ví dụ, java.util).
Tài nguyên
http://www.uml.org/ -- Trang Web UML chính thức.
http://www.rational.com/uml/resources/documentation/index.jsp --Cung cấp một số phiên bản khác nhau của đặc tả UML thực sự.
http://www-140.ibm.com/developerworks/rational/products/rose --Thông tin về IBM Rational Rose®, một công cụ mô hình hóa UML thương mại.
http://www-140.ibm.com/developerworks/rational/products/xde--Thông tin về IBM Rational XDE®, một công cụ mô hình hóa UML thương mại được tích hợp với nền tảng phát triển Eclipse của IBM.
http://argouml.tigris.org/ --Thông tin về Argo UML, một công cụ mô hình hóa UML mã nguồn mở được xây dựng trong Java.
http://uml.sourceforge.net/index.php -- Thông tin về Umbrello UML Modeller, một công cụ mô hình hóa UML mã nguồn mở UML cho KDE.
Chính xác vào năm 1997-- Object Management Group (OMG-Nhóm quản lý đối tượng) đã phát hành bản Unified Modeling Language (UML). Một trong những mục đích của UML là cung cấp cho cộng đồng phát triển một ngôn ngữ thiết kế phổ biến và ổn định, ngôn ngữ này có thể được dùng để phát triển và xây dựng các ứng dụng máy tính. UML đưa ra một ký hiệu mô hình hóa chuẩn thống nhất mà các chuyên gia công nghệ thông tin (CNTT) muốn có trong nhiều năm. Khi sử dụng UML, các chuyên gia CNTT bây giờ đã có thể đọc và phổ biến cấu trúc hệ thống và các kế hoạch thiết kế -- giống như các công nhân xây dựng đang làm trong nhiều năm qua với các kế hoạch chi tiết về các tòa nhà.
Bây giờ là thế kỷ hai mốt -- chính xác là năm 2003-- và UML đã nâng cao sức mạnh trong chuyên ngành của chúng ta. Trên 75% các bản tóm tắt mà tôi thấy, có một điểm nhấn yêu cầu kiến thức về UML. Tuy nhiên, sau khi nói chuyện với đa số các ứng viên cho công việc này, một điều trở nên rõ ràng là họ không thực sự biết UML. Thông thường, hoặc là họ đang sử dụng nó như là một từ thông dụng hoặc họ đã có một phần tiếp xúc với UML. Sự thiếu hiểu biết này đã thôi thúc tôi viết bài giới thiệu vắn tắt này về UML, tập trung vào các sơ đồ cơ bản được sử dụng trong việc mô hình hóa trực quan. Khi bạn đọc xong bạn sẽ không có đủ kiến thức để đặt UML vào tổng quan của bạn, nhưng sẽ có một điểm khởi đầu để nghiên cứu sâu hơn vào ngôn ngữ này.
Một chút nền tảng
Như tôi đã đề cập, UML có nghĩa là một ngôn ngữ thống nhất cho phép các chuyên gia CNTT mô hình hóa các ứng dụng máy tính. Các tác giả chính là Jim Rumbaugh, Ivar Jacobson, và Grady Booch, những người ban đầu đã có các phương pháp cạnh tranh riêng của mình (OMT, OOSE và Booch). Cuối cùng, họ đã tham gia lực lượng và dẫn đến một chuẩn mở. (Âm thanh quen thuộc quá? Một hiện tượng tương tự đã sinh ra J2EE, SOAP và Linux). Một lý do mà UML đã trở thành một ngôn ngữ mô hình hóa chuẩn là tính độc lập của ngôn ngữ lập trình. (Các công cụ mô hình hóa UML của IBM Rational được sử dụng rộng rãi trong các cửa hàng J2EE, cũng như trong các cửa hàng .NET). Ngoài ra, bộ kí hiệu UML là một ngôn ngữ chứ không phải là một phương pháp luận. Điều này là quan trọng, bởi vì một ngôn ngữ, trái với một phương pháp luận, có thể dễ dàng phù hợp với phương diện đạo đức kinh doanh của công ty bất kỳ mà không cần thay đổi.
Do UML không phải là một phương pháp luận, nó không yêu cầu bất kỳ sản phẩm làm ra chính thức nào (tức là, "các tạo phẩm" trong từ ngữ đặc biệt của IBM Rational Unified Process®). Tuy nhiên, nó cung cấp một vài kiểu sơ đồ, khi được sử dụng trong một phương pháp cụ thể, các sơ đồ đó làm tăng sự dễ hiểu cho một ứng dụng đang được phát triển. Có nhiều thứ với UML hơn các sơ đồ này, nhưng với mục đích của tôi ở đây, các sơ đồ cung cấp sự mở đầu tốt cho ngôn ngữ và các nguyên lý phía sau việc sử dụng của nó. Bằng cách đặt các sơ đồ UML chuẩn trong các sản phẩm tạo ra của phương pháp luận của bạn, với những người thành thạo, UML bạn làm cho nó trở nên dễ nhập vào dự án của bạn hơn và nhanh chóng biến thành sản phẩm. Các sơ đồ UML chuẩn, có ích nhất là: sơ đồ ca sử dụng, sơ đồ lớp, sơ đồ trình tự, sơ đồ trạng thái (statechart), sơ đồ hoạt động, sơ đồ thành phần và sơ đồ triển khai.
Để đi sâu vào nhiều chi tiết về từng kiểu sơ đồ sẽ vượt ra ngoài phạm vi của bài viết giới thiệu này. Thay vào đó, tôi sẽ cung cấp cho bạn với đủ thông tin cho một sự hiểu biết chung về từng sơ đồ và sau đó cung cấp nhiều chi tiết hơn trong các bài viết sau.
Một ca sử dụng minh họa một đơn vị chức năng được hệ thống cung cấp. Mục đích chính của việc sử dụng sơ đồ ca sử dụng là giúp các nhóm phát triển hình dung ra các yêu cầu chức năng của một hệ thống, bao gồm mối quan hệ của "các vai" (con người, người sẽ tương tác với hệ thống) với các quy trình cần thiết, cũng như các mối quan hệ trong số các ca sử dụng khác nhau. Các sơ đồ ca sử dụng nói chung cho thấy các nhóm các ca sử dụng -- hoặc tất cả các ca sử dụng cho hệ thống hoàn chỉnh, hoặc sự đột phá của một nhóm các ca sử dụng cụ thể với chức năng liên quan (ví dụ, tất cả các ca sử dụng có liên quan đến quản trị an ninh). Để cho thấy ca sử dụng trên một sơ đồ ca sử dụng, bạn vẽ hình bầu dục ở giữa sơ đồ và đặt tên ca sử dụng ở trung tâm, hoặc bên dưới, hình bầu dục. Để vẽ một vai (chỉ thị một người sử dụng hệ thống) trên một sơ đồ ca sử dụng, bạn vẽ một người dính vào bên trái hay bên phải sơ đồ của bạn (và chỉ trong trường hợp bạn đang muốn biết, một số người vẽ người đi kèm đẹp hơn những người khác). Sử dụng các đường đơn giản để miêu tả các mối quan hệ giữa vai và các ca sử dụng, như trong Hình 1.
Hình 1: Sơ đồ ca sử dụng mẫu
Sơ đồ ca sử dụng thường được dùng để giao tiếp các hàm cấp cao của hệ thống và quy mô của hệ thống. Bằng cách xem xét sơ đồ ca sử dụng mẫu của chúng ta trong Hình 1, bạn có thể dễ dàng chỉ ra các hàm mà hệ thống ví dụ của chúng ta cung cấp. Hệ thống này cho phép những người quản lý ban nhạc xem qua một báo cáo thống kê bán hàng và báo cáo Billboard 200 (bảng xếp hạng 200 anbum âm nhạc bản chạy nhất) với các đĩa CD của ban nhạc. Nó cũng cho phép xem một báo cáo thống kê bán hàng và báo cáo Billboard 200 cho riêng một đĩa CD. Sơ đồ này cũng cho chúng ta biết hệ thống của chúng ta cung cấp các báo cáo Billboard từ một hệ thống bên ngoài được gọi là Dịch vụ báo cáo Billboard (Billboard Reporting Service).
Ngoài ra, sự vắng mặt của các ca sử dụng trong sơ đồ này cho thấy những gì hệ thống không làm được. Ví dụ, nó không cung cấp cách cho phép người quản lý ban nhạc nghe các bài hát từ các album khác nhau trên bảng xếp hạng Billboard 200 -- tức là chúng ta thấy không có tham chiếu đến một ca sử dụng được gọi là Nghe các bài hát từ Billboard 200. Sự thiếu vắng này không phải là một vấn đề nhỏ. Với các sự mô tả ca sử dụng rõ ràng và đơn giản được cung cấp trên sơ đồ như vậy, một nhà tài trợ cho dự án có thể dễ dàng nhìn thấy chức năng cần thiết nào có hay không có trong hệ thống.
Sơ đồ lớp cho thấy các thực thể khác nhau (người, các chủ đề và dữ liệu) liên quan với nhau như thế nào; nói cách khác, nó cho thấy các cấu trúc tĩnh của hệ thống. Một sơ đồ lớp có thể được sử dụng để hiển thị các lớp hợp lý, chúng thường là các chủ đề khác nhau mà các doanh nhân trong một tổ chức hay bàn về chúng -- các ban nhạc rock, các đĩa CD, phát thanh hoặc các khoản vay, thế chấp nhà, các khoản vay mua xe và lãi suất. Các sơ đồ lớp cũng có thể được sử dụng để hiển thị các lớp thực hiện, chúng là những lớp mà các lập trình viên thường hay xử lý. Một sơ đồ lớp thực hiện có thể sẽ cho thấy một số các lớp giống như sơ đồ các lớp hợp lý. Lớp thực hiện sẽ không được vẽ với các thuộc tính như nhau, tuy nhiên, vì nó hầu như sẽ có khả năng có các tham khảo đến những thứ như các Vectơ và HashMaps.
Một lớp được mô tả trong sơ đồ lớp như là một hình chữ nhật với ba phần nằm ngang, như trong Hình 2. Phần phía trên chỉ ra tên của lớp; phần giữa có chứa các thuộc tính của lớp; và phần dưới chứa hoạt động của lớp (hay "các phương thức").
Hình 2: Đối tượng lớp mẫu trong một sơ đồ lớp
Theo kinh nghiệm của tôi, hầu như tất cả các nhà phát triển đều biết sơ đồ này là gì, nhưng tôi thấy rằng hầu hết các lập trình viên vẽ các đường quan hệ không đúng. Đối với một sơ đồ lớp như trong Hình 3, bạn nên vẽ mối quan hệ kế thừa 1 bằng cách sử dụng một đường có một mũi tên ở đầu chỉ tới siêu lớp và mũi tên nên là một tam giác hoàn chỉnh. Một mối quan hệ liên kết nên là một đường nét liền nếu cả hai lớp nhận ra được nhau và là một đường có một mũi tên hở nếu liên kết đó chỉ được một trong các lớp này biết đến.
Một sơ đồ lớp hoàn chỉnh, bao gồm đối tượng lớp được hiển thị trong Hình 2
(nhấn vào đây để phóng to)
Trong Hình 3, chúng ta thấy cả hai mối quan hệ kế thừa và hai mối quan hệ liên kết. Lớp CDSalesReport kế thừa từ các lớp Report (Báo cáo). Một lớp CDSalesReport được liên kết với một đĩa CD, nhưng lớp CD không biết gì về lớp CDSalesReport. Cả hai đĩa CD và các lớp Band (Ban nhạc) đều biết về nhau và cả hai lớp có thể được kết hợp với một hoặc nhiều lớp với nhau.
Một sơ đồ lớp có thể tích hợp thêm nhiều khái niệm, mà chúng ta sẽ trình bày sau trong loạt bài này.
Sơ đồ trình tự (sequence) hiển thị một dòng chi tiết cho một ca sử dụng cụ thể hoặc thậm chí chỉ là một phần của một ca sử dụng cụ thể. Hầu như chúng tự giải thích; chúng hiển thị các lời gọi giữa các đối tượng khác nhau theo trình tự của chúng và có thể hiển thị, ở một mức độ chi tiết, các lời gọi khác với các đối tượng khác.
Một sơ đồ trình tự có hai chiều: Chiều dọc cho thấy trình tự của thông báo/các lời gọi theo thứ tự thời gian mà chúng xảy ra; chiều ngang thể hiện các cá thể đối tượng mà các thông báo được gửi tới chúng.
Một sơ đồ trình tự vẽ rất đơn giản. Ngang trên đầu sơ đồ của bạn, xác định các cá thể lớp (đối tượng) bằng cách đặt mỗi cá thể lớp trong hộp (xem Hình 4). Trong hộp này, đặt tên cá thể lớp và tên lớp được ngăn cách bằng một khoảng trống/ dấu hai chấm/ khoảng trống " : " (ví dụ, myReportGenerator : ReportGenerator). Nếu một cá thể lớp gửi một thông báo đến một cá thể lớp khác, vẽ một đường với một mũi tên hở trỏ đến cá thể lớp nhận; đặt tên của thông báo/ phương thức trên đường vẽ đó. Tùy chọn, với các thông báo quan trọng, bạn có thể vẽ một đường chấm chấm có một mũi tên chỉ ngược về cá thể lớp ban đầu; ghi nhãn giá trị trả về trên đường chấm chấm đó. Riêng tôi luôn muốn có đường giá trị trả về vì tôi muốn tìm các chi tiết phụ làm cho nó dễ đọc hơn.
Đọc một sơ đồ trình tự rất đơn giản. Bắt đầu tại góc trên bên trái với cá thể lớp "trình điều khiển" bắt đầu trình tự. Sau đó đi theo mỗi thông báo dưới sơ đồ. Hãy nhớ rằng: Mặc dù sơ đồ trình tự ví dụ trong Hình 4 cho thấy một thông báo trả về cho mỗi thông báo đã gửi, đây là tùy chọn.
Hình 4: Một sơ đồ trình tự mẫu
(nhấn vào đây để phóng to)
Bằng cách đọc sơ đồ trình tự mẫu của chúng ta trong Hình 4, bạn có thể thấy cách tạo một Báo cáo bán đĩa CD (CD Sales Report). Đối tượng aServlet là một trình điều khiển ví dụ của chúng ta. aServlet gửi một thông báo đến cá thể lớp ReportGenerator có tên là gen. Thông báo này được ghi nhãn là generateCDSalesReport, nó có nghĩa là đối tượng ReportGenerator triển khai thực hiện trình xử lý thông báo này. Trên cơ sở kiểm tra chặt chẽ hơn, nhãn thông báo generateCDSalesReport có cdId trong ngoặc đơn, có nghĩa là aServlet đang chuyển cùng với thông báo một biến có tên là cdId. Khi cá thể gen nhận được một thông báo generateCDSalesReport, rồi nó thực hiện các lời gọi tiếp theo đến lớp CDSalesReport và cá thể hiện tại của một CDSalesReport gọi là aCDReport được trả về. Sau đó cá thể gen thực hiện các lời gọi đến cá thể aCDReport được trả về, chuyển qua nó các tham số trên mỗi lời gọi thông báo. Vào cuối trình tự, cá thể gen trả về một aCDReport đến người gọi aServlet của nó.
Xin lưu ý: Sơ đồ trình tự trong Hình 4 được cho là quá chi tiết với một sơ đồ trình tự điển hình. Tuy nhiên, tôi tin rằng nó đủ đơn giản để hiểu và nó cho thấy các lời gọi lồng nhau được vẽ như thế nào. Ngoài ra, với các nhà phát triển mới bắt đầu, đôi khi cần thiết phá vỡ các trình tự theo mức rõ ràng này để giúp họ hiểu những gì họ phải làm.
Sơ đồ statechart (đồ thị trạng thái) mô hình hóa các trạng thái khác nhau mà một lớp có thể có và lớp đó chuyển từ trạng thái này sang trạng thái khác như thế nào. Có thể lập luận rằng mỗi lớp có một trạng thái, nhưng mỗi lớp đó không nên có một sơ đồ trạng thái. Chỉ có các lớp có trạng thái "hay ho - interesting"-- đó là, các lớp có ba hay nhiều trạng thái có tiềm năng trong quá trình hoạt động của hệ thống -- nên được mô hình hóa.
Như trong hình 5, bộ ký hiệu của sơ đồ trạng thái có năm yếu tố cơ bản: điểm xuất phát đầu tiên, được vẽ bằng cách sử dụng một vòng tròn nét liền; một quá trình chuyển đổi giữa các trạng thái, được vẽ bằng cách sử dụng một đường có một mũi tên hở; một trạng thái, được vẽ bằng cách sử dụng một hình chữ nhật với các góc tròn; một điểm quyết định, được vẽ như một vòng tròn mở; và một hoặc nhiều điểm kết thúc, được vẽ bằng cách sử dụng một vòng tròn có một vòng tròn nét liền bên trong nó. Để vẽ một sơ đồ trạng thái, hãy bắt đầu với một điểm xuất phát và một đường chuyển tiếp chỉ tới trạng thái ban đầu của lớp. Vẽ các trạng thái của chúng ở bất cứ nơi nào trên sơ đồ và sau đó chỉ cần kết nối chúng bằng cách sử dụng các đường chuyển tiếp trạng thái.
Sơ đồ trạng thái hiển thị các trạng thái khác nhau mà các lớp chuyển qua trong một hệ thống chức năng
nhấn vào đây để phóng to)
Sơ đồ trạng thái ví dụ trong Hình 5 cho thấy một số thông tin tiềm năng mà chúng có thể giao tiếp. Ví dụ, bạn có thể cho rằng việc xử lý cho vay bắt đầu trong trạng thái Loan Application (Ứng dụng cho vay). Khi quá trình chấp thuận đầu tiên được thực hiện, tùy thuộc vào kết quả, bạn di chuyển đến hoặc là trạng thái Loan Pre-approved (Cho vay được chấp thuận lần đầu tiên) hoặc trạng thái Loan Rejected (Từ chối cho vay). Quyết định này, được thực hiện trong quá trình chuyển tiếp, được hiển thị bằng một điểm quyết định, tức các vòng tròn rỗng trong đường chuyển tiếp. Bằng cách xem ví dụ, một người có thể nói rằng một khoản vay có thể không xuất phát từ trạng thái Loan Pre-Approved đến trạng thái Loan (Cho vay) trong trạng thái Maintenance (Bảo trì) mà không đi qua trạng thái Loan Closing (Kết thúc cho vay). Ngoài ra, bằng cách xem sơ đồ ví dụ của chúng ta, một người có thể cho rằng tất cả các khoản vay sẽ kết thúc trong hoặc trạng thái Loan Rejected hoặc Loan trong trạng thái Maintenance.
Sơ đồ hoạt động hiển thị luồng kiểm soát theo thủ tục giữa hai hay nhiều đối tượng lớp khi xử lý một hoạt động. Các sơ đồ hoạt động có thể được sử dụng để mô hình hóa quy trình kinh doanh cao cấp hơn ở mức đơn vị kinh doanh, hoặc để mô hình hóa các hành động bên trong mức thấp. Theo kinh nghiệm của tôi, các sơ đồ hoạt động tốt nhất được sử dụng để mô hình hóa quy trình cao cấp hơn, chẳng hạn công ty hiện đang kinh doanh như thế nào, hoặc muốn tiến hành kinh doanh như thế nào. Điều này là do các sơ đồ hoạt động có vẻ "ít kỹ thuật" hơn so với các sơ đồ trình tự và những người thích kinh doanh có xu hướng hiểu chúng nhanh hơn.
Một bộ ký hiệu hoạt động tương tự như các ký hiệu đã sử dụng trong một sơ đồ trạng thái. Giống như một sơ đồ trạng thái, sơ đồ hoạt động bắt đầu bằng một vòng tròn nét liền kết nối tới hoạt động ban đầu. Hoạt động này được mô hình hóa bằng cách vẽ một hình chữ nhật có các cạnh tròn, kèm theo tên của hoạt động. Các hoạt động có thể được kết nối với các hoạt động khác thông qua các đường chuyển tiếp, hoặc đến các điểm quyết định có kết nối tới các hoạt động khác được các điều kiện của điểm quyết định bảo vệ. Các hoạt động, chấm dứt quá trình được mô hình hóa, được kết nối với một điểm kết thúc (giống như trong một sơ đồ trạng thái). Tùy chọn, các hoạt động có thể được nhóm lại thành các làn đường, chúng được sử dụng để chỉ ra đối tượng thực sự thực hiện các hoạt động, như trong Hình 6.
Hình 6: Sơ đồ hoạt động, với hai làn đường để chỉ thị việc kiểm soát hoạt động của hai đối tượng: người quản lý ban nhạc và công cụ lập báo cáo
Trong sơ đồ hoạt động ví dụ của chúng ta, chúng ta có hai làn đường vì chúng ta có hai đối tượng kiểm soát các hoạt động riêng biệt: một người quản lý ban nhạc và một công cụ lập báo cáo. Quá trình này bắt đầu với việc người quản lý ban nhạc chọn xem báo cáo bán hàng của một trong những ban nhạc của mình. Công cụ lập báo cáo sau đó lấy ra và hiển thị tất cả các ban nhạc mà người đó quản lý và yêu cầu anh ta phải chọn một ban nhạc. Sau khi người quản lý ban nhạc chọn một ban nhạc, công cụ lập báo cáo lấy ra thông tin bán hàng và hiển thị bản báo cáo bán hàng. Sơ đồ hoạt động cho thấy rằng việc hiển thị báo cáo là bước cuối cùng trong quá trình này.
Sơ đồ thành phần
Một sơ đồ thành phần cung cấp một khung nhìn vật lý của hệ thống. Mục đích của nó là hiển thị các phụ thuộc mà phần mềm có trên các thành phần phần mềm khác (ví dụ, các thư viện phần mềm) trong hệ thống. Sơ đồ này có thể được hiển thị ở mức rất cao, chỉ với các thành phần có độ chi tiết lớn hoặc nó có thể được hiển thị tại mức gói.2
Mô hình hóa một sơ đồ thành phần tốt nhất được mô tả thông qua một ví dụ. Hình 7 cho thấy bốn thành phần: Reporting Tool (Công cụ lập báo cáo), Billboard Service (Dịch vụ Billboard), Servlet 2.2 API và JDBC API. Các đường mũi tên từ thành phần Reporting Tool đến các thành phần Billboard Service, Servlet 2.2 API, JDBC API muốn nói rằng Reporting Tool phụ thuộc vào ba thành phần đó.
Hình 7: Một sơ đồ thành phần cho thấy các sự phụ thuộc lẫn nhau của các thành phần phần mềm khác nhau mà hệ thống đó bao gồm
Sơ đồ triển khai cho thấy cách một hệ thống sẽ được triển khai cụ thể trong môi trường phần cứng. Mục đích của nó là hiển thị các thành phần khác nhau của hệ thống cụ thể sẽ chạy ở đâu và làm thế nào để chúng giao tiếp với nhau. Từ sơ đồ mô hình hóa thời gian chạy cụ thể, nhân viên sản xuất của hệ thống sẽ sử dụng sơ đồ này nhiều hơn.
Ký hiệu trong một sơ đồ triển khai bao gồm các yếu tố ký hiệu được sử dụng trong một sơ đồ thành phần, với một vài bổ sung, bao gồm khái niệm về một nút. Một nút biểu diễn hoặc một nút máy vật lý hay một nút máy ảo (ví dụ như, một nút máy tính lớn). Để mô hình hóa một nút, chỉ cần vẽ một hình khối ba chiều với tên của nút đó ở phía trên của khối này. Sử dụng quy ước đặt tên được sử dụng trong sơ đồ trình tự: [tên cá thể]: [kiểu cá thể] (ví dụ, "w3reporting.myco.com : Application Server").
Hình 8: Sơ đồ triển khai. Do thành phần Reporting Tool được vẽ bên trong của IBM WebSphere, mà IBM WebSphere lần lượt được vẽ bên trong của nút w3.reporting.myco.com, nên chúng ta biết rằng những người dùng sẽ truy cập Reporting Tool thông qua một trình duyệt đang chạy trên máy cục bộ của họ và kết nối thông qua HTTP trên mạng nội bộ của công ty họ.
(nhấn vào đây để phóng to)
Sơ đồ triển khai tại Hình 8 cho thấy rằng những người dùng truy cập vào Reporting Tool bằng cách sử dụng một trình duyệt đang chạy trên máy cục bộ của họ và kết nối qua HTTP trên mạng nội bộ của công ty họ tới Reporting Tool. Công cụ này cụ thể chạy trên các máy chủ ứng dụng có tên w3reporting.myco.com. Sơ đồ đã thể hiện thành phần Reporting Tool được vẽ bên trong IBM WebSphere, IBM WebSphere lần lượt được vẽ bên trong của nút w3.reporting.myco.com. Reporting Tool kết nối tới cơ sở dữ liệu báo cáo của mình bằng cách sử dụng ngôn ngữ Java với giao diện JDBC của IBM DB2, sau đó giao diện này giao tiếp với cơ sở dữ liệu DB2 thực tế đang chạy trên máy chủ đặt tên là db1.myco.com bằng cách sử dụng giao tiếp bản địa DB2. Thêm vào việc trao đổi với cơ sở dữ liệu báo cáo, thành phần Report Tool truyền dẫn SOAP trên HTTPS tới Billboard Service.
Mặc dù bài viết này chỉ cung cấp một sự giới thiệu ngắn gọn về Unified Modeling Language (Ngôn ngữ mô hình thống nhất), tôi khuyến khích bạn bắt đầu áp dụng các thông tin mà bạn đã học được ở đây cho các dự án riêng của mình và để nghiên cứu kỹ hơn về UML. Có rất nhiều công cụ phần mềm giúp bạn tích hợp các sơ đồ UML vào trong quá trình phát triển phần mềm của bạn, nhưng ngay cả khi không có công cụ tự động hóa, bạn có thể sử dụng các dụng cụ để viết trên bảng hoặc giấy và bút chì để vẽ các sơ đồ UML của bạn và vẫn đạt được các lợi ích.
1 Để biết thêm thông tin về các nguyên tắc thừa kế và hướng đối tượng khác, xem http://java.sun.com/docs/books/tutorial/java/concepts/inheritance.html
2 Mức gói thành phần cụm từ là một cách trung gian về ngôn ngữ lập trình đề cập đến các mức thùng chứa lớp như các vùng tên của .NET (ví dụ, System.Web.UI) hoặc các gói của Java (ví dụ, java.util).
http://www.uml.org/ -- Trang Web UML chính thức.
http://www.rational.com/uml/resources/documentation/index.jsp --Cung cấp một số phiên bản khác nhau của đặc tả UML thực sự.
http://www-140.ibm.com/developerworks/rational/products/rose --Thông tin về IBM Rational Rose®, một công cụ mô hình hóa UML thương mại.
http://www-140.ibm.com/developerworks/rational/products/xde--Thông tin về IBM Rational XDE®, một công cụ mô hình hóa UML thương mại được tích hợp với nền tảng phát triển Eclipse của IBM.
http://argouml.tigris.org/ --Thông tin về Argo UML, một công cụ mô hình hóa UML mã nguồn mở được xây dựng trong Java.
http://uml.sourceforge.net/index.php -- Thông tin về Umbrello UML Modeller, một công cụ mô hình hóa UML mã nguồn mở UML cho KDE.
Thứ Sáu, 16 tháng 12, 2011
Khoảnh khắc cho những suy nghĩ
Labels:
Truyện Cảm động
Cho những lần gặp đầu tiên... Có những người dù chỉ là thoáng qua, ta cũng biết được rằng đó là tri kỷ trong cuộc đời ta, sẽ là người ta muốn mang theo trong hành trình xuyên thời gian. Nhưng rồi ta lại không lại gần họ, đơn giản chỉ vì ta nghĩ họ không được sắp đặt để được ở bên cạnh ta.
Có những người dù chỉ là xa lạ, nhưng sao nỗi niềm của họ làm ta nhói đau, ta muốn chạy đến bên cạnh họ và làm họ bớt cô đơn, bớt lạnh lùng. Ta mong được xoa dịu tâm hồn ấy! Nhưng rồi khoảng cách của hai tâm hồn không cùng thế hệ làm ta dừng bước. Họ cần một ai khác, không phải ta!
Có những người ở bên cạnh mà sao cứ như tận chân trời, chẳng bao giờ cảm nhận được. Nỗi nhớ chỉ được thấu cảm khi ai đó rời xa ta. Rồi bỗng nhận ra ta nhớ người đó hơn cả những điều ta có thể hiểu, bỗng nhận ra ta cần một cái ôm thật chặt...nhưng xa ngoái, rồi cũng chỉ còn là niềm nhớ, mọi thứ đã trôi xa!
Có những người dành tình cảm chân thành nhất, sâu sắc nhất cho ta. Ta trân trọng lắm tình cảm ấy, càng trân trọng những con người ấy. Nhưng có đôi lúc ta cố tình làm họ tổn thương, để họ rời xa ta, để họ tìm cho mình một nơi khác mà gửi gắm tình cảm của họ. Chỉ vì ta nghĩ rằng ta không xứng đáng.
Có những người ta yêu tha thiết, ta biết ta cần người, người cần ta hơn ai hết. Cớ sao ta lại chọn một kết thúc? Một kết thúc không có lí do ngay cả khi mọi thứ chưa bắt đầu. Ta và ai đó cần một cơ hội, mà sao khó quá! Người chưa rời khỏi ta, ta cũng chưa rời khỏi người. Vẫn hỏi han nhau hằng ngày, vẫn thỉnh thoảng vài câu bông đùa. Vậy mà đã xa lắm! Nghe lòng xót xa, nghe thổn thức cả trong giấc mơ, dù ta biết ta sẽ không níu kéo, sẽ không cần một cơ hội. Ta vẫn cần bước đi.
Có những người cần cho cuộc sống của ta, như cơm ăn, nước uống hằng ngày. Biết nhớ, biết cần, biết nên giữ lấy. Bởi tìm một người thật sự bên cạnh mình khó lắm! Ấy thế mà vô tâm, mà hững hờ vì sao?
Tất cả bắt đầu từ suy nghĩ, khó hiểu trong suy nghĩ, và giờ lại dằn vặt trong suy nghĩ? Những cuộc gặp đều có cơ duyên của nó. Những con người có duyên với nhau thì mới tìm thấy nhau trong dòng người bất tận. Nhưng đâu là người nên giữ lại bên cạnh, đâu là người nên để họ bay đi một chân trời khác, lại suy nghĩ nhiều!
Ai đó có biết rằng dù ta yêu tha thiết họ, ta vẫn để họ xa ta mãi mãi không? Ai đó có đủ kiên nhẫn ở lại cuộc đời ta và giúp ta vượt qua tất cả hay không?
Cho giây phút này thôi nhé, để ta ngẫm một chút, rồi ta lại bước tiếp như một người vừa dặn ta. Bạn cũng dành cho vài phút thôi nhé, đừng để cuốn vào suy nghĩ của một người như ta!
Có những người dù chỉ là xa lạ, nhưng sao nỗi niềm của họ làm ta nhói đau, ta muốn chạy đến bên cạnh họ và làm họ bớt cô đơn, bớt lạnh lùng. Ta mong được xoa dịu tâm hồn ấy! Nhưng rồi khoảng cách của hai tâm hồn không cùng thế hệ làm ta dừng bước. Họ cần một ai khác, không phải ta!
Có những người ở bên cạnh mà sao cứ như tận chân trời, chẳng bao giờ cảm nhận được. Nỗi nhớ chỉ được thấu cảm khi ai đó rời xa ta. Rồi bỗng nhận ra ta nhớ người đó hơn cả những điều ta có thể hiểu, bỗng nhận ra ta cần một cái ôm thật chặt...nhưng xa ngoái, rồi cũng chỉ còn là niềm nhớ, mọi thứ đã trôi xa!
Có những người dành tình cảm chân thành nhất, sâu sắc nhất cho ta. Ta trân trọng lắm tình cảm ấy, càng trân trọng những con người ấy. Nhưng có đôi lúc ta cố tình làm họ tổn thương, để họ rời xa ta, để họ tìm cho mình một nơi khác mà gửi gắm tình cảm của họ. Chỉ vì ta nghĩ rằng ta không xứng đáng.
Có những người ta yêu tha thiết, ta biết ta cần người, người cần ta hơn ai hết. Cớ sao ta lại chọn một kết thúc? Một kết thúc không có lí do ngay cả khi mọi thứ chưa bắt đầu. Ta và ai đó cần một cơ hội, mà sao khó quá! Người chưa rời khỏi ta, ta cũng chưa rời khỏi người. Vẫn hỏi han nhau hằng ngày, vẫn thỉnh thoảng vài câu bông đùa. Vậy mà đã xa lắm! Nghe lòng xót xa, nghe thổn thức cả trong giấc mơ, dù ta biết ta sẽ không níu kéo, sẽ không cần một cơ hội. Ta vẫn cần bước đi.
Có những người cần cho cuộc sống của ta, như cơm ăn, nước uống hằng ngày. Biết nhớ, biết cần, biết nên giữ lấy. Bởi tìm một người thật sự bên cạnh mình khó lắm! Ấy thế mà vô tâm, mà hững hờ vì sao?
Tất cả bắt đầu từ suy nghĩ, khó hiểu trong suy nghĩ, và giờ lại dằn vặt trong suy nghĩ? Những cuộc gặp đều có cơ duyên của nó. Những con người có duyên với nhau thì mới tìm thấy nhau trong dòng người bất tận. Nhưng đâu là người nên giữ lại bên cạnh, đâu là người nên để họ bay đi một chân trời khác, lại suy nghĩ nhiều!
Ai đó có biết rằng dù ta yêu tha thiết họ, ta vẫn để họ xa ta mãi mãi không? Ai đó có đủ kiên nhẫn ở lại cuộc đời ta và giúp ta vượt qua tất cả hay không?
Cho giây phút này thôi nhé, để ta ngẫm một chút, rồi ta lại bước tiếp như một người vừa dặn ta. Bạn cũng dành cho vài phút thôi nhé, đừng để cuốn vào suy nghĩ của một người như ta!
Thứ Bảy, 3 tháng 12, 2011
Con mèo khốn nạn =))
Labels:
Truyện cười
Con mèo dí súng vào đầu con chuột rồi hỏi
- 1+1= ?
Con chuột run rẩy trả lời :
... - Dạ 1+1=2 ạ !!!!!
"Pằng"
Con mèo thổi khói :
- Mày đã biết quá nhiều
Đến con chuột thứ 2 vẫn câu hỏi đó :
Con chuột thứ 2 suy nghĩ rồi run rẩy trả lời:
- Dạ em không biết ạ !!!!!
"Pằng"
Con mèo thổi khói:
- Loại dốt nát như mày không nên sống
.
Đến con chuột thứ 3 , mèo vẫn hỏi lại câu hỏi đó :
Con chuột thứ 3 suy nghĩ rồi trả lời :
- Biết thì sao mà không biết thì sao ?!!
"Pằng"
Con mèo thổi khói:
- Nguy hiểm như mày thì càng phải chết .
Tiếp tục con chuột thứ 4 , lại là câu hỏi đó :
Con chuột thứ 4 suy nghỉ rồi trả lời
- Trả lời anh giết , không trả lời anh giết , trả lời sai anh giết , trả lời đúng cũng giết luôn thì em biết phải làm sao ?!!
"Pằng"
- Mày phải chết vì mày đã nói quá nhiều !!
Thứ Ba, 29 tháng 11, 2011
không đặt tiền bạc là mục đích sống duy nhất
Labels:
Truyện Cảm động
Có một chàng trai trẻ vừa tốt nghiệp Đại học loại xuất sắc nộp đơn dự tuyển vào một vị trí quản lý tại một công ty lớn.
Anh ta vượt qua các vòng đầu tiên. Đến vòng cuối cùng, đích thân ông Giám đốc phỏng vấn để đưa ra quyết định cuối cùng.
Ông Giám đốc phát hiện ra một điều từ CV của chàng trai trẻ rằng trong suốt các năm học, anh ta luôn đạt thành tích học tập một cách xuất sắc. Từ trường Trung học cho đến khi vào Đại học và thi tốt nghiệp, không năm nào mà chàng trai này không đạt được danh hiệu xuất sắc.
Ông Giám đốc hỏi, “Anh có bao giờ nhận được học bổng từ trường không”. “Không bao giờ”, chàng trai trả lời.
Ông Giám đốc bèn hỏi tiếp,”Vậy là cha anh đã trả toàn bộ học phí cho anh phải không?”. Chàng trai trẻ trả lời:” Cha tôi đã mất từ hồi tôi được một tuổi, toàn bộ số tiền học phí là do mẹ tôi gánh vác”.
“Vậy mẹ anh làm việc ở công ty nào?” Ông Giám đốc hỏi. Chàng trai trẻ bèn trả lời, “Mẹ tôi làm công việc giặt quần áo”.
Ông Giám đốc nghe vậy bèn đề nghị chàng trai trẻ đưa hai bàn tay ra cho ông xem. Hai bàn tay chàng trai khá đẹp và mềm mại.
Ông Giám đốc hỏi:” Vậy trước đây có bao giờ anh giúp đỡ mẹ anh trong việc giặt quần áo chưa?”. “Chưa bao giờ”, chàng trai trẻ trả lời, “Mẹ tôi lúc nào cũng chỉ muốn tôi học và đọc thật nhiều sách. Hơn nữa, mẹ tôi có thể giặt quần áo nhanh hơn tôi.”
Ông Giám đốc nghe thấy vậy bèn nói: “ Tôi có một yêu cầu. Hôm nay lúc anh về nhà, hãy đi và rửa hai bàn tay của mẹ anh. Rồi hãy đến gặp tôi vào sáng ngày hôm sau”.
Chàng trai trẻ cảm giác rằng cơ hội trúng tuyển của mình vào công ty này rất cao. Anh ta liền vui vẻ về nhà gặp mẹ và nói với bà hãy để anh ra rửa hai bàn tay của bà ngày hôm nay. Bà mẹ nghe vậy cảm thấy rất lạ, trong lòng bà dấy lên những cảm xúc vui buồn lẫn lộn, bà bèn đưa hai bàn tay mình ra cho chàng trai.
Chàng trai trẻ chầm chậm rửa sạch bàn tay của mẹ mình. Từng giọt nước mắt của chàng trai rơi xuống khi anh ta thực hiện công việc của mình.Lần đầu tiên chàng trai nhận ra rằng đôi bàn tay của mẹ mình thật là nhăn nheo, hơn nữa hai bàn tay còn chằng chịt những vết sẹo và chai sạn. Những vết sẹo này hẳn là rất đau đớn vì chàng trai cảm nhận được bà mẹ khẽ rùng mình mỗi khi chàng trai rửa chúng trong nước.
Đây cũng là lần đầu tiên chàng trai trẻ nhận ra rằng chính đôi bàn tay này hàng ngày làm công việc giặt quần áo để có thể trang trải đủ tiền học phí của anh ta ở trường học. Những vết sẹo trên đôi bàn tay của bà mẹ cũng là cái giá cho kết quả đậu tốt nghiệp, cho những bảng điểm xuất sắc và cho cả tương lai của anh ta.
Sau khi rửa sạch đôi bàn tay của bà mẹ, chàng trai trẻ lặng lẽ giặt nốt luôn chỗ quần áo còn lại trong ngày.
Tối hôm đó, bà mẹ và chàng trai đã nói chuyện với nhau rất lâu.
Sáng ngày hôm sau, chàng trai trẻ quay lại công ty phỏng vấn.
Ông Giám đốc nhận thấy nước mắt còn đọng trên khóe mắt của chàng trai trẻ bèn hỏi:” Anh có thể cho tôi biết anh đã làm gì và học được những gì ở nhà của anh ngày hôm qua không?”
Chàng trai trả lời:” Tôi đã rửa đôi bàn tay của mẹ tôi, và tôi cũng đã giặt nốt chỗ quần áo còn lại.”
Vậy anh hãy cho tôi biết cảm giác của anh như thế nào?” Ông Giám đốc hỏi.
Chàng trai trẻ bèn trả lời trong nước mắt:
Thứ nhất: Tôi hiểu được nhờ có mẹ mà tôi có được ngày hôm nay.
Thứ hai: Tôi hiểu được kiếm tiền vất vả đến như thế nào.
Thứ ba: Tôi đã nhận thức được sự quan trọng và giá trị của tình cảm gia đình.
Ông Giám đốc nói:” Đó chính xác là những gì tôi cần tìm ở một nhà quản lý. Tôi muốn tìm những ứng viên có thể nhận thức được sự giúp đỡ của những người khác, người có thể hiểu được sự khó nhọc của người khác khi hoàn thành một công việc nào đó, và là người không đặt tiền bạc là mục đích sống duy nhất của mình. Xin chúc mừng. Anh đã được tuyển.”
Thứ Hai, 28 tháng 11, 2011
Cách vào facebook sửa file hosts
Labels:
Thu thuật facebook
Tắt trình duyệt web đang dùng, Mở chương trình Notepad. Đối với các bạn sử dụng dụng Win 7, bật Start Menu lên, trong hộp Search gõ “notepad” nó sẽ tìm ra chương trình Notepad, Right-click vào đó, chọn Run As Administrator.
Chọn File | Open (nhớ chọn All File (*.*) để thấy được file hosts) . Tìm đến file C:\Windows\System32\drivers\etc\hosts và tiến hành chỉnh sửa. Thêm vào các dòng sau:
60.254.175.42 facebook.com
60.254.175.42 www.facebook.com
60.254.175.42 register.facebook.com
60.254.175.42 www.logins.facebook.com
60.254.175.42 blog.facebook.com
60.254.175.42 logins.facebook.com
60.254.175.42 login.facebook.com
60.254.175.42 apps.facebook.com
153.16.15.71 upload.facebook.com
60.254.175.42 graph.facebook.com
60.254.175.42 profile.ak.fbcdn.net
60.254.175.42 photos-a.ak.fbcdn.net
60.254.175.42 photos-b.ak.fbcdn.net
60.254.175.42 photos-c.ak.fbcdn.net
60.254.175.42 photos-d.ak.fbcdn.net
60.254.175.42 photos-e.ak.fbcdn.net
60.254.175.42 photos-f.ak.fbcdn.net
60.254.175.42 photos-g.ak.fbcdn.net
60.254.175.42 photos-h.ak.fbcdn.net
60.254.175.42 static.ak.connect.facebook.com
60.254.175.42 static.ak.fbcdn.net
60.254.175.42 b.static.ak.fbcdn.net
60.254.175.42 error.facebook.com
60.254.175.42 developers.facebook.com
60.254.175.42 pixel.facebook.com
60.254.175.42 api.facebook.com
60.254.175.42 chanel.facebook.com
60.254.175.42 0.50.chanel.facebook.com
60.254.175.42 external.ak.fbcdn.net
60.254.175.42 profile.ak.fbcdn.net
60.254.175.42 creative.ak.fbcdn.net
60.254.175.42 chat.facebook.com
60.254.175.42 vupload.facebook.com
60.254.175.42 secure.facebook.com
60.254.175.42 connect.facebook.com
60.254.175.42 channel.facebook.com
Bấm Save.
Vào lại http://www.facebook.com/ để xem kết quả
* Mọi người nhớ chia sẻ thông tin này cùng với bạn bè của mình nhé!
Thứ Tư, 23 tháng 11, 2011
Uninstaller
Labels:
Software
Your Uninstaller! 2011 là một chương trình tháo gỡ cài đặt hàng đầu trong ngành. Nó là một chương trình tháo gỡ cài đặt Drag & Uninstall™ trên nền Windows thông minh nhất thế giới, hoạt động trên các phiên bản Windows 7/ Vista/ XP. Sử dụng nó cũng dễ như sử dụng thùng rác (recycle bin). Hãy tưởng tượng! Chỉ cần kéo-thả và chương trình mà bạn không muốn sử dụng nữa sẽ biến mất trong máy bạn—cũng như tất cả những gì không muốn mà chương trình đó đã mang lại! Your Uninstaller! là một cách tháo gỡ những ứng dụng không cần đến trên máy tính của bạn rất thân thiện với người sử dụng. Nó còn có thể tháo gỡ những phần mềm gián điệp gây rắc rối!
Your Uninstaller! được thiết kế đặc biệt cho cả người mới sử dụng cũng như những người sử dụng chuyên sâu. Your Uninstaller! 2010 cực kỳ nhanh và rất dễ dùng. Nó có một khả năng độc đáo để gỡ bỏ những phần mềm đơn giản bằng cách kéo biểu tượng ủa chương trình đó vào biểu tượng của Your Uninstaller! Bạn cũng còn có thể tìm ứng dụng mà bạn muốn gỡ bỏ qua chức năng tìm kiếm độc đáo.
Your Uninstaller! gỡ bỏ hoàn toàn nhữnh ứng dụng một cách nhanh chóng. Your Uninstaller! khởi động nhanh hơn 500%-1000% lần so với các chương trình Add/Remove khác. Như bạn biết, có rất nhiều bộ cài đặt trên thế giới, chẳng hạn như InstallShield, Wise Installer, Microsoft Installer và nhiều phần mềm khác. Hầu hết các ứng dụng được xây dựng sử dụng các trình cài đặt này. Mỗi trình cài đặt có một cơ sở dữ liệu cài đặt riêng, điều đó gây khó khăn cho việc tìm kiếm các thay đổi mà chương trình tạo ra cho máy tính của bạn. Đó là lý do tại sao các trình gỡ bỏ cài đặt khác chỉ có thể tháo gỡ một phần các file còn lại của ứng dụng và những từ khóa registry.
Để giải quyết vấn đề này,Your Uninstaller! sử dụng kỹ thuật độc đáo của nó: SmartUninstall™. SmartUninstall™ có một cơ sở dữ liệu bao gồm các thông tin về tất cả các trình cài đặt trên thị trường; nhờ vậy khi tháo gỡ một chương trình, nó tự động dò tìm trình cài đặt nào mà ứng dụng đó đã dùng, sau đó nó tháo gỡ ứng dụng đó một cách thích hợp và đơn giản. Đó là lý do tại sao Your Uninstaller! có thể dò tìm và tháo gỡ hoàn toàn tất cả các chương trình và biểu tượng trên máy tính của bạn.
Các tính năng:
* Tháo gỡ hoàn toàn bất kỳ ứng dụng nào đã được cài đặt.
* Quét sâu vào registry và toàn bộ đĩa để tìm các file và các phần nhập vào registry.
* Tháo gỡ các chương trình mà Add/Remove Program không thể gỡ bỏ.
* Tháo gỡ các screen savers.
* Thể hiện tất cả các ưng dụng đã cài đặt trên máy tính của bạn với cửa sổ tùy chỉnh. Chương trình Disk Cleaner tích hợp giúp bạn tìm và gỡ bỏ những file không cần thiết trên đĩa cứng của bạn để tiết kiệm đĩa và làm cho máy tính bạn nhanh hơn!
* IE Context Menu Cleaner tích hợp, dọn dẹp menu ngữ cảnh của Internet Explorer.
* Tích hợp Startup Manager, kiểm soát các phần khởi động của Windows.
* Tích hợp Start Menu Manager giúp bạn giữ sạch Start Menu.
* Thu thập các thông tin chi tiết về các ứng dụng ngay cả trong trường hợp nó tự ẩn sâu trong các thư mục, đặc biệt hữu dụng cho việc tìm kiếm các ứng dụng “Gián điệp”.
* Sao lưu/Phục hồi thông tin các hứng dụng cài đặt.
* Tháo gỡ cài đặt với chức năng kéo-thả! Chỉ cần thả một file lên biểu tượng Your Uninstaller! trên desktop và bạn sẽ thấy những gì xãy ra!
* Liệt kê các ưng dụng đã được cài đặt với các biểu tượng thích hợp (giống như bạn thấy trong Start Menu), bạn có thể tìm ứng dụng mà bạn muốn tháo gỡ dễ dàng.
* Tính năng tìm kiếm mạnh mẽ cho phép bạn tìm chương trình bạn muốn tháo gỡ nhanh chóng.
* Tự động dò tìm các sự cài đặt không hợp lệ và tháo gỡ chúng chỉ với một cú click.
* Gỡ bỏ bắt buột các giá trị nạp vào trong registry liên quan đến việc tháo gỡ cài đặt (cẩn thận khi dùng)!
* Khởi động cực nhanh, từ 5-10 lần nhanh hơn Add/Remove Program của Windows XP!
* Xem tất cả các chi tiết của một ứng dụng nào đó được cài đặt trên máy tính của bạn.
* Xuất danh sách các chương trình thành file hoặc in ra.
* Và các tính năng khác.
Homepage
DOWNLOAD FULL
Key share bởi bus... ted
ScreenshotSerial Number Name: sharyn kolibob
Serial Number: 000016-9P0U6X-N5BBFB-EH9ZTE-DEZ8P0-9U4R72-RGZ6PF-EMYUAZ-9J6XQQ-89BV1Z
Đăng ký:
Bài đăng (Atom)