May 14 2011

Learn to love Javascript

Category: Dev,WebLucho @ 13:43

Дойде това време от годината, когато човек може да се наслади на изобилие от качествени презентации, благодарение на Google IO. Първото видео, което изгледах беше от Alex Russell, който говори за бъдещия стандарт на Javascript – Harmony. Harmony ще направи опит да очовечи езика, чрез оператори и похвати, които са дефакто-стандарт на повечето функционалните скриптови езици. Все пак не става дума за кардинална промяна, а за “захаросване” на синтаксиса, така че кодът написан за предни версии на езика да си е напълно валиден.

Както и да е, това не е най-интересното от презентацията. Най-интересното от нея е едно изречение, което характеризира перфектно Javascript и очертава основното различие между този език и останалите скриптови езици:

You don’t create classes that are state with behaivour attached,
you create behaivour that holds the state that it needs.

Enjoy 🙂

Tags: ,


May 11 2011

Django за ненормални хора

Category: Dev,WebLucho @ 23:07

Говорим за Python 2.5+ и Django 1.2+

Какво ще направите ако ви трябва динамично създаден модел?

Първосигналното решение е да създадете класа на модела и под него да добавяте полетата. Това е погрешно поради ред причини, но най-основната е, че базовия клас на моделите (models.Model) се създава посредством метаклас (models.base.ModelBase), който е отговорен за магиите под капака и веднъж щом е създаден класа няма как да добавяте нови атрибути и магиите да сработят с тях.

Второсигналното решение е да създадете наследник на метакласа, който да е отговорен за динамичното създаване на желания модел. Това е доста по-елегантно и в стила на Python, а и ще можете да използвате метакласове най-накрая и да се похвалите на приятелите си :D.


class MetaDynamicData(models.base.ModelBase):

 def __new__(cls, name, bases, attrs):

   newattrs = {'__module__': 'myapp.models'}

   # Да речем, че искате да добавите динамично по един атрибут за всеки месец
   months = [datetime.datetime(2000, x, 1).strftime('%b').lower() for x in range(1, 13)]
   for m in months:
     newattrs[m] = models.IntegerField()

   return super(MetaDynamicData, cls).__new__(cls, name, (models.Model,), newattrs)

class DynamicData(models.Model):
 """
 Dynamic data is cool!
 """
 __metaclass__ = MetaDynamicData

Ако не сте чували за метакласове, най-добре си прочетете документацията, за да разберете какво се случва.

Дотук добре, но какво става ако използвате Sphinx, за да си генерирате автоматично документация за кода?!
Рано или късно ще забележите, че документацията за DynamicData липсва. Липсва, защото Python държи описанието на всеки обект (за по-просто docstring) в магическия атрибут __doc__, а класът DynamicData се генерира динамично от метаклас. За това е нужно да създадем docstring-a в __new__ на метакласа.


class MetaDynamicData(models.base.ModelBase):

 def __new__(cls, name, bases, attrs):

   newattrs = {'__module__': 'myapp.models'}

   newattrs['__doc__'] = "Dynamic data is cool!"

   # Да речем, че искате да добавите динамично по един атрибут за всеки месец
   months = [datetime.datetime(2000, x, 1).strftime('%b').lower() for x in range(1, 13)]
   for m in months:
     newattrs[m] = models.IntegerField()

   return super(MetaDynamicData, cls).__new__(cls, name, (models.Model,), newattrs)

class DynamicData(models.Model):

 __metaclass__ = MetaDynamicData

Сега вече всичко ще е наред и ще може да се похвалите на приятелите си, че знаете какво е __doc__, което ви отрежда място в челната петица на най-образованите Python програмисти и завинаги ви прави по-skilled, от който и да е PHP програмист (самият факт, че пишете на Python стига, май).

За съжаление Джанго не е кръстен на този филм, но пък е горе-долу толкова силен…

Tags: , ,


Jan 11 2011

Ontwik

Category: Dev,HTML5,WebLucho @ 12:38

Ако сте мързелив програмист и не обичате да четете книги или пък харесвате dev конференции и искате да слушате лекции на любимите си гурута, то на драго сърце ще ви препоръчам Ontwik.

Ontwik е сайт, който събира в себе си записи от различни конференции на web тематика и дава възможност на всеки да ги гледа… безплатно. Темите, които следя са предимно Javascript, Ruby, Rails, Python, Django, Git, HTML5, но има още много други. Голямата част от лекциите са наистина качествени и интересни, като има записи на web гурута като David Hansson – създателят на Rails,  Tom Werner – един от създателите на Github, Линус Торвалдс, Brendan Eich – създателят на Javascript, и още много други.

Оставям ви с една много готина презентация на David Hansson:

“Why Ruby?” – RubyConf X Keynote from David Heinemeier Hansson on Vimeo.

Tags: , , , , ,


Dec 08 2010

Firefox 4 идва без WebSockets

Category: Firefox,HTML5,Mozilla,WebLucho @ 14:49

За съжаление най-якият фичър на HTML5 – WebSockets ще бъде изключен по подразбиране от Firefox 4. Причините са евентуални пробиви на сигурността в проксита и всичко, което е между браузъра и крайния сървър.

Тестове показват, че е напълно възможно да се създаде proxy cache poisoning (да се вкара вреден код в кеша на проксито), защото прокситат не разбират от Upgrade handshake-а, който WebSockets ползва. Това дефакто е проблем на прокситата, а не на протокола на WebSocket-ите, но за жалост не е възможно да се оправят всички прокси сървъри по света :-), за това се налага да се префасонира протокола на сокетите :-(. Препоръката за сега е да се промени стандарта и да се полза CONNECT handshake-a вместо Upgrade handshake, тъй като прокситата го интерпретират правилно.

Най-вероятно няма да видим WebSocket-и във Firefox скоро, поне докато проблемът не бъде разрешен и стандартът не дефинира нов метод за handshake.

Повече подробности може да прочетете на http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/ и http://www.ietf.org/mail-archive/web/hybi/current/msg04744.html

Update: Opera спира поддръжката на WebSockets също – http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability

Tags: , , ,


Dec 01 2010

Блогът ми е нов

Category: Web,СоциалниLucho @ 04:02

… с нова визия по-точно.

Избрах темата Stardust 2.7 от Tommaso Baldovino и определено съм доволен, макар че тя няма възможност за лесно настройване (т.е. трябва да се бърка по кода). Досега не вярвах, че червено, черно и бяло могат да се съчетаят толкова добре в композиция. В резултат дизайнът е приятен, минималистичен, същевременно и малко агресивен.

Но една хубава тема е нищо…

… ако е с неподходящи шрифтове.

Sans-serif е много хубава фамилия от шрифтове за четене, но не изглежда добре при по-големи размери – например за заглавия. Затова и реших, че е време да опитам Google Fonts API-то и да сложа някакви по-разчупени и приятни букви. За моя изненада Google Fonts поддържа цели 4 кирилски шрифта, което несъмнено е повече от 0, за което съм благодарен.

Избрах Neucha, който изглеждаше най-шантав и някак си се вписа добре в създалата се обстановка. Най-странното е, че си пасна и с Arial, който оставих за текстовете с нормална големина и менютата. Дано само да не се появят много уеб специалисти, които да ми обясняват колко е лошо да имаш 2 или повече шрифта на една страница :-).

За внедряването на Google Fonts ползвах помощта на WordPress Google Fonts plugin, но все пак ми се наложи да пипам и по CSS-а, така че не мога да го препоръчам с чиста съвест.

Препратките към социални мрежи (горе в дясно) изкопирах и преработих от Social Media Widget, тъй като не намерих нещо, което да ми свърши работа отраз. Може би аз не мога да търся, а може би и няма как да се добавят такива иконки в хедъра, ако това не е предвидено в самата тема.

И за финал – вероятно се питате защо статията е придружена от снимки на котки (и морж) с надписи. Ами няма конкретна причина, просто са забавни и ако са ви харесали, може да намерите още в сайта на Lolcats 🙂

Tags: , ,


Nov 09 2010

Бързо, лесно, вкусно – jsFiddle

Category: Dev,WebLucho @ 16:08

Понякога ми се налага да напиша някое малко парче код html с javascript за прототип или демо. В общия случай това значи, че трябва да създам нов файл, в който да пиша, да отворя редактор, да отворя браузър и милиони натискания на alt+tab в процеса на писане. Въобще досада отвсякъде!

За щастие наскоро попаднах на един много интересен онлайн туул, който предлага цялата тая функционалност наготово. Туулчето се казва jsFiddle и освен, че може да пишете html, css, javascript код директно в браузъра и да виждате резултата своевременно, можете да ползвате и някоя от популярните javascript библиотеки наготово и накрая да споделите готовото парче код в Twitter.

Nice, a?! 😉

Tags: , , , ,


Nov 04 2010

OpenFest 2010

Category: Dev,Firefox,HTML5,Mozilla,WebLucho @ 15:30

На 20-и и 21-и Ноември в Интерпред (София) ще се проведе OpenFest 2010 и ако сте от хората, които обичат отворения код и семинарите, значи със сигурност ще сте там!

OpenFest се провежда за 8-ми пореден път, като тази година в програмата е включена сесия с Lightning Talks

Освен „стандартните“ презентации обаче, тази година се надяваме да обагатим програмата на OpenFest и с една сесия Lightning Talks – изказвания, които по правило продължават по не повече от 5 минути всяко и следват непосредствено едно след друго. Освен че са изключително интересни и забавни за присъстващите, тези кратки презентации предоставят незаменима възможност за нови участници да се представят за първи път, без да е необходимо да изнасят цяла лекция.

Така че ако имате нещо интересно, което да споделите за 5 минути с феновете на отворения код – тогава е времето.

Аз лично обмислям няколко теми за HTML5 – “HTML5 и (сигурната смърт на) Flash”, “Историята на HTML5 в 5 минути” и “Бъдещият HTML5 в днешния уеб”

Tags: , , , ,


« Previous PageNext Page »