Как стать автором
Обновить
13
0
Петр @reiser

Ruby-разработчик

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

Алгоритм Укконена: от простого к сложному

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

Изучая курс Алгоритмы на строках столкнулся с задачей о построении суффиксного дерева. Перейдя по ссылке на дополнительные материалы наткнулся на рекомендацию "просмотреть этот замечательный комментарий на Stack Overflow". Изучив и реализовав по приведённому вольному описанию алгоритм Укконена решил поделиться переводом.

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

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

В одной лодке с «ублюдком»: 11 продвинутых советов по использованию Git

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

*"ублюдок" — вольный перевод слова "git" — "an unpleasant or contemptible person", "неприятный или презренный человек".



В комментариях к статье 15 базовых советов по Git для эффективной работы каждый день развернулась дискуссия на тему эффективности использования тех или иных команд и опций. Надо признать, что git предоставляет столько различного функционала, что во-первых, за всем становится невозможно уследить, а во-вторых, его можно совершенно по-разному вписывать в рабочий процесс.


Давайте посмотрим, что можно использовать, чтобы улучшить себе жизнь. Статья предполагает, что читатель умеет пользоваться основными возможностями git и понимает что делает, когда, скажем, вводит в консоль git rebase --merge --autostash.

Читать дальше →
Всего голосов 105: ↑100 и ↓5+95
Комментарии26

Основы React: всё, что нужно знать для начала работы

Время на прочтение15 мин
Количество просмотров204K
Хотите узнать о том, что такое React, но вам всё никак не выпадает шанс изучить его? Или, может быть, вы уже пробовали освоить React, но не смогли толком понять? А может, вы разобрались с основами, но хотите привести в порядок знания? Эта статья написана специально для тех, кто положительно ответил хотя бы на один из этих вопросов. Сегодня мы создадим простой музыкальный проигрыватель, раскрывая основные концепции React по мере продвижения к цели.

image

Разобравшись с этим материалом, вы освоите следующее:

  • Компоненты React.
  • Рендеринг ReactDOM.
  • Классы компонентов и функциональных компоненты.
  • JSX.
  • Состояние (state).
  • Обработка событий.
  • Асинхронный метод setState.
  • Свойства (props).
  • Ссылки (refs).

Это — практически всё, что нужно знать для того, чтобы создавать и поддерживать React-приложения.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии61

Инструкция: что делать, если вы не успеваете к дедлайну

Время на прочтение2 мин
Количество просмотров19K
Вы находитесь в панике. До дедлайна несколько дней/часов, а может и меньше. В голове вы уже сочиняете оправдательную историю, представляете лицо разъяренного босса или тимлида, а потом смотрите стоимость билетов в Иркутск. Не надо так.


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

Алгоритм выбора location в Nginx

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

Алгоритм выбора location обязателен к знанию при настройке nginx. Тем не менее, на официальном сайте nginx (на 2018 год) не сказано ни слова про алгоритм выбора в случаях, когда какие-то location'ы вложены друг в друга, а в статьях в интернете приводятся в корне неверные алгоритмы. В статье также будет дан пример уязвимого конфига.
Читать дальше →
Всего голосов 37: ↑32 и ↓5+27
Комментарии21

Лабораторная работа: введение в Docker с нуля. Ваш первый микросервис

Время на прочтение26 мин
Количество просмотров337K
Привет, хабрапользователь! Сегодня я попробую представить тебе очередную статью о докере. Зачем я это делаю, если таких статей уже множество? Ответов здесь несколько. Во-первых не все они описывают то, что мне самому бы очень пригодилось в самом начале моего пути изучения докера. Во-вторых хотелось бы дать людям к теории немного практики прямо по этой теории. Одна из немаловажных причин — уложить весь накопленный за этот недолгий период изучения докера опыт (я работаю с ним чуть более полугода) в какой-то сформированный формат, до конца разложив для себя все по-полочкам. Ну и в конце-концов излить душу, описывая некоторые грабли на которые я уже наступил (дать советы о них) и вилы, решение которых в докере просто не предусмотрено из коробки и о проблемах которых стоило бы задуматься на этапе когда вас распирает от острого желания перевести весь мир вокруг себя в контейнеры до осознавания что не для всех вещей эта технология годна.

Что мы будем рассматривать в данной статье?

В Части 0 (теоретической) я расскажу вам о контейнерах, что это и с чем едят
В Частях 1-5 будет теория и практическое задание, где мы напишем микросервис на python, работающий с очередью rabbitmq.
В Части 6 — послесловие
Читать дальше →
Всего голосов 108: ↑107 и ↓1+106
Комментарии36

Ищем имена с опечатками в PostgreSQL

Время на прочтение12 мин
Количество просмотров33K
Все началось с того, что мне нужно было разработать поиск пациентов для одной внутренней медицинской системы. Логика работы была в том, что если мы не нашли человека в системе, то его нужно создать (а дубли пациентов плодить нельзя). В связи с этим одной из подзадач стала реализация поиска людей с учетом опечаток в их именах. Ну а поскольку я люблю PostgreSQL (а когда в руках у тебя молоток, то все похоже на гвозди), не сложно угадать, на чем я решил реализовать поиск с опечатками…


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

DockStation. Почему мы решили сделать этот проект

Время на прочтение5 мин
Количество просмотров13K
Работа с Docker не самая простая задача. В этой статье хотелось бы рассказать что нас подтолкнуло с созданию DockStation проекта и что у нас уже реализовано на данный момент.

Начало


Я работаю разработчиком уже больше 8 лет, и для меня всегда была болью настройка dev окружения для разработки при переходе на другую OС или смене рабочей машины.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии56

Курс молодого бойца PostgreSQL

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


Хочу поделиться полезными приемами работы с PostgreSQL (другие СУБД имеют схожий функционал, но могут иметь иной синтаксис).

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

Данный материал будет полезен тем, кто полностью освоил базовые навыки SQL и желает учиться дальше. Советую выполнять и экспериментировать с примерами в pgAdmin'e, я сделал все SQL-запросы выполнимыми без разворачивания каких-либо дампов.

Поехали!
Читать дальше →
Всего голосов 79: ↑77 и ↓2+75
Комментарии59

Свежий KDE от разработчиков плюс стабильность Ubuntu 16.04 -> KDE Neon

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

Я думаю, что никто из Linux-адептов не будет отрицать большой вклад в развитие экосистемы, который внесла Ubuntu. Да, ресурсов на многое не хватает, проекты нередко забрасываются на половине пути. Но, как мне кажется, они сумели достичь прекрасного баланса между стабильностью и свежестью пакетной базы. Какая-то очень правильная грань между выдержанностью благородной плесени у Debian и непрерывным поиском того, что отломалось при обновлении в Arch Linux. Хочется просто работать? Сидим на LTS версиях дистрибутива с дефолтными репозиториями. Нужен какой-то специфический софт? Подключаем PPA от разработчика. Поставили свежее железо, нужна поддержка в ядре, но с LTS уходить не хочется — используем LTS Enablement Stacks (HWE).

Не всем нравится дефолтная оболочка Unity, но тут к услугам пользователя все семейство Ubuntu Flavours. Я в своем выборе остановился на KDE и Kubuntu соответственно. Все было хорошо, но сидение на LTS релизах неизбежно вызывает тягу к приключениям и ломанию системы. И тогда я пошел на поиски чего-то нового.
Всего голосов 34: ↑34 и ↓0+34
Комментарии56

Анализ тарифов на виртуальные серверы

Время на прочтение4 мин
Количество просмотров10K
Предлагаю обзор хостеров по версии Поиск VPS. Количество компаний в каталоге на момент написания обзора — 198, количество тарифов на виртуальные серверы — 1798. Практически все хостеры — русскоязычные.


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

OpenResty: превращаем NGINX в полноценный сервер приложений

Время на прочтение9 мин
Количество просмотров83K
Мы вновь публикуем расшифровку доклада с конференции HighLoad++ 2016, которая проходила в подмосковном Сколково 7—8 ноября прошлого года. Владимир Протасов рассказывает, как расширить функциональность NGINX с помощью OpenResty и Lua.

Всем привет, меня зовут Владимир Протасов, я работаю в Parallels. Расскажу чуть-чуть о себе. Три четверти своей жизни я занимаюсь тем, что пишу код. Стал программистом до мозга костей в прямом смысле: я иногда во сне вижу код. Четверть жизни — промышленная разработка, написание кода, который идёт прямо в продакшн. Код, которым некоторые из вас пользуются, но не догадываются об этом.

Чтобы вы понимали насколько всё было плохо. Когда я был маленьким джуниором, я пришёл, и мне выдали такие двухтерабайтные базы. Это сейчас тут у всех highload. Я ходил на конференции, спрашивал: «Ребят, расскажите, у вас big data, всё круто? Сколько у вас там базы?» Мне отвечали: «У нас 100 гигабайт!» Я говорил: «Круто, 100 гигабайт!» А про себя думал, как бы аккуратненько сохранить покерфейс. Думаешь, да, ребята крутые, а потом возвращаешься и ковыряешься с этими многотерабайтными базами. И это — будучи джуниором. Представляете себе, какой это удар?

Я знаю больше 20 языков программирования. Это то, в чём мне пришлось разобраться в процессе работы. Тебе выдают код на Erlang, на C, на С++, на Lua, на Python, на Ruby, на чем-то еще, и тебе надо это всё пилить. В общем пришлось. Точное количество посчитать так и не удалось, но где-то на 20 число потерялось.
Читать дальше →
Всего голосов 49: ↑44 и ↓5+39
Комментарии35

Browser Fingerprint – анонимная идентификация браузеров

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


Валентин Васильев (Machinio.com)


Что же такое Browser Fingerprint? Или идентификация браузеров. Очень простая формулировка — это присвоение идентификатора браузеру. Формулировка простая, но идея очень сложная и интересная. Для чего она используется? Для чего мы хотим присвоить браузеру идентификатор?


  • Мы хотим учитывать наших пользователей. Мы хотим знать, пришел ли пользователь к нам первый раз, пришел он во второй раз или в третий. Если пользователь пришел во второй раз, мы хотим знать, на какие страницы он заходил, что он до этого делал. С анонимными пользователями это невозможно. Если у вас есть система учета записей, пользователь логинится, мы все про него знаем — мы знаем его учетную запись, его персональные данные, мы можем привязать любые действия к этому пользователю. Здесь все просто. В случае с анонимными пользователями все становится гораздо сложнее.
Всего голосов 75: ↑54 и ↓21+33
Комментарии167

Генерация документов в doc, excel, pdf и других форматах на сервере

Время на прочтение3 мин
Количество просмотров41K
Выгрузка отчетов в различных форматах — типовая задача для многих проектов. И сейчас есть немало инструментов для этого. Среди них есть интересный вариант, который применяется, как мне кажется, не часто, но он однозначно стоит внимания. Потому что позволяет получить документ в нужном формате буквально одной командой. О нем и расскажу.

image

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

Эй, запрос! Ты живой? Как легко обработать блокировки в PostgreSQL

Время на прочтение8 мин
Количество просмотров53K
Доброе время суток! Администрирование и сопровождение реляционных баз данных чаще всего является нетривиальной задачей. Иногда запросы, работавшие быстро, внезапно начинают «тормозить» по непонятным причинам, размер таблиц растет и в целом производительность базы данных снижается.

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

Чтобы разобраться в сложившейся ситуации, администратору БД необходимо понять, какой процесс блокирует и какой процесс является блокируемым, а также иметь возможность отменить или «убить» блокирующий процесс и в конце проверить результат.

В этой статье я хочу коснуться темы блокировок в PostgreSQL и рассказать об инструментах для работы с ними. Но сначала попробуем разобраться в самой теме.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии1

Разделение текста на предложения с помощью Томита-парсера

Время на прочтение4 мин
Количество просмотров19K
Чтобы подготовить русскоязычные тексты для дальнейшего анализа, мне однажды понадобилось разбить их на предложения. Разумеется, автоматически. Что приходит на ум в первую очередь, если нужно разделить текст на предложения? Разбить по точкам — угадал?

Если вы начнете это делать, то довольно быстро столкнетесь с тем, что точка — это не всегда разделитель предложений (“т.к.”, “т.д.”, “т.п.”, “пр.”, “S.T.A.L.K.E.R.”). Причем эти токены не всегда будут исключениями при разбивке текста на предложения. Например, “т.п.” может быть в середине предложения, а может и в конце.

Вопросительный и восклицательный знак тоже не всегда разделяют текст на предложения. Например, “Yahoo!”. Предложения могут разделять и другие знаки, например, двоеточие (когда следует список из отдельных утверждений).

Поэтому я долго не думая поискал готовый инструмент и остановился на Томита-парсере от Яндекса. О нем и расскажу.
Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии18

Верстка интернет-магазина: список товаров

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


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


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

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

Производительность запросов в PostgreSQL – шаг за шагом

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


Илья Космодемьянский ( hydrobiont )


Для начала сразу пару слов о том, о чем пойдет речь. Во-первых, что такое оптимизация запросов? Люди редко формулируют и, бывает так, что часто недооценивают понимание того, что они делают. Можно пытаться ускорить какой-то конкретный запрос, но это не обязательно будет оптимизацией. Мы немного на эту тему потеоретизируем, потом поговорим о том, с какого конца к этому вопросу подходить, когда начинать оптимизировать, как это делать, и как понять, что какой-то запрос или набор запросов никак нельзя оптимизировать – такие случаи тоже бывают, и тогда нужно просто переделывать. Как ни странно, я почти не буду приводить примеров того, как запросы оптимизировать, потому что даже 100 примеров не приблизят нас к разгадке.
Всего голосов 46: ↑44 и ↓2+42
Комментарии16

Получаем список доменов и IP адресов всех банков мира

Время на прочтение1 мин
Количество просмотров34K
Думаю каждый сталкивался с ситуацией, когда в начале месяца у абонента интернет-провайдера баланс уменьшается в ноль или становится отрицательным, а при попытке пополнить счет картой на каком-то этапе страница банка становится не доступной.

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

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

Подборка фреймворков для машинного обучения

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


В последние годы машинное обучение превратилось в мейнстрим небывалой силы. Эта тенденция подпитывается не только дешевизной облачных сред, но и доступностью мощнейших видеокарт, применяемых для подобных вычислений, — появилась ещё и масса фреймворков для машинного обучения. Почти все из них open source, но куда важнее то, что эти фреймворки проектируются таким образом, чтобы абстрагироваться от самых трудных частей машинного обучения, делая эти технологии более доступными широкому классу разработчиков. Под катом представлена подборка фреймворков для машинного обучения, как недавно созданных, так переработанных в уходящем году. Если у вас все хорошо с английским, то статья в оригинале доступна здесь.
Читать дальше →
Всего голосов 38: ↑35 и ↓3+32
Комментарии12
1
23 ...

Информация

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