Архив за Юни, 2009
Понеделник, 1 Юни 2009
Из Софийските улици
Един от начините да усетиш наглостта и простотията на хората в по-голeми дози, е от време на време да шофираш из софийските улици. Сигурно често ви се е случвало да видитие разни тарикати, които като видят линейка с включени сирени по пътя, се залипат буквално зад нея, за да използват това, че (почти) всички участници в движението правят път на линейката да мине, та по този начин да избегнат задръстването доколкото може да се избегне. Лично на мен ми се случва да правя път на линейка в София може би за четвърти или пети път (което си е доста имайки предвид, че от сравнително скоро карам кола в София), но този път различното беше, че шофирах по локална и еднопосочна улица, на която както се досещате от едната страна имаше доста паркирани автомобили. И като видях линейката в огледалото използвах първото свободно място да отбия в дясно. Но ироничното в случая беше, че след като линейката мина, зад нея имаше голяма колона от автомобили, които я следваха сякаш хванати за ръчичка и нямаха никакво намерение да ме допуснат да се върна в движението. Та това заради, което се издразних е точно тази ирония - ти отбиваш от платното, за да направиш път на линейка, от която може би зависи нечий живот, а зад нея тарикатите я ползват като средство за преодоляване на задръстването и на никой не му дреме, че ти си направил път само на линейката и искаш да продължиш пътуването си след като тя мине. Даже напротив, да има как ще те блъснат само и само да минат те пред теб.
В случай като този на устата ми е само едно: "Еб`м ти куртурата по пътищата, еб`м ти европейските шофьори! Все още всичко си е пълна селяния в София(поне по улиците...)
Из "Дневниците на един млад шофьор"
Събота, 6 Юни 2009
Babies.bg
За всички, които ги интересуват теми свързани с бебета, бременност, сватби, отглеждане на деца, брак и други все хубави неща, или просто искат да разгледат малко снимки на бебешоци - днес е официалният старт на едно сайтче, което започнах да правя преди доста време, но в крайна сметка вече е факт:)
Пожелавам ви приятни минути!
Неделя, 14 Юни 2009
AS 2.0 vs AS 3.0
От известно време ми се иска да намеря документация, в която нагледно да са описани разликите между ActionScript 2.0 и ActionScript 3.0, но все не намирах достатъчно желание или време да потърся из мрежата. Но ето, че понякога намираш нещо, което ти трябва, без специално да го търсиш. Дето се вика "то само те намира" :) Пичовете от Adobe са си направили труда да публикуват таблица с въпросните разлики, от които се интересувам (а и не само аз, предполагам).
Тъй като, както се очертава, ще ми се наложи да "мигрирам" от АС2 на АС3 и то заради доста сериозен проект, тези дни използвам свободното си време да чета за обектно-ориентирано програмиране с АС3 и в една от книжките по тази тема, тези мили хорица (бел. р. авторите), сякаш вече са разбрали тревогите ми и точно на място са добавили линкчето към въпросната таблица, за която писах по-горе и което естествено веднага намери мястото си във фаворитите на браузъра ми:)
А нека някой пак да ми каже, че няма смисъл от четенето на книги :))
Понеделник, 15 Юни 2009
Защо да планираме?
00:48Днес (като гледам колко е часа в момента, май трябва да пиша "вчера") почти цял ден чета една книга за Обектно-ориентирано програмиране с ActionScript 3.0 и като, че нещо се зарибих, та даже почнах да пействам разни откъслеци на колегата в скайпа и да се опитвам да му обяснявам за какво иде реч. Тъй като книгата е на английски и колегата ми вика, че не разбира какво му пращам, така лекинко се заговорихме, че накрая реших да се опитам да сглобя що годе читав превод на това, за което си говорихме и което според мен е много полезно да се знае (поне от хората, които се занимават с разработване на софтуер).
Ето и резултатът:
The importance of planning
(by the book: Object-Oriented ActionScript 3.0)
Защо е важно да планираме?
(превод на български – Михаил Габеров, 15.06.2009г.)
Ако някога сте били в ситуация, в която работите по проект без никакво планиране, работите с разработчици – локално и отдалечено, а клиента ви звъни през десет минути и с повишен тон ви напомня, че крайният срок наближава – в следващите редове ще разберете какво ви липсва.
Разбира се, не всички проекти са като описания по – горе, има много ситуации, в които бихте помислили, че планирането е остаряло и старомодно. Нека разгледаме някои от тези възможни сценарии и разберем защо не е:
Няма време за планиране (крайният срок е следващия месец).
Времето, което ще отделите за планиране ще намали драстично времето за разработване и дебъгване. По този начин ще забележите, че фазпжг ата за планиране ще ви помогне да управлявате по – добре проекти с „стегнат” краен срок (deadline).
Нямаме бюджет за планиране (трябва да започнем днес).
Планирането ще ви позволи да спестите пари от разработването. В крайна сметка, какво са няколко листа документация в сравнение с възможна нужда от пренаписване на целия проект (приложение) от нулата, защото никой не е взел в предвид някой параметър, който се е оказва критичен?
Нямаме нужда от планиране (това е просто малък и бърз проект).
Планирането е полезно за всякакъв тип приложения. Какво ще стане ако след няколко месеца клиента ви разбере, че приложението, което сте разработили за него не „фитва” в съществуващата му информационна инфрастурктура? Няма ли да сте разочаровани, че трябва да ребилдвате всичко от начало, което би се избегнало с няколко простички бележчици останали от планирането?
Гореописаните ситуации са някои от най – често срещаните причини, които карат хората да мислят, че планирането не е необходимо. Тези примери показват, че планирането дори и при тези обстоятелства, е много важна част от процеса на разработването.
Можете да гледате на планирането като на един обектно-ориентиран процес. Различните секции на вашето планиране могат да бъдат разглеждани точно като обекти в обектно-ориентираното програмиране (ООП) и всяка от тях има своята конкретна роля в по – голямата „цяло”. Задачите в проекта могат да бъдат разглеждани като самостоятелни обекти, зависимостите в проекта (project dependencies) са сравними с взаимодействието между класовете и т.н. – в този ред на мисли, планирането се оказва, че не е много по – различно от писането на същински код. Тази обектно-ориентирана природа на планирането го прави много удобно за написването му в структуриран модел (structural model). По – долу ще разгледаме различните стъпки включени в процеса на планиране и няколко примера, които ги описват.
Начална фаза: планиране на преизползваемостта (reusability)!
Преизползваемостта на кода от вашето приложение не се получава случайно, това трябва да бъде внимателно планирано. Първата стъпка в този процес на планиране е написването на различните задачи на вашето приложение на хартия.
Обикновено е най – добре началното планиране да се прави на хартия, защото това ви позволява да се концентирате върху същинската задача без да се разсейвате от подробности като това какъв шрифт или цвят да използвате и т.н. Добра идея е да си изключите компютъра през тази фаза, по - този начин по – добре можете да се концентирате върху по – голямата схема на нещата вместо да се занимавате с това какъв точно ще бъде дизайна и външния вид на приложението ви.
Първият въпрос, който трябва да си зададете е какво трябва да прави вашето приложение, а не как ще го прави. Ще разгледаме начините, по които различните задачи ще бъдат постигнати на по – късен етап, но за да започнем, трябва сте наясно точно от какво имате нужда.
Да предположим, че трябва да построите автомобил. Само по себе си, това е доста общо понятие; вие бихте могли да намерите различни решения, които покриват изискването. Бихте могли да използвате дори глина и да построите кола, бихте могли да построите кола чрез готов комплект части. Ако имате прекалено много пари бихте могли да поръчате на BMW да построи прототип за вас. Както виждате, знаейки просто, че искате да построите автомобил, не е достатъчна информация, за да знаете това, което ви трябва.
В началните фази на планирането, многократно трябва да се питате какво докато не стане кристално ясно какъв трябва да бъде финалния продукт, като същевременно оставяте въпроса как да стане (от техническа гледна точка) за по – късен етап.
Планиране на капсулация (Planning encapsulation)
Капсулацията е ключов елемент на ООП и служи затова да „скрива” вътрешната работа на един клас. Ще разгледаме планирането на капсулацията за вашия проект със следния пример:
Да кажем, че имате топка и искате на я накарате на подскача. Ако отделим това в обектно-ориентирани понятия, ще имаме клас Топка и клас Подскачане, или по – общо клас Движение.
Ако не сте запознати с концепциите на ООП, може би не бихте обмисляли създаването на клас Движение, а вместо това бихте добавили необходимата функционалност директно в класа Топка. Ако помислим за това, каква би била ползата от създаването на отделен клас? Отговорът е много прост: искаме да избегнем дупликирането на кода и да увеличим преизползваемостта му.
И така, как работи това във Флаш? Ако сте работили и преди с АctionScript, вие знаете, че има няколко събития, които са вградените обекти могат да използват. Едно от тях е EnterFrame, то се стартира веднъж за всеки кадър (frame). Да кажем, че имаме честота на кадрите 30 кадъра за секунда, това означава, че функцията (event handler), която сме закачили към това събитие, ще се стартира 30 пъти всяка секунда. Може да видите, че използвайки това събитие (event) можете доста лесно да симулирате движение използвайки ActionScript.
Фигура 1: показва диаграма на класа Движение (Mover)

Фиг.1: Диаграма на клас Движение (Mover)
Класът Топка (Ball) извиква метода startMoving от клас Движение (Mover). След което този startMoving метод „сетва” EnterFrame събитието, което извиква updatePosition метода.
Това затваря кръга всеки път когато EnterFrame се извика и метода updatePosition се изпълни, което ни дава като резултат симулираното движение, което искахме.
Планиране на наследяването (Planning Inheritance)
Нека разширим плана за капсулацията; без да знаем как точно работи класът Движение (Mover), искаме да добавим допълнителна функционалност. За да постигнем това, ще използваме наследяване.
Наследяването позволява да се разшири клас, който вече съществува или да се повиши неговата функционалност, без да се нарушава съществуваща вече функционалност. Наследяването позволява нови класове да наследят функционалност от други съществуващи класове. Когато използвате новия клас, вие получавате достъп и до свойствата и методите на съществуващия клас също.
Наследяването е повече от просто организиран начин за добавяне на нови свойства и методи, то ви предпазва от „счупването” на приложения, които използват вече съществуващи класове (тъй като вие не пипате съществуващите класове въобще).
Нека продължим с нашия пример. Този път добавяме друг клас наречен Подскачане (Bouncer). Класът Подскачане ще наследи класа Движение (Mover) и следователно ще може да прави всичко, което класът Движение може, но също така добавя своя допълнителна функционалност. По – конкретно, искаме класът да кара топката да подскача всеки път, когато се удари в стените на сцената.
Фигура 2 показва диаграмата на клас Подскачане (Bouncer)

Фиг. 2: Диаграма на клас Подскачане (Bouncer)
1. Методът updatePosition в класа Подскачане пренаписва първоначалния метод updatePosition от класа Движение.
2. Класът Движение не знае, но класът Подскачане има едно допълнително поведение (bounceAtBorder метода), което се извиква в updatePosition метода на клас Подскачане (Bouncer). Класът Подскачане по този начин използва това си поведение без да го разкрива на класа Движение.
3. Класът Топка също не знае, че класът Подскачане е наследил класът Движение. Всъщност класът Топка няма представа, че класът Движение дори съществува. Класът Подскачане инициализира „рикуест” за наследяване, той няма нужда от разрешение от класа Топка, за да го направи. Класът Топка няма представа, че това се случва, а и така трябва да бъде. Класът Подскачане може да прави всичко, което може и класът Движение и като добавка съдържа свой собствен метод bounceAtBorder.
С това завършва друга последователност на кода, която някак си (досега не сме погледнали нито един ред код) мести топката и я кара да подскача при удар в стената на сцената.
Докато сме на тази тема, нека да добавим още един клас, който симулира триене и гравитация, за да придадем на топката малко по – истински движения. Ще наименоваме този клас Гравитация и той ще наследи клас Подскачане, по този начин той ще може да използва всичката функционалност, която вече е дефинирана там.
Припомнете си, че класът Подскачане наследява клас Движение, така че тук вече получава една верига на наследяване. Важно нещо да се отбележи е, че един клас може да наследява методи на много класове, но може да взаимодейства директно само с родителския си клас (за клас Гравитация, това е клас Подскачане).
Все още не ни интересува как работи нашият нов клас Гравитация, просто добавяме два метода наречени applyFriction и applyGravity.
Фигура 3 показва диаграмата на клас Гравитация (Gravity):

Фиг.3: Диаграма на клас Гравитация (Gravity)
1. updatePosition метода в клас Гравитация пренаписва същия метод в класа Подскачане и действа като EnterFrame event hander-а така както е дефиниран в класа Движение.
2. Класът Топка не знае, че класът Гравитация е наследил класа Подскачане. Класът Гравитация може да прави всичко, което може и класът Подскачане плюс неговите уникални методи applyFriction и applyGravity.
3. Класът Подскачане наследява клас Движение. Това предполага, че класът Гравитация също наследява (индиректно) функционалността на класа Движение (без дори да знае, че клас Движение съществува).
Това завършва още една поредица, която също така се стартира от класа Топка, извиквайки метода startMoving. Цялата серия от събития, които добавихме от класа Движение, през класа Подскачане, чак до класа Гравитация се изпълнява всеки път когато EnterFrame събитието стартира updatePosition метода и всеки допълнителен метод, който класът предлага.
Ако изгубихте нишката при създаването на класовете досега, погледнете фигура 4, за да добиете по – ясна представа.

Фиг.4: Диаграма за наследяването на клас Движение (Mover class inheritance diagram)
Забележка: предварително се извинявам за евентуални неточности в превода.
Аууууу, това ми изглежда като "бля, бля, бля". Опитах се да го прочета цялостно, но нещо не ми се получи. Някъде на средата на текста ме загубиха като аудитория. Как го четеш това? И по - важния въпрос - разбираш ли какво искат да ти кажат?
16-Jun-2009 15:40Ми опитвам се да го разбирам и като се получава се зарибявам още повече :)
16-Jun-2009 17:40Събота, 27 Юни 2009
Develop a Useful Font Picker App with ActionScript 3.0 - Tutorial
01:21Напоследък нещо ме е ударила треската, като намеря нещо полезно, не само да го споделям, но и да се опитвам да го превеждам на майчиния език, та да може и хората със слаб (или никакъв) английски да понаучат нещо при желание от тяхна страна.
Днес случайно попаднах на един туториал, който поне за мен е много полезен, тъй като ще трябва да използвам подобно нещо в следващия проект, който ще разработваме с колегите във фирмата.
И така, прочетох го, направих го и реших да го преведа и да го споделя тук.
Тъй като получих е-mail от рeдакторите на Flashtuts+, с който ме уведомяват, че публикуването дори и на превод на туториал от сайта им нарушава авторските права и на сайта, и на автора, свалям превода на туториала от блога. Ако някой се интересува нека да ми пише и ще му го предоставя.
Крайният резултат от туториала можете да видите по-долу:
Описателните текстове за Color Picker-те също трябва да ги конвертирате в MovieClip-е и да им дадете имена съответно bgColorText и fontColorText, за да можете да контролирате тяхното появяване и скриване :)
28-Jun-2009 06:33Неделя, 28 Юни 2009
mihail.gnetbg.net - New Design!!!
04:11Както вече сте забелязали, вече мога да се похваля с новото дизайнче на блога:) Надявам се да ви харесва и да улесни престоя ви тук! Обещавам да не спирам до тук с нововъведенията по дизайна и функционалността на блога!
Специални благодарности на Илиян за оказаната помощ при създаването и имплементирането на новия дизайн на блога!
Честито, много е готско! Ама ще ми кажеш ли какво е това отгоре - огнено слънце или просто огън и ли планета, или.....
28-Jun-2009 11:01Нали съм Лъвче :) Елементна ми огън, а управителя(планетата) е Слънце. Т.е. отговора на въпроса ти е "огнено слънце":)
28-Jun-2009 14:05Имаш още много работа и не се офлянквай.
29-Jun-2009 18:26Естествено! Няма да спираме до тук, то се знае!
29-Jun-2009 19:44Понеделник, 29 Юни 2009
Лицемерност и "дупедавство"
02:10Винаги съм се удивявал на лицемерността на управляващите, която взима връх особено като наближават избори. Какво да ви кажа...сигурно помните когато се вдигна шум около торент сайтовете и как се започна една кампания за затварянето им или поне ограничаване на достъпа до тях. Кофти тръпка беше и добре, че не стана, но какво виждам тези дни в един от тези сайтове?! Въртят се агитиращи банери на разни партии, които ни приканват да гласуваме за тях. Интересното е обаче, че точно тези партии (говоря за банера на БСП, който можете да видите в arenabg.com) ни управляваха и по същото време, когато едва ли не се извършваха гонения срещу потребителите и доставчиците на торент файлове.
И това ако не е лицемерщина, здраве му кажи!
В края на тази седмица когато са изборите, ако трябва до Гоце Делчев ще се прибера, но ще гласувам! Разликата за мен този път е, че ще дам гласа си затова да няма турци и комунисти в правителството, което ще ни управлява следващите 4 години, не че е гаранция, че няма да е същото, но просто не бива да търпим разни рязани фесове да правят изявления по националните телевизии и интернет, че едва ли не, те държат България в ръцете си и разпределят "финансовите порции" в държавата!
На мен не ми е приятно дори да виждам такива хора нито по телевизията, нито по интернет, а на вас ?!
За това съм съгласна, никъде го няма това да има новини на чужд език по националната телевизия, на която и да било държава!!! Да не говорим за другите безумия, за които направо си си потърпевш само защото не си турчин или мангал!!!
29-Jun-2009 08:57Абсолютно! Или разни "български" (ми така де, участват в управлението на България все пак) политици да си позволяват да говорят на майчиния си език (турски?!) на публични мероприятия в БЪЛГАРИЯ! И то най - нагло демонстрират турската си принадлежност пред "уважаемите" гости от Турция, сякаш продължават да им лижат гъзовете, както са го правили цели пет века...
29-Jun-2009 15:46Току-що, сваляйки си последната версия на Pidgin, от сайта на Sourceforge.net ми се пули дебилската и топчеста физиономия на г-н премиера ни.
29-Jun-2009 18:23Трябва да се гласува. Тези, които ще управляват може да не са особено по - свестни, но поне да не са турци и руснаци. А около мен да знаеш колко неориентирани млади хора смятат да не гласуват, чак ме хваща яд. Аз смятам да ида до другия край на българия, само и само да гласувам, на тях секциите са им в двора на блока едва ли не, но нямало да гласуват. Ами ей затова ще отменят българския като задължителен език за изучаване в училищата!
30-Jun-2009 11:58Точно! То с нашето НЕгласуване се увеличава тежеста на гласовете на турци и помаци! Ако караме така може не само българския език да отменят, току виж след някоя година направят и турския задължителен...
30-Jun-2009 12:15