The Box


Hey everyone, I was in Germany the last 7 days, so I was unable to continue working on this, but now I'll try to catch up again!

Mr.Confuzed: "Box" is the product name, and its up to an individual hoster to introduce branding. Box is to an app store what WordPress is to a blog (in a way). Also, I'll need more details than what you gave me to find the cause of your problem. Please note that I *do* clear the database from time to time (thus deleting all users, apps, everything) as I mentioned in my first post.

Wolfsclaw: your issue will be fixed as soon as I get my changes over from my main PC to the server. It was an one-liner thanks to your explicit exception message. See the commit for more information.

Spirit: Added a link in the title (too; I want the Details button for explicitness/accessibility/etc), and I intend to add more to the "little side bar" that each application entry has, so I definitely want that space). About the space between each application entry; at the moment, I just use '<hr class="space"/>' to do the spacing, so it's obviously very simple. I could add a better spacer, but that would make the page look like this ↓; is that really much better? I could also do something fancy with nested divs to position the border better, but that would add complexity and throw off the font rhythm, etc. If a proper web designer has something to add on this subject, feel free to voice your opinions.
2gslnyb.png


foxblock: This is a complete rewrite from the earlier version, which in turn was a complete rewrite from another version that was 8 months old... So, there will always be reoccurring bugs ;)

God Ginrai: Thanks for reiterating that this is a development version! There's a lot to be done yet.

Anyways, I'm starting NetBeans again and will continue to throw out new versions every so often, with "new exciting features"... Has anyone seen the diagrams on the "User Overview" page yet?

Also, the server is being upgraded from Fedora 12 to Fedora 13 so unevenness is to be expected again.

EDIT: I'm also upgrading some libs, so no updated version of the webapp today...
 
dflemstr said:
Mr.Confuzed: "Box" is the product name, and its up to an individual hoster to introduce branding. Box is to an app store what WordPress is to a blog (in a way). Also, I'll need more details than what you gave me to find the cause of your problem. Please note that I *do* clear the database from time to time (thus deleting all users, apps, everything) as I mentioned in my first post.
I must have misunderstood. I thought you wanted me to login using "box_user" and "abc123". NVM, I've registered.

Recommendations:
List file size on the details page.
Auto convert capitals to lower case for email address entry, instead of returning an error.
For your filler, maybe a record of all the files that you've uploaded and how many times each has been downloaded?
 
Last edited by a moderator:
Mr.Confuzed said:
List file size on the details page.
Done.
Mr.Confuzed said:
Auto convert capitals to lower case for email address entry, instead of returning an error.
Done.
Mr.Confuzed said:
For your filler, maybe a record of all the files that you've uploaded and how many times each has been downloaded?
Yeah, that would be useful to have, but there's plenty of room, and just having an uploads overview won't be enough!

Oh and by the way, I rewrote the filter parsing engine and translated the whole site into German just for the laugh. Please report any grammar mistakes:
14913z8.png
 
Last edited by a moderator:
dflemstr, I mentioned this earlier in the topic, but I guess you didn't notice it, but could you create a utility for the Pandora that would work like pulling from repositories? (like using pacman or yum? preferably pacman)

-God Ginrai
 
God Ginrai said:
dflemstr, I mentioned this earlier in the topic, but I guess you didn't notice it, but could you create a utility for the Pandora that would work like pulling from repositories? (like using pacman or yum? preferably pacman)
Sorry 'bout that, and it was the first post and everything, how did I miss it!

Anyways, yes, I could very easily develop such a tool, but I would then have to define an XML interface that the tool could use. Not a problem in theory, but in practice, I'll probably have to sync this stuff with the Pandora developers (or else use a proprietary XML format that only my webapp would use, which is an alternative too, of course; especially if the app store goes over to using that format as well), and they haven't defined an XML API yet, so...

What features would you be looking for? Install-by-name? Auto-updates?

The thing with PNDs is that they now are able to provide multiple applications in the same package, so it becomes difficult to decide whether an application should be updated (because if package A contains foo-1.0 and bar-2.0 and package B contains foo-0.9 and bar-2.1, should B replace A or not?)

And then there's the problem with providers: If user A uploads foo-1.0 and user B uploads foo-1.1, should B's package be trusted, or should there be a vendor switch system à la openSUSE?

As you can see, there are a few problems that have to be dealt with before I can make a CLI tool for this webapp.
 
Last edited by a moderator:
On my phone here; we should toss together a trivial app that compares pxml version against various AppStore versions to determine if newer is available and offer autodownloads; really, a basic commandline one would be trivial to build. I'm betting dflemstr would be ye first to have an API up for it :)

not had time to follow the thread but keep it up dflemstr (and others) ... THIS is what it's all about :)

jeffphone
 
dflemstr said:
God Ginrai said:
dflemstr, I mentioned this earlier in the topic, but I guess you didn't notice it, but could you create a utility for the Pandora that would work like pulling from repositories? (like using pacman or yum? preferably pacman)
Sorry 'bout that, and it was the first post and everything, how did I miss it!

Anyways, yes, I could very easily develop such a tool, but I would then have to define an XML interface that the tool could use. Not a problem in theory, but in practice, I'll probably have to sync this stuff with the Pandora developers (or else use a proprietary XML format that only my webapp would use, which is an alternative too, of course; especially if the app store goes over to using that format as well), and they haven't defined an XML API yet, so...

What features would you be looking for? Install-by-name? Auto-updates?

The thing with PNDs is that they now are able to provide multiple applications in the same package, so it becomes difficult to decide whether an application should be updated (because if package A contains foo-1.0 and bar-2.0 and package B contains foo-0.9 and bar-2.1, should B replace A or not?)

And then there's the problem with providers: If user A uploads foo-1.0 and user B uploads foo-1.1, should B's package be trusted, or should there be a vendor switch system à la openSUSE?

As you can see, there are a few problems that have to be dealt with before I can make a CLI tool for this webapp.

I would like Install-by-name. I want it to update something only if I ask it to. As for deciding which user's package should be trusted, you could take the route yaourt uses and have something similar to PKG-Builds; It is up to the user to look through and decide if it should be trusted or not. Ratings will help users to know if one is not very trustworthy, as well.

-God Ginrai
 
Last edited by a moderator:
Looking great so far, I like how it is very functional and simplified and does not rely on much eye-candy.

dflemstr said:
Oh and by the way, I rewrote the filter parsing engine and translated the whole site into German just for the laugh. Please report any grammar mistakes:

Since you asked for it:

User page:
Download-Historik -> "Download-Historie"

Change password page:
Change password -> Passwort ändern
Nochmals -> Passwort wiederholen / wiederholen
(these also need changing on the register page)

Main page - when you are not logged in:
Please Einloggen to gain access to comments, ratings and more! -> Bitte einloggen um Zugang zu Kommentaren, Bewertungn und mehr zu erhalten!

User page - when you are not logged in:
You are not logged in. Please log in or register to view your user pages. -> Sie sind nicht eingeloggt. Bitte einloggen oder neu registrieren um die Benutzer-Seiten aufzurufen.

Login page
Log in (button) -> Einloggen

Keep it up!

foxblock out
 
Last edited by a moderator:
foxblock said:
dflemstr said:
Oh and by the way, I rewrote the filter parsing engine and translated the whole site into German just for the laugh. Please report any grammar mistakes:

Since you asked for it:
Wow, you actually spidered the page - manually - to review all of the translation strings? Good job! But I guess I should have told you that the translation files are located here - would have made things a lot easier for you, I bet.

Anyways, thanks a bunch for the corrections; they are now committed and active.
 
Last edited by a moderator:
skeezix said:
On my phone here; we should toss together a trivial app that compares pxml version against various AppStore versions to determine if newer is available and offer autodownloads; really, a basic commandline one would be trivial to build. I'm betting dflemstr would be ye first to have an API up for it :)

not had time to follow the thread but keep it up dflemstr (and others) ... THIS is what it's all about :)

jeffphone
There's still the problem of identifying package series... This is the info about applications I'm able to extract from PXML files:
Code:
mysql> select a.id as id, a.pxmlId as pxmlId, a.versionMajor as maj, a.versionMinor as min, a.versionRelease as rel, a.versionBuild as bui, a.authorName as authorName, u.username as username from applications as a, users as u, packages as p where a.packageId = p.id and p.userId = u.id;
+----+------------------------------+-----+-----+-----+-----+--------------------------------+----------+
| id | pxmlId                       | maj | min | rel | bui | authorName                     | username |
+----+------------------------------+-----+-----+-----+-----+--------------------------------+----------+
|  1 | angrydd.EvilDragon           |   1 |   0 |   1 |   0 | Ported by EvilDragon           | dflemstr |
|  2 | exaile.pickle                |   0 |   3 |   1 |   0 | Ported by Pickle               | dflemstr |
|  3 | jeff.sample.pnd.winkydink123 |   1 |   0 |   0 |   0 | NULL                           | dflemstr |
|  4 | jeff.sample.pnd.ls.hooha     |   1 |   0 |   0 |   0 | NULL                           | dflemstr |
|  5 | battlejewels.skeezix.0001    |   1 |   1 |   1 |   2 | Jeff Mitchell                  | dflemstr |
|  6 | battlejewels.skeezix.0001    |   1 |   1 |   1 |   2 | Jeff Mitchell                  | dflemstr |
|  7 | cdogs.pickle                 |   1 |   1 |   1 |   2 | lumaki, ported by Pickle       | dflemstr |
|  8 | cdogs.pickle                 |   1 |   1 |   1 |   2 | lumaki, ported by Pickle       | dflemstr |
|  9 | cgenius.pickle               |   0 |   3 |   1 |   2 | CGenius Team                   | dflemstr |
| 10 | colem.skeezix                |   1 |   1 |   1 |   1 | Ported by skeezix              | dflemstr |
| 11 | etw.pickle                   |   3 |   6 |   0 |   0 | GGSoft                         | dflemstr |
| 12 | fheroes2.pickle              |   1 |  15 |   7 |   5 |                                | dflemstr |
| 13 | fuse.cosam.0.9.0.0           |   0 |   9 |   0 |   0 | Steve Maddison                 | dflemstr |
| 14 | gianasreturn                 |   0 |   9 |   8 |   0 |                                | dflemstr |
| 15 | gpfce.pickle                 |   0 |   1 |   0 |   0 |                                | dflemstr |
| 16 | hugo.cosam.2.12.0.0          |   2 |  12 |   0 |   0 | Steve Maddison                 | dflemstr |
| 17 | snes9x.skeezix.alpha         |   1 |   1 |   1 |   1 | snes9x team / SiENcE / skeezix | dflemstr |
| 18 | uae4all                      |   1 |   1 |   1 |   2 | Ported by Pickle               | dflemstr |
| 19 | vba.cosam.1.7.2.0            |   1 |   7 |   2 |   0 | Steve Maddison                 | dflemstr |
| 20 | vicex128.pickle              |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
| 21 | vicexcbm2.pickle             |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
| 22 | viceplus4.pickle             |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
| 23 | viceVIC.pickle               |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
| 24 | vicePET.pickle               |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
+----+------------------------------+-----+-----+-----+-----+--------------------------------+----------+
24 rows in set (0.00 sec)

mysql>

So, how the heck am I supposed to identify a package series? pxmlId is way too random for that, and there isn't a required 'package' attribute or anything (even though you wanted to add one, Skeezix)
 
Last edited by a moderator:
I was thinking that saving some vertical screen space would be a good idea.

theboxmodified.png


Does The Box support multiple pages, or sorting?
 
Mr.Confuzed said:
I was thinking that saving some vertical screen space would be a good idea.
The empty area left of the menu system is actually being used for different things (the AJAX indicator and as menu space for languages with long words among other things) so I don't want to sacrifice that. I can add a drop-down box for categories at the bottom, however (wouldn't make much sense in the menu since there are ~170 categories as defined by FDF).

And I'll implement some of the stuff you struck through. (EDIT: see this commit)
Mr.Confuzed said:
Does The Box support multiple pages, or sorting?
There are some hidden, very-BETA operators called "orderby:title", "orderby:rating" and "orderby:time" (put them in the mis-named filter field; you can add "asc" or "desc" to indicate direction e.g. "orderby:titleasc").
I will also implement something *even better than pagination* soon.
 
Last edited by a moderator:
For package updates, something useful (would require adding to the PXML spec though) would be an equivalent to pacman's "provides" attribute. You could have multiple packages that "provide" one package (a couple of people make their own versions of one emulator), and when you use the CLI tool for updating, it gives you a list of the packages newer than the currently installed package that provide the same app/lib/whatever. It wouldn't work quite as well here, as many devs (especially newer/inexperienced ones) wouldn't use it and/or there would be difficulty in establishing any decent standard.
 
dflemstr said:
skeezix said:
On my phone here; we should toss together a trivial app that compares pxml version against various AppStore versions to determine if newer is available and offer autodownloads; really, a basic commandline one would be trivial to build. I'm betting dflemstr would be ye first to have an API up for it :)

not had time to follow the thread but keep it up dflemstr (and others) ... THIS is what it's all about :)

jeffphone
There's still the problem of identifying package series... This is the info about applications I'm able to extract from PXML files:
Code:
mysql> select a.id as id, a.pxmlId as pxmlId, a.versionMajor as maj, a.versionMinor as min, a.versionRelease as rel, a.versionBuild as bui, a.authorName as authorName, u.username as username from applications as a, users as u, packages as p where a.packageId = p.id and p.userId = u.id;
  +----+------------------------------+-----+-----+-----+-----+--------------------------------+----------+
  | id | pxmlId                       | maj | min | rel | bui | authorName                     | username |
  +----+------------------------------+-----+-----+-----+-----+--------------------------------+----------+
  |  1 | angrydd.EvilDragon           |   1 |   0 |   1 |   0 | Ported by EvilDragon           | dflemstr |
  |  2 | exaile.pickle                |   0 |   3 |   1 |   0 | Ported by Pickle               | dflemstr |
  |  3 | jeff.sample.pnd.winkydink123 |   1 |   0 |   0 |   0 | NULL                           | dflemstr |
  |  4 | jeff.sample.pnd.ls.hooha     |   1 |   0 |   0 |   0 | NULL                           | dflemstr |
  |  5 | battlejewels.skeezix.0001    |   1 |   1 |   1 |   2 | Jeff Mitchell                  | dflemstr |
  |  6 | battlejewels.skeezix.0001    |   1 |   1 |   1 |   2 | Jeff Mitchell                  | dflemstr |
  |  7 | cdogs.pickle                 |   1 |   1 |   1 |   2 | lumaki, ported by Pickle       | dflemstr |
  |  8 | cdogs.pickle                 |   1 |   1 |   1 |   2 | lumaki, ported by Pickle       | dflemstr |
  |  9 | cgenius.pickle               |   0 |   3 |   1 |   2 | CGenius Team                   | dflemstr |
  | 10 | colem.skeezix                |   1 |   1 |   1 |   1 | Ported by skeezix              | dflemstr |
  | 11 | etw.pickle                   |   3 |   6 |   0 |   0 | GGSoft                         | dflemstr |
  | 12 | fheroes2.pickle              |   1 |  15 |   7 |   5 |                                | dflemstr |
  | 13 | fuse.cosam.0.9.0.0           |   0 |   9 |   0 |   0 | Steve Maddison                 | dflemstr |
  | 14 | gianasreturn                 |   0 |   9 |   8 |   0 |                                | dflemstr |
  | 15 | gpfce.pickle                 |   0 |   1 |   0 |   0 |                                | dflemstr |
  | 16 | hugo.cosam.2.12.0.0          |   2 |  12 |   0 |   0 | Steve Maddison                 | dflemstr |
  | 17 | snes9x.skeezix.alpha         |   1 |   1 |   1 |   1 | snes9x team / SiENcE / skeezix | dflemstr |
  | 18 | uae4all                      |   1 |   1 |   1 |   2 | Ported by Pickle               | dflemstr |
  | 19 | vba.cosam.1.7.2.0            |   1 |   7 |   2 |   0 | Steve Maddison                 | dflemstr |
  | 20 | vicex128.pickle              |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
  | 21 | vicexcbm2.pickle             |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
  | 22 | viceplus4.pickle             |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
  | 23 | viceVIC.pickle               |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
  | 24 | vicePET.pickle               |   2 |   2 |   0 |   0 | Ported by Pickle               | dflemstr |
  +----+------------------------------+-----+-----+-----+-----+--------------------------------+----------+
  24 rows in set (0.00 sec)
  
  mysql>

So, how the heck am I supposed to identify a package series? pxmlId is way too random for that, and there isn't a required 'package' attribute or anything (even though you wanted to add one, Skeezix)

Given theres only been 1 battlejewels released, and you have two entries with the same, then I'm assuimng your DB has two entries for one pnd, which would confuse matters a touch. (I would assume that unique-id same and version-num same is same, for all practical concerns, even if not true.) As to sequence, you either have to define the version-num and its comparisons, or add attributes to define how it shoudl be treated (meh).

For package dependancies, well, TBD :) Theres a lot TBD :) Feel free to help define it, I'm a tired out wretch now :) (to wit, I'll also be mega busy for the next 4-5 weeks or so :/)

jeff

ie: unique-id can only really be relied on for consistency; ie: for 20 versions of an app, it generally should not change, though version should (but will it, hard to say ;) .. for me, I often have put 'foo.bar.0001' for unique-id, when it was before the appdata-dir-name was supported; now, unique-ids should generally be unique-to-the-app, and appdata-dir shoudl be same until data-breakage-between-versions; so ie: it shoudl be unique-id 'battlejewels.skeezix' (say), and appdata-dir 'battlejewels' (and if I had to break data somehow and not handle it in my runscriptm, then perhaps later appdata might be 'battlejewels-foo1'. For sequence, the version number should be handled in a per-component numerical test I would assume. *Shrug*
 
Last edited by a moderator:
Yeah I have yet to add dupe checks to the system, so those PNDs are dupes, plain and simple.

But OK, using the unique ID seems to be the way to go then, but what bothers me is that the names are too complex (e.g. "box install battlejewels.skeezix.0001" is very verbose to type in; "battlejewels" would be better). Oh and versions are sorted lexicographically of course.

Dependencies? Those aren't really needed, now are they?

But OK, I'm defining the repo interface now, brb with a standard.

(I'm thinking: what about JSON instead of XML?)
 
yeah, I see what you mean in using unique-id as somethign to be typed in by user, had never intended for that. ie" "reasonably unique" does not make for user friendly, but making it easier to type 'by definition' woudl lead to problems, so leave it ot developers to see how unique they want to go.

But more to point, most users woudl end up using a package manager UI I imagine, so not have to type it in anyway.

*shrug*

jeff
 
JSON, sure, fine by me -- standard, works trivially with python and hs and a few other languages, and half the weight/pain/burden of XML :)

jeff
 
We should change "Einloggen" to "Anmelden", which actually is a German word.
 
So this is my first draft, thoughts? (This is actually Javascript and not JSON, since JSON doesn't accept comments)
Code:
//NOTE: Fields marked with "OPTIONAL" may be null or missing.

//Repository file. (type: json-object)
//
//Will use the JSON common-denominator encoding (can be read as ASCII, ISO-8859-1 or UTF-8)
//Unicode characters are escaped with "\uXXXX" as per the JSON standard.
{
  //Information about the repository. (type: json-object)
  "repository": {

    //User-friendly name of the repo to be shown to the user (type: json-string)
    "name":        "The Box",

    //Repository API version. (type: json-number, aka float)
    //
    //A client may only open a repository file if it supports this version.
    //(implementations need not be backwards-compatible)
    "version":     1.0
  },

  //Information about the applications in the repo. (type: json-array)
  "applications": [

    //Application (type: json-object)
    {
      //The application's queryable id. (type: json-string, see PXML standard)
      "id":        "viceVIC.pickle",

      //The application version. (type: json-object)
      "version": {
        "major":   2, //(type: int, must be >= 0)
        "minor":   2, //(type: int, must be >= 0)
        "release": 0, //(type: int, must be >= 0)
        "build":   0  //(type: int, must be >= 0)
      },

      //OPTIONAL: The application author. (type: json-string)
      "author":   "Ported by Pickle",

      //OPTIONAL: The application vendor. (type: json-string)
      //
      //This is e.g. the uploader of the file, or the company, etc.
      //This is useful for networks-of-trust, e.g. an auto-update app might ask the user before
      //upgrading an app with a new version from a different vendor.
      //If the "vendor" is missing, it should be safe to assume that the package comes from a
      //fully trusted vendor.
      "vendor":    "dflemstr",

      //URI to the PND containing the application (type: json-string)
      //
      //URI accepts the following protocols: ["http:", "https:", "ftp:", "data:", "file:"]
      "uri":       "http://dflemstr.dyndns.org:8088/file/package/WPL5JKWK0PTODSWK.pnd",

      //Application localizations. (type: json-array)
      //
      //A localization for "en_US" will always be present.
      "localizations": {
        //Application localization. (type: json-object)
        //
        //Key: Language of this localization. (type: json-string, matches: "[a-z][a-z](_[A-Z][A-Z])?")
        //
        //This is made up of two parts:
        // - The language part. This code is the lower-case, two-letter code as defined by ISO-639.
        // - OPTIONAL: The country part. This code is the upper-case, two-letter code as defined by ISO-3166, with an underscore as the prefix.
        "en_US": {
          //The application title according to this localization (type: json-string)
          "title": "Vice xVIC",

          //The application description according to this localization. (type: json-string)
          "description": "A VIC Emulator."
        }
      },

      //Application categories. (type: json-array)
      "categories": [
        //Category. (type: json-string)
        //
        //See http://standards.freedesktop.org/menu-spec/latest/apa.html for a list of valid categories.
        "Game"
      ],

      //OPTIONAL: URI to the icon to show to the user (type: json-string)
      //
      //URI accepts the following protocols: ["http:", "https:", "ftp:", "data:", "file:"]
      //(Image of type: image/png, size: The largest side is 64 pixels, e.g. 64x64, 64x46, 32x64. Preferrably square.)
      "icon":     "http://dflemstr.dyndns.org:8088/file/image/WPL5JKWK0PTODSWK.png",
    }
  ]
}
 
Back
Top