Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.
Горячая семерка
На этой неделе компания Яндекс запустила мобильную версию «Яндекс.Браузера» со встроенным поисковиком для планшетного компьютера iPad и Android-смартфонов. Кроме того, главный специалист «Яндекса» по ранжированию рассказал о персонализации и счастье пользователей. А для тех, кто хотел посмотреть на офис компании изнутри, может ознакомиться с отчетом об экскурсии в московский офис
Довольно много веб-разработчиков используют в своей работе Chrome Devtools, которые с каждым новым релизом браузера обрастают новыми полезными возможностями. Однако, далеко не все знают его них. Например, из свежего — DevTools port forwarding позволяет обращаться к адресу localhost на мобильном девайсе . Восполнить эти пробелы поможет раздел Tips And Tricks в соотвествющем разделе на developers.google.com. Кроме того, можно обратить внимание на devtools-snippets — коллекцию сниппетов для инструментов разработчиков и на туториал с подробным описанием того, как Chrome DevTools могут помочь в работе с Sass.
Предлагаем вам к прочтению перевод статьи с историей замечательного сервиса Pocket, ранее известного как Read It Later. За несколько лет существования они продолжают оставаться преуспевающей независимой компанией, несмотря на трудности, мощных конкурентов и предложения на миллионы от больших игроков веб-рынка.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
В блоге Qt появился обзор, предстоящих нововведений в Qt Quck в грядущей 5.1. Если вкратце, они добавили функционал виджетов, аналог QMainWindow и дали возможность использовать QML в виджет-проектах, правда в несколько усеченном варианте. Таким образом Qt Quick готов для разработки приложения и на десктопах.
Нам дали практически все то, что привыкли видеть в виджетах. Первое и самое пожалуй важное это компоновщики:
думаю, зачем они нам нужно и почему их не хватало на десктопах думаю не надо. И если судить по блогу и по доке, то функционал был запилен в полном объеме.
Добавили несколько View классов (или как их там): SplitView, ScrollView и TableView
О первом из них я долго мечтал.
Добавили классические элементы управления:
И дали возможности гнуть как душе угодно, ровно как и VIew-ры.
TextArea { text: "This widget spans over three rows in the GridLayout.\n" + "All items in the GridLayout are implicitly positioned from top to bottom." Layout.rowSpan: 3 Layout.fillHeight: true Layout.fillWidth: true } } }
Ну чтож, по крайне это не стало сложнее, а вкупе с изначальными возможностями qml оставаться верным виджетам я уже смысла не вижу
Ссылки
Developers, stick with Russians – work in London
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Также на этой неделе вышло расширение для Adobe Flash CC для экспорта графики и анимации в Dart.
Этот инструмент, совместно с фреймворком StageXL, позволяет разработчкам, использующим flash-платформу, с легкостью создавать достаточно сложные приложения на HTML5.
На данный момент в нашей команде проходит эксперимент по использованию Dart+StageXL, пока что результаты обнадеживают.
Developers, stick with Russians – work in London
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Наверное, многие участвовали в играх, где нужно было угадать фильм или сериал по кадру из него. Очень часто такие топики-игры встречаются на форумах. А недавно мне показали сайт, целиком посвящённый угадыванию аниме по кадру. С автоматизированной игрой: с учётом очков, с вариантами ответов.
После нескольких игр мой интерес как анимешника был удовлетворён, и во мне проснулся айтишник. Стало интересно, а какая есть на сайте защита от читерства. В ходе короткого анализа, оказалось, что с защитой от читерства всё печально, взломать игру можно даже с начальными знаниями JS. Тут бы и погаснуть моему айтишному интересу, но нет, я задумался, а что нужно вообще сделать, чтобы защитить от читеров подобную игру. Так и появилась эта статья.
(картинка для привлечения внимания)
Дальше я расскажу о найденных в игре слабых местах и о методах защиты от читерства для подобных игр, которые мне удалось придумать.
Суть игры
На каждом шаге игроку демонстрируется кадр из аниме и 4 варианта ответа, из которых 1 правильный. Игра идёт до первого неверно угаданного кадра. На каждый кадр игроку даётся 15 секунд. Также по одному разу можно пропустить кадр или воспользоваться подсказкой «50 на 50».
Технические детали и «взлом» игры
Посмотрев на урлы страниц сайта, я легко обнаружил, что он работает на PHP. А тот факт, что игра проходила без перезагрузки страницы, говорил об использовании AJAX. Клиентский функционал находился в единственном подключённом скрипте game.js.
Первое, что меня разочаровало в безопасности игры – то, что game.js не обфусцирован. Там удалены лишние пробелы, но, не считая этого, код находится в первозданном виде.
Но всё было ещё печальнее. Запустив Firebug и посмотрев содержимое ответов AJAX, я обнаружил один очень интересный параметр.
Да, этот параметр содержал не что иное, как индекс верного ответа, от 0 до 3. Я никак не ожидал, что всё будет так просто, что даже не интересно. Надежды, что надо будет подключать Google Images для отгадывания, рухнули.
Дальше было дело техники. Первым делом я пропустил код из game.js через JS Beautifier, получив читаемый код. Код оказался довольно простым и без всякой защиты. Ответы AJAX обрабатывались в функции startGame. Оставалось всего лишь переопределить эту функцию. Для этого я подключил небольшой greasemonkey-скрипт.
В скрипте я просто по полученному из XML номеру ответа подсвечивал нужную кнопку. Впоследствии сделал автоматическое нажатие её через 2 секунды. Код приводить не буду, чтобы не потакать читерам, пусть сами хоть чуть-чуть подумают при желании. Там буквально 3 строчки. Но я был удивлён, что при такой защите в топе не засветился никто с максимальным количеством очков.
Слабые места игры и защита от читерства
Передачу верного ответа вместе с вариантами и загадкой сложно даже слабым местом назвать, авторы вообще, скорее всего, не задумывались о читерах. Номер верного ответа, конечно, следует сохранять в сессию и проверять на стороне сервера, что легко сделать средствами PHP.
Первым, что я рассмотрю, будет защита на клиентской стороне. Игра имеет два ограничения в JS: она автоматом завершается, если истекло время на угадывание кадра, или в случае переключения на другое окно. Мне не совсем понятно, зачем запрещать переключение на другое окно, тогда как время и так ограничено. Только если чтобы игрок быстро не загуглил кадр. Но так решили создатели сайта.
Защита от переключения на другое окно.
Слабое место её в том, что JS полностью подконтролен клиенту. Полностью решить проблему нельзя, можно лишь затруднить злоумышленнику взлом. Чтобы хоть как-то защитить игру от изменений JS, его, конечно же, нужно обфусцировать. Совсем хорошо бы было генерировать и обфусцировать js-файл на лету при каждой загрузке страницы, помещая туда разные функции вычисления некого токена, который бы проверялся через AJAX. Так злоумышленнику было бы сложно подменить JS. Сложно, да не совсем.
В конце концов, чтобы отключить защиту от переключения на другое окно, нужно всего лишь переопределить window.onblur. Но и это решаемо, если периодически проверять, не переопределён ли обработчик данного события.
var check_onblur = function() { if (window.onblur !== onblur_handler) { alert('Попался, читер! Мы вычислили тебя по IP. Братва уже выехала!'); window.onblur = onblur_handler; } }
Злоумышленник, конечно, может вообще не выполнять наш JS, но если он будет обфусцирован, да ещё содержать какие-нибудь токены для AJAX-запроса, это доставит хлопот.
Таким образом, получается, что наше приложение должно будет посылать на сервер номер ответа и токен, полученный из JS; а принимать с сервера ссылку на следующее изображение и варианты ответа.
Ограничение по времени.
С ограничением по времени можно поступить аналогично, оставив защиту на стороне клиента. Но можно и подстраховаться, проверяя время и на сервере. Но стоит учесть, что картинка отображается у клиента не мгновенно, и после нажатия на кнопку запрос на сервер приходит тоже не сразу. Поэтому нужно дать клиенту некоторую фору по сравнению с сервером. Идеально было бы анализировать «отставание» клиента, и принимать меры, только если оно значительно.
Повторение кадров.
Эта проблема относится не совсем к безопасности, но я её тоже рассмотрю. Суть в том, что раз кадры выбираются случайно, то в рамках одной игры два кадра могут совпасть. Это не правильно. Решить проблему можно довольно просто. Учитывая, что общее количество кадров не очень велико, можно при старте игры загружать все кадры (а точнее их идентификаторы) в массив, сортировать его случайным образом, сохранять массив в сессию, и по очереди выдавать кадры игроку. В PHP для сортировки в случайном порядке как раз есть функция.
shuffle($screenshots);
Ссылки на скриншоты.
Ещё одно слабое место игры – ссылки на скриншоты. На сайте игры все они имеют формат вида /web/ANIME_ID/SCREENSHOT_INDEX.jpg, то есть ответ засвечивается уже в адресе картинки. Поэтому не стоит вообще отдавать прямые постоянные ссылки на скриншоты. Можно отдавать скриншот средствами PHP всегда по одному и тому же адресу. Просто перед каждой новой загадкой нужно сохранять в сессию идентификатор выбранного кадра и отправлять этот кадр при обращении к определённому php-скрипту.
Проблема конечного количества скриншотов.
Наконец, самая сложная проблема. Дело в том, что количество кадров ограничено, поэтому в новых играх они будут повторяться. Злоумышленник может просто написать программу, собирающую все кадры и соответствующие им аниме. После чего останется только с помощью другой программы сравнивать текущий кадр со всем наборов сохранённых. Замечу, что если бы проблема ссылок не была бы решена, злоумышленнику достаточно было бы сравнивать лишь ссылки.
На самом деле, любой игрок со временем может запомнить кадры, которые будут повторяться. Но в отличие от читеров, он сделает это своими силами. Для борьбы с читерами остаётся только усложнить им процесс программного сравнения кадров.
Для достижения цели потребуется каждый раз при передаче пользователю кадра вносить изменения в него. Если этого не делать, найти два одинаковых файла одного кадра злоумышленнику будет просто. Изменять картинки можно с помощью библиотеки GD, входящей в комплект PHP.
Самое простое – случайно менять качество JPEG, передаваемого клиенту.
function open_screenshot($filename) { return imagecreatefromjpeg($filename); }
function echo_screenshot($image) { $quality = rand(60, 100);
Однако все эти манипуляции только слегка искажают цвета, но оставляют возможность простого попиксельно сравнения. Чтобы усложнить задачу, можно обрезать кадр по горизонтали и вертикали, сохраняя пропорции и затем увеличивая до исходного размера.
function cut_image($image) { $k = rand(98000, 100000) * 0.00001;
Теперь, если кадров в игре достаточно много, задача сравнения станет не такой уж тривиальной. Хотя если в распоряжении злоумышленника есть алгоритмы сравнения как в Google Images, то и это не будет помехой. А также эффект от обрезания меньше, если сравнивать уменьшенные версии кадров.
Картинка состоит из 6 вариантов кадра, полученных вышеприведённым способом. Как видите, везде разные значения яркости и контрастности. Если приглядеться, можно обнаружить, что в некоторых кадрах изображение обрезано по краям больше, чем в других.
Кстати, от банального гугленья скриншота я защиты не придумал. Разве что искажать его ещё сильнее, но это может повлиять и на узнаваемость человеком.
Пожалуй, это всё, что я могу сказать о технической стороне защиты от читеров в данном случае. Я думаю, подобные идеи рано или поздно пришли бы в голову любому разработчику, озаботившемуся защитой подобных игр.
Заключение
Заниматься читерством на сайте я всё-таки пока не стал даже из айтишного интереса, потому что взлом защиты подобного уровня – не большой повод похвастаться.
На самом деле, отсутствие защиты от читерства – тоже защита. Читерство ведь в данном случае ничего не даёт, а лёгкость нечестной игры убивает всякий интерес в нём. Конечно, если сайт хотел бы поддерживать реальные рейтинги, то ему стоило бы позаботиться о защите.
Кстати, хочу заметить, что кое-что описанное в данной статье можно применить не только к такого рода играм, а к чему-то более серьёзному. Например, онлайн-тестам.
P.S.
Адрес сайта я до сих пор не писал, чтобы не было похоже на рекламу. Но играть с вами в «угадай сайт по скриншоту» я не буду. Сайт, о котором идёт речь, – guessanime.com.
Я никакого отношения к сайту не имею. Если статья как-то заденет владельцев, мне очень жаль.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Количество ссылок колоссально, но большинство — строго по делу, плюс — все упорядочено по группам (пример для фронтенда):
Общие руководства
Архитектура
Workflow
Фреймворки
Cross Browser
Cross Device
Паттерны и сниппеты
Манипуляция с DOM
Сервисы
… и многое другое
Настоятельно рекомендуется добавить к себе в закладки, а еще лучше — почитать.
—
857
47
Developers, stick with Russians – work in London
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Facebook в субботу признала, что допустила утечку личных данных 6 миллионов пользователей из-за сбоя в программном обеспечении.
Вот официальное сообщение Facebook по этому поводу: «Вследствие (неисправности) при загрузке архива своего аккаунта в Facebook при помощи инструмента Download Your Information (»Загрузить копию вашей информации", DYI) пользователь мог получить адреса электронной почты и телефонные номера других пользователей из своего контакт-листа или тех, с кем он были каким-либо образом связан в социальной сети".
Facebook сразу же отключила инструмент DYI для исправления уязвимостей и через сутки снова включила этот сервис. В руководстве соцсети уверяют, что никакие данные, «утекшие» из аккаунтов, не были использованы со злым умыслом.
Developers, stick with Russians – work in London
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
В PHPStorm есть встроенная возможность подключения автодополнения имен таблиц и полей в редакторе кода, однако не все об этом знают.
Если у вас код отображается примерно так, то прошу под кат.
Шаг 1. Подключение базы данных
Устанавливаем курсор в область SQL кода, у меня она выделена красным, и нажимаем Alt+Enter. Выбираем Configure Data Source
В открывшемся окошке выбираем JDBC драйвер, в данном случае MySQL, и, если нужно, нажимаем Click here. Выбираем какую-нибудь папку, где хотим разместить файлы, и нажимаем OK.
После того как шторм скачает драйвер, выбираем JDBC driver class.
В поле Database URL выбираем шаблон и меняем настройки на ваши, также указываем имя пользователя и пароль.
Если все сделали правильно, после нажатия на кнопку Test Connection появится подобное окошко.
Шаг 2. Выбираем SQL Dialects
SQL код в редакторе все еще красный. Бежим в настройки.
File — Settings — SQL Dialects
Напротив папки или отдельного файла нажимаем на keywords only и выбираем MySQL.
Теперь код в редакторе поменял цвет, и даже наверняка подсветились используемые поля, однако автодополнения все еще нет, точнее оно есть, но там нет ни полей, ни таблиц.
Шаг 3. Добавляем автодополнение
В данном случае этот шаг дела вкуса. Возможно вы не захотите автодополнения полей прямо в редакторе, ведь вы можете редактировать отдельно SQL код.
Для этого установите курсор в область SQL кода, нажмите Alt+Enter и выберите нечто вроде Edit MySQL fragment. В открытой области будет автодополнение полей и таблиц.
Но если вы все-таки решили не останавливаться, то устанавливаем курсор в SQL код, нажимаем Alt+Enter и выбираем Language Injection Settings.
В появившемся окошке щелкаем по php: «SQL select/delete/insert/update/create» и выбираем MySQL.
Все! Должно работать. Еще советую нажать в автодополнении на букву А в нижнем правом углу, если у вас там она, и переключиться на Sort by relevance.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Недавно приобрёл в целом неплохой телефон Sony Xperia P (LT22i). Аппарат шёл с Android версии 4.0.4 (прошивка 6.1.1.B.1.54). В принципе телефон работал нормально, не глючил, но в интернетах наткнулся на информацию, что дескать у прошивки 6.1.1.B.1.54 есть проблемы с эффективностью использования батареи, и что есть более свежая прошивка 6.2.A.0.400 в которой всё гораздо лучше.
Это не та информация, которую стоит читать если ты перфекционист, потому как качество сна после её прочтения слегка ухудшается. Не смотря на то, что меня с детства учили: “Лучшее — враг хорошего”, естественно я захотел обновиться, но как оказалось, именно для моего аппарата свежая прошивка была пока недоступна. Можно было выбрать 4PDA-way и обновить прошивку через Flashtool, но я не фанат по перепрошивке устройств и времени на эти заморочки у меня не было. Так что сославшись на занятость решил подождать официальной доступности новой версии ПО для моего аппарата. Благо он и так работал более чем удовлетворительно.
Через три недели телефон радостно сообщил что для него есть обновление системного ПО. Я по-быстрому забекаписля и накатил новую прошивку с помощью фирменного ПО Sony Update Service.
После прошивки в целом всё было хорошо, пока я не открыл звонилку. То что она поменяла фон с чёрного на белый, оставим на обсуждение эстетам. Чёрный фон в 4.0.4 на мой взгляд был приятнее, однако ко всему можно привыкнуть. Но меня сразу напрягли тормоза в списке вызовов. Список стал пролистываться урывками. Причём телефонная книга и избранные контакты листались плавно, как и должно быть.
Сюрпризы продолжились когда я попытался позвонить. Экран набора номера открывался через 1.5-2 секунды после выбора абонента в списке. Та же задержка наблюдалась при приёме входящего вызова и завершении разговора.
Всё это раздражало. Я кинулся искать проблему в сети. Быстро выяснилось что я не один такой. На 4PDA в качестве решения предлагалось жёстко откатиться на предыдущую версию с помощью Flashtool либо ждать когда Sony выпустит очередную прошивку с исправлением.
Некто RubinOwnz, которому большое человеческое спасибо, выложил буквально два скриншота по которым надо было догадаться что в настройках режима STAMINA надо указать некоторые сервисы “активные в режиме ожидания”. Также там было примечание что после настроек надо перезагрузить телефон.
Скриншоты настройки STAMINA
Итак, идём в Настройки -> Электропитание -> Режим STAMINA (ползунок не трогаем, выбираем саму опцию).
Там выбираем “Добавить приложения” и ставим галочки напротив:
AT Service ProtectedMediaScannerTrigger Инструменты SIM-карты...
Жмём “Готово” и после перезагрузки телефона, тормоза при наборе и принятии вызовов пропали.
Так как на скриншоте были включены и другие сервисы, я в надежде что это исправит лаги списка вызовов включил ещё:
SIM Detection
SmartSearch
Контакт SIM (SIM contact)
Но к сожалению безрезультатно.
Таким образом можно достаточно быстро и без перепрошивки решить главную раздражающую проблему: задержку при приёме и осуществлении звонков. С лагами прокрутки списка вызовов жить ещё как-то можно. В таком состоянии уже можно достаточно комфортно дожидаться выхода официальной прошивки с исправлением.
Так что если кто ещё имеет данный аппарат с Android версии 4.0.4, не торопитесь с обновлением до 4.1.2. Поверьте, у вас всё более чем хорошо.
P.S. Я не являюсь специалистом в области мобильных устройств, поэтому мнения специалистов по данной проблеме в комментариях только приветствуются.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Реборн, реюнион, ревивал, перезапуск – все это частные случаи Возрождений. Либо перекладывание старого на новый мотив, либо следующая часть призванная вернуть жизнь игре. Можно было бы сказать «но в наше время мы живем реалиями…» и солгать. Потому, что нет «нашего времени» в отношении понятия рынок. Вернее время то есть, но рынок вне времени. Он существовал задолго до нас, задолго до чеканки монет и появления денежных знаков. Он будет существовать и после. Не вечно, но до тех пор, пока на Земле не останется один человек. Двое – уже могут «толкать» друг дружке, как речи, так и вещи.
Хотел бы коснуться «возрождения бренда», в контексте банальной спекуляции на чувствах игроков. Часто это выглядит как маркетинговый ход имитирующий внимание издателей и разработчиков к истории, чувствам игроков, к старому поколению. На деле это попытка охватить, как можно больший рынок сбыта. Начиная ностальгирующими стариками и заканчивая современным игроком. Есть ли в этом предположении зерно истины, или это очередная из моих теорий заговора?
Вам что-нибудь говорит имя Flashback? Chaos Engine?
Немного мыслей, истории и FlashBack'а
Новое в этом, конкретном, случае ни разу не забытое старое. Просто обертка от него. Название. Символ прошлых лет. Когда нам говорят «мы сделаем новый Flashback» кто-то хлопает в ладоши, кто-то раздраженно кривится. Я такие ходы воспринимаю как Falseback. Не удивительно, ведь я Брюзга. Для меня нет «возродившихся легенд». Все легенды как и полагается – остались в древности. Сейчас вокруг много хороших игр, но это дети Титанов.
Тем не менее, мне пока что хватает мозгов не сильно размахивать флагом «А вот раньше!». Потому, что я понимаю — моя оценка может быть не адекватна. Я вижу новое на фоне старого. Я вижу и анализирую сегодняшние игры критериями старых игр. Это верно с моей точки зрения, и с точки зрения тех, кто несет знамена индустрии назад в прошлое, занимаясь разработкой игр в стиле предков.
Как-то даже случилось, что это возрождение стало мейнстримом. История пошла на обратный виток. Получается, что мне можно сказать «радуйся, что хоть имена старые не забывают», «радуйся, что вообще что-то делают» и этот кто-то будет прав. Только пошла ли она на обратный виток? Он ли это? Или умело созданная иллюзия подогретая событиями, бурлящими на Кикстартере? И не два ли это витка, один из которых попытка уйти к истокам, а второй даже не кривая, а просто прямая — от А до Б, где Б – просто деньги.
Ведь если мыслить категориями современного игрока любая игра – просто новая игра. Старый FlashBack или новый Flashback, какая разница? Еще одна новая игра, еще один новый мир, которого он не видел. Для него это не «Бум-Бам-Флешбек!», и не «тот самый вкус» как для меня, но аркада в Si-Fi сеттинге с хорошими эффектами. Не более того.
Ему ни к чему знать о том, что это название для многих было культовым и несло особый смысл. Достаточно просто термина – «культовый», или «на основе культовой». Ему незачем знать о том контроллере передвижения, который был использован в игре и который «засветился» лишь в ряде продуктов того времени. О технологии ротоскопирования которая делала анимацию удивительно плавной еще в 1950 году. Помните «Аленький цветочек»? И его удивительно плавную анимацию не уступающую Диснею?
Ему незачем знать, что этот тип контроллера опасен для разработчика игр сегодняшнего дня. Он медленный. Излишне тактичен (не в плане, «извините, простите, а можно я присяду?» а точки зрения динамики геймплея, которая чаще напоминает тактику, а не аркаду). В чем-то даже напоминает шахматы. Хотя, как нынче шахматы? Все должно летать, искриться и взрываться.
Я бы, конечно, промолчал в тряпочку и продолжал тихо ползти, едва слышно шурша простыней в лучшие миры, но появление трейлера ознаменовавший «перезапуск» бренда Chaos Engine вызвало чувство опасения. Как истинный брюзга я возопил «Доколе? Ну неужели обязательно нужно испохабить всю классику? Во все запустить свои по локоть озелененные долларами руки?!».
Спустя мгновение я, конечно, успокоился и призвал на выручку разум, который охладил безумствующие извилины и вновь вернул мне ясность сознания. Но… нервное подрагивание век и горько скривившийся рот подсказали мне, что тема больная. Что я пристрастен к ней. Болен. Тяжко. Прогрессирующее неприятие канвы сегодняшних дней четвертой стадии, осложненное «возрожденьческим синдромом».
Черные археологи Ubisoft раскопали Flashback
Помимо тех, кто свято чтит игровую историю, и для кого находки чего-либо, демонстрация затем их в музеях и разработка своих версий прошлого на базе реликтов – норма жизни, есть и те, кто копает прах ушедшего исключительно ради наживы. Так было всегда. Во все эпохи.
Перезапуск легендарного бренда сулит не малые барыши даже в том случае если игра совсем не нужный вам торт. Слащаво улыбающиеся кондитеры от EA и Ubisoft приторными голосами расскажут вам о «возрождении легенды», о искусстве пекарей прошлого и рецепте который им удалось найти. Покроют торт имитацией ванильной ржавчины, сахарной коррозии и джемом старения. Презентация того самого торта пройдет под улюлюканье молодежи и умильные рыдания специально приглашенных именитых стариков. Все это будет должным образом зафиксировано соответствующими информационными ресурсами. Практически идиллия.
За исключением того, что под лоском имитации древности на свет появится очередной блестящий шейдерами, бессмысленный, но безобразно эффектный клон клона. И с той лишь оговоркой, что на его борту будет красоваться лейбл «Сын легенды».
Старики, скажите мне, пожалуйста, может ли быть у Конрада такое интеллектуальное лицо? Это действительно сотрудник Галактического бюро расследований?
Святые чревоугодники, неужели именно так и должен выглядеть герой самой продаваемой в истории французской игровой индустрии игры? Если уж 3D, то почему такое? Этот бам-бум-бам фейерверк взрывов в трейлере, вспышек и прыжков – интеллектуальный, тактический и адвенчурный платформер Flashback? Холи Молли! Я готов признать себя старым пердуном, самой посредственной и убогой реализацией кубического брюзги, но это не наш Flashback.
Зачем эта тряска камеры? Для большего динамизма? Богатое мимикой лицо – для драматизма? И что, для создания динамики и драматизма больше способов нет? Простите, но такой гипертрофированной мимикой подавали переживания героев еще в году 2001, то есть… 12 лет назад. В Fallout Tactics. Помните брифинг рекрутов? Эти гипертрофированные движения бровями, расширяющиеся глаза, делающие их похожими на безумцев. И, если честно, они выглядят чуть ли не веселее чем Конрад. Веселее в смысле лучше. Как можно поражать умы современных игроков такой «классикой»? Почему игнорируется настоящая классика? Превосходная анимация? Изумительные ролики? Работа художников по фонам? Где остальные компоненты нашей звезды за вычетом имени?
В моем понимании если уж взялся следовать канонам, назвался человеком или командой, которая делает ремейк культовой игры, то уж делай ее соответственно. Даже фанат способен создать стиль лучший, чем это сделали наши друзья-эксгуматоры. Прошу обратить внимание:
Я не считаю это стиль лучшим, но он определенно чувственней картонки, которой я вижу в ролике. В нем есть дух. Эмоции. В видео я вижу только шарах-бабах, коих много. В ролике — просто игра. Без претензий и имя таким играм — легион. И если бы никто не называл ее ремейком, то как отдельная и самостоятельная игра она бы прошла вообще мною не замеченной. Но как Flashback, она такой же Back, как я шаолиньский монах.
Что весьма забавно и показательно FlashBack вызвал ажиотаж не только среди простых смертных, один из признанных мастеров концепт-арта Feng Zhu также посвятил этому время создав видео-туториал где он создает свою версию внешнего вида игры. Думаю что в известной степени это был не только персональный вижен нового Flashback, но и реклама его школе. Не смотря на то что сам он в рекламе не нуждается — дело нужно продвигать и ежедневно показывать всем какой ты клевый. Иначе о тебе забудут. Проверено временем. Подумал, что может быть… будет забавно сделать нечто подобное. Хотя… я уже делал нечто подобное для Wasteland 2 и хорошо помню чем это закончилось. Ничем.
Даже переиздание Another World (Another World’s 20th Anniversary Edition) было нежным и трепетным, предполагаю потому, что боялись испортить то внутреннее, что несла в себе игра. Поступили мудро — немного доработали фоны (на мой взгляд, много где, ухудшив их) и оставили механику как есть, лишь облегчив сложные гейм-плейные моменты (что, кстати, тоже очень зря). Не знакомы — обязательно попробуйте. Оцените. Это редчайший букет одного из лучших французских вин образца 1991 года.
Что мне как игроку с того, что в разработке «продолжения» участвует Paul Cuisset, разработчик оригинального Flashback? Мне как потребителю не имена важны, а дела именитых людей. Куда они все поисчезали?
Держу пари, что ими движет совсем не желание приобщить современного игрока к классике. Сделать новый, популярный и хорошо продаваемый продукт – да. Этого хочет каждый. Но точно также да – сделать все это за счет имени к проекту особого отношения не имеющего. Таким же Flashback'ом мог оказаться любой другой проект. В том числе и Half-life. А что? Завязка почти такая же. Земля. Пришельцы. Ну не агент национальной безопасности, но тоже очень удалой Гордон. Меняем имя на Конрада и делов палата. Если у кого-то не идет дело всего-то и нужно достать из кармана прошлые удачи. Вспомните Браена Фарго и Wasteland 2. Сначала достал из загашников ее, потом новый Тормент и бог знает еще чем удивит. Правда, пока, без впечатляющих результатов, на уровне слов.
Кстати, если привычно поиграть с лопаткой (не все же эмоции тут распылять), то выясниться что организацией, которая профинансировала Flashback Origins, стала CNC (Centre national du cinéma et de l'image animée), в моем вольном переводе Национальный Центр Кинематографии и Анимации. На проект были выделены 300 000 евро. Об этом гласит сухая, но очень красноречивая строчка (где-то в самом низу этого бланка). И тем не менее на трейлере уже красуется Ubisoft. Там где толстый – там и казуал.
Вспомните FarCry 3, где охоту на животное превратили в движение по маркеру до цели. Только круглый идиот взглянув на карту не поймет, что здесь у нас водятся крокодилы, а тут стоит искать тигров. Я так полагаю, что в Ubisoft полагают, что двух шагов мы по игре пройти уже не сможем. Поэтому они волокут нас по маркеру, если что возвращают на точку, и указывают где на карте можно найти каждое конкретное животное. Мыслить похоже совсем не к чему. Точно также, видимо, думали и в Rockstar, полагая, что игроку в Max Payne 3 будет мучительно тяжело оказаться перед лицом дилеммы – как пройти через коридор с колонной. Слева от нее, или справа. Это были одни из самых сложных по топологии уровней. «Трубы с колоннами». Так держать индустрия! Завтра мы станем еще умнее.
Французские сетевые источники сообщили:
«…Comme dans la version originale, au gré des combats, des tirs et des cascades, Conrad devra sauver le monde… et sa petite amie.
On nous promet que l'on retrouvera tout ce que nous avions tant aimé dans ce «classique qui a posé les bases du genre dans les années 90, mis au goût du jour grâce à la technologie du 21ème siècle…»
Уверен, что на Хабре найдутся толковые люди, которые смогут перевести нам французские пресс-релизы более точно, но мне кажется что здесь идет речь о том, что нам возвращают то, что считалось классикой в 90-ые в обрамлении современных технологий. Если классика в современном исполнении и современные технологии выглядит так как в ролике, то… я не монах, но уже настоятельница монастыря Современных Технологий.
Если старые игры выглядят так хорошо потому, что у разработчиков того времени не было современных технологий – то я счастлив, что жил в то время и помню его до сих пор. С точки зрения художественной составляющей те фоны и те герои были на порядок милее и человечнее чем эти болванки. Давайте не будет строить иллюзий на основе одного гейм-плейного видео (а на чем же тогда еще это можно делать?) и посмотрим на прогремевшие продолжения других именитых игр. Очень именитых. О-о-очень.
Пулемет Максим
Выволочем на сцену еще одного фигуранта дела, раз уж задели его выше. Здрас-с-сьте. Рады видеть, и кстати, Максимка – ты не прав. Хотя не прав не Макс, конечно же, а братья Хаузеры. Если с серией GTA и Red Dead Redemption у них все получилось отлично, то в случае с Max Payne 3 гнев фанатов понятен — не надо было превращать игру в сборник GTA кат-сцен (cut-scene) на движке. Иногда создается впечатление, что просто были взяты анимации из GTA а сверху на них одеты Максы и другие герои третьей части. Разницы то, в общем-то, никакой. San Andreas.
Практически каждая сцена, где происходит действие — имеет вставку-ролик, где нам что-то показывают и рассказывают. После этой сцены нас, как правило, либо запускают, либо швыряют в узкий и тесный аквариум микро-уровня, где мы выживаем на встречу новой кат-сцене. О свободе никто не говорит. О свободе передвижения – тоже. Вы наглухо заколочены в бобслей блокбастера, где через пробитые гвоздями губы может вырваться разве что стон, едва слышимый сквозь корпус несущегося вниз гроба с останками очень хорошей игры.
Можно упрекнуть меня в излишней эмоциональности и чрезмерных, сфабрикованных претензиях. Но даже как подносящий кофе помощнику младшего гейм-дизайнера — я ясно вижу, что был допущен ряд серьезных ошибок. Начиная от «не сбрасываемых роликов», и заканчивая точками входа в игровой уровень, где на высоком уровне сложности тебя убивают через несколько секунд после приземления. Нельзя зажимать игрока настолько, что ему дан только один путь и этот путь вперед без возможности движения назад или вбок, где за твоей спиной намертво закрываются двери. Это не современный экшен, это какой-то Call of Duty, в котором при попытке открытий дверей в начале игры нам хотя бы написали «не пытайтесь открывать двери, мы их не откроем, а все что надо откроется само». Это, хотя бы было честно. Странно, дико, но честно. Здесь же мы имели очередное «возрождение легенды» с хорошим сюжетом, героем и скверной реализацией. Добавим синдром тоннеля, отягченный консольными болячками и регулярные GTA-флешбеки и получим не крепко стоящего на ногах героя, а шарлатана созданного не понятно зачем. Ну… исключая заработок. Игра имеет нулевой потенциал для повторного прохождения, скриптов больше чем в обоих частях игры, скрипты не имеют обхода, и нет возможности не насладиться заставками в сотый раз (так было на момент релиза и в течении месяца спустя него, более я эту игры не запускал и за ней не следил).
Когда я увидел это видео, в конце 2011 года — я плакал. Давился от смеха точно также как когда в первый раз увидел ролики игры The Neverhood. Но в отличии от последней смех был и горьким тоже. Не смотря на утрированность — все это реалии сегодняшних игр. Они такие и есть. И каким образом можно рассуждать о ремейках и следующих частях игр „сохраняющих атмосферу“, где ты уже шага сделать не можешь без туториала, назойливой помощи и повсеместного ограничения свобод? Увидели ячеечный инвентарь в Deus Ex: Human Revolution — пошли напились в ближайший бар и долго плакали, обнимаясь и вспоминая игры минувших дней, благодарили за крохи того что нам вернула игровая индустрия? За что спасибо-то говорим? За то, что нас обобрали до нитки, а теперь вернули пуговицу чтобы штаны не падали?
И это не упрек, не поймите неверно. Ролик хорошо подал эмоции. Показал то, что накопилось. Давно. И то чему нет исхода. Чтобы давить свою линию, отстаивать заведомо обреченное дело и быть верным себе, играм и игрокам — нужно отдать много сил и нервов. Куда легче скатиться и начать делать то, что приносит деньги, но не приносит удовлетворения. Ведь кушать хочется всем, не так ли? Да и кто поддержит в правильном движении, даже если оно не правильно? На словах — каждый горазд. Но на деле, у всех свои дела, гораздо более важные чем игрушки.
Мне как игроку – очень жалко, что Remedy пришлось отдать Rockstar Макса Пейна. Но я очень рад что они живы, здравствуют, что у нас есть Алан, и что у нас будут другие игры от Remedy никак не связанные с творчеством братьев Хаузеров (Дэна и Сэма). Будучи возмущенным до глубины души я нарисовал этот маленький шарж. Сэм Лейк… никто и никогда не сыграет Макса лучше, чем ты. Возмущение было настолько сильным, что я даже сел делать мод для второй части игры, вместо того чтобы заниматься собственными проектами. Как бы могли сказать — торкнуло.
В качестве Макса Пейна (слева и справа) мне больше импонирует Сэм Лейк (справа). Его фотография была снята с его последнего интервью, которое он давал во время выхода игры Alan Wake.
Я считаю, что каждый должен заниматься тем, что у него лучше всего получается. И также считаю, что нельзя настолько бесцеремонно экспериментировать с классикой. Не потому, что нельзя, а потому что глупо. Если я возьму свою рожу и в фотошопе натяну поверх Мона Лизы я не стану гениальным художником, модернистом и бог знает кем еще. Нет… я буду обычным му… мучачо… эдаким чудаком, ничего кроме брани не вызывающим. И ладно если чудак просто потешает публику. Здесь же есть продукт, который продолжает легендарную серию. Знаковый проект. Знаковые люди. Знаковая компания. Они взялись вершить легенду. И да. Я считаю, что серия легендарна. По разным причинам. Но незачем кузнецу шить одежды. Нужно просто позвать портного. Есть студии которые хорошо делают определенные вещи, и в этом ничего плохого нет.
И если «новый взгляд» от RockStar на историю Макс Пейна, и новая часть легендарной игры — это беготня по кастрированным GTA-локациям ведомая сценарным гением Дэна Хаузера – то я… ну вы помните. Как сценарий игра совсем неплоха, надо признать. Вообще спивающийся герой, на болеутоляющих… это хороший ход. Трансформация в наркомана, человека зависимого от алкоголя и обезболивающих. Неплохой Хаус получается. По крайней мере — это интересный поворот. Но общая реализация при таком большом количестве ультра-контента, при хорошем бюджете — просто швах.
Это не Макс. Брюс Уилисс — может быть. Но не Макс. Это не та игра которую RockStar стоило бы делать. Вернее… если быть честным. Игра то та, и даже торт, но не с этим именем. Не надо делать то чего не умеешь. Хотя…
Хотя я бы с удовольствием посмотрел бы на авио-симулятор или квест за их авторством. Чего стесняться то? И какую-нибудь казуалочку. Найди на экране 20 трупов, отыщи 40 пакетиков с кокаином… популярная бы получилась вещица. А главное — мейнстрим.
Предыдущий пример игра-папа (Flashback) попал в книгу рекордов Гинесса, а предыдущий… папа-Макс — наша ПКшная матрица, фантастический экшен-проект по размаху, по количеству медленно летящих пуль, по виткам камеры вокруг героя, острым и емким текстам, по накалу страстей и эмоций. Какого черта, люди, это же наш Макс. Нахватавший всех наград какие было только можно и взявшим главный приз — нашу вечную любовь.
Ножки и ручки, современных 3D-Action игр выросли из папочек, а не наоборот. У папочек, кстати, были и дедушки, не менее крутые перцы, но не о них речь. Упомянул, чтобы никто не подумал, что я о них забыл.
Давайте выпорем еще кого-нибудь? Например Рендечку? Рэнди Пичфорда. Думаете не за что? А мы найдем. И без труда.
Что же делаешь Ренди?
Я могу быть краток. Не умею, но здесь у меня получиться. Вот увидите.
Все. Могу заканчивать этот раздел. Даже не стану задаваться вопросом в какую голову пришла идея спустить на несчастный GearBox доделку многострадального долгостроя, тем самым изгадив им репутацию. Даже не буду пытаться предположить, в какую именно издательскую голову пришла мысль о том, что нужно именно так перезапустить легендарный (о да, опять легендарный) бренд. И в какие головы пришли мысли о том, что GearBox теперь идеальный мусорщик, cleaner, который «уберет за вами вашу игру»? Желающие могут вспомнить шутер «Collonial Marines» если есть желание. У меня такого желания сегодня нет.
И, кстати, есть версия, что я генерирую теории заговора. Как параноик. Не хочу огорчать тех кто мне приписывает излишнюю мнительность, но в нашей индустрии действительно существуют „секс, ложь, и видео“. Другими словами ложь, подлог и махинации и много чего еще. Не нужно быть семи пядей во лбу чтобы это увидеть. Для тех кто слеп существуют доказательства, в том числе и видео. Я не имею в виду дешевые съемки кого-либо, где-либо, с кем-либо запихавшим в себя что-либо.
Почему я об этом вспомнил? Потому, что Рэнди Пичфорд оказался в центре двух таких скандалов. С двумя играми Collonial Marines и Duke Nukem Forever. А жаль. Человек во многом вызывающий симпатии. Да и контора его выпустила ряд очень хороших продуктов. Но людей-то обычно судят по пятнам на одежде. Увидел — и понес по миру вести.
Не то чтобы я его оправдывал, но думаю как в любой хорошей теории заговора есть люди и повыше Рэнди. Они принимают решения. Всегда есть деньги и власть. Везде. И везде эти двое действуют одинаково. Везде верхушка откуда тянутся нити не слишком заметна. И в силу неизменной человеческой природы вполне логично предполагать наиболее характерное для человека поведение.
Правильные продолжения
Я не сгущаю краски. Существует изрядное количество хороших продолжений и хороших реймейков. Но кто бы знал, что в юности Джон Коннор был жалким наркоманом и нытиком? Никто бы и не узнал, если бы не третья часть фильма. Одним достойным и светлым пятном в нем был дедушка Шварцкопфф. И то, ряд шикарных сцен с его участием (надо сказать весьма удачным) – были вырезаны. А ведь эта сцена, чуть ли не лучше всего фильма. Забавно, что одно время его героя из фильма Last Action Hero постоянно сравнивали с Конрадом из FlashBack. Виной тому похожая расцветка одежки.
Тем не менее, достойных продолжений хватает. Масла в огонь подливают те, кто решил отказаться от «помощи издателей» в деле разработки игр полагаясь лишь на наши силы и плечи. Ну да. На наши, а на чьи же еще? Буквально через несколько недель вы встретите нашу, народную игру Shadowrun Returns (а точнее она появится в Steam 25 июля и ее уже можно предзаказать).
И почему же даже один ролик с их альфа-версии трогает меня больше чем новый тизер Flashback? Наверное из-за богомерзкой изометрии к которой я имею крайнюю слабость? А может быть это мастерство художников, которые вместо 3D решили сделать как раньше – красиво и с душой? Нет… этого, решительно, не может быть. Зачем рисовать если есть некст-ген?
Те, кто остались за бортом, закусившие удила обиды тяжеловесы-издатели еще нанесут ответный удар. Выбросив на рынок «поддельные продолжения» вся продолжательность которых будет сведена к с детства знакомой нам обертке. И что характерно преуспеют в этом. В этом мире имеются такие мамонты как Ubisoft, EA, и ZeniMax. Было бы наивным предполагать что они чем-то обижены, и что они закусили удила, скорей всего они ощущают происходящее так же как человек ощущает укус комара. Но это не очень приятно. А еще комар жужжит. А еще городского комара сложнее прибить. Он не такой тупой как деревенская его разновидность, вечно пьяная от крови.
Но вот что действительно было бы наивно, так это полагать, что они смирятся с потерей части рынка, отобранной (или отбираемой в данный момент) наглыми повстанцами. К чему бороться с сопротивлением, если можно одеть его личину и жать деньги в два фронта? А в последствии снова вытеснить? Ведь если дать игрокам то „старое“ что они хотят, а потом нарастить объемы производства и качество отдельных компонент, то можно оттеснить коварных инди назад, потому как ролики, озвучка и технологии – дорогое удовольствие. И… никто не проиграет, что характерно. Все повториться вновь, хотя наверное не очень скоро.
И толстые и тощие будут регулярно обогащать нас разного рода продуктами. Дав нам то чего нам не хватало. Разнообразие.
Резюме
Но если вернуться к толстячкам и их резонам? Есть ли там трепетное отношение к истокам? Желание вернуть в мир классику игровой индустрии, или просто жажда наживы? Вы знаете ответ. Не хуже чем я. Ваше сердце не позволит вам обмануться. Ваше сердце не позволит найти разуму доводы в поддержку этих «удачно возрожденных» брендов. Потому, что большая часть из вас, по крайней мере, знакома с Дюком и Максом. Вы еще помните, какими они были. И это… не делает вас стариками. Это хорошее было совсем недавно. Что, за компанию, не позволяет списать в утиль и меня.
Так что же мы имеем? Спекуляцию на наших чувствах или нечто другое? Разве не подсказывает вам опыт человечества и рыночных отношений, что нам просто пытаются впарить нечто, а не продать качественный продукт? Разве мы настолько опустились как игроки, что будем радоваться каждой возможности услышать старое имя и страстно ностальгировать о нем в ближайшем кабаке?
А что ждет нас дальше? Может быть смутные времена? Сейчас двигаясь в унисон с Кистартер-вечеринками уже вовсю работают эксгумационные бригады от мира большой индустрии. Крупные издатели почуяли запах мертвой плоти, которая снова в цене. Речь не о зомби-проектах, которые снова обрели популярность, но о волне «возрождений» и ремейков которые заполнят рынок, смешиваясь с возрождениями действительными. Это уже происходит, разве вы не замечаете? Только ленивый не говорит о том, что теперь он будет делать как встарь, что сейчас он работает над новой адаптацией старой игры, что сейчас он переосмысливает некие старые концепции.
В дне сегодняшнем нас каждый месяц будут испытывать на верность традициям и спекулировать на нашей любви. Такова тенденция. Можно спорить сколько угодно, но дня не обходится без фразы о „на Кикстартер вышла N, духовная наследница Y“. Эта фраза из новостей уже превратилась в штамповку. И не известно сколько под этими N скрывается самозванок. И здесь — ничего сделать нельзя. Можно либо доверять какому-то разработчику — либо нет. В случае Кикстартера и инди проектов. А в случае EA, Zenimax и Ubisoft надеяться что следующие 10 лет они не будут отуплять нас еще более. Надежда умирает последней, на бога надейся да сам не плошай, бла-бла-бла…
Слышите шипение? Разбрызгивая раскаленный метал, шипит и вариться в котлах новость о новом пришествии. Грядет возрождение «Chaos Engine», разработанной в свое время известной компанией Bitmap Brothers, к слову сказать, имевший свой особенный, узнаваемый графический стиль и шарм присущий играм старым, где пиксель-арт был особой формой искусства. Сохранят нам его? Узнаем. Это, кстати те самые „битмапы“ которые подарили миру такие игры как — Xenon II: Megablast, Cadaver, Gods, Сhaos Engine, Z. Когда задумываешься о таких гигантах сразу вспоминаешь индейцев майя. Были и практически исчезли — факт. Но их творчество и архитектура — до сих пор стоят. До сих пор поражают размахом.
Знаковая команда, знаковые проекты. Не чета конечно, тем что идут ниже, но… по правде говоря, откуда сейчас разработчику взять вменяемый проект в портфолио? Чем хвастаться? Десятком казуалок? Социалок? Игры уже давно не делают, а если и делают то только полные психи, либо богатые люди. Остальным приходится выживать. Тут хотя бы выживали по делу.
Трейлер – не трейлер. Там нет ничего. Есть только цепкие пальцы невидимых кукловодов, которые уже играют на струнах ваших душ. Большинство из нас, игроков, отдаст последние гроши за новый Deus Ex, Commandos, Jagged Alliance и Fallout. Многие готовы отдать игровому дьяволу свои бессмертные игровые души, черкнув свой никнейм на адском договоре, в том случае если он вернет нам того самого Вора, или тот самый Фол.
Что принесет этот проект? Devolver Digital разработчики нового Chaos Engine имеют за своей спиной достаточно громкие имена по сегодняшним меркам. Serious Sam 3: BFE, Hotline Miami, Duke Nukem 3D: Megaton Edition и Shadow Warrior. Погодите радоваться. Это не тот Shadow Warrior, а еще один ремейк. Да… ремейк того самого. И тоже они.
Официальный „патрон“ стоящий за спиной студии — не известен, откровенно толстых на горизонте пока нет… Чем черт не шутит? Вдруг повезет? Вдруг прорвемся? Да регулярно получается беда бедой, но ведь есть и хорошие продолжения, разве нет? Да кто-то делает исключительно ради денег, кто-то спекулянт, а кто-то радеет за игры.
Или… мне все это привиделось? Опять теория заговора?
Заметки задним числом
Первая — вопрошающая. Интервью с разработчиком Flashback Paul Cuisset (французская версия). Если вдруг имеются титры, или есть „мастера художественного слова“ — с радостью включу эту информацию в публикацию. Так как очень хочется знать о чем он конкретно говорит.
Вторая — на правах индульгенции выданной себе самому
Индульгенция
Положение о спекуляции на эмоциях и ностальгии игровка — не стоит растягивать на все «возрождения». Положение не стоит применять ко всем продолжениям игр и всем ремейкам. Не все продолжения плохие, бывает также, что дети становятся лучше своих отцов. Все издатели разные. И это – моя индульгенция на тот случай если комментарии посетит Инквизиция. Она всегда есть, ей всегда нужно жечь еретиков и топить ведьм. Но с ней всегда можно пообщаться. Например когда она зачитывает приговор. Можно даже успеть что-то брякнуть в свое оправдание до сожжения. Я брякну — не сумневайтесь. К сожалению, текущий тип Индульгенции не предусматривает спасения от адептов Общества Анонимных Минусоголиков. Telle est la vie.
Третья — философская — в одном из комментариев к предыдущим статьям была озвучена просьба не только констатировать факт, описывать ситуацию, но и предлагать какое-то решение. В случае такой непростой индустрии, или индустрии которую кто-либо не может принять такой какая она есть — выход только один. Процитирую Томаса Цвияновича (Thomas C. Cvijanoviс) из свежего интервью которое взял у него GreyCat.
… идите за своей мечтой, концентрируйтесь на главном...
И это единственное что может помочь. Дать силы там где их уже нет. Вера в свою мечту. И движение к ней. Все прочее — дополнительная стимуляция. Но верующий человек идет и проходит там где выхода нет. Или погибает. Но с верой же. В светлое будущее. В лучшую долю. В то, что все это было не напрасно.
Я уже три года копошусь самостоятельно. Пытаюсь делать так чтобы мне было не стыдно в зеркало смотреть. Прикрыл все свои проекты и оставил один. Он абсолютно не приносит денег. Это стопроцентный убыток на данном этапе. Тонны времени. Нервы. Силы. Ситуации где приходится мучительно выбирать между семьей и работой, но… это тот самый путь к мечте. Я не лукавлю с собой. И я знаю, что делаю для геймеров то чему был бы рад сам.
И нет, и не будет других путей. Как с воспитанием детей — только своим, черт возьми, примером. Бессмысленно говорить о вреде курения с трубкой в зубах. Точно также и в индустрии — говорить смысла нет. Эта публикация не несет в себе решений и ответов. Это мысли, констатации, какой-то анализ, но не решение проблемы. Оно могло бы быть если бы я имел бы вес в нашем братстве. Имел бы проекты которыми можно было бы гордиться. Их у меня нет. Только набор знаний, навыки, что-то свое.
Правда публикация может преследовать и другие цели. В этом бушующем море, на других судах, точно также как и на моем корабле, горят огни, и я вижу их когда волна поднимает меня достаточно высоко. Им будет легче когда они будут знать, что не одиноки, что кто-то тоже упрямо плывет вперед. А мне… мне тоже будет легче. Потому, что я буду знать тоже.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Поводом, для написания данного поста, послужил выход новой версии UI фреймворка Feathers.
Являясь AS3 разработчиком, я слежу за развитием данного продукта начиная с ранних бета версий. На данном этапе развития этого продукта, можно с увереностью утверждать, что он готов к массовому использованию. А не только в кругу комьюнити и Flash энтузиастов.
Feathers это библиотека компонентов пользовательского интерфейса использующая все возможности GPU ускорения через Starling фреймворк. Библиотека содержащая в себе быстрые, легковесные и легко расширяемые UI контроллы для мобильных и десктопных приложений.
Feathers имеет открытый код и поддерживается комьюнити разработчиков с одной стороны и Adobe с другой. Такой симбиоз обеспечивает идеальные условия для развития продукта, «когда верхи могут а низы хотят». Технически данный фреймворк опирается на прочный и зарекомендовавший себя фундамент Starling. Про который обязательно стоит сказать несколько слов, для понимания общей картины и силы данного фреймворка.
Что такое Starling?
Starling это AS3 фреймворк разработанный на основе Stage3D, для 2D приложений. Изначально Starling позиционировался как средство для разработки игр, но оказалось, что его можно использовать для решения многих других задач. Особенно, задач в которых важна скорость приложения, ведь Starling позволяет быстро создавать аппаратно ускоренные приложения. Фактически Starling позволяет использовать GPU ускорение без необходимости писать высокоуровневые библиотеки и разбираться в низкоуровневом API Stage3D.
Фреймворк Starling разработан с оглядкой на API Flash Player, он обеспечивает отличный уровень абстракции от API Stage3D, и в то же время использует структуры знакомые AS3 разработчику. Время вхождения, даже для начинающего AS3 разработчика, минимально.
Обобщая сказанное получаем отличное, продуманное средство для написания игр, в минимальные сроки, на разные платформы и чтоб не тормозило. Игры на Starling получаются просто отличные, думаю, в птичек от Rovio играл каждый.
А только ли игры? Ну можно и не игры, но тогда UI более консервативно рисовать нужно, кнопочки, списки, слайдеры, чекбоксы, галереи. Как то это всё скиновать под устройства. Что тут сказать, человек по природе своей очень ленив и, было бы странно, не получить на основе Starling решение для быстрого построения UI приложений.
Stage3D UI от Feathers
Начиная с ранних бета версий фреймворка, я пробовал его использовать в своих приложениях, например, в игре Чудесные Наклейки кнопочки и список айтемов наклеек сделан с использованием Feathers. Не менее увлекательные примеры можно найти на сайте фреймворка.
Для AS3 разработчика старт использования фреймворка быстрый и безболезненный. Добавляем библиотеки в проект и переходим к коду.
Результатом хочется получить некоторого вида Hello World:
Предположим, что вы уже знаете как использовать и инициализировать Starling, и сразу перейдём к Feathers. Ниже приведён пример класса Main, который мы будем использовать как корневой дисплей листа Starling.
public class Main extends Sprite { public function Main() { this.addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler ); }
protected var button:Button;
protected function addedToStageHandler( event:Event ):void { } } }
Далее большая часть кода будет в обработчике addedToStageHandler().
Первым делом отпишемся от события ADDED_TO_STAGE и добавим инициализацию темы:
protected function addedToStageHandler(event:Event):void { this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); new MetalWorksMobileTheme(); }
Слушатель темы мониторит момент добавления компонентов в дисплей лист, и каждый раз при добавление UI объекта применяет соответствующий скин. Примеры построения уникальных тем можно найти в документации к фреймворку. На их основе можно быстро создать свою тему.
В обработчике события клика добавим появление вплывающего компонента Callout:
protected function button_triggeredHandler( event:Event ):void { const label:Label = new Label(); label.text = "Hi, I'm Feathers!\nHave a nice day."; Callout.show( label, this.button ); }
Следует заметить что Feathers имеет систему валидации перерисовки, это позволяет перерисовывать объекты только тогда, когда это необходимо. В случае, если мы применяем несколько свойств к объекту то можем значительно сэкономить перерисовав объект только один раз.
В данном случае ни одно свойство не было применено к нашей кнопке, вызовем валидацию принудительно:
В итоге, мы имеем инструмент разработки, по скорости сравнимый с нативными решениями. Имеющий покрытие платформ, не меньше, чем у фреймворков для гибридных HTML5 JS приложений. (Особенно, учитывая факт того, что Starling имеет планы по покрытию JS направления.) И явно заслуживающий стратегического внимания разработчиков кроссплатформенных мобильных приложений.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Это второе интервью из нашей серии интервью с руководителями проектов OpenStack в блоге Mirantis. Наша цель — обучить более широкое сообщество технических специалистов и помочь людям понять, как они могут внести вклад в проект OpenStack и извлечь из него выгоду. Естественно, ниже изложена точка зрения интервьюируемого, а не компании Mirantis. Интервью публикуется с купюрами в связи с ограничением длины статьи.
Монти Тейлор: Я работаю в компании Hewlett Packard над проектом OpenStack, участвую в комиссии OpenStack Foundation Board и в комитете OpenStack Technical Committee и веду проект непрерывной интеграции и инфраструктуры OpenStack CI and Infrastructure Project.
Вопрос: Как вы начали работать с проектом OpenStack?
Ответ: Я работал в Rackspace, в команде, которая изначально подняла проект OpenStack. Я тут с самого начала. Вы до сих пор можете увидеть мое имя под некоторыми проектами в Launchpad, так как я помогал их создавать, а внести изменения в Launchpad нельзя.
Вопрос: Почему вы работаете с OpenStack?
Ответ: Я твердо верю в важность открытого облака и в то, что все будут постепенно двигаться к управляемым сервисам и облачным приложениям.
Вопрос: Какова ваша ответственность в роли руководителя проекта?
Ответ: Наша команда славна самомотивацией, это команда независимо мыслящих профессионалов. Вместо того, чтобы указывать кому-либо из команды, что и как делать, мы работаем совместно. В плане руководства я, скорее, посол, внешний интерфейс по общению с людьми. Я работаю с компаниями, которые предоставляют нам ресурсы, и я прилагаю все возможные усилия к этому.
Вопрос: Можете ли вы объяснить, что такое непрерывная интеграция -Continuous Integration (CI)? Почему она так важна для OpenStack?
Ответ: Мы начали проект с идеи автоматического контроля за состоянием кода. Вместо того, чтобы назначать специального человека, ответственного за вливание нового кода в мастер-ветку, что является очень скучной задачей, мы реализовали это автоматически.
Один из аспектов нашей системы — запуск тестов на каждом загруженном изменении кода. После проверки и утверждения кода тесты проводятся снова, так как скорость разработки OpenStack настолько велика, что вы можете быть практически уверены, что проект, в котором вы планируете изменения, уже продвинулся с того времени как вы написали код. Таким образом, мы хотим убедиться, что ничего из того, что добавляется в код, не нарушит его актуальное состояние.
Сейчас у нас 800 разработчиков активно трудятся над проектом OpenStack. Если мы позволим кому-либо из них что-либо нарушить, этот один повлияет на остальные 799, что приведет к эффекту водопада. Все расстроятся, и никто не сможет действовать дальше, так как будут подчищать за остальными.
Поэтому наша работа важна для проекта OpenStack из соображений качества и скорости разработки.
Вопрос: Что по-настоящему уникально в проекте OpenStack CI по сравнению с другими системами непрерывной интеграции, как, например, Jenkins или Buildbot?
Ответ: Мы забираем у всех право на правку кода, никто не может вносить изменения напрямую. Это достаточно жесткая позиция. Мы обозначили её, что на мой взгляд уникально для таких проектов.
Jenkins – это один из элементов системы, который мы используем, но он не встраивается в полной мере в то, что мы пытаемся сделать здесь. Поэтому мы добавили некоторые инструменты, чтобы построить нашу систему непрерывной интеграции.
Джим Блэр, один из ключевых участников команды инфраструктуры, написал инструмент под названием Zuul, который, можно сказать, управляет встраиванием кода всего проекта. Также, он обеспечивает выполнение наших строгих требований к работоспособности. Он периодически отслеживает изменения в OpenStack, что удобнее всего. Предположим, вы хотите запустить 150 исправлений, и проверка каждого исправления занимает час, но у вас нет 150 часов в сутках. Zuul может корректным образом тестировать эти исправления параллельно.
С инструментом Zuul мы раздвигаем границы в плане добавления кода в проект. HP теперь использует Zuul для внутренних процессов, Wikipedia начала его использование, и мы видим, что все больше людей подхватывают этот инструмент. Мы даем ориентиры в области не только в плане разработки облачного программного обеспечения.
Вопрос: Чего на данный момент достигло сообщество непрерывной интеграции (CI)?
Ответ: Всего четыре участника команды держат проект на своих плечах, и мы продолжаем выпускать релизы. Это великолепно.
Вся инфраструктура, которая запущена для проекта OpenStack, самоуправляется в публичных репозиториях. Поэтому любой человек, желающий внести вклад, может это сделать. Я думаю, это значительное достижение, и очень хорошо, что мы смогли привлечь значительное участие сообщества.
Вопрос: Какие возможности предоставляет непрерывная интеграция в выпуске Havana?
Ответ: Сейчас мы работаем над выпуском исправлений в Jenkins и Zuul для большей масштабируемости. Мы встраиваем технологию под названием Gearman в эту смесь, что позволит нам иметь несколько мастер-веток в Jenkins – это то, чего нет ни у кого другого. Таким образом, у нас нет узкого места в плане масштабируемости единого мастера Jenkins.
Мы также начали поднимать Logstash, центральный агрегатор логов. Обычно получение данных для отладки теста после сбоя было проблемой.
Кроме того, мы ведем работу по сбору результатов теста на выходе в режиме потока, таким образом, мы сможем быстрее давать обратную связь разработчикам. Как только мы узнаем о том, что один из тестов по какой-либо причине привел к ошибке, мы можем сообщить разработчикам, что весь ряд тестов приведет к ошибке. Таким образом, они не должны ждать окончания часового теста для получения отладочной информации.
Суть нашей работы составляет предоставление обратной связи разработчикам для продолжения гибкой работы без снижения требований к тому, что означает выпуск обновлений в OpenStack.
Вопрос: Вы говорили о максимальной демократизации инструментов OpenStack. Что это означает для вас?
Ответ: Мы должны максимально отойти от ситуации, когда один человек имеет слишком много власти или ответственности, и это важно не только для инструментов, но и для всего проекта OpenStack. Это не только из опасений получения слишком большого влияния. Хотя любой может прийти и исправить проблему, в основном проект ведут те же четыре человека. Это означает, что в проекте есть подстраховка.
Также это означает, что вам не нужно убеждать кого-то в приоритетности своей проблемы над остальными, что приводит к политическим играм. У вас пять человек, которым что-то надо, и у одного из них много друзей, поэтому все работают над проблемой этого человека. Если у всех равный доступ, этот человек может просто выполнить работу – без необходимости убеждать кого-либо другого, что работа стоит усилий.
В проекте OpenStack участвуют более 200 компаний. Если кто-то из них хочет делать больше тестов, например, на Solaris, я должен обеспечить им эту возможность, а не заставлять их убеждать меня, что это важно, и затем обучать меня. Это несправедливо как для меня, так и для них.
Вопрос: Кажется, что вам удалось достичь баланса между оптимизмом и реализмом в отношении людей.
Ответ: Да. Если бы не оптимизм, я бы не занимался совместной разработкой с другими людьми, потому что не был бы уверен, что у кого-либо есть дельные идеи. Одновременно вам нужно признать, что люди могут ошибаться. Я знаю, что постоянно ошибаюсь и хочу сделать какой-то инструмент, который отслеживал бы мои ошибки, чтобы я мог концентрироваться на своей задаче, а не на ошибках синтаксиса. Компьютеры могут поработать за меня.
Вопрос: Говоря с философской точки зрения, каково ваше видение проекта OpenStack?
Ответ: Интернет сам по себе выполняет отличную работу по распространению приложений со стандартным интерфейсом. Существует много веб-серверов, но с точки зрения потребителя они все работают одинаково. В плане облачных вычислений ситуация другая. Amazon, GoGrid, Rackspace, Cloud.com, возникают все эти различные облака, и все они хотят заниматься инновациями, что очень хорошо.
Есть положительная и отрицательная стороны этого. Положительная сторона – все они просто решают проблему, которую никто раньше не решал. Отрицательная – каждая из этих компаний хочет удержать клиента, по аналогии с Prodigy и CompuServe перед стандартизацией глобальной сети.
Я бы очень хотел, чтобы открытое облако было основано на OpenStack и даже более того, как недавно выразился один мой друг на Facebook: “Все, кто используют слово “облако” для описания распределенного приложения только в собственном ЦОД, неправильно понимают это слово. Они фактически говорят о кластере”. И я согласен с этим. Облако – это 50, 100, 1000 компаний, все работающие на OpenStack. Как потребитель я хочу просто пользоваться этим агрегированным облаком без необходимости переписывать свое приложение или даже без того, чтобы знать, что мое приложение запущено на пяти сетях различных провайдеров.
Вопрос: Что бы вы хотели, чтобы люди знали о постоянной интеграции (CI)?
Ответ: Я не уверен, что все знают, что это открытая система, в которую может влиться любой, и что мы с радостью примем любого и ждем всех.
Вопрос: как можно начать работу над проектом?
Ответ: Для начала у нас есть IRC-канал #OpenStack-Intra и мы ведем баг-трек на Launchpad. Лучше всего чуть пообщаться там и отслеживать ревизии кода, добавляя комментарии или обратную связь, таким образом понимая актуальные на данный момент вопросы.
Вопрос: Как вы думаете, изменил ли проект OpenStack проекты с открытым кодом вообще? И, если да, то как?
Ответ: Над проектом OpenStack работают одновременно много компаний и нам удалось при таких исходных условиях, когда участвуют несколько корпораций, добиться многого. Кажется, что это первый такой проект. Linux вовлек много корпораций, но это заняло у них много времени… IBM и все эти корпоративные участники не сразу включились. Это был долгий путь по привлечению людей в их свободное от работы время.
Никто не работает над OpenStack в свободное от работы время. Это коммерческий проект, требования к которому определяются требованиями бизнеса. В то же время все эти компании объединились без явного лидера. Как руководитель проекта CI я думаю, что мы помогаем менять видение людей в отношении использования открытого кода в тестовой среде с жесткой инфраструктурой, с управляемым состоянием кода и всеми остальными возможностями. Поэтому, я думаю, мы исследуем новые земли как технологически, так организационно.
Вопрос: Большое спасибо, Монти!
Ответ: Не за что.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html
Доброго времени суток, Хабрахабр. Сегодня на крыле принес еще один перевод я (pdf-ки гугловского стайл гайда выложены). Хотя, кто знает, если кто-то оценит сию работу — быть может появится и продолжение. Как-то днём одним, предложил мне мой широко известный в узких кругах коллега scraplesh почитать ресурс — The Hitchhiker’s Guide to Python! называемый. Ресурс этот понравился мне. Понравились советы выдаваемые там. Понравилась канва повествования и вообще понравилось направление мысли автора. А если что-то хорошо на Ваш вкус, то нужно передавать это из уст в уста:) Итак, решил я сделать перевод данного ресурса. Но не всё так сразу — сначала будет пробная статья «на отклик» хабрасообщества. Если уважаемым гикам понравится сия тематика и изложение — будем стараться выпускать новые части. На первый «отклик» я выбрал раздел — "Writing Great Code" и в нем два подпункта «Structure is Key» и «Modules». Откликнемся под катом.
Но перед тем, как окунуться с головой в чужие мысли относительно любимого Python, нужно представить собственно автора ресурса. Зовут его Kenneth Reitz. Как я понял по собранной информации — он профессиональный фотограф (об этом мы можем узнать на его личном сайте), евангелист языка Python и просто гуру разного рода разработки. Работает он на данный момент (по неподтвержденным данным) в Heroku. Так же перепризываю всех форкать его проект на гитхаб.
Фотография Кеннета
Kenneth Reitz на PyCon в Австралии (2012)
Далее — собственно сама статья. (При обнаружении ошибок, как водится — сразу кричите о них! Ошибки требуют исправления.)
Структурируйте свой проект
Под структурой мы подразумеваем решения, которые Вы приняли в отношении того, как Ваш проект сможет достичь поставленных целей. Мы должны рассмотреть как лучше использовать функциональные особенности языка Python, чтобы писать чистый и эффективный код. С практической точки зрения, понятие «структура» означает создание (написание) чистого когда в котором, логика и зависимости так же ясны как организация файлов и папок в файловой системе.
Какие функции должны быть перемещены в какие модули? Как пойдет поток данных через проект? Какие особенности и функции могут быть сгруппированы вместе и изолированы? Отвечая на подобные вопросы, Вы можете начать планировать как будет выглядеть готовый продукт.
В данном разделе мы внимательнее на систему модулей и импортов в Python, т.к. они являются центральным элементом в обеспечении структурирования Вашего проекта. Затем, мы обсудим различные точки зрения о том, как построить код, который может быть расширен и надежно протестирован.
Структура решает
Благодаря тому, что импорты и модули обрабатываются в Python, сравнительно просто структурировать проект написанный на этом языке. Слово «просто», в данном контексте означает, что Вы не будете создавать лишних ограничений, и то, что модель импортируемого модуля легко понять. Таким образом, Вам остается сконцентрироваться на чисто архитектурной задаче, а именно трудиться над созданием различных частей Вашего проекта и их взаимодействии.
Просто структурированный проект — означает, что также просто можно создать и плохо структурированный проект. Некоторые признаки плохо структурированного проекта:
Множественные и грязные циклические зависимости. Если Ваши классы Table и Chair нуждаются в импорте класса Carpenter из модуля workers.py, для того, чтобы ответить на вопрос table.isdoneby(), и наоборот, если класс Carpenter нуждается в импорте класса Table и класса Chair, чтобы ответить на вопрос carpenter.whatdo() — Вы получаете циклическую зависимость. В этом случае Вам придется прибегнуть к хитрым уловкам, таким как использование оператора импорта внутри методов или функций.
Скрытые связи. Все и каждое изменение в классе Table проваливает 20 тестов в несвязанных тестах, т.к. оно извращает выполнение кода класса Carpenter, который требует хирургически тонкого адаптивного изменения кода. Это означает, что у Вас слишком много «договоренностей» относительно класса Table в коде класса Carpenter или наоборот.
Интенсивное использование глобального пространства имен или контекста. Вместо явной передачи (высота, ширина, тип, дерево) друг другу переменных классами Table и Carpenter, Вы полагаетесь на глобальные переменные, которые могут быть изменены и модифицированы на лету разными «товарищами». Вы должны внимательно изучить все места, откуда можно получить доступ к этим глобальным переменным, чтобы понять, почему прямоугольный стол стал квадратным и обнаружить, что удаленный код так же подвергся изменению в данном контексте, подменив размеры стола.
Спагетти-код. Несколько страниц вложенных друг в друга конструкций if и циклов for с большим количеством повторяющегося кода и вообще не сегментированного, известного как спагетти, кода. Благодаря значащим отступам в Python (одной из самых обсуждаемых особенностей), очень сложно писать такой код на данном языке. Так что есть хорошие новости — Вы не будете наблюдать такой код часто.
Равиоли-код. Такой код более типичен для Python. Он состоит из сотен одинаковых (или подобных друг другу) кусочков логики, классов или объектов без надлежащей структуризации. Если Вы никак не можете запомнить не использовать FurnitureTable, AssetTable или Table, или даже TableNew для решения Вашей задачи — Вы будете купаться в равиоли-коде.
Модули
Модули в Python являются одним из основных слоев абстракции которые доступны, и, вероятно, являются наиболее нативными для языка. Уровни абстракции позволяют разделить код на части обрабатывающие соответствующие данные и содержащие какой-либо функционал.
Например, один слой проекта может обрабатывать взаимодействие с пользователем, в то время как другой будет обрабатывать манипулирование данными на низком уровне. Наиболее естественный способ разделить эти два уровня — это поместить
всю функциональность в один файл, а все низкоуровневые операции в другой. В таком случае интерфейсный файл будет нуждаться в импорте файла с низкоуровневым функционалом. Это делается с помощью выражений import и from… import.
Как только Вы начинаете использовать выражение import — Вы начинаете использовать модули. Это могут быть встроенные модули, такие как os и sys, сторонние модули, которые Вы установили в свою среду, или внутренние модули Вашего проекта.
Чтобы придерживаться стиля руководства, старайтесь давать модулям короткие имена, содержащие только буквы нижнего регистра и уверяться, что Вы не используете специальные символы, такие как точка(.) или знак вопроса (?). Так как имя файла подобное my.spam.py, Вы должны избегать. Именование таким образом будет мешать Python искать модули.
В данном примере Python ожидает найти «spam.py» в папке по имени «my», которой не существует. Существует пример того, как точечная нотация должна быть использована в документах Python.
Если Вы хотите, Вы можете назвать файл my_spam.py, но даже нашего друга — Подчеркивание — не стоит часто использовать в именах модулей.
Помимо некоторых ограничений именования, ничего больше не требуется файлу чтобы стать Python-модулем, но механизм импорта необходимо понимать для того, чтобы использовать эту концепцию должным образом и избежать некоторых проблем.
Откровенно говоря, оператор импорта будет искать соответствующий файл module.py в той же директории, где находится импортирующий файл. Если он не будет найден, интерпретатор Python будет искать module.py в переменной «path» рекурсивно и возбудит исключение ImportError, если последний не будет найден.
После того, как module.py будет найден, интерпретатор Python выполнит модуль в изолированной области видимости. Любое объявление верхнего уровня в файле module.py будет выполнено, включая вложенные импорты, если таковые имеются. Объявления функций и классов сохранятся в словарь модуля.
Затем переменные модуля, функции и классы будут доступны для вызова через пространство имен модуля — центральное понятие в программировании, которое особенно мощно и полезно в языке Python.
Во многих языках, файл включается напрямую используя препроцессор чтобы найти весь код в файле и «скопировать» его в код вызывающего модуля. Это отличается от поведения языка Python, в котором подключаемый код изолирован в области видимости своего модуля, что означает, что Вы можете не беспокоиться о том, что включение кода может иметь нежелательные последствия, например, переопределение существующих функций с тем же именем.
Это позволяет моделировать более стандартное поведение с помощью специального синтаксиса выражения import: from module import *. Обычно это считается плохой практикой. Использование «import *» делает код трудным для чтения и делает зависимости менее разобщенными.
Использование from module import func это способ точно указать функцию, которую вы ходите импортировать и поместить в глобальную область видимости. А так же это намного менее вредно, чем «import *» т.к. тут ясно видно что импортируется в глобальную область видимости, преимущество более простой записи import module заключается в экономии нажатий клавиш.
# Very bad
[...] from modu import * [...] x = sqrt(4) # Is sqrt part of modu? A builtin? Defined above? # Better
from modu import sqrt [...] x = sqrt(4) # sqrt may be part of modu, if not redefined in between # Best
import modu [...] x = modu.sqrt(4) # sqrt is visibly part of modu's namespace
Как указано в разделе о стиле, читаемость является одной из главных особенностей Python. Читаемость означает уход от использования бесполезного текстового наполнения и беспорядка в коде, поэтому обычно некоторые усилия тратятся на попытки
достичь определенного уровня краткости кода. Но лаконичности и простота имеют определенные пределы, где сокращение кода должно прекратиться. Будучи в состоянии сразу сказать где начинается тот или иной класс или функция, как и идеология module.func, которая значительно улучшает читаемость кода и его прозрачность во всех, кроме самых простых, отдельных стоящий проектов «в одном файле».
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html