“Само той знаеше горе-долу как работи всичко това, което аз създадох в един от своите пиянски периоди” – завайка се Господ.
Той нерядко е ползвал знанията на Хоукинг, за да поддържа Вселената в сравнителен порядък и в някаква степен логична.
Пък се бях зарекал да не спирам да пиша тук…
Та – жив съм, продължавам тренировките за Dunav Ultra с пълна сила и вече усещам началото на старта в гр. Видин след три седмици.
In other news днес няма да има, но скоро общеавам да започна да пиша по-често. Имам и за разказване доста.
А, а! И с подготовката за първия podcast съм да кажем на половината така, че скоро очаквайте изненади.
Вчера тествах новия Polar V650. Ще споделя впечатленията си в няколко точки, ако на някой му е интересно да пита в коментарите:
Понеже така и не приключих статията – ако някой смята да си купува Полар и има въпроси нека пише тук.
Поръчах си 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.”
Този месец се учудвам колко малко съм писал.
Personal update – в офиса ми дадоха освен QA задачи по новия проект и да вдигна един VPS като staging server с nginx, mysql, проекта е писан на Laravel. Деплоя мина добре, проектите са up and running и като има задачки на сървърно ниво ги поемам аз, което ме кара да се чувствам много добре. И това основно заради marvin, който неведнъж съм искал да запаля. Our relationship is complicated, както казват :)
Иначе ето няколко неща, които се случиха последните седмици без явна подредба:
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.nedko.info --manual --preferred-challenges dns-01 certonly
pip install ngxtop
Можете разбира се да намерите и WEB модул, който прави това, но официалния е Luameter и струва 40 евро.
P.S. Ако се чудите каква връзка има комикса със статията – няма. Но ми е любим откакто го открих :D
P.P.S. Генерирането на Akismet api keys не работи така, че който иска да ми спами блога сега е момента.
Както вече разбрахте, днес IQ-то на света падна рязко. Всички се правим, че знаем колко голям е бил, но лично аз не мога да разкажа повече от 1% от това, което той е направил. И все пак е бил badass. Защо? Освен, че е гениален Хоукинг притежава още няколко неща, които прекалено малко хора имат. Едно от тях е, че през 60-те години, когато го диагностицират с ALS му казват, че ще живее още няколко години. Почина 50+ години по-късно вкопчил се в масивния клон на любопитството и нуждата да разгадае колкото се може повече загадки докато е жив. И успява. А теориите върху които е работил са:
Няма да ви копирам информацията от Wikipedia , защото е тъпо. Но не мога да не се сдържа да кажа, че това е един от най-известните съвременни учени, които ги е грижа и са толкова популярни извън специалистите в неговата област.
Книгите, които издаде (или участваше в издава) заслужават да бъдат изчетени и аз със сигурност ги мятам скоро:
И последно, обещавам, искам да цитирам големия Самуил Петканов:
IQ-то на човечеството падна наполовина
“ЗА ЩАСТИЕ САМО НА ПЛАНЕТАТА ЗЕМЯ – Видът homo sapiens sapiens се върна на библейските си нива на разум считано от рано тази сутрин.
Това се случи, след като цивилизацията загуби един от онези свои представители, който въпреки невъзможността да се преметне през лост впечатляваше всички с физическото си състояние половин век повече, отколкото бяха прогнозите.
Резкият спад в умственото ниво на вида, измислил неща като “София: Ден и нощ” и същевременно “Черни дупки, бебета вселени и други есета” надали ще доведе до особени катаклизми и Вселената ще продължи да си вселенува.”
Господ в паника: Само Хоукинг знаеше как работи цялото това Нещо
“Само той знаеше горе-долу как работи всичко това, което аз създадох в един от своите пиянски периоди” – завайка се Господ.
Той нерядко е ползвал знанията на Хоукинг, за да поддържа Вселената в сравнителен порядък и в някаква степен логична.
Единственият вариант с поправяне на Вселената сега е тя да бъде застрахована, но Бог смята, че застрахователите ще го изпържат и винаги ще казват, че щетите са по негова вина поради небрежност.
Снощи най-накрая свързах датчика за твърди частици с този за температура и развойната платка и всичко тръгна от раз.
Развойна платка: ESP8266
Датчик за твърди частици: SDS011
Температурен датчик (+атмосферно налягане и влажност): BME280
Сега идеята е да измисля начин да събера всичко в приложим вид, който да изнеса извън терасата. Мисля да опаковам (голяма част от) сензора за температура/влага и захранващия кабел с термошлаух. Сензора за твърди частици е измислен добре, защото в отвора от който всмуква пробите може да се сложи тръбичка, която да изнеса навън. И да – трябва да си окомплектовам кабелите, да махна бредборда, който използвах само да закача термо датчика, че не ми стигнаха кабелите.
От софтуерна гледна точка нещата са елементарни. В сайта на Air Bulgaria са публикували готов firmware, който прави впечатляващи неща с контролера. Някои от тях:
Към стандартната функционалност бих искам да добавя следните неща:
Ето и как изгелжда работещия проект на с firmware-а на airbg.info:
Ако някой има интерес или въпроси може да пише под статията. Ако мога ще отговарям.
P.S. Най-важните неща за накрая. Нямаше да се хвана с този проект ако не бяха три основни фигури – Орлин, който на Zara Code Week миналата година ни показа, че електрониката изобщо не е толкова сложна колкото си мислим и че всеки в днешно време може да реализира IoT проект за отрицателно време, на Стан, че ми подари без причина ESP8266 и на Златина че ме изтърпя докато в нас беше катаклизъм от кабели, платки и документация.
Когато не му се спи на човек ума му решава да прави неща, които в нормални условия не биха се случили (не и в този вид).
Ето и списък с няколко интересни 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 няма страшно. Но ако се наложи да мигрирате сайта, да смените домейна или да добавите/премахнете 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:
Доста интересна и надъхваща реч относно бързото развитие на Expirian, която се занимава и с data analysis, няколко огромни цифри и ме накара пак да се замисля за сигурността ни онлайн. Това беше един страхотен пример как се води презентация пред хора – много добър начин на изразяване, слайда с данните беше представен по правилния начин (а не да се изчете всичко дословно), посланието от презентацията стигна до (повечето от) нас.
Людмила говори за качеството, за quality measurements, non-measurable quality и best practices, говори доста за компанията в която работи. Споменава за това, че използват SonarQube. Като цяло лекцията е много основна и не научих много нови неща от нея.
И формулата за успеха на PaySafe е: V x D x F > R (Vision x Discomfort x First steps x Resistance). Ако това ви свърши работа намерете Любмила и я черпете едно.
Лекцията приключи 20 минути по-рано и имах време да вляза към края на:
Мартин Харизанов ни говори за сигурността в IoT и разказва за векторите на атака (които по дефиниция са почти същите както и на други real-world системи) като brute force, DDoS, после за превенция – client/server/OS updates, FOTA (firmware-over-the-air), monitoring и т.н. Накрая пак ни напомни, че абсолютно сигурни системи няма (може би освен тези, които са offline?). След това поговори за Big Data в IoT. Каза, че CISCO са излезли с доклад, че до 2020 година ще има около 20 милиарда неща (игра на думи от internet of things). Forbes пък са предвидили, че IoT трафика ще достигне 600 ZB (600 трилиона гигабайта) през 2020.
Note – тук отварям една голяма скоба:
Мартин обръща внимание на данните и трафика, които IoT могат да генерират. Всички ние взимаме трафика за нещо не толкова важно, но истина е, че той трябва да се пести. Разказа ни също и за няколко неща, които могат да ни помогнат като например това, че не всички данни трябва да се запазват и измерват, може да използваме агрегация (статия за data aggregation от IEEE), “Cold” data (или данните, които не са ни наистина нужни или използваме прекалено рядко) и т.н. Даде пример как няма нужда да измерваме температурата в стаята ни през 30 секунди, например. Какво ще се случи за толкова време? Помогна ми да взема решение за home automation-а, защото се чудих дали 2 минути са ок за измерване, но може дори и на повече.
Александър говори основно за pariwaise testing, installation testing и спомена, че за автоматизация на инсталациите използват Anaconda.
Разказва за спецификите на тестване на инсталатора на RedHat – симулация на iSCSI (с и без authentication) например, за това как един тест кейс може да продължи по 30 минути.
Говори за оптимизиране на test matrix (нещо за което трябва да прочета повече). Освен това трябва да си припомня и повече за pairwaise. За големи test suites и направен правилно може да даде впечатляващи резултати.
В общи линии разказа, че използва 3 tiers – първия е набор от тестове, който намира около 30% от всички логнато бъгове, втория набор е от всички тестове, които ползва (още около 30% от намерените бъгове са от тях) и 30% са от exploratory testing. Останалите 10% са дефекти (4 critical) – 1 firmware dependent, 1 corner case в s390x (не може да се закачи правилно по NFS, hidden dependency и разлика в работата на IPv6 иIPv6) и третия в недостатъчно тестване (human error).
В извод pairwaise има доста силни страни така, че трябва да бъде използван от нас често и мъдро за да намалим броя на нашите test cases без да афектираме качеството.
Обедна почивка – време за networking, хапване, кафе и дойде време на:
Забавния Laurent Bugnion с интересния швейцарски акцент започна с историята за computing_а отзад-напред – със старите лентови карти, огромни комютри и т.н.
После мина на Blockchain:
Следваща точка беше cloud computing (напомни ми на онзи лаф, че не качваш на cloud, а на компютъра на друг човек). Спомена Azure, OneDrive, Amazon Cloud Services и накрая – “Абе и Apple май имат някаква такава услуга, но …” и се засмя :D
Спомена за serverless computing (помните ли Силиконовата долина и идеята им за разпределено изчисляване (decentralized computing)?). (последните няколко знака заприличаха на някакъв извратен regular expression :D ).
Направи и малко демо с Cortana (като първия път фейлна :D) за времето, да му напомни нещо и накрая интересното беше “Като се прибера ми напомни да направя еди си кое”. Имаше и tell me a joke и хумора беше трагичен :) Следващата част на лекцията беше за AI/ML (Artificial Intelligence, Machine Learning). Едно нещо не ми хареса – каза, че ще направи serverless demo, но после каза – “Upload-ваме това на сървъра”. Това е тъпо и ще прочета малко за тяхната идея за serverless и ще видим каква е тяхната дефиниция.Та – направи един пример в Azure cognitive services с blob upload event (тови е event при upload на снимка в нашия случай) успя да прочете нещо надписано на ръка. Успя от две свои снимки с Emotion API да разпознае емоцията на лицето си с доста добра точност. Дойде ред на Augmented reality (пример беше Pokeymon Go) и Virtual Reality (напълно виртуална реалност, рендирана от някакво изчислително устройство). Спомена с и известна надсмешка за Google Cardboard glasses (които по дефиниция са супер евтини, мисля $2 и после почти директно ги сравни с VR на Acer) и HoloLens и mixed reality (смесена AR и VR – практически можем да взаимодействаме с реалния свят смесен с виртуална реалност).Показа и забавно демо с един космонавт над публиката. HoloLens заби само веднъж, а стрийминга беше ужасно бавен. Сигурен съм, че ползва 2.4 GHz мрежа. И пак Apple reference като спря stream-а – “Can you turn off your phones?” :D Показа едно тъпо демо с едни кубове и после дойде някакво абрусдно добро демо за планиране на индустриални структури упралвяемо с глас и жестове (добави кран/махни кран/покажи информация за този кран). Презентацията и кода можете да видите тук.
До момента най-забавна/приятна/интерактивна лекция.
В почивката имах възможност да се запозная с Алекс Тодоров, който е супер активен в нашата сфера и поддържа един от най-интересните блогове за QA в България – http://atodorov.org/ а след това и се запознах (най-накрая!) с Виктор Славчев – още един страхотен лектор и блогър. Нещата му можете да видите тук – http://mrslavchev.com/
Двамата лектора изглеждат интересни и разказаха защо е ок да работят върху / разработват open-source проект.
До момента разказаха основно за МусалаСофт. След това заговориха за smart home и споменаха OpenHab и SmartHome.Продължават да говорят основно за Мусала.
Разказаха как са убедили борда на директорите, че имат нужда от opensource проект по който да работят и в момента по него са включени 10+ програмистра (full-time) и един Senior Dev (part-time mentoring).
Описали са доста документация, доста unit тестове и са метнали тежките задачи. После е последвал static code analysis, работа по интеграцията с различни устройства и разбира се са вложили вътрешните си, вече утвърдени процеси в разработката.
Малко разпиляна ми дойде лекцията така, че на TL DR – пичове са решили да се занимават с open source, харесали са си smart home идеята, убедили са мениджмънта, че ще е яко ако имат такъв проект и с времето са набавили 10+ човека, които работят за проекта постоянно. И нещо важно – казаха, че по-неопитните хора, които първо са минали през този opensource проект са се интегрирали много по-бързо и по-качествено във фирмената инфраструктура работейки по комерсиалните проекти.
Започва с това, че има куче и че е от Добрич. Оставам до края на лекцията! Учи за PhD и води университетски класове (не каза къде).
Започва със самото начало, защо SCRUM е важен, какво прави един scrum master и т.н. Разказа как в началото на agile stuff всичко е било self-organizing team и как е минало доста време докато се оформи нуждата на отделен човек, който да работи като scrum-master.
Scrum master as a teacher:
Scrum Master Evolution Model:
Явор разказа с голямо въодушевление и страст за това, което прави. Разказа как не се прави вече:
Yesterday’s IT projects:
И как се прави сега:
Today’s IT projects:
Обясни ни за това, че има два подхода към сигурността:
Спомена и за Chaos Monkey.
Защо автоматизирането на security тестовете е трудно:
What other people use:
Demo time:
Това беше края на ден първи. Имах удоволствието накрая да се запозная лично с the Microsoft dude и с Явор и побъбрихме мъничко. Беше много приятно да видя, че извън сцената хората са си същите – без много взимане на сериозно, много приятелско и тополо отношение.
Stay tuned за ден втори :)
Когато преместих вече античния nasam.be на marvin имах един основен проблем свързан с прехода между apache2 и nginx и това беше, че nginx не поддържа .htaccess (повече можете да прочетете тук и тук). Там (почти) всичко е организирано в sites-avialable/ профила на сайта, който хоствам и грозните линкове, които Joomla генерира (от типа на https://nasam.be/index.php?option=com_content&view=article&id=183:qa-test-types&catid=53:software-testing&Itemid=167) с един ред и един рестарт станаха по-прилични (https://nasam.be/kompyutarni/software-testing/qa-test-types.html)
Промяната е в /etc/nginx/sites-avialable/project_name:
location / { try_files $uri $uri/ /index.php?$args; }
Или добавяме в основната location / {} директива точно преди затварящата къдрава скоба следния ред:
try_files $uri $uri/ /index.php?$args;
Следва рестарт на nginx, сменяне на настройките в Joomla да се използва mod_rewrite и това е :)
Искам да отбележа, че това не е специфично Joomla! или WordPress решение, а универсално. Ако имате каквато и да е система, която използва rewrite на линковете това решение би трябвало да ви свърши работа.
Баси тъпото заглавие.
Anyway – днес fork-нах един проект, който използвам от извесно време с разни адаптации за marvin и реших да го публикувам.
github проекта за сега носи работното име Full Web Server Backup, а основния проект можете да намерите тук.
Ако имате друга идея с радост ще я прегледам. marvin си пази бекъпите с този скрипт и за момента работи безпроблемно.