Search
Write a publication
Pull to refresh
5
0
Андрей @UncleAndy

User

Send message

ЧПУ в хоббийной мастерской (часть 2)

Reading time6 min
Views28K


Первая часть
→ Вторая часть
Третья часть

В статье рассмотрим стандартное и нестандартное использование CNC-роутера. Для чего кроме вырезания деревянных картинок можно приспособить такой станок. Осторожно, трафик.

ЧПУ в хоббийной мастерской (часть 1)

Reading time6 min
Views43K


→ Первая часть
Вторая часть
Третья часть

Работа программиста имеет один существенный недостаток: как правило, мы не можем потрогать результат своего труда. Можем наслаждаться красотой кода, восторгаться оригинальностью алгоритма, но пощупать программу, увы, никак. Меня этот нюанс профессии всегда расстраивал. Чтобы как-то компенсировать виртуальность результата в основной сфере деятельности, несколько лет назад я завел себе вполне материальное хобби — столярничество. По началу все шло хорошо, но очень скоро стали сказываться профессиональные болезни любого программиста — лень и перфекционизм. Особенно, добивал тот факт, что когда нужно сделать 10 одинаковых деталей я не мог качественно сделать одну и скопировать ее еще 9 раз. В общем, вы поняли, через некоторое время в мастерской появился ЧПУ. Этот рассказ о двухлетнем опыте владения этим чудом техники.
Читать дальше →

Коллапс волновой функции: алгоритм, вдохновлённый квантовой механикой

Reading time11 min
Views34K
image

Алгоритм Wave Function Collapse генерирует битовые изображения, локально подобные входному битовому изображению.

Локальное подобие означает, что

  • (C1) Каждый паттерн NxN пикселей в выходных данных должен хотя бы раз встречаться во входных данных.
  • (Слабое условие C2) Распределение паттернов NxN во входных данных должно быть подобным распределению паттернов NxN в значительно большом количестве наборов выходных данных. Другими словами, вероятность встречи определённого паттерна в выходных данных должна быть близка к плотности таких паттернов во входных данных.
Читать дальше →

Изучая go: пишем p2p мессенджер со сквозным шифрованием

Reading time9 min
Views48K

Yet another P2P Messenger


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


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


Пример UI чата на ReactJs


Статья ориентирована на новичков интересующихся языком go и пиринговыми сетями.
И для профессионалов, умеющих предлагать разумные идеи или конструктивно критиковать.

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

Как мы решили проблему с памятью в PostgreSQL, не добавив ни байта

Reading time3 min
Views16K


Короткая история о «тяжелом» запросе и изящном решении проблемы


Недавно нас по ночам стали будить алерты: на диске не хватает места. Мы быстро разобрались, что проблема в ETL-задачах.


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

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

Создаем несложный шахматный ИИ: 5 простых этапов

Reading time4 min
Views44K


Перевели для вас статью Лори Хартикка (Lauri Hartikka) о создании простейшего ИИ для шахмат. Она написана еще в 2017 году, но базовые принципы остались теми же. Все файлы, которые использовал Лори, тоже доступны.

Простой искусственный интеллект, который умеет играть в шахматы, можно создать на базе четырех концепций:

  1. 1. Перемещение;
  2. 2. Оценка доски;
  3. 3. Минимакс;
  4. 4. Альфа-бета-отсечение. На каждом этапе работы с алгоритмом будет использоваться одна из них, это позволит постепенно совершенствовать игровые способности ИИ.
Читать дальше →

Бесшовная (почти) миграция между мажорными релизами PostgreSQL с помощью логической репликации

Reading time9 min
Views20K
У нас в True Engineering на одном проекте назрела необходимость в смене версии PostgreSQL с 9.6 на 11.1.

Зачем? База данных на проекте уже объемом 1,5 Tb и растет. Перформанс – одно из основных требований к системе. А сама структура данных эволюционирует: добавляются новые колонки, меняются существующие. Новая версия Postgres научилась эффективно работать с добавлением новых колонок с дефолтным значением, так что не нужно городить кастомных костылей на уровне приложения. Ещё в новой версии добавили несколько новых способов партиционирования таблиц, что тоже крайне полезно в условиях большого объема данных.

Итак, решено, мигрируем. Конечно, можно поднять параллельно со старой новую версию сервера PostgreSQL, остановить приложение, через dump/restore (или pg_upgrade) переместить базу и снова запустить приложение. Нам это решение не подошло из-за большого размера базы, к тому же, приложение работает в боевом режиме, и на даунтайм есть считанные минуты.

Поэтому мы решили попробовать миграцию с помощью логической репликации в PostgreSQL с использованием стороннего плагина под названием pglogical.

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



TL;DR

  • Всё получилось (не без костылей, о них и статья).
  • Мигрировать можно в рамках PostgreSQL версии от 9.4 до 11.x, с любой версии на любую, вниз или вверх.
  • Даунтайм равен времени, которое требуется вашему приложению, чтобы переподключиться к новому серверу БД (в нашем случае это был перезапуск всего приложения, но в дикой природе, очевидно, «возможны варианты»).
Читать дальше →

Криптографические протоколы для электронного голосования

Reading time6 min
Views8.1K


Демократия – это не голосование, это подсчёт голосов.
Том Стоппард


Для исследователей криптографии электронное голосование в первую очередь связано не с машиной для голосования и не с онлайн-голосованием – это просто поле для математических исследований. Исследование электронного голосования занимается созданием протоколов, ключевых математических компонентов, защищённых и проверяемых систем голосования, или таких систем, в которых независимые аудиторы и избиратели могут безопасно проверить правильность подсчёта голосов. Эти системы представляют собой не простые теоретические работы, но уже реальные технологии, использовавшиеся для реальных выборов: в городе Такома-Парк штата Мэриленд избиратели доверились системе Scantegrity II, основанной на бумажных бюллетенях с невидимыми чернилами, а сами криптографы использовали системы для онлайн-голосования Helios для избрания руководства.
Читать дальше →

Изменение схемы таблиц PostgreSQL без долгих блокировок. Лекция Яндекса

Reading time10 min
Views25K
Если одновременно выполняется много операций по изменению схемы БД, сервис не может корректно работать на запись. Разработчик Владимир Колясинский объяснил, какие операции в PostgreSQL требуют длительных блокировок и как команда Яндекс.Коннекта обеспечивает почти стопроцентную доступность сервиса на запись во время выполнения подобных операций. Кроме того, вы узнаете о библиотеке для Django, которая призвана автоматизировать часть описанных процессов.


У нас большие нагрузки, тысячи RPS, и простой в несколько минут, не говоря о большем времени, недопустим. Нужно, чтобы миграции происходили незаметно для пользователя. А с такими нагрузками уже не получится встать в четыре часа ночи, что-то накатить, когда нет нагрузки, и снова лечь спать — потому что нагрузка идет круглые сутки.

Тестирование PostgreSQL с HugePages в Linux

Reading time4 min
Views17K

Ядро Linux предоставляет широкий спектр параметров конфигурации, которые могут повлиять на производительность. Главное — выбрать правильную конфигурацию для вашего приложения и рабочей нагрузки. Как и любой другой базе данных, PostgreSQL необходима оптимальная настройка ядра Linux. Неправильные настройки могут привести к снижению производительности. Важно проводить сравнительный анализ производительности базы данных после каждого сеанса настройки. В одном из своих предыдущих постов под названием "Tune Linux Kernel Parameters For PostgreSQL Optimization" я описал некоторые из наиболее полезных параметров ядра Linux и то, как они помогают повысить производительность базы данных. Теперь я поделюсь результатами сравнительного тестирования после настройки HugePages в Linux под различными нагрузками PostgreSQL. Я провел полный набор тестов под множеством различных нагрузок PostgreSQL с различным числом параллельных клиентов.


image

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

Комфортная работа с Android Studio

Reading time16 min
Views118K


Всем доброго времени суток!


Насколько производительно работает Android Studio? Считаете ли Вы, что она работает шустро на Вашем ПК или Mac? Или, иногда, сталкиваетесь с лагами или долгой сборкой? А на крупных проектах?


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


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

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

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

Reading time12 min
Views67K

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



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

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

Новый мысленный эксперимент бросает вызов этим предположениям и раскачивает основы квантовой физики. Он, конечно, и сам странный. К примеру, он требует проводить измерения, способные стереть любые воспоминания о только что проделанном наблюдении. С людьми это невозможно, а квантовые компьютеры могли бы провести такой странный эксперимент и, теоретически, найти различия между разными интерпретациями квантовой физики.
Читать дальше →

Kubernetes tips & tricks: о выделении узлов и о нагрузках на веб-приложение

Reading time7 min
Views23K


В продолжение наших статей с практическими инструкциями о том, как облегчить жизнь в повседневной работе с Kubernetes, рассказываем о двух историях из мира эксплуатации: выделении отдельных узлов под конкретные задачи и конфигурации php-fpm (или другого сервера приложений) под большие нагрузки. Как и прежде, описанные здесь решения не претендуют на идеал, а предлагаются как отправная точка для ваших конкретных случаев и почва для размышлений. Вопросы и улучшения в комментариях — приветствуются!
Читать дальше →

PostgreSQL: PipelineDB — агрегирующие запросы в режиме реального времени

Reading time5 min
Views12K
Вас когда-либо просили посчитать количество чего-то на основании данных в бд за последний месяц, сгруппировав результат по каким-то значениям и разбив всё это ещё по дням/часам?
Если да — то вы уже представляете, что вам придётся написать что-то вроде такого, только хуже

SELECT hour(datetime), somename, count(*), sum(somemetric)
from table
where datetime > :monthAgo
group by 1, 2
order by 1 desc, 2

Время от времени самые разнообразные подобные запросы начинают появляться, и если один раз стерпишь и поможешь — увы, обращения будут поступать и в будущем.

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

А что если я скажу, что прямо в PostgreSQL можно создать вьюху, которая на лету будет учитывать только новые поступающие данные в прямо подобном запросе, как выше?

Так вот — это умеет делать расширение PipelineDB

Демо с их сайта, как это работает


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

Реализация алгоритма Левенберга-Марквардта для оптимизации нейронных сетей на TensorFlow

Reading time23 min
Views31K

Это tutorial по библиотеке TensorFlow. Рассмотрим её немного глубже, чем в статьях про распознавание рукописных цифр. Это tutorial по методам оптимизации. Совсем без математики здесь не обойтись. Ничего страшного, если вы её совершенно забыли. Вспомним. Не будет никаких формальных доказательств и сложных выводов, только необходимый минимум для интуитивного понимания. Для начала небольшая предыстория о том, чем этот алгоритм может быть полезен при оптимизации нейронной сети.




Полгода назад друг попросил показать, как на Python сделать нейросеть. Его компания выпускает приборы для геофизических измерений. Несколько различных зондов в процессе бурения измеряют набор сигналов, связаных с параметрами окружающей скважину среды. В некоторых сложных случаях точно вычислить параметры среды по сигналам долго даже на мощном компьютере, а необходимо интерпретировать результаты измерений в полевых условиях. Возникла идея посчитать на кластере несколько сот тысяч случаев, и на них натренировать нейронную сеть. Так как нейросеть работает очень быстро, её можно использовать для определения параметров, согласующихся с измеренными сигналами, прямо в процессе бурения. Детали есть в статье:


Kushnir, D., Velker, N., Bondarenko, A., Dyatlov, G., & Dashevsky, Y. (2018, October 29). Real-Time Simulation of Deep Azimuthal Resistivity Tool in 2D Fault Model Using Neural Networks (Russian). Society of Petroleum Engineers. doi:10.2118/192573-RU


Одним вечером я показал, как keras реализовать простую нейронную сеть, и друг на работе запустил обучение на насчитанных данных. Через пару дней обсудили результат. С моей точки зрения он выглядел перспективно, но друг сказал, что нужны вычисления с точностью прибора. И если средняя квадратичная ошибка (mean squared error) получилась в районе 1, то нужна была 1е-3. На 3 порядка меньше. В тысячу раз.

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

Локализация в Go с помощью базовых пакетов

Reading time5 min
Views8.9K

Создать хорошее приложение непросто. Какое бы уникальное и полезное приложение вы ни написали, если оно не нравится пользователю, то у вас, как говорится, a big problem. Большинству людей не нравится и отпугивает все, что им непонятно. Зачастую пользовательский интерфейс и письма — это та видимая верхушка айсберга вашего приложения, по которой пользователь его оценивает. Поэтому локализация всего, что видит пользователь, крайне важна.


Вспомните, как еще десять лет назад, когда интернет только начинал входить в жизнь масс, а многие сегодняшние IT-гиганты находились в стадии стартап-карликов с парой десятков сотрудников, в порядке вещей было отправить пользователю письмо на английском. И пользователи относились к этому с пониманием. Сегодня же, когда в интернете присутствуют все и не нужно быть семи пядей во лбу, иметь высшее образование или знать английский, чтобы им пользоваться, считается дурным тоном не поддерживать в своем приложении локализацию. К слову, в нашей компании локализация всех текстов UI уже осуществляется на 20 языков и список поддерживаемых языков постоянно растет.


В Go, как в довольно молодом языке, все современные тренды веб-разработки реализованы на уровне базовых пакетов и не требуют дополнительных «танцев с бубном». (Я начал изучать Go несколько лет назад, но до сих пор помню то ощущение «открывшихся сверхспособностей», которое испытывал первые дни после знакомства с этим языком. Казалось, теперь я могу реализовать любую задачу, написав всего пару строк.)


Конечно, не обошли в Go стороной и локализацию. Локализация в нем доступна практически «из коробки» с помощью базовых пакетов: golang.org/x/text/language, golang.org/x/text/message и golang.org/x/text/feature/plural. Давайте рассмотрим, как просто в Go всего за полчаса, используя эти пакеты, можно реализовать такую нетривиальную задачу, как локализация писем.

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

External — GUI для Golang

Reading time5 min
Views24K
Приветствую вас, коллеги!

Около месяца назад я опубликовал здесь статью GUI-фреймворки — на поток, где предлагалась технология создания GUI-фреймворков для разных языков программирования, основанная на подключении (tcp/ip или каком другом) к внешнему процессу, играющему роль своеобразного GUI-сервера. Здесь я хочу представить конкретную реализацию этой идеи — новый GUI-фреймворк для GolangExternal.

Зачем вообще потребовалось писать новый GUI для Golang, если в наличии уже имеется немало таких инструментов? В первую очередь, потому, что ни один из них не устраивал меня в полной мере. Нужно было что-то для создания десктопных приложений, кросс-платформенное, чтобы выглядело естественно для каждой платформы. По-возможности, не очень громоздкое, имеющее минимум зависимостей — я привержен минималистическому подходу.
Читать дальше →

Микросервисы на Go с помощью Go kit: Введение

Reading time12 min
Views61K

В этой статье я опишу использование Go kit, набора инструментов и библиотек для создания микросервисов на Go. Эта статья — введение в Go kit. Первая часть в моем блоге, исходный код примеров доступен здесь.

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

Go lintpack: менеджер компонуемых линтеров

Reading time9 min
Views4K


lintpack — это утилита для сборки линтеров (статических анализаторов), которые написаны с использованием предоставляемого API. На основе него сейчас переписывается знакомый некоторым статический анализатор go-critic.


Сегодня мы подробнее разберём что такое lintpack с точки зрения пользователя.

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

Собираем собственный аудио усилитель профессионального уровня не (очень) дорого

Reading time4 min
Views138K

Получаем потрясающий стереозвук на основе платы 3e Audio Д-класса




Перевод статьи с сайта IEEE Spectrum, автор – Гленн Зорпет

Несколько лет назад я решил узнать, насколько дёшево можно сделать самому усилитель Д-класса аудиофильского качества. Тогда у меня получилось $523,43. Я смастерил достойный усилок, и статья на IEEE Spectrum всё ещё привлекает читателей и периодические вопросы о том, где можно достать запчасти.

Сожалею, но основные компоненты уже давно исчезли. Поэтому я направлял всех страждущих к наборам от Class D Audio, DIY Class D и Ghent Audio. И пару месяцев назад мне вдруг захотелось проверить, насколько лучше у меня получится сделать усилок сейчас, почти десять лет спустя. Часть мотивации возникла из-за ежегодных списков лучших стерео усилителей с сайта The Master Switch. В списке доминируют усилители стоимостью от $1000 (и десять из них стоят более $2000).
Читать дальше →

Information

Rating
Does not participate
Location
Подгорица, Подгорица, Черногория
Date of birth
Registered
Activity

Specialization

Backend Developer, Database Developer
From 500,000 ₽
Golang
Docker
PostgreSQL
Git
Nginx
High-loaded systems
Kubernetes
Linux
MySQL
Redis