I've notices that in Zsh under Mate, the HOME/END/DELETE buttons are for some reasons not working as I expected them to work. I use vim keybindings, and am still accustomed to sometimes hit the end button to reach the end of the line. So far it has never been a problem, but zsh just reacts weirdly here. Before triggering a rage quit, I found a solution of how to deal with it. Put the following lines in your .zshrc and you're good
# ctrl-left and ctrl-right
# ctrl-bs and ctrl-del
# del, home and end
# Reverse search
I found this solution here and mirror it on my blog, in case the original solution gets lost or something.
I also link oh-my-zsh here, in case someone just hopped on zsh as well and wants to make it as fancy as possible 🙂
Since I'm a Kernel rookie, it took me some time to realize what was going on. A google search didn't revealed a solution, other than something similar on Unix Stackexchange, that was not directly applicable for my case.
The problem persisted and is reproducible in linux-4.17.1 and linux-4.16.15, using this config file. Building linux-4.14.49 was doing fine. For any options that were not defined by the config file I chose the default suggestion.
The problem arises, if CONFIG_CRYPTO_DEV_CCP_DD is compiled as module [=m], also if the SEV is not used. Enabling CONFIG_CRYPTO_DEV_CCP_DD to be compiled in the kernel [=y] is a workaround for the issue.
I had to Include the "Secure Processor device driver", that is found in Cryptographic API > Hardware crypto devices
Weirdly, the suggested solution from Unix Stackexchange was not solving the problem for me, neither was it causing problems. I could build the Kernel (4.17.1) with "Kernel-based Virtual Machine Support" set as module. But those are just my two cents, it might have been an issue some versions ago ...
Unluckily I cannot contribute to Unix Stackexchange yet (not enough reputation *sigh*), so I cannot improve the answer there.
Thanks to Richard!
Many thanks to Richard, who provided me with support, regarding nailing it down to a bug in the Kernel build system.
Having your own compiled Linux Kernel is a nice thing for various reasons. First, you are not stuck with the (depending on your distribution possibly outdated) Kernel versions your distribution and you highly customize your experience. Some people want to have a super-fast lightweight Kernel, I'm more on the other side of the spectrum. But that's a matter of flavor.
A side-effect is that you learn a lot more about Linux - inevitably issues will arise, from not working KVM (upcoming post) because of iptable issues to VeraCrypt that cannot operate with Kernel support.
Getting your custom Kernel ready for VeraCrypt
I've encountered the following error
device-mapper: reload ioctl on veracrypt1 failed: Invalid argument
I've started with that. ioctl based errors normally are a good indicator that something in your Kernel configuration is or missing or misconfigured.
In this case it was the missing support for crypto targets in the device mapper (I suppose).
Fortunately the Gentoo-Forums provide some very useful informations. Make sure you have configured the following options in your Kernel
Device Drivers --->
[*] Multiple devices driver support (RAID and LVM) --->
<*> Device mapper support
<*> Crypt target support
[*] Block Devices --->
<*> Loopback device support
File systems --->
<*> FUSE (Filesystem in Userspace) support
[*] Cryptographic API --->
<*> RIPEMD-160 digest algorithm
<*> SHA384 and SHA512 digest algorithms
<*> Whirlpool digest algorithms
<*> LRW support
<*> XTS support
<*> AES cipher algorithms
<*> Serpent cipher algorithm
<*> Twofish cipher algorithm
Re-build your Kernel, and everything should work fine 🙂
cp/boot/config-`uname-r`.config<i># Copy configuration of the current kernel to .config
make localmodconfig# Apply configuration details, that have not been applied</i>
In general it's save to hit the return key and just use the default values. But keep that in mind, if you run into problems you might have a more detailed look and the options
Now it's time to compile the kernel. Use -j4 to use 4 threads for building. I in general use up to 16, but that depends on your system. People report in general good results in taking a number between 1x and 2x the number of CPU cores you have. I have 8, so I choose 16, but that's up to you
make-j16# Fire it up!
Now watch the build process and grab a cup of coffee. That might take a while ....
If the build process completes, then run a simply a make modules_install and make install to install the new kernel
sudo make modules_install install
In Ubuntu this triggers a grub-update as well, so it should work the next time you boot into your system.
I really love the new Firefox. I have the impression it runs much smoother, especially with some bloated sites. I also guess it won't take too long until webdesigners are making their websites even more bloaty, so that in some months from now we will be at the same time again.
Let's see how many new JS frameworks it will trigger 😉
Jokes aside, with Firefox 57 now disabling all legacy add-ons I was wondering, if U2F is finally supported. Turns out, it is, but you have first to enable it manually.
It's hidden in the about:config preferences. Search for webauth and enable the following options:
I really love sqlite3 databases. They are small, scalable and just do the job. The only thing they need is a file, so they are also much easier to configure, maintain and backup than heavy database solutions like MariaDB, MySQL or PostgreSQL. For bigger class applications they do a very good job, for most of my personal projects I prefer sqlite3, because they are just slim and easy-to-use.
Due to my affinity to Python I wrote a small C++ Wrapper Class, that should make it easier to handle Sqlite3 database connections in C++. In just 200 lines C++ code. It's really easy, no Voodoo involved.
But have a look yourself at this 13 lines C++ code, that create a table, insert values and read them out.
db.execute("CREATE TABLE IF NOT EXISTS `test` (`id` INT PRIMARY KEY, `value` REAL);");
cursor.execute("INSERT OR REPLACE INTO `test` (`id`,`value`) VALUES (?, ?);");
cursor.execute("SELECT `id`,`value` FROM `test`");