Hello everyone, I’m sorry it has been a little bit. I have wanted to stay consistent with blog posts but, hey, sometimes you let yourself down. In reality I have been settling into a new job working for the Commonwealth of Massachusetts, which has been both a breath of fresh air and, an adjustment to the “state government” way of doing things lol. I haven’t not been working on uml.cafe, although the commits are slow there is a big performance increase coming to the website, in which some other new important features are sitting. I thought now as I start to see the finish line in sight, I can give an update!
What have we been working on?
Generative API
As much as I want to implement every uml diagram on the frontend and make the website as useful as possible, we have been focusing most of our time on perfecting the API now so that refactoring will be minimal. We have been working on abstracting out the API as much as possible. You see the site as it works now uses an API that just communicates via uml objects, no stereotype level data was communicated through the API, the higher level types would be broken up into uml types and serialized at that level to communicate with the project server.

For example our point type for the diagrams (shown above), which is just an x, y coordinate would have to communicate through all of the following uml messages (feel free to skim them it’s a lot of unnecessary info):
First PUT call with instance of a Point type:
{
put: {
element: {
owningPackage: -SM1Ju-3AyO3TuWpC-5nTCJtIybm,
InstanceSpecification: {
id: XsWeXG8WK7bOY_RDrazJZeraQF3z,
classifiers: [
iJOykGQ4z9anpcPG_cawroBzlZPL
],
slots: [
dh5sKyk5cEuQ2eKaqwwiiUWy49E3,
D2z4k8R0Y-KnsDoMA1Xm-22stZGO
]
}
}
}
}
and this one,
Second PUT call with slot holding x coordinate:
{
put: {
element: {
owner: XsWeXG8WK7bOY_RDrazJZeraQF3z,
Slot: {
id: dh5sKyk5cEuQ2eKaqwwiiUWy49E3,
definigFeature: 0TTKoNWbe13DJ3ou_1KhyS9sE1iU
values: [
7ejYNhXhtZObArSw0vhPlrT7hPGu
]
}
}
}
}
and this one…
Third PUT call with slot holding y coordinate:
{
put: {
element: {
owner: XsWeXG8WK7bOY_RDrazJZeraQF3z,
Slot: {
id: D2z4k8R0Y-KnsDoMA1Xm-22stZGO,
definingFeature: wecoFZpGF2kLOJ0sBneePO3nB47z,
values: [
s2BbWzg1Tfp0prhDuRRaZwqOK3HN
]
}
}
}
}
and…
Fourth PUT call with value of x coordinate:
{
put: {
element: {
owner: dh5sKyk5cEuQ2eKaqwwiiUWy49E3,
LiteralReal: {
id: 7ejYNhXhtZObArSw0vhPlrT7hPGu,
value: 0
}
}
}
}
and finally…
Final PUT call with value of y coordinate:
{
put: {
element: {
owner: XsWeXG8WK7bOY_RDrazJZeraQF3z,
LiteralReal: {
id: XsWeXG8WK7bOY_RDrazJZeraQF3z,
value: 0
}
}
}
}
Ok… that was a lot of messages, as you could probably imagine, with a lot of points that can become a lot. Sensibly instead we would just like to write a shorter message like this:
One PUT call of a Point instance using abstraction:
put: {
manager: HvebRAp8jZVtAqm68hDKpYsPokzl,
element:{
Point: {
id: XsWeXG8WK7bOY_RDrazJZeraQF3z,
x: 0,
y: 0
}
}
}
With the new backend, our API now will work like this! With serializing so much less data, the amount of processing, especially for the client will be drastically reduced. The new API puts all of the uml abstraction into the backend project server, and lets the client communicate using this new lighter API. Generally speaking this new API uses abstraction to reduce the complexity of the crud calls!
egm
You may have noticed in some of my more technical articles I mention a new C++ library we have made and are using called egm. This library abstracts a lot of the general functionality of building an object pool like the one used with uml.cafe in uml-cpp. This next release will be the first stable release using the new egm backend! With egm brings a lot of cool new functionality, like creating new managers easily by just providing types. This has made development of our generative API super easy and bug free!
What’s to come
So we have been working on finishing up this generative API but we are still working out the kinks and testing the edge cases so don’t expect to see this new release for a month or two. But beyond that once we have finished this big update we will be working on expanding uml.cafe to contain more of the uml specification. Specifically we think we will be working on Activity Diagrams, Class Connectivity Diagrams, and Package Diagrams. Feel free to leave any feedback here or preferably my email directly [email protected] if you have any specific requests you would like us to focus on once we broaden our views. Thanks for reading and get ready for this new update and performance upgrade, Em!
Leave a Reply