Pull to refresh

All streams

Show first
Rating limit
Level of difficulty

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

Level of difficulty Medium
Reading time 10 min
Views 209
C++ **nix *Compilers *
Translation

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
Total votes 3: ↑3 and ↓0 +3
Comments 1

How to conduct UX brainstorming sessions effectively: tips and methods that work

Level of difficulty Medium
Reading time 6 min
Views 86
Habr IT Standards *Usability *Interview IT-companies
Retrospective

Brainstorming is a popular working method which is commonly used by UX design teams. It involves a group of designers meeting (whether offline or via video call) and generating as many ideas as possible to find the best solution to a specific problem or come up with creative design ideas. Brainstorming sessions are usually held at the start of a UX project so that designers could use the ideas they think are the best later in the process of product creation. These sessions can vary in duration and form depending on which problems need to be solved, how many people participate and how many ideas need to be generated. 

Read more
Rating 0
Comments 2

React Custom Hook: useFetch

Level of difficulty Medium
Reading time 2 min
Views 564
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

One of the key advantages of useFetch is its simplicity. By abstracting away the fetch logic into a reusable hook, developers can quickly and effortlessly make HTTP requests and handle responses without repetitive boilerplate code. With just a few lines, useFetch handles the network request, parses the JSON response, and provides the resulting data.

Read more
Total votes 3: ↑0 and ↓3 -3
Comments 0

Handling multidisciplinary project development

Level of difficulty Medium
Reading time 4 min
Views 234
System Analysis and Design *Development Management *Systems engineering *
Opinion

Multidisciplinary project emerges when multiple teams with different expertise areas join to create a product. Despite the fact the product development is not something happining merely my a wish, product leads often perceive it as an easy walk. Usually this easy walk becomes a crash course. Let's uncover what leads to crash and what is necessary to succeed.

Read more
Rating 0
Comments 2

ATM security analysis 3.0: PHDays 12 in review

Reading time 8 min
Views 220
Positive Technologies corporate blog Information Security *Payment systems *Entertaining tasks Cryptocurrencies
Review

 Python, Java, C++, Delphi, PHP—these programming languages were used create a virtual crypto ATM machine to be tested by the participants of the $NATCH contest at Positive Hack Days 12. The entire code was written by ChatGPT and proved to be exceptionally good. This time, we had reviewed the contest concept and decided to use a report system. In addition to standard tasks (kiosk bypass, privilege escalation, and AppLocker bypass), this year's participants faced new unusual tasks. Read on below to find out which ones.

Read more
Rating 0
Comments 1

React Custom Hook: useEventListener

Level of difficulty Medium
Reading time 2 min
Views 526
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

The useEventListener hook is a versatile tool that can be used in a wide range of scenarios. Whether you need to capture keyboard events, listen for scroll events, or interact with user input, this hook has got you covered. Its simplicity and elegance make it an ideal choice for any React project, from small-scale applications to large-scale enterprise solutions.

Read more
Rating 0
Comments 0

Let's kill all frameworks at once

Level of difficulty Medium
Reading time 14 min
Views 3.5K
Website development *System Programming *Node.JS *Artificial Intelligence WebAssembly *
Opinion

The general trend of technology development is characterized by surges and declines. Consider, for instance, the mass movement of human bodies. Initially, horses and wagons were used, which gradually evolved into a distinct industry. Then trains appeared abruptly. Horses were quickly forgotten, and the focus shifted to a new avenue. Steam became an object of study and evolved into a complex science. Diesel and electricity developed concurrently. At a certain point, steam engines became obsolete, and everyone transitioned to diesel and electricity. Similarly, we are now transitioning to electric cars that require significantly fewer fluids.

Technologies evolve and function until new technologies completely replace them. I believe we are entering an era where framework and Electron technologies may be eclipsed by generative AI. Let's examine some examples.

Read more
Rating 0
Comments 8

React Custom Hook: useDeepCompareEffect

Level of difficulty Medium
Reading time 3 min
Views 977
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

One of the key advantages of useDeepCompareEffect is its ability to prevent unnecessary re-renders. By performing a deep comparison between the current and previous dependencies, the hook intelligently determines if the effect should be triggered, leading to optimized performance in scenarios where shallow comparisons fall short.

Read more
Rating 0
Comments 0

React Custom Hook: useDebugInformation

Level of difficulty Medium
Reading time 3 min
Views 1.2K
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

The useDebugInformation hook can be applied in various scenarios. For instance, imagine you're working on a complex form component where certain props trigger updates or affect rendering. By utilizing useDebugInformation, you can easily monitor how these props impact your component's performance and whether unnecessary re-renders are occurring. Additionally, the hook can be invaluable when investigating why a specific component is not updating as expected or when fine-tuning optimizations in a performance-critical application.

Read more
Total votes 4: ↑3 and ↓1 +2
Comments 0

LeetCode, Hard: 2818. Apply Operations to Maximize Score. Swift

Level of difficulty Hard
Reading time 4 min
Views 576
Development of mobile applications *Algorithms *Swift *
Case

Time complexityO(max(nums) * log(max(nums)) + n * log(n)). Accounting for computing prime scores, using the stack to compute next greater elements, and sorting the tuples.

Space complexityO(max(nums) + n). Considering the space required for arrays and the stack used for computation.

Read more
Total votes 2: ↑1 and ↓1 0
Comments 1

Making Java 8 aware of Let's Encrypt root certificate

Level of difficulty Easy
Reading time 3 min
Views 279
Java **nix *

When using older version of Java with not updated truststore, you may face an error while connecting to web hosts, that Java is unable to find a valid certification path to the requested target.

This happens because JRE truststore is unaware of the new root certificate that is being used by Let's Encrypt nowadays. Below I tried to clarify detail behind this issue and how to solve it. I hope newcomers might find this material helpful.

Read more
Rating 0
Comments 5

Setup of Qt Creator for programming and debugging of STM32 microcontrollers

Level of difficulty Medium
Reading time 9 min
Views 524
Open source *C *Programming microcontrollers *DIY
Tutorial

Currently I am investigating firmware development for STM32 microcontrollers and I would like to share with you my experience for doing it in Qt Creator IDE.

There are a lot of IDEs, which are used for firmware development of STM32. Some of them, being quite comfortable, have restrictions for trial license. For example, the one of the most known IDE, IAR Embedded, suggests either a limited amount of product usage time (30 days) or the limited firmware size of 32 MB, which is not too much.

Within this scope of the publication, we investigate the method of setting up an environment that allows one to develop the full value of the STM32 firmware in Qt Creator.

Read more
Rating 0
Comments 0

React Custom Hook: useDebounce

Level of difficulty Medium
Reading time 2 min
Views 991
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

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
Total votes 5: ↑4 and ↓1 +3
Comments 0

Wi-Fi internet radio from a router with station switching capability

Level of difficulty Medium
Reading time 8 min
Views 440
*nix *DIY Sound Electronics for beginners
Tutorial
Wi-Fi интернет-радиоприёмник.
ChatGPT was not used in writing this article.
The animated image uses the webp file format instead of gif.
In this article, you will find a complete description of how to make a Wi-Fi internet radio receiver from a router that can play mp3 streams from internet radio stations.
It is also possible to switch between two internet radio stations. We will use OpenWRT firmware installed on the router to create a Wi-Fi internet radio. It is possible to complete this project without using a soldering iron. All the components can be placed inside the router to create a finished device — a Wi-Fi internet radio.
To make this, you will need:
Read more →
Total votes 4: ↑4 and ↓0 +4
Comments 1

LeetCode, Hard, last two problems: 2809. Min Time to Make Array Sum At Most x & 2813. Max Elegance of a K-Length Subseq

Level of difficulty Hard
Reading time 3 min
Views 360
Development of mobile applications *Algorithms *Swift *
Case

2809. Min Time to Make Array Sum: Efficient Swift solution, using dynamic programming, for minimizing time to reach a sum in arrays A and B. Time: O(n²), Space: O(n).

2813. Max Elegance of K-Length Subseq: Swift code for elegantly selecting unique k-length subsequences with profit and categories. Solution uses sorting and iteration. Time: O(nlogn), Space: O(n).

Github: https://github.com/sergeyleschev/leetcode-swift

Read more
Total votes 1: ↑1 and ↓0 +1
Comments 2

React Custom Hook: useDarkMode

Level of difficulty Medium
Reading time 4 min
Views 1.7K
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

One of the main advantages of "useDarkMode" is its simplicity. With just a few lines of code, you can enable dark mode in your React application. By invoking this hook, you'll receive the current dark mode state and a function to toggle it.

The "useDarkMode" hook dynamically updates the HTML body class to apply the "dark-mode" styling whenever dark mode is enabled. This approach ensures consistency across all components without the need for manual class manipulation.

Read more
Total votes 6: ↑4 and ↓2 +2
Comments 0

ABBYY: Mobile Technologies – Retrospectives

Reading time 3 min
Views 197
Development Management *Project management *Agile *

- Continuous Improvement is also a Project, a meta-Project, a maintenance that usually lasts longer than the main development project.

- If you can fit into the Sprint boundaries with your development cycle, then the concept of Retrospective as it is formulated in SCRUM may also suit you. But if you are bigger and not oriented on CI/CD, then be ready to make a hybrid of SCRUM with classical Project Management – thanks God SCRUM is good embeddable (proven by SAFe) !

- What is left out in when we run retrospectives quarterly? – Plan and Check. The placeholder of classical SCRUM Retrospective is quite suitable for that purpose, surrounded, of course, by some additional groomings, providing required action plans and decompositions up to sprint-length steps.

Read more
Total votes 1: ↑1 and ↓0 +1
Comments 1

React Custom Hook: useCopyToClipboard

Level of difficulty Medium
Reading time 2 min
Views 878
Website development *JavaScript *ReactJS *TypeScript *Visual programming *
Digest

Copying text to the clipboard in a React application can be a tedious task. To simplify this process, I've created a powerful custom hook called useCopyToClipboard. With just a few lines of code, this hook streamlines the copy-to-clipboard functionality, providing developers with a hassle-free solution.

Read more
Rating 0
Comments 0

ABBYY: Mobile Technologies – SCRUM Planning in Detail

Reading time 6 min
Views 267
Development Management *Agile *

I am a Project Manager. 14 years of project management, 5 years in agile framework, last 4 years in product companies, last 3 years in ABBYY, mobile technologies. I would like to share my practical experience, how we have organized the planning in ABYY Mobile Technologies having SCRUM development.

“SCRUM — you get too little, and you need to add the missing.” The story about how we adjusted the Planning procedure for yearly roadmapping and budgeting, how we have organized the SCRUM‑planning for the feature‑driven development with product development cycle 2–3 months and more.

Read more
Total votes 1: ↑1 and ↓0 +1
Comments 2