02062025 – Пет секунди в ада

На тренажора съм от 45 минути въртейки познатите интервали – няколко минути загрявка и след това 5 минути в червеното, после 5 минути въртене в зона 1 и така 5 пъти.

Васът е точно 0:25, аз съм се заклел пред себе си, че ще съм в добра форма за Дунав Ултра 2025 и въртя на тренажора. Пот се стича на вадички, краката горят, усещам познатото изтръпване на ръцете – усеща се като нежна паяжинка и след час не си усещаме пръстите.

Минали са 45 минути от началото на тренировката, но главата ми не се е изпразнила както обикновено. Онзи в мен още спи. Остават 10 минути.

Пулсът ми вече е в червено, краката ми леко треперят.

Остават пет минути.

Ето го. Мдам. Винаги, винаги към края идва моя така нужен букет от адреналин и хормони, които да събудят най-първичното в мен, да ми изпразнят главата и да кажат – “Днес ще се мре”.

Остават 2 минути.

Ето я дозата, която търсих последните 58 минути. Краката ми се изпълват с енергия, гърдите с топлина, а ръцете хващат с всичка сила кормилото.

Остават десет секунди.

Девет.

Осем.

Моето dies Irae идва.

Седем.

Шест.


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

Пет секунди. Усещат се като 5 минути.

Четири секунди. 700 вата, консистентно. Усещат се като 10 минути.

Три секунди. 700 вата. Усещат се като 20 минути.

Две секунди. 700 вата, без отклонение. Седемстотин, хора. Се-дем-сто-тин. Усещат се като половин час.

Една секунда. 700 вата. Очите ми са пълни с пот, не издържам и извиквам пронизително. Краката ми горят. Ръцете ми треперят. Пред очите ми е почти черно.

Финал.

Поглеждам Garmin Connect и се пуля докато се опитвам да си поема въздух. PR при първите шест дисциплини:

1 sec1112w
2 sec1101w
5 sec1093w
10 sec1027w
20 sec899w
30 sec631w

Хиляда сто и дванадесет вата за една откачено дълга секунда.

Краката ми треперят. Дописвам този литературен бъркоч и влизам да се изкъпя. И да мисля върху цифрите. И върху това наистина ли съм толкова зле? И това след работен ден, дълги срещи в полунощ.

Може би още мога?

Debug Kubernetes like a shrimp

Пиша за бъдещото си аз (и бъдеща статия за дейбъг на k8s). Тук ми е списъка с малките радости в живота при дебъг и по-точно:

  1. tail -f like experience with kubect get pods podname:
kubectl logs -f podname

2. За повече инфо около някой pod (особено когато вече е умрял и не можем да му видим логовете с горната команда) имаме:

kubectl describe pod

Имаме доооста информация включително и малко логове, имаме си и друга информация като volumes, портове, от къде се контролира (особено полезно ако като тепърва започвате с k8s и тръгнете да триете под и той след 5 секунди пак възкръсва като Марая Кери при падането на първата снежинка за годината) и още много.

3. Филтриране на подове и игра с output-а на kubectl. Ако искате да видите всички running pods какво правите? Мда, със сигурност не правите като мен – първичното решение да направите kubectl get pods и после да въртите разни bash тъпотии за да филтрирате. Можете обаче да използвате супер полезните field-selectors и да правите с output-а каквото си пожелаете. Нещо, което ми трябваше е да видя всички работещи pod-ове на кои node-ове живеят. Стана с една команда:

kubectl get pods --field-selector status.phase=Running -o wide

4. Какво става на клъстъра ми? Всеки се пита понякога, особено ако си хоствате сами k8s-а. Е, можете да намерите много информация с:

kubectl get events

Изсипва ви тонове с информация. Можете да сортирате по време с kubectl get events –sort-by=’.lastTimestamp’, но и нещо, което не знаех до момента в който не тръгнах да пиша тази статия. Можете да видите предишните stage-ове на вече умрели pod-ове! Което е супер полезно стига да им знаете името – kubectl get events podname

5. CPU/Memory usage per node/pod, особено както сега се боря като дебела женичка в добричка дискотека 2000 г.

kubectl top node nodename
kubectl top pod podname

6. Приключвам с най-верния ми приятел – kubectl exec, който ми позволява да се логна на pod-а и да видя логове и каквото друго ми е нужно. Тук е хубаво да отбележим, че докато работите по някой dockerfile, който е по-засукан можете да използвате root user-а. Не е стандартна, нито добра практика, но ще ни спести няколко билда. Като посвикне човек вече става интинктивно. Имайте предвид, че тук викаме bash, но ако ти каже, че няма използвайте sh:

kubectl exec -it podname -- bash

Също така можете да изпълнявте команди директно на пода, например искаме да видим всички env vars на pod-а:

kubectl exec -it podname -- env

7. Get k8s secrets directly (convert base64 secrets on the fly)

Когато работим със secrets или sealedSecrets ни се налага понякога да видим някой secret. Тяхната природа е да бъдат base64 кодирани и имаме още една стъпка в декриптирането. Е, с тази команда (забележете, че трябва да имате инсталиран jq):

kubectl get secrets some-secret -o jsonpath='{.data}' | jq -r 'to_entries[] | "\(.key): \(.value | @base64d)"'

7.1 Ако пък не искате да използвате горната команда (хинт – можете да си я сложите като alias) – можете да декодирате и кодирате стрингове по base64 директно в конзолата с:

~ echo "https://www.youtube.com/watch?v=dQw4w9WgXcQ" | base64
aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQo=

~ echo "aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQo=" | base64 -d
https://www.youtube.com/watch?v=dQw4w9WgXcQ


Edit – мислих да кръстя статията “Debug Kubernetes like a pro”, но съм много далеч от pro та за това – shrimp.

14052025 – Long nights

Снощи Оги става 4 пъти, а аз – 6. Това ми осигури точно 4 часа сън. Днес денят беше дълъг и труден.

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

Но друго ми е сега в ума – през цялото време въртях OST-то на филма Into the Wild (който ми е в топ 10), което е на Eddie Vedder. Нямам думи да опиша великолепието на Еди и целия, це-ли-я албум. До ден днешен като чуя някоя от песните, особено Long nights ми замирисва на 6 сутринта, кафе на газово котлонче и чертаене на маршрута на деня.

От няколко години ми се върти в главата какво ли би станало ако десетина дни правя всеки ден по 100 км. и като цяло до къде би ми стигнала мотивацията. Ако намеря добра инициатива бих се включил, дори и от тренажора когато децата са с мен.

09052025

Един от най-големите ми quality of life improvements около моята ежедневна работа около VSCode е да направя така, че при отваряне на терминал той да бъде в директорията в която ми е редактора.

Защо?

Защото не харесвам visual git решенията и ми е много по-удобно да работя в терминал. Но добър пример е когато работя по няколко репота, но терминала отдолу ми е един. Така става, че работя по репо Х, но терминала ми е в репо Y. Трябва да обикалям по директории и да сменям за нещо елементарно като например един commit. И ето тук ни влиза в помощ един shortcut, който можете да намерите в Keyboard Shortcuts и потърсите за:

workbench.action.terminal.newWithCwd

Аз лично му сложиш command+T, защото вече ми е в muscle memory. Така ако правя нещо и искам да извърша някоя елементарна операция просто отварям нов терминал, върша си нещата и го затварям.

Това решение ми спестява тонова писане.

07052025 – ГГ “Градинарят и смъртта”

Мислих да запиша цял епизод за книгата, което и ще направя, но днес (вече вчера пишейки това в 0:04 часа на 07 Май) Георги Господинов сподели във фейсбук последната си страница на книгата.

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

Но да се върнем на книгата. Никога през живота си не съм ревал на книга толкова, колкото на тази. Връзката, която Господинов има с читателя е феноменална. Всичките му романи са рефлекция на нашите собствени вътрешни светове, страхове и възгледи. Помня как веднъж стоях в едно заведение и пиех кафе и слушах книгата с великолепния глас на Владо Пенев и просто не мога да спра да рева. Спирах сигурно 3-4 пъти и то през всеки 5 изречения ново копие, което те раздира вътрешно и се сещаш за твоя си баща, за твоя дядо, за себе си ако щеш. И боли ли, боли.
Първите 50-60% са много трудни са четене/слушане, после може би става маааалко по-лесно, но пак си е трудна работа.

06052025

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

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

Не разбирам защо, но през половината време бях в топ форма, даже по-ското 65% от времето. На 4% изкачване карах с 13 км/ч, което за мен си е над средното.

Как да е, преди да видя табелата Варна бях със срена скорост от 23 км/ч, което за мен си е мечта.

През голяма част от времето карах като активно се опитвах да не мисля за нищо, защото иначе сигурно нямаше да мога да финиширам, а в ушите ми звучаха новооткритите французи Landmvrks (препоръчвам Creature, Sulfur, Blood Red и Funeral).

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

На връщане обаче реших да мина през най-трудния маршрут, а именно през Евксиноград (където скоро ще стане година откакто тече ремонт и едното платно е затворено) и през Аладжа Манастир. Там се и намиараше най-голямото изкачване през целия маршрут. Преди това има и още един няколокилометров баир. В общи линии последните баири с обща дължина от 8 км. изкарах на 150 пулс.

Болеше.

И то здраво. Краката се усещаха напомпани до пръсване, ноооо все пак липсата на тренировки си казва думата. Изкарах последния и най-зъл баир и исках да легна в тревата, но реших да не съм мелодраматичен и се прибрах вкъщи. Спусканията е излишно да казвам, че ги взимах в ТТ позиция, която да кажем, че … не е съвсем безопасна. Напъването беше на 100%.

И все пак никога след тренировка не съм се оплаквал, че съм излязал. Този път не е изключение.

Сега е време да потъна пак в скръбта, но днес, за малко над три часа имах свободата да бъда със себе си и да бъде тихо в главата ми.

05052025

Часът е 0:50, а аз след като съм нахранил, изкъпал (с косите, което си е екшън с Оги), прочел няколко приказки и приспал беше време да измия чиниите, да оправя малко и да приготвя раничките и на двамата за детска/ясла. Та от час и нещо push-вам, ръгам нашия dev k8s cluster и издевателствам над нещо по (не)обичайни начини.

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

03052025

Има нещо сърцераздирателно в кавъра на Lenard Cohen на U2 – Tower of song.

Yeah, my friends are gone and my hair is gray
I ache in the places where I used to play
And I’m crazy for love but I’m not coming on
I’m just paying my rent every day in the Tower of Song

Leonard Cohen е вероятно единствения артист, който харесвам безкрайно много повече когато е прехвърлил своите 60 години отколкото в неговата младост.

HOLY SHIT – оказа се, че tower of song е оригинално на Leonard Cohen, а не на U2. Вълшебния свят на изкуството и copyright-а …

02052025

Днешната борба е с nodejs и Azure pipelines. Няколко неща, които знам, но забравям понякога:

  1. MacOS си има команда, която взима stdout и го праща към clipboard-а –> cat package-lock.json | pbcopy После paste където си пожелаете, но ако искате по някаква причина да го направите през конзолата можете с pbpaste
  2. Можете да генерирате package-lock.json с npm i --package-lock-only. Така няма да проверява node_modules и да тегли dependencies
  3. Azure си имат много приятен списък с всичко инсталирано по техните runnenrs на база image. Можете да намерите например списък с всичко по техния Ubuntu 22.04 image
  4. Може и да има по-добро решение, но когато имам някаква дебъг сесия и имам да проверя няколко лога и/или файла които са на runner-a предпочитам да направя една стъпка, която прави job artifact в който мога да навигирам спокойно. Изглежда по този начин. Това например днес ми спести няколко допълнителни run-а за да видя няколко конфигурации, логове и .npmrc.

30042025

Набързо, преди да съм забравил:

  1. Във VSCode често работя по повече от един проект, но понякога стават грешки ако терминала на IDE-то е в друга директория. За това в keyboard shortcuts търсим workbench.action.terminal.newWithCwd и нашиваме удобен shortcut (в моя случай си избрах command+T). Така всеки път когато натисна command+T ми се отваря нов терминал във VSCode, който е в директорията на текущия ми отворен файл;
  2. Shame on me, но днес научих за pushd и popd. Ще ги използвам по-често в bash скриптовете си като се наложи да работя повечко с директории
  3. Нещо интересно и по-скоро за статията git магии , но можете да направите бърз списък със само модифицирани, но не и push-нати файлове в git repo бързо и лесно с git status -uno –porcelain. Повече инфо можете да видите в един от любимите ми сайтове – explain shell. Също така е и добър флекс ако искате да се заиграете с някой колега като му кажете, че “uno” и “porcelain” са валидни параметри в git
  4. Една чудесна статия за това как да си докреризираме react app директно от docker.com за начинаещи в docker.