удаленный разнорабочий по с++.
могу удаленно и разно работать на с++, linux, git, cmake,. расположение - Москва, юго-запад. готов на занятость порядка 8 часов в день.
зарплатные ожидания - средние по отрасли.
могу удаленно и разно работать на с++, linux, git, cmake,. расположение - Москва, юго-запад. готов на занятость порядка 8 часов в день.
зарплатные ожидания - средние по отрасли.
короче, ищется линукс, либо онлайн софт для написания документации(в свободном стиле, не гост)…ну кроме очевидных аналогов ворда от майкрософта.
на убунте 20.04 тандерберд слишком долго пытается соединиться c gmail, чтобы вычитать почту при запуске. порядка минуты, потом выскакивает по какому-то своему таймауту и почту берет нормально.
поставил эволюшн - там картина аналогична.
но с mail.ru или yandex.ru забирают почту сразу, оба клиента.
причем уже повторные взятия почты с гмайла идут быстро, опять же в обоих клиентах, то есть проблема в gmail.
у кого-нибудь такое набллюдается?
Всем привет. Надо сделать секурный бут инсталляции убунты под tianocore uefi. на qemu. Ну несекурный бут там простой, а вот как делать секурный вообще не понятно. tianocore требует ключей и всяких там сертификатов, которые непонятно где брать. кто-то с этим вопросом сталкивался?
Всем привет. Написал себе 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
Алексей.
короче. есть одноранговая сеть из нод, которые общаются по шифрованным каналам. шифрование на 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 соединить две ноды, имея только общий ключ и по самоподписанному сертификату на этом ключе у каждой?
задача. две аппы общаются между собой по ssl соединению через tcp(OpenSSL). Общение идет по неблокирующему сокету, с таймаутами. одна аппа отваливается(неважно как, даже отрывом кабеля), другая должна красиво это понять. кондовый способ - при чтении из такого оборванного соединения, SSL_read функция возвратит соотв. ошибку и тут ее можно обработать.
но это пока не наш путь, в силу архитектуры аппы.
вопрос. можно ли не читая впрямую, понять из обьекта SSL(это дескриптор SSL соединения в OpenSSL), что низлежащий сокет находится в невалидном состоянии, не копаясь в самом сокете.
короче надо функцию bool ssl_connected(..).
ps. также есть понимание, что SSL_peak и анализ ошибки даст понимание о разорванности соединения. вопрос…кроме этого, можно чем нибудь еще воспользоваться?
есть абстрактный байтовый канал для обмена сообщениями, пока внутри реализован на неблокирующих tcp сокетах. операции чтения с таймаутами, а также сокеты периодически переводятся в небуферизованный режим, в моменты диалогов. хочу приделать криптование на openSSL.
вот вопрос, а на openSSL можно реализовать таймаут(вроде можно пишут в инете, но есть ньюансы), но вопрос с небуферизованным режимом внутреннего tcp сокета пока неясен.
на своем сокете буферизация делается через игру с параметром
TCP_NODLEAY.
типа
int lret = setsockopt( fhandle, IPPROTO_TCP, TCP_NODELAY, &lflag, sizeof(lflag) );
а в openSSL даже до сокета вроде добраться нельзя. а если можно, она выдержит такое рукоприкладство? спасибо.
сам я в игры не играю, но приходится, поскольку карантин. решил с ребенком порубиться в стрелялку в локальной сети. поставил sauerbraten. поставил пакеты, что он хочет - libSDL1.2. в убунте 20.04 стоят по дефолту libSDL2.0… все стартует, но текстуры и битмапы превращаются в мусор, а поскольку там все на битмапах - прочитать даже меню невозможно. это на лаптопе.
а на моем компе - все отлично, там убунта 16.04, и проц интел core i3 3225(ему лет 150), со встройкой.
куда копать непонятно. похожая ситуация и с AssaultCube, на моем - все отлично, на лаптопе - есть похожие артефакты с битмапами, но там их существенно меньше и играть можно.
поможите кто чем может.
такое вот дело. если случается проблема с провайдером(я раздаю линию через домашний wifi), то есть пропадает интернет, это иногда приводит к тому, что на лаптопе(ubuntu 20.04) пропадает в списке видимых точек доступа моя домашняя. всех вокруг видно, ее - нет. причем планшеты и смартфоны ее видят. а вот лаптоп - не желает. если переименовать точку на другое имя, то она видна. такое впечатление что она попадает в какой-то блеклист унутре оси. что это вообще? как бороцца? спасибо
Ищу вот ноут для школьника, чтобы линукс, ну там убунта какая-нить на него вставала без проблем, подарок на ДР. бюджет в районе 25 тыр рублей, москва.
я не сторонник ноутов, потому и не знаток особо. всегда пользовался станционаром, полазил по рынку - получается это модель уровня Core i3 7xxx, 4 гига памяти, в возможностью доставить еще 4 гига. понятно, что 4 гига для 64 бит ОС, это почти в обрез. Какие вообще нормальные производители по цене-качество, может у кого есть такой недорогой ноут, и есть опыт использования? короче обьект - девочка 14 лет, будет серфить, удаленно учиться, киношки смотреть, вот чтобы не было танцев с бубном с драйверами и меньше мороки. винду не хочу пока.
сначала хотелось бы выбрать производителя, а потом среди его линейки найти то, что по цене подходит и возможности апгрейда памяти.
спасибо.
версия с репы такая: 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 все нормально.
Для плюсования под линуксом давно использую CodeBlocks. Пытался вьехать в VS code, но как-то не пошло. И сложно, и неудобно, и тормозно и память ест изрядно. вопрос - есть таки у кого-то опыт использования vs code для c++? Как впечатления?
написал язычок и компилятор, поскольку это модно и молодежно.
пример теста(форматирование частично слетело, как уж есть):
//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.
Ищу удаленку. живу - Москва, юго-запад. Удаленка желательно в Москве. Без проблем могу подьезжать по требованию. Всегда на связи - скайп, емейл. живу на 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
Последение три проекта -
| ← предыдущие |