пятница, 8 ноября 2019 г.

Key "Back" reaction

Вариант с подтверждающим месседжбоксом
Code:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
    If KeyCode = KeyCodes.KEYCODE_BACK Then
        If Msgbox2("Are you sure to exit?""""Yes""""No"Null) = DialogResponse.POSITIVE Then
            Return False
            ExitApplication '...or whatever other previous killing actions.        Else
            Return True
        End If
    Else
        Return False    ' Handle the other presses in the OS    End If
End Sub
Вариант с двойным нажатием в течении 3х секунд
Code:
Sub Globals
Dim closeCounter As Int                    ' For double click exit routineDim closeTimer As Long
end sub
Sub Activity_KeyPress (KeyCode As Int) As Boolean

    Select KeyCode
        Case KeyCodes.KEYCODE_BACK
                                                          
            closeCounter = closeCounter + 1                    ' Handle the user exit request  
            ' First time so start the counter  
            If closeCounter = 1 Then                  
                closeTimer = DateTime.Now
                ToastMessageShow("Press Back again to exit"False)
            End If
  
            ' Second time but not within 3 seconds, reset to "First time"  
            If closeCounter = 2 AND DateTime.Now > closeTimer + 3000 Then
                closeCounter = 1
                closeTimer = DateTime.Now
                ToastMessageShow("Press Back again to exit"False)
            End If
  
            ' Two tries within 3 seconds, we're done  
            If closeCounter = 2 Then
                closeCounter = 0
                Activity.Finish
            End If

            Return True
        Case Else
            Return False
    End Select
  End Sub

понедельник, 4 ноября 2019 г.

Залогинивание вручную

Принимаем запрос по /login?u=username&p=password
Затем загружаем юзера по логину и сравниваем запрошенный и установленный пароли с помощью хешера. Если все совпало, то логиним юзера и возвращаем все его параметры.

   public function login() {
        $data = $this->request->query;

        $this->loadModel('User');
        $user = $this->User->find('first', array('conditions' => array('login' => $data['u'])));
       
        $passwordHasher = new BlowfishPasswordHasher();
        $confirm = $passwordHasher->check($data['p'], $user['User']['password']);
        if ($confirm) { // пароль поравильный
            $this->Auth->login($user['User']);
            $data = $this->Session->read('Auth');
        } else {
            $data = array('Error' => 'Bad password');
        }

        $this->set(compact('data'));
       
    }

вторник, 29 октября 2019 г.

Проект УЗГ HCPL6

В разработке вот такая модификация УЗГ.
На основной (красной) плате (10х10см) собирается полномостовой УМ. На нее припаиваются дочерние (зеленые) платы (5х10см): процессорный модуль, DC часть с развязанными датчиками тока и напряжения, низковольтный блок питания (FlyBack, условно не показан)
Основная плата крепится к радиатору (условно не показан) через силовые ключи и дополнительные стоечки.
Расчетная мощность - чуть более киловатта.

понедельник, 28 октября 2019 г.

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

Зависимость  Execution.task_id == Task.id

        $this->loadModel('Task');

        $this->Task->hasMany['Execution']['conditions'] = array(
            'Execution.user_id' => $current_user_id
        );

        $task = $this->Task->findById($task_id);

Как видим, принудительной подгрузки подчиненной таблицы нет. Только установление ограничения в настройке связки мастер-таблицы.

воскресенье, 27 октября 2019 г.

Cookie для локального хранения данных

function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}

function getCookie(c_name) {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
}

Время жизни сессии в CakePhp 2


Установить большое время жизни сессии (например 3 дня):

В файле core.php 

Configure::write('Session', array( 
  'defaults' => 'php',
   'timeout' => 259200, 
   'ini' => array( 
          'session.gc_maxlifetime' => 259200 // 3 day )
 ));