LINUX.ORG.RU

Сообщения alysnix

 

mozilla thunderbird слишком долго соединяется с gmail.com

на убунте 20.04 тандерберд слишком долго пытается соединиться c gmail, чтобы вычитать почту при запуске. порядка минуты, потом выскакивает по какому-то своему таймауту и почту берет нормально.

поставил эволюшн - там картина аналогична.

но с mail.ru или yandex.ru забирают почту сразу, оба клиента.

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

у кого-нибудь такое набллюдается?

 

alysnix
()

SecureBoot инсталляции убунты.

Всем привет. Надо сделать секурный бут инсталляции убунты под tianocore uefi. на qemu. Ну несекурный бут там простой, а вот как делать секурный вообще не понятно. tianocore требует ключей и всяких там сертификатов, которые непонятно где брать. кто-то с этим вопросом сталкивался?

 ,

alysnix
()

А вот кому IDE для C++?

Всем привет. Написал себе IDE для плюсов(строго под линукс), от лени, и от того, что другие не нравились. Написана на плюсах, с использованием wxWidgets, плюс clang либа. вот выложил видос как создать проект, сбилдить и пустить аппу.

https://www.youtube.com/watch?v=5DtzFbrjpVw

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

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

исходники не выкладываю. поскольку работаю на убунте 20.04, то приветствуются персоны с этой убунтой, чтобы не пересобирать аппу. Если есть вопросы - пишите сюда.

также в этом эккаунте на ютубе, есть и более ранние видео об IDE, где можно получить приблизительное представление о ее фичах, с учетом, что она модернизировалась за это время.

добавленное видео: https://www.youtube.com/watch?v=73qxNBq2Thk

нерафинированный видос - парсинг сорса в фоне. https://www.youtube.com/watch?v=nFyKyAsZEvk

Алексей.

 ,

alysnix
()

одноранговая сеть на openSSL

короче. есть одноранговая сеть из нод, которые общаются по шифрованным каналам. шифрование на openssl, tls1.3 протокол. нода может как принимать тлс - коннекты, так и сама коннектиться к другим нодам. для простоты эксперимента я сделал самоподписанные сертификаты на общем приватном ключе для каждой ноды. ну как бы не мудрствуя лукаво, на основании общей логики, без особой читки openssl доков.

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

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

вот тут начинается какая-то пурга. сервер принимает от клиента сертификат и гнусно ругается -

The passed certificate is self-signed and the same certificate cannot be found in the list of trusted certificates.

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

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

и вообще - можно ли на openssl соединить две ноды, имея только общий ключ и по самоподписанному сертификату на этом ключе у каждой?

 

alysnix
()

(с++)ищется лучший способ обнаружить, что ssl соединение разорвано.

задача. две аппы общаются между собой по ssl соединению через tcp(OpenSSL). Общение идет по неблокирующему сокету, с таймаутами. одна аппа отваливается(неважно как, даже отрывом кабеля), другая должна красиво это понять. кондовый способ - при чтении из такого оборванного соединения, SSL_read функция возвратит соотв. ошибку и тут ее можно обработать.

но это пока не наш путь, в силу архитектуры аппы.

вопрос. можно ли не читая впрямую, понять из обьекта SSL(это дескриптор SSL соединения в OpenSSL), что низлежащий сокет находится в невалидном состоянии, не копаясь в самом сокете.

короче надо функцию bool ssl_connected(..).

ps. также есть понимание, что SSL_peak и анализ ошибки даст понимание о разорванности соединения. вопрос…кроме этого, можно чем нибудь еще воспользоваться?

 

alysnix
()

вопрос по openSSL - таймауты и проч.

есть абстрактный байтовый канал для обмена сообщениями, пока внутри реализован на неблокирующих tcp сокетах. операции чтения с таймаутами, а также сокеты периодически переводятся в небуферизованный режим, в моменты диалогов. хочу приделать криптование на openSSL.

вот вопрос, а на openSSL можно реализовать таймаут(вроде можно пишут в инете, но есть ньюансы), но вопрос с небуферизованным режимом внутреннего tcp сокета пока неясен. на своем сокете буферизация делается через игру с параметром TCP_NODLEAY. типа int lret = setsockopt( fhandle, IPPROTO_TCP, TCP_NODELAY, &lflag, sizeof(lflag) );

а в openSSL даже до сокета вроде добраться нельзя. а если можно, она выдержит такое рукоприкладство? спасибо.

 

alysnix
()

ubuntu 20.04, ноут, athlon 300u, встройка Vega 3, траблы в sauerbraten

сам я в игры не играю, но приходится, поскольку карантин. решил с ребенком порубиться в стрелялку в локальной сети. поставил sauerbraten. поставил пакеты, что он хочет - libSDL1.2. в убунте 20.04 стоят по дефолту libSDL2.0… все стартует, но текстуры и битмапы превращаются в мусор, а поскольку там все на битмапах - прочитать даже меню невозможно. это на лаптопе.

а на моем компе - все отлично, там убунта 16.04, и проц интел core i3 3225(ему лет 150), со встройкой.

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

поможите кто чем может.

 

alysnix
()

ubuntu 20.04, не видно своей точки доступа.

такое вот дело. если случается проблема с провайдером(я раздаю линию через домашний wifi), то есть пропадает интернет, это иногда приводит к тому, что на лаптопе(ubuntu 20.04) пропадает в списке видимых точек доступа моя домашняя. всех вокруг видно, ее - нет. причем планшеты и смартфоны ее видят. а вот лаптоп - не желает. если переименовать точку на другое имя, то она видна. такое впечатление что она попадает в какой-то блеклист унутре оси. что это вообще? как бороцца? спасибо

 ,

alysnix
()

линукс ноут для школьника.

Ищу вот ноут для школьника, чтобы линукс, ну там убунта какая-нить на него вставала без проблем, подарок на ДР. бюджет в районе 25 тыр рублей, москва.

я не сторонник ноутов, потому и не знаток особо. всегда пользовался станционаром, полазил по рынку - получается это модель уровня Core i3 7xxx, 4 гига памяти, в возможностью доставить еще 4 гига. понятно, что 4 гига для 64 бит ОС, это почти в обрез. Какие вообще нормальные производители по цене-качество, может у кого есть такой недорогой ноут, и есть опыт использования? короче обьект - девочка 14 лет, будет серфить, удаленно учиться, киношки смотреть, вот чтобы не было танцев с бубном с драйверами и меньше мороки. винду не хочу пока.

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

спасибо.

 , ,

alysnix
()

Потестите свой GCC. у меня бага

версия с репы такая: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

опции компилятора: -std=c++11 -Wall -Wextra -Wshadow -Winit-self -Wredundant-decls -Wcast-align -Wundef -Wfloat-equal -Wunreachable-code -Wmissing-include-dirs -Wswitch-default -fno-rtti -fno-exceptions

код

#include <cstring>
#include <iostream>

class StringRef{
public:	
	const std::string &_ref; //const reference to some string
	StringRef(const std::string &fs):_ref(fs){}
};

//print two strings 
void printTwoStrings(const StringRef &ft, const std::string &fs){
	std::cout<<"\nmust be: A  B > ";
	std::cout<< ft._ref <<"  " << fs << "\n";
}

//print string ref only
void printRef(StringRef &ft){
	std::cout<<"\ntrying to print string ref";
	std::cout<< ft._ref << "\n";
}


int main(){
//incorrect behavior - reference to local object
	StringRef lt("A"); 
	printTwoStrings(lt,"B");

//correct behavior - reference to temporary object
	printTwoStrings(StringRef("A"),"B");

	//printRef(lt); //it crashes

//just wait
	std::string ls;
	getline(std::cin,ls);
}

печатает в неверном случае B B, а должно быть A B.

На clang-6.0 все нормально.

 

alysnix
()

Visual Studio Code - хорошо ли это?

Для плюсования под линуксом давно использую CodeBlocks. Пытался вьехать в VS code, но как-то не пошло. И сложно, и неудобно, и тормозно и память ест изрядно. вопрос - есть таки у кого-то опыт использования vs code для c++? Как впечатления?

 ,

alysnix
()

язычок вот написал

написал язычок и компилятор, поскольку это модно и молодежно.

пример теста(форматирование частично слетело, как уж есть):

//some tests fot compiler
definition Tests
	fun testAll()
end Tests

//##########################
module Tests
	import
		SYSTEM
		Strings
		Con = Console
		IO
		Suite = TestHelper

	alias
		assert	= TestHelper.assert
		error		= TestHelper.error
		write		= Con.write
		writeLn	= Con.writeLn
		writeInt= Con.writeDec
		OK 			= TestHelper.ok


//test type constructors
	type
		WeekDay			= enum (one,two,three)
		Colors 			= enum (White, Red, Blue, Green, Black)
		Record2d 		= record var _x,_y:int end
		SetOfColors = setof (Colors)
		FuncType  	= fun		(int,int):int

//############
	var //global vars
		Res:int
		lint:int

//###########################
	//func OK() {	Con.writeLn("..OK")	}

	fun testLocalPointer():bool {
		const Val = 777;
		let lx=0;
		var lp:^int = addr(lx);

		lp^=Val;
		return lx==Val
	}

	fun testEnum():bool {
		const	cc = WeekDay.two
		var		lday:WeekDay=WeekDay.two;

		write("testEnum..")
		case lday
		of WeekDay.two	:	return true
		else error("wrong case selected 1")
		..

		case lday
		of cc	:	return true
		else error("wrong case selected 2")
		..

		return false
	}

	fun testArray():bool {
		return true
	}

	fun testRecord():bool {
		return true
	}

	fun testTypes(){
		Suite.test(testLocalPointer, "testLocalPointer")
		Suite.test(testEnum,"test enum")
		Suite.test(testArray,"test array")
		Suite.test(testRecord,"test record")
	}

//###############################
//test statemens
//###############################
	fun testRepeat(fx:int) {
		write("Test repeat...")
		repeat
			if fx%100==0 { write("*")}
		until --fx == 0
		OK()
	}

	fun testLoop(floops:int) {
		let	lx = 0;
		let lloops=floops;

		write("testLoop..")
		while floops>0 do
			++lx
			floops-=1
		..
		TestHelper.assert(lx==lloops,"error in testLoop")
		//test real loop
		lx=1000
		loop
			lx-=1
			if lx==0 do break ..
		..
		OK()
	}

	fun testIf(){}

	fun testWhile(){}

	fun testCase() {
		var lx:int=5;
		write("testCase..")
		case lx
		of 1,1+1,1+2:	error("1")
		of 4:					error("2")
		of 5:					writeLn("case 5 selected") //must be selected
		of 12:				error("3")
		else					error("4")
		..
		OK()
	}

	fun testFinally() {
 		write("Test finally..")
 		return

	finally
		write("FINALLY passed correctly")
		OK()
	}

	fun testStatements(){
		testRepeat(1000)
		testLoop(1000)
		testIf()
		testWhile()
		testCase()
		testFinally()
	}

//################################
//################################

	fun logOpsTest() {
	let
		lt=true
		lf=false;

		write("logOperationTest..")
		assert(not (lt and lf), "boolean and error")
		assert(lt or lf, "boolean or error")
		OK()
	}


//########

	var	Depth:int=0

	fun
		incr(i:int):int {return i+1}
		decr(i:int):int {return i-1}

	fun testRecursion(fx:int) {
		write("Recursion..")
		write("*")
		Depth = incr(Depth)		//Depth+=1
		if fx>0 { testRecursion(fx-1) }
		Depth = decr(Depth) //Depth-=1
		if Depth==0 {
			write("out")
		}
		//OK()
	}

	fun testMemory(fsize:int) {
		precond fsize>0;
		var	lptr: address = nil;
		write("TEST MEMORY..")
		lptr = SYSTEM.allocate(fsize)
		write("allocated..")
		SYSTEM.free(lptr)
		write("deallocated..")
		OK()
	}

	fun testIndex() {
		var	ls:seq(char,10);
		let i=0;

		write("testIndex(must be 'alex 1234')..")
		ls[i]='a'
		ls[++i]='l'
		ls[++i]='e'
		ls[++i]='x'
		ls[++i]=' '
		ls[++i]='1'
		ls[++i]='2'
		ls[++i]='3'
		ls[++i]='4'
		ls[++i]=char(0)
		write(ls)
		OK()
	}

	fun testVarParam(var fvar:int) {
		write("Test VAR param(value must be 777)..");
		write("variable parameter is ");
		writeInt(fvar);
		OK();
	}

	fun testFiles() {
	var
		lf			:IO.File
		i,lsize	:int
		lok			:bool

		fun printCh(ff:IO.File){ //read char and print it
			precond ff # IO.NilFile;
			Console.writeChar(char(IO.fread(ff)))
		}

		do
		lf=IO.fopen("test.als") //open this file
		assert(lf#IO.NilFile,"cannot open file")
		lsize=IO.fsize(lf)		//get file size
		i=0
		while i<lsize { //print all the file to console
			printCh(lf)
			i+=1
		}

	finally //finally close the file
		lok = IO.fclose(lf) //close the file
		if not lok do error("cannot close file")..
		writeLn("file closed")
	}

	//Test file creation and writing
	fun testCreateFile() {
		let
			i=100
			lfile = IO.fcreate("xxx.txt")
			lok = false;

		//var	lfile:IO.File;
		assert(lfile#IO.NilFile,"cannot create file")
		while i>0 do
			lok = IO.fwrite(lfile,'X')
			--i
		..
		lok = IO.fclose(lfile)
	}

/*
	func testFileStat()
	var
		lf:IO.File
		lok:bool
		lstat:IO.FileInfo
	do
		lf 	= IO.fopen("test.als")
		lok = IO.finfo(lf, lstat)
		if (not lok) Error("cannot get file statistic") ..
	finally
		lok = IO.fclose(lf)
	..testFileStat
*/

	cluster MyGroup
		const
			c1=100
			c2=200
			c3=300
		type
			LocalInt = int

		//func One():int	return 1	..One
	end MyGroup

	@testGroup(){
		let	lx = MyGroup.c1;
		write("TEST GROUP..")
		writeInt(lx)	write(",")
		writeInt(MyGroup.c2)	write(",")
		writeInt(MyGroup.c3)
		OK()
	}


//module TestFunctionType
	@FF1(in fs:Strings.String) = writeLn(fs) ..
	@FF2(i,j:int)= ..

	type ffuu = @(int,int)

/*
	func testFunctionType()
	var
		lf	:func(int,int)
		lfs :func(in Strings.String)
		lff :func(int):func(int) 			//function return function
	do
		lf 	= FF2
		lfs = FF1
		//lfs("CALLING FORMAL FUNCTION")

		//lff = FF2
		//lfs = actualFunction
		//lfs("Formal Function Go")
	..testFunctionType
*/


//end module
	fun	failPrecond(fval :int) {
		precond fval<10 //this precondition must be failed by caller
		raise TestHelper.TestError
	}

	fun testPrecond():bool {
		//write("precondition test..")
		try
			failPrecond(100)
		catch SYSTEM.PrecondEx {
			return true
			//writeLn("OK-precondition failed as needed")
		else
			return false
			//writeLn("ERROR - precondition failed WRONG")
		}
	}

	fun testTrueFalse():bool {
		var lb,lres:bool;
		//write("testTrueFalse..")
		return not (true and false) or (true or false)
	}

	fun inout(in fin:Record2d, out fout:Record2d) {
		fout = fin
	}

/*
	func testInOutParams()
	do
	end testInOutParams
*/

	fun testStringConstantInit() {
		var	lb:seq(char,30)="TestingString";
		write("testStringConst..")
		Con.print (lb)
		writeLn(" - if text is 'TestingString' then OK")
		OK()
	}

	fun testAll() {
		writeLn("#nModule Tests STARTED:")
		testTypes()
		testStatements()



		testIndex()
		//testEnum()
		testRecursion(20)
		testMemory(1000)
		testRepeat(1000)
		lint = 777
		testVarParam(var lint)

		testGroup()
//		testFiles() //Program exited with return code: 0
//		T.testCreateFile()
//		T.testFileStat()
		logOpsTest()
		Suite.test(testPrecond,"test precondition")
		Suite.test(testTrueFalse, "test boolean expressions")
		writeLn("END OF TESTS")
	}

do
	//testAll()
	//Con.writeLn(" Daddy is very big popa")
end Tests.

 

alysnix
()

ищу удаленку. С++. системное/прикладное программирование. Москва

Ищу удаленку. живу - Москва, юго-запад. Удаленка желательно в Москве. Без проблем могу подьезжать по требованию. Всегда на связи - скайп, емейл. живу на linux.

Cистемное и прочее программирование, с++, python, lua, ассемблеры и проч. linux, windows, голое железо, realtime, прикладное программирование, разработка архитектуры ПО(UML).

Опыт - 20+ лет.

Области в которых хорошо разбираюсь - realtime, ООП, разработка компиляторов, многопоточное event-driven программbрование, разработка ядра rtos, sdk, tools, и прочее. много занимался геймдевом(с++) реального времени, но забросил.

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

Инструменты и языки, что использую(использовал) при разработке: Modula-2, Delphi , C++, C#, Java, Python, Lua, разные ассемблеры. Visual Studio, Eclipse, CodeLite, CodeBlocks. git

Последение три проекта -

  1. в команде - кросс-разработка под linux ПО для защищенного сотового телефона(arm, gcc, С++, -ядро rtos, sdk, прикладное по) . Ведущий разработчик
  2. защищенный сетевой коммутатор, кросс-разработка под linux, ПО для управляющего процессора(arm, c++, gcc, наноядро rtos, драйверы, прикладная логика и проч). Ведущий разработчик
  3. прикладное ПО, linux, wxWidgets, gcc, clang.

 

alysnix
()

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