Как стать автором
Поиск
Написать публикацию
Обновить
1122.11

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

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

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

Автоматизация как вектор роста бизнеса

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

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

Автоматизация рабочих процессов требует внимания на втором этапе цифровой трансформации — с расширением цифрового присутствия бизнеса и накапливанием знаний и опыта.

Автоматизация играет центральную роль и в создании и реализации практических идей с использованием техник искусственного интеллекта для управления ИТ (AIOps). И далее, на последующих этапах, с использованием искусственного интеллекта.

Читать далее

Go: справляемся с конфликтами при блокировках с помощью пакета Atomic

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

Эта статья берет за основу Go 1.14.

Go предоставляет механизмы синхронизации памяти, такие как канал (channel) или мьютекс (mutex ), которые помогают решать различные проблемы. Касательно разделяемой памяти, мьютекс защищает память от гонки данных. Однако, несмотря на существование двух типов мьютексов, в целях повышения производительности Go также предоставляет атомарные примитивы памяти в пакете atomic. Но давайте сначала вернемся к гонкам данных, прежде чем углубляться в решения.

Читать далее

6 хитростей Python, о которых никто не рассказывает новичкам

Время на прочтение5 мин
Количество просмотров44K
В наши дни Python — это самый популярный в мире язык программирования. Одна из причин этого кроется в том, что разработчики с удовольствием пишут на Python. Это выгодно отличает Python от других языков.

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



Автор статьи, перевод которой мы сегодня публикуем, хочет рассказать о 6 хитростях Python, о которых обычно никто ничего не рассказывает.

Код примеров можно найти в GitHub-репозитории, ссылку на который автор статьи выдаёт тем, кто подписался на рассылку проекта worldindev.ck.page.
Читать дальше →

Используем черную магию для создания быстрого кольцевого буфера

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

Вчера я заглянул на страницу Википедии, посвященную кольцевому буферу (circular buffer), и был заинтригован предполагаемой техникой оптимизации, с которой до этого не был знаком: 

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

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

Читать далее

Цепочка пользовательских преобразований DataFrame в Spark

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

Для цепочки преобразований DataFrame в Spark можно использовать implicit classes или метод Dataset#transform. В этой статье блога будет продемонстрировано, как выстраивать цепочки преобразований DataFrame, и объяснено, почему метод Dataset#transform предпочтительнее, чем implicit classes.

Структурирование кода Spark в виде преобразований DataFrame отличает сильных программистов Spark от "спагетти-хакеров", как подробно описано в статье "Написание идеального кода Spark (Writing Beautiful Spark Code)". После публикации в блоге, ваш код Spark будет намного проще тестировать и повторно использовать.

Если вы используете PySpark, смотрите эту статью о цепочке пользовательских преобразований PySpark DataFrame.

Читать далее

Запускаем Golang на Jupyter Notebook

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

Если вы знакомы с Python, то уже сталкивались с Jupyter Notebook или работали в нём по крайней мере один раз. Jupyter Notebook — это удобный инструмент, позволяющий писать мини-код и отслеживать его выполнение. Он также помогает в документировании, ведении журнала и в том, чтобы поделиться своими работами с коллегами.

Неудивительно, что многие люди и крупные организации, такие как Netflix, для своих целей в разработке предпочитают Jupyter Notebook. Специально к старту нового потока курса по разработке на Go 26 мая мы решили поделиться переводом, автор которого рассказывает, как документировать проекты на Golang в Jupyter Notebook.

Читать далее

Узелковое мышление. Об информационной уникальности кипу

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

Чтобы создать что-то по-настоящему новое, порой достаточно сделать первый шаг: выйти из плоскости.

Начну этот рассказ с краткого отступления – истории, изложенной в книге «Код» Чарльза Петцольда.

Луи Брайль (1809 - 1852), знаменитый автор шрифта для слепых, от рождения слеп не был. Отец Брайля работал шорником, и девятилетний ребенок случайно попал себе в глаз острым инструментом, играя в отцовской мастерской. На один глаз он ослеп сразу, но затем инфекция быстро перекинулась и на второй глаз, в результате чего Луи полностью утратил зрение и оказался в парижском приюте Валентина Гаюи (1745 - 1822), который в 1784 году основал в Париже «Мастерскую трудящихся слепых», а в 1806-1818 годах занимался аналогичной работой в Санкт-Петербурге.

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

Читать далее

Календарь стартапера: Digital SuperHero, CYBER GARDEN и другие события в мае 2021

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

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

Читать далее

Подсистемы хранения и извлечение данных. Конспект книги «Designing Data-Intensive Applications»

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

Эта статья является конспектом книги «Designing Data-Intensive Applications».

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

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

Читать далее

Опенсорсные инструменты и пакеты для работы с HTTP API

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

Мы продолжаем серию статей о создании HTTP API с помощью .NET 5. В предыдущей статье мы рассмотрели создание обнаруживаемых HTTP API с помощью ASP.NET Core 5 Web API. В этой статье мы рассмотрим пакеты и инструменты для работы с HTTP API с открытым исходным кодом. Ну что ж, приступим!

Читать далее

Парсим протобаф на скорости больше 2 Гб/с.: как я научился любить хвостовую рекурсию в C

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


Отличную функцию недавно добавили в основную ветку компилятора Clang. С помощью атрибутов [[clang::musttail]] или __attribute__((musttail)) теперь можно получить гарантированные хвостовые (tail) вызовы в C, C++ и Objective-C.

int g(int);
int f(int x) {
    __attribute__((musttail)) return g(x);
}

(Онлайн-компилятор)
Читать дальше →

Руководство по моему стилю тестирования на Python

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

В этой статье я попыталась собрать несколько своих техник тестирования на Python. Не стоит воспринимать их как догму, поскольку, думаю, со временем я обновлю свои практики.

Читать далее

Различия индексов MySql, кластеризация, хранение данных в MyIsam и InnoDb

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

Как устроены индексы в MySql, чем отличается индексирование в двух наиболее популярных движках MyISAM и InnoDb, чем первичные ключи отличаются от простого индекса, что такое кластерные индексы и покрывающие индексы, как с помощью них можно ускорить запросы. Вот как мне кажется наиболее интересные темы которые раскрою в этой статье. Тут же постараюсь подробно раскрыть тему с позиции того как работает этот механизм внутри. Буквально на пальцах и с позиции абстракций а не конкретики. В общем чтоб было минимум текста и максимум понятно.

Читать далее

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

Фишки IDEA. Часть 1

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

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

Хотим поделиться с вами самыми интересными идеями (со ссылками на документацию, где подробно описано, как это работает).

Читать далее

Стандарт C++20: обзор новых возможностей C++. Часть 3 «Концепты»

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


25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.

При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным и растянулся на почти 2,5 часа. Для вашего удобства текст мы разбили на шесть частей:

  1. Модули и краткая история C++.
  2. Операция «космический корабль».
  3. Концепты.
  4. Ranges.
  5. Корутины.
  6. Другие фичи ядра и стандартной библиотеки. Заключение.

Это третья часть, рассказывающая о концептах и ограничениях в современном C++.
Читать дальше →

Thunderbird, RNP и важность хорошего API

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


Недавно мне довелось побеседовать с разработчиком Thunderbird о проектировании API. В ходе этой беседы я поделился соображениями о RNPновой реализации OpenPGP, которую Thunderbird недавно стал использовать вместо GnuPG.

Собеседник скептически отнесся к моему тезису о том, что API RNP нуждается в улучшении, и спросил, «разве это не субъективно – какие API лучше, а какие хуже?». Согласен, у нас нет хороших метрик для оценки API. Но не соглашусь, что мы в принципе не в силах судить об API.

На самом деле, подозреваю, что большинство опытных программистов узнают плохой API, если увидят его. Думаю, далее в этой статье получится разработать хорошую эвристику, которую я попытаюсь выстроить на моем собственном опыте работы с (и над) GnuPG, Sequoia и RNP. Затем я рассмотрю API RNP. К сожалению, этот API не только можно запросто использовать неправильно – он к тому же обманчив, поэтому пока его не следует использовать в контекстах, где принципиальная роль отводится соблюдению безопасности. Но целевая аудитория Thunderbird – это люди, известные своей уязвимостью, в частности, журналисты, активисты, юристы и их партнеры, отвечающие за коммуникацию; все эти люди нуждаются в защите. На мой взгляд, это означает, что в Thunderbird должны лишний раз подумать, стоит ли использовать RNP.
Читать дальше →

Маленькие победы

Время на прочтение10 мин
Количество просмотров1.7K
В течение своей карьеры я имел опыт работы над многими масштабными проектами, от проработки стратегий компании, выбора идеальных продуктов, реорганизации ключевых алгоритмов user-flow и информационного проектирования, до разработки систем с нуля.

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

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

Ударим биспектром по бездорожью, или как найти золото в Сибири

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

В предыдущей статье Ищем рудное золото на острове Сумбава, Индонезия я рассказывал про поиски золота в Индонезии, где при схожей геологической ситуации золотые жилы зачастую выходят на поверхность, в то время как в Сибири жилы обычно погребены под толщей осадочных пород. Конечно, десятки метров наслоений разных геологических периодов и состава сильно усложняют задачу поиска рудных ископаемых. Кроме того, есть проблема наличия геологических данных, собранных непосредственно на местности — задачи обследования территории теплой Индонезии и морозной болотистой Сибири не сравнимы. А еще следует помнить про специфику России — детальные геологические обследования времен СССР до сих пор засекречены (а после того не проводились, по крайней мере, в сопоставимых масштабах), при этом бумажные карты и данные бурения находятся в архивах, а номера скважин на картах и в отчетах о бурении намеренно изменены и таблицы соответствия хранит министерство обороны… как в сказке про смерть Кащея. Так что в реальности эти данные все равно что и не существуют.


В связи со сложностью задачи, нам потребуются серьезные статистические методы, такие, как полиспектральный анализ. Что интересно, такой анализатор у нас уже есть… в голове. Это легко подтвердить тем, что мы способны различать так называемый «малиновый звон» колоколов — этот эффект не проявляется на спектре, зато отлично виден на биспектре. Большинство людей отличает колокола с малиновым звоном, для этого даже не требуется наличие музыкального слуха. Опытный геолог, занимающийся визуальной дешифровкой космоснимков, способен вручную выделить на них элементы, сопутствующие различным погребенным геологическим структурам. Мы же, как обычно, воспользуемся вычислительными методами и построим 3D геологические модели для автоматизированного анализа.


Читать дальше →

Photon это не только log4net

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

... но и любой другой логгер.

Традиционно Photon Server SDK поставляется с log4net. Но это не значит что все им должны пользоваться. Пользоваться можно практически любым логгером. Всё что нужно это создать свою сборку, которая будет содержать класс прокси и фабрику для него.

Для примера возьмём модный нынче Serilog. Я с ним не знаком, так что возможно что-то будет сделано не лучшим методом или неправильно.

И так приступим

Механизмы авторизации в web-приложениях на Rust

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

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

Читать далее

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