30 август 2008

Сайтовете за социални новини

Днес с помощта на великия голям брат Гугъл и неговия прекрасен инструмент Google Analytics видях че около 11% от трафикът към блога ми(да имам десетки хора които ме четат всеки ден) идва от сайта http://svejo.net. Проверих сайта и видях че това е Digg клонинг. Видях също така че е написан на Ruby on Rails. Хората които го правят със сигурност разбират от програмиране, сайтът е конструиран прилично, и изглежда имат успех. Разбира се аз едва ли ще ползвам тяхната услуга. Имам доста специфични изисквания към моите новинарски сайтове. Не ползвам Digg, и едва ли ще ползвам svejo.net поради една единствена причина: Съдържанието им! Аз съм прекалено Nerdcore Geeksta и повечето съдържание в тези сайтове е чист шум в моите очи(това има потенциала на култова фраза). Ето какво има на първата страница на svejo.net в този момент:

Сама няма да се оближе

Палави саудистки жени (14 снимки)

Феномен в Китай, откриха котка с крила


Това бяха просто по абсурдните имена на статии :D Аз съм техничар, имам нужда от технически новини, влизам в поддиректорията технологии:

Стоп на перверзните снимки с новия 3G iPhone


Телевизор-аквариум

Това за iPhone-а го знаех от мнооого отдавна, а това за телевизора аквариум не ме интересува особено, не гледам телевизия, и не харесвам риби, предпочитам влечуги. Общо взето нищо интересно, няколко новини за google и apple и нищо особено, което да ме заинтригува. На помощ идва reddit.com . Като идея е сщия, имате сайт в който хората постват линкове и ги гласуват на долу и на горе. Хората ги коментират и т.н. Какво е различното? В reddit също има абсурдни и тъпи статии, скучни политически новини и други неща които не ме интересуват, защото съм прекалено задръстен, ето какво обаче мога да правя с reddit, мога да си къстомизирам началната страница, да показва само новини от интересни sub-reddit-и като такива специализирани с определена технология или език, или такива за програмиране и технологии като цяло. Аз най вече си прекарвам времето в programming.reddit.com и python.reddit.com Новините са интересни и много, за разлика от голямото количество скучни и неорганизирани технологични новини в svejo.net, за digg не знам, но там не влизам. Reddit не е перфектен, има проблем със спама в коментарите, проблем с който slashdot и digg са известни, проблемът на редит е примерно в някоя статия за програмиране някой ще каже:

In Soviet Russia Meta-programing lisps you

и някой ще отговори

In Lisp Russia Meta-programming soviets you

и така докато не свършат комбинациите, когато се добавят нови думи и т.н. Не веднъж съм виждал такива поредици от простотии. Непоносимо е, и за това рядко чета коментарите в reddit.

Доста по приятно място за прекарване на свободното време е Hacker News. Сайтът създаден от небезизвестния предприемач, лисп хакер и есеист Paul Graham. Създателя на фирмата за seed инвестиции в млади уеб компании Y combinator, автор на 2 книги за Lisp и създател на един нов диалект на езика създава невероятния хакерски форум hacker news специално за хора които се интересуват от технологии и IT бизнес, всичко от нови езици и библиотеки, до новини за инвестиции и проекти. Сайтът има много прост дизайн, толкова прост, че чак е красив. Работи много просто, ако искаш да пуснеш линк към блог или статия или сайт го правиш, и хората го виждат и гласуват, коментират и т.н. Ако искаш да започнеш дискусия просто оставяш полето с линка празно и пишеш коментар. Системата за оценяване е много проста, ако имаш над 25 карма точки може да гласуваш и на долу мненията на съфорумците ти, ако спамят или ако не ги харесваш :D Те се движат на долу и избледняват. Ако харесваш някое мнение го гласуваш на горе и то излиза на пред. Простата идея на digg и reddit в този сайт е изпълнена перфектно, за сега нивото на коментарите е много високо. Поради причината че сайта е написан на Lisp от олд скуул Lisp програмист с две дебели книги в резюмето си, спамът е доста рядък. Paul Graham е създател на доста интересна технология за филтриране на спам, базирана на изкуствен интелект, в сайта му има есета на темата. Сайтът е достатъчно умен да филтрира повечето спам, а каквото не се филтрира бива изтрито от модератори, или гласувано на долу. Тайната на успехът на този сайт освен технологична е и културна. Като се концентрира най вече върху по хардкор технологичните си потребители, и не допуска политически или други тъпи новини, сайтът се пази от мейнстрийм влиянието и проблемите с масовия спам. Въпреки това сайтът не е елитарен, просто ако си 14 годишно спамерче в този сайт няма да и ти е интересно, както в digg или reddit, там не се допускат тежки огнени битки, въпреки че се случват интелигентни дискусии, които понякога прекаляват с остротата си. Сайтът не е Startup както digg, reddit или svejo.net, т.е. не му трябва да прави пари, за това може да си позволи да е скучен за масовия потребител на интернета, той е за програмисти и хора които си изкарват хляба с това, не за хора които си губят времето в блогосферата(като мен :D)

Ако някой от авторите на svejo.net или хората пряко свързани с неговата разработка четат това, продължавайте добрата работа. България има нужда от повече готини проекти и start-up-и, и ако искате да подобрите сайта си, така че да е по привлекателен за нас елитарните копеленца програмистите, погрижете се качеството на съдържанието ви в отделните категории да е по високо, поучете се от конкурентите си :D И благодаря за 15-те човека трафик. Нищо че bounce rate-а е 100% :D

29 август 2008

Адът на училищната математика

Почти сме септември, това означава че имам не повече от 2 седмици свобода. 12-ти клас, ужас. За 12-та поредна година ще трябва да стоя затворен в една стая по 6-7 часа на ден, с почивки на всеки 40 минути, в които ще имам право да ям и да ходя до кенефа, в останалото време нямам право на никакви други действия освен да слушам и изпълнявам заповеди. Имам книга в която се записва прогресът ми, и се отбелязват проблемите с поведението ми, в нея се записват оценките, не толкова на знанието ми, колкото на умението да изкарвам добри оценки(умението да хаквам тестове и да преписвам, в което съм майстор). В тази книжка също така има списък с правата и задълженията ми. Много напомня описанието на затвор нали? Аз съм природно любопитен, на практика и да се мъчите е можете да ме спрете да уча, това е основната функция на мозъкът ми. Даскалото се опитва да ми помогне със моят поход към знанието, но за жалост това е по скоро страничен ефект от нуждата да държиш хлапетата далеч от улицата цял ден докато родителите им са на работа. Обучението им в псевдо-полезни дисциплини с средно-ефективни методики е само страничен ефект, не може да ги държите затворени цял ден без да правят нищо нали? За да изпълнява задълженията си едновременно да държи учениците под контрол и да ги образова до някъква прилична степен, колкото да могат да функционират в обществото, образователната система използва едно много древно зло- администрация! Много голяма част от администрацията в нашата държава(а и в повечето други държави в които има администрация) е създадена само и единствено да потдържа другата администрация. В училищните власти положението е същото, има много голямо количество документи които са там само за да контролират истински нужната администрация. Това се отразява на учебния процес. Цялата система е структурирана като прогресивен процес в който се вкарват деца, и се изкарват образовани млади хора. Ето проблемът, системата е създадена с презумцията че процесът на учене е следния:

Учителя предава знанието, учениците приемат знанието в различни степени, тестовете филтрират успелите да научат, от неуспелите, успелите продължават, неуспелите повтарят.

Колко голяма част от този процес който описах горе не е пряко свързан с процесът на ученето, умствения процес на усвояването на теоретичен и практичен материал? " учениците приемат знанието в различни степени" е единствената част която е пряко свързана с този процес. Останалото е администрация и формалност. Теоретично горния процес работи приемливо добре, имаме определен брой успели ученици които са природно умни и след образователния процес са и културно богати и способни членове на обществото. Ето проблемът: хората като мен. Аз не съм особено добър в помненето, забравян неща които не са жизненоважни, или не са ми достатъчно интересни. НЕ обичам да се занимавам с едно и също нещо повее от половин час, освен ако не е нещо наистина интересно, което изисква продължително внимание(като програмирането) и дори тогава не седя 6 часа с ръце на клавиатурата пишейки код, а се разхождам, отивам да хапна и си подрямвам за да ми поработи подсъзнанието. Също така не обичам да правя излишни дейности, не обичам да се занимавам с формалности и администрация, и не обичам други хора да ме съдят и оценяват, не обичам да ми се заповядва, не обичам да седя на едно място продължително време, изморяващо е, имам нужда ад се разтъпча на всеки 20-тина минути, да подишам въздух, или да си взема нещо за пиене. Човек като мен способен ли е да извлече максимална полза от образователната ни система? НЕ! Група Нови Цветя(първата българска пънк група, сформирана през далечната 79-та) имат една песен дресировка, част от чийто текст ще цитирам:

дресираха ме в къщи, в детската градина,
в даскалото цели 11 години,
не можех да решавам правилно задачите,
шестици получават само натегачите.

Ето за кого е създадена системата, за хора които се натискат за да работят за системата, за да минеш системата не ти трябват знания, а умения да минаваш системата. Това е слабото място на която и да е образователна система на света, която официално копира този модел на европейско образование(този с класните стаи и учителите). За хора като мен далеч по ефективен модел на образование е самостоятелната инициатива. Не обичам да уча ненужни детайли, за това не ги уча, а ги записвам докато ми потрябват, вместо това се уча да анализирам тази информация, без да трябва да я знам на изуст, уча се да я прилагам, и да си вадя изводи, да я комбиниам с различин методи които усвоявам. Не харесвам да върша ненужни неща, за това използвам инструменти за автоматизацията им, най вече компютърът ми. Не обичам да действам чисто теоретично, за това което уча изпробвам на компютъра си(това е приложимо с почти всички науки, копютърът е универсален инструмент, всеки от музиканат и писателя, до физика и биоинжинерът може да го ползва в практиката си). Това е общо взето проблемът ми с математиката. Обичам математиката, но начинът и на преподаване и изпитване, както и изискванията ми идват в повече. Ако имам математичен проблем, ще напиша програма да я реши вместо мен, системата ме задължава вместо да прекарам 10 минути в мислене и писане на код, да прекарвам часове в запаметяване на формули и учене на методите им за прилагане, както и ме задължава ръчно да ги прилагам върху изходните данни, поради тази причина имам 4-ки по математика, допускам грежки, защото правя нещо ръчно, вместо да оставям машината да го направи место мен, не съм бърз сметач, и имам ужасен потчерк и често стават грежки при проверките. И все пак има нещо красиво в математиката, начинът по който всичко има смисъл, начинът по който всичко си има място и светът не е толкова хаотичен вече. Начинът по който нещата си взаимодействат. Математиката наистина е езикът на природата с койо можем да разберем красотата и. Много хора ще кажат че проблемът е в мен, просто съм мързелив и тъп, и грозен, и..., ами прави сте, и мързелив и тъпи грозен са думи които ми прилягат, но не виждам с какво ме превъзхождате в сферите в които се стремя да напредвам, друго освен теоретични познания и липса на опит не ми липсва в сферата на компютърните науки, гези две неща са важни, но ако ги нямаш, винаги може да ги натрупаш, иска се само време. Другото което ако го нямаш, не е добре да се захващаш, го имам. Ентусиазъм, достатъчен интелект, вкус към красотата и вдъхновение, всичко това го имам. И сега ме чака една година, в която учителите ми няма да ме учат на математика и български, а ще ме учат как да мина матурата, а аз наистина искам да уча... Не съм роден за този век вероятно, или пък греша? Може би точно ози век ми дава шанса да уча, въпреки системата непригодна за моя характер? Точно така, нищо не е загубено, само ще трябва да се справя с дразнението да прекарам още 1 година без да уча, а да се подготвям за тестове.

28 август 2008

Ексцентричност

Днес трябваше да пиша последната част от поредицата ми за Python която да покрие основния синтаксис и семантика на класовете и обектно ориентираното програмиране. Не познавам много тази област, също така не я харесвам достатъчно, но общо взето имам достатъчно познания за добър начален туториъл по ООП. Въпреки това не го написах днес и може би няма да го напиша утре, вероятно в други ден. Вместо това днес ще пиша за ексцентричността която доста често се проявява от много програмисти/артисти/учени.

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



Ричард Фейнман е един от най известните физици на 20-ти век заедно с Айнщайн и Стивън Хопкингс са светата троица на физиката на 20-ти век. Той е бил известен с това че е свирил на барабани, имал е неописуемо чувство за хумор, и се е занимавал с разбиване на сейфове по времето на манхатанския проект, от чисто любопитство, не защото е бил немски шпионин, просто му е било забавно да чете свръх секретни документи до които няма достъп. Кажете ми че този човек ви изглежда нормален:



Ричард Столман, бащата на свободния сорс, идеологът на едно от най важните движения в софтуерната индустрия, философ, и гениален програмист. Също така фанатичен параноик, не ползва мобилни телефони за да не го следят, не ползва кредитни карти за да не го следят, не ползва безжичен интернет по същата причина, а и лаптопът му няма свободен драйвер за wi-fi картата му, също така този лаптоп е едно от най скъпите му притежания, той не ползва софтуер който не е свободен, въпреки че няма свястна свободна алтернатива за много типове софтуер, също така го мислят за луд. Нормален ли е според вас?



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





Стив Уозняк. Гениален програмист и инжинер, шегаджия и майтапчия, легенди се носят за номерата му и шегите му. Веднъж направил заглушител за TV сигнали и го използвал за да се майтапи с приятели, заглушавайки телевизора им и карайки ги за даемат странни пози за да се оправя картината. Веднъж направил това в университета си, но имало проблем и без малко да го хванат, някой човек излязъл от стаята, после успял да изключи заглушителя и друг поел вината му, веднъж напралим шокър с който да бие ток на хора които сядат на столове, а дру гпът в даскало сложил часовников механизъм в кутия която директора помислил за бомба, часовникът бил свързан към вратата на щафчето на някакъв ученик и когато директорът го отворил часовникът затиктакъл по бързо. Този човек създава модерната ни представа за PC, неговия apple I e може би първия персонален компютър със клавиатура и монитор, както сме свикнали да ги гледаме днес, преди това са били кутий с мигащи светлини и копчета. Този човек изглежда ли ви луд?




Всички тези са ексцентрични гений(ако някой ми прати hate mail за дето сравнявам Линус Торвалдс с Айнщайн да си гледа работата, няма да му отговарям!) Не всички ексцентричи в трудните науки са гений, но със сигурност повечето то тях са поне над средното. При програмистите това е най усезаемо. Цялата им култура е един майтап, скуката и рутината са зли, това е едно от основните твърдения в хакерската култура, или поне така казва ESR, още един ненормалник, този има оръжия(да, Ерик Реймандс е собственик на оръжие, и е защитник на правото си да го притежава, също така е нео-езичник) Стереотипния хакер има следните черти:

  • Непоносимост към рутинни и тривиални задачи, ако може ще ги избегне. Това включва чистене, спане, и в екстремни случаи ядене, също така документация, офис събрания, упражнения за изграждане на умения в колектив, и всякъкви други безсмислени инициативи измислеин от шефовете им за да повишат продуктивноста им, като ги отделят от работата им
  • Непоносимост към некомпетентност, очакват хората да са компетентни, повечето не си правят илюзията че хората трябва да разбират от тяхната област, но наистина се ядостав когато псевдо експерти в някоя област не си вършат работата както трябва, такива са най често хора от отдели маркетинг, и мениджмънт, както и повечето им шефове, и в най- лошите случаи и подчинените им. Много често се чудят защо всички около тях са толкова тъпи, въпреки че в повечето случаи хората не са тъпи, просто те са много умни, но от скромност не твърдят че са гений, с изключението на Линус Торвалдс. В много случаи самите те не знаят че те са по умните и за това просто предполагат че всички други са тъпи.
  • Непоносимост към образователната система. Много от тях са имали проблеми в даскало, ако са били късметлий и не са били тормозени от съучениците си в даскало, са били тормозени от скуката и некомпетентноста на много от даскалите си. Това е актуален проблем при мен. В много малко от часовете които имам в даскало се чувствам заинтересован от материала. Системата е изградена така че вместо да ме учи да върша нещо, ме учи да мина изпитите си и да вляза в университет, където евентуално ще бъда научен да върша някъква работа. Проблемът е че аз нямам проблем с тестовете, имам проблем с материала, много от нас са природно любопитни и искаме да учим, но когато такива нещастници които са смачкани от живота се опитват да преподават на бъдещите нещастници, които още не са смачкани от живота, за нас, тези с потенциал, които искаме да учим, не ни остава много за учене, и за това или се убочаваме сами, или не се убочаваме и спим. Като се замислиш че съм прекарал 11 години от които 9 месеца на година съм прекарвал по 20 дни в месеца затворен в стая, против волята ми, принуждаван да правя неща които не искам. Със сигурност има по добър подход към образованието. Много хакери израстват подозрителин към образователната система(дори в страни къдено не е скапана) и това е оправдано, тя не им е помогнала, а ги е принужавала да търсят свои решения на проблемите си, за да я заобикалят.
  • Непоносимост към авторитетни личности. Ако сте мениджър и имате гениален програмист, който очевидно не е в час с политиката на фирмата ви и отказва да се впише в колектива ви, не разбира идеите ви и изискванията ви, отрязва предложенията ви като ненужни, и не ви харесва като цяло, това е защото повечето хакери са подозрителни към личности с власт, било то политици, държавни служители или шефове. Опитът и инстинктът им им казва че хората на чело на групи в повечето случаи са случайни некадърници, този опит идва най-вече от даскалото. Разбира се хакерите са много индивидуалистични хора и не приемат добре заповеди, препоръките са препоръчителни и дори тогава има риск да бъдете отрязан като некомпетентен(Искам да апишеш интерфейс за новото API, използвайки VB). Много често хора като тези ще изказват радикални политически идеи, които вие не бихте посмели да изречете на глас. Много от обществено приетите идеи, като например евро-интеграция и евро-атлантически ценности, за тях са кухи думи, зад които се крие думата още бумаища за попълване. В българия това не е проблем, има много хора които изказват такива мнения, но опитайте да кажете в америка че ако не е бил арабския свят, днес античните гръцки текстове на които се радваме нямаше да ги има, заради дядовците на европейците които а ги горили с кеф. Чака ви пътешествие до Гуантанамо
  • Остър език и незачитане на етикет. Истинския хакер няма да се притеснява да извади злия си език и да наплюе нещо което не харесва. Това води до много лоши неща, и последствията са очевидни, Slashdot,Digg, reddit, тези сайтове са бойни полета, и хокусът от технологични дискусий се е отместил към свещенни войни. Зед Шоу е добър пример тук, думата fukin' се среща доста често в блога му, той ведъж много брутално нахрани цялата Ruby on Rails общност наричайки ги гето, и обяснявайки колко некомпетентни некадърници са повечето хора в Rails обществото(говори за високите етажи). Много често с острия си тон засяга много различни софтуерни продукти които не харесва, също така много фирми и хора които го дразнят. Най вече бизнес типове които си мислят че стават за лидери на технологични фирми, с които е работил. Този човек изгглежда ли ви луд?



  • Много хакери могат да бъдат определени като ренесансови хора. Освен с програмиране, се занимават и/или с музика, изобразително изкуство, електронно инжинерство, писателство, журналистика, други науки, други изкуства. Аз лично се занимавам очевидон и с блогерство, което и вид аматьорска журналистика, също така и си драскам разни карикатурки, и за известно време писах комикс, който малко съм занемарил, и може би ще възтановя в близко бъдеще. Също така съм меломан и мога да запоявам.
  • Социални трудности. Представете си човек на който даскалото му е изключително скучно, той е по умен от повечето си познати, интересува се от много по различни неща, не харесва властни личности, не понася скучни хора, и намира за скучно това което много други хора намират за интересно(телевизия, поп музика, офис сърания, маркетинг кампаний). Този човек не обича да чисти или да полага какъвто и да е излишен труд, той дори няма да си помисли нещо ако е ненужно. Такива хора със сигурност имат проблем в социалните кръгове. Много от тях се явяват един вид шутовете на компанията, те са шегаджий и е забавно да си около тях, въпреки че не разбирате хобитата им и намирате идеите им за странни, едва ли бихте искали такива хора да живеят в къщата ви, а в много случаи са ви неприятни заради арогантното им поведение. Много такива хора имат приятели, не много, но имат, за жалост винаги в по късен етап от живота им, когато за свободни от оковите на образователната система, която ги принуждава да седят в една стая с 20 случайни хора, които те не са избирали за свои познати. В повечето случаи приятелите са състуденти, или колеги, или просто хора от интернет които се интересуват от същите неща. Истината е че ние не сме пристрастени към интернетът защото сме болни наркомани които имаме нужда от помощ, просто обикновенните хора са скучни, а в интернетът има толкоав много хора които разбират мъката ни.

Този пост е вдъхновен от тези два други блог поста:

http://lispy.wordpress.com/2008/08/25/do-you-know-any-programmers-that-exhibit-these-personality-traits/


http://lispy.wordpress.com/2008/08/27/how-to-get-the-most-out-of-your-eccentric-programmergenius/

25 август 2008

Първи стъпки в програмирането с Python. част 6. Драконът и Императора

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


6. Драконът и Императора

Императоре, време е да ви запозная с дракона. Днес ще говорим за функциите. Функционалното програмиране е един от най мощните похвати в програмирането, и ако се използва правилно може да доведе до много добри резултати. Властта ти над функциите не може да идва от прости заповеди както до сега. За да имаш власт над функциите трябва да ги разбираш дълбоко. Трябва да знаеш името на духът, за да имаш власт над него. Днес ще се опитам да ви обясня какъв е духът на функциите и как да го овладеете, не може със сила или с воля, трябва с разбиране и акъл!


В математиката функциите представляват зависимости между променливи. Да речем функцията f, е такава че за всяко x има число y което е равно на x+1. Или нещо такова, математиката не е толкова интересна нали :D При програмирането е донякъде същото. Имаме конструкции наречени функции, те приемат за вход някакви стойности и връщат някакъв резултат със тези стойности. Ето как изглежда една python функция:

def име на функция(параметри):
действия с параметрите


функции конструираме с def, това е съкратено от дефинирай, т.е. дефинирай функция с това име, с тези параметри, да извършва тези действия и да върне този резултат. Параметрите се слагат в скоби и са разделени от запетаи, отново имаме на края на главния ред двоеточие и отново следващите редове са отместени с 4 интервала(или 2 ако бачкате за гугъл, но НЕ и табове, много хора ще ви намразят ако ползвате табове). Ето една истинска функция:


def square(x):
return x*x


тази конструкция дефинира функцията square() която приема едно число x и връща като отговор x на квадрат. Ето как се ползва това в интерпретатора на python:


>>>def square(x):
... return x*x
...
>>>square(4)
16
>>>square(5)
25


Готино, а? Ето как викаме функциите, като слагаме параметрите им в скоби за да ги извикаме, трябва само да кажем името им и какво искаме от тях, малкото духче веднага ще дойде да ни свърши работата. Балък. Думата return се използва често във функциите, когато искате да ви върнат стойност, тук искаме функцията да върне стойност x*x, ако го нямаше и просто бяхме написали x*x вместо return x*x, функцията нямаше да върне нищо. Резултатът може да се съхранява в променливи:


>>>x=square(4)
>>>x
16
>>>x=square(x)
>>>x
256


Тук виждате как на х присвоихме резултатът върнат от square, х не е равно на square, a на резултатът му. Ето как може да направите x да е равно на square


>>> x=square
>>> x(4)
16


Когато присвоим на x името square, ние не го присвояваме, а само го караме да сочи съм същия обект(функцията) Променливите в python само сочат към обекти, а не ги съхраняват в себе си, за разлика от C++ да речем, където променливите съхраняват обекти. а square е просто променлива сочеща функция. Важно е да отбележим и че х-ът вътре в square е различен от x-а извън него. Ето какво имам предвид:


>>>def square(x):
... return x*x
...
>>>x=square(4)
>>>x=square(x)

Първия х във дефиницията на функцията е локален, той е само за самата функция, втория х на който присвояваме square(4) и по късно даваме като аргумент на square е глобален х. Представете си че всичко в def е отделна програма с отделни имена и променливи и отделен код, тя е напълно изолирана от външния свят, освен със входа си в скобите и изхода си от return, това се нарича пространство от имена(namespace). Българския термин е среда, глобалната среда е мястото където живее втория х, а локалната за square среда съдържа първия х.


>>>def square(y):
... return y*y
...
>>>x=square(4)
>>>x=square(x)


това е същото като горното, можем също така да напишем:


>>>def square(x):
... return x*x
...
>>>y=square(4)
>>>y=square(y)


същото като горните 2, ето още един пример:


>>>def square(y):
... return y*y
...
>>>y=square(4)
>>>y=square(y)


няма значение, двете променливи са различни неща. Това е важно да се знае. Да разгледаме следния пример:

>>> y=1
>>> def pp(x):
... return x+y
...
>>> pp(2)
3
>>>


Тук имаме глобалното име y което е равно на 1, също така имаме и функцията pp, която приема едно число и добавя y към него. Тази функция не е особено добре написана. Всеки може да промени y и цялата функция ще започне да прави глупости. По добър вариант ще е да се напише така:


>>> y=1
>>> def pp(x,z):
... return x+z
...
>>> pp(2,y)
3
>>>


Така функцията pp има два параметъра, и ги събира, когато я викаме първия е 2 а втория е y. Сега е по добре написано именно защото ако някой промери y, функцията пак ще си има предвидим изход, просто променяш параметъра и. Сега може да използваш pp и с други числа, да речем pp(2,5) ще върне 7, преди това беше невъзможно.

Във функциите може да слагаме всички други конструкции които сме разглеждали, включително и други функции. Ето една която принтира всички елементи на редица(списък, низ, наредена n-торка)


>>> def printlist(list):
... for x in list:
... print x
...
>>> printlist('hello')
h
e
l
l
o
>>> printlist([1,2,3,4,5])
1
2
3
4
5



Може да ползвате while,if и общо взето всичко друго във функциите, и како казах и други функции. Ето един интересен пример:


>>> def makeadder(num):
... def adder(x):
... return x+num
... return adder
...
>>> addr2=makeadder(2)
>>> addr2(4)
6


Функцията makeadder приема число за аргумент и връща друга функция която приема друго число за аргумент и прибавя старото към него, искаме да създадем функцията adder2 която да добавя 2 към някакво число? Можем да използваме def, но защо като вече имаме makeadder и той е създаден специално да прави подобни функции. Това се нарича процедура от висок ред, т.е. функция която приема друга функция като аргумент, или връща такава като резултат, видяхме втория тип, да видим още подобни:

>>> list=[1,2,3,4,5]
>>> map(square,list)
[1, 4, 9, 16, 25]
>>>


Функцията map() е вградена в Python, тя приема някаква функция и някаква последователност като аргументи и прилага тази функция към всеки елемент от последователността, и връща нова последователност със новите елементи, в случая приложи square към list и върна нов списък.

Остава да видим още една малка подробност за функциите. Анонимните функции. Това са функции без имена(очевидно). Те се създават с конструктора lambda, защо ламбда? Защото на клавиатурите ни няма гръцки букви, ето защо! Ако имаше щяхме да използваме оная буква дето мяза на Л от гръцката азбука вместо цялата дума lambda. Ето как се ползва ламбда:

square=lambda x: x*x


Тук на променливата square просто задаваме стойност функция, която приема един аргумент, и връща квадратът му. Синтаксисът е малко по различен. Lambda-та е спорен въпрос в python, и не е толкова мощна колкото def-функциите, защото не може да има повече от един ред, и не може да има синтактични конструкции като for, while, print, или if. Това я прави малко кастрирана, но в някой случаи е досат полезно нещо. Вече сме запознати с по голямата част от езика, остава да поразгледаме класовете(нещо което няма да задълбочавам) и след това ще почна със обикновени трикчета които съм посъбрал за езика, с които могат да се правят готини работи, ще ви давам примери и програми от които да се учите на основите, но общо взето по голямата част от синтаксиса го знаете вече. Сега остава да си купите някоя дебела книжка(или да си изтеглите, като мен) и да си я прочетете, все пак това е блог, не шибана енциклопедия, не може да научите език от блог.

23 август 2008

Първи стъпки в програмирането с Python. част 5.Императорът и дракона

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


5.Императорът и дракона

Днес ще говорим за императивното програмиране. Нали се сещате, онова в което казваш на компютъра стъпка по стъпка какво да прави. Заповядваш му, казваш му да направи нещо. Ти си императорът. Имаш неограничена власт, единственото ограничение което имаш е словото ти. Владението на езикът ти е единственото ограничение на властта ти. Да ти дадем малко власт. Конструкциите на езика и синтаксисът са днешните ни теми. Нямам много встъпителни думи освен само че с властта идва и отговорността. Вече не си дете което се мъчи да разбере сложната материя на програмирането, а си император на света, и думите ти са закон, подбирай си думите мъдро.

Ако,ако,ако...

if, else конструкциите са най известните в програмния свят, почти всеки истински език ги има(дори LOLcode if can has chezeburger?) Това дава много мощ. Ето как изглежда:

if bored:
kill kittens
else:
not kill kittens

Ето как работи: Имаме ключовата дума if следвана от израз, ако изразът е верен(например ако bored е вярно) да изпълни действието на следващия ред(да убие котета). На следващия ред има else това се изпълнява ако bored е грешно, дано не ви е скучно, защото ако ви е скучно ще убия котката ви!!! Така след това отклонение да се върнем на въпроса. Забелязвате че втория и четвъртия ред са подредени малко по на дясно от другите, това е защото в python не харесваме фигурните скоби {} и ги ползваме само за речници. Вместо да слагате изразите си в скоби просто конструирайте блоковете си с интервали. Не използвайте табове, ако редакторът ви е настроен да слага интервали вместо табове, ок, НО НЕ ИЗПОЛЗВАЙТЕ ТАБОВЕ, също така използвайте ако можете 4 интервала, или 2, ако работите за Гугъл, ако не работите 4!!! Всички структури в Python се конструират със интервали, така знаеш кога нещо принадлежи на нещо друго, а и е по четимо, няма фигурни скоби, и всичко е подредено, красиво е, чисто е, ако не ти пука за чистотата на кода ти ще убия кот.. та ето още един по практичен пример:

if 5 in [1,2,3,4,5]:
print '5 e vuv spisukut'
else:
print '5 ne e v spisukut'

просто е нали? Ето още една готина конструкция elif това е съкратено от else if и се използва ако трябва да проверите повече от 1 нещо:

if 5 in [1,2,3,4,5]:
print '5 e vuv spisukut'
elif 4 in [1,2,3,4,5]:
print '4 e vuv spisukut, no 5 ne e'
else:
print '5 i 4 ne sa v spisukut'


това е еквивалентно на:

if 5 in [1,2,3,4,5]:
print '5 e vuv spisukut'
else:
if 4 in [1,2,3,4,5]:
print '4 e vuv spisukut, no 5 ne e'
else:
print '5 i 4 ne sa v spisukut'

Кое е по четимо и просто? Разбира се първото, следователно ако предпочитате второто сте тъпи и грозни, и нямате вкус към красотата. Да продължим.

Какво е 5 in [1,2,3,4,5]? Това е израз който връща една от двете стойности вярно или невярно, ако 5 е в списъкът връща вярно, ако не е, връща невярно. Сега ще ви разкажа за един човек наречен Бул. Бул бил блестящ математик и измислил буленовата логика. Край. Не ви ли хареса? Не съм по приказките, на кратко буленовите типове са два истина и неистина, пир python всичко е истина освен нулата и неистината(пише се False) Ако напишете примерно:

5==0 ще получите False защото 5 не е 0, освен ако не сте надрусани, но ако сте надрусани ви е забранено на програмирате, по добре да се качите да карате, щетите ще са по малки, виждали ли сте winamp напоследък? Точно когато си мислех че тази програма не може ад стане по скапана и хвърлих един поглед днес, не пийте/друсайте докато програмирате за доброто на всички ни.

ако напишем:

if 5==0:
нещо си
else:
нещо друго

тук ще се изпълни само другото нещо след else-а, но ако напишем

if (5==0)==False:
нещо си

винаги това нещо ще се изпълни, защото 5==0 винаги е грешно. Това се нарича буленова логика, има смисъл нали? 5 НЕ Е 0 никога!!!

Ако напишете:

if 0:
нещо си

също нямад а се изпълни това нещо, защото 0 е грешно, но ако напишете:


if 0==False:

тук вече ще получите отговор вярно(True)

нулата е грешна? това вече не е особено логично, но карай, логиката не е основата на нашата вселена, погледнете MTV за доказателство.

Продължаваме със следващата конструкция while. Ето как изглежда:

while not bored:
not kill kittens
else:
kill kittens

чете се докато не е скучно, не убивай котета, ако това не е вярно, убивай котенца(повтарям, не скучайте, защото умират котета)

Тук е почти същото, имаме буленов израз който се проверява и се изпълнява нещо, след като се изпълни се проверява отново дали изразът е правилен, и ако е се изпълнява отново, ако не е се изпълнява else-а, а ако няма такъв се прекратява изпълнението на цикълът. Ето един по практичен пример:

x=0
while x != 5:
x=x+1
print x
else:
print "x is now 5"

Тук имаме операторът за неравенство != който е обратен на == и означава 'не е равно на'
Това връща следния резултат:

1
2
3
4
5
x is now 5

Виждате ли каква мощ имате сега императоре? Вместо да пишете нещо от рода на:

x=0
print x
x=1
print x
x=2
print x
x=3
print x
x=4
print x
x=5
print x
print 'x is now 5'

може да напишете този малък цикъл и да не се занимавате с глупости. Това е красота, а горното е ГРОЗНО!!!Дори изглежда грозно на вид Ъгфхх!!!

Сега да видим какво ни остава от днешния списък със задачки. for цикълът!! Да!! любимия ми! Ето как изглежда той

for x in [1,2,3,4,5]:
print x

чете се за всяко х във списъкът [1,2,3,4,5] принтирай х, при всяко преминаване на цикълът, х ще приема някоя стойност от списъкът, първия път е 1, втория 2 и т.н. до края на списъкът, това работи и с редици и низове и общо взето всички последователности.

Вече имате малко мощ, и знаете малко повече за синтаксисът. Не навлизах в дълбочина в темите които разглеждахме до сега. Не знаете много за низовете, нто за списъците, нито за речниците, нито за буленовите типове, нито за if-овете, нито за while-овете, нито за for-овете. НО знаете достатъчно за сега. Медитирайте над всичко това, от утре ще преобразуваме начина ви на мислене, защото ще разглеждаме функциите. Ще видите магии, и ще видите как тези магии изчезват и вие започвате да разбирате магьосническите ми номера. ще видите мистерии и решения. ще видите чудеса и ще видите че светът и властта която ви дадох днес не са вчичко, а има и скрита мъдрост в езикът и словото, която трябва да се намери.

22 август 2008

Първи стъпки в програмирането с Python. част 4.Ужаст и страхопаника

Index:
1.Интродукция
2.В началото бе словото
3.Ю толкинг ту ми?


4.Ужаст и страхопаника

Започваме със примитивните типове данни. Числа и низове, вчера говорихме малко за низове(ако летете това в същия ден в който четохте предишната глава, не е било вчера, а преди малко). След като говорим за числата и низовете, ще говорим за променливите и имената, после за сложните типове данни, като списъци и речници. Трябва да свърша с това бързо, за разлика от други книги и туториъли няма д се занимавам много със подробностите, има си още туториъли и книги които ще трябва да прочетете, от един блог програмист не се става. Причината поради която ще ви начаткам всичко това на веднъж е че искам да имам повече време за по интересните части, това не е много интересно. ще ви прехвърля на бързо през типовете данни и операциите, след това в следващия пост на бързо ще минем през синтаксиса и някой други оператори и ще преминем към интересната част, интересни програми, или скучни програми ако не харесвате математика :D

Да минем отново през низовете. Имаме низ:

"shishe", той е същия като низът 'shishe', това че имат различни кавички не е важно, важното е да не се смесват. можете да ги събирате

'shi'+'she' -> 'shishe'

или умножавате

'shi' * 5 -> 'shishishishishi'

по късно ще ви покажа още няколко готини номера с тях.

Сега да видим числата. Те както предполагам знаете може да са цели и дробни, в програмирането дробните числа се наричат числа с плаваща запетая, или float, а целите се наричат int. Има още няколко вида, но те няма да ви трябват за сега. Да видим примери

5 е цяло число, но 5.0 е float, можем да ги съберем

5 + 5.0 -> 10.0 както виждате това връща float. А ако ги умножим:
5 * 5.0 -> 25.0 отново float, можем и да ги разделим
5 / 5.0 -> 1.0 а ако ги извадим
5 - 5.0 -> се получава един фънки резултат 0.0, това е магия

можем да преобразуваме типове, да речем искаме числото 5.0 да стане цяло:

int(5.0) -> 5 готово, ако напишем float(5) ще получим обратно 5.0, а ако направим някое друго число например 5.5 на int ще получим отново 5, забравете какво са ви учили в даскало при закръглянето.

При деленето обаче се получават интересни резултати. Искаме да разделим да речем 5 на 2:

5 / 2 -> 2, странно нали? Този проблем се отстранява лесно, като се използват float-ове:
5.0/2.0 -> 2.5 ето това вече е по добре. Проблемът остава със делене на по големи числа:
2 / 3 -> 0 отново със float се решава проблемът:
2.0/3.0 -> 0.66666666666666663 Това число всъщност е безкрайно, но компютърът го реже в определен момент, едва ли ще ни трябва някога по голяма точност, а ако ни трябва, има инструменти за това.

Можем също така да получаваме остатък със оператора % :

5 % 2 -> 1 това е остатъкът от делението.
4 % 2 -> 0 тук няма остатък
2 % 3 -> 2 тук остатъкът е 2

Оправихме до известна степен числата. Сега да се занимаваме малко с променливите. В python а и в програмирането като цяло е прието = да означава присвояване, а не равно, равно е ==, когато казваме x=5 обикновено се разбира че x има стойност 5, а не че x е равно на 5, ако кажем че x=5, и после кажем че x==5, това ще бъде вярно, защото x вече Е равно на 5, но чак след като сме му дали стойност 5, преди това е просто празна променлива. на променливи можем да присвояваме почти всичко, каквото се сетите. Да видим сега няколко интересни примерчета:

x='shi'
y='she'
z=x+y
сега z е 'shishe'
сега можем да кажем например
a=z*5
сега а е 'shisheshisheshisheshisheshishe'
сега можем да променим променливите с други стойности, да речем искамe:
x=a
сега х е 'shisheshisheshisheshisheshishe'
y=5
a=3
сега y и a са цели числа, сега можем да комбинираме това цялото:
z=x*(y+a)
сега z e

'shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe
shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe
shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe
shisheshisheshisheshisheshisheshisheshisheshisheshisheshishe'

т.е. 40 шишета, това вече се нарича тежко пиянство.

Продължаваме със следващата страхотия, това е списъкът, или list. Той се пише между две квадратни скоби ето така: [], и може да съдържа всякакви работи, дори и други списъци.

[1,2,3,4,5] това е списък от числа
['tova','e','spisuk','ot','nizove']
[1,'niz',['spisuk v spisukut']]

Както виждате тук списъкът може да съдържа много работи. Сега да видим някой готини трикчета с него.

x=[1,2,3,4,5]
x[0] -> 1

какво стана тук? просто поискахме първия елемент от x който е 1, при списъците броенето на елементите почва от 0, тоест първия елемент(0) е 1,втория елемент(1) е 2. Малко е объркващо, но сеща ще обясня, списъците, наредените n-торки, и низовете броят елементите си от 0. ето:

[1,2,3,4,5]
0 1 2 3 4

виждате индексът на всеки елемент. При списъците можем да променяме елементи:

x[0]=0

сега х е:
[0,2,3,4,5]

можем също така да 'режем' части от списъкът, да речем искаме първите 3 елемента:
x[0:2] ще върне:
[0,2,3]

тук използваме един готин трик [0:2] се нарича slice(слайс) това казва 'дай ми всички елементи от първия до 3-тия. Можем да кажем също така и [3:] което ще рече 'дай ми всички елементи от четвъртия до последния, което в случая на x е [4,5]. Можем да го направим и в обратна посока [-1:-2] ще върне същия резултат, това се чете 'върни ми всички елементи от последния, до предпоследния. Забелязвате че когато ползваме отрицателни индекси се брои от -1, а не от -0. Това е важно да се запомни, ако искаме да копираме даден списък можем да поискаме [:] което означава 'дай ми всички елементи от първия до последния'. както виждане нулата може да се изпуска [:2] е същото като [0:2]. Тези трикчета могат да се използват и за низове:

x='12345'
x[:2] -> '123'
x[3:] -> '45'

Красота! Има един проблем обаче, низовете не могат да се променят. т.е ако напиша x[0]='0' това няма да работи. За целта трябва да приложим малко други трикчека:

x='0'+x[1:] това ще върне x='02345' , ако искаме да променим нещо по средата, ето номера

x=x[:1]+'SHISHE'+[3:] това ще върне '02SHISHE45'

Ако това беше списък, това щеше ад бъде много по лесно:

x=[1,2,3,4,5]
x[2]='SHISHE'
x -> [1,2,'SHISHE',4,5]

Но така е било писано. Да видим следващото мъчение за мозъците ви:

Сега да видим едни подобни на списъците обекти наречени наредени n-торки, аз ги наричам редици за кратко, на английски tuple. Те са като списъците, но използват кръгли скоби (1,2,3,4,5) За разлика от списъците те не могат да се променят и да се разширяват, имат постоянен размер и постоянни членове, но могат да имат всякакви елементи в себе си. и отново [:] и подобните работят, просто не можете да присвоявате стойности, също както низовете. Няма да влизам в подробности тук, в продължение на цялата поредица ще виждате допълнителни трикчета и методи свързани с тези структури и обекти, за сега това ви стига. Останаха само речниците. На английски dict. Те са просто хеш таблици(сякаш очаквам да знаете какво е хеш-ове) Та при тях имаме двойки от ключ и стойност. да речем нещо от рода на

x={1:'a', 2:'b', 3: 'c'}

сега по ключ можем да достигнем до дадена стойност:
x[1] връща 'a', а ако дадем
x[1]='aa' сега речникът ще е такъв
{1:'aa', 2:'b', 3: 'c'}

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

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

21 август 2008

Първи стъпки в програмирането с Python. част 3.Ю толкинг ту ми?

Index:
1.Интродукция
2.В началото бе словото


3.Ю толкинг ту ми?

Да на теб говоря, няма никой друг в стаята момче(или момиче, Интернет анонимност, сори :D). Ето как се говори с компютъра. Той е мноо тъп. Ама мноо. Мноо мноо мноо тъп. На него трябва да му казваш точно какво да прави, в точни инструкции наречени асембларен език. Това е почти машинен език, труден за разбиране от хората и труден за програмиране. Някогя всички програми са се писали на този точен език. По късно умните програмисти, понеже били мързеливи(това е факт, не си го измислям за да увелича хумора) и не скали да пишат толкова много код написали програма, която да превежда един нов език на машинен език. Сега можели да пишат кратки програми на новия език, създаден за хората, а понеже компютърът е тъп и не го разбира, имат програма която го превежда на машинен език. Умните програмисти обаче били още по мързеливи и не искали да да пишат код в новия език, той все още бил много дълъг и труден за писане, за това решили да създадат нов език, нови езици всъщност, много хора започнали да си пишат всевъзможни езици, използвайки асемблер или стария нов език, сред всички тези нови езици бил и Python. Благодарение на python, програмистите можели да пишат кратък и ясен код който се разбира лесно от тях, и който по късно може да се изпълнява от машината. Езикът е близък до човешкия и лесен за разбиране. Кажете ми какво прави следния код?

print ('shi' + 'she') * 5

Точно така, първо събира shi със she, образувайки shishe, след това го принтира 5 пъти на екрана. получава се:

shisheshisheshisheshisheshishe

Ако сложите един интервал след 'she' така че да стане 'she ' ще бъдат и разделени

print ('shi' + 'she ') * 5

shishe shishe shishe shishe shishe

Просто нали? Сега малко теория. print е оператор, той принтира неща на екрана. Това е лесно за разбиране. Сега да видим другите неща.

'i am stupid','shi','she','she ' са 3 различни думи. Думите в python се наримат string, на български се наричат низове. те са заобиколени от кавички, единични '' или двойни "", няма значение, важното е в един низ да няма от двете(по подробно ще обясня после). 'she' и 'she ' са различни низове, защото втория има интервал на края си. също така 'SHЕ' и 'she' са различни, т.е. има значение дали са големи или малки букви.

следват + и *, това са събиране и умножение. Те са по принцип за числа, но стават и за низове. Да речем:

'shi'+'she'

връща

'shishe'

а

'shi'*5

връща

'shishishishishi'

можем да ги комбинираме, но трябва да внимаваме:

('shi' + 'she') * 5

връща


shisheshisheshisheshisheshishe

скобите са там за да кажат че първо трябва да се съберат двете думи, и после да се умножат. иначе ще се получи това:

'shi' + 'she ' * 5

shi she she she she she

както виждате първо се извършва умножението(така ви учат в даскало нали?) и после събирането, и за това имаме едно 'shi' и 5 'she '-та

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

Първи стъпки в програмирането с Python. част 2.В началото бе словото

Index:
1.Интродукция



2.В началото бе словото


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

Какво ви е необходимо за да програмирате? Текстов редактор, клавиатура и монитор.

Ако клавиатурата и мониторът могат да си останат тези които в момента имате пред екрана си, то редакторът е нещо различно. Ако сте като повечето хора, най вероятно живеете в къща с прозорци и имате pc с Windows. Което означава че операционната ви система няма нито свестни езици инсталирани с нея, нито свестни редактори за програмиране. Операционната ви система ви ПРЕЧИ да програмирате. Препоръчвам да я разкарате. Точно така, разкарайте уйндолса ако можете. В днешно време платформата е все по маловажна, ако не играете игри почти няма значение дали ползвате уйндолс, макинтош, линукс или BSD, дори и iPhone-а е сравнително сносен pc, който става за сърфиране и гледане на клипове и музика. Няма да ви казвам как да си инсталирате линукс, или как да научите линукс, всъщност няма да ви помагам в тази част, има мнооого такива туториъли и помощни сайтове на бг в нета, потърсете ги просто. А ако ви мързи, и имате малко излишни пари, купете си нов макинтош, много по добър от уйндолс, красив, елегантен, бърз и има свестни редактори и езици за него.

Ако ви мързи да си сменяте операционната система, или ако обичате уйндолс(хахаххаха), не се притеснявайте, пак може да програмирате, просто ще трябва да се борите с операционната си система. Първо си вземете свестен редактор. За уйндолс, понеже ме мързи да търся, най вероятно notepad++ ще свърши добра работа. В никакъв случай не ползвайте обикновенния notepad, или wordpad, или microsoft word. Това не са текстови редактори, а дяволът.

Ако сте на линукс или bsd, най- вероятно имате някакъв прост редактор, ако сте с gnome имате някакъв редактор там, а с kde имате kedit и kate. Може да ползвате тях, аз ползвам Vim, но него ако искате ще научите по късно. За мак-а вече се оправяйте сами, нямам кинти и не мога да си позволя мак :D

След като оправихме този малък проблем, сега да си изтеглите езика, на линукс или на макинтош имате python инсталиран по дифоулт. Но под уйндолс нямате нищо, нъцки, нищо! Трябва ви PYTHON. Теглите си програмата, инсталирате и отваряте интерпретатора. Ако сте под уйндолс трябва да отворите онази зла магическа програма command prompt от старт меню-то и да се научите как бачка. За сега обаче не ви трябва, просто си отворете старт менюто, дайте на python и отворете интерпретатора. Готово, вече сте в pyhon. Тук виждате нещо от сорта на:

>>>

Това е интерпретатора, той чака командите ви. Напишете 2+2 и вижте какво ще стане. Ок. Сега напишете:

print "I am stupid"


Браво, напредвате :D Напишете горния код във файл stupid.py и го отворете със интерпретатора. Как става това ли? Под линукс просто пишете в конзолата python stupid.py и наекрана трябва да се появи 'I am stupid', под уйндолс е същото, отворете comand promp-a и напишете напишете нещо от сорта на:

C:\python25\python stupid.py

това ако stupid.py е в папката вашите документи.(не съм сигурен, нямам уйндолс да проверя дали бачка)

Добре хлапе, до тук добре, ако си се справил де, ако не си, пробвай пак.

Очаквайте 3-та част

Първи стъпки в програмирането с Python. част 1.Интродукция

1.Интродукция



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

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

В статията препоръчвам и други готини езици, например руби. Руби е супер може би дори по готин от python, и то само заради един човек който го използва. Това е _Why? Да това е името му :D така се пише. Той е автор на Why’s (Poignant) Guide to Ruby. Доста готина книга с рисунки за програмиране с руби. Тази серия от туториъли се стреми да направи забавен български туториъл за python. Едва ли ще имам комикси и едва ли съм толкова ненормален колкото _Why?(близко съм, но не съвсем), така че ако искате комикси в туториълът ви, минете на руби и се радвайте на картинките на _Why?(Ако бях на ваше място щях да избера руби, комиксите са яки).


След като ви дадох възможност да избирате, време е да започнем. Що е програмиране? Имам една стара книга за правещ 8 в която една от първите глави отговаря на този въпрос. Правец използва basic, език който е супер скапан, но когато излизат през 80-те тези малки компютри които могат да се поберат на бюрото ти, това е бил единствения език който са имали и с него много хлапета се учат да пишат игрички и програмки, защото е сравнително лесен. Та книгата отговаря по следния начин на въпроса "Що е програмиране?":

Що е програмиране?
Трудно е да се обясни. Най-сигурния начин човек да разбере що е "програмиране" е сам да се научи да програмира! С други думи - да напише програма, да я "въведе" в компютъра, да се убеди във верността и (отстранявайки допуснатите граматически и логически грешки)


Този текст е писан през 86-та година в книга издавана от ЦК на ДКМС народна младеж и просвета..дрън дрън дрън... Това е едно от най точните определения които съм чел. Процесът на програмиране представлява въвеждане на програма в компютър и отстраняването на грешките в нея. Това е всичко, това е основата. Ако сте родени 20 години по рано и сега бяхме 88-ма и имахте нов правец 8 пред вас и някаква книга за BASIC, най вероятно щяхте да бликате с ентусиазъм да се научите да програмирате. В днешно време обаче ентусиазмът да програмирате собствения си компютър е много по малък, ентусиазмът ви сега е да си намерите порно в нета или нещо от сорта. Програмите които ще пишете в първата година едва ли ще изпъкват с нещо особено, едва ли някой ще даде повече от половин стотинка за тях, едва ли ще бъдат красиви, или особено функционални, но ще бъдат забавни, ще навлезете в нов свят на невероятни възможности, изведнъж небето ще ви се стори много по ниско от обикновено и ще имате чувството че ако се протегнете ще може да хванете звездите.

Това чувство имат художниците, поетите и музикантите когато творят, това чувство имат и програмистите. Ние наричаме кода си 'красив' и 'грозен' не защото изглежда по определен начин, а защото мозъкът ни осмисля неговото значение като красиво или грозно, както и думите на дадена песен или поема, те не изглеждат грозно, но имат грозен смисъл, или съответно красив. Python доста често изглежда красиво, чисто визуално. Синтаксисът е много чист и спретнат, кара ви да пишете красив код. Преди да продължите, осъзнайте че програмистите не са учени, не са инженери, не са математици, те са поети, художници, архитекти, математиката, инженерството и науката са просто инструменти, както е четката в ръката на художника, или химикалката в ръката на поета. Като разберете че трябва да се стремите към красота, простота и чистота на изказа, а не научност и сложност, тогава ще сте готови да продължите. Програмите се пишат за хората, които ще ги четът, не за учителката ви по литература, така че няма нужда да използвате най- сложния възможен изказ. Трябва да пишете прост и разбираем код, един от белезите на красотата е простотата.

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

18 август 2008

Python Blub ли е?

В ето това мнение в форума за информатика давам два линка към един блог, първия линк намерих във втория, а втория линк е от ето този пост:

Python is now Blub! Run!

Очевидно авторът се притеснява че python се е превърнал в Blub. За тези които не знаят какво е Blub, това е хипотетичен език измислен от Paul Graham в есето му Beating the Averages. На кратко Blub е средно мощен език, не е най мощния, но е по мощен и абстрактен от C да речем. Най- често този етикет се лепва върху езици като C++,Java,PHP,javascript,C#,VB и т.н. Нали се сещате? този обикновен език, който не е особено иновативен, няма странни екстри, синтаксисът е обикновен и най важното е че много посредствени програмисти го използват. Blub е винаги популярен, сред най популярните езици. Основна черта на Blub програмистите е че когато те гледат по слаби езици, разбират че са по слаби, как можеш да програмираш без екстра Х в този скапан език? Същия този програмист може да гледа колкото си иска даден по- мощен език от неговия, но така и няма да разбере какво е толкова специално за езикът, за него ще му се стрива просто някакъв странен синтаксис(примери: скобите и префиксния синтаксис на лисп са странни, но те помагат за мета-програмиране и дават огромна мощ в някой ситуации). Блъб програмистът смята Блъб за най добрия език, разбира се той осъзнава проблемите с езика си, и с удоволствие ги заобикаля с всевъзможни трикчета които е научил с опитът си, но не си и помисля че може би езикът му да е скапан, просто е добър за някой неща, и малко груб за други, но е мощен и върши добра работа. Това безспорно е така, а сега да се върнем на темата за Python. Python е мощен мулти-парадигмен език, с динамични типове и модерни екстри без коио модерните езици не могат. Езикът набира популярност и вече започват да се въдят и посредствени програмисти които да го използват. Според авторът Python се превръща в Blub, защото го използват много хора. Популярността му расте с всеки изминал ден, Гугъл го използват в своя app Engine, и т.н.

Ето един интересен пост от уважавания от мен блогер Reginald Braithwaite:

Are we Blub programmers?

В него той обяснява че за да бъде един език Блъб, програмистът който го използва, трябва да бъде сляп за по мощните езици. Странния парадокс тук е че човекът който създава терминът Blub, Paul Graham е блъб програмист, защото за него Lisp е най мощния език, върхът на абстрактния континиум. Може да не четете горните два поста, но постът на Реджиналд задължително прочетете, след това прочетете и коментарите.

Аз ползвам python, знам Scheme и малко ruby, както и малко C. Scheme, Ruby и С в някой ситуации имат предимства пред python, той не е най мощния език в никакъв случай, Scheme е по мощен функционален език, има макроси и мета-програмирането е по лесно, също така е по чист език синтактично от python(ако не ви пречат скобите и префиксния синтаксис). Ruby е по мощен обектно ориентиран език, има някой готини екстри като блокове, и някой синтактични улеснения за някой ситуации които помагат, също така е по лесно да бъзикаш вътрешността на езика. С е...ам...Хайде да оставим това за друг път :D Според горния параграф, по определение аз не съм Blub програмист, защото не твърдя че python е най абстрактния и мощен език, за сметка на това съм убеден че е един от най удобните, има много умни хора които го използват и пишат библиотеки, има много добър синтаксис и приличен арсенал от екстри, също така се използва за такова разнообразие от приложения, и е удобен за почти всяко от тях. Той е истинско швейцарско ножче, не е най добрия нож, но едва ли ако ще ходиш в гората, ще си носиш комплекта швайсермайнермесер ножове за 200 евро от телешопинг :D С подарък ножица за разчленяване на птици :D

Така че според Реджиналд, python не е блъб, защото аз не съм блъб програмист, разбира се има много блъб python програмисти и те са доста настойчиви когато твърдят че езикът им е най добрия. Python със сигурност е по абстрактен от C++,java и php, и горе долу еквивалентен на руби, по слаб от лисп и хаскел, но си върши прекрасно работата, и е красив на всичкото от горе.

17 август 2008

Траектория на въздушна бомба

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

Откровенията на един руски "Кибер нинджа" :D:D:D

От този случаен руски блогер(на английски е, може да четете, ако ви е страх от руския език) разбираме че вероятно повечето руски атаки по грузински сървъри са дело на script kidies. Както самия блогер, много руски хлапета просто теглят готови скриптчета, които пращят http рикуестове към грузински сървъри и рефрешват от време на време. Авторът на поста дори пише свои .bat файл с който да атакува врагът. За това заслужава медал "Герой на Руската Федерация" :D Сериозно, разочарован съм от братушките, за малко ме накараха да си мисля че там на север имат сериозни хора, а то блогери с .bat файлове :D Братушки, научете се на shell скриптове поне :D не се излагайте с windows .bat файлове :D Прочетете статията, както каза един случаен коментар в интернетът, това щеше да е смешно ако не бяха танковете. Сега за разлика от предишния ми пост по темата, не ме е страх от руски кибер нинджи :D очевидно със своите 9 месеца опит като програмист съм по компетентен от цялата червена кибер армия :D

15 август 2008

Тренинг на умът

Днес ще поразсъждавам върху някой идеи които ми се въртят в главата от няколко дни. Тази седмица започнах кормуване и за сега върви добре. Това което ме впечатли най много от управлението на автомобила, е че мисълта е бавна, няма време за мислене, необходимо е основните неща да се запаметят на по ниско ниво, така че да стават автоматично. Когато наближа светофар, първоначално започвах да мисля, какво трябва да правя. Сега вече се замислям по рядко. Автоматично натискам спирачката, когато скоростта падне натискам съединителя, спирам на червено, изключвам от скорост, пускам съединителя, чакам жълто, включвам на първа, давам постоянна газ, полу-съединител, потеглям, сменям на 2-ра, ускорявам, сменям на 3-та. Това не се мисли вече, а се изпълнява автоматично, сложността на някой обстановки не може да се осмисли ако човек мисли за всички тези детайли, когато шофира. Шофирането е сложно изкуство, когато овладееш простите неща, без да мислиш започваш да извършваш по сложни действия. Когато се научиш да убиваш скоростта, ад сменяш предавки и да ускоряваш, вече е лесно да преминаваш през светофари и кръстовища, защото не трябва да се замисляш за това как да намаляваш, да сменяш предавките и да ускоряваш.

При програмирането е същото. Веднъж усвоиш ли простите конструкции и идеи започваш да градиш по сложни идеи, и не ти се струват сложни защото мозъкът ти изолира сложните детайли от теб, не е нужно да ги знаеш, не е нужно да знаеш как +-а събира две числа, и как преобразува типовете, ако събираш различни типове, трябва да знаеш само че събира две числа, за да го използваш в по сложни комбинации с други действия. Може да знаеш перфектно синтаксиса на даден език, но ако нямаш умствената способност да игнорираш ненужните детайли и да ги прикриваш с методите за абстракция, не ставаш за програмист, освен ако не пишеш на асемблер. Как се определя даден език? Как се учи? Първото нещо което научаваш е примитивните оператори, основните неща от които е изграден езикът, след това са методите за комбинация, това са начините да навържеш тези примитивни оператори заедно, и накрая са методите за абстракция, това са конструкциите които помагат да скриваш ненужните детайли и да градиш слоеве на абстракция. Абстрактните езици са добри, не само защото кодът им е по кратък, но и защото са по стабилни. Абстракциите са на слоеве, всеки слой знае възможно най малко за другия, така приложения написани по този начин са стабилни, защото не са чувствителни към промени. Това е позната концепция от функционалното програмиране, вместо да пишеш приложението си директно в езика си, пишеш език с който да напишеш приложението си. Така прочутите Domain specific languages са доста полезна концепция, в lisp се използват постоянно, на практика самия lisp е DSL написан в самия себе си. Всеки път когато използвате функция или класот някоя библиотека, използвате някаква форма на DSL език. Връщаме се на аналогията с шофирането, вместо да мислите каква последователност от действия да извършите когато шофирате в трудна ситуация, просто извършете това за което сте подготвени, когато искате да завиете на ляво в кръстовище, вместо да мислите първо спирачка, после съединител и смъквам предавка... просто намалете, да, ще извършите и другите действия, но няма да ги мислите, защото мозъкът ви е трениран да не се занимава с ненужни подробности, които идват автоматично. просто намалете, и се подгответе според ситуацията да спрете, или да преминете, тези действия, намаляване, спиране или преминаване, се състоят от по малки действия, но детайлите не са важни. Абстракцията от тези действия е мощен инструмент, представете си да трябваше да програмираме само на асемблер, мозъците ни нямаше да се справят със сложността, за жалост сме идиоти и недоразвити маймуни, и за щастие абстрактните езици са нашите мозъчни протези, защитаващи крехките ни мозъци от сложната машина наречена компютър.

12 август 2008

Руски хакери атакуват Грузинския интернет

Ако сте откъснати от света, и а-социални, вероятно не знаете че Русия е атакувала Грузия. Очевидно освен със сушки Братушките атакуват Джорджия..ъъ..Грузия и със хакери.

http://arstechnica.com/news.ars/post/20080811-georgian-government-websites-attacked-by-russian-hackers.html

Това е история мои братя, руснаците използват информационна война срещу друга страна, блокират потокът от информация, докато координират военни действия. Това е изкуство, и не е правено преди. С нетърпение чакам интернетът в Грузия да се възстанови, за да получим повече информация за случилото се. За тези които не знаят, аз съм авиационен маниак, и на всякъде където руски самолети участват в бой, разчитам на интернетът да ме информира с подробности, относно типък, и тактиките на самолетите, както и ефективността на действията, за жалост руснаците и тяхната параноя и склонност към секретност пречат на това, и трябва да чакаме години за някакви точни сведения. Всеки който се интересува малко от модерна история, и от история като цяло(като мен например) знае че днешно време е невъзможно воденето на война, без пасивна съпротива, в следствие на информацията, която циркулира. Някой да е виждал обезобразени тела по телевизията от Ирак? Имаме кадри от Виетнам на истински сражения и истински убийства, и на истински трупове. Защо от тогава на сам няма такива картини? Най лошото което съм виждал е няколко човека застреляни от хеликоптер, изображението беше черно бяло, и това бяха само сиуети от IR камерата. Информацията е опасно оръжие, и Американците се поучават от грешката си във Виетнам, като ограничават притока на информация, очевидно хората не са склонни да подкрепят военни действия, ако по телевизията дават осакатени деца и дупки, където до скоро е имало села. Руснаците очевидно също разбират това, но за разлика от американците, те не се страхуват от собствения си народ. Причината да се опитват да спрат притока на информация разбира се е западът. НАТО е проблем с който руснаците се опитват да се справят деликатно. Не знам какъв ще е изходът от тази ситуация, аз не съм политолог, и не ми пука особено за шибаното международно положение. Интересувам се от технологията, интересни са ми тактиките, оръжията и методите. Начинът по който се водят тези действия за момента е мистериозен, когато пушекът утихне, ще имам своята информация, искам да знам кое, как, къде, кога. Историкът в мен, инженерът в мен, и просто човекът в мен жадуват за информация. Тъй като знам че няколко руснака са влизали в този блог, вероятно по погрешка, както и един индиец, не бих се учудил ако бъда нападнат от хакери. Всеки бит бомба, всеки компютър летяща крепост срещу враговете на народа :D

08 август 2008

24 часа

Моментът в който поствам това, е доста близък до момента на 24-тия ми буден час. Снощи не спах. По принцип си лягам към 3,4-ри часа, но тази вечер реших да остана буден, сутринта в 5 и 30 когато започна да изгрява слънцето излязох и бягах 1 час из града, много е готино когато чалгията я няма по центъра, спокойно е и само преобърнатите казани с боклуци напомнят за пиянките които са се разкарвали снощи из града. На скоро си купих mp3-ка, защото старата здаде багажа още преди много време и все се канех да си взема нова. Има нещо много яко в това да слушаш ролинг стоун и Джими Хендрикс докато бягаш срещу изгряващото слънце. Хипи хипи Халеуя... :D Както и да е, имам намерение да го направя нещо като навик, не, безсънието вече си ми навик, имам предвид ранното излизане и бягане. Особено когато почне даскалото, единствения проблем ще е че ще ходя потен и мазен на даскало и всеки ден, всъщност ще ми е кеф, защото и без това търся ефективен начин да дразня чалгарите :D Да им е гадно, аз имам дробове за които да се грижа, чрез бягане и спорт. Сега се сещам за един труден проблем, ако ще ставам вече в 5 часа за да бяга,м това означава че ще трябва да си лягам в 11, което означава че нощите вече няма да са безсънни, споко, няма да променям името на блога, просто преминавам на бостанско време :D Но това е само теория, ще видя дdли това ще се случи, или просто ще ме мързи да си променям навиците, ако не стане, винаги има резервния вариант от спане до обяд и следобед бягане на платото със бира и добра книга(за сега това е книгата за С, бтв напредвам стабилно). Джими Хендрикс RLIL3Z!

07 август 2008

Hamlet on Facebook

Не съм gaysbook потребител. Те са зли и работят за ЦРУ. И все пак човек с моето чувство за хумор не може да не оцени красотата на следния шедьовър

Horatio thinks he saw a ghost.

Hamlet thinks it's annoying when your uncle marries your mother right after your dad dies.

The king thinks Hamlet's annoying.

Laertes thinks Ophelia can do better.

Hamlet's father is now a zombie.

- - - -

The king poked the queen.

The queen poked the king back.

Hamlet and the queen are no longer friends.

Marcellus is pretty sure something's rotten around here.

Hamlet became a fan of daggers.

- - - -

Polonius says Hamlet's crazy ... crazy in love!

Rosencrantz, Guildenstern, and Hamlet are now friends.

Hamlet wonders if he should continue to exist. Or not.

Hamlet thinks Ophelia might be happier in a convent.

Ophelia removed "moody princes" from her interests.

Hamlet posted an event: A Play That's Totally Fictional and In No Way About My Family

The king commented on Hamlet's play: "What is wrong with you?"

Polonius thinks this curtain looks like a good thing to hide behind.

Polonius is no longer online.

- - - -

Hamlet added England to the Places I've Been application.

The queen is worried about Ophelia.

Ophelia loves flowers. Flowers flowers flowers flowers flowers. Oh, look, a river.

Ophelia joined the group Maidens Who Don't Float.

Laertes wonders what the hell happened while he was gone.

- - - -

The king sent Hamlet a goblet of wine.

The queen likes wine!

The king likes ... oh crap.

The queen, the king, Laertes, and Hamlet are now zombies.

Horatio says well that was tragic.

Fortinbras, Prince of Norway, says yes, tragic. We'll take it from here.

Denmark is now Norwegian.

- - - -


Оригинален източник

06 август 2008

Комиксът ми вече си има отделен сайт

Новия сайт на The world will come to an end e http://www.twwcte.blogspot.com

Реших да го отделя, защото да го поствам по два пъти и на двата ми блога е трудна работа, а и блоговете ми не са направени за снимки, новия е по широк и побира по широки изображения, така ще имам повече контрол върху широчината на комиксът. А и вече не е нужно да сортирате през глупостите ми за да го четете :D

05 август 2008

The Swine Before Perl

През 2001-ва Шрирам Кришнамурти дава една доста интересна презентация за PLTScheme(моя избор за scheme имплементация) Ето аудиото, ето и pdf на слайдовете, а ето и PPT . Презентацията, макар и в не особено удобен формат, е доста интересна и я препоръчвам на всеки интересуващ се от Scheme и Lisp като цяло. Тук може да изтеглите и статия, която описва в подробности примерът който дава в презентацията.


Сега за интересната част. Ако сте чели вчерашния ми пост знаете че се мъча да науча С, но причината поради която не напредвам особено е че не ми е забавно, чувствам го един вид като задължение. Никой обаче не ме задължава да знам scheme(и С също никой не ме задължава, но сам се задължавам). С е красив и прост. Scheme е по- красив и прост. Python е красив и прост, и единствената причина поради която го харесвам повече от scheme е че е малко по практичен на моменти, има повече библиотеки, повече разработчици и т.н.


С ще бъде овладян, Scheme ще бъде овладян, Python също(след като разбера всички ООП трикчета). Това е факт. Обаче ми трябва план, не мога да се занимавам с четенето на 30 неща едновременно(не че не съм опитвал :D) Пишейки това, сега ще направя план. Имам книга за С, отлична книга, която няма да ми е трудно да свърша до края на лятото, дори с това темпо. Свърших книгата си за python още първия месец след като почнах, а тя беше 2 пъти по голяма, и все още откривам трикчета и готини работи за python, което означава че най вероятно с години ще овладявам С. Септември няма да имам време да се занимавам с С, това ще е времето на python и Django, версия 1.0 на Django ще е излязла и ще уча как да я използвам ефективно. Scheme остава като че ли на заден план тук. Не съвсем, Все още имам доста лекции за гледане и няколко scheme книги които да чета(вкл и няколко написани от г-н Кришнамурти).

За жалост 12-ти клас ще е гадно време, защото ще трябва да се занимавам с математика и физика. Предметите са ми интересни, но ученето им в даскало е труден и скучен процес, ще трябва да измисля и нещо за справяне и с тази ситуация. Като му дойде времето ще ум мисля. Може би ако имам късмет до края на годината ще имам нещо като полезна програма(без значение на кой от езиците които уча в момента,въпреки че python е най вероятния кандидат) :D

ps Очаквайте ъпдейт на комикса ми довечера, все още обмислям идеи, мисля да вкарам и малко екшън :D

Zen of C продължение...

Ученето ми на С върви бавно, вчера и днес прочетох няколко глави от K&R и продължавам да напредвам, но е бавно, не пиша никакъв код, защото С е гаден за учене, трябва да компилирам всеки път, и да се занимавам с гадния синтаксис. I blame python :D Не се отчайвам, можеше да е и по зле, можеше дори и книгата да не чета, а и от това което чета почти нищо ново няма, освен странните синтактични правила и факта че нямам знакови низове, а трябва да си ги генерирам сам с масив от char-ове ми се струва гадно и като човек свикнал със мощни абстрактни структури от данни, С е доста гаден от тази гледан точка. Типовете също са гадни, проблемът идва от това че ме мързи да се занимавам с тях. Е карай, това е истински тест за способността ми да се справям със сложни проблеми. В случая сложния проблем е че мозъкът ми трябва да се преформатира за да мисля като С програмист, това означава да забравя за готини вградени екстри и лесни бързи скриптчета и мощни тонове библиотеки и фреймуърки и всякакви такива. Това е като да си свикнал да слушаш радио само като си врътнеш копчето, и един ден да си купиш вакумни тръби, и да си сглобиш свое радио. Забавно е от една страна, разбираш как бачка радиото, обаче от друга страна искаш да слушаш радио повече от колкото искаш да го разбереш :D

04 август 2008

Блоговете са мъртви, да живеят блоговете.

http://posterous.com/ е супер интересна и мега готина "web 2.0" услуга, която за разлика от други подобни не е скапан сайт за споделяне на снимки, или социална мрежа(или поне не в класическия myspace смисъл). Това което е интересното за сайта е че може да създадеш блог без почти никакви усилия. Не се регистрираш, няма нужда от настройки и работа със сложни UI(какъвто използвам в момента за да пиша това). Единственото което трябва да направиш е да пратиш твоя блог пост на мейла им, автоматично се създава блог страница. Едва ли ще го използвам, но е супер идея :D

Zen of C

Днес ще имам най- вероятно 2 поста. Този който четете в момента(както и много други) няма да бъдат преведени на английски в другия им блог. Другия обаче, който ще постна след този(най- вероятно вече сте го видели над този) ще бъде преведен. И без това не пиша много в английския блог, реших че е добра идея да сложа малко content в него. Та този пост сега е нещо като мини доклад за предишния ми пост за стратегията ми с непродуктивността ми. Днес се бях наспал, прегледах няколко лекции от тук и излязох да побягам. Не го бях правил от доста време, но освен че бях супер извън форма, също така си взех книга. Така известната K&R. Качих се на шуменското плато и отидох на едно място където досадните нормални хора не ходят през уйкенда(парадоксалното е че е близо до кафето, където е гъч по принцип). Там разбира се се отдадох на четене. Супер ден :D

02 август 2008

Днес беше доста непродуктивен ден

Не знам защо така, но наистина днес свърших толкова малко. Вероятно това е следствие от факта че спя толкова малко, днес ме можах да се концентрирам върху нито една от задачите си, които си бях подготвил за днес. Комбинацията от Hacker News и различните reddit-и които посещавам редовно не помагат особено. Открих точния проблем. Това не е особено сложна наука. Комбинацията от умората ми, заедно с нещата които ми отвличан вниманието в нета се самозахранват, прекалено съм изморен за да правя нещо по сериозно, за това ще си сърфирам, прекалено много сърфирах снощи до късно, и за това съм изморен. Усещате ли нещо? Това се случва на много хора, аз го наричам кръговратът на скуката. Един вид си затворен за да сортираш информация, само 10% от която може би е полезна, и след това да си прекалено изморен за друго. Трябва ми план, и мисля че имам точното решение. Това е малък хак, хитро е, и просто за изпълнение. Тъй като на някой хора им е трудно да се самопринудят да правят каквото и да е, може да им се стори проблемно. И за мен е проблем, апатията ми ме е хванала последните 2-3 дни здраво, въпреки че и преди това бях в това състояние, вече усещам негативния ефект от монотонността и умората. За тоав без повече приказки ето какъв е плана:

1. Изключи си шибаната аларма!! лягам си в 4:00 и алармата ми ме буди след 6 часа. За нормалните хора това е нормално, но при тежкия умствен труд на който се подлагам(сортирането на почти ненужна информация от нета) това е недостатъчно, 2 часа допълнителен сън ще свърши работа, хората с различни биологични часовници имат различни нужди, но обикновено номерът е да уцелиш правилната фаза на съня в която ад се събудиш, и да не преминеш през прекалено много цикли*


2. Размърдай си задника. Тялото ми атрофира. По принцип съм много жилав и спортувам редовно, но напоследък ме е хванала жегата и не мога да се накарам да изляза, това също е друг вид акомулиращ се цикъл, когато излизаш и бягаш по 1 час на ден се чувстваш страхотно, но когато спреш дори за 3 дни, вече не ти се бяга, това води до труден рестарт на процеса.

3.Принтерът ми не е там за да събира прах. Мразя да чета от монитора си, но повечето ми материали са в нета. Предполагам че е добра идея да си ги принтирам за лесно четене, това води до някой добри резултати:


а)очите ми се изморяват по малко, въпреки че имам скъп монитор, все пак изморява.


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


4. Няма 4, по дяволите не мога дори да се хвана един блог пост да напиша като хората...

01 август 2008

Указатели и рекурсия

Да погледнем няколко имена. Гуидо ван Росум, Ричард Столман, Робърт Морис. Какво е общото при тях освен че са известни хакери?Всички знаят добре С и вероятно знаят и lisp добре. Гуидо създава собствен език който днес е един от най- популярните, по случайност е написан на С, Ричард Столман пише gcc, а робърт морис е известен с това че е създал първия интернет червей и че е открил Buffer overflow. В същото време в компанията в която е бил партньор и един от главните хакери, се е разчилато много на lisp и C. Тези езици са почти противоположни във философийте си. C е език който приляга перфектно към Вон Ноймановия модел на изчисление, езикът е тясно свързан с архитектурата на която работи, а именно Вон Нойманова машина. Lisp от друга страна е абстрактен модел на излисление. Езиците са противоположни в скалата. Някъде из блоговете прочетох едно мнение което ми се стори интересно:

(цитиране и превод по памет)

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

Това ми се стори интересно, вече знаех че за да си наистина добър хакер трябва да знаеш C, също така знаех че ако знаеш lisp ще можеш да прилагаш много идеи във програмите си, дори и да не използваш тези езици, ако разбираш как работят те, най вероятно си достатъчно умен за да си хакер. Такъв смисъл тези езици са един вид тестове, ако не успееш да ги разбереш добре, най вероятно си с недостатъчен багаж. Това е логиката от нещата които чета за тях. Ако не можеш да разбереш указателите на С, няма да разбираш как работи езикът който използваш, който най вероятон е написан на C, а ако не е, езикът на който е написан езикът ти е написан на С. А ако не разбираш Lisp(по скоро ако не можеш да разбереш лисп) значи не можеш да разбереш моделът му за справяне със сложноста. Това е основата на софтуерното инжинерство, управлението на сложноста, впрягането на всички начини и абстракций, които са практично приложими, за да може сложноста на проблема ти да бъде разделена, и обхваната от решението ти. Знам малко lisp, все още го уча, и най вероятно ще го уча доста дълго, защото не е главния ми език, знам и още по малко С, но със сигурност ще направя опит да овладея до колкото мога и двата езика в някой момент. Ако не си сигурен дали ставаш за програмист, напиши компилатор на С, или имплементирай интерпретатор в lisp, или и двете. Едва ли в практиката някога ще използвам С, или някой от другите С-та със заковани допълнителни крака,известния цитат за С++, който е октопод, създаден като се заковават допълнителни крака на С, същото се отнася и за джава, и обджектив-С и С# и може би дори и D, въпреки че не съм чувал лоши неща за този език все още. ще науча С, поради причината за която се учи латински, същото е и с лисп, лисп вече ме прави по добър python програмист, c++ едва ли ще ме направи по добър, или поне едва ли по добър от С. По моето мнение това е пътят на хакера. Започваш със прост скриптов език, който ти помага да си свършиш работата на бързо, изграждаш си арсенал с трикчета и познания за езика, след това научаваш сериозната теория за компютърните науки(указатели и рекурсия) и вървиш към нирвана.