[{"data":1,"prerenderedAt":1521},["ShallowReactive",2],{"search-index-blog":3,"blog-\u002Fblog\u002Fdevelop-mobile-apps-phonegap":917,"surround-\u002Fblog\u002Fdevelop-mobile-apps-phonegap":1516},[4,11,19,24,30,35,41,46,52,57,62,67,72,78,84,90,95,101,107,113,118,125,130,135,141,146,151,156,163,168,174,179,185,190,195,200,205,210,215,221,226,231,236,241,246,251,256,261,266,272,277,282,287,293,298,304,309,314,319,325,330,335,340,345,351,356,363,368,373,378,384,389,394,399,405,410,415,420,426,432,437,443,448,454,459,464,469,474,480,485,490,495,500,505,510,515,521,526,531,537,542,547,552,557,562,567,573,579,584,589,594,599,604,609,614,620,625,630,635,640,645,651,656,661,666,671,676,682,687,692,697,702,707,712,719,724,729,734,739,745,750,755,760,765,770,775,780,786,791,797,802,808,813,818,823,829,834,839,844,849,854,860,865,871,876,881,886,891,896,901,906,912],{"title":5,"path":6,"description":7,"tags":8},"ADOBE ILLUSTRATOR SHORTCUTS","\u002Fblog\u002Fadobe-illustrator-shortcuts","Here are 26 Adobe Illustrator shortcuts that can help you to speed up productivity. I use most of them (in fact, I can’t work without them). Most of shortcuts listed in this article aren’t documented in the software, so keep reading and you’re sure to find at least one new trick to put up your sleeve. Enjoy!",[9,10],"design","illustrator",{"title":12,"path":13,"description":14,"tags":15},"ANGULAR CONTROLLERS SHARE STATE","\u002Fblog\u002Fangular-controllers-share-state","When your Angular.js application expands to a state that you no longer find it easy to understand, it's time you used dependency injection and modularise your application into units of interrelated modules.",[16,17,18],"development","javascript","angular.js",{"title":20,"path":21,"description":22,"tags":23},"ANGULAR TRANSLATE","\u002Fblog\u002Fangular-translate","Angular Translate is an AngularJS module called angular-translate which makes i18n and l10n easier with your Angular application. The acronym i18n stands for internationalization, and l10n for localization.",[16,17,18],{"title":25,"path":26,"description":27,"tags":28},"ANIMATION SPEED IN JAVASCRIPT AND CSS","\u002Fblog\u002Fanimation-speed-in-javascript-and-css","In this article, we go through how JavaScript-based DOM animation libraries, such as Velocity.js and GSAP, are more efficient than jQuery and CSS-based animation libraries. We will discuss how those libraries work, where to use them and what other alternatives are out there for animation.",[16,17,29],"css",{"title":31,"path":32,"description":33,"tags":34},"ARRAY COMPREHENSIONS","\u002Fblog\u002Farray-comprehensions","Array comprehension is creating a list B based on another list A, where each entry of B is the result of a custom operation performed on the items of list A.",[16,17],{"title":36,"path":37,"description":38,"tags":39},"ASYNCHRONOUS JAVASCRIPT WITH ASYNC\u002FAWAIT","\u002Fblog\u002Fasynchronous-javascript-asyncawait","'Promises are great but the its nested syntax can get easily complex and hard to follow.",[16,17,40],"react",{"title":42,"path":43,"description":44,"tags":45},"BABEL & WEBPACK","\u002Fblog\u002Fbabel-webpack","Babel has been one of the big newcomers of JavaScript community in 2015. It allows us to use features from the future of JavaScript. It will transform your futuristic code into a format, browsers understand. You can even use it to develop your own language features. Babel’s built-in JSX support will come in handy here.",[16,17],{"title":47,"path":48,"description":49,"tags":50},"BACKBONE CUSTOMIZING COLLECTIONS","\u002Fblog\u002Fbackbone-customizing-collections","Backbone collections are an ordered set of models, which only use one type of model. Customizing these collections can help your Backbone application to leverage data the way you want.",[16,17,51],"backbone.js",{"title":53,"path":54,"description":55,"tags":56},"BACKBONE – MODELS","\u002Fblog\u002Fbackbone-models","Models are the heart of any JavaScript MVC application, containing the interactive data as well as a large part of the logic surrounding it: conversions, validations, computed properties, and access control.",[16,17,51],{"title":58,"path":59,"description":60,"tags":61},"BACKBONE PATTERNS","\u002Fblog\u002Fbackbone-patterns","In this article, we’ll discuss different patterns that you can use with popular open-source JavaScript MV* framework, Backbone.js.  Developers run into problems when they first use Backbone.js as it provides structure to the application leaving the developer to make decisions on design petterns.",[16,17,51],{"title":63,"path":64,"description":65,"tags":66},"BACKBONE- ROUTERS","\u002Fblog\u002Fbackbone-routers","In the traditional MVC sense Routers don’t necessarily fit the semantics. Though a Backbone \"router\" is still very useful for any application\u002Ffeature that needs URL routing\u002Fhistory capabilities. Backbone routers are used for routing your applications URL’s when using hash tags(#).",[16,17,51],{"title":68,"path":69,"description":70,"tags":71},"BEM","\u002Fblog\u002Fbem","BEM stands for Block, Element, Modifier. BEM is a stricter standard for naming CSS classes for larger projects, where standards need to be enforced. BEM helps scale your project, and add meaning to your CSS. Therefore it is valuable to understand this convention.",[16,29],{"title":73,"path":74,"description":75,"tags":76},"BENEFITS OF AUTOMATED DEPLOYMENT","\u002Fblog\u002Fbenefits-of-automated-deployment","When deploying software manually, the tendancy is to deploy once a month or perhaps once every two or three months. Deployment doesn’t stop for production only, there are test, staging and production as well.",[16,77],"deployment",{"title":79,"path":80,"description":81,"tags":82},"BROWSERSYNC & GULP","\u002Fblog\u002Fbrowsersync-gulp","BrowserSync & Gulp are a two very useful combination when it comes to developing applications efficiently, without having to refresh the web page every time you make a change. Let’s look at what BrowserSync & Gulp are, and how to install and use them.",[16,17,83],"gulp",{"title":85,"path":86,"description":87,"tags":88},"CHROMATIC ABERRATION","\u002Fblog\u002Fchromatic-aberration","In optical lenses, chromatic aberration (also known as achromatism or chromatic distortion) is a type of  distortion in which there is a failure of a lens to focus all colors to the same convergence point.",[89],"photography",{"title":91,"path":92,"description":93,"tags":94},"CHROME DEVTOOLS FOR WEB APP DEVELOPERS","\u002Fblog\u002Fchrome-devtools-web-app-developers","The Chrome DevTools (Developer Tools), are a set web authoring and debugging tools built into Google Chrome. The DevTools provide web developers deep access into the internals of the browser and their web application. ",[16,17],{"title":96,"path":97,"description":98,"tags":99},"COFFEESCRIPT INTRODUCTION","\u002Fblog\u002Fcoffeescript-introduction","CoffeeScript is a language that makes JavaScript easier to write and read. It simplifies JavaScript, making it readable and understandable, as well easier to maintain. CoffeeScript compiles into JavaScript",[16,17,100],"coffeescript",{"title":102,"path":103,"description":104,"tags":105},"COFFEESCRIPT – JQUERY","\u002Fblog\u002Fcoffeescript-jquery","Writing jQuery in CoffeeScript, further simplifies the syntax. The jQuery(function($)) can be written as jQuery($) -> or simply $ ->.",[16,17,106,100],"jquery",{"title":108,"path":109,"description":110,"tags":111},"CONTENT AWARE SCALING IN PHOTOSHOP","\u002Fblog\u002Fcontent-aware-scaling-in-photoshop","In Photoshop CS6, content-aware scaling (also known as seam carving) is a cool image-sizing feature.",[9,112],"photoshop",{"title":114,"path":115,"description":116,"tags":117},"CREATE FAVICONS IN PHOTOSHOP","\u002Fblog\u002Fcreate-favicons-in-photoshop","'Having a favicon for your site helps users to find your web site on a bookmarks bar, or among open tabs.",[9,112],{"title":119,"path":120,"description":121,"tags":122},"CREATE A RAILS 5 API APPLICATION","\u002Fblog\u002Fcreate-rails-5-api-application","'Rails 5 ships a new gem rails-api which makes building API only rails apps a breeze.",[16,123,124],"rails","ruby",{"title":126,"path":127,"description":128,"tags":129},"CSS – CLEARING FLOATS","\u002Fblog\u002Fcss-clearing-floats","A common problem with float-based layouts is that the floats' container doesn't want to stretch up to accommodate the floats. If you want to add, say, a border around all floats (ie. a border around the container) you'll have to command the browsers somehow to stretch up the container all the way.",[16,17],{"title":131,"path":132,"description":133,"tags":134},"CSS INTRODUCTION","\u002Fblog\u002Fcss-introduction","Cascading Style Sheets (CSS) is a style sheet language used for describing the look and formatting of a document written in a markup language, most often used to change the style of web pages written in HTML. CSS is designed primarily to enable the separation of document content from document presentation, including elements such as the layout, colors, and fonts.",[16,29],{"title":136,"path":137,"description":138,"tags":139},"CSS MODULES","\u002Fblog\u002Fcss-modules","A CSS Module is a CSS file in which all class names and animation names are scoped locally by default, eleminating the problems with global nature of the CSS namespace.",[16,17,29,140],"react.js",{"title":142,"path":143,"description":144,"tags":145},"CSS3 MEDIA QUERIES","\u002Fblog\u002Fcss3-media-queries","When you are designing your responisve layout for mobile devices, CSS3 media queries are an essential component on your stylesheets. Let’s discuss how they work and what min-with and max-with work together.",[16,29],{"title":147,"path":148,"description":149,"tags":150},"DEFERRED AND PROMISE IN JQUERY","\u002Fblog\u002Fdeferred-and-promise-in-jquery","Deferred and promise are part of jQuery since version 1.5 and they help in handling asynchronous functions like Ajax.",[16,17,106],{"title":152,"path":153,"description":154,"tags":155},"DEPLOYING ASP.NET MVC APPLICATIONS","\u002Fblog\u002Fdeploying-aspnet-mvc-applications","In a continuous integration environment, deploying ASP.NET MVC applications are done by a click of a button, triggered by a check-in, and then  many moving parts of the integration service will take care of distributing the artifacts to the relevant  servers. But here we are discussing about how to get your ASP.NET code to be tested on a local IIS server environment. So let’s start with dependancies, and what needs to be included with the deployment.",[16,17],{"title":157,"path":158,"description":159,"tags":160},"DEVELOP MOBILE APPS WITH PHONEGAP","\u002Fblog\u002Fdevelop-mobile-apps-phonegap","PhoneGap is a web-based mobile development framework based on opened source Cordova project, which allows you to create app store ready mobile applications. PhoneGap allows you to use web technologies such as HTML, CSS and JavaScript for cross platform development. It was created by Nitobi in 2009. In 2011, Nitobi was bought by Adobe, and PhoneGap was donated to Apache Foundation, and PhoneGap was renamed to Cordova.",[16,161,17,162],"mobile","phonegap",{"title":164,"path":165,"description":166,"tags":167},"DODGE BURN AND SPONGE TOOLS IN PHOTOSHOP CS6","\u002Fblog\u002Fdodge-burn-and-sponge-tools-in-photoshop-cs6","The Dodge, Burn, and Sponge tools in Photoshop CS 6 can be used to correct the lighting of an image. Let’s look at each of these tools and what they are useful for.",[9,89,112],{"title":169,"path":170,"description":171,"tags":172},"EMBER & HANDLEBARS","\u002Fblog\u002Fember-handlebars","Before getting into handlebars, let's look at how routing works in Ember.js. Router is solely responsible for all URLs in Ember.",[16,17,173],"ember.js",{"title":175,"path":176,"description":177,"tags":178},"EMBER – RESOURCE ROUTES","\u002Fblog\u002Fember-resource-routes","The difference between resource() and route() in Ember.js is that you should use this.resource for URLs that represent a noun, and this.route for URLs that represent adjectives or verbs modifying those nouns.",[16,17,173],{"title":180,"path":181,"description":182,"tags":183},"ENTITY FRAMEWORK CODE FIRST","\u002Fblog\u002Fentity-framework-code-first","Entity Framework introduced Code First approach from Entity Framework 4.1. This tutorial covers all the features of Entity Framework Code-First. We will start with the basics of code-first and then we will see how we can configure one-to-one, one-to-many and many-to-many relationship with DataAnnotation as well as Fluent API.",[16,184],"csharp",{"title":186,"path":187,"description":188,"tags":189},"ES2020 New Features","\u002Fblog\u002Fes2020-new-features","Since ES2015, updates from the TC39 committee are released annually. Their latest release ES2020 comes with many new features.",[16,17],{"title":191,"path":192,"description":193,"tags":194},"ES6 ADVANCED FEATURES","\u002Fblog\u002Fes6-advanced-features","We have learned about the new features ES6 brings us in ES6 New Features article. In this post, we will go through the advanced features of ES6 and how we can implement them.",[16,17],{"title":196,"path":197,"description":198,"tags":199},"ES6 ARROW FUNCTIONS","\u002Fblog\u002Fes6-arrow-functions","Arrow functionss are a function shorthand using the => syntax (fat arrow). They are syntactically similar to the related feature in C#, Java 8 and CoffeeScript. They support both expression and statement bodies. Unlike functions, arrows share the same lexical this as their surrounding code.",[16,17],{"title":201,"path":202,"description":203,"tags":204},"ES6 CLASSES","\u002Fblog\u002Fes6-classes","JavaScript classes are simply syntactic sugar over existing JavaScript prototype chain. But classes give you a cleaner way to organise your code, and make it slightly easier for the beginner or people who are familiar with class oriented languages to read JS and understand.",[16,17],{"title":206,"path":207,"description":208,"tags":209},"ES6 DEFAULT, REST & SPREAD","\u002Fblog\u002Fes6-default-rest-spread","Many programming languages support the concept of a default argument for a function parameter so that the caller does not always need to specify the argument value. Unfortunately, ES5 does not have a default argument support in its syntax. ES6 functions have come a long way by taking aboard the years of complaints and improving parameter handling that is less error-prone and more powerful.",[16,17],{"title":211,"path":212,"description":213,"tags":214},"ES6 DESTRUCTURING","\u002Fblog\u002Fes6-destructuring","The destructuring assignment syntax is a JavaScript expression in ES6 that makes it possible to extract data from arrays or objects using a syntax that mirrors the construction of array and object literals.",[16,17],{"title":216,"path":217,"description":218,"tags":219},"ES6 GENERATORS","\u002Fblog\u002Fes6-generators","ES6 generators are functions that can be paused or resumed, and work cooperatively in a multitasking applications.",[16,17,220],"es6",{"title":222,"path":223,"description":224,"tags":225},"ES6 ITERATORS & FOR..OF","\u002Fblog\u002Fes6-iterators-for-of","To loop over an array or a collection JavaScript has been traditionally using for loops. ES5 introduced the for ..each loop. But ES6 introduces a little shorter version, a new interface for iteration called Iterable.",[16,17],{"title":227,"path":228,"description":229,"tags":230},"ES6 LET & CONST","\u002Fblog\u002Fes6-let-const","If you are familiar with JavaScript, you have probably known the term scope. If you are familiar with other languages, you would know that a scope of a variable is to the nearest block – block scope. But JavaScript is different. A variable created with var will be scoped to the nearest parent function.",[16,17],{"title":232,"path":233,"description":234,"tags":235},"ES6 MODULES","\u002Fblog\u002Fes6-modules","A module is a self-contained unit of code, which is usually stored in a file. In ES6, modules get language-level support for component definition. Modules export values, which can then be imported by other modules.",[16,17],{"title":237,"path":238,"description":239,"tags":240},"ES6 NEW FEATURES","\u002Fblog\u002Fes6-new-features","Arrows are a function shorthand using the => syntax (‘fat arrow’). They are syntactically similar to the related feature in C#, Java 8 and CoffeeScript. They support both expression and statement bodies. Unlike functions, arrows share the same lexical this as their surrounding code.",[16,17],{"title":242,"path":243,"description":244,"tags":245},"WEB APPLICATION SECURITY","\u002Fblog\u002Fes6-parameter-handling","ES6 introduced improved parameter handling in JavaScript. Instead of the half array arguments object, these new improvements will significantly improve how we handle arguments and parameters.",[16,17,220],{"title":247,"path":248,"description":249,"tags":250},"ES6 RECURSION WITH FUNCTIONAL PROGRAMMING","\u002Fblog\u002Fes6-recursion-with-functional-programming","In this article, we are going to use ES6 recursion with functional programming to understand how we can implement list operations like map, reduce, filter and join.",[16,17,220],{"title":252,"path":253,"description":254,"tags":255},"ES6 SYMBOLS","\u002Fblog\u002Fes6-symbols","Symbols are a new primitive type in ES6. If you ask me, they’re an awful lot like strings. They are tokens that serve as unique IDs. They will help avoid name clashes between properties.",[16,17],{"title":257,"path":258,"description":259,"tags":260},"ES6 TEMPLATE STRINGS","\u002Fblog\u002Fes6-template-strings","Template strings in JavaScript consist of literal text, and placeholders where the runtime can evaluate an expression to inject data into the text.",[16,17],{"title":262,"path":263,"description":264,"tags":265},"ESLINT","\u002Fblog\u002Feslint","ESLint is a pattern identifying and reporting tool for JavaScript code. Somewhat it is similar to JSLint and JSHint with few differences.",[16,17],{"title":267,"path":268,"description":269,"tags":270},"EXT JS DEVELOPING RESPONSIVE APPLICATIONS","\u002Fblog\u002Fext-js-developing-responsive-applications","Creating responsive web applications have been made easier with the arrival of the new JavaScript Framework Ext JS 5. In this article let's look at how we can use responsiveConfig to implement this feature.",[16,17,271],"ext.js",{"title":273,"path":274,"description":275,"tags":276},"EXT.JS – INTRODUCTION","\u002Fblog\u002Fext-js-introduction","Ext JS is a product of Sencha. Ext JS is the industry’s most powerful desktop application development platform with unparalleled cross-browser compatibility, advanced MVC architecture, plugin-free charting, and modern UI widgets.",[16,17,271],{"title":278,"path":279,"description":280,"tags":281},"FETCH API","\u002Fblog\u002Ffetch-api","The Fetch API is a Promise-based standard for performing AJAX requests. It provides a fetch method which returns a Promise on the window object, which we can use to perform requests from remote resources.",[16,17],{"title":283,"path":284,"description":285,"tags":286},"FOCAL LENGTH AND F-STOP","\u002Fblog\u002Ffocal-length-f-stop","Very simply, focal-length is the distance from the lens to the film, when focused on a subject at infinity. In other words, focal length equals image distance for a far subject. To focus on something closer than infinity, the lens is moved farther away from the film or sensor. This is why most lenses get longer when you turn the focusing ring.",[89],{"title":288,"path":289,"description":290,"tags":291},"FOUNDATION 5 NEW FEATURES","\u002Fblog\u002Ffoundation-5-new-features","ZURB’s Foundation framework is a feature-rich, easy to implement,  light weight framework for designing responsive web applications. Designed with mobile-first approach in mind,  it comes packed with CSS3 media queries, The Grid, reusable HTML5 components and several jQuery plugins to aid interactivity.",[16,29,292],"sass",{"title":294,"path":295,"description":296,"tags":297},"FREE PHOTOSHOP PLUGINS","\u002Fblog\u002Ffree-photoshop-plugins","There are so many amazing free Photoshop plugins you can download for Photoshop CS6 and CC. There are plugins for photo effects, noise reduction, painting, abstract art, layouts, and more! Let’s have a look at few of the best.",[9,112],{"title":299,"path":300,"description":301,"tags":302},"FRONT END PERFORMANCE","\u002Fblog\u002Ffront-end-performance","Front end performance can be a great experience or a horrifying nightmare that could highly impact the end user experience, and lead to users leaving your website.",[16,303],"performance",{"title":305,"path":306,"description":307,"tags":308},"FUNCTIONAL JAVASCRIPT","\u002Fblog\u002Ffunctional-javascript","To understand Functional JavaScript and the quirks of JavaScript, we will have to look into the history of JavaScript and how it was created.",[16,17],{"title":310,"path":311,"description":312,"tags":313},"FUNCTIONAL PROGRAMMING","\u002Fblog\u002Ffunctional-programming","Abstract control flow and operations on data with functions in order to avoid side effects & reduce mutation of state",[16,17],{"title":315,"path":316,"description":317,"tags":318},"GIT – CLONING & BRANCHING","\u002Fblog\u002Fgit-cloning-branching","Imagine you are working in a team and one of your colleagues wants a copy of the your work, how do we start collaborating?",[16,17],{"title":320,"path":321,"description":322,"tags":323},"GIT INTRODUCTION","\u002Fblog\u002Fgit-introduction","Git is a distributed source control system, that is lighting fast and different from client-server systems. In this tutorial, we will learn how to get started with Git. By the end of this tutorial, you should be able to create a Git repository, record snapshots of your project for safekeeping, and view your project's history.",[16,324],"git",{"title":326,"path":327,"description":328,"tags":329},"GIT STAGING & REMOTES","\u002Fblog\u002Fgit-staging-remotes","Let’s say you are working on your local branch, made some changes and now not sure which files you have changed, how are you going to find your changes? You can find your changes by running the git diff command as below:",[16,324],{"title":331,"path":332,"description":333,"tags":334},"GIT STASH","\u002Fblog\u002Fgit-stash","Say you are halfway done with work on a branch, but an issue with 'master' needs fixing NOW. You're not quite ready to commit what you're working on, but need to make a quick fix to master. Fear not, just stash your current changes so you can switch to master quickly.",[16,324],{"title":336,"path":337,"description":338,"tags":339},"GOOGLE DRIVE – AUTHENTICATION","\u002Fblog\u002Fgoogle-drive-authentication","When you are developing an application interfacing Google Driver API, it's mandatory to consider how you are going to handle the authentication for your user. In this article, we are discussing how to implement Google Drive Authentication for your app via its API.",[16,17],{"title":341,"path":342,"description":343,"tags":344},"GOOGLE PICKER WITH DRIVE","\u002Fblog\u002Fgoogle-picker-with-drive","\"Google Drive is a file storage service that enables users to organize, backup, and",[16,17],{"title":346,"path":347,"description":348,"tags":349},"GRUNT WATCH & LIVERELOAD WITH JAVASCRIPT & SASS","\u002Fblog\u002Fgrunt-watch-livereload-with-javascript-sass","Grunt is a task runner that has a ton of plugins for doing things like compiling LESS\u002FSASS into CSS, concatenating JavaScript, minifying, etc. It also has a package for watching files (the same way CodeKit and Prepros does) and firing off certain tasks when they’re modified.",[16,17,350],"grunt",{"title":352,"path":353,"description":354,"tags":355},"HOW TO USE GRUNT","\u002Fblog\u002Fhow-to-use-grunt","In this article, we’ll look at how to use Grunt in your project to automate some of your repetitive tasks. We’ll look at what Grunt is, how to setup Grunt and then create a simple project with Grunt doing the heavy lifting of the some of the tasks.",[16,17,350],{"title":357,"path":358,"description":359,"tags":360},"HOW TO ADD A COVER TO AN EPUB, PDF OR A KINDLE MOBI BOOK","\u002Fblog\u002Fhow-to-add-a-cover-to-an-epub-pdf-or-a-kindle-mobi-book","EPUB, PDF and Kindle MOBI books converted from other formats or downloaded from torrent sites are sometimes cover-missing, which inevitably makes the whole eBook-reading journey less satisfactory",[361,362],"technology","tips",{"title":364,"path":365,"description":366,"tags":367},"How to lint staged Git files","\u002Fblog\u002Fhow-to-lint-staged-git-files","We use linting to automate code formatting issues, to fix syntax errors and coding style. For example, you may have forgotten a semi-colon during aor bug fix you may have accidentally left a console.log statement.",[16,17],{"title":369,"path":370,"description":371,"tags":372},"HOW TO MAKE AJAX CALLS IN JQUERY","\u002Fblog\u002Fhow-to-make-ajax-calls-in-jquery","There are more than one way to make AJAX calls in jQuery. In this tutorial, let’s compare these methods as well as inspect the AJAX calls with Firebug.",[16,17],{"title":374,"path":375,"description":376,"tags":377},"HOW TO USE TELEPHOTO LENSES","\u002Fblog\u002Fhow-to-use-telephoto-lenses","Telephoto lenses are useful for wildlife and landscape photography, given their ability to enlarge distant subjects, but they’re also great for giving your photo an artistic look.",[89],{"title":379,"path":380,"description":381,"tags":382},"HTML INTRODUCTION","\u002Fblog\u002Fhtml-introduction","The language of a webpage is HTML. HTML allows you to take a plain text document created in any simple text editor and organize it into lists, link to other webpages, including images, and more.",[16,383],"html",{"title":385,"path":386,"description":387,"tags":388},"HTML5 API – LOCAL STORAGE, GEOLOCATION & OFFLINE CACHE MANIFEST","\u002Fblog\u002Fhtml5-api-local-storage-geolocation-offline-cache-manifest","Local storage is more secure, and large amounts of data can be stored locally, without affecting website performance. Unlike cookies, the storage limit is far larger (at least 5MB) and information is never transferred to the server.",[16,17],{"title":390,"path":391,"description":392,"tags":393},"HTML5 ELEMENTS","\u002Fblog\u002Fhtml5-elements","HTML5 offers new elements for improving semantics of code as well as better document structure. These elements could now be used to replace traditional HTML code like \u003Cdiv id=”nav”> \u003Cdiv class=”header”> \u003Cdiv id=”footer”>",[16,383],{"title":395,"path":396,"description":397,"tags":398},"HTML5 INTRODUCTION","\u002Fblog\u002Fhtml5-introduction","HTML5 is the latest HTML standard. It walks hand in hand with CSS3, the latest CSS standard.",[16,17],{"title":400,"path":401,"description":402,"tags":403},"HTTP2: NEW FEATURES","\u002Fblog\u002Fhttp2-new-features","HTTP\u002F2 (originally named HTTP\u002F2.0) is the second major version of the HTTP network protocol used by the World Wide Web.",[16,404],"http2",{"title":406,"path":407,"description":408,"tags":409},"IMMUTABLE.JS","\u002Fblog\u002Fimmutable-js","Immutable.js is a library from Facebook which provides immutable data structures and utilities that we can introduce to our applications",[16,17],{"title":411,"path":412,"description":413,"tags":414},"Improve JavaScript Performance with Tree Shaking","\u002Fblog\u002Fimprove-javascript-performance-with-treeshaking","Tree shaking is the process used by bundlers like Webpack for dead-code elimination in JavaScript.",[16,17],{"title":416,"path":417,"description":418,"tags":419},"Improving JavaScript Performance for Web","\u002Fblog\u002Fimproving-javascript-performance-for-web","JavaScript optimisation is becoming increasingly necessary for improving application performance. Let’s look at some of the challenges associated with JavaScript and how to optimise performance.",[16,17,303],{"title":421,"path":422,"description":423,"tags":424},"Improving Next.js Performance","\u002Fblog\u002Fimproving-next-js-performance","Next.js is a zero-config React framework for building server-side and static web applications bundled with enhanced developer experience with features for products such as smart bundling, TypeScript support, route pre-fetching, hybrid static & server rendering, and more.",[16,17,425,303],"nextjs",{"title":427,"path":428,"description":429,"tags":430},"INDEXEDDB","\u002Fblog\u002Findexeddb","IndexedDB stands for Indexed Database, is a web standard for storing large amounts of client-side data in a structured manner. This low-level API is able to index data which enables performance rich search on data.",[16,17,431],"indexeddb",{"title":433,"path":434,"description":435,"tags":436},"INSTALL D-LINK DWA-125 WIRELESS DRIVER ON LINUX","\u002Fblog\u002Finstall-d-link-dwa-125-wireless-driver-on-linux","'If you have recently bought a D-Link Wireless Adapter (DWA-125) for your Linux machine and wondering how to get it working, this article might help you get started.",[361,362],{"title":438,"path":439,"description":440,"tags":441},"INSTALLING NODE.JS","\u002Fblog\u002Finstalling-node-js","In this article we are discussing how to get Node.js working on OSX along with npm, the package manager for node.",[16,17,442],"node.js",{"title":444,"path":445,"description":446,"tags":447},"INTEROPERABLE CSS","\u002Fblog\u002Finteroperable-css","Interoperable CSS or ICSS is a low-level file format that enables CSS Modules, designed for loader implementers (not for end users).",[16,29],{"title":449,"path":450,"description":451,"tags":452},"INTRODUCTION TO D3","\u002Fblog\u002Fintroduction-to-d3","D3 is a data visualization library written in JavaScript. It stands for Data-Driven Documents where Document stand for the DOM or the Docucment Object Model of a wweb page.",[16,17,453],"d3",{"title":455,"path":456,"description":457,"tags":458},"INTRODUCTION TO EMBER.JS","\u002Fblog\u002Fintroduction-to-ember-js","Ember.js is a JavaScript web application framework based on the MVC architectural pattern. It allows developers to create scalable single-page applications by incorporating common idioms and best practices into a framework that provides a rich object model, declarative two-way data binding, computed properties, automatically-updating templates powered by Handlebars.js, and a router for managing application state.",[16,17,173],{"title":460,"path":461,"description":462,"tags":463},"INTRODUCTION TO GULP","\u002Fblog\u002Fintroduction-to-gulp","Gulp is a JavaScript task runner. It’s an alternative to Grunt, which allowed you to define your tasks using JavaScript inside of a file called Gruntfile.js. In this tutorial, I’ll show you how to install Gulp and create a simple configuration file to get your feet wet with this great new task runner.",[16,17,83],{"title":465,"path":466,"description":467,"tags":468},"INTRODUCTION TO HAPI","\u002Fblog\u002Fintroduction-to-hapi","Created by Eran Hammer, hapi.js is an open source framework built on top of Node.js for building web applications and services by Wallmart. In this tutorial, we will go through the advantages of hapi and build a simple application using hapi as the server.",[16,17,442],{"title":470,"path":471,"description":472,"tags":473},"INTRODUCTION TO WEBPACK","\u002Fblog\u002Fintroduction-to-webpack","Webpack is a module bundler. Webpack takes modules with dependencies and generates static assets representing those modules.",[16,17,140],{"title":475,"path":476,"description":477,"tags":478},"ios-7-design-guidelines","\u002Fblog\u002Fios-7-design-guidelines","With the release of iOS 7 design guidelines, app designers and developers will have to adjust the language to match the new \"flat\" design of iOS. In addition to the grid system, the dimensions of icons and commonly used elements, typography and iconography has been updated by Apple in many ways.",[16,9,479],"ios",{"title":481,"path":482,"description":483,"tags":484},"ISO NOISE REDUCTION","\u002Fblog\u002Fiso-noise-reduction","Using great noise reduction is like upgrading your lens. Why do we pay 16x more for one 50mm lens vs. another?",[89],{"title":486,"path":487,"description":488,"tags":489},"ISOMORPHIC JAVASCRIPT","\u002Fblog\u002Fisomorphic-javascript","Isomorphic JavaScript means that we get to share the same code on the client and on the server. So basically, you are rendering your application markup on the server and piping it down as complete HTML to the browser.",[16,17],{"title":491,"path":492,"description":493,"tags":494},"ITCSS","\u002Fblog\u002Fitcss","ITCSS or Inverted Triangle CSS is a meta framework designed to address some common issues around CSS we encounter today. Introduced by Harry Roberts, it is a sane, scalable, managed architecture for CSS.",[16,29],{"title":496,"path":497,"description":498,"tags":499},"JAVASCRIPT ARRAYS","\u002Fblog\u002Fjavascript-arrays","This beginner-level article will discuss further about JavaScript arrays in detail. JavaScript arrays are used to store multiple values in a single variable. JavaScript has an built-in object for manipulating arrays called Array.",[16,17],{"title":501,"path":502,"description":503,"tags":504},"JAVASCRIPT & CLOSURES","\u002Fblog\u002Fjavascript-closures","A closure is an inner function that has access to the outer (enclosing) function’s variables—scope chain.",[16,17],{"title":506,"path":507,"description":508,"tags":509},"JAVASCRIPT CONSOLE","\u002Fblog\u002Fjavascript-console","'The JavaScript Console or the Console Object provides access to the browser’s debugging console.",[16,17],{"title":511,"path":512,"description":513,"tags":514},"JAVASCRIPT & CONSTRUCTOR","\u002Fblog\u002Fjavascript-constructor","ECMAScript is a object based language. An object has a built-in property named constructor.",[16,17],{"title":516,"path":517,"description":518,"tags":519},"JavaScript Design Patterns","\u002Fblog\u002Fjavascript-design-patterns","Design patterns are advanced object-oriented solutions to commonly occurring software problems.  Patterns are about reusable designs and interactions of objects.  Each pattern has a name and becomes part of a vocabulary when discussing complex design solutions.",[16,17,520],"patterns",{"title":522,"path":523,"description":524,"tags":525},"JAVASCRIPT HOISTING AND SCOPE","\u002Fblog\u002Fjavascript-hoisting-and-scope","Hoisting is JavaScript's default behaviour of moving all declarations to the top of the current scope (to the top of the current script or the current function). In different words, a variable can be used before it has been declared.",[16,17],{"title":527,"path":528,"description":529,"tags":530},"JAVASCRIPT & PROTOTYPE","\u002Fblog\u002Fjavascript-prototype","Prototype objects are just simple JavaScript objects and may have their own prototypes. If a prototype has a non-null reference to its prototype, and so on, this is called the prototype chain.",[16,17],{"title":532,"path":533,"description":534,"tags":535},"JELLY BEAN (ANDROID 4.1 SDK) NEW FEATURES","\u002Fblog\u002Fjelly-bean-android-4-1-sdk-new-features","In this article I would like to discuss the new features of Jelly Bean, what has changed from the previous releases, and more.",[361,536],"android",{"title":538,"path":539,"description":540,"tags":541},"JQUERY INTRODUCTION","\u002Fblog\u002Fjquery-introduction","JQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.",[16,17,106],{"title":543,"path":544,"description":545,"tags":546},"JQUERY – HOW TO USE","\u002Fblog\u002Fjquery-use","In this article we’ll look at how we can use jquery to manipulate, traverse and select DOM elements at ease. Before we start we have to download jquery and load it in your HTML document",[16,17,106],{"title":548,"path":549,"description":550,"tags":551},"LEXICAL SCOPE","\u002Fblog\u002Flexical-scope","Lexical scope means that scope is defined by author-time decisions of where functions are declared. The lexing phase of compilation is essentially able to know where and how all identifiers are declared, and predict how they will be looked up during execution.",[16,17],{"title":553,"path":554,"description":555,"tags":556},"MAINTAINABLE JAVASCRIPT","\u002Fblog\u002Fmaintainable-javascript","If you are working on a project by your own, you might not worry about the structure, convention and organisation of your code given you fully understand how it works. But working in a team environment it is necessary to make sure that your team members understand your code, easily adaptable and extensible so the importance of maintainable javascript is inevitable.",[16,17],{"title":558,"path":559,"description":560,"tags":561},"MOBILE WEB INTRODUCTION","\u002Fblog\u002Fmobile-web-introduction","What is the mobile web? The mobile web refers to access to the world wide web, i.e. the use of browser-based Internet services, from a handheld mobile device, such as a smartphone or a feature phone, connected to a mobile network or other wireless network.",[16,29,161],{"title":563,"path":564,"description":565,"tags":566},"MODELS & EMBER DATA","\u002Fblog\u002Fmodels-ember-data","If you are thinking of consuming data in your Ember application, you can store them in fixtures. But what if you want to fetch data from a server?",[16,17,173],{"title":568,"path":569,"description":570,"tags":571},".NET FRAMEWORK Q&A","\u002Fblog\u002Fnet-framework-qna","In this article, we are discussing few common .NET frequently asked questions and answers.",[16,572],".net-framework",{"title":574,"path":575,"description":576,"tags":577},"NextJS Client-side, Server-side & Static Rendering","\u002Fblog\u002Fnextjs-client-side-server-side-and-static-rendering","The future of SEO and search ranking algorithms are now in heavy favour of static or server-side rendering. This means building static or server-side rendered apps instantly gain advantages in rankings.",[16,17,425,578],"ssr",{"title":580,"path":581,"description":582,"tags":583},"NODE JS SECURITY","\u002Fblog\u002Fnode-js-security","Node.js has gained momentum in the recent years but there are not many security guidelines available out there.",[16,17],{"title":585,"path":586,"description":587,"tags":588},"NODE.JS – EVENTS","\u002Fblog\u002Fnodejs-events","Many objects in Node emit events: a net.Server emits an event each time a peer connects to it, and fs.readStream emits an event when the file is opened. All objects which emit events are instances of events.EventEmitter.",[16,17,442],{"title":590,"path":591,"description":592,"tags":593},"NODEJS INSTALL WITH NVM","\u002Fblog\u002Fnodejs-install-with-nvm","Node Version Manager is a simple bash script to manage multiple active node.js versions. In this article, we are going to discuss about managing NodeJS install with NVM.",[16,17,442],{"title":595,"path":596,"description":597,"tags":598},"NODE.JS INTRODUCTION","\u002Fblog\u002Fnodejs-introduction","\"Node.js allows you to build scalable network",[16,17,442],{"title":600,"path":601,"description":602,"tags":603},"Node.js Memory Management","\u002Fblog\u002Fnodejs-memory-management","Node.js memory management provides means to dynamically allocate memory chunks for programs when they request them and free it when they are no longer needed, so they can be reused. Application-level memory management can be manual or automatic.",[16,17,442],{"title":605,"path":606,"description":607,"tags":608},"NODEJS PATTERNS","\u002Fblog\u002Fnodejs-patterns","A design pattern is a general, reusable solution to a commonly occurring problem. In this article we are going to look at some common design patterns we can use for Node.js.",[16,442],{"title":610,"path":611,"description":612,"tags":613},"NPM SCRIPTS","\u002Fblog\u002Fnpm-scripts","Task runners like Gulp or Grunt have been go to choice for the front end projects for last few years. Gulp being the latest between the two, and being the popular choice for last couple of years, one might wonder what’s wrong with it.",[16,17,442],{"title":615,"path":616,"description":617,"tags":618},"OPTIMIZING ASP.NET MVC SITES","\u002Fblog\u002Foptimizing-asp-net-mvc-sites","In this article we discuss about four ways of optimizing ASP.NET MVC sites",[16,184,619],"asp.net",{"title":621,"path":622,"description":623,"tags":624},"PHOTOSHOP CC NEW FEATURES","\u002Fblog\u002Fphotoshop-cc-new-features","Adobe Creative Cloud’s Photoshop CC  is packed with new tools and features, as well as some key workflow enhancements.",[9,112],{"title":626,"path":627,"description":628,"tags":629},"POSTCSS","\u002Fblog\u002Fpostcss","PostCSS is a tool for transforming CSS with JavaScript plugins. These plugins can support variables and mixins, transpile future CSS syntax, inline images, and more",[16,29],{"title":631,"path":632,"description":633,"tags":634},"PROPER TAIL CALLS","\u002Fblog\u002Fproper-tail-calls","A tail call happens when a function Foo calls a function Bar as its final action. At that point Foo stops and passes the execution to function Bar and disappears not having to do anything from there onwards.",[16,17],{"title":636,"path":637,"description":638,"tags":639},"PROXIES","\u002Fblog\u002Fproxies","Proxies enable you to intercept and customize actions performed on JavaScript objects such as `getter` and `setter` for getting and setting properties. This is really helpful in scenarios like JSON based API interaction where you have to customize data coming back from the API.",[16,17],{"title":641,"path":642,"description":643,"tags":644},"REACT BEST PRACTICES & PATTERNS","\u002Fblog\u002Freact-best-practices-patterns","In this article we discuss about React best practices & patterns for writing React components, and the recommendations here aim at coding convensions and patterns.",[16,17,140],{"title":646,"path":647,"description":648,"tags":649},"React Component Library with Material UI","\u002Fblog\u002Freact-component-library-with-material-ui","Using Material UI which supports Styled Components is an excellent combination of libraries to start building a design system of your own",[16,17,40,650],"material-ui",{"title":652,"path":653,"description":654,"tags":655},"REACT CONCURRENT MODE","\u002Fblog\u002Freact-concurrent-mode","'Regardless of all the optimizations we do in in React apps, rendering process so far has been a blocking and cannot be interrupted.",[16,40],{"title":657,"path":658,"description":659,"tags":660},"REACT CONTEXT API","\u002Fblog\u002Freact-context-api","The context API will finally become a first-class citizen with the release of React 16.3. Facebook has announced that they are going to release a stable yet revamped version of the context API.",[16,17,40],{"title":662,"path":663,"description":664,"tags":665},"REACT & CSS","\u002Fblog\u002Freact-css","In a scaling project, the way CSS spans out can bring us various problems. Let’s look at these issues, and discuss them in detail.",[16,17],{"title":667,"path":668,"description":669,"tags":670},"REACT DEPLOYMENT","\u002Fblog\u002Freact-deployment","In this article, we are discussing about how to perform a production deployment for React",[16,17,140],{"title":672,"path":673,"description":674,"tags":675},"REACT & ES6","\u002Fblog\u002Freact-es6","ES6 is here and now. So writing React JS components in ES6 will be beneficial considering the new features ES6 brings to us.",[16,17],{"title":677,"path":678,"description":679,"tags":680},"REACT & FLUX","\u002Fblog\u002Freact-flux","Flux is the application architecture that Facebook uses for building client-side web applications. It complements React’s composable view components by utilizing a unidirectional data flow. It’s more of a pattern rather than a formal framework.",[16,17,681],"raect.js",{"title":683,"path":684,"description":685,"tags":686},"REACT & NIGHTWATCH","\u002Fblog\u002Freact-nightwatch","Nightwatch is an end-to-end test framework. The reasons nightwatch is your best choice can be decided upon the reasons described in this article.",[16,17],{"title":688,"path":689,"description":690,"tags":691},"React Re-rendering Components","\u002Fblog\u002Freact-re-rendering-components","React is known for providing a fast user experience by only updating the parts of the UI that have changed. In this article, we discuss how we can optimise the render performance by understanding how React decides to re-render",[16,17,40],{"title":693,"path":694,"description":695,"tags":696},"REACT & REDUX","\u002Fblog\u002Freact-redux","'Redux allows you to manage the state with a minimal API but completely predictable behaviour – a predictable state container for JavaScript apps.",[16,17,140],{"title":698,"path":699,"description":700,"tags":701},"REACT ROUTER","\u002Fblog\u002Freact-router","React Router is the most popular routing library for React, which synchronizes your UI with the URL. It is built on top of React and helps you to build new screens quickly.",[16,17,140],{"title":703,"path":704,"description":705,"tags":706},"REACT STATELESS FUNCTIONAL COMPONENTS","\u002Fblog\u002Freact-stateless-functional-components","React stateless functional components are pure JavaScript functions that only have a render() function and no lifecycle methods like componentDidMount.",[16,17,140],{"title":708,"path":709,"description":710,"tags":711},"REACT V15","\u002Fblog\u002Freact-v15","Facebook released React v15.0.0 on 07\u002F04\u002F2016. The most noticeable change was the version number jump from 0.14 to 15.0.",[16,17,140],{"title":713,"path":714,"description":715,"tags":716},"REDUX & SAGAS","\u002Fblog\u002Fredux-sagas","In reality, for a real world application, just consuming an API end point and displaying the data is not going to cut it.",[16,17,140,717,718],"redux","redux-saga",{"title":720,"path":721,"description":722,"tags":723},"REQUIREJS & HANDLEBARS","\u002Fblog\u002Frequirejs-handlebars","If we are building a web application, code complexity could grow and the app can get bigger. Number of plug-ins can grow bigger, and you will feel the need of adding more modular components. RequireJS can address these issues to increase the speed of your application in an efficient way.",[16,17],{"title":725,"path":726,"description":727,"tags":728},"RESCUING THE DETAILS WITH TOPAZ LABS","\u002Fblog\u002Frescuing-details-topaz-labs","Here are the steps on how to recover shadows and make an image more vibrant with the Topaz Lab’s plug-ins.",[89],{"title":730,"path":731,"description":732,"tags":733},"RUBY API – REST ROUTES, CONSTRAINTS & NAMESPACES","\u002Fblog\u002Fruby-api-rest-routes-constraints-namespaces","In this article, we are going to study REST, routes, constraints, and namespaces. Before we dive into these concepts let’s take a look at how web-based services in the perspective of web users.",[16,124],{"title":735,"path":736,"description":737,"tags":738},"RUBY – INTRODUCTION","\u002Fblog\u002Fruby-introduction","Ruby is a dynamic, reflective, object-oriented, general-purpose programming language. It was designed and developed in the mid-1990s by Yukihiro “Matz” Matsumoto in Japan.",[16,124],{"title":740,"path":741,"description":742,"tags":743},"RUN COMMANDS FOR WINDOWS 7","\u002Fblog\u002Frun-commands-for-windows-7","A run command is the name of the file that starts an application, which is an executable for a program.",[361,744],"windows",{"title":746,"path":747,"description":748,"tags":749},"SAFARI CSS HACKS","\u002Fblog\u002Fsafari-css-hacks","Applying changes only for Safari has been always a challenging task. Also adding the fact that Safari has changed since version 6.1 makes it even harder. In this article we are going to discuss Safari CSS hacks.",[16,29,383],{"title":751,"path":752,"description":753,"tags":754},"SASS CONTROL DIRECTIVES","\u002Fblog\u002Fsass-control-directives","Sass control directives helps creating libraries for reuse and distribution, there by contribute to writing leaner Sass. Advanced frameworks use mixins. These mixins use directives such as @if, @for, each and @while.",[16,17],{"title":756,"path":757,"description":758,"tags":759},"SASS FOR CSS","\u002Fblog\u002Fsass-for-css","Sass is a scripting langauage that is interpreted into CSS. Sass stands for Syntatically Awesome Stylesheets.  Sass consists of two syntaxes. The original syntax, called “the indented syntax”, uses a syntax similar to Haml. It uses indentation to separate code blocks and newline characters to separate rules.",[16,29,292],{"title":761,"path":762,"description":763,"tags":764},"SASS INTRODUCTION","\u002Fblog\u002Fsass-introduction","CSS is crafted to be simple, but over time your styles become large and your files become bloated with selectors growing out of control. Scaling simplicity is difficult.",[16,17],{"title":766,"path":767,"description":768,"tags":769},"SASS – VARIABLES","\u002Fblog\u002Fsass-variables","Native CSS variable support is still in its infancy, but Sass affords us a way to set reusable values.",[16,29,292],{"title":771,"path":772,"description":773,"tags":774},"SECURING YOUR ASP.NET MVC 4 APPLICATION","\u002Fblog\u002Fsecuring-your-asp-net-mvc-4-application","Out of the Box when you create an MVC web site, anyone can post anything to your web site. So we need to control the user access.",[16,184,619],{"title":776,"path":777,"description":778,"tags":779},"SEMANTIC HTML","\u002Fblog\u002Fsemantic-hmtl","Semantic HTML is a way of describing the content of an HTML document, it is not a way of making your page look pretty or visually appealing.",[16,383],{"title":781,"path":782,"description":783,"tags":784},"SEND EMAIL IN UMBRACO","\u002Fblog\u002Fsend-email-in-umbraco","Sending email is a common functionality of any client-facing website. Is it possible to be implemented in Umbraco without a plugin? Yes, and I’m going to demonstrate how to implement such functionality.",[16,785,619],"umbraco",{"title":787,"path":788,"description":789,"tags":790},"Server Side Rendering with Suspense in React 18","\u002Fblog\u002Fserver-side-rendering-with-suspense-in-react-18","React 18 will include architectural improvements to React server-side rendering (SSR) performance.",[16,17,40,578],{"title":792,"path":793,"description":794,"tags":795},"SERVICE WORKERS","\u002Fblog\u002Fservice-workers","Service Worker is a new browser feature which provides event-driven scripts that run independently of web pages. Unlike other workers, Service Workers can be shut down at the end of events, note the lack of retained references from documents, and they have access to domain-wide events such as network fetches.",[16,17,796],"service-worker",{"title":798,"path":799,"description":800,"tags":801},"SETTING UP UMBRACO IN VISUAL STUDIO","\u002Fblog\u002Fsetting-up-umbraco-in-visual-studio","In this article we discuss about setting an Umbraco project with ASP.NET with step by step instructions",[16,619,785],{"title":803,"path":804,"description":805,"tags":806},"Should we declare React functional components with a const or a function?","\u002Fblog\u002Fshould-we-declare-react-functional-components-with-a-const-or-a-function","If you have been writing React functional components for a while now, you may have encountered two ways of declaring a component - an arrow function or a function declaration.",[16,17,807,40],"typesript",{"title":809,"path":810,"description":811,"tags":812},"SMACSS","\u002Fblog\u002Fsmacss","SMACSS stands for Scalable and Modular Architecture for CSS. It is pronounced “smacks” and introduced by Jonathan Snook.",[16,29,292],{"title":814,"path":815,"description":816,"tags":817},"STRUCTURE YOUR SASS","\u002Fblog\u002Fstructure-your-sass","Sass enables your you to separate your stylesheets into individual files, and then you can use the @import directive to include your individual files into one master stylesheet.",[16,29,292],{"title":819,"path":820,"description":821,"tags":822},"STYLUS FOR CSS","\u002Fblog\u002Fstylus-for-css","When your site grows, the CSS can grow along with it, and the maintenance is no longer  trivial. You could break your CSS in to different files and use @import to structure it into one file. But this doesn’t resolve all your architecting and maintenance problems. ",[16,29],{"title":824,"path":825,"description":826,"tags":827},"TAPE & TAP","\u002Fblog\u002Ftape-tap","Tape & Tap are testing tools you can use instead of Mocha or Jasmine. The Test Anything Protocol (TAP) is a definition that has been around since 1987 and Tape is a test harness written in JavaScript for Node and the browser.",[16,17,828],"testing",{"title":830,"path":831,"description":832,"tags":833},"TESTING REACT COMPONENTS WITH ENZYME","\u002Fblog\u002Ftesting-react-components-enzyme","React has become the framework of choice recently within the JavaScript community. And the tools for testing React components has also gained lot of attention.",[16,17,220],{"title":835,"path":836,"description":837,"tags":838},"THE MOST EXPENSIVE CAMERAS IN THE WORLD","\u002Fblog\u002Fthe-most-expensive-cameras-in-the-world","Digital photography has become a hobby that is more and more affordable in recent years, with the increase of hobbyist photographers to serious enthusiasts the camera and lens manufacturers have become competitive and innovative in releasing high specification products.",[89],{"title":840,"path":841,"description":842,"tags":843},"Things to avoid when using React Hooks","\u002Fblog\u002Fthings-to-avoid-when-using-react-hooks","In this article we discuss about a few things to avoid when writing React Hooks and forming good habits through understanding",[16,17,40],{"title":845,"path":846,"description":847,"tags":848},"THINK REACT","\u002Fblog\u002Fthink-react","As we know, React is a library for creating user interfaces. It renders your UI and responds to events aka: the V in MVC. Because it is not as opinionated as many of other front-end JavaScript libraries, it plays nicely with your stack, whatever it maybe, Ruby, Java, Node.js or .NET.",[16,17,140],{"title":850,"path":851,"description":852,"tags":853},"THROTTLE FUNCTION CALLS IN JAVASCRIPT","\u002Fblog\u002Fthrottle-function-calls-in-javascript","If you have written a search component that returns matching result as you type – you would realise that sending a request to the server on every key press is not required as that can result in burdening the server with too many requests.",[16,17],{"title":855,"path":856,"description":857,"tags":858},"Turborepo: The Next Big Thing in Build Systems","\u002Fblog\u002Fturborepo-the-next-big-thing-in-build-systems","Turborepo is a high-performance build system for JavaScript and TypeScript codebases. Vercel who acquired Turborepo claims, through incremental builds, intelligent remote caching, and optimized task scheduling, Turborepo can boost build speeds by 85% or more, enabling teams of all sizes to maintain a fast and efficient build system that scales as codebases and teams grow.",[16,17,859],"nodejs",{"title":861,"path":862,"description":863,"tags":864},"TypeScript Enums vs String Literals","\u002Fblog\u002Ftypescript-enums-vs-string-literals","Enums help to define a set of named constants. Using enums can make it easier to document intent, or create a set of distinct cases.",[16,17,807],{"title":866,"path":867,"description":868,"tags":869},"TypeScript Features You Should No Longer Use","\u002Fblog\u002Ftypescript-features-you-should-no-longer-use","When TypeScript was originally invented by Microsoft in 2010, they implemented features missing from JavaScript at the time including module systems, classes, enums and decorators.",[16,17,870],"typescript",{"title":872,"path":873,"description":874,"tags":875},"Understanding cloneElement, isValidElement and Render Props","\u002Fblog\u002Funderstanding-cloneelement-isvalidelement-and-render-props","React provides several APIs for transforming elements: cloneElement, isValidElement.",[16,17,40],{"title":877,"path":878,"description":879,"tags":880},"UNITS FOR CSS FONT-SIZE","\u002Fblog\u002Funits-for-css-font-size","Fonts sizes in CSS can be measured in four different units adding confusion to the web developer on top of having to deal with different browsers. Which of these four units is the best? Finding a definitive answer is difficult.",[16,29],{"title":882,"path":883,"description":884,"tags":885},"USING ES6 WITH BABEL","\u002Fblog\u002Fusing-es6-babel","Some of the modern browsers are yet to catch up with the new language additions to ES6. This means we have to use Babel to transpile our code into ES5.",[16,17,220],{"title":887,"path":888,"description":889,"tags":890},"VIRTUAL DOM","\u002Fblog\u002Fvirtual-dom","If you are using React, there is a better chance you have heard about virtual DOM. In a nutshell, virtual DOM is an abstract version of the DOM, a lightweight copy of the actual DOM which we can manipulate the way we want and then apply to the DOM tree.",[16,17],{"title":242,"path":892,"description":893,"tags":894},"\u002Fblog\u002Fweb-application-security","'Cyber security has become a necessity for any web developer building client-facing web applications.",[16,895],"security",{"title":897,"path":898,"description":899,"tags":900},"WEB PAGE RENDERING","\u002Fblog\u002Fweb-page-rendering","'Web page rendering is an important subject to study in order to optimize page load times, and to understand how to design solutions to cater for that.",[16,17,29,383],{"title":902,"path":903,"description":904,"tags":905},"WEBPACK EXPORT MODULES","\u002Fblog\u002Fwebpack-export-modules","You may be working in a complex project, where multiple isolated modules need to be imported into a single parent module, you might want to configure Webpack.config to enable exporting modules.",[16,17],{"title":907,"path":908,"description":909,"tags":910},"WHAT IS AGILE PROJECT MANAGEMENT?","\u002Fblog\u002Fwhat-is-agile-project-management","Agile project management allows you to produce a smaller amount of deliverables more frequently and efficiently , making it an excellent choice for the teams that are working in the field of  business analysis, product development, programming , and other areas of collaboration.",[16,911],"agile",{"title":913,"path":914,"description":915,"tags":916},"WRITING FORMS IN REACT AND REDUX","\u002Fblog\u002Fwriting-forms-react","rWiting forms in React and Redux can be challenging, having to deal with forms and fields. In this article we are going to build couple of form using an exisiting library sepcifically for Redux called react-redux-form.",[16,29,383],{"id":918,"title":157,"author":919,"body":920,"date":1507,"description":159,"extension":1508,"image":1509,"meta":1510,"navigation":1511,"path":158,"seo":1512,"stem":1513,"tags":1514,"__hash__":1515},"blog\u002Fblog\u002Fdevelop-mobile-apps-phonegap.md","Sean Amarasinghe",{"type":921,"value":922,"toc":1489},"minimark",[923,927,949,952,959,964,972,975,978,983,986,990,998,1018,1029,1049,1064,1073,1077,1080,1083,1090,1142,1145,1154,1157,1164,1167,1171,1179,1186,1190,1199,1215,1219,1222,1233,1236,1242,1251,1254,1257,1287,1298,1302,1305,1309,1318,1325,1330,1339,1342,1346,1361,1374,1386,1389,1393,1396,1400,1409,1413,1422,1426,1444,1448,1462,1466,1473,1485],[924,925,926],"p",{},"PhoneGap supports a wide variety of platforms:",[928,929,930,934,937,940,943,946],"ul",{},[931,932,933],"li",{},"iOS",[931,935,936],{},"Android",[931,938,939],{},"Windows 8",[931,941,942],{},"Windows Phone 7 and 8",[931,944,945],{},"WebOS",[931,947,948],{},"Tizen",[924,950,951],{},"Building PhoneGap apps require you to know about HMTL, CSS and JavaScript.",[924,953,954],{},[955,956],"img",{"alt":957,"src":958},"Building PhoneGap","http:\u002F\u002F1.bp.blogspot.com\u002F-DEJOj4wKMOE\u002FUNhxSB-QlQI\u002FAAAAAAAAAEg\u002F4J01k0tvaI0\u002Fs1600\u002Fhtmlcssjava.png",[960,961,963],"h2",{"id":962},"how-does-phonegap-works","How does PhoneGap works?",[924,965,966,967,971],{},"PhoneGap takes your web application and renders it within a web view. ",[968,969,970],"strong",{},"Web view"," is a native application component, which makes web content to display within a native application.",[924,973,974],{},"PhoneGap provides a set of JavaScript functions that enables the app to interact with the phone's native API's, such as camera, and accelerometer. This is then compiled into a native application for each platform. So PhoneGap bridges the gap between the Phone and the web application.",[924,976,977],{},"Applications built with PhoneGap use the mobile platform’s Web view to render content. As such, the content will appear nearly identical on each platform, much as any Web page would. While you can style the controls differently on each platform, take care in doing this.",[924,979,980],{},[968,981,982],{},"What is PhoneGap Build?",[924,984,985],{},"Application container that allows you to build natively installed apps using HTML, CSS & JavaScript. There's no need to install any SDK's in your machine. PhoneGap servers will build the apps for you by compiling and packaging the apps. There are free and paid memberships available for developers. The latest version of PhoneGap might not be available and the services can go down periodically.",[960,987,989],{"id":988},"plugins-closing-the-gap-on-native-features","Plugins: Closing The Gap On Native Features",[924,991,992,993,997],{},"PhoneGap essentially wraps a Web view of your HTML, CSS and JavaScript in a native application. This is required because the Web view in an application does not inherently support many device features, such as access to the file system or the camera. PhoneGap has a ",[994,995,996],"code",{},"bridging mechanism"," that allows JavaScript running in the Web view to invoke native code contained in the application. PhoneGap comes complete with plugins to support device capabilities such as the following:",[928,999,1000,1003,1006,1009,1012,1015],{},[931,1001,1002],{},"accelerometer,",[931,1004,1005],{},"camera,",[931,1007,1008],{},"contacts,",[931,1010,1011],{},"file system,",[931,1013,1014],{},"media playback and recording,",[931,1016,1017],{},"network availability.",[924,1019,1020,1021,1028],{},"A full list of capabilities for each platform is available ",[1022,1023,1027],"a",{"href":1024,"rel":1025},"http:\u002F\u002Fphonegap.com\u002Fabout\u002Ffeature\u002F",[1026],"nofollow","on PhoneGap’s website",".\nIf these capabilities aren’t enough, PhoneGap may be extended with plugins that enable the developer to access more device features, including these:",[928,1030,1031,1034,1037,1040,1043,1046],{},[931,1032,1033],{},"barcode scanning,",[931,1035,1036],{},"Bluetooth,",[931,1038,1039],{},"push notifications,",[931,1041,1042],{},"text to speech,",[931,1044,1045],{},"calendars,",[931,1047,1048],{},"Facebook Connect.",[924,1050,1051,1052,1057,1058,1063],{},"In previous versions of PhoneGap, a GitHub repository contained a set of ",[1022,1053,1056],{"href":1054,"rel":1055},"https:\u002F\u002Fgithub.com\u002Fphonegap\u002Fphonegap-plugins",[1026],"prebuilt plugins",".\nWith the arrival of PhoneGap 3, a new plugin architecture has resulted in the old repository being deprecated. A ",[1022,1059,1062],{"href":1060,"rel":1061},"http:\u002F\u002Fplugins.cordova.io\u002F#\u002F_browse\u002Fall",[1026],"registry"," has been created for all plugins compatible with PhoneGap 3.",[924,1065,1066,1067,1072],{},"Some command-line tools are also provided to make it easy to add the plugins to the repository for your project. We’ll see these later on in this article. PhoneGap also publishes documentation and examples on how to ",[1022,1068,1071],{"href":1069,"rel":1070},"http:\u002F\u002Fdocs.phonegap.com\u002Fen\u002F3.0.0\u002Fguide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide",[1026],"write your own"," plugins.\nOf course, the development of plugins assumes familiarity with the native platform on which the plugin is to be supported.",[960,1074,1076],{"id":1075},"an-html-css-and-javascript-foundation-for-mobile-development","An HTML, CSS And JavaScript Foundation For Mobile Development",[924,1078,1079],{},"The majority of PhoneGap’s capabilities lie in non-visual components — things that access the file system, network availability, geolocation, etc.\nPhoneGap does not provide much assistance with building the user interface itself. For this, you must rely on the HTML and CSS foundation that you’ve built yourself or on a framework. Applications written for mobile browsers must respect the limitations of the given mobile platform (processing speed, screen size, network speed, touch events, etc.).",[924,1081,1082],{},"Unless you have been working with HTML and CSS for a long time and are well aware of these issues, developing an effective mobile application without some sort of framework can be daunting.",[924,1084,1085,1086,1089],{},"Fortunately, ",[968,1087,1088],{},"some mobile frameworks have arisen to help"," with this. Here are just some of the offerings in this area:",[928,1091,1092,1099,1106,1113,1120,1128,1135],{},[931,1093,1094],{},[1022,1095,1098],{"href":1096,"rel":1097},"http:\u002F\u002Fjquerymobile.com\u002F",[1026],"jQuery Mobile",[931,1100,1101],{},[1022,1102,1105],{"href":1103,"rel":1104},"http:\u002F\u002Fionicframework.com\u002F",[1026],"Ionic",[931,1107,1108],{},[1022,1109,1112],{"href":1110,"rel":1111},"http:\u002F\u002Fwww.sencha.com\u002Fproducts\u002Ftouch\u002F",[1026],"Sencha Touch",[931,1114,1115],{},[1022,1116,1119],{"href":1117,"rel":1118},"http:\u002F\u002Fwww.kendoui.com\u002F",[1026],"Kendo UI Complete",[931,1121,1122,1123],{},"AppGyver’s ",[1022,1124,1127],{"href":1125,"rel":1126},"http:\u002F\u002Fwww.appgyver.com\u002Fsteroids",[1026],"Steroids",[931,1129,1130],{},[1022,1131,1134],{"href":1132,"rel":1133},"http:\u002F\u002Fenyojs.com\u002F",[1026],"Enyo",[931,1136,1137],{},[1022,1138,1141],{"href":1139,"rel":1140},"http:\u002F\u002Ftopcoat.io\u002F",[1026],"TopCoat",[924,1143,1144],{},"These frameworks vary from CSS-oriented libraries (like Topcoat) to complete MVC-based libraries with sets of mobile UI controls (like Sencha Touch). Discussing the differences between these frameworks in detail is beyond the scope of this article and would require an entire series of articles. Visit the websites above and try some of the demonstrations on several mobile devices.",[924,1146,1147,1148,1153],{},"One distinction to be made is that some frameworks support a wider variety of devices and device versions than others. Some mobile frameworks are built on a particular MVC platform. For example, Ionic is built on the ",[1022,1149,1152],{"href":1150,"rel":1151},"http:\u002F\u002Fangularjs.org\u002F",[1026],"AngularJS"," framework.\nThis might make a particular library more attractive to developers who are already familiar with the respective MVC framework.",[924,1155,1156],{},"Frameworks such as Sencha Touch abstract the DOM from the developer through the use of APIs, freeing the developer from having to worry about details of browser vendor implementations. Sencha also provides graphic development tools, such as Sencha Architect, to aid the development process. Sencha provides commercial support and training, too, which are worth investigating.",[924,1158,1159,1160,1163],{},"I’m often asked to recommend a framework for mobile development. But ",[994,1161,1162],{},"the right tool depends largely on your application’s functionality",", the mobile platforms you need to support, your demand for commercial support and your experience with Web and mobile development in general. I’m encouraged by some emerging frameworks, particularly Ionic, but as of the time of writing, Ionic is still in the alpha stage. If you are looking for something with a longer track record, then Sencha Touch or, for some cases, jQuery Mobile might be appropriate.",[924,1165,1166],{},"To be expedient and because of the wealth of tutorials and documentation available, I’ve written our FasTip application in jQuery Mobile, which provides a wide range of support for mobile devices. It’s a good choice for applications that do not require significant customization to the user interface. The simplicity of our application makes it well suited to jQuery Mobile.",[960,1168,1170],{"id":1169},"phonegap-or-cordova-whats-in-a-name","PhoneGap Or Cordova: What’s In A Name?",[924,1172,1173,1174,1178],{},"In the process of learning about PhoneGap, you’ll encounter the name, Cordova. The command-line tool that we’ll use in just a moment to create our PhoneGap project is named Cordova. Simply put, (",[1022,1175,1176],{"href":1176,"rel":1177},"http:\u002F\u002Fcordova.apache.org\u002F)Cordova",[1026],"] is the open-source project that is the basis of PhoneGap. Think of it as the engine that drives PhoneGap.",[924,1180,1181,1182,1185],{},"In most cases, the names may be used interchangeably. With ",[968,1183,1184],{},"PhoneGap"," already being trademarked, a new name was needed when the project was open-sourced — hence, Cordova. “PhoneGap” continues to be used by Adobe for commercial products. Most people still refer to\nthe project as a whole as PhoneGap.",[960,1187,1189],{"id":1188},"installing-phonegap","Installing PhoneGap",[924,1191,1192,1193,1198],{},"With the introduction of version 3, installing PhoneGap’s tools and setting up projects have been greatly simplified, thanks to the new ",[1022,1194,1197],{"href":1195,"rel":1196},"http:\u002F\u002Fdocs.phonegap.com\u002Fen\u002F3.3.0\u002Fguide_cli_index.md.html#The%20Command-Line%20Interface",[1026],"command-line interface","(or CLI). The command-line tools are based on Node.js; thus, you must install it before installing PhoneGap. Once Node.js is in place, simply run one command for the node package manager to install PhoneGap’s tools:",[1200,1201,1206],"pre",{"className":1202,"code":1203,"language":1204,"meta":1205,"style":1205},"language-sh shiki shiki-themes github-light github-dark","npm install -g cordova\n","sh","",[994,1207,1208],{"__ignoreMap":1205},[1209,1210,1213],"span",{"class":1211,"line":1212},"line",1,[1209,1214,1203],{},[960,1216,1218],{"id":1217},"considerations-for-supporting-multiple-platforms","Considerations For Supporting Multiple Platforms",[924,1220,1221],{},"We’ve seen that by using PhoneGap and a framework like jQuery Mobile, building a cross-device application is easy. One caveat with jQuery Mobile is that both iOS and Android users would see the same UX; that is, the UX would not be tailored to the respective platform, much like a Web page looks the same whether viewed on OS X or Windows.",[924,1223,1224,1225,1228,1229,1232],{},"Attempting to mimic the native platform controls in HTML and CSS is generally a bad idea.\nWhile you could approximate the ",[994,1226,1227],{},"look"," of the native platform, mimicking the ",[994,1230,1231],{},"feel"," of the platform is exceedingly difficult. The controls might not respond to taps and other gestures in the same way. The result is usually a UX that just feels wrong. Successful PhoneGap projects generally eschew this approach in favour of a platform-independent UX.",[924,1234,1235],{},"If your project requires an experience that closely matches that of the native platform, PhoneGap might not be the right choice.",[924,1237,1238],{},[955,1239],{"alt":1240,"src":1241},"Multiple Platforms","\u002Fimages\u002Fblog\u002F2014-04-27-develop-mobile-apps-phonegap\u002Fphonegap-cordova-500-opt.png",[924,1243,1244,1245,1250],{},"HTML5 capabilities vary widely across devices. While iOS and Android browsers are built on WebKit, some features are implemented only in the latest versions of the platforms. One useful website for checking browser version capabilities is ",[1022,1246,1249],{"href":1247,"rel":1248},"http:\u002F\u002Fmobilehtml5.org\u002F",[1026],"Mobile HTML5",". The browsers on some old platforms, particularly Android 2.x, have various rendering bugs, which could also hamper your development.",[924,1252,1253],{},"Frameworks such as jQuery Mobile and Sencha Touch take these compatibility issues into account. If you choose to roll your solution, perhaps to gain greater control over the UX, then you will need to plan additional time for testing, particularly for old device versions, on which HTML5 support is less consistent.",[924,1255,1256],{},"jQuery Mobile makes it easy to get started and provides a good feature set for simple applications. Much of the functionality on the screens of our sample application is provided by jQuery Mobile itself, leaving us with less code to write. However, the speed of development with jQuery Mobile comes at the expense of customization. While jQuery Mobile does offer a “theme roller” tool to customize appearance, much of that is “chrome” related to colours and visual attributes like rounded corners.",[924,1258,1259,1260,1265,1266,1271,1272,1277,1278,1271,1281,1286],{},"Assess whether your application fits jQuery Mobile’s paradigm.\nThe platform does offer some alternate layouts for things like forms, but the options are still somewhat limited. If your application requires a truly custom look or layout, then you might find jQuery Mobile too confining. Consider one of the frameworks suggested earlier. Or adopt a “best of breed” approach, mixing a CSS-oriented framework (such as ",[1022,1261,1264],{"href":1262,"rel":1263},"http:\u002F\u002Ftwitter.github.io\u002Fbootstrap\u002F",[1026],"Twitter Bootstrap",", ",[1022,1267,1270],{"href":1268,"rel":1269},"http:\u002F\u002Ffoundation.zurb.com\u002F",[1026],"Zurb Foundation"," or ",[1022,1273,1276],{"href":1274,"rel":1275},"http:\u002F\u002Fmaker.github.io\u002Fratchet\u002F",[1026],"Ratchet",") with an MVC framework (such as ",[1022,1279,1152],{"href":1150,"rel":1280},[1026],[1022,1282,1285],{"href":1283,"rel":1284},"http:\u002F\u002Fbackbonejs.org\u002F",[1026],"Backbone.js",").",[924,1288,1289,1290,1293,1294,1297],{},"Some of the large mobile solutions, such as ",[1022,1291,1112],{"href":1110,"rel":1292},[1026]," and ",[1022,1295,1105],{"href":1103,"rel":1296},[1026],", marry a powerful MVC platform to a set of prebuilt controls focused on mobile development. These tools are attractive and worthy of consideration. But bear in mind the different range of devices that each of these tools supports. At the moment, Sencha Touch supports more devices than Ionic, but jQuery Mobile supports even more. This should also factor in your selection process.",[960,1299,1301],{"id":1300},"using-a-native-plugin","Using A Native Plugin",[924,1303,1304],{},"If you try our sample application on iOS 7, you’ll run into an issue with the device’s status bar that has affected many PhoneGap applications. That is, the status bar now overlaps the top of the application:",[960,1306,1308],{"id":1307},"building-in-the-cloud","Building In The Cloud",[924,1310,1311,1312,1317],{},"Generally speaking, to build an application for a particular platform, you must install the SDK for that platform on your machine. This could be a problem if, for instance, you’re on a Mac and want to target Windows tablets, whose SDK requires you to be on a Windows machine. Adobe offers a service named ",[1022,1313,1316],{"href":1314,"rel":1315},"https:\u002F\u002Fbuild.phonegap.com\u002F",[1026],"PhoneGap Build","to help in this situation.",[924,1319,1320,1321,1324],{},"PhoneGap Build enables you to upload a ZIP file containing the HTML, CSS and JavaScript of your application. Additionally, PhoneGap 3 enables you to ",[994,1322,1323],{},"submit an application to PhoneGap Build right from the command line","; from there, PhoneGap Build takes over and produces a deployment bundle for the desired platform.",[924,1326,1327],{},[955,1328],{"alt":1308,"src":1329},"\u002Fimages\u002Fblog\u002F2014-04-27-develop-mobile-apps-phonegap\u002Fbuild-500-opt.png",[924,1331,1332,1333,1338],{},"Once the build process is complete, you may either download the deployment bundle and manually install it to your device or take a picture of a QR code on PhoneGap Build’s website and download the deployment package directly to your mobile device. What’s more, PhoneGap Build supports a feature named ",[1022,1334,1337],{"href":1335,"rel":1336},"http:\u002F\u002Fdocs.build.phonegap.com\u002Fen_US\u002F3.1.0\u002Ftools_hydration.md.html#Hydration",[1026],"Hydration",", which enables the application to download updates to the HTML, CSS and JavaScript files whenever it launches.",[924,1340,1341],{},"This means that testers will always be running the latest version of your application, without having to go through the traditional updating process. Note that, at least for now, Hydration is meant for development and testing — not for final production code that will be submitted to the app store.",[960,1343,1345],{"id":1344},"development-in-the-cloud","Development in the Cloud",[924,1347,1348,1349,1354,1355,1360],{},"You can do more than simply compile and package your application in the cloud. Cloud-based ",[1022,1350,1353],{"href":1351,"rel":1352},"http:\u002F\u002Fwww.icenium.com\u002F",[1026],"Icenium"," provides a browser-based IDE that lets you edit code in a browser and immediately turn those edits into a deployment package. Using an application in the iOS App Store named ",[1022,1356,1359],{"href":1357,"rel":1358},"http:\u002F\u002Fwww.icenium.com\u002Fproduct\u002Fion",[1026],"Icenium Ion",", you can dynamically load updates to your application as you change the code in the Web-based IDE.",[924,1362,1363,1364,1368,1369,1373],{},"In addition, Icenium bundles a license to Telerik’s !KendoUI](",[1022,1365,1366],{"href":1366,"rel":1367},"http:\u002F\u002Fwww.kendoui.com\u002F)library",[1026],". I’ve used this to make changes to an iOS PhoneGap application while on a Windows-based laptop. Icenium also offers a Windows desktop IDE named (",[1022,1370,1371],{"href":1371,"rel":1372},"http:\u002F\u002Fwww.icenium.com\u002Fproduct\u002Fgraphite)Graphite",[1026],"], which expands on the capabilities of the browser-based tool.",[924,1375,1376,1377,1381,1382,1385],{},"Another alternative to PhoneGap Build is (",[1022,1378,1379],{"href":1379,"rel":1380},"http:\u002F\u002Fwww.appgyver.com\u002F)AppGyver",[1026],"]. It is not an IDE like Icenium, but it does offer a UX library, named ",[1022,1383,1127],{"href":1125,"rel":1384},[1026],", that facilities navigation between Web views using some native controls. Note that for page content itself, you must still use HTML and CSS.",[924,1387,1388],{},"The main downside to cloud-based development services is that they have limited support for PhoneGap plugins. However, new plugins are being supported all the time. Determine your application’s needs to see whether a particular cloud-based tool supports the plugins you require.",[960,1390,1392],{"id":1391},"debugging-your-application","Debugging Your Application",[924,1394,1395],{},"In most cases, when attempting to debug an application, you’ll be mostly concerned with debugging the JavaScript, examining the console log and perhaps doing some interactive inspection and manipulation of the DOM. Unfortunately, there is no integrated way to debug across all platforms. However, there are several useful techniques, covered below.",[960,1397,1399],{"id":1398},"chrome-devtools","Chrome DevTools",[924,1401,1402,1403,1408],{},"I generally find it easiest to work with Chrome DevTools by treating my pages as standard Web pages loaded in a desktop browser (although this doesn’t help with the portions of code that rely on PhoneGap plugins). Chrome DevTools provides an ",[1022,1404,1407],{"href":1405,"rel":1406},"https:\u002F\u002Fdevelopers.google.com\u002Fchrome-developer-tools\u002Fdocs\u002Fmobile-emulation",[1026],"emulation panel"," that simulates the aspect ratios, touch events and more of various mobile device screens.",[960,1410,1412],{"id":1411},"apache-ripple","Apache Ripple",[924,1414,1415,1416,1421],{},"Apache’s ",[1022,1417,1420],{"href":1418,"rel":1419},"http:\u002F\u002Fripple.incubator.apache.org\u002F",[1026],"Ripple"," is a NodeJS project that serves PhoneGap content in a desktop browser. Ripple enables you to experiment with different screen sizes and orientations. It also allows you to simulate geolocation coordinates and network connectivity events, as well as allows JavaScript code to invoke many of PhoneGap’s core plugins while running in a desktop browser.",[960,1423,1425],{"id":1424},"safari-to-debug-web-views-on-ios-apps","Safari to debug web views on iOS Apps",[924,1427,1428,1429,1434,1435,1438,1439,1443],{},"Starting with Safari 6, Apple has included support for using the Web inspector in ",[1022,1430,1433],{"href":1431,"rel":1432},"http:\u002F\u002Fwww.tricedesigns.com\u002F2013\u002F03\u002F18\u002Fon-device-debugging-with-phonegap-ios-6\u002F",[1026],"desktop Safari to debug Web views"," running in the simulator. With your app running in the simulator, simply go to the ",[968,1436,1437],{},"Develop"," menu in Safari and look for the* ",[1440,1441,1442],"em",{},"iPhone Simulator","* option. This will connect the Web inspector to the running instance of your PhoneGap application and will allow to you manipulate the DOM, set breakpoints in JavaScript, etc.",[960,1445,1447],{"id":1446},"chrome-devtools-to-debug-web-views-in-android-apps","Chrome DevTools to debug web views in Android Apps",[924,1449,1450,1451,1456,1457,1461],{},"Starting with version 4.4, Android’s Web view is now based on Google Chrome. With this change comes the ability to ",[1022,1452,1455],{"href":1453,"rel":1454},"https:\u002F\u002Fdevelopers.google.com\u002Fchrome-developer-tools\u002Fdocs\u002Fremote-debugging#debugging-webviews",[1026],"connect to the Web view from DevTools"," and to debug interactively, just like you can with iOS. If you don’t have a 4.4 device, fear not: It works with the 4.4 emulator as well. Note that you’ll need to add a (",[1022,1458,1459],{"href":1459,"rel":1460},"https:\u002F\u002Fgithub.com\u002Fjrstarke\u002Fwebview-debug)special",[1026]," plugin] to your PhoneGap project to enable Web view debugging on Android.",[960,1463,1465],{"id":1464},"web-inspector-remote","Web Inspector Remote",[924,1467,1468,1472],{},[1022,1469,1465],{"href":1470,"rel":1471},"http:\u002F\u002Fpeople.apache.org\u002F~pmuellr\u002Fweinre\u002Fdocs\u002Flatest\u002FHome.html",[1026]," (WEINRE) provides a partial set of debugging features, including DOM manipulation and access to the console. However, it does not support JavaScript debugging. Add WEINRE to your application by including a script tag in your application’s HTML and running a NodeJS server that this script connects to. The main advantage of WEINRE is that it works with earlier versions of WebKit on mobile devices and is one way of debugging cross-platform.",[924,1474,1475,1476,1479,1480,1484],{},"The ",[1209,1477,1478],{},"PhoneGap wiki"," (",[1022,1481,1482],{"href":1482,"rel":1483},"https:\u002F\u002Fgithub.com\u002Fphonegap\u002Fphonegap\u002Fwiki\u002FDebugging-in-PhoneGap",[1026],") also has a page on debugging, with links to other tools.",[1486,1487,1488],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1205,"searchDepth":1490,"depth":1490,"links":1491},2,[1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506],{"id":962,"depth":1490,"text":963},{"id":988,"depth":1490,"text":989},{"id":1075,"depth":1490,"text":1076},{"id":1169,"depth":1490,"text":1170},{"id":1188,"depth":1490,"text":1189},{"id":1217,"depth":1490,"text":1218},{"id":1300,"depth":1490,"text":1301},{"id":1307,"depth":1490,"text":1308},{"id":1344,"depth":1490,"text":1345},{"id":1391,"depth":1490,"text":1392},{"id":1398,"depth":1490,"text":1399},{"id":1411,"depth":1490,"text":1412},{"id":1424,"depth":1490,"text":1425},{"id":1446,"depth":1490,"text":1447},{"id":1464,"depth":1490,"text":1465},"2014-04-27","md","\u002Fimages\u002Fblog\u002Ffeatures\u002Fdevelop-mobile-apps-phonegap.jpg",{},true,{"title":157,"description":159},"blog\u002Fdevelop-mobile-apps-phonegap",[16,161,17,162],"KmIIZ__IzynCA2azvVZm_-l8A9guXws1JakHacaxh3I",[1517,1519],{"title":798,"path":799,"stem":1518,"children":-1},"blog\u002Fsetting-up-umbraco-in-visual-studio",{"title":58,"path":59,"stem":1520,"children":-1},"blog\u002Fbackbone-patterns",1784954528839]