Life goes on: Day 51

Life imitates art, as they say, and Groundhog Day is probably the movie that life most represents right now. Life has collapsed to this house, and our street, and while it’s not just me that’s stuck in this time loop but the entire world. Routine has become destiny, and everything seems to be about structuring the day to make things as low-friction as possible. Kids are acting up during morning scrum calls? Move their TV time up an hour so it’s not ending when then call starts. Kids want to horseplay before bed? Don’t forget the afternoon bike ride to let them get it out of their system. Make a little progress on this project, do a little bit here. Pretty soon, ten thousand days will have passed and we’ll masters off the universe.

At the start of this lockdown, I thought I was going to be able to settle into some sort of rhythm between working and taking care of the kids, but deep work is proving impossible to come by; the sisters are fighting. Younger smacked her sister in the face with a doll yesterday, Elder has a mark under her eye now. The crying and whining and yelling pulls me out of whatever I’m trying to do and breaks my train of though. Even now, they’re in the other room. Elder is trying to get her sister to help with some task, and the only way her sister knows how to negotiate is by yelling back at her like some toddler Earl of Lemongrab. I can’t help wondering where they get it from, and fear I know the answer.

The DadPoint bribes have done little to help them focus on picking up after themselves. If anything it’s made me less high-strung about it. Yesterday was a bit much since I slept horribly and needed two naps just to get through the day. We’ll see if today is better. I’ve given them a goal to allow them to get a cat, which Missus and I have been talking about with them for many months, and Elder is very excited about it, although she seems to be more focused on the less routine tasks that I’ve set up for her; mopping the floor is still new enough that she’d rather do that then actually set the table.

Last night in bed, as I was reading about technological unemployment in The Future is Faster Than You Think, Missus remarked that we were so lucky to have chosen the fields that we’re in. “Everyone needs therapy at this point,” she said. I’m still not convinced that the current situation has been traumatic for the kids, any more so than average. We’re just lucky we have a large house with a backyard, and not holed up in some Italian apartment. I can only imagine what that’s like. I keep thinking about the bomb shelters of the Cold War era and thinking it amazing that people thought they were going to survive like that? Life goes on, I suppose.


Grades came in for my numerical methods class: A-. I got penalized because I couldn’t submit my solvers as single files; this was expected. I sent one last email to my professor to try and milk a bit more out of it, I’m not sure quite why, I suppose it was just to say goodbye. Perhaps I was looking for some kind of acknowledgement from him, after much of the extra work I did was ignored. Last night I wrote up a Docker guide for independent study. I have one or two more pages to write, guides for students and faculty on using GitLab for collaborative learning. Degree conferral day is Saturday, and then I will have my BSCS.

I’ve got two retainer clients now, and have a third to sign up. $250/month for two hours a week is not where I want to be in the long run; I’ll start charging more as we start making results. Maybe some project work will come. After I wrap on the schoolwork, I’ll put some more work on the CV site and get a resume posted, then start applying to jobs on LinkedIn and Monster.

Mother’s day is Sunday, and I haven’t bought gifts. I was going to get my mom a pair of socks with my brother and my faces on it — a gag gift — but I haven’t ordered it yet. I think I’ll go ahead and order them along with a copy of Drawing on the Right Side of the Brain. I think I’ve seen her do everything related to art: craft painting, stained glass, now felting, but I think drawing is about the only thing I haven’t seen her do. My wife, on the other hand, just wants a clean house and sleep.

The Simple Path To Wealth, by JL Collins

This book has been highly recommended by the FIRE community, and my wife wanted to read it, so I got it for her birthday. I picked it up Sunday morning and read through most of its hundred and fifty or so pages in under two hours, so here’s a bit of what I took away.

A good portion of the book reiterates the benefits of having financial independence, or F-you money, and relates Collins’s personal history getting there. This book, which originated as advice to his daughter, who didn’t want to have to time working about making her money work for her, basically boils down to a few simple pieces of advice: keep your spending low, keep your savings rate high, and throw everything into a low-fee, broad market index fund. The market has always gone up, and always will, he advises, and claims that his strategy is fool-proof over the long run.

And for people that can stick to the plan, it likely is. I’ll not argue against the merits of aiming for financial independence, nor the fact that aggressive savings with no debt will get one there fast.

I had a few quibbles reading the book, which likely stem from my own bias. I realize that my financial situation right now gives me no authority to argue with Collin’s assumptions, and I lack the personal data to prove things otherwise. If I had been more vigilant with record keeping over the years I could compute my own personal returns over the past twenty years. A quick look at my IRA’s total balance from January 2017 to today (up one hundred percent) versus the VTI during that period, up about fourteen, looks good to me, but there’s rollovers and contributions to factor in that make a direct comparison useless. Anyways, the book isn’t intended for someone like me, that likes spending time on financial investing and taking measured risks. It’s target for people that want the simple path.

Index funds, index funds, index funds: Collins says stock picking is a fools errand and recommends buying broad index funds, specifically Vangard’s total market index, the VTI. He spends a good deal of time on this, beating it into the reader over the course of the book. You’re not Warren Buffet, he says, and notes that the reason the Sage of Omaha and people like him are revered is because they’re so rare. He cites statistics on fund manager performance over the year, and shows that the only thing they’re good at doing is earning fees from their clients. He likewise disdains financial advisers, for similar reasons. Like stock picking, Collins thinks market timing is impossible. He notes that doing so successfully requires being right twice.

As noted, I’m heavily biased against following this advice. It may be that I need a good knock on the head, and I might be a bit arrogant from getting lucky with some tech plays when I was younger. It may be that Bitcoin has corrupted my brain. I’m totally willing to examine my cognitive biases and try to prove myself wrong. Granted, I’ve lost money on some foolish trades over the years as well, but I think that I’ve also tempered my panic response, and don’t sell when things go south. That’s what stop limits and trailing stops are for! I didn’t panic sell when the Corona pandemic hit the markets, I had cashed out some of my larger positions when the market fell off a year ago, and started buying when things crashed and started rebounding.

And I’ve been buying bitcoin almost every week for the entire bear market. And I have a plan on when to start selling that, also. But enough about that.

The market always goes up: Collins makes a great point about upside risk here. Since he recommends buying the entire market, it makes a lot of sense. Bankrupt companies stock can only go to zero, but the upside on those that survive is unlimited. It’s a great point that can be adapted to lots of other things as well. Just a few days ago I told my wife that if a take a new job with a traditional firm, my upside is only going to be whatever my salary will be, but if I do some entrepreneurial advising for equity stakes, my upside is unlimited. And Jason Calacanis, like other angel investors, likes to point out that venture investing only requires you to be right three times out of a hundred. Two of them to pay for the other ninety-seven, and the last one to be your unicorn.

Having the discipline to do something like that is an entirely different story, and is neither easy nor simple. And it’s easy to piss on the concept of perpetual growth when it seems like we’re living through the fall of the Roman empire.

Other advice: Collins gets into a lot of tax strategy, and goes over the various savings and retirement account available here in the United States. And the idea of a Roth conversion ladder fascinates me. There’s a lot that I skimmed over quickly, like the section on bonds, and retirement withdrawal suggestions, that just didn’t interest or apply to me.

Do I recommend this book to others? Absolutely, especially if they’re just getting started on the FIRE journey. Will I be practicing it myself? Probably not. I’m too fascinated by cryptocurrency, DeFi, LendingClub and venture/entrepreneurial opportunities to just park my money in an index and let it ride. I may start thinking differently in the future, and I do need to go back and look at the opportunity cost of the investments that I’ve made over the years to know for sure.

For me, my simple path to wealth is via Bitcoin. The next two years will show whether it’s the wrong one or not.

Parent hacking: Chores with Rooster Money

One of the biggest challenges being home with the kids during “the Great Lockdown” is keeping them out of trouble and keeping them busy. It would be super easy to let them watch TV for eight hours a day, but I’m determined not to rely on that. Missus and I have very different outlooks on this, and it’s one of the ongoing sources of frustration in our marriage, along with what type of food we eat. “We both watched and ate garbage all the time,” she likes to remind me, “and we turned out fine.” While I’ll not argue about our shortcomings in that regard, I think the environment in which we grew up is much different from the one which our children are growing up in, and I think it calls for different rules.

At the risk of sounding like an old fogey, we grew up in the days when cable TV was just becoming prevalent, and video games were fairly primitive. There was no internet, no smartphones, and the battle for attention hadn’t reached the level of warfare that we have today, with cognitive neuroscientists being employed by tech firms to make apps more addictive. And we’ve learned a lot more about how the brains of children form, and how screen time can stunt emotional and cognitive growth. So I try to set limits.

Of course, enforcing those limits is another set of challenges. With the whining, complaining and temper tantrums that accompany them. Trying to maintain consistency, while making allowances for the carrot or the stick type of motivation, is a hard balance to pull off. It’s even harder when my spouse is often all to willing to just let them have it when she needs a break. We’re still working out the kinks.

We’re obviously very privileged to both be working from home. Since her job provides health insurance and provides her less freedom than mine, I’m primarily responsible for the kids meals and schedules during the day, while she’s locked in the office. I try to let the kids play on their own as long as they’re behaving, and try to make sure they get outside time, snacks, and some learning time in. Elder has daily school conferences and some homework, so I try to spend half an hour with Younger, doing alphabet flash cards or Khans Academy Kids before I let her watch PBS for an hour.

The kids are usually pretty good about getting themselves ready in the morning, getting dressed, brushing their teeth and eating breakfast. I don’t want them watching TV as soon as they wake up, so I’m making them wait till 8:30 and have an hour of free screen time. They can have a second hour in the late afternoon, to watch whatever show or play games on the computer.

One of my main peeves is the importance that screens seem to play in their lives. I get especially triggered when they throw tantrums when I ask them to stop a show, or when every day turns into a negotiation around how much they’re going to watch. It turns me into a tyrant.

Today I’m starting something different. I’ve been using the free version of the Rooster Money app for several months to track the kids’ allowances. They get a dollar times their age each week, split between save, spend and give buckets. Spend is (mostly) unrestricted, give is for spending on gifts for others, (we’re not charitable givers,) and save is reserved for treating themselves on their birthday or budgeting big-ticket items. This latter one we’re still figuring out. In addition to dollar allowances, Rooster also allows children to earn “points”, which it also considers a currency, so profiles can’t be mixed between both. Kids can earn automatically as a weekly allowance, or a parent can boost their accounts.

One thing I decided early on was that I was not going to tie chores to their allowance, or use it as a punishment. The whole goal around giving them an allowance was to teach them financial skills. Teaching them work ethic and how to contribute to the household is another thing entirely. Motivating them to do so has been hard. Everything has turned into a transaction for Elder. She keeps trying to demand some sort of reward or tit for tat when I ask her to do something. “I’ll do x if you let me do y,” she’ll say when I ask her to do something. I won’t have it. We fight all the time.

Missus has been having some luck getting them to do work with a “MomPoints” system. She wrote a few tasks up on the fridge’s dry erase, with MomPoint rewards and TV time. It worked great for a while, but it seems like the kids lost focus after a few weeks, and the dry erase has been overwritten. So, this morning, after weeks of delay, I finally implemented a DadPoints system. I upgraded our RoosterMoney account ($20 annually,) created a DadPoints account, and loaded up a bunch of chores. One DadPoint is redeemable for a minute of screen time, and I’m trying to maintain a four to one balance between the amount of time it takes to do the work and the reward. Things shouldn’t be that easy, should they?

It’s going to take a while to tune the tasks and the reward, and figure out the best way to implement this system. Rooster is a bit limited; tasks can be either daily, weekly, or monthly, and I don’t want to have to maintain individual lists for each kid. Getting them excited about helping with the kitchen, doing chores, or special projects that need to be done will prove priceless, and will help remove any ambiguity around what they should expect out of me.

We will see what kind of change this has. Hopefully it will be for the better.

May plans

This weekend we celebrated my wife’s birthday. Saturday night I grilled hot dogs and brats, made cheesy broccoli and rice. I also made dinner rolls from scratch, as well as a pan of brownies for the cake. We gave her presents and then she watched Marvel movies. Somehow, the kids suggested that we camp outside, so I wound up setting up the tent in the dark then tried to do some star gazing with them before telling them a story till they fell asleep.

It was really a beautiful night, very still. We could hear cars, bikes, and the occasional siren off in the distance, but there was no wind, and no insects making noise at all, just the occasional gust of wind. Missus came out at some point and crawled in the tent, the four of us all snug in our sleeping bags and blankets. It didn’t end too well. I didn’t fall asleep till the wee hours because of snoring, and the stillness. Then the baby woke up and her and Missus went inside cause sleeping on the ground was hurting her back. So I stayed out there and slept with Elder till some strange bird cry woke us both up and we went inside, around 5.

The girls also spent some time over at my mother in laws house Saturday morning. Just an hour or two. Was the time the girls went anywhere in six weeks, and will probably be the last for a while. MIL said she was going to a “party” Saturday night, so we’ll be staying away if she’s not going to at least try to isolate.

Sunday was mostly cleaning, and fighting with the kids over chores and television. I spent a few hours working on my independent project, putting a GitLab document together on Git, Markdown , LaTeX, and starting on something for CI/CD, which needs it’s own page. I’m finally done with my numerical methods class, after a bit of a disaster: the professor had originally posted that the exam would be due this Sunday at noon. I actually finished mine Friday night. I was checking my email Saturday and had an email from a classmate that the final was missing. So I checked Blackboard, and, yep, sure was. There were also several discussion board posts to the same. I should mention also that this was following an incident earlier this week where the professor seemed to have lost what was left of his class web page — probably a permissions issue or something, but the point is that he is completely helpless when it comes to dealing with things — great guy though. Anyways, since I had already turned my exam in, I was able to go under my grades and pull up the question. I still had the sample data files, so I posted them up on the Git repo that I had been working on for the class, and emailed it out to everyone, telling them not to panic.

Part of me wonders whether the whole thing was a setup, so that he could blame Blackboard and use it as an excuse to not grade the exams and just give us all a pass/fail on the course. We’ll see.

So I should be completely done with school in another day or two, another hour or two of writing guides on how to deploy static websites via CI/CD and some back in forth with my professor and I should be done. May 8th is supposed to be the day they award our degrees. I can’t believe it.

After talking to Missus yesterday, we both agree that I should stay with my current company as long as possible, since the work is mostly part time at this point, and is paying the bills. After I update my resume, I’m going to start applying for any job with a posted salary at least 130% of what I’m getting right now. I’m also going to make sure that I’m getting at least two hours a week for my two retainer clients, as well as the other FOSS or programming projects that I want to work on.

Now let’s see how May goes.

Phase transition from a zombie state

It’s a beautiful Saturday morning here. I’m bringing the girls over to their grandmothers later today, which will mean the first time the house has been free of the kids in six weeks. I don’t even know what my wife and I will do with ourselves.

I’ve got one more task to finish college, a how to guide for faculty and students on how to use GitLab for note sharing. Should take me a couple hours of writing, tops. Then I’m done. I already got my grade for the group project class, an A, and I turned in my assignments and exam for my numerical methods class last night. That project is definitely going on my resume/portfolio site, and will probably get a full write up at some point. The only problem with it is that it can’t compile in CodeBlocks, so I’ll probably get 50% on it. I may muck around later and see if I can get it to compile via GitLab. The professor is likely grading on a super steep curve, so I shouldn’t really worry about it. There’s no doubt that I’ll pass, the question is whether I get a C or an A. After all the work I did compiling class materials into the GitLab wiki, I’ll be disappointed with anything less than a A.

However it goes, I should wind up with at least a 3.5 GPA. Six years of classes, part time, while holding down a job, raising two kids, and running two political campaigns. I sure am proud of myself. Now if I could just bring myself to take one of these $80,000 year jobs that I see listed on LinkedIn. I’m going to finish updating my resume, put it up on the new CV site that I built, and start applying to anything with the salary disclosed. We’ll see who bites. Of course, there’s the $60,000 in student loans that I’ve got to deal with.

Ideally, I’d like to stay where I am, and use my spare time to work on open source and entrepreneurial projects. I want to get the GBTC Estimator upgraded to a GBTC trader, and see if there’s any income to be generated there. I’d like to complete the Safe.Trade integration into CCXT. I’ve got the medical transportation company that I want to build a Django app for, and I’ve got another opportunity with a new friend who is very entrepreneurial. Other than that, I just plan on crawling the boards on AngelList and other local startup boards to see where I can join on as technical adviser.

Of course, all that goes out the door if I lose my job. I’m not sure how bad the situation is at work, since my boss doesn’t share anything other than “we need money”, and we haven’t brought on a new client in close to a year. We had a discussion about taking on software development work, but all I got was push back. He tells the team to “go out and sell”, and we’re all like “mhmmm”, but that’s all it amounts to. I’d just rather he furlough us all at this point.

I’d rather not turn this post into an obit for the company, but it’s been a zombie for some time. It’s like we’ve got just enough clientele to keep things from sinking completely, but not enough to grow. Which means of course, that it’s going to die, probably as soon as I leave. I told my boss that I wouldn’t abandon him after graduation, but I’ve been trying to lead and direct the company to where we need to be, and have been ignored too many times.

We currently have a client in the service industry which relies a lot on manual paper processes and third party vendors to manage their work order and invoices. I consulted them nine months or so ago about migrating their workflows to Microsoft Forms, Flow, and SharePoint Online. There was a lot of excitement and head-nodding, but nothing has come from it. Instead, one of their employees has been learning Django and building a pricing calculator. I got mad respect for them, and have been shooting the breeze with him about, making recommendations and the like. Now, however, it’s getting to the point where they’re asking questions about how to deploy this app, and I’m at a limit as to what I can do in a non-professional capacity. We decided to table discussions till next week.

One of the problems that I’m running into is around making this phase transition from one career to another. The crux of the problem is related to the difference between understanding something from a theoretical standpoint to actually having done that thing. Past performance, if you will. I ran into a concrete example of this the other day. We, Zombie, Inc., that is, had an opportunity with a prospect that needed a website update. They were using WordPress, and we identified a potential vulnerability via a web scan. The site template was very rough, and needed to be brought up to a more current aesthetic. The problem was that while I have plenty of experience managing WP sites, I have no portfolio of sites that I’ve built. And Zombie has zero performance that they can point to. So of course, nothing has come from it.

It seems the cure for this problem is just to do stuff for free, and then try to recoup payment for it on the back end. I think Tim Ferriss has an example from his life, back in the 90’s, where he would find businesses without an online presence, build pages for them and then approach them afterward to try and sell it. There’s similar examples, but they all depend on having the time to do the work up front.

That’s basically where I find myself right now. The “clients” that I have right now are little more than experiments to see if I can make a decent side hustle doing site management and consulting work. Monday, after I have put the final nail in my undergraduate degree, I will contact Zombie’s client and craft some sort of consulting deal that will benefit all three of us.

Morning pages: Day 44

After hitting ‘post’ yesterday, BTC proceeded to rip everyone’s faces off, ending up something like seventeen percent on the day. I must have gone to bed at one thirty this morning, drinking sake and watching it blast up to 9200 before going to bed. It’s retraced slightly since then, but my, yesterday was glorious. My equities portfolio is back to where it was in early February, before the COVID panic set in.

And speaking of everyone’s favorite coronavirus: cases in our state continue to rise. It’s probably more indicative of testing availability than anything. Since the Governor is using a 14-day decline in cases as an indicator before relaxing social distancing guidelines, we’re likely going to be shut down for a while more. The curve hasn’t even flattened.

Source: bing.com/covid

My final is coming along. I was able to implement my LU Factorization solver, and am working on Gauss-Sidel, Jacobi and SOR solvers. Besides that, the test is all questions on GMRES, based on which I’m not even really sure my professor understands. I have until noon Sunday, so things are looking good.

I’m going to publish my new professional web page today. The portfolio stuff isn’t done yet, and I want to add more job history and projects to it later, but I want to post it on LinkedIn and see if anyone else wants to hire to make one.


Via @doctorow: 68 Bits of Unsolicited Advice from Kevin Kelly. There’s some wonderful gems in here. I can’t wait to share it with the girls. I will try reading it out loud with Elder. There’s some great professional, financial, and parenting advice in here. Kelly is a great thinker. I really should spend more time reading his blog. One of the bits: “don’t be the best, be the only”, made me think of something that I picked up recently: get good at something, master anything. Becoming really good at something will open the doors to more opportunities. I really hope I can instill this in my children.

We’ve been relaxing the home-school work the past week or so. We got Elder’s most recent report card, and even though they have another six weeks or so till the end of the school year, it seems that her teacher has only been reading Harry Potter to them. She had to cancel yesterday, and I told Elder to spend some time on Khans Academy. I showed her the other courses that they had on there, and she wanted to look at the Art History course. She though it was art training, and was a bit disappointed. I remembered that I had a copy of Drawing on the Right Side of the Brain saved in a cache of books I downloaded some time ago, and started going over it with her. I’m thinking about heading out to the store to pick up some of the recommended supplies, but it’s probably best to make her go through a few of them first to see how serious she is. She’s also been asking for a sewing machine, which is interesting.

Finally, my wife’s birthday is next week. I ordered some stuff weeks ago, and let Elder order some more things off Amazon that came in earlier this week. I guess we will be baking a cake soon.

BTC/GBTC arbitrage

There are certainly worse things to wake up to:

Bitcoin blowing through $8K this morning.

Cryptotwitter has been full of anticipation the past few days. The bitcoin halving is just days away, and people are going mad with predictions on how price action will go. Is the halving priced in? Will there be a post-halving dump? Will less-efficient miners get priced out of the market?

On top of that, QE actions by the fed (money printer go BRR) has everyone convinced that $100,000 BTC is not just possible, but is very probable at this point. Some are predicting it before the end of the year, with others on a more conservative projection between now and the next halving.

Personally, I’ve been watching this upward channel curve for about two weeks now.

There’s a couple of important trend lines here to note. We’ve just breached the mega-dump that took place March 12. I’ll be looking to see if we breach the upward channel and test the next resistance at 9200. The green and red lines running up from the left is the multi-year trend line from August 2016. Getting back above this would be very significant, and would indicate that BTC has fully recovered from the COVID panic. This trendline intersects the higher curve on May 31st.

The news feed in Trading View is already full of coverage about this event; most of CT hasn’t woken up yet I’m guessing. Taking a look at arbitrage opportunities for trading with GBTC shows a couple opportunities. The GBTC estimator shows a price of $8.86, there’s been some pre-market activity at 8.75, which would have been a maximum of $111 in potential profit. It looks like most of this would have been taken by fees, as there were several orders for 200-300 shares.

Now that the timkpaine/TDAmeritrade project is moving forward with websockets, I’ll be adding additional functionality to my estimator. Right now it only pulls yesterday’s equity data and crypto markets via a REST call. With websockets, the program will be able to monitor price action, and take action on any deviations as they occur. This may take me a while, since we still need to develop the TDA functionality, integrate the new CCXT library, and figure out how to do asyncio calls properly. The opportunity here isn’t huge, but will make a good demonstration of my coding abilities. And if we make $20-100 day on moves like these, then that’s a bonus, right?

Nothing punny today: Quarantine day 42

So we’ve begun week six. Writing has proved difficult recently, as I’ve been getting up roughly the same time as the girls and have been unable to focus on writing until later in the day, after my day seems to have filled up with tasks. Saturday marked the first real bit of restlessness I’ve felt since we started the lockdown, a bit of ennui and listlessness about what to do.

We’ve rearranged the room over the garage. My wife’s desk is setup and she’s able to telework. I took one of my old workstations and set it up for Elder. I tried using Wine for the first time, but had trouble with some fonts and wound up wiping it an installing Windows 10. I’m hoping she’ll take interest in computer art or music production, but she’s mainly interested in playing Roblox. I gave her a free pass yesterday and asked her what she wanted to learn about. She said “music”, so I threw on a YouTube video lesson for children.

She’s been accepted by the gifted program and will be going to the city’s gifted center for third grade. Her teacher called me Sunday to ask if I would be interested in letting her be part of a small group in the class that would be doing more advanced math, and of course I said yes. I’ve managed to get her to do piano without too much fuss, but I haven’t pushed too much. I can’t say for sure, but it seems that there’s been fewer tantrums.

We’ve discovered Amazon Music and that it has Trolls and Disney music, so the girls have been playing that a lot.


I’m in the midst of my final exam for my numerical methods class, and have been getting my solvers working. Right now the Gaussian elimination is the only one working, and I’ve got 3 more days to get the others working. The professor wants us to generate surface plots in Excel, of all things, and to turn those in for our answers. Since all the solvers are supposed to return the same results, I could just turn in the answers I’ve generated thus far, but I still need to turn the solvers in for assignment credit. The problem here is that I’ve built a large build and test suite in CLion, and my professor just wants a single CPP file that he can run in CodeBlocks. I’ve painted myself into a corner, but I’m not concerned with grades since I think the professor is going to grade on a massive curve.

One of the graduation requirements is financial aid counseling, and I got the first look at my student aid totals in a long time: over fifty-seven thousand dollars. There seems to be some discrepancies that I’ll need to review, but this is obviously a lot more than I was expecting. I hurt myself by taking cash payouts for personal expenses. These went to pay credit cards, and quite a bit to bitcoin. I’ve already accrued five grand in interest charges. It puts my post-graduation plans in a bit more context. The status quo will not hold.

I’ve got until next year before I’m expected to start paying these loans back, but the interest is well over four percent, so the first thing I’ll be looking to do is refinance.

I’ve decided that I need a proper professional presence online, so I’ve registered a few domains and started setting up a new CV site. This blog will remain separate for now, but I’ve started reposting some articles on Medium, and will be linking to my Github repo on it. I’ll worry about the ramifications of a recruiter seeing my Tweets and blog posts later. For now, the only thing that comes up when you Google my real name is my political work, so I’ve got to work on changing that.

I’ve also started trying to use LinkedIn more. There are a lot of jobs for software developers and engineers lately. About twenty new ones a day. I’m not saying I can take my pick, but there’s been about one or two each time I look that I’d be interested in. Not that I would necessarily be qualified for, but once I get through my exam and independent study requirements, I’ll be finishing up my resume and applying to some. Not that I really have any desire to work for another firm full time, but I doubt I would turn down an eighty thousand dollar a year position right now.

Or would I?

Underpromise, but overdeliver

Yesterday we gave the final demo of our two-semester professional workforce development project. It did not go well. We had fifty minutes to present, but our demo only took about five. One of the professors, who had been receptive of our pitch last semester, was very disappointed. We basically failed to deliver. I was defensive, and tried not to make excuses cause she was totally correct.

During the last few weeks of this semester, we were more focused on what was right in front of us than on the big picture that we had promised last semester. And by that I mean technical issues. As system architect I was more focused on getting the architectural components up and running than I was on whatever particular use case this person was expecting to see. So in that sense, yes, we failed.

There were a number of roadblocks that we had to overcome. Our team was made up of six members, two of which were complete dead weight. Another member had issues with her local development machine and was unable to contribute directly to the source code. This was fine, as this was a writing intensive course and there were several written deliverables, including specifications and testing plans. So we basically split the work: I lead the technical development and contributed to the written work as needed, but pretty much left management of the final written work to others on the team.

We relied heavily on Cookiecutter Django for our base deployment. In the long run, this was probably the way to go versus using vanilla Django, or another framework like Flask, but it hurt us in the short term. No one on the team besides myself was familiar with it, although I don’t think we could have avoided that with another solution. We wound up spending an inordinate amount of time trying to get the others on the team up to speed on deploying it via Docker and managing that through various IDEs. I spent a lot of time mentoring the two teammates who were assisting with actual code commits. And it had been so long since I had worked on Django that I had to relearn its model-view-template architecture all over again.

And this is where using Cookiecutter really slowed us down. The package implements several best practices on top of Django: overriding the default user model, implementing updated authentication forms, even deploying a Traefik load balancer on top of the production web server. All of these slowed us down.

In all, we spent less than forty five days doing actual development work on the project. That was following more than thirty days trying to get the framework up and running between local and production environments. The semester was actually focused more on the written deliverables and put off actual development work till the last half of the semester. In retrospect, holding to this schedule was a mistake, and it was probably a bit of hubris on my part not to start work a bit earlier.

We got an email from our instructor this morning:

“From a development (i.e., architecture, tool, collaboration, and project) standpoint your team has met all the requirements for the course. While your demo was less “interface oriented” than the other groups the evaluators referenced, the foundation of your prototype is more substantial. It was clear to me that there was a bias during the evaluation based on discussions that occurred […] last semester. Keep in mind that I have been equally critical of groups in the past (albeit in a less heavy-handed fashion). Your group as a whole should not worry about failing the course.”

So maybe I’ve been a little hard on myself, but I think it more likely that they were as much invested in our project as we were. Obviously there’s some University politics at play there.

So the question is, what comes next? We had hoped to pursue a grant to continue working on this project on behalf of the university post-graduation, but given the tepid response from the skeptical evaluator, I don’t see that as forthcoming without many additional changes. I’ve broached the subject with my other teammates, and I’m not sure there’s any desire to continue forward with that. Maybe after the semester is over. I still have two more classes to complete, and others have a full case load. At least one of them has taken a job, so it may just come down to me and one other person.

All in all, I know the experience was a positive one for me. I know that learning GitLab, Docker and Django for app deployment will come in handy in future projects. And we’ll just have to see if any of the relationships with the team members will last past this semester. Any decision about the future of our project will be on hold for now.

Ternia Blockcard: pre-paid crypto credit card

The Devil’s in the details: fees, murky exchange rates and other issues mar what should be a promising crypto to fiat instrument

This sponsored tweet has been coming up in my feed a lot:

I’ve been very interested in crypto-backed credit cards for some time now, (remember TenX, anyone?) and thought I would take a deeper look at this. And since my wife and I are no longer that interested in hacking frequent flyer miles, I’m very interested in something that advertises six percent back in rewards. So I signed up for a BlockCard account and did some testing with it. Let’s just say there’s a couple hiccups with it.

The Blockcard is basically a pre-paid Visa card. You can deposit funds from 13 different tokens including BTC, ETH, LTC, and others, and while they say you can “stay in crypto” until you need to spend your funds, all deposits are converted to the Ternio utility token, TERN, upon deposit. What is TERN, you ask? That’s what I wondered as well, so I took a look at the whitepaper.

Ternio background

The paper, published sometime prior to the TERN token sale in April of 2018, describes it as “built to transform and ultimately disrupt the $224 billion per year digital advertising approach.” Basically, they’re building a platform to connect advertisers, publishers and users, providing scalability, auditing, and payments. Of course, TERN tokens are used for the payments, and must be front-loaded to participants accounts. According to the whitepaper, Ternio relies on an internal blockchain called Lexicon, a modified version of IBM’s Hyperledger protocol, and the public token, TERN, on the Stellar network. Lexicon purportedly runs over a million transactions a second, and was accepted by Amazon as an AWS Advanced Technology Partner a little over a year ago.

The rest of the whitepaper describes the projected use case for the Ternio netowork, token sale and airdrop and social bounty program. The BlockCard is also described. That said, the Ternio team seems to have dropped their focus on advertising, and now seem to be focused primarily on building a payment network and driving adoption of the BlockCard.

Using the BlockCard

The Fees

I signed up for an account a few days ago and was immediately struck by the fee disclosure. First off there’s a $5 monthly “subscription” fee if you don’t spend at least $750/ month. Deposits, withdrawals, and point of sale (swipe) transactions are free, but using the card as a debit, with a PIN transaction, will cost you, as will any ATM cash transactions, even declined withdrawals. They also charge ten dollars for a physical card, or you can get a metal one for fifty.

Source: BlockCard FAQ page.

To BlockCard’s credit, they claim that theses fees are required by their banking partners.

Conversion confusion

I needed to load at least ten dollars on the card to make it usable, so I sent eleven dollars of BTC over from Ethos wallet when I ran into what seems to be BlockCard’s biggest problem. BlockCard undervalued my deposit. I was surprised when the transaction completed and my card only had a total balance of $9.37. The transaction history actually showed the value at a more reasonable $10.71, but it still showed an inexplicable deposit amount of 1.52 BTC (I wish!) instead of the actual 0.00156. This still left me with sixty cents under the ten dollar threshold, so I went ahead and sent a transaction in ETH. There seemed to be less lost on the conversion, $9.98 sent versus $9.85 deposited.

In total, I deposited $20.99 cents to my account (not including on-chain transaction fees), after which my account showed a $17.99. This was quite concerning, but after a few more minutes the balance updated to show $20.56. Less dramatic, perhaps, but still a problem if one is expected to spend $750 a month on the card. That’s a lot of slippage, likely more than a $5 monthly membership charge. On top of all this, the UI for the website seems to be extremely slow to update the conversion. I noticed several times when I logged in and the balance didn’t update for almost fifteen minutes.

A few days after my initial deposit and my balance flipped back to eighteen. I’m not sure if this is the buggy UI or just fluctuation in the price of TERN. The FAQ indicates that the value of TERN is pegged against the USDD stablecoin and is “tied to TERN on the BlockCard ecosystem”, independent of trading on any other exchanges. “As users deposit on BlockCard, the value of TERN increases.  As people spend, the value decreases. TERN is never issued at less than $0.008”

This is all very problematic from a transparency standpoint and seems very ripe for abuse, especially since their use agreement allow up to 36 hours for deposits to clear. Without any clear exchange rates as part of the deposit process, users are basically at the mercy of BlockCard to treat them fairly. With no clear indication of the TERN/USDD price, users are left to do the math to make sure they’re not getting ripped off. Even by my own calculations, my current balance is being valued at 0.0069.

17.699 / 2570.33 = 0.006999, an immediate loss of 14% value on deposit.

So does this mean that incoming transactions are converted to TERN at the 0.008 exchange rate, but then immediately lose value upon being credited to a user’s account? If this is accurate, it seems like a very bad deal for users.

Rewards?

The marketing for BlockCard touts the six percent rewards on spending. While on the surface, this seems like a deal, until you find out that these reward levels depend on staking TERN.

Source: BlockCard Rewards Page

At the base rate of $0.008 TERN/USDD, that’s a minimum of $240 worth of TERN for the bottom tier, and almost twelve hundred dollars required for the top. Granted, one might be able to cut that quite a bit if one is able to acquire TERN at a discount on a exchange, but given the hype that BlockCard is putting on the rewards aspect of their card, it’s disingenuous not to mention the staking requirements on their marketing.

The main exchange market for TERN is BitMart, ranked 24th on CoinMarketCap and based out of the Caymans. Source: BitMart, Apr 22, 15:34EST

Conclusion

There’s other issues with BlockCard as well that are worth mentioning. For one, I’ve been unable to use the card since I don’t have the option to complete KYC on my account. I’m guessing I have to request a physical card to do that, but I’m hesitant to do so since it’ll cost me ten dollars. I’ll likely reach out to BlockCard for confirmation on this, and just to be fair I’ll give BlockCard’s CEO Ian Kane a chance to respond to this article and address any inaccuracies.

The last issue is related to taxes. Sending depositing crypto to your BlockCard account and automatically converting it to TERN qualifies as a taxable event. Spending the funds on the card does as well. Kane said in a tweet that they plan on adding CSV export for transactions, but for now users will have to copy and paste the details manually.

Finally, I want to be clear that this post is not just meant to be a complete dump on the work that Kane and the BlockCard team have done. They’ve done well so far to put together this link between cryptocurrency and traditional payments system. While I’ve yet to use BlockCard for a payment, it does seem to be one of the fastest ways to spend crypto to fiat. My concerns are mainly with the execution of the crypto components of the system. Using TERN as an intermediary currency, without clear indications of how either deposit or balance calculations are converted, is especially troublesome. And the prospects of their so-called rewards system is completely offset by the staking risk, which is again compounded with the lack of transparency in the exchange value.

For now, I’m going to hold off further judgement on BlockCard until they’ve had a chance to respond.