воскресенье, 20 июня 2010 г.

Ошибка при настройке форума PHPBB

   Сегодня устанавливал форум PHPBB на локальную машину (перед этим установил Apache, PHP и MySQL) для тестирования и обучения. На завершающем шаге настройки получил следующее сообщение об ошибке:
[phpBB Debug] PHP Notice: in file /includes/functions_messenger.php on line 403: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Chicago' for '-5.0/DST' instead
   Оказывается проблема в том что я при установке PHP не указал параметр date.timezone в файле конфигурации (php.ini) PHP. Для Украины я установил следующее значение:
date.timezone = "Europe/Helsinki"
   Перезапустил сервер, и после этого все заработало.

суббота, 12 июня 2010 г.

String or binary data would be truncated

   Сегодня при тестировании написанной программы на Delphi, которая заносила данные в таблицы на MS SQL Server 2005 увидел следующее сообщение: String or binary data would be truncated. 
  Оказывается программа хотела вставить значение, длина которого больше, чем было предусмотрено при создании базы.
   Например у БД, есть таблица, а в таблице поле - 'p1' тип которого char(2), при добавлении данных выполнялся следующий код:
insert into xxx values ('123456')
   Очевидно, что запрос не выполнится, поскольку длина записи которую мы хотим добавить превышает 2 символа.
PS: Проблема также может быть у тригерах, которые логируют данные.

воскресенье, 6 июня 2010 г.

Конкурс на 0day.kiev.ua - 50 000 бубликов в подарок

   Спешу объявить что сегодня (5.06.2010) начался конкурс на создание логотипа для сайта 0day.kiev.ua, все кто желает поучаствовать - поспешите, и разместите работу тут. Исходник предыдущего логотипа можно скачать тут. Каждый участник получит в подарок 5 000 бубликов, супер приз 50 000 бубликов. Работы будут приниматься до вечера(6.06.2010), после чего будет проводится голосование. Я тоже принимаю участие в создании логотипа, ссылку на голосование размещу сегодня вечером. А пока наслаждаемся уже сделанными работами.
   Я уже получил обещанные 5 000 бубликов =).

   И так началось голосование, проголосовать за одну из работ можно тут. Моя работа под № 7. В общем конкурсантов не мало не много, а 140 человек, так что посмотреть есть на что, жаль что выбрать нужно только один вариант.

   Все, конкурс окончился, и результаты можно просмотреть тут. Я занял 4-е место из 140 =)

вторник, 1 июня 2010 г.

Установка компонента ZeosLib на Delphi 2009 - 2010 для работы с MySQL

   Сегодня нужно было написать небольшую программку для работы с базой данных MySQL, поскольку пишу в большей мере на Delphi 2010 - нашел подходящие компоненты: ZeosLib. Оказалось что Delphi 2010 поддерживает только сборка ZEOSDBO-7.0.0-alpha. Конечно альфа версия очень смущала, но все же начал устанавливать.


    Продолжить чтение статьи на >> mirsovetov.net

воскресенье, 30 мая 2010 г.

Ошибка Error Nr. 1045 Access denied for user 'root'@'localhost' при установке MySQL

   После первой установки и настройки MySQL на Windows Vista, не удалось подключится к базе и зайти с установленным паролем. Принял решение переустановить MySQL. После переустановки оказалось что где то еще остались не удаленные части MySQL. Вовремя применения параметров безопасности получил следующую ошибку:
The security settings could not be applied to the database because the connection has failed with the following error. Error Nr. 1045 Access denied for user 'root'@'localhost' (using password: YES) If a personal firewall is running on your machine, please make sure you have opened the TCP port 3306 for connections. Otherwise no client application can connect to the server. After you have opened the port please press [Retry] to apply the security settings. If you are re-installing after you just uninstalled the MySQL server please note that the data directory was not removed automatically. Therefore the old password from your last installation is still needed to connect to the server. In this case please select skip now and re-run the Configuration Wizard from the start menu.

   Поискав в файле конфигурации my.ini (находится в папке установки MySQL) нашел следующие строки:
#Path to the database root
datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
   Оказалось что данная папка чистится не полностью, и данные о пользователи остаются после удаления MySQL. После удаления папки и очередной переустановки MySQL. Мастер настройки больше не предлагал сменить старый пароль, а предложил установить новый.

воскресенье, 9 мая 2010 г.

Ошибка: You cannot access JIRA at present. Look at the table below to identify the reasons

   Сегодня устанавливал JIRA под Windows и после установки и запуска -  в браузере получил следующее сообщение:  You cannot access JIRA at present. Look at the table below to identify the reasons. Для  решение данной проблемы необходимо выполнить следующее:
  1. Перейти в каталог [Диск]:\Program Files\Atlassian\Application Data\JIRA\  (каталог куда установил JIRA)
  2. В этом каталоге будет файл .jira-home.lock  - его нужно удалить.
  3. Перезагружаем JIRA в службах ("Пуск - Панель управления - Администрирование - Службы",  в списке служб ищем: Atlassian JIRA Server [версия] нажимаем правой кнопкой мышки на название и выбираем пункт перезапустить)
  4. Опять запускаем браузер  - все работает.

среда, 5 мая 2010 г.

Технология распознавания лиц Face.com теперь доступна сторонним разработчикам

   Технология распознавания лиц, которая использовалась на сайте Face.com, теперь стала доступной сторонним разработчикам. Программисты смогут использовать предложенный API для интеграции новых возможностей в свои приложения. Face.com умеет автоматически находить лица на фотографии и позволяет использовать теги для первоначальной идентификации людей. После этого Face.com находит указанных персон во всех доступных фотоальбомах. 
   Новый API позволит использовать эту функцию не только на Face.com и Facebook.com, но также и на других сайтах и в десктопных приложениях. Доступна бесплатная версия API, на которую накладываются ограничение в 200 обработанных фотографий за один час. Функция распознавания лиц присутствует также в каталогизаторе фотографий Google Picasa, и кроме этого появляется сейчас во многих фото и видео аппаратуре. Пример отметки лиц представлен на на Рис.1.
Рис. 1.

понедельник, 12 апреля 2010 г.

Проверка почты средствами Delphi Часть 1

   Доброе время суток. Я начинаю цикл статей которые направлены на работу по созданию почтового клиента с помощью компонент Indy.
   Для начала определимся с инструментарием: при написании программы я использовал Delphi 2010 (Delphi 2009) компоненты Indy v10 
   В этой части мы выполним следующие задания:
  1. Проверка почты на наличие сообщений;
  2. Возможность задания периода проверки почты;
  3. Вывод уведомлений при наличии каких либо сообщений;

   Раз определились с планом действий - приступим к следующему этапу - созданию. Создаем новый проект, и размещаем на форме компонент idPOP3, который находиться на закладке IndyClients.
   Для того чтобы проверить почту нам необходимо передать компоненту idPOP3 некоторые параметры для подключения, а именно:

UserName – адрес электронной почты в формате (xxx@xxx.xx)
Password – пароль к данному почтовому ящику
Host – POP3 сервер (pop.mail.ru; pop3.ukr.net)
Port – порт (по умолчанию 110)
   Размещаем на форме компонент GroupBox из вкладки Standard – для группирования полей. Для того чтобы программа была более "гибкой" - поместим 4 компонента Edit и Label, они находятся на закладке Standard. Установим свойства компонентов, как показано в Табл.1.
Табл.1.
Компонент Свойство Значение Описание
Form1 Name MainForm
GroupBox1 Caption Настройки ящика

Name SettingsGroupBox
Label1 Caption Адрес

Name AdressLabel
Label2 Caption Пароль

Name PassLabel
Label3 Caption POP3 сервер

Name Pop3Label
Label4 Caption Порт

Name PortLabel
Edit1 Text
Адрес

Name AdressEdit
Edit2 Text
Пароль

Name PassEdit

PasswordChar *
Edit3 Text
POP3 сервер

Name Pop3Edit
Edit4 Text
Порт

Name PortEdit

NumbersOnly true Можно вводить только числа
idPop31 Name idPop31

Результат можно просмотреть на  Рис.1.

Рис. 1. 
   Что касается 2-го задания. Нам необходимо еще разместить на форме компонент Timer, который находиться на закладке System. Для задания интервала проверки, нам необходимо добавить на форму поле ввода Edit (панель Standard), компонент Memo для вывода системных сообщений и кнопку (Button на панели Standard) для подтверждения введеной информации. Установим для них следующие свойства (Табл. 2):
Табл. 2
Компонент
Свойство
Значение
Button1 Caption Установить
Name OkBtn
Memo1 Lines
Name ResultMemo
Edit5 Text
Name IntervalEdit
NumbersOnly true
Timer1 Enabled false
Name CheckTimer

   В результате мы получим следующий вид окна (Рис.2.):

Рис. 2.
   Напишем функцию присвоения значений таймера, его активацию и вывод соответствующих сообщений в ResultMemo.
function TMainForm.StartTimer(T:TTimer;int:Integer):string;
var
  sec:Integer; // объявляем переменную для записи в неё количество мсек.
begin
  T.Enabled:=false; //остановка таймера
  sec:=int*60000; // определяем интервал проверки
  T.Interval:=sec; // задаём интервал проверки
  T.Enabled:=true; //запускаем таймера
  Result:='Почта будет проверена через '+IntToStr(int)+' мин.'; // передача обратно оповещения
end;
Обьявим данную функцию в приватной секции главной формы:
private
  { Private declarations }
  function StartTimer(T:TTimer;int:Integer):string;
   Данная функция задает настройки таймера и возвращает строку с сообщением, через какой период будет проверена почта.

   Дальше создадим код для события onClick кнопки OkButton (для того чтобы создать данное событие необходимо два раза кликнуть на кнопку, или перейти в Object Inspector, открыть закладку Events, и два раза кликнуть по пустому полю возле названия onClick): После создания события автоматически сгенерируется следующий код:
procedure TMainForm.OkBtnClick(Sender: TObject);
begin
end;
Используем ранее написанную функцию, для этого передадим необходимые параметры:
procedure TMainForm.OkBtnClick(Sender: TObject);
begin
  ResultMemo.Lines.Add(StartTimer(CheckTimer,StrToInt(IntervalEdit.Text)));
end;
   Рассмотрим более детально: ResultMemo.Lines.Add(); - добавляем запись в ResultMemo которую возвращает написанная нами процедура StartTimer(CheckTimer,StrToInt(IntervalEdit.Text)).
   Всё очень просто мы останавливаем таймер, в том случае если он запущен, определяем время его срабатывания, записываем данное время в интервал и запускаем таймер.
Теперь перейдём непосредственно к таймеру. Два раза кликаем левой кнопкой мыши на компонент Timer, после чего вы перейдёте в редактор кода, при этом автоматически генерируется обработчик события OnTimer:
procedure TMainForm.CheckTimerTimer(Sender: TObject);
begin
end;
   Дальше реализуем процедуру для получения писем:
function TMainForm.CheckMail(IP:TIdPOP3;User,Pass,Host:string;Port:Integer):String;
var
  NumOfMsgs:Integer; // Количество писем
begin
try
  IP.Username:=User; // адрес электронной почты в формате (xxx@xxx.xx)
  IP.Password:=Pass; // пароль к данному почтовому ящику
  IP.Host:=Host; // POP3 сервер (pop.mail.ru; pop3.ukr.net)
  IP.Port:=Port; // порт
  IP.Connect; // подключаемся
  if IP.Connected then // если подключение прошло успешно
  begin
    // записываем в NumOfMsgs количество писем
    NumOfMsgs := IP.CheckMessages;
    // Возвращаем результат
    Result:='Подключение прошло успешно!'+#13#10;
    Result:=Result+'У вас '+IntToStr(NumOfMsgs)+' сообщений';
  end
  except // Если произошла ошибка- возвращаем текст ошибки
    on E:Exception do Result:='Ошибка подключения! '+E.Message;
  end;
  IP.Disconnect; // Отключаемся
end;
   И обявим ее в приватной секции главной формы:
private
  ...
  function CheckMail(IP:TIdPOP3;User,Pass,Host:string;Port:Integer):String;
   Переходим в обработчик события OnTimer и компонента CheckTimer и пишем следующий код для того чтобы почта проверялась при активации таймера:
procedure TMainForm.CheckTimerTimer(Sender: TObject);
begin
  ResultMemo.Lines.add(CheckMail(IdPOP31,AdressEdit.Text,PassEdit.Text,Pop3Edit.Text,StrToInt(PortEdit.Text)));
end;
   Теперь посмотрим что же получилось, заполняем все поля (настройки для получения почты можно взять на почтовых серверах, где у вас зарегистрирован почтовый ящик) (Рис.3):
Рис.3.
   Тестирование прошло успешно. Сегодня попробую протестировать на других почтовых серверах.
   PS: Если есть пожелания - пишите, с удовольствием выслушаю и по возможности реализую.
Продолжение во 2-й части: Проверка почты средствами Delphi - часть 2

вторник, 6 апреля 2010 г.

Google Street View в 3D

   В Google Street View теперь встроена технология стереопросмотра. Для его активации необходимо нажать на соответствующею иконку:
   Для просмотра только нужно использовать специальные стереоочки. Пример можно просмотреть ниже:


пятница, 2 апреля 2010 г.

Коды ошибок Run-Time Error

   Бывают ситуации, при которых возникают ошибки Run-Time Error. Ниже привожу расшифровку кодов ошибок Run-Time Error
1 - Invalid function number
2 - File not found
3 - Path not found
4 - Too many open files
5 - File access denied
6 - Invalid file handle
12 - Invalid file access code
15 - Invalid drive number
16 - Cannot remove current directory
17 - Cannot rename across drives
100 - Disk read error
101 - Disk write error
102 - File not assigned
103 - File not open
104 - File not open for input
105 - File not open for output
106 - Invalid numeric format
200 - Division by zero
201 - Range check error
202 - Stack overflow error
203 - Heap overflow error
204 - Invalid pointer operation
205 - Floating point overflow
206 - Floating point underflow
207 - Invalid floating point operation
210 - Object not initialized
211 - Call to abstract method
212 - Stream registration error
213 - Collection index out of range
214 - Collection overflow error
215 - Arithmetic overflow error
216 - General protection fault