май 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 стига, май).

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


Етикети: , ,


яну 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.


Етикети: , , , , ,


дек 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


Етикети: , , ,


дек 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 :-)


Етикети: , ,


ное 09 2010

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

Category: Dev,WebLucho @ 16:08

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

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

Nice, a?! ;-)


Етикети: , , , ,


ное 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 в днешния уеб“


Етикети: , , , ,


окт 03 2010

Mozilla Labs – Game On 2010

Category: Dev,HTML5,Mozilla,WebLucho @ 16:29

Тези дни хората от Mozilla Labs стартираха конкурс за разработка на изцяло уеб базирана игра. Състезанието се казва Game On 2010 и дава възможност на всички гейм или уеб разработчици да покажат на какво са способни, но… само с HTML(5)/Javascript/CSS.

Да – правилно прочетохте! Flash, Applet-и и други плъгини не са позволени, защото основната идея на конкурса е да покаже на какво са способни модерните браузъри. А те наистина са способни! HТML5 & Friends докараха на белия свят доста новости и купища ексцентрични API-та – Canvas елементът,  SVG (директно в html кода), WebGL, Web Sockets (двупосочна свързаност), няколко API-та за data storing, Video елементът и още много интересни благинки.

В конкурса могат да участват както индивидуални разработчици, така и екипи. Естествено и за награди е помислено, като за сега от Лаба са обявили само наградата за първо място – два билета за Game Development Conference 2011 в Сан Франциско, с включен път, хотел и храна. Награди ще има и за още дузина категории, така че запретвайте ръкави ;-)

Крайният срок за участие е 11.01.2011г.

Успех на всички :-)

П.П. Аз лично смятам да се включа и съм навит за обединяване на усилията с други ентусиасти.


Етикети: , , ,


« Предишна страницаСледваща страница »