LINUX.ORG.RU

Сообщения suuaq

 

Модифицировать json сохраняя авторский стиль

Сабж.

При изменении существующего значения пробелы должны остаться как были.

{ "id": 101 ,
    "name"  :   "Вася"

}
->
{ "id": 101 ,
    "name"  :   "Петя"

}

При добавлении наверно должно копироваться оформление предидущего атрибута/элемента начиная от края пред-предидущего.

{ "id": 101 ,
    "name"  :   "Вася"

}
->
{ "id": 101 ,
    "name"  :   "Петя" ,
    "alias"  :   "Вася"

}

Как-то так. Готовое есть?

 ,

suuaq
()

Компилять плагины для мавена из исходников при сборке проекта

Есть проект на жаве, для его сборки используется мавен с плагином. Плагин работает корявенько, но можно написать для него расширение в виде отдельного класса. Загвоздка в том, что этот класс нужно во-первых собрать раньше всех остальных и во-вторых не паковать его в джар.

Как это правильно делается? Или изврат полный и выкинуть всё нафиг?

 

suuaq
()

Прикрепить переменную окружения к бинарнику/пути на уровне ядра/ld.so

Есть бинарник «/bin/foo». Запускаться может руками, автоматически из скриптов, как угодно. Его надо принудительно запускать с переменной окружения «foo=bar» всегда. Заменить файл «/bin/foo» на другой нельзя. Изменять файл «/bin/foo» нельзя. Изменять скрипты, из которых «/bin/foo» запускается, нельзя.

Варианты?

ЗЫ Устанавливать «foo=bar» глобально для всех процессов тоже нельзя.

 

suuaq
()

удалить set-cookie по регулярному выражению в апаче

Апач. ProxyPass. В http response приходит несколько set-cookie.

set-cookie: foo=abc
set-cookie: d6be0a08=def
set-cookie: bar=ghi
set-cookie: a9467ca3=jkl
x-someheader: mno

Нужно удалить все заголовки set-cookie, в которых название печеньки попадает под ^[0-9a-f]{8}$. Удалить полностью, не переименовать, не добавить прошедшую дату, не сделать ещё какой-то грязный хак. Все остальные заголовки должны остаться.

mod_headers смотрел, не допёр.

Апач умеет? Как?

 ,

suuaq
()

Как вы автоматически инкрементируете номер версии в этом вашем continuous deployment

Есть один гит-репозиторий и к нему впридачу джоб в дженкинсе. При коммите в мастер дженкинс пуллит, компиляет и деплоит куда надо. И было бы неплохо, если бы он ещё и номер версии сам обновлял.

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

ИМХО, номер должен лежать в репозитории. Но если так, то на каждый коммит в мастер будет создаваться второй коммит с обновлением номера. Неприятно.

Репозиторий используют несколько человек. Магичить в гите, чтобы дженкинс изменил номер в последнем коммите и ни у кого ничего не сломалось я не умею. Есть ли тут варианты?

 ,

suuaq
()

Научите в монго-инъекции

Есть один CTF. В нём нода и монга. Код примерно такой:

app.get('/q', function(request, response) {
    let id = request.query.id;
    collection.findOne({id: id}).then(obj => {
        response.send(obj.text);
        response.end();
    }).catch(e => {
        response.send('nope');
        response.end();
    });
});

В качестве id длинные хеши, фиг угадаешь.

Я в этих ваших нодах не понимаю, а в монгах и того меньше. Покурил доки, сделал так

curl 'http://hostname/q?id[$regex]=.*'

Оно выдало какой-то текст, видимо из первого объекта. Текст не тот. Выдать все тексты видимо не выйдет, т.к. findOne. Какой нибудь оффсет видимо тоже просто так не сделать, $slice надо во второй аргумент пихать. Знаю как должен примерно выглядеть текст, но по тексту искать не могу, только по id.

Ткните что-ли куда копать.

 , , ,

suuaq
()

Воспроизведение мультимедии в нескольких пользовательских сессиях

В этих ваших гуишных федорах/системд/вяленых/пульсах, если залогиниться под несколькими пользователями в разных tty (это таки tty называется?) и переключаться между ними по ctrl+alt+f[2-6], наблюдается такое интересное поведение.

Если запустить что-то типа for (;;) { printf("%d\n", i++); sleep 1; } под одним пользователем и переключиться на другого, то оно радостно продолжит считать в фоне.

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

Откуда оно палит инфу, что его запихали в фон? Это на уровне каждого отдельного приложения реализуется?

 

suuaq
()

groovy-скрипте вызвать из объекта внешнюю функцию

def foo() {
    return "correct"
}
 
class FooCaller {
    def call () {
        return foo() // блджад, мне не нужен this.foo()
    }

    def foo() {
        return "incorrect"
    }
}

println new FooCaller().call() // incorrect

 

suuaq
()

Посоветуйте МФУ

Бывает нужно распечатать раз в год две страницы. Но когда нужно, то вот прям припирает.

Лазер ссыкотно, чихаю на каждую пылинку.

Был струйный, задолбал по ночам чиститься, шуметь на весь дом. Засох, ага.

В общем, хочу наверное струйный, бесшумный, влазящий на письменный стол. С поддержкой в линуксе из коробки, без докачки драйверов с чьих-то сайтов. Можно простой принтер без сканера.

Есть такие?

 ,

suuaq
()

Двустороннее преобразование строки по единожды объявленному правилу

Хочу писать текстовый конфиг с набором правилами типа «если строка — АБВ, то замени В на Г, а если строка — результат предыдущей замены, т. е. АБГ, то верни всё обратно к АБВ». См. пример.

import re

# rule, reverse_rule = read_rule_from_file() 
rule = r'^(.*)bar', r'\1baz'
reverse_rule = r'^(.*)baz', r'\1bar'

source = 'qwerty/bar'
result = re.sub(*rule, source)
restored = re.sub(*reverse_rule, result)

print(source, result, restored)

Бесит необходимость прописывать преобразование в обе стороны.

Есть ли что готовое, не обязательно регулярные выражения?

 ,

suuaq
()

Присвоить undefined куда не надо в typescript

Это фича?

let x: string;

/*
{
    // Variable 'x' is used before being assigned.
    x = x;
}

{
    // Type 'undefined' is not assignable to type 'string'.
    x = undefined;
}

{
    // Type 'string | undefined' is not assignable to type 'string'.
    // Type 'undefined' is not assignable to type 'string'.
    let a: (string|undefined)[] = ["a", "b", "c"];
    x = a[0];
}
*/

{
    // Успех
    let a: string[] = ["a", "b", "c"];
    x = a[100];
}

if (x === undefined) {
    console.log("WTF?");
}

 , ,

suuaq
()

D-Bus, kdbus, bus1, D-Bus Broker, что происходит в зоопарке IPC?

Навеяно новостями про тридцатую федору.

kdbus вроде закопали недоделаным и решили вместо него пилить bus1?

bus1 вроде ещё закопать не успели, а уже оказался запилен какой-то D-Bus Broker?

Что тут вообще происходит?? Что из них актуально, а что закопано?

 , ,

suuaq
()

Как MAP_GROWSDOWN в mmap?

Маны обещают магию, что оно по мере необходимости будет само ммапиться. Но магия не работает и процесс сегфолтится. Чяднт?

#include <stdio.h>
#include <sys/mman.h>


int main(void)
{
        unsigned char *foo = mmap(NULL, 0x2000, PROT_READ | PROT_WRITE,
                        MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN | MAP_STACK,
                        -1, 0);
        if (foo == MAP_FAILED) {
                perror("mmap fail");
                return 1;
        }

        printf("%p\n", foo);

        puts("press enter to continue");
        getchar();

        foo[0] = 0x42;
        foo[1] = 0x42;

        puts("press enter to continue");
        getchar();

        foo[-1] = 0x42;

        return 0;
}

 , , ,

suuaq
()

Внезапный READ_IMPLIES_EXEC в personality

Этот код у меня на x86_64 по дефолту выдаёт 0.

#include <stdio.h>
#include <sys/personality.h>

int main(void)
{
	printf("READ_IMPLIES_EXEC: %d\n", (personality(0xffffffff) & READ_IMPLIES_EXEC) != 0);
	return 0;
}

Есть один проект, в котором ВНЕЗАПНО в /proc/[pid]/maps засверкало много x в permissions.

Копали-копали, оказалось:

$ LD_LIBRARY_PATH=/somedir ./projectexecutable
READ_IMPLIES_EXEC: 1

$ LD_LIBRARY_PATH=/somedir /lib64/ld-linux-x86-64.so.2 ./projectexecutable
READ_IMPLIES_EXEC: 0

Проверка на READ_IMPLIES_EXEC идёт в первой строке в main. В strace вызовов personality, кроме как с 0xffffffff, нет.

И ещё более внезапно:

$ readelf -l ./prog
...
  INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238
                 0x000000000000001c 0x000000000000001c  R      0x1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
...

Куда копать?

 , ,

suuaq
()

Как узнать реальный, не plt, адрес библиотечной функции

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
	printf("printf address: %p\n", printf);

	char cmd[50];
	snprintf(cmd, 50, "cat /proc/%d/maps", getpid());
	system(cmd);

	return 0;
}

Этот код выводит адрес в plt в исполняемом файле. Мне нужен реальный адрес printf, там, куда ld.so загрузил libc. Как?

 ,

suuaq
()

Как положить функцию в отдельную страницу памяти

Есть функция sum:

int sum(int x, int y)
{
	return x + y;
}

Есть виртуальная память со страницами.

Хочу чтобы скомпилированая в машинный код функция лежала в своей отдельной сранице и кроме неё там были бы только нули.

Копировать байты в рантайме - не понятно сколько.

Вроде есть какая-то конфигурационная магия для gcc с запихиванием функции в отдельную секцию в elf и присваеванием секции адреса, но я пока не осилил и боюсь сломать хотелку #1.

Платформа - линукс, amd64. Портабельность не обязательна.

Хотелки:

  • не сломать ASLR, в новом процессе у функции должен быть новый адрес
  • разобраться с обоими вариантами: копировать с memcpy и заставить ld.so сразу грузить куда надо

 ,

suuaq
()

Как импортировать из другого проекта в javascript

Допустим, имеем такую структуру проекта

project
├── subproject1
│   ├── dist
│   ├── index.html
│   ├── node_modules
│   ├── package.json
│   ├── src
│   │   ├── main.js
│   │   └── model.js
│   └── webpack.config.js
└── subproject2
    ├── dist
    ├── index.html
    ├── node_modules
    ├── package.json
    ├── src
    │   ├── App.vue
    │   └── main.js
    └── webpack.config.js

Как в subproject2 импортировать model.js из subproject1? ../ не предлагать.

Вопрос вдогонку: Хочу независимые конфиги для webpack в сабпроектах, но лень писать два раза npm run dev, что делать?

cast makoven

 

suuaq
()

Можно ли в андроиде дать приложению включать gps без спросу

Хочу раз в полчаса сохранять координаты смартфона. Боюсь, что если gps будет включен постоянно, то батарейка станет быстро садиться. Хочу чтобы приложение само включало и выключало gps.

Какие есть варианты, можно ли сделать лучше?

Смартфон мой, приложение напишу сам, рута можно получить.

 ,

suuaq
()

Хочу новые процессор и материнскую плату под witcher 3 и vga passthrough. Чяднт?

Если что, я в этой вашей хардваре ничего не понимаю. А в iommu и прочих vfio тем более.

Досталась мне видеокарта r9 290. А у меня две мечты давно, третий ведьмак и проброс видеокарты в виртуалку. Надо материнку и процессор.

Я нагуглил такое:

Тут товарищ o- говорит, что в ryzen мол небезопасно, все девайсы в одной группе. На реддите другой товарищ говорит, что у него всё раздельно. Я пока линки вставлял, вроде сам уже допёр, но если кто-то хочет эту ситуацию разжевать в подробностях, то я только за.

Ещё был в ризенах какой-то npt баг. Тут пишут, мол пофиксили npt и ещё чего-то.

В общем надумал я взять ASRock AB350 Pro4 и ryzen 3 1200, который самый дешёвый. Чяднт?

 , , ,

suuaq
()

Хочу пакетный менеджер js/css в НЕ жавоскриптовый проект

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

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

Смотрю сейчас bower.io, а он мне пишет «we recommend yarn and webpack for new front-end projects!» Но я-то не хочу делать фронтенд-проект, я хочу писать фронтенд вместе с бекендом.

Или в современной веб-разработке без конпеляния css в ecma42 бабелем жизни уже совсем нет?

 ,

suuaq
()

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