jgfoster / Jade

Jade is an Alternative Development Environment (IDE) for GemStone/S that runs on Microsoft Windows
MIT License
6 stars 2 forks source link

Jade/wine 7.x/Ubuntu 22.04 - not useable #66

Open feldti opened 2 years ago

feldti commented 2 years ago

Just as information: I installed new Ubuntu 22.04 LTS, installed wine 7.0 (and later development branche 7.8) and wanted to start Jade - but its not useable. I got an error: "Common control call failed".

It can be tested (once only - after starting Jade) - In the window "Jade Login": switch the tab page from "Logins" to "GCI Activity" and you get the error.

********************* Dolphin Virtual Machine Dump Report **********************

11:57:27, 19.05.2022: Common control call failed

*----> VM Context <----*
Process: {1ED70210:size 439 words, suspended frame 1ED70AD9, priority 5, callbacks 2, FP control 80007, thread 00000000}
Active Method: SessionManager>>logError:
IP: 1AA19C49 (9)
SP: 1ED709EC
BP: 1ED709C0 (477)
ActiveFrame: {1ED709C4: cf 1ED709A5, sp 1ED709DC, bp 1ED709C0, ip 5, JadeSessionManager(SessionManager)>>logError:}
    receiver: a JadeSessionManager
    arg[0]: a RaisedSignal

New Method: VMLibrary>>dump:path:stackDepth:walkbackDepth:
Message Selector: dump:path:stackDepth:walkbackDepth:

*----> Stack Back Trace <----*
{1ED709C4: cf 1ED709A5, sp 1ED709DC, bp 1ED709C0, ip 5, JadeSessionManager(SessionManager)>>logError:}
    receiver: a JadeSessionManager
    arg[0]: a RaisedSignal

{1ED709A4: cf 1ED70985, sp 1ED709B8, bp 1ED709A0, ip 3, JadeSessionManager(SessionManager)>>unhandledException:}
    receiver: a JadeSessionManager
    arg[0]: a RaisedSignal

{1ED70984: cf 1ED70965, sp 1ED70998, bp 1ED70980, ip 3, JadeSessionManager(SessionManager)>>onUnhandledError:}
    receiver: a JadeSessionManager
    arg[0]: a RaisedSignal

{1ED70964: cf 1ED70945, sp 1ED70978, bp 1ED70960, ip 5, Signal>>defaultAction:}
    receiver: a Signal
    arg[0]: a RaisedSignal

{1ED70944: cf 1ED70929, sp 1ED70958, bp 1ED70944, ip 4, RaisedSignal>>defaultAction}
    receiver: a RaisedSignal

{1ED70928: cf 1ED708F5, sp 1ED7093C, bp 1ED70910, ip 55, RaisedSignal(Exception)>>_propagateFrom:}
    receiver: a RaisedSignal
    arg[0]: a ExceptionHandler
    stack temp[0]: nil
    stack temp[1]: a ExceptionHandler
    stack temp[2]: nil
    stack temp[3]: a Process('Main' base 1ED70000* in SessionManager>>logError: sp=00000000 ip=4 list=026A0010)
    stack temp[4]: nil

{1ED708F4: cf 1ED708D5, sp 1ED70908, bp 1ED708F0, ip 6, RaisedSignal(Exception)>>_propagate}
    receiver: a RaisedSignal
    stack temp[0]: nil

{1ED708D4: cf 1ED708B9, sp 1ED708E8, bp 1ED708D4, ip 13, RaisedSignal(Exception)>>signal}
    receiver: a RaisedSignal

{1ED708B8: cf 1ED70895, sp 1ED708CC, bp 1ED708B0, ip 8, RaisedSignal(Exception)>>signal:with:}
    receiver: a RaisedSignal
    arg[0]: nil
    arg[1]: a ListView

{1ED70894: cf 1ED70875, sp 1ED708A8, bp 1ED70890, ip 5, RaisedSignal(Exception)>>signalWith:}
    receiver: a RaisedSignal
    arg[0]: a ListView

{1ED70874: cf 1ED70855, sp 1ED70888, bp 1ED70870, ip 4, Signal>>signalWith:}
    receiver: a Signal
    arg[0]: a ListView

{1ED70854: cf 1ED70839, sp 1ED70868, bp 1ED70854, ip 12, ListView(ControlView)>>errorInCommonControlCall}
    receiver: a ListView

{1ED70838: cf 1ED70819, sp 1ED7084C, bp 1ED70834, ip 15, ListView>>lvmGetOrigin}
    receiver: a ListView
    stack temp[0]: a POINTL

{1ED70818: cf 1ED707E9, sp 1ED7082C, bp 1ED70804, ip 26, ListView>>onPositionChanged:}
    receiver: a ListView
    arg[0]: a PositionEvent
    stack temp[0]: a Rectangle
    stack temp[1]: 682
    stack temp[2]: 12
    stack temp[3]: nil

{1ED707E8: cf 1ED707C9, sp 1ED707FC, bp 1ED707E4, ip 4, ListPresenter(Presenter)>>onPositionChanged:}
    receiver: a ListPresenter
    arg[0]: a PositionEvent

{1ED707C8: cf 1ED707A1, sp 1ED707DC, bp 1ED707BC, ip 12, ListView(View)>>wmWindowPosChanged:wParam:lParam:}
    receiver: a ListView
    arg[0]: 71
    arg[1]: 0
    arg[2]: a LargeInteger(00000000 f778de44 )

{1ED707A0: cf 1ED70779, sp 1ED707B4, bp 1ED70794, ip 6, ListView(ControlView)>>wmWindowPosChanged:wParam:lParam:}
    receiver: a ListView
    arg[0]: 71
    arg[1]: 0
    arg[2]: a LargeInteger(00000000 f778de44 )

{1ED70778: cf 1ED70749, sp 1ED7078C, bp 1ED70764, ip 23, ListView(View)>>dispatchMessage:wParam:lParam:}
    receiver: a ListView
    arg[0]: 71
    arg[1]: 0
    arg[2]: a LargeInteger(00000000 f778de44 )
    stack temp[0]: nil
    stack temp[1]: wmWindowPosChanged:wParam:lParam:

{1ED70748: cf 1ED70715, sp 1ED7075C, bp 1ED70738, ip 69, [] in InputState>>wndProc:message:wParam:lParam:cookie:}
    receiver: nil

{1ED70714: cf 1ED706ED, sp 1ED70728, bp 1ED70710, ip 18, BlockClosure>>ifCurtailed:}
    receiver: [] @ 0 in nil
    arg[0]: [] @ 79 in InputState>>wndProc:message:wParam:lParam:cookie:

{1ED706EC: cf 1ED706B1, sp 1ED70708, bp 1ED706D4, ip 84, GuiInputState(InputState)>>wndProc:message:wParam:lParam:cookie:}
    receiver: a GuiInputState
    arg[0]: 65786
    arg[1]: 71
    arg[2]: 0
    arg[3]: a LargeInteger(00000000 f778de44 )
    arg[4]: 4387708
    stack temp[0]: a ListView

{1ED706B0: cf 1ED70689, sp 1ED706CC, bp 1ED706A4, ip 93, LayoutContext>>deferWindowPositions:}
    receiver: a LayoutContext
    arg[0]: a OrderedCollection
    stack temp[0]: 8
    stack temp[1]: a UserLibrary
    env temp[0]: a ExternalHandle(00020116)

{1ED70688: cf 1ED70665, sp 1ED7069C, bp 1ED70680, ip 67, LayoutContext>>repositionSubViewsOf:}
    receiver: a LayoutContext
    arg[0]: a ContainerView
    stack temp[0]: a OrderedCollection

{1ED70664: cf 1ED70641, sp 1ED70678, bp 1ED7065C, ip 15, [] in LayoutContext>>repositionSubViewsOf:}
    receiver: a LayoutContext
    arg[0]: a ContainerView

{1ED70640: cf 1ED70615, sp 1ED70654, bp 1ED70630, ip 22, CardContainer(View)>>subViewsDo:}
    receiver: a CardContainer
    arg[0]: [] @ 13 in LayoutContext>>repositionSubViewsOf:
    stack temp[0]: a ExternalHandle(000100EA)
    stack temp[1]: a UserLibrary
    stack temp[2]: a ContainerView

{1ED70614: cf 1ED705F1, sp 1ED70628, bp 1ED7060C, ip 64, LayoutContext>>repositionSubViewsOf:}
    receiver: a LayoutContext
    arg[0]: a CardContainer
    stack temp[0]: a OrderedCollection

{1ED705F0: cf 1ED705CD, sp 1ED70604, bp 1ED705E8, ip 15, [] in LayoutContext>>repositionSubViewsOf:}
    receiver: a LayoutContext
    arg[0]: a CardContainer

{1ED705CC: cf 1ED705A1, sp 1ED705E0, bp 1ED705BC, ip 22, ShellView(View)>>subViewsDo:}
    receiver: a ShellView
    arg[0]: [] @ 13 in LayoutContext>>repositionSubViewsOf:
    stack temp[0]: a ExternalHandle(00020086)
    stack temp[1]: a UserLibrary
    stack temp[2]: a CardContainer

{1ED705A0: cf 1ED7057D, sp 1ED705B4, bp 1ED70598, ip 64, LayoutContext>>repositionSubViewsOf:}
    receiver: a LayoutContext
    arg[0]: a ShellView
    stack temp[0]: a OrderedCollection

{1ED7057C: cf 1ED70561, sp 1ED70590, bp 1ED7057C, ip 8, LayoutContext>>apply}
    receiver: a LayoutContext

{1ED70560: cf 1ED70541, sp 1ED70574, bp 1ED7055C, ip 27, [] in View>>deferLayout:}
    receiver: nil

{1ED70540: cf 1ED7051D, sp 1ED70554, bp 1ED70538, ip 6, BlockClosure>>ensure:}
    receiver: [] @ 13 in View>>deferLayout:
    arg[0]: [] @ 25 in View>>deferLayout:
    stack temp[0]: a ShellView

{1ED7051C: cf 1ED704F9, sp 1ED70530, bp 1ED70514, ip 29, ShellView(View)>>deferLayout:}
    receiver: a ShellView
    arg[0]: [] @ 12 in View>>validateLayout
    stack temp[0]: a LayoutContext

{1ED704F8: cf 1ED704DD, sp 1ED7050C, bp 1ED704F8, ip 16, ShellView(View)>>validateLayout}
    receiver: a ShellView

{1ED704DC: cf 1ED704BD, sp 1ED704F0, bp 1ED704D8, ip 13, ShellView(View)>>ensureLayoutValid}
    receiver: a ShellView
    stack temp[0]: a DesktopView

{1ED704BC: cf 1ED7049D, sp 1ED704D0, bp 1ED704B8, ip 10, CardContainer(View)>>ensureLayoutValid}
    receiver: a CardContainer
    stack temp[0]: a ShellView

{1ED7049C: cf 1ED70475, sp 1ED704B0, bp 1ED70490, ip 2, CardContainer(View)>>wmPaint:wParam:lParam:}
    receiver: a CardContainer
    arg[0]: 15
    arg[1]: 0
    arg[2]: 0

{1ED70474: cf 1ED70445, sp 1ED70488, bp 1ED70460, ip 23, CardContainer(View)>>dispatchMessage:wParam:lParam:}
    receiver: a CardContainer
    arg[0]: 15
    arg[1]: 0
    arg[2]: 0
    stack temp[0]: nil
    stack temp[1]: wmPaint:wParam:lParam:

{1ED70444: cf 1ED70411, sp 1ED70458, bp 1ED70434, ip 69, [] in InputState>>wndProc:message:wParam:lParam:cookie:}
    receiver: nil

{1ED70410: cf 1ED703E9, sp 1ED70424, bp 1ED7040C, ip 18, BlockClosure>>ifCurtailed:}
    receiver: [] @ 0 in nil
    arg[0]: [] @ 79 in InputState>>wndProc:message:wParam:lParam:cookie:

{1ED703E8: cf 1ED703AD, sp 1ED70404, bp 1ED703D0, ip 84, GuiInputState(InputState)>>wndProc:message:wParam:lParam:cookie:}
    receiver: a GuiInputState
    arg[0]: 131206
    arg[1]: 15
    arg[2]: 0
    arg[3]: 0
    arg[4]: 4389148
    stack temp[0]: a CardContainer

{1ED703AC: cf 1ED7038D, sp 1ED703C8, bp 1ED703A8, ip 28, GuiInputState(InputState)>>pumpMessage:}
    receiver: a GuiInputState
    arg[0]: a MSG

{1ED7038C: cf 1ED70361, sp 1ED703A0, bp 1ED7037C, ip 18, GuiInputState(InputState)>>loopWhile:}
    receiver: a GuiInputState
    arg[0]: [] @ 9 in InputState>>mainLoop
    stack temp[0]: a MSG
    stack temp[1]: true
    stack temp[2]: [] @ 9 in SessionManager>>forkMain

{1ED70360: cf 1ED70345, sp 1ED70374, bp 1ED70360, ip 15, GuiInputState(InputState)>>mainLoop}
    receiver: a GuiInputState

{1ED70344: cf 1ED70329, sp 1ED70358, bp 1ED70344, ip 14, [] in GuiInputState(InputState)>>forkMain}
    receiver: a GuiInputState

{1ED70328: cf 1ED7030D, sp 1ED7033C, bp 1ED70328, ip 13, ExceptionHandler(ExceptionHandlerAbstract)>>markAndTry}
    receiver: a ExceptionHandler

{1ED7030C: cf 1ED702E5, sp 1ED70320, bp 1ED70308, ip 22, [] in ExceptionHandler(ExceptionHandlerAbstract)>>try:}
    receiver: a ExceptionHandler

{1ED702E4: cf 1ED702C5, sp 1ED702F8, bp 1ED702E0, ip 18, BlockClosure>>ifCurtailed:}
    receiver: [] @ 0 in nil
    arg[0]: [] @ 39 in ExceptionHandlerAbstract>>try:

{1ED702C4: cf 1ED702A1, sp 1ED702D8, bp 1ED702BC, ip 3, BlockClosure>>ensure:}
    receiver: [] @ 17 in ExceptionHandlerAbstract>>try:
    arg[0]: [] @ 39 in ExceptionHandlerAbstract>>try:
    stack temp[0]: nil

{1ED702A0: cf 1ED70279, sp 1ED702B4, bp 1ED70294, ip 44, ExceptionHandler(ExceptionHandlerAbstract)>>try:}
    receiver: a ExceptionHandler
    arg[0]: [] @ 10 in InputState>>forkMain
    stack temp[0]: nil
    stack temp[1]: a Process('Main' base 1ED70000* in SessionManager>>logError: sp=00000000 ip=4 list=026A0010)
    env temp[0]: nil

{1ED70278: cf 1ED70255, sp 1ED7028C, bp 1ED70270, ip 7, BlockClosure>>on:do:}
    receiver: [] @ 10 in InputState>>forkMain
    arg[0]: ProcessTermination
    arg[1]: [] @ 13 in BlockClosure>>newProcess:

{1ED70254: cf 00000001, sp 1ED70268, bp 1ED70254, ip 17, [] in BlockClosure>>newProcess:}
    receiver: [] @ 10 in InputState>>forkMain

<Bottom of stack>

********************************* End of dump **********************************
jgfoster commented 2 years ago

See also #55.

feldti commented 2 years ago

Do you see both errors in any way related to each other ?

jgfoster commented 2 years ago

I don't know enough to say how they are related. The error report is different, but they share the fact that recent updates to Dolphin use Windows APIs that are not properly supported by Wine. To debug this will require diving into Dolphin and Wine, and then reporting bugs to the Wine team. I'm torn about how much effort to put into Wine support when I'm investigating alternatives that would not require Windows.

feldti commented 2 years ago

What are the possible alternatives "not require Windows"? Jade under Wine is very useful - because one can develop under Linux (with the Gemstone/Server) without starting a VM running Windows ONLY to use Jade (as I have to do now).

jgfoster commented 2 years ago

I recognize and appreciate the value of Jade under Wine (macOS is my primary environment and I keep a Windows VM around primarily to run Jade). Unfortunately, these problems are typically Wine bugs discovered because of changes to Dolphin—and debugging Wine is far out of my expertise. I can spend a lot of time on it and not make much progress. Even if I were to come up with a simple reproducible case, someone would still need to find and fix the problem in Wine then we would wait for a new release of Wine. I've spent time on this without progress.

As to alternatives, I have been considering a couple alternatives. First is building a web-based IDE that looks familiar to Smalltalk developers (https://github.com/jgfoster/Jade/tree/flutter). Second is to use VS Code since it is familiar to non-Smalltalk developers (https://github.com/jgfoster/vscode-gemstone/tree/web-sockets). Comments are welcome!

feldti commented 2 years ago

Hello James,

amazing, what you already tried out (in different technologies) ! I did not get the VisualCode example running - but much applause for that work !

By the way - in my Gemstone development process I consider changing my development path: in prior and current development model I tried to add more and more specific Smalltalk code (mostly from Squeak) and do all stuff in Smalltalk within Gemstone. I think about stopping that idea - I actually consider to work with a very basic Gemstone/S system and do most of the stuff externally by other applications written in other languages - like http processing, event/messaging system etc ....

So, one way would be to use 0MQ communication library to communicate (from Gemstone/S) with those external processes (candidate technology is .NET6 and C#). Perhaps I would use the PostgreSQL library from Norm and perhaps a RabbitMQ library he considers to write. So, mainly three additional Smalltalk packages I would consider.

Have you ever thought about that ?

Marten

jgfoster commented 2 years ago

Thanks for the comments. There is certainly a trade-off between doing things inside GemStone vs. outside. On the one hand, it is nice to reduce the number of pieces (so do more in GemStone) and on the other hand it is nice to use other things if they solve a problem and reduce the amount of code you need to write.

I typically use something like Nginx as a front-end to serve static pages and handle HTTPS. But unless there already is an external PostgreSQL database I wouldn't add one. And I haven't yet run into a case where I wanted to use an external message bus (though I recognize that others might have that need).

dmrq70 commented 1 year ago

I'm also getting a 'division by zero 14.0' error when trying to log in.

(Ubuntu 20.04.4 LTS / Wine 5.0-3ubuntu1)

feldti commented 1 year ago

I would not expect to get a reliable solution under Wine with any Dolphin stuff - so I always use a VM only with Windows and Jade to do my development ...

Marten