Pull to refresh
1
0

Software engineer

Send message

Быстрая настройка резервного копирования под Linux и не только (UrBackup)

Reading time4 min
Views68K

Примерно год назад у меня возникла «острая» необходимость перевести систему резервного копирования данных в корпоративной сети на бесплатные рельсы. До этого использовался платный продукт от Symantec, по нему, конечно, много нареканий, но он работал, хоть и не всегда справлялся. Как обычно, все надо было сделать «вчера», и я приступил к поиску вариантов.

Для начала начал искать решение для резервного копирования файлов, очевидным решением было простая настройка скриптов на Linux по cron, но это не очень удобное и надежное решение, если серверов более одного(а у меня их около 50-ти) и структура достаточно динамична. Тем более если инфраструктура смешанная, Linux + Windows. Хотелось что-нибудь простое в дальнейшем обслуживании и извлечении самих копий, например, переложить восстановление пользовательских файлов на группу поддержки. Порывшись пару часов в интернете, я наткнулся на интересный проект UrBackup, он удовлетворял всем моим условиям.
Читать дальше →

Такие удивительные семафоры

Reading time9 min
Views144K
От переводчика: Джефф Прешинг (Jeff Preshing) — канадский разработчик программного обеспечения, последние 12 лет работающий в Ubisoft Montreal. Он приложил руку к созданию таких известных франшиз как Rainbow Six, Child of Light и Assassin’s Creed. У себя в блоге он часто пишет об интересных аспектах параллельного программирования, особенно применительно к Game Dev. Сегодня я бы хотел представить на суд общественности перевод одной из статей Джеффа.

Поток должен ждать. Ждать до тех пор, пока не удастся получить эксклюзивный доступ к ресурсу или пока не появятся задачи для исполнения. Один из механизмов ожидания, при котором поток не ставится на исполнение планировщиком ядра ОС, реализуется при помощи семафора.

Раньше я думал, что семафоры давно устарели. В 1960‑х, когда еще мало кто писал многопоточные программы, или любые другие программы, Эдсгер Дейкстра предложил идею нового механизма синхронизации — семафор. Я знал, что при помощи семафоров можно вести учет числа доступных ресурсов или создать неуклюжий аналог мьютекса, но этим, как я считал, область их применения ограничивается.
Читать дальше →

Эффективное кодирование видео в Linux c Nvidia NVENC: часть 2, дополнительная

Reading time7 min
Views26K


В первой части я рассказал о кодировании видео в Linux с использованием Nvidia NVENC. Как уже упоминалось ранее, Nvidia для десктопных видеокарт ограничивает количество потоков кодирования до двух сессий на систему. Данная часть посвящена борьбе с этим ограничением.
Читать дальше →

Как я нашел лучший в мире язык программирования. Часть Йо (2.72)

Reading time21 min
Views116K
Поскольку после второй части у меня случился перерыв на работу, я поимел возможность получить некоторый фидбек, который я хоть и еще не обработал, все же заставляет меня написать внеплановую часть Йо, которая мне кажется важной для дальнейшего разговора. С тем же перерывом на работу связана задержка третьей части, прошу меня извинить тех, кто действительно ждал и пока не дождался.
Читать дальше →

Операции как объекты

Reading time11 min
Views17K
Не так давно мне пришлось обращаться к хранилищу ZooKeeper из кода на C++. Приличной С++-обёртки для сишной библиотеки libzookeeper не нашлось, поэтому её пришлось написать самому. В процессе реализации я существенно видоизменил подход авторов java-библиотеки к построению API и теперь хочу поделиться с вами причинами и результатами принятых решений. Несмотря на ключевые слова С++ и ZooKeeper, подход, описанный в статье, подходит для организации доступа к любым хранилищам, и вполне реализуем на языках, отличных от С++.
Читать дальше →

Что такого особенного в Nim?

Reading time7 min
Views82K


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

Я открыл для себя Nim, когда искал правильный инструмент для написания игры, HoorRace, преемник моей текущей DDNet игры/мода Teeworlds.

(прим. пер. На синтаксис Nim имели влияние Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.)

Запускаем!


Да, эта часть всё ещё не захватывает, но просто следите за продолжением поста:

for i in 0..10:
  echo "Hello World"[0..i]

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

Qucs — open-source САПР для моделирования электронных схем

Reading time4 min
Views95K
В настоящее время существует не так уж и много open-source САПР. Тем не менее, среди САПР для электроники (EDA) есть весьма достойные продукты. Этот пост будет посвящён моделировщику электронных схем с открытым исходным кодом Qucs. Qucs написан на С++ с использованием фреймворка Qt4. Qucs является кроссплатформенным и выпущен для ОС Linux, Windows и MacOS.

Разработку данной САПР начали в 2004 году немцы Michael Margraf и Stefan Jahn (в настоящее время не активны). Сейчас Qucs разрабатывается интернациональной командой, в которую вхожу и я. Руководителями проекта являются Frans Schreuder и Guilherme Torri. Под катом будет рассказано о ключевых возможностях нашего моделировщика схем, его преимуществах и недостатках по сравнению с аналогами.
Читать дальше →

Способ заставить Iptables писать в свой лог и не дублировать в системный

Reading time3 min
Views95K
В заметке рассказано о настройке журналирования iptables в отдельный файл. Большинство руководств предлагают два подхода, но, к сожалению, у меня на Debian они так и не заработали. Точнее, логи писались в /var/log/iptables.log, но продолжали дублироваться в /var/log/messages и /var/log/syslog, что очень раздражало и задача была незавершенной. Найдя способ не дублировать сообщения в системные, решил опубликовать полученные результаты.
Читать дальше →

Что такое TLS

Reading time9 min
Views511K
Данный текст является вольным переводом вот этой главы замечательной книги «High Performance Browser Networking» авторства Ильи Григорика. Перевод выполнялся в рамках написания курсовой работы, потому очень вольный, но тем не менее будет полезен тем, кто слабо представляет что такое TLS, и с чем его едят.

Общие сведения о TLS

Протокол TLS (transport layer security) основан на протоколе SSL (Secure Sockets Layer), изначально разработанном в Netscape для повышения безопасности электронной коммерции в Интернете. Протокол SSL был реализован на application-уровне, непосредственно над TCP (Transmission Control Protocol), что позволяет более высокоуровневым протоколам (таким как HTTP или протоколу электронной почты) работать без изменений. Если SSL сконфигурирован корректно, то сторонний наблюдатель может узнать лишь параметры соединения (например, тип используемого шифрования), а также частоту пересылки и примерное количество данных, но не может читать и изменять их.
Читать дальше →

Забудьте САР теорему как более не актуальную

Reading time12 min
Views70K
или «Прекратите характеризовать хранилища данных как CP или AP»

capДжеф Ходжес в своем прекрасном посте «Заметки о распределенных системах для новичков» рекомендует использовать САР теорему для критики найденных решений. Многие, похоже, восприняли этот совет слишком близко к сердцу, описывая свои системы как «СР» (согласованность данных, но без постоянной доступности при сетевой распределенности), «АР» (доступность без согласованного состояния при сетевой распределенности), или иногда «СА» (означает «Я всё ещё не читал статью Коды (Coda Hale) почти 5-летней давности»).

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

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

САР использует слишком узкое определение


Если вы хотите ссылаться на САР как на теорему (а не на расплывчатый концепт в маркетинговых материалах к вашей базе данных), вы должны быть точны. Математика требует точности. Доказательство сохраняется только если вы вкладывается в слова, то же самое значение, что было использовано при доказательстве. И оно опирается на очень точные определения:
Еще 3000 слов увлекательного чтива

Лекции Техносферы. 2 семестр. Методы распределенной обработки больших объемов данных в Hadoop

Reading time5 min
Views35K
Предлагаем вашему вниманию новый курс лекций Техносферы. Он представляет собой введение в Hadoop, фокусируясь на проектировании и реализации распределенных алгоритмов, которые могут применяться в различных сферах: обработка текстов, графов, связанных данных и т.п. Также рассматриваются различные компоненты платформы Hadoop и программные модели. Целью курса является знакомство студентов со стеком технологий Hadoop, применяемых для хранения, доступа и обработки больших объемов данных. Преподаватели курса: Алексей Романенко, Михаил Фирулик, Николай Анохин.

Лекция 1. Введение в Big Data и MapReduce


Что такое «большие данные». История возникновения этого явления. Необходимые знания и навыки для работы с большими данными. Что такое Hadoop, где он применяется. Что такое «облачные вычисления», история возникновения и развития технологии. Web 2.0. Вычисление как услуга (utility computing). Виртуализация. Инфраструктура как сервис (IaaS). Вопросы параллелизма. Управление множеством воркеров. Дата-центры и масштабируемость. Типичные задачи Big Data. MapReduce: что это такое, примеры. Распределённая файловая система. Google File System. HDFS как клон GFS, его архитектура.


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

QoS в Linux: издеваемся над трафиком

Reading time7 min
Views49K
В предыдущей статье я рассказывал про фильтр U32. В этой статье речь пойдёт о так называемых tc actions — действиях, которые можно производить над трафиком. Например, можно построить файерволл без использования iptables/netfilter, или изменять отдельные байты в пакетах, перенаправлять/зеркалировать трафик на другие интерфейсы. Осваивать это будем на примерах. Продолжение под катом.
Читать дальше →

Как айтишнику уехать в Германию. Часть 2

Reading time4 min
Views27K
Итак, вторая часть моей истории о переезде в Германию (первая). Сорри, если показалось, что долго не публиковал, но у меня была установка опубликовать вторую часть после нахождения квартиры, а вселился я в неё неделю назад.

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

Итак, на чём мы остановились…
Читать дальше →

Как айтишнику уехать в Германию. Часть 1

Reading time5 min
Views57K
В последние пару дней мне часто приходится отвечать на вопросы, как я нашёл работу в Германии, поэтому я решил объединить весь свой путь (ещё незаконченный) в единый текст и опубликовать здесь, потому как тема мне кажется интересной и актуальной.

Идея уехать жить куда-нибудь за пределы этой страны была давно, но как-то не сказать, что здесь всё было совсем плохо и невыносимо. Однако вернувшись в октябре из двухнедельной поездки по Европе (Барселона, Брюссель, Амстердам и Прага), желание заметно укрепилось. Плюс уже изрядно достали все эти #крымняш, нефть, рубль и великий Пу.

Вариант с Германией мне подсказала знакомая, которая собирается ехать туда учиться. Погуглил, и действительно — для айтишников (я джава-разработчик) всё очень хорошо. Информации на эту тему в интернете полно, не буду лишний раз дублировать (гуглить по ключевому слову bluecard). Если коротко — достаточно желания работодателя платить вам больше, чем 37 000 евро в год.
Читать дальше →

LFS: Темная сторона Силы. Часть 1

Reading time21 min
Views75K

Предисловие


Для того чтобы установить на свой компьютер Linux и начать его использовать для конкретных задач существует масса способов. Выбор дистрибутивов чрезвычайно широк, на любой вкус и цвет — и «для домохозяек» и для продвинутых пользвателей, допускающие любой уровень кастомизации, в том числе и сборку из исходников под конкретное железо. Установка системы в принципе доступна любому, мало-мальски грамотному пользователю ПК. И, если не погружаться в популярные по сей дей холивары на тему «Linux vs Другая ОС», то и спользование данной системы не требует знаний, которые были обязательными для новоиспеченного линуксоида скажем десять лет назад. С моей, глубоко субъективной точки зрения, за более чем десять лет, которые я наблюдаю за развитием этой системы, линукс стал более дружественен к новичкам и избавился от многих проблем, присущих ему в прошлом. И это хорошо.

Пингвины ручной сборки...


На Хабре уже мелькала пара статей на тему LFS, например эта, или вот эта. Комментарии к последней наводят на закономерную мысль — если набор возможностей для установки Linux и его изучения и так исчерпывающе широк, зачем нужен LFS?

Не буду витеивато излагать истории о том «как космические корабли бороздят… и когда Земля была огненным шаром...». Я отвечу на поставленный вопрос исходя из своей позиции — я собираю LFS потому, что мне просто интересно это сделать. Я вижу в этом процессе хорошую возможность заглянуть «под капот» системы. Допускаю, что этот путь сложно назвать оптимальным. Тем не менее, данная статья, и последующие за ней будут посвящены процессу ручной сборки Linux-системы. Данные статьи не будут переводом документации по сборке — в этом нет особой нужды. Акценты будут расставлены на специфике и ньюансах процесса, с которыми пришлось столкнуться автору лично. Будем считать этот цикл чем-то вроде дневника неофита.

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

О возможностях RAW для новичков

Reading time9 min
Views115K
Камеры и разнообразнейшие мобильные гаджеты, умеющие фотографировать, уже стали привычными предметами повседневности. Кому сейчас придёт в голову, например, переписывать какой-то нужный текст, когда можно просто достать смартфон и отщёлкать нужные страницы? Зачем пытаться объяснить на словах, как выглядит что-то, если можно это что-то отснять и потом просто предъявить фото на планшете? Сегодня фотографировать не умеют разве что пылесосы — и то не факт, что скоро производители не научат делать это и их тоже. Вон, камеры, не требующие питания, уже сделали.



Совершенно закономерным этапом совершенствования цифровой техники стал тот факт, что формат RAW вырвался из рамок профессиональных зеркальных фотоаппаратов и стал появляться и в «мыльницах», компактах и даже в смартфонах/планшетах. И если вы являетесь обладателем девайса, поддерживающего функцию съёмки в RAW, но не знаете, что это и с чем это едят — вам под кат. Формат RAW — довольно интересная и дающая массу творческих возможностей штука, хотя и требующая умения с собой обращаться…

Пост расчитан на новичков и тех, кто совершенно не в теме RAW-файлов. Любители фотографии вряд ли найдут здесь для себя что-либо новое, но могут помочь новичкам в комментариях. ;)

Achtung! Под катом тяжеловесные GIF'ки.
Эх, куда делись полароиды...

Джеф Атвуд: «Ваш пароль слишком короткий!»

Reading time3 min
Views40K
Я уже устал писать про пароли. Но как и налоги, электронная почта и красные глаза, они никуда не денутся. Что я могу сказать, исходя из опыта:
  • неважно, что вы скажете пользователям, они будут выбирать простые пароли
  • и они будут использовать один и тот же пароль везде. Если повезёт – два пароля

Что с этим можно сделать разработчику?
  • прекратите требовать пароли и разрешите авторизацию через Google, Facebook, Twitter, Yahoo или любой другой сервис. Лучший пароль – тот, который не нужно хранить.
  • поощряйте браузеры к поддержке автоматических встроенных систем создания и управления паролями. В идеале – поддерживаемых и операционками, но тут уже требуется всеобщая привязка к облачным технологиям. В эту сторону двигается Chrome.
  • пинайте юзеров, когда они вводят:
    • слишком короткие пароли: UY7dFd
    • пароли с минимумом энтропии: aaaaaaaaa
    • пароли из словаря: anteaters1


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

Символьный LCD дисплей (Видео урок 1)

Reading time1 min
Views54K
image
Всем привет. Решил сделать видео урок по символьному lсd-индикатору в поддержку начинающим программистам микроконтроллеров. Как говорится, лучше один раз увидеть, чем сто раз услышать.

Начинающие в основном используют готовые библиотеки для работы с lcd-индикатором и, конечно же, понятия не имеют, как организован протокол обмена между микроконтроллером и индикатором. А ведь, зная это, можно самому создать программу не хуже, а то и лучше.
Читать дальше →

Несколько интересностей и полезностей для веб-разработчика #42

Reading time6 min
Views37K
Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

Webtorrent




Полноценный торрент клиент для NodeJS и браузеров. Стримминг будет работать прямо в браузере благодаря WebRTC (data chanels) для P2P транспортировки. А самое главное «It's Just JavaScript™», то есть не нужны никакие дополнительные плагины или расширения. Проект собрал более 3000 звезд на GitHub и на данный момент предоставляет следующие возможности: непосредственно саму потоковую передача данных, загрузка нескольких торрентов одновременно, поддержку magnet uri, peer discovery и protocol extension api, возможность подключения WebTorrent клиентов на разных доменах, стримминг видео в <video> тег в формате (webm (vp8, vp9) или mp4 (h.264)), а также в AirPlay, Chromecast, VLC player и прочие устройства.

var WebTorrent = require('webtorrent')

var client = new WebTorrent()
var magnetUri = '...'

client.add(magnetUri, function (torrent) {
  // Got torrent metadata!
  console.log('Torrent info hash:', torrent.infoHash)

  torrent.files.forEach(function (file) {
    // Get a url for each file
    file.getBlobURL(function (err, url) {
      if (err) throw err

      // Add a link to the page
      var a = document.createElement('a')
      a.download = file.name
      a.href = url
      a.textContent = 'Download ' + file.name
      document.body.appendChild(a)
    })
  })
})

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

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, System Software Engineer
Lead
From 8,192 $
Git
C++ Boost
Multiple thread
Http
Linux
High-loaded systems
OOP
TCP
Network technologies
Linux administration