Review of my first AngularZone meetup
It was my first time at the new SkillsMatter premises and wow that place is amazing. It’s over 2 levels, level 1 has a large meeting room ideal for large meet-up groups and mini single track conferences. While on the lower level there is a slightly small room ideal for smaller second track sessions or large training sessions. There is also a few smaller training rooms. In the middle of all these lower rooms is a bar, table tennis and seats ideal for the social side of meet-ups.
The AngularZone meet-up had 3 talks, one by the main organiser on AngularZone all about the new features in Angular 2.1 (yep we’re on version 2.1 already, (Angular releases are like buses you wait ages for one to come then 2 come along at the same, we’ll nearly the same time). The new parts of Angular are simplified animations and better preloading of modules.
Lazy loading modules preLoader looks a great feature. I personally can’t wait to use it and see how it will improve sites.
The second talk was from Ari Lerner, who wrote the original ngBook and co-authored the new ngBook 2. His talk was really interesting, all about how he is using features of Angular 2 for intelligent A/B testing. If his talk is available to see after ngEurope it is well worth looking out for.
The final talk of the night was a quick tour through GraphQL. I have to admit I’ve never see it before this and I was really impressed. GraphQL will make a great backend for an Angular app.
I’m looking forward to the next AngularZone.
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.