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

    ellz, чаще всего делают 2 реализации: для веба и для приложения. Либо реализация может быть смешанная при использовании ajax. Для общения клиент-сервера используют сессии, токены, http basic auth. Это если в качестве сервера - веб приложение. Разработчик должен создать интерфейс (API) по которому будет происходить взаимодействия, т.е набор правил для каждого запроса и ответа, в том числе и способ обработки исключений. Например Яндекс. Кассе клиент должен отдать xml с кодом ошибки внутри тела. А другое приложение должно получить в ответ http status code (500, 400, 404) и т.д. Популярный из форматов взаимодействия json, иногда xml. В более сложных моделях soap, rest. Можешь добавит в скайп / вк, могу по подробнее объяснить / показать
  • Как делается отслеживание объектов, запись координат в базу?

    fronter-up, для начала можешь сделать простое приложение для Android которое будет получать информацию о координатах и выводить их на экран. Далее можешь сделать http запрос к любому http серверу и с помощью того же php сохранить полученные данные в файл / бд / куда душе угодно.

    Если нужно что то больше, то в автомобилях есть специальный интерфейс obd / obd 2, он позволяет получить различную информацию о частях ТС (коды ошибок, диагностические данные и т.д). Я думаю он тебе и поможет получить информацию о пробеге, топливе и т.д.
    Есть диагностические сканеры для android которые связываются с телефоном по BT / WiFi и передают инфу с авто. Остается как то эту инфу передать в твое приложение.

    Уровень 2. После того как сделал приложение для Android / iOs или с чем проще тебе работать. Далее можешь перенести это приложение в независимую среду, а именно перенести например на arduino или что то подобное. Где ты аналог своего приложения запустишь на linux ну или на худой конец опять на Android.

    Уровень 3. Для полной независимости можешь портировать приложение на ARM Cortex-m3/4, и обвязать его нужными тебе модулями. В качестве OS: может быть опять Linux или что то еще по легче.
  • Как хранить большое количества изображений на сервере?

    Андрей, я у себя сохраняю оригинал и на бэке делаю large для fullhd и small для превью.

    В БД храни информацию о дате создания изображения, далее делай выборку устаревших записей по расписанию / вручную и удаляй файлы / папки
  • Как хранить большое количества изображений на сервере?

    Alexander Litvinenko, особенность того что ФС имеет вид дерева. Когда много файлов в одной папке, идет дизбаланс листьев на ветке, приходится загружать всю информацию о ветке(папке), а не только часть, если все разбито по папкам
  • В каких веб приложения можно использовать Sqlite3?

    Jorik_Wa, для любой БД есть клиент и сервер. У MySQL, Postgresql сервер запущен всегда как демон / служба. А клиент только когда ты используешь драйвер для работы с БД.

    У Sqlite3 клиент и сервер запускаются и живут одинаковое время - пока исполняется скрипт, если речь идет о PHP.

    Следовательно Sqlite3 накладывает на PHP скрипт расходы на запуск сервера + на запуск клиента. Например PHP + Pg = 10mb ram | PHP + Sqlite3 = 10mb ram + память для самого сервера, парсера запросов, индексов и так далее + ко всему этому процессорное время
  • Выбор монитора для программиста, как правильно?

    Вертикально как то комфортнее писать код, больше обзора. Т.к код редко уходит за пределе экрана, но не хватает ширины на 24"
  • Почему могут зависать потоки?

    sentike
    @sentike Автор вопроса
    Вроде как возникает проблема в классе отвечающем за скачку -- при ошибке: UnkownNetworkError
    class TaskDownload 
    	: public QObject
    {
    	Q_OBJECT
    
    	QNetworkAccessManager NetworkAccessManager;
    	QNetworkReply* Reply;
    	QByteArray Content;
    	qint64 Attemps;
    	QUrl Url;
    
    	void AttempDownload();
    public:
    	bool IsSuccessfully() const
    	{
    		return Attemps < 3 && Content.size() > 0;
    	}
    
    	QByteArray& GetContent()
    	{
    		return Content;
    	}
    
    	const QByteArray& GetContent() const
    	{
    		return Content;
    	}
    
    	TaskDownload(QUrl url);
    	~TaskDownload();
    
    signals:
    	void ReadyRead();
    
    	void DownloadFinished();
    	void DownloadProgress(qint64, qint64);
    
    	private slots:
    	void onReadyRead();
    	virtual void onDownloadFinished();
    	void onDownloadError(QNetworkReply::NetworkError err);
    	void onDownloadProgress(qint64, qint64);
    
    };


    #include "TaskDownload.h"
    
    
    TaskDownload::TaskDownload(QUrl url)
    	: Reply(nullptr),
    	Attemps(1)
    	, Url(url)
    {
    	AttempDownload();
    }
    
    TaskDownload::~TaskDownload()
    {
    }
    
    
    void TaskDownload::AttempDownload()
    {
    	if (Attemps > 3)
    	{
    		//throw new std::exception(QString("Failed to download file: " + Url.toString()).toStdString().c_str());
    		exit(100001);
    	}
    
    	QNetworkRequest request(Url);
    	Reply = NetworkAccessManager.get(request);
    
    	qInfo() << QString("Begin download, attemp: %1 \nurl: %2").arg(QString::number(Attemps), Url.toString());
    
    	connect(Reply, SIGNAL(readyRead()),
    		this, SLOT(onReadyRead()));
    
    	connect(Reply, SIGNAL(downloadProgress(qint64, qint64)),
    		this, SLOT(onDownloadProgress(qint64, qint64)));
    
    	connect(Reply, SIGNAL(finished()),
    		this, SLOT(onDownloadFinished()));
    
    	connect(Reply, SIGNAL(error(QNetworkReply::NetworkError)),
    		this, SLOT(onDownloadError(QNetworkReply::NetworkError)));
    
    	this->Attemps++;
    }
    
    
    void TaskDownload::onReadyRead()
    {
    	// downloadTime.start();
    	emit ReadyRead();
    }
    
    void TaskDownload::onDownloadError(QNetworkReply::NetworkError err)
    {
    	auto url = Url.toString().toStdString();
    	qInfo() << "onDownloadError: " << Url.toString() << " | error: " << err;
    	AttempDownload();
    }
    
    void TaskDownload::onDownloadFinished()
    {
    	qInfo() << "complete download: " << Url.toString();
    
    	if (Reply->error() > 0)
    	{
    		qDebug() << "onDownloadError: " << Url.toString() << " | error: " << Reply->errorString();
    		AttempDownload();
    		return;
    	}
    
    	Content = Reply->readAll();
    	Reply->deleteLater();
    
    	emit DownloadFinished();
    }
    
    void TaskDownload::onDownloadProgress(qint64 cur, qint64 max)
    {
    	emit DownloadProgress(cur, max);
    }
  • Как сделать один к нулю/одному в Entity Framework?

    sentike
    @sentike Автор вопроса
    Зависимое свойство в ограничении ReferentialConstraint сопоставлено со столбцом, формируемым хранилищем. Столбец: "Id".
  • Как защитить приложение от внедрения кода?

    sentike
    @sentike Автор вопроса
    не могли бы привести примеры, и на сколько это оправданно? В плане внедрения в приложение и дальнейшая поддержка; какие могут быть подводные камни, например, если приложение должно быть кроссплатформенное(windows/linux/android/ios)?
  • Как защитить приложение от внедрения кода?

    sentike
    @sentike Автор вопроса
    Хорошо, так мы можем отловить подмену пользовательских данных, таких как уровень/деньги/позицию и так далее, НО, который проверяются на сервере и подмена таких данных бессмысленна. Так как "Кэш" хранится на сервере, и данные обратно сбрасываются на реальные. Но это не поможет поймать перехват функций, допустим стрельбы и так далее, который не проверяются на сервере. Так же можно, например, заблокировать вызов определенного RPC пакеты, который даст преимущество читеру
  • Как защитить приложение от внедрения кода?

    sentike
    @sentike Автор вопроса
    Вся логика приложения проверяется на сервере. Но в любом же случае есть возможность отследить вызовы методов на клиенте и их подменить свои путем стороннего модуля или патчем приложения.
  • Как защитить приложение от внедрения кода?

    sentike
    @sentike Автор вопроса
    Такой способ больше подходит для защиты ресурсов приложения(графика, настройки и т.д);
    А каким способ можно запретить или хотя бы отловить внедрение внешнего модуля(dll)/подмену вызова функций в приложении