Think Big, Act Small, Fail Fast and Learn Rapidly


Pros and Cons of Cross-Platform Mobile App Development

Key takeaways

  • Current implementation of cross-platform tools
  • Overview of popular cross-platform systems
  • How and where to benefit from cross-platform development
  • Common pitfalls and shortcomings of cross-platform apps
  • Comparison of different cross-platform approaches

The world has gone mobile. It has become a “must have” element for any organization, regardless of its size. Undoubtedly, some organizations can concentrate on only one mobile OS (operating system) and avoid all the other ones, yet it is important for many businesses to focus on a myriad of mobile devices with various operating systems. Gone are those days when you were satisfied with only having a mobile app. Today, it is important that the app must support Android gadgets, iPads, Windows Phone, Amazon Kindle, Tabs, BlackBerry, etc. 

One of the most challenging situations for app developers is, whether to develop a native mobile app or go for cross-platform. Of course, as a business, you require dealing with different types of customers who possess different types of devices. Therefore, you'd need to have a mobile app that could work seamlessly on almost all the platforms (i.e. Android, iOS, Windows, etc.)

What are cross-platform apps? 

In ideal scenario, cross-platform apps work on multiple operating systems with a single code base. There are 2 types of cross-platform apps:

  1. Native Cross-Platform Apps
  2. Hybrid ‘HTML5’ Cross-Platform Apps

Native Cross-Platform Apps

Every major mobile operating system has its own SDK (Software Development Kit) to create mobile apps. These SDKs also have preferred programming languages which are supported by the OS vendor. For example, for iOS, Objective-C and Swift are the preferred programming languages supported by Apple, whereas for Android, Java is the preferred language supported by Google. Generally, apps created with these languages using the official SDK are called as “native apps”.

However, it is possible to use APIs (Application Programming Interface) provided by the native SDK, in other programming languages which are not supported by the OS vendor. This is how “cross-platform” native apps are created. Generally, a third party vendor chooses a programming language and creates a unified API on top of the native SDKs provided by the various OS vendors. Using this unified API, it is possible to support multiple operating systems with a single code base. The third-party vendor generally provides an IDE (Integrated Development Environment) which handles the process of creating the native application bundle for iOS and Android from the single cross-platform codebase.

Since, the final app produced still uses the native APIs, the cross-platform native apps can achieve near native performance without any visible lag to the user.

Current State of Implementation

Though creating cross-platform native applications is possible today, the current state of implementation is far from complete. Most of the mobile apps are heavy on the GUI (Graphical User Interface) implementation side. Almost all the critical business application logic resides on the server which is accessed by the mobile via web services.

Since the User Interface (UI) and User Experience Design (UXD) of iOS and Android are quite different from each other, it’s not an easy task to create a uniform GUI wrapper on top of it. Though Xamarin and others have put in significant work on this front, it is far from perfect. It works well if you design your application to live within the framework’s limitation, however, if you need anything that doesn’t fit with the framework’s vision, it requires a lot of work to implement and requires writing platform specific code. To give you an example, in Xamarin Forms, it takes a lot more work if your designer chooses to give custom colored borders to text fields. As this is not obvious to the designer, once you have settled in on the design, the programming team needs to put in a lot of efforts to pull off this seemingly simple design. Xamarin is working hard to provide more advanced cross-platform UI components under their Xamarin Forms Labs project. But many components of this project are still under beta status.

One popular approach taken in native cross-platform development involves writing business logic and web service calls using cross-platform libraries while GUI related code is written with platform specific libraries. Depending on the application, this can allow 30% to 60% code reuse.

Popular Native Cross-Platform Frameworks

    1. Xamarin: A California-based software company, which now is backed by Microsoft, founded in 2011. Xamarin uses C# as the main language for the cross-platform development. C# is a statically typed language with mature tooling and IDE support. Also, many big companies have C# programmers already in their in-house IT departments. So,  enterprises tend to regard Xamarin as a good investment.
    1. Appcelerator Titanium: One of the earliest players in this domain. They launched iOS support in 2009 while Android support was added in 2012. Appcelerator Titanium uses JavaScript as the main language for development and aims at bringing familiar web development paradigms to native mobile application development. However, it somehow didn’t capture the mainstream attention but lots of applications development is happening on top of it. Appcelerator also has a proprietary paid MBaaS (Mobile Backend as a Service), which it is pushing more. In the early days, Titanium had quite a few issues which were discussed widely in the blogosphere. This may also have hampered its adoption.
    1. NativeScript:Like Titanium, NativeScript aims at making web-like programming available to app development. NativeScript was announced by Telerik, a company which is famous for its suite of GUI components for enterprise applications in 2014. It uses JavaScript as the main development language. Native script also supports TypeScript, Angular and uses CSS for styling. Compared to the other technologies mentioned above, NativeScript is relatively new but it has a lot of potential.
    1. QT: QT is one of the oldest cross-platform desktop development libraries around, released 21 years ago, in the year 1995. They added support for cross-platform iOS and Android applications in 2013. QT uses C++ along with QML (Qt Meta Language or Qt Modeling Language- it’s a markup language similar to HTML) to create cross-platform applications. However, QT GUI components, by default, don’t follow the look and feel of iOS and Android. Also, C++ is not an easy programming language because of its huge syntax, manual memory management and standards compatibility issues. However, in the hands of experienced C++ programmers, QT can be quite productive.
  1. RubyMotion: RubyMotion is the main language for the development. One of the early players in this domain. When first announced in 2012, it was for iOS only, but supports both iOS and Android, since 2014. Rubymotion requires separate GUI code for iOS and Android, however, business logic can be reused across-platforms.

Hybrid ‘HTML5’ cross-platform Apps

Mobile apps are essentially GUI applications. Most mobile apps depend on backend web services for large parts of their business logic. Roughly speaking, in mobile apps, especially in the business process automation domain, almost 60% of the code deals with creating and managing the GUI.

iOS, Android and Windows Phone, all have a very advanced browser component in their SDKs. By leveraging this WebView component, programmers are able to use standard HTML5 web technologies to design and program parts of their application. So in the end, the application is composed of at least a native frame and HTML/JavaScript executed in a WebView – which is why they are called “hybrid”. Application features which need sensor input like geolocation, camera or lower level functions like accessing the file system usually use some JavaScript-to-native bridge provided by the hybrid application framework.

 The image below shows the architecture of a typical hybrid application:

Cordova / PhoneGap

Apache Cordova which was originally named as PhoneGap (launched in early 2009) is the most popular hybrid cross-platform framework. It supports most of the major modern smartphone operating systems. Since in hybrid cross-platform frameworks HTML and CSS are used to create GUI, almost all of it can be used across different operating systems. With libraries like framework7 ( it is also possible to support the underlying operating system's default look and feel using CSS-based themes.

In hybrid applications the HTML, CSS and JavaScript code is shipped along with the application. Therefore, there is no delay in loading the UI related code, like you would experience it when loading websites over the network. On modern powerful phones, it’s possible to create a snappy UI with HTML5 technologies. Especially for B2B apps, it’s possible to have 85-90% code reuse across-platforms with Cordova.

The image below which will help to put all the mobile app development options in single perspective:

To summarize, here are the pros and cons of the cross-platform mobile app development:

Pros of cross-platform mobile app development

    1. With careful planning around 50%-80% code reuse can be realized across-platforms. This results in faster development and reduced costs.
    1. Cross-platform development provides more benefits during the maintenance period. If a bug is found in a common codebase it needs to be fixed only once.
    1. Unit tests are required to be written only once for the common code, hence the saved budget can be used to write more thorough unit tests.
    1. It is possible to use existing programming talent rather than learning platform specific development language.
  1. Ideal for B2B apps and business process automation apps, where time to deployment and efficient utilization of resources is more important than sleek look and feel.

Cons of cross-platform mobile app development

    1. In general, phones are not as powerful as desktops when it comes to raw processing power. Many mid-level and entry level phones don’t have enough hardware power to perform smooth HTML5 animations. Because of this HTML5 hybrid apps can lead to sluggish UI on low and mid range phones.  Also since browser components have evolved with the operating systems, it’s relatively painful to support operating systems which are more than three years old.
    1. Rendering modern HTML and CSS which uses advanced features like gradients requires a lot of CPU and GPU resources. Thus, HTML5 based apps consume significantly more battery compared to native apps or native cross-platform applications.
    1. Usually, HTML5 hybrid apps depend on callback-style programming to communicate with native plugins, which makes the code unnecessarily complicated. Also for some tasks, this might lead to impractically slow solutions.
    1. Native cross-platform app SDKs are not mature yet. GUI needs to be coded multiple times to obtain platform specific look and feel.
    1. Many successful apps are developed as native apps (either Android or iOS) because designing and building an app for multiple platforms with platform-specific user experience is too difficult. This is due to all platforms defining their own human interface guidelines and supporting them with a single code base turns out to be very challenging.
  1. Mobile operating systems are evolving at a very rapid rate. Every year there are more and more features being added. This creates more work for the cross-platform SDK vendors who need to bring out new versions of their SDK within a short time after the release of a new operating system version. Sometimes, it also requires a lot of work on the developer’s part to upgrade an app to newer versions of the cross-platform SDK.

To conclude this in one line, even though native app development offers 100% platform compatibility and smooth performance, for B2B solutions and for business process automation projects, native cross-platform or HTML5 hybrid application development techniques can offer good enough performance in a more cost effective manner.


Make Your Cornell Notes Template with Word

Một phương pháp ghi chú khá hay, nên tìm hiểu và áp dụng để tăng khả năng ghi nhớ của bạn.

It amazes me how much school has changed since I graduated. One change is the Cornell Notes method. Despite being one of the most popular systems around, I’m told there isn’t an online paper supplier. Rather than pulling out a ruler or calling college bookstores, I thought this would be an opportunity to show you how to create a Word template for Cornell notes (Check Resources sections for Cornell Notes template for Microsoft Word.)

If you’re not familiar with Cornell Notes and the benefits, then take 5 minutes to watch this video presented by a teacher.

Word templates are a special type of file designed for reuse. Templates provide the structure and more items such as auto text entries and macros. They are the basis by which Word documents are created whether it’s a new document or a sales letter. In fact, Word starts by opening a blank page based on an auto start macro in the normal.dotm template.

Microsoft comes with many pre-built templates and groups them by function. You may have other templates that add-in tools or programs have created. You see this interface when you select File | New. You’ll see a listing of your available templates. On the top row

Available templates in Word

How to Create the Cornell Notes Template

If you’ve not seen the Cornell Note-taking system, it divides a 8.5″ x 11″ page into three sections: Cue Column (1), Note taking Column (2) and Summary (3).

Cornell notes page layout

Depending on your preferences, some people like to have the note taking area (2) lined like notepaper. For our template, we’ll add the lines.

Setting the Template Page dimensions

    1. Open a new Word document
    2. From the Page Layout tab, select Margins
    3. Click Custom Margins… from the bottom of the drop down.
    4. In the Page Setup dialog enter 0 for Bottom, Left and Right margins. For Top, use 1″.

Setting Word margins

  1. Click OK. (If you get a message saying your margins are outside the printable area, click Fix and then OK.)
  2. Press your Enter key once.
  3. Press Enter1x in case you ever want to add leading text like class name.

Creating the Table

  1. From the Insert tab, select Table.
  2. From the Insert Table menu, select Insert Table…
  3. On the Insert Table dialog, enter 2 for columns and 34 for rows.
  4. Click OK. You should now see your table.
  5. Right-click in any table cell in column 1. From the menu, click Selectand then Column. This should turn column 1 blue.
  6. Right-click again and select Merge Cells

Merge table column cells

You should now have 2 equal-width table columns. The first column will not have any lines.

Setting Table Column Widths and Row Height

In the initial example, you can see that the 2 columns are differing widths so we need to define those. You may also adjust the column widths and row height to your desired settings.

    1. Right-click column 1 and select Table Properties…
    2. Click the Column tab, and enter 2.4 for the Preferred width.

Set table column width

  1. Click the Next Column button >>.
  2. Enter 6.0 for Column 2 Preferred width.
  3. Click the Row tab
  4. Click the check box for Specify height and type 0.25.
  5. In the Row height is field, select Exactly.
  6. Click OK.

If you go to Print Preview, you will see the cell lines in the Cue column (1) do not display and you have a summary area (3)at the bottom. I intentionally added 1″ before the table as it makes it easier if you need to adjust the position or add a description.

Saving the Template

    1. From the File menu, select Save As.
    2. In the Save As dialog, navigate to your Templates folder. This will vary based on your profile. As example, mine is:


The Microsoft Community has several posts on template locations. Alternatively, you can right-click on an existing icon in your My Templates area and look at the file location.

Word template file location

  1. At the bottom of the dialog, type Cornell Notes as your File name.
  2. Change the Save as type to Document Template (*.dotx).
  3. Click Save.

Using the Cornell Note-taking Template

  1. From the File menu, select New.
  2. Click the icon for My Templates on the top row.
  3. Click the Cornell Note template.
  4. Click OK.

Your document will open and you can make further changes. For example, some people may want to adjust the top area to type class name and date. That’s why I added the paragraph break before the table. Other people put their name in case the notes are lost. Finally, print out how many copies you’ll need and head to class.

Additional Resources

word-icon-smallCornell Notes Template for Microsoft Word

PDF iconPDF Template


7 bài học quý giá từ tổng thống Benjamin Franklin

Benjamin Franklin, vị tổng thống Mỹ được in hình trên tờ 100 đô-la là con người của hành động. Trong suốt cuộc đời của mình, sự tò mò về những điều mới mẻ và đam mê của ông đã mang đến cho ông nhiều thành công.

Ông từng trải qua nhiều công việc như nhà văn, nhà xuất bản, nhà ngoại giao, nhà phát minh và là một trong những người có công trong việc lập nên nước Mỹ ngày nay.

Dưới đây là 7 bài học mà mọi người có thể học được từ Benjamin Franklin để thành công trong cuộc sống:

1. Nói ít làm nhiều

“Làm hay luôn tốt hơn là chỉ nói hay”.

Lời nói không có nhiều ý nghĩa. Nếu bạn chỉ nói suông về những dự định của bạn thì không thể biến chúng thành hiện thực. Chúng ta gặp không ít người mà họ chỉ suốt ngày nói về những điều mà họ sẽ làm chứ chẳng bao giờ bắt đầu những bước dù là nhỏ nhất để thực hiện chúng. Họ cuối cùng cũng sẽ bị mọi người xung quanh đặt ra một dấu hỏi lớn về sự tin cậy. Xã hội hiện đại không thiếu loại người này. Chỉ có hành động và đi thẳng vào công việc mới khiến việc đó được hoàn thành, còn không thì sẽ chẳng có điều kỳ diệu nào xảy đến với bạn.

2. Đừng bao giờ trì hoãn điều gì

“Việc hôm nay chớ để ngày mai”.

Bạn cần luôn nghĩ như vậy. Đây có lẽ là một trong những câu mà các bậc cha mẹ hay nói với con cái họ nhiều nhất. Với những thành tựu ấn tượng của mình trong cuộc sống, Benjamin Franklin luôn nói không với sự trì hoãn trong công việc. Ông là người của những mục đích rõ ràng và ông biết cách làm việc chăm chỉ để đưa tầm nhìn của mình trở thành thực tế. Biết đâu việc mà bạn định đẩy lùi tới ngày mai lại có thể tạo nên sự khác biệt lớn trong cuộc sống của bạn ngày hôm nay thì sao?

3. Luôn chuẩn bị tốt mọi thứ

“Thất bại từ khâu chuẩn bị đồng nghĩa với việc bạn chuẩn bị để thất bại”.

Bạn cần lên kế hoạch cẩn thận để hoàn thành mục tiêu của mình. Làm một việc gì đó mà không suy nghĩ về kết quả cuối cùng cũng như cách để thực hiện chắc chắn sẽ khiến mặt bạn trở nên méo xẹo khi nhìn thấy kết quả. Hãy chuẩn bị một kế hoạch thực tế và cách tiếp cận có hệ thống cho các mục tiêu của bạn.

4. Đừng chống lại sự thay đổi

“Ngừng thay đổi đồng nghĩa với ngừng hoạt động”.

Điều này có nghĩa là bạn không còn nỗ lực nữa và đang đi tới sự kết thúc. Trong khi rất nhiều người trong số chúng ta không thích sự thay đổi, nhiều người lại có thể tận dụng nó như một cơ hội. Sự thay đổi là cái gì đó tất yếu. Bạn càng cố gắng chống lại chúng, bạn càng mất nhiều năng lượng và thời gian hơn, và mọi chuyện vẫn không đi đến đâu. Do đó, hãy từ bỏ ý nghĩ chống lại sự thay đổi.

Chúng không phải lúc nào cũng hoàn toàn bất lợi. Trước tiên, hãy dồn toàn lực để tạo ra những thay đổi tích cực, thay vì để những biến động bên ngoài liên tiếp ập đến với bạn một cách thụ động. Cố gắng nhìn nhận sự thay đổi một cách tích cực thay vì theo chiều hướng tiêu cực ở bất cứ đâu bạn có thể.

5. Luôn chuyển động

“Con người có thể được chia làm ba phần: phần không thể chuyển động, phần có thể chuyển động và phần đang chuyển động”.

Đó là lý do tại sao lại có cụm từ “movers and shakers” – họ là những người khiến mọi thứ có thể biến đổi một cách tích cực trong tổ chức, những người này có thể là VIP, những nhân tố xúc tác quan trọng cho hành động của mọi người và có tầm ảnh hưởng trong các sự kiện. Nếu bạn có được những tố chất này thì mọi tổ chức và mọi nhóm luôn cần đến bạn.

6. Tránh những công việc “bận rộn” không cần thiết

“Đừng nhầm lẫn giữa vận động với hành động”.

Bạn đã từng bao giờ có cảm giác luôn chạy lòng vòng xung quanh chứ không phải đang đi vào làm cụ thể một điều gì đó? Sự thật là không ít người cũng gặp phải tình trạng này. Bạn bận rộn với các kế hoạch cá nhân và chạy “sô” với hết cuộc hẹn này tới cuộc hẹn khác, đôi khi chúng chẳng mang lại cho bạn gì cả. Cuối cùng, khi nhìn lại những gì đã làm được trong một ngày, hãy tự ngẫm xem bao nhiêu phần trăm trong số những cuộc hẹn đó thực sự có ích và cần thiết? Đừng để cảm giác luôn di chuyển và cảm thấy mình là một người bận rộn đánh lừa những gì bản thân bạn đã thực hiện được.

7. Cho phép mình mắc lỗi

“Đừng sợ mắc phải sai lầm. Bạn có thể nếm mùi thất bại nhưng điều quan trọng là tiếp tục để vượt qua chúng”.

Nếu chúng ta lo sợ những thất bại có thể gặp phải, chúng ta sẽ trở nên ngại thử nghiệm những điều mới mẻ. Cảm giác sợ hãi là một kẻ giấu mặt khiến bạn luôn nép mình trong vùng an toàn của bản thân. Một trong những nguyên tắc đã được rút ra là: nếu bạn chỉ ở trong vùng an toàn của mình thì khả năng đạt được đỉnh cao thành công là rất thấp. Chấp nhận chịu những rủi ro và cho phép mình được quyền mắc lỗi, điều này rất có thể sẽ dẫn bạn tới một “phiên bản” thành công hơn của chính mình.

Theo Internet

Benjamin Franklin thành công nhờ việc hôm nay không để ngày mai

Ông luôn tụ răn mình " Việc hôm nay chớ để ngày mai"

Benjamin Franklin là người nổi tiếng về sự ham hiểu biết của ông, bậc vỹ nhân đầu tiên của nước Mỹ từng chia sẻ: Thành công mà ông đạt được, không nhờ gì khác ngoài nghị lực phi thường và sự bền bỉ quyết tâm theo đến cùng.

Sau khi xem kỹ danh sách dài những thành tựu của Benjamin Franklin, người ta chỉ có thể rút ra một kết luận: Người đàn ông Mỹ này trong thời kỳ Phục Hưng có lẽ không có đến một ngày ngồi không trong suốt cuộc đời. Trong suốt 84 năm cuộc đời, ông đã nổi bật với nhiều vai trò khác nhau: một tác giả, thợ in, chính trị gia, giám đốc sở bưu điện, nhà thơ trào phúng, nhà đầu tư, nhạc sỹ và nhà ngoại giao. 

Những bài học thành công trong cuộc sống từ chính kinh nghiệm của ông được đúc kết lại, và truyền đạt là một bài học quý cho những thế hệ sau học tập và noi theo.

Người khôn ngoan là người "Nói ít - Nói đúng"

“Nói càng nhiều sẽ càng tạo nhầm lẫm - He that speaks much, is much mistake.”

Ông dạy rằng nên đắn đo lời nói, chỉ nên nói những điều cần thiết. Khi bản thân nói ít, bạn sẽ làm chủ được lời nói của mình, tránh được những hiểu lầm, sai lệch không đáng có. Biết điều tiết lời nói, hạn chế nói thừa thải, bạn sẽ tạo được sự chú ý và lòng tin cho người đối diện.

Giá trị lớn lao của lao động

 “Người lao động là người hạnh phúc. Người nhàn rỗi mới là người khốn khổ - It is the working man who is the happy man. It is the idle man who is the miserable man.”

Lời khuyên này chỉ ra giá trị của sự cần cù và bền bĩ trong lao động. Benjamin nhấn mạnh rằng muốn tồn tại, muốn hạnh phúc thì bạn phải biết lao động. Chính lao động làm cho con người giỏi giang hơn, hoàn thiện hơn. Mỗi suy nghĩ nhàn rỗi, ỷ lại, lười biếng đều chỉ con đường đi gần hơn với sự khốn khổ, nghèo đói trong cả tư duy lẫn vật chất.

Thiên tài cũng cần phải học

“Thiên tài mà không trau dồi kiến thức cũng giống như bạc trong mỏ - Genius without education is like silver in the mine.”

Franklin nổi tiếng là người ham hiểu biết và luôn tìm tòi đa dạng hơn các lĩnh vực mà ông quan tâm. Ông nhấn mạnh điều kiện tiên quyết dẫn đến mọi thành công chính là nỗ lực cá nhân và giá trị của lao động. Ở nhiều người, chính sự hài hoà của tài năng bẩm sinh, cộng với nổ lực từ chính bản thân mới giúp các thiên tài thăng hoa, đưa họ tới đỉnh cao trong lĩnh vực theo đuổi.

Đầu tư vào tri thức là đầu tư khôn ngoan nhất

“Nếu một người đổ hết ví vào đầu, sẽ không ai cướp nó khỏi anh ta - If a man empties his purse into his head, no one can take it from him.”

Đây là một trong những phát ngôn sâu sắc nhất của ông. Thông điệp được ông truyền tải rất rõ ràng: nền tảng của sự thịnh vượng, giàu có không gì ngoài “Tri Thức”. Hầu như tất cả những người thành công trên tất cả lĩnh vực chính là minh chứng sống cho câu nói trên – Hãy đầu tư cho chính bản thân bạn! 

Dũng cảm thừa nhận sai lầm!

“Có rất ít người đủ can đảm để thừa nhận sai lầm của chính mình, hay đủ quyết tâm để sửa chửa chúng – How few there are who have courage enough to own their faults, or resolution enough to mend them”

Cảm giác sợ hãi luôn là kẻ thù giấu mặt khiến bạn nép mình trong vùng an toàn của bạn thân, tìm mọi cách lấp liếm khuyết điểm của chính mình. Đây là cốt lõi hạn chế đưa bạn đến con đường thành công. Hãy nghiền nát nỗi sợ và học hỏi mọi đều bạn muốn.

Đừng lo lắng khi mắc sai lầm, Bạn có thể nếm mùi thất bại, nhưng điều quan trọng hơn là tiếp tục vượt qua chúng.