Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения

воскресенье, 14 ноября 2010 г.

Web-программирование - получение кода страны для отображения флага по названию

При разработке веб-сервисов и сайтов иногда бывает необходимо отображать флаги стран (их изображения) по их названию. Для решения таких задач можно воспользоваться сервисом http://opencountrycodes.appspot.com/, который может отдавать их согласно стандарту ISO 3166-1 alpha-2. Примеры таких флагов можно найти и скачать в архиве на сайте famfamfam.com, где, например, для России есть файл ru.gif. Название файла "ru" и есть двухбуквенный код России (Russian Federation).

Приведенный ниже код на PHP будет получать с сервиса XML-данные и создавать на выходе файл country_code_names.php с массивом соответствий код=>страна $countrycodes, который можно инклюдить непосредственно или преобразовать в необходимый вид:


<?php

$xml = file_get_contents('http://opencountrycodes.appspot.com/xml/');
$xmlel = new SimpleXMLElement($xml);
$out = '$countrycodes'." = array(\n";
foreach ($xmlel->country as $country)
{
$code = strtolower($country['code']);
$out .= "'$code' => \"{$country['name']}\",\n";
}
$out .= ");";

file_put_contents('country_code_names.php', $out);

?>

суббота, 10 апреля 2010 г.

Автоматизация OpenOffice Calc и Writer из Delphi

Для автоматизации Open Office Calc в одной задаче мне потребовалось составлять документ по заранее заготовленному шаблону. Для решения этой задачи я воспользовался модулем для Delphi uOpenOffice.pas, который написан господином Yuri (aka Yuric74).

Текущая версия модуля для работы с OpenOffice Calc и Writer из Delphi доступна по адресу Версия от 23.10.2009, а обсуждение и предложения можно посмотреть на sql.ру в ветке Delphi (Дельфи) и OpenOffice (Опенофис).

В архиве находится тестовый пример с демонстрацией воpможности модуля, файл справки uOpenOffice.chm, сам файл uOpenOffice.pas.
Автоматизация Open Office из Delphi

Модуль uOpenOffice.pas годится как для автоматизации Open Office Calc, так и для автоматизации OpenOffice.Org Writer.

понедельник, 8 марта 2010 г.

PHP из Unicode в ANSI

Дабы в PHP не йбацо с кодировками, давно придумали iconv:

$title = iconv("UTF-8", "CP1251", $row['title']);

среда, 25 ноября 2009 г.

Условные выражения Vbulletin Conditionals

Список полезных условных выражений для Vbulletin:


Рассмотрим некоторые условия, применяемые в шаблонах форумного движка vBulletin.


1. Как установить условие для показа некоторой информации только для одной группы пользователей.

2. Как установить условие для показа некоторой информации только для нескольких групп пользователей.


<if condition="is_member_of($bbuserinfo, X, Y, Z)">
</if>

3. Установка условия только для одного пользователя (по user id).


<if condition="$bbuserinfo[userid] == X">

</if>

4. То же самое для нескольких пользователей.


<if condition="in_array($bbuserinfo[userid], array(X,Y,Z))">
</if>

5. Скрыть инфу только от 1 группы.


<if condition="!is_member_of($bbuserinfo, X)">
</if>

6. От нескольких групп пользователей vBulletin информацию можно скрыть так:


<if condition="!is_member_of($bbuserinfo, X, Y, Z)">

</if>

7. Скрыть от одного пользователя форума.


<if condition="$bbuserinfo[userid] == X">
</if>

8. Скрыть от некоторых:


<if condition="!in_array($bbuserinfo[userid], array(X,Y,Z))">
</if>

9. Как показать текст только в каком-то разделе форума?


<if condition="$forumid == X">

</if>

10. В нескольких разделах форума информацию показывают так:


<if condition="in_array($forumid, array(X,Y,Z))">
</if>

11. Скрытие в 1 форуме


<if condition="$forumid != X">
</if>

12. Скрыть в нескольких разделах форума на vBulletin:


<if condition="!in_array($forumid, array(X,Y,Z))">

</if>


13. Условие $show['popups']

Некоторые браузеры не могут использовать систему vBMenu. Для этого имеется условие $show['popups']. С ним мы можем предотвратить попытку инициализации такого кода. Ошибки JavaScript теперь не будут иметь место, а показываться будет альтернативный HTML-код.


<if condition="$show['popups']">

<!-- Здесь контент для браузеров, которые могут использовать систему vBMenu -->

<else>

<!-- Здесь контент для браузеров, которые НЕ могут использовать сплывающие окна vBMenu -->

</else>
</if>


14. Показать что-то только для определённого стиля (шаблона) можно так:


<if condition="$bbuserinfo[styleid]==x">
<!-- Здесь содержимое для стиля с идентификатором 'x' -->
</if>


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

суббота, 31 октября 2009 г.

Закрытие ссылок с постов пользователей в vBulletin с помощью rel nofollow

Для закрытия ссылок на форуме с движком vBulletin я ещё год назад применил следующую методику:

Открываем файл _Директория vBulletin_/includes/class_bbcode.php, и находим там функцию обработки ссылок:


function handle_bbcode_url($text, $link)

В функцию в качестве параметров передаются:

$text - текст ссылки, указанной пользователем, и

$link - сама ссылка.

Эта функция занимается обработкой ссылок в посте пользователя. В конце концов, переменная $rightlink содержит ссылку, а $text - текст ссылки. После обработки, возвращает строку вида:

return "<a href=\"$rightlink\" target=\"_blank\">$text</a>";

Для закрытия ссылок, а именно, закрытие ссылок параметром rel=nofollow, надо всего лишь добавить наш параметр в указанный выше код:



return "<a href=\"$rightlink\" rel=\"nofollow\" target=\"_blank\">$text</a>";

Однако, вдруг нам надо закрывать не все ссылки?
Более детальная настройка: Мы хотим, чтобы ссылки на наш форум не закрывались. И ещё, рассмотрим случай, когда наш форум установлен в папке сайта, то есть типа: http://www.example.com/forum/ - ведь тогда желательно не закрывать ссылки в vBulletin и для домена www.example.com. И ещё сайт example.ru является нашим доменом. Тогда перед return пишем:



$pos1 = strpos($rightlink, 'example.com');
$pos2 = strpos($rightlink, 'example.ru');

if ( ($pos1 === false) && ($pos2 === false) ) {
$relnofollow = "rel=\"nofollow\"";
}
else
$relnofollow = "";

А сам return изменяем в виде:

return "<a href=\"$rightlink\" ".$relnofollow." target=\"_blank\">$text</a>";

Стоит отметить, что таким же образом Вы можете закрыть ссылки и тегами noindex для Яндекса. Однако, стоит ли закрывать ссылки от Яши, раз она всё равно не учитывает их при расчёте тИЦ?

Таким же образом, можно сделать всё что угодно с нежелательными урлами.

пятница, 25 сентября 2009 г.

Использование в Delphi класса TMemIniFile

При разработке программного обеспечения иногда бывает необходимо работать с INI-файлами, размер которых больше положенных 64 килобайт. Использование TIniFile хоть и является допустимым, однако, при сохранении большого количества данных (числа строк), производительность этого решения оставляет желать лучшего.

Для обхода этого неудобства я использовал класс TMemIniFile. Он не имеет ограничения в 64 килобайта. Работа с ним точно такая же, как и у класса TIniFile. Однако, работает он намного быстрее. Суть в том, что операции с данными происходят в буфере памяти. Единственное отличие в работе TMemIniFile от TIniFile - при сохранении надо вызывать метод UpdateFile.



uses IniFiles;
...
var
ini: TMemIniFile;
begin
ini:=TMemIniFile.Create(ChangeFileExt( Application.Exename,'.ini'));
try
ini.WriteString('ini_section','parameter1','value');
ini.WriteInteger('ini_section','parameter2', 100);
finally
ini.UpdateFile;
ini.Free;
end;
end;

То есть необходимым оказалось всего несколько изменений кода - поменять класс и добавить строку при сохранении ini.UpdateFile.

четверг, 27 августа 2009 г.

Google Developer Day 2009 в России

Google Developer Day 2009Как сообщается на главной странице Google Code, Google Developer Day возвращается в Россию! Это конференция на 1 день для веб-разработчиков, и она в 2009-м году пройдёт в Москве 10 ноября.

В предыдущем, 2008-м году в GDD приняли участие свыше 400 разработчиков из более чем 50 городов Российской Федерации и ближнего зарубежья. Они смогли посетить полтора десятка семинаров и сессий по всем девелоперским продуктам Google. В этом году опять представится возможность живого общения с командами Google, работающими над API (Application Programing Interface, Интерфейс программирования приложений) и инструментами для веб-разработчиков и программистов. На конференции выступят инженера Google с подробными докладами. Много времени будет выделено для знакомства программистов друг с другом и обсуждения новейших веб-технологий.

Сайт GDD, как обещается, будет запущен в самое ближайшее время, на нём можно будет зарегистрироваться для участия в Google Developer Day.

Источник: http://code.google.com/intl/ru/

четверг, 20 августа 2009 г.

Microsoft поддержит российских разработчиков программного обеспечения

Корпорация Microsoft решила предоставить скидку в 80% разработчикам программного обеспечения, которые делают программы среде Microsoft Visual Studio.

Как говорится в пресс-релизе, в новой программе поддержки и развития бизнеса разработки программного обеспечения в России смогут участвовать индивидуальные разработчики и небольшие компании, у которых штат программистов не превышает лимита в 10 человек. В течение всего времени с начала акции 28-го июля по 31-е августа 2009-го года можно будет приобрести лицензии на студию с 80% скидкой.

На момент написания этого поста было свободно 2147 лицензий из общего количества предосталяемых 3500.

Пресс-релиз здесь: Инициатива по лицензированию разработчиков ПО

воскресенье, 5 июля 2009 г.

Получение реального IP-адреса на PHP

IP-адрес посетителя веб-страницы получается на PHP с использованием $_SERVER['REMOTE_ADDR']. Однако не во всех случаях оно работает. Ваш клиент может подключаться к Интернет через использование прокси-сервера, и тогда $_SERVER['REMOTE_ADDR'] в PHP вернёт всего лишь адрес прокси, а не клиентский адрес. Поэтому приведу функцию на PHP для получения реального IP-адреса машины посетителя сайта. Имеются расширенные серверные переменные для этого, это HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR.

Функция для получения реального IP-адреса в PHP


function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) // Определение IP-адреса
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) // Проверка того, что IP идёт через прокси
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}

В этой PHP функции сначала пытаемся получить непосредственно адрес компьютера пользователя, если невозможно - то используем HTTP_X_FORWARDED_FOR. Если и оно недоступно, то в конце берём IP-адрес используя REMOTE_ADDR.

среда, 1 июля 2009 г.

ASP: Постоянный редирект с заголовком 301

Итак, предыстория:
Был сайт, на котором в корне показывался flash-баннер, в самом флеше была ссылка, если было нежелание просмотра оного, ну или после того как баннер покажется весь, то происходил редирект на страницу сайта. Конкретно применялась папка внутри сайта.

После некоторых корректировок на сайте в процессе поддержки сайта была намечена необходимость этот баннер убрать. Поэтому индексный файл сайта был перемещён в корень дабы удовлетворить SEO-шникам, а со старого решили делать редирект, естественно с 301-заголовком (301 header).


На Active Server Pages (ASP) это сделали так:




<%@ Language=VBScript %>
<%
' Постоянный редирект Permanent redirection
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://valeev.org.ru"
Response.End %>

В Active Server Pages (ASP) Response.Redirect не делает того же самого, что и код повыше. Response.Redirect ставит заголовок адреса (location header) как показано, но однако код статуса ставится в HTTP/1.1 302 Object moved. Когда Вы ставите Location header с помощью Response.AddHeader, то код статуса должен устанавливаься вручную, иначе он будет 200 OK.

При отправке пользователю содержания страницы до заголовков, Вы получите ошибку типа: "Response object error 'ASP 0156 : 80004005'; Header Error; The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.". Обычно, этих ошибок не видно при редиректе, так как буферизация страниц включена по-умолчанию в IIS. Если хочется удостовериться, что контент не отдаётся вперёд заголовков преренаправления / редиректа, вызовите Response.Flush прямо перед ним, запретите буферизацию с помощью команды Response.Buffer = False, или отредактируйте конфигурацию IIS для запрета буферизации / кеширования страниц. Однако запрет буферизации снижает производительность веб-сервера.

вторник, 12 мая 2009 г.

Zend Framework 1.8 – разработка веб-приложений с поддержкой «облачных» сервисов и RAD

Компания Zend Technologies (The PHP Company) выпустила новую версию своего фреймворка для разработки веб-приложений Zend Framework 1.8 на базе технологии PHP. В новую версию платформы Zend Framework добавлены новые возможности RAD (Rapid Application Development) для ускорения разработки. К тому же, разработчики на PHP теперь имеют возможность полноценной работы с сервисами «облачных» вычислений компании Amazon (Amazon's EC2 cloud computing service).


Релиз 1.8 фреймворка Zend Framework - это первое обновление в текущем году. Предыдущий релиз 1.7 привнёс собой поддержку Adobe AMF (Action Message Format) и была выпущена в ноябре прошлого года.


Zend Framework 1.8 полностью совместима с сервером веб-приложений Zend Server. При помощи встроенных инструментов сервера, фреймворк теперь позволяет искать коренные причины сбое в работе приложений на PHP. Реализована также работа с кешированием сервера Zend для кэширования объектов и данных в памяти.

Скачать Zend Framework 1.8 можно бесплатно с сайта разработчика Zend. Также Zend Framework 1.8 поставляется вместе с бесплатной редакцией Zend Server Community Edition и с коммерческой версией Zend Server. Также поставляется в составе многих дистрибутивов Linux (Линукс).

Подробнее об этой новости можно почитать на английском PHP Speeds to the Cloud With Zend Framework 1.8.

среда, 15 апреля 2009 г.

Ричард Столлман обратил внимание на несвободный JavaScript код

Лидер организации Free Software Foundation Ричард Столлман высказал свои опасения по поводу содержания в web-контенте проприетарного кода и несвободных программ на Javascript, Flash and Silverlight и того, что у пользователя нет никакой возможности воспрепятствовать его загрузке. И речь здесь идет не только о плагинах, которые браузер предлагает установить, и которые могут быть как свободные так и нет. Столлман анализирует проблему загрузки и запуска программ, содержащихся в коде самих web-страниц, которые чаще всего написаны на языке Javascript.

Одним из примеров такой программы является Google Docs. Имеющая размер в пол-мегабайта, она представляет собой практически невозможный для восприятия обычным человеком скрипт, в котором минимум пробелов, все имена методов длиной в одну букву и, конечно же, никаких комментариев. И хотя в браузерах есть функция запрета выполнения Javascript, инструмента, идентифицирующего и блокирующего исполнение проприетарного контента пока нет. Более того, сложившаяся ситуация не позволяет пользователям получать достоверную информацию о том, какого рода код загружает их браузер. Поэтому многие и не догадываются о существовании подобной проблемы.

Но не один только Javascript позволяет вызывать программы, выполняемые на клиентской машине. Flash использует собственный расширенный вариант Javascript. Java апплеты также могут исполняться современными браузерами. Наихудшим образом обстоит ситуация с Silverlight, т.к. эта платформа использует проприетарные кодеки Микрософт, а замена Silverlight свободным аналогом без переписывания последних с точки зрения FSF не имеет большого смысла.

Для решения сложившейся ситуации Ричард Столлман предлагает следующие меры:

  • Создание единого критерия, по которому можно было бы отделить свободное Javascript ПО от проприетарного. Это может быть любое нетривиальное использование скриптов, например, создание методов, предназначенных для загрузки дополнительного кода или всей программы целиком, идентификация Ajax запросов и т.д.

  • Браузеры должны информировать пользователей о типе (свободный/не свободный) исполняемого контента.

  • Должны быть реализованы способы запуска альтернативного Javascript кода вместо проприетарного.

  • Свободное Javascript ПО должно иметь ссылку, например в виде комментария в тексте кода, на сайт, где выложены исходные тексты и соответствующая документация.

Замечу, что для Firefox есть дополнение NoScipt, которое разрешает выполнять активное содержание страниц только с доверенных сайтов.

Оригинал а английском здесь - http://www.gnu.org/philosophy/javascript-trap.html

вторник, 20 января 2009 г.

Составлен список самых опасных ошибок в программировании

Специалисты по компьютерной безопасности из более чем 30 ведущих американских и международных организаций и промышленных компаний составили список 25 наиболее опасных ошибок авторов программ, которые приводят к возникновению уязвимых мест в системах безопасности.

Инициатором проекта стал SANS Institute, а в работе приняли участие эксперты из Агентства национальной безопасности США, Microsoft, Symantec и других компаний, университетов и организаций. В составленном ими списке фигурируют такие оплошности программистов, как возможность осуществления инъекций SQL, межсайтового исполнения сценариев, пересылка секретной информации в текстовом виде и задание паролей непосредственно в коде программ, где их трудно поменять в случае раскрытия. В прошлом году пара ошибок из этого списка дала возможность взломать свыше 1,5 млн Web-сайтов.

В SANS полагают, что составленный список можно будет использовать при заключении договоров с разработчиками программ. В таком случае, ответственность за выявленные в программах опасные ошибки ляжет на авторов.

суббота, 11 октября 2008 г.

Вред локализации приложений для разработчиков

В предыдущем посте писалось про пользу локализации приложений, однако, как считает всё тот же автор, русификация продуктов для разработчиков программного обеспечения не вносит никаких преимуществ, по сравнению с локлизацией программных продуктов для пользователей. Причиной является поощрение незнания технического английского языка. Следствием этого является низкая отдача от работы программиста, не знающего технический английский, на котором, как известно, поставляется подавляющее большинство качественной технической документации и новостей. В случаях, когда в коллективе никто специально не занимается повышением своей квалификации дополнительным следствием этого является сравнительно более низкая квалификация.
Все слышали оправдание нежелания учить английский – "раньше изучал другой язык (немецкий?), а сейчас уже немолод, семья, дети, работа – на это нет времени". Хотя и с этим можно поспорить. Если же в школе (а тем более – в ВУЗе) человек учил английский – одного года программирования в англоязычной среде (Windows+Visual Studio+MSDN, Linux+GCC+man) достаточно, чтобы больше не задумываться о необходимости их русификации. Думаю, это знакомо каждому.
Про перевод на русский языков программирования я, пожалуй, умолчу. Всем понятно, что с точки зрения бизнеса (зарабатывания денег), локализация продуктов рассматривается как дополнительный источник доходов и наивно полагать, что в будущем откажутся от идеи русифицировать, скажем, Visual Studio и MSDN. Но, на мой взгляд, изучение и знание хотя бы технического английского языка входит в программу-минимум, который должен знать каждый программист.

пятница, 10 октября 2008 г.

Полезность глобализации при разработке приложений

Как пишет Олег Аксeнов в своём блоге, глобализация – это процесс проектирования и реализации ПО, предназначенного для использования локализованного UI пользователями разных регионов мира. Вот полный текст сообщения:

Хочу поделиться некоторыми мыслями по поводу глобализации. Разумеется не о глобализации как «процессе всемирной экономической, политической и культурной интеграции» ((с) Wikipedia), а о глобализации приложений :) Недавно обсуждали это на работе, решил поделиться и с вами своими соображениями на этот счет.

Почитать о том, что это такое, какие есть best practices и технологии можно в поиске по MSDN. Если коротко, глобализация – это процесс проектирования и реализации ПО, предназначенного для использования локализованного UI пользователями разных регионов мира. В этом контексте локализация – это процесс перевода ресурсов приложения для всех регионов, которые поддерживает приложение. Для простоты можно считать регионы странами, хотя это не совсем так.

Теперь о моем отношении к этому вопросу.

Вряд ли я открою Америку, если скажу, что практически для любого приложение, написанного сначала только для использования пользователями одного региона, потенциально может потребоваться локализация.

Вторая давно известная истина – нетривиальное приложение, изначально спроектированное и разработанное без учета последующей локализации, будет непросто локализовать, когда в этом возникнет потребность.

Хотя бы по этим двум причинам, стоит перед разработкой подготовить плацдарм для последующей локализации. Разумеется, можно подойти к этому с разной степенью тщательности. Например, можно заранее сказать, что иероглифические языки поддерживаться не будут и этим немного упростить себе жизнь (хотя в наши непростые дни этот рынок не стоит сбрасывать со счетов ;)).

Помимо этого у меня есть два соображения по поводу пользы использования хотя бы строковых ресурсов даже без локализации:

  • Когда строковые ресурсы не «внедрены» в web-приложение, а поставляются в виде отдельных файлов, их можно оперативно скорректировать на рабочем сервере без необходимости полного деплоймента и перезапуска приложения.
  • Иногда полезно бывает получить полный список сообщений в системе для review у заказчика, а получить их из одного или нескольких XML-файлов на порядок проще, чем «собирать» их по всему приложению.

Кстати, в Visual Studio есть (теперь, уже встроенная) поддержка генерации классов для строковых ресурсов. Хотя в моей компании все-таки используются внешние ресурсы в своем формате (тоже с генерируемыми классами).

среда, 1 октября 2008 г.

Итоги семинара Embarcadero Technologies: Россия – наш стратегический рынок

Как я уже писал в посте Семинар «Новое поколение средств разработки», семинар состоялся 24 сентября в московском отеле Holiday Inn Лесная, где прошла пресс-конференция компании Embarcadero Technologies. Перед журналистами выступил директор по продажам в регионе EMEA Людовик Невью (Ludovic Neveu).
Он представил Кирилла Раннева, руководителя открывшегося 1 сентября московского офиса Embarcadero. До того как занять эту должность, Раннев работал в компании Telelogic, а еще раньше отвечал за управление бизнесом Borland в странах СНГ. В настоящий момент в новом представительстве работает 6 человек.
Как отметил г-н Невью, рынки Великобритании, Германии и Франции на сегодняшний день устоялись и в определенной степени насытились, поэтому в Embarcadero Technologies было принято решение инвестировать в активно развивающиеся Россию и Китай. Он назвал эти направления стратегическими. А также выразил стремление к сотрудничеству не только с российскими коммерческими организациями, но и с образовательной системой. Впрочем, на пути завоевания довольно специфических вузовского и школьного рынков Embarcadero придется конкурировать с корпорацией Microsoft. А ее позиции в этих сегментах в нашей стране очень сильны.
В начале своего доклада г-н Невью рассказал о философии продуктов Embarcadero. Он выделил четыре ключевых характеристики, которые также можно рассматривать как конкурентные преимущества решений компании. Во-первых, речь идет о независимости и свободе выбора для заказчика. Действительно, в отличие от продукции большинства конкурентов, средства разработки Embarcadero работают не только с базами данных самой Embarcadero, но и с решениями других вендоров. Это качество Невью считает очень важным для завоевания образовательного рынка. Действительно, гораздо эффективнее, когда студенты овладевают универсальными инструментами, чем одним-двумя узкоспециализированными.
Во-вторых, перед архитекторами компании была поставлена задача обеспечить более легкую и продуктивную жизнь для разработчика-пользователя продуктов Embarcadero. Ведь работа разработчика, по словам Невью, – это на 60% общение с базой данной. Под удобством подразумевается не только создание качественных пользовательских интерфейсов, но также упрощение процедур загрузки, установки, запуска и покупки продуктов. При этом, как добавил Кирилл Раннев, в настоящее время на заключительном этапе находятся работы по переходу на полностью электронную систему дистрибуции, что позволит значительно сократить время поставки в Россию и другие страны новых версий. Ведь в условиях «коробочного» способа поставок пауза между релизом новой версии и фактическим началом ее продаж составляет порой несколько месяцев из-за таможенных и бюрократических проволочек. Также Невью отметил, что стратегия развития компании предусматривает поддержку профессионального сообщества, своего рода экосистемы разработчиков баз данных.
Наконец, последний пункт – это кооперативная работа. По убеждению Невью, именно сотрудничество специалистов самого разного профиля, реализованное в R&D департаментах Embarcadero, позволяет драматически повысить эффективность при создании новых решений.
Во второй части пресс-конференции Невью и Раннев рассказали о продуктовой линейке Embarcadero. Основное внимание, разумеется, было уделено релизу новых версий Delphi 2009 и C++ Builder 2009, о которых было объявлено 25 августа. Отметим, что параллельно с пресс-конференцией проходил технический семинар «Новое поколение средств разработки», в котором приняло участие более сотни специалистов, использующих в своей работе продукты Embarcadero Technologies.
Возможно, самым существенным нововведением в последних версиях Delphi и C++ Builder стала поддержка Unicode. Использование Unicode гарантирует разработчику, что создаваемые приложения будут корректно выглядеть и правильно функционировать во всех языковых версиях Windows.
В новых версиях также была добавлена библиотека визуальных компонентов (VLC), включающая элементы управления в стиле Microsoft Windows Office 2007 (Ribbon), поддержка изображений PNG. Пользовательские интерфейсы теперь можно одновременно создавать для версий приложений и под Windows XP, и под Windows Vista. Веб-библиотеки VCL позволяют разработчикам создавать приложения с поддержкой AJAX и Microsoft Silverlight. Среди новых элементов языков программирования, в первую очередь, следует выделить Generics и анонимные методы для Delphi, а также поддержку C++0x и Technical Report 1 для языка C++, впервые реализованную в составе коммерческой среды разработки. И конечно, обновлена встроенная поддержка dbExpress для баз данных CodeGear Interbase, Blackfish SQL, Microsoft SQL Server, SQL Anywhere, MySQL, Oracle, Informix, IBM DB2 и Sybase.
Средство ER/Studio Developer Edition, входящее в состав расширенных редакций Delphi Architect и C++ Builder Architect, превращает эти продукты в комплексные среды для разработки и проектирования баз данных. Г-н Невью даже сравнил универсальность ER/Studio с порталом Google.
Delphi 2009 и C++ Builder 2009 – это первые продукты компании, в которых объединены ключевые функции CodeGear и DatabaseGear. Выпуск новых версию можно назвать наиболее важным событием в жизни Embarcadero со времен релиза Delphi 3. Невью отметил, что в настоящее время активно продвигается процесс интеграции CodeGear и DatabaseGear. Так что следующие версии продуктов Embarcadero будут в сильной степени интегрированы, и заказчик получит еще большую функциональность. Невью также пообещал, что обновления продуктов будут выходить чаще. Напомним, что до приобретения компанией Embarcadero DatabaseGear обновлялся раз в три-четыре месяца, а новые версии CodeGear выходили ежегодно.

четверг, 25 сентября 2008 г.

Функция для перевода текста в HTML-сущности

Функция для перевода текста в HTML-сущности представляет собой перевод из текстового представления в шестнадцатеричный код символа строки с добавлением перед ним знака %.

function
GetHTMLCode(sToHTML: String): String;
var
i: Integer;
begin
for i:= 1 to Length(sToHTML) do
begin
Result:= Result + '%' + IntToHex(Ord(sToHTML[i]), 2);
end;
end;

Например, передаём в эту функцию строку Программирование, на выходе получаем строку %CF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5
которую удобно применять в HTML-коде, например, в mailto.

суббота, 20 сентября 2008 г.

Новый принцип размещения в каталоге фрилансеров

На сайте фриланс ру теперь новый принцип размещения в каталоге фрилансеров. Теперь изменился принцип размещения фрилансеров в каталоге:
Пользователи без аккаунта PRO размещаются в каталоге только по своей основной специализации (независимо от количества разделов в портфолио).
Пользователи с аккаунтом PRO получают преимущество – они отображаются в каталоге по 5 специализациям (основная специализация + 4 дополнительные специализации).
Теперь работать стало ещё лучше.

пятница, 12 сентября 2008 г.

Windoo - Скрипты генерирования окон на JS

Иногда при разработке приложений возникает необходимость реализовать оконный интерфейс в веб-приложении с возможностями перетаскивания окон и другими элементами стандартных окон операционной системы.
Для этого предназначен плагин окон Mootools Windoo. Windoo это javascript-класс, основанный на фреймворке Mootools, который позволяет создавать перетаскиваемые окна на вашей html-странице с возможностью изменения размеров.
Windoo также включает следующие расширения:
  • Drag.Multi - расширение, основанное на Drag.Base, предоставляющее возможность изменения множества стилей для множества элементов в одно и то же время согласно движению мыши.
  • Drag.Resize - расширение Mootools, которое позволяет использовать хендлер перемещения для изменения размеров окна в 8 направлениях.
Особенности
  • Изменение размеров в 8 направлениях (полностью настраиваемо)
  • Работает в Firefox, Opera, Safari, and IE 6, 7
  • Поддерживает пределы для изменения размеров для контейнерных элементов
  • Полностью настраиваемые темы Windoo
  • Сохраняет пропорции
  • Разнообразные менеджеры окон
  • Поддерживает перекрытия iframe (iframe overlay) для IE (исправляет ошибку <select>
  • Генерирует валидный строгий XHTML код
  • Модульный исходный код с разными вариантами закачки с помощью мастера построения билда
Примеры
  • Drag.Multi: Изменение стилей множества элементов при наведении мышки
  • Drag.Resize: Настраиваемое изменение размеров в 8 направлениях
  • Windoo: Шаблонная страница Windoo page и демо
  • Windoo Aqua: Демонстрация темы MacOS X Aqua для Windoo
  • Windoo builder: Конфигурирование окна
  • Windoo.Ajax: Динамическая загрузка содержания окна
Скачать
Обсуждение.
Возможно на странице открытая ветка Windoo форума Mootools.

Перевод с сайта Google Code: Windoo - Mootools draggable and resizable Window plugin

четверг, 31 июля 2008 г.

Комментарии к бусидо программиста

Текст относится к предыдущему посту "Бусидо программиста" и является комментарием.


Почему в СССР? Как сказал поэт:


"Я люблю эту грешную землю

Потому что другой не видал."

Что такое "Бусидо"? Буквально в переводе с японского - "путь воина", т.е. сборник моральных установок японского самурая, концептуально более широкий, чем японский военный устав. Следование принципам "бусидо" обязательно и приоритетно для самурая и необязательно для просто вооруженного японца. Имеют хождение другие бусидо вроде знаменитого эссе "Настоящий программист программирует только на фортране". Вопрос о совместимости всех "бусидо" не обсуждается, т.к. сознательно не исследовался автором.

1. Использована знаменитая трехшаговая схема Ф.Э. Джержинского. Так же как и в оригинальном высказывании, все рекомендации носят чисто иносказательный характер. Более полно этот принцип звучит так: "Программист должен уметь сидеть за дисплеем по 24 часа в сутки (или по 25/23 - в день осенне-весеннего перевода часов); должен уметь не думать ни о чем, кроме программы, и при игре в ТЕТРИС не задевать ногтем за клавишу ESCAPE (на старой клавиатуре с 84 клавишами)". Наиболее сушественен второй принцип, в своем развитии простирающийся до системы йогов и буддийской техники психорегуляции.

См. также комментарий к принципу 3.

2. "Самурай должен стремиться к смерти. Если есть два пути и один из них ведет к смерти, то самурай должен вступить на путь, ведущий к смерти." Программист работает над программой, пока его начальник не вырвет ее из рук программиста насильно и не объявит официально об окончании работы над программой. (Здесь имеются в виду, конечно, большие программы, а не маленькие. Любопытно исследовать вопрос о том, как с ростом сложности программы она скачкообразно переходит из разряда маленьких программ в разряд больших, или нескончаемых; и далее, по мере дальнейшего усложнения, перескакивает в разряд програмных проектов с непредсказуемам состоянием завершенности.

См. также книгу Ф.Брукса "Мифический человеко-месяц".

3. Коррелирует с второй частью принципа первого. Ни мысли об окончании работ, ни мысли о деньгах или престиже не должны занимать голову программиста даже в режиме Terminate but Stay Resident (Окончиться, но не освобождать память). Память программиста во время работы над программой должна быть полностью отдана программе. Опыт показывает, что любые посторонние мысли в конечном счете только мешают. Что делать, если посторонние мысли все-таки лезут? Или заниматься аутотренингом; или найти работу поинтереснее; или найти, как обойти
данное неинтересное место в программе или сделать его интересным; или ничего не делать с сознанием того, что работаешь медленнее и хуже, чем мог бы; или устоить перерыв.

4. В древности считалось, что программирование начинается с рисования блок-схем. Опыт показывает, что начинать программирование нужно задолго до и кончать значительно позже этапа собственно работы с текстом программы. Этот принцип работы глубок. Что вы, собственно, хотите сказать своей программой? Хватит ли у вас сил, средств и ресурсов? Не написана ли она уже давно другим? Нужна ли она будет кому-нибудь после того, как она примет товарный вид? Сможет ли этот кто-нибудь ее купить, при условии, что вы произвели ее для продажи? И, опять же, если вы преполагаете продавать свою программу, как и за сколько вы будете ее продавать?...

Все эти и множество других вопросов могут влиять на текст вашей программы.

5. К этому надо стремиться. В этом состоит подлинное исскуство.

6. Каждый программист или имеет свое мнение о хорошей программе, или когда-нибудь слышал чье-то. Пишущие на Паскале стараются не применять оператор GOTO и рассуждают об абзацных отступах. Пишущие на СИ стараются размещать не более одной процедуры на экране. Пишущие на языке ассемблера изощряются не только в операторах, но и в комментариях. И т.д. Все это существенно, если вы пишете программу не на продажу. В этом случае вы просто пишете программу. Следовать принципу "программирования программирования" не обязательно. Другое дело - программировать товарный программный продукт. Текст товарной программы может быть красивым, но время обычно против красоты.

Покупатель руководствуется совсем другими критериями, чем красота исходника. С другой стороны, красиво написанная программа более удобна с точки зрения отладки, содержит меньше логическких ошибок и обычно работает более надежно. Единственный выход - сразу писать красиво.

7. Только так. Если вы еще не понимаете, почему недопустимы другие ответы, все равно отвечайте одним из двух предложенных способов не задумываясь.

8. Игры, антивирусы, NORTON COMMANDER и прочие резиденты, драйверы ALFA и BETA должны быть удалены из памяти, а то и вообще с винчестера. Это - детские болезни. Что касается игры ТЕТРИС, то это самая лучшая компьютерная игра, но все равно нудная.

9. Этот принцип можно назвать глубочайшим. О, сколь многие потратили месяцы и годы на написание программ, которые уже давно написаны.

Одно по-настоящему внимательное прочтение руководства по MS-DOS избавит вас от многих и многих разочарований и неприятных открытий.

10. Можно быть программистом и не писать программы. Нельзя долго оставаться программистом, не читая документацию. Распечатка дампов необязательна ровно настолько, насколько не обязательно открывать капот собственной автомашины (просмотр дампов на экране - полумера). Невозможно программировать не выспавшись. Если вы не программист, но начальник программистов и заставляете их приходить на работу к определенному сроку, то вы теряете программистов и приобретаете набивальщиков невразумительных текстов.

11. Это один из постулатов теории информации. Настоящий программист умеет использовать в своей работе всю информацию, которая имеется в его распоряжении на данный момент по данному вопросу. Любую книгу программист читает в том числе и как документацию и из любого печатного издания извлекает сведения по программированию.

12. Комментарий к принципу 10 может показаться мрачноватым, но, к счастью, действия, описанные в нем, только необходимы, но не достаточны. Программист не живет, чтобы работать, и не работает, чтобы жить. Все недоразумения возникают из незнания того, что рабочим инструментом программиста являются, помимо головы, его душа и эстетическое чувство.

13. Чисто стилевой элемент. Иллюстрирует тот факт, что грош цена системе, не имеющей возможности для развития.