неделя, 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 години българчето от циганите, съдейки по начина, по който се държи (а не по цвят на кожата, например). Ако не може да бъде различено, тогава всеки, който има нещо против циганите по принцип, би трябвало да има и също толкова против това българче. От друга страна, циганчето, което е живяло в българско семейство, има по-големи шансове да завърши училище, евентуално университет, да си намери по-добре платена работа, да живее по-добре с две думи. Разбира се, то най-вероятно ще има проблеми заради цвета на кожата си, но това донякъде може да бъде преодоляно с грим (все пак жените го правят постоянно ;-)).

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

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

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

четвъртък, 19 февруари 2009 г.

Искрен on Rails

Тук ще напиша набързо решенията на проблемите, който възникнаха при първия ми по-сериозен сблъсък с web-framework-а Rails (предназначен за езика Ruby).

1. Инсталиране (тук ще карам малко по спомен)
# сдобивате се някак си със rubygems - това е пакетния мениджър на Руби (за линукс потребителите - потърсете за подходящ пакет за любимата ви дистрибуция)
gem update --system # ъпдейтвате rubygems най-вече
gem install rails --version 2.2.2 # инсталирате рейлс
gem install postgresql-pr # инсталирате адаптера за работа с postgres (ако разбира се искате да ползвате postgres - по дефоулт 2.2.2 идва със sqlite3)
gem install rspec-rails # инсталира rspec - най-новия писък на модата, тъй нареченото BDD - Behaviour Driven Development

2. Предварителни настройване на проекта
rails my_app # създава папка my_app със скелета на цял рейлс проект
# от сега нататък приемам че се намираме в папката my_app, създадена по-горе
haml --rails . # добавя haml към проекта (това е удобен темплейтен език, изглежда по-добре от дефоултния erb)
ruby script/plugin install git://github.com/technoweenie/restful-authentication.git # инсталирате си restful authentication
mv vendor/plugins/restful-authentication vendor/plugins/restful_authentication # !!много важно - променяте името на плъгина (махате му тирето) - без този ред не работи като хората
ruby script/generate authenticated user sessions --rspec # база на аутентикацията (т.е user-и и сесии)

четвъртък, 1 януари 2009 г.

свободна музика?

Отдавна не бях блогвал, но стечението на обстоятелствата (което ще опиша след малко) беше предпоставка за това да прегледам блога на Яна и да видя ... линка към моя блог, което пък ми напомни че и аз имам 'таковъ животну' ... както и да е :)
Значи напоследък забелязах че apache-то ми се държи странно (apache е web сървър - демек нещото което като човека X напише в любимия си браузър "http://iskren.info" показва грозна зелена страница). И тъкмо ме бяха обхванали мрачни мисли свързание с форматране, преинсталиране, рестартиране (последното имаше донякъде положителен ефект) когато ми дойде гениална мисъл ... да му погледна log-а. Дам ... като се сетих (толкова късно) направо ми стана гадно, че се познавам.
Та - гледам аз лога на апачето и какво да видя - постоянни request-и от всички краища на планетата, хвърчат към моето apache-нце и то неуморимо ги удовлетворява. И понеже първото на което ми попадна погледа беше достъп на файл в една от директориите на Пешо веднага си казах - той се е разчел нещо. Но уви - след като му писах веднагически, отговори че не той е ровещият се в сървъра. След кратка мисловна пауза и по-подробно разглеждане на лога останових ... че някакви сайтчета индексират моя, за да може да пускат "безплатна музика" на хората, които ги посещават (например http://grooveshark.com).
Следващото нещо което направих, беше да потърся iskren.info в google. След самата страница и мой цитат в блога на Яна, изплуваха и мистериозните сайтове предлагащи безплатна музика, който просто сочеха към сървъра ми. След като се загледах по-подробно в единия от сайтовете, реших да прочета "Terms & conditions" - е да, хората повториха 101 пъти, че музиката не е на техния сървър и те не носят никаква отговорност за нея, нямат никаква връзка с хората, на чиито сървъри е музиката ... итн, итн.
От една страна ОК - имам музика, сложил съм я (вече) за свободно сваляне от http-то, за да мога по-лесно да пусна на някой приятел някоя песничка, която ме е накефила. Обаче това диво адресиране от всевъзможни сайтове, тази популяризация ... няма ли да почукат на вратата след някой друг ден 2-3 гардероба и да поискат нечии хард?
Майната му! Като съм решил да имам общодостъпна музика на компютъра - така ще бъде! Защо трябва само да се крием и да слагаме пароли на всичко? В крайна сметка това е един от плюсовете на това, че не живеем в Америка - страната на неограничените възможности ... на държавата спрямо гражданите й.
За много години на всички (ако някой въобще чете това), и да бъде свободата :)