Jenkov.com
542 subscribers
30 links
This channel contains news from Jenkov.com - such as new and updated tech arcticles, videos, tools etc.
Download Telegram
If you are doing performance optimization in Java, sometimes you will need to write some "microbenchmarks" that measure how fast a given implementation runs. Doing that so that the benchmarks actually measures the implementation fairly - is not easy! The Java Microbenchmark Harness (JMH) can help you out here!

My Java Microbenchmark Harness (JMH) tutorial explains how to use it, and how to write micro benchmarks.

https://jenkov.com/tutorials/java-performance/jmh.html
I have made a video explaining my philsophy of Conscious Software Design in more detail. This is the design philosophy I have adopted over 25+ years of development.

Conscious software design is not focused on specific design techniques or doctrines, but rather on how to "think" about software design in general, meaning how to determine which design techqnue is appropriate in a given situation rather than just applying "clean code" or "hexagonal architecture" blindly.

https://www.youtube.com/watch?v=RrXZQLo1EOw&list=PLL8woMHwr36HWMaOTIiWNf_fYYkZCHPxo&index=4
My Polymorph Data Language is finally "ready" enough for public scrutiny 😊
The work took a detour - so I ended up starting with 2 more parser friendly syntaxes - which are also relatively easy to parse in parallel (for more speed when needed). I have documented the first 2 syntaxes here:

https://jenkov.com/tutorials/polymorph-data/polymorph-data-language.html

I also have a third, more humanly readable / typeable syntax, but I am not sure it should be published. It's not as fast to parse, and hard (impossible?) to parse in parallel... why would we limit ourselves that much - just for a bit of extra readability? ... a bit fewer characters? Hmm... But maybe for small scripts it would be fine ( < 1 KB ) - as the performance difference might be insignificant in some such cases (small scripts parsed less often).

Polymorph Data Language (PDL) is an alternative to JSON, YAML, XML, CSV etc. which provides more features and is this more versatile than these other languages. Features, such as compact object representations, tabular data representations, object tree representations and cyclic object graph support.

PDL can also be converted to its binary counter-part Polymorph Data Encoding (PDE), which is even faster to process, and more compact on the wire / disk. PDE uses an encoding similar to MessagePack and CBOR, but with a few changes to support all the features I wanted (such as efficient tabular data, efficient object trees and cyclic object graphs).

I have spent a looooong time scrutinizing as many aspects of PDL and PDE as I could - to make sure it has good trade-offs in its design - suitable for as many use cases as I could think of.

Now I am ready for your scrutiny too - pointing out all the things I have missed πŸ˜‰ 😊

#Polymorph #PolymorphDataLanguage #PolymorphDataEncoding #PDL #PDE

P.S. I learned a lot about tokenizer speeds in the process too! ... I'll write more about that too, some day 😊
I will slowly start writing about other programming languages than Java too. In the beginning, probably Python and JavaScript as I am already working with these languages too - and in the beginning mostly the basics - the core elements. Then it will evolve from there 😊
Today I have published my updated P2P Network Introduction video 😊

This video introduces multiple different P2P network topologies, where my first video only introduced the ring topology used by Chord, Kademlia, Pastry and Tapestry. The new video also introduces my own P2P network topology which I call the Polymorph Polyring topology 😊 Here is the video:

https://www.youtube.com/watch?v=Vw9ynzuGNSw&list=PLL8woMHwr36F-1h7BE92ynHHOE3zebGpA&index=2
I've published a short tutorial on the core Python data types 😊

https://jenkov.com/tutorials/python/python-data-types.html

As I said, I would begin writing about other programming languages than Java. Python is the first one so far, apart from a bit of JavaScript related tutorials (such as jQuery) 😊
I have just published a video about the Java ForkJoinPool which makes it easy for you to break down a task into smaller subtasks recursively, so they can be executed in parallel - by the ForkJoinPool.

Additionally, the results (if any) of all the subtasks can be joined recursively into a single result again.

https://m.youtube.com/watch?v=aiwuJQt7YJU&list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4&index=26&pp=gAQBiAQB

The Java ForkJoinPool was one of the most requested topics, so I finally gave in and made a video about it 😊
I have published a Python while loop tutorial in my growing Python tutorial. While loops are useful for repeating a block of instructions until a certain condition becomes false.

https://jenkov.com/tutorials/python/python-while.html

Hope you will find it useful! 😊
Over the last few weeks I have been working on a search function for my website jenkov.com ... now it is finally online :-) For now it is hidden in the top menu, but I will probably move it out to make it more visible soon (-ish).

It is still pretty basic - but better than no search function. You can at least find most of the bigger topics now. I have several ideas for improving the search in the future.

I coded it myself, by the way, from scratch. No third party search tools used. It wasn't that difficult, once I had the core idea for how it should work. But let's see how easy it will be to improve it... finding the right balance between the weights of different words in a query seems like something one could spend a lot of time on ... πŸ€” 😊
My book about P2P Networks is in progress, and is available on LeanPub. It has actually been available a while now - I just forgot to announce it 😊 Payment is optional 😊

https://leanpub.com/p2p-networks

I started thinking about writing a book about P2P Networks already 1.5 years ago, and I think I have mentioned it a few times inhere too. Now it is finally becoming "reality" πŸ˜‰ 😊

The book is still under 50% finished, but there is enough material for a reader to be able to start learning the basics about the different P2P network topologies that exists. I will be adding a good deal more to the book in the future!

I have books about other topics planned too, by the way, but I will talk about those once they become "reality" πŸ˜‰
I have updated my Java tutorial / introduction to list the major new features in Java 21 and 22. It now contains a listing of the major features in each Java realease going back to Java 7 😊

https://jenkov.com/tutorials/java/index.html

I have not yet written about all the new features. I probably will at some point when / if I get the time for it 😊 ... but it's useful to have the list at least!
Released a short video about the difference between designing for scalability or performance. In other words, should you solve all capacity problems by throwing hardware at the problem? Or should you try to utilize the hardware you already have, better?

https://www.youtube.com/watch?v=IDAf1D0HIOg

#SoftwareDesign
I have finally "figured out" the core principles of what I call Compositional Software Design - which I have been talking about here from time to time on social media. I have published a tutorial explaining these core principles (link below).

There is still more to say about Compositional Software Design than what is currently in this tutorial - but there is enough to understand the central ideas. More will be added in the future, but will probably mostly be more nuances and details around the core principles.

https://jenkov.com/tutorials/software-design/compositional-software-design.html
I have updated my book about P2P Networks with a chapter about the Kademlia P2P topology, and a few more details about the Chord P2P topology.

The book is still less than 50% finished. I plan to cover more P2P topologies, as well as distributed hashtables and a few other topics. I also plan to add more details about each of the covered P2P topologies - once the basic theories are covered.

https://leanpub.com/p2p-networks
My Polymorph Data Language and Polymorph Data Encoding are getting close to "stable". Therefore I have decided to move their specifications to a GitHub repository - in which I can post descriptions and examples - both in text and via example files etc.

It's not all complete yet. I will keep adding details over the coming weeks.

The repository is located here:

https://github.com/jjenkov/pde-pdl-specification
Help your co-developers grow - by meeting them where they are!

That is the theme of this little video I made, by request from Majid Mostafavi from the Iranian JUG (topic was developer soft skills).

Happy International Developers Day 😊

https://www.youtube.com/watch?v=EpEbT5bYNb4
I have updated my Java tutorial introduction to list what is new in Java 23. The list of new features now lists all the major features in each release, back to Java 7.

https://jenkov.com/tutorials/java/index.html