come on down to clug park and meet some geeks online

31 May 2019

Adrian Frith (htonl)

New interactive map of SA election results

Five years ago, after the 2014 general election, I built an interactive map of the election results. Since then the state of the technology for web mapping has moved on, so I’ve developed a completely new version. This new map uses vector tiles for better rendering, includes results for four general elections (2004–2019), and allows you to drill all the way down to voting district level. And here it is.

A screenshot of a site titled 'South African Election Results' and showing the results of the 2019 election by ward.

31 May 2019 12:00 AM

26 May 2019

Johann Botha (joe)

Quick Update

Turmeric, purposeless walks, detox week…

  • Week of 20-26 May.
  • Health week 1/8.
  • It was time for a bit of a health mission. I was almost 97Kg at the start of May, not good. Too much beer after my year of going gluten-free maybe. Time to stop the self destruction. Eight week plan: detox, keto, fast, keto, fat loss etc. This week was clean eating: no- alcohol, coffee, gluten, sugar, processed foods.
  • Monday, mega green smoothie, rainy day, office, BIA machine visit, podcast nap.
  • Tuesday, office, network ops lunch and a turmeric shot, tea at Strolla.
  • Group Chats Are Making the Internet Fun Again.
  • I took a break from FB and Instagram most of this week. Even took a break from some Telegram groups. I still post Instagram photos with a macOS app though.
  • 1650 FB friends, seems I’m not making that many new friends – the social boom feels over.
  • Wednesday, work, green smoothie, Arista workshop at The Hilton hotel – I won the lucky draw, turned out to be a google home device – so I gave it back, at least the event tshirt is cool, walked to De Waterkant, sushi at Beluga.
  • “Smart, calm and healthy.” — on dating. Better than “Smart, interesting, not-cooked.”

  • “If you survey enough people, all their advice will cancel to zero. Reject most advice. Have your own point of view.” — Naval

  • “If you want to be a philosopher king, first you have to become a king.”

  • “Go slow to go fast.”

  • Be politely persistent.
  • Leverage automation, access, money, labour, in that order.
  • Thursday, work, gym, sauna, work, nap, purposeless walk to the Waterfront, watched John Wick 3 – not bad for what it is I guess.
  • I recently asked Mia why she keeps staying she did not like Interstellar – I always figured she thought it was boring, turns out she did not like it because it was so sad.
  • Friday, office, BIA machine, dev catch up, breakfast for lunch, ginger and turmeric shot, dev meeting, promenade walk, bearnaise game steaks skewer at Hussar, yum, played with Mu Editor and PyGame Zero, watched Pulp Fiction again.
  • “Dance like it hurts. Love like you need money. Work when people are watching. — Dogbert’s Motto” — Scott Adams

  • Have 3 hobbies: one that makes you money, one that keeps you fit, one that keeps you creative.
  • Saturday, felt really chipper, made some strategy notes, random tinkering and reading, gym, swim, sauna, rotisserie chicken and avo, nap, extended purposeless walk (flaneuring) to the far end of the Waterfront harbour wall and back, stopped for a turmeric shot half way, perfect weather, 20k steps, time well spent, I watched Interstellar again – epic movie.
  • Podcast queue zero, all 36 shows I follow, so I started listening to Pocket articles audio, works pretty well. Managed to trim Pocket from 45 to 3.
  • End of the nation state, enter city states.
  • Why You Procrastinate.
  • Oldie, but a goodie: The Slow Death of Purposeless Walking
  • Sunday, cloudy morning, took a purposeless walk to find breakfast, stopped for a random turmeric shot, tinkering, gym, reading, helped Wouter with a photography project, backups, in bed early.
  • RIP Jurie. Another cancer case, leaving us way too soon. I still have a can of spray plaster in my first aid kit because of Jurie. Works really well – though Mia never liked the sting. Do your quarterly 5 day fasts.
  • This coming week is keto week.

Have a fun week, crazy kids.

by joe at 26 May 2019 08:35 PM

24 May 2019

Johann Botha (joe)

Quick Update

Bodzin and braai broodjies…

Sea Point
  • Week of 6-12 May.
  • Monday, office, dev catch up, datacentre admin, a few productive phone calls, gym, Van Hunks with Anton.
  • Product-founder-market fit.
  • Inspiration is perishable. Impatient with action. Patient with results.
  • “That’s how you’re gonna beat ’em, Butch. They keep underestimating you.”

  • Tuesday, up early, spreadsheet tinkering, creative writing, office, breakfast for lunch at Knead, Milton visit, sunset podcast promenade walk, saganaki salad.
  • You are the drug.
  • Wednesday, voting day, rainy and cold, creative writing, green smoothie, phone chat with Dirk, went to vote, went for a walk, nap, gym, promenade walk, phone chat with Jacques in London, dinner chats with Wouter and Justin.
  • Passed 50 days in my podcast app. 7th dan black belt in radio listening.
  • Thursday, office, voting results rolling in, tea at Strolla, Nick asked for some advice about Business Fibre in Cape Town.
  • I voted for ZACP and Cape Party. Moo. They ended up with 16k, 10k votes each.
  • Friday, video conference, lunch with Dirk, tea at Morgenster, fetched Mia from school, conveyor belt sushi at Cape Gate, watched Avengers End Game IMAX 3D – pretty good, Mia enjoyed it, Moro gelato, house and dog sitting in Bakoven, watched some random Friends episodes with Mia, time well spent.
  • I generally think DC is better: Batman, Aquaman, Superman etc. I enjoyed the Ironman movies, Ant Man was not bad, Guardians of the Galaxy 1 was excellent, but I’m not a fan of crystals, gods and blended storylines.
  • Saturday, we went to go find Mia some new slops in Camps Bay, breakfast at Melissa’s with beach views and a grapefruit mimosa, a series of conversations about the Naval podcast, braai with a Bodzin soundtrack, Mia made the braai brooodjies, nap, watched The Godfather part 1, Mia managed a 13h sleep, tws.
  • Sunday, braai broodjies for breakfast, general tinkering and chats with Jacques, backups, outing to Hout Bay with Mia and Romeo, pizza at Posticino’s, Hout Bay beach walk, watched Shrek, tws.

Have a fun week, crazy kids.

by joe at 24 May 2019 08:32 PM

19 May 2019

Johann Botha (joe)

Quick Update

Braai broodjies for breakfast, dinner reboots, and beers for peers…

Camps Bay
  • Week of 13-19 May.
  • Monday, school run – while Mia took a nap, I took Romeo on a play date to go visit Dirk’s dogs, quick stop for a Beta Beach swim, work, nap, sunset Camps Bay beach walk with Romeo.
  • I think Romeo likes jazz music.
  • Tuesday, fed the pets, office, dev catch up, Teraco beers for peers at Arcade in Bree st, lots of nerdy chats.
  • Wednesday, up early, random admin, took Romeo for a Beta beach walk, office, dev catch up, Bootleggers with Matthew, the first Scenius Dinner (working title) at Leeuwenhof Estate (Villa Zille) – good fun – reboot of the GeekDinner and 27 Dinner movements, lots of cool catch ups – thanks for hosting Thomas and Tom.
  • Thursday, work, took Romeo for a Clifton beach walk, braai with Paul, Tammy and Darryn – a few AfrikaBurn stories.
  • Friday, braai meat for breakfast, tea with Paul, office, after work beer at the office, braai with Al, Adrian and Anton.
  • Saturday, braai broodjies for breakfast, took Romeo for a Camps Bay beach walk, dinner at Anton’s.
  • Sunday, podcast walk, random tinkering and research, gym.
  • I think I need a health sprint soon.

Have a fun week, crazy kids.

by joe at 19 May 2019 07:28 PM

10 May 2019

Jonathan Carter (highvoltage)

#debian-meeting revival

Picture: Wasps participating in a BoF during DebConf15 in Heidelberg.

As part of my DPL campaign I suggested that we have more open community meetings, and also suggested that we have more generic open team meetings in a well-known public channel. Fortunately, that idea doesn’t really need a DPL to implement it, and on top of that our new DPL (Sam Hartman) supports the initiative. We do have a #debian-meeting IRC channel that’s been dormant for years, so we’re reviving that for these kind of meetings.

Today we had our first session, it was the first meeting on that channel since 2011 (almost 8 years!). The topic was “Meet the new DPL and ask him anything!”. It was announced on some of the Debian channels, most notably on Bits from Debian, I played it careful by not announcing too widely because we don’t yet have much in the way of moderation and I think if we had to deal with many trolls it would’ve been tough. This was also really early for people in the Americas (6am East Coast) so future sessions will be staggered across different times and days of the week. The session was a bit quieter than I expected, but Sam gave really nice answers and I learned a few new things so it all worked out ok, I would rather start small and build on it than it have been too chaotic and a mess. In 2017 I started a community channel called #debian-til (TIL standing for “Today I Learned”). The idea is that people share interesting Debian related things that they have learned, and it started with a hand full of people and took a year to grow to a hundred, but I’m very happy with how that worked out and how the culture of that channel has evolved, I’m hoping that #debian-meeting can also grow and evolve to be something useful and fun for our community, instead of only a channel to schedule meetings in.

You can view the full logs of the meeting stored by meetbot in html or plain text.

Upcoming meetings:

Date and TimeTitle
2019-06-03 12:00 UTCLearn all about Debian-Edu
2019-06-17 19:00 UTCBrainstorming for 100 paper cuts project kick-off

More details about both those meetings should be available soon. For the latest information, refer to the Debian Meeting wiki page. You can also subscribe to Bits from Debian (RSS/Atom) for the latest community news.

Anyone can schedule a meeting on the debian-meeting wiki page, so if you’re considering using it for a team meeting or any other kind of session idea, then please go ahead and do so!

by jonathan at 10 May 2019 02:40 PM

01 May 2019

Jonathan Carter (highvoltage)

Free Software Activities (2019-04)

April is over and winter is here and things are getting gloomy, but that doesn’t stop surfers from heading out into the ocean (photo taken at Muizenberg surfer’s corner, Cape Town).

Debian package work

2019-04-04: Work on gamemode (1.3.1-1) update.

2019-04-04: Upload new upstream version of tetzle (2.1.4+dfsg1-1) to debian unstable.

2019-04-04: Upload gnome-shell-extension-dashtodock (66-1~exp2) to debian experimental.

2019-04-04: Upload connectagram (1.2.9-5) to debian unstable.

2019-04-06: Upload kpmcore (3.3.0-5) to debian unstable.

2019-04-08: Non-maintainer upload of plymouth (0.9.4-1.1) to debian unstable.

2019-04-15: Upload desktop-base (10.0.2) to debian unstable.

2019-04-15: File unblock request for desktop-base (10.0.2).

2019-04-15: File unblock request for calamares-settings-debian (10.0.19-1).

2019-04-15: File unblock request for live-config (5.20190312).

2019-04-16: File bug against live media having a stale /etc/fstab file causing problems (#927216).

2019-04-16: File bug against live media having duplicate sources.list entries (#927216).

2019-04-16: File bug against amdgpu not working on debian live systems (#927219).

2019-04-24: Upload new upstream version of btfs (2.19~exp1) to debian experimental.

2019-04-24: Upload new upstream version of calamares (3.2.5-1~exp1) to debian experimental.

2019-04-25: Upload new upstream version of gnome-shell-extension-workspaces-to-dock (50-1~exp1) to debian experimental.

2019-04-29: Upload new upstream version of calamares (3.2.7-1~exp1) to debian experimental.

2019-04-29: Upload new upstream version of gnome-shell-extension-multi-monitors (18-1~exp1) to debian experimental.

Debian package review and sponsoring

2019-04-04: Comment on cuba (4.2-1) ( request).

2019-04-05: Quick review on siconos (4.2.0+git20181026.0ee5349+dfsg.2-1), forward request to debian-science team ( request).

2019-04-09: Review siconos (4.2.0+git20181026.0ee5349+dfsg.2-1), needs some work (ftbfs) ( request).

2019-04-10: Sponsor siconos (4.2.0+git20181026.0ee5349+dfsg.2-1) for debian unstable ( request).

Debian QA

2019-04-11: Build fresh Debian live ISOs for testing.

2019-04-11: Test Debian Live ISOs for full-disk encryption from calamares, bootsplash themes and plymouth themes.

2019-04-13: Build fresh Debian live ISOs for testing.

2019-04-13: Test Debian Live ISOs for recent fixes.

2019-04-13: Blog entry: Help test Debian Live.

Debian community

2019-04-21: Schedule a Debian town hall meeting “Meet the new DPL and ask him anything!“.


DebConf bursaries took out a whole lot of time towards the end of the month, I didn’t manage to log activity for this, but plan to write a lot of documentation for this process when all the essential (and time-critical) work has been completed.

by jonathan at 01 May 2019 07:55 AM

20 April 2019

Jonathan Carter (highvoltage)

Debian project leader elections 2019

A few weeks ago, after a few days of internal turmoil on the matter, I committed to running for DPL.

The original nomination period was the week before, with no one stepping up for the position and with our current leader indicating that he wouldn’t be available to serve another term. This resulted in a bit of a knee-jerk reaction and slight panic, with threads popping up on the debian mailing lists pondering things like what a leaderless Debian would look like and whether we perhaps need more of a team than a single person to be the leader the project. There was also some discussion about burnout and whether it’s even fair to put so much pressure on a single person, and whether it’s possible to delegate more of the DPL’s responsibilities. The press also picked up on this and there were a few big stories on the matter that lead some to be slightly nervous on the matter.

Of course (as the LWN article pointed out), Debian’s constitution is quite thorough and has made provision for cases like these. If no one steps up, the nomination period is extended for another week, and it only took one such extension to produce 5 new candidates (of which one retracted soon afterwards due to time commitments).

I mentioned internal turmoil at the beginning of the post, this was because up until a few days before my self-nomination, I’ve been very confident, and consistently so for a very long time, that I never want to run for DPL. The work that I care about and spend most attention on doesn’t at all require me being a DPL. Also, having more responsibility in areas that I’d rather let others take care of sounded a bit daunting. I’d much rather spend time on technical and more general community issues than very specific interpersonal problems or administrative tasks like reading and approving budget proposals, sending out developer certificates, etc. On top of that, I was aware that running for DPL and opening myself like that means that I open myself to a very wide array of critique, that people might put everything I say under a microscope and try to tear it apart, and that running for DPL means being prepared for that.

Despite that turmoil, a small nagging part kept asking the questions “But what if?”, what if I were DPL, what would I do? What would I change? What would I do as DPL that would make Debian better, and better as a DPL than I just could as a normal debian developer? These questions helped form in my head what my platform would look like, why I wanted to run for DPL, and how the rest of my campaign would shaped up. This year is also unique for me compared to previous years in that I will actually have time over the next year to focus on DPL-like activities. That, combined with the plans that were shaping up that I’m very enthusiastic about, convinced me that it’s time to step up and proceed with my self-nomination.

Directly after the nomination period, the campaign period starts. There are surprisingly few rules (or even guidance) regarding the campaign period, the majority of it is where Debian developers (or anyone really, but mostly DDs) ask questions to the DPL candidates about their stance and policy on certain matters, how they plan to take action and often a few really tough hypothetical situations. Some questions even took advantage of the fact that April fools day falls in the campaign period, which led to some odd and interesting questions. Overall, I really enjoyed the campaign period. I was preparing myself for the worst case scenario before campaigning started, but what actually happened next astonished me. We had all kinds of Debian developers coming forward with high quality, productive discussions on all kinds of aspects which ranged from internal technical policies, how we work with upstreams, community matters, diversity, the DPL role itself, how Debian is changing and how to keep it relevant, community turnover, how we deal with money, how we market ourselves and so one. It was productive discussion and I enjoyed it.

Regardless of the outcome of this election, I’m very happy that I stepped up as a DPL candidate, and I’m very satisfied with how my campaign went and how I answered my questions. I’m also very happy that the elections turned out so vibrant and productive and I dare say even exciting. I hope that this will continue to happen for future elections, because it’s clear to me that a productive election period is good for the health of Debian.

In the future, someone may be reading this and ponder “Should I run for DPL?”. My advice would be to first take some stock and figure out if you’re at a place in your life where you can actually do that (Did you just start a new job? Would your employer support you? Did you recently get married, have kids? How’s your health? Can you afford to spend lots of unpaid time doing DPL work? etc…) and then also consider why you’d want to be DPL and what you’d like to achieve with such a role. If you weigh up all the aspects and it still feels right for you, then by all means go for it. In my opinion, even if you’re not elected you still help make Debian better by participating in the election process.

Voting closes in around 12 hours at the time of writing this. Good luck to all the candidates and thank you to everyone who participated in making this such a fantastic and surreal experience!

2019-04-21: Update: Congratulations to Sam Hartman who is our new DPL! We’ve been talking off-list throughout the election process and Sam knows he has my full support and we even plan to collaborate on certain areas, more news to follow in the near future.

by jonathan at 20 April 2019 12:00 PM

29 October 2018

Christel Breedt (Pirogoeth)

How to say and do the right thing for someone struggling with chronic illness

If any of you have recently watched the first Deadpool movie, I'll refer you now to a the scene above in which Wade Wilson goes on a mini rant about cancer to his girlfriend Vanessa.

At the end of the scene he emphatically states: "And under no circumstances will I invite YOU to this (shit) show!"

That got me thinking about the role of isolation in Chronic illness.

It's generally well known that being socially isolated makes people more likely to develop mental and physical illness... so it's obviously a good idea for someone already prone to these things not to be left on their own for too long right?

So why do we have such a problem showing up for our Chronically ill friends?

I'm assuming it's not because we don't care. On the contrary I'm fairly certain the reason we don't show up is because we don't know HOW. But if we keep a level heald about it I figure it's pretty simple.

We all get taught to think about illness in a certain way. From childhood illness is described as follows:

1. Something that can be managed by consuming healing substances or getting procedures done and resting.
2. A state in which you should more often than not isolate yourself from others and withdraw for a time to heal.
3. It is thought of as a state of being less than a normal human. Something is WRONG with you. You're not fully at capacity.
4. You are only given a fixed period in which to convalesce. When you take too long to heal, others may judge you as being poor at caring for yourself or you are lying about how ill you are.

So lets take those four things apart a little more.

1. Something that can be managed by consuming healing substances or getting procedures done and resting

This is I think one of the main reasons why chronic illness perplexes healthy people. How do you interface with someone who cannot take something, or receive a procedure, convalesce a while and then heal? What is this voodoo you speak of in which you just STAY SICK?

This is because unlike normal illnesses, rule one of healing from chronic illness is that even when you take all the medicine and rest all the time and do all the are still going to have days when you are as sick as most people's worst day of the flu and this won't meaningfully alter based on anything YOU DO.

There is no control you have over whether or not you will continue to be chronically ill. There is only control over how you deal with being chronically ill.

This can be hard for people to accept. It's terrifying for healthy people to imagine such a thing. A sickness that doesn't heal? A damp in your performance that doesn't go away? That experience of rubbing up againsts such human frailty can make people feel a bit awkward and stressed. It might remind them of losing a grandparent and watching their decline for example, and bring them to a confrontation of their OWN mortality.

This can make being around a chronically ill person uncomfortable and even emotional for a well person. But it's really important that friends dig deep within themselves and GET OVER IT. You see, we have those same fears....but for us there isn't a way to avoid confronting them. It literally lives with us in our body. If we can live with it day by day, I'm pretty confident you will discover you have the strength if you challenge yourself.

By all means, if the feeling overwhelms you do something about it. We do. Speak to your own doctor or therapist about your fears. Talk to a parent or a priest. This is what we do as chronically ill people to find the strength so there's no reason you shouldn't do the same.

But do that work, if you love us, of getting over being afraid of being us.

2. A state in which you should more often than not isolate yourself from others and withdraw for a time to heal

Staying home and healing up and not making a nuisance of my sick self in public is totally a valid thing to do when I have a cold that passes in three days. But when you have a chronic illness there comes a point when like it or not, my sick self is going to need to be about my business. There's simply no way around that.

Being chronically ill means doing things while you are technically so sick you should be in bed, or in hospital. This is another one that hits healthy people in a hard way. Because they have never had to get up and keep going through terrible illness, many don't realise it's actually a thing people do who are chronically ill. They somehow naively believe that being chronically ill is like having your period. You're ill...for a few days a month every month. They often cannot fathom waking up deeply tired, crushingly in pain and emotionally wrecked....and still getting out of the house and doing a days work.

I would challenge anyone who is healthy but wants to understand the experience a little better. For a full month, you are not allowed to brush your teeth, comb your hair, or wash unless you have done an extra two hours in the gym.

This will serve two purposes. You'll be tired as hell. That's something chronically ill people understand well. You will feel stiff and sore all the time and everywhere. Check. You'll want to shower and brush your teeth but find yourself skipping it because the thought of those two hours in the gym will simply be too much some days. You'll discover that wet wipes, dry shampoo, hand sanitiser, and deodorant have off-label uses you never dreamed of. And you'll be RIPPED if you manage to keep it up.

IF you keep it up.

Because pulling an extra two hours in the gym each day is a lot like being chronically ill. The amount of extra energy, time and physical discomfort involved can be somewhat mimicked by doing a really hard workout.

If this thought experiment is sufficient to give you ample empathy for how not cool that might be, skip the gym if you want....but remember that I don't ever get to skip being chronically ill. If I don't "go to the gym" of dealing with my chronic illness, chances are I either land up in hospital, or lose mobility or the ability to speak or think straight,  or in some cases some people with chronic illnesses can even die if they skip a day of showing up to the work of their illness.

And there's generally not a point where caring for your chronic illness means you get FITTER. Unlike working out, you don't get buff from being chronically ill.

3. It is thought of as a state of being less than a normal human. You're not fully at capacity.  Something is WRONG with you.

When you have a chronic illness, you're never going to be at full capacity ever again. You're now forever going to be someone that is checking their daily capacity, and based on a few factors the most of which you do not control, you will wake with some fraction of the percentage of energy and ability that prior to chronic illness you'd have considered your best day. Having your best day is like having your birthday or winning the lottery.

So there is something here we need to address. People who are not at the same capacity for work as other people are not broken or lesser than or subhuman or WRONG. Your worth as a being isn't determined by your CAPACITY FOR WORK.

This is something that's become really entrenched in our capitalist industrialist society, and it's a dangerous belief. Being a good friend to a person with a chronic illness means leaving this limiting belief behind. Our lives have inherent worth, meaning and purpose even when we cannot work.

Not being able to work is not a form of weakness, or poor judgment, or a flawed character. Being chronically too ill to work a normal job or any job is just a reality of life with chronic illness.

There are many ways to be of value to your community even then. I run a 5000 person strong community support group online, and coordinate relief efforts for members of my community in dire straights. I support parents in rearing their children with chronic illnesses like Ehlers Danlos Syndrome and provide them with information and guidance towards resources and support for their families. I also write these blogs and articles and create lessons for people who use alternative means of communication to learn about topics like science or biology.

These are all things I do sitting in a chair in my room, or in bed. I do not work in the normal sense of the word. But because I do these helpful things when I can do them and  I have people who support my patreon page, or my paypal account or send me funds to my backabuddy page. These things all allow me to live despite no having a normal job. This is just as valid a way of living as having a 9 to 5er.

I'm not able to work...but my life has worth. I'm at full capacity for being ME.

4. You are only given a fixed period in which to convalesce. When you take too long to heal, others may judge you as being poor at caring for yourself or you are lying about how ill you are.

People keep expecting me to get better. This is...perplexing. I mean, many of them have known me for decades. Still...they keep expecting me to have another answer when they ask me "How are you?"

Don't ask people with chronic illness how they are. Ask them how they are TODAY. Or better yet, ask them what they are doing right now that's interesting and fun for them. But don't expect to get a different answer than the one you've been getting for the last week, or month, or year, or decade.

Chronic illnesses don't heal. There's no period of healing that will fix this. There's often no treatment or cure. Knowing how I'm really doing won't really help you be my friend right now. I know you don't really get it. You aren't' someone with a chronic illness. You need to accept that's a part of MY experience you cannot empathise with. GET OVER IT.

I have.

What does help me is you accepting that me not getting better and me still being a mess 6 months or 6 years or 60 years later is OK. Not getting better when you're chronically ill is perfectly valid. I don't need to perform wellness for people who accept my illness - and that takes enormous pressure off of me.

BE someone who accepts my illness as much as I do.

What can you do to help though? Well, there is actually a lot! And it's at all different levels of intimacy, commitment, effort, and cost to you so you can always find something nice and helpful to do to support a chronically ill friend no matter the circumstance. Sometimes it just takes being a little more thoughtful, asking the right questions, and thinking outside of the box:

1. Ask me how I'm doing with my daily regime, or whether there have been any new developments in my treatments or management. Understanding what I do to be well will help you find ways to pitch in, or help me do those things more easily. Chronically ill people often like to relate these sorts of things to each other, so they might be willing to tell you too.

2. There are great ways to engage and share in my journey of wellbeing. Talking about your own health is fine, and I do care to listen about what you're doing in your life too...Just remember not to pitch in with advice from your auntie who sells Herbalife or this cool article you read on Facebook. You aren't here to give me advice, you're here to get to know the things about my health that matter to me, and maybe help me do those things. Keep the backyard doctoring in the box. if I need your advice, I'll ask.

2. Share in that path by offering to support me with something. If I'm a forgetful person going through a rough patch, offer to check in on me for a while to help me remember to take my meds each day, or make a point of helping me catch up on difficult chores once every few months. This can just be a quick text message or coming round to take out my trash for all of five minutes once a week. Little things for you are sometimes big things to us.

3. Drop in once every two weeks to come to visit a housebound friend and bring them a treat. When you're finding it hard to go out or get fun things in your life, being visited can be amazing. Being visited regularly gives structure and a sense of security in a friendship that can be very comforting, especially for a chronically ill person who may feel depressed and isolated.

4. If you're flush, set up a weekly takeaway delivery to a sick friend's home. Not having to cook one night a week can be a real joy. Better yet, bring your sexy self over and come to watch a movie with us on Pizza night!

5. Check in from time to time with us whether we need any physical or mental support of a particular kind. Having another fruit basket or slab of chocolate is charming, but having a friend who will ask me what to get me or how to help me is GOLDEN.

6. Call me just to tell me about your shit. I mean I'm REALLY tired of talking about my shit all the time. I've got to deal with this thing 24/7 and I probably see my doctor more often than I see you. You don't have to talk about this illness of mine ALL THE TIME. I actually want to know what's up for YOU.

7. Make group outings accessible for me. If you're all doing a ladies night, choose a bar that has an access ramp. Or try going at a time of day or day in the month that I'm actually feeling up to going along - check in with me when that is and help me coordinate when this goes down so I can bring my best self to the party that day. Give me a lift if it's hard for me to drive, or be ready to jet me out of there fast if I pass out or feel ill and let me know you're prepared for those things and I'm totally still welcome. Because I'd just stay home and miss out before I put that on you without your say so. Give me permission to be a drag.

8. Help me prepare to go to places I need to go. Sometimes I don't need someone to do the thing, I just need someone to sit with me while I do it. Many people with cognitive issues like brain fog or executive function problems just need help from someone in the room offering them pointers on what they were doing and why they were doing it. It's a low maintenance way of giving invaluable support. If I've got a big appointment that's got me rattled, having someone there to ensure I am dressed and ready on time and geared to go takes enormous stress off me, even if they don't actually dress me, or do anything but talk me through the prep.

9. Carry emergency supplies for my care when we hang out. I know you're my true friend when you keep earplugs in your cubby that are there JUST for me, or you have a stash of tranqs in the glovebox that you keep around for in case I have a panic attack in public or you keep sachet of electrolytes in your bag in case my POTS hits, or you know where I keep my epipen or insulin shot. It's the little things...

10. Remind me often that canceling plans or rescheduling is ok. I live in fear that letting you down will mean you dump me as a friend. It's hard when I am often not able to share in adventures with you, or visit because I'm ill. Reminding me that you'll love me even when my being ill robs us of time together will help me feel safer making plans with you to go out and do fun things.

If I think of more ideas I'll add them on later, but that's my best for now.


by Whizper ( at 29 October 2018 12:35 PM

26 September 2018

Christel Breedt (Pirogoeth)

How do we best support our neurodivergent child?

The Amazing Adventure

It's natural for parents to feel at a loss for how to proceed once they become aware of the fact that they are raising a neurodivergent child. With the strong opinions the community holds about therapies that seek to conform neurodivergent children to be more neurotypical, parents often feel cornered and lost without a way forward.

 This is a blessing not a curse. This is a moment for you to pause and embrace the truth: Nothing is ever in control. We don't know where this is going and that is OK. There isn't necessarily a way you should be going.

The answer is as simple as it is profound and challenging: You control the way forward. You can make your own way, or follow a road well traveled. There isn't a right choice all made up for you yet. You get to DECIDE.

Don't shrink back in fear! Revel in this adventure before you! All those opportunities and possibilities yet to unfold which you will have the privilege of sharing with your child as they grow. Embrace this adventure!

A life yet unlived. A story yet unwritten.

It's important to acknowledge that parenting a neurodivergent child can be extremely challenging and that children who are neurodivergent often need unique support and intervention for reasons that vary as wildly as the colour of wildflowers.

Still, there is no set outcome we are sure of. There is no script that can tell you how your kid is going to develop going forward. You must discover this as you go along. That uncertainty is uncomfortable, but in its wide expanses lies a lot of freedom too.

Let's focus on the vastness of possibility instead of the narrowness that we are encouraged to experience when a diagnostic label is chosen for a child by the medical fraternity. We can acknowledge that the label informs us about possible needs our child may have in the future without growing attached to any of those hypothetical future stories for their lives.

Showing up is half the job

Understand that parenting was always going to be one of the the hardest things you will ever have to do. All parents experience despair or directionlessness at times. Don't get stuck in that. If you feel like you can't get out of it, you need to seek support for that struggle not just for your child but for yourself. Learning to meditate and ground ourselves so we can be mindful of what we are bringing into the world is a crucial part of being a more attuned parent.

One of the great ironies of life is that very often the answers we seek are already inside of us - we sometimes just need a way of unearthing them. Spend time tending our inner world, your subconscious wisdom, and seek therapy if you feel you may have some troubles that are not yielding to your earnest efforts to overcome them. There is no shame whatsoever in seeking guidance - every culture has the tradition of seeking the wisdom of a shaman or Oracle. In this culture, we often call them therapists, yogis, gurus, priests or even our own parents.

Asking for help is a sign of tremendous courage. Ignorance and complacency is a far easier path, so if you're out there beating the bushes for answers or opening yourself up to the advice of others you're already doing an amazing job just by showing up. Give yourself a cookie and a hug for passing good parenting 101: Showing up.

Give them a voice 

Carl Jung wrote, "Nothing has a stronger influence psychologically on their children than the unlived live of the parent." Often our own priorities as parents are not actually what is in the best interest of our children. Being able to hold space for our own anxieties and fears, both for ourselves and for their future but then returning to be present with the experience of reality is key to preventing our own agendas from dominating the lives of our children.

Furthermore, the relationship with our children needs to be divested of power struggles and violence even in it's subtlest forms such as manipulation and passive aggression, and it needs to be radically accepting of differences between you as individuals so that the vast freedom we are all born with is not constrained by the will of our parents for our lives or their ways of doing for themselves.

The more intimate and yet accepting your bond, and the less of your own ego you bring to your parenting, the more you will discover you are making headway with them. You may discover that your perception of what their problems are may not always reflect their experience and the best guide to what path is best will come from your child themselves.

Learning to hear their voices in a million ways is the most powerful thing you can do to raise them well. for many children, this may actually require some very active listening and some very active interventions such as augmentative communication strategies but in those cases, this becomes even MORE important as often the only person willing to hear them will be YOU.

Welcome to the revolution

Society projects an enormous number of expectations onto every living being. We are trained from our first to practice conformity. Especially for a generation of parents raised in institutions - schools, or universities, or churches or clubs - our agency was often denied from a young age. We were taught to passively accept a path that was proscribed for us. Walk in line. Sit here. Listen, do not speak. Obey your elders without argument.

In a culture of conformity, being an outlier is a radical act. Being willing to refuse to be conformed is a form of defiance in a culture that values people falling into line and sticking with the program. Neurodiversity is an involuntary form of defiance in the face of pressures of conformity.

We are not able to conform because we are not wired for it. We cannot fall into line without harming ourselves. We must be radical or die to self either literally or metaphorically. Our nonconformity isn't a choice, it is our nature and we cannot hide it without paying a devastating cost.

That cost is one that we frequently pay with by forfeiting our mental and physical health. The average lifespan on an autistic person is less than 40 years old. The suicide rate is 28 times higher than the average. It is obvious that the way that we have been caring for autistic people up to now has been causing them to die young. Similar statistics exist in other forms of neurodiversity like ADHD also. Protecting a neurodivergent child from the force of conformity that society is placing on us is the most powerful gift a parent can give.

To do so you must be willing to be a nonconformist yourself...and that can be terrifically hard and scary. But if our parents will not take on this challenge, who will? It is crucial to our survival that they find the courage. I believe that in the heart of every parent is a fire of love strong enough to fuel that courage if they let it, sometimes they just need a bit of help getting it going or directing that heat in the right way. We can never fail so long as we continue to try.

Give them somewhere to belong
As a child reared by radically nonconforming people who ended up being pretty messed up people themselves, I can say this: Even if you screw up terrifically as a parent, if you do so while trying to hold a space for me to thrive I will thank you for it anyway, from personal experience.

My parents were a pair of hot messes....but the one thing they nailed was making sure I knew that being neurodivergent wasn't something I needed to fear or feel ashamed about, or some curse or divine blessing or a calling or a duty or anything holy or unholy. It was natural, right, good and just as the world ought to be (When the world is as it ought to be - diverse and comfortable with difference. I was helped to understand that this was a world I would be called to BUILD).

My parents praised my gifts and achievements while reminding me I still poop like everyone else and that even if I need certain supports or accommodations to solve these problems, I could not avoid the necessities of life like eating, sleeping and keeping clean. To them, I was just like every other kid everywhere and that was AWESOME. I BELONGED to my parents. I wasn't a freak at home. Everywhere else, but never in my own home. Be that safe place for your kid.

Never forget that your child is a sentient being

Something radical you may need to consider is that some of the truth of what you need to do for your child lies ONLY WITHIN YOUR CHILD. Even while they are only able to wail and suckle, they are a sentient being. Even when they can only gurgle and eat things off the floor, they are a sentient being. Even when they are unable to speak or cannot regulate their emotions, they are a sentient being. Even when they are not engaging with you in the way you'd hope and expect, they are always a sentient being. Sentience takes MANY forms.

Don't miss out on seeing the truth of that because society has conditioned us to respect certain sentient beings over others. Don't underestimate their intelligence, their capacity, and do your utmost not to undermine their agency. Give them a chance to show you what they can do before you do it for them. Give them choices as often as you can and let them bear the consequences so far as you can bear to do so without harming their young and trusting souls. Be there, ready to assist, but always assume the possibility exists that they will do it themselves one day given time, patience, tutelage and when needed accommodations or interventions that support the independence they are capable of.

What specific tools you use to educate them, or healing you seek for them will be right for you at the time given what you observe and what you know and what you have to give. We do the best job we know how to do. Be sure you know as much as you can - not just in terms of outside education - but in terms of truly knowing the will of your child for their OWN lives. Parenting shouldn't be about a power struggle or parochial care or patronage. It should be a partnership.

Children are people too

Never desecrate that bond of partnership with cruelty, cowardice or needlessly controlling behaviour. Be able to apologize when inevitably do because you are human. Model that ability for them so they know how it looks and can learn by example to be kind and humble in turn. Having the courage to be vulnerable is a superpower. Be vulnerable, most of all, with your children. They want to see you. You are the center of their universe. The most powerful things my parents ever taught me were things they taught me in moments where I could see their inner selves and they were teaching me from their hearts.

Lessons about who we were as a family. Lessons about how we were. Lovesongs they sang to me in my crib as an infant, over and over, became the mantras that soothed my deepest fears. Those lessons became my religion during times that I lost my religion. Your words and actions are written on the tablet of your child's soul. Mind what you write there.

Show them how it's done

Learn to be deeply, profoundly honest both with them and with yourself. Don't create a division between parents and children when none need exists. You are people. Be consistent in how you treat PEOPLE, don't have dual standards for kids and adults. Do unto children as you would have done unto yourself. Your kids are going to notice your bullshit and it will never fly. Don't play games with your kids, try to be real. Often neurodivergent kids have an uncanny ability to unmask our subterfuge as parents. Be able to deal when they do.

If their behavior affects you, let them know. If you need space, say so. If you need something from them because you are scared or vulnerable, don't hide behind bluster or authority. Often a straight and honest explanation of the need for something, especially if it is personal for you, will be all they need to hear to comply. Give them all the information it is safe for them to have about why things are necessary to be done, and let them decide how to work with you to resolve the problems you face as a family and as individuals in that family.

Parents can negotiate with their children just like with anyone else. The older they get the easier and more effective this strategy becomes. Keep on trying to implement it as soon as possible until it starts working.

Know yourself, and embrace your roots
Knowing where you come from is as important as knowing where you are going. In fact, the one cannot proceed without the other. Understanding yourself, and your family roots help you make better decisions about how to go forward. Children without roots cannot anchor themselves and stand tall. Learn about your past and your history.

Share your culture and your identity with your child from a young age. Always remember that your child will be the maker of the new world you will spend your old age in. Teach them about the beautiful things you want to preserve in your world, and how to build beautiful worlds, and how to be beautiful people. You do so by teaching yourself first, and then showing them what you've learned by example. Learn first to be an ambassador for your own people, a leader, and do them proud, then teach your child about the sort of people they come from with pride.

Trust yourself

I have been taught that success is a combination of Chutzpah and Humility: Having the nerve to speak your truth, the humility to know you don't hold the whole truth in yourself. As a parent, you're going to need to find the Chutzpah to stand up to the whole wide world and draw a ring around your child's mental, emotional and physical safety. But you will also have to bring the humility to know that the only person who knows your child through and through is YOUR CHILD.

Get them in on this whole endeavor of rearing them. they are the primary stakeholder in this project after all, and they deserve a voice about the goals and outcomes the project aims to achieve. Even if the only decision they can make right now is whether or not to let their carrots touch their mash, let them have those decisions as far as it is possible to do so. They need that practice to learn to trust themselves in making decisions in the future.

Being given that freedom (and the opportunity to learn from our consequences) teaches us to be wiser and smarter. So give them that freedom as soon as you can. And never forget to give that freedom to yourself. Like. NOW. Start now to decide to make your OWN way going forward. The choice is YOURS.

by Whizper ( at 26 September 2018 09:17 PM

24 September 2018

Christel Breedt (Pirogoeth)

Treating Sensory Sensitivities with cheap supplements/lifestyle changes

Treating Sensory Sensitivities with cheap supplements/lifestyle changes
Today someone asked me a question about this in my autism group, and I didn't know how to easily answer it. I have this wild jumble of things in my head but no simple reply. I decided to write up something proper as my reply!

The thing is, many kinds of SPD are actually a result of certain physiological issues at a cellular level. 

Treating these issues with off the shelf really fairly cheap supplements can offer rapid relief at a fraction of the cost of other treatments. The catch?

Because there are so many different possible kinds of issues that need to be looking for it can be hard to know where to begin. This is because the chemistry of these problems look a little something like THIS:

First of all, one must grasp that sensory sensitivities are caused by misfirings or misprocessing within the brain or the nervous system. Many of these processes depend on ion pathways that operate across the cellular walls. Sometimes that pathway is dysfunctional in those with sensory sensitivity due to any number of factors, genetics, illness, and diet being notable factors.

When these problems occur due to a genetic proclivity towards such problems, they are known as ion-channelopathies

The issues lead to intracellular or extracellular deficiencies of potassium, magnesium, calcium, sodium or other needed ionic substances (see illustration above). Of these Potassium and magnesium deficiencies appear to be the most common in the autistic community.

Because of the codependence of Potassium on Magnesium, and Magnesium with Calcium and all of their entanglement with Sodium ( and a host of other substances too numerous to mention here) the others are often also not being absorbed or used as they should and may be out of balance. All kinds of drama ensues, so resolving this problem can often really support a lot of different health problems people didn't even originally connecto to sensory processing problems.

Many of autistic people's "weird" behaviours are actually ways of self-medicating these issues...but more on that later on in this piece.

How do we treat this thing?

Treatment consists of multiple steps. The first acute managment is through direct supplementation with the substances you are deficient in.

Secondary management involves dietary changes to address the poor ion channels and any other health issues that are contributing to the problem. Often a good supplement to take is an omega fatty acid supplement or adding coconut oil to your diet as this improves the structural integrity of the ion channels themselves as they are made of fatty acids.

Lastly exacerbating factors need to be addressed to support the weak ion channels, as direct supplementation is often of limited long-term efficacy, and must give way to more individualised management later on.  Examining your health and habits, in general, will be important. Lifestyle adjustments will need to be made that go beyond just diet or supplementation.

What's going on in there?

I am bad at this bit, but my friend Tania explains it better than I can using the example of our friend Benjine who first discovered these connections and brought them to our attention. She has a video about this HERE.

The long and the short of it is that you have problems with your nervous system as a result of your voltage gated ion channels being broken and you need to streamline the efficiency of this system to improve it's function. This can be done through diet, and through reducing "drag on the system in the form of other health problems that make the issue worse.

Managing other health issues that exacerbate symptoms: 

Some conditions that are involved in aggravating these issues are inflammatory or immune-mediated disorders like Endometriosis, Mast Cell activation disorders, or rheumatoid arthritis. This is due to the relationship between inflammation and it's effect on the cell's signaling and function.

Addressing the source of the inflammation must always be part of management. For those who have comorbid chronic illnesses like Mast Cell Activation Syndrome or Endometriosis, a broader program of management will be needed to control the issue, which will include management of inflammatory markers through dietary adaptations or supplements as well as other lifestyle alterations and treatments targeted at treating the underlying conditions. For those not familiar this is stuff like anti inflammatories, anti histamines, or allergy avoidance diets etc.

But be mindful that direct treatment with anti inflammatories like COX 2 inhibitors can cause bigger issues further on down the road. For more detailed information visit for a long discussion of complications that can arise due to inflammation and the impact of superoxides on the health of cells.

In these situations the work of my friend Benjine Gerber at comes into play - this website explores more deeply the relationship between inflammation and sensory issues. Since it is too much to cover here, I'll go into it another day, but keep in mind that making sure you have an ample supply of antioxidant-rich food in your diet is a good plan, and bumping up your arginine content might also be useful. Certain anti-inflammatory foods and foods with a low histamine content may also benefit many with these problems.

Here I'll pop in a note to those with gut problems that your gut issues may contribute to this, and on another day I'll do another post talking about salicylate and oxylate intolerances and how they tie into these issues....but that's another talk :)

Meditation is an important part of any management program for almost all health issues, and in this case, can make the difference between long-term success or failure, so don't keep meaning to take it up, start watching some videos by Tara Brach (my personal guru) TODAY.

How to know if you have an issue:

Those in the autism community frequently show a particular pattern of issues, and it's so common that anyone experiencing sensory sensitivities aught to try this out.

 We have a good shorthand first-line option for this that usually works for most (but not all) people. We normally start on a course of Trisalts or Multiforce alkaline powders for immediate relief within two or three days.

If you want to get testing beforehand, a blood test to assess your deficiencies in these substances may be useful, but be warned that intracellular potassium deficiencies cannot be detected by blood tests. As an example, I'll talk specifically about potassium/magnesium deficiencies.

Symptoms are: 

1. Fatigue, difficulty with sleep
2. Weakness, loss of muscle tone, spasticity, fasciculations
3. May be involved with blood sugar dysregulations ie. hypoglycemia
4. Muscle cramps, aching, stiffness and tenderness, touch sensitivity
5. Tingling or burning in the hands and feet, numbness, need to move, restless leggs.
6. Loss of coordination (if severe can lead to ataxia and paralysis)
7. Digestive problems, gastroparesis, gut cramping, upset tummy or constipation
8. Heart palpitations, feelings of anxiety
9. Difficulty breathing, "forget" to breathe, "weight on chest", poor circulation
10. Moodiness and emotional dysregulation
11. Light or sound sensitivities.

To recap: 

Step 1:Supplement with
 Tri-salts or Multiforce for about two weeks to establish if this benefits you. Other options include taking potassium supplements directly, such as switching to "low salt" (usually a potassium-based salt substitute) or take magnesium supplements directly, or bathe in Epsom salts regularly and take potassium tablets. Some people respond poorly to certain types of magnesium formulas or Epsom salts so your mileage may vary.

Step 2: Isolate the underlying cause of exacerbating issues such as inflammation, or gut problems etc., and address them. Figure out if you have one of the common dietary sensitivities oxalate intolerance which can markedly aggravate sensory issues. Learn about dietary support for inflammation at

Step 3:
Supplement with fatty acids to make cell walls supple. Coconut oil is good too, or flax seed, oily know the drill.

Step 4: Lifestyle changes to reduce stress such as reducing your commitments, getting supports or accommodations, changing careers etc. And MEDITATE. There's a joke Benjine makes about people who make you angry: "Don't let them steal your potassium!" Learning to be more relaxed, mindful and zen will reduce your sensory issues, I PROMISE :P

That's all! I hope this helps.


by Whizper ( at 24 September 2018 04:12 PM

11 June 2018

Graham Poulter (verdant)

How to spring-clean your blog

(spring-cleaning your blog)
Here are ways I found to clean up a Blogger blog. I've found and fixed many things with content, images, navigation, theme, descriptions, and analytics. [4 minutes]

Spring-Cleaning Steps

Clean up the content

  • Remove old posts: delete old posts with no traffic and no usefulness to readers. Also delete the comments.
  • Use headings: create proper headings and subheadings, since Blogger added support.
  • Remove cruft: remove broken links, outdated information and unhelpful asides.
  • Enhance clarity: clean up rambling bits, convert list-paragraphs to bullets, add bold titles to bullets.
  • Clean HTML: remove random HTML elements that crept in over time, to be tidy.
  • Remove blank paragraphs: remove white space to improve post appearance.
  • Add read times: add [5 minutes] etc time estimates to help readers decide.

Clean up the images

  • Replace hotlinks: replace hotlinks with uploaded images. Prevents dead images and mixing of HTTP with HTTPS on the page.
  • Design images: using Adobe Spark to create post images, it can dynamically reshape the image for each social network.
  • Replace old images: pick higher-resolution images for old low-res ones.
  • Alt text: add a text description of the image. Alt text overrides the page title for Pinterest description. Warning that if you don't set a Search Description (meta tag), description comes from first 140 characters of the post, which includes alt text from heading images.
  • Title text: optionally add text to show up on mouse-over. It overrides both page title and alt text to be the image description on Pinterest.

Clean up the navigation

  • Revise titles: rework post titles be more direct (8-12 words, under 60 characters) using one or more key phrases from top organic searches.
  • Make intro concise: write intro paragraph under 200 characters to avoid truncation in mobile post list or Pinterest description. Keep each sentence under 140 characters to avoid truncation in search result snippets or shares.
  • Add Search Descriptions: enable under Settings:Search Preferences:Meta Description. Then add a Search Description to each post based off the 200-character intro.
  • Use broad labels: re-label using only a few categories, a category for each major audience, each post in 1 or 2 categories only.
  • Add internal links: add internal links to other posts a reader of this post might be interested in.

Clean up the theme

  • Pick theme: change from Contempo to Notable since images are not important in my posts.
  • Tweak timestamps: I removed the year from dates shown on the blog. My posts are so old 👴
  • Revise blog description: rewritten to sound better when sharing blog on social media.
  • Enable comments: switch from Google+ comments to Blogger comments, since commenting dropped off radically under Google+.
  • Tune AdSense fill rate: reduce fill rate from 60% to 5% to show fewer ads. I'm just playing with AdSense, only made €15 in 5 years anyway.

Improve discoverability

  • AdWords: run a campaign for niche posts that aren't ranking yet, with custom redirects for a short URL for the ad.
  • Set up HTTPS: enable HTTPS by default and HTTPS redirection.
  • Webmaster Tools: added https:// domain and sitemap.xml to Google Webmaster Tools, also register with Bing Webmaster Tools.
  • Google Analytics: add filter to exclude referrals from spam domains ("Campaign Source" filter), and exclude "m" in "Exclude URL Query Parameters" on the view, so you don't have two rows for each page.
  • Sharing + Follow Buttons: add proper sharing and follow buttons as Blogger built-in ones aren't great. Right now using Shareaholic with all the tracking and advertising crud turned off.
P.S. After you've decluttered your blog, try decluttering your home with the outbox method.

by Graham Poulter ( at 11 June 2018 08:27 PM

28 May 2018

Graham Poulter (verdant)

How to extend the life of your clothes

How to extend the life of your clothes
Here are some tips on preserving your clothes! Ways to make the wash easier on the clothes, and increase the number of wears one can get between washes. [3 minutes]

Reduce the wear of washing

1. Wash clothes in laundry nets

Mesh laundry nets stop socks getting lost - they're all in a bag - and shield clothes from most of the friction-wear of laundering.

2. Choose the delicate wash cycle

The delicate cycle causes the least heat and friction damage. If animal fibers such as wool thermals are in the wash, use a non-bio detergent since the enzymes of bio detergents eat the proteins. Wool jumpers of course wash by hand with wool detergent.

3. Dry clothes on an airing rack

Air-drying causes less wear than tumble drying. The tumble-dried sheets and towels have visible wear over time.

Get more wears per wash

4. Air clothes on a rail after use

Airing worn clothes on a rail allows odors to disperse. One can cycle between shirts, with worn shirts airing on the rail instead of retaining odors in the wardrobe.

5. Air clothes outdoors

If otherwise clean pants or jackets fail the sniff test say due to spending the evening in a bar or restaurant, airing them outside for a day or two likely restores them without washing. Winter coats go years without dry-cleaning if aired properly.

6. Keep shoes on a shoe rack

Using a shoe rack keeps the smells of the city near the door instead of in the wardrobe, and helps keep the floor clean.

7. Shower in the evening

By showering in the evening the bed sheets can go 3 or even 4 weeks before feeling like they need a change. Showering in the morning, expect to wash the sheets every week.

Bonus tip: Down Jackets

Down jackets can be washed once a year after the cold season, with down detergent on a woolen cycle, then dried flat on an airing rack. To remove clumps from the down, follow with a 20-minute delicate-cycle tumble dry with tennis balls.


What do you think of these ways of making clothes last longer? Less wear from washing, more wears between washes. If you disagree or have more tips, comment below.

P.S. check out my my advice for removing smoke smells from waterproof jackets and decluttering your home with the outbox method.

by Graham Poulter ( at 28 May 2018 10:13 PM

19 May 2018

Tristan Seligmann (mithrandi)

Build artifacts with pex

For Continuous Integration in my Python application (as opposed to library) projects, I generally want to run my tests as well as build a Docker image, making use of the same artifacts and environment for both: I want to test what I'm actually deploying, rather than something merely similar. Previously this meant doing pip install twice; once into a virtualenv to run the tests, then again in the Docker image build. Sharing the pip cache between these steps speeds things up a lot, but this still ends up using quite a bit of time on network roundtrips etc.

Now that pex works with pypy, I have developed a slightly better workflow for this. Briefly speaking, Pex is a tool for assembling a Python application into a single runnable file that embeds the dependencies of the application; at runtime, the dependencies are ziploaded or extracted to a temporary location as necessary to run the application.

The workflow:

  1. Build a pex file.
  2. Run the tests against the pex file.
  3. Copy the pex into the Docker image.

This is similar to what I would do with a language like Go or Haskell that would produce a single executable as part of the build process.

by mithrandi at 19 May 2018 08:01 AM

19 January 2018

Tristan Seligmann (mithrandi)

Adventures in deployment, redux

Just a brief update: I've moved on from the hackish deployment strategy described in an older post; we now have Drone for CI building Docker images, pushing them to a registry, and deploying them on Rancher. You can see an example of the Drone pipeline to do this in our GitHub repos.

This is all I'm going to say on the topic, because that's all there really is to it. If you're using Kubernetes, I strongly suggest you look into Weave Flux for deployment; this is eventually where I want to end up, but migrating to Kubernetes is hard for us at the moment.

by mithrandi at 19 January 2018 09:52 PM

22 November 2017

Graham Poulter (verdant)

The keys to doing long-form Narrative Improv

"Do it Now" book cover
Here are some key ingredients for full-length improvised plays known as Narrative Improv. Providing tips on story structure, normalcy, the protagonist, consequences and clarity. [4 minutes]

In Narrative Improv the group creates a full-length play with a more-or-less coherent story that runs all the way through from "once upon a time" through to the "happily ever after" (or not so happily). It's a flexible form that stands in contrast to both highly structured forms like the Armando or Harold, and to the unstructured "montage" improv of possibly-connected scenes with once-off characters.

The following tips are summarised from the excellent little book, Do It Now: Essays on Narrative Improv by Parallelogramophonograph ("Pgraph" for short), especially the "What comes next?" conclusion on page 73:

1. Build the story spine

The story spine is a generic story structure: "Once Upon A Time ... And Every Day ... Until One Day ... And Because Of That ... And Because Of That (repeat to taste) ... Until Finally ... And Ever Since Then". Virtually any plot can be arranged or rearranged into a story spine form, and you can practice making story spines in a group exercise where each person, in turn, adds an element to the story.

2. Invest in normalcy

It's almost impossible to spend too much time on the "once upon a time ... and every day" part of the show where everything that happens is stuff that always happens. Even if two characters start in a sword fight, that's just something they do every day. Normalcy builds the world, the characters, the relationships. Take up multiple scenes, a large fraction of your show, just showing different parts of the everyday world of these people. If someone brings in the plot too soon just act like their proposed plot is something that happens all the time. One day, when the "One Day" finally happens, you will have loads of material to work with!

3. Identify the protagonist

Around the "Until One Day" point, different characters will be making offers of goals and desires. As a group, you gradually home in with a "spotlight" on different characters to settle on one with a strong offer, who will become the protagonist for the rest of the story. Give the protagonist a strong and simple desire - even if it's just to get their rug back (it really tied the room together!). Then the rest of the story becomes scenes that either help or hurt the protagonist in pursuit of their goal.

4. Make scenes have clear consequences

More than "making bold choices", by giving actions and scenes clear, strong consequences, the "And Because Of That" will come naturally, and you get a feel for where the story is going. This frees you from "oh no, where are we going?" scrambling for the next step, giving you space to have playful moments in your scenes.

5. Be clunky but clear

Be overt and clear about the details of scenes and relationships, particularly early in your group's development. It's the opposite of being vague and hoping that the others figure out what you're getting at or fill in the gaps. "My dear brother Kevin, what a dank cave this is!" comes out clunky but makes the relationship and location clear! Subtlety will develop over time.

6. Use a range of acting styles and tones

Deliberately try out new genres, and new acting styles from everyday realism, to stage realism, to over-the-top stylized acting. Try out new character tropes from movies and theatre. These deepen your stories and make your shows distinct, taking your improv to new places.

Conclusion: PGraph advise us to "play, practice, enjoy getting it horribly wrong - that's how you learn! -and revel in getting it right." I hope this taste inspires you to get the book or take the class on Narrative Improv!

P.S. I bought and read "Do It Now" as preparation for a 6-week class on Narrative Improv facilitated by Neil Curran of Lower The Tone, and have no affiliation with Parallelogramophonograph.

Do you have some advice to share on doing Narrative Improv? Comment below!

by Graham Poulter ( at 22 November 2017 09:49 PM

09 August 2017

Adrian Frith (htonl)

Linguistic diversity map of South Africa

The linguistic diversity index measures the probability that two people selected at random from a population speak different home languages. The map below, which I produced, depicts the linguistic diversity index calculated on a 10-kilometre-wide hexagonal grid across South Africa.

A map of South Africa showing the linguistic diversity index calculated on a 10-kilometre-wide hexagonal grid Linguistic diversity; click to enlarge

09 August 2017 12:00 AM

10 November 2016

Tristan Seligmann (mithrandi)

Running away again

[I originally posted this on Facebook; I've disabled comments here because I don't think I can cope with them over here on my blog, but if you really need to comment you can find me on Facebook or elsewhere]

I've run away several times in my life.

The very first time was as a teenager; I don't even recall exactly what it was that triggered it, I think it was anxiety over a compulsory school camp that I didn't want to attend. I didn't have a plan, I didn't even have any real intention to actually run away for real, I just felt like I was trapped and needed to escape / lash out somehow. "Running away" amounted to declaring my intent, leaving the house, hiding somewhere nearby while everyone frantically searched for me, and eventually returning a few hours later once I had calmed down a bit. Of course, at the time, I wasn't really capable of fully understanding the situation; I didn't understand the destructive mental paths that lead to being unable to cope, I didn't really care how much emotional stress I was causing to others, and I didn't realise that had I been able to communicate better about how I was feeling, I could probably have dealt with things much better. In short: I was wrong to run away this time. Then again, I was just a teenager, so I think I can be forgiven for failing at those things.

Later on in life, running away took on a more sophisticated form. Once I gained sufficient control over my life (both in the legal and the financial sense), I took steps to cut certain people out of it. I have few regrets about the process (which was staggered, not something I did all at once); some relationships and interactions are simply not healthy or beneficial for the parties involved, and not having to deal with the constant stress of those interactions definitely improved my mental health and my life in general by quite a bit. In short: I think I was right to run away this time. But in the end, it was still running away; I couldn't cope with the situation, so I chose not to cope with it.

And now…recent events surrounding the 2016 US elections are slowly producing that rising sense of panic and inability to cope again. The elections themselves are not the trigger; rather, it is the conversations they have sparked which has lead me to realise certain things about relatives, acquaintainces, and friends. As most of you probably know, I'm no stranger to intellectual debate / conflict; this isn't about that. I can quite happily handle interactions with someone I disagree with on politics, economics, or what have you; most of the time, I'm happy to discuss / argue the matter for hours, unpacking our disagreement into differences in assumptions vs. differences in reasoning, and ending with a better understanding of both sides even if my mind remains unchanged.

But this is different: this is a conflict over whether or not we should care about other people. Caring about other people is something I learned as an incontrovertible truth from childhood, not a selective privilege to be extended to only some and not others. I now realise that many around me do not feel the same way; they feel that some people are not deserving of their care, for whatever reason, and…I don't know how to deal with this.

I feel like running away this time would be a mistake, that I need to stay and engage with these people, attempt to change their minds; but I have no idea how to do this, and I fear the poisoning of either my own mind, or my relationships, as a result of this. I fear that to maintain these relationships as-is, with no condemnation, will result in sending the message that I support something I do not. I fear that such condemnation would inevitably lead to the destruction of those relationships anyway, accomplishing nothing good in the end. I fear that by running away, I am losing the opportunity to do something about all of this. I feel guilty because of my fear; there are others who do not even have the option of running away, others who are the direct target of the uncaring and the hatred, rather than mere bystanders who can leave at any other time. How much worse must their fear be than mine?

And so here I am, trapped in a seemingly endless mental loop, afraid to run and afraid not to run.

by mithrandi at 10 November 2016 11:12 PM

25 September 2016

Michael Gorven (cocooncrash)

XBMC for Raspberry Pi

This page describes how to install XBMC on a Raspberry Pi running Raspbian. You can either install packages on an existing Raspbian installation, or you can download a prebuilt image and flash it to an SD card.

Installing packages on an existing installation

I've published a Debian archive containing packages for Kodi/XBMC and some dependencies which it requires. This can be setup on an existing Raspbian installation (including the foundation image).


The easiest way to install the package is to add my archive to your system. To do this, store the following in /etc/apt/sources.list.d/mene.list:

deb wheezy contrib

and import the archive signing key:

sudo apt-key adv --keyserver --recv-key 5243CDED

Then update the package lists:

sudo apt-get update

You can then install it as you would with any other package, for example, with apt-get:

sudo apt-get install kodi

The user which you're going to run Kodi as needs to be a member of the following groups:

audio video input dialout plugdev tty

If the input group doesn't exist, you need to create it:

addgroup --system input

and setup some udev rules to grant it ownership of input devices (otherwise the keyboard won't work in Kodi), by placing the following in /etc/udev/rules.d/99-input.rules:

SUBSYSTEM=="input", GROUP="input", MODE="0660"
KERNEL=="tty[0-9]*", GROUP="tty", MODE="0660"

The GPU needs at least 96M of RAM in order for XBMC to run. To configure this add or change this line in /boot/config.txt:


You will need to reboot if you changed this value.


To run XBMC, run kodi-standalone from a VT (i.e. not under X). XBMC accesses the display directly and not via Xorg.

If you want Kodi to automatically start when the system boots, edit /etc/default/kodi and change ENABLED to 1:


Run sudo service kodi start to test this.

Release history

  • 15.2-2: Isengard 15.2 release, and most PVR addons.
  • 14.2-1: Helix 14.2 release.
  • 14.1-1: Helix 14.1 release.
  • 14.0-1: Helix 14.0 release.
  • 13.1-2: Link to libshairplay for better AirPlay support.
  • 13.1-1: Gotham 13.1 release.
  • 12.3-1: Frodo 12.3 release.
  • 12.2-1: Frodo 12.2 release.
  • 12.1-1: Frodo 12.1 release. Requires newer libcec (also in my archive).
  • 12.0-1: Frodo 12.0 release. This build requires newer firmware than the archive or image contains. Either install the packages from the untested archive, the twolife archive or use rpi-update. (Not necessary as of 2013/02/11.)

Flashing an SD card with a prebuilt image

I've built an image containing a Raspbian system with the XBMC packages which you can download and flash to an SD card. You'll need a 1G SD card (which will be completely wiped).


Decompress the image using unx:

% unxz raspbian-xbmc-20121029.img.xz

And then copy the image to the SD card device (make sure that you pick the correct device name!)

% sudo cp xbmc-20121029-1.img /dev/sdb


The image uses the same credentials as the foundation image, username "pi" and password "raspberry". You can use the raspi-config tool to expand the root filesystem, enable overclocking, and various other configuration tasks.


Both Raspbian and Kodi can be updated using normal Debian mechanisms such as apt-get:

# sudo apt-get update
# sudo apt-get dist-upgrade

Release history

Unstable versions

I've started building packages for the upcoming Jarvis release. These are in the new unstable section of the archive. To install these packages update your source list to look like this:

deb wheezy contrib unstable

Release history

  • 16.1-1: Jarvis 16.1
  • 16.0-1: Jarvis 16.0
  • 16.0~git20151213.a724f29-1: Jarvis 16.0 Beta 4
  • 15.2-2: Isengard 15.2 with packaging changes to support PVR addons, and most PVR addons.
  • 15.2-1: Isengard 15.2
  • 15.1-1: Isengard 15.1
  • 15.0-1: Isengard 15.0
  • 15.0~git20150702.9ff25f8-1: Isengard 15.0 RC 1.
  • 15.0~git20150501.d1a2c33-1: Isengard 15.0 Beta 1.
  • 14.2-1: Helix 14.2 release.
  • 14.1-1: Helix 14.1 release.
  • 14.0-1: Helix 14.0 release.
  • 14.0~git20141203.35b4f38-1: Helix 14.0 RC 2
  • 14.0~git20141130.ea20b83-1: Helix 14.0 RC 1
  • 14.0~git20141125.4465fbf-1: Helix 14.0 Beta 5
  • 14.0~git20141124.ec361ca-1: Helix 14.0 Beta 4
  • 14.0~git20141116.88a9a44-1: Helix 14.0 Beta 3
  • 14.0~git20141103.d6947be-1: Helix 14.0 Beta 1. This requires firmware as of 2014/10/06 and libcec 2.2.0 (both included in the archive). There are also builds for Jessie but I haven't tested them. PVR addons are also updated.
  • 14.0~git20141002.d2a4ee9-1: Helix 14.0 Alpha 4

by mgorven at 25 September 2016 04:54 AM

06 January 2016

Michael Gorven (cocooncrash)

Memory optimised decompressor for Pebble Classic

TLDR: DEFLATE decompressor in 3K of RAM

For a Pebble app I've been writing, I need to send images from the phone to the watch and cache them in persistent storage on the watch. Since the persistent storage is very limited (and the Bluetooth connection is relatively slow) I need these to be as small as possible, and so my original plan was to use the PNG format and gbitmap_create_from_png_data(). However, I discovered that this function is not supported on the earlier firmware used by the Pebble Classic. Since PNGs are essentially DEFLATE compressed bitmaps, my next approach was to manually compress the bitmap data. This meant that I needed a decompressor implementation ("inflater") on the watch.

The constraint

The major constraint for Pebble watchapps is memory. On Pebble Classic apps have 24K of RAM available for the compiled code (.text), global and static variables (.data and .bss) and heap (malloc()). There is an additional 2K for the stack (local variables). The decompressor implementation needed to have both small code size and variable usage. I discovered tinf which seemed to fit the bill, and tried to get it working.

Initially, trying to decompress something simply crashed the app. It took some debug prints to determine that code in tinf_uncompress() wasn't even being executed, and I realised that it was exceeding the 2K stack limit. I changed the TINF_DATA struct to be allocated on the heap to get past this. At this stage it was using 1.2K of .text, 1.4K of .bss, 1K of stack, and 1.2K of heap (total 4.8K). I set about optimising the implementation for memory usage.

Huffman trees

Huffman coding is a method to represent frequently used symbols with fewer bits. It uses a tree (otherwise referred to as a dictionary) to convert symbols to bits and vice versa. DEFLATE can use Huffman coding in two modes: dynamic and fixed. In dynamic mode, the compressor constructs an optimal tree based on the data being compressed. This results in the smallest representation of the actual input data; however, it has to include the computed tree in the output in order for a decompressor to know how to decode the data. In some cases the space used to serialise the tree negates the improvement in the input representation. In this case the compressor can used fixed mode, where it uses a static tree defined by the DEFLATE spec. Since the decompressor knows what this static tree is, it doesn't need to be serialised in the output.

The original tinf implementation builds this fixed tree in tinf_init() and caches it in global variables. Whenever it encounters a block using the fixed tree it has the tree immediately available. This makes sense when you have memory to spare, but in this case we can make another tradeoff. Instead we can store the fixed tree in the same space used for the dynamic tree, and rebuild it every time it is needed. This saves 1.2K of .bss at the expense of some additional CPU usage.

The dynamic trees are themselves serialised using Huffman encoding (yo dawg). tinf_decode_trees() needs to first build the code tree used to deserialise the dynamic tree, which the original implementation loads into a local variable on the stack. There is an intermediate step between the code tree and dynamic tree however (the bit length array), and so we can borrow the space for the dynamic instead of using a new local variable. This saves 0.6K of stack.

The result

With the stack saving I was able to move the heap allocation back to the stack. (Since the stack memory can't be used for anything else it's kind of free because it allows the non-stack memory to be used for something else.) The end result is 1.2K of .text, 0.2K of .bss and 1.6K of stack (total 3.0K), with only 1.4K counting against the 24K limit. That stack usage is pretty tight though (trying to use app_log() inside tinf causes a crash) and is going to depend on the caller using limited stack. My modified implementation will allocate 1.2K on the heap by default, unless you define TINF_NO_MALLOC. Using zlib or gzip adds 0.4K of .text. You can find the code on bitbucket.

by mgorven at 06 January 2016 06:28 AM

01 November 2015

Adrian Frith (htonl)

Historical topographic maps of Cape Town

I’ve made an interactive website with six sets of topographic maps of Cape Town and surrounds covering the period from 1940 to 2010. You can zoom in and move around the maps, switching from one era to another.

01 November 2015 12:00 AM

03 October 2015

Simon Cross (Hodgestar)

Where to from here?

Closing speech at the end of PyConZA 2015.

We’ve reached the end of another PyConZA and I’ve found myself wondering: Where to from here? Conferences generate good idea, but it’s so easy for daily life to intrude and for ideas to fade and eventually be lost.

We’ve heard about many good things and many bad things during the conference. I’m going to focus on the bad for a moment.

We’ve heard about imposter syndrome, about a need for more diversity, about Django’s flaws as a web framework, about Python’s lack of good concurrency solutions when data needs to be shared, about how much civic information is locked up in scanned PDFs, about how many scientists need to be taught coding, about the difficulty of importing CSV files, about cars being stolen in Johannesburg.

The world is full of things that need fixing.

Do we care enough to fix them?

Ten years ago I’d never coded Python professionally. I’d never been to a Python software conference, or even a user group meeting.

But, I got a bit lucky and took a job at which there were a few pretty good Python developers and some time to spend learning things.

I worked through the Python tutorial. All of it. Then a few years later I worked through all of it again. I read the Python Quick Reference. All of it. It wasn’t that quick.

I started work on a personal Python project. With a friend. I’m still working on it. At first it just read text files
into a database. Slowly, it grew a UI. And then DSLs and programmatically generated SQL queries with tens of joins. Then a tiny HTML rendering engine. It’s not finished. We haven’t even released version 1.0. I’m quietly proud of it.

I wrote some games. With friends. The first one was terrible. We knew nothing. But it was about chickens. The second was better. For the third we bit off more than we could chew. The fourth was pretty awesome. The fifth wasn’t too bad.

I changed jobs. I re-learned Java. I changed again and learned Javascript. I thought I was smart enough to handle
threading and tons of mutable state. I was wrong. I learned Twisted. I couldn’t figure out what deferreds did. I wrote my own deferred class. Then I threw it away.

I asked the PSF for money to port a library to Python 3. They said yes. The money was enough to pay for pizza. But it was exciting anyway.

We ported another library to Python 3. This one was harder. We fixed bugs in Python. That was hard too. Our patches were accepted. Slowly. Very slowly. In one case, it took three years.

Someone suggested I run PyConZA. I had no idea how little I knew about running conferences, so I said yes. I asked the PSF for permission. They didn’t know how little I knew either, so they said yes too. Luckily, I got guidance and support from people who did. None of them were developers. Somehow, it worked. I suspect mostly because everyone was so excited.

We got amazing international speakers, but the best talk was by a local developer who wasn’t convinced his talk would interest anyone.

I ran PyConZA three more times, because I wasn’t sure how to hand it over to others and I didn’t want it to not happen.

This is my Python journey so far.

All of you are at different places in your own journeys, and if I were to share some advice from mine, it might go as follows:

  • Find people you can learn from
    • … and make time to learn yourself
  • Take the time to master the basics
    • … so few people do
  • Start a project
    • … with a friend(s)
  • Keep learning new things
    • … even if they’re not Python
  • Failure is not going to go away
    • … keep building things anyway
  • Don’t be scared to ask for money
    • … or for support
    • … even from people who aren’t developers
  • Sometimes amazing things come from one clueless person saying, “How hard can it be?”
  • Often success relies mostly on how excited other people are
  • Stuff doesn’t stop being hard
    • … so you’re going to have to care
    • … although what you care about might surprise you.

Who can say where in this complicated journey I changed from novice, to apprentice, to developer, to senior
developer? Up close, it’s just a blur of coding and relationships. Of building and learning, and of success and

We are all unique imposters on our separate journeys — our paths not directly comparable — and often wisdom seems largely about shutting up when one doesn’t know the answer.

If all of the broken things are going to get fixed — from diversity to removing the GIL — it’s us that will have to fix them, and it seems unlikely that anyone is going to give us permission or declare us worthy.

Go build something.

by admin at 03 October 2015 03:05 PM

17 September 2015

Brendan Hide (Tricky)

Setting up MikroTik QoS – for Home/Small Office – Part 1

  • Part 1 – Introduction – Setting up Simple Queues (This post)
  • Part 2 – Reliably Identifying traffic – Setting up Mangle Rules (Coming Soon TM)
  • Part 3 – Priorities and Limits – Setting up Queue Trees (Coming Soon TM)
  • Part 4 – Monitoring Usage – Redefining Queues – Limiting Abusive Devices (Coming Soon TM)
  • Part 5 – ??? Profit ???


The first problem one usually comes across after being tasked with improving an Internet connection is that the connection is overutilised. Typically nobody knows why, who, or what is causing the problem – except of course everyone blames the ISP. Sometimes it is the ISP – but typically you can’t prove that without having an alternative connection immediately available. I currently manage or help manage four “sites/premises” that use QoS to manage their Internet connectivity. One is my workplace, two are home connections, and the last one is a slightly variable one – usually just a home connection but alternatively, for a weekend every few months, it becomes a 140-man (and growing) LAN. Fun. 🙂

MikroTik and RouterOS

MikroTik‘s RouterOS is very powerful in the right hands. Many other routers support QoS but not with the fine-grain control MikroTik provides. Alternatively you could utilise other Linux-based router OS’s, such as DD-WRT, Smoothwall, Untangle, and so forth. Most of these typically require that you have a spare server lying about or a compatible hardware router. Mikrotik sells RouterBoards that have RouterOS builtin – and they are relatively inexpensive.

My experience with routers is primarily with Cisco and MikroTik – and my experience with QoS is primarily with Allot’s NetEnforcer/NetXplorer systems and MikroTik. The most popular MikroTik devices in my experience (other than their dedicated long-range wireless devices) have been their rb750 (new version named “hEX“) and rb950-based boards. They have many others available and are relatively inexpensive. In historical comparison with Cisco’s premium devices, I’ve tended to describe MikroTik’s devices as “90% the features at 10% the cost”. As this guide is aimed primarily at SME/Home use, inexpensive makes more sense. If you’re looking at getting a MikroTik device, note that MikroTik routers do not typically include DSL modems, thus your existing equipment is typically still necessary. Note also that this is not a tutorial on setting up a MikroTik device from scratch. There are plenty of guides available online for that already.

Theory into practice – first steps

To set up QoS correctly, you need to have an idea of a policy that takes into account the following:

  • The overall connection speed
  • How many users/devices will be using the connection
  • The users/devices/services/protocols that should be prioritised for latency and/or throughput

To achieve the above in my examples, I will assume the following:

  • The MikroTik is set up with the default network configuration where the local network is and the Internet connection is provided via PPPoE.
  • The connection speed is 10/2Mbps (10 Mbps download speed; 2 Mbps upload speed)
  • There will be 5 users with as many as 15 devices (multiple computers/tablets/mobile phones/WiFi etc)
  • Typical downloads require high priority with throughput but low-priority with latency
  • Gaming/Skype/Administrative protocols require high priority with both latency and throughput
  • No users are to be prioritised over others

The first and probably quickest step is to set up what RouterOS refers to as a Simple Queue.

I’ve made a short script that I have saved on my MikroTik devices to set up the simple queues. It is as follows:

:for x from 1 to 254 do={
 /queue simple add name="internet-usage-$x" dst="pppoe" max-limit=1900k/9500k target="192.168.88.$x"

What the above does is limit the maximum speed any individual device can use to “1900k” (1.9Mb) upload and “9500k” (9.5Mb) download.


  • The reason why the max limits are at 95% of the line’s maximum speed is that this guarantees no single device can fully starve the connection, negatively affecting the other users. With a larger userbase I would enforce this limit further. For example, with 100 users on a 20Mb service I might set this limit to 15Mb or even as little as 1Mb. This is entirely dependent on how “abusive” the users are and, as you figure out where and how much abuse occurs, you can adjust it appropriately.
  • The prefix “internet-usage” in the name parameter can be customised. Typically I set these to refer to the premises name. For example, with premises named “alpha” and “beta”, I will typically put “internet-alpha” and “internet-beta”. This helps with instinctively differentiating between sites.
  • The dst parameter has “pppoe” in the example. This should be substituted with the name of the interface that provides the Internet connection.

Ensure you customise the script to be appropriate to your configuration. Save the script to the MikroTik and run it – or paste it directly into the MikroTik’s terminal to execute it.

In my next post I will go over setting up what RouterOS refers to as Mangle rules. These rules serve to identify/classify the network traffic in order to make finer-grained QoS possible.


by Tricky at 17 September 2015 09:37 PM

Trust, Being in Control, Delegating that Trust, and Unexpected Heroes

Privacy, Time, Money

I don’t like debit orders. I’ve never liked the idea that another entity can, at will, take almost any amount of my money (well … whatever’s available). A colleague pointed out the issue with MTN would have been avoided had I been using a debit order. Maybe the “convenience” factor isn’t such a bad thing.

I suppose the penultimate question here is whether or not you want the convenience and can trust institutions (in this case with your money) – or if you can’t trust them and are willing to forgo that convenience. In my case, even though I still question the convenience, I learned the hard way with MTN that it doubly can be inconvenient to have your connected world reduced to “remote island” status. Almost everyone today goes with the convenience factor.


On the other hand, now a long time ago, I had a dispute with Planet Fitness where convenience was a double-edged sword. I reported their business practice to the Consumer Complaints Commission (since re-organised as the National Consumer Commission) and never got feedback from them. The gist of the issue is that Planet Fitness’s sales agent lied to me and a friend in order to get more commission/money out of my pocket.

I’m a Discovery Vitality member which gives many benefits, including reduced rates on Premium brands – mostly health-related of course, as Discovery is a Medical Aid/Health Insurance provider. To put it simply, Discovery is awesome. Vitality’s benefits cover gym memberships which further includes Planet Fitness. You still have to pay something, a small token of sorts, to Discovery, for the gym membership. But, after all, they WANT me to be healthy, so they don’t mind footing the bulk of the bill. But, apparently, this means Planet Fitness’ sales agents don’t get the commission!

So what does this result in? The result is that PF’s sales agent gave me an inflated figure for a “Vitality-based” membership. He lied. He then had me sign on the dotted line for an inflated price of a “regular” membership (yes, it was actually more than even a regular membership would have cost), ending up about 4 and 5 times as much as the Vitality-based membership.


Some time in 2011 I finally wisened up to the costs I was supposed to be paying. Discovery I am sure wouldn’t be too happy about this fiasco. I spoke to the Manager at the gym, and I was assured that the entire contract would be scrapped. I’m not one for violence … unless its for sport … in an Octagon … but after my 5th visit to the Manager to ask why the Debit Orders were still happening, he told me he was surprised I hadn’t brought weapons with me for the visit. After a few more visits, the Manager had actually left Planet Fitness and explained to me that the “contract” was between myself and Head Office and that the local gym, apparently a franchise-style operation, had little to no say about whether or not it could be cancelled. If Head Office said no, tough luck.

By this point I’d lost it. I had my bank put a stop to the debit orders. It was a huge schlep: I had to contact the bank every month because the debit order descriptions would change ever so slightly. It also cost me a little every couple of months to “reinstate” the blocking service. I can’t help but think the banking system supports regular expressions but the staff don’t necessarily know how to use it.

Technically I’m still waiting on the CCC to get back to me (never happened – and of course they were re-organised as mentioned above so the case probably fell through the cracks). Of course, by that point PF also wanted to blacklist me for not paying!

The Unexpected Hero

A haphazard mention of the issue to Discovery (I think I called them about a dentist visit) resulted in a callback by one of Discovery’s agents. They then asked me to describe the problem, in detail and in writing, to better explain from my perspective what had really happened. I obliged. It turns out I was right about them not being “too happy” about it. In fact they really didn’t like it. About three weeks later, Planet Fitness refunded me in FULL for all monies that had ever been paid to them.

Discovery is Awesome. 🙂


by Tricky at 17 September 2015 07:55 PM

16 August 2015

Simon Cross (Hodgestar)

So what is this roleplaying thing anyway?

I ran a roleplaying module [1] for some friends from work and after initially neglecting to explaining what roleplay is, I wrote this:

Roleplaying is a form of collaborative storytelling — a group of people gathering to tell a story together. This broad definition covers quite a range of things — one can tell very different kinds of stories and collaborate in very different ways.

What I’m planning to run is called “tabletop roleplaying” [2]. The stories told centre around a group of characters (the protagonists in a movie). Each person playing is in charge of one of these main characters, except for one person who has no character and instead handles everything that isn’t one of the main characters (they are a bit like the director of a movie).

Tabletop roleplaying is a little like a radio drama — almost everything is done by narrating or speaking in character. You’ll be saying things you want your character to say and describing the actions you want your character to take. Light acting, such as putting on accents or changing tone of voice or changing posture, can be quite fun, but is by no means a requirement.

The “director”, also called the “storyteller” or “DM” [3], describes the situations the main characters find themselves in, decides on the consequences of their actions and takes on the role of minor supporting characters and antagonists (often villains, because they’re exciting). The storyteller is also an arbitrator and a facilitator and attempts to maintain consensus and suitable pacing of the story.

Often you’ll want to have your character attempt an action that might not succeed [4]. For example, they might want to shoot a villain, charm their way past a bouncer, pick a lock or run across a burning bridge. In some cases success will be more likely than others. A character who is good looking or persuasive might find charming the bouncer easy. A character who has never picked up a gun might find shooting the villain hard.

The set of rules used to determine success or failure is called “the system”. The rules might be as simple as “flip a coin” or they might take up a whole book [5]. Dice are a commonly used way of randomly determining results with high numbers typically indicating more successful outcomes and lower numbers less successful ones.

Since the real world is very very complicated, the rules usually model different aspects of it in varying degrees of detail and this often sets the tone of the story to some extent. For example, a system for telling stories about bank robbers in the 1920s might have very detailed rules on vault locks, while a system for telling fantasy stories will likely have special rules for elves and dwarves.

All systems have shortcomings, and when these are encountered it’s usually the storyteller’s job to apply common sense and tweak the outcome accordingly.

The system I’m planning to use is an extremely simplified version of Dungeons & Dragons, 3rd Edition. The full rules run to many books. I’m hoping to explain the few rules we’ll be using in 10-15 minutes.

The story I’m planning to run focuses on a down-on-their-luck rock band about to enter a battle of the bands contest. The twist is that it’s a fantasy setting so there are elves and dwarves and, of course, in the hands of suitably skilled musicians, music is literally magical.

Some practical considerations

Someone has to supply the table to sit around. This is the person hosting the game. Ke can be a player or the storyteller or even uninvolved [6]. Traditionally the host also supplies a kettle and tea or coffee.

Everyone needs to show up and sit at the table, preferably roughly at the same time. This is surprisingly hard.

In order to remain at the table for prolonged periods, one needs things to nibble on. Traditionally people who are not the host bring snacks and drinks of various kinds. Roleplayers seem to take a perverse delight in bringing the unhealthiest snacks they can find, but this is perhaps a tradition best improved on.

Remembering the details of the story can be tricky, so it’s often useful to scribble short notes for oneself. A pen and paper come in handy.

I’ll give each player a couple of pages of information about their character. These are called the “character sheet”. The primary role of the character sheet is to supply margins to scribble notes and doodles in (see above).

It’s likely that time will fly remarkably quickly. If there are six of us, each person will get on average less than ten minutes of “screen time” per hour and probably a lot less given that the storyteller usually uses more than their fair share and there are always distractions and side tracks like discussing the rules or office gossip [7]. If we run out of time, we can always continue the story another day if we’re excited enough.

Lastly, the point is to have fun and tell an interesting story [8].


Host: Person who supplies the table, and usually warm beverages like tea and coffee.

Table: Thing one plays at.

Storyteller: The person managing the world the story takes place in, the consequences of players actions and playing the minor characters and antagonists.

Players: The people who are not the storyteller.

Player character: One of the protagonists of the story. Each player has their own player character to narrate.

NPC: Non-player character. All the characters in the story who are not player characters.

RPG: Roleplaying Game. Also rocket-propelled grenade.

System: The rules used to determine the outcomes of risky actions.

Dice: Things one rolls. Usually because one is required to do so by the rules, but often just for fun.

Fun: The point. :)


[1] The module was This is Vörpal Mace. If you’re keen to play it, you can download it from Locustforge.

[2] So called because it usually takes place around a table.

[3] “DM” stands for “Dungeon Master” and is a silly legacy term from the earliest tabletop roleplaying games which mostly focused on a group of heroes running around vast dungeons full of traps and monsters. The storyteller’s role was mostly to invent traps and monsters, hence the title.

[4] Because otherwise the story would be very boring. :)

[5] A whole book is far more common. :P

[6] Although letting six people invade your house for an evening for an activity you’re not involved in requires a special kind of friendship.

[7] One can avoid this time-divided-by-number-of-people limit by having multiple scenes running concurrently. This is a lot of fun, but hell on the storyteller. :)

[8] And it’s easy to lose track of this amongst all the details of playing your character, keeping track of what’s happening and figuring out the rules.

[9] This footnote is not related to anything.

by admin at 16 August 2015 11:06 PM

28 February 2015

Andre Truter (Cacofonix)

Old software in business

One thing that I cannot understand is why a business that is not a one-man-show would use outdated software, especially something like Internet Explorer 6 or 7 or anything under 10.
I can understand if a very small business of private person who do not have an IT department of IT support can still be stuck with such old software, but a big business with branches all over the country should know that especially IE < 10 has security risks and do not support HTML5.

So if you then ask a supplier to write you a web application and the web application makes use of HTML5, then you should not wonder why it does not work with your IE 8 browser.

I can understand that it might not always be possible to upgrade all workstations to the latest operating system if you use expensive proprietary operating systems, but then you can at least standardise on an open source browser like Firefox or a free browser like Chrome. Both of them have very good track records for security and they support HTML5 and keeping them up to date does not cost anything.

So why are your staff stuck with an old, insecure browser that does not support HTML5? We are not living the the 90's anymore!

The same goes for office suites. LibreOffice is kept up to date and there are other alternatives like OpenOffice (Backed by Apache, Oracle and IBM). With a little training, you can move all your users over to LibreOffice or OpenOffice and never have to pay for an upgrade again and always have the latest stable and secure version of the software available, no matter what OS you run.

To me it just makes sense to invest some time and money once to get ensure a future of not being locked in. In the long run it saves money and if enough businesses does that, it might even force Microsoft to come to the Open Document Standards table and bring the price of it's Office suite down or even make it also free, which will benefit everybody as we will have a real open document format that everybody can use and nobody can be locked in.

Just my humble opinion.

Some links:
Firefox Web Browser
Google Chrome Web Browser
Best Microsoft Office Alternatives

by andre at 28 February 2015 03:35 PM

03 December 2014

Neil Blakey-Milner (nbm)

Starting is one of the hardest things to do

Just over six years ago I stopped posting regularly to my fairly long-lived blog (apparently started in April 2003), and just under four years ago I noticed it was not loading because the server it was on had broken somehow, and I didn't care enough to put it back up. (Astute readers will note how those two dates are roughly a few months in to my last two job start dates...)

I've written a number of blog posts over the last few years, but I haven't posted any of them. I don't even have most of them anymore, although a few are in the branches of git repos somewhere. I'll try dig some of them up - one of the things I enjoyed about my old blog was rereading what I was thinking about at various times in the past. (I guess I'll try get that back online.)

I've also written two different bits of blog software since then - since that's what one does whenever one contemplates starting a blog up again (although, to be fair, I also started setting up Wordpress and Tumblr blogs too).

The first used Hyde, a static blog generation tool (whose development seems to have halted a year ago). The second is what I'm using now - a collection of Flask modules and some glue code that constitutes gibe2, which I wrote just under a year ago. It uses Frozen-Flask to freeze a Flask app into an HTML tree that can be served by any static web server.

Putting something out there - let alone a first pass, a beginning with some implied commitment to continue - is quite scary. In my career, I've tended to be the joiner and sometimes the completer to a project, not the initiator. I find it easy to take something from where it is to where I think it should go, and hard to imagine what should exist.

I should mention that I have succeeded in posting a bit to about the occasional spurts of time I get to work on a little D language OpenGL someday-might-be-a-game. The minimum expended effort there is a lot higher - building a new feature or doing a major refactor, and then explaining it all in a post - in fact the posts are sometimes a lot harder to put together than the code, and the code is quite a bit further ahead than the posts now. It will probably be very sporadic with posts mostly coinciding with my long weekends and vacations. (And, unsurprisingly, I've just finished up a vacation where I finally got around to putting the final touches on this here blog.)

Connecting together starting up being scary and game programming: I've been watching Handmade Hero religiously since it started (the first few on Youtube the day after, the last few live). Talk about being a tough thing to contemplate starting - one hour a day of writing a game from scratch streaming to the public every weekday - every single little mistake in your code and in your explanations there for people to pick apart without any opportunity for editing. And having ~1000 streamers in your first few shows - no pressure!

That definitely put just putting together a few words a week with no implied time-bound commitment into perspective, so here we are.

I stopped reading blogs roughly when I stopped caring about mine. I hope to find a few interesting people to follow. A few of my friends used to post, albeit infrequently. I hope I can convince them to do so again as well.

by Neil Blakey-Milner at 03 December 2014 07:45 AM

22 August 2014

Adrianna Pińska (Confluence)

Yet another way to play videos in an external player from Firefox

I spent some time today trying to figure out how to get Firefox to play embedded videos using anything other than Flash, which is an awful, stuttering, resource-devouring mess. The internet is littered with old browser extensions and user scripts which allegedly make this possible (e.g. by forcing sites like YouTube to use the vlc media plugin instead), but I was unable to get any of them to work correctly.

Here’s a quick hack for playing videos from YouTube and any other site that youtube-dl can handle in an external mplayer window. It’s based on several existing HOWTOs, and has the benefit of utilising a browser extension which isn’t dead yet, Open With, which was designed for opening websites in another browser from inside Firefox.

I wrote a little script which uses youtube-dl to download the video and write it to stdout, and pipes this output to mplayer, which plays it. Open With is the glue which sends URLs to the script. You can configure the extension to add this option to various context menus in the browser — for example, I can see it if I right-click on an URL or on an open page. You may find this less convenient than overriding the behaviour of the embedded video on the page, but I prefer to play my videos full-screen anyway.

This is the script:

youtube-dl -o - $1 | mplayer -

Make it executable. Now open Open With’s preferences, add this executable, and give it a nicer name if you like. Enjoy your stutter-free videos. :)

(Obviously you need to have youtube-dl and mplayer installed in order for this to work. You can adapt this to other media players — just check what you need to do to get them to read from stdin.)

by confluence at 22 August 2014 02:41 PM

21 August 2014

Simon Cross (Hodgestar)

Character Creation 3000W

by Simon Cross, Mike Dewar and Adrianna Pińska

Your character creation skills have progressed far beyond writing
numbers on paper. Your characters have deftly crafted manerisms and
epic length backgrounds. They breathe emotion and seem more life-like
than many of your friends.

Yet, somehow, when you sit down at a table to play your beautiful
creations, things don’t quite work out.

Perhaps the story heads in an unexpected direction, leaving your
creation out of place and struggling to fit in? Or maybe they’re fun
to play initially but their actions begin to feel repetitive and

If any of this sounds familiar, read on.

Reacting to failure

It’s easy to spend all your time imagining a character’s successes —

their victories and their crowning moments — but what happens when
they fail? How do they respond to minor setbacks? And big ones?

Maybe they’re stoic about it? Perhaps it’s likely to cause a crisis of
faith? Maybe they react by doubling down and uping the stakes? Maybe
they see failure as an opportunity to learn and grow? Perhaps they’re
accustomed to failure? Perhaps they see failure as a sign that they’re
challenging themselves and pushing their abilities?

The dice and the DM are going to screw you. Make sure you have a plan
for how to roleplay your character when they do.


A character’s goals are things strongly tied to specific events. A
philosophy colours every situation. The two are often aligned, but a
philosophy is more broadly useful. It gives you a handle on how your
character might behave in circumstances where it is not otherwise
obvious what they would do.

To take a hackneyed example: your backstory might involve punishing an
old partner who screwed you. This goal could feed a number of
rather different philosophies:

  • “I always keep my word, and I promised Jimmy I’d get him back.”
  • “Any situation can be solved with enough violence.”
  • “Karma controls the universe. What goes around comes around.”

The goal is the same, but each philosophy implies very different
day-to-day behaviour.

There are going to be times when other characters’ plots and goals are
centre-stage, and it behooves us as roleplayers to have a plan for
these awkward (and hopefully brief) moments. A philosophy allows your
character to participate in others’ plots as a unique and distinct
individual, rather than as a bored bystander.

Your character’s philosophy becomes vitally important when paradigm
shifts occur in-game. Setting changes erode the importance of lesser
goals and past history and create a strong need for a philosophy that
guides your character’s immediate responses and further development.

It may be interesting to construct characters with goals that
contradict their philosophy. For example, a pacifist might wish to
exact revenge on the person who killed their brother. This creates an
interesting conflict that will need to be resolved.

Randomly fucking with people is not a philosophy.

Interacting with colleagues

Your character is going to spend a lot of time interacting with their

colleagues — the other player characters — so it’s worthwhile
thinking about how they do that.

It’s tempting (and a bit lazy) to think of characters as relating to
everyone else the same way. This leads to loners and overly friendly
Energizer bunnies, both of which get old very quickly.

Avoid homogenous party dynamics.

If your character’s interactions with the other player characters are
all the same, you have failed.

Varied interactions also help make party disagreements more
interesting. Without varied interactions, you have to resolve all
disagreements by beating each other over the head with the logic stick
until consensus (or boredom) is reached. Unique relationships and
loose factions make disagreements more interesting to roleplay and
help the party find plausible lines along which to unite for a given

If your character is part of a command structure, spend some time
thinking about how they respond to orders they disagree with. Remember
that the orders are likely issued by someone your character knows and
has an existing relationship with. What is that relationship?

Also keep in mind that your character has likely been given such
orders before, and since they appear to still be part of the command
structure, they’ve probably come to terms with this in some way that
both they and their immediate superiors can live with.

Obviously everyone has their limits, though — where are your
character’s? How much does it take for other player characters or
NPCs to cross the line?


Sometimes even if you do everything right you find yourself in a
situation where your character is no longer fun to play. Maybe the
campaign took an unexpected turn or you’ve just run out of ideas for
them as they are. It’s time for your character to change — to embark
on a new personal story arc.

Great characters aren’t static. They grow and react to events around
them. Perhaps a crushing defeat has made them re-consider their
philosophy — or made them more committed to it? Or maybe frustration
with their current situation has made them reconsider their options?

It helps to think broadly about how your character might develop while
you’re creating them. Make sure you’d still find the character
interesting to play even if their stance on some important issues
shifted. Don’t become too invested in your character remaining as they
are. Be flexible — don’t have only one plan for character

Your character’s philosophy and general outlook can be one of the most
interesting things to tweak. Small changes can often have big
ramifications for how they interact with others.

Don’t feel you have to leave character development for later in the
campaign! The start of a campaign is often when character changes are
most needed to make a character work well and it sets the stage for
further character development later on.


Think about how you convey who your character is to the other
players. They’re probably not going to get to read your epic
backstory, so they’re going to have to learn about who your character
is in other ways.

Likely the first thing people will hear about your character is his or
her name — so make it a good one. It’s going to be repeated a lot so
make sure it conveys something about who your character is. If they’re
an Italian mobster, make sure their name sounds like they’re an
Italian mobster. That way whenever the DM or another player says your
character’s name, it reminds everyone who your character is.

The second thing people hear will probably be a description of your
character. Take some time to write one. Don’t rely on dry statistics
and descriptions. Stick to what people would see and remember about
your character if they met him or her for a few minutes. Don’t mention
hair colour unless hair is an important feature.

After introductions are done, you probably won’t get another
invitation to monologue about your character. So do it in character
instead. Tell the NPC about that time in ‘Nam. Regale the party with
tales from your epic backstory. As in real life, try not to ramble on,
but equally, don’t shy away from putting your character in the
spotlight for a few moments. Continually remind the others at the
table who your character is.

Last but not least, remember that the most epic backstory is pointless
if no one finds out about it. The point of dark secrets is for them to
be uncovered and for your character to confront them.


Don’t fear failure. Have a philosophy. Have varied interactions with
others. Embrace change. Share who you are.


  • Kululaa dot COMMMM!
  • Mefridus von Utrecht (for a philosophy that involves others)
  • Attelat Vool (for starting life after failure)

This article was also published in the CLAWmarks 2014 Dragonfire edition.

by admin at 21 August 2014 09:36 AM

17 March 2014

Adrianna Pińska (Confluence)

Why phishing works

Let me tell you about my bank.

I would expect an institution which I trust to look after my money to be among the most competent bureaucratic organisations I deal with. Sadly, interactions which I and my partner H have had with our bank in recent years suggest the opposite.

Some of these incidents were comparatively minor: I once had to have a new debit card issued three times, because I made the fatal error of asking if I could pick it up from a different branch (the first two times I got the card, my home branch cancelled it as soon as I used it). More recently, when I got a replacement credit card, every person I dealt with had a completely different idea of what documents I needed to provide in order to collect it. When H bought a used car, it turned out that it was literally impossible for him to pay for it with a transfer and have the payment clear immediately — after he was assured by several employees that it would not be a problem.

Some incidents were less minor. H was once notified that he was being charged for a replacement credit card when his current card was years away from expiring. Suspicious, he called the bank — the employee he spoke to agreed that it was weird, had no idea what had happened, and said they would cancel the new card. H specifically asked if there was anything wrong with his old card, and was assured that everything was fine and he could keep using it. Of course everything was not fine — it suddenly stopped working in the middle of the holiday season, and he had to scramble to replace it at short notice. All he got was a vague explanation that the card had to be replaced “for security reasons”. From hints dropped by various banking employees he got the impression that a whole batch of cards had been compromised and had quietly been replaced — at customers’ expense, of course.

What happened last weekend really takes the cake. The evening before we were due to leave on a five-day trip, well after bank working hours, H received an SMS telling him that his accounts had been frozen because he had failed to provide the bank with some document required for FICA. This was both alarming and inexplicable, because we had both submitted documents for FICA well before the deadline years ago. The accounts seemed fine when he checked them online. When he contacted the bank, he was assured that he had been sent the SMS in error, everything was fine, and he didn’t need to provide any FICA documents.

So we left on our trip. I’m sure you can see where this is going.

On Thursday evening H’s accounts were, in fact, frozen. He tried unsuccessfully during the trip to get the bank to unfreeze them, but since it was closed for the weekend there was pretty much nothing he could do until we got back home.

Hilariously, although employees from the bank made a house call this morning to re-FICA him, he had to go to the branch anyway because they needed a photocopy of his ID (scanning and printing is magically not the same as photocopying).

Again, what actually happened is a mystery — the bank claims that they have no FICA documents on record for H (as an aside, why are customers not given receipts when they submit these documents to the bank? If there is no record of the transaction, the bank can shift blame to the customer with impunity if it loses vital documentation).

We’re very fortunate that none of these incidents had devastating consequences for us, since they only impacted one of us at a time. If we relied on a single bank account, we could easily have ended up without food, without electricity, or stranded in the middle of the Karoo with no fuel. This is pretty clearly not an OK situation.

The common thread running through all these incidents is a lack of communication: both between the bank and its customers, and within the bank. We rapidly discovered through our dealings that while the bank maintains the facade of a single, unified entity, it in fact comprises several more-or-less autonomous divisions, and communication between these divisions often resembles diplomacy in the Balkans.

I would not be surprised to discover that various aspects of customers’ information are distributed over several disconnected databases. There appears to be no way for certain types of information to be linked to accounts, which necessitates the use of bizarre hacks. When H’s credit card was disabled, this was in no way reflected in the online interface — he just had an enormous amount of money reserved on the card. When his accounts were frozen, this was again not apparent in the interface (which was recently updated) — his available credit balance was just zeroed, and he got a non-specific error whenever he tried to transfer funds. I believe that the back-end infrastructure for managing this information effectively and making it available to customers and employees simply does not exist.

As a result of this, I have learned not to believe a word that a bank employee says if there is any chance that the issue crosses some internal jurisdictional boundary. In the best case scenario they are aware of their own lack of information and are able to direct you to the appropriate department. In the worst case scenario, they dispense outright misinformation — something which can have devastating consequences (for you).

We live in an age with an abundance of instant communications methods. In spite of this, it appears to be beyond the bank’s abilities to inform people timeously about what is going on with their accounts. It has backed off from electronic communications presumably because of fears of phishing, and has fallen back to two obsolete and inefficient channels: voice phonecalls, which are prone to misunderstandings and human error and leave the customer with no written record, and SMSes, which have a character limit. Both these channels are vulnerable to blips in the cellphone network infrastructure, customers having no airtime, or customers just not being available to answer their phones at certain times (since voice phonecalls are synchronous). The bank also uses these channels as if it believes that they are intrinsically secure and trustworthy, which is ludicrous, as anyone who keeps getting calls from “the Microsoft Support Centre” can attest.

In order for this dysfunctional system to work, the bank appears to expect its customers to accept unexpected additional charges unquestioningly, and to follow instructions issued by unknown persons calling from unverified internal numbers, even if they are nonsensical or suspicious and cannot be corroborated by other bank employees contacted through more reputable public-facing channels. It is standard procedure for such callers to demand personal information from customers in order to verify their identities, but they offer no evidence of their own legitimacy.

In short, the bank expects us to be the kind of credulous chumps who fall prey to phishing scams. It’s easy to see why phishing works when genuine communications from the bank are so unprofessional and follow such laughable security practices that they are virtually indistinguishable from phishing.

I haven’t named my bank, although it’s pretty easy to find out what it is if you know where to look, because I’m sceptical that there are significant differences between the way South African banks operate; particularly the Big Four. I’ve certainly heard the same kinds of horror stories from customers of other banks.

This is the final straw which has led us to investigate other banking options. Whether the pastures we’re moving to are greener or just differently green remains to be seen.

If you feel strongly that there is a bank which is notably better or worse than the others, or you just want to share your own tale of banking woe, let me know in the comments. I’ll be over here, stuffing my money into a sock to hide under my mattress.

by confluence at 17 March 2014 12:10 PM

25 November 2013

Michael Gorven (cocooncrash)

Statically linked e2fsprogs binaries for Android

I needed to resize the ext4 filesystem of the /data partition on my Android phone and spent ages looking for a prebuilt binary of resize2fs (since it isn't included in ROMs or recovery). I didn't find one and so spent ages trying to build it myself. To save others the trouble, here are the binaries.

Just the main ones (mke2fs, resize2fs, tune2fs, fsck): tar.xz 630K or zip 1.5M
Everything tar.xz 1.6M or zip 5.8M

by mgorven at 25 November 2013 04:58 AM