Ответы пользователя admax - CodeHelper

admax

admax
Карма 2924
Имя Евгений
Возраст Неизвестно
Сайт Неизвестно
Twitter @codehelper_ru
Участвует в проекте 1118 дн., 14 час., 8 мин.
Последняя активность 419 дн., 6 час., 38 мин. назад
О себе ничего не указано

Ответы

Новые Лучшие
1
...
8
9
10
11
12
13
Перейти к вопросу →

Эта ошибка обычно возникает из-за того, что элемент discriminator расположен неверно внутри файла описания меппинга. По схеме xml-документа тег discriminator должен располагаться сразу после элемента id

Перейти к вопросу →

Команду DELETE в MySQL можно использовать для удаления из нескольких таблиц сразу, используя один из вариантов синтаксиса:

1) Поддерживается начиная с версии MySQL 4.0.0. Строки удаляются только из таблиц, перечисленных перед FROM:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

2) Поддерживается начиная с версии MySQL 4.0.2. Строки удаляются только из таблиц, перечисленных после FROM и перед USING:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

Примеры использования первого и второго варианта:

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

В обоих примерах строки удаляются только из таблиц t1 и t2, но поиск ведется также с учетом данных из t3.

Перейти к вопросу →

Похоже можно просто разместить контент внутри элемента object:

<object ... >
    <param value="..." name="...">
    <!--[if !IE]>-->
    <object ...>
    <!--<![endif]-->
        <param value="..." name="...">
        <div>
            Это альтернативный контент, который отображается 
            если не удалось отобразить Flash
        </div>         
    <!--[if !IE]>-->
    </object>
    <!--<![endif]-->
</object>
Перейти к вопросу →

В плагине jquery-json используется метод проверки, основанный на регулярных выражениях:

function isValidJSON(src) {
    var filtered = src;
    filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@');
    filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
    filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, '');

    return (/^[\],:{}\s]*$/.test(filtered));
};
Перейти к вопросу →

Можно использовать HtmlAgilityPack. Это готовый html парсер. Код парсинга представленной страницы может быть таким:

private static string GetImages(string page)
{
    var doc = new HtmlDocument();
    doc.LoadHtml(page);
    var nodes = doc.DocumentNode
        .SelectNodes("//div[@class='browse2-results']/*/div[@class='tt-a']");
    return nodes
        .Cast<HtmlNode>()
        .Aggregate(
            string.Empty, 
            (current, node) => current + node.OuterHtml);
}

Метод GetImages принимает код страницы, а возвращает блоки с рисунками.

Перейти к вопросу →

Можно использовать RSS.NET. Эта библиотека берёт на себя загрузку фида, и отдаёт пользователю готовое к использование объектное представление этого фида. Код примерно такой:

var feedUrl = "http://codehelper.ru/rss/Questions";
var feed = RssFeed.Read(url);

На выходе, как уже сказал, имеем объект feed, который можно сразу использовать. То есть не нужно ничего парсить и разбирать вручную.

Перейти к вопросу →

Согласно рекомендациям W3C, элементы disabled не должны включаться в POST-запрос. Если нужно запретить изменение некоторого поля, но включить его в submit, то лучше использовать атрибут readonly. Следует, однако, иметь в виду:

  • атрибут disabled поддерживается элементами BUTTON, INPUT, OPTGROUP, OPTION, SELECT, и TEXTAREA. А атрибут readonly — только элементами INPUT и TEXTAREA;
  • disabled-элементы отображаются браузерами действительно «недоступными», а readonly-элементы могут выглядеть точно также как обычные. Поэтому, для визуализации эффекта недоступности нужно использовать соответствующий CSS-класс;
  • атрибут readonly запрещает только изменение value для элемента. При этом любое другое взаимодействие пользователя с элементом допустимо. Из этого следует, что, например, для чекбоксов (type=checkbox) readonly НЕ ЗАПРЕЩАЕТ пользователю отмечать этот чекбокс. Потому что при выделении изменяется checked, но не value.
Перейти к вопросу →

Есть родственные вопросы насчет пакетирования и организации структуры проекта.

Один из принципов пакетирования гласит, что «должна быть толко одна причина для изменения пакета». То есть любое изменение должно быть локализовано и должно затрагивать только определенные сборки. Вариант, при котором есть три проекта Models, Views, Controllers не отвечает этому принципу, потому что любое изменение будет сквозным — оно затронет и модель и виды и контроллеры. Если же разбивать на проекты по логическим частям, то для каждой такой части можно проводить локальные изменения не затрагивая другие.

Вообще задача пакетирования достаточно запутанная, и, покрайней мере в .NET, каждый организует структуру проекта исходя из личных предпочтений, а не best practices.

Перейти к вопросу →

Можно воспользоваться элементом link с rel="canonical" для указания канонического (предпочитаемого) адреса страницы:

<link rel="canonical" href="http://somesite.ru/category/13/текстовое-описание-категории">

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

Такой подход отлично сработает для всех (или большинства) заморских поисковиков, но наши поисковики (в частности Яндекс) не воспринимают rel="canonical".

Перейти к вопросу →

Обычно делается следующим образом:

  1. Создается задача (target A), которая будет выполняться для каждого файла. Путь к файлу, и другие данные, которае могут понадобиться, считываются из специальных свойств (property).
  2. Создается задача (target B), которая перебирает все файлы по определенному пути, и вызывает для каждого из них задачу target A, предварительно задав необходимые свойства.

Пример такого скрипта можно увидеть, в проекте CommonLogging. Вот target, который запускает модульные тесты для каждой сборки из папки bin:

<target name="TestAllAssemblies">
    <foreach item="File" property="filename">
        <in>
            <items basedir="${build.dir}">
                <exclude name="net/**" />
                <include name="**/*.Tests.dll" />
            </items>
        </in>
        <do>
            <property 
                 name="test.assemblyfile" 
                 value="${filename}" overwrite="true" />
            <call target="common.run-tests.nunit" />
        </do>
    </foreach>
</target>

Вот дочерний target, который вызывается для каждой найденной сборки тестов:

<target name="common.run-tests.nunit">
   <property name="test.assemblyname" value="${path::get-file-name-without-extension(test.assemblyfile)}" overwrite="true" />
   <property name="test.bin.dir" value="${directory::get-parent-directory(test.assemblyfile + '/')}" overwrite="true" />

   <echo message="Unit Testing ${test.assemblyname}, File='${test.assemblyfile}', WorkingDir='${test.bin.dir}'" />

   <exec program="${tool.dir}/nunit/nunit-console.exe" workingdir="${test.bin.dir}" verbose="true">
       <arg value="/xml:${test.assemblyname}.dll-TestResults.xml" />
       <arg value="/nologo" />
       <arg value="/noshadow" />
       <arg value="/framework:${nant.settings.currentframework}" />
       <arg line="${test.assemblyfile}" />
   </exec>
</target>

Как видно, дочерний элемент target использует свойство test.assemblyfile, хранящее путь к текущему файлу и устанавлеваемое родительским таском.


1
...
8
9
10
11
12
13
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.