Pull to refresh

Development

Show first
Period
Level of difficulty

How sqlalchemy uses greenlet to call an async Python function from a normal function

Reading time5 min
Views4K

The Python language has two kind of functions — normal functions that you would use in most cases, and async functions. The latter functions are used when performing network IO in an asynchronous manner. The problem with this division is that async functions can only be called from other async functions. Normal functions, on the other hand, can be called from any functions — however, if you call a normal function that does a blocking operation from an async function, it will block the whole event loop and all your coroutines. These limitations usually mean that when writing an using Python`s asyncio, you can`t use any of the IO libraries that you use when writing a synchronous application, and vice versa, unless a library supports usage both in sync and async applications.

Now, the question is, in case you are developing a large and complex library, that, say, allows users to interact with relational databases, abstracting away (some of) the differences between the SQL syntax and other aspects of these databases, and abstracting away the differences between the drivers for that database, how do you support both sync and async usage of your library without duplicating the code of your library? The way sqlalchemy is organized is that regardless of what database and driver for it you are using, you will be calling functions and methods related to Engine, Connection, etc classes, which will do some general work independent of database, then apply the logic specific to your database and finally, call the functions of your database driver to actually communicate with the database. If you are using Python`s asyncio, the database driver will expose async functions and methods, but the rest of the library that is driver‑independent would ideally remain the same. However, the issue is that that you can`t call the async functions of the driver from the normal functions of the core of the library.

Read more

Exploring FIFO principles using an HDL training tool

Level of difficultyMedium
Reading time1 min
Views766

Ссылка на русскую версию / link to Russian version

FIFO is a key concept in hardware design. Understanding of FIFO is necessary for understanding the valid/ready protocol, which in turn is necessary for organisation of flow-control within a design.

Unfortunately, there are very few books on this topic, and to be fair, microarchitectural concepts are quite difficult to master from books, since understanding of these concepts are coming with practice. In other words it is more about developing hardware intuition.

The idea of the HDL training tool is that it can help develop a hardware intuition, providing the opportunity to explore ready-made scenarios in a step-by-step interactive way. The tool also provides detailed visualization of a simulated scenario.

Since the tool is a front-end for the HDL simulator, the real, synthesized SystemVerilog is executed on the simulator itself, which can be viewed and even modified.

So, the video of exploring FIFO on the training tool is here:

Watch the video and continue reading

Redefining the VOD OTT Experience in 2023: A Glimpse into the Future of Digital Entertainment

Reading time3 min
Views630

In the rapidly evolving landscape of digital entertainment, the year 2023 has witnessed a profound transformation in Video On Demand (VOD) Over-The-Top (OTT) platforms. These platforms have redefined how audiences access and consume content, introducing cutting-edge technologies and innovative features that have revolutionized the entertainment industry.

Embracing Augmented Reality (AR) and Virtual Reality (VR)

In 2023, VOD OTT platforms have embraced AR and VR technologies to provide viewers with immersive and interactive experiences. Users can now step into virtual worlds, interact with characters, and actively participate in the content they are watching, transcending the boundaries of traditional passive viewing.

Imagine exploring an ancient civilization through the eyes of a protagonist, feeling the thrill of an adrenaline-pumping car chase, or even interacting with virtual avatars of celebrities and influencers. The integration of AR and VR into VOD OTT platforms has ushered in a new era of interactive and experiential entertainment.

Personalization: The Heart of the VOD Experience

Powered by advanced artificial intelligence (AI), VOD OTT platforms have taken personalization to new heights. By analyzing user behavior, preferences, and viewing habits, these platforms deliver tailor-made content recommendations, ensuring that viewers find exactly what they love without extensive searching.

This level of personalization ensures that users are presented with content that resonates with their tastes, creating a seamless and enjoyable content discovery experience. By removing the need for extensive searching, VOD OTT platforms have become the go-to destination for viewers seeking highly relevant and engaging content.

Read more

Review of mini-book «60 terrible tips for a C++ developer»

Level of difficultyEasy
Reading time6 min
Views1.4K

I wrote a small e-book about terrible tips for C++ developers. Actually, it describes bad programming practices and explains why it's better to avoid them. However, every chapter of this mini-book starts with a terrible tip — just for fun.


60 terrible tips for a C++ developer


By the way, these tips may seem artificial but believe me, they are based on the real experience. In other words, the described terrible tips occur in developers' lives — that's why it's worth discussing them. First of all, this book will be useful for junior developers. But more skilled C++ developers can also find interesting and useful tips.


Even though it's a mini-book, it clearly does not fit into the Habr format. Too many words. So, I decided to write here the review. Here is the link to find the full version of the mini-book: 60 terrible tips for a C++ developer.


If you still hesitate whether to read it or not, below you will find a list of terrible tips that will be discussed in the mini-book.


View the terrible tips:

Read more →

Validation WebHook troubleshooting, how low can you go?

Level of difficultyMedium
Reading time11 min
Views1.8K

I'm Alex Movergan, DevOps team lead at Altenar. I focus on automation in general and on improving troubleshooting skills within my team. In this article, I'll share a captivating tale that revolves around Kubernetes, validation webhooks, kubespray, and Calico.

Join me on this DevOps journey as we explore real-world scenarios unraveling the intricacies of troubleshooting in a Kubernetes environment.

Read more

Message broker selection cheat sheet: Kafka vs RabbitMQ vs Amazon SQS

Level of difficultyMedium
Reading time6 min
Views12K

This is a series of articles dedicated to the optimal choice between different systems on a real project or an architectural interview.

At work or at a System Design interview, you often have to choose the best message broker. I plunged into this issue and will tell you what and why. What is better in each case, what are the advantages and disadvantages of these systems, and which one to choose, I will show with several examples.

Read more

«Look what I have!» — how we made the feature of screen sharing in the mobile video conferencing app

Reading time4 min
Views1.4K

How we listened to the needs of our customers and implemented the feature with the maximum capabilities of the iOS and Android platforms. Then we looked into analytics, added onboarding, and usage grew. At the end of the article there are some cool conclusions and insights. Developing a video conferencing mobile app is fun!

Read more

Queries in PostgreSQL. Nested Loop

Reading time17 min
Views2.9K

So far we've discussed query execution stagesstatistics, and the two basic data access methods: Sequential scan and Index scan.

The next item on the list is join methods. This article will remind you what logical join types are out there, and then discuss one of three physical join methods, the Nested loop join. Additionally, we will check out the row memoization feature introduced in PostgreSQL 14.

Read more

Android for electronics design engineers

Reading time5 min
Views2.4K

There is a list of well-known electronics design tools for Android which can be found in every review for the last 10 years: “Electrodoc”, “Every Circuit”, “Droid Tesla”, “Electronics Toolbox”, “RF & Microwave Toolbox” and so on. Also, there is a lot of trash on the market that turns finding a good tool into a quest.

This short review is about an unknown but cool tool “Circuit Calculator” working on Android devices and intended for professional electronics designers.

Read more

How does Rust treat Strings and Vectors internally

Reading time4 min
Views3.4K

In Rust strings can be represented in two ways:

a)       String type

b)      String slice

String type:

String type is defined as a struct of the following structure:

Depending on arch (in my case x86 64bit it is 24byte)

{

   pointer to the address where string characters are stored (8b)

   capacity (8b)

   length (8b)

}

Read more

Even shell scripts require unit tests

Reading time4 min
Views4K

Once a upon a time I moved to brand new project. And without much thought, I decided to take DevOps responsibilities (after a long period of Frontend). Huge mono-repository (Angular and Node.js) gives rise to many specific problems. And this project was no exception. At the very beginning CI/CD duration was about 1.5h. And that was the biggest problem to take care of.

But at first, I want to talk about "Bourne again shell", cause CI/CD automation almost entirely was implemented by means of shell scripts (Bash). In context of huge mono-repo even regular build becomes a piece of odd stuff. That`s why a huge amount of scripts with complicated logic inside (build, test, deploy, generation of release notes, collection of logs and metrics, ...) was another significant problem.

Regardless of lang, quality of complex logic should be under control. It is no secret that key aspect of code quality control - is tests. For example, to refactor safely major logic should be covered with tests. We decided to keep shell scripts untouched and cover the major ones with tests before any refactoring. Of course, it is possible to use Jest (or Mocha) with a bunch of awful utils to test shell scripts. This approach is a bit wordy and has no value if scripts under test is written in Bash. Also I have no idea how to mock external shell commands (such as curl, ls, touch, npm, ...) with Jest or similar framework.

Read more

PVS-Studio checks the code of Flipper Zero dolphin

Reading time12 min
Views1.8K

Flipper Zero + PVS-Studio


Flipper Zero is an open-source multi-tool for geeks and penetration testers. It so happened that the Flipper Zero project and the PVS-Studio analyzer crossed paths. A philosophical question: should we check the project, if the project developers have already started fixing errors? Let's try to do this.

Read more →

Full motion video with digital audio on the classic 8-bit game console

Reading time13 min
Views1.5K

Back in 2016 an United States based music composer and performer Sergio Elisondo released an one-man band music album A Winner Is You (know your meme), with multi-instrumental cover versions of tunes from numerous memorable classic NES games. A special feature of this release has been its version released in the NES cartridge format that would run on a classic unmodified console and play digitized audio of the full album, instead of the typical chiptune sound you would expect to come from this humble console. I was involved with the software development part of this project.

This year Sergio makes a return with a brand new music release. This time it is all original music album You Are Error, heavily influenced with the video game music aesthetics. It also comes with a special extra. This time we have raised the stakes, and a new NES cartridge release includes not only the digitized audio, but full motion videos for each song, done in the silhouette cutout style similar to the famous Bad Apple video. Yet again, this project is crowdfunded via Kickstarter. It already got the asked amount in a mere 7 hours, but there is still a little time to jump on the bandwagon and get yourself a copy. In the meantime I would like to share an insight on the technical side of both projects.

Read more

SEPIC-Ćuk split-rail converter average model

Reading time4 min
Views1.8K

SEPIC-Ćuk split-rail converter can be used to make positive and negative supplies from a single input voltage for relatively well-matched loads like operational amplifiers.

Transient models are time consuming. Average models reduce modeling time drastically.

The PWM switch average models for current- and voltage-mode are described in details in Christophe Basso’s book “Switch-Mode Power Supplies, Second Edition: SPICE Simulations and Practical Designs”. Using of these models for SEPIC and Ćuk converters is also shown.

This text shows how to use the PWM switch average model to design a split-rail SEPIC-Ćuk converter.

Read more

Controlling Brushless Motors using Raspberry PI

Reading time5 min
Views3.7K

In this video tutorial, we will control a pair of brushless motors from a Raspberry PI computer. We will use one of the computer's USB ports to connect a network of brushless motor controllers. We will power the computer, the controllers, and the brushless motors using a single battery, similar to a autonomous vehicle design.

The first motor is an outrunner type, a kind of what you would use for a vehicle propulsion. The bigger motor comes with a quadrature encoder which means it can be used as a powerful servo.

I made a cable to power my set up. On one end, the cable has a socket for plugging the battery. The cable splits into a two parallel parts to power the controllers, and the Raspberry PI. The bottom part of the cable further splits to power a pair of brushless motor controllers.
By the way, the controllers need 7 to 60 Volts DC. I put proper connectors at the ends of the cable, so that I could just plug it into the controllers.

Servosila brushless motor controllers come in rectangular or circular form factors. The controllers have USB and CANbus ports for connecting to control computers such as Raspberry PI.

Video & Read More

RS485 — a standard for industrial networks. What are the main features of the transceiver microcircuit?

Reading time8 min
Views2.7K

When building a network for communication between a large number of devices, one may think: what interface to choose? Each interface has its own pros and cons that determine its application: CAN — Automotive, RS485 / RS232 — Industrial, Ethernet — Consumer Electronics / Server. What features of the transceiver microcircuit help to protect against many problems during installation and operation? How is the process of measuring and researching of transceiver microcircuits going on? New RS485 microcircuit is ready to get to market!
Read more →

Measuring Traffic Rate by Means of U-models

Reading time21 min
Views1.8K
stream rate art
Measuring of stream rate in an artist's impression.

In one of our previous publications, we talked about a way to measure event stream rate using a counter based on exponential decay. It turns out that the idea of such a counter has an interesting generalization. This paper by Artem Shvorin and Dmitry Kamaldinov, Qrator Labs, reveals it.
Read more →