Blog

  • 5 Ways AI Helped Me Handle My Mother’s Passing

    5 Ways AI Helped Me Handle My Mother’s Passing

    AI and End of Life

    This article is not about Skynet and AI ending all life on Earth. šŸ˜‚

    I recently lost my mother. And my job. It’s been a stressful and difficult time, and something I had never really prepared for. I had lots of questions and tasks: managing her estate, dealing with her taxes, dealing with my taxes, organizing her contacts, planning a celebration of life, preparing to livestream the celebration, and even figuring out what I wanted to say for a eulogy.

    As an AI enthusiast I instinctively turned to AI to help me navigate these many activities and challenges. I found AI to be an invaluable tool. I’m going to detail how I have been using it over the past few months to assist with end of life tasks.

    Data Mining for Contacts šŸ—ƒļø

    As I began planning a celebration of life I wanted to make sure I invited all of my mother’s friends and connections. She wasn’t very organized about her contacts and addressbook—some were in her phone, some were in an email account she shared with my late father, and others were in her gmail account. Still more were scribbled on various notes throughout her office šŸ¤¦ā€ā™‚ļø.

    She corresponded with many people who weren’t recorded in her contacts/addressbook, so I knew I needed to scan her emails to find email addresses of personal contacts. I exported and downloaded all of her emails from both accounts, and exported her iPhone contacts. Her MBOX files were gigabytes of data so I knew I couldn’t just upload them to ChatGPT and expect AI to data mine it for me.

    I’ve been a Python developer since before the turn of the century, and it’s one of my favorite tools for processing and transforming data. MBOX files and email headers aren’t that complicated to parse, but I wanted to experiment with AI and see if it could speed up my development process.

    I asked ChatGPT for its help to write a Python script to process the MBOX files, look for email addresses and store them in a SQLite DB. I also wanted to record some contextual metadata with each occurrence of an email address. Was it from a sender or to a recipient? Were there telltale signs of a listserv in the email headers? How many interactions were there with each email address? I chose SQLite because it’s simple and fast for querying the data (and I wasn’t yet sure what I wanted to query).

    I then made a second script to process the SQLite DB and filter for email addresses that matched certain criteria. The script was able to parse a separate list of contacts from an addressbook CSV file, cross reference any email address with it and fill in the person’s name if it wasn’t parsed from the email. And then it output a new CSV with each contact, their first and last name, how many occurrences were found, and whether the address was categorized as personal or listserv. The script also had some filtering parameters to limit the output to only personal addresses, or require a minimum number of occurrences.

    Along the way I found discrepancies and anomalies in the output. I worked with ChatGPT to refine the scripts, for instance when I discovered a pattern of email addresses that were re-sent through yahoogroups.com (eg: someone%40comcast.net@yahoogroups.com).

    Eventually I arrived at a tool that worked pretty well for my needs. It was able to sort through gigabytes of data and arrive at a list of about 160 contacts which appeared to be real people with whom my mom had interacted with online over the past 25 years. This list became the basis for the invitations I would later send out for her celebration of life.

    I’ve published my ContactsScraper on GitHub in case anyone else may find it useful.

    Financial Planning šŸ’ø

    DISCLAIMER: Talk to your attorney and accountant/tax preparer. Do not rely on AI to make any legal or financial decisions.

    I inherited a small IRA from my mother, so had lots of questions about what to do here. What is a required minimum distribution? How much is it? What would this do to my taxes? How much debt could I afford to pay off without bumping myself into another tax bracket? Can I afford a new roof for my house? ChatGPT helped me answer a bunch of these questions and model several different scenarios. Then I called my accountant and discussed my plans with her and she confirmed what I had modeled.

    I provided as much specific information as I could about my finances and my mother’s IRA to ChatGPT. I’m not going to post any of that information here or any of the results, for obvious reasons. However, I found this to be a valuable process.

    As I iterated on the financial models new questions and considerations came to mind. How much interest am I paying on this chunk of credit card debt? How much in additional taxes will I pay by taking a larger IRA distribution, and how does that compare to the interest saved? What if I underpay my taxes? Below are some examples of prompts that I used to figure out how best to use this modest windfall.

    Prompt 1: Basic IRA Withdrawal vs.Ā Credit Card Debt Tradeoff šŸ’¬

    ā€œI have an inherited IRA worth $100,000 and $50,000 in credit card debt at 19% interest. I’m considering taking a distribution from the IRA to pay off the debt. What are the tax consequences of taking out $50,000 in a single year? Should I spread the withdrawals over multiple years to reduce the tax impact?ā€

    Prompt 2: Modeling Partial Withdrawal Strategy šŸ’¬

    ā€œAssume I’m in the 22% federal tax bracket. If I take $25,000 from my inherited IRA this year and another $25,000 next year, how does that compare (in terms of taxes and interest saved) to taking the full $50,000 this year to eliminate my high-interest debt immediately?ā€

    Prompt 3: Safe Harbor and Withholding Adjustments šŸ’¬

    ā€œIf I take a $40,000 distribution from my inherited IRA and don’t adjust my withholding, could I owe an underpayment penalty? What’s the safe harbor threshold for avoiding a penalty, and how might I adjust my estimated tax payments to stay in the clear?ā€

    This sort of financial modeling is something I usually try to do myself with spreadsheets. Depending on the complexity and my familiarity with the topic it might require an hour of research before I even start writing the spreadsheet. Then as I enter data and model the answer I’ll spend hours more tweaking the spreadsheet columns, cell formatting, formulas, and trying to build a model that would help me visualize and understand different financial scenarios.

    In less than half the time it would have taken me to build a bunch of custom spreadsheets by hand ChatGPT helped me by generating charts and graphs, as well as asking clarifying questions that helped me provide better input. ChatGPT was like a financial planner that helped me get hands on with exploring various options.

    Creative Support āœļø

    ā€œA eugoogalizor, one who speaks at funerals. Or did you think I’d be too stupid to know what a eugoogoly was?ā€ – Derek Zoolander

    I’ve never written a eulogy before. I spoke at my dad’s funeral but aside from an anecdote I had thought of the day before it was largely spontaneous and I didn’t write it down. I wanted to plan a more comprehensive and heartfelt eulogy for my mother’s celebration of life.

    Let me be clear: I did not use generative AI to write my mom’s eulogy. I did use it to give some broad examples of how to approach it, and what elements to incorporate. It helped me establish an outline and plan to fill 5-10 minutes of time. At a high level:

    • Welcome & Thanks
      • acknowledge out of town family and those who couldn’t be here
      • special thanks to volunteers and key providers of support
    • A Difficult Year
      • talk about some of the struggles she’d been fighting through
      • acknowledge her grace and cheerful disposition through it all
    • Her Favorite Things
      • talk about some of the decor and memorabilia and how it relates to her
      • walk through the themes and give an anecdote or two–aim for some levity
    • Who She Was to Others
      • mention her career and impact
      • mention her volunteer work
    • Personal Reflection
      • talk about what she did for our family
      • the values I learned from her
      • how I will remember her
    • Closing
      • toast to her memory
      • invite others to speak

    It’s very personal so I won’t share exactly what I wrote, but the above outline really helped me focus my thoughts. It gave my speech a good cadence/flow, and helped me cover many of the essential memories and stories about her that I wanted to share.

    One thing I will share is my mom’s love of the Mona Lisa. She collected all sorts of artwork and knicknacks featuring that famous smile. I was planning a livestream of the celebration of life and knew I wanted to feature the Mona Lisa. I used Dall-E to generate a version of the Mona Lisa aiming a DSLR camera at the viewer, upscaled it to a large size and then added a speech bubble and disclaimer text, as you can see below.

    I then had this blown up into a 24ā€ x 36ā€ mounted poster and propped it up next to the livestream station, which I will elaborate on in the next section.

    Livestream Planning šŸ“¹

    I knew many of my mother’s family wouldn’t be able to travel and join us in person at the celebration of life, so I decided to do a livestream and recording of the event. I had never done a livestream before and figured I’d need some near-professional equipment in order to do it right. My kids are interested in becoming YouTubers, so I figured I could invest in some quality equipment for this event and work with them later on their own video streaming content.

    Naturally I turned to ChatGPT to help me plan the livestream.

    I could probably write an entire article about the hardware, software, various accessories, setup, and event planning. I probably will someday, perhaps the next time I use this equipment to livestream an event. This event was a success and the final edited video of the event was greatly appreciated by many people.

    I started by setting a clear goal for ChatGPT: create a professional, reliable livestream setup for your mother’s celebration of life that would both honor her memory and make the event accessible to remote guests. I wanted to not only broadcast and record the eulogies, but also set up a ā€œgreeting stationā€ where guests could see a preview of themselves on an iPad and leave a message, story, or greeting for remote guests.

    I gave ChatGPT a list of hardware I already had (like my MacBook Pro and iPad Pro), but asked for assistance choosing a good camera, indoor lighting options, microphone(s), tripod, video encoder, and other equipment. For each item ChatGPT usually offered a few different options and recommendations depending on budget and needs.

    I definitely spent a few hours researching many of the options (particularly the big ticket items like the camera), but eventually settled on a list of semi-pro equipment that I felt would give me the best bang for my buck:

    On the software side of things ChatGPT recommended OBS, an open-source streaming/recording tool which was a breeze to set up and connect to YouTube. For post-production and editing the recorded footage into a polished video I used iMovie. It’s pretty basic, but is free with macOS. I think next time I do something like this I may invest in Final Cut Pro, but as I’m not a pro who does this for a living I think Adobe Premiere Pro is probably overkill.

    ChatGPT even offered to make a ā€œday ofā€ checklist for me to help me configure the whole end-to-end livestream setup. I didn’t bother with this but did ask a few troubleshooting questions (eg: about XLR to TRS microphone conversion) while setting up at the event.

    Overall the event was a wonderful gathering of people and sharing of memories and stories about my mother. I don’t know that many remote relatives tuned in to the livestream, but they definitely appreciated the edited recording I eventually created and shared.

    Post-Production Challenges šŸŽ›ļø

    A few days later I sat down in front of my MacBook intending to do a little editing and create a version of the celebration of life which I would post to YouTube and share with family and friends. This is when I discovered the audio was terrible.

    I thought I had correctly connected to the in-house AV system using a jury-rigged XLR to TRS converter for the microphone. However it sounded like the only audio that was picked up was from the camera’s built in mic. It captured the sound from the house speakers–as well as any nearby chit-chat, laughter, or applause from guests.

    With a few suggestions from ChatGPT I was able to manually clean up the audio enough that the eulogizers were mostly intelligible:

    • Apply the ā€œEnhance Audioā€ feature
    • Use the ā€œVoice Enhanceā€ filter
    • Reduce Background Noise (40% worked pretty well in my case)
    • Lower Gain or Volume on Peaks (manually select moments of applause or laughter and reduce the gain)

    I also came up with a shopping list of additional microphones and equipment (like a good XLR to TRS converter) so that next time I livestream an event I would be prepared.

    Final Thoughts

    What I found during this whole process was that AI can not only be a valuable resource for dealing with the variety of unexpected questions and issues that may come up when you have lost someone, but surprisingly I think it helped me cope with the grief.

    I spent a lot of time on my computer working on the tasks detailed in this article–and through it all AI appeared to lend a supportive and sympathetic ear. AI helped me stay focused on the tasks I needed to get done and create a wonderful memorial for my mother.

    What surprised me the most about AI’s capabilities was how natural it felt. It almost felt like a friend on the other side of a chat app who was there to help me figure out how to manage anything that came up–whether it was finances, tech, or how to write a eulogy. Other times AI was simply there to cheer me on and celebrate a small success.

    AI is being incorporated into everything, but I don’t think I’ve seen it used for end of life planning and services. It makes me wonder if there is an opportunity here for a startup.


    I’d love to hear how you have used AI to navigate end of life issues. Do you know of a startup that works in this space? I think this is an interesting and possibly untapped area for AI.

  • Markdown Writing Workflow: How I Write 3x Faster

    Markdown Writing Workflow: How I Write 3x Faster

    The Power of Writing Everything in Markdown First

    I’ve been writing tons of resumes, cover letters, and blog posts lately. Word processors felt cumbersome—too much time formatting, too much repetitive work. Then I realized: why not approach writing like an engineering project?ā€ Instead of jumping straight into WordPress, Google Docs, or Apple Pages, I now write everything in VSCode using markdown.

    Blog posts, resumes, cover letters, interview notes, writing assignments… they all go into markdown first. Then I use Pandoc to convert them to whatever format I need.

    The results? I’m faster, more focused, and my content is way more portable.

    Why Markdown Makes Sense šŸ“

    I find writing in a word processor to be distracting—there are so many formatting choices. I just want to focus on the content and have a standard format for the output. This is why markdown appeals to me. It’s simple and consistent.

    Perhaps it’s the engineer in me, but I feel like I have more power and control over the structure of my writing. It’s easier to ā€œrefactorā€ the structure of my prose and move ideas around for a better flow.

    Markdown gets all the formatting out of the way. You focus purely on content and structure. The syntax is dead simple: **bold**, *italics*, # headers, - lists, and [links](url) — but nothing more.

    Why VSCode? ⚔

    VSCode helps keep my files organized, easy to find, easy to search, and fast to switch context. It’s a fast, flexible text editor, and extension support for Markdown and other formats is a huge time saver.

    All of my files are organized into folders in a single project. When I’m done writing a resume I can quickly switch to my cover_letters folder, create a new markdown file, copy/paste my boilerplate contact info, salutation, and start writing.

    Also VSCode has a great built-in preview that lets you see how the markdown will render. The stroke of a few keys (Cmd + shift + V on macOS) and you can see the results instantly.

    The Secret Sauce: Pandoc šŸ”§

    I use Pandoc to do my conversion. It’s a simple command line tool that you can run from the terminal inside VSCode. I used to keep Terminal windows open all over the place to run command line tools, but using the terminal integrated into VSCode helps keep everything organized and in one place.

    Project Structure šŸ“‚

    I mentioned using VSCode to keep my files organized. Here’s a rough sketch of my project structure:

    writing/
    ā”œā”€ā”€ blog/
    │   └── formatted/
    ā”œā”€ā”€ assignments/
    │   └── company_x/
    │   └── company_y/
    ā”œā”€ā”€ resumes/
    │   └── formatted/
    ā”œā”€ā”€ cover_letters/
    │   └── formatted/
    └── interviews/
        └── company_x/
        └── company_y/

    I keep the markdown organized into top-level folders (blog posts, assignments, resumes, interviews, etc.) and for interviews and assignments I use sub-folders for each company. Any place I want to generate a formatted version from markdown I use a formatted sub-folder.

    On occasion if I feel the need to do some custom formatting in a wordprocessor I add some notation to the edited filename (eg: resume_company_x_edited.docx) as a reminder not to blow it away by re-generating from the markdown.

    Version Control with Git šŸ“‹

    Since I’m treating writing like an engineering project, I use Git to track all my markdown files. This gives me powerful revision history, the ability to see exactly what changed between drafts, and easy restoration if I mess something up.

    VSCode’s Git integration makes this even better—I can see at a glance which files have changes, view diffs right in the editor, and commit directly from the IDE without switching to the terminal.

    I keep a .gitignore file that excludes the generated content:

    # macOS
    .DS_Store
    ._*
    
    # Ignore generated formatted files
    */formatted/
    *.pdf
    *.docx
    *.html
    
    # But keep the reference template(s)
    !reference.docx

    This way my repository stays clean with just the source markdown files, but I can still track my reference templates. The formatted outputs are disposable since I can regenerate them anytime with pandoc.

    The Workflow šŸš€

    Here’s what my typical workflow looks like now:

    1. Open VSCode and create a new .md file in the appropriate folder
    2. Write the entire piece without worrying about final formatting
    3. Preview the markdown in VSCode and make sure it looks good
    4. Convert to whatever format I need (HTML for WordPress, DOCX for resumes, etc.)
    5. Proofread the formatted version (check fonts, margins, spacing, etc.)
    6. Upload the formatted version to WordPress, a job application, or anywhere you need it

    I have a bunch of aliases for pandoc that make the conversion process a breeze. Add these to your ~/.bashrc or ~/.zshrc file to make them available in your terminal.

    # HTML for blog posts (clean, WordPress-friendly)
    md2html() {
        pandoc --no-highlight --wrap=none -t html -o "./formatted/$(basename "$1" .md).html" "$1"
    }
    
    # DOCX with reference template
    md2docx() {
        pandoc --reference-doc=reference.docx -o "./formatted/$(basename "$1" .md).docx" "$1"
    }
    
    # PDF via LaTeX
    md2pdf() {
        pandoc -o "./formatted/$(basename "$1" .md).pdf" "$1"
    }

    Each format serves a specific purpose: HTML works perfectly for pasting into WordPress or web platforms, DOCX is what most job applications expect for resumes and cover letters, and PDF is ideal for sharing finalized documents that need to look identical everywhere. You can use PDF for resumes and cover letters, but I have read that some ATS scanners can choke on it, which is why I stick to DOCX.

    Making a Reference DOCX Template āš™ļø

    To create a reference DOCX template, start by generating a basic one from any markdown file: pandoc sample.md -o reference.docx. Then open this file in Microsoft Word (or your favorite word processor which can export to DOCX) and customize all the styles you care about: fonts, margins, headings, paragraph spacing, etc. The key is to modify the actual Word styles (like ā€œHeading 1ā€, ā€œNormalā€, ā€œStrongā€) rather than just formatting individual text, since pandoc maps markdown elements to these named styles. Save the file, and now every time you use --reference-doc=reference.docx, your converted documents will inherit this formatting. You only need to set this up once, and it works great for making professional-looking resumes and cover letters that maintain consistent branding across all your materials.

    You can also put this file somewhere central like ~/.pandoc/reference.docx so you can easily access it from anywhere. However, for my workflow I like to keep a separate reference.docx in each project folder so I can easily customize the formatting depending on the type of content.

    The Portability Game-Changer šŸŽÆ

    The portability of using markdown and Pandoc is incredible. I usually generate my resumes into DOCX format because I think ATS scanners sometimes choke on PDF, but if you want it in PDF it’s just a one line command.

    The learning curve for Markdown is minimal too (although if you’re an engineer you’re already probably familiar with it). If you can remember that # makes headers and **text** makes things bold, you’re 90% there. GitHub has a great tutorial on using Markdown. It’s very handy if you need a quick reference or refresher.

    Future Automation Ideas šŸ”®

    I’m planning to automate this even further. Git hooks could automatically regenerate formatted versions whenever I commit changes. Imagine pushing a blog post update and having the HTML automatically ready for WordPress!

    I’m also thinking about a simple script that can create new WordPress posts directly from my markdown files and leveraging WP-CLI.

    The best workflows are the ones that get out of your way and let you focus on what matters: the actual work.


    Have you tried writing in markdown? I’d love to hear about your workflow experiments.

  • Did I Write This… or Did AI?

    Did I Write This… or Did AI?

    I’ve been spending a lot of time on LinkedIn lately as I navigate the highly competitive job market. I won’t lie–I have used ChatGPT in my job search. Full disclosure: AI did not write this article. I did. (Dall-E did provide the featured image.)

    Before I dive into AI I want to talk about writing. Not everyone is a great writer in English. I recently received a glowing recommendation on LinkedIn from a former employee for whom English is a second language. Part of me wished he wrote it with typos and all because it might appear more genuine. Except that knowing how AI works I am certain he put some effort into crafting a prompt with details about how he experienced working with me, mentoring, and career coaching. AI spit out the final product, but he gave it the inputs.

    I grew up in the United States in a middle class family where both parents had Masters Degrees in education. My father was a published author. I’ve always enjoyed reading and writing, done well in school and taken creative writing classes in college. I take pride in the fact that I can write well and communicate with the written word–whether it’s an email, Slack message, Confluence page, year end review, or commit message.

    Not everyone is so fortunate. So it seems to me that a tool like ChatGPT can help take some raw input and produce polished output. This can really level the playing field for some people!

    As a job seeker I find ChatGPT to be an invaluable tool. First and foremost I use it to review my cover letter and resume for typos and word choice. It’s like having a collaborative editor. But sometimes there is a little writers block and it can be useful to provide the job description, some notes on how your experience is a good fit for the role, and then take the result and make it one’s own. Much of the time the output sounds too polished, too generic, and too insincere. However, I’ve found it’s a starting point.

    Take the AI-generated content and make it your own. Think of it as a framework and add in your own experiences and wording. In a resume or cover letter nothing will substitute for your own experience and voice.

    This brings me to my last observation. I’ve seen a lot of LinkedIn posts from recruiters and hiring managers to the effect of “if I think you used AI I’m going to reject your application.” I can’t help but think how unfair that is to talented people for whom English is a second language, or who perhaps don’t have the same flair for expressing themselves in writing in English.

    AI is a tool. We’re all still learning how to use it and navigate this radically changed landscape–whether it’s writing code or cover letters. Let’s try to assume good intent. Sure some people will probably use AI to do their homework, but others might use it to help level the playing field a bit and make sure their resume makes it through the scanners… and you never know if that polished cover letter you threw out was crafted with care by a talented writer.

  • Long time no see…

    Long time no see…

    It’s been a while! Got laid off. Mom passed away. And the backdrop? World going to hell.

    My mom had been battling a variety of health issues this past year and at least I had the time to spend with her. Fortunately I had the support of my wife and her family.

    I will give Sonos credit for giving me the time to take her to appointments and be with her when she was in the hospital—but I’d have preferred FMLA to a layoff. (I still think they make great products, FWIW.)

    My wonderful wife and her sisters helped me clean out her co-op. It’s still not done but we made a ton of progress—and we had fun discovering some amazing memorabilia. I can’t wait to share some of it at her celebration of life—at the Paramount Theatre in Seattle! (The featured image is a pair of her boots I found).

    My mom volunteered at the Paramount for many years and I never knew what a community of friends she had built there, as well as at the Opera and Ballet. It’s really special that we’ll be able to remember her at such a gorgeous and historic site!

    For me the Paramount was where I saw my third live concert; my dad took me to see Weird Al Yankovic (don’t ask which tour because it will date me—as will the artists of my first two concerts).

    Anyhow, I’ve never felt like I had time to work on this cobwebsite, but now that I’m job hunting (and reluctant to give my content to LinkedIn gratis) I will try to post here semi-regularly.

  • LEGO IKEA Hack

    LEGO IKEA Hack

    My kids are getting in to LEGO so I decided to up the ante with a pretty simple IKEA hack. I bought and assembled the Trofast toy storage unit and covered the top with off-brand baseplates.

    I found some good instructions for cutting the baseplates to fit. It’s pretty easy with a box cutter (use a sharp blade) and a steel ruler. I used some LEGO pieces on the baseplate to act as a guide for the ruler and to make sure I cut in a straight line. I ended up making a pattern of blue (water), green (grass), and gray (concrete/lunar) for the baseplates. I used two blue, four green and two gray baseplates. The vertical panels on the sides of the Trofast are not flush with the top, so I arranged the baseplates to only cover the top panel, not the edges of the side panels.

    I figured the glue would stick to the Trofast better if I sanded the finish. I took some coarse sandpaper and spent a few minutes turning that glossy veneer to a matte finish. For glue I recommend using Gorilla Glue. My first attempt was with a glue gun, and it was terrible. The glue hardened before I could get the plates positioned and the glue wouldn’t smoosh flat. It also peeled right off the Trofast and stuck to the baseplates. I spent at least an hour peeling glue off the baseplates.

    The top panel of the Trofast is about 37.25″ x 17″ (this is not exact). A 10″x10″ baseplate has 32×32 studs… so the end result is 119×54 studs. If you want to get more creative than I did you can cut almost any pattern you want with your baseplates. There are also smaller 5″x5″ baseplates which would allow you to easily create more intricate patterns (also if you don’t want to cut baseplates you could use them whole and design a 35″x15″ pattern and center it on top of the Trofast.

    Follow the Gorilla Glue instructions and make sure the surfaces are clean before you begin. Use a damp cloth to moisten the underside of the baseplate. I used some LEGO bricks to connect the baseplates together, in order to ensure they were positioned correctly and enable building structures across them. I glued two plates at a time by making a rectangular spiral pattern on the Trofast—with the glue inset about 1ā€ from where I wanted the baseplates mounted. I found that if I used too much glue (use thin lines of glue) and got too close to the edge, often some excess glue would seep out from underneath the edge of the baseplate.

    Once you have applied the glue and positioned the baseplates, use some bricks to connect to the neighboring baseplates and ensure the whole thing is lined up properly and not askew. Finally put a stack of heavy books or other weights on top of the baseplates and let it cure for 2 hours. Repeat these steps with each set of baseplates until the top of the Trofast is covered.

    Sorry I didn’t take more pictures during the cutting and glueing process–but it was pretty straightforward, especially if you have the right glue.

  • Hello world!

    Hello world!

    A recent technical issue forced me to redo this website again. I don’t enjoy spending a lot of time working on this site. For now there’s not much to see—just some info about me and Zolite.