Как стать автором
Обновить
9
0
Игорь @igorzakhar

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

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

Шесть уровней метавселенной математики

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

Когда я был маленький, я думал, что математика - это очень формальная наука. Как бы не так! Когда о нас, математиках, говорят как о сухарях — это ложь! (с) 17 мгновений весны.

Приглашаю вас в путешествие по 6 уровням вселенной математики - от полностью формального до философско-поэтического, и заодно мы ответим на вопрос, является ли теорема Геделя теоремой или мета-теоремой.

Читать далее
Всего голосов 75: ↑72 и ↓3+92
Комментарии168

Внедрение зависимостей проще простого – на Python

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

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

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

Мой друг Netmiko. Часть 2: Три улучшения Python-скрипта

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

Продолжаю ковырять автоматизацию рутины на сети из Huawei коммутаторов. На этот раз изыскания, которые позволили сократить код в 3 раза, а именно: хосты и команды перенесены в отдельные файлы, пароль и имя пользователя больше не хранятся в открытом тексте. Есть демонстрация запуска скрипта. Детальное описание за кнопкой «Читать далее».

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

Инструменты практического изучения сетей

Время на прочтение4 мин
Количество просмотров5.1K
Привет! Я — golang разработчик в Каруне. Часто в работе сталкиваюсь с тем, что нужно понять, как функционирует та или иная сетевая система. Как правило, современные компьютерные системы объединены в сеть, и взаимодействие между узлами этой сети можно рассматривать через теоретическую призму модели OSI. 
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Лучшие практики использования SSL и TLS. Часть 1

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

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

Этот документ является шагом к решению проблемы нехватки документации в области использования SSL/TLS. Основная задача — предоставить четкие и краткие инструкции, которые помогут администраторам и программистам сэкономить время на развертывание защищенного сайта или веб-приложения. Для сохранения ясности в стороне останутся некоторые сложные схемы и излишние реализации. Внимание уделяется практическим советам, которым легко следовать.

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

Удаление GIL из Python: заметки со встречи Python Core и Сэма Гросса

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

Во время ежегодного спринта разработчиков ядра Python мы встретились с Сэмом Гроссом, автором nogil — fork в Python 3.9, который удаляет GIL. В статье — итоги встречи.

Среди вопросов, на которые ответил Сэм:

— Какова вероятность того, что nogil в итоге окажется нежизнеспособным для включения в CPython?
— Как вы планируете синхронизировать свою работу с main? Есть ли какие-то советы по порядку коммитов?
— Включение nogil во время запуска — это долгосрочная опция, или только на переходное время?
— В финале предполагается исключительно nogil, без вариантов вернуть GIL обратно?
— Что вы думаете о параллельном запуске нескольких интерпретаторов Python с одним GIL для каждого?

И многие другие. Полный список приведен в начале статьи.

Посмотреть полное содержание встречи
Всего голосов 24: ↑23 и ↓1+24
Комментарии22

Анатомия асинхронных фреймворков в С++ и других языках

Время на прочтение20 мин
Количество просмотров43K
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


Представьте, что у вашего сервиса очень маленькая нагрузка — 100 rps, и вам дали задачу написать простой сервер, понятный каждому второму школьнику. У вас получится что-то наподобие следующего:

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →
Всего голосов 56: ↑53 и ↓3+63
Комментарии32

Знакомимся с программированием на ассемблере x86

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

Архитектура x86 лежит в сердце процессоров, на которых уже более трех десятилетий работают наши домашние компьютеры и удаленные серверы. Умение читать и писать код на низкоуровневом языке ассемблера – это очень весомый навык. Он позволяет создавать более быстрый код, использовать недоступные в Си возможности машин и выполнять реверс-инжиниринг скомпилированного кода.
Читать дальше →
Всего голосов 37: ↑34 и ↓3+45
Комментарии15

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

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

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

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

Защитить данные!
Всего голосов 22: ↑22 и ↓0+22
Комментарии32

Удаление Whitelist ноутбуков HP на примере HP Pavilion dv6-2135er

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

Удаление Witelist ноутбука HP Pavilion dv6-2135er. Реверс-инжиниринг и модификация дампа bios.

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

Мой компьютер на логических микросхемах

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

Привет, Хабр. Два года назад, как раз перед началом пандемии, я затеял большой проект: построить компьютер, используя только простые логические микросхемы 74 серии и микросхемы памяти. В этой статье я бы хотел кратко рассказать о том, что получилось, и более подробно об основной части – процессоре.

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

JavaScript, Node, Puppeteer: автоматизация Chrome и веб-скрапинг

Время на прочтение10 мин
Количество просмотров140K
Библиотека puppeteer для Node.js позволяет автоматизировать работу с браузером Google Chrome. В частности, с помощью puppeteer можно создавать программы для автоматического сбора данных с веб-сайтов, так называемые веб-скраперы, имитирующие действия обычного пользователя. В подобных сценариях может применяться браузер без пользовательского интерфейса, так называемый «Headless Chrome». Используя puppeteer, можно управлять и браузером, который запущен в обычном режиме, что особенно полезно при отладке программ.

image

Сегодня мы поговорим о создании веб-скрапера на базе Node.js и puppeteer. Автор материала стремился к тому, чтобы статья была интересна как можно более широкой аудитории программистов, поэтому пользу из него извлекут как те веб-разработчики, которые уже имеют некоторый опыт работы с puppeteer, так и те, которые впервые сталкиваются с таким понятием, как «Headless Chrome».
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии13

Преврати любимое дело в работу, и…

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

Вам нравится что-то делать. Вы увлечены этим делом. И вы подумываете превратить увлечение в профессию?

Это же просто здорово, когда берёшься за работу с юношеским энтузиазмом, когда в процессе работы раз за разом испытываешь детский восторг!

И как это прекрасно: зарабатывать себе на жизнь, занимаясь любимым делом! Рецепт долгой счастливой жизни: любить свою работу, увлечённо трудиться, воспринимать трудности как вызов, смотреть на мир горящими глазами.

И это работает! Правда, недолго...

И вот почему
Всего голосов 70: ↑64 и ↓6+75
Комментарии28

Как научиться чему угодно с помощью техники Фейнмана

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


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

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

Нет никаких чудо-людей. Просто случилось так, что они заинтересовались чем-то и выучили все про это. Ричард Фейнман

Ричарда Фейнмана Ричардом Фейнманом (по крайней мере, по мнению Ричарда Фейнмана) сделал не врождённый интеллект, а систематический способ, с помощью которого он выявлял то, чего не знал, а затем бросался постигать это.

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

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

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

В этой статье будет представлен обзор техники Фейнмана и того, как вы можете применять её для постоянного расширения своих знаний и навыков. Короче говоря, Фейнман научит вас не только тому, как учиться, но и тому, как по-настоящему понимать.
Приятного чтения!
Всего голосов 64: ↑53 и ↓11+63
Комментарии106

О функциональности Go

Время на прочтение6 мин
Количество просмотров16K
Насколько объектно Go ориентирован многократно и эмоционально обсуждалось. Попробуем теперь оценить насколько он функционален. Заметим сразу, оптимизацию хвостовой рекурсии компилятор не делает. Почему бы? «Это не нужно в языке с циклами. Когда программист пишет рекурсивный код, он хочет представлять стек вызовов или он пишет цикл.» — замечает в переписке Russ Cox. В языке зато есть полноценные lambda, closure, рекурсивные типы и ряд особенностей. Попробуем их применить функциональным манером. Примеры покажутся синтетическими оттого, что во первых написаны немедленно исполняемыми в песочнице и написаны на процедурном все же языке во вторых. Предполагается знакомство как с Go так и с функциональным программированием, разъяснений мало но код комментирован.
Читать дальше →
Всего голосов 22: ↑19 и ↓3+16
Комментарии6

Еще один способ использования docker-compose

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

По следам статьи Docker + Laravel = ? хочу рассказать о довольно необычном способе использования утилиты docker-compose.


Для начала, для тех кто не знает, зачем нужен docker-compose. Это утилита, которая позволяет запускать на отдельном хосте набор связанных сервисов, запакованных в docker-контейнеры. Изначальная версия была написана на python и могла быть установлена двумя способами:

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

Исповедь docker хейтера

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

Я должен признаться. Я ненавижу docker. Всей своей душой. Это самая ужасная софтина, которую я видел за последние 10 лет.


С одной стороны, я очень уважаю одноименную компанию. Ребята из Docker Inc. реально популяризировали контейнеризацию. Теперь о ней не знает только ленивый. С другой стороны, ничего принципиально нового они не изобрели — контейнеризация на момент, когда Docker "выстрелил", уже существовала более 30 лет (начиная от chroot, вспомним еще jails и zones, ну, и наконец-то — namespaces & cgroups).


Круто, что docker реально ускоряет разработку во множество раз. Если вести ее правильно, то даже без потери в качестве. В любом случае, docker здесь, от него не деться и приходится им пользоваться.


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


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

Читать дальше →
Всего голосов 220: ↑203 и ↓17+186
Комментарии539

C++ быстрее и безопаснее Rust, Yandex сделала замеры

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

Спойлер: C++ не быстрее и не медленнее и вообще смысл не в этом. Эта статья является продолжением славных традиций развенчания мифов крупных российских компаний о языке Rust. Предыдущая была "Go быстрее Rust, Mail.Ru Group сделала замеры".


Недавно я пытался заманить коллегу, сишника из соседнего отдела, на Тёмную сторону Rust. Но мой разговор с коллегой не задался. Потому что, цитата:


В 2019 году я был на конференции C++ CoreHard, слушал доклад Антона antoshkka Полухина о незаменимом C++. По словам Антона, Rust еще молодой, не очень быстрый и вообще не такой безопасный.

Антон Полухин является представителем России в ISO на международных заседаниях рабочей группы по стандартизации C++, автором нескольких принятых предложений к стандарту языка C++. Антон действительно крутой и авторитетный человек в вопросах по C++. Но доклад содержит несколько серьёзных фактических ошибок в отношении Rust. Давайте их разберём.

Всего голосов 175: ↑159 и ↓16+198
Комментарии1205

Хабр, зачем ты сломал свою поддержку (а заодно и шапку)?

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

Я давненько уже читаю Хабр, скоро 10 лет будет. Конечно, немало раз я натыкался на какие-то баги, которые добросовестно репортил через форму "Техническая поддержка" в футере страницы. И всегда реакция была довольно адекватной, техподдержка сразу понимала мои репорты, либо подтверждала, либо уточняла технические детали.

А недавно обнаружил очередную проблему.

Было внезапно
Всего голосов 86: ↑80 и ↓6+99
Комментарии100

Делаем асинхронность асинхронной, разбираемся в планировщике Go, ругаем Linux

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

В айтишном мире есть две весьма обсуждаемые темы:

1. Что является главным недостатком в Go;

2. Linux vs <что угодно>;

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

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

Информация

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