MIC-05-3 tools for finances

In preparing to meet with a financial advisor today, I was scrambling around to create a comprehensive inventory of our financial assets. It shouldn't have been that hard but I did have to do some amount of digging around. Now that I have the skeleton of an inventory, what tools should I use to fill out the outline and keep it up to date? Are there tools that will keep a financial inventory up-to-date automatically? I will work through the list at Tools and calculators - Bogleheads in search of such tools.

Let me tell you what perplexity.ai writes in response to the paragraph above:

Keeping a comprehensive inventory of your financial assets up-to-date
can indeed be a challenging task. However, there are several tools
available that can help you manage your financial inventory and keep it
updated automatically.

  1. Portfolio Management Apps: Apps like Empower (formerly Personal
    Capital), SigFig Wealth Management, Sharesight, and Yahoo Finance
    can help you manage your financial portfolio. These apps can sync
    with your existing accounts, providing real-time information on all
    your investments in one place. They offer features like tracking
    your net worth, creating a savings plan, tracking performance, asset
    allocation, and fees with easy-to-read graphs and charts. Some of
    these apps also offer automated investing for a fee, optimizing your
    portfolio and providing daily monitoring to keep it on track with
    rebalancing, dividend reinvestment, and tax-efficient
    strategies ref

  2. Budget Apps: Apps like Mint, YNAB (You Need A Budget),
    Goodbudget, EveryDollar, and PocketGuard can help you manage your
    budget and track your spending. These apps can sync with your
    financial accounts, track spending, and categorize expenses so you
    can see where your money is going. Some of these apps also offer
    features like setting up alerts when you have exceeded your budget
    in various categories, establishing goals, scheduling payments, and
    reviewing your
    investments ref

  3. Bogleheads Tools and Calculators: The Bogleheads website offers
    a variety of tools and calculators that can help you manage your
    financial inventory. These include tools for backtesting, Monte
    Carlo simulation, tactical asset allocation and optimization, and
    investment analysis. There are also tools for maintaining your
    portfolio, computing and comparing tax costs, and modeling virtually
    every aspect of a retiree\'s financial life. Some of these tools are
    spreadsheets that you can download and use to manage your financial
    inventory ref, ref

  4. Credit Card Tracker Apps: If you have multiple credit cards,
    apps like TPG To Go, Spending Tracker, Mint, Bill Tracker, and
    Credit Card Manager can help you manage your credit cards. These
    apps can track your spending, set reminders for bill payments, and
    even recommend which card to use for a particular purchase to
    maximize
    rewards ref

  5. Debt Reduction Software: If you have debts, software like
    Quicken can help you manage and reduce your debts. This software can
    provide a comprehensive view of your financial situation, including
    your debts, and help you create a plan to reduce your
    debts ref

MIC-04-5 Recycling electronics instead of programming

No programming but I did manage to bring to the ewaste collective in Berkeley years of built up electronic waste we had in our apartment, including two Macbook Pros, an iPad, my Pixel 2, two old iPhones, and many, many cables. The fall cleaning was inspired by setting up my new phone and figuring out what to do with the Pixel 4a, which I'm hanging on to for now.

PXL_20231013_223442642

MIC 04-3 Non-recursive walk of a panflute document

Next round of programming yields:

def panflute_to_bike_etree_nr(e, level=0) -> ET.Element:

    # questions about how header levels are handled as we put them into the etree
    etree = None
    stack = [(e, level)]
    # current ul_elem
    ul_elem = None
    heading_level = 0

    while stack:
        (e, level) = stack.pop()
        print("  " * level, e.tag)

        if is_inline_or_contentless(e):

            li_elem = ET.Element("li")

            # TO DO: handle rich text
            p_elem = ET.SubElement(li_elem, "p")
            p_elem.text = pf.stringify(e).strip()

            # 2 things to figure out: parent_ul (where to attach li_elem) and what the current ul_elem is

            if e.tag == "Header":
                print ("header", e.level, e.identifier, e.classes, e.attributes, pf.stringify(e))
                li_elem.attrib["data-type"] = "heading"
                li_elem.attrib["data-level"] = str(e.level)

                if e.level > heading_level:
                    # child
                    parent_ul = ul_elem
                    print ("e.level > heading_level", ul_elem)
                elif e.level == heading_level:
                    # sibling
                    # parent_ul has to be ul parent of ul_elem                    
                    parent_ul = ul_elem.getparent().getparent()
                else:
                    # e.level < heading_level
                    # uncle or higher
                    parent_ul = find_ul_ancestor(ul_elem, int(e.level)-1)

                heading_level = e.level
                ul_elem = ET.SubElement(li_elem, "ul")
                parent_ul.append(li_elem)
            else:
                ul_elem.append(li_elem)

        else:
            if e.tag == "Doc":
                etree = empty_bike_etree()
                ul_elem = etree.xpath("//ul")[0]
            else:
                # BulletList
                # OrderedList
                # ListItem
                print("block", e.tag)

            try:
                for c in reversed(e.content):
                    stack.append((c, level + 1))
            except AttributeError:
                pass

    # clean up etree by adding ids
    etree = add_ids_to_bike_etree(etree)
    return etree

MIC-04-2 some progress

My first pass -- taking a recursive approach:

def panflute_to_bike_etree(pfe) -> ET.Element:
    """
    pfe: panflute element    
    base_header_level: the base header level to use for the document
    TO DO: handle different header levels -- might need to abandon this approach in favor of non-recursive approach with a manual stack
    """

    if is_inline_or_contentless(pfe):
        p_elem = ET.Element("p")
        p_elem.text = pf.stringify(pfe).strip()
        return p_elem
    else:
        if pfe.tag == "Doc":
            etree = empty_bike_etree()
            ul_elem = etree.xpath("//ul")[0]
        else:
            ul_elem = ET.Element("ul")

        try:
            for c in pfe.content:
                e = panflute_to_bike_etree(c)
                li_elem = ET.SubElement(ul_elem, "li")
                li_elem.append(e)
        except AttributeError:
            pass
        else:
            if pfe.tag == "Doc":
                etree = add_ids_to_bike_etree(etree)
                return etree
            else:
                return ul_elem

MIC-04-1 Will structural pattern matching help me?

On my to-study list is a tutorial on PEP 636 -- Structural Pattern Matching: Tutorial | peps.python.org that I think will be useful to my work to convert the pandoc AST to a bike outline: