RSSAmplifier

Blog

Index on Blog

Recent content in Index on Blog

blog.ubavic.rsRSS feed ↗17 posts

Latest posts

Administracija servera uz ličnu kartu

Tokom prethodnih godinu dana, radio sam na kreiranju PKCS#11 modula otvorenog koda za srpske lične karte. Motivacija za kreiranje modula bila je pre svega omogućavanje Linux i macOS korisnicima da se uloguju na državne portale poput eUprave ili ePoreza. Međutim, kako je PKCS#11 standard veoma rasprostranjen, neki načini upotrebe otvorili su se o kojima i nisam razmišljao kada sam počeo da radim na…

Reimplementing PKCS#11 module

It has been more than two years since I released Baš Čelik, software for reading serbian smart-card documents. After the past two years I implemented everything I originally planned (and more), but one feature was always missing and users kept asking for it: the ability to use the personal certificate from the ID card to sign data. A driver for such functionality exists for Windows, but not for…

CV Tips from Someone Who Actually Reads Them

Our team was recently looking for a new developer, and I was tasked with reviewing CVs and conducting technical interviews. I’ve done technical interviews before, but this time I first had to go through around 100 CVs and pick the most promising ones. As we are working with fairly unknown technology (a domain-specific language called AL), we were open to candidates of all levels. In candidates, we…

Windows sucks

Microsoft Windows operating system sucks. Unfortunately, I am forced to use it at work. It sucks as a day-to-day operating system, and it sucks as a development environment. Every day, it sucks more and more. It takes me at least twice as long to compile the same Go code on Windows as on Linux. My Github actions run 8 times slower on Windows runners than Linux runners. It takes 30 seconds for…

The Second Dumbest Way to Solve a Maze

You’re probably familiar with The Dumbest Way To Solve A Maze: a method involving the simulation of gas diffusion through the maze’s hallways. I’d like to introduce what is likely the second dumbest way to solve a maze. While this method isn’t inherently dumb (in fact, it involves math that is far from ‘dumb’), it’s so impractical for actual use that it’s simply…

Some Tips on Building Business Central Reports

I’ve noticed that many of my colleagues don’t enjoy creating Business Central reports, which is a shame because building a good, non-trivial report can be very interesting and requires more skill the some would admit. Here, I’ve listed a few things I’ve noticed others often overlook when creating reports (whether out of a lack of knowledge or interest). Some tips are straightforward, some are…

Pen plotter

The idea of having a pen plotter has been living in my head for some time, and this month I finally decided to bite the bullet. I had initially planned to build a brand-new plotter from custom parts, but an opportunity arose, and I purchased a heavily modified Ender 3 V2 at a good price. The Ender has a working area of only 220mm x 220mm, which is insufficient for A4 paper.

Building Galaksija, 40 years later

Galaksija (Galaxy) is a single-board Z80 computer, constructed in the early 1980s in Yugoslavia by Voja Antonić. It was publicly announced as a DIY project in the magazine Računari u vašoj kući (Computers in Your Home) in January 1984, complete with schematics and building instructions. There are countless blog posts, forum threads, magazine articles, and videos about this computer and its…

Writing GUI apps doesn't have to be painful

Recently, I came across the article Writing GUI apps for Windows is painful which resonated with me. Just over a year ago, I was in a similar position as the author. I was just starting a new project and was looking for a GUI library with the following requirements: Should support Linux Should be easy to set up for development The compiled binary should be small and easy for the end user to use…

Porting the GCLC to the web

This week, Professor Predrag Janičić and I released the web version of GCLC. If you are not a mathematician, chances are that you never heard of GCLC. GCLC is a programming language/compiler for mathematical illustrations. The first version was created in 1995 by Professor Janičić, and since then the program has been constantly expanded with new features. Comparing it to some more popular tools,…

Don't worry, your Parser is a functor

If you start learning about applicative parsers, at the very start you’ll encounter the following abstract type (or something similar): newtype Parser a = P (String -> Maybe (String, a)) This type represents a function that takes an input string and maybe produces a pair containing the parsed token with the rest of the string. Once you’ve grasped the concept of the Parser type, you can…

Reading Serbian ID cards with Golang

I am a little bit late with this post, but I feel it is good to publish it nevertheless. Three weeks ago, I released the Baš Čelik, a program for reading ID cards issued by the government of Serbia. This program can read data from an ID card, and save it as a PDF which looks the same as a PDF produced by the official application. And believe me, in Serbia for some reason you need this PDF (or…

Lambda calculus and differential geometry

You can perfectly demonstrate the essence of currying in almost any modern language, but there are some phenomena that are only revealed to programmers who program in ML/Lisp languages. I want to say something about that. Take for example map function in Haskell. Its type is (a - > b) -> ([a] -> [b]) (often written as (a - > b) -> [a] -> [b]). This type can be interpreted in two different ways:

Proggy-buggy 2023

Today I participated in the online programming contest Proggy-buggy 2023, organized by Ukrainian company DataArt. This is my first programming contest, so I am excited to share impressions. We were presented with 13 programming problems and had 42 minutes to solve them. Problems were indeed very simple: for example, the first one could be solved by multiplying two numbers given in stdin, and the…

Restoring addresses with Haskell

Leetcode has a very nice problem called Restore IP Addresses. The task is that for given string s containing only digits, we find all possible valid IPv4 addresses that can be formed by inserting dots into s. For example, from "25525511135" we can form only addresses 255.255.11.135 and 255.255.111.35. Solution in 16 lines First, we will construct three functions of type String -> [(Int, String)].…

Chaos game

Today I released the interactive demonstration of iterated function system know as Chaos game. You can read more about Chaos game on the Wikipedia, but long story short, we fix a plane polygon $\Pi = \{V_1, \dots V_m\}$ and choose an arbitrary plane point $P_0$. Then we iteratively generate orbit $\mathcal O = \{P_0, P_1, P_2, …\}$ by using formula $$ \vec P_{i+1} = \frac12\left(\vec…

Setting up the minimal blog

I found countless nicely designed blogs that have a single post, a post about setting up a blog (there is a popular meme about this). Some of these blogs had been in such state for years, suggesting that the author often didn’t find inspiration past the first post. I am not sure why is that, but yesterday I found out why they even publish that first post. You see, setting up your blog with a…