The package upload manager section of the VAPOR website is now complete. If there is anyone who wants to make their project's software available as a package downloadable using VPM or BPM, they can do so via As of right now, the GUI only works for VPM, as BPM's website isn't set up yet. Simply provide a username and password, check the recaptcha (to prevent spam accounts) and you'll be good to go. (The login system will be improved in the near future).
Implementation Advice Needed

This is a post requesting feedback on the best practice for storing: (1) files, and (2) metadata on the recipient calculator using VPM. Metadata will be the hash and some redundant integrity-relevant file data, such as type and size. I will elaborate on the problems I need to solve, and possible solutions I have arrived at and open the floor to feedback on how to best handle it.

The Problems
1. Overwriting a file of the same name: This will be an issue if a hosted package happens to have a file of the same name as a file on the device, but that file serves a different purpose. This may delete a program a user does not wish to delete, or break the dependency chain of an existing program.

2. Storing metadata: There are two ways to store metadata... to put it in a database appvar or to not store it at all. Not storing it at all would require hashes to be computed for versioning purposes on the fly when you request a package, leading to a bit of lag when you request the files that make up a package. It would also remove the ability to perform an integrity check on existing files (which admittedly isn't a core function of VPM anyway).

3. Not breaking dependencies on older software: Some programs may rely on older versions of libraries and their dependency chains may break if libraries are overwritten for a package that needs a newer library without prejudice.

The Solutions I am Considering

A) (for overwrite only) Pass an overwrite flag when calling a function like vpm_install() or vpm_update(). If the overwrite flag is set, any overwrite is done without prompting the user. If the overwrite flag is not set, the user is shown an alert asking them if they want to overwrite or skip the current file (if downloading the current file would conflict with an existing one)

B) (for all 3 problems) This would be admittedly harder, but all packages could be written on device into a group file. This group file would store: (1) An appvar containing package manifest data. VPM would read this manifest, containing hashes, sizes, and types any time it needs to operate on a package, (2) the files making up the package, including associated library versions. The drawbacks of this are it would cause a lot of file redundancy and require me to learn the TI group format in order to interface with it properly. Users wishing to support the package system could make use of a `vpm_extract()` command in their code that extracts the package, including the main program and the compatible library versions, before running it.

Does anyone have any other suggestions for multi-versioning libraries or handling any of the other problems I detail?
Personally, I'd go with a hashing-based implementation.
To handle multiple version dependencies, it might be worth considering a header-check based implementation of libload, or to bug the toolchain devs to stop shuffling around their APIs.
beckadamtheinventor wrote:
to stop shuffling around their APIs.
Everyday they shufflin'.
But in all seriousness, that's not really a "problem" persay. It's just that computers are way more conducive to holding back packages because you can sort versions by directory and symlink then into the executable directories. You don't get that luxury on the CE.

beckadamtheinventor wrote:
Personally, I'd go with a hashing-based implementation.
Yea, that's obvious, but hash when? Into a database that gets saved? Or on the fly when requesting? The database would make for faster request times, but you run into issues if you modify or manually transfer a new version of the program yourself and the database doesn't sync.
A quick update on this, just so people know this project isn't quite dead. The VAPOR network is still alive and well, it's just getting a slight functional makeover. I'm splitting the functionality into two projects. The first one will be an updater tool, a library, based on the functionality of the Linux tool apt such that commands like this will be available:


vpm_install()           // will issue an install request to the vpm server (will fetch dependencies)
vpm_remove()         // will delete the file by name requested (more or less an alias of ti_Delete)

* vpm_install() will run in update mode if the target file or its dependencies exist.

to get a sense of how that will work, head to this site:
As you can see, package sources for both TI-OS and beck's OS, BOS, will be maintained.
The delay on the development of this is due to waiting for full usb hub support within usbdrvce, and then writing a socketlib that the above can utilize.

I've arrived at the conclusion that running a "proxy" server is entirely superfluous when one can simply connect directly to the host and port they need. For that reason, that section of the project will be decommissioned, with the VAPOR service recoded to act as indicated above. However, I may also include the functionality for the VAPOR service to double as an SSL validation agent. HASHLIB already gives users the ability to validate the signature of a certificate on their device but the metadata in the certificate cannot be verified against the CA. I may add that functionality to VAPOR.
I'm... attempting to use the developer portal (it looks fine btw but then again i always say that ui comes last lol)... But it's not working for me. A little more detail: I added two files (the game itself and the README converted to 8xv useable in prgmNOTES. I typed in the description, and hit "Update Package". The page reloads, and I go to the Games page on CE-PM, and I get... Nothing.

What was on the page:

PKG AUTHOR: darkwater4213
PKG DESC: A simple game of NIM for two players. The readme is included as a prgmNOTES-compatible .8xv

PKG NAME: titrek
PKG AUTHOR: acagliano

Is there something I need to add to the manifest? I'm very confused...

EDIT: I updated the description to "A simple game of NIM for two players. The readme is included as an .8xv; use prgmNOTES ( to view on-calc." Again, I hit the "Add/Update Files" button, uploaded the two files, and hit "Update Package". The CE-PM page still doesn't show the package's contents (NIM84CE.8xp and readme-v1.0.1.8xv). Any thoughts?
Did you get any error messages? Can you try to edit the package, uploading the files again, so i can check for any php/apache errors?
Okay, will do.

Running commentary:
Login successful; no reCAPTCHA req'd (just checked the box)
The manifest (JSON, right?) looks like this:

    "category": "games",
    "author": "darkwater4213",
    "description": "A simple game of NIM for two players. The readme is included as an .8xv; use prgmNOTES (http:\/\/\/DL1358) to view on-calc.",
    "pkg-depends": []

Hit the "Add Files" button and selected the two files.
Hit Open on the system dialog. Buton changed to "File(s) Selected"
Clicked "Update Package", the page reloaded. The "File" button is back to the original.

CE-PM Page shows no change, even after refresh and hard refresh.
ah-HA! It's fixed! Thanks, ACag!
Not a problem.
I still have no idea how what I fixed was causing your particular error...there seems no logical way it would, but... welcome to the world of development I guess. :p

Anyway, glad it's working.
Hmm... What are the requirements for using CE-PM? I have my calculator turned on and plugged into my computer, I've reloaded the CE-PM page... what am I missing, and how can I obtain it?

Update: I have cloned acagliano/vapor-client off GitHub, and attempted to build it with the C SDK. After slogging through many, many errors concerning missing include files (specifically, usbdrvce.h, srldrvce.h, msddrvce.h, and fatdrvce.h, soon put right by various branches of the toolchain.) At any rate, I finally built it, and here was the result:

[linking] bin\VAPOR.bin
C:\Programming\CEDev\meta\ld.alm [1488] macro ? [1235] :read? [7] obj\\src\\main.c.src [546]:
        extern _usb_Cleanup
extern? [12] (CALM)
Error: symbol ':globals._usb_Cleanup' is undefined or out of scope.
make: *** [bin/VAPOR.bin] Error 2

I checked the /bin folder; there's nothing there. I haven't pulled from origin in a week or so though, so I'm going to go do that right now.

Second update: Okay, I've just fetched origin and attempted to build it again; exact same result int tte ermianl and still nothing in te /bin directory. I have no idea how many (if any) commits are between when I first cloned the repo and when I fetched origin just now.
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 3 of 3
» All times are UTC - 5 Hours
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum