воскресенье, 29 декабря 2019 г.

DOS snippets

Архивирование каталога с субкаталогами, включая дату и время в имя архива
7z a -r all_buh-%date%-%time:~0,2%.%time:~3,2%.zip
выдаст файл с именем all_buh-29.12.2019-11.33.zip

четверг, 21 ноября 2019 г.

UScommander

Давно планировал сделать управляющий софт для ультразвукового генератора. Была задумка по-быстрячку вернуться к забытому LabView. Но, к сожалению, NI давно перестал поддерживать ту старенькую версию, на которой я учился. А современные версии вьюхи во-первых весят непомерно много (гигабайты), и во-вторых поменяли идеологию работы по протоколу ModBus. Так что пришлось изобретать велосипед.

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

Запустить ютуб или страничку в стороннем браузере

Запустить в ютуб-апликухе

Dim Intent1 As Intent
Dim videoid As String
videoid = "klMN44nn44n"
Intent1.Initialize(Intent1.ACTION_VIEW, "vnd.youtube:"&videoid)

Intent1.PutExtra("VIDEO_ID",videoid)
StartActivity(Intent1)

Обработка ошибки загрузки страницы

Code:
Sub Globals
    Private MainWebView As WebView
    Private WVE As WebViewExtras
    Private DWVC As DefaultWebViewClient
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout")
   
    DWVC.Initialize("WebViewClient")
    WVE.Initialize(MainWebView)
    WVE.SetWebViewClient(DWVC)

    WVE.LoadUrl("<your link>")
End Sub 
 Sub WebViewClient_ReceivedError(ErrorCode As Int, Description As String, FailingUrl As String
)    
 WVE.LoadHtml(CustomWebviewError.GetErrorPageHtml(Description))/span>

 End Sub

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 )
 ));

пятница, 12 июля 2019 г.

printf() в SW4STM32

Стандартная библиотека stdio.h содержит процедуры и функции, помогающие организовать общение с юзером в консольном стиле. То есть, описывает стандартный ввод-вывод. Особенно полезна printf() как способ форматированного вывода.
Для доступа к эти возможностям нам всего-то нужно рассказать компилятору как нужно вывести в консоль один символ и как получить из консоли символ. Для этого уже есть "слабые" заглушки, которые мы перекроем своей реализацией.

суббота, 8 июня 2019 г.

О снабберах

Заставила жизнь более плотно разобраться с демпфирующими цепями в переключающих схемах. Покопался в литературе и вот что узнал об RCD диссипативном снаббере.

четверг, 25 апреля 2019 г.

ПП с помощью фотомаски FSR-8000


Случайно нашел в продаже последние остатки двухкомпонентной фотомаски FSR 8000. Правда, цвет был на выбор только красный ;). Ну да ладно, красный так красный.

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

Испытатель катушек

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

среда, 6 марта 2019 г.

Дедтайм - это вам не бабатайм ;)

Намедни обсуждали с НВ как раз особенность нашей схемы, в которой вроде бы дедтайм сделался не нужным. Проверил в натуре - так и есть. Исходя из того, что затворы одной вертикали подключены противофазно и скорость закрытия ключа примерно вдвое выше скорости открытия, иначе и быть не должно ;) Ну и я решил, что дедтайм - это рудимент и смело так рубанул его в параметрах до ноля.
Однако сегодня, подключив питание к мозгам, а щупы ослика к пьезу, увидел следующую картину маслом (здесь и далее: желтым - ток с трансформатора тока, розовым - ток с нагрузочного резистора 0.1 ома, голубым - напряжение на пьезе).

понедельник, 25 февраля 2019 г.

Исследование УЗ излучателей

Результаты анализа АЧХ излучателей.
Излучатели тестировались на воздухе. Генератор синуса задавал частоту, ток через излучатель снимался с резистора в 100 ом на землю.
Было проведено тестирование одиночного излучателя и одновременно шести, подключенных параллельно.

понедельник, 18 февраля 2019 г.

Генератор ультразвуковой управляемый. Процессорный модуль.

Процессорный модуль используется как генератор управляющих сигналов для усилителя мощности УМ, а также для взаимодействия с оператором либо управляющей системой (SCADA) в ультразвуковых мойках различной мощности.

воскресенье, 10 февраля 2019 г.

ПП с помощью фоторезиста

Фоторезист китайский с Али, марка не известна ;). Негативный листовой, индикаторный (меняет цвет после засветки). Лампа ЕВТ-01 26Вт ультрафиолет.
Я сверлю на ЧПУ, поэтому делаю это в два этапа.
Сначала делаю УП только на 4 координатных отверстия по углам, которые могут быть впоследствии рассверлены до крепежных отверстий. Отверстия и края заготовки обрабатываю мелкой (от 120) наждачкой, проверяя на ощупь отсутствие бугорков-заусенцев. Один из углов подпиливаю для правильной ориентации при второй засверловке. При первой (координатной) засверловке располагаю ключ слева внизу. Затем моем жидким моющим средством новой поролоновой мочалкой жесткой стороной до такого состояния, пока вода не будет задерживаться на всей поверхности заготовки при наклоне заготовки на 45-60 градусов. Хорошо ополаскиваем.