Search
Write a publication
Pull to refresh
27
0
Михаил Мельник @mike114

User

Send message

Асинхронный рассинхрон: антипаттерны в работе с async/await в .NET

Reading time9 min
Views52K

Кто из нас не косячит? Я регулярно встречаюсь с ошибками в асинхронном коде и делаю их сам. Чтобы прекратить это колесо Сансары делюсь с вами самыми типичными косяками из тех, которые иногда довольно сложно отловить и починить.



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

Роллс-ройс среди самокатов — Ninebot KickScooter ES4 by Segway

Reading time14 min
Views86K
В этом обзоре кто-то откроет для себя отличный электроскутер, кто-то подумает «О, о моём скутере пишут, почитаю-ка!», кто-то спросит в комментариях «А чего вы о нём только сейчас рассказываете? Он же уже не новый, да и январь на дворе». Да, не новый, да, январь, но ещё вчера была новогодняя ночь, а сегодня уже середина января — сами не заметите, как асфальт снова станет сухим. Поэтому добро пожаловать под кат — там обзор самой мощной версии скутера Ninebot серии ES.


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

Бессерверный REST API «на коленке за 5 минут»

Reading time8 min
Views20K
Привет, Хабр! Сегодня продолжим разговор о возможностях, которые предоставляет нам Amazon Web Services и о том, как эти возможности использовать в решении прикладных задач.

На простом примере рассмотрим создание буквально за несколько минут собственного бессерверного автомасштабируемого REST API с разбором кейса — получения списка для ресурса.

Интересно? Тогда заходим под кат!


(Источник)
Читать дальше →

Сниппеты против Клевера – обыгрываем популярнейшую викторину в реальном времени

Reading time7 min
Views8.2K
Апрель 2018-го года. Мне было 14. Мы с друзьями играли в тогда очень популярную онлайн-викторину «Клевер» от ВКонтакте. Один из нас (обычно я) всегда был за ноутбуком, чтобы пытаться быстро гуглить вопросы и глазами искать в поисковой выдаче правильный ответ. Но вдруг я понял, что каждый раз выполняю одно и то же действие, и решил попробовать написать это на частично известном мне тогда Python 3.

Шаг 0. Что здесь происходит


Для начала я освежу в вашей памяти механику «Клевера».

Игра для всех начинается в одно и то же время — в 13:00 и в 20:00 по Москве. Чтобы сыграть, нужно в это время зайти в приложение и подключиться к прямой трансляции. Игра идет 15 минут, в течение которых участникам на телефон одновременно приходят вопросы. На ответ дается 10 секунд. Затем объявляется верный ответ. Все, кто угадали, проходят дальше. Всего вопросов 12, и если ответить на все – получишь денежный приз.
image
Получается, наша задача — мгновенно ловить новые вопросы от сервера Клевера, обрабатывать их через какой-либо поисковик, а по результатам выдачи определять правильный ответ. Вывод ответа было решено производить в телеграм-бота, чтобы уведомления из него всплывали на телефоне прямо во время игры. И все это желательно за пару секунд, ведь время на ответ сильно ограничено. Если вы хотите увидеть, как довольно простой, но рабочий код (а посмотреть на такой будет полезно новичкам) помогал нам обыгрывать Клевер – добро пожаловать под кат.
Читать дальше →

Упрощаем написание резюме разработчика

Reading time10 min
Views18K

Проблема


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



Для тех, кому не интересна лирика, и кто хочет сразу перейти к делу — то вперед на github. А для тех, кому важна механика и история проекта — собственно и посвящена статья.


С появлением специализированных ресурсов биржы труда, таких как LinkedIn, HeadHunter и др., казалось бы, ситуация должна была улучшиться — заполняем весь опыт в одном месте, и больше прошлое не ворошим. Но не тут-то было — заполнили в одной системе, нельзя просто по клику мышки выгрузить ее в другую. Нету единой БД, на которую можно линковать свою учетную запись. Оно и понятно — подобные компании заинтересованы вытеснить других, а не заниматься интеграцией друг с другом, а простым кандидатам в итоге становится только хуже.

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

Математика в Gamedev по-простому. Триангуляции и Triangle.Net в Unity

Reading time5 min
Views22K
Всем привет! Меня зовут Гриша, и я основатель CGDevs. Математика – очень крутой инструмент при разработке игр. Но если скажем без понимания векторов и матриц обойтись в принципе сложно, то алгоритмы триангуляций не столь обязательная вещь, но с помощью них решается достаточно большое количество интересных задач. Сегодня хотелось бы поговорить про достаточно важный инструмент в вычислительной геометрии, такой как триангуляции и их применение в игровой индустрии. Кроме того, я написал порт и немного обёрток великолепной библиотеки Triangle.Net для Unity. Если интересно – добро пожаловать под кат. Ссылка на гитхаб прилагается.


Функциональная обработка ошибок в Kotlin с помощью Arrow

Reading time4 min
Views9.9K
image

Привет, Хабр!

Все любят runtime exceptions. Нет лучшего способа узнать о том, что что-то не было учтено при написании кода. Особенно — если исключения обваливают приложение у миллионов пользователей, и эта новость приходит паническим email'ом с портала аналитики. В субботу утром. Когда ты в загородной поездке.

После подобного всерьез задумываешься о обработке ошибок — и какие же возможности предоставляет нам Kotlin?

Первым на ум приходит try-catch. По мне — отличный вариант, но у него есть две проблемы:

  1. Это как-никак лишний код (вынужденная обертка вокруг кода, не лучшим образом сказывается на читаемости).
  2. Не всегда (особенно при использовании сторонних библиотек) из блока catch возможно получить информативное сообщение о том, что конкретно вызвало ошибку.

Давайте посмотрим во что try-catch превращает код при попытке решения вышеозвученных проблем.
Читать дальше →

Работа Xamarin c SDK, написанном на C

Reading time6 min
Views3.4K
Не так давно у меня был интересный проект на Xamarin Forms для нескольких платформ:

  • Android
  • iOS
  • UWP
  • MacOS

Нам было необходимо создать библиотеку, которая смогла бы подключаться к нескольким нашим проектам: Xamarin.Forms, Android на Java, Cordova, а также позволять сторонним разработчикам использовать наше SDK в своих проектах с минимальными усилиями для интеграции.

Командой было решено написать библиотеку на C и подключать ее к нашим проектам по мере необходимости. Такое решение позволило нам иметь одну кодовую базу для SDK проекта и нам не пришлось дублировать библиотеку отдельно под разные платформы с возможными проблемами при переносе кода и дублировании тестов для покрытия и проверки кода.

Правда в итоге оказалось достаточно тяжело «подружить» библиотеку на C с разными платформами на Xamarin платформе. В данной небольшой статье будет расписано как нам удалось это сделать, и возможно, кому-то это пригодится и позволит сэкономить время на проекте.
Итак, если вам интересно то добро пожаловать под кат

Kotlin Native: следите за файлами

Reading time5 min
Views22K
Когда вы пишите command line утилиту, последнее, на что вам хочется полагаться, так это на то, что на компьютере где она будет запущена установлен JVM, Ruby или Python. Так же хотелось бы на выходе иметь один бинарный файл, который будет легко запустить. И не возиться слишком много с memory management'ом.

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

У Go относительно простой синтаксис, неплохая стандартная библиотека, есть garbage collection, и на выходе мы получаем один бинарник. Казалось бы, что еще нужно?

Не так давно Kotlin так же стал пробовать себя на схожем поприще в форме Kotlin Native. Предложение звучало многообещающе — GC, единый бинарник, знакомый и удобный синтаксис. Но все ли так хорошо, как хотелось бы?
Читать дальше →

Заметки фитохимика. Банановая шкурка наносит ответный удар

Reading time25 min
Views79K

Банан велик, а кожура еще больше…
(журнал «Техника — молодежи» №8 за 1986 год)


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


ADB vs Spy Cam & Mic

Reading time4 min
Views19K
Как проверить, ведет ли какое-нибудь приложение на Android-смартфоне фото- или видеорепортаж, хотя ему это ни разу ни к чему? Нижепредлагаемый вариант совсем не идеален, но не требует «рута» или кастомной прошивки.

P.S. Я добавил в статью описание мониторинга доступа приложений к микрофону.

Что требуется установить:
  • ADB (Android Debug Bridge) (например, в составе Android SDK Platform Tools — загрузить можно здесь);
  • драйвер для телефона (при необходимости, например, Google USB Driver можно загрузить здесь).

Включаем на телефоне режим отладки через USB и подключаем смартфон к USB-порту компьютера, причем следует выбрать режим USB-подключения, отличный от «Только зарядка».
Скрытый текст
В «Диспетчере устройств» смартфон отображается, например, так:
в режиме «Фото» или «Файлы»

в режиме «USB-диск»

А вот так — в выводе команды lsusb:


Открываем командную строку в каталоге, в который установились «тулзы».
Проверяем, что подключение успешно (отображается серийный номер подключенного смартфона):
adb devices
(для Windows)

Для Linux команда бы выглядела так:
./adb devices

Если компьютер не авторизован для использования с этим смартфоном (под Android 4.2.2 и новее), то рядом с серийным номером появится предупредительное сообщение "unauthorized".
Для авторизации необходимо подтвердить на смартфоне разрешение отладки через USB.
Скрытый текст
Под Linux может появляться сообщение "no permissions" — в моем случае удалось решить проблему переключением смартфона в режим «Медиаустройство (MTP)».

Запускаем оболочку на устройстве (получаем приглашение "$"):
adb shell



Затем вводим следующие «магические» символы:
while true; do ps `while ! (dumpsys media.camera | grep -E "PID") do  done | grep -o "[^PID: ][0-9]*$"` | grep -o "[^S ]*$" ; date; sleep 1; done

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

Android: создание динамических Product Flavors и Signing Configs

Reading time6 min
Views12K

При работе над Android-проектом, представляющий собой платформу для создания приложений для просмотра видео-контента, возникла необходимость динамического конфигурирования product flavors с выносом информации о signing configs во внешний файл. Подробности под катом.

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

Первая видеоигра для Алисы, или голосовой помощник как игровой контроллер

Reading time3 min
Views6K


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

Видеореклама: must have успешного бизнеса

Reading time13 min
Views40K
Нельзя забывать: бизнес успешен только тогда, когда его продукт вызывает в покупателях эмоциональный отклик. Но как рассказать о своих услугах максимальному количеству людей за ограниченный промежуток времени? Есть ли способ заставить покупателя «выслушать» вас до конца?

Почему видеоролики нравятся людям и как они помогают бизнесу


Рисованный видеоролик Spotify позволил новому музыкальному сервису обойти iTunes за 5 месяцев после запуска и принести Universal Music рекордную прибыль — более 30 млрд долларов.

Количество пользователей файлового хостинга DropBox за 1 месяц распространения ознакомительного видеоролика увеличилось на 10 %. За первые 5 лет после запуска число пользователей сервиса выросло с 0 до 300 млн, а его стоимость возросла до 400 млрд долларов благодаря короткому эксплейнеру.

СИБУР, крупнейшая нефтехимическая компания России, активно использует анимационную видеорекламу для привлечения новых клиентов. Сложные производственные процессы становятся понятны после просмотра рекламного ролика.
Читать дальше →

Подводные камни идентификации Android-устройства

Reading time3 min
Views38K

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

Гугл говорит, что идентифицировать устройство очень просто. Но мы же говорим об Android:)

Данная статья ориентирована на приложения или библиотеки, которые не хотят привязываться к гугловым сервисам.

Итак, давайте погрузимся в это чудесное приключение по получению уникального идентификатора устройства.
Читать дальше →

Заметки фитохимика. Зеленый банан, или Не забудь покормить микробиоту

Reading time20 min
Views103K

Как то уж так повелось со времен голодной студенческой юности, что я чаще на остатки денег покупал себе бананы, а не чипсы или гречку. Причин этому наверное может быть много, от "в Беларуси бананы дешевле картошки", до "банан как и шоколад способствует мозговой активности". Но факт остается фактом. Если хурма фрукт сезонный, то банан — это такая штука которая сопровождает нас по жизни постоянно. Как не отдать долг и не черкнуть заметку. Кроме того, про проведенному мной среди знакомых мини-опросу, одним из основных фруктов, которые с вероятностью 99% будут практически на каждом Новогоднем столе, также является банан. А ведь правильный банан еще нужно найти...


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



Ну а за ответом — традиционно, под кат.

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

Эволюция планировщиков задач

Reading time12 min
Views19K


Приложение iFunny, над которым мы работаем, доступно в сторах уже более пяти лет. За это время мобильной команде пришлось пережить множество разных подходов и миграций между инструментами, а год назад появилось время перейти с самописного решения и посмотреть в сторону чего-то более «модного» и распространённого. Эта статья — небольшая выжимка о том, что было изучено, на какие решения смотрели и к чему в итоге пришли.
Читать дальше →

RecyclerView на максималках: разбор библиотек

Reading time13 min
Views22K


Илья Некрасов, Mahtalitet, android-разработчик KODE
За два с половиной года в андроид-разработке я успел поработать на совершенно разных проектах: от социальной сети для автомобилистов и латвийского банка до федеральной бонусной системы и третьей по перевозкам авиакомпании. Так или иначе в каждом из этих проектов я сталкивался с задачами, которые требовали поиска неклассических решений при реализации списков с помощью класса RecyclerView.
Эта статья — плод подготовки к выступлению на DevFest Kaliningrad’18, а также общения с коллегами — особенно будет полезна начинающим разработчикам и тем, кто использовал лишь одну из существующих библиотек.


Для начала копнем немного в суть вопроса и источника боли, а именно — разрастание функционала при разработке приложения и усложнения используемых списков.

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

Хурма 2.0 Инструкция по употреблению

Reading time20 min
Views94K

«Всё — яд, всё — лекарство; то и другое определяет доза»
Парацельс


Удивительно, но после публикации статьи Заметки фитохимика. Хурма мой facebook ЛС-ящик просто взорвался от десятков сообщений. Для меня это стало настоящим открытием, то что так велик и многонационален "клуб почитателей хурмы". Одними из самых часто встречающихся вопросов были "Кому нельзя есть хурму? Сколько можно есть хурмы детям? Что за закупорка может быть от хурмы ?" и т.п. Собравшись силами я написал очередную статью, в которой постарался развернуто ответить на эти вопросы. Кроме того, если интересно как "вяжущий вкус" хурмы связан с рыбой, что лечат дубильными веществами и почему можно не бояться "желудочного камня" — традиционно прошу под кат.


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

Паттерны и антипаттерны корутин в Kotlin

Reading time5 min
Views29K

Паттерны и антипаттерны корутин в Kotlin


Решил написать о некоторых вещах, которых, по моему мнению, стоит и не стоит избегать при использовании корутин Kotlin.

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

Information

Rating
Does not participate
Location
New South Wales, Австралия
Date of birth
Registered
Activity