[Mixxx-devel] The MinGW build, and other pending changes

2013-06-23 Thread Steven Boswell II
I found my MinGW branch at https://github.com/mixxxcommunity/mixxx, in a branch 
called ulatekh-mingw.  I branched that into my own repo and brought it up to 
date.  The merge didn't go very smoothly, but I managed to fix all the problems 
by hand.  (Good thing I kept the last bzr version of the trunk and my branches!)

You can find the pull request at https://github.com/mixxxcommunity/mixxx/pull/1 
.  I would appreciate it if the Powers That Be could review it.  The longer it 
goes ignored, the more work it is for me.

That branch involves some changes that, while necessary to get Mixxx to build 
under MinGW, aren't directly related.  The details are at 
https://bugs.launchpad.net/mixxx/+bug/1186462 .  I would appreciate it if those 
changes could get cherry-picked.

Finally, https://bugs.launchpad.net/mixxx/+bug/1184432 contains another 
neglected fix, this one for the 64-bit Linux version.  I would appreciate it if 
this fix could get checked into the 1.11 release branch.

Thanks for any attention to these issues.

Steven Boswell
--
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] The MinGW build, and other pending changes

2013-06-23 Thread Steven Boswell II
Done...see https://github.com/mixxxdj/mixxx/pull/25
Thanks in advance for taking a look at it.




 From: Max Linke max_li...@gmx.de
To: Steven Boswell II ulat...@yahoo.com 
Cc: mixxx-devel mixxx-devel@lists.sourceforge.net 
Sent: Sunday, June 23, 2013 2:34 PM
Subject: Re: [Mixxx-devel] The MinGW build, and other pending changes
 


Hi 

Can you create a new pull request against mixxxdj/mixxx. I'm not sure if I have 
time this week to at it.


Best Max

Steven Boswell II ulat...@yahoo.com wrote:


I found my MinGW branch at https://github.com/mixxxcommunity/mixxx, in a branch 
called ulatekh-mingw.  I branched that into my own repo and brought it up to 
date.  The merge didn't go very smoothly, but I managed to fix all the problems 
by hand.  (Good thing I kept the last bzr version of the trunk and my branches!)

You can find the pull request at https://github.com/mixxxcommunity/mixxx/pull/1 
.  I would appreciate it if the Powers That Be could review it.  The longer it 
goes ignored, the more work it is for me.

That branch involves some changes that, while necessary to get Mixxx to build 
under MinGW, aren't directly related.  The details are at 
https://bugs.launchpad.net/mixxx/+bug/1186462 .  I would appreciate it if those 
changes could get cherry-picked.

Finally, https://bugs.launchpad.net/mixxx/+bug/1184432 contains another 
neglected fix, this one for the 64-bit Linux version.  I would appreciate it if 
this fix could get checked into the 1.11 release branch.

Thanks for any attention to these issues.

Steven Boswell--
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Branches moved to github

2013-06-22 Thread Steven Boswell II
I see that my auto-DJ-crates branch has been moved to github, but it's owned by 
daschuer.
I had held off moving my own branches to github; the chatter on the list seemed 
to say let Owen do it.
Not a big deal -- I can fork daschuer's repo and issue my own pull request.

My question is...where did my MinGW branch end up?

Steven Boswell
--
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Directory-hash calculation during library-rescan

2013-06-05 Thread Steven Boswell II
Right now I'm rescanning my track collection on my laptop, and I expected it to 
be a short operation, but it's taking forever.  I'm guessing it's because I 
moved a large part of my track collection to a different partition on my hard 
drive, even though the path remained the same.  The issue is that QDirIterator 
doesn't present the tracks in any particular order; it'll be dictated by how 
they happened to be stored in the underlying filesystem.  When I moved the 
track collection, that permuted the files in each directory.

The issue is that the directory-hash calculation isn't order-independent; it 
calculates the directory hash by appending all the filenames to one string.  If 
we changed it to calculate the hash of each filename individually, and XORed 
those together, then it would be order-independent, and shouldn't detect less 
changes than the previous method.

Thoughts?

Steven Boswell
--
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Mixxx 1.11.0 now in RPMFusion

2013-06-04 Thread Steven Boswell II
It's been moved out of the testing repos  is now available for everyone from 
RPMFusion.
W00t!

Steven Boswell
--
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] MinGW build of Mixxx from Fedora Core is ready to merge!

2013-06-03 Thread Steven Boswell II
Please see https://code.launchpad.net/~ulatekh/mixxx/mingw -- we can now build 
the MS Windows version of Mixxx (including the installer) from Fedora Core.


The necessary information to build the dependent packages is at 
https://github.com/ulatekh/fedora-mingw-ardour -- I'm working to get these 
packages submitted to Fedora and RPMFusion, but there seems to be a really big 
backlog.

Finally, the lament on http://mixxx.org/wiki/doku.php/build_windows_installer , 
i.e. Now, doesn't this make you long for a MinGW build?, has been answered!

I've been working with Tuukka Pasanen on his ffmpeg branch -- with my changes, 
it builds and runs under MS Windows, and I got it to play a .wma file.  My 
MinGW version of ffmpeg is REALLY minimalist; my next project is to build as 
many of its dependencies as I can.  There are only several dozen of those. :-)


To the Powers That Be: please look at my branch and consider merging it.

Steven Boswell
--
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with 2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine

2013-05-22 Thread Steven Boswell II
I finally built Fedora RPMs for all of Mixxx's dependencies, got them to pass 
rpmlint/mock/fedora-review, and even submitted a few 
package-requests, so they might actually end up in Fedora's repos.  
Until then, here's a github repo containing all the files you'll need to turn 
Fedora Core's standard packages into their MinGW equivalents:

https://github.com/ulatekh/fedora-mingw-ardour.git

(It's
 a branch of someone else's similarly-themed archive, but for Ardour's 
dependencies.  Mixxx and Ardour share several dependencies.)

You'll
 need to build and install (in order) libmad, portmidi, protobuf, libid3tag, 
taglib, flac, gsm,
 libsndfile, libsamplerate, portaudio, jack-audio-connection-kit, 
kde-filesystem, and phonon.

Coming soon: phonon, qt (rebuilt to use phonon), vamp-plugin-sdk, and hss1394.

I got Mixxx to build with them using scons, the dist32 directory is created 
properly, and the result runs fine under MS Windows!

Here's my branch:

lp:~ulatekh/mixxx/mingw

Next project...getting the scons-driven NSIS build to make an installer!  I 
haven't even tried it yet, but I don't have time now...I'm going out of town 
tomorrow.  I'll continue when I get back!  Until then...feel free to try it out!

Steven Boswell--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] CFLAGS vs. CCFLAGS?

2013-05-22 Thread Steven Boswell II
I just noticed something... build/mixxx.py refers to CFLAGS in one place, and 
everywhere else in the build system, it's called CCFLAGS.
That looks like an inconsistency that should be fixed.
Thoughts?

Steven Boswell
--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Mixxx 1.11.0 submitted to RPMFusion

2013-05-22 Thread Steven Boswell II
You may follow along at https://bugzilla.rpmfusion.org/show_bug.cgi?id=2801 .  
Hopefully it'll be in the yum repos soon!


The build failed on x86_64; I don't have a 64-bit Linux to test on.  (I could 
install one, but not now...I'm leaving for a trip tomorrow.)  Has anyone tried 
to build Mixxx on 64-bit Linux?  ( 
http://buildsys.rpmfusion.org/build-status/job.psp?uid=17256 says that 
plugins/vamp/libmixxxminimal.so apparently didn't build.)


Steven Boswell
--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine

2013-05-21 Thread Steven Boswell II
If you do that, I'll be glad to put my cmake knowledge to good use by reviewing 
your work.




 From: Tuukka Pasanen pasanen.tuu...@gmail.com
To: mixxx-devel mixxx-devel@lists.sourceforge.net 
Sent: Monday, May 20, 2013 10:49 PM
Subject: Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
 


Hello,
CMake seems to be (What comes out) old fashion Makefile system I that I happens 
to like. Real life is allways a superior thread in this kind of a projects. 
What are benefits (other than faster building and somehow cleaner configuraion 
+ KDE using CMake) in switch?
I could probably do it because it sounds 'fun' task but after I somehow get 
FFmpeg/Libav work back to trunk. 

Kind regards,
Tuukka--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine

2013-05-20 Thread Steven Boswell II
The mixxx.pro in the  lp:~ulatekh/ mixxx/mingw branch has been brought up to 
date, at least as much as I know how to; feel free to try it out.

FYI, I've built mingw-phonon, but am still struggling to rebuild mingw-qt so 
that it'll use phonon.  Once that's done, I can enable vinylcontrol and hid in 
the MinGW build!

Steven Boswell




 From: Tuukka Pasanen pasanen.tuu...@gmail.com
To: mixxx-devel@lists.sourceforge.net 
Sent: Monday, May 20, 2013 4:27 AM
Subject: Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
 


Hello,
openSUSE also have good mingw support and rpms. I see if I have
  time to play with this.
Is it possible to get rid of scons and get this qmake for 1.12? It
  would be nice just to have pure QT building system.

Thanks,
Tuukka
--
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Compiling mixxx on linux

2013-05-20 Thread Steven Boswell II
Maybe you're trying to build the 64-bit version?

I haven't tried that myself yet.
Maybe add machine=i386 to your scons line?




 From: James J Fagan jfag...@binghamton.edu
To: mixxx-devel@lists.sourceforge.net 
Sent: Monday, May 20, 2013 6:31 PM
Subject: Re: [Mixxx-devel] Compiling mixxx on linux
 


Thank you for all the tips I have now passed the step of build -dep mixxx but 
when I try to compile with scons i get the following error:

 i386 architecture of input file `lib/fidlib-0.9.10/fidlib.o' is incompatible 
with i386:x86-64 output

Any ideas on what I need to do to fix this?

Thanks,
James Fagan--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine

2013-05-20 Thread Steven Boswell II
I'm fairly familiar with cmake.  But switching to another build system is a lot 
of work; we'd have to be really sure there are enough benefits.
Also...real life is threatening to intrude any day now :-)

Steven Boswell




 From: Daniel Schürmann dasch...@mixxx.org
To: Tuukka Pasanen pasanen.tuu...@gmail.com 
Cc: mixxx-devel mixxx-devel@lists.sourceforge.net 
Sent: Monday, May 20, 2013 11:23 AM
Subject: Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
 


Hi Tuukka, 

my vote is for cmake, The KDE guys have made good experience with it. But I 
think this is a lot of work to migrate to cmake.
I would be happy if someone picks up that task. Scons is so slow.

Kind regards, 

Daniel
--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Compiling mixxx on linux

2013-05-20 Thread Steven Boswell II
You need to add an install_root setting to your scons command line.
When I'm making test builds, mine looks like 
install_root=/home/sboswell/localroot .
Then I have /home/sboswell/localroot/bin in my PATH.
I can run Mixxx builds from the command line that way, and it finds all the 
files.




 From: James J Fagan jfag...@binghamton.edu
To: Steven Boswell II ulat...@yahoo.com 
Sent: Monday, May 20, 2013 6:58 PM
Subject: Re: [Mixxx-devel] Compiling mixxx on linux
 


Thanks for all the help, I got passed this issue but now when I run using 
./mixxx I get

Main]: Could not open xml file: /usr/local/share/mixxx/schema.xml 


I have the file schema.xml in /home/james/Desktop/mixxx-trunk/mixxx/res

so should I just copy it to where it wants it? or am I doing something very 
wrong?

Thanks,
James Fagan




On Mon, May 20, 2013 at 9:54 PM, Steven Boswell II ulat...@yahoo.com wrote:

Maybe you're trying to build the 64-bit version?

I haven't tried that myself yet.
Maybe add machine=i386 to your scons line?





 From: James J Fagan jfag...@binghamton.edu
To: mixxx-devel@lists.sourceforge.net 
Sent: Monday, May 20, 2013 6:31 PM
Subject: Re: [Mixxx-devel] Compiling mixxx on linux
 


Thank you for all the tips I have now passed the step of build -dep mixxx but 
when I try to compile with scons i get the following error:

 i386 architecture of input file `lib/fidlib-0.9.10/fidlib.o' is incompatible 
with i386:x86-64 output

Any ideas on what I need to do to fix this?

Thanks,
James Fagan

--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Building Mixxx with MinGW on a Linux machine

2013-05-18 Thread Steven Boswell II
After building an MS Windows installer for Mixxx using the standard 
instructions, I decided to try getting it to work with MinGW running under 
Linux.
The branch at lp:~ulatekh/mixxx/mingw is the result of my work so far.
The qmake version (i.e. build/qtcreator/mixxx.pro) is a bit clunky, but can be 
made to work.

Here's my scons command to cross-compile the MS Windows version:

scons ladspa=0 shoutcast=0 hifieq=1 script=0 optimize=0 ffmpeg=0 target=windows 
crosscompile_root=/usr/i686-w64-mingw32/sys-root/mingw hss1394=0 vamp=0 
vinylcontrol=0 hid=0 sqlitedll=0

I haven't built hss1394 for MinGW yet, vinylcontrol and hid depend on phonon 
(which has heavy dependencies, like KDE :-), and I'm still trying to build a 
MinGW version of jack-audio-connection-kit -- until then, Mixxx uses 
DirectSound.

Many of the packages that Mixxx depends on are not in the yum repos.  See 
https://bugs.launchpad.net/mixxx/+bug/1179683 for an archive containing .spec 
files and patches that can be used to transform the standard versions of the 
dependencies into the MinGW versions.  The archive is specific to Fedora Core 
18, but I provided enough information to let you adjust my work to your own 
Linux distribution.

Give it a go, let me know if it works for you!

Longer term, I'm trying to get these dependencies submitted to Fedora, but 
based on the VERY long list of packages awaiting review, I doubt it'll ever 
happen.  I don't know if we can set up a yum repo on mixxx.org, but that would 
be one solution.

Steven Boswell--
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] djworx tl;dr: Mixxx needs effects

2013-05-13 Thread Steven Boswell II
PLEASE, let's not go the route of the Chrome/Firefox model.  I _hate_ that.
Major versions should be reserved for changes that are not 
backwards-compatible, like they were originally intended.

And at the risk of angering our lead developer, I think Chrome did it first. ;-)




 From: Owen Williams owilli...@mixxx.org
To: mixxx-devel@lists.sourceforge.net 
Sent: Monday, May 13, 2013 2:21 PM
Subject: Re: [Mixxx-devel] djworx tl;dr: Mixxx needs effects
 

Or we could drop the 1. and just call this release Version 11.  That's
sort of the chrome/firefox model.

(At least it's not 0.9.9.11BETA)

On Mon, 2013-05-13 at 23:13 +0200, William Good wrote:
 On Mon, May 13, 2013 at 5:44 PM, Owen Williams owilli...@mixxx.org wrote:
  And apparently our version numbers are too low??  That's a weird
  complaint.
 
 
 Meh, it seems that's always an issue people have with OSS. The authors
 have some sort of vision for the next major release, and everyone
 else just expects every non-bugfix release to increment the major
 version number (as happens with most commercial software). At some
 point in Linux 2.x, Linus said whatever, here's Linux 3.0.--
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] 1.11.0 source code release

2013-05-12 Thread Steven Boswell II
So is the source code release in http://downloads.mixxx.org/mixxx-1.11.0/ 
stable now?

The issue is that I'd like to get an updated mixxx package onto rpmfusion.org, 
and want to know if I can refer to that source release in the .spec file, e.g. 
Source0: 
http://downloads.mixxx.org/mixxx-%{version}/%{name}-%{version}-src.tar.gz;.

I'll of course apply any updates in the current version of the release branch, 
and call the package mixxx-1.11.0-20130512bzr (for whatever date I finally do 
this).

Steven Boswell
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Pending changes, blueprints

2013-05-12 Thread Steven Boswell II
Now that the release is out the door and we all have some breathing room, can I 
get some opinions on my pending changes and blueprints?

https://bugs.launchpad.net/mixxx/+bug/1051106 is a simple implementation of an 
incremental/pausable library-scan, to allow the locked-database problem during 
library-rescan to be worked around until such time (if any) that this problem 
is handled on an architectural level. Daniel Schürmann added a comment that 
seemed to imply that it had multithreading issues, but as far as I can tell, my 
change doesn't have any multithreaded database-access implications that the 
original code didn't have.  Can someone please tell me if there's any reason 
this change shouldn't be committed?

Also, https://bugs.launchpad.net/mixxx/+bug/1179098 contains a bug fix for a 
data-loss problem I found with the set-log's Join with previous menu-item.  
Any thoughts?

Finally, please look at 
https://blueprints.launchpad.net/mixxx/+spec/auto-dj-crates -- I just made it 
more sophisticated, by allowing the tracks to be prioritized (in addition to # 
of times played) by the last time it was played!  Until my bug fix for Join 
with previous, I didn't realize that this info was stored in 
PlaylistTracks.pl_datetime_added for set-log playlists.
Also, I believe I handled RJ Ryan's objection to this feature, namely that the 
original concept made Mixxx too much like a media player.  Now, there's an Add 
random button, which allows the DJ to accept, remove, or move around any 
randomly-added track, which should take care of the objection.

I appreciate any time you're willing to put into this.  There are a lot of 
other improvements to Mixxx that I'd like to do, but only if there's a chance 
they'll make it into the master branch.

Steven Boswell
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Mixxx and FFMPEG/Libav status update

2013-05-12 Thread Steven Boswell II
Since I've done a little ffmpeg programming in the past, I thought I'd take a 
look at this.

Hopefully I'm doing my comparison right; inside of a checkout of Mixxx's trunk, 
I did bzr update -r 3365, since that seems to be the last version that was 
merged into the ffmpeg branch.


Assuming my comparison is right, my first question is...is there any particular 
reason that there are so many unrelated changes?  It appears that support for 
preview decks has been totally munged (src/engine/enginechannel.[cpp,h], 
src/library/baseexternalplaylistmodel.cpp, 
src/library/baseexternaltrackmodel.cpp, src/library/cratetablemodel.cpp, and 
many many others), that some files have been copied 
(src/library/previewbuttondelegate.[cpp,h].moved and 
src/previewdeck.cpp.moved), ConfigObject::exists() has been removed, 
src/mathstuff.h now has Apple-only definitions for functions that exist in Qt 
(i.e. qIsNaN() and qIsInf()), etc.

Some clarifications on this would be appreciated.
Now I'll dig into the actual FFMPEG changes :-)

Steven Boswell




 From: Tuukka Pasanen pasanen.tuu...@gmail.com
To: mixxx-devel@lists.sourceforge.net 
Sent: Wednesday, May 8, 2013 11:52 AM
Subject: [Mixxx-devel] Mixxx and FFMPEG/Libav status update
 

[...]
FFMPEG/Libav support is now in state it can be used drop-in placement in 
playing and recording.
[...]
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Mixxx and FFMPEG/Libav status update

2013-05-12 Thread Steven Boswell II
Wait...it's easier than that...instead of having to fetch a QTextCodec, I can 
just call QString::fromUtf8().
New patch. :-)

Steven Boswell




 From: Steven Boswell II ulat...@yahoo.com
To: mixxx-devel@lists.sourceforge.net mixxx-devel@lists.sourceforge.net 
Sent: Sunday, May 12, 2013 3:35 PM
Subject: Re: [Mixxx-devel] Mixxx and FFMPEG/Libav status update
 


Tuukka:

So far, all I've noticed wrong is the Unicode handling for metadata (artist, 
title, etc.)
The enclosed patch fixes that.

I also noticed that you're apparently having problems with Unicode paths under 
MS Windows.  After digging around for a while, it appears that this is a known 
bug, though ff_win32_open() in libavformat/os_support.c (at least in my version 
of ffmpeg, i.e. 1.0.5) seems to be doing the right thing for UTF-8.  So it's 
still a mystery.  But maybe this will help you track down the problem.

Steven Boswell


--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-develdiff -ur mixxx-cleaned/src/soundsourceffmpeg.cpp mixxx/src/soundsourceffmpeg.cpp
--- mixxx-cleaned/src/soundsourceffmpeg.cpp	2013-05-12 11:34:19.268383000 -0700
+++ mixxx/src/soundsourceffmpeg.cpp	2013-05-12 15:45:37.682676947 -0700
@@ -29,6 +29,7 @@
 //#endif
 
 #include QDebug
+#include QTextCodec
 
 static QMutex ffmpegmutex;
 static bool ffmpeginit = false;
@@ -161,6 +162,8 @@
  * The method toLocal8Bit() returns the local 8-bit representation of the string as a QByteArray.
  * The returned byte array is undefined if the string contains characters not supported
  * by the local 8-bit encoding.
+ *
+ * See https://ffmpeg.org/trac/ffmpeg/ticket/819 for relevant bug report.
  */
 QByteArray qBAFilename = m_qFilename.toLocal8Bit();
 #else
@@ -408,10 +411,10 @@
 #else
 uint8_t **l_pIn = (uint8_t **)inframe-extended_data;
 #endif
-	
+
 
 #else
-	int64_t l_lInReadBytes = av_samples_get_buffer_size(NULL, m_pCodecCtx-channels,
+int64_t l_lInReadBytes = av_samples_get_buffer_size(NULL, m_pCodecCtx-channels,
  inframe-nb_samples,
  m_pCodecCtx-sample_fmt, 1);
 #endif
@@ -422,7 +425,7 @@
 
 int l_iOutSamplesLines = 0;
 
-	// Alloc too much.. if not enough we are in trouble!
+// Alloc too much.. if not enough we are in trouble!
 av_samples_alloc(m_pOut, l_iOutSamplesLines, 2, l_iOutSamples, AV_SAMPLE_FMT_S16, 0);
 #else
 int l_iOutSamples = av_rescale_rnd(inframe-nb_samples, m_pCodecCtx-sample_rate, m_pCodecCtx-sample_rate, AV_ROUND_UP);
@@ -691,6 +694,8 @@
  * The method toLocal8Bit() returns the local 8-bit representation of the string as a QByteArray.
  * The returned byte array is undefined if the string contains characters not supported
  * by the local 8-bit encoding.
+ *
+ * See https://ffmpeg.org/trac/ffmpeg/ticket/819 for relevant bug report.
  */
 QByteArray qBAFilename = m_qFilename.toLocal8Bit();
 #else
@@ -730,22 +735,24 @@
 //qDebug()  ffmpeg: Parse HEADER [MP3,WMA];
 
 while ((FmtTag = av_dict_get(FmtCtx-metadata, , FmtTag, AV_DICT_IGNORE_SUFFIX))) {
+// Convert the value from UTF-8.
+QString strValue (QString::fromUtf8 (FmtTag-value));
 
 if( !strncmp( FmtTag-key, artist, 7) ) {
-//qDebug()  ffmpeg: HEADER [MP3,WMA] artist:   FmtTag-key   =  FmtTag-value;
-this-setArtist(FmtTag-value);
+//qDebug()  ffmpeg: HEADER [MP3,WMA] artist:   FmtTag-key   =  strValue;
+this-setArtist(strValue);
 } else if( !strncmp( FmtTag-key, album, 5) ) {
-//qDebug()  ffmpeg: HEADER [MP3,WMA] album:   FmtTag-key   =  FmtTag-value;
-this-setAlbum(FmtTag-value);
+//qDebug()  ffmpeg: HEADER [MP3,WMA] album:   FmtTag-key   =  strValue;
+this-setAlbum(strValue);
 } else if( !strncmp( FmtTag-key, date, 4) ) {
-//qDebug()  ffmpeg: HEADER [MP3,WMA] date:   FmtTag-key   =  FmtTag-value;
-this-setYear(FmtTag-value);
+//qDebug()  ffmpeg: HEADER [MP3,WMA] date:   FmtTag-key   =  strValue;
+this-setYear(strValue);
 } else if( !strncmp( FmtTag-key, genre, 5) ) {
-//qDebug()  ffmpeg: HEADER [MP3,WMA] genre:   FmtTag-key   =  FmtTag-value;
-this-setGenre(FmtTag-value);
+//qDebug()  ffmpeg: HEADER [MP3

[Mixxx-devel] MS WIndows build problem, forum problem

2013-05-12 Thread Steven Boswell II
The build problem I just ran into was reported on the forums; see 
http://www.mixxx.org/forums/viewtopic.php?f=3t=4382 .
Unfortunately, no one ever answered him.
The problem is that the source code being built from wasn't part of a Bazaar 
checkout, and src/SConscript doesn't handle that gracefully.
The enclosed patch takes care of the problem.

I tried to register for the forums, so that I could tell the user what to do, 
but it keeps telling me You have provided an invalid answer to the question.  
So the first and last letter in equalizer isn't er?

Steven Boswell
--- mixxx-orig/src/SConscript	2013-05-10 16:13:51.0 -0700
+++ mixxx/src/SConscript	2013-05-12 21:17:21.883028714 -0700
@@ -38,11 +38,15 @@
 str_list.append('#define VER_FILEVERSION ')
 # Remove anything after ~ or - in the version number and replace the dots with commas
 str_list.append(mixxx_version.partition('~')[0].partition('-')[0].replace('.',','))
-str_list.append(','+str(bazaar_revision)+'\n')
+if bazaar_revision:
+str_list.append(','+str(bazaar_revision))
+str_list.append('\n')
 
 str_list.append('#define VER_PRODUCTVERSION  ')
 str_list.append(mixxx_version.partition('~')[0].partition('-')[0].replace('.',','))
-str_list.append(','+str(bazaar_revision)+'\n')
+if bazaar_revision:
+str_list.append(','+str(bazaar_revision))
+str_list.append('\n')
 
 import datetime
 now = datetime.datetime.now()
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] RPMFusion Bug 2413 - mixxx doesn't understand arm arches

2013-05-10 Thread Steven Boswell II
Has anyone seen this?

https://bugzilla.rpmfusion.org/show_bug.cgi?id=2413

I don't own any computers with an ARM arch, so I can't help with this, but for 
anyone that knows ARM arches, this sounds like an easy fix...

Steven Boswell
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] 1.11.0 status

2013-05-08 Thread Steven Boswell II
I hope this is a dumb question...removing Browse mode is only for the Mac App 
Store version, right?




 From: RJ Ryan russelljr...@gmail.com
To: Too Many DJs mixxx-devel@lists.sourceforge.net 
Sent: Wednesday, May 8, 2013 11:14 AM
Subject: Re: [Mixxx-devel] 1.11.0 status
 


Hi folks -- we got rejected due to not following sandbox rules. 

I requested a temporary sandbox exception on filesystem access and I hoped they 
would grant it but they didn't.

We're going to have to do some major work to get this fixed. We may even have 
to completely remove Browse mode. 

On the plus side, I'm going to release 1.11.0 tonight hopefully. Now that I 
know the MAS is not going to happen for a while we'll have to release without 
it.

Woo?
RJ
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] 1.11.0 status

2013-05-08 Thread Steven Boswell II
One more hopefully dumb question...there's a difference between the Mac build 
and the Mac App Store build, right?
I'd hate for a user to start with the Mac App Store build, go through all the 
trouble of getting an open-source Mac build, and find that there's no 
difference...




 From: RJ Ryan russelljr...@gmail.com
To: Too Many DJs mixxx-devel@lists.sourceforge.net 
Sent: Wednesday, May 8, 2013 11:14 AM
Subject: Re: [Mixxx-devel] 1.11.0 status
 


Hi folks -- we got rejected due to not following sandbox rules. 

I requested a temporary sandbox exception on filesystem access and I hoped they 
would grant it but they didn't.

We're going to have to do some major work to get this fixed. We may even have 
to completely remove Browse mode. 
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] New blueprint: auto-DJ crates (with solid beta!)

2013-05-03 Thread Steven Boswell II
Hello all!  Some time ago, I proposed allowing crates to be a source of random 
tracks for Auto-DJ.


I have filed a blueprint for it; you may see it at 
https://blueprints.launchpad.net/mixxx/+spec/auto-dj-crates .

I've also created a branch for it, and uploaded a solid beta version of it.  I 
just need some feedback on the GUI, and for someone with the authority to 
consider it for merging into the trunk.

Let me know what you think!

Steven Boswell
--
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with 2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Best practices for database queries?

2013-05-01 Thread Steven Boswell II
On Wednesday, May 1, 2013 at 11:42 AM, RJ Ryan wrote:
On Wed, May 1, 2013 at 2:15 PM, Daniel Schürmann wrote:
Yes, we should solve this issue and use the const values in any case.
This allows to rely on IDE features like display call tree.

I think we should stick with whatever makes the code easiest to
maintain (which would be using the constants when possible) -- maybe
the constants should be renamed to be a little easier on the eyes?  A
lot of the DAO code doesn't use the constants, that's true.  We should
fix those queries.

Oy...OK.  I'll keep the source-code comment with the human-readable version, 
just to make it easier to understand.

But I am not sure if the use of const QString is performance neutral
to const char* and #define because the heavy QSting constructor is
called.

So IMHO we should change it to const char*.

From what I've seen, the table names are #define'd strings, and the column 
names are global QString objects.  Seems like we should have one way to do 
this.  I'd prefer #define'd strings, simply because the compiler can optimize 
this easily.  If the compiler can optimize const char * just as well, let's 
do that instead.

I try to make sure my code runs well on low-end hardware (a side effect of 
programming video-game consoles for so many years... :-)

There are a lot of non-performance-neutral choices we make in Mixxx,
but that alone isn't enough to make a decision, we have to take the
context into account.  Compared to the QSqlQuery::exec() that comes
immediately after all these queries, some string concatenation isn't
going to break the bank, cycle-wise.  Processors are pretty good at
memcpy these days :).

That's fine until we try to run Mixxx on a GP2X. :-)

On Wednesday, May 1, 2013 at 12:07 PM, RJ Ryan wrote:
I would prefer we totally got rid of writing SQL queries directly in
code and instead composed them using declarative C++ classes which are
then compiled down to SQL.

That's one thing I really like about C# 3.0 ... the introduction of LINQ.  So 
much programming revolves around database queries; it's hard to believe that 
it's taken this long for database-queries to become a first-class member of the 
language, or that only one language has figured this out so far.

Steven Boswell--
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with 2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] GSoC 2013 - Interested in Non-Blocking Database Access

2013-05-01 Thread Steven Boswell II
On Monday, April 29, 2013 at 9:46 PM, RJ Ryan wrote:
Some database operations do need transactional semantics for their
whole operation (i.e.  if you were to stop it half-way and commit to
allow other readers/writers to process) -- for example shuffling a
playlist.  In this case multiple writers could lead to data corruption
races.

Granted...shuffling wouldn't be considered an interruptible write operation.  
Library-rescan and playlist-import could be, though.

today's approach of doing some operations on the GUI thread blocks Qt
from processing events.  This has implications on Mixxx's
responsiveness because things like waveform rendering cannot do work
while the Qt main thread is blocked attempting to read/write from the
database.

Fair enough.  Although C++ doesn't support continuation-style programming very 
well, it's at least possible with Qt -- the GUI could set up a database query, 
send it to the DB thread via signal, and receive the results via signal, but 
oy, that would make the code a lot more complicated...there's gotta be a 
simpler way.

Steven Boswell--
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with 2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] GSoC 2013 - Interested in Non-Blocking Database Access

2013-04-29 Thread Steven Boswell II
Correct me if I'm wrong, but wouldn't a functional non-blocking database 
access implementation be a lot simpler than what's been discussed here?

The issue is that some database operations are interruptible, although it's 
more efficient for them to not be done incrementally.  Library-rescan, and 
playlist/crate import where the imported playlist-file has a lot of tracks that 
aren't already in the database, seem to be the two biggest cases, and both 
involve adding lots of entries to the library table.

It seems to be that implementing this feature boils down to this:

1) Clean up the src/library/dao layer so that each DAO object only 
accesses/modifies one table directly.
2) Any table that can remain locked for a long time (just library?) gains 
some internal logic that allows writers to run unimpeded unless there are 
readers, in which case the batch-write operation is committed, all the readers 
are allowed to do their thing, then the batch-write operation continues.

This is much simpler than a separate thread, and accomplishes the same thing.

Steven Boswell
--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Nasty bug in database! (old news?)

2013-04-23 Thread Steven Boswell II
Please see https://bugs.launchpad.net/mixxx/+bug/1171235 -- my performance 
improvement to playlist/crate import is bugged, and I submitted a patch for it. 
 If you've imported playlists/crates with that code, you just have to delete 
them and re-import them, and your database will be error-free again.


The source of the bug is an error in the database format -- even though schema 
3 changed library.location from a varchar(512) to an integer, the REFERENCES 
constraint wasn't changed from track_locations(location) to 
track_locations(id).  That led me to write bad code without realizing it.  
Also, schema 3 didn't do anything to convert the text-based location to an 
integer-based location, which would be an old bug.


The patch I submitted to bug #1171235 not only fixes my code, it also corrects 
the constraint in the library table, and adds some comments to the place (i.e. 
schema 3) where the problem was introduced, and how it could have been avoided.

I'm guessing that schema 3 being broken is old news, but I thought I'd say 
something anyway.

Perhaps we should be using sqlite with PRAGMA foreign_keys = ON?


Steven Boswell
--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Nasty bug in database! (old news?)

2013-04-23 Thread Steven Boswell II
Please see https://bugs.launchpad.net/mixxx/+bug/1171235 -- my
performance improvement to playlist/crate import is bugged, and I
submitted a patch for it.

Not the first time broken code has made it in right before a release :).

Granted, but I'm deeply unthrilled to be the cause of such a thing.  That's why 
I tried to explain the context...it was my threadbare excuse for doing 
something so unprofessional. ;-)

We really could use library unit tests.

I was surprised to find that constraint checking had to be explicitly enabled; 
if they had been enforced, it's likely the bugged version of my patch would 
have been detected before it left my hands.

The source of the bug is an error in the database format [...]

Good catch!  Schema versions 1 and 2 never made it into the wild --
it's from when we were developing the SQLite library in its own branch
so that explains why we never heard from any users about the conversion
issue.

Indeed.  I was wondering how it managed to be in there!

The patch I submitted to bug #1171235 not only fixes my code, it also
corrects the constraint in the library table, and adds some comments
to the place (i.e. schema 3) where the problem was introduced, and
how it could have been avoided.

The REFERENCES change is probably worth doing [...]

Good news.  So please check in the change as soon as you can.  I don't want my 
breakage to go any further!

Steven Boswell--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Hello, and some patches

2013-04-22 Thread Steven Boswell II
I just posted a patch that implements incremental-rescan and pausable 
rescanning.
See https://bugs.launchpad.net/mixxx/1.11/+bug/1051106 for more details.

BTW, I have three other bug-fix patches posted, ready for comment and/or commit:
https://bugs.launchpad.net/mixxx/+bug/1171232
https://bugs.launchpad.net/mixxx/+bug/1171234
https://bugs.launchpad.net/mixxx/+bug/1171235

Steven Boswell
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Bug fixes for Mixxx

2013-04-21 Thread Steven Boswell II
We need a bug report to track those changes. So please file one, assign it to 
you and add your patch. The status should be In Progress

Sigh...formality :-)

@RJ: What is the state of the 1.11.0 branch. It is still open for
  patches like this?

I sure hope it is...I'm still finding bugs :-)

Enclosed is a patch to CrateDAO::addTracksToCrate().  Without it, if one 
imports to a crate, and (for example) all of the tracks are already in that 
crate, it'll only think half of them failed to add.

BTW, I'm working on a big performance improvement to importing crates.  It uses 
SQL queries to avoid adding tracks that are already in the track_locations 
table, and does the same for the crate_tracks table.  I hope to submit it for 
your consideration shortly.

Steven Boswell--- mixxx/src/library/dao/cratedao.cpp	2013-04-07 19:41:28.496946000 -0700
+++ mixxx-build/src/library/dao/cratedao.cpp	2013-04-21 09:29:29.822356551 -0700
@@ -231,6 +231,7 @@
 // We must emit only those trackID that were added so we need to
 // remove the failed ones.
 trackIdList.removeAt(i);
+			--i;
 }
 }
 transaction.commit();
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Vast performance improvement to importing crates

2013-04-21 Thread Steven Boswell II
Enclosed is a patch that vastly improves the performance of importing crates 
when the tracks are already in the database.
I ran into this problem while trying to build crates for various sub-sets of 
already-imported tracks.

All it does is detect when tracks referred to during a crate-import already 
exist in the database, and avoids trying to add them again.

Before, an .m3u file with ~1900 tracks in it, imported in about 5 minutes.
Now, it's about 2 seconds.
So I think this is a worthy change :-)


I was thinking about doing the same for the crate_tracks database, but I wasn't 
sure if that'd be more optimal.  Right now, CrateDAO::addTracksToCrate() logs 
an error every time there's a duplicate crate/track pair.  However, 
crate_tracks is also set up so that each crate/track pair has to be unique. So 
it might be faster to create a temporary table with the crates/tracks to add, 
then do an SQL query to get only the crate/track pairs that aren't already in 
crate_tracks, and only insert those, solely because of the unique constraint 
on crate_tracks.  Besides, the same test (i.e. the ~1900-track .m3u file), run 
when the playlist already contains those tracks, still runs in ~2 seconds, so 
maybe it's no big deal.  Any opinions on this?


BTW, the performance problem I found in CrateFeature::slotImportPlaylist() 
(i.e. calling addTrack() in a loop, instead of just calling addTracks() once) 
also exists in BasePlaylistFeature::slotImportPlaylist().  Enclosed is another 
patch to fix that.

Steven Boswell
--- mixxx-patched/src/library/cratetablemodel.cpp	2013-04-07 19:41:28.496946000 -0700
+++ mixxx-build/src/library/cratetablemodel.cpp	2013-04-21 09:48:51.269970571 -0700
@@ -93,7 +93,8 @@
 }
 }
 
-int CrateTableModel::addTracks(const QModelIndex index, QListQString locations) {
+int CrateTableModel::addTracks(const QModelIndex index,
+const QListQString locations) {
 Q_UNUSED(index);
 // If a track is dropped but it isn't in the library, then add it because
 // the user probably dropped a file from outside Mixxx into this playlist.
--- mixxx-patched/src/library/cratetablemodel.h	2013-04-07 19:41:28.496946000 -0700
+++ mixxx-build/src/library/cratetablemodel.h	2013-04-21 09:48:55.862554265 -0700
@@ -31,7 +31,8 @@
 virtual void removeTracks(const QModelIndexList indices);
 virtual bool addTrack(const QModelIndex index, QString location);
 // Returns the number of unsuccessful track additions
-virtual int addTracks(const QModelIndex index, QList QString locations);
+virtual int addTracks(const QModelIndex index,
+const QList QString locations);
 virtual void moveTrack(const QModelIndex sourceIndex,
const QModelIndex destIndex);
 TrackModel::CapabilitiesFlags getCapabilities() const;
--- mixxx-patched/src/library/dao/trackdao.cpp	2013-04-07 19:41:28.496946000 -0700
+++ mixxx-build/src/library/dao/trackdao.cpp	2013-04-21 09:49:56.637278419 -0700
@@ -523,26 +523,96 @@
 addTracksFinish();
 }
 
-QListint TrackDAO::addTracks(QListQFileInfo fileInfoList, bool unremove) {
+QListint TrackDAO::addTracks(const QListQFileInfo fileInfoList,
+bool unremove) {
+QSqlQuery query(m_database);
 QListint trackIDs;
-	TrackInfoObject* pTrack;
+TrackInfoObject* pTrack;
 
+// Prepare to add tracks to the database.
+// This also begins an SQL transaction.
 addTracksPrepare();
 
-//create the list of TrackInfoObjects from the fileInfoList
-QMutableListIteratorQFileInfo it(fileInfoList);
-while (it.hasNext()) {
-QFileInfo info = it.next();
-pTrack = new TrackInfoObject(info);
+// Create a temporary database of the paths of all the imported tracks.
+query.prepare (QString (CREATE TEMP TABLE playlist_import 
+(location varchar (512;
+if (!query.exec()) {
+LOG_FAILED_QUERY(query);
+goto err0;
+}
+
+// All all the track paths to this database.
+query.prepare (QString (INSERT INTO playlist_import (location) 
+VALUES (:location)));
+foreach (const QFileInfo rFileInfo, fileInfoList) {
+query.bindValue (:location, rFileInfo.absoluteFilePath());
+if (!query.exec()) {
+LOG_FAILED_QUERY(query);
+goto err1;
+}
+}
+
+// Get the IDs of all tracks that are already in the database.
+query.prepare (QString (SELECT id FROM playlist_import, track_locations 
+WHERE playlist_import.location = track_locations.location));
+if (!query.exec()) {
+LOG_FAILED_QUERY(query);
+goto err1;
+}
+while (query.next()) {
+int trackId = query.value(query.record().indexOf(id)).toInt();
+trackIDs.append (trackId);
+}
+
+// If imported-playlist tracks are to be unremoved, do that for all playlist
+// tracks that were already in the database.
+if (unremove)
+{
+QStringList idStringList;
+foreach (int id, trackIDs)
+   

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-20 Thread Steven Boswell II
I went ahead and implemented my idea for allowing crates to serve as sources of 
random tracks for auto-DJ.  Hopefully you'll all warm up to the idea, or maybe 
I'll add an option to the scons line like autodjcrates=1 to allow people to 
compile it out if they so choose.

Right now, I have a Crates tree-item under the Auto DJ tree item, and then 
each crate that's been added to auto-DJ as a source of random tracks is listed 
under that Crates tree-item.  You can right-click on it and remove it from 
the auto-DJ crates list.  You can also right-click on a Crate in the existing 
tree and add/remove them to/from the auto-DJ crates list.  I added an integer 
autodj column to the crates table in the database; it's 1 if the crate is 
in the auto-DJ crate list, and 0 otherwise.  I also added an Add random track 
button to the auto-DJ's GUI, allowing the user to add as many random tracks as 
desired, and to remove any undesirable selections.


The feature still needs work before I can submit it to the project.  I did a 
very quick port of the SongJockey code from my djserver program (previously 
posted to this mailing list), so that I could use it for a car show I DJed 
today; I still need to clean it up and port it to Qt.  I really want to replace 
the tree-view of auto-DJ crates with a crates table, so that you can see how 
many tracks are in each crate, how many unplayed tracks are in each one, and so 
on.  And I still haven't totally worked out the signal logic.

Right now, I'm subscribing to the loadTrack() signal to determine when a track 
has been loaded into a deck; there's also a loadTrackToPlayer() signal, but it 
doesn't seem to get called, at least within auto-DJ.  However, loadTrack() 
doesn't get signaled when a track is manually placed into a deck; there seems 
to be a newTrackLoaded() signal emitted by Deck, but I don't know how to get 
access to that from within AutoDJ.  It appears I can access the decks through 
PlayerManager, but AutoDJ doesn't currently have a reference to PlayerManager.  
So I'm not sure what to do about this yet.

Perhaps what I want is to detect when tracks are added/removed to/from the 
auto-DJ queue, and when tracks are added/removed to/from the history.  That may 
be simpler and less error-prone.


My song-jockey logic depends on the last time the track was played, in order to 
prioritize tracks that haven't been played, but the last-played time is not 
stored in the database, only the date/time the track was added to the database. 
 Is there any objection to adding that information to the track database?

Your feedback is appreciated.

Steven Boswell
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Non-Blocking Database Access

2013-04-13 Thread Steven Boswell II
The core database code is in src/library/dao.




 From: Łukasz Olender luki...@gmail.com
To: mixxx-devel@lists.sourceforge.net 
Sent: Saturday, April 13, 2013 8:08 AM
Subject: [Mixxx-devel] Non-Blocking Database Access
 


Hi all,
I’m interested in GSoC participating in Mixxx project.
I’d like to get more info about one of ideas mentioned in gsoc2013 ideas list – 
Non-Blocking Database Access. It seems to be an interesting task, but I need to 
get involved into sources to have better understanding of complexity of this 
problem. Can you give me some instructions where to search for code connected 
with database operations?--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Whither LADSPA?

2013-04-12 Thread Steven Boswell II
From what I can tell digging around on the Net, LADSPA support in Mixxx 
existed at one time, but is now broken.
I can't seem to find any info on how it's broken, or what it would take to fix 
it.  Does anyone know?
All I know so far is that adding ladspa=1 to the scons command line leads to 
the build failing.

I would certainly like to see LADSPA in Mixxx.

Steven Boswell
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Trouble using Auto DJ

2013-04-12 Thread Steven Boswell II
about which version of Mixxx you are talking?

I'm doing all of my work in the 1.11 release branch.  I want a stable version 
of Mixxx with some extra features that I've implemented, so working in 1.11 
seemed like my best option.


1: without interaction
2: pressing fade now (Bad track playing or too long)
3: Double click on a track D somewhere in the library (urgent wish)
4: Right Click Add to Auto DJ Top/Bottom 

5: Shuffle
But anyhow, locking track 1 if it is the same that is already loaded and 
paused seems to be reasonable.

The alternative would be, if the user manually dragged a track to the first 
position, and the former first track is loaded in a deck, then that track 
should get unloaded in favor of the track that was just dragged to the top of 
the auto-DJ queue.


You should also know that we have a advanced AutoDJ version in our pipeline. 
lp:~smstewart91/mixxx/advanced_autodj

It was done during GSoC 2012, but it was not maintained since then. 

Argh...more neglected code...although it seems that, this time, some of those 
features made it into the trunk.

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Hello, and some patches

2013-04-12 Thread Steven Boswell II
Please attach the patch to bug #1090888 and assign the bug to yourselves or 
mark it as duplicate and use  bug #870128 instead. 


OK, done.  The patch is attached to bug #1090888.  Could some with write 
privileges on the bzr database commit this change  push it into the 1.11.0 
branch, please?

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-12 Thread Steven Boswell II
I'm not sure it adds much extra value to be able to select multiple crates as 
your pool.

In my experience, it does -- that allows you to have several different sources 
for the next random song.  I commonly want to have several categories available.



Plus, we already have an Add to AutoDJ context menu for crates and playlists 
that queues all their tracks to the ADJ playlist.

Actually, that option only exists for playlists -- it's missing for crates.

I've been thinking over this feature and I'm not sure it's a direction we 
should take.

If you can suggest an open-source jukebox app, I'll go work on that instead and 
stop bothering you.
I wish I had known this before I spent so much time reading over the Mixxx 
source code.  
Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Hello, and some patches

2013-04-12 Thread Steven Boswell II
In my experience, the queries in Mixxx do block.  That's how this assertion was 
hit in the first place.
It appears that a table can have multiple simultaneous readers, but only one 
writer, and readers are blocked while there's a writer.
I suppose this could be an issue with how sqlite is built on different 
platforms, with different options and whatnot, but that would be pretty 
unsettling.  I'm running Mixxx on Fedora Core 17.




 From: RJ Ryan russelljr...@gmail.com
To: Steven Boswell II ulat...@yahoo.com 
Cc: mixxx-devel@lists.sourceforge.net mixxx-devel@lists.sourceforge.net 
Sent: Friday, April 12, 2013 8:57 AM
Subject: Re: [Mixxx-devel] Hello, and some patches
 


The queries don't block (well, you can configure them to busy-wait for a set 
number of seconds at the Qt SQL driver level but we don't) but in general we 
don't want blocking because if we block the Qt main thread then the whole GUI 
will stall while the library scanner is scanning. Today we just see the queries 
fail complaining the database is locked when this problem presents itself. 
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-12 Thread Steven Boswell II
I've been thinking over this feature and I'm not sure it's a direction we
should take.

If you can suggest an open-source jukebox app, I'll go work on that instead
and stop bothering you.

There are a bunch of great FLOSS jukebox apps out there --
Tomahawk and Banshee are two of my favorites and I know a few of
the developers.

I guess I'll go look at those.

we would love for you to continue to contribute to Mixxx and help
create great DJ software.

Well, no...my motivation to work on Mixxx was to make it what I needed it to 
be.  If those changes are never going to be accepted into the software, then 
what's the point?

Just don't be surprised when you find you're the only one left working on this 
project.

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-11 Thread Steven Boswell II
Here's my first idea for implementing djserver-like playlists in Mixxx.

I think the right metaphor is to allow crates to be added to auto-DJ.  There 
would be a sub-item under the Auto DJ tree-view item, called Crates.  
There, you would see all the crates that have been loaded into auto-DJ.  In the 
existing Crates view, you could right-click on a crate and select Add to 
Auto-DJ.  In the Auto-DJ Crates view, you could right-click on a crate and 
select Remove from Auto-DJ.  If auto-DJ needs a new track, and none are in 
the list, it'll pick a random track from the totality of loaded crates, using 
the djserver-like rules I outlined earlier.

This seems like a simple idea...but I've already run into an unexpected 
roadblock.  I can't figure out how to add a Crates sub-item under the Auto 
DJ item in the tree view!  I thought I could search the code for QTreeView and 
QTreeWidget and find the relevant code, but that came up empty!  I thought I 
could look at the skin documentation and use that to understand an existing 
skin, but the documentation seems to be out of date, and looking at QTreeView 
in a skin.xml file doesn't show how those items (Library, Auto DJ, Playlists, 
Crates, etc.) get added to the tree-view!  Can someone please point out where 
this code/UI lives?

Steven Boswell
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-11 Thread Steven Boswell II
We should ensure that the Auto DJ has always  n amount of tracks   4 in its 
play list when connected to a crate so the user can foresee what will happen

Sure, the number of pending tracks to keep in auto-DJ, when there are crates 
loaded into auto-DJ, can be configured.


How will this interact withlp:~keithsalisbury/mixxx/track_selector_feature?  I 
think your rules are different from this rules but at least they are rules;-)

If and when that feature is merged into the trunk, I'm sure it can be made 
compatible.

But this brings up a question for me...it appears that that feature is done, 
and has been waiting for review since May of last year.  Why has it not been 
merged?  It always distresses me to see neglected merge-requests like this one.

The library layout is not setup by the skin file. Maybe it helps looking at 
the call tree around 
mixxx/src/library/rhythmbox/rhythmboxfeature.cpp

Ah...now I see that each item in that tree-view is a subclass of 
LibraryFeature, and the tree-view is populated by the Library constructor.  
That should be enough to figure out how to add a Crates sub-item to Auto 
DJ.  Thanks!

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-11 Thread Steven Boswell II
The merge request from:

lp:~keithsalisbury/mixxx/track_selector_feature

looks really not nice without any comment.

Are you saying the feature is badly written and the source code isn't 
documented?  You lost me.

Re: crates in auto-DJ, let me tell you where I'm at so you can stop me if I'm 
going wrong.  I now have a Crates tree-item under the Auto DJ tree-item in 
the library view.  (It took a lot of code-reading to figure out that it wasn't 
hard to add. :-)  Now it looks like I have to create a new subclass of 
WLibraryTableView, called WCrateTableView, so that the crates loaded into 
auto-DJ can be displayed.  There I can display the name of the crate, the 
number of tracks in the crate, and the number of tracks being considered for 
playback (i.e. based on how many times they've already been played). The 
alternative is to display the crate names as sub-items of the new Crates 
tree-item, and to display the tracks in each crate if they're clicked on, but 
that seems redundant and pointless.  A crate view seems more meaningful, though 
it's more work.

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Hello, and some patches

2013-04-10 Thread Steven Boswell II
 1) Flushing after every folder is scanned sounds like it could have a

 significant impact on scanning performance. Using your friend's large
 collection have you noticed any reduction in scanning speed?

I haven't rescanned the collection over again since making this change.
I can do that, though.

I tested it with my small collection and it has a huge impact.

That doesn't surprise me.
In the worst case, we can add an incremental library scanning option to the 
preferences.
But the old variant will have to lock the main Mixxx window to prevent using it.
Some GUIs do that automatically when a modal dialog is displayed...I guess Qt 
doesn't?

Reading the sqlitedb shouldn't be affected by the scanner as sqlite allows
for multiply reads all the time, also with an open transaction.
[...]
As far as I understand the sqlite specs the db should never block to a read
request, so I'm puzzled why this happens in mixxx.

AFAIK, multiple readers are OK, but there can be only one writer on a table, 
and a writer locks out readers.
That certainly seems to be how it's behaving, too.

Perhaps non-incremental library-scanning can be rewritten to create new tables 
with temporary names, then at the end, drop the old tables and move the new 
tables in their place?

 2) RE: returning in BSTM if the table query fails I think this looks like a
 nice workaround to that bug

Is there actually a reliable way to reproduce this error. I sometimes get it
at random and so far I failed to reproduce it with ways that other described.

I can reproduce it pretty easily by trying to click on the Library or Auto DJ 
playlists during a library rescan.

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] Hello, and some patches

2013-04-10 Thread Steven Boswell II
On Tuesday, April 9, 2013 at 10:45 PM, Daniel Schürmann wrote:
And thank you very much for your patch.  I am impressed that you are
so familiar with the Mixxx code without any help!

The library-rescan code had a decent amount of source-code comments, so I 
figured it out pretty quickly.  I always like finding documented code.  
Hopefully I'll continue to find that as I go through Mixxx's source. :-)

I had not the chance to test it, but from the code it looks very good
and suitable to fix the bug.

Please attach the patch to bug #1090888 and assign the bug to
yourselves or mark it as duplicate and use bug #870128 instead.

As soon as I figure out how to do all that, I will!

On Wednesday, April 10, 2013 at 7:15 AM, RJ Ryan wrote:
In the future we're looking at refactoring everything so that all
library operations happen in one thread and all other threads
communicate with that thread via message passing.  [...]

That would ultimately be the best solution, but that was a bigger change than I 
was willing to take on as my first project. :-)

We're in the process of releasing 1.11.0 right now and I will be
holding a 1.12.0 planning meeting soon.  You should join us!
Announcements will go out to mixxx-devel for the date/time.

I don't know how useful I'd be in such a meeting, but I can try!  Maybe I'll 
just learn by listening.

Re: my incremental library-scanning change...right now, I plan for my next 
version to allow for both incremental and non-incremental scanning, controlled 
from the same progress dialog.  The dialog will gain a checkbox, defaulting to 
unchecked, that allows for incremental scanning.  If scanning is not 
incremental, the dialog will be modal (i.e. QWidget::setWindowModality()), so 
that the user can't click on the Mixxx GUI and cause crashes.  If scanning is 
incremental, the dialog will not be modal, and changes will get committed to 
the database relatively often.  Clicking the pause button will also make the 
dialog non-modal and commit changes to the database.  As soon as I have that 
written, I'll e-mail the patch to the list, for your comment.

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Re: [Mixxx-devel] New feature for Auto DJ

2013-04-10 Thread Steven Boswell II
On Wednesday, April 10, 2013 at 2:01 PM, Daniel Schürmann wrote:
It would be wonderful if you can share your experience in real time
audio processing and play list generation with us and join us to make
Mixxx even better.

I'll do what I can!  I guess I'll find out how much of my experience is still 
relevant. :-)

Here is a list of links what I can find and remember.

I will look at those links when I have time...probably tonight and tomorrow.

Since this mailing list is somewhat volatile, you should consider opening
a wishlist bug or a blueprint on Launchpad or a new page on our Wiki
to save the ideas.  (Or all of it).

I can do that once my ideas get a bit more cooked, i.e. once I understand the 
target audience better.  It seems that Auto DJ isn't the sort of thing that 
professional DJs make a lot of use of; they're too busy being ultra-hip with 
record scratching and whatnot.  So who knows how much use my playlist changes 
will see outside of...well, me. :-)

Btw: Is your djserver open source?

I've never released the code before, but I don't mind releasing it under GPL v2.
I just got it compiling and running under Fedora Cores 14 and 16 -- the last 
time I built it was apparently September 2002. :-)
Let me write up a bit of user documentation and I'll e-mail it to the list!

Steven Boswell--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Trouble using Auto DJ

2013-04-10 Thread Steven Boswell II
I was beating the heck out of auto-DJ last night, and got it to mess up a few 
times.  Sometimes, the played track wouldn't get removed from the list, and the 
other deck would get loaded with the same track.  I thought it was because of 
shuffling the playlist, or adding new tracks to the top of the queue, or 
dragging tracks to the decks manually, but after reading the code over today, I 
don't think that's it -- the code seems to expect that.  However, I can cause 
that problem by dragging a track to the top of the auto-DJ queue manually.

The code (i.e. src/dlgautodj.cpp) apparently leaves the track at the top of the 
auto-DJ queue when it loads the deck, and only removes it when the track starts 
playing.  I wonder, why is that?  DlgAutoDJ::shufflePlaylist() has to 
special-case this, as does WTrackTableView::sendToAutoDJ().  Plus, 
DlgAutoDJ::toggleAutoDJButton() will mess up if the first track in the queue is 
on the 2nd deck, and the second track in the queue is on the 1st deck -- 
neither will get removed from the auto-DJ queue.

I think it'd be less error-prone to remove the track from the auto-DJ queue as 
soon as it's loaded into a deck.  The alternative would, at a minimum, have to 
prevent the user from dragging a track to the top of the auto-DJ queue, which 
would probably confuse the user.

Any thoughts on this?  I would do the work of fixing this, once I have your 
feedback on the issues involved.

Steven Boswell
--
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis  visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter___
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

[Mixxx-devel] Hello, and some patches

2013-04-09 Thread Steven Boswell II
Hello all!  I got a panicked call from a DJ/KJ friend of mine this weekend.  He 
knew I was handy with computers  needed help DJing a gig he had that evening.  
I quickly found mixxx (in the rpmfusion repo for Fedora Core 17), put it 
through its paces, called him back to tell him I thought I could fake it, spent 
a few more hours load-testing mixxx and beating it to death...then went to the 
gig.  We pulled it off!  So, just like that, I'm a DJ. :-)

Enclosed are some patches I've come up with so far.  I doubt they're ready to 
check in; I'm posting them mostly for feedback, and so you can point out any 
problems with them.  I'm building with the 1.11 branch.


The patch to src/library/basesqltablemodel.cpp is meant to fix bug #1090888, 
i.e. https://bugs.launchpad.net/mixxx/+bug/1090888 .  The problem is that, if 
the database is locked, the code continues with an invalid SQL-query result.  
My solution is to move the query to the top of the method, and return if the 
query fails.


The rest of the patch makes it possible for library-rescan to run in parallel 
with the rest of the GUI.  Before, the database would stay locked during 
rescan, although nothing prevented the user from trying to use the rest of the 
GUI, which would lead to the GUI hanging and/or crashing relatively often.  My 
solution is to commit at the end of scanning each individual directory, so that 
other database clients get a chance to do their work.  I also added a pause 
button to the library-rescan window.

I intend to spend part of this evening load-testing my changes.


My DJ friend has several hundred GB of music; I tried to scan it right before 
the gig, but didn't finish.  When I had time, I let it run, and it took about 4 
hours.  Being able to scan it incrementally, and allowing Mixxx to be usable 
meanwhile, would have been a big help; these changes allow that.

I have more to say, but I figure I'll stop here for now...no need to talk your 
ear off in my first e-mail :-)

Steven Boswell
--- mixxx/src/library/basesqltablemodel.cpp	2013-04-08 12:24:12.405359000 -0700
+++ mixxx-build/src/library/basesqltablemodel.cpp	2013-04-09 13:00:07.983890678 -0700
@@ -177,15 +177,6 @@
 QTime time;
 time.start();
 
-// Remove all the rows from the table.
-// TODO(rryan) we could edit the table in place instead of clearing it?
-if (m_rowInfo.size()  0) {
-beginRemoveRows(QModelIndex(), 0, m_rowInfo.size()-1);
-m_rowInfo.clear();
-m_trackIdToRows.clear();
-endRemoveRows();
-}
-
 QString columns = m_tableColumnsJoined;
 QString orderBy = orderByClause();
 QString queryString = QString(SELECT %1 FROM %2 %3)
@@ -204,6 +195,16 @@
 if (!query.exec()) {
 qDebug()  this  select() error:  __FILE__  __LINE__
   query.executedQuery()  query.lastError();
+return;
+}
+
+// Remove all the rows from the table.
+// TODO(rryan) we could edit the table in place instead of clearing it?
+if (m_rowInfo.size()  0) {
+beginRemoveRows(QModelIndex(), 0, m_rowInfo.size()-1);
+m_rowInfo.clear();
+m_trackIdToRows.clear();
+endRemoveRows();
 }
 
 QSqlRecord record = query.record();
@@ -215,7 +216,7 @@
 tableColumnIndices.push_back(record.indexOf(column));
 }
 
-	// sqlite does not set size and m_rowInfo was just cleared
+// sqlite does not set size and m_rowInfo was just cleared
 //int rows = query.size();
 //if (sDebug) {
 //qDebug()  Rows returned  rows  m_rowInfo.size();
--- mixxx/src/library/dao/trackdao.cpp	2013-04-08 12:24:12.405359000 -0700
+++ mixxx-build/src/library/dao/trackdao.cpp	2013-04-09 13:43:04.586253057 -0700
@@ -14,6 +14,7 @@
 #include library/dao/cuedao.h
 #include library/dao/playlistdao.h
 #include library/dao/analysisdao.h
+#include util/sleepableqthread.h
 
 QHashint, TrackWeakPointer TrackDAO::m_sTracks;
 QMutex TrackDAO::m_sTracksMutex;
@@ -376,6 +377,33 @@
 WHERE location = :location);
 }
 
+// Allow added tracks to be flushed periodically, so as not to keep the database
+// locked.
+// Optionally pause between transactions.
+void TrackDAO::addTracksFlush (const volatile bool a_rbPause,
+const volatile bool a_rbCancel)
+{
+// Complete any pending transaction.
+if (m_pTransaction) {
+m_pTransaction-commit();
+delete m_pTransaction;
+m_pTransaction = NULL;
+}
+
+// Broadcast the list of added tracks to any interested subscribers.
+emit (tracksAdded (m_tracksAddedSet));
+m_tracksAddedSet.clear();
+
+// If requested, pause.
+// It'd be more efficient to use a QMutex/QWaitCondition, but that's
+// probably overkill.
+while (!a_rbCancel  a_rbPause)
+SleepableQThread::sleep (1);
+
+// Start a new transaction.
+m_pTransaction = new ScopedTransaction(m_database);
+}
+
 void TrackDAO::addTracksFinish() {
 if (m_pTransaction) {
 m_pTransaction-commit();
@@