I'm looking for a part-time remote job.

Hire me

I'm the author of:

Mastering Redmine is a comprehensive guide with tips, tricks and best practices, and an easy-to-learn structure.

Check the book's project or

Buy the book

Social pages of the book:

By buying this book you also donate to Redmine (see this page).

Follow me:

Redmine plugin showing logs for outgoing emails

Added by 3 months ago

Sometimes it’s important to know, if the user should have received the email notification generated by Redmine. Especially, if usage of Redmine in your organization relies on email integration (for example, if it’s configured to receive user comments, such as issue notes and message replies, via email). In such cases, some users may use Redmine user interface very rarely as all the communication can be made through emails.

Until now it was impossible to determine using Redmine, if the particular email notification was sent to the particular user. For this, you would need to dig into the logs of the message transfer agent (MTA) (if you had access to those logs, of course). Even so, it was not easy to link records in such logs to certain email notifications.

More »

4-byte UTF-8 problem in Redmine and how to fix it

Added by 3 months ago

I’ll start with explaining the cause of the problem. If you don’t need this, you can skip the padded paragraphs.

You have probably already heard about issues with weird symbols in iPhones, that led to freeze or reboot? Something like these can also be experienced on Redmine instances, that were installed some time ago. iPhones crash because they fail to render the weird symbols and such Redmine instances give errors because they fail to save corresponding symbols to the database. Yes, the problem is actually in the underlying MySQL database, not in Redmine. In iPhones this happens with some unusual 4-byte unicode symbols and in Redmine/MySQL this can happen with any 4-byte symbol. Thus, you can experience this issue in Redmine with emoji, some Chinese, Japanese and Korean characters.

More »

CD-Index: My media cataloging solution

Added by 6 months ago

I have a huge media collection, that I created many years ago. Eventually, in some time I got need to find several files by their names. After unsuccessful checking tens of my CDs I realized, that it was too complicated to do that simple task as my media collection was just too big. In this way, I came to the conclusion, that I needed a media cataloging tool.

I tried many ready solutions, but none of them appeared to be good enough for me to use. The biggest problem with them was the search – it was just damn too slow. And, it was so slow becauses they used plain text files, e.g., in XML format, to store the file structure information. It looked like they loaded those big text files, parsed them and then made the search. And they did that for each media. So eventually, I realized, that I had to implement my own solution.

More »

Adding GitHub mirror for SVN repository

Added by 6 months ago

I store code of my projects in Subversion repositories on this server (on which this website is hosted). I thought about switching to GitHub, but I don’t like the idea, that the main code repository of my project would be stored on a third-party server. Not sure why. Also, I didn’t want to lose the ability to count downloads and checkouts (I use these data to determine popularity of projects), but I have already lost this, as many my projects got forks. Anyway, the reason is not such important for this article, as you can have own reasons for the same.

GitHub is the most popular project hosting service nowadays. Due to this many developers, who want to make some changes to my projects, upload their forks to this service. Actually, these projects include not only my code – if someone submits a patch, which fixes some issue or implements some feature and which is good enough (in my opinion), I usually merge it (making a note in CREDITS file). Forks on GitHub can have such changes too, but, because they are not linked to the original projects in any way, I often do not know about their existence. So, to include such changes I need to search for forks (what I did recently). Needless to say, that this would be much easier – in particular due to GitHub’s social networking capabilities – if these forks were linked to my projects. But for this, I would need to host my code repositories on GitHub.

More »

ownCloud-based backup solution (1 comment)

Added by 9 months ago

Making everyday backups, while the data remain safe for years, may seem to be redundant and needless. Therefore, people realize, how stupid it was not to have backups, only when their data get lost (it happened to me too, quite a long time ago). However, backing up does not have to be a dull process. It can serve other purposes too…

In this article, I’m going to share the solution, that I personally use to back up this site. When looking for it, I wanted it to meet the following requirements:

More »

Personal report for 2017

Added by 10 months ago

The personal report for the previous year can be seen here

This is another report for one more failure year, but, I hope, for the last such one (as I’m doing very serious things to prevent this in future). In this year, I finally realized, that I got into a comfort zone (again), which did not allow me to move forward and which, eventually, appeared to be not really comfort. Now I understand, that this could be seen just by reading my previous reports (for 2015-2016), but I was too “blind” (that’s, actually, how the comfort zone works).

More »

Kayako API resource presentation

Added by 11 months ago

There are two ways, in which you can design your API – you can create it for applications or you can create it for users. Historically, APIs were created for applications, what, I believe, was wrong. Your API is another your service, so it should be as friendly to the end user as possible, just like your normal services. And, it’s the user (e.g., a developer), that uses your API, not an application, that he/she is possibly writing (thus, some users can use your API through command-line CURL).

This is the approach, which is propagated by such famous API designers as Apigee and which was also taken by Kayako, when we were designing our API. And, that’s why we decided to use the current approach for the partial output, which we implemented with the help of the special fields= argument, that should be specified in the request URI.

More »

Mastering Redmine: Upgrading to Redmine 3.3 (from 3.2)

Added by 2 years ago

As you can read in the book, I decided to store the Redmine code for the book’s project in the directory /opt/redmine/redmine-x.y.z, where x.y.z is the version number. I chose such location to be able to easily switch back to the previous version of Redmine in a case of upgrade failure.

However, such approach introduced a need to copy all the user and state data, such as logs, from the old version to the new one during the upgrade. And, there are quite a lot of such data. So, to simplify this process, I decided to modify the Redmine file structure a little.

More »

Projects: Facebook, Twitter and GitHub authentication

Added by 2 years ago

After I have restored the possibility for users to authenticate on my website using their Google accounts, I decided to give a try to the TweetBook plugin for Redmine, which lets authenticate users with their Facebook, Twitter and GitHub accounts. Unfortunately, it appeared to be more complicated, than I expected, and I had to fork and fix this plugin to be able to use it (the original plugin was created by Sandeep Kumar).

Eventually, you can login into my website using your Facebook, Twitter or GitHub account. Also, you can login using you Google account, what was already announced in a separate news.

More »


Also available in: Atom