Гостувах на Свръхчовекът

Вчера се видяхме с Жоро, който ми помогна супер много за подготовката ми за Дунав Ултра и записахме един епизод за Свръхчовекът с Георги Ненов.

Колкото и пъти да се видя с него все се удивлявам на мега енергията, която кипи от него.

Поговорихме си надълго и на широко за Дунав Ултра, за спорта, за мотивацията и за трудностите, за добротата и за Dimmu Borgir.

Очаквайте подкаста на 23.10.2018 г.

03.04.2018

Поръчах си Polar V650 и нямам търпение да го тествам! Ще пиша моите наблюдения по-натам.

In other news:

 

Преди няколко години попаднах на фотограф, който заснима и разказва историята на жена си, която страда от рак на гърдата. Ся такива разкази ще кажете, че са лигня, че натоварват излишно, но вижте света света на Angelo Merendino и разказа му за една любов, която не умира. Самия той говори на TedX и разказите му са пълни с любов. Та да не забравяме за хората около нас и че не всичко е вечно, както си мислихме като деца.

 

И последно за днес, цитат на деня от Дийкстра – “Selecting a tool first and then trying to fit it into an existing software development and testing process is a bit like buying a horse and then realizing you live in an apartment on the twentieth story of a Manhattan skyscraper: probably not such a good idea.”

Малки SQL трикове за WordPress

Когато не му се спи на човек ума му решава да прави неща, които в нормални условия не биха се случили (не и в този вид).
Ето и списък с няколко интересни SQL заявки, които можете да използвате докато работите с WordPress.

Как да покажем общия брой публикувани постове за определена година

В този блог за 2017 година съм публикувал 155 поста. Чудя се това малко ли са или много, но колкото-толкова.
Интересно е друго – начина по който видях това. Оказа се съвсем лесно с SQL заявка, която изглежда по този начин:

select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'publish'

Имайте предвид, че тази заявка показва само публикуваните постовете (не page или някакъв custom post type) за 2017 г.

Примерен резултат:

mysql> select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'publish';
 +----------+
 | count(*) |
 +----------+
 | 155      |
 +----------+
 1 row in set (0.00 sec)

Ако искате да видите колко draft-а имате можете да изпълните тази заявка:

select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'draft'

Примерен резултат:

mysql> select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'draft';
 +----------+
 | count(*) |
 +----------+
 | 116      |
 +----------+
 1 row in set (0.00 sec)

 

И не – няма грешка. Имам цели 116 поста, които така и не съм публикувал, повечето от които са започнати и недовършени истории, няколко tutorial-а (още ме е яд, че не завърших този за HTTP/2) и няколко пътеписа.

Как да сменим siteurl и homeurl с един ред

Ако не сте чували за siteurl и homeurl няма страшно. Но ако се наложи да мигрирате сайта, да смените домейна или да добавите/премахнете HTTPS поддържка ще се наложи да поработите с тях.

UPDATE wp_options SET option_value = replace(option_value, 'http://www.nedko.info', 'https://www.nedko.info') WHERE option_name = 'home' OR option_name = 'siteurl'

След изпълнението на тази заявка при опит да достъпя сайта ще бъда пренасочван автоматично от non-HTTPS към HTTPS версията на блога. Можете да я използвате и при смян на домейн да кажем като смените втория линк на този, който желаете. Не е най-добрия пример, но е важно да схванете как работят siteurl и homeurl. Друга полза е ако ъпдейтвате сайта и имате да мигрирате да кажем https://nedko.info/v2 към https://nedko.info.

Работа с пароли

Не сме безгрешни – забравяме си понякога паролите или при нужда да дебъгнем проблема в някой клиентски сайт понякога се налага да влезем с подходящите инструменти.

UPDATE wp_users SET user_pass = MD5( '123456' ) WHERE user_login = 'admin'

Тази заявка ще смени паролата на потребителя admin с 123456.

 

Ако ви се наложи да работите върху клиентска инсталация, но не искате да сменяте паролата на потребителя можете първо да запишете хеша ѝ със следната заявка:

select user_login,user_pass from wp_users

Примерен резутат:

mysql> select user_login,user_pass from wp_users;
+------------+---------------------------------------------------+
| user_login | user_pass                                         |                           |
+------------+---------------------------------------------------+
| admin      | $P$B5&50UGz0.kW3tq6jifraX.hT!РqZP.                |
+------------+---------------------------------------------------+
1 row in set (0.00 sec)

Сега запишете стойността на user_pass полето, изпълнете горната заявка, която ще смени паролата на 123456 и като сте готови просто изпълнете следната заявка за да върнете старата парола:

UPDATE wp_users SET user_pass = '$P$B5&50UGz0.kW3tq6jifraX.hT!РqZP.' WHERE user_login = 'admin'

 

Изтриване на всички спам коментари

Преди време ми се наложи да изтрия от един блог над 10 000 коментара. Tricky-то беше, че имаше и коментари от хора, не само спам. Решението е тривиално и се нарича Akismet. Безплатната версия върши страхотна работа, но имах проблем с привилегиите на DB потребителя и коментарите маркирани като спам не се триеха. За това използвах тази заявка за да ги изчистя (~10 000 коментара от които 90%-95% спам се изтриха за под 2 секунди):

DELETE FROM wp_comments WHERE comment_approved = 'spam'

Ако искате да изтриете и тези със статус awaiting moderation можете да ипозлвате следната заявка:

DELETE FROM wp_comments WHERE comment_approved = '0'

Как да видим всички неизползвани тагове

Ако искате да видите дали имате тагове, които никога не са използвани можете да изпълните тази заявка:

SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0

Примерен резултат:

mysql> SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0
 -> ;
+--------+-------+
| name | count |
+--------+-------+
| blabla | 0 |
+--------+-------+
1 row in set (0.00 sec)

Ако обаче искат да видите (спорд мен далеч по-практично) тагове, които са използвани 5 или по-малко пъти, сортирани по възходящ ред можете да изпълните следната заявка:

SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count<5 order by wtt.count DESC

Примерен резултат:

mysql> SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count<5 order by wtt.count
+--------------------------------------------------------+-------+
| name | count |
+--------------------------------------------------------+-------+
| blabla | 0 |
| humor | 1 |
| кино | 1 |
| котка | 1 |
| vulnerability | 1 |
+--------------------------------------------------------+-------+
5 rows in set (0.00 sec)

Извличане на всички мейли от коментарите на потребителите

Маркетинг хората имат нужда да пращат таргетирани съобщения до разни хора и един страхотен начин да изкарате списък с всички мейли от коментиралите по блога хора е следния:

select comment_author_email,comment_author_url,comment_date from wp_comments order by comment_date DESC

Тази заявка ще покаже мейла, сайта (ако има такъв попълнен) и датата на коментара. Това можете да го ползвате като ориентация.

Примерен резултат ще върне следните данни:

[email protected] | http://www.somedomain.com | 2017-11-01 17:18:19 |

Иначе можете да лимитирате само до списък с мейлите така:

select comment_author_email from wp_comments

 

P.S. For non-Bulgarian speakers:

  • What are you doing here?
  • If you think that the article will be useful I can translate it in English.

Free backup script

Баси тъпото заглавие.

Anyway – днес fork-нах един проект, който използвам от извесно време с разни адаптации за marvin и реших да го публикувам.
github проекта за сега носи работното име Full Web Server Backup, а основния проект можете да намерите тук.

Основните разлики между проектите са:

  • Основния проект има Amazon S3 sync, аз го махнах, защото използвам услугите на pCloud;
  • В моя има архивиране на /etc, почистени са малко неразбории.

За в бъдеще смятам да добавя:

  • Избор на compression level;
  • Изнасяне на mySQL user/pass в ~/.my.cnf
  • Избор на специфични директории в /etc, които да архивираме или exclude-нем;
  • cronjob;
  • Архивиране на /home директорията на определен потребител (ако имаме права за това).

Ако имате друга идея с радост ще я прегледам. marvin си пази бекъпите с този скрипт и за момента работи безпроблемно.

24.08.2017

Днес деня започна рано сутринта – около 6:30. Направихме традиционното сутрешно кафе с Теди и Ели и после към работа. Днес ще е шантав ден.

Вчера си взех колелото – вече с нови гуми, багажник (изглежда нелепо с него) и остана да намеря от някъде и едни дисаги.

In other news:

  • Linux: 25 Iptables Netfilter Firewall Examples For New SysAdmins;
  • Uptime Robot – полезен тул за следенето на uptime-ма на даден сайт. Може да следи и по ping, port и разбира се http(s). Ограничението е цели 50 job-а, като честотата на проверка е през 5 минути;
  • Apache Guacamole – Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.

Хиляди Microsoft книги – безплатно

Макар и рядко се случва да пиша за Microsoft днес ми попадна линк от една много тенденциозна статия написана от от Eric Ligman в който обещава, че ще сподели хиляди книги на Microsoft тематика for free.
Линка можете да намерите тук, а книгите, макар и малко изненадващо за мен могат съвсем свободно да се свалят. Тествах с няколко и няма ядове.

Файл с всичките линкове можете да намерите тук, а ако искате да изтеглите всички наведнъж можете да използвате wget (got the irony?) след като изтеглите файла с линковете:
wget -i ligman-books-links.txt

 

Enjoy.

Как да намерим незатворен HTML таг с прост скрипт

Проекта

Вчера ми се наложи да намеря незатворен HTML таг в една страница и се оказа приключение. Първо започнах да търся някакъв начин да го направя през Sublime, но бързо преустанових и реших да потърся някакво WEB решение.

И се оказа, че има. Автора е Jon Aquino, а скрипта му е прост и върши само това, което очаквах от него.

Как се използва?

Използването на скрипта е елементарно – копираме вече генерирания HTML от браузъра (за Chrome – ctrl+u) и после просто paste-ваме тук.
Разбира се можем да сложим и HTML от наши сайтове ако имаме достъп.

 

Притеснението ми е, че проекта е стар (2013 г.) и не съм сигурен, че има добра поддръжка на HTML5/CSS3, но за основни неща ще свърши добра работа.

Безплатно: Raspberry PI за Python програмисти

By PacktPub
By PacktPub

Raspberry Pi Cookbook for Python Programmers

Открийте какво можете да направите с един Python качен върху Raspberry PI с офертата на Packt Publishing, която пуснаха безплатно само за днес (редовната ѝ цена е малко над $25).

Книгата се състои от 10 глави , които включват:

  1. Как да започнем с Raspberry PI:
    1. Инсталиране на Raspberry PI NOOBS;
    2. Настройка на Ethernet и wireless мрежа;
    3. Използване на прокси, връзка към VNC/SSH (през X11 forwarding);
    4. Конфигуриране на споделена директория използвайки Samba;
    5. Update към latest на Raspberry PI и Noobs/Debian;
  2. The real deal – Инсталация и първи стъпки с Python, стрингове, файлове и менюта:
    1. Въведение;
    2. Работа с текст и стрингове;
    3. Работа с файлове и error handling;
    4. Създаване на boot-up меню;
    5. Създаване на самодефинируемо (баси думата. На английски е self-defining) меню.
  3. Използване на Python за автоматизация и по-висока продуктивност;
  4. Създаване на игри и графика използвайки IDLE3 за debugging, Tkinter Canvas за чертаене с мишката и създаване на 1-2 игрички (това е интересно да се види на живо);
  5. Създаване на 3D графика – създаване и импорт на 3D модели, създаване на 3D и билдване на карти и лабиринти;
  6. Използване на Python за комуникация с хардуер. Тук ще се покажат няколко ултра интересни неща в които е силната страна на Pi-то – контролиране на LED светлина, обработване на данни през бутон (тоест какво да прави при натиснат/изключен бутон), създаване на shutdown бутон, използване на GPIO и други;
  7. Работа със сензори. Работа с i2c бъс, четене на аналогови данни и използването на analog-to-digital конвертор, логване на данни, разширяване на функционалността на Raspberry PI с GPIO с I/O expander, събиране и изпращане на данни към online services.
  8. Създаване на проекти с Raspberry Pi camera module;
  9. Да си направим робот – използвания хардуер е Rover-Pi с линеарно задвижващи се мотори, advanced motor control, създаване на шестокрак Pi-Bug робот (да стряскате с него любимата), избягване на обекти и ориентация;
  10. Интерфейси – автоматизиране на дома с remote sockets, използване на SPI за контрол на LED матрици, комуникация през серийния интерфейс, контролиране на Raspberry PI през bluetooth и USB devices.

Тегленето на книгата е напълно безплатно като се изисква елементарна регистрация (не искат данни за кредитна карта).

Вариантите в които пристига книгата са:

  • Онлайн през техния Piktlib. Там четенето е приятно, всичко е структурирано добре със съдържание на книгата в дясно и опция за търсене из страниците. Проблем е, че ресурса понякога е малко бавен. Няма опция за bookmarks на определени текстове или страница и ако не помня до къде съм стигнал рискувам да загубя немалко време докато се ориентирам кое съм чел и кое не;
  • PDF;
  • ePub;
  • Mobi;
  • Kindle с два ebook формата – PDF или Kindle format. След избор на формат въвеждаме Kindle адреса си и ще получим книгата синхронизирана на Kindle–а без да я прехвърляме от устройство на устройство;
  • Code files – Всичкия код, който е използван в книгата като примери може да бъде изтеглен също от тази секция.
  • С доплащане можете да получите и хартиения вариант на книгата.

Та така де. Книгата изглежда интересна.

 

Линк за теглене можете да намерите тук.

 

Приятно четене.