Get Productive!

getproductive.net

github.com/jonlervold/getproductive-frontend

Get Productive! is a tool for quickly tracking, categorizing, sorting, and filtering all sorts of projects and tasks.

This project arose as the result of personal needs. For years, I have used the whiteboard in my studio/office to keep track of all the things I would like to accomplish. But a whiteboard has a limited amount of space, is a pain to reorganize, and can only be modified if you’re standing right in front of it. That system can make it difficult to figure out what to prioritize. I looked at existing digital solutions but didn’t find anything that really thrilled me, so I spent a little time to make an application tailored to my personal desires.

Projects can be defined/sorted/filtered by:

  • Name
  • Priority
  • Difficulty
  • Length of Time to Complete
  • Estimated Cost / Resulting Income
  • Created Date
  • Deadline Date
  • Started Status
  • Blocked Status (i.e. if there’s anything preventing completion)
  • User-Defined Categories
  • Additional Comments

Filtering criteria can be stacked, so it’s easy to quickly see any combination of properties that the user can think of (e.g. show all projects that have a deadline that have not been started, show all projects that are set to high priority that can quickly be completed, et cetera).

Projects can be marked Completed, sending them to a separate list from the Ongoing projects, or they can be sent to the Trash, from which they can be permanently deleted.

The application has a fully encrypted JWT-based authentication system with the ability to create/verify users and reset passwords via email. I’ve been wanting to learn how to build a secure authentication system from scratch for a while now, so this was a good excuse to take on that technical challenge.

If it looks interesting, create an account and give it a try!

TabArea.net Version 2.0 – With Advanced Search!

tabarea.net

tabarea.net/search

github.com/jonlervold/tabarea

TabArea.net has been updated! Over the last few weeks I have spent pretty much all of my free time working on upgrading the site. I am very pleased with the results and hope that this provides utility to those who, like me, still use TabIt.

What’s changed?

  • An advanced search function has been added to help find Tabs, Users, and Folders. Items may be searched by many parameters. Parameters may be stacked to run advanced queries.
  • The broken search bars on the left side of every page have been replaced with new, functional search bars.
  • The other broken functions that were present on the original mirror (“show album titles” buttons, download zip links, login pages, ratings pages) have been removed.
  • All links to that route to TabIt.net now open in new windows/tabs. The “Home” link in the header has been changed to a pair of TabArea Home and a TabIt Home links.

Some background and technical info from the GitHub Readme for the project:

TabArea.net was created by using WGET to scrape TabIt.net's Tablature Area.

WGET simply starts on whatever link you first give it, converts it to a static HTML file, and adds every link present on that page to a list. It repeats this process for every link on the list until it has found every link on the entire website.

For the Tab Area, this process resulted in ~350,000 HTML files, along with the ~44,000 TBT files.

Turning a PHP-based site into a static HTML site can break a lot of features. The most sorely-missed functionality of the scraped version was the ability to search. As one would expect, it is much more difficult to find anything on the site without it.

In early 2023, I learned how to use Puppeteer and thought it would be a perfect tool to scrape TabArea.net, examine each static HTML file, and create a proper database of all the information present on the site. Once that would be complete, I could build a search function. After announcing these plans, TabIt compatriot Ryan Leber let me know that he had already completed this task with an app he built in Python! He sent me the complete SQL dump and it was exactly what I was planning on creating. That part of the work was already done! Score. Thanks Leber.

Once the database was in place, there was still a lot of work to be done.

Frontend
The TabArea Advanced Search frontend is a React App. This element makes up the majority of the repo.

The Advanced Search page is intended to maintain TabIt's classic Web 1.0 aesthetic. I wanted it look like it had always been a part of the site, despite being powered by React. Since the files this app searches can only be used on a desktop computer, it is designed primarily for use on PC. That said, it should still be entirely usable on mobile.

Backend
The TabArea Advanced Search backend is written in PHP. These files are in the php_backend folder.

Other
The python_utils folder contains two scripts. The TabArea update plan involved removing various site functions that were no longer operational after the site had been converted to static HTML files. With these broken elements removed, hundreds of thousands of the HTML files serve absolutely no purpose.

The first script deletes all the unnecessary files. This was a necessity because my OS gets very unhappy if I try to manipulate a folder of that size using normal methods. It makes sense to run this script first so that the second script doesn't waste time processing files that will just end up deleted.

The second script is a find and replace function. The update involved changing identical HTML elements of the remaining 100k files. This removes the broken functions, modifies the header, and adds the new search functions to the sidebar. Imagining changing that many files manually makes my head hurt.

Talk2AI

https://jonlervold.com/talk2ai

Like many others, I’ve been having fun experimenting with OpenAI’s Playground for the last few weeks. It’s amazing how far this type of technology has come in recent years, and of course with more time it will only get better.

I found the Playground interface they provide a bit clunky for my personal use case, so I used their API to create Talk2AI, a front end more suited to my wishes. Talk2AI is an alternate interface for creating prompts and receiving responses to those prompts from GPT-3.

Here’s one of my favorite AI responses generated through this tool so far:

Prompt

Write a story about a man named Artie who runs out of frozen chicken pot pies, his favorite dish, and makes a trip to the store to purchase more, only to discover that it is the end of the world.

Response

Artie had been looking forward to his chicken pot pie all day. He had taken it out of the freezer to thaw in the morning, and by the time evening rolled around, he was practically drooling over the thought of sinking his teeth into the savory, flaky crust. Now, it was finally time to enjoy his delicious dinner. He opened the refrigerator door and reached for his pie, but it was gone! Someone had eaten it! Artie was devastated. With a growling stomach, he realized he would have to make a trip to the store to restock his supply.

Artie was in for a big surprise when he went to the store to buy his favorite frozen chicken pot pies. Instead of the familiar sights and sounds of the grocery store, he was greeted by silence. He walked the aisles, but there was not a soul in sight. The shelves were empty. It was as if the store had been abandoned in a hurry. Suddenly, he heard a strange noise overhead. He looked up to see a spaceship hovering above the store.

Artie was pleased to find that the store still had chicken pot pies in the freezer section. He was able to take as many as he wanted and he went home with a big smile on his face, knowing that even though he was the last man on Earth, he had a stockpile of chicken pot pies.

Advantages this interface has over the Playground:

  1. History of the user’s entries throughout the session, including the settings used for that entry, and a delete button for removing unwanted responses.
  2. For those who go beyond the OpenAI free trial: a max cost calculator based on input settings and an estimated cost calculator for each entry based on the return. The history logs these costs with each entry as well.
  3. Simple exports of individual entries or the entire session history to text files.
  4. Easy continuation of previous entries without needing to copy/paste.
  5. Significantly easier use on mobile!

Steps for Use

Usage requires an account with OpenAI. One can be created on their site. https://openai.com/api/

  1. Sign in to https://openai.com/api/.
  2. Click the colored circle on the top right of the page with the first letter of your name.
  3. In the dropdown menu, click “View API Keys.”
  4. On this page, under the “Secret Key” header, click “copy.”
  5. Paste this key into the “API Key” input field.
  6. Enter something into the input box and click “Submit.”

More information about creating prompts for the AI can be found in the OpenAI documentation. https://beta.openai.com/docs/

Source code for the project can be found on GitHub.

The Cedric Bixler-Zavala Lyrics Generator

https://jonlervold.com/the-cedric-bixler-zavala-lyrics-generator/

The Cedric Bixler-Zavala Lyrics Generator is a fun little app that analyzes the word combinations present in Bixler-Zavala’s body of work and attempts to piece together new lines using a Markov chain algorithm. Each phrase generated lands somewhere on a spectrum between excellent surreal imagery and utterly broken nonsense.

The app was originally written in Python with a PySimpleGUI user interface, but recently I decided to take a little time to improve it by turning it into a React app. The Markov chain algorithm portion remains a Python script and is now run via AWS’s serverless Lambda architecture.

Anyone who knows me personally already knows this, but this program is intended as a tribute and should not be interpreted as mockery. Cedric Bixler-Zavala and the projects he has been a part of, particularly The Mars Volta, are a major influence on my own artistic pursuits.

Source code for the project can be found on GitHub.

Color Horizons

ogimage

https://colorhorizons.com

Color Horizons is an app I have dreamed of creating for a few years now. It is built with React. From the General section of the About page:

Color Horizons is a microtonal-capable scale generator and synthesizer.

It is designed specifically to enable the user to instantly calculate how the notes of all modes of any scale that it can generate compare against 12 tone equal temperament, the harmonic series, and more.

The user can immediately play these scales in the browser using the QWERTY keyboard or their device’s touchscreen and then can export those scales as .scl files that can be used to retune other synthesizers.

From the Mission / Intentions section of the About page:

Color Horizons is developed by Jon Lervold.

I sincerely believe that microtonality is not just a musical niche for iconoclasts, but that in time it will someday become the next frontier of popular music.

There is an incredible wealth of musical expression that is inaccessible utilizing only 12 Tone Equal Temperament (12TET). Technology has reached a point where any musical tuning system imaginable can be tested instantly. The problem now is not necessarily the construction of microtonal-capable instruments, but the lack of proliferation of this knowledge. Whatever the reasons may be, at the moment this field remains esoteric. Many newcomers find it difficult to even know where to begin.

My goal with this application is to become an active participant in spreading knowledge of these fruitful tonal possibilities to other musicians. Color Horizons is a tool for helping explore musical realms near and far from 12TET. What tonal colors are available off in the distance? Let’s find out.

It is my deep wish that this tool can help inspire and facilitate musical creation!

Microtonal music is certainly currently a niche field, so Color Horizons is intended to be an educational resource as well. If you click the “More Info” button on the top right, and then click “Key Concepts”, there is a writeup that discusses everything necessary to understand what is going on with the app. Additionally, each scale generation method has an “info” button next to it that will show how that specific tool operates.

Color Horizons is a project that I will continue to actively develop as I learn more about microtonal music and tuning theory. Plans for later versions include non-octave scale generation methods and graphical representations of each scale and its modes.