19.05.2022 – git и търсене по commit

Днес ми се наложи да търся дали някой commit е влязал в tag-ната версия в git и понеже е лесен onliner споделям с вас.

Отбелязка, че много зависи какъв ви е git workflow-а. Проектът, който си избрах на рандом е този – gRPCurl.

Та имаме commit ID да речем 8ee6c9. Единия начин е да отидем в Releases на проекта и да търсим на ръка в ляво, изглежда ей така:

Но вече се досещате, че ако работите в някой огромен проект не можете да търсите на ръка 150 страници с релийзи, а за това идва в помощ git cli tool-a:

[email protected]:[~/repo/code/grpcurl] $ git log --oneline | grep "8ee6c94"

8ee6c94 can't build s390x docker images; skip for now (#265)

Ето, че виждаме съобщението, а сега вадим и таг-а:

[email protected]:[~/repo/code/grpcurl] $ git tag --contains 8ee6c94 | head -1
v1.8.5

Без head -1 вади всички тагове, които съдържат този commit (благодаря на Владо за дописването и коригирането)

[email protected]:[~/repo/code/grpcurl] $ git tag --contains 8ee6c94 | head -1
v1.8.5
v1.8.6

13.05.2022 – docker stats

Днес трябваше да дебъгвам малко докер images и се сетих за нещо, което е полезно, но не винаги е очевидно при дебъгването. Днес ще си говорим за docker stats.

[email protected]$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b1075225ec45 dreamy_blackwell 1.07% 599.2MiB / 7.697GiB 7.60% 18.2MB / 9.06MB 53.1MB / 23.1MB 132
36d367f20b13 zealous_elbakyan 1.20% 585MiB / 7.697GiB 7.42% 29.1MB / 20MB 67.9MB / 23.1MB 131
16b464b3eadc relaxed_bell 1.20% 640.9MiB / 7.697GiB 8.13% 30.7MB / 21.5MB 118MB / 23.1MB 130
b139b36a1c5c focused_night 1.22% 602.2MiB / 7.697GiB 7.64% 18.5MB / 9.44MB 119MB / 23.1MB 132

И ето, че имаме статистики за CPU/Memory usage/limits (ако не е сме ограничили използването на RAM памет на контейнера обикновено е лимита на хоста върху който върви), Network и Disk usage и PID.

Като изпълните docker stats ще се учудите защо премига така – това е заради постоянния refresh на статистиките. docker stats приема и четири много полезни параметъра, които често използвам и аз:

-aПоказва всички контейнери, пo default показва само тези, които са running
-formatМожете да използвате Go template за да изберете какво точно да виждате, пример по-долу
–no-streamДа покаже само първите резултати и да не рефрешва постоянно
–no-truncДа показва пълните ID-та на контейнери, например 7c37df0bd781b924e92218bd006a950fcc2871e26f17886f98c281de49c91216 вместо 7c37df0bd781
docker stats parameters

Както видяхте по-горе в импровизираната табличка можем да използваме –format и да output-нем JSON dada например.

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

Следващ епизод на подкаста: Да бъдеш татко

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

Когато решихме със Злати, че освен, че искаме и че е време да имаме дете не намерих нито едно място с подредена, сбита информация за това какво ме чака. Неща, които сега са ми common sense трябваше да ги уча когато вече Борко се беше родил, а нещата, които Злати знаеше още и още не мога да ги науча. Не знаех и за следродилната депресия, бърнаута при родителите, за подсичането и за коликите, не знаех и за това как се къпе бебенце на чешма, за това кога, по колко и как трябва да яде и спи, какъв номер обувки носи. И това с времето ме накара да усещам, че колкото и да опитвам не мога да настигна образа на бащата, който искам да бъда. Сега, вече знаейки много от тези неща бих искал да споделя с всички татковци защо понякога ни е по-лесно да носим 4х18″ зимни гуми 600 метра в посока отколкото да се погрижим за час и половина за бебенцето (и не се шегувам за това), за това как да помагаме наистина на майките на нашите деца и за това къде да не пилеем силите си и къде можем да си починем (аз лично няколко дни след като вече изписаха Борко и Злати почти не спах за да ги гледам и да съм нащрек ако някой издаде звук или има нужда от нещо.


Ще се радвам и на вашата гледна точка, мои читатели, за да сметна, че епизода не е само моята ограничена гледна точка, а и такава, която би била нова за мен. Коментарите може да оставяте тук или в страницата на блога във Фейсбук.

Procol Harum

На работа съм, главата ми пуши, аз (и краката ми) още преживявам карането от вчера (за което пиша статия (под 5000 думи, обещавам!)) и youtube ми предложи нещо, което не бях слушал от много години – единствената песен, която знам на Procol Harum, тяхно изпълнение от 2006 г. в Дания с филхармоничен оркестър. Звуците на цялото нещо, гласът на Гари Брокър, всичко е един голям, страхотен синхрон.

Бих искал да бъда някъде, където мога да чуя нещо подобно с наистина добра техника, да се потопя и да ударя един ром, да речем (ромът (не човека, а питието) ми дойде от книгата, която слушам – “Неграмотното момиче, което можеше да смята” на Юнас Юнасон).

25.03.2022

Айде започвам с новините като Ана Цолова и Юксел Кадриев:

  • Microsoft потвърди, че са ги издумкали от Lapsus$ – 37GB включително и сорс код на Bing, Cortana, Bing и множество вътрешни проекти;
  • На трети март пък хакнаха nVidia и изтеглиха данните на 71000 служителя, пак от същата група – Lapsus$;
  • Интересно четиво за outage-а на github от преди няколко дни;
  • Ако помните преди година се запали datacenter-a на OVHcloud та направиха репорт по темата. До сега никога не съм присъствал физически в datacenter, но съм чел и гледал доста и там нещата са наистина сериозни във всяко едно отношение – от UPS-ите, през системите за безопасност и 1000-та защити от пожар. Е – единия datacenter на OVHcloud се оказа, че е живял в сграда с дървен таван, БЕЗ поражогасители и без cut-out (което е нещо като физически бушон, който прекъсва тока до част или целия datacenter преди да стане съвсем лошо). Та колкото повече човек чете толкова повече стига до извода, че сървърите не са най-скъпото в тези DCs.

24.03.2022

Вчера ми излезе спомен от фейсбук като ходихме с Дидо във ВИНС-а и Технически Университет – Варна да говорим на студентите за бранша – какво да очакват от бизнеса и какво бизнеса би очаквал от тях. И в двата университета се получи доста добре, но ТУ имаха предимство – първо залата беше огромна и имаше хора, второ – бяха вече на вълна, че като завършат ще се наложи да работят и няма да е зле ако някой им каже дали са на правилния път плюс им беше искрено интересно. Е – не ги закарахме на биропой след това, че беше от сутринта лекцията (когато говорих във ВИНС преди няколко години в техния Master Class след часът в който никой не каза и дума ги закарах в Алба-та и след няколко бири разговорите се случиха доста по-добре), но пак се получи.

Така, че съвет от мен – когато имате възможност – ходете по такива събития, защото биснесът, в случая аз и Дидо говорихме от името на Немечек, много компактно обяснява какви очаквания има към бъдещите си колеги, а това е безценно. По мое време, с риск да прозвуча като пенсионер, такива неща не е имало (или поне в Добрич е нямало …) и когато започнах първата си работа имах ОГРОМНИ дупки в някакви common sense неща – офис пакет (преди да сте се заляли от смях макросите в Ексел могат да бъдат сравнени с нисък левел демон от някоя особено гадна точка на дупката в която живее), комуникация с колегите (няколко години бях най-малкия от почти 200-те колеги и ми беше наистина трудно да започна да си говоря за тях на теми като смяна на ангренажни ремъци, болки в колената или някакви там други неща) и т.н.

19.03.2022

Exiting vim

Така както съм започнал ще обърна блога на tutorial сайт (в което няма нищо лошо).
Използвате ли vim в ежедневието си? Знаете как да излезете от него? Чудесно, този пост е за вас.

Наложи ми се днес да заменя много стрингове с други такива та реших да го направя под vim и споделям с вас.

Отваряме файла, който искаме да редактираме и натискаме : (за да влезем в режим на приемане на команди, баси комунистическото прозвуча):

%s/False/true/g

Този regex ще потърси целия файл за стринг False и ще го промени на True. Може и само ред по ред, а не всички наведнъж като махнете /g накрая, а можете и да му кажете само върху кои редове да направи промяната с:

:6,10s/False/True/g

18.03.2022

Искам да накарам диска ми да се mount-ва автоматично при стартиране на ubuntu-то та реших да споделя ако някой има нужда от долните редове:

sudo fdisk -l

От списъка намирам, че диска, който търся е sdb, a partition-а му е sdb1:

Disk /dev/sdb: 5,47 TiB, 6001175126016 bytes, 11721045168 sectors
Disk model: ST6000DM003-2CY1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: C2683872-ECAF-4306-8170-73D16C6CE475

Device     Start         End     Sectors  Size Type
/dev/sdb1   2048 11721043967 11721041920  5,5T Linux filesystem

След това намирам UUID-то на partition-а (може и с името ѝ, в случая /dev/sdb1, но това не е добра идея по много причини):

$ sudo blkid
/dev/sdb1: UUID="fe490c8e-ac32-442a-2dfc-8e089131e048" TYPE="ext4" PARTLABEL="Storage drive" PARTUUID="6b1f3ab3-a009-43d8-8fc4-d8e456acc717"

И добавяме на нов ред в /etc/fstab

UUID=fe490c8e-ac32-442a-2dfc-8e089131e048 /mnt/bigDrive ext4    defaults        0       2

Като разбира се променяме UUID и mount point-а, който при мен води до /mnt/bigDrive.

И за да тестваме дали сме направили всичко правилно може и без рестарт, а със следната команда:

$ sudo mount -av
/                        : ignored
/boot/efi           : already mounted
none                 : ignored
/mnt/bigDrive   : successfully mounted

Туй то.

13.03.2022

Последната седмица беше интересна – в офиса се борих като прасе на наркотици в тресавище пълно с побеснели котки (да речем) с PostgreSQL и други забави, в личен план реших да продам vortex, защото факта, че не мога да сменя вентилаторите му с по-тихи такива (оригиналните са практически вечни и супер ефективни, но са толкова шумни, че при стартиране на машината когато завъртят на 100% не мога да стоя в същата стая) ме подлуди. Търсих няколко месеца решение и всичко, което излезе беше неприемливо и се примирих с това, че ще downgrade-на към нещо много по-практично – HP Microserver gen8 изглежда като читав вариант. Ще видим идните месеци. Още не ми се иска да продам машината, защото е първия ми досег с bare-metal, но няма как. Но пък уроците, които научих бяха безценни. gen8 предлага подобни функционналности – безценния за мен iLo management, redundant BIOS, build quality над повечето потребителска техника и т.н. и т.н.


В още по-личен план в нас е тотална забава – бебе Борко вече не е бебе, а момченце на цели 1.4 годинки (така ли се изписват годинка и четири месеца?) – вече си сочи какво иска, хапва с вилица и лъжица, играе си с все по-сложни играчки, бяга много, смее се много, става все по-похватен, супер е обичлив, кефи се много да чете книжки и често ни милва или гушка. А с котката Иво вече са почти приятели. Зуза от своя страна е супер майката – грижи се за него през моментите в които не съм в нас, играе си с него на супер интересните и поучителни игри, възпитава го страхотно и даже още не е изперкала.

Освен това преди време питах във Фейсбук дали някой идиот няма да ми се навие на акъла да отидем на караме Дунав Ултра, която изкарах 2018 г. за (под) 48 часа, но никой не отвърна така, че може би ще се откажа. Едно от основните ми неща са липсата на бензиностанции по пътя и сервизна кола. Така 700-те км. се превръщат в оцеляване. В края на месеца ме чакат 500 км. (два бревета в два дни – събота 200 км и неделя 300 км) за два дни, което ще ми начеше крастата за доста време напред. И да се оплача на всички и тук – преди няколко години промениха маршрута на 300 км. бревет и денивелацията от 1400 метра надморска височина сега е над 3500 … Това. Ще. Бъде. Грозно.

Те така. Както сте видели и правя експерименти с нов дизайн, използвам GeneratePress и изглежда, че с малко tweaks може и да стане моята тема, макар, че май държа доста на това потребителите да си избират цвета на темата – дали да е тъмен или светъл. Ке видим.
Ако имате някаква интересна тема в главата може да я споделите тук като коментар.

How to export postgresql query to CSV

Today I’ve had a task to export couple of PostgreSQL (v10) to a CSV for some data analytics. Here’s how I did this:

\copy (select * from supersecrettable;) To '/home/nedko/supersecrettable.csv' With CSV DELIMITER ',' HEADER

It’s super easy, but, BUT how do you do the same exercise but with multi-line query? I hit the дърво before I find the way. Because if I paste the query with the \copy parameter and everything else I violate some parameter requirements and I got

\copy: parse error at end of line

I’ve found a workaround (not the cleanest way to do this, but it works at least). Just paste the query without the \copy and then navigate back to the beginning to add it manually.