Category: Блогинки

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, а аз се сетих, че имам и фаворит:

 

 

03.01.2018

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

 

In other news:

  • DRAMA-та се задълбочава. TheRegister описаха случая и няколко техни теста. И един туит описващ всичко:

  • Оказа се, че много online services of GPS location tracking са vulnerable. В общи линии трето лице може да проследи физически клиентите, които използват тези сървиси (описани са в статията). Оказа се също и че някои от провайдърите са идиоти, защото паролите им по подразбиране са 123456.

02.01.2018

Първи пост за 2018 година.

Посрещането мина добре, но ми разбута съня. Вчера като се прибрахме легнах към 17:00 и станах към 20:30. Четох до нямам идея колко часа и днес вървя като бот на Counter Strike.

Заби ми се една мисъл в главата, от А. Чехов
“Днес е забележителен ден – чай ли да ходя да пия или да взема да се обеся…”

In other news:

Равносметката 2017

Мина още една година. И по навик казвам нещата, които не съм направил първо, защото са по-важни.

  • Не водих лекции в Социалната Чайна. Преди няколко месеца излязоха открито и казаха, че парите им не стигат. Тогава се свързах с тях и говорихме да водя лекции в тяхната зала, а приходите (всеки плаща колкото реши) да отиват в Чайната. По същото време смених работата и реших да забавя нещата за да мога да се концентрирам върху нея;
  • Почти не снимах. За поредна година;
  • Почти не танцувах;
    • Нямам нито едно представление за годината.
  • Не говорих на TEDx. Темите ми щяха да бъдат свързани с депресията или Quality Assurance in real live;
  • Не говорих на WordCamp Varna 2017. Предложените ми теми бяха за security и performance testing. Не ги одобриха;
  • Почти не свирих;
  • Не карах колелото точно колкото исках. За това вече писах;
  • Не четох толкова, колкото исках;
  • Не писах толкова, колкото исках.

 

Нещата, които се случиха:

  • Започнах нова работа. За момента това е най-доброто място в което съм работил в съотношение колеги/проект/условия. Компанията е Немечек;
  • Направих моето Голямо Каране. До половината. Три дни интензивно каране и общо 264 км, спане в колата, катерене на връх Ботев, ядене на малини и ягоди на средата на нищото;
  • Случи се това. И близките ми за здрави и повечето дори са щастливи. Повече не мога да искам. Дори и котката Иво е жив и здрав (и дебел);
  • Изкарах 2 дуатлна (Злати се включи във втория и го изкара също), на единия дори и завърших в контролното време. Имам си и медал!
  • Пътувахме със Злати много. Обикаляхме из България, а тази година направихме и няколко пъти Варна-София-Варна със самолет;
  • Изкачихме връх Ботев за ден и спечелих от габровец 10-тина бири;
  • Говорих в WordPress meetup Varna за “Security of WordPress”. Получи се много добре;
  • Говорих и в “ИТ Форум” в Технически Университет Варна. Там организацията беше зле, след като си написах лекцията после 5 (!!) човека от предната фирма в която работих я редакритаха, рязаха, добавяха, осакатяваха докато не стана една страхотно скучна лекция типична за скучно-университетските и/или корпоративни среди. И имаше 10 човека (заедно с лекторите);
  • Говорих във “Вечер на таланта” за моето Голямо каране. Беше интересно, даже има и видео как фъфля;
  • Говорих в “EU Code Week Varna 2017” – беше най-класното и посещаемо събитие провело се в зала “Black Sea Hall” на хотел “Черно Море”;
  • Месец по-късно говорих в “Zara Code Week 2017” поканен от Венко Добрев. Беше най-сърцатото събитие, срещнах ценни хора, имаше крайно черен хумор вечерта преди моята лекция, заразих се от ентусиазма на Орлин. Абе беше страхотно преживяване;
  • Започнах да се заигравам с микроконтролери. За момента съм загърбил Raspberry Pi-то и си играя с ESP8266 (контролер с 80 Mhz процесор, micro USB захранване, вграден WiFi, I2C, etc.), DH11 (датчик за температура, влажност и атмосферно налягане), BSP280 (като DH11, но много по-точен и производство на Bosch) и голямата ми гордост – SDS011 (датчик за твърди частици). Като сглобя всичко това ще се включа в Air Bulgaria да следим в колко мръсен въздух живеем;
  • marvin е още жив. Покрай него научих супер много за системната администрация и как работи отдолу nginx. Нико, Владо – благодаря за помощта, която ми дадохте през времето когато го омазвах солидно;
  • Тръгнах да чета Хари Потър, до момента съм към края на петата част – “Хари Потър и Ордена на Фениска”. Четох и Бакман, Весела Тотева и Агата Кристи. Следващата година ще дочета Потъра и после – Глуховски. И повече от 9 книги за годината(срам, срам…);
  • Отидохме на Hills Of Rock, счупихме главите и си изкарахме потресаващо добре.

  • Не мога да повярвам колко дълга ми стана косата.

Нещата, които ще ми се случат:

  • Да направя каквото мога за Чайната;
  • Да правя хората по-добри. Винаги съм вярвал в споделянето на знания и ще продължавам да го правя докато мога;
  • Да чета приказки в дома за деца лишени от родителски грижи;
  • Да се случи моето Голямото каране 2 – този път 500+ км за седмица, вероятно пак сам;
  • Силна бреветна година – 200км, 300км (евентуално 200+300 във Варненски бреветен уикенд) и ако успея да вляза във форма – и един 600 км (400 е за ден, а 600 има време човек да поспи 2-3 часа за това казват и че е по-възможен);
  • Дунав Ултра – много се надявам да успея да участвам и да финиширам в контролното време;
  • Да изкарам първия си мартон.

 

Нещата, които заболяха: