<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Заметки разработчика</title>
    <link>http://swe-notes.ru/</link>
    <description>Recent content on Заметки разработчика</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ru-ru</language>
    <lastBuildDate>Wed, 11 Mar 2026 17:50:00 +0300</lastBuildDate><atom:link href="http://swe-notes.ru/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Обратная разработка (reverse engineering) детали во Freecad</title>
      <link>http://swe-notes.ru/post/freecad_reverse_engineering/</link>
      <pubDate>Wed, 11 Mar 2026 17:50:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/freecad_reverse_engineering/</guid>
      <description>Введение Недавно я приобрел себе 3D сканер Revopoint, но вот реальных задач, к сожалению, не подворачивалось. Но недавно друг попросили сделать ему крепление длоя go pro на шлем для мотоцикла. Собственно, самая сложная часть в этом процессе это смоделировать крепеж на основе существующей заглушки. Эта задача выродилась в интерсный проект по реверс инженерену объемной детали.
Сканирование модели Для сканирования использовалось стандартное ПО от производителя RevoScan 5.
Перед началом сканирования с сразу столкнулся с небольшой проблемой: деталь, которую нужно сканировать была черная - это плохо так как свет при сканировании темных деталей поглощается и модель получается плохая.</description>
    </item>
    
    <item>
      <title>Децентрализованный месседжер Delta Chat</title>
      <link>http://swe-notes.ru/post/delta-chat/</link>
      <pubDate>Wed, 24 Dec 2025 18:05:10 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/delta-chat/</guid>
      <description>Введение Недавно озадачился поиском подходящего месседжера для общения с ближним кругом друзей и близких, так как в стандартных решениях стало полно мошенников.
Сначала я думал развернуть свой сервер jabber в виде классической связки сoturn + prosody, но в поисках я наткнулся на более интресное решение, имя которому Delta chat.
Архитектура Delta Chat - это децентрализованный и безопасный мессенджер, который работает поверх обычной электронной почты.
Архитектура Delta chat это совокупность:
клиентские приложения под разные платформы chatmail сервара (можно использовать и обычный email сервер, но с ограничениями) приложения webxdc (HTML5, CSS, JavaScript), которые запускаются на клиенте Также в delta chat есть возможность создания ботов (как в Telegram).</description>
    </item>
    
    <item>
      <title>Модель на основе чертежа во Freecad</title>
      <link>http://swe-notes.ru/post/freecad_skect_from_image/</link>
      <pubDate>Tue, 30 Sep 2025 18:50:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/freecad_skect_from_image/</guid>
      <description>Введение После разборки гаража, я нашел полотно пилы из инструментальной стали толщиной 1,2мм и чтобы оно не пропадало, я решил сделать из него филейный нож. После раздумий как подойти к задаче (материала для работы не так уж много) было принятое решение сначала сделать модель ножа на 3D принтере.
Я нашел в интернете понравившийся чертеж, и решил на его основне сделать модель, и, чтобы не забыть все шаги, я решил записать конспект о том как делать модель на основе картинки чертежа.</description>
    </item>
    
    <item>
      <title>Подключение clang для работы с Arduino/ESP32</title>
      <link>http://swe-notes.ru/post/clang_platformio/</link>
      <pubDate>Wed, 05 Mar 2025 07:30:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/clang_platformio/</guid>
      <description>Введение На одном из pet проектов, о котором я, возможно, напишу позднее, мне понадабилась IDE для работы с прошивками микроконтроллеров. Понятно, что есть Arduino IDE, но я привык к Emacs и хотелось бы продолжныть работб в нем.
По итогу я нашел прекрасный проект PlatformIO для заливки прошивок на мирокконтроллеры и разработки под них. По умолчанию, он рекомендует использовать lsp ccls для работы со своими проектами и при инициализации проекта настраивает для него все пути до библиотек и заголовков.</description>
    </item>
    
    <item>
      <title>Обнаруживаем утечки памяти в MacOS</title>
      <link>http://swe-notes.ru/post/macos_memory_leak/</link>
      <pubDate>Tue, 04 Mar 2025 07:30:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/macos_memory_leak/</guid>
      <description>Введение В прошлой статье, я описал как можно профилировать программы на MacOS, но этого бывает недостаточно и нужно понять есть ли в программе или сервисе утечка памяти. Поэтому в этой статье я тезисно хочу показать какие способы есть, чтобы определить их на платформе MacOS. Я нашел 3 способа:
утилита Leaks в Instruments консольная утилита leaks Dtarce скрипты Leaks в Instruments Это простой визуальный способ через GUI, у которого я сразу наткнулся на то, что не понял как подключаться к уже запущенному процессу (это надо не частно, но бывает).</description>
    </item>
    
    <item>
      <title>Профилирование приложений в MacOS</title>
      <link>http://swe-notes.ru/post/macos_profiling/</link>
      <pubDate>Sat, 22 Feb 2025 16:30:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/macos_profiling/</guid>
      <description>Введение Часто бывают ситуации когда надо понять насколько оптимально работает приложение или какие функции или системные вызовы оно использует и как это соотносится с ресурсами. Эта задача называется профилированием. Для профилирования в Linux есть несколько вариантов, самый распространенный из которых - утилита perf, но для пользователей MacOS она недоступна, так как напрямую связан с ядром Linux. К счастью, для их операционной системы есть другие способы профилирования, о которых я расскажу ниже.</description>
    </item>
    
    <item>
      <title>Создание UI модуля для Tarantool Cartridge</title>
      <link>http://swe-notes.ru/post/tarantool-cartridge-ui-module/</link>
      <pubDate>Tue, 16 Aug 2022 06:30:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/tarantool-cartridge-ui-module/</guid>
      <description>Введение Недавно мне необходимо было разобраться в теме создания произвольной web формочки и добавления ее в админку фреймворка Tarantool Cartridge.
Поиски информации по этой теме ни к чему не привели, поэтому я решил написать мини маунал своих изысканий в этом блоге и тем самым продолжить серию статей про Tarantool(1, 2, 3).
В статье я опишу из каких частей состоит ui модуль, расскажу как его собрать, в конце приведу демо проект такого модуля, а также оставлю полезные ссылки по теме.</description>
    </item>
    
    <item>
      <title>Создание модуля на C для Tarantool</title>
      <link>http://swe-notes.ru/post/tarantool-c-module/</link>
      <pubDate>Mon, 15 Aug 2022 06:00:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/tarantool-c-module/</guid>
      <description>Введение Как я уже писал ранее, в данный момент я работаю с отечественной СУБД Tarantool, которая, по совместительству, является еще и сервером приложений. Некоторое время назад я уже писал как можно создавать приложения для Tarantool на языке Lua, а также про построение регистронезависимого индекса в нем.
Несмотря на то, что Lua является основным языком создания модулей для Tarantool их можно создавать еще и на C (с недавнего времени еще и на Rust с помощью Tarantool Rust SDK).</description>
    </item>
    
    <item>
      <title>Построение регистронезависимого индекса в Tarantool</title>
      <link>http://swe-notes.ru/post/tarantool-case-insensitive-index/</link>
      <pubDate>Wed, 18 Aug 2021 20:00:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/tarantool-case-insensitive-index/</guid>
      <description>Введение Ранее я уже писал статью по созданию приложения на платформе Tarantool, теперь же я утроился на работу в компанию Picodata, которая оказывает услуги по его эксплуатации.
Сегодня у меня появилась задача разобраться как построить регистронезависимый индекс (case insensitive index) для поиска по текстовым данным в Tarantool.
Регистронезависимый индекс полезен когда вам надо сравнивать данные независимо от регистра. Например строки ААА, aAa, aaa для такого индекса будут эквивалентны.
Построение индекса Для того чтобы сделать регистро-независисмый индекс нужно добавить параметр collation к индексируемому полю.</description>
    </item>
    
    <item>
      <title>Разработка асинхронного сервиса на Rust с использованием mio</title>
      <link>http://swe-notes.ru/post/rust-wialon/</link>
      <pubDate>Thu, 12 Aug 2021 19:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/rust-wialon/</guid>
      <description>Введение Как то ранее я писал пробный сервис на Rust, но время идет язык изменяется и поэтому я решил повторить свой опыт, но в этот раз решил написать серверное приложение с уклоном в телеметрию.
Для экспериментального проекта я выбрал реализацию протокола wialon ips 1.1, а чтобы более детально углубиться в асинхронность выбрал библиотеку mio.
Работа с библиотекой mio Mio это низкоуровенная библиотека для работы с сетевыми соединениями в неблокирующем режиме и основанная на событиях.</description>
    </item>
    
    <item>
      <title>Разработка плагина k6 для работы с EGTS</title>
      <link>http://swe-notes.ru/post/xk6-egts/</link>
      <pubDate>Mon, 28 Jun 2021 07:00:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/xk6-egts/</guid>
      <description>Введение Часто возникает задача провести нагрузочное тестирование какого-либо сервиса или системы. Из известных и распространенных инструментов для этой задачи есть Yandex.Tank и Jmeter.
Основная проблема Танка в том, что из коробки он может тестировать только web приложения. Jmeter же написан на java и чтобы его можно было расширить какой-то функциональностью необходимо знать этот язык.
После поисков других вариантов я натнуля на k6, которым пользуется Mail.ru для проведения нагрузочного тестирования Tarantool. Меня очень заинтересовал данный инструмент по следующим причинам:</description>
    </item>
    
    <item>
      <title>Замещение функций через LD_PRELOAD</title>
      <link>http://swe-notes.ru/post/ld-preload-golang/</link>
      <pubDate>Fri, 26 Mar 2021 07:31:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/ld-preload-golang/</guid>
      <description>Дисклаймер: все описаное в статье является моим экспериментом и сделано в ознокомительных целяхa, автор не несет ответсвенности за ваши действия.
Ввведение Недавно я озаботился вопросами информационой безопасности и в целях освоения информации решил сделать простенький руткит для реализации reverse shell. В статье будет описано что такое reverse shell и как его можно вызвать через перезагрузку функций в стандартной библиотеке в ОС Linux.
Что такое reverse shell Reverse shell или Бэдконнект это схема взаимодействия с удаленным компьютером, при которой этот самый (атакуемый) компьютер будет клиентом и, соответвенно, будет сам устанавливать соедиенеие с нашим сервером.</description>
    </item>
    
    <item>
      <title>Создание сложных форм в Zeppelin</title>
      <link>http://swe-notes.ru/post/zeppelin-angular-form/</link>
      <pubDate>Mon, 25 Jan 2021 09:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/zeppelin-angular-form/</guid>
      <description>Введение В прошлой статье я рассказал о базовой настройке Apache Zeppelin, которая может пригодится в простых случаях или для быстрого прототипирования. Если же говорить про промышленное использование то, базовых возможностей фильтров хватает не всегда, и самый яркий этого - выбор дат через виджет календаря.
Сегодня я покажу как сделать форму выбора даты с календарем с помощью возможностей Zeppelin. Для оторажения календаря я буду использовать виджет datepicker из библиотеки JQueryUI.
Создание формы Для создания произвольных форм в Zeppelin используется параграф с обработчиком %angular.</description>
    </item>
    
    <item>
      <title>Основы работы с Сlickhouse из Zeppelin</title>
      <link>http://swe-notes.ru/post/introduction-zeppelin/</link>
      <pubDate>Tue, 19 Jan 2021 09:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/introduction-zeppelin/</guid>
      <description>Введение В статье я хочу рассмотреть инструмент Zeppelin, который предназначен для визуального анализа данных.
Zeppelin - представляет из себя систему для получения данных из разных источников и их последующей визуализации. Я бы сравнил его с продвинутым клиентом для доступа к БД.
Также я опишу процесс настройки Zeppelin для работы с БД ClickHouse, которую в последнее время часто использую для аналитики.
Установка Zeppelin Инструкцию по установке есть в официальной документации.
Если же вы хотите использовать Docker, то для этого нужно обратиться к документации.</description>
    </item>
    
    <item>
      <title>Создание Wireshark плагина для расшифровки EGTS</title>
      <link>http://swe-notes.ru/post/wireshark-lua-dissector/</link>
      <pubDate>Thu, 01 Oct 2020 13:00:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/wireshark-lua-dissector/</guid>
      <description>Введение Бывает ситуация когда надо посмотреть данные в сетевом дампе, а Wireshark не поддерживает такой протокол и вместо данных в нем можно видеть только набор байт.
В таком случаем при наличии спецификации можно написать свой парсер протокла, что я и покажу на примере протокола EGTS, о разборе которого я писал ранее.
Создание плагинов в wireshark Плагины в Wireshark для произвольных протоколов можно делать двумя способами:
С помощью динамических библиотек на языке С.</description>
    </item>
    
    <item>
      <title>Расширение и оптимизация экспорта в Odoo</title>
      <link>http://swe-notes.ru/post/extend-export-odoo/</link>
      <pubDate>Tue, 15 Sep 2020 15:00:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/extend-export-odoo/</guid>
      <description>Бывают случаи, когда необходимо как расширить или модернизировать страндартный экспорт в Odoo. И чтобы не забыть как это делать я решил написать текущую заметку.
У меня в возникло 3 кейса, которые я хотел бы зафиксировать:
Ограничение списка полей для экспорта Чтобы ограничить список необходимо переопределить (или расширить) get_fields в классе Export:
from odoo.addons.web.controllers.main import Export class CustomExport(Export): @http.route(&amp;#39;/web/export/get_fields&amp;#39;, type=&amp;#39;json&amp;#39;, auth=&amp;#34;user&amp;#34;) def get_fields(self, model, prefix=&amp;#39;&amp;#39;, parent_name= &amp;#39;&amp;#39;, import_compat=True, parent_field_type=None, exclude=None): # код для обработки списка нужных полей return records Изменить оформление Excel выгрузки Для данного действия необходимо расширить функцию from_data в нужном классе ExcelExport или CSVExport:</description>
    </item>
    
    <item>
      <title>Генерация событий средствами PostgreSQL</title>
      <link>http://swe-notes.ru/post/pg-event-sourcing/</link>
      <pubDate>Mon, 24 Aug 2020 16:00:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/pg-event-sourcing/</guid>
      <description>Введение Бывают специфичные кейсы, когда надо отслеживать изменение данных в таблицах БД и передавать их во внешние системы, а сделать это через отдлеьные серверы не представляется возможным. В таком случае средствами PostgreSQL можно генерировтать эти события и с помощью механизма оповещений отлавливать их во внешнем сервисе (например внешний журнал событий).
Подготовка стенда Для демонстрации создадим базы:
createdb pubsub_test Далее создадим тестовую таблицу:
CREATE TABLE price ( id serial PRIMARY KEY, lot VARCHAR (50), price float ) Изменение отслеживание изменения данных в таблице Допустим что надо отслеживать добавление, изменени и удаление данных в заданной таблице и складывать их в формате json в определенный журнал.</description>
    </item>
    
    <item>
      <title>Введение в перехват USB команд с помощью Wireshark</title>
      <link>http://swe-notes.ru/post/usb-reverse/</link>
      <pubDate>Mon, 27 Jul 2020 10:00:00 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/usb-reverse/</guid>
      <description>Введение Недавно у меня на работе возникла задача повторить работу программы настройки одного навигационного устройства и поэтому я стал изучать тему, как можно перехватить данную информацию без полного реверс инжинеринга самого ПО и прошивки устройства. В итоге выяслилось что это можно сделать по средствам перехвата USB трафика, о чем я ниже напишу.
Кратко о USB USB является хост-ориентированной шиной с топологией многоуровневой звезды. На шине может присутствовать только один хост и до 127 устройств.</description>
    </item>
    
    <item>
      <title>Выделение строк в Many2one поле в Odoo</title>
      <link>http://swe-notes.ru/post/color-m2o-odoo-widget/</link>
      <pubDate>Tue, 07 Jul 2020 08:02:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/color-m2o-odoo-widget/</guid>
      <description>Недавно появилась задача раскрасить строки в поле типа Many2one в Odoo, так как у меня есть историчность записей и при выборе необхдимо разделять активные и не активыне записи по цветам. К сожалению, стандартного способа я не нашел и поэтому начала искать варианты как это сделать.
Исследование исходников. Первым делом я полез смотреть как работает виджет для данного типа поля. Его реализацию я нашел в файле /addons/web/static/src/js/views/form_relational_widgets.js.
Его верхнеуровневая реализация выглядит так:</description>
    </item>
    
    <item>
      <title>Простое сетевое GUI приложение на Go &#43; Fyne</title>
      <link>http://swe-notes.ru/post/fyne-network-app/</link>
      <pubDate>Wed, 06 May 2020 12:02:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/fyne-network-app/</guid>
      <description>На днях меня попросили сделать простенький реестр записей, но так чтобы он был в виде GUI приложения и имел клиент-серверную архитектуру. Т. е. приложение должно состоять из двух частей:
сервер, который сохряняет данные в бд клиент, который имеет формочку из нескольких полей после заполенения которых данные отправляются на сервер Недавно я как раз прочитал про новый фреймворк Fyne для создания графичесих приложений на Go и решил опробыввать его на этой задаче.</description>
    </item>
    
    <item>
      <title>Рисование геометрий с помощью GeoPandas</title>
      <link>http://swe-notes.ru/post/geopandas-intro/</link>
      <pubDate>Tue, 28 Apr 2020 12:02:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/geopandas-intro/</guid>
      <description>Ведение На днях у меня возникла потребность отобразить несколько геометрий на карте, для того чтобы посмотреть на сколько они перекрывают друг друга.
Варианты решения Первое что мне пришло в голову - это скачать QGIS, это геоинформационная система с открытым исходным кодом, которая бы выполнила мою задачу, но она вести около 1 Gb места, и мне показалось что для такой простой задачи это большой оверхэд.
Следующее решение было - сделать html файлик и использовать javascript библиотеку openlayers для отображения моих геометрий.</description>
    </item>
    
    <item>
      <title>Скачиваем видео в формате m3u8</title>
      <link>http://swe-notes.ru/post/download-m3u8/</link>
      <pubDate>Sat, 11 Apr 2020 16:02:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/download-m3u8/</guid>
      <description>Введение На днях у меня появилась потребность сохранить видео лекции с некоторого сайта, которой такой функциональности не представляет, а причиной этой необходимости послужило то, что после определенного времени с момента оплаты видео становится не доступным.
Анализ Первое что пришло мне в голову это записать видео с экрана, например через QuickTime, но в таком случае нужно все их просмотреть а это по времени достаточно долго и этот вариант мне не понравился.</description>
    </item>
    
    <item>
      <title>Наследование  значения из формы в wizard Odoo и работа с context </title>
      <link>http://swe-notes.ru/post/odoo-wizard-default/</link>
      <pubDate>Tue, 07 Apr 2020 14:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo-wizard-default/</guid>
      <description>Недавно возникла необходимость пробрость значение из формы во всплывающее окно в Odoo. Как всегда это делалось с помощью небольшой магии и поэтому решил это записать.
Создаем виджет Для демонстрации я создам простой виджет с 2 полями.
demo_widget.py
from odoo import models, fields, api class DemoWizard(models.TransientModel): _name = &amp;#39;demo.wizard&amp;#39; item_id = fields.Many2one(&amp;#34;item&amp;#34;, &amp;#34;Код записи&amp;#34;) start_date = fields.Datetime(&amp;#34;Дата&amp;#34;) demo_widget.xml
&amp;lt;odoo&amp;gt; &amp;lt;data&amp;gt; &amp;lt;record model=&amp;#34;ir.ui.view&amp;#34; id=&amp;#34;wizard_form_view&amp;#34;&amp;gt; &amp;lt;field name=&amp;#34;name&amp;#34;&amp;gt;demo.wizard.form&amp;lt;/field&amp;gt; &amp;lt;field name=&amp;#34;model&amp;#34;&amp;gt;demo.wizard&amp;lt;/field&amp;gt; &amp;lt;field name=&amp;#34;arch&amp;#34; type=&amp;#34;xml&amp;#34;&amp;gt; &amp;lt;form string=&amp;#34;Form&amp;#34;&amp;gt; &amp;lt;group&amp;gt; &amp;lt;field name=&amp;#34;item_id&amp;#34;/&amp;gt; &amp;lt;field name=&amp;#34;start_date&amp;#34;/&amp;gt; &amp;lt;/group&amp;gt; &amp;lt;footer&amp;gt; &amp;lt;button special=&amp;#34;cancel&amp;#34; string=&amp;#34;Отмена&amp;#34;/&amp;gt; &amp;lt;/footer&amp;gt; &amp;lt;/form&amp;gt; &amp;lt;/field&amp;gt; &amp;lt;/record&amp;gt; &amp;lt;record model=&amp;#34;ir.</description>
    </item>
    
    <item>
      <title>Введение в Сlickhouse</title>
      <link>http://swe-notes.ru/post/clickhouse-started/</link>
      <pubDate>Wed, 01 Apr 2020 14:02:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/clickhouse-started/</guid>
      <description>Недавно у меня возникла потребность собирать некоторую аналитику на среднем количестве данных (20-30 млн. в сутки). И нужно было выбрать в чем хранить такие объемы, первый вариант у меня был Postgresql, но он делал аггреции не недостаточной скоростью и я решил попробовать Clickhouse от Yandex, так как она как раз разрабатывалась под эти цели.
Начало работы. Clickhouse устанавливается довольно просто, а также имеет превосходную документацию. Основное что надо знать для работы следующее: - в данной субд нет обновления - записываемые данные должны быть по максимуму денормализованы, так как хотя есть join но работают они в большинстве медленно и надо понимать когда и как их использовать - вставлять данные необходимо большими пачками иначе из-за внутренних особенностей вставка будет очень медленной.</description>
    </item>
    
    <item>
      <title>Сервис для проведения спортивных турниров</title>
      <link>http://swe-notes.ru/post/champair-promo/</link>
      <pubDate>Mon, 30 Mar 2020 14:02:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/champair-promo/</guid>
      <description>Введение Некоторое время назад у меня возникла необходимость автоматизировать проведение спортивных соревнований по единоборствам в ILMMA, в результате получилось данное web приложение.
Ниже в посте я хочу описать процесс его создания и с какими подводными камнями я столкнулся в процессе проектирования.
Обследование предметной области Итак, разработка началась с обследования предмета автоматизации а именно как это все происходит.
Первая стадия любого турнира это сбор заявок от участников. И тут возникла первая сложность, как их собирать централизовано, так как каналов поступления информации очень много: соц.</description>
    </item>
    
    <item>
      <title> Введение по linux epoll</title>
      <link>http://swe-notes.ru/post/epoll-intro/</link>
      <pubDate>Sun, 23 Feb 2020 20:31:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/epoll-intro/</guid>
      <description>Введение Данная заметка родилась в попытках разобраться с базовым принципом работы linux epoll, так как он часто используется в разных языках программирования для реализации асинхронности.
Все что написано ниже, сугубо мое понимание и оно не претендует на 100% точность, если кто-то оставит полезные примечания, то буду благодарен.
Файловые дескрипторы ОС Все процессы ссылаются на потоки ввода-вывода (IO) через дескрипторы. Каждый процесс поддерживает таблицу файловых дескрипторов, которые ему доступны.
Каждая запись в этой таблице состоит из флагов операций доступных дескриптору и указатель на базовую структуру ядра.</description>
    </item>
    
    <item>
      <title>Модель для взаимодействия с внешним источником данных в Odoo</title>
      <link>http://swe-notes.ru/post/odoo-custom-model/</link>
      <pubDate>Fri, 14 Feb 2020 14:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo-custom-model/</guid>
      <description>Недавно к меня возникла необходимость сделать модель, в которой данные должны браться не из PostgreSQL, а из произвольного хранилища, в моем случае это был кэш на Redis.
После небольших изысканий решение было найдено и им я бы хотел поделиться.
Определение методов для переопределения Первым шагом я выяснил какой метод отвечает за вывод данных в интерфейс.
Для этого я посмотрел в консоли браузера какой метод вызывается в момент запроса:
Данным методом оказался search_read.</description>
    </item>
    
    <item>
      <title>Знакомство с Julia</title>
      <link>http://swe-notes.ru/post/julia-web-app/</link>
      <pubDate>Wed, 25 Dec 2019 19:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/julia-web-app/</guid>
      <description>Введение Недавно появилось свободное время и я решил попробовать освоить что-нибудь новое. Мой выбор пал на язык программирования Julia, так как язык позиционируется как замена Python, R в области анализа данных, в которой есть полноценные параллельные вычисления (в отличие от Python, где есть GIL). Кроме того после изучения информации оказалось, что Julia может компилироваться в статическую библиотеку или бинарник (однако не все так радужно в действительности).
Для знакомства я придумал простенькое приложение, которое содержит url для получения данных данных из БД, агрегации их в приложении и вывод результат в виде json.</description>
    </item>
    
    <item>
      <title>Автоперенос текста в названии строк сводной таблицы в Odoo</title>
      <link>http://swe-notes.ru/post/pivot_wrap_odoo/</link>
      <pubDate>Fri, 01 Nov 2019 14:16:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/pivot_wrap_odoo/</guid>
      <description>Недавно мне потребовалось сделать отчет на основе сводной таблицы в Odoo 12, но из-за одно из названий строки было очень длинным и оказалось, что по-умолчанию ячейка сводной таблицы выравнивается по длинне всей этой строки. Меня такое поведение не устраивало, так как нужен был перенос слов и я начал искать решение.
Для переноса слов есть css свойство white-space, и если ему задать значение normal, то получится то поведение, которое мне было нужно.</description>
    </item>
    
    <item>
      <title>Простое приложение для Tarantool</title>
      <link>http://swe-notes.ru/post/tarantool-app/</link>
      <pubDate>Fri, 09 Aug 2019 22:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/tarantool-app/</guid>
      <description>Введение В последнее время на конференциях и в сети размещается не мало статей по работе с платформой Tarantool от Mail.ru Group. И недавное мне подвернулась задача где я смог его попробывать.
Задача заключалось в том, что получая телеметрию от транспортных средств мне нужно было хранить посление точки от каждой машины и отдавать их через REST API, для оперативного отображения на карте при обращении клиента.
Так как делать постоянные обновления записей (около 600 операций в секунду) в осносвной СУБД PosgtreSQL трудоемко (по причине MVCC и vauucum не успевает отрабатывать), я решил попробывать Tarantool для этой задачи, так как он имеет высокую скорость обновления и его можно сделать персистентым, что для меня было критическим условием.</description>
    </item>
    
    <item>
      <title>Работа с сокетом во Flutter</title>
      <link>http://swe-notes.ru/post/flutter-socket/</link>
      <pubDate>Wed, 10 Jul 2019 16:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/flutter-socket/</guid>
      <description>В прошлой статье я рассказывал о том, как сделать простое приложение по мониторингу на flutter. Но для полноты картины я решил описать как отправлять полученные координаты на сервер. Для передачи данных я решил использовать protobuf.
Создание protobuf схемы. Для того чтобы быть уверенными что данные в нашем приложении имеют строго определенный формат на нужна какая-то схема, при валидации которой сразу можно понять валидное сообщение или нет. Для текстовых форматов эта может быть XSD схема для XML или JSON схема для JSON.</description>
    </item>
    
    <item>
      <title>Приложение для работы с геоданными на Flutter</title>
      <link>http://swe-notes.ru/post/flutter-geopostal/</link>
      <pubDate>Fri, 05 Jul 2019 01:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/flutter-geopostal/</guid>
      <description>Недавно возникла необходимость сделать простое мобильное приложение для работы со своей геопозицией и отображением ее на карте. В одной из прошлых статей я написал как можно сделать простое мобильное приложение на flutter. Поэтому для текущей задачи я решил использовать его же.
Выбор библиотек Для определения геопозиции у flutter&amp;rsquo;а есть несколько библиотек, например location или geolocator. Подробнее с ними можно ознакомиться здесь. Я для себя выбрал location.
После выбора библиотеки для работы с локацией, нужно найти библиотеку для работы с картой для отображения геопозиции.</description>
    </item>
    
    <item>
      <title>Скрытие полей из списка фильтров и группировок в Odoo</title>
      <link>http://swe-notes.ru/post/odoo-hide-filter/</link>
      <pubDate>Sat, 29 Jun 2019 01:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo-hide-filter/</guid>
      <description>В последнее время у меня часто возникает потербность скрывать поля из списка фильтров и группировок Odoo. Для того чтобы каждый раз не искать как это сделать, решил написать эту заметку возможно кому-то тоже будет полезно.
Итак, чтобы скрыть поля из фильтров или группировки необходимо расширить метод fields_get у нашей модели:
from odoo import models, fields, api class OutModel(models.Model) name = fields.Char(&amp;#34;Name&amp;#34;) @api.model def fields_get(self, allfields=None, attributes=None): res = super(OutModel, self).fields_get(allfields, attributes) fields_to_hide = [&amp;#39;create_date&amp;#39;, &amp;#39;write_date&amp;#39;] for field in fields_to_hide: res[field][&amp;#39;selectable&amp;#39;] = False # выключаем видимость поля в фильтрах res[field][&amp;#39;sortable&amp;#39;] = False # выключаем видимость поля в группировке return res Соответственно в этом примере я скрыл служебные поля (дата создания и дата изменения) из фильтров и группировки.</description>
    </item>
    
    <item>
      <title>Обработка значения 0 в поле выбора в Odoo</title>
      <link>http://swe-notes.ru/post/odoo-custom-select/</link>
      <pubDate>Tue, 25 Jun 2019 16:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo-custom-select/</guid>
      <description>Недавно нактнулся на интересную особенность Odoo, которая касается поля типа Selection. Она заключается в том, что если в списке есть значение с ключом 0, то при выводе оно зануляется. Например, есть поле:
... status = fields.Selection([(0, &amp;#34;Начало&amp;#34;), (1, &amp;#34;Конец&amp;#34;)]) ... Так вот это поле при нахождении в таблице БД 0 в столбце status, в интерфейс выведет пустое значение, не строку &amp;ldquo;Начало&amp;rdquo;.
Такое поведение было для меня слегка неожиданным, но я подумал что оно связано с особенностью python и я полез смотерть исходники класса fields.</description>
    </item>
    
    <item>
      <title>Простое приложение на Flutter</title>
      <link>http://swe-notes.ru/post/flutter-first-app/</link>
      <pubDate>Mon, 06 May 2019 21:30:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/flutter-first-app/</guid>
      <description>Введение Появилось немного свободного времени и я решил сделать простенькое приложение для управления интернет-магазином на Flutter, так как давно хотел расширить свои познания в мобильной разработе, а flutter, на первый взгял, показался интересным фреймворком.
Немного теории Flutter — SDK с открытым исходным кодом для создания мобильных приложений от компании Google. (Wikipedia). Основным языком разработки является Dart
Общая архитектура выглядит так:
Верхний уровень реализует наборы виджетов(Widget), такие как виджеты темы оформления, виджеты элементов и т.</description>
    </item>
    
    <item>
      <title>Базовое описание работы с протоколом ЕГТС</title>
      <link>http://swe-notes.ru/post/protocol-egts/</link>
      <pubDate>Tue, 30 Apr 2019 11:57:46 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/protocol-egts/</guid>
      <description>В пердыдущей статье я обещал рассказать про протокол EGTS. Это один из множества протоколов, который применятся передачи телеметрических данных. Особенность его в том, что он законодательно закреплен на территории Российской Федерации.
Для описания протокола используется в основом 2 докумета:
ГОСТ Р 54619 - 2011 Приказ №285 Минтранса России от 31 июля 2012 года Первый документ, содержит описание межсетевого взаимодействия и структуры пакетов авторизации (об этом ниже).
Второй документ описывает структуры пакетов, которые содержат непосредственно данные, такие как широта, долгота, скорость, состояния подключенных датчиков, уровень топлива и т.</description>
    </item>
    
    <item>
      <title>Кастомизация заголовка в Odoo</title>
      <link>http://swe-notes.ru/post/odoo-custom-title/</link>
      <pubDate>Wed, 20 Mar 2019 18:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo-custom-title/</guid>
      <description>Мини заметка, как можно кастомизировать заголовк страницы в Odoo, а также как скрыть футер в боковом меню.
Скрыть футер бокового меню Нужно изменить отнаследовать шаблон web.menu_secondary, и удалить класс o_sub_menu_footer:
&amp;lt;template id=&amp;#34;menu_secondary_hide_footer&amp;#34; inherit_id=&amp;#34;web.menu_secondary&amp;#34; name=&amp;#34;Submenu hide footer&amp;#34;&amp;gt; &amp;lt;xpath expr=&amp;#34;//div[@class=&amp;#39;o_sub_menu_footer&amp;#39;]&amp;#34; position=&amp;#34;replace&amp;#34;/&amp;gt; &amp;lt;/template&amp;gt; Заменить слово Odoo в заголовке страницы Для этого надо отнаследовать компонент WebClient и изменить его следующим образом:
odoo.define(&amp;#39;theme_customize.WebClient&amp;#39;, function (require) { &amp;#34;use strict&amp;#34;; var WebClient = require(&amp;#39;web.WebClient&amp;#39;); return WebClient.include({ init: function(parent) { this.</description>
    </item>
    
    <item>
      <title>Мини мониторинг на базе Odoo</title>
      <link>http://swe-notes.ru/post/odoo-socket-map/</link>
      <pubDate>Thu, 14 Mar 2019 17:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo-socket-map/</guid>
      <description>Введение В прошлой статья я писал про то как быстро сделать websocket на Go. Ниже я объясню как его можно использовать в связке с OpenLayers - популярной библиотеки для работы с картой. Также я покажу как это можно встроить в Odoo - свободную ERP систему.
Таким образом на выходе получим мини систему мониторинга транспорта.
Создание модуля Odoo Для начала нужно создать новый модуль Odoo. Для этого достаточно запустить команду:
odoo-bin scaffold &amp;lt;имя модуля&amp;gt; &amp;lt;папка с модулем&amp;gt; Данная команда создаст стуруктуру папок и некоторые файлы.</description>
    </item>
    
    <item>
      <title>Реализация websocket на Go</title>
      <link>http://swe-notes.ru/post/go_websocket/</link>
      <pubDate>Fri, 01 Mar 2019 11:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/go_websocket/</guid>
      <description>Введение Иногда воникают задачи отобразить какие-либо изменения на клиенте, которые произошли на сервере, например при сборе телеметрии, отображать перемещение объекта или изменение его показателей. Для этой задачи часто используют протокол WebSocket.
В статье я хочу показать как реализовать websocket на Go, который, для реалистичности, будет отдавать GeoJSON.
Реализация Для реализации веб сокета будут использоваться следующие библиотеки
Echo - минималистичный web фреймворк. Websocket - Реализация протокола websocket на Go. go.geojson - декодер GeoJSON на Go Код сокета приведен ниже:</description>
    </item>
    
    <item>
      <title>Реализация iframe для Odoo</title>
      <link>http://swe-notes.ru/post/odoo_iframe/</link>
      <pubDate>Tue, 15 Jan 2019 14:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo_iframe/</guid>
      <description>Введение В статье я постараюсь описать создание модуля для Odoo который позволит внедрить страницу iframe и пункт меню к нему. С данной задачей я столкнулся, когда меня попросили встраиваить мониторинг на базе Grafana, в стандартный интерфейс Odoo
Я много лазил по интернету но приемлемое решение я нашел только в одном стороннем модуле, и чтобы его не потерять решил завиксировать это здесь.
Реализация модуля Для начала создадим модуль со следующей структурой (базовой для Odoo):</description>
    </item>
    
    <item>
      <title>Сравнение построения сводных таблиц в PostgreSQL и Pandas</title>
      <link>http://swe-notes.ru/post/pivot_test/</link>
      <pubDate>Fri, 12 Oct 2018 13:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/pivot_test/</guid>
      <description>Введение В данный момент я работаю над системой отчетности, которая должна аггрегировать большое количество данных, причем аггрегировать таким образом, что нужно строить сводные таблицы. Раньше задачи подобно рода я делал с помощью Pandas, но недавно я узнал что это можно делать сразу в PostgreSQL c помощью модуля tablefunc и я решил проверить что будет оптимальней для моего случая.
Тестирование Я написал следующий тест для сравнения производительности:
import pandas import sqlalchemy from pandas.</description>
    </item>
    
    <item>
      <title>Преобразование координат из WGS84 в МСК-50 с помощью GO</title>
      <link>http://swe-notes.ru/post/msk_coord/</link>
      <pubDate>Sun, 23 Sep 2018 11:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/msk_coord/</guid>
      <description>Недавно возникла задача перевода координат из системы WGS84 в Московскую систему координат (МГГТ). Сложность была в том, что в текущий момент для этих целей использовалась библиоткета на Fortran, которая через обертку вызывалась из Python. В данный момент я начал переход на Go и тянуть данную библиотеку очень не хотелось.
Одни мой знакомый, сказал что для этого можно использовать библиотеку Proj4, так как для нее есть go биндинг go-proj-4.
Итоговая функция приведена ниже:</description>
    </item>
    
    <item>
      <title>Адаптивная модель экспоненциального сглаживания</title>
      <link>http://swe-notes.ru/post/exp_smoothing/article/</link>
      <pubDate>Mon, 14 May 2018 18:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/exp_smoothing/article/</guid>
      <description>Введение В данной статье буду рассматривать модель экспоненциального сглаживания временного ряда. Эта модель является одной из самых распространенных моделей для прогнозирования значений временного ряда не содержащего трендов и сезонности. В статье будет рассмотрена теоретическая часть, практика, а также реализация этой модели на одном из языков программирования.
Теоретическая часть. Экспоненциальное сглаживание один из распространенных приемов выравнивания временного ряда. Данный прием основан на расчете экспоненциальных средних, и является простейшей адаптивной моделью.
Модель вычисляется рекурентной формулой:</description>
    </item>
    
    <item>
      <title>Настройка DroneCI &#43; Odoo</title>
      <link>http://swe-notes.ru/post/droneci-odoo/</link>
      <pubDate>Sun, 18 Mar 2018 16:06:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/droneci-odoo/</guid>
      <description>В предыдущей статье я описал как настроить собственный сервер разработки. Недавно мне потребовалось привязать к нему проект на Odoo и я столкунулся с некоторыми трудностями, которые нужно зафиксировать.
Файл для конфигурации .drone.yml для конфигурации Drone будет следующий:
workspace: base: /mnt path: extra-addons pipeline: build: image: kuznetsovin/drone-odoo commands: - sleep 60 - odoo -d sport_event --db_host postgres -r odoo -w odoo -i sport_event --stop-after-init services: postgres: image: postgres:10 environment: - POSTGRES_USER=odoo - POSTGRES_PASSWORD=odoo clone: git: image: plugins/git depth: 50 environment: - DRONE_NETRC_MACHINE=&amp;lt;git_server_address&amp;gt; - DRONE_NETRC_USERNAME=&amp;lt;user_key_from_droneci_db&amp;gt; - DRONE_NETRC_PASSWORD=x-oauth-basic Как видно я беру не стандартный образ Odoo из DockerHub, а сделал свой кастомизированный, т.</description>
    </item>
    
    <item>
      <title>Настройка собственного сервера для разработки</title>
      <link>http://swe-notes.ru/post/self-server-delpoy/</link>
      <pubDate>Sun, 11 Feb 2018 16:06:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/self-server-delpoy/</guid>
      <description>Недавно я принял решение перенести все свои разработки в персональный репозиторий, так как несколько моих проектов находятся в приватных репозиториях на bitbucket, а он после Нового года некоторое время работал нестабильно.
Сначала я рассматривал GitLab, но он оказался слишком требователен к ресурсам, а за них переплачивать хостеру мне не хотелось. И поэтому я принял решение собирать все по частям.
Компоненты В качестве системы контроля версий, в данный момент, использую git, поэтому после некоторых поисков я нашел web сервис Gogs.</description>
    </item>
    
    <item>
      <title>Заметки по Go</title>
      <link>http://swe-notes.ru/post/go_question/</link>
      <pubDate>Sat, 06 Jan 2018 13:10:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/go_question/</guid>
      <description>Введение В целях систематизации знаний по Go, решил завести данный пост. Информация представлена в виде небольших программ и их разбора. Тиакие задачи могут вам встретиться на собеседованиях. Я планирую дополнять его по мере поступления новых задач.
Вопросы Почему программа отработала не правильно, и как это исправить. package main import ( &amp;#34;fmt&amp;#34; ) type Person struct { FirstName string LastName string } func (p Person) Married(husband Person) { p.LastName = husband.LastName } func main() { eva := Person{&amp;#34;Eva&amp;#34;, &amp;#34;First&amp;#34;} adam := Person{&amp;#34;Adam&amp;#34;, &amp;#34;Second&amp;#34;} eva.</description>
    </item>
    
    <item>
      <title>Настройка emacs для проверки орфографии</title>
      <link>http://swe-notes.ru/post/emacs_rus_spelling/</link>
      <pubDate>Fri, 03 Nov 2017 13:31:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/emacs_rus_spelling/</guid>
      <description>Сегодня решил настроить в своем Emacs проверку орфографии, и чтобы не забыть как я это сделал решил написать данную заметку.
Сначала я попробовал hunspell, но он у меня не подключился и я решил попробовать aspell, он заработал практически сразу, поэтому решил его оставить. Все описанное ниже я делал под Mac OS 10.12.
Итак для начала надо установить aspell с русским словарем для этого я воспользовался Homebrew.
brew install aspell --without-lang-de --without-lang-fr --without-lang-es --with-lang-ru Данная команда означает что aspell устанавливается без словарей для немецкого и французского языка, но с русским словарем.</description>
    </item>
    
    <item>
      <title>Работа с картами тахографа.</title>
      <link>http://swe-notes.ru/post/driver_tachograph_card/</link>
      <pubDate>Mon, 28 Aug 2017 11:46:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/driver_tachograph_card/</guid>
      <description>В данной статье я коротко постараюсь описать, что такое карты тахографа, структру данных на карте, и как считать и разобрать информацию с неё. Все примеры будут рассматриваться на карте водителя, но справедливы и для остальных.
Что такое карта тахографа. С помощью неё в Европе и РФ контролируют режим работы и отдыха водителей, с целью не нарушения им установленных законом норм.
С технической точки зрения это смарт-карта на которую тахограф записывает некоторые данные, о том как водитель управлял транспортным средством, были ли сбои в работе тахографа и т.</description>
    </item>
    
    <item>
      <title>Создание телеграм бота на Rust</title>
      <link>http://swe-notes.ru/post/rust_telegram_bot/</link>
      <pubDate>Wed, 16 Aug 2017 17:06:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/rust_telegram_bot/</guid>
      <description>В целях знакомства с Rust я решил сделать Телеграм Бота для чтения своей ленты в Inoreader.
Подготовка Для начала нужно создать новое приложение в Inoreader и создать нового бота в Телеграм.
После этих действий в нашем распоряжении будет 2 ключа один для работы с Inoreader, другой для работы с Телеграм. Теперь можно приступить непосредственно к созданию бота.
Создание модуля настроек Для начала инициализируем новый проект с помощью cargo:
cargo init --bin inobot Первым этапом будет создание модуля настройек для нашего бота.</description>
    </item>
    
    <item>
      <title>Сравнение Odoo и Django</title>
      <link>http://swe-notes.ru/post/odoo_vs_django/</link>
      <pubDate>Fri, 14 Jul 2017 15:06:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo_vs_django/</guid>
      <description>Введение В данной статье я хочу обобщить тот опыт, который я получил при работе с данными фреймворками ( хотя odoo этот целая платформа). У меня часто спрашивают, то из этой пары лучше или хуже, на что я отвечаю, что все зависит от проекта. Я посарюсь описать плюсы и минусы, с которыми я столкнулся при работе с ними.
Надо отметить, что сравнивать платформу и фреймворк не всем корректно, но в области бизнес-приложений наши конкуренты часто пересекаются.</description>
    </item>
    
    <item>
      <title>Мои мысли о паттернах проектирования</title>
      <link>http://swe-notes.ru/post/design_pattern/</link>
      <pubDate>Mon, 10 Jul 2017 18:06:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/design_pattern/</guid>
      <description>Недавно я прочитал книгу Gof &amp;ldquo;Паттерны проектирования&amp;rdquo; и хотел бы поделиться своими мыслями на ее счет.
Книга является классикой и предлагает варианты решения проблемы написания кода, который бы был минимально связан и хорошо расширяемый.
В качестве примера приводится создание текстового редактора с GUI. Так как для объектно-ориентированного подхода графические приложения являются лучшей демонстрацией.
Порождающие паттерны абстрактная фабрика - интерфейс для создания семейства связанных объектов, как правило реализуется помощью абстрактных методов (см.</description>
    </item>
    
    <item>
      <title>Проверка подписи КриптоПро на Python</title>
      <link>http://swe-notes.ru/post/cryptopro-python/</link>
      <pubDate>Mon, 05 Jun 2017 18:06:29 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/cryptopro-python/</guid>
      <description>Введение. В одной из поддерживаемых мной систем цифровая подпись сообщений проверялась с помощью КриптоПро CSP и библиотека отвечающая за это функцию периодически падала с ошибкой. Библиотека эта писалась в спешке и не мной, поэтому я решил переделать ее &amp;ldquo;по-человечески&amp;rdquo; и оформить в виде python модуля. Ниже я опишу процесс разработки и опишу с какими трудностями я столкнулся.
Теоритическая часть. Для того чтобы проверить подпись какого-то конкретного сообщения на необходимо само сообщение с подписью, а также цепочка сертификатов, которые помогут проверить данную подпись.</description>
    </item>
    
    <item>
      <title>Заметка по работе с gdb</title>
      <link>http://swe-notes.ru/post/gdb-notes/</link>
      <pubDate>Wed, 24 May 2017 15:29:14 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/gdb-notes/</guid>
      <description>GDB - один из лучших отладнчиков, доступный на всех платформах, который умеет отлаживать программы на многих языках таких как С, С++, Go, Rust и многих других. Также его можно использовать для реверс-инженеринга бинарных файлов. Для себя я решил собрать в эту заметку его основные команды.
Установка Во многих Linux дистрибутивах он идет из коробки, а вот на Mac OS надо прибегрунуть к небольшому &amp;ldquo;шаманству&amp;rdquo;.
Сначала нужно установить сам GDB(я предпочитаю использовать brew):</description>
    </item>
    
    <item>
      <title>Резюме</title>
      <link>http://swe-notes.ru/cv/</link>
      <pubDate>Mon, 22 May 2017 12:08:42 +0300</pubDate>
      
      <guid>http://swe-notes.ru/cv/</guid>
      <description>Имя: Игорь Кузнецов
E-mail: kuznetsovin@gmail.com
Дата рождения: 1987
Блог: http://www.swe-notes.ru
GOST-group Архитектор/Ведущий разработчик Python/Go
Обязанности:
Проектирование и разработка геоинформационных систем и систем сбора телеметрических данных (Python, Go, PostgreSQL, Redis, RabbitMQ Geoserver, OSRM); Управление командой из 5 человек; Архитектор инфраструктурных проектов (проекты по интеграции данных, IoT); Разработка клиентов для протоколов Modbus, IEC104, EGTS; Переговоры c заказчиками и анализ требований; Работа с унаследованным кодом. ТрайМАКтех Ведущий разработчик Python/Go
Обязанности:
Проектирование и разработка системы тахографического контроля карт водителя (Go, Python, PostgeSQL, JavaScript); Проектирование и разработка клиента для чтения смарт-карта (Go, Python, PyQT); Разработка ERP систем под заказ на базе Odoo (Python); ФГУП НТЦ &amp;ldquo;Атлас&amp;rdquo; Разаботчик Python</description>
    </item>
    
    <item>
      <title>Услуги</title>
      <link>http://swe-notes.ru/service/</link>
      <pubDate>Mon, 22 May 2017 12:08:42 +0300</pubDate>
      
      <guid>http://swe-notes.ru/service/</guid>
      <description>Занимаюсь разработкой различного программного обеспечения на заказ:
Мобильные приложения Боты для месседжеров Парсеры сайтов Написание VBA макросов для автоматиции чего-либо Интернет-магазины и внутренние порталы Системы мониторинга транспорта CRM и ERP системы Кастомизация и внедрение платформы Odoo Примеры проектов:
Приемщик телеметрических пакетов по протоколу ЕГТС Приемщик телеметрических пакетов по протоколу Galileosky Считыватель карт тахографа и их разбор Сервис для проведения спортивных турниров Система мониторинга транспорта на базе Odoo Интернет-магазин мыла ручной работы SoapCollection с управлением через мобильное приложение.</description>
    </item>
    
    <item>
      <title>Контакты</title>
      <link>http://swe-notes.ru/contacts/</link>
      <pubDate>Sun, 21 May 2017 21:17:23 +0300</pubDate>
      
      <guid>http://swe-notes.ru/contacts/</guid>
      <description>E-mail: me@swe-notes.ru
Telegram: @kuznetsovin</description>
    </item>
    
    <item>
      <title>Сравнение производительности иерархических моделей Django</title>
      <link>http://swe-notes.ru/post/sql-tree-perform/</link>
      <pubDate>Sun, 21 May 2017 19:27:38 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/sql-tree-perform/</guid>
      <description>Добрый день, уважаемые читатели. Сегодняшняя статья будет посвящена сравнению моделей работы с иерархическими данными в PostgreSQL, через Django приложение. В статья я специально не использую чистую реализацию в базе данных, т. к. меня интересует именно производительность в среде, приближенной к боевой.
Все тесты проводились на моих данных и результаты являются актуальными именно для этих данных, на ваших данных результат может отличаться от полученных в статье.
Модели реализации иерархических структур в БД Для работы с такими структурами в PostgreSQL могут использоваться следующие модели:</description>
    </item>
    
    <item>
      <title>Создание модуля Python на Go</title>
      <link>http://swe-notes.ru/post/go-python-module/</link>
      <pubDate>Fri, 12 May 2017 15:40:02 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/go-python-module/</guid>
      <description>Введение В последнее время я увлёкся изучение Go - современного языка програмирования от Google. Первые впечатления от его использования очень приятные и постепенно некоторые свои сервисы я начал переводить с Python на него.
Язык довольно простой и в плане перехода с Python особого дискомфорта не возникает. Cпособ обработок ошибок в Go мне понравился даже больше, чем исключения, но это вкусовщина. Кроме того Go является компилируемым и строго типизированным, что позволяет отловить многие ошибки на этапе компиляции.</description>
    </item>
    
    <item>
      <title>Настройка асинхронной потоковой рекпликации PostgreSQL</title>
      <link>http://swe-notes.ru/post/postgres_repl/</link>
      <pubDate>Mon, 06 Feb 2017 09:35:07 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/postgres_repl/</guid>
      <description>В предыдущей статье по масштабированию Odoo, не был рассмотрен вопрос рекпликации данных БД. Поэтому для восполения этого я описанл процемм настройки простой репликации ниже.
Типы репликаций Рекпликация в PostgreSQL бывает двух видов:
hot standby - репликация может и читать и писать warm standby - репликация может только читать Так же репликации могут быть асинхронными и синхронными. Более подробно можно прочитать [1].
Про рекпликацию данных можно почитать здесь.
Далее речь пойдет про hot standby.</description>
    </item>
    
    <item>
      <title>Масштабирование Odoo</title>
      <link>http://swe-notes.ru/post/odoo_ha/</link>
      <pubDate>Mon, 30 Jan 2017 10:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/odoo_ha/</guid>
      <description>В данной статье я постараюсь описать как можно запустить Odoo на нескольких серверах, какие проблемы могут встретиться и как их решить. Все работы проводятся на виртуальных машинах VirtualBox, с установленной ОС Debian 8.7.
Настройка VirtualBox Для экспериментов была настроена сеть NAT в VirtualBox, со статическими ip адресами.
Для настройки адреса у конткретного сервера в файлике /etc/network/interfaces надо задать следующие параметры:
iface &amp;lt;interface&amp;gt; inet static address &amp;lt;static IP&amp;gt; (e.g. 10.0.2.7) netmask 255.</description>
    </item>
    
    <item>
      <title>Конспект по ГИС</title>
      <link>http://swe-notes.ru/post/abstract_gis/</link>
      <pubDate>Sun, 27 Nov 2016 18:06:36 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/abstract_gis/</guid>
      <description>Данная заметка является конспектом по ГИС системам, описаны основные понятия и термины.
Итак, географические данные, используемые в ГИС-приложении, бывают растровые и векторные, кроме это такие данные могут быть объединены с непространственными данными (атрибутами). Векторные данные хранятся в виде последовательностей координатных пар (X,Y). Растровые данные хранятся в виде сетки значений.
Векторные данные являются способом представления объектов реального мира в среде ГИС. Объект – это все, что можно увидеть на ландшафте. Векторные объекты имеют атрибуты, состоящие из текстовой и числовой информации, описывающей каждый объект.</description>
    </item>
    
    <item>
      <title>Уствновка и настройка OSRM</title>
      <link>http://swe-notes.ru/post/insatll_and_setup_osrm/</link>
      <pubDate>Thu, 24 Nov 2016 16:52:02 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/insatll_and_setup_osrm/</guid>
      <description>OSRM (Open Source Routing Machine) - проект, с открытым исходным кодом, который позволяет развернуть у себя на сервере, свой собственный сервис построения маршрутов.
Установка Для начала устанавливаем нужные пакеты:
sudo apt-get install git libboost-dev gcc g++ make cmake libstxxl-dev libxml2-dev libbz2-dev zlib1g-dev libzip-dev libboost-filesystem-dev libboost-thread-dev libboost-system-dev libboost-regex-dev libboost-program-options-dev libboost-iostreams-dev libgomp1 libpng-dev libprotobuf-dev protobuf-compiler liblua5.1-0-dev libluabind-dev pkg-config libosmpbf-dev libboost-test1.55-dev libtbb-dev libexpat1-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev Далее клонируем репозиторий Project-OSRM:
git clone https://github.</description>
    </item>
    
    <item>
      <title>Перепрошивка модема ZTE MF910 (MegaFon MR150-2)</title>
      <link>http://swe-notes.ru/post/update_firmware_zte_mf910/</link>
      <pubDate>Sat, 27 Aug 2016 16:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/update_firmware_zte_mf910/</guid>
      <description>Введение Сегодня захотел разлочить свой мегафоновский роутер, для работы с другими sim-картами, т. к. появились более выгодные тарифы у других операторов. В целях систематизации моих находок по разлочке и перепрошивке данного модема решил собрать их в этом посте.
Сразу надо отметить, что перепрошивка и &amp;ldquo;разлочка&amp;rdquo; это два разных процесса и они могут быть выполнены совместно или по отдельности.
Итак содержание поста:
Полный dump устройства Восстановление dump&amp;rsquo;a Перепрошивка Установка патча с ssh и scp Замена config файла после прошивки Снятие sim-lock Перевод девайса в factory mode Полезные ссылки Полный dump Предлагаемая &amp;ldquo;подготовительная часть&amp;rdquo; процедуры (она используется, например, и при разблокировке) немного изменена по сравнению с вариантами, описанными ранее.</description>
    </item>
    
    <item>
      <title>Написание контроллера для OpenERP</title>
      <link>http://swe-notes.ru/post/openerp-controller/</link>
      <pubDate>Mon, 29 Feb 2016 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/openerp-controller/</guid>
      <description>Задача После довольно продолжительной работы с OpenERP, я понял, что это довольно гибкая система для очень широкого круга задач. Но у нее есть один, на мой взгляд, недостаток - в ней нет встроенное хорошей аналитики. Да есть возможность стоить графики и отчеты, но это не совсем такая аналитика, как мне понадобилась.
Поэтому, после некоторых размышлений, я решил связать OpenERP c Cubes Framework (это фрейворк для создания OLAP кубов на Python). Тем более что для него существует готовый простомотрщик CubesViewer, который реализован на html+js.</description>
    </item>
    
    <item>
      <title>Экспорт русских текстов в PDF из Emacs org-mode</title>
      <link>http://swe-notes.ru/post/org_mode_rus_latex/</link>
      <pubDate>Wed, 17 Feb 2016 12:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/org_mode_rus_latex/</guid>
      <description>В настоящее время я стал активно пользоваться редактором Emacs, про него уже написано много статей с разными мнениями, но основная его &amp;ldquo;киллер фича&amp;rdquo; в режиме org-mode.
Если коротко, то в этом режиме можно много что делать, например: составлять список задач, писать различные тексты (все статьи блога сделаны в нем), некоторые даже ведут проекты в этом режиме. Заметки и тексты сделанные в этом режиме можно сразу же экспортировать в большое число форматов: HTML, LaTeX, PDF, Markdown и другие.</description>
    </item>
    
    <item>
      <title>Настройка ГОСТ для OpenSSL и работа с ним</title>
      <link>http://swe-notes.ru/post/gost-openssl/</link>
      <pubDate>Fri, 05 Feb 2016 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/gost-openssl/</guid>
      <description>Недавно на работе возникла необходимость настроить генерацию ключевой пары и запроса на сертификат x.509 с помощью OpenSSL и алогритмов ГОСТ. После изучения материала по данной теме было найдено определенное решение и построен соответсвующий алгоритм действий, который и хотелось бы описать.
Настройка OpenSSL Итак для генерации ключей по ГОСТ у OpenSSL идет библиотека libgost.so, которая поставляется с OpenSSL, не не входит в конфигурацию по умолчанию. Подробнее можно прочитать здесь. В кратце порядок дествий следующий:</description>
    </item>
    
    <item>
      <title>Установка OperERP 7 на Astra Linux</title>
      <link>http://swe-notes.ru/post/erp_astra_install/</link>
      <pubDate>Thu, 04 Feb 2016 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/erp_astra_install/</guid>
      <description>Описание настраиваемы систем OpenERP (теперь Odoo) это свободно-распространяемая ERP и CRM система с большим количеством готовых модулей. При необходимости модули к ней можно дописывать самому. Система написана на Python 2.7 и, соответственно на нем же и создаются модули для нее.
Astra Linux - это отечественный дистрибутив на основе Debian, сертифицированный по ФСБ и ФСТЭК.
Пошаговая установка Итак, шаги установки следующие:
Установка astra linux Добавляем репозиторий яндекса в apt: deb http://mirror.yandex.ru/debian/ stable main contrib non-free Добавить pgp ключ для репозитория (необязатльно): apt-get install debian-archive-keyring Устанавливаем нужные пакеты: apt-get install debian-archive-keyring apt-get install python-dateutil python-feedparser python-gdata python-ldap python-libxslt1 python-lxml python-mako \ python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab \ python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml \ python-zsi python-docutils python-psutil bzr wget python-unittest2 python-mock python-jinja2 python-pip python-dev libxslt-dev mercurial Обновляем пакет gdata и lxml: sudo pip install gdata lxml --upgrade Создать пользователя postgres: sudo su - postgres createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt openerp В файле pg_hba.</description>
    </item>
    
    <item>
      <title>Интеграция MS Excel и Python</title>
      <link>http://swe-notes.ru/post/excel_with_python/</link>
      <pubDate>Mon, 04 Aug 2014 10:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/excel_with_python/</guid>
      <description>Добрый день, уважаемые читатели.
В сегодняшней статье я хотел бы, как можно подробнее, рассмотреть интеграцию приложений Python и MS Excel. Данные вопрос может возникнуть, например, при создании какой-либо системы онлайн отчетности, которая должна выгружать результаты в общепринятый формат ну или какие-либо другие задачи. Также в статье я покажу и обратную интеграцию, т.е. как использовать функцию написанную на python в Excel, что также может быть полезно для автоматизации отчетов.
Работаем с файлами MS Excel на Python Для работы с Excel файлами из Python мне известны 2 варианта:</description>
    </item>
    
    <item>
      <title>Организация OLAP куба средствами Python</title>
      <link>http://swe-notes.ru/post/olap_python/</link>
      <pubDate>Wed, 14 May 2014 17:20:02 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/olap_python/</guid>
      <description>Добрый день, уважаемые читатели. Сегодня я расскажу вам о том, как можно построить простенькую систему анализа данных на Python. В этом мне помогут framework cubes и пакет cubesviewer.
Сubes представляет собой framework&amp;rsquo;ом для работы с многомерными данными с помощью Python. Кроме того он включает в себя OLAP HTTP-сервер для упрощенной разработки приложений отчетности и общего просмотра данных.
Сubesviewer представляет собой web-интерфейс для работы с вышеуказанным сервером.
Установка и настройка cubes Для начала надо установить библиотеки, необходимые для работы пакета:</description>
    </item>
    
    <item>
      <title>Основы парсинга с помощью Python&#43;lxml</title>
      <link>http://swe-notes.ru/post/ufc_stats_parse/</link>
      <pubDate>Sun, 20 Apr 2014 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/ufc_stats_parse/</guid>
      <description>Добрый день, уважаемые читатели.
В сегодняшней статье я покажу основы разбора HTML разметки страниц с помощью библиотеки lxml для Python.
Если вкратце, то lxml это быстрая и гибкая библиотека для обработки разметки XML и HTML на Python. Кроме того, в ней присутствует возможность разложения элементов документа в дерево. В статье я постараюсь показать, насколько просто ее применение на практике.
Выбор цели для парсинга Т.к. я активно занимаюсь спортом, в частности БЖЖ мне захотелось посмотреть статисту по болевым приемам во все проведенных турнирах мировых турнирах по MMA.</description>
    </item>
    
    <item>
      <title>Построение модели SARIMA с помощью Python&#43;R</title>
      <link>http://swe-notes.ru/post/sarima_pedict/</link>
      <pubDate>Mon, 27 Jan 2014 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/sarima_pedict/</guid>
      <description>Введение Добрый день, уважаемые читатели.
После написания предыдущего поста про анализ временных рядов на Python, я решил исправить замечания, которые были указаны в комментариях, но при их исправлении я столкнулся с рядом проблем, например при построении сезонной модели ARIMA, т.к. подобной функции а пакете statsmodels я не нашел. В итоге я решил использовать для этого функции из R, а поиски привели меня к библиотеке rpy2 которая позволяетиспользовать функции из библиотек упомянутого языка.</description>
    </item>
    
    <item>
      <title>Анализ временных рядов с помощью python</title>
      <link>http://swe-notes.ru/post/time_series_analisys/</link>
      <pubDate>Tue, 24 Dec 2013 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/time_series_analisys/</guid>
      <description>Добрый день, уважаемые читатели.
В сегодняшней статье, я попытаюсь описать процесс анализа временных рядов с помощью python и модуля statsmodels. Данный модуль предоставляет широкий набор средств и методов для проведения статистического анализа и эконометрики.
Для примера взяты реальные данные по товарообороту одного из складских комплексов Подмосковья. Приблизительный список шагов для анализа можно посмотреть здесь.
Загрузка и предварительная обработка данных Для начала загрузим данные и посмотрим на них:
from pandas import read_csv, DataFrame import statsmodels.</description>
    </item>
    
    <item>
      <title>Пример решения задачи множественной регрессии с помощью Python</title>
      <link>http://swe-notes.ru/post/energy_efficiency/</link>
      <pubDate>Mon, 16 Dec 2013 16:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/energy_efficiency/</guid>
      <description>Введение Добрый день, уважаемые читатели.
В прошлых статьях, на практических примерах, мной были показаны способы решения задач классификации (задача кредитного скоринга) и основ анализа текстовой информации (задача о паспортах). Сегодня же мне бы хотелось коснуться другого класса задач, а именно восстановления регрессии. Задачи данного класса, как правило, используются при прогнозировании.
Для примера решения задачи прогнозирования, я взял набор данных Energy efficiency из крупнейшего репозитория UCI. В качестве инструментов по традиции будем использовать Python c аналитическими пакетами pandas и scikit-learn.</description>
    </item>
    
    <item>
      <title>Введение в анализ текстовой информации с помощью Python и методов машинного обучения</title>
      <link>http://swe-notes.ru/post/tkc_pasport_quest/</link>
      <pubDate>Tue, 10 Dec 2013 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/tkc_pasport_quest/</guid>
      <description>Введение Добрый день, уважаемые читатели.
Сегодня я продолжу рассказ о применении методов анализа данных и машинного обучения на практических примерах. В прошлой cтатье мы с вами разбирались с задачей кредитного скоринга. Ниже я попытаюсь продемострировать решение другой задачи с того же турнира, а именно &amp;ldquo;Задачи о паспортах&amp;rdquo; (Задание №2).
При решении будут показаны основы анализа текстовой информации, а также ее кодирование для построения модели с помощью Python и модулей для анализа данных (pandas, scikit-learn, pymorphy).</description>
    </item>
    
    <item>
      <title>Решение задачи кредитного скоринга на примере клиентов ТКС</title>
      <link>http://swe-notes.ru/post/tkc_bank_predict_credit/</link>
      <pubDate>Sun, 01 Dec 2013 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/tkc_bank_predict_credit/</guid>
      <description>Введение Добрый день, уважаемые читатели.
Недавно, бродя по просторам глобальной паутины, я наткнулся на турнир, который проводился банком ТКС в начале этого года. Ознакомившись с заданиями, я решил проверить свои навыки в анализе данных на них.
Начать проверку я решил с задачи о скоринге (Задание №3). Для ее решения я, как всегда, использовал Python с аналитическими модулями pandas и scikit-learn.
Описание данных и постановка задачи Банк запрашивает кредитную историю заявителя в трех крупнейших российских кредитных бюро.</description>
    </item>
    
    <item>
      <title>Введение в анализ данных с помощью python на примере задачи про Титаник</title>
      <link>http://swe-notes.ru/post/titanic_test_post/</link>
      <pubDate>Thu, 14 Nov 2013 13:26:13 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/titanic_test_post/</guid>
      <description>Задача про спасенных с &amp;ldquo;Титаника&amp;rdquo;, имеет большую популярность среди людей, только начинающих заниматься анализом данных и машинным обучением.
Итак суть задачи состоит в том, чтобы с помощью методов машинного обучения построить модель, которая прогназировала бы спасется человек или нет. К задачи прилагаются 2 файла: train.csv - набор данных на основании которого будет строиться модель (обучающая выборкаtest.csv - набор данных для проверки модели
Для анализ понадобятся модули Pandas и sklearn. С помощью Pandas мы проведем начальный анализ данных, а sklearn поможет в вычислении прогнозной модели.</description>
    </item>
    
    <item>
      <title>Строим простую картограмму Pandas&#43;Vincent</title>
      <link>http://swe-notes.ru/post/vincent_pandas/</link>
      <pubDate>Sun, 20 Oct 2013 18:05:51 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/vincent_pandas/</guid>
      <description>Добрый день, уважаемые читатели.
В прошлой статье было описано ввдение в визулизацию данных с Pandas и matplotlib. Сегодня же хотелось бы показать еще один способ отображения результатов анализа с помощью Vincent, который так же очень просто интегрируется с Pandas, хотя и займет это чуть больше действий, чем в случае с matplotlib.
Введение Vincent - это модуль предназначенный для трасляции данных из python в JavaScript библиотеки для визуализации D3js и Vega, которые в свою очередь дают большие возможности для интерактивной визуализации данных.</description>
    </item>
    
    <item>
      <title>Введение в визуализацию данных при анализе с помощью Pandas</title>
      <link>http://swe-notes.ru/post/matplotlib_pandas/</link>
      <pubDate>Mon, 14 Oct 2013 17:36:50 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/matplotlib_pandas/</guid>
      <description>Доброго времени суток, уважаемые читатели.
Как обещалось в предыдущей статье, сегодня я продолжу рассказ о модуле pandas и анализе данных на языке Python. В данной статье хотелось бы затронуть тему быстрой визуализации данных результатов анализа. В этом нам помогут библиотека для визуализации данных matplotlib и среда разработки Spyder.
Среда разработки Итак, как мы увидели в прошлый раз, pandas обладает широким возможностями для анализа данных, но полностью раскрыть их позволяет интерактивная оболочка IPython.</description>
    </item>
    
    <item>
      <title>Введение в анализ данных с помощью Pandas</title>
      <link>http://swe-notes.ru/post/introduction_pandas/</link>
      <pubDate>Sat, 12 Oct 2013 16:20:07 +0300</pubDate>
      
      <guid>http://swe-notes.ru/post/introduction_pandas/</guid>
      <description>Сегодня речь пойдет о пакете Pandas. Данный пакет делает Python мощным инструментом для анализа данных. Пакет дает возможность строить сводные таблицы, выполнять группировки, предоставляет удобный доступ к табличным данным, а при наличии пакета matplotlib дает возможность рисовать графики на полученных наборах данных. Далее будут показаны основы работы с пакетом, такие как загрузка данных, обращение к полям, фильтрация и построение сводных.
Основные структуры данных и их загрузка Для начала, скажем, пару слов о структурах хранения данных в Pandas.</description>
    </item>
    
  </channel>
</rss>
