Programming

Note-taking app launched at Trovedex.com!

I spent Friday and Saturday launching the first version of the note-taking app I’ve been working on, live now at trovedex.com. Woohoo! I’m glad I was able to get it up just before the end of May.

As stated before, there are still quite a few features I’d like to add. But even before I go about adding new features, there are a number of glitches that need fixing. It’s really annoying how some things that work fine in production (when running on my computer) suddenly stop working or glitch out when live on a server.

Deploying the Vue app wasn’t too difficult in and of itself, though I will need to develop a more efficient deployment strategy than just uploading files. The trickiest part for me was getting the API back-end server, which manages requests from the app to the database, to use the more secure “https” protocol. The front end, built with Vue, was easy; you can just set a variable in its config file and *poof* it works. The back-end API, however, needed info about a valid SSL certificate to be recognized as secure. Googling around, just about all the info I could find involved creating a self-signed certificate, which most browsers won’t trust, so that didn’t help me much. I finally figured out how to get the “key” and “cert” files from my server’s certificate. A simple solution, but difficult to find. Also, if you know how to look at your browser’s javascript console, you’ll see that my implementation of firebase, which I’m using for user authentication (hence why you can log in with Google or Facebook without having to create a new account), outputs a warning about my code using a “development build” of the SDK. I couldn’t figure out how to get rid of that. It probably also has a simple solution I just haven’t found yet.

At the moment, I know this note-taking app is nothing amazingly innovative, but it’s been great for learning “the stack” (the layers of tools used to build a web app) and I think continuing work with it (and on it) will be fun. Now that this is up, I’m going to switch my focus back to TuneSage, my in-development music-writing app. I’ll still work on Trovedex to fix the current glitches, add features, and make improvements, but I’d like to launch TuneSage before Christmas and there is a ton of work to do on that.

Happy note-taking!

By S P Hannifin, ago
Programming

Note-taking app update 5

My note-taking app is almost ready for release! Upon release it will support the following:

  • tag notes and filter by tags
  • embed html
  • create todo lists
  • create timers
  • create info tables
  • insert or embed images (from url or upload)
  • create flashcards (for self-studying, e.g. language learning)

My current todo list before release includes:

  • Design for mobile (make it responsive to browser width)
  • Get links to other notes working
  • Finish basic search functionality
  • Create a “reminders” icon (which only works with the reminders set by the flashcards widget at the moment)
  • Add click & drag to re-order stuff functionality
  • Create a “storage space” check (so limits can be set)
  • Create an “about” landing page / log in page
  • Create a sign-out button
  • Finalize API back-end settings

So quite a bit still to do. Some of that stuff won’t take long, but some stuff may (like designing for mobile, especially since design work tends to be slow and tedious for me; I’m not so great at it). I still hope to launch it before the end of May.

Of course, even after launching there are quite a few features I’d like to add, but I want to launch it first and see if anyone else even finds it at all useful. (I definitely want it for myself though, so I’ll be using it regardless.)

By S P Hannifin, ago
My life

1 Second Everyday : April 2020 & App update 4

1 Second Everyday

Here’s my 1 Second Everyday for last month. Lockdown made for another boring month with mostly programming and cats (though I guess most my months are pretty boring anyway). But I did buy a used 3D projector from eBay which is great. It’s too bad 3D blu-rays (and 3D movies in general) are quickly becoming a thing of the past just as used 3D projectors become actually affordable. Oh well.


Quick note-taking app update 4

I’m just about done the functional programming for the initial release of my note-taking app:

  • Complete functionality of the sub-menu
  • Allow attaching or inserting media (at least images) to notes
  • Sort / search notes by tags
  • Create note with tags pre-filled (like adding a post to a category)
  • Allow some js widgets in notes, at least checkboxes and timers
  • Allow creation of new notes with bracket links (e.g. “[[]]”) as in MediaWiki (standard wiki feature)
  • Open related notes by clicking on these bracket links (without opening a new page)
  • Search and sort notes by content / data / date (only basic queries for now)
  • Create user login / registration system
  • Create user stats page (notes created, storage space available, etc.)
  • Collect user usage stats (for studying how users use the product)
  • Overhaul / finalize designs, make responsive and usable on mobile
  • Write Terms of Service, privacy, cookie use policies
  • Offer subscriptions, launch!

I mostly just have to work on the design and then the final launch preparations! There are plenty of features I’d like to add after launching, of course, but development will probably slow so I can get back to work on TuneSage. Building this note-taking app has been a great experience for learning how to develop a web app using Vue and MongoDB, which I can definitely use while continuing to build TuneSage. (Plus I hope to use this note-taking app for my own note-keeping purposes.)

By S P Hannifin, ago
Programming

Quick note-taking app update 3

Made some decent progress this week and knocked out a few of the todo’s; here’s what the list looks like now:

  • Complete functionality of the sub-menu
  • Allow attaching or inserting media (at least images) to notes
  • Sort / search notes by tags
  • Create note with tags pre-filled (like adding a post to a category)
  • Allow some js widgets in notes, at least checkboxes and timers
  • Allow creation of new notes with bracket links (e.g. “[[]]”) as in MediaWiki (standard wiki feature)
  • Open related notes by clicking on these bracket links (without opening a new page)
  • Search and sort notes by content / data / date (only basic queries for now)
  • Create user login / registration system
  • Create user stats page (notes created, storage space available, etc.)
  • Collect user usage stats (for studying how users use the product)
  • Overhaul / finalize designs, make responsive and usable on mobile
  • Write Terms of Service, privacy, cookie use policies
  • Offer subscriptions, launch!

Working on a simple user login / registration system now, so that should be done soon. After that, the last piece of actual functionality to add will be some sort of usage-data gathering system. The rest of the todo list mainly concerns design and content.

And it definitely needs some redesign because it looks very bad at the moment. I’ve been much more focused on coding functionality than finding visual appeal. Ultimately I want it to look as minimal, simple, and intuitive as possible, on both desktops and smartphones.

I will have to go back and polish some functionality though; I’ve been skipping over some of the finer details.

Anyway, I’m guessing it may only be two or three more weeks before the app is ready to debut!

By S P Hannifin, ago
Programming

Quick note-taking app update 2

Been a while since I gave an update on my note-taking app progress, so I shall proceed to do so.

I’ve been able to knock some things off the to do list:

  • Complete functionality of the sub-menu
  • Allow attaching or inserting media (at least images) to notes
  • Sort / search notes by tags
  • Create note with tags pre-filled (like adding a post to a category)
  • Allow some js widgets in notes, at least checkboxes and timers
  • Allow creation of new notes with bracket links (e.g. “[[]]”) as in MediaWiki (standard wiki feature)
  • Open related notes by clicking on these bracket links (without opening a new page)
  • Search and sort notes by content / data / date (only basic queries for now)
  • Create user login / registration system
  • Create user stats page (notes created, storage space available, etc.)
  • Collect user usage stats (for studying how users use the product)
  • Overhaul / finalize designs, make responsive and usable on mobile
  • Write Terms of Service, privacy, cookie use policies
  • Offer subscriptions, launch!

Not nearly as much as I’d’ve liked to have finished by now, but progress is being made. Uploading files turned out to be a bit tricky (and there are still some small issues with it to work out), as was supporting javascript in each note. And looking ahead, I’m thinking everything else will also be tricky. But we’ll get there!

By S P Hannifin, ago
Programming

Note-taking app update

Fortunately the nightmares have stopped and I’ve managed to get on a more regular sleeping schedule, going to bed at about 1 AM or so and waking up at about 9:30 AM. So that’s good.

Programming-wise, I spent much of last week just learning more about modern web tools; I’ve been away from web development for a while, so there’s a lot to learn. I switched from Feathers and React to what’s called a “MEVN” stack, which consists of MongoDB for the database (which I find easier than MySQL1), Express.js for the back-end framework, Vue for the front-end (which I find easier to learn than React), and of course Node.js for the back-end platform. In particular, this little tutorial on setting up a MEVN stack was super helpful.

Beyond that I’ve only just started programming some actual functionality. At the moment, you can create a note and delete it. And that’s it. Pretty boring. Much left to do.

As seen above, when you hover over a note, you get that little side-menu with edit, copy, and delete options. Looks a bit bland, but the design is definitely not final. Here’s my current todo list before making the app public:

  • Complete functionality of the sub-menu (the delete works, but the edit and copy buttons don’t yet)
  • Allow attaching or inserting media (at least images) to notes
  • Sort / search notes by tags
  • Create note with tags pre-filled (like adding a post to a category)
  • Allow some js widgets in notes, at least checkboxes and timers
  • Allow creation of new notes with bracket links (e.g. “[[]]”) as in MediaWiki (standard wiki feature)
  • Open related notes by clicking on these bracket links (without opening a new page)
  • Search and sort notes by content / data / date (only basic queries for now)
  • Create user login / registration system
  • Create user stats page (notes created, storage space available, etc.)
  • Collect user usage stats (for studying how users use the product)
  • Overhaul / finalize designs, make responsive and usable on mobile
  • Write Terms of Service, privacy, cookie use policies
  • Offer subscriptions, launch!

I have some other big features I’d like to add, but I’d like to launch it first, just to get it out there. So how long will all that stuff take to do? Assuming I can tick one off every day, only two weeks. But some will be easy and some will be difficult, and you never know what task you might get stuck on. So we’ll see. I’m going to aim for two weeks. Though I do have some family stuff going on that will likely also get in the way.

Plus this really awesome guy sent me the PS4 game Dreams that I’m eager to try…

By S P Hannifin, ago
Programming

Startup programming update

Here’s a quick update of what I’m working on…

First I’ll admit that I’m in a bit of a mess sleep-schedule wise; I don’t know what’s going on with my brain. I’ll sleep for 10 hours then stay awake for 10 hours or less, getting suddenly really tired at seemingly random times, constantly out-of-whack with a 24-hour schedule. And I keep having weird nightmares so my subconscious must be a bit anxious about something. (Part of what makes them weird is that they’re often emotional nightmares; I’ll be really angry or sad or depressed in the dream, rather than just having bad stuff happen to me in the dream. But I can’t find much information about emotional distress within dreams; most articles talk about emotional distress in life causing nightmares, but I’ve got the opposite problem. It’s bizarre.)

Anyway, I’m taking a short break from working on TuneSage to work on a quick related project. I’m not sure what I’ll call it yet, but it’s a note-taking / note-organizing web app. I mostly just want it for myself. I know there are already dozens out there (like Evernote), but none of them work quite the way I want them to. Specifically I want an app in which I can:

  • Keep and organize random notes / ideas
  • Keep todo lists and reminders
  • Keep and organize bookmarks (similar to what I use Pinterest for)
  • Keep and organize timed sessions (such as for freelancing)
  • Keep logs of stuff (such as books owned & read, movies owned & watched, TV shows watched, etc.)

All these things can already be done with existing tools, but again, not in quite the way I want.

Anyway, the tools I’m using to create this app are tools I want to learn for use with TuneSage, so it will ultimately help with TuneSage’s development too. Plus the app itself will help me organize my notes regarding TuneSage. So I’m trying to kill a bunch of birds with one stone.

I’ll of course release it and if it gains any traction, so much the better. If no traction, it’s still something I want for myself.

As far as TuneSage goes, I’ve stopped using Rust for now, and instead switched to the older but more popular Node.js. Node.js is mainly Javascript for back-end, and it’s much easier for me to program in an easy language I already have experience with than learn a new more complicated language like Rust. (For instance, I love not having to worry about variable types… most of the time.) And since Node.js has been around for a lot longer, there are a ton of resources out there for it, which is also a huge plus.

For this new mini-sidequest of a note-keeping app, I’m learning some other tools that I think I’ll need for TuneSage anyway, so the note-keeping app will be a good learning experience. I’m currently learning React for the front-end, which helps with creating user interfaces, and Feathers for front-end to back-end communication, which is what I’m finding more confusing at the moment, mostly because it seems to have a lot of “parts”.

So that’s what I’m up to at the moment! Stay tuned for the release of the first version of the note-keeping app!

By S P Hannifin, ago
Programming

Music Editor Developer’s Log: More Cowbell

I got the soundfont to work, or at least to work well enough for my prototype-creating purposes. It will need some fine-tuning in the future, but if I can manage to actually turn this software into a business, it would be nice to create a custom soundfont for it anyway.

I’m now almost to the point where I can start using this software to actually write some music, but I’ve still got a number of controls and GUI elements (buttons and stuff) to program. I need to add the abilities to do mainly the following:

  • add and delete measures
  • edit note / track variables such as
    • release time (how long it takes an instrument to fade away after it has stopped playing)
    • volume / velocity
    • stereo position (left or right)
  • edit reverb settings
  • save and load files
  • export and load MIDI files (depending on time; this feature isn’t too important yet)
  • export MP3 or WAV files (at least look into it; if this is too time-consuming, it’ll be something to look into in the future)

I think that’s mostly it. And none of that stuff (save for perhaps the last one) should be too terribly difficult to code. So I think I can get it done this week!

After that, I will probably be a bit more secretive as I begin adding the “secret ingredients” which are my amazing world-class AI music generating algorithms, which will be the secret sauce of the business. For that, I will probably have to buy a dedicated server (or VPS), as those algorithms will be executed server-side. That’ll be fun.

Hopefully I’ll also be able to use this editor to actually compose some new tracks this April. I owe my few Patreon subscribers probably around a dozen or so tracks, and I want to get that new album out, which just needs one or two more tracks. And it would just be a good test of the software, even without the AI features, to see what composing with it is like. 122 days left!

Oh, what exactly will constitute success come July 31st? I mentioned earlier that success will mean that the software will either be at a point in which it’s ready (or close-to-ready) to actually market and sell, or in which a working prototype is ready to show to investors. Of course, those possibilities are not mutually exclusive, but at least one must be the case. But what does the latter mean? What will make it “ready” to show?

Anything really, so I can’t lose!

Seriously, though, it will mean that the software should be able to auto-write a complete song (minus lyrics) on its own. That’s melody, chords, orchestration. The algorithms are done, it’s just a matter of making them usable to an end-user and making their output as good as possible.

I’d ideally like the software to be able to compose something with the complexity of a Mozart symphony. That would be the true peak of Parnassus. And I’m positive we’ll have that soon enough. Maybe not by July 31st, but it would certainly be awesome, no?

By S P Hannifin, ago
Programming

Music Editor Developer’s Log: Soundfont Insanity

For the past week, I’ve been trying to give my music editor1 the power of sound. I looked into the new Web MIDI API standards, but those are more for sending and receiving MIDI messages, not playing sound, so that’s no help. (Though it may be something to look into later for other features, of course.)

So instead I’ve been looking into the Web Audio API, which does the trick, and has mostly what I need. Actually, it has everything I need, but not everything I want. I want the sounds to sound as good as possible, which means the instrument samples must loop for sustains (as a MIDI synth would).

First I experimented with MIDI.js‘s implementation of sample playing. With pre-rendered soundfonts, I could easily play samples for all the basic MIDI instruments. Problem with this implementation is that the instruments don’t loop! (Or at the very least, they don’t seem to read in the looping data saved in the soundfont.) Instruments such as strings, which can sustain indefinitely, really deserve some decent looping.2

So I moved on to experimenting with a library called sf2synth.js. I can’t understand the Japanese comments (the developer seems to be from Tokyo), but this implementation seems to load in soundfont files much more completely, and actually reads in and uses the looping data! Woohoo!

But even it has a problem. When I play a note from the Musyng Kite soundfont  (which is the soundfont I’m currently using for experimental purposes) in the Polyphone Soundfont Editor (which is a great piece of software), it sounds great. But when it’s played back in the browser through sf2synth.js, it sounds more bland.

Here is what I think is happening…

If we look at a preset in Polyphone, we can see that it’s actually made up of multiple instruments; below you can see that “Strings Ensemble” is actually made up of 8 layers.

To me, it sounds like sf2synth.js is only playing one of these layers, instead of all of them like a true soundfont player should.

So my mission for this week is to dig into the sf2synth.js code, try to understand how it’s loading and playing sounds from the soundfont file, and try to give it the ability to play all the layers in a preset that it should. Polyphone is open-source, so I can also dig around their code to see how they’re loading in and parsing / interpreting sf2 files.

I probably only want to spend two weeks max on this; if I can’t figure it out after two, I’ll just have to settle for suboptimal sounds and move on. I can always come back to soundfont programming later. It’s more important to get a working prototype finished by the end of July. 129 days left!

By S P Hannifin, ago
Programming

Work on web MIDI editor continues…

Progress on my web-based MIDI editor / animator has been slower than I’d like, but isn’t that always the case? At the moment, I’ve got the basics I want; you can add and delete notes, copy and paste, create and delete tracks, hide and show tracks, and edit track colors. Still need to allow you to add and delete measures though.

But what I want to work on next is the sound; my editor doesn’t actually play any sound yet. I may perhaps try and utilize this javascript soundfont player: https://logue.dev/smfplayer.js/ … of course, soundfonts don’t sound nearly as great as sample libraries, but until someone programs a javascript-based VST host that a browser can use, I’ll have to settle for what I can find. Users should be able to import and export MIDI files anyway.

136 days left until July 31st!

By S P Hannifin, ago