Open gavr123456789 opened 4 years ago
Okey i got this image smalltalk concept, it looks like every project is a vm + IDE.
The command to run on linux is simular to windows but no back slashes
pharo 'Pharo.image' eval --save " Metacello new
repository: 'github://pharo-spec/mars-gtk';
baseline: 'Mars';
onConflict: [ :e | e useIncoming ];
onUpgrade: [ :e | e useIncoming ];
ignoreImage;
load"
PS watching this presentation now https://youtu.be/g6QVrbb-ZUc
Got PrimitiveFailed while setup
Here last logs:
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run in Block: [ self prepareForRunning....
BlockClosure>>ensure:
Job>>run
MorphicUIManager(UIManager)>>displayProgress:from:to:during:
ByteString(String)>>displayProgressFrom:to:during:
OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection(Collection)>>do:displayingProgress:
MCPackageLoader>>basicLoadDefinitions
[ self basicLoadDefinitions ] in MCPackageLoader>>basicLoad in Block: [ self basicLoadDefinitions ]
[ aBlock value ] in SourceFileArray>>deferFlushDuring: in Block: [ aBlock value ]
BlockClosure>>ensure:
SourceFileArray>>deferFlushDuring:
Окно или вкладка откроются в текущем сеансе браузера.
[127064:127077:0120/221455.388376:ERROR:browser_gpu_channel_host_factory.cc(138)] Failed to launch GPU process.
My GPU is Nvidia.
Yes, this is still a beta project using a beta version of the virtual machine. The regular VM will not work, but you should be able to get the VM here:
curl https://get.pharo.org/64/vmHeadlessLatest90 | bash
NOTE: I don't know how this will go with ArchLinux. But I will be happy to help you start it, since I am very interested on the feedback of someone with Vala experience.
Edit: if you don't know Smalltalk, I recommend you to take some time digging in the documentation. Also, I made a tech talk about this project last month you can check out (sorry for the accent :) ).
It's nice to hear that someone else knows about Vala.
I executed this command but it seems I get the same error(I think i need to change the image in which I do it). There are currently 8 Pharo-related files in my directory: pharo-local and pharo-vm directories, Pharo files.changes, Pharo.image, Pharo8.0-32bit-bbcdf97.sources, PharoDebug.log, and 2 executive pharo and pharo-ui. When I deleted everything related to Pharo in the home directory, and tried to execute curl https://get.pharo.org/64/vmHeadlessLatest90 | bash
i got error Could not open the Pharo image file
Pharo.image'.` So I restored all the files, and now I get the same error as before.
About learning Smalltalk, I read this.
hah, in Russian :) Anyway, to start from scratch in an empty directory:
curl https://get.pharo.org/64/90+vmHeadlessLatest | bash
This will download correct vm and a new image.
@estebanlm
in Russian :)
I think chrome auto translator should handle this) This is an article that explains all the Smalltalk syntax from that postcard. There also great aricle "How learning Smalltalk can improve your programming skills".
Okay, I finally realized that this command downloads not only the image but also the entire Pharo (it's not very common in the Linux world to run binaries from usual home directories), now I have the latest Pharo 9.0. By the way, its performance is noticeably worse.
This is interesting because it has not yet been released, or because it is installed locally and not in the system.
Next, to install GTK, I should run the command that is described for windows in the README of this repository?
PS I was really surprised when you turned this app into a GTK without changing the syntax. It is not surprising that people in the audience clapped ^^
PSS In this presentation, I heard that you can broadcast Smalltalk in C. does this Mean that you can call Smallalk code from Vala, as happens with LuaVM or JSCore.
Here small example of pushing variables to luavm from vala instantly:
On 21 Jan 2020, at 11:13, gavr123456789 notifications@github.com wrote:
@estebanlm https://github.com/estebanlm in Russian :)
I think chrome auto translator should handle this) This is an article that explains all the Smalltalk syntax from that postcard. There https://habr.com/ru/post/328156/ also great aricle "How learning Smalltalk can improve your programming skills".
Okay, I finally realized that this command downloads not only the image but also the entire Pharo (it's not very common in the Linux world to run binaries from normal home directories), now I have the latest Pharo 9.0. By the way, its performance is noticeably worse.
Yes, it is still an experimental VM without much optimisation :)
https://user-images.githubusercontent.com/30507409/72794979-ea57ea80-3c4d-11ea-9295-81de6b2ffc3a.gif This is interesting because it has not yet been released, or because it is installed locally and not in the system.
Next, to install GTK, I should run the command that is described for windows in the README of this repository?
You can open a playground and execute this :
Metacello new
repository: 'github://pharo-spec/mars-gtk';
baseline: 'Mars';
onConflict: [ :e | e useIncoming ];
onUpgrade: [ :e | e useIncoming ];
ignoreImage;
load
PS I was really surprised when you turned this app into a GTK https://youtu.be/g6QVrbb-ZUc?t=423 without changing the syntax. It is not surprising that people in the audience clapped ^^
:) But remember is still beta (or less).
PSS In this https://youtu.be/2d2otdj66dw?t=245 presentation, I heard that you can broadcast Smalltalk in C. does this Mean that you can call Smallalk code from Vala, as happens with LuaVM https://valadoc.org/lua/Lua.LuaVM.html or JSCore https://valadoc.org/javascriptcoregtk-4.0/JSC.html.
You can do FFI calls, yes. And since Vala compiles to C, its functions will be callable.
Here small example of pushing variables to luavm from vala instantly: https://user-images.githubusercontent.com/30507409/72795996-9ea64080-3c4f-11ea-9b09-225ba9ffd946.png — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/pharo-spec/mars-gtk/issues/34?email_source=notifications&email_token=AAD5MXTIKJ2X5ZQPAXWMWZDQ63DC5A5CNFSM4KJIR4WKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEJPGH3Q#issuecomment-576611310, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAD5MXVCJ6XOYZYU3DMDHXLQ63DC5ANCNFSM4KJIR4WA.
Here's what happened after:
I can't copy the error text from the left window. It looks like some things in the IDE are now broken xd.
I wanted to change the theme to a light one so that the error code would be more visible.
it is a known fresh issue: https://github.com/pharo-project/threadedFFI-Plugin/issues/20
Oh okey, so i will just wait now.
Thanks for the report. In particular the fact that Pharo 90 is slower. BTW you can check some videos at http://mooc.pharo.org and you (I imagine that you are a good dev) can get up to speed in one or two days.
Guille fixed the ThreadedFFI bug so you can continue in your experiments
@Ducasse is not P9 who is slower, is the experimental headless vm (which we are not yet optimised)
@Ducasse Thanks for the link, I think it needs to be posted on YouTube so people can find it. Before that, I had already started watching this series of lessons.
@pavel-krivanek I will tell you how everything was in order, first of all now everything is installed without errors! BBut when I tried to make a gtk application based on the example(with label) that was at the beginning of the presentation I got the usual spec application (if I understood correctly that spec is the name of the current gui framework pharo)
~/b/Pharo ❯❯❯ ./pharo-ui Pharo.image
pthread_setschedparam failed: Operation not permitted
This VM uses a separate heartbeat thread to update its internal clock
and handle events. For best operation, this thread should run at a
higher priority, however the VM was unable to change the priority. The
effect is that heavily loaded systems may experience some latency
issues. If this occurs, please create the appropriate configuration
file in /etc/security/limits.d/ as shown below:
cat <<END | sudo tee /etc/security/limits.d/pharo.conf
* hard rtprio 2
* soft rtprio 2
END
and report to the pharo mailing list whether this improves behaviour.
You will need to log out and log back in for the limits to take effect.
For more information please see
https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux
primitive #loadSymbol:module: in ExternalAddress class failed
ExternalAddress class(ProtoObject)>>primitiveFailed:
ExternalAddress class(ProtoObject)>>primitiveFailed
ExternalAddress class>>loadSymbol:module:
TFExternalFunction>>validate
TFPooledExternalAsyncCall(TFExternalAsyncCall)>>validateFunction
TFPooledExternalAsyncCall(TFExternalAsyncCall)>>prepareExecution
[ semaphore := aRunner semaphorePool takeOne.
self prepareExecution.
self doExecuteOn: aRunner ] in TFPooledExternalAsyncCall>>executeOn: in Block: [ semaphore := aRunner semaphorePool takeOne....
BlockClosure>>ensure:
TFPooledExternalAsyncCall>>executeOn:
TFSameThreadRunner(TFRunner)>>invokeFunction:withArguments:
GtkApplication>>initArgC:argV:
TFCalloutAPI(FFICalloutAPI)>>function:library:
GtkApplication(Object)>>ffiCall:library:options:
GtkApplication(Object)>>ffiCall:library:
GtkApplication(Object)>>ffiCall:
GtkApplication>>initArgC:argV:
GtkApplication>>initGtk3
GtkApplication>>start
GtkApplication>>run
GtkApplication class>>ensureRunning
OSGtkDriver>>ensureGtkRunning
OSGtkDriver>>createWindowWithAttributes:osWindow:
OSWindowAttributes>>createWindowHandleFor:
OSWindow>>createWindow
OSWindow>>initWithAttributes:eventHandler:
OSWindow class>>createWithAttributes:eventHandler:
OSWorldRenderer>>doActivate
OSWorldRenderer(AbstractWorldRenderer)>>activate
WorldState>>worldRenderer:
MorphicUIManager>>activate
PrimitiveFailed: primitive #loadSymbol:module: in ExternalAddress class failed
ExternalAddress class(ProtoObject)>>primitiveFailed:
ExternalAddress class(ProtoObject)>>primitiveFailed
ExternalAddress class>>loadSymbol:module:
TFExternalFunction>>validate
TFPooledExternalAsyncCall(TFExternalAsyncCall)>>validateFunction
TFPooledExternalAsyncCall(TFExternalAsyncCall)>>prepareExecution
[ semaphore := aRunner semaphorePool takeOne.
self prepareExecution.
self doExecuteOn: aRunner ] in TFPooledExternalAsyncCall>>executeOn: in Block: [ semaphore := aRunner semaphorePool takeOne....
BlockClosure>>ensure:
TFPooledExternalAsyncCall>>executeOn:
TFSameThreadRunner(TFRunner)>>invokeFunction:withArguments:
GtkApplication>>initArgC:argV:
TFCalloutAPI(FFICalloutAPI)>>function:library:
GtkApplication(Object)>>ffiCall:library:options:
GtkApplication(Object)>>ffiCall:library:
GtkApplication(Object)>>ffiCall:
GtkApplication>>initArgC:argV:
GtkApplication>>initGtk3
GtkApplication>>start
GtkApplication>>run
GtkApplication class>>ensureRunning
OSGtkDriver>>ensureGtkRunning
OSGtkDriver>>createWindowWithAttributes:osWindow:
OSWindowAttributes>>createWindowHandleFor:
OSWindow>>createWindow
OSWindow>>initWithAttributes:eventHandler:
OSWindow class>>createWithAttributes:eventHandler:
OSWorldRenderer>>doActivate
OSWorldRenderer(AbstractWorldRenderer)>>activate
WorldState>>worldRenderer:
MorphicUIManager>>activate
#The app didn't crash or close, but nothing happens after this line.
Once again, this happened after I re-downloaded Pharo, launched this code in Playground
Metacello new
repository: 'github://pharo-spec/mars-gtk';
baseline: 'Mars';
onConflict: [ :e | e useIncoming ];
onUpgrade: [ :e | e useIncoming ];
ignoreImage;
load
And tried to run Pharo again.
Any ideas?
It is not finding GTK3.
Two ideas:
1) Are you sure you are using the vm downloaded with curl https://get.pharo.org/64/vmHeadlessLatest90 | bash
?
2) Do you have GTK3 (64bit) installed?
If so, can you verify the path to it? (in GtkLibrary>>unix64LibraryName
)
I don't really understand what you mean by Gtk Library> > unix64LibraryName
Here is a list of all files associated with gtk3 on my computer.
I'm pretty sure that GTK 3 is installed, at least because I use GNOME.
Here step by step what Im doing demo: https://youtu.be/rE9QxzIbeRg PS Glitches are only on video, I forgot to disable NVIDIA sync.
Wait, this is most likely due to the fact that Pharo is not installed in the system, but simply in a folder in the form of a binary.
heh. Which linux distro are you using? (are you sure is 64bit?)
The problem is this: I have hardcoded the library path to: /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
and you have the library at: /usr/lib/libgtk-3.so
But real problem is that I am not looking at the LD_LIBRARY_PATH for it.
Anyway, I hacked a way to let you move on for the moment. If you try now, it should work :)
@estebanlm heh that was easy xd, thanks for ur time!
Which linux distro are you using? (are you sure is 64bit?)
Arch, Yes. Now for the second part of this issue, where can I get examples?
Check the class SpDemo or something like that.
Hi -
I've tried to get Pharo working with GTK on Xubuntu 19.10 and failed.
I followed the instructions on the Github page.
I downloaded the image and headless vm like this:
curl https://get.pharo.org/64/80+vmHeadlessLatest | bash
This doesn't work at all as opening the downloaded image just blanks out the entire screen (not just the pharo window)
So I tried with a Pharo 9 image:
curl https://get.pharo.org/64/90+vmHeadlessLatest | bash
This works in that I get a working pharo-ui. I can then download the Mars code as specified:
Metacello new repository: 'github://pharo-spec/mars-gtk'; baseline: 'Mars'; onConflict: [ :e | e useIncoming ]; onUpgrade: [ :e | e useIncoming ]; ignoreImage; load
I save the image but when I run pharo-ui again I get a blank pharo window.
In the termianl, there is this error message:
PrimitiveFailed: primitive #primCallbackReturn in TFCallbackInvocation failed TFCallbackInvocation(ProtoObject)>>primitiveFailed: TFCallbackInvocation(ProtoObject)>>primitiveFailed TFCallbackInvocation>>primCallbackReturn TFCallbackInvocation>>DoItIn: TFCallbackInvocation(ProtoObject)>>mustBeBooleanDeOptimizeIn: TFCallbackInvocation(ProtoObject)>>mustBeBoolean TFCallbackInvocation>>returnExecution [ (callbackInvocationStack top == aCallbackInvocation) ifTrue: [ aCallbackInvocation returnExecution ifTrue: [ "If we are starting a session and an execution was executed, it may happen that the stack is empty." callbackInvocationStack ifEmpty: [ ^ self ]. callbackInvocationStack pop. [ callbackReturnSemaphore signalAll ] valueUnpreemptively. ^ self ]] ] in TFSameThreadRunner(TFRunner)>>returnCallback: in Block: [... [ caught := true. self wait. blockValue := mutuallyExcludedBlock value ] in Semaphore>>critical: in Block: [... BlockClosure>>ensure: Semaphore>>critical: TFSameThreadRunner(TFRunner)>>returnCallback: TFCallbackInvocation>>execute [ aCallbackInvocation execute ] in [ aTFRunner handleExceptionDuring: [ aCallbackInvocation execute ] ] in TFCallbackForkRunStrategy>>executeCallback:on: in Block: [ aCallbackInvocation execute ] BlockClosure>>on:do: [ Processor terminateActive ] in [:ex | | copy onDoCtx process handler bottom thisCtx |
onDoCtx := thisContext.
thisCtx := onDoCtx home.
"find the context on stack for which this method's is sender"
[ onDoCtx sender == thisCtx] whileFalse: [
onDoCtx := onDoCtx sender.
onDoCtx ifNil: [
"Can't find our home context. seems like we're already forked
and handling another exception in new thread. In this case, just pass it through handler."
^ handlerAction cull: ex ]
].
bottom := [ Processor terminateActive ] asContext.
onDoCtx privSender: bottom.
handler := [ handlerAction cull: ex ] asContext.
handler privSender: thisContext sender.
(Process forContext: handler priority: Processor activePriority) resume.
"cut the stack of current process"
thisContext privSender: thisCtx.
nil
] in BlockClosure>>on:fork: in Block: [ Processor terminateActive ]
Any ideas what I'm doing wrong?
Thanks
Ken
Thanks a lot for the report!!!! I have no idea how to help you but I'm sure that esteban will :).
i had a different problem on parabola/arch - this probably should be a separate ticket; but it seems not clear that this software is known to work on any *nix yet, so i will just add to this one, to keep the momentum going
with both pharo 80 and 90, when the GUI starts, the debugger pops up immediately, complaining about the libgit.so
$ cat ../PharoDebug.log
THERE_BE_DRAGONS_HERE
External module not found
23 May 2020 5:00:52.016506 pm
VM: unix - x86_64 - linux-gnu - CoInterpreterWithQueueFFI * VMMaker-CompatibleUserName.1576752507 uuid: 593ff3ea-b9b9-5c5e-9934-0deb7e847081 Dec 25 2019
StackToRegisterMappingCogit * VMMaker-CompatibleUserName.1576752507 uuid: 593ff3ea-b9b9-5c5e-9934-0deb7e847081 Dec 25 2019
e04812e - Commit: e04812e - Date: 2019-12- module: '/code/pharo/pharo64-linux-headless-latest/lib/libgit2.so.0.25.1'19 11:48:27 +0100
Image: Pharo9.0.0 [Build information: Pharo-9.0.0+build.308.sha.8ce6236be6057e5d33352dc1c0d52b713e962ab6 (64 Bit)]
ExternalLibraryFunction(Object)>>error:
Receiver: <cdecl: long 'git_libgit2_init' () module: '/code/pharo/pharo64-linux-headless-latest/lib/...etc...
Arguments and temporary variables:
aString: 'External module not found
Receiver's instance variables: module: '/code/pharo/pharo64-linux-headless-latest/lib/libgit2.so.0.25.1'
handle: @ 16r00000000
flags: 0
argTypes: an Array(long)
name: #git_libgit2_init
module: '/code/pharo/pharo64-linux-headless-latest/lib/libgit2.so.0.25.1'
errorCodeName: nil
ExternalLibraryFunction(Object)>>externalCallFailed
Receiver: <cdecl: long 'git_libgit2_init' () module: '/code/pharo/pharo64-linux-headless-latest/lib/...etc...
Arguments and temporary variables:
errCode: 1
Receiver's instance variables:
handle: @ 16r00000000
flags: 0
argTypes: an Array(long)
name: #git_libgit2_init
module: '/code/pharo/pharo64-linux-headless-latest/lib/libgit2.so.0.25.1'
errorCodeName: nil
ExternalLibraryFunction(ExternalFunction)>>in module: '/code/pharo/pharo64-linux-headless-latest/lib/libgit2.so.0.25.1'vokeWithArguments:
Receiver: <cdecl: long 'git_libgit2_init' () module: '/code/pharo/pharo64-linux-headless-latest/lib/...etc...
Arguments and temporary variables:
argArray: #()
ec: 3
Receiver's instance variables:
handle: @ 16r00000000
flags: 0
argTypes: an Array(long)
name: #git_libgit2_init
module: '/code/pharo/pharo64-linux-headless-latest/lib/libgit2.so.0.25.1'
errorCodeName: nil
LGitLibrary>>libgit2_init
Receiver: a LGitLibrary
Arguments and temporary variables:
Receiver's instance variables:
initialized: false
the file looks fine
$ file lib/libgit2.so.0.25.1
lib/libgit2.so.0.25.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=bca31b8ef88a657faffdaa55c5960250ecbc7b9a, with debug_info, not stripped
i "fixed" that by deleting the libraries from the lib/ dir and adding symlinks to the system libgit2 libs - by "fixed", i mean that it allowed pharo to start without the FFI error
$ rm lib/libgit2.so*
$ ln -s /usr/lib/libgit2.so.1.0.0 lib/libgit2.so.1.0.0
$ ln -s /usr/lib/libgit2.so.1.0 lib/libgit2.so.1.0
$ ln -s /usr/lib/libgit2.so lib/libgit2.so
however, upon loading 'mars-gtk' with metacello, pharo crashed with a segfault; so its not clear that my "fix" was an improvement
i got a bit further with this - i copied the system libgit2.so.1.0.0 into the lib/ dir and renamed it to the same as in the package (libgit2.so.0.25.1); and _ithink that avoided the segfault (something i did worked) - the back-trace showed libssh after libgit; so i also replaced the libssh lib - it was the same version (1.0.1) though
so what i found was that it was trying to use SSH to download 'mars-gtk' and could not find any credentials - i changed the setting of "iceberg" in its GUI to prefer HTTPS and that allowed the git clone to start - it chugged away for about a minute looking quite normal, presenting several progress-bar widgets to completion - then it eventually crashed with another segfault - the problem seems to be with libssl now
maybe it would help if i compiled the experimental VM from source - where are the sources for that?
Just in case it helps I've attached the PharoDebug.log for my PrimitiveFailed: primitive #primCallbackReturn in TFCallbackInvocation failed problem. PharoDebug.log
Ken
Thanks. We hope to get some time to come back to this issue.
FWIW, i tried the stable VM release today (pharo64-linux-stable 5.0-202002121043) - it also has the same problem loading the libgit2 library; so the problems identified in this ticket are more likely to be not peculiar to the experimental VM, but general problems with pharo on *nixes - upon launching pharo 90/stable, i get the same error as with the experimental VM (referring to libgit2):
External module not found
replacing libgit2 as i described previously, eliminates that initial error, as with the "latest" VM; but loading a package with metacello, fails immediately with this error:
Instance of Array did not understand #(#SqueakFFIPrims #primitiveCalloutWithArgs 4 13)
Array(Object)>>doesNotUnderstand: #(#SqueakFFIPrims #primitiveCalloutWithArgs 4 13)
Array(ExternalFunction)>>invokeWithArguments:
LGitRemote>>remote_fetch:refspecs:opts:reflog_message:
LGitSafeFFICalloutAPI(FFICalloutAPI)>>function:library:
LGitSafeFFICalloutAPI(FFICalloutAPI)>>function:module:
LGitRemote(LGitExternalObject)>>ffiCallSafely:options:
LGitRemote>>remote_fetch:refspecs:opts:reflog_message:
the call stack for "Array(ExternalFunction)>>invokeWithArguments:" show that 'nil' was passed in
i assume that the pharo-dev mailing list is the more appropriate venue to address these particular problems of this ticket, or the pharo-project/opensmalltalk-vm bug tracker
Hi, sorry for getting late to you. There is an ongoing error on libgit and ubuntu (and fedora) right now :( We hope to solve it soon (I was on it last week, but I didn't finish).
Hi, sorry for getting late to you. There is an ongoing error on libgit and ubuntu (and fedora) right now :( We hope to solve it soon (I was on it last week, but I didn't finish).
Hi Esteban, a Fedora user here. I was able to fix the libgit2 issue by replacing the version shipped with Pharo with a symbolic link to system installed libgit2, i.e.:
yum install libgit2
cd ~/Pharo/vms/80-x64/lib/pharo/5.0-202002121043/
mv libgit2.so libgit2.so~
ln -s /usr/lib64/libgit2.so.26 libgit2.so
Hope this helps.
Pharo is impressive. A huge thank you to all of you working on it!
I thought I'd try again and see if my PrimitiveFailed: primitive #primCallbackReturn in TFCallbackInvocation failed was still occurring. After all, things move on and I hoped I might have better luck now using the latest image and vm. I followed the instructions on the Read Me. Everything goes OK until I try to launch pharo-ui after having installed Mars. Now I get a different error - the VM crashes on an illegal instruction.
I'm on Xubutunu 20.4 64 bit.
I've attached the crash dump. crash.dmp.txt
Ken
I've just tried again to get pharo-mars working on xubuntu. Now it doesn't crash the VM. This time it tells me it cannot find the GTK3 library. But the library is present here: /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
I thought this was supposed to be the correct place. PharoDebug.log
Log attached.
it seems there is a path missing in the list.
libgtk-3.so.0
? there is no libgtk-3.so
?
As you suggested, there was no libgtk-3.so in /usr/lib/x86_64-linux-gnu/ so so I created a symbolic link.
Now I just get the VM crash again. Dump file attached. crashdump.txt
mmm... that's two problems then. First, I need to add libgtk-3.so.0 to the search path (since ubuntu does not seems to add that link by default). Later, I am currently working on several crashes on Linux (since I didn't tested it before there, curiously). I am working now on linux so I hope to fix this issues soon.
Thanks - that's really good to hear
I come from gnome (Vala lang). So i dont know Smalltalk and i know gtk. I thought that I would get used to Smalltalk faster if I tried to write a couple of basic gtk applications. I found this repository, but I don't understand how to use it. Linux Arch.