Monthly Archives: October 2012

Khởi đầu lập trình Iphone

I. Khái quát về lập trình di động IOS:

Nếu bạn muốn viết ứng dụng cho iPhone, bạn cần có máy tính Mac (Mac Mini, iMac, MacBook, nói chung là các loại máy vi tính của Apple v.v.). Bạn không thể phát triển ứng dụng Apple trên máy Windows hay Linux PC. (Đây là cách ông Steve Jobs làm tiền, những cách khác để phát triển chỉ có thể là Hackintos) dĩ nhiên là nói trường hợp chính thống chứ nếu hackintos thì dĩ nhiên là phát triển trên Laptop Dell cũng được. Bạn sẽ cần tải xuống “SDK” và “Xcode” của Apple và cài trong máy tính Mac của bạn và đừng lo lắng về tiền bạc vì nó miễn phí. Từ đó, bạn có thể bắt đầu tạo ra ứng dụng riêng của bạn. Hệ thống này cũng chứa một “simulator” cho nên bạn có thể tha hồ thử nghiệm xem các ứng dụng của bạn sẽ chạy như thế nào trên máy thật (Tuy nhiên, lâu lâu cũng hơi bị tửng tửng khi kiểm tra trên simulator đã rồi xong đưa lên máy thật vẫn bị lỗi, chắc do mình gà 🙂 ). Bạn có thể kiếm nhiều thông tin và “free tutorial” về cách phát triển ứng dụng từ  website chính của Apple :  http://developer.apple.com/programs/ios/develop.html

Quá trình cài đặt để đưa lên AppStore tương đối đơn giản, tất cả chỉ là chút tiền 99$ (Đây là cách ông Steve Jobs kiếm thêm và tăng số lượng bán hàng của Ios, tuy nhiên trả bằng Việt Nam đồng thì cũng được giảm đôi chút do truyền thống con nhà nghèo học giỏi chỉ còn khoảng 1.7 tr). Bạn sẽ được tiếp cận với những công cụ mới nhất trước mọi người (Ví dụ như chúng ta có thể quậy phá với iOS 6 trong lúc những thằng khác thì đang rị mọ với IOS 5). Sau đó bạn đăng kí một “Certificate Signing Request” và nhận chứng chỉ về máy sau đó đăng kí máy của bạn thì là xong.

Phần phát triển xong thì khá dễ dàng với một số biểu tượng và hình ảnh xuất hiện trong game của bạn. Sau đó là mô tả của chương trình làm được gì và mức giá của chương trình thế là xong.

Nói trước để chuẩn bị là Apple kiểm tra phần mềm rất gắt gao tuy nhiên cũng tới mức nào đó thôi. Ví dụ, bạn có một phần mềm đã lên AppStore rồi thì thay đổi interface xong post lại thì vẫn được lên vì chả ai mà xem nổi code nó giống nhau như thế nào đâu. Ngoài ra còn phụ thuộc vào tâm trạng và luật của Apple đối với người dùng cuối (EULA), có thể cũng App đó hôm nay không được lên vì thằng kiểm định nó khó ở nhưng ngày mai thì được lên do nó vui vẻ lại không biết chừng nên cứ vui vẻ mà chờ đợi thôi. Thêm một điều, những gì thuộc về lừa đảo hay cố tình cái mã độc, những app đó sẽ không bao giờ lên được AppStore đâu, mấy cái chương trình gửi SMS vào các đầu số 8xxx chỉ cài lên những máy đã jailbreak, mà đã jailbreak thì ráng mà chịu.

AppStore hiện nay rất phổ biến cho khách hàng mua app di động và cho những lập trình viên bán app của họ. Với hơn  một triệu apps, từ trò chơi cho tới kinh doanh và nhiều app tự do đây chính là cơ hội làm giàu cho những lập trình viên có khả năng và những nhà kinh doanh biết cách khai thác thị trường lớn như thị trường di động. Phần lớn các app thương mại có giá rất hợp lí (ít hơn $1 tới $5 mỗi lần tải).-

* Lưu ý: Nói thêm về việc hút máu của Apple với lập trình viên. Thực sự mà nói, ai cũng thấy 30% mà Apple lấy của chúng ta là nhiều. Nhưng hãy nhìn lại, thực tế phần 30% đó hầu nhưng chúng ta đều phải đóng ngay cả trong cuộc sống thực. Bạn có biết khi làm công ăn lương bạn đã mất gần 30% cho bảo hiểm (Bảo hiểm xã hội, bảo hiểm y tế, bảo hiểm thất nghiệp) nói gần chứ bây giờ nó đã là 28%(năm 2012) và tăng 2% cho 2 năm cho đến khi đạt mức 32%. Nghĩa là bạn đi làm công ăn lương cũng đã bị chém 30% chưa kể sản phẩm của bạn bán được giá cao hơn nhiều và không được chia gì cả.

II. Những bước đi trong việc phát triển IOS:

* Đó là phần đăng kí tài khoản để phát triển còn đây là những chuẩn bị để bước chân vào lập trình

* Thông tin chung về hệ sinh thái Apple:
– Làm việc với Apple hay chính xác hơn vơi IOS thì số tlượng những sản phẩm chúng ta cần nhắm tới rất nhỏ. Bao gồm:
+ Ipod
+ Iphone
+ Ipad
=> Số lượng những sản phẩm khá là nhỏ le

1. Bước chuẩn bị ban đầu

Cách học thì theo tôi cách học từ đầu là bạn hãy tập trung làm những cái đơn giản nhất:

* Đầu tiên hãy ghi lại những ý tưởng và mục tiêu lại trên một tài liệu nào đó trong quá trình bạn học nhưng khoan hãy bắt tay và làm nó vội

=> Những ý tưởng này của bạn sẽ chính là mục tiêu của bạn sau khi đọc và thực hành xong eBook.

Vì thực tế có một điểm mà ít ai biết được ngay từ đầu là các cuốn eBook không đưa ra đầy đủ những kiến thức cần thiết mà chứa tất cả những kiến thức cơ bản nhất mà từ đó bạn có thể hoàn thành được ý tưởng của bạn.

– Hầu hết mọi người sau khi hoàn tất một cuốn eBook sẽ không biết phải làm gì tiếp nữa. Đợi đến lúc đó mới nghĩ ra ý tưởng thì hứng thú sẽ cạn kiệt dần trừ phi hứng thú quá cao thì ý tưởng ra xong trước khi nó giảm hết có thể tìm ra được ý tưởng để phát triển tiếp được.

– Cho nên, quá trình làm việc của tôi đi kèm theo việc suy nghĩ ra ý tưởng theo kèm ngay từ lúc bắt đầu. Sau khi bạn có đủ kiến thức là bạn có thể bắt đầu luôn.

2. Luyện căn bản với Ebook:
– Cầm một cuốn eBook ra để luyện trước
+ Theo kinh nghiệm thì nên sử dụng sách của Apress vì các hướng dẫn rất đầy đủ chi tiết và tác giả không ngại việc nhắc lại những kiến thức cũ và bổ sung thêm khi bạn tới những cột mốc như vậy

+ Sách của Apress còn có thêm mã nguồn rất đầy đủ và chi tiết
=> Hãy luyện hết một cuốn (Chừng 24 chương cho những phần căn bản nhất) (Sách thì bên phần eBook của website)
=> Lúc này bạn đã có đầy đủ kiến thức cơ bản để hiểu được một chương trình viết gì, đây là lúc tham khảo 1 chương trình thực tế
– Tuy nhiên, sách của Apress có kuyết điểm là không chỉ cách tạo database (Array, pList) nên việc sử dụng nó hầu như bạn phải sử dụng đúng database của Apress mới chạy được

3. Khởi động với chương trình tương tự:
– Sau đó hãy kiếm một chương trình trên Internet có cấu trúc gần giống nhất với chương trình bạn muốn viết
– Dựa vào cấu trúc đó viết lại chương trình bạn muốn
– Sau đó phát triển nó lên
=> Cách làm này giúp bạn có kiến thức và sản phẩm theo kèm rất nhanh chóng
=> Sau khi được chừng 3 chương trình thì đó là lúc bạn đã đầy đủ kiến thức có thể chiến ở bất cứ nơi đâu

– Chương trình này có thể sẽ là chương trình chính của bạn trong tương lai, hãy làm nó cho thật tốt vì lợi ích của nó là rất lớn. Những gì cần tham khảo thường sẽ tới từ chương trình này.
– Ngoài ra, nếu bạn muốn xin việc ở một công ty chuyên về app thì việc đưa ra các chương trình kiểu mẫu thế này sẽ được điểm rất cao.

4. Phát triển chương trình căn bản:
– Mỗi chương trình luôn có phần chính là chức năng nòng cốt. Chức năng này cần làm tốt trước tiên. Sau đó mới tính tới những phần phụ theo kèm:
+ Giao diện
+ Hiệu ứng trong chương trình
+ Hình ảnh mô tả
+ Luồng đi hợp lý.
– Chức năng chính của chương trình luôn luôn phải chạy tốt, nếu không chạy tốt thì bạn sẽ gặp rắc rối lớn và giảm uy tín rất nhiều.
– Chính vì vậy đầu tiên, bạn cần phát triển chương trình làm tốt nhất chức năng chính của nó.

5. Nâng cấp chương trình:
– Đầu tiên phải lưu ý đến phần giao diện
+ Intro View là thứ đầu tiên bạn cần quan tâm vì đây là screen đầu tiên mà người sử dụng nhìn thấy và là ấn tượng ban đầu để họ có tiếp tục sử dụng hay không?
+ Những chức năng mới nên làm trên những view mới còn vẫn muốn update trên view chính thì việc bạn nên chắc chắn là tạo một bản sao lưu ở chỗ khác hoặc tạo một ảnh bản sao (SnapShot) của chương trình để có thể quay ngược trở lại phiên bản làm việc được gần nhất.
+ Lưu ý: Lới khuyên là nên sử dụng chức năng SnapShot của Xcode. Chức năng này rất mạnh và chạy cực nhanh không tốn quá nhiều thời gian lại có thể điều khiển (control) được những bản sao lưu và có thể trở lại bất cứ lúc nào. Đây là một điểm vượt trội của  Xcode so với những IDE khác.

Advertisements

SQL Article: Delete and Truncate

I. Cách sử dụng:

SQL Server cung cấp 2 phương pháp để xóa dữ liệu, DELETE và TRUNCATE. Cú pháp của hai lệnh này như sau:

DELETE

DELETE dbo.DM_BenhNhan WHERE…

hoặc

DELETE bn FROM dbo.DM_BenhNhan bn WHERE…

Khi cần xóa dữ liệu với điều kiện liên quan đến bảng khác:

DELETE bn

FROM dbo.DM_BenhNhan bn

JOIN dbo.BenhAn ba ON bn.MaBenhNhan = ba.MaBenhNhan

hoặc:

DELETE bn

FROM dbo.DM_BenhNhan bn

WHERE EXISTS(SELECT 1 FROM dbo.BenhAn ba WHERE bn.MaBenhNhan = ba.MaBenhNhan)

TRUNCATE không có tùy biến nào

TRUNCATE TABLE dbo.DM_BenhNhan


II. Điểm khác biệt:

Tuy cùng để xóa dữ liệu, nhưng hai lệnh này có những khác nhau cơ bản:

 

– DELETE cung cấp các lựa chọn để xóa những dòng dữ liệu thỏa mãn các điều kiện nhất định, như WHERE hoặc JOIN với các bảng khác.

– TRUNCATE không có lựa chọn nào, mà luôn cắt bỏ toàn bộ dữ liệu của bảng. Nói cách khác, ta không thể TRUNCATE 1 nửa hay 1 phần của bảng.

– DELETE hỗ trợ transaction. Khi lệnh DELETE nằm trong 1 transaction và trong một tình huống nào đó transaction được ROLLBACK thì các bản ghi bị xóa bởi lệnh DELETE sẽ trở lại bảng không có gì suy xuyển.

– TRUNCATE thì ngược lại, không hỗ trợ transaction. Một khi đã thực hiện thì không thể lấy lại dữ liệu được nữa.

– DELETE khi thực hiện bao gồm quá trình tìm các bản ghi thỏa mãn điều kiện của câu lệnh, và xóa các bản ghi này. Việc tìm các bản ghi cần xóa được thực hiện giống hệt như một câu lệnh SELECT, cũng tối ưu hóa, lựa chọn giữa các phương án thực hiện khác nhau và chọn ra phương án tối ưu (dựa vào index, statistics…).

– TRUNCATE thì chỉ có một phương án thực hiện duy nhất, đó là cắt bỏ tất cả các dòng dữ liệu của bảng.

– Với DELETE, các bản ghi bị xóa sẽ được kiểm tra xem có vi phạm ràng buộc FOREIGN KEY không. Ví dụ ta có hai bảng MAT_HANG và BAN_HANG là quan hệ 1-n thông qua MA_MH; nếu MA_MH=1 đã có giao dịch, nghĩa là bảng BAN_HANG đã có bản ghi với MA_MH=1, thì khi DELETE bản ghi với MA_MH=1 từ bảng MAT_HANG (bảng cha) SQL SERVER sẽ báo lỗi và không cho xóa.

Nếu trước đó, khi ta định nghĩa ràng buộc FOREIGN KEY mà có lựa chọn CASCADE DELETE, thì thay vì báo lỗi SQL Server sẽ đồng thời xóa hết các bản ghi trong cả bảng BAN_HANG với MA_MH=1.

– TRUNCATE thì không có những đoạn kiểm tra dài dòng như thế. Nếu bảng có ràng buộc FOREIGN KEY, SQL Server sẽ báo lỗi và không cho thực hiện (nhớ là lựa chọn CASCADE DELETE trong khai báo FOREIGN KEY chỉ ảnh hưởng đến lệnh DELETE chứ không tác dụng đối với TRUNCATE).

Vì DELETE hỗ trợ transaction và dùng transaction log, nó có thể dùng với bảng nằm trong một replication hoặc database có dùng log shipping.

– TRUNCATE thì vì không ghi gì vào transaction log nên khi gặp một trong các tình huống trên sẽ bị từ chối ngay.

– Với DELETE, nếu bảng có index thì các index cũng sẽ được cập nhật để xóa đi các node tương ứng với các bản ghi bị xóa.

– TRUNCATE thì rất đơn giản, các index của bảng cũng bị cắt cụt theo.

– DELETE không ảnh hưởng đến giá trị IDENTITY. Nếu bảng có 100 bản ghi và cột IDENTITY có giá trị từ 1-100; nay ta DELETE bản ghi có cột IDENTITY=100 rồi INSERT một bản ghi mới; bản ghi mới sẽ có cột IDENTITY=101.

– TRUNCATE luôn đặt lại IDENTITY trở về 1. Bản ghi đầu tiên được INSERT sau khi TRUNCATE sẽ có cột IDENTITY=1.

– DELETE thực ra chỉ đánh dấu xóa các bản ghi chứ ngay sau đó dữ liệu của các bản ghi bị xóa vẫn nằm nguyên tại chỗ. Dần dần khi ta INSERT thêm dữ liệu vào bảng thì các bản ghi mới sẽ ghi đè lên các vùng lưu trữ đó. Ta có thể kiểm tra để thấy kích thước bảng không thay đổi ngay cả sau khi chạy DELETE FROM DM_BenhNhan(xóa hết các bản ghi).

– TRUNCATE thì xóa hết dữ liệu đồng thời giải phóng vùng lưu trữ giành cho bảng, trả lại cho SQL Server. Ta có thể so sánh DELETE như là xóa file, còn TRUNCATE thì như format lại ổ cứng.

– DELETE cho phép áp dụng đối với bảng ở server khác được nối qua linked server.

TRUNCATE không cho phép điều này, bạn chỉ có thể TRUNCATE bảng nằm trên cùng server.

 

Vì những lý do trên, DELETE luôn luôn chậm hơn TRUNCATE. Càng có nhiều bản ghi DELETE càng chậm, còn TRUNCATE thì không phụ thuộc vào lượng dữ liệu. DELETE có phạm vi ứng dụng rộng hơn; còn TRUNCATE chỉ dùng được mỗi một việc, nhưng nó lại làm rất nhanh. Vì vậy, hãy nhớ dùng TRUNCATE khi có thể được.


IV. Các đặc điểm chính:
1. Delete:
– Cho phép có bộ lọc (filter)
– Cho phép làm việc với các cơ sở dữ liệu liên kết (linked database)
– Cho phép sử dụng giao tác (TRANSACTION)
– Có thể được hỗ trợ bởi Foreign Key (CASCADE DELETE)
2. Truncate:
– Tốc độ cực nhanh
– Tái lập (Reset) ID của bảng
– Không thể:
+ Chạy trên các cơ sở dữ liệu liên kết (linked database)
+ Hỗ trợ đối với Foreign Key (tuy nhiên có thể xóa các bảng con trước sau đó xóa bảng liên kết vẫn được)
+ Sử dụng giao tác (TRANSACTION)

III. Các trường hợp sử dụng:

1. Delete:

– Sử dụng để xóa những record (bản ghi) dư thừa không còn giá trị sử dụng

– Xóa theo điều kiện để loại bỏ những gì không cần thiết

2. Truncate:

– Xóa dữ liệu tạm (bảng tạm)

– Xóa dữ liệu sau khi làm thử (Test process)

– Xóa dữ liệu để thêm mới hoàn toàn (Full Add New – sử dụng trong các bảng danh mục, danh sách)


IV. Các lới khuyên:
– Sử dụng TRUNCATE khi có thể (trong các trường hợp nêu trên)
– Hạn chế sử dụng DELETE vì rất dễ quên điều kiện

 

Vậy thì TRUNCATE = DROP TABLE + RECREATE TABLE

DELETE có làm phân mảnh dữ liệu trong table không vậy tác giả ??? Vì sau khi DELETE size của Table không giảm.

nói chi li thì khác nhau vì DROP+CREATE TABLE là tạo một bảng mới (OBJECT_ID mới), nếu bạn có 1 user có 1 số quyền SELECT/UPDATE… trên bảng đó thì sau khi DROP+CREATE TABLE user đó sẽ mất hết quyền trên bảng mới, bạn phải cấp lại. TRUNCATE thì không sao. Nếu bạn có 1 view dựa trên bảng đó với lựa chọn WITH SCHEMABINDING thì bạn không thể DROP TABLE (bạn phải DROP VIEW trước).

DELETE chính là một nguyên nhân gây phân mảnh dữ liệu trong bảng, vì các trang chứa bản ghi bị xóa sẽ được dùng lại cho các bản ghi mới. Hiện tượng tương tự cũng xảy ra đối với index.

 

Khi bạn TRUNCATE bảng, trường IDENTITY sẽ được reset trở về giá trị ban đầu (khi tạo bảng). Tuy nhiên có những trường hợp bạn không thể dùng TRUNCATE (xem thêm bài DELETE và TRUNCATE). Ví dụ bạn muốn đặt lại giá trị của trường IDENTITY trong bảng dbo.TableName về 1, bạn có thể dùng lệnh này:

 

DBCC CHECKIDENT (‘dbo.TableName’, RESEED, 1)