Again, Amazon?

I’ve written of several problems I’ve had with Amazon. The one that still takes the cake is when I ordered the Shrek collection on Blu-Ray and received empty Blu-Ray cases.

This time around, I recently ordered several things from Amazon as part of the 10Gb home network upgrade project. Included in that order were two Nanoxia Deep Silence 120mm fans. I received only one. So I sent this message to Amazon through their customer service:

The order specifies 2 of the items selected, however I received only 1. Please alleviate the deficiency by shipping the missing item. As none of the automated return options allow me to request you send the missing item, since they all assume I’m returning something I actually received, I’m notifying through e-mail. Again please send the missing item.

Thank you.




10 gigabit (10Gb) home network – Part II

Before continuing, first a few notes on the previous iteration.

Firmware. FreeNAS’s driver for the Chelsio card complained about the firmware version. The card I received had the 7.07 firmware installed while the latest is 7.11, and the driver wanted the latest. It was in a security output e-mail. Upgrading the firmware was pretty straightforward, though. The instructions are the same as on Linux, and the tools come with FreeNAS/FreeBSD.

But something to keep in mind if you decide to buy 10Gb cards to create a 10Gb network: you may need to upgrade firmwares. The Mellanox cards all had the latest firmwares.

Active cooling. On the Mellanox MNPA19-XTR, the mounting holes for the single-port ConnectX-2 are 34mm apart, and the heatsink is 45mm by 35mm. I don’t know of a heatsink that will fit this, but if you can attach a 30 or 35mm fan, you’ll likely be fine. The 34mm distance may be enough to attach a 25mm fan diagonally.

On the dual-port Mellanox card I received (PN: 81Y1541), the heatsink is 40mm square and the mounting holes about 47mm apart.

Not for two systems. This is something that should be very obvious from the outset: this project is not for just connecting two systems together. This project is for connecting multiple systems together onto a 10GbE network.

This is also for small setups — four to six 10GbE connections. If you need more than that, you should really be looking at off-the-shelf 10GbE switches, such as the Netgear ProSAFE XS708Ev2 (10GbE Cat6a RJ45) or Dell X4012 (10GbE SFP+).

System requirements and costs

Since the network cards can be had for pretty cheap — under 20 USD for the single-port, under 40 for the dual-port SFP+ cards — you might be tempted to find other ways of keeping costs low. And on this, the used and refurbished hardware market can be your friend. Mostly. You just need to know what to find.

PCI-Express. This is where you need to pay attention. At minimum you’ll need a mainboard that supports PCI-E 2.0. Slot configuration requires your attention here.

Every dual-port 10GbE card will require a x8 slot. Any single-port cards in the mix may be able to get away with a 2.0×4 slot depending on the card. So look for a mainboard that can provide the PCI-E slot configuration you’ll require.

On the Intel platform, you’ll need to pay attention to the processor you select to ensure you get an adequate lane count. Most Intel processors support at most 16 lanes. A PEX chip won’t help much in this. To get more lanes, you’ll need either an “extreme” processor, such as the i7-3930k (40 lanes), or a Xeon, possibly even a dual-Xeon depending on generation.

Core count. You will need at least a quad-core processor for this. Beyond that you’ll want at least 1 core per SFP+ port.

The reason for this IRQ Affinity. In brief, every hardware event that occurs on your system is processed via a hardware “interrupt”. Affinity determines what core processes that interrupt via the Advanced Programmable Interrupt Controller (APIC). More physical cores = more interrupts that can be processed in parallel = better throughput on your switch.

AMD or Intel? Whether you go AMD or Intel is entirely up to you. While Intel processors do tend to out-perform AMD processors, it won’t provide you much benefit here. As noted above, PCI-E lane count will matter more.

And this is where AMD wins out, in my opinion, since the lane count isn’t tied to the processor. On that, however, I can really only recommend the 990FX chipset.

The 990FX chipset provides 42 lanes, typically as 2×16, 1×4 or 2×4, and 2×1, allowing two dual-port cards and maybe one or two single-port depending on model. Some 990FX mainboards have a better lane spread, providing 1×16 and 2×8, allowing up to three dual-port cards while still retaining the 2×4 slots as well. Only one 990FX mainboard I’m aware of provided for 4×8 slots: Gigabyte GA-990FXA-UD7.

Which four or six 10GbE ports should be more than enough for most setups. Again, if you need more than that, you should really be looking at an off-the-shelf 10GbE switch.

Operating system

I considered two operating systems for this: VyOS and Fedora 24 Server.

Note on VyOS and installing from USB: you need to make sure to write the ISO image to disk using DD mode or it won’t boot. And when booting off the USB stick, make sure it is plugged into a USB 2.0 connection. It will fail to boot if you try to boot from a USB 3.0.

It’s pretty easy to create a switch with VyOS as well. Their configuration options are relatively straightforward. And using the video I embedded in the earlier section as a guide had a switch working relatively quickly.

But you may want to consider going with an off-the-shelf Linux distribution instead. Why? Driver support.

For Chelsio cards this isn’t nearly as huge a deal. The latest Chelsio drivers for the T3 chipset (which includes the S320 in my NAS) were released in 2010. But for the Mellanox ConnectX-2, I recommend you consider against using VyOS.

VyOS 1.1.7 is built from Debian 6 “Squeeze”, which was initially released in 2011, the latest version released in 2014, and went out of long-term support in February 2016. The latest Debian is 8.6, which is what VyOS 1.2 will be based on.

The oldest Debian version supported by the Mellanox EN driver, as of the time I write this, is Debian 7.6. The Mellanox driver supports the latest or nearly latest available version for

  • SuSE Linux Enterprise Server (SLES)
  • Oracle Linux (OL)
  • Fedora
  • CentOS
  • RedHat Enterprise (RHEL)
  • Ubuntu

So if you are using Mellanox cards, which seems to be the brand most widely available, consider using an off-the-shelf Linux distribution to build your switch. Just make sure to install it using a minimal install since you don’t need really much of anything for this.

For this setup, I’ll be using Fedora 24. Fedora 25 is the latest version as of when I write this, but Mellanox has not yet released a driver installer that supports it as of the time this article went live. When installing the driver on a kernel the installer doesn’t readily support, you will be walked through rebuilding the driver for your kernel version — what packages to install, what command line options to include, etc.

First test

Before building the switch I intend to use, I wanted a proof of concept. At the same time this was going on, I was also buying parts to build two systems for a lesbian couple I know, so I had a system set up on a test bench near the NAS and virtualization server with these specifications:

  • AMD Athlon X4 860k (stock speed)
  • Gigabyte GA-F2A88X-D3HP
  • 4GB Corsair Vengeance DDR3

Since this was already on a test bed, I just used it to drop in the 10GbE card and work out any gotchas. As mentioned above, the OS I used is Fedora 24 Server.

Creating the switch is relatively straightforward. One line to create the bridge, and two additional lines per interface you’ll include into it, as this script demonstrates:

ifconfig enp3s0
ifconfig enp1s0
ifconfig enp1s0d1

nmcli connection add ifname zone1bridge type bridge con-name zone1bridge
nmcli connection add type bridge-slave ifname enp1s0 master zone1bridge
nmcli connection add type bridge-slave ifname enp1s0d1 master zone1bridge
nmcli connection add type bridge-slave ifname enp3s0 master zone1bridge

Setting the IPs on the interfaces to throws them into promiscuous mode. This is needed for the bridged interfaces to act as a switch. Additionally I also disabled the firewall. Then I turned my attention to the NAS.

In FreeNAS, I disabled DHCP on the onboard Gigabit connection and assigned it a temporary static IP. Then I added the 10Gb connection and enabled DHCP for it. Once it had an IP address from the router, I removed the Gigabit NIC from FreeNAS’s list of interfaces, unplugged the NAS’s Ethernet cable, then rebooted the system to refresh all of its networking-related caches and settings.

DNS picked up the NAS across its 10Gb connection, and I was able to ping it successfully from my desktop and the switch. So with that, I ran iperf between the switch and NAS to get an initial bandwidth report:


9.39 Gbits/sec = 1.17 Gigabytes/sec. That’s about as good as it’s going to get. The Linux ping utility gives about .065ms (about 65μs) for the round-trip time between the NAS and switch, which is an ultra-low latency and what I’d expect from optical fiber.

So this tells me that, at least between the switch and the NAS, everything is working clean. Time to move on to the actual hardware I’ll be using.

Second test

The second test was a similar bench test setup with what will likely be the final hardware for the switch:

  • CPU: AMD FX-8320E
  • Mainboard: ASRock 990FX Extreme6
  • Memory: 4GB Corsair Vengeance DDR3

And this is with a clean install of Fedora 24 Server — Minimal Install with with the Mellanox drivers installed, using the instructions above to create the bridge. There isn’t anything more that you really need to do for this either, not unless you’re anal about getting the max throughput possible for this setup, squeezing every last Mbit/sec out of it.

In this setup I also had the virtualization server plugged into the switch along with the NAS. For VMWare ESXi, it will not automatically grab an IP address via DHCP for the new adapter unless you specifically tell it to do so through the console interface.

For performance testing I ran iperf from two machines separately, both talking to the switch. One connection from a Linux VM on the virtualization server, the other from the NAS.


The VM was not able to saturate the connection as well as the NAS, but that was expected given the way VMWare ESXi tries to handle networking via a virtual switch. The NAS saturated its 10Gb connection — again, about 9.38Gbits/sec is likely as good as that’s going to get.

For another test, I installed the second 10Gb NIC. Both x16 slots on the mainboard had the 10Gb NICs and the x4 slot had the graphics card. I connected the NAS to the single-port card, added it into the bridge, then rebooted the switch so the network changes would take.

I was looking for any indication of a performance degradation sending data between the NICs across the PCI-Express bus.


As you can see above, I ran three tests just to be sure. The PCI-Express bus on the 990FX chipset is not a bottleneck between the NICs.

Now I just need to finalize the setup. I’m not settled yet on whether this will go into a 2U or 4U chassis, though it’ll likely be the latter to allow for a full-size power supply and quiet 120mm fans for cooling while avoiding having to find low-profile brackets for the NICs.

So the next part will be finalizing the Zone 1 switch and figuring out what I need for the Zone 2 switch.


Teaching men to not rape

This is a response I gave on Facebook to someone who said

Can’t we teach men not to rape at the same time as teaching women how to defend themselves? Oh wait…no. That’s asking too much.

So you’re willing to presume that all men are rapists or rapists in waiting? Just as all gun owners are killers, or killers in waiting?

That’s the problem with the concept. The vast majority of men largely will not rape women and do not want to rape women. Just as the vast majority of gun owners do not want to kill anyone and will not kill anyone.

This presumption is the problem. The presumption that someone who is not taught to not do something bad will invariably do that bad thing. That we have to teach gun owners to not kill or they will kill. That gun owners are out to buy weapons to kill others. I’ve said before that the rhetoric of the anti-gunner is such that they might as well walk up to someone filling out the ATF 4473 form and ask “Who are you planning to kill?”

The same with the “teach men to not rape” crowd. It presumes that all men are rapists until they’ve been taught to not be. That we have to teach men to not rape or they will rape. Forget the fact that most men won’t rape. And that the only reason many women think men will is because they keep narrowing the definition of consent to have more control over men because we will largely do what we can to avoid raping a woman.

Especially since the mere allegation of rape can destroy a man’s life. That alone means you don’t need to teach men to not rape. You just need to account for the ones for whom even teaching them to not rape, presuming such a thing is possible, won’t do any good.


Smokers can never be considerate

Let’s see, where to begin — and this is coming from someone who grew up around a smoker that quit 20 years ago this coming January:

1. The root word of “smoking” is SMOKE! The fact I need to go beyond that is asinine unto itself.

2. Smoke inhalation is the leading cause of death in house fires. Smoke kills. Cigarette smoke kills you slowly. This has been very, very well documented.

3. The risks of that smoke extend not just to the smoker, but to those in the smoker’s immediate vicinity. The risks of second-hand smoke are real.

4. The risks of smoking around children are real. Let me put a bit of perspective on this. My wife’s dear friend and her ex-husband, let’s call them Alice and Ralph, were smokers with a daughter who is now 11. My wife and I had actually been trying to pressure Alice and Ralph to quit smoking for YEARS without success. In part because Ralph was a hard-ass on it. Even when I offered, multiple times, to buy vape kits or nicotine gum or patches.

Alice eventually moved to vaping with her girlfriend Trixie. And this past May I bought Alice an upgraded vape kit (a more-expensive sub-Ω kit for additional flavor) and both Alice and Trixie a decent supply of juice. Because we were worried about not only the health toll smoking was taking on them, but especially on Alice and Ralph’s daughter — especially now that she’s trying to get into music.

Not to mention the fact that I absolutely hated when my wife came home after spending time up there, and why I refused to step foot into that house for longer than a brief period for the longest time.

Seriously the smell alone is noxious. This is why no matter how considerate you try to be, you can never be completely considerate. That smell permeates everything the smoke touches. Doesn’t matter if you smoke outside, that smoke still gets on you and your clothing, and that smell is noxious and easily picked up by anyone not used to it.

It’s why whenever my wife visited, she kept a spare set of clothing separate in her vehicle away where it wouldn’t get contaminated by that smell, that she changed into at her first stop on her way home. And why we kept the contaminated clothes tied up in a bag until they could be washed. Now that the smell is almost completely gone from that house, we don’t need to worry about it.

I can walk into that house without feeling like I’m going to suffocate.

5. Your right to smoke, frankly, ends when that smoke starts to negatively affect other people. And it always will. That is why the places where people can smoke have dwindled, and will continue to dwindle. I don’t like that it’s happening through laws rather than at the choice of business owners (though places that allow smokers were starting to die off before the laws were passed because non-smokers didn’t want to be exposed), but eventually smokers were going to lose out.

The dirty looks and condescension are because we know what you’re doing to your body by continuing to smoke. You are demonstrably harming your body, and creating risks for those around you, especially if you smoke at home around children. Not to mention the cost. Good god, the cost alone should be reason enough to push to try to quit.

It’s not about the smoker, but about the smoke. And if a smoker is going to get uptight or lippy with me about it, I’ll gladly give them a piece of my mind.


Misconstruing free speech – #TrumpCup

On November 18, a woman named Sam Montgomery posted this to Twitter:

And when others rightly claimed this is a violation of virtually every health code in existence in the US, she tried to counter by calling her actions “free speech” (including parent tweets to show conversation):

Later, this person claimed to have been fired from Starbucks, and she apparently received enough attention that a reporter contacted her via Twitter to ask about an on-camera interview.

The profile says that she’s “Co-author of Stats Canada: Satire On A National Scale”, meaning she might be a Canadian resident (so obviously not living in Kentucky). She claimed to have worked at the Starbucks in Lexington, KY. And Lexington has several more than just one Starbucks. So which location allegedly previously employed her?

Now the truthfulness of the account of events is not material for discussion. We can discuss the situation as if it is a hypothetical.

Freedom of speech doesn’t mean a right to injure someone else. The old adage is the right to swing your fist ends at someone else’s nose. And spitting in someone else’s cup, or adulterating or modifying their drink in any other fashion, is an injury to them. An example of which is spiking someone’s drink without their knowledge and consent.

Setting aside the risks of communicable illness, spitting on or at someone has never been treated as an exercise of speech, but always as an act of aggression. And any claim to freedom of speech ends when that person exercised aggression toward someone else.

But then there’s the claim of persecution for beliefs by being fired for threatening to spit in customers’ cups. Again, spitting is an act of aggression. So you cannot claim persecution for the consequences of threatening aggression on someone. Especially if what preceded the threat is a genuine act of speech — regardless of what you might think, #TrumpCup is an exercise of free speech.

Let’s say a minority individual were to threaten me in a public place to put me into the emergency room (or worse) for what I say publicly. And in response, I pull my legal concealed pistol in response, regardless of whether I open fire. The person who threatened me cannot then claim persecution, since a threat of aggression is not speech, and any threat of aggression can be met with a threat of reasonable aggression in return.

After all, the anti-Trump protesters arrested in Portland, OR, aren’t claiming to be political prisoners. And to claim as an act of free speech threatening to or actually spitting in someone’s #TrumpCup, and to then claim persecution when fired for threatening such on social media, would also mean the Portland protesters are political prisoners.

Violence makes any act of speech prima facie illegitimate. Violence is not speech. Threating to or actually spitting in someone’s #TrumpCup is not speech. Violent protesters cannot claim to be political prisoners. Firing someone for threatening to spit in someone’s cup is not persecution.


10 gigabit (10Gb) home network – Part I

Right now my home network is entirely Gigabit — minus any wireless devices or laptops that are using “Fast Ethernet” (i.e. 100 Mbps). And the time has come to take that further.

My Google Fiber connection is near Gigabit full-duplex. My home network is largely spliced off into two zones to keep from running everything on one circuit in my apartment.

Zone 1 is the living room. Living out there are the NAS and a virtualization server along with the router. Everything is connected to an 850W UPS. Zone 2 is the computer room. Absinthe and Mira plus the entertainment center are plugged into a Gigabit switch connected to the router via a long Cat5e cable.

The virtualization server is a refurbished HP Z600 I bought from It has two Xeon E5520 processors with a 500GB HDD that I intend to upgrade to an SSD eventually. I use VMWare ESXi 6.0 since it’s free and works quite well. One of the VMs is a Plex server that mounts to shared folders on the NAS.

So there’s a lot of competition on the Gigabit connection, essentially throttling everything. Including our Internet connection. (Yes, I can already hear the sarcastic cries of sympathy…) Upgrading the network’s backbone is the only way to alleviate that.

A simple solution would be buying two Gigabit switches that have 10Gb SFP+ uplinks and just connecting those together. And while that would alleviate some of the bottlenecking on the network, there are other reasons to go with 10Gb.

First, I want to upgrade Mira and Absinthe to use 10Gb as well. While Mira has 4TB of supplemental storage (4x1TB on a RAID 0), Absinthe doesn’t have anything extra. So upgrading to 10Gb will allow her to use the NAS as supplemental storage without being limited to just Gigabit. This will become even more so after I fill out the last of the HDD bays in the NAS.

But storage speed is the primary reason to go 10Gb. Mira and Absinthe both have Samsung 950 PRO NVMe SSDs. And the RAID 0 supplemental storage on Mira is also limited when copying things to and from the NAS. And the NAS itself is limited by its onboard Gigabit connections as well. So everything on the network has the potential to see massive improvements by jumping to 10Gb.

Custom switches

There’s really only one way to do this while still controlling cost: a custom switch.

Two zones in my network means two switches are planned. Zone 1’s switch will be happening first. This will provide a 10Gb connection between the NAS and virtualization servers while still exposing them to the rest of the network through a Gigabit connection to the router.

To that end, I’ve made an order through eBay for several 10GbE SFP+ cards:

The dual-port and one single-port Mellanox card will go into Zone 1’s switch. The onboard Gigabit connection plus 3x10Gb connections will be all that’s required. In the end, the Gigabit connection to the router will be the only connection to the router from the rest of the network.

The Chelsio S320 is for the NAS, which is running FreeNAS. Mellanox ConnectX-2 cards are not supported by FreeNAS, but the Chelsio S320 is supported since it has the Chelsio T3 chipset. If I was able to find a Chelsio S310 single-port card, I would’ve gone with that instead.

Now for cables. Virtually every 10Gb home networking tutorial I’ve seen online uses direct-attached, twin-axial SFP+ copper connections (10GSFP+Cu). In part I think ease is the reason. Direct-attached copper is easier to use since it’s like plugging in your standard RJ45 cables, just with big connectors on the end.

And it’s perfectly fine for short connections. Just bear in mind that passive 10GSFP+Cu is generally limited to 5m (a little over 16ft). Beyond that you need to use active cables, which are expensive, or optical fiber.

Which is what I’m using.

While the cost of optical fiber (10GBase-SR) is similar to passive 10GSFP+Cu at lesser lengths, optical fiber allows you to go beyond 5m without significant cost. And since I intend to connect two switches in two completely different rooms, 10GBase-SR is basically required for this to keep cost down.

While I could use 10GSFP+Cu for the connections in Zone 1, I can’t use it to connect Mira and Absinthe in Zone 2. The switch will be on the opposite side of the room from the computers, easily eating up the 5m length limit with little slack. So since I’ll have little choice but to use optical fiber for all 10Gb connections in Zone 2, and for connecting the Zone 1 and Zone 2 switches, I’m just going to use it for all 10Gb connections.

The transceivers linked above are just 16 USD each, and the two 1m cables were under 3 USD, giving a single 1m connection between two systems at just under 35 USD plus shipping. A Fiberstore representative also consulted with me to make sure I was ordering the right transceivers for my hardware before releasing the order for packing and shipping. I love that level of customer service. And she said the “generic” transceiver linked above is compatible with the Chelsio S320 and Mellanox ConnectX-2.

The cards were bought from three different sellers on eBay, shipped via three different couriers (one each via USPS, UPS, and FedEx), with three different scheduled delivery dates. The Fiberstore order shipped the day the Mellanox pair arrived. From China. Hence the 22 USD shipping charge.

So everything should arrive in time for the Thanksgiving long weekend.

First parts arrive

The pair of single-port Mellanox cards arrived first, and the Chelsio cards arrived the next day. I did a quick test on one of the cards to make sure they were detected without issue in a Windows 10 test system. And they got oddly warm while idling.


The Mellanox cards have passive heatsinks over their chips. While switching to active cooling would certainly help, provided I could find active cooling that would fit, I started with removing the heatsink. And I was not surprised by what I found: fractured thermal paste that barely stuck to the NIC chip. There was likely not much contact between the heatsink and chip.

Arctic MX-4 to the rescue!!! But the chip still got very hot even at idle. So active cooling is going to be a necessity, whether by placing a fan to blow onto the card or replacing its passive heatsink with active. I discovered a forum post that also mentioned the importance of cooling the SFP+ connector on the card, so something else to keep in mind.

So definitely keep in mind if you go this route that, since you’re buying surplus used NICs, you need to replace the thermal compound under any heatsinks and set up for active cooling. And make sure to use a good thermal compound like MX-4 or IC Diamond.

If you are considering replacing the passive heatsink with an active heatsink, I recommend the copper heatsinks by Enzotech. Just measure the mounting holes on your card to get one that will work.

The Chelsio card doesn’t have a removable heatsink on its main processor. Instead it’s attached with thermal glue, so don’t try to wrench it off. The seller also included two 10GBase-SR modules with my card: Finisar FTLX8571D3BCL.

Installing the cards into the NAS and virtualization machine were straightforward. Now it’s just a matter of waiting for everything else so I can build the switch and connect everything together.

That’s coming with the next part.


Post-election (willful) ignorance

Let’s start with these two:

  • “Will my marriage stay legal?”
  • “Will Roe v. Wade be overturned?”

Anyone who asks these questions obviously does not know how the Courts work. In the Supreme Court of the United States and virtually every other Court in the US (including State and local Courts) is a concept called stare decisis. This means “let the decision stand”. This concept goes by a different name of which most people are familiar: “precedent”.

While it would not be true to say that the Supreme Court has never reversed itself, it would also not be true to say it happens often. It is quite rare. And, in general, it requires presenting to the Court through a properly introduced case that the Court

  • had a demonstrable and/or egregious misinterpretation of standing law, precedent, or the Constitution (note the SCotUS is generally perceived to be the arbiter of its own precedent), or
  • has an unresolved conflict in is precedent history that is highlighted by a lower Court (see Ring v. Arizona, 538 US 584 (2000), for an example)

Not liking an outcome is not enough to get the Court to reverse itself.

Two cases come to mind where the Supreme Court has explicitly reversed itself: Brown v. Board of Education of Topeka, Kansas, and West Virginia Board of Education v. Barnette. In both cases, the Supreme Court was nullifying standing precedent in favor of a completely different ruling.

In the former, the Supreme Court, under Chief Justice Earl Warren, oversaw the beginning of the dismantling of state-sponsored and state-enforced mandatory segregation that had been upheld under the “separate but equal” doctrine of Plessy v. Ferguson. In the latter, the Supreme Court overturned a ruling (Minersville School District v. Gobitis) that upheld compelling student recitation of the pledge of allegiance.

I think we can all agree that the overruled cases were egregious interpretations of the Constitution.

Roe v. Wade has stood the test of precedent since its publication. It has been strengthened by Planned Parenthood v. Casey in 1992, and most recently with Whole Women’s Health v. Hellerstedt. And the foundations on which Roe draws its reasoning comes from several other preceding opinions: Griswold v. Connecticut and its companion Eisenstadt v. Baird, and United States v. Vuitch.

And it must be pointed out that the respect of stare decisis is why Roe v. Wade has not only not been overturned, even in the face of a 5-4 “conservative” majority, but likely never will. And the same with Obergefell v. Hodges, which overturned and declared a violation of the Fourteenth Amendment the restriction of gays from being able to marry an adult partner of his or her choice.

If you honestly think a Trump presidency means those decisions, that long-standing precedent and the respect of stare decisis goes away, you’re not only deluded beyond the limits of what I’m capable of believing, you have no idea how things actually work.

The United States is a federated republic. The President is merely the presiding officer of the Executive Branch. He is not a dictator. The country does not bend to his whim. You would be thinking of North Korea.

But it does mean that DC v. Heller and McDonald v. Chicago also were largely not in danger of being overturned. Instead the fears of gun rights advocates wasn’t losing at the Supreme Court, but the constant, subtle chipping away at gun rights in the US. Such as what was seen with the various ballot initiatives this last go around. And Clinton’s constant reverence of Australia as a model for the US.

Speaking of Clinton, it also means that, despite her efforts, she would have been unlikely to get Citizens United v. FEC overturned as well.

  • “Are we safe?”
  • “Am I safe?”

The first question appeared three times in the image. Let me answer that question succinctly: we are no less safe today than we were last week before the election. Even taking into account the actual violent crimes that have occurred since the election, there is no reason to believe you are at any higher risk of being the victim of any crime, let alone any hate crime.

Yet paranoia is alive and well.

If you legitimately have concerns about your safety, you do have the right to own and possess a firearm for your personal safety — provided you do not fall under the ATF’s classification of “prohibited persons”. Buy one. And learn how to use it to defend yourself.

But at the same time, get over your paranoia.

The ones who are so concerned about their safety in the wake of Trump’s election I feel have the fear of having brought it on themselves. You see, prior to all the identity politics of the last several years, most couldn’t care less if you’re homosexual, transsexual, or what have you. We just didn’t care.

The only reason there’s been a backlash with regard to a lot of their demands is because you shoved your personal identities in our faces and acted like they mattered more than your actions, or acted like they excused your actions. If you felt emboldened by a black President and felt emboldened by the prospect of a female President, emboldened by the prospect of being able to shove more of your identity politics on us and the limitations to our free speech and due process rights that have come in their wake, then you have only yourself to blame for not only Trump’s victory, but your paranoia and anxiety in its wake.

And if you truly feel in fear of your life, time to swallow your discontent with the Second Amendment and exercise the rights it protects by buying a gun. Who knows, you might even grow to like being a gun owner.

  • “What’s going to happen to my Healthcare?”

In the short term, not much.

Many feel that Republicans just couldn’t wait to get that majority in Congress plus the White House to repeal the Affordable Care Act. Rest easy, though. Now that they have the reins, they’re not going to be so quick to do that. “But they voted xxx number of times before to repeal it.” And that was also when Republicans knew they had a snowball’s chance in hell of succeeding with the repeal. Now that a repeal has a much better chance of succeeding, they’re not going to be so quick about it.

And Trump has already said he’s not interested in a full repeal. Instead he wants to rework and retool the Act into something that will work better in the long term.

But much of what already exists is unlikely to change, or change much in the next few years.

  • “Will my trans child be safe at school?”

Trans child? If you’re asking this question legitimately, you are a rare parent indeed. Few children are capable of understanding gender dysphoria, the true definition of trans-sexuality, and any who do experience it won’t realize it until they hit puberty. Your child is very, very likely not on par with Kim Petras, Jazz Jennings, and Jackie Green.

But let’s set that aside for now.

Many fear that Trump supporters will be emboldened by his election to be downright tyrannical to minority groups and women. So far this has not manifested. And there’s little reason to believe it will.

The thing that needs to be kept in mind is that the kind of people who would feel emboldened to do such things by Trump’s election are the kind of people who would look for any excuse to do it anyway. In other words, your fears are largely overblown. This doesn’t mean you let your guard down, but it does mean you don’t walk through life constantly looking over your shoulder.

School, especially high school, can be a downright traumatizing place for some, especially given the absolute difficulty of curbing or countering bullying. But will bullying escalate against minorities — especially LGBT students — in the wake of Trump’s election? I’ve yet to see any reason to believe that to be the case.

And don’t fall for the fallacy and mental trap of believing that an increase in reporting or awareness means an increase in incidence.

  • “Will this increase the militarization of the police in my predominantly black neighborhood?”

I think you’ve forgotten the separation of powers between the Federal, State, and local governments. Trump’s presidency won’t increase the police presence anywhere unless he decides to step up enforcement of Federal laws in areas where Federal crimes are prevalent.

A new United States President largely won’t change how your local police operate.



Naming children

I love my mother-in-law, I really do. But her baby name choice, Esmeralda, was not, I repeat, not, anywhere near the top of my baby name list. She knew that, I knew that, and my wife knew that. And yet, my daughter’s name is Esmeralda. It was a surprise to me when I saw it on the birth certificate. I was so mad that I just went along with it. What was I supposed to do, argue with the woman who just brought life into this world?
— Antonio H.

To say the above quip made me angry would be an understatement. It’s from a slideshow on The Stir called “11 Moms & Dads Who Totally Regret Their Baby’s Name“. This is absolutely downright despicable behavior as well. It doesn’t matter if it was the wife or the mother-in-law who put the name on the birth certificate.

Naming your children should always be a partner agreement. Meaning if one of the two is completely opposed to a particular name, regardless of how much the other might “love” it, you don’t go with it. It doesn’t end up on the birth certificate in any capacity.

And if the name were to end up on the birth certificate, I’d consider it grounds for divorce. Because it shows that, for decisions that have such a long-term impact, you’re either unwilling to compromise or at the least are willing to be underhanded to get what you want.

At minimum, if I were in Antonio’s position, I’d be filing with the Court to get the birth certificate withdrawn. And absent that, I’d be looking at other options to get the name changed so we could come up with a name more to our joint agreement. And, again, if the mother were to contest, I’d consider it grounds for divorce.

It’s one thing if she is single, the father is out of the picture, and the woman is giving birth and raising the child on her own. But if she’s married, then the name must be a joint decision. No sneaking around. No subterfuge. No subversion.

If either sneaks a name onto the birth certificate and files it, especially if it’s a name the other parent has expressly opposed, again that’s grounds for divorce if they don’t go along with having the name changed. Because if you’re going to sneak around for something as supremely important as naming a child, it gives reason to not trust you on lesser decisions.


Another glass of absinthe — II

In the interim, the R9 290X was put back into the system and the GTX 1080 pulled and sent back to NewEgg on RMA. Unfortunately NewEgg didn’t send out the replacement till they had the original.

Replacing the R9 290X back into the system was as easy as pulling it out, thankfully: drain, remove the bulkhead fitting, remove the GTX 1080, seat the R9 290X, then screw the rotary fittings back into the R9’s water block. Then it was a matter of bleeding the system again.

New GTX 1080

And then doing it again with the replacement.




This time to avoid complication, I had the replacement seated in an open system for easier testing without having to tear apart the loop. That’s an AMD A8-7600 system that had been running Einstein@Home on Linux for a while. It’ll be converted into another computing system for BOINC or Folding@Home later.

Thankfully this unit didn’t have the prohibitively loud coil whine. But I left it running for a while just to make sure, along with making sure it could handle the stress. When building Desert Sapphire last year, I had to RMA the original GTX 980 as it wouldn’t go into any 3D mode. Thankfully Amazon turned it around quickly.

Now while the coil whine wasn’t prohibitively loud, there is still some coil whine. There will always be coil whine. The question is the degree.

In Unigine Valley, it wasn’t noticeable, but in Heaven it was. When tessellation was turned on. Otherwise it wasn’t there.



I went with the Aquacomputer kryographics with the passive backplate. It’s the best line for power delivery cooling. Which is very important, especially when overclocking. I used it for the R9 290X for that reason, and also for the GTX 980 in Desert Sapphire.

To flush the loop, I used a technique similar to what JayzTwoCents used to flush his build: open the drain valve about half way, and then just keep flowing distilled water through the reservoir.

Though with the setup in Absinthe, that wasn’t nearly as easy as I would’ve liked. But it gave me a reason to buy another 5-gallon bucket and some more tubing from Home Depot. While I wouldn’t recommend the plumbing tubing from there for a loop, it works great for temporary uses. Ultimately I didn’t use it, merely because I wanted to ensure the fluid had a direct path from the drain valve to the bucket.


Once it was drained it was a matter of swapping out the cards and bleeding the loop. Unfortunately I did have to make some tubing modifications — the fittings aren’t in exactly the same place as on the R9 290X, but it wasn’t much. But unfortunately bleeding the loop didn’t go as planned and one of the tubing actually popped out of one of the fittings, first spraying, then pouring the coolant out.

Needless to say that meant disassembling the entire system to clean things up and make sure the coolant didn’t spray onto something vital. Thankfully the mainboard and other components came out without much cleaning needed. The radiators were a different story, but then they really needed a cleaning anyway from being pretty well covered in dust.

Time to hit the showers!

I’ve read before of people trying to clean radiators by running water across them without much luck. That’s largely because the water pressure isn’t where it needs to be. If you really want to clean your radiators of dust, use the shower head. Better still, use a handheld. While you could also use a spray hose at the kitchen sink, bathroom shower heads and handhelds cover more area and have more pressure.

Plug the fitting openings with stop fittings first. Then just spray the water up and down and up and down the length of the radiator, spraying into all the little nooks as well. Use about the same temperature of water as you’d normally shower with — unless you’re one of those insane people who takes cold showers, in which case use warm water as that will help rinse away the dirt and dust better.

The thinner water jets on the shower head will get into the nooks and between the fins much better than just running it under a tap. Plus the higher pressure of the thinner jet can power away the dust much more efficiently. Just be sure to do this to both sides of the radiator to make sure you get everything, especially if you’re cleaning 45mm or thicker radiators.

You’ll notice as you’re doing this that the water will cling to the fins like honey to honeycomb. You’ll need to give a couple swift downward shakes to get the bulk of the water out of the fins. Then set the radiators on towels to dry, preferably overnight.

The result?

They look practically brand new now except for some minor paint wear. If only I could do this with the fans. Next time I tear this system apart, I’ll have to see about doing that to the chassis. I could swear I took pictures of the clean radiators, but apparently never did…

Reinstalling everything

With the radiators rinsed and the rest of the coolant cleaned up out of the chassis and off all the components, it was now a matter of putting the whole thing back together. The fittings and tubing pieces were rinsed in distilled water first to ensure they were clean.

I used this as a chance to make some minor changes to the loop layout — flipping the CPU block and some other minor tubing changes. It also gave a good chance to refresh the thermal paste. I saw from removing the block that I didn’t have as even of a spread as I would’ve liked.

I needed to redo the cabling anyway as the GTX 1080 needed only one PCI-Express power cable. And then once it was all assembled, it was a matter of bleeding the loop, then turning it back over to my wife after doing some temperature testing.



Integrating budgeting and accounting with GnuCash


There are a lot of approaches to budgeting and personal financial management, it seems. Some are rather complicated, while others make you wonder whether their advocates actually practice what they preach (*cough* *cough* Dave Ramsey *cough*).

I use GnuCash for managing my personal finances. It is a completely free, open source application available for the three major desktop platforms — Windows, Mac OS X and Linux. As of the time I write this, it is not available on any mobile platforms, though you can run it on a Windows-enabled tablet such as the Microsoft Surface (in my case, the Toshiba WT8-B).

To use the system I describe herein, you need to be familiar with GnuCash and double-entry accounting, which is well beyond the scope of this article, and I will assume that if you keep reading beyond this point that you are familiar with both concepts.

Some of the concepts described herein can likely be applied to other personal accounting systems, such as envelope budgeting and paycheck budgeting.

“Envelope budgeting” with GnuCash

“Envelope budgeting” is simple: divide your income into separate envelopes and spend from those envelopes. Dave Ramsey advocates using physical envelopes with physical cash. And many other advocates of “envelope budgeting” say the same. But “cash only” tends to mean different things. For example, a “cash only” clinic is one that does not accept insurance of any kind. And my spending is “cash only” in the sense that I rarely use credit cards anymore.

You implement “envelope budgeting” with GnuCash by using its concept of “sub-accounts” — do a Google search for “GnuCash envelope budgeting” (without quotes) to find articles on it. When you receive your paycheck, you would split the income into the various sub-accounts. Divide the income by splitting the transaction1, or by moving the money through separate transactions. I prefer the latter as it makes later adjustments a lot easier.

If you practice zero-sum budgeting (often erroneously called “zero-based budgeting” by many, including Dave Ramsey), your entire paycheck is split off into sub-accounts. Expenses fitting those budget categories would come out of the sub-accounts, and you’d use transfer transactions to move cash between those envelopes as needed.

You can still reconcile transactions against your bank account doing this — check “Include sub-accounts” when reconciling.

Most envelope budgeting systems go on an ever-running basis or on a monthly period. I prefer paycheck budgeting combined with envelope budgeting. And I believe, based on my own practice, that is the optimal budgeting and financial management setup.

Paycheck budgeting

Most budgeting systems use a one-month cycle. Indeed every budget system or application I’ve seen locks you to a one-month cycle. For paycheck budgeting, your budget period is the pay period instead of a set calendar month. It is a lot easier to manage your money when budgeting only on the pay period.

Organizing expenses is easier when your pay cycle is semi-monthly or monthly. Your employer pays you on the same days of the month (or thereabout) and your bills are due on the same days of the month. Ongoing organization is necessary if you are paid weekly or bi-weekly, as your paydays are always changing.

Regardless paycheck budgeting forces you to organize your expenses. Create a spreadsheet showing your monthly bills, including the due day and amount owed. Include in that the day your credit card accounts issue a statement. This will be necessary to create future budgets.

Create budgets for several months at a time — at least one fiscal quarter if not an entire fiscal half. This allows you to balance expenses across pay periods. You’ll want to account for expenses such as pre-orders, property tax payments, and other anticipated expenses. If you are paid weekly or bi-weekly, this helps avoid having pay periods with a lot of money available and others with little available.

Paycheck “envelope” budgeting

To combine paycheck budgeting with envelope budgeting, you’re basically creating an envelope for each pay period, then envelopes inside that envelope for budgeting categories:

  • Checking account
    • Pay period – 2015-05-22
      • Bills
      • Gasoline
      • Loan payments
      • Lunch

Let’s start with an example. Let’s say that you, the reader, are a single person living in Kansas City, Missouri, making $50,000 annually and paid bi-weekly with no additional deductions beyond the requisite taxes — gross pay would be 1923.08, and net pay after deductions is 1417.33.

Based on the spreadsheet you made earlier, let’s say the expenses that overlap with this paycheck are

  • Rent: 675.00
  • Power bill: 75.00
  • Wireless: 65.00
  • Netflix: 7.99
  • Hulu Plus: 7.99
  • Student loan: 200.00

New paycheck

When a new payday arrives and the paycheck is direct deposited into my checking account, I’ll set up a new budget account as a child to the bank account:

Creating new budget account

Account tree

and add the initial deposit. I typically track taxes and other paycheck deductions in separate expense accounts — in part due to the 401(k) I have through my work — but for simplicity, I’ll only do the net income for this deposit.

Paycheck deposit

From here I’ll start making allocations. You should’ve noticed from above that the pay period account has two additional child accounts: “Anticipated expenses” and “Pending expenses”. Allow me to explain these categories.

Anticipated and pending expenses

Most who use a financial management system are familiar with cleared and un-cleared expenses. I’ll be discussing three kinds of expenses: anticipated, pending and confirmed. These are not expense types that GnuCash enforces in any way, but categories I imposed on myself.

  • Anticipated expenses are expenses you anticipate will be charged to your bank account during the pay period. These could be obligations that fall within the pay period, pre-orders that may deliver during that time, and anything else you can reasonably “anticipate”.
  • Pending expenses are expenses you have already initiated with the recipient — checks in the mail, EFTs waiting to be acknowledged by the bank, and so on — but haven’t yet been deducted from your bank account balance. I classify expenses that will be automatically charged to my bank account as pending expenses as opposed to anticipated because I don’t have to do anything to initiate payment.
  • Confirmed expenses are expenses that the bank has deducted from your account balance, whether they have “cleared” or not. These are the only expenses that target an Expense account.

The progression of expenses goes anticipated to pending to confirmed. Debit card payments will likely hit your bank account immediately and deduct from the available balance, so while those payments are initially anticipated, they will target the appropriate expense account when started with the recipient.

By keeping track of expenses in these three categories, you can keep the balance that GnuCash displays for the “Checking account” account in synchronization with the balance reported by your bank while also keeping track of what you have spent. Transactions that target the Anticipated or Pending expenses envelope accounts don’t deduct from the total balance for the checking account. That balance is only affected when the expense targets a separate expense account. But they do deduct from the balance of the pay period envelope, which is what matters.

Let’s illustrate by setting up the anticipated expenses for this paycheck.

Anticipated expenses

The current balance of this envelope account, 311.35, I refer to simply as “discretionary” — money not allocated toward anything else, so I can allocate it elsewhere if I want, or I can spend it freely. In zero-sum budgeting you would set up additional child accounts similar to the Gasoline account to allocate funds toward those other spending categories such that either no money would be going into the main pay period envelope, or the remaining “discretionary” would be allocated to spending categories instead of left like this.

In general you’d want to allocate funds for expenses you can reasonably anticipate. Gasoline is a good example. I have two SUVs — an Equinox and a Santa Fe. The Santa Fe tends to get filled up only once per pay period, while the Equinox gets filled up twice, and I can approximate how much I’d need to allocate for gasoline based on that.

Let’s look at the account page after this.

Anticipated expenses - Accounts

As you can tell, the Total for the “Checking account” is still the same as the initial deposit. That is simply because it is showing the sum total of all sub-accounts underneath it along with whatever balance might exist in that account — currently for this example, it’s zero.

Initially all of these transactions are listed as “anticipated”. Neflix and Hulu auto-bill, so I’ll change those to “pending” pretty much right away — I might even list them as “pending” instead of anticipated when making the initial entries. Then I’ll pay the remaining bills. The power bill, student loan, and rent are paid by EFT — electronic funds transfer — so those transactions get changed to target the “Pending expenses” account so I know those are payments that have been made but that haven’t yet been initiated with the bank, transactions for which I don’t need to do anything more. If I’d written a check for any of these payments, they would have targeted “Pending expenses” as soon as the check was dropped in the mail.

The wireless bill I pay through my debit card, so it targets the appropriate expense account immediately.

Bills paid

And looking at the Accounts page, we can see that the balance of the checking account has gone down slightly, because of the AT&T Wireless expense. If this were a real checking account with online access, the online balance would reflect that AT&T Wireless has already been acknowledged by the bank while everything else won’t be till the next business day at the earliest.

Bills paid - Accounts

Within the next several business days, the remaining pending transactions will be initiated with the bank, and so I’ll change them to target the appropriate account. Note how the student loan payment targets a Loan account. This is because I follow the standard accounting guidelines for accounting for outstanding loans — i.e. loan payments are not an “expense”.

Clearing pending expenses

Looking at the Accounts page:

Clearing pending expenses - Accounts

Now the bank account balance has dropped a bit more. This is because now the expenses are targeting the Expense account. If I were to log into this bank account online, the reported balance should match. But the entire time the “discretionary” never changed — though it would have if additional expenses were added. So as long as spending stayed within that $311.35, you would be fine and would not be at risk of overdrawing your bank account.

Now during the course of the pay period there will be other expenses, of course. Each expense deducts from the “discretionary” balance, so it is important to list all known anticipated transactions up front as shown above so you will know how much you will have available to spend as you saw fit.

Sealing the envelope

At the end of the pay period, zero out the pay period account in a way similar to how you’d zero out the income and expense accounts. You can still do this if you have transactions targeting the “Pending expenses” envelope as the totals would be unaffected.

In all of the sub-accounts for allocations — in our case, just the gasoline account — zero-out the account to the pay period account. If the final balance of the pay period account is still in the black, congratulations, you’ve ended up with a surplus. If it is in the red, this means you spent more than your paycheck and have a deficit. Obviously you want to avoid deficits as much as possible and have as many surpluses as possible, and have those surpluses be as large as possible.

Now zero out the pay period account to the “Checking account” account such that the balance of that account reflects how much surplus cash you have just sitting in the bank not really going anywhere or doing anything. Pay period deficits deduct from this balance while pay period surpluses add to it, and you’ll want to add to it as much as possible and avoid deducting from it where you can.

Obviously there will be times where you’ll need to “tap into” your surplus cash. Things will come up, and my wife and I have had to tap into our surplus before. But it shouldn’t be a habit, and you shouldn’t make excuses to do it either. That surplus is your personal profit, and you want to maximize it by keeping your expenses lower than your income. You can generate a Cash Flow report (Reports->Income & Expense->Cash Flow) to see how well you are managing this. The Liabilities Over Time graph report (Reports->Assets & Liabilities->Liability Barchart) will show the progression of your liabilities for whatever range you specify. You’ll want to keep that on a downward trend as much as possible.

Note as well that you will still want to zero out the Income and Expense accounts to Income Summary, then zero out Income Summary to Net Worth (also called Retained Earnings). Do this at the end of every pay period as well, as this is part of standard accounting practice.

Savings envelopes

Along with having the envelopes for your pay periods, you may also want to have envelopes for certain savings targets. I’ll use myself as an example. I have an espresso maker. It’s a decent one but I have my heart set on a better one.

To set aside that money, I have another envelope account under the “Checking account” account called “Espresso machine fund”. Periodically I will add money to it. It’s still under the “Checking account” account, so the total balance showed on the Accounts page reflects that money, but any money I add to it counts against the discretionary for a pay period, but does not count for or against any surplus cash I have in the bank.

The purchase will come out of that fund account — I won’t move the money to a pay period account before accounting for an expense.

Here’s a little trick.

If you have a particular saving goal, create a sub-account for the fund and call it “Target amount”. If you’re saving for specific expenses, call it “Anticipated expenses”. Now create a transaction entry to transfer the target amount to the sub-account. If you’re saving up for specific expenses, then you’d create an entry for each expense you anticipate — hence the “Anticipated expenses” account.


Doing this doesn’t affect the balance of the “Checking account” account. But it will show you how much more you need to save to meet your goal by putting the balance in the red. If the account ends up over-funded, or you take advantage of a deal that allows you to spend less than you anticipated, the remainder would be moved to the cash surplus, the current pay period account, or another saving fund.

Making it work

There aren’t really any hard and fast rules for this system beyond what double-entry accounting requires — and what GnuCash directly enforces. And that, I feel, is the one advantage to what I was able to develop over time: I didn’t follow anyone else’s rules. I don’t adhere to zero-sum budgeting (or zero-based budgeting, if that’s what you call it) and the rather strict rules that come with it.

For me the above is a system that evolved over time, not something I just adopted out of the blue. I didn’t just wake up one day and say “I’m going to do this”. I started with something smaller and worked into what I currently have. It’s one of the reasons it has worked well for me. I could see quite plainly what changes worked and what did not, what changes added value and what did not.

Splitting things out into anticipated and pending expenses was more about having an immediate check on everything. Does the balance calculated in GnuCash match the balance reported by the bank? And I’m checking that balance several times per day as well to keep things up to date. If there are any transactions that don’t look familiar, I’m forced to look into it (and possibly interrogate my wife) to get things back into balance.

I’m also doing the same with the credit cards, since I do have transactions that auto-bill to them. I want to make sure the balances and transactions in GnuCash match what is listed by the bank and credit card companies. And staying on top of your bank account balance is the best way to avoid overdrafts and get ahead.

Conclusions and Takeaways

If you want to get ahead financially, you need to be spending less than your income. And the best way to make it so your spending can be less than your income is to plan out your expenses versus your income using paycheck budgeting. If you’re not doing that, you leave yourself open to having to borrow or put expenses on credit cards to keep from overdrawing your checking account and paying late fees.

This doesn’t mean you avoid debt entirely, as leveraging credit — such as deferred interest deals — can also help you get into a better financial position, provided you plan for it properly.

I’ve been using paycheck budgeting for the last six years, but I wasn’t budgeting in the full sense of the word, but merely using a spreadsheet to organize obligations against pay periods. Even doing that allowed me to predict months in advance when I would be able to pay off debt accounts and plan to make those pay-offs — a great feeling, to say the least, when you’re climbing out of a massive chasm of debt created by a lengthy unemployment. Loans were paid off in advance, credit card and collections accounts zeroed out.

We were gaining ground, even despite additional liabilities coming onto us in the interim — my wife’s inpatient surgery followed by several outpatient surgeries, parts replacements on the car, and so on.

We got to a point where we were able to buy a used SUV from my mother-in-law for cash split into several payments, while also helping a friend pay off a several-hundred dollar balance on a veterinary bill. Now it helps that we have the income we enjoy, and most households may not be able to get to that point, but you should get to a point where you are making gains instead of feeling like you’re just treading water.

Most importantly, though, keeping those gains requires maintaining the kind of self control that otherwise allows you to make those gains to begin with. It only takes one day, one lapse in self control, to undo any gains you make. Trust me when I say that seeing the cushion of cash (“surplus”) we have just sitting in the bank is quite tempting — I can think of a number of things I could do with that, and so can my wife.

I’ve been using the above-described system for over two years, and I still have a spreadsheet for keeping obligations organized. Along with allowing us to create and meet saving goals, we’ve managed to create a decent surplus as well — though not as large as I’d like it to be, but we’re getting there. But we are ahead financially and gaining more ground each pay period.

More importantly, we stopped lying to ourselves. The financial system showed us the full scope of our situation.

  1. See section 4.2.2 of the GnuCash manual []