The Prerelease Before the Prerelease

Posted by: mschrag

The Prerelease Before the Prerelease - 19/08/2002 21:17

Well .. after many long nights, the new version is really close. I wanted to let the daring grab it and try it out to help catch any goofiness before putting it up. I've gone through the basic things (adding different soups, dleteing soups, deleting non-soups, downloading, synchronizing, importing).
Known issues:
1) Loop checking in the UI isn't in (though it is done at download time). So if you paste a playlist into another playlist that causes a loop, it will let you, but it will be fixed after the next download. This will be fixed for the release.
2) Pasting into and deleting from soups is not done yet (they just do nothing right now)
3) "Find Container Playlists" has gone bye bye for now ... This is primarily because soups are now actually playlists, and since you could setup a search that finds containers and itself would create containers, you can get into some nasty infinite loops -- this is kind of tied into #1 but even nastier.
4) Download w/ Full Path isn't working right now (Playlists have many parents, and I haven't decided how I want to track that path information). It will download fine, but it will only create paths for one level back up.

Notable things:
1) dmz put tag rewriting on download ... Check out Tools=>Options to turn it on
2) soups everywhere -- on the empeg, off the mpeg -- Checkout Tools=>Add a Soup Playlist... Essentailly each row of the list corresponds to a layer of the soup, so to have a "By Artist=>By Album", you would "Add Tag Layer=>Artist" then Add Tag Layer=>Source (Source = the generic name for Album). You can choose to add the soup onto the Empeg or only to jEmplode (this is like the old way)..

Notable things with soups: You should be able to copy sections of the soup and have them continue to update _as long as the soup you copied them from still exists_. If you remove the top layer of the soup, the sub-copies will stay there, but they won't update any longer. It is technically possible to have this work, but it seemed like more trouble than it was worth for now. Along these lines, there may be weird problems if you copy a subsection of a transient (jEmplode-only) soup and then delete the entire soup... I'm not positive if the copy will stay around or not (haven't gotten around to testin this).
3) Toby's new XML format is in there ... a lot easier to work with than the Emplode format.
4) There are several colors (and they go up the tree again). There is a dirty color (red), a "colored" color (blue), and a dirty-colored color (purple). Would people want a separate "marked" color? It's already checking marked, it's just not colorizing.

Anyway ... This has all the usual caveats of a hot-off-the-presses release, though I've spent a lot of time redoing a lot of the low-level system to make it more stable.

One thing I'm very curious about is the performance of the soups on Empegs with several thousand tunes. One performance note is that you may want to wait to open the soups until after their icon is set (you'll see what i mean). As soon as you open the soup, it has to calculate all the children and then it does quite a bit of event firing and array resizing to keep the tree in sync with the soup. This is an area I will be working on quite a bit, but you were warned (if it is taking a while to get the soup up to date).

I highly recommend JDK 1.4 ... I have not tested this on anything but 1.4 so far. I haven't even tried it on my Mac w/ 1.3 yet (I'll do that tomorrow), so if you have a Mac, fire it up and let me know how it goes.

The look and feel defaults to the system look-and-feel now ... On 1.4 I've tweaked a couple things to make the Toolbar look more natural... I'm curious what people think about this as opposed to Metal (the Swing look-and-feel). Anyone have any other look-and-feel preferences?

Anyway -- give it a shot... let me know what happens:

http://www.jempeg.org/jemplode20-supersecret.jar

ms
Posted by: mschrag

I think the 65535 plays thing is fixed too... - 19/08/2002 21:19

non-existent tags defaulted to -1 ... I changed that for dynamic data so it defaults to 0. Existing 65535's will still be there, but it shouldn't make any more. You can use the advanced tag editor to change old ones.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 19/08/2002 21:26

Also -- for those who "enjoyed" the previous release, you'll enjoy even more the hundreds of previously dead playlists that got left hanging and are now added to your root playlist... Cheera.
Posted by: msaeger

Re: The Prerelease Before the Prerelease - 19/08/2002 21:46

Here's what I get when I try to run it. I have 1.4 installed.
This is on W2k

Thanks

java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsToolBarUI

at java.lang.ClassLoader.defineClass0(Native Method)

at java.lang.ClassLoader.defineClass(Unknown Source)

at java.security.SecureClassLoader.defineClass(Unknown Source)

at java.net.URLClassLoader.defineClass(Unknown Source)

at java.net.URLClassLoader.access$100(Unknown Source)

at java.net.URLClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at org.jempeg.empeg.emplode.Main.main(Main.java:74)

at java.lang.reflect.Method.invoke(Native Method)

at com.zerog.lax.LAX.launch(Unknown Source)

at com.zerog.lax.LAX.main(Unknown Source)

Posted by: Daria

Re: The Prerelease Before the Prerelease - 19/08/2002 21:54

Here's what I get when I try to run it. I have 1.4 installed.
This is on W2k


I get similar on Linux:
java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsToolBarUI
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:493)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at org.jempeg.empeg.emplode.Main.main(Main.java:74)
at java.lang.reflect.Method.invoke(Native Method)
at com.zerog.lax.LAX.launch(Unknown Source)
at com.zerog.lax.LAX.main(Unknown Source)
Posted by: Waterman981

Re: The Prerelease Before the Prerelease - 19/08/2002 22:27

Ditto here... on XP w/ JDK 1.4
Posted by: mcomb

Re: The Prerelease Before the Prerelease - 19/08/2002 23:25

Ditto all those dittos On OSX 10.2

-Mike
Posted by: tms13

Re: The Prerelease Before the Prerelease - 20/08/2002 03:05

Me too, I'm afraid.

I'll publish my playlist stylesheet (in its own thread) when I am able to run the new JEmplode.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 05:03

Couple things:
1) I'm uploading a new one that won't have this problem -- give this about 10 mins

2) If you have 1.4 installed, but you run jEmplode with the executable, you are actually only using 1.3 (the VM that it comes with -- which is why this problem occurred). Instead, you should double click the jemplode20-supersecret.jar or run "java -jar jemplode20-supersecret.jar").

Oh yeah -- one other thing -- you may want to turn off autoupdate, since 42 will try to "update itself" to 41.
Posted by: tms13

Re: The Prerelease Before the Prerelease - 20/08/2002 06:26

A brief scan with the latest pre-prerelease (20020820b) looks slightly worrying - all my soup views and searches have disappeared. I didn't change anything in ~/.jempegrc, and your release notes don't say to expect this.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 06:42

Forgot to mention that -- expect this ... For now anyway.. If people are terribly annoyed by this, I can write an importer. Just make a copy of your .jempegrc in your home dir for now.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 06:54

Actually -- you can convert your stuff over pretty easily ... the .jempegrc format is the following:

jempeg.soup.count=3
# a search example
jempeg.soup.0.name=Name of First Soup
jempeg.soup.0.externalForm=search:(title contains test)

# a tag example (By Artist)
jempeg.soup.1.name=Name of Second Souip
jempeg.soup.1.externalForm=tag:artist

# All marked tunes, then By Artist
jempeg.soup.2.name=Name of Third Soup
jempeg.soup.2.externalForm=search:(marked)~tag:artist

Basically the externalForms are ~ separated... You should be able to convert over relatively easily if you have a lot of them and you don't want to use the UI.

Mike
Posted by: tms13

Re: The Prerelease Before the Prerelease - 20/08/2002 07:24

Okay, thanks. I didn't have any custom soups; I was surprised to lose the default ones, though.

I see from your examples that searches are just a special kind of soup. That makes a lot of sense, really.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 07:34

I debated the default ones ... I ended up ditching them because I don't know what performance is going to be like yet on large collections and i thought people would prefer to just pick the ones they want.... Assuming there aren't some huge problems, I will be spending most of my time on performance between now and releease ... I grabbed my 15 license for OptimizeIt Pro, so I need to maximize my time

ms
Posted by: Neutrino

Re: The Prerelease Before the Prerelease - 20/08/2002 07:41

I don't seem to be able to delete any soup listings I create from jEmplode. When you delete them they are removed from the playlists, until you exit the program and return or resync with your Empeg.

Posted by: tms13

Colours in the Pre-Prerelease - 20/08/2002 07:43

A cosmetic issue with the new colours: when they are highlighted, they become very difficult to read (this was an issue in v40 as well, IIRC). See attached.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 07:43

is this an on-Empeg or in-jEmplode soup? And you deleted the top level playlist? and then synched after you deleted it?
Posted by: tms13

Searches in the Pre-Prerelease - 20/08/2002 07:51

A couple of searches are giving me strange results:

jempeg.soup.5.name=Orphaned items
jempeg.soup.5.externalForm=search:(refs \= "0")
jempeg.soup.6.name=Items with optional features
jempeg.soup.6.externalForm=search:(((options like "x") or (options > "0")) and (not (options \= "0x0")))

"Orphaned Items" contains about a fifth of my tunes, but they all have refs between 2 and 13, not zero. I believe it should be empty. (Hmm, what runes do I need to get my All Tunes soup back? Search on (type="tune"), perhaps?)

"Items with optional features" is empty, even though I can see a handful of playlists with non-zero options.

The following two searches work fine:

jempeg.soup.7.name=Marked tunes
jempeg.soup.7.externalForm=search:((marked like "yes") and (type \= "tune"))
jempeg.soup.8.name=Fixed-rate tunes
jempeg.soup.8.externalForm=search:((bitrate like "fs") and (type \= "tune"))
Posted by: mschrag

Re: Searches in the Pre-Prerelease - 20/08/2002 09:14

see what happens if you remove the quotes from the numeric values ...
just out of curiosity
Posted by: mschrag

Re: Searches in the Pre-Prerelease - 20/08/2002 09:31

I briefly thought about how to get All Tunes back too ... type=tune would do it ... fid > 0 would do it also. maybe a blank search (haven't tried this one).
Posted by: jbauer

Re: Searches in the Pre-Prerelease - 20/08/2002 09:55

Can someone briefly explain what "soup playlists" are please?

- Jon
Posted by: tms13

Re: Searches in the Pre-Prerelease - 20/08/2002 10:09

In reply to:

see what happens if you remove the quotes from the numeric values ...


No change, AFAICT.
Posted by: mschrag

Re: Searches in the Pre-Prerelease - 20/08/2002 10:12

soup playlists are playlists that are created on top of the "soup" of tunes on your Empeg. Originally, all tunes on the Empeg had to be put into playlists. In the 2.0 serious, this restriction was removed, which meant you had to have different way to view your tunes to see them... Enter "the soup" -- Views like "By Artist" or "By Album" are examples of soup playlists. Basically these are dynamically generated views of your tunes based on some criteria.
Posted by: mschrag

Re: Searches in the Pre-Prerelease - 20/08/2002 10:14

I won't be able to look at this till i get home tonight, but if you get some free time, can you split that query into its components and see if they each individually return the correct results? I'll add this example to the stress tester for the query engine too ...
Posted by: tms13

Uploading m3u files to the Pre-prerelease - 20/08/2002 11:03

Uploading m3u files never worked for me in v40, so maybe I'm doing something wrong.

I have a compilation album, and wanted individual artist folders and an M3U playlist file with the running-order of the compilation. In other words, the m3u file looks like

Artist 1/Track 1.mp3
Artist 2/Track 2.mp3
...etc

JEmplode happily imports all the files normally, but then complains about each one rthat it eads from the playlist file:

org.jempeg.empeg.tags.UnknownFileFormatException: Unknown file format.
at org.jempeg.empeg.tags.TagExtractorFactory.createTagExtractor(TagExtractorFactory.java:84)
at org.jempeg.empeg.tags.TagExtractorFactory.createTagExtractor(TagExtractorFactory.java:72)
at org.jempeg.empeg.filesystem.AbstractLocalImportFile.identify(AbstractLocalImportFile.java:112)
at org.jempeg.empeg.nodestore.FIDLocalFile.identify(FIDLocalFile.java:126)
at org.jempeg.empeg.nodestore.FIDLocalFile.createInstance(FIDLocalFile.java:59)
at org.jempeg.empeg.model.AbstractPlaylistNodeModifier.importFiles(AbstractPlaylistNodeModifier.java:100)
at org.jempeg.empeg.model.AbstractPlaylistNodeModifier.importFiles(AbstractPlaylistNodeModifier.java:92)
at org.jempeg.empeg.model.AbstractPlaylistNodeModifier.importFiles(AbstractPlaylistNodeModifier.java:92)
at org.jempeg.empeg.model.AbstractPlaylistNodeModifier.importFiles(AbstractPlaylistNodeModifier.java:92)
at org.jempeg.empeg.model.AbstractPlaylistNodeModifier.importFiles(AbstractPlaylistNodeModifier.java:60)
at org.jempeg.empeg.emplode.ui.NodeModifierUI$2.run(NodeModifierUI.java:48)
at java.lang.Thread.run(Thread.java:484)

I thought it was supposed to add extra references to the already-uploaded FIDs?

Later: it works if I use absolute filenames in my M3U file.

And a couple of other things I noticed, trying my first jEmplode upload (I normally use emptool, so I may be doing stuff wrong): a track that had an ID3v2 tag with no year didn't pick up the year value from its ID3v1 tag instead, the "refs" tag has large values on uploaded tracks - consistently 8, except for the files in the M3U, which are 9. Is this because references from the soup are being counted, perhaps?
Posted by: mschrag

Re: Uploading m3u files to the Pre-prerelease - 20/08/2002 11:10

I'll take a look at the m3u import ... So is the Artist 1 directory relative to the directory the m3u file is in?

What did you mean about adding extra references to the already uploaded FIDs?

I don't believe that the tag parser currently falls back to loading data out of the v1 tags if it isn't set ... I may be able to do this -- I'll have to check.

You're definitely right about the soups increasing refs ... Both jEmplode and on-Empeg soups increase refcounts... Never really considered this. This one is probably worth a bit of a discussion, but clearly jEmplode-only soups should NOT increase refcounts, so I'll fix that one.... However, on-Empeg soups is another issue. I'm not really sure how I feel about this one. It's "lying" to not increase refs on-Empeg since they really are regular references.... I need to look more into what problems may occur if I secretly don't increase references for soup playlists even on the Empeg.

ms
Posted by: tms13

Re: Searches in the Pre-Prerelease - 20/08/2002 11:12

I obviously can't split the (refs = 0) search...

Splitting the other one may have turned up something useful - all the items I've set options on are playlists, and none of the searches have returned any playlists, only tunes. Perhaps this is where the problem lies? Version 42 returned both tunes and playlists, unless you explicitly selected one or the other using (type = "tune") or similar.
Posted by: mschrag

Re: Searches in the Pre-Prerelease - 20/08/2002 11:19

Yeah this is kind of mentioned in the release notes ... I haven't dealt with showing playlist matches right now to avoid loops. Once I decide how I want to handle loop checking then I will put playlist search results back in...

the refs = 0 failing makes sense now given the realization that the soups are refcount increasing.

I'll try out this query at home tonight and see what's up...
Posted by: tms13

Re: Uploading m3u files to the Pre-prerelease - 20/08/2002 11:39

In reply to:

What did you mean about adding extra references to the already uploaded FIDs?


I meant that I expected it to upload the tune once, and put it into two playlists. And that's exactly what happens with a M3U containing absolute names, so there's no bug there.

In reply to:

is the Artist 1 directory relative to the directory the m3u file is in?


That's what I was doing (I was generating the M3U file using "find * -name '*.mp3' >playlist.m3u"). I ought to check what Grip generates when you tell it to produce a M3U file. Can anyone here give an authoritative statement of whether this is the correct way to write M3U files, or, better, point us at a specification?

Later: this is exactly what Grip writes. So, for example, I can do something like "xargs ls -l <./playlist.m3u" and have it work, if I'm in the directory that contains the M3U file.

As to the issue with on-player soups - I haven't used any of these yet (though I might put a "Marked tracks" view on my player sometime), so I don't know what the Right Thing is. I would go with counting them at least for now, and only consider changing that when we're confident that there are no other bugs that could interfere (so we are more confident that subsequent misbehaviour is due to this).
Posted by: tms13

Re: Searches in the Pre-Prerelease - 20/08/2002 11:44

I have to admit that I didn't correctly understand your comment about loops in the release notes. Now I understand that my searches for playlists won't work, at least for the present.

In reply to:

the refs = 0 failing makes sense now given the realization that the soups are refcount increasing.


Does it? Remember that the problem is that lots of things were appearing there that had refs>0 (it should be an empty result set). Or is the problem that refs is changing all the time as the views are built, making it essentially random what value refs has when it's looked at?
Posted by: Neutrino

Re: The Prerelease Before the Prerelease - 20/08/2002 11:46

This is in jEmplode. I created a list named "Test" with the tag criteria, Artist and Source. The playlist was generated fine. I then deleted the playlist "test". It is removed from the list of playlists and everything looks fine. If I resync now or if I exit jEmplode and return the playlist "test" is back in it entirety. This is only in jEmplode as I never resynced when this playlist was visible.
Posted by: mschrag

Re: Searches in the Pre-Prerelease - 20/08/2002 11:49

I need to look more at your query ... I think the fact one of the "and" statement collapsed to an empty set means that it should have returned an empty set.

That having been said, you are also correct that refs is constantly changing and by being included in a playlist, it is possible you can setup a scenario where it actually then needs to be excluded from the playlist (and thus included again...). The saving grace here is that refs are real tags, and thus don't fire tagModified events when they are changed ... The more I think about this the more I think that soup membership needs to be idempotent .... I'll work on this. At the very least, jEmplode soups should be -- they should _appear_ to work exactly like they used to.
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 11:51

So to make sure -- "Test" is hanging off of the Empeg node of the tree, not off of the Playlist node of the tree? Is it the only soup you have? If you make another soup and delete the first, does it go away, or can you not delete any of them?
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 12:09

can you check your .jempegrc and tell me what the value of your jempeg.soup.count is? I wonder if you have the old soups in there and there's some problem ... I shouldn't have reused that variable...
Posted by: tms13

List Pane issues - 20/08/2002 12:27

Numeric fields like Position aren't right-justified any more (cosmetic)

"Set Playlist Order" doesn't put the tracks into exactly the order that's displayed. It seems to give a list that is in the correct order according to the current sort column, but shuffles items with equal sort key. This is annoying if I sort by several tags in turn to give a multi-level sort.
Posted by: mschrag

Re: List Pane issues - 20/08/2002 12:39

Interesting .. I'll take a look at that one ... I can't remember what sort algorithm that uses.
Posted by: rjf

Re: The Prerelease Before the Prerelease - 20/08/2002 13:53

First problem I had -- I accidently added a soup list with no name, so only an icon shows up. I added it as a jempeg soup only, and it was simply a tag soup, by Artist.

Now I cannot delete that soup. It says it is deleting it when I right click and choose delete, but after a sync it reappears.

Cheers,
rjf&
Posted by: mschrag

Re: The Prerelease Before the Prerelease - 20/08/2002 15:14

I'll fix the no-name thing ... Can you tell me how many jEmplode-only soups you have and then look in .jempegrc in your home directory and tell me what the value of jempeg.soup.count is?
Posted by: rjf

Re: The Prerelease Before the Prerelease - 20/08/2002 15:18


Sure. When I looked in there, the count was set to three. There were 4 soup's in the rc file, numbered 0 through 4.

However, in the UI, only the unnamed soup list showed up.

I deleted all the soups in my rc file, and restarted and all was fine.

rjf&
Posted by: mschrag

Re: Colours in the Pre-Prerelease - 20/08/2002 16:40

Not sure how to deal with this in a generic way ... On Windows, the default selector is very dark, so dark foregrounds make it hard to read there ... Anyone know of an easy way given an RGB value to determine if I should use a dark or a light foreground color?
Posted by: rjf

Re: Colours in the Pre-Prerelease - 20/08/2002 19:03

Yes, convert the RGB to HSL (Hue, Saturation, and Luminance) and then look at the L value -- if it's above a certain threshold (i.e. bright), use a dark color, else use a light one.

I don't have the conversion handy, but a quick google search will find you what you need.

rjf&
Posted by: tms13

Re: Colours in the Pre-Prerelease - 21/08/2002 02:53

The standard calculation of luminance is something like Y = (0.299*r + 0.587*g + 0.114*b). At least, that's what I've used in my own code in the past. You can do the calculation in integer arithmetic as Y = ((299*r + 587*g + 114*b) / 1000).

Perhaps for the selected node, we could simply invert foreground and background if it's a coloured or modified node? And use the normal highlight foreground and background (textHighlightText and textHighlight) otherwise?
Posted by: rjf

Re: Colours in the Pre-Prerelease - 21/08/2002 09:02

Yeah, that looks familiar. Here is a link I dug up with a couple of alternative methods:

http://www.xbeat.net/vbspeed/c_RGBToHSL.htm

rjf&