Обновить
19
0
Журат Максим@ChessMax

Пользователь

Отправить сообщение

Язык програмирования Ü — нелёгкий путь написания самодостаточного компилятора

Время на прочтение17 мин
Охват и читатели15K

Уже несколько лет я веду разработку собственного языка программирования — Ü. Около двух лет назад я публиковал вводную статью о нём на Хабре. Компилятор этого языка написан на C++ и долгое время он таковым и оставался. Но после той публикации я пришёл к выводу, что язык Ü уже достаточно продвинут, чтобы написать на нём компилятор языка Ü. О написании этого компилятора и будет повествовать данная статья.

Читать дальше →

Видишь уязвимости? А они есть! Наше исследование популярных CMS-систем

Время на прочтение17 мин
Охват и читатели14K

Львиная доля всех работ по анализу защищенности внешнего периметра – это тестирование веб-приложений. Здесь могут быть как корпоративные решения, так и «домашние» разработки на базе различных публичных систем управления контентом (CMS). Мы всегда проводим глубокий анализ подобных решений на тестовых стендах и зачастую находим уязвимости нулевого дня. Собственно, из опыта таких проектов и родилась идея собрать исследовательскую команду и провести глубокий анализ популярных CMS-систем и различных плагинов для них. В этом посте мы поделимся результатами нашего исследования, а также продемонстрируем примеры уязвимого кода наиболее интересных, на наш взгляд, уязвимостей и примеры их эксплуатации. Конечно все эти уязвимости уже исправлены и описываются здесь с разрешения владельцев систем.

Не всё то в безопасности, что с Bug Bounty

Flutter: о разработке плагинов с интерфейсом ActivityAware

Время на прочтение6 мин
Охват и читатели5.7K


В былые времена клиенты присылали цветные изображения документов со сканера по емейлу. Кто ленился или не мог — отправлял свой загранник по почте. С этим неплохо справлялось решение от ABBYY. Потом появились телефоны и люди стали присылать фотографии паспортов. ABBYY сломался. Перешли на решение от Smart Engines и даже с фотографиями, посланными через WhatsApp особых проблем не было. Но потом пошли умные мобилки с включенными по умолчанию водяными знаками типа «Xiaomi 9T» часто перекрывающими важнейшую часть паспорта. Вдобавок к этому наличие в кадре на фотографии пальцев и бликов тормозило общение с клиентом.

Примеры паспортов, непригодных к распознаванию

Когда паспорт распознается в видеопотоке на телефоне клиента, то этой проблемы так остро не стоит. Почему?

  1. Мобильное ядро отображает рамку документа в процессе распознавания, не просто маску поверх видео, а именно рамку документа, находящегося в руках. По моим ощущениям, это дает человеку понимание, где не должно быть его пальцев. Вообще, это интересная тема для отдельного исследования.
  2. Система использует механизм сатурации данными и готова выдать результат только после определенной уверенности в них.
Читать дальше →

Адаптивный layout — как переверстать весь проект, не перевёрстывая его

Время на прочтение9 мин
Охват и читатели18K


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


Всем привет! Меня зовут Юрий Голубев, я разрабатываю frontend в Почте Mail.ru. Сегодня я хочу поделиться опытом того, как мы добавили адаптивности и возможности кастомизации в интерфейс, а заодно — открыли новый для себя способ написания адаптивных компонентов.

Читать дальше →

Потребительский экстремизм в GameDev

Время на прочтение7 мин
Охват и читатели15K

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

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

Интересно, чем все закончилось?/

Что в этом случае делает администрация? Сначала банит клиента на форуме, если не помогает – блокирует персонажа до устранения нарушений. Примерно так развивался сюжет и в моем случае с одним отличием: клиент выйдя из бана повторно спровоцировал конфликтную ситуацию, получил отказ на претензию, зафиксировал ответы в нотариальном порядке и пошел в суд по Закону «О защите прав потребителей.» (далее - ЗЗПП для краткости).

В иске игрок потребовал все, на что хватило фантазии:

Рекомендации по защите под катом

Какую СУБД выбрать и почему? (Статья 1)

Время на прочтение6 мин
Охват и читатели93K

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

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

Читать далее

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Время на прочтение12 мин
Охват и читатели32K

Этот текст предназначен для тех, кто только осваивает программирование. Я читаю лекции по C++ на первом курсе местного университета, и в качестве практикума предлагаю запрограммировать любую игру (не выношу проектов типа "софт бронирования книг в местной библиотеке"). Соответственно, чтобы помочь начинающим, я сделал некоторое количество заготовок, с которых можно стартовать свой проект. Например, заготовку олдскульного 3д шутера в 486 строк C++ я уже описывал, а вот тут можно посмотреть, что из неё сделали первокурсники.


В этот раз всё будет ещё проще, я хочу сделать заготовку под простейший платформер, вот так выглядит результат:



На данный момент проект содержит менее трёхсот строчек цпп:


ssloy@khronos:~/sdl2-demo/src$ cat *.cpp *.h | wc -l
296

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


Итак, поехали!

Читать дальше →

Бильярд, Defold и рок-н-ролл

Время на прочтение10 мин
Охват и читатели4.2K

Про рок-н-ролл я правда наврал, разве что в процессе разработки его в том числе слушал, но в статье про него больше ничего не будет.

А расскажу я о разработке своей игры на движке Defold. Игра является разновидностью бильярда, но со своими правилами и механикой(или фишкой, заранее извиняюсь у настоящих геймдизайнеров если неправильно употребляю термин «механика» в тексте).

Читать далее

Коммерческая разработка

Время на прочтение2 мин
Охват и читатели30K

Первый раз я увидел компьютер лет в 8. Помню мои первые ощущения какого-то трепета и внутреннего волнения, разглядывая иконки Моего компьютера и Корзины. Я еще не очень хорошо понимал для чего все это, но уже хорошо знал, что тут можно запустить дум3д, и мир снаружи замрёт.

Вот моя первая работа. Кто-то решился меня нанять и платить настоящие деньги за то, что мне нравится. Вот дураки, я бы делал это бесплатно. Компьютер дал мне свободу. Свободу создавать.

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

За это хорошо платят и всё что я хочу — получить свою зарплату, закрыть ноутбук и напиться. Сделать как можно меньше, ровно сколько нужно чтоб тебя не уволили. Я начал видеть только плохое и в программировании, и в технологиях. Во мне пропало то самое волнение 8-летнего пацана перед высшей вещью - компьютером.

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

Читать далее

Как посчитать синус быстро

Время на прочтение13 мин
Охват и читатели26K

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

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

Читать далее

Представляем .NET MAUI Community Toolkit (Preview)

Время на прочтение2 мин
Охват и читатели15K

Команда Community Toolkit рада объявить о первых предварительных выпусках двух новых наборов инструментов .NET Multi-platform App UI (.NET MAUI): CommunityToolkit.Maui и CommunityToolkit.Maui.Markup.

Как было объявлено в прошлом месяце, эти библиотеки являются развитием Xamarin Community Toolkits. Они содержат .NET MAUI Extensions, Advanced UI/UX Controls, Effects и Behaviors, чтобы облегчить вам жизнь в качестве .NET MAUI-разработчика.

Функции, которые вы добавляете в .NET MAUI Toolkit, однажды могут быть включены в официальную библиотеку .NET MAUI. Мы используем наборы инструментов сообщества, чтобы представить новые функции, и тесно сотрудничаем с командой разработчиков .NET MAUI, чтобы выбирать функции для добавления.

Читать далее

Ускоряем цикл foreach до for

Время на прочтение6 мин
Охват и читатели17K

Привет!

В этой небольшой заметке о быстром енумераторе для foreach на C#:

foreach (var i in 1..10)

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

Будет много бенчмарков и шарплаба. Прошу под кат!

Читать далее

Как мы добавили поддержку языка Frege в IDEA. Часть 2

Время на прочтение9 мин
Охват и читатели2.6K

Привет! Это вторая часть рассказа о том, как мы поддерживали язык Frege в IntelliJ IDEA. Первую часть читайте здесь. Сейчас мы поделимся, как сделали автодополнение, систему сборки, интерпретатор и систему типов. И как все это тестировали.

Читать далее

Как мы добавили поддержку языка Frege в IDEA. Часть 1

Время на прочтение14 мин
Охват и читатели7.8K

В этом посте мы расскажем, как реализовывали плагин для поддержки функционального языка Frege в IntelliJ IDEA. Если вам интересно, как IDE от JetBrains работают внутри, или вы хотите поконтрибьютить в языковые плагины (а может даже написать свой!), эта статья для вас. Мы пройдемся по этапам создания языкового плагина для IDEA, расскажем, с какими трудностями столкнулись, и как подружили этот язык с JVM-миром.

Читать далее

Анализ трафика приложений на Android Emulator. Причем здесь Root?

Время на прочтение7 мин
Охват и читатели26K

Привет! Я думаю, что наберется немало людей, перед которыми стоят интересные задачи по работе с приложениями. Например - анализ трафика для, разумеется, тестирования этих самых приложений! Вам выпало нелегкое бремя - необходимо отдебажить продовую сборку чего-либо и вы начинаете свои поиски решений проблем. А проблем у вас на этом пути будет много. О том, как их можно решить я и пишу.

И как их решить?

Работа с файлами — это сложно

Время на прочтение19 мин
Охват и читатели19K

Я уже много лет не пользовался десктопным клиентом электронной почты. Ни один из них не может справиться с объёмом получаемой мной почты, по крайней мере один раз не повредив мой почтовый ящик. Pine, Eudora, Outlook — все они повреждали мой почтовый ящик, вынуждая восстанавливаться из резервной копии. Как получилось, что десктопные почтовые клиенты менее надёжны, чем Gmail, хотя мой аккаунт в Gmail не только обрабатывает больше писем, чем у меня когда-либо было в десктопных клиентах, но и обеспечивает одновременный доступ из множества точек мира? Распределённые системы имеют нечестное преимущество — они, в отличие от десктопных клиентов, устойчивы к полному отказу диска, однако ни одна из моих проблем повреждения файлов не была связана с полным отказом диска. Почему же мой опыт работы с десктопными приложениями был настолько плохим?
Читать дальше →

.NET: Tools for working with multi-threading and asynchrony – Part 1

Время на прочтение18 мин
Охват и читатели20K
I have originally posted this article in CodingSight blog
The second part of the article is available here

The need to do things in an asynchronous way – that is, dividing big tasks between multiple working units – was present long before the appearance of computers. However, when they did appear, this need became even more obvious. It is now 2019, and I’m writing this article on a laptop powered by an 8-core Intel Core CPU which, in addition to this, is simultaneously working on hundreds of processes, with the number of threads being even larger. Next to me, there lies a slightly outdated smartphone which I bought a couple of years ago – and it also houses an 8-core processor. Specialized web resources contain a wide variety of articles praising this year’s flagship smartphones equipped with 16-core CPUs. For less then $20 per hour, MS Azure can give you access to a 128-core virtual machine with 2 TB RAM. But, unfortunately, you cannot get the most out of this power unless you know how to control interaction between threads.
Read more →

How to create a custom Scrollbar in Flutter using RenderShiftedBox

Время на прочтение3 мин
Охват и читатели10K

In my project, I was faced with the need to implement a scroll bar. The standard approaches didn't fully satisfy what designers wanted to see. Here is an example, it is slightly different in appearance from what I needed, but the essence is approximately the same: the scroll bar should be on the right side of the list and take into account the padding of the scroll bar, with the slider displaying the percentage of the scrolled part of the list.

Read more

Refined типы в Scala

Время на прочтение4 мин
Охват и читатели5.7K

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

Читать далее

Нельзя так просто взять и вычислить абсолютное значение

Время на прочтение4 мин
Охват и читатели36K

Кажется, задача вычисления абсолютного значения (или модуля) числа совершенно тривиальна. Если число отрицательно, давайте сменим знак. Иначе оставим как есть. На Java это будет выглядеть примерно так:


public static double abs(double value) {
  if (value < 0) {
    return -value;
  }
  return value;
}

Вроде бы это слишком просто даже для вопроса на собеседовании на позицию джуна. Есть ли тут подводные камни?

Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Разработчик мобильных приложений
Старший
Flutter
Flutter Bloc
MobX
Mobile
Разработка мобильных приложений