веб программист
Работа мечты или небольшая история мобильной разработки
Глава 1. В поисках сокровищ
Иногда процесс разработки мобильной игры, можно сравнить с поиском сокровищ. Вы тяжело трудитесь, день за днем, месяц за месяцем, строите планы и на них базируются ваши ожидания. Мечтаете. Конечно. Вы много мечтаете, что однажды наступит тот самый день, когда ваши поиски закончатся и все ваши мечты сбудутся. Это могут быть деньги, слава или уважение от миллионов. Но мечты для романтиков, а в реальной жизни все продолжается. Поиски. Разработка.
Но, что будет, если вы делаете игру о поиске тех самых сокровищ? На это у нас пока еще нет ответа, но мы, хотябы попытались. Мы кое-что нашли. А сокровище это или нет, вопрос к тебе, дорогой читатель.
Если вы читаете эту статью, значит мы выжили после разработки третьей по счету мобильной игры и выпустили её в свет. За время разработки, я много раз открывал заветную иконку хабры, дабы увидеть очередной рассказ от разработчиков, которые делятся своим опытом и впечатлениями. К сожалению, многие разработчики упускают много тонкостей и нюансов, особенно, если это касается бюджета и продвижения их игры, а зря.
Теория и практика парсинга исходников с помощью ANTLR и Roslyn
В нашем проекте PT Application Inspector реализовано несколько подходов к анализу исходного кода на различных языках программирования:
- поиск по сигнатурам;
- исследование свойств математических моделей, полученных в результате статической абстрактной интерпретации кода;
- динамический анализ развернутого приложения и верификация на нем результатов статического анализа.
Наш цикл статей посвящен структуре и принципам работы модуля сигнатурного поиска (PM, pattern matching). Преимущества такого анализатора — скорость работы, простота описания шаблонов и масштабируемость на другие языки. Среди недостатков можно выделить то, что модуль не в состоянии анализировать сложные уязвимости, требующие построения высокоуровневых моделей выполнения кода.
К разрабатываемому модулю были, в числе прочих, сформулированы следующие требования:
- поддержка нескольких языков программирования и простое добавление новых;
- поддержка анализа кода, содержащего синтаксические и семантические ошибки;
- возможность описания шаблонов на универсальном языке (DSL, domain specific language).
В нашем случае все шаблоны описывают какие-либо уязвимости или недостатки в исходном коде.
Весь процесс анализа кода может быть разбит на следующие этапы:
- парсинг в зависимое от языка представление (abstract syntax tree, AST);
- преобразование AST в независимый от языка унифицированный формат;
- непосредственное сопоставление с шаблонами, описанными на DSL.
Данная статья посвящена первому этапу, а именно: парсингу, сравнению функциональных возможностей и особенностей различных парсеров, применению теории на практике на примере грамматик Java, PHP, PLSQL, TSQL и даже C#. Остальные этапы будут рассмотрены в следующих публикациях.
Архитектура Stack Overflow
Чтобы понять, как все это работает, давайте начнем с показателей Stack Overflow. Итак, ниже приводится статистика за 12 ноября 2013 и 9 февраля 2016 года:
- 209,420,973 (+61,336,090) HTTP-запросов к нашему балансировщику нагрузки;
- 66,294,789 (+30,199,477) страниц было загружено;
- 1,240,266,346,053 (+406,273,363,426) битов (1.24 TБ) отосланного HTTP-трафика;
- 569,449,470,023 (+282,874,825,991) битов (569 ГБ) всего получено;
- 3,084,303,599,266 (+1,958,311,041,954) битов (3.08 ТБ) всего отослано;
- 504,816,843 (+170,244,740) SQL-запросов (только из HTTP-запросов);
- 5,831,683,114 (+5,418,818,063) обращений к Redis;
- 17,158,874 (not tracked in 2013) поисков в Elastic;
- 3,661,134 (+57,716) запросов Tag Engine;
- 607,073,066 (+48,848,481) мс (168 часов) выполнения SQL-запросов;
- 10,396,073 (-88,950,843) мс (2.8 часов) затрачено на обращение к Redis;
- 147,018,571 (+14,634,512) мс (40.8 часов) затрачено на запросы к Tag Engine;
- 1,609,944,301 (-1,118,232,744) мс (447 часов) затрачено на обработку в ASP.Net;
- 22.71 (-5.29) мс в среднем (19.12 мс в ASP.Net) на формирование каждой из 49,180,275 запрошенных страниц;
- 11.80 (-53.2) мс в среднем (8.81 мс в ASP.Net) на формирование каждой из 6,370,076 домашних страниц.
Вы можете спросить, почему существенно сократилась продолжительность обработки в ASP.Net по сравнению с 2013 годом (когда было 757 часов) несмотря на прибавление 61 миллиона запросов в день. Это произошло как и из-за модернизации оборудования в начале 2015 года, так и из-за некоторого изменения параметров в самих приложениях. Пожалуйста, не забывайте, что производительность – это наша отличительная особенность. Если Вы хотите, чтобы я более подробно рассказал о характеристиках оборудования – без проблем. В следующем посте будут подробные спецификации железа всех серверов, которые обеспечивают работу сайта.
Итак, что изменилось за прошедшие 2 года? Кроме замены некоторых серверов и сетевого оборудования, не очень многое. Вот укрупненный список хардварной части, которая обеспечивает работу ресурса (выделены различия по сравнению с 2013 годом):
- 4 Microsoft SQL Servers (новое железо для 2-х из них);
- 11 Web-серверов IIS (новое оборудование);
- 2 сервера Redis (новое оборудование);
- 3 сервера Tag Engine (новое оборудование для 2-х из 3-х);
- 3 сервера Elasticsearch (те же, старые);
- 4 балансировщика нагрузки HAProxy (добавлено 2 для поддержки CloudFlare);
- 2 брандмауэра Fortinet 800C (вместо Cisco 5525-X ASAs);
- 2 маршрутизатора Cisco ASR-1001 (вместо маршрутизаторов Cisco 3945);
- 2 маршрутизатора Cisco ASR-1001-x (новые!).
Что нам необходимо, чтобы запустить Stack Overflow? Этот процесс не сильно изменился с 2013 года, но из-за оптимизации и нового железа, нам необходим только один web-сервер. Мы этого не хотели, но несколько раз успешно проверили. Вношу ясность: я заявляю, что это работает. Я не утверждаю, что это (запуск SO на единственном web-сервере) — хорошая затея, хотя каждый раз выглядит весьма забавно.
[ScanDoc] предобработка сканов
Есть мнение, что система электронного документооборота полностью избавляет от работы с бумагами, но это не так. Для оцифровки бумажных экземпляров документов их обычно пропускают через сканер. Когда поток документов и требования к качеству сканов превышают некоторый порог возникает ряд вопросов, которые необходимо решать программно.
Какие проблемы приходится решать:
- Корректировать угол наклона изображения, т.к. фидер сканера неизбежно наклоняет документ при протяжке. Неряшливость в важных документах недопустима.
- Выделять полезную часть на скане, остальное — удалять, так как это не информативно и занимает дисковое пространство впустую.
- Находить и удалять пустые страницы, которые обязательно будут при дуплекс-сканировании.
Замеряем производительность с помощью BenchmarkDotNet
Под бенчмарком я подразумеваю измерение времени выполнения метода(ов). Для начала представим процесс написания бенчмарка руками. Создаем тестируемый метод, выбираем Release билд, создаем «замеряющий» метод, в нем собираем мусор, ставим StopWatch в начале и в конце, запускаем прогрев, запускаем тестируемый метод. Если тестируемый метод выполняется быстрее одного «тика» StopWatch, запускаем тестируемый метод много раз (пусть будет миллион), делим суммарное время на миллион, получаем результат (при этом нужно не забыть вычесть из суммарного времени время «холостого» прогона цикла на миллион операций).
Как компьютер играет в шахматы?
Хикару Накамура, недавно бросивший вызов компьютеру
Компьютер уже давно обыграл человека в шахматы, сейчас сильнейшие шахматисты не способны выиграть даже у старенького ноутбука. Теперь шахматные движки используются для анализа партий, поиска новых вариантов и игры по переписке.
Если вам интересно, как же устроены шахматные движки — добро пожаловать под кат.
Rogue AP — фальшивые точки доступа
Большинство современных устройств запоминают название Wi-Fi сети, к которой они успешно подключались хотя-бы один раз, и сразу же соединяются с ней, если «увидят» её в беспроводном эфире. Эту фичу беспроводных технологий всё чаще и чаще используют злоумышленники — создают т.н. rogue AP (поддельную точку доступа). Такие атаки с каждым годом становятся всё масштабнее, учитывая постоянно увеличивающийся рынок BYOD-устройств и количество критичной информации, содержащейся на них.
14 вопросов об индексах в SQL Server, которые вы стеснялись задать
Индексы — это первое, что необходимо хорошо понимать в работе SQL Server, но странным образом базовые вопросы не слишком часто задаются на форумах и получают не так уж много ответов.
Роб Шелдон отвечает на эти, вызывающие смущение в профессиональных кругах, вопросы об индексах в SQL Server: одни из них мы просто стесняемся задать, а прежде чем задать другие сначала подумаем дважды.
- SQL Server Index Basics от 25 ноября 2008 года (заметка даёт понимание основных терминов)
- 14 SQL Server Indexing Questions You Were Too Shy To Ask от 25 марта 2014 года (собственно, ради неё всё и затевалось)
Если вы пишите запросы на языке T-SQL, но плохо понимаете откуда берутся данные, то стоит прочитать данный перевод.
Если же вы захотите знать больше, то в конце перевода я даю тройку книг с которых следует двигаться дальше.
Подходы к проектированию RESTful API
Автор: Вячеслав Михайлов, Solutions Architect.
В этой статье я поделюсь опытом проектирования RESTful API — на конкретных примерах покажу, как делать хотя бы простые сервисы красиво. Также мы поговорим, что такое API и зачем он нужен, поговорим об основах REST — обсудим, на чем его можно реализовывать; коснемся основных веб-практик, которые зависят и не зависят от этой технологии. Также узнаем, как составлять хорошую документацию, затрачивая на это минимум усилий, и посмотрим, какие существуют способы нумерации версий для RESTful API.
Часть 1. Теория
Итак, как мы все знаем, API — application programming interface (интерфейс программирования приложений), набор правил и механизмов, с помощью которых одно приложение или компонент взаимодействует с другими
Почему хороший API — это важно?
- Простота использования и поддержки. Хороший API просто использовать и поддерживать.
- Хорошая конверсия в среде разработчиков. Если всем нравится ваш API, к вам приходят новые клиенты и пользователи.
- Выше популярность вашего сервиса. Чем больше пользователей API, тем выше популярность вашего сервиса.
- Лучше изоляция компонентов. Чем лучше структура API, тем лучше изоляция компонентов.
- Хорошее впечатление о продукте. API — это как бы UI разработчиков; это то, на что разработчики обращают внимание в первую очередь при встрече с продуктом. Если API кривой, вы как технический эксперт не будете рекомендовать компаниям использовать такой продукт, приобретая что-то стороннее.
Теперь посмотрим, какие бывают виды API.
Виды API по способу реализации:
- Web service APIs
- XML-RPC and JSON-RPC
- SOAP
- REST
- WebSockets APIs
- Library-based APIs
- Java Script
- Class-based APIs
- C# API
- Java
Виды API по категориям применения:
- OS function and routines
- Access to file system
- Access to user interface
- Object remoting APIs
- CORBA
- .Net remoting
- Hardware APIs
- Video acceleration (OpenCL…)
- Hard disk drives
- PCI bus
- …
[ В закладки ] Алгоритмы и структуры данных в ядре Linux, Chromium и не только
Посмотрим, что можно обнаружить в коде ядра Linux, браузера Chromium и ещё в некоторых проектах.
Лучшие практики защиты e-commerce сайтов
Интернет-магазины всегда привлекали злоумышленников: это и источник данных кредитных карт (сейчас практически неактуальный); пользовательских данных; данных о заказах и рыночных трендах (покупательском спросе); источник трафика; манипуляция со скидочными купонами и т.д. E-commerce сайт может быть атакован как злоумышленниками в «свободной охоте» (нецелевая атака), так и по заказу недобросовестных конкурентов. В последнее время популярны разного рода DoS/DDoS атаки, как для вывода конкурента из строя, так и в виде инструмента для шантажа.
В этом топике я опишу лучшие практики по защите e-commerce сайтов.
Записки правдивого архитектора: просто о самом главном (Ч.2)
— именно на этой мысли мы остановились в конце 1й части статьи. Продолжаем.
Что такое хорошая архитектура?
Хорошая архитектура – та, что соответствует своему назначению, т.е. позволяет решать поставленные перед ней задачи.
Задачи бывают разные. Стандартные и специфичные. Локальные и масштабные.
Но в любом случае, как вряд ли кто-то захочет дом “на один сезон” (хотя такое тоже возможно, но это как раз из разряда “специфичного”, и едва ли для подобного строительства будут прибегать к услугам архитектора) — так и сомнительно, чтобы кто-то хотел получить в итоге систему без перспективы ее развития в будущем.
От правильности построения архитектуры зависит масса полезных характеристик системы, среди которых немаловажная — это показатель срока ее жизни в процессе наращивания функционала, роста объемов данных и нагрузки.
Хорошая архитектура должна обладать свойством устойчивости – т.е. изменение вышеперечисленных параметров не должно приводить к необходимости коренного пересмотра реализации решения.
Это возможно, если при проектировании учитывается набор так называемых нефункциональных требований. Пользователь начинает их замечать только в случае их нарушения — пользователь сосредоточен, прежде всего, на функционале, который ему необходим. Но это не значит, что этот аспект должен уйти из нашего фокуса внимания. Когда эти требования нарушаются, для пользователя зачастую это выглядит просто – система не работает.
Процедурно генерируемые карты мира на Unity C#, часть 4 (трафик)
Это последняя статья из цикла о процедурно генерируемых с помощью Unity и C# картах мира. Осторожно, под катом 7 МБ картинок.
Лучшие дистрибутивы для проведения тестирования на проникновение
Существует несколько популярных securty дистрибутивов, содержащих большинство популярных утилит и приложений для проведения тестирования на проникновение. Обычно они основаны на существующих Linux-дистрибутивах и представляют из себя их переработанные версии. В этой статье будут представлены наиболее известные из них.
Загрузка Windows Recovery Environment (или любого WIM-образа) с USB flash
Загрузиться в WinRE может быть полезно для быстрого ремонта установленной Windows: восстановление запуска системы, восстановление из образа, откат к точке восстановления, изменение параметров загрузки, наконец, доступ к командной строке, а значит возможность делать много разных интересных вещей, типа
format C:
.Кроме того, можно запускать regedit.exe и другие системные программы, и даже некоторое стороннее ПО, если конечно для работы оно не требует запущенной «нормальной» Windows.
Альтернативным решением конечно является загрузка с установочного DVD или ISO-образа, но запуск WIM-образа Среды восстановления напрямую будет происходить быстрее — он весит гораздо меньше, чем целый DVD.
К тому же, на одной USB-флешке можно расположить несколько WIM-образов, например, 2 образа WinRE разной разрядности (x32 + x64), и другие образы с «ремонтных» DVD. У меня таким же образом загружается AntiWinLocker, и это без необходимости иметь отдельный ISO с ним.
В общем, возможность загрузить WIM-образ может быть очень полезной. Поэтому перейдем к делу.
Unmanaged C++ library в .NET. Полная интеграция
Remote reflection в .NET runtime
Автор статьи — Сердар Курбанов SerdarKurbanov, основатель команды и ведущий разработчик Telescope.
При использовании программного обеспечения могут встречаться ситуации, когда приложение нельзя или нежелательно останавливать даже при возникновении неполадки. В таких ситуациях, когда использование отладчика невозможно, обнаружение ошибки может представлять нетривиальную задачу.
Ситуация может быть еще запутаннее, если приложение использует многопоточность. Определить какой именно из потоков вызвал ошибку может помочь логирование, но более универсальным решением была бы возможность взглянуть внутрь работающей программы и увидеть состояния объектов в ней, не останавливая ее. Одним из подходов к этой задаче может быть использование возможностей System.Reflection.
Грипп: врачи советуют «Тамифлю». Но, доказательна ли доказательная медицина?
Всемирное использование противовирусного препарата «Тамифлю», резко выросло после вспышки вируса H1N1 («свиного» или «Мексиканского» гриппа) в 2009 году. Первоначально считалось, что это приведет к уменьшению госпитализаций и осложнений гриппа, таких как пневмония, во время пандемии.
Но, оказалось, что “Тамифлю” («Осельтамивир») сокращает продолжительность симптомов гриппа всего на полдня, и нет доказательств, что он уменьшает число госпитализаций или осложнений гриппа. Об этом свидетельствуют данные Кокрановского обзора исследований , опубликованные Кокрановским сообществом (независимой, исследовательской сетью глобального здравоохранения) и «Британским медицинским журналом» (BMJ) еще в апреле 2014г.
IoC, DI, IoC-контейнер — Просто о простом
На данный момент, на эту тему уже довольно сказано, написано, в том числе и на хабре, но как раз из-за обилия информации сложно найти действительно полезный контент. Кроме того, данные понятия часто смешивают и/или путают. Проанализировав множества материалов я решил изложить вам свое видение предмета.
Информация
- В рейтинге
- Не участвует
- Откуда
- Самара, Самарская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность