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

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Дао программиста

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

По долгу работы мне приходилась искать людей в штат и просто на выполнение отдельных задач. Могу сказать, что 90% кандидатов отсеивается после беглого просмотра их резюме, даже если оно содержит нужные ключевые слова (у меня, не экстраполирую свои методы на весь рынок наёмного труда).

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

Читать далее
Всего голосов 16: ↑2 и ↓14 -12
Комментарии 7

Новости

Кодирование слова по алгоритму А.С. Пушкина в Micro QR Code версии М2

Уровень сложности Сложный
Время на прочтение 19 мин
Количество просмотров 656

Задание: необходимо создать кодовое слово (сокращенный вариант собственной фамилии и инициалов) по алгоритму А.С. Пушкина. Затем создать для полученного сокращения Micro QR Code вер. М2. Данный режим невозможно прочитать стандартными ресурсами мобильных устройств, производимых GAFAM (как оказалось, свободно распространяемые библиотеки просто страшно глючат, поэтому Ассоциация отказалась и от этого режима)

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

Кодирование числа в Micro QR Code версии М2 (не по ГОСТ)

Уровень сложности Сложный
Время на прочтение 17 мин
Количество просмотров 418

Задание: необходимо создать кодовое слово, состоящее из 8 цифр (на примере – 01234567) на основе алгоритма, частично приведенного в ГОСТ Р ИСО/МЭК 18004-2015 (п. 7.4.3, пример 2). Затем создать для полученного кода Micro QR Code вер. М2. Данный режим невозможно прочитать стандартными ресурсами мобильных устройств, производимых GAFAM (как оказалось, свободно распространяемые библиотеки просто страшно глючат, поэтому ассоциация отказалась от этого режима)

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

Изучение мидлварей в Laravel 11

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

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

Я начинаю новый проект, и поскольку дата выхода очень близка, решил взглянуть на то что изменится в новом крупном обновлении. Помню как пол года назад прочитал в Laravel News статью о том, что Http Kernel уходит в небытие, и не придал этому особого значения.

Когда я создал проект с помощью команды laravel new project --dev, я был очень удивлён тем, насколько уменьшился размер проекта. Было очень удивительно видеть пустую папку config (можно опубликовать файлы конфигурации при помощи команды php artisan config:publish)!

И, конечно же, там нет Http Kernel. Итак... как же добавить или изменить мидлвари? До Laravel 11 ядро Http Kernel, располагающееся по пути app/Http/Kernel.php,было местом хранения всей конфигурации для мидлварей. Также до Laravel 11 не было необходимости трогать руками файл bootstrap/app.php, если только Вы не использовали фреймворк Lumen. Однако в новой версии его нужно...

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

Истории

Обратная нормализация (денормализация)

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

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

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

Но, как и все в этом мире, нормализация не идеальна. Иногда она может привести к чрезмерной комплексности и снижению производительности запросов. И здесь бывает полеза обратная нормализация. Если нормализация - это упорядочивание, то обратная нормализация - это некоторое "ослабление" правил для достижения определенных целей. В БД это означает объединение таблиц, добавление избыточных данных и так далее, чтобы ускорить чтение данных и упростить запросы, даже если это идет в ущерб некоторой "чистоте" схемы.

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

Range Loop в Go: подводные камни, как с ними бороться и что нас ждёт в версии 1.22

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

Привет, Хабр! Меня зовут Рафаэль Мустафин, я ментор на курсе «Go-разработчик» в Яндекс Практикуме. Эта статья посвящена нюансам цикла range в Go. Мы рассмотрим распространённые подводные камни, лучшие практики и интересные изменения, ожидаемые в Go 1.22.

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

Зачем? И весь ужас удара бритвой по Оккаму

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

Самое страшное слово для инноватора или очень уж упёртого студента, который проходит практику у вас в компании: «Зачем?»

Знаете почему? Потому что в 80% случаев ответа вам на этот вопрос не дадут. Давайте разберёмся, причём здесь Оккам и что ему от нас нужно.

Давай, приступай
Всего голосов 121: ↑117 и ↓4 +113
Комментарии 106

Собираем автономную игру на C# в 2 килобайтах

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

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

В наши дни дисковое пространство стало настолько дешёвым, что люди отказались от оптимизации по размеру.

Размер важен только при передаче: если вы передаёте программу по проводам, мегабайты равны секундам. По быстрому соединению на 100 Мбит в лучшем случае можно передать 12 МБ в секунду. Если на другом конце провода находится человек, ожидающий завершения скачивания, то разница между пятью и одной секундой может существенно повлиять на его ощущения.

Человек может зависеть от времени передачи как напрямую (пользователь, скачивающий программу по сети), так и косвенно (serverless-сервис, отвечающий на веб-запрос).

Люди обычно воспринимают всё, что длится меньше 0,1 секунды, как мгновенное, 3 секунды — это примерно тот предел, после которого прерывается состояние потока пользователя; а уж 10 секунд удержать внимание пользователя очень сложно.

Хотя уменьшение сегодня уже необязательно, оно всё равно лучше.

Эта статья задумывалась как эксперимент, позволяющий выяснить, каким может быть минимальный размер полезного автономного исполняемого файла C#. Могут ли приложения на C# достичь размеров, при которых пользователи будут ощущать их скачивание как мгновенное? Позволит ли это использовать C# там, где он не используется сейчас?
Читать дальше →
Всего голосов 112: ↑112 и ↓0 +112
Комментарии 26

Чистая архитектура на примере

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

Познакомил друга с понятием "Чистая архитектура" и он стал часто спрашивать меня как лучше сделать то или другое. Хотел дать ему к какому-нибудь туториал, но, к удивлению (плохому), не нашел подходящего.

Поэтому выкладываю небольшой обзор:

1.. Что такое чистая архитектура;
2.. Как можно реализовать;
3.. Мои мысли.

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

Применяем Java Sealed Classes на практике

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

В этой статье применим Sealed Classes для улучшения читаемости кода, используя пример из реальной разработки.
В статье используется Java 21 т.к. это первая LTS версия Java с релизным Pattern Matching. Также в примере используется Spring Boot, но этот подход можно использовать в любой похожей ситуации.

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

Как я поднял свой сервер без возможности выставить для него статический IP адрес

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

Родился я в одном городе, позже переехал жить в другой. В родном городе остался ПК, который стоит без дела. В один прекрасный день решил я из него сделать многофункциональную удаленную машину: чтобы и кодить, и файлы хранить, и сайты/ботов хостить. Идея мне понравилась, я накатил на машину линукс, поставил все валявшиеся без дела диски и начал все это проверять. Но тут оказалось, что в родительском доме интернет тариф не поддерживает возможность установки статического IP адреса по умолчанию - адрес выдается провайдером в случайные моменты времени. Это означало, что я не мог, например, хостить какой-нибудь сервер на этой машине. Более того, я даже банально не мог к ней по SSH подключиться после смены ее адреса.

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

Читать далее
Всего голосов 68: ↑33 и ↓35 -2
Комментарии 93

Dictionary и SortedDictionary

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

Всем привет. Сегодня я планирую рассказать в общих чертах о Dictionary и SortedDictionary в .NET - как они устроены и в чем различие между ними.

Читать далее
Всего голосов 17: ↑13 и ↓4 +9
Комментарии 10

Кодирование числа в Micro QR Code версии М2 (по ГОСТ)

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

Задание: необходимо создать кодовое слово, состоящее из 8 цифр (на примере – 01234567) на основе алгоритма, приведенного в ГОСТ Р ИСО/МЭК 18004-2015 (п. 7.4.3, пример 2). Затем создать для полученного кода Micro QR Code вер. М2. Данный режим невозможно прочитать стандартными ресурсами мобильных устройств, производимых GAFAM (как оказалось, свободно распространяемые библиотеки просто страшно глючат, поэтому Ассоциация отказалась от этого режима)

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

Ближайшие события

Ключевой навык успешной карьеры в ИТ или 8 заблуждений на проектах

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

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

Этот главный навык пригодится всем в индустрии — программистам, лидам, продуктологам, тестерам, менеджменту и всем остальным.

Имя ему этому навыку — здравый смысл.

Да, вот так просто, но на самом деле все совсем не просто, и я сейчас это объясню.

Читать далее
Всего голосов 54: ↑50 и ↓4 +46
Комментарии 60

Как работает протокол X11 на самом нижнем уровне

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

X11 это тот механизм на чем работает весь графический интерфейс Unix подобных ОС.


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


А протокол в своей сути прекрасен. Он лаконичен и почти совершенен.


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


А все книги и статьи по использованию X11 описывают это через библиотеки прокладки типа XLib и XCB, и даже, что хуже, GTK или Qt.


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


Как бы то ни было, если кому-то интересно как все работает на самом деле, пожалуйста под кат.

Читать дальше →
Всего голосов 177: ↑175 и ↓2 +173
Комментарии 170

Мой первый прототип поискового движка

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

Я реализовал первый прототип собственного механизма поиска, который сокращённо назвал PSE (Personal Search Engine). Создал я его с помощью трёх скриптов Bash, возложив всю основную работу на sqlite3, wget и PageFind.

Браузер Firefox вместе с Newsboat сохраняют полезную информацию в базах данных SQLite. В moz_places.sqlite содержатся все посещённые URL-адреса и адреса закладок (то есть moz_bookmarks.sqlite базы данных SQLite). У меня получилось около 2000 закладок. Это меньше, чем я предполагал, так как многие оказались нерабочими из-за битых ссылок.

Нерабочие URL-адреса страниц сильно замедляют процесс сбора, так как wget приходится ожидать истечения различных таймаутов (например, DNS, ответа сервера, время скачивания). URL-адреса из «истории» составили бы интересную коллекцию для сбора, но тут не обойтись без списка исключений (например, нет смысла сохранять запросы к поисковым системам, веб-почте, онлайн-магазинам). Изучение этого вопроса я отложу до следующего прототипа.
Читать дальше →
Всего голосов 54: ↑52 и ↓2 +50
Комментарии 23

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

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

Всем привет! Меня зовут Алексей Гмитрон, я фулстек-разработчик и наставник на курсе «Фронтенд-разработчик» в Практикуме. Довольно долгое время я разрабатываю интерфейсы, а ещё дольше — пользуюсь ими. 

В этом году я много путешествовал, поэтому нередко заполнял формы с анкетами на разные визы — в них бывало по 30—40 полей. Когда что-то шло не так, часто сайты не давали никакой обратной связи. Иногда они сбрасывали всё, что я заполнял в течение часа, если одно из полей невалидно. 

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

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

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

Рабочее место мечты

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

Всем привет!

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

Итак, давайте разбираться!

Читать далее
Всего голосов 39: ↑29 и ↓10 +19
Комментарии 55

Jenkins: оптимизируя динамический пайплайн → распределённая сборка компонентов ОС

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


В процессе улучшения подходов к менеджменту зависимостей компонентов нашей Операционной Системы появилась необходимость перейти от монолитной статической сборочной системы на основе CI/CD инструментов к динамическому распределённому подходу с порождением сотен и тысяч автономных задач. Как выяснилось в процессе, это не самый радужный сценарий использования систем автоматизации, но вполне достижимый.


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


Также частично раскроем информацию о том, как мы выполняем распределённую сборку дистрибутивов.


Ожидается много текста и примеров кода.

Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 11

Async/Await из C#. Головоломка для разработчиков компилятора и для нас

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

Я рискну все таки продолжить изложение своего понимания Поста: How Async/Await Really Works in C#, которое в предыдущей статье получило название “ортогональный взгляд”. Также, недавно мы познакомились (возможно несколько преждевременно) с изначальным определением концепции SynchronizationContext на которую ссылается автор этого Поста.

Это не перевод. Это изложение содержания Поста на разных уровнях раскрытия сущностей и их взаимодействия по мере развития (эволюции) моего понимания тех мыслей и идей, которые, как мне кажется, хотел донести до читателя автор Поста Stephen Toub.

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

В этот раз попробуем сформулировать задачу, которую решает компилятор, то есть те разработчики, которые разрешили нам пользоваться конструкциями Async/Await в C#.

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

Вклад авторов