• Как выбрать правильное количество ОЗУ?

    @koronabora
    Человек
    Как-то с учеником писали программку на с++, ради прикола сожрали 32 гигабайта памяти на его компьютере. Скорость - около 0.5 гигабайта в секунду получилась.

    А если работать, то 3d моделирование, а также инженерные cad системы сжирают больше всего памяти. Ну и, конечно, специальные рассчеты.

    Сейчас, по-сути, стандарт - 8ГБ, хороший набор - 16. Выше - для спец. задач.
    Ответ написан
    Комментировать
  • Как организовать сеть с удаленными филиалами, провайдер объединил в один vlan несколько офисов?

    @koronabora Автор вопроса
    Человек
    Трассировка говорит, что узел недоступен.

    Маски подсети - везде 255.255.255.0

    Я думаю, проблема со стороны провайдера, а именно - скорее всего где-то привязан mac 192.168.1.10. И поэтому с других компьютеров уже не пускает в филиалы. Поэтому, тут только один вариант - adsl соединение выводить за NAT, делать проброс портов для всех сервисов и спокойно жить дальше. На эту идею меня натолкнуло то, что иногда, если 192.168.1.10 выключен, а с другого компьютера попытаться получить доступ, он есть, но стоит включить 192.168.1.10, доступ появляется у него, а на другом устройстве пропадает.

    Буду в понедельник созваниваться с провайдером (по выходным они тут все спят), уточню вопрос.
    ++++++++++++++++++++++

    Результат такой:
    У провайдера есть неявная автоматическая привязка mac адреса. Кто первый вышел в сеть, того и тапки. Решил ничего не трогать и не менять, объект "в продакшине", поэтому на компе, который имеет связь с остальными, установил самописную программку, которая собирает данные с камер и датчиков и складывает на ftp сервер в другом филиале. Если филиал недоступен, то в папку складывает и потом отправляет.
    Ответ написан
  • Как пользоваться QDataStream?

    @koronabora
    Человек
    Вот кусок из рабочего проекта, способ использования взят из документации qt.

    void TcpClient::sendToServer(QString data)
    {
    	if (_socket != Q_NULLPTR)
    	{
    		res = "";
    
    		while (_socket->state() != QAbstractSocket::ConnectedState)
    		{
    			if (_socket->state() != QAbstractSocket::ConnectingState && _socket->state() != QAbstractSocket::HostLookupState)
    			{
    				_socket->connectToHost(_name, _port); // try to connect
    				alreadyConnected = true;
    			}
    			QApplication::processEvents();
    			QThread::currentThread()->msleep(NET_IO_CONNECT_DELAY);
    			qDebug() << "waiting for connection";
    		}
    
    		if (alreadyConnected) // we connected to server few times ago. Let's wait
    		{
    			QThread::currentThread()->msleep(NET_IO_DELAY_AFTER_CONNECTION);
    			alreadyConnected = false;
    		}
    		qDebug() << "Send to server";
    		QByteArray block; 
    		QDataStream out(&block, QIODevice::WriteOnly); 
    		out.setVersion(QDataStream::Qt_5_6);
    		out << (quint16)0; // Забиваем память под размер
    		out << _realId; // записываем реальные данные
    		out << data; // еще немного реальных данных
    		out.device()->seek(0); // переходим на начало
    		out << (quint16)(block.size() - sizeof(quint16) - sizeof(quint64)); // записываем размер сообщения
    		quint64 sss = _socket->write(block); // отправляем в сокет
    		if (sss < block.size()) // сокет сожрал не все
    			qDebug() << "Буфер маловат будет!" << sss << " != " << block.size(); //
    		else if (sss > block.size()) // сокет сожрал больше, чем необходимо
    			qDebug() << "Что-то лишнее в буфере! " << sss << " != " << block.size(); //
    		qDebug() << "Data written: " << data; // сокет все-таки молодец
    		_socket->flush(); // выталкиваем данные в сеть
    		_lastMessage = data;
    		_timeOutTimer->setSingleShot(true); // ждем немного
    		_timeOutTimer->start(NET_IO_DELAY); // чтобы сетевой стек успел отправить данные
    	}
    	else qDebug() << "Socket is null!";
    }
    Ответ написан
    Комментировать
  • Как сохранить жизнь переменной стека?

    @koronabora
    Человек
    Какие-то страшные операции с памятью.

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

    Решения два:
    1) Использовать рекурсию, тем самым забивая стек и не давая удалить то, что требуется. Но, это достаточно безграмотный подход. У рекурсии свой круг задач и она немного не для таких вещей.
    2) Действовать как правильно - выделять память в куче (heap), используя оператор new, а внутрь функции передавать указатель на область памяти в кучу.

    void someFunction(int index, Value *value) {
    	if (value!=NULL)
    		switch(index) {
    		case 0: 
    			SomeTypeOne t = someObject->someMethodOne(); // возвращает SomeTypeOne
    			value->type = "SomeTypeOne";
    			break;
    		case 1: 
    			SomeTypeTwo t = someObject->someMethodTwo(); // возвращает SomeTypeTwo
    			value->type = "SomeTypeTwo";
    			break;
    		}
    }
    Ответ написан
    Комментировать
  • Указатели в C++: что такое "x{"?

    @koronabora
    Человек
    Это мусор в памяти.

    Почему так происходит - char* воспринимается как строка, по стандарту с
    Далее - длина, занимаемая в памяти переменной, всегда кратна определенному значению. Как и сам размер, занимаемый в памяти. Это, обычно, 4 байта для х86 и 8 для х64. Технология называется выравниванием.

    Вы в строку записали один символ, а символ конца строки не записали. Прочиталась память до конца промежутка выравнивания и вывелась для вас. Там оказался всякий мусор, как всегда. Это все равно, что вывести неинициализированную переменную.

    З.Ы. А само выравнивание необходимо для быстрого доступа к памяти. Грубо говоря, память разбивается на ячейки и мы всегда знаем, что для большинства переменный адрес делится на 4 или на 8, например.
    Ответ написан
    Комментировать
  • Какой выбрать недорогой и желательно безопасный pci-e x1 адаптер wifi для раздачи интернета с пк?

    @koronabora
    Человек
    Однозначно роутер. У сетевой карты, банально, нет стольких возможностей, как у роутера.
    Ответ написан
    Комментировать
  • На чем проще программировать под windows?

    @koronabora
    Человек
    Все зависит от уровня и любмого языка.
    Любите С++ - QT
    Любите C# - на нем и пишите. Можно выбрать Mono для кроссплатформенности
    Любите Java - пишите на ней с использованием Java FX
    Знаете python - Tkinter
    Ответ написан
    Комментировать
  • Как лучше организовать VPN в данной ситуации?

    @koronabora
    Человек
    1) Я так понимаю, что цель - безопасный выход в интернет?
    Тогда: арендуем в Европе VDS сервер примерно такого плана: самый простой процессор, жесткий диск - 10ГБ хватит, оперативки 512 или выше, самое главное - канал интернета безлимитный и с пропусканием мегабит в 20.

    Что происходит дальше - на этой VDS поднимаете OpenVPN сервер. К этому серверу, с одной стороны, подключается ваш роутер (его надо прошить под OpenWRT), с другой стороны - офис. Сервер настраивается так, что между ними есть связь. Если хотите с телефона или планшета подключиться к дому, запускаете OpenVPN клиент, предварительно настроенный, он также подключается к VDS и имеет доступ к данным из дома по защищенному каналу.

    Для бэкапа имеет смысл поднять ftp сервер на домашнем компе. FileZilla хорошо работает под виндой. И не забыть этот комп включить в то время, когда уже настроенный сервер с работы будет лить на этот ftp бэкап. Бэкап будет литься по защищенному каналу прямо домой через VDS.

    Грубо говоря - VDS становится точкой выхода в интернет. А подключившиcь к нему, можно считать или записать данные, которые находятся дома. Бэкап сервера можно также делать на VDS, а потом, периодически. самому скачивать на комп. Чтобы не парится с включением.

    OpenVPN можно заменить на L2TP с шифрованием , но настраивается в разы сложнее. Зато большинство роутеров умеют на заводской прошивке работать с этим типом VPN.
    Ответ написан
  • Не включается ноутбук?

    @koronabora
    Человек
    Если все шлейфы на месте, смотрите нет-ли сколов или трещин на CPU ноутбука.
    Если вытаскивали шлейф матрицы с вставленной батарейкой, могли спалить чипы.
    Ответ написан
    Комментировать
  • Какой SSD будет лучше для MBP?

    @koronabora
    Человек
    Больше места - лучше при одинаковом типе памяти.
    Ответ написан
    Комментировать
  • На каком языке пишут ААА игры?

    @koronabora
    Человек
    Если сингл - то берут имеющийся в наличии движок. Все приличные (не Unity) написаны на C++. Lua использутся для скриптов и, редко, для hud (индикаторы на экране). Часто используют свой скриптовый язык.

    Если хотите глянуть внутри, есть несколько вариантов:
    1) Приятный код: ищите на трекерах утекшие исходники gamebryo
    2) Современный и труъ вырвиглазный с\с++ код - качайте cry engine
    3) Всего понемногу: Unreal Engine.

    Мне больше всего, в свое время, понравился вариант 1

    Мультиплеер: также c++.

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