Обновить
16
Dmitrii T.@talbot

Financial services on Java beans

0,4
Рейтинг
5
Подписчики
Отправить сообщение

Ну в GitHub workflows—это буквально рабочий поток задач, так как все workflows состоят из списка в виде одной или более задач (jobs):

---
name: My Workflow
on:
  workflow-dispatch:
jobs:
  my-job:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          token: "${{ secrets.GITHUB_TOKEN }}"

Молодцы, что починили:

$ nc -v pxl.yoomoney.ru 443
Connection to pxl.yoomoney.ru port 443 [tcp/https] succeeded!

Собственно, как я и говорил, форма не загружается, потому что скрипт embed_v1.js с домена pxl[.]yoomoney[.]ru не отдаётся с ошибкой CONNECTION_TIMED_OUT.

netcat не подключается к узлу:

Hidden text

$ nc -v pxl.yoomoney.ru 443
nc: connectx to pxl.yoomoney.ru port 443 (tcp) failed: Operation timed out

Проверьте работу не из внутренней сети, возможно, какие-то ограничения на поддомен.

Интересно, но записаться невозможно: ни одной формы не показывается, страница разваливается что в последнем FF, что в Я.Браузере.

С каких пор вы на Тильду перебрались кстати? Раньше же все промо-странички делали своими силами.

«Как принято» зависит от компании и проекта: где-то может быть netty «кишками наружу», где Future Future погоняет, а где-то (у меня сейчас такой проект) обычные разработчики даже не в курсе, что за фреймворк там под капотом, так как всё спрятано под толстыми слоями абстракций, которыми управляет команда платформы.

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

Ну вот Java с миллионом абстракций (нет):

package com.example;

import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;

public class HttpServerExample {

    public static void main(String[] args) {
        try {
            var server = HttpServer.create(new InetSocketAddress(8080), 0, "/", exchange -> {
                try (var out = exchange.getResponseBody()) {
                    var response = "Hello from oldschool style".getBytes(StandardCharsets.UTF_8);
                    exchange.sendResponseHeaders(200, response.length);
                    out.write(response);
                }
                exchange.close();
            });
            server.start();
        } catch (IOException e) {
            System.out.println("Could not start HTTP server: " + e.getMessage());
        }
    }
}

Для меня именно Lion стал первой версией, которую захотелось откатить. Я как-то тогда тоже писал похожий пост, только собирал косяки Lion’а: казалось, что там поломали вообще всё, от интерфейса до драйверов на WiFi и Bluetooth. Ну и выпилили бэкенд для профессиональных сканеров, что стало неприятным сюрприз.

Эх, кажется, стабильности Тигра мы уже никогда не увидим.

Automat'ы, как ни странно, просуществовали аж до 1991 года

Типичный автомат FEBO
Типичный автомат FEBO

В Нидерландах существуют и поныне, сеть FEBO никуда не делась: всё также бросаешь монетку и получаешь из открывшегося окошечка порцию курицы или крокет.

Добавлю примеров в копилку из своего опыта, где работал сам:

- Яндекс (Яндекс.Касса). Decimal base units: Java BigDecimal на бэкенде, DECIMAL в базе данных (Postgres), строковое представление в API.
- Ingenico e-Payments / Worldline (четвёртый в мире Payment Gateway, самый большой в Европе). Integer with minor units: Java BigInteger на бэкенде, BigInt в базе данных (Oracle), где minor units = 1/1000000. В API то же самое, только minor units = 1/100 (для большинства валют) или 1/1000 (для определённого списка, но в документации об этом ни слова, просто костыли в коде).
- Банк ING (электронный кошелёк Yolt). Сам затащил подход «как в Яндексе», так как мог влиять на принятие решений. Стек тоже «как в Яндексе».
- Maersk (морские грузоперевозки). String Base Units: сериализация / десериализация из / в Java BigDecimal на бэкенде, хранение в виде строк в базе данных (MongoDB). API использует строки.

Забавный факт про Integer with minor units:

Большие суммы: Int64 может переполниться при работе с крупными транзакциями

Если уж Int64 может переполниться, то что тут говорить про int32 (Java int), который был до перехода на BigDecimal (а, возможно, где-то в коде каких-то сервисов ещё и есть) в Ingenico e-Payments. Так и случилось в один прекрасный момент несколько лет назад, когда путешествия на Бали (смотри курс индонезийской рупии IDR) стали внезапно стоить сущие центы из-за переполнения. Распродажу Лавочку прикрыли только к утру, когда заметили невероятную популярность клиента Agoda и отелей на Бали, и до исправления просто прекратили (на полгода) принимать платежи в валюте IDR. Убытки, как водится, просто списали, никого не наказали.

Прошу прощения, вы правы: четверть миллиарда.

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

Не забываем, что в COVID раздавали деньги, не бесплатно. И теперь пришло время их отдавать.

За всё «там» не скажу, но конкретно в Нидерландах стало плохо именно полтора года назад, осенью 2023 года. Догнала высокая ставка и деньги, которые стали очень дорогими. Жить компаниям как раньше, занимая по низкой ставке, больше не получается. Долги, которые дёшево рефинансировались, теперь поставили перед компаниями вопрос выживания, а не развития: сужу по знакомой финтех-сфере, где работал сам и знаю внутренности компаний.

Падение капитализации у Worldline (4-й PSP в мире, крупнейший в ЕС) составило больше 90%, у Adyen похоже, но они смогли немного отыграться. При том, что revenue у компаний растёт из года в год.

Я не знаю ни одной компании в нидерландском финтехе, которая бы сейчас не занималась сокращением персонала, в первую очередь в «дорогих» странах ЕС (Нидерланды, Германия, даже Польша). По возможности разработка выносится туда, где дешевле (у меня есть пример с попыткой переноса разработки в Румынию и Португалию). Об инвестициях в развитие (расширение) сейчас не думают, скорее об «инвестициях в сокращение». Как пример, Worldline запланировал потратить четверть миллиона евро в течение трёх лет на сокращение персонала (и компенсации за это). Открытые вакансии теперь воспринимаются как исключение.

Ещё хуже обстоят дела у «консультантов» (фрилансеров на местном аналоге ИП, называемом ZZP): их ещё добили регуляцией с января этого года. Все консультанты (порядка двадцати человек), с кем я успел пообщаться на мероприятиях в местной специализирующейся на финтехе консалтинговой компании, спрашивали нет ли у нас открытых вакансий «на постоянку»: если раньше интересовали только рейты, то теперь просто нужно место. Не забываем, что у многих виза привязана к работе и зарплате (виза для высококвалифицированных мигрантов), что вынуждает выходить на рынок и соглашаться на более низкую зарплату.

Как итог, по субъективной оценке разница по предлагаемой зарплате на одинаковую позицию между июнем 2023 и июнем 2025 составила порядка –20%. При этом открытых вакансий (и новых продуктов) за последние полтора года почти нет.

А как вы видите на приведённых диаграммах Dependency Tracking (отслеживаение уязвимостей в уже использующися сборках и образах, которые были выявлены после прохождения Security Gate)?
Например, в ситуации, когда была найдена уязвимость в сторонней зависимости, которая используется в образе, задеплоенном несколько недель или месяцев назад, и о которой не было известно сканерам (той же Trivy) на момент прохождения Security Gate.

У Dell корпоративные Latitude были очень хороши: модульные (можно заменить / добавить что угодно на стандартных разъёмах), легко ремонтируются, крепкие металлические корпуса.

Latitude 7490 до сих пор пользуюсь, с Дебиан из коробки работает всё железо, даже встроенный LTE-модем.

А Precision всё-таки «гробики» были, очень уж тяжёлые и большие.

Testplane выглядит как Ашот (от yandex-qatools) as a Service.

На HTTP сервер, как уже отметили выше, не тянет, только на TCP.

Хорошо было бы рассмотреть, как использовать уже имеющийся в JDK com.sun.net.httpserver.HttpServer в неблокируещем режиме, и, например, с использованием Virtual threads. Хотя, похоже, всё это сведётся к банальной строчке server.setExecutor(Executors.newVirtualThreadPerTaskExecutor()).

Векторный API уже доступен в Java начиная с 17 LTS (с 16 как preview).

Проект девять лет не обновлялся. Подозреваю, issues уже не разбираются, да и, скорее всего, никто его не проверял с включённым -Werror=all.

Есть telegram-curses (на базе ncurses TUI) от того же автора, что и telegram-cli. Этот клиент активно обновляется. Ну и вышеупомянутый tgt, если TUI не подходит, и хочется хоткеев. Оба (что нисколько не удивительно) являются обёрткой над официальной td-lib от команды Телеграм, разве что tgt, так как написан на Rust, использует Rust-обёртку над библиотекой от того же автора, что и сам клиент.

Информация

В рейтинге
2 588-й
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Архитектор программного обеспечения
Ведущий
От 130 000 €
Java
Oracle
PostgreSQL
Java Spring Framework
Высоконагруженные системы
API Интерфейсы