Thursday, July 7, 2016

Giới thiệu công cụ FLEX để debug mọi thông tin ngay trên simulator hoặc thiết bị iOS

Chào các bạn hôm nay mình xin giới thiệu đến các bạn 1 tool dùng để debug mọi thông tin như cấu trúc, vị trí, thuộc tính của những đối tượng trong 1 màn hình, có thể xem system logs, network, caches, file browser... trực tiếp ngay trên simulator / thiết bị iOS, mà không cần dùng XCode. Khi bạn thiết lập tool này, bạn có thể biết được mọi hành vi mà người lập trình đang làm trên ứng dụng này mà không cần phải coi code.

Công cụ này có tên là FLEX ( là từ viết tắt của Flipboard Explorer). Công cụ này rất dễ cài đặt và sử dụng, bạn chỉ nên sử dụng tool này cho chế độ Debug thôi. Mình sẽ giới thiệu sơ qua những chức năng chính của tool này như sau:

1. Có thể thay đổi vị trí của đối tượng:

Hình bên dưới đây minh họa cách công cụ này có thể tương tác những đối tượng trên màn hình như chọn và thay đổi vị trí của đối tượng trên màn hình. Bạn bạn chạy simulator thì nhấn phím "f" để mở thanh công cụ hoặc có thể tạo 1 button là "FLEX" để hiển thị thanh công cụ lên (code hiển thị sẽ đề cập bên dưới) và thao tác như sau:

Saturday, June 25, 2016

Viết Auto Layout bằng code và cách viết UnitTest để kiểm tra giao diện - Phần 3

Trước đây mình có 2 bài viết hướng dẫn cách dùng Auto Layout và Size Class bằng cách thiết lập trên storyboard hay file xib. Nếu các bạn chưa xem có thể xem qua AutoLayout và Size Class Phần 1, Phần 2.

Nếu các bạn làm project từ iOS 9 trở lên thì nên dùng UIStackView để thiết kế giao diện cho dễ, ngược lại từ iOS 8.4 trở xuống thì bạn phải dùng view và những constraint để giả như StackView, để có thể thiết kế giao diện 1 cách đơn giản nhất, vì khi trên 1 màn hình có nhiều thành phần nhỏ nếu bạn liên kết theo từng nhóm trong view thì dễ quản lý hơn. Hoặc bạn có thể dùng thư viện OAStackView, ý tưởng viết thư viện này từ UIStackView.

Viết giao diện nếu bạn muốn trực quan thì nên dùng storyboard hay xib, nhưng nhiều khi có những trường hợp bạn cần viết giao diện bằng code. Nếu bạn nắm được cách viết giao diện bằng code bạn có thể hiểu sâu hơn những vấn đề khi làm giao diện.

Khi làm autolayout trên iOS bằng constraint, có những khái niệm bạn cần phải hiểu như:

* Pin, Align và Ratio:

- Pin: bạn gắn 1 đối tượng giao diện (view, label, button...) vào 1 vị trí cố định nào đó (ví dụ như góc trên bên trái, góc trên bên phải, hay canh giữa...). Cố định chiều cao và chiều rộng với con số mong muốn.
- Align: bạn canh chỉnh từ 2 đối tượng trở lên, đối tượng này sẽ canh chỉnh theo đối tượng kia bằng những thuộc tính như trái, phải, trên, dưới, canh giữa, hay baseline.
- Ratio:  tỷ lệ chiều cao và chiều rộng của 1 đối tượng, nếu bạn muốn tỷ lệ giữ đối tượng này và đối tượng kia thì dùng chức năng Equal Widths/Heights.
  + Nếu bạn dùng storyboard thì sau khi thiết lập chiều rộng và chiều cao mong muốn rồi thì chọn thêm chức năng Aspect Ratio trong phần Pin để đối tượng đó luôn giữ đúng tỷ lệ đó, như hình bên dưới:

  + Equal Heights/Widths: mặc định là chiều cao/chiều rộng của đối tượng này bằng với chiều cao/chiều rộng của đối tượng kia, vì giá trị multiplier là 1. Bạn có thể dùng chức năng này để thiết lập tỷ lệ của đối tượng này với đối tượng khác bằng cách chỉnh giá trị của thuộc tính multiplier trong NSLayoutConstraint hay NSLayoutAnchor.

* Constraint:


Saturday, May 28, 2016

Hướng dẫn sử dụng thư viện OpenCV 3 trên iOS

Bài trước mình có hướng dẫn cách chạy code ví dụ mẫu C++ trên MacOS các bạn muốn xem có thể nhấn link này.

Các bạn có thể tải tài liệu về OpenCV tại đây.

Bài này mình hướng dẫn các bạn các bước để tạo 1 project iOS với thư viện OpenCV 3.

GaussianBlur

Thursday, May 26, 2016

Hướng dẫn cài đặt OpenCV trên MacOS và chạy ví dụ mẫu bằng terminal và XCode

OpenCV (Open Source Computer Vision) là thư viện mã nguồn mở chuyên xử lý, phân tích những hình ảnh từ photo và camera như nhận diện khuôn mặt, chữ số, hình học... OpenCV được phát hành dưới mã nguồn BSD license, do đó được sử dụng miễn phí trong việc nghiên cứu cũng như thương mại. Nó có những interface cho ngôn ngữ C++, C, Python và Java, do đó nó có thể chạy trên đa nền tảng như Windows, Linux, Mac OS, iOS và Android. Chi tiết các bạn có thể xem thêm trên trang của OpenCV.

Tài liệu hướng dẫn chi tiết những chức năng trong OpenCV các bạn có thể xem qua tại đây. Khi xem những hướng dẫn này các bạn cần phải chạy những đoạn code ví dụ mẫu của người ta viết để có thể hiểu rõ cách người ta thực thi công thức toán học đó thông qua code như thế nào và kết quả khi chạy ra sao thì các bạn phải build và run chương trình.

Bài này mình hướng dẫn các bạn cài thư viện OpenCV 3.1.0, build và chạy thử code ví dụ mẫu C++ từ Github OpenCV bằng terminal và XCode. Vì mình thấy trên mạng có hướng dẫn cài bản 3.0.0, nhưng mình cài thử máy tính cá nhân của mình thì gặp sự cố với ffmpeg, nếu các bạn cài bản này, nếu gặp lỗi như vậy có thể đọc tài liệu này để fix problem khi cài đặt OpenCV 3.0.0.

Friday, May 13, 2016

[Swift] Hướng dẫn kết nối server Perfect với MongoDB

Như bài ví dụ trước mình có hướng dẫn cách thiết lập căn bản để các bạn có thể viết 1 webservice đơn giản và kết nối với cơ sở dữ liệu là database bằng ngôn ngữ Swift. Các bạn có thể xem qua tại đây.

Bài này mình xin hướng dẫn các bạn thiết lập server hiện tại cho chạy với database MongoDB.

MongoDB là gì?

MongoDB là một cơ sở dữ liệu (database) theo dạng tài liệu (document), mã nguồn mở (open source), miễn phí, chạy trên nhiều nền tảng (cross-platform). Được phân loại như là NoSQL database.

MongoDB không sử dụng cấu trúc cơ sở dữ liệu quan hệ dựa theo dạng bảng (table) như truyền thống, mà dùng cơ chế lưu theo dạng document (JSON) với scheme động (MongoDB gọi đó là định dạng BSON) làm cho việc tích hợp các dữ liệu trong một số loại ứng dụng dễ dàng hơn và nhanh hơn.

Còn chần chờ gì nữa các bạn không thử xài MongoDB để cảm nhận công nghệ NoSql là như thế nào ^^.

Thursday, April 28, 2016

[Swift] Thiết lập thư viện Perfect để viết cho server-side

Perfect là gì ?

Perfect là một web-server và toolkit cho phép các nhà phát triển sử dụng ngôn ngữ lập trình Swift để xây dựng những ứng dụng và những REST service. Nó cho phép những developer có thể phát triển ứng dụng cả client-side và server-side trong cùng 1 workspace, cùng 1 ngôn ngữ lập trình Swift. Nó là một bộ khung hoàn hảo cho những kỹ thuật cloud và mobile.




Tại sao lại sử dụng Perfect?

- Hiện tại Swift đã được Open Source vì thế nó sẽ còn phát triển nhanh và mạnh, do đó Swift là ngôn ngữ của tương lai. Nếu bạn học và nắm bắt cơ hội này chắc bạn sẽ có nhiều cơ hội phát triển sự nghiệp của mình trong tương lai hơn nữa.

- Đa số những dân lập trình trên iOS chỉ biết về Objective-C hay Swift hoặc cả 2, vì thế nếu bạn muốn viết cho server-side thì bạn phải học thêm ngôn ngữ PHP hoặc Java để có thể viết cho server-side. Nếu bạn dùng thư viện Perfect thì bạn khỏi cần quan tâm đến việc học thêm ngôn ngữ khác cho công việc đó, bạn có thể dễ dàng debug cả bên client lẫn server đều được.

- Hiện tại Perfect cũng đang trong giai đoạn phát triển và đã có 1 phiên bản release là Perfect version 1.0. Code của thư viện Perfect cũng được open source trên GitHub, nếu các bạn muốn học thêm cách người ta viết library đó như thế nào thì cũng có thể tải về và đọc code.

- Swift và Perfect có thể chạy trên nền tảng Linux vì thế các bạn có thể viết để deploy trên Linux server. Hiện tại trên mạng cũng có nhiều hướng dẫn về việc này.

Làm thế nào thiết lập thư viện Perfect trên XCode?

Hiện tại mình chưa thấy đường link trên cocoapods cho thư viện này, vì thế cách mình hướng dẫn chỉ tải và dùng trên phiên bản release 1.0 như ở trên. Mình đang dùng OS X 10.11 và XCode 7.3 (7D175). Trên GitHub của Perfect nói phải như vậy mới build được thư viện của họ. Nên nếu ai đang xài phiên bản cũ hơn hãy update lên rồi mới chạy được nha.

Demo này mình viết 1 ứng dụng trên iOS truy suất REST api, có trả về dữ liệu là 1 chuỗi HelloWorld theo dạng GET và POST:

Wednesday, April 20, 2016

(Kinh nghiệm) Cách xử lý Exception trong Objective-C có Demo

Có nhiều người hỏi mình có nên sử dụng try/catch để xử lý exception khi lập trình trên iOS không? Theo kinh nghiệm mình làm trên Objective-C được 5 năm, thì mình xin trả lời là có thể có hoặc không có cũng được, miễn sao bạn bắt được hết những trường hợp exception đó bằng câu lệnh if, để có thể không xảy ra tình trạng crash ứng dụng và chạy theo đúng yêu cầu của khách hàng là được.


Tuesday, April 12, 2016

Phân biệt biến kiểu Property, Public, Protected, Private trong ngôn ngữ Objective C

- Theo kinh nghiệm làm việc của mình với các bạn trong nhóm khi lập trình Objective-C và cũng đọc qua code của những project cũ. Ít khi nào mọi người để ý và khai báo đúng với ý đồ của từng đối tượng, và vi phạm quy tắc tính đóng gói, tính bảo mật thông tin của đối tượng trong lập trình hướng đối tượng (Tham khảo lý thuyết Lập trình hướng đối tượng tại trang Wiki).

- Theo ngôn ngữ lập trình Java, người ta khuyến khích mỗi khi dùng biến kiểu public thì nên đặt 1 biến private và hỗ trợ những hàm getter/setter để truy suất biến private đó.
    + Nguyên nhân họ nói là đảm bảo tính đóng gói, và nếu sau này có thay đổi gì trên biến đó bạn có thể sửa được dễ dàng, chi tiết về vấn đề này ở đây.
    + Nói tóm tại thì nguyên nhân chính là có thể kiểm soát được truy xuất đến giá trị của 1 đối tượng từ bên ngoài, có thể dễ dàng mở rộng code bằng cách override lại những hàm getter/setter.

- Các bạn có thể áp dụng nguyên tắc đó từ bên Java qua ngôn ngữ lập trình Objective-C cũng được. Nhưng nên nhớ khi khai báo biến kiểu property system ObjC tự động sinh những hàm getter/setter và quản lý dùm bạn. Nếu bạn cần thêm những việc xử lý nào khác thì override lại phương thức getter/setter của property đó.

- Nếu cái gì public đều dùng property hay phương thức getter/setter hết thì những ngôn ngữ lập trình hướng đối tượng nên bỏ từ khoá public luôn đi cho rồi.

- Hiện tại mình vẫn chưa tìm ra tài liệu chính thống từ Apple nói nên dùng hay không nên dùng biến property cho biến public hay không. Vì thế chúng ta sẽ không bàn về vấn đề đó đúng hay sai. Tuỳ theo trường hợp mình áp dụng là được, hiện tại mình có những trường hợp như sau:
    + Các bạn mới học lập trình thì mình khuyên nên dùng property để khai báo biến public, để tránh những rủi ro mà bạn không lường trước được.
    + Dùng property để khai báo biến public để có 1 coding standard cho team và đảm bảo tính đóng gói trong lập trình hướng đối tượng.
    + Khi bạn cần tối ưu hoá code thì nên lưu ý vấn đề truy suất trực tiếp thông qua @public này, có thể giúp bạn được phần nào tốc độ xử lý.

- Vì thế mình viết bài này để phân tích khi nào thì cần dùng biến theo Property hay iVar (Public, Protected, Private) để các bạn tham khảo khi viết trên ngôn ngữ Objective-C (Swift mình sẽ nghiên cứu và phân tích sâu về nó sau). Các bạn có kiến thức tốt lập trình hướng đối tượng khi viết bằng các ngôn ngữ khác như Java, PHP,... có thể chuyển code đó qua Objective-C uyển chuyển và ngắn gọn. Thực chất ra cách khai báo những biến như vậy cũng rất giống những ngôn ngữ lập trình khác nhưng ít khi nào dân lập trình trên iOS bằng Objective-C dùng.

- Nếu bạn có 1 khách hàng khó và họ định nghĩa sẵn hệ thống của họ theo từng sơ đồ như class diagram đàng hoàng. Họ bắt bạn phải viết code theo đúng như thiết kế của họ thì chắc chắn bạn phải làm theo. Hiện tại mình thấy đa số dân lập trình toàn viết code làm sao chạy được, còn tính đúng đắn hay thiết kế như thế nào cho hợp lý thì thường bỏ qua. Thành ra code dư thừa rất nhiều và khó bảo trì sau này.

- Giả sử mình có 1 lớp tên là PCObject được định nghĩa như sau:

Monday, April 11, 2016

95% người dân không biết ý nghĩa của các con số dưới đáy chai, hộp nhựa

Ở phía dưới đáy chai hay hộp thường có hình tam giác với mũi tên và một con số nằm giữa. Có lẽ ít ai để ý đến ký hiệu vô cùng quan trọng này.

Một số gia đình và cửa hàng thực phẩm thấy sử dụng lại chai, hộp nhựa để đựng nước, dầu ăn, dấm... Nhiều người cho rằng, các chai, hộp nhựa này sau khi đã được rửa sạch thì an toàn mà không biết rằng độc tính vẫn có thể phát tác trong quá trình sử dụng.
Gần đây, câu chuyện về cô bé 12 tuổi sống tại Tiểu vương quốc Ả Rập Thống nhất liên tiếp dùng một chai nước khoáng để đựng nước uống và mắc bệnh ung thư, đang trở thành chủ đề nóng trên nhiều diễn đàn.
Nguyên nhân chính là do chai nước chứa chất liệu gây độc hại khi sử dụng quá nhiều lần và gây bệnh ung thư. Chai nước khoáng thông thường hoặc chai soda khi đến nhiệt độ 70 độ C sẽ dễ bị biến dạng và giải phóng ra các độc chất.
Phía dưới đáy chai nước, hộp đựng thuốc hay thức ăn thường có ký hiệu hình tam giác với các mũi tên. Ở giữa hình tam giác là một con số cụ thể.
Chẳng hạn, bình nước uống của học sinh hay có số 7; chai nước tinh khiết, chai sữa hoặc nước ép trái cây thường có số 1; các chai dầu ăn, các lọ mỹ phẩm hay có số 2; còn các hộp mỳ ăn liền bằng nhựa có số 5 dưới đáy...
Thế nhưng, ít ai quan tâm hay tìm hiểu đến ý nghĩa của hình tam giác và những con số này.
Số 1 có nghĩa là PET (nhựa polyethylene terephthalate). Các chai nhựa đựng đồ uống khi tái sử dụng nếu đựng nước nóng quá 70 độ C không chỉ biến dạng mà còn phân giải ra các chất có hại cho sức khỏe.
Các nhà khoa học cũng phát hiện ra rằng, chế phẩm nhựa này nếu sử dụng quá 10 tháng có thể sinh ra các chất gây ung thư.


Ký hiệu số trong hình tam giác dưới đáy chai nước khoáng

(iBeacon)Công nghệ iBeacon là gì?

iBeacon là nhãn hiệu hàng hoá của Apple cho một hệ thống định vị trong nhà, mà Apple gọi là "thế hệ mới của bộ phát chi phí thấp thấp được hỗ trợ có thể thông báo cho thiết bị iOS v7 về sự hiện diện của nó".Chúng cũng có thể được sử dụng bởi hệ điều hành Android. Công nghệ này cho phép một thiết bị iOS hoặc phần cứng khác để gửi các thông báo đẩy cho các thiết bị iOS gần đó.