Категория: Програмиране
Познай рендера
Покрай курса по 3Д графика, изпитвам рядкото щастие/проклятие да пиша цял проект наново от нулата. Познато ли ви е? Много програмисти, в даден момент от живота си, са искали да зарежат бозата, с която се мъчат в момента, и да пренапишат начисто цялото проклето нещо, този път "както трябва". Някои даже го и правят. Макар че, според признатите гурута на софтуерния мениджмънт, това е най-голямата стратегическа грешка, която можеш да направиш в един голям проект.
Е, за малки проекти със сигурност не е така, и този път учебния рейтрейсър се получи осезаемо по-добре. Днеска рекох даже да сверя резултатите от глобално осветление с path tracing спрямо V-Ray. Сцената е взета от SmallPT.
Едното е с V-Ray, другото е с учебния рейтрейсър. Можете ли да познаете кое кое е?
Покрай smallpt попаднах и на нещо интересно, което ме накара да се замисля, колко яка сфера е графичното програмиране.
Да речем, пишеш файлови системи, и си бъгнал нещо. Системата замира с kernel panic, следва reset и се надяваш да си оправиш данните, да не се налага пълен реформат на тестовия дял. А, и все още имаш да фиксваш бъг.
Или, пишеш web софтуер, и си бъгнал нещо. 3 месеца по-късно успяват да намерят експлойт заради бъга ти, сайтът ти е станал розов и мигащ, затрити са десетки часове въведени данни, за които няма бекъп. А, и все още имаш да фиксваш бъг.
Или, (очакваше го, нали?), пишеш графичен софтуер, и правиш някакъв рендер, който просто ренди горните картинки, само че по-бързо. И си бъгнал нещо. В резултат, се получило нещо такова:
Яко, а? И даже можеш да го публикуваш така. Както си е с бъговете.
Какво друго: тия дни довършвам AGG 0.3.0, надявам се до месец да пусна нова версия. След това подхващам ucbench, на който планирам да вкарам OpenCL поддръжка (и явно ще има доста пипане по сайта).
Публикувано в категория Програмиране -- 7 Jan 2012, 02:20, 0 коментара --
View in English

C
Или, както беше казала една умна глава преди доста години: Assembly language programming is an extravagant waste of human talent and should be avoided whenever possible.
Докато по-миналата седмица се занимавах с SimNow, ucbench и програмиране на асемблер за x86, този уикенд (донякъде като трибют към наскоро починалия майстор - R.I.P., Денис Ричи :\) минах на език от по-високо ниво за архитектура от по-ниско: а именно, C за PIC. Горноспоменатия цитат на Питър Нортън¹ е просто тоооолкова верен, за съжаление: старият проект на PIC е готов донякъде, но съм го замразил поради намекнатото в мисълта разхищение, което натрапчиво мисля как да избегна. Та, за да тествам Hi-tech C правилно, значи нов проект (с по-лесен замисъл), код наново от нулата, нов бредборд и даже малко нов хардуер. Ето видео с първата тестова програмка, която натворих:
Цък (h.264 формат - работи с VLC).
Дали за "големия" проект ще стане с C (тъй като сега дори малката програмка заема 10% от паметта за код и малко над 10% за данни) предстои да видим, но поне има надежда: не знам дали психически щях да устискам да напиша толкова много асемблер :)
Забавен момент докато си купувах хардуера: трябваше ми добър 3.3V регулатор с нисък dropout и след допитване ме насочиха към MCP1703. След купуване на чаркаляците от Комет по някое време обърнах внимание, че май са забравили да ми дадат регулатора в торбичката. После забелязах, че все пак са ми го дали, но просто беше толкова миниатюрно, че да те напуши смях. Аз очаквах нещо такова, а то се оказа такова (виж стрелката)... Иска си RTFM. Трябва да видите как му се запояват крачета на такова нещо - мога занапред да се пробвам да запоя жички на песъчинка, сигурно ще успея след този тренинг...:)
--------
¹ независимо, че хитрата лисица си е написала първите версии на нортън командър без нито ред C :)
Публикувано в категория Програмиране -- 24 Oct 2011, 03:08, 3 коментара --
View in English

Малко размисли
Няколко мисли ме осениха напоследък, тъй че ги изсипвам тука.
Докато рових из нета някаква юридическа информация (разни закони, членове, алинеи, кое в кой брой на държавен вестник е обнародвано и т.н.) изведнъж ми хрумна колко си приличат хората, които пишат и поддържат законите, сравнени с тези (ние), които пишат софтуер! Ами да... имаме еди-кой си закон (папка), който има някакви глави (файлове) с разни членове (класове), състоящи се от алинеи (методи). Всичко е подредено и номерирано (алинея 123 ≅ ред 504). Промените по тези файлове се правят чрез Държавен Вестник, който обяснява, че еди-кой си закон, тази и тази глава, членове този, онзи и т.н., който досега е гласял ХХХ, вече да се чете YYY. Сиреч, чист diff и нищо повече.
В духа на това сравнение — питам аз, кога най-сетне законотворците ще пуснат SVN достъп до законите и ще спрат да разпращат .patch-ове по Държавен Вестник?!?
Друго... бях се заровил малко в гледане на код по Linux ядрото, по-точно intel.c и amd.c... и вече тотално се убедих, че процесорите не са никакъв хардуер. Та те са пълни с бъгове! И всъщност, ти още ли си мислиш, че плащайки (да речем) 200 лева за новия 4-ядрен супер-дупер процесор, ти плащаш за силиция и хафния в кристала, или за златото по крачетата (за които си имат крачета, че Интелистите нямат)? Помисли отново.
И, между другото, ударих едно рамо на valgrind. Радвам се, когато (отново) пиша open source неща, които реално са ми полезни на работа. Обожавам работата си :p
Публикувано в категория Програмиране -- 6 Dec 2010, 02:25, 0 коментара --
View in English

Нова година
Последни минути преди Нова Година. Всички са се събрали на масата, пред телевизора, и слушат мъдрите слова на Президента. Вече са с по чаша шампанско в ръка, и (не)леко подпийнали...
... но не и аз. Аз стоя пред компютъра, високоскоростния интернет кърти, но за всеки случай съм се закачил и през едно модемче -- всичко става все пак, може някое от ISP-тата да издъхне в най-неподходящия момент. Останалото ви е ясно... отворен firefox, бутончето Refresh се цъка през пет секунди...
Сайтът? Нищо особено, скучноватости. C++, Строуструп, такива ми ти работи...
Времето лети.
*REFRESH*
*REFRESH*
*REFRESH*
... последните секунди, в които все още могат да публикуват C++0x ...
Публикувано в категория Програмиране -- 13 Jan 2010, 01:28, 0 коментара --
View in English

Защо Java (като език за обучение) суче?
Днес във ФМИ, освен много интересния семинар по рейтрейсинг, организиран от 3-ма български докторанта на университета в Саарбрюкен, и техния мастит професор Филип Слусалек, имаше и една среща с професора - в заседателната зала (онази, голямата, с готините маси). Преди семинара, проф. Слусалек ни разказваше най-различни неща, свързани с образованието. Две от тях наистина ми направиха впечатление. Смятах отдавна да пиша по въпроса тук, но днешната среща с професора ми даде стартова тяга.
Разказвайки за техния подход към образованието на Computer Science студентите си, той започна с това, че първия семестър, лекциите по програмиране се водят на Scheme.
Scheme? Wtf?!? Окей, това не е нова идея, и в MIT е така - но все пак в MIT отива половината гняс от международните състезания по информатика и математика, така че там новаци тъй или иначе няма. И на Brainfuck да ги учеха, нямаше да е голям проблем.
Но все пак. Scheme? Saarland? Самият професор призна, че част от първокурсниците идват с малко (или никакви) умения в програмирането, но изтъкна че...
"но, разбирате ли, част от идващите са доста добри програмисти, хакери, така да ги наречем. Те са много над нивото на останалите. И подронват авторитета на преподаващите, знаейки толкова много. Scheme им помага да охладят страстите си и ги поставя на едно ниво с новаците. Хакерите, ако и да са страшни в C++ или Perl или Bash, често не са и чували за Scheme..."
Тази част ми хареса. Наистина действа отрезвяващо на човек, научил един език до съвършенство, мислещ, че знае всичко, да му се докаже нагледно колко не е прав!
По-нататък професора спомена, че следващия семестър се водят курсове по практическо програмиране, което преди се е водело на C++, но сега минали на Java, и изрази съжалението си от този факт. Java-та не бил толкова добър език за обучение, не бил достатъчно close-to-the-metal и прочее.
Тук няма как да съм по-съгласен с професора, но моите причини са малко по-различни. За мен, Java не е достатъчно добър език за програмиране в университета, просто защото не е достатъчно сложен и не развива достатъчно абстрактното мислене. Да, това че е прост, и че е толерантен към грешките на програмиста, го прави подходящ за бизнес софтуер, но в университета това са негови недостатъци, а не предимства.
За да не се задълбавам в детайлен анализ по този въпрос, ви препоръчвам да прочетете прекрасната статия на Joel Spolski, където той е описал нещата много по-добре, отколкото аз мога. Тук ще илюстрирам само основните му точки и ще допълня малко мои възгледи.
Относно първия недостатък - простотата: идеята на един университет е да оцени и отсее добрите студенти от ... кхм.. не толкова добрите. На една програма по информатика, целта е да отсее истинските програмисти от посредствените. В тази насока, един гаден, гнусен, труден, и въобще - ужасен език, като C++, играе ролята на много добър филтър: човек, който се забатачи с указателите и не може да изкове една прилична имплементация на едносвързан списък (без memory leaks при това!) явно не го бива много-много, така или иначе. Такъв човек не трябва да завършва университета.
А е наистина жалко, че в последните години и във ФМИ се забелязва тенденцията C++ да се замества с Java. Така студентите не само нямат нужда да реализират свързан списък (имат си го в стандартната библиотека, защо им е?), но даже и да искат, не могат. Допуска се хора, които не могат да напишат едносвързан списък, да завършат университет и да си мислят, че ги бива в програмирането. А това е жалко.
Момента с указателите и ръчния memory management (като нещо, което развива характер в програмиста) е много важен и от една друга гледна точка. Докато човек пише, да речем, процедурата за изтриване на елемент от едносвързан списък, той трябва да мисли едновременно на две нива на абстракция: на едно ниво от гледна точка на клетките с данни, и на друго, от гледна точка на указателите и връзките между клетките. И ако на човек това му се струва сложно, да почака да види какво става в по-сложните структури данни като индексни дървета или хеш-таблици.
Окей де, но кой наистина на практика, в бизнеса, си играе да пише индексни дървета и хеш таблици? И защо изобщо е да се учат някакви излишни неща, при положение, че не са нужни в работата? Така стигаме и до третия въпрос, които искам да засегна: има една немалка група студенти във ФМИ, които непрекъснато мрънкат, че езиците и технологиите, които се изучават, са безнадеждно остарели, и че преподавателите като цяло са много назад с материала. Не може ли, вместо всичките тези излишни курсове по диференциални уравнения (примерно), да се пусне нещо наистина полезно, като C# .NET или Flash или JavaScript или ... и т.н. Тази група не се пресича непременно с другата (с посредствените програмисти), но истината е, че ако човек просто иска да иде някъде, където да научи най-новите технологии, с които после да бачка и да кърти големите пари, то мястото му не е в университета. Един практически курс по .NET отнема 6 месеца на един сериозен човек и струва по-малко (от финансова и времева гледна точка) от 4-те години Компютърни Науки във ФМИ примерно. Хората, които искат да са в индустрията, просто трябва да си отидат в академията на Наков и да приключат с въпроса.
Университетът не е развъдник на програмисти, които индустрията да консумира. Университетът не e подчинен на индустрията въобще. Последната винаги ще се оплаква, че няма достатъчно кадри, и, че "абе не можете ли тея деца да ги учите на нещо по-смислено, ами трябва като идват при нас да ги почваме от нулата". Но наистина, университетът не е роб на желанията на индустрията. Той е институция, която цели да изгради определен начин на мислене във възпитаниците си (с което ФМИ се справя, в голямата си част, добре), и да се занимава с ресърч (където, трябва да признаем, нещата не са толкова добре, но се правят опити). Нормално е да няма много допирни точки с индустрията.
Но, наистина, постоянните оплаквания и сополи от това колко труден е C++* най-накрая са постигнали съмнителната цел да се мине на Java, защото, хей, за доста хора C/C++ наистина се оказа филтърът, който ги спря във втори курс. И после избягаха да работят на Java или C# някъде, където просто плащат добре, ползват най-новите технологии, вадят си сертификатчета и са куул. А истината е, че един добър програмист може да научи даден нов език за съвсем кратко време, след като има основата и модела в главата си. И няма значение дали е C++ guru, който отива в Java средата или обратно - ако е добър, няма значение. Ако е посредствен, то ще е истинско мъчение.
Резултатът от Javaризацията на ФМИ вече си личи дори при моите студенти. Не една или две работи вече проверявам, при които, в най-вътрешния цикъл на алгоритъма, студентът смело създава 3D вектора, който трябва да се върне като резултат, като го заделя на heap-а! Дори на човек с базова школовка по ръчен memory management веднага ще му светне червената лампа в главата, че липсва съответния delete. Но това, че генерират брутален memory leak, явно въобще не ги притеснява, защото при тях се оказва, че паметта стига. Щеше ми се да не стигаше.
--
* тук наистина не се хващайте за езика: със същия успех може да дадете за пример C или Pascal - и в двата си имате ръчен memory management и може да си оплетете каквато каша си поискате с указателите.
Публикувано в категория Програмиране -- 15 Dec 2009, 04:35, 6 коментара