Why an iPad for a backend developer

So I’m a backend developer. I’m often closest to the source of most technical problems at my job. Networking issues, memory issues, hardware issues, operating system issues, the list goes on. I need to be able to tinker and play with things often, so usually my work environments reflect this. So the question is, why in God’s name would I want to move to an iPad? The downsides are immediately obvious, I have almost no tinkering power on here. It’s not Open Source, like at all. There’s very little I can do with this if something goes wrong, recently I had an issue with an app not syncing with my iPhone, I had to contact the developer and ask for assistance, rather than just jump down to the log files or the code itself and see what was up. ...

January 8, 2018 · Shane Dowling

Freelancer Lessons – Part 3

This is part 3 in a series on lessons I’ve learned from several years of freelancing. You can find Part 1 here and Part 2 here, though you can read these in no specific order really. Watch your mental state When you’re working a full-time job, you’ll have people around you who will get to know you over time. Professional relationships start to develop, people will start to recognise you ‘on a good day’ or ‘on a bad day’ with enough ‘bad days’ on the trot almost always a caring co-worker or a good boss will check in on you, perhaps help with your workload or just lend an ear to listen. ...

January 6, 2018 · Shane Dowling

Freelancer Lessons – Part 2

This is a series of posts on lessons I’ve learned while freelancing for the past four years. You can find Part 1 here. Focusing on “profits only” I’ve alluded to this in my previous post, but, now that you’re a business, you may start to make decisions that optimise being a business, not a person. It becomes easier to start making decisions that might lead to say personal burnout for the sake of professional business health. Taking holidays was a big one for me, while contracting I never once took as many holidays as my partners mandatory holidays in her full time roles. Knowing your invoices were about to take a big hit next month by taking say, two weeks off will always be hanging over your head. Even if you’ve calculated that you would get paid a whole lot more over an annual period if you took a bunch of holidays while contacting when decision time comes for that month, it can be tough to make the call to take that time off. ...

January 1, 2018 · Shane Dowling

Freelancer lessons – Part 1

Looking back on this year, many of the lessons I’ve learned had less to do with specific technologies and more to do with long term career growth. I’ve been a developer now for 9 years and as a result, I’m starting to think more about longer term goals and happiness. As a result I made the decision to move from contracting back to full time work towards the tail end of the year so a lot of my reflections are tied around the costs of short term thinking and contracting in general. ...

December 31, 2017 · Shane Dowling

A Short Review of 'Freedom from the Known'

Freedom from the Known can be a tough book to crack, the lessons offered within are almost dismissed by the arguments made within the book, on top of that it’s likely most won’t be in a position to even accept what they read as they are reading it. Despite these barriers, there is still wonderful lessons here calling out our own values, our judgements and what is preventing us from being truly free and present in each moment. ...

October 13, 2017 · Shane Dowling

Faster SugarCRM Development with PHPStorm

Javascript development with SugarCRM can be a bit of a pain, however combining PHPStorm’s filewatcher tool with a cut down repair script can speed things up to a more tolerable level. What this setup does is watch for any javascript changes in our custom/ folder(because you’re not making core hacks are you?) and execute a light-weight repair script when any of those files change. So you’ll hit save in PHPStorm, wait a few seconds and your dev javascript should be refreshed and ready to test. ...

April 30, 2017 · Shane Dowling

Pomot — command line pomotodo client

For anyone interested, I’ve created a simple pomotodo client for interacting with pomotodo.com easily. You can find it here, feel free to use github issues for any issues or feature requests you can think of.

April 20, 2017 · Shane Dowling

Command line calendars with Khal and fastmail

Recently I’ve been on a bit of a command line kick and I started using khal to render my calendar agenda locally. All of the codebases used are python based so before I start I’ve created a virtualenv so as not to pollute my OS. mkvirtualenv khal workon khal Vdirsyncer Firstly we need to setup Vdirsyncer, which is used to actually download your caldav entries to a local folder which khal then reads from. ...

April 4, 2017 · Shane Dowling

SugarCRM 7 — Conditional Read Only Fields

SugarCRM has a few ways to set fields as read-only, but it leaves a lot to be desired. One of the missing features that you might need to implement is having a module flagged as read-only on the record view based on a field on the module or the result of an API request. I have found a way to do it but it is mostly basic UI hacking and doesn’t set the field read-only everywhere on the UI, just the record view page. So it will remain on the recordlist view or within other subpanels as editable, so bear this in mind as it’s only useful for very specific cases. ...

February 6, 2016 · Shane Dowling

NetworkX — Get all Paths from all sources to sinks

Often when I’m working with graphs and a set of masses in a spectrum I need to be able to iterate over all paths for all sources and sinks in that graph. Especially if I’m looking to compare multiple ideal spectrums against a given spectrum. Here’s some code that will allow me to quickly iterate over all source->sink paths in a given graph G. #!/usr/bin/env python """ Shane Dowling, 04 Nov 2015 Will iterate over all sources, sinks and get all paths """ import networkx as nx G = nx.DiGraph() # Fill in a few edges sink_nodes = [node for node, outdegree in G.out_degree(G.nodes()).items() if outdegree == 0] source_nodes = [node for node, indegree in G.in_degree(G.nodes()).items() if indegree == 0] for [(source, sink) for sink in sink_nodes for source in source_nodes]: for path in nx.all_simple_paths(G, source=source, target=sink): print(path)

November 4, 2015 · Shane Dowling