Citrus Sucking Sunshine

While looking up more angular resources, I was reminded of Firebase and realised it would be perfect for this project. So I removed the express components and created a new repo.

Originally I had looked into CouchDB as a simple way to get started but Firebase has too many awesome features to resist. This app is intended as an active event, having organizers constantly pieces of data that participants need to see immediately. Syncing this across clients is easy with Firebase. We could use GeoFire library but we're not actually querying a lot of new coordinates, just keeping track of a handful.

Additionally there's a great library for Angular, AngularFire as well as great support for Ionic. Offline sync looks easy to set up too, which could be very useful for this app!

Not using Express made me search for the easiest way to serve the site now. Originally I was going to fire up a Python SimpleHTTPServer but seen as I'm now a Gulp convert I found a Gulp plugin of course!

Important lesson learnt; spend more time architecting* the fullstack before writing code. Even though I only had a very light Express erver with a couple of routes, it's still time wasted.

*interesting aside

Also I came across a great method to hide important pieces of data like passwords and access keys, which can be found here, although I skipped to the bottom for the module bit. I looked into Node libraries similar to PHPs dotenv library but creating an Angular module to use as a config block works great. There's an example here in the repo.

Back To The Lab Again

First few days of Toronto have flown by. I've been to two meetups already. One by Fullstack Toronto hosted by a very friendly James Wilkinson and the other at Homestars Inc, a great presentation by Luis Saffie about building an API in Rails, which I found very informative as I've only skimmed some Rails.

Although I fear a lot of what I write is already available online and this is just repetitive info I'll extract it to the interweb regardless, if only as a public log of what I'm working on.

Taking a quick break from my podcast app. Currently building a scavenger hunt app where organisers plot areas on a map with associated tasks for participants to complete. This will consist of a dashboard for organisers and a mobile app built using Ionic for the participants.

For the dashboard the user should be able to:

  • create event
    • create a route
    • create markers
    • associate task to a marker
  • view teams
    • view teams task progress
    • view where teams are

Nice to have would be broadcasting a message to all participants or teams.

For the app the user should be able to:

  • join an event
    • create a team
  • view task
    • complete task

Mapbox maps because they're really pretty, cool and customisable and I want an excuse to tweak some tile maps. I'm using angular-leaflet-directive for convenience. Make sure to include lat,lng AND zoom in your center variable. I had left out center and spent considerable time trying to find the issue.

angular.extend($scope, {
        defaults: {
            center: {
                lat: 53.39,
                lng: -6.19,
                zoom: 8
            },
            tileLayer: "https://a.tiles.mapbox.com/v4/"+mapID+"/{z}/{x}/{y}.png?access_token="+accessToken,
            path: {
                weight: 10,
                color: '#800000',
                opacity: 1
            }
        }
    });

Random thought: It would be very cool if a high frequency sound could be emitted in a location, then the app could recognise this to provide sign up for teams. Although not sure about the implications of this on human hearing.

Radio Ga Ga

For the past few months I've been doing mainly backend programming. Coding with a lot of Laravel which is more often than not a joy to use. With those projects wrapping up I wanted to get back to frontend work because it seems a lot has changed since I last used Angular.

For me, it's important to start something, even if it's a little derivative to begin with. Or the code isn't perfect. Waiting for the perfect time, or all the prerequisite knowledge will only lead to stasis.

Aim for good enough. Iterate to perfection.

I've started a small project to get back into the swing of things. A basic app allowing a user to create a listing of show notes for a podcast. It's still a work in progress and there's already a list of improvements and features I still want to implement.

The app itself is Angular with Node/Mongo backend. The basic CRUD operations are supported and I delved into Node routing a little bit to stamp out some of my spaghetti code habits.

  • Gulp running just to compile SASS right now
  • Xeditable for clean in place editing
  • Angular UI Router for client side routing
A lot about Angular just works which is quite nice but for my own sanity I'll be delving into some Angular reading before I get back to this. Maybe then I can achieve slightly more idiomatic lines rather than

<input typeahead="handle as handle for handle in handles | filter:$viewValue"..>