Category: Open Source

I think Open Source Applications and Systems, like blockchain, will save the world from too much centralized power. I want to help dream up, contribute to, and maintain important applications that helps humanity be more human.

  • AutoTrader Hacking

    Long story short, my dad is in the market for a car and asked that I help him track down a good deal for a reliable cross-over. A brief conversation with AI suggests that the Honda CR-V and Toyota RAV4 are the top most reliable in the class. So, I started looking on AutoTrader.com for some local options.

    There’s a lot out there to sift through here! 😬

    Naturally, I decided to employ some automations to make the job easier.

    What is a bookmarklet?

    A bookmarklet is a TINY JS script, embedded in an HTML link, that executes in the current page context when you click it.

    <a href="javascript:(function(){alert("hello!")})()"> Click Me!! </a>

    Here try it 👉 Click Me!!

    The other cool part is that you can click/drag that link into your bookmarklets bar and run it in the context of ANY WEB PAGE!

    You can do a TON of cool stuff with that. For instance I built an entire workflow for cold outreach (marketing) on X.com. You can check that out here: https://snovak.com/2025/01/07/ai-assisted-cold-sales-on-x-com/

    Scraping AutoTrader’s listings into a usable format.

    The workflow is simple.

    • Go to AutoTrader
    • Search and setup filters for the car(s) you’re interested in
    • Click the bookmarklet
    • Paste into a spreadsheet or an AI chat
    • Have your way with the data!

    The listings are copied as CSV (comma separated values), which works pretty much every where. Paste it into a spreadsheet allows you to sort by the various columns. Or you can paste it into an AI chat and have it pick one for you.

    I even wrote a dealFinder.js script, which runs an algorithm against the results. Assigning weights to the price, miles, vehicle trim to identify some of the best deals. Seems to work well!

    You can download and try the script at: https://github.com/snovak/autotrader-listing-scraper-bookmarklet

  • “Open” means “Open Source”!

    If you claim to be “Open” in your company name, your product should be “open source”. It’s in the name. Otherwise, it’s misleading, and this getting to the point of diabolical. It’s almost like these jokers are making a concerted effort to render the “open” in any open project meaningless.

    To establish that there IS actually a naming convention for open source projects. Here is a short list of projects that use the naming convention correctly, linked to their source code.

    Networking and Security

    Programming and Development Tools

    Graphics, Vision, and Multimedia

    Scientific Computing and Engineering

    Cloud and Infrastructure

    Gaming and Simulation

    Office and Productivity

    Mapping and Data

    Operating Systems and Distributions


    … are all open source LONG before OpenAI bastardized the naming convention.

    OpenAI started with intentions of being an open source company. Elon Musk has been very public about his early support and investments in the company being under the premise of their OPEN nature. But, they double backed, and went full evil and close sourced their models, but kept the OpenAI name.

    Well, apparently that is now standard for any AI company.


    OpenAI, is NOT open source!
    OpenRouter, is NOT open source!
    ...and this just in…
    OpenCreator is NOT open source.

    It just so happens that I was thinking about building a node based UI for AI image and video generation. And, this morning I stumbled across this post on X…

    Well what do you know a UI based AI Image/Video generator? Let’s keep these retards honest and create a clone of their product and MAKE IT OPEN SOURCE.

    Feel free to follow along: https://github.com/snovak/opencreator

  • 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…)