Иван Ткаченко@velon
Программист, скептик и оптимист
Information
- Rating
- Does not participate
- Location
- Тюмень, Тюменская обл. и Ханты-Мансийский АО, Россия
- Date of birth
- Registered
- Activity
Specialization
Бэкенд разработчик
Ведущий
Git
Python
Docker
ООП
Spring Boot
JDBC
Прям горячих обсуждений и не было. Все дебаты были вокруг принимаем/не принимаем. И "а чего нет то?". Вот название должностей обсуждали вместо привычных джун/мидл/сеньор (ну разве что "сеньор" прям как так и надо), но мне ничего особо не запало в память.
Но ведь:
Немного непонятно как "Управление разработкой" отпочковалась от "Программирования". Можно же "управлять" не написав ни строчки кода. Чего "технического" от этой номинации ожидается?
Не хотел Вас расстраивать, но если Вы внимательно посмотрите на сервис в GitHub gist то увидите, что публичные методы принимают либо параметры типа
Long, либоorg.postgis.Geometry, сLongВы уже поспешили засунуть туда SQL инъекцию, теперь видимо пытаетесь сGeometry,ну если вам известен способ как вorg.postgis.Geometryзасунуть не пойми что, то соглашусь что инъекция возможна.Да есть ещё
layerName, но к нему не предусмотрен публичный доступ (см. GitHub gist), перекомпилировать разве что.В общем, хватит бравировать, все найденные вами инъекции основаны на невнимательности, поспешности и попытке рассмотреть строку в отрыве от метода.
Если хотите пощупать, то ещё раз сообщаю что БД есть в контейнере, а исходный код я ни от кого, так же, не утаиваю - хотите щупайте.
Тем более непонятно, если бы Вы ошибку нашли, то давно бы её озвучили, но Вы продолжаете пускать пыль в глаза, что как бы наводит на мысль, что это блеф, чтобы не выглядеть нелепо после поспешно найденной инъекции.
И теперь вместо того чтобы обсуждать предмет публикации я вынужден реагировать на ваш комплекс учителя.
БД есть в контейнере на DockerHub, исходник есть на GitHub. Не знаю что Вас останавливает
Мы всё про тот же самый пример, в котором вы утверждаете что что среди айдишников может быть
DROP DATABASE?Если да, то это найденная SQL инъекция основана на аксиоме о том, что в
List<Long>можно написать"1);DROP DATABASE;--".Боюсь что это не так. Если же действительно можно, то объясните каким образом, а не ходите вокруг да около с "человеческий язык не все понимают", - постараюсь всё-таки понять, для того мы здесь и пишем.
И рассматривать одну строку:
в отрыве от остального метода - не комильфо.
Ээээ. Вы про вот этот метод что ли:
Вы уверены что в одном из этих
List<Long> deletesIdsайдишников может быть что-то пободное DROP DATABASE ?Ну ладно, но одумайтесь, сегодня вы превращаете List<Long> в
DROP DATABASE, завтра свинец в золото, а послезавтра сожгут на костре.Обратите внимание на строки
Они не оперируют такими понятиями как скорость максимальная/минимальная/средняя. Есть просто "скорость", и graphhopper при построении самого быстрого маршрута полагается на неё, это видно из класса FastestWeighting, в методе
calcEdgeWeight.Понятие
maxSpeedтам скорее стоит воспринимать как "максимальная скорость с которой можно ехать превозмогая всё (пробки, качество дорог, сопротивление воздуха) кроме правил дорожного движения".Посмотрел пример. Их задумка оказалась не сложной, всё в классе DataUpdater:
Есть у них какой-то волшебный сервис http://www.stadt-koeln.de/externe-dienste/open-data/traffic.php. Он возвращает загруженность дорог, и с координатами.
Они получают
LocationIndex locationIndex = hopper.getLocationIndex();и находят в нём рёбра по координатам.В найденном ребре подменяют скорость см. lockedFeed
Этот
locationIndexпотом в классе Router применяется.Но в целом они тоже используют внешний источник для информации по трафику
Пример реализации ещё не смотрел. Интересно как они реализовали, посмотрю обязательно.
Я бы так реализовывал: в БД я бы хранил только редко меняемые или постоянные параметры, информация о пробках меняется динамически, - в БД её хранить не оптимально, - потребует постоянной перезаписи. По крайней мере не в той же базе, которая используется для построителя.
Я бы обработку вынес в класс в связанный с определением веса см. weighting. Уже в момент обработки ребра при маршрутиации смотрел какая на нём нагрузка - возможно получая её из стороннего сервиса, и использовал бы полученные данные для расчёта веса переопределив
calcEdgeWeight изAbstractWeightingСпасибо за отзыв.
Можно поподробнее "трафик", это что? Какой у него аналог в тегах OSM? highway?
Если я правильно понял вопрос, то общий подход такой:
Вы можете создавать в таблице любые поля. Главное добавить их во вьюшку см. Подготовка данных
Затем эти данные можно считывать из БД таким образом см. graphhopper-reader-postgis
highwayтам вот так обрабатывается:т.е. здесь могут быть любые атрибуты, какие пожелаете.
Encoder обрабатывает этот тег например как в CarFlagEncoder
Буду иметь в виду
Спасибо за статью. Используем во многих проектах Sphinx и Manticore. Знаком со Sphinx наверно с 2014 года. Действительно обидно когда решение незаслуженно уходит на второй план, многие даже про Sphinx и Manticore не слышали.
Нужно больше статей про Manticore. Я когда-то написал парочку на хабр. Возможно ещё напишу, - есть что рассказать.
Круто, присмотрюсь к определению высоты в пропущенных квадратах на основе вашего подхода со свёрткой. А кригинг рассматривали для той же задачи?
Нашёл, Rocketbook Capsule II называется, на getrocketbook.com обнаружилась
Где кейс купили? Поделитесь ссылкой, пожалуйста, а то никак найти не могу.