Как стать автором
Обновить
-5
0.2

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

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

Поднимаем кластер PostgreSQL в Docker и Testcontainers

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров20K

Ранее я рассказывал о том, как запустить PostgreSQL в Docker. Тогда речь шла об использовании «ванильных» образов Postgres и поднятии одного хоста. В большинстве случаев этого достаточно как для тестов, так и для экспериментов, но нужно понимать, что в промышленной эксплуатации чаще всего используются высокодоступные (отказоустойчивые, кластеризованные) конфигурации PostgreSQL.

Сегодня я покажу, как запустить уже целый кластер PostgreSQL в Docker, а также в тестах через Testcontainers, и как вручную инициировать смену мастер-хоста.

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

Собеседование Golang разработчика (теоретические вопросы), Часть I

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

Как сейчас проходят собеседования на golang разработчика? Что спрашивают?

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

Node.js наизнанку: не все происходит в пуле потоков

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

Node.js это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом для выполнения JavaScript вне браузера. Он поддерживается движком Google V8, что делает его чрезвычайно производительным.

Асинхронная среда выполнения, управляемая событиями

Одно из наиболее распространенных утверждений, с которым мы сталкиваемся при знакомстве с Node, заключается в том, что он выполняется в одном потоке. Тем не менее каждый может задаться вопросом, как это возможно, что Node является одним из самых популярных инструментов для создания быстрых и масштабируемых API?

Технически, тот факт, что Node.js использует один поток не на 100% верно. Node.js на самом деле использует много потоков, но цикл событий (Event Loop - о котором мы упомянем позже), и пользовательский код выполняются в одном потоке. Если мы ознакомимся с документацией, то увидим, что Node.js использует управляемым событиями неблокирующую модель ввода-вывода (event-driven, non-blocking I/O model), которая делает его легким и эффективным.

Что такое управляемая событиями неблокирующая модель ввода-вывода?

Согласно руководству по Node.js, блокирующие методы выполняются синхронно, а неблокирующие методы выполняются асинхронно. Предположим, что нам нужно написать некоторый код, чтобы прочитать содержимое файла и распечатать его в консоли. Есть два способа сделать это в узле: синхронно и асинхронно.

Давайте сначала посмотрим синхронную версию:

В приведённом ниже коде происходит следующее: во-первых, нужно подключить модуль FS. Во второй строке вызывается метод readFileSync, и результат сохраняется в переменной data. Основной поток Node.js блокирует эту строку до тех пор, пока не будет прочитано все содержимое файла. Затем содержимое выводиться в консоль, и, в самом конце будет выведено в консоль “Done”.

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

Туториал: SvelteKit JWT авторизация

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

В этой статье рассказывается о том, как внедрить аутентификацию в ваш SvelteKit проект. Это будет JWT аутентификация с использованием refresh токенов для дополнительной безопасности. Мы будем использовать Supabase в качестве базы данных (PostgreSQL), но основы должны быть теми же.

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

Восторг безопасника — технология для шифрования образов контейнеров

Время на прочтение15 мин
Количество просмотров12K
На днях поступила интересная задачка — необходимо найти способ защитить исходные данные контейнера (читай: не иметь возможности прочитать, что лежит внутри), когда он остановлен. В голову сразу пришла мысль про шифрование, а пальцы начали набирать в гугле заветные слова. Пока разбирался в теме, наткнулся на достаточно интересную статью, которую с удовольствием привожу вам.


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

Как превратить любой скрипт в Telegram-бота

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

Если вам нужен простенький Telegram bot, способный выполнять скрипты (написанные на любом языке) и отвечать текстом и картинками, то вам под кат. Там вы найдёте рассказ о бот-движке, который делает то, что вам надо.


Telegram bot

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

Обнаружение лиц в Node.js с использованием Rust и WebAssembly

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

В последней статье мы рассказывали, как вызывать функции Rust из Node.js. Сегодня мы расскажем, как написать приложение AIaaS (англ. Artificial Intelligence as a Service — «искусственный интеллект как услуга») на базе Node.js.

Большинство приложений с искусственным интеллектом сейчас разрабатываются на языке Python, а главным языком программирования для веб-разработки является JavaScript. Для того чтобы реализовать возможности ИИ в вебе, нужно обернуть алгоритмы ИИ в JavaScript, а именно в Node.js.

Однако ни Python, ни JavaScript сами по себе не подходят для разработки ИИ-приложений с большим объемом вычислений. Это высокоуровневые, медленные языки со сложной средой выполнения, в которых удобство использования достигается за счет снижения производительности. Для решения этой проблемы блоки интеллектуальных вычислений в Python оборачиваются в нативные C/C++-модули. Точно так же можно сделать и в Node.js, но мы нашли решение получше — WebAssembly.

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

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

36 млн запросов в час, 10000+ постоянно работающих клиентов, на одном сервере, nginx+mysql

Время на прочтение5 мин
Количество просмотров114K
Сложилась ситуация, что участвую в проекте, который работает с достаточно большой нагрузкой. Как уже написал — 36 млн запросов в час. Я много чего прочитал и перепробовал за последний месяц, настраивая сервер; хотелось бы просто сжато и компактно выдать тезисно то, что работает хорошо в такой конфигурации.

Первое, что я заметил — множество советов как все настроить под большую нагрузку. Читайте их внимательно, обычно в тексте найдете, что речь про «высокую нагрузку» в 15-20 тысяч клиентов в сутки. У нас клиентов примерно миллион, активных, ежедневных.

У нас нет денег и мы все делаем за свой счет, поэтому экономим. Итог — весь миллион клиентов обслуживается на одном сервере, вот на таком — EX-60 на hetzner.
Читать дальше →
Всего голосов 111: ↑96 и ↓15+81
Комментарии102

Шифруем и перешифровываем LUKS без потери данных

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

Введение

Если вы когда-либо задумывались о шифровании данных на дисках уже после того, как у вас накопилось их приличное количество, вы, вероятно, расстраивались, прочитав о необходимости переноса данных перед созданием шифрованного раздела и после. Перенос 500 ГБ туда и обратно не представляет никакой особой трудности, такой объем можно временно загрузить даже в облако, но если речь идет о шифровании 6 винчестеров по 4 ТБ каждый, задача заметно усложняется. По какой-то причине, возможность шифрования и перешифровывания томов LUKS без потери данных (in-place re-encryption) слабо освещена в интернете, хотя для этого есть две утилиты: cryptsetup-reencrypt, входящая в состав cryptsetup с 2012 года, и сторонняя luksipc, появившаяся на год раньше. Обе утилиты выполняют, в общем-то, одно и то же — шифруют раздел, если он не был шифрован, либо перешифровывают уже существующий с другими параметрами. Для своих нужд я воспользовался первой, официальной.

Как это работает?

Предположим, у вас типичная разметка диска: один раздел, начинается с 1 МиБ (выравнивание для 4КиБ-секторов), заканчивается в конце диска.
image

Заголовок LUKS располагается в начале, перед зашифрованными данными. Для заголовка требуется минимум 2056 512-байтных секторов, т.е. чуть больше 1МиБ. Места перед началом раздела нам явно недостаточно, поэтому сначала нужно уменьшить размер файловой системы с ее конца, чтобы cryptsetup-reencrypt перенес блоки правее, в конец диска, освободив таким образом место в начале раздела для LUKS-заголовка. Конечный размер заголовка зависит от длины ключа, количества слотов для парольных фраз и прочих параметров, поэтому я рекомендую быть рачительным и отвести под заголовок 4 МиБ.
image
Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии16

Безопасность сетевой инфраструктуры. Расширенные методы взлома и защиты. Видео

Время на прочтение1 мин
Количество просмотров64K
Мы решили продолжить нашу традицию публиковать записи наших предыдущих вебинаров для всех желающих с целью повышения уровня осведомленности в ИБ.
Программа курса:

Первое занятие — «Инструментарий пентестера»
Это занятие представляет из себя небольшой обзор истории появления и развития дистрибутива BackTrack и превращением его в Kali Linux.


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

Облака — белогривые лошадки или безопасный ownCloud для «маленьких» в FreeNAS

Время на прочтение13 мин
Количество просмотров60K
image
ownCloud, как утверждает Википедия — это Свободное и открытое веб-приложение для синхронизации данных, расшаривания файлов и удалённого хранения документов в «облаке». И, как мне кажется, довольно интересное решение для организации собственного домашнего облака.

Однако, ownCloud, устанавливающийся в виде плагина в системе FreeNAS, да и просто из коробки, имеет ряд недостатков, от которых хотелось бы избавится даже при использовании дома:
  • Во-первых, устанавливается в связке с SQLite, что подходит только если у вас небольшое кол-во файлов и пользователей, и абсолютно не подходит, если вы планируете синхронизацию с помощью клиента. У меня же хранилище уже расползлось почти на 5Tb и установленный таким образом ownCloud просто отказывался видеть часть файлов. Да и без синхронизации отдача от облака не велика. Заменим базу данных на MariaDB.
  • Во-вторых, отсутствует работа по https, а мне совсем не нравится мысль о том, что кто-то может перехватить мои файлы. Включим https.
  • В-третьих, начисто отсутствует защита от банального подбора пароля методом брутфорса. Защитимся от брутфорса с помощью fail2ban.
  • В-четвёртых, мне лень часто просматривать логи на предмет взлома, но очень хочется оперативно узнавать о таких попытках. Настроим push-оповещения о попытках подбора пароля с помощью сервиса pushover.net.

Как же это всё сделать
Всего голосов 26: ↑23 и ↓3+20
Комментарии48

Создаём своё первое десктопное приложение при помощи HTML, JS и Node-WebKit

Время на прочтение4 мин
Количество просмотров114K
В наше время при помощи JavaScript и HTML можно сделать практически всё. А благодаря Node-WebKit (недавно переименован в NW.js) можно делать даже десктопные приложения, которые выглядят, как нативные и имеют доступ ко всем частям ОС. Сегодня мы покажем, как создать простое десктопное приложение при помощи Node-WebKit, используя jQuery и несколько модулей для Node.js.

Node-WebKit — комбинация Node.js и встроенного браузера WebKit. Код JavaScript выполняется в особом окружении, из которого есть доступ и к стандартному API браузеров, и к Node.js.
Читать дальше →
Всего голосов 45: ↑40 и ↓5+35
Комментарии39

«Умный дом» собственными руками. Часть 2. Видеонаблюдение

Время на прочтение4 мин
Количество просмотров96K
В прошлой статье (линк) мы ознакомились с теоретической частью построения нашего «умного дома» и определились с используемыми технологиями. Теперь начнем реализацию практической части :)

Первой жертвой нашего интереса станет система видеонаблюдения.
Читать дальше →
Всего голосов 95: ↑85 и ↓10+75
Комментарии88

SICP теперь по-русски! Часть третья

Время на прочтение1 мин
Количество просмотров12K
image
Перевод третьей лекции из курса «Структура интерпретация компьютерных программ».

Это самый известный курс по программированию за последние 25 лет; с 1980г читается в MIT, а с недавних пор что-то подобное читается и в Беркли.

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

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

Приятного просмотра!
Читать дальше →
Всего голосов 98: ↑94 и ↓4+90
Комментарии39

Мониторинг производительности веб-сервиса. Часть I

Время на прочтение3 мин
Количество просмотров1.9K
image Чем качественней налажен процесс разработки, тем реже будут проявляться проблемы с производительностью в релизе. С другой стороны, полностью их не удастся избежать по той банальной причине, что в процессе разработки были сделаны “предположения” относительно условий эксплуатации веб-сервиса, а жизнь постоянно вносит свои коррективы.

От того как часто появляются такие проблемы и как быстро они исправляются зависит многое – удовлетворенность пользователя сервисом, репутация разработчика и т.д. Как можно бороться с проблемами производительности?
Читать дальше →
Всего голосов 13: ↑8 и ↓5+3
Комментарии3

Swiz Framework (краткий обзор)

Время на прочтение1 мин
Количество просмотров734
Swiz это фреймворк для Flex, AIR и Flash который был создан для быстрой разработки RIA приложений. Основные фичи swiz это:

В сравнении с другими фреймворками для Flex:
  • Отсутствие необходимости JEE паттернов
  • Нет необходимости в куче повторяющихся папок
  • Нет кучи копипастеных кусков кода
  • Не обязательно наследовать классы фреймворка

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

jQuery и маски

Время на прочтение1 мин
Количество просмотров482
Для одного нашего проекта понадобилось подсвечивать области на картинке.
Было решено делать на jQuery. Из всего этого вышел Masker.



Страничка плагина и описание

Проверялось в: IE 7-8, FF 3.6, Safari 5, Chrome 5
Всего голосов 22: ↑16 и ↓6+10
Комментарии20

Автоматизация веб-сервера FreeBSD8 Apache2+Mysql5 Часть 1

Время на прочтение3 мин
Количество просмотров1.3K
Так уж сложилось, что я жутко ленивый. Два года назад когда я приобрел себе VDS и встретился с FreeBSD 7.1 первый раз, убил две недели на настройку всего, что мне нужно было. Сейчас у меня 2*Pentium III 1GHz / RAM 1Гб / 2*SCSI 17Гб, под мои задачи он вполне подходит.

  1. Создание хостов
  2. Ротация логов Apache2
  3. Архивация логов Apache2 и удаление старых логов.
  4. Создание базы данных и добавление нового пользователя с правами только к одной базе, с генерацией нового пароля.


Мой любимый редактор vi. Если кто не знает как с ним работать можно везде где я указал vi заменять на свой ee,mcedit и т.д

Скрипт создания хостов.
Структура на моем сервере следующая, у каждого пользователя в хомдир лежит папка www, выглядит это так.
/home/user/www.
Скрипт внутри папки www создает каталоги с именем хоста.

Пример mk_host.sh domen.ru user
в каталоге /home/user/www будет создана папка domen.ru с директориями

  • cgi-bin
  • html
  • logs
  • shadow


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

Смотрим сам скрипт.
Читать дальше →
Всего голосов 27: ↑21 и ↓6+15
Комментарии9

Нюансы и алгоритмы программирования движка для маркетинговых онлайн-исследований

Время на прочтение13 мин
Количество просмотров821
Доброго времени суток, уважаемые хабравчане. Давно меня подмывало написать подобный мануал, и вот, решил таки себя заставить сесть и написать его — поделиться некоторым опытом, который получил во время своих программистских изысканий в сфере маркетинга и о некоторых алгоритмах, заложенных в движок, на котором был реализован не один проект.
Читать дальше →
Всего голосов 25: ↑17 и ↓8+9
Комментарии0

Git для загрузки обновленых файлов на сайт

Время на прочтение1 мин
Количество просмотров1.1K
Не знаю чем вы пользуетесь чтобы залить измененные файлы на сайт, а я раньше делал все вручную. Нудная и дурацкая работа кончено, и в какой-то момент лень, как двигатель прогресса взяла свое. Благо к этому времени я начал разбираться с рельсами, а вместе с ними и с другими прелестями адекватной разработки веб-приложений, в том числе и с VCS. В какой-то момент меня осенило — ведь в Git (Сайт проекта, Википедия) уже есть все для отслеживания изменений, почему бы не начать использовать его для заливки. Все что нужно — SSH и промежуточный репозиторий на том же сервере, недоступный веб-серверу.
Читать дальше →
Всего голосов 11: ↑8 и ↓3+5
Комментарии22
1
23 ...

Информация

В рейтинге
1 941-й
Зарегистрирован
Активность