→

Смешинко →  Смешные комментарии в коде

/*
 * OK; before you read the following code know what I am trying to do.
 * I needed to get the list of child catagories from the root node so that
 * the root node didn't appear in the selection box. But for some stupid
 * fucking reason the stupid fucking DBA wont let me access the items using
 * indices and I instead have to use their stupid fucking Iterator
 * implementation. So there.
 */

$firstList = $this->getRootNode()->getChildren();
foreach ($firstList as $node)
{
    $nodes = $node->getChildren();
    break;                // wtf?
}


// if i ever see this again i'm going to start bringing guns to work


//hack for ie browser (assuming that ie is a browser)


/**
* For the brave souls who get this far: You are the chosen ones,
* the valiant knights of programming who toil away, without rest,
* fixing our most awful code. To you, true saviors, kings of men,
* I say this: never gonna give you up, never gonna let you down,
* never gonna run around and desert you. Never gonna make you cry,
* never gonna say goodbye. Never gonna tell a lie and hurt you.
*/


//
// Dear maintainer:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 16
//


// TODO: Fix this. Fix what?


// no comments for you
// it was hard to write
// so it should be hard to read


// I will give you two of my seventy-two virgins if you can fix this.


options.BatchSize = 300; //Madness? THIS IS SPARTA!


// I am not responsible of this code.
// They made me write it, against my will.


//Dear future me. Please forgive me.
//I can't even begin to express how sorry I am.


double penetration; // ouch


# To understand recursion, see the bottom of this file.


Что пишут в футерах:


# To understand recursion, see the top of this file.


//I am not sure why this works but it fixes the problem.


//somedev1 - 6/7/02 Adding temporary tracking of Logic screen
//somedev2 - 5/22/07 Temporary my ass


/*
 * You may think you know what the following code does.
 * But you dont. Trust me
 * Fiddle with me, and youll spend many a sleppless
 * night cursing the moment you thought you be clever
 * enough to "optimize" the code below.
 * Now close this file and go play with something else.


// drunk, fix later


// Magic. Do not touch.


// I dedicate all this code, all my work, to my wife, Darlene, who will
// have to support me and our three children and the dog once it gets
// released into the public


Exception up = new Exception("Something is really wrong.");
throw up; //ha ha


//When I wrote this, only God and I understood that I was doing
//Now, God only knows
1
1

PHP программирование →  Переход от php4 к php5

Переход к PHP5


Краткий обзор возможностей PHP по материалам PHP 5 beta 3.
PHP, фактически, является самым распостраненным языком для Web программирования. В достижении этого статуса он прошел множество этапов, от простого языка для Web программирования который уступал многим (php3), до сегодняшнего быстрого мощного и расширяемого (PHP4). Тем более приятно, что PHP не стоит на месте и продолжает развиваться оставаясь таким-же простым для начинающих и предоставляя все больше возможностей более квалифицированным разработчикам.

Введение

PHP, фактически, является самым распостраненным языком для Web программирования. В достижении этого статуса он прошел множество этапов, от простого языка для Web программирования который уступал многим (php3), до сегодняшнего быстрого мощного и расширяемого (PHP4). Тем более приятно, что PHP не стоит на месте и продолжает развиваться оставаясь таким-же простым для начинающих и предоставляя все больше возможностей более квалифицированным разработчикам. В предверьи выхода PHP5 появляется множество информации о улучшениях в PHP 5, включая информацию от самих разработчиков. Например, замечательная статья от одного из авторов Zend Engine — Zeev Suraski (http://phpclub.ru/detail/article/2004-01-07) и её перевод на phpclub.ru очень помогут в понимании тонкостей изменения работы с объектами. Существуют, конечно, и общие обзоры возможностей PHP5, сделанные как отечественными так и зарубежными авторами. В своем обзоре я попытался дать наиболее полное представление о изменениях в PHP5, на сколько это возможно. Эта статья также является в некотором роде «отчетом о проделанной работе», поскольку обзор каждого изменения собровождался детальным его изучением и попыткой использовать на практике.

На этом заканчиваем введение и приступаем к основной части.

Новые уровни доступа private и public

В PHP5 добавлены новые модификаторы уровня доступа для переменных классов. Как и во многих других языках программирования, они носят названия private, protected и public.

Private — самый ограниченничивающий модификатор. Private переменная класса может быть использованна только в классе, в котором объявленна. К ней невозможно обратиться из другого программного кода.

Protected — расширение области private, добавляющее к ней возможность обращаться к переменной из классов-потомков.

Public — расширяющий protected модификатор, задающий наиболее широкую область доступа. К возможности использовать переменную в классах-потомках, добавляется возможность обращаться к переменной непосредственно из другого кода. Строго говоря, public не является новой областью доступа. Ранее в PHP все переменные классов являлись public переменными.

Private переменные используются для алгоритмов, которые используются только в текущем классе и не могут быть переопределенны в классах-потомках. Protected может быть использован, когда организовывается семейство объектов, обладающих сходными алгоритмами и организованных в иерархию. Использование public переменных, обычно, не является хорошей практикой но иногда оправданно. Их можно использовать, если у класса много свойств, которые должны быть доступны всем алгоритмам, использующим этот класс.

Аналогично, private/protected/public мидификаторы применяются к методам класса. Методы, объявленные без модификатора, являются public методами.

Если метод или переменная переопределяются в классе-наследнике, то уровень доступа должен быть таким-же или выше. Например, protected метод в классе-потомке можно сделать public, но нельзя private.

Для примера рассмотрим классы NewClass и NewClass1.

class NewClass {
// new PHP5 modifiers
private $myPrivateVar = 'myPrivateVar';
protected $myProtectedVar = 'myProtectedVar';
public $myPublicVar = 'myPublicVar';
// old PHP declaration
var $myVar = 'myVar';
}

class NewClass1 extends NewClass {
function getProtectedVar() {
return $this->myProtectedVar;
}
}


NewClass содержит несколько переменных с разными областями доступа. NewClass1 используется для тестирования областей видимости, связанных с наследованием.

Создаем объекты классов:

$c = new NewClass();
$c1 = new NewClass1();


Обращаемся к переменным:
print $c->myPrivateVar;

Непосредственное обращение к private переменной приводит к ошибке.
print $c->myProtectedVar;

Непосредственное обращение к protected переменной приводит к ошибке.
print $c->myPublicVar;

Обращение к public переменной возвращает её значение.
print $c->myVar;

Обращение к переменной, объявленной в старом стиле, равносильно обращению к public переменной.
print $c1->myPrivateVar;

Private переменная не была унаследованна классом NewClass1. Обращение к ней равнозначно обращению к необъявленной переменной.
print $c1->myProtectedVar;

Protected переменная была унаследованна и непосредственное обращение к ней приводит к ошибке. Для проверки, что она была унаследованна вместе с начальным значением, можно вызвать «print $c1->getProtectedVar();».
print $c1->myPublicVar;
Public переменная была унаследованна и обращение к ней возвращает её значение.

Продолжение:
http://php5.com.ua/blog/php-programming/134.html
http://php5.com.ua/blog/php-programming/135.html
http://php5.com.ua/blog/php-programming/146.html
2

Что новенького →  Русский мануал убрали

Со страницы оф сайта http://www.php.net/download-docs.php убрали русский мануал по php. Кому-то мешал или поддерживать не смогли?

У нас остался http://doc.php5.com.ua/, правда не к php 5.3, но основной набор функций можно почитать на русском.
3

Управление проектами →  Мечты, мечты


А вообще, я очень хочу, чтобы наша профессия со временем стала такой же инженерной дисциплиной, как, например, строительство.

Вам нужно здание? Извольте заплатить за проект, а потом за возведение, или покупайте (арендуйте) готовое, но тут уж не выдвигайте требований пристроить к нему еще 30 этажей. Изволили построить времянку, а теперь хотите ее превратить в доменный цех? Нет проблем — СНОСИМ времянку и строим цех. Через пять лет вам потребуется переделать цех в аэропорт? Ваши трудности: хуй в голове — медицина бессильна.

Вы никогда не задумывались почему в IТ такой процент проваленных проектов (представьте себе такой процент, например, в автомобилестроениии)? А потому, что делают их не в рамках инженерного подхода, а вопреки ему…
И заметьте, никто не кричит — «пидарасы не хотят переделать речной трамвайчик в ледокол».

Ээээх мечты…
0

Что новенького →  Запустили

В продолжение темы Інтернет-холдинг Ріната Ахметова запускає інформаційний портал Tochka.net

Запустили бету:) .

Я тоже вставил туда свои пять копеек:)

Правда, до идеала там далеко.
0
1

PHP программирование →  Юнит-тестирование контроллеров Zend Framework

Тестирование Веб-приложений — это комплексная задача, потому что веб-приложение создается из нескольких логических слоев. Модульное тестирование контроллера Zend Framework может быть весьма трудной задачей, особенно для тех, кто слабо знаком с Zend Framework.

Вы можете тестировать свои контроллеры действий используя Zend_Test и/или PHPUnit. Zend_Test позволяет вам имитировать запросы, передавать тестовые данные, контролировать вывод вашего приложения и в целом убедиться в том, что ваш код делает именно то, что должен делать. Вам решать, какой из них использовать. Если вы не можете выбрать один из них, то можете использовать оба. Если вы только знакомитесь с тестированием с помощью Zend_Test, то эта статья будет лучшей точкой старта.

Фреймворк PHPUnit может показаться очень знакомым тем разработчикам, которые пришли из Java. Разработчики PHPUnit черпали вдохновение из JUnit — тестовом фреймворке для платформы Java, поэтому вы будете чувствовать себя как дома при использовании PHPUnit если вам уже приходилось сталкиваться с JUnit или одним из его клонов.

Конечно, никто не запрещает вам использовать системы бок о бок (даже в одном и том же приложении). В конце концов, большинство проектов так и будет использовать.

Использование PHPUnit


app/
    config/
    controllers/
        ExampleController.php
    models/
    views/
lib/
    Zend/
public/
tests/
    controllers/
        AllTests.php
        ExampleControllerTest.php
    lib/
    AllTests.php
    bootstrap.php


Тестовый набор нуждается в некоторой информации об окружении, и обычно эта информация находится в файле bootstrap.php. Самым большим отличием этого файла от одного из из используемых в вашем приложении является то, что Фронт-контроллер не выполняет диспетчеризацию объекта запроса:

tests/bootstrap.php
<?php
/* Start output buffering */
ob_start();

/* Report all errors directly to the screen for simple diagnostics in the dev environment */
error_reporting( E_ALL | E_STRICT );
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/London');

/* Determine the root and library directories of the application */
$appRoot = dirname(__FILE__) . '/..';
$libDir = "$appRoot/lib";
$path = array($libDir, get_include_path());
set_include_path(implode(PATH_SEPARATOR, $path));

define('APPLICATION_PATH', $appRoot . '/app');
define('APPLICATION_ENVIRONMENT', 'dev');

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

$front = Zend_Controller_Front::getInstance();
$front->throwExceptions(true);
$front->setParam('noViewRenderer', true);
$front->setParam('env', APPLICATION_ENVIRONMENT);
$front->setRequest(new Zend_Controller_Request_Http());
$front->returnResponse(true);

$router = $front->getRouter();
include APPLICATION_PATH . '/config/routes.php';
$router->addRoutes($routes);
$router->setParams($front->getParams());

$dispatcher = $front->getDispatcher();
$dispatcher->setParams($front->getParams());
$dispatcher->setResponse($front->getResponse());
$router->route($front->getRequest());


Обратите внимание! Отключение помощника ViewRenderer является не обязательным. Однако, вам должно быть известно, что использование класса Zend_Controller_Action_Helper_ViewRenderer может привести к снижению производительности. Подробнее об этом можно прочесть здесь.

Класс PHPUnit_Framework_TestSuite фреймворка PHPUnit позволяет вам организовать тесты в иерархические наборы тестов:

tests/AllTests.php
<?php
require_once dirname(__FILE__) . '/bootstrap.php';
require_once dirname(__FILE__) . '/controllers/AllTests.php';

class AllTests
{
    public static function main()
    {
        $parameters = array();
        PHPUnit_TextUI_TestRunner::run(self::suite(), $parameters);
    }

    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('My Application');
        $suite->addTest(ControllersAllTests::suite());
        return $suite;
    }
}
AllTests::main();


tests/controllers/AllTests.php
<?php
require_once dirname(__FILE__) . '/ExampleControllerTest.php';

class ControllersAllTests
{
    public static function main()
    {
        PHPUnit_TextUI_TestRunner::run(self::suite());
    }
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('My Application - Controllers');
        $suite->addTestSuite('ExampleControllerTestCase');
        return $suite;
    }
}


Написание модульных тестов


Из-за довольно странных причин эта часть не описана в документации. Вот что вам нужно сделать до написания теста:

1. Подключить контроллер, который вы собираетесь тестировать.
2. Расширить контроллер действий (унаследовавшись от него).
3. Сбросить состояние экземпляра фронт-контроллера.
4. Указать путь к тестируемому контроллеру действий.
5. Установить объекты Запроса и Ответа.
6. Создать экземпляр тестируемого объекта.

Пример:
tests/controllers/ExampleControllerTest.php
<?php
require_once APPLICATION_PATH . '/controllers/ExampleController.php';

class ExampleControllerTest extends ExampleController
{
    public function __construct($url = null)
    {
        $front = Zend_Controller_Front::getInstance();
        $front->resetInstance();
        $front->setControllerDirectory(APPLICATION_PATH . '/controllers');
        $front->setRequest(new Zend_Controller_Request_Http($url));
        $front->setResponse(new Zend_Controller_Response_Http());
        parent::__construct($front->getRequest(), $front->getResponse());
    }
}


Вся магия происходит внутри класса ExampleControllerTest. Он делает так, что контроллер действий думает, что был вызван фронт-контроллером в цикле диспетчеризации. Единственный путь сделать это — создание экземпляра контроллера действий без диспетчеризации запроса. Получение экземпляра контроллера действий дает вам больше контроля и гибкости, особенно при тестировании веб-сервисов.

А теперь пришло время создать наш первый тестовый набор. Тестовый набор это класс, наследуемый от PHPUnit_Framework_TestCase, содержащий тестовые методы, определяемые по префиксу «test» в названии метода.

require_once APPLICATION_PATH . '/controllers/ExampleController.php';

class ExampleControllerTest extends ExampleController
{
    ...
}

class ExampleControllerTestCase extends PHPUnit_Framework_TestCase
{
    public function testDefaultAction()
    {
        $controller = new ExampleControllerTest();
        $isDispatched = $controller->indexAction();

        $this->assertTrue($isDispatched);
    }

    public function testFirstAction()
    {
        $url = 'http://localhost/example/first';
        $controller = new ExampleControllerTest($url);
        $controller->firstAction();
        $errorMsg = $controller->getRequest()->getParam('error_message', null);

        $this->assertEquals(null, $errorMsg);
    }

    public function testGetParameterName()
    {
        $url = 'http://localhost/example/first/fed';
        $controller = new ExampleControllerTest($url);
        $name = $controller->getRequest()->getParam('name', null);

        $this->assertEquals('fed', $name);
    }

    public function testGetNameMethod()
    {
        $url = 'http://localhost/example/first/fed';
        $controller = new ExampleControllerTest($url);
        $name = $controller->getName();
        $this->assertEquals('fed', $name);
    }
}

Запуск тестов



federico@tests$ phpunit AllTests
PHPUnit 3.3.8 by Sebastian Bergmann.
.....
Time: 0 seconds
OK (4 tests, 4 assertions)


Если тестирование завершится неудачно, то вы увидите подробную информацию о проваленном тесте. По желанию, вы можете подключить Phing в Hudson и автоматизировать выполнение этой задачи. Если есть вопросы — обращайтесь.
0

Что новенького →  Второй раз подряд Россия становится чемпионом мира по программированию

Уже второй год подряд победителем студенческого чемпионата мира по программированию стала команда Санкт-Петербургского государственного университета информационных технологий, механики и оптики.

Сто лучших университетских команд мира, отобранных из 7109 команд 1838 университетов, собрались в Шведском королевском технологическом институте (Royal Institute of Technology, KTH). Их задача состояла в разработке ПО, которое может помочь в решении проблем мирового уровня. Каждой команде, состоящей из трех участников, было предложено 11 задач. Например, создание расписания аэропорта для безопасной посадки самолетов, которое бы учитывало изменение погодных условий, или оптимизация транспортного потока в часы пик. Выбранная участниками технология должна основываться на открытых стандартах.

Команды-победители определялись, во-первых, по количеству правильно решенных задач, а при прочих равных — по наименьшему времени, затраченному на поиск решения. Команда студентов из Санкт-Петербурга решила 9 из 11 задач. На чемпионате ACM ICPC вручается по четыре золотых, серебряных и бронзовых медали. Второе, третье и четвертое места заняли соответственно команды Университета Циньхуа (Tsinghua University) из Китая, Санкт-Петербургского государственного университета и Саратовского государственного университета.

21 апреля 2009 г. в Стокгольме прямо в том же зале, где лауреатам вручают Нобелевскую премию, наградили победителей финала очередного студенческого командного чемпионата мира по программированию International Collegiate Programming Contest (ICPC) 2009. На этот раз команды из России заняли первое, третье и четвертое места.

Всего за последние 10 лет Россия на этих соревнованиях завоевывала чемпионский титул 6 раз.

Следующий мировой финал чемпионата ICPC 2010 состоится в китайском Харбине. Команды будет принимать Харбинский научно-технический университет (Harbin Engineering University).

Источник — cnews.ru

В продолжение темы ролик о том, куда деваются эти люди.
Как создавалась советская операционная система к столетию Ленина? Почему в России не осталось IT-специалистов? Как западные компании присваивают наши достижения? Ответы на эти и другие вопросы дает один из крупнейших в мире ученых и бизнесменов Михаил Владимирович Донской.

0

Что новенького →  Премию Тьюринга опять дали женщине

Самую престижную в области информатики Премию Тьюринга в этом году опять дали женщине. Опять, потому что это произошло во второй раз за последние три года. То есть в последнее время лучшими программистами и компьютерными учёными мира признаются не мужчины, а женщины.

В этом году премию присудили (Губерман), профессору Массачусетского технологического института. Барбара Лисков руководила разработкой таких языков программирования как CLU и Argus в 1970-х и 80-х годах, а также объектно-ориентированной системы управления базами данных Thor. Вместе с Дженнет Уинг, Лисков разработала в 1987 году принцип подстановки — концепцию определения подтипа, очень важный элемент в логике объектно-ориентированных языков программирования. Её изобретения стали основой для разработки языков C++, Java и C#. Кстати, она является первым в США человеком, получившем степень доктора компьютерных наук (в далёком 1968 году).

«Всякий раз, когда вы обмениваетесь электронной почтой с другом, проверяете банковский счёт в интернете или запускаете поиск Google, вы пользуетесь плодами её исследований», — сказал проректор МТИ Рафаэль Рейф, комментируя решение жюри.
0