LINUX.ORG.RU

Сообщения Aswed

 

Ассемблерные ошибки при сборке GCCшкой

Привет. У меня есть небольшой just-for-fun проект. Под линуксом все собирается и работает ок, а под виндой при компиляции(или линковке?) виндовой gcc выпадает ошибка

C:\Users\user\AppData\Local\Temp\ccF9IWCB.s: Assembler messages:
C:\Users\user\AppData\Local\Temp\ccF9IWCB.s:343: Error: junk `(%rip)' after expression
C:\Users\user\AppData\Local\Temp\ccF9IWCB.s:343: Error: operand type mismatch for `lea'
В параметрах компиляции ничего необычного
-Wall -g -O0
Фишка в том, что у меня в исходниках нет ни одной ассемблерной вставки, я даж не знаю на какую часть кода жаловаться. Любезные GCC сеньоры, подскажите мне, куда копать.

 , ,

Aswed
()

Как правильно в rustdoc?

Друзья растаманы, подскажите как правильно пользоваться rustdoc. У меня есть cargo проект. Я делаю cargo doc и генерируется дока только для main.rs. Как сгенерить для всех модулей? ЧЯДНТ?

 ,

Aswed
()

pytest force html report

Есть такая ситуация. У нас фреймворк на питоне, который работает через pytest. pytest генерит годные отчеты опциями --html и --junitxml. Но люди которые пользуются нашим поделием не всегда пишут эти аргументы. Можно как-нибудь фикстурами проставить дефолтные значения этих параметров для pytest, что бы отчеты генерились всегда при использовании нашего фреймворка?

 , ,

Aswed
()

qemu в Armbian

Дублирую вопрос с /admin, так как там не ответил никто.

У меня стоит armbian на orange pi, мне нужно вкрутить туда qemu. Qemu есть в репах, но когда я пытаюсь ее поставить aptitude-ом начинает тянуть за ним libpulse0. И все падает с

Err http://ports.ubuntu.com xenial-updates/main armhf libpulse0 armhf 1:8.0-0ubuntu3.4
  404  Not Found
Я нагуглил что с libpulse0 в arm вообще какие-то проблемы. При этом реальная функциональность pulseaudio в том, что мне нужно запускать посредством qemu мне не нужна. Как мне можно это обойти? Собирать руками из исходников pulseaudio на ARM-e не вариант.

 , , , ,

Aswed
()

qemu в Armbian

У меня стоит armbian на orange pi(там ARM если что), мне нужно вкрутить туда qemu. Qemu есть в репах, но когда я пытаюсь ее поставить, aptitude начинает тянуть за ним libpulse0. И все падает с

Err http://ports.ubuntu.com xenial-updates/main armhf libpulse0 armhf 1:8.0-0ubuntu3.4
  404  Not Found
Как мне можно это обойти?

P.S. не уверен, что в правильной ветке форума, перенесите если что.

 ,

Aswed
()

x86_64 драйвер на arm

Привет Лор. У меня такая ситуация. Есть usb свич от acroname. Мне нужно управлять им с orange pi. Свитч не открывает в системе последовательного порта работать с ним можно только через официальный dev kit. Dev kit есть под линукс, вот только там всего две архитектуры x86_64 и i686. Dev kit как вы уже поняли бинарный, там только .so да хедеры. Ну и инструкция как пользовать. А у меня orange pi на armv7. С поддержкой акронейма я уже пообщался, они мне любезно говорят: «не используйте orange pi, там usb стек вообще плохой», но я им не верю. Есть ли какая-нибудь костыльная возможность бинарники другой архитектуры в линуксе, при условии что бинарники делают что-то около драйверовое?

P.S. Сам dev kit https://acroname.com/software/brainstem-development-kit

 , ,

Aswed
()

python package data

Подскажите пожалуйста, как включить в свой пакет, который собирается с помощью setuptools файлы не являющиеся .py, и как их потом открыть из питона. Вроде как нужно добавить package_data в setup.py что б включить дату в пакет. А что дальше-то?

 

Aswed
()

python kill thread

У меня есть такая проблема. Есть скрипт на питоне, он использует библиотеку что б работать с valueCAN железкой. Внутри библиотеки запускается собственный тред, который что-то делает и он не тормозится автоматом. В линуксе когда отрабатывает MainThread приложение завершается и все отлично. В винде же, где все через одно место, после завершения MainThread, питон повисает в ожидании когда завершится тред из библиотеки. Я этот тред могу найти через threading.enumerate(). Можно ли как-нибудь остановить его, не внося руками изменения в код библиотеки? Или сконфигурить питон, что б он работал как в линуксе?

 ,

Aswed
()

python package version

Скажите пожалуйста как из кода пакета узнать его версию? Т.е. у меня есть пакет. В setup.py есть указание версии

setup(
    ...
    version = '0.1',
    ...
)
Внутри кода пакета в определенный момент запускается логер, и я хочу, что бы логер указал в логах версию пакета, который был использован. Как мне получить то, что я указывал в setup.py?

 

Aswed
()

python delayed assert

Я тут пишу тесты с использованием pytest, в которых из скрипта опрашиваю железку разными ассертами. Но после каких либо изменений на железке, ось может не сразу вдуплить изменения. Например флешку вставили, а железка ее увидела через секунду, две или полсекунды. И мне нужен, механизм, который работал бы так.
* даю ассерт
* если условие True, идем дальше
* если условие False, вычисяляем условие еще N раз с задержкой M, до первой ситуации, когда условие True. Если такой ситуации не возникло, то уже полноценно ассертим False.
Гугления по delayed assert приводят меня вот к этой либе, но это совсем не то

 

Aswed
()

pytest редактирование отчета

Всем привет. Я тут пишу тесты для железа с использованием pytest. В процессе тестрирования железяки скипты собирают логи которые выдает железяка и складывают их на ней же в специальной папке. По окончании тестов pytest генерирует junit-xml ку, с отчетом. Я хочу включить в эту xml инфу о том, где лежат логи, и какой лог соответствует какому тесту. Как можно добавить эту инфу в xml? Проблема собсна в том, что pytest генерит ее полностью автоматически и после того как мои скрипты отработали, так что даже самый тупой вариант в виде прочитать-распарсить-обновить-переписать просто так не реализуешь.

 ,

Aswed
()

Дроны и глушилки.

Я тут вчера прочитал очередной топик про битву дронов и глушилок. Мне вот интересно, почему противодроновые ружья именно глушат сигналы? Я так понимаю, что перед ними не стоит задачи посадить дрон в целости и сохранности. Почему не используют направленное микроволновое излучение или вообще мазер. От микроволн же электроника горит на ура, а электронику с антенной еще и фиг экранируешь от такого. Или иные разрушающие ЭМ импульсы. Это требует каких-то запредельных энергий или сильно затратно в производстве? Кто умеет в физику просвятите пожалуйста.

 ,

Aswed
()

python, telnet через com порт

Здравствуйте. У меня есть такая проблема. Есть железка, которую можно подрубить к машине по usb. После этого она отображается в системе как подключенная по COM порту. Далее, используя Tera Term конекчусь к ней через telnet по этому COM порту и тогда могу посылать железке(там QNX) команды терминала.
Мне нужно написать скрипт на питоне который так же будет общаться по телнету с железкой. Кто-нибудь знает как в питоне развернуть telnet соединение через COM порт?
Вышеописанная схема мной сейчас проворачивается под шиндошс. Однако потом ко мне подъедет rasberry pi и скрипт будет крутиться там. Так что linux-only решения так же вполне подойдут.

 ,

Aswed
()

раскрытие рекурсии в расте(lifetime)

Дорогие растовчане. У меня есть к вам вопрос. Я неоднократно сталкивался с проблемой замены рекурсии на цикл в расте. Например вот такая абстрактная ситуация:

struct Lazy<T> {...}

impl<T> Lazy<T> {
	fn force(&mut self) -> &mut T {...}
}

struct InfLazyList<T> {
	head : T,
	tail : Lazy<InfLazyList<T>>
}

impl<T> InfLazyList<T> {
	fn index(&mut self, i : usize) -> &T {
		if i == 0 {
			&self.head
		} else {
			self.tail.force().index(i - 1)
		}
	}
}
Как бе все норм. Но хочу следать индексирование итеративным.
	fn index(&mut self, i : usize) -> &T {
		let mut top : &mut InfLazyList<T> = &mut self;
		while i > 0 {
			top = top.tail.force();
		}
		&top.head
	}
Ну и сразу «cannot assign to `top` because it is borrowed». Есть какой-то способ сделать это не прибегая к unsafe?

 

Aswed
()

freebsd инет через proxy

Всем привет. Я тут накатил на виртуалку в офисе bsd. А у нас тут для инета надо подкрутить местное прокси. Я добавил в .csshrc и /etc/make.conf строки

setenv http_proxy user:pass@serverip:port
setenv HTTP_PROXY user:pass@serverip:port
setenv ftp_proxy user:pass@serverip:port
setenv FTP_PROXY user:pass@serverip:port
и
FETCH_ENV=http_proxy=user:pass@serverip:port
FETCH_ENV=HTTP_PROXY=user:pass@serverip:port
FETCH_ENV=ftp_proxy=user:pass@serverip:port
FETCH_ENV=FTP_PROXY=user:pass@serverip:port
соответственно. Но make install в портах не работает. И станно ведет себя пинг. А именно
ping distcache.FreeBSD.org
все ок
ping http://distcache.FreeBSD.org
cannot resolve unknown host

 ,

Aswed
()

Нейросети перцептрон и адалайн

Здравствуйте уважаемые. Я тут начал читать про нейросети Себастьяна Рашку. У него в самом начале описываются перцептрон и адалайн. И у них на вход подается массив x0, x1, x2 ... которые премножаются с весами w0, w1, w2 ... Причем x1, x2 ... это значения с настоящие входные параметры, а x0 всегда единица. Зачем нужен x0? Кто в теме, расскажите пожалуйста.

 

Aswed
()

linux зависает после загрузки графики

Здравствуйте. У меня такая проблема. Купил ноут ASUS ROG GL552VW-CN866T. Решил накатить туда linux. Попробовал пару дистров запустить(livecd) и одна и та же ситуация: граб ок, начинается загрузка дистра ок, взлетают иксы, появляется превая графика с анимацией и все виснет. Погуглировал немного. Вот тут пишут, что проблема nouveau. Советуют запустить с такими параметрами

"nouveau.modeset=0 tpm_tis.interrupts=0 acpi_osi=! acpi_backlight=native i915.preliminary_hw_support=1 idle=nomwait".
Как это вообще сделать? Я в грабе перед выбором загрузки оси нажал edit и в открывшемся списке команд перед linuz и boot сделал
set nouveau.modeset=0
set tpm_tis.interrupts=0
.....
Это ничего не изменило.

 ,

Aswed
()

usb license

Можно я странный вопрос задам? У меня на работе возникла ситуация. Есть софт от сторонних разрабов, который передал клиент в виде списка файлов и чуть-чуть доков к ним. Этот софт может быть нужен в работе и мне поручили разобраться что это и как его завести. На мой вопрос связаться с разрабами я получил отрицательный ответ. Там ПО, которое устанавливается на машину, но при запуске говорит, что хочет видеть какую-то usb license. Еще покопавшись в том, что мне отдали я нашел папку usb key. В ней не было никаких инструкций, зато были 4 бинарных файла по 20kb. MIME у них ничего полезного не говорит, binary data. Я подозреваю, что это какой-то образ диска, который надо записать на флешку. У многоуважаемого сообщества есть какие-нибудь идеи что с этим можно сделать? Если я просто эти файлы солью в 1 а потом с помощью dd запишу их на флешку, я ее не убью? К сожалению, подробностей что это за ПО я рассказать не могу.

 ,

Aswed
()

Порт не освобождается после закрытия приложения

Здравствуйте. Я тут немного копаюсь в цпп сокетах. Написал вот такой код. После того как я посылаю прерывание Ctrl^C, он пишет мне что функция закрывания вызвалась и все ок. Но если я после этого пытаюсь запустить приложение снова, то в течении где-то полминуты порт недоступен. Я как-то неправильно закрываю сокет?

#include <iostream>
#include <string>
#include <cstring>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <signal.h>
#include <thread>
#include <mutex>
#include <set>
#include <chrono>

using namespace std;

class server_exception : public exception {
public:
	string message;
	server_exception(string m) : message(m) {}
};


#define BUF_LEN 1024
#define WITH_MUTEX(mutex, action) {mutex.lock(); action; mutex.unlock();};

bool global_stop_signal = false;

class server {

private:

	bool opened = false;
	set<thread::id> client_threads;
	mutex client_mutex;
	int listener = -1;

	void client(int socket) {
		WITH_MUTEX(client_mutex, client_threads.insert(this_thread::get_id()));
		char buf[BUF_LEN];
		int bytes_readed;
		string message;
		do {
			bytes_readed = recv(socket, (void*)buf, BUF_LEN, 0);
			int signal_on = -1;
			for(int i=0; i<bytes_readed; ++i) {
				if(buf[i] == '\n') {
					signal_on = i;
					break;
				}
			}
			if(signal_on == -1)
				message += buf;
			else {
				if(signal_on != 0 && buf[signal_on - 1] == 13)
					signal_on--;
				for(int i=0; i<signal_on; ++i)
					message += buf[i];
				bytes_readed = 0;
			}
		} while (bytes_readed > 0);
		cout << "message received: \"" << message << "\"" << endl;
		sprintf(buf, "received %d len message\n", static_cast<int>(message.size()));
		send(socket, buf, strlen(buf), 0);
		close(socket);
		WITH_MUTEX(client_mutex, client_threads.erase(this_thread::get_id()));
	}

public:

	void run(unsigned short port) {
		opened = true;
		listener = socket(AF_INET, SOCK_STREAM, 0);
		if(listener < 0) {
			throw server_exception("listener not open");
		}
		sockaddr_in addr;
		bzero((char*)&addr, sizeof(addr));
		addr.sin_family = AF_INET;
		addr.sin_addr.s_addr = INADDR_ANY;
		addr.sin_port = htons(port);
		cout << "connect on " << INADDR_ANY << " " << port << endl;
		if(bind(listener, (sockaddr*) &addr, sizeof(addr)) < 0) {
			throw server_exception("bind error");
		}
		// now on port
		listen(listener, 10);
		for(;;) {
			if(global_stop_signal) {
				return;
			}
			// use accept4(listener, NULL, NULL, SOCK_NONBLOCK)
			int socket = accept(listener, NULL, NULL);
			if(socket < 0) {
				throw server_exception("accept error");
			} else {	
				thread client_thread(&server::client, this, socket);
				client_thread.detach();
			}
		}
	}
	~server() {
		if(opened)
			stop();
	}
	void stop() {
		if(!opened)
			return;
		opened = false;
		cerr << "close call" << endl;
		while(client_threads.size() > 0)
			this_thread::sleep_for(chrono::milliseconds(100));
		if(listener >= 0)
			close(listener);
	}
};

void ctrl_c_event(int _) {
	global_stop_signal = true;
}

int main() {

	struct sigaction handler;

	handler.sa_handler = ctrl_c_event;
	sigemptyset(&handler.sa_mask);
	handler.sa_flags = 0;

	sigaction(SIGINT, &handler, NULL);

	server serv;
	try {
		serv.run(8080);
	} catch (server_exception exc) {
		cout << "exception: " << exc.message << endl;
	}
	serv.stop();

	return 0;
}

 ,

Aswed
()

параллельность в расте

Здравствуйте. Я тут немного решил поэксперементировать с параллельностью в расте и сделал маленький генератор фракталов. И был немного удивлен, когда увидел, то при распараллеливаниии на несколько тредов, производительность не только лишь не увеличивается, но еще и уменьшается! Это я криворукий или треды в расте нифига не параллельны?

extern crate image;

use std::thread;
use std::sync::{Mutex, Arc};
use std::time;
use image::*;
use std::env;

fn calculate_point(x : f64, y : f64, depth : usize) -> f32 {
    let mut zx = 0.0;
    let mut zy = 0.0;
    let mut zx1;
    let mut zy1;
    for i in 0 .. depth {
        zx1 = (zx * zx) - (zy * zy) + x;
        zy1 = zx * zy * 2.0 + y;
        if zx1 * zx1 + zy1 * zy1 > 4.0 {
            return (i as f32) / (depth as f32);
        }
        else {
            zx = zx1;
            zy = zy1;
        }
    }
    return 1.0;//depth as f32;
}

fn get_color(colors : &Vec<[f32;3]>, buffer : &mut Vec<[f32;3]>, x : f32) -> Rgb<u8> {
    let mut len = colors.len() - 1;
    for i in 0 .. len {
        for j in 0 .. 3 {
            buffer[i][j] = colors[i][j] + (colors[i+1][j] - colors[i][j]) * x
        }
    }
    while len > 1 {
        for i in 0 .. len - 1 {
            for j in 0 .. 3 {
                buffer[i][j] = buffer[i][j] + (buffer[i+1][j] - buffer[i][j]) * x
            }
        }
        len -= 1;
    }
    return Rgb([buffer[0][0] as u8, buffer[0][1] as u8, buffer[0][2] as u8]);
}

fn make_pic_1th(width : u32, height : u32) -> RgbImage {
    let mut pic = ImageBuffer::new(width, height);
    let colors : Vec<[f32;3]> = vec![[0.0,0.0,0.0], [255.0,0.0,0.0], [255.0,255.0,0.0], [255.0,255.0,255.0]];
    let mut buffer = colors.clone();
    for i in 0 .. width {
        let x = (i as f64) / (width as f64) * 2.0 - 1.0;
        for j in 0 .. height {
            let y = (j as f64) / (height as f64) * 2.0 - 1.0;
            (*pic.get_pixel_mut(i,j)) = get_color(&colors, &mut buffer, calculate_point(x, y, 1000));
        }
    }
    pic
}

unsafe fn calc_rows(index : u32, step : u32, width : u32, height : u32, pic : SendPtr<RgbImage>, live_flag : Arc<Mutex<bool>>) {
    let colors : Vec<[f32;3]> = vec![[0.0,0.0,0.0], [255.0,0.0,0.0], [255.0,255.0,0.0], [255.0,255.0,255.0]];
    let mut buffer = colors.clone();
    let pic       : *mut RgbImage = match pic {SendPtr(a) => a};
    for i in 0 .. width {
        let x = (i as f64) / (width as f64) * 2.0 - 1.0;
        let mut j = index;
        while j < height {
            let y = (j as f64) / (height as f64) * 2.0 - 1.0;
            (*(*pic).get_pixel_mut(i,j)) = get_color(&colors, &mut buffer, calculate_point(x, y, 1000));
            j += step;
        }
    }
    (*live_flag.lock().unwrap()) = false;
}

struct SendPtr<A>(*mut A);
unsafe impl<A> Send for SendPtr<A> {}
unsafe impl<A> Sync for SendPtr<A> {}

fn make_pic_3th(width : u32, height : u32) -> RgbImage {
    let mut pic = ImageBuffer::new(width, height);
    let f1 = Arc::new(Mutex::new(true));
    let f2 = Arc::new(Mutex::new(true));
    let f3 = Arc::new(Mutex::new(true));
    unsafe {
        macro_rules! spawn {($i:expr,$m:expr,$flag:expr) => {
            let ppic  = SendPtr(&mut pic);
            let pflag = $flag.clone();
            thread::spawn(move|| {calc_rows($i, $m, width, height, ppic, pflag)});
        }};
        spawn!(0, 3, f1);
        spawn!(1, 3, f2);
        spawn!(2, 3, f3);
    }
    let dur = time::Duration::from_millis(50);
    loop {
        let a : bool = *f1.lock().unwrap();
        let b : bool = *f2.lock().unwrap();
        let c : bool = *f2.lock().unwrap();
        if a || b || c {
            thread::sleep(dur)
        } else {
            break
        }
    }
    pic
}

fn main() {
    let args : Vec<String> = env::args().collect();
    let pic = if args[1] == "1" {make_pic_1th(1000,1000)} else {make_pic_3th(1000, 1000)};
    match pic.save("out.png") {
        Ok(_) => (),
        Err(e) => {
            println!("error: {:?}", e)
        }
    }
}

 ,

Aswed
()

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