Pull to refresh
4
Андрей @Lure_of_Chaos read⁠-⁠only

Программист

Что означают приставки в британских фамилиях и не только

Reading time 5 min
Views 41K

Привет, Хабр! По исследованиям социологов, в Британии сегодня можно насчитать около 45 000 фамилий. И среди них вы наверняка замечали фамилии со странными префиксами вроде O’Hara или McGregor. О них сегодня и поговорим.

Точнее, не конкретно о них, а в целом о фамильных приставках в Британии. Расскажем, как они появились, что значат и как по ним можно определить родину человека. Готовы? Поехали!

Читать далее
Total votes 75: ↑69 and ↓6 +63
Comments 16

SDK чата и Kotlin Multiplatform

Reading time 5 min
Views 3.2K

Привет, меня зовут Сергей, я Android Lead в компании Broniboy —  сервисе мультидоставки, который работает не только с ресторанами, но и с магазинами, аптеками и обычными людьми. Учитывая уровень конкуренции на этом рынке, каждый клиент на счету. Достаточно одной ошибки, чтобы потерять его, поэтому нам нужен надёжный канал поддержки пользователей. Наш выбор пал на чат, простой и понятный пользователю канал связи. Он позволяет не только оперативно реагировать на жалобы, но и привности частичку «человечности» в общение с техподдержкой.

Изучив готовые SDK и взвесив все «за» и «против», мы решили написать собственный SDK чата. Одна из основных идей — переиспользование кода между платформами, а сегодня это Android, iOS и Web. Поэтому, для MVP мы решили попробовать Kotlin Multiplatform.

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 3

Чаты на вебсокетах. Теперь про бэкенд

Reading time 4 min
Views 14K

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

Ниже подробности о том, что было до написания кастомных чатов и какие стояли требования к реализации, из каких компонентов они состоят, как вписываются в нашу инфраструктуру и что получилось в итоге. А в конце статьи — ссылки про особенности разработки наших чатов на вебсокетах для iOS и Android.

Читать далее
Total votes 51: ↑51 and ↓0 +51
Comments 17

Пишем комикс-приключение на Kotlin

Reading time 6 min
Views 7.3K

Всем привет! Сегодня вас ждет легкая статья, которая расскажет как написать простую мобильную игру-викторину на Kotlin. Здесь я расскажу и наглядно покажу как выглядит Kotlin для мобильной разработки и предложу свои идеи о том, как можно структурировать подобный проект. Что же, не буду томить вас графоманией, вперед! 

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

Читать далее
Total votes 9: ↑8 and ↓1 +7
Comments 2

Просмотр HTML-кода — не преступление

Reading time 3 min
Views 55K
В последнюю версию браузера Chrome 98 добавили функцию, с помощью которой администратор локальной сети может блокировать просмотр HTML-кода страниц в браузере.



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

Всё это происходит на фоне истории с американским веб-разработчиком и журналистом, который нашёл конфиденциальные данные прямо в коде HTML на сайте правительства штата Миссури — и написал про это безобразие. Теперь ему грозит тюремный срок за хакерство.
Читать дальше →
Total votes 137: ↑135 and ↓2 +133
Comments 175

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

Reading time 13 min
Views 34K

Главная сложность в разработке приложения – накодить его функционал. Например, сделать редактирование текста для приложения-блокнота. Так я полагал, когда был моложе и наивнее.

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

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

Читать далее
Total votes 58: ↑57 and ↓1 +56
Comments 20

Мама, я сделал Хабр

Reading time 3 min
Views 54K


Мне 17 лет и я уже несколько месяцев делаю клон мобильного приложения Хабра, назвав его соответствующе, модно, со стилем и пафосной точкой в конце — habra. Получилось реализовать несколько фич, которых пока нет ни в официальном приложении из плей маркета, ни на самом сайте.


Ссылка на web-приложение для самых нетерпеливых — habra.js.org. Всех остальных — прошу под кат.

Total votes 235: ↑231 and ↓4 +227
Comments 158

Как начать писать микросервис на Spring Boot, чтобы потом не болела голова

Reading time 5 min
Views 11K

Привет! Меня зовут Женя, я Java-разработчик в Usetech, в последнее время много работаю с микросервисной архитектурой, и в этой статье хотела бы поделиться некоторыми моментами, на которые может быть полезно обратить внимание, когда вы пишете новый микросервис на Spring Boot.


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

Читать дальше →
Total votes 22: ↑17 and ↓5 +12
Comments 25

Фрактальная шизофрения

Reading time 21 min
Views 52K


Нет, я не болен. По крайней мере так говорит голос в моей голове. Я наркоман. Вот уже более 15 лет я сижу на игле. Употребляю много, жёстко, до обморочного состояния. Докатился до того, что в последнее время не стесняюсь ни друзей, ни жены, ни детей… Двоих детей! Не люблю бадяженый, люблю чистый, без примесей. За годы перепробовал многое, но в последнее время остановился в поисках. Забавно осознавать, что от одного и того же получаешь одновременно и боль, и радость. Мне бы в лечебку, я даже хочу, я даже знаю в какую. Знаете такие, где продолжаешь употреблять, но под присмотром?

Читать дальше →
Total votes 94: ↑86 and ↓8 +78
Comments 63

«Свет мой — зеркальце! — скажи, да дуал мой покажи...»: спроектируй один хороший фреймворк и получи второй в подарок

Reading time 3 min
Views 1.8K
Камни древних храмов умеют разговаривать, но мало кто им внемлет. Вселенная наполнена звуками, которые мы, люди, не слышим; цветами, которые не видим: иногда дело в объективных ограничениях тела и духа, но бывают также и субъективные причины — недостаток знаний и навыков или неумение ими пользоваться в повседневной практике. Яркий пример второго в мире программирования — сигнатуры функций. Дети ОО-мира в лучшем случае мыслят интерфейсами — это близко, но «не совсем то» и чем внимательнее становишься, тем больше это превращается в «совсем не то». А сигнатуры функций тоже умеют разговаривать.
Читать дальше →
Total votes 19: ↑15 and ↓4 +11
Comments 6

Как я создаю сервис рекомендаций сообществ ВКонтакте

Reading time 11 min
Views 6.7K
Лето заканчивалось, шёл особенно холодный август. Начинался мой 11 класс и я осознал, что сейчас последний шанс (спойлер: нет) на то, чтобы как-то улучшить свою профессиональную компетенцию. Уже несколько лет я усердно делал разные IT проекты, какие-то один, какие-то в коллективе. Но вот все сыны маминой подруги  уже делают что-то красивое. Возможно, бесполезное, но прекрасное внешне. Кто-то делает залипательную симуляцию частиц в виде гифок, кто-то погружается в машинное обучение и делает всякие стайл-трансферы. А я чем хуже? Я так же хочу!

Пример симуляции также есть под катом
Читать дальше →
Total votes 24: ↑21 and ↓3 +18
Comments 13

Современная MVI-архитектура на базе Kotlin

Reading time 8 min
Views 54K


За последние два года Android-разработчики в Badoo прошли длинный тернистый путь от MVP к совершенно иному подходу к архитектуре приложений. Мы с ANublo хотим поделиться переводом статьи нашего коллеги Zsolt Kocsi, описывающую проблемы, с которыми мы столкнулись, и их решение.

Это первая из нескольких статей, посвящённых разработке современной MVI-архитектуры на Kotlin.
Читать дальше →
Total votes 48: ↑46 and ↓2 +44
Comments 12

Мой любимый файл в кодовой базе Chromium

Reading time 6 min
Views 86K
Код Хромиума весьма обширен, там каждому найдётся что-то по вкусу. А я вот решил рассказать о своём любимом файле в нём (а у вас есть такой?). Этот файл отражает всё: боль, разочарование, надежду, упорство, силу воли, ответственность за чужие провалы и самопожертвование. Я иногда читаю его и плачу и проникаюсь пониманием, какая же огромная часть айсберга скрыта под водой. Это, в общем, даже не файл с кодом. Это файл с конфигом, описывающим баги видеокарт, которые Хромиуму приходится обходить для нормального отображения своих страниц на разных платформах. Вот он: https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json

О чём вообще идёт речь? Давайте вспомним, как работает браузер: вы набираете какой-то адрес в адресной строке, браузер загружает контент и отображает его. Чуть детальнее об этом рассказывает хорошая статья «What happens when you type google.com into your browser and press enter?» (и сразу несколько её переводов на Хабре). В ней одним из последних пунктов упоминается, мол, «а теперь, когда всё готово, отрисовываем картинку на экране». Ага, вот так берём и отрисовываем, конечно.
Читать дальше →
Total votes 186: ↑185 and ↓1 +184
Comments 179

Поле загрузки файлов, которое мы заслужили

Reading time 10 min
Views 121K
Все течет, все меняется, но только input[type=file] как портил нервы всем начинающим веб-разработчикам, так и продолжает это делать до сих пор. Вспомните себя N лет назад, когда вы только начинали постигать азы создания веб-сайтов. Молодой и неопытный, вы искренне удивлялись, когда кнопка выбора файла напрочь отказывалась менять цвет своего фона на ваш любимый персиковый. Именно в тот момент вы впервые столкнулись с этим несокрушимым айсбергом под названием «Загрузка файлов», который и по сей день продолжает «топить» начинающих веб-разработчиков.

На примере создания поля для загрузки файлов я покажу вам, как правильно прятать input[type=file], настраивать фокус на объекте, у которого фокуса быть не может, обрабатывать события Drag-and-Drop и отправлять файлы через AJAX. А также я познакомлю вас с парой браузерных багов и путями их обхода. Статья написана для новичков, но в некоторых моментах может быть полезна и занимательна даже для матерых разработчиков.
Читать дальше →
Total votes 40: ↑36 and ↓4 +32
Comments 19

Пришел, увидел, обобщил: погружаемся в Java Generics

Reading time 17 min
Views 305K
Java Generics — это одно из самых значительных изменений за всю историю языка Java. «Дженерики», доступные с Java 5, сделали использование Java Collection Framework проще, удобнее и безопаснее. Ошибки, связанные с некорректным использованием типов, теперь обнаруживаются на этапе компиляции. Да и сам язык Java стал еще безопаснее. Несмотря на кажущуюся простоту обобщенных типов, многие разработчики сталкиваются с трудностями при их использовании. В этом посте я расскажу об особенностях работы с Java Generics, чтобы этих трудностей у вас было поменьше. Пригодится, если вы не гуру в дженериках, и поможет избежать много трудностей при погружении в тему.


Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Comments 46

Разбор основных концепций параллелизма

Reading time 17 min
Views 62K
Всем кофе!

Завтра у нас плавненько стартует практически юбилейный поток курс «Разработчик Java» — уже шестой по счёту начиная с апреля прошлого года. А это значит, что мы снова подобрали, перевели интереснейший материал, которым делимся с вами.

Поехали!

Эта памятка поможет Java-разработчикам, работающим с многопоточными программами, понять основные концепции параллелизма и способы их применения. Вы ознакомьтесь с ключевыми аспектами языка Java со ссылками на стандартную библиотеку.

РАЗДЕЛ 1

Вступление

С момента своего создания Java поддерживает ключевые концепции параллелизма, такие как потоки и блокировки. Эта памятка поможет Java-разработчикам, работающим с многопоточными программами, понять основные концепции параллелизма и способы их применения.

РАЗДЕЛ 2

Концепции

Концепция Описание
Atomicity (атомарность) Атомарная операция — это операция, которая выполняется полностью или не выполняется совсем, частичное выполнение невозможно.
Visibility (видимость) Условия, при которых один поток видит изменения, сделанные другим потоком

Таблица 1: Концепции параллелизма

Читать дальше →
Total votes 17: ↑15 and ↓2 +13
Comments 12

Чего из Rust мне не хватает в C

Reading time 7 min
Views 23K
Об авторе. Федерико Мена-Кинтеро — мексиканский программист, один из основателей проекта GNOME.

Librsvg достиг переломного момента: внезапно выясняется, что легче портировать некоторые основные части из C на Rust, чем просто добавить аксессоры. Кроме того, всё больше «мяса» библиотеки сейчас написано на Rust.

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

Элегия C


Я влюбился в C около 24 лет назад. Выучил азы по второму изданию “The C Programming Language by K&R” в переводе на испанский. До этого я использовал достаточно низкоуровневый Turbo Pascal, с указателями и ручным распределением памяти, так что C казался приятным и придающим сил.

K&R — отличная книга для выработки стиля и лаконичности. Эта маленькая книжка даже научит вас реализовать простой malloc()/free(), что поистине просветляет. Даже низкоуровневые конструкции можно вставлять в самом языке!

В последующие годы я хорошо освоил C. Это небольшой язык с маленькой стандартной библиотекой. Вероятно, идеальный язык для реализации ядра Unix на 20 000 строк кода или около того.
Читать дальше →
Total votes 80: ↑76 and ↓4 +72
Comments 178

Зачем солить HTTP-коллбэки

Reading time 2 min
Views 9.9K

Некоторые облачные сервисы хотят двустороннего общения для нотификаций: рассказать вашему backend о завершении долгой операции, показать случившиеся ошибки, предупредить о низком балансе платных услуг — вся вот эта история. И если для общения с сервисами мы привыкли использовать HTTP-запросы, то в обратную сторону есть много вариантов: от проверок статуса раз в десять минут и до постоянного WebSocket или HTTP/2 подключения с нотификациями в реальном времени. Самый простой способ это HTTP callbacks. Вы задаете в админке URL своего бэкенда, а облачный сервис в случае интересных событий делает HTTP-запрос к этому URL с дополнительный информацией в теле запроса. Обратная сторона простоты это безопасность. Как убедиться, что запрос сделал именно облачный сервис, а не злобный хакер Вася? Несколько способов под катом.
Читать дальше →
Total votes 31: ↑25 and ↓6 +19
Comments 31

Безопасность в веб-разработке: чек-лист

Reading time 5 min
Views 19K
Светлана Шаповалова, редактор «Нетологии», адаптировала статью Michael O'Brien, в которой он составил чек-лист для веб-разработчиков, предпочитающих разрабатывать не только удобные, но и безопасные приложения.

Разработка безопасных и надежных облачных веб-приложений — очень, очень сложное дело. Если вы думаете иначе, вы либо не от мира сего, либо жизнь вас еще не проучила.

Если вы уже заразились идеей «минимально жизнеспособного продукта» (англ. MVP — minimum viable product, прим. перев.) и считаете, что за месяц можно создать одновременно полезный и безопасный продукт — подумайте дважды, прежде чем выпускать его. Просмотрев чек-лист, вы поймете, что оставляете немало уязвимостей.


Читать дальше →
Total votes 25: ↑20 and ↓5 +15
Comments 7

Реверс-инжиниринг игры Lost Vikings

Reading time 31 min
Views 25K
После интересной обратной разработки игрового движка Comprehend (см. Recomprehend) я подбирал новый проект для реверс-инжиниринга игры под DOS. За долгие годы разные люди реверсировали множество старых популярных игр и опубликовали для них спецификации и инструменты. Например, на сайте shikadi.net есть куча информации об играх, в которые я играл в детстве.

Я обнаружил, что для реверс-инжиниринга игры The Lost Vikings компании Blizzard (тогда она называлась Silicon and Synapse), похоже, не предпринималось никаких серьёзных попыток. Игра была выпущена в 1993 году, на закате эры DOS, и очень нравилась мне в юности. The Lost Vikings — это головоломка-платформер, в которой игрок управляет тремя викингами, каждый из которых имеет собственные умения. Викингам нужно объединить свои силы для решения загадок и прохождения уровней с различной тематикой: космический корабль, доисторический мир, Древний Египет. На изображении ниже показан первый уровень игры (источник: Strategy Wiki):

image

Казалось, что эту игру разобрать будет довольно просто. Уровни основаны на тайловых картах и содержат простые загадки: кнопки, включающие и отключающие объекты, передвижные ящики и поднимающий предметы кран. И на самом деле, бóльшая часть проекта по обратной разработке была достаточно прямолинейной. У игры есть один пакетный файл данных, содержащий сжатые блоки файлов. Блоки кодируют различные ресурсы игры, такие как спрайты, карты, звуки и т.д. Я написал несколько утилит, которые можно использовать для просмотра ресурсов игры: The Lost Vikings Tools.
Total votes 58: ↑58 and ↓0 +58
Comments 20

Information

Rating
Does not participate
Location
Вильнюс, Литва, Литва
Date of birth
Registered
Activity