Quicken to GnuCash

When I learned of the nonsense I would have to go through in order to move from Windows Quicken to Mac Quicken, and of the major loss of functionality, I abandoned my test-drive of Mac OSX. Then I said, "Hey! I could probably use the same instructions to move to GnuCash and reduce by one my use of paid software. (Free is a good price, right?) The following is a modified version of Intuit’s instructions for converting from Windows Quicken to Mac Quicken. I also abandoned my tentative plans to move from Windows to Mac, on the basis that I could tell I would become one of those shrill Mac users who is always complaining about the lack of parity in Mac versions of Windows programs.

  • Install GnuCash 2.2.4 for Windows
    • In Quicken:
      • Accept (or delete) all your outstanding downloaded transactions.
    • Separately:
      • Export the security list for all accounts to C:\Temp\security.qif.
        • File/File Export/QIF File
        • Enter QIF File to Export to
        • Set Quicken account to export from to All Accounts. Might have to scroll UP.
        • Set the date range to 1/1/1990 to present date. (I checked. My earliest transaction is in 1990.)
        • Include in Export = Security Lists (only)
      • Export the account list for all accounts to C:\Temp\account.qif.
      • Export the category list for all accounts to C:\Temp\category.qif
      • Export the TRANSACTIONS for all accounts to C:\Temp\transaction.qif.
    • In GnuCash:
      • Import C:\temp\security.qif
      • Import C:\temp\account.qif
      • Import C:\temp\category.qif
      • Import C:\temp\transaction.qif

The import was 95% successful. I had a few spurrious new transactions. I think they were related to splits that transferred money between accounts, and GnuCash imported both the sending and the receiving transaction as SEPARATE transactions.

It was valuing my mutual funds at $0. I ran a FinanceQuote Update (on my Mac). It opened a Terminal window, but didn’t bring it to the top. I had to move a CPAN configuration along. In the end, this did not update any mutual fund prices, so my funds are still valued at $0.

Try: sudo /Applications/Gnucash.app/Contents/Resources/bin/gnc-fq-update. Then restart GnuCash. Then, go to Tools/Security Editor, and edit each currently-owned stock/fund and enable online updates.

Close GnuCash and run: /Applications/Gnucash.app/Contents/MacOS/Gnucash –add-price-quotes /Users/kevin/Temp/Q/gnucash-2016.sqlite3.gnucash

View/Filter By, and hide the expense accounts. I don’t really want to know that I spent 21,000 on clothes over the past 25 years.

View/Double Line, to see your transactions more like they appeared in Quicken. You need to do this to see the memo/comment field.

In Quicken, I used a trick. I could handle things like appreciation and depreciation and opening balances, by creating a transfer from the account into itself, and that would make money magically appear/disappear. GnuCash treats this as 2 transactions - one in and one out. (They are linked, so deleting one deletes the other.) But the net effect is $ neutral — no increase/decrease to the balance after the 2nd transaction of the pair. I need to go through Quicken and change all of those to something else.

However, then I started trying to actually use GnuCash. It is terribly slow for things like Net Worth by year. I suspect that it calculates everything, rather than maintaining summary data. I’ve got 15+ years of data. Quicken handles it promptly, and GnuCash doesn’t. I’ll check back in on GnuCash in a year or so and see if they’ve sped it up.

Update: I’m revisiting this in 2016. It looks to be fast enough now, although still not a speed demon when loading 25 years of data. I’m going to capture the details of my 2016 adventure in Evernote, because it will contain details of my account fix-ups.

TiddlyGrande

TiddlyGrande is a plugin for TiddlyWiki, adapting it to store its data in a SQLite database.



To some people, the essence of TiddlyWiki is that it is all in a single file.  To others, the TiddlyWiki user interface is most interesting.  If you fall into the latter group, and you have LOTS of tiddlers, you may be interested in TiddlyGrande.  (There’s a story out there that TiddlyWiki becomes slow when you have thousands of tiddlers.  I don’t know how true it is.)



Note:  I haven’t published the code yet.  It isn’t ready.  Some people release code before doc.  I release doc before code.



Prerequisites:


1. Install Google Gears.  Google Gears makes SQLite available to JavaScript running in the browser.


2. You need a TiddlyWiki file.  You can get one from http://www.tiddlywiki.com.



How-to:

  1. If you have an existing TiddlyWiki with real data in it, I suggest you do this to a copy of your TiddlyWiki.
  2. Paste the content of the attached MarkupPostBody.txt into a tiddler named MarkupPostBody in your TiddlyWiki, and click the Save Changes link on your TiddlyWiki page.
  3. Copy the attached ggtiddlywiki.js into the same directory as your TiddlyWiki file.
  4. Copy gears_init.js into the same directory as your TiddlyWiki file.
  5. Refresh your browser (typically via pressing the F5 key, if you're running Windows).

Usage Notes:

  1. The first time you open/refresh your modified TiddlyWiki, it will migrate all of your data tiddlers into the SQLite database.  If you have a lot of tiddlers, this can take a lot of time.
  2. Tiddlers tagged with systemConfig are always stored in the TiddlyWiki file.  All other tiddlers get stored in the database.
  3. For non-systemConfig tiddlers, edits are immediately saved to the database.  There is no need to "Save Changes."
  4. When you click "Save Changes", it will save the entire set of Tiddlers (systemConfig tiddlers AND database tiddlers) to your TiddlyWiki file.  Don't click Save Changes if you don't want to do this.
  5. I recommend that you turn OFF TiddlyWiki's Autosave option when using TiddlyGrande.


Synchronize Two Windows PCs With Unison

Unison is a wonderful tool.  Cygwin is a wonderful tool.  Windows is the dominant desktop platform.  Synchronizing two PCs with Unison, where both run Windows is possible, with the aid of Cygwin.

Unison+Windows+Cygwin is NOT obvious to set up.  Here's what I did:

  1. Install Cygwin.  Include Open-SSH when you install.
  2. From a Cygwin shell prompt, enter "ssh-host-config". 
    1. Answer all yes/no questions with yes.
    2. CYGWIN value is "ntsec tty"
    3. Privilege separation is NO.
    4. Do not create an sshd user.
    5. Note: I run sshd under my personal user-ID instead of sshd, because service accounts don't get to access network shares, and I sometimes want that.
  3. Ensure that 'kevin' (my Windows user) has Full Control privileges (via Windows Explorer and item properties) to
    1. C:\cygwin
    2. C:\cygwin\var
    3. C:\cygwin\var\log
    4. C:\cygwin\var\log\sshd.log
    5. C:\cygwin\var\log\lastlog
  4. Using the Services applet, change the logon user for the "Cygwin sshd" service to kevin.
  5. Ensure that you can access the Windows server via ordinary ssh login.
  6. If you use any SUBST drives in Windows, you may need to add to your Cygwin .profile something like "subst K: F:\\k-drive"
  7. Make sure that unison is in a directory on your PATH on the server.  You can eventually get it to work not on your PATH, but there are so many things that can go wrong when you're setting this up that you really want to eliminate this potential source.  (Is it /cygdrive/c/bin/unison.exe or is it C:\\bin\\unison.exe or is it C:/bin/unison.exe, etc.)
  8. The first few lines of your ".prf" file look something like the following.  Note that there is a SINGLE slash between winserver and k:.  With a Unix  host, you'd have TWO slashes.  This is because your root is K:/ and it is NOT "/K:/".  In Unix, your root is /, you you get "ssh://user@host/" followed by the root "/".

 

root = K:\
root = ssh://kevin@winserverserver/k:/
servercmd =  unison-2.28.9-win-text.exe

Audiotron Setup

I still use (and love) my Audiotron.  The facts that it accesses files via SMB and does not require a TV to operate it are the chief reasons.  Setting up the Audiotron can be an epic task.  Here's a checklist to try when you get "Error accessing share" when you search for files:

  1. Check that the user ID and password at http://audiotron/filecfg.asp match the ID and password you set up on your server.
  2. Check to see if you can access the server from ANOTHER computer using the ID/password you assigned at http://audiotron/filecfg.asp
  3. Share 1 at http://audiotron/shares.asp should be \\SERVERNAME\SHARENAME\RADIO.XML
  4. Share 2 at http://audiotron/shares.asp should be \\SERVERNAME\SHARENAME
  5. "Search all folders in shared folders listed below" should be selected at http://audiotron/shares.asp
  6. Go to Control Panel/Administrative Tools/Locas Security Settings and make sure "Microsoft network server: Digitally sign communications (always)" is DISabled.
  7. Turn OFF your firewall on your PC.
  8. Does your server have more than one NIC? 
    1. Try disabling all NICs except for the one you want the Audiotron to use.  This fixed it for me one time.  The Audiotron software was written in a time when multiple NIC home PCs were rare.
    2. If disabling the other NICs fixed it, but you need to use them: right-click on the other NIC, select Properties/Internet Protocol(TIP/IP)/Properties/Advanced/WINS and DISable NetBIOS over TCP/IP for the NICs you don't want the Audiotron to use.  You have to do this on all the non-NetBIOS NICs, and you may have to reboot both the PC and the Audiotron to get it to "take."
    3. According to http://tech.groups.yahoo.com/group/audiotron/message/594 :
      1. The AT broadcasts a NETBIOS query to find the address of the host.
      2. The PC responds with ALL of its IP addresses.
      3. The Audiotron chooses the first address, regardless of whether it is for the subnet the Audiotron is on.
    4. Dunno whether the XP PC sends too many addresses or it should send the right subnet first, or whether the Audiotron is at fault for not choosing the right one.
    5. Note: It is currently taking about 45 seconds for the AT to locate the RADIO.XML file.  I wish I had a network monitor so I could see what is taking all that extra time.
  9. If you have VMWare (or VirtualBox or AndLinux or Colinux or Microsoft Virtual PC or Xen or...) then your virtual NICs count as NICs.  See the "Does your server have more than one NIC" entry above.
  10. Special note for using an Audiotron with Mac OS X (Leopard).  I was getting eDSAuthFailed in /var/log/samba/log.smbd when the Audiotron did a file search.  I changed the user-ID that the Audiotron uses to access the share to an invalid user name (one that does not exist on the Mac), and it successfully accessed the share as "nobody".
  11. To create a TOC (table-of-contents) file: http://audiotron/apidumptoc.asp?share=\\boxtop\mp3
    1. "audiotron" should be the IP name or address of your audiotron.  Mine really is DNS-name "audiotron".  \\boxtop\mp3 should be the server and share name of you music.

Organizing My Files and Folders (Directories)

I want to put all my files onto a single drive, in one Grand Unified File Tree (GUFT).  The idea is that I’ll synchronize one or more subtrees to my laptop, one or more subtrees to my iPod, etc.  I’ll also synchronize the entire tree to a second drive.  Here’s the plan:

  • offline - this is where I put stuff that I don't need available all the time.  Installs, system images that I start new systems with (or reset a messed up system back to)

Networking VirtualBox and VMware

I'm fiddling around with VMWare Player and VirtualBox VMs.  Naturally, I wanted to see if I could network between the two.  The following seems to work. (VB=VirtualBox; VW=VMWare)

  • Create a TAP adapter (Adapter 1) via VB's VirtualBox.exe running in the host.
    • Attached to Host Interface
    • Interface Name = VirtualBox Host Interface 1 (matching the device name created by TAP)
    • Cable Connected
  • In VW's vmnetcfg.exe, create:
    • VMNet0(Bridged) = Bridget to VirtualBox TAP Adapter
    • VMNet1(Host-only) = Subnet 192.168.11.0; DHCP Start 128 and End 254
    • VMNet8(NAT) = Subnet 192.168.18.0; DHCP Start 128 and End 254; NAT gateway is 192.168.8.2
    • No "automatic bridging"
    • NAT tab says VMnet host = VMnet8
  • In Windows Network Connections:
    • Ethernet-internal = DHCP
    • Cisco VPN (Not used)
    • Wireless Network Connection (Not used)
    • VMware Network Adapter VMnet1
      • Client for Microsoft Networks enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.11.1 and no default gateway
    • VMware Network Adapter VMnet8
      • Client for Microsoft Networks enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.18.1 and no default gateway
    • VirtualBox Host Interface 1
      • Client for Microsoft Networks enabled; VMWare Bridge Protocol enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.0.1 and no default gateway
  • Inside VB Windows 2000 client (Network and Dial-up Connections)
    • Host-only Connection 4 = Client for Microsoft Networks enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.0.101 and default gateway 192.168.0.1
    • Local Area Connection 3 = disabled
  • Inside VW Windows 2000 client
    • Ethernet1-VMNet0-Bridged = Client for Microsoft Networks enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.0.10 and no default gateway
    • Ethernet2-VMNet8-NAT = Client for Microsoft Networks enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.18.10 and default gateway 192.168.18.2 and DNS server 192.168.18.2
    • Ethernet3-VMNet1-HostOnly = Client for Microsoft Networks enabled; File and printer sharing for Microsoft Networks enabled; TCP/IP enabled with static IP 192.168.11.10 and no default gateway

Disk LED Flashes Once a Second

Mac OS X 10.5.1 (Leopard). Disk drive LED flashes once a second – even when booted in single user mode.  Work-around is to always have an optical disk in the DVD drive.

Keywords: disk drive led light flash flicker every second per

Outlook, VBA, Tasks, Search Folders, and Application.AdvancedSearch

I wanted to use Outlook 2003 "Search Folders" to search for Tasks.  I've got Outlook Tasks arranged in a hierarchy of folders, and sometimes I want to see all Tasks, regardless of folder.

This ought to be easy, but Search Folders are heavily biased toward email.  If you want a Search Folder for Tasks, you have to create it using VBA resembling:

Set MyOutlookApplication = Outlook.Application
SearchSubFolders = True
Set MapiNamespace = Application.GetNamespace("MAPI")
Set TasksFolder = MapiNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks)
Scope = "'" & TasksFolder.FolderPath & "'" ' #############################################################
Filter = "urn:schemas:tasks:Completed <> True"
Set Search = MyOutlookApplication.AdvancedSearch(Scope, Filter, SearchSubFolders)
ResultsFolderName = "All Tasks"
Set ResultsFolder = Search.Save(ResultsFolderName)

But using "urn:schemas:tasks" as a filter crashes Outlook.  The problem is that it isn't a valid schema.  So how do you discover valid schemas?  I Googled all over the place and didn't find a list, but there is a way to get Outlook to show you valid search schemas.

First, you have to customize your Outlook toolbar:

  1. Right-click on the main toolbar, select Customize, and then the Commands tab.
  2. Select the View category, and scroll Commands almost all the way down to the "Filter" command.
  3. Drag and drop Filter onto your toolbar or menu. (I put mine at the bottom of the View menu.)

Next, click on the top-level Tasks folder and then select Filter (from wherever you dropped it per the instructions above).

  1. Enter the criteria for your search, but do not press OK.
  2. Select the SQL tab.  You will be shown the magic incantation, including the schema, that you can assign to Filter in the code snippet above.
  3. Note that in order to Copy/Paste the query, you must select the "Edit these criteria directly" first.   (I recommend un-checking it after you Copy.)

For example, to search for Tasks that are incomplete, use the following Filter:

Filter = """http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/811c000b"" <> 1"

Near as I can tell, you have to quote the URL with a full quote mark (") and not an apostrophe (').

Instant GMail Notification

This is so twisted that I have to write it down to believe it works…

I’m running GMail Mobile on my Blackberry 8700c, with a data plan, but not a Blackberry Data Plan.  This means I don’t get to use Blackberry push email.  But I like the immediate notification of new mail that Blackberry email provides.  I don’t need it for all email, but I do need it for some.

Easy, you say – Just have GMail forward your email to your SMS.  There is a problem with that approach:

  • Long emails get broken into multiple 160-byte SMS messages.  I'm on AT&T/Cingular, and I haven't found a way to tell them that my SMS should be truncated after the first 160 bytes.  When someone sends me a couple of 16000-byte messages, there goes my 200 prepaid SMS, and they start whacking me for 20 cents per SMS.
  • GMail insists on forwarding the entire message.  I don't want to send the entire email. (See above.)

So I started looking for email forwarding service that would truncate my messages, when it occurred to me that there is a famous service that truncates messages to SMS length – Twitter.

Hmmm… In order to post to Twitter via email, I could use Twittermail.  But how to get my twits sent to my SMS?  Twitter won’t let me follow myself, soooo…  I set up a second Twitter account and a second Twittermail account.

  1. I have a GMail filter that forwards messages from VIPs to Twittermail #2.
  2. Twittermail #2 sends them to Twitter account #2.
  3. Twitter account #1 "follows" Twitter account #2.
  4. Twitter account #1 sends twits to my Blackberry SMS.

It’s actually even more complex.  I have two Blackberrys (Blackberry1 and Blackberry2).  I do have Blackberry Data Service on Blackberry2, but I don’t want to carry it around.  So Blackberry2 forwards all emails to GMail, where steps 1-4 above take over.

Surprisingly, I actually get IM notification chirps from my Blackberry within a few seconds of the original email.  (I suspect this mash-up is going to be fragile.)

Idea to follow-up on: Could I send Twits to an IM client running on my Blackberry, with IM alerts, and avoid using up my SMS quota?
Idea2 to follow-up on: Could GMail forward to an IM server via an email to IM gateway, and then I could try an IM client running on my Blackberry, with IM alerts, and avoid using up my SMS quota?