Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #97


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No97 (2010-08-31).

Здравствуйте, уважаемые читатели!

Этим летом мы провели апгрейд нашего сервера, а точнее — полностью заменили его. В процессе установки и настройки ПО появлялись различные, успешно преодоленные трудности. Рассказ об одной из них читайте в статье «Перепрошивка контроллера LSI SAS 1068E для работы с Linux». Традиционно, здесь приводим фрагмент статьи, а польностью ее можно прочесть на нашем сайте, в разделе «Администрирование ОС::Linux».

Также предлагаем вашему вниманию подборку интересных тем форума за прошедшую неделю.



Надеюсь, что описание моих злоключений поможет вам сэкономить время.


Знакомство.

Мое знакомство с контроллером LSI SAS 1068E, который встроен в материнскую плату X8DTL-3 сервера Supermicro, началось не слишком приятно. Для начала, у него неприятное название — «Software Raid». Почему "программный", если используется специальный чип? Вставил два SAS диска, создал через конфигуратор BIOS-а RAID1 и попробовал начать установку CentOS 5.5 x86_64.


Первая шишка.

Установщик не увидел собранного рейда совсем.

На диске прилагаются драйвера для RHEL 5.3 - CentOS его полный аналог, но этот модуль не подойдет, так как собран под версию ядра полуторалетней давности. Подход с предкомпиленными драйверами не годится совсем — что с ними делать при обновлении ядра? Это как-то несерьезно.
Порылся в интернете и прежде всего на сайте производителя — LSI. Там предлагается то же самое.

В сети утверждают, что поддержка есть в ядрах, начиная с 2.6.22, а RHEL 5/CentOS 5 используют ядро 2.6.18. А ждать CentOS 6 с ядром 2.6.32 можно еще полгода.

На всякий случай почитал мануал на предмет, что этот рейд вообще может, и какие его преимущества перед программным рейдом Linux (mdadm). Утилиты управления у контроллера — только GUI — это неудобно. Упомянутые в мануале Command Line Tools ни на прилагаемом диске, ни на сайте LSI не существуют. Ну, вообще никакого сервиса...

Даже если найти нужный драйвер и сконфигурировать массив через BIOS, то управление и мониторинг исключаются. Вижу, что смысла использовать такой рейд никакого! Значит, не будем мучать себя и сделаем софтовый рейд средствами Linux.


Шишка вторая.

Выключаю сервер, снимаю перемычку, которая переводит контроллер из режима SR (Software Raid) в режим IT (Integrated Target mode), снова включаю и начинаю установку CentOS. Ура! Linux увидел это чудо природы и даже установился на него!

Радость закончилась при перезагрузке по завершении установки: BIOS не видит дисков в режиме IT. Ну и бяка...


Попытка исправить контроллер.

Я снова порылся в Интернете и нашел, что не первый с этим сталкиваюсь и нужно перепрошить контроллер, лишив его возможности создавать рейд-массивы, но дав возможность загружаться как с обычных дисков. Замечу, прошивка фирменная. И тут не обошлось без шишек: множество найденных рецептов перепрошивки (по сути, они все одинаковые) предлагают скачать «самую свежую» firmware, но реальная ее свежесть — 2006-2007 год. Кстати, так и не удалось мне перешить с этой «свежей» прошивкой.



Полностью это описано здесь.

  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Здравствуйте!
    Написал программу для расчета числа пи методом Монте-карло. Чтобы получить достоверное значение, нужно выполнить некоторый алгоритм n-е число раз. Вкратце, алгоритм такой: генерируем случайное число заданном в диапазоне и проверяем его на вхождение в некоторую область, если число "входит", увеличиваем счетчик вхождений на 1. Эти операции в моей программе повторяются 250 млн. раз (чем больше, тем точнее результат). Решил "помочь" процессору, создав поток, выполняющий те же самые операции
    Вот сам алгоритм:
    Код:
    // passes - кол-во просчетов алгоритма ( == 250 млн.)
    // kv_count - число текущих просчетов
    // kr_count - число "подходящих точек"
    while(kv_count < passes)
    {
    // генерируем случайные координаты в пределах квадрата
    x = rand() % radius;
    y = rand() % radius;

    // увеличиваем число обработанных точек
    InterlockedExchangeAdd(&kv_count, 1);

    // проверяем точку на вхождение в круг
    if((x * x + y * y) <= radius * radius)
    // если точка подходит, увеличиваем число вхождений на 1.
    InterlockedExchangeAdd(&kr_count, 1);

    }

    Расчет алгоритма 250 млн. раз на моем компьютере занимает примерно 35 сек.
    Теперь сама проблема: после просчета я обьявляю переменную r2 и присваиваю ей значение r2 = radius * radius, но в самом цикле не использую. Запускаю - теперь расчет занимает 50 секунд. Пробую закомментировать строку r2 = radius * radius, получаю снова 30 сек. Не понимаю, в чем проблема  :dontknow: 99 % процессорного времени занимает прогон цикла, в котором перменная r2 даже не используется...
    Кто знает,прошу помощи  :)
  • Добрый вечер! у меня возник такой вопрос...У меня есть массив кнопок типа CButton и мне надо обработать нажатие на них...Как это сделать?
  • Проблема такая. SDI приложение на MFC, VS2008. СView порожден от CScrollView, поскольку изображение, которое рисуется средствами GDI+ может иметь довольно большую ширину. Для рисования исходных данных в окне все данные сначала масштабирую таким образом, чтобы они помещались в окне. С этим все нормально.
    Но вот с выводом на печать  проблема. Нужно выводить графику в реальном масштабе скажем 1:200, 1:100 и т.д. К тому же поскольку картинка имеет большой размер по ширине, то на одну печатную страницу, например, для бумаги в формате A4  она не помещается и нужно использовать многостраничную печать. И вообще как узнать реальный масштаб того что рисуется на экране. Ведь насколько я понимаю все будет зависеть от разрешения монитора, принтера, режима отображения и много чего еще. Все что накопал в литературе работает, но не так. Про вывод на печать в масштабе вообще ничего не нашел. И как с этим жить? Дайте за что-нибудь зацепиться. Буду балгодарен за ответы, обсуждение
  • Опять запутался в языках и что-то не понимаю в С++.

    Есть 2 класса Pattern и Shape, которые наследуют от общего класса Keta.
    Код:
    class Keta  
    {
    public:
    Keta();
    virtual ~Keta();
    bool _isPattern;
    virtual void locate()=0;
    };
    class Pattern : public virtual Keta
    {
    public:
    Pattern();
    virtual ~Pattern();
    void fp();
    void locate();
    };
    class Shape : public virtual Keta
    {
    public:
    Shape();
    virtual ~Shape();
    void fs();
    void locate();
    };

    Есть смешанный массив указателей на оба класса
    Код:
    CPtrArray arr;  arr.SetSize(0,1);
    Pattern* ptr = new Pattern;
    arr.Add(ptr);

    Shape* shp = new Shape;
    arr.Add(shp);
    Читая этот массив, я естесственно не знаю тип текущего объекта, поэтому

    Keta* keta = (Keta*)arr.GetAt(i);

    1. Могу ли я, зная исходный тип объекта, получить указатель соответствующего типа?
    Например:
    Код:
    if( keta->_isPattern )
    Pattern* ptr = (Pattern*)keta:
    или
    Pattern* ptr = keta:

    2. В чем моя ошибка в определении виртуальной функции    
    virtual void locate()=0; ?

    Программа падает при
    keta.locate();

    Спасибо.
  • Программирование :: С/С++ :: Borland C/C++
  • Возник вопрос: как сделать так, чтобы пользователю программы можно было сделать какое-то действие только в течениЕ какого-то времени. То есть, течет таймер, по истечении которого это действие уже сделать нельзя, и программа продолжает работу.
    Можете помочь, пожалуйста?
  • Программирование :: Delphi
  • А кто-нибудь доступно объяснит как использовать firebird embedded? Я с ним первый раз столкнулся, нужно перенести приложение со суперсервера. К суперсерверу подключался компонентом TIBDatabase. Из ридми по огнептице я вынес "Just copy fbembed.dll, icudt30.dll, icuin30.dll and icuuc30.dll into the directory with your application." А... дальше? Из них, видимо, нужно вызвать какую-то процедуру подключения, но я даже названия ее нигде не встретил.
  • Программирование :: VisualBasic :: Visual Basic .NET
  • Дамы и Господа!
    Как конвертировать число из текстового формата в числовой?
    Пример:
    Dim MyString As String = "1.25"
    Dim MySingle As Single = 0
    MySingle = MyString ' Надо вот так, а выдает ошибку
    Перепробовал разные функции - без результатно...
    Подскажите, пожалуйста!
    Благодарю за внимание
  • Программирование :: Программирование 1С :: 1С 7.x
  • День добрый!

    Начала изучать Запросы, кое-что получается, кое-что нет и не могу понять, где допущена ошибка.

    (без запросов, просто с условиями - все работает отлично)

    Задача.

    Получить данные вида:

    Касса № 1
    = Чек № 0001 = проведен = сумма: 100 руб
    = Чек № 0002 = проведен = сумма: 110 руб
    = Чек № 0003 = не проведен = сумма: 200 руб

    № кассы выбирается в диалоговом окне, дата - тоже.

    Полученные данные пока вывожу просто с помощью "Сообщить".


    Вот код запроса:

    Код:
     Запрос = СоздатьОбъект("Запрос");

    ТекстЗапроса=
    " //{{ ЗАПРОС (ВыборЧеков)
    |Период с кн_дата по кн_дата;
    |ОбрабатыватьДокументы Все;
    |Обрабатывать Все;

    |ЧЕК = Документ.ЧекККМ.ТекущийДокумент;
    |КАССА = Справочник.Кассы.Наименование;
    |НомерЧека =  Документ.ЧекККМ.НомерДок;
    |СТАТУСЧека = Документ.ЧекККМ.ЧекПробитККМ;
    |ВИДЧека = Документ.ЧекККМ.ВидОперации;
    |СуммаПоЧеку = Документ.ЧекККМ.Сумма;

    |Группировка Касса Без Групп;

                  |Функция Сум = Сумма(СуммаПоЧеку);

    |Условие (Касса=Кассы);

    |"//}}ЗАПРОС
    ;

    По самому запросу не понятно пока только одно: а именно то, что связано с оператором "Группировка" и далее - методом "Группировка".
    Вопрос далее, исходя из кода ниже:

    Код:
    Если Запрос.Выполнить(ТекстЗапроса) =0 Тогда  

    Сообщить ("Ошибка выполнения запроса отбора чеков"); 
    Возврат;

    Иначе
           
    Пока Запрос.Группировка() = 1 Цикл
                  Сообщить ("Касса в запросе: " + запрос.касса );
    Сообщить ("Номер чека: " + запрос.НомерЧека);   
    Сообщить ("Статус чека: " + запрос.статусЧека ); 
        Сообщить ("Вид чека: " + запрос.видЧека );
    Сообщить ("Сумма чека: " + запрос.СуммаПоЧеку ); 


    КонецЦикла;

    Сообщить ("Общая сумма: " + запрос.Сум + " руб.");

    КонецЕсли;

    Вот  вопросы:

    0) возвращаясь к Запросу: если не указывать "Без групп" - на экран не выводятся ни номера чеков, ни статус, ни вид, ни сумма (где-то стоят нули, где-то - пустые строки). В чем так принципиально указывать именно "без групп"?

    1) если в качестве параметра метода указать "Касса" или "1", то внутренности цикла вообще невыполняются. С чем это связано?

    и еще один вопросик: в каком виде представлена информация, после выполнения запроса?
    Правильно я понимаю, что так:

    | касса | номер чека | вид чека | статус чека | сумма по чеку |

    спасибо за внимание  :-&
    Вторые сутки мучаюсь.
  • При открытии 1с торговля и склад пишет ошибку: Ошибка загрузки компоненты MOD.dll - дальнейшая работа невозможна! Меня интересует, что это за компонента mod.dll, где ее взять и как зарегистрировать?
  • Программирование :: Программирование 1С :: 1С 8.x
  • Приветствую всех!
    В Комплексной автоматизации необходимо заполнить документ Заказ покупателя: На вкладке товары добавит Номенклатуру, затем  на вкладке Материалы заполнить поля по спецификации выбранной номенклатуры.
    В режиме конфигуратор Документы -> Заказ Покупателя -> Форма документа есть вкладки Материалы, Возвратная тара, Услуги, Автоматические скидки. А в режиме Предприятие этих вкладок нет.
    Почему нет этих вкладок и как их "подключить".
  • Программирование :: Авторское ПО
  • Здравствуйте.
       Предлагаю всем кому интересно по тестировать дизассемблер для 16/32/64-битного кода. В общем-то он уже не плохо работает, не падает при дизассемблировании больших файлов. Есть возможность ассемблирования отдельных мнемоник, почти как в OllyDbg. Прилагается очень подробная справка.

    Единственное ограничение это то что работать будет только под управлением Win64.
    Скачать можно по прямой ссылке: http://dsmhelp.narod.ru/dsmhelp0.6.zip
  • Всем привет.

    Написал свой редактор реестра. Старался создать похожий на системный.

    (http://forum.shelek.ru/index.php?action=dlattach;topic=23252.0;attach=4286)

    Программа написана в CBuilder 2006 с использованием VCL и подписана.

    P.S.: Сейчас версия 0.2. Исправлена остановка поиска при ошибке чтения раздела и строку пути
             теперь можно копировать...

  • Операционные системы :: Windows
  • Повадился я как то обновлять винду через сабж. Третий вот пак поставил, а так же все мелкие исправлялки. Ну ничо так, понравилось.

    Заметил так же, что в C:\WINDOWS появились папочки для удаления обновлений. И зародился в гололве вопрос - а где лежат инсталляшки ? Чтобы не качать каждый раз, а подсунуть апдейту с диска в следующий раз ?
  • Please help!!!
    Windows server 2003 не загружается
    после интерфейса загрузки windows server 2003
    появляется синий экран с надписями но их невозможно переписать так как через доли секунды он пропадает и сервер снова перезагружается((


    сервер hp proliant ml350


    как на windows server 2003 войти в безопасный режим.
    и пожалуйста поподробней если можно я пока молодой в этих OS
  • Помогите советом, что мне сделать с МАС-адресом, он почему-то постоянно меняеТСя, и из-за этого нет доступа к интернету. ОС Windows 7HOME BASIC, антивирус стоит, короче, всё как полАгается, а стоит только выключить ноутбук, и тут же включить, как сразу нет доступа к сети. Я уже всё перепробОвал, не знаю, что мне делать, помогите, пожалуйста! :dontknow: :-/
  • WinXP SP3

    В Студии 2008 запускаю на отладку программу и случайно увидел в логах
    Цитировать
    <...>
    "MyGraphControl.exe": Загружено "C:\WINDOWS\system32\imm32.dll"
    "MyGraphControl.exe": Загружено "C:\Program Files\Agnitum\Outpost Firewall Pro\wl_hook.dll"
    "MyGraphControl.exe": Загружено "C:\WINDOWS\system32\shell32.dll"
    Первый этап обработки исключения в "0x7c91b21a" в "MyGraphControl.exe": 0xC0000005: Нарушение прав доступа при записи "0x00000010".
    "MyGraphControl.exe": Загружено "C:\WINDOWS\system32\uxtheme.dll"
    <...>

    Приложение запускается и работает без проблем. Причём эта ошибка выскакивает ещё до входа в main

    в другом проекте на месте этой ошибки строка
    Цитировать
    "AnyTest.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll"

    куда глядеть, что не так ?
  • Операционные системы :: Unix и другие
  • Имеется дистрибутив МСВС 3.0. Каким образом из него можно сделать LiveCD? Именно LiveCD, а не LiveDVD.
  • Операционные системы :: Unix и другие :: Linux
  • MPD (демон медиаплеер)
    все по инструкциям, ошибок при установке, при запуске нету.

    Цитировать
    bind_to_address                 "127.0.0.1"
    port                            "6600"
    это адрес и порт управления плеером.

    MPC - утилита управления демоном

    запускаю
    пишет
    Цитировать
    MPD_HOST and/or MPD_PORT environment variables are not set
    error: problems getting a response from "localhost" on port 6600 : Connection refused
    захожу

    Цитировать
    # telnet localhost 6600
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    OK MPD 0.13.0
    Отвечает
     Пока писал подумал, а может не в этом проблема....


    icecast
    Так как он установлен, то решаю запустить второй экземпляр
    создаю новый файл конфигурации
    указываю адрес, порт
    запускаю

    Извне вижу страничку icecast
    Но почему-то не подключается к mpd к icecаst







  • Дружестенная радиостанция хочет запустить еще один радиопоток со своего сервера.
    Т.к. за подключение второго порта нужно что-то платить, то я им предлагаю второй айпишник на существующем интерфейсе.
    На freeBsd я это поднимал легко и сервер был под рукой, здесь же - сервер где-то далеко и доступ ограничен.


    # ifconfig eth0
    eth0      Link encap:Ethernet  HWaddr 00:1a:4d:51:f5:8d
              inet addr:AAA.BBB.CCC.DDD  Bcast:255.255.255.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:808799950 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1431742635 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:487699184 (465.1 MiB)  TX bytes:1503135941 (1.3 GiB)
              Interrupt:219 Base address:0xe000

    #ifconfig eth0:1 AAA.BBB.CCC.DDE 255.255.255.0


    # cat /etc/network/interfaces
    Цитировать
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).

    # The loopback network interface
    auto lo
    iface lo inet loopback

    # The primary network interface
    allow-hotplug eth0
    auto eth0
    iface eth0 inet static
    address AAA.BBB.CCC.DDD
    network AAA.BBB.CCC.0
    netmask 255.255.255.0
    broadcast 255.255.255.255
    gateway AAA.BBB.CCC.1
    добавляю строки

    Цитировать
    auto eth0:1
    iface eth0:1 inet static
    address AAA.BBB.CCC.DDE
    network AAA.BBB.CCC.0
    netmask 255.255.255.0
    broadcast 255.255.255.255
    gateway AAA.BBB.CCC.1
    Это на будущее.

    Поднимаю alias

    #ifconfig eth0:1 up


    Правильно???
  • Направления программирования :: Drivers
  •        У меня есть вопросы по UNIОРС - может посоветуете как выкрутится...
    Вопрос состоит в том чтобы сделать драйвер для устройства RS232 (Контроллер WE2108) .
    Есть пример но в нем не ясно ОРС берет функции передачи в порт на себя или нужно все формировать :confused:.
     Коротко драйвера еще не делал.
     Все очень туго...
     И еще придется потом расширяться до 11 устройств (конвертеры в RS485) :shock:
     
     - Помогите пожалуйста  :yes:

  • Решаю всю ту же проблему, что была обозначена в конце темы http://forum.shelek.ru/index.php/topic,24622.0.html. А именно, мой USB-девайс при работе с драйвером, созданным в DS 3.2 пропускает данные на медленных машинах (PIV) и не пропускает данные на машине Core 2 Duo, при условии, если не запущены приложения, требующие значительных ресурсов (Opera). Отсюда сделал вывод, что пропуски могут проходить на уровне драйвера. Девайс работает следующим образом: подготовив данные для передачи по USB (заполнив FIFO UDP-модуля контроллера, отвечающего за работу с USB), ставит флаг готовности для передачи пакета данных размером 60 байт по USB. Далее ожидает, пока придет запрос от Хоста и уже после этого начинает передачу данных. Запросы формирует драйвер, который в свою очередь принимает их от приложения. Если я правильно понял, то в медленных или загруженных другими приложениями эти запросы могут задерживаться и в случае маленького буфера для запросов - теряться. Таким образом, какой смысл делать большой буфер для принимаемых драйвером от девайса данных, если при этом запросы на считывание этих данных приложением будут поступать с той же  частотой или реже?
    Что вы посоветуете для решения подобной проблемы?
    Заранее благодарен!
  • Есть задача определить по имени процесса его ProсessID (конкретно для csrss.exe), как я понимаю, нужно получить список всех процессов в системе и уже там искать. Вроде как должно быть всё просто, но для ядра не нашёл функций вроде NtQuerySystemInformation(). Может кто подскажет?
  • Здравствуйте, уважаемые.
    Столкнулся я с проблемой, и никак не могу её победить (а сроки поджимают).
    Суть проблемы такова: необходимо мне производить некоторое простейшее действие с периодом от миллисекунды (или даже 0,5мсек) до десятков миллисекунд. Под Win.
    В User mode я почти этого добился, пользуясь Sleep(0) и PreformanceCounter'ом.
    Но на одноядерных машинах система временами (обновление экрана, например) напрочь сбивала мне все тайминги и отъедала просто непреличные куски времени.
    Умные люди посоветовали пересмотреть всю концепцию разработки, или, на крайний случай, перекинуть кусок программы в Kernel mode.
    А вопрос, собственно, такой: чем и как мне можно тактовать время с такой частотой?
    Период, если это важно, изменяется каждый такт, но можно, впринципе, менять и с меньшей частотой. Главное чтобы резких скачков между вызовами процедуры не было.
  • Всем привет.

    У меня есть устройство — ПЛИС (Xilinx® Spartan-6 FPGA SP605).
    Нужно реализовать для него драйвер, работающий в режиме Bus Master DMA.
    Как это примерно сделать описано в xapp1052. Скачал архив для этого xapp1052, установил оттуда прошивку, поставил драйвер, dll-библиотеку и приложение для тестирования. Приложение работает, всё ок.
    Стал разбираться с реализацией драйвера и сразу возникло много вопросов..
    В драйвере практически нет стандартных DMA-функций типа WdfDma* 
    В частности, нет функции для определения профиля DMA-устройства (WdfDmaProfile*), нет функций для работы с DMA-транзакциями (WdfDmaTransaction*) и многих других, казалось бы, необходимых функций.

    Вопрос для тех, кто возможно работал с этим xapp, как всё-таки реализован DMA в этом драйвере?
    Вопрос ко всем остальным, как может быть организован DMA без этих функций?

    С уважением,
    Сергей
  • Направления программирования :: Сети
  • Доброго все дня!
    Создал 2 виртуальные машины: Server1, Core1.
    На Server1:
      Установил W Server 2008 (Полная установка). Указал IP-адресс, Маска подсети, адрес DNS-сервера.
    На Core1:
      Установил W Server 2008 (Установка ядра сервера). При первом входе щелкаю "другой пользователь", указываю имя администратора и пустой пароль. Сразу предлагается мне сменить пароль, что я и делал.Нажимаю Ввод.
    Возникает Ошибка:  "Не удалось получить данные о конфигурации от конкретного домена.Либо он отключен, либо к нему нет доступа"
  • День добрый. Занимаюсь реализацией PPP и TCPIP стека поверх него. Возник такой вопрос, стандартная последовательность установления соединения через PPP (у меня реализованы только LCP,PAP,IPCP) - 1. LCP обменивается параметрами и договаривается о них 2. PAP/CHAP производит аутентификацию. 3. IPCP устанавливает параметры IP уровня 4. можно гонять IP пакеты. Я на GPRS модеме (Мегафон) и успешно дохожу до 4-ой стадии, обмениваюсь интернет траффиком, однако иногда в разгар мне приходит LCP configure request - не знаю отчего так происходит, толи связь рвется или удаленная сторона решает что-то поменять. По идее, если глянуть rfc1661, LCP выходит из состояния OPENED и происходит вся вышеописанная последовательность установления соединения, включая этапы PAP и IPCP, однако на этапе PAP я получаю облом - удаленная сторона не хочет мне отвечать, похоже вообще не ожидает того, что я все буду снова настраивать. Может кто сталкивался с этим и сможет подсказать отчего так происходит? может я не правильно понял диаграмму 3.2 из rfc1661?
  • Направления программирования :: Web
  • не знаю в какой раздел писать, так что пишу сюда. Суть проблемы:

    вот данные

    Код:
    <?xml version="1.0" encoding="utf-8" ?>
    <article>
      <paragraph header="Заголовок">
        НАЧАЛО ПАРАГРАФ1
        <section>
          СЕКЦИЯ 1
        </section>
        <section>
          НАЧАЛО СЕКЦИИ2:
          <list>
            НАЧАЛО ЛИСТА
            <item>НАЧАЛО ИТЕМА<ref url="page1.aspx" text="text1"/>КОНЕЦ ИТЕМА</item>
            <item><ref url="page2.aspx" text="text2"/> и</item>
            КОНЕЦ ЛИСТА
          </list>
          КОНЕЦ СЕКЦИИ2
        </section>
        КОНЕЦ ПАРАГРАФ1
      </paragraph>
    </article>

    вот таблица стилей

    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="html" omit-xml-declaration="yes"/>

      <xsl:template match="/">
        <xsl:apply-templates/>
      </xsl:template>
      
      <xsl:template match="paragraph">
        <div class="articleParagraph">
          <h2>
            <xsl:value-of select="@header"/>
            <xsl:value-of select="text()"/>
          </h2>
          <xsl:apply-templates/>
        </div>
      </xsl:template>

      <xsl:template match="paragraph/section">
        <div>
          <div>
            <b>
            <xsl:value-of select="text()"/>
            </b>
          </div>
          <xsl:apply-templates/>
        </div>
      </xsl:template>

      <xsl:template match="list">
        <ul>
          <xsl:apply-templates/>
        </ul>
      </xsl:template>

      <xsl:template match="list/item">
        <li>
          <xsl:apply-templates/>
        </li>
      </xsl:template>

      <xsl:template match="ref">
        <a href="#">
          <xsl:value-of select="@text"/>
        </a>
      </xsl:template>

    </xsl:stylesheet>
    при этом происходит задваивание текста, как от этого избавиться? Дело в том что при использовании apply-template происходит полная передача управления специфицирующим шаблонам (даже если я вызвал text()) и при этом отрабатывает стандартный обработчик текстового узла (копирует падла содержимое в выходной документ, что мне НЕ нужно)
  • Направления программирования :: Web :: Серверные скрипты
  • Есть код, генеримый чрезмерно умной CMS (1С-Битрикс).
    В нём есть некоторые http-заголовки, отправляемые командой header(), которые надо бы убрать, не отправлять.
    Есть возможность добавить свой код перед тем чрезмерно умным, который отправляет ненужные заголовки.
    Нет возможности просто вычистить ненужную команду header().
    ob_start и иже с ним не помогают, они буферизуют как раз всё, кроме заголовков.

    И как быть?
  • Практические разделы :: Базы данных
  • MySQL 5.x
    Предусловие: есть таблица с, например, временем, залогированным пользователями.
    Нас интересуют 2 поля - дата и время.
    Задача: Необходимо выбрать сумму залогированного времени с группировкой по дням.
    В общем, задача решается запросом ниже, но если за какой-то день не было записей, то эта строчка будет пропущена.
    Хочется все равно иметь там 0 и дату.
    Условие: писать в таблицы нельзя, создавать таблицы нельзя. Права только на чтение.
    Код: (SQL)
    select format((ifnull(sum(wl.timeworked), 0) div 60)/60, 2) daylogged, date(wl.updated) ldate
    FROM worklog wl
    where wl.author='username' and wl.updated between '2010-08-21 00:00:00' and '2010-08-25 23:59:59'
    group by date(wl.updated)

    Можно сделать, конечно, несколько запросов и вычислять пропущенные даты на клиенте, но это не так красиво. Кто может подсказать?
    Понятие 'calendar tables' как оно показано тут, скорее всего, не подойдет, поскольку нельзя гарантировать, что даже в других таблицах есть диапазон индексов идущих подряд (чтоб использовать для фейковой таблицы и группировки по ним).
  • Есть таблица категорий, есть таблица статей

    Нужно выбрать 10 последний статей из каждой категории

    1.SELECT cat_name, cat_id FROM cat
    2. и потом в цикле делать
    SELECT * FROM article WHERE cat_id = $cat_id LIMIT 10

    задумался... А можно ли это в один запрос впихнуть?
    типа
    select article.*
    from article
    left join cat on article.cat_id=cat.cat_id
    order by cat_id

  • Практические разделы :: Программы
  • Я вот хочу найти программу дЛя раздваивания стрелки мыши. Ну вот не могу найти ее! Она воОбще существует или нет?
  • Практические разделы :: Безопасность PC
  • Вот роюсь, и не могу найти сабж для MS Essential и китаёзной Rising.

    Помогите/подскажите, мне очень срочно надо со всем этим разобраться  :mad:

    А вот для каспера и нода32 всё прямо в справке у них и написано было. Красота )
  • Привет, кто не спит.
    Запустил Нортон, глянул случайно, что он сканирует, а там "C:/FAUXIVIRUS/carny ride" мелькает. Нортон выдаёт - всё в порядке. Папку эту не найду ни Тоталом, ни ФАРом, ни поиском. Операционку (Windows ХР) поставил только сегодня, в Интернет кроме обновления Нортона не лазал. До обновления такого видно не было. Что делать?

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное