понедельник, 27 октября 2008 г.

Подозрительный файл в проекте

Сегодня выдалась свободная минутка, и решил продолжить работу над одним из своих проектов. Сходу решил откомпилировать проект, чтобы вспомнить, на чем я остановился в прошлый раз. О-па! А проект-то не работает и IDE выдает следующую ошибку:

«Странно» - подумал я, припоминая, что когда то я уже боролся с этой проблемой … Первой шальной мыслью было, что перевод часов стал причиной сбоя. :) Но эту мысль я очень быстро откинул, однако сменил дату всех файлов проекта – так, на всякий случай.

Стал мыслить дальше, поскольку даже запуск приложения просто из-под Windows выдал ошибку – «Не удалось запустить приложение, поскольку его параллельная конфигурация неправильна». Открыл папку проекта и стал на нее смотреть, вскоре заметил один подозрительный файл, которого быть не должно! (он выделен на рисунке ниже)

Ума не приложу, откуда он нарисовался. Причем его содержимое было идентично файлу mntrng.config в котором у меня содержатся настройки приложения – поэтому система и не могла запустить приложение. Просто удалил файл – и все заработало в штатном режиме. Даже несколько раз перекомпилировал и собрал проект – файл пока больше не появился, откуда он только взялся ….

понедельник, 20 октября 2008 г.

Упрощаем себе жизнь

Да, именно так. И я не побоюсь этого громкого названия поста. :) Речь, наконец-то, пойдет о создании Live Templates, о которых я говорил несколько ранее. Давно хотел написать обзор по этому поводу, но все руки не доходили.

Итак. LiveTemplates представляют собой обычный XML файл следующей структуры:

<?xml version="1.0" encoding="utf-8" ?>

<codetemplate xmlns=http://schemas.borland.com/Delphi/2005/codetemplates version="1.0.0">

<template name="" invoke="manual">

<description>


</description>

<author>


</author>

<code language=""><![CDATA[]]>

</code>

</template>

</codetemplate>

Это общий скелет шаблона, который генерируется средой по умолчанию и который подойдет для нашего сегодняшнего примера. Разберем его подробнее.

Собственно шаблон начинается с тега <template name="" invoke="manual">. В атрибуте name указывается произвольное имя шабна, а в атрибуте invoke указывается режим запуска данного шаблона. Данный атрибут может принимать следующие значения: manual и auto.

Далее идет тег краткого описания шаблона, и указания автора.

Ну и далее – наиболее интересный тег – code. Атрибут language может принимать следующие значения: CSharp, Delphi, HTML, IDE, XML. Стоит так же отметить, что приведенный выше скелет шаблона создается также с использованием шаблона с названием code template template, что говорит о большой гибкости LiveTemplates.

Во вложенном теге CDATA собственно и размещается сам код шаблона.

Теперь, когда разобрались со структурой шаблона, попробуем создать шаблон который будет автоматически исправлять опечатку в операторе присваивания, которая иногда может вывести из себя :). Я имею ввиду опечатку в виде оператора ;= вместо необходимого :=.

Установим атрибут имени шаблона в «;=», а атрибут invoke в auto поскольку нам необходимо чтобы шаблон применялся автоматически. Далее установим значения тегов description и autor по своему усмотрению и перейдем к коду самого шаблона.

В атрибуте language следует написать Delphi, поскольку именно для этого языка мы создаем шаблон. Так же следует добавить еще один атрибут, отсутствующий в скелете по умолчанию – delimeter раный значению «|», который определяет разделитель шаблона, а в CDATA следует написать следующее: <![CDATA[:= |end|]]>, где |end| указывает положение курсора после применения шаблона. Осталось только сохранить шаблон в специальной папке, чтобы IDE могла их найти. По умолчанию эта папка находится c:\Documents and Settings\[USERNAME]\Local Settings\Application Data\Borland\BDS\4.0\code_templates. Вот и все – ничего сложного, а сколько нервов теперь мы себе сэкономим :).

Полный текст шаблона получившийся у меня выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>

<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"

version="1.0.0">

<template name=";=" invoke="auto">

<description>

typo fix

</description>

<author>

Valeriy

</author>

<code language="Delphi" delimiter="|">

<![CDATA[:= |end|]]>

</code>

</template>

</codetemplate>

Теперь, если вдруг набрать в редакторе кода ;= то данный оператор автоматически заменится на правильный :=. Это пока все, подробнее о создании более сложных и полезных шаблонов я напишу в следующих своих постах.

воскресенье, 19 октября 2008 г.

О Блогах, спаме и комментариях

Вместо предисловия ….

Большинство блогов использует в качестве движка Wordpress. Большой проблемой этого движка является спам. Когда мы открывали один проект, с использованием этого движка, первые спамеры появились быстрее первых посетителей, и на протяжении трех месяцев они только наращивали свою активность, заставляя принимать ответные меры, поскольку администраторский ящик стал трещать по швам от писем с просьбами промодерировать оставленный комментарий. Но все мои ответные меры регламентировались следующим принципом: лучше обработать десяток спам-комментариев, чем не дать читателю возможность выразить свое мнение. Я считаю это правильным, к чему разбрасываться читателями?

Основная мысль …

Не так давно на одном из блогов разгорелась полемика по поводу как правильно (или не правильно) писать код. Хотелось бы поучаствовать в этом, однако принятые администратором меры не позволили оставить комментарий, сочтя меня злостным спамером. Сначала я подумал, что причиной может быть PROXY-сервеи и Firewall стоящие на работе, однако дома получил такое же сообщение. Обидно. По всей видимости там используется какой то хитрый плагин, совершающий одному ему (и возможно администратору) понятные умозаключения. Хотя обычного визуального подтверждения там нет, хотя одно это могло бы во много раз уменьшить поток спама. Но каждый борется со спамом своими методами.

С тех пор как был запущен собственный проект все чаще стал мучить один вопрос, почему на blogspote не появляются спам-комментарии, а ведь тут и анонимным разрешено и комментарии не модерируются перед появлением …. Чудеса.