
Доброго времени суток.
Сегодня мы будем смотреть дизассемблированный код инструкций if, for, while, swich, которые написаны на языке Си. Воспользуемся radare2.
Пользователь
Доброго времени суток.
Сегодня мы будем смотреть дизассемблированный код инструкций if, for, while, swich, которые написаны на языке Си. Воспользуемся radare2.
Создатель Python и пенсионер Гвидо Ван Россум был вынужден снова выйти на работу, на этот раз в Майкрософт. Нет, Гвидо сделал это не потому, что на 15 000 рублей (200 долларов) пенсии ему тяжело жить — в MS он устроился от скуки: талантливому инженеру не сидится без дела. Желаю всем нам в старости быть как Гвидо и плавно перехожу к разбору трех весьма полезных штуковин из питонячего мира.
На прошлой неделе мы выпустили расшифровку первой части онлайн-встречи «Управление разработкой в «горизонтальных» компаниях», где приняли участие СТО Райффайзенбанка, Mindbox и руководитель разработки в Циан.
Сегодня публикуем вторую и последнюю часть митапа: это вопросы «из зала», которые задали слушатели гостям. Пост получился объемным, поэтому, если не хотите читать, то посмотреть видео можно ниже (запустится сразу с нужного момента — там, где закончилась первая часть).
Мне кажется, в каждом языке программирования есть моменты, которые требуют повышенной концентрации внимания или больше практики для своего понимания. Python в этом плане не исключение, и сегодня я расскажу вам о нескольких каверзных вопросах, с которыми вы можете столкнуться как в повседневной разработке, так и в ходе прохождения собеседования.
Ноябрь — месяц особенный. Целых два профессиональных праздника для российских безопасников: День специалиста по безопасности в России — 12 ноября и Международный день защиты информации — 30 ноября.
Находясь между этими датами, невольно задумываешься на тему: а что есть безопасность в принципе? И что приносит больший вред: внешние атаки или сумасшедшие ошибки, странные предрассудки и просто нежелание что-либо сделать хорошо?
Предлагаем вашему вниманию перечень "вредных советов", надеюсь, они вам понравятся.
Как в вашей компании реагируют на отпуск руководителя? Все немедленно перестают работать и утыкаются в YouTube или работают, как и работали до этого? Компании бывают разные и отношения «сотрудник — руководитель» лежат на интервале от состояния войны до глубокого и доверительного партнёрства. И, кажется, что в самых демократичных компаниях всё зиждется на дружбе, весёлых пятницах и взаимном уважении. Отчасти это так, но на самом деле за любой компанией с хорошим рабочим климатом стоит целая наука об управлении: по целям, с мониторингом, KPI и прочими методами работы с персоналом. Именно комплекс этих мер зачастую позволяет всем сотрудникам выдохнуть и работать в кайф — просто потому что руководитель всегда в курсе дел и может смело доверять и делегировать. Работают три принципа: доверяй, проверяй, измеряй. И не все они столь прозрачны и однозначны, как кажется. Погрузимся в детали?
Бывает, что люди, близкие к теме разработки софта спрашивают: чем проектная работа отличается от создания MVP (Minimal Viable Product)? Понятно, что при этом у каждого спрашивающего свой контекст вопроса — соответственно, отвечать на него надо по-разному. Однако, если обобщить, то проект и разработка продукта сильно отличаются друг от друга. Вообще всем. Это не так-то легко объять, поэтому давайте попробуем разобраться в проблематике.
Если смотреть поверхностно, то разработка софта — она и есть разработка софта, будь то проект или разработка продукта. Есть некие функциональные требования — не всегда формализованные. Есть нефункциональные требования — про которые частенько забывают вовсе. Есть разработчики, есть некий условный менеджер, и есть какая-то методология. Разработчики пилят код, менеджер разгребает препятствия у них на пути, решает вопросы с конечным клиентом / пользователем / заказчиком. В конце показывают какой-то результат. Иногда, как любят шутить в индустрии, результат даже соответствует требованиям.
Управление миграциями баз данных для нескольких сред и команд может быть достаточно сложной задачей. В этой статье описывается, как сочетание Git, контейнеров и клонов баз данных используется для реализации доставки в среды разработки, тестирования и стейджинга за считанные секунды.
Хотя Git и так часто используется в сочетании с контейнерами баз данных, описанный здесь подход все же вводит два новых элемента. Вместо того, чтобы воспроизводить базы данных из бекапов или создавать из источника данных, мы клонируем идентичные безопасные среды производственных баз данных и доставляем их в течении секунд. Клоны баз данных доступны для записи и позволяют легко внедрять маскирование данных и синтетические тестовые данные. Второй элемент - это файл манифеста сценариев, используемый при создании и применении персонализированных сценариев миграции.
Разработчик может работать с клоном производственной базы данных в функциональной ветке - сценарии для этой ветки применяются автоматически. В то же время команда тестирования может работать в релизной ветке с идентичным клоном производственной базы данных - для нее применяется набор релизных сценариев. На каком-нибудь конвейерном стейдже можно протестировать откат релизной ветки с третьим идентичным безопасным клоном производственной базы данных, благодаря автоматическому применению сценариев обновления и отката.
Эта статья берет за основу SQL Server, но эти методы также поддерживаются Postgres и MySQL.
Перевод подготовлен специально для будущих студентов курса "Разработчик на Spring Framework".
Эта статья о динамическом создании бинов за пять лет стала самой популярной в моем блоге (более 9300 просмотров). Пришло время ее обновить. Также я добавил пример на Github.
Интересно, сколько людей понимают, что в Python много синтаксического сахара? Я не говорю, что он похож на Lisp-подобные языки, где синтаксис настолько голый, насколько это возможно (хотя и сравнение с Lisp не совсем обосновано), но большая часть синтаксиса Python технически не нужна, поскольку под капотом в основном вызовы функций.
Ну и что с того? Зачем думать о том, как Python за меньший синтаксис делает больше вызовов функций? На самом деле для этого есть две причины. Во-первых, полезно знать, как на самом деле работает Python, чтобы лучше понимать/отлаживать код, когда что-то идет не так как надо. Во-вторых, так можно выявить минимум, необходимый для реализации языка.
Именно поэтому, чтобы заняться самообразованием и заодно подумать, что может понадобиться для реализации Python под WebAssembly или API bare bones на C, я решил написать эту статью о том, как выглядит доступ к атрибутам и что скрывается за синтаксисом.
Теперь мы можете попытаться собрать воедино все, что относится к доступу к атрибутам, прочитав справочник по Python. Так вы можете прийти к выражениям ссылок на атрибуты и модели данных для настройки доступа к атрибутам, однако, все равно важно связать все вместе, чтобы понять, как работает доступ. Поэтому я предпочитаю идти от исходного кода на CPython и выяснять, что происходит в интерпретаторе (я специально использую тег репозитория CPython 3.8.3, поскольку у меня есть стабильные ссылки и я использую последнюю версию на момент написания статьи).
В начале статьи вам встретится немного кода на С, но я не жду, что вы досконально поймете, что там происходит. Я напишу о том, что нужно будет из него понять, поэтому если у вас нет ни малейших знаний в С, то ничего страшного, вы все равно поймете все то, о чем я говорю.
Если вы задавались вопросами производительности труда операторов и управления средним временем обработки контакта (Average Handling Time, AHT), то материал, который вы сейчас читаете, точно для вас.
Сразу оговоримся, что эта статья не является полноценным исследованием и не охватывает все причины, которые могут повлиять на скорость обработки звонков (например, за рамками остался любимый вопрос автора о Speech Transmission Index (STI), индексе отвлекающих факторов в операторском зале). Она фиксирует зависимости, знание которых поможет вам выжать еще несколько килограммов эффективности при планировании ресурсов КЦ.
Мы выдвинули 2 гипотезы относительно среднего времени AHT:
Я уже давно не студент, но в свободное время изучаю материалы по Computer Science. Мне нравится получать знания и делиться ими. Недавно я наткнулся на любопытную задачу в известном учебнике "Алгоримы: Построение и Анализ". В этой статье я продемонстрирую принципы динамического программирования, используя эту задачу. Она интересная, не очень сложная и для её решения не требуется писать какие-то дополнительные структуры данных или библиотеки. Формулировка умещается в одно предложение:
Найти самую длинную палиндромную подпоследовательность в слове w
длиной n
.
Кому интересно, прошу под кат.
Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено... Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя. Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!