Един хитър трик за подобряване на скоростта на firefox браузъра ви е като вакумирате sqlite базата му данни. VACUUM процеса преизгражда базата данни като по този начин я дефрагментира, намаля размера и прави търсенето в нея по бързо, използването на диска по ефективно евентуално намаля и натоварването върху диска ви тъй като чете в последователност от секторите ми. Като цяло това важи за всяка база данни която не извършва автоматично vacuum/defrag на себе си.

Самият процес по дефрагментиране на базата данни на Firefox е доста тривиален – изпълняваме sqlite3 db-file VACUUM в профилната директория на firefox. В linux пътя до нея обикновенно е ~/.mozilla/firefox/random-name.default. По принцип трябва да имате само 1 диркетория в .mozilla/firefox ако имате повече може да проверите ~/.mozilla/firefox/profiles.ini за коректната директория в е профила на вашият браузър. Тъй като не ми се занимава да извършвам процеса на ръка разписах елементарен скрипт с който да дефрагментирам базите данни:

for db in $(find ~/.mozilla/firefox/$(grep Path ~/.mozilla/firefox/profiles.ini | cut -d'=' -f2) -maxdepth 1 -name "*.sqlite" -type f)
do
   echo "VACUUM ${db}"
   sqlite3 ${db} VACUUM
   sqlite3 ${db} REINDEX
done

След изпълняване на скрипта търсенето в history-то и самото зареждане на лисика е чувствително по бързо. Скрипта предполагам че с малки модификации може да се ползва и в Mac OS.

p.s Ето варианта и за Mac OS X – тестван на Mac OS X Sierra. Налага се да форсираме делимитъра да е нов ред заради space в пътя до папката в която се съдържа профила на firefox

OIFS="$IFS"
IFS=$'\n'
for db in $(find ~/Library/Application\ Support/Firefox/$(grep Path ~/Library/Application\ Support/Firefox/profiles.ini | cut -d'=' -f2)  -maxdepth 1  -name "*.sqlite" -type f)
do
echo "VACUUM && REINDEX ${db}"
sqlite3 "${db}" VACUUM;
sqlite3 "${db}" REINDEX;
done

Преди няколко дни се навършиха 25 години Linux. Винаги когато чета писмото на Линус изпадам в едно такова силно забавно настроение. Нямам никакво намерение да обяснявам колко е важен Linux и каква роля играе в нашият живот. По скоро се замислих каква роля е изиграл в моят живот. След което изскочиха множество въпроси

  • Ако нямаше linux дали щях да бъда BSD или не дай си боже Windows админ ?
  • Дали щях да бъда администратор въобще
  • Какво щях да работя ако не бях администратор – програмист (опазил ме….)
  • Каква OS щях да използвам
  • Каква техника щях да използвам – телефон компютър – сигурно щях да съм поредният apple fan boy

Преживях малка драма с диска на лаптопа ми. След фиксването на проблема при apt-get update лъсваше следният крайно не приятен край на процеса

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/debian.ipacct.com_debian_dists_sid_contrib_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

Както обикновено проблема е крайно очевиден /var/lib/apt/lists/debian.ipacct.com_debian_dists_sid_contrib_binary-i386 не може да бъде прочетен коректно. Фикса е също толкова елементарен колкото и самата диагностика на проблема:

 rf -f /var/lib/apt/lists/*

В крайна сметка резултата е форсирана синхронизация на apt.

Наложи ми се да правя bootable USB под OS X. За моя огромна изненада открих че скороста на копиране с DD е отвратитлно ниска ~600KB/s 😕 . След кратко търсене открих, че трябва да използвам rdiskX вместо diskX. Идеята е че rdisk е синоним на raw device. До тук добре веднага добавих едно r на блоковото устройство към което копирх ISO-то след което установих че скоростта е още по ниска ~150-200KB/s 😡 . Вече мистиката е пълна а предишната информация се потвърди от много източници!!!! Всичко си дойде на мястото след като сложих bs директива.

bs=n Set both input and output block size to n bytes, superseding the ibs and obs operands. If no conversion values other than noerror, notrunc or sync are specified, then
each input block is copied to the output as a single block without any aggregation of short blocks.

След като сложих 1M за размер на bs постигнах скоростите които очаквах от USB-то ми. След което тествах и разликата между disk и rdisk определено разликата беше около 10-12 пъти в скоростта в полза на rdisk. Много културен начин за да наблюдавате скоростта и прогреса на dd може да се постигне със следният конвеир

sudo dd if=Downloads/path.to.iso bs=1M | pv | sudo dd of=/dev/rdisk2 bs=1M

Любимият ми текстови редактор е Geany. Той е много минималистично IDE което поддържа огромен набор от езици – shell, php, python, C … etc. Има си автоматично довършване и същевременно е адски пъргаво. Липсват му някоя и друга приятна възможност но и към момента за мен е повече от напълно достатъчен. Започнах да online курса Python Programming на SoftUni – да си освежа познанията и да ги надградя тъй като не съм следил адекватно какво се случва с python 3. Лекторите от курса препоръчват PyCharm като IDE за pyton програмиране, но на мен далеч не ми е по вкуса, естествено си използвам Geany за упражненията.

По време на лекциите болезнено усетих 2 липси

  1. python autocomplete-а издиша от към документация на функции и методи
  2. няма валидация за pep8 стандарта

Хубавото е че Geany е достатъчно гъвкав от към конфигурация и може лесно да бъде допълван от към липсващи такива. Нека да добавим python документация към нашето IDE:

  • дърпаме си следният скрипт някъде в нашият PATH например /usr/bin като не забравяме да го направим изпълним
  • редактираме файла ~/.config/geany/filedefs/filetypes.python като в частта settings добавяме следният ред context_action_cmd=pydocw %s. Ако съществува само добавяме името на бинарката от предишната стъпка. Рестартираме Geany ако е пуснат.
  • Вече имаме context-action който ще ви извади информация за функцията. Аз си добавих shortcut за  да ми е по удобно като не ми е ясно някоя функционалност. Лич мен този подход много ми допада защото много ме дразни netbeans подхода.

До тук добре. След това много ми се прииска да имам валидация на кода който пиша – дали го пиша според общо приетите стандарти или пиша някакви грозотии. В общи линии намерих отново туториалче как се случват нещата но то е малко остаряло – Geany си има всичко вградено в себе си само трябва да му се инсталира pep8 пакета. В Debian apt-get install pep8 върши работа в останалите дистрота сами трябва да откриете как се случва магията. В менюто Build вторият бутон (поне при мен) е Lint след кликването му ще откриете колко грозен код сте сътворили 😀

Screenshot from 2016-01-11 20-42-21

Това е общи линии как да накарате вашият Geany да работи по добре с Python и същевременно да продължи да бъде бърз без да кара процесора ви да иска да си тегли куршума.