Gambas Playground
The Gambas playground is a small web tool to write, run and share Gambas code Snippets. It is currently hosted here: -
https://gambas.one/playground.
Overview
The Playground allows you to write a small Gambas scripts using an in-browser editor, then run it on the Playground's server and see the output of the script, without needing to install anything.
It also allows you to share links that point directly to your code on the Playground, using
GitHub's Gist service.
Example 1
For i As Integer = 1 To 50
Print "Count to "; i
Next
A simple script that counts from
1
to
50
.
Example 2
'How many times do you need to loop through randomly generated numbers before you randomly get '123456789'?
Public Sub Main()
Dim sSorted As String = "123456789" 'The desired outcome
Dim sTest, sChr As String 'Various strings
Dim iCounter As Integer 'Loop counter
Do
Inc iCounter 'Increase counter value
Repeat 'Repeat
sChr = Chr(Rand(49, 57)) 'Get a random number and convert it to a character e.g. 49="1"
If Not InStr(sTest, sChr) Then sTest &= sChr 'If the random character is not in sTest then add it
Until Len(sTest) = 9 'Loop until sTest has 9 characters
If sTest = sSorted Then Break 'If sTest = sSorted then get out of the loop
sTest = "" 'Empty sTest and try again
Loop
Print "Solved in " & Str(iCounter) & " loops" 'Print the result
End
A script that can end up with 750000 loops. You may need to run this script a few times to get it to work.
Using components
Gambas components can be used in the using the
USE
keyword, like any other Gambas script.
However, since code snippets run in a completely isolated environment, components that rely on User Interfaces (GUI or CLI) or networking (HTTP, FTP, Databases …) are not available.
Example
Use "gb.xml"
Dim doc As New XmlDocument
Print doc.ToString(True)
This script creates an empty XML Document using the
gb.xml
component, and then prints its contents (with formatting enabled).
Playground link
Available Components
All the components installed by Gambas by default are available to use including: -
gb.args, gb.clipper, gb.complex, gb.compress, gb.data, gb.eval, gb.eval.highlight, gb.image.effect, gb.image, gb.inotify, gb.markdown, gb.option, gb.settings, gb.signal, gb.util, gb.util.web, gb.vb, gb.xml, gb.xml.html, gb.gsl
Limitations
Since this web service is literally about arbitrary code execution, a few limitations are in place in order to prevent abuse.
Although these should not bother you in most cases, you might want to keep them in mind should you try to run some computationally expensive code.
-
Time limit : Scripts cannot run for more than 5 seconds. Scripts exceeding this limit will get killed (i.e. the Docker container will be destroyed, denying any kind of recovery).
-
Memory limit : Script cannot allocate more than
16 MiB
of RAM. Doing so will cause the kernel to raise a SIGSEGV
signal (segmentation fault), hence killing the script. Note that this limit is set for the whole environment, therefore the Gambas runtime's memory overhead is also counted towards this limit.
-
Network limitations : No network access is possible : no network card is accessible, and sockets cannot be opened.
-
Filesystem limitations : While any file in the filesystem can be read from, written to, created or deleted, all changes will be discarded when the script ends. Files should therefore be used only as temporary storage.
Code storage
The last edited snippet is locally saved into the browser's
LocalStorage
and restored when opening the (if not from a shared link).
This allows to prevent some unfortunate accidents, such as power outages, browser crashes, and chair/keyboard interface defects.
Delete shared code
If shared code happens to contain sensitive data (such as passwords, private keys …), you can
contact the GitHub support and provide them with the Gist's link (generated along the link when sharing), or directly the Gist's ID (included in link URIs), allowing them to manually delete it.
If you have a
GitHub account you can manually
create a gist, paste your script's contents in it, and then manually craft a link to the using the following pattern :
https://gambas.one/playground/?gist=your_gist_id_here
Thanks to
Adrien Prokopowicz who created the original playground and Matthew Collins who modified it to suit our needs.