27 ноября 2010 г.

Посоветуйте движок для фотоблога часть 2

Поиски CMS для фотоблога (см. первую часть) так ни к чему хорошему и не привели, поэтому решил разработать собственную систему управления фотоблогом. Вот требования к функционалу:
  1. Минимум навыков для оформления шаблона страниц блога
  2. Автоматический ресайз загружаемых фото
  3. Галерея для просмотра фото на Java Script
  4. Облако тэгов
  5. Распределение фото по альбомам
  6. Просмотр выбранных альбомов
  7. Список последних загруженных фото
  8. Возможность оставить комментарий под фото
  9. Показ данных EXIF в случае их наличия в файле
  10. Защита комментариев от спама с помощью каптчи
  11. Возможность предварительной модерации комментариев перед публикацией их в блоге
  12. Нанесение логотипа на фотки
  13. RSS ленты для фото, комментариев, отдельных альбомов, комментариев к отдельным альбомам, комментариев к выбранным фотографиям
В перспективе:
  1. Ипорт изображений из Picasa, Flickr, ВКонтакте, FaceBook
  2. Элементарные операции по коррекции фоток
Кому интересна данная тема и кто хотел бы попробовать мою CMS пишите комменты, бета-тестеры будут нужны

П.С. На данный момент выполнены пункты 1-7, 9(работает пока не очень стабильно), 12

7 ноября 2010 г.

Посоветуйте движок для фотоблога

В качестве оригинального подарка для своей девушки решил создать для нее личный(ее) фотоблог.

Почему не подходят готовые площадки для блогов:
1.Использовать готовую площадку типа ЖЖ и ей подобным невозможно, поскольку сайт будет на собственном домене и хостинге (в ЖЖ возможность привязки домена платная, насколько я понимаю)
2.Многие хотят повесить мне свою рекламу - я против. Может сам решу на пиво заработать, повесив Яндекс.Директ или Адсенс
3.Очень скудные возможности по поводу редактирования шаблона. Нет возможности сделать "все по другому".

Из плюсов: - не надо парится по поводу необходимого размера и нагрузки на хостинг. А в случае работы с фото - это очень важно.

Вывод: использовать CMS

Требования к CMS:
1.Маленькая и удобная
2.Обязательно на Русском языке (чтобы ей было все понятно и меня лишний раз не дергали)
3.Удобный шаблонизатор. Переделка верстки в шаблон CMS должна быть очень простой.
4.Наличие таких модулей как: тэги, галерея, последнии 5 постов, возможность сжимать загружаемые картинки и модуль чтения и отображения EXIF данных фото.

Joomla, Drupal - не подошли из-за своей громоздкости.
ModX - почти то что надо, но многое надо допиливать.
Pixelpost (pixelpost.org) - почти то что надо, но не понятно как создать свою тему, документации по этому поводу в рунете точно нет. Если бы к нему еще и русский интерфейс...

В общем кто что еще посоветует??? Пока остановлюсь на Pixelpost.org

31 октября 2010 г.

В Gmail появилась папка "Приоритетные"

Сейчас заглянул в почту и увидел новость. Google сделала автоматическую сортировку писем по важности.

Чем больше вы переписываетесь с человеком или чем чаще среди новых писем выбираете именного этого адресата, тем выше рейтинг адресата.
Другими словами появилась еще одна папка Приоритетные, в которую скидываются только важные письма.

10 октября 2010 г.

Логотип сайта на картинках

Часто возникает задача на картинках своего сайта печатать название сайта или помещать его логотип. Нижеприведенный код позволяет при закачке картинки на сервер рисовать в нижнем правом углу логотип.

Нам понадобится:
1. Библиотека GD2 (благо почти га всех хостингах она есть).
2. Файл с самим логотипом logo.png (не забудьте сделать фон прозрачным)

Собственно код:
$uploaddir="../pic/"; //путь до каталога с картинками
$file_name="pic.jpg"; //имя файла с картинкой
$logo_h = getimagesize("logo.png");
//$logo_h = getimagesize(imagettftext("text")); 
//если надо писать текст
$pic_h = getimagesize($uploaddir.$file_name);

$logo = imagecreatefrompng  ("znak.png");
//$logo = imagettftext("text");
$pic = imagecreatefromjpeg ($uploaddir.$file_name);

//вычисляем координаты для размещения логотипа на картинке
imagecopy ($pic, $logo,
$pic_h[0] - $logo_h[0],
$pic_h[1] - $logo_h[1],
0,0,
$logo_h[0],
$logo_h[1]);

//сохраняем картинку с логотипом
imagejpeg ($pic, $uploaddir."new_".$file_name, "100");

//убиваем переменные
imagedestroy ($logo);
imagedestroy ($pic);
Готовые картинки сохраняются в том же каталоге, но с препиской new_ в начале имени файла.

Данный код следует вставить перед загрузкой картинок и проверять. Если файла new_ нет, то запускаем этот код и генерируем картинку, иначе грузим из кэша. Проверить существование файла можно функцией:
is_file("pic.jpg");
Или же рисуем логотип при закачке файла на сервер, но тогда надо добавить код, удаляющий оригинал. Например так:
unlink("pic.jpg");

28 августа 2010 г.

PHP Как получить дату и время которая будет

Если с тем как получить текущую дату и время проблем не возникает ни у кого. Например сделав это так:
date("Y-m-d H:i:s");
То вот чтобы узнать время через N секунд, минут или дней у некоторых возникает проблема. Как решаю это я.
date("Y-m-d H:i:s", mktime(date("H"), date("i")+15, date("s"), date("m"), date("d"), date("y")));
Прибавляя необходимое число дней, секунд или(и) минут мы сформируем заданную дату.
H - это часы
i - минуты
s - секунды
m - месяц
d - число
y - год

В примере выше я получаю метку времени через 15 минут. Вот так, очень просто, получить время через N секунд, минут, дней.

19 августа 2010 г.

Хвала Google Docs

Как же удобно оказывается вести документацию по проектам в Google Docs!!! Пять минут назад из-за скачка напряжения вырубился комп. В это время я заполнял большую и сложную таблицу. Загрузил комп, открыл Firefox и вот передо мной снова мой документ, правда последняя редактируемая ячейка оказалось пустой, но не вся таблица же)))
+1 корпорации добра)))

15 августа 2010 г.

Короткая заметка про мативацию

Всем, кто работает дома (будь то работа над собственным проектом, фриланс или же просто удаленная работа) знакома такая проблема как мотивация себя на работу. Про это написано куча статей, но я хочу предложить еще один маленький способ который мне помогает.
Итак. Время для работы есть, задач много, как их выполнить вы тоже знаете, но не прет работать и все. Как быть?
1. Просто запустите среду разработки.
2. Посмотрите что вы делали в прошлый раз и еще немного порадуйтесь, какой вы молодец, как круто реализовали эту фишку вчера.
3. Выберите самую маленькую из нереализованных функций. Пусть это будет не мега класс, а простая функция в пять строчек.
4. Возьмите и напишите ее.
5. Обыгрывайте ее. Дополняйте код дополнительными функциями, необходимыми для реализации намеченного функционала.
Самое главное это начать)))

22 июля 2010 г.

Подсветка кода в блогах на blogger.com

Захотелось сделать посты в своем блоге более привлекательными и юзабильными, поэтому и решил добавить подсветку в примерах кода.
Изучение Google.com и проба нескольких решений привела к следующему результату.
SyntaxHighlighter - это полнофункциональный самостоятельный скрипт подсветки синтаксиса (code syntax highliter) поддерживающий кучу языков, имеющий удобный небольшой тулбарчик с кнопками, позволяющими выводить исходник в отдельном окне, копировать его в буфер обмена или печатать. Теперь не надо после копи-паста удалять на каждой строчке лишние символы. Скрипт абсолютно мультиплатформенный и может работать в любом блоге хоть в WordPress, хоть в Joomla!, хоть в Blogger.com.
Как же установить SyntaxHighlighter в свой блог на blogger.com.
1. Заходим в админку своего блога.
2. Нажимаем Дизайн - Изменить HTML
3. Перед закрывающим тэгом </head> добавляем вот такой код:
<link href='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://bitbucket.org/alexg/syntaxhighlighter/raw/8815b7f713eb/Styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>



C 5 по 9 строчку идет подключение подсветки необходимых языков. У меня это PHP, XML, C#, Delphi, JS. Для подключения дополнительных языков необходимо скопировать любую из этих строчек и изменить имя подключаемого файла на необходимое. Полный список поддерживаемых языков, их brush алиасов и файлов, необходимых для их подсветки, можно узнать на сайте alexgorbatchev.com.


4. Чтобы подсветка отображалась необходимо заключать куски кода в тэги <pre class="brush: html"></pre>
, заменяя значение html свойства brush на алиас языка, синтаксис которого необходимо подсвечивать. Теперь все готово и должно работать. Стоит только обратить внимание,для того, чтобы всё корректно работало, необходимо внимательно следить, чтобы в исходниках, которые ты вставляешь в блог, символ "<" был заменён на "&lt;".

19 июля 2010 г.

Обратный отсчет на Java Script

Понадобилось установить на страницу счетчик который отсчитывает сколько времени осталось до истечения 15 минут.
Не смотря на то, что в сети полно примеров, многие из них не комментированы и поэтому не понятны людям не сильно знакомым с JS (как я например).
Собственно сам таймер.
Место для вывода результата текстовое поле
Осталось:

минут!
собственно сам код скрипта

В этой строчке задается время отсчета в миллисекундах. При желании можно модифицировать код так, что он будет показывать обратный отсчет не минут, а допустим секунд с десятыми или сотыми долями.
Для этого заменяем 1000 на 100 тут
setTimeout("display()",1000)
А так же замените в коде все 14 на 29 и 59 на 9 или 99.

Внимание Не стоит использовать этот код в таких случаях как задержка перед выполнением какого-то скрипта (аля rapida.com), т.к. данное значение легко подменить пользователем. Для решения подобной задачи используйте контроль времени на стороне сервера, а данный код просто для информирования пользователя

10 апреля 2010 г.

Отправка почты с SSL шифрование (Indy 10 + Open SSL)

Такие почтовые сервера как Google, Yahoo или MSN требуют при авторизации на своих SMTP серверах  использовать шифрование SSL.
В данном посте я расскажу как отправлять почту из программ написанных на Delphi используя шифрование SSL.
Нам понадобится:
  • Indy версии 10, поскольку в нем добавлена возможность использования Open SSL (9 версия не подойдет). Я использовал версию 10.0.52 (взять можно тут)
  • Пакет Open SSL, у меня стабильно заработал с версией 0.9.8h

Устанавливаем Indy 10.

Перед установкой необходимо удалить предыдущую версию Indy. Для этого идем по меню Component-Install Packages и удалем все со словом Indy.
Следующим шагом распаковываем архив скачанный с сайта Indy
 Теперь необходимо добавить пути Library path. Для этого переходим по пункту Tools-Environment Options-Library и добавляем Library path пути к следующим папкам
  1. System
  2. Core
  3. Protocols
  4. Super Core 

Теперь открываем и компилируем пакеты в следующем порядке:
  1. пакет IndySystemX0.dpk (где X – это версия Delphi) (папка System)
  2. пакет IndyCoreX0.dpk (где X- это версия Delphi) (папка Core)
  3. пакет IndyProtocolsX0.dpk (где X – это ваша версия Delphi) (папка Protocols).
  4. пакет IndySuperCore70.dpk  (для Delphi 7) (папка Super Core)

Далее открываем и устанавливаем:
  1. пакет dclIndyCoreX0.dpk (папка Core)
  2. пакет dclIndySuperCore70.dpk   (папка Super Core) только для Delphi 7
  3. пакет dclIndyProtocolsX0.dpk (папка Protocols)

Установка Indy завершена.


Установка Open SSL.

Установка  Open SSL не требуется. Все что необходимо, распаковать DLL библиотеки в каталог с проектом.


Собственно отправка почты.

Кидаем на форму следующие компоненты:
idMessage, idSMTP, IdSSLIOHandlerSocketOpenSSL

Теперь пишем вот такой код:
{формируем тело сообщения}
IdMessage1 := TIdMessage.Create;
IdMessage1.From.Address := Fromadres.Text;
IdMessage1.Recipients.EMailAddresses := Toadres.Text;
IdMessage1.Subject := UTF8Encode(subject.Text);
IdMessage1.Date:= now;

{настройка компонентов перед отправкой}
IdSMTP := TIdSMTP.Create(nil);

IdSMTP.Host:=ed_smtpserver.Text;
IdSMTP.Port:=ed_port.text; // обычно при использование ssl 495, 587 или стандартный 25
IdSMTP.Username:=login.Text;
IdSMTP.Password:=ed_.pass.Text;
IdSMTP.AuthType:=atDefault;

{это необходимо использовать для SSL}
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IdSSLIOHandlerSocketOpenSSL.Destination := IdSMTP.Host+':'+IntToStr(IdSMTP.Port);
IdSSLIOHandlerSocketOpenSSL.Host := IdSMTP.Host;
IdSSLIOHandlerSocketOpenSSL.Port := IdSMTP.Port;
IdSSLIOHandlerSocketOpenSSL.DefaultPort := 0;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;

IdSMTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdSMTP.UseTLS := utUseExplicitTLS;

{отправляем письмо}
IdSMTP.Connect();
except
MessageBox(handle,pchar('ОШИБКА!!! Подключение к SMTP серверу не удалось'+#10+#13+
'Проверьте настройки программы, а так же не блокируется ли'+#10#13+
'порт SMTP сервера антивирусом или файреволом(брандмауэром)'), pchar(Mail.Caption), 48);
exit;
end;
IdSMTP.Send(IdMessage1);
Application.ProcessMessages;
IdSMTP.Disconnect;
на событие OnClose вешаем следующее:
{очищаем память}
idMessage1.Free;
IdSSLIOHandlerSocketOpenSSL.Free;
idSMTP.Free;
Вот собственно и все. Жду ваших комментариев.

16 января 2010 г.

Управление проектами. Часть 1.

Я начинаю цикл статей о такой интересной теме, как управление проектами. Сейчас вспомнил одну цитатку:
Без управления - нет попеды.
И это относится ко всему, в т.ч. и к программированию. Какой бы грамотный код вы не создавали - без грамотного управления всем проектом вы в лучшем случае делаете много лишнего кода (работы).

Когда проектов всего один-два и над ними работаете полностью один вы, то вам вполне хватит папочки вот такой структуры:

My project
   Source
   Setup
   Tools
   www

В папке Source храним исходники проекта, Setup - каталог для дистрибутивов каждой версии, Tools - дополнительные самописные утилиты (например скрипты сборки дистрибутивов или тестовые программки) и www - копия веб-сайта данного проекта.

Если проект коммерческий и требуется оказывать тех. поддержку своим клиентам, то для этой цели используется QIP + Web интерфейс почтовой службы.

Разберем минусы данного подхода:

Практически отсутствует контроль версий, если только вы не делаете резервных копий, в следствии чего невозможно откатится назад (или это очень тяжело сделать) в случае когда новые изменения привели к неработоспособности, написанного до этого, кода
  • При большом количестве проектоов очень неудобно ими управлять
  • Нет доступа к проектам с другого компьютера, и как следствии отсутствии синхронизации при работе на нескольких компьютерах (можно конечно использовать флешки и внешнии USB HDD, но данный способ тоже ограничен)
  • Предоставить доступ к проекту для другого разработчика невозможно. (Совместная работат невозможна.)
  • Теряется история общения с клиентами (она или рассредоточена между несколькими машинами (например история переговоров в ICQ) или ее сложно систематизировать (много писем в почтовом ящике)
Это только самые очевидные и часто встречающиеся проблемы. Выше указанный список может продолжить каждый сам.

Что нам надо?
  • Удобное место хранения файлов проекта
  • Синхронизация проектов между различными машинами
  • Централизованное место для хранения истории общения с клиентами и оперативность ее получения
  • Ведения списка текущих задач
  • Ведение и учет исправлений ошибок в проекте

Все выше описанное мы сможем получить, подключив к нашему домену проекта службы Google. Подключив необходимые службы к своему домену мы становимся "владельцами собственного Googl'a" на своем сайте. Расскажу об этих службах поподробнее и о том чем они могут быть нам полезны:

G-mail - почтовая служба google. Предоставляет почтовый ящик практически неограниченного размера (более 7 Гб). Очень интересной особеностью является то, что все письма соединяются в цепочки и сортируются по Теме. Так ведя переговоры по какой-то теме, пусть даже и с разными людьми (например, с отделом закупок и бухгалтерией) - все письма окажутся в одной цепочке. Так же к любому письму можно приклеить Ярлык (своего рода тэги) и осуществлять поиск только по письмам с определенным тэгом Ярлыком. В завершение обзора этой службы нельзя не отметить очень качественный поиск писем и просто безупречную работу АНТИ-СПАМ фильтра.

Calendar - он-лайн календарь для вашего проекта. Я например создал два календаря. В одном отмечаю текущие задачи по проекту для себя и во втором (открытом для других участников проектов) я отмечаю даты контрольных точек выполнения проектов и другую общую информацию

G-talk - обмен мгновенными сообщениями через Jabber сервер google. Что-то типа аськи, но может запускаться и как win32 приложение, а так же прямо в браузере. Позволяет не только переписываться, но совершать голосовые и видео звонки.

Docs -  документы Google. Word, Excel, PowerPoint в стиле веб 2.0 Позволяют вести всю документацию без установки ПО Office на компьютере, совместно использовать (в том числе и редактировать) любые документы. Еще одним плюсом будет возможность скачать подготовленный файл в любом из форматов (pdf, OpenOffice, MS Office). C недавних пор Google Docs позволяет загружать не только файлы документов, а вообще любые файлы. Данная функция полностью решает проблему с хранение файлов проекта.
Как же все это можно применить?
В Excel ведем список задач разделив их на три листа (Добавить, Исправить, Доделать)
В Word справочную и другую документацию по проекту.
Новые (или промежуточные) версии компилируются координатором проекта и выкладываются в Документы Google

если интересно комментируйте, напишу продолжение

14 января 2010 г.

Первый пост

Собственно сабж.
Что я буду писать в этом блоге - все что мне вздумается. Статьи по программированию, интересные наблюдения и заметки в мире ИТ.
Для кого этот блог - для таких же программистов как и я, для которых программирование это не только работа, в прежде всего творчество и способ самовыражения.