Помимо программирования, моя повседневная работа включает в себя множество ручных технических операций, таких как:
- Сравнение двух фрагментов текстов во время конфликтов слияния, чтобы выяснить, что изменилось;
- Извлечение данных JSON из конечной точки и преобразование их в соответствующую форму, чтобы поделиться с менеджерами по продуктам;
- Тестирую несколько быстрых логических скриптов, для которых мне лень запускать нод;
И так далее.
Все инструменты повышения производительности, которые я пробовал, не полностью устранили зуд; Я всегда чувствовал, что их черты были слишком ограниченными и плохо сочетались друг с другом. В конце концов я решил создать свой собственный, и в результате бесчисленных выходных, проведенных в мастерской, появился FluentUtils (https://fluent-utils.com).
Вместо того, чтобы предлагать отдельные утилиты, каждая из которых служит определенной цели, FluentUtils предлагает вам небольшие, беспристрастные строительные блоки, которые вместе творят чудеса для создания сложных инструментов. Наиболее важной концепцией FluentUtils является конвейер, который принимает входные данные и производит выходные данные. Каждый канал предназначен для обработки одного конкретного преобразования, так что вы можете свободно смешивать и сочетать их вместе для создания нужных вам функций.
Несколько каналов можно объединить в цепочку, чтобы создать конвейер, который может радикально преобразовать предоставляемые вами значения. Для облегчения быстрого создания пайплайна для распространенных случаев использования также предусмотрены рецепты пайплайнов. После выбора они моментально установят необходимые трубы в соответствии с их назначением.
Практический пример
Давайте представим, что у нас есть такой большой CSV:
id,first_name,last_name,email,gender,ip_address 1,Ogdan,Strippling,[email protected],Male,250.186.142.128 2,Marnie,Bockings,[email protected],Polygender,93.142.47.140 3,Mignonne,Lummus,[email protected],Female,158.180.149.136 4,Kellina,Wade,[email protected],Non-binary,115.127.230.128 5,Suzann,MacQuaker,[email protected],Female,48.130.231.207 6,Trent,Sharrocks,[email protected],Male,204.45.13.47 7,Halsy,Uridge,[email protected],Male,40.86.133.170 8,Fenelia,Sepey,[email protected],Female,230.232.63.216 9,Vassily,Lantiffe,[email protected],Genderqueer,221.47.21.175 10,Mersey,Fruser,[email protected],Female,129.63.1.136 11,Bel,Bellenger,[email protected],Genderfluid,224.117.119.232 12,Somerset,Gascar,[email protected],Male,47.68.177.178 13,Eddie,Skains,[email protected],Female,32.134.245.116 14,Shelli,Karadzas,[email protected],Female,133.58.169.127 15,Jehu,Fordyce,[email protected],Male,47.225.238.161 16,Gregorio,Sharpin,[email protected],Male,237.106.183.16 17,Idette,Gamblin,[email protected],Female,127.158.91.190 18,Janifer,Melmore,[email protected],Female,137.195.42.153 19,Jay,North,[email protected],Male,187.188.40.120 20,Aldwin,Buggy,[email protected],Male,125.244.255.233 21,Eldin,Matei,[email protected],Male,205.134.153.190 22,Rickey,Edlyn,[email protected],Male,163.168.198.230 23,Stillmann,Titcom,[email protected],Male,120.34.42.140 24,Davine,Frome,[email protected],Female,25.177.86.232 25,Terrel,Luckcock,[email protected],Male,224.214.230.68 26,Maxim,Ayars,[email protected],Male,170.69.148.159 27,Samara,Harston,[email protected],Genderfluid,4.132.120.1 28,Constancy,Tomashov,[email protected],Female,234.223.34.23 29,Pearl,Gawthrop,[email protected],Female,8.246.37.66 30,Godard,Keelan,[email protected],Male,241.220.12.239 31,Shelley,Youngs,[email protected],Male,109.17.61.88 32,Leilah,Prattington,[email protected],Female,212.39.149.235 33,Reuben,Timny,[email protected],Male,16.226.171.66 34,Rowen,Cross,[email protected],Male,201.127.198.130 35,Ermin,Sellick,[email protected],Male,33.100.190.156 36,Antony,Gyurkovics,[email protected],Male,157.174.122.94 37,Friedrick,Cuphus,[email protected],Male,8.248.88.97 38,Eulalie,Lohan,[email protected],Female,158.10.78.42 39,Theadora,Meadus,[email protected],Female,189.91.221.159 40,Lincoln,Gasgarth,[email protected],Male,36.184.185.218 41,Anabelle,Barends,[email protected],Female,75.14.141.93 42,Arlin,Arlott,[email protected],Male,71.195.25.133 43,Jessamyn,Sharpley,[email protected],Female,139.250.145.145 44,Allyn,Rosellini,[email protected],Female,144.251.234.30 45,Claudia,Rosendorf,[email protected],Female,247.105.145.237 46,Caesar,Ortelt,[email protected],Male,143.156.141.144 47,Tierney,Baston,[email protected],Female,251.118.98.19 48,Victoria,Clancey,[email protected],Female,0.11.199.61 49,Othelia,Sidary,[email protected],Female,7.63.13.183 50,Dulce,Liddicoat,[email protected],Female,167.99.84.17
Предположим, теперь вам нужно найти дубликаты адресов электронной почты. Первое, что вы можете сделать, это выбрать канал CSV to Array:
Теперь у вас есть массив, содержащий данные JSON, представляющие строки, которые у вас были ранее. Затем вы можете выбрать канал Группировать массив по ключу, чтобы сгруппировать массив по «электронной почте»:
Этот канал возвращает объект, ключи которого являются адресами электронной почты пользователей, и каждый ключ идентифицирует массив всех пользователей, у которых есть один и тот же адрес электронной почты. Теперь нам просто нужно найти, есть ли какой-либо ключ в объекте, который указывает на массив с более чем 1 элементом (это фактически означает, что более 1 пользователя имеют один и тот же адрес электронной почты).
Поскольку это довольно сложная операция, мы можем написать собственный код JavaScript для ее обработки с помощью Custom pipe:
Код, который мы используем для пользовательского канала:
Object.entries($input).filter((a) => a[1].length > 1);
$input будет заменено фактическим значением ввода канала во время выполнения. Этот код получает массив записей объектов (которые представляют собой кортежи пар ключ/значение) и фильтрует все элементы, которые имеют более 1 элемента в массиве значений.
Теперь у вас есть полный пайплайн, который можно повторно использовать в следующий раз, когда возникнет аналогичное требование! Просто нужно вставить новые данные и подождать, пока FluentUtils вычислит результат.
Что еще интересно?
FluentUtils также поддерживает просмотр промежуточных результатов оценки, отключение/включение каналов для экспериментов с новыми потоками конвейеров и изменение порядка каналов в случае, если вы допустили ошибку в их порядке. Он построен с учетом максимального удобства.
И последнее, но не менее важное: FluentUtils работает исключительно в вашем браузере, не имеет внутренних зависимостей и не интегрируется с какими-либо аналитическими решениями. Это должно быть безопасно для работы даже в корпоративных сетях с ограниченным доступом.
В чем подвох?
Улова (в основном) нет. Я пишу эту программу, чтобы помочь себе в работе, и думаю, что она может быть полезна и другим людям. Единственный соответствующий термин и условие:
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, ПОМИМО ПРОЧЕГО, ГАРАНТИИ КОММЕРЧЕСКОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИМ ПРАВОМ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ИНУЮ ОТВЕТСТВЕННОСТЬ, БУДУТ СВЯЗАННЫЕ С ДОГОВОРОМ, ДЕЛОМ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ИЗ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИСПОЛЬЗОВАНИЯ, ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ, ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
Куда я могу отправить свой отзыв?
Нажмите здесь, чтобы открыть вопрос на Github.
Ты можешь:
- Предложите новую функцию (например, новую трубку или рецепт трубки).
- Сообщить о проблемах с использованием.
- Если вы считаете, что FluentUtils полезен для вас, подумайте и о том, чтобы отметить репозиторий звездочкой!
Я буду очень рад, если вы попробуете FluentUtils и пришлете мне свой отзыв!