Heisenbug: The true story of undefined behavior, Part 2

CommentNode’s position problem

In the previous part, we’ve discussed the problem that was presented in RedBaron. Today I want to show you my old work, my old little investigation about another strange bug(or feature?) in Baron.
Baron is a part of RedBaron library, literally, RedBaron relies on Baron Full Syntax Tree which it’s giving for next manipulations.
Baron had a problem with CommentNode’s position in the FST tree.
This bug broke RedBaron’s nodes recognition.

Below I’ll tell you a story about it and start from examples.
Let’s roll sleeves up and get down to business.

Continue reading “Heisenbug: The true story of undefined behavior, Part 2”

Heisenbug: The true story of undefined behavior, Part 2

Heisenbug: the true story of undefined behavior, part 1

One day I was developing a program to work with a python source code. A kind of analyzer for the static code analysis. I found a library Redbaron and wanted conduct some research to understand its capabilities.No so fast cowboy I wrote a lot of python code in Pycharm created by the JetBrains. After my tests via pytest I’ve got the first bug. I’ve got the same problem like in #119 (Really, Is it a problem of IDE by the JetBrains?).

After debugging, I found some solutions, patches, and hacks.

Next, I’m telling you, dear reader, a story about a difference between hacks, patches, and solutions.

And Yeah, It hasn’t been a problem of IDE. Continue reading “Heisenbug: the true story of undefined behavior, part 1”

Heisenbug: the true story of undefined behavior, part 1

Unexpected Journey – Migration by Aptik

Recently I faced with a problem: how to migrate my data from my laptop to another machine. Because my OS is an Ubuntu, I wanted to recreate the environment and copy the home directory with all configuration files. It sounds like a trivial task…

At first, I have been thinking about simple copying files and configurations. But I wouldn’t want to do a lot of work to install all packages that I have after that. Some kinds of administrator’s job are not for me. You know, it’s not for me. I don’t have so much patience.

I needed a quick solution, without a pain and stolen time. Ok, I started to search a tool that would simplify my boring routine with that. After few seconds I found Aptik.

Aptik is a tool to backup\restore and migrating system settings and data to the fresh installed OS or after re-installing\upgrading. Seems that is what I need. But a version of OS on my laptop is lower than on another machine. 15.10 vs 16.04. I didn’t know, this would be a problem or not. Fine, let’s go I said to myself.


sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install aptik

After that, I opened Aptik via superuser(it’s asking you about that). Oh, It could save all : ppas, themes, packages, installed software, application settings and etc. Mamma mia perfecto!


I selected a path to my backup directory on external hard drive and clicked backup for parts which I wanted. Ok, I installed Aptik onto another machine and plugged a hard drive with saved backups. For that moment all steps were correct . I didn’t see any errors.

And on a remote machine, I got a first interesting thing. All software sources were restored correctly but download packages were not. Ok, looks OS versions is not compatible backward. (Seriously?) When I had been restoring Themes Unity had broken. Oh, man. It wasn’t funny. I reinstalled Unity.

Application Settings and Installed Software were restored correctly. At the first look…

As I recognized later some software were not installed. I have been installed it manually. Some icons were broken. I don’t know why, but Aptik didn’t save my Icons correctly. When I copied one manually, an application was opened normally, yeah looks like I was right.

Two days of copying and restoring were unforgettable. Why we can’t create a system like a VCS(git)? Just commit changes into the control system and pulling on another.

Hey, boy, do you hear something about rsync? My dev folder with all sources and projects that I have I synchronized via rsync:

rsync -ravh --progress -e ssh /home/user/Dev remote:/home/user/Dev

I already had a connection between my laptop and remote desktop in another terminal when I had been synchronizing folder. But anyway it doesn’t matter. The key for the remote machine was in .ssh/known_hosts – that was significant.

Remember! Your system is under potential risk by rsync. Do not use it for production, please, be careful and do not compromise your security.

But, anyway, thank you Aptik, this tool saved me a lot of time.

A further journey I will be in manual mode to restore my environment on new machine

Silver bullet is a myth

Unexpected Journey – Migration by Aptik

Computer Viruses: Programmer’s View

 Sometimes ago I had finished the book about computer viruses and anti-viruses. This short article is just a summary of my recordings. Moreover, it is a translate from Russian to English(the book is in the Russian). I’ve got a lot of fun. Great work of the author, thanks a lot for it. ( Климентьев К.Е. “Компьютерные вирусы и антивирусы: взгляд программиста” – link to order).

I would like to talk about common technologies that use in some viruses, such as Win32.Zmist andWin32.MetaPHOR and etc. I am not a malware guy and don’t want to describe all stuff about internals, but just rewrite some concepts of those two from the book and other sources. Because viruses just use approaches of those two. Look:

  • RPME – Real Permutation Engine
  • UEP – Unknown Entry Point (same as EPO) : this method inserts first commands (entry point of a virus) inside of the middle of an original program.
  • ETG – Executable Trash Generator : this method generates trash commands to hide original commands of a virus inside of a program.
  • MistFall – mixing code of program and virus
  • disassembler – this creates disassembly code of a program.

Let’s explore some principles.

Continue reading “Computer Viruses: Programmer’s View”

Computer Viruses: Programmer’s View

Code-Fu: The way to be better or Mystery of Code Mastery

What is a code-fu? Is there a code-fu?

Код-фу – это довольно странная штука. Вроде бы разработка, хакерство, процесс творческий. Однако существуют каноны, которые приняты индустрией. И, так называемая, правильная вещь, порой отсутствующая в некоторых людях напрочь, не всегда совпадает с этими канонами.(Определение “правильной вещи” можно посмотреть в The Original Hacker’s Dictionary или прочитать в книге Hackers: Heroes of the Computer Revolution ).

Continue reading “Code-Fu: The way to be better or Mystery of Code Mastery”

Code-Fu: The way to be better or Mystery of Code Mastery

Economy of Brains или Мир, который сходит с ума

        Наше завтра это то, чего на самом деле не существует. Хотя бы потому, что с точки зрения физики определяется вероятностным переходом из состояние “сейчас” в состояние “завтра”. С точки зрения времени “сейчас” это и есть “завтра”, которое еще не наступило.

        Технологический прогресс цифровой эры, новый информационный век переходящих пост-индустриальных обществ, заставляет по-новому смотреть на этот удивительный мир, в котором перемешивается Хаксли и Оурэлл.

        Прогресс, как средство искусственно-естественного отбора, не остановить. Мы можем хотеть этого или нет, но будущее настанет – с нами или без нас. Ему, в смысле будущему, по-большому счету все равно.

Continue reading “Economy of Brains или Мир, который сходит с ума”

Economy of Brains или Мир, который сходит с ума