Does it matter what an app is built in?

Well not really?
There has been a big argument on Twitter about NativeScript vs Ionic or NativeScript vs Hybrid and how you can upgrade to NativeScript from hybrid.
Of course the hybrid people weren’t to keen on that idea.
But really in the end it’s all about the app and what it can do and how it performs. I choose to create Ionic apps because I like how Ionic works, and how you go about developing Ionic apps.  I think the team at Ionic have done a fantastic job creating a framework and SDK that allows me to create cross platform apps.
It only matters how apps are being built if you have something to sell about how apps should be built, whether it’s a book or a course. Me, I like to build apps that perform well, look good and do exactly what the clients what the app to do.

The Rockd app really does rock

I recently read a great post on the Ionic’s Medium blog highlighting a new Ionic app called Rockd. I’m not a geologist, but this app looks really good.

What I like most about it is that is shows that mobile apps can be more than just games or productivity apps (which I do like). Mobile apps can be used to support a hobby or learn about a new skill. As we move into a more remote work place, mobile apps can help organisations and their employees work better.

I think that Rockd allows users to discover more about geology, it’s good to see an app developed for something else.

Progressive Web Apps and the enterprise

I’ve recently been watching talks from Google’s PWA Summit while watching the various videos I could really see how Progressive Web Apps (PWAs) can really help in an enterprise arena.

For example a few months ago I was working on contract at the UK Houses of Parliament, for a team that built apps using web technology. We started building mobile apps using jQuery mobile, Bootstrap and eventually Ionic all great technologies (though Ionic is my personal favourite). While we could easily develop these apps it was the building and releasing the apps where we encountered problems.

The main cause of the problems was IT security. As you would expect security there was very tight, this also included IT security. So having access to tools like NPM or GitHub was restricted, both tools that modern web developers take for granted. We even had to download the Ionic framework ZIP folder in order to create a Ionic site/app.

So in order to release an app we uploaded the ‘site’ to an external host (a mission in itself). Then when a user went to the site they were told that they could add a link to the this mobile site on their phones home screen. Using the fantastic AddToHome JavaScript library. Then when the user clicked on the newly created icon the mobile site opened in a full screen browser.

For offline support we used appCache and if we wanted to record offline data we used localStorage, though it does have limited amount of space.

Now after reading about Progressive Web Apps, I can see where they would be extremely useful in situations where teams don’t have access to the modern build tools or app framework tools that are now common place in the web.

For the apps we built at the House’s of Parliament, Progressive Web Apps would be so useful. Using service works for offline support, IndexDB for data storage, push notification and the install on home screen features that are part of PWA are all features that we used at Parliament. And being able to release apps without having to build them or release through the apps stores, both of which access to them could be blocked due to the security settings.

When I told the team at Parliament about PWAs they were really excited. I for one look forward to seeing what they make with them.

I really think that Progressive Web Apps are a fantastic technology and I really look forward to working with them.

Chasing your own tail

Working on the internet is great, it gives people around the world a level playing field in which to achieve their goals. A single developer can start a simple project with only a laptop and a internet connection and within a few years they can be in charge of a massive global company. But the internet is also a crazy place with it’s rush to get the latest technology out there, the newest framework, the ideal way to build an app or the latest social network.

As someone who works with the web I find that somedays I am spinning around like a dog chasing it’s tail (which is always funny) trying to keep up with what’s new or to find out how a new technology works. For example here’s a list of technologies I currently have an interest in:

  • Angular 1
  • Angular 2
  • Ionic 1
  • Ionic 2
  • NodeJS
  • ExpressJS
  • Sass
  • Less
  • Firebase
  • Bootstrap
  • Responsive Web Design
  • Mobile app development

Some list, it looks like one of those job ads that list everything but really tell you nothing about the role. This is another list of technologies a modern web developer could look at:

  • React
  • React Native
  • NodeJS
  • Express
  • HapiJS
  • Angular 1 & 2
  • Ionic 1 & 2
  • AppCelerator
  • NativeScript
  • Sass/Less
  • RWD
  • Native iOS
  • Native Android
  • jQuery
  • Ember
  • .Net framework, all of it
  • Git
  • PHP
  • Rails

This is a long list, it’s taken me a whole day coming up with the list let alone spending time learning these technologies.

The problem that the web has is that it’s become a massive marketing playground. Large technology companies are telling developers that there technology is best, that it does everything a developer will want or that the latest version of their technology is coming out with these amazing features.

Then there is social media telling developers about what they should be looking into, what is going to be the next big thing over the coming year. Or which technology/framework all new projects will be built it so you ‘must’ be using this or you’ll miss out. Then there is the recruitment industry that likes to tell developers that their clients are looking for developers who can do this (see list above).

It’s crazy.

I remember when I started working on the web all you needed was HTML, CSS and JavaScript, that’s it. These three technologies are still around, see central to working on the web.

In order to stop feeling like a dog chasing it’s tail (see it’s mad) I need to focus on a few things, Angular, Ionic, JavaScript, Sass, HTML and GTD. By narrowing down what I’m looking, by specialising what I do it’ll make me a better developer.

So now I need to go into my RSS reader and Twitter and remove the feeds and accounts of things I think I should be interested in and just have a few feeds on these technologies and a follow a few Twitter accounts.

The web is great, but it is also crazy being able to specialise is better than trying to learn everything, that’s impossible.

A great book about this is Philip Morgans – The Positioning Manual

Stay on target, stay on target

The other day I was watching the Developer Insights videos on the Apple Developer website. The video that I really enjoyed was the one with Brian Mueller who developers the Carrot suite of apps.

While watching those videos I did start to think ‘ah native development looks fun, building apps for iOS, Mac and Apple Watch. Maybe I should start learning Swift’. So then I started downloading the free books on Swift from iBooks and following Swift accounts on Twitter.

Then another thought popped into my head (my second thought of the day, it was a good day). Do I really need to start learning something new? Don’t I want to specialise in Ionic development? And this reminded me that I should keep reminding myself of my main aim and sometimes remind myself to ‘stay on target’ working towards my main goal of becoming an independent Ionic developer.

Of course I will take on jobs/contracts that may not involve working day to day with Ionic, but as long as the technology I’m using is related then I can’t see this being a problem, if for example I working with Angular 1 or 2 for a few weeks then that still helps. Learning a totally new platform e.g. Swift is not going to help me working towards my main goal.

So I need to set a regular reminder in my calendar to review where I’m at and what I’m doing to work to this goal.

Ionic 2 links

I’m starting to look into learning Ionic2 (and Angular2) so here are some links to articles and resources I’ve been reading about Ionic 2:

Here are some great videos:

These are just a few of links I’ll add to them as I find more. I’d also recommend the Building Mobile Apps With Ionic 2 book from Josh Morony

Building a app part-time needs planning

Recently I’ve tried several times to start working on a side project, building an app. I’ve had several ideas, an app for tracking your Warfarin intake (after getting blood clots I found out how important regular Warfarin is), an app for managing you post (letters not email) and an app for tracking visits to the gym and what you do while there.

All ok ideas, I won’t know until I have a early version out whether other people like them, but I think they are ok and I’d use them.

So far I’ve got no where with them. Yes I’ve started them several times, I’ve create many Ionic template apps ready to start building the app, but this is as far as they get.

I’ve also been working with another developer on a app they want to build. It’s a great idea and will be a fantastic app once built, but what I’ve found is as I can only spend a few hours a day on the app. If the planning of how the app will work is not in place then development will slow to a virtual standstill. I’ve found this with both my apps and this other third party app.

If before development starts things like data structure, screen flows, how the app will handle offline support, how the app will inform the user what’s happening as they use the app. If these things are not planned or at least considered. Then during development the developer is building an app partially blind. Decisions that the need to be made will be decided by the developer as they go. For a side project this maybe ok, but it will slow down progress on the app. You’ll find that you will be rewriting functionality in the app over and over as you change your mind. This will slow progress.

Though you think as you are coding you are making progress, if you are rewriting the same part over and over the app is not progressing. When you see the apps isn’t getting any closer to being ready to launch, your initial enthusiasm for building the app will disappear.

So for my personal side project apps I need to go back to the drawing board (well notepad really) and plan these following aspects of the app:

  • Screen flow
  • Data structure
  • Offline support
  • User messages
  • Features for first version – in order to get the app out there to see if people will use it
  • How the app will be promoted
  • Who’s the target audience
  • Pricing structure – will I charge for it? If so how will that effect the structure of the app

A lot to think about. Some of these can be fleshed out as the app is being built, but having a good idea/plan before starting development will help.

Side projects or part-time freelance work

I’ve been thinking about part-time freelance projects vs side project, and the pros and cons for each.

If you have a full-time job or contract you’ll only have a few ‘spare’ (if that’s actually a thing) hours. So is it better to get a freelance project or spend the time working on your own projects.

If you have a freelance project you are getting paid, which is a plus. It also may building a project using a new technology that you want to get into, for example building a native iOS app or a WordPress theme, which is a great way to get into a new arena. But you are building a project for a client who has their own deadlines and plans for the project. So there is extra pressure to get work done. Those days when you get back from a long day at work, and you know you have to star your second job. You’ll have emails from clients asking how projects are going or asking for amends to the project.

With side projects you do get the freedom to use a new technology you want to get into. You are the client, so you guide the project any amends are your ideas, you decide how the project will go. Once your side project is live you can show others and use it as a way to show your skills in a new technology. The main drawback for side projects is when building them you are not being paid, you may find that progress on the project slowly gets slower and slower until the project comes to a halt. While with a paying project you’ll keep working on the project so you can get paid once it is complete.

Looking into this I’ve found some interesting articles, including this one on the Todoist blog about keeping your side project moving forward. In this article it lists some amazing projects that started as side projects including Gmail, Github and Buffer all very successful projects.

So where do I stand on this? Well I’m currently leaning to the side projects. Because I’d prefer to work with a technology that I want to get further into. I’m sometime a bit lazy so those days I get back from work I may not want to work on a project. It’s a tricky one…..


Directives in Angular

As part of my reading up on Angular, I’ve spent a bit of time looking at directives. These are my notes from what I’ve found out, mainly this post is for my own benefit.

– Four ways to clarify a directive

– Element =

– Attribute =

– Class =

– Comment = <!—directive:person —>

The restrict attribute in a directive will set what the directive can be loaded as

– E = Element

– A = Attribute

– C = Class

– M = Comment – These were setup as a way to get around the problem in early versions of Angular where the browser restricted how many directives could be created

Replace:true means that the template in a directive will replace the HTML element of the directive. So if a directive called contains a element with two input boxes for first name and last name. When the output HTML source is viewed the tag is replaced by the input fields.

Directives that manipulate the DOM usually use the link option to register DOM listeners as well as updating the DOM:

– The link function contains functions that effect the DOM

– Functions that can run against the $scope

– The link function takes in 3 scope, element, attr

– Link functions should have a $destroy event to clear up directives

Isolated scopes are defined in a Directive as scope: ‘=‘. An isolated scope is an object that is specific to that instance of a directive. So for example if you have a directive that has a template containing two input boxes that will show a list of users first names and last names. This directive allows the user to edit the names in a list. So each directive have access to its own scope and they aren’t all using the same scope object. You create an isolated scope so each version of the directive has it’s own scope.

All this information I found on the AngularJS site in the Developer Guide a great resource.

 

 

Continuing my GTD Exploration

Yesterday I wrote about how I was struggling with using GTD and actually getting something done. Like a lot of developers I have tons of projects I want to get done. Personal projects, client work, day to day coding tasks, tasks that you have to complete when running a limited company and all the jobs you need to do at home (family, house, finances etc). So there is a lot.

GTD is aimed at helping you obtain ‘stress free living’ a nice idea, but when you first go through the collection phase of GTD, where you sit down and write out all the things you need to do it looks really overwhelming, this can put you off starting anything.

As part of my getting better at GTD I’ve been watching the Todoist videos by Carl Pullein where he shows how to use the features of Todoist with GTD. His latest video is on dealing with projects that are overwhelming, projects that have a large number of tasks. Through using uncompletable tasks, he sets up stages within a project that tasks for that project can be added. So you can split up your project into more manageable stages. This is a great idea and really helpful.

I’ve also been reading about others who use GTD with Todoist. One article I found was by a JavaScript developer Justin Hill. Who in his article Organising a Life of Learning and Action makes a good point, that people express the desire to be ‘productive’ like we are machine’s just sitting in a factory producing stuff. This is a good point. With the world of start-ups, entrepreneurs, app developers and people who seem to make new products every week. We can easily get caught up in the idea that if we aren’t productive or building something, we’re not moving forward with our lives.

I think the we, as people who work with the internet (developers, designer, freelancers, entrepreneurs) can get caught up in having the best system for managing all the tasks, ideas and content we get exposed to everyday when on the web. For example I think we’ve all used every known task app there is. We all have several social media accounts just sending tons of content our way. All this on top of general day to day living can be very overwhelming.

So I think worrying that the system I have in place for managing the tasks I need to do is just adding to the problem or having so many things to do. GTD’s main aim is to provide you a way of taking all that is floating around in your head and getting it written down. Then you can sort through it when you have time and using the technique shown by Carl creating projects that aren’t overwhelming seems a possibility.