Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015

Автор Тема: Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015  (Прочитано 138926 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Онлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015, 462 с. ISBN 978-5-97060-066-5.


Книга посвящена вопросам разработки приложений, работающих в системе AutoCAD версий 2013-2015, и их отличиям от предыдущих версий. Рассмотрены необходимые продукты Microsoft Visual Studio 2010-2013, Microsoft Visual Basic 7.1, библиотеки ObjectARX 2013-2015, AutoCAD .NET API 2013-2015. В книге описан также механизм проектирования интеллектуальных объектов (custom objects), которые становятся новыми примитивами AutoCAD. Книга разделена на 6 глав:
 1. Языки программирования и объектная модель
 2. C++ и ObjectARX
 3. Интеллектуальные объекты
 4. .NET и плагины (C#)
 5. AutoLISP и DCL
 6. VBA
 По ссылкам доступно содержание всех глав.
 
Программный код примеров из книги (1.67 Мбайт) можно скачать с сайта издательства. Некоторые примеры написаны А. Бушманом (Санкт-Петербург).
Книгу можно купить через Интернет-магазин.

Достаточно давно не издавалась русскоязычная литература по программированию для AutoCAD. Думаю, что эта книга будет полезна как для начинающих, так и для опытных программистов, использующих различные API AutoCAD.

В этой теме мы планируем собирать всю информацию об этой книге, благодарности автору, а так же замечания и опечатки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
2-я порция замечаний.

#=============================
стр. 13, Обзор средств разработки.
Абзац 1

#=============================
> Вместе с системой AutoCAD всех версий поставля[Ю]тся среда разработки на языке
LISP (Visual LISP).

*******************************

Во первых оЧепятка. Поскольку это обзор, то раз уж речь заходит об AutoLISP и
Visual LISP - не лишним было бы упомянуть о Петровых (можно глянуть здесь:
http://habrahabr.ru/company/nanosoft/blog/234221/ ). Эта информация в "обзоре"
была бы намного интересней чем то, что сейчас размещено на стр. 16-18 (которые
перелистываются не будучи прочитанными).

#=============================
стр. 13, Обзор средств разработки.
Абзац 2

#=============================
> Для работы с другими языками обычно требуются приобретение и установка среды
разработки Microsoft Visual Studio (версия Visual Studio зависит от версии
AutoCAD).

*******************************

Ситуацию несколько спасает слово "обычно", оставляя некоторый путь к отступлению...
А теперь представьте, что прочитавший это пользователь пишет не на C++, как это
ни странно, но на .NET. Будет ли для него верно данное заявление? Нет, не будет.
Для использования .NET API можно использовать любую IDE, способную работать с
той версией .NET Framework, которая может быть использована в целевой версии
AutoCAD. Например можно использовать такие бесплатные аналоги: Sharpdevelop (
http://www.icsharpcode.net/opensource/sd/ ) или Monodevelop (
http://www.monodevelop.com/ ). Для написания кода и компиляции можно
использовать в т.ч. и Visual Studio Express однако, насколько я помню, там есть
какие-то ограничения на отладку (не проверял, т.к. никогда не использовал этот
вариант IDE).

#=============================
стр. 13, Обзор средств разработки.
Абзац 3

#=============================
> Отдельно от системы AutoCAD распространяется пакет ObjectARX...
*******************************

Неплохо было бы уточнить, что во первых, распространяется он бесплатно, а во
вторых - что официально Autodesk в открытый доступ выкладывает версии SDK только
для последних трёх версий AutoCAD. Более старые версии SDK, с разрешения
Autodesk, А.Н. Ривилис выкладывает на странице
http://adn-cis.org/forum/index.php?topic=61.0

#=============================
стр. 13, Обзор средств разработки.
Абзац 4

#=============================
> .NET Framework за последние годы стала самой популярной платформой...
*******************************

Я бы воздержался от столь категоричных заявлений. А если их давать, то неплохо
было бы сослаться на результаты какого-нибудь отчёта по данному вопросу,
составленного авторитетной компанией. Если же в данном предложении речь идёт
о программировании именно под AutoCAD - то это стоило бы уточнить (я понял это так,
что автор имеет в виду программирование в целом).

#=============================
стр. 13, Обзор средств разработки.
Абзац 6

#=============================
> VBA в основном работает через объектную модель AutoCAD.
*******************************

Несколько неточное предложение. В AutoCAD существует несколько объектных моделей:
ObjectARX, AutoCAD .NET API и COM. Насколько мне известно, VBA в AutoCAD
использует COM.

#=============================
стр. 14, Обзор средств разработки.
Абзац 1

#=============================
> а если нужна связка языков, то лучше всего себя зарекомендовала пара C++-LISP.
*******************************

На мой взгляд это несколько субъективное мнение, моё отличается от обозначенного.
LISP функции в AutoCAD можно создавать в т.ч. и с помощью .NET. Помним, что .NET API в
AutoCAD сейчас активно развивается, чего к сожалению нельзя сказать о AutoLISP и
Visual LISP. Платформа .NET позволяет писать код на любом .NET языке, причём
этот код бесшовно стыкуется между собой. Можно писать базовые классы на одном
языке и наследоваться от них на другом. Т.о. говоря о связке, на мой взгляд
первое место занимает managed C++ совместно с любым .NET языком или даже их группой.

#=============================
стр. 14, Об объектной модели AutoCAD.
Абзац 1

#=============================
> Система AutoCAD разработана с учётом концепции COM...
*******************************

Как-то слово "концепция" в данном контексте, на мой взгляд ни к месту... "AutoCAD
имеет COM интерфейс для работы с ним из внешних приложений
" - мне кажется, что так
было бы более корректно. Кроме того, не стоит забывать, что в комплект AutoCAD,
начиная с версии 2013, помимо acad.exe входит и accoreconsole.exe, который [к
сожалению] не имеет COM интерфейса.

#=============================
стр. 15, Объекты и коллекции.
Абзац последний:

#=============================
> В табл. 1.1. приведён перечень объектов и коллекций.
*******************************

В том виде, в каком это представлено, данная информация не представляет никакого
интереса (во всяком случае для меня). Страницы 16, 17 и 18 просто перелистываются
не будучи прочитанными. Если уж и размещать информацию о класса, то в древовидном
представлении, как это сделано в файле classmap.dwg, входящем в состав ObjectARX
SDK. Такую иерархическую структуру было бы интересно просмотреть, а так получается,
что потеряно три страницы, тем более, что см. цитату в след. замечании:

#=============================
стр. 19, Объекты и коллекции.
Абзац 1

#=============================
> В таблицу не внесены объекты и семейства, связанные с подшивками и операЦИМИ
связи с базами данных.

*******************************

оЧепятка + смотрим предыдущее замечание в комплексе.

#=============================
стр. 19, Свойства.
Абзац 2

#=============================
> Такие компоненты объектной модели, как интерфейсы, не все обладают свойствами.
*******************************

Выше в замечаниях я уже писал, что объектные модели бывают разными. Предполагаю,
что в данном случае автор имеет в виду COM. Соответственно следует чётко
обозначать целевую объектную модель.

#=============================
стр. 19, Простой пример использования объектной модели.
Абзац 1

#=============================
> Все разбираемые в следующих главах системы программирования дают возможность
использовать рассмотренную объектную модель с помощью COM(ActiveX).

*******************************

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

#=============================
стр. 20, Особенности программирования для AutoCAD 2015.
Абзац 1

#=============================
> В системе AutoCAD прекращена поддержка fibers (волокон потоков Windows).
*******************************

Разве так уж и прекращена? Практика показывает, что по умолчанию использование фиберов
отключено, но может быть включено при необходимости. Процитирую А.Н. Ривилиса:
>Хотя нормально 2015 работает только с FIBERWORLD == 0
За подробностями к нему (так же читаем это http://adn-cis.org/forum/index.php?topic=647 ).

Неплохо было бы пояснить читателю, что такое "волокна потока". Много места такое
пояснение не займёт и будет полезным.

#=============================
стр. 21, О совместимости
Абзац 1

#=============================
> Разрабатывая приложение под какую-то версию AutoCAD определённой разрядности,
автор хотел бы знать, сможет ли его приложение без переделки правильно
функционировать в другой разрядности, а так же в другой версии.

*******************************

Насколько я понимаю, "без переделки" следует обособить запятыми. Разработка
приложений под AutoCAD ведётся абстрагированно от его разрядности. Один и тот же
исходный код компилируется под win32\x64, в случае native C++, либо под AnyCPU в
.NET. Если ограничиться AnyCPU не удаётся, то вместо неё собираются x86 и x64.

Говоря о совместимости, нужно чётко различать понятие "совместимости на уровне
исходного кода
" от понятия "совместимости на уровне машинного кода" (т.е.
скомпилированного результата). Т.о. "переделки" - они бывают разными: одно дело,
когда один и тот же код нужно просто пересобрать, создав новый файл проекта, включив
в него существующие исходники посредством "Add as Link", а так же указав в его
настройках иные ссылки на внешние зависимости. Но совсем другое дело, когда
непосредственно в исходный код нужно вносить дополнительные изменения.

На стр. 22, в абзаце "Язык C++" автор пишет о совместимости на уровне машинного
кода.

#=============================
стр. 22, Платформа .NET
Абзац 1:

#=============================
> Платформа .NET (C# и др.) Здесь всё зависит от номера версии целевой платформы
.Net Framework, использованной при построении.

*******************************

Этой фразы я не понял. Использованной при построении чего? Предполагаю, что речь
идёт о компиляции самого AutoCAD, но автору лучше бы уточнить это.

#=============================
стр. 23, Платформа .NET
Абзац 1:

#=============================
> Если платформа проекта была AnyCPU, то не очень сложные приложения смогут
работать как в 32-bit, так и в 64-bit. Но чаще всего придётся собирать
индивидуальную версию для каждой версии и для каждой разрядности. См. главу 4.

*******************************

Во первых, неплохо было бы в тексте уточнить так: "индивидуальную версию
расширения для каждой версии AutoCAD
", а то получается двусмысленность "версия-
версия
". Во вторых, основываясь на своём личном практическом опыте написания .NET
расширений под AutoCAD, могу сказать, что всё обстоит с точностью до наоборот:
чаще всего вариант AnyCPU работает нормально. С действительной потребностью в
компиляции кода отдельно под x86 и отдельно под x64 я сталкивался, но происходило
это не часто. Причём я бы не сказал, что всё то, что мною компилировалось как
AnyCPU было "не очень сложным приложением"... Вообще, понятие "сложности" - оно
несколько относительно: то, что одному кажется простым, другому может показаться
сложным и наоборот.

#=============================
стр. 23, Язык VBA.
Абзац 1:

#=============================
> Для 32-разрядных версий AutoCAD до 2013, собранных в VBA 6, совместимость есть.
*******************************

Предполагаю, что речь идёт о совместимости на уровне машинного кода. Следовало
бы уточнять это в тексте, чтобы пользователь понимал, о какой именно совместимости
говорится.
« Последнее редактирование: 24-11-2014, 14:01:47 от Андрей Бушман »

Онлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Во вторых, основываясь на своём личном практическом опыте написания .NET
расширений под AutoCAD, могу сказать, что всё обстоит с точностью до наоборот:
чаще всего вариант AnyCPU работает нормально. С действительной потребностью в
компиляции кода отдельно под x86 и отдельно под x64 я сталкивался, но происходило
это не часто.
Если используются сборки AutoCAD (без позднего связывания и Reflection), то требуется раздельная компиляция при использовании сборок Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll (т.е. оберток для ActiveX/COM-интерфейса AutoCAD).
Для написания кода и компиляции можно
использовать в т.ч. и Visual Studio Express однако, насколько я помню, там есть
какие-то ограничения на отладку (не проверял, т.к. никогда не использовал этот
вариант IDE).
А теперь еще и Visual Studio 2013 Community, которая по основным параметрам эквивалентна Visual Studio Pro. Но когда Николай Николаевич сдавал книгу в печать я думаю об этой версии Visual Studio еще ничего не было известно. Там нужно внимательно изучить лицензионное соглашение для этой версии: http://www.visualstudio.com/products/visual-studio-community-vs
Во всяком случае для индивидуального программирования для создания даже коммерческих приложений эта версия доступна, что не может не радовать.
 
Практика показывает, что по умолчанию использование фиберов
отключено, но может быть включено при необходимости. Процитирую А.Н. Ривилиса:
>Хотя нормально 2015 работает только с FIBERWORLD == 0
За подробностями к нему.
Это нас всех ввел в заблуждение Киан Уомсли в своём блоге. Потом он исправился: http://through-the-interface.typepad.com/through_the_interface/2014/03/autocad-2015-for-developers.html
Цитировать
Update:

It turns out NEXTFIBERWORLD/FIBERWORLD are still usable – primarily for QA purposes, in case issues with fiber removal require verification – so the code paths for using fibers are still there, just inactive by default. I’d recommend against switching fibers back on unless it’s to help diagnose and report an issue, though. Thanks to Stephen Preston for checking on this. :-)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Если используются сборки AutoCAD (без позднего связывания и Reflection), то требуется раздельная компиляция при использовании сборок Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll (т.е. оберток для ActiveX/COM-интерфейса AutoCAD).
Я обращаюсь к функционалу обозначенных библиотек лишь тогда, когда искомый функционал не найден в AutoCAD .Net API. Как правило, в моём коде таких обращений не много. В подобных случаях я делаю выбор в пользу совместимости на уровне машинного кода и для достижения этого предпочитаю использовать позднее связывание.

Онлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Собственно говоря если хотя бы одна из сборок, используемая в нашей сборке не "Any CPU", то и наша сборка будет по факту не "Any CPU". Так что условие "Any CPU" для всех сборок есть необходимое, но не всегда достаточное. Например, использовали P/Invoke только с x86 или только с x64.

P.S.: Кажется мы отошли от темы обсуждения.  :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Собственно говоря если хотя бы одна из сборок, используемая в нашей сборке не "Any CPU", то и наша сборка будет по факту не "Any CPU". Так что условие "Any CPU" для всех сборок есть необходимое, но не всегда достаточное.
Компилируя под AutoCAD 2009 я подключаю DLL из каталога %ObjectARX 2009%\inc-x64 (т.е. из каталога конкретной целевой платформы) и компилирую проект как AnyCPU. Результат работает как в AutoCAD 2009 x64, так и в AutoCAD 2009 x86. Но если вместо AnyCPU я укажу конкретную платформу, то только под ней и будет работать.

P.S.: Кажется мы отошли от темы обсуждения.  :)
я так не думаю. Корректность\точность опубликованных замечаний так же обсуждаема, потому как мало ли чего я там в замечаниях напишу (ну, или А.Н. Ривилис оЧепятается ;))...

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Нда... Заказал книгу неделю назад, до сих пор идет, причем когда заказывал, писали про большую скидку...

В общем, барбак у них там в издательстве.
Книгу отправили через 3 дня после оплаты, трек номер прислали через 6 (с какого то левого ящика на yandex.ru) при этом цена со скидкой + доставкой до Питера (на пункт выдачи Почты России) на 100 руб больше, чем если бы я купил эту книгу на Озоне с доставкой до пункта выдачи, да и по срокам Озон намного оперативнее.

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

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

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Нда... Заказал книгу неделю назад, до сих пор идет
Я когда книгу по почте отправлял, она ещё в СПб в течении 8-ми дней мусолилась Почтой России. Для сравнения: книги, которые я покупаю на Amazon.com, нередко доходят из США до Мск за три дня. Уже вся страна отлично знает, что такое Почта России ("Почта России" - и пусть весь мир подождёт...).

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Да я, на почту России, не очень то и качу бочку... Я больше на издательство. Из недели сроку, ее до почты несли 3 дня, да еще и ошибку в фамилии сделали. Так что я имею все шансы вообще не получить посылку в ближайшее время. Она пролежит месяц на почте и потом ее отправят обратно, отправитель исправит ошибку и отправит заново, а это как минимум еще месяца полтора...  :-\

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
В Петербурге можно купить в Доме книги за 882 руб., в Москве в Доме книги - за 1045 руб.

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
2-я порция замечаний
Спасибо Андрею Бушману за внимательное прочтение. Есть вопросы – значит, требуются ответы или пояснения. Гораздо хуже было бы без вопросов, ведь тема не столь проста… За обнаруженные опечатки тоже спасибо. Книга писалась в первой половине 2014 года и вышла в сентябре, поэтому последние новости в нее не могли попасть.
Поскольку по данной теме это у меня были другие книги (первая вышла в 2001 году), то я старался соблюдать традиции, хотя бы в отношении терминологии. Таких книг становится все меньше, поскольку узок круг покупателей (читателей, видимо, больше). Тираж всего 200 экз., но и его еще надо продать, чтобы покрыть редакционные издержки.
Если вдруг спрос окажется чуть больше критического минимума и редакция решит продолжить публикации, а авторы (автор) решат, что стоит тратить на это время хотя бы ради ностальгии, то не исключено, что замечания будут учтены в следующих книгах.

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Во первых оЧепятка. Поскольку это обзор, то раз уж речь заходит об AutoLISP и
Visual LISP - не лишним было бы упомянуть о Петровых (можно глянуть здесь:
http://habrahabr.ru/company/nanosoft/blog/234221/ ). Эта информация в "обзоре"
была бы намного интересней чем то, что сейчас размещено на стр. 16-18 (которые
перелистываются не будучи прочитанными).
Статья о Петровых интересная, я даже испытываю гордость за наших, но она (статья) вышла, когда книга уже ехала в типографию.
Насчет страниц 16-18 я не согласен: не все читатели знают, что такое объектная модель AutoCAD. Кому-то надо хотя бы раз увидеть перечисление объектов, чтобы создать раздел в памяти. А затем уже пойти по ссылке на полное описание модели (acadauto.chm).

Ситуацию несколько спасает слово "обычно", оставляя некоторый путь к отступлению...
А теперь представьте, что прочитавший это пользователь пишет не на C++, как это
ни странно, но на .NET. Будет ли для него верно данное заявление? Нет, не будет.
Для использования .NET API можно использовать любую IDE, способную работать с
той версией .NET Framework, которая может быть использована в целевой версии
AutoCAD. Например можно использовать такие бесплатные аналоги: Sharpdevelop (
http://www.icsharpcode.net/opensource/sd/ ) или Monodevelop (
http://www.monodevelop.com/ ). Для написания кода и компиляции можно
использовать в т.ч. и Visual Studio Express однако, насколько я помню, там есть
какие-то ограничения на отладку (не проверял, т.к. никогда не использовал этот
вариант IDE).
Замечание правильное. Я ограничился средой VS и теми IDE, что предоставляет Autodesk.

> Отдельно от системы AutoCAD распространяется пакет ObjectARX...
*******************************
Неплохо было бы уточнить, что во первых, распространяется он бесплатно, а во
вторых - что официально Autodesk в открытый доступ выкладывает версии SDK только
для последних трёх версий AutoCAD. Более старые версии SDK, с разрешения
Autodesk, А.Н. Ривилис выкладывает на странице
http://adn-cis.org/forum/index.php?topic=61.0
О бесплатности см. стр.25. Согласен, что стоило выйти за рамки темы 2013-2015 и на стр.25 дать ссылку на загрузки от Александра Ривилиса – это уникальная возможность доступа к предыдущим версиям. Интересно что на ObjectARX есть лицензионное соглашение ( www.objectarx.com ).

> Для работы с другими языками обычно требуются приобретение и установка среды
разработки Microsoft Visual Studio (версия Visual Studio зависит от версии
AutoCAD).
*******************************
Я бы воздержался от столь категоричных заявлений. А если их давать, то неплохо
было бы сослаться на результаты какого-нибудь отчёта по данному вопросу,
составленного авторитетной компанией. Если же в данном предложении речь идёт
о программировании именно под AutoCAD - то это стоило бы уточнить (я понял это так,
что автор имеет в виду программирование в целом).
Я имел в виду не только AutoCAD. Думаю, что компания Microsoft со мной согласна. :)

> VBA в основном работает через объектную модель AutoCAD.
*******************************

Несколько неточное предложение. В AutoCAD существует несколько объектных моделей:
ObjectARX, AutoCAD .NET API и COM. Насколько мне известно, VBA в AutoCAD
использует COM.
По традиции имеется в виду главная модель типа COM, доступная на всех языках, на которых пишутся приложения для AutoCAD. Из восьми TLB-файлов, поставляемых в папках ObjectARX 2015\inc-win32 (inc-x64), этой объектной модели соответствует файл axdb20enu.tlb.

Оффлайн bender

  • ADN Club
  • **
  • Сообщений: 62
  • Карма: 4
Цитировать
В Петербурге можно купить в Доме книги за 882 руб., в Москве в Доме книги - за 1045 руб.

Через OZON с доставкой к месту выдачи (не Москва) - 740 рр

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Через OZON с доставкой к месту выдачи (не Москва) - 740 рр
В Питере, 558 р книга и 49 р  доставка, по крайней мере именно такое уведомление свалилось мне на почту...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Давайте не будем отвлекаться от основной темы.