Monday, February 20, 2017

Show raw SQL queries in PostgreSQL

If you want to inspest what queries exactly Django ORM sends to the PostgreSQL, you can do it with postgres logging. The first step is to enable logging. Add
log_statement = 'all' 
to the file:
sudo vim /etc/postgresql/9.4/main/postgresql.conf
Then you are able to see raw SQL queries with command:
sudo tail -f /var/log/postgresql/postgresql-9.4-main.log 

Monday, February 6, 2017

curl: Prettify json output

Intsall jq package:
sudo dnf install jq
Usage example:
curl -u key:x "" | jq

Monday, January 2, 2017

fedora 25: Replace xflux with redshift

xflux does not work with new fedora version any more (and likely will never do). Redshift is a good replacement in this case. It supports different methods to change color temperature of the screen and can use system location service to determine the location. Install redshift:
sudo dnf install redshift
There is a GUI for the application, but there is no need to install it as no configuration is needed. To make redshift start during the system load, you need to create a file /home/jsn/.config/autostart/redshift.desktop (where jsn is your username) with the following content:
[Desktop Entry]

Friday, October 28, 2016

How to set custom time and date on virtual machine

If your virtual machine is managed by VirtualBox, there are 2 services which synchronize date and time. The first step is to stop them from restoring the time:
sudo service systemd-timesyncd stop
sudo service vboxadd-service stop
After that you can set time with date command, for example:
sudo date +%T -s "00:12:00"
date -s "27 OCT 2016 00:12:00"
date +%Y%m%d -s "20161027"

systemd: Create a service

Example of the service configuration file `selenium_hub.service`:
Description=Selenium hub

ExecStart=/bin/bash -c 'java -jar /opt/selenium/selenium-server-standalone.jar -role hub'

Place this file to /etc/systemd/system/ (symlinking won't work) and refresh available services:
sudo systemctl daemon-reload
Now it is possible to start the service with command:
sudo service selenium_hub status
You can also make it start when a system starts by executing one of the following commands:
sudo chkconfig selenium_hub on
sudo systemctl enable selenium_hub.service

Wednesday, October 19, 2016

Overwrite response body with mitmproxy

It is possible to run python script with mitmproxy. For example:
mitmproxy -s ""
The modification process is very simple. Take a look at the code:
from mitmproxy.models import decoded

def response(context, flow):
    if "site.custom.min.js" in flow.request.path:
        with decoded(flow.response):  # automatically decode gzipped responses.
            flow.response.content = flow.response.content.replace(
The script will look for a request with path that contains site.custom.min.js and replace all occurences of with

mitmproxy and websocket connections

mitmproxy does not really supports websocket connections. However, there is a workaround: it is possible to just ignore them. For example all your websocket conections are encrypted and go to the special subdomain:
mitmproxy --ignore

Thursday, October 13, 2016

Slow performance and no sound with pulseaudio-equalizer

I installed pulseaudio-equalizer on my laptop, but after 3 days my laptop became slow and there wes no sound at all. It happened because of the pulseaudio-equalizer package. Even if you remove it, the problem won't go because it adds some configuration to the pulseaudio itself and doesn't remove it.
Open pulseaudio configuration file, find pulseaudio-equalizer section and remove it completely:
sudo nano ~/.pulse/
The section should look like this:
### Generated from: pulseaudio-equalizer
load-module module-ladspa-sink sink_name=ladspa_output.mbeq_1197.mbeq master=alsa_output.pci-0000_05_00.0.analog-stereo plugin=mbeq_1197 label=mbeq #control=-0.2,-0.2,-0.2,-0.2,3.5,3.5,3.5,3.5,3.5,3.5,3.5,2.5,2.5,0.0,0.0
set-default-sink ladspa_output.mbeq_1197.mbeq
set-sink-volume alsa_output.pci-0000_05_00.0.analog-stereo 65536
set-sink-mute alsa_output.pci-0000_05_00.0.analog-stereo 0
### END: Equalized audio configuration
Reboot your computer and enjoy restored performance and sound!

Monday, October 10, 2016

fedora: Install latest VirtualBox

The latest virtualbox can be installed from the Oracle repository. First of all we need to install oracle repository:
cd /etc/yum.repos.d/
sudo wget
Install dependencies:
sudo dnf install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-PAE-devel dkms
Install virtualbox. Note: pointing 5.1 is important as at the moment that is how it is called in the oracle's repository:
sudo dnf install VirtualBox-5.1
You might need to rebuild kernel modules with command:
sudo /usr/lib/virtualbox/ setup
And add current user to the xboxusers group:
sudo usermod -a -G vboxusers user_name
I had a problem reconfiguring kernel modules on my laptop. The error wasn't indicating anything specific. The problem was in the BIOS settings. Secure Boot should be disabled to allow module reconfiguration.

Monday, October 3, 2016

Speeding up Django tests: Disable migrations during tests

Running all migrations before the testrun can take a lot of time. For some reason, they are very slow. Running 50 migrations could easily take more than 1 minute! Fourtunately, disabling migrations is very easy. Just add the following code to the test's settings file:
# Disable migrations when running tests
    app[app.rfind('.') + 1:]: 'your_app.migrations_not_used_in_tests'
    for app in INSTALLED_APPS
Some of our migrations add data to the database and tests expect this data to be there. To fix that problem we will need to overwrite test runner. Add to the settings file:
TEST_RUNNER = 'your_app.test_runner.CustomDiscoverRunner'
Then create in the project root with the following content:
from django.test.runner import DiscoverRunner

from import create_groups

class CustomDiscoverRunner(DiscoverRunner):
    def setup_databases(self, **kwargs):
        result = super(CustomDiscoverRunner, self).setup_databases(**kwargs)
        return result
After recreating test database directly from the models (what is really fast), test runner will execute create_groups() function which populates database with all necessary data.

Wednesday, September 14, 2016

Analyze http2 with Wireshark

Most of the time http2 requests are sent over TLS, which means that Wireshark needs to decrypt information before we can analyze it. Fortunately, Chrome allows to dump cryptographic keys in the file. To do that, before you start Chrome, export environmental variable SSLKEYLOGFILE:
export SSLKEYLOGFILE=/home/jsn/Downloads/sslkeys/sslkeys.log
Firefox also allows to do it, but as for now (48) it is disabled by default. Get more information Now we need to configure Wireshark to use exported keys. Go to Edit - Preferences - Protocols - SSL and point (Pre)-Master-Secret log filename to the file with keys (/home/jsn/Downloads/sslkeys/sslkeys.log) Now you can filter records by http2 and analyze them.

Wednesday, August 24, 2016

tar: Archives cheatsheet

Create archive:
tar -czvf compressed_file.tar.gz original_file.sql
Extract files:
tar -xzvf compressed_file.tar.gz

Tuesday, August 2, 2016

Number of connections to the specific port

To check how many connections are exists to the port 3306:
watch -n 1 "sudo netstat -anp | grep 3306 | wc -l"

Monday, June 27, 2016

fedora: Increase watches limit

Open configuration file:
sudo vim /etc/sysctl.d/90-override.conf
Add the following line to the end of the file to increase watches limit:
fs.inotify.max_user_watches = 524288

Saturday, June 25, 2016

postgresql: How to fix ERROR: new encoding (UTF8) is incompatible

Sometimes I'm unable to create a database in UTF8 encoding because the template database is in the ASCII encoding. To fix it we need to recreate template database in UTF8. Start psql console:
psql -U postgres
Run the following commands:
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
DROP DATABASE template1;
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
\c template1