Snusmumriken
правда? Какая IDE и какими горячими клавишами умеет мультистрочную замену в зависимости от наличия определённого контента где-то ранее по файлу?
Хм. Notepad++ )) Там нормальные регулярки произвольной вложенности, включая всякие \1\2\3 - как matched-элементы.
mva
или, например, взять html-страницу, выгрепать оттуда ссылки на картинки, цену товара, метаданные товара и т.п. и сформировать из этого csv ;)
mva
я, вот, на awk это легко делал :)
mva
это регулярками можно
мало IDE умеют регулярки на нормальном уровне (чтоб можно было делать мультистрочную замену (и ещё реже они умеют вставлять несколько строк)
Snusmumriken
я, вот, на awk это легко делал :)
Это и сгрепать можно.
Snusmumriken
мало IDE умеют регулярки на нормальном уровне (чтоб можно было делать мультистрочную замену (и ещё реже они умеют вставлять несколько строк)
Несколько строк - \n же. Что поиск что вставка нескольких строк. Следующая строка - это символ ))
mva
Это и сгрепать можно.
https://gist.github.com/raw/64dd949f342bef2ef363fa4d129f83f9 вот как это было у меня
mva
грепом это можно было бы упороться делать :)
mva
кстати, где-то как раз после этого я взялся допиливать Lua-cURL и lua-htmlparser 😁
bebebe
я, вот, на awk это легко делал :)
вы это делали на awk, потому что на html страничке не было js который подгружал бы это из базы
bebebe
а таких сайтов все меньше и меньше.
mva
увы, но да
Snusmumriken
А там проще. Конвертер однотипных js в csv. Это не сложно.
Snusmumriken
Плюс зачастую изнутри ЯП проще работать с апишкой, чем с сайтом, я пробовал и то и то. Сайты регулярками расковыривать не понравилось : )
bebebe
А там проще. Конвертер однотипных js в csv. Это не сложно.
у вас видимо "сложных" задач не было когда из api приезжает dataset, и далее javascript'ом процессится и на выходе получаются преобразованный dataset
Snusmumriken
Ну, у меня были варианты когда вместо запроса прилетает требование капчи, а по урлу капчи прилетает очень сильно обфусцированный javascript, который магическим образом меняет DOM и подставляет куда надо ссылку на капчу, сгенерированную из него самого.
bebebe
я писал о другом случае, когда на javascript'e написана бизнес-логика
Snusmumriken
А тут - на жаваскрипте написана ссылка до капчи ))
bebebe
все таки причем тут капча?
Snusmumriken
Дык там надо было дёргать сторонние сервисы автоматизированно. А сервисы защищаются от роботов.
bebebe
ладно. я вам про данные говорю, а вы мне про капчу.
Snusmumriken
А если на жаваскрипте написана бизнес-логика, то это как раз "простой" случай. Берём v8, цепляем к луа через ffi и дёргаем. Можно закешировать, для пущей скорости обработки кучи запросов. А капча этим не разгадалась, потому что отдельный v8 не имеет доступа к DOM'у ))
mva
foma_erema.ogg
Snusmumriken
Эмулируем методы. Пишем библиотеку с функциями, эмулирующими доступ к DOM и прочей JS-апишке, подключаем к v8 по умолчанию ))
Snusmumriken
Это же всё - просто набор функций )) Их много и они стрёмные, но эмуляция!
bebebe
понятно, вы все таки погуглите что такое selenium-headless
bebebe
а то и впрямь будете v8 дергать из lua
Snusmumriken
Я знаю что такое headless chrome, это не тот вариант. Уже дёргал и в виде селениума и в виде безголового хромчика. Жручий, делает кучу бессмысленной работы, гораздо медленнее чем голый v8 + эмуляция (раз в двести, это много, в моём случае) ))
bebebe
у вас видимо времени много 😉
bebebe
общий подход такой, в публичных облаках поднимаются контейнеры в headless браузерами, и с одного хоста идет оркестрация
Snusmumriken
У меня мало времени на обработку запрос-ответов сторонних сервисов, там лимиты по секундам на обработку сразу сотни внешних сервисов параллельно : )
bebebe
извините, я тогда сольюсь, вроде про одно говорили, а теперь у нас тут уже json роутер между сервисами в секунду между запросом-и-ответом
Snusmumriken
Чего-чего? Ты спросил: "[что мы делаем когда] из api приезжает dataset, и далее javascript'ом ". Я ответил, что конкретно мы делаем, в каких случаях, и объяснил почему. И рассказал, почему не подходит безголовый режим.
bebebe
👌
Snusmumriken
И чего "я тогда сольюсь бла-бла говорили одно бла-бла а теперь совсем другое бла"? К чему это вообще было?
bebebe
я понял что глубоко не прав в нашей беседе и не могу вместить в свой разум всё богатство вашего опыта
Snusmumriken
Snusmumriken
Кстати, восхитительный headless chrome можно дёргать обычным os.execute, а потом парсить то что он выдал в конечном результате. Не такой глубокий контроль как у селениума (там драйвер имеет собственный набор методов типа "жмакнуть кнопку/отправить формочку"), но подобные штуки делаются той же командной строкой но чутка через задницу. Правда, это должен быть таки не хром, а особый девелоперский хромиум, чтобы тянуть такие фичи. Эх. Ну, я к тому что лишнее звено можно удалить, если не нужен "особый комфорт".
Snusmumriken
А, не, только что проверил - можно и в обычном хроме : )
Yuriy
> os.execute Мне кажется в коде эта последовательность символов должна применяться крайне осторожно и желательно никогда
Snusmumriken
Хмм. А если тебе надо подписать документ через crypto-pro, у которого только интерфейс командной строки, что ты будешь делать?
Yuriy
Хмм. А если тебе надо подписать документ через crypto-pro, у которого только интерфейс командной строки, что ты будешь делать?
Не. Я не спорю - есть ситуации когда бе этого не обойтись. но это те крайние ситуации когда без этого не обойтись
Snusmumriken
Прелесть : )
Snusmumriken
Не. Я не спорю - есть ситуации когда бе этого не обойтись. но это те крайние ситуации когда без этого не обойтись
Ну, когда я подключаю v8 с эмулированными библиотеками - os.execute не дёргается за ненадобностью : )
Snusmumriken
Если остро понадобится прям таки безголовый хром - придётся дёргать как миленьким именно через os.execute. Сначала - на тестовой среде, конечно, и с кучей проверок, что туда пихают именно то что нужно, а не sudo rm -rf : )
mva
кстати
Alxius
подскажите кто нибудь что сделать чтобы в Sublime 3 pfhf, заработали горячие клавиши на РУССКОМ языке... после какого то обновления в Минт 18с 64 просто они тупо теперь не работают месяца примерно 3-4 назад. в свежеустановленной системе конечно всё ок. но мне не нужна свевжеустановленная мне нужно просто исправить баг . менять ничего не собираюсь. сейчас потихоньку привыкаю писать все транслитом в коде программы в комментариях вместо русского языка.
vvzvlad
Я.
и я. первый(не считая чего-то в школе) и основной(еще си, но его меньше гораздо, и в основном для мк)
Andrei
Не первый, но основной последние 6 лет))
vvzvlad
У меня есть пользовательский код, который я запускаю вот таким способом: drivers_script_bodies[uuid] = setmetatable({}, {__index=_G}) local status, err_msg = pcall(setfenv(current_func, drivers_script_bodies[uuid])) Как мне создать функцию, допустим, log(), которая бы была уникальной для каждого скрипта?
vvzvlad
Я хочу сделать так, чтобы каждый скрипт передавал в print свой uuid, но чтобы изнутри скрипта это выглядело бы просто как log("message"). Т.е. function log(message) print(uuid, message) end
ShadoWalkeR
Господа, а как редису сказать сделать чтото на EXPIRE KEY? Пока что из документации выявлено, что он молча удаляет ключ
Yuriy
у него есть pub на все keys Но это имхо не самый удобный механизм
Yuriy
https://redis.io/topics/notifications
ShadoWalkeR
Да мне достаточно уведомления - а на него во внешнем скрипте я сам все прикручу
Snusmumriken
Ммм. Может тогда тебе написать простенький планировщик, который имеет пул событий (хоть в той же редиске) и сам выполняет определённые процедуры по таймеру, включая удаление ключей (вместо expire)?
ShadoWalkeR
Ну я хочу stateless обработчик)
Snusmumriken
ХМММ. Надо глянуть что в мониторинге.
Yuriy
к тому же еще и блокирующий скорее всего
Snusmumriken
> ели есть механизм Какой механизм?
Yuriy
Ну я хочу stateless обработчик)
А case какой? ТЫ откуда будешь проверять?
Yuriy
> ели есть механизм Какой механизм?
Ну redis умеет публиковать expire. Я дал ссыль выше
Yuriy
просто это не всегда удобно
Snusmumriken
Хмммм.
ShadoWalkeR
У меня просто микросервисная система получилась. Осталось решить 2 задачи чтобы совсем по учебнику вышло - что микросервисы полностью stateless стали и "забытые" данные подчищались
Snusmumriken
А всем "забытым данным" выставлять одинаковые expire - не? Чтобы удалялись одновременно.
Yuriy
да и в других решениях я по событию проверяю если мне сильно надо
ShadoWalkeR
У меня списки и хэши в редисе - мне нужно определенные записи из них дропать
Yuriy
так же у редиса есть поерация добавления только если ключ не существует
Yuriy
забл как ее имя
Yuriy
SETNX