Why would someone organize a conference?

Every morning I wake up to this: Screen Shot 2015-05-20 at 23.09.29and this: Screen Shot 2015-05-20 at 22.21.30. Every day I wage a fruitless war to go down to zero on both fronts and I fail miserably. But I'm getting better.

Recently we managed to "inject" a company as a gold sponsor after all the deadlines have passed. We did it in 20 minutes after 6 phone calls.

The server firewall failed. Someone fixed it on a Saturday morning.

Our invoicing architecture after so many patches fails to follow all the complex branches of the process of issuing an invoice. We somehow manage to still use it fruitfully. And I have big plans for rewriting most of it.

ePay integration was a pain it the ass. Very bad documentation, different undocumented services, support could be better. But it was fun encrypting and decrypting a ton of messages until we stabilized it. We even "support" credit cards (in a way).

Our Turkish speaker delayed his visa application. I called the Bulgarian embassy in Ankara. They were nice, didn't forget to call me back. Actually they kept me updated the whole time. And they issued the visa in less than a day. So kudos to them.

We fight less, work more, plan better, became team players and learned a lot. Organizing a conference is fun.

Go buy a ticket at jprime.io.

Read More

Interview with Dr. Heinz Kabutz



Dr. Heinz Kabutz Is one on the greatest JVM performance gurus, author of the famous Java Specialists news letter and our great friend! We are happy to make this interview with him just before the conference #jPrime2019!

Hello Heinz!
You are our always awaited guest! What do you like about BGJUG and jPrime?

Technical brilliance and Balkan hospitality for a very good price. jPrime is establishing itself as the top independent Java conference in our region. I believe I gave the first talk at the first edition of jPrime. Last year was very frustrating, as I was thwarted by the air traffic controller strike in Athens. The only flight that was cancelled was Athens->Sofia. Let's hope that this year is better.

Parallel programming is always hard. Although all of the hardware is parallel, seems like a lot of developers still just don’t utilize it. Is there a way to change this?

Well the good news is that our hardware is already running in parallel without us having to do anything. Pipelining and predictive execution FTW. But we can and should take advantage of the many cores that we have available nowadays. Two great tools are CompletableFuture and Fork/Join. And a new one is Project Loom with Fibers.

Kotlin is seriously pushing on the coroutines. Other languages and platforms have them too. Java is experimenting with them too in project Loom. What is your opinion on this approach?

I'm very hopeful about Project Loom. A couple of years ago at jPrime, I showed how the ManagedBlocker can be used to improve CPU utilization when combined with the Fork/Join pool. Currently there are only a few classes in the JDK that support ManagedBlocker. The two most famous are Phaser and CompletableFuture. This means that when we block with either of these constructs, the ForkJoinPool can create additional threads to pick up the slack. There was talk about including this functionality at the highest level of concurrency, being the AbstractQueuedSynchronizer. However, we are instead moving to Project Loom with Fibers. These support continuations, basically saving the stack of a method call half-way and then allowing it to be restored later. We can create millions of fibers to be run "concurrently" by our system. In reality these would still be executed by default in the common ForkJoinPool. However when a thread is forced to wait, for example when blocking on IO or waiting on an AbstractQueuedSynchronizer, then the fiber gets swapped out and another fiber swapped in. It isn't magic, and please don't believe the smoke and mirror demos that show millions of "sleeps" happening at the same time. We all know that sleeping does not use CPU. One thing I am concerned about is that Fibers do not give us a good set of idioms that we need to follow. With CompletableFuture, we have an established path to follow if we want to use it for writing concurrent or parallel code. But with fibers we can code as if we were using Threads, but then instead spin the code off to be executed as fibers. This can cause some very funky issues with memory staying reachable for much longer than we intended. Buyer's beware.

Can you tell us a bit more about your recent 15000 pushups initiative? Do you plan to do something similar in future?.

In our programming world, we sit far too much. Very few of us have a good excuse. We are, for the most, just plain lazy. I'm the king of laziness. In high school, I used to weasel my way out of any physical activity by claiming to have to do urgent "computer work" for the school. Back in the 80s, no one know what that meant and so you could bamboozle the headmaster. I started running five years ago. I now run every day. I am writing this whilst walking at a treadmill desk. As a young man, I did thousands of pushups in preparation for the South African army. By the time I finished university, Nelson Mandela was in charge and there was no more army conscription. So all those pushups were in vain. However, it did give me good upper body strength. After a long break, I decided to get back into it. But what's the fun of doing this alone? I opened up the challenge to the world. Do 1000 push-ups in October, 2000 in November, all the way until 5000 in February. Every month was hard, and I'm not sure which the worst was. My February started badly as I had a bad cold and had to rest a few days. To catch up, I did 1000 in a single day. By the end of the challenge I looked like Bluto, Popeye's enemy.
All those who completed 15000 push-ups got a big prize to celebrate their achievement, over $15k of prized. I did not tell them up-front that this would happen, as it is just too easy to cheat with over reporting push-ups.
I had another challenge last year where we had to run one mile outside for 40 days in a row, GPS tracked. That was fun too.
My next challenge will probably be a diet experiment. I tried it on myself a few months ago with great success. I will tell you in person when I see you in May at jPrime.

Thank you very much!
See you in Sofia very soon (if there are no strikes:) )!
Read More

Interview with Mark Heckler



Brother Mark Heckler is one of the world's most passionate Spring enthusiasts. We are really happy to have him here in Sofia for the first time! But before that please enjoy a small interview with him:

Hello Mark! It is so great that you will come to Sofia very soon! Please, tell us about yourself.

I'm just this guy, you know? :)
My bio basically says this: Mark is a Professional Problem Solver and Spring Developer & Advocate, conference speaker, published author, & Java Champion focusing upon developing innovative production-ready software at velocity.
Which means that I love to solve problems, write code, deliver working software, and talk about it. That summarizes it pretty well, I guess. :)

Spring platform is often a pioneer in many Java/JVM technologies, which become de-facto standards with time. How do you achieve this?

Spring is both very innovative and very pragmatic, and that's because everyone working with Spring is both inquisitive and immensely practical. We also, as a general rule, are very open to collaboration and community. That results in a lot of great ideas and code being mulled, written, refined, and put to work in a pretty tight loop. And as you know, if good options exist to solve pressing problems, those options are widely adopted and eventually standardized upon, officially and/or unofficially. So I think it's just cause & effect. :)

Spring is putting huge effort in Kotlin language adoption. Why was that decision made? What makes Kotlin a good alternative to Java?

It wasn't a decision made lightly. Kotlin is a great language with much to recommend it: conciseness, null safety, elegance and expressiveness...and perhaps the aspect that makes it easiest to adopt, frictionless interoperability with Java. It's not an either/or choice! You can easily integrate Kotlin code with Java within a single application, making it easy to try out and easy to migrate existing Java applications, if you choose to do so...or of course, to write new ones.
Kotlin also provides new capabilities sooner than Java. Combine this with the capability to extend existing classes and to create DSLs and you have a very dynamic, modern, and powerful language.
Kotlin won't replace Java in many circumstances, but it's an excellent companion language that is a joy to use. It's great to have (great) choices!

You are an unstoppable traveller. How many days are you away from home? How do you spend your free time?

If you ask my wife, I'm never home! Seriously though, some times during the year are more hectic than others. It's safe to say I'm away more than I'm home, and some months the "home" days can be counted on one hand. Balance is...elusive. :D
For better or worse, many of my hobbies center around tech as well. I enjoy programming small devices for IoT applications, including robotics and drones. I'm also an occasional videogamer and musician, having played classical trumpet and guitar/bass in a past life. And of course, I'm always on the hunt for a good cup of coffee.

Thank you very much!

Thanks for inviting me, very glad I can finally be a part of the legendary jPrime!!!

Read More

jPrime 2018 videos

The videos as always are in the Bulgarian Java User Group's youtube channel.
Read More

Interview with Rafael Winterhalter



1. In a few words, how was Byte Buddy born?
Byte Buddy was born out of my own need for another open source library which needed to create proxies in a slightly different way as the then existing solutions offered. As so often, I started out with a simple prototype that solved this exact need but moved it to its own library later which is now known as Byte Buddy and which is of course much richer in features than what I originally intended.

2. Were you always interested in low level Java (bytecode and its manipulation), or do you also like doing something else with Java?
I was educated in (theoretical) economics and had to run a lot of simulations as part of my studies. In modern economics, we try to emulate markets with models that can no longer be solved numerically but are simulated instead. These simulations often run over days and it is therefore crucial to write efficient code that quickly drives you down the rabbit hole. When I first worked with Java, looking into the JVM at this level was just a natural step.

3. ByteBuddy is really vastly used across different tools and frameworks. Were there situations, when you wanted to introduce a really cool new feature, but it was a breaking change, and the impact would have been too big?
In the beginning, I would know all users and every time I released a breaking change, I would simply send pull requests along with the update for all of them. Of course, this is no longer possible. Fortunately, the user base of Byte Buddy only grew two years after the first beta version was released. As things stand, I am very careful with changes and have a lot of regression tests. And thanks to the modular API, I can often add features without even touching existing code.

4. How do you handle this kind of situation?
It is a case to case decision. If a feature for example only affects Java agents, it is often a safe change as users need to isolate their copy of Byte Buddy anyways, via shading or a separate class loader. Agents do not control the class path and cannot assume that their version of Byte Buddy would not be superseded with an older version that was already added to the JVM. But if an API affects a proxy generator, I would not even consider touching it. If I ever wanted to do an overhaul, a theoretical Byte Buddy v2. would get a different group id and namespace, otherwise this would be too disturbing for the ecosystem.

Thank you very much, Rafael! See you soon in Sofia!

Read More

Interview with Gerrit Grunwald



Gerrit Grunwald a JavaOne rockstar and Java Champion is again with us at JPrime Conference in Sofia,!! We have the pleasure to make a short interview with him.


This pandemic was awful in many aspects. One small aspect of it is that travelling was so restricted, that all offline conferences were stopped, and the world moved to online. Did you easily switch to online presentations? What is better? How does it feel to be back to in person events?

Switching to online was not a big difference to me, I did that already before the pandemic. But I will be honest with you, I’m not a big fan of it. You really miss the connection with the people. So in-person events are still my favourite and I avoid online events whenever I can :)

One of your talks is Java for Desktop is still not dead. Did this somehow change nowadays?

I know that there are lots of desktop apps out there which are based on Java and I think this won’t change in the near future. Java is big in the industry and it comes with thousands of free libraries. It’s simply very convenient to make use of this ecosystem. And for big companies it’s easy to find Java developers.

You are also a big expert in IoT. What are the newest revolutions in it and where is Java there?

In IoT I think the place for Java is of course on the server side but also on so called Gateways that are connected the edge devices. Also message brokers for mqtt are anplace where Java has it’s place.

Recently there are many new distributions and forks of JVM. What was the reason for this to happen? Will this change in future?

You are right, there are around 15-20 OpenJDK distributions with different flavors. Most of them are builds of OpenJDK and some of them come with special features related to garbage collections, compilers etc. Some are optimised for cloud services, others are optimised for architectures like ARM. I think we won’t see an ongoing growth in new distributions and the future will tell if there is a place for all of those distributions. We also saw some coming which are already not supported anymore. In addition to this we also have different builds of GraalVM which is the new kid on the block. It has some interesting features like an Java based compiler that replaces C2 and the ability to create native images. In short I think there is a bright future ahead for us developers with lot’s of choice…which is a good thing :) .

Thank you very much!
See you in Sofia very tomorrow!
Read More

Sponsors/Tickets/Questions

conference@jprime.io

Contact us

+359 887 749 325