суббота, 28 ноября 2015 г.

Linux + Debian Установка SVN - Сервера.

Соб-но начнем:
$ sudo apt-get install subversion libapache2-svnvv

#Создаем репозитарий:
sudo mkdir /var/svn
sudo chown -R www-data:www-data /var/svn

#Редактируем DAV_SVN
$ sudo nano /etc/apache2/mods-available/dav_svn.conf
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
#SSLRequireSSL # this line must be added if you want SSL enabled
</Location>

среда, 14 октября 2015 г.

G0Chat.

Появилась возможность затестить работу чата, для этого следует скачать:
https://onedrive.live.com/redir?resid=458866D0CB1B0F7..
В поле соединение указать IP : 95.129.236.162 и порт 5433, зарегистрироваться и юазать.


Основное :
[+] Поддержка передачи файлов.
[+] Постинг картинок.
[+] Статусы.
[+] Звуки.
[+] Смайлы
[+] Поддержка истории уведомлений, (когда пользователь выходит с чата)

Скачать

Добавление Manifest В QT

Для добавления манифеста к exe-файлу требуется выполнить следующее:
Создать файл манифеста:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="False"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
 Запустить Command Promt Visual Studio с правами администратора.
 Собрать приложение (Release Build).
 Положить в папку с вашим приложением манифест.
 В Command Promt Перейти в эту папку: cd; * cd /D :X - где X Номер диска.
 Выполнить
 mt.exe -manifest manifest.xml -outputresource:clientApp.exe;1
 Если все пройдет успешно появится сообщение в окне консоли:
Microsoft (R) Manifest Tool version 5.2.3790.2076
Copyright (c) Microsoft Corporation 2005.
All rights reserved.

четверг, 3 сентября 2015 г.

Winsock WSAEWOULDBLOCK

WSAEWOULDBLOCK  – возникает в результате когда принимающая сторона не успевает обработать буфер данных. Решить проблему можно, отлавливая событие FD_WRITE; Наиболее опасная ситуация возникает на стороне сервера. Например, рассмотрим такой код на стороне сервера:
bool WriteData(SOCKET hSocket, char * cbBuff, int nSize)
{

       int  MaxByteSend = nSize;
       int  Offset = 0;
       int  nError = 0;

       do
       {
             nError = send(hSocket, cbBuff + Offset, MaxByteSend, 0);

             if(nError <= 0)
             {
                    nError = WSAGetLastError();

                    if(nError == WSAEWOULDBLOCK)
                    {
                           printf("WriteData WSAEWOULDBLOCK\r\n");
                           continue;
                    }
                    else return false;

             }

             if(nError > 0)
             {
                    Offset += nError;
                    MaxByteSend -= nError;
             }

       } while(nError > 0 && MaxByteSend != 0);

        return Offset == nSize ? true : false;
}

На 1-ый взгляд не каких проблем, если возникает событие WSAEWOULDBLOCK то мы просто пробуем еще раз отправить данные. Но в этом-то и заключается вся суть проблемы! Во 1-ых сторона клиента может в этот момент не принимать данные, а обрабатывать предыдущую порцию. Сервер же будет золочен на срок, пока клиент не примет буфер!  Как способ выхода из данной ситуации, можно ввести переменную nTryCount = 0; и если мы получаем WSAEWOULDBLOCK увеличиваем nTryCount++; когда количество таких, попыток подряд достигнет N(например 3), завершаем процедуру отправки с кодом неудачи!...Далее когда SOCKET будет готов читать данные, мы получим событие FD_WRITE. И дошлем остальную часть буфера!

Второе решение проблемы это использовать полностью асинхронные сокеты.

среда, 26 августа 2015 г.

TortoiseSVN + Icon + Windows10 Пропали иконки

Решение:
 Запуск Regedit с правами администратора.
1)
Перейти:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
Удалить все ключи где есть : TortoiseXXX.
2) Качаем Клиент TortoiseSVN
Переустанавливаем.
3) Перезагружаемся
4) Открываем Диспетчер Задач Windows.
Убиваем процесс "Проводник"
В Диспетчере задача Файл->Новая Задача->explorer.exe
???
Profit!

вторник, 25 августа 2015 г.

QWebView + JavaScript + Event.

Иногда при работе с QWebView, требуется встроить возможность обрабатывать сообщения(Event’ы) непосредственно от JavaScipt’ов. При этом в качестве отправителя сообщения могут выступать кнопки, либо другие элементы.
Так как же реагировать на события от JavaScript?


Следующий пример, покажет как обработать event в QWebView от кнопки.
Нам потребуется непосредственно сам класс обработчик:
#ifndef JAVASCIPT_H
#define JAVASCIPT_H
#include <QObject>
class CJavaScipt : public QObject
{
  Q_OBJECT
public:
  explicit CJavaScipt(QObject *parent = 0);
  ~CJavaScipt();
static CJavaScipt * GetInstance();
signals:
public slots:
/* Метод который будет получать управление, когда мы будем нажимать на кнопку в QWebView */
  void OnButtonFileSaveClick(QString szSrcStr);
};
#endif // JAVASCIPT_H


Реализация..
CJavaScipt * CJavaScipt::GetInstance()
{
  static CJavaScipt JavaScipt;
  return &JavaScipt;
}

void CJavaScipt::OnButtonFileSaveClick(QString szSrcStr)
{
   qDebug() << "Called! Event!" << szSrcStr.toStdString().c_str();
}


Теперь нам надо вызвать метод QWebView, чтобы зарегистрировать нашь обработчик:

Мысли вслух

Одни Java - программеры говорят : Да вы Сишники, работаете с низкоуровневыми функциями и думают что мы обижаемся. Да мы гордимся этим!

воскресенье, 5 июля 2015 г.

Virtualbox

Virtualbox   Ошибка при запуске виртуальной машины:
NtCreateFile(\Device\VBoxDrvStub) failed: 0xc000000034
STATUS_OBJECT_NAME_NOT_FOUND (0 retries)
Решение:
Перейти C:\Program Files\Oracle\VirtualBox\drivers\vboxdrv\VBoxDrv.inf правый клик по этому файлу - установить.

воскресенье, 21 июня 2015 г.

QToolButton + QMenu + QGridLayout



Иногда требуется создать меню которое включает в себя другие Widget'ы, приведу пример такого меню из программы psi :


рис 1. Меню которое  включает в себя Widget'ы выровненные по сетки. 

Как то я уже пытался получить ответ на официальном форуме QT, но ответа не дождался, пришлось додумывать самому как это сделать.

Вот соб-но линк по сабжу
  




Как видно из рис.1 widget'ы которые там присутствуют,  выровнены с помощью QGridLayout. Теперь код, который создает аналогичное меню.


 m_lpStatusIconMenu = new QMenu();

 QList<QString> qIconPath;
 qIconPath << ":/Icons/Icons/Images&icon/icons/angry.png"
              << ":/Icons/Icons/Images&icon/icons/bat.png";

 //Создаем Layout сетку
 QGridLayout *Layout = new QGridLayout(ui->toolButton_2);
 //Создаем кнопку
 QToolButton * lpButton = new QToolButton(this);

 //Устанавливаем у кнопки стиль(border(рамка) = 0 px) 
 lpButton->setStyleSheet("border: 0px solid #8f8f91; border-radius: 20px");
 //Устанавливаем иконку
 lpButton->setIcon(QIcon(qIconPath.at(0)));
 //Добавляем в "сетку" где 0, 0 это позиция строка и столбец.
 Layout->addWidget(lpButton, 0, 0);
 //Создаем еще одну кнопку
 lpButton = new QToolButton(this);
 //Устанавливаем иконку
 lpButton->setIcon(QIcon(qIconPath.at(1)));
 //Устанавливаем иконку
 Layout->addWidget(lpButton, 0, 1);
 //Добавляем в "сетку" где 0, 1 это позиция строка и столбец.

 //Теперь нашу сетку добавляем непосредственно в меню, которое будет показываться.
 m_lpStatusIconMenu->setLayout(Layout);
 //И это меню устанавливаем для кнопки QToolButton.
 ui->toolButton_2->setMenu(m_lpStatusIconMenu);

Результат работы :

Как можно наблюдать 1 иконка не имеет рамки 
т.к StyleSheet задан явно.
Вот таким вот способом можно комбинировать, 
добавляя в меню различные widget'ы.






вторник, 16 июня 2015 г.

Мини взгляд на работу файловых систем.

Мини взгляд на работу файловых систем.

Файловая система является неотъемлемой частью ос. Основные задачи файловой системы это структурирование каталогов, файлов. Файловая система хранит описатели объектов, где и сколько места занимает файл на физическом диске. Более подробное определение файловой системе дает www.wikipedia.ru :
Файловая система определяет формат содержимого и способ физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имен файлов и каталогов, максимальный возможный размер файла и раздела, набор атрибутов файла. В ОС Windows файловая система называется NTFS. Различные ос, использует разные файловые системы.
            Файловые системы обычно можно представить в виде дерева :



Рис. 2.32. Логическая организация файловой системы
а - одноуровневая; б - иерархическая (дерево); в - иерархическая (сеть)


Виртуальная файловая система.

VFS (Virtual File System) - виртуальная файловая система, которую я хочу рассмотреть, отличается тем, что работает в оперативной памяти. Представьте что у вас есть какой сервер который хранит каталоги и файлы в них, непосредственно в оперативной памяти. Попробуем написать такую fs.. 



#define MAX_NAME 255      //Максимальная длина имени каталога/файла.
#define INVALIDE_VFS 0       //Признак ошибки


суббота, 23 мая 2015 г.

Email Security & Безопасная почта.

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

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

Более подробно ознакомится можно непосредственно на protonmail.ch

суббота, 25 апреля 2015 г.

COMODO BackUp

COMODO BackUp - Представляет собой программу для создания резервных копий данных.
Программа имеет достаточно простой интерфейс + полезную фичу, возможность создания/восстановления  через ftp.




Плюсы :
Есть возможность создания профилей восстановления.
Есть возможность работы через ftp.
Есть возможность восстановления через ftp.
Есть возможность установки пароля на backup.
Есть поддержка iso и zip формата(при backup'e)/
Есть возможность сохранения настроек в скрипт.

Дополнение:
Если вы хотите бэкапить файлы в онлайн хранилище то для этого придется раскошелится.

А Ты делаешь бэкапы?.

Более подробно

пятница, 17 апреля 2015 г.

BPG как альтернатива Jpeg

BPG довольно интересный формат  который лучше сжимает картинку.
На офф сайте есть сравнение сжатий.
http://bellard.org/bpg/
Сохраню себе, это очень хорошо что мне попалось нечто такое что я ищу уже долгое время.

воскресенье, 29 марта 2015 г.

OpenVPN или DNS_PROBE_FINISHED_NXDOMAIN или нет интернета.

Недавно поднял на своей локальной машине OpenVPN сервер., поднял для того что иногда использую бесплатный wi-fi,, вообще всем кто пользуется бесплатными wi-fi)\ рекомендую использовать VPN., да и просто при работе. .-_^
Покажу лишь основные проблемы почему клиент может получать ошибку в браузере DNS_PROBE_FINISHED_NXDOMAIN.

На стороне сервера:

Разрешите использование  вашего интернета., зайдите  в свойства основного соединения(интернет от провайдера)



Далее меню пуск 



Запустить с правами администратора.

3) Запустить службу от имени администратора.



Выбрать тип запуска - вручную, далее нажать кнопку запустить, ок.

Откройте конфиг и добавьте следующую строку.
push redirect-gateway def1

На стороне клиента, нужно запустить службу и сам OpenVPN с админискими правами., если вы все установили правильно, то ошибки не будет, если нет, что спишем на проблемы с витаминами на том и порешаем. Все удачи!







среда, 4 марта 2015 г.

ms sql exclusive access could not be obtained because the database is in use

Ошибка при восстановление базы данных/Обновление
Решение:
Выполнить скрипт
Перед восстановлением, для нужной базы.(которую хотите Обновить)
alter database database_name
set offline with rollback immediate
После успешного обновления выполните скрипт

alter database database_name set online
*Примечание 
database_name имя нужной базы.
Полезным так-же могут быть Хранимые процедуры.
sp_who2; Kill;
при выполнении первой можно посмотреть кто лочит базу и убить сессию.

воскресенье, 8 февраля 2015 г.

QTableWidget списки больше 3k



Суть проблемы заключается в следующем:

 При добавление данных в QTableWidget (например строк больше 3k), время обработки может затянуться до 20 сек! При этом 20 сек это на машине Windows 7 x64 8GB RAM.

Первое решение проблемы:
Создать модель, заполнить её, после этого присоединить к QTableWidget;

Второе решение проблемы:
Выставить resizeRowToContents (0).

Третье решение проблемы:

Установить self.model.setRowCount(например 8000).


Материалы по теме :
Обсуждение


суббота, 7 февраля 2015 г.

Незаконченная реализация VNC

Моя реализация VNC
Когда  то брался за написание собственной реализации (1.5 года назад) VNC(Клиент-Сервера). Используется чистый WINAPI, но так и не закончил. Обязательно закончу!

четверг, 5 февраля 2015 г.

Проброс портов через роутер

Суть заключается в следующем :  Допустим у вас есть роутер, от роутера идет сетевой шнур в компютер/etc, вы хотите запустить какую программу сервер, но беда, клиенты из интерента не могу соединиться с сервером(программой сервером) которой развернут на локальном компьютере.
Примечание * у вас должен быть выделенный IP;
Для этого в настройках роутера, есть возможность проброса порта. что для этого требуется? Перейдите по линку в браузере по адресу http://192.168.1.1/ - обычно это интерфейс через который настраивается роутер. У меня роутер Zyxel я покажу на нем, что требуется сделать.

Объясню только то что нуждается в пояснениях.
Если не знаете для какого сервиса нужно перенаправление, то указываете другой. На вашем роутере может не быть такой опции. Под сервисами подразумевается (ftp, pop3, etc); Далее протоколы связи, если не знаете что это ставьте и TCP и UPD. Ip - адрес сервера, это ip - адрес вашей машины, или машины сервера, и порты соответственно.
Пример хотите развернуть сервер ftp с доступом из интернета; ip - адрес вашей машины 192.168.1.77, по умолчанию программа использует 21 порт;
Настройки будут такие:
Сервис - Другой
Порты : 21
IP - адрес : 192.168.1.77
Доступ из интернета : Разрешать всем
Нажимаете кнопку добавить.
Все вы сделали проброс порта!

Как получить свой ip? для ос Windows?
Пример Windows 7
Пуск -> Выполнить->Найти программы и файлы->Пишем cmd ->Enter;
Откроется окно консоли.
Пишите такую команду там; ipconfig

Красным показывает ваш ip; при выполнении ipconfig /all будут выданы все доступные интерфейсы.

* Заключение убедитесь что роутер всегда выдает вашей машине статический адрес, эта настройка есть в роутере, прежде чем будете делать проброс портов. 
*Это необходимо сделать если DHCP включен., если не хотите вникаться, отключите DHCP. 

      Например роутер выдает моему домашнему серверу всегда один и тот-же ip 192.168.1.77.
Это нужно для того чтобы, при обновлении параметров сети, роутер не выдал какой левый ip адрес, если роутер выдаст другой ip, а проброс делался с указанием конкретного ip, то доступ из интернета не будет доступен к серверу!



Зайдите в роутер
Найдите что либо похожее:


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





пятница, 30 января 2015 г.

QT Sqlite Error Create Table Out Of Memory Unable to execute statement.

Проблема/ошибка возникает если экземпляр базы данных передается в (конструктор) так или иначе метода QSqlQuery раньше чем база данных была открыта;

Пример Ошибки :
m_qSqlBase = QSqlDatabase::addDatabase("QSQLITE");
m_qSqlBase.setDatabaseName("real.db");

//Проблемное место.
QSqlQuery qSqlQuery(m_qSqlBase);

if(m_qSqlBase.open())
{
    if(!qSqlQuery.exec("CREATE TABLE IF NOT EXISTS ...");
    
//Появится ошибка при вызове метода exec экземпляра QSqlQuery
}

Решение :
m_qSqlBase = QSqlDatabase::addDatabase("QSQLITE");
m_qSqlBase.setDatabaseName("real.db");
if(m_qSqlBase.open())
{
   QSqlQuery qSqlQuery(m_qSqlBase);
   if(!qSqlQuery.exec("CREATE TABLE IF NOT EXISTS ...");
   // Все окей можно продолжать работать.
}
else 
//Невозможно открыть бд


четверг, 29 января 2015 г.

QT Creator не обрабатывается правый клик

Проблема:
Баг, когда происходит правый клик., но он не отрабатывается как надо в QT Creator'e, например щелчок по форме/etc., вызове меню.
Решение:
Запустите QT Creator с правами администратора.

четверг, 15 января 2015 г.

Error: 1807 Could not obtain exclusive lock on database ‘model’. Retry the operation later

Ошибка MS SQLServer:


Error: 1807 Could not obtain exclusive lock on database ‘model’. Retry the operation later

Error:














Возможные случаи возникновения данной ошибки:
   1) Используется еще одна сессия на другом компьютере(Открыт экземпляр сессии на другом компьютере
компьютере SQL SERVER Management Studio);
   2) Проверьте доступное место на жестком диске;
   3) Возможно некоторые службы(MS Server) запущенны не с правами SYSTEM;
  
И так если у вас действительно проблема 1) и нет доступа к компу и вы не хотите искать где открыта сессия:

Решение:
  Откройте Management Studio и выполните следующий скрипт:
SELECT request_session_id  FROM sys.dm_tran_locks
WHERE resource_database_id = DB_ID('Model')

При выполнение запроса вы увидите ID сессии которая лочит бд; 

Теперь выполните команду для убийства сессии;

Kill  тут_id_сессии(например 53)

P.S Перезапустите Management Studio;