<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Milen Dyankov's Website</title>
        <link>https://MilenDyankov.com/blog</link>
        <description>Latest blog posts and articles</description>
        <lastBuildDate>Sun, 08 Mar 2026 17:36:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>© 2025 Milen Dyankov</copyright>
        <item>
            <title><![CDATA[Tagging the latest version of previously tagged files in CVS ]]></title>
            <link>/blog/2006/02/tagging_the_latest_version_of_previously_tagged_files_in_cvs</link>
            <guid isPermaLink="false">posts/2006-02-10-tagging_the_latest_version_of_previously_tagged_files_in_cvs.md</guid>
            <pubDate>Fri, 10 Feb 2006 02:06:44 GMT</pubDate>
            <description><![CDATA[Some time ago a set of files ware committed to CVS repository and tagged (lets say with TAG1) . These files have changed a few times since then. Today I needed to tag the latest versions of all files that have ever been tagged TAG1 with TAG2.]]></description>
        </item>
        <item>
            <title><![CDATA[Simple Java program to merge Excel survey results]]></title>
            <link>/blog/2008/12/simple_java_program_to_merge_excel_survey_results</link>
            <guid isPermaLink="false">posts/2008-12-29-simple_java_program_to_merge_excel_survey_results.md</guid>
            <pubDate>Mon, 29 Dec 2008 13:13:20 GMT</pubDate>
            <description><![CDATA[A friend of mine recently asked me about merging survey results, which reminded me I had similar problem about an year ago and have written a peace of code to solve it. It's not a framework or user friendly application and it's not well documented. It was written in a couple of hours to solve particular problem, but in case anyone is interested here is so called SpreadSurvey.]]></description>
        </item>
        <item>
            <title><![CDATA[I just finished installing Movable Type]]></title>
            <link>/blog/2009/01/i_just_finished_installing_movable_type_4</link>
            <guid isPermaLink="false">posts/2009-01-01-i_just_finished_installing_movable_type_4.md</guid>
            <pubDate>Thu, 01 Jan 2009 22:42:34 GMT</pubDate>
            <description><![CDATA[Welcome to my new blog powered by Movable Type. Finally got it up and running but it took me a few hours. Cutting the long story short, here is a note of what problems I had and how they were solved.]]></description>
        </item>
        <item>
            <title><![CDATA[ATG session tracking cookies and subdomains.]]></title>
            <link>/blog/2009/01/atg_session_tracking_cookies_and_subdomains</link>
            <guid isPermaLink="false">posts/2009-01-29-atg_session_tracking_cookies_and_subdomains.md</guid>
            <pubDate>Thu, 29 Jan 2009 13:50:58 GMT</pubDate>
            <description><![CDATA[If an ATG based web application is available under few subdomains (domain.com, www.domain.com, shop.domain.com) keeping track of session cookies across subdomains may be a challenge. Session tracking cookies (like jsessionid) usually do not have domain property set, which means they are sent back to exactly the same host they came from. So if visitors switch to another subdomain while navigating through the application they would most likely end up having a new session. Depending on what information session holds, the number of visitors and how many simultaneous sessions the server can handle, this may or may not be a problem.]]></description>
        </item>
        <item>
            <title><![CDATA[Run GWT application in "hosted mode" from maven]]></title>
            <link>/blog/2009/04/run_gwt_application_in_hosted_mode_from_maven</link>
            <guid isPermaLink="false">posts/2009-04-26-run_gwt_application_in_hosted_mode_from_maven.md</guid>
            <pubDate>Sun, 26 Apr 2009 10:39:35 GMT</pubDate>
            <description><![CDATA[It seems to get more and more cloudy in the IT world these days . It's a matter of time before the rain (of applications) starts. When this happen one will need the proper tools, to be able to add his/hers own few drops.]]></description>
        </item>
        <item>
            <title><![CDATA[Creating Liferay portlet with liferay-maven-sdk]]></title>
            <link>/blog/2009/10/creating_liferay_portlet_with_liferay-maven-sdk</link>
            <guid isPermaLink="false">posts/2009-10-09-creating_liferay_portlet_with_liferay-maven-sdk.md</guid>
            <pubDate>Fri, 09 Oct 2009 21:47:50 GMT</pubDate>
            <description><![CDATA[This post will demonstrate how liferay-maven-sdk can be employed to build a Liferay portlet using Liferay's Service Builder feature. For this purpose we will create service-builder-portlet which is capable of displaying a list of players and adding a new player to this list. The model, persistence layer and data access services will be generated by Service Builder.]]></description>
        </item>
        <item>
            <title><![CDATA[Custom global markup portlet]]></title>
            <link>/blog/2010/04/custom_global_markup_portlet</link>
            <guid isPermaLink="false">posts/2010-04-06-custom_global_markup_portlet.md</guid>
            <pubDate>Mon, 05 Apr 2010 22:40:01 GMT</pubDate>
            <description><![CDATA[What would you do if a customer demands to "integrate" his Liferay based corporate portal with Google Analytics, Geminus, ClickTale, Crazy Egg, and whole bunch of other analytics tools available out there?]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2010-04-06-custom_global_markup_portlet/CustomGlobalMarkupConfig.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Writing Liferay portlet to display a file in a way "tail -f" does  ]]></title>
            <link>/blog/2010/05/writing_liferay_portlet_to_display_a_file_in_a_way_tail_-f_does</link>
            <guid isPermaLink="false">posts/2010-05-04-writing_liferay_portlet_to_display_a_file_in_a_way_tail_-f_does.md</guid>
            <pubDate>Mon, 03 May 2010 22:10:42 GMT</pubDate>
            <enclosure url="https://MilenDyankov.com/assets/2010-05-04-writing_liferay_portlet_to_display_a_file_in_a_way_tail_-f_does/TailgateActivityDiagram.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Liferay Portal 6 Enterprise Intranets review]]></title>
            <link>/blog/2010/07/liferay_portal_6_enterprise_intranets_review</link>
            <guid isPermaLink="false">posts/2010-07-04-liferay_portal_6_enterprise_intranets_review.md</guid>
            <pubDate>Sun, 04 Jul 2010 07:56:19 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[More "Simple" than "XStream"]]></title>
            <link>/blog/2010/07/more_simple_than_xstream</link>
            <guid isPermaLink="false">posts/2010-07-20-more_simple_than_xstream.md</guid>
            <pubDate>Mon, 19 Jul 2010 22:56:21 GMT</pubDate>
            <description><![CDATA[I guess every Java developer dealing with JAVA/XML serialization/deserialization knows about XStream. I was using it for years until yesterday. What happened yesterday? I found out XStream dos not work out of the box with GAE. Well is's not exactly XStream's fault. A lot of stuff does not work properly with GAE due to its limitations and odd security restrictions. But my hope to quickly find patch/workaround, went away as soon as I realized the problem was reported to XStream over an year ago (http://jira.codehaus.org/browse/XSTR-566) and there is still no good solution.]]></description>
        </item>
        <item>
            <title><![CDATA[Just added 'J' in front of WebThumb]]></title>
            <link>/blog/2010/07/just_added_j_in_front_of_webthumb</link>
            <guid isPermaLink="false">posts/2010-07-23-just_added_j_in_front_of_webthumb.md</guid>
            <pubDate>Thu, 22 Jul 2010 22:21:42 GMT</pubDate>
            <description><![CDATA[Yep, good guess, a Java API to bluga.net webthumb in now available. Making your Java application display website thumbnails is now something really easy to implement. Get your API KEY form bluga.net webthumb, download JWebThumb and start requesting and fetching thumbnails with just a few lines of code.]]></description>
        </item>
        <item>
            <title><![CDATA[Liferay plug-ins adapted to work with Liferay 6.0.5]]></title>
            <link>/blog/2010/11/liferay-plug-ins-adapted-to-work-with-liferay-6-0-5</link>
            <guid isPermaLink="false">posts/2010-11-08-liferay-plug-ins-adapted-to-work-with-liferay-6-0-5.md</guid>
            <pubDate>Mon, 08 Nov 2010 21:12:16 GMT</pubDate>
            <description><![CDATA[As soon as Liferay 6.0.5 was released I decided to adapt my plug-ins to the newest framework version. But as we all know, being determined to do something is not the same as having the time to do it. The good news is, a few days ago I finally quit saying myself "never mind, you'll do it tomorrow" and started getting things done. And now I'm happy to announce that Custom Global Markup, Tailgate and Liferay-UI Taglib Demo are already upgraded to work with Liferay 6.0.5.]]></description>
        </item>
        <item>
            <title><![CDATA[Liferay User Interface Development]]></title>
            <link>/blog/2010/12/liferay_user_interface_development</link>
            <guid isPermaLink="false">posts/2010-12-11-liferay_user_interface_development.md</guid>
            <pubDate>Sat, 11 Dec 2010 15:56:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Liferay GWT portlet - how to make it "instanceable" and use GWT RPC]]></title>
            <link>/blog/2011/01/liferay_gwt_portlet_how_to_make_it_instanceable_and_use_gwt_rpc</link>
            <guid isPermaLink="false">posts/2011-01-29-liferay_gwt_portlet_how_to_make_it_instanceable_and_use_gwt_rpc.md</guid>
            <pubDate>Sat, 29 Jan 2011 14:46:35 GMT</pubDate>
            <description><![CDATA[Every once in a while somebody asks about writing Liferay portlets in GWT. It seems a lot of people are successfully using GWT with Liferay but surprisingly I couldn't find any complete tutorial on the subject. There are a of course tutorials explaining the basics but what they concentrate on, is how to build single-instance and client-side-only portlets. This is good enough to get you started but chances are sooner or later you'll need to place two instances of the same GWT portlet on the same page and/or implement GWT RPC to make use of the Liferay services.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2011-01-29-liferay_gwt_portlet_how_to_make_it_instanceable_and_use_gwt_rpc/chatrooms-gwt-portlet.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Liferay multi-device extension]]></title>
            <link>/blog/2011/03/liferay_multidevice_extension</link>
            <guid isPermaLink="false">posts/2011-03-10-liferay_multidevice_extension.md</guid>
            <pubDate>Thu, 10 Mar 2011 04:52:15 GMT</pubDate>
            <description><![CDATA[UPDATE: The extension described here targets Liferay 6.0. It was contributed to Liferay and is available out of the box since Liferay 6.1]]></description>
            <enclosure url="https://MilenDyankov.com/assets/liferay_multi_device_extension.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Liferay GWT portlet - replacing GWT-RPC with JSON ]]></title>
            <link>/blog/2011/03/liferay_gwt_portlet_replacing_gwt-rpc_with_json</link>
            <guid isPermaLink="false">posts/2011-03-17-liferay_gwt_portlet_replacing_gwt-rpc_with_json.md</guid>
            <pubDate>Thu, 17 Mar 2011 18:05:14 GMT</pubDate>
            <description><![CDATA[This is a continuation of my previous post Liferay GWT portlet - how to make it "instanceable" and use GWT RPC. The approach described there uses Liferay specific functionality called PortalDelegateServlet. This way one can easily use GWT RPC which somewhat simplifies client-server communication. However if you need to develop a JSR 286 portlet you need a more standard compatible way of doing AJAX calls. For this reason JSR 286 defines serverResource method and this post will show how to refactor the code to replace GWT RPC calls with exchanging JSON messages using serverResource method.]]></description>
        </item>
        <item>
            <title><![CDATA[Liferay - preserve GWT portlet state between reloads]]></title>
            <link>/blog/2011/03/liferay_preserve_gwt_portlet_state_between_reloads</link>
            <guid isPermaLink="false">posts/2011-03-23-liferay_preserve_gwt_portlet_state_between_reloads.md</guid>
            <pubDate>Wed, 23 Mar 2011 06:53:31 GMT</pubDate>
            <description><![CDATA[One of the problems with GWT (which is even more noticeable in portal environment) is preserving it's state between page reloads. In a GWT-only application (or single portlet on the page case) one can give user no other option but using only GWT controls to practically avoid page reloads. In most cases however this is not really possible nor wise thing to do. In portlet environments in particular, reloading the page is a very commmon thing to do, giving all portlets a chance to refresh their content after some action has taken place. The thing is, GWT portlets will, by default, render their initial state, which may not be what user expects.]]></description>
        </item>
        <item>
            <title><![CDATA[Simple mobile device emulator in Firefox]]></title>
            <link>/blog/2011/10/simple_mobile_device_emulator_in_firefox</link>
            <guid isPermaLink="false">posts/2011-10-28-simple_mobile_device_emulator_in_firefox.md</guid>
            <pubDate>Thu, 27 Oct 2011 23:22:12 GMT</pubDate>
            <description><![CDATA[After my "Pluggable mobile device detection" presentation during Liferay Europe Symposium a lot of people asked about the mobile device emulator I was using. The truth is, it's not a real "emulator" but a simple combination of html page and a Firefox user script. However, it does the trick and for most people seems to be good enough (at least for a start). So, I made a promise to share it and finally found the time to blog about it.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/mobile_device_emulator.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Liferay Beginner's Guide - review]]></title>
            <link>/blog/2012/02/liferay_beginners_guide_-_review</link>
            <guid isPermaLink="false">posts/2012-02-01-liferay_beginners_guide_-_review.md</guid>
            <pubDate>Wed, 01 Feb 2012 06:34:59 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Liferay Portal Systems Development - review]]></title>
            <link>/blog/2012/04/liferay_portal_systems_development_-_review</link>
            <guid isPermaLink="false">posts/2012-04-01-liferay_portal_systems_development_-_review.md</guid>
            <pubDate>Sun, 01 Apr 2012 12:52:53 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Mobile device detection in Liferay 6.1]]></title>
            <link>/blog/2012/05/mobile_device_detection_in_liferay_61</link>
            <guid isPermaLink="false">posts/2012-05-29-mobile_device_detection_in_liferay_61.md</guid>
            <pubDate>Tue, 29 May 2012 12:28:24 GMT</pubDate>
            <description><![CDATA[I'm still getting a lot of questions about how to use the multi-device extension in Liferay 6.1. The answer is, you don't have to! The code was contributed to Liferay and it's now available OOTB in Liferay 6.1.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/mobile_device_detection_liferay_6_1.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[How to use CustomGlobalMarkup portlet to add image slider on every Liferay page]]></title>
            <link>/blog/2012/06/how_to_use_customglobalmarkup_portlet_to_add_image_slider_on_every_liferay_page</link>
            <guid isPermaLink="false">posts/2012-06-18-how_to_use_customglobalmarkup_portlet_to_add_image_slider_on_every_liferay_page.md</guid>
            <pubDate>Mon, 18 Jun 2012 14:06:00 GMT</pubDate>
            <description><![CDATA[The original purpose of CustomGlobalMarkup portlet was to provide convenient interface for adding 3rd parties javascript code (like Google Analytics, Geminus, ClickTale, Crazy Egg, ...) to every page. However since it allows to add any markup it can be used to do some other cool things. For example - image slideshows.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2012-06-18-how_to_use_customglobalmarkup_portlet_to_add_image_slider_on_every_liferay_page/CustomGlobalMarkup-image-slider-result.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[About complexity, modularity and OSGi ]]></title>
            <link>/blog/2013/02/about_complexity_modularity_and_osgi</link>
            <guid isPermaLink="false">posts/2013-02-06-about_complexity_modularity_and_osgi.md</guid>
            <pubDate>Wed, 06 Feb 2013 09:56:02 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Cross blogging]]></title>
            <link>/blog/2013/06/cross_blogging</link>
            <guid isPermaLink="false">posts/2013-06-28-cross_blogging.md</guid>
            <pubDate>Fri, 28 Jun 2013 09:30:58 GMT</pubDate>
            <description><![CDATA[It's been a while since my last post here. Apart from the traditional 'no time'
excuse, there is one more. Since I joined Liferay last year,
my Liferay related blogs are now on Liferay's website:
http://www.liferay.com/web/milen.dyankov/blog.]]></description>
        </item>
        <item>
            <title><![CDATA[Lessons learned from speaking at conferences]]></title>
            <link>/blog/2016/05/lessons_learned_from_speaking_at_conferences</link>
            <guid isPermaLink="false">posts/2016-05-04-lessons_learned_from_speaking_at_conferences.md</guid>
            <pubDate>Wed, 04 May 2016 00:00:00 GMT</pubDate>
            <description><![CDATA[Time has come to resurrect the blog (again)! I was never much of a blogger but 3 years is ... oh well, almost a lifetime in software industry. It's not that I don't have anything to write about (quite the opposite in fact), it's just that I have always preferred more interactive communication. So for the last 3 years I was concentrating on presenting my thoughts and experience on various conferences rather than posting them here. A huge mistake apparently which someone pointed out to me recently. On the bright side - I learned a few things about being a conference speaker and I'll share them here. If you think going down that road, here is what to expect.]]></description>
        </item>
        <item>
            <title><![CDATA[Java: 21 & Legally drunk!]]></title>
            <link>/blog/2016/06/Java_21_and_legally_drunk</link>
            <guid isPermaLink="false">posts/2016-06-13-Java_21_and_legally_drunk.md</guid>
            <pubDate>Mon, 13 Jun 2016 00:00:00 GMT</pubDate>
            <description><![CDATA[I've stated that before but allow me to repeat myself: jPrime is one of my favorite conferences. I've been there two years in a row and to quote Karol Kaliński "it costs about 80 EUR, but can easily compete with western Europe conferences in terms of quality". This year, apart from great talks, fantastic atmosphere and the cute new Bulgarian JUG logo there was one more thing I was pleasantly surprised by, namely the conference's headline "Java: 21 & Legally drunk!".]]></description>
        </item>
        <item>
            <title><![CDATA[Micro-services or μServices]]></title>
            <link>/blog/2016/09/microservices_or_Services</link>
            <guid isPermaLink="false">posts/2016-09-21-microservices_or_μServices.md</guid>
            <pubDate>Wed, 21 Sep 2016 00:00:00 GMT</pubDate>
            <description><![CDATA[Yesterday someone very well known and respected in Java world (I didn't ask him for permission, so I'm not mentioning his name), approached Liferay's booth at JavaOne. He expressed his concerns about the word "μServices" in the message printed on our booth's wall. I wasn't there at the time this happened. I spoke with my colleagues few minutes later, as the non-developers were getting worried we made a terrible and embarrassing typo. As a non-native English speaker I wasn't quite sure what the exact argument was, but it was clear to me the person believed we should have used "micro-services" instead. I urged to reassure my colleagues this is not a typo but an important differentiator in today's buzzword driven world.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2016-09-21-microservices_or_mServices/liferaybooth.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Developers about OSGi]]></title>
            <link>/blog/2016/09/developers_about_OSGi</link>
            <guid isPermaLink="false">posts/2016-09-30-developers_about_OSGi.md</guid>
            <pubDate>Fri, 30 Sep 2016 00:00:00 GMT</pubDate>
            <description><![CDATA[Some time ago I published a survey asking developers what they think about OSGi. It took a while to reach some reasonable amount of responses and then to process the results, but finally I'm ready to publish them.]]></description>
        </item>
        <item>
            <title><![CDATA[All Those Little Things]]></title>
            <link>/blog/2017/02/those_little_things</link>
            <guid isPermaLink="false">posts/2017-02-21-those_little_things.md</guid>
            <pubDate>Tue, 21 Feb 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[As developer advocate, I do a fair amount of traveling. Most of my journeys start with about an hour long drive to the airport. It's nice highway, not a big deal, easy to do it without needless stops. Yet I like to make one stop, get myself out of the car for a while, grab a coffee, smoke, ...]]></description>
        </item>
        <item>
            <title><![CDATA[Getting feedback live]]></title>
            <link>/blog/2017/03/Getting_feedback_live</link>
            <guid isPermaLink="false">posts/2017-03-16-Getting_feedback_live.md</guid>
            <pubDate>Thu, 16 Mar 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[I have spoken at quite some conferences over the last years. Part of the talks were just me speaking with some (hopefully not too ugly) slides behind me. Some were live demos. Either way, I'm almost never happy with my talks and therefore constantly looking for ways to improve. But in order to improve, first you need to know what your audience like and don't like. It all comes down to feedback and constructive criticism. Some conferences are quite good at collecting feedback. Polish Confitura is on the top of my list, sending me a document that not only shows how people voted but also all the comments from their online survey. Most conferences though don't bother to give feedback to speakers. Some don't ever bother to collect it. It's therefore been on my mind for a while to try to find a fun and easy way for attendees to provide feedback during (not after) my talk.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2017-03-16-Getting_feedback_live/javaskop_talk.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[What to expect in post-JPMS Java world]]></title>
            <link>/blog/2017/05/What_to_expect_in_post-JPMS_Java_world</link>
            <guid isPermaLink="false">posts/2017-05-06-What_to_expect_in_post-JPMS_Java_world.md</guid>
            <pubDate>Sat, 06 May 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[The atmosphere around Java 9 (and most notably JPMS a.k.a. JSR 376 a.k.a. Jigsaw) is getting really hot. Java community seams to be divided into 3 camps "developers who honestly believe JPMS can simplify modularity", "developers who have been dealing with modularity long enough to clearly see the issues Java platform architects don't want to see" and "developers who don't care (for now)". I personally think the 3rd group is by far the largest and this is the main issue and the main reason for the noise. Why? Because those are the developers who never cared about modularity. Most of them still don't care, but now they will be forced to learn about modularity. The question is what will they learn? Real modularity as described in Modulariy Maturiy Model or limited version of it wrapped in a package with a label "simple" on it?]]></description>
        </item>
        <item>
            <title><![CDATA[Cleaning up my GitHub mess]]></title>
            <link>/blog/2017/09/Cleaning_up_my_github_mess</link>
            <guid isPermaLink="false">posts/2017-09-03-Cleaning_up_my_github_mess.md</guid>
            <pubDate>Sun, 03 Sep 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[You know how it goes. You continuously stack stuff in the most convenient place (shelf, drawer, desk, ...) and it's all fine, up until the moment you no longer can find what you need. That is the day when you need to put everything else aside and clean up your mess. Not sure if it is Conway's Law to blame but this seams to happen to my repositories on GitHib. And today was the day when I no longer could recall which repo is under which account, where it resides on my local hard drive and if it's actually in sync. So today was my GitHub cleanup day. Just in case you need to cleanup yours or if you use one of my projects and something is no longer where you expect it to be, here is what changed.]]></description>
        </item>
        <item>
            <title><![CDATA[Am I against JPMS and microservices?]]></title>
            <link>/blog/2017/11/Am_I_against_JPMS_and_microservices</link>
            <guid isPermaLink="false">posts/2017-11-10-Am_I_against_JPMS_and_microservices.md</guid>
            <pubDate>Fri, 10 Nov 2017 00:00:00 GMT</pubDate>
            <description><![CDATA[I started writing this on my way back home from Devoxx BE 2017. The reason is, two things happened during the conference, that made me ask myself this question.]]></description>
        </item>
        <item>
            <title><![CDATA[Java EE, EE4J, OSGi, ... and the paradox of choice]]></title>
            <link>/blog/2018/01/JavaEE_EE4J_OSGi_and_the_paradox_of_choice</link>
            <guid isPermaLink="false">posts/2018-01-09-JavaEE_EE4J_OSGi_and_the_paradox_of_choice.md</guid>
            <pubDate>Tue, 09 Jan 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Not so long ago, I had very interesting conversation with someone who works on Java SE. At some point we discussed the donation of Java EE to Eclipse Foundation. I don't quite remember what statement I was making when I got this response (not a precise quote):]]></description>
        </item>
        <item>
            <title><![CDATA[The fruits of our labor]]></title>
            <link>/blog/2018/02/the_fruits_of_our_labor</link>
            <guid isPermaLink="false">posts/2018-02-14-the_fruits_of_our_labor.md</guid>
            <pubDate>Wed, 14 Feb 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[I usually do rather technical talks around software architecture and design. Unless one is а famous storyteller, IT conferences would rather take one
more "What's new in the latest version of XYZ technology" than risk a bet on something that may end up anywhere between boring and sales pitch. I don't blame
them but that is why it is not often that I'm given the opportunity to speak about culture, purpose and all those non-measurable, soft, human things. Therefore
I'm extremely grateful Let's Manage IT invited me and trusted me to give exactly this type of talk. Knowing that I'll likely not have
the opportunity to present it anywhere else, I decided to convert it into a blog post and publish it here.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/the_fruits_of_our_labor/slide.030.jpeg" length="0" type="image/jpeg"/>
        </item>
        <item>
            <title><![CDATA[Fire alarm at software conference]]></title>
            <link>/blog/2018/11/fire_alarm_at_software_conference</link>
            <guid isPermaLink="false">posts/2018-11-24-fire_alarm_at_software_conference.md</guid>
            <pubDate>Sat, 24 Nov 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[I guess if you do something often and long enough, you get to experience all possible scenarios eventually. Leaving the conference venue due to fire alarm going on, was not necessarily on my bucket list but now I can both add it and scratch it off at the same time. It happened last week in Malmö, Sweden.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2018-11-24-fire_alarm_at_software_conference/mayor.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Would you attend one of those talks?]]></title>
            <link>/blog/2019/11/Would-you-attend-one-of-those-talks</link>
            <guid isPermaLink="false">posts/2019-11-12-Would you attend one of those talks?.md</guid>
            <pubDate>Tue, 12 Nov 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[After several years of traveling around the world to speak at conferences, I needed a break. I have no idea what people like Venkat Subramaniam or Josh Long or Philipp Krenn are made of, but the assembly line that made me, certainly didn't use the same material. Luckily 2019 offered me that break and allowed me to focus on other things. It was great time but also kind of sad as I like to share the little things I know with other people and I like even more to learn from the people I meet. So I'm planning to be back on the road in 2020.]]></description>
        </item>
        <item>
            <title><![CDATA[Conference Tracker]]></title>
            <link>/blog/2019/12/Conference-Tracker</link>
            <guid isPermaLink="false">posts/2019-12-02-Conference Tracker.md</guid>
            <pubDate>Mon, 02 Dec 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[I try hard to keep track of conferences around the world. Mainly in a Google spreadsheet but also in a calendar shared with my team. I always thought that if all the DevRel folks were to share and merge their spreadsheets (or whatever else they use) into one single place, it would literally save days of work.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2019-12-02-Conference_Tracker/conference_tracker.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Mind the involuntary observational learning]]></title>
            <link>/blog/2019/12/Mind-the-involuntary-observational-learning</link>
            <guid isPermaLink="false">posts/2019-12-14-Mind the involuntary observational learning.md</guid>
            <pubDate>Sat, 14 Dec 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Today I want to talk about something that has been bothering me for quite a while now - the side effects of how we teach people to use frameworks, libraries, tools, ...]]></description>
            <enclosure url="https://MilenDyankov.com/assets/2019-12-14-Mind_the_involuntary_observational_learning/talk-screenshot-anonymous.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Data classes in Java]]></title>
            <link>/blog/2020/08/data_classes_in_java</link>
            <guid isPermaLink="false">posts/2020-08-30-data_classes_in_java.md</guid>
            <pubDate>Sun, 30 Aug 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[I recently joined AxonIQ to help them evolve their Developer Relations to the next level. One of the things I am currently evaluating is the steepness of the adoption curve of Axon Framework and Axon Server. One of the things that catch my attention was that, in almost all examples and demos, the classes representing events, commands and queries are written as Kotlin data classes (here is an example).]]></description>
        </item>
        <item>
            <title><![CDATA[What dev heck?]]></title>
            <link>/blog/2022/02/what_dev_heck</link>
            <guid isPermaLink="false">posts/2022-02-09-what_dev_heck.md</guid>
            <pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[There are a lot of publications explaining how crucial DevRel (Developer Relations) and DX (Developer eXperience) are for software vendors. It seems more, and more of them establish such teams. The goals they hope to achieve probably vary a lot. Yet, according to the 2021 edition of State of Developer Relations report, most often, such teams report to marketing. Is DevRel a fancy name for developer-focused marketing then?]]></description>
            <enclosure url="https://MilenDyankov.com/assets/what_dev_heck.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From DevRel to Developer eXperience]]></title>
            <link>/blog/2022/02/from_devrel_to_developer_experience</link>
            <guid isPermaLink="false">posts/2022-02-10-from_devrel_to_developer_experience.md</guid>
            <pubDate>Thu, 10 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[At the time of writing this, the DevRel team at AxonIQ consists of four people (including me). We are two Developer Advocates, a Community Platforms Developer, and a Learning Experience Designer. The flat structure makes perfect sense at this team size. But our plans are huge, and four people can only cover so much ground. Clearly, the team needs to grow.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/from_devrel_to_developer_experience.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[The macroscale of micro frustrations]]></title>
            <link>/blog/2022/02/the_macroscale_of_micro_frustrations</link>
            <guid isPermaLink="false">posts/2022-02-20-the_macroscale_of_micro_frustrations.md</guid>
            <pubDate>Sun, 20 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[I have experience with two GPS navigation systems. My Android phone has Google Maps. My car also has one, powered by TomTom. All things being equal (as when I drive my car) both are in direct competition. I have to put my trust in one of them. I can't objectively tell which one is better. Yet, somehow I tend to use one of them often and avoid the other.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/the_macroscale_of_micro_frustrations.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Operational vs. Strategic DevX]]></title>
            <link>/blog/2022/10/operational_vs_strategic_devx</link>
            <guid isPermaLink="false">posts/2022-10-23-operational_vs_strategic_devx.md</guid>
            <pubDate>Sun, 23 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[It is 2022, and Developer Relations (DevRel) and Developer eXperience (DevX) teams are to be found in almost any organization whose offering has anything to do (even if very little) with software developers. Many prominent examples prove that DevX-done-well significantly contributes to the organization's success. Way more organizations hope to replicate the success story by merely "sprinkling a DevX spice" on top of their traditional marketing/sales-driven practices.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/operational_vs_strategic_devx.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Multi-Hat Disorder - Building Personal Website Like an Enterprise App]]></title>
            <link>/blog/2026/01/Multi-Hat-Disorder-Building-Personal-Website-Like-an-Enterprise-App</link>
            <guid isPermaLink="false">posts/2026-01-02-Multi-Hat Disorder-Building Personal Website Like an Enterprise App.md</guid>
            <pubDate>Fri, 02 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[While I’ve been focused on helping companies grow, my personal brand has taken a hit. I’ve never been interested in being an influencer or a showman, but I’ve come to realize that technical expertise alone isn’t enough anymore. It seems that, in today's world, a "personal brand" carries as much, if not more, weight than the substance itself.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/multi-hat-disorder.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Finite and Infinite Startups]]></title>
            <link>/blog/2026/01/Finite-and-Infinite-Startups</link>
            <guid isPermaLink="false">posts/2026-01-27-Finite-and-Infinite-Startups.md</guid>
            <pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Three weeks ago, Adam Wathan, the creator of Tailwind CSS, released a podcast containing an honest confession – "We had six months left" – and an explanation of why they had to let some folks go. For days, my social media feeds buzzed with discussions about the subject. I saw everything from "AI is killing startups" to "he doesn't know how to run a company," and even ridiculous accusations of deliberate exaggeration (why say 75% when it "only" affected three people). I never cease to be amazed by how many people fill the gaps left by scant information with assumptions and rush to judgment.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/fiinite_infinite_startups.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[AI for Application Developers]]></title>
            <link>/blog/2026/03/AI-for-Application-Developers</link>
            <guid isPermaLink="false">posts/2026-03-01-AI-for-Application-Developers.md</guid>
            <pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
            <enclosure url="https://MilenDyankov.com/assets/AI4AppDevs.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[AI/ML Models Are Not Libraries]]></title>
            <link>/blog/2026/03/AI-ML-Models-Are-Not-Libraries</link>
            <guid isPermaLink="false">posts/2026-03-08-AI-ML-Models-Are-Not-Libraries.md</guid>
            <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The first time I wanted to use a model in my own application, I expected the experience to be similar to using a library or a framework. It seemed Hugging Face was the Maven Central or the npm (or the CPAN for my old Perl friends) of the AI world. I was under the impression that models were language-agnostic and we could simply download them and interact with them via a standard API.]]></description>
            <enclosure url="https://MilenDyankov.com/assets/ModelsAreNotLibraries.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>