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

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


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 109.  13 февраля 2011 г.

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

Сегодня предлагаем вам к ознакомненнию фрагмент статьи «Обработка исключений на языке C».

Также предлагаем подборку тем форума.


Приятного чтения!




Язык C сегодня — довольно неоднозначное явление. Ему уже около 40 лет, а он до сих пор в строю. Второго такого долгожителя вряд ли сыщешь — даже Fortran-IV сдал позиции. Этот язык стал родоначальником множества других, включая столь популярные сегодня C++, Java и C#, по при этом не торопится на пенсию — хотя потомки изрядно его потеснили, но так и не вытеснили полностью.

Конечно, язык, основы которого закладывались еще в конце 1960-х годов, не может быть безупречным по сегодняшним меркам. Хотя он и развивался все это время, о чем свидетельствует последовательность стандартов языка, но в узких рамках совместимости с предыдущими версиями (не забываем, что главный конек C — это совместимость и переносимость), то есть умеренно. Поэтому у него до сих пор есть ряд очевидных слабостей, которые приходится преодолевать программистам.

Сегодня использование C можно было бы рассматривать как архаизм, если бы не одна ниша, в которой ему просто нет равных — программирование микропроцессоров. Сочетание машинной независимости с гибкостью непосредственной работы с аппаратными ресурсами и эффективностью объектного кода делают его незаменимым инструментом разработки firmware, а недостатки преодолеваются различными трюками. Один из таких трюков мы рассмотрели подробно в статье «Сопрограммы в языке программирования C», а сегодня познакомимся поближе с другим.

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

Прямо скажем, «чистый» C — плохой помощник разработчику по части обработки ошибок. В самом языке для этого нет никаких средств, а в стандартных библиотеках нет единодушия по вопросу, каким образом функция должна сообщать клиенту об ошибках при выполнении. Иногда функция возвращает код завершения, он же код ошибки, если имеет ненулевое значение; в других случаях часть диапазона значений функций выделена под коды ошибки; и апофеоз — errno.

Тут впору вспомнить Дейкстру: «...когда я начинаю анализировать свои собственные мыслительные привычки и привычки моих друзей, я прихожу, нравится мне это или нет, к совершенно иному заключению, а именно: инструменты, которые мы пытаемся использовать, и язык и обозначения, которые мы используем для выражения или записи наших мыслей, являются основным фактором, который определяет, о чем мы вообще можем мыслить и что можем выразить! Анализ влияния, которое язык программирования оказывает на своих пользователей, и признание факта, что к настоящему времени мощь нашего мозга является наиболее скудным ресурсом, совместно дают нам новый набор эталонов для сравнения относительных достоинств различных языков программирования» (из статьи «Смиренный программист»). Язык C — не исключение: вызвав потенциально чреватую ошибками функцию, следует проверить код ее завершения (или errno) и запрограммировать действия в случае ошибки; поскольку эти действия сами могут вызвать ошибку, их результат также следует проверить, и... В результате корректная программа оказывается загроможденной кодом обработки ошибок. Менее прилежные программисты, утомившись, просто бросают это дело, и результат в виде вылетов программы, неожиданных результатов и прочих сюрпризов не заставляет себя ждать.

Наследники C, учитывая отрицательный опыт родителя, обзавелись средствами, позволяющими облегчить жизнь программиста при обработке ошибок. В C++ появились исключения, пусть и не слишком изящные, затем в Java и C# эта концепция была доведена до практически приемлемого уровня. Применение механизма исключений позволяет писать код, который решает свою задачу, а в случае, когда продолжение работы невозможно, выбрасывает исключение. В подходящем месте программы размещается перехватчик исключений, который предпринимает соответствующие действия. Структура программы улучшается, т.к. обработка ошибок производится не в том месте, где они возникают, а в том, где это наиболее целесообразно.

К счастью, C располагает ценным средством для компенсации своих многочисленных недостатков и слабостей — препроцессором. Инструмент этот довольно опасен, но при умелом использовании дает замечательные результаты. Сегодня мы рассмотрим одно из таких успешных применений макросов — реализацию механизма исключений на языке ANSI C. А для этого мы попробуем решить очень простую, но весьма типичную задачу.

...


Целиком можно прочитать у нас на сайте.

  • Программирование :: Общий
  • Хотелось бы услышать советы насчёт вот такого вопроса

    Мне через некоторое время предстоит делать программу удалённого администрирования (простенький вариант TeamView или RAdmin) , и хочу заранее разузнать в общем виде, возможно ли на Qt кроссплатформенно организовать основных "китов"

    1) работа с MySQL
    2 управление мышью из программы без участия реальной мыши
    3) то же самое для клавы

    Если что-то из этого не реализуется кроссплатформенно, то мне придётся выбрать MFC+WinAPI (разработка всё равно сейчас предполагается чисто под винду)
  • привет!
    Имеется HP Proliant ML150 G3. Создал на нем raid 0 массив. Для того чтобы был виден этот массив при установке windows server 2003, провел интеграцию raid драйвера в ОС с помощью программы Windows Unattended CD Creator.  Установка Windows прошла нормально, массив из 2 жестких дисков он увидел. Как мы знаем, всегда после установки идет перезагрузка системы, и вот  windows server 2003 r2 начинает грузиться, одна или две точки пробежали и все, мелькнул синий экран и снова перезагрука. В чем может быть причина?

    дрйвера на raid брал вот этот HP Embedded SATA RAID Controller Driver for Windows 2000/Windows Server 2003  . С официального сайта HP.

    Подскажите пожалуйста что нужно сделать чтобы система грузилась. В биосе стоит: raid-enabled.
  • Пишу записку для диплома, подошел к архитектуре ПО.

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

    А щас до меня доходит, что слои уровня "Сервисы" в общем-то могут быть разнесены, да и вообще могут выступать как промежуточные уровни. Значит ли это, что данную структуру нельзя назвать трехзвенной?

    (http://forum.shelek.ru/index.php?action=dlattach;topic=26462.0;attach=5690)
    Цитировать
    На рисунке 4.1.1 представлена архитектура проектируемого приложения на высоком уровне, четко разделяющая ответственности (выявленные на этапе анализа задачи) между следующими компонентами:
    ∙   слой доступа к данным - занимается только получением данных из БД, преобразованием в структуры данных, использующиеся в логике и службах, а также обновлением данных в БД;
    ∙   слой логики сайта - взаимодействует со слоем доступа к данным, обрабатывает запросы;
    ∙   WCF службы - обрабатывают запросы Silverlight-приложения, взаимодействуя со слоем доступа к данным;
    ∙   silverlight-приложение – предоставляет пользователю картографическую и атрибутивную информацию о ресурсе с помощью REST API и SOAP API сервера ArcGIS Server.
  • Программирование :: Общий :: Алгоритмы и математические задачи.
  • Здравствуйте! Передо мной стоит задача, которая сводится к взаимному выравниванию между собой прямоугольников на плоскости. Что то наподобие верстки газетных колонок. Исходное расположение задано, необходимо исправить мелкие пересечения, подогнать размеры сходных элементов и провести выравнивание.
    Вот некоторые примеры для более ясного понимания задачи (то, что должно получиться):

    (http://forum.shelek.ru/index.php?action=dlattach;topic=26443.0;attach=5646)
    Произошло взаимное выравнивание между элементами.

    (http://forum.shelek.ru/index.php?action=dlattach;topic=26443.0;attach=5648)
    Здесь показано приведение размера подобных элементов (красный с зеленым) и последующее выравнивание.

    (http://forum.shelek.ru/index.php?action=dlattach;topic=26443.0;attach=5650)
    В этом случае четыре квадрата подравниваются относительно друг друга и равномерно распределяются по ширине.

    (http://forum.shelek.ru/index.php?action=dlattach;topic=26443.0;attach=5652)
    Так же следует учитывать, что при нахождении одних элементов над другими они являются взаимосвязанными, т.е. приведение размеров, выравнивание и избавление от мелких нахлестов происходит между зелеными, а затем уже весь большой синий блок с зелеными внутри принимает участие в общей картине с другими синими блоками.

    (http://forum.shelek.ru/index.php?action=dlattach;topic=26443.0;attach=5654)
    Такое же как и первое, но более сложное.

    Уже долгое время пытаюсь решить данную задачу, придумал и реализовал несколько разных подходов, однако в каждом из них есть недочеты, нет универсальности, а сроки поджимают. У меня уже все мысли закончились, хожу изо дня в день по кругу не приближаясь к результату.
    Возможно кто то сталкивался с чем то подобным или «видит» решение? К какому общему типу задач ближе всего эта, возможно я плохо искал и что то уже реализовано? Спасибо!
  • Программирование :: Технологии разработки программных систем
  • День добрый! Вот набрел на такое понятие как lock-free синхронизация. Суть объяснена например здесь: http://developer.amd.com/documentation/articles/pages/125200689.aspx http://www.audiomulch.com/~rossb/code/lockfree/ Меня весьма заинтересовал этот вопрос, поскольку по роду деятельности тоже приходится часто разрабатывать хитрозамученные многопоточные проекты, причем синхронизация и масштабируемость (в случае, если используется целый пул потоков, с числом потоков меняющегося в динамике) доставляет прилично головной боли. В сквязи с этим интересно есть ли у кого опыт использования такого рода синхронизации, а особенно lock-free структур, и каковы результаты.
    ЗЫ Интересно, что в ядрах 2.6 линукса используется так называемый RCU механизм, по сути один из приемов lock-free синхронизации
  • Программирование :: .NET технология от и до
  • Всем доброго времени суток.

    Только начал изучать С#. Столкнулся со следующей задачей: необходимо сохранить объекты (прямоугольники, эллипсы, линии), содержащиеся в Canvas в .xml файл. Например, как это сделано в этой программе: http://www.codeproject.com/KB/WPF/WPF_DrawTools.aspx

    Может у кого-то есть простенькие примеры. Буду очень признателен любой помощи.

    ---
    С уважением, Сергей.
  • Всем привет.
    Объясните, пожалуйста. Почему нельзя произвести присвоение в пользовательской коллекции так само как в пользовательском массиве и как это сделать правильно.
    Код:
    using System;
    using System.Collections;
    class Inventory
    {
        public string name;
        double cost;
        int onhand;
        public Inventory(string n, double c, int h)
        {
            name = n;
            cost = c;
            onhand = h;
        }
        public override string ToString()
        {
            return
            String.Format("{0,-10}Стоимость: {1,7:C} Наличие: {2}", name, cost, onhand);
        }
    }
    class InventoryList
    {
        static void Main()
        {
            ArrayList inv = new ArrayList();
            // Добавить элементы в список,
            inv.Add(new Inventory("Кусачки", 5.95, 3));
            inv.Add(new Inventory("Отвертки", 8.29, 2));
            inv.Add(new Inventory("Молотки", 3.50, 4));
            inv.Add(new Inventory("Дрели", 19.88, 8));
            Console.WriteLine("Перечень товарных запасов:");
            foreach (Inventory i in inv)
            {
                Console.WriteLine(" " + i);
            }
            Inventory[] dfdf = new Inventory[4];
            dfdf[0] = new Inventory("Кусачки", 5.95, 3);
            dfdf[1] = new Inventory("Отвертки", 8.29, 2);
            dfdf[2] = new Inventory("Молотки", 3.50, 4);
            dfdf[3] = new Inventory("Дрели", 19.88, 8);
            Console.WriteLine();
            foreach (Inventory i in dfdf)
            {
                Console.WriteLine(" " + i);
            }


            dfdf[2].name = "Лом";
            inv[2].name = "Лом"; // Ошибка


            Console.WriteLine();
            foreach (Inventory i in dfdf)
            {
                Console.WriteLine(" " + i);
            }
        }
    }
  • В инете я нашел много всего на эту тему, но всё рядом, а хотелось бы получить простой ответ: есть нужная мне возможность или нет.
    Если есть, то Какая? Если нет, то может существует какой-нибудь трик?

    Частная проблема:
    Есть функция, которая вызывается во множестве мест. Эта фунция используется в качестве "строительных лесов" и нужна только на этапе отладки.  Она обеспечивает управляемую отладочную печать, управляемые брекпоинты и т.п.

    Ранее в С++ было так.
    Код:
    #define FFNEED

    #ifdef FFNEED
    #define FF(parameters...) ff(parameters...)
    #else
    #define FF(parameters...)
    #endif

    Комментируя #define FFNEED, я отключал эту функцию во всем модуле.

    Есть ли похожая возможность в C#?

    Спасибо.


  • Добрай день!
    В С# я начинающий.
    В данный момент мы работаем над новой реализацией большого проекта на С++.
    Модуль, с которым работаю я, работает с большим количеством мелких объектов, постоянно порождая у уничтожая их.
    Оптимизируя старый проект, я заменил многочисленные new и delete на стек пулов памяти, что значительно увеличило производительность.

    В связи с этим вопрос:
    Есть ли смысл приминять в С# этот хорошо известный прием управления памятью?
    Возможно есть другие подходы?
    Или GC сам эффективно работает с сотнями тысяч (иногда миллионами) небольших объектов?

    Спасибо.
  • Программирование :: .NET технология от и до :: WinForms
  • подскажите как сделать чтобы  messagebox отображался посередине формы???
  • Программирование :: .NET технология от и до :: ASP.NET
  • Ребята, помогите, пожалуйста, разобраться с кэшированием данных.

    У меня есть метод который считывает из базы одну таблицу:
    Код:

            public static List<Dish> Read_Dish() //выборка всех блюд из базы и сортировка по категории
            {
                List<Dish> dish = new List<Dish>();
             
                using (DataClasses_RestaurantDataContext dc = new DataClasses_RestaurantDataContext())
                {
                    dish = dc.Dishes.OrderBy(d => d.Category).ToList();
                }
                return dish;
            }

    результат помещаю и список:
    Код:
     List<Dish> _dish = Read_Dish();

    и вот теперь мне нужно этот список поместить в кэш, так чтобы при любом изменении в таблице обновлялся кэш... 

    понимаю, что нужно как-то прикрутить сюда CacheDependency, но никак не могу с ним договориться... =((
    если указать путь к файлу базы, тогда как указать нужную таблицу?..

  • Ребят, подскажите, пожалуйста, можно ли у элемента календарь как-то отключить autopostback?
  • Программирование :: С/С++
  • Доброго Дня ........ Есть такое задание написать программу которая бы обрабатывала изображение при помощи Boxcar operator ....формул у него нет есть только матрица ......... можно ли сделать так чтобы матрица применялась на изображение и обрабатывала его и как это записать ????

    Матрица:


    (http://s47.radikal.ru/i117/1102/d8/c2f776f9119b.jpg)
                               

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



    Добавлено через 10 минут и 58 секунд:
    Вот начало программы .... нарисовал рисунок .....а как на него применить матрицу не знаю ....

    Код:
    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include<math.h>
    void main()
    {
       /* request auto detection */
       int gdriver = DETECT, gmode, errorcode;
        int x,y;
        float g1,g2,g;
       /* initialize graphics and local
          variables */
       initgraph(&gdriver, &gmode, "");
       /* read result of initialization */
       errorcode = graphresult();
       if (errorcode != grOk)  /* an error
           occurred */
       {
          printf("Graphics error: %s\n", grapherrormsg(errorcode));
          printf("Press any key to halt:");
          getch();
          exit(1); /* terminate with an error
      code */
       }
    setfillstyle(1,3); bar(4,4,68,68);
    setfillstyle(1,getmaxcolor()); bar(6,6,66,66);
    setfillstyle(1,4);
    fillellipse(30,14,8,8); fillellipse(30,40,8,8);
    fillellipse(42,33,8,8); fillellipse(42,22,8,8);
    fillellipse(18,22,8,8); fillellipse(18,33,8,8);
    setfillstyle(9,6);
    fillellipse(30,27,7,7);
    setcolor(2);
    line(40,40,47,66);line(39,43,47,66);
    line(36,47,47,66);line(36,47,46,60);
    line(49,48,46,66);line(49,48,45,60);
  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Необходимо программно устанавливать соединение с интернетом. Какие методы за это отвечают? Будут ли они различны для XP, Vista, Win 7?

    ЗЫ: вообще-то требуется на C#, но думаю, PInvoke получится к WinAPI функциям достучаться.
  • Я за помощью))

    Помогите разобраться, как в Visual Studio задается порядок, в котором элементы отображаются на форме. Буду рада ссылочке на информацию в MSDN, так как честно говоря, не знаю как правильно там искать то, что мне сейчас нужно нужно  :shuffle:

    Дело в том, что у меня есть форма, на форме картинка (элемент Picture Control), а поверх картинки должны отображаться Edit'ы, Slider'ы, Static Text и т.п.
    По факту получается, что либо картинка загораживает все элементы (отображается поверх), либо частично закрывает....
  • Всем доброго времени суток  :)

    Обновляю программу, чтобы она кроме работы по Ethernet умела общаться через COM.

    --- подключаемся к COM, функция выполняется, hCOM присваивается хендлер не равный INVALID_HANDLE_VALUE
    Код:
    int COMport::Connect()
    {
    if (on_connected) Disconnect();

    hCOM = CreateFile(SelComPort,
    GENERIC_READ | GENERIC_WRITE,
    0, // ни с кем делить не будем
    NULL, // без секюрити
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED, //будем и писать, и читать
    NULL);

    if (hCOM == INVALID_HANDLE_VALUE)
    {
    on_connected = false;
    return -1;
    }

    else
    {
    on_connected = true;
    int set = SetupSettings();
    if (set == 0)
    {
    com_tread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&COMport::SetupThread, this, 0, NULL);  //запуск потока на чтение
    return 0;
    }
    else return -1;
    }
    }

    настройки порта
    Код:
    int COMport::SetupSettings()
    {
    BOOL bSuccess = GetCommState(hCOM,&dcb); // read current parametr from COM

    if (bSuccess)
    {
    dcb.DCBlength = sizeof(DCB);             // длина структурв DCB
    dcb.BaudRate = CBR_9600; // скорость передачи
    dcb.fBinary = TRUE;      // включаем двоичный режим, другой виндовс не поддерживает
    dcb.fOutxCtsFlow = FALSE;
    dcb.fOutxDsrFlow = FALSE;
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fDsrSensitivity = FALSE;
    dcb.fNull = TRUE;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    dcb.fAbortOnError = FALSE;
    dcb.ByteSize = 8;
    dcb.Parity = 0;
    dcb.StopBits = ONESTOPBIT;

    if(!SetCommState(hCOM,&dcb)) // применяем новые параметры для COM
    {
    Disconnect();
    }
    }
    else return -1;

    PurgeComm(hCOM, PURGE_RXCLEAR); // чистим входящий буфер
    PurgeComm(hCOM, PURGE_TXCLEAR); // чистим исходящий буфер

    // defines the time-out parameters for COM
    ct.ReadIntervalTimeout = 0;
    ct.ReadTotalTimeoutMultiplier = 0;
    ct.ReadTotalTimeoutConstant = 0;
    ct.WriteTotalTimeoutMultiplier = 0;
    ct.WriteTotalTimeoutConstant = 0;

    if (!SetCommTimeouts(hCOM,&ct))
    {
    Disconnect();
    }

    SetupComm(hCOM, buffer.N, buffer.N); // устанавливаем размер буферов чтения/записи

    return 0;
    }

    Пытаемся что-нить отправить в порт
    Код:
    int COMport::SendMessage(char *message, int message_lenght)
    {
    DWORD temp;
    COMSTAT comstat;

    ClearCommError(hCOM, &temp, &comstat);   //очищаем буфер ошибок

    if (!temp)
    {

    int ret = WriteFile(hCOM, message, message_lenght, &temp, &overlappedwr);

    if (ret == 0) //если запись не удалась
    {
    int err = GetLastError();   //получаем код ошибки
    TerminalCallback("Запись в COM не удалась", 23, NULL, RECEIVE_MESSAGE); //отправляем сообщение о том, что запись не удалась в лог
    return -1;
    }
    else
    {
    TerminalCallback("Сообщение отправлено в COM", 26, NULL, RECEIVE_MESSAGE); //отправляем в лог сообщение об удачном завершении операции записи
    return 0;
    }
    }

    }

    Так вот операция записи возвращает 0, то есть неудача.
    GetLastError() возвращает 6, то есть Invalid handler
    НО при создании хендлера hCOM все проходит на ура... параметры успешно применяются.
    В чем может быть проблема?

    Еще при закрытии данного хэндлера, возвращается S_FAILE, то есть с ним действительно что-то не так  :dontknow: При попытке повторно закрыть, генерируется исключение, пишет, что хендлера нет.

    Добавлено через 1 час, 28 минут и 13 секунд:
    Продолжаю пытать программулину....

    Что-то толкает меня к мысли что я неправильно понимаю как нужно использовать перекрываемые операции и все дело в них.

    Удаляю Комментарю все упонимания overlapped в программе, то есть дескриптор порта открываю как:

    Код:
     hCOM = CreateFile(SelComPort, 
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    NULL,
    NULL);

    соответственно, функции чтения и записи, как

    WriteFile(hCOM, message, message_lenght, &temp, NULL);

    и

    ReadFile(pth->hCOM, pth->buffer.MString, btr, &temp, NULL);

    вместо адреса структуры overlapped ставлю NULL и вуаля, программа работает  :wow:

    теперь я совсем в ступоре, так как в моем понимании overlapped как раз таки и нужно использовать если чтение и запись используются одновременно  :-/
  • Программирование :: С/С++ :: Borland C/C++
  • А можно ли в c++ Builder 6 увидеть результат работы препроцессора, а также что-нибудь наподобие ассемблерного листинга?
    ЗЫ но мне главное препроцессор
  • Программирование :: Delphi
  • Доброго времени суток, Земляне.
    Затея состоит в том, чтобы определить, с какого com-порта пришел сигнал.
    Использую компонент comm32, создаю массив ком-портов (12 штук), присваиваю им номера, скорости и т.д., и стартую их. Процедура Comm32xReceiveData одна на всех, но в ней не передается номер порта. А хотелось бы. Итак, вопрос: как это лучше реализовать? Стоит ли пытаться добавить номер порта в процедуру OnReceiveData или есть другие пути? Писать 12 процедур для массива ведь не единственное решение?
  • Программирование :: VisualBasic
  • Нужно написать консольное приложение на VB6. Оно будет периодически запускаться планировщиком.
    Выбор инструмента таков из-за использования DCOM-компонентов - для VB это родной дом. Только вот не уверен, что с VB6 можно сделать консольное приложение. Подходит VBS, но как его отлаживать в VS? Написать на VB6 и потом конвертировать в VBS? С VB.NET не работал ни разу.

    Помогите сделать выбор!

    И еще вопрос: в чем отличие VB6 от VBS?
  • Как проверить орфографию в Ворде при помощи ВБА, примеры в сети видел, но они ограничиваются выводом формы Ворда "Правописание" с приглашением проверить орфографию. Одним словом есть переменная А="орфаграфия", как при помощи ВБА узнать не прибегая ни к каким формам, если бы это слово было "орфаграфия" было бы напечатано в документе Ворда, оно бы было подчёркнуто волнистой линией, если да то какой, красной или зелёной, ну и уж для полного счаться:
    если оно было бы подчёркнуто зелёной линией, то какое сообщение "приготовил" Ворд
    если оно было бы подчёркнуто красной линией,, какие варианты замены этого слова "приготовил" Ворд
    Спасибо
  • Программирование :: Java
  •   Нужно сделать break только тогда, когда isX() вернет true
      А сейчас после thread.start() - выход.
    switch (key) {
    case value:
       final Runnable r = new Runnable() {
           public void run() {
              while(!isX()) {
               try {
                          Thread.sleep(10000);
                  } catch (InterruptedException ex) {
               }
              }
              }
       };
       Thread thread = new Thread(r);
       thread.start();

       break;
  • Программирование :: Perl
  • Подскажите пожалуйста, есть строки
    • 109.124.114.0 - 109.124.114.255
      109.124.115.0 - 109.124.115.255
      109.124.116.96 - 109.124.116.111

    в которых требуется заменить число от одного символа до двух на число 100, никак не могу регулярку составить, подскажите, пожалуйста... Пробовал так вот
    Код: (perl)
     $test =~ s/\d{1,2}/100/g
    , но не катит что то :(
  • Просматривала темы форума и наткнулась на то, что мне как раз нужно, на код уважаемого RXL
    Код: (perl)
    #!/usr/bin/perl -W

    use strict;

    sub ip_to_n($)
    {
      my ($ip_s) = @_;
      my $ip_n = 0;

      for my $part (split(/\./, $ip_s))
      {
        $ip_n <<= 8;
        $ip_n += $part;
      }

      return $ip_n;
    }

    sub n_to_ip($)
    {
      my ($ip_n) = @_;

      return (($ip_n >> 24) & 0xff) . '.' . (($ip_n >> 16) & 0xff) . '.' . (($ip_n >> 8) & 0xff) . '.' . ($ip_n & 0xff);
    }

    sub get_rand_ip($$)
    {
      my ($ip_from, $ip_to) = @_;
      my $ip_n;

      $ip_from = ip_to_n($ip_from);
      $ip_to = ip_to_n($ip_to);
      $ip_n = rand($ip_to - $ip_from + 1) + $ip_from;

      return n_to_ip($ip_n);
    }

    my $ip = get_rand_ip('95.24.0.0', '95.31.255.255');

    print "Random IP: $ip\n";
    Очень прошу, подмогните, как сдлеоать так, чтобы не вручную мучать скрипт, вводя диапазоны, а брать их из файла, рандомно... Т.е, брать диапазоны из файла, в котором они лежат в виде
    • 80.251.133.68 - 80.251.133.71
    • 80.251.133.172 - 80.251.133.175
    Кое чего я сама допетрила, это как считать все в массив и как рандомно из него выбирать, но дальше никак, что то :dontknow:
    Код: (perl)
    open(M,"< files.txt") or die "Openning file: " . $!;
    files=<M>;
    chomp(@files);
    close(M);

    my $files = $files[rand(scalar(@files))]; # правильно ли???
  •  :)Приветствую всех... Возникла вот какая задача: на перле осуществляется генерация набора символов русского и английского алфавита и набора цифр, к примеру так
    Код:
    $1 = 'aswdeffdffdf' ;
    $2 = 'ыфвываава' ;
    $3 = '1247842' ;
    Непонятно вот, что, как мне рандомно выводить любую переменную из этих трёх, иными словами, исходная переменная должна быть равно любой из этих переменных? Может у кого возникнут непонятки относительно смысла такого занятия, а смысл вот в чем, в каждой переменной храниться собственная сгенерированная комбинация, вот мне и надо рандомно выводить эту комбинацию, т.е., выбирать от $1 до $3. Заранее спасибо за любую подсказку... :)
  • Программирование :: Программирование 1С
  • Помогите. При формировании печатной формы НДФЛ-2,  не все месяца отображаютс в форме. В НДФЛ-1 все правильно. 1с ПРедприятие. 8, Бухгалтерия1.6
  • Программирование :: Программирование 1С :: 1С 7.x
  • при попытке запустить код, всё отрабатывает, выводит документы в таблицу. когда пробую открыть документы по расшифровке(ДокумТемп#), то получаю предупреждение "поле агрегатного объекта не обнаружено(код):11". нажимаю на ОК - предупреждение выдаётся заново, 1Ска закрывается только через диспетчер задач, сбивая индексы.


    Процедура ОбработкаЯчейкиТаблицы(ЗначМ,Флаг,Табл,Адрес) 
    Зап_=СоздатьОбъект("Запрос");
       КДата      = КонМесяца(КонДата); 
       НДата      = НачМесяца(НачДата);
       ДН         = Дата(0);
       ДК         = ТекущаяДата();
       
       Строка_   = Число(Сред(Адрес, 2, Найти(Адрес,"C")-1));     
       Колонка_ = Число(Прав(Адрес, СтрДлина(Адрес) - Найти(Адрес, "C")));     


       ТЗапроса =
       "//{{ЗАПРОС(Сформировать)
       |                         
       |Док                  = Документ.ПриказОбУвольнении.ТекущийДокумент;   
       |Катег               = Документ.ПриказОбУвольнении.Сотрудник.Должность.Категория;   
       |Подр               = Документ.ПриказОбУвольнении.Сотрудник.Подразделение.Раздел;
       |Основание            = Документ.ПриказОбУвольнении.ОснованиеУвольнения;
       |Сотр                                 = Документ.ПриказОбУвольнении.Сотрудник;               
       |ДатаУв               = Документ.ПриказОбУвольнении.ДатаУвольнения;
       |Должн               = Документ.ПриказОбУвольнении.Сотрудник.Должность;
       |Функция СуммС         = Счётчик();
       |                                 
       |Условие( Сотр=Сотр.ОсновнойЭлемент );
       |Условие( глДокументФункционирует(Док)=1 );     
       |Условие(Основание.Код=ЗначМ.Код);
       |
       |Группировка    Док;
       |Группировка    Сотр без групп;
       |
       |"//}}ЗАПРОС
       ;
       
       Т1=ТЗапроса+"Период С ДН по ДК;Условие((ДатаУв<=КДата) и (ДатаУв>=НДата));Условие(Основание.Код<>""06"") ;" ;
            
       Если Зап_.Выполнить(Т1) = 0 Тогда
          Сообщить("Ошибка в запросе");
          Возврат;                   
       КонецЕсли;       

       
       ДокумТемп   = СоздатьОбъект("Документ"); 
       
       Таб3 = СоздатьОбъект("Таблица");
       Таб3.ИсходнаяТаблица("Таблица2"); 
       Таб3.Опции(0,0,0,0);
       Пока Зап_.Группировка(1)=1 Цикл
          Пока Зап_.Группировка(2)=1 Цикл 
             ДокумТемп.НайтиДокумент(Зап_.Док);
             Таб3.ВывестиСекцию("Строка");
          КонецЦикла;
       КонецЦикла; 
       Таб3.ТолькоПросмотр(1);
       Таб3.Показать();
                                  
    КонецПроцедуры     
  • Здравствуйте! У меня такая проблема: Конфигурация ЗиК, отчет по работающим-уволенным. Необходимо сделать выборку по уволенным сотрудникам по должности. Должность- периодический реквизит. У меня отображаются только те сотрудники, которые впоследствии опять устроились на работу, а остальные нет, не пойму, что не так. Подскажите, пожалуйста!
    Код:
    Процедура Сформировать()
       Н=0;
       Таб = СоздатьОбъект("Таблица");
       Таб.ИсходнаяТаблица("Таблица");
       Сотр=СоздатьОбъект("Справочник.Сотрудники");
       Сост=ПолучитьПустоеЗначение("Перечисление.СостояниеФизлица");
       Таб.ВывестиСекцию("Заголовок");
       Таб.ВывестиСекцию("Шапка");
          Запрос1 = СоздатьОбъект("Запрос");
          ТекстЗапроса1 =
          "//{{ЗАПРОС(Обучение)
          |Сотр = Документ.ПриказОбУвольнении.Сотрудник.ТекущийЭлемент;
          |Док = Документ.ПриказОбУвольнении.ТекущийДокумент;
          |ДатаДок = Документ.ПриказОбУвольнении.ДатаУвольнения; 
          |СостФЗ = Справочник.Сотрудники.СостояниеФизлица;
          |Должность = Документ.ПриказОбУвольнении.Сотрудник.Должность;   
          |Подразделение = Документ.ПриказОбУвольнении.Сотрудник.Подразделение;
          |Группировка Сотр без групп;
          |Условие ((ДатаДок>=НачДата) и (ДатаДок<=КонДата));
          |Условие (Должность в ВыбДол);
          |Условие (СостФЗ<>Сост);
          |"
          ; 
          Если Запрос1.Выполнить(ТекстЗапроса1) = 0 Тогда
             Возврат;
          КонецЕсли;
          Пока Запрос1.Группировка("Сотр") = 1 Цикл
             Сотр.ВыбратьЭлементы();
             Сотр.НайтиЭлемент(Запрос1.Сотр);
                ДатаДок=Запрос1.ДатаДок;
              дол = Сотр.Должность.Получить(ДатаДок);
                Если ПустоеЗначение(Сотр.ДокументУдЛичность)=0 Тогда
                СЗ = глРазложитьДокУдостоверяющийЛичность(Сотр.ДокументУдЛичность);
                   Серия= СЗ.ПолучитьЗначение(2);
                   Номер= СЗ.ПолучитьЗначение(3);
             Иначе
                Серия="";
                Номер="";
             КонецЕсли;
              если дол = выбдол тогда
             Н=Н+1;
             Таб.ВывестиСекцию("Ув");
              таб.показать ("список работающих/уволенных");
               Таб.ТолькоПросмотр(1);
       Таб.Опции(0,0,3,0);
             иначе      Таб.ВывестиСекцию("Сотр");
             конецесли;
  • Подскажите как быть в такой ситуации. Дата документа первое число месяца, приход - добавление строки в этот документ с реквизитом "ДатаПоступления", соответственно остатки хранятся на дату документа. Приход был каждый день, как определить какой остаток, например, на 10 число месяца если сейчас 20-е число.

    Задача следующая: При просмотре состава изделия по каждой детали состава показать Остаток на начало месяца и приход до выбранной даты.
  • Программирование :: Программирование 1С :: 1С 8.x
  • Добрый день. Я начинающий в этом деле и нужна такая помощь.
    Есть Регистр сведений Цены у которого измерение Номенклатура (СправочникСсылка.Номенклатура) и ресурс Цена (число).

    Также есть форма докумена Договор. В табличной части формы необходимо при изменении Номенклатуры(наименование) автоматически заполнить Цена. Для этого я использую такой код:

    Код:
    Процедура ДопЭлементыНаименованиеПриИзменении(Элемент)
    ТекСтрока = ЭлементыФормы.ДопЭлементы.ТекущиеДанные;
    ТекТовар = ТекСтрока.Наименование;
    ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(ТекТовар);
    ТекСтрока.Цена = ЦенаТовара;
    КонецПроцедуры

    Но нечего не происходит.  :dontknow:

    Платформа 8.0
  • Есть форма с реквизитом(перечисление) "Тип"

    как в процедуре:

    Код:
    &НаКлиенте
    Процедура ТипПриИзменении(Элемент)
    //
    КонецПроцедуры

    получить выбранное значение данного реквизита формы?
  • Как настроить обмен данными между сайтом и 1С:Управление торговлей?
    Основной задачей пока что является выгрузка каталога товаров из 1С в Битрикс в соответствии по категориям, или хотя бы чтобы не прибегать к выгрузке каталога, а потом импорта этого каталога(кароче одним действием как то надо это все сделать).
    Может у кого есть подробная инструкция?  :-/
  • Как сделать, чтобы пользователи с определёнными правами(например "Менеджер") не могли изменять документы заднего числа?
  • Добрый день всем!
    8.1 Создаю очет в СКД.
    Необходимо вывести результат запроса вместо пустых итогов по ресурсу?
  • Здравствуйте. Изучаю 1с программирование. Дали задание сделать аналогичный документ из УПП в Управлении финансами.
    Вот захожу в 1с, выбираю документ и при добавлении нового выходит такая ошибка
    {Документ.ЗаявкаНаРасходованиеСредств(30,15)}: Переменная не определена (УправлениеДопПравамиПользователей)
       ИначеЕсли Не <<?>>УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
    {Документ.ЗаявкаНаРасходованиеСредств(931,13)}: Переменная не определена (УправлениеДопПравамиПользователей)
                Если НЕ <<?>>УправлениеДопПравамиПользователей.РазрешеноПревышениеКонтролируемыхЗначенийПоБюджетам() Тогда
    {Документ.ЗаявкаНаРасходованиеСредств(1042,14)}: Переменная не определена (УправлениеДопПравамиПользователей)
                   Если НЕ <<?>>УправлениеДопПравамиПользователей.ПравоРазрешитьПревышениеСвободногоОстаткаДС() Тогда
    {Документ.ЗаявкаНаРасходованиеСредств(384,18)}: Переменная не определена (Бюджетирование)
                КурсСценария=<<?>>Бюджетирование.КурсВалютыПоСценарию(Сценарий.Валюта, ДатаНачала,Сценарий).Курс;
    {Документ.ЗаявкаНаРасходованиеСредств(385,23)}: Переменная не определена (Бюджетирование)
                КратностьСценария=<<?>>Бюджетирование.КурсВалютыПоСценарию(Сценарий.Валюта, ДатаНачала,Сценарий).Кратность;
    {Документ.ЗаявкаНаРасходованиеСредств(836,29)}: Переменная не определена (Бюджетирование)
             СтруктруаКурсаСценария = <<?>>Бюджетирование.КурсВалютыПоСценарию(Сценарий.Валюта, ДатаНачала,Сценарий);
    Подскажите как ее исправить ?
    Заранее спасибо!
  • Как в 8.2 создать роли с правами доступа?

    создал роль, выбрал 2 справочника, проставил им права на чтение и просмотр, но эта роль не появляется в списке ролей при добавлении нового пользователя  :-/
  • есть компании (полиграфии):

    ∙ Группа Компаний "PrintUP"
    ∙ Типография Эдванс Принт
    ∙ Издательский центр МГИУ
    ∙ Типография "Печатный Экспресс"
    ∙ Типография "Паблик Принт"
    ∙ Типогафия «Новости Югры»
    ∙ Копировальный центр «В печать»
    ∙ Издательский дом «Медиа Пресса»
    ∙ Репаблика

    у них есть настроенные на полиграфическое производство базы(процессы, затраты на процессы и т.д.)

    если вы знаете где взять или у вас есть, огромная просьба поделится
  • Добрый день, всем!
    У меня проблема глобального масштаба.
    Необходимо из конфигурации Управление строительной организации 1.2.27.3 из документа РасчетСтраховыхВзносов выгрузить данные в версию 1.2.32.2. Делаю обработкой ВыгрузкаИЗагрузкаДанныхXML. Данные выгружаются, но при загрузке выдает ошибку (извините точно не помню формулировку) что-то вроде "Данные не могут быть прочитаны из файла [путь к фалу] [26,14]", в коде посмотрел ошибка возникает при попытке "ПрочитатьXML". Ошибка после чтения второго параметра . Сделал правило обмена в конфигурации "Конвертация данных", которые применяю при выгрузке данных стандартной обработкой. При выгрузке выдает ошибку неверно указан параметр №2.
    Что не так ?
  • Добрый день всем !
    УПП 8.1
    Необходимо создать обработку, которая поставит запрет на редактирование,проведение документа (например "ЗаказыПокупателей") на указанный период.
    Запросом выбираю необходимые документы.
    Далее в цикле для каждого документа что необходимо делать ?
    Или как-то по другому можно?
  • Доброго всем дня !

    Дано: документ "Корректировка долга" .
    Необходимо получить все счета фактуры по каждому договору, т.е :

    1. По договору получить все документы, удовлетворяющие условию(те, которые выбирались при  кнопке "заполнить" в "коректировке долга").
    2. Если эти документы связаны со счетами-фактурами, то получить номер и дату счет-фактуры.
  • Подскажите материал(инструкцию) создания печатной формы документа(не внешней).
    Смотрел на примере перемещения товаров, вроде понятно, а вроде не очень.
    В перемещении есть макет, есть команда, есть обработка команды, но изменить не удается, хотелось бы найти материал, но выдает только внешние печатные формы.
  • Платформа 8.2.12.78. Конфигурация самопальная с нуля. Win2008R2x64 SQLServer2008
    Создаю роль, даю все права. Обновляю. Создаю пользователя, назначаю роль.
    Перезапускаюсь под вновь созданным пользователем. Создаю доп. роли и пользователей к ним.
    На следующий день АДМИН - больше не АДМИН. Изменения в конфигурацию не внести, выгрузить в файл тоже невозможно, добавить/удалить пользователей никак нельзя. На всё один ответ "недостаточно прав".
    Я чего-то не понимаю?
  • В документе поступление товаров и услуг при выборе при попытке проведения выдает ошибку мол "Запись не верна! Значение поля "Аналитика учета номенклатуры" не может быть пустым! (Регистр накопления: Себестоимость товаров; Номер строки1)"

    Выбираю основной склад, проведение проходит нормально. По другим складам выводить ошибку, описанную выше. (некоторые товары проходят и по другим складам)

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

    Просмотрел Регистр накопления, стоит галочка проверки на заполнение, убираю галочку, проводится нормально. Но я не считаю это решением проблемы.

    Где может настраиваться привязка номенклатуры к складу?
  • Программирование :: Общие проекты
  • http://forum.shelek.ru/index.php/topic,8479.msg125117.html#msg125117
    Здесь выкладываем свои идеи. Прошу быть серьёзным и не говорить зря.
    Преже чем говорить надо или не надо всё это затевать прошу прочитать правило №2 Правила.

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

    Прежде чем отвечать посмотрите: правила

    Запись желающих

    Хорошо бы если бы адинистрация сайта зафиксировала тему. Чтобы форумчане могли и в дальнейше выкладывать свои идеи. А потом, если захотим ещё что-нибудь сделать, будет возможность выбирать.


    Итак ПОЕХАЛИ.
  • Всем привет!
    Я работаю в типографии, занимаюсь препрессом (допечатная подготовка). Программирование - хобби, выучил с++, чтобы написать игрушку, написал, потом еще одну, а потом стал делать всякие маленькие программулинки, чтобы упростить свою работу (в основном - автоматизация всякой рутины, типа спусков сборных тиражей). И вот однажды ко мне подошла одна девчушка-менеджер и попросила написать для нее мастер заполнения технологических карт. С того дня и понеслось. Идея маленькой программки переросла в идею большой системы управления типографскими заказами, которая упростила бы оформление техкарт, освободила бы менеджеров-технологов и прочих от разнообразного софта (который они используют сейчас), позволила бы планировать заказы, а также отслеживать их продвижение по технологическим участкам.
    Проект сложный, но очень интересный.
    Работаю над этим проектом чуть меньше полугода. За это время определился с инструментарием (Eclipse и Qt), провел аналитику для отдельных модулей, выстроил схему системы и уже почти реализовал один из основных ее модулей (тот самый мастер оформления технологических карт). Тьму времени трачу на непосредственное общение с теми, для кого эта система, собственно, создается. Наблюдаю за их работой, терзаю вопросами, ну и т.д.
    Подобный проект можно было бы с успехом реализовать как коммерческий, но я - по определенным причинам и после очень долгих раздумий - остановился на open source. И буду очень рад, если найдутся те, кого заинтересует данный проект и кто захочет ко мне присоединиться.
    Сейчас я привожу в порядок наработанную за все это время документацию и доделываю модуль менеджера (с которого вся система, собственно, и начинается).
    В общем, если кого-то эта тема заинтересует и возникнут вопросы - задавайте.
  • Операционные системы :: Windows
  • Вот такой вопрос:

    пусть имеется контейнер, инкапсулированный в класс. Доступ к контейнеру производится через методы, в начале каждого метода локается критическая секция (так как предполагается многопоточное использование). Один поток обращается к контейнеру очень часто, второй - очень редко. Получается, что один поток часто впустую делает lock - может ли это сильно сказаться на производительности программы ?

    Добавлено через 3 минуты и 21 секунду:
    туплю, знаю же, что может. А что делать ?
  • Операционные системы :: Unix и другие :: Linux
  • Не знаю, как обстоят дела с mount --bind в других unxi-like, потому пишу в Linux.

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

    /a
    /b

    Монтируем mount --bind /a /b и получаем:

    /a
    /b (фактически /a)

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

    Как думаете, это не очень опасно? Да, для продакшн я бы поостерегся - только для тестов.
  • кто-нибудь знает как убрать из error логов апача referer?

    Например

    [console]
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $sth masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 139
    39., referer: http://bla-bla/cgi-bin/case//case.cgi/9df95f18b252ab520c379e81f3d7e42d/showdoc?order_id=10878&SEARCH=1&spec_order_id=
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable @rows masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 13
    942., referer: http://bla-bla/cgi-bin/case//case.cgi/9df95f18b252ab520c379e81f3d7e42d/showdoc?order_id=10878&SEARCH=1&spec_order_id=
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $cmd7 masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 13
    950., referer: http://bla-bla/cgi-bin/case//case.cgi/9df95f18b252ab520c379e81f3d7e42d/showdoc?order_id=10878&SEARCH=1&spec_order_id=
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $sth masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 139
    58., referer: http://bla-bla/cgi-bin/case//case.cgi/9df95f18b252ab520c379e81f3d7e42d/showdoc?order_id=10878&SEARCH=1&spec_order_id=
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable @rows masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 13
    961., referer: http://bla-bla/cgi-bin/case//case.cgi/9df95f18b252ab520c379e81f3d7e42d/showdoc?order_id=10878&SEARCH=1&spec_order_id=
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $sth masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 140
    08., referer: http://bla-bla/cgi-bin/case//case.cgi/9df95f18b252ab520c379e81f3d7e42d/showdoc?order_id=10878&SEARCH=1&spec_order_id=
    [/console]

    А хочется

    [console]
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $sth masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 139
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable @rows masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 13
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $cmd7 masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 13
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $sth masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 139
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable @rows masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 13
    [Wed Jan 19 14:20:25 2011] [error] [client 10.30.4.5] "my" variable $sth masks earlier declaration in same scope at /var/www/case/lib_new/Actions.pm line 140
    [/console]

    Я нашел формат логов, только для custom.

    Код:
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
  • Всем привет, есть сервер с 14 гигами памяти. Есть 3 запущеных апача и несколько "мало жрущих" процессов. Состояние памяти выглядит так.

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

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

    [console]
    [root@openvz-1 ~]# free
                 total       used       free     shared    buffers     cached
    Mem:      14327956   14121812     206144          0     414396   13000636
    -/+ buffers/cache:     706780   13621176
    Swap:     10241428        256   10241172
    [/console]

    Видно что вся память в кэше, но какого хрена используется свап? Я чего то не понимаю? Апачи очень часто занимаются перегонкой больших файлов, примерный размер от 5 до 20 метров. То есть пользователи с веб интерфейса прикрепляют файл и он попадает в бд. Возможно из-за этого? Может есть какой то механизм помечающий память как свободная, а не в кеше? А надо оно вообще? Меня просто очень смущает использование свапа при явной доступности памяти.
  • Операционные системы :: Embedded systems
  • Цитата: Dale
    Без всякого преувеличения книгу можно назвать уникальной. Шутка ли, автор учит объектному подходу к проектированию программ, которые впоследствии реализуются на языке C! В это невозможно поверить, пока сам не проследишь за каждым шагом фокуса и не убедишься, что все без обмана.
    Я учу :) У меня и вопрос на экзамене есть соответствующий. Но книжки не публиковал - это да, так что, наверно, уникальная.
  • Имеется микроконтроллер PIC10F202 (система команд PIC12) - малютка с шестью выводами. Ресурсов довольно мало: Flash на 512 командных слов, 24 регистра и встроенный генератор на 4 МГц.

    Задача следующая: имеется источник ШИМ-сигнала, необходимо определить его скважность по, предположим, 100-бальной шкале. Периодичность замеров - 20 мс. Частота ШИМ сигнала в пределах 1-16 кГц (тестируемый образец имеет 4 кГц).

    Я вижу два метода решения:

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

    2. Замером времени между фронтами сигнала для небольшого числа периодов (пусть будет 8) с последующим определением доли "активной" части сигнала. Дискретность замеров ограничена 5 мкс.

    Хочу оценить данные методы и понять, имеет ли второй метод преимущество над первым. Первый я уже реализовал и вполне им доволен, но чип полностью загружен большую часть 20 мс цикла, а мог бы заниматься в это время чем-нибудь другим.
  • Не секрет, что при всем изобилии книг по программированию подавляющее большинство из них - просто хлам, не дающий читателю ни малейшего понятия о том, как на самом деле проектируются, реализуются и сопровождаются программы промышленного объема и промышленного уровня качества. Ситуация с литературой по программированию микропроцессоров и микроконтроллеров еще на порядок хуже - почти вся она сводится к передиранию описания системы команд МК из datasheet'а, после чего следует пара примитивных программ типа "помигать светодиодиком". Для самых начинающих, безусловно, это будет познавательно. Но что делать дальше, когда медитировать, глядя на мигающий светодиод, уже надоело? Увы, большинство книг на этом заканчивается.

    Поэтому весьма ценным будет обмен столь дефицитной литературой по сабжу. Прочитали что-то стоящее - не сочтите за труд черкнуть несколько строчек в данной теме. Решили, что книга не стоит затраченного времени/денег - тоже напишите, чтобы другие не наступили на те же грабли.

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

    Я может быть не профи но возник вопрос.
    А как на счет использования для тестирования языка SystemC.
    Там можно реализовать HAL в плоть до регистров и он более приближенно может описать железо.
    (задать тактирование. подход немного другой).
    в принципе это тот же c++
  • Вопрос для специалистов по микроконтроллерам и не только.

    я использую gcc и для отладки gdb.
    где можно почитать про отладочную информацию, которую помещает компилятор в программу? (gcc -g ..)
  • Направления программирования :: Drivers
  • Собрал USB-устройство на PIC18F2550. Написал к нему драйвер под WinXPx32(не полный, но рабочий)- работает(устройство определяется, конфигурируется, обменивается данными по VENDOR).
    Проблема заключается в том, что под Win7x32 драйвер не запускается. Устанавливается, проходит конфигурирование, установку интерфейса... а потом установка останавливается минут на 5-10 и затем получаю сообщение типа:"windows обнаружила драйверы для устройства, но в процессе установки произошла ошибка. Устройство не может быть запущено."

    Уважаемые дровописатели! Помогите чайнику. Это мой первый драйвер и первое USB-устройство. Что из них не работает, я не знаю. Но похоже, что драйвер. Т.к. устройство работает только по 0-вой конечной точке, но после установки интерфейса в USB-модуле не происходит никаких прерываний(т.е. компьютер не отсылает никаких запросов).
  • Направления программирования :: Web
  • День добрый.
    В консольном приложении посылаю POST- запрос на логин на некоторый  сайт.
    Код:
            static void Login()
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://en.grepolis.com/start?action=login  ");
                request.Method = "POST";
                string postData = "world=en13&facebook_login=&portal_sid=&name=&password=";

                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = byteArray.Length;

                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                
                ...
            }

    В строке HttpWebResponse response = request.GetResponse() as HttpWebResponse; фиддлер показывает, что происходит еще 3 временных перенаправления на другие адреса (код 302), и передается важная инфа, однако в переменную response я получаю последний ответ (код 200), пропустив таким предыдущие и проворонив данные.
    Что можете посоветовать? Как отловить все перенаправления, а не последнее
  • Направления программирования :: Web :: Серверные скрипты
  • Народ!

    Никто не сталкивался с jqGrid:

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

    Подскажите хотя бы, как в jqGrid работают с полученными Id при мультиселекте. Грубо говоря, вот я получил id в скрипте

    Код:
    jQuery("#getselected").click(function(){ 
        var nosel= "Not chosen any row";   
        var selr = jQuery('#list').getGridParam('selarrrow');
        if (selr) alert(selr);
        else alert(nosel);
        return selr;


    Вместо alerta - куда его девать-то еще, как засунуть в PHP?
    Ясно что надо AJAX-ом, xml-http-Requestom - но как? В каком направлении хотя бы рыть?


    Т.е., точный вопрос касается jqGrid-a:
    можно ли повесить на клик мышки а не на нажатие Enter передачу в БД значений ячейки/строки. Или, как это представляется и должно быть, передавать в php ID выделенных строк.
    Инструкцию к jqGrid читал, проблема в том что плохо ориентируюсь в AJAXE и JQuery.

    (http://savepic.org/1047939.jpg)


    Вот таблица, все работает, все отображается, изображения по событию OnMouseOver увеличиваются в размерах, editurl - все сохраняет.

    Как сделать сортировку выделенных строк?
    Пока придумал лишь один способ(костыль) - скрытый столбик, в который записываются флаги (единички) и которые прекрасно передаются в БД при редактировании ячейки через editurl.php.
    И кнопка "сортировать по выделенным" тогда работает - просто кидает вверх все строки у которых есть флаг, а также закрашивает их заново выделенными при перерисовке таблицы (reloadGrid).

    Это долго и неудобно если нужно покликать на сотню-другую строк.

    Но как передать в php все ID выделенных строк? Тогда не нужен етот костыль. И тогда можно назначать различные обработчики выделенным строкам.

    Да, и еще, выделение с Shift для смежных строк кто-то реализовывал в этом jqGride или еще нет, и возможно ли это технически?
  • Направления программирования :: Web :: Базы данных и Web
  • Прошу помоч мне с решением проблемы установки джумалы на денвер.
    Я роспаковал в папку www как написано в инструкции.
    Захожу прохожу этапы установки....
    И тут бац на третьем этапе там где нада указать:

    Тип бази даных
    Имя хоста (хотя я чучуть не понял что сюда вводить)
    Имя которое дал хостер
    Пароль
    И имя бази даных
    Все ввел нажимаю далее, начинаеться загрузка, жду минут пять.....
    БАЦ!  :oи выбивает ошибку!
    Помогите плиз решить проблему, может я что-то не так ввожу в те поля. :(

    Добавлено через 11 минут и 1 секунду:
    Я извиняюсь на 4 этапе.....
  • Направления программирования :: Web :: Клиентские скрипты
  • Здравствуйте! Подскажите, если не трудно, как в Java-Script осуществить такую операцию: в текстовое поле будет вводиться код - при нажатии на кнопку этот код будет сравниваться с начальным (реальным), так если я реальный код пропишу в HTML-коде, его все будут видеть. Я так думаю, его надо записывать в каком-то текстовом документе, а потом его от туда считывать. Помогите, пожалуйста!!!
  • Практические разделы :: Базы данных
  • Хочу посоветоваться по тому как правильно хранить данные в базе..
    Есть несколько групп конфигурационных файлов разных типов - INI, XML и т.п.
    Файлов довольно много - 3-4 файла на каждом из 100 серверов.
    Данные в них могут незначительно меняться, скажем, несколько раз в день.
    Проверка на изменение производится с удаленного сервера раз в 5 минут.
    Нужно хранить данные из этих файлов, причем с возможностью быстро вытащить какое-то значение.
    На мой взгляд логично представить их в виде дерева нодами в виде записей nodeid-parentid-nodename-nodetype-nodevalue.
    Это позволит хранить как атрибуты, так и ветви.
    Но встает следующий вопрос - обновление.
    Допустим, у нас хранится в базе такое дерево - мы его распарсили и уже сохранили.
    Теперь мы имеем новый файл и знаем что в нем "что-то" поменялось - необходимо удалить старые ноды и добавить новые.
    Как правильнее поступить - убить все дерево и создать новое, либо искать по всему дереву и удалять/вставлять только изменения?
    В первом случае мы делаем только "delete from nodes where " по какому-либо простому условию и затем серия insert.
    Во втором случае мы бегаем по всему дереву, выполняя кучу select и сравнений, а затем delete/insert.
    Что более накладно для базы?
    Или есть какой-то более правильный способ?
  • Помогите, пожалуйста, написать запрос!
    Есть две таблицы, Table1, Table2.
    В одной из них, например, 50 столбцов и 1000 записей. В том числе есть столбцы a1, b1, c1, но для ста записей c1 не заполнен. Отсутствующие данные имеются в другой таблице, Table2, состоящей из столбцов a2,b2,c2, в которых как раз есть данные с2 по тем 100 записям (по условию a1=a2 и b1=b2).
    Как перенести значения из с2 в с1?

    При таком запросе:

    Код: (sql)
    UPDATE Table1
    SET с1 = (SELECT с2 FROM Table2 where Table1.a1=Table2.a2 and Table1.b1=Table2.b2)

    выдаёт ошибку
    "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

    Как правильно написать запрос, чтобы каждому конкретному значению возвращалось только одно?


    -----------------
    И ещё один вопрос на другую тему:
    подскажите, пожалуйста, как в SQL Server в поле типа datetime поменять только год, или только месяц, или прибавить несколько дней?


    Спасибо!
  • Практические разделы :: Железо
  • При подключении плеера,компьютер находит новое оборудование, но через 10 секуд иконка в правом нижнем углу монитора (где часы, не знаю как называется эта панель) исчезает. Диспетчер устройств видит плеер как "windows portable devices:  walkman"(плеер сони), но в папке "Мой компьютер" устройство не видно. По инструкции с плеера надо установить программу для переноса музыкальных файлов. Помогите если кто знает, как это побороть, заранее благодарен.
  • В общем, проблема вот в чем: недавно у меня скорость чтения\записи жесткого диска заметно упала, примерно до 3 мб\с. Что я с ним ни делал и как только ни извращался, ничего не помогало. Но решение нашлось! Я заменил шнур SATA, но это решило только полпроблемы! Скорость чтения теперь 60-65 мб\с, а вот скорость записи, вроде, еще медленней стала! Хард - WD2500KS, ОС - WinXP sp3.
  • Практические разделы :: Программы
  • Здравствуйте! Помогите пожалуйста, нигде не могу найти программу, которая бы разрезала текстовый файл на множество файлов, причем линия разреза - по ключевому слову или фразе в тексте. Не разбираюсь в программировании, помогите пожалуйста

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


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


В избранное