Новые книги

Слово криптография означает тайнопись.

Российская криптография имеет многовековую историю, начинающуюся с указов Петра I о «черных кабинетах». До середины 80-х годов XX века криптография в России использовалась только для военных, дипломатических и правительственных линий связи и была строго засекречена. Даже употребление слов «криптография», «шифры», «ключи к шифрам» в открытых публикациях было недопустимо. Но в мире быстро назревала потребность в гражданской криптографии, стремительно развивались информационные технологии, стали появляться компьютерные сети, Интернет, денежные электронные расчеты. Для этого требовались надежные и общедоступные криптографические методы защиты информации.

Была ли Россия готова к появлению гражданской криптографии? И да, и нет.

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

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

В 1992 году случился кризис: поток фальшивых авизо захлестнул Центральный Банк России и грозил обрушить всю финансовую систему. Потребовалась срочная помощь криптографов: в кратчайшие сроки создать, наладить и запустить в эксплуатацию систему криптографической защиты телеграфных и почтовых авизо в такой огромной структуре, как ЦБ РФ.

Эта задача была выполнена за три месяца – неимоверно короткий срок.

В России появился первый реальный пример гражданской криптографии.

О том, что представляла из себя советская криптографическая школа, о ее специалистах и начальниках, о царившей тогда в стране атмосфере, о том, как была создана система защиты для Центрального Банка России, и, наконец, о том, почему же в России так трудно пробивает себе дорогу гражданская криптография – в этой книге.
Что такое категорийный менеджмент и как его внедрять? Какие бывают категории? Как сбалансировать ассортимент и повысить финансовую отдачу от управления им? Ответы на эти и другие не менее важные для розничного магазина вопросы дает новое издание бестселлера по управлению ассортиментом, единственного в России практического пособия по построению системы категорийного управления товаром.

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

В качестве бонуса к книге добавлено электронное приложение, включающее в себя наиболее востребованные формулы, таблицы и документы, необходимые в ежедневной работе категорийных менеджеров, а также дана развернутая информация о таких востребованных видах анализа, как АВC– и XYZ-анализ, оборачиваемость, прогнозирование спроса. Приложение доступно по ссылке

.

http://goo.gl/wYUflG

http://goo.gl/wYUflG

Исходные тексты аплета Rectangles

Исходные тексты аплета Rectangles

Оглавление

Многопоточность
Процессы, потоки и приоритеты
Многопоточность в Java
Многопоточность и анимация
Синхронизация потоков
Потоки-демоны
Аплет Rectangles
Исходные тексты
Описание текстов

Исходные тексты аплета Rectangles приведены в листинге 1.

Листинг 1. Файл Rectangles,java

import java.applet.*;
import java.awt.*;

public class Rectangles 
extends Applet
{
DrawRectangles m_DrawRectThread =
                           null;
DrawEllipse m_DrawEllipseThread = null;
NotifyTask m_NotifyTaskThread = null
  public String getAppletInfo()
  {
    return "Name: Rectangles";
  }
  public void paint(Graphics g)
  {
    Dimension dimAppWndDimension = getSize();
    g.setColor(Color.yellow);
    g.fillRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);
    g.setColor(Color.black);
    g.drawRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);
  }
  public void start()
  {
    if (m_DrawRectThread == null)
    {
      m_DrawRectThread = 
        new DrawRectangles(this);
      m_DrawRectThread.start();
    }
    if (m_DrawEllipseThread == null)
    {
      m_DrawEllipseThread = 
        new DrawEllipse(this);
      m_DrawEllipseThread.start();
    }
    if (m_NotifyTaskThread == null)
    {
      m_NotifyTaskThread = 
        new NotifyTask(m_DrawEllipseThread);
      m_NotifyTaskThread.start();
    }
  }

  public void stop()
  {
    if (m_DrawRectThread != null)
    {
      m_DrawRectThread.stop();
      m_DrawRectThread = null;
    }
    if (m_DrawEllipseThread == null)
    {
      m_DrawEllipseThread.stop();
      m_DrawEllipseThread = null;
    }    
    if (m_NotifyTaskThread != null)
    {
      m_NotifyTaskThread.stop();
      m_NotifyTaskThread = null;
    }
  }
}
class DrawRectangles extends Thread
{
  Graphics g;
  Dimension dimAppWndDimension;
  public DrawRectangles(Applet Appl)
  {
    g = Appl.getGraphics();
    dimAppWndDimension = Appl.getSize();
  }
  public void run()
  {
    while (true)
    {
      int x, y, width, height;
      int rColor, gColor, bColor;      
      x =      (int)(dimAppWndDimension.width 
            * Math.random());
      y =      (int)(dimAppWndDimension.height
            * Math.random());
      width  = (int)(dimAppWndDimension.width
            * Math.random()) / 2;
      height = (int)(dimAppWndDimension.height
            * Math.random()) / 2;      
      rColor = (int)(255 * Math.random());
      gColor = (int)(255 * Math.random());
      bColor = (int)(255 * Math.random());
      g.setColor(new Color(rColor, 
        gColor, bColor));
      g.fillRect(x, y, width, height);
      try
      {
	Thread.sleep(50);
      }
      catch (InterruptedException e)
      {
	stop();
      }
    }
  }
}
class DrawEllipse extends Thread
{
  Graphics g;
  Dimension dimAppWndDimension;
  public DrawEllipse(Applet Appl)
  {
    g = Appl.getGraphics();
    dimAppWndDimension = Appl.getSize();
  }
  public synchronized void run()
  {
    while (true)
    {
      int x, y, width, height;
      int rColor, gColor, bColor;
      x =      (int)(dimAppWndDimension.width
          * Math.random());
      y =      (int)(dimAppWndDimension.height
          * Math.random());
      width  = (int)(dimAppWndDimension.width
          * Math.random()) / 2;
      height = (int)(dimAppWndDimension.height
          * Math.random()) / 2;
      rColor = (int)(255 * Math.random());
      gColor = (int)(255 * Math.random());
      bColor = (int)(255 * Math.random());
      g.setColor(new Color(rColor,
         gColor, bColor));
      g.fillOval(x, y, width, height);
      try
      {
	this.wait();
      }
      catch (InterruptedException e)
      {
      }
    }
  }
}
class NotifyTask extends Thread
{
  Thread STask;
  public NotifyTask(Thread SynchroTask)
  {
    STask = SynchroTask;
  }
  public void run()
  {
    while (true)
    {
      try
      {
	Thread.sleep(30);
      }
      catch (InterruptedException e)
      {
      }
      synchronized(STask)
      {
        STask.notify();
      }
    }
  }
}