понедельник, 21 ноября 2016 г.

Снятие спинок задних сидений на ВАЗ 2110, когда петля попала внутрь спинки.

Чтобы на автомобиле ВАЗ 2110 откинуть заднюю спинку, нужно потянуть тканевую петлю у подголовника:
















(фотка нагло стырена из интернета).


Если петля попадает между спинкой сиденья и замком, задача по снятию спинки сильно осложняется, т.к. вытащить её в зажатом состоянии спинки непросто.
Есть как минимум два пути решения этой проблемы:
  • из салона проволочным крючком поддеть петлю, и вытащить её наверх (мне не удалось это сделать);
  • из багажника рассмотреть механизм замка через щель между спинкой и элементом кузова автомобиля, и отверткой надавить (направление усилия - к крыше автомобиля) на рычаг, к которому крепится петля.
Механизм представляет из себя рычаг-коромысло с осью вращения посередине. К одной стороне рычага крепится петля (видна на фото сверху), другая сторона тяги цепляется за петлю на кузове. Из багажника можно рассмотреть нижнюю часть петли. На это место и нужно прилагать усилие, и это место находится рядом с внешним штырём подголовника.

При знании всего этого открыть замок довольно просто. На первую спинку у меня ушло 2 часа, на вторую - 2 минуты. Но у меня стояли чехлы, которые мешают доступу к замку.

среда, 9 ноября 2016 г.

Анализ с помощью tcpdump причин потерь пакетов между клиентом и сервером.

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

От пользователей пришла жалоба на периодические потери связи между клиентом и сервером: в среднем раз в полчаса в клиентском приложении выскакивало сообщение "Потеря связи", вынуждающая периодически вручную переподключаться к серверу.

вторник, 17 мая 2016 г.

Работа с таймером в консоли

Если нужно периодически выполнять одну и ту же функцию, можно воспользоваться следующим способом:


#define STRICT 1 // строгая проверка типов, пример сработает и без этого
#include <windows.h>
#include <iostream.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
{
    cout << "Time: " << dwTime << '\n';
    cout.flush();
}
  
int main(int argc, char *argv[], char *envp[])
{
    int Counter=0;
    MSG Msg;
    UINT TimerId = SetTimer(NULL, 0, 500, &TimerProc);
    cout << "TimerId: " << TimerId << '\n';
    if (!TimerId)
        return 16;
    while (GetMessage(&Msg, NULL, 0, 0))
    {
        ++Counter;
        if (Msg.message == WM_TIMER)
            cout<<"Counter: " << Counter << "; timer message\n";
        else
            cout<<"Counter: "<<Counter<<"; message: "<<Msg.message<<'\n';
        DispatchMessage(&Msg);
    }
    KillTimer(NULL, TimerId);
    return 0;
}