Дефрагментация мозга — страница 13 из 30

>

name="quantity" type="float"/>

name="getCurrentInput">

name="body" element="sqsxsd: CurrentQuantity"/>


name="getCurrentOutput">

name="body" element="sqsxsd: CurrentQuantity"/>

name="StockInventoryServicePortType">

name="getCurrent">

message="sqs: getCurrentInput"/>

message="sqs: getCurrentOutput"/>


name="StockInventoryServiceSoapBinding"

type="sqs: StockInventoryServicePortType">

style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

name="getCurrent">

soapAction="http://mycompany.com/getCurrent"/>

use="literal"/>

use="literal"/>


name="StockInventoryService">

name="StockInventoryServicePort"

binding="sqs: StockInventoryServiceBinding">

location="http://mycompany.com/StockInventoryService"/>


Третьим «усовершенствованием» стал отказ от автоматической подгрузки связанных объектов[84] в пользу исключительно ручного управления процессом.

В CORBA объекты функционируют на сервере, тогда как на клиенте находится только соответствующая заглушка (stub). То есть вы в программе вызываете какой-то метод, а на самом деле происходит обращение к серверу, вызов соответствующего метода у серверного объекта и возврат результата на клиента с возможным обновлением состояния локальных полей заглушки. Аналогично со свойствами объектного типа: связанный объект подгружается по мере необходимости. Всё это происходит прозрачно для программиста, которому не нужно вмешиваться в процесс взаимодействия, но желательно знать, что стоит за манипуляциями с заглушкой на клиенте. Соответственно, существует соблазн вместо реализации на сервере новой функции службы написать код непосредственно на клиенте, благо сделать это легко. Тогда, например, обработка достаточно большой коллекции объектов в цикле может вызвать интенсивный обмен сообщениями с сервером и возникновение узкого места в системе. Аналогичная проблема плохой реализации имеется и при работе приложения напрямую с СУБД.

В среде веб-сервисов вопрос с «нерадивым программистом» решили радикально – отменой самой возможности написать такой код. Несмотря на то что в 80 % случаев имевшаяся автоматическая загрузка была уместной и здорово сокращала программу.

Как уберечь кукурузу от насекомых-вредителей? Очень просто: выкосить её всю, к чертям. Вредители придут, а кушать нечего.

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


Прозрачная загрузка объектов в клиентском CORBA-приложении

BookGroup group = catalog.getBookCategory("Программирование");

Book[] books = group.getItems(); // один вызов сервера

foreach(Book book in books)

{

ShowInfo(book.Name +": ");

ShowInfo(book.getPopularity(). getVotesCount()); // два вызова

}


Работа клиентского приложения с DTO в среде веб-служб

BookGroupServiceClient groupClient = new BookGroupServiceClient(url1);

BookGroupDTO group = groupClient.GetBookCategory("Программирование");

BookServiceClient bookClient = new BookServiceClient(url2);

BookDTO[] books = bookClient.GetByGroupId(group.Id);

foreach(BookDTO book in books)

{

PopularityServiceClient popularityClient = new PopularityServiceClient(url3);

PopularityDTO popularity = popularityClient.GetByBookId(book.Id);

int votesCount = popularityClient.GetVotesCount(popularity.Id);

ShowInfo(book.Name +": ");

ShowInfo(votesCount);

}


Сила CORBA проявляется в том, что технология может работать и как в приведённых примерах, то есть с реализацией элементов полноценного многопоточного сервера приложений, и аналогично веб-службам, обрабатывая в сервисах объявленные в интерфейсах структуры, напоминающие DTO.

Вне контекста «автоматизированного бардака»[85] современные заявления о том, что СОА не оправдала возложенных на неё надежд, свидетельствуют о том, что и выбранная для неё модель веб-служб не стала решением проблем взаимодействия приложений в корпоративной среде. Ожидает ли нас новое пришествие CORBA в виде облегчённой её версии – покажет время. Поищите в Интернете по ключевым словам Web ORB – обнаружите немало интересного.

Прогресс неотвратим

Войны не будет, но будет такая борьба за мир,

что камня на камне не останется!

Из анекдота времён холодной войны

Вы думаете, что большие ЭВМ вымерли или вымирают? Попытаюсь вас если не разубедить, то хотя бы проинформировать.

В 2011 году 93 % респондентов крупных компаний отметили, что интенсивность использования мейнфреймов в их деятельности увеличивается или, как минимум, стабильна, и они остаются критически важной платформой для ЦОДов и «облачных» систем. 62 % (в 2010-м таковых было 56 %) отмечают общий рост данного рынка, 47 % полагают, что его развитие хорошо стимулируется новыми задачами и новым программным обеспечением[86].

Две трети опрошенных отводят мейнфреймам стратегическую роль, которая только увеличивается; 42 % отмечают особую важность мейнфреймов для облачных приложений, а 65 % даже намерены внедрять в управление этими машинами мобильный подход[87].

Согласно данным IDC по региону EMEA, в классе решений high-end (системы ценой $250 тыс. и выше) мейнфреймы опережают другие платформы non-x86, имея по результатам 2011 года долю рынка 45 % в стоимостном выражении. При этом в данном регионе и в данном классе серверов средняя цена RISC-сервера – 580 тыс. долл., EPIC-сервера – 830 тыс. долл., мейнфрейма – 2,1 млн долл. Чем выше требования к производительности и защищенности системы (и цена, которую согласны платить за это заказчики), тем чаще выбор делается в пользу мейнфрейма… Если взять одну из наиболее мощных экономик Западной Европы – Германию, то там в 2011-м на рынке систем non-x86 класса high-end доля мейнфреймов в количестве поставленных систем составляла 33 %, а в денежном выражении – 66 %.

Такие цифры должны впечатлять, особенно на фоне демонтированных в 1990-х годах на драгметаллы советских ЭВМ. Безукоризненно проведённая операция по зачистке национального рынка с последующим его заполнением экспортной продукцией самого низкого ценового сегмента – серверами и ПК на базе x86.

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

Произошла тихая революция. Ещё 15–20 лет назад сессии крупных поставщиков на конференциях разработчиков были своеобразным мастер-классом, где на бета-стадии испытывалась реакция аудитории на предлагаемые изменения. Сегодня повестка дня состоит в постановке перед фактом новой версии платформы, показе новых «фишек» и оглашении списка технологий, которые больше не будут развиваться, а то и поддерживаться. Действительно, солдаты от софтостроения не должны рассуждать. Они несут службу и должны молча овладевать оружием, закупкой которого занимаются генералы в непрозрачном договоре с поставщиками. Экономика потребления обязана крутиться, даже если в ней перемалываются миллиардные бюджеты бесполезных трат на модернизацию, переделку и переобучение.

NET

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

Давайте подумаем, кто же выигрывает в этой гонке кроме самой корпорации, пользующейся своим квазимонопольным положением:

• Услуги по сертификации. Прямая выгода.

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

• Программисты в целом. Состояние неопределённости. Выбор стоит между «изучать новые возможности» и «решать задачи заказчиков». А если изучать, то как не ошибиться с перспективой оказаться у разбитого корыта через пару лет.

• Разработчики в заказных проектах. Прямые убытки. За пару лет получен опыт работы с технологиями, признанными в новом фреймворке наследуемыми, то есть не подлежащими развитию, хорошо, если поддерживаемыми на уровне исправления критичных ошибок. А ведь всего 2–3 года назад поставщик убеждал, что эти технологии являются перспективными, важными, стратегическими и т. п. Необходимы новые инвестиции в обучение персонала и преодоление появившихся рисков.

• Разработчики продуктов. Косвенные убытки. В предлагаемом рынку продукте важна функциональность и последующая стоимость владения. На чём он написан – личное дело компании-разработчика. Тем не менее заброшенную поставщиком технологию придётся развивать за свой счёт или мигрировать на новую. Скорее второе: в 2012 году по прежнему работает приложение 15-летней давности, использующее DDE[88], тогда как совместимость OLE Automation между версиями Office не гарантирована.

Риторически, подобно герою кинокомедии, можно вопрошать: «Минуточку, за чей счёт этот банкет?» И ответ будет аналогичный оригинальному, подвергшемуся цензуре в фильме.

Софтостроителю должно быть понятно, что менять технологии и концепции рискованно, потому что новые ещё сырые, а брошенные или отодвинутые на второй план «старые» так и не успели достичь зрелости. 2–3 года – минимальный срок для появления первых промышленно работающих систем и, соответственно, специалистов по их разработке. A не специалистов по чтению обновлённой версии MSDN и книжек по учебным курсам. Поэтому нормальный цикл концептуальных изменений 5–7, а то и 10 лет.

Вынужденный совет в такой ситуации дают авторы книги «Прагматичный программист» (Pragmatic Programmer), в буквальном переводе «Не кладите все свои технические яйца в одну корзину»[89].

Office 2007

Как известно, Microsoft изменила интерфейс в Office 2007. Вместо привычных меню появились многочисленные закладки лент панелей инструментов с крупными пиктограммами. По словам Microsoft, это сделано для облегчения работы начинающим пользователям.

Хорошо, возможно, начинающим жить в офисном пакете это полезно или безразлично. А мы, давние пользователи, заканчиваем в нём жить, что ли? Кроме проблем с интерфейсом возникли проблемы открытия файлов в Office 2003. Повторилась ситуация с версией Office 97, когда Microsoft пришлось в срочном порядке выпускать конвертер для Office 95, позволяющий открывать в нём файлы новых форматов.

Разве трудно было предусмотреть возможность выбора между старым и новым интерфейсом, как это было сделано в Windows XP и 7? Зато всего за 30 долларов вам предложат купить программку третьей фирмы Classic Menu, которая возвратит старый интерфейс. Остап Бендер со своими относительно честными способами отъёма денег у населения мог бы гордиться последователями.

Крупные корпорации не спешили с обновлениями, соблюдая внутренние стандарты. В рамках одного проекта в 2010 году пришлось объяснять заказчикам, что модуль Excel 2003 для работы с OLAP-кубами, тоже от Microsoft, внезапно был удалён с их веб-сайта, и сходную функциональность официальным путём теперь можно получить только в версиях 2007 и 2010.

Итогом истории для меня стал переход на Libre Office, где редактировалась в том числе и эта книга.

SQL Server

Несмотря на предвзято позитивное отношение к этому продукту Microsoft, используемому мною с 1996 года, вынужден отметить, что и здесь, начиная с 2005-й версии, наряду с полезными нововведениями проявилась определённая деградация.

Изменилась концепция пользовательского интерфейса. В версиях 7 и 2000 интегрированные приложения администратора (Enterprise Manager) и разработчика (Query Analyser) были разделены (в 6.х разделение тоже было, но неявное). В 2005 году корпорация решила унифицировать подход и свести всё в одну среду разработки и администрирования. Приложения переписали на. NET, благодаря чему они стали работать медленнее. В процессе переделки разработчики забыли, видимо, в спешке прихватить разные полезные мелочи, вроде множественного выделения объектов в дереве, которые за предыдущие годы были воплощены в версии 2000. Что, например, вы ожидаете увидеть, щелкнув мышью дважды на хранимой процедуре в правом окошке проводника объектов? Правильно, её текст. Но тут вас постигнет разочарование, мы проваливаемся в список параметров.

Если в версии 2000 пошаговая трассировка хранимых процедур и триггеров из консоли Query Analyser была доступна, то в 2005 она исчезла, а программистам порекомендовали дополнительно покупать Visual Studio соответствующей редакции. Хочется надеяться, что победил здравый смысл, а не поток жалоб, и в 2008 году отладка вновь появилась в основном инструментарии.

Поставляемая вместе с продуктом часть Visual Studio, видимая пользователю как BIDS (Business Intelligence Developer Studio), привязана к версии СУБД: OLAP-проекты, отчёты и пакеты ETL[90] для SQL Server 2005 могут разрабатываться только в BIDS 2005. А в BIDS 2008 уже не могут, потеряна обратная совместимость.

При этом многие полезные функции в 2005-й версии были всё ещё сырые. Например, OPENQUERY(), не допускающая конкатенации строк в параметрах, вынуждала писать трудносопровождаемый код внутри строковых переменных. Или новоиспечённая ROW_NUMBER(), не решающая, а создающая проблемы постраничной выборки на относительно больших объёмах. Исправляющая положение инструкция ORDER BY OFFSET появилась только в версии 2012. Форматы резервных копий между SQL Server 2008 и 2008 R2 оказались несовместимы.

Со средствами сетевого доступа к серверу баз данных и вовсе вышла смешная история.

В версии SQL Server 6.5, которая была ещё «почти Sybase 11», родным интерфейсом доступа к СУБД являлась DB-library в виде DLL и статической библиотеки С/C++, а драйвер ODBC[91] шёл как стандартное дополнение. После выпуска полностью переписанной на уровне ядра версии SQL Server 7 в 1998 году Microsoft анонсировала отказ от DB-library в пользу OLE DB, утверждая, что именно он и будет теперь «родным» для СУБД. Сама постановка фразы о том, что универсальный интерфейс, работающий через COM, может быть одновременно «родным», вызвала в сообществе разработчиков недоумение.

Поддержка DB-library была прекращена, в SQL Server 2000 эта библиотека ещё присутствует, но уже работает поверх (!) OLE DB. Библиотека С/C++ поверх COM – яркий пример костыля, подпирающего этаж совместимости. Имевший специфичные расширения ODBC-драйвер был сделан «с нуля», он самостоятельно реализовывал протокол TDS[92] доступа поверх сетевого уровня IP-сокетов и являлся высокопроизводительным и автономным, то есть не требовал установки дополнительных «родных» DLL. SQL QueryAnalyser в версии 2000 и, позднее, SQL Server Management Studio используют ODBC для управления запросами.

Одновременная поддержка OLE DB и ODBC в синхронном функциональном состоянии требовала затрат, которые в 2012 году решили сократить. Microsoft анонсировала отказ от OLE DB в пользу ODBC для работы с SQL Server.

Оказалось, что «родной» интерфейс всё-таки не родной. «Родного» у SQL Server просто нет, но есть ODBC, который теперь объявлен «родным», и SQLClient для. NET. Могли ли в 1995 году немногочисленные разработчики, выбравшие тогда ODBC, предполагать, что к 2012 году они окажутся в числе выигравших?

Vista

Windows 7 ещё находилась в состоянии «кандидат к выпуску», а представители Microsoft открытым текстом стали предлагать отказаться от покупки своего флагманского на тот момент продукта – операционной системы Windows Vista и подождать выхода новой версии.

По сути пользователям сообщили, что мы достаточно потренировались на вас и за ваши же деньги, а теперь давайте перейдём собственно к делу. Судьба Vista была решена – система фактически выброшена в мусорную корзину, так и не успев занять сколь-нибудь значительную долю парка «персоналок» и ноутбуков. Производителям железа была дана отмашка переключиться на Windows 7, корпоративным службам ИТ пришлось в срочном порядке сворачивать проекты по переходу на Vista и ориентироваться на «семёрку».

Не скрою, я изначально был скептически настроен к Vista, вышедшей в конце ноября 2006 года, по двум причинам. Во-первых, ничего существенного по сравнению с Windows XP она не привносила, а во-вторых, первый пакет обновлений, после которого обычно можно начинать работу с продуктами Microsoft, задержали более чем на год, до марта 2008 года. Такие повороты неприятны не тем, что за ними обычно скрывается некий тайный смысл и прочая конспирология, а тем, что, судя по заявлениям для публики, стоит за всем этим нескоординированная работа разных служб и сумбурная техническая политика последних лет.

Интересно также, что Билл Гейтс и Стив Балмер в конце 2000-х годов начали активно продавать свои доли в бизнесе Microsoft.

О материальном

И немного о материальном, про оборудование. Периферия. Широко распространено мнение о том, что Linux на порядок хуже чем Windows поддерживает всякие периферийные устройства. Однако это не совсем так.

Если брать 32-разрядные версии Windows, то, действительно, нетрудно найти драйвер даже к довольно старому устройству. Но Microsoft уходит с 32-

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

Тут-то и выясняется, что по уровню поддержки периферии 64-разрядные Windows отрезают вам путь к использованию ещё совсем нестарых устройств. Если у вас в доме или на работе имеется оборудование 2–3-летней давности, то с большой вероятностью найти драйверы даже под Vista x64 вам не удастся. Не говоря уже о Windows 7. Единственный доступный выход – виртуальная машина с Windows XP.

А что же в Linux? Если оборудование поддерживалось в предыдущих версиях таких распространённых дистрибутивов, как Ubuntu или Mint, то независимо от разрядности новых версий системы оно будет продолжать поддерживаться и в них после обновления. Сканером и лазерным принтер я пользуюсь уже более пяти лет, сначала в 32-битной Windows XP, установив драйверы из комплекта, а затем под 64-разрядными Ubuntu и Mint из дистрибутива, не требующими установки драйверов вообще. Чего и вам желаю.

Проектирование и процессы