Page 26 of 49

19.01.2018

Снощи свърших “Хари Потър и Нечистокръвния Принц“. Никога не съм чел по-бързо 550+ страници. Четох сутрин преди работа, в обедната почивка, вечерта и когато имах възможност.
Сега хем искам да изям последната книга, хем не искам да свършва.

 

P.S. 2018 сме, стига съм писал 2017 по постовете! :D

18.01.2018 – дъждосняг

Днес ходих пеш до офиса. Навън времето беше особено – валеше (и продължава да вали) сняг и дъжд едновременно.

И понеже имам време да размишлявам необезпокояван 30 минути се сетих за две мои карания в подобни условия – едното беше сухо и крайно студено със спускане от над 20 минути при температура навън от 2-3 градуса като карахме с Пешо за Трети Март и изкачвахме Шипка (от Велико Търново). Помня как бях примрежил погледа, ръцете и колената ми бяха измръзнали, оглеждахме се трескаво за заледени участъци и когато слънцето започна да ни стрелка със срамежливи лъчи усетихме блаженството да караш на десетина градуса.

Втория ми спомен беше от преди две години когато май за първия сняг отдох да карам към Белослав. Два часа и малко на -6 градуса ми дойдоха толкова отрезвително, пречистващо и спокойно, че ако можех щях да направя още една обиколка. На ферибота стоях навън и гледах как тихо и леко падат огромни снежинки, а движение почти нямаше.

Ех.

16.01.2018 – Сутрешното море

Проклетата котка ме събуди прекалено рано и реших да изляза да почета на спокойствие преди работния ден. Нещо, което не бях правил от месеци.

Слязох с разведеляващото се слънце към плажа и погледах намръщеното тъмносиньо море, малките вълни, които се разбиваха с известна неприязън в камъните на брега и дърпаха малкото останал пясък към себе си.
Бях сам, прехвърчаха малко снежинки, излязох и подишах въздуха. Миришеше на водорасли, водата беше кристално чиста все едно никога никой не я е цапал с каквото му попадне, виждаха се камъчетата в плиткото, а студа притискаше гърдите ми.
Няколко облачета издишан въздух и зачетох.

В дни като тези трудно може някой да ти наруши вътрешния покой.

 

13.01.2017 – първи сняг, най-накрая!

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

После последва заксънял празник за Иванов ден, 5 двулитрови бири, а в неделя – мощно хапване и се видяхме с децата на сестрата на Злати и цялото ѝ семейство. Беше идилия докато не опитах да запаля колата и да заключа, че стартера е придал богу-дух. И това на -6. Бутнахме колата, запали по трудния начин, след малко работа я спрях и пуснах и всичко беше наред. Да видим. Не съм дебъгвал кола до сега.

И говорейки за това и за микроконтролеите по които хвърлям око последно време – смятам да взема един ELM327 и да видя какви статистически данни мога да видя и да дебъгвам ако имам нужда. Иначе се чудя и дали има смисъл да пазя данните при шифиране.
Теоритично мога да събирам данните от ELM327 на RaspberryPi и като вляза в колата автоматично да се закача за моя Wi-Fi hotspot и да хвърля данните към InfluxDB. Ако измисля дали мога да имам някаква полза от това ще му обърна по-сериозно внимание.

Доналд Туск изнесе речта си в театър “Иван Вазов”

Аз съм политически неутрален. Гледам да съм възможно най-далеч от нещата, защото усещам крайното безсилие и това, че човек не може да промени много. Грешката ми е огромна, осъзната, но отлагам възможно най-много момента в който трябва да се сблъскам отново в тези лайна.

 

И така, вчера председателя на Европейския Съвет, поляка Доналд Туск беше за официалното откриване на българското председателство на ЕС. Беше се приготвил добре. Даже повече от добре.

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

Оставям преценката за по-умните от мен. Моята е, че се справи отлично.

 

Целия текст на речта можете да видите тук:

Скъпи приятели,
Уважаеми гости,
Господин Президент на Република България,
Госпожо Председател на Народното събрание,
Господин Министър-председател,
Министри,
Ваши Превъзходителства,

"Отечество любезно, как хубаво си ти!
Как чудно се синее небето ти безкрайно!
Как твоите картини меняват се омайно!
При всеки поглед нови, по-нови красоти."


Тези думи на Иван Вазов, чието име носи този театър, улавят духа на днешното празненство. "При всеки поглед нови, по-нови красоти" – тази мисъл ме съпътства днес като Председател на Европейския съвет и като поляк. Защото като поляк аз добре разбирам колко много работа, кураж и решимост ви е струвало на вас, българите, да постигнете тези европейски успехи за вашето Отечество. Никой не ви е дал нищо даром. Вие самите, на първо място, сте творците на този исторически обрат, на тези "нови, по-нови красоти".

По-младите поколения навярно свързват театъра, в който се намираме сега, по-скоро с известния актьор Захари Бахаров и ролята му в култовия сериал "Игра на тронове", отколкото с поезията на Вазов. Историята на Балканите е по-драматична и по-интересна от сценария на "Игра на тронове", макар в нея да няма дракони. Всички ние бихме искали настоящето и бъдещето на Балканите да наподобяват по-малко сценарии на драматични филми. Стабилност, сигурност, благоденствие – това заслужават хората в целия този регион. А Европейският съюз съществува, за да превърне именно този сценарий в реалност.

Добре е, че един от приоритетите на Българското председателство е бъдещето на Западните Балкани. Кой друг, ако не вие, потомците на Спартак, наследниците на най-старата държава в Европа, вие, които никога не сте загубили бойно знаме в битка, кой друг би бил на висотата на тази важна и изключително трудна задача – да се поднови Европейската перспектива за целия регион.

Вие винаги сте били решителни и смели, което потвърдихте и през последните години. Ето защо аз вярвам, че вашето Председателство ще бъде толкова резултатно, колкото преди четвърт век беше Христо Стоичков в Световната купа. С Министър-председател, който би могъл да сплаши не един тракийски воин, ще се справите!

Благодаря.

И още едно видео в същия дух:

 

Датчик за фини прахови частици – как, защо и няколко идеи

Снощи най-накрая свързах датчика за твърди частици с този за температура и развойната платка и всичко тръгна от раз.

Хардуерът

Развойна платка: ESP8266
Датчик за твърди частици: SDS011
Температурен датчик (+атмосферно налягане и влажност): BME280

 

Сега идеята е да измисля начин да събера всичко в приложим вид, който да изнеса извън терасата. Мисля да опаковам (голяма част от) сензора за температура/влага и захранващия кабел с термошлаух. Сензора за твърди частици е измислен добре, защото  в отвора от който всмуква пробите може да се сложи тръбичка, която да изнеса навън. И да – трябва да си окомплектовам кабелите, да махна бредборда, който използвах само да закача термо датчика, че не ми стигнаха кабелите.

Софтуерът

От софтуерна гледна точка нещата са елементарни. В сайта на Air Bulgaria са публикували готов firmware, който прави впечатляващи неща с контролера. Някои от тях:

  • WEB сървър, който сервира данните от датчиците в малка страничка достъпна от всеки потребител логнат в същата мрежа в която е устройството;
  • Вдига сам Wi-Fi spot към което потребителя може да се закачи за първоначална настройка. След това esp8266-то се закача за вашата мрежа и става клент както всяко друго Wi-Fi усторйство закачено към домашния ви рутер;
  • DHCP сървър за първоначална инициализация;
  • Може да изпраща данни към един или повече API endpoints;
  • Изпраща автоматично данните към http://luftdaten.info, а оттам https://airbg.info ги взимат и парсват до подходящ вид на тяхната карта;
  • Може да изпраща данните към InfluxDB;
  • Поддържа OTA updates (On-The-Air);
  • Поддържа доста сензори и дисплеи, които се настройват елементарно.

 

Моята идея

Към стандартната функционалност бих искам да добавя следните неща:

  • Физическо укрепление на системата (кутия, термошлаух, както писах по-горе и други малки неща);
  • Данните ще хвърлям и към InfluxDB, който (по идея на Стан) ще бъде в контейнер (хем да се науча да работя с тях, крайно време е!);
  • Grafana dashboard, защото всеки обича да му е красиво и функцоинално;
  • Независимо захранване. Понеже SDS011 не пести много ток, ще мисля вариант с измервания на една минута. Същото се отнася и за температурния датчик (и евентуална корекция за да синхронизирам двата). Енергонезависимостта му ще е осигурена с power bank (ако някой ден ми попадне соларно панелче, което да пълни power bank-а през деня ще стане епично).

 

Ето и как изгелжда работещия проект на с firmware-а на airbg.info:

 

Ако някой има интерес или въпроси може да пише под статията. Ако мога ще отговарям.

 

P.S. Най-важните неща за накрая. Нямаше да се хвана с този проект ако не бяха три основни фигури – Орлин, който на Zara Code Week миналата година ни показа, че електрониката изобщо не е толкова сложна колкото си мислим и че всеки в днешно време може да реализира IoT проект за отрицателно време, на Стан, че ми подари без причина ESP8266 и на Златина че ме изтърпя докато в нас беше катаклизъм от кабели, платки и документация.

09.01.2018

Има и такива дни. Днес ходих да ми вадят зъб, после се оказа, че колата нещо има пробем със стартера, една кокошка ми шибна колата с нейната врата докато бях на 5 метра от нея, после болката, после личния лекар ми отказа да ми издаде болничен (от Университета по Дентална Медицина казаха, че още не можели да издават ?!?) и накрая главоболието.

Но има и такива дни. Попадна ми безценно видео на Perl Jam от 1992 година с брилиантно качество. Гласа на Еди е потресаващо добър, а песните направо могат да накарат човек да заплаче от кеф.

 

Ако някой ден направя нещо, което има поне половината душа от това, което ще чуете в тези 5:27 минути по-долу аз ще бъда най-щастливия човек на света.

 

 

В крайна сметка живота може да не е чак толкова гаден. Даже може да се преглътне сравнително лесно с малко хубава музика.

06.01.2017

Тази година е интересна още от самото си начало. След като разбрахме за DRAMA, Meltdown и Spectre, GPS online service уязвимостта за която писах явно Hackman-a се е хванал и е направил една колекция от whitepapers за уязвимости, които не бяха стигнали до мен.

Btw разбрахте ли, че CEO-то на Intel е продал акции за 20 милиона долара преди няколко месеца? В едно изявление каза, че изобщо не знаел за съществуването на тези проблем :D

 

И последно, обещавам. От Интел споменаха, че ще има извесно забавяне след фиксовете за meltdown/spectre. Някои медии писаха за 5%-10%, други за 30%, после дойде това:

 

Или както се казва – деба.

Малки 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.

04.01.2017

Зъболекари, зъби, машинки, шитни, болнични. Днес деня не е толкова положителен, колкото се надявах да бъде. Но кот-такоа. Сашо от офиса ме открехна към As I Lay Dying, а аз се сетих, че имам и фаворит: