Search
Write a publication
Pull to refresh
138
0
Владимир Губарьков @xonix

CTO

Send message

Как работает реляционная БД

Reading time51 min
Views559K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →

Рецепт настройки удалённого мониторинга контейнеров Tomcat и Jetty штатными средствами JDK

Reading time4 min
Views34K
Проводя уже около 6 лет собеседования с Java-разработчиками заметил, что из приходивших кандидатов вообще никто не знает, что можно штатными средствами JDK удалённо мониторить состояние JVM с контейнерами сервлетов.
Поэтому далее пошаговый рецепт, как настроить и использовать эту замечательную возможность
Читать дальше →

15 тривиальных фактов о правильной работе с протоколом HTTP

Reading time7 min
Views241K
Внимание! Реклама! Пост оплачен Капитаном Очевидность!

Ниже под катом вы найдёте 15 пунктов, описывающих правильную организацию ресурсов, доступных по протоколу HTTP — веб-сайтов, «ручек» бэкенда, API и прочая. «Правильный» здесь означает «соответствующий рекомендациям и спецификациям». Большая часть ниженаписанного почти дословно переведена из официальных стандартов, рекомендаций и best practices от IETF и W3C.



Вы не найдёте здесь абсолютно ничего неочевидного. Нет, серьёзно, каждый веб-разработчик теоретически эти 15 пунктов должен освоить где-то в районе junior developer-а и/или второго-третьего курса университета.

Однако на практике оказывается, что великое множество веб-разработчиков эти азы таки не усвоило. Читаешь документацию к иным API и рыдаешь. Уверен, что каждый читатель таки найдёт в этом списке что-то новое для себя.
Читать дальше →

Как связать Docker-контейнеры, не заставляя приложение читать переменные окружения

Reading time5 min
Views53K
Docker, если кто умудрился об этом ещё не слышать — фреймворк с открытым исходным кодом для управления контейнерной виртуализацией. Он быстрый, удобный, продуманный и модный. По сути он меняет правила игры в благородном деле управления конфигурацией серверов, сборки приложений, выполнения серверного кода, управления зависимостями и много ещё где.

Архитектура, которую поощряет Docker — это изолированные контейнеры, каждый из которых выполняет одну команду. Эти контейнеры должны знать только как друг друга найти — другими словами, о контейнере нужно знать его fqdn и порт, или ip и порт, то есть, не более, чем о любой внешней службе.

Рекомендованный способ сообщить такие координаты внутрь процесса, выполняемого в Docker — переменные окружения. Типичный пример этого подхода, не применительно к докеру — DATABASE_URL, принятый во фреймворке Rails или NODE_ENV принятый в фрейворке Nodejs.

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

Лекции Технопарка. 2 семестр. Java

Reading time4 min
Views74K


В эфире очередной выпуск материалов рубрики «Лекции Технопарка». На этот раз вы можете изучить лекции курса, посвящённого углублённому программированию на Java. Цель курса — получение студентами практических навыков создания клиент-серверного приложения на примере разработки сервера простой многопользовательской online-игры в малых группах (4-6 человек).
Читать дальше →

Анализ изображений и видео. Обнаружение текста на изображениях

Reading time1 min
Views27K
Сегодня мы публикуем последнюю лекцию курса «Анализ изображений и видео», прочитанного Натальей Васильевой — старшим научным сотрудником HP Labs и руководителем HP Labs Russia. Наталья Сергеевна читала курс, посвящённый анализу изображений, в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS клуба.



Всего в программе девять лекций, из которых уже были опубликованы:
  1. Введение в курс «Анализ изображений и видео»;
  2. Основы пространственной и частотной обработки изображений;
  3. Морфологическая обработка изображений;
  4. Построение признаков и сравнение изображений: глобальные признаки;
  5. Построение признаков и сравнение изображений: локальные признаки;
  6. Поиск по подобию. Поиск нечетких дубликатов;
  7. Классификация изображений и распознавание объектов;
  8. Анализ изображений и видео. Сегментация изображений.

Под катом вы найдете план новой лекции и слайды.
Читать дальше →

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

Reading time10 min
Views22K

Предисловие


Итак, пришло время расставить последние точки над «i» и рассказать о том, как из кучи исполняемых файлов и библиотек, которые мы героически собирали и настраивали в прошлой статье получить, наконец, Linux.

1. Подсистема инициализации Unix System V


Эта подсистема инициализации долгое время использовалась в Linux и была стандартом «де-факто». Однако время идёт, и нельзя в общем-то называть данный подход устаревшим. Гораздо точнее заметить что эта подсистема инициализации, в тренде развития систем семейства GNU/Linux, уступила свое место systemd, рожденной в недрах корпорации Red Hat. Существуют дистрибутивы до сих пор использующие скрипты инициализации. Однако все популярные линуксы практически поголовно пришли к использованию systemd, причем последним сдался консервативный Debian со своей дочкой Ubuntu.

Вообще-то я жалею, что сразу не стал собирать вариант LFS, использующий systemd. Просто, после первой неудачной попытки сборки не хотелось отклонятся от стабильной траектории. Возможно я ещё вернусь к этому вопросу, возможно так же что и не вернусь. Время покажет. А пока рассмотрим основные принципы работы скриптов инициализации System V.
Читать дальше →

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

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

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

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

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

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


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

Скачиваем Youtube плейлист в формате mp3 одним bash-скриптом

Reading time2 min
Views35K
Так сложилось, что в данный момент мой рабочий ноутбук оснащен лишь 2GB оперативной памяти. В связи с этим возникла необходимость оптимизации браузера, т.к. при большом количестве открытых вкладок памяти становится недостаточно и используется swap-раздел, что ведет к тормозам.

В работе мне помогает музыка, обычно это открытый таб с плейлистом Youtube. Так вот этот таб в просессе работы съедает до 500MB (!) и даже больше (Google Chrome).

Такое положение дел вынудило написать bash-скрипт, который на входе получает ID плейлиста, на выходе – mp3 файлы, которые можно слушать в любимом плеере, например, в MOC:
MOC
Читать дальше →

Простое объяснение движения денег в банковской системе

Reading time10 min
Views261K
От переводчика: В последние месяцы в жизнь многих людей прочно вошли новости сферы финансов. Одна из недавних тем — возможное отключение России от системы SWIFT. Угроза выглядит очень серьезно, но что на самом деле грозит стране, если события будут развиваться по этому сценарию? Наш сегодняшний материал призван помочь разобраться с тем, как все устроено в глобальном мире финансов.

На прошлой неделе [статья опубликована в ноябре 2013] Twitter сошел с ума из-за того, что кто-то перевел почти 150 миллионов долларов за одну транзакцию в криптовалюте. Появление такого твита было в порядке вещей:



Транзакция 194 993 биткоинов стоимостью в 147 миллионов долларов порождает много тайн и спекуляций

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

С помощью этой статьи я попытаюсь изменить ситуацию и проведу простой, но, надеюсь, не слишком упрощенный, анализ в этой области.
Читать дальше →

PostgreSQL vs MySQL

Reading time8 min
Views348K


В преддверии своего доклада на конференции PGCONF.RUSSIA 2015 я поделюсь некоторыми наблюдениями о важных различиях между СУБД MySQL и PostgreSQL. Этот материал будет полезен всем тем, кого уже не устраивают возможности и особенности MySQL, а также тем, кто делает первые шаги в Postgres. Конечно, не стоит рассматривать этот пост как исчерпывающий список различий, но для принятия решения в пользу той или иной СУБД его будет вполне достаточно.
Читать дальше →

Что именно происходит, когда пользователь набирает в адресной строке google.com? Часть 1

Reading time7 min
Views143K
Перевод первой части материала с github, обстоятельно объясняющего работу интернета: что именно происходит, когда пользователь набирает в адресной строке google.com?

Кнопка «ввод» возвращается в исходное положение


Для начала отсчёта выберем момент, когда кнопка «ввод» утоплена. В этот момент замыкается контур, отвечающий за эту кнопку. Небольшой ток проходит по логическим контурам клавиатуры. Они сканируют состояние всех переключателей, гасят паразитные электрические импульсы, и преобразовывают нажатие в код клавиши 13. Контроллер кодирует код для передачи в компьютер. Теперь это почти всегда делается через USB или Bluetooth, а раньше в процессе участвовали PS/2 или ADB.
Читать дальше →

Первые обидчики. Fritz и Genius

Reading time6 min
Views16K

Вторая серия о многолетней борьбе Каспарова с армадой терминаторов. Первую статью из цикла читайте здесь.

Шахматные программы считали с каждым годом всё быстрее и всё адекватнее оценивали позиции, в том числе и не изобилующими тактическими ударами. Алгоритмы совершенствовались и боты достигли успехов, выигрывая не только в комбинационном, но и в позиционном ключе. Компьютерные игроки почти излечились от жадности и если люди жертвовали материал, то роботы, ради восстановления игрового баланса, троянских коней с легким сердцем отправляли обратно.

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

Acer и Asus прекращают производство нетбуков

Reading time2 min
Views126K
image

В 2009 году компания ABI Research прогнозировала, что в 2013 году будет продано 139 миллионов нетбуков (изначально нетбуками назывались устройства с процессорами Intel Atom и экранами менее 10 дюймов по диагонали — хотя со временем определение стало более расплывчатым). Однако, как пишет The Guardian, продажи нетбуков в 2013 году на самом деле будут намного ближе к нулю, чем к 139 миллионам.

Издание ссылается на тайваньский сайт Digitimes, который сообщил, что компания Asus, которая фактически создала рынок нетбуков после выпуска Eee PC в 2007 году, объявила о прекращении производства ​​Eee PC с сегодняшнего дня. Acer тоже больше не намерен выпускать нетбуки — и это означает, что рынок нетбуков официально исчезнет, когда две компании распродадут оставшиеся запасы.
Читать дальше →

Как я формально «приструнил» Intel SpeedStep

Reading time5 min
Views152K
Доброго времени суток, уважаемые хабражители. 3 месяца назад я столкнулся с тем, что мой новый ноутбук, не сочтите за рекламу и антирекламу, Lenovo y570 (4gb ram, Intel Core I3 2330m, gt555m 1gb, Windows 7 Корпоративная х64) ужасно тормозил даже в не очень требовательных играх. Сам я далеко не фанат различных «стрелялок и гонялок», но порой хочется расслабиться или просто посмотреть, на что способен твой аппарат. Я перепробовал уйму различных драйверов для видеокарт Intel и Nvidia, а так же драйверы для чипсета материнской платы. Пару раз относил ноутбук в сервис, но там сказали, что никаких поломок нет.

Заинтересовались или сами столкнулись с подобной проблемой? Тогда прошу под кат.
Читать дальше →

Бесплатный web-forwarding от Google

Reading time1 min
Views6.5K
Не секрет, что приложения Google не могут работать на «голом» домене (naked domain), и для сайтов на Google Apps приходилось искать сторонний сервис web-forwarding или пользоваться wwwizer'ом. Google наконец-то решил исправить ситуацию и сделать собственный сервис переадресации для голых доменов. Новый сервис умеет перенаправлять только на поддомен и только с голого домена.

Чтобы подключить сервис, необходимо в настройках домена Google Apps включить предварительные версии функций и выбрать интерфейс следующее поколение. После этого интерфейс станет англоязычным, а в разделе «Domain settings» появится вкладка «Domain names» и останется лишь кликнуть по ссылке «Redirect your naked domain», выбрать поддомен, на который будет осуществляться переадресация и внести изменения на NS-сервере. Стоит отметить, что Google подошёл к решению проблемы с привычной серьёзностью и в A-записи надо будет добавить целых 4 IP-адреса.

История одного «нарушения» авторских прав. Часть 1

Reading time7 min
Views35K
В этом посте я расскажу про реальный случай уголовного преследования по статье 146 УК РФ, а заодно и по 273 (нарушение авторских прав и создание/распространение/использование вредоносного ПО). Я был непосредственным участником этой истории, сначала в качестве обвиняемого, а затем и подсудимого.
Читать дальше →

Принципы эмуляции на основе CHIP-8

Reading time9 min
Views5.1K
Считается, что прежде чем начинать эмулировать сложные системы, нужно начать с чего-то простого, например с Chip-8. В этой статье я попытаюсь рассмотреть все аспекты того, как можно написать свою реализацию этого языка в виртуальной машине. Пойдет совсем любой язык программирования, но из-за простоты я выберу Delphi.

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

Еще один способ применить для своих задач тестирования IBM Rational TestManager/Robot

Reading time12 min
Views1.2K

Предисловие



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

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

У нас уже были свои методы автоматизации тестов. Это и генераторы учетных записей абонентских вызовов, это и эмуляторы коммутационных железок, это и дикие выборки по базе данных биллинга. Много всего.

У руководства появилась идея несколько стандартизировать этот процесс путем введения в наши процессы некоторого средства, зарекомендовавшего себя в мире. Ну долгая история. Выбрали мы продукты IBM Rational.

Меня сюда привлекли с той целью, чтобы я попробовал внедрить эту систему нам и самое главное интегрировал ее с биллингом.

Честно скажу, что с системой я не знаком и многие вещи познавал, так сказать, с нуля. Мне интересно обрисовать свой путь, чтобы облегчить жизнь другим — это раз, два — это чтобы мне дали обратную связь опытные товарищи. А три — это мой маленький бунт. Я решил, что тестировать с помощью IR мы не будем, а будем использовать эту штуку исключительно для организации тестов.
Читать дальше

Information

Rating
Does not participate
Date of birth
Registered
Activity