Постове 1 - 5 от 11 с таг Learn

Sep 23

От началото на месеца, голяма част от работата ми включваше почти изцяло пренаписване на повечето unit тестове на основните ми PHP библиотеки. Основната причина за това беше че повечето тестове бяха на повече от година, като през този период само съм добавял код за нови методи. И през това време тестове станах доста големи и тежки затова се наложи това малко “освежаване”

Основното нещо което исках да тествам по-добре този път бяха ‘protected’ методите на голяма част от класовете. Примерно основния ми Controller клас има само 2 публични метода и всичко друго е protected. Защото идеята на този клас  е да се ползва “отвътре”.

Преди какво правех? Просто си дефинирах един помощен decorator клас през който виках protected методите. Обаче това винаги ми се е струвало доста “мръсно” решение.  Затова реших потърся дали някой не се е сетил нещо по-добро от мен. И затова потърсих -  “php testing protected methods“. И от там намерих този пост – Testing protected Methods in Unit Tests от Frontalaufprall. Което на този етап ми се вижда перфектното решение. И така с много малко промени се получи този код с който тестването на protected методи става изключително лесно:

function getProtectedMethodsProxy($className){
	$proxyClassName = $className . 'PrivateMethodsProxy';

	if (!class_exists($proxyClassName, false)){
		eval('
			class ' . $proxyClassName . ' extends ' . $className . ' {
				public function __call($method, $arguments){
					$method = str_replace("_", "", $method);

					if (!method_exists($this, $method)){
						return parent::__call($method, $arguments);
					}

					return call_user_func_array(array($this, $method),  $arguments);
				}
			}
		');
	}

	if (func_num_args() == 1){
		return new $proxyClassName();
	}

	$class = new ReflectionClass($proxyClassName);
	return $class->newInstanceArgs(array_slice(func_get_args(), 1));
}

Начин на ползване:

$class = getProtectedMethodsProxy('Controller_Action');
$class->_redirect('http://next.pixeldepo.com');
// и вариант с параметри в конструктора
$class = getProtectedMethodsProxy('SomeClass', 1, 2, 3); // new SomeClass(1, 2, 3);
$class->_someVeryProtectedMethod('test');

Все пак eval не винаги е толкова лош :)

Mar 24

Преди време написах Учене на Javascript, но като всяко нещо и този списък остаря. Въпреки че самия JavaScript не се е променил много, все пак самия начин на работа с него се изменя непрекъснато.  Затова реших да спретна още един малък списък с ресурси за тези, които биха искали да се научат как се работи с JavaScript. Този е на малко по-високо ниво от предишния.

Започваме с добрия стар Douglas Crockford“Ajax Performance”

yuiblog връзка – http://yuiblog.com/blog/2008/12/23/video-crockford-performance/
video.yahoo.com връзка – http://video.yahoo.com/watch/4141759/11157560
m4v файл – http://us.dl1.yimg.com/download.yahoo.com/dl/ydn/yui/theater/crockford-performance.m4v
PPT презентация – http://yuiblog.com/assets/crockford-performance.zip

Малко от създателя на jQuery, John Resig и отново от yahoo – “The DOM Is a Mess”

yuiblog връзка – http://yuiblog.com/blog/2009/02/02/video-resig-2/
video.yahoo.com връзка – http://video.yahoo.com/watch/4403981/11812238
m4v файл – http://us.dl1.yimg.com/download.yahoo.com/dl/ydn/yui/theater/resig-dom.m4v
PPT презентация – http://www.slideshare.net/jeresig/the-dom-is-a-mess-yahoo

Също така, пак от John Resig – Learning Advanced JavaScript

Тъй като, предишните няколко ресурса са малко по-advanced, мисля да добавя и нещо малко по-просто Glenn Vanderburg  и The Power of Javascript. Доста полезни неща научих от нея, да не говорим, че и Glenn Vanderburg написа един страхотен  post – Why I still prefer Prototype to jQuery.

Колкото и да обичам video-то, се оказва че доста хора харесват все още добрата стара книга, затова ще добавя и Oliver SteelePractical Functional JavaScript: Code Samples.

С нотка на национална гордост препоръчвам и Object-Oriented JavaScript от Стоян Стефанов. Честно казано не съм я чел още, но от 2~3 познати съм чух, че е добро четиво. И възнамерявам в скоро време и аз да я прочета.

Ако някой знае още полезни ресурси за JavaScript да се чувства поканен да ги сподели.

Nov 30

Изненадващо е колко много хора не знаят, че в PHP файловете може да връщат резултат с return, който може да бъде прочетен с include / require. Даже го има и в документацията на PHP, eто пример:

// file1.php
return array('key' => 'value');

// file2.php
$arr = include 'file1.php';

echo $arr['key'];

// резултат: value

Като тук вместо include, може да се използва require (единствената разлика между двете е грешката, която възниква при проблем с отварянето на файла). Но аз лично предпочитам да използва include само когато php скрипта връща резултат, a require когато добавям нещо.

Тук трябва да се обърне внимание на 2 неща:

  1. require_once / include_once ако има return връщат стойност само първия път в който са извикани, а после нищо не връщат. Но те по принцип е добре да се избягват, особено ако се връща резултат
  2. всяка променлива / функция / клас / … която е била декларирана във include файла (file1.php в примера) си остава записана и достъпна. Така че ако в file1 се декларира $name = ‘Radoslav’; например във file2.php, $name ще е пак ‘Radoslav’. Затова е добре да се unset -ват всички ненужни глобални променливи, които не са нужни
Sep 09

/ Много лошо заглавие но не измислих по-добро, ако някои се сети да каже, веднага го сменям /

BGDev е интересно място, преди години го следих, но нито имаше какво да питам, нито какво да отговарям. Затова въпреки че имам регистрация от 11.05.04 имам само 142 поста(0.1 на ден). Имаше период в който беше в Feed Reader-a ми и доста редовно го следях, но сега само от дъжд на вятър минавам през форума и главно гледам на главната страница дали има нещо интересно за четене.

Та днес видях една “стандартна” тема за Нов Български университет и както винаги темата се измести от Нов Български на Софийски – Технически университети, нивото на българското образование, трябва ли математика да се учи за да станеш добър програмист и т.н. Както винаги става с подобни теми в последните години (или поне в тези който аз съм виждал). Ох, да линка да дам:

Нов български университет

Общо взето доста далече съм от София и нямам голямо желание да участвам във поредните сплетни.

Това което ми направи впечатление беше един случаен линк:

http://www.fmi.uni-sofia.bg/id-08-09-zimen ( ФМИ: Изборни дисциплини 08/09, зимен семестър )

От чисто любопитство исках да видя какво учат в Софийския университет, все пак те трябва да са най-добре подготвените в България.

На слуки натиснах първия линк който видях. Връзката, която имаше късмета да бъде избрана беше – “Езици и среди за програмиране и разработка в Интернет, доц. П. Павлов” (често така беше, съвсем случайно я избрах) и тя водеше до:

http://www.fmi.uni-sofia.bg/eleten/47.pdf

И си викам: Еи, моята специалитет ;)
Чета:

1. Интернет. Основни информационни услуги. Браузери. Машини за търсене на информация. 2. Езикът HTML. Структура на HTML документ. Елементи в секция HEAD. 3. Елементи в секция BODY. Управление на текстовия поток. Списъци. 4. Хипервръзки. Графика. Таблици. 5. Формуляри. Фреймове. 6. Независима каскада от стилови формати. 7. JavaScript. Типове данни. Оператор за присвояване.Операции и изрази. 8. Условен оператор. Оператори за цикъл. 9. Функции в JavaScript. 10. Обекти в JavaScript. Масиви. Обект Date, Math, document, Window, navigator. 11. Събития в JavaScript.

Викам си: Е нищо ново стандартни приказки, сигурно от 10 години седи като текст (нямах си и представа, колко съм бил прав)
И после видях:

Препоръчана литература:
1. Маджаров, И., Интернет за персонален компютър. София, 1997
2. Как да си направим лична Web страница, като използваме HTML. София, 1997
3. Дончева, Р., Програмиране в Интернет. Част I- HTML. София, 1998
4. Дончева, Р., Програмиране в Интернет. Част II – JavaScript. София, 1999

Честно щях да падна от стола!
Първите 3 книжки не ги знам, но 97, 97, 98 – и HTML и програмиране в Интернет ~ коментарът излишен.
Но книга за JavaScript от 1999 – когато всички са мислели че този език е просто играчка! Че такова нещо просто …. Не че аз в университета бях с по-нови книги ( то аз JS учебника ми 1 път го видях само, като казвах че за нищо не става) Но все пак се надявах че поне с нещо от 2002-2003 ще учат, нещо по-новичко, в което ще има нещо полезно и актуално.

За мен най-добре JavaScript може да се научи учи като се гледат лекциите който са тук( и се прегледат книгите който са там):

http://next.pixeldepo.com/2008/06/23/%D1%83%D1%87%D0%B5%D0%BD%D0%B5-%D0%BD%D0%B0-javascript/

Бих добавил (или повторил ):

  • Douglas Crockford: JavaScript: The Good Parts ( просто задължителна )
  • Dustin Diaz: Pro JavaScript Design Patterns
  • ( още не излязлата книга на ) John Resig: Secrets of the JavaScript Ninja, в нета хвърчат глави от нея и те изглеждат доста обещаващи
  • John Resig — “Advancing JavaScript with Libraries” Part 1 и Part 2
  • Glenn Vanderburg -  The Power of Javascript ( на това специялно внимание, особенно ако някои е чел книжки за JavaScript от създаването му до към 2006 или 2007)
  • + някоя по-нова книга за Jquery / Prototype Scriptaculous , за Mootools / YUI / ExtJS не знам дали има написани, но от google може да се събере доста материял.

п.п. Останалите дисциплини който прегледах във ФМИ ми се сториха интересни, поне 2-3 пъти по интересни от 70% от нещата които учих до сега ( и май ще уча следващите години :( ) в Университета. Само това за програмирането в интернет е …#$@

п.п. Ехе излишно дълъг стана поста и ако някой е стигнал до края, и се е сетил за по-добро заглавие …. ;)

Sep 04

От една-две седмици вече в блога се появяват връзки от моя delicious акаунт – http://delicious.com/RStankov и реших да споделя как точно става това. А то ставало наистина лесно:

  1. Влизате във Вашия delicious aкаунт (като преди това си правите такъв ако нямате :) ).
  2. Избирате Settings, https://secure.delicious.com/settings/, от горния десен ъгъл, а може направо и връзката да натиснете, за да влезете, прескачайки стъпка 1.
  3. Ще видите списък с различни услуги и настройки. Най-долу е Blogging – oт там избирате Blog Posting.

  4. После трябва да добавите blog posting job като изберете Add a new blog posting job.
  5. След това трябва да въведете:
    • job_name - това в просто, името на blog posting job-а
    • out_username – Вашето потребителско име за блога (бих Ви препоръчал да си направите нов потребител само за delicious-ите)
    • out_password – парола за това потребителско име
    • out_url – пълният път към XML-RPC на Вашия блог, обикновено е http://{адреса на вашия блог}/xmlrpc.php
    • out_blog_id – blog ID номер, оставете го 1
    • out_cat_id - може да се остави празно. Идеята му  е, това да е категорията, в която да се постват връзките, но при мен, когато го оставих празно почнаха да се получават връзките, преди това не стработваше.
  6. Натискате “submit job” и сте готови.

Ами това е. :) По-лесно е от колкото си мислех.

п.п. Ако ВашияТ блог не е WordPress, не би трябвало да има проблем пак да получавате връзките. Мисля, че повечето, да не кажа всички, по-известни блог системи имат xml-rpc клиент. Но ако нямат XML-RPC, не е толкова сложен протокол, че да не може сами да си го интегрирате.