Помимо программирования, моя повседневная работа включает в себя множество ручных технических операций, таких как:

  • Сравнение двух фрагментов текстов во время конфликтов слияния, чтобы выяснить, что изменилось;
  • Извлечение данных 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 и пришлете мне свой отзыв!