Hiển thị các bài đăng có nhãn phát triển. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn phát triển. Hiển thị tất cả bài đăng

Thứ Hai, 15 tháng 2, 2016

[Android] Hướng dẫn sử dụng GenyMotion để tạo Android Virtual Device test

Giới thiệu: GenyMotion là một công cụ giả lập Android, mà bạn có thể sử dụng nó để test các apps của mình, cũng như trải nghiệm android trên PC của mình. Nó có thể giả lập các thiết bị thật như là Google Nexus, Samsung Galaxy, ... Hoạt động rất nhanh, đơn giản, và mượt mà như máy thật. Bạn cũng có thể sử dụng Full Screen Size mode để có cảm nhận như chạy Android trên màn hình desktop, và bạn cũng dễ dàng copy-paste hay drag-drop file vào máy ảo này. Bạn cũng có thể giả lập các tính năng về GPS, wifi internet ở thời gian thực.
Cá nhân tôi, ngoài chuyện test app trong quá trình development, tôi còn dùng nó để chơi game nữa. Bạn có thể trao đổi thêm nếu bạn muốn tìm hiểu cách chơi game bằng GenyMotion này :)


Dưới đây là chi tiết hướng dẫn cách cài đặt và sử dụng GenyMotion.

Cài đặt


First of all you will need to create a Account on Genymotion Website. Go to this link and create an account.


1) Sign up for an account on the Genymotion Website
2) Install VirtualBox 5.0, a powerful free virtualization software for Genymotion to run.
3) Download Genymotion Emulator v2.5.2 or higher for your platform. Note: There is an incompatibility issue with Genymotion v2.5.1 for VirtualBox 4.3.28 and higher versions.
4) Install the Genymotion Emulator
- Windows: Run the MSI installer
- Mac: Open the dmg and drag both apps to Applications directory
5) Go to the Genymotion ADB settings and set the path to your SDK directory (i.e. for Mac OSX, the directory is /Users/[username]/Library/Android/sdk. For Windows, all SDK files should be by default in C:\Documents and Settings\\AppData\Local\Android\sdk)



6) (PC's only) You need to reboot and enable Intel Virtualization Technology or Intel VT-x on the BIOS. Typically you need to reboot and hit F1, Esc, or F10 to enter this mode. See these instructions for more information.



7) Install the Genymotion plugin for Android Studio. Go to Preferences->Plugins and click Browse repositories. Search for Genymotion and you should find one provided by http://www.genymotion.com.


After restarting, go to Preferences->Genymotion and setup the location of the Genymotion app.


Configuration


Run the Genymotion application
Sign in and add your first virtual device (i.e. Nexus 4 - 4.4.4 - API 19, Nexus 4 - 5.0.0. - API 21).
You must use an image running 4.3, 4.4.4, or 5.0.0. Other versions may not work.
Do not start your emulator yet!
From within Android Studio, click the genymobile icon Genymobile and click "Start" on your virtual device.
You can start the emulator through the Android Studio plugin, or can launch the Genymotion application separately.
Wait for device to boot up into a useable state
Note: On Ubuntu/Linux, make sure to 3D acceleration mode by launching VirtualBox and going to Settings -> Display to fix. VirtualBox appears to prone to memory leaks, so you may find yourself killing the process from time to time. To avoid large CPU consumption by the compiz window manager and swapping in general, try increasing the video memory allocation and Base Memory (found in Settings -> System).

Note: Are you getting an error when starting the emulator? Error Failed to load VMMR0.r0? Follow the advice here. In short, go to virtual box page and download and install VirtualBox 4.3.6 Oracle VM VirtualBox Extension Pack.

Note: If you get Failed to load OVI error when re-adding the emulator, you need to use a new name for the same device. For example, "Nexus 4 - 4.4.4 - API 19" might be called "Nexus 4 - 4.4.4 - API 19 New".


Setup Google Play Services


1) The Google Play APK package needed is specific to the Android emulator version. You must use the corresponding Google Play Service package. Otherwise, you may notice problems with Google Play not having Internet connectivity or other strange issues.

Version APK Link
Android 5.0
Google Play Services APK - requires Genymotion 2.4.0+
Android 4.4.4 Google Play Services APK
Android 4.3 Google Play Services APK

2) Drag and drop the zip file onto the running Genymotion emulator device


3) When asked to flash the device, make sure to proceed with the installation.

At this point, 'Google Apps Services' will crash frequently with the message "google play services has stopped working".
You must close and restart the emulator so that Google Play Store can be installed.

4) After restart, open the "Play Store" app on your emulator and sign in with a google account.

If you can't find Google Play, try updating the Google Hangouts app to trigger an update to the Play Store.

5) Android 5.0.0 only: If you are using Android 5.0.0, you will be prompted to update to the latest version of Google+ app. In addition, make sure to upgrade to at least Genymotion 2.4.0 (there appears to be issues with Genymotion 2.3.1).

6) Make sure to update to the latest version of Google Play Services by opening the "Play Store" app and then the "Maps" app to verify play services is running correctly.

Note: After installed google play if you have got problem like no connection, you need to be carefull to install right version that will match emulator version. For example Android 4.3 is API 18. If you install Samsung Galaxy S4 API 18 - 1080 x 1920 for genymotion emulator and install Google Services APK for Android 4.3, google play will work without any issue. The important point is google play API version and genymotion emulator device version.



Enable GPS on Emulator


Next, if you don't have the emulator started yet, be sure to boot the genymotion emulator from within the Android Studio plugin:



Now we need to enable the GPS location on the emulator by manually selecting a location on the map:



Thứ Năm, 8 tháng 10, 2015

[GUIDE] Tạo accordion menu nhiều cấp bằng CSS

Bài viết hướng dẫn tạo một CSS accordion menu đơn giản nhưng hỗ trợ nhiều level của các item bên trong. Cách làm này, có thể chạy trên nhiều trình duyệt khác nhau: IE9+, Safary, Chrome, Firefox.


Trong bài hướng dẫn này, menu chỉ dùng CSS, với việc apply :checked pseudo-class selector của CSS trên các element input checkbox.
Ngoài ra, trong phần demo cũng có một phiên bản sử dụng jQuery, nếu bạn muốn có thêm các hiệu ứng animation để tăng phần sinh động.


DEMO   DOWNLOAD SOURCE

Tạo cấu trúc HTML của menu


Cấu trúc HTML của menu này khá đơn giản: đó là sử dụng 1 list các item. Nếu một item trong list, lại có các item con, thì chúng ta sử dụng một input[type=checkbox] kèm với label của nó để làm top row. Và đồng thời, chúng ta sẽ thêm .has-children class vào item đó trên list. Tất cả các item ở list lớp ngoài cùng, mà không có item con, thì chỉ cần để môt thẻ link a là được.

Chi tiết code như dưới đây:


<ul class="cd-accordion-menu">
<li class="has-children">
<input type="checkbox" name="group-1" id="group-1" checked>
<label for="group-1">Group 1</label>

<ul>
<li class="has-children">
<input type="checkbox" name ="sub-group-1" id="sub-group-1">
<label for="sub-group-1">Sub Group 1</label>

<ul>
<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
</ul>
</li>
<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
</ul>
</li>

<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
</ul> <!-- cd-accordion-menu -->


Thêm style CSS

Chúng ta sử dụng một cách khá đơn giản (ngày nay thường làm thế này), để phát hiện ra item được click, và show các item con của nó, chỉ bằng CSS: đó là như đã đã nói ở trên, ta dùng một checkbox input element. Với việc select class :checked của input checkbox đó, ta sẽ bắt được element đó có checked hay chưa, và tiến hành show/hide các item con của nó bằng cách change display từ "none" thành "block" (và ngược lại nếu để hide đi).

Cụ thể step-by-step từng bước một như sau:

1) Đầu tiên, chúng ta phải kiểm tra lại rằng tất cả các item lớn bên ngoài mà có chứa các item con bên trong, thì cần phải có input checkbox như đã làm sample HTML ở trên
2) Chúng ta cũng phải chắc chắn rằng, khi mà chúng ta click vào label của nó, thì checkbox đó cũng tự động được check. Nếu bạn quen thuộc với HTML rồi, thì việc này khá là đơn giản, ở input checkbox bạn cần đặt cho nó một id value, và ở label, bạn cần đặt value id của checkbox vào thuộc tính for của nó.


Dưới đây là code CSS mà chúng ta sẽ sử dụng để hiển thị Menu bằng CSS ở trạng thái ban đầu:


.cd-accordion-menu input[type=checkbox] {
/* hide native checkbox */
position: absolute;
opacity: 0;
}
.cd-accordion-menu label, .cd-accordion-menu a {
position: relative;
display: block;
padding: 18px 18px 18px 64px;
background: #4d5158;
box-shadow: inset 0 -1px #555960;
color: #ffffff;
font-size: 1.6rem;
}


Bây giờ, ta nhận thấy rằng cấu trúc HTML cho input, label, list các item đã được xếp theo thứ tự. Tiếp theo, chúng ta dùng cơ chế select :checked của CSS để thực hiện hiển thị các element con bên trong nó bằng cách thay đổi value display từ "none" thành "block";


.cd-accordion-menu ul {
/* by default hide all sub menus */
display: none;
}

.cd-accordion-menu input[type=checkbox]:checked + label + ul,
.cd-accordion-menu input[type=checkbox]:checked + label:nth-of-type(n) + ul {
/* use label:nth-of-type(n) to fix a bug on safari (<= 8.0.8) with multiple adjacent-sibling selectors*/ /* show children when item is checked */ display: block; }


Như vậy là ta đã hoàn thành một menu accordion chỉ bằng CSS.

Nếu bạn muốn menu có thêm các hiệu ứng chuyển động animation khi cụp xoè (show/hide) item con, thì chỉ việc include thêm javascript vào.

DEMO:



Bài viết được dịch dựa vào nguồn: https://codyhouse.co/gem/css-multi-level-accordion-menu/

Thứ Ba, 29 tháng 9, 2015

iOS9 - Một số điểm mới khi phát triển và upload lên AppStore

iOS9 đã được chính thức phát hành, và như thường lệ, rất nhiều người dùng đã nâng cấp phần mềm cho chiếc iPhone của mình. Lúc này cũng là lúc mà các lập trình viên phải vất vả để nâng cấp app của mình sao cho tương thích với iOS9. Dưới đây là một số điểm mới cần chú ý khi phát triển app cũng như là khi upload app lên AppStore.


Lỗi xuất hiện do thay đổi của iOS9


App Transport Security Policy Error

Failed to load resource: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

Apple đã siết chặt thêm tính bảo mật ở iOS 9, và họ ngăn chặn các kết nối không an toàn. Điều này là rất tốt, nhưng nếu bạn, có cần có những kết nối không an toàn này trong app, thì bạn phải làm thêm một số bước trick để tạm vượt qua được hạn chế này bằng cách add đoạn code bên dưới vào trong file AppName-info.plist.


<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true>
</true></dict>


-canOpenURL: failed for URL


-canOpenURL: failed for URL: "://" - error: "This app is not allowed to query for scheme "
-canOpenURL: failed for URL: "about:blank" - error: "This app is not allowed to query for scheme about"



App của bạn có nhúng webview, và trong webview đó có thực hiện thao tác để mở một trang web? App của bạn sử dụng custom URL?
Thế thì khả năng cao bạn sẽ dính phải lỗi này.
Nguyên do là Apple đã thay đổi cách hoạt động của API canOpenURL trong iOS 9 bằng cách thêm 1 khoá là LSApplicationQueriesSchemes được cài đặt trong file Info.plist.

Giải pháp là bạn cần phải đặt URL Scheme vào danh sách Whitelist mà app có thể mở được.

Mở file Info.plist bằng Source Code view và thêm các schemes cần thiết cho app vào ví dụ:


<key>LSApplicationQueriesSchemes</key>
<array>
<string>twitter</string>
<string>whatsapp</string>
<string>fb</string>
</array>


Các thư viện của bên thứ 3 bị lỗi


Nếu app của bạn dùng thư viện 3rd party, bạn cũng cần check lại cẩn thận vì có thể một số hàm hoặc Categories trong các thư viện đó bị lỗi khi build bằng XCode 7 hoặc chạy trên iOS9.
Ví dụ JSONKit,...


Bàn phím ảo mới



Apple đã cải tiến lại bàn phím ảo cho iOS 9 mà họ gọi là "best keyboard yet" (chưa bao giờ tuyệt vời như thế) kế thừa các tính năng từ iOS 8 QuickType.

Bạn có thể đã gặp phải trường hợp khi mình gõ sai text, sau đó bạn phải nhấn và giữ ngón tay trên 1 con chuột hình thanh dọc nhấp nháy nhỏ xíu để di chuyển nó đến chỗ sai khi sửa đổi.
Con trỏ (cursor) khi edit text bây giờ có thể điều khiển 1 cách dễ dàng bằng cơ chế trượt 2 ngón tay trên bàn phím ảo. Với cải tiến này, iPad QuickType keyboard biến thành 1 trackpad như là trên các máy Mac. Với cải tiến đáng giá này, bạn sẽ dễ dàng hơn rất rất nhiều trong việc di chuyển con trỏ tiến lui lên xuống đến vị trí mong muốn khi edit text.


Hơn thế nữa, iOS 9 bây giờ cũng hỗ trợ các shortcuts để nếu bạn có sử dụng bàn phím wireless thì bạn cũng thực hiện các thao tác được nhanh và dễ dàng hơn thông qua built-in shortcut keys. Nhấn giữ các nút Command, Options hoặc Control sẽ hiển thị ra danh sách các shortcut.

Và là lập trình viên, bạn cũng cần biết được điều này để update app của mình sao cho tiện lợi cho người dùng nhất.


New San Francisco Font


Đây có lẽ là phần đau đầu nhất đối với việc update app. Có lẽ bạn đã quen với việc set các text or label của mình bằng font mặc định. Ở iOS8 trở về trước, HelveticaNeue là FontFamily cho system. Font HelveticaNeue được nhận định là không thích hợp cho các thiết bị có màn hình nhỏ như Apple Watch, do khi hiển thị các text có size nhỏ thì font này có thể làm cho text bị nhoè, khó đọc.
Do đó Apple đã quyết định thiết kế bộ Font mới là San Francisco cho iOS9 làm font system mặc định.
Điều này sẽ gây ra việc các label, button, có thể bị nhảy size do kích cỡ text cần hiển thị bị thay đổi. Nhất là đối với những app sử dụng cách tính size của text dựa trên font, hoặc không sử dụng Autolayout khi code giao diện, bạn sẽ nhanh chóng phải sửa lỗi này.


Swift2 được ra mắt

Nếu app của bạn được code bằng Swift thì Apple đã nâng cấp Swift lên phiên bản 2. Bạn có thể kiểm tra lại để nâng cấp app của mình.

Tham khảo

Ngoài những điểm hay gặp ở trên, Apple cũng cho biết các điểm thay đổi mà developer cần chú ý gồm:

  • OCR accessory setup
  • Search extensibility
  • Audio unit extension
  • VPN plug-in extension
  • Swift 2
  • Map customization
  • Direct document
  • UI testing in Xcode
  • Notification actions
  • Third party notifications
  • Sensor profile
  • App thinning
  • Motorized windows profile
  • New Health data types
  • Flyover and Walkthrough
  • Code Coverage
  • Gaming APIs
  • Layout guide
  • Shortcut bar
  • Automated shades profile
  • Object-oriented Contacts
  • New HomeKit profiles
  • iCloud open in place
  • Home security profile
  • Storyboard references
  • App transport security API
  • Stack view
  • Wireless CarPlay
  • HomeKit iCloud remote access

Một số chi tiết thay đổi khác bạn có thể tham khảo thêm ở đây: https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW1



Upload lên AppStore


Kết nối account itunesconnect vào XCode 7

Apple đã có một số thay đổi ở bản XCode7 so với bản cũ. Khi build và sign app của mình, bạn phải kết nối account itunesconnect vào mục XCode > Settings > Accounts. Nếu bạn là personal, ko sử dụng account team, có thể bạn không cần quan tâm do khi đó account itunesconnect và account developer của bạn sử dụng chung email. Tuy nhiên, khi bạn làm team, account itunesconnect có thể bị khác với account developer, lúc đó bạn sẽ phải làm thêm việc này.


Gặp lỗi khi upload: Invalid Bundle. iPad Multitasking support requires launch story board in bundle



Như bạn đã biết là Apple release iOS9, và trong cùng sự kiện đó là ra mắt iPad Pro. Và đây là cài đặt dành riêng cho iPad Pro, giúp thiết bị này nhận biết và xử lý khi app của bạn có sử dụng tính năng split-view/multitasking.

Bạn sẽ gặp lỗi này nếu app của bạn không chỉ ra cách mà iPad sẽ xử lý như nào để support multitask.

Một số nguyên nhân có thể là: Không sử dụng Storyboard để gán Launch screen; nhất là app của bạn sử dụng tính năng split screen. Nếu app của bạn không support multitasking, để khắc phục, bạn chỉ cần đơn giản check vào 'Requires full screen' trong tab General Options của target trong Xcode.

Thứ Sáu, 29 tháng 5, 2015

Android M DP và ADT mới - Chi tiết những điểm được giới thiệu ở Google IO 2015

Tại Google IO ngày thứ nhất, 28/5/2015 vừa qua, thế hệ tiếp theo của hệ điều hành Android đã ra mắt bản Android M preview cho các lập trình viên. Tên chính thức hiện tại là Android M, và theo truyền thống các loại bánh kẹo, chữ M này có thể đại diện cho Milk Shake (hỗn hợp xay nhuyễn giữa kem và sữa tươi), Marshmallow,...


Các lập trình viên có thể truy cập vào trang giới thiệu của Google để xem chi tiết hơn: http://developer.android.com/preview/index.html
Android M đã được phát hành cho các thiết bị Nexus 5,6, và 9. Nếu bạn có các thiết bị trên có thể download về để tham khảo trước.
Link download:
Android M – Nexus 5
Android M – Nexus 6
Android M – Nexus 9

Cách để flash bản Rom mới nhất này có thể tạm thời tham khảo ở bài viết hướng dẫn này, cách làm tương tự: http://www.gottabemobile.com/2015/05/26/how-to-install-android-5-1-1-lollipop-on-the-nexus-6/

Trong bài viết này, cùng điểm nhanh qua một số phần mới được cải tiến và giới thiệu ở Android M.

Cải tiến các thành phần cơ bản

Trong bản release M, các thành phần core liên quan đến trải nghiệm người dùng được tập trung để cải tiến tốt hơn, sữa hàng nghìn bugs được phát hiện, đồng thời cũng đưa vào nhiều thay đổi lớn đến các thành phần core của platform như:

Permissions - Phân quyền

Cải tiến để người dùng có thể tự điều khiển phân quyền. Apps có thể sẽ request đến quyền tương ứng vào thời điểm hoạt động, trong một context ngữ cảnh cụ thể. Cách làm này có thể là nói giống với iOS đang làm. Ví dụ, apps muốn khởi động camera để chụp ảnh, khi đó hệ thống sẽ đưa ra request và người dùng hoàn toàn có quyền quyết định cho phép app có được khởi động camera không. Đồng thời, người dùng cũng có một công cụ để quản lý những quyền mà họ đã cấp cho các apps trong phần Settings. Nếu bạn là một developer, ở Android M, bạn nên thiết kế app của mình làm sao để hiển thị yêu cầu người dùng cấp quyền cho app của mình được làm gì đó, tuỳ vào ngữ cảnh. Đây cũng là một phần quan trọng developer cần test kỹ tránh xảy ra lỗi apps khi người dùng từ chối cấp quyền.


App links - Liên kết với app

Bản M này cũng được cải tiến để các apps có thể liên kết với nhau dễ dàng hơn. Theo truyền thống, Android cho phép các apps có thể tự đăng ký xử lý các URLs nào đó. Bây giờ, developer có thể thêm thuộc tính "autoVerify" vào phần AppManifest, nhờ đó người dùng có thể liên kết sâu hơn với apps của bạn, mà không cần phải nhảy ra popup promt như trước kia. App links, kèm theo đó là App Indexing cho Google Search, làm cho người dùng dễ dàng khám phá, sử dụng quen app của bạn.

Battery Quản lý Pin và Năng lượng

Bản M này cũng cải thiện khả năng quản lý năng lượng thông minh hơn, thông qua tính năng gọi là Doze. Android M dựa vào việc nhận dạng các cử chỉ chuyển động của thiết bị để biết được thiết bị đang không được sử dụng. Trong trạng thái đó, Android sẽ tự điều chỉnh lại các hoạt động chạy ngầm để giữ được thời lượng pin lâu hơn. Ví dụ, bạn đang xây dựng một ứng dụng chat, khi đó bạn sẽ cần phân loại message có độ ưu tiên cao, để app được phép đánh thức device khi đang trong trạng thái Dozing.


Mở rộng tính năng trợ lý và thanh toán Payments

Android M cũng được vui mừng thông báo một số tính năng mới:

Now on tap - Google Now trên một cú chạm

Đây là tính năng mới để giúp cho người dùng Android được dễ dàng hơn, biến thiết bị Android thành một trợ lý ngay khi cần. Ví dụ, nếu có một người bạn nhắn tin rủ bạn đi ăn tối ở một nhà hàng mới, bạn không cần phải rời khỏi ứng dụng xem tin nhắn / chat để search, mà bạn có thể khởi động Google Now ngay để được trợ giúp. Vào lúc đó Google Now sẽ tự động nhận biết được context ngữ cảnh của cuộc nói chuyện, tự động tìm kiếm thực đơn, reviews của nhà hàng đó, thậm chí có thể giúp bạn đặt bàn luôn, dẫn đường bạn đến đó, và có thể kết hợp với các app ẩm thực có liên quan. Với các developer, bạn có thể cài đặt App Indexing để Google search có thể làm việc với app của bạn, nhờ đó người dùng có thể gọi ngay chính app của bạn thông qua Now on Tap.



Android Pay & Fingerprint

- Android đã build một hệ thống thanh toán dựa vào Near Field Communications (NFC - Giao tiếp trường gần) có từ bản Gingerbread, và bộ Host Card Emulation ở Kitkat để phát triển nên Android Pay. Android Pay sẽ cho phép các thiết bị android có thể đơn giản, và an toàn sử dụng thiết bị android của mình để thanh toán trong các cửa hàng store, hoặc thanh toán với hàng ngàn partner khác liên kết với Android Pay như McDonal, ...

- Với bản M, chức năng quét vân tay cũng được cung cấp sẵn luôn, và nhờ đó cũng cải thiện Android Pay, giúp người dùng xác thực thanh toán bằng cách quẹt vân tay của mình. Hơn thế nữa, chức năng quẹt vân tay còn dùng để mở khoá thiết bị, thanh toán trên cửa hàng play Google Play. Với các APIs mới ở M, các developer sẽ dễ dàng thực hiện việc xác thực ở trong app của mình thông qua việc quẹt vân tay, và như vậy, nó cũng sẽ tạo thành một hệ thống làm việc đồng nhất với nhiều thiết bị, tận dụng được hết các cảm biến censor có trên thiết bị.

Android Developer Tools

Đồng thời với Android M, SDK mới, thì Google cũng phát hành bản cập nhật cho các công cụ hỗ trợ lập trình Android tools.


Android Studio v1.3 Preview

Để giúp cho developer nhanh chóng nắm bắt được những công nghệ và tính năng mới của Android M, bản mới của Android Studio cũng được phát hành. Trong đó có khá nhiều tính năng đáng giá mới liên quan đến Android NDK & phát triển game: edit code và debugging với C/C++. Dựa trên nền tảng JetBrains Clion, Android Studio NDK plugin cũng cung cấp các tính năng như: refactoring và code completion cho C/C++ bên cạnh Java code. Java & C/C++ cùng được hỗ trợ và tiéch hợp trong một môi trường phát triển mà bạn không phải tốn công thử nghiệm lại tool khác. Nếu bạn là developers, hãy update bản Android Studio v1.3 mới này qua kênh thử nghiệm Canary.


Android Design Support Library

Bộ thư viện Android Design Suppor Library mới được phát hành để giúp cho việc thiết kế app theo phong cách Material ngày càng dễ hơn. Google đóng gói sẵn một bộ các thành phần chủ yếu (ví dụ: nút trôi nổi floating action button, snackbar, navigation view, motion enabled Toolbars) có thể tương tích ngược với các API v7, khiến cho app của bạn có một giao diện hiện đại, tuyệt đẹp mà không phải tự develop mọi thứ từ đầu.

Google Play Services v7.5

Bản phát hành mới này bao gồm một số tính năng như Smart Lock for Passwords, hàm APIs mới cho Google Cloud Messaging và Google Cast, Google Maps API trên các thiết bị chạy Android Wear.


Làm quen với những tính năng trên

Để có thể tiếp cận với những điểm mới trên, Google đã cung cấp các tài nguyên cần thiết đầy đủ cho chúng ta rồi. Nếu bạn không có các thiết bị Nexus 5, 6, 9, thì bạn có thể update bộ Android SDK của mình, bạn có thể chạy thông qua Simulator. Một số bước cần làm:


  1. Update lên Android Studio v1.3+ Preview
  2. Truy cập vào trang của Android M Developer Preview để tải tài nguyên vào tài liệu về.
  3. Nghiên cứu các hàm APIs mới & các thay đổi ở App Permission
  4. Nghiên cứu Android Design Support Library & Google Play Services APIs
  5. Chạy emulator bằng bộ công cụ SDK Manager hoặc cài đặt Android M vào thiết bị Nexus của mình (Link download ở đầu bài viết).
  6. Kiểm tra các app của bạn trên emulator hoặc trên máy Nexus đã update
  7. Cung cấp các phản hồi của bạn để Google có thể cải tiến Android M tốt hơn nữa

Thứ Tư, 4 tháng 3, 2015

Gaming - Lập trình game với Cocos2D-JS - Hello Game World

Sau khi đã chuẩn bị đầy đủ môi trường phát triển như đã làm trong bài Giới thiệu, bài viết này nhằm hướng dẫn bạn cách khởi đầu làm game với Cocos2d-JS, cũng như có cái nhìn đầu tiên về làm game với framework này.

Phương pháp học là, thông qua những project demo, ta sẽ tiếp cận dần dần từ dễ đến khó, và nhờ đó hiểu biết cùng kỹ năng cũng sẽ tăng theo.
Ở bài này, chúng ta sẽ làm những công việc sau:
  • Tạo một project mới để làm với Cocos2D-JS
  • Code game Hello World
  • Tham khảo


Source code cho toàn bộ các bài học trong series này có thể download ở GitHub.

Đây là hình ảnh của game sau khi đã hoàn thành:

Thứ Hai, 2 tháng 3, 2015

Gaming - Lập trình game với Cocos2D-JS - Giới thiệu

Cocos2D-JS là framework sản xuất game opensource, hoàn toàn miễn phí.
2014 là một năm có nhiều đổi thay lớn đến với Cocos2D-JS, bằng sự kết hợp của Cocos2d-html5 và Cocos2d-x JSB. Với nền tảng này, việc làm game support cross-platform, cross-browser, trở nên dễ dàng hơn nhiều lần. Đi kèm với đó là một hệ thống tools, APIs,... giúp cho việc "Code one, run anywhere" dễ dàng đạt đến. Cách viết game là consistent cho các nền tảng khác nhau, Mac OS X, Android, iOS, Windows,... và nhờ đó, bạn dễ dàng cung cấp phiên bản game của mình đến nhiều đối tượng hơn, tăng thêm các kênh phân phối game.


Với phiên bản 3.0, một số điểm quan trọng được hoàn thiện trong framework Cocos2D-JS gồm:
  • Dung nhập 2 engine game Cocos2d-html5 và native Cocos2d-x Javascript thành một bộ duy nhất là Cocos2D-JS, hỗ trợ đa nền tảng cross-platform, đa trình duyệt cross-browser
  • Cung cấp một quy trình làm việc thống nhất consistent workflow cho mọi nền tảng
  • Tiến một bước lớn trong việc cải thiện performance cho engine, cả về web lẫn native
  • Dựng sẵn hàng tá các tính năng mới, mà cần thiết ví dụ như là Facebook Integration, Assets Manager, Object Pool, JS to Objective-C/JAVA reflection, ...

Dưới đây là sơ đồ các thành phần kiến trúc được tích hợp trong Cocos2D-JS.


Requirement để làm được Cocos2D-JS

Để làm được cocos2d-js thì chuẩn bị cũng khá đơn giản, gồm:
  • IDE/Editor: Công cụ chính chủ là Cocos Code IDE. Ngoài ra, nếu bạn đã quen thuộc với các công cụ text editor khác thì bạn vẫn có thể tiếp tục dùng chúng nếu muốn.
  • Webserver: Để test project, bạn cần 1 webserver chạy trên máy của mình. Mình thường dùng XAMPP, các bạn cũng có thể dùng MAMP, WAMP,...
  • Browser: Ưu tiên test bằng Google Chrome và Safary trước.
  • Bộ cài đặt framework Cocos2D-JS download: http://www.cocos2d-x.org/download

Dựng môi trường để sẵn sàng working với Cocos2D-JS

Cocos2D Code Studio được tuỳ biến dựa trên bộ IDE Eclipse. Bạn download về và cài đặt như là đối với Eclipse, sau đó có thể sẵn sàng sử dụng bộ IDE này. Nếu bạn đang quen thuộc với các IDE hoặc tool text editor khác, bạn có thể tiếp tục sử dụng chúng theo sở thích mà không gặp phải khó khăn gì.
Cũng theo đường link trên, bạn cần down bộ framework về. Xả nén ra một nơi an toàn là được.

Thứ Sáu, 13 tháng 2, 2015

Các công ty tuyển dụng cần gì ở lập trình viên PHP?

Để tuyển dụng được một lập trình viên tốt, thì nhà tuyển dụng thường đặt khá nhiều kỳ vọng vào các kỹ năng mà lập trình viên đã tự trang bị được cho mình, chẳng hạn như: làm việc nhóm, độc lập, tư duy tốt, tự tìm tòi và học hỏi, nghiên cứu nhanh,...
Trong bài này, chỉ bàn riêng về chuyên môn trong lĩnh vực PHP, các nhà tuyển dụng cần gì ở một lập trình viên? Bạn đã chuẩn bị được những kỹ năng gì để đi xin việc làm một lập trình viên PHP.


Những kỹ năng bắt buộc

Những kỹ năng dưới đây là bắt buộc khi bạn làm một lập trình viên PHP.

Bắt buộc 1: Nắm chắc kiến thức cơ bản về lập trình web với HTML, CSS (và cả JS thì là tốt nhất)

PHP là để lập trình web, mà HTML+CSS(+JS) là bộ cơ sở đi với nhau, và do đó, bạn muốn làm web mà không biết HTML+CSS thì chắc chắn là không thể được. Thực tế, với HTML+CSS bạn không cần phải biết tường tận mọi ngõ ngách, không cần phải siêu đẳng, thế nhưng những thứ thường gặp bạn cần phải nắm rõ.
Ví dụ:
- Với HTML bạn cần hiểu biết trong đầu về thẻ là gì, các thẻ thường làm có meta, div, các thẻ h, span, p, a, form, ...
- Với CSS bạn cần hiểu biết về: border, padding, margin, float, overflow, z-index, background, color, :hover,...
- Với JS: bạn có thể làm chưa quen, nhưng bạn cũng cần phải đọc được các câu lệnh JS đơn giản để: show/hide element, get/change/remove css class,...

Những thứ trên là các kiến thức rất cơ bản, nếu bạn không nắm chắc, hãy kiếm những quyển sách rất đơn giản và học lại, làm theo những bước trong sách hướng dẫn, thử thay đổi các tham số để hiểu rõ hơn về việc mình thực hành.

Nhấn mạnh lại một điều nữa để bạn hiểu rõ, Không nắm được HTML+CSS, đừng nghĩ đến chuyện làm WEB, và cũng đừng nghĩ đến chuyện làm PHP.


Bắt buộc 2: Về ngôn ngữ PHP

Bạn làm về PHP, rõ ràng bạn phải hiểu được cơ bản về nó. Cách bạn đặt biến như nào, đặt hàm như nào, làm thế nào để gọi,... rồi những vấn đề cơ bản như: hiển thị một chuỗi lên HTML bằng PHP như thế nào, PHP kết nối đến DB như là MySQL ra làm sao,... Bạn có thể quên quên nhớ nhớ, nhưng khi đưa code có sẵn ra bạn phải đọc được và hiểu được, rồi mới tính đến chuyện tự tay code được. Bạn đọc hiểu code có sẵn không được thì làm sao mà code được.

Những kỹ năng cạnh tranh, làm lợi thế

Nếu bạn tu luyện được một trong các kỹ năng dưới đây, ngoài việc tăng khả năng kiếm được một công việc như ý về PHP, bạn còn có lợi thế nhất định khi đàm phán lương bổng.

Thành thạo một, hoặc nhiều thì càng tốt, các PHP framework

Với cộng đồng PHP lớn mạnh, cũng như vị trí của bộ sậu PHP-MySQL trong thế giới web, thì việc mà có vô số các sản phẩm opensource, hoặc có phí là điều dễ hiểu. Tương tự đó, rất ít các công ty phát triển web làm từ đầu sản phẩm của mình, mà thường dựa vào một nền tảng framework nào đó để tuỳ biến. Nhất là các công ty ở Việt Nam, có rất ít công ty bỏ tiền ra đầu tư làm từ đầu sản phẩm của mình. Do đó, bạn nắm được nhiều framework thì bạn lại càng có nhiều lợi thế hơn khi xin việc cũng như khi đàm phán lương bổng.

Các framework đáng chú mà các bạn cần bỏ thời gian nghiên cứu, làm thử gồm:
- Về CMS: Wordpress, Joomla, CakePHP, Yii, Laravel, ...
- Về eCommercer: Magento, OpenCart, Shopify,...
- Ngoài ra, còn có một số khác, mặc dù ít gặp ở VN nhưng không phải là không cần: CRM như Sugar hoặc Tiger,...

Thành thạo làm Responsive



Với thời điểm bùng nổ smartphone, tablet iOS, Android như hiện tại, việc có thêm kỹ năng làm web Responsive là cực kỳ quan trọng. Các website lớn, hoặc chuyên nghiệp sẽ yêu cầu điều này. Việc học cách để làm responsive này cũng không tốn nhiều thời gian, vì cũng như PHP, hiện có rất nhiều framework giúp cho các bạn về việc này. Và do đó, tôi recommend, hoặc xúi các bạn cũng có thể nói là vậy, nên học thêm Bootstrap, sau đó là Foundation framework. Ngoài ra cũng nên dành thời gian tìm hiểu thêm việc ứng dụng HTML5, các hiệu ứng CSS mới,...

Thành thạo các Javascript framework, tối đặc biệt JQuery

Tương tự với các quan điểm trên, bạn cũng nên nắm được vững cách sử dụng JQuery. Tài liệu hướng dẫn rõ ràng dễ hiểu, các biện pháp giải quyết khó khăn bằng JQuery nhiều vô kể. Và cũng có vô số người sẵn sàng giúp bạn trên StackOverflow.


Một số kỹ năng, hoặc hiểu biết khác

Ngoài những điểm đề cập trên, thật tuyệt vời nếu nhà tuyển dụng cũng biết được bạn thành thạo, hoặc đã từng làm, hoặc có hiểu biết, hoặc thậm chí là có nghe nói đến một số các thứ sau đây:
- Kỹ thuật về AJAX với JQuery.
- JSON
- Restful Webservices
- Tương tác với web API, request header, response header
- AngularJS
- Thành thạo các tool như Sublime Text, Notepad++, IntelliJ IDEA,...
- Cách deploy một web PHP lên hosting bằng FTP, CPanel,...


Bạn cũng nên theo dõi blog này thường xuyên, tôi sẽ post các bài hướng dẫn lập trình từ cơ bản đến phức tạp trên một số lĩnh vực như web, android, ios...


Thứ Bảy, 7 tháng 2, 2015

6 lỗi chết người thường mắc phải khi phát triển ứng dụng mobile


Việc phát triển ứng dụng dành cho mobile, đang thu hút được sự chú ý lớn, thậm chí là sự yêu thích, muốn hướng tới của nhiều lập trình viên, nhiều công ty khởi nghiệp. Tuy nhiên các lập trình viên sẽ rất dễ gặp phải thất bại nếu thiếu kinh nghiệm khi bắt tay vào xây dựng app cho riêng mình. Để trở nên thành công, và cũng như là giữ được thành công, đòi hỏi không chỉ sự hiểu biết về việc mình cần làm, mà chúng ta cũng phải hiểu được cả những gì không nên làm.

Bạn có thể biến ý tưởng tuyệt vời để thành một app "gone-with-the-wind" - lên như diều gặp gió, sau khi đã tránh được những lỗi có thể, ngay từ đầu bắt tay vào xây dựng ứng dụng.

Dưới đây là 6 lỗi thường gặp, và bạn nên tránh nó càng sớm càng tốt; hoặc nếu không, bạn có thể sẽ phải đối mặt với những lỗi nghiêm trọng trong ứng dụng của mình.

Chỉ xây dựng cho những nền tảng thông dụng nhất

Trong vương quốc của smart phone, bạn dễ dàng nhận thấy rằng IOS và Android hiện đang đóng vai trò là những người chơi chính mạnh mẽ chiếm hầu hết thị phần. Nhưng bạn cũng cần nhớ rằng, những thiết bị của Black Berry, của Microsoft với thương hiệu Lumia (mua lại từ Nokia) chạy Windows Phone, mặc dù chiếm tỷ trọng không lớn, nhưng không ai dám khẳng định một ngày kia những OS cùng với các thiết bị này sẽ trở nên lớn mạnh hay không; hay bị bại trận hoàn toàn phải biến mất.

Hẳn bạn đã từng nghe nói rằng: "Người dùng iOS sẵn sàng chi tiền ra nhất". Tuy nhiên bạn cũng có thể nghe thấy ở đâu đó, có báo cáo nói rằng: "Các thiết bị Android đang làm mưa làm gió trên toàn cầu, ở khắp các phân khúc từ giá rẻ - trung cấp - đến cao cấp". Như vậy, bạn là một developer, bạn quen thuộc với iOS, bạn chỉ "chơi" với iOS. Thế thì bạn đã bỏ qua phần lớn những người dùng smart phone khác đang sử dụng Android, Windows Phone rồi. Bạn cũng quên rằng, người dùng iOS sẵn sàng bỏ tiền ra cho ứng dụng, nhưng bạn cũng biết rằng họ đủ thông minh để sẵn sàng chi tiền ra cho những thứ đáng tiền. Còn những người dùng Android lại có những suy nghĩ khác.

Bạn là một developer, và thật thông minh nếu bạn cố gắng làm cho ứng dụng của mình xuất hiện trên nhiều nền tảng nhất có thể.

Làm App như là một bản thu gọn hoá của Website của bạn

Đây là một suy nghĩ rất sai lầm. Website được thiết kế chạy trên những máy PC. Và nó có nhiều sự khác biệt khi hiển thị trên mobile. Người dùng PC sẽ chấp nhận chuyện họ nhấn vào đường link, ngồi chờ trang web được tải về. Nhưng khi dùng app trên mobile, họ sẽ rất thấy nhàm chán khi nhấn vào nút trên ứng dụng của bạn mà sau đó phải chờ đợi để content được load về một cách chậm chạp, hoặc tệ hơn, đôi khi nhấn xong không thể hiểu được app đang làm gì vì không nhận thấy sự thay đổi trên màn hình. Một app mobile, ngoài nội dung là điều quan trọng, thì thứ quan trọng nhất lại là việc tạo ra một trải nghiệm tốt, tương tác tốt với những thao tác "chạm - touch" trên màn hình cảm ứng, cũng như phản xạ bản năng của con người khác sẽ khác khi sử dụng mobile so với PC. Không chỉ thế, thiết bị mobile thì rất đa dạng về kích thước màn hình, độ phân giải màn hình, rồi là sự thay đổi về hiển thị khi dùng máy ở tư thế nằm ngang, sẽ khác với dọc. App mobile sẽ cần được thiết kế để tận dụng được tối đa khả năng hiển thị trên một nhiều loại màn hình từ bé đến lớn.
Do đó, app cho mobile cần được thiết kế để đáp ứng được các đặc điểm trên.

Không đặt ưu tiên cho việc tạo ra tiền khi làm app


Bạn là developer, bạn có ý tưởng hay, đồng thời bạn có suy nghĩ rằng, với ý tưởng này thì mình sẽ nhanh chóng kiếm ra được tiền. Điều này là rất nguy hiểm. Thế giới ứng dụng phải cạnh tranh rất khốc liệt. Developer viết ra app, ngoài việc đam mê, nó còn là nguồn thu nhập nữa. Nếu developer không bắt đầu tìm cách làm ra tiền ngay từ lúc bắt đầu, thì tinh thần của anh có thể bị hạ rất nhanh trong thời gian ngắn, và anh kết thúc bằng một sự thất bại.
Bởi vậy, anh phải có kế hoạch trong đầu xem anh tạo ra tiền như thế nào. Có nhiều cách để kiếm tiền từ app, ví dụ như: subscription (yêu cầu người dùng đóng tiền theo tháng để sử dụng), freemium (miễn phí sử dụng, nhưng bán nội dung). Và bạn có thể thấy được nhiều app đang kiếm tiền bằng những phương thức đó. Nhưng, bạn cũng xem xét cách mà bạn kiếm tiền bằng app của mình sớm, bởi vì cách thức đó sẽ ảnh hưởng đến thiết kế kỹ thuật khi bắt đầu viết app.

Quá tin tưởng về Doanh thu Sản phẩm của bạn khi bắt đầu phát triển

Hầu hết các nhà sáng chế đều sống dưới một niềm tin rằng họ có thể phát minh ra thứ tốt nhất mà cả thế giới sẽ sử dụng trong thời của anh ấy. Và tương tự, người ta cũng thường tin tưởng rằng, một khi mình bắt đầu khởi chạy sản phẩm, thì rất nhanh sẽ bán được rất nhiều dựa vào giá trị mà nó mang lại. Điều này thật là tuyệt vời, có thể là như vậy, nhưng nó còn phụ thuộc vào khả năng promote, quảng cáo của bạn.
Không phải mọi sản phẩm là dành cho tất cả mọi người, và do đó bạn phải tìm hiểu được thị trường. Và điều cần thiết là bạn phải nắm được thị hiếu, nhu cầu của khách hàng mà bạn đang hướng tới cho ứng dụng. Một khi bạn đã define - định nghĩa rõ được điều này, hãy cố gắng xây dựng ý tưởng của bạn quanh mục tiêu đó. Và như vậy, ngay khi bạn khởi động app, những khách hàng đó sẽ sẵn sàng tải app của bạn, vì họ cần, và app của bạn đáp ứng được nhu cầu của họ.

Chỉ Test - kiểm tra ứng dụng của bạn đến phiên bản Beta

"Two is always better than one"-"2 luôn hơn là 1" - câu này cũng vẫn đúng trong thế giới ứng dụng. Đừng quá phụ thuộc vào một vài phương pháp bạn đã kiểm thử trong bản beta test. Bởi vì khi bạn phát triển app, bạn sẽ có một vài tư tưởng kiểu như "app của mình viết chắc chắn là ngon", "code của mình chắc chắn là xịn", "chắc chắn là hết lỗi rồi",... vì bạn là người develop ra nó, bạn nắm nó rõ nhất. Và <strong>bạn biết cách sử dụng app mà không gây ra lỗi</strong>. Đây chính là điểm chết người. Khi app được tung ra, hàng đống complain, exception từ người dùng report về sẽ khiến bạn đau đầu.
Do đó, bạn nên cố gắng tìm cách nhờ bên thứ 3, hoặc một đơn vị nào đó test sản phẩm của bạn. Bạn hãy lắng nghe những ý kiến của họ, kể cả những lời khen và lời chê. Tìm hiểu ra những điểm chưa đáp ứng được, những điểm chưa hài lòng. Cố gắng điều tra xem mình đã sai ở bước nào, bạn thiếu ở điểm nào.

Không tối ưu hoá app

Bạn có thể từng nghĩ rằng "app chạy được là được rồi" khi release ứng dụng của mình. Tuy nhiên có những vấn đề có thể bạn chưa thấu đáo hết.
Một quan điểm đã được trình bày một phần ở trên, khi nói về việc mobile app không nên là một bản thu gọn của website. Lối mòn suy nghĩ (mindset) khi người dùng app sẽ khác với dùng web. Vì thế, bạn hãy quan tâm đến tốc độ xử lý, sự chiếm dụng bộ nhớ trong khi app của bạn hoạt động. Người dùng chắc chắn sẽ không thích app của bạn tốn quá nhiều bộ nhớ, hoặc xử lý quá lâu mỗi khi thao tác trên ứng dụng của bạn.
Và tương tự, chắc chắn rằng họ sẽ không thích hơn nữa nếu app của bạn sử dụng quá nhiều băng thông data, vì điều này ăn vào túi tiền của người dùng một cách vô lý. Vì vậy, hãy optimized-tối ưu hoá, app của bạn đến mức tối đa.