History 5

From kJams Wiki
Jump to navigation Jump to search

Next Version

Version 1.0d43: June 5 2006

  • fixed a bug relating to playlists not loading, causing the launch to fail
  • I had inadvertently linked against some 10.4 only routines, causing problems for folks still on 10.3, this is fixed, you should be fine using 10.3, for now
  • r2 March 28
  • fixed a bug or two relating to songs not stopping when they should, and crashing when switching
  • added mutex to some message reporting code, was causing crashes
  • intel mac version (xcode) is now compiling and running
  • tweaked the error reporting code WRT to mutex (the juju stuff) to see if i can isolate why it's crashing
  • did some extreme debugging and got to isolate the area where the crashing occurs, i can now reproduce the bug simply by playing, then quickly pressing next and then previous
  • investigated more bug reports of songs "just disappearing", this is good news, having more perspective on the problem means it's closer to being solved
  • r3 April 21
  • I will be unavailable for 1 month starting now. If you're just utterly frustrated with the number of bugs, simply write to me and i'll give you your money back
  • tweaked a teeny bit the place where we set the name of a playlist when you mount a CD
  • if you stop a song before it reaches 60%, it is not counted as having been played
  • plugged a memory leak when renaming sources
  • attempting to pull a NULL song out of a selection will no longer crash, but it will assert
  • r4 May 1
  • no longer cause the entire database to need saving when you play a song
  • if you skip forward a few songs or more really quickly (say with the right arrow key), we no longer leak a spooler for each skipped song
  • found a potential culprit for random crashes: using QuickTime to open MP3 files on a pre-emptive thread is not allowed!! WHAT?? I was doing that all the time! Uh-oh! Okay so now i open it on the main thread and xfer it to the background thread! We're now compliant!! Good for us!
  • r5 May 3
  • When playing a file that is NOT zipped, we no longer clobber the file path of the graphics (CDG) file. This *may* help newly ripped songs NOT disappear after you play them. Also getting playlist size, trash originals, *some* (not all yet) meta info setting, these will no longer have problems
  • crasher where a message was sent from a background thread to the main thread, still containing a reference to the background thread, but by the time the main thread got a hold of the message, the background thread had already died, fixed so now the (main thread) message no longer relies on the background thread existing
  • assert crasher where it could just fail when switching songs (yeesh!). you can readily see this bug when the cache is set very low, eg: 2. This is not technically solved, but I can now sidestep the crash at least, so it's not YOUR problem
  • working on "keep library organized" feature: when you set meta info on a song, it will attempt to rename the files / folders on disk as well, and/or move them (if you change the album / artist eg). This will also prevent the cache from getting out of sync, so you don't end up with missing and / or orphaned files. Not done yet but THIS is the fix that will prevent songs from going missing if you change meta info after you rip
  • as part of the above, finally updated the CSong object to use unicode-savvy strings everywhere. bit by bit it's coming together for the international-crowd! Can you get siked for karaoke in Japanese? (currently, kJams will clobber japanese characters (or any unicode, really) if you try to name a song with them) (this is yet another manifestaion of the classic-by-now symptom: "why is that song missing?! it played before!?")
  • as part of the above, all the meta-info changing code has finally been completely factored into one place. this means everything is in place to actually set ID3 tags when you change meta info. (currently, ID3 tags are ONLY set when ripping / encoding, hence my formerly requiring all meta info to be entered before ripping. since that pissed folks off, i got rid of the requirement, but hopefully soon it won't be such a big deal cuz you *will* be able to set ID3 tags on your MP3's)
  • if you still have music in iTunes, then when you play it, it used to attempt to update the screen from a background thread (eg: to update the song name or album), this is a no-no, and would cause a crash. I now forward it to run on the main thread.
  • fixed a crasher when the audio file could not be found. Still a mystery at this point why so many folks loose their songs, this is my next task now that the crasher is out of the way!
  • r6 May 10
  • attempted a patch to another crasher, so now the song just won't play, rather than crashing. Maybe it'll even work.
  • fixed another crasher that was totally stupid on my part, basically "if we're not the main thread, then crash". durrrrrrrrrrr.
  • r7 May 10
  • context menu!! HAH!! Finally... What should I put in it?
  • fixed debug version so that it can play naked CDG files without a corresponding audio file (actually it plays silence). This has, quite fortunately, uncovered more than THREE bugs!! 1) a crasher when you play, 2) a "song gone missing" after it works the first few times WOHOO!
  • more fixes to the cache manager, so things are less likely to go missing
  • Stopping a song will no longer potentially get strange, found and fixed a recursion situation
  • context menu "reveal in finder" now tries to repair things it finds wrong
  • Messages that appear in the video window are a bit better behaved
  • if you get an error while ripping, you now get an error message
  • r8 May 21
  • did a buncha work updating the Burning plugin, getting closer! There will be a new release tomorrow.
  • found out why songs disappear at least in one case: Your QuickTime is old! Upgrade!!
  • We now won't run if you don't have QuickTime 7.1
  • correctly setting file paths when you rip, for even more preemptive strike against songs going missing
  • when you rip, it again puts the song into an existing playlist of the same name as the disc, instead of creating a new one (assuming you have that pref turned on)
  • wow, no longer get NO windows the very first time you run. how come nobody reports things like this???
  • fixed the hang on quit after rip problem. plus much code cleanup wrt releasing spoolers when we're done with them.
  • no longer get the "rip done" sound at the start of the rip. This could happen if you played the song on the CD, then stopped it, then tried to rip it.
  • r9 May 29
  • YO DOODS! Be Siked! I've got a sorta pretty much mostly working Universal Binary! If you're in desperate need, write to me and I'll let you in on it.
  • fixed a long standing bug (that nobody really ran into AFAIK) where a very small number of CD's would not be correctly recognized and when you try to rip or play them, the track start and length would be misread, so you might eg: play track 3 and instead it would play the end of track 2 and the start of track 3.
  • fixed an error creating new playlists and singers, would cause asserts / crashes / "could not rename in finder" / illegal duplicate names / general mayhem type stuff
  • r12 June 3
  • fixed a QT export problem that would leave the app in a bad state (relating to the database autosave shutting off, not updating the graphics window when using large cpu load, general minor mayhem that could cause you to pull your hair out)
  • more logging info when you stick in a CD

Version 1.0d42: March 21, 2006

  • working on the zip cache
  • more robust error reporting when parsing song name
  • more logging when deleting a file
  • more logging when creating Queue's (used in deleting files, ripping, encoding, zipping)
  • now supporting CDPedia. If you have your disc info in CDPedia, the info will show up in kJams. You don't even have to have CDPedia running. Note: at present, it only works with CDPedia songs that have a DiscID associated with them (gotten from freedb). So okay, that's not too helpful, i'm working on it.
  • Fixed some of the audio popping / stuttering that was recently introduced. Now when playing with the spooler, you'll always get the Ring Buffer spool showing in the Tasks window (the Ring serves as a double buffer to the QuickTime file so there's guaranteed audio samples without having to wait for the disk)
  • reverted my pitch bending code to the pre-alitvec days in an effort to fix the tremolio it seems to have introduced (r3)
  • wrote the Zip spooler so it will now zip your files when it's done encoding. not hooked up yet, not debugged, see below for more info
  • fixed some crasher stuff in the CDPedia code
  • MASSIVE upgrade to the web site, that you probably won't even notice! Upgraded SQL, PHP and Wiki. MAN what a pain! Thanks to Bradley!!
  • fixed a crash-on-quit problem relating killing off a blocking thread that had an uninitialized descriptor. The thread should not have been blocking in the first place, but that's another bug. At least if this ever happens again you won't crash.
  • found that errant blocking thread: the file deletion que thread. I just had never bothered to gracefully ask it to exit on quit, so I was force quitting it (leading to the discovery of the above bug). Now I ask it to exit gracefully.
  • (spooler) when a rip is done, we now erase the LCD window, so it no longer shows the progress bar
  • (spooler) when a rip is done, we again play the flourish sound
  • if you eject a CD immediately after a rip but before the encoding is done, you'd crash when the encoding finished, as it tried to delete the song importer associated with the encoder (which was attatched to the CD, which no longer exists)
  • if you used the "Advanced->Get CD Tracks from freedb...", it no longer says "wrong number of tracks"
  • fixed a bug where, if you put a CD in that you had never put in before, and iTunes ran and queried the CDDB, and kJams also queried the freedb, you'd end up with multiple copies of the CD apparently mounted in kJams. Wow, that was subtle.
  • I now check that, if you have LAME installed, that it is 1.93 or better. You may STILL crash if you're not using my implementation, even if you have the latest version installed from elsewhere. Unfortunately there's not much I can do about that until the LAME developers incorporate my changes into their official distribution. My only recourse is to convert to XCode, which i have to do very very soon anyway.
  • Dialogs are now logged, including the user's answer (Alerts have always been logged)
  • r5
  • added a new "MultiFile" spool type, that can "read" any number of files at once, making them appear as a single spool
  • added a new "Zipper" spool that can "write" from a MultiFile into a Zip archive now
  • when you play a zipped song, it gets into the cache, so next time you play it, it doesn't need to be unzipped
  • you can now export QT even if there's a song playing oops. while the sources are now thread safe, the destination is not yet: coming soon.
  • you can now export QT directy from a CD, without having to rip first (oh, and it goes into the cache, so if you then want to play it or "rip" (encode) it, it will not need to read the CD again
  • you can now automatically have songs get zipped up when you rip them (the pref is now hooked up)
  • possibly fixed it so you WON'T crash if you have the wrong version of LAME
  • fixed a bug in CDPedia code that would crash if you had no CDPedia DOH!
  • fixed several crashing bugs relating to mounting CD's
  • spooler progress now refers to disc name by the playlist name, not by the volume name (which can be different)
  • fixed bug where, if you have audio but video can't be found, no crash
  • removed ability to turn off spooler, it's now permanently on
  • if you rip a song that was in the cache, you don't get the flourish sound cuz there was no rip
  • started work on OggVorbis spool
  • finally changed the non-functioning AIFF default in audio settings to MP3, this will probably confuse fewer people. it's still bad tho, what if you don't have mp3?
  • fixed a bug in graphics decoding where it was at least theoretically possible to get a glitch where you didn't want one.
  • very slightly optimized the graphics error corrector
  • the zipper now creates archives with unicode names, and the contents' names can be unicode. I wonder if they will unzip correctly on other systems?
  • upgrading to Tiger server
  • fixed a crash on quit bug
  • r7
  • added Cache preferences under the Audio prefs. You can now specify it's location, number of songs, see the current size of the cache, and clear the cache
  • no longer calling EventAvail() from preemptive threads (doh!) this would cause all manner of spurrious crashes
  • the new cache manager will no longer delete files out from under you that you are currently encoding (yikes)
  • the background encoder will now pick up where it left off if you had crashed or quit before it finished encoding
  • asserts will never come up blank again, nor cause their own crashes, no longer showing them during preemptive threads, now always delaying display until the mail thread
  • fixed problem with zipper, was not *entirely* unicode aware, would crash when it failed, now doesn't. yay.
  • fixed a BAAAD bug where I was literally passing the wrong object to the zipper. It's like, someone about to jump out of a plane asks you for a parachute, and you hand them a backpack with books in it, and say, "here's your parachute". Nuh-uh.
  • aaaand another one where it was attempting to match the "AIFF" version of the file length with the CDDA version of the file length, and coming up short, even on the exact same song. now, I only compare CDDA with CDDA, i no longer use the AIFF duration for anything, since, well, it's wrong.
  • r9 Dec 28th
  • oops: if you stick a CD in that you've already ripped (say you want to re-encode or whatnot) the new songs wouldn't link up with the old songs, so you'd get another COPY of the song. Now they link up, so new rips will REPLACE the old
  • several major and a few minor bugs fixed relating to zip files, the spooler, the cache and other things. There's still work to do. Just don't stress-test it and you should be okay
  • r10
  • at least one very bad bug and a few minor bugs related to zipping, the cache etc. Also, dashes and slashes are now allowed in song and album names, and won't cause spurrious problems
  • r11, Happy New Year!
  • fixed QT Export from non-CD. When I made it export from CD, I had "assumed" it was on a CD from then on, but of course, songs that are NOT on a CD are, well, not.
  • yeekzers! There was a prollem with if you played a song but stopped it before it was entirely cached, when you went to play it again, sam, it would fail. So it seemed like you only had one chance to play. (if you had let the song get completely cached before you stopped it, no prollem)
  • oops, broke the "purge cache" button, wasn't working, fixed
  • if you had a 60,000 song library or so, and you stick a CD in, it would take WAAAY too long to lookup the songs to see if they already existed, well i sped that up considerably.
  • some minor bugs
  • r13
  • there was yet another way you could get into a state where files would seem to go missing and you couldn't play them, this too has been fixed
  • rebuilding your library would skip loading zipped files, now it doesn't
  • if you quit JUST at the moment the LCD panel would refresh, you'd crash on quit
  • r17
  • fixed a crash-on-startup bug when loading playlists and very old databases
  • new Mac error reporting routine makes it easier to add natural language translations to error numbers. Now for certain errors you'll get a description instead of a number (usually you'll see it in the log file)
  • short hang on quit, and leaked spools due to not closing the video spool properly, fixed
  • fixed a major flaw in ripping and cache orphan encoding, where I was manipulating the song list from a pre-emptive non-main thread. This is a no-no, since only the main thread should ever manipulate the database. This would cause untold spurrious crashes for no apparent reason, either while ripping or while encoding after you quit and re-started and it picked up where it left off encoding.
  • serialized all "post alert" messages, so you can't get one on top of the other, they will always be presented serially nope, you can still get into a loop
  • reinstalled p4 server
  • fixed a *kajillion* bugs WRT the spooler. Would cause spurious, metalifurious crashes.
  • you can now quit in the middle of a rip and it's okay
  • you can now quit in the middle of a launch that picked up from where you left off on a previous rip and it's okay
  • I now limit the max number of encoding spools to 2. You can que up as many as you want, but only 2 will run at a time. If you have a very fast machine, one that encodes as fast as you can rip, you'll never even see 2 encoding spools at once.
  • Burning! Yeah! My first successful test! It won't be long now!
  • In converting to the spooler, I had somehow killed the notification if your drive is not compatible. Symptom was: you try to play from CD or rip and nothing would happen (or you'd get black if you turned on the import pref to ignore CDG ripping errors). You now get the notification that your drive is not compatible.
  • fixed the final bugs i could find WRT ripping and quitting half way thru
  • QT export would crash at the end, no longer.
  • QT export now retains full unicode name of song (no longer truncates)
  • QT Export would appear to allow you to export more than one song simultaneously. I now put up a notification instead.
  • I now clear the LCD message after a rip is done
  • I now bring the Video window forward when you double click a song
  • When you zoom the video window it no longer goes black
  • r18
  • When you stick a CD in, I no longer search the DB for matching songs. When/if you decide to rip a song, that's when I'll search.
  • lots of bugs fixed with the cacher and some with the spooler. You'll hit the cache when you should now.
  • fixed problem with when CDG and MP3 lengths differ, now we always pick the longer one and pad the shorter file with silence or blackness, and the song's Duration is updated to reflect the new, corrected duration.
  • Fixed quicktime export with long names, it was silently failing.
  • QT Export now does it's work in the temp folder, and upon success moves it to the destination
  • Now all non-library playlists start at index 1, not zero (finally!)
  • You can now drop songs onto a singer and they'll go into their "Tonight" list (yaaay!)
  • when you select all, the window's selection actually *shows* you that they're all selected. (used to actually select, but you couldn't see it cuz it didn't redraw the window)
  • fixed "Find Duplicates", it was busted
  • re-shut it off, it needs to be re-written
  • r20
  • more thread bugs fixed
  • fixed crasher if audio or video can't start up, it'll now just gracefully fail.
  • when saving database files, no loner leak a save-write record
  • implemented "safe save", that is, *all* database files are saved to a temporary file, and then, only when the save has been verified as completely successful, the temp file is swapped for the real file, then the temp file is deleted. This will prevent library corruption if you have to force quit during a save operation.
  • Really *really* fixed QuickTime export, it now works like the burner, making sure all files are present before attempting export. Good news is you can now que up as many exports as you want, even while some are already exporting. There's a task that shows the number of exports too.
  • r22
  • my "safe save", heh, utterly BROKE save completely, if you're using a DOS formatted volume. Woops! Okay fixed.
  • r23
  • re-enabled Preset Playlists, but man is it SLOW if your searching for duplicates. You have been warned. (it will be fixed, btw, to be faster) Now uses the Tasks window.
  • QT Export no longer leaves things in a bad state, used to be it'd crash when you quit, it would also leave the Tasks window full of hiccups
  • Sometimes when you'd stick a CD in (or start up with a CD in) it'd crash due to some old dumb code (Assert fail: itemVec)
  • r25
  • fixed many parsing bugs if you have to rebuild your library from scratch. now recognizes unicode characters, does not choke on slashes in the name, em-dashes, option-spaces etc.
  • i now limit the "purge cache" function so it can only run one thread at a time. it *was* capable of being called multiple times simultaneously, but that could lead to crashes where both threads try to delete the same file at the same time. came up a lot during QuickTime Export
  • LOTS more unicode goodness under the hood (this gets us closer to internationalization, and the ability to have weird characters in song names and path name)
  • atomic access (via mutex) to song file paths (so less crashy when multiple threads attempt to access the file path)
  • if you try to rip on an unsupported drive, you'll only get one warning, not one for each song
  • Message Alert messages are no longer logged twice
  • all access to playlist and song maps are now thread safe
  • was forced to re-think my Spooler's use of threads, was experiencing deadlocks and hangs. re-wrote a huge chunk of code. now more thread safe, and no dead locks.
  • even MORE unicode. bit by bit we're getting there. this time WRT playlist names and singer names. (unicode == UTF8 == multilingual characters)
  • re-wrote huge parts of QuickTime export. hopefully the design is good, we'll see. you can export direct from disc much more reliably.
  • you no longer must enter so much meta info to rip, only to submit
  • the object tracker (the one that, in the log file, says things like: "Open for read: Spooler: Audio File -> Adapter: Progress -> 02 Golden Slumbers") is now thread safe, TOTAL *DUH* on me for not getting that 'till now. Advice to programmers: pay attention to your "Programming with Threads" teacher, devise a strategy BEFORE you start programming. I graduated before they even taught multi-threading in school, i'm learning all of this the hard way.
  • the Get Info dialog now hilites the whole track name when it comes up
  • okay, all that Unicode goodness wasn't going anywhere 'till just now, a core routine was stripping out non-roman characters. fixed.
  • you wouldn't believe the number of routines that need unicode conversion
  • r28, sat 11, 3:45pm
  • fixed yet another popular crash, having to do with CFStrings not having been initialized, then attempting to compare them
  • in the Interpret Names dialog, if you get the "more choices" button, clicking it and the "back" button will now fully refresh the window
  • there were some songs that, after unpacking, would cause an assert about SamplesPerSubChan being wrong, this has been fixed
  • pasting stuff copied from another app never worked (!), now it does (into eg: get info dialog)
  • when you copy a selection of tracks (to paste into eg: a spreadsheet for songbook printing), we now do NOT copy the track number, and we now put the song number first, and we now sort the list by song number (and they start at 1 not zero)
  • fixed the dumb "this playlist id already exists, attempting to rectify" problem, same story for duplicate singers. sorry my very bad. yes i know there are more bugs. i'm working on it.
  • r29
  • oops, didn't increment the version number (no other changes)
  • r30
  • re-wrote the FSrGetFileDates code to be modern, hope that might fix some crashes?
  • fixed the ability to create a new playlist, broke in r30
  • a huge number of asserts would throw an unexpected exception (with no handler) and cause crashes, when they were just supposed to be informative
  • okay, i'm adding track number back (to the end) of copy-paste
  • now using the command line to unzip problematic zip files, this actually gets most of them
  • more mutex goodness for fewer random crashes
  • when you do "reveal song file(s)", i now log the path to the file, so you can see where it was supposed to be if the file isn't actually found
  • fixed a bug where some unzipped files would not play a 2nd time if they were not completely unpacked the first time you tried them
  • fixed more zip related bugs.
  • r32
  • fixed quicktime export to never attempt to export more songs at once than what you allow for in the cache. Was crashing when eg: your cache allowed 5 songs and you go and export 10 songs, the songs would get deleted from the cache right out from under the exporter
  • fixed at least one case of that assert about "main thread"
  • fixed another case of that assert about "main thread", this time WRT saving the database
  • you are no longer allowed to close the main window. one day you'll be able to, and/or open more than one, or open just a playlist or whatever you want, but for now, disabled.
  • for newbies: if you go "File->Add to Library..." and pick a CD or songs on a CD, they import "the way you expect"
  • you are now always asked if you're sure when you delete tracks from the library that have been "Add to Library..."'d. These were just file references, not actual files, so i didn't ask before, but some folks prefer to have a confirm dialog. You can always skip the confirm dialog by holding the command key when you delete
  • r33 March 8 2006
  • i made the code purposefully crash if you get that main thread assert, seems people still see it, but I don't. i need a crash report to fix it
  • error strings are now more descriptive
  • fixed more assert main thread on startup bugs, hope you don't see that any more
  • fixed the hang on quit bug, related to orphan encoding never completing
  • fixed the cache folder filling with a bazillion folders, even if you clear the cache
  • fixed the "clear cache" routine to do more correct cache clearing
  • possibly fixed a ripping bug, we'll see
  • r37
  • FINALLY fixed that stuttering bug. Now, even on a 500 MHz system, NO stuttering, WOHOO!
  • for those of you futzing about with the burning plugin, i've fixed it up so it may work better now
  • r39 March 13
  • fixed those Spooler crasher bugs. Problem was, if there was an error the spools would get deleted right out from under the spooler. I now use refcounting to ensure that all users of a spool have released their holds before deleting any spool. This shifts the potential problems to being "holding on too long" rather than "letting go too early", at least you are safe.
  • r42 March 19 NO MORE SPOOLER CRASHES!! (At least, that is my sincere hope)
  • fixed hang when you scrub the play head
  • more UTF8 goodness in the log file
  • if you eject a CD after it's done ripping but before it's done encoding, you don't crash when it's done encoding

Previous Versions