Как стать автором
Обновить
23
0
Дмитрий Чернов @cher-nov

в экономике, так сказать, необходим

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

Век поиска кратчайшего решения задачи о кратчайшем пути

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

TL;DR Очень подробный разбор алгоритмов решения задачи о кратчайшем пути от классики до двунаправленного А* и ALT с кодом и примерами на OSM

Люди пытались найти более быстрые способы передвижения на протяжении всей своей истории. Появление качественной дорожной системы в римской империи в своё время привело к её расцвету, но со временем выяснилось, что и в продуманных дорожных системах бывают забавные изъяны, как например в небезызвестной задаче о кёнигсбергских мостах, считающейся отправной точкой возникновения теории графов. Неудивительно и то, что с развитием вычислительной техники логистические задачи стали одними из первых, над которыми трудились первопроходцы компьютерных наук. Задача о кратчайшем пути -- одна из них, звучит достаточно просто: есть несколько городов и дорог, соединяющих пару городов между собой, мы хотим попасть из города А в город Б пройдя при этом минимальное расстояние. Первый системный подход к этой задаче был описан в работе Эгервари в 1931г., спустя 25 лет Эдсгер Дейкстра придумал алгоритм, который сейчас является частью любого уважающего себя базового курса алгоритмов на графах. На нём же, будем честны, заканчиваются знания о кратчайших путях у большинства профессиональных разработчиков, ибо сценариев, где реализации с википедии/stackoverflow будет не хватать, крайне мало.

Может показаться, что на самом деле просто не было существенного прогресса с 60х годов, так как Дейкстра предоставил почти асимптотически оптимальный алгоритм решения задачи. На самом деле нет, прогресс был и придумали много чего интересного, хоть и действительно с того времени фокус сместился на другие задачи. Приглашаю под кат если интересно узнать что такого напридумывали, что используется в современных логистических системах, почему меня огорчает отсутствие учёта флага единства в HOMM3 при расчёте пути, ну и наконец, что за мужики на картинке выше рядом с Дейкстрой?

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

Основные принципы разработки (SOLID, KISS и т. д.)

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

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

В общем вас ждет теория, ещё теория, словесные примеры и даже примеры кода (он на С++, но написан понятно).

А еще это полезно знать на собесах :-)

Читать далее
Всего голосов 16: ↑13 и ↓3+15
Комментарии10

А в чем проблема работать с файлами?

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

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

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

Кто участвует в процессе записи

Ошибки, которые могут произойти

Что от нас зависит, а что нет

И самое главное - как это этого защититься

Читать далее
Всего голосов 141: ↑140 и ↓1+169
Комментарии23

Самая нужная программа на свете

Время на прочтение20 мин
Количество просмотров167K
image
Какими программами постоянно пользуются люди? Если подумать над этим вопросом, то окажется, что список этот не такой уж большой. К постоянно используемым программам можно отнести: саму операционную систему, файловый менеджер, текстовый редактор, браузер, мессенджер. Это именно тот базовый набор, которым пользуется на компьютере практически каждый человек. Требования к таким программам должны быть высокими: безотказная работа, быстрое выполнение всех функций, понятный и удобный интерфейс.

Можно сказать, что вышеперечисленный набор программ — это самые нужные программы, которыми пользуется человек в цифровую эпоху. Этот список покрывает все базовые потребности человека-пользователя. Или не все? Есть ли еще одна базовая потребность, которая не учтена в вышеприведенном списке самых необходимых программ? Является ли эта потребность самой важной из тех, что должен автоматизировать компьютер? Для меня такая потребность есть, но в списке самых используемых программ ей места не нашлось. Что же это за потребность?
Ранее компьютер считался устройством для проведения вычислений...
Всего голосов 115: ↑111 и ↓4+107
Комментарии303

Прости, Rosetta, мы должны расстаться

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

С релизом Xcode 14.3 Apple убирает поддержку Rosetta и почти прямым текстом говорит разработчикам, что откладывать адаптацию своих проектов под Apple Silicon дальше уже некуда. Сегодня я поделюсь историей про то, с какими сложностями мы столкнулись в нашем основном приложении Циан, и какое стороннее решение помогло нам избавиться от Rosetta.

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

Книги, которые нас выбирают

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

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

Я не планировал продолжать эту тему, но сейчас вижу, что кое в чем, статью надо дополнить. Это дополнение не будет повторять или расширять статью очередными мыслями и наблюдениями; все это в ней уже есть и добавить мне нечего. Просто, читая комментарии, я понял, что об одной детали я упомянул, но толком не рассказал. Из‑за чего у части комментаторов возникли сомнения в сегодняшней ценности книг, доступных мне в то время, когда я начинал карьеру программиста. Мне кажется, это не очень справедливо и хотя я, бесспорно, не объективен, но, тем не менее, решил немного об этом рассказать.

Я расскажу о тех книгах, что были мне доступны в 1987–1993 гг., т. е. тогда, когда я совмещал работу инженера с программированием. Конечно, я упомяну только те книги, что мне действительно помогли; полный список литературы слишком обширен и упоминание их всех больше походило бы библиотечный каталог, чего я делать не намерен. Условно эти книги можно отнести к одной из нижеследующих категорий. Итак — вот мой «золотой фонд».

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

Основные типы распределений вероятностей в примерах

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

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

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

Советские и постсоветские НИИ и КБ как конвейер уничтожения ресурсов развития

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

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

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

В 2008 году я устроился ведущим инженером в НИИ Физических измерений, г. Пенза.

Для меня работа в этом НИИ была более чем знакома, я там работал с середины 80-х по середину 90-х. НИИФИ с момента своего создания было сосредоточено на создании датчиков и специализированной измерительной аппаратуры для космической отрасли.

Начало 2000-х характеризовалось тем, что цены на нефть поползли вверх, в государстве появились какие-то деньги, но одновременно стала происходить череда ярких и красочных неудач с нашими ракетами. И вопрос – а что же там происходит с нашими ракетами – создал на НИИФИ фокус ощутимого финансового потока.

Поскольку в этой организации работает куча людей, связанных между собой родственными связями, то, помимо официального молчания по всем щепетильным вопросам, организация была пронизана слухами, что у нас общий бюджет НИИ достиг сначала 0,7 (примерно 2008–2009), далее 0,9; потом 1,3; 2,1 и 2,7 (2012) миллиарда рублей.

Здесь можно задаться очень простым вопросом – а вот кто будет делать интеллектуальное наполнение проектов под эти в общем-то огромные финансовые потоки.

Читать далее
Всего голосов 250: ↑220 и ↓30+247
Комментарии512

Сотрудникам нужны личные кабинеты

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

Во времена «до» мы просто каждый день ходили в офис. Это даже не обсуждалось: «работа из дома» казалась нереализуемой на практике. Чтобы «пойти на работу», нужно было выйти из дома. А потом случилась пандемия.

Теперь, когда она закончилась, даже трёхдневка в офисе вызывает так много споров, что дело доходит до вмешательства профсоюзов
Читать дальше →
Всего голосов 73: ↑70 и ↓3+97
Комментарии119

Всё ещё храните музыку в формате Hi-Res? Тогда мы идем к вам

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

Люди делятся на 2 лагеря: те, кто слышит разницу между lossless и lossy, и те, кто нет. Формат аудио с потерей качества — это интересная тема, но сегодня мы поговорим о звуке в высоком разрешении — это PCM 24/96 и выше, а также DSD во всех его проявлениях. Я не буду рассказывать теорию, чем отличаются эти форматы, такие статьи легко гуглятся. Лишь вскользь упомяну о теореме Котельникова (Найквиста — Шеннона), которая гласит следующее: «Для того, чтобы оцифровать аналоговый сигнал, а потом его БЕЗ ПОТЕРЬ восстановить, необходимо и ДОСТАТОЧНО, чтобы частота дискретизации была в 2 раза СТРОГО больше максимальной частоты полезного сигнала».

Читать далее
Всего голосов 152: ↑148 и ↓4+180
Комментарии449

Советский фрикинг. Были ли телефонные фрикеры в СССР?

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

В жизни порой случаются удивительные совпадения. Прошлым летом я расслаблялся с коктейлем под пальмой на берегу тёплого моря, наслаждаясь книгой «Ghost in the Wires», когда в новостях сообщили о внезапной смерти её автора — Кевина Митника. И я задумался: а существовали ли во времена, о которых Кевин рассказывал в своей книге, телефонные фрикеры по другую сторону океана — в Советском Союзе?
Читать дальше →
Всего голосов 137: ↑136 и ↓1+183
Комментарии119

Civilization Сида Мейера: баг «ядерного Ганди» в том, что его не было

Время на прочтение20 мин
Количество просмотров29K
Хочу поделиться с вами несколькими малоизвестными историями про серию игр Civilization, которые рассказал Сид Мейер в автобиографической книге «Жизнь в мире компьютерных игр».

Если бы я попыталась просто привести все самые интересные фрагменты книги, то мне пришлось бы просто процитировать около 85% текста. Так что я поделюсь только фактами, связанными с самой знаменитой игрой Сида Мейера. Под катом несколько фактов из истории создания Civilization, ошибки, фичи, от которых отказались в процессе создания игры, появление читов и объяснение мифа про «ядерного Ганди» от Сида Мейера.


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

Когда начинает работать закон больших чисел

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

Большие числа != большим числам.

Число 100 большое? Зависит от ситуации. Сравниваем ли мы его с 0,001, или с 100000? Как и многое в жизни, понятие «большой» относительно.

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

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

Как калькуляторы вычисляют синус?

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

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

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

Читать далее
Всего голосов 77: ↑75 и ↓2+95
Комментарии52

Почему Facebook* не использует Git

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

Я работаю над созданием Graphite, источником вдохновения для которого стал внутренний инструментарий Facebook. Когда я решил создать стартап с друзьями, то никогда раньше не слышал о Mercurial, хотя всегда страстно любил инструменты разработчика. Мой предыдущий опыт разработки включал в себя личные проекты, домашнюю работу в колледже, разработку для iOS в Google и развитие инфраструктуры в Airbnb. На протяжении всей моей карьеры использование git было таким же естественным, как воздух. Он настолько популярен, что лично я считал его единственным подходящим инструментом для создания изменений в коде и управления ими.

Забавно, что специалист по Mercurial Грегори Gregory Szorc работал рядом со мной в Airbnb, хотя я знал его только как приятного коллегу, но не представлял, что он контрибьютор.

В 2021 году мои коллеги по команде Томас и Ник раскрыли мне глаза. Они пришли из Facebook и, к моему удивлению, едва знали Git. Зато они имели глубокое понимание паттернов Mercurial и рабочего процесса Facebook на основе «многослойных diff» (stacked diff). Со временем они убедили меня в полезности этого паттерна и мы развернули направление развития компании, чтобы реализовать многослойные diff для разработчиков GitHub.

Но пост посвящён не нашему стартапу. Он о важном вопросе, не дававшем мне покоя последние три года. Почему фейсбукеры не пользуются Git? Зачем они выбрали Mercurial и создали на его основе собственные рабочие процессы? Я знаю что Google не пользуется Git, но это логично, культура разработки Google возникла на пять лет раньше Git. Facebook же был основан примерно в то же время, что и создан Git, около 2004 года, и ко времени, когда Facebook начал серьёзно выбирать инструментарий для управления исходниками, Git был старше и популярнее Mercurial. Так почему же Facebook не использует Git?

Читать далее
Всего голосов 63: ↑55 и ↓8+62
Комментарии299

Железные люди Хабра: лига лучших железячных статей

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

Внимание! Конкурс «Технотекст» открывает железную номинацию. 

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

Читать далее
Всего голосов 42: ↑39 и ↓3+62
Комментарии16

Я уже 14 лет в отрасли, но программировать по-прежнему сложно

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

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

Кроме вакансий для стажёров я иногда случайно нажимал на объявления о вакансиях «сеньор-разработчика». Помню, больше всего меня поражало то, что первой строкой шло требование определённого количества лет работы: «Эта должность требует 5+ лет опыта».

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

Время летело, не успел моргнуть глазом, как прошло больше десятка лет. Сегодня я с гордостью могу сказать, что работаю программистом уже 14 лет. Спустя годы боёв на фронтах разработки ПО я осознал, что многие её аспекты сильно отличаются от того, что я представлял на старших курсах, а именно:

С опытом программирование не становится намного проще, о «проще пареной репы» можно только мечтать.

Написание кода для множества «больших проектов» — это не только неинтересное, но и опасное занятие, гораздо менее увлекательное, чем решение алгоритмических задач в LeetCode.

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

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

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

Итак, вы думаете, что знаете Git? Часть третья: реально большие репозитории

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


Автор оригинала Скотт Чакон — сооснователь GitHub и основатель нового клиента GitButler. Этот клиент ставит во главу угла рабочий процесс и удобство разработки, в том числе код-ревью, и не является просто очередной обёрткой над CLI git.

Вам хочется использовать ванильный Git, чтобы управлять репозиторием с объёмом 300 ГБ в 3,5 млн файлов, которые без проблем получают пуш каждые 20 секунд от 4000 разработчиков? Тогда читайте дальше!


Вот агенда блога — наша блогенда:


Читать дальше →
Всего голосов 30: ↑28 и ↓2+36
Комментарии30

Меры сложности: колмогоровская, вычислительная и эффективная сложность, логическая и термодинамическая глубина

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

Это продолжение статьи «Информация об информации», где я показал, что информация – физическая величина, не имеющая ничего общего с духом, сознанием, «информационным полем» и другими эзотерическими понятиями. Но среди философов и мистиков бытует мнение, что физическая и метафизическая информация – не одно и то же. Дескать теория информации изучает только цифровые данные, а информация как таковая – это другое. Ведь об информации можно говорить только при наличии источника и приёмника информации, а значит, её объективно не существует без субъекта, который будет её воспринимать и интерпретировать. Кроме того, ни количество информации по Хартли, ни количество энтропии по Шеннону не позволяют оценить смысл сообщения. Но значит ли это, что смысл, глубину или сложность информации нельзя измерить количественно и объективно? Пожалуй, пришло время разобраться, что такое сложность, как её можно измерить, связана ли она с упорядоченностью системы и есть ли у неё объективные критерии. Также мы выясним, насколько наши сообщения универсальны и можно ли прочитать их вне биологического или культурного контекста.

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

Люди не понимают ООП

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

«ООП для меня означает лишь обмен сообщениями, локальные ограничения и защиту, сокрытие состояния процесса и крайне позднее привязывание», — Алан Кэй (человек, придумавший термин «объектно-ориентированное программирование»)1

Похоже, многим не нравится объектно-ориентированное программирование. Первое, что приходит в голову, когда слышишь эту трёхбуквенную аббревиатуру — это пример с автомобилем, наследование, геттеры, сеттеры и ObjectFactoryFactorySingleton.

Мне это всегда казалось довольно странным. Мне не только нравится ООП, я ещё и считаю, что часто это лучший/наиболее очевидный способ моделирования задачи. И ниже я расскажу, почему.
Читать дальше →
Всего голосов 126: ↑119 и ↓7+140
Комментарии461

Информация

В рейтинге
Не участвует
Откуда
Владивосток, Приморский край, Россия
Зарегистрирован
Активность