LINUX.ORG.RU

Сообщения vladimir-vg

 

Как переопределить поведение сисколов для определённого процесса?

Хочу попробовать записать IO одного процесса (сокеты, файлы) и потом воспроизвести для другого процесса.

Т.е. если была записана работа с сокетом, и я включил проигрывание записанного IO, то когда процесс попытается работать с сокетом с теми же аргументами, то ему будут возвращаться те же самые ответы, что были записаны ранее. Фактически никакой сокет открываться не будет.

С записью как-нибудь разберусь. Для проигрывания записанного IO мне нужно уметь переопределять сисколы вроде recvfrom, read для отдельного процесса. Как такое делать, на каком уровне это можно решить?

Может такую запись и проигрывание IO уже кто-то сделал раньше?

 , ,

vladimir-vg ()

Подходящая структура данных для изменяемой 2D карты.

Есть карта, пространство которой разбито на столбцы. Внутри каждого столбца могут быть несколько отрезков и точек внутри отрезка.

Выглядит это как-то так:

       
     | 
 |   o 
 | | o 
 | o | 
 o | | 
 |   o 
 | | | 
 o |   
 | o   
   |   

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

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

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

Подумав я наговнякал такую структуру:

map = {
  columnsOrder: [colId1, colId2, ...],
  columns: {
    colId1: {
      segments: [
        // yOffset -- отступ относительно конца предыдущего отрезка в столбце
        //
        // points содержит набор точек внутри этого отрезка,
        // с Y координатами относительно начала отрезка
        {id, at, yOffset, yLength, points},
        ...
      ]
    }
  }
}

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

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

Вроде должно работать, но выглядит как-то криво и переусложнённо. Я пробовал поискать что-то похожее на gamedev форумах (всё-таки 2D), но чёт не нашёл. Может быть есть какая-то стандартная структура данных для таких вещей?

Киньте в меня книгой или статьёй, или хотя бы ключевыми словами по которым стоит погулить.

 , ,

vladimir-vg ()

Анализ и визуализация логов для отладки

Шалом, ЛОР.

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

Предположим что этих серверов пока немного, 3-5 и шлют они не так уж много событий, скажем суммарно около ста в секунду.

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

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

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

Часть приложений с которых мы собираем события написаны на эрланге, поэтому id-процесса мы также берём как тег. Тогда каждое событие принадлежит к какому-то процессу, который рождается и умирает.

--------------

Я погуглил, но не нашёл того чего бы мне хотелось. Есть множество анализаторов логов, которые собирают статистику по ошибкам, ещё каким-то аномалиям, в основном это логи HTTP запросов. А анализ логов для отладки — что-то не видел такого.

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

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

 , , ,

vladimir-vg ()

Двуязычный mailing-list для сообщества

Допустим я запилил какой-то полезный опенсорц продукт, сделал документацию на английском и русском. Хочу запилить список рассылки.

Это нормально если я сделаю один список рассылки для русского и английского языка? Т.е. в одно и то же место можно писать как по-русски, там и по-английски. Писать на разных языках в рамках одной нити нельзя. Язык всей нити задаётся первым сообщением.

Вроде так будет удобнее, обе части коммьюнити в одном месте. Какие минусы/плюсы?

 ,

vladimir-vg ()

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

Допустим я развиваю проект: делаю релизы и веду версионирование. Иногда ломаю API.

Номера версий выбираются интуитивно, без какой-то строгой схемы. Релизы создаются когда кажется что созрел. Какая-то часть API тестируется, но не вся — на что хватило сил и времени.

Ну слышал про semantic versioning.

Возможно есть какой-то набор правил или подходов, какая-нибудь каноничная статья или книга, где бы чётко объяснялось как лучше создавать релизы, вести поддержку, организовывать тестирование?

ЛОР, порекомендуй.

 , ,

vladimir-vg ()

Удобное рабочее место. Совета-тред.

Пользуюсь двумя мониторами.

Удобно что больше рабочего пространства, меньше Alt-Tab дёргать. Однако неудобно, что мониторы никак не зафиксированы, угол между ними постоянно меняется (подвигаешь что-нибудь на столе).

Кроме того, я замечаю как больше поворачиваюсь к тому монитору на котором браузер, искривляется осанка.

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

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

Какие идеи, руководства? Примеры?

 

vladimir-vg ()

SCTP готов для продакшена?

Если я запущу два сервера, которые будут общаться по SCTP, один в Москве, другой в штатах — всё будет работать? Никаких проблем?

Как вообще с поддержкой SCTP?

 

vladimir-vg ()

Платформы выбора тред

Нужно выбрать платформу для написания сервиса по управлению ip-камерами.

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

Нужно:

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

Взял бы сразу Rails, ибо удобная и развитая платформа. Но у Ruby (и Rails в частности) очень серьёзные проблемы с памятью, один свежий инстанс приложения занимает где-то 80 Мб, а в процессе работы отжирается где-то до 200-300. Соответственно нужно караулить и рестартовать. Сложно и неудобно.

Erlang/Cowboy — всё отлично с потреблением ресурсов, с развёртыванием, вроде библиотек более-менее. Однако, как мне кажется, неудобен для такого проекта. Нам нужно очень много всяких мелочей, всякой логики и кастомизации, хотелок.

Возможно Rails обернуть в докер-контейнер, и весь цирк-деплой делать внутри, но мне эта идея как-то не по-душе.

Смотрю на связку Python/Flask: вроде и платформа более-менее развитая, и вроде как с потреблением получше.

У JVM-based языков те же проблемы с памятью что и у Rails, подскажите? Я имею ввиду всякие скалы и clojure.

 , , , ,

vladimir-vg ()

Посоветуйте литературу. Сетевой стек.

Порекомендуйте классичну и каноничну литературу по устройству сетей.

Я вот пользуюсь TCP а как он работает на уровень ниже — не знаю. Что касается UDP, то есть лишь общие представления.

Хочу знать устройство на более низком уровне.

 ,

vladimir-vg ()

Протокол доступа к ресурсам. REST-а мало.

REST — это набор гайдлайнов, но не готовый протокол.

И если мы хотим из UI работать с ресурсами, то сперва нужно написать клиент к нашему API.

Хотелось бы такое: воткнул, и начал работать, обращаться к ресурсам, делать поиск. Вроде не ахти какая магия, нужен просто подходящий протокол.

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

Либо реализация протокола 9P.

Есть ещё варианты? Покидайте какашками, пятница же =)

 ,

vladimir-vg ()

Ищу работу на бэкенд.

Достаточно опытный рельсовик, около 2,5 лет опыта, хочу роста.

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

Хочу, потому что этого всего у меня не было.

Что могу предложить:

  • Опыт работы с HTTP.
  • Хороший Rails опыт.
  • Работал с очередями, брокерами сообщений.

    В продакшене обычно использовал Sidekiq (на Redis), сейчас ковыряю RabbitMQ.

  • Как ни странно, опыт на фронтенде. Делал SPA: React + ReactRouter + Reflux,

    получилось чисто, красиво, круто. Свистоперделок и красивостей не знаю.

  • Беглый английский, устный и письменный.
  • Общая адекватность.

Вклад в опенсорц пока небольшой, успел понаделать багфиксов: react-router, sorcery, kaminari, sync.

Написал свой шаблонизатор Mustache для Erlang, на данный момент не поддерживается.

Ожидаю:

  • Использовать любые платформы и технологии, но интереснее всего те что связаны с Go и Erlang.
  • Работу на бэкенде. Работа на фронтенде допустима, но без вёрстки, именно логика и работа с данными.
  • Какой-никакой хайлоад.

Таки да, ищу удалённую работу. Сам территориально нахожусь в Калининграде. Командировки — ок, но на ПМЖ в другие места переезжать пока не готов.

Профили:

Блог: https://medium.com/@vladimir_vg

Контакты:

  • gordeev.vladimir.v@gmail.com
  • skype: gordeev.vladimir.v

 , , ,

vladimir-vg ()

Запрос с группировкой, выбор максимума из группы.

Есть таблица с полями url и created_at.

В таблице есть множество записей с одинаковым url. Мне нужно получить записи со самым старшим created_at, для каждой группы с одинаковым url. Т.е., имея:

    url         | created_at
    ------------------------
    abc         |          1
    abc         |          2
    abc         |          2
    def         |          3
    def         |          0

Получить:

    url         | created_at
    ------------------------
    abc         |          2
    def         |          3

Пробовал сделать это так:

    SELECT *
    FROM items
    GROUP BY url
    HAVING created_at = MAX(created_at)

Получаю:

    ERROR:  column "items.id" must appear in the GROUP BY clause or be used in an aggregate function

Попробовал то же самое немного иначе:

    SELECT MAX(created_at) AS last_created_At, *
    FROM items
    GROUP BY url
    HAVING created_at = last_created_at

Получил:

    ERROR:  column "last_created_at" does not exist
    LINE 4: HAVING created_at = last_created_at`

Похоже я неправильно понимаю как работает GROUP BY HAVING. Как мне достичь желаемого без вложенного запроса?

 ,

vladimir-vg ()

общепризнанный API для интернет-магазина

Хочу удобный API для получения данных о товарах в интернет магазине. Или может просто подробный формат (JSON) описывающий товар.

Есть множество различных полей и характеристик (цвет, размер, модель, диагональ, версия ос, материал изготовления, категория). Может уже есть какое-нибудь API либо формат разработанный какой-нибудь солидной компанией (вроде Amazon) для данных нужд?

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

vladimir-vg ()

Хочу граббер

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

Я собираюсь тупо запускать dom-парсер, смотреть глазами в каких элементах лежит нужная мне инфа, выдёргивать её. Всё просто.

Я вот подумал, а может в мире уже изобрели что-то более удобное? Паттерн-матчинг какой-нибудь, набор правил. Может есть какой-то приспособленный DSL для этого?

Язык и платформа — любая.

 , ,

vladimir-vg ()

Безопасно ли использовать 2.1?

Только вернулся с флота, немного потерялся в мире, не в курсе происходящего.

Версия Ruby 2.1 годится для продакшена? Или же вести разработку следует пока на 1.9.3?

 ,

vladimir-vg ()

Работа с русским языком

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

vladimir-vg ()

Простая реализация гибкого языка

Хочу найти экстремально простую и понятную реализацию (и желательно небольшую по объёму кода), пускай и тормозную для какого-нибудь простого динамического языка программирования.

Под такими языками я имею ввиду: Scheme, Tcl, Lua, может быть JavaScript (хотя не хотелось бы).

В первую очередь нужна простота и понятность.

ЛОР, подскажешь?

 

vladimir-vg ()

права на игровой контент

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

Просто есть одна древняя игрушка, думаю портировать ее на современные платформы. Где про это можно узнать?

PS: в первую очередь интересует законность этого в США.

vladimir-vg ()

VPS vs Cloud

Не знал куда лучше запостить, в Development, Web-Development, решил таки сюда.

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

Собственно не могу осознать разницу между несколькими VPS и пачкой instaces к примеру на AWS. Что лучше?

Можете рассказать, а? Ну или линк кинуть.

 ,

vladimir-vg ()

Подскажите задачу.

Мне нужна задача:

  • не требующая плотного общения с внешним миром (графика, сеть)
  • достаточно сложная
  • не чисто алгоритмическая

Возможно задача разбитая на два этапа. (Первое решение, изменение условия — доработка).

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

ЛОР, подскажешь?

 

vladimir-vg ()

RSS подписка на новые темы