👉 B1MCA 👈
Would anyone like to join Fizz? The new all-digital mobile service provider that lets its members rollover their unused data to the next month. It’s such a smarter alternative — you’ll love it. and we each get a $35 bonus. Get started: https://fizz.ca/en?ref=B1MCA
Here's a list of software & hardware I use on a daily basis as a freelance software developer.
Not everything is in a container, and not everything is easily containerized. Sure, in development you can hook your application up to a mocked-up database, but what if you've got an actual production database that requires authorization for your application to talk to it? Or what if you need to change Route 53 settings because you're doing a blue-green deployment of containers in AWS? What if you need to set up networking between two containers on different hosts, but the two hosts can't even talk to one another?
I was always thinking "Ansible vs. Docker" when the answer was "Ansible + Docker." 💜
A high availability (HA) setup is an infrastructure without a single point of failure. It prevents a single server failure from being a downtime event by adding redundancy to every layer of your architecture.
Because, you know, my 5 MAU side-project really needs load balancing 😇.
Great talk by Justin Searls about working on a team with different programming personalities/perspectives, "outside-in development" and really helped put into words why I enjoy writing seemingly unnecessarily small units of code.
It's geared towards the Rails audience (being a Railsconf Keynote) but it's applicable to development in general.
A good technique for removing Optional
properties.
class LocationViewController: UIViewController {
var notificationMessage: String?
// ...
}
vs.
class LocationViewController: UIViewController {
enum Mode {
case fromNotification(message: String)
case normal
}
var mode: Mode
// ...
}
This optional property doesn’t carry any semantic meaning. What does it mean about the state of this object if the type is nil?
Quick summary of the concepts:
- Hugging: content does not want to grow
- Compression Resistance: content does not want to shrink
New rule: if I need to Google a concept more than 5 times, I'll put it on this site.
When programming loses its elegance... Also, a great use case for GitHub's "squash and merge" button.
The biggest obstacle was understanding why Travis was complaining that it had no eligible devices to run my tests. Even though I could clearly see that it had iPhone SE simulators running iOS 10, it kept giving me this error:
xcodebuild: error: Unable to find a destination matching the provided destination specifier:
{ platform:iOS Simulator, OS:10.0, name:iPhone SE }
Ineligible destinations for the "FisherHallClientTests" scheme:
{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }
The reason was because my deployment target was iOS 10.1. Travis is using Xcode 8, which only has iOS 10.0 devices. Obvious in retrospect.
One of the first things I do on any new project is hook up continuous integration. Tests that don't run continuously are not maintained and unmaintained tests are most likely failing.
If—like me—you have trouble getting Travis to see your test scheme from Xcode, make sure that you mark it was "Shared."
The root cause is that the default behavior of Schemes is to keep schemes 'private' until they are specifically marked as shared. In the case of a command-line initiated build, the Xcode UI never runs and the xcoderun tool doesn't have its own cache of Schemes to work with.
As a new convert to tabs in the Tabs vs. Spaces war, my immediate concern was
how my code would look in GitHub 👀. It turns out that GitHub respects the
.editorconfig
file used by JetBrains, allowing us to set up the default tab
size with the following:
.editorconfig:
[*.swift]
indent_style = tab
indent_size = 2