Wenn sich 10 Personen in der Realität treffen, sitzen nicht immer alle an einem Tisch und reden miteinander. Es gibt immer auch Kleingruppen, die sich spontan entwickeln und wieder trennen und wieder neu fügen.
Klassische Video-Konferenzdienste wie Google Meet, Zoom, Whereby, Webex, Microsoft Teams, Facetime, etc sind spezialisiert auf einen gemeinsamen “Meetingraum”, meist mit einer Galerie von Leuten in Rechtecken, oder einem “zeige nur die Person, die gerade spricht”-Interface auf kleineren Geräten (smartphones).
Es gibt aber auch flexiblere Video-Meeting Dienste, wo man Teilgruppen bilden kann und sich in solchen ein und ausklinken kann, ohne den Dienst zu “verlassen”.
Der scheinbar populärste solcher Dienste heißt “Gather“. Er kombiniert ein retro 2D Videospiel “look & feel” mit eingebetteten Mini-Spielen und klassischen Video-Konferenz Funktionen.
Today we replaced the battery in my wife’s Macbook. The small torx screws were a problem, until I picked up a great little precision screw driver kit from Canada Computers today. Amazing price of $6.99 CAD, no plastic involved, comes in a handy “wallet” style package. Very cool.
Many applications need Undo/Redo functionality. Commonly used implementation patterns are:
Memento Pattern (state snapshots)
When using the Command Pattern one would encapsulate both the change logic and its reversal in command objects. Undo/Redo is implemented by managing stacks of those objects. This approach has its limitations, for example for changes that are unidirectional in nature, like anything involving randomness, encryption, etc.
State snapshots save the full state of the edited data as object graphs or some representation thereof. This is also called the Memento Pattern. It often uses serialization and typically compression of the object graph to reduce memory use and ensure immutable snapshots that can also be stored out-of-process, if desired.
State diffs are based on the idea of State snapshots, but only store the difference between states. This can vastly reduce memory consumption of your Undo/Redo history. It is based on diffing algorithms that compute the delta between two states (or their memento) and allow Undo/Redo by applying the deltas as patches against a given state. A disadvantage is that jumping to a state involves a whole chain of patch applications. But it is a good approach when the user mainly navigates the Undo/Redo history sequentially.
I just installed the C64 emulator VICE on an old Windows laptop and set it up with shortcuts for some old time games that I used to play in the 80s.
My 6 year old son really likes Donald Duck’s Playground where you do odd jobs as Donald to earn cents and dollars to buy playground equipment for your nephews and let them play:
Setting up the game required the download of a zip archive containing a *.d64 image file that can be autostarted by VICE. I created a desktop shortcut to the x64.exe file in VICE with the path of the d64 file as command line parameter. That gives you a shortcut that will start VICE and autostart the game right away. Add the -fullscreen option to start the emulator in fullscreen mode.
I had to enable keyboard mapping for Joystick 2 as shown on the WinVice c64-Wiki.
VICE is a cool emulator that runs on Unix, MS-DOS, Win32, OS/2, BeOS, QNX 4.x, QNX 6.x, Amiga, Syllable or Mac OS.
Games I might try next include Spy vs Spy, Aztec Tomb, Q-Bert and I few others. :)
Recently I was contacted by a well-meaning IT recruiter (name omitted for privacy reasons) and explained why I don’t work on financial trading systems anymore:
I came across your profile in my connections this morning and I was keen to reach out to you.
I can see your current experience working with Java, I am currently working on some Core Java opportunities working on the new development of a real-time trading platform.
This opportunity would allow you to work with the latest Java technologies as well as giving the opportunity to learn Scala.
Please let me know when the best date and time to get hold of you would be so we can discuss?
Is it a trading platform in the financial services sector (i.e. banking)?
If so then I have to politely decline. I have worked on trading systems for a large investment bank in the past. My role was Senior Developer / Technical Lead.
But I decided that I didn’t want to spend my limited life-time helping Wall Street traders or other folks whose only business is to make more money for themselves and their (usually already wealthy) investors.
I currently work on systems that support the Canadian Search & Rescue helicopter fleet. Rescuing people’s lives or health is a cause I feel good about and that motivates me.
Please feel free to contact me again if you come across job openings that contribute to the common good.
Note to self: If you create a Java application and think you need DI but not AOP, then do not automatically reach for containers like Spring, CDI, Guice. Just do all construction and wiring in the standard main method.