Lessons Learned in Software Development

Henrik Warne's blog

Here is my list of heuristics and rules of thumb for software development that I have found useful over the years:

Programming bookshelf

Development

1. Start small, then extend. Whether creating a new system, or adding a feature to an existing system, I always start by making a very simple version with almost none of the required functionality. Then I extend the solution step by step, until it does what it is supposed to. I have never been able to plan everything out in detail from the beginning. Instead, I learn as I go along, and this newly discovered information gets used in the solution.

I like this quote from John Gall:  “A complex system that works is invariably found to have evolved from a simple system that worked.”

View original post 1 428 từ nữa

YAML

[From wikipedia…]

Syntax

A compact cheat sheet (actually written in YAML) as well as a full specification are available at the YAML web site. The following is a synopsis of the basic elements.

  • YAML streams are encoded using the set of printable Unicode characters, either in UTF-8 or UTF-16.
  • Whitespace indentation is used to denote structure; however tab characters are never allowed as indentation.
  • Comments begin with the number sign ( # ), can start anywhere on a line and continue until the end of the line. Comments must be separated from other tokens by white space characters.[7]Unless they appear inside of a string, then they are number ( # ) sign literals.
  • List members are denoted by a leading hyphen ( - ) with one member per line, or enclosed in square brackets ( [ ] ) and separated by comma space ( ,   ).
  • Associative arrays are represented using the colon space ( :   ) in the form key: value, either one per line or enclosed in curly braces ( {   } ) and separated by comma space ( ,   ).
    • An associative array key may be prefixed with a question mark ( ? ) to allow for liberal multi-word keys to be represented unambiguously.
  • Strings (scalars) are ordinarily unquoted, but may be enclosed in double-quotes ( ” ), or single-quotes ( ‘ ).
    • Within double-quotes, special characters may be represented with C-style escape sequences starting with a backslash ( \ ). According to the documentation the only octal escape supported is .
  • Block scalars are delimited with indentation with optional modifiers to preserve ( | ) or fold ( > ) newlines.
  • Multiple documents within a single stream are separated by three hyphens ( --- ).
    • three periods ( ... ) optionally end a file within a stream.
  • Repeated nodes are initially denoted by an ampersand ( & ) and thereafter referenced with an asterisk ( * ).
  • Nodes may be labeled with a type or tag using the exclamation point ( !! ) followed by a string, which can be expanded into a URI.
  • YAML documents in a stream may be preceded by directives composed of a percent sign ( % ) followed by a name and space delimited parameters. Two directives are defined in YAML 1.1:
    • The %YAML directive is used to identify the version of YAML in a given document.
    • The %TAG directive is used as a shortcut for URI prefixes. These shortcuts may then be used in node type tags.

YAML requires that colons and commas used as list separators be followed by a space so that scalar values containing embedded punctuation (such as 5,280 or http://www.wikipedia.org) can generally be represented without needing to be enclosed in quotes.

Two additional sigil characters are reserved in YAML for possible future standardisation: the at sign ( @ ) and accent grave ( ` ).

 

Tổng quan Visual Studio 11 Beta – Xây dựng ứng dụng Microsoft (Visual Studio 11 Beta Overview – Building Microsoft applications)

Nguồn: http://tbhung.wordpress.com/2012/03/05/gi%E1%BB%9Bi-thi%E1%BB%87u-t%E1%BB%95ng-quan-v%E1%BB%81-visual-studio-11-beta-v-xy-d%E1%BB%B1ng-%E1%BB%A9ng-d%E1%BB%A5ng-microsoft/

Sau khi Windows 8 Consumer Preview được Microsoft cho download rộng rãi, thì Microsoft cũng phát hành bộ công cụ dành cho lập trình viên là Visual Studio 11 beta, giúp cho cộng đồng lập trình viên được phép tạo ra các ứng dụng chất lượng cao, ứng dụng Metro style. Bên cạnh đó, bộ công cụ này còn cung cấp them các tính năng như kiến trúc ứng dụng, kiểm thử phần mềm, bảo đảm chất lượng phần mềm và làm việc trực tiếp với Team Foundation Server 11 giúp cho quản trị dự án phần mềm theo mô hình ALM một cách chuyên nghiệp hơn.

Chúng ta sẽ lướt qua về VS11 beta để khám khá các tính năng mới của nó.

Giao diện mới:

clip_image002 

Trong phiên bản này, Microsoft cải tiến và hỗ trợ xây dựng các giao diện Metro, hoặt động trên nền tảng Framework 4.5

clip_image004 

Metro Style Apps project Templates

Bạn có thể tạo ra các ứng dụng Metro phong phú bằng cách sử dụng một trong nhiều các mẫu dự án mặc định của Visual Studio 11, Các template sẽ tùy thuộc vào ngôn ngữ lập trình của bạn lựa chọn.

  • Metro style apps written using JavaScript.
  • Metro style apps written using C++, C#, or Visual Basic

Debugging

Visual Studio 11 cung cấp cho bạn một tập các công cụ giúp cho quá trình Debug ứng dụng một cách thuận tiện, bảo đảm ứng dụng Metro của bạn có chất lượng cao nhất. Bạn có thể debug ngay tại máy tính của bạn như kiểu truyền thống, hoặc có thể debug thong qua một máy ảo giả lập (Simulator).

Visual Studio 11 IDE

  • Store Menu: Bạn có thể sử dụng menu mới là STORE để tạo một tài khoản developer trên Windows Store và đặt tên cho ứng dụng của bạn.
  • Đóng gói và tải ứng dụng: Bạn có thể tạo một ứng dụng và đóng gói tất cả các file cần thiết với nhau sau đó tải lên Windows Store.

Công cụ quản trị chất lượng

  • Profiling: Giúp bạn tạo một bảng thong tin cho ứng dụng của bạn, chỉ rõ các thao tác xử lý trong ứng dụng, tìm kiếm những đoạn mã, module chiếm nhiều tài nguyên hệ thống để từ đó có thể khắc phục và bảo đảm kiểm soát hoàn toàn ứng dụng.
  • Code Analysis: Sử dụng để phân tích mã, tính phức tạp của mã, sự rang buộc lẫn nhau giữa các hàm giúp cho bạn có thể kiểm soát mã một cách tốt hơn.

Một số tính năng khác:

  • Vẫn phát triển theo lộ trình một giải pháp ALM hoàn chỉnh – Visual Studio – Team Foundation Server.
  • Giải pháp ALM với các tính năng cải tiến như Feedback, Scrum 2.0, Architect.
  • Hỗ trợ nền tảng .NET Framework 4.5
  • MSBuild 4.5 giúp biên dịch ứng dụng tập trung và tự động
  • Xây dựng ứng dụng Data với Visual Studio 11.
  • Xây dựng ứng dụng LightSwich
  • Xây dựng các ứng dụng SharePoint
  • Công cụ quản lý thành phần mở rộng hỗ trợ cho Visual Studio 11 – Extension Manager.

Blend for Visual Studio 11 Beta

Cảm nhận đầu tiên về BLEND

Giao diện làm việc chính của Blend có thể có sự pha trộn và khác nhau đối với mỗi người dung. Với một người dung mới, mặc dù cách bố trí chung của Workspace sẽ giống nhau tương đối với tất cả các loại dư án mà bạn làm việc

clip_image006 

1. Menus: Tạo mới dự án và quản lý các setting của dự án

2. Tools Panel – Tạo và điều chỉnh các đối tượng trong ứng dụng

3. Assets Panel – Hiển thị tất cả các thực thể và tài nguyên có tồn tại trong dự án

4. Artboard – Đây là nơi mà bạn làm việc với hầu hết các thao tác chỉnh sửa layout cho dự án. Ở đây sẽ hiển thị sẳn khung y hệt như là một màn hình của thiết bị máy tính bảng ảo.

5. Additional panels – Là một khung đặt biệt chứa các thay đổi đang diễn ra trong quá trình làm việc trong dự án.

clip_image007 

1. Document Tab: Hiển thị tất cả các file đang mở của dự án, kể cả html, css và java script

2. View controls: Thể hiện 3 kiểu để bạn điều khiển ứng dụng

a. Interactive mode: Sử dụng chế độ này để kích hoạt các trạng thái khác nhau của ứng dụng.

b. Error Indicator: Cho bạn biết nếu có lỗi trong ứng dụng của bạn và hiển thị danh sách lỗi trên khung Result.

c. Refesh: Sử dụng để phục hồi trạng thái ban đầu của ứng dụng trước khi có sự thay đổi trạng thái mà bạn đã sử dụng ở chế độ tương tác.

3. Views: Hiển thị các tùy chọn cửa sổ làm việc

Cách vào facebook bằng file host (cập nhật tháng 04/2012)

Cách vào Facebook bằng file hosts

Cập nhật tháng 04/2012

Các bước chỉnh sửa: xem phần dưới.

Cập nhật dải ip: (Upload hình thoải mái)

31.13.79.7 http://www.facebook.com
31.13.79.7 facebook.com
31.13.79.7 http://www.login.facebook.com
31.13.79.7 login.facebook.com
31.13.79.7 apps.facebook.com
31.13.79.7 upload.facebook.com
31.13.79.7 graph.facebook.com
31.13.79.7 register.facebook.com
31.13.79.7 vi-vn.connect.facebook.com
31.13.79.7 vi-vn.facebook.com
31.13.79.7 static.ak.connect.facebook.com
31.13.79.7 developers.facebook.com
31.13.79.7 error.facebook.com
31.13.79.7 channel.facebook.com
31.13.79.7 upload.facebook.com
31.13.79.7 register.facebook.com
31.13.79.7 bigzipfiles.facebook.com
31.13.79.7 pixel.facebook.com
31.13.79.7 upload.facebook.com
31.13.79.7 register.facebook.com
31.13.79.7 bigzipfiles.facebook.com
31.13.79.7 pixel.facebook.com

Cập nhật tháng 01 /2011

Các bước chỉnh sửa file hosts để vào Facebook không bị chặn:

Bước 1:

Mở thư mục này: C:\WINDOWS\system32\drivers\etc, cách mở nhanh nhất là nhấn phím Windows+R sau đó copy paste dòng C:\WINDOWS\system32\drivers\etc vào  >> Enter

Bước 2:

Mở file hosts trong thư mục đó ra  >> Click phải chọn Openwith >>Chọn Notepad (hoặc double-click vào nó rồi cũng chọn Notepad)

Bước 3: Thêm vào cuối các dòng trong file đó các dòng sau:

Mạng FPT
60.254.175.42 facebook.com
60.254.175.42 http://www.facebook.com
60.254.175.42 register.facebook.com
60.254.175.42 http://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

Mạng VNPT
96.17.180.162 http://www.facebook.com
96.17.180.162 http://www.login.facebook.com
96.17.180.162 facebook.com
153.16.15.71 apps.facebook.com
153.16.15.71 login.facebook.com
96.17.180.162 upload.facebook.com
96.17.180.162 graph.facebook.com
96.17.180.162 register.facebook.com
96.17.180.162 vi-vn.connect.facebook.com
96.17.180.162 vi-vn.facebook.com
96.17.180.162 static.ak.connect.facebook.com
96.17.180.162 developers.facebook.com
96.17.180.162 error.facebook.com
96.17.180.162 channel.facebook.com
96.17.180.162 upload.facebook.com
96.17.180.162 register.facebook.com
96.17.180.162 bigzipfiles.facebook.com
96.17.180.162 pixel.facebook.com
96.17.180.162 upload.facebook.com
96.17.180.162 register.facebook.com
96.17.180.162 bigzipfiles.facebook.com
96.17.180.162 pixel.facebook.com

Bước 4:

Save file đó lại.

Nếu không save lại được các bạn chọn save as ở nơi nào khác, (Desktop chẳng hạn) với tên “hosts” (nhớ có 2 dấu “) rồi sau đó copy file đó lại vào thư mục  C:\WINDOWS\system32\drivers\etc vừa rồi. chọn Copy đè lên file cũ.

Mở trình duyệt lên và đã có thể lướt Face thoải mái rồi ^^.

Chúc các bạn thành công!

Thuật toán sắp xếp

Thuật toán sắp xếp

Trong khoa học máy tính và trong toán học, một thuật toán sắp xếp là một thuật toán sắp xếp các phần tử của một danh sách (hoặc một mảng theo thứ tự (tăng hoặc giảm)). Người ta thường xét trường hợp các phần tử cần sắp xếp là các số.

Bài toán sắp xếp đã được nhiều nhà khoa học quan tâm.

Phân loại thuật toán sắp xếp


Sắp xếp ổn định

Một thuật toán sắp xếp được gọi là sắp xếp ổn định nếu sau khi tiến hành sắp xếp vị trí tương đối giữa các phần tử bằng nhau không bị thay đổi.

Săp xếp so sánh

Một thuật toán sắp xếp được gọi là sắp xếp so sánh nếu trong quá trình thực hiện thuật toán ta tiến hành so sánh các khoá và đổi chỗ các phần tử cho nhau. Đa số các thuật toán sắp xếp dưới đây là sắp xếp so sánh, riêng sắp xếp đếm phân phối không phải là sắp xếp so sánh.

Một số thuật toán sắp xếp

Sắp xếp nổi bọt

Sắp xếp nổi bọt (bubble sort) là phương pháp sắp xếp đơn giản, dễ hiểu thường được dạy trong khoa học máy tính. Giải thuật bắt đầu từ đầu của tập dữ liệu. Nó so sánh hai phần tử đầu, nếu phần tử đứng trước lớn hơn phần tử đứng sau thì đổi chỗ chúng cho nhau. Tiếp tục làm như vậy với cặp phần tử tiếp theo cho đến cuối tập hợp dữ liệu. Sau đó nó quay lại với hai phần tử đầu cho đến khi không còn cần phải đổi chỗ nữa.

Sắp xếp chèn

Sắp xếp chèn (insertion sort) là một thuật toán sắp xếp rất hiệu quả với các danh sách nhỏ. Nó lần lượt lấy các phần tử của danh sách chèn vào vị trí thích hợp trong một danh sách mới đã được sắp.

Sắp xếp chọn

Sắp xếp chọn (select sort) là phương pháp sắp xếp bằng cách chọn phần tử bé nhất xếp vào vị trí thứ nhất, tương tự với các phần tử nhỏ thứ hai, thứ ba,…

Sắp xếp trộn

Sắp xếp trộn (merge sort) cùng với sắp xếp nhanh là hai thuật toán sắp xếp dựa vào tư tưởng “chia để trị” (divide and conquer). Thủ tục cơ bản là việc trộn hai danh sách đã được sắp xếp vào một danh sách mới theo thứ tự. Nó có thể bắt đầu trộn bằng cách so sánh hai phần tử một (chẳng hạn phần tử thứ nhất với phần tử thứ hai, sau đó thứ ba với thứ tư…) và sau khi kết thúc bước 1 nó chuyển sang bước 2. Ở bước 2 nó trộn các danh sách hai phần tử thành các danh sách bốn phần tử. Cứ như vậy cho đến khi hai danh sách cuối cùng được trộn thành một.

[sửa]Sắp xếp vun đống

Sắp xếp vun đống (heapsort) là một trong các phương pháp sắp xếp chọn. Ở mỗi bước của sắp xếp chọn ta chọn phần tử lớn nhất (hoặc nhỏ nhất) đặt vào cuối (hoặc đầu) danh sách, sau đó tiếp tục với phần còn lại của danh sách. Thông thường sắp xếp chọn chạy trong thời gian O(n2). Nhưng heapsort đã giảm độ phức tạp này bằng cách sử dụng một cấu trúc dữ liệu đặc biệt được gọi là đống(heap). Đống là cây nhị phân mà trọng số ở mỗi đỉnh cha lớn hơn hoặc bằng trọng số các đỉnh con của nó. Một khi danh sách dữ liệu đã được vun thành đống, gốc của nó là phần tử lớn nhất, thuật toán sẽ giải phóng nó khỏi đống để đặt vào cuối danh sách. Sắp xếp vun đống chạy trong thời gian O(n log n).

Sắp xếp nhanh

Sắp xếp nhanh (quicksort) là một thuật toán theo tư tưởng chia để trị, nó dựa trên thủ tục phân chia như sau: để chia một dãy ta chọn một phần tử được gọi là “chốt” (pivot), chuyển tất cả các phần tử nhỏ hơn chốt về trước chốt, chuyển tất cả các phần tử lớn hơn chốt về sau nó. Thủ tục này có thể thực hiện trong thời gian tuyến tính. Tiếp tục phân chia các dãy con đó như trên cho đến khi các dãy con chỉ còn một phần tử.

Điểm khác biệt giữa sắp xếp nhanh và sắp xếp trộn là trong sắp xếp trộn việc xác định thứ tự được xác định khi “trộn”, tức là trong khâu tổng hợp lời giải sau khi các bài toán con đã được giải, còn sắp xếp nhanh đã quan tâm đến thứ tự các phần tử khi phân chia một danh sách thành hai danh sách con.

Ngoài ra còn nhiều giải thuật sắp xếp khác, trong đó nhiều giải thuật sắp xếp được cải tiến từ các giải thuật trên. Trong sau giải thuật liệt kê trên, ta thường coi các giải thuật chèn, chọn, nổi bọt là các giải thuật cơ bản, độ phức tạp trong trường hợp trung bình của chúng là O(n2). Ba giải thuật còn lại thường được coi là giải thuật cao cấp, độ phức tạp tính toán trung bình của chúng là n.ln n.

Sắp xếp theo cơ số

Sắp xếp theo cơ số (radix sort) dựa trên tính chất “số” của các khóa. Trong giải thuật sắp xếp theo cơ số, ta không chỉ so sánh giá trị của các khóa, mà so sánh các thành phần của khóa. Giả sử các khóa là các số biểu diễn theo hệ ghi số cơ số M. Khi đó sắp xếp theo cơ số sẽ so sánh từng k

Chúng ta mô tả cách sắp này khi cơ số M=10. Giả sử phải sắp các hồ sơ đánh số bởi 3 chữ số thập phân. Đầu tiên ta chia các hồ sơ vào các đống có cùng chữ số hàng trăm (đồng thới xếp các đống theo thứ tự của chữ số hàng trăm), trong mỗi đống con lại phân chia theo chữ số hàng chục, cuối cùng trong mỗi đống có cùng chữ số hàng trăm và hàng chục, sắp xếp theo thứ tự của chữ số hàng đơn vị.

Trong máy tính, đương nhiên việc sắp xếp theo cơ số nhị phân (cơ số 2) hoặc cơ số là lũy thừa của 2 là thuận lợi nhất. Trong trường hợp cơ số 2, việc phân hoạch tương tự như phân hoạch trong Quick Sort, chỉ khác ở chỗ cách chọn phần tử chốt.

Sắp xếp đếm phân phối

Sắp xếp đếm phân phối là phương pháp sắp xếp có độ phức tạp tuyến tính trong trường hợp các khóa nhận hữu hạn giá trị trong khoảng cho trước. Để đơn giản ta giả sử các phần tử của danh sácha[1..n] nhận các giá trị tự nhiên trong khoảng [1..M].

Sắp xếp đếm phân phối đầu tiên đếm các phần tử thuộc danh sách nhận giá trị k với 1 \le k \le M. Các giá trị đếm được được ghi vào mảng Counter[1..M]. Sau đó khi duyệt theo k từ 1 đến M, ta lần lượt xếp Counter[k] phần tử của vào danh sách a[1..n].

Tác giả của thuật cải tiến là quocdunginfo.byethost7.com (cũng chính là thành viên quocdunginfo trên Wikipedia, người sửa tại vùng này) chia sẻ thông qua việc tuân thủ điều khoản mã nguồn mở GNU.
Ta có thể cải tiến thuật toán, để có thể sắp xếp được cả số âm, bằng cách xác định giá trị MIN của mảng cần sắp xếp, rồi tiến hành trừ tất cả các phần tử cho MIN trước khi “xử lý đếm vào mảng Counter[]”. Khi ta chép ngược từ mảng Counter[] -> mảng cần sắp xếp, ta sẽ cộng thêm MIN vào khóa k (k=1 -> k=M).