- React / Go / Mongo : MGR
- React / Node / Mongo: RNM
- Angular / Ruby / Mongo : MRA
- Ruby / Rails / Postgres : RRP
msg: Destination /etc/mysql/my.cnf not writable
The past, like the future, is indefinite and exists only as a spectrum of possibilities. - Stephen HawkingThere can at times simply be too many possible ways to solve a problem. Design patterns can help but they some times contradict each other. In order to be able to 'get things done' some times the best thing can be to have a standard way which means you can get started then discover along the way the problems you still don't know about. This idea works well with the concept of tracer code.
Many of the people I have worked with will know of my distaste for self signed SSL certificates in test environments. Once you have built a tool to generate and distribute these 'cruft' flakes they invariably spread. The worst case scenario is if these certs end up in your production environment. The real question to ask is will developers take the path of least resistance and skip SSL validation.
I have always advocated using genuine certificates for all build environments. This approach is usually resisted with the vigor of a grad dev defending his favourite language. I don't know why. With a little planning it is easy to use a subdomain, with implementation costs typically in the double digits per year. Usually the argument has more to do with resistance to fixing something that 'works'.
The recent news of symantec accidentally releasing test certificate is a really good counter case. This is one test environment that really should use a self signed cert. The Web needs security and the certificate issuance companies could be the weakest link.
One of the key principles of the design of many of the different API platforms I have built recently was to separate the model exposed to users from what is stored. I have and continue to be a huge fan of using Protobuf to model the internal messages consumed in systems. Using POJO classes and Jackson Json serialisation provides a great choice for the seialisation too.
Irrespective of the tech used separating these two layers has been a mandatory feature of systems I have built for a while. The key thing is creating flexibility of representation while also having a stable storage model.
As part of a redesign of the external API for Upgrade I reviewed the features of the model. I had a shopping list of features I wanted to add. As many times before I started refactoring the representation while rerunning the tests to ensure I didn't break the representation published for the API. I started noticing a few patterns of code that needed cleaning up. These models are after all the oldest code in that project.
Over time the project had been refactored a number of times and this layer of the code had become more encapsulated. The up shot of this is that new abstractions introduced in other places had not been applied in these old objects. The changes all had the same basic pattern:
"Don't mix layers of abstraction"
When the project first started many of the messy features had been cleaned up. While awesome tools like IntelliJ will find some common refactoring this was a more subtle layering refactoring.
To try and avoid this again I came up with a new rule for these kinds of classes where if I find myself writing helpers, statics etc. I will add a TODO to review later. This sort of problem can often occur earlier in a project especially when the general structure and repeted functions haven't been identified yet.
Remember to watch out for the mixed layers of abstraction as a clue. Happy coding.
After four months away with occasional trips back I am heading home to the UK tomorrow. In this stint I have been away for over 50 days. I didn't really plan to be away for so long and it has presented some problems like I had to upgrade my travel insurance as it stopped at 45 days.
Due to the fever I had over the last week or so I haven't had the opportunity to do many of the things I needed to before heading back like arranging somewhere to live. Small point I know :-)
The thing about breaking a leg that you don't realise at first is that you are going to have to rely on others for practically everything. The main challenge is shopping which presents a real problems when on crutches. In the UK there are food delivery companies but depending how / where they deposit the food it could take hours to put it all away.
"Don't worry, you aren't leaving anyone behind so it doesn't matter if something happens" - says the nurse....
"It matters to me!" I say back.Unfortunately the surgery took longer than expected and the effects of the (insert name of drug related to morphine) were quite severe. I am still not sure if I hallucinated waking up with no underwear. I asked the nurses later but no-one had any idea what I was talking about. I also picked up some good bruises it seems, again no idea why and no information to explain it.
Given a daily traffic estimate of T per day, the average per minute traffic over 24 hours would be X, assume typical load is 3X and assume peak minute load is 15X.