Coder Social home page Coder Social logo

beats's Introduction

Burning Ember (BEATs)

Burning Ember is a CMS-like application meant as a playlist creation system backed by an archive of previously played tracks. Opposed to a 'real' Content Management System, Burning Ember is offline and fairly simple. Making it easy for podcasters, dj's, radio show hosts and the like to have a highly reliable way to create playlists and keep track of them during a show.

More importantly, it's entirely free. And i do really mean free. For those of you that have heard of FOSS: Burning Ember is both Free-as-in-beer AND Free-as-in-speech.

License/FOSS

This project is licensed under the Apache version 2.0 License (See LICENSE file).

The idea behind this thing:

Burning Ember makes keeping an archive and creating playlists as easy and misery free as possible. Making your life just that bit less bad. Keep in mind the most important natural law of the universe though.

  • Crash Resilient, using the project on hardware that regularly crashes is perfectly doable. The application just continues where you left off.
  • Lightweight, no more swearing because the application is too slow. For use on old or slow laptops.
  • Portable, just use it on whatever platform you like (supports most OSes).
  • Ease of Use, even your grandpa should be able to get the hang of it.

The History (because appearantly, there is some of that too):

This software is based upon the original implementations of the WWDB project. The WWDB project set out with the same goal as Burning Ember, but was less resilient and less extensive. When the need for a V2.0 of the WWDB project arose, it seemed better to start a build-from-scratch. This rebuild eventually evolved into Burning Ember.

The original WWDB project ran for about 3 years (The v1.xx versions). It was specifically designed for a local radio station who needed such an application. Burning Ember as a successor is build with the same idea in mind.
As a considerable amount of users ran the program on old and crash prone hardware, the goals and underlying structure changed when work on Burning Ember began.

A long text, because sometimes I like to write weird things:

The archive ensures that your next playlist has some consistency. Whether you want to make sure you're not always playing that same band/song or even the opposite, making sure that a featured artist doesn't get forgotten.

Burning Ember is portable: any platform that supports executable jars (Java) can make use of it. So whether you're favorite OS is Windows, Mac or a flavor of Linux or Unix, you can have the same experience across all your machines (Does not support Wi-Fi enabled crock pots or Tamagotchi's).

On top of being portable, the system is also lightweight. Meaning that even old or slow computers have no problems using it.

The interface and tools are fairly simplistic by design. Making it easy for non-technical users to use, reducing or eliminating user error. More knowledgeable users aren't left out though. A set of advanced tools are just a few clicks away, separated from the more standard functions.

The back-end is also engineered in such a way that prevents loss of data. Even frequently occurring power outages or crash-prone systems can safely use Burning Ember. The database ensures data always reaches the disk first, before continuing with other operations. This means that it doesn't matter what you were doing when a sudden crash or power outage occurred. Only if you were making a change at the exact moment of failure will you lose that particular (part of a) change. On restart, you'll just continue where you left off.

The previous item essentially removes the need for backups. Yet Burning Ember still contains a backup system in case of hardware faults. The backups happen on a regular schedule, while keeping the user unaware of them. The system incorporates a little intelligence that decides whether a backup is necessary and acts accordingly. The online backup system doesn't hinder most users, even on very slow system or with large file sizes.

If you've read everything up until this point, please send me a message. I don't care how much you like to read, nobody makes it this far. I like you, you lunatic!

beats's People

Contributors

witmoca avatar dependabot[bot] avatar

Watchers

 avatar

beats's Issues

Recovery:

  • Detect remaining file after forced shutdown
  • Validate & Recover said file
  • Notify user of recovery

PlaylistJMenu

  • Rename playlist
  • Change playlist order
  • Add Playlist
  • Delete Playlist

Editing on a jtable (a playlistTable) seems confusing when the cell isn't selected

It's possible to edit a cell without it being selected (JTable standard behaviour).
This is a little confusing for users, as the difference between user typed characters and auto-complete generated characters aren't shown. This also results in the character selection (containing said auto-complete characters) not being differently coloured.

This makes the CellEditors behaviour seem a bit off, although it is perfectly logical.
The UI just doesn't make it clear enough.

A look into trying to force the table selection might be in order.

Cut, Copy & Paste system

  • Copy from archive
  • Cut from playlist
  • Copy from playlist
  • Paste to playlist
  • Java Clipboard class
  • Visible Clipboard (South component ?)

Dropdown suggestions playlists

  • Create an editor based upon the existing AutoCompletingEditor that extends it by adding a dropdown menu.
  • Populate this menu based upon IMatcher data
  • Decide if forwardOnly is necessary and whether or not full Substring analysis should be used instead of matching only by the start of the string

Streamline archival screen

  • Create Section
  • Auto-suggest default values based on current Date & last episodeId (based on todays date, last episodeId)
  • Integrate creation of a new episode into archival screen (create episode dialog becomes obsolete)
  • Integrate creation of section codes into the archival screen

Archiving Screen

  • Custom Dialog framework
  • Summery View
  • Select Episode
  • Create Episode
  • Select Section

Direct SQL Editing Console

Include an advanced tool (with the necessary warning dialogs!)

  • Add a warning that asks that the user save first before starting manual edits in the console
  • A JLabel (or other JTextComponent) that explains the use of the console, contains warnings, recommends the use of the Commit Button, links to sqlite.org and contains the names of handy tables/commands such as SQLITE_MASTER, etc..
  • (Possibly) include a jdialog that shows all the CREATE TABLE statements used in SQLConnection (put it in a create.sql file and show that?)
  • A textfield where SQL Syntax can be inputted
  • A JButton that tries to execute said SQL code.
  • A JTextArea (within a scrollpane) containing possible output (or error traces)
  • A JButton that calls the SQLConnection.Commit() function with parameter DataChangedListener.DataType.ALL_OPTS
  • A JDialog warning that opens when the console is close warning that commits MUST happen before closing the console (except on selects, etc). Include the option to cancel the closing of the dialog.

Race Condition: SQLConnection.commit & DataChangedListeners

Steps to reproduce:

  • Import a .wwdb file
  • Before the import is completed, click a ui object (another tab on the centerTabbedPane e.g.)
  • ConcurrentModificationException is thrown
    This happens, but not consistently. The logical suspect is a race condition

Rework CCP/Drag-and-Drop to use a better suited model instead of PlaylistEntries

Archive Toolbar

  • Search box => uses RowSorter.setRowFilter to display results

Exception Manager/Logger

A system that

  • logs errors
  • stops application execution if necessary
  • possibly recovers/restarts it
  • notifies the user if necessary
  • translates ConnectionException to human readable text and dialogs

Application Manager

  • Call recovery manager
  • Check the arguments for a loadable db
  • Create & load the db
  • Create the GUI
  • Control access to globally required objects

Autosuggest

  • create autosuggest GUI element
  • add playlist.artist suggest functionality
  • add playlist.song suggest functionality

Playlist table enhancements

  • Empty row for inserting new content
  • Table sorting (according to all column headers + no sort)
  • Row index
  • Pick and choose the shown columns

Printing of playlists

  • Built in print of JTable
  • Built in print functionality of java
    Combine into a simple playlist printing functionality

Single Instance Manager

The DB provides lock-file implementation on it's own. So a single instance is practically guaranteed.
But, the second instance should be able to message the first one to open up a new file.

InfoView

  • Detect if artist & song are the database
  • Display last time the song was played (ID + date)
  • Display last time the artist was played (ID + date + song)
  • Display if band is local
  • Display the count(title) & count(artistName)

VACUUM on load

Because saving might be done multiple times (and vacuum could change rowid's),
it's best to vacuum a table right before actual use. As the file format doens't use that much space meaning that not a lot of space will be freed anyway, VACUUM before save isn't necessary.

On the other hand, VACUUM before use seems logical. As it restructures fragmented databases so speed is optimized. As the application doesn't execute a lot of DB operations (relatively, at max a couple (tens of) thousands for a session where an import is performed and much less for normal operation) it isn't necessary to do VACUUM more than once per session.

Catalog

A 'Catalog' that displays:

  • Most populair songs
  • Most populair artists

CurrentQueue

  • CurrentQueue Panel
    Toolbar/Popupmenu with:
  • Move back to Playlist
  • Archive Queue

Import/Export To an XML format in WWDB2 format conversion style.

  • Create an XMLFileFilter
  • Add a private importXMLFile(..) method to importFileAction
  • Combine XMLFileFilter & importXMLFile into the actionPerfomed method
  • Create a exportFileAction
  • Link exportFileAction with export menubutton
  • Add a private exportXMLFile(...) method to exportFileAction
  • Combine XMLFileFilter & exportXMLFille into the actionPerfomed method

Tools & fixes

Handy tools & on-the-spot fixes

  • Refresh Screen (full GUI)
  • rename all occurences of an artist
  • rename all occurences of a song
  • change date belonging to an episode
  • check for episodeId continuity

Playlist end edit jumps selection

Ending a cellEdit (by way of enter or tab) causes unwanted change of selected item

Probably because of the playlist data being reloaded after change?
Both the row AND cell selected should stay the same (so a tab still goes to the next cell)

Set on autosort for Archive & remove unsorted

An unsorted Archive results an a quasi-sorted table.
Users assume that it's sorted, with confusion as a possible consequence.

  • Remove unsorted functionality for archive table
  • Set the default sortkeys for the archive to {Artist, Episode}

(or combine both and make the table reset to the default sortkeys on left top corner press instead of no sort)

(native) File association

  • Associate .BEATs format on windows with application
  • Associate .BEATs format on linux with .jar runnable
  • Handle a mulitple application instance scenario by opening the newly loaded file in the existing appwindow instead

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.