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

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


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

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

Сегодня предлагаем вам статью «Миграция с Sun SVM в Oracle ASM».

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




Пополнение «Книжной полки разработчика систем со встроенными микропроцессорами»:





В разделе общие проекты появилась тема «Death Thread — микроблог с умирающими сообщениями».


Death Thread — проект с претенциозной целью - реализовать микроблог, не похожий на все прочие микроблоги. Т.е. такой твиттер, который совсем не такой, как твиттер. И даже более — такой, какого у нас еще не было. Новизна нашего твиттера будет заключаться в следующем:

  • У каждого сообщения есть жизнь;
  • Каждое сообщение можно убить;
  • Вместо "френд-ленты", подписок и т.п. — хитрый, коварный, беспощадный механизм, основанный на суровом законе естественного отбора.

Не знаю, что из этого в итоге получится (возможно, что твиттер), но — думаю — будет интересно.




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




Сегодня я хочу рассказать о том, как можно мигрировать данные БД с Sun SVM в Oracle ASM, с минимальным временем простоя.

Мы имеем Sun сервер с СУБД Oracle 10g. Два SCSI диска в зеркале, каждый по 36Гб, под управлением Sun SVM. На этом зеркале расположены файлы данных рабочей базы данных. Задача — мигрировать файлы базы данных в Oracle ASM, с минимальным временем простоя, имея в распоряжении только эти два диска.


Solaris Volume Manager (SVM).


Из документации:


Solaris Volume Manager is a software product that lets you manage large numbers of disks and the data on those disks. Although there are many ways to use Solaris Volume Manager, most tasks include the following:

  • Increasing storage capacity
  • Increasing data availability
  • Easing administration of large storage devices

In some instances, Solaris Volume Manager can also improve I/O performance.

Подробную информацию о SVM, вы можете найти в этом документе.


Oracle Automatic Storage Management (ASM).


Из документации:


Automatic Storage Management (ASM) is an integrated file system and volume manager expressly built for Oracle database files. ASM provides the performance of raw I/O with the easy management of a file system. It simplifies database administration by eliminating the need for you to directly manage potentially thousands of Oracle database files. It does this by enabling you to divide all available storage into disk groups. You manage a small set of disk groups and ASM automates the placement of the database files within those disk groups.

Подробную информацию о Oracle ASM, вы можете найти в этом документе.




Итак, посмотрим как выглядит наша конфигурация SVM.

...


Полностью прочитать статью можно на нашем сайте, в разделе «Базы данных::Oracle».

  • Программирование :: .NET технология от и до
  • На поддержке одного проекта наткнулся на грабли с отладкой полу-.NET, полу-нативного С++-кода.

    Диспозиция: проект - dll с .NET-интерфейсом и "мясом" из нативного кода. В debug-конфигурации включена оптимизация по скорости /O2 (зачем так было сделано - отдельный вопрос, автор утверждает, что как раз этим самым избавлялся от граблей, которые в итоге, напротив, проявляются).

    Грабли: memcpy/memset и иже с ними в указанной конфигурации под отладчиком работают чудовищно медленно (мегабайтовый блок памяти копируется десятки секунд, на копировании 100-мегабайтового можно смело идти обедать).

    Как выяснилось, в силу включенной поддержки CLR, на весь код неявно распространяется прагма #pragma managed, и нативный код де-факто обслуживается построчно managed-отладчиком. Где-то тут коса и находит на камень: managed-отладчик дуреет при виде memcpy и выдаёт чудовищные тормоза (может, он на копирование каждого байта native-отладчику передаёт управление? или делает какие-то свои проверки, я не знаю, не вдавался).

    Если заменить вызовы memset/memcpy на простой цикл с поэлементным заполнением/копированием, то всё работает быстро: то есть, проблема где-то в вызовах библиотечных функций.

    Если отключить оптимизацию (/Od), проблема пропадает (хотя я не уверен, что она не станет проявляться при каком-то ещё причудливом сочетании факторов): массивы копируются и заполняются быстро, как и положено.


    Таким образом, есть грабли в связке: /D "_DEBUG" + /O2 + /clr + нативный код, связанные с работой managed-отладчика по оптимизированному нативному коду: ужасно медленный вызов функций CRT (глубже пока не исследовал)

    Собственно, пока есть одна полу-мера и одна полновесная мера борьбы с этим безобразием.
    Полумера заключается в отключении оптимизации (в общем-то, и не нужной в режиме отладки) - при этом unmanaged-код по-прежнему контролируется managed-отладчиком, и остаётся опасение, что вылезут какие-нибудь глюки.
    Альтернатива - везде, где необходимо, ставить #pragma managed/unmanaged (что непросто в среднего размера проекте с кучей не очень аккуратного кода - придётся попотеть, чтобы везде всё было, и дальнейшая поддержка таких соглашений тоже потребует усилий).

    Есть ли здесь ещё какие-то нюансы? У меня с такими кентаврами опыт работы небольшой, поэтому рад буду, если кто-то поделится опытом по части других возможных граблей (в основном, интересует отладка "кентавра", быстродействие пока на втором плане, хотя тоже может потребоваться).
  • Программирование :: .NET технология от и до :: ADO.Net
  • Не знаю правильно ли я выбрала рубрику для своей темы, но просмотрев форум увидела близкие моей темы именно в этой рубрике. В общем я пытаюсь подключиться к таблицам базы данных SQL server 2005 Express при помощи Builder2006-приложения с удалённого компьютера. Мне уже пояснили, что лучше всего тут использовать средства ADO. Состроила UDL-файл:
     "Provider=SQLOLEDB.1;Password=1;Persist Security Info=True;User ID=sa;Initial Catalog=tat;data Source=TAT2\SQLEXPRESS"
     И нигде не могу ни найти, ни вставить ничего похожего на сеть, на сетевой путь! Это я привела UDL-файл локального ПК. Удалённый же, когда я пытаюсь с удалённого подсоединиться к этому локальному, на котором вот так вот прописана база, выдаёт:
     "[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер используемый по умолчанию"
     В принципе я могла бы на удалённом ПК написать UDL-файл подключения по-другому. Но кто-нибудь может посоветовать источники, где бы пояснялось как можно составить ADO-строку подключения В СЕТИ?
  • Программирование :: С/С++
  • Доброго времени суток!!!Задался целью тщательно изучить С++. Посоветуйте пожалуйста хорошие книги и учебники для изучения этого могучего языка :)Заранее спасибо :)

    З.Ы. А как вы изучали язык?Поделись опытом :)
  • Давно хотел посоветоваться по этому поводу. Ниже рассказано, как я это представляю.
    Код местами неполный, иногда ошибочный. Поправьте. Мне главное-концепция.
    C т.зр. UML определены 2 вида ассоциаций - класс агрегат и класс-композиция
    класс агрегат - С  уничтожением его экземпляра перестают существовать и
    объекты его составляющие. (1 Пример не очень удачный т.к. группа не может быть из 1 студента)
    Код:
    #include <string>
    class Tstud
    {
     public:
      int PIN;
      std::string FIO;
      int year;
     Tstud(int ye,std::string fio)
     {}
    };
    class Tgroup //класс агрегат из 1 студента
    {
     public:
      int curs;
      std::string spec;
      Tstud* st;//
      Tgroup(int ye,int tp)
      {
        st=new Tstud(...);
      }
    };
    Класс композиция. С  уничтожением его экземпляра продолжают существовать и
    объекты его составляющие
    Код:
    class Tstud 
    {
     public:
      int PIN;
      std::string FIO;
      int year;
     Tstud(int ye,std::string fio)
     {}
    };
    class Tgroup //класс -композиция из 1 студента
    {
     public:
      int curs;
      std::string spec;
      Tstud st;//один студент, как атрибут класса
      Tgroup(int ye,int tp)
      {
        st=new Tstud(...);
      }
    };
    Как быть если составляющих однотипных объектов не 1 а несколько? Видимо удобно перейти
    к динамическим структурам, прежде всего списку или вектору.
    Код:
    #include <string>
    #include <vector>
    using namespace std;
    class Tstud
    {
     public:
      int PIN;
      std::string FIO;
      int year;
     Tstud(int ye,std::string fio)
     {}
    };
    class Tgroup //класс агрегат из нескольких студентов
    {
     public:
      int curs;
      std::string spec;
      vector<Tstud> sv;
      Tgroup(int ye,int tp);
      void add(Tstud st)
       {sv.push_back(st);}
      ~Tgroup()
      { sv.erase();} //не понимаю, при очистке контейнера будут ли уничтожены объекты
                     //освободиться ли память ?
    };
    а для композиции видимо аналогично, только непонятно, что происходит при очистке контейнера
    и как при этом сохранить объекты, но уничтожить контейнер TGroup?

  • Добрый день. Решил вернуться из .net к темной стороне, и вот понадобились лямбды сразу же.

    Есть такое определение функции:
    Код:
    void CMyClass::SomeFunc(void (*func)(int), std::fstream &file);

    Использую:
    Код:
    SomeFunc([&blob, &file] (int index) 
    {
    //. . .
    }
    ,file);

    Собственно, не понятна причина ругани, если лямбды в C++0x означают то же, что лямбды в C#:
    Error: no suitable conversion functions from "lambda[] void(int index)" to "void(*)(int)" exist.
  • Программирование :: С/С++ :: ANSI С/С++
  • Допустим у вас в txt-файле несколько чисел:
    309
    5
    512


    Если бы файл был в кодировке ANSI:
    1) Вы считали строчку с помощью fgets()
    2) Преобразуете полученное с помощью atoi() к числу.

    Но у нас Unicode:
    1) Вы считали строчку с помощью fgetws()
    2) ???
  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Вроде работал, но что-то перестал. Почему-то сохраняет файл имеющий 0-й размер.
    Код: (cpp)
    // http://msdn.microsoft.com/en-us/library/ms533843.aspx
    int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
    {
       UINT  num = 0;          // number of image encoders
       UINT  size = 0;         // size of the image encoder array in bytes

       ImageCodecInfo* pImageCodecInfo = NULL;

       GetImageEncodersSize(&num, &size);
       if(size == 0)
          return -1;  // Failure

       pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
       if(pImageCodecInfo == NULL)
          return -1;  // Failure

       GetImageEncoders(num, size, pImageCodecInfo);

       for(UINT j = 0; j < num; ++j)
       {
          if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
          {
             *pClsid = pImageCodecInfo[j].Clsid;
             free(pImageCodecInfo);
             return j;  // Success
          }   
       }

       free(pImageCodecInfo);
       return -1;  // Failure
    }

    // Сохраннение в файл на диске в формате JPG
    void SaveScreenShotJPG()
    {
        ULONG_PTR gdiplusToken;
        GdiplusStartupInput gdiplusStartupInput;
        GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

        int Width, Height;
        HDC scrdc, memdc;
        HBITMAP membit;
        scrdc  = GetDC(0);
        Height = GetSystemMetrics(SM_CYSCREEN);
        Width  = GetSystemMetrics(SM_CXSCREEN);
        memdc  = CreateCompatibleDC(scrdc);
        membit = CreateCompatibleBitmap(scrdc, Width, Height);
        SelectObject(memdc, membit);
        BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);

        Bitmap *bmp = new Bitmap(membit, NULL);
        Image  *img = bmp->GetThumbnailImage(Width, Height);
        CLSID imgClsid;
        EncoderParameters encoderParams;
        int quality = 65;
        encoderParams.Count = 1;
        encoderParams.Parameter[0].Guid           = EncoderQuality;
        encoderParams.Parameter[0].Type           = 4;
        encoderParams.Parameter[0].NumberOfValues = 1;
        encoderParams.Parameter[0].Value          = &quality;
        GetEncoderClsid(L"image/jpg", &imgClsid);
        int status;
        status = img->Save(L"Z:\\ImageDesktop.jpg", &imgClsid, &encoderParams);
        delete bmp;
        delete img;
    }
    Что не так?

    Вот такой работает (здесь BMP-формат):
    Код: (cpp)
    // Сохраннение в файл на диске в формате BMP
    void SaveScreenShotBMP()
    {
        ULONG_PTR gdiplusToken;
        GdiplusStartupInput gdiplusStartupInput;
        GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

        int Width, Height;
        HDC scrdc, memdc;
        HBITMAP membit;
        scrdc  = GetDC(0);
        Height = GetSystemMetrics(SM_CYSCREEN);
        Width  = GetSystemMetrics(SM_CXSCREEN);
        memdc  = CreateCompatibleDC(scrdc);
        membit = CreateCompatibleBitmap(scrdc, Width, Height);
        SelectObject(memdc, membit);
        BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);

        Bitmap *bmp = new Bitmap(membit, NULL);
        Image  *img = bmp->GetThumbnailImage(Width, Height);
        CLSID imgClsid;
        GetEncoderClsid(L"image/bmp", &imgClsid);
        int status;
        status = img->Save(L"Z:\\ImageDesktop.bmp", &imgClsid);
        delete bmp;
        delete img;
    }
  • Как развернуть окно после того, как было послано сообщение (в блоке case WM_CREATE:);
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
    ?

    Оно сейчас лежит в Панели задач и не хочет с неё слезать (развернувшись на экран) при тычке мышью.
  • Итак, расскажу свою историю по порядку.
    Учился я на энергетика, увлекаюсь электроникой. И захотелось мне очень-очень изучить микроконтроллеры и всю работу с ними. Ну а ессно просто так это не сделаешь, нужна конкретная задача. И на свою голову я решил в качестве дипломного проекта сделать стенд, имитирующий подстанцию, управляемую автоматизированной системой диспетчерского управления.
    Взялся за гуж, не говори что не дюж. Но до этого не думал, что все так сложно будет.
    Сделал целиком стенд (1м на 1.3м, состоит из порядка 1000 деталей, которые я же и моделировал в САПР), сделал печатные платы, которые этим всем будут заведовать (напаять пришлось около 1000 элементов вручную), освоился с ассемблером (все в контексте использования ATMega644), написал примерно для контроллера прогу на Си в IARe, тоже соответсвенно не очень простая получилась.
    Диплом то защитил, красный, но вот хвосты остались. Надо сделать программу для компьютера.
    До этого делал простенькие программы в С++ Билдере, Делфи. А тут попались под руку исходники (проект микропроцессорной системы зажигания SECU-3 на базе ATMega64),  которые предназначены для тех же целей, что мне и нужны:
    1. Умеют прошивать МК (общаться с бутлоадером МК и скармливать ему прошивку без программатора через виртуальный ком-порт)
    2. умеют влиять на параметры работы управляющей программы МК, передавать МК какие-либо команды
    3. принимают от МК текущее состояние подключенной периферии
    4. имеет сносный графический интерфейс.
    Эти исходники написаны на Visual С++.
    Ну, думал я, щас скачаю студию, разберусь, и сделаю свою прогу. А не тут то было, ессно. Вроде синтаксис знакомый, букафки знакомые, а в целом нифига не понятно. Концепция вообще не такая как в билдере ( ну то есть есть форма, на которую складываешь элементы и задаешь им функции). Тут целиком главного окна я не нашел, только разрозненно, и диалоговые окна в ресурсах. Подошел в институт на кафедру программирования к преподавателям, которые типа знают Visual C++. Они понять не смогли каким образом вообще написан код, где там функция main или Tmain, почесали репу и дали мне пару книжек по С++, мол разбирайся сам. Ну конечно кое-что полезное поведали - что можно приложение, нужное мне, написать тремя способами: WinAPI, MFC или Windows Forms. Еще я так понял, что мало мне смысла ковырять те исходники... Проще наверное с нуля сделать.
    Поэтому прошу совета - на чем мне начинать делать эту программу, и хотя бы примерно в какой последовательности? Функции программы описаны выше. С радостью отвечу на все уточняющие вопросы.
  • Уважаемые, подскажите ЕСЛИ кто сталкивался.

    Есть набор клиент-серверных приложений собственной разработки. Для связи используются сокеты в виде  классов в которых реализовна и клиентская и серверная части. Вся часть ПО ответственная за связь вынесена в отдельную DLL.

    Сервер запускается, клиенты к нему подключаются, отключаются и т.д. и т.п.
    Все нормально работало неделями - дольше не получалось тестировать непрерывно - приходилось перезапускать.
    Клиентов было штук 20.

    Сейчас клиентов увеличил до 150. Теперь все работает но 2,5 дня. Может и дольше - до недели, но не меньше точно.
    Потом происходит следующая ситуация. Сервер видит подключения клиентов, новые подключаются, старые отключаются, но данные не пересылаются ни в одну сторону.

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

    Перезапускаешь приложение - все опять работает.
    Понятно, что где-то что-то переполняется, но вот что и где????

    Идеи есть какие-нибудь?
    Спасибо.
  • Программирование :: Delphi
  • В данном случае работаю в PascalABC
    Пусть задан класс Tprep
    Код:
    type Tprep=class(rabotnik)
       kol: integer;
       constructor Create(Fam:string;nkaf:integer;st:integer;kl: integer);
    end;
    ...
    type  Pprep =^Tprep;
    var p:Pprep;
    begin
    new(p,Tprep.Create('Ivanov I.I.',1,30000,1));//так говорит, что неверное кол-во параметров
    ...
    известно что оператор new(p); создаст объект, но не проинициализирует
    приводится часто такая схема New(p, Init);
    Но в Pascal ABC вместо Init конструктор Create с параметрами
    Разумеется у меня есть в запасе и работает способ инициализации не по указателю а по объекту
    Код:
     var  pr:Tprep;
      pr:=Tprep.Create('Ivanov I.I.',1,1);
    - это работает.
    Будет ли какая нибудь разница этих 2-х способов при многократном пользовании объектом pr ?
    Скажем для создания нескольких экз объектов и запихивания в контейнер?
    В частности, как освобождать память?
  • Программирование :: VisualBasic
  • подскажите пожалуйста код, находящий hwnd чужого окна по фрагменту имени. как образец есть код, закрывающий окно по фраменту имени, но не мойму, где в коде нахождение hwnd
    форма
    Код:
    Private Sub Command1_Click()
        KillProga Text1.Text
    End Sub
    модуль
    Код:
    Option Explicit

    Public TargetName As String
    Public TargetHwnd As Long

    Public Const GWL_style="-16"
    Public Const WS_DISABLED = &H8000000
    Public Const WS_CANCELMODE = &H1F
    Public Const WM_CLOSE = &H10


    Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Declare Function GetWindowText Lib "user32" Alias _
        "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString _
        As String, ByVal cch As Long) As Long
    Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) _
        As Long
    Declare Function GetWindowLong Lib "user32" Alias _
        "GetWindowLongA" (ByVal hWnd As Long, _
        ByVal nIndex As Long) As Long
    Declare Function PostMessage Lib "user32" Alias _
        "PostMessageA" (ByVal hWnd As Long, ByVal wMsg _
        As Long, ByVal wParam _
        As Long, ByVal lParam As Long) As Long

    Sub KillProga(proga As String)
        Do
            TargetName = proga
            TargetHwnd = 0
            ' Examine the window names.
            EnumWindows AddressOf WindowEnumerator, 0
            ' See if we got an hwnd.
            If TargetHwnd = 0 Then
                Exit Do
            Else
                EndTask (TargetHwnd)
            End If
        Loop
    End Sub

    ' Return False to stop the enumeration.
    Public Function WindowEnumerator(ByVal app_hwnd As Long, _
        ByVal lParam As Long) As Long
    Dim buf As String * 256
    Dim Title As String
    Dim length As Long

        ' Get the window's title.
        length = GetWindowText(app_hwnd, buf, Len(buf))
        Title = Left$(buf, length)

        ' See if the title contains the target.
        If InStr(Title, TargetName) > 0 Then
            ' Save the hwnd and end the enumeration.
            TargetHwnd = app_hwnd
            WindowEnumerator = False
        Else
            ' Continue the enumeration.
            WindowEnumerator = True
        End If
    End Function

    Function EndTask(TargetHwnd As Long) As Long
       
        Dim rc As Integer
        Dim ReturnVal As Integer
    '    If TargetHwnd = Form1.hwnd Or GetWindow(TargetHwnd, _
    '        GW_OWNER) = Form1.hwnd Then
    '        End
    '    End If
        If IsWindow(TargetHwnd) = False Then
            GoTo EndTaskFail
        End If
        If (GetWindowLong(TargetHwnd, GWL_STYLE) _
            And WS_DISABLED) Then
            GoTo EndTaskSucceed
        End If
       
        'Close the window
        If IsWindow(TargetHwnd) Then
            If Not (GetWindowLong(TargetHwnd, GWL_STYLE) _
            And WS_DISABLED) Then
            'rc = PostMessage(TargetHwnd, WS_CANCELMODE, 0, 0&)
            'rc = PostMessage(TargetHwnd, WM_CLOSE, 0, 0&)
             DoEvents
            End If
        End If
        GoTo EndTaskSucceed
       
    EndTaskFail:
        ReturnVal = False
        GoTo EndTaskEndSub
    EndTaskSucceed:
        ReturnVal = True
    EndTaskEndSub:
        EndTask = ReturnVal
    End Function

  • Программирование :: VisualBasic :: Visual Basic for Applications
  • Как удалить чужой значок из трея? Известны имя, адрес, хендл программы, добавившей значок в трей
  • Программирование :: Java
  • Здравствуйте.

    Есть код:
    Код:
    final JTextField jtf = new JTextField(10);
    jtf.setText("testOfField");
    jtf.setEditable(false);
    jtf.addKeyListener(new KeyListener() {

    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}

    public void keyPressed(KeyEvent e) {

    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {

    jtf.setSelectionStart(0);
    jtf.setSelectionEnd(5);
    }
    }
    });

      При нажатии клавиши "вправо" выделения не происходит, т.к. кнопки со стрелками по умолчанию отменяют его. Вопрос, можно ли как-нибудь удалить или игнорировать стандартный слушатель клавиш элемента JTextField?
  • Есть две JSP-страницы и сервлет, отвечающий за передачу данных между ними:
    Сервлет

    Код:
    public class MessageHandlerServlet extends HttpServlet {
        Comment comm = new Comment();
        List <String> commList = new ArrayList();
       public void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse)
           throws ServletException, IOException {
           aRequest.setCharacterEncoding("utf-8");

           Date dt = new Date();
    comm.setAuthor(aRequest.getParameter("author"));
    comm.setMessagetext(aRequest.getParameter("message"));
    comm.setDate(dt);
    commList.add(comm.toString());
    aRequest.setAttribute("listofmessages", commList);
     RequestDispatcher dispatcher = aRequest.getRequestDispatcher("messages.jsp");
     dispatcher.forward(aRequest, aResponse);

      
    }
     public void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse)throws ServletException, IOException{
         aRequest.setCharacterEncoding("utf-8");
          aRequest.setAttribute("listofmessages", commList);
     RequestDispatcher dispatcher = aRequest.getRequestDispatcher(aRequest.getContextPath());
     dispatcher.forward(aRequest, aResponse);
        

     }  
    }

    newmessage.jsp
    Код:
    <%@page contentType="text/html" pageEncoding="utf-8"%>
    <%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>New message</title>
        </head>
        <body><h1>Please fill form</h1>
           <a href="<%=request.getContextPath()%>/messages.jsp">View all messages</a><br/>
            <form action="/GuestBook2/messagehandler" method="POST">
                <h2>author name: </h2>
                <p><input type="text" name="author" size="25" value=""/></p>
                <h2>text: </h2>
                <p><textarea name="message" wrap="virtual" cols="40" rows="4"></textarea></p>
                <p><input type="submit" value="post new message"/></p>
                
            </form>
        </body>
    </html>

    messages.jsp
    Код:
    <%@page contentType="text/html" pageEncoding="utf-8"%>
    <%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="ru.ayaz.guestbook2.Comment"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>View all messages</title>
            
        </head>
        <body>
            <a href="<%=request.getContextPath()%>/newmessage.jsp">add new message</a><br/>
            <h1>List of messages</h1>
            
            <%List <String> commlist = (ArrayList) request.getAttribute("listofmessages");
                     if(commlist != null)
                   {
                   for(String comm : commlist){%>
    <tr><td align="center"><p><%=comm%><p><a href=#>to the top of page</a></p></p></td></tr><%}};%>              
        </body>
    </html>

    При добавлении нового сообщения на странице newmessage путем заполнения формы и передачи по нажатию кнопки оно появляется в списке на странице messages. Однако если переходить на страницу messages по гиперссылке View all messages то список записей пустой. В чем может быть причина?
  • Программирование :: Программирование 1С
  • Нужно выбрать из документов даты, выбирая самую раннюю, но из тех которые были после начала возникновения задолженности. Например в начале было какое-то сальдо, в какойто момент стало  оборот ДТ= оборот КТ, а после этого началось новое возникновение задолженности - вот нужно выбрать начало возникновения этой самой задолженности.Как это реализовать? Пример:

    Контрагенты    ДебетКредит                ДебетКредит              ДебетКредит
    Рога и копыта                                                   900                                 900

    Контрагенты    ДебетКредит                ДебетКредит              ДебетКредит
    Рога и копыта               900                               900


    Контрагенты    ДебетКредит                ДебетКредит              ДебетКредит               ----  Вот эту дату хочу получить
    Рога и копыта                                                      700                              700
  • Операционные системы :: Windows
  • Возникла проблема с консолью Windows XP SP3 professional.

    После установки и удаления одной утилиты Касперского, очищающей компьютер от вируса (вируса, кстати, не было!), стала самопроизвольно меняться кодировка консоли операционной системы Windows XP.

    Кодировка консоли изначально была DOS, но периодически сама устанавливается в Windows. А через день становится опять DOS!

    Я уже замучился конвертировать командные файлы...

    Закономерностей этой смены кодировки не выявлено! Кодировка сама меняется с периодичностью один раз в 2-3 дня!

    При этом компьютер не перезагружается, и никто его не трогает (а одни и те же командные файлы выполняются строго раз в сутки).

    Подскажите, как раз и навсегда зафиксировать кодировку консоли Windows XP SP3 professional.
  • Некой приложение при попытке установиться выдает окно как на скриншоте. Вместо текста - знаки вопроса. Попытки поменять системную локаль на English и обратно на Russia не помогли.. Windows 7.
    Нужно просто понять что там написано и какую опцию выбирать. Как можно это вытащить из файла? Инсталлятор создан с помощью Inno Setup:
    Тип        : Application (0x1)
    ОС         : Win32 (0x4)
    Язык    : English (United States) (0x0)
    Кодировка   : 1200 (ANSI - Unicode (BMP of ISO 10646)) (0x4B0)

    Приложение - инсталлятор карт "Дороги России 5.23" для навигатора..

    Какие будут предложения?

    (http://forum.shelek.ru/index.php?action=dlattach;attach=5962)
  • Здравствуйте.
    Меня интересует есть ли в винде такая функциональность, чтобы при смерти родительского процесса порождённые им дочерние убивались автоматически. Понятно, что эту функциональность можно реализовать - открывать в дочернем процессе родительский и ждать сигнал от него. Но может есть уже готовая функциональность (н-р параметры CreateProcess)?
  • Указал в настройках каталог, который хочу чтоб виртуальная WinXP видела, но не нахожу его в ней, как он там может быть обозначен.

    На странице "Как расшарить папку в VMWare?" присутствует рекомендация установить Tools:
    Virtual Mashine -> Install VMWare Tools
    (http://i033.radikal.ru/1106/36/91244c5bddf3.jpg)
    Установил, но ничего не изменилось. Что предпринять?

    VMWare Player 3.1.4 build-385536, WinXP SP3 (обычный и в виртуалке)
  • Операционные системы :: Unix и другие
  • Ребят вопро простой - в чем ошибка?

    int_if="em1"
    ext_if="em0"
    scrub in all
    block in on $ext_if
    nat on em0 from 192.170.1.0/24 to any -> em0


    Rules must be in order: options, normalization, queueing, ... filtering - ошибка 5 строчки.

    Добавлено через 1 час, 27 минут и 54 секунды:
    Ответ найден - на этом участке поменять местами 2 последних правила.

    PF-FILTER
    сначала идут инструкции Block
    потом pass на внутреннюю сетку
    потом pass на все остальное
    потом Block на всё что осталось
  • Направления программирования :: Drivers
  •  Здравствуйте. На работе поставили задачу: написать драйвер, создающий виртуальный COM порт, к которому сторонняя прога подключается как к реальному, но все отправляемые данные должны перенаправляться моему приложению. Также и наоборот: все данные от моей проги должны через драйвер уходить в этот виртуальный COM порт(и соответственно стороннему приложению).
     И вот вопрос: можно ли создать виртуальный COM порт, одновременный доступ к которому разрешён нескольким (двум) приложениям? Причём так, чтобы данные, приходящие от одного, перенаправлялись другому?
     Или нужно два драйвера: 1) драйвер виртуального COM порта 2)просто драйвер ядра. К первому подсоединяется стороннее приложение, ко второму моё приложение, между драйверами наладить обмен данными.
     Если что, сильно не пинать :), написанием драйверов никогда не занимался :(. Буду благодарен за любые советы, ссылки, исходники.
     
  • Подскажите по типам драйверов и расположении в иерархии.
    Интересует Windows. В будущем Linux.
    Делаю RAM диск с сжатием. Отведенное ОЗУ фиксировано, а объем устройства плавает в зависимости от

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

    это Kernel mode drivers (драйверы режима ядра) -> уровень промежуточный (intermediate) драйвера

    виртуальных дисков.
    Возникает несколько вопросов:
    1. Как быть с динамически меняющимся размером блоков или их количеством в зависимости от сжатия?
    2. Какой тип драйвера имеет доступ и управление к таблице занятых кластеров/блоков?
    3. Какой тип драйвера имеет доступ и управление к таблице бэд секторов и какие виды секторов помимо

    bad и good бывают?

    Правильно ли я представляю себе иерархию драйверов?

    Драйвер файловой системы (Kernel mode drivers (high-level))
      ^ |
      |  V
    Буферный кэш-пул
      ^ |
      |  V
    Драйвер логического диска (виртуального) (Kernel mode drivers (intermediate-level))
      ^ |
      |  V
    Драйвер физического диска (устройства) (Kernel mode drivers (low-level))
      ^ |
      |  V
    Физический диск (устройство)

  • Направления программирования :: Web
  • http://www.lytro.com/picture_gallery

    щелчок по фотке фокусирует взгляд по новой точке

    А как это сделано ? )
  • Добрый день. В общем проблемка заключается в следующем. Необходимо на сайте показывать статус номера фирмы ICQ. Нашел код. Вставил его, а номер всегда получается показывается как Online. Изменил номер, который был точно оффлайн, он начал показывать его серым, а когда зашел на номер, который был серым, значок спокойно поменялся на зеленый.
    Собственно вопрос, как сделать, чтобы корректно отображался статус ICQ?

    Сам код:

    &lt;img class='m png' src='http://www.icq.com/scripts/online.dll?icq=602543393&amp;img=27' border='0' /&gt;

    Толку от того, что выставил в клиенте (QIP 2005) галочки про статус и прочее, нет. Надеюсь на вашу помощь :)
  • Интересует, это красивая (валидная) верстка или можно что-то переделать..
    Верстка приведена не полностью..

    HTML:
    Код:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <title>Заголовок</title>

    <link rel="stylesheet" href="css/style.css" type="text/css" />
    </head>
    <body>
    <!-- START WRAP -->
    <div id="wrap">
    <!-- START HEADER BLOCK -->
    <div id="header">
    <div id="header_text">
    <div id="header_title">
    Пластиковые окна и двери
    </div>
    <div id = "bottom_text">
    Ваш квалифицированный партнер по проектированию, изготовлению, монтажу пластиковых конструкций
    </div>
    </div>
    <div id = "header_logo">
    <img src = "./images/logo.png">
    </div>
    <div id="phone">
    <div id="phone_code"><b>1111</b></div>
    <div id = "phone_num">111-111</div>
    </div>
    </div>
    <!-- END HEADER BLOCK -->

    <!-- START TOP_MENU BLOCK -->
    <div id="top_menu">
    <div id="top_links" align = "center">
    <a href = "">Пластиковые окна и двери</a>
    <a href = "">Акции</a>
    <a href = "">Услуги и сервис</a>
    <a href = "">Контакты</a>
    <a href = "">Вызов замерщика</a>
    <a href = "">Для партнеров</a>
    </div>
    <div style=""float:" left;">
    <img src = "./images/window.png" style=""padding-top:" 16px; padding-left: 74px;">
    </div>
    <div style=""float:" left; color: #fff; font-size: 2em; padding-top: 45px;">
    Работаем в России<br> по Европейским стандартам
    </div>
    </div>
    <!-- END TOP_MENU BLOCK -->
    </div>
    <!-- END WRAP -->
    </body>
    </html>

    CSS:
    body {
    font-family: Tahoma, Helvetica, sans-serif;
    margin: 0px;
    min-width: 1024px;
    }
    #top_links a
    {
    font-family: "Tahoma";
    color: #28aa37;
    font-size: 1.05em;
    padding-left: 24px;
    }
    #top_links
    {
    padding-top: 25px;
    }
    #header_logo{
    padding-left: 125px;
    padding-top: 9px;
    float: left;
    }
    #header {

    width: 100%;

    height: 120px;
    }
    #phone{
    padding-top: 28px;
    padding-right: 105px;
    float: right;
    font-family: Tahoma;
    }
    #header_title{
    text-shadow: 0px 0px 20px #fff;
    font-size: 1.1em;
    }
    #bottom_text{
    text-shadow: 0px 0px 4px #fff;
    padding-top: 10px;
    font-size: 0.776em;
    }
    #header_text{
    color: #424548;
    padding-left: 88px;
    padding-top: 24px;
    width: 25%;
    float: left;
    }
    #phone_code{
    color: #53BB5F;
    font-size: 0.9em;
    font-family: sans-serif;
    float: left;
    }
    #phone_num{
    color: #424545;
    float: left;
    font-size: 2.3em;
    padding-left: 8px;
    }
    #top_menu{
    width: 100%;
    height: 294px;
    background: url('../images/back_green.png');
    }
  • Доброго всем дня!
    Не совсем понимаю, почему страница отображается иероглифами. Работаю через Денвер..
    index.html пишу так:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
       <head>
          <meta http-equiv="Content-Script-Type" content="text/javascript" />
          <meta http-equiv="Content-Style-Type" content="text/css" />
          <!-- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -->     Пробовала ТАК
          <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />                   И ТАК

          <meta name="keywords" content="" />
          <meta name="description" content="" />
          <title>Владимирский тракт | Главная</title>

          <link rel="stylesheet" href="css/style.css" type="text/css" />
          
          <script type="text/javascript" src="js/jquery-1.5.2.min.js"></script>
          <script type="text/javascript"  src="js/vl_trakt.js"></script>
            </head>
    .........
    Папка с css  есть.

    Может, проблема в самом Денвере или браузере? 
  • Практические разделы :: Базы данных
  • Имеются таблицы: users,videos,photos,articles. Необходимо выбрать информацию о всех пользователях, а так же подсчитать рейтинг каждого по выложенным им материалам, а именно: по видео, фото и статьям. Таблицы videos,photos,articles содержат id,id_who (это поле связующее с id в таблице users),voting(сколько раз голосовали),ballet (сумма всех оценок).
    Для начала я сделал так:
    Код:
    $join = mysql_query("SELECT users.id,users.niсk,users.photo,SUM(videos.ballet)/SUM(videos.voting) AS rat_vid, SUM(photos.ballet)/SUM(photos.voting) AS rat_ph, SUM(articles.ballet)/SUM(articles.voting) AS rat_art FROM users LEFT JOIN videos ON videos.id_who=users.id LEFT JOIN photos ON photos.id_who=users.id LEFT JOIN articles ON articles.id_who=users.id GROUP BY users.id",$db);

    if ($join && mysql_num_rows($join)>0)
    {
    $join_res = mysql_fetch_array($join);
    do
    {
    echo $join_res['niсk'];
    echo "<img src='".$join_res['photo']."'><br>";
    echo "Рейтинг по видео: ".$join_res['rat_vid']."<br>";
    echo "Рейтинг по фото: ".$join_res['rat_ph']."<br>";
    echo "Рейтинг по статьям: ".$join_res['rat_art']."<br>";
    }
    while($join_res = mysql_fetch_array($join));
    }
    Всё отлично работает, считает корректно.
    Затем сделал так:
    Код:
    $join = mysql_query("SELECT users.id,users.niсk,users.photo,((SUM(videos.ballet)+SUM(photos.ballet)+SUM(articles.ballet))/(SUM(videos.voting)+SUM(photos.voting)+SUM(articles.voting))) AS rating FROM users LEFT JOIN videos ON videos.id_who=users.id LEFT JOIN photos ON photos.id_who=users.id LEFT JOIN articles ON articles.id_who=users.id GROUP BY users.id",$db);

    if ($join && mysql_num_rows($join)>0)
    {
    $join_res = mysql_fetch_array($join);
    do
    {
    echo $join_res['niсk'];
    echo "<img src='".$join_res['photo']."'><br>";
    echo "по рассказам: ".$join_res['rating']."<br>";
    }
    while($join_res = mysql_fetch_array($join));
    }
    И получил нечто странное: показывается рейтинг только первого пользователя и то он не соответствует реальным данным, а у других вообще пустота...
    Помогите, пожалуйста, составить верный запрос, очень устал от этой проблемы.
  • Практические разделы :: Железо
  • Купила внешний винт TwinMOS 640 Gb 2,5'' USB 2.0, провод с турбо-ускорителем.
    2 недели винт отлично работал на всех компах. Юзаю его в чехле.

    Сегодня с ним творится что-то странное: он стал исчезать из системы, при переподключении не определяется, в диспетчере устройств его тоже не удаётся обнаружить. Подключила на второй комп - определился, заработал. Прошло время - винт исчез, не определяется. Снова подключила к ноуту в другой от обычного USB разъём без турбо режима - винт определился, заработал. Прошло какое-то время, винт снова исчез. Ни на компе, ни на других USB разъемах винт не подключился, ни с турбо подключением, ни с обычным... Отключила, через полчаса снова воткнула - вроде определился...

    Что это может быть? Что можно сделать? Как можно доказать проблему, чтобы обменять винт по гарантии, если такие глюки могут являться свидетельством его критичной работы?
  • Учимся программировать :: Начинающим
  • Помогите ещё раз.
    Задача,которую хотела реализовать : в первом диалоге вводятся параметры и в буфер записывается информация, из первого вызываю второй диалог, в котором должен отобразится график.
    Пока вызывается второе окно и в нём надо нажать кнопку для вывода графика.
    Как обойтись без реального нажатия кнопки?
    Есть два пути решения (SendMessage или OnPaint) , но ничего не получилось.
    Написано на visual c++ 6.
  • Вопрос такой как должен отреагировать компилятор при компиляции при нахождении в файле "*.c" такой строчки
    #include "*.c".
  • ребят не знаю почему, но  у меня в инструментальной панеле на кнопках не появляется моя картинка(ш:48,в:16):
    Код:
    "bitmap1.bmp"
    .....


    вот текст програмки:

    main.h
    Код:
    #include <windows.h>
    #include <windowsx.h>
    #include "resource.h"
    #include <wchar.h>
    #include <commctrl.h>
    #pragma comment (lib, "comctl32.lib")

    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    BOOL OnCreate(HWND,LPCREATESTRUCT);
    void OnPaint(HWND);
    void OnCommand(HWND,int,HWND,UINT);
    void OnDestroy(HWND);

    main.cpp
    Код:
    #include "main.h"
    #define SHIRINA 600
    #define VISOTA 400
    int sw;
     HBRUSH blue,green;
     HINSTANCE hI;
    int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
    {
    wchar_t *szClassName=L"MainWindow";
    wchar_t *szTitle=L"made Krip6.1";
    MSG msg;
    WNDCLASS wc;

    ZeroMemory(&wc,sizeof(wc));
    wc.lpfnWndProc=WndProc;
    wc.hInstance=hInst;
    wc.hIcon=LoadIcon(0,IDI_APPLICATION);
    wc.hCursor=LoadCursor(0,IDC_ARROW);
    wc.hbrBackground=CreateSolidBrush(RGB(100,100,100));
    wc.lpszClassName=szClassName;
    wc.lpszMenuName=L"Main";
    RegisterClass(&wc);

    HWND hwnd=CreateWindow(szClassName,szTitle,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,
    20,20,SHIRINA,VISOTA,HWND_DESKTOP,0,hInst,0);
    ShowWindow(hwnd,SW_SHOWNORMAL);
    while(GetMessage(&msg,NULL,0,0)){
    DispatchMessage(&msg);}
    return 0;
    }

    LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    switch(msg)
    {
    HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);
    HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
    HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
    HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);
    default: return(DefWindowProc(hwnd,msg,wParam,lParam));}}

    BOOL OnCreate(HWND hwnd,LPCREATESTRUCT)
    {
    blue=CreateSolidBrush(RGB(0,0,255));
    green=CreateSolidBrush(RGB(0,255,0));

            TBBUTTON menut[3];
    ZeroMemory(&menut,sizeof(menut));
    menut[0].iBitmap=0;
    menut[0].idCommand=ID_1;
    menut[0].fsState=TBSTATE_ENABLED;
    menut[1].iBitmap=1;
    menut[1].idCommand=ID_2;
    menut[1].fsState=TBSTATE_ENABLED;
    menut[2].iBitmap=2;
    menut[2].idCommand=ID_3;
    menut[2].fsState=TBSTATE_ENABLED;
    CreateToolbarEx(hwnd,WS_CHILD|WS_BORDER|WS_VISIBLE,
    -1,3,hI,IDB_BITMAP1 ,menut,3,16,16,16,16,sizeof(TBBUTTON));
    return TRUE;}

    void OnCommand(HWND hwnd,int id,HWND,UINT)
    {
    switch(id){
    case ID_1:
    sw=1;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
    case ID_2:
    sw=2;
    InvalidateRect(hwnd,NULL,TRUE);
    break;
    case ID_3:DestroyWindow(hwnd);}}

    void OnPaint(HWND hwnd)
    {
    PAINTSTRUCT ps;
    HDC hdc=BeginPaint(hwnd,&ps);
    if (sw==1)
    FillRect(hdc,&ps.rcPaint,blue);
    if(sw==2)
    FillRect(hdc,&ps.rcPaint,green);
    EndPaint (hwnd, &ps);}


    void OnDestroy(HWND){
    PostQuitMessage(0);
    }

    resource.h
    Код:
    #define IDB_BITMAP1                     101
    #define ID_1                            101
    #define ID_2                            102
    #define ID_3                            103

    файл ресурса:
    Код:
    IDB_BITMAP1             BITMAP                  "bitmap1.bmp"

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

    <Накажу...>


    Добавлено через 7 часов, 59 минут и 19 секунд:
    1-ая вот картинка обычная в проге каторая...
    2-ая скрин что получается ..

    Добавлено через 47 секунд:
    вот скрин
  • Моя програмка)
    Она выбирает фал *.pdf  и считает сколько там страниц. То есть если открыть файл в текстовом документе то можно найти там
    Код:
    3 0 obj
    <<
       /Type /Page
       /Parent 2 0 R
       /Resources <<
       /ProcSet [/PDF /Text ]
       /Font <<
       /F1 6 0 R
       /F2 9 0 R
    >>
    >>
       /MediaBox [0 0 595 842]
       /Contents 4 0 R
    >>
    endobj
    Я как раз и считаю сколько раз встретится элемент (слово) Page
    Код:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       if (OpenDialog1->Execute())
       {
          LoadPdfFile(OpenDialog1->FileName);
          CreateXMLFile(OpenDialog1->FileName);
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::LoadPdfFile(AnsiString filename)
    {
       TStringList *pdf = new TStringList;
       AnsiString pdf_file = filename;
     
       pdf->LoadFromFile(pdf_file);
     
       int i, j;
       for (i; i<pdf->Count; i++)
       {
        if (pdf->Strings[i].Pos("/Page"))
        {
        j++;
        }
       }
       MessageDlg("Документ содержит " + IntToStr(j) + " страниц", mtInformation, TMsgDlgButtons() << mbOK, 0);
       delete pdf;
    }
    Только проблема в том что он считает еще похожие слова типа Pages или PageMode. Помогите исправить что бы он вносил в счетчик если после Page стоит переход на другую строку или пробел

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


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


В избранное