Окт 31
Приватбанк - банкрот ?!
icon1 admin | icon2 Без рубрики | icon4 10 31st, 2008| icon39 Comments »

Вот не навижу спаммеров просто ненавижу!!!
Недельку назад тысячи жителей Украины получили email с информацией о том, что Приватбанк стал банкротом.
Интересно, дал ли хоть малейший эффект данный ход конкурентов банка?
Услышав эту информацию, я тоже чуть под стол не упал… Но вскоре выяснилось что это не так :)

P.S.: мочи спаммеров!!!

Окт 22

Очень часто разработчик встречается с проблемой неверного отображения символов на странице (всегда используйте только UTF-8!). Причин тому может быть несколько. В общем случае на это влияют следующие факторы:

Проблемы с базой данных

1) База должна быть создана с такими параметрами:

charset - utf8

collation - utf8_general_ci

2) Текстовые поля в таблицах также должны иметь charset  utf8 и collation  utf8_general_ci

Проблемы с кодировкой файлов

Каждый файл сохраняйте в UTF-8 кодировке (ну и с Unix переносами строк, естественно :-)

Кодировка в Symfony

В symfony все просто - в файле databases.yml указываем кодировку, например:

all:
  propel:
    class:      sfPropelDatabase
    param:
      phptype:  mysql
      host:     localhost
      database: the
      username: root
      password: 123
      encoding: utf8
Окт 17

Две недели все ждали результатов конкурса Программания 2008. Дождались…
С нетерпением захожу на сайт, посмотреть результаты. А там - облом. Половина вопросов, на которые отвечал - не оценены (также как у  моих друзей) - при чем не оценены те области, в которых у нас самые сильные знания.  Случайность?  Или призы изначально знали своих владельцев? Не понятно.
Кроме этого просто БЕСИТ datagrid, в котором показаны результаты - сортировка по столбцам приводит к полному очищению содержимого колонки. Навигация по городам при выбранном номере анкеты приводит к увеличению таблицы в 2 раза (данные дублируются горизонтально).
Короче, слов не хватает…
Видимо, не очень хорошим получился результат слияния Validio и Global Logic. Как было сказано руководителем Валидио:
“Нас теперь около 400 человек (в Харькове), мы учимся у наших коллег…” - результат обмена опытом со специалистами из Индии и Китая  дает о себе знать :)
Обидно просто…

Окт 6
Программания 2008
icon1 admin | icon2 Без рубрики | icon4 10 6th, 2008| icon34 Comments »

4 октября 2008 года прошел очередной конкурс “Программания” от компании (экс Validio) Global Logic. Это был 13 по счету конкурс, проходил он в здании Харьковского театра оперы и балета - народу было очень много. Стоит отметить, что в этом году конкурс проходил не только в Харькове, а еще в Киеве и Львове. Призы были стандартные (много было мониторов), главный приз - MacBook Pro :)
В этом году вопросы мне понравились - отвечал на темы PHP, Dynamic HTML, AJAX, XML, Основы SQL, English ну и совсем чуть чуть .NET.
Количество граблей было достаточным. Каждый второй вопрос, естественно, был с подвохом. Поделюсь с вами этими каверзными вопросами.

Dynamic HTML

1. Как будет выглядеть блок? (какой будет вид bordera?)

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<html>
<head>
<style>
 .red     { border:1px solid red;      }
 .blue    { border:1px solid blue;     }
 .yellow { border:1px solid yellow; }
</style>
</head>
<body>

<div class=red yellow blue>
  Block with border
</div>

</body>
</html>

И как вы думаете?
Ответ: на самом деле блок будет иметь ЖЕЛТУЮ рамку, т.к. CSS класс “yellow” был определен последним в секции style (а порядок задания классов в элементе не имеет значения).

2. Вопрос по поводу приведения типов в javascript:

Каким будет значение переменной a?

var a = 1 + 2 + “3″;

Ответ: 33
Javascript изначально выполнит сложение целых чисел, а потом произведет конкатенацию со строкой.

3. Подвох при работе со строками в javascript (replace)

Каким будет значение переменной s?

var s = “000,777,000,777″;
s = s.replace(“000″, “111″);

На первый взгляд, хочется сказать, что результирующая строка будет выглядеть так: “111,777,111,777″.
Но в действительности метод replace предназначен для работы с регулярными выражениями. В данном случае первый параметр - строка “000″ рассматривается как регулярное выражение и результатом будет строка “111,777,000,777″ (перестановка выполнится при первом нахождении подстроки “000″).
Если же вам нужно заменить подстроку в строке javascript, то следует добавить в регулярное выражение модификатор g (global):

var s = “000,777,000,777″;
s = s.replace(/000/g, “111″);

Здесь уже выполнится замена всех вхождений подстроки и результатом будет “111,777,111,777″.

4. Добавление комментария в div средствами DOM.

В принципе, ничего сложного. Просто никогда не пользовался - да и вообще не пойму кому такое нужно?
Например, есть div:

<div id=“block”>
 Нуждаюсь в комментарии
</div>

Добавление комментария:

document.getElementById(“block”).appendChild(document.createComment(“русский коммент”));

ИМХО, этот вопрос был включен с мыслью о том, что никто не использует это на практике. document.createComment встречается гораздо реже чем document.createElement :)

По PHP граблей было куда меньше, так что эти вопросы рассматривать не буду. Пожалуй, единственное, что было новым для меня - один момент относительно обработки исключительных ситуаций. Информацию эту узнал в тот же день, когда пошел на очередную пару по JAVA (я теперь каждую субботу еще и на JAVA хожу :).
Момент заключается в следующем: если у нас есть наследники класса Exception (например, MyException) и если в блоке try возможен выброс исключений родительского класса и класса наследника, то отлавливать их нужно в порядке от наследника до родителя. Следующий пример показывает корректный вариант следования блоков catch:

<?php
class MyException extends Exception
{
    public function __construct($msg, $code)
    {
        parent::__construct($msg, $code);
    }
}

try {
    throw new MyException(‘Some message’);    
}
catch (MyException $e) {
    echo “MyException”;
}
catch (Exception $e) {
    echo “Exception (base)”;
}
?>

Данный пример выводит строку “MyException” - попытка обработать исключение типа MyException удалась.
Но если поменять порядок блоков catch:

<?php
try {
    throw new MyException(‘Some message’);    
}
catch (Exception $e) {
    echo “Exception (base)”;
}
catch (MyException $e) {
    echo “MyException”;
}
?>

В этом случае сработает первый блок catch и результатом будет строка “Exception (base)”

Вот еще вспомнил вопрос, подвох в котором был касательно ссылок в PHP.

<?php
$a = 1;
$b = &$a;

unset($a);
echo $b;
?>

Значение переменной $b будет равно 1. Ссылка дает возможность переменным указывать на одно и то же содержание. Это не значит, что $b указывает на $a, поэтому значение $b по прежнему 1.

Пожалуй это все что хотел написать по данной теме.

« Previous Entries