Как стать автором
Обновить
-24
0.1
Максим Сидоров @sidorovmax

Пользователь

Отправить сообщение

Как быстрее всего передавать данные с PostgreSQL на MS SQL

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

Однажды мне потребовалось забирать регулярно относительно большие объемы данных в MS SQL из PostgreSQL. Неожиданно выяснилось, что самый очевидный способ, через Linked Server на родные ODBC к PostgreSQL, очень медленный.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии82

SQLite — не игрушка

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

Рассказываю, почему SQLite отлично подойдет вам в повседневной работе. И неважно, разработчик вы, аналитик, тестировщик, админ или продакт-менеджер.

Читать далее
Всего голосов 239: ↑237 и ↓2+235
Комментарии89

Приёмы неблокирующего программирования: атомарные операции и частичные барьеры памяти

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

В первой статье цикла мы познакомились с простыми неблокирующими алгоритмами, а также рассмотрели отношение “happens before”, позволяющее их формализовать. Следующим шагом мы рассмотрим понятие «гонки данных» (data race), а также примитивы, которые позволяют избежать гонок данных. После этого познакомимся с атомарными примитивами, барьерами памяти, а также их использованием в механизме “seqcount”.


С барьерами памяти некоторые разработчики ядра Linux уже давно знакомы. Первый документ, содержащий что-то похожее на спецификацию гарантий, предоставляемых ядром при одновременном доступе к памяти — он так и называется: memory-barriers.txt. В этом файле описывается целый зоопарк барьеров вместе с ожидаемым поведением многопоточного кода в ядре. Также там описывается понятие «парных барьеров» (barrier pairing), что похоже на пары release-acquire операций и тоже помогает упорядочивать работу потоков.


В этой статье мы не будем закапываться так же глубоко, как memory-barriers.txt. Вместо этого мы сравним барьеры с моделью acquire и release-операций и рассмотрим, как они упрощают (или, можно сказать, делают возможной) реализацию примитива “seqcount”. К сожалению, даже если ограничиться лишь наиболее популярными применениями барьеров — это слишком обширная тема, поэтому о полных барьерах памяти мы поговорим в следующий раз.

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии3

Как написать простого бота для ВК и Телеграм

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


Мы уже упоминали, как мы предоставляем бесплатные VPS для студентов, чтобы они учились программировать. Один из наших подопечных Павел сделал простеньких телеграм и ВК ботов для FAQ. Они очень простые, тем не менее, начинающему программисту не помешают комментарии опытных ребят — поэтому публикуем его рассказ — Павел будет рад, если в комментариях ему дадут советы.
Читать дальше →
Всего голосов 39: ↑34 и ↓5+29
Комментарии12

Введение в неблокирующие алгоритмы

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

Неблокирующие алгоритмы широко применяются в ядре Linux когда традиционные примитивы блокировки либо не могут быть использованы, либо недостаточно быстры. Эта тема многим интересна и время от времени всплывает на LWN. Из недавнего — вот эта июльская статья, которая собственно и сподвигла меня написать свою серию. Ещё чаще разговор заходит про механизм read-copy-update (RCU — руководство 2007 года всё ещё актуально), подсчёт ссылок, и способы сделать более понятные, высокоуровные API ко всему этому разнообразию. Ну а сейчас вас ждёт погружение в идеи, стоящие за неблокирующими алгоритмами, а также их использованием в ядре.


Знание низкоуровневой модели памяти в целом считается продвинутым уровнем понимания, которого страшатся даже опытные программисты-ядерщики. Словами нашего редактора (из его июльской статьи): «Понять модель памяти можно лишь правильно повёрнутым мозгом». Говорят, что моделью памяти Linux (и файлом memory-barriers.txt в частности) можно пугать детей. Порой для достижения эффекта достаточно всего лишь рявкнуть “acquire” или “release”.


И в то же время, механизмы вроде RCU и seqlocks так широко применяются в ядре, что практически каждый разработчик рано или поздно сталкивается с фундаментально неблокирующими интерфейсами. Поэтому многим будет полезно иметь хотя бы базовое представление о неблокирующей синхронизации. В этой серии статей я расскажу, что же на самом деле означает acquire и release-семантика, а также приведу пять сравнительно простых паттернов, которые покрывают большинство вариантов использования неблокирующих примитивов.

Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии60

Проверка орфографии в приложениях Qt

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

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

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

Как я SCADA-систему на Linux переводил

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

В этой статье я бы хотел рассказать о том, что Windows проекты на Delphi возможно перевести на Linux в разумные сроки и с разумными трудозатратами. Что такое SCADA-система, рассказывать не буду, а перейду сразу к делу.

Runtime ядро SCADA работает под Windows в качестве сервиса. Функции стандартные «как у всех»: сбор, обработка, архивирование данных, передача данных в другие SCADA-системы по стандартным протоколам обмена. Визуализация только через Web. Runtime ядро SCADA написано на Delphi. Решено было адаптировать исходный код под  FreePascal/Lazarus, так чтобы код под Windows компилировался и в FreePascal и в Delphi, вторым этапом было допиливание проекта непосредственно на Linux машине и переделка его в демон. В FreePascal привлекала возможность компиляции как для x64, так и для плат Raspberry pi (архитектуры ARMv7, ARM64 (aarch64)).

Конфигуратор работает под Windows в виде графического приложения. Пока решено не переводить его на Linux, в крайнем случае можно запустить под Wine.

Теперь перейдем к Runtime и будем говорить о нём. В нём применяются разнообразные компоненты:

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Комментарии3

Тариф «100к+», или как вельми зело огорчить спамера

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

Уже не впервые сталкиваюсь, что читатели Хабра не все поголовно умеют правильно бороться со спамом. И я не про SpamAssasin, «Ктозвонил» и прочие приложения для фильтрации информационного мусора, а про несложную, но весьма доставляющую всем сторонам процесса подачу жалобы в ФАС.

Давайте расскажу, как буквально за 15 минут не отрываясь от любимого компьютера подключить спамеру задораздирающий тариф линейки «Административный»: «Административный 100к», «Административный 150к» и вплоть до «Административный 500к» – как повезет.
Читать дальше →
Всего голосов 272: ↑268 и ↓4+264
Комментарии259

Трюки с виртуальной памятью

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

Я уже довольно давно хотел написать пост о работе с виртуальной памятью. И когда @jimsagevid в ответ на мой твит написал о ней, я понял, что время пришло.

Виртуальная память — очень интересная штука. Как программисты, мы прекрасно знаем, что она есть (по крайней мере, во всех современных процессорах и операционных системах), но часто забываем о ней. Возможно, из-за того, что в популярных языках программирования она не присутствует в явном виде. Хотя иногда и вспоминаем, когда наш софт начинает тормозить (а не падать) из-за нехватки физической оперативной памяти.

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

Читать далее
Всего голосов 43: ↑39 и ↓4+35
Комментарии24

Особенности портирования сложного модульного ПО написанного на Delphi под ОС Linux

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

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

Меня зовут Тимофеев Константин, мне 40 лет и я являюсь ведущим программистом компании 3В Сервис в подразделении, занимающемся системами автоматизации динамических расчётов (САДР).

Данная статья посвящена разбору подводных камней при портировании разрабатываемого нами программного комплекса на операционные системы семейства Linux.

Читать далее
Всего голосов 94: ↑92 и ↓2+90
Комментарии165

Задержать COVID-19. Все про фильтрацию воздуха на случай пандемии

Время на прочтение44 мин
Количество просмотров372K
По материалам из телеграм-канала LAB66 и присоединенного к нему чата.

Это время для фактов, а не для страха. Это время для науки, а не слухов. Это время солидарности, а не охоты на ведьм…
директор ВОЗ Tedros Adhanom Ghebreyesus про эпидемию COVID-19
Прошло немного времени с момента публикации моей статьи про респираторную защиту во время эпидемии. За это время, отчасти благодаря активному обсуждению в «приканальном» чате выработалась некоторая система, которой бы я хотел поделится и с читателями хабра. Вынудило меня написать эту статью то, что из-за коронавируса поднялся нездоровый хайп, на волне которого на поверхность начала всплывать совсем не та информация, которая всплывать должна была бы (равно как и внезапно подскочили до х40 раз цены на респираторы, притом все без разбора). Так что нужно расставить точки над i. Под катом читаем про подбор правильного респиратора, про сборку кастомных фильтров и стерилизацию зараженных средств защиты. Ответы на вопросы.

Грантовая поддержка исследования
Фактически, в роли «научного грантодателя» для этой статьи выступают мои «меценаты» с Patreon. Благодаря им все и пишется. Поэтому и ответ они могут получить раньше всех других, и черновики увидеть, и даже предложить свою тему статьи. Так что, если интересно то, о чем я пишу и/или есть что сказать — поспешите стать моим «патроном» (картинка кликабельна):



Статью же настоятельно рекомендую «в закладки». Буду рад любому посильному распространению статьи. Краткий итоговый FAQ — в конце статьи.


Собираем полумаску под себя!
Всего голосов 81: ↑77 и ↓4+73
Комментарии290

Запуск VPN-сервера за провайдерским NAT'ом

Время на прочтение5 мин
Количество просмотров37K
Статья о том, как мне удалось запустить VPN-сервер за NAT'ом домашнего провайдера (без белого IP-адреса). Сразу оговорюсь: что работоспособность данной реализация напрямую зависит от типа NAT используемого Вашим провайдером, а также роутером.
Итак, возникла у меня необходимость подключаться со своего Android-смартфона к домашнему компьютеру, оба девайса подключены к Интернету через провайдерские NAT'ы, плюсом компьютер подключен через домашний роутер, который тоже NAT'ил соединения.
Классическая схема с использованием арендованного VPS/VDS с белым IP-адресом, а также аренда белого IP-адреса у провайдера не рассматривалась по нескольким причинам.
Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии25

Имитируем сетевые проблемы в Linux

Время на прочтение15 мин
Количество просмотров31K
Всем привет, меня зовут Саша, я руковожу тестированием бэкенда. У нас, как и у многих, реализована сервис-ориентированная архитектура. С одной стороны, это упрощает работу, т.к. каждый сервис проще тестировать по отдельности, но с другой — появляется необходимость тестировать взаимодействие сервисов между собой, которое часто происходит по сети.

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


Читать дальше →
Всего голосов 68: ↑67 и ↓1+66
Комментарии17

Драйвер-фильтр операций в реестре. Практика

Время на прочтение6 мин
Количество просмотров4.8K
Привет, Хабр!

Когда передо мной встала задача написать свой драйвер, осуществляющий мониторинг операций в реестре, я, конечно же, полезла искать на просторах интернета хоть какую-то информацию по этому поводу. Но единственное, что вылезало по запросу «Драйвер-фильтр реестра» — поток статей по написанию драйвера-фильтра (ура), НО все эти статьи касались только фильтра файловой системы (печаль).

К сожалению, единственное, что удалось найти — статью 2003 года, код из которой вы никогда не соберете в своей новенькой VS19.

К счастью же, есть прекрасный пример от Microsoft на GitHub (сразу кидаю ссылочку), на котором и будет строиться бОльшая часть этого разбора.

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

Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии4

UAC, давай дружить!

Время на прочтение6 мин
Количество просмотров93K
Технология UAC — не лишний компонент безопасности ОС Windows последних версий и пользователи приходят к этой мысли, борясь с malware и вирусами. Программистам, в свою очередь, стоит грамотно подходить к написанию приложений и принимать во внимание наличие такого «обстоятельства».

image

На хабре и вообще в сети много статей на тему «Как отключить UAC», «Как обойти UAC» и др. Но зачем отключать, функция ведь полезная? Зачем обходить, мы ведь не злоумышленники?

Нужно дружить!

Ниже я расскажу как это делать в Вашем приложении.
Читать дальше →
Всего голосов 91: ↑76 и ↓15+61
Комментарии235

Не бойся JSON или твое первое приложение с использованием API

Время на прочтение7 мин
Количество просмотров12K
Я имею кое-какой 8ми летный опыт в ковырянии кода. За это время успел попробовать много разных языков и технологий в разных направлениях: от «разработки» всяких фишинговых приколов на PHP Devel Studio до полноценных веб приложений на современных фреймворках и софта на нейростеях. Кстати говоря, мое первое погружение в программирование осуществилось в 12 лет благодаря этому посту. Сейчас же я учусь на втором курсе бакалавра по специальности Computer Science. До недавнего времени, а именно до первого курса, я долгое время всегда пугался каждый раз, когда видел слово JSON. Разобрался и понял. Но заметил, что многие ребята из моей группы все еще не работали с каким-либо API. Я люблю статьи, где автор подробно объясняет свою тему, прилагая кусочки кода и разжевывая зачем и почему он так решил сделать, и не кидается сложными терминами и технологиями. В данной статье я опишу использование API (на примере PUBG API) простыми для новчика словами, как говорится, without bullshit. Поехали!

image
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии5

Создание упаковщика x86_64 ELF файлов под linux

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

Введение


В данном посте будет описано создание простого упаковщика исполняемых файлов под linux x86_64. Предполагается, что читатель знаком с языком программирования си, языком ассемблера для архитектуры x86_64 и с устройством ELF файлов. В целях обеспечения ясности из приведённого в статье кода была убрана обработка ошибок и не были показаны реализации некоторых функций, с полным кодом можно ознакомится перейдя по ссылкам на github (загрузчик, упаковщик).

Идея состоит в следующем — мы передаём упаковщику ELF файл, на выходе получаем новый со следующей структурой:
ELF заголовок
Заголовок программы
Сегмент с кодом Загрузчик упакованных ELF файлов
Упакованный ELF файл
256 байт случайных данных
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии8

Начинаем работу с Google Sheets на Python. От регистрации до чтения данных

Время на прочтение11 мин
Количество просмотров184K
Довольно долго я обходился выгрузкой данных в Excel, но мода меняется, пользователи хотят в облака.

Начав переводить ряд проектов на Python, решил, что самое время сменить (или дополнить) Excel чем-то более современным.

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

Мне очень помогли статьи:


Как обычно – когда впервые за что-то берешься, то сталкиваешься с массой вопросов, которые потом вызывают лишь недоумение – как можно было об этом вообще задумываться. Элементарно же!

Возможно, я просто шел длинным путем – буду рад, если вы меня поправите.

Все действия выполнялись на компьютере с Windows + Python 3.6.6, также использовался Jupyter Notebook.

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

Код, использованный в статье, доступен в репозитории
Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии4

С Hyper-V на VMware и обратно: конвертация виртуальных дисков

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


Привет, Хабр!

Периодически я слышу от практикующих инженеров странное: VMDK, VHD и VHDX – абсолютно разные форматы виртуальных дисков, чуть ли не закрытые, а конвертировать из одного в другое – долго и больно. Сегодня наглядно покажу, что это не так, разберу, как эти форматы соотносятся друг с другом и как делать быструю конвертацию при миграции с Hyper-V на VMware и обратно.

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

  • тонкие (thin disk, dynamic disk) и
  • толстые (thick disk, fixed disk). Все остальное — разностные, thick provisioned lazy- zeroed – лишь вариации на тему.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии12

Избавляемся от назойливых предупреждений при входе на терминальный сервер

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


Не так давно внедряли мы решение на терминальном сервере Windows. Как водится, кинули на рабочие столы сотрудникам ярлыки для подключения, и сказали — работайте. Но пользователи оказались зашуганными по части КиберБезопасности. И при подключении к серверу, видя сообщения типа: «Вы доверяете этому серверу? Точно-точно?», пугались и обращались к нам — а все ли хорошо, можно нажимать на ОК? Тогда и было решено сделать все красиво, чтобы никаких вопросов и паники.


Если ваши пользователи все еще приходят к вам с подобными страхами, и вам надоело ставить галочку «Больше не спрашивать» — добро пожаловать под кат.

Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии13

Информация

В рейтинге
2 767-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность