Как стать автором
Обновить
0
0

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

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

地形图非线性保密处理算法, или что не так с картами Китая на спутниковых снимках

Время на прочтение8 мин
Количество просмотров121K

Китай — это не просто другая страна. Это другой мир. Необязательно ехать туда, чтобы убедиться в этом. Иногда достаточно зайти в интернет. Например, использовать Google Maps или другие сервисы, чтобы открыть карту Китая. И тогда можно заметить, что расположение объектов (дорог, рек, достопримечательностей и многого другого) на карте и на спутниковых снимках, мягко говоря, не совпадает.

В этой статье хотелось бы рассказать, почему происходит такая путаница и что из этого следует.
Читать дальше →
Всего голосов 182: ↑178 и ↓4+216
Комментарии184

Вы за это заплатите! Цена Чистой Архитектуры. Часть 2

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров8.7K

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

Если не читали первую часть, настоятельно рекомендую это сделать, чтобы оставаться в контексте.

Итак, продолжим.

Читать далее
Всего голосов 33: ↑33 и ↓0+33
Комментарии13

Вы за это заплатите! Цена Чистой Архитектуры. Часть 1

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров27K

Всем привет, меня зовут Артемий, я работаю старшим Android-разработчиком в команде пользовательского профиля в RuStore. Мой опыт в индустрии уже 8 лет. За это время я успел поработать в разных проектах и компаниях. У меня был опыт работы в проекте, в котором было свыше 300 модулей и больше 60 Android-разработчиков. Такие условия заставляют задуматься о масштабируемости на принципиально ином уровне.

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

Читать далее
Всего голосов 58: ↑55 и ↓3+58
Комментарии65

Не ищите нейросеть — у вас в команде она уже есть

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров10K

Откровенно говоря, я не думал, что компании ухватятся за нейросети: во-первых, сразу рассыпается стратегия клиентоцентричности, во-вторых, доверие к автоматизации кажется до предела странным. Ну то есть с 70-х годов средства автоматизации в бизнесе неизбежно вызывали подозрение, а тут внезапно нечто располагает к себе так, что некоторые готовы проводить сокращения в маркетинге, продажах, да даже в разработке и тестировании. Кажется, что за нейросетью маячат продуктивность, экономия, эффективность и всяческий интенсивный рост. А на самом деле, с нами случилось то, что повторялось в истории не раз и не два. Добро пожаловать в очередной карго-культ!

Читать далее
Всего голосов 25: ↑18 и ↓7+23
Комментарии23

Как мне захотелось систематизировать виды тестирования

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров34K

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

Читать далее
Всего голосов 33: ↑33 и ↓0+33
Комментарии29

Есть проблемы гораздо сложнее, чем NP-Complete

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров10K


Люди часто сравнивают P и NP в таком духе, что проблемы P простые, а NP — сложные. Но это чрезмерное упрощение. На самом деле проблемы могут быть намного, намного сложнее, чем NP.

В этом смысле можно вспомнить интеллектуально-фантастический триллер Travelling Salesman (Коммивояжёр, 2012) о четырёх математиках, нанятых правительством США для решения самой сложной проблемы в истории информатики — равенства классов сложности P и NP (P versus NP problem). И им это удалось. Чиновник министерства обороны США предлагает за их алгоритм вознаграждение $10 млн. Но сами математики слишком хорошо понимают, какие разрушительные последствия принесёт в мир их открытие. Один из лучших фильмов про математику в истории кинематографа…
Читать дальше →
Всего голосов 35: ↑31 и ↓4+42
Комментарии3

WPF, UWP, WinUI, MAUI, Windows App SDK

Время на прочтение6 мин
Количество просмотров26K

Человека далёкого от клиентской разработки на Windows все эти термины определённо путают. И даже среди MS-сообщества регулярно возникают споры жив UWP или мёртв. Причем главный вопрос в этом споре - а что же такое UWP?

Вот уже года 3 Microsoft проводит "рефакторинг" в своём "королевстве".  Несколько устав видеть одни и те же споры в твиттере, и оставлять одни и те же комментарии на хабре, я решил расписать как же многочисленные UI-фреймворки MS соотносятся между собой. Кто из них больше мёртв. Возможно, кому-то это поможет в выборе технологии для будущего проекта.

Читать далее
Всего голосов 23: ↑22 и ↓1+30
Комментарии40

Построение графа зависимостей Objective-C файлов

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.6K

​​В ряде случаев приложение, написанное на языке Objective-C, для улучшения функционирования и расширения его возможностей, приходится переписывать на Swift. Осуществление перевода на язык Swift сразу всего кода не всегда рационально, гораздо разумным представляется переписывание  класса за классом. При этом сборка становится гибридной и соответственно необходимо делать так, чтобы все объявления были видимы в коде на обоих языках. 

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

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии4

Trunk Based Development — кто такой и зачем нужен

Время на прочтение5 мин
Количество просмотров49K

Привет! Меня зовут Павел Лакосников, я тимлид команды бэкенд-инженеров в Авито. Сегодня расскажу про свой любимый подход к разработке Trunk Base Development, сравню его с другими моделями ветвления и подсвечу его достоинства и нюансы.

Краткий обзор трёх моделей ветвления: Central Workflow, Git Flow, Trunk Based Flow, с акцентом на моего фаворита — Trunk Based Flow.

Читать далее
Всего голосов 27: ↑22 и ↓5+21
Комментарии44

WebAssembly: Docker без контейнеров

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров15K

«Если бы WASM+WASI существовали в 2008 году, нам бы не пришлось создавать Docker. WebAssembly на сервере — будущее компьютерных технологий», считает Соломон Хайкс, соучредитель корпорации Docker и автор Docker Open Source Initiative.

Сравнительно недавно Docker объявил о поддержке WebAssembly на базе WasmEdge. А мы перевели фундаментальный, но практичный материал о том, как пользоваться этой технологией в экосистеме Docker и чем Wasm-контейнер отличается от классического. 

Читать далее
Всего голосов 40: ↑38 и ↓2+49
Комментарии35

Алгоритмы балансировки нагрузок

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров39K

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

В этом посте мы рассмотрим способы, которыми один балансировщик нагрузок может распределять HTTP-запросы на множество серверов. Мы начнём снизу и проделаем весь путь вверх до современных алгоритмов балансировки нагрузок.
Читать дальше →
Всего голосов 88: ↑87 и ↓1+105
Комментарии16

Рельсы веб-интеграции. REST и SOAP

Время на прочтение5 мин
Количество просмотров76K

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

В данной статье мы поговорим о веб-сервисах. Чем они отличаются от прочих способов и какие они бывают.

Читать далее
Всего голосов 5: ↑2 и ↓3+1
Комментарии4

Дайте крудошлепа

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров114K

Я устроился в небольшую компанию, которая сделал круд‑приложуху на 20 таблиц типа «заметки» и активно ее продавала госорганам за невменяемый бабос.

У нас был 3(три) Т‑Р-И статуса юзера. Anonym → Logined → Phone_Confirmed. Молодой талант до меня увидел в этом граф, и написал класс на 200+ строк, реализующий алгоритм Флойда‑Уоршелла, прикрутил стейт‑машину и не найдя интересных задач, c блеском прошел собес в Яндекс и свалил.

Меня наняли сеньором, и я каюсь ничерта не понял, алгоритм прекрасно работал на первой ступени, на второй давал сбои, тоскливо погуглил этот алгоритм, стер все к черту и написал: if(status==Logined & phone!=null){status=Phone_Confirmed}.

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

Это было вступление.

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

Потому что, только я могу решить задачку, которую вы уже 10 лет решить не можете, когда прилетает пуш‑уведомление или смс и в твоем всплывающем окне написано:

«Ваш шестизначный пароль доступа в наше приложение: 123...»

Не согласен! ...
Всего голосов 395: ↑332 и ↓63+339
Комментарии730

Как подключить платежную систему с Payments к Telegram

Время на прочтение6 мин
Количество просмотров40K

Telegram-боты позволяют решать самые разные задачи. С помощью них можно автоматизировать рабочие процессы. В статье показываем, как разработать бота для приема платежей и развернуть его на облачном сервере.
Читать дальше →
Всего голосов 41: ↑40 и ↓1+51
Комментарии8

Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3

Время на прочтение10 мин
Количество просмотров126K


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

Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Читать дальше →
Всего голосов 35: ↑33 и ↓2+37
Комментарии40

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров12K

Тем, кто только начинает свой путь в разработке, сейчас сложно. Помимо малого количества вакансий ещё и везде реклама курсов, обещающих работу мидла через 6 недель обучения (а ведь когда-то я думал, что никто не переплюнет знаменитое «С++ за 21 день»).

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

Для этого предлагаю глянуть на типичные задачи разработчика под Android. Статья поделена на две части — в первой я описываю работу в команде и какие навыки для этого нужны, во второй части расскажу, что нужно для создания новой функциональности в приложении или для исправления старого. Иначе говоря, первая часть про людей, вторая — про код.

Читать далее
Всего голосов 12: ↑10 и ↓2+11
Комментарии12

Принципы для разработки: KISS, DRY, YAGNI, BDUF, SOLID, APO и бритва Оккама

Время на прочтение8 мин
Количество просмотров284K
image

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

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

Последовательное применение этих принципов упростит ваш переход от миддла к сеньору. Вы можете обнаружить, что некоторые (вероятно) вы применяете интуитивно.

Принципов много. Мы остановимся на семи самых важных. Их использование поможет вам в развитии и позволит стать лучшим программистом.

1. YAGNI

You Aren’t Gonna Need It / Вам это не понадобится

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

Этот принцип применим при рефакторинге. Если вы занимаетесь рефакторингом метода, класса или файла, не бойтесь удалять лишние методы. Даже если раньше они были полезны – теперь они не нужны.

Может наступить день, когда они снова понадобятся – тогда вы сможете воспользоваться git-репозиторием, чтобы воскресить их из мертвых.
Читать дальше →
Всего голосов 15: ↑12 и ↓3+16
Комментарии10

Описание алгоритмов сортировки и сравнение их производительности

Время на прочтение24 мин
Количество просмотров691K

Вступление


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

Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.
Читать дальше →
Всего голосов 80: ↑76 и ↓4+72
Комментарии55

PPTP vs L2TP vs OpenVPN vs SSTP

Время на прочтение6 мин
Количество просмотров450K
Недавно я искал информацию об отличиях существующих VPN-технологий и наткнулся на эту статью. Здесь вкратце описаны преимущества и недостатки основных VPN, очень легко и доступно. Предлагаю сообществу перевод статьи.

VPN-провайдеры обычно предлагают на выбор несколько типов подключения, иногда как часть различных тарифных планов, а иногда в составе единого тарифного плана. Цель этой статьи – провести обзор доступных вариантов VPN и помочь понять основы используемых технологий.

Заметка про длину ключа шифрования


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

Сейчас почти невозможно найти VPN-шифрование с использованием ключа длиной менее 128 бит и все сложнее найти 256-битное шифрование в предлагаемых OpenVPN-решениях, ключи которых бывают даже 2048 бит. Но что означают эти цифры на практике, 256-битное шифрование действительно более безопасное, чем 128-битное?
Читать дальше →
Всего голосов 51: ↑38 и ↓13+25
Комментарии98

Символы Unicode: о чём должен знать каждый разработчик

Время на прочтение7 мин
Количество просмотров409K


Если вы пишете международное приложение, использующее несколько языков, то вам нужно кое-что знать о кодировке. Она отвечает за то, как текст отображается на экране. Я вкратце расскажу об истории кодировки и о её стандартизации, а затем мы поговорим о её использовании. Затронем немного и теорию информатики.
Читать дальше →
Всего голосов 27: ↑19 и ↓8+25
Комментарии51

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность