300 km trip – it was amazing

Amazing, awesome, beautiful, wonderful… I don’t know better words for this trip. I decided to try 300 km in one day, and I did it. I planned to ride in about 25 km/h average speed, but made this faster – about 27,7 km/h (net time). Started five in the morning. Weather was good, everything was amazing and I still go back to many moments from this trip. Saw several new cities and towns, a lot of calm places. This trip was also a great learning – about my body, about preparing, about issues and possible problems. First time, but not last. Now I can only plan longer trips :)

Endomondo vs Strava

During riding a bike, running or other activities you probably register them – to get know your own records, to know route, or just to count kilometers, because people like numbers :) The easiest way is to use phone (because each of us have one) and one of many possible applications. The most common choice is probably Endomondo, but this is not the only possible choice. Strava is also noteworthy and I would like to compare both applications in this post, show their advantages and disadvantages, which I have observed over few years. In the beggining we can say, Strava is an application that was created primarily for fans of two wheels.

Continue reading “Endomondo vs Strava”

Phantom.js – use custom fonts in HTML to PDF convert

Very short, but I think, may help a lot of people… Last time I spent a lot of time on the big issue with Phantom.js in Node app. Very common task: application should generate PDF files from input HTML code. Nothing difficult, yes? Yep, and it worked fine on my Node app… But one day, client said, that we should change font in document. Simple, we can just use font-face in input HTML styles, right? In theory, yes. Phantom.js and Node packages to use this library to convert HTML to PDF can use custom fonts and also other external assets like images.

With very popular html-pdf package we can use external, full link to assets, use absolute path to our local directory with files (using file:/// prefix) or specify base path in rendering options, and then use relative (to this base path) paths in our styles. And… it works fine. It also worked fine with custom fonts on my project. But only on local machine where I use MacOS. After deploying app to Debin, Ubuntu Server or CentOS server, PDFs are broken – with no selected text, but all pages are “images”, with many broken characters and very big results file (it isn’t strange if we have images, instead of text in PDF). Custom fonts have been used correctly, but PDF was broken, why?

It’s library and Phantom.js issue, but solution is very, very simple. We must install our custom fonts locally on production machine and do not attach them in CSS – just use as existing font-family! It’s because Phantom is external script and it can use system-wide fonts. Where should we place our files? There are directories. If you have issues with custom fonts and non-selectable text, just copy fonts to:

/usr/share/fonts
/usr/local/share/fonts/

II Rajd na Ślężę – too hot, too little water

It wasn’t race… but a lot of participants rode very, very fast. Route from Lubin to Ślęża mountain had about 85 kilometers… in straight line. We could choose the route ourselves, but we had to complete few checkpoints. My route had about 115 kilometers and additional 2-3 kilometers in Ślęża (about 660 m elevation during ride + 350 m during walking). It was impossible for me to ride to the top of the mountain on my bike (46/34 + 11-28T) after that route. It was fast… very fast with a lot of wind and hot. I also made a simple mistake: too little water during ride… and felt it at the end. The most terrible “collapse” I ever felt. But… I was the second and it’s nice!

Continue reading “II Rajd na Ślężę – too hot, too little water”

JavaScript – this keyword usage and binding

JavaScript is very elastic and popular language, but many things may be “strange” if we used soemthing else before. One of important things is that we create a lot of functions, callbacks and everything is asynchronous (if we don’t change this). Other important matter is “this” keyword – may be very unintuitive if we try to use it in similar way to other languages. But this keyword is very powerful and we can simplify our code using this keyword. See few examples in this post.

Continue reading “JavaScript – this keyword usage and binding”