<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><atom:link href="https://blog.jakubholy.net" rel="self" type="application/rss+xml"/><title>Holy on Dev</title><link>https://blog.jakubholy.net</link><description>Blog about effective software development</description><lastBuildDate>Thu, 19 Feb 2026 14:43:09 +0000</lastBuildDate><generator>clj-rss</generator><item><guid>https://blog.jakubholy.net/2026/intro-consciousness-work/</guid><link>https://blog.jakubholy.net/2026/intro-consciousness-work/</link><title>Consciousness work: what, why, how</title><description>There are matters more important than technology, and becoming more conscious of what is going on in your experience, and thus more free and powerful, is one of those.(This is a transcript of my 10 min talk on the topic. You may or may not prefer watching it instead of reading.)We are enslaved by anything we do not consciously see.We are freed by conscious perception.I love this quote because it expresses so well what consciousness work is primarily about for me.So what is consciousness work?Look into your experience to become more conscious of what is going on and what is actually true.</description><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2025/consciousness-sabbatical/</guid><link>https://blog.jakubholy.net/2025/consciousness-sabbatical/</link><title>Consciousness sabbatical for the forseeable future</title><description>Technology is fun, but there are far more important things in life. Such as understanding what life, self, and everything really is. It has been really quiet here this year, and it will continue to be that way because to progress I need to focus. I may come back or I may not. It doesn’t really matter either way :-).If you don’t really know what consciousness is or why it should matter, I cannot recommend enough as a starting point the book Ending Unnecessary Suffering. And even more than the book, the corresponding workshop, which makes it far easier to actually experience the stuff (and, hopefully, a fundamental perspective shift), rather than just thinking about it. Thinking is pointless (it is, after all, what gets us in all this mess), getting insights in one’s own experience is what makes a difference.
All the best, and thank you for all the fish*!</description><pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/12-newsletter/</guid><link>https://blog.jakubholy.net/2024/12-newsletter/</link><title>Holy Dev Newsletter December 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.Good bye, and thank you for the 🐟!This is going to be the last issue for a while. I have decided to focus on personal development and making the best out of the time we are given. I cannot spread myself too thin, if I want to achieve anything. Technology is great fun, and I could surely spend multiple lives immersing into it. But it is only fun - it means nothing in the context of Life.I am sure I will still encounter and store interesting links in the course of my job. You can occasionally check out my Tumblr feed, which is/was anyway the source of my monthly "Gems from the world wide web".</description><pubDate>Tue, 31 Dec 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/11-newsletter/</guid><link>https://blog.jakubholy.net/2024/11-newsletter/</link><title>Holy Dev Newsletter November 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI’ve published my 15 min talk Mind-bending (technologies) from Ardoq conference about technologies that expand our ideas of what is possible and what computers can do for us. The good news? They are all based on Clojure or usable from Clojure! (Featuring Wolfram and Wolframite, Rama, Electric Clojure). Enjoy!</description><pubDate>Sat, 30 Nov 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/10-newsletter/</guid><link>https://blog.jakubholy.net/2024/10-newsletter/</link><title>Holy Dev Newsletter October 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI have taken a break from coding and spent instead time reading, meditating, and exercising 💪, so there is a lot of "gems" this month. Though some coding, was there - I have helped Tony kick-start a rewrite of Fulcro Inspect to support the new Chrome manifest and thus not be removed from Chrome Web Store (while Tony has also taken the opportunity to also move it from Fulcro 2 to three). You can help us out and try it out. I have also extended my clj-tumblr-summarizer, which creates the gems summary below, to support overriding a single updated post.Another update is that Heart of Clojure talks have been released, and I have added links to my favourite ones to the September newsletter.</description><pubDate>Thu, 31 Oct 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/09-newsletter/</guid><link>https://blog.jakubholy.net/2024/09-newsletter/</link><title>Holy Dev Newsletter September 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI have been to Heart of Clojure in Belgium, which was a wonderful experience. And I am not saying that only thanks to the home-made waffles. And the pralines. A cozy city, good food, very nice people from all around (primarily) Europe. Surprisingly many expats like me :-). Some talks and workshops I really enjoyed as well. Though the best part was meeting and chatting with people new and old that I meet rarely or never before in the real life, such as a gang from Czech Republic, Lovro, Ben, Sigmund, Sami, Colin, and too many others to name. I’ve also had a very nice lunch with my tai-chi chuan teacher. Of the talks I’ve seen or heard of, I can recommend the following: James Reeve’s Living With Legacy Code, XTDB’s Richer SQL — Steering SQL’s Future Towards Clojure’s Philosophy. Sami’s Sailing with Scicloj: A Bayesian Adventure demonstrates well the maturity and power of the SciCloj ecosystem for scientific computing. I hear that Staring into the PLFZABYSS - From the IBM AS/400 to Clojure &amp; Datomic was very insightful. Personally, I found Klor: Choreographic programming in Clojure quite interesting, both w.r.t. the topic and for seeing theoretical research put into a PoC, though it won’t be practical in any near future. Lu’s What it means to be open is non-technical, but inspiring talk about, essentially, being a decent human being towards others, and about going out with your imperfect work.All my remaining time has been consumed by writing and improving documentation of Wolframite, our Clojure - Wolfram bridge. Both me and Thomas have done a great job and it is turning out to be one of the best documented Clojure libraries. Which is necessary, since we are introducing a wholly new thing to two very different audiences - Wolfram to Clojurians and Clojure to scientists. You can see for yourself our work in progress. After I finish my current review, I will get back to writing a demo of using Wolfram(ite) to analyze bike trips for Clojurians - writing it is a great way to finally learn Wolfram 😅 and to discover more ways to improve the library. I hope to wrap the documentation up in a few weeks, and then we can focus on preparing some talks and workshops we want to have ready when we announce v1. We also are looking for beta testers, either from the Clojure or scientific communities - if you know anyone, let me know!I haven’t had any time for Fulcro or Rama in the last months, but I am looking forward to coming back to both of them…​</description><pubDate>Mon, 30 Sep 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/08-newsletter/</guid><link>https://blog.jakubholy.net/2024/08-newsletter/</link><title>Holy Dev Newsletter August 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningNot much is happening, since August has been a vacation month. When there was time, I worked on wrapping up Wolframite and its documentation.</description><pubDate>Sat, 31 Aug 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/07-newsletter/</guid><link>https://blog.jakubholy.net/2024/07-newsletter/</link><title>Holy Dev Newsletter July 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningWe are wrapping up our Clojurist Together sponsorship of Wolframite, the Clojure ↔ Wolfram bridge for scientific computing. We have fixed everything required for v1, added some ergonomics improvements, and made very good progress on our new docs site (thank you, Thomas!).Also, summer and holiday!</description><pubDate>Wed, 31 Jul 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/06-newsletter/</guid><link>https://blog.jakubholy.net/2024/06-newsletter/</link><title>Holy Dev Newsletter June 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningThis month has been under the start of Wolframite, as we are trying to make good on our promises to Clojurists Together. We have focused on UX and bugs and stabilized the API. There are no more code-related issues that need to be fixed for v1, and an alpha of v1 has been released to Clojars. Now we need to get the site up to date and up, and write tutorials. We also wait for some advice from Wolfram Engineering.</description><pubDate>Sun, 30 Jun 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/04+05-newsletter/</guid><link>https://blog.jakubholy.net/2024/04+05-newsletter/</link><title>Holy Dev Newsletter April and May 2024</title><description>Welcome to the much delayed Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningLife happened so I wasn’t able to publish the April &amp; May issues until today. I has been tough time, but I have learned to enjoy all the small pleasures of everyday life.I had to reset my 3 years old Mac to try to make it less slow when Zooming, and took the opportunity to test and describe my computer setup - the tools I use and the procedures in place to back it up and restore / set up from scratch.I also finally got more into working on the Clojure - Wolfram bridge, Wolframite, as you can read in its log. There is essentially just one issue remaining before we can release v1, and we know how to solve it. Thomas does an awesome job discovering ways to make it ever more convenient for real-world users.Finally, I got sucked into reviving my Chromium addon Testofill, the Form Filler for Testers. (Coming soon!) Started originally 10 years ago, it is using outdated APIs and addon manifest version that are being sunset. I took the opportunity to clean it up a bit, and to address a matter that has bothered me for a long time - the very broad permissions it need(ed) to work. Along the way, I have recorded a short demonstration of the addon to explain it better to potential users. Sadly, all my subsequent work has made it outdated, so I will have to redo it 😅.</description><pubDate>Fri, 31 May 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/my-tools-and-routines/</guid><link>https://blog.jakubholy.net/2024/my-tools-and-routines/</link><title>My digital tools and routines (2024)</title><description>My computer is my wizard’s staff, the thing that allows me to do my magic. What is my set up, what tools do I use for daily productivity, and how do I keep it safe from a disaster?</description><pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/03-newsletter/</guid><link>https://blog.jakubholy.net/2024/03-newsletter/</link><title>Holy Dev Newsletter March 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI have spent all my free time with Rama, which resulted in the posts Rama: How to achieve a transactional update across partitions and Hands on Rama, day 3: Foreign keys and data integrity, macros, queries. Sadly, I did not have much time for Wolframite, but that will need to change, as our Clojurists Together sponsorship quarter is coming up 🙀.</description><pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/hands-on-rama-day3/</guid><link>https://blog.jakubholy.net/2024/hands-on-rama-day3/</link><title>Hands on Rama, day 3: Foreign keys and data integrity, macros, queries</title><description>The adventure with Rama continues! In the previous installment, I have created a simple C(R)UD for "components". Today, we will spice it up and add a foreign key and data integrity maintenance. Namely, a component can have a parent, which can also have a parent, etc.I learn about transactional updates, about writing query topologies, and about code reuse with Rama segmacros. As usually, I excel at running into problems we can all learn from 😅.</description><pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/rama-transactions/</guid><link>https://blog.jakubholy.net/2024/rama-transactions/</link><title>Rama: How to achieve a transactional update across partitions</title><description>While implementing my pet project on the mind-bending Rama platform, I ran into the classical need for an atomic update of a set of states, possibly at different partitions / machines. Let’s see what are our options for implementing that.</description><pubDate>Sun, 17 Mar 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/02-newsletter/</guid><link>https://blog.jakubholy.net/2024/02-newsletter/</link><title>Holy Dev Newsletter February 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI keep a dialog with Thomas about Wolframite. We haven’t done much lately, but have planned the way towards v1. I have been primarily busy with Rama, finishing reading the docs and doing another round of learn-by-coding, as you can read in Hands on Rama, day 2: Rewrite CAS, finish basic C(R)UD. (You can catch the whole series here.) I went a little overboard and submitted a Rama talk to JavaZone, a big and popular conference here in Oslo. 🤞I have also been digging into efficient and relevant text search, as I have been working with a suggestion API here at Ardoq. I’ve spent too much time with 📕 Introduction to Information Retrieval (free online, 2008), which is an excellent resource. I’ve learned about dictionaries, inverted indices (term → document), k-grams for wildcard queries, smart techniques for intersections of lists etc. I got me thinking about how limited I am with Postgres, and how could I leverage Rama’s ordered set for a better solution (until it gets 100% built-in support for rich text search). I’ve also learned finally what vector embeddings are, and wondered whether I could leverage those…​</description><pubDate>Thu, 29 Feb 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/hands-on-rama-day2/</guid><link>https://blog.jakubholy.net/2024/hands-on-rama-day2/</link><title>Hands on Rama, day 2: Rewrite CAS, finish basic C(R)UD</title><description>My adventures with Rama continue from day 1. In the second day, I rewrote the compare-and-set logic to atomically succeed only if all field edits were ok (instead of on per-field basis), and I finished my basic, idempotent C(R)UD, with full test coverage. I have re-learned that no special forms may be used in dataflow code. Instead, I may write top-level functions or create anonymous rama fns via &lt;&lt;ramafn. I have also been reminded that code called from dataflow must not throw exceptions.I actually took a long break between my first and second day of coding, because the first one taught me that I really needed to understand Rama in much more detail. So I have read essentially the whole Java-focused docs, as well as Clojure ns docstrings, especially those for paths. Since I am me, I forgot a lot and will need to re-read it, but anyway writing Rama is now much simpler.Overall, it was pretty smooth sailing, even though I had some rough spots, as you can read below.</description><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2024/01-newsletter/</guid><link>https://blog.jakubholy.net/2024/01-newsletter/</link><title>Holy Dev Newsletter January 2024</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningGood news, everyone! Me and Thomas have got Clojurists Together funding for Wolframite in Q2/2024. The primary goal is to stabilize the API and release it, and make great docs. We are even in touch with Wolfram Engineering, which will hopefully help us make the integration rock solid. This month I have reworked interning of Wolfram symbols as vars to be more efficient and predictable, simplified customization of Wolfram response parsing, made the discovery of Mathematice / Wolfram Kernel better and more robust, and further improved the docs. Daniel Slutsky has kindly added a demo of making web-rendered notebooks with Wolframite and Kindly. (Kindly is an emerging SciCloj standard for visualizing data with various backends, such as Portal and Clerk.)I have also worked on my fulcro-troubleshooting to remove some false positives, which required a small fix of Fulcro to ensure that also hooks-based components have a correct parent setting (released in 3.7.1). I’ve also added there a Component-inspired improvement to print the recursive fulcro-app map in a safe way.I have only spent a few hours with Rama, primarily studying the tutorial and docs, as my first day of Rama coding taught me that it is hard to program when there is so much I don’t know. I have got quite far now.</description><pubDate>Wed, 31 Jan 2024 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/12-newsletter/</guid><link>https://blog.jakubholy.net/2023/12-newsletter/</link><title>Holy Dev Newsletter December 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
(Also available online.)
I am always eager to read your comments and ideas so do not hesitate to press the reply button!New blog postsI have published three blog posts, about Postgres and Rama:PostgreSQL &amp; JDBC: How to select rows matching pairs of values, which solves a problem I have long pondered: Given a sequence of tuples of property values in app code, how do you efficiently select all records in your DB that match, without constructing a monstrous SQL like (prop1=? AND prop2=? AND …​) OR …​? I need this e.g. when searching entity history for entities with particular IDs and versions. The solution is unnest with multiple arguments - see the post for details and a number of other goodies.Exploring Rama, the platform for writing backends 100x more efficiently - I have finally finished the post I begun 4 months ago, when I started studying Rama. The pitch: RedPlanetLabs’s Rama is an integrated platform for writing and operating robust, distributed, and scalable backends 100x more efficiently. With it comes a new paradigm - dataflow oriented programming. So what is it all about? In this post I aim to give you a rough idea of what Rama is, what it offers, and why you absolutely should be interested in it.Hands on Rama, day 1: Setup, idempotent create &amp; update - following up on the theoretical study that resulted in the previous blog post, here I write about my experiences getting my hands dirty with Rama. I hope to get some more time soon to continue with this exciting journey.</description><pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/2023-in-review/</guid><link>https://blog.jakubholy.net/2023/2023-in-review/</link><title>My year 2023 in review</title><description>This has been a good year: I have been to my first (and likely last) Conj, where I met a couple of my Clojure heroes and old and new friends. I have finally held my "Why Fulcro, and how to learn it efficiently" talk at London Clojurians. After some 9 months, I have finished and fully "productionalized" my tiny ERP, powered by Fulcro RAD and (nowadays) Datomic. RedPlanetLabs have released its "100x productivity backend programming platform," and I am exploring it. Better late than never, I have started bringing the mind-bending Wolfram to Clojurians via Wolframite.
</description><pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/hands-on-rama-day1/</guid><link>https://blog.jakubholy.net/2023/hands-on-rama-day1/</link><title>Hands on Rama, day 1: Setup, idempotent create &amp; update</title><description>This is a part of a series documenting my experience applying the Rama programming platform to reimplement a part of the SaaS Ardoq, as a learning exercise. In day 1, I get set up and implement idempotent create and update of Components, while struggling with a few issues and lack of knowledge.IntroductionI want to learn the amazing programming platform Rama by applying it to a problem I know well: Ardoq. Ardoq is a SaaS tool for enterprise architects and others, to map and model the resources, processes, assets, and strategy in an organization. The heart of Ardoq is a property multi-graph: a directed graph with multiple directed edges between nodes, and with an arbitrary bag of properties attached to nodes and edges.There is of course no way to rewrite Ardoq in Rama in one person in a few days. Instead, I want to explore two things: (1) How can I model, store, and manage our core data in Rama instead of a relational database? (2) How does Rama make a few selected features simpler/harder to write?</description><pubDate>Thu, 21 Dec 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/exploring-rama/</guid><link>https://blog.jakubholy.net/2023/exploring-rama/</link><title>Exploring Rama, the platform for writing backends 100x more efficiently</title><description>In 8/2023, RedPlanetLabs has unveiled Rama, their integrated platform for writing and operating robust, distributed, and scalable backends 100x more efficiently. With it comes a new paradigm - dataflow oriented programming. So what is it all about?In this post I aim to give you a rough idea of what Rama is, what it offers, and why you absolutely should be interested in it.</description><pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/pg-select-where-match-on-list-of-tuples/</guid><link>https://blog.jakubholy.net/2023/pg-select-where-match-on-list-of-tuples/</link><title>PostgreSQL &amp; JDBC: How to select rows matching pairs of values</title><description>Given a sequence of pairs of (id, version) in code, how do you efficiently select all records in your DB that match? You can construct a long string with SELECT …​ WHERE (id = 'a' AND version = 1) OR (id = 'b' AND version = 20) OR …​ but that’s not very efficient. If you only had a single value then, in PostgreSQL, you could use id=ANY(?) and pass in a char array. But what if you have multiple conditions/columns that must match? Unnest to the rescue!</description><pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/11-newsletter/</guid><link>https://blog.jakubholy.net/2023/11-newsletter/</link><title>Holy Dev Newsletter Nov 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningExciting times! The gods of time have finally allowed me and Thomas Clark to get in sync and start reviving Wolframite, a bridge between Clojure and the awesome Wolfram Language and its built-in knowledge base. I am very excited about Wolfram because of the high level where it operates, its integration with scientific computing, and the integrated knowledge base. It truly makes everything "computable". With Wolframite, you can (soon) call to the free-for-dev Wolfram Engine or a full installation of Mathematica to do some work for you. If we are lucky then we will have Wolframite 1.0 by the end of the year. (Disclaimer: Wolframite is a refactoring of an older Clojuratica, and 99% of the work has been done by others. Me and Thomas just want to bring it to a conclusion and get it into your hands.)Aside of Wolfram, I have also spent too much 😅 time with improving my blog, namely updating cryogen-asciidoc to AsciidoctorJ v3, and consequently updating my builder to java > 8 (Netlify still only offers v8). I have also written a short note about The Four Heads of Complexity, based on a post by Kent Beck. (You should absolutely check out his newsletter Software Design. Click on the "No thanks >" link at the bottom of the page to get a preview and some free posts.)Finally, I have spent many hours these past two weeks on implementing pagination. You’d think it is a solved problem, but it turns out to be pretty complicated, when the entries come from 6 different tables. I hope to have time to write some property-based tests for this beast, and work on simplification in future iterations.</description><pubDate>Thu, 30 Nov 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/4-heads-of-complexity/</guid><link>https://blog.jakubholy.net/2023/4-heads-of-complexity/</link><title>The Four Heads of Complexity</title><description>Kent Beck has recently written about the four distinct aspects of complexity: states, interdependencies, uncertainty, and irreversibility. To tame complexity, you need to cut off one of these heads, and keep the others under control. What are they?If there is too many states and their combinations in the system, it becomes hard to understand.</description><pubDate>Sun, 19 Nov 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/10-newsletter/</guid><link>https://blog.jakubholy.net/2023/10-newsletter/</link><title>Holy Dev Newsletter Oct 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningThis has been a month of HTML and CSS tinkering. I have fixed my online Clojure &amp; Fulcro editor to properly support dark mode, fixed headings to show the self-link icon only on hover, and added a submenu to the "Tumblr" menu item to search through its content (more on that below).I have long desired the ability to search through my "gems from the web" links, and finally I have implemented it thanks to PageFind and a custom indexer. The index thus produced is copied to my site and searchable at /devlinks. Fun fact: currently, PageFind only supports custom indexers in JavaScript and not Rust (yet) 😭 but JS has weird syntax and misplaced parentheses 😹 so I have used Borkdude’s Squint to be able to write Clojure syntax that gets compiled to JS. (Originally, I hoped it had built-in EDN, which it doesn’t, and I had to pull in the edn-data lib, but I stuck with it anyway, because Clojure.) It took some effort to find how Clojury I could write the code and when to just use JS functions but it turned out fine in the end: build-pagefind-index.cljs. It takes under 5s to index my over 1k entries. Sweet. The search and UI could be improved but it is pretty decent, and so much better than grep-ing through the EDNs. I can search for a topic and use tags to narrow down to e.g. "clojure" and "library" and "webdev".On the Fulcro side, I made a small fix to fulcro-rad-datomic to make it possible to get the db/id of entites. I extract the time portion of that to sort them by time when I back up orders to a Google Sheet so that newer entities are always added at the end (the thought being that I could eventually implement incremental backup, instead of wipe out &amp; insert all).I have also spent some time learning about and playing with Rama’s Clojure API, but far less than I wanted to.On the other hand, I had fun time at work, where we finally managed to unify the two sources of data we use for dashboards, thus making it simpler and more consistent, and enabling us to delete a lot of code, and even more data. (Since the common abstraction enables us to store aggregated summaries in the DB, instead of large raw data files.) It has been in the making for a year, often blocked by urgent product work, and it feels great to be finally done with it.</description><pubDate>Tue, 31 Oct 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/09-newsletter/</guid><link>https://blog.jakubholy.net/2023/09-newsletter/</link><title>Holy Dev Newsletter Sep 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningAs is often the case, the month didn’t go as planned. But it was very productive, especially for Fulcro (see below). I planned to dig more into Rama, alas…​ .For my tiny ERP, I have put in place the building blocks of the last key feature necessary for using in production, namely backups of data to a Google Sheet. This was inspired by a downtime I experienced with Fly.io’s DNS that shut down access to the app for over a day. Since the ERP is supposed to be critical for manufacturing in a small company, which cannot afford big problems, it is essential that they can access their data no matter what happens to Fly.io. A frequent backup to a G. Sheet seemed a sufficient, low-cost solution. I have learned and written about accessing Google API with OAuth2 and a service account from Clojure (without relying on Google SDK) and implemented a PoC of backing up key data from Datomic to a Sheet via the light-weight happygapi library. I still need to put in place the actual scheduled job and work on improving the feature with pushing key changes more frequently. I have also added uptime monitoring with the free plan of UptimeRobot.I have discovered pagefind.app, a Rust CLI tool that can generate static JS search engine for a bunch of HTML files, and used it to finally replace my custom Google search for the blog.The month of FulcroUsers have prompted me to fix my DIY Fulcro workshop (which required updating dependencies for jack-in to work again in Calva), and to bring back to live FulcroDemos - a growing (?🙏) set of small examples, i.e. tiny Fulcro apps exploring various problems and capabilities. I have also upgraded minimalist-fulcro-template-backendless, a minimalistic template for Fulcro apps with in-browser Pathom “backend”, to the latest dependencies (neil deps upgrade FTW!) and to finally switch it over from Pathom 2 to Pathom 3. I have been also prompted to improve colors in and warnings from fulcro-troubleshooting, a Fulcro "addon," which helps detect possible problems early, with in-app notifications.The biggest unplanned work, and the one that gave me the most satisfaction, was making it possible to live-code Fulcro applications in your browser through the power of Michiel Borkent’s SCI. You can read more about it and play with it in Include interactive Clojure/script code snippets in a web page with SCI &amp; friends. I believe it will be a boost to teaching and demonstrating Fulcro. Michiel has also asked me to help set up a static site with the editor and all the libraries with SCI support. I imagine we could hook it up with loading gists so that you could easily share editable, rendered Fulcro apps with others. I am indebted to Michiel, Tony Kay, and Thomas Heller for their invaluable help.</description><pubDate>Sat, 30 Sep 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/interactive-code-snippets-fulcro/</guid><link>https://blog.jakubholy.net/2023/interactive-code-snippets-fulcro/</link><title>Include interactive Clojure/script code snippets in a web page with SCI &amp; friends</title><description>I have long dreamt about having interactive code snippets of Fulcro in my teaching materials. Showing people code they could modify and see it render right next to it. Fulcro is a ClojureScript library, but it uses some heavy macros - and those typically require JVM Clojure. Well, not anymore. I was able to rewrite them into Borkdude’s Small Clojure Interpreter (SCI) dialect of Clojure. I.e. I can ask SCI to evaluate a piece of code with these macros, which SCI will macro-expand into more cljs, and execute. With SCI, my Fulcro sci.configs, CodeMirror, and Nextjournal’s clojure-mode, I can have a beautiful in-page editor with code evaluation. And I will show you how to do the same, for your blog.</description><pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/accessing-google-api-from-clojure/</guid><link>https://blog.jakubholy.net/2023/accessing-google-api-from-clojure/</link><title>Accessing Google API with OAuth2 and a service account from Clojure</title><description>How to turn a service account’s service.json into an access token you can actually use to call Google APIs, when you don’t want to use Google’s SDK? With Buddy’s JWT it is pretty simple, and Tim Pratley’s HappyGAPI will show us how to do it. (I believe that the same approach would work with other OAuth providers, just with changes to some of the values.)</description><pubDate>Fri, 15 Sep 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/08-newsletter/</guid><link>https://blog.jakubholy.net/2023/08-newsletter/</link><title>Holy Dev Newsletter Aug 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningRama, introThe biggest news of August is of course Nathan Marz’s Red Planet Labs coming out of stealth mode and announcing their 100x productivity backend building platform, Rama. More on that below.My ERP: from Asami to DatomicMost of my free time this month I have spent on rewriting my tiny ERP from Asami to Datomic (in particular, the embedded Datomic Local), which was surprisingly little work. I always wanted to learn and use Datomic, and since it is finally free and redistributable, I went for it. Two features of Asami were a bad match for my use case, namely its schemalessness and the fact that all attributes are multi-valued by default. Datomic has been created primarily as a transactional system for business applications, which aligns perfectly with my needs, and it has battle-tested code and a solid feature set. The only trap that caught me in the migration is that in Asami, enum values were just keywords, while in Datomic they are entities, and thus I had to add an extra join to get from id to value.Adopting Datomic and its Entity Specs and transaction functions made it possible to simplify my code. I use Specs to ensure that all required attributes are provided, and a tx fn to make sure that you cannot delete anything that other entities refer to. You need to explicitly include both in transactions, so I have extended the fulcro-rad-datomic plugin with a datomic-common/append-to-raw-txn function (fn [env txt]) → env, which makes it possible to add anything to the transactions produced by the save/delete middlewares. I also leverage :db/retractEntity, while in Asami I had to implement this myself (though as a fellow developer
Francis Avila observes, “Retract entity is not magic—it just queries for datoms and retracts them. You don’t have to use it, and in fact you often grow out of its simplistic assumptions. At shortcut we don’t use it at all because there are some attributes (with audit info) that we never want to retract”).Aside of the migration, I have also finally implemented one of the two remaining "productionalization" features, namely shipping logs to a persistent external storage, as JSON. I took the easy path (though, once again, "easy" turned out to be multiple hours of work) and leveraged Fly.io’s support for observability via NATS. I deployed the fly-log-shipper app they created, which runs the Vector "tool for building observability pipelines" to hook into NATS to start recieving all logs, processes them by the transformers I defined (to filter some out, parse to JSON, throttle so I never will have too many), and finally ships them to my Cloudflare R2 bucket via its S3-compatibility API. The bucket automatically deletes files after a few weeks. I’d like to look into adding Loki to make the logs searchable and space-optimalized, if I ever get to it. I could perhaps combine fly-log-shipper with fly-log-local, to store Loki-processed logs locally, to a persistent volume, and only back them up to R2 once a day or so. (Currently, I write them up to  every 1/2h, risking data loss during that period and higher by-operation costs.)Collators FTW!Finally, I want to share a lesson I have learned - locale-aware sorting of texts is really important to users, even for English, and it is easy to do. The default sort in both JS and Clojure produces A..Z .. a..z. If the text contains any accented characters, such the Czech "č", they will be at the very end, instead of where they belong. However, when you use a Collator for the text sort - even if it is a Collator for a different language - you will get much more appropriate results:You can do this in JS, in Clojure ((sort (Collator/getInstance (Locale/forLanguageTag "en")) ["č" "d" "c"])), and in PostgreSQL (SELECT …​ ORDER BY name COLLATE "cs_CZ.utf8").Rama, detailsI have written about RPL’s efforts to make backend development much more productive before. Now they have finally delivered. And as a proof, they have implemented a Twitter "clone" that scales linearly to at least double Twitter transaction rate, in just 9 person-months. (While other similar projects would take many tens of person-years.) It is of course best to read their thorough announcement post, but I will try to summarize _my limited understanding_ of what is Rama, the platform that made this possible?From one point of view, Rama is an immutable, distributed, partitioned database with integrated data processing, where this processing is co-located with data, and happens in a streaming or batched manner. You build distributed ETL pipelines, essentially by composing rather high-level data flows using the Rama API, to produce distributed, partitioned derived data - like materialized views, but with arbitrary structure and indexing (lists of IDs, maps of maps of stuff, …​). And you build similarly "query topologies" to run distributed queries that combine any of this data to return whatever the client needs. Rama is reactive, i.e. updates flow through the system automatically. Moreover, it provides a comprehensive solution for deploying, updating, scaling, and monitoring your code. It has high availability thanks to automatic data replication, and is very scalable, if you partition your data well, with respect to the use cases. I don’t event want to imagine how much complexity and how many diverse pieces of software would be needed to implement a robust, scalable, distributed application myself. With Rama, lot of the hard work is gone, and I can focus on the business logic.I am still at the very beginning of digging into Rama, but I will keep you posted.</description><pubDate>Thu, 31 Aug 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/07-newsletter/</guid><link>https://blog.jakubholy.net/2023/07-newsletter/</link><title>Holy Dev Newsletter July 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI have written two blog posts. The first one is my highlights from the excellent book Escaping the Build Trap. Taster: "It doesn’t matter how good you are at making software, if you are building the wrong thing. Melissa Perri’s Escaping the Build Trap is an excellent book about fostering culture focused on customer’s problems and producing value." Highly recommended!The other blogpost is When not to use Fulcro?: "Fulcro is great for writing non-trivial, full-stack business SPA web applications, which display and modify data from a general data store. But it can’t possibly be perfect for every kind of web app. So when is it less then a perfect fit? Possibly still usable, but not as beneficial?"The biggest event of the month for me has been my London Clojurians talk Why you need Fulcro, the web framework to build apps better, faster (slides). I think it went pretty well and I got some positive feedback.I have finally finished the Fulcro Cookbook recipe Solving mutually recursive elements with lazy loading with hooks and dynamic components, so have a look! Many thanks to Tony and Aram, who were instrumental in making it happen. (Gene Kim inspired me to add a live demo of the app, which I haven’t yet gotten to.)Other than that, I got some time to read, as you can see in the Gems section below :-). My favorite article was Thomas Heller’s The Lost Arts of CLJS Frontend, reminding us that we can use browser APIs directly, and that we can built anything from super-lightweight cljs frontends ~ htmx to library-heavy SPAs. The thing I haven’t read yet, which I am most looking forward to studying, is the Recife Guide (Recife if Clojure wrapper for TLA+, a formal method language for specifying systems with temporal properties and verifying that their behavior is correct.)The thing I am most excited about is Red Planet Labs coming out of the stealth-mode with their 100x productivity programming language/platform in couple of days. (I’ve have written about RPL’s efforts before.)One more thing - I haven’t mentioned previously that I maintain my Fulcro Field Notes and similarly, Fulcro RAD Field Notes, which are collections of observations from my practice and from Slack. In the former one, there is a new note on when to use React hooks in Fulcro. (See also the Cookbook’s recipes' insights section for why using hooks is not ideal.)Other Fulcro highlightsGene Kim (yes, the one) has published a series of recordings pair-programming sessions between himself and Tony Kay (and sometimes myself), as he builds a couple of Fulcro RAD-based applications. He came to Fulcro as a true beginner, so everyone can learn something from these. (You can find it listed at Awesome Fulcro.) Bunch of these have pretty detailed descriptions, which helps you find the parts interesting to you. You will learn a lot about design both in general, and in the context of Fulcro.</description><pubDate>Mon, 31 Jul 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/when-not-to-use-fulcro/</guid><link>https://blog.jakubholy.net/2023/when-not-to-use-fulcro/</link><title>When not to use Fulcro?</title><description>Fulcro is great for writing non-trivial, full-stack business SPA web applications, which display and modify data from a general data store. But it can’t possibly be perfect for every kind of web app. So when is it less then a perfect fit? Possibly still usable, but not as beneficial?</description><pubDate>Fri, 28 Jul 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/book-highlights-escaping-the-build-trap/</guid><link>https://blog.jakubholy.net/2023/book-highlights-escaping-the-build-trap/</link><title>Book highlights: Escaping the Build Trap: How Effective Product Management Creates Real Value</title><description>It doesn’t matter how good you are at making software, if you are building the wrong thing. Melissa Perri’s Escaping the Build Trap is an excellent book about fostering culture focused on customer’s problems and producing value. A way too common pitfall is focusing on building features, based on vague, unverified ideas of what customers need or want. (This is the build trap, a.k.a. feature factory trap.) But, as the books says, we should love the problem, not the solution. And we need to assume that we don’t know perfectly what the customers need. I would add, that we can surely build tons of useful features - but the hard question is, which time &amp; effort investments are the most valuable ones, and where the cost of writing and maintaining the code and the consequential increase in complexity are not worth it. Remember, every line of code is a liability.I have already been pretty much of this mindset (after all, I have read and appreciated The Lean Startup years ago), but still I learned useful things, and remembered others. Some highlights follow. They are rather personal, for a more objective and thorough overview, I highly recommend Julia Park’s 11 Key Learnings from this book.</description><pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/06-newsletter/</guid><link>https://blog.jakubholy.net/2023/06-newsletter/</link><title>Holy Dev Newsletter June 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningHow is it July already? Where is all the time disappearing? This has been a surprising short month, despite its 30 days. On the bright side, I managed to finish my small Fulcro and Asami ERP. It is not fully productionalised, but it is finished functionality-wise and I am eager to start the rewrite to Datomic. Asami was a great learning experience, but the schemalesness of more a hindrance then a benefit in my case. But mostly I am running into limitations due to the fact that I use it for something else then it was designed for, which forced be e.g. to implement my own "cascading delete". Now that Datomic is free, and with people having good experience running it in the "dev", embedded mode in production over many years, it seems as a far better choice. Though only time will tell. I am even more excited about the next project, which is rewriting the app with Electric Clojure to get practical experience with this approach. Though mythical creatures know when / whether I will get to it.A bonus clojure.core gem: thanks to Michiel Borkent, I have learned of (force x): if x is a Delay then it is deref-ed, otherwise it is returned as-is. Thus I can simply (force x) instead of (if (delay? x) @x x). Nice!I have previously mentioned that we started on a Fulcro Cookbook. The first recipe, Solving mutually recursive elements with lazy loading with hooks and dynamic components is mostly done text- and image-wise. I just need to align, clean up, and explain better the code. A lot of time went into the "plumbing," to ensure images are included and look well, and to make the example code executable. So check it out! I am not sure about future progress, as Tony is extremely busy. He left me with some code I can turn into two more recipes, but I am rather busy myself. So we will see.Lastly, 11th of July and my talk about Fulcro is approaching fast. So I will stop typing now and go practice. See you there!</description><pubDate>Fri, 30 Jun 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/05-newsletter/</guid><link>https://blog.jakubholy.net/2023/05-newsletter/</link><title>Holy Dev Newsletter May 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningI am still finishing the tiny Fulcro ERP. This led to implementing support for "cascading delete" so that when a reference from an owner to an owned entity - e.g. from an Order to an OrderLine - is removed then the whole owned entity is deleted. I have also had some questions about subform validation, which prompted Tony to enable automatic validation of "edges" (so that an Order may require to have some OrderLines) and to also validate attributes of nested forms instead of just the top form. (This previously required a custom form validator.)I am also helping Tony and Aram Zadikian with a new, exciting project to produce regularly Fulcro content of various kind, aimed at both beginners and more experienced users. We plan to produce some practical, cookbook-like articles, more design-oriented ones (like why things work the way they do, how to “think” Fulcro, etc.), and “success stories” (e.g. porting a non-trivial full-stack SPA to front-end-only in a day). You can see the initial, very rough draft of the cookbook with a first example here.Finally, I have been to an excellent in-person meetup about Datomic here in Oslo. We learned about the benefits of Datomic our friends have experienced over a decade of using it, explored how to use it in code, and heard about its architecture and how to operate it (according to the DBA, he had never so few production problems with a database as with Datomic.)</description><pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/04-newsletter/</guid><link>https://blog.jakubholy.net/2023/04-newsletter/</link><title>Holy Dev Newsletter April 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningApril has been an exciting month, as I have visited the ultimite world Clojure conference, namely Conj in the US. There have been some excellent talks, some good ones, and some disappointing ones. The best part was of course meeting people, especially those I only knew online, until now. You can see all the talks at YouTube. I especially enjoyed Rich’s talk on design, and Gaining Constant time Lookup over Unorganized Data, which demonstrates the desing process in practice, and describes how Nubank arrived to a disk-based hash map as an efficient solution to a problem recurring in different contexts. State of XTDB, Clojure for Data Science in the Real World, Operating Datomic at Scale, and Joyful Cross platform Development with ClojureDart were certainly worth listening to, if you have any interest in the topics. High Performance Clojure was an exciting deep dive into lessons Chris learned optimizing his data processing and parsing libraries. I have only seen the later half of How to build a Clojure dialect, which isn’t relevant to anything I do, but was really well presented and fun, so I want to see it whole. The talk Clojure in the Fintech Ecosystem wasn’t very technical but it was anyway inspirational to me, especially in regards to Clojure for Data Science and learning how only the arrival of NumPy turned Python into the essential tool of data science it is today - and thus, how Clojure could do the same trick. Emmy: Moldable Physics and Lispy Microworlds demonstrated a library for symbolic computations in Clojure, which is far removed from what I do, but is fascinating anyway, and it proved how crucial it is to build the proper language to solve a class of problems. I cannot imagine building the demos Sam presented without the library, with just a general purpose programming language. I haven’t learned much from Real @toms with Clojure! but it was fascinating to see a mathematician and a physicist giving a talk at a programming conference, and to see how the Clojure Data Science stack can be used for everything you need for a scientific paper, from data collection, to processing, to presentation (with fallback on Python libraries and Wolfram, accessible through Clojure bridges, where native capabilities lack for now). Next, we need to figure out how to reach out to scientists and help them adopt this, and how to make it as easy as possible for them, since they are busy with science, and not interested in learning programming, dealing with integration issues, or learning development best practices.There is a couple of talks I haven’t seen but want to check out - Fluree: an Immutable, Verifiable, Shareable Database, Architecting systems through Engineering Principles, Clojure lsp – One tool to lint them all (it was wonderful finally meeting Eric in person!), BI and Reporting for Datomic, and Modern Frontend on ClojureScript and React in 2023 (just for a comparison with Fulcro).📖 tips: On the plane I have also done some reading. Namely I have started to re-read the excellent "business novel" Phoenix Project. The book is a real page turner, and teaches extremely valuable lessons - some that I have forgotten since my first reading many years ago. 💯 recommended to (re)read! I have also finally read the follow up, the Unicorn Project, which explores the topic of what developers need to thrive and be maximally productive (the "Five Ideals"), and what companies need to do to stay relevant and not decline (the "Three Horizons"). The beginning was somewhat disappointing, a little forced and far less gripping than the Phoneix Project, but eventually the story really takes off and in the end it was absolutely worth reading. Even if the tech organization starts in a hellish place far removed from my working conditions, it goes through a rapid transformation and there are valuable lessons along to way for everyone. The maxim I keep repeating to myself is that the improvement of daily work is more important then the work itself (I guess unless you only improve and never do the work 😀). Finally, I have started on Escaping the Build Trap: How Effective Product Management Creates Real Value, recommended to me when I worried about prioritizing and managing all the incoming work. For me as a developer manager, it would suffice with an abridged version if someone made one targetted at me :-). But it is good to get an insight into the product management part of the organization. I have studied Lean Startup before, so a bunch of the ideas wasn’t really new, but I guess it never harms to remind us that management should set the direction, but let (value stream focused) teams figure out how to get there, through relentless focus on actual customer problems, and experimentation about that and possible solutions. A noteworthy point was that a corporate strategy shouldn’t need to change often, and that it isn’t a plan but a framework for making decisions. I also liked the hierarchy of vision - strategic intent - project intent (which merges with the previous one, if your company only has one product) - and "options," i.e. yet unverified ideas for achieving the intent. And the "product kata" - identify a goal, asses where you are with respect to it, discover the biggest problem between you and the goal, form a hypothesis how to get rid of it, experiment, evaluate. Rinse and repeat.🛠️ I have also done some more coding on fulcro-rad-asami, essentially to add support for cascading delete, which will simplify implementing the last feature in the tiny ERP I am building. I only need to fix the tests…​</description><pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/03-newsletter/</guid><link>https://blog.jakubholy.net/2023/03-newsletter/</link><title>Holy Dev Newsletter March 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts.
You can get the next one into your mailbox if you subscribe.What is happeningTime is flying! This has been an intense period at work, which occupied most of my time, together with a little help I provided to two clients and coding the Fulcro ERP. When you maintain reporting capability for end users and have to upgrade the underlying query engine, which has extremely flexible and badly documented semantics and doesn’t care enough about backwards compatibility and stability, you are in for a treat. Hopefully, thanks to a few good ideas and lot of work, it is over with minimal impact on customers 😮‍💨. But it drives home how awesome the Clojure philosophy of stability and not breaking contracts is.The ERP is hopefully drawing to a close (the final 20%?  😅). Right now I am refactoring from a monolithic order to an order with potentially multiple order lines, which is an interesting experience. I had to model this, move a bunch of attributes over, redesign my reports and forms, rewrite most queries, and implement cascading delete. Fortunately doable but not trivial. Some fallout from that is that fulcro-rad-asami has got docs improvements and the ::asami/no-batch? option to work around a Pathom 3 problem. (Troubleshooting it was quite an ordeal, and I am very thankful to Caleb MacDonald Black and Wilker for their help.)I have published minimalist-fulcro-template-fly, which extends the existing minimalist-fulcro-template with support for building and deploying it to the Fly.io cloud, and with connectivity to PostgreSQL. I had picked this DB because I expected most developers to be familiar with relational databases, while something like Asami is more obscure, and less universally applicable.Outside of Clojure, I have stretched my feable CSS skills to add dark mode to my blog, when I noticed how impractical it was to read it in the dark. And these last few days I have been playing with Clerk, to analyze REST communication around some issues at work.In the wider world, Electric Clojure (see below) has been finally released in v1.0, and I am looking forward to trying it out. Perhaps I will try to rewrite the ERP with it (after it is done!), to see how it delivers on its promise of simplifying web development. Overall, I feel the pull of doing more work on the backend and less on the frontend, retreating from the world of SPAs, and looking for more simplicity. As you can see from some of the links posted below.Lastly, I am going to attend Conj 🎉 and thus spent some time designing a Fulcro t-shirt to wear at the conference :-).</description><pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/pathom-viz-for-fulcro-pathom3/</guid><link>https://blog.jakubholy.net/2023/pathom-viz-for-fulcro-pathom3/</link><title>Get insight into Pathom 3 in Fulcro with Pathom Viz</title><description>Fulcro has great dev tooling in Fulcro Inspect, however the part for exploring Pathom resolvers and attributes - its Index Explorer - is not compatible with Pathom 3. Here we learn what to do about it.</description><pubDate>Wed, 01 Feb 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/02-newsletter/</guid><link>https://blog.jakubholy.net/2023/02-newsletter/</link><title>Holy Dev Newsletter February 2023</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningI’am been busy working on the small Fulcro RAD ERP system for a friend. I have leveraged the work to publish a couple of live coding videos:Fulcro live coding: Delete mutation to list of dependants, part 1 - I create a custom mutation that only deletes an entity if nothing depends on it. If there are any dependants then it displays a popup with a list of these entities …​ (sorry for the terrible sound, it is better in all future recordings)Fulcro live coding: Delete mutation to list of dependants, part 2Fulcro live coding 3 - Simplify with UISM - here I learn how to replace complicated logic in a component and mutations with a UI state machineI have also created an archive of all past newsletters so you can more easily find interesting links you know I have mentioned.Finally, I am starting a new Fulcro teaching video series with a friend, where we will go from (almost) 0 to a Fulcro app in production. I will keep you posted :-).</description><pubDate>Wed, 01 Feb 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2023/01-newsletter/</guid><link>https://blog.jakubholy.net/2023/01-newsletter/</link><title>Holy Dev Newsletter January 2023 &amp; December 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe. This time it is a double issue because I obviously forgot to publish in December 😅.What I am thinking aboutI have long felt that software development is wrong. It takes too much effort to build and maintain stuff. Why??? I see three primary causes:Lack of knowledge, in two areas:(intrinsic) the problem itself - we do not understand it well enough and need to experiment and research; this is an intrinsic part of the job(extrinsic) our tools - i.e. we do not understand enough the programming language and the technology we use; I believe/hope there must be much better way of preventing this wastethis is exacerbated by the lack of observability, i.e. our inability to see clearly what is happening in the system and our code; something Bret Victor talked a lot aboutLanguage not fit to talk about the solution and problem - a topic I explore in a recent postComplexity, both intrinsic (real world is a dirty beast) and extrinsic (related closely to #2) - I have mused about complexity in SW development beforeIf you have any thoughts on this topic, please let me know!</description><pubDate>Tue, 31 Jan 2023 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/language-of-simplicity/</guid><link>https://blog.jakubholy.net/2022/language-of-simplicity/</link><title>First craft a language then build your software</title><description>A language suit for purpose enables us to express our thoughts clearly and concisely. In programming, this language consists of our actual programming language, the libraries we use, and the abstractions we build. I believe that most of the incidental complexity in code stems from an unsuitable language. A misfit language forces you to speak in a lengthy and roundabout way, never quite getting at what you actually want to say.Imagine you lacked the word "snow" and had to always say "white, fluffy, crystalline, frozen water". Now imagine you are writing instructions for waxing of cross-country skiis and you lack the words for snow, skiis, and the different kinds and states of snow. How verbose and incredibly hard to understand that would be! And this is exactly how most of our code looks. As Alan Kay puts it: "Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves." [Kay] Let’s explore this idea further.</description><pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/2022-in-review/</guid><link>https://blog.jakubholy.net/2022/2022-in-review/</link><title>My year 2022 in review</title><description>2022 has been a busy year both geopolitically ❤️🇺🇦 and locally. I have done a ton of Fulcro, played with Rust, got into managing projects and people.This is my first whole year in Ardoq and I am still loving it. I came to fullfil my dream of being full-time Clojure developer and (aside of that, because I still love Clojure!) I am staying for the friendly, open "big family" culture and awesome people. I started the year by working on our slow, stepwise transition from Mongo to Postgres (I still might one day write about why we sadly did not pick Datomic in the end 😭). It was an important and exciting task. As changing the DB your business is built on, while everything keeps running, always is. Later I took over one of our teams, helping it deliver faster, smaller, more frequently. I have also been pulled into hiring and people management, which is not as much fun as Clojure but is far more important. I still have a great deal to learn here.</description><pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/fulcro-detached-root-component/</guid><link>https://blog.jakubholy.net/2022/fulcro-detached-root-component/</link><title>Fulcro Lesson: Detached Root Component (Form)</title><description>I am working on a Fulcro RAD application and want to display a RAD Form in a popup, to create a new customer for an order I am making. Normally Fulcro components are "composed all the way up to the root," including their query in the parent’s and getting their props from the parent. But that does not make sense here - I want a detached form I can pop up, fill, close, and go back to editing the order. I wasn’t able to figure out how to compose this without help and thus want to record the solution.</description><pubDate>Tue, 27 Dec 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/trinity-of-clojure/</guid><link>https://blog.jakubholy.net/2022/trinity-of-clojure/</link><title>Clojure is in fact a trinity - of language, interactive development, and structural editing</title><description>You can never really learn Clojure if you only focus on the language. Why? Because Clojure is in fact a synergetic combination of three things: the language itself, a way of working centered on interactive development, and structural editing support in editors for manipulating the code safely and efficiently. You cannot get the full benefits of Clojure unless you embrace all three.</description><pubDate>Mon, 12 Dec 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/11-newsletter/</guid><link>https://blog.jakubholy.net/2022/11-newsletter/</link><title>Holy Dev Newsletter November 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningI have helped recently on a large JavaScript and React frontend and have been shocked by its complexity. So I am trying to understand how to make frontends simple (which is not easy :)). It lead so far to my study of "A simple front-end architecture that works" (presented below). Stay tuned! On a related note, I am reading the 2012 report from the STEPS project, which postulates that our codebases are 100, 1000 times larger than they need to be (oh yes!) and explores ways to improve that. Their approach is to use small, purpose-built languages and it produces very promising results.</description><pubDate>Wed, 30 Nov 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/10-newsletter/</guid><link>https://blog.jakubholy.net/2022/10-newsletter/</link><title>Holy Dev Newsletter October 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe. Sorry for the delay in publishing this edition, I was having too much fun with Rust.What is happeningNot much. I have experimented a little more with img-mg and found out that showing previews of many photos as quickly as I want might not be possible even with Rust. I have also small patch to the Ragtime DB migration library to make it respect Thread.isInterrupted and stop, which we use to gracefully stop all jobs when we are about to restart the app.
I am also exploring using Portal as a production troubleshooting tool, that enables developers to navigate data and trigger functions, as a safer alternative to a full REPL access. I’ll keep you posted.</description><pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/postgres-json-to-table-and-back/</guid><link>https://blog.jakubholy.net/2022/postgres-json-to-table-and-back/</link><title>PostgreSQL: From JSON to table and back</title><description>I have a jsonb column in Postgres and I would like to update parts of it based on some other parts of the value. In Clojure I would have used update, which does new-value = f(old-value). How can I achieve something similar - i.e. deriving the new value from the old one - in Postgres? It turns out I can, with the help of a temporary table and jsonb_to_recordset that can turn a jsonb value into a table and row_to_json + jsonb_agg that can turn that back to jsonb. Let’s see how it works.The dataI have a table called report with the primary key _id and jsonb column columns. It looks like this:123[{"key": "name", "type": "field", "label": "Name"}, {"key": "Supports", "type": "reference-type-outgoing", "label": "Supports"}, …​]456[{"key": "name", "type": "custom", "label": "Name", "dataType": "Text", "sort": "ASC"}]789[]Notice that the objects in the array may have different keys.What I want to do is to update every column of the type reference-type-outgoing or reference-type-incoming by appending the direction - outgoing or incoming - to the key. F.ex. the column above would become {"key": "Supports—​outgoing", "type": "reference-type-outgoing", …​.</description><pubDate>Sat, 22 Oct 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/git-commit-signature-with-1password/</guid><link>https://blog.jakubholy.net/2022/git-commit-signature-with-1password/</link><title>Signing git commits with a ssh key using 1Password</title><description>The Sign your Git commits with 1Password post is really useful but it does not tell you how to verify that signing works, how to troubleshoot it, or how to make it possible to verify the signatures locally. I will explain that here. The short story is that you need to set up gpg.ssh.allowedSignersFile and add your key there to be able to use git log --show-signature.First of all, the setup as described in the blog post works and you can display the signature after having made a commit with git show --pretty=raw - notice the line with gpgsig …​ and those below it:</description><pubDate>Tue, 11 Oct 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/09-newsletter/</guid><link>https://blog.jakubholy.net/2022/09-newsletter/</link><title>Holy Dev Newsletter September 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningFulcro: I have contributed a tiny change to Fulcro that will stop begginners from scratching their heads and wondering where did their data disappear when they return a lazy list from a Pathom resolver instead of a vector. Surprisingly many have run into this lately. I have also finally created the bigger brother of my minimalist-fulcro-template-backendless, the full-stack minimalist-fulcro-template, this one built on Pathom 3.Other: I held two workshops at NDC Oslo - Web development from the future, which shares lessons from the awesome desing of Fulcro with a non-Clojure audience, and Experience interactive development while creating a REST service without a single restart, which introduces REPL-driven developement to non-clojurians. I had tiny but engaged audienced and was pleasantly surprised that anyone showed up :-). I have also started preparing an internal conference here at Ardoq, which will be fun. I had to pause my work on my rust img-mg to do other stuff (such as prepare my workshops and fix user data in production) but hope to get back soon.</description><pubDate>Fri, 30 Sep 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/08-newsletter/</guid><link>https://blog.jakubholy.net/2022/08-newsletter/</link><title>Holy Dev Newsletter August 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningI spent most of August with my family and off computer, which was awesome. Obviously it made me eager to get back to coding so when I was asked to organize our summer pictures, I did what every sensible person would and have started writing my own image organizer gui. In Rust, a language I barely know. Of course not a single picture has been organized yet 😅. But after a few years of dabbling in Rust, I will perhaps finally learn it. And I might even end up with a tool that won’t frustrate me to infinity when doing my picture duties.
Why Rust? Because performance is crucial here. I want to have thumbnails of sufficient size, I want to be able to browse quickly through hundreds of pictures, and I want to see them in max size without waiting forever. You can keep an eye on my (mis)adventures at https://github.com/holyjak/img-mg</description><pubDate>Wed, 31 Aug 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/07-newsletter/</guid><link>https://blog.jakubholy.net/2022/07-newsletter/</link><title>Holy Dev Newsletter July 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningThanks to a client I have explored how to integrate Fulcro components with vanilla JS higher-order components that render the target Fulcro component (possibly requiring to be passed a class, not an actual element) and/or want to pass it a "ref" to get / provide access to a DOM element. You can read all about it in Using React.forwardRef in Fulcro (and rendering a Fulcro component from a JS one). I have also got my improvements to Asami merged and thus have been able to release the first, alpha version of fulcro-rad-asami for using Asami is the database backing a Fulcro RAD app. Other than that, I have had great two weeks of vacation with friends and family :-)</description><pubDate>Sun, 31 Jul 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/forward-ref-in-fulcro/</guid><link>https://blog.jakubholy.net/2022/forward-ref-in-fulcro/</link><title>Using React.forwardRef in Fulcro (and rendering a Fulcro component from a JS one)</title><description>How (and why) do you use React.forwardRef in Fulcro? Let’s first explore ref. When you need access to the raw HTMLElement in React - f.ex. to call .focus on it - you need to create a Ref object[1] (similar to Clojure’s atoms) and pass it to a React DOM element such as dom/div via the magical property :ref. React will then do something like "(reset! &lt;the Ref> &lt;the raw element>)" so that you can access the raw element in your code: (some→ &lt;the Ref> .-current .focus). The :ref property is magical in the regard that it is "consumed" by React itself and not passed to the component. But what if you make a custom component and want it to be able to take a Ref object to attach it to its child DOM element? The simplest solution is to pass it under any other name than the reserved ref, which is exactly what this Fulcro examples does, using the custom :forwarded-ref. However, some 3rd party higher-order components insist on passing the Ref down using the reserved ref property name. To make it possibly, React invented forwardRef:</description><pubDate>Sun, 03 Jul 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/06-newsletter/</guid><link>https://blog.jakubholy.net/2022/06-newsletter/</link><title>Holy Dev Newsletter June 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningI hadn’t much time this month, though I managed to write a new blog post about a topic that is often confusing to newcomers (it was ti me!) - The trouble with list components in Fulcro. I have also got my mind blown by the complexity of our TypeScript and React frontend and set out on a quest to better understand where it stems from and if there is a way to tame it. (Just as the the Grug Brained Developer, I too would prefer an encounter with a T-Rex to one with Complexity). Of course my weapon of choice is Fulcro and ClojureScript. So far I have learned that there might be very good reasons to prefer TypeScript over cljs for interop-heavy apps, at least until (if ever) the editor support gets better. But a lost battle is not a lost war and I push on.</description><pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/trouble-with-lists-in-fulcro/</guid><link>https://blog.jakubholy.net/2022/trouble-with-lists-in-fulcro/</link><title>The trouble with list components in Fulcro</title><description>Imagine you have a list of things to display in your UI. You naturally want to represent them with a list component, such as a TodoList. But that is not the way we do it in Fulcro, which beginners find confusing (I did). Here I explain why and what are the alternatives.Still new to Fulcro? Make sure to check out my Minimalist Full-Stack Fulcro Tutorial!</description><pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/05-newsletter/</guid><link>https://blog.jakubholy.net/2022/05-newsletter/</link><title>Holy Dev Newsletter May 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningNot much :) I am waiting for my PR to Asami to get through so that I can resume work on the Fulcro RAD Asami plugin and I am busy helping a client turning his idea into a Fulcro-powered product. I am pleased to have got one of my workshops accepted to NDC Oslo, but I don’t know yet which one, whether the Fulcro intro or interactive development. The weather here is turning summery, which is awesome. I hope you are also having great time!</description><pubDate>Tue, 31 May 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/04-newsletter/</guid><link>https://blog.jakubholy.net/2022/04-newsletter/</link><title>Holy Dev Newsletter April 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What is happeningI am busy helping folks with their Fulcro projects so I hadn’t much time for anything else. I am progressing occasionally with the Fulcro RAD Asami plugin but got delayed by having to work around some limitations of Asami. I am also helping to get the Clojure client for Wolfram to the finish line (we need a new repo, code cleanup, and updated docs).</description><pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/03-newsletter/</guid><link>https://blog.jakubholy.net/2022/03-newsletter/</link><title>Holy Dev Newsletter March 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What I am watchingI have been long interested in formal methods and better way to make sure that our algorithms and code are correct. TLA+ is a popular high-level language for modeling and testing the design of algorithms and this free TLA+ video course by its father and Turing Award winner Leslie Lamport is really
TLA+
By Leslie Lamport (won the Turing Award)
Approachable, engaging, motivating.TLA+ is “A language for high-level modeling of digital systems.” [such as altos, programs] &amp; has tools for checking those models, primarily the TLC model checkerModel as a state machineModel at a higher level to check your design (algorithm, …)“TLA+ is an elegant, expressive language for describing state machines.”“For concurrent and distributed systems, if you design them and care if they work, you should use TLA+”“TLA+ will teach you to be better at abstraction.”Brannon Batson said ±-: The hard part of learning to write TLA+ specs is learning to think abstractly about the system.</description><pubDate>Thu, 31 Mar 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/02-newsletter/</guid><link>https://blog.jakubholy.net/2022/02-newsletter/</link><title>Holy Dev Newsletter February 2022</title><description>Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.I don’t have words for what is happening in the world. I hope you are all safe and that peace and compassion will eventually prevail.</description><pubDate>Mon, 28 Feb 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/code-study-making-it-functional/</guid><link>https://blog.jakubholy.net/2022/code-study-making-it-functional/</link><title>Code Study: Making code more functional</title><description>Having a pure function, what makes it more or less "functional" (as in "functional programming")? To me, "functional" includes favouring higher-level constructs over low-level "bit twiddling". Here I would like to demonstrate how I made one function more functional in this regard.</description><pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2022/01-newsletter/</guid><link>https://blog.jakubholy.net/2022/01-newsletter/</link><title>Holy Dev Newsletter January 2022</title><description>Welcome to the very first issue of Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.What’s going on: Two years ago I finished my first month of Rust and now I am finally getting back to studying it, while also learning about security and hacking via the Black Hat Rust book. I am enamored with Clojure yet I find it worthwile learning a language in a way opposite to it, regarding typing and low-level resource control, one applicable in domains where Clojure is not.</description><pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/troubleshooting-fulcro/</guid><link>https://blog.jakubholy.net/2020/troubleshooting-fulcro/</link><title>Fulcro Troubleshooting Decision Tree</title><description>A decision tree to help you go from a problem to the most appropriate troubleshooting steps.</description><pubDate>Fri, 21 Jan 2022 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/2021-in-review/</guid><link>https://blog.jakubholy.net/2021/2021-in-review/</link><title>My year 2021 in review</title><description>My professional year 2021 has been a year of Fulcro and Clojure. I have finally become a full-time Clojure developer and I have created a ton of resources for Fulcro beginners to ease and speed up their onboarding. To help them even more, while respecting the preciousness of time, I have started my company Holy Dev to provide mentoring and pair-programming to Fulcro learners. And I have written a few more essays about productivity and concepts such as simplicity on this blog.</description><pubDate>Fri, 31 Dec 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/awesome-babashka-dash/</guid><link>https://blog.jakubholy.net/2021/awesome-babashka-dash/</link><title>Awesome Babashka: Parse &amp; produce HTML and SQLite</title><description>Babashka is a lightning-fast Clojure scripting tool with batteries included. It provided almost everything I needed to turn an AsciiDoctor document into a SQLite database and HTML in the format Dash - the offline documentation browser - requires to use it as a navigable, searchable "docset". While Babashka offers a lot out of the box, it can be further extended leveraging a number of available "pods" or extensions. This is a brief story of how I used Babashka to glue together Hickory, Selmer, and SQLite to make my html2dash.bb script.</description><pubDate>Sat, 25 Sep 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/light-exploration-of-collaborative-editing/</guid><link>https://blog.jakubholy.net/2021/light-exploration-of-collaborative-editing/</link><title>A light exploration of collaborative editing and synchronization algorithms</title><description>An important feature of Ardoq is that multiple users can edit the same model, i.e. a directed multi-graph. Changes from one user need to be propagated to the others and merged into their models. Collaborative editing (primarily of text) has reportedly been researched for 30 years and is still under active development. Here I share my field notes from learning about it briefly, without much tidying.</description><pubDate>Thu, 19 Aug 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/simplicity/</guid><link>https://blog.jakubholy.net/2021/simplicity/</link><title>What is simplicity in programming and why does it matter?</title><description>When I started with Clojure, I saw a language. Some people, when they look at it, they only see a weird syntax. It took me years to realize that in truth Clojure is a philosophy. The language embodies it, the ecosystem embraces it and grows from it, you the developer eventually soak it up.The philosophy is simplicity - on a very profound level - and, to a lesser degree, ergonomics [1]. What do I mean by simplicity and ergonomics? Simplicity is about breaking things apart into their elementary constituents that are orthogonal to each other. Ergonomics is about making it possible and convenient to combine these elements in arbitrary, powerful ways. You end up with simple things that have single responsibility and that you can combine freely to suit your unique needs. These elements are simple but also generic and thus applicable in many situations and usable in many ways. This is crucial also for flexibility:</description><pubDate>Fri, 25 Jun 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/clojure-is-frustrating-fortunately/</guid><link>https://blog.jakubholy.net/2021/clojure-is-frustrating-fortunately/</link><title>Clojure is frustrating... and it is a good thing</title><description>n 2016, the Clojure core team announced Clojure Spec, the most important addition to Clojure since v1.0.0. Spec allows you to describe and verify the shape of data (and much more) in a somewhat unique way. Having experienced developing a webshop from scratch in the dynamically typed JavaScript/Node.js, with the code growing in complexity and team in size, I very much appreciated the value of describing and checking data against a schema at important points of the program (without being swamped by doing it everywhere). In 2018 Rich Hickey in his talk Maybe Not discussed some shortcomings of Spec - some of which I have experienced personally - and work on Spec 2 started to address those and some limitations. I was fired up because Spec was great - and Spec 2 seemed to be perfect. I waited, and waited, …​ and waited. It is 2021 and Spec 2 is still nowhere in sight. That is truly frustrating. Similarly it has been with other design developments in Clojure such as named arguments. And it is, despite all my frustration, very, very important that it is this way.</description><pubDate>Mon, 21 Jun 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/specific-vs-general-cryogen/</guid><link>https://blog.jakubholy.net/2021/specific-vs-general-cryogen/</link><title>Specific vs. general: Which is better?</title><description>If you want your blog’s tag list to also show the tags' frequency, what is better? Adding the very specific feature of frequency computation to the blog engine or making it possible to supply a custom function that takes the whole program state and can return a new version of it (including e.g. tag frequencies)? I want to argue that in this case the latter is far superior.</description><pubDate>Thu, 10 Jun 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/productivity-killers-in-enterprise/</guid><link>https://blog.jakubholy.net/2021/productivity-killers-in-enterprise/</link><title>Productivity killers in enterprise programming - and how to overcome them</title><description>This article is about "the death [of productivity] by thousand cuts" - about the many obstacles that make enterprise development unnecessarily slow, costly, and painful. And it is about the "invisible cost" of ignoring them. I look at the top obstacles that we encounter and at what we could do about them. I argue that we must prioritize great developer experience and invest into our tools and into simplicity - and that this will yeld benefits both to developers and to the business. Those in power need to realize that developer happiness isn’t about perks, huge monitors, and relaxation pods (though those would be cool!). It is, to a large extent, about our ability to do our job without hindrances and thus it is about delivering more value, faster.</description><pubDate>Wed, 09 Jun 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2021/slow-restarts-rescued-by-clojure/</guid><link>https://blog.jakubholy.net/2021/slow-restarts-rescued-by-clojure/</link><title>Slow restarts are killing your productivity. Can Clojure save you?</title><description>Our Java and Spring webapp may take 5-10 min to restart after a change on my PC, especially when something else (such as IntelliJ) is using the CPU. On Friday I was trying to factor out a new endpoint and it took me about three attempts to get it right. Every time I had to wait for the behemoth to restart to discover that my code was still broken.And that is why I love Clojure with its interactive development, which provides me an immediate feedback. You could argue that if only I knew Spring better and were a better programmer, I could have made the change right the first time. And you would be right. But I am not that good and, even though I like learning, I do not feel like learning Spring perfectly before coding anything. (I would actually prefer not to have to learn Spring at all, but that is another story.)</description><pubDate>Sun, 30 May 2021 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/fulcro-divergent-ui-data/</guid><link>https://blog.jakubholy.net/2020/fulcro-divergent-ui-data/</link><title>Fulcro Explained: When UI Components and Data Entities Diverge</title><description>Fulcro’s stateful components serve normally both as elements of the UI and to define the data model, i.e. data entities with their unique IDs and attributes. And that is what you want 95% of the time. But what if your UI and data model needs diverge?We will take a look at what different kinds of divergence between the UI and data entities you might encounter and how to solve them.Updated: 2021-11-6</description><pubDate>Wed, 30 Dec 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/customizing-gradle-run-task/</guid><link>https://blog.jakubholy.net/2020/customizing-gradle-run-task/</link><title>Customizing the Gradle run task</title><description>The Gradle application plugin provides you with a run task to run your Java application (provided you have set the mainClassName). But how do you customize it, e.g. by setting extra JVM arguments? No amount of searching helped me so I want to share what I have learned.The run task is of the type JavaExec and accepts the same settings, such as args, debug, debugOptions, jvmArgs, environment, systemProperties. And you can configure it simply by declaring it:</description><pubDate>Wed, 11 Nov 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/best-team-ever/</guid><link>https://blog.jakubholy.net/2020/best-team-ever/</link><title>The best team ever</title><description>What makes a great team? How to make our teams great? I want to contribute to the answer by sharing the experience of the best team I have ever been on. This team of 3 + 2 has challenged the established way of working, bringing development in-house and together with the business, replacing a shelf product with a purpose-built one, going from on-premise to the cloud and from e-mail to Slack, from Java to JavaScript, with the first production release being a single product page "pasted" on top of the existing application. We were productive and happy.So what was so great about this team? In short - problem, people, power (and fun).</description><pubDate>Sun, 01 Nov 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/spring-nevermore/</guid><link>https://blog.jakubholy.net/2020/spring-nevermore/</link><title>Spring Framework: Why I prefer a simpler solution nowadays</title><description> Once upon a time, the Spring Framework provided a much more lightweight and flexible solution than J2EE. Even in around 2013 I was happy to learn in detail about the then new Spring 4. Nowadays, 7 years later, when I see Spring, I get a panic attack. Annotations and @ComponentScan have replaced XML with something nicer - that requires a visualization tool to understand your system. And Spring has become a hydra that keeps on growing (and changing) heads. I have suffered through taking over and trying to understand a Spring application written by others. And, last but not least, Clojure has taught me how simple code can/should be. So what are my main issues with Spring?</description><pubDate>Fri, 23 Oct 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/talk-want-more-from-your-frontend-framework/</guid><link>https://blog.jakubholy.net/2020/talk-want-more-from-your-frontend-framework/</link><title>Want more from your frontend framework! Re-thinking web dev experience</title><description>An extended transcript of my talk at DevFest Norway 2020 (slides here).Do you also love creating useful (web)apps and get easily frustrated by any friction in the development process? I will compare Redux + REST with a full-stack, component-centric solution based on a graph API (think GraphQL) that I came to love. You might not be able to use the same framework - Fulcro - but you can still look for similar, more developer-friendly solutions that implement some of the same ideas and provide some of the same functionality. We will discuss REST vs. Graph APIs, networking, error handling, and more. (You should have an idea about React, Redux, and GraphQL to gain most out of this.)</description><pubDate>Thu, 15 Oct 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/troubleshooting-friendly-responses/</guid><link>https://blog.jakubholy.net/2020/troubleshooting-friendly-responses/</link><title>On crafting troubleshooting-friendly responses in web apps</title><description>Once again I have wasted 1-2 hours trying to figure out where the damn "403 Forbidden" was coming from. Yet, with a little forethought and a few seconds or minutes of time, hours could have been saved on such cases. This one would have  been trivial if this was already in place, instead of the original, spartan response.sendError(403):I would know to look into HomeController and that there is no problem with that particular user’s credentials. I could also search the code for that error message.In total I have certainly spent days hunting for the source of HTTP errors, especially auth-related ones. So I beg you, when you write any error-handling or secondary-flow code, think about the poor person who is going to troubleshoot it and give her - likely your future self - friendly hints instead of ugly, useless 403 Forbidden / 401 Unauthorized / 500 Internal Server Error / …​. Let’s have a look at what you can do to prevent a lot of frustration and wasted time.</description><pubDate>Wed, 30 Sep 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/error-handling-in-fulcro/</guid><link>https://blog.jakubholy.net/2020/error-handling-in-fulcro/</link><title>Error handling in Fulcro: 3 approaches</title><description>I present three ways of detecting, handling, and showing server-side errors: globally and at the component level.By default, Fulcro considers only non-200 HTTP status as an error. It is up to you to tell it what is an error and how to handle it.This is somewhat controversial - as Programming with Pure Optimism in the Fulcro Developers Guide explains:A server should not throw an exception and trigger a need for error handling unless there is a real, non-recoverable situation.And, as Tony explained elsewhere (paraphrasing):Make sure resolvers never throw, and have them return errors as first-class data. Only (detectable) security hacks and (unexpected) bugs should be hard-core errors. Intentional behavior of your server should always return a sensical value for a query, which may in fact simply be something like: “form save failed”. In that case components can query for problems with a real query prop, and each resolver can populate that key with an error if it has one. So, if you want to do component-level error handling, just adopt that philosophy and make remote-error? assume that something serious went wrong and the user probably should call support, reload the page, and perhaps even log back in. (You can for example define your own defresolver macro that automatically adds error handling.)In my case, I have an internal application and I encounter mostly bugs and downstream service issues so this approach is a better fit for me than if I had a public-facing application.</description><pubDate>Fri, 11 Sep 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/pains-with-terraform/</guid><link>https://blog.jakubholy.net/2020/pains-with-terraform/</link><title>Pains with Terraform (again)</title><description>Terraform - the popular infrastructure as code tool and language - looks very appealing at start and many people swear by it. However, I have had a great deal of frustration with it, which I want to share here as an input for future discussions of Terraform vs. AWS Cloud Development Kit (CDK) vs. other solutions. (I have written about this already 2 years ago and there is partial overlap between this and the older Pains with Terraform (perhaps use Sceptre next time?))</description><pubDate>Tue, 23 Jun 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/my-first-month-of-rust/</guid><link>https://blog.jakubholy.net/2020/my-first-month-of-rust/</link><title>My first month of Rust</title><description>Originally published at the Telia Engineering BlogA month ago I have started learning Rust and would like to share my impressions, the good things I have appreciated, and the things I have struggled with. Why Rust, do you ask? Primarily to challenge myself, to leave the land of managed runtimes (Clojure, JavaScript) and to get as close to the metal as you can without assembly. Knowing a systems (&amp;more) programming language is handy, for example for writing fast serverless functions and command-line utilities. Why not Go? For the same reasons why Clojure: it is more innovative, more mind-bending. Go is optimized, I understand, for approachability (and performance, of course) and is popular for writing web services - but it failed to capture the C/C developers at Google it was aimed at, I hear. Rust's focus is on performance and safety, the latter forcing it to take a really innovative approach to the issue of memory management. And some experienced C/C developers swear by it. So Rust already seemed
more attractive to me and reading Bryan Cantrill’s Falling in love with Rust and Sylvain Wallez' Go: the Good, the Bad and the Ugly sealed the deal. From the former:Rust feels like a distillation of the best work that came before it.Platforms reflect their values, and I daresay the propagation operator is an embodiment of Rust’s: balancing elegance and expressiveness with robustness and performance.</description><pubDate>Thu, 30 Jan 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2020/sharing-large-files-with-aws-s3-and-bittorrent/</guid><link>https://blog.jakubholy.net/2020/sharing-large-files-with-aws-s3-and-bittorrent/</link><title>Sharing large files on flaky networks with AWS S3 and BitTorrent</title><description>How to share a 3GB archive with a remote client when both might have unreliable connection that doesn’t keep up for the full download? Upload it to S3 using multipart upload with a resume capability and download it from S3 using BitTorrent.</description><pubDate>Tue, 07 Jan 2020 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2019/my-2019-in-review/</guid><link>https://blog.jakubholy.net/2019/my-2019-in-review/</link><title>My year 2019 in review</title><description>This has been a year of Clojure (and DevOps). Since the beginning of the year, I have worked to persuade my team to adopt Clojure instead of (or rather in addition to) to the current mixture of Java and Groovy, argued to rewrite a key batch job in Clojure (thank you, Monica, for providing the business case!), and did all I could to spread Clojure knowledge and skill in the team and surroundings. It has been a success - the job has been rewritten, we have already benefited from it, and we are finishing a new, Clojure-based micro-service. I have learned a lot about Java vs. Clojure, about the value of business-level tests and "living documentation", about leveraging Spec and property-based testing, about core.async (and error handling). On the DevOps front, I have grown to really dislike Terraform (wishing repeatedly to have a proper programming language instead of the frustrating Terraform DSL and the hacks it requires, not mentioning the nightmare of upgrading providers and Tf itself; 🤞for CDK/cdk-clj), have spent more time then I ever wanted with Kubernetes (and am working hard on simplifying our infrastructure and replacing K8s with AWS Fargate and thus spending less time on operations and more on development), and fell more and more in love with Clojure REPL, whether embdded in a Java app, in an actual Clojure code, or opening the door (securely!) to a "serverless" container on Fargate.</description><pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2019/core-async-error-handling/</guid><link>https://blog.jakubholy.net/2019/core-async-error-handling/</link><title>Error handling in Clojure Core.Async (and its higher-level constructs)</title><description>Error handling is something that core.async leaves to you (because it depends on your particular use case). People have written before about handling errors in the low-level go loops but there is little about the higher level constructs such as pipelines and transducers. I’d like to correct that. First, a little repetition.</description><pubDate>Wed, 25 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2019/briefly-internal-structure-of-clojure-zippers/</guid><link>https://blog.jakubholy.net/2019/briefly-internal-structure-of-clojure-zippers/</link><title>A brief look at the internal structure of Clojure Zippers</title><description>Clojure Zippers is a library for navigating and modifying tree data structures. While refactoring Cryogen, I needed an operation not supported out of the box (the removal of all nodes to the right of the current one) and thus had to learn a bit about the internal structure of zippers. I record it here for posterity.</description><pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2019/secure-repl-for-aws-fargate-services/</guid><link>https://blog.jakubholy.net/2019/secure-repl-for-aws-fargate-services/</link><title>Secure REPL access for AWS Fargate services</title><description>You are running a Clojure microservice on AWS Fargate in a private VPC subnet and want to have a secure REPL access to it, only exposing the port inside the VPC. Moreover you would prefer to use SSM Session and SSM Port Forwarding instead of running and exposing SSH. Here is how to do it. (Beware: it is not as trivial as we would like.)</description><pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2019/migrating-from-gatsby-to-cryogen/</guid><link>https://blog.jakubholy.net/2019/migrating-from-gatsby-to-cryogen/</link><title>Migrating my blog from Gatsby to a static site with Cryogen and AsciiDoctor</title><description>A year ago I have moved my blog from Wordpress and its WYSIWYG editor to a static site written using React and GaphQL and generated by Gatsby, with entries in Markdown, hosted on Netlify. My motivation was control and ease of writing. Now I continue the trend by moving from Gatsby to Cryogen, a blog-focused static site generator in Clojure, and AsciiDoctor.</description><pubDate>Thu, 19 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/nrepl-over-http-with-drwabridge-in-2020/</guid><link>https://blog.jakubholy.net/nrepl-over-http-with-drwabridge-in-2020/</link><title>nREPL over HTTP(s) with Drawbridge in 2020</title><description>Sometimes the only way to get REPL into your production application is to tunnel it over HTTP. nREPL has a transport and Ring handler for that provided by Drawbridge. Heroku has a nice but too dated guide on using nREPL with Drawbridge. I would like to fill the missing bits here.</description><pubDate>Thu, 12 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/troubleshooting-fargate-health-check/</guid><link>https://blog.jakubholy.net/troubleshooting-fargate-health-check/</link><title>AWS Fargate: Troubleshooting the dreaded '`service .. is unhealthy`'</title><description>So you have just deployed your Docker container to AWS Fargate but it keeps on restarting with the event “service XYZ (..) is unhealthy ..” and you have no idea why. I have spent many bloody hours here and will gladly share my insights with you. The 3 key questions to ask are:Do requests for / return 200 OK?Do they return quickly enough?Does the service start responding quickly enough after a start?(+ a bonus question and more troubleshooting tips)</description><pubDate>Fri, 06 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/how-clojure-helped-recovering-from-bad-data/</guid><link>https://blog.jakubholy.net/how-clojure-helped-recovering-from-bad-data/</link><title>How Clojure helped us recover from bad data</title><description>On a calm autumn morning we got a desperate call from our customer service. Our biggest customer had just started a pilot of our “expense share” functionality - and was missing half of their data. And they absolutely needed them for sending salaries in a few days. We jumped into production, cross-checked the data against a few of the missing employees and quickly determined that they were missing from the incoming invoices. We were able to cut and glue pieces of production code to extract just the information we needed - counts of employees and invoices past, present, and expected for billing runs in the problematic period - and thus identify all affected customers. After a fix in the source system, we were able to repeat the billing runs without writing any data, just to verify it generated the correct results - and write the results later. Combining data from web services and the database, correlating them and massaging them just into the format needed, interactively, with immediate feedback - that was only possible thanks to the code being in Clojure and thanks to Clojure REPL. Without it, the troubleshooting and correction process would have been much more difficult and time-consuming. Let’s look in detail how exactly did it help.</description><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/leiningen-split-uberjar-into-dependencies-and-app/</guid><link>https://blog.jakubholy.net/leiningen-split-uberjar-into-dependencies-and-app/</link><title>Leiningen: Split an uberjar into dependencies.jar and app.jar (to optimize Docker layers and AWS Lambda functions)</title><description>I want to split my application uberjar into a separate JAR with only the dependencies and a JAR with only the application code so that I can upload them as separate “layers” and thus leverage layer caching. While my code changes frequently and is tiny, the dependencies change rarely and are much bigger. If I can add them as a separate Docker layer or AWS Lambda layer then this can be cached on the server and reused when I upload a new version - saving time, bandwidth, and money.</description><pubDate>Tue, 19 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/choose-clojure-for-its-weirdness/</guid><link>https://blog.jakubholy.net/choose-clojure-for-its-weirdness/</link><title>Choose Clojure not because it is easy but because it is "`weird`"</title><description>When I was deciding what new language to learn, I could have picked the quite familiar Scala but chose instead Clojure - not despite of its lack of object-orientation, its immutable data structures, its too many parentheses on a single line - but because of it. (And because of Paul Graham’s Beating the Averages.) Why?!</description><pubDate>Mon, 11 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/defeating-legacy-code-with-living-documentation-and-business-level-tests/</guid><link>https://blog.jakubholy.net/defeating-legacy-code-with-living-documentation-and-business-level-tests/</link><title>Defeating Legacy Code with Living Documentation And Business-Level Tests</title><description>The big struggle when entering a new code base is distinguishing the essential business logic from the incidental aspect of how it is implemented. Both are just code - but which parts must be there and the way they are and which can be changed? If you don’t know then you fear to change anything. And that is exactly what happened when we took over the application MB. What to do? How to save the code from becoming an incomprehensible mess of legacy code, and dying?! We found an answer:  clj-concordion. (Read: Functional Core, Imperative Shell and Specification by Example.) </description><pubDate>Fri, 11 Oct 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/fixing-json-oom-with-streaming-and-mapdb/</guid><link>https://blog.jakubholy.net/fixing-json-oom-with-streaming-and-mapdb/</link><title>Fixing JSON out-of-memory error with streaming and MapDB</title><description>Once upon time, an API returned 0.5 GB JSON and our server crashed. We cried, we re-implemented it with streaming parser and a disk-backed Map and it worked again - but was slow. We measured and tweaked and finally got to a pretty good time and decent memory and CPU consumption. Come to learn about our journey, streaming JSON parsing, and MapDB!</description><pubDate>Fri, 27 Sep 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/generative-testing-lessons-learned/</guid><link>https://blog.jakubholy.net/generative-testing-lessons-learned/</link><title>Applying Spec-based generative testing to a transformation pipeline - tips and lessons learned</title><description>Having the computer generate tests for you, trying tens of devious inputs you would never have thought of, is awesome. There is however far less experience with and knowledge of generative (a.k.a property-based) testing so I would like to share what we have learned and what worked for us when testing an important data transformation pipeline. We mostly leveraged our existing Clojure Spec data specifications to generate the tests, while regularly reaching down to clojure.test.check to create custom generators and for low-level control.</description><pubDate>Thu, 26 Sep 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/clojure-common-beginner-mistakes/</guid><link>https://blog.jakubholy.net/clojure-common-beginner-mistakes/</link><title>Clojure: Common beginner mistakes (WIP)</title><description>Common mistakes made by Clojure beginners and style recommendations.</description><pubDate>Wed, 18 Sep 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/how-generating-test-data-saved-us/</guid><link>https://blog.jakubholy.net/how-generating-test-data-saved-us/</link><title>How generating test data saved us from angry customers and legal trouble</title><description>Me: Simple! First we sum all the raw charges. Then we sum the totals over all categories - the two should be equal. Computer: … Nope! Me: What?! Let me see… Are you telling me that -0.01 + -0.05 is different from -0.06?! Computer: Yep!That’s how I learned (again) to never use doubles for monetary amounts. I would never have thought of it myself (though I should have), hadn’t we used generative testing to produce random test data (popular troublemakers included) - data I wouldn’t have thought of, such as 0.01 + 0.05 that cannot be represented precisely with a double. Now that we switched safely over to BigDecimals and angry customers and law suits are off the table, you might wonder what is this generative testing about and how does it work.Instead of hardcoding inputs and expected outputs, as in the traditional “example-based” testing, inputs are randomly generated and outputs are checked against rules (“properties”) that you define, such as “the output of (sort list) should have the same elements and length as list; also, each element is >= its predecessor”. And you can generate as many inputs as you want, for instance 100 is a popular choice.</description><pubDate>Sun, 19 May 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/talk-highlights-exploring-four-hidden-superpowers-of-datomic/</guid><link>https://blog.jakubholy.net/talk-highlights-exploring-four-hidden-superpowers-of-datomic/</link><title>Highlights from the talk '`Exploring four hidden superpowers of Datomic`'</title><description>During our regular “tech lunch,” we have got our brains blown by the talk Lucas Cavalcanti &amp; Edward Wible - Exploring four hidden superpowers of Datomic (slides) that summarizes the key benefits a startup bank in Brazil got from using this revolutionary database as the core of their technical backbone. We would like to share our highlights from the talk and a few other interesting resources.</description><pubDate>Wed, 27 Mar 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/translating-enterprise-spring-app-to-clojure/</guid><link>https://blog.jakubholy.net/translating-enterprise-spring-app-to-clojure/</link><title>Translating an enterprise Spring webapp to Clojure</title><description>How to translate the concepts and patterns we know from enterprise Java applications to Clojure? It is not just a different syntax, the whole philosophy of the language is different. The thing is, many concepts and patterns do not translate - you just do things differently. We will look shortly at how we can solve common enterprise concerns in Clojure, compared to Java.This post is intended for an experienced Java developer curious about how his object-oriented, enterprise know-how would translate into the world of functional programming.If you are short on time then just scan the Summary table and read Basic principles perhaps together with Clojure primer to make sense of it.</description><pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/clojure-vs-java-troubleshooting-prod-app/</guid><link>https://blog.jakubholy.net/clojure-vs-java-troubleshooting-prod-app/</link><title>Clojure vs Java: Troubleshooting an application in production</title><description>I have just gone through the painful experience of troubleshooting a remote Java webapp in a production-like environment and longed for Clojure’s explore-and-edit-running-app REPL. I want to demonstrate and contrast the tools the two languages offer for this case.</description><pubDate>Thu, 07 Mar 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/clojure-vs-java-few-datastructures-over-many-objects/</guid><link>https://blog.jakubholy.net/clojure-vs-java-few-datastructures-over-many-objects/</link><title>Clojure vs Java: The benefit of Few Data Structures, Many Functions over Many Unique Classes</title><description>In Clojure we use again and again the same data structures and have many functions operating on them. Java programmers, on the other hand, create a unique class for every grouping of data, with its own “API” (getters, setters, return types, …) for accessing and manipulating the data. Having been forced to translate between two such “class APIs” I want to share my experience and thus demonstrate in practical terms the truth in the maximIt is better to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures. - Alan Perils in Epigrams on Programming (1982)</description><pubDate>Wed, 06 Mar 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/design-in-java-vs-fp/</guid><link>https://blog.jakubholy.net/design-in-java-vs-fp/</link><title>Solution design in Java/OOP vs. Clojure/FP - I/O anywhere or at the boundaries? - experience</title><description>As a Clojure developer thrown into an “enterprise” Java/Spring/Groovy application, I have a unique opportunity to experience and think about the differences between functional (FP) and object-oriented programming (OOP) and approach to design. Today I want to compare how the solution would differ for a small subsystem responsible for checking for and progressing the process of fixing data discrepancies. The main question we will explore will be where do we deal with external effects, i.e. I/O.(We are going to explore here an application of the Functional Core, Imperative Shell architecture. You can learn more about it in the Related resources section.)</description><pubDate>Fri, 01 Mar 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/it-will-only-take-1h/</guid><link>https://blog.jakubholy.net/it-will-only-take-1h/</link><title>It will only take one hour… (On why programmers suck at estimating and the perils of software development)</title><description>“It will only take about an hour,” I said to her. Two days later, a pull request awaits review. Where has all that time gone? What are the sources of delay in software development and how can we make it faster?</description><pubDate>Wed, 13 Feb 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/java-troubleshooting-on-steroids-with-clojure-repl/</guid><link>https://blog.jakubholy.net/java-troubleshooting-on-steroids-with-clojure-repl/</link><title>Java/Spring App Troubleshooting on Steroids with Clojure REPL</title><description>(Published originally at the Telia Engineering blog.)We have a Java/Groovy Spring Boot webapp, mainly running a bunch of batch jobs fetching, transforming and combining data. It is challenging to troubleshoot production issues because some production APIs are only accessible from the production servers and it is difficult and possibly dangerous to run the application in full production setup locally. Fortunately, we can now connect a REPL to the running application, get hold of its Spring beans, and interact with it (invoking remote calls, checking the returned data, …), which is a real life-saver and something I want to demonstrate and describe here.</description><pubDate>Fri, 01 Feb 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/how-to-use-clojure-1.10-prepl/</guid><link>https://blog.jakubholy.net/how-to-use-clojure-1.10-prepl/</link><title>How to use Clojure 1.10 pREPL to connect to a remote server (WIP)</title><description>Clojure 1.10 includes a new, program-friendly REPL or prepl (pronounced as “preppy,” not p-repl). However there is still very little documentation about it, though it is reportedly in making (it is alpha, after all). Here I want to demonstrate how to start it and how to connect to it in a primitive way (I hope to improve the user experience of the client eventually).Update 22/3: Check out O. Caldwell’s Clojure socket prepl cookbook.</description><pubDate>Thu, 31 Jan 2019 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/aws-rds-find-out-login-credentials/</guid><link>https://blog.jakubholy.net/aws-rds-find-out-login-credentials/</link><title>AWS RDS: How to find out login credentials to the database</title><description>To log in to your AWS RDS database (Oracle in my case) you need login credentials, but what are these for a newly created DB? The password is the master user password you entered during DB creation and which you can change via the Console.To find out the master user name:</description><pubDate>Fri, 21 Dec 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/from-wordpress-to-gatsby/</guid><link>https://blog.jakubholy.net/from-wordpress-to-gatsby/</link><title>Migrating from Wordpress.com to a static site generated by GatsbyJS</title><description>I am moving my blog over from Wordpress.com to a statically generated site using Gatsby. Wordpress has served me well in many years but it isn’t really fit for writing (about) code and the latest updates have made it even more difficult for me. With Gatsby I get a quick site and full control over everything (using JavaScript, React, and any of the tons of plugins for Gatsby).The content from my old blog is coming soon, it is work in progress :-)</description><pubDate>Thu, 13 Dec 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/11/26/java-understanding-the-different-network-https-exceptions/</guid><link>https://blog.jakubholy.net/2018/11/26/java-understanding-the-different-network-https-exceptions/</link><title>Java: Simulating various connection problems with Toxiproxy</title><description>Java: Simulating various connection problems with ToxiproxySimulate various connection issues with Toxiproxy and Java's HttpURLConnection
to see what kind of errors get produced: connect timed out vs. read timed out vs. connection refused ... .Results:System: openjdk 11.0.1 2018-10-16(What I haven't been able to simulate (yet) is "connection interrupted/broken", i.e. java.net.SocketException Connection reset (perhaps you closed it and try to write to it anyway?) and java.net.SocketException Connection reset by peer (perhaps when dropped by a firewall/the server/...?).)The setupPrerequisitiesTo /etc/hosts add:The toxiproxy setupStart toxiproxy:Configure it (we could just POST to :8474 but using the CLI is easier):The test codeBackgroundRead my Simulating network timeouts with toxiproxy
to learn why we need to bother with /etc/hosts and the Host header.</description><pubDate>Mon, 26 Nov 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/11/04/clojure-comparison-of-gnuplot-incanter-oz-vega-lite-for-plotting-usage-data/</guid><link>https://blog.jakubholy.net/2018/11/04/clojure-comparison-of-gnuplot-incanter-oz-vega-lite-for-plotting-usage-data/</link><title>Clojure - comparison of gnuplot, Incanter, oz/vega-lite for plotting usage data</title><description>The toolsGnuplot 5</description><pubDate>Sun, 04 Nov 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/11/04/how-i-got-fired-and-learned-the-importance-of-communication-and-play-time/</guid><link>https://blog.jakubholy.net/2018/11/04/how-i-got-fired-and-learned-the-importance-of-communication-and-play-time/</link><title>How I got fired and learned the importance of communication and play time</title><description>When I came to the office one late autumn morning in 2005, I have been shocked to find out that - without any warning signs whatsoever - I hd been fired. That day I have learned the importance of communication. Their criticism was justified but the thing is, nobody bothered to tell me anything during my 11 months in the company. I received exactly 0 feedback about my behaviour or work. The company ended up at court with its client - which both explains why they were stressed and was also caused by bad communication. So communication - even, or especially under stress - is really important. It must be open, transparent, and broad.The funny thing is that I still do the things they fired me for.</description><pubDate>Sun, 04 Nov 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/11/01/how-good-monitoring-saved-our-ass-again/</guid><link>https://blog.jakubholy.net/2018/11/01/how-good-monitoring-saved-our-ass-again/</link><title>How good monitoring saved our ass ... again</title><description></description><pubDate>Thu, 01 Nov 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/11/01/beware-the-performance-cost-of-async_hooks-node-8/</guid><link>https://blog.jakubholy.net/2018/11/01/beware-the-performance-cost-of-async_hooks-node-8/</link><title>Beware the performance cost of async_hooks (Node 8)</title><description></description><pubDate>Thu, 01 Nov 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/10/17/monitoring-process-memory-cpu-usage-with-top-and-plotting-it-with-gnuplot/</guid><link>https://blog.jakubholy.net/2018/10/17/monitoring-process-memory-cpu-usage-with-top-and-plotting-it-with-gnuplot/</link><title>Monitoring process memory/CPU usage with top and plotting it with gnuplot</title><description></description><pubDate>Wed, 17 Oct 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/10/05/troubleshooting-javax-net-ssl-sslhandshakeexception-received-fatal-alert-handshake_failure/</guid><link>https://blog.jakubholy.net/2018/10/05/troubleshooting-javax-net-ssl-sslhandshakeexception-received-fatal-alert-handshake_failure/</link><title>Troubleshooting javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure</title><description></description><pubDate>Fri, 05 Oct 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/hiring-for-clojure-is-easy/</guid><link>https://blog.jakubholy.net/hiring-for-clojure-is-easy/</link><title>Experience Report: Hiring for Clojure(Script) is Easy</title><description>Published originally at the Telia Engineering blog.Update Jan 2020: Added "Related resources and experiences".</description><pubDate>Thu, 15 Mar 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/03/14/why-we-love-aws-beanstalk-but-are-leaving-it-anyway/</guid><link>https://blog.jakubholy.net/2018/03/14/why-we-love-aws-beanstalk-but-are-leaving-it-anyway/</link><title>Why we love AWS Beanstalk but are leaving it anyway</title><description></description><pubDate>Wed, 14 Mar 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/03/14/pains-with-terraform-perhaps-use-sceptre-next-time/</guid><link>https://blog.jakubholy.net/2018/03/14/pains-with-terraform-perhaps-use-sceptre-next-time/</link><title>Pains with Terraform (perhaps use Sceptre next time?)</title><description></description><pubDate>Wed, 14 Mar 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2018/01/09/how-to-patch-travis-cis-deployment-tool-for-your-needs/</guid><link>https://blog.jakubholy.net/2018/01/09/how-to-patch-travis-cis-deployment-tool-for-your-needs/</link><title>How to patch Travis CI's deployment tool for your needs</title><description></description><pubDate>Tue, 09 Jan 2018 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2017/12/21/experience-awesome-productivity-with-clojurescripts-repl/</guid><link>https://blog.jakubholy.net/2017/12/21/experience-awesome-productivity-with-clojurescripts-repl/</link><title>Experience: Awesome productivity with ClojureScript's REPL</title><description>Re-posted from Telia's tech blog.</description><pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2017/05/09/simulating-network-timeouts-with-toxiproxy/</guid><link>https://blog.jakubholy.net/2017/05/09/simulating-network-timeouts-with-toxiproxy/</link><title>Simulating network timeouts with toxiproxy</title><description>Goal: Simulate how a Node.js application reacts to timeouts.Solution: Use toxiproxy and its timeout "toxic" with the value of 0, i.e. the connection won't close, and data will be delayed until the toxic is removed.</description><pubDate>Tue, 09 May 2017 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2017/02/03/demonstration-applying-the-parallel-change-technique-to-change-code-in-small-safe-steps/</guid><link>https://blog.jakubholy.net/2017/02/03/demonstration-applying-the-parallel-change-technique-to-change-code-in-small-safe-steps/</link><title>Demonstration: Applying the Parallel Change technique to change code in small, safe steps</title><description></description><pubDate>Fri, 03 Feb 2017 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2016/03/06/it-is-ok-to-requie-your-team-mates-to-have-particular-domaintechnical-knowledge/</guid><link>https://blog.jakubholy.net/2016/03/06/it-is-ok-to-requie-your-team-mates-to-have-particular-domaintechnical-knowledge/</link><title>It Is OK to Require Your Team-mates to Have Particular Domain/Technical Knowledge</title><description>Should we write stupid code that is easy to understand for newcomers? It seems as a good thing to do. But it is the wrong thing to optimise for because it is a rare case. Most of the time you will be working with people experienced in the code base. And if there is a new member, you should not just throw her into the water and expect her to learn and understand everything on her own. It is better to optimise for the common case, i.e. people that are up to speed. It is thus OK to expect and require that the developers have certain domain and technical knowledge. And spend resources to ensure that is the case with new members. Simply put, you should not dumb down your code to match the common knowledge but elevate new team mates to the baseline that you defined for your product (based on your domain, the expected level of experience and dedication etc.).</description><pubDate>Sun, 06 Mar 2016 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2016/03/04/dont-add-unnecessary-checks-to-your-code-pretty-please/</guid><link>https://blog.jakubholy.net/2016/03/04/dont-add-unnecessary-checks-to-your-code-pretty-please/</link><title>Don't add unnecessary checks to your code, pretty please!</title><description></description><pubDate>Fri, 04 Mar 2016 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2016/02/19/2015-in-review/</guid><link>https://blog.jakubholy.net/2016/02/19/2015-in-review/</link><title>2015 in review</title><description></description><pubDate>Thu, 18 Feb 2016 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/12/06/a-costly-failure-to-design-for-performance-and-robustness/</guid><link>https://blog.jakubholy.net/2015/12/06/a-costly-failure-to-design-for-performance-and-robustness/</link><title>A Costly Failure to Design for Performance and Robustness</title><description></description><pubDate>Sat, 05 Dec 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/12/06/why-we-practice-fronted-first-design-instead-of-api-first/</guid><link>https://blog.jakubholy.net/2015/12/06/why-we-practice-fronted-first-design-instead-of-api-first/</link><title>Why we practice fronted-first design (instead of API-first)</title><description>Cross-posted from the TeliaSonera tech blog</description><pubDate>Sat, 05 Dec 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/11/27/troubleshooting-and-improving-httpstls-connection-performance/</guid><link>https://blog.jakubholy.net/2015/11/27/troubleshooting-and-improving-httpstls-connection-performance/</link><title>Troubleshooting And Improving HTTPS/TLS Connection Performance</title><description></description><pubDate>Fri, 27 Nov 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/11/12/moving-too-fast-for-ux-genuine-needs-wrong-solutions/</guid><link>https://blog.jakubholy.net/2015/11/12/moving-too-fast-for-ux-genuine-needs-wrong-solutions/</link><title>Moving Too Fast For UX? Genuine Needs, Wrong Solutions</title><description>Cross-posted from the TeliaSonera tech blog</description><pubDate>Thu, 12 Nov 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/10/20/upgrade-or-not-to-upgrade-the-eternal-dilemma/</guid><link>https://blog.jakubholy.net/2015/10/20/upgrade-or-not-to-upgrade-the-eternal-dilemma/</link><title>Upgrade or not to upgrade dependencies? The eternal dilemma</title><description>Cross-posted from TeliaSonera Tech blog.Failed attempt one: Let tools do it</description><pubDate>Tue, 20 Oct 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/10/07/storytelling-as-a-vehicle-of-change-introducing-clojurescript-for-the-heart-and-mind/</guid><link>https://blog.jakubholy.net/2015/10/07/storytelling-as-a-vehicle-of-change-introducing-clojurescript-for-the-heart-and-mind/</link><title>Storytelling as a Vehicle of Change: Introducing ClojureScript for the Heart and Mind</title><description></description><pubDate>Wed, 07 Oct 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/10/06/refactoring-type-errors-in-clojure/</guid><link>https://blog.jakubholy.net/2015/10/06/refactoring-type-errors-in-clojure/</link><title>Refactoring &amp; Type Errors in Clojure: Experience and Prevention</title><description></description><pubDate>Tue, 06 Oct 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/10/06/an-answer-to-circlecis-why-were-no-longer-using-core-typed/</guid><link>https://blog.jakubholy.net/2015/10/06/an-answer-to-circlecis-why-were-no-longer-using-core-typed/</link><title>An answer to CircleCI's "Why we’re no longer using Core.typed"</title><description></description><pubDate>Tue, 06 Oct 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/10/01/nginx-protecting-upstream-from-overload-on-cache-miss/</guid><link>https://blog.jakubholy.net/2015/10/01/nginx-protecting-upstream-from-overload-on-cache-miss/</link><title>Nginx: Protecting upstream from overload on cache miss</title><description></description><pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/09/01/shipping-a-refactoring-feature-one-tiny-slice-at-a-time-to-reduce-risk/</guid><link>https://blog.jakubholy.net/2015/09/01/shipping-a-refactoring-feature-one-tiny-slice-at-a-time-to-reduce-risk/</link><title>Shipping a Refactoring &amp; Feature One Tiny Slice at a Time, to Reduce Risk</title><description></description><pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/07/30/run-gor-the-http-traffic-replayer-as-a-service-on-aws-elastic-beanstalk/</guid><link>https://blog.jakubholy.net/2015/07/30/run-gor-the-http-traffic-replayer-as-a-service-on-aws-elastic-beanstalk/</link><title>Running Gor, the HTTP traffic replayer, as a service on AWS Elastic Beanstalk</title><description></description><pubDate>Thu, 30 Jul 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/07/30/aws-ebextensions-avoiding-could-not-enable-service-or-disable/</guid><link>https://blog.jakubholy.net/2015/07/30/aws-ebextensions-avoiding-could-not-enable-service-or-disable/</link><title>AWS ebextensions: Avoiding "Could not enable service" (or .. disable ..)</title><description></description><pubDate>Thu, 30 Jul 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/07/29/fixing-a-mysterious-ebextensions-command-time-out-aws-elastic-beanstalk/</guid><link>https://blog.jakubholy.net/2015/07/29/fixing-a-mysterious-ebextensions-command-time-out-aws-elastic-beanstalk/</link><title>Fixing a mysterious .ebextensions command time out (AWS Elastic Beanstalk)</title><description></description><pubDate>Wed, 29 Jul 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/07/29/aws-passing-private-configuration-to-a-docker-container-via-s3/</guid><link>https://blog.jakubholy.net/2015/07/29/aws-passing-private-configuration-to-a-docker-container-via-s3/</link><title>AWS: Passing private configuration to a Docker container (via S3)</title><description></description><pubDate>Wed, 29 Jul 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/07/22/book-review-digest-release-it-design-and-deploy-production-ready-software/</guid><link>https://blog.jakubholy.net/2015/07/22/book-review-digest-release-it-design-and-deploy-production-ready-software/</link><title>Book Review &amp; Digest: Release It! Design and Deploy Production-Ready Software</title><description>ReviewExtra LinksStabilityStability antipatternsIntegration points</description><pubDate>Wed, 22 Jul 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/19/ndc-oslo-2015-talk-notes-recommended-talks-security-fp-etc/</guid><link>https://blog.jakubholy.net/2015/06/19/ndc-oslo-2015-talk-notes-recommended-talks-security-fp-etc/</link><title>NDC Oslo 2015: Talk notes, recommended talks (security, FP, etc.)</title><description>To (perhaps) check laterKeynote Data and Goliath ☆☆☆☆</description><pubDate>Fri, 19 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/17/ndc-async-and-streaming-javascript-were-all-doing-it-wrong-promises-streams-rx/</guid><link>https://blog.jakubholy.net/2015/06/17/ndc-async-and-streaming-javascript-were-all-doing-it-wrong-promises-streams-rx/</link><title>NDC: Async and Streaming JavaScript, We're All Doing it Wrong! (Promises, Streams, Rx)</title><description>EventsPromisesStreams</description><pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/17/why-do-companies-fail-at-adopting-functional-programming/</guid><link>https://blog.jakubholy.net/2015/06/17/why-do-companies-fail-at-adopting-functional-programming/</link><title>Why do companies fail at adopting Functional Programming?</title><description></description><pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/17/example-functional-reactive-programming-decisively-beats-imperative-on-simplicity-length/</guid><link>https://blog.jakubholy.net/2015/06/17/example-functional-reactive-programming-decisively-beats-imperative-on-simplicity-length/</link><title>Example: Functional Reactive Programming decisively beats Imperative on simplicity, length</title><description>The gameThe imperative solution</description><pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/17/notes-from-troy-hunts-hack-yourself-first-workshop/</guid><link>https://blog.jakubholy.net/2015/06/17/notes-from-troy-hunts-hack-yourself-first-workshop/</link><title>Notes from Troy Hunt's Hack Yourself First workshop</title><description>Troy Hunt (@troyhunt, blog) had a great, very hands-on 2-day workshop about webapp security at NDC Oslo. Here are my notes.Highlights - resourcesPersonal security and privacySite securityBreaches etc.To follow</description><pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/11/aws-api-proper-syntax-for-filtering-by-tag-e-g-describeinstances/</guid><link>https://blog.jakubholy.net/2015/06/11/aws-api-proper-syntax-for-filtering-by-tag-e-g-describeinstances/</link><title>AWS API: Proper syntax for filtering by tag name and value (e.g. describeInstances)</title><description></description><pubDate>Thu, 11 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/06/02/mounting-an-ebs-volume-to-docker-on-aws-elastic-beanstalk/</guid><link>https://blog.jakubholy.net/2015/06/02/mounting-an-ebs-volume-to-docker-on-aws-elastic-beanstalk/</link><title>Mounting an EBS volume to Docker on AWS Elastic Beanstal</title><description></description><pubDate>Tue, 02 Jun 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/05/07/all-in-one-docker-with-grafana-influxdb-and-cloudwatch-to-graphite-for-awsbeanstalk-monitoring/</guid><link>https://blog.jakubholy.net/2015/05/07/all-in-one-docker-with-grafana-influxdb-and-cloudwatch-to-graphite-for-awsbeanstalk-monitoring/</link><title>All-in-one Docker with Grafana, InfluxDB, and cloudwatch-to-graphite for AWS/Beanstalk monitoring</title><description></description><pubDate>Thu, 07 May 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/05/07/os-x-using-scutils-to-discover-whetherwhat-a-web-proxy-is-in-use/</guid><link>https://blog.jakubholy.net/2015/05/07/os-x-using-scutils-to-discover-whetherwhat-a-web-proxy-is-in-use/</link><title>OS X: Using scutils to discover whether/what a web proxy is in use</title><description></description><pubDate>Thu, 07 May 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/05/06/hack-quickly-verify-that-all-your-mochachai-tests-have-valid-assertions/</guid><link>https://blog.jakubholy.net/2015/05/06/hack-quickly-verify-that-all-your-mochachai-tests-have-valid-assertions/</link><title>Hack: Quickly Verify That All Your Mocha/Chai Tests Have Valid Assertions</title><description></description><pubDate>Wed, 06 May 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/04/30/iterm-coprocess-reporting-result-of-mocha-tests-run-via-nodemon/</guid><link>https://blog.jakubholy.net/2015/04/30/iterm-coprocess-reporting-result-of-mocha-tests-run-via-nodemon/</link><title>iTerm coprocess reporting result of (Mocha) tests run via nodemon</title><description></description><pubDate>Thu, 30 Apr 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/04/30/my-highlights-from-continuous-delivery-and-devops-conference-2015/</guid><link>https://blog.jakubholy.net/2015/04/30/my-highlights-from-continuous-delivery-and-devops-conference-2015/</link><title>My Highlights from Continuous Delivery and DevOps Conference 2015</title><description></description><pubDate>Thu, 30 Apr 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/04/03/backup-wd-mycloud-to-s3glacier-with-duplicity-build-instructions-included/</guid><link>https://blog.jakubholy.net/2015/04/03/backup-wd-mycloud-to-s3glacier-with-duplicity-build-instructions-included/</link><title>Backup WD MyCloud to S3/Glacier with duplicity (build instructions included)</title><description></description><pubDate>Fri, 03 Apr 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/03/31/aws-cloudwatch-alarms-too-noisy-due-to-undesirable-handling-of-missing-data/</guid><link>https://blog.jakubholy.net/2015/03/31/aws-cloudwatch-alarms-too-noisy-due-to-undesirable-handling-of-missing-data/</link><title>AWS CloudWatch Alarms Too Noisy Due To Ignoring Missing Data in Averages</title><description></description><pubDate>Tue, 31 Mar 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/03/27/git-pre-commit-hook-that-fails-if-it-only-used-jestjasmine/</guid><link>https://blog.jakubholy.net/2015/03/27/git-pre-commit-hook-that-fails-if-it-only-used-jestjasmine/</link><title>Git pre-commit hook that fails if "it.only" used (Jest/Jasmine)</title><description></description><pubDate>Fri, 27 Mar 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/03/17/there-will-be-failures-on-systems-that-live-through-difficulties-instead-of-turning-them-into-a-catastrophy/</guid><link>https://blog.jakubholy.net/2015/03/17/there-will-be-failures-on-systems-that-live-through-difficulties-instead-of-turning-them-into-a-catastrophy/</link><title>There will be failures – On systems that live through difficulties instead of turning them into a catastrophy</title><description></description><pubDate>Tue, 17 Mar 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/03/11/a-usable-node-repl-for-emacs/</guid><link>https://blog.jakubholy.net/2015/03/11/a-usable-node-repl-for-emacs/</link><title>A Usable Node.js REPL for Emacs</title><description></description><pubDate>Wed, 11 Mar 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/02/18/which-error-handling-style-to-pick-for-a-given-configuration-of-constraints/</guid><link>https://blog.jakubholy.net/2015/02/18/which-error-handling-style-to-pick-for-a-given-configuration-of-constraints/</link><title>The Are No Silver Bullets: Which Error Handling Style to Pick For a Given Configuration of Constraints?</title><description></description><pubDate>Wed, 18 Feb 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/02/17/fix-shell-script-run-via-ssh-hanging-jenkins/</guid><link>https://blog.jakubholy.net/2015/02/17/fix-shell-script-run-via-ssh-hanging-jenkins/</link><title>Fix Shell Script Run via SSH Hanging (Jenkins)</title><description></description><pubDate>Tue, 17 Feb 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/01/26/challenging-myself-with-copliens-why-most-unit-testing-is-waste/</guid><link>https://blog.jakubholy.net/2015/01/26/challenging-myself-with-copliens-why-most-unit-testing-is-waste/</link><title>Challenging Myself With Coplien's Why Most Unit Testing is Waste</title><description></description><pubDate>Mon, 26 Jan 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/01/13/running-javascript-tests-on-a-ci-server-with-karma-chrome-and-fake-x/</guid><link>https://blog.jakubholy.net/2015/01/13/running-javascript-tests-on-a-ci-server-with-karma-chrome-and-fake-x/</link><title>Running JavaScript Tests On a CI Server With Karma, Chrome And Fake X</title><description></description><pubDate>Tue, 13 Jan 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/01/10/focus-do-the-simplest-thing-possible/</guid><link>https://blog.jakubholy.net/2015/01/10/focus-do-the-simplest-thing-possible/</link><title>Focus &amp; Do the Simplest Thing Possible</title><description></description><pubDate>Fri, 09 Jan 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/01/08/continuous-delivery-digest-ch-9-testing-non-functional-requirements/</guid><link>https://blog.jakubholy.net/2015/01/08/continuous-delivery-digest-ch-9-testing-non-functional-requirements/</link><title>Continuous Delivery Digest: Ch.9 Testing Non-Functional Requirements</title><description></description><pubDate>Thu, 08 Jan 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/01/08/notes-on-automated-acceptance-testing-from-the-continuous-delivery-book/</guid><link>https://blog.jakubholy.net/2015/01/08/notes-on-automated-acceptance-testing-from-the-continuous-delivery-book/</link><title>Notes On Automated Acceptance Testing (from the Continuous Delivery book)</title><description></description><pubDate>Thu, 08 Jan 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2015/01/05/2014-in-review/</guid><link>https://blog.jakubholy.net/2015/01/05/2014-in-review/</link><title>The blog's year 2014 in review</title><description></description><pubDate>Mon, 05 Jan 2015 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/12/12/connect-tunnelblick-to-vpn-automatically-after-wake-up/</guid><link>https://blog.jakubholy.net/2014/12/12/connect-tunnelblick-to-vpn-automatically-after-wake-up/</link><title>Connect Tunnelblick to VPN automatically after wake up</title><description></description><pubDate>Fri, 12 Dec 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/11/21/book-review-digest-capital-in-the-twenty-first-century/</guid><link>https://blog.jakubholy.net/2014/11/21/book-review-digest-capital-in-the-twenty-first-century/</link><title>Book Review &amp; Digest: Capital In The Twenty-First Century</title><description></description><pubDate>Fri, 21 Nov 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/11/10/tiny-tiny-steps/</guid><link>https://blog.jakubholy.net/2014/11/10/tiny-tiny-steps/</link><title>Tiny, Tiny Steps - Experience Report Developing A Feature In Minimal Value-Adding Increments</title><description></description><pubDate>Mon, 10 Nov 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/11/03/notes-from-codemesh-2014/</guid><link>https://blog.jakubholy.net/2014/11/03/notes-from-codemesh-2014/</link><title>Notes From CodeMesh 2014</title><description></description><pubDate>Mon, 03 Nov 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/07/31/most-interesting-links-of-july-14/</guid><link>https://blog.jakubholy.net/2014/07/31/most-interesting-links-of-july-14/</link><title>Most interesting links of July '14</title><description>Recommended Readings</description><pubDate>Thu, 31 Jul 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/06/30/most-interesting-links-of-june-14/</guid><link>https://blog.jakubholy.net/2014/06/30/most-interesting-links-of-june-14/</link><title>Most interesting links of June '14</title><description>Recommended Readings</description><pubDate>Mon, 30 Jun 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/06/26/review-clojure-for-machine-learning-ch-12/</guid><link>https://blog.jakubholy.net/2014/06/26/review-clojure-for-machine-learning-ch-12/</link><title>Review: Clojure for Machine Learning (Ch 1-3)</title><description></description><pubDate>Thu, 26 Jun 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/05/31/most-interesting-links-of-may-14/</guid><link>https://blog.jakubholy.net/2014/05/31/most-interesting-links-of-may-14/</link><title>Most interesting links of May '14</title><description>Recommended Readings</description><pubDate>Sat, 31 May 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/05/21/fixing-clojurescript-test-failing-with-referenceerror-cant-find-variable-cemerick/</guid><link>https://blog.jakubholy.net/2014/05/21/fixing-clojurescript-test-failing-with-referenceerror-cant-find-variable-cemerick/</link><title>Fixing clojurescript.test failing with "ReferenceError: Can't find variable: cemerick"</title><description></description><pubDate>Wed, 21 May 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/05/19/clojurejava-prevent-exceptions-with-trace-missing/</guid><link>https://blog.jakubholy.net/2014/05/19/clojurejava-prevent-exceptions-with-trace-missing/</link><title>Clojure/Java: Prevent Exceptions With "trace missing"</title><description></description><pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/05/13/clojurescriptom-spurious-minified-exception-occured-with-advanced-optimizations/</guid><link>https://blog.jakubholy.net/2014/05/13/clojurescriptom-spurious-minified-exception-occured-with-advanced-optimizations/</link><title>ClojureScript/Om: Spurious "Minified exception occured" With Advanced Optimizations</title><description></description><pubDate>Tue, 13 May 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/05/12/core-async-cant-recur-here-in-clojurescript-but-ok-in-clojure/</guid><link>https://blog.jakubholy.net/2014/05/12/core-async-cant-recur-here-in-clojurescript-but-ok-in-clojure/</link><title>core.async: "Can't recur here" in ClojureScript but OK in Clojure</title><description></description><pubDate>Mon, 12 May 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/05/05/graphite-shows-metrics-but-no-data-troubleshooting/</guid><link>https://blog.jakubholy.net/2014/05/05/graphite-shows-metrics-but-no-data-troubleshooting/</link><title>Graphite Shows Metrics But No Data - Troubleshooting</title><description>Update: Graphite data gotchas that got meLesson learned: Always send data to Graphite in *exactly* same rate as its highest resolution</description><pubDate>Mon, 05 May 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/04/30/most-interesting-links-of-april-14/</guid><link>https://blog.jakubholy.net/2014/04/30/most-interesting-links-of-april-14/</link><title>Most interesting links of April '14</title><description>Recommended Readings</description><pubDate>Wed, 30 Apr 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/04/30/clojure-how-to-prevent-expected-map-got-vector-and-similar-errors/</guid><link>https://blog.jakubholy.net/2014/04/30/clojure-how-to-prevent-expected-map-got-vector-and-similar-errors/</link><title>Clojure: How To Prevent "Expected Map, Got Vector" And Similar Errors</title><description></description><pubDate>Wed, 30 Apr 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/04/28/how-to-create-and-run-gatling-2-0-tests/</guid><link>https://blog.jakubholy.net/2014/04/28/how-to-create-and-run-gatling-2-0-tests/</link><title>How to create and run Gatling 2.0 tests</title><description>0. Create a project:1. Import to IntelliJ2. Record a simulation</description><pubDate>Mon, 28 Apr 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/04/08/kioo-how-to-replace-the-whole-body/</guid><link>https://blog.jakubholy.net/2014/04/08/kioo-how-to-replace-the-whole-body/</link><title>Kioo: How To Replace The Whole Body</title><description></description><pubDate>Tue, 08 Apr 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/04/08/kioo-how-to-troubleshoot-template-processing/</guid><link>https://blog.jakubholy.net/2014/04/08/kioo-how-to-troubleshoot-template-processing/</link><title>Kioo: How to Troubleshoot Template Processing</title><description></description><pubDate>Tue, 08 Apr 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/31/framework-joy-load-in-hibernate-updates-data/</guid><link>https://blog.jakubholy.net/2014/03/31/framework-joy-load-in-hibernate-updates-data/</link><title>Framework Joy: Load in Hibernate Updates Data</title><description></description><pubDate>Mon, 31 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/31/most-interesting-links-of-march-14/</guid><link>https://blog.jakubholy.net/2014/03/31/most-interesting-links-of-march-14/</link><title>Most interesting links of March '14</title><description>Recommended ReadingsClojure Corner</description><pubDate>Mon, 31 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/25/how-to-generate-a-valid-credit-card-number-for-a-bin-first-6-digits/</guid><link>https://blog.jakubholy.net/2014/03/25/how-to-generate-a-valid-credit-card-number-for-a-bin-first-6-digits/</link><title>How To Generate A Valid Credit Card Number For A Bin (First 6 Digits)</title><description></description><pubDate>Tue, 25 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/24/httpservletrequest-requesturirequesturlcontextpathservletpathpathinfoquerystring/</guid><link>https://blog.jakubholy.net/2014/03/24/httpservletrequest-requesturirequesturlcontextpathservletpathpathinfoquerystring/</link><title>HttpServletRequest: requestURI/requestURL/contextPath/servletPath/pathInfo/queryString</title><description></description><pubDate>Mon, 24 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/19/ansible-best-practices-for-deriving-host-level-var-from-a-group-var/</guid><link>https://blog.jakubholy.net/2014/03/19/ansible-best-practices-for-deriving-host-level-var-from-a-group-var/</link><title>Ansible: Best practices for deriving host-level var from a group var</title><description></description><pubDate>Wed, 19 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/17/frustration-driven-development-towards-devops-lean-clojure/</guid><link>https://blog.jakubholy.net/2014/03/17/frustration-driven-development-towards-devops-lean-clojure/</link><title>Frustration-Driven Development - Towards DevOps, Lean, Clojure</title><description>A post about development practices, speed, and frustration.</description><pubDate>Mon, 17 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/05/petitioning-eu-to-act-against-russian-aggression-in-ukraine/</guid><link>https://blog.jakubholy.net/2014/03/05/petitioning-eu-to-act-against-russian-aggression-in-ukraine/</link><title>Petitioning EU to act against Russian aggression in Ukraine</title><description></description><pubDate>Wed, 05 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/05/recursive-copy-in-ansible-1-5-and-diff/</guid><link>https://blog.jakubholy.net/2014/03/05/recursive-copy-in-ansible-1-5-and-diff/</link><title>Recursive Copy In Ansible 1.5 And --diff</title><description></description><pubDate>Wed, 05 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/03/04/ansible-troubleshooting-tips/</guid><link>https://blog.jakubholy.net/2014/03/04/ansible-troubleshooting-tips/</link><title>Ansible Troubleshooting Tips</title><description>Run ansible-playbook in the verbose modeUse ./hacking/test-module</description><pubDate>Tue, 04 Mar 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/28/most-interesting-links-of-february-14/</guid><link>https://blog.jakubholy.net/2014/02/28/most-interesting-links-of-february-14/</link><title>Most interesting links of February '14</title><description>Recommended Readings</description><pubDate>Fri, 28 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/24/javaserver-faces-are-evil-draft/</guid><link>https://blog.jakubholy.net/2014/02/24/javaserver-faces-are-evil-draft/</link><title>JavaServer Faces Are Evil (draft)</title><description>1. Problem</description><pubDate>Mon, 24 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/24/handling-deployments-when-provisioning-jboss-domain-xml-with-ansible/</guid><link>https://blog.jakubholy.net/2014/02/24/handling-deployments-when-provisioning-jboss-domain-xml-with-ansible/</link><title>Handling Deployments When Provisioning JBoss domain.xml (With Ansible)</title><description></description><pubDate>Mon, 24 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/23/seek-understanding/</guid><link>https://blog.jakubholy.net/2014/02/23/seek-understanding/</link><title>Seek Understanding</title><description></description><pubDate>Sun, 23 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/17/the-risks-of-big-bang-deployments/</guid><link>https://blog.jakubholy.net/2014/02/17/the-risks-of-big-bang-deployments/</link><title>The Risks Of Big-Bang Deployments And Techniques For Step-wise Deployment</title><description>Big-bang or stepwise deployment?</description><pubDate>Mon, 17 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/16/demonstration-of-ansible-features-with-control-test-vms/</guid><link>https://blog.jakubholy.net/2014/02/16/demonstration-of-ansible-features-with-control-test-vms/</link><title>Demonstration of Ansible Features With Control &amp; Test VMs</title><description>https://github.com/holyjak/ansible-example-with-vm</description><pubDate>Sun, 16 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/04/jboss-modules-suck-its-impossible-to-use-custom-resteasyjax-rs-under-jboss-7/</guid><link>https://blog.jakubholy.net/2014/02/04/jboss-modules-suck-its-impossible-to-use-custom-resteasyjax-rs-under-jboss-7/</link><title>JBoss Modules Suck, It's Impossible To Use Custom Resteasy/JAX-RS Under JBoss 7</title><description></description><pubDate>Tue, 04 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/02/02/the-secret-weapon-against-technical-debt/</guid><link>https://blog.jakubholy.net/2014/02/02/the-secret-weapon-against-technical-debt/</link><title>A Secret Weapon Against Technical Debt</title><description></description><pubDate>Sun, 02 Feb 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2014/01/31/most-interesting-links-of-january-14/</guid><link>https://blog.jakubholy.net/2014/01/31/most-interesting-links-of-january-14/</link><title>Most interesting links of January '14</title><description>Recommended Readings</description><pubDate>Fri, 31 Jan 2014 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/12/31/most-interesting-links-of-december-13/</guid><link>https://blog.jakubholy.net/2013/12/31/most-interesting-links-of-december-13/</link><title>Most interesting links of December '13</title><description>Recommended Readings</description><pubDate>Tue, 31 Dec 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/12/31/2013-in-review/</guid><link>https://blog.jakubholy.net/2013/12/31/2013-in-review/</link><title>2013 in review</title><description></description><pubDate>Tue, 31 Dec 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/12/31/bad-code-are-we-thinking-too-little/</guid><link>https://blog.jakubholy.net/2013/12/31/bad-code-are-we-thinking-too-little/</link><title>Bad Code: Are We Thinking Too Little?</title><description></description><pubDate>Mon, 30 Dec 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/12/06/code-is-cheap-its-knowledge-discovery-that-costs/</guid><link>https://blog.jakubholy.net/2013/12/06/code-is-cheap-its-knowledge-discovery-that-costs/</link><title>Code Is Cheap, It's Knowledge Discovery That Costs</title><description></description><pubDate>Fri, 06 Dec 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/11/30/most-interesting-links-of-november-13/</guid><link>https://blog.jakubholy.net/2013/11/30/most-interesting-links-of-november-13/</link><title>Most interesting links of November '13</title><description>Recommended Readings</description><pubDate>Sat, 30 Nov 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/11/27/how-i-learned-to-avoid-magical-dependency-injection-and-love-plain-java/</guid><link>https://blog.jakubholy.net/2013/11/27/how-i-learned-to-avoid-magical-dependency-injection-and-love-plain-java/</link><title>How I Learned to Avoid Magical Dependency Injection And Love Plain Java</title><description></description><pubDate>Wed, 27 Nov 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/10/31/most-interesting-links-of-october-13/</guid><link>https://blog.jakubholy.net/2013/10/31/most-interesting-links-of-october-13/</link><title>Most interesting links of October '13</title><description>Recommended Readings</description><pubDate>Thu, 31 Oct 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/10/28/the-failure-of-governmental-it-learnings-from-healthcare-gov/</guid><link>https://blog.jakubholy.net/2013/10/28/the-failure-of-governmental-it-learnings-from-healthcare-gov/</link><title>The Failure of Governmental IT (Learnings From HealthCare.gov)</title><description></description><pubDate>Mon, 28 Oct 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/10/28/my-highlights-from-euroclojure-2013/</guid><link>https://blog.jakubholy.net/2013/10/28/my-highlights-from-euroclojure-2013/</link><title>My Highlights From EuroClojure 2013</title><description></description><pubDate>Mon, 28 Oct 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/10/04/fixed-embedded-jetty-fails-to-unpack-with-filenotfoundexception-not-a-directory/</guid><link>https://blog.jakubholy.net/2013/10/04/fixed-embedded-jetty-fails-to-unpack-with-filenotfoundexception-not-a-directory/</link><title>Fixed: Embedded Jetty Fails To Unpack With FileNotFoundException: Not a directory</title><description></description><pubDate>Fri, 04 Oct 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/09/30/most-interesting-links-of-september-13/</guid><link>https://blog.jakubholy.net/2013/09/30/most-interesting-links-of-september-13/</link><title>Most interesting links of September '13</title><description>Recommended Readings</description><pubDate>Mon, 30 Sep 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/09/05/blue-green-deployment-without-breaking-sessions-with-haproxy-and-jetty/</guid><link>https://blog.jakubholy.net/2013/09/05/blue-green-deployment-without-breaking-sessions-with-haproxy-and-jetty/</link><title>Webapp Blue-Green Deployment Without Breaking Sessions/With Fallback With HAProxy</title><description></description><pubDate>Thu, 05 Sep 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/09/03/test-puppet-config-of-an-existing-node-using-puppet-master-inside-vagrant/</guid><link>https://blog.jakubholy.net/2013/09/03/test-puppet-config-of-an-existing-node-using-puppet-master-inside-vagrant/</link><title>Test Puppet config of an existing node using Puppet Master via Vagrant</title><description></description><pubDate>Tue, 03 Sep 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/08/31/most-interesting-links-of-august-13/</guid><link>https://blog.jakubholy.net/2013/08/31/most-interesting-links-of-august-13/</link><title>Most interesting links of August '13</title><description>Recommended Readings</description><pubDate>Sat, 31 Aug 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/08/24/clojure-repl-stores-the-latest-results-in-1-2-3-exception-in-e/</guid><link>https://blog.jakubholy.net/2013/08/24/clojure-repl-stores-the-latest-results-in-1-2-3-exception-in-e/</link><title>Clojure REPL stores the latest results in *1, *2, *3, exception in *e</title><description></description><pubDate>Sat, 24 Aug 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/07/31/most-interesting-links-of-july-13/</guid><link>https://blog.jakubholy.net/2013/07/31/most-interesting-links-of-july-13/</link><title>Most interesting links of July '13</title><description>Recommended Readings</description><pubDate>Wed, 31 Jul 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/07/27/running-a-leiningenring-webapp-as-a-daemon-via-upstart-ubuntu/</guid><link>https://blog.jakubholy.net/2013/07/27/running-a-leiningenring-webapp-as-a-daemon-via-upstart-ubuntu/</link><title>Running A Leiningen/Ring Webapp As A Daemon Via Upstart (Ubuntu)</title><description></description><pubDate>Sat, 27 Jul 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/07/23/installing-troubleshooting-google-analytics-2013-ga-analytics-js/</guid><link>https://blog.jakubholy.net/2013/07/23/installing-troubleshooting-google-analytics-2013-ga-analytics-js/</link><title>Installing &amp; Troubleshooting Google Analytics 2013 (ga / analytics.js)</title><description></description><pubDate>Tue, 23 Jul 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/07/12/creating-a-chart-with-a-logarithmic-axis-in-incanter-1-5-1/</guid><link>https://blog.jakubholy.net/2013/07/12/creating-a-chart-with-a-logarithmic-axis-in-incanter-1-5-1/</link><title>Creating A Chart With A Logarithmic Axis In Incanter 1.5.1</title><description></description><pubDate>Fri, 12 Jul 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/07/05/the-invisible-benefits-of-pair-programming-avoiding-wasteful-coding-excursions/</guid><link>https://blog.jakubholy.net/2013/07/05/the-invisible-benefits-of-pair-programming-avoiding-wasteful-coding-excursions/</link><title>The Invisible Benefits Of Pair-Programming: Avoiding Wasteful Coding Excursions</title><description></description><pubDate>Fri, 05 Jul 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/06/30/most-interesting-links-of-june-13/</guid><link>https://blog.jakubholy.net/2013/06/30/most-interesting-links-of-june-13/</link><title>Most interesting links of June '13</title><description>Recommended Readings</description><pubDate>Sun, 30 Jun 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/06/28/brief-intro-into-randomstochasticprobabilistic-testing/</guid><link>https://blog.jakubholy.net/2013/06/28/brief-intro-into-randomstochasticprobabilistic-testing/</link><title>Brief Intro Into Random/Stochastic/Probabilistic/Simulation/Property-Based Testing</title><description></description><pubDate>Fri, 28 Jun 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/06/22/patterns-of-effective-delivery-challenge-your-understanding-of-agile-rootsconf-2011/</guid><link>https://blog.jakubholy.net/2013/06/22/patterns-of-effective-delivery-challenge-your-understanding-of-agile-rootsconf-2011/</link><title>Patterns of Effective Delivery - Challenge Your Understanding Of Agile (RootsConf 2011)</title><description></description><pubDate>Sat, 22 Jun 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/06/21/installing-latest-node-js-and-npm-modules-with-puppet/</guid><link>https://blog.jakubholy.net/2013/06/21/installing-latest-node-js-and-npm-modules-with-puppet/</link><title>Installing Latest Node.JS And NPM Modules With Puppet</title><description></description><pubDate>Fri, 21 Jun 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/06/16/making-sense-out-of-datomic-the-revolutionary-non-nosql-database/</guid><link>https://blog.jakubholy.net/2013/06/16/making-sense-out-of-datomic-the-revolutionary-non-nosql-database/</link><title>Making Sense Out of Datomic, The Revolutionary Non-NoSQL Database</title><description>Why? Why?!?</description><pubDate>Sun, 16 Jun 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/06/01/ignore-requirements-to-gain-flexibility-value-insights-the-power-of-why/</guid><link>https://blog.jakubholy.net/2013/06/01/ignore-requirements-to-gain-flexibility-value-insights-the-power-of-why/</link><title>Ignore requirements to gain flexibility, value, insights! The power of why</title><description></description><pubDate>Sat, 01 Jun 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/05/31/most-interesting-links-of-may-13/</guid><link>https://blog.jakubholy.net/2013/05/31/most-interesting-links-of-may-13/</link><title>Most interesting links of May '13</title><description>Recommended Readings</description><pubDate>Fri, 31 May 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/05/23/tip-include-context-and-propose-solutions-in-your-error-messages/</guid><link>https://blog.jakubholy.net/2013/05/23/tip-include-context-and-propose-solutions-in-your-error-messages/</link><title>Tip: Include Context And Propose Solutions In Your Error Messages</title><description></description><pubDate>Thu, 23 May 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/05/22/accessing-an-artifacts-maven-and-scm-versions-at-runtime/</guid><link>https://blog.jakubholy.net/2013/05/22/accessing-an-artifacts-maven-and-scm-versions-at-runtime/</link><title>Accessing An Artifact's Maven And SCM Versions At Runtime</title><description></description><pubDate>Wed, 22 May 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/05/21/lesson-learned-dont-use-low-level-lib-to-test-high-level-code/</guid><link>https://blog.jakubholy.net/2013/05/21/lesson-learned-dont-use-low-level-lib-to-test-high-level-code/</link><title>Lesson Learned: Don't Use Low-Level Lib To Test High-Level Code</title><description></description><pubDate>Mon, 20 May 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/05/19/becoming-a-better-programmer-through-the-study-of-good-and-bad-code-design/</guid><link>https://blog.jakubholy.net/2013/05/19/becoming-a-better-programmer-through-the-study-of-good-and-bad-code-design/</link><title>Becoming A Better Programmer Through The Study of Good And Bad Code &amp; Design</title><description></description><pubDate>Sun, 19 May 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/04/30/most-interesting-links-of-april-13/</guid><link>https://blog.jakubholy.net/2013/04/30/most-interesting-links-of-april-13/</link><title>Most interesting links of April '13</title><description>Recommended ReadingsThe top top article</description><pubDate>Tue, 30 Apr 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/04/29/book-review-digest-boyd-the-fighter-pilot-who-changed-the-art-of-war-relevant-for-itbusiness/</guid><link>https://blog.jakubholy.net/2013/04/29/book-review-digest-boyd-the-fighter-pilot-who-changed-the-art-of-war-relevant-for-itbusiness/</link><title>Book Review &amp; Digest: Boyd: The Fighter Pilot Who Changed the Art of War (Relevant for IT/Business)</title><description></description><pubDate>Mon, 29 Apr 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/04/01/the-value-and-perils-of-performance-benchmarks-in-the-wake-of-techempowers-web-framework-benchmark/</guid><link>https://blog.jakubholy.net/2013/04/01/the-value-and-perils-of-performance-benchmarks-in-the-wake-of-techempowers-web-framework-benchmark/</link><title>The Value and Perils of Performance Benchmarks in the Wake of TechEmpower's Web Framework Benchmark</title><description></description><pubDate>Mon, 01 Apr 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/31/most-interesting-links-of-mars-13/</guid><link>https://blog.jakubholy.net/2013/03/31/most-interesting-links-of-mars-13/</link><title>Most interesting links of Mars '13</title><description>Recommended Readings</description><pubDate>Sun, 31 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/25/tools-for-editor-browser-integration-for-interactive-jshtml-development/</guid><link>https://blog.jakubholy.net/2013/03/25/tools-for-editor-browser-integration-for-interactive-jshtml-development/</link><title>Tools for Editor - Browser Integration for Interactive JS/HTML Development</title><description></description><pubDate>Mon, 25 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/24/markdown-javascript-great-html-presentation-decks/</guid><link>https://blog.jakubholy.net/2013/03/24/markdown-javascript-great-html-presentation-decks/</link><title>Markdown + JavaScript = Great HTML Presentation Decks</title><description></description><pubDate>Sun, 24 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/21/create-graph-with-zabbix-api/</guid><link>https://blog.jakubholy.net/2013/03/21/create-graph-with-zabbix-api/</link><title>Escaping the Zabbix UI pain: How to create a combined graph for a number of hosts using the Zabbix API</title><description></description><pubDate>Wed, 20 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/19/you-are-not-lean-unless-you-have-a-clear-objective-and-measure/</guid><link>https://blog.jakubholy.net/2013/03/19/you-are-not-lean-unless-you-have-a-clear-objective-and-measure/</link><title>You are not lean unless you have a clear objective and measure</title><description></description><pubDate>Tue, 19 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/19/from-stateful-iteration-in-python-to-stateless-clojure/</guid><link>https://blog.jakubholy.net/2013/03/19/from-stateful-iteration-in-python-to-stateless-clojure/</link><title>From Stateful Iteration in Python to Stateless Clojure</title><description></description><pubDate>Mon, 18 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/03/12/books-our-developers-should-read/</guid><link>https://blog.jakubholy.net/2013/03/12/books-our-developers-should-read/</link><title>Books Our Developers Should Read</title><description></description><pubDate>Tue, 12 Mar 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/02/28/most-interesting-links-of-february-13/</guid><link>https://blog.jakubholy.net/2013/02/28/most-interesting-links-of-february-13/</link><title>Most interesting links of February '13</title><description>Recommended Readings</description><pubDate>Thu, 28 Feb 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/02/18/jdbc-what-resources-you-have-to-close-and-when/</guid><link>https://blog.jakubholy.net/2013/02/18/jdbc-what-resources-you-have-to-close-and-when/</link><title>JDBC: What resources you have to close and when?</title><description></description><pubDate>Mon, 18 Feb 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/31/most-interesting-links-of-january-13/</guid><link>https://blog.jakubholy.net/2013/01/31/most-interesting-links-of-january-13/</link><title>Most interesting links of January '13</title><description>Recommended Readings</description><pubDate>Thu, 31 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/14/the-sprinting-centipede-strategy-how-to-improve-software-without-breaking-it/</guid><link>https://blog.jakubholy.net/2013/01/14/the-sprinting-centipede-strategy-how-to-improve-software-without-breaking-it/</link><title>The Sprinting Centipede Strategy: How to Improve Software Without Breaking It</title><description></description><pubDate>Mon, 14 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/09/bash-parse-options-and-non-options-with-getopts/</guid><link>https://blog.jakubholy.net/2013/01/09/bash-parse-options-and-non-options-with-getopts/</link><title>Bash: Parse Options And Non-Options With Getopts</title><description></description><pubDate>Wed, 09 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/08/bash-magic-list-hive-table-sizes-in-gb/</guid><link>https://blog.jakubholy.net/2013/01/08/bash-magic-list-hive-table-sizes-in-gb/</link><title>Bash Magic: List Hive Table Sizes in GB</title><description></description><pubDate>Tue, 08 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/05/fast-code-to-production-cycle-matters-for-pleasure-engagement-profit/</guid><link>https://blog.jakubholy.net/2013/01/05/fast-code-to-production-cycle-matters-for-pleasure-engagement-profit/</link><title>Fast Code To Production Cycle Matters: For Pleasure, Productivity, Profit</title><description></description><pubDate>Fri, 04 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/04/my-2012-in-review/</guid><link>https://blog.jakubholy.net/2013/01/04/my-2012-in-review/</link><title>My 2012 in Review</title><description>Events &amp; side jobs</description><pubDate>Fri, 04 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2013/01/01/blogging-stats-of-2012/</guid><link>https://blog.jakubholy.net/2013/01/01/blogging-stats-of-2012/</link><title>Blogging Stats of 2012</title><description></description><pubDate>Tue, 01 Jan 2013 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/12/31/most-interesting-links-of-december-12/</guid><link>https://blog.jakubholy.net/2012/12/31/most-interesting-links-of-december-12/</link><title>Most interesting links of December '12</title><description>Recommended Readings</description><pubDate>Mon, 31 Dec 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/12/15/what-is-clean-code-quotes/</guid><link>https://blog.jakubholy.net/2012/12/15/what-is-clean-code-quotes/</link><title>What Is Clean Code? - In Quotes</title><description></description><pubDate>Sat, 15 Dec 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/11/30/most-interesting-links-of-november-12/</guid><link>https://blog.jakubholy.net/2012/11/30/most-interesting-links-of-november-12/</link><title>Most interesting links of November '12</title><description>Recommended Readings</description><pubDate>Fri, 30 Nov 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/31/most-interesting-links-of-october-12/</guid><link>https://blog.jakubholy.net/2012/10/31/most-interesting-links-of-october-12/</link><title>Most interesting links of October '12</title><description>Recommended Readings</description><pubDate>Wed, 31 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/27/the-principles-underlying-test-driven-development-or-why-you-should-tdd/</guid><link>https://blog.jakubholy.net/2012/10/27/the-principles-underlying-test-driven-development-or-why-you-should-tdd/</link><title>Do You Know Why You Are Testing?! (On The Principles Underlying TDD)</title><description></description><pubDate>Sat, 27 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/27/tip-import-leiningen-project-to-intellij-with-dependencies/</guid><link>https://blog.jakubholy.net/2012/10/27/tip-import-leiningen-project-to-intellij-with-dependencies/</link><title>Tip: Import Leiningen Project to IntelliJ (With Dependencies)</title><description></description><pubDate>Fri, 26 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/17/tool-tip-byob-screen-with-text-ui/</guid><link>https://blog.jakubholy.net/2012/10/17/tool-tip-byob-screen-with-text-ui/</link><title>Tool Tip: Byob - Screen With Text UI</title><description></description><pubDate>Wed, 17 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/17/puppet-where-to-find-the-cached-catalog-on-client/</guid><link>https://blog.jakubholy.net/2012/10/17/puppet-where-to-find-the-cached-catalog-on-client/</link><title>Puppet Troubleshooting: Compiling Catalog, Locating a Cached Catalog</title><description>Where to Find the Cached Catalog On Client</description><pubDate>Wed, 17 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/13/my-scala-vs-clojure-impression-in-pictures/</guid><link>https://blog.jakubholy.net/2012/10/13/my-scala-vs-clojure-impression-in-pictures/</link><title>My Scala vs. Clojure Impression In Pictures</title><description>(By kristobalite)(By agiamba)</description><pubDate>Sat, 13 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/10/09/note-loading-tab-separated-data-in-cascalog/</guid><link>https://blog.jakubholy.net/2012/10/09/note-loading-tab-separated-data-in-cascalog/</link><title>Note: Loading Tab-Separated Data In Cascalog</title><description></description><pubDate>Tue, 09 Oct 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/30/most-interesting-links-of-september-12/</guid><link>https://blog.jakubholy.net/2012/09/30/most-interesting-links-of-september-12/</link><title>Most interesting links of September '12</title><description>Recommended Readings</description><pubDate>Sun, 30 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/25/using-java-as-native-linux-apps-calling-c-daemonization-packaging-cli-brian-mccallister/</guid><link>https://blog.jakubholy.net/2012/09/25/using-java-as-native-linux-apps-calling-c-daemonization-packaging-cli-brian-mccallister/</link><title>Using Java as Native Linux Apps - Calling C, Daemonization, Packaging, CLI (Brian McCallister)</title><description>1. Using Native Libs in JavaCalling Native Libs</description><pubDate>Tue, 25 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/24/infographic-why-should-all-learn-little-code/</guid><link>https://blog.jakubholy.net/2012/09/24/infographic-why-should-all-learn-little-code/</link><title>Infographic: Why Should All Learn Little Code</title><description></description><pubDate>Mon, 24 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/21/enabling-jmx-monitoring-for-hadoop-and-hive/</guid><link>https://blog.jakubholy.net/2012/09/21/enabling-jmx-monitoring-for-hadoop-and-hive/</link><title>Enabling JMX Monitoring for Hadoop And Hive</title><description></description><pubDate>Fri, 21 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/21/visualvm-monitoring-remote-jvm-over-ssh-jmx-or-not/</guid><link>https://blog.jakubholy.net/2012/09/21/visualvm-monitoring-remote-jvm-over-ssh-jmx-or-not/</link><title>VisualVM: Monitoring Remote JVM Over SSH (JMX Or Not)</title><description></description><pubDate>Fri, 21 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/14/the-best-code-i-have-ever-written-is-the-code-i-never-wrote/</guid><link>https://blog.jakubholy.net/2012/09/14/the-best-code-i-have-ever-written-is-the-code-i-never-wrote/</link><title>The Best Code I Have Ever Written Is The Code I Never Wrote</title><description></description><pubDate>Fri, 14 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/12/programming-like-kent-beck/</guid><link>https://blog.jakubholy.net/2012/09/12/programming-like-kent-beck/</link><title>Programming Like Kent Beck</title><description></description><pubDate>Wed, 12 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/09/help-my-code-isnt-testable-do-i-need-to-fix-the-design/</guid><link>https://blog.jakubholy.net/2012/09/09/help-my-code-isnt-testable-do-i-need-to-fix-the-design/</link><title>Help, My Code Isn't Testable! Do I Need to Fix the Design?</title><description></description><pubDate>Sun, 09 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/09/09/unit-testing-swiss-knife-all-the-tools-you-wanted-to-know/</guid><link>https://blog.jakubholy.net/2012/09/09/unit-testing-swiss-knife-all-the-tools-you-wanted-to-know/</link><title>(Unit) Testing Swiss Knife: All the Tools You Wanted to Know</title><description></description><pubDate>Sun, 09 Sep 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/31/most-interesting-links-of-august-12/</guid><link>https://blog.jakubholy.net/2012/08/31/most-interesting-links-of-august-12/</link><title>Most interesting links of August '12</title><description>Recommended Readings</description><pubDate>Fri, 31 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/21/tips-how-to-easily-customize-pmd-rules-in-eclipse/</guid><link>https://blog.jakubholy.net/2012/08/21/tips-how-to-easily-customize-pmd-rules-in-eclipse/</link><title>Tip: How to Easily Customize PMD Rules in Eclipse</title><description></description><pubDate>Tue, 21 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/13/recommended-book-real-world-java-ee-night-hacks-by-adam-bien/</guid><link>https://blog.jakubholy.net/2012/08/13/recommended-book-real-world-java-ee-night-hacks-by-adam-bien/</link><title>Recommended Book: Real World Java EE Night Hacks by Adam Bien</title><description></description><pubDate>Mon, 13 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/13/minimalistic-practical-introduction-to-puppet-for-vagrant-users/</guid><link>https://blog.jakubholy.net/2012/08/13/minimalistic-practical-introduction-to-puppet-for-vagrant-users/</link><title>Minimalistic Practical Introduction to Puppet (Not Only) For Vagrant Users</title><description></description><pubDate>Mon, 13 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/12/youre-writing-the-wrong-software-you-never-know-what-users-want-until-you-ask-them/</guid><link>https://blog.jakubholy.net/2012/08/12/youre-writing-the-wrong-software-you-never-know-what-users-want-until-you-ask-them/</link><title>You're Writing the Wrong Software - You Never Know What Users Want Until You Ask Them</title><description></description><pubDate>Sun, 12 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/08/how-to-add-mapred-only-node-to-hadoop/</guid><link>https://blog.jakubholy.net/2012/08/08/how-to-add-mapred-only-node-to-hadoop/</link><title>How to Add MapRed-Only Node to Hadoop</title><description></description><pubDate>Wed, 08 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/08/08/zabbix-fixing-active-checks-to-work-with-zabbix-proxy/</guid><link>https://blog.jakubholy.net/2012/08/08/zabbix-fixing-active-checks-to-work-with-zabbix-proxy/</link><title>Zabbix: Fixing Active Checks to Work With Zabbix Proxy</title><description></description><pubDate>Wed, 08 Aug 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/07/31/most-interesting-links-of-july-12/</guid><link>https://blog.jakubholy.net/2012/07/31/most-interesting-links-of-july-12/</link><title>Most interesting links of July '12</title><description>Recommended Readings</description><pubDate>Tue, 31 Jul 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/07/05/book-review-implementation-patterns/</guid><link>https://blog.jakubholy.net/2012/07/05/book-review-implementation-patterns/</link><title>Book Review: Implementation Patterns</title><description></description><pubDate>Thu, 05 Jul 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/07/03/notify-on-errors-in-a-log-file-with-zabbix-1-8/</guid><link>https://blog.jakubholy.net/2012/07/03/notify-on-errors-in-a-log-file-with-zabbix-1-8/</link><title>Notify on Errors in a Log File with Zabbix 1.8</title><description></description><pubDate>Tue, 03 Jul 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/07/02/testing-zabbix-trigger-expressions/</guid><link>https://blog.jakubholy.net/2012/07/02/testing-zabbix-trigger-expressions/</link><title>Testing Zabbix Trigger Expressions</title><description></description><pubDate>Mon, 02 Jul 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/06/30/how-to-set-jvm-memory-for-clojure-repl-in-emacs-clojure-jack-in-clojure-swank/</guid><link>https://blog.jakubholy.net/2012/06/30/how-to-set-jvm-memory-for-clojure-repl-in-emacs-clojure-jack-in-clojure-swank/</link><title>How to Set JVM Memory for Clojure REPL in Emacs (clojure-jack-in, clojure-swank)</title><description>1. Clojure REPL Started for a Lein Project</description><pubDate>Sat, 30 Jun 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/06/30/most-interesting-links-of-june-12/</guid><link>https://blog.jakubholy.net/2012/06/30/most-interesting-links-of-june-12/</link><title>Most interesting links of June '12</title><description>Recommended Readings</description><pubDate>Sat, 30 Jun 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/06/21/creating-custom-login-modules-in-jboss-as-7-and-earlier/</guid><link>https://blog.jakubholy.net/2012/06/21/creating-custom-login-modules-in-jboss-as-7-and-earlier/</link><title>Creating Custom Login Modules In JBoss AS 7 (and Earlier)</title><description></description><pubDate>Thu, 21 Jun 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/06/14/serving-files-with-puppet-standalone-in-vagrant-from-the-puppet-uris/</guid><link>https://blog.jakubholy.net/2012/06/14/serving-files-with-puppet-standalone-in-vagrant-from-the-puppet-uris/</link><title>Serving Files with Puppet Standalone in Vagrant From the puppet:// URIs</title><description></description><pubDate>Thu, 14 Jun 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/05/31/most-interesting-links-of-may-12/</guid><link>https://blog.jakubholy.net/2012/05/31/most-interesting-links-of-may-12/</link><title>Most interesting links of May '12</title><description>Recommended Readings</description><pubDate>Thu, 31 May 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/05/12/bad-code-too-many-object-conversions-between-application-layers-and-how-to-avoid-them/</guid><link>https://blog.jakubholy.net/2012/05/12/bad-code-too-many-object-conversions-between-application-layers-and-how-to-avoid-them/</link><title>Bad Code: Too Many Object Conversions Between Application Layers And How to Avoid Them</title><description></description><pubDate>Sat, 12 May 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/05/09/beautiful-code-simplicity-yields-power/</guid><link>https://blog.jakubholy.net/2012/05/09/beautiful-code-simplicity-yields-power/</link><title>Beautiful Code: Simplicity Yields Power</title><description></description><pubDate>Wed, 09 May 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/05/05/creating-on-demand-clusters-in-ec2-with-puppet/</guid><link>https://blog.jakubholy.net/2012/05/05/creating-on-demand-clusters-in-ec2-with-puppet/</link><title>Creating On-Demand Clusters in EC2 with Puppet</title><description></description><pubDate>Sat, 05 May 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/04/30/most-interesting-links-of-april-12/</guid><link>https://blog.jakubholy.net/2012/04/30/most-interesting-links-of-april-12/</link><title>Most interesting links of April '12</title><description>Recommended Readings</description><pubDate>Mon, 30 Apr 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/04/04/exposing-functionality-over-http-with-groovy-and-ultra-lightweight-http-servers/</guid><link>https://blog.jakubholy.net/2012/04/04/exposing-functionality-over-http-with-groovy-and-ultra-lightweight-http-servers/</link><title>Exposing Functionality Over HTTP with Groovy and Ultra-Lightweight HTTP Servers</title><description></description><pubDate>Wed, 04 Apr 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/04/02/groovy-grape-troubleshooting-failed-download/</guid><link>https://blog.jakubholy.net/2012/04/02/groovy-grape-troubleshooting-failed-download/</link><title>Groovy Grape: Troubleshooting Failed Download</title><description></description><pubDate>Mon, 02 Apr 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/03/31/most-interesting-links-of-mars-12/</guid><link>https://blog.jakubholy.net/2012/03/31/most-interesting-links-of-mars-12/</link><title>Most interesting links of Mars '12</title><description>Recommended Readings</description><pubDate>Sat, 31 Mar 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/03/24/note-to-self-how-to-solve-vagrant-destroy-failing-with-error-in-api-call-in-ffi-rb/</guid><link>https://blog.jakubholy.net/2012/03/24/note-to-self-how-to-solve-vagrant-destroy-failing-with-error-in-api-call-in-ffi-rb/</link><title>Note To Self: What to Do When a Vagrant Machine Stops Working (Destroy or Up Failing)</title><description></description><pubDate>Sat, 24 Mar 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/03/12/kent-beck-best-practices-for-software-design-with-low-feature-latency-and-high-throughput/</guid><link>https://blog.jakubholy.net/2012/03/12/kent-beck-best-practices-for-software-design-with-low-feature-latency-and-high-throughput/</link><title>Kent Beck: Best Practices for Software Design with Low Feature Latency and High Throughput</title><description></description><pubDate>Sun, 11 Mar 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/03/01/link-benchmark-and-scaling-of-amazon-rds-mysql/</guid><link>https://blog.jakubholy.net/2012/03/01/link-benchmark-and-scaling-of-amazon-rds-mysql/</link><title>Link: Benchmark and Scaling of Amazon RDS (MySQL)</title><description></description><pubDate>Thu, 01 Mar 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/02/29/most-interesting-links-of-february-12/</guid><link>https://blog.jakubholy.net/2012/02/29/most-interesting-links-of-february-12/</link><title>Most interesting links of February '12</title><description>Recommended Readings</description><pubDate>Wed, 29 Feb 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/02/25/cool-tools-fault-injection-into-unit-tests-with-jboss-byteman-easier-testing-of-error-handling/</guid><link>https://blog.jakubholy.net/2012/02/25/cool-tools-fault-injection-into-unit-tests-with-jboss-byteman-easier-testing-of-error-handling/</link><title>Cool Tools: Fault Injection into Unit Tests with JBoss Byteman - Easier Testing of Error Handling</title><description></description><pubDate>Sat, 25 Feb 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/02/25/profiling-tomcat-webapp-with-visualvm-and-netbeans-pitfalls/</guid><link>https://blog.jakubholy.net/2012/02/25/profiling-tomcat-webapp-with-visualvm-and-netbeans-pitfalls/</link><title>Profiling Tomcat Webapp with VisualVM and NetBeans - Pitfalls</title><description></description><pubDate>Sat, 25 Feb 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/02/13/release-0-9-8-of-static-jsf-el-expression-validator-with-annotated-beans-autodetection/</guid><link>https://blog.jakubholy.net/2012/02/13/release-0-9-8-of-static-jsf-el-expression-validator-with-annotated-beans-autodetection/</link><title>Release 0.9.9 of Static JSF EL Expression Validator with Annotated Beans Autodetection</title><description></description><pubDate>Mon, 13 Feb 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/02/07/using-java-compiler-tree-api-to-extract-generics-types/</guid><link>https://blog.jakubholy.net/2012/02/07/using-java-compiler-tree-api-to-extract-generics-types/</link><title>Using Java Compiler Tree API to Extract Generics Types</title><description></description><pubDate>Mon, 06 Feb 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/02/05/separating-integration-and-unit-tests-with-maven-sonar-failsafe-and-jacoco/</guid><link>https://blog.jakubholy.net/2012/02/05/separating-integration-and-unit-tests-with-maven-sonar-failsafe-and-jacoco/</link><title>Separating Integration and Unit Tests with Maven, Sonar, Failsafe, and JaCoCo</title><description></description><pubDate>Sun, 05 Feb 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/31/troubleshooting-jersey-rest-server-and-client/</guid><link>https://blog.jakubholy.net/2012/01/31/troubleshooting-jersey-rest-server-and-client/</link><title>Troubleshooting Jersey REST Server and Client</title><description></description><pubDate>Tue, 31 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/31/most-interesting-links-of-january-2/</guid><link>https://blog.jakubholy.net/2012/01/31/most-interesting-links-of-january-2/</link><title>Most interesting links of January '12</title><description>Recommended Readings</description><pubDate>Tue, 31 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/18/how-to-create-maintainable-acceptance-tests/</guid><link>https://blog.jakubholy.net/2012/01/18/how-to-create-maintainable-acceptance-tests/</link><title>How to Create Maintainable Acceptance Tests</title><description></description><pubDate>Wed, 18 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/13/visualize-maven-project-dependencies-with-dependencytree-and-dot-diagram-output/</guid><link>https://blog.jakubholy.net/2012/01/13/visualize-maven-project-dependencies-with-dependencytree-and-dot-diagram-output/</link><title>Visualize Maven Project Dependencies with dependency:tree and Dot Diagram Output</title><description></description><pubDate>Fri, 13 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/09/ucertify/</guid><link>https://blog.jakubholy.net/2012/01/09/ucertify/</link><title>uCertify</title><description></description><pubDate>Mon, 09 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/09/key-lessons-from-the-specification-by-example-course-day-1/</guid><link>https://blog.jakubholy.net/2012/01/09/key-lessons-from-the-specification-by-example-course-day-1/</link><title>Key Lessons from the Specification by Example Course, Day 1</title><description></description><pubDate>Mon, 09 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2012/01/01/annual-blogging-report-2011/</guid><link>https://blog.jakubholy.net/2012/01/01/annual-blogging-report-2011/</link><title>Annual  Blogging Report 2011</title><description></description><pubDate>Sun, 01 Jan 2012 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/12/31/most-interesting-links-of-december-2/</guid><link>https://blog.jakubholy.net/2011/12/31/most-interesting-links-of-december-2/</link><title>Most interesting links of December</title><description>Recommended Readings</description><pubDate>Sat, 31 Dec 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/12/18/awk-extract-logs-for-a-given-dates-from-a-log-file/</guid><link>https://blog.jakubholy.net/2011/12/18/awk-extract-logs-for-a-given-dates-from-a-log-file/</link><title>AWK: Extract Logs for the Given Date(s) from a Log File</title><description></description><pubDate>Sun, 18 Dec 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/12/13/quiz-whats-the-best-test-method-name/</guid><link>https://blog.jakubholy.net/2011/12/13/quiz-whats-the-best-test-method-name/</link><title>Quiz: What's the Best Test Method Name?</title><description></description><pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/12/07/getting-started-with-amazon-web-services-and-fully-automated-resource-provisioning-in-15-minutes/</guid><link>https://blog.jakubholy.net/2011/12/07/getting-started-with-amazon-web-services-and-fully-automated-resource-provisioning-in-15-minutes/</link><title>Getting Started with Amazon Web Services and Fully Automated Resource Provisioning in 15 Minutes</title><description></description><pubDate>Wed, 07 Dec 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/30/most-interesting-links-of-november-2/</guid><link>https://blog.jakubholy.net/2011/11/30/most-interesting-links-of-november-2/</link><title>Most interesting links of November</title><description>Recommended Readings</description><pubDate>Wed, 30 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/26/the-3-most-important-things-ive-learned-this-year/</guid><link>https://blog.jakubholy.net/2011/11/26/the-3-most-important-things-ive-learned-this-year/</link><title>The 3 Most Important Things I've Learned This Year</title><description></description><pubDate>Sat, 26 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/23/where-to-get-sample-java-webapps/</guid><link>https://blog.jakubholy.net/2011/11/23/where-to-get-sample-java-webapps/</link><title>Where to Get Sample Java Webapps</title><description></description><pubDate>Wed, 23 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/22/what-changes-when-you-deploy-more-frequently-and-why-you-should-do-it/</guid><link>https://blog.jakubholy.net/2011/11/22/what-changes-when-you-deploy-more-frequently-and-why-you-should-do-it/</link><title>What Changes When You Deploy More Frequently and Why You Should Do It</title><description></description><pubDate>Tue, 22 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/21/refactoring-spikes-as-a-learning-tool-and-how-a-scheduled-git-reset-can-help/</guid><link>https://blog.jakubholy.net/2011/11/21/refactoring-spikes-as-a-learning-tool-and-how-a-scheduled-git-reset-can-help/</link><title>Refactoring Spikes as a Learning Tool and How a Scheduled Git Reset Can Help</title><description></description><pubDate>Mon, 21 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/21/principles-for-creating-maintainable-and-evolvable-tests/</guid><link>https://blog.jakubholy.net/2011/11/21/principles-for-creating-maintainable-and-evolvable-tests/</link><title>Principles for Creating Maintainable and Evolvable Tests</title><description></description><pubDate>Mon, 21 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/20/how-to-fail-with-drools-or-any-other-toolframeworklibrary/</guid><link>https://blog.jakubholy.net/2011/11/20/how-to-fail-with-drools-or-any-other-toolframeworklibrary/</link><title>How to Fail With Drools or Any Other Tool/Framework/Library</title><description></description><pubDate>Sun, 20 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/13/tips-and-resources-for-creating-dlss-in-groovy/</guid><link>https://blog.jakubholy.net/2011/11/13/tips-and-resources-for-creating-dlss-in-groovy/</link><title>Tips And Resources For Creating DSLs in Groovy</title><description></description><pubDate>Sun, 13 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/09/what-is-cdi-how-does-it-relate-to-ejb-and-spring/</guid><link>https://blog.jakubholy.net/2011/11/09/what-is-cdi-how-does-it-relate-to-ejb-and-spring/</link><title>What Is CDI, How Does It Relate to @EJB And Spring?</title><description></description><pubDate>Wed, 09 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/07/book-review-agile-project-management-with-scrum/</guid><link>https://blog.jakubholy.net/2011/11/07/book-review-agile-project-management-with-scrum/</link><title>Book Review: Agile Project Management With Scrum</title><description>Extract</description><pubDate>Mon, 07 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/02/groovy-creating-interface-stub-and-intercepting-all-calls-to-it/</guid><link>https://blog.jakubholy.net/2011/11/02/groovy-creating-interface-stub-and-intercepting-all-calls-to-it/</link><title>Groovy: Creating an Interface Stub and Intercepting All Calls to It</title><description></description><pubDate>Wed, 02 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/11/02/groovy-use-canonical-to-get-compiler-generated-equals-hashcode-and-tostring/</guid><link>https://blog.jakubholy.net/2011/11/02/groovy-use-canonical-to-get-compiler-generated-equals-hashcode-and-tostring/</link><title>Groovy: Use @Canonical to Get Compiler-generated Equals, HashCode and ToString</title><description></description><pubDate>Wed, 02 Nov 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/31/most-interesting-links-of-october-2/</guid><link>https://blog.jakubholy.net/2011/10/31/most-interesting-links-of-october-2/</link><title>Most interesting links of October</title><description>Recommended Readings</description><pubDate>Mon, 31 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/28/jsf-beware-the-difference-between-build-time-and-render-time-tags-in-facelets/</guid><link>https://blog.jakubholy.net/2011/10/28/jsf-beware-the-difference-between-build-time-and-render-time-tags-in-facelets/</link><title>JSF: Beware the Difference Between Build-Time and Render-Time Tags in Facelets</title><description></description><pubDate>Fri, 28 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/20/never-mix-public-and-private-unit-tests/</guid><link>https://blog.jakubholy.net/2011/10/20/never-mix-public-and-private-unit-tests/</link><title>Never Mix Public and Private Unit Tests! (Decoupling Tests from Implementation Details)</title><description></description><pubDate>Thu, 20 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/19/hacking-a-maven-dependency-with-javassist-to-fix-it/</guid><link>https://blog.jakubholy.net/2011/10/19/hacking-a-maven-dependency-with-javassist-to-fix-it/</link><title>Hacking A Maven Dependency with Javassist to Fix It</title><description></description><pubDate>Wed, 19 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/18/only-a-masochist-would-write-unit-tests-in-java-be-smarter-use-groovy-or-jruby-or-st-else-similar/</guid><link>https://blog.jakubholy.net/2011/10/18/only-a-masochist-would-write-unit-tests-in-java-be-smarter-use-groovy-or-jruby-or-st-else-similar/</link><title>Only a Masochist Would Write Unit Tests in Java. Be Smarter, Use Groovy (or Scala...).</title><description>Few examples</description><pubDate>Tue, 18 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/18/comparison-of-eclipse-3-6-and-intellij-idea-10-5-pros-and-cons/</guid><link>https://blog.jakubholy.net/2011/10/18/comparison-of-eclipse-3-6-and-intellij-idea-10-5-pros-and-cons/</link><title>Comparison of Eclipse 3.6 and IntelliJ IDEA 10.5: Pros and Cons</title><description></description><pubDate>Tue, 18 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/17/monitoring-java-webapp-with-hyperic-hq-send-email-when-too-many-errors-in-logs/</guid><link>https://blog.jakubholy.net/2011/10/17/monitoring-java-webapp-with-hyperic-hq-send-email-when-too-many-errors-in-logs/</link><title>Intro: Java Webapp Monitoring with Hyperic HQ + How to Alert on Too Many Errors in Logs</title><description></description><pubDate>Mon, 17 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/15/hasproperty-the-hidden-gem-of-hamcrest-and-assertthat/</guid><link>https://blog.jakubholy.net/2011/10/15/hasproperty-the-hidden-gem-of-hamcrest-and-assertthat/</link><title>hasProperty, the Hidden Gem of Hamcrest (and assertThat)</title><description></description><pubDate>Sat, 15 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/15/aggregating-error-logs-to-send-a-warning-email-when-too-many-of-them-log4j-stat4j-smtpappender/</guid><link>https://blog.jakubholy.net/2011/10/15/aggregating-error-logs-to-send-a-warning-email-when-too-many-of-them-log4j-stat4j-smtpappender/</link><title>Aggregating Error Logs to Send a Warning Email When Too Many of Them - Log4j, Stat4j, SMTPAppender</title><description></description><pubDate>Sat, 15 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/11/spring-make-an-externally-created-object-available-to-beans-in-applicationcontext-xml/</guid><link>https://blog.jakubholy.net/2011/10/11/spring-make-an-externally-created-object-available-to-beans-in-applicationcontext-xml/</link><title>Spring: Make an Externally Created Object Available to Beans in applicationContext.xml</title><description>Java: Configure ApplicationContext with an Injected Bean</description><pubDate>Tue, 11 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/06/tools-for-renaming-the-package-of-a-dependency-with-maven/</guid><link>https://blog.jakubholy.net/2011/10/06/tools-for-renaming-the-package-of-a-dependency-with-maven/</link><title>Tools for Renaming the Package of a Dependency with Maven</title><description></description><pubDate>Thu, 06 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/10/02/note-to-self-running-groovyconsole-with-a-maven-projects-classpath/</guid><link>https://blog.jakubholy.net/2011/10/02/note-to-self-running-groovyconsole-with-a-maven-projects-classpath/</link><title>Note to Self: Running GroovyConsole with a Maven Project's Classpath</title><description></description><pubDate>Sun, 02 Oct 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/30/most-interesting-links-of-september-2/</guid><link>https://blog.jakubholy.net/2011/09/30/most-interesting-links-of-september-2/</link><title>Most interesting links of September</title><description>Recommended Readings</description><pubDate>Fri, 30 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/27/inspect-your-webapp-in-a-live-environment-interactively-with-groovyconsole/</guid><link>https://blog.jakubholy.net/2011/09/27/inspect-your-webapp-in-a-live-environment-interactively-with-groovyconsole/</link><title>Inspect Your Webapp in a Live Environment Interactively with GroovyConsole</title><description></description><pubDate>Tue, 27 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/16/link-advanced-usage-of-junit-theories-multiple-datapoints-and-parametersuppliers/</guid><link>https://blog.jakubholy.net/2011/09/16/link-advanced-usage-of-junit-theories-multiple-datapoints-and-parametersuppliers/</link><title>Link: Advanced Usage of JUnit Theories, Multiple DataPoints, and ParameterSuppliers</title><description></description><pubDate>Fri, 16 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/16/junit-tip-verifying-that-an-exception-with-a-particular-message-was-thrown/</guid><link>https://blog.jakubholy.net/2011/09/16/junit-tip-verifying-that-an-exception-with-a-particular-message-was-thrown/</link><title>JUnit Tip: Verifying that an Exception with a Particular Message was Thrown</title><description></description><pubDate>Fri, 16 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/07/practical-intr%e2%80%a6and-java-proxy/</guid><link>https://blog.jakubholy.net/2011/09/07/practical-intr%e2%80%a6and-java-proxy/</link><title>Correct your URL</title><description></description><pubDate>Wed, 07 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/07/practical-introduction-into-code-injection-with-aspectj-javassist-and-java-proxy/</guid><link>https://blog.jakubholy.net/2011/09/07/practical-introduction-into-code-injection-with-aspectj-javassist-and-java-proxy/</link><title>Practical Introduction into Code Injection with AspectJ, Javassist, and Java Proxy</title><description></description><pubDate>Tue, 06 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/04/dry-use-junit-rule-instead-of-repeating-setupbefore-in-each-test/</guid><link>https://blog.jakubholy.net/2011/09/04/dry-use-junit-rule-instead-of-repeating-setupbefore-in-each-test/</link><title>DRY: Use JUnit @Rule Instead of Repeating Setup/@Before in Each Test</title><description></description><pubDate>Sun, 04 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/09/04/dbunit-express-1-3-is-even-easier-to-use-and-still-better/</guid><link>https://blog.jakubholy.net/2011/09/04/dbunit-express-1-3-is-even-easier-to-use-and-still-better/</link><title>DbUnit Express 1.3 is Even Easier to Use and Still Better</title><description></description><pubDate>Sun, 04 Sep 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/08/31/most-interesting-links-of-august-2/</guid><link>https://blog.jakubholy.net/2011/08/31/most-interesting-links-of-august-2/</link><title>Most interesting links of August</title><description>Recommended Readings</description><pubDate>Wed, 31 Aug 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/08/05/dbunit-express-tips-setup-simplificatio-custom-data-file-convention/</guid><link>https://blog.jakubholy.net/2011/08/05/dbunit-express-tips-setup-simplificatio-custom-data-file-convention/</link><title>DbUnit Express Tips: Setup Simplification, Custom Data File Convention</title><description></description><pubDate>Fri, 05 Aug 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/08/05/a-funny-story-about-the-pain-of-monthly-deployments/</guid><link>https://blog.jakubholy.net/2011/08/05/a-funny-story-about-the-pain-of-monthly-deployments/</link><title>A Funny Story about the Pain of Monthly Deployments</title><description></description><pubDate>Fri, 05 Aug 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/07/31/most-interesting-links-of-july-2/</guid><link>https://blog.jakubholy.net/2011/07/31/most-interesting-links-of-july-2/</link><title>Most interesting links of July</title><description>Recommanded Readings</description><pubDate>Sun, 31 Jul 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/07/30/experiencing-jsf-1-2-good-but-needs-a-framework/</guid><link>https://blog.jakubholy.net/2011/07/30/experiencing-jsf-1-2-good-but-needs-a-framework/</link><title>Experiencing JSF 1.2: Good but Needs a Framework</title><description></description><pubDate>Sat, 30 Jul 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/07/28/simple-logging-http-proxy-with-grinder/</guid><link>https://blog.jakubholy.net/2011/07/28/simple-logging-http-proxy-with-grinder/</link><title>Simple Logging HTTP Proxy with Grinder </title><description></description><pubDate>Thu, 28 Jul 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/07/27/having-database-test-ready-in-10-minutes-with-dbunit-express/</guid><link>https://blog.jakubholy.net/2011/07/27/having-database-test-ready-in-10-minutes-with-dbunit-express/</link><title>Having Database Test Ready in 10 Minutes with DbUnit Express</title><description></description><pubDate>Wed, 27 Jul 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/07/25/ivy-retrieve-both-jar-and-sources-jar-into-a-folder-note-to-self/</guid><link>https://blog.jakubholy.net/2011/07/25/ivy-retrieve-both-jar-and-sources-jar-into-a-folder-note-to-self/</link><title>Ivy: Retrieve Both .jar And -sources.jar Into A Folder - Note to Self</title><description></description><pubDate>Mon, 25 Jul 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/07/18/going-to-present-programmers-survival-kit-code-injection-for-troubleshooting-at-javazone-2011/</guid><link>https://blog.jakubholy.net/2011/07/18/going-to-present-programmers-survival-kit-code-injection-for-troubleshooting-at-javazone-2011/</link><title>Going to Present "Programmer's Survival Kit: Code Injection for Troubleshooting" at JavaZone 2011</title><description></description><pubDate>Mon, 18 Jul 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/06/30/most-interesting-links-of-june-2/</guid><link>https://blog.jakubholy.net/2011/06/30/most-interesting-links-of-june-2/</link><title>Most interesting links of June</title><description>Recommanded Readings</description><pubDate>Thu, 30 Jun 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/06/22/validating-jsf-el-expressions-in-jsf-pages-with-static-jsfexpression-validator/</guid><link>https://blog.jakubholy.net/2011/06/22/validating-jsf-el-expressions-in-jsf-pages-with-static-jsfexpression-validator/</link><title>Validating JSF EL Expressions in JSF Pages with static-jsfexpression-validator</title><description></description><pubDate>Wed, 22 Jun 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/06/20/how-to-fix-empty-show-all-bookmarks-in-firefox-4/</guid><link>https://blog.jakubholy.net/2011/06/20/how-to-fix-empty-show-all-bookmarks-in-firefox-4/</link><title>How to Fix Empty "Show all bookmarks" in Firefox 4</title><description></description><pubDate>Mon, 20 Jun 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/06/10/hacking-jasper-to-get-object-model-of-a-jsp-page/</guid><link>https://blog.jakubholy.net/2011/06/10/hacking-jasper-to-get-object-model-of-a-jsp-page/</link><title>Hacking Jasper to Get Object Model of a JSP Page</title><description></description><pubDate>Fri, 10 Jun 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/06/07/version-hell-with-jsfunit-arquillian-and-embedded-glassfish-and-other-containers/</guid><link>https://blog.jakubholy.net/2011/06/07/version-hell-with-jsfunit-arquillian-and-embedded-glassfish-and-other-containers/</link><title>Version hell with JSFUnit, Arquillian, and (embedded) Glassfish and other containers</title><description></description><pubDate>Tue, 07 Jun 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/05/31/most-interesting-links-of-may-2/</guid><link>https://blog.jakubholy.net/2011/05/31/most-interesting-links-of-may-2/</link><title>Most interesting links of May</title><description>Recommanded Readings</description><pubDate>Tue, 31 May 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/05/20/ivy-how-to-retrieve-source-codes-of-dependencies/</guid><link>https://blog.jakubholy.net/2011/05/20/ivy-how-to-retrieve-source-codes-of-dependencies/</link><title>Ivy: How to Retrieve Source Codes of Dependencies</title><description>Summary: To download sources you must map the dependency's conf also to 'sources' (ex.: conf="myScope->default,sources").</description><pubDate>Fri, 20 May 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/05/11/installing-java-1-4-to-mac-os-x-10-6/</guid><link>https://blog.jakubholy.net/2011/05/11/installing-java-1-4-to-mac-os-x-10-6/</link><title>Installing Java 1.4 to Mac OS X 10.6</title><description></description><pubDate>Wed, 11 May 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/05/06/discussion-agile-not-suitable-for-governmental-it/</guid><link>https://blog.jakubholy.net/2011/05/06/discussion-agile-not-suitable-for-governmental-it/</link><title>Discussion: Agile not suitable for governmental IT?</title><description></description><pubDate>Fri, 06 May 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/05/06/upgrading-fckeditor-2-x-to-ckeditor-3-x-including-plugins/</guid><link>https://blog.jakubholy.net/2011/05/06/upgrading-fckeditor-2-x-to-ckeditor-3-x-including-plugins/</link><title>Upgrading FCKeditor 2.x to CKEditor 3.x including plugins</title><description></description><pubDate>Fri, 06 May 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/30/most-interesting-links-of-april-renewed/</guid><link>https://blog.jakubholy.net/2011/04/30/most-interesting-links-of-april-renewed/</link><title>Most interesting links of April (renewed)</title><description></description><pubDate>Sat, 30 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/29/how-stateless-can-you-go/</guid><link>https://blog.jakubholy.net/2011/04/29/how-stateless-can-you-go/</link><title>How stateless can you go?</title><description></description><pubDate>Fri, 29 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/28/what-ive-learned-from-nearly-failing-to-refactor-hudson/</guid><link>https://blog.jakubholy.net/2011/04/28/what-ive-learned-from-nearly-failing-to-refactor-hudson/</link><title>What I've Learned from (Nearly) Failing to Refactor Hudson</title><description></description><pubDate>Thu, 28 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/18/what-do-i-mean-by-a-legacy-code/</guid><link>https://blog.jakubholy.net/2011/04/18/what-do-i-mean-by-a-legacy-code/</link><title>What Do I Mean by a Legacy Code?</title><description></description><pubDate>Mon, 18 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/16/refactoring-the-legacy-hudson-java-with-the-mikado-method-as-a-code-dojo/</guid><link>https://blog.jakubholy.net/2011/04/16/refactoring-the-legacy-hudson-java-with-the-mikado-method-as-a-code-dojo/</link><title>Refactoring the "Legacy" Hudson.java with the Mikado Method as a Coding Dojo</title><description>The Mikado Method</description><pubDate>Sat, 16 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/14/real-world-data-prove-that-agile-bdd-co-work-lecture-by-g-adzic/</guid><link>https://blog.jakubholy.net/2011/04/14/real-world-data-prove-that-agile-bdd-co-work-lecture-by-g-adzic/</link><title>Real-world data prove that Agile, BDD &amp; co. work - lecture by G. Adzic</title><description></description><pubDate>Thu, 14 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/04/ckeditor-hide-some-toolbar-buttons-on-a-per-page-basis/</guid><link>https://blog.jakubholy.net/2011/04/04/ckeditor-hide-some-toolbar-buttons-on-a-per-page-basis/</link><title>CKEditor: Hide some toolbar buttons on a per page basis</title><description></description><pubDate>Mon, 04 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/04/how-to-customize-ckeditor-with-your-own-plugins-skins-configurations/</guid><link>https://blog.jakubholy.net/2011/04/04/how-to-customize-ckeditor-with-your-own-plugins-skins-configurations/</link><title>How to customize CKEditor with your own plugins, skins, configurations</title><description></description><pubDate>Mon, 04 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/02/code-quality-matters-to-the-customers-a-lot/</guid><link>https://blog.jakubholy.net/2011/04/02/code-quality-matters-to-the-customers-a-lot/</link><title>Code quality matters to the customers. A lot.</title><description></description><pubDate>Sat, 02 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/04/01/ckeditor-collapsing-only-2nd-toolbar-rows-howto/</guid><link>https://blog.jakubholy.net/2011/04/01/ckeditor-collapsing-only-2nd-toolbar-rows-howto/</link><title>CKEditor: Collapsing only 2nd+ toolbar rows - howto</title><description></description><pubDate>Fri, 01 Apr 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/03/31/ckeditor-scroll-dialogs-with-page/</guid><link>https://blog.jakubholy.net/2011/03/31/ckeditor-scroll-dialogs-with-page/</link><title>CKEditor: Scroll dialogs with the page, i.e. not fixed to the middle</title><description></description><pubDate>Thu, 31 Mar 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/03/31/most-interesting-links-of-march-2/</guid><link>https://blog.jakubholy.net/2011/03/31/most-interesting-links-of-march-2/</link><title>Most interesting links of March</title><description>Articles, links etc.</description><pubDate>Thu, 31 Mar 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/03/27/introduction-to-objectteamsjava-a-role-based-approach-to-modularity-with-aop/</guid><link>https://blog.jakubholy.net/2011/03/27/introduction-to-objectteamsjava-a-role-based-approach-to-modularity-with-aop/</link><title>Introduction to ObjectTeams/Java, a Role-Based Approach to Modularity With AOP</title><description></description><pubDate>Sun, 27 Mar 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/03/12/why-not-to-be-afraid-of-2012/</guid><link>https://blog.jakubholy.net/2011/03/12/why-not-to-be-afraid-of-2012/</link><title>Why not to be afraid of 2012</title><description></description><pubDate>Sat, 12 Mar 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/02/28/most-interesting-links-of-february/</guid><link>https://blog.jakubholy.net/2011/02/28/most-interesting-links-of-february/</link><title>Most interesting links of February</title><description>Articles, links etc.</description><pubDate>Mon, 28 Feb 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/02/19/hidden-dependencies-are-evil-arguing-with-the-clean-code/</guid><link>https://blog.jakubholy.net/2011/02/19/hidden-dependencies-are-evil-arguing-with-the-clean-code/</link><title>Hidden Dependencies Are Evil - Arguing With The Clean Code (Slightly)</title><description></description><pubDate>Sat, 19 Feb 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/02/14/clean-code-four-simple-design-rules/</guid><link>https://blog.jakubholy.net/2011/02/14/clean-code-four-simple-design-rules/</link><title>Clean Code: Four Simple Design Rules - Obligatory Read</title><description></description><pubDate>Mon, 14 Feb 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/02/06/manually-restoring-raw-partclone-partition-image-to-a-vmware/</guid><link>https://blog.jakubholy.net/2011/02/06/manually-restoring-raw-partclone-partition-image-to-a-vmware/</link><title>Manually restoring raw partclone partition image to a VMWare</title><description></description><pubDate>Sun, 06 Feb 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/31/most-interesting-links-of-january/</guid><link>https://blog.jakubholy.net/2011/01/31/most-interesting-links-of-january/</link><title>Most interesting links of January</title><description></description><pubDate>Mon, 31 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/28/goodby-iba-welcome-norway-and-iterate/</guid><link>https://blog.jakubholy.net/2011/01/28/goodby-iba-welcome-norway-and-iterate/</link><title>Goodby IBA, welcome, Norway and Iterate!</title><description></description><pubDate>Fri, 28 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/26/using-ivy-with-pom-xml/</guid><link>https://blog.jakubholy.net/2011/01/26/using-ivy-with-pom-xml/</link><title>Using Ivy with pom.xml</title><description></description><pubDate>Wed, 26 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/11/emf-tips-accessing-model-meta-data-serializing-into-elementattribute/</guid><link>https://blog.jakubholy.net/2011/01/11/emf-tips-accessing-model-meta-data-serializing-into-elementattribute/</link><title>EMF tips: Accessing model meta data, serializing into element/attribute</title><description></description><pubDate>Tue, 11 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/03/creating-dynamic-emf-model-from-xsds-and-loading-its-instances-from-xml-as-sdos/</guid><link>https://blog.jakubholy.net/2011/01/03/creating-dynamic-emf-model-from-xsds-and-loading-its-instances-from-xml-as-sdos/</link><title>Creating dynamic EMF model from XSDs and loading its instances from XML as SDOs</title><description></description><pubDate>Mon, 03 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/03/emf-reading-a-model-from-xml-how-to-correctly-delcare-a-namespace-variants/</guid><link>https://blog.jakubholy.net/2011/01/03/emf-reading-a-model-from-xml-how-to-correctly-delcare-a-namespace-variants/</link><title>EMF: Reading a model from XML - how to correctly declare its namespace - variants</title><description></description><pubDate>Mon, 03 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2011/01/03/2010-in-review/</guid><link>https://blog.jakubholy.net/2011/01/03/2010-in-review/</link><title>2010 in review</title><description></description><pubDate>Mon, 03 Jan 2011 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/12/31/most-interesting-links-of-december/</guid><link>https://blog.jakubholy.net/2010/12/31/most-interesting-links-of-december/</link><title>Most interesting links of December</title><description></description><pubDate>Fri, 31 Dec 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/12/29/creating-jax-ws-webservice-using-service-data-objects-sdo-instead-of-jaxb-bound-pojos/</guid><link>https://blog.jakubholy.net/2010/12/29/creating-jax-ws-webservice-using-service-data-objects-sdo-instead-of-jaxb-bound-pojos/</link><title>Creating JAX-WS webservice using Service Data Objects (SDO) instead of JAXB-bound POJOs</title><description></description><pubDate>Wed, 29 Dec 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/12/29/implementing-jax-ws-webservice-accessing-its-input-as-xml-source-similar-to-jax-rpc-with-soapelement-input/</guid><link>https://blog.jakubholy.net/2010/12/29/implementing-jax-ws-webservice-accessing-its-input-as-xml-source-similar-to-jax-rpc-with-soapelement-input/</link><title>Howto: JAX-WS service with XML Source input instead of JAXB-produced POJOs (similar to JAX-RPC with SOAPElement input)</title><description></description><pubDate>Wed, 29 Dec 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/12/29/tip-multiple-webservice-implementation-classes-available-at-the-same-time-under-was7/</guid><link>https://blog.jakubholy.net/2010/12/29/tip-multiple-webservice-implementation-classes-available-at-the-same-time-under-was7/</link><title>Tip: Multiple webservice implementation classes available at the same time under WAS7</title><description></description><pubDate>Wed, 29 Dec 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/12/23/ivy-resolve-downloads-but-ignores-some-artifacts-though-not-modules/</guid><link>https://blog.jakubholy.net/2010/12/23/ivy-resolve-downloads-but-ignores-some-artifacts-though-not-modules/</link><title>Ivy resolve downloads but ignores some artifacts (though not modules)</title><description></description><pubDate>Thu, 23 Dec 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/12/10/joshua-bloch-performance-anxiety-on-unpredictability/</guid><link>https://blog.jakubholy.net/2010/12/10/joshua-bloch-performance-anxiety-on-unpredictability/</link><title>Joshua Bloch: Performance Anxiety - on Performance Unpredictability, Its Measurement and Benchmarking</title><description></description><pubDate>Fri, 10 Dec 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/30/most-interesting-links-of-november/</guid><link>https://blog.jakubholy.net/2010/11/30/most-interesting-links-of-november/</link><title>Most interesting links of November</title><description></description><pubDate>Tue, 30 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/25/book-review-refactoring-by-martin-fowler/</guid><link>https://blog.jakubholy.net/2010/11/25/book-review-refactoring-by-martin-fowler/</link><title>Book review: Refactoring by Martin Fowler</title><description></description><pubDate>Thu, 25 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/23/svn-fun-path-has-no-ancestry-information/</guid><link>https://blog.jakubholy.net/2010/11/23/svn-fun-path-has-no-ancestry-information/</link><title>svn fun: &lt;path> has no ancestry information</title><description></description><pubDate>Tue, 23 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/23/more-eclipse-svn-fun-cant-share-a-project-only-team-apply-patch/</guid><link>https://blog.jakubholy.net/2010/11/23/more-eclipse-svn-fun-cant-share-a-project-only-team-apply-patch/</link><title>More Eclipse &amp; svn fun: Can't share a project (only Team - Apply Patch)</title><description></description><pubDate>Tue, 23 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/19/soapsaajxml-issues-when-migrating-to-java-6-with-axis-1-2/</guid><link>https://blog.jakubholy.net/2010/11/19/soapsaajxml-issues-when-migrating-to-java-6-with-axis-1-2/</link><title>SOAP/SAAJ/XML Issues When Migrating to Java 6 (with Axis 1.2)</title><description></description><pubDate>Fri, 19 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/18/if-you-dont-do-pair-programming-and-code-reviews-as-teaching-tools-you-waste-money/</guid><link>https://blog.jakubholy.net/2010/11/18/if-you-dont-do-pair-programming-and-code-reviews-as-teaching-tools-you-waste-money/</link><title>If You Don't Use Pair Programming and Code Reviews as Teaching Tools You Waste Money</title><description></description><pubDate>Thu, 18 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/17/knowing-im-bad-programmer-makes-me-good-programmer/</guid><link>https://blog.jakubholy.net/2010/11/17/knowing-im-bad-programmer-makes-me-good-programmer/</link><title>Knowing I'm Bad Programmer Makes Me Good Programmer</title><description></description><pubDate>Wed, 17 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/11/02/tip-enable-a-shortcut-for-occurrences-in-file-in-eclipse-under-gnome/</guid><link>https://blog.jakubholy.net/2010/11/02/tip-enable-a-shortcut-for-occurrences-in-file-in-eclipse-under-gnome/</link><title>Tip: Enable a shortcut for Occurrences in File in Eclipse under Gnome (default C+S+u)</title><description></description><pubDate>Tue, 02 Nov 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/10/31/most-interesting-links-of-october/</guid><link>https://blog.jakubholy.net/2010/10/31/most-interesting-links-of-october/</link><title>Most interesting links of October</title><description></description><pubDate>Sun, 31 Oct 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/10/21/tip-retrieving-server-certificate-used-in-ssl-communication-e-g-pop3s/</guid><link>https://blog.jakubholy.net/2010/10/21/tip-retrieving-server-certificate-used-in-ssl-communication-e-g-pop3s/</link><title>Tip: Retrieving server certificate used in SSL communication (e.g. POP3s)</title><description></description><pubDate>Thu, 21 Oct 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/09/30/most-interesting-links-of-september/</guid><link>https://blog.jakubholy.net/2010/09/30/most-interesting-links-of-september/</link><title>Most interesting links of September</title><description></description><pubDate>Thu, 30 Sep 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/09/20/the-power-of-batching-or-speeding-jdbc-by-100/</guid><link>https://blog.jakubholy.net/2010/09/20/the-power-of-batching-or-speeding-jdbc-by-100/</link><title>The power of batching or speeding JDBC by 100</title><description></description><pubDate>Mon, 20 Sep 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/09/16/exposing-a-pojo-as-a-jmx-mbean-easily-with-spring/</guid><link>https://blog.jakubholy.net/2010/09/16/exposing-a-pojo-as-a-jmx-mbean-easily-with-spring/</link><title>Exposing a POJO as a JMX MBean easily with Spring</title><description></description><pubDate>Thu, 16 Sep 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/09/13/implementing-retrial-with-a-mdb-or-an-mq-batch-job-was-7-mq-6/</guid><link>https://blog.jakubholy.net/2010/09/13/implementing-retrial-with-a-mdb-or-an-mq-batch-job-was-7-mq-6/</link><title>Implementing retrial with a MDB or an MQ batch job? (WAS 7, MQ 6)</title><description></description><pubDate>Mon, 13 Sep 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/09/10/ssh-magic-authorize-only-once-for-multiple-sshscp-invocations/</guid><link>https://blog.jakubholy.net/2010/09/10/ssh-magic-authorize-only-once-for-multiple-sshscp-invocations/</link><title>SSH magic: Authorize only once for multiple ssh/scp invocations</title><description></description><pubDate>Fri, 10 Sep 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/09/10/jetty-maven-plugin-running-a-webapp-with-a-datasource-and-security/</guid><link>https://blog.jakubholy.net/2010/09/10/jetty-maven-plugin-running-a-webapp-with-a-datasource-and-security/</link><title>Jetty-maven-plugin: Running a webapp with a DataSource and security</title><description></description><pubDate>Fri, 10 Sep 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/08/31/most-interesting-links-of-august/</guid><link>https://blog.jakubholy.net/2010/08/31/most-interesting-links-of-august/</link><title>Most interesting links of August</title><description></description><pubDate>Tue, 31 Aug 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/08/10/disk-backup-with-clonezilla/</guid><link>https://blog.jakubholy.net/2010/08/10/disk-backup-with-clonezilla/</link><title>An encrypted backup of a disk/partition to a Samba share with Clonezilla</title><description>What is Clonezilla?</description><pubDate>Tue, 10 Aug 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/08/02/most-interesting-links-of-july/</guid><link>https://blog.jakubholy.net/2010/08/02/most-interesting-links-of-july/</link><title>Most interesting links of July</title><description></description><pubDate>Mon, 02 Aug 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/07/25/mobile-learning-application-minipauker-1-1-05-released-please-test/</guid><link>https://blog.jakubholy.net/2010/07/25/mobile-learning-application-minipauker-1-1-05-released-please-test/</link><title>Mobile learning application MiniPauker 1.1.05 released - please test!</title><description></description><pubDate>Sun, 25 Jul 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/07/21/my-path-to-scea-5/</guid><link>https://blog.jakubholy.net/2010/07/21/my-path-to-scea-5/</link><title>My path to SCEA 5</title><description></description><pubDate>Wed, 21 Jul 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/07/09/most-interesting-links-of-june/</guid><link>https://blog.jakubholy.net/2010/07/09/most-interesting-links-of-june/</link><title>Most interesting links of June</title><description></description><pubDate>Fri, 09 Jul 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/06/25/implementing-build-time-instrumentation-with-javassist/</guid><link>https://blog.jakubholy.net/2010/06/25/implementing-build-time-instrumentation-with-javassist/</link><title>Implementing build-time bytecode instrumentation with Javassist</title><description></description><pubDate>Thu, 24 Jun 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/06/10/booting-from-a-usb-stick-in-vmware-player/</guid><link>https://blog.jakubholy.net/2010/06/10/booting-from-a-usb-stick-in-vmware-player/</link><title>Booting from a USB stick in VMware Player</title><description></description><pubDate>Thu, 10 Jun 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/06/04/webservice-testing-with-jmeter-passing-data-from-a-response-to-another-request/</guid><link>https://blog.jakubholy.net/2010/06/04/webservice-testing-with-jmeter-passing-data-from-a-response-to-another-request/</link><title>Webservice testing with JMeter: Passing data from a response to another request</title><description></description><pubDate>Fri, 04 Jun 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/06/02/most-interesting-links-of-may/</guid><link>https://blog.jakubholy.net/2010/06/02/most-interesting-links-of-may/</link><title>Most interesting links of May</title><description></description><pubDate>Wed, 02 Jun 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/22/migrating-from-jroller-to-wordpress/</guid><link>https://blog.jakubholy.net/2010/05/22/migrating-from-jroller-to-wordpress/</link><title>Migrating from JRoller to Wordpress</title><description></description><pubDate>Sat, 22 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/16/how-visual-paradigm-nearly-ruined-my-day-and-dropbox-nearly-saved-it/</guid><link>https://blog.jakubholy.net/2010/05/16/how-visual-paradigm-nearly-ruined-my-day-and-dropbox-nearly-saved-it/</link><title>How Visual Paradigm (nearly) ruined my day and Dropbox (nearly) saved it</title><description></description><pubDate>Sun, 16 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/13/eclipse-profile-configuration-the-launch-requires-at-least-one-data-collector/</guid><link>https://blog.jakubholy.net/2010/05/13/eclipse-profile-configuration-the-launch-requires-at-least-one-data-collector/</link><title>Eclipse Profile configuration: The launch requires at least one data collector</title><description></description><pubDate>Thu, 13 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/08/book-real-world-java-ee-patterns-rethinking-best-practices-review-digest/</guid><link>https://blog.jakubholy.net/2010/05/08/book-real-world-java-ee-patterns-rethinking-best-practices-review-digest/</link><title>Book: Real World Java EE Patterns - Rethinking Best Practices (review &amp; digest)</title><description></description><pubDate>Sat, 08 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/05/mocking-out-ldapjndi-in-unit-tests/</guid><link>https://blog.jakubholy.net/2010/05/05/mocking-out-ldapjndi-in-unit-tests/</link><title>Mocking out LDAP/JNDI in unit tests</title><description></description><pubDate>Wed, 05 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/04/most-interesting-links-of-april/</guid><link>https://blog.jakubholy.net/2010/05/04/most-interesting-links-of-april/</link><title>Most interesting links of April</title><description></description><pubDate>Tue, 04 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/05/01/my-older-posts-at-jroller/</guid><link>https://blog.jakubholy.net/2010/05/01/my-older-posts-at-jroller/</link><title>My older posts at JRoller</title><description></description><pubDate>Sat, 01 May 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/04/12/file-based-user-authentication-und/</guid><link>https://blog.jakubholy.net/2010/04/12/file-based-user-authentication-und/</link><title>File-based User Authentication under WebSphere 6</title><description>File-based User Authentication under WebSphere 6</description><pubDate>Mon, 12 Apr 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/04/11/most-interesting-links-of-march/</guid><link>https://blog.jakubholy.net/2010/04/11/most-interesting-links-of-march/</link><title>Most interesting links of March</title><description>I've decided to publish links to the most interesting blogs, articles and pages that I've stubled upon in a particular month. Enjoy the first dose! (In no particular order.)I recommend the post 43 Essential Controls for Web Applications,which presents - with screenshots and short descriptions - the most used and useful javascript/ajax widgets for web pages, from the basic ones like auto-complete/suggestions and sliders through a calendar for less known yet very cool ones like sparklines. Read it to learn what's hot and you shouldn't miss in your application! (Warning: The number of widgets on a page is inversely proportional to its quality.)</description><pubDate>Sun, 11 Apr 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/04/08/enforcing-a-common-log-format-with/</guid><link>https://blog.jakubholy.net/2010/04/08/enforcing-a-common-log-format-with/</link><title>Enforcing a common log format with AspectJ</title><description>Enforcing a common log format with AspectJ</description><pubDate>Thu, 08 Apr 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/03/17/broken-eclipse-shortcut-under-gnom/</guid><link>https://blog.jakubholy.net/2010/03/17/broken-eclipse-shortcut-under-gnom/</link><title>Broken Eclipse shortcut under Gnome for Occurrences in File</title><description>Broken Eclipse shortcut under Gnome for Occurrences in File</description><pubDate>Wed, 17 Mar 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/02/26/eclipse-open-typeresource-working/</guid><link>https://blog.jakubholy.net/2010/02/26/eclipse-open-typeresource-working/</link><title>Eclipse: Open Type/Resource working again under Linux!</title><description></description><pubDate>Fri, 26 Feb 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/02/23/released-dbunit-test-skeleton-1-1/</guid><link>https://blog.jakubholy.net/2010/02/23/released-dbunit-test-skeleton-1-1/</link><title>Released DbUnit Test Skeleton 1.1.0 - also in Maven Central</title><description>Released DbUnit Test Skeleton 1.1.0 - also in Maven Central</description><pubDate>Tue, 23 Feb 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/02/10/the-art-of-logging-review/</guid><link>https://blog.jakubholy.net/2010/02/10/the-art-of-logging-review/</link><title>The Art of Logging (review)</title><description>Colin Eberhardt, the co-author of the Simple Logging Facade, has written a very good article The Art of Logging, which should be a compulsory reading for every developer especially in the server side development domain. It's good both as an introduction as it covers all the important aspects and also for experienced developers because it has some very valuable insights.Few ideas and sentences that really should be stressed:</description><pubDate>Wed, 10 Feb 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2010/02/07/releasing-a-project-to-maven-centr/</guid><link>https://blog.jakubholy.net/2010/02/07/releasing-a-project-to-maven-centr/</link><title>Releasing a project to Maven Central repository via Sonatype</title><description></description><pubDate>Sun, 07 Feb 2010 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/12/10/compiling-with-aspectjs-ajc-compil/</guid><link>https://blog.jakubholy.net/2009/12/10/compiling-with-aspectjs-ajc-compil/</link><title>Compiling with AspectJ's ajc compiler from Maven</title><description></description><pubDate>Thu, 10 Dec 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/12/07/troubleshooting-logging-configurat/</guid><link>https://blog.jakubholy.net/2009/12/07/troubleshooting-logging-configurat/</link><title>Troubleshooting logging configuration (Log4j, commons-logging)</title><description>Commons-logging (since 1.1)</description><pubDate>Mon, 07 Dec 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/11/07/preview-of-the-portlets-in-action/</guid><link>https://blog.jakubholy.net/2009/11/07/preview-of-the-portlets-in-action/</link><title>Preview of the Portlets in Action book available</title><description>The book Portlets in Action being written by Ashish Sarin, which I've already mentioned and which looks really promising, has been made available via the Manning Early Access Program. As of today there are two chapters available and you can read the first one "Introducing Portals and Portlets" for free.What I find to be the most attractive features of this book is that it concentrates on the "new" JSR 286 also known as Portlets 2.0 and goes beyond teaching portlets with its intorduction of Spring MVC and Ajax libraries suitable for portlets.</description><pubDate>Sat, 07 Nov 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/09/25/patterntesting-automatically-verif/</guid><link>https://blog.jakubholy.net/2009/09/25/patterntesting-automatically-verif/</link><title>PatternTesting: Automatically verifying the good application of architectural/design patterns in code</title><description></description><pubDate>Fri, 25 Sep 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/07/10/injecting-timing-aspect-into-junit/</guid><link>https://blog.jakubholy.net/2009/07/10/injecting-timing-aspect-into-junit/</link><title>Injecting timing aspect into JUnit test in Eclipse using AspectJ, AJDT</title><description>Introduction</description><pubDate>Fri, 10 Jul 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/07/05/see-how-test-driven-development-is/</guid><link>https://blog.jakubholy.net/2009/07/05/see-how-test-driven-development-is/</link><title>See how Test Driven Development is done in practice</title><description></description><pubDate>Sun, 05 Jul 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/07/04/the-quest-for-a-portal-web-framewo/</guid><link>https://blog.jakubholy.net/2009/07/04/the-quest-for-a-portal-web-framewo/</link><title>The quest for a portal web framework is over and the winner is: Spring Portlet MVC</title><description>For a long time I've been looking for a web framework that would ease the development of web UI in portlets. Pure JSP is too old-fashioned and the abstraction it provides is just too low-level. There are many good web frameworks for standard web applications (JSF/Seam, GWT, Struts 2, Wicket, you name it...) but if they include portlet support than only as an after-thought and it's usually far behind the quality and features of the standard web framework. Nobody was able to recommend me a decent portlet web framework - until recently. First I've learned about an upcoming book Portlets in Action (preview) by Ashish Sarin, which teaches not only Portlets 2.0 (JSR 286) but also other must-haves for a real world development like a portlet web framework and Ajax (DWR in this case). You've surely already guessed that Ashish uses Spring Portlet MVC, which indicates that it must be indeed good.</description><pubDate>Sat, 04 Jul 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/06/14/released-dbunit-test-skeleton-1-0/</guid><link>https://blog.jakubholy.net/2009/06/14/released-dbunit-test-skeleton-1-0/</link><title>Released DbUnit Test Skeleton 1.0.0 - setup DbUnit test w/ embedded DB in few minutes</title><description>I've just released a little open-source project DbUnit Test Skeleton 1.0.0. </description><pubDate>Sun, 14 Jun 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/05/23/a-logging-wrapper-around-prepareds/</guid><link>https://blog.jakubholy.net/2009/05/23/a-logging-wrapper-around-prepareds/</link><title>A logging wrapper around PreparedStatement to provide detailed info upon error</title><description>In my java web application I use JDBC to store data in batches into a database. When there is a problem the whole batch insert fails and it's difficult to find out what data caused it to fail. Therefore I've created a wrapper around PreparedStatement that remembers values passed into the various set* methods and can provide a comma-separated listing of all rows in the batch upon failure. This is my LoggingStatementDecorator that stores values for later logging; based on java.lang.reflect.Proxy:</description><pubDate>Sat, 23 May 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/05/23/a-new-release-0-30-of-minipauker-a/</guid><link>https://blog.jakubholy.net/2009/05/23/a-new-release-0-30-of-minipauker-a/</link><title>A new release 0.30 of MiniPauker, a J2ME flashcard learning application</title><description>I've just released MiniPauker v0.30, a J2ME application for learning vocabulary etc.MiniPauker is like Pauker a generic flashcard learning
program, but written in J2ME for the use with mobile devices which
support J2ME with MIDP2 and JSR-75. MiniPauker is compatible with
Pauker (import/export).</description><pubDate>Sat, 23 May 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/04/30/lotus-notes-8-x-under-linux-no-win/</guid><link>https://blog.jakubholy.net/2009/04/30/lotus-notes-8-x-under-linux-no-win/</link><title>Lotus Notes 8.x under Linux: No window shows up, Tips for upgrading to LN8.5</title><description>Since recently when I started Lotus Notes 8.0.2 as another user via sudo, it has started with the splash screen, asked for a password nad displayed a progress bar but as soon as the startup finished and the splash screen disappeared it hasn't open the main window. The process was running but there was no visible manifestation of it.After a long time and an upgrade to LN 8.5 I've figured out that perhaps there was something wrong with the configuration. The reason to think so is that LN8.5 exhibited exactly the same problem but for all users. Later I've discovered that there were some configuration files like /etc/notes/ and /etc/ibm-hannover.conf left from the previous version though I uninstalled it (maybe these aren't created during the installation but during first startup). After their deletion and LN8.5 reinstall it more less started to work.</description><pubDate>Thu, 30 Apr 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/04/20/developing-portlets-for-liferay-in/</guid><link>https://blog.jakubholy.net/2009/04/20/developing-portlets-for-liferay-in/</link><title>Developing portlets for Liferay in Eclipse</title><description>Environment</description><pubDate>Mon, 20 Apr 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/04/20/how-i-managed-to-deploy-a-jsfseam/</guid><link>https://blog.jakubholy.net/2009/04/20/how-i-managed-to-deploy-a-jsfseam/</link><title>How I managed to deploy a JSF/Seam portlet to JBoss after all</title><description>Introduction</description><pubDate>Mon, 20 Apr 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/04/20/using-scribefire-to-publish-to-jro/</guid><link>https://blog.jakubholy.net/2009/04/20/using-scribefire-to-publish-to-jro/</link><title>Using ScribeFire to publish to JRoller.com</title><description>To get the Firefox extension ScribeFire (v.3.2.3) to publish to jroller.com you may set you account as follows:</description><pubDate>Mon, 20 Apr 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/04/10/draft-maven-change-project-extendi/</guid><link>https://blog.jakubholy.net/2009/04/10/draft-maven-change-project-extendi/</link><title>[DRAFT] Maven "change" project extending a non-maven web project</title><description>Disclaimer: I'm rather new to Maven and thus my solution is likely not the best one. I welcome any improvement suggestions.  My current project here at IBA CZ extends a legacy non-maven web project and I had to devise how to organize the extension modules and other new modules depending upon them. The final goal was to create a portlet face for this servlet-only web application that is written in JSP and a strange presentation framework and then create specific portlets for specific needs.</description><pubDate>Fri, 10 Apr 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/03/23/seam-tutorial-1-2-richfaces-and-pa/</guid><link>https://blog.jakubholy.net/2009/03/23/seam-tutorial-1-2-richfaces-and-pa/</link><title>Seam Tutorial 1.2: RichFaces and paged table (datascroller)</title><description>My aim in this tutorial series is to
create a Seam portlet displaying data in a paged (and ideally also
sortable and filterable, but lets be realistic) table running in the
Liferay portal.</description><pubDate>Mon, 23 Mar 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/03/19/the-forgotten-hells-or-god-save-no/</guid><link>https://blog.jakubholy.net/2009/03/19/the-forgotten-hells-or-god-save-no/</link><title>The Forgotten Hells or God Save North Korea!</title><description>I intended this as an exclusively technological blog but after seeing the movie Yodok Stories yesterday I feel I can't keep silent on the subject. I'm even more touched by the movie because the first years of my life I spent myself in a communist dictatorship though it was already in its last stage and can be by no means compared to the nightmare of Korea. On this planet there are hellish places where human life or dignity have no value, where people live in such a suffering, fear, and pain that we perhaps even can not call them human any more. These places are well hidden from our sight though as the recent Fritzl case has shown, it doesn't need to be far away. I'd like to remind the world of two such places because pretending they do not exist only helps them to last longer. It's very good that everybody speaks about the human rights violations in Tibet but there are countries that need our attention even more though they may not be as attractive and "in".</description><pubDate>Thu, 19 Mar 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/03/17/when-will-we-see-jsr-286-in-jsf-po/</guid><link>https://blog.jakubholy.net/2009/03/17/when-will-we-see-jsr-286-in-jsf-po/</link><title>When will we see JSR 286 in JSF portlets?</title><description>Since June 2008 we have the final release of Portlet 2.0 (JSR 286) specification bringing the long sought after features like inter-portlet communication (IPC - events, shared/public render parameters), support for Ajax (resource request), portlet filters and more. It's already implemented in the latest versions of leading portals including Liferay 5.0, JBoss 2.7, Websphere 6.1 (though you can still encounter some bugs). Now we would like to know when the lovers of JSF will be able to profit from these features in their JSF portlets.</description><pubDate>Tue, 17 Mar 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/03/07/seam-tutorial-1-1-richfaces-and-pa/</guid><link>https://blog.jakubholy.net/2009/03/07/seam-tutorial-1-1-richfaces-and-pa/</link><title>Seam Tutorial 1.1: RichFaces and paged table (datascroller)</title><description></description><pubDate>Sat, 07 Mar 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/02/13/jsf-nullpointerexception-at-facess/</guid><link>https://blog.jakubholy.net/2009/02/13/jsf-nullpointerexception-at-facess/</link><title>JSF: NullPointerException at FacesServlet.init line 144 / Can't parse faces-config.xml - SocketException</title><description>Problem When deploying JSF 1.1 application to WebSphere 6.0 I got the following not much helpful exception: </description><pubDate>Fri, 13 Feb 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/01/24/are-portlets-dead-jsr168-and-jsr28/</guid><link>https://blog.jakubholy.net/2009/01/24/are-portlets-dead-jsr168-and-jsr28/</link><title>Are portlets dead? JSR168 and JSR286 versus reality.</title><description>Eric Spiegelberg, an experienced JEE and portlet developer, evaluates in his article JSR-286: The Edge of Irrelevance the changes brought to the portlet community by the "new" JSR 286 and comes to the sad conclusion that the portlet technology has missed its chance and is declining in interest and momentum and JSR 286 won't change that. Only rarely do the benefits of this technology outweigh the additional complexity, restricted programming model, and other drawbacks. He explains his opinions and gives reasons for them pretty well and I can only agree.Some of the points we can make here are:</description><pubDate>Sat, 24 Jan 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2009/01/21/eclipse-3-4-new-update-manager-and/</guid><link>https://blog.jakubholy.net/2009/01/21/eclipse-3-4-new-update-manager-and/</link><title>Eclipse 3.4: New Update Manager and broken Extension Locations</title><description>In Eclipse prior to 3.4 you could have a number of external "Extension Locations" for plugins/features you didn't want in the Eclipse installation directory or that you wanted to share among multiple Eclipse installations. In the Update Manager wizard you could have even selected that you want a plugin installed into a particular extension location. Since Eclipse 3.4 (Ganymede) this isn't possible anymore.Problem 1: Links to the external Extension Locations are ignored</description><pubDate>Wed, 21 Jan 2009 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2008/10/31/webapp-performance-monitoring-with/</guid><link>https://blog.jakubholy.net/2008/10/31/webapp-performance-monitoring-with/</link><title>Webapp performance monitoring with Glassbox 2.0: How does it work?</title><description>A word of warning: Information on this page originates from my exploration of Glassbox performed in Oct 2008 and may be inaccurate. Ron Bodkin, the mastermind behind Glassbox, was so kind as to review this but still there may be some mistakes or inexact informatiom left. In any case blame me :-)Introduction </description><pubDate>Fri, 31 Oct 2008 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2008/10/02/injecting-better-logging-into-a-bi/</guid><link>https://blog.jakubholy.net/2008/10/02/injecting-better-logging-into-a-bi/</link><title>Injecting better logging into a binary .class using Javassist</title><description></description><pubDate>Thu, 02 Oct 2008 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2008/09/26/add-method-tracing-params-result-t/</guid><link>https://blog.jakubholy.net/2008/09/26/add-method-tracing-params-result-t/</link><title>Add method tracing (params, result) to existing application w/o modifying it</title><description>
Have you ever needed to learn what's going on in a 3rd-party java application and yet didn't want to debug it and step through it? Were you wishing to be able to see what methods get called in what order together with their actual parameters and return values? There is a "simple" solution: AspectWerkz.Quick start:</description><pubDate>Fri, 26 Sep 2008 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2007/11/25/the-ultimate-web-ui-framework/</guid><link>https://blog.jakubholy.net/2007/11/25/the-ultimate-web-ui-framework/</link><title>The Ultimate Web UI Framework</title><description></description><pubDate>Sun, 25 Nov 2007 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2007/11/19/introducing-facelets/</guid><link>https://blog.jakubholy.net/2007/11/19/introducing-facelets/</link><title>Introducing Facelets</title><description>You might have already heard about Facelets (docs), a library for Java Server Faces (JSF), and wondered why it is popular and what it is good for. I've wondered too and now I want to share the answers with you.Warning: I'm a novice to Facelets and some things may be not completely exact. </description><pubDate>Mon, 19 Nov 2007 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2007/11/02/truncating-utf-string-to-the-given/</guid><link>https://blog.jakubholy.net/2007/11/02/truncating-utf-string-to-the-given/</link><title>Truncating UTF String to the given number of bytes while preserving its validity [for DB insert]</title><description></description><pubDate>Fri, 02 Nov 2007 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2007/08/21/vmware-shrink-image-even-though-it/</guid><link>https://blog.jakubholy.net/2007/08/21/vmware-shrink-image-even-though-it/</link><title>VMWare: Shrink image even though it’s a snapshot</title><description></description><pubDate>Tue, 21 Aug 2007 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2007/06/15/dependency-finder-1-2-0-for-java/</guid><link>https://blog.jakubholy.net/2007/06/15/dependency-finder-1-2-0-for-java/</link><title>Dependency Finder 1.2.0 for Java</title><description>Dependency Finder  for java can help you to find your way in unknown class files/library.
Usage:</description><pubDate>Fri, 15 Jun 2007 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2007/01/25/troubleshooting-classresource-load/</guid><link>https://blog.jakubholy.net/2007/01/25/troubleshooting-classresource-load/</link><title>Troubleshooting Class/Resource Loading on an Application Server</title><description>
If you need to find out where is a certain class loaded from or where a class has loaded a resource (typically a configuration file) from, you can use the JSP below - just put it to your web app and point a browser to it.
</description><pubDate>Thu, 25 Jan 2007 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/12/15/was-6-0-ant-tasks-install-an-app-w/</guid><link>https://blog.jakubholy.net/2006/12/15/was-6-0-ant-tasks-install-an-app-w/</link><title>WAS 6.0 ant tasks: Install an app with an external Ant</title><description>There are special ant taks to install/start/.. an application to a
WebSphere App Server 6.0. It's easy to run them with WAS's ant script
(&lt;was>/bin/was_ant.bat) but not so trivial to get them working with an
external ant, which may be necessary because WAS has an old version of ant.
So lets see how to do it.</description><pubDate>Fri, 15 Dec 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/11/24/rad-was-6-test-env-and-j2ee-securi/</guid><link>https://blog.jakubholy.net/2006/11/24/rad-was-6-test-env-and-j2ee-securi/</link><title>RAD, WAS 6 Test Env and J2EE security: getting rid of “No received or invocation credential exist on the thread”</title><description></description><pubDate>Fri, 24 Nov 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/11/14/rad-profiling-a-portlet/</guid><link>https://blog.jakubholy.net/2006/11/14/rad-profiling-a-portlet/</link><title>RAD: Profiling a portlet</title><description></description><pubDate>Tue, 14 Nov 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/11/02/kill-a-zombie-database-not-in-the/</guid><link>https://blog.jakubholy.net/2006/11/02/kill-a-zombie-database-not-in-the/</link><title>Kill a zombie database (not in the directory but can’t create it)</title><description></description><pubDate>Thu, 02 Nov 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/10/19/rad-server-configurations-in-ratio/</guid><link>https://blog.jakubholy.net/2006/10/19/rad-server-configurations-in-ratio/</link><title>RAD: Server Configurations in Rational Developer 6.0: copy, repair...</title><description></description><pubDate>Thu, 19 Oct 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/10/19/db2-find-out-current-locks-long-tr/</guid><link>https://blog.jakubholy.net/2006/10/19/db2-find-out-current-locks-long-tr/</link><title>DB2: Find out current locks, long transactions etc. [snapshot]</title><description></description><pubDate>Thu, 19 Oct 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/10/19/antmaven-add-build-daterevision-to/</guid><link>https://blog.jakubholy.net/2006/10/19/antmaven-add-build-daterevision-to/</link><title>Ant/Maven: Add build date/revision to the generated JAR's Manifest</title><description></description><pubDate>Thu, 19 Oct 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/05/25/sending-a-soap-request-to-a-web-se/</guid><link>https://blog.jakubholy.net/2006/05/25/sending-a-soap-request-to-a-web-se/</link><title>Sending a SOAP request to a Web Service via URLConnection</title><description>
You may want to test you web service by sending it a manually composed request and reading the XML returned. Here's how to do it (e.g. using BeanShell in jEdit):
</description><pubDate>Thu, 25 May 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/05/04/rad-websphere-and-changing-the-cla/</guid><link>https://blog.jakubholy.net/2006/05/04/rad-websphere-and-changing-the-cla/</link><title>RAD, WebSphere and changing the classloader mode</title><description>
I've spent hours trying to change the classloader mode for a .war include in an .ear application and deployed to the WebSphere Portal v5.1 Test Environment by means of Rational Application Developer's server configuration editor. I was able to change to for the EAR, but when I changed the mode for a WAR of the EAR from PARENT_FIRST to PARENT_LAST and saved the configuration, I was required to republish, after doing this RAD promted me to reload the configuration from the disk because it has changed. I did so - and my change to parent_last was gone.

Finally i discovered that if I stop the server, remove the application (EAR), republish (?), add the application, change the classloader mode of all WARs in question (and perhaps the EAR as well), save the config. and republish, the change will really apply.
</description><pubDate>Thu, 04 May 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/04/21/eclipse-run-gt-noclassdeffounderro/</guid><link>https://blog.jakubholy.net/2006/04/21/eclipse-run-gt-noclassdeffounderro/</link><title>Eclipse: Run => NoClassDefFoundError for an interface when loading a class implementing it</title><description></description><pubDate>Fri, 21 Apr 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/04/12/redeploy-an-application-earwar/</guid><link>https://blog.jakubholy.net/2006/04/12/redeploy-an-application-earwar/</link><title>Redeploy an application (ear/war/…) on JBoss</title><description>A) Via JMX-console</description><pubDate>Wed, 12 Apr 2006 00:00:00 +0000</pubDate></item><item><guid>https://blog.jakubholy.net/2006/04/10/access-ejb-on-jboss-from-outside/</guid><link>https://blog.jakubholy.net/2006/04/10/access-ejb-on-jboss-from-outside/</link><title>Access EJB on JBoss from outside</title><description>
How to acces an enterprise java bean (EJB) running on JBoss from a standalone application running outside JBoss?
</description><pubDate>Mon, 10 Apr 2006 00:00:00 +0000</pubDate></item></channel></rss>