Logo    
Деловая газета CitCity.ru CITKIT.ru - все об Open Source Форумы Все публикации Учебный центр Курилка
CitForum    CITForum на CD    Подписка на новости портала Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

16.01.2017

Google
WWW CITForum.ru
С Новым годом!
2004 г.

Разработка WEB-сервисов в среде Delphi 8

Евгений Веселов, Михаил Голованов, «Королевство Delphi»

Что такое WEB-сервис ?

Что такое WEB-сервис наверное знает каждый. WEB-сервисы не собственность компании Microsoft, а целый промышленный стандарт на основе открытых протоколов HTTP и SOAP, однако использование в качестве средства разработки платформы .NET позволит создавать WEB-сервисы очень быстро и просто.

WEB-сервисы представляют собой специального типа WEB-приложения, не имеющие пользовательского интерфейса. Однако благодаря наличию WEB-методов могут в реальном времени предоставлять информацию о… да о чем угодно ! Будь то прогноз погоды или курс валют, информация о наличии свободных мест на утренний сеанс в Вашем любимом кинотеатре. Одним словом - WEB-сервис предоставляет услуги другим приложениям, причем последние могут быть любого типа, как WEB-приложениями так и обычными приложениями с графическим интерфейсом. WEB-сервис имеет следующие отличительные особенности:

  • Выполняется на стороне сервера
  • Предоставляет набор методов, доступных внешним клиентам.
  • Исполняет WEB- методы и возвращает результаты клиентам
  • WEB-сервис и его клиенты могут быть написаны на разных языках и/или разных платформах.

На этом позволим себе временно отстраниться от теории и перейти к практике

Простейший WEB-сервис

Давайте запустим Delphi 8 и создадим WEB-сервис, который назовем SampleWebService

Рис.1 Выбор типа создаваемого приложения
Рис.1 Выбор типа создаваемого приложения

Рис.2 Диалог создания  проекта.
Рис.2 Диалог создания проекта.

Delphi 8 создаст для нас простейший WEB-сервис. Состав файлов в проекте WEB-сервиса требует отдельного описания, которое будет дано немного позже. Сейчас же рассмотрим файл WebService1.pas, который содержит описание класса TWebService1

TWebService1 = class(System.Web.Services.WebService)
  {$REGION 'Designer Managed Code'}
  strict private
    /// <summary>
    /// Required designer variable.
    /// </summary>
    components: IContainer;
    /// <summary>
    /// Required method for Designer support - do not 
    /// modify the contents of this method with 
    /// the code editor.
    /// </summary>
    procedure InitializeComponent;
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    procedure Dispose(disposing: boolean); override;
  private
    { Private Declarations }
  public
    constructor Create;
    (*
    // Sample Web Service Method
    [WebMethod]
    function HelloWorld: string;
    *)
  end;

Обратите внимание на закомментированный метод WEB-метод HelloWorld, (WEB-метод он потому, что ему назначен атрибут [WebMethod]). Давайте попробуем раскоментировать его и его реализацию. Вот и все. Наш первый WEB-сервис готов. Как его протестировать? Очень просто, нажмите F9.

Результат не заставить себя долго ждать, вы увидите страницу подобную приведенной на рис. 3.

Рис 3. Автоматически  сгенерированная страница-описание WEB-сервис
Рис 3. Автоматически сгенерированная страница-описание WEB-сервис

Как протестировать WEB-метод Вы наверное уже догадались? Если нет, то кликните по ссылке HelloWorld.

рис 4. Тестирование WEB-метода
рис 4. Тестирование WEB-метода

После нажатия на кнопку "Invoke" наш WEB-сервис стартует и вернет потрясающий результат в виде XML:

<?xml version="1.0" encoding="utf-8" ?> 
  <string xmlns="http://tempuri.org/">Hello World

Ну что ж, первой цели мы достигли: научились создавать простейший WEB-сервис, предоставляющий WEB-метод и все это успешно протестировано.

WEB-методы

Атрибут WebMethod

Как и было заявлено выше, обычный метод класса отличается от метода, публикуемого WEB-сервисом только наличием атрибута WebMethod. Данный атрибут имеет составной характер, т.е может содержать следующие податрибуты (Рассмотрим лишь некоторые из них):

  • CacheDuration - Кэширование результатов работы метода на заданное количество секунд. (например, метод с такими атрибутами будет хранить результат своей работы в течении 15 секунд : [WebMethod(CacheDuration="15")] ).
  • Description - Добавляет текстовое описание WEB-метода.
  • MessageName - Имя WEB-метода. Полезно, например, когда нужно опубликовать перегруженный метод класса.(наличие двух одноименных WEB-методов запрещено)

В качестве примера давайте добавим к нашему классу еще два метода и добавим описание к существующему методу HelloWorld:

TWebService1 = class(System.Web.Services.WebService)
  // Экономия  места
  public
    constructor Create;
    // Sample Web Service Method

    [WebMethod
    (MessageName = 'HelloWorld' , Description = 
                   'Простой метод')]
    function HelloWorld:String;

   [WebMethod (MessageName = 'IntegerSubstract')]
     function Substract(a,b:Integer):Integer;overload;

    [WebMethod (MessageName = 'FloatSubstract')]
    function Substract(a,b:Single):Single;overload;

Реализация методов тривиальна:

function TWebService1.Substract(a,b:Integer):Integer;
begin
 Result := a - b;
end;

function TWebService1.Substract(a,b:Single):Single;
begin
 Result:= a - b;
end;

Запустите добавленные WEB-методы. Обратите внимание, что мы использовали механизм перегрузки функций, но при этом не пострадали от ограничений связанных с именованием WEB-методов: WEB-сервис предоставляет их как методы с различными именами.

Сложные типы данных в WEB-методах

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

На самом деле решение проблемы не представляет особых сложностей. Давайте попробуем ее решить. Итак, пусть нам необходимо создать сервис, возвращающий курс доллара за указанный промежуток времени.

Итак, курс доллара будет представлен следующим классом:

TDollarRate = class
  public
    Cost:Integer;
    Date:TDateTime;
   constructor Create;
  end;

constructor TDollarRate.Create;
begin
 inherited Create;
 Cost:=20 + Random(5);
 Date:=DateToStr(DateTime.Now);
end;

Перед добавлением WEB-метода объявим тип TDollarRates = Array of TDollarRate, в секцию uses добавим Borland.Vcl.SysUtils. Метод имеет вид:

[WebMethod]
  function GetRatesForDays (ADays:Integer):TDollarRates;

  function TWebService1.GetRatesForDays 
          (ADays:Integer):TDollarRates;
var
  i:Integer;
begin
  SetLength(Result,ADays);
  for i:=ADays-1 downto 0  do
  Result[i]:=TDollarRate.Create;
end;

Попробуем протестировать метод (рис 5).

Рис. 5 Тестирование метода, возвращающего массив объектов
Рис. 5 Тестирование метода, возвращающего массив объектов Результат превзошел все ожидания:

  <?xml version="1.0" encoding="utf-8" ?> 
- <ArrayOfTDollarRate 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://tempuri.org/">
- <TDollarRate>
  <Cost>23 
  <Date>28.04.2004 
  </TDollarRate>
- <TDollarRate>
  <Cost>23 
  <Date>28.04.2004 
  </TDollarRate>
- <TDollarRate>
  <Cost>20 
  <Date>28.04.2004 
  </TDollarRate>
  </ArrayOfTDollarRate>

В процессе разработки этого примера мы были неприятно удивлены одной деталью (версия Delphi 8 7.1.1146.610): мы попытались объявить новый конструктор с параметрами:

TDollarRate = class
  public
    Cost:Integer;
    Date:TDateTime;
   constructor Create(Adays:Integer);
  end;

constructor TDollarRate.Create(Adays:Integer);
var sDate:TDateTime;
begin
 inherited Create;
 {Код}
end;

и получили следующую ошибку при старте WEB-сервиса:

рис 6. Как же переопределить конструктор ?
рис 6. Как же переопределить конструктор ?

Как сделать новый конструктор Default public в Delphi 8 не совсем понятно, однако выручило переименование конструктора следующим образом:

TDollarRate = class
  public
    Cost:Integer;
    Date:String;
   constructor TDollarRate(Adays:Integer);
  end;

Результат работы стал таким:

"?xml version="1.0" encoding="utf-8" ?> 
- <ArrayOfTDollarRate 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://tempuri.org/">
- <TDollarRate>
  <Cost>21 
  <Date>26.04.2004 
  </TDollarRate>
- <TDollarRate>
  <Cost>24 
  <Date>26.04.2004 
  </TDollarRate>
  </ArrayOfTDollarRate>

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

Архитектура WEB-сервиса

По большому счету WEB-сервис представляется всего одним файлом, с расширением Asmx, который должен как минимум иметь примерно такой заголовок:

<%@ WebService Language="c#"  
    Class="WebService1.TWebService1" %>

Далее может идти код, собственно реализующий функциональность WEB-сервиса. Этот код должен быть написан на одном из языков .NET платформы (например C#).

К великому сожалению, создать WEB-сервис на Object-Pascal таким образом пока нельзя. Однако разработчики платформы .NET предусмотрели возможность перенести код WEB-сервиса в отдельно компилируемую DLL(фоновый код). Частично для того, чтобы была возможность разрабатывать WEB-приложения на языках, непосредственно не поддерживающих ASP.NET, частично для того, чтобы диагностировать ошибки компиляции до развертывания самого сервиса.

Как вы уже догадались, Delphi 8 создает проект, компилируемый в DLL( которая, в свою очередь, помещается в корневой каталог приложения) и состоящий из таких частей:

  1. Автоматически сгенерированный файл <Имя сервиса>.asmx, состоящий из заголовка примерно такого вида:
    <%@ WebService Language="c#" Debug="true" 
                   Codebehind="WebService1.pas" 
    	              Class="WebService1.TWebService1" %>
  2. <Имя сервиса>.pas с которым мы успешно работали :-)
  3. Global.asax, и его Pascal-реализация. Для чего он нужен, можно почитать в MSDN.

Как вы наверняка уже догадались для тестирования сервиса достаточно в браузере набрать строку

http://localhost/<путь к сервису>/<имя сервиса>.asmx

Для вызова метода

http://localhost/<путь к сервису>/
<имя сервиса>.asmx /? Op= <имя операции>.

WSDL - язык описания WEB-сервисов.

Мы практически готовы к тому, чтобы перейти к созданию клиента для нашего WEB-сервиса. Нам осталось только узнать как сторонние разработчики (пользователи нашего сервиса) могут узнать какие методы поддерживает WEB-сервис, сигнатуры этим методов, URL сервиса, типы используемых данных. Вся эта информация описывается при помощи языка WSDL. Тем не менее, вам не придется его изучать, так как этот язык больше для компьютеров, не для людей. Как же получить описание нашего WEB-сервиса на языке WSDL? Да очень просто, достаточно ввести в браузере

http://localhost/<путь к сервису>/<имя сервиса>.asmx?wsdl

Ниже приведено описание TDollarRates и TDollarRate нашего примера:

- <s:complexType name="ArrayOfTDollarRate">
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="unbounded" 
             name="TDollarRate" 
             nillable="true" type="s0:TDollarRate" /> 
  </s:sequence>
  </s:complexType>
- <s:complexType name="TDollarRate">
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="Cost" 
             type="s:int" /> 
  <s:element minOccurs="0" maxOccurs="1" name="Date" 
             type="s:string" /> 
  </s:sequence>
  </s:complexType>

Создание клиента для WEB-сервиса.

После стольких усилий по изучению WEB-сервисов пришло время научится их использовать. Как и всегда ничего сложного в этом нет. В качестве примера создадим VCL Forms приложение. Его главная и единственная форма должна выглядеть примерно так:

Рис. 7. Форма Веб-Калькулятора
Рис. 7. Форма Веб-Калькулятора

Осталось только "оживить" нашу форму. Для этого выберите пункт меню Project/Web Reference.

В диалоге, который откроется, укажите URL к WSDL описанию нашего сервиса В нашем случае это -

http://localhost/SampleWebService/WebService1.asmx?WSDL

Нажмите кнопку "GO" а потом "AddReference".

Рис. 8. Добавление ссылки на WEB-сервис.
Рис. 8. Добавление ссылки на WEB-сервис.

Прокси WEB-сервиса

В общем-то, ничего особенно не изменилось, за исключением того, что в проект был добавлен файл localhost.WebService1.pas, содержащий в себе класс TWebService1. Этот класс называется прокси WEB-сервиса, это локальный представитель WEB-сервиса для нашего клиентского приложения. Файл localhost.WebService1.pas сгенерирован автоматически, и менять его реализацию не рекомендуется, однако если посмотреть на него ближе (здесь приведена только секция interface) можно сделать некоторые выводы.

Итак:

  1. Прокси WEB-сервиса не выполняет никаких действий, но переправляет вызовы методов WEB-сервису.
  2. Прокси обязательно должен знать, с каким WEB-сервисов он связан, что подтверждается реализацией его конструктора:
    constructor TWebService1.Create;
    begin
      inherited Create;
      Self.Url := 'http://localhost/SampleWebService
                         /WebService1.asmx';
    end;
    
  3. Прокси обеспечивает вызов WEB-методов в синхронном и асинхронном режимах.

Вызов WEB-методов. Асинхронный режим.

Ниже приведен код нашего клиентского приложения, умеющего выполнить WEB-метод, и отобразить результат:

unit Umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, 
  Graphics, Controls, Forms, Dialogs, 
  Borland.Vcl.StdCtrls, System.ComponentModel,
  localhost.WebService1;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit3: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FWEBProxy:TWebService1;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.nfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FWEBProxy:=TWebService1.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:= IntToStr(FWEBProxy.Substract
  (StrToInt(Edit1.Text),StrToInt(Edit2.Text) ));
end;

end.

Рис 9. Веб калькулятор в действии
Рис 9. Веб калькулятор в действии

Теперь давайте усложним задачу? Заставим метод Substract возвращать результат через определенное время? В этом случае наше клиентское приложение попросту будет "висеть" пока WEB-метод не отработает. Давай добавим в WEB-метод Substract нашего WEB-сервиса имитацию бурной деятельности:

function TWebService1.Substract(a,b:Integer):Integer;
var i:Integer;
begin
 Sleep(5000);
 Result := a - b;
end;

Так вот теперь, если запустить наш калькулятор, он будет успешно зависать на почти пять секунд. Возможно, нам нужно выполнять программу дальше, даже если результат WEB-метода еще не получен? Для этого существует возможность вызвать метод асинхронно.

Обратите внимание на то что в описании интерфейса прокси класса есть методы Begin<имя WEB-метод> и End<WEB-метод>, например BeginSubstract, EndSubstract. Схема их использования примерно таковы:

  1. BeginSubstract, EndSubstract
    procedure TForm1.Button1Click(Sender: TObject);
    var asyncres:IAsyncResult;
    begin
      asyncres:=FWEBProxy.BeginSubstract
                (StrToInt(Edit1.Text),
                StrToInt(Edit2.Text),nil,nil);
      // какой-то код
      Edit3.Text:= IntToStr(FWEBProxy.EndSubstract
                   (asyncres));
    end;
    

    Это означает, что метод BeginSubstract инициирует выполнение WEB-метода, но при этом не останавливает выполнение основного приложения. В момент вызова EndSubstract завершается выполнение WEB-метода. Если последний еще не отработал - клиентское приложение блокируется до завершения работы метода.

  2. Использование свойства IsCompleted интерфейса IAsyncResult.
    procedure TForm1.Button1Click(Sender: TObject);
    var asyncres:IAsyncResult;
    begin
       asyncres:=FWEBProxy.BeginSubstract
                 (StrToInt(Edit1.Text),
                 StrToInt(Edit2.Text),nil,nil);
       while not asyncres.IsCompleted 
             do Application.ProcessMessages;
       Edit3.Text:= IntToStr(FWEBProxy.EndSubstract
                    (asyncres));
    end;
    
  3. Подписка за событие о завершении асинхронного вызова.
    unit Umain;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, 
      Graphics, Controls, Forms, Dialogs, 
      Borland.Vcl.StdCtrls, System.ComponentModel,
      localhost.WebService1;
    
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Edit3: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        FWEBProxy:TWebService1;
        procedure SubstratctFinished (Res:IAsyncResult);
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.nfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     FWEBProxy:=TWebService1.Create;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     FWEBProxy.BeginSubstract(StrToInt(Edit1.Text),
                              StrToInt(Edit2.Text),
       SubstratctFinished,nil);
    end;
    
    procedure TForm1.SubstratctFinished
                    (Res: IAsyncResult);
    begin
     Edit3.Text:= IntToStr
                  (FWEBProxy.EndSubstract(Res));
    end;
    
    end.
    

Заключение

В этой статье мы показали особенности создания WEB-сервисов при помощи Delphi 8. Надеемся, что она поможет Вам в работе.

Размещение рекламы — тел. +7 495 4119920, ICQ 232284597

Подписка на новости IT-портала CITForum.ru
(библиотека, CITKIT.ru, CitCity)

Новые публикации:

24 декабря

CITKIT.ru:

  • Новогодние поздравления
  • Сергей Кузнецов. Цикл Операционные системы: Ностальгия по будущему:

  • Алексей Федорчук. OpenSolaris 2008.11 Release

  • Сергей Голубев:

  • Евгений Чайкин aka StraNNik (Блогометки):

    17 декабря

  • С.Д.Кузнецов. Базы данных. Вводный курс

    10 декабря

    CITKIT.ru:

  • OpenSolaris 2008.11 Release

  • Альтернативные ОС: две грустные истории (С.Кузнецов)
  • Nokia N810 — доведение до ума
  • CitCity:

  • Платформа 2009: заоблачные перспективы Microsoft

    4 декабря

  • Лекция С.Д.Кузнецова Понятие модели данных. Обзор разновидностей моделей данных

    CITKIT.ru:

  • OpenSolaris 2008.11 Release. Первые впечатления

  • Linux vs FreeBSD: продолжим "Священные войны"?

  • Nokia N810 as is

  • Индульгенция для FOSS

  • Друзья СПО'2008

    26 ноября

  • Нечеткое сравнение коллекций: семантический и алгоритмический аспекты

    CitCity:

    CITKIT.ru:

  • Глава из книги А.Федорчука
    Сага о FreeBSD:
  • 19 ноября

  • Проблемы экономики производства крупных программных продуктов

  • Язык модификации данных формата XML функциональными методами

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

    Заметки к книге:

  • FreeBSD: монтирование сменных устройств и механизм HAL
  • Текстовый редактор ee

    12 ноября

  • Правило пяти минут двадцать лет спустя, и как флэш-память изменяет правила (Гоц Грейф, перевод: Сергей Кузнецов)

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:
  • OSS в России: взгляд правоведа (В.Житомирский)

  • Новая статья из цикла С.Голубева "Железный марш":

    29 октября

  • О некоторых задачах обратной инженерии

  • Веб-сервисы и Ruby

  • Тестирование web-приложений с помощью Ruby

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

  • PuppyRus Linux - беседа с разработчиком (С.Голубев)

  • Сергей Кузнецов. Заметка не про Linux

    22 октября

  • Обзор методов описания встраиваемой аппаратуры и построения инструментария кросс-разработки

    CITKIT.ru:

  • Сергей Кузнецов. Почему я равнодушен к Linux

  • Глава из книги А.Федорчука
    Сага о FreeBSD:
  • Что надо иметь
    3. Базовые познания

    CitCity:

  • Управление IT-инфраструктурой на основе продуктов Microsoft

    15 октября

  • Методы бикластеризации для анализа интернет-данных

    CitCity:

  • Разъемы на ноутбуках: что они дают и зачем их так много?
  • AMD Puma и Intel Centrino 2: кто лучше?

    CITKIT.ru:

  • Новый цикл статей С.Голубева
    Железный марш:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

    8 октября

  • Автоматизация тестирования web-приложений, основанных на скриптовых языках
  • Опыт применения технологии Azov для тестирования библиотеки Qt3

    Обзоры журнала Computer:

  • SOA с гарантией качества
  • Пикоджоуль ватт бережет
  • ICT и всемирное развитие

    CitCity:

  • Пиррова победа корпорации Microsoft

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

    Статья из архива:

  • Я живу в FreeBSD (Вадим Колонцов)

    Новые Блогометки:

  • Перекройка шаблона Blogger или N шагов к настоящему
  • Blogger. Comment style
  • Screenie или глянцевый снимок экрана

    2 октября

    CITKIT.ru:

  • Сага о FreeBSD (А. Федорчук)

    Zenwalk: пакет недели

  • Банинг — интеллектуальное развлечение (С.Голубев)

    CitCity:

    25 сентября

  • Клермонтский отчет об исследованиях в области баз данных

    CITKIT.ru:

  • Пользователям просьба не беспокоиться... (В.Попов)

  • Снова про ZFS: диск хорошо, а два лучше
  • Командная оболочка tcsh (А.Федорчук)

    Zenwalk: пакет недели

    17 сентября

  • T2C: технология автоматизированной разработки тестов базовой функциональности программных интерфейсов
  • Технология Azov автоматизации массового создания тестов работоспособности

    CITKIT.ru:

  • FreeBSD: ZFS vs UFS, и обе-две — против всех (А.Федорчук)

    Zenwalk: пакет недели

  • Дачнет — практика без теории (С.Голубев)

    10 сентября

  • За чем следить и чем управлять при работе приложений с Oracle
  • Планировщик заданий в Oracle
    (В.Пржиялковский)

    CITKIT.ru:

  • Microsoft: ответный "боян" (С.Голубев)

  • Причуды симбиоза, или снова "сделай сам" (В.Попов)

  • Файловые системы современного Linux'а: последнее тестирование
  • Zsh. Введение и обзор возможностей
    (А.Федорчук)

    Описания пакетов Zenwalk: Zsh, Thunar, Thunar-bulk-rename, Xfce4-places-plugin, Xfce4-fsguard-plugin

    Блогометки:

  • Google Chrome
  • Лончер для ASUS Eee PC 701

    3 сентября

    CITKIT.ru:

  • Заметки о ядре (А.Федорчук):

    Добавлены описания пакетов Zenwalk: Galculator, Screenshot, Gnumeric, Pidgin

    В дискуссинном клубе:

  • И еще о Википедии и Google Knol

  • Лекция для начинающего линуксоида (С.Голубев)

    26 августа

  • Транзакционная память (Пересказ: С. Кузнецов)

    CITKIT.ru:

  • Открыт новый проект Zenwalk: пакет недели

  • Статья Текстовые процессоры и их быстродействие: конец еще одной легенды?

    21 августа

    CITKIT.ru:

  • Почему школам следует использовать только свободные программы (Ричард Столлман)
  • Беседа Сергея Голубева с учителем В.В.Михайловым

  • Википедия или Гуглезнание? Приглашение к обсуждению (Алексей Федорчук)
  • Народная энциклопедия от Google (StraNNik)

  • Обзор Mandriva 2009.0 Beta 1 Thornicrofti
  • Новичок в Линукс: Оптимизируем Mandriva 2008.1

  • Книга Zenwalk. Приобщение к Linux:

    13 августа

    CitCity:

  • Мирный Atom на службе человеку. Обзор платы Intel D945GCLF с интегрированным процессором
  • Обзор процессоров Intel Atom 230 на ядре Diamondville

  • iPhone - год спустя. Скоро и в России?

    CITKIT.ru:

  • Интермедия 3.4. GRUB: установка и настройка (из книги Zenwalk. Приобщение к Linux)

    6 августа

  • СУБД с хранением данных по столбцами и по строкам: насколько они отличаются в действительности? (Пересказ: С. Кузнецов)

    CITKIT.ru:

  • Интермедия 2.2. Что неплохо знать для начала (из книги Zenwalk. Приобщение к Linux)

  • И снова про шрифты в Иксах (А.Федорчук)

  • 20 самых быстрых и простых оконных менеджеров для Linux

  • Дело о трех миллиардах (С.Голубев)

    30 июля

  • OLTP в Зазеркалье (Пересказ: С. Кузнецов)

    CitCity:

  • Будущее BI в облаках?
  • Тиражные приложения и заказная разработка. Преимущества для заказчика
  • Дискуссия со сторонниками заказной разработки

    CITKIT.ru:

  • Новые главы книги Zenwalk. Приобщение к Linux:
  • Глава 8. Пакеты: средства установки, системы управления, системы построения
  • Глава 9. Zenwalk: репозитории, пакеты, методы установки

    23 июля

    CITKIT.ru:

  • Все против всех. 64 vs 32, Intel vs AMD, tmpfs vs ext3
  • Две головы от Intel

  • Zenwalk: обзор штатных приложений (глава из книги "Zenwalk. Приобщение к Linux")

  • Нормально, Григорий...

    16 июля

    Обзоры журнала Computer:

  • Перспективы и проблемы программной инженерии в XXI веке
  • Большие хлопоты с большими объемами данных
  • Перспективы наноэлектроники

    CITKIT.ru:

  • Интермедия о лицензиях (А.Федорчук. "Zenwalk. Приобщение к Linux")

  • Есть ли будущее у KDE?

  • Linux в школе: альтернативный вариант в задачах

  • Шифр (приключения агента Никодима)

    10 июля

    CITKIT.ru:

  • Новые разделы книги А. Федорчука Zenwalk. Приобщение к Linux:
  • Интермедия вступительная. Linux или GNU/Linux? Как вас теперь называть?
  • Глава 5. Среда Xfce
  • Глава 6. Xfce: приложения и плагины

  • ZUR (Zenwalk User Repository) FAQ

    2 июля

  • Персистентность данных в объектно-ориентированных приложениях (С. Кузнецов)

    CITKIT.ru:

  • Новые разделы книги А. Федорчука Zenwalk. Приобщение к Linux:
  • Интермедия 1.2. Дорога к Zenwalk'у. Период бури и натиска
  • Интермедия 3.3. Немного о Linux'е и "железе"
  • Глава 4. Настройка: инструментами и руками
  • Интермедия 4.1. Zenpanel и конфиги: поиски корреляции

  • Интервью с Жан-Филиппом Гийоменом, создателем дистрибутива Zenwalk

  • Linux в школе: первые итоги (С. Голубев)

    25 июня

    CITKIT.ru:

  • Zenwalk. Приобщение к Linux (А. Федорчук)

  • Логика и риторика (С.Голубев)

  • Технология Tru64 AdvFS

  • Ханс Райзер предлагает отвести полицейских к телу Нины

    18 июня

  • Проекты по управлению данными в Google (Пересказ: С. Кузнецов)

    CITKIT.ru:

  • ОС и поддержка "железа": мифы и реальность (А. Федорчук)

  • Linux в школе: другие дистрибутивы

  • Пинок (С. Голубев)

    4 июня

  • Ландшафт области управления данными: аналитический обзор (С. Кузнецов)

    CITKIT.ru:

  • Linux в школе: слово заинтересованным лицам

  • SlackBuild: пакеты своими руками

  • Linux от компании Novell. Установка и обзор openSUSE Linux

    Все публикации >>>




  • IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы — тел. +7 495 4119920, ICQ 232284597 Пресс-релизы — pr@citcity.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2007 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...