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

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


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

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

Содержание.


Введение.

Использование языка программирования Си часто приводит к написанию очень опасного кода. Но это не совсем справедливое обвинение. Такие проекты, как OpenBSD, показывают, что возможно писать безопасный код на Си. Проблема Си та же, что и в ассемблере — язык открывает вам не только все возможности архитектуры, но и кое-что ещё. Он дает все возможности для написания безопасного кода, но не делает эти вещи сам.

В этой статье рассмотрены стандартные примеры ошибок в коде Си и то, как их и избежать.


Проверка ошибок.

Множество современных языков программирования включают в себя некоторый механизм по обработке исключений. Вообще, исключения — это плохая идея. Они усложняют управление ходом программы, и у них есть много недостатков, от которых страдали программы с использованием GOTO перед рассветом структурного программирования. Программист должен проектировать код программы так, чтобы не пришлось обрабатывать исключения. Тем не менее, у исключений есть одно важное преимущество: вы не можете их игнорировать. В частности, код на Java часто засорен блоками try:catch, которые ничего не делают, кроме отбрасывания ошибок, но даже в этом случае механизм исключений преследует цель: это заставляет программиста помнить о том, что он небезопасно обрабатывает условия ошибок.

В Си большинство функций возвращают неправильное значение, когда произошла какая-либо ошибка. Обычно это делается двумя способами. Множество функций возвращают код ошибки ноль в случае успеха. Функции, возвращающие указатели, возвращают правильное значение в случае успеха или ноль в противном случае. Эта ситуация может немного смущать, так как ноль означает и успешное выполнение одних функций, и ошибку в других. Можно возвращать нулевой указатель, его вы не сможете легко проигнорировать, так как получите ошибку сегментации, как только попытаетесь разыменовать его. Этот подход действительно опасен только в тех функциях, которые почти никогда не завершаются с ошибкой, в других ошибка может быть обнаружена во время тестирования и исправлена. Стандартный пример функции, которая почти никогда не завершается с ошибкой — malloc(), наряду со связанными с ней функциями, вроде calloc(). В спецификации Си указано, что malloc() должна вернуть NULL в случае, если памяти недостаточно, чтобы удовлетворить запрос. Linux не полностью следует этому правилу, он возвращает NULL, если в системе недостаточно виртуального адресного пространства, чтобы выполнить выделение памяти, но в случае недостатка памяти Linux по-прежнему выделяет пространство адресов, а затем возвращает ошибку, если вы пытаетесь использовать эту память. Как бы то ни было, исходя из того, что у вас есть подходящая реализация Си, необходимо проверять значения, которые возвращает malloc.


Целиком статью можно прочесть на нашем сайте в разделе «Языки программирования::Языки С & C++».


  • Программирование
      • теория вероятности, комбинаторика

        столкнулся с непониманием решения ряда задачек ввиду, нехватки знаний по терверу и комбе, что лучше почитать по этой теме?
        желательно чтобы потом пригодилось при планом переходе к задачам по криптографии

        зы пробовал вольфрам матворд и википедию, оказалось слишком сжато изложено, чтобы разобраться
      • В общем возник такой вопрос (сабж). Может кто то уже решал, буду благодарен за подсказку в нужное направление. У осла есть возможность импортировать-экспортировать куки, с помощью вызова пользовательского меню, а вот можно ли это сделать программно. COM-Объектная модель осла такую возможность не предоставляет. Возможно можно это сделать  с помощью WMI-скрипта?
        •  number theory, Euclidean algorithm

          для нахождения gcd, функция вместо алгоритма Евклида раскладывает числа общими делителями, как по быстрому сгенерить множество очень больших простых чисел из заданного диапазона, чтобы завалить ее по времени выполнения?

        • определение погрешности, бинарный поиск

          задачка:
          в одномерном пространстве на дистанции максимум 1000 парсек, расположено до 100 центров масс удаленных друг от друга не менее чем на 1 парсек, массой от 1 до 1000 единиц каждая
          нужно получить координаты точек равновесия с точностью до 10в-9 парсек

          если искать бинарным поиском то сколько потребуется циклов на каждый отрезок?

          какова в этом плане точность double float?
        • Здравствуйте
          У кого-нибудь есть примеры задачек по полям галуа(по примитивным элементам, примитивным многочленам, нахождениям подполей, и.т.д.), обязательно с решением, требуется для понимания
          данного материала.
          А то на одних теоремах понять что-то тяжеловато..
        • есть xml файл

          Код:
          <?xml version="1.0"?>
          <rss version="2.0">
             <channel>
                <title>Liftoff News</title>
                <link>h**p://liftoff.msfc.nasa.gov/</link>
                <description>Liftoff to Space Exploration.</description>
                <item>
                   <title>Star City</title>
                   <link>h**p://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
                   <description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star City&lt;/a&gt;.</description>
                   <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
                   <guid>h**p://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
                </item>
                <item>
                   <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a &lt;a href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm"&gt;partial eclipse of the Sun&lt;/a&gt; on Saturday, May 31st.</description>
                   <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
                   <guid>h**p://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
                </item>
             </channel>
          </rss>

          как в C# вывести в лейбл значение тега <title>?
          заранее СПАСИБО!
        • В сети есть курсы онлайн образования? я имею ввиду - чтобы можна было слушать курс дистанционно, по скайпу например... интересуют курсы ASP.NET...
        • Ругается
           Compiler Error Message: CS0117: 'System.IO.StreamReader' does not contain a definition for 'Length'
          и не выводит на страницу то, что я засовываю в консоль...

          Код:
            String strURL = "MyURL";
          HttpWebRequest Request;
          HttpWebResponse Response;
          StreamReader st;
          String strHTML;
          Request = (HttpWebRequest)WebRequest.Create(strURL);
          Request.Method = "GET";
          Response = (HttpWebResponse)Request.GetResponse();
          st = new StreamReader(Response.GetResponseStream(), Encoding.GetEncoding(1251));

          string outStr = string.Empty;
          Regex r = new Regex("MyPatern", System.Text.RegularExpressions.RegexOptions.Multiline);
          if (st.Length > 0)
          {
          if (System.Text.RegularExpressions.Regex.IsMatch(strHTML, patern1))
          Console.WriteLine(strHTML);
             else
          Console.WriteLine("Сбой на сервере");
          }

          strHTML = st.ReadToEnd();
          st.Close();
          Response.Close();
          Request.Abort();

          чего добовлять то нужно?............ и вообще может я не в ту степь шагаю. Как вывести на страницу результаты парсера? :о(
      • надо выяснить что такое перегрузка в чистом Си, помогите кто может, очень надо
      • Возникла нужда посмотреть/показать хороший и небольшой ОО проект (исходные коды) на С++ (демонстрационный), и я не смог найти ничего подходящего ни у себя, ни в сети. Парадокс.

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

        Версия С++ не имеет значения, кто может дать ссылку на такой демо-проект, может кто знает где он такой есть?
        • Здравствуйте.
          Помогите, пожалуйста, чайнику.
          Не могу получить нормальный ответ от сервера для POP3.
          Выдает почему-то "43" , не могу понять в чем дело. :(
          листинг после connect():
          .........................................................................
          . . .
          // ... создание сокета ...
          . . .
          if (SOCKET_ERROR == connect (s, (sockaddr*)&address, sizeof (address))) { return("connection error"); }
          int iResult;
          char status[1024]; // буфер для обработки информации
          String ^myResult;
          // проверяем готовность сервера ---------------------------
          iResult=recv(s, status, 1024, 0);
          if(iResult == SOCKET_ERROR) { return("error RECV"); }
          // посылаем имя пользователя ------------------------------
          char *iUser = "uwe.design";
          sprintf_s(status, "USER %s\r\n", iUser);
          send(s, status, sizeof(status), 0);
          // проверяем результат операции ---------------------------
          iResult=recv(s, status, 1024, 0);
          if(iResult == SOCKET_ERROR) { return("error LOGIN"); }
          myResult = iResult.ToString();
          return(iResult);
          . . .
        • MFC , VC++6 , имеется ресурс диалога, созданный в редакторе. В программе создаю диалог через Create  , а как программно узнать, каков размер ресурса - ширина и высота в пикселах ?
          GetWindowRect только что созданного диалога вертает нули... А может вообще до Create можно размеры узнать программно ?
        • Вот сел за освоение С++.... и как толькокоснулся вопроса подключения к Б.Д. стразу же стопор... Надеюсь очень на толковую помощ от ГУРУ!

          В общем то суть вопроса проста - как организовано в VisualStudio2008  подключение источников БД, скажем к MSSQL?
          Иначе:
          Надо мне написать приложение win32. Выбрал я такой проект при старте....
          Дальше мне надо бы установить соединение с MSSQL и подключиться к нему источником данных, заслать туда запросец какой-нибудь... Как правильно это сделать?
          Компонент, отвечающих за соединение с серверами я в упор не нахожу  :dontknow:, куда его.. как его.. ?  Может надо импортировать COM библиотеки и уже при помощи их средств что-то делать?
          Все что я спмог сделать - это подключить БД (через ODBC) в обозреватель серверов, а что с этим потом делать?  :dontknow:
          В общем я заблудился в мыслях... ничего не понимаю.. :-( почти паника!  :spy: :insane:
          Подскажите пожалуйста.
        • Здравствуйте, подскажите,плиз, как изменить цвет рабочей области по щелчку мыши...я примерно догадываюсь,как это сделать,но пока все мои попытки не увенчались успехом...наверно,потому что в visual c++ я полный ноль :dontknow:
        • помогите пожалуйста:
          в Borlad C++ 6.0
          подключаюсь через SQLConnection1 к базе данных mysql(установлена локально). потом через DataSource1
          в SQLTable1 загружается таблица(например "users")
          как мне теперь ее отобразить в DBGrid1 ???

          причем в свойствах SQLTable1  свойство TableName выдает на выбор именно те таблицы которые содержаться в моей базе данных.
          строка по кнопке
          SQLTable1->Active=true;
          рушит приложение.
          если это свойство установить в ручную то вылазит вот такая ошибка (см рисунок во вложении)
        • Нужно написать программу, способную генерировать и обрабатывать определенный вид исключения (программа должна содержать блоки try, catch, точку throw). Позаботься о том, чтобы исключение действительно могло возникнуть, продемонстровать работу перехватчика и обработчика исключений. Нужно обработать попытку записи в файл, открытый только для чтения.
          Вопрос, как проверить открыт файл для чтения или нет? Просто если я пишу
          Код:
          fstream file;
          file.open("mf.txt",ios::out);
          file<<"aeris"<<endl;
          то запись спокойно производится в файл и не выдается никаких ошибок,
          если fstream заменяю на ifstream - то ошибка ещё на этапе компиляции, программа тогда вообще не запустится..нужно чтобы запускалась, но выдавала ошибку..а потом поставить проверку как открыт файл - для записи только, или нет..Вот как это сделать? Очень жду помощи..
        • - Пишу программу на 'Borland C++ Builder 6.0 SP4';
          - Задача: Запустить программу 1.exe из ресурсов моей программу main.exe не извлекая её на диск.
          - То есть, необходимо запустить программу main.exe, затем извлечь из ресурсов 1.exe заменяя память другого процесса, чтобы запустилась программа 1.exe;
          - Данную схему вроде частично реализовал(Без переноса таблицы импорта и релоков).


          # TRFR.cpp:
          Код:
          #include "TRFR.h"
          #include "Main.h"
          //---------------------------------------------------------------------------
          bool (*pNtdllFunc)(HANDLE, LPVOID);
          //---------------------------------------------------------------------------

          TRFR::TRFR()
          {
              // ----
          }
          //---------------------------------------------------------------------------

          TRFR::~TRFR()
          {
              // ----
          }
          //---------------------------------------------------------------------------

          bool __fastcall TRFR::ZwUnmapViewOfSection(HANDLE ProcessHandle, LPVOID BaseAddress)
          {
              bool Result = false;
              // -----
              try
              {
                  HMODULE hNtdll = LoadLibrary("ntdll.dll");
                  if(hNtdll != NULL)
                  {
                      (FARPROC &)pNtdllFunc = GetProcAddress(hNtdll, "ZwUnmapViewOfSection");
                      pNtdllFunc(ProcessHandle, BaseAddress);
                      FreeLibrary(hNtdll);
                      Result = true;
                  }
              }
              catch(...) {}
              // ----
              return Result;
          }
          //---------------------------------------------------------------------------

          ULONG __fastcall TRFR::Protect(ULONG characteristics)
          {
              const ULONG mapping[8] = {PAGE_NOACCESS, PAGE_EXECUTE, PAGE_READONLY, PAGE_EXECUTE_READ, PAGE_READWRITE, PAGE_EXECUTE_READWRITE, PAGE_READWRITE, PAGE_EXECUTE_READWRITE};
              return mapping[characteristics >> 29];
          }
          //---------------------------------------------------------------------------

          bool __fastcall TRFR::GetMemoryToSection(HANDLE hProcess, LPVOID Mapping, LPVOID pRes, USHORT NumberOfSections, PIMAGE_SECTION_HEADER pSection)
          {
              bool Result = true;
              // ----
              for (USHORT i = 0; i < NumberOfSections; i++)
              {
                  Result = WriteProcessMemory(hProcess,
                      (LPVOID)(DWORD(Mapping) + pSection[i].VirtualAddress),
                      (LPCVOID)(DWORD(pRes) + pSection[i].PointerToRawData),
                      pSection[i].SizeOfRawData, NULL);
                  // ----
                  if(!Result) break;
              }
              // ----
              return Result;
          }
          //---------------------------------------------------------------------------

          DWORD __fastcall TRFR::RunFromResurs(LPTSTR ComLine, LPCTSTR ResName, LPCTSTR ResType)
          {
              bool Result = true;
              DWORD pPID = 0;
              // ----
              PROCESS_INFORMATION pi;
              STARTUPINFO si;
              ZeroMemory(&pi, sizeof(pi));
              ZeroMemory(&si, sizeof(si));
              si.cb = sizeof(STARTUPINFO);
              // ----
              PIMAGE_DOS_HEADER pDos = NULL;
              PIMAGE_NT_HEADERS pNt = NULL;
              PIMAGE_FILE_HEADER pFile = NULL;
              PIMAGE_OPTIONAL_HEADER pOptional = NULL;
              PIMAGE_SECTION_HEADER pSection = NULL;
              // ----
              LPVOID x = NULL, pRes = NULL, Mapping = NULL;
              HANDLE hProcess = NULL;
              HMODULE hInst = GetModuleHandle(NULL);
              // ----
              pRes = LockResource(LoadResource(hInst, FindResource(hInst, ResName, ResType)));
              if(pRes != NULL)
              {
                  pDos = PIMAGE_DOS_HEADER(pRes);
                  if (pDos->e_magic == IMAGE_DOS_SIGNATURE)
                  {
                      pNt = PIMAGE_NT_HEADERS(PCHAR(pRes) + pDos->e_lfanew);
                      if (pNt->Signature == IMAGE_NT_SIGNATURE)
                      {
                          pFile = &pNt->FileHeader;
                          pOptional = &pNt->OptionalHeader;
                          pSection = IMAGE_FIRST_SECTION(pNt);
                          // ----
                          Result = CreateProcess(NULL, ComLine, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
                          if(Result)
                          {
                              FMain->WLog("CreateProcess()");
                              hProcess = pi.hProcess;
                              pPID = pi.dwProcessId;
                              CONTEXT context;
                              context.ContextFlags = CONTEXT_FULL;
                              // ----
                              Result = GetThreadContext(pi.hThread, &context);
                              if(Result)
                              {
                                  FMain->WLog("GetThreadContext()");
                                  Result = ReadProcessMemory(pi.hProcess, (LPCVOID)(context.Ebx + 8), &x, sizeof(x), 0);
                                  if (Result)
                                  {
                                      FMain->WLog("ReadProcessMemory()");
                                      Result = ZwUnmapViewOfSection(pi.hProcess, x);
                                      if(Result)
                                      {
                                          FMain->WLog("ZwUnmapViewOfSection()");
                                          Mapping = VirtualAllocEx(pi.hProcess, (LPVOID)pOptional->ImageBase, pOptional->SizeOfImage, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
                                          if(Mapping != NULL)
                                          {
                                              FMain->WLog("VirtualAllocEx()");
                                              SIZE_T bsize = 0;
                                              DWORD previousProtection = 0;
                                              Result = VirtualProtectEx(pi.hProcess, Mapping, pOptional->SizeOfHeaders, PAGE_EXECUTE_READWRITE, &previousProtection);
                                              //FMain->WLog("VirtualProtectEx = '" + (String)(int)Result + "'");
                                              Result = WriteProcessMemory(pi.hProcess, Mapping, (LPCVOID)pRes, pOptional->SizeOfHeaders, &bsize);
                                              FMain->WLog("bsize = '" + (String)bsize + "'");
                                              if(Result)
                                              {
                                                  FMain->WLog("WriteProcessMemory()");
                                                  Result = GetMemoryToSection(pi.hProcess, Mapping, pRes, pFile->NumberOfSections, pSection);
                                                  if(Result)
                                                  {
                                                      FMain->WLog("GetMemoryToSection()");
                                                      Result = WriteProcessMemory(pi.hProcess, (LPVOID)(context.Ebx + 8), &Mapping, sizeof(Mapping), 0);
                                                      if(Result)
                                                      {
                                                          context.Eax = (ULONG)Mapping + pOptional->AddressOfEntryPoint;
                                                          // ----
                                                          SetThreadContext(pi.hThread, &context);
                                                          ResumeThread(pi.hThread);
                                                      }
                                                  }
                                              }
                                              else FMain->WLog("[WPM1] GetLastError = '" + (String)GetLastError() + "'");
                                          }
                                          else Result = false;
                                      }
                                  }
                              }
                              // ----
                              if(!Result && hProcess != NULL) TerminateProcess(hProcess, 0);
                              // ----
                              CloseHandle(pi.hProcess);
                              CloseHandle(pi.hThread);
                          }
                      }
                  }
              }
              // -----
              FreeResource(pRes);
              // ----
              return (Result) ? pPID : 0;
          }
          //---------------------------------------------------------------------------

          # TRFR.h:
          Код: (cppb)
          #include <Windows.h>
          #include <tlhelp32.h>
          #include <stdio.h>
          //---------------------------------------------------------------------------
          class TRFR
          {
              private:
                  bool __fastcall ZwUnmapViewOfSection(HANDLE ProcessHandle, LPVOID BaseAddress);
                  ULONG __fastcall Protect(ULONG characteristics);
                  bool __fastcall GetMemoryToSection(HANDLE hProcess, LPVOID Mapping, LPVOID pRes, USHORT NumberOfSections, PIMAGE_SECTION_HEADER pSection);
              public:
                  TRFR();
                  ~TRFR();
                  DWORD __fastcall RunFromResurs(LPTSTR AppName, LPCTSTR ResName, LPCTSTR ResType);
          };
          //---------------------------------------------------------------------------

          - Проблема в том, что если программу компилировать в режиме 'Debug', то всё нормально, запускается и выполняет свои функции, если скомпилировать в режиме 'Release', то на строчке 128:
          Код:
          Result = WriteProcessMemory(pi.hProcess, Mapping, (LPCVOID)pRes, pOptional->SizeOfHeaders, &bsize);
          - GetLastError() выдаёт ошибку 0x05:

          ERROR_ACCESS_DENIED
          5
          0x5
          - Вроде использую VirtualProtectEx(), вообщем что-то не могу сам допереть...


          # Добавлено: У Borland есть удобный класс для извлечения из ресурсов 'TResourceStream', но он мне не очень нравится. (Это так, вода...)


          P.S. -> Убедительно прошу, не нужно мне советовать следующее: А чем плох приём извлечения программы на диск с последующим запуском...
          - Задача конкретно поставлена. (Файл не должен извлекаться из ресурсов)
      • Есть такая проблема. Некая программа(HP Toolbox) которая прекрасно работает на WindowsXP, никак не хочет работать в Windows Server 2003. Я определил, что она при запуске вызывает API-функции GetVerson и GetVersionExA. Как можно их подменить. Или есть другой способ обойти это ограничение.
      • Представить на графике функцию, заданную в виде таблицы в текстовом файле. Определить ее среднее арифметическое значение.
        Я сделала текстовый файл такого вида:
        1 2
        2 3
        4 8
        1 9
        5 7
        Как сделать отдельно массив х и массив у, и запихнуть их в стоку Chart1. и так далее.
      • У меня на форме располагаются 13 TEdit. Как запретить для них всех ввод с клавиатуры символов?
      • Добрый день, поистине неисповедимы пути ассемблера, при написании этой программы хотелось что бы был найден максимальный элемент и показан на экране, и как результат на экране не то что нужно, подскажите что не так.

        begin:   jmp setup
            mass db 1,2,3,4,5
            max db'максимальный$'
        setup:
              mov cl,4
              lea bx,mass
              mov al,[bx]
              inc bx
              m2: cmp al,[bx]
              jnc m1
              mov al,[bx]
              m1: inc bx
              dec cl
              jnz m2
              mov max ,al
              mov ah,09
              lea dx,max
              int 21h
              xor ax,ax
              int 16h
              int 20h
      • Добрый день, подскажите что не так делаю, но ни какой информации на экране нет.
           .model   tiny ; модель памяти используемая для COM
           .code        ; начало сегмента кода
           org   100h ;начальное значение счетчика - 100h

        begin:   jmp setup
         переменные

        setup: mov ah,09h
        mov bx,1
        mov bl,01
        mov cx,11
        lea dx,titl1
        int 10h

        int 21h
        int 20h

        SEGMENT .data
        titl1 db 'Hello$',13,10

         RET ; завершение COM-программы

        end   begin
        • Есть, у меня, такой регистр сведений (периодический) ЦеныНоменклатуры. В нем каждой номенклатуре соответствует цена.
          Мне необходимо получить последнюю по дате цену к каждой номенклатуре. Код приведенный ниже работает, но мне необходимо реализовать это в виде запроса,
          а я что-то не пойму как мне в запросе в условии указать  - что бы выбиралась только последняя цена на каждую номенклатуру, т.е. запрос должен возвращать ссылку на номенклатуру, и одну, последнюю(по дате) цену к ней (что бы по каждой номенклатуре была только одна запись). Может кто знает как мне указать условие на последнюю цену

          Код:
          Цены = РегистрыСведений.ЦеныНоменклатуры;
          Струк = Новый Структура;
          струк.Вставить("Номенклатура",Ном.Ссылка);
          ТекЦена=цены.ПолучитьПоследнее(ТекущаяДата(),струк);
          Если ТекЦена.цена<>0 тогда
          Цена=Формат(ТекЦена.цена,"ЧГ=0");
          иначе             Цена=0;
          конецесли;
      • Простеньких файловый web-сервер на Java. Был сделан для служебных целей.
  • Операционные системы
      • возможно ли в принципе такое:
        запустив процесс, задать ему имя (отличное от имени модуля), которое будет видно в диспетчере ?
      • Я построил локальную сеть для поддержки Network Load Balancing на Windows Server 2003 Enterprise Edition R2 с параметрами:

         0. Switch : Micronet -
         1 - ПС:
           IP: 10.0.0.1
           Mask: 255.0.0.0
           DNS Server: 10.0.0.1

         2 - ПС:
           IP: 10.0.0.2
           Mask: 255.0.0.0
           DNS Server: 10.0.0.2

        3. Cluster IP: 10.0.0.10   www.nlbtest.com / port range :80 and 80  / multcast / affinity:Single / Load weight: Equal.

        Проблема в том, что: когда я создаю Новый Кластер, то могу прибавить только один компютер и это тот, на котором я запускал программу NLB Manager, а добавить второй компьютер не получиться: Host Unreachable. Хотя локальную сеть работает нормально.
         
         - Я думал, что: есть 3 источника ошибки: из за Switch; из - за Network Card on PC или Windows.
  • Направления программирования
      • Доделал наконец-то драйвер свой, пришло время устанавливать и проверять. Конечно не обошлось без глюков, при установке драйвера выскочил синий экран  :dontknow: .. Решил использовать SoftICE для дебага кода драйвера, почитал тюториал, запускаю SoftICE и вижу:
        SoftICE Start Failure

        Error code 1058
        Указанная служба не может быть запущена, поскольу она отключена или все связанные с ней устройства отключены.

        Смотрел в Computer Managment запущенные службы. Нашел там только одну, относящуюся хоть как-то к SoftICE (DrivetStudio Remote Control). Запустить ее тоже не могу, пишет, что отказано в доступе.

        Я честно говоря в ступоре, в мануале SoftICE ничего про это не нашел. :o Подскажите, че делать!

        UPD: кстати, утилита DriverMonitor из пакета Compuwave Driver Studio тоже не работает - вешает систему с синим экраном. может я уж совсем какой-то левый дистрибутив скачал?
      • Возвращаясь к пакетной передачи данных по PCI шине... Будет ли организована пакетная передача данных от PC к устройству, если драйвер устройства вызовет команду WRITE_REGISTER_BUFFER_ULONG? Или будут идти одиночные транзакции с передачей адреса в каждой транзакции? Почему?
        • вот такой код был

          Код: (javascript)
          function setopacity(id, id_parent)
          {

           obj = document.getElementById('zoomimage'+id);
           obj.style.height = 'auto';
           obj.style.width = 'auto';
           obj.style.display = 'block';
           parent = document.getElementById('i'+id_parent);
           top = parent.offsetTop;
           left = parent.offsetLeft;
           obj.style.top=top_+'px';
           obj.style.left=left+'px';
          }
          FF легко с ним справился.
          ИЕ все время выдавал ошибку и отказывался работать.
          путем экспериментов выяснил и заменил
          parent на obj1
          top на top_

          Результат
          Код: (javascript)
          function setopacity(id, id_parent)
          {
           obj = document.getElementById('zoomimage'+id);
           obj.style.height = 'auto';
           obj.style.width = 'auto';
           obj.style.display = 'block';
           obj1 = document.getElementById('i'+id_parent);
           top_ = obj1.offsetTop;
           left = obj1.offsetLeft;
           obj.style.top=top_+'px';
           obj.style.left=left+'px';
          }

  • Практические разделы
      • База данных создавалась на Access'e 2003. Создавались таблицы с помощью конструктора. А вот как теперь посмотреть код, который сгенерировал этот конструктор. Т.е. я могу посмотреть взаимосвязь таблиц, структуру БД, диаграмму "сущность-связь". Но хотелось бы еще иметь на руках код таблиц, типа create table ...
        Главное не путать с тем, что я не спрашиваю, как создать запрос на SQL, это как раз понятно :), непонятно как посмотреть код того, что там генерирвал конструктор.
      • Немогу понять что с компом (Celeron 2.53,512 Озу,Видюха AGP Ge Force 6200,Hdd Ide 40 Gb) !!! Вообщем проблема возникла недавно - когда я гружу винду,работаю без проблем,но как только дело доходит до обычной перезагрузки,я нажимаю перезагрузить,комп вырубается нормально но почему то не хочет грузиться заново,тупо стоит и ждёт пока я нажму RESET !!! Кто нибудь знает из-за чего это ? Кто нить с этим сталкивался ?  Я уже пробовал форматнуть жёсткий,втыкал другой Hdd,ставил другую винду и пак 2 и 3,ничего не помогает ((((  :o
      • Однажды досталась мне в дар (сам ни за что не купил бы Gygabyte) "мамка" GA-965P-DQ6,
        Пару месяцев работала как часы, как то раз, (чё я туда полез!!?) включил в BIOSе
        FAN Speed Control Method Intel(R) QST, сразу после этого BIOS выдал красное окошко
        (типа сейчас будет перезагрузка) на пару секунд и комп сам уходит в глубокий перезагруз
        (например как после поднятия частот или напряжения). Дальше всё как у всех: 2-3 секунды
        крутит кулера, перезагрузка, и так в цикле... :( После кучи тщетных попыток вернуть комп
        к жизни своими руками (сбрасывал CMOS и джампером и удалением таблетки, отключал питание
        с матери, всю периферию, пробовал разные планки памяти во всех возможных комбинациях и режимах,
         втом числе и из списка motherboard_memory_ga-965p-dq6, другой процессор, видюха, блок питания,
        убедился в работоспособности всего железа, и reset у меня не залип), полез за хелпом в интернет.
         Людей с такой же проблемой оказалось не мало, много разных путей приведших к болезни с одним
        симптомом - циклический перезагруз. Советы по выходу из ситуации не блещут разнообразием и
        максимум сводятся к перепрошивке BIOSа. Но как прошить BIOS, если комп больше трёх секунд не работает?
        Мне бы совет из ряда: ткните туда-то тестером и если сопротивление меньше такого-то, то вот это
        надо перепаять. P.S. По внешним признакам мамка уже была в ремонте - по всей плате процарапаны
        почти все дорожки (видимо диагностировали уже разок), и есть пара-тройка элементов явно не с завода.
        Внешне на плате нет битых или перегретых элементов (да и с чего им вдруг взяться?! я отвёрткой  мать
        не курочил, оверклока небыло, температура 32-45 градусов всегда бдилась кучей утилит...)
        Система: MB GA-965P-DQ6, CPU PentiumD 945 3,4Ghz, MEM 2 x DDR2 667Mhz (пробовал в SS и DS - Hunix HYMP512U64AP8-Y5,
        Samsung KRM378T2953CZ0-CE6, Geil GX22GB5300DC), GeForce 7950 GT 256Mb Leadtek, HDD Seagate Barracuda 7200 16Mb,
        TSSTcorp CD/DVD-RW SH-S182D.
        Пожалуйста помогите, а то с этим кризисом мне не скоро удастся обновиться, могу выслать фотки девайса.
        Заранее за любой совет огромное человеческое... :) (кроме советов обнулить или перепрошить что нибудь).
      • Сначала проблема, подробности потом (сражу скажу - хард не причём).
        Итак, имеется новенький (3-4 месяца) комп - Р4 3ГГц НТ 512Мб память.
        При копировании больших объёмов данных - папки размером от 700МБ до 4Г возникает ошибка чтения (или записи?), которая выражается в след.
        Один файл отличается от другого всего одним байтом, а точнее одним битом. Всегда меняестя 1 на 0. например
        оригинал 1001 1110
        копия      0001 1110
        никогда небыло, чтобы 0 на 1 поменялся или чтобы 2 байта были разные всегда 1 бит/файл.

        Стабильно одна! ошибка (один бит) в одном файле (при копировании например СД). Если в папке есть файлы размером 700М-2Г (iso images)
        то каждый из них посде копирования содержит ошибку, но только одну! тот же пресловутый 0 вместо 1.

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

        Если перекопировать "ошибочные" файлы поодиночке, то всё в порядке.

        Повторяемость практически 100% (кажется один раз получилось скопировать без ошибок). Вероятность возникновения ошибки растёт с размером файлов. Файлы от 1М содержат ошибки спонтанно, но всегда! один файл (диск с цифровыми фотками файлы ~1-2M) из папки. Большие файлы - начиная с 500МБ всегда содержат ошибку.

        условия тестов:
        Систиемы 2000 и ХР,  98 ДОС дискета на FAT32
        всё лицензионное из MSDN
        Файловые системы NTFS и FAT32

        Условия возникновения:

        копирование в пределах одной партшин (NTFS и FAT32)
        копирование в между разными партишн (все комбинации NTFS и FAT32)
        копирование с СД на хард
        копирование через сеть (причём не важно - со сбойного компа или на него)
        копирование через сеть на сбойном компе, те когда в эксплорере "нормального"  копируешь папки на сбойном из одного места в другое

        Ошибки не происходит:
        при копировании под ДОС (вин98 дискета на FAT32)
        при копировании через сеть под эксплорером сбойного на нормальном компе

        Теперь про хард, сначала на него думал. При установки его на нормальный комп работает как часы. А другой хард установленный на "сбойном" ведёт себя точно так же с повторяемостью 100%.

        Вот, вроде всё подробно описал. Время возникновения ошибки неизвестно, может была с самого начала (была предустановлена домашняя хрюша, но была сразу же (при первом же включении) убита и заменена на профессиональную).
        Заметил, после того как начал сохранять данные на DVD - в файлах были ошибки. Сначала боролся с проблемой DVD writer-а. А потом сравнил неровский имадж с оригиналом (через ImageDrive) и в нём уже были ошибки. Так и установил, что проблема с чтением/записью.
        Кстати даже если использоавать в неро другой сетевой комп как цель и не делать кэширование, всё-равно имадж получается с ошибками.

        Может кто спотыкался об такое?
      • Знаю подобных программ (сабж) полно. Но пользоваться никогда не приходилось. Сейчас возникла необходимость протестировать работу своей программы у заказчика. Он уверяет, что программа не работает, а у меня все Ok, причем на разных машинах, системах и виртуальной машине.
        Знаю, что в XP есть фича - удаленный рабочий стол, но насколька она удобна? В общем, буду благодарен за любой совет.
      • где-то месяц сидел без антивируса в интернете на новом компьютере, теперь наконец-то купил, но касперский не устанавливается. после установки вылетает и всё. Диспетчер задач не открывается и всё что связанно с касперским не удаляется и не открывается. что делать??
  • Учимся программировать
  • Клубное
      • Послание к Гарсии
        Элберт Хаббард.


        Во всей этой истории с Кубой один человек всё время появляется на горизонте моей памяти, как Марс в перигелии.
        Когда развязалась война между Испанией и Соединёнными Штатами, появилась необходимость быстро передать сообщение лидеру повстанцев. Гарсия был где-то в безбрежных горах Кубы - никто не знал где именно. Никакая почта, никакие телеграфные сообщения до него не доходили. Президенту было необходимо заручиться его поддержкой и срочно.
        Что делать!?
        Кто-то сказал Президенту: «Есть один парень по имени Роуэн, и если кто-нибудь вообще сможет найти Гарсию, то это именно он».

        Послали за Роуэном и вручили ему письмо для Гарсии. Как именно этот «парень по имени Роуэн» взял письмо, запечатал его в непромокаемый мешочек, привязал его к себе на грудь, за четыре дня высадился на побережье Кубы из обычной лодки, исчез в джунглях и через три недели вышел на другой стороне острова, пройдя пешком по враждебной стране и доставив письмо Гарсии - мне не хочется сейчас рассказывать подробно. Смысл в том, что МакКинли дал Роуэну письмо для Гарсии. Роуэн взял письмо и не спросил: «Где он сейчас находится?»
        Помилуй Бог! Есть ещё человек, чей облик нужно бы запечатлеть в вечной бронзе и поставить статую в каждом учебном заведении на планете. Не нужно учить молодежь по книгам, давать им наставления о том и сём - нужно лишь укрепить каждую их косточку, которая бы сделала их преданными товарищами, способными действовать должным образом, концентрировать свои силы, делать такие вещи - «доставить письмо Гарсии».

        Генерал Гарсия сейчас ушел в мир иной, но есть и другие Гарсии. Нет такого человека, из тех, кто взялся за дело, требующее участия многих людей, кого время от времени не поражала бы глупость среднего человека - неспособность или нежелание сконцентрироваться на одной вещи и довести её до конца.
        Бездарная помощь, дурацкая невнимательность, неряшливость, безразличие и работа вполсилы, похоже, стали нормой дня; и ни один человек не может преуспеть, разве только он кнутом и пряником или угрозами принуждает людей или подкупает других, чтобы те ему помогли. А может Господь Бог в добром расположении духа совершит чудо и пришлёт ему Ангела Света в помощники.

        Вы, читатель, проверьте это: вот вы сидите в офисе - шестеро помощников на расстоянии одного звонка. Позовите любого и попросите: «Посмотри, пожалуйста, в энциклопедию и сделай краткий обзор жизни Коррегио».
        Скажет ли ваш помощник тихо: «Конечно, сэр», и пойдет выполнять поставленную задачу?
        Ставлю на что угодно, что нет. Он на вас посмотрит рыбьими глазами и спросит что-нибудь вроде:
        Это кто такой?
        В какой энциклопедии?
        А где взять энциклопедию?
        Меня что, для этого нанимали?
        То есть, вы имели в виду Бисмарка?
        А что, Алексей не может этого сделать?
        Он что, уже умер?
        Это так срочно?
        Может, я вам принесу книгу, а вы сами посмотрите?
        А зачем это всё надо?

        И ставлю десять к одному, что после того, как вы ответите на все его вопросы, и объясните, как найти информацию, почему она так важна, помощник пойдёт, возьмёт ещё кого-нибудь себе в помощники, чтобы найти Корреггио - а затем вернется обратно и скажет, что такого человека вообще не существовало. Конечно, я могу проиграть, но по закону средних величин вряд ли.
        Ну а если вы мудры, вы не станете объяснять своему «помощнику», что Корреггио нужно искать на букву «К», а не «Х», а хитро улыбнётесь и скажете: «Да ладно», пойдёте и посмотрите сами. И эта неспособность действовать самостоятельно, это моральная глупость, эта слабость воли, это нежелание с радостью ухватиться за верёвку и тянуть груз - это именно те вещи, которые отодвинули социализм в чистом виде настолько далеко в будущее. Если люди не будут действовать самостоятельно, что они сделают, когда результат их усилий на благо всем?

        Сможет ли такой человек написать письмо Гарсии?
        «Видишь того бухгалтера?» - сказал мне как-то начальник цеха на большом заводе.
        «Ну и что?»
        «Он хороший бухгалтер, но если я его пошлю в город с небольшим заданием, он может его выполнить, а может и заглянуть в четыре забегаловки по пути, а когда доберётся до главной улицы, то забудет, за чем его послали».
        Можно ли доверить такому человеку доставку письма Гарсии?
        В последнее время мы всё чаще встречаемся с тем, что «угнетённые работники кошмарного предприятия с низкой зарплатой» и «бездомный путешественник в поисках достойной работы» вызывают плаксивое сочувствие, а в адрес людей наверху лишь изливаются потоки ругательств.

        Ничего не говорят о работодателе, который стареет быстрее времени в напрасных стремлениях заставить плохо пахнущих, никогда не достигающих успеха работников выполнить поставленную задачу; и о его долгом терпении, когда «помощник» лишь бьет баклуши, когда начальника нет рядом. В каждом цехе и на каждой фабрике идёт постоянный процесс отсеивания. Работодатель постоянно увольняет «помощников», которые доказали свою неспособность помочь интересам дела и набирает новых. И неважно, насколько хорошо идут дела в целом - этот процесс идёт постоянно: только если времена трудные и работу найти нелегко, этот процесс идёт более тщательно - но некомпетентных и недостойных выгоняют и выгоняют навсегда. Это определяет выживание тех, кто подходит лучше всего. Личные интересы заставляют каждого работодателя оставлять лучших работников - тех, кто может донести письмо Гарсии.

        Я знаю одного по-настоящему умелого человека, у которого начисто отсутствуют способности работать самостоятельно и в то же время он абсолютно бесполезен другим людям из-за постоянного безумного подозрения, что начальник его подавляет или планирует его подавить. Он не может отдавать приказы и не может их принимать. Дайте ему послание к Гарсии, и в ответ вы, возможно, услышите: «Ну и несите его сами!»
        Сегодня этот человек ходит по улицам в поисках работы и ветер дует в его прохудившееся пальто. Никто его не нанимает, потому что он постоянно всем недоволен. До него не доходят разумные доводы и единственная вещь, которая может произвести на него впечатление - это носок толстого ботинка сорок пятого размера.

        Конечно, я знаю, что настолько морально пострадавших людей нужно жалеть не меньше, чем физических калек; но в нашем страдании давайте уделим слезу и тому человеку, который стремится поддержать нормальную работу великого предприятия, чей рабочий день не нормирован звонком, и чьи волосы быстро становятся седыми от борьбы за то, чтобы удержать в строю безразлично настроенных, безответственных имбецилов и неблагодарных, бессердечных «работников», которые, не будь их предприятия, были бы голодными и бездомными.
        Не слишком ли я закрутил гайки? Может быть и так, но когда весь мир восхищается трущобами, я хочу высказать слова признательности тому, что достигает успеха - тому, кто, несмотря на огонь и воду, направляет усилия других людей, а преуспев, ничего не получает; ничего, кроме лишь стола и одежды.

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

        Мое сердце отдано тому, кто выполняет свою работу, когда «босс» уехал точно так же, как будто «босс» на работе. И тому человеку, которому вручают письмо Гарсии, тихо берёт послание, не задавая никаких идиотских вопросов, не испытывая никаких тайных желаний выбросить его на ближайшую помойку или ещё каких-нибудь, кроме того, чтобы доставить письмо адресату, не откладывает дело в «долгий ящик» и не бастует за повышение зарплаты.

        Цивилизация - это один долгий непрекращающийся поиск таких людей. Все, что такой человек не попросит, нужно ему дать. Его разыскивают в каждом городе, посёлке и деревне - в каждом офисе, магазине, складе и фабрике. Мир кричит в попытках найти такого человека; он нужен, очень-очень нужен - тот, кто сможет ДОСТАВИТЬ ПИСЬМО ГАРСИИ.


        Письмо написано в 1898 году

        "Послание к Гарсиа" ("A Message to Garcia" - этот сделанный за считанные часы конспект одной беседы, состоявшейся между отцом и сыном Хаббардами (основатель сайентологии Рон Л. Хаббард доводился им родственником) в конце 19-го столетия есть одной из 10 самых покупаемых книжек в мире.

        Они говорили об итогах испано-американской войны 1898 года, и журналист Элберт, отец, считал, что исход этого конфликта был решен не столько политиками, сколько простым офицером Эндрю Роуэном. Этот человек получил приказ доставить сообщение Гарсиа, генералу испанцев, расквартированных на Кубе, и успешно выполнил задание.

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

        "Послание к Гарсиа" не выходит по сей день из рейтингов пятидесяти самых полезных книг по самосовершенствованию.
      • Закон об авторском праве допускает присвоение права собственности на способ выражения идеи, но не саму идею. В результате на текст параграфа в книге авторские права распространяются, а на изложенную в этом параграфе идею - нет. Как распространить это право на исходные тексты программ и алгоритмы, которые они выражают? И в какой степени можно разрешать людям, которые знают алгоритмы, лежащие в основе коммерческих программ, писать собственные программы, выражающие те же алгоритмы, и продавать эти версии программного обеспечения на рынке?
        • Фотографии на длинной выдержки и малой диафрагме для съёмки рисунков,созданных огоньками.
          ...
          2008 has been an eventful year to say the least - it is difficult to sum up the thousands of stories in just a handful of photographs. That said, I will try to do what I've done with other photo narratives here, and tell a story of 2008 in photographs. It's not the story of 2008, it's certainly not all stories, but as a collection it does show a good portion of what life has been like over the past 12 months. This is a multi-entry story, 120 photographs over three days. Watch for part 2 and part 3 tomorrow and the next day. (40 photos total)

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


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


В избранное