четвъртък, 6 октомври 2011 г.

Multi-user

Знам аз от доста време, че Unix-ите попринцип имат като предимство т'ва, че са multi-user операционни системи. Честно казано т'ва ми звучеше като много яко предимство... ако мислим за седемдесетте години на 20-ти век. В крайна сметка всяка сериозна операционна истема в последните 10-15 години под една или друга форма е ориентирана към многопотребителност(ако тая дума я няма в българския речник, вече й е време!).
В последно време много ми се иска да мога да посвършвам няк'ва работа от лаптопа ми на произволни места, позлвайки компютъра ми в офиса. Последната седмица най-много ме тресеше тая треска, щото с почването на учебната година, времето което мога да прекарвам на работното ми място намаля драстично, цифром и словом баш 2(два) пъти.
До сега използвах грозни трикове, които чат-пат сработваха. Тук тунелче, там тунелче, ssh -X, викам си стига ми да мога да си attach-на сесията на tmux-а и да пусна един браузър от там с forward-натия X. Фактите обаче показаха, че т'ва макар и да работи не е супер удобно. Все още съм далеч от възможността да отговарям на "ш'ти го пратя по Skype" с "Е мързи ме с'я да пускам X..."(реален разговор, който скоро ми цитираха). Т'ва иде да рече, че колкото и комфортно да се чувствам на върха на един bash->tmux->vim workstack, винаги мога да стана поне малко по-ефективен ако разполагам с някоя и друга глезотийка на графичната среда, която особено ако биде често необходима благинка, направо се превръща в необходимост.
Днес съдбата ми се усмихна и открих прекрасно решение на проблема си. Както обикновено се случва що се отнася до всичко it-ориентирано това което човек си мисли за свое велико откритие, обикновнео е измислено създаддено че даже и добре документирано от някой друг, преди 10*n години.
Днешният ми малък "EUREKA!" момент, беше свързан с xinit. Опцията да си пусне човек втори Xserver локално е едно безумно удобство, което усещам, че в близко бъдеще ш'а почна да възприемам като сериозна необходимост.
Чак се вдъхнових да опиша как съм го постигнал, та току-виж помогнало някому някога
Цялата магия е нежно събрана в тоя тънък ред:
#> xinit -- :1 vtn

Като резултат на терминал n(до който можете да стигнете с Ctrl+Alt+Fn) се пуска нов Xserver, съвсем гол само с един терминал в него, ник'ви десктоп среди, ник'ви window manager-и.
Ето кратко описание на простичкия ми use-case в случая:
Имам си локален gnome, който върви на терминал 8(сигурно съм трепал gdm-то по някое време, че да не е на седем, а на осем). Отивам на tty1(едва ли има смисъл, но дa отбележа, че нема значение кой точно tty ш'си харесате) и от там с
#>xinit -- :1 vt7
пускам един Xserver на седми терминал, в който съответно върви един графичен терминал. В тоя графичен терминал съм логнат като root, така че от там, предвид че искам да се вържа към машината на хост baba.baba.baba.baba като dqdo всичко нужно е
sudo -u erkunev ssh -X dqdo@baba.baba.baba.baba
(sudo -u erkunev го слагам там, само от параноя, не съм убеден в необходимостта и полезността му). След успешния логин в отдалечената машина всичко необходимо е
gnome-session
или която десктоп среда ви е най на сърце :)
Излишно е да отбелязвам, че добрата връзка между двете машини е важен момент, особено ако искате някоя по-тлъста десктоп среда.

Надявам се това невероятно откритие на топлата вода поне на един човек да е било полезно и поне на още няколко - интересно/забавно.

неделя, 17 юли 2011 г.

Homemade crash course

През изминалата седмица бях на интервю за работа. Първото ми такова за работа, с която раелно искам да се занимавам, а не просто нещо за изкарване на пари или запълване на ваканции с нещо по-полезно от редица безполезни неща.
По тоя повод ми се наложи да направя нещо, което не си бях представял, че ще ми се случи. Както обикновено става в IT сферата интервюто си имаше леко препитване на място и 'домашно'. Въпросното домашно не беше върху кой знае колко инетресен проблем(ако някой има интерес може да разгледа какво сътворих в крайна сметка тук). Това което едновременно ме наплаши и ентусиазира беше изискването да пиша на Perl.
Обичам да се смятам за човек, сериозно взискателен що се отнася до собствените ми постижения. В съответствие с т'ва доста бих държал показвайки код на човек, който не ме познава по никакъв начин, да иде реч за красив и добре написан, обмислен код. С малко повече старание това може да постигне всеки, когато му се даде да ползва познат език. Аз обаче през живота си не бях писал и ред Perl до тая седмица. Преди около месец нещо авантюристично в мен пожела да подхвана някоя книжка за тоя език. Опитът ми да се пообуча удари на няколко камъка.
* Първият от тях беше огромната ми грешка да започна да чета "Minimal Perl"... Ако някога се замислите дали да не пробвате тая книга, ударете се през ръцете три пъти, а ако даже имате хартиено копие изгорете го. Имам един познат, който е горд с факта, че може да пише на C на всеки възможен език за програмиране. Даже разполагаше с онагледяващ тоя факт код писан на Prolog, което беше впечатляващо. Това, което се опита да ме научи тая книга беше това. Как да пишеш на Perl както пишеш на C, как да пишеш на Perl както пишеш на bash, как да пишеш на Perl както пишеш на <insert random somewhat popular programming language name here>. А пък е хубаво човек като се учи да пише на езика X, не просто да пише неща, които да минават през интерпретарора/компилатора на дадения език, а да следва някакви норми, идеи и специфични конструкции/похвати характерни за тоя език.
* Perl е разнообразен. Имам предвид УЖАСНО разнообразен. Има много начини да се направи едно и също нещо. От болезнено вербозни и досадно подробни до криптични и напомнящи древни религиозни писания използвани за призоваване на разни тъмни сили. Това може да създаде страшно много главоболия на човек, който е прохождащ в него. Според мен най-ефективният начин за учене на език(ако не разполагаш с опитен човек, който да те въведе и разходи из тоя език) е след малко теория и описания на някакви основни конструкции и идиоми характерни за езика, човек да почне да гледа много примери и по еволуционно доказания метод на мимикрията и копирачеството да навлезе в нещата. Когато синтактивно(и не само) имаш 78 различни начина да итерираш през елементите на един hash това затруднява малко частта с гледането на примерен код.
* Езикът не изглежда никак привлекателен на пръв поглед. Каквото и да си говорим $, @, %, # не са сред символите, които ми доставят естетическо удоволствие.
Поставен обаче пред задачата правя-струвам за една седмица да има какво да покажа си седнах на глутеус максимуса и се хванах да чета. Това беше отправната ми точка. Самия туториал е написан с идеята да се чете включително и от хора с приблизително нулево разбиране от програмиране, вътре има обяснения на това какво е функция, какво е ркурсия, какво е ООП и прочее. Това до някаква степен е удобно, защото вижайки идеята на автора за някаква концепция(дори и такава, която ми е напълно ясна) мога по-лесно да вникна в обяснението му на имплементацията на тая концепция в езика. Много диагонално минах и през Programming Perl на O'Reilly, която смятам да прочета по-внимателно в близко бъдеще.
Изживях огромен стрес при сблъскването с реализацията нa ООП в Perl. Честно казано все още не съм сигурен, че разбирам какво се случва, още по-малко защо се случва и как аджеба работи цялото нещо. Успях да посвикна с идеята за модули и референции, които получават някакви благословии свише... Въпреки че и в момента се усмихвам при идеята, че vim оцветява думата bless като запазена.
Оказва се, че много относително очевидни неща не са толкова добре обяснени и подчертани, колкото би ми се искало. Досаден и бих казал срамен за мен самия факт е че ми отне около едно денонощие докато разбера, че ключовете в един hash могат да бъдат само стрингове и Perl интерпретатора прави необходимите преобразования вместо мен, тихичко и послушно без изобщода ми казва.
В крайна сметка научих нещо интересно: Кратките срокове за привидно сложни неща(учене на език, с който сте тотално незапознати) действат благотворно върху мобилизацията и способността за учене. Предполагам все пак трябва да бъдат практикувани в някакви резумни граници, отвъд които човек би започнал да си причинява стрес. :)

събота, 9 юли 2011 г.

CodeRetreat @ initLab

В кратце казано ш'а опомена, че т'ва беше доста забавно, а смятам и полезно.


По-пространно казано днес бях на CodeRetreat в initLab. Идеята беше простичка, по двойки на итерации(врътки/сесии/пасове) от по 45 минути се разцъкваше писане на Game Of Life, като основната цел беше не завървен проект, а активно ползване на TDD.


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


Като цяло обаче и в петте врътки, в които участвах ми беше забавно и интересно. Понаучих това онова, видях и чух разни интересни идеи както за Game Of Life така и относно TDD. Като цяло се отърках в едно значително по-високо ниво developer-и и колкото и да не съм бил очарователен в представянето си се радвам на така стеклите се обстоятелства.


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


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

сряда, 29 юни 2011 г.

"Free" as in "For all"


Може и да изглежда смешно да пиша няк'ви дълбоки мисли за отворения софтуер. Фен съм му, разбира се, при това голям, но опитът ми е доста оскъден, предимно потребителски. След края на сесията мисля да впрегна чичо гугъл в търсене на нещо, към което да мога да допринасям, всяка идея съм готов да посрещна радушно и да обмисля обстойно. :)
Идеята ми е да си кажа защо ми е на сърце отвореното кодене. Един голям довод на хората, които не го харесват е че зад колективната отговорност се крие колективна безотговорност. Това е така в огромна част от случаите, но тук е някак си неприложима максима. Колективната отговорност е параван зад който да се скрият хора принудени да носят някаква отговорнст за нещо. Дали причината ш'а е, че така могат да изкарат някой лев или поради някакъв друг вид задължение, често пъти зад обществата от неперсонифицирани отговорни лица всъщност седят предимно незаинтересовани и безотговорни люде.
При отворения софтуер е точно обратното обаче. И в това няма магия, даже е излючително логично и естествено. Всеки впрегнал се в редиците на някой opensource проект гое направил, не за да изкарва пари или да покрие някоя своя отговорност към някого. Всеки ангажиран в подобно начинание го прави не по задължение, а заради някакво вътрешно желание. Никой не прави любимите си неща през пръсти, това с пълна сила важи за програмистите. Отвореният код в тоя (леко разпилян) ред на мисли е една изключително сериозна гаранция за качество.
Съвремието ни предлага хубави примери. В последно време се захванах по-активно да чета обяви за работа, че ме хвана срам на моите години в трудовата ми книжка да няма нищо смислено. Открих, че има сериозно търсене ан хора запознати с Linux. И не иде реч за администратори, хора които да поддържат сървъри и прочее типично Linux-ски поприща от край време. Немалко фирми търсят хора, които са готови да вършат ежедневната си работа използвайки Linux на десктоп машината си. Т.е. IT фирмите в България започват да тръгват по тоя път, макар и бавно и страхливо. Друг факт е, че повечето от най-популярните смартфони в момента използват една отворена платформа надстроена върху линукс ядро. Все по-сериозно на мобилния пазар се ползват open source операционни системи.
'Сичко добре, но съм убеден, че много малко хора биха били съгласни да вярват на добрите намерения на някого, защото да приемете, че отворения код гарантира качество заради ентусиазма и добронамереността на творящите го си е точно това. Обаче тук идва и моментът, че освен желанието и честолюбието, което подтиква всеки занимаващ се с отворен код да пише не просто работещи неща, а добре работещи неща, го има и елемнтът на показност.
Ако пишете нещо, което ще бъде компилирано, обфускирано, криптирано и намазано с майонеза за цвят, вианги можете да си позволите тук-там да кръшнете от правия път. Стига да работи, какво като е грозно... Факт е, че повечето програмисти не гледат с добро око на клиентите и при всяка удобна възможност биха свършили работата си по мързеливия, грозен начин... ама колкото да работи. Никой няма да види кода в крайна сметка, само те ще си го знаят.
Open source ентусиастите нямат това 'удобство'. Те пишат за удоволствие, за да научат нещо ново, за да са полезни. Но всичко, което напишат може да бъде видяно, анализирано и оценено от всеки. Докато затвореният код създава монолитни изпълними последователности от байтове, то отвореният се възприема много повече като учебен материял, като показно, ако щете като фуклявщина на написалия го, че даже защо не и като вид изкуство. По общо разбиране програмирането е индустрия, обикновено виждано като по-близко до начина на работа на поточната линия. Хората занимаващи се с отворен код обаче(може би понякога на ръба на менталното здраве :D) виждат работата си от части и като изкуство. И както никой уважаващ себе си художник не би изложил в галерия своя картина, ако я смята за грозна или безидейна, така и никой уважаващ себе си програмист не би показал пред света свой код, ако не е сигурен, че той е добър. И в двете опоменати преди малко поприща разбира се 'добър' е много сложно за дефиниране понятие, но това не умаловажава факта, че когато показваш на света цялата си работа, а не само някои странични ефекти от нея това те кара да се впрегнеш повече в нея.
Човек може да научи много от open source обществото и като философия и в чисто буквалния смисъл като общодостъпна информация и огромен запас от показни на всякакви тематики. Приложения с отворен код има в абсолютно всяка сфера, в която има и затворени такива, готови не само за изпозване, но и за изучаване, разширяване и подобряване.

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

Now what... (опит за пролог... в литературния смисъл на думата!)

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

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