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

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

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

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

Создание PDF-документа на Python с помощью pText

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

Один из самых гибких и привычных способов сгенерировать pdf — написать код на LaTeX и воспользоваться соответствующей программой. Но есть и другие способы, которые могут оказаться проще и понятнее, чем LaTeX. Специально к старту курса Fullstack-разработчик на Python представляем перевод статьи о том, как для генерации PDF можно воспользоваться библиотекой pText; эта статья написана Йорисом Схеллекенсом — разработчиком pText.

Читать далее

Flutter: флип-анимация

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

Когда я впервые увидел виджет AnimationSwitcher, то подумал, что смогу его перевернуть, открыв его обратную сторону.

Я ошибался: AnimationSwitcher позволяет... переключаться между различными виджетами с заданной вами анимацией (анимация по умолчанию - затухающий переход). Этот компонент слишком универсальный для этой цели.

Я должен был внимательно читать…

Его использование является весьма общим, поэтому я покажу вам, как можно сделать такую анимацию.

Читать далее

Какие ошибки совершает аналитик в первые полгода работы и как их избежать

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

Хайди хо, Кайл! 

Меня зовут Диана и я бизнес-аналитик в компании Surf. В прошлом году я закончила бакалавриат факультета компьютерных наук в ВГУ: это дало мне базовые теоретические знания. Однако теория мало применима без практики: теперь набиваю шишки в настоящих проектах. 

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

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

Пристёгивайтесь покрепче: мы начинаем увлекательное путешествие по миру ошибок начинающего аналитика (все трюки были выполнены профессиональными каскадёрами, не повторять в домашних условиях).

Читать далее

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

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


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

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

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

Это четвёртая часть, рассказывающая о новом модуле стандартной библиотеки, — Ranges.
Читать дальше →

Введение в транзакционную память от Мориса Херлихи

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

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

В прошлом году на нашей конференции Hydra он выступил с докладом для широкой публики, в котором всё начинается с самых азов, а позже доходит до менее очевидных вещей. Сейчас мы ждём его на Hydra 2021 с новым докладом — а в ожидании этого решили сделать для Хабра текстовый перевод прошлогоднего выступления на русский (видеозапись тоже прилагаем). Далее повествование будет от лица спикера.

Читать далее

Python, корреляция и регрессия: часть 4

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

Предыдущий пост см. здесь. Этот заключительный пост посвящен процессу предсказания на основе регрессии.

Читать далее

Python, корреляция и регрессия: часть 3

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

Предыдущий пост см. здесь.

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

Читать далее

Дождались: IBM научит ИИ писать код и создает CodeNet

Время на прочтение5 мин
Количество просмотров12K
500 миллионов строк кода на более чем 55 различных языках программирования.

image

Процент представлений по языку (слева) и по статусу (справа).

  • Датасет содержит 13 916 868 представлений, разделенных на 4053 задачи, у пяти из которых нет представлений.
  • Часть датасета была собрана на основе представлений на конкурсе Google Code Jam с 2008 по 2020 год.
  • 53,6% (7 460 588) представлений принято, 29,5% помечены как «неправильный ответ», а остальные отклонены из-за несоответствия времени выполнения или требования к памяти.
  • Набор данных содержит материалы на 55 разных языках; 95% из них написан на C ++, Python, Java, C, Ruby и C#.
  • C++ — самый распространенный язык с 8 008 527 представлениями (57% от общего количества), из которых принято 4 353 049.


«Софт ест мир», — написал американский предприниматель Марк Андриссен в 2011 году. Перенесемся в наши дни — программное обеспечение используется в финансовых услугах и здравоохранении, смартфонах и умных домах. Сегодня даже автомобили содержат более 100 миллионов строк кода.

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

Зайдите на Project CodeNet. Большой набор данных, предназначенный для обучения искусственного интеллекта программированию, он состоит из примерно 14 миллионов примеров кода и около 500 миллионов строк кода на более чем 55 различных языках программирования, от современных, таких как C++, Java, Python и Go, до устаревших языков, таких как COBOL, Pascal и Fortran.

Но чтобы понять значение этого набора данных, мы должны сначала посмотреть в прошлое.
Читать дальше →

Особенности практического использования различных алгоритмов Многорукого бандита

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

Большинство статей про алгоритмы, используемые для решения задачи многорукого бандита, очень академичны. Они пестрят формулами, графиками и статистическими таблицами. При этом как будто подразумевается, что у нас есть неизменяемый набор ручек для дёргания и n→∞ попыток. В этой статье я постараюсь рассказать об этих алгоритмах с колокольни обычного разработчика применительно к реальным условиям, в которых работает наш продукт (но графики будут — с ними красивее).

Дисклеймер: эта статья написана обычным разработчиком, не дата-саентистом или аналитиком. Не стоит рассматривать её в качестве серьёзного научного труда и искать неточности, неполноту и крайности. Она не про это.

Так как это статья про конкретное практическое применение, то и термины буду использовать из нашего домена:

• просмотр(n) = попытка;
• смайл(s) = победа;
• смайлрейт(w, от worth) = количество смайлов/количество просмотров;
• контент = то, у чего есть эти самые просмотры и смайлы.

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

Читать далее

Неожиданная сложность простых программ

Время на прочтение7 мин
Количество просмотров14K
Не раз я сталкивался с удивлением при оглашении оценки сложности проекта: «А почему так долго?», «Да тут же раз, два и готово!», «Можно же просто взять X и сунуть в Y!». Программисты привыкли оценивать сроки как время на написание и отладку кода, хотя в крупные задачи входит ещё много всего.


Знаете ли вы, что в реальности айсберги располагаются в воде горизонтально, а не вертикально, как на большинстве стоковых картинок?

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

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

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

Анонс эфира Flutter live-coding сессии

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

Приглашаем на эфир Flutter live-coding сессии. Покажем, что такое говнокод по-флаттеровски, и дадим лайфхаки, как писать на Flutter красиво. 26 мая, среда, 18:30 мск.

Читать далее

Как я влюбился в Rust и чего мне это стоило

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

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


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


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

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

Dependency Injection в мире Software Engineering

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

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

Читать далее

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

Python, корреляция и регрессия: часть 1

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

В предыдущих сериях постов для начинающих из ремикса книги Генри Гарнера «Clojure для исследования данных» (Clojure for Data Science) на языке Python мы рассмотрели методы описания выборок с точки зрения сводных статистик и методов статистического вывода из них параметров популяции. Такой анализ сообщает нам нечто о популяции в целом и о выборке в частности, но он не позволяет нам делать очень точные утверждения об их отдельных элементах. Это связано с тем, что в результате сведения данных всего к двум статистикам - среднему значению и стандартному отклонению - теряется огромный объем информации.

Читать далее

Открываем доступ к Platform V для рынка

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

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

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

image

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

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

Выбираем метод для поиска схожих операций

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

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

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

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

Фичи, по которым мы будем сравнивать и искать схожие операции:

Читать далее

Помогите Снежинке стать программистом

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

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

Итак, Снежинка хочет стать программистом. Теперь несколько деталей.

Читать далее

Создаем веб-приложение на Haskell с использованием Reflex. Часть 3

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

Часть 1.


Часть 2.


Всем привет! В этой части мы рассмотрим использование класса EventWriter и библиотеки ghcjs-dom.


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

Функция property() в Python

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

Функция property() используется для определения свойств в классах.

Метод property() обеспечивает интерфейс для атрибутов экземпляра класса. Он инкапсулирует атрибуты экземпляров и предоставляет свойства, аналогично тому, как это работает в Java и C#.

Метод property() принимает на вход методы get, set и delete, и возвращает объекты класса property.

Вместо метода property() лучше использовать декоратор property (https://www.tutorialsteacher.com/python/property-decorator).

Читать далее

Отправка электронных писем с помощью Spring

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

Отправка электронных писем — одна из базовых функций, которая может понадобиться в любом приложении. Из этой статьи вы узнаете, как отправлять электронные письма с помощью Spring. Для отправки электронных писем вам потребуются данные SMTP-сервера. В качестве примера вы можете использовать SMTP для Gmail (имейте в виду, что у Gmail есть определенные ограничения по отправке электронной почты). Интерфейс JavaMailSender в Spring Framework предлагает простую абстракцию для отправки электронной почты, а Spring Boot производит автоматическую настройку этого интерфейса и стартового модуля.

Читать далее

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