Pull to refresh
0
0
Vasiliy @JMS

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

Send message

Pulse 3: что ты такое?

Reading time7 min
Views1.7K

10 января 2023 г.

Сегодня моя 10-я годовщина программирования на платформах Apple, и что может быть лучше, чем отпраздновать это новым крупным выпуском — Pulse 3.0 вышел!

Мне нравился каждый год, когда я работал над iOS. Я начал в 2012 году с Objective‑C, и теперь, благодаря Swift и SwiftUI, я могу таргетировать все платформы Apple, что невероятно. Pulse 3 — это полная переработка. Он расширяет возможности и обеспечивает почти полное равенство функций между iOS, macOS, watchOS и tvOS с одной и той же кодовой базой.

Pulse — это сетевой логгер, созданный с помощью SwiftUI. Он интегрируется на URLSession уровне, позволяя ему видеть незашифрованный трафик и записывать метрики задач, доступные только на этом уровне.

Читать далее

Meshtastic – оперативно-тактический радиочат без сотовой связи и интернета. Часть 1. Знакомство

Reading time9 min
Views102K

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

Meshtastic — это проект, который позволяет построить свою частную радиосеть с очень большим временем автономной работы, используя недорогие радио модули LoRa и экономичные микроконтроллеры серии ESP32.

Радиомодем связаны с вашим смартфоном по сети Bluetooth. Для некоторых сценариев использования смартфон вообще не требуется.

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

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

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

Спаси себя сам и вокруг спасутся многие

Собеседования по алгоритмам: максимальная конкатенация

Level of difficultyMedium
Reading time1 min
Views7.7K

Чему равно самое большое число, которое можно составить из этих пяти карточек? И как написать программу, которая быстро найдёт ответ, получив на вход сто таких карточек?

Читать далее

Восстановление криптоключей по яркости LED-индикатора питания

Reading time4 min
Views9.4K

Экспериментальная установка. Камера наблюдения (слева) снимает индикатор питания на смарт-ридере (справа) с расстояния 16 м

Известный эксперт в области криптоанализа Бен Насси (Ben Nassi) с коллегами из университета им. Бен-Гуриона опубликовали результаты уникальных экспериментов по восстановлению криптографических ключей с помощью видеозаписи светодиода питания устройства, на котором хранится/используется этот ключ.

Для извлечения секретного ключа достаточно нескольких секунд видеозаписи с камеры наблюдения (издали) или со смартфона (вблизи, с роллинг-шаттером).
Читать дальше →

Менеджеры зависимостей

Reading time12 min
Views11K


В этой статье я расскажу, в чем менеджеры зависимостей (package manager) схожи по внутреннему устройству, алгоритму работы, и в чем их принципиальные отличия. Я рассматривал package manager’ы, предназначенные для разработки под iOS/OS X, но содержание статьи с некоторыми допущениями применимо и к другим.
Читать дальше →

Реверс-инжиниринг QR-кода для доказательства вакцинации

Reading time8 min
Views31K
image

Когда Квебек объявил, что будет рассылать электронные письма с подтверждением вакцинации всем, кто был вакцинирован с помощью прикрепленного QR-кода, у меня немного подкосились колени. Мне не терпелось разобрать его на части и покачать головой из-за количества частной медицинской информации, которая, несомненно, будет раскрыта в процессе.

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

Мое первое впечатление было: «Боже мой, это излишне большой QR-код». Под QR-кодом перечислено не так много информации, поэтому они наверняка кодируют все виды личной информации без моего ведома. Знаете, как тот штрих-код на обратной стороне ваших водительских прав.

Естественно, первое, что я сделал, — отсканировал код с помощью приложения QRcode.
Читать дальше →

Списки захвата в Swift: в чём разница между ссылками weak, strong и unowned?

Reading time7 min
Views48K

Джозеф Райт, «Пленный» — иллюстрация «сильного» захвата

Список «захваченных» значений находится перед списком параметров замыкания и может «захватить» значения из области видимости тремя разными способами: используя ссылки «strong», «weak» или «unowned». Мы часто его используем, главным образом для того, чтобы избежать циклов сильных ссылок («strong reference cycles» aka «retain cycles»).
Начинающему разработчику бывает сложно принять решение, какой именно применить способ, так что вы можете потратить много времени, выбирая между «strong» и «weak» или между «weak» и «unowned», но, со временем, вы поймёте, что правильный выбор — только один.
Давайте взглянем на проблему.

Советы начинающему GameDeveloper’у

Level of difficultyEasy
Reading time3 min
Views9.5K

Недавно довелось заниматься поисками джуна на позицию Unity Developer’а. В процессе, выяснилось, что у большинства кандидатов плюс-минус одни и те же пробелы в знаниях. Дабы каждому не накидывать одни и те же сообщения с рекомендациями, возникла идея данного поста.

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

Читать далее

Паттерн CQRS: теория и практика в рамках ASP.Net Core 5

Reading time8 min
Views78K

Скорость разработки и производительность программистов могут отличаться в зависимости от их уровня и используемых в проектах технологиях. Для проектирования ПО нет стандартов и ГОСТов, только вы выбираете, как будете разрабатывать свою программу. Один из лучших способов повысить эффективность работы — применить шаблон проектирования CQRS. 

Существует три вида паттерна CQRS: Regular, Progressive и Deluxe. В этой статье я расскажу о первом — классическом паттерне Regular CQRS, который мы используем в DD Planet в рамках разработки онлайн-сервиса «Выберу.ру». Progressive и Deluxe — более сложные архитектуры и влекут за собой использование обширного набора абстракций.

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

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

IQueryable порождает сильную связанность

Reading time4 min
Views11K

Время от времени я встречаю людей, пытающихся выразить API в терминах IQueryable<T>. Почти всегда это плохая идея. В этой статье я объясню почему. Вкратце, IQueryable<T> — это один из лучших примеров заголовочного интерфейса (Header Interface), предлагаемых платформой .NET. Его почти невозможно реализовать полностью.


Эта статья о проблемах реализации API на основе интерфейса IQueryable<T>. Это не претензия к интерфейсу как таковому. Кроме этого, это не претензия к замечательным методам LINQ, доступным для интерфейса IEnumerable<T>.

Можно сказать, что IQueryable<T> — это одно сплошное нарушение принципа подстановки Лисков. Я буду использовать закон Постела, чтобы объяснить почему это так.


Принцип устойчивости, также известен как закон Постела в честь Джона Постела: «Будь либерален к тому, что принимаешь, и консервативен к тому, что отсылаешь (Be liberal in what you accept, and conservative in what you send)».
Читать дальше →

Реализация Minecraft Query протокола в .Net Core

Reading time9 min
Views9.1K

Minecraft Server Query – это простой протокол, позволяющий получить актуальную информацию о состоянии сервера путём отправки пары-тройки незамысловатых UDP-пакетов.

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

Так было принято решение написать свою реализацию.

Читать далее

Нужно ли стартапу в 2021 выдавать опционы сотрудникам? Разбираем что это и как оформить

Reading time6 min
Views18K

В 21 веке, где ни одного программиста не удивишь теннисным столом, PS5 и ящиком снеков в офисе, нужно задумываться о новых способах мотивации. Ни один стартап не может позволить себе конкурировать с зарплатами талантливых сотрудников, в том числе программистов, гигантов технологического рынка. Чтобы заинтересовать сотрудника в свой проект, чтобы он также как и владелец переживал за развитие компании — нужно делиться. Делиться временем. Делиться хорошим вознаграждением за проделанную работу. И делиться акциями или правильнее «опционами на акции». За время и деньги все понятно. С опционами разберемся.


image

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

Мир JavaScript в 2021 году

Reading time7 min
Views37K
Мир веб-разработки весьма изменчив. Изменения в нём происходят очень быстро. Что принесёт в него 2021 год? Здесь я хочу поделиться выводами о грядущих крупных JS-трендах, которые я сделал, проанализировав соответствующие исследования, проведённые в 2020 году.



Сначала — пара слов о самих этих исследованиях. К сожалению, какое-то время нам придётся обходиться без свежих материалов отличного Front End Tooling Survey. Это усложняет поиск трендов. И хотя в этом году на одно хорошее исследование стало меньше, вместо него появилось одно новое — The State of Front End. Но оно проводится первый год, поэтому в нашем распоряжении нет его данных за прошлые годы, что, опять же, не способствует облегчению задачи поиска трендов. Правда, в нём приняло участие внушительное количество разработчиков со всего мира (4500), что, определённо, делает его ценным источником информации.
Читать дальше →

Авторизация с помощью клиентских SSL сертификатов в IOS и Android

Reading time8 min
Views39K
Протокол безопасной передачи данных SSL (Secure Sockets Layer) помимо обеспечения безопасной передачи данных так же позволяет реализовать авторизацию клиентов при помощи клиентских SSL сертификатов. Данная статья является практическим руководством по реализации данного вида авторизации в мобильных приложениях на IOS и Android.

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

Процесс авторизации выглядит следующим образом. При переходе клиента в закрытую область сервер запрашивает у клиента сертификат, если проверка прошла успешно то клиент получает доступ к закрытому контенту в ином случае клиент может получить ошибку “No required SSL certificate was sent”.
Читать дальше →

Вы не знаете как должны работать модальные окна

Reading time10 min
Views28K

Уверен, многие хоть раз создавали всплывающее модальное окно. Но задумывались ли вы об определении этого компонента? Как он должен работать?


В этом материале я постарался собрать максимально полный свод правил, рекомендаций и примеров реализации по которым модальные окна должны работать.


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


Этот список сформирован на основе спецификаций WAI-ARIA, HTML Living Standard и моего личного опыта. И хотя я буду говорить про веб, большинство правил и рекомендаций применимы для модальных окон где угодно.

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

Как разработчикам проходить валютный контроль: пошаговая инструкция

Reading time7 min
Views20K

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

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

Читать далее

Touch slider на JavaScript

Reading time15 min
Views93K

Когда я начинал изучать JavaScript, мне очень хотелось понять как работают и делаются слайдеры, которые можно перелистывать свайпами или мышью, но материалов с хорошим объяснением именно того, что мне надо, я не нашел. Через какое-то время мне удалось сделать нечто подобное. И теперь я хочу написать об этом статью, чтобы другим людям, которые хотят понять как это все работает и сделать touch события для слайдера (и не только), было проще разобраться. Я постараюсь излагать по порядку и подкреплять объяснения наглядными примерами.

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

Полностью отзывчивый дизайн — это больше, чем просто медиа-запросы

Reading time4 min
Views14K


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

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

Дорога в ад JavaScript-зависимостей

Reading time8 min
Views27K
Каждый JavaScript-проект начинается с благих намерений, заключающихся в том, что его создатели обещают себе не использовать слишком много NPM-пакетов в ходе его разработки. Но даже если разработчики прилагают немалые усилия к тому, чтобы сдержать это обещание, NPM-пакеты постепенно проникают в их проекты. Размер файла package.json со временем растёт. А с package-lock.json после установки зависимостей происходит настоящий ужас, выражающийся в добавлениях и удалениях пакетов, особенно заметных при очередном PR…



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

Предположим, вы собираетесь сделать блог и хотите воспользоваться Gatsby.js. Попытайтесь добавить этот генератор сайтов в зависимости своего проекта. А теперь — принимайте поздравления. Только что в вашем проекте оказалось 19000 дополнительных зависимостей. Это нормально? Насколько сложным может стать дерево JavaScript-зависимостей? Как дерево зависимостей превращается в ад? Давайте с этим разберёмся.
Читать дальше →

Парочка интересных методов Console

Reading time3 min
Views10K
Доброго времени суток, друзья!

В этой небольшой заметке я хочу поделиться с Вами информацией о некоторых методах объекта Console, которые можно использовать наряду с console.log().

Полный список методов можно посмотреть здесь.

От слов — к делу. Да, для работы будет использоваться Chrome.

Console.debug() и сonsole.info()


Console.debug() и console.info() служат для вывода информационных сообщений в консоль и, по сути, являются аналогами console.log(). Одна из особенностей console.debug() состоит в том, что выводимое этим методом сообщение отображается только если консоль настроена на показ сообщений уровня отладки (для Chrome — галочка у Verbose вкладки Levels).
Читать дальше →
1
23 ...

Information

Rating
Does not participate
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity