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

Some tips for settings your keyboard Lenovo ThinkPad 8845CR UltraNav

 Some tips for settings your keyboard Lenovo ThinkPad 8845CR UltraNav



Tip Zero! NumLock is disabled with SHIFT! Shift + ScrLk (NumLock)


1. If your system has NumLock enabled at system boot, disable:

Windows Registry Editor Version 5.00

[HKEY_USERS\.DEFAULT\Control Panel\Keyboard]

"InitialKeyboardIndicators"="0"

(do not forget to disable it in BIOS too)


2. Since there is no Win key on the keyboard, and I actively use it, I assigned CapsLock key to WinKey

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]

"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,5c,e0,3a,00,00,00,00,00


3. To use the middle button as a wheel, I used a third party software - https://github.com/ykon/w10wheel.net


4. Adding an "acceleration" for the trackpoint https://forum.thinkpads.com/viewtopic.php?t=120571

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Mouse]

"SmoothMouseXCurve"=hex:\

00,00,00,00,00,00,00,00,\

15,6e,00,00,00,00,00,00,\

00,40,02,00,00,00,00,00,\

39,dc,05,00,00,00,00,00,\

00,00,10,00,00,00,00,00

"SmoothMouseYCurve"=hex:\

00,00,00,00,00,00,00,00,\

b8,5e,01,00,00,00,00,00,\

cd,4c,15,00,00,00,00,00,\

ff,4c,88,00,00,00,00,00,\

00,00,38,02,00,00,00,00

среда, 8 июля 2020 г.

Build OpenVPN with XOR-patch (Scramble)

Task: It is necessary to compile the current version of OpenVPN for 32 bits with the XOR patch.

Solution: 
1. Download and install cygwin https://cygwin.com/install.html
During installation, you need to install the following packages -
autoconf, automake, diffutils, git, libtool, m4, make, mingw64-i686-binutils, mingw64-i686-gcc-core, mingw64-i686-headers, mingw64-i686-pthreads, mingw64-i686-runtime, mingw64-x86_64-binutils, mingw64-x86_64-gcc-core, mingw64-x86_64-headers, mingw64-x86_64-pthreads, mingw64-x86_64-runtime, patch, patchutils, perl, unzip, wget

2. After run cygwin -
cp `which true` /usr/bin/man2html                                           

3. Download OpenVPN Builds https://github.com/OpenVPN/openvpn-build
wget https://github.com/OpenVPN/openvpn-build/archive/master.zip
unpack
unzip master.zip
Go to the directory
cd openvpn-build-master/generic

4. Build (for the first time will get WITHOUT a patch)
IMAGEROOT=`pwd`/image-win32 CHOST=i686-w64-mingw32 CBUILD=i686-pc-cygwin ./build

5. After the build of the version is completed, without a patch, we go to the source directory - there will be downloaded archives with the OpenVPN source codes and the necessary libraries.

6. We need to unpack the source OpenVPN
tar xvfz openvpn-2.4.9.tar.gz
rm openvpn-2.4.9.tar.gz
cd openvpn-2.4.9

7. Download and apply xor patch - https://github.com/clayface/openvpn_xorpatch
wget https://raw.githubusercontent.com/clayface/openvpn_xorpatch/master/openvpn_xor.patch
git apply openvpn_xor.patch
tar -czvf openvpn-2.4.9.tar.gz openvpn-2.4.9

And go back to the generic folder
cd ..

8. Starting the project build again -
IMAGEROOT=`pwd`/image-win32 CHOST=i686-w64-mingw32 CBUILD=i686-pc-cygwin ./build

9. After finishing, you can goto the path  C:\cygwin\home\%YOURUSERNAME%\openvpn-build-master\generic\image-win32\openvpn\bin and test your own OpenVPN build

вторник, 5 мая 2020 г.

ToolTip для отключенного ComboBox

Вводная: Необходимо показывать ToolTip только при отключенном ComboBox.

Решение:
1. В свойства ComboBox необходимо добавить
ToolTipService.ShowOnDisabled="True"

2. Самой подсказке надо добавить привязку к какому-нибудь свойству (в нашем примере IsFlag) и  воспользоваться встроенным конвертором BooleanToVisibilityConverter
<ToolTip Visibility="{Binding IsFlag, Converter={StaticResource BooleanToVisibilityConverter }}" Content="Tooltip for test"/>


<ComboBox ToolTipService.ShowOnDisabled="True" 
          IsEnabled="{Binding IsFlag,  Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                      Converter={StaticResource InverseBooleanConverter}}"
          Margin="25"  >
          <ComboBox.ToolTip>
                <ToolTip Visibility="{Binding IsFlag, Converter={StaticResource BooleanToVisibilityConverter }}"
                         Content="Tooltip for test"/>
          </ComboBox.ToolTip>
 
          <ComboBoxItem Content="Item1" IsSelected="True" />
          <ComboBoxItem Content="Item2" />
          <ComboBoxItem Content="Item3" />
 
</ComboBox>

вторник, 16 апреля 2019 г.

Доступ к IP KVM Avocent DSR 1021

Вводная: Имеется IP KVM Avocent DSR 1021. С настроенным IP-адресом и модулями. Необходимо зайти на него со свежо установленной Windows 10

Решение:
1. Скачиваем последнюю версию JRE https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html и устанавливаем 

2. В браузере прописываем, что открывать в режиме совместимости. 

3. Редактируем файл java.security по адресу C:\Program Files\Java\jre1.8.****\lib\security\ 

4. Убираем MD5 в строке 
jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024 

5. Убираем DH keySize < 768 
jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 768 

6. Открываем "Панель управления"-"Программы"-"Java" 
Security tab -> Edit Site List -> Добавляем IP адрес KVM "http://X.X.X.X" (+https)

7. Пробуем подключиться

вторник, 5 марта 2019 г.

Про перевод имен переменных

Вот есть разное программирование. И везде надо переменные называть. И правилом хорошего тона называть их на английском (нуу за несколькими исключениями, к примеру в виде 1С).

И вот тут можно использовать небольшой финт ушами.

Для примера возьмём слово "склад" и предположим, что мы не знаем как его нам забить. Казалось бы не проблема - идём в Google.Translate и переводим

И тут нас поджидает засада - ни одно из предложенных нам гуглом слов не будет верным. А вот для того, чтобы узнать верное слово, мы ищем наш "Склад" на википедии. После чего переключаемся на английскую страницу кнопкой English. И узнаём, что правильно наш склад называть Warehouse

понедельник, 4 марта 2019 г.

Перехват пароля к FTP серверу с помощью роутера Mikrotik

Вводная: Есть программа с "захардкорженным" в коде паролем с доступом к FTP. Необходимо узнать пароль.

Решение: Так как в качестве роутера у нас Mikrotik RB951Ui-2HnD, то будем использовать его. Заходим в winbox. В меню выбираем Tools - Packet Sniffer. Если стоит галочка "Only Headers" снимаем её.

На вкладке Filter выставляем Port - 21.


Далее нажимаем "Start". Пробуем получить обновления через программу. Если пакеты пошли хорошо, есть нет, то вариант чуть сложнее - убираем порт и смотрим все пакеты от данного компьютера - вероятно (если мы уверены, что используется FTP) используется не стандартный порт.
Узнать порт также можно простым запросом у техподдержки вашей программы - объяснив, что "системный администратор не открывает доступ по всем портам, а только по списку".
Далее нажимаем "Packets" и смотрим все пакеты подряд (Нас интересует вкладка "Packet") - в каком-нибудь из них, будет строка "PASS" и далее пароль который нам нужен.


Как вариант можем сделать сохранение в файл - на вкладке General. И сделать поиск по подстроке "PASS"



среда, 27 февраля 2019 г.

Строки в компоненте DataGrid разного размера (Compact Framework)

Вводная: Есть проект для ТСД Windows Mobile 6.5 на .Net Compact Framework 3. И в нём есть DataGrid с некоторыми данным. Но проблема в том, что в данной версии фреймворка нельзя задать высоту для конкретной строки или авторасширение по контенту.

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



Решение: Напрямую мы не можем обращаться к высоте каждой строки. Но такой параметр ЕСТЬ, правда он с приватным модификатором доступа, поэтому придётся немного схитрить

Добавим после заполнения данными (dataGrid1.DataSource = dataTable;) 
такой код
//Здесь получаем все строки 
var allRows = (ArrayList)dataGrid1
   .GetType()
                        .GetField("m_rlrow", BindingFlags.NonPublic
                                           | BindingFlags.Static
                                           | BindingFlags.Instance)
                        .GetValue(dataGrid1);
 
//Здесь формируем массив строк для обработки с их индексами
foreach (var pair in dataTable.Rows.Cast<DataRow>()
                                   .Select((r, i) => new {Row = r, Index = i})
                                   //Указываем параметр по которому увеличиваем размер строки
                                   .Where(x => x.Row["Type"].ToString().Contains("\n")))
{
 int index = pair.Index;
        //Эдесь мы можем получить доступ к строке если надо
        //DataRow row = pair.Row;
        SetGridRowHeight(allRows[index], 60);
 
}

Далее сама функция изменения размера
public static void SetGridRowHeight(object row, int height)
{
    row.GetType().GetField("m_cy", BindingFlags.NonPublic
                                 | BindingFlags.Static
                                 | BindingFlags.Instance)
                 .SetValue(row, height);
}
 

И результат:




вторник, 19 февраля 2019 г.

Сброс настроек и пароля в IP камере Dahua 1220SP

Вводная: Дана камера Dahua IPC-HFW1220SP. В веб-интерфейс не входит, telnet-ssh не доступны. IP по DHCP не получает (порт при этом поднимается, линк загорается). ИК-подсветка реагирует на смену света.

Решение: Решили для начала сбросить настройки, но вот тут то и ждала засада - официальная документация https://dahuawiki.com/images/1/1e/ResetIPCamera.pdf про эту модель молчит. Продавец говорит - отправляйте нам на замену. Но это долго.

Начали смотреть, в отличии от младшей модели 1020SP, на этой нет кнопки Reset (да, на младшей всё просто - нажали на кнопочку при включении - выждали 10 секунд и сбросилось).

Не буду вас утомлять - для сброса данной карты нужно снять крышку, снять ИК подсветку (но не отключать провод! Это важно). И замкнуть чем-нибудь тонким две площадки указанные на фото, на выключенной камере - затем подать питание, выждать 15 секунд и убрать замыкание. По сути это кнопка сброса, но не распаянная.


После сброса всё заработало штатно.

Ключевые слова:  Dahua, HFW1220SP, factory settings, reset, default 

PS: Эксперимент делался на свой страх и риск - было бы очень весело если бы это было питание для чего-либо :) И замкнули + и -. Так что будьте осторожнее делая это на других ревизиях или моделях - проверьте вначале мультиметром, что там не будет ничего.

среда, 5 сентября 2018 г.

Доступ в интернет с эмулятора Windows Mobile 6 на Windows 10

Вводная: Есть ТСД, штука дорогая, защищённая, с мощными батареями и главное в наличии. "Покупать другие не предлагать". Разработка для них знакома и не представляет сложности. Все поставилось, но софт требует доступа к интернет-серверу (REST-api, все дела). А его нет! Проблема в том, что доступ к сети реализован через VirtualPC 2007, которая в Windows 10 не работают от слова вообще.

Но выход есть:
1. Ставим локальный прокси. Я рекомендую Fiddler https://www.telerik.com/fiddler

2. Запускать от админа, потом в меню Tools -> Options -> Connections 

3. Обязательно указываем "Allow remote computers to connect"


4. Запускаем Microsoft Device Emulator Manager 9 (входит в состав Microsoft Device Emulator 3.0 https://www.microsoft.com/ru-ru/download/details.aspx?id=5352 )

5. Выбираем наш эмулятор и в контекстном меню выбираем Cradle

6. Должен открыться "Центр устройств Windows Mobile" https://www.microsoft.com/ru-ru/download/details.aspx?id=3182

7. В нём выбираем "Подключение без настройки устройства"


8. На эмуляторе Settings -> Connections -> Connections -> Edit my proxy server

9. Указываем Ip адрес компьютера на котором запущен Fiddler и дважды нажимаем OK



10. Пробуем выходить в интернет

PS: Минус у этого решения есть и достаточно серъёзный - это всё надо делать каждый раз после перезапуска компьютера. Но автоматизируется легко. AutoIt или на том-же C#.

PS2: Кстати при наличии лицензионного ключа на 2008 Professional пришлось ставить пиратскую. Мой серийник, честно купленный в 2010 году, все найденные дистрибутивы просто отказались принимать :(

пятница, 3 августа 2018 г.

Битрикс - добавление в почтовый шаблон номера телефона

Вводная: Необходимо добавить номер телефона и адрес клиента в письмо от интернет-магазина битрикса (о новом заказе).

Решение:
1) Добавляем в /bitrix/php_interface/init.php код

<?
 AddEventHandler("sale", "OnOrderNewSendEmail", "ModifySaleMails");
 
 function ModifySaleMails($orderID, &$eventName, &$arFields)
 {
    $arOrder = CSaleOrder::GetByID($orderID);  
 
    $order_props = CSaleOrderPropsValue::GetOrderProps($orderID);  
 
    $phone = ""; 
    $address = "";
 
    while ($arProps = $order_props->Fetch()){    
      if ($arProps["CODE"] == "PHONE"){
          $phone = htmlspecialchars($arProps["VALUE"]);}
 
      if ($arProps["CODE"] == "ADDRESS"){
         $address = htmlspecialchars($arProps["VALUE"]);}
    }
 
  if (!empty($arOrder["USER_DESCRIPTION"])){
      $arFields["DESCRIPTION"] = $arOrder["USER_DESCRIPTION"];}
 
    //-- добавляем новые поля в массив результатов
    $arFields["PHONE"] =  $phone;
    $arFields["ADDRESS"] = $address;
 }
?>

2) Добавляем в почтовый шаблон ИМЯСАЙТА/bitrix/admin/message_admin.php
(я добавлял в шаблон "[SALE_NEW_ORDER] Новый заказ")

Доставка по адресу: #ADDRESS#<br />
Ваш контактный телефон: #PHONE#<br />

Должно получится как-то так



3) Результат