Пользователь
Обработка ошибок в Rust
Одним из факторов, влияющих на надёжность программного обеспечения является способ обрабатывать ошибки, возникающие в процессе выполнения. Создатели Rust не стали повторять популярные методы, а выбрали другой способ, позволяющий описывать и обрабатывать ошибки более явно. В статье мы рассмотрим реализацию данного подхода, а также полезные библиотеки, упрощающие обработку ошибок.
Функциональное программирование в Python. Генераторы, как питонячий декларативный стиль
- Общее введение
- ФП
- Введение в ФП
- Основные принципы ФП
- Основные термины
- Встроенное ФП поведение в Python
- Библиотека Xoltar Toolkit
- Библиотека returns
- Литература
- Генераторы
- Введение в итераторы
- Введение в генераторы
- Генераторы vs итераторы
- Генераторы как пайплайн
- Концепт yield from
- Маршрутизация данных на генераторах (мультиплексирование, броадкастинг)
- Пример трейсинга генератора
- Стандартные инструменты генераторы
- Выводы
- Плюсы
- Минусы
- Литература
- Итоги
Общее введение
Memoization в Python
Эта технология оптимизации позволят достичь прироста скорости работы за счет потерь в свободной памяти.
Допустим, у нас есть некая функция bigfunc, результат которой зависят только от переданных в нее аргументов, а сложность вычислений достаточно большая. Естественно нам не хотелось бы производить вычисления при каждом вызове bigfunc если она уже вызывалась ранее с теми же параметрами. Тут то нам на помощь и приходит memoization.
Для python декоратор для функции будет выглядеть следующим образом:
import cPickle def memoized(func): memory = {} def memo(*args,**kwargs): hash = cPickle.dumps((args, sorted(kwargs.iteritems()))) if hash not in memory: memory[hash] = func(*args,**kwargs) return memory[hash] return memo
Далее, нам достаточно объявить bigfunc как
@memoized def bigfunc(…): …
Или переопределить, если она уже объявлена:
bigfunc = memoized(bigfunc)
Декоратор, объявленный в начале статьи, работает только с пиклезуемыми объектами. Если ваша функция работает с непиклезуемыми объектами – вы можете заменить
hash = cPickle.dumps((args, sorted(kwargs.iteritems())))
на
hash = (tuple(args), frozenset(kwargs.items())
но вы потеряете возможность работы с mutable объектами.
Декоратор можно легко модифицировать, для ограничения количества закешированных элементов.
Реализация графов и деревьев на Python
Реализация графов и деревьев
Многие задачи, например, задача обхода точек по кратчайшему маршруту, могут быть решены с помощью одного из мощнейших инструментов — с помощью графов. Часто, если вы можете определить, что решаете задачу на графы, вы по-крайней мере на полпути к решению. А если ваши данные можно каким-либо образом представить как деревья, у вас есть все шансы построить действительно эффективное решение.
Несколько советов по эмпирическому анализу алгоритмов
Вступление
В ноябре прошлого года появилась книга Magnus Lie Hetland под названием «Python Algorithms: Mastering Basic Algorithms in the Python Language». Автор много лет занимается программированием и сейчас читает курс теории алгоритмов в одном из норвежских университетов. В своей книге он довольно простыми словами объясняет методы построения и анализа алгоритмов, а также приводит множество примеров, ориентированных на программистов на Python. Автор сосредотачивает свое внимание на практическом подходе к построению и оптимизации решений различных алгоритмических задач. В одном из обзоров говорится, что эту книгу можно сравнить с классическим трудом Кормена.
Мы с tanenn понемногу переводим эту книгу, и я предлагаю вашему вниманию перевод части первой главы — «Empirical Evaluation of Algorithms».
Знай сложности алгоритмов
Проверка б/у макбука перед покупкой — чек-лист
Данный чек-лист — компиляция нескольких источников, я его делал для себя, когда в конце 2019 года покупал 13" б/у макбук 2015 года, последний из имевших нормальную клавиатуру и набор портов, перед тем как Apple перешла на клавиатуру-бабочку и usb-с порты.
Какую модель б/у макбука стоит брать? Вместо введения
На этот вопрос нет однозначного ответа, поскольку все зависит от ваших задач. Для начала 2020 года и задач «офисной» работы и серфинга я бы сформулировал ответ так — можно брать любой мак от 2014 и более позднего года выпуска, на полноценном процессоре (m5 и m7 брать скорее нежелательно). Macbook pro таким образом предпочтительнее macbook air, поскольку у последних процессор и система охлаждения обычно проигрывает в сравнении.
Оптимальный выбор, который проработает еще несколько лет без проблем — это модели с четырехядерным процессором (не путать с четырехпоточным!), такие ставили обычно в 15" модели. Оперативки не менее 8 Гб, SSD лучше 256 Гб и больше, хотя на 128 с определенными неудобствами жить тоже можно. Батарея оптимально с менее чем 500 циклами перезарядки.
Стоимость 13" макбуков 2014-2016 годов колеблется от 40 до 55 тыс. рублей, причем варианты в хорошем состоянии около 40-45 тыс. мне кажутся наиболее выгодными с точки зрения дилеммы «взять б/у или доложить и взять новый».
Надо иметь ввиду, что все модели 2013-2015 года включительно очень ограничены с точки зрения апгрейда, а апгрейд моделей с 2016 и более поздних вовсе невозможен, поэтому берите сразу конфигурацию, которой вам хватит на ближайшие 2-3 года.
Моделей с клавиатурой-бабочкой (2016-2019 гг) не то что бы надо избегать, но надо отдавать себе отчет, что они требуют радикально более бережного к себе отношения, чтобы клавиатура проработала дольше. Сейчас полно предложений продажи mac mini — это тоже хороший вариант, особенно если он базируется на нормальном четырехядерном процессоре.
Новые фичи Python 3.8 и самое время перейти с Python 2
Наступил 2020 год, а значит, Python 2 перестал поддерживаться. Если быть совсем точным, то основные разработчики уже перестали заниматься веткой, а выход релиза 2.7.18, приуроченный к PyCon US в апреле 2020 года, ознаменует полное прекращение любой активности, связанной с Python 2.
С другой стороны, совсем недавно состоялся релиз Python 3.8, добавивший немного синтаксического сахара в язык. Python 3.9 же ожидается ещё нескоро, да и пока не похоже что добавит в язык что-то интересное.
Так что если вы вдруг ещё не отказались от Python 2, то дальше тянуть смысла просто нет: поддержка второй версии уже прекратилась, а переход сразу на 3.8 позволит использовать язык в его самом актуальном состоянии ещё долгое время.
Ну а, чтобы решиться было проще, ниже приведён обзор главных нововведений Python 3.8, которые пригодятся каждому питонисту.
Телеграм как сервис
https://www.t-a-a-s.ru/
Таас позволяет создать виртуальный клиент Телеграма в облаке, с доступом по API. Вы можете использовать все методы которые предоставляет Telegram API, без установки чего-либо.
Чем это лучше чем бот?
- Можно отправлять сообщения даже тем людям, которые не начали первыми с вами общение.
- Возможность получить полную историю чата используя метод getChatHistory.
- И многое другое. Таас создает для вас настоящий Телеграм клиент управляемый через API.
План подготовки к собеседованию на позицию Java разработчика
И я намеренно не пишу, для кого предназначен этот план подготовки: для senior, middle или junior разработчика — все зависит от конкретной вакансии и от требований работодателя. Поэтому опирайтесь на этот план, но фильтруйте и в то же время не воспринимайте его как исчерпывающее руководство.
- Java core. Здесь можно ориентироваться например на книгу «OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809» для подготовки к Java сертификации уровня Professional. Есть подобная книга «OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808» для уровня Associate — на нее тоже можно взглянуть. Пройдитесь по оглавлению и выделите для себя, что можно повторить. Конечно же, не стоит пускаться во все тяжкие и читать книгу от корки до корки — многие темы из этой книги можно обойти стороной, например форматирование дат. Выделите самое основное. Например для меня это были следующие темы: коллекции (стандартные вопросы «Как устроена HashMap?» или «Чем отличается LinkedList от ArrayList?» все также часто задают на собеседованиях), дженерики, функциональные интерфейсы, многопоточность (тут тоже фильтруйте — не нужны вам cyclic barrier и fork join framework).
Также не забывайте проецировать знания на свой опыт. Например, когда вам приходилось использовать многопоточное программирование? Какие проблемы вы решали? Какие блокировки использовали?
- Многопоточность.
Возможности Python 3, достойные того, чтобы ими пользовались
Все примеры, приведённые в этом материале, написаны с использованием Python 3.7. В описании каждой возможности имеются сведения о минимальной версии Python, необходимой для её применения.
TensorFlow для начинающих. Часть 1: общие сведения, установка библиотеки
Этот материал посвящён основам TensorFlow и рассчитан на читателей, которые ничего не знают о данной библиотеке.
Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу
Существует два распространенных типа подключения DPI: пассивный и активный.
Пассивный DPI
Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.Разработка веб-серверов на Golang — от простого к сложному
Пять лет назад я начал разрабатывать Gophish, это дало возможность изучить Golang. Я понял, что Go — мощный язык, возможности которого дополняются множеством библиотек. Go универсален: в частности, с его помощью можно без проблем разрабатывать серверные приложения.
Эта статья посвящена написанию сервера на Go. Начнем с простых вещей, вроде «Hello world!», а закончим приложением с такими возможностями:
— Использование Let’s Encrypt для HTTPS.
— Работа в качестве API-маршрутизатора.
— Работа с middleware.
— Обработка статических файлов.
— Корректное завершение работы.
Доступ к linux серверу с помощью Telegram-бота на Python
Простой Telegram-бот на Python за 30 минут
Реализация моделей seq2seq в Tensorflow
Порождение данных с помощью рекурентной нейронной сети становится все более популярным методом и находит свое применение во многих областях компьютерной науки. С начала рождения концепции seq2seq в 2014 году прошло всего пять лет, но мир увидел множество применений, начиная с классических моделей перевода и распознавания речи, и заканчивая генерацией описаний объектов на фотографиях.
С другой стороны, со временем набрала популярность библиотека Tensorflow, выпущенная компанией Google специально для разработки нейронных сетей. Естественно, разработчики Google не могли обойти стороной такую популярную парадигму как seq2seq, поэтому библиотека Tensorflow предоставляет классы для разработки в рамках этой парадигмы. Эта статья посвящена описанию данной системы классов.
Руководство по Kubernetes, часть 2: создание кластера и работа с ним
Информация
- В рейтинге
- Не участвует
- Откуда
- Германия
- Зарегистрирован
- Активность