pig-monkey.com - financehttps://pig-monkey.com/2022-02-24T20:58:12-08:00Better Payments with Privacy.com2022-02-24T00:00:00-08:002022-02-24T20:58:12-08:00Pig Monkeytag:pig-monkey.com,2022-02-24:/2022/02/better-payments-privacy/<p><a href="https://privacy.com">Privacy.com</a> is an excellent service with a terrible name. They provide merchant-locked virtual debit cards. I’ve been using them for about three years. Around 90% of my online transactions go through them (the other 10%-ish is PayPal).</p>
<p>When one of their card numbers is first used, it …</p><p><a href="https://privacy.com">Privacy.com</a> is an excellent service with a terrible name. They provide merchant-locked virtual debit cards. I’ve been using them for about three years. Around 90% of my online transactions go through them (the other 10%-ish is PayPal).</p>
<p>When one of their card numbers is first used, it becomes locked to that merchant. The card will reject transactions from anyone else. This immediately eliminates the problem of stolen card numbers. If a random ecommerce website leaks my card details, I don’t care, because nobody other than the original merchant can place a charge on the card.</p>
<p>When generating cards, Privacy.com also allows you to set dollar limits, either in total or for a period of time. This eliminates the problem of unreliable subscription services. For example, the card tied to my Amazon Web Services account has a monthly usage limit slightly higher than my average monthly bill. If AWS tries to double my bill one month, the transaction will be rejected.</p>
<p>Cards can also be paused. While I use the periodic dollar limit feature for things like subscription services with regular payments, other cards in my Privacy.com account stay paused when not in use. A paused card rejects all new transactions. Before making a purchase on a website, I login to the Privacy.com website and unpause the associated card. I then make the purchase as usual. Placing an order usually results in the merchant immediately placing an authorization on the card for the purchase amount. Existing authorizations can still be captured on a paused card, so at this point I can switch back to my Privacy.com tab and re-pause the card, preventing the merchant from taking any more money than the agreed upon authorization.</p>
<p>Cards can also be closed. Effectively this is the same as pausing a card, except that it is permanent. This is useful for signing up for free trials that still require a method of payment. When the trial is up, if you choose to not continue using the service, inform the provider and simply close the card.</p>
<p>Privacy.com offers <a href="https://play.google.com/store/apps/details?id=com.privacy.pay">software you can install on your telephone</a>. I’ve never used it. I don’t trust my phone enough for it to touch money in any way. They also offer <a href="https://addons.mozilla.org/en-US/firefox/addon/pay-by-privacy-com/">browser extensions</a>, which I also have never used. Their website works great, and I see no need for locally installed software of any sort.</p>
<p>Over my few years of using Privacy.com, I’ve never had a problem with their service. I’ve never had to contact their customer support, so I have no idea how that works. I’ve had merchants issue refunds to my Privacy.com cards half a dozen or so times, and those have always come through and landed in my bank account without drama (even when the original charge was on a card that at the time of refund was paused or closed.</p>
<p>Last year, <a href="https://swiftsilentdeadly.com/eliminate-online-credit-card-theft-privacy-com/">Swift Silent Deadly posted an in-depth overview of Privacy.com</a>. This provides a good overview of the service. What he wrote matches my experience, with one glaring exception. He mentions giving Privacy.com access to your bank account. I don’t know if he is referencing some <a href="https://drewdevault.com/2022/02/19/Plaid-is-an-evil-nightmare-product.html">shady Plaid bullshit</a> or if he simply means providing them with routing and account numbers and going through ACH. I did neither. When I signed up, Privacy.com allowed me to add my real bank debit card as a funding source. That is the only way Privacy.com has to push or pull funds from me. If they ever become untrustworthy, I can just cancel my real debit card, and Privacy.com will loose all access to my money.</p>
<p>The debit card that I use for this is tied to <a href="/2015/12/proxy/">the checking account that I previously used only for PayPal</a>. This provides an additional layer of defense, in that there isn’t much money hanging around in that account for someone to steal. I usually keep around $100 in it for incidental purchases, and transfer more in from my real accounts when I plan to make a larger purchase.</p>
<p>Privacy.com has free and <a href="https://privacy.com/pricing">paid tiers</a>. I am on the free tier. Apparently it has some limitations in terms of number of cards generated per month and total monthly spend. I have never run into these limitations so I have no idea what they are. They claim that they make enough money on us low-volume free tier users by collecting the transaction fees that merchants pay to process debit cards. I would be very unhappy to return to participating in the electronic commerce market without a service like this, so they would probably have a pretty easy time convincing me to move to a paid plan if they ever decided to eliminate the free tier.</p>
<p>I’ve heard some banks offer virtual card numbers somewhat similar to Privacy.com, but perhaps without the merchant-locking and spend limits. While I refer to my “bank” accounts, my accounts are actually with credit unions. Credit unions tend not to be at the forefront of technology, so I need a third-party to provide this functionality.</p>
<p>Privacy.com says that they offer merchant masking to their paying customers. This means that transactions show up in your bank account as “Privacy.com” instead of including the name of the merchant. I suspect this may be where their business name comes from. I suppose that is great if you have a joint bank account and want to hide your Porn Hub subscription from your spouse. But it is not a problem I have, so I maintain that their name is dumb and has nothing to do with their excellent service. If anything they reduce my privacy, since they are now an additional party involved in all of my online purchases. But I’m good with that trade-off.</p>Tracking My Phone Bill with Ledger2020-08-12T00:00:00-07:002020-08-12T20:30:26-07:00Pig Monkeytag:pig-monkey.com,2020-08-12:/2020/08/phone-ledger/<p>Back in 2013 I bought my first smartphone and signed up for a T-Mobile prepaid plan, referred to at the time as the <a href="https://blog.bn.ee/posts/ice-cream-sandwich-for-30month">“Walmart Plan”</a>. The plan cost $30 per month, was intended for new customers only, and was supposed to only be available to those who purchased the SIM …</p><p>Back in 2013 I bought my first smartphone and signed up for a T-Mobile prepaid plan, referred to at the time as the <a href="https://blog.bn.ee/posts/ice-cream-sandwich-for-30month">“Walmart Plan”</a>. The plan cost $30 per month, was intended for new customers only, and was supposed to only be available to those who purchased the SIM card at a Walmart. It offered a small amount of voice minutes and a large amount of data, which struck me as what one would want with one of these newfangled computer-phones. I bought a SIM card, figured out how to get T-Mobile to sign me up on the plan despite not stepping foot into a Walmart, and haven’t looked back since.</p>
<p>One of the things that appeals to me about the setup is the level of separation it gives me from the service provider. I purchased the phone from the manufacturer and the SIM card I bought with cash. I fund the plan by purchasing refill cards from third-party vendors. I have never provided T-Mobile with any financial information. They have no ability to take any money from me, except what I give them when trading in the refill cards. Obviously, the primary business of any mobile communications provider is location tracking, so I can’t refer to my relationship with them as “privacy preserving”, but I like to think it does allow me to retain some level of agency that is lost in a more traditional relationship.</p>
<p>If there is a downside to this setup, it is that it can be difficult to understand what I actually pay per month. The plan costs $30. There is some limit to the number of SMS messages, but I have no idea what it is. Data is “unlimited”, which means throttled over 4GB, but I don’t think I’ve ever approached even half that limit. Minutes are limited, and if I go over the allotment I’m charged a higher rate, but the service continues as long as the balance of the account remains positive.</p>
<p>I always want to keep more than $30 in the account, in case I do go over the allotted minutes. So I buy $50 refill cards. They have $50 of value, and are supposed to cost me $50. But the vendor I tend to by them from charges a $1 service fee, offers a points program that sometimes results in a discount being applied, and frequently has sales that offer a couple dollars off. So I end up paying something like $48-51. If I do exceed the limits of the plan, I may end up buying a $50 card one month and the next. More often, I buy a $50 card one month and have enough left over in the account that I do not need to refill it the following month. My plan renews on the 5th of the month, so some months I may end up spending $100 by buying one refill card on the first day of the month and another on the last in anticipation of the following month’s renewal.</p>
<p>All of that is to say that it is difficult to have an intuitive feel for what my average monthly phone expense is, but it’s important that I can get that number so that I can determine if the plan is still working or if I should look for a better offer. Fortunately, this is a thing that <a href="https://www.ledger-cli.org/">Ledger</a> makes extremely simple.</p>
<p>Whenever I purchase a refill card, I log the transaction in the <code>Expenses:Utilities:Phone</code> account. With that done, I can ask Ledger to report on all transactions in that account, grouped by month, with a running average in the final column.</p>
<div class="highlight"><pre><span></span><code>$ ledger register utilities:phone --monthly --average --begin <span class="m">2019</span>-08
<span class="m">2019</span>-09-01 - <span class="m">2019</span>-09-30 Expenses:Utilities:Phone <span class="nv">$48</span>.50 <span class="nv">$48</span>.50
<span class="m">2019</span>-10-01 - <span class="m">2019</span>-10-31 <None> <span class="m">0</span> <span class="nv">$24</span>.25
<span class="m">2019</span>-11-01 - <span class="m">2019</span>-11-30 Expenses:Utilities:Phone <span class="nv">$46</span>.50 <span class="nv">$31</span>.67
<span class="m">2019</span>-12-01 - <span class="m">2019</span>-12-31 <None> <span class="m">0</span> <span class="nv">$23</span>.75
<span class="m">2020</span>-01-01 - <span class="m">2020</span>-01-31 Expenses:Utilities:Phone <span class="nv">$51</span>.00 <span class="nv">$29</span>.20
<span class="m">2020</span>-02-01 - <span class="m">2020</span>-02-29 <None> <span class="m">0</span> <span class="nv">$24</span>.33
<span class="m">2020</span>-03-01 - <span class="m">2020</span>-03-31 Expenses:Utilities:Phone <span class="nv">$48</span>.50 <span class="nv">$27</span>.79
<span class="m">2020</span>-04-01 - <span class="m">2020</span>-04-30 <None> <span class="m">0</span> <span class="nv">$24</span>.31
<span class="m">2020</span>-05-01 - <span class="m">2020</span>-05-31 Expenses:Utilities:Phone <span class="nv">$48</span>.50 <span class="nv">$27</span>.00
<span class="m">2020</span>-06-01 - <span class="m">2020</span>-06-30 Expenses:Utilities:Phone <span class="nv">$46</span>.50 <span class="nv">$28</span>.95
<span class="m">2020</span>-07-01 - <span class="m">2020</span>-07-31 <None> <span class="m">0</span> <span class="nv">$26</span>.32
<span class="m">2020</span>-08-01 - <span class="m">2020</span>-08-31 Expenses:Utilities:Phone <span class="nv">$51</span>.00 <span class="nv">$28</span>.38
</code></pre></div>
<p>Over the past 12 months, I have spent an average of $28.38 per month on phone service. I’m ok with that.</p>Adding Metadata to Ledger2020-08-07T00:00:00-07:002020-08-07T20:00:00-07:00Pig Monkeytag:pig-monkey.com,2020-08-07:/2020/08/metadata-ledger/<p>As <a href="/2020/08/reconciling-ledger/">mentioned previously</a>, two of the primary reasons I use <a href="https://www.ledger-cli.org/">Ledger</a> are the intimate awareness it provides of how money is moving, and its timely representation of current balances. The third primary reason I use the tool is for the activity history it provides.</p>
<p>Recording almost every transaction I make …</p><p>As <a href="/2020/08/reconciling-ledger/">mentioned previously</a>, two of the primary reasons I use <a href="https://www.ledger-cli.org/">Ledger</a> are the intimate awareness it provides of how money is moving, and its timely representation of current balances. The third primary reason I use the tool is for the activity history it provides.</p>
<p>Recording almost every transaction I make (excepting only some <a href="/2020/08/ledger-cash/">small petty cash</a>) allows me to look at years past and build an accurate picture of what I was doing. Most activities leave some sort of financial record, even if the transaction is only tangential to the activity itself. This is the sort of information that I would be extremely uncomfortable providing to a <a href="https://www.intuit.com/">third-party</a>, but is quite useful to have myself.</p>
<p><a href="/2020/08/receipts-ledger/">Storing receipts</a> provides an additional layer of detail to the history created in the Ledger journal. As an intermediate between the full receipt and the basic journal entry, I find it is extremely valuable to use <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Commenting-on-your-Journal">comments</a> and <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Metadata-tags">tags</a> within the journal. Almost every transaction in my Ledger journal that is not for food has a comment describing what goods or service was purchased.</p>
<p>In Ledger, comments begin with a semicolon. I store them below the first line of the transaction. When placed here, Ledger refers to these comments as <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Transaction-notes">notes</a>. When purchasing goods, I add one comment – or note – for each unique item on the transaction. For instance, I might buy socks:</p>
<div class="highlight"><pre><span></span><code><span class="mf">2018</span><span class="o">-</span><span class="mf">07</span><span class="o">-</span><span class="mf">02</span><span class="o">=</span><span class="mf">2018</span><span class="o">-</span><span class="mf">07</span><span class="o">-</span><span class="mf">01</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">Socks</span><span class="w"> </span><span class="n">Addict</span><span class="w"></span>
<span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="n">Darn</span><span class="w"> </span><span class="kr">To</span><span class="n">ugh</span><span class="w"> </span><span class="n">Light</span><span class="w"> </span><span class="n">Cushion</span><span class="w"> </span><span class="n">No</span><span class="w"> </span><span class="n">Show</span><span class="w"> </span><span class="nb">Tab</span><span class="p">,</span><span class="w"> </span><span class="n">Black</span><span class="o">/</span><span class="n">Grey</span><span class="p">,</span><span class="w"> </span><span class="n">Large</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="n">x</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Clothing</span><span class="p">:</span><span class="n">Footwear</span><span class="w"> </span><span class="err">$</span><span class="mf">33.40</span><span class="w"></span>
<span class="w"> </span><span class="n">Liabilities</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Visa</span><span class="w"></span>
</code></pre></div>
<p>The comment tells me exactly what was purchased. More importantly, it tells me the model name, the color, and the size of the item. If I want to purchase another pair of identical socks, I can do so easily. This seems like a minor thing, but when it is applied to everything I buy, it is hard to overstate how greatly this ability has improved my quality of life over the past decade.</p>
<p>In Ledger, comments are searchable. Say I want to list every transaction where I purchased a pair of Darn Tough socks. I buy them from different retailers, so I can’t filter by the payee. All the transactions are in the <code>Expenses:Clothing:Footwear</code> category, but that category includes socks from other manufacturers and well as other things that go on my feet, so I can’t filter by that. But I can query all transactions with a note which includes the string “darn tough”.</p>
<div class="highlight"><pre><span></span><code>$ ledger register note darn tough
</code></pre></div>
<p>A tag is a special kind of comment. Tags are useful if you have the foresight to realize that a particular transaction should be grouped with other transactions, but that transactions within the group will likely have different payees or accounts. Tags start and end with a <code>:</code>. Multiple tags can be chained together.</p>
<p>I use tags for vacations. Expenses related to any vacation are tagged with two tags: a generic <code>:vacation:</code> tag, and a tag specific to the vacation. This allows me to easily see what I spend on vacations in general, or any one vacation specifically. For example, in 2018 I took a 24-hour trip to Las Vegas <a href="/2018/12/reflecting-chrome/">to see Nine Inch Nails</a>. That trip included numerous transactions in unrelated accounts: concert tickets, airline tickets, accommodations, ground transport, food, etc. All transactions were tagged with <code>:vacation:</code> and <code>:nin-vegas-2018:</code>. As an example, here is the transaction for purchasing the concert tickets:</p>
<div class="highlight"><pre><span></span><code><span class="mf">2018</span><span class="o">-</span><span class="mf">03</span><span class="o">-</span><span class="mf">30</span><span class="o">=</span><span class="mf">2018</span><span class="o">-</span><span class="mf">03</span><span class="o">-</span><span class="mf">28</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">AXS</span><span class="w"></span>
<span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="n">Nine</span><span class="w"> </span><span class="n">Inch</span><span class="w"> </span><span class="n">Nails</span><span class="w"> </span><span class="n">at</span><span class="w"> </span><span class="n">The</span><span class="w"> </span><span class="n">Joint</span><span class="p">,</span><span class="w"> </span><span class="n">Las</span><span class="w"> </span><span class="n">Vegas</span><span class="w"></span>
<span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="p">:</span><span class="n">nin</span><span class="o">-</span><span class="n">vegas</span><span class="o">-</span><span class="mf">2018</span><span class="p">:</span><span class="n">vacation</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Entertainment</span><span class="p">:</span><span class="n">Performance</span><span class="w"> </span><span class="err">$</span><span class="mf">95.50</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>Ledger makes it easy to see all the expenses associated with that trip, both in total and broken out into different expense accounts.</p>
<div class="highlight"><pre><span></span><code>$ ledger balance expense and %nin-vegas-2018
</code></pre></div>
<p>I also use tags to indicate transactions that occur via the same merchant system but have different payees. Specifically, things I buy on Etsy are tagged <code>:esty:</code> and things I buy on eBay are tagged <code>:ebay:</code>. Without these tags I would have no way to list all the Etsy purchases I have made, since I send the money to individual sellers and not Etsy itself.</p>
<p>I also use tags to indicate transactions related to keeping my apartment. Rent goes to the <code>Expenses:Rent</code> account. Electricity charges go to <code>Expenses:Utilities:Electric</code>. Gas charges go to <code>Expenses:Utilities:Gas</code>. My cell phone payment goes to <code>Expenses:Utilities:Phone</code>. The first three charges I consider apartment expenses. My cell phone is not. By tagging the first three with <code>:apt:</code> I can easily see the total monthly cost of keeping my apartment, without a bunch of complicated querying to exclude things like the cell phone bill.</p>
<p>My final use for tags is indicating transactions that I think should be deducted from my taxes. Some people do this with accounts, but I find that with the account structure that makes sense to me I often end up with a mix of deductible and non-deductible transactions within a single account. Tagging deductible transactions with <code>:deduct:</code> makes it easy to dump a list of all transactions that should be considered when completing yearly taxes.</p>Reconciling Ledger2020-08-06T00:00:00-07:002020-08-06T20:01:18-07:00Pig Monkeytag:pig-monkey.com,2020-08-06:/2020/08/reconciling-ledger/<p>For me, one of the primary appeals of using <a href="https://www.ledger-cli.org/">Ledger</a> – or really any accounting system – is that it let’s me know how much money I have (or don’t have) <em>right now</em>. Other people’s records lag behind reality.</p>
<p>If I submit an order for a $50 widget on …</p><p>For me, one of the primary appeals of using <a href="https://www.ledger-cli.org/">Ledger</a> – or really any accounting system – is that it let’s me know how much money I have (or don’t have) <em>right now</em>. Other people’s records lag behind reality.</p>
<p>If I submit an order for a $50 widget on a website today, I consider that $50 gone, even though the vendor likely didn’t collect the money immediately. They probably placed a hold on the funds, but will not actually capture the money until they ship the order, which may take a couple days. When they do capture the funds, it may still be another day or two until that action posts to my online bank statement. Were I dependent on the bank, I could go a week thinking that I have $50 more than I actually have.</p>
<p>It is important to me that I log transactions without waiting for them to appear elsewhere, but at some point I do want to reconcile my records against what my bank believes. I accomplish this with <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Auxiliary-dates">auxiliary dates</a>.</p>
<p>Were I to submit that order for a $50 widget today, I would create the entry using today’s date. Even if it takes me a few days to actually record the entry, I will still use the date the order was submitted.</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">08</span><span class="o">-</span><span class="mf">06</span><span class="w"> </span><span class="n">Acme</span><span class="p">,</span><span class="w"> </span><span class="n">Inc</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Misc</span><span class="w"> </span><span class="err">$</span><span class="mf">50.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>Periodically, I will manually reconcile every transaction in my journal against my bank’s online statements. Usually this happens every other week or so. Many people will simply dump a CSV from their bank and <a href="https://github.com/ledger/ledger/wiki/CSV-Import">use a script to parse and import the results into their journal</a>. I prefer to do it manually. This rarely takes more than 30 minutes, and for me it is one of the other primary appeals of using Ledger: it forces me to be intimately aware of how money is flowing in my life, and makes it extremely easy to spot problems or errors. It is difficult to accomplish that reliably without manually touching every transaction.</p>
<p>So a week or two later I’ll login to the bank and make sure there is a $50 payment to Acme, Inc. If the date listed by the bank for that transaction is different from what I recorded – which for online transactions is almost always the case – I’ll prepend that date to my entry.</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">08</span><span class="o">-</span><span class="mf">10</span><span class="o">=</span><span class="mf">2020</span><span class="o">-</span><span class="mf">08</span><span class="o">-</span><span class="mf">06</span><span class="w"> </span><span class="n">Acme</span><span class="p">,</span><span class="w"> </span><span class="n">Inc</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Misc</span><span class="w"> </span><span class="err">$</span><span class="mf">50.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>When there are two dates, Ledger considers the date to the left of the <code>=</code> to be the primary date. The other date is the auxiliary date. Previously, when only one date was listed, it was the equivalent to <code>2020-08-06=2020-08-06</code>. By using the bank’s date as the primary date, I know that the default output from a report like <code>ledger register assets:bank:checking</code> will match the bank’s statements. If I want to report on what I consider to be the real dates of the transactions, I can pass the <code>--aux-date</code> flag.</p>
<p>The journal files themselves I edit manually in vim, with a little help from <a href="https://github.com/ledger/vim-ledger/">vim-ledger</a>. I have <code><leader>t</code> <a href="https://github.com/pigmonkey/dotfiles/blob/master/vim/ftplugin/ledger.vim#L20">mapped to set today’s date as the primary date of the current transaction</a>. Because I usually only reconcile two or three times a month, today’s date is often not the date I actually want, but this shortcut allows me to immediately insert a new date in the correct format. I can then quickly change the day number to whatever it should actually be.</p>
<p>I consider the transaction to be cleared once the bank statement and the Ledger journal file agree on the date, payee, and dollar amount. In Ledger, transactions are marked as cleared by inserting an <code>*</code> between the date and the payee. In vim I <a href="https://github.com/pigmonkey/dotfiles/blob/master/vim/ftplugin/ledger.vim#L17">map this to <code><leader>c</code></a>. A complete transaction thus looks like this:</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">08</span><span class="o">-</span><span class="mf">10</span><span class="o">=</span><span class="mf">2020</span><span class="o">-</span><span class="mf">08</span><span class="o">-</span><span class="mf">06</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">Acme</span><span class="p">,</span><span class="w"> </span><span class="n">Inc</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Misc</span><span class="w"> </span><span class="err">$</span><span class="mf">50.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>Ledger defaults to including all transactions in its reporting and calculations. By passing the <code>--cleared</code> flag it will only include transactions that have been marked as cleared. So after I think I’m done reconciling all transactions against my bank statement, I will run <code>ledger balance assets:bank:checking --cleared</code> and verify that the resulting balance matches what the bank shows. If I want to know how much money I actually have in that account, I will run <code>ledger balance assets:bank:checking</code>. The output of this will likely include transactions that the bank hasn’t caught on to yet.</p>
<p>If for some reason Ledger’s output of the cleared balance does not agree with the bank, my first step will be to make sure that all transactions are sorted by their primary date. If I already have the file open in vim, I have <a href="https://github.com/pigmonkey/dotfiles/blob/master/vim/ftplugin/ledger.vim#L28">a shortcut for that</a>. Otherwise I keep a one-liner script called <code>ledger-sort</code> that takes the name of a ledger file as input, sorts it, and shows me the diff.</p>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="ch">#!/bin/sh</span>
ledger -f <span class="nv">$1</span> print --sort d > <span class="nv">$1</span>.sort <span class="o">&&</span> mv <span class="nv">$1</span><span class="o">{</span>.sort,<span class="o">}</span> <span class="o">&&</span> git diff
</code></pre></div></td></tr></table></div>
<p>Checking the diff of the sorted output before continuing is important. Sometimes I’ll make a silly mistake like typing the wrong year when entering the transaction. This sort of mistake is obvious when looking at the diff.</p>
<p>Once the file is sorted, I’ll run <code>ledger register assets:bank:checking --cleared</code>. The final column in this output is a running total of the account balance. The only difference between the output and my bank statement should be the ordering of transactions within a day, which I do not care about.</p>
<p>I’ll know that I last cleared my journal around a certain date, and that the account balance was accurate as of that date.<sup class="footnote-ref" id="fnref:assert"><a rel="footnote" href="#fn:assert" title="see footnote">1</a></sup> If I was doing this on 2020-08-06, I might say to myself “I know I cleared Ledger sometime in mid-July, so let’s look at my account balance at end of day on 2020-07-15”. If the bank and Ledger both agree on the balance at the end of day on that date (regardless of the ordering of the multiple transactions that may have occurred on the day), I’ll know that the error is somewhere between 2020-07-16 and 2020-08-06. Next I’ll jump to another random day in that period – maybe 2020-07-22 – and perform the same exercise. This is repeated until I find the first day where the two systems disagree on the ending balance. Then I look at every transaction on that day and find the error. Usually it will be a simple data entry error, such as me typing <code>$12.10</code> instead of <code>$12.01</code>. Having <a href="/2020/08/receipts-ledger/">my receipts stored</a> allows me to verify that I did indeed agree to pay <code>$12.10</code> and that the error is mine rather than the payee’s. This whole process of finding errors rarely requires more than two minutes, and occurs maybe once every three months.</p>
<p>Though I don’t use CSV exports from my banks for anything, I do like to periodically download and archive them. When I generate the exports I ask for one file per month. I refer to these as “bank dumps” and store them in directory named <code>dump</code>. Each file is named for the account and month it represents. For example, an account named <code>Assets:Bank:Savings</code> will have last month’s dump stored at <code>dump/assets-bank-savings-202007.csv</code>. I pretty much never open these files, but I like having them archived. They allow me to see how much money a bank thought I had at any point in time, even if the account is no longer open, and provide assurance that I can always true my records if I somehow mess them up.</p>
<div id="footnotes">
<h2>Notes</h2>
<ol>
<li id="fn:assert"><a rev="footnote" href="#fnref:assert" class="footnote-return" title="return to article">↵</a> Ledger has the ability to <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Balance-assertions">record assertions</a>. I have never used this feature, but I probably should.</li>
</ol>
</div>Receipts and Ledger2020-08-05T00:00:00-07:002020-08-05T21:50:13-07:00Pig Monkeytag:pig-monkey.com,2020-08-05:/2020/08/receipts-ledger/<p>As <a href="/2020/08/organizing-ledger/">previously mentioned</a>, I store receipts in the same repository as my <a href="https://www.ledger-cli.org/">Ledger</a> data files.</p>
<p>Purchasing something online automatically generates a receipt; it’s just a simple matter of saving the confirmation web page or email as a PDF and moving it into the proper directory with the proper filename …</p><p>As <a href="/2020/08/organizing-ledger/">previously mentioned</a>, I store receipts in the same repository as my <a href="https://www.ledger-cli.org/">Ledger</a> data files.</p>
<p>Purchasing something online automatically generates a receipt; it’s just a simple matter of saving the confirmation web page or email as a PDF and moving it into the proper directory with the proper filename. That’s a low enough bar that I cannot justify not storing them. I have a receipt for every digital transaction I have made since I began using Ledger in 2012.</p>
<p>I’m less strict about storing receipts for transactions that occur in meatspace. These transactions usually result in a paper receipt (which may not be initially even be offered), which then requires scanning or photographing. That is just enough effort that I don’t always want to do it. I’ll store the receipt for a meatspace transaction if the amount is greater than $100, or if I think it might be tax deductible, or if I think I might make a warranty claim. But if the transaction is a $10 sandwich for lunch, I probably won’t bother storing the receipt.</p>
<p>My naming scheme for the receipt files consists of the date of the transaction, the amount, and the payee. This is enough information to go from a Ledger journal entry to a receipt, or from a receipt to a Ledger journal entry. For example, consider a transaction with a journal entry like this:</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">07</span><span class="o">-</span><span class="mf">14</span><span class="w"> </span><span class="n">Acme</span><span class="w"> </span><span class="n">Widgets</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Bicycle</span><span class="p">:</span><span class="n">Parts</span><span class="w"> </span><span class="err">$</span><span class="mf">23.72</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">PayPal</span><span class="w"></span>
</code></pre></div>
<p>The receipt for that transaction will be at <code>receipts/20200714_23.72-acme_widgets.pdf</code>.</p>
<p>When I first began using Ledger and came up with this file naming scheme, I figured I would write some sort of script that would parse the components of a journal entry and generate the expected receipt filename so that I could quickly jump from one to the other. What I found is that the scheme is simple enough to make such a script unnecessary. When I look at a journal entry I intuitively know what the receipt filename is, and when I look at a receipt filename I intuitively know what the journal entry is. Writing a simple script to generate one from the other would take more energy than I have collectively spent over the past eight years solving the problem manually. So I never wrote it.</p>
<p>I also store invoices in the same repository, in a directory creatively named <code>invoices</code>. These are invoices that vendors send me – primarily things like rent statements and utility bills – not invoices that I send to people. The naming scheme is the same as what I use for receipts, except in this case the date in the filename is the date the vendor included on the invoice rather than the date I received it or paid it. I chose this because if I ever need to dispute a charge or a payment, this date is an easy way for both the vendor and I to quickly verify that we are discussing the same thing. Each invoice will of course have an associated receipt in the <code>receipts</code> directory after I pay it, and the date on this file will be the date on which I submitted the payment.</p>
<p>Every now and then I need to write someone an old-fashioned paper check. These get scanned and stored in a <code>checks</code> directory. The file naming scheme for these is similar to that of receipts, except that in addition to the date, amount and payee, I also include the check number. Ledger supports <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Codes">including the check number in the journal entry</a>, so including it in the filename provides another way to link the two things. For example, back in 2015 I renewed my passport book and bought a passport card:</p>
<div class="highlight"><pre><span></span><code><span class="mf">2015</span><span class="o">-</span><span class="mf">11</span><span class="o">-</span><span class="mf">09</span><span class="o">=</span><span class="mf">2015</span><span class="o">-</span><span class="mf">10</span><span class="o">-</span><span class="mf">31</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="err">#</span><span class="mf">1047</span><span class="p">)</span><span class="w"> </span><span class="n">US</span><span class="w"> </span><span class="n">Department</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">State</span><span class="w"></span>
<span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="n">Passport</span><span class="w"> </span><span class="n">Book</span><span class="w"> </span><span class="n">Renewal</span><span class="w"></span>
<span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="n">Passport</span><span class="w"> </span><span class="n">Card</span><span class="w"> </span><span class="n">Purchase</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Travel</span><span class="p">:</span><span class="n">Documentation</span><span class="w"> </span><span class="err">$</span><span class="mf">140.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>The scan of the check from that transaction lives at <code>checks/20151031_140.00-1047-us_department_of_state.pdf</code>.</p>Tracking Cash with Ledger2020-08-04T00:00:00-07:002020-08-04T19:13:56-07:00Pig Monkeytag:pig-monkey.com,2020-08-04:/2020/08/ledger-cash/<p>In a double-entry accounting system like <a href="https://www.ledger-cli.org/">Ledger</a>, money always moves from one account to another. Money cannot be magicked in or out of existence.</p>
<p>Previously <a href="/2020/08/organizing-ledger/#fn:cash">I mentioned that I sometimes do not track cash transactions</a>. If the transaction is less than $20 and is not related to a category of …</p><p>In a double-entry accounting system like <a href="https://www.ledger-cli.org/">Ledger</a>, money always moves from one account to another. Money cannot be magicked in or out of existence.</p>
<p>Previously <a href="/2020/08/organizing-ledger/#fn:cash">I mentioned that I sometimes do not track cash transactions</a>. If the transaction is less than $20 and is not related to a category of expense I care about, I may not bother with it. At first glance, this may seem like it conflicts with the inability to magically disappear money. If I take cash out of my checking account, I have to represent that withdrawal or else the balance of the account will be screwy and I’ll never be able to reconcile it against the bank’s statement. Transforming money from electrons in a bank account to Federal Reserve Notes in my pocket has no impact on its value, so one’s initial thought may to represent the cash as an asset account.</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">07</span><span class="o">-</span><span class="mf">13</span><span class="w"> </span><span class="n">ATM</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Cash</span><span class="w"> </span><span class="err">$</span><span class="mf">40.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>This would be technically correct, and the best way to do things if every last penny of that cash was going to be tracked. But logging the withdrawal that way will not work if, over some period of time, I spend the $40 cash in a serious of small, untracked transactions. In that case, my <code>Assets:Cash</code> account would show that I have $40 more than reality. When asset accounts are not accurate, the world ends.</p>
<p>The solution is to <a href="https://www.ledger-cli.org/3.0/doc/ledger3.html#Dealing-with-Petty-Cash">treat cash as an expense account</a>. The balance of an expense account is less important. It tells you how much money you’ve spent on that category of thing, but it doesn’t represent money that you hold. Effectively, this is saying that the $40 was spent when it was withdrawn at the ATM. It no longer contributes to assets or net worth.</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">07</span><span class="o">-</span><span class="mf">13</span><span class="w"> </span><span class="n">ATM</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Cash</span><span class="w"> </span><span class="err">$</span><span class="mf">40.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>The transaction would look similar if I asked for cash back while buying groceries.</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">03</span><span class="o">-</span><span class="mf">20</span><span class="w"> </span><span class="n">Lucky</span><span class="w"> </span><span class="n">Dragon</span><span class="w"> </span><span class="n">Markets</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Food</span><span class="p">:</span><span class="n">Groceries</span><span class="w"> </span><span class="err">$</span><span class="mf">58.89</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Cash</span><span class="w"> </span><span class="err">$</span><span class="mf">40.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>But the trick is that money doesn’t have to move between an expense account and an asset account. Money can move between any accounts, including two expense accounts. I am strict about tracking food related expenses, so if I buy a burrito with that cash, I’ll want to log it. I can do that like this:</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">07</span><span class="o">-</span><span class="mf">18</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">Taqueria</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Food</span><span class="p">:</span><span class="n">Dining</span><span class="p">:</span><span class="n">Lunch</span><span class="w"> </span><span class="err">$</span><span class="mf">8.23</span><span class="w"></span>
<span class="w"> </span><span class="nb">Exp</span><span class="n">enses</span><span class="p">:</span><span class="n">Cash</span><span class="w"></span>
</code></pre></div>
<p>If part of your savings are in cash – in a safe deposit box, stuffed in your mattress, buried in the hills, whatever – you would want to treat it as an asset so that you can track the balance.</p>
<div class="highlight"><pre><span></span><code><span class="mf">2020</span><span class="o">-</span><span class="mf">08</span><span class="o">-</span><span class="mf">30</span><span class="w"> </span><span class="n">ATM</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Mattress</span><span class="w"> </span><span class="err">$</span><span class="mf">100.00</span><span class="w"></span>
<span class="w"> </span><span class="n">Assets</span><span class="p">:</span><span class="n">Bank</span><span class="p">:</span><span class="n">Checking</span><span class="w"></span>
</code></pre></div>
<p>To illustrate the degree to which I do track cash: Ledger currently reports the balance of <code>Expenses:Cash</code> to be $3797.29. I’ve certainly dealt with significantly more cash than that since 2012. The balance of that account is simply the amount of cash I have acquired but failed to log as spent.</p>Organizing Ledger2020-08-03T00:00:00-07:002020-08-05T15:17:03-07:00Pig Monkeytag:pig-monkey.com,2020-08-03:/2020/08/organizing-ledger/<p><a href="https://www.ledger-cli.org/">Ledger</a> is a <a href="https://en.wikipedia.org/wiki/Double-entry_bookkeeping">double-entry accounting system</a> that stores data in plain text. I began using it in 2012. Almost every dollar that has passed through my world since then is tracked by Ledger.<sup class="footnote-ref" id="fnref:cash"><a rel="footnote" href="#fn:cash" title="see footnote">1</a></sup></p>
<p>Ledger is not the only <a href="https://plaintextaccounting.org/">plain text accounting system</a> out there. It has inspired others, such …</p><p><a href="https://www.ledger-cli.org/">Ledger</a> is a <a href="https://en.wikipedia.org/wiki/Double-entry_bookkeeping">double-entry accounting system</a> that stores data in plain text. I began using it in 2012. Almost every dollar that has passed through my world since then is tracked by Ledger.<sup class="footnote-ref" id="fnref:cash"><a rel="footnote" href="#fn:cash" title="see footnote">1</a></sup></p>
<p>Ledger is not the only <a href="https://plaintextaccounting.org/">plain text accounting system</a> out there. It has inspired others, such as <a href="https://hledger.org/">hledger</a> and <a href="http://furius.ca/beancount/">beancount</a>. I began with Ledger for lack of a compelling argument in favor of the alternatives. After close to a decade of use, my only regret is that I didn’t start using earlier.</p>
<p>My Ledger repository is stored at <code>~/library/ledger</code>. This repository contains a <code>data</code> directory, which includes yearly Ledger journal files such as <code>data/2019.ldg</code> and <code>data/2020.ldg</code>. Ledger files don’t necessarily need to be split at all, but I like having one file per year. In January, after I clear the last transaction from the previous year, I know the year is locked and the file never gets touched again (unless I go back in to rejigger my account structure).</p>
<p>The root of the directory has a <code>.ledger</code> file which includes all of these data files, plus a special journal file with periodic transactions that I sometimes use for budgeting. My <code>~/.ledgerrc</code> file tells Ledger to use the <code>.ledger</code> file as the primary journal, which has the effect of including all the yearly files.</p>
<div class="highlight"><pre><span></span><code>$ cat ~/.ledgerrc
--file ~/library/ledger/.ledger
--date-format<span class="o">=</span>%Y-%m-%d
$ cat ~/library/ledger/.ledger
include data/periodic.ldg
include data/2012.ldg
include data/2013.ldg
include data/2014.ldg
include data/2015.ldg
include data/2016.ldg
include data/2017.ldg
include data/2018.ldg
include data/2019.ldg
include data/2020.ldg
</code></pre></div>
<p>Ledger’s include format does support globbing (ie <code>include data/*.ldg</code>) but the ordering of the transactions can get weird, so I prefer to be explicit.</p>
<p>The repository also contains receipts in the <code>receipts</code> directory, invoices in the <code>invoices</code> directory, scans of checks (remember those?) in the <code>checks</code> directory, and CSV dumps from banks in the <code>dump</code> directory.</p>
<div class="highlight"><pre><span></span><code>$ tree -d ~/library/ledger
/home/pigmonkey/library/ledger
├── checks
├── data
├── dump
├── invoices
└── receipts
<span class="m">5</span> directories
</code></pre></div>
<p>The repository is managed using a mix of vanilla git and <a href="https://git-annex.branchable.com/">git-annex</a>.<sup class="footnote-ref" id="fnref:annex"><a rel="footnote" href="#fn:annex" title="see footnote">2</a></sup> It is important to me that the Ledger journal files in the <code>data</code> directory are stored directly in git. I want the ability to diff changes before committing them, and to be able to pull the history of those files. Every other file I want stored in git-annex. I don’t care about the history of files like PDF receipts. They never change. In fact, I want to make them read-only so I can’t accidentally change them. I want encrypted versions of them distributed to my numerous <a href="/2016/08/rclone/">special remotes</a> for safekeeping, and someday I may even want to drop old receipts or invoices from my local store so that they don’t take up disk space until I actually need to read them. That sounds like asking a lot, but git-annex magically solves all the problems with its <a href="https://git-annex.branchable.com/tips/largefiles/"><code>largefiles</code> configuration option</a>.</p>
<div class="highlight"><pre><span></span><code>$ cat ~/library/ledger/.gitattributes
*.ldg annex.largefiles<span class="o">=</span>nothing
</code></pre></div>
<p>This tells git-annex that any file ending with <code>*.ldg</code> should not be treated as a “large file”, which means it should be added directly to git. Any other file should be added to git-annex and <a href="https://git-annex.branchable.com/git-annex-lock/">locked</a>, making it read-only. Having this configured means that I can just blindly <code>git annex add .</code> or <code>git add .</code> within the repository and git-annex will always do the right thing.</p>
<p>I don’t run the <a href="https://git-annex.branchable.com/assistant/">git-annex assistant</a> in this repository because I don’t want any automatic commits. Like a traditional git repository, I only commit changes to Ledger’s journal files after reviewing the diffs, and I want those commits to have meaningful messages.</p>
<div id="footnotes">
<h2>Notes</h2>
<ol>
<li id="fn:cash"><a rev="footnote" href="#fnref:cash" class="footnote-return" title="return to article">↵</a> I do not always track miscellaneous cash transactions less than $20. If a thing costs more than that, it is worth tracking, regardless of what it is or how it was purchased. If it costs less than that, and it isn't part of a meaningful expense account, I'll probably let laziness win out. If I buy a $8 sandwich for lunch with cash, it'll get logged, because I care about tracking dining expenses. If I buy a $1 pencil erasure, I probably won't log it, because it isn't part of an account worth considering.</li>
<li id="fn:annex"><a rev="footnote" href="#fnref:annex" class="footnote-return" title="return to article">↵</a> I bet you <a href="/tag/annex/">saw that coming</a>.</li>
</ol>
</div>Experience at the Bitcoin ATM2019-08-27T00:00:00-07:002019-11-11T16:03:59-08:00Pig Monkeytag:pig-monkey.com,2019-08-27:/2019/08/btc-atm/<p>Recently I had need of Bitcoin. For a thing.</p>
<p>I decided to use this need as an excuse to try a <a href="https://en.wikipedia.org/wiki/Bitcoin_ATM">Bitcoin ATM</a>. I’d noticed them appearing throughout town over the past few years but never had a reason to use one.</p>
<p>The liquor store that I chose had …</p><p>Recently I had need of Bitcoin. For a thing.</p>
<p>I decided to use this need as an excuse to try a <a href="https://en.wikipedia.org/wiki/Bitcoin_ATM">Bitcoin ATM</a>. I’d noticed them appearing throughout town over the past few years but never had a reason to use one.</p>
<p>The liquor store that I chose had a <a href="https://www.generalbytes.com/batmtwo/">General Bytes BATMTwo</a>. It was simple to use, but slow. After selecting the button to begin, it sat at a loading screen for a good minute. After loading, it showed me the current exchange rate for BTC (there was no option for a different currency) and asked if I wanted to deposit more or less than $1000 USD. I selected less. It then asked me to input a phone number where it could send an SMS. After giving it my number I waited around for about another minute until it sent me a message with a 5 digit number. I entered that number into the ATM, after which it allowed me to proceed.</p>
<p>It next prompted me to scan a QR code for an existing destination wallet, or to hit another button if I did not yet have a wallet created. I didn’t see any option to manually enter an address. I assumed it would want a QR code, so before I embarked on this journey of discovery I had generated a new wallet on my computer, saved its address as both a QR code and as plain text, and copied those files to my phone. Getting it scan the QR code from my phone screen took a few seconds of finagling, but this is typical of reading any barcode from a phone in my experience. After it read the code it took me to the next screen and prompted me to insert bills. This screen also showed the destination address, how much fiat currency I had deposited, and what the amount of Bitcoin received would be. I opened the text file on my phone where I had saved the wallet address and verified that this matched what it had decoded from the QR code.</p>
<p>I wanted to deposit multiple bills, but it did not indicate if I should feed all of them in at once or one at time. I decided to insert them one at a time. As I did this it correctly displayed the amount of money I had deposited. It read all the bills successfully. However, the BTC amount stayed at 0, and it displayed a loading message in one corner of the screen. This began another wait, again of about 60 seconds, until it calculated the amount of BTC I would receive. I suppose it was fetching the current exchange rate, though if it gets an updated rate at this stage I’m not sure why it wasted time fetching the exchange rate back in the initial step.</p>
<p>Once it had showed me the amount of BTC I would receive I hit the button indicating I was done inserting bills. It immediately displayed a confirmation screen that said the transaction was complete, with a confirmation of the USD deposited, the BTC received, and a transaction ID. At this point it asked me if I was done or if I wanted a receipt. I selected the receipt option to see what it would look like. It asked if I would like a receipt via SMS or email. Since it already had my phone number, I selected SMS. It immediately said that the receipt was sent, and then a few seconds later when back to its idling screen for the next customer. About a minute later the SMS receipt arrived. The message included the transaction ID, localized timestamp, USD deposited, BTC purchased, and destination wallet address.</p>
<p>I didn’t get back to my computer until about 45 minutes later. When I checked the funds were in my wallet, but I’m not sure how immediately they appeared.</p>
<p>The ATM claimed to impose no fees, but the exchange rate it offered is substandard. At the time I completed the transaction I believe the price on Coinbase was about $10,123.47. Given the amount of BTC that ended up in my wallet, the price the machine offered me was about $12,208.17.</p>
<p>Still, the process was simple, and the results quick. This is the first time I purchased Bitcoin with cash since circa 2012, when there was a service that would allow you to make a cash deposit into a random Wells Fargo account in exchange for Bitcoin. I used this service half a dozen times or so and never had a bad experience, but the whole transaction took a few hours to complete – and I remember hearing that the person who ran it was later arrested for something or other. The ATM experience certainly felt less shady.</p>
<p>From a privacy standpoint, the only personal information required by the ATM was a phone number that was able to receive a SMS. I’m not sure what General Bytes feels they are accomplishing by going through the steps for the SMS token, but it is a requirement that is easy enough to satisfy.</p>Lately I've had trouble finding prepaid debit cards in denominations greater than $50.2016-04-19T00:00:00-07:002016-04-19T21:54:38-07:00Pig Monkeytag:pig-monkey.com,2016-04-19:/2016/04/cash/<p>It’s 2016, and stuffing cash in an envelope and mailing it to a small island nation is sometimes still the best way to move money with some degree of privacy.</p>
<p>This is not the cyberpunk dystopia I was promised.</p>I stopped worrying and embraced the security freeze.2016-02-28T00:00:00-08:002016-02-28T16:18:09-08:00Pig Monkeytag:pig-monkey.com,2016-02-28:/2016/02/freeze/<p>A credit security freeze denies access to your credit file. I first learned about it last summer from <a href="http://krebsonsecurity.com/2015/06/how-i-learned-to-stop-worrying-and-embrace-the-security-freeze/">Brian Krebs</a>, but didn’t implement it until a couple months later. It took me about 45 minutes and $20 to activate the freeze with the five major credit bureaus. This goes …</p><p>A credit security freeze denies access to your credit file. I first learned about it last summer from <a href="http://krebsonsecurity.com/2015/06/how-i-learned-to-stop-worrying-and-embrace-the-security-freeze/">Brian Krebs</a>, but didn’t implement it until a couple months later. It took me about 45 minutes and $20 to activate the freeze with the five major credit bureaus. This goes a long way to reducing the threat of identify theft, with very little energy expenditure required. A proactive defense is superior to reactive monitoring services. If you need your credit pulled monthly or more frequently, constantly freezing and unfreezing your file would probably be an annoying inconvenience. For the rest of us, I’m not sure if there is any good reason not to enable the freeze.</p>Financial Defense Through Proxies2015-12-29T00:00:00-08:002015-12-30T09:14:34-08:00Pig Monkeytag:pig-monkey.com,2015-12-29:/2015/12/proxy/<p><a href="http://krebsonsecurity.com/2015/12/2016-reality-lazy-authentication-still-the-norm/">Brian Krebs’ recent experience</a> highlights PayPal’s insecurity. The convenience and ease of use of PayPal give them a wide customer base, but their inherent untrustworthiness has long been reason for concern. For as long as I’ve used the service, I’ve been concerned about external attacks, like what …</p><p><a href="http://krebsonsecurity.com/2015/12/2016-reality-lazy-authentication-still-the-norm/">Brian Krebs’ recent experience</a> highlights PayPal’s insecurity. The convenience and ease of use of PayPal give them a wide customer base, but their inherent untrustworthiness has long been reason for concern. For as long as I’ve used the service, I’ve been concerned about external attacks, like what Krebs experienced, as well as the internal threat – PayPal themselves have <a href="http://www.paypalsucks.com/">a history of freezing and diverting their users’ funds</a>. Both of these concerns can be addressed via a proxy bank.</p>
<p>In 2008 I opened an online checking account with a new bank, completely separate from the financial institutions I normally use. The account has no “overdraft protection” or any line of credit. As with my PayPal account, I keep no money in the checking account. This checking account is the only account I associate with PayPal. When I want to make a purchase via PayPal, I transfer the needed funds from my primary financial institution to the checking account at the proxy bank. Since banks still subscribe to the archaic notion of “business days”, this transfer can sometime take up to week, but more frequently completes within 2-3 days.</p>
<p>The brief wait period is acceptable to me (it certainly reduces the ability to impulse buy) and gives me a level of security that otherwise cannot be achieved with PayPal. If someone breaks into my PayPal account, there’s nothing for them to steal. Even PayPal themselves have limited ability to steal funds. If an attacker is lucky, they may gain access to the account when I’m transferring funds in preparation for a purchase. My PayPal transactions are typically low-value, so at most this lucky attacker will acquire $100 or so. That’s an acceptable risk for the convenience of PayPal.</p>
<p>In the past I used this multilayer approach for all online purchases. A debit card from a proxy checking account at a different bank with no access to my primary accounts was the only thing I would use to make online purchases. When the account was compromised, the wait period for a new card wasn’t the inconvenience it normally is, since it had no impact on my day-to-day spending with my primary accounts. I think this type of security is required for shopping online, but responsible use of a credit card can offer acceptable protection for non-PayPal transactions without the hassle of a proxy account.</p>I wrote an article about anonymous debit cards on ITS Tactical.2013-04-23T00:00:00-07:002013-04-23T00:00:00-07:00Pig Monkeytag:pig-monkey.com,2013-04-23:/2013/04/prepaid/<p>I have previously mentioned <a href="/2012/11/simon-provides-anonymous-debit-cards/">prepaid debit cards</a>. On <a href="http://www.itstactical.com/">ITS</a> I discuss using <a href="http://www.itstactical.com/digicom/privacy/how-to-use-prepaid-debit-cards-for-anonymous-cash-like-digital-transactions/">prepaid debit cards for anonymous, cash-like digital transactions</a> a bit more in-depth.</p>Gwern offers an excellent overview of Silk Road.2013-02-23T00:00:00-08:002013-02-23T00:00:00-08:00Pig Monkeytag:pig-monkey.com,2013-02-23:/2013/02/silk-road/<p>In the essay he <a href="http://www.gwern.net/Silk%20Road">introduces the website and describes his experience as a user</a> purchasing illegal drugs. It is well worth the read. I’ve spent hours on <a href="http://www.gwern.net/">his website</a> perusing his other works.</p>Simon provides anonymous debit cards.2012-11-09T00:00:00-08:002012-11-09T00:00:00-08:00Pig Monkeytag:pig-monkey.com,2012-11-09:/2012/11/simon-provides-anonymous-debit-cards/<p>Their prepaid Visa and American Express gift cards can be purchased with cash at any <a href="https://www.simon.com/mall">Simon mall</a>. No identification is required. To use the card with online merchants, you will likely need to <a href="https://www.simon.com/giftcard/">register the card</a> with an address so that it can pass <a href="https://en.wikipedia.org/wiki/Address_Verification_System">AVS</a> checks. This can be done …</p><p>Their prepaid Visa and American Express gift cards can be purchased with cash at any <a href="https://www.simon.com/mall">Simon mall</a>. No identification is required. To use the card with online merchants, you will likely need to <a href="https://www.simon.com/giftcard/">register the card</a> with an address so that it can pass <a href="https://en.wikipedia.org/wiki/Address_Verification_System">AVS</a> checks. This can be done through <a href="https://www.torproject.org/">Tor</a> with fake information.</p>
<p><a href="http://www.flickr.com/photos/pigmonkey/8170700003/" title="Anonymous Debit Card by Pig Monkey, on Flickr"><img src="https://farm9.staticflickr.com/8209/8170700003_4c97dfbaa0_c.jpg" width="800" height="534" alt="Anonymous Debit Card"></a></p>Bitcoins are not a value-store.2012-10-17T00:00:00-07:002012-10-17T00:00:00-07:00Pig Monkeytag:pig-monkey.com,2012-10-17:/2012/10/bitcoins-are-not-value-store/<p>When I first learned about the <a href="https://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a> currency a few years ago, it didn’t excite me. A purely digital currency tied to no material good seemed an interesting project, but I didn’t see that it could have the practical value of, say, a <a href="https://en.wikipedia.org/wiki/Digital_gold_currency">digital gold currency</a>. When the …</p><p>When I first learned about the <a href="https://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a> currency a few years ago, it didn’t excite me. A purely digital currency tied to no material good seemed an interesting project, but I didn’t see that it could have the practical value of, say, a <a href="https://en.wikipedia.org/wiki/Digital_gold_currency">digital gold currency</a>. When the media blitz occurred last year I took another look and reached the same conclusion. A few months later I realized I was looking at the currency all wrong: bitcoins are not a value-store, they’re a means of exchange.</p>
<p>It doesn’t matter that Bitcoins are the digital equivalent of a fiat currency, with no inherent value. It doesn’t matter if their value <a href="http://arstechnica.com/tech-policy/2011/10/bitcoin-implodes-down-more-than-90-percent-from-june-peak/">fluctuates in relation to other currencies</a>. There’s no reason to store wealth in Bitcoins (unless you’re a <a href="https://en.wikipedia.org/wiki/Speculation">gambler</a>). When you need to send money, purchase some Bitcoins and send them. When you need to receive money, accept Bitcoins and exchange them immediately for another currency. The value of the bitcoins only need to remain stable for the amount of time it takes to complete a transaction.</p>Bitcoins are not insecure.2012-10-03T00:00:00-07:002012-10-03T00:00:00-07:00Pig Monkeytag:pig-monkey.com,2012-10-03:/2012/10/bitcoins-are-not-insecure/<p>I’m no <a href="https://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a> evangelist. I have my reservations about the currency. But one common critique that consistently angers me is that <a href="http://www.economist.com/node/21563752?fsrc=scn/tw/te/pe/monetaristsanonymous">bitcoins are not secure</a> because there have been <a href="http://bitcoin.stackexchange.com/questions/3642/what-are-the-most-notable-cases-of-coins-or-wallet-thefts/3719#3719">instances of theft</a>. This is equivalent to claiming that Federal Reserve Notes are insecure because people get mugged. Secure your …</p><p>I’m no <a href="https://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a> evangelist. I have my reservations about the currency. But one common critique that consistently angers me is that <a href="http://www.economist.com/node/21563752?fsrc=scn/tw/te/pe/monetaristsanonymous">bitcoins are not secure</a> because there have been <a href="http://bitcoin.stackexchange.com/questions/3642/what-are-the-most-notable-cases-of-coins-or-wallet-thefts/3719#3719">instances of theft</a>. This is equivalent to claiming that Federal Reserve Notes are insecure because people get mugged. Secure your shit.</p>