Ode to professionals

Created on 20180419

A professional doesn't dress well to impress and fake his professionalism. He dresses well to feel professional.

A professional is not hack-y, quick or dirty. He is a thorough and precise.

A professional is not arrogant or know-it-all. He works together with his colleagues, learns from them and helps them.

A professional understands planned work, unplanned work and plans for the unplanned work.

A professional takes responsibility but never blames.

A professional always learns.

A professional uses the right tool for the job. Not the one that is most hyped at the moment, nor the one he is just most familiar with but too complex or too simple for this job.

A professional understands his human limitations. Thus he never overworks to show off or mistreats the rest of his life for his craft.

A professional always tells the truth, voices his opinions where they are relevant to the work and protects his craft and his colleagues.

A professional understands or tries to understand to the best of his abilities the risks and tradeoffs of choosing one solution over another in the broader context of the work being done.

Auto adapting signal to day-night scheme

Created on 20180402

So I wanted to automatically change the day/night theme of my brand new Signal desktop app. The way that it is manually done is through the File -> Preferences... menu. Now that's not convinient for programatic person like me. Let's investigate!

.config folder

My first stab is looking into the mostly standard ~/.config folder in Linux for Signal if one actually exists. It turns out it does. Let's see. It even has a ~/.config/Signal/config.json file. Unfortunately, that file doesn't contain the settings for the theme, just window positions.

grep -ring in the folder for any of android or theme just returns the logfile that Signal is writing to.

...
./logs/log.log.1:{..."theme-setting changed to android-dark",...}
...

No luck.

Another stab is at /opt/Signal directory. Again - no luck. And the app is a binary ELF executable

$ file signal-desktop 
signal-desktop: ELF 64-bit LSB executable,...

strace-ing

My next attempt is to attach to attach to the Signal process via strace. Find the process by ps aux|grep signal, attach by strace -p <pid> and try to change the . Boy, this does a lot of stuff! Let's filter by writing:

strace -e write -p 12345

Still, too much but I saw something hapenning amid the writing to 40 and 71 file descriptors (fd).

#...
write(40, "!", 1)                       = 1
write(71, "\0", 1)                      = 1
write(40, "!", 1)                       = 1
write(1, "{\"name\":\"log\",\"hostname\":\"pi2-ho"..., 147) = 147
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(71, "\0", 1)                      = 1
write(40, "!", 1)                       = 1
#...

All right, the 1 fd is the log that is being written that I already saw. How about that 12 fd? Let's explore within the proc fs:

$ cd /proc/1234/fd
$ ls -la
# ...
lrwx------ 1 pi2 pi2 64 Mar 29 23:23 12 -> anon_inode:[eventfd]
# ...

Oh boy, some wierd anonymous inode. So we are definately not dealing with a good old filesystem file but rather some on the fly created fd. Let's explore a bit more...

Signal is an Electron app

Taking a look at the github repo of the project. Searching for dark and theme reveals css, sass files. Okay

Looking at the menus there is View -> Toggle Developer Tools and BAM - a good old Chrome developer tools console pops up! Inspecting the elements, it's pretty clear what is happening:

<body class="android">
<!-- changes to -->
<body class="android-dark">

Brilliant, the change of theme just changes the class on the body element. Let's see if we have jquery or I have to go to the dark ages of javascript's findElementByTagName:

> $
< function ( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced' ...

Good, we have. Now I "just" have to find a way to connect to chrome console via a good old terminal in some way...

Chrome remote debugging

Searching the Internets, I find a post in Chromium blog from way back in 2011 that I can run Chrome with --remote-debugging-port flag which enables some sort of a remote console.

Would the electron app do the same?

signal-desktop --remote-debugging-port=9222

Indeed it does. This console however is not just a simple tcp connection to the javascript console. Running echo "alert('echo'); | netcat localhost 9222 does nothing. More reading to go...

Turns out, Chrome DevTools has its own protocol that among other things exposes websockets. Let's see what clients exist for that

Quite a lot.

Any pythonic ones? pychrome seems simple enough.

Let's be modern, do python3:

pip3 install pychrome

And I will use my favourite repl, ipython and follow the Getting started tutorial:

import pychrome

browser = pychrome.Browser(url="http://127.0.0.1:9222")

Awesome, I have a connection. The tutorial goes into opening a tab. I don't want that, I assume I should alread have a tab. Exploring browser object (via my favourite ipython repl):

In [3]: dir(browser)
Out[3]: [... _private_stuff
'activate_tab',
 'close_tab',
 'dev_url',
 'list_tab',
 'new_tab',
 'version']

In [4]: browser.list_tab()
Out[4]: [<Tab [38473d8e-ad8d-4325-8cb6-81aaec36c124]>]

In [5]: tab = browser.list_tab()[0]

In [6]: dir(tab)
Out[6]: [... _private_stuff
 'call_method',
 'debug',
 'del_all_listeners',
 'event_handlers',
 'event_queue',
 'get_listener',
 'id',
 'method_results',
 'set_listener',
 'start',
 'status',
 'status_initial',
 'status_started',
 'status_stopped',
 'stop',
 'type',
 'wait']

The README goes into navigating pages and the examples folder is also not what I am looking for. But they do tell me call_method is probably what I want, just need to find the proper string and parameters in the protocl. I want to execute a javascript call.

Back to the Chrome DevTools Protocol Viewer. I look through a few of the Domains listed and finally arrive at Runtime.evaluate method.

In [7]: tab.start()
In [8]: tab.call_method('Runtime.evaluate', expression='alert("hi");')
# I GET AN ALERT IN THE BROWSER! Dismiss it.
Out[8]: {'result': {'type': 'undefined'}}

Finally! I have access to my javascript console in the browser! Let's write the jquery change of theme:

tab.call_method('Runtime.evaluate', expression='$("body").removeClass("android").addClass("android-dark");')

That worked!

Wrapping it up

Let's write a propper python script now:

#!/usr/bin/env python3

import sys
import pychrome

sys_argv = sys.argv

if len(sys_argv) < 2:
    print("first argument needs to be day|night")  
    exit(1)

command = sys_argv[1]

if command == "night":
    expression = js_dark_to_light = """
$("body").removeClass("android").addClass("android-dark");
"""
elif command == "day":
    expression = js_light_to_dark = """
$("body").removeClass("android-dark").addClass("android");
""" 
else:
    print("first argument needs to be day|night")
    exit(1)

browser = pychrome.Browser(url="http://127.0.0.1:9222")
tab = browser.list_tab()[0]
tab.start()

tab.call_method('Runtime.evaluate', expression=expression)

tab.stop()

Running ./change_signal.py day changes to white theme and ./change_signal.py night goes to dark theme.

I also want to change the signal-desktop app to always start with the remote-debug flag enabled, so I do that:

rm /usr/local/bin/signal-desktop
cat > /usr/local/bin/signal-desktop << EOF
#!/bin/bash
/opt/Signal/signal-desktop --remote-debugging-port=9222
EOF
chmod +x /usr/local/bin/signal-desktop

And that's it. Code can be found in my sun repo which also deals with other day-night related dark-light themes including a script to detect whether the sun has set or not:

$ ./calc_sun.py 
usage: calc --loc=location_name [--date-format] 
       calc --lat=latitude --lon=longitude [--tz|--date-format]
returns 
       current_time sunrise sunset day|night

$ ./calc_sun.py --lat=51.21 --lon=4.40 --tz=Europe/Brussels
23:57 07:23 20:10 night

So now I can chain that:

state=`./current.sh | cut -f4 -d' '`
./change_signal.py $state

Voala! That was fun 🙂😊

Here's how I got my music from Google Music (as of March 2018)

Created on 20180331

At some point I uploaded all my music on Google Music - they provided 20,000 songs upload for free. Then of course, they started pushing their paid service - fair enought. I tried the trial several times, I paid subscriptions several times over the years, but I never enjoyed the suggestions it was giving me and somehow the music I wanted, wasn't there. So eventually I always just went to YouTube to listen to music.

But now that I am trying to detach a little bit from the cloud and get my data back I wanted to try to download my music from Google Music.

Google Checkout

My first attempt was the assumption that I can get my music as a part of the standard Google Get Back My Data or whatever. It was fairly easy to get there - MyAccount from my profile image, then Takeout then click on Create Archive.

google checkout

All seems good, right? Do you notice the small print?

google checkout small print - you can't download your music

Ah, I need to use Google Play Music Manager to actually get my music. Otherwise, I just get a metadata. Fine. Following the link doesn't really lead me to downloading the Music manager, just a help page. But I am Smart (or stubborn), I navigated around, found the link to actually download it.

Google Music Manager

google music manager

I install my music manager, sign in and select to Download all my music, specify a folder...

and nothing happens.

I am slightly annoyed but very stubborn so I push it. So let's see what's hapenning.

The .config folder in my home directory contains google-musicmanager and a log. Let's tail it:

pi2@pi2-home-laptop ~/.config/google-musicmanager $ tail -F google-musicmanager.log

[../Shared/HttpClients/CurlHttpClientImpl.cpp:57 ::CurlSslVerifyCertificate()]
2018-03-31 11:10:08,371 +0200 ERROR TId 0x7f5756183700 curl_easy_perform failed with 60 [../Shared/HttpClients/CurlHttpClientImpl.cpp:402 CurlHttpClientImpl::performPrivate()]
2018-03-31 11:10:08,372 +0200 ERROR TId 0x7f5756183700 Certificate error [../Shared/HttpClients/CurlHttpClientImpl.cpp:406 CurlHttpClientImpl::performPrivate()]
2018-03-31 11:10:08,372 +0200 ERROR TId 0x7f5756183700 Call to https://sj.googleusercontent.com/download?id=[REDACTED]&itag=25&source=skyjam_user_upload&o=[REDACTED]3&uits=1&tid=[REDACTED]&ip=0.0.0.0&ipbits=0&expire=1522487498&sparams=id,itag,source,o,uits,tid,ip,ipbits,expire&signature=[REDACTED]&key=sj3&targetkbps=768 failed with result 3 [../Shared/HttpClients/CommonHttpClientImpl.cpp:50 CommonHttpClientImpl::perform()]
2018-03-31 11:10:08,393 +0200 ERROR TId 0x7f5756183700 Failed to Send Request Result - 3 [../Shared/HttpClients/DownloadFileClient.cpp:220 DownloadFileClient::Execute()]
2018-03-31 11:10:08,397 +0200 ERROR TId 0x7f5756183700 Failed to download song id=[REDACTED] [Core/DownloadProcessor.cpp:128 DownloadProcessor::processDownloadRequest()]
2018-03-31 11:10:08,825 +0200 INFO TId 0x7f5756183700 errno 2 calling stat /home/pi2/.config/google-musicmanager/00 Brett Domino Trio- Ultimate Ch.mp3 [../../Shared/TpnBase/TpnPortC.c:150 ::_Port_GetFileInfo()]
2018-03-31 11:10:08,883 +0200 ERROR TId 0x7f5756183700 Failed to Verify Certificate: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.googleusercontent.com (unable to get local issuer certificate:0x00000000) [../Shared/HttpClients/CurlHttpClientImpl.cpp:44 ::CurlSslVerifyCertificate()]
2018-03-31 11:10:08,883 +0200 ERROR TId 0x7f5756183700 Certificate /C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.googleusercontent.com:
-----BEGIN CERTIFICATE-----
...

(I redacted some parts of the output, not sure if any of them are sensitive but better safe than sorry).

So it's an expired certificate from what I gather. I guess there might be some vulnerability with this level of unsupported tool but I don't want to do this now. I want my MUSIIIIC.

I am getting a bit more annoyed and a bit more stubborn. Time to fire the hard guns.

Windows Music manager client

Google must be supporting Windows client better. Obtained a completely legitimate copy of Windows 10, spin up a virtual machine on Virtualbox, download the manager, try to log in and...

google music manager - 2 step verification

Huh? Nothing happened. Okay, let's try the Google Authenticator...

google music manager - authenticator

Okay, I am quite angry now.

Manual to the rescue

My only left option seems to be to either try to dual boot and hope Google Music manager detects that it's on a virtual machine and for some /security?/ reason decides not to authenticate me.

Or manually download the songs from the web interface.

I decide manual is going to be quicker - I've got about 2000 songs.

google music web - 100 limit

Arghhhh!!! So in a batch of 100 I will need around 20 selections... Should I automate? Let's go to xkcd:

xkcd - is it worth the time

I think I will be better off manually. Besides, inspecting the code seems that for optimization reasons, the song list is not loaded in its completeness but it keeps around 20 songs in the DOM and the rest it dynamically fetches on scroll events.

The good news is, the table keeps a data-index field with consequitive numbers so that I can at least find where I am and download in batch of 100

dev tools - inspect elements of the table

Oh, just one more thing - you can download a certain song just 2 times from web and apparently I have already downloaded some before...

maximum two downloads

I am not too happy with this. But I got my Music back.

C'mon, Google... Just to put oil in the fire, today Google announced that it's discontinuing yet another service - goo.gl.

Задача: Как да вдигнем заплатите на българите?

Created on 20170123

или "Системата ще си върви и ние ще си се оплакваме"

Уважаеми читатели,

Ако въобще мога да правя нещо в тоя живот, то може би, смея да твърдя, малко нескромно, че горе-долу съм се научил да мога да решавам технически проблеми. Колко още имам да уча, само аз си знам. Но ако трябва да избера нещо, в което съм окей, то може би е това - решаване, оптимизиране на задачи. Не винаги успявам и понякога много се затруднявам, но си има принципи и системи, които всеки като мен ползва. През годините се запознах със страхотни хора, които правят тези неща много по-добре от мен, превръщат това нещо в професия - решаване на проблеми, на задачи по физика, астрономия, химия, биология, медицина, на най-дълбоките проблеми, които човечеството е познавало. Много специфични проблеми, много учене трябва, за да се опиташ да ги решиш. И разбира се, политиката, икономиката, обществото са не по-малко сложни науки с не по-малко интересни проблеми и трябва голяма специализация, за да решиш основните проблеми.

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

Но споделете за малко с мен една хипотеза. Ако повишаването на заплатите беше задача по физика или програмиране, ето как бих я започнал:

Какво се Търси? - (примерно) Мога ли да повиша заплатите?

Какво е Даденото? - Кои неща са обвързани със заплатите? Производителност, БВП, нещо друго…? Какви са икономическите показатели? Как се разпределя бюджета?

Как ще се реши? - Какви формули мога да използвам, какви политики? Как другите държави решават подобни проблеми? Откъде мога да взема пари - данъци, такси, заеми, други…?

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

Но това не е моя работа. Като гражданин, моята работа е да избера човека, партията, която предлага решение на този проблем. Не, даже по-точно - моята работа е да избера най-доброто решение. Но как да избера решение, камо ли най-доброто решение, без дори да разбирам проблема?! Преди да избера партията, която ще ме представлява, би трябвало да погледна какви са техните решения. Мога ли да разбера техните решения? Не и преди да съм разбрал проблема!

Между другото, решение като “Ще спра корупцията” получава 0 точки на всяка олимпиада. В училище - Слаб 2. С коментар: “Неясно решение, не са показани всички стъпки”

Чия работа е да ми обясни проблемите?

Журналистиката/медиите? Може би. Справя ли се? За мен не.

Новините ми дават едни откъслечни проблеми, не целенасочени, а проблеми свързани с деня. Някой влак паднал днес - утре да се стегне железницата! Някой го е блъснала кола - утре да се увеличат глобите! Хаос и паника! Днес се събират 20 депутата, утре 53. Решават някакъв закон. Какво от това? Новините ми дават откъслечна, временна информация, която не трае повече от ден-два и след това новата новина идва и аз нямам Дадено и Търси се за дългосрочните проблеми.

Ако решавахме така проблемите с физиката, медицината и астрономията, така откъслечно, така не систематично, така произволно, никога нямаше да направим прогрес. Отдавна свършиха дните, когато хората по случайност намират нещо. Добре де, понякога се получава, но все по-рядко. Хората, които решават задачи се концентрират върху тези задачи с години, понякога десетилетия!

Та, как избирам този човек или тази група от хора? Лъчезарната им усмивка? Мачовското изражение? Секси походката? “Не тия, че тия много крадат - по-скоро тия, че тия по-малко крадат”? Слухове? Демагогия? Лозунги? Да, това е един вариант.

Друг вариант е да бъда обучен да избирам.

Чия работа е да бъда обучен да избирам?

Училището? Може би. Справя ли се? Според мен не.

Ние нямаме гражданско образование, политика или дори (може да се спори) икономика. Кой е учил гражданско образование в училище? Кой е учил политика, освен история с всички битки, царе, векове и години, без изводи, само зубрене? Може би някъде учат история с изводи, на мен от четири училища, не се падна или аз не я разбрах. Както и да е. Откъде да намеря Дадено и Търси се? Интересува ли ме?

На всеки 2-4 години, независимо каква е моята професия, аз трябва да отида и да направя един избор. Избор, от който изглежда нищо не разбирам. Аз съм тясно специализиран, може би имам обща култура от новини, но не разбирам от истинските проблеми.

И така, какво мога да направя?

Да се самообуча. Окей, ще изчета учебници по политическа теория, ще разбера обстановката в света, дори история ще хвърля в микса. И моят глас все ще си тежи толкова, колкото и преди, колкото и на всеки българин, обучен или необучен. И, не, не предлагам образователен ценз за изборите. То си има своите проблеми, най-малкият от които е, че разделението на класи никога не е било добра идея в историята. Но въпросът е - за какво да го правя? Нямам личен стимул да се опитам да разбера по-добре решението. Само колективно, ако всички го направим имам интерес, но самостоятелно - нямам. Класическа Теория на игрите. Затворническата дилема. Класическа задача - двама злодеятели, които са извършили едно престъпление са изолирани в килии. Следователите им казват, че ако натопят другия, те самите излизат. Ако и двамата обаче се натопят, двамата лежат дълго. Ако никой не натопи никого - двамата получават лека присъда. Естествено, злодеятелите са изолирани и няма как да комуникират помежду си. Ако можеха, щяха да си кажат никой не топи никого и получават лека присъда. Без да знаят обаче, без да имат комуникация, ситуацията е друга и двамата се прецакват. Потърсете в Гугъл, ако обяснението не ви харесва тук (The prisoner’s dilemma). Само че, за разлика от Затворническата дилема, където злодеятелите са изолирани, в една система като нашата, затворът може би е илюзорен. Затворът е затвор, ако реша, че нищо не мога да направя, освен да се вайкам. Или по-точно, ако всички приемем, че има затвор, затвор има.

Нашето общество успява да приеме, че парите струват нещо. Всички вярват в тях и затова работят. Парите, сами по себе си, не струват нищо (освен хартията може би) - те са илюзия. Нямат златно покритие или каквото и да е друго покритие. Парите (например левовете) работят, защото всички българи вярваме, че левовете работят. Ако и това ви е нова идея, потърсете [fiat money]. Но първоначално парите не са работели, хартийката не струва нищо и хората са слагали нещо зад нея, някаква себестойност. С други думи - на теория е възможно обществото да повярва в нещо като цяло, въпросът е как?

Такива въпроси ме мъчат от известно време.

Още малко рант

Мисля, че е крайно време хората да спрат да мислят, че управлението на една държава не е за тях. Че материята е твърде сложна, комплексна и объркана и че само избран клан от не-хора, не-човеци, мега-интелигентни (или мега-прости) или извънземни ръководят държавата ни. Защото ти, на тяхно място, с тази система, би вършил същото! Дадено и Търси се не е достатъчно, ако нямаш мнозинство.

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

Тези хора не са изключителни егоисти, вродени социопати, лъжци, крадци, подлеци и измамници, които трябва да бъдат вкарани в затвора, измъчвани и изтезавани, застреляни, заедно с цялата им рода за престъпления, по-лоши от всяко друго престъпление съществуващо на Земята. Може би някои са такива, не ги познавам. Но разбирам, защото съм си мислел, че ако аз застана там, аз ще бъда същия и аз трябва да се самолинчувам.

Какво друго? Как би действал ти, уважаеми читателю? Какво би направил?

Не, какво би направил ти, какво?

Не гледай надолу в поста, не мами, нали си свят, нали не си лъжец, подлец като тия горе? Хайде, какво би направил?

Аз не знам. Ако бях на тяхно място, не знам какво бих направил. Не мисля, че бих направил много. Не мисля, че бих могъл да не лъжа. Да не крада. Да не пренебрегна всички принципи, морални уроци от родители, учители и общество, и съвест. Не бих могъл, не мисля. Защото мислех много какво бих направил аз. Да, аз, господин Никой. Аз не съм политик. Не съм социолог. Или дори историк. Аз съм програмистче, защо аз трябва да разбирам от политика? Защо трябва да разбирам от икономика? Не може всеки да разбира от всичко! Аз разбирам малко от физика и малко повече от компютри. Не мога да науча всичко, а много искам! Но не мога! Трябва други хора. Аз не знам. Аз не мога! Не ме слагайте мене на власт, аз не знам!

И наистина не знам! А трябва ли?

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

Ама че нали за това имаме разпределение на труда, разпределение на властите. Специализация. Нали за това някои хора разбират от тия неща, за да не трябва аз да разбирам, нали това е цялата идея на модерното ни общество - да разбираме от тясна специализация и да имаме доверие на хората, които ни оправят пералнята без да трябва да знаем как да си я оправим сами?

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

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

Ама ако не ме интересува, утре нямам право да се оплаквам. Когато направя избор, от който не разбирам, без да съм се информирал, аз съм играл тото. Като не съм спечелил, на крива ракета, Космосът и крив.

И ако цялото общество мисли така, най-лесното е за политиците да говорят гръмко, силно, да разлепват повече плакати от конкурентите и те ще спечелят. Закона на Който по-силно вика.

Хора, учени и не-учени, работници, предприемачи, пенсионери, бедни, богати и средна класа, ученици, висшисти, бели, черни, жълти, мъже, жени, гейове, лесбийки, търсещи се, осъзнати и неосъзнати…

Така няма да стане!

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

Системата ще си върви, а ние ще се оплакваме. И системата ще си върви, и ние ще си се оплакваме. И системата ще си върви, и ние ще си се оплакваме. И системата ще си върви, и ние ще си се оплакваме….

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

И системата ще си върви, а ние ще се оплакваме.

Без да знаем за какво сме отговорни сами за себе си, а за какво е отговорно правителството. „Те“. „Кой?“.

И системата ще си върви, а ние ще се оплакваме.

Без да разбираме, без граждански контрол и без доверие в институциите и помежду ни - системата ще си върви…

Ударен от живота

Created on 20170104

или Връщам се (да направим двойните заглавия пак хит през 2017 ;) и ASCII еможиконките)

Замисляли ли сте се как взимате решения? Как сте решили да учите в училището, което учите или как работите това, което работите? Имали сте мечти, планове и живота ви удря в някакъв момент и плановете не работят или се променят.

Едно време трудните решения в живота си ги взимах с монета - хвърляш, наименуваш си ги ези и тура и каквото се падне. Даже мисля, че някъде имам блог пост за Квант на решението - идеална монета хвърлена по рандъм начин. Теорията ми беше, че ако се замислям за повече от 10 минути върху нещо, значи че плюсовете и минусите на двете са почти еквивалентни като чувство и по-добре да действам, отколкото да си губя времето в решения.

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

Да се върна в България или да остана в Глазгоу? Да затворя компанията или да продължа да се мъча? Да скъсам с приятелката или да продължа да инвестирам?

Правих схеми, диаграми, списъци с плюсове и минуси. Ходих на разходки. Гледах звездите. Питах приятели, семейство. Някак си всички други знаеха какво аз трябва да правя, освен аз самия. „Аз ако бях на твое място...“. Само че не си. Всеки си има индивидуален живот и няма как ти да си на мое място. Едно дете ги знае тия неща, ама възрастните говорят с разни хипотетични невъзможни неща.

И така, взех се насериозно. Станах възрастен. Удари ме живота. Загубих всичко, любовта си отиде, компанията се срути, приятелите ме изоставиха (ама май и аз ги изоставих, казва Нютон) и всички други там неща от баладичните ревящи песнички.

Реших, че в Глазгоу ми е студено нещо. Ветровито. Пък тук, цитирам, съм „щял да си живея като цар“, казват някои хора. Сега, не знам дали бих искал да съм цар. Демокрацията все още ми харесва като идея, въпреки проблемите, които видяхме през последната година, но за тях някой друг път. Но пък да пробвам ИТ сектора тука, да видим как се развива, какво има като работа, как са се променили българите през последните 5 години... това ми се прави.

Що съм ударен от живота ли? Ми не знам, дойде един Живко и ме удари. :)

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

Но пък колкото повече си спомням, че съм мижитурна част от съществуването на човечеството, на Вселената и тия неща нямат изглежда нямат никакво значение и се кефя. Като си спомня, че имам късмета да прекарвам време с наще, докато сме си още всички живи и здрави, и се кефя. Като видя как София се е променила през последните 5 години откак съм на майната си, и се кефя. Като се видя с приятелите ми тук и как те си се кефят на живота, и се кефя.

Някои дни не мога да се надигна от кревата от липса на мотивация. Не знам какво ми се прави, мисля си, че не знам как ще преглътна да работя за шеф (все пак съм лигав милениал), не знам какво ми е интересно точно, не се чувствам достатъчно добър в нищо, докато гледам хората около мен как си се кефят на нещата, които правят и се чудя само аз ли? Ми не. Май. Много хора не знаят какво правят и чувстват, че нищо не знаят и буксуват. О, и в последните пет години съм изгледал достатъчно мотивационни, подскачащи и неподскачъщи, ТЕД talk-ове и тем подобни. Като МакДоналдс са - много добри, помагат за малко и след 2 часа пак нищо не знаеш.

Обикновено ме мотивира по-дългосрочно като погледна нещо за Вселената. За огромната, безкрайна Вселена. Или снимка на някоя галактика, или като някой ми заговори за квантова механика и квантови компютри. Или като някой ми заговори за наноботчета и молекулни машинки. Или за Марс, за коли на ток, за ДНК, за прогреса в медицината, технологията. Или като се видя с хора, тук в България, които се занимават с тия неща, откриват звезди, пишат пейпъри, блъскат човечеството напред, въпреки все още трудната образователно-политико-икономна ситуация... еми спуквам се от кеф!

Така е като те удари Живко. Ставаш и продължаваш, щото на Млечния път ич не му дреме, че някой си Живко те е ударил. 14 милиарда години еволюция в космичен, химичен и биологичен смисъл, живея в най-якото време, където да те убият е новина, а не статистика, където знаем толкова много и има толкова много да се открие... Живко да си гледа работата, нека си удря. Но за да перефразирам Пипи: „Като те хапят комарите, хапи ги и ти“!