Skip to main content

Building Blocks of My First Native App





A few months back when I was at the NASSCOM Tech-Unique (yes the second version of the It-NIketan where I had to deliver a speech last time) it seemed the event mostly centered about how Mobile Web is emerging and how we should embrace it.
In the discussion there we several interesting points raised and people started dragging PhoneGap in. While this was a very interesting topic, it disturbed me for certain reasons.


I raised my worries, and unfortunately the speakers or the panel couldn't come to any solutions. So I am still at a loss for the cons of this method.
Nevertheless I decided to put my mind out on the matter.


I consider myself well-versed in web development, and I was excited about the features that PhoneGap brings to web apps. Going the HTML5 web app route seemed like the most sane route.


Pros
  • You don't have to learn any new languages if you're already a decent web developer
  • It's very quick to prototype
  • Though we didn't end up using it, jQuery mobile is pretty neato and makes it even faster prototype
  • Lots of library options for pretty much everything you could possibly want
  • It's really cool and fun
  • If you so wanted to, you can bypass the app store by hosting the files on a server, and utilize app cache to make things speedy. Changing your app is just changing a web page and its cache manifest file
  • Managing images for multiple devices is a lot easier with CSS and media queries than it is for an iOS xcode project and an Android project with its ldpi, hdpi, xdpi, and whatever dpi.
  • Easier to create vector graphics to design spec
  • Hell, it's just easier to get things to be exactly like the design (except if you care about cross-browser compatibility)

Cons
  • There are a lot of mobile browsers out there (the state of browsers is worse than its ever been in terms of how many different crappy ones we have to support - it used to be just one, but guess how many people are on android 2.x and wp)
  • There are a lot of mobile devices out there with varying hardware, screen sizes, and network speed
  • Some features you're used to using aren't there for all devices (position: static for instance) and since those are likely the crappy devices, using a javascript shim (like iScroll) is out of the question if you care about performance
  • There seems to be some version issues with the facebook-connect plugin for phonegap (cordova) and the latest versions of phonegap on iOS only - To get facebook connect and PhoneGap to work I had to use an older version of PhoneGap
  • Documentation for PhoneGap itself is pretty decent, but it's still new, so not a whole lot of people have reliable information on current versions (at least this was the case 5-6 months ago)
  • Since I had to use an older version of PhoneGap, I found that some of their api functions would cause javascript errors. I had to bypass the sugar they provide and call PhoneGap.exec directly on their com.phonegap.whateverFunctionality - It was ugly, but it worked
  • There are complications with linking to other apps like Google maps
  • I found that saving contacts did not work on all versions of iOS
  • jQuery Mobile + Backbone is more of a pain in the ass than you think
  • Getting neato transitions can be a pain
  • There are less facilities in javascript for modularization of large-scale applications than Objective-C or Java

If your app is simple, then I recommend it. I really did enjoy the process and seeing my web app as an installed app. But, just know that it is more trouble than it appears to be

Popular posts from this blog

LibrePlanet 2017: Liberating your open source experience

LibrePlanet is a yearly gathering of free software activists, users, and contributors—and, it's my favorite conference of the year. Here's why.
LibrePlanet is run by the Free Software Foundation, and has steadily evolved from a yearly members' meeting with presentations from staff and board members to a full blown two-day conference with speakers and attendees from all over the world. The event brings people who care about free software together to talk about the future of the movement, address current challenges, and celebrate successes.
Prelude I was invited to give a talk at LibrePlanet 2017 on 25th March at MIT, in Cambridge, Massachusetts representing Mozilla as a Tech Speaker. I reached Boston on 25th early morning. Around 1 AM. The journey itself was awesome till I realized that you don't get Uber or Lyft at Boston Airport.

Not that the apps don't function there. They work! Just no driver will be ready to pick you up from Airport at that time. After trying t…

All Hands 2016: MozLondon, A recount

I recently had the opportunity to take part in Mozilla All Hands 2016 (a.k.a #MozLondon). Mozilla All hands. All Hands are bi-yearly events of Mozilla where all the paid staff from different teams around the globe meet with each other along with a handful of invited volunteers to disscuss about future projects and get some work done! This year it was in London and just immediately before Brexit (I actually didn't even know about it before I went there). It was a work week, so essentially the event spanned from Monday to Friday. I arrived at LHR on Monday morning, and then there was the awesome Heathrow Express which took me to Paddington, just a 7 mins walk away from Hilton Metropole where I was staying with a bunch of other people. The event started with all of us having an evening orientation familiarizing us with rules and regulations along with Code of Conduct(that turned out to be really important later on...).  Tuesday started with a Planery. Which you can see if you are lo…

Maximum Call Stack size exceeded: My mishap with nodejs and MongoDB

Working with nodejs is always an adventure and mix MongoDB with it, and it becomes very interesting for a nodejs enthusiast like me.

While working on a pet project involving Native MongoDb driver and nodejs I encountered a weird problem.

RangeError:MaximumcallstacksizeexceededAs usual my first thought was to Google out what I was facing and googling it out led me to the following to links.RangeError: Maximum call stack size exceededCalling Model.collection.save() RangeError: Maximum call stack size exceeded Also In some posts in MongoDB’s forum I saw that peoples said saving in `process.nextTick` or wrapping the call function in `parseInt` will also fix the problem, but it most certainly didn't work for me.So I started digging in on my own and soon enough found the reason.

If you’re trying to save a document and saving process somehow exited with an RangeError: Maximum call stack size exceeded exception, it’s related to what you want to save in the database. I had this problem a…