Hi, my name is Andy Bulka and I am a Python and Nodejs/Electron software developer.? I've also recently discovered Flutter, which is likely going to dominate a large part of software development in the future.

I like to think about how to better understand complex software, and the role that visualisation technologies (diagrams) and UI's and snippets can play in making programmers more effective.

I went through a design patterns?phase and hence there are a few patterns on this site. My interest in UML has evolved into inventing a diagramming methodology called?Literate Code Maps?(see below).

UML (Unified Modelling Language) diagramming has fallen out of favour in the last decade and now tends to only get used in the most basic of ways.? Sketches on whiteboards to commuicate class relationships or code execution sequences. Or simple diagrams in documentation and designs.? Nobody uses the complex notations of UML 2, because digramming cannot keep up with the myriad programming techniques and paradigms of 2019 - code is simply not reducible to visual information.? And even if it was, you get too much visual clutter.? UML is best kept simple to communicate specific aspects of code and architecture.? That's where UML shines and still has a role to play.

Update: I've invented a diagramming methodology called Literate Code Maps which improve upon some aspects of UML - actually they are quite different and arguably more useful than UML for understanding complex source code projects. I've been using this notation for many years, and it might help you in your projects.

Design Patterns are now part of everyday programmer vernacular.? They are often subsumed into languages at the level of syntax - iterators, observers etc. are built in to most languages.? And into libraries and techniques.? For example the ajax pattern, the asyc await pattern - there are so many 'design patterns' now that talking about the original GOF design patterns is rather archaic.? There is a whole world of design patterns now.? People don't tend to write them up and talk about them in an abstract way anymore - patterns are just built and used.

I have written several design patterns that you can use in your projects.? For example why not implement Relationship Manager in your next project and never worry about wiring pointers, backpointers and one-to many-relationships in your code again! ?I also write about how to use various MVC based architectural patterns in your projects.

This website also holds my blog on UML and pattern based software development.? These blog entries are often based on presentations that I have given to live audiences at various programmer enthusiast user groups or conferences.

The Patterns Movement

Capturing hard-won software design experience in the form of design patterns and architectural patterns is a noble cause that everyone can contribute to.? You can contribute by writing patterns and maybe even coming to a Plop patterns conference. Basically when you see a software development technique a few times, and see that it isn't yet documented - write it up in Pattern format and give it a name!? A pattern is more than just a "tip" or technique though - a pattern represents an abstract idea - that can be implemented in various ways depending on your circumstances.

There are a couple of things I would like to see happen in the patterns world.

First, it would be nice if there was a single, authoritative repository of patterns. Yes an attempt has been made - a catalog book and and various websites - but nothing authoratative.? I'm starting a list of links here.

Secondly, it would be nice to have deep design pattern support in UML within all our favourite IDE's.? For example Netbeans has it all - coding, form design, UML and design pattern support - albiet not as integrated as it could be and not as polished as it could be. Update: Unfortunately Netbeans seems to have dropped UML support in recent builds?

If IDE's are not your cup of tea, then how about this: source code should have comment markers indicating where the patterns are, so that a reverse engineering tool can visualise not only the UML but also where the patterns are. ?My own UML tool PyNSource will have such a feature - est. June 2011.

Further advancements are arguably executable UML and even the possibility of building software without code.? I muse a bit about this in my blog entry on software visualisation and my paper on design pattern tools.?

Patterns at all levels need to be core visual building blocks of IDE's, or at the very least, extractable from source code into some visual UML tool - rather than being design ghosts that float around, implicit, in our source code.

My Design Patterns

Relationship Manager Pattern

A central mediating class which records all the one-to-one, one-to-many and many-to-many relationships between a group of selected classes. Classes that use a Relationship Manager to implement their…

Model Gui Mediator Pattern

The MGM pattern is a variation of MVC (model view controller) or MVP (Model View Presenter) but takes into account the use of modern off the shelf GUI controls. A MGM object displays a portion of a…

Transformation Interface Pattern

The Transformation Interface is both a design pattern and an architectural pattern. It describes an interface or layer, which offers services to transform an object into another format and back agai…

Design Pattern Automation

As design patterns become more mainstream, various IDE's (Integrated Development Environments) and UML modelling software environments have begun to introduce support for design patterns. For example,…

Talks and Articles

See my blog page for details.

Apps and Websites released this year - 2019


UML visualisation for Git repositories (website app).

Understand code quickly:?Automatically generate UML class diagrams from source code residing in git repositories.?Diagrams automatically update when you push code using git.

point and click

Visit GitUML now, create a free account and begin creating UML diagrams and documentation.


UML tool for Python (Desktop App for Mac, Window, Linux) - brand new version.?

Zoom in and out. PlantUML view. Auto Layout. Import Python 3 code.

Version 1.71?- new for 2019

Pynsource hero

Visit the brand new dedicated website pynsource.com.

Buy the Pro Edition for $20 to unlock the zoom feature.? Community Edition is fully functional and open source - check out the github repository.? Donate to support this project (donate link coming soon).

My Apps and Websites - 2018


Print42 is a log tailing GUI program which optionally echoes log lines to thermal printer tape. Its like a modern thermal printer version of a ticker tape for tailing log files. It features display font size options, search and filtering. You can also annotate the output with text fragments that you type in - or screenshots that you paste in.?

The video is 13 minutes long and covers the basic use cases, history of the project etc.

As well as physically printing from Free42, the Print42 software can also be used to print HP Prime screenshots (from either the emulator or real HP Prime hardware via the HP connectivity kit).

Outside the world of calculators, Print42 can be used to 'tail' log files (programmers take note) and to print graphic snippets from the web. Useful if you want to rapidly print information to stuff into your pocket or to study and annotate printouts of complex information, at your desk.

If you are looking for a useful, fun new gadget, you might want to consider buying an Epson thermal printer and trying Print42. However you can also use Print42 with your regular desktop printer, for free.?

The website for downloads and further information is?www.print42.atug.com

Python to RPN

I am pleased to announce the Python to HP42S RPN converter website is online.

[Image: python_rpn_ui_01.png?raw=1]

You write code in a high level structured language (which happens to be Python 3 syntax), hit a button and RPN is generated.?

[Image: python_rpn_ui_02small.png?raw=1]

You then paste the RPN into Free42 or transfer it to your DM42 (by?creating a raw) - and it runs.

  1. Examples:?http://www.pyrpn.atug.com/examples
  2. User Guide:?http://www.pyrpn.atug.com/help
  3. Canvas for 42S Simulator:?http://www.pyrpn.atug.com/canvas
  4. List of HP42S Commands Supported Reference:?http://www.pyrpn.atug.com/cmds

The converter supports core Python syntax (which is very powerful), but does not implement the built in Python libraries that you would get in desktop Python. You have to rely on the ability to call HP42S commands from Python to do your work - which of course you can do. Specifically, it has the following capabilities:

  1. Variables
  2. Functions, Multiple functions, nested functions
  3. Parameter passing, receiving return values, multiple return values
  4. if elif else
  5. Comparison operators == != > < >= <=
  6. Booleans True, False and operators not or and
  7. for loops, range(), for..in iteration through lists and dictionary keys
  8. while loops, while...else
  9. continue and break operations in for loops and while loops
  10. Lists and Dictionaries (basic operations only).
  11. Matrices, Pythonic matrix element access syntax [row,col]
  12. NumPy compatible slicing syntax for sub-matrices
  13. Complex numbers using either 42S or Python native syntax
  14. Expressions involving nested brackets
  15. assert
  16. Testing and clearing of flags
  17. Access most HP42S commands as function calls e.g. FIX(2)
  18. Some enhanced functions to make life easier e.g. varmenu() automates and simplifies the generation of MVAR based code.

My Other Apps and Consulting Services

If you would like me to run a design patterns course or consult on your next software design, please check out my?product?page.? There is also an open source?Python UML tool?you might be interested in, plus references to products I have developed over the years esp. the worldclass argumentation visualisation software Rationale and bCisive.

My Medium Articles - 2018 - 2020

I've been publishing a lot on Medium recently. Why? Because the articles seems to get more widely read, and the Medium editor is so simple and produces beautifully formatted articles.


Building a deployable Python-Electron App

Building a normal, deployable application for Mac or Windows, using Python 3 is hard. There is nothing like Visual Studio or Delphi (remember that?) for Python where you can drag and drop to design a GUI, press a button and get an .exe or .app to give people. Sad. The closest you can get is to follow a long recipe of steps - which I outline here.


Async/await for wxPython

Python 3 GUI apps with asynchronous functionality


Getting Python and wxPython apps into the Ubuntu app store

Have you ever dreamt of getting your own apps in the Ubuntu app store? Here?s how.


Django View logging is back-the-front

How the order of view request log messages in Django apps might be confusing, and how to fix it.


TodoMVC implemented using traditional OO, Controllers and Events.

TodoMVC implemented in a classic Object Oriented way -?which includes running code you can run in your browser.


TodoMVC implemented using a game architecture ? ECS.

Building traditional GUIs with the Entity Component System


Coming soon

Literate Code Maps

Coming soon: A Medium article - for now this is a GitHub page. I've invented a diagramming methodology called Literate Code Maps which improve upon some aspects of UML - actually they are quite different and arguably more useful than UML for understanding complex source code projects. I've been using this notation for many years, and it might help you in your projects.

GitHub Projects

A pair of extensions for Visual Studio Code

Snippets Explorer

Visual Studio Code extension which displays all available language snippets in a TreeView



Snippet Creator

This extension helps to automate snippet creation. Select the code you want to create snippet from and use command?Create Snippet?from the command palette or your custom keybind.


Brew Moments

I've recently learned mobile app development using Flutter.? Here is my first app.


visit google playstore page