Search
Write a publication
Pull to refresh

Development

Show first
Period
Level of difficulty

Create a native Kotlin application with Spring Boot Native, Gradle, and GraalVM without Docker for MacOS and Windows

Level of difficultyMedium
Reading time11 min
Views2.8K

In this tutorial, I want to talk about the practical experience of native compilation of a production application written in Kotlin with Spring Boot and Gradle using GraalVM. I’ll start right away with the pros and cons of the native compilation feature itself and where it can be useful, and then I’ll move directly to the build process for MacOS and Windows.

At the end of the article, in the afterword block, I will talk in more detail about the project and why such a need arose, given quite a few limitations and pitfalls of supporting native compilation both from Spring Boot and from GraalVM.

Read more →

Best distributed task scheduling framework — Openjob 1.0.7 released

Reading time5 min
Views1.8K

Openjob is a new  distributed task scheduling framework based on Akka architecture. Supports multiple cronjob, delay task, workflow, lightweight distributed computing, unlimited horizontal scaling, with high scalability and fault tolerance. Also has complete management, powerful alarm monitoring, and support multiple languages

Read more

Writing an interpreter (virtual machine) for a simple byte-code + JIT compilation

Level of difficultyMedium
Reading time10 min
Views2.2K

There are two articles on Russian, the author of which writes a virtual machine (interpreter) for executing a simple bytecode and then applies different optimizations to make this virtual machine faster. Besides that, there is a compiler of a simple C-like language into this bytecode. After reading this article and getting familiar with the compiler, I thought that it would be interesting to try writing a virtual machine for this language that would be able to apply JIT-compilation to this bytecode with the libjit library. This article describes the experience of doing that.

I found several articles online that describe the usage of this library, but those that I saw, describe the compilation of concrete programs with libjit, while I was interested in compiling arbitrary bytecode. For people interested in further reading, there is an official titorial, a series of articles and a series of comparisons (in Russian).

The implementation was done in C++ because we aren`t playing games here. All my code is in my repository. The "main" branch has just the interpreter of the PigletVM bytecode; "labels-with-fallbacks" has a partial JIT compilation implementation (that doesn`t support JUMP instructions), "full-jit" has fully working JIT-compilationl; "making-jit-code-faster" makes code generated by JIT work faster and "universal-base-vm*" branches merge the interpreter and JIT-compilation implementations, by implementing a base generalised executor, which can be used for different implementations of PigletVM (both the interpreter and libjit compilation)

Read more

React Custom Hook: useDebounce

Level of difficultyMedium
Reading time2 min
Views3.1K

This custom hook is particularly beneficial in scenarios where you need to handle user input, such as search bars or form fields, where you want to delay the execution of an action until the user has finished typing or interacting. It's also useful for optimizing network requests, ensuring that requests are sent only after the user has stopped typing or selecting options.

Read more

APRS. AFSK modulator from Flipper Zero

Level of difficultyMedium
Reading time7 min
Views5.9K

There is such an interesting data transfer protocol - APRS. A lot has already been told about him on the Internet. There will be no in-depth theoretical material here. This article will describe how to create your own "pocket" AFSK modulator. In the following articles there will be instructions for going on the air and for creating a simple demodulator. Which will allow you to accept APRS packages and display information on the display right on the street. Everything will be implemented for Flipper Zero. If you don't have this gadget yet, then don't worry and try everything on the great and terrible Arduino. It is very interesting to transmit information at a distance "with your own hands".

Read more

Affordable as a Bus, Comfortable as a Taxi: A Promising Type of Public Transport for Large and Medium-Sized Cities.Part2

Level of difficultyMedium
Reading time56 min
Views1.2K

(Jean-Claude Mézières)

Translation provided by ChatGPT, link to the original article in Russian

Link to Part 1: «Preliminary Analysis» (ру / eng )
Link to Part 2: «Experiments on a Torus» (ру / eng )
Link to Part 3: «Practically Significant Solutions» (ру / eng )
Link to «Summary» (ру / eng )

Experiments on the Torus


This is the second part of a study dedicated to exploring new public transportation movement schemes. In the first part, we examined the simplest non-stop scheme and a single-transfer scheme based on it, which can be implemented in a grid city on a plane. In this part, our city model will be a grid city on a «flat» torus. Unlike a rectangle, a torus has no edge, and the positions of all points on it are absolutely equivalent. Due to the absence of an edge and (transitive) symmetry, calculations for a toroidal city are simpler, and numerical results are nearly identical to those for a rectangular city on a plane. These two conditions make a toroidal grid city an ideal testing ground for new passenger transportation movement schemes. In this article, we will explore two such schemes on the torus, and in the next one, we will return to the plane and adapt the results obtained here for use under the realistic conditions of a rectangular city.

The content of this study is not standalone and presupposes familiarity with the first part of the article. To understand Chapter 2, you will need a level of mathematics that corresponds roughly to the first two years of university; for everything else, high school level should suffice. It can be helpful to have a pencil and a piece of paper at hand while reading. If your browser displays formulas incorrectly, try refreshing the page a few times.
Read more →

Pixel image rotation

Level of difficultyEasy
Reading time13 min
Views1.5K

Brief problem formulation

The program accepts as input the absolute path to the image in the bmp extension and the path where you save the result of the work. Then, it rotates the image by 90 degrees counterclockwise. Afterwards, the program saves the new image.

The program is executed on C.

Read more

Blinking into Morse code

Level of difficultyEasy
Reading time10 min
Views2.3K

Explaining main algorithm.

For a while I’ve been thinking of writing a scientific article. I wanted it to have certain utility.

Morse code is binary: it takes only two values – either dot (short) or hyphen (long). I figured out that short (s) can stand for two-eye blinking whilst long (l) can indicate left-eye blinking. Another question emerged: how to understand when does one-symbol recording stop?

Empty space between two symbols can be presented by right-eye blinking – r. If I input singly symbol of short (dot) and long (hyphen), I will blink my right eye once to indicate the space between two symbols.

To separate independent words, one has to blink her right eye twice and get rr.

Hence, I have collected an ordered set of symbols – r, l, s, - that can be converted into a full-fledged text. Once I accomplish the transformation, I get an answer.

Read more

Machine Learning for price optimization

Level of difficultyMedium
Reading time27 min
Views7.6K

This is a translated and adopted article I wrote for the Aha'22 (30 May 2022) conference. It describes an approach to a marketplace prices optimisation. Here I've outlined some important definitions and tried to define the scopes and roles of ML, algorithms, and humans in optimal pricing. Although the article covers rather basic things, still, you can find out some new formulas and ideas, because these basics are somewhat "well-known only in a very closed clubs", and besides, the real gem found here is the detailed recipe for ML engineers how to build optimal pricing systems.

Read more

SwiftUI & ChatGPT. The world is changing. Again

Level of difficultyEasy
Reading time4 min
Views3.1K

Everything that follows from this point forward input prompts, followed by ChatCGP’s responses, complete with sample code in Swift.

> Hey ChatGPT, can you make a SwiftUI registration form with name, address and city fields?

Read more

From Zero to Hero: LeetCode

Level of difficultyMedium
Reading time8 min
Views31K

This is a translation of my article in Russian

In this article, I want to write about my experience of interacting with the LeetCode platform, and describe my preparation for an interview in FAANG similar companies by breaking it down into levels.

The whole article is written based on my experience, the numbers are very rough, I do not pretend to be objective, perhaps there are best practices on how to solve LeetCode problems, it would be cool if you share your experience in the comments.

Read more

Technical debt mini-guide. How to pay it off

Reading time7 min
Views2.3K

In this article, I want to describe my experience of paying off technical debt on our project in the form of a guide. In this guide, I will highlight some of the most common cases of technical debt and suggest methods for solving them. Since this is a rather extensive topic, I will recommend several books for study, because I do not see it possible to talk about everything within the framework of this article. Everything described applies to the BackEnd part, but it may be suitable for other developers. I would be glad if you share your experience on this topic in the comments.

Read more

Codepast people – programmers’ sunset

Reading time5 min
Views2.3K

— Glitchy couch! — Anton exclaimed, yet another time crushing down his fingers by heavy coach he and Sergey were pulling for 14 storeys already.
— ‘Glitchy’? — Sergey asked — have you been coder in the past too?
They’ve been working almost a week together, but Sergey would have never suspected he was coder in the past. Lean and muscular Anton did not look the part at all.
— I had to in my student years, — Anton answered, abashed.
— Relax! One of us. Layout, three years and JS for every browser out there, — Sergey perked up, pushed the couch and pressed it a bit forcefully on Anton.

Read more →

MemGame

Reading time2 min
Views1.3K

We are the first year students studying Computer Science in Innopolis University and we would like to share our experience in developing a Verilog program to create the greatest Memory Game (MemGame) that has ever existed on the FPGA board.

In this article, we decided to create a game for extending human memory. You will read the background theory and the incredible story of creation.

Read more

Main Challenges and Mistakes in Creating Your Design System

Reading time14 min
Views2.1K

Design system creation and integration is a challenging and rather tedious task. It can simply the development process or make it even harder. Anton Polyakov, Project Management Director for Innotech’s Mobile Development Department shares his team’s experience to demonstrate the unforeseen challenges they encountered.

Read more

Understanding the Differences Between Kafka and RabbitMQ: in Simple Terms

Reading time7 min
Views5.2K

Software message brokers became the standard for creating complex systems. However not all IT specialists understand how these instruments work. Pavel Malygin, Lead System Analyst at Innotech, dives into the topic of message brokers and explains how they are used.

Read more

http://GuitarFX.Net Digital (SOFTWARE) modeling of analog guitar distortion, reverb, noise gate etc. effects

Reading time5 min
Views1.6K

The sound of rock music, in particular of hard rock and heavy metal, is largely based on a specially distorted guitar sound, for which electronic “distortion” devices, tube amplifiers in “overloaded” mode, computers with appropriate software and digital processors are used. increasingly using neural network algorithms.

The distorted sound of electric guitars began to gain popularity around the 1960s. Since that time, the sound of overloaded tube amplifiers, connected to powerful dedicated guitar speakers with large dedicated speakers, has been considered the benchmark in rock music. But tube amplifiers were relatively expensive and inconvenient to operate. Therefore, semiconductor distortion devices were developed.

At that time, the electrical circuitry of distortion devices was relatively simple and the signal output from their output only vaguely resembled the sound of an overloaded tube amplifier. Nevertheless, it was still somewhat similar to the “sound of a lamp” and this provided a powerful incentive for designers of analog semiconductor distortion circuits to continue their research, complicate circuits and propose new circuit solutions. The heyday of analog solid-state distortion was around 1995-2010. The most popular were electrical circuit diagrams like those shown in the figure below.

Read more

How to Customize UI Artefacts for Selenide + Selenoid + Allure (with TestOPS)

Reading time20 min
Views2.3K

The common combination of JUnit5, Selenide and Allure has proven to be stable and reliable for autotesting. The remaining issue, however, lies in test length increase up until the rise of overall test numbers. The resulting video files turn out to be over an hour. Alexander Kochergin, Lead engineer at Innotech, has found a way to simplify the process.

Read more