08 септември 2008

Import turtle

Открих един модул за Python наречен turtle. В момента пиша и туториъл за него, който ще бъде включен във pdf туториълът ми за Python който е базиран на поредицата от туториъли които постнах тук(само че добре оформен, с цветен код и повече инфо и екстри + още няколко глави, които може би ще постна и тук).

Та модулът turtle е доста интересна играчка, ако някой от вас знаят какво е LOGO, това е език за деца, при който се пишат команди с които се управлява една "костенурка" на един екран и се чертаят фигурки и такива неща. Страхотен език, учил съм го като малък, и когато открих модулът turtle, който позволява да се чертаят такива неща и в Python направо онемях и започнах да си играя веднага. Написах няколко функции които чертаят готини фигури. Първата функция чертае кръг, модулът има вградена функция за чертане на кръг, но тя е доста бавна, за целта пиша ето този код:

import turtle

def circle():
for x in xrange(360):
turtle.forward(1)
turtle.left(1)

първия ред импортира функциите в turtle(в туториълите не съм говорил много за модули и импортиране, но в pdf-а ще има инфо за това). След това функцията просто изпълнява едни и същи действия 360 пъти, чертае черта дълга един пиксел, след това променя посоката си с 1 градус, така след 360 итерации получаваме кръг. Това е доста яко, реших да видя дали можем да получим нещо по сложно, реших да начертая сложен кръг, съставен от малки кръгове, така че да прилича на спирала, за целта написах тази функция:

def ccircle(f):
for x in xrange(360):
circle()
turtle.up()
turtle.forward(f)
turtle.left(1)
turtle.down()

Тук кодът е приблизително същия, при всяка итерация, функцията чертае кръг, след това костенурката която чертае на екрана се повдига, за да не може да чертае вече, мести се f пиксела на пред, изменя посоката си с 1 градус и след това се връща ан долу, за да може да пише. Така се получава един доста голям кръг от кръгове, в зависимост от f кръговете са близко един до друг и се пресичат в по голямата си част, или са далече и не се пресичат, разбира се е нереалистично да даваме по големи стойности на f от 4-5 защото кръгът ще е прекалено голям за да се побере на екрана, дори сега не се побира правилно, защото е голям и костенурката пие в средата на екрана. Следващата функция която написах е такава която влага такива кръгове един в друг, на практика се получава нещо от рода на голям кръг, след това по малък, и още по малък в него, като матрйошка, но не са концентрични, т.е. кръговете имат допирна точка в долната си част, и не изглеждат като мишена, а като топчета, вкарани една в друга, гравитацията ги дърпа на долу:

def cccircle(n):
if n:
ccircle(n)
cccircle(n-1)

Тук виждаме един доста готин трик наречен рекурсия, всъщност в туториълът този пример ще се използва именно за да се обясни рекурсия. На кратко докато n има някаква стойност(не е 0) ще се чертае кръг от кръг(ccircle) със аргумент n, след това ще се вика същата тази функция cccircle със n-1, по този начин това е нещо като цикъл, можем да получим същия резултат ето така:

while n:
ccircle(n)
n-=1

така n си променя стойноста, при всеки while. това отнема доста време, чертането е бавно, все пак ако дадем на n аргумент 5, това означава че първите 2 функции от circle()(turtle.forward(1),turtle.left(1)) ще трябва да се извикат общо 1296000 пъти, като включим 4-те функции от ccircle които трябва да се извикат 1800 пъти, нещата стават тежки, отнема минути, не знам точно колко, но определено ще ви доскучае ако го гледате как чертае. И сега да стигна до интересната част. turtle има едан функция turtle.fill() която може да запълва фигури, за да я запълни първо трябва да напишем turtle.fill(1) и след това да начертаем фигурата и след това да напишем turtle.fill(0) и фигурата ще се запълни. Ако опитате да запълните горната супер сложна фигура резултатът ще е трагичен. при мен(3.4 гх,1гб рам) за няколко минути целия ми комп замря, след това крашна python,bash,прозореца на който се чертаеше както и двата ми прозореца на firefox които бяха отворени. Явно да запълниш 648000 кръга е трудна задача :D

pdf-ът с туториълът незнам кога да очаквате, вече не е просто 8 блог поста в pdf формат, смятам да поработя малко върху него, имаме нужда от свестен бг туториъл.

07 септември 2008

Диктатурата в Опън Сорса

Днес се замислих върху един аспект на разработката на софтуер, върху който в последните месеци не съм се замислял особено. Преди няколко години открих концепцията на отворения код и свободния софтуер. Като цяло идеята ми хареса, но какво разбира едно 16 годишно пишлеменце без понятие от програмиране? Преди близо 13 месеца преминах напълно на Линукс, и разбира се започнах да попивам още повече информация относно тази култура, която дойде с операционната система(културата в последствие се оказа много по благотворно за мен, от колкото самата система, всичко което правя на Линукс, го мога и на уйндолс, но я няма културата). Гледах всеки възможен документален филм, четох много туториъли, както и статии за културата, също така и технически такива. Най- важното от тях се оказа Как да стана хакер. То се оказа важно, защото ме вдъхнови отново да се занимавам с програмиране, дейност с която бях решил да не се занимавам, поради тъпи причини, най- важната от тях беше че ще ми се наложи да работя в офис, зад компютър докато се пенсионирам, със шеф и ще трябва да пиша код по цял ден и общо взето че ще имам скучна работа. Разбира се опън сорс-а ми отвори очите, че има и забавна страна на нещата, всички тези хора пишат код за без пари, най- вероятно е забавно? Защо ще го правят иначе. Това есе беше общо взето началото . По късно следваха есетата на Поул Греам. От тях открих още един начин да избягаш от така наречената “Ферма с кубчета“ , той говори за малки компании, стартирани от хакери, в които те имат контрол, а не мениджърите и хората в костюми. Тези компании наречени “Start-up's“ Са малки, езиците на които се пише софтуера са забавни и мощни(python, ruby), а не скучни и корпоративни(java,C#). Продуктите са интересни и полезни(reddit, youtube) а не скучни(windows, IE). Опън сорс софтуерът и старт-ъп компаниите имат много общи черти, и нерядко са полезни един на друг. Някой от общите им неща са:


  • И двете в повечето случаи се управляват от хакери

  • Като цяло са интересни технологии

  • Създателите им се интересуват повече от това да изкарат добър софтуер, от колкото да печелят пари(старт-ъпите имат интерес от качеството, защото ако е качествено, ще печелят пари, те нямат преимуществата на големите компании)

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

  • И двата вида организации са очевидно непрофесионални. При опън сорса това е очевидно, повечето от тези хора са аматьори, които пишат код през свободното си време, всъщност това не е съвсем вярно, защото повечето всъщност са професионалисти, а на някой дори им е работата да пишат опън сорс. Вторите също са професионалисти, защото ръководят компания, но тази компания е малка и тези хора са предимно млади момчета със лаптопи в апартамент, или малък офис. Те не си говорят с пауърпойнт презентации, а си говорят докато пият кафе, не си обличат костюми, а си карат с дънки, не работят от 9 до 5, а когато им се работи. Последното изречение е горе долу вярно и за двете групи.

  • Много често членове на една група, са и членове на друга. Отличен пример са създателите на Django, уеб фреймуъркът за Python, който набира популярност. Създателите му Адриан Холовати и Джейкъп Каплан-Мос работели за малък вестник, когато създават кодът на това което в последствие се превръща в Django, днес Адриан има своя компания, но продължава работа върху опън сорс проектът си Django. Това не е изненадващо, тези хора са едни и същи, те са хакери, културата им е една, просто формата на проектите им е различна. Някой проекти просто трябва да са компании за да могат да оцелеят(youtube), защото имат нужда от силен централизиран контрол, а други не могат да оцелеят като компании(Django), защото опън сорс алтернативите биха ги смачкали(колко от любимите ви сайтове са написани на .net?)



Темата на поста е относно благотворителните диктатори. Може да сте чували термина Benevelont dictator for life(BDFL) Някой от по известните лидери в опън сорс обществото носят тази титла. Горните Адриан Холовати и Джейкъб Каплан-Мос са диктаторите на Django, Гуйдо Ван Россум е диктаторът на Python, Матц е диктаторът на Ruby, DHH е на Rails. Повечето опън сорс проекти имат нужда от някаква силна личност която да води проекта. В повечето случаи това е човекът започнал проекта, но това не е задължително. Няма да влизам в подробности относно вътрешната структура на различните проекти, Ерик Реймънд както винаги се е справил по добре от колкото аз ще мога някога.

Ето някой мои мисли които имах днес докато разсъждавах за начина по който тези проекти се ръководят, както и вътрешната структура на млади компании за които съм чел, както и мисли вдъхновени от горното есе:


  • Ето още нещо което е общо между опън сорс проекти и старт-ъп компании. И двете обикновено започват от един(или няколко) програмисти, със даден проблем който искат да решат. Без значение дали е липсата на добър опън сорс уеб фреймуърк за Python или липсата на свестен сайт за споделяне на снимки, или нещо от сорта, всичко започва с нечия неволя, като резултат обикновено проектите не започват със комерсиална цел, в много случаи дори и компаниите не започват с такава цел, а се превръщат в компании в последствие.

  • За да оцелее проектът в последствие той се превръща или в по голям опън сорс проект, или става компания, понякога става и двете едновременно(Ubuntu)

  • Истински добрите проекти имат един или двама (максимум 3-ма) диктатори, които го ръководят, проекти организирани и създавани от комисии обикновено се оказват или провали, или просто са ниско качествени. При компаниите няма голям избор, защото хората които са на чело, са и собствениците на компанията и те автоматично командват парада като следствие, дори и да позволяват известна свобода на служителите си, те все пак са служители.

  • Диктаторът(или CEO-то) слуша внимателно какво казват потребителите, както и разработчиците, и взема решения базирано на това, понякога обаче не го правят. Ето това е взето от сайта на Python описващо това какво става ако общността не може да вземе консесусно решение по даден въпрос:


If a thread has gone on for dozens or hundreds of posts with no clear consensus emerging, one of two things will happen. Either Guido will make a BDFL pronouncement, which consists of him saying "We'll do it this way", or he's given up on the thread and isn't reading it at all any more. In either case, there's little point in continuing the discussion.


  • Работата на диктаторът/шефът е да движи разработката, и да не позволява на работата да замре, ако софтуерът не напредва като развитие и опън сорс проекта и компанията са застрашени от смърт. Ако Линукс спре да получава пачове, най вероятно ще минем на BSD(или ако сте BSD фенове, приемете метафората на обратно, ако FreeBSD спре да се ъпдейтва, минавате на OpenBSD или Linux)

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


Това е нормално в Старт-ъп модела, но опън сорса е демократична система, нали? Истината е че опън сорса не е демокрация, а дарвинизъм. Също като старт-ъп компаниите, опън сорс проектите трябва да оцеляват, трябва да се развиват, за целта им трябва силна воля, която големи общности трудно могат да предоставят(има изключения разбира се). Илюзията за демократичност идва от нуждата от опозиция, както и обратната връзка на потребителите, тези неща са много важни за “животните“ , каквито са опън сорс проектите и старт-ъп компаниите. Те нямат привилегията на монополисти. Истината е че те не си приличат само защото се управляват от един и същ вид хора, а защото средата им и опасностите които ги дебнат са близки, те не са от различни планети, за това е логично че и двете имат дробове с които да дишат, и имат очи с които да виждат, и имат нервна система, която е близка, общо взето и двата модела са земни и живеят в истинския свят, ако не живеят в истинския свят в повечето случаи умират(Gnu Hurd, pets.com).


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

06 септември 2008

Twitter имал полза

Може да сте чували за http://twitter.com. Това е популярен инструмент за микро-блогинг. Дълго време не се занимавах с него, защото ми е беше безполезен, много хора го ползват просто за да пишат какво правят, и тъпите им MySpace приятели да знаят какво правят, сякаш на някого му пука. Пример:

Мия си косата- 45 minutes ago

чопля си носа- 30 minutes ago

Сърби ме скротумът- 15 minutes ago

Може да видите че имам малък Twitter уйджет в блога ми. Идеята ми е че вече имам стабилно количество посетители(разбирайте че всекидневно поне 10 човека влизат тук :D) И сега вместо да ми се налага по междудругото в различин блог постове да пиша разни дребни новини, свързани с нещо което съм написал в някой друг пост по междудругото, просто ще преместя тази цяла линия от мисли в тои малък уйджет за малки новини свързани с това какво правя, и с какво се занимавам(няма да видите неща от рода на "Сърби ме скротумът" Освен ако не съм пиян. Повечето неща ще са новини свързани с блога, аз не съм много интересен(всъщност съм интересен, но не ми е интересно да се правя на интересен) за това ще пиша повече за нещата които правя свързани с блога или други мои проекти, от колкото за нещата които правя свързани с други дейности от живота ми, като личната ми хигиена и състоянието на скротумът ми. А сега просто за забавление, незнам дали знаете, но Twitter имаха доста проблеми с големия брой потребители които се бяха навлекли по едно време, и сайтът им досат често крашваше, като пародия на това ето едно клипче:

http://www.techcrunch.com/2008/08/08/the-rise-and-fall-of-twitter/

03 септември 2008

Yagcbp: yet another google chrome blog post

Въпреки заглавието този пост няма да е точно за новия гугъл супер джаваскрипт мега браузър, а за послредствията от него. Какво знаем за този браузър? Че ще е ефективен при много отворени табове, и че има нова супер мощна джаваскрипт виртуална машина. Това означава 2 неща, първо край на firefox краш-овете. Arena-bg има лошото свойство да срива браузарът ми когато отворя прекалено много страници на веднъж, въпреки че използвам flash-block за да блокирам огромното количество спам на тракера им. Ако изключа Flash-block нещата стават още по непоносими, защото сега и целия ми компютър(сравнително мощна машина работеща с Линукс) започва да се държи нестабилно. Сега този проблем е до някъде решен с chrome до известна степен, всеки таб е отделен процес, и джаваскрипт трябва да върви доста по стабилно, също така и ако някой таб излезе извън контрол, няма да крашне целия ми браузър, както става сега. До този момент firefox беше най- добрия браузър който съм ползвал, но най доброто беше супер скапано, крайно време е да се размърдат и да оправят лайняния си ураган наречен интернет. Със новата джаваскрипт виртуална машина, имаме шанс да видим нова революция в нета. Все повече и повече приложения се изнасят в облакът, един от най тъпите термини които някога съм чувал, по добър от "потокът" ако някой си спомня един от епизодите на "До краен предел" преди години, когато всички хора имаха чипове в главата им, които ги свързват с интернета, който се нарича потока, днес сме почти на това ниво. iPhonе-ът ни помага доста в това направление, ако можехме да имплантираме iPhone-а в главите си, животът щеше да е толкова по лесен(сериозно, намерете си "до краен предел" почти всички епизоди са брутално яки, а този с потока е направо предсказание за бъдещето, правен е преди идеята за web 2.0 да излезе, така че говорим за качествена научна фантастика). Всичко това със тоя облък и тоя хром и тоя i телефон и всички тея втори версий на нещата накара много хора да се занимават със една тъпа тема. От известно време хората започваха да определят браузърът като новата операционна система, твърдейки че скоро няма да има много значение на каква система работиш, дали е линукс, макинтош, уйндолс или iPhone-а, или чип закован за челото ти, важното е че всичко някой ден ще се върши на сървърът и ще ти пращат просто html-страници. След това се появява AJAX и ОУ МАЙ ФЪКИНГ ГОД колко ужасии съм виждал. за всеки добър AJAX сайт има 100 сайта тип "Вижте ме, имам javascript и хвърчащи букви" Десет години преди тези хора имаше едни други хора които правеха сайтове тип "Вижте ме използвам blink html таговете и анимирани gif-ове и имам мигащ текст и дразнещи реклами" После се появиха и сайтове тип "Вижте ме, имам FLASH и сайта ми се зарежда 4 минути!". Blizzard на теб говоря, трябва да направите toggle flash по видимо, или направо да разкарате flash-а, не всички живеем в Корея, и не всички имаме достъп до гигабитови интернет връзки!(това е преувеличение разбира се, но аз живея в град където за 20 лева получаваш 10 пъти по малко от колкото получаваш в софия за същите пари, говорим за интернет достъп).

AJAX означава "Джаваскрипт вече работи", разбира се има някой много готини AJAX сайтове, но в много случаи може да се мине без помията. Разбира се сега AJAX и Chrome променят малко играта, идеята за облакът е че приложенията ще работят на сървърът, а браузърът ще е просто интерфейса. Нещата се променят сега, когато javascript не само работи, но работи като хората. Това отваря врати към възможността да набутаме още говна в браузърът, но и също така да родим гениални приложения, разбира се съотношението както винаги е 100 към 1 в полза на лайняния отбор. По мое мнение хората които се надяваха десктопа да умре и да набутат всичко в облака, малко са преебани, защото сега браузърът става десктопа, а облакът е просто облакът който е още един инструмент и ресурс до който потребителят има достъп. Вместо KDE вече ще ползваме Chrome и вместо c++ ще ползваме javascript(Някой хора се радват че няма да им се налага да пишат C++, но хора като мен се ужасяват, защото ще трябва да пишем javascript, сами преценете кое е по лошо). Тези нови тенденций накараха разни хора да се замислят за предефиниране на терминът "Операционна система", вече операционната система от програма която управлява ресурси и прави връзка между хардуера и приложенията, се превръща в браузър, който управлява ресурси и осъществява връзката между Low-level операционната система и уеб приложенията, които се изпълняват в браузърът. Това е БулШит! Ето статията от която разбрах за тези циркулиращи идеи(преди само го бях чувал като метафора, но не и като реално предложение за терминология)

Тази статия беше постната на Hacker News и нялокло минути след като я прочетох написах първия коментар:

http://news.ycombinator.com/item?id=293816

за сега имам най много положителни гласове в цялата тема:

http://news.ycombinator.com/item?id=293792

Превод на коментарът ми:


Вече има термин за това в какво се превръща браузарът:

http://en.wikipedia.org/wiki/Operating_environment

Защо хората се карат? Вместо приложението да работи върху Х или в Bash, ще работи в браузърът, няма смисъл от спорове.

пп Всъщност си измислих термина "оперативна среда" И като го проверих в гугъл, той вече го е имало


Историята е истинска, странното е че определението което си измислих за термина и това което вече съществуваше, наистина бяха едно и също нещо, един вид да не знаеш какво е телевизор, да измислиш машина която да показва картиин и звук, и да го кръстиш телевизор, и да разбереш че същото нещо със същото име е съществувало вече. Това е офтопик, извинявам се.

Истината е че в началото беше шел-а, Bash и още куп други, по късно се е създаден Alto PC-то(технически погледнато е било доста преди bash и дори преди Bourne Shell) и начинът по който използваме компютрите си се промени(е от 68-ма до 84-та има един период в който повечето хора дори не са чували за домашен компютър, а после период от 84-та до 91-ва когато повечето хора не са чували за мишката, но все тая). След това е измислен Х, и по късно KDE и Gnome за уникс, както и windows за DOS се появяват, това всичко за оперативни среди, нещо в което ти работи програмата, днес имаме доста оперативни среди, всякакви, почти всеки различен модел телефон си има различна оперативна среда, а уникс света е разпилян на десетки уйндол мениджъри и шелове, програмирането на истински мулти-платформени приложения беше ад. 90-те, странното е че през това десетилетие 90%+ от програмистите пишат за една единствена платформа(днешно време предимно игнорирана) Проблем няма, повечето хора си пишат С++ за win32 и не се притесняват. появата на мобилни устройства направо ги разтърсват, windows CE се появява и се проваля, и това странно нещо интернет също се появява, но не се проваля, хората които не го разбират се провалят(.com мехурат е причинен най вече от тъпи ню-йорк бизнес курвета, не от лоша технология, ако сте гледали филма Август, хора като главния герой са виновни). Идва Sun, и JAVAAAAAA, "най после език от който не ме боли десния лоб" Възкликнали умните C++ програмисти, "най после мултиплатформена система за програмиране на мулти платформени решения" казали тъпите C++ програмисти, "Sun Sux" казали Unix C++ програмистите и си продължили живота. Java се проваля в ролята си на език за писане на приложения които да работят в браузарът, поради няколко причини, първо Java съкс, и Sun съкс, второ тогава интернет връзката е била по скапана, и трето по дяволите, някога да сте ползвали Java аплет в нета? Не съм виждал свестен Java аплет в живота си, всеки един е бил боклук, и не е работил както хората, понякога не е работил с нищо друго освен IE6. И за това години наред хората си мислят, няма проблем, ще напишем perl скриптове които да генерират html-а и cgi скриптове за да ги пращаме до браузърите и така се ражда идеята за облакът. По късно идва php и лайняния ураган става все по мощен, после идва и RoR и в лайняния ураган започват да хвърчат и рубини, но кой иска да е сред ураган в който остри рубини хвърчат с 200 километра в час във всички посоки? да не броим и лайната. Javascript е само едно от проклятията на нета и само един от различните цветове говна в нета. Crome е една от първите стъпки да укротим този лайнян ураган, от милиони некадърни php програмисти, и от милиони ужасни флаш сайтове, и отекуп ужаси. Ето лошата страна, тези неща няма да изчезнат, просто ще се появят повече рубини и повече качествени приложения, така че ще имаме избор и ще можем да игнорираме лайната. А какво е бъдещето на десктопа? Близкото бъдеще е много добро, някой виждал ли е на скоро KDE? Красота! Уеб приложенията няма да могат да настигнат много от функционалността на десктоп приложенията с години, едва ли ще видим QT еквивалент написан на javascript скоро(Говоря не в смисъла на javasript библиотеки, а за javascript библиотеки със еквивалентна мощ и леснота на разработване). Също така ще отнеме известно време докато се появят и други скриптови езики за браузарът, за сега Ruby и Python се използват за server side програмиране, а javascript е за client side, кога ще можем да пишем изцяло на Python всичко от моделите, до интерфейса в браузарът? Нещата са близо и има положителна разработка в тази насока, вече дори може да се ползва Ruby заедно със Crome javascript виртуалната машина(и е по бързо от оригиналното ruby) Нещата изглеждат добре, Скоро ще имаме мобилност и компютри които струват 50 долара ще имат същите възможности като този за 500 долара сега, или поне за потребителска работа(офис, филми, музика) iPhone-ът е първата стъпка. Информацията ти ще е по сигурна защото ако си изпуснеш лаптопа, имаш 10 бекъпа в нета, и имаш безжичен интернет почти на всякъде къдет оима цивилизация. Дали друг подобен лайнян ураган като уеб ураганът от 90-те и 00-те(иронично е че всеки век започва с знака за тоалетна, един вид започваме добре, означава че миналия век сме се хранили добре) е възможен, но не ми се занимава да предсказвам далечното бъдеще, нямам представа какво ще е то.


пп Вече работя върху pdf версия на python турориълът ми, ще бъде редактирано, ще има синтактично оцветяване и още материали които не съм поствал тук, очаквайте до края на седмицата, ако не ме пребият някъде преди това, или ако не се напия прекалено много утре и в други ден, и в по други ден.

02 септември 2008

Любими песни от лятото

Лятото е към края си, и реших да си направи кратък списък с песните които слушах това лято. Last.fm е удобен инструмент, но информацията от сайта е сортирана, така че да има тематичон летни песни в нея, както и няколко песни, които не съм слушал много лятото, но определно ми харесват. http://www.last.fm/user/Pavelludia/charts?rangetype=3month&subtype=tracks тук може да видите песните които съм слушал през последните 3 месеца, това е пълен списък, от тях сега ще отделя по летните :D

1. Sublime – Burritos слушана 34 пъти за последните 3 месеца, това не включва мп3-ката ми разбира се :D Доста готина песен, на една мнооого яка банда! Сублайм общо взето бяха лятната ми банда, това лято бяха с мен всеки ден, докато закусвах, докато четях, докато спортувах, докато спах дори(когато спа през деня, ако съм изморен, си оставям музиката да свири). Любима банда, въпреки че и слушам от сравнително скоро.

2. Sublime – Pawn Shop 25 пъти слушана песен, отново сублайм

3. Q-check – Смокиня. Невероятна банда на име Кю-чек(точно така се казва бандата, и не е случайно) Енергичен пънк, смесен със ска и реге, и малко диско и поп- фолк за вкус(извратено :D) готина банда, с готини песни, мисля че трябва да ги има из нета безплатно някъде, намерете си ги, не съм чувал подобна банда никога!

4. Joey Ramone – What a Wonderful World От скоро слушам и The Ramones, първата пънк банда, доста готина песен, кавър разбира се, изпълнена от Джоуи Рамоун, вокалиста на The Ramones. I see skies of blue, and clouds of white...

5. Jimi Hendrix – Purple Haze О Джими, трябва ли да споменавам повече?

6. Уйкеда – Да Живее Революцията. Уйкеда разбира се, и тази невероятна готина песен, освен лятно, тропическо и революционно звучене, тази песен има и разбира се известна романтичност, особено за нас, хората вдъхновени от различни исторически революций, макар и понякога да ни е нужна известна мъдрост за да преценим последствията от тези революций, пак е по добре да ги има, динамичноста е важно нещо, застоялата вода освен жабуняк, друг живот няма!

7. Q-check – Махмурлук блус. Отново Кю-чек, тази песен наистина е кючек, защото след известна пънк/ска/регге част в началото, започва пънк/ска/регге кючека със елементи откраднати от великия АМЕТ!!! Да чуеш Гъци Гъци съпроводено от брутални китари и мощни барабани е наистина освежаващо, и трябва да знаем че ние, хората обичащи музиката, не трябва да мразим чалгата, а трябва да и се смеем, друго не заслужава, трябва да се смеем и да се наслаждаваме на живота, без омраза към чалгата, само с подигравки :D

8. Обратен Ефект – Колю Пияндето. Някой спомня ли си тая банда? Разбира се че ги помните, лятото е перфектното време да си ги спомните, да живее ска/регге/пънка!!!

9. Mark Foggo's Skasters – What a lovely day for a hanging Тази много готина ска банда трябва да е на списъкът на всеки ска-маниак, защото марк фогго и неговите скейтъри разбиват, макар и тази песен да не е най-емблематичната им(по любима ми е тази за хашиша) пак е невероятно готина!

10. Обратен Ефект – Плис-ПЛИС Морски Бриз. Отново Обратен ефект, и този път със друга тяхна невероятна лятна песен.

11. Q-check – Шопска салата. Може да сте чували тази песен, пее се нещо от сорта на "Обичам шопската салата, мастика ледена да пия..." На татъка не знам текста, това е някъква чалга пак, но разбира се в ска-регге вариант звучи супер невероятно мега унищожително ЯКО!

12. The Paley Brothers/Ramones – Come On Let's Go Тази песен е вероятно по стара от вас, Тази версия е записана през 79-та година от тандема The Paley Brothers/Ramones, Рамоунс свирят инструментала, а другите там са по вокалите. Оригинала е написан и изпълнен от Ричи Валенс(Ричард Валенсуела) Може да сте го чували, през 50-те записва La Bamba, Donna и тази песен Come on let's Go, този кавър на The Ramones е приличен, и ме кефи доста, рокен рол форевър!!

13. Bob Marley – Redemption Song как може да минем без Боб марли? Очуден съм че съм слушал толкова малко боб марли лятото, повече го слушам на mp3-та и за това вероятно го няма никакъв във класацията ми.

14. Crowfish – Apart. Момчетата от варна са доста готини, макар и да не слушам точно този стил много, и макар и да не слушам точно тази банда много, все пак ги смятам за яки.

15. Уйкеда – А ми да не би да съм се пак объркал Отново уйкеда, и отново невероятна песен, в тази се пее за изгревите, през седмицата в която се будех в 5 сутринта, защото не можех да спа през ноща(незнам защо, но една седмица просто не можех да спя) досат често посрещах изгревите с тази песен.

16. Уйкеда – Уйски с фъстъци Отново уйкеда, уйски с фъстъци, супер песен, и на мен ми е кофти че пия сам понякога :D

17. Plastic Bo. – Шахта. След бутилка и половина, люта гроздова ракия, кющата си да намеря, тръгнах смело на бургия, тротоара ляв не давах, и десния си беше мой, след паважната екзема, сякъш бях участник в бой, лошо е да пиеш нещо, с градус близък до бензин, после я прегърнах страстно и целия останах син" СУпер банда от Асенов град, дори имам последния им албум на оригинално СД, заслужава си парите!

18. Jimi Hendrix – All Along the Watchtower Отново Джими, Никой не може да го надмине, никога!

19. Sublime – Smoke Two Joints Песен, която доста често се присвоява на Боб Марли, не, той няма такава песен, оригиналната песен е от The Toyes, и е написана през 83-та, кавърът на Sublime има едно изпълнение на живо, при което гласът на Брадли Ноуел(вокала на Sublime) малко напомня този на Боб Марли, но не е негова песен. Може да ми вярвате, ако не на мен, то на уйкипедия http://en.wikipedia.org/wiki/Smoke_Two_Joints

20. Plastic Bo. – Старата пловдивска Свършвам отново с Plastic Bo. тази песен, за разлика от повечето гореспоменати, я притежавам легално, чрез СД, купено, с пари, да! Голям кеф е да слушаш тази песен във Flac, вместо във гадния mp3 формат!!


И така, ако погледнете профиал ми в last.fm и линкът от горе, ще видите че това лято съм слушал доста по тежки неща, които не бихте си пуснали на плажа докато лежите и пиете мастика. И все пак не ми пука! Обичам всякъква музика, видяхте, дори и чалга до някъква извратена и ограничена степен :D Да живее Хардкора, пънка, регето, ска-то, хип-хоп-а, джаз-а, рокенрол-а, блус-а, метъла(щях да го забравя) и всеки друг откачен стил който слушах това лято!

Първи стъпки в програмирането с Python. част 8. Нещата от живота

Index:
1.Интродукция
2.В началото бе словото
3.Ю толкинг ту ми?
4.Ужаст и страхопаника
5.Императорът и дракона
6. Драконът и Императора
7.Писна ми да измислям тъпи имена


8. Нещата от живота

Стигнахме до последната част от каквото и да е това което го пиша. Днес ще говорим за нещата. Какво е едно нещо? Ами това е нещо което има някакви свойства, може да правиш нещо с него, и понякога то самото може да прави нещо. Какво е свойство? Това е също нещо, свойствата също имат свойства, може да правиш неща със свойствата и понякога те самите могат да правят неща, А какво е "Способността на нещото да прави" нещо? също е нещо, също има някакви свойства и също може да правиш нещо с тази способност на нещата. Обърках ли ви? Това е обектно ориентираното програмиране: Най лесния начин да си заслужиш боя, като напишеш програма, 80% от която е ненужна архитектура и изпълнява просто административна функция. Кой ще те бие ли? Всеки който има нещастието да работи с теб някой ден :D До тук с абстракциите.(чети от тук на татък почвам с истинските абстракции, а не абстракции на абстракциите)

В обектно ориентираното програмиране най основния елемент е така наречения клас. Класовете са един вид описание на нещата, на обектите. В python на теория всичко е обект, защо само на теория? Няма да ви обяснявам, вече сте достатъчно объркани. Обектите имат свойства, които в някой езици се наричат точно така, "свойства" или properties, в python обаче им викаме атрибути, т.е. нещо което принадлежи на обекта. Обектите с които можеш да правиш нещо с класовете, и способността им да правят те самите нещо се наричат методи. Вече разглеждахме тези неща, методът е подобно на функция нещо, което се съдържа в класа и или променя самия клас, или извършва някакво действие в зависимост от класа. Да разгледаме един клас:

class classs:
i=1222
def pp(self):
return self.i


Този клас на име classs има един атрибут и един метод, атрибутът i е равен на 1222, а методът му pp връща този атрибут. Методът се дефинира също като функция, само че първия аргумент е self. Няма да разберете self ако го обясня точно сега, ще ви стане ясно след момент. Класът е просто описание на нещо, той обяснява как нещо работи, какво има в това нещо и как се казва класът от такива неща(от там идва и името на конструкцията). За да имаме наистина нещо с което можем да работим трябва да го създадем, използвайки класът като негово описание. Това е по просто от колкото може да си представите:

>>>x=classs()
>>>x.i
1222
>>>x.pp()
1222

Действието от първия ред се нарича инстанциране, т.е. създаваме обекта тип classs. Сега х е обект и има атрибут i и метод pp() до които имаме достъп. както виждате от горния пример. Сега е времето да обясна self. Това е нещо като псевдоним за името на инстанцията. Методът pp() трябва да ръвне като стойност един от атрибутите на x, но понеже това е само описание на обекта, а не истинския обект, не знаем как ще се казва той, за това първия аргумент на методите винаги е self, за да имаме достъп до имената в обекта(в случая това е x но е същата файдата като sluchainoimenaobect, все ти трябва self). Това self дразни много хора, разбира се на мен не ми пука, защото не пиша много обектно ориентиран код, и ако мога го избягвам(невъзможна задача понякога, или поне непрактична).

Вече ви обяснявах за средите и за пространствата от имена, класовете в своята същност са точно това: среди с имена. В тях се съдържат имената и дефинициите на методите и атрибутите, единствената разлика е че сега е в отделно пространство от имена, както при функциите, ако си спомняте, там всяка променлива е локална, вътре във функцията, тук тези променливи са локални вътре в обектът. Достъп до тези имена имаме чрез точката x.i означава "дай ми i, който е от пространството x" Без значение дали е от клас, или модул. Не съм обяснявал модулите, но на кратко това са файловете с .py на края, в които си пишете кодът, те са модули, и също са пространства от имена, като класовете и също съдържат имена и променливи(тези които вие пишете). Всъщност класовете и модулите са на теория почти едно и също нещо, контейнер с имена и функции. Може дори да слагате вътрешни класове в класовете си, те са един вид отделни програми(или поне така може ад мислите за тях). Не знам тук какво успяхте да разберете от това обяснение, но когато аз учех тези идеи не ми беше лесно. Не случайно ви обърках в началото, защото наистина е объркващо. Веднъж схванете ли простите концепции обаче, ще разберете че обектно ориентираното програмиране в същността си е тривиално. Поради тази причина и е доста често експлоатирано по нехуманни начини, но в повечето случаи лош обектно ориентиран код не означава катастрофа, а по скоро купчина неприятности, които просто се трупат, и не могат да навредят докато не се натрупат МНОГО. Убунту има 46433(правилно сте прочели) бъгове, и това са само отворените, има около 21342 непотвърдени, и от всички тези само 28 са критични, трябва да благодарим на обектно ориентираното програмиране, където бъговете са трудно доловими и лесни за постигане, с достатъчно невнимание. За да не е сухо съвсем вашето дърво със знание, да го напоим още малко, със знание за наследяването. Да речем че имате един тип нещо, и искате да имате друг тип нещо, който е като другото, но по раклично, да речем, имате клас голф, и друг клас мерцедес, те са общо взето същите, само че мерцедесът има друга цена :D, може да създадем един клас car и два субкласа golf и merc:

class car:
type="automobile"
country="Germany"
def action(self):
print "moveing"

c=car()
>>> c.type
'automobile'
>>> c.country
'Germany'
>>> c.action()
moveing
class golf(car):
def action(self):
print "moveing loud"

>>> g=golf()
>>> g.action()
moveing loud
>>> g.type
'automobile'
>>> g.country
'Germany'
class mercedes(car):
def action(self):
print "moveing with style, bitch"

>>> m=mercedes()
>>> m.action()
moveing with style, bitch

class golf3(golf):
def action(self):
print "chalga, bitch!"

>>> g3=golf3()
>>> g3.action()
chalga, bitch!
>>>

Да видим какво разбрахме от тук, мерцедес и golf са коли, те са от германия и са тип автомобил, също така колата се движи, голфа се движи шумно, а мерцедесът със стил, имаме и golf3 който е тип голф, който освен шумно се движи и с чалга! Виждате добре синтаксисът и вероятно разбирате че това е умствен модел, за това какво ние разбираме под нещо, което съществува. Можем да си мислим колкото си искаме, за компютърът този модел е само пространство от имена, със методи и атрибути, които ние може да наричаме така, но те са просто променливи и функции. Става въпрос за мислене, ние възприемаме света като изгладен от тези неща които съществуват, а в програмирането работим със абстрактни концепции, които не съществуват извън нашите глави и в представата на компютъра за нашето разбиране. Всичко което използвате като софтуер, е просто метафора, за инструмент, нещо което ползвате за да постигнете нещо. И ето с какво ни оставя обектно ориентираното програмиране на края:

С много мощен инструмент за моделиране на обекти от истинския свят, система за абстракция, която може да се използва по много гъвкави начини, както и много прост синтаксис, бихте се съгласили с мен че класовете имат по прост синтаксис от изразите генератори, да речем. Също така имаме начин да създаваме свои инструменти за работа в самия език, можете да напишете своя версия на списъкът, който да им само 10 елемента, а не безкраен брой, знаков низ, който да може да се променя на място, и да не е непроменяем, както е сега в езикът. Разбирате за каква мощ говорим нали? Обектноориентираното програмиране е инструмент, но трябва да сте мъдри с него, той не всемогъщ и всезнаещ и всеможещ, и лесно може да се увлечете в програмистка авантюра и да произведете код, който буквално прилича на спагети.


Изход: Това беше последната част от тази поредица за python, имам план да я вкарам в едно лесно pdf-че и може би да поразширя съдържанието и да оправя някой гафове в другите части, така че да става за четене, също така ще има и други поредици, python е единствения език за който мога да блогвам, този наръчник едва ли ще е много полезен за всеки, той е върхът на върхът на върхът на айсберга, но python е толкова прост, и толкова прозрачен, че под водата няма много айсберг, така че ако подхванете сериозно езика, едва ли ще бъдете изненадани прекалено много от него. От тук не можете да научите езика, идеята беше да направя нещо като въведение, така че ако някой се интересува от езика, да го изгоня с правописните си грешки и лош стил на писане, и ако наистина е мераклия да го накарам да търси другаде материали и да се научи добре на езика. Python е лесен и забавен език, писането на това беше забавно, дори никой да не го харесва, пак беше забавно и се накефих, също така открих колко скапан е blogger редактора за писане на код в него и форматирането му правилно. Майната му, pdf-а ще си има и оцветяване и всичко :D Майната му на html!

01 септември 2008

Първи стъпки в програмирането с Python. част 7.Писна ми да измислям тъпи имена

Index:
1.Интродукция
2.В началото бе словото
3.Ю толкинг ту ми?
4.Ужаст и страхопаника
5.Императорът и дракона
6. Драконът и Императора





7.Писна ми да измислям тъпи имена

Днес бях обещал класове, Всъщност като се замисля май не обещах нищо, така че ще си позволя вместо с класове, днес да се запознаем с функциите генератори, с изразите генератори, и с генератори на списъци. Също ще засегна малко и темата за итераторите. Май стана много.
И така, спомняте си как можем да използваме for за да преминем през всички елементи на дадена последователност, това се нарича итериране. Итераторите са обекти които имат метод next(), т.е. обекти които дават някакъв резултат, когато извикате методът next() върху тях. Не съм обяснявал методите, но на кратко, това са тези неща, които приличан на функций, които следват след даден обект и точка след него, да речем имаме списък x=[1,3,2,4,6,5] и след това напишем x.sort() и ще x ще е преобразуван на [1,2,3,4,5,6], това е различно от функциите, защото методите са вътрешни на обектите(числа, списъци и т.н.), а функциите са външни, в повечето случаи методите променят самия обект, а функциите връщат друг обект като резултат(това не винаги е така). След краткото обяснение на методите, да се върнем на итераторите. Същия този списък x който сега е [1,2,3,4,5,6] ще го направим на итератор, както прави for цикълът.

>>>x=iter(x)

x сега е итератор, можем да използваме методът next() върху него:

>>> x.next()
1
>>> x.next()
2
>>> x.next()
3
>>> x.next()
4
>>> x.next()
5
>>> x.next()
6



както виждате, методът next() връща следващия елемент от итератора, по този начин ако има много елементи в списъкът, for ще е по бърз като изпълнение, защото само по 1 стойност от списъка се обработва на веднъж, вместо целия списък. Това има по общо приложение.

Генераторите са подобни неща, те са функции, които вместо return използват думичката yield. "Само това ли?" ще си кажете вие, и "Не съвсем" ще ви отговоря аз. Тази функция, която използва yield вместо return връща обект генератор, който е като итератора, т.е. можем да минем през него с for и можем да използваме метода next(), всеки път когато бъде повикан този метод, получаваме генерирана стойност. Да видим подобен пример:

def gen(list):
for x in list:
yield x


когато повикаме функцията x=gen([1,2,3,4,5,6]) получаваме x който е генератор:

>>> x.next()
1
>>> x.next()
2
>>> x.next()
3
>>> x.next()
4
>>> x.next()
5
>>> x.next()
6





Същата ситуация. Може да пишете по сложни функций, които да изчисляват нещо и да го връщат при всеки yield, но няма да давам по сложни примери за сега.

Сега ще поговоря малко за list comprehentions или генератори на списъци, и изразите генератори(genrator expretions). Първите се използват по често от вторите, ще ги обясня и двете. Горния примерен х може да бъде получен и по следния начин:

x=(x for x in xrange(1,6))


тук (x for x in xrange(1,6)) е израз генератор, генераторът се слага в кръгли скоби и в него се пише изразът x for x in xrange(1,6), това е малко слошно за обяснение, ето как може да се прочете, за да ви е по ясно, "дай ми x за всяко x във интервала от 1 до 6, и го сложи в генератор. Това ще ви стане по ясно, като обясня генераторите на списъци. Те имат почти същия синтаксис, но се пишат в квадратни скоби вместо в кръгли([]), и връщат списък вместо генератор, ето как:

>>>x=[x for x in xrange(1,6)]
>>>x
[1,2,3,4,5,6]


сега разбирате ли? "Направи списък в който всеки елемент е елемент от обхвата 1 of 6", можем да го направим да създава списък със четни или нечетни числа по следния начин:


>>>x=[x for x in xrange(1,6) if x%2 != 0]
>>>x
[1,3,5]


Този код връща само нечетните числа, чете се "създай списък, в който всеки елемент е елемент от обхвата 1 до 6, ако остатъкът от деление с 2 е различен от 0" Спомнете си делението с остатък, ако разделите 4 на 2 няма остатък, но 3 делно на 2 дава остатък 1, ако сте в 2-ри клас де :D Това прави операторът %. Същото става и със изразите генератори, само че вместо списък ще върнат генератор който има само нечетни елементи.

Това е за сега, останете за да видите по късно, за да видите и краткото ми обяснение на синтаксисът на класовете.