Brainfuck

Last night I spent some time with the guys from West London Hack Night and I enjoyed it a lot. That night’s topic of choice was “Brainfuck interpreter“. Unfortunately there wasn’t a PHP team so I had to be a part of the JavaScript team and … we failed to deliver. But to be honest the main reason was that we spent much time trying to understand how Brainfuck works.

Well … after a couple of hours today I created a working interpreter but with PHP. It will be an easy job to do it as JavaScript but I see no reason for that – there are plenty of JavaScript implementations out there (and PHP, and any other language).

Anyway, if you have some questions or even better – suggestions how to make it better, please put a comment or just clone the repo and push, push, push 🙂

Picture: http://www.hevanet.com/cristofd/brainfuck/

Premium real estate HTML template

After more than 4 months of late night hours I’m really pleased to see my (and my partner’s) work finally on Themeforest.

We’ve been working really hard to create this premium real estate HTML template and we are focusing on moving to the next phase now – fully functional, cutting edge and out of the box properties/estates manager in a form of a WordPress theme. We know that there are some really good competitors but we will try “to make waves” 🙂

We call it Estetico!

Check out the screenshots gallery!

02_screen1-jpg

Picture 1 of 5

We will not let it just be. In the next few weeks we will add some cool new features to HTML template … let’s say it will be version 1.1.

Cheers!

Apache не тръгва на Windows 7

Нещо ме обвзе безсъние и реших да пусна XAMPP на служебния си лаптоп и да разцъкам няколко неща на PHP, които отдавна отлагам. Би трябвало да е много проста задача – свалям XAMPP, натискам Next, пускам контролния панел и пускам Apache и MySQL. Почти! Нещо беше заело порт 80. Често срещан проблем и в повечето ситуации това е Skype. За първи път обаче се оказа, че не е от него. Хммм …

netstat -ano

Ахаа … PID 4 … Я да видим какво ще стане ако го прекратя този процес … Лоша идея (не го правете, освен ако не обичате Blue Screen of Death)

Следващата логична стъпка в решаването на проблема беше да “Google-на” проблема. Потенциалните решения на проблема се оказаха доста: Windows Remote Management, SQL Server, Web Deployment Agent Service. За съжаление спирането на тези услуги (services) не постигна желания от мен резултат, а именно освобождаването на порт 80.

За късмет намерих каквото ми трябваше в този сайт: http://superuser.com/a/443523/205528
Следната команда показва списък с услугите/приложенията, които използват и/или зависят от HTTP протокола.

net stop HTTP

Алелуя! Много полезно! Кой би предположил, че Print Spooler?! ще заеме порт 80, но се оказа че го прави.

10 причини, поради които предпочитам Google Chrome пред Firefox

Работата ми като уеб разработчик е свързана с постоянна смяна на browser-и. Всеки сайт, всеки компонент, всяка промяна, трябва да се тества на няколко browser-а и няколко устройства. Винаги обаче се започва с конкретен browser, който дава най-голяма увереност на разработчика, че ще се справи бързо с основния проблем, а тестовете на останалите ще са само за леко пипване (пхах …). Повечето колеги работят или с Firefox или с Google Chrome. Аз съм работил много и с Firefox, и с Chrome през различни периоди, но през последните две години отрочето на Google ми е неизменна част от ежедневната работа, а и забавление. Няколкото причини, поради които го предпочитам пред Firefox са:

1. Показва процентите при ъплоуд на файлове.

chrome_upload_percents

Много полезно свойство. Дребно е, но разбираш колко процента от файлове са качени.

2. Не блокира останалите табове при HTTP authentication.

firefox_stop_http_auth

 

Ако Firefox бъде рестартиран поради някаква причина и след това се отвори отново и се заредят всички последно отворени табове, ако в някой от тях случайно има нужда от HTTP authentication, Firefox не дава възможност да избереш някой от другите активни табове. Какво става ако паролата за този сайт е записана на пощата, която е на друг таб? Трябва да прекратя текущата authentication сесия, да намеря паролата и едва тогава да се върна и презаредя страницата. Chrome дава свободно възможност да се ровичка в други табове през това време.

3. Не изисква рестартиране след инсталация на плъгин.

firefox_addon_restart

 

Не го разбирам това. 18 версии по-късно, Firefox все още изисква целия browser да се рестартира при инсталация на Add-on. Защо? Може би има някакво логично обяснение, но след като Chrome няма нужда от рестарт, значи не е невъзможно да се направи.

4. Chrome има интегрирани development инструменти.

chrome_dev_tools

Още една от големите мистерии на Firefox за мен. Firebug е уникално приложение. То беше и основната причина Firefox да дръпне толкова много – всички уеб разработчици го използваха, оптимизираха сайтовете първо за Firefox, а след това за останалите и респективно повече хора започнаха да използват Firefox, защото сайтовете изглеждат най-добре там. И въпреки това, Firebug си остана външно приложение, което се инсталира допълнително. Safari, Chrome, Opera, дори Internet Explorer предлгат инструменти за разработване по подразбиране.

5. Не ми се губят addon-и след неочакван рестарт.

firefox_addons

Може само на мен да се случва това, но няколко пъти след неочакван рестарт на Firefox (спиране на ток) след пускането му отново част от plugin-ите ми да ги няма. Най-вече Firebug.

6. Инкогнито в нов прозорец.

chrome_private_browsing

Любимата функция на всички порноманиаци – инкогнито. Каквото се случва в private browsing mode, остава в private browsing mode. Много удобно е да се отваря в изцяло нов прозорец, за да не пречи на нормалните действия през това време. Отваряш, свърваш (ъхъм…) си работата и го затваряш. Firefox продължават да имат проблем в това отношение, тъй като при тях текущата сесия се записва и се затваря, за да се отвори само private browsing-а. Много често обаче аз направо “бия хикса” и това, че предната сесия ми е била записана, вече няма значение – няма я.

7. Превеждане на чуждоезикови страници.

chrome_translate

 

Въпреки че повечето сайтове, които ползвам са на български или английски, понякога се налага да използвам и сайтове, които са на език, който не разбирам. Понякога тези сайтове имат превод и на английски, но понякога нямат (вътрешно фирмена система за поръчка на билети за германски събития). Тогава много удобно, само с две натискания на мишката, мога да разбера какво се крие зад думите “Auch in diesem Jarr …”.

8. Синхронизация между устройства.

chrome_other_devices

Firefox няма как да предложат алтернатива на това, тъй като това е строго специфично за Chrome и най-вече Google. С навлизането на Android и наличието на Chrome на все повече платформи, логично беше да има и възможност за синхронизация на историята, bookmarks и текущите отворени сесии.

9. Голямо поле за изписване на адрес + auto suggestions.

chrome_auto_suggestion

 

Интерфейсът на Chrome е по-удобен за мен. Има огромен address bar, където бутоните и останалите интерфейсни компоненти са редуцирани до минимум. Много интелигентно са внедрили възможност за търсене директно в полето за писане на адреси, като така премахват нуждата от допълнително поле, както е във Firefox (мисля, че auto suggestion-а беше въпрос на избор от настройките на Firefox).

10. По-бързо движение със стандартите.

chrome_about

Преди да се появи Chrome на хоризонта и да въведе шест седмичните цикли на пускане на нова версия, Firefox и Internet Explorer правеха големи обновления “once in a blue moon”. Това бавеше внедряването и използването на новите уеб стандарти.

Въпреки тези си недостатъци, Firefox си остава страхотен browser. Той има няколко неща, които Chrome има какво да наваксва – smooth scrolling, smooth fonts, dom tab, Chrome не се справя много плавно с движещите се елементи.

Дали ще е Chrome или Firefox, Coca-Cola или Pepsi, Android или iOS, Левски или ЦСКА, всеки човека има своите предпочитания и в края на деня, важното е да му е удобно и приятно с избора, който е направил.

Инсталация на Broadcom Wi-Fi карта на Ubuntu

След като преди няколко седмици занесох лаптопа си на ремонт реших, че ще е хубаво и да направя едно прочистване на диска и започна всичко на чисто. Инсталирах си любимия Windows 7 и Ubuntu. Разбира се, Ubuntu не хареса wireless картата ми … тогава си спомних какви мъки бяха предния път (преди години), за да успея да подкарам този модул. След няколко опита да го подкарам се отказах.

Днес обаче реших да правя няколко теста на Ubuntu-тото си и искам – не искам, трябваше да подкарам картата. Иначе трябваше да си купя 100 метра кабел 🙂

Предполагам, че за linux гурутата следните стъпки ще се сторят смешни, а може би и излишни, но аз никога не съм се смятал за такъв и затова ще (си) напиша едно ръководство, за да може следващия път като ми се наложи, да има откъде да прочета.

  1. Отваряте помощната страница от сайта на Ubuntu относно Broadcom драйверите https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx
  2. Проверявате кой модул ви трябва съобразно ID-то на чипа. В моя случай това е wl http://www.broadcom.com/support/802.11/linux_sta.php
  3. Сваляте source кода съобразно версията на Ubuntu, която имате.
  4. Отваряте README файла и спазвате инструкциите http://www.broadcom.com/docs/linux_sta/README.txt
  5. За съжаление по време на компилирането при мен излезе следната грешка “”. Едно бързо търсене в Google ме отведе на следния сайт: http://www.mindwerks.net/2012/06/wireless-bcm4312-with-the-3-4-and-3-5-kernel/
  6. Пичът е написал много точно какво трябва да се направи, за да се заобиколи тази грешка, но аз ще го копирам тук също така. Такъв ценен ресурс не бива да се губи.
  7. Сваляте patch файловете.
  8. Изпълнявате следните команди:
    patch -p0 src/wl/sys/wl_linux.c < ~/Downloads/switch_to.patch;
    patch -p0 src/wl/sys/wl_linux.c < ~/Downloads/bc_wl_abiupdate.patch;
  9. След това довършвате инсталацията на картата с:
    make; sudo make install; sudo depmod; sudo modprobe wl

Дайте малко време на Ubuntu да се освести от “шока” и би трябвало да се виждат наличните wireless мрежи.

Ако някой от горните линкове не работи или не е актуален, може да свалите копие на нужните файлове от моя блог. Архивът включва source кода за 32/64 битови версии, README файла, а също и двата patch файла.

P.S. Бележка до мене си: Благодаря ти, Маруш от 12 януари 2013 година, че не те е домързяло, за да напишеш това ръководство.

За какво се пее в рок и чалга песните

Споминих си един разговор с приятелка от преди няколко години. С нея не се бяхме виждали от много време и обсъждахме всякакви теми, за да наваксаме пропуснатото. Една от темите беше каква музика слушаме и се оказа, че тя слуша чалга, а аз слушам рок (не станах от масата веднага :)). Тогава тя ме попита: За какво се пее в рок музиката? Веднага в съзнанието ми изникнаха разни дракони и кръв, но реших да мина по-простичко и казах “За любов“. Тя каза: “Ами то и в чалга музиката се пее за това – защо не слушаш чалга тогава?“.

След като се сетих за този момент от разговора ни, реших да проверя малко по-задълбочено за какво точно се пее в чалга песните и за какво се пее в рок песните. Разбира се, подобно срaвнение е трудно да се направи. Рок песни милиони, чалга или поп-фолк … хиляди. Не може да се изследват всичките. Затова отворих Last.fm, избрах два тага: “chalga” и “rock” и прочетох текстовете на песните, а след това се опитах да побера с една дума/изречение значението на песните.

1. Алисия – Палиш ме
Тема: любов

1. Muse – Madness
Тема: любов

2. Камелия – Стрелките спират
Тема: любов

2. The Black Keys – Lonely boy
Тема: любов

3. Анелия – Само мене нямаш
Тема: любов (тук вече се открива шаблона)

3. Red Hot Chilly Peppers – Californication
Тема: тъмната страна на Холивуд

4. Камелия – Луда по тебе
Тема: любов

4. Muse – Survival
Тема: желанието да бъдеш най-добрия

5. Деси Слава – Бели нощи
Тема: любов

5. The White Stripes – Seven Nation Army
Тема: Трудно е да се определи еднозначно …За вътрешната борба на човека сам със себе си.

6. Теодора – Шумно ли го правя
Тема: секс

6. Red Hot Chili Peppers – Other Side
Тема: пристрастеността към наркотиците

7. Азис – Няма
Тема: любов

7. Red Hot Chili Peppers – Scar Tissue
Тема: пристрастеността към наркотиците

8. Азис – Обичам те
Тема: любов

8. Muse – Panic station
Тема: показването на воля, за да постигнеш жаланието си

9. Теодора – Изневерявам ти
Тема: любов
(между другото, текстът е покъртителен)

9. Foo Fighters – The Pretender
Тема: как правителствата мачкат хората, а всъщност ние сме важните

10. Софи Маринова – Аз и вятъра
Тема: … любов

10. Foo Fighters – Everlong
Тема: любов

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

Текстовете на рок песните бяха по-трудни за разгадаване. Да кажем, че английският ми език не е перфектен, въпреки това ми отне време да вникна в смисъла на някои от песните. За част от тях (The White Stripes – Seven Nation Army, Muse – Panic Station) дори се наложи да потърся мнения на други хора, защото не може да се дефинира еднозначно. А това всъщност е страхотно – всеки човек може да избере сам какво означава текста на песента за него. Всеки е минал през различни изпитания през живота си. Някой “виждат” в текстовете любов, други смърт, трети страх, четвърти не виждат нищо – просто се наслаждават на музиката.

В крайна сметка това не е статия за или против чалгата. Аз съм за свободата на личен избор (и за свободата човек да прави грешки). Аз съм направил моята грешка вече. Чуйте я 🙂

Update: Докато разлиствах 9gag …

Как се “paste”-ва в Git bash под Windows

Това винаги ме е мъчило! Как ли пробвах – CTRL + V, с десен бутон на мишката … не става. И ако трябваше да използвам git bash и да използвам текст/адрес, всичко се пишеш на ръка. Можете да си представите колко е досадно и колко грешки могат да се получат така.

Съвсем случайно открих, че ако се копира текст и се натисне … Insert, текста ще се “paste” в конзолата 🙂

Търси се дизайнер на лого

Търся дизайнер, който да изработи лого на мой проект. Логото трябва да съдържа анимационен герой (животно), който ще бъде създаден от Вас, като единствено породата му ще бъде зададена от мен. Освен статичен дизайн на логото, трябва да се изработи и серия от движения на героя (придвижването му от точка А до точка Б).

Ако се вълнувате от изработката на това лого, моля пишете коментар 🙂

Инструменти, без които съвременният програмист не може

Научаването на един или няколко езика за програмиране не е напълно достатъчно за един съвременен програмист да се нарече такъв. Покрай работата с езика, програмистът трябва да умее да работи достатъчно добре и с още няколко инструмента. Тук ще се опитам да изредя няколко инструмента, които използвам аз и колегите ми, при ежедневната ни работа в eCommera.

1. Subversion/SVN

subverion

Въпреки че списъка не е подреден по приоритет, ако беше, то SVN със сигурност щеше да е на първо място. Абсолютно незаменим софтуер. Дали ще е SVN/CVS или популярния вече Git, създаването на версии на кода е задължително. Не само работата на един човек се улеснява, но екипна работа е невъзможна без него.

2. JIRA + GreenHopper + FIshEye

jira

Софтуер, който обединява в себе си система за управление на проекти и тракер на бъгове/проблеми. Приляга перфектно на Agile development процеса. Има интеграция с SVN, така че да се знае всяка задача с какъв код е изпълнена. Дори не техническо лице може да разбере как е протекло изпълнението на задачата – от създаването й, през коментарите от страна на всички участници, до изпращането на кода и тестването й.

3. Eclipse

eclipse

Обичан от едни, мразен от други, но Eclipse си остава основно IDE за много езици. Въпреки че за него има може би най-много алтернативи от останалите инструменти в този списък, в случая на eCommera, Eclipse е единственото решение. Аз бях от хората, които го … е, мрезеха е силна дума, но гледаха да не го използват. И наистина не ми се налагаше. Не бих казал, че помага много в писането на JavaScript/CSS, нито за вътрешния език на фирмата, но и не е голяма болка за умиране. Винаги може по-добре 🙂

4. Skype

skype

Кой не е чувал за Skype? Това е Gangnam style-а на софтуерите за комуникация. Може би най-добрата му характеристика е, че позволява разговори в група и така всички хора от един екип, могат да пишат на едно място и дребни проблеми и размяна на идеи стават бързо и съсредоточено на едно място.

5. Confluence

confluence

При работата с голям проект трябва да започнете възможно най-скоро да описвате какви модули са внедрени, какви външни приложения се използват, кога и защо е направен release, какво е включено в него. Много често всички тези описвания и документирания са изнервящи, но след време ще благославяте (дори и да не сте вярващ), че се е постарал да напише дори и два реда, какво прави “шибания метод”.

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

6. Microsoft Outlook

microsoft_outlook_2012

В екипна работа постоянно се прехвърлят e-mail-и. Постоянно!. Всеки ден и всеки час! Дали ще е от project manager, дали ще е от solution strategist или team leader или колегата през две бюра – всеки има да напише нещо. В такива ситуации е хубаво да има софтуер, който да ви известява когато пристигне ново писмо. То това го прави всеки мейл клиент, но Outlook предлага допълнителни екстри, като общ календар, категоризиране, филтриране и т.н.т.

7. Microsoft Windows 7

windows_7

Операционната система е някакси очевиден, но много често пренебрегван “инструмент” при разработката на какъвто и да е софтуер. Тук не става въпрос за коя операционна система се пише, а за удобството, което предоставя средата, в която работиш. Не е никак приятно да се чудиш “абе как се пуска тази програма” или “този бутон защо не работи както в еди коя си ос“. Имал съм възможност да работя и на Ubuntu и на OS X .. по-удобна и добре измислена операционна система като Windows и по-специфично Windows 7 – НЯМА.

8. Adobe Photoshop

photoshop

Photoshop не е софтуер, който ще се използва от много програмисти или разработчици, но е незаменим, ако сред уменията си имате или искате да имате “html slicing”. За да се научи Photoshop перфектно би отнело месеци работа само с него, но за работата на slicer е необходимо да знаете няколко от по-важните инструменти и клавишни комбинации 🙂

9. FTP/SSH Client

filezilla

От време на време се налага да се качват по-големи файлове тук и там. Не навсякъде има уеб интерфейси и е полезно да може да работите с FTP клиент. FTP клиент е образно казано и по-скоро събирателно, тъй като по още 10 протокола може да се качват файлове, но Filezillа, примерно, поддържа повечето.