Проекты
Файлы

Гвинт

25 сентября 2016

В третьем Ведьмаке была замечательная карточная мини-игра, называющаяся Гвинт. Она так понравилась публике, что разработчиков постоянно спрашивали, не собираются ли они выпустить эту игру отдельно. На последней Е3 они объявили, что действительно разрабатывают такую игру, и открыли запись на бета-тест, который пройдет 25-го октября.

Тем не менее, сейчас, примерно за месяц до бета-теста, они запустили другое событие — Kill the Servers, где предлагают поиграть в определенные дни и время, чтобы проверить инфраструктуру на стойкость.

На сайте игры нужно написать адрес своей электронной почты, пройти капчу и нажать на кнопку. В моем случае это повлекло появление GOG-окошка логина. А после логина в мою библиотеку была добавлена KtS-версия игры, которую я тут же начал скачивать.

Меню сделано неплохо, хотя интерфейс постоянно предлагает все возможные комбинации для совершения действий: кнопку Xbox-контроллера при входе, кнопку на клавиатуре, кнопку, на которую можно нажать мышью.

На время теста доступно две ненастраеваемые колоды — Королества Севера и Монстры. К слову, за вторую я так еще и не поиграл.

Я немного перепутал время теста, поэтому пытался войти в игру сразу после скачивания. Оказалось, что они открыли скачивание за день до самого события, а не в день события, как это иногда бывает.

На экране поиска соперника всегда показывается карта Цири. Хотя карт и нарисовано три, переключаться между ними нельзя, как, например, было сделано на экране загрузки Dragon Age: Inquisition.

В самой игре все поменялось: перерисован интерфейс, карты, но, что самое главное, изменилсь правила. Во-первых, в конце каждого раунда происходит добор карт. Если я правильно понял, две карты после первого и одна после второго. Во-вторых, кроме рядов — мечники, лучники, артиллерия — у карт еще есть статус: бронзовый, серебрянный, золотой. На самом деле, если приглядеться, то разница-то вроде небольшая, но первое время немного смущает. Золотые карты — это герои из оригинальной игры. Теперь, правда, есть возможность прокачивать карты до золотых (а их, как и раньше, не берут никакие эффекты). Кажется, также изменили управление — какое-то оно непривычное.

Бета-тест, если я правильно помню, будет на PC и Xbox, а сама игра также будет работать на PS4. А я почему-то думал, что игра будет доступна также на мобильных платформах. Ну, наверное, до них она тоже доберется.

27-го октября пройдет вторая волна KtS, и, наверное, я поиграю еще пару раз.

VolgaCTF 2016

17 сентября 2016

На этой неделе был в Самаре на VolgaCTF 2016. Наша команда имела некоторые трудности с оформлением поездки, поэтому часть команды не поехала вовсе, двое отправились на поезде, а трое (включая меня) — на самолете за свой счет, потому что ехать 40 часов в поезде не хотели.

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

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

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

Вернувшись в профилакторий, мы заказали пиццу, и приступили к завершению нашей флагосдавалки.

Наконец, в день соревнований нас привезли в Holiday Inn на автобусе. В зале, где проводилась игра, нас встретил AC/DC — T.N.T. Во время игры играла ненапряжная электроника, будто сбежавшая с моего Яндекс.Радио — Dance with the Dead, например. В целом, было похоже на RuCTF, хотя зал и экраны со скорбордом, конечно, были не такие огромные.

Мы разместились за своим столиком, скачали образ системы и приступили. Первый час сеть была закрыта. К моменту, когда нам понадобилось написать эксплойт, оказалось, что в флагосдавалке есть пара ошибок, которые мы не могли найти до соревнования. Мы быстро их исправили и больше проблем со сдачей флагов у нас не было (если не считать дурацкого ограничения на число сдаваемых флагов, из-за которого приходилось иногда приостанавливать сдачу флагов).

Команда почти всю игру держалась в топе. В частности, мы были на первом месте с 100% по availability и defence. За час до конца скорборд заморозили, и тогда мы были на втором месте.

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

Нам вручили кубок, торт и каждому подарили по экшн-камере и селфи-палке.

После закрытия мы съели наш торт, а потом пошли по Самаре. Ребят, отправляющихся на поезде, повели дальше, а мы от них отделились и сходили в Папа Джонс. Оттуда нас забрал водитель и привез в аэропорт. Он, кстати, очень круто выглядит снаружи, но я сделал фотки только изнутри:

Собственно, на этом все.

Mirror`s Edge Catalyst

22 апреля 2016

Сегодня на почту упало письмо с приглашением в закрытую бету Mirror’s Edge Catalyst. Я записывался на нее где-то месяц назад и думал, что бета давно прошла, а я просто в нее не попал. Забавно, кстати, что EA раздает не только код на бету для тебя, но еще и код для одного друга (который я пока что не использовал).

Я вообще люблю играть в беты, потому что можно составить некоторое впечатление об игре, бесплатно поиграть в нее и наиграться понять, хочу ли я ее покупать. Так, например, я играл в Evolve, а также Star Wars: Battlefront и Rainbow Six: Siege. Правда, в случае первой я забыл сделать скриншотов (а графон в игре крутой), а вторая вроде как была публичной, да и я в нее почти не играл.

Управление в новом Mirror’s Edge абсолютно такое же, как и в старом: Space на все подряд, Ctrl на всякие скольжения, правой кнопкой мыши открывать двери, и т.д. Тем не менее, чувствуется оно немного по-другому. Боевка мне как-то не сильно нравится, а выполнение трюков, как и раньше, оставляет смешанные впечатления — то недолетел, то перелетел, то не смог по стене пробежать, хотя видно, что человек бы пробежать по ней смог.

В начале игры нас встречает длинная катсценка от третьго лица. Забавно обыграли очки дополненной реальности, в которых полэкрана занято всякими попапами, и которые, если я правильно понимаю, и обеспечивают «runner’s vision».


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

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



Игра иногда выдает крутые сочетания цветов и всячески пытается радовать глаз:


Карта выглядит классно, а в режиме прохождения трассы на скорость прикольные скорборды:

По всему убежищу разбросаны красные тапки, а в катсценах бывают забавные детали — например, игра в го или голубь:

Еще дают поиграть в миссию из трейлера:



Когда появляется новый вид противников, показывается небольшая катсценка:

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

Кстати, заметил какое-то странное сходство с Dying Light — не столько в геймплее, сколько в подаче персонажей и заданий. Только в Dying Light это выглядело как-то лучше. Зато в Mirror’s Edge визуальный стиль классный.

RuCTF 2016

20 апреля 2016

14 апреля наша команда улетела в Екатеринбург, чтобы поучаствовать в финале RuCTF 2016. Некоторые подробности в этой заметке могут показаться странными или ненужными, но я пишу ее в основном для себя, чтобы в следующий раз легко вспомнить, что нужно было с собой брать и как что работает.

Летали мы российским лоукостером «Победа», в стоимость билета которых не входит примерно ничего, и все дополнительные удобства покупаются за отдельную плату. Например, выбор места в самолете стоит 150 рублей. Мы с ребятами купили себе места в одном ряду, а на регистрации тем не менее получили случайные места. Обратно, правда, выбор места сработал.

Сдав свой багаж (до 10 кг бесплатно) на регистрации и получив посадочный, надо пройти контроль и сесть в самолет. Кстати, мне и еще одному участнику команды выпали места около аварийных выходов у крыла, а там, оказывается, больше пространства для ног.

Несмотря на то, что мы вроде как договаривались, чтобы нашу команду встретили, встречали не нашу команду, а наших попутчиков — и нам пришлось поехать с ними в одном автобусе стоя. Жили они в другой гостинице, поэтому нас высадили минутах в двадцати ходьбы от нашей гостиницы. По пути мы зашли в KFC и даже думали, что нас не заселят, поскольку расчетный час с 13:00, но присмотрелись к договору, по которому у нас ранний заезд, и сразу направились заселяться. В здании не все этажи принадлежали гостинице, и на первом этаже нас встретил какой-то подозрительный ресепшн, с которого нас вскоре перенаправили на пятый этаж.

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

В общем, мы завалились спать и только отлежавшись пошли прогуляться по городу. Мы спустились к набережной, перешли на другую сторону и решили зайти куда-нибудь поесть. Неподалеку расположились Макдональдс, Subway, Вилка-Ложка и Пицца Мия, и мы отправились в последний. Они вроде бы готовят пиццу, но кроме нее можно также заказывать картошку, наггетсы и все такое. Так вот там все дешевое и невкусное.

Обратно мы пошли другим путем, прогулялись по одной такой длинной улице, прошли мимо презедентской резеденции, вдоль реки и в очередной раз у нас на пути возник Высоцкий — местный многоэтажный бизнес-центр. Мы решили посетить смотровую площадку и, заплатив по 300 рублей, поднялись на 52-ой этаж, откуда посмотрели на ночной Екатеринбург и попытались сделать несколько фотографий.

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

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

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

В первый день на конференции были баттлы — два человека из разных команд поднимаются на сцену, подключают к своим ноутбукам проекторы и одновременно решают одно и то же задание на глазах у всех остальных. Задания были немного странные, но в целом это было забавно. Участники получают символические призы и за победу, и за проигрыш. В этот день мы снова сходили в Пицца Мия, где пиццу я уже не брал и снова убедился, что и все остальное там не очень.

Второй день начался со специальной олимпиады, прикидывавшейся тасковым CTF. Был отключен интернет, а большинство заданий были завязаны на восстановление поломанных картинок. Потом продолжились доклады на конференции, а после нее был организован круглый стол, на котором должны были присутствовать представители всех команд. Если я правильно понял, пришли представители далеко не всех команд, да и профит от этого собрания мне кажется сомнительным, поскольку все просто пожаловались друг другу и никто ничего не собирается по этому поводу делать. Правда, после круглого стола мы договорились с томскими ребятами о совместных тренировках, так что некоторая польза от этого все-таки была.

Наконец, на третий день проходил сам RuCTF. После завтрака мы погрузились в автобус и отправились в «Ельцин Центр», где и проводились соревнования. Там огромное помещение и не менее огромный экран, на котором демонстрировался скорборд. У каждой команды был собственный столик, а чуть позже организаторы выдали каждой команде по ноутбуку с установленным образом и небольшие трансмиттеры с USB.


После соревнований часть команды отправилась в отель, а я вместе с остальными поехал в бар на «празднование окончания соревновний». Пицца в этом баре была тонкая и маленькая. Организаторы сделали нам бесплатных бутербродов, а потом стали проводить алковикторину. После нее выкатили торт, мы съели по кусочку и решили удалиться с этого мероприятия.

Наконец, в последний день нас ожидало закрытие/награждение и разбор заданий. Я выиграл коллекционную толстовку соревнований, ребят наградили за успехи в олимпиаде. Разбор был на несколько ломаном английском, а некоторые уязвимости были очень странными. После разбора мы еще немного пообщались с другой командой и направились в Subway. Я это заведение не очень люблю, но в этот раз мне удалось составить что-то достаточно съедобное. Рецепт прост: берем сабвей мелт, из овощей не добавляем ничего, кроме салата, и заливаем сырным соусом и кетчупом.

Мы снова вернулись в отель, немного там посидели, собрали вещи, и отправились гулять и искать сувенирные магазины. Мы снова добрались до длинной пешеходной улицы, зашли в магазин настолок и приобрели Bang!. Ребята также купили всяких магнитиков в магазинах неподалеку и мы стали возвращаться. Мы сыграли одну катку и начали выселяться. Всю бухгалтерию на ресепшене сделали сами и положили наши документы в ячейку, чтобы мы могли их забрать при выселении. Мне, кстати, очень понравилось, как работает Яндекс.Такси с их отображением движения такси на карте в реальном времени. На обратном пути ничего особенного не произошло.

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

Oracle Database

21 февраля 2016

На этой неделе я пытался установить Oracle Database, к которой я буду подключаться для выполнения задания по базам данных. По заданию я должен написать клиента для базы данных — обязательно Oracle Database — на любом ООП языке. Ну, поскольку клепать интерфейсы из долбанутых свинговых элементов на Java я не хочу, я решил взять PHP — верстать-то всяко проще.

Итак, мне нужно было собрать что-то навроде LAMP, но с Oracle Database вместо MySQL. В предыдущем семестре я подключался к MySQL из Java через JDBC и краем глаза видел что-то про ODBC, да и на лекциях про него упоминали. Именно так я и собрался добираться до базы данных из PHP.

Первое, что мне пришло в голову — взять серверную Ubuntu, да и поставить на нее Apache, PHP и Oracle Database. Это, на самом деле, была первая ошибка — Oracle указывает список «сертифицированных» платформ, на которые их база данных ставится, и Debian в этот список не входит. Тем не менее, найти в интернете туториал по установке именно на Ubuntu было несложно, и я, проделав множество хитрых и не очень манипуляций, умудрился установить эту базу. Правда, это еще не все: ведь нужно было создать экземпляр этой базы (чтобы было к чему подключаться), подключиться к нему (внутри экземпляра сама по себе база не создалась, поэтому при подключении выбрасывалась ошибка) и создать саму базу. Кроме того, на этом пути было множество преград различной сложности, обходить которые приходилось, находя крупицы информации о похожих сложностях в интернете.

Надо заметить, что выбранная Ubuntu Server, конечно, легкая, нормально работает с небольшим виртуальным жестким диском и быстро запускается, но совсем консольная. Я-то не против, но ее нельзя скроллить, и мышь она не поддерживает, и вставить текст из машины-хоста не выходит. Поэтому все надо набирать вручную. Так вот скрипт, который создает базу данных через SQL*Plus, занимает 20 строк. Пример этого скрипта в интернете содержал ошибку, а еще если случайно неправильно что-то набрать, то запускаться он не будет. А может начать работу, поругаться на что-то (например, файл не удалось создать) и завершиться. Если его еще раз после этого запустить, то будет ругаться на то, что какие-то файлы уже созданы. Короче, прежде чем 20 строк печатать, надо сначала еще пройтись и от предыдущего запуска все почистить. В какой-то момент мне это все надоело, и я-таки загуглил, что можно выполнять скрипты из файлов — тогда я этот файл один раз хорошо написал и в виртуалку перекинул. Но раз десять я 20 строк вручную печатал, да.

Короче, я-таки смог настроить базу данных, создать пользователей и все такое, но это еще был не конец. Тут меня поджидал ODBC-драйвер, который Oracle додумались не включать в поставку базы данных, а выкладывать отдельными пакетами на своем тормознутом сайте. Чтобы вся эта связка Oracle Database — Oracle ODBC driver — unixODBC — PHP работала, надо настроить listener, который будет откликаться на некоторое имя (DSN) и сообщать, а к кому же на самом деле обращаться за нашей базой данных. Ты вот его настроишь, а он как будто бы и не работает, когда через PHP обращаешься. А как будто бы и работает, если через консоль. Тем не менее, надо было установить ODBC-драйвер, у которого библиотеки слинкованы с неправильными именами, и надо париться с переименованием/созданием симлинков. Потом надо было настроить unixODBC, чтобы он узнал, что у нас установлен этот драйвер. Еще надо не забыть расширение PHP, которое работает с ODBC.

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

Ну, тут я не выдержал и написал на Stack Overflow. А сам пошел устанавливать Oracle Database в виртуалку с Solaris, потому что, во-первых, он «сертифицированный», а, во-вторых, для него есть установщик с визуальным интерфейсом. Когда во время установки сама софтина поставилась, а вот справиться с первоначальной настройкой базы данных не смогла, я решил, что еще раз я все это делать не хочу — раз их собственный инсталлятор не может этого сделать, то и я не буду.

На третий день за завтраком я решил погуглить, нельзя ли зарегаться в каком-нибудь сервисе и получить в свое распоряжение Oracle Database с доступом по ODBC. Вместо этого я наткнулся на страницу на сайте Oracle, с которой можно скачать образы операционных систем для виртуальной машины. Эти образы содержали уже установленную и настроенную базу данных (или какую еще софтину — в зависимости от образа). Все, что мне оставалось — установить Apache, PHP и ODBC-драйвер, потому что Oracle сделать этого не удосужился. В общем, установить-то получилось, и даже получалось из PHP обратиться к базе данных через ODBC. Но только из консоли. Когда я делал это, открывая в браузере страницу, Apache падал с сегфолтом. Я даже посмотрел core-файл через gdb — сегфолт происходил в библиотеках ODBC-драйвера Oracle. Это очень странно, поскольку консольный PHP почему-то работал через этот драйвер нормально.

Я написал еще один вопрос на Stack Overflow. К первому появился лишь комментарий, в котором попросили добавить еще немного информации. Надо отметить, что подобная проблема была описана на Stack Overflow, только решение мне не подошло (а решение из комментов — пересобрать unixODBC и PHP — я пробовать не хотел). Я попробовал использовать Nginx вместо Apache, но он точно так же выдавал ошибку.

На четвертый день я скачал еще один готовый образ. На этот раз это был образ от Zend — разработчиков PHP. Это был Oracle Linux 6 (Red Hat Enterprise Linux 6, в который Oracle поставили свои нескучные обои и раздают нахаляву в своих образах), в котором установлены Oracle Database и Zend Server. В общем, тут мне даже не пришлось ставить ни Apache (который используется Zend Server), ни PHP (который настраивается через Zend Server), ни даже ODBC-драйвер от Oracle (потому что он уже был установлен вместе с базой данных). Мне нужно было сделать всего пару вещей: включить ODBC-расширение для PHP (один клик в Zend Server), установить и настроить unixODBC (который по какой-то причине установлен не был) и создать базу данных (тоже немного странно, что ее по умолчанию не было). На этот раз меня снова ждала проблема: ODBC-драйвер Oracle пытался найти библиотеку, которая во всех трех предыдущих случаях была, а в этом почему-то не находилась. Тщательные поиски-таки вывели меня на ее новую версию, я создал симлинк, и ничего не заработало. Точнее, из PHP ничего не заработало — isql спокойно подключался и работал.

Тогда я решил посмотреть, нельзя ли из PHP достучаться до базы данных Oracle каким-нибудь другим способм. Оказывается, можно: OCI8. Опять же, поскольку это образ от Zend, расширение уже было установлено, поэтому мне нужно было лишь скинуть пример в виртуальную машину и поменять DSN, имя пользователя и пароль. Так вот это сработало с первого раза.

Казалось бы, хэппиэнд. Тут надо еще раз вспомнить, что у меня было:

1) Ubuntu Server, на котором все работает, только почему-то ODBC-драйвер не видит базу данных, хотя все настройки правильные;
2) Solaris, на котором никто ничего особо не пробовал делать;
3) Oracle Linux 7 от Oracle, на котором был сегфолт при использовании ODBC-драйвера из PHP через Apache;
4) Oracle Linux 6 от Zend, на котором ODBC не работал, зато с полпинка заработал OCI8.

Немаловажная деталь: Zend Server триальный, и через 30 дней превращается в тыкву Lite-версию. Я понятия не имею, что это будет означать для меня, но и никакого желания потом это все заново перенастраивать у меня тоже нет.

Oracle Linux 7 выглядит стильнее и удобнее, да и пользователи там были настроены получше. Проблема только в том, что он себе отхватил дисков на 60 гб, а та же виртуалка от Zend — всего на 30.

Решил я, короче, попробовать установить OCI8 еще где-нибудь, чтобы можно было выбирать между рабочими виртуалками. В OL7 у меня этого сделать не получилось. Тут я возвращаюсь в Ubuntu Server (на который я выделил всего 10 гб) и пытаюсь установить OCI8 там. Это у меня опять не выходит, но я зачем-то решаю посмотреть на настройки еще раз — теперь-то я знал, как они выглядели на машинах, где все работало, и мог сравнить. Настройки DSN выглядели как-то пространно, хотя я помнил, что на другой машине мне хватало и пяти строчек. Прописываю второй DSN в пять строчек. Работает.

Оказалось, что у меня была глупая ошибка, которую было сложно заметить среди той кучи строк. Второй DSN был настроен без ошибок, а все остальное на машине было в порядке, поэтому я смог подключиться к базе данных через ODBC из PHP.

Я ответил на свой же вопрос на Stack Overflow, удалил Solaris, и пока что планирую использовать виртуалку с Ubuntu в качестве пробного сервера. Виртуалки с Oracle Linux я пока удалять не стал — вдруг пригодятся еще.

Не думаю, что кому-то что-то было понятно из всего этого графоманства, но хочу заметить, что все эти упражнения я провел лишь ради того, чтобы выполнить задание по написанию клиента к базе данных. Не задание по установке операционных систем и не задание по установке и настройке базы данных — по написанию клиента. Возможно, это было бы куда проще, если бы я собирался написать его на Java — особенно, если бы я сразу скачал образ с установленной и настроенной Oracle Database. Только вот это задание должен сделать не один я, а двадцать человек из двух групп. Нельзя было настроить сервер с базой данных один раз, создать каждому студенту по пользователю в базе данных и просто дать всем доступ? Мне кажется, что как-то неправильно, когда задание по написанию клиента к базе данных неявно включает в себя задание по ее установке и настройке. Причем установка и настройка оцениваться не будут, несмотря на то, что без них у студента просто не будет возможности тестировать свой клиент.

1 2 3 4