LINUX.ORG.RU

Сообщения upcFrost

 

О странностях IT разных стран

 ,

Сижу рассматриваю вакансии в азии и тому что справа от нее. Наткнулся на вакансию хаскелиста за 10к+ зеленых в месяц, задумался. Ладно, бывает, ищу дальше и вижу вакансию где требуют COBOL. Чую скоро найду APL.

back in ussr блин...

upcFrost
()

NanoHTTPD Code 400

 , , ,

Использую NanoHTTPD для тестов в Spring для замены внешнего сервиса. Собственно вся его работа заключается в том чтоб отдавать один и тот же файл ответа на любой запрос (json с типовым ответом реального сервера).

И вот собственно в этом месте ловлю крайне странную проблему - на каждый 4-ый (вообще может меняться, иногда третий, иногда пятый) запрос NanoHTTPD отвечает 400, при том что в его конфигурации понятие Bad Request должно отсутствовать от слова вообще. И что еще веселее - это происходит на 6 запросах, которые в момент обращения к NanoHTTPD абсолютно идентичны и идут в произвольном порядке (авторизация на контроллере проверяется разными способами, Nano тут вообще ни каким боком). Остальные 5 запросов пролетают нормально.

Видел что это добро народ часто юзает на ведроидах и тоже периодически ловил такой косяк (решения так и не нашел), потому добавляю ведроид в теги на всякий. Кто-нибудь сталкивался?

Конфигурация NanoHTTPD:

public Response serve (IHTTPSession session) {
 Resource res = new ClassPathResource("MockResponse.json");
 try {
  return newChunkedResponse(Status.OK, "application/json", res.getInputStream());
 } catch (IOException ex) {
  ex.printStackTrace();
  return newFixedLengthResponse(Status.INTERNAL_ERROR, "", "");
 }
}

p.s. эксепшн не вываливается. все запросы кроме одного всегда проходят ок. один рандомный запрос всегда падает.

p.p.s. ну или насоветуйте что еще можно юзать. суть - во время integration теста должен подниматься на определенном порту тупой как пробка http-сервер, который будет гордо отсылать содержимое указанного файла на любой запрос (get/post, uri - пофиг). желательно что-то максимально легкое и тупое.

Эх, ладно, «долой изврат» сказал капитан и откопал стюардессу. Перешел на Jetty.

upcFrost
()

У меня есть офигительный бизнес-проект

 , ,

У меня в голове родился офигительный бизнес-проект: IoT баллончик-освежитель воздуха в сортире. Цепляем на баллон вафель/жопорез (скорее второе, батарейку меньше жрет), eink экран из кетая и крутим на нем рекламу со сменой раз в 4 часа или уроки казахского языка (хз почему запомнился с этих баллонов). Почти уверен что реклама, читаемая в позе «орел перед взлетом» запомнится лучше чем однообразный бубнеж по телику.

А для особых ценителей можно распространять свободные прошивки, скинь и шрифты. И что ведро компилять можно было.

P.s. я еду в поезде уже 3 часа и мне решительно нефиг делать. И вообще, пятница вечер же

P.p.s. dk-, мне не нужен кредит. Это так, на всякий случай.

upcFrost
()

Телефон-проектор

 , ,

Было может, хз

https://www.akyumen.com/default-item/holofone/

Ъ: мобильник-лопата со встроенным проектором (который на стену)

Идея бубунты делать из телефона мобильный системник с гнездом под него на мониторе уже была довольно упоротой, но эти черти пошли дальше. Мне просто интересно сколько секунд это чудо проработает в режиме проектора от батарейки.

Кстати они умудрились совместить ведротел с дисяткой. Интересно как, xen?

upcFrost
()

Контекст тестов в Spring

 , ,

Уже два дня пытаюсь решить следующую проблему. Есть приложение на Spring Boot, в нем есть два конвертера, один из которых вызывает другой при необходимости.

Выглядит это так для одного конвертора

// Include goes here
@Service
public class Conv1 implements Converter<Class1, Class2> {
 @Override
 public Class2 convert(Class1 source) {
 //...
 }
}
и для второго
// Include goes here
@Service
public class Conv2 implements Converter<BigClass1, BigClass2> {
 @Autowired
 ConversionService converter;

 @Override
 public BigClass2 convert(BigClass1 source) {
 //...
 result.setClass2Property(converter.convert(source.getClass1Property()));
 //...
 }
}

При попытке прогнать эти классы через юнит-тест вываливается NullPointerException на второй конвертер на моменте вызова первого, при этом объявленный через тот же @Autowired ConversionService в самом юнит-тесте разрешается нормально. Тест выглядит подобным образом

// Imports
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class, loader = SpringApplicationContextLoader.class)
public class Conv2Test {
 @Autowired
 ConversionService converter;

 @Test
 public void testConv2() {
  BigClass1 source = new BigClass1(...);
  BigClass2 target = converter.convert(source, BigClass2.class);
 }
}

В конфиге конверторы регистрируются так

@Bean(name = "conversionService")
public ConversionService getConversionService() {
 ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
 bean.setConverters(getConverters()); // Возвращает Set<Converter>
 bean.afterPropertiesSet();
 ConversionService object = bean.getObject();
 return object;
}

Успел найти что Autowired происходит после создания объекта, но объекты-конверторы создаются в getConverters() в конфиге, и судя по тому что в самом юнит-тесте оно работает - они создаются корректно.

Кто-нибудь сталкивался?

upd: проверил ApplicationContext из конвертора, conversionService там есть и с ним все в порядке. Но Autowire упорно выдает null без всяких дополнительных ошибок

Upd2: кое-как заткнул костылями, тесты ок, зато на старте оно не только находит conversionService, но находит аж 2 разных. Чую я криво инициализирую контекст. Кто-нибудь может ткнуть в пример как он инициализируется для java конфига для тестов?

upcFrost
()

ConverterFactory для сабклассов

 ,

Есть пачка сабклассов, идентичных по сути, но имеющих разное логическое назначение. Все они дружно идут от одного суперкласса, и весь их код заключен в конструкторе в виде вызова super().

В манах спринга показана ConversionFactory, дающая возможность конвертить один класс в сабклассы другого класса. Есть ли какая-нибудь возможность ее использовать чтоб конвертить не в режиме one-to-many, а many-to-many?

Пример того что хотелось бы (я знаю что в имплементации интерфейса wildcard быть не должно, просто так нагляднее имхо)

public class GenericRequestConverter implements ConverterFactory<? extends GenericRequest, ? extends GenericRequest> {
 @Override
 public <T extends GenericRequest> Converter<? extends GenericRequest, T> getConverter(Class<T> targetType) {
  return new RequestConverter(targetType);
 }

 private final class RequestConverter<T extends GenericRequest> implements Converter<? extends GenericRequest, T> {
  // Converter code
}
}
upcFrost
()

Кастомный класс в jaxb

 , , ,

С удивлением обнаружил в проекте 4 абсолютно одинаковых класса и попытался понять что за фигня происходит. Как выяснилось, 3 из 4 классов генерятся jaxb, который сопротивляется попыткам использовать один общий класс.

Собственно кто-нибудь знает адекватный, человечный и безболезненный (без адаптеров и аннотаций в три этажа) способ заставить jaxb юзать класс из жабофайла импортом?

Пример того что хотелось бы в идеале

<element name="inst" type="org.test.MyClass" />

Может я где импорт упускаю?

Переписать не предлагайте, уже близок к этому

upcFrost
()

JAXB и Serializable

 ,

Кто-нибудь знает как прицепить к классу Serializable если класс генерится JAXB?

Суть - есть здоровый xml с описанием и еще один с биндингами. Например, опуская схемы и прочее, это выглядит так

<xsd:element name="testClass">
<xsd:complexType>...

<jxb:bindings ...>
 <jxb:bindings schemaLocation="test.xsd">
  <jxb:bindings node="//xs:element[@name'testClass']">
...

Оно генерит код типа

public class TestClass { ... }

Нужно

public class TestClass implements Serializable { ... }

весь гугель радостно советует запихать <jxb:serializable> либо <xjc:serializable> в globalBindings, но там еще хренова уйма классов, которым Serializable вообще не нужен. Если подсунуть <jxb:serializable> в биндинг конкретному элементу - оно его игнорит. Пытался сделать через inheritance - походу оно сдохло.

Не пинайте, все это добро выбирал не я, и так тошно.

upd: Inheritance не сдох, это maven-jaxb2-plugin в проекте протух. после секса с версиями оно завелось, но все равно через ж. копаю дальше

upcFrost
()

Снятие шквора модераторам

 

А что, модератору можно стало можно снять шквор? Вроде ж белк когда модерствовал затестил это дело, и потом исправили

Вопрос взялся собственно отсюда - Klymedy, заметил у тебя авто-самострел в Новый лидер TOP-500 из Китая, там сказано -2

upcFrost
()

Значение фразы

 , ,

Что бы вы поняли под этой фразой: multicloud secure application framework? Что в него могло бы входить, что оно бы делало и т.д.

главный вопрос именно что в него входило бы? должно ли оно встраиваться в приложение как тот же spring security для жабы, или просто обмазать все сертификатами и сойдет?

upcFrost
()

Своя криптовалюта в каждый дом

 ,

http://kommersant.ru/doc/2997059

Для Ъ - минфин и цб подумывают сделать свою криптовалюту, с лицухами и авторизацией по паспорту.

Банкоматы с голосом, криптовалюты... мне кажется я что-то пропустил

upcFrost
()

Tomcat за nginx proxy

 , ,

Сижу маюсь со следующей задачей:

Есть tomcat, на котором крутится приложение с jsp с пачкой spring:url, принимающее запросы на /. Есть nginx, который принимает запросы на /foo и перенаправляет их tomcat'у через proxy_pass. В результате как можно догадаться на странице все ссылки ведут на /..., а не на /foo/..., делая эту страницу слегка (совсем) кривой в браузере

Вроде был какой-то левый модуль к nginx который умеет тело ответа переписывать, но что-то это совсем жестко имхо. Думаю нет ли другого выхода, скажем js юзать для генерации ссылок, или может есть какая-то совсем тривиальная опция для spring или nginx которую я просто протупил.

upcFrost
()

Netbeans, копировать классы во внешнюю директорию

 , ,

Сорри за тупой вопрос, устал и гугл-фу меня подводит.

Есть java-проект в Netbeans, лежит допустим в /home/user/projects/a, нужно чтоб после его сборки все полученные .class-файлы (а вернее все содержимое директории ./build/classes) копировались в /home/user/classes/b.

Кто-нибудь может подсказать или кинуть ссылку как это сделать?

upcFrost
()

systemd и параметры

 

Кто-нибудь знает как можно в систумд юнит-файле приделать к Exec* параметры из конфиг-файла типа

-opt1 val1 -opt2 val2

Первое что пришло на ум - сделать EnvFile и start-stop скрипт, но это ж вроде как initv-way и уже не модно

Короче я разрабам уже написал патч для env, можно спать спокойно

upcFrost
()

HTTPS Client Certificate Injection на проксе

 , ,

Есть прокся (vulcand если быть точным), слушающая http и перенаправляющая в https. Прокся на Go, умеет плагины-middleware, которыми можно форматировать то что приходит по идее каким угодно образом. На другом конце стоит nginx, который проверяет клиентский сертификат для соединения.

Суть - нужно чтоб прокся впихивала этот самый сертификат из файла (key/crt, можно pem, пофиг) в header или куда он вообще должен идти. Нашел в сети пачку манов как это делается для haproxy и прочих, но вот скажем как это сделать просто для curl (не указывая --key --cert, а просто через header) ничего не нашел. Может я не там копаю и вообще все это нужно делать как-то иначе?

upd: Короче понял что нужно просто создавать с нуля SSL-соединение с нужным сертификатом и потом просто возвращать то что оттуда пришло клиенту

upcFrost
()

Https, API access control и нужно ли оно

 , , ,

Есть пачка взаимодействующих сервисов на разных машинах. Сервисы работают по http, есть балансер в лице реверс прокси и прямая прокся на вход.

Первое что хотелось бы - завернуть трафик в https. На прямой проксе все понятно, там nginx и сертификаты. Можно написать мидлварю для реверс прокси в целом. Или есть более разумные варианты?

Второе - управление доступом к сервисам. Есть пачка вариантов, например jwt, и пачка готовых решений типа конга. Но я так чую что это реально делать только на входном гейте и на уровне приложения. Ведь есть есть 2 входящих запроса, то хз кто из них спровоцировал исходящий к другому сервису. Или нет? Или лучше на гейте давать токен юзеры, а дальше давать токен самим системам и как-то их лепить когда они делают исходящий запрос? Какое-то туннелирование сделать что-ли, типа ssl VPN. Только сам VPN нельзя - такие требования, а то было бы легче. На вход оно все просто - nginx и Lua для проверки, база в редисе или в любой директории. А вот выход хз как этот токен прилепить учитывая что на ноде может быть несколько сервисов.

Короче ситуация довольно похожа на стандартные микросервисы, но вот только они не совсем микро, и им надо взаимодействовать.

У кого-нибудь есть мысли на счёт того как это можно сделать? Или я туплю и все просто и понятно?

upcFrost
()

Redis, etcd, consul

 , ,

Кто-нибудь может внятно пояснить в чем разница между редиской, etcd и консулом? Вернее между первым и остальными. А то в сети на каждом сайте натыкаюсь на пример когда люди в etcd/consul бодро регают redis как сервис. Они ж вроде все kv-store, или я упускаю какой-то особо важный момент.

имеется ввиду redis 3.0+ в multimaster-режиме

upcFrost
()

Старость не радость

 ,

Навеяно Как понять сколько ресурсов будет потреблять сайт? (комментарий)

Ща порылся в архиве лора и нашел фееричный тред (ну как тред, пост и два ответа) выбора проца для домашнего сервера.

Процессор

Пост номер два аж скупую слезу выжал. И ведь четверка это все тянула. И bind, и почтовик, и даже проксей работала. И не было на ней ни ноды, ни докера, ни систумд - ничего того, что по современным меркам делает из говна Ъ-линукс

upcFrost
()

Разрабы, пишите документацию

 ,

Минутка ненависти

Разрабы, чтоб вас, пишите долбаную документацию. У меня ушло несколько дней (!!) чтоб сделать чертов сертификат для Etcd, просто потому что даже гугель не знает как их делать и какие опции им нужны. Эти ребята настолько фееричны, что они сделали контейнер для докера со своим CA (!!!) чтоб генерить свои чертовы сертификаты, просто ввиду упоротости их мана.

Все, отпустило.

upcFrost
()

Security gateway

 , ,

Есть такая задача: есть сервак на сервисами через http/https. Https сам хоть как-то защищен, первый понятное дело нет. Нужно сделать входной гейт, который будет уметь скажем cert-based oauth+https что слегка обезопасит систему. Middleware короче.

Первая идея взять nginx в режиме прокси. Но это осложняется тем что я хз какие порты будут открыты, и эти порты будут часто меняться. Можно приспособить confd для этого дела, но нужны будут рестарты и толстая обвязка темплейтов.

Есть какие-нибудь идеи как сделать такой гейт? В плане кроме nginx

upcFrost
()

RSS подписка на новые темы