Tool B4Xgoodies: a maintained library/class/code module/... inventory (last updated 2020-10-20)


Active Member
Licensed User
LOL I wouldn't put my money on Erel wanting to take some kind of ownership there (and he's releasing great new stuff all the time as it is), as this is community stuff.

I hadn't given any kind of marking any thought: first the data, the presentation comes later (or not, in this case ;)). But don't lose sight of my original goal: 'to know what the most recent versions are of the non-core libraries I'm using in my apps, without having to resort to manually checking these libraries' forum posts to check their versions'. If enhancements can be done through automation, I'm game, but I don't fancy trying to be the next Github ;)


Licensed User
Alas I wouldn't put my money on it either !
- I suspect Erel must be multiple people with the amount of forum responses he manages and code he outputs ;)

I understand your points entirely Walt. To serve my purpose if I detect any deadwood I'll report it to Erel and you ..

"Dont fancy trying to be the next Github .." - Where's your ambition man ?!:eek:

Cheers D :)


Active Member
Licensed User
Hi all,

I, like many others in the forum, wanted to know what the most recent versions are of the non-core libraries I'm using in my apps, without having to resort to manually checking these libraries' forum posts to check their versions. Eventually I took things a step further and thought I'd create an inventory of all the excellent stuff that's being provided by the community, in a sustainable and easily maintainable way (i.e. with minimal manual effort). Enter B4Agoodies, an Excel workbook.

For the time being, consider it beta. The 'Info' worksheet provides a high-level explanation on what it does.

The inventory contains the following columns:
- B4what: the tool to which the entry relates
- Type: the type of object (presently: libraries, snippets, code modules, classes, icons, and the ominous 'other')
- Category: a categorisation for the object (feel free to suggest more appropriate values where needed)
- Name: the name of the object (e.g. library name)
- Author / owner: the forum nick of the creator or the current owner, if ownership has been transferred
- Latest version: a version number or date (if no number was available in the first post of the thread where the object is found; the date is then the latest update date for that first post)
- License: the license that applies to the object
- Description: guess :)
- Forum thread's (or other) URL: the webpage where the object is described and from which the most recent version data will be fetched from the first post

I intend to update this every week. I keep an eye on forum posts announcing new libraries and library updates, which will then be added. If you'd notice errors or objects that could/should be added, give me a shout.

Last but perhaps not least: use worksheet 'My Projects' to list your own projects' .b4a files and, if desired/applicable, your Additional Libraries folder. Click the 'Check them' button and in worksheet 'My projects' libraries' you'll find an overview of the libraries used by your projects, these libraries' latest version according to the 'B4Agoodies' worksheet, and your version (if you specified a value for your Additional Libraries folder). In Excel, macros must be enabled for the workbook to make this work; you can examine the code in the VBA IDE.



Last updated: 2017-01-24
See post #25 for @inakigarm's B4J program if you prefer not to use Excel/LibreOffice/... !
I ran this prog on my Mac computer and it downloaded the xslm file but then displayed an error. Could not find the B4XGoodies.ini file

29/01/17 1:14:59.798 PM [0x0-0x24024] Packagename: b4j.B4XGoodies
29/01/17 1:14:59.798 PM [0x0-0x24024] WorkspacePath= /Applications/B4AGoodies
29/01/17 1:15:20.092 PM [0x0-0x24024] JobName = infodownload Tag info.txt^firsttime, Success = true
29/01/17 1:15:20.092 PM [0x0-0x24024] DownloadReady: info.txt^firsttime
29/01/17 1:15:20.092 PM [0x0-0x24024] info.txt^firsttime is written to /Applications/B4AGoodies
29/01/17 1:15:21.885 PM [0x0-0x24024] JobName = Xlsmdownload Tag B4Xgoodies.xlsm^firsttime, Success = true
29/01/17 1:15:21.885 PM [0x0-0x24024] DownloadReady: B4Xgoodies.xlsm^firsttime
29/01/17 1:15:21.887 PM [0x0-0x24024] B4Xgoodies.xlsm is written to /Applications/B4AGoodies
29/01/17 1:15:21.897 PM [0x0-0x24024] main._jobdone (java line: 612)
29/01/17 1:15:21.898 PM [0x0-0x24024] /Applications/B4AGoodies/B4Xgoodies.ini (No such file or directory)
29/01/17 1:15:21.898 PM [0x0-0x24024]     at Method)
29/01/17 1:15:21.898 PM [0x0-0x24024]     at
29/01/17 1:15:21.898 PM [0x0-0x24024]     at<init>(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at anywheresoftware.b4a.objects.streams.File.OpenInput(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at anywheresoftware.b4a.objects.streams.File.ReadString(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at b4j.B4XGoodies.main._jobdone(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
29/01/17 1:15:21.898 PM [0x0-0x24024]     at sun.reflect.NativeMethodAccessorImpl.invoke(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at java.lang.reflect.Method.invoke(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at anywheresoftware.b4a.BA.raiseEvent2(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at anywheresoftware.b4a.keywords.Common.CallSub4(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at anywheresoftware.b4a.keywords.Common.access$0(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at anywheresoftware.b4a.keywords.Common$
29/01/17 1:15:21.898 PM [0x0-0x24024]     at com.sun.javafx.application.PlatformImpl.lambda$null$174(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at Method)
29/01/17 1:15:21.898 PM [0x0-0x24024]     at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(
29/01/17 1:15:21.898 PM [0x0-0x24024]     at$


Active Member
Licensed User
I'll test it (I've no Mac the development was done on Windows OS)
Have found the problem on the Mac.
The Ini file is NOT saved in the B4AGoodies Folder it is saved under Applications and therefore can not be found in the expected B4AGoodies folder.
Must be the module that saves the file not working as expected on the Mac.
Tried KeyValueStore prog and it works as expected.

see image.



Well-Known Member
Licensed User
@BPak , can you test this code and write back the result of Pathseparator ?? I've to change which is the folder separator according the Os (windows and Mac-unix)

Dim PathSeparator as String= GetOs
Sub GetOs  As String
    Dim os As String = GetSystemProperty("", "").ToLowerCase
    If os.Contains("win") Then
         Log ($"OS = ${os} "\" "$)
         Return "/"
         Log ($"OS = ${os} "/" "$)  'Mac-Linux
         Return  "/"
    End If   
End Sub