неделя, 11 декември 2011 г.

Code retreat #3

На 3ти декември се проведе Code Retreat #3.

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

Ще опиша накратко какво научих от срещата:
  • Тестването е хубаво нещо. Ако имате възможност - правете го. Не че не го знаех това и преди, но сега е по-затвърдено :)
  • Тестовете са идеалния начин да се рефакторира кода. Причината е, че при наличие на тестове сме малко по-спокойни и сме готови да направим по-големи промени на кода.
  • Писането на fake-ове, с други думи код, който не е верен в общия случай, но прави така, че тестовете да минават, е установена практика. До колко съм съгласен с нея още не знам :)
  • TDD не е сребърен куршум. Според мен трябва да се използва с мярка. Понякога влагането на малко повече време в началото за взимане на важни дизайнерски решения ще се отплати многократно по-късно. Това, че TDD се фокусира върху конкретното следващото нещо, което трябва да се имплементира, и това по някакъв начин ни успокоява, защото имаме да мислим за малко неща е хубаво, но според мен е твърде силно опростяване.
  • Тестовете са хубав начин за комуникация. Може би много по-добър от вербалната комуникация, защото 1) стоят в репозиторито и 2) могат да бъдат изпълнени. Ако има възможност да се генерира документация и примери от тестове аз съм "за" с 2 ръце. Също - ако може да се намали изпращането на мейли, чатове и вербална комуникация между членовете на един екип за сметка на повече и по ясни тестове, "за" съм с 3 ръце :)
В заключение, TDD е малко или много свързано с писане на тестове. Ако имате удобен начин да пишете тестове не ви коства много да пробвате TDD. Проблема в момента е, че практиката да се пишат тестове не е добре улегнала в повечето проекти, и ако решите да пишете patch за проект, който не ползва тестове, шансовете са че и вие няма да напишете тест, защото първоначалното усилие по изграждането на условия за тестване не е малко. От друга страна ако проекта ползва тестове, то направо е престъпление да го допълвате, без да пишете тестове към него, даже в някои случаи няма да ви позволят.

Така че, ако имате възможност да пишете тестове -- пробвайте TDD. Ако не, поне се старайте новите проекти в които участвате да имат изградена система за тестване, и ползвайте TDD в тях :) Ако TDD не ви харесва, нека това не подбива мнението ви за тестването по принцип.

сряда, 30 ноември 2011 г.

Няколко проблема

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

Мотивация

Нещо ме човърка от вътре. Наблюдавам света около мен и виждам много проблеми и малко решения. Виждам как решенията създават по-големи проблеми, от тези които решават. С други думи -- виждам, че състоянието ни се влошава вместо да се подобрява. Ще отбележа, че въобще не говоря за България конкретно -- проблемЪТ е глобален.

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

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

В този пост ще изложа съвсем на кратко една част от по-важните според мен проблеми. Това няма за цел да те стресира или натъжи, а по-скоро да те информира.

Икономика

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

Crash Course Клипчета от 5 до 16 разглеждат икономическите проблеми, главно в Америка.

The American Dream by the Provocateur Network Забавно клипче на тема федерален резерв, банки, заеми дълг.

Енергетика

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

300 years of fossil fuels in 300 seconds Кратка история на изкопаемите горива.

Wikipedia - Peak Oil Проверете фактите директно от уикипедиа (и прикачената информация). Peak Oil може и да е трик на производителите да вдигнат цената, но това, че петрола е крайно количество не е.

Reinventing the Leaf Кратка лекция за един научен проект, целящ да добива въглерод директно от светлина. Интересен е увода, в който професора изтъква, че слънчевата енергия е най-перспективна в дългосрочен план, и единственото друго решение е да строим по една атомна централа всеки ден в продължени на 40 години :)

Околна среда

Jeremy Rifkin - the crisis that we face Ако смятате, че глобалното затопляне ще направи зимните спортове по-трудно достъпни, а летните по-приятни, гледайте това видео!

Wikipedia - Global Warming "Глобално затопляне" -- това се превърна от проблем, нуждаещ се от решение в buzzword. Смятам, че всеки трябва да си набави качествена информация по темата (примерно укипедиа) и да реши сам за себе си сериозността му.

Очаквайте още по темата.

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

CoffeeScript + Node.js

CoffeeScript е език, компилиращ се до JavaScript, със семантична идентация, вдъхновен от Ruby.

Ако планирате да пишете на Node.js, инсталацията е доста лесна

node.js

$ git clone https://github.com/joyent/node
$ cd node
$ ./configure --prefix=~/opt/node && make && make install
$ echo 'export PATH="$PATH:$HOME/opt/node/bin"' >> ~/.bash_profile
$ export PATH="$PATH:$HOME/opt/node/bin"

npm

$ curl http://npmjs.org/install.sh | sh

coffee-script

$ npm install -g coffee-script
Ако всичкия server-side код е на coffee-script директно полвайте coffee за да го изпълните (вместо node). Ако искате от javascript файл да require-нете coffee-script файл (без да го компилирате), тогава
require('coffee-script');
require('./script'); // assuming you have ./script.coffee
За любителите на vim има и плъгин.

Селектиране на текст с vim

Във vi / vim / gvim последната селекция може да бъде селектирана отново с комбинацията gv (normal mode).

При желание може да се автоматизира селектирането след операция за идентация
vnoremap <tab>   <gv " tab indents
vnoremap <s-
tab> >gv " shift-tab unindents

Също може да се скача в началото/края на последната селекция
`< `> - в абсолютното началото/край на селекцията
'< '> - на първия символ на първия/последния ред на селекцията

сряда, 5 октомври 2011 г.

не бъди расист

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

Действията на хората не зависят от етноса им, а от средата, в която живеят. Ще дам нагледен пример. Вземи едно новородено българче и едно новородено циганче и им размени семействата. Т.е. циганчето започва да живее в българско семейство, родители българи, евентуално братя/сестри българи, съседи българи (представете си средно-статистическо българско семейство), а българчето отива да живее в циганското семейство – може би десетина братя/сестри, в една къща, не достатъчно пари за изхранване на всички, вероятно в краен квартал, съседи – други цигански семейства (средно-статистическо циганско семейство).

Сега въпросът е: ще може ли да различите след 15 години българчето от циганите, съдейки по начина, по който се държи (а не по цвят на кожата, например). Ако не може да бъде различено, тогава всеки, който има нещо против циганите по принцип, би трябвало да има и също толкова против това българче. От друга страна, циганчето, което е живяло в българско семейство, има по-големи шансове да завърши училище, евентуално университет, да си намери по-добре платена работа, да живее по-добре с две думи. Разбира се, то най-вероятно ще има проблеми заради цвета на кожата си, но това донякъде може да бъде преодоляно с грим (все пак жените го правят постоянно ;-)).

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

Докато всички не се наречем Българи (а следващата логична стъпка е Хора) и не се изправяме пред проблемите, които имаме, без да взимаме под внимание незначителни фактори от историята – кой къде и от кого е роден, родителите му къде и от кого са родени, техните родители и т.н. – няма да постигнем значителен напредък.

Относно медийното покритие на събитията около Кирил Рашков — самият факт, че те бяха толкова добре отразени, не за нещо друго, а защото престъплението е междуетническо (в смисъл, циганин посяга на българин) е плашещ. Просто расизмът се харчи доста добре в България, не се поддавайте! Всеки, който е извършил престъпление трябва да си получи заслуженото, независимо от това от каква народност е, и от каква народност е потърпевшият.