amader
amader
Aaron Mader
83 posts
A bright, adventurous, and ruggedly good looking farm boy from the hills of midwestern Ontario. Occupation: Software Developer, Entrepreneur, and owner of Litiks. [email protected]
Don't wanna be here? Send us removal request.
amader Ā· 1 year ago
Text
Planning meals - without the mental load
About 12 months ago my wife started a new job in construction. This meant she was out the door early in the mornings, and arriving home later. So among other changes in our routines; I took over the mental load of planning and preparing dinner for the family.
And I hated it.
So, I made an app to help me hate it less.
The basic idea for what I wanted is very simple: Rather than making a shopping list, I wanted to create a re-usable 'meal', with a list of ingredients I'd need to add to my shopping list to make that meal. Then, between picking the meals for the week and the resulting shopping list, I'd have a quick 'check' step. (I'll need ground beef to make tacos, but I already HAVE ground beef in the freezer)
That's it.
In software terms, I applied the concept of "don't make me think" to the task of selecting meals, and assembling the shopping list for your grocery run. After using this app for a year, I still plan and prepare all of the meals for our family, but now I have zero stress about it.
Here's a glimpse of my life now:
When I'm cooking, I notice that we're running low on olive oil. So I add it to the shopping list.
When there's a craving for a particular meal, I add it to my next 'plan'. "Dad, can we have noodles like Nana makes them?" "Absolutely we can."
When it's time to go shopping, I'll fill out the meal plan by accepting a few suggestions. How about store-made lasagna? "Sure."
Next, I'm prompted to check around the house for specific items. - Do we have ground beef? "Yes" - Do we have taco seasoning? "No" (So it's added to the shopping list) - Do we have a frozen lasagna? "No" - Do we have eggs? "Yes"
This 'check the cupboard' step always includes my essentials - items like eggs and milk (basically things that I have a tendency to forget when I go shopping).
After checking the cupboards, I'm left with my shopping list for the week.
After shopping, I have a nice list of the meals I've planned for, along with preparation instructions.
That's it! Dinner planning, without needing to think about it!
It's bonkers how much of a difference this makes for me. I do so little thinking about what to do for dinner. It's also worth highlighting how *interruptable* the whole process it. I can get interrupted by screaming children while I'm picking meals, or while I'm halfway through the 'check the cupboard' step, and it doesn't set me back at all. The next time I open my phone, I'm just prompted to pick up where I left off. "Oh right, I just need to check if we have onions."
I like to make a game of it. Can I plan and order the week's groceries in the time it takes my 4 year old to dress themselves? (Yes. Yes I can.)
And now, you can to! I recently made my app signup-able, so you can try it at your house. Check it out at: https://supperstock.ca/
0 notes
amader Ā· 2 years ago
Text
Jul 19, 2017, 7:50 AM
(This is a dream I documented back in 2017, and never shared. I found it in my inbox today, but I have no memory of it.)
Carnage everywhere.
We start in the lost city of altantis. Magical, underwater. It was found by walking off a cliff in Arizona and walking on nothing across the gap.
We spend years there. Developing their weapons, and trying to build tech to make our way back to the modern world. But it occurs to us; it's difficult to tell the zombies apart from the other factions trying to survive. Both are constantly attacking. The zombies to kill, and factions to steal resources.
But we are skilled at bringing death. I have a grappling hook, and I can jump great heights. We have homemade glycerine bombs, and we ride these monsterous machines of the future. Giant trains that run on 4 tracks, vehicles the size of a city block. And we are constantly on the move, trying to get to safe objectives, or to connect with people who can help us, or to people that are vital to stopping all of this. We have powerful energy weapons, but so do many of our enemies. A few times I make a mistake - run around the wrong corner and get skewerd - but I seem to be able to redo my effort.Ā 
An enemy throws a grenade at me, but I pick it up and return it back. They set up a nitro bomb in the middle of our boat, and I don't dismantle it in time, close friends and most of our resources are lost. We're forced inland.
Not all of the factions that surround us are hostile, but it's very hard to tell the difference. We shoot at anything that moves. At one point I realize that a particularly large group of horrible looking people are crowding in around us, and it's not until we've killed half of them that I notice they're not attacking, and they don't have weapons. I realize they have no way to communicate an alliance in the middle of a firefight, so their final resort was to approach us unarmed, as a gesture of peace, but we had slaughtered them.
We raid a well-guarded park to find a man who will be able to tell us what's happening. He explains all to us, as we escape by climbing up a series of housing units that are ever increasing in size. First, as buildings, then as city blocks, then as high rises. Always the same sturdy rounded shape. Just increasingly large, and increasingly many. He explains that we solved the housing crisis by increasing density. Millions of people lived in these monolithic structures. We all commuted on these massive trains, we all worked in massive complexes, but then the visionary that created all of this got sick, and rotted in his home for months. Before anyone had found him, his disease had spread. And because of that density, the zombie infection had travelled fast.
Now as we climb and jump across these giant buildings we realize that they're the source of the zombies. They're crawling with them. And we're provoking millions of them with our noisy actions. They're spilling out of windows like water.
0 notes
amader Ā· 3 years ago
Text
Robot arms. (a dream)
Context: I had this dream while on vacation last week. I live in the distant future.
I work mining resources on an alien planet. We’re on an explatory mission, and we work with tools that are like an exoskeleton: we’re all so proficient with the controls that our equipment is like an extension of our own bodies. We swim around in a cloudy liquid, brushing away plant and animal life to collect rock samples.
My coworkers and I see all sorts of bizarre and fantastic wildlife, but we're not getting paid to honor the local species. I swing my exosuit's robotic arm against some sort of puffer fish equivalent and it pops, oozing some sort of pink acidic liquid. It corrodes my robotic arm, and to my surprise I feel a pain in my actual, physical arm. It's hard to tell if I'm actually injured, or if it's just in my head. I feel a bit woozy.
So I take some time off and teleport to Disney world, back on Earth.
A couple of my crewmates decide to join me. We make good money, and we havent been back to the home planet in a while. We walk through a sparkling patch of fog. It makes your head spin a bit as you walk through, but when you walk through the foggy patch, you're on the other side of the galaxy.
My coworkers and I aggree on an amusement ride, and it’s so incredibly disappointing. It's basic animatronics. Like "it's a small world" from the 21st century. Static sets with some basic, repeating motions. We’re going around this loop track, with some simple mad scientist plot playing out over loudspeakers. Each loop you have the option of turning your car to the left to exit the ride, or continuing right to continue around the loop again to continue the story.
We unimpressed and bored, but we continue right to see where the plot will go. After several loops, it finally gets interesting. We go around the same loop of track, but this time there are new hologram plants and creatures, and the plot gets interesting. There’s a nice recreation of a Jurassic park dinosaur which jumps out to eat us, but we’re not duped. There are clear distortion effects at the edge of the skin and teeth that clue us to the fact that it's a hologram.
We 'continue to the right' and after a short distance it appears we’re redirected off the normal loop track, and onto the back of a giant snake-like creature with two rows of eyes along its entire back. The eyes watch us as we travel along it, and we can reach out and touch them. When you touch the eyes they blink in discomfort. When we reach the head, none of us are sure whether this is animatronic, holographic, or... actually real. For the first time on this ride, we feel the thrill of actual fear. It looks like this giant snake might actually eat us at any moment. There's no way to continue forward, so we direct the car to reverse.
Then it gets weird. The next loop around the track; we go through a series of sensory tests. The mad scientist from the beginning of the story is now experimenting on us directly. They connect a number of probes to our arms and legs. We feel the touch on our skin, but that could just be a haptics array; a common technology in our time. We are still safe in the ride's car, after all. The mad scientist pulls up racks of tentacle like tubes. When they touch a tube, we feel touch at some place on our body. The scientist explains that this is all to be expected. These tubes attach to the nerve endings on our back, shoulder, etc.
There’s a small rack of green ā€˜nerve endings’, and then there’s a huge rack of purple nerve endings. The green correspond with nerve endings that we're familiar with. Sensors for heat and touch that cover our bodies. The purple - we're told - are nerve endings which our brains possess, that aren’t connected to anything. The mad scientist is going to help us learn to recognize those nerves.
We continue along the track, going through a series of stimulation tests. Some feel normal, like a foot massage, and some feel bizarre and foreign. Feelings of touch that you can't quite place. You feel it, but you can't place where on your body the touch is happening. The touch feels detached from your body.
Then, rather than touching one of the tentacles, the mad scientist holds up a human hand, and touches each of the fingers. I feel the touch, as though the (severed) hand they are holding is mine. The scientist repeats the process with a foot, pinching each of the toes; and again I feel the sensation as though the foot is my own. The scientist smiles and says in a reassuring tone "Good. Because those were your original hand and foot."
The scientist is replacing my human body with android parts. Prosthetic arms and legs. I begin to feel genuine panic. I can't tell whether this is just a really convincing ride from the future, or if this is really happening.
Still, every couple seconds we’re given the choice to exit the ride to the left, or continue to the right. My coworker look at each other nervously, but we convince each other that it's all part of the ride. We continue right.
There’s a transition sequence where I am reassembled fully android, and then covered with a fleshy organic layer that looks similar to my original skin, but with the signature sheen of printed organics. My transformation is complete. I am no longer human, and I look just like any other service bot of our day. Is this real? How many other riders have gotten on this ride, and came out with a different body?
My fellow rider is even less forunate though. I watch as they're reassembled into some sort of alien monster. The type of thing we hunt, and kill, and hate as part of our work. A large, dragon-like creature, with many arms, legs, and fins. I can tell that they're still my coworker. Somehow their mannerisms still shine through in their body language. And that serves to make their transformation that much more disturbing. The lines between 'us' and 'them' are blurred. This is too much.
On the next loop, we choose left to exit.
But it doesn’t work. Some lights flash red, and a brief PA announcement says "we're sorry for the inconvenience, but that option is temporarily unavailable."
The ride continues to the right. Down this ever-escalating spiral into insanity.
Did we ever have the option to exit? Was it just an illusion of choice? Was this decision of 'stay or go' just to give riders some feeling of control, so it would be that much more thrilling when that control is taken away from them?
I attempt to break of the ride. I use my android strength to break free of the ridecar, and throw myself at an energy barrier. It tears off my fleshy skin covering, leaving me in android form. I look like a T-1000. I fight my way through robot safeguards and security checks to get off the ride.
But the increasing difficulty and forced route make it feel like my escape path is orchestrated. Even my breaking free and attempting to escape might be part of the ride. An interactive component; like the ride is half-spectative, half-interactive. Like an immersion videogame. That level of immersion exists in this time. And I know that some people can suffer from bodily disassociation when they play for too long. They spent so much time in the game that their virtual body feels more real than their own.
It’s unclear if this ride will ever end. Maybe some riders that always choose to continue are eventually absorbed. A small part of the population just never exits.
If I do get out of here, will I still be me? Will I come out looking and feeling like me, but inside I'll be an android? Have I been forever altered?
Note: Books I've recently read: Altered Carbon, and The Three-body Problem (series).
0 notes
amader Ā· 4 years ago
Text
Bundling emails with script.google.com
Just because I want to receive your newsletter, doesn't mean I want to interrupted by it. I want to control what arrives in my inbox, and when.
While I was looking around the web for tools that might help me accomplish this, I stumbled onto script.google.com, which is a google-provided service where you can write javascript code to interact with your google accounts. I was able to set up a script to meet my objectives in a little over 30 minutes of poking around.
Here’s what I wanted:
I want to bundle certain groups of emails, so that they only appear in my inbox at certain times.
If possible; I want a simple way to snooze select emails to the next 'odds and ends' date on my calendar, without knowing what that date will be.
I don't want to give a 3rd party (like boomerang) access to my email account, if possible.
In short: I miss google inbox, even after 2 years.
The finished product is even better than I had hoped. Here's how it works:
In gmail, I adjust my inbound filters to 'skip the inbox' and apply the appropriate label, such as "This weekend" or "Next odds and ends day"
When an email arrives; I don't see it.
The script runs every hour, reviews my rules, and moves the emails into my inbox when the time is appropriate.
Bonus: The script is able to pull information from my calendar, and make decisions based on that.
For example: If there's an 'odds and ends' day in the calendar in the next 30 days; wait until then to move the email to my inbox.
This new tool in my toolset will help me to reduce the number of distractions I receive while I'm working, while allowing me to continue using a familiar tool (gmail), without needing to grant anyone else access to my most valuable online account.
0 notes
amader Ā· 4 years ago
Text
Drawing inspiration from stale-while-revalidate
There's an http caching directive called 'stale-while-revalidate', which will cause your browser to use a stale cached value, while refreshing its cache asynchronously under the hood.
Making practical use of this setting within my projects proved futile, but it was enough to get me thinking; I want access to that asynchronous response when the browser receives an up-to-date response. I want to make an ajax call, and just have my callback fire twice. Once with a stale, cached response, and again when I receive up-to-date data. Lucky for me, this is actually pretty trivial to implement in basic javascript.
Use case:
I work on a SAAS product for managing inventory. The user's primary view/screen includes a sidebar with a folder structure, and each folder in the tree includes a count of the records beneath it. This sidebar is used for navigation, but the counts are also helpful to the user.
For power-users; this folder structure can become very large, and counts can reach the hundreds-of-thousands. The folders that are visible to the user may depend on the user's permission to individual records, and there are a number of other challenging behaviours to this sidebar. In short; it can take some time for the server to generate the data for this sidebar.
Natually, the best course of action would be to refactor the code to generate it faster. And I'm with you. Refactoring and designing for performance are the ideal solution long-term. But there is a time and place for quick fixes. In our case, we're bootstrapping a SAAS: fast feature implementation leads to winning and retaining customers.
One intuitive improvement we can make is to give users a more progressive loading experience. Rather than generating the entire page at once and sending it to the user as a single http response; we generate a simpler response, and then fetch 'secondary' information like the sidebar via ajax.
``` <div id='sidebar'> Loading... </div> <script> $(document).ready(function(){ $.ajax({ url: 'https://...', success: function(data){ $("#sidebar").html(data) ... // other initialization }, }) }) </script> ```
Now, the user's browsing experience feels faster, with the primary portion of their page loading more quickly, and the sidebar appearing some moments later. You do have a new user-state to consider here: the user may interact with the page between when the page loads, and when the callback is called, so you'll want to watch that your callback doesn't cause any existing on-screen content to move. You can usually address that by ensuring your placeholder 'loading' content has the same dimensions as the content which will replace it.
Implementation
So how do we implement the idea of stale-while-revalidate? There are just a couple things to do:
Add headers to the ajax response, so the browser knows it can cache it.
ex: Cache-Control: private, max-age=3600
Ensure that our callback can safely be called multiple times.
Perform the ajax call twice.
Ignoring step #2 for a moment, our new code looks like this:
``` <div id='sidebar'> Loading... </div> <script> $(document).ready(function(){ function sidebar_callback(data){ $("#sidebar").html(data) ... // other initialization } $.ajax({ url: 'https://...', success: sidebar_callback, }) $.ajax({ url: 'https://...', success: sidebar_callback, headers: {'Cache-Control': 'max-age=0'}, }) }) </script> ```
That's it! Now, when the user loads the page, their browser will make two http requests. The first will (ideally) obtain a response from the local cache, and the second request will retrieve (and cache) a fresh copy from the server. The user sees the primary portion of the page load, followed almost immediately by the appearance of the sidebar, and finally the sidebar updates in-place to reflect any new changes/values.
Unfortunately, there's step #2 to consider. Now that your callback function is running twice; you have a new state to consider: The user may interact with the site between callbacks. In the case of my folder structure; the user may have right-clicked on a folder to perform an action. My callback logic now needs to take that into careful account.
But it's worth the effort. Because once you've got a callback that you can call multiple times, we're into a new paradigm baby.
Taking it further
Once your javascript callback can safely be called multiple times; you suddenly have some new options.
You could periodically poll your ajax endpoint, and update your dom if anything has changed.
You could trigger a refresh of your ajax endpoint based on a user interaction, or an external signal from the server.
In my case, we implemented these improvements in stages - each one building off the last:
We built an MVP with strictly server-side-rendering (no fancy js frameworks).
When something got slow, we defered its generation to an ajax call (simple jquery).
Then we added this stale-while-revalidate idea.
We carried this idea over to a 'notifications' pane.
We added periodic polling for new notifications (poor man's realtime notifications).
We added some simple logic, so a new notification triggered a re-fetch of the sidebar (poor man's realtime sidebar).
We refactored the notification endpoint (server side) to use http long-polling, to make our notifications actually realtime.
Instead of asking the server for notifications every 10 seconds; the browser asks once, and the server intentionally hangs until a new notification exists. (Plus a bit of timeout/re-connection logic.)
Taking this incremental approach let us adapt and iterate quickly through the early stages of the product. For all of its functionality - very little logic was happening client-side - so we could get away with only hiring jr backend developers as we grew. Now that the SAAS has a strong user-base, a wealth of real-world usage data, a deep understanding of the user's painpoints, and can easily acquire funding: we're ready to hire a senior front-end developer to help us re-write the front-end as a single-page-app. The UI is ready for a major refactor anyway, so we can get two birds stoned at once.
Reflecting
Unless you're Google, you probably don't need to worry about performance until it rears its head. Don't polish a turd, and avoid goldplating. Instead, choose simple, boring technology to solve the problem you currently face. Keep your code DRY, and remember that every minute spent thinking about design, saves an hour of misdirected effort.
A warm embrace to you, fellow wanderer.
0 notes
amader Ā· 5 years ago
Text
Listen to your terminal
Notify yourself when your terminal command finishes, both visually and audibly by adding spd-say "all done" and alert to the end of your command:
command; spd-say "all done"; alert;
That's it! Now you get a visual que (on ubuntu), and an audio que when your command finishes.
0 notes
amader Ā· 6 years ago
Text
Don’t jump into strange swimming pools. [DREAM]
I had a dream this morning that I worked up the nerve to jump off a third story balcony into a swimming pool.
But it turned out that it was actually part of a Tyrannosaurus exhibit, and now I had a live T-Rex after me.
As I’m escaping, the T-Rex gets out, and causes a containment breach in the research department. Now there's zombies. So I'm running around avoiding dinosaurs and zombies.
As all hope is lost for the world, I find refuge in a rich lady's ultra fancy underground bunker. Her personal swat team is well armed, and keeping back the zombies as we BLAST OFF TO MARS.
Apparently Mars has a been terraformed by rich people, and it's basically paradise. We find solace that humanity will have a chance to survive on this new planet, and we're all filled with a sense of bitter-sweet hope for the future.
But then... we realise one of the friendly swat team guys was bitten just as we were leaving Earth, and before we can put him down, he bites me.
So as our ship lands on Mars, and before the infection has taken control of me; I jump to my death in an attempt to stop the spread of the zombie infection.
But that's not how you kill zombies.
And so, now that I'm out of reach of the only people that know what's happening, and now fully taken by the zombie infection, I stand up and start biting people.
To summarise; I alone was responsible for destroying all of interplanetary humanity.
0 notes
amader Ā· 7 years ago
Text
A fully automated podcast. Introducing reddit-to-speech.
My coworker Travis and I recently used some of our free time to script out a fully automated podcast. Here’s how it works:
1. A data source: First up, using a python library called praw,Ā we pull the day’s ā€˜top’ submissions to reddit within the ā€˜worldnews’ subreddit. Reddit is an online community that rewards users for posting meaningful or entertaining comments, so it’s a fairly safe bet that the most active conversations on this thread will have some good content for our listeners.Ā 
2. Condense: On its own; a reddit ā€˜submission’ is usually a news article (1-3k words) followed by about 500 user comments, so we need to strip it down to the good bits. In terms of comments, this is pretty easy; each comment has a peer-provided rating - so we just select the comments that most readers are resonating with. For the news article itself, and for long-winded comments; we pass the text through an api called smmry, which is a service purpose-built to summarise long articles. This api has a free tier, which we’re staying under.Ā 
3. Read it out loud: Now we pass the shortened text into google’s ā€˜cloud text-to-speech’ service, which returns an mp3 of computer-synthesised speech. The quality of this service is amazing. Often the computer-generated speech is indistinguishable from a real human (though when it comes to jokes, it’s very obvious). As long as we keep our podcasts short, we qualify for the free tier for this service.Ā 
WeĀ ā€˜read’ users’ comments in different synthesised voices, which helps the podcast from becoming too monotonous, and gives it a nice conversational feel.Ā 
4. Host it: We upload the finished audio files for each news story to a youtube channelĀ (using their api), and string them together into a podcast which we upload to a soundcloud channelĀ (again, via api). Soundcloud’s free tier is limited to 3 hours, so we have to delete older posts in order to upload new ones; but that’s not a big issue for time-sensitive content like ours anyway.Ā 
5. Automate it: We wrap up our finished code into a docker image, and upload it to amazon’s ECR (elastic container registry), and schedule it to be run nightly on ECS (elastic container service). This service lets us rent servers by-the-second, and our script only takes about 10 minutes to run, so we easily fall within AWS’sĀ free usage tier.Ā 
6.Ā ā€˜Publish’ it: To help with accessibility, we’ve submitted our podcast to appleĀ podcasts (here), and google podcasts (here). If you’re a regular podcast listener; you should be able to find us on your favour platform and subscribe. We’d love your feedback!
Overall, this quick project was a fantastic opportunity for us to play around with some interesting APIs, and to create something interesting - which will automatically create something interesting every day for the foreseeable future, completely free!
0 notes
amader Ā· 8 years ago
Text
Personal productivity hacks
Lately I've been finding myself wasting a lot of time 'checking' my email. I've developed this nasty habit of opening my email (to see if there's anything important), and then getting distracted by the littlest instagram notification or group/forum message. If I'm completely honest, sometimes hours of my day are lost this way. Feeling inspired by some posts by Joe Reddington; I will be trying to make some improvements here, for productivity sake: 1. I'll be unsubscribing from all non-essential feeds. (Newsletters, Advocacy groups, Forums, Social media notifications) 2. I'll be trying to process my inbox only once a day, after lunch. I wanted to give you a heads-up because of that last one. I'm not asking you to change the way that you email me, I just want you to be aware of the change in case you find me to be a little slower in my response time. If you need to get a hold of me quickly; the best way to reach me is by phone: 1 289-812-3835 (You can find this number at litiks.com/contact/). I'm generally available 8x5, and I will always consider a missed call to be my top priority. Three cheers for productivity! Hip hip, [that's enough, get back to work]
0 notes
amader Ā· 9 years ago
Text
A cheap phone plan. Seriously.
Here’s the thing I want you to understand: A monthly data allowance hurts you more than you think.Ā 
I use my cell phone all the time, but my habits are fairly predictable. I check my email. I check my social networks. I stream music. Like most Canadians; my cell phone usage falls in the neighbourhood of 500MB - 3.5GB (I’m a little on the lower side).
Quick stats: North Americans use an average of 2.9GB/month. 30% of data users consume less than 500MB/month.
Chances are very good that you pay for a monthly data allowance. For example: you pay for 3GB/month, and you use an average of 1.6GB/month. You’re probably very careful to always pay for for an allowance that’s larger than what you use, because the overage charges are obtuse. Pricing for an allowance varies wildly, and sometimes it’s difficult to get a clear picture of what you’re paying for, because providers will combine voice calls, texts, data, and financing (paying back the loan for your $800 smartphone) into a single plan price. But generally, you can just look at the difference in cost between phone plans to get a sense of the cost for data. If the 4GB plan costs $85, and the 7GB plan costs $100, then you’re paying an extra $15/month for an additional 3GB. So that’s about $5/GB, right? You’re with me so far? The big magical secret is that there are providers out there that offer prepaid plans that include dataĀ ā€˜buckets’. A bucket behaves a little differently from an allowance, and those differences have a very, VERY significant cost impact.Ā 
Here’s how a bucket works:Ā  - You pay for a chunk of data. - You consume that data. - When it’s all used up; you pay for more. If a bucket of 20GB costs $125, it’s easy to do the math. That’s $6.25/GB.Ā 
... Wait. So why am I saying that buckets are better, when $6.25 is more than $5? The answer lies in the math, and the simple fact that the amount of data we consume in any given month FLUCTUATES.Ā 
Let’s assume that in any given month, we use somewhere between 5 and 6GB. With our provider; our only option is to purchase a 7GB/month allowance. If we plug in our original calculation of $5/GB/month, then we’re using somewhere between $25 and $30 worth of data, but we’re paying $35. If we always use 5 to 6GB, and we always pay for 7, then the reality is that we’re not really paying $5 per GB. The REALITY is that we’re effectively paying $6 - $7 for each GB that we actually used.Ā 
So with allowance-based pricing; the effective cost of your bandwidth depends on how much data you actually consume. And when you can never over-spend on your allowance - your effective cost will always be higher than the initial ā€˜apparent’ cost. In some cases, quite significantly.
Two illustrate my point, here are two charts:
Tumblr media
This chart shows a number of options from Rogers and Tbaytel. The Rogers’ plans are all allowance based. Each ā€˜step’ in the line indicates a new allowance with a new price point (for example: if I use between 2 and 4GB per month, I can go with the 4GB plan that costs $85/month). I’ve included a contract (ā€No Tabā€), a data-only plan (ā€Flex Lightā€), and a prepaid option. For comparison; I’ve included a ā€˜bucket’ based prepaid plan offered by Tbaytel. (You can’t sign up with Tbaytel unless you live in Thunder Bay. But once you’re signed up, their data coverage includes all of Canada.) Finally, thatĀ ā€œRogers $5/GBā€ is not a real Rogers plan. I’ve included it here as an adjustment of the contract-basedĀ ā€œNo Tabā€ plan that Rogers offers. You can think of this as theĀ ā€˜no tab’ plan if we ignore the cost voice and texts that it includes. I’ll say it again: You can’t actually GET this sort of pricing from Rogers.Ā 
Here’s how to read the chart: First: Consider your own monthly data usage. The lines indicate what you will pay per month (total), based on this data usage.Ā 
Tumblr media
This second chart shows the amount you’re paying per GB used. To read this chart: First determine your own monthly data usage. The lines indicate how much you are effectively paying for that data.
Observations: My goodness! If you’re using less than 1GB/month, you are paying a snot-tonne for your data. But just look at that blue line for Tbaytel! That blue line is almost always on the bottom.
So let’s talk about that flip flop that’s happening between the blueĀ ā€˜bucket’ plan, and the purpleĀ ā€˜allowance’ plan. At a glance, you might thinkĀ these two options are basically the same price. Sometimes you’ll pay a little more with the allowance, and sometimes you’ll pay a little less, but they’re effectively similar prices. But let’s look a little closer. Pay specific attention the range that almost all of us fall into: from 1 to 4GB. The only time that the purple line wins is just below 2GB, and just below 4GB. But remember - there’s psychology at play here. If my personal data usage averages out at 3.8GB/month, will I be comfortable with the headroom of a 4GB allowance? Would it be worth the risk, given that just one month of over-use (and overage charges) would effectively destroy any cost savings that this plan had over the blue line? I’d better not chance it. I’d better buy the larger allowance. BOOM, cost savings = destroyed. Yes, there is a sweet spot in there if my average monthly usage is consistently in the mid 3.5GB/month range. But the staircase always poses a catch-22; the closer I get to my monthly allowance - the more of a deal I’m getting, and the more of a risk I’m taking. The blue line, on the other hand has no risk, andĀ it’s almost always the cheapest option. That, my friends, is a no-brainer.Ā 
ā€œGreat!ā€ you say,Ā ā€œI’d sign up today, except you said that Tbaytel is only available to people that live in Thunder Bay. What about THAT Aaron?ā€
Well... It’s a real shame that Facebook dropped support for searches like ā€œFriends of friends who live in Thunder Bayā€, or you’d be done by now.
Step 1. Just like a car, don’t buy new. getorchard.com Step 2. Get a prepaid plan that offers a bucket-based data add-on Step 3. Spend all the money that you’re saving on candy and get diabetes
0 notes
amader Ā· 9 years ago
Text
Don’t listen to that garbage.
edit: This post is half about fact-checking, and half about taking control of my world-view. I’m not clear on distinguishing between the two.
I have this feeling sometimes when I'm watching two people argue, especially when they're talking about politics or something. I can hear each of them just echoing whatever media they've been consuming.
One is echoing the article they read on facebook. The other is echoing the news report they saw on tv. Neither is talking about the CREDIBILITY of their sources.. They both speak with certainty.Ā 
Naturally, I’m sure that I am completely immune to this phenomenon. I might be the only human on the planet that is, but I can’t feel my own bias, so it must not be there, right? But then I realise that I very rarely doubt a fact presented from a source that I trust. I’ll be sceptical of the source of a news article that I disagree with though; so surely the problem is that everyone else is too quick to trust.
I don’t have a magical solution that will make all of our news sources credible (although Google is working on that). Nor do I have a solution which will make us all perfect fact-checkers, or knowledge seekers. But...
We have SO much power over the information we consume. I just want you to be aware of that.
Most of us just consume all evening. We browse facebook. We watch the news. Some of us listen to the radio, and we just take it in. We can’t get enough of it. Our brains love the stuff! We do very, VERY little of our own fact checking. Because it's slow. it takes careful thought and consideration, and it goes against our nature. Once our brain learns something new, it wants to hold on to it. Forgetting a false fact, once believed, is difficult.
I think there's a real danger to this sort of armchair consuming of information. It feels like we're a nation that just believes everything we hear. It's a 'new study', so it must be fact. Why bother checking whether it was properly conducted, or whether the results were analysed in an unbiased way, or whether the findings were fairly represented by the summary you're reading/hearing/watching? That’s exhausting!
We must stay cautious. You must stay cautious. There is never just one side to a story. There is no such thing as an unbiased perspective. The human brain is hard-wired to make shortcuts, to form intuitions. When a journalist tells you a story, you hear it through their lens. You have to stay aware of the fact that you are not just hearing facts, you are hearing information from a source, and you HAVE to make a conscious decision about the credibility of that source. If you don't make a conscious decision, then you are making a unconscious decision. Usually to trust their word as fact. Why are they telling you this? Do they have a motive to bias the story? Did they fact check it? Are they giving you a fair representation?
Awesome, so now you’re listening with a critical ear to each story that you hear. You know how to fact-check, and you know which sources to trust. Now, you can sit back and consume away, right? There are a couple important things that I think people forget: 1. What you consume affects you. 2. You have control over what you consume. (what articles your click on, or even see on facebook, whether to change the channel, or turn off the radio) 3. You have to decide to use this control.
The past couple days I’ve been listening to cbc talk radio. Over the course of 4-6 days, I’ve heard portions of a number of stories; a culture of sexual peer-pressure in colleges, far right-wing extremists that are basically terrorists, people running for the hills to go off-grid expecting total social collapse. And I found myself having this increasing sense that the world is going to shit.Ā 
But it’s not. I know the facts. I know that our crime rate is down, and police corruption is down, and our medical system has never been better at saving lives, and globally - by the numbers - we’re living in an era of unprecedented peace. Yes, there are major issues that we’re still fixing, but there are people working on those issues, and that’s what I want to focus on. Fighting to level inequalities based on race, gender, religion, location, age, income and orientation. Fighting for better fact-checking in new-stories and web sites. Pushing for improved transparency in governance. Studying human behaviour to better understand and fight unconscious bias. Pushing the culture towards acceptance and equal human rights. Making the internet more secure every day.
I can make a conscious choice to focus on the forward progress of humanity. I can choose which media I consume, and that doesn’t make me ignorant - it makes me intentional. Freak accidents are rare. I choose to hear about them rarely. Horrible people deserve justice, but they don’t deserve my attention. I decide what deserves my attention.Ā 
You have that power too.
0 notes
amader Ā· 9 years ago
Text
Road-tripĀ with my parents
So I’m on this road-trip with my parents. Dad’s driving and I’m third-wheeling it in the back of the van. We’re on the freeway, in the fast lane, but traffic is at a standstill.Ā 
My parents, in their quirky fashion decide to take this unplanned opportunity to grab a snack from the cooler in the back of the van. They get out, open the back, and move around some stuff to reach the cooler. Then - naturally - Mom decides that she ought to re-organise a few items so that the cold packs are properly placed.Ā 
Traffic begins to move again, and my parents eventually decide to acknowledge the honking and get the van moving. Mom leaves Dad to put the trunk back together as she hops in the passenger seat. Then noticing the open lane in front of us; she starts the van and proceeds to start driving. From the passenger seat. She’s straining to reach the pedals with her left foot, while staying in the passenger seat.Ā 
Dad meanwhile, has hastily thrown the remaining stuff into the back of the van, and closed the hatch. But since the van is now rolling, he just barely manages to grab on to part of the roof-rack and plant his feet on the back bumper. This, I concede, is all perfectly well and good for spry parents in their 50′s or early-60′s. But my Dad’s had a heart-attack. I’m supposed to keep an eye on him and keep him from exerting himself! And now here he isĀ hanging off the back of the van doing 120 on the highway! With Mom driving with her left foot!Ā 
Have you ever tried to drive with your left foot? There’s this thing that happens to experienced drivers called muscle-memory. Your left foot doesn’t have it. Your left foot drives like a 13 year old. It’s all or nothing, and it flip-flops between the two without discretion. That’s how Mom is driving. In the fast lane. With Dad barely managing to hold on to the back rack as the van jerks sporadically around.Ā 
They both seem completely oblivious to my panicked screams of wisdom. So, I figure I might as well get out my camera to film the charade.Ā 
I turn my camera first to Mom, and she turns around and smiles and waves at the camera. We swerve across like 3 lanes. Dad looses his footing and swings far out by only his arms. I turn the camera to him, and he too, smiles at the camera. He’s having a blast.. probably thinks he’s 50 again or something. Seriously, am I the only voice of reason in this vehicle? Or... on this vehicle?
Dad notices that we’re gearing up to pass a cruising police vehicle at record speed. So, in a daring manoeuvre, he opens the back hatch and swings out over the side of the vehicle as it opens out and up. Then, it true ape-fashion, he grabs one of the hydraulic cylinders (the ones that push open the hatch, and are definitely NOT meant to take the weight of a man in his 70′s), and swings his way into the crowded storage compartment. He closes the hatch behind him and looks to the camera for one more triumphant smile.Ā 
I cannot believe that we’re all not dead.
Everything returns to normal for a brief moment. Traffic slows to a brief stop again, and Dad hops out of the back. I ASSUME that he’s going around to the driver’s seat. Nope. He’s not. He’s walking to one of the vehicles behind us, to talk to someone. Traffic picks up again, and we begin to drive away without him.Ā 
I’m a bit baffled by all of this.. but at this point I’m not putting up much of a fight. Mom reassures me by sayingĀ ā€œHe’s fiiiine. It’s not the first time he’s been on his own.ā€Ā 
Yea, but in the middle of a busy highway??
I watch through the back window and my Dad, and some other fellow are trying to cross the several lanes of traffic from the fast lane where they currently stand to the highway’s shoulder. They are not moving together. One darts ahead while the other hesitates, leaving very view options for approaching vehicles. Cars and transport trucks are swerving wildly to avoiding hitting them, as they continue to jump and hesitate their way to safety.Ā I can’t see well enough if they’ve made it across when they slip out of view.Ā 
We drive on for a brief period of time before exiting the highway, and we eventually make our way to a scenic point on some bay looking out towards a lake-facing city on the other side. It’s pretty and all, and there are a few tourists snapping selfies, but I’m too busy wondering if my Dad’s now roadkill to appreciate it. My Mom reassures me again, but I’m not much for it.
Then, a bunch of the tourists cry out in bewilderment. In a whirl of confusion and astonishment, a car-sized flying saucer slows to a stop about 30 feet off the ground, and then descends gently to land on a nearby patch of grass.Ā 
I’m hardly surprised at this point, when the hatch opens with a hiss and a whoosh, and my Dad cheerily hops out. Beaming from ear to ear.Ā 
ā€œCome on! I met this guy and he loaned me his spaceship. Let’s go for a ride!ā€
So we climb in, and the hatch closes behind us. We’re standing in an empty cylinder. There are no chairs, and it has a bit of the feeling of an elevator. My dad pushes a button, and up we go. Straight up, as smooth and steady as if we were an elevator in a building, but we’re not. We all peer out the windows in giddy excitement to watch the land drop away under us, followed by the clouds. The sky turns a darker shade of blue, and then black as we exit the atmosphere, and the flat horizon begins to curve.Ā 
Yes; I realise as I collect my thoughts. My dad IS still capable of doing some incredible things. Heart attack or no heart attack. He’s still got life in him, and by gum; he’s going to live it.
0 notes
amader Ā· 9 years ago
Text
Simple bitbucket webhook written in python.
I didn't like the complexity of most of the webhook parsers that I found for bitbucket+python. So I wrote my own. Here it is in all its glory:
/root/bitbucket_webhook_server.py:
import BaseHTTPServer import os from subprocess import call, check_output def pull(): os.chdir("/var/sites/top_secret_project/") output = check_output(["git pull",], shell=True) if output.strip() != "Already up-to-date.": call(". _env/bin/activate; python code/manage.py migrate", shell=True) call(". _env/bin/activate; python code/manage.py collectstatic --no-input", shell=True) call("service apache2 restart", shell=True) class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_HEAD(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() def do_GET(self): self.do_HEAD() self.wfile.write("cool beans") def do_POST(self): if self.path == "/my_secret_code_123/": pull() self.do_GET() if __name__ == '__main__': httpd = BaseHTTPServer.HTTPServer(('', 8000), MyHandler) print "starting webhook server" httpd.serve_forever()
Usage:
You'll just need to add a line to your crontab: @reboot python /root/bitbucket_webhook_server.py > /dev/null 2>&1
Then, in bitbucket, point your webhook to your server, at the port and 'secret' specified: http://your-server:8000/my_secret_code_123/
Notes:
Naturally, you'll want to take caution any time you open up a port on your server. You probably want to ratelimit incoming calls to this port, and you might want to allow only bitbucket's ips. The attack vector here is pretty small. We're not touching any incoming data, we're not performing our costly git pull operations unless the secret matches, and we don't restart apache unless there are changes detected.
0 notes
amader Ā· 9 years ago
Text
Another space-time (a dream-made-story)
We have successfully travelled through some sort of wormhole to another space-time. Human civilisation has finally advanced far enough in our knowledge of physics to create the device, and I'm among the *second* crew to go.
The first crew was sent some time ago, and we had had communication with them for some period of time. They had assembled some buildings that were sent along with them, and they had started conducting research of the strange new land they found themselves in. Then, we had lost all contact with them.
Now I, along with with 3 companions, have ventured after them to see what has happened. Perhaps to stage a rescue, or to simply help re-establish communications with new equipment. But once we arrive it's clear that things have gone very badly for our predecessors. We find that several of the buildings that were built have been demolished by something very large, and the buildings that remain have been rummaged, with their contents scattered. We restore power to one of the larger buildings, and activate its life support systems. The air outside us unsafe for humans, so when we're outside, we need breathing devices.
We find the dead bodies of two of the original explorers. We begin to watch their video journals to gain some insight, but we hardly need to. Certainly, as soon as we had started up the generators we must've attracted the attention of the native creatures.
There are strange birds.. a bit like a flightless flamingo. They stand 7 feet tall, with strong, thin legs, and sharp beaks. They look hungry, and I suspect we’re on the menu. There are small rhino-like creatures. Or perhaps they're more like armoured boars, with thick skin and heavy horns on their noses. They are very heavy looking, and they seem dis-tempered. And then there are the humanoids. They are slightly shorter than humans, but their skin is distinctly orange. They are incredibly strong, and they have rudimentary weapons. They carry large spears, and roughly-made bows and arrows.
They are not happy that we are here.
While the birds and rhinos seem to glare at us from a distance, the alien creatures begin to attack the building. They bang at the doors and slash at any exposed piping or machinery left outside. Rather than countering their attacks with an offensive, we batten-down by reinforcing our facility. We bypass external systems as they begin to fail. We plug the leaks that their spears create, and we reinforce the walls with cement and silicon. The attack continues for several days and nights.
After what feels like ages, their attack finally relents. Our aggressors seem content once we've tightly sealed ourselves away from them.
We are not able to communicate with Earth. We cannot call for help.
But we are not hopeless. We have enough provisions to last many lifetimes, and there is another deposit of communications equipment and stocks not far from us, if we're able to find our way to it safely. We make plans to reach the deposit, and start to build for ourselves special tools for the journey
We decide to create a robotic exoskeleton to help us jump high over the trees and large rocks, and provide us with some protection against spears and arrows. It will be a clunky device, but we're hopeful it will help one of us reach the deposit, and perhaps call for help.
But building the suit is difficult work, and it takes us several years to build the first working version of the machine. Our fear drives us to doubt our designs, and we continually restart, and re-build our creation. In time, two of our party bear children, and we begin to raise them. In more time, we train these children as physicists and engineers. They are brilliant minds, but they have no grasp of earth. This alien planet is their home. As the years pass, we seem to gain some trust from the natives, and they allow us to leave our shelter to explore the terrain, though only for a small distance. We are essentially living on a small farm in the middle of an strange, and alien universe.
As the children grow into adulthood and additional children are born and raised, the original 4 of us are outnumbered. We continue our work on the exoskeleton, be we begin to build other devices to help us survive in the harsh environment. The children begin to doubt our purposes in reaching the distant equipment cache. Why should their parents risk their lives, to anger our hostile hosts, by travelling beyond our limits? Surely, if one of us attempts the break for the cache, and escapes the natives, then the natives will turn against the home shelter and kill all that remain! What makes Earth so great anyway? Why would the 4 have left earth if it was really so wonderful? Was it really worth dying for, to strive to reach this 'Earth' place that was so foreign to them? Popular opinion sets against the mission. They want to stay here.
Now, it seems, I am the only one determined to return to earth. After so few years, and so little opportunity.. it seems like Earth's inter-dimensional travelling might be over. There has been no word from Earth. No more travellers have been sent to our aid. Earth has abandoned us, and my children have rejected my hope. There is still so much we don't understand about how these wormholes work, or about how to control them! This technology holds so much possibility, but I feel as though I'm the only one that cares to discover it. If Earth has given up on this knowledge, I might be the only consciousness left in the entire universe that sees its potential. It's unfathomable opportunity. It destroys me that any hope of unleashing this technology’s potential is going to die with me.
I won't have it. I cannot allow it. I can't let such potential die at the hand of my self-preserving, vision-less peers. I must attempt the journey.
I quickly put on the exoskeleton. It is well-fitting, and sharply tuned. It has been well-refined over many years. I exit quietly through the airlock and make my break for the cache. The area quickly erupts into chaos, as a chorus of birds, rhinos, and other such creatures are stirred frantic. The neighbouring natives are stunned at the sight of me and my device leaping over the treetops, but they quickly give chase. I am lucky though; I am able to travel very quickly.
As we all had dreaded, my home quickly becomes the target of the natives fury. They attack it with their spears and arrows, but our fortifications are strong. I feel hopeful that they will survive the attack long enough for this natives to run out their energy once again.
But my hope is quickly stolen from me. A loud horn blasts across the forest, and from my lofty vantage point I look to my left to see two enormous creatures charging towards my home. They are colossal. They’re like elephants, but the trees barely reach their shoulders! They have thick, armoured heads, and the forest gives way like tall grass in their path. My home will not withstand an attack from these creatures. Not for more than a few moments. Still, now I am closer to my destination than my starting place, and I'm unlikely to be of any help to my family in any case. So I continue towards my goal.Ā 
I reach the equipment deposit quickly enough, and I begin to fumble around with different devices to assemble a communicator. The deposit is a large cube of communications equipment, building materials, food and vehicles. Standing on top of it, I'm twice as high as the treetops, and I can see great distance. My my attention is on the giant creatures, and I see them reach my home. They are charging against it with their heavy heads.
I'm a panicked, rushing mess of desperation. My fight or flight is in overdrive, and I cannot think straight to perform my work. Those that I love will surely die in moments, and then what? I alone will be left!
There's another horn blast, and my stomach drops. This time, it's not far from me. I look in its direction and I see a large clearing, with an alien-made tower standing near its center. There is a deep sound of energy surging, and suddenly two more of the giant beasts appear in the clearing. They appear in an instant, out of thin air.
In seconds, my mind pieces it all together. The natives of this planet have some power over the same physical forces that we humans have only begun to grasp. They are summoning these creatures from another spacetime! More than that, their technology must be much more advanced than ours in order to pull matter to THIS space and time, rather than simply flinging it into the cosmos like we had achieved on Earth.
There then; laid my salvation. Using the native's equipment I would be able to summon my own reinforcements. I could transport all of the military force of Earth, if I chose. All I need to do is reach that tower, and then figure out how to use their equipment.
And so I set out, without the slightest awareness that my actions would ultimately trigger the end of the longest age of peace in the universe, and would nearly be the undoing of the entire human history.
0 notes
amader Ā· 9 years ago
Text
Getting online with a raspberry pi and a sierra wireless aircard
This took me a long time to sort out. So I’m documenting it here, in the hopes that maybe it’ll help someone.Ā 
First, you want sakis3g, even though it’sĀ ā€˜depreciated’.Ā  Then, your magic command:
sudo ./sakis3g connect --console --interactive APN=CUSTOM_APN CUSTOM_APN='lteinternet.apn' APN_USER='0' APN_PASS='0' USBINTERFACE=3 USBDRIVER=sierra USBMODEM=1199:68a3 OTHER=USBMODEM MODEM=OTHER # It may also be necessary to manually set your DNS echo nameserver 8.8.8.8 >> /etc/resolv.conf
For fun's sake, you can save that command as a script, say: connect.sh, and then reference that file in rc.local in order to connect on boot. A HUGE thankyou to p4trykx, on the raspberry pi forums.
I'm one step closer to my poke-wifi!
0 notes
amader Ā· 9 years ago
Text
I had a dream that I could fly, and I was using my powers to run an illegal fishing rig.Ā 
I was using live robots as bait, which ethically-speaking was only slightly less awful than using live humans as bait. The robots would let themselves into the water using a rope, and then flail their arms and legs around to entice the (presumably very large) fish.Ā 
My boat and I were being chased by the coast guard, at very high speeds. We were racing across both land and sea, which was resulting in a tremendous amount of devastation, social panic, and flying robot appendages.
0 notes
amader Ā· 9 years ago
Text
ā€œThe Archiveā€ (a business idea)
There’s a few moving parts to this idea, but basically everything falls within the realm ofĀ ā€œI want to keep thisā€. In short: I want to help normal people create and maintain a meaningful digital archive.
The problem: Information disappears when it’s not properly preserved. 1. I share an office with a computer repair guy. People bring in their dead computers, and he struggles to recover the information that they failed to backup. 2. Old (non-digital) family photos/videos are quickly degrading, and the technology to view them is becoming obsolete. 3. Human memory is fleeting. We experience the forgetfulness of old age, alzheimer’s, and the loss of detail as memories are passed from one generation to the next.
The solution(s): 1. I’d get you set up with a backup solution. Bring in your computer/laptop/phone, and we’ll install a backup solution, and complete your first backup in the office (with fibre internet). 2. I’d digitise your old videos, photo albums, and letters, and organise your entire collection (along with your digital photos and videos) into a well-structured, timeline-aware digital archive.Ā  3. I’d offer a ā€˜digital augmentation’ service, where you can attach voice/video commentary to your old photos and videos. Old photos of your Grandpa’s trip to Europe are so much more meaningful with Grandpa telling you all about his adventures there. 4. As part of this digital augmentation service, I’d provide an online service to let you access and add to your digital collection. - Add photos, videos, and scans of journals/diaries. - Augment them with commentaries and transcriptions.Ā  - Enrich the archive withĀ ā€˜perspectives’ - answering life-questions likeĀ ā€œWhat makes you really, truly happy?ā€ orĀ ā€œTell me about your first kiss.ā€ - Share access with friends and family.Ā  - Quickly search, and easily navigate the breadth of your archive. (Voice transcriptions, facial recognition, and OCR help to make the entire archive searchable. These features can be improved over time) 5. This new digital archive could be enhanced by a host of additional services. - Curate and export videos, - Order prints, or printed photo albums - photo/video restoration. (either automatically, or by a professional editor)
The focus: - Clear and simple solutions. Grandma-friendly. - Real, friendly, human contact points (in person, on the phone, online services) Challenges: To add commentary to an entire lifetime's worth of old photo albums, super 8's, and vhs tapes...?! It's an expansive, and incredibly daunting task. I figure there are a couple of major challenges: 1. Getting everything digital. A big task, yes.. but this'd get easier as you scale as a business. As someone sitting at home, you're going to buy cheaper equipment, and perhaps follow a slower process. As a business, I could afford faster equipment, and develop more streamlined techniques. 2. Adding commentary. I'm guessing this will be potentially involve WEEKS of work on the part of the content owner, over the course of months or years. This is a massively ambitious challenge; to keep the client motivated and on-task to continue to augment the archive with stories and reflections. To do this: I'm picturing an 'at-home' kit: a laptop and a quality microphone. The laptop is delivered with a simplified interface, designed with the sole purpose of exploring, and adding commentary to the media. 3. Setting a palatable price. Doing all of this is one thing, making it affordable enough for the masses is another big challenge.
0 notes