The Box


dflemstr

It's a ball.
Joined
Jul 31, 2008
Messages
2,514
Location
Stockholm, Sweden
Website
Visit site
So here we go again...

I've basically made a web app that is quite powerful and fast, and that is used to host Pandora applications (as PND files). It is by no means finished yet, but the foundation that I've made is quite powerful.

So, why would I use this instead of the app store?

Simple:
  • It is useful. The user can write free-form filters to find exactly what they are looking for (e.g. "exaile music player uploader:dflemstr version:1.0.0.0" is a reasonable filter).
  • It is powerful. The system takes care of PND files automatically; you just upload the PND file, and The Box will scan it for you, do some nifty byte twiddling to get the PXML and PNG data out of it, etc. Just upload the file and we take care of the rest.
  • It is actually secure. I haven't managed to find any security-related bugs in it, and neither have many others (try it for yourself; the database user/password is "box_user" and "abc123" in case you need it, and if you want to drop anything, "box" would be the perfect fit).
  • It is fast. It's currently hosted in debug mode so it's a bit slower than it could be, and I've not optimized anything, but it is incredibly quick. I use the same messaging back end as Twitter does, and a new database back end for JDBC that is incredibly fast.
  • It is modern. I use HTML5 and CSS3 and am not ashamed of it. The page does of course gracefully degrade, so you can use it in IE 4 and Lynx just fine (I've tried it myself). I'm compatible with XHTML 1.1, CSS2, CSS1, HTML4.01, IE4-8, NS, FF, etc. The layout is also optimized for printing (but this needs some work, still).

Please remember, though, that this still is a work in progress, so I'm open for suggestions, bug reports, and mild hacking attempts. Even the theme may be criticized!

Also, the server might be taken down at any time, all files might be deleted, the site might be broken at any time, etc. This stuff is in development (but I don't use that particular server to test really experimental stuff).

tl;dr:

The URL: http://dflemstr.dyndns.org:8088/

The source code: http://github.com/dflemstr/box


PS: If you think that the Downloads counter is off, it isn't; I've set up the app's file request headers so that your browser keeps as much data as it can in your cache (so that the application can be used via not-so-speedy internet connections). Therefore, you won't trigger another download if you download the same file multiple times.
 
This seems really great. I can see it being especially handy for tracking down older versions of PND files.
 
dflemstr said:
So here we go again...

I've basically made a web app that is quite powerful and fast, and that is used to host Pandora applications (as PND files). It is by no means finished yet, but the foundation that I've made is quite powerful.

So, why would I use this instead of the app store?

Simple:
  • It is useful. The user can write free-form filters to find exactly what they are looking for (e.g. "exaile music player uploader:dflemstr version:1.0.0.0" is a reasonable filter).
  • It is powerful. The system takes care of PND files automatically; you just upload the PND file, and The Box will scan it for you, do some nifty byte twiddling to get the PXML and PNG data out of it, etc. Just upload the file and we take care of the rest.
  • It is actually secure. I haven't managed to find any security-related bugs in it, and neither have many others (try it for yourself; the database user/password is "box_user" and "abc123" in case you need it, and if you want to drop anything, "box" would be the perfect fit).
  • It is fast. It's currently hosted in debug mode so it's a bit slower than it could be, and I've not optimized anything, but it is incredibly quick. I use the same messaging back end as Twitter does, and a new database back end for JDBC that is incredibly fast.
  • It is modern. I use HTML5 and CSS3 and am not ashamed of it. The page does of course gracefully degrade, so you can use it in IE 4 and Lynx just fine (I've tried it myself). I'm compatible with XHTML 1.1, CSS2, CSS1, HTML4.01, IE4-8, NS, FF, etc. The layout is also optimized for printing (but this needs some work, still).

Please remember, though, that this still is a work in progress, so I'm open for suggestions, bug reports, and mild hacking attempts. Even the theme may be criticized!

Also, the server might be taken down at any time, all files might be deleted, the site might be broken at any time, etc. This stuff is in development (but I don't use that particular server to test really experimental stuff).

tl;dr:

The URL: http://dflemstr.dyndns.org:8088/

The source code: http://github.com/dflemstr/box


PS: If you think that the Downloads counter is off, it isn't; I've set up the app's file request headers so that your browser keeps as much data as it can in your cache (so that the application can be used via not-so-speedy internet connections). Therefore, you won't trigger another download if you download the same file multiple times.

Could you create a Command-line utility similar to Pacman for interfacing with it like a repository? Would love to not have to pop up a browser to use it.

-God Ginrai
 
Last edited by a moderator:
If the layout is fair game; the front page is a bit useless ATM (Well, right now it's just a traceback...) There should be direct links to the most useful searches, and definitely a search box.
And all titles and icons in a list of applications should be links, so you don't have to pinpoint the 'details' button.
Pages load a fair bit slower than at Craig's for me.
 
Not had a look yet, but just wanted to give my gratitude and thanks for what it's worth.
 
Na-Noo said:
Not had a look yet, but just wanted to give my gratitude and thanks for what it's worth.

holy crap I'm not sure I can handle the amount of lameness exhibited here!

also that is one epic length exception:

Code:
Message: java.lang.RuntimeException: Exception while executing statement, errorCode: 0, sqlState: 08003
...lots of sql ...
Caught and thrown by:
Message: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.
 
Last edited by a moderator:
CiderPunk said:
Na-Noo said:
Not had a look yet, but just wanted to give my gratitude and thanks for what it's worth.

holy crap I'm not sure I can handle the amount of lameness exhibited here!
I liked what he did prior, but he felt that no one was interested so scrapped it (especially due to there being Craig's version etc), just letting him know that I've not had a look at the recent stuff but I'm still interested.
So you may not appreciate the support, but hopefully he will.

And yes I can see how it may seem lame :p
 
Last edited by a moderator:
OK, I'm ina hurry, just a quick post before I continue hacking on this some more (don't have much time :/)

Multiplex said:
If the layout is fair game; the front page is a bit useless ATM (Well, right now it's just a traceback...) There should be direct links to the most useful searches, and definitely a search box.
And all titles and icons in a list of applications should be links, so you don't have to pinpoint the 'details' button.
Pages load a fair bit slower than at Craig's for me.
The exception occurred because the %¤&#¤ MySQL server timed out on me... I'm using a JDBC connection pool and forgot to add an option in the connection URL to keep a connection open forever. It should work now, though, and be a lot quicker.

The search system is pretty central to the whole web page (It basically behaves like Google's search system, including weights, "title:"-style operators etc) so I'm definitely prioritizing that.

Na-Noo said:
Not had a look yet, but just wanted to give my gratitude and thanks for what it's worth.
Well, thanks for that!

CiderPunk said:
holy crap I'm not sure I can handle the amount of lameness exhibited here!

also that is one epic length exception:

Code:
Message: java.lang.RuntimeException: Exception while executing statement, errorCode: 0, sqlState: 08003
...lots of sql ...
Caught and thrown by:
Message: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.
Yeah that's the issue I meant above ^^

Anyways, thanks for the comments so far, and expect to see big improvements soonish (if I manage).
 
Last edited by a moderator:
sorry didn't see your warning of exceptions :)

it looks very nice and clean! i'm not a huge fan of the official appstores design it all looks a bit cramped and in my experience designs like that break very quickly when real data starts getting added!
 
dflemstr said:
Please remember, though, that this still is a work in progress, so I'm open for suggestions, bug reports, and mild hacking attempts. Even the theme may be criticized!
Suggestion:
You could try using a name that's at least mediocre.

Bug report(or possibly PEBKAC):
Error
There is no such user/password combination.
 
Last edited by a moderator:
Doesnt work for me on ipod touch 2g (safari).
Getting an epically long exception error, but sadly can't copy/paste the text, the ipod touch won't let me select all of the text at one time (god will i be happy to receive my pandora)'

edit: also doesnt work on my regular laptop:
Exception occured while processing /
Message: java.lang.RuntimeException: single called on query returning more than one row :
Select
q1.appmetas2_languageName as q1_appmetas2_languageName,
q1.appmetas2_title as q1_appmetas2_title,
q1.appmetas2_id as q1_appmetas2_id,
q1.appmetas2_applicationId as q1_appmetas2_applicationId,
q1.appmetas2_description as q1_appmetas2_description
From
(Select
appmetas2.languageName as appmetas2_languageName,
appmetas2.title as appmetas2_title,
appmetas2.id as appmetas2_id,
appmetas2.applicationId as appmetas2_applicationId,
appmetas2.description as appmetas2_description
From
appmetas appmetas2
Where
(appmetas2.languageName in ('de_DE','de','en','en_US'))
) q1
Where
(q1.appmetas2_applicationId = 4)
scala.Predef$.error(Predef.scala:74)
org.squeryl.Query$class.single(Query.scala:45)
org.squeryl.dsl.AbstractQuery.single(AbstractQuery.scala:24)
org.openpandora.box.snippet.Applications.info$1(Applications.scala:190)
org.openpandora.box.snippet.Applications$$anonfun$org$openpandora$box$snippet$Applications$$makeAppEntry$2.apply(Applications.scala:325)
org.openpandora.box.snippet.Applications$$anonfun$org$openpandora$box$snippet$Applications$$makeAppEntry$2.apply(Applications.scala:325)
org.openpandora.box.snippet.Applications$$anonfun$makeLazyString$1$1.apply(Applications.scala:321)
org.openpandora.box.snippet.Applications$$anonfun$makeLazyString$1$1.apply(Applications.scala:321)
net.liftweb.util.BindHelpers$FuncBindParam.calcValue(BindHelpers.scala:246)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1$$anonfun$apply$25.apply(BindHelpers.scala:599)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1$$anonfun$apply$25.apply(BindHelpers.scala:592)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:591)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:590)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.util.BindHelpers$$anonfun$bind$2.in_bind$1(BindHelpers.scala:590)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:612)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:590)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.util.BindHelpers$$anonfun$bind$2.in_bind$1(BindHelpers.scala:590)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:612)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:590)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.util.BindHelpers$$anonfun$bind$2.in_bind$1(BindHelpers.scala:590)
net.liftweb.util.BindHelpers$$anonfun$bind$2.apply(BindHelpers.scala:617)
net.liftweb.util.BindHelpers$$anonfun$bind$2.apply(BindHelpers.scala:575)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.util.BindHelpers$class.bind(BindHelpers.scala:575)
net.liftweb.util.Helpers$.bind(Helpers.scala:34)
net.liftweb.util.BindHelpers$class.bind(BindHelpers.scala:544)
net.liftweb.util.Helpers$.bind(Helpers.scala:34)
net.liftweb.util.BindHelpers$class.bind(BindHelpers.scala:514)
net.liftweb.util.Helpers$.bind(Helpers.scala:34)
org.openpandora.box.snippet.Applications.org$openpandora$box$snippet$Applications$$makeAppEntry(Applications.scala:323)
org.openpandora.box.snippet.Applications$$anonfun$makeEntry$1$1.apply(Applications.scala:349)
org.openpandora.box.snippet.Applications$$anonfun$makeEntry$1$1.apply(Applications.scala:349)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.LinearSeqLike$class.foreach(LinearSeqLike.scala:97)
scala.collection.immutable.List.foreach(List.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.collection.immutable.List.flatMap(List.scala:46)
org.openpandora.box.snippet.Applications.makeEntry$1(Applications.scala:349)
org.openpandora.box.snippet.Applications$$anonfun$list$1.apply(Applications.scala:352)
org.openpandora.box.snippet.Applications$$anonfun$list$1.apply(Applications.scala:352)
net.liftweb.util.BindHelpers$FuncBindParam.calcValue(BindHelpers.scala:246)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1$$anonfun$apply$25.apply(BindHelpers.scala:599)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1$$anonfun$apply$25.apply(BindHelpers.scala:592)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:591)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:590)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.util.BindHelpers$$anonfun$bind$2.in_bind$1(BindHelpers.scala:590)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:612)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:590)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.util.BindHelpers$$anonfun$bind$2.in_bind$1(BindHelpers.scala:590)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:612)
net.liftweb.util.BindHelpers$$anonfun$bind$2$$anonfun$in_bind$1$1.apply(BindHelpers.scala:590)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.util.BindHelpers$$anonfun$bind$2.in_bind$1(BindHelpers.scala:590)
net.liftweb.util.BindHelpers$$anonfun$bind$2.apply(BindHelpers.scala:617)
net.liftweb.util.BindHelpers$$anonfun$bind$2.apply(BindHelpers.scala:575)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.util.BindHelpers$class.bind(BindHelpers.scala:575)
net.liftweb.util.Helpers$.bind(Helpers.scala:34)
net.liftweb.util.BindHelpers$class.bind(BindHelpers.scala:544)
net.liftweb.util.Helpers$.bind(Helpers.scala:34)
net.liftweb.util.BindHelpers$class.bind(BindHelpers.scala:514)
net.liftweb.util.Helpers$.bind(Helpers.scala:34)
org.openpandora.box.snippet.Applications.list(Applications.scala:351)
org.openpandora.box.snippet.Applications$$anonfun$dispatch$1$$anonfun$apply$2.apply(Applications.scala:31)
org.openpandora.box.snippet.Applications$$anonfun$dispatch$1$$anonfun$apply$2.apply(Applications.scala:31)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68$$anonfun$apply$70.apply(LiftSession.scala:919)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68$$anonfun$apply$70.apply(LiftSession.scala:903)
net.liftweb.common.EmptyBox.openOr(Box.scala:376)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68.apply(LiftSession.scala:903)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68.apply(LiftSession.scala:903)
net.liftweb.common.EmptyBox.openOr(Box.scala:376)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65.apply(LiftSession.scala:902)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65.apply(LiftSession.scala:902)
net.liftweb.http.S$.doSnippet(S.scala:1704)
net.liftweb.http.LiftSession$$anonfun$23.apply(LiftSession.scala:900)
net.liftweb.http.LiftSession$$anonfun$23.apply(LiftSession.scala:899)
net.liftweb.common.Full.map(Box.scala:334)
net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$$processSnippet(LiftSession.scala:899)
net.liftweb.http.LiftSession$$anonfun$_defaultLiftTagProcessing$1.apply(LiftSession.scala:1015)
net.liftweb.http.LiftSession$$anonfun$_defaultLiftTagProcessing$1.apply(LiftSession.scala:1003)
net.liftweb.util.NamedPF.apply(NamedPartialFunction.scala:36)
net.liftweb.util.NamedPF$.apply(NamedPartialFunction.scala:82)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80$$anonfun$apply$81.apply(LiftSession.scala:1117)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80$$anonfun$apply$81.apply(LiftSession.scala:1117)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$.setVars(S.scala:1535)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80.apply(LiftSession.scala:1116)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80.apply(LiftSession.scala:1116)
net.liftweb.http.S$.withAttrs(S.scala:1551)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79.apply(LiftSession.scala:1115)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79.apply(LiftSession.scala:1115)
net.liftweb.http.S$.doSnippet(S.scala:1704)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78.apply(LiftSession.scala:1114)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78.apply(LiftSession.scala:1114)
net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$$processOrDefer(LiftSession.scala:1099)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1.apply(LiftSession.scala:1113)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1.apply(LiftSession.scala:1107)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.http.LiftSession.processSurroundAndInclude(LiftSession.scala:1106)
net.liftweb.builtin.snippet.Surround$$anonfun$render$1$$anonfun$apply$2.apply(Surround.scala:39)
net.liftweb.builtin.snippet.Surround$$anonfun$render$1$$anonfun$apply$2.apply(Surround.scala:36)
net.liftweb.common.Full.map(Box.scala:334)
net.liftweb.builtin.snippet.Surround$$anonfun$render$1.apply(Surround.scala:36)
net.liftweb.builtin.snippet.Surround$$anonfun$render$1.apply(Surround.scala:35)
net.liftweb.common.Full.flatMap(Box.scala:336)
net.liftweb.builtin.snippet.Surround$.render(Surround.scala:35)
net.liftweb.builtin.snippet.Surround$$anonfun$dispatch$1$$anonfun$apply$1.apply(Surround.scala:31)
net.liftweb.builtin.snippet.Surround$$anonfun$dispatch$1$$anonfun$apply$1.apply(Surround.scala:31)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68$$anonfun$apply$70.apply(LiftSession.scala:919)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68$$anonfun$apply$70.apply(LiftSession.scala:903)
net.liftweb.common.EmptyBox.openOr(Box.scala:376)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68.apply(LiftSession.scala:903)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65$$anonfun$apply$68.apply(LiftSession.scala:903)
net.liftweb.common.EmptyBox.openOr(Box.scala:376)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65.apply(LiftSession.scala:902)
net.liftweb.http.LiftSession$$anonfun$23$$anonfun$apply$65.apply(LiftSession.scala:902)
net.liftweb.http.S$.doSnippet(S.scala:1704)
net.liftweb.http.LiftSession$$anonfun$23.apply(LiftSession.scala:900)
net.liftweb.http.LiftSession$$anonfun$23.apply(LiftSession.scala:899)
net.liftweb.common.Full.map(Box.scala:334)
net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$$processSnippet(LiftSession.scala:899)
net.liftweb.http.LiftSession$$anonfun$_defaultLiftTagProcessing$1.apply(LiftSession.scala:1015)
net.liftweb.http.LiftSession$$anonfun$_defaultLiftTagProcessing$1.apply(LiftSession.scala:1003)
net.liftweb.util.NamedPF.apply(NamedPartialFunction.scala:36)
net.liftweb.util.NamedPF$.apply(NamedPartialFunction.scala:82)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80$$anonfun$apply$81.apply(LiftSession.scala:1117)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80$$anonfun$apply$81.apply(LiftSession.scala:1117)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$.setVars(S.scala:1535)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80.apply(LiftSession.scala:1116)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79$$anonfun$apply$80.apply(LiftSession.scala:1116)
net.liftweb.http.S$.withAttrs(S.scala:1551)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79.apply(LiftSession.scala:1115)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78$$anonfun$apply$79.apply(LiftSession.scala:1115)
net.liftweb.http.S$.doSnippet(S.scala:1704)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78.apply(LiftSession.scala:1114)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1$$anonfun$apply$78.apply(LiftSession.scala:1114)
net.liftweb.http.LiftSession.net$liftweb$http$LiftSession$$processOrDefer(LiftSession.scala:1099)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1.apply(LiftSession.scala:1113)
net.liftweb.http.LiftSession$$anonfun$processSurroundAndInclude$1.apply(LiftSession.scala:1107)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:259)
scala.collection.Iterator$class.foreach(Iterator.scala:582)
scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:83)
scala.collection.IterableLike$class.foreach(IterableLike.scala:83)
scala.xml.NodeSeq.foreach(NodeSeq.scala:46)
scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:259)
scala.xml.NodeSeq.flatMap(NodeSeq.scala:46)
net.liftweb.http.LiftSession.processSurroundAndInclude(LiftSession.scala:1106)
net.liftweb.http.LiftSession$$anonfun$processTemplate$1$2.apply(LiftSession.scala:541)
net.liftweb.http.LiftSession$$anonfun$processTemplate$1$2.apply(LiftSession.scala:539)
net.liftweb.common.Full.map(Box.scala:334)
net.liftweb.http.LiftSession.processTemplate$1(LiftSession.scala:539)
net.liftweb.http.LiftSession$$anonfun$14$$anonfun$apply$39$$anonfun$apply$42.apply(LiftSession.scala:593)
net.liftweb.http.LiftSession$$anonfun$14$$anonfun$apply$39$$anonfun$apply$42.apply(LiftSession.scala:593)
net.liftweb.common.EmptyBox.or(Box.scala:378)
net.liftweb.http.LiftSession$$anonfun$14$$anonfun$apply$39.apply(LiftSession.scala:592)
net.liftweb.http.LiftSession$$anonfun$14$$anonfun$apply$39.apply(LiftSession.scala:592)
net.liftweb.util.StackableMaker$class.doWith(Maker.scala:141)
net.liftweb.http.Factory$FactoryMaker.doWith(Factory.scala:37)
net.liftweb.util.StackableMaker$class.doWith(Maker.scala:135)
net.liftweb.http.Factory$FactoryMaker.doWith(Factory.scala:37)
net.liftweb.http.LiftSession$$anonfun$14.apply(LiftSession.scala:591)
net.liftweb.http.LiftSession$$anonfun$14.apply(LiftSession.scala:586)
net.liftweb.common.EmptyBox.or(Box.scala:378)
net.liftweb.http.LiftSession.processRequest(LiftSession.scala:586)
net.liftweb.http.LiftServlet.net$liftweb$http$LiftServlet$$dispatchStatefulRequest(LiftServlet.scala:285)
net.liftweb.http.LiftServlet$$anonfun$3.apply(LiftServlet.scala:188)
net.liftweb.http.LiftServlet$$anonfun$3.apply(LiftServlet.scala:188)
net.liftweb.http.S$.net$liftweb$http$S$$wrapQuery(S.scala:989)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_nest2InnerInit$1$$anonfun$apply$26.apply(S.scala:1129)
net.liftweb.http.S$.net$liftweb$http$S$$doAround(S.scala:926)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$doAround$1.apply(S.scala:927)
org.squeryl.dsl.QueryDsl$class._using(QueryDsl.scala:40)
org.squeryl.dsl.QueryDsl$class._executeTransactionWithin(QueryDsl.scala:86)
org.squeryl.dsl.QueryDsl$class.transaction(QueryDsl.scala:59)
org.squeryl.PrimitiveTypeMode$.transaction(PrimitiveTypeMode.scala:39)
org.openpandora.box.model.Database$$anon$1.apply(Database.scala:32)
net.liftweb.http.S$.net$liftweb$http$S$$doAround(S.scala:927)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_nest2InnerInit$1.apply(S.scala:1127)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$.net$liftweb$http$S$$_nest2InnerInit(S.scala:1126)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun$apply$29$$anonfun$apply$30$$anonfun$apply$31$$anonfun$apply$32.apply(S.scala:1152)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$.withReq(S.scala:1161)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun$apply$29$$anonfun$apply$30$$anonfun$apply$31.apply(S.scala:1151)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun$apply$29$$anonfun$apply$30.apply(S.scala:1150)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1$$anonfun$apply$29.apply(S.scala:1149)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$$anonfun$net$liftweb$http$S$$_innerInit$1.apply(S.scala:1148)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$.net$liftweb$http$S$$_innerInit(S.scala:1147)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$39$$anonfun$apply$40$$anonfun$apply$41$$anonfun$apply$42$$anonfun$apply$43.apply(S.scala:1201)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$39$$anonfun$apply$40$$anonfun$apply$41$$anonfun$apply$42.apply(S.scala:1200)
net.liftweb.http.CoreRequestVarHandler$class.apply(Vars.scala:329)
net.liftweb.http.RequestVarHandler$.apply(Vars.scala:250)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$39$$anonfun$apply$40$$anonfun$apply$41.apply(S.scala:1199)
net.liftweb.http.CoreRequestVarHandler$class.apply(Vars.scala:329)
net.liftweb.http.TransientRequestVarHandler$.apply(Vars.scala:254)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$39$$anonfun$apply$40.apply(S.scala:1198)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$$anonfun$_init$1$$anonfun$apply$39.apply(S.scala:1197)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$$anonfun$_init$1.apply(S.scala:1196)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.S$._init(S.scala:1195)
net.liftweb.http.S$.init(S.scala:834)
net.liftweb.http.LiftServlet.doService(LiftServlet.scala:187)
net.liftweb.http.LiftServlet$$anonfun$doIt$1$1.apply(LiftServlet.scala:86)
net.liftweb.http.LiftServlet$$anonfun$doIt$1$1.apply(LiftServlet.scala:86)
net.liftweb.util.TimeHelpers$class.calcTime(TimeHelpers.scala:249)
net.liftweb.util.Helpers$.calcTime(Helpers.scala:34)
net.liftweb.util.TimeHelpers$class.logTime(TimeHelpers.scala:258)
net.liftweb.util.Helpers$.logTime(Helpers.scala:34)
net.liftweb.http.LiftServlet.doIt$1(LiftServlet.scala:85)
net.liftweb.http.LiftServlet.service(LiftServlet.scala:96)
net.liftweb.http.provider.HTTPProvider$$anonfun$service$3.apply(HTTPProvider.scala:61)
net.liftweb.http.provider.HTTPProvider$$anonfun$service$3.apply(HTTPProvider.scala:61)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.URLRewriter$.doWith(Req.scala:574)
net.liftweb.http.provider.HTTPProvider$class.service(HTTPProvider.scala:60)
net.liftweb.http.LiftFilter.service(LiftServlet.scala:572)
net.liftweb.http.provider.servlet.ServletFilterProvider$class.protected$service(ServletFilterProvider.scala:67)
net.liftweb.http.LiftFilter.protected$service(LiftServlet.scala:572)
net.liftweb.http.provider.servlet.ServletFilterProvider$$anonfun$doFilter$1$$anonfun$apply$1.apply(ServletFilterProvider.scala:67)
net.liftweb.http.provider.servlet.ServletFilterProvider$$anonfun$doFilter$1$$anonfun$apply$1.apply(ServletFilterProvider.scala:62)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9$$anonfun$apply$10$$anonfun$apply$11$$anonfun$apply$12.apply(Vars.scala:335)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9$$anonfun$apply$10$$anonfun$apply$11.apply(Vars.scala:334)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9$$anonfun$apply$10.apply(Vars.scala:333)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9.apply(Vars.scala:332)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$class.apply(Vars.scala:331)
net.liftweb.http.RequestVarHandler$.apply(Vars.scala:250)
net.liftweb.http.provider.servlet.ServletFilterProvider$$anonfun$doFilter$1.apply(ServletFilterProvider.scala:61)
net.liftweb.http.provider.servlet.ServletFilterProvider$$anonfun$doFilter$1.apply(ServletFilterProvider.scala:61)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9$$anonfun$apply$10$$anonfun$apply$11$$anonfun$apply$12.apply(Vars.scala:335)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9$$anonfun$apply$10$$anonfun$apply$11.apply(Vars.scala:334)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9$$anonfun$apply$10.apply(Vars.scala:333)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$$anonfun$apply$9.apply(Vars.scala:332)
net.liftweb.util.ThreadGlobal.doWith(ThreadGlobal.scala:71)
net.liftweb.http.CoreRequestVarHandler$class.apply(Vars.scala:331)
net.liftweb.http.TransientRequestVarHandler$.apply(Vars.scala:254)
net.liftweb.http.provider.servlet.ServletFilterProvider$class.doFilter(ServletFilterProvider.scala:60)
net.liftweb.http.LiftFilter.doFilter(LiftServlet.scala:572)
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1153)
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
org.mortbay.jetty.Server.handle(Server.java:326)
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:913)
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
 
Just wanted to be kept in the loop as to updates to this thread. I really like the clean design and the over all look and feel. Great work.
 
I agree. It looks pretty simplistic right now, but looks can be deceiving. Keep working on it, options (to the official appstore) are always welcome. :)
 
Gorgeous! Two suggestions:

1) Add a subtle horizontal divider (line or put the entries in boxes) to listing pages (like the Applications list).
2) Make the title of an application link to the same as the details link. Then you could get rid of the details link alltogether.
 
Wolfsclaw said:
Doesnt work for me on ipod touch 2g (safari).
Getting an epically long exception error, but sadly can't copy/paste the text, the ipod touch won't let me select all of the text at one time (god will i be happy to receive my pandora)'

edit: also doesnt work on my regular laptop:

Same problem here, which makes me wonder whether we miss something obvious as it seems to work for everybody else.
Here: Win7 32bit, Firefox 3.6.3

But, I still remember an early(-ier) version of this and it was already pretty good. Also that feature which pulls all the information right from the PND-file seems to be a pretty clever idea.
Keep it up!

foxblock out
 
Last edited by a moderator:
foxblock said:
Wolfsclaw said:
Doesnt work for me on ipod touch 2g (safari).
Getting an epically long exception error, but sadly can't copy/paste the text, the ipod touch won't let me select all of the text at one time (god will i be happy to receive my pandora)'

edit: also doesnt work on my regular laptop:

Same problem here, which makes me wonder whether we miss something obvious as it seems to work for everybody else.
Here: Win7 32bit, Firefox 3.6.3

But, I still remember an early(-ier) version of this and it was already pretty good. Also that feature which pulls all the information right from the PND-file seems to be a pretty clever idea.
Keep it up!

foxblock out

He said that he would be constantly working on it so we should expect exceptions. You guys are probably just checking at unlucky times.

-God Ginrai
 
Last edited by a moderator:
Back
Top