Author Archives: Йордан Радунчев

Lap Flag

от Йордан Радунчев
лиценз CC BY

Отдавна не съм писал тук, за това ето нещо кратко.

От две седмици бягам всяка сутрин в парка. Въртя обиколки. Докато бягам, мислите ми скачат насам-натам, и се отнасям... Трудно ми е да следя колко обиколки съм направил, а не ми се поглежда GPS-а, защото би ми нарушило ритъма на бягане. И как си броя обиколките? Имам си флаг. Едно престаряло бездомно куче, което всяка сутрин чака на една от алеите да бъде нахранено от добра женица, която разхожда булонката си. Винаги стои на едно и също място, като леко променя позицията си - ту е в ляво от алеята, ту е в дясно, два метра по-нагоре, или малко по-надолу по нея... То е моя маркер. Когато минавам покрай него, машинално си отбелязвам на ум къде съм го видял. После, когато се зачудя колко ли обиколки съм навъртял, припомням си покрай колко различни "кучета" съм минал днес, на колко различни позиции съм го видял. Просто, нали? Дребните житейски хакове :)

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

Да си наинстаграмим снимките…

от Йордан Радунчев
лиценз CC BY

Имате стари снимки, искате да изглеждат като онези страхотно модерни снимки, които всички правят с Instagram? Дообре... Imagemagick знае как.

Оригиналната снимка:

Оригиналната снимка...

Ghotam:

Ghotam

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -modulate 120,10,100 -fill '#222b6d' -colorize 20 -gamma 0.5 -contrast -contrast ghotam.jpg

Toaster:

Toaster

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -fill black -opaque '#330000' -modulate 150,80,100 -gamma 1.2 -contrast -contrast -gaussian-blur 0x1 toaster.jpg

Nashville:

Nashville

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -fill black -opaque '#222b6d' -fill white -opaque '#f7daae'-contrast -modulate 100,150,100 -auto-gamma nashville.jpg

Lomo:

Lomo

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -channel R -level 33% -channel G -level 33% lomo.jpg

Kelvin:

Kelvin

convert zkayra.jpg -set option:distort:viewport "%[fx:min(w,h)]x%[fx:min(w,h)]+%[fx:max((w-h)/2,0)]+%[fx:max((h-w)/2,0)]" -filter point -distort SRT 0 +repage -auto-gamma -modulate 120,50,100 -fill 'rgba(255,153,0,0.5)' kelvin.jpg

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

Poor man’s backup options

от Йордан Радунчев
лиценз CC BY

Всички ние редовно си правим архив и резервни копия от важната информация по лаптопите и компютрите, които използваме, и съхраняваме тези архиви на друго място, различно от лаптопите и компютрите, които използваме... нали така? Ха-ха.

Това все още е най-стария виц сред IT хората - датира още от появата на първия персонален компютър.

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

Добрият човек Andrea Fabrizi е написал скрипт, който позволява да работите с dropbox от командния ред. Отбележете си някъде да го почерпите бира, когато го срещнете. Свалете си dropbox-uploader.sh и го настройте за работа с вашия dropbox, следвайки указанията на Андреа. С негова помощ можете да копирате архивите си на редовни интервали там с помощта на скрипт и cron.

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

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

openssl req -x509 -nodes -days 100000 -newkey rsa:2048 -keyout prk.pem -out puk.pem -subj '/'

Частният ключ prk.pem запазете някъде на сигурно място, чиято сигурност вие контролирате. Този ключ отключва архивите. Публичният ключ puk.pem ще се използва за заключването им, него може да запазите където ви е удобно, той може само да криптира.

Сега сте готови да използвате моя скрипт. Свалете си го от тук: dbackup. В началото на скрипта има няколко променливи, които трябва да настроите, за да стане използваем.

  • bcpdir=("${HOME}/mp3/" "${HOME}/scripts/") - тук задавате директориите, които искате да се архивират. ${HOME} е променлива на обкръжението, която отговаря на вашата домашна директория. Можете да зададете колкото пожелаете директории тук, като записвате пътя до тях в кавички и ги разделяте една от друга с интервал. В примера скрипта ще архивира две директории от домашната ми директория - mp3 и scripts.

  • pubkey=("${HOME}/dropbox_backup/pukey.pem") - тук се посочва публичния ключ, който ще се използва за криптиране на архивите. Задайте пълния път на файла.

  • dboxup=("${HOME}/dropboxbackup/dropboxuploader.sh") - това е пълния път до скрипта на Andrea. С него ще се ъплоудват архивите в dropbox. Необходимо е преди да изпълнявате моя скрипт, да сте настроили неговия за работа с вашия dropbox.

  • dboxdr="/backups" - това е папката в dropbox в която искате да се запишат архивите ви.

След като сте настроили тези променливи, можете да си създадете запис в cron, който да изпълнява скрипта на определен от вас интервал. Честито.

В този backup скрипт липсват много неща, които биха го направили истински бекъп скрипт. Например той прави само пълни архиви на посочените директории, не предлага възможност за частични архиви само на файловете, променени след последния пълен архив. Именно поради това е poor man's вариант на бекъп, а не истински бекъп. Но по-добре такъв, от колкото никакъв.

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

Скрипта вече си работи в /tmp директорията и почиства след себе си. Освен това разделя архивите на части от по 512M. Ако искате по-малки или по-големи парчета - задайте размера в променливата bckpch в мегабайти. За всеки файл се изчислява контролна сума (md5).

Still standing…

от Йордан Радунчев
лиценз CC BY

Помните ли, как през лятото си трансформирах работното място? Сигурно се чудите какво става и дали все още работя прав. Да, все още работя прав. Не, нямам никакво намерение да сядам отново. Защо? Разгледайте отново снимките, които съм направил на 2012-06-25... А сега разгледайте тази снимка:

Тадаааа! Пълна промяна!

Дали намирате някаква разлика, а :)

Естествено тази промяна не се дължи само и единствено на прехода от седнало към изправено положение. Дължи се най-вече на строг режим на хранене и повишена физическа активност. Но част от тази повишена физическа активност е именно прекарването на 8-9 часа дневно изправен на крака, вместо седнал на задник. Смятам за момента да спра до тук с привеждането на факти за ползата от правостоящото работно място в сравнение с офисния стол. Смятам, че този "факт" на днешната снимката, въпреки че е с двадесет килограма по-лек от онзи на снимките, правени преди три месеца, тежи достатъчно.

Отворените данни в страната на Линукс

от Йордан Радунчев
лиценз CC BY

Тези дни от Държавния архив направиха данните за всички загинали в Балканската война достъпни на специален Интернет сайт: http://archives.bg/balkanwars/. Наистина не по най-удобния за използване и обработка начин, но не им се сърдя - те също се учат в движение, достатъчно е, че са тръгнали в правилната посока. Боян Юруков, който вероятно влага най-много усилия в каузата "Отворени данни" у нас, е изтеглил всичката информация от сайта и след допълнителна обработка, я е публикувал на този адрес: http://opendata.yurukov.net/balkanwars/, като CSV файл с табулация за разделител на полетата. Целта на този текст е да ви покаже как може да използвате основни Линукс инструменти за обработка на подобни данни.

И така, имаме CSV файл. Тоест - обикновен текстов файл съдържащ данни, структурирани по определен начин. Всеки ред от този файл представлява запис за един човек. Всеки запис се състои от няколко полета, разделени с табулация едно от друго. Първият ред-запис във файла представлява всъщност списък с етикетите на отделните полета в реда по който са подредени във всеки ред-запис. Ако сте изтеглили файла с данните от сайта на Боян, можете да го отворите и да погледнете - петото поле на всеки ред-запис съдържа фамилията на човека, за когото е записа. Дванадесетото - датата на смъртта му. И така нататък. Така са организирани данните.

В Линукс, когато стане дума за текстов файл, записи по редове, данни по полета - веднага се сещаме за awk. С негова и на приятелите му помощ, можем да извлечем информация от данните. Приятелите на awk са sort и uniq. И така - може би ви интересува в битките при кои населени места, българската армия е дала най-много жертви? Във файла информацията за мястото на смъртта се съдържа в поле 13 от всеки запис. С awk можем да извадим само него от всички данни. Със sort ще сортираме резултата от работата на awk. Инструмента uniq, извикан по подходящ начин, ще преброи колко пъти се среща всяко име в подредения от sort списък. Резултата от uniq ще дадем отново на sort, като този път го помолим да го сортира в обратен ред - от най-голямата стойност към най-малката. И тъй като ни интересуват само най-големите стойности, ще извикаме head и ще поискаме от него само първите десет стойности от списъка, изготвен от sort. Следите ли мисълта ми? Ето я цялата операция в един команден ред:

awk 'BEGIN{FS="\t"}{print $13}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10 
Красиво :) Резултата от изпълнението изглежда така:
    2659 
    1684 Чаталджа
   1502 Одрин
   1168 Чорлу
   1156 София
   1044 Бунар Хисар
    817 с. Тарфа
    801 Лозенград
    739 с. Калфа кьой
    718 Хисар

За 2659 от загиналите липсва информация къде са загинали. 1156 са починали в София - вероятно става дума за ранени и болни, евакуирани и починали в болници.

Малко по-подробен поглед върху awk частта... Това което е оградено с '' представлява "програмата", която искаме awk да изпълни върху всеки ред от файла, който му даваме. Ето съставните й части и коя какво прави:

  • BEGIN{FS="\t"} - указва на awk, че за разделител между полетата в записа използваме табулация. Налага се, защото по подразбирне awk използва интервал за разделител. BEGIN казва на awk да изпълни инструкциите в следващия блок {} преди да започне да обработва файла.

  • {print $13} - инструктираме awk да отпечата 13 поле от всеки ред-запис във файла zaginali.csv.

Това е почти най-простия начин да се използва awk. Толкова прост, че чак е обиден за него и вероятно тук бихме могли да използваме cut вместо awk.

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

awk 'BEGIN{FS="\t"}{print $7}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10

    14337 
    2985 1906
    2326 1908
    2300 1907
    2297 1905
    1886 1904
    1807 1909
    1640 1911
    1615 1910
    1512 1912

За 14337 души липсва информация от кой набор са. От останалите, за които има такава - най-голям брой жертви е дал набор 1906 - 2985 човека. До тук видяхме, че с прости и достъпни във всяка Линукс дистрибуция инструменти, можем да извличаме информация от данните, задавайки прости въпроси. А ако искаме да зададем по-сложен въпрос, който да ни даде по-специфична информация? Например - кой войнишки набор е дал най-много жертви в боевете при Одрин? На практика комбинираме двата прости въпроса, които използвахме в примерите до сега. Истината е, че в примерите до сега не сме използвали и 5% от мощта на awk. За него подобни задачи са тривиални.

awk 'BEGIN{FS="\t"}$13~/Одрин/{print $7}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10

    476 
     77 1906
     66 1905
     62 1894
     59 1912
     59 1895
     57 1908
     56 1904
     50 1910
     45 1893

Въобще не го затруднихме - поискахме полетата с набора, но само на записите в които полето за място на смъртта съдържа Одрин. И после sort, uniq и head свършиха своята част от задачата. Най-много жертви при Одрин е дал набор 1906... А къде е дал най-много жертви въпросният героичен набор 1906? Да попитаме:

awk 'BEGIN{FS="\t"}$7~/1906/{print $13}' zaginali.csv | sort | uniq -c | sort -nr | head -n 10

    118 
    101 Чаталджа
     91 Чорлу
     78 с. Тарфа
     75 Бунар Хисар
     71 Одрин
     61 Щип
     52 Хисар
     48 с. Криволак
     46 Лозенград

В боевете при Чаталджа...

Тъй като в последните два примера усложнихме въпроса, инструкциите към awk също леко се усложниха.

  • BEGIN{FS="\t"} - това вече го знаем. Уведомяваме awk, че разделителя в нашия файл е табулация.

  • $7~/1906/{print $13} - тук отново искаме от awk да отпечата поле №13, но под условие! Условието е поле №7 да съдържа 1906 - ако там има друга, различна година, не го искаме. За това пред инструкцията за отпечатване на поле №13 сме сложили условието $7~/1906/... Сега awk ще погледне какво има в поле 7 и ако там стои 1906, ще продължи с изпълнението на инструкциите в блока {}, ако няма 1906 - ще мине направо на следващия ред-запис, без да отпечата нищо.

Виждате, че Linux има всичко необходимо, за да отговори на въпросите ви, стига вие да можете да ги формулирате правилно и да му дадете база от данни, от която да извлече отговора. А ако впрегнете и gnuplot - ще се сдобиете и с красиви графики, които да визуализират информацията ви. Но за това друг път.

Офис Фитнес 8

от Йордан Радунчев
лиценз CC BY

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

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

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

При китайската почивка работят квадрицепсите (бедрата) и глутеусите (задника), което прави упражнението много полезно за офисни плъхове, които по цял ден са седнали и не мърдат от стола си. Ако след време станете толкова добри, че 60 секунди в тази поза вече не представляват никакво натоварване за вас, можете да пробвате да вдигнете единия крак от пода и да поседите на другия 30 секунди, после сменяте крака за още 30 секунди.

Планкът натоварва гърба, корема, раменете и още много мускули и мускулни групи. Което го прави едно много добро и полезно упражнение. Световния рекорд по планк е 1 час 20 минути и 5 секунди, поставен е от 54 годишния Джордж Худ. Когато го подобрите, можете да минете на следващото ниво - страничен планк.

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

Прихващане и пренасочване на DNS запитвания

от Йордан Радунчев
лиценз CC BY

Ако не знаете нищо за DNSChanger, можете да се информирате на сайта на ФБР. С две думи: шест лоши момчета от Естония намерили начин да манипулират D(omain)N(ame)S(ystem) настройките на милиони интернет устройства. DNS е Голямата Адресна Книга на Интернет - когато напишете в браузъра си www.google.com, браузърът ви не знае нищо за този сайт, няма никаква идея как да го намери. Браузърът отправя запитване до специален сървър, който "знае" IP адресите на всеки сайт в Интернет, получава от него адреса на www.google.com и отваря връзка с него. Обикновено вашия Интернет доставчик има свои DNS сървъри и техните адреси са част от настройките, които компютъра ви получава автоматично. Лошите естонци са намерили начин да променят тези настройки - да подменят адресите, предоставяни от доставчика ви, с такива, които те контролират. По този начин те контролират вашия достъп до Интернет изцяло и са в състояние да ви "водят" на там, на където те искат. Така са успели да пренасочват трафик от нищо неподозиращи интернет потребители към определени рекламни сайтове и определени продукти - от което и са правили пари.

След като ФБР ги спипали, успели да вземат заповед от съд в САЩ, която задължава Internet System Consortium да "вдигне" чисти DNS сървъри на мястото на "лошите" сървъри. Сървърите на ICS се държат като нормални DNS сървъри и не манипулират достъпа до Интернет, като по този начин дават време на засегнатите да изчистят системите си, без да губят достъпа си до Мрежата. Срокът на тази заповед е до 9 юли 2012. На тази дата ICS ще изключи "заместителите". Ако сте били засегнат от DNSChanger и до този момент все още не сте оправили комютъра си, на 9 юли най-вероятно ще бъдете неприятно изненадани - няма да ви се отварят повечето сайтове... Няма фейсбук, няма твитер... Лоша работа.

Най-добре хвърлете едно око на сайта на DNSChanger Working Group - там има инструкции как да проверите дали сте от засегнатите и как да оправите настройките си ако сте. Това, че не използвате Уиндоус на компютъра си нека не ви успокоява. Компютърът ви най-често получава мрежовите си настройки от рутер/сървър на доставчика ви. DNSChanger може да манипулира тези устройства и да "отрови" информацията, която те предават на компютрите под тях, като по този начин лошите DNS настройки се записват и от машини с Линукс или МакОС.

Ако пък вие самите използвате рутер, за да свържете домашната си мрежа с тази на Интернет доставчик, имате добра възможност да се предпазите от подобни лошотии чрез него. Стига рутерът ви да е с инсталирана една от многото свободно разработвани и свободно достъпни операционни системи за рутер, базирани на Линукс. Като DD-WRT или Tomato - за безбройните Linksys, Buffalo и подобни устройства. Или IPCop, Smoothwall или подобни - които превръщат PC с две мрежови карти в домашен рутер. Всички те изпълянват NAT (network address translation) използвайки iptables. Добавяйки следните две правила в iptables на рутера:

iptables -t nat -A PREROUTING -p udp -i eth1 --dport 53 -j DNAT --to 208.67.222.222
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 53 -j DNAT --to 208.67.222.222

рутерът ще прихваща и "пренасочва" абсолютно всички DNS запитвания от компютрите, които обслужва, към DNS сървър на OpenDNS. По този начин, дори някой от тях да е инфектиран с DNSChanger, заявките му ще бъдат прихващани и пренасочвани към "правилен" сървър.

Специално за DD-WRT можете да използвате тази инструкция.

Разбира се, това решение не отменя и не замества "почистването" на компютъра ви от заразата, ако е инфектиран. Според данните на DCWG към 4 юли все още има 341 IP адреса от България, от които идват заявки към "лошите" DNS сървъри - 341 заразени устройства, едно от тях може да е вашето.

Ако не ви е ясно как да инсталирате и конфигурирате DD-WRT или Tomato на домашния си рутер, и така да си осигурите по-добър контрол над него и по-голяма безопасност - изобщо не се притеснявайте да ме потърсите за съдействие - ще ви помогна срещу минимално възнаграждение :)

Прихващането и пренасочването на DNS заявките от компютрите в домашната (офисната) мрежа, в комбинация с филтрите, които предлага OpenDNS, дава много добра възможност за управляване на достъпа на децата (служителите) в къщи (офиса) до Интернет - предпазването им от сайтове с "неподходящо" съдържание, като същевременно ограниченията не влияят на използването на Интернет от родителското тяло (шефа). Но това е друга тема - ако имате непълнолетни вкъщи (подопечни в офиса) и ви интересува - насреща съм да я обсъдим.

Homo Erectus… отново

от Йордан Радунчев
лиценз CC BY

Някои твърдят, че маймуната се е превърнала в човек, когато се изправила на задните си крайници. Може и така да е, няма как да знаем, никой от съвременниците ни не е присъствал на това събитие. Но днес всички сме свидетели как този изправен човек, този homo erectus, прекарва все по-голяма част от живота си седнал на задните си части. Прогрес. Няма спор.

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

Просто. Но скъпо. Хубаво бюро за работа в изправено положение лесно може да достигне цена от 800 долара. Колкото пернишки Голф на старо. Тук идва момента да проявим онази интелигентност, която ни различава от маймуните. Едно питане за diy standing desk ще накара Google да ви затрупа с връзки към всякакви хитроумни планове за преход от седнало към изправено работно място. Аз избрах Standesk 2200.

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

Бърз преглед в сайта на Икеа показа, че всички необходими компоненти са налични. Дори успях да комбинирам решение за 21.00 лева, вместо за 22.00 долара, колкото им е струвал "оригинала" на момците в САЩ. Какво използвах:

  • Помощна маса Lack, кат. № 20011408 - 1 бр. - 9.99 лв.
  • Конзола Ekby, кат. № 00167472, 2 бр. - 3.00 лв./брой = 6.00 лв.
  • Рафт Ekby Laiva, кат. № 50178703, 1 бр. - 5.00 лв.

Общо: 20.99 лева. Плюс винтове за дърво на стойност 0.50 лева.

Едва ли са ви необходими инструкции за сглобяването - достатъчно е да разгледате снимките на произведението ми. Важно е да поставите клавиатурата на висоичината на лакътните ви стави! И само едно предупреждение - внимавайте когато навивате винтовете, с които прикрепвате конзолите към краката на масичката, които са изработени не от масивно дърво, а от ПДЧ - ако прекалите с навиването има опасност винта да "превърти" и да изпусне. Точно това ми се случи на мен с един винт. Поради което се наложи да приложа свински опашчици, които да стегнат конзолите на мястото им. Не особено естетически издържано, но пък здраво и надеждно :)

И понеже a picture струва повече от thousand words... на вашето внимание - Standesk 2100:

(...и три месеца по-късно: still standing...)

Компонентите

standesk2100 standesk2100

standesk2100 standesk2100

standesk2100 standesk2100

Прочети ми аватара

от Йордан Радунчев
лиценз CC BY

И все пак една солидна част от това което съставлява една съвременна личност е присъствието ѝ в Интернет - нейния живот онлайн в социални мрежи, форуми и прочие. Образа на тази онлайн самоличност, с който тя осъществя първоначален контакт с останалите виртуални самоличности, е малка картинка, често наричана аватар (понятието е в обръщение дълги години преди Холивуд да започне да го експлоатира). Ако в офлайн пространството посрещат по дрехите, в онлайн пространството посрещат по аватара. С него имате шанс да манипулирате първото впечатление за вас у непознатите и да предпоставите тяхното отношение към вас в подходяща за вас емоционална гама. Така че не подценявайте малката картинка. (Въййй... като като един Максим Бехар го докарах!)

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

Инструментите за целта са част от пакета imagemagick. Ако се интересувате от всички детайли и инструменти в него - www.imagemagick.org е добро начало. Тук няма да изпадам в подробности. Командите, които използвам и опциите са скрити в прост скрипт на bash - каква изненада - който взима от вас името на файла с картинката и текста, който искате да изпишете върху нея. Какъв контрол имате върху скрипта? Отваряте го с любимия си редактор (както пишат в посредствените сайтове за Линукс, кхъкхъ), и:

  • -background : тук можете да зададете цвета на фона ЗАД текста. ако искате да е прозрачен - използвайте transparent.

  • -gravity : този параметър определя къде върху картинката да се позиционира текста. Вариантите са northwest, north, northeast, west, center, east, southwest, south, southeast. Мисля, че е очевидно кой къде позиционира текста - горната част на картинката е north, дясната east, долната south, лявата west.

  • -font : Очевидно това е шрифта с който ще се изпише текста. Зависи от това какви шрифтове имате на системата си.

  • -fill : Цвета на текста.

  • -pointsize : Размера на шрифта, с който ще се изпише текста.

Променяйки тези параметри, можете да постигнете различни комбинации на текст и картинка. "Прочети ми аватара!" е онлайн еквивалента на култовата реплика "Read my lips!", не се притеснявайте да импровизирате и да сменяте често statement-а върху аватара си. С този прост скрипт това не е трудно. А можете и да го използвате в по-сложни сетъпи, които примерно на определен период от време автоматично четат statements от предварително подготвен файл, изписват ги върху аватар и ъпдейтват с него вашия профил в съответната социална мрежа, използвайки API функциите й. Пример за аватар "избродиран" с този скрипт e моя twitter: @yradunchev

Приятна игра!

#!/bin/bash

[[ "$#" -eq 2 ]] || { echo "Usage: ${0} pict.ure \"caption text\"" >&2; exit 1; }

convert \
-size $(identify -format %w ${1})x40 \
-background transparent \
-gravity center \
-font Helvetica-Bold \
-fill yellow \
-pointsize 40 \
caption:"${2}" ${1} \
+swap \
-gravity south \
-composite ${1%.*}_${2}.png