• Homeschool web app Work in progress.

    Lately I’m building a topics hierarchy. It could otherwise be called categories, or taxonomy, or whatever else, but for some reason, “topics” seems to fit the bill.

    This is a first run at the UI, basically I need it to add, edit, and remove a nested hierarchy of topics. Only admin users will see this, so it doesn’t have to be pretty, just functional.

    Each topic has a color, which I suppose should trickle down to it’s child topics. This way there will be some visual separation among the different lessons.

    Here I have some initial topics, generated by ChatGPT, these will certainly change. I may use KhanAcademy as a template. They have certainly put careful consideration into their taxonomy.

    Also, pay no attention to the branding. I’m still undecided between, “Homeschool Link (homeschool.ink)” or “Learnalot.net”.

    I would love your opinon @ x.com

  • Upgrading Nextcloud

    I use Nextcloud, running on a little box in my closet, as an alternative to iCloud or Google Cloud. It’s amazing, really. I’m very grateful that this open source software is available to people who have the will and wherewithal to buck the big personal data miner mafia corps. When it became obvious what these worms intend to do with our data, I started looking for a way to keep my personal data personal.

    I’ve been running Nextcloud version 22 for the last couple years. As you can see from https://nextcloud.com/changelog/ , there have been many updates and upgrades since my original installation and I’ve been quite negligent with my sys admin duties. Today, I’m trying to remedy that situation.

    I have Nextcloud running in docker. I use docker-compose to set up the environment, so I need to also upgrade through each version of Nextcloud using docker-compose, one major version at a time.

    I use this app DAILY so, I don’t want any surprises, which often happen during upgrades. So first, I’ll replicate all the data from my server to my PC. This way I have a sandbox where I can make all my changes while my production environment remains untouched. If something goes wrong.. No problemo.

    The PC is a Windows machine, so I’ll spin up an Ubuntu image to do all the transfers.

    docker run -it -v "$(pwd):/volume" ubuntu /bin/bash

    Next I’ll get the image equipped with the tools that I need to rysnc my way to a mirrored environment.

    cd /volume && \ 
    apt update  && \
    apt install ssh rsync && \
    rsync -rav --stats --progress admin@sourceIP:/path/to/nextcloud /volume -e "ssh -o StrictHostKeyChecking=no"

    Good, the transfer is ~80Gigs in my case, so that took a min.

    This is my existing docker-compose.yml You’ll also notice that I’ve specified mariadb:10.7 as that is what is currently running in the production env. I’ll upgrade that as needed.

    version: '3'
    services:
      nextcloud:
        container_name: nextcloud
        image: "nextcloud:22"
        ports:
          - 8000:80
        restart: always
        volumes:
          - ./html:/var/www/html
          - ./logs:/var/log/apache2
        env_file:
          - ./db.env
        networks:
          - proxy
          - internal_network
    
      mariadb:
        container_name: mariadb
        image: "mariadb:10.7"
        command: "--transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed"
        restart: always
        volumes:
          - ./db:/var/lib/mysql
        env_file:
          - ./db.env
        networks:
          - internal_network
    
      phpmyadmin:
        container_name: phpmyadmin
        image: phpmyadmin/phpmyadmin
        links:
        - mariadb:mysql
        ports:
          - 8001:80
        env_file:
          - ./db.env
        environment:
          PMA_HOST: mariadb
          UPLOAD_LIMIT: 300M
        networks:
          - proxy
          - internal_network
    
    networks:
      internal_network:
        internal: true
      proxy:  
        external: true

    Now that I have a sandbox to start running these upgrades, let’s just run everything once through to make sure the app is running “as-is”.

    docker-compose up -d

    The logs reported a minor upgrade, but other than that, we’re up and running.

    Let’s upgrade to the next major version now. To do that, I just increment the number in docker-compose.yml from image: "nextcloud:22" to image: "nextcloud:23" then run:

    docker-compose down
    docker-compose up --force-recreate --build -d

    Then I’ll watch my logs docker logs nextcloud to see when everything is done upgrading. You should see something like

    docker logs --tail 1000 -f daecd812fefe464712b9b6717cb6e2a3d842260e0c64c63ec88ea22e2edb9623 
    
    Initializing nextcloud 25.0.3.2 ...
    Upgrading nextcloud from 24.0.9.2 ...

    … but with the versions you’re currently updating. The update between 22 and 23 just worked.

    Be sure to update all the apps to the new version in between each upgrade with php ./occ app:update --all or through the web UI.

    It was between 23 and 24 where I needed to upgrade mariadb as well. In this case, I’m now using mariadb:latest. Then attach a shell into that container and run mysql_upgrade --user=root --password=rootpassword

    If you catch a snag at any point, your best bet is to attach a shell into the nextcloud container and run php ./occ upgrade. If you are dealing with file permission issues, try attaching to the shell as the owner with: docker exec -it -u 33 nextcloud bash where 33 is the user #.

  • ChatGPT – Scaffolding a Nextcloud Plugin

    ?

    I’m continually impressed by ChatGPT. This morning I thought it would be really nice to be able to track my health statistics on Nextcloud, my private cloud that I have running just behind me in my closet. What a cool little project to give to ChatGPT and see how quickly we can get something up and running. It’s 8am on a Tuesday morning, I’m back to work on my day job, but I have about an hour to fiddle around with it. Let’s see how quickly ChatGPT can get this started….

    (more…)
  • Vosk on-device Speech-to-text

    Since I’ve started using GrapheneOS, a deGoogled Android build, I’ve missed several services you typically get from Apple or Google on my device, one of those core services is Speech-to-Text. It helps a lot to speed up note taking, writing text messages, etc.

    I’ve been using a very crude Vosk keyboard on Android to fill the gap. I’d love to try to improve upon this project, but for today I’m interested in getting this functionality in Gnome, my Desktop of choice on Ubuntu Linux. This is not meant to be a tutorial, but more of a journal entry.

    (more…)
  • ChatGPT for Homeschool Planning.

    I’ve been absolutely blown away by ChatGPT. I’m still reeling by the implications of it’s abilities. I’m hoping it only improves from here, as I suspect it will be dumbed down as it starts to impact some high-level professional job positions.

    There are quite a few ways that we might use ChatGPT to plan for homeschool. It’s GREAT at generating lists. Now, our primary task is simply to ask good questions.

    (more…)
  • Lessons Learned, First Year of Homeschool in Review

    Ahh Summer! We are currently on our Summer migration North to Maine, from Florida. Now is a good time to revisit the past year in review. Spoiler alert, it was a huge success. In this short article I’ll cover where we started, what worked, and how we adapted through our first year of homeschooling our daughter, Eva.

    (more…)
  • One small bet, Learnalot.net

    My wife and I have started homeschooling our daughters since the last year. Personally, I’ve been pushing for it long before COVID. But, since that’s become such a concern, we decided to give it a shot and see how it goes. One year in, we’ve all fallen in love with it. I can’t imagine that we’ll ever go back to public or private school for a NUMBER of reasons, most of which I won’t get into in this post.

    Goal Number ONE of home schooling is to help my daughter find a “Love for Learning”. That in mind, we’ve taken an Eclectic approach to Homeschool. Initially, we started schooling the way we were all used to. Several classes, in well accepted common areas of study, consecutively spaced throughout the day. But what we’ve found is what I think everyone already knows. That’s a super tedious slog for ANYONE. Why is it most kids dislike school? Disinterest in the content, probably in large part. “Eclectic Homeschooling”, as well as “Unschooling” are good remedies to keep the attention of even the most over stimulated ADHD children.

    (more…)
  • Building a Conversational AI Chatbot + 3D Avatar

    The goal for this project is to build a voice-to-voice CAI (Conversational AI) integration with an interactive 3D Avatar. Initially, it will integrate with SAP Conversational AI, which despite it’s name, is a text-to-text service. So, round trip looks like voice-to-text => CAI => text-to-voice, out to the user. Hopefully the performance isn’t terrible.

    Here’s where I am so far on this project…

    (more…)
  • Starting again

    I’m rebooting this old site into a WordPress blog, as well as this ancient Twitter account, to keep track of my entrepreneurial endeavors. I recently joined an interesting group, run by dvassallo around making small bets. Building small products, SaaS, Educational, physical, and otherwise. Little products, that when you sufficiently define and execute them, they add up. Hopefully, they add up to a steady income stream, which might someday turn into a living wage and ultimately financial freedom. That’s where I’m going. Hopefully, I get there before I retire from my day job.