IT Блог

Документации и переводы

Статьи на технические темы

hplip plugin.run file does not match its checksum. File may have been corrupted or altered

Для установки драйвера для принтера HP в Linux достаточно ввести в терминале команды (принтер должен быть включён):

sudo apt-get install hplip-gui
sudo hp-setup -i

Ответив на несколько вопросов, вы установите драйвер. Но при установке может быть ошибка автоматического скачивания плагина, например, в моём случае на Linux Mint 20.1:

/home/vivazzi/.hplip/hplip-3.20.11-plugin.run file does not match its checksum. File may have been corrupted or altered

У меня принтер hp laserJet P1006, и в моём случае, как видим, не удаётся скачать файл hplip-3.20.11-plugin.run. В вашем случае может быть плагин с другим названием. Чтобы решить...


Отладка в mql. Улучшить дебаг с помощью mql_debug

Зачастую при написании кода mql в среде разработки MetaEditor не хватает отладчика (дебаггера), который мог бы не только следить за переменными, но и вычислять выражения. К сожалению, в MetaEditor такого нет. Например, в коде:

int OnInit(){
    double a = MathPow(2, 1) + MathAbs(-10)/2;

    for (int i=0, len=OrdersTotal(); i < len; i++)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType() == OP_BUY)
           OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 70);
}

поставив точку останова, например, на 2-ой, мы не можем посмотреть в дебаггере отдельно, чему равно MathPow(2, 1) или MathAbs(-10)/2. Только если мы пошагово перейдём на следующую строчку, мы...


Послать get post запрос в mql: mql_requests

В mql4 и mql5 для отправки простого get или post запроса можно использовать стандартную функцию WebRequest() или функции библиотеки wininet.dll.

Каждый способ имеет свои некоторые неудобства:

  • При использовании WebRequest приходится дополнительно в настройках терминала (Меню\Сервис\Настройки во вкладке Советники) разрешать использование WebRequest и вписывать url, с которым WebRequest будет работать.
  • Если использовать wininet.dll, то требуется написать приличное количество строк кода даже для обычного get запроса.

Для простой отправки get и post запросов я написал библиотеку mql_requests, использующую функции библиотеки wininet.dllmql_requests находится на гитхабе:

Установка mql_requests

Скачайте библиотеку и скопируйте папку mql_requests/Include/requests в <TERMINAL...


Unit тестирование mql: mql_unit_test

В mql4 и mql5 есть Тестер стратегий, но нет стандартной библиотеки для тестирования простых своих написанных функций. Такое тестирование ещё имеет название Модульное тестирование или unit-тестирование.

Для тестирования своих функций я написал библиотеку mql_unit_test, который доступен на гитхабе:

Установка mql_unit_test

Скачайте библиотеку и скопируйте папку mql_unit_test/Include/unit_test в <TERMINAL DIR>/MQL(4/5)/Include.

Использование

С помощью mql_unit_test вы можете простым способом тестировать ваши функции, а результаты тестов получать в текстовом файле, например:

#include <unit_test/unit_test.mqh>


double min(double v_1, double v_2) {
    if (v_1 > v_2) return v_2;

    return v_1;
}


class MyTest: public TestCase {

    void test_my_function_min() {
        assert_equal(min...

Классы mql взаимодействие

Приведу простой пример взаимодействия классов в mql4, их атрибутов, конструкторов и копи-конструкторов copy constructor. Особенно пример будет полезен тем, кто никогда не сталкивался с C-подобными языками программирования (C++, C#, java).

Сразу сообщу, что в этой статье не будут расписаны все моменты работы с классами. Только простой пример для того, чтобы быстро начать использовать классы для более гибкого написания кода. Полный текст программы в конце статьи.
Также я не придерживался принятого стиля написания кода mql, так как я привык оформлять код как в python и считаю принятое оформление кода менее читабельным. Да простят меня mql-разработчики!

Допустим, в некоторые переменные нужно сохранить...


Передать параметры при создании экземпляра дочернего класса mql

Если в базовом классе есть конструктор с параметрами, то при создании дочернего класса нужно добавить конструктор с передачей параметров в базовый класс.

Для наглядности сначала покажу пример без использования параметров в конструкторе:

class Base {
   public:
      void Base(){
         Print("Base: constructor is called");
      };
};

class Child : public Base {
   public:
      void Child(){
         Print("Child: constructor is called");
      };
};

В терминале во вкладке "Терминал \ Эксперты" мы видим результат выполнения кода:

2021.01.22 13:07:04.756    TestBot EURCHF,H1: Child: constructor is called
2021.01.22 13:07:04.756    TestBot EURCHF,H1: Base: constructor is called

Видно, что сначала выполнился код базового конструктора...


Динамический тег в компоненте vue 3

Для наглядности покажу на конкретном примере.

В SEO есть такое понятие, как циклические ссылки. Например, в меню обычно всегда размещают ссылки на разделы сайта вне зависимости, на какой странице мы находимся. Но если мы находимся на некоторой странице и url текущей страниц совпадает с url кого-то пункта меню, то такая ссылка становится циклической и для SEO это плохо (по крайней мере раньше так точно было).

Таким образом, при совпадении url лучше пункт меню не ссылкой делать тегом a, а использовать другой тег, например, span.

Во Vue есть специальная директива :is, значение которой и будет тегом при рендере:

<component :is="tag...

Uncaught SyntaxError: Must be called at the top of a `setup` function vue 3

Если в кратце: проблема в том, что ваша функция должна быть вызвана вверху функции setup(), а не быть вложенной в другую функцию (вызов которой происходит из setup()). 

Проще понять наглядно, почему может возникнуть ошибка Uncaught SyntaxError: Must be called at the top of a `setup` function, на примере моего случая, когда для тестов я решил обернуть axios.get() в setTimeout:

<script>
    import { ref } from 'vue'
    import ui_state from "../state";
    import axios from "axios";

    export default {
        name: 'Component',

        setup() {
            const { locale_url } = ui_state

            const data = ref('')

            setTimeout(() => {
                axios.get(locale_url('/apps/'))
                    .then(response => {
                        data.value = response.data;
                    })
            }, 1000);

            return {
                data...

Где поменять тариф на продукты atlassian confluence jira

Когда только знакомишься с продуктами Atlassian, а точнее хочешь изменить настройки этих продуктов, может возникнуть ощущение, что настроек очень много и где найти нужную настройку.

Например, я сначала долго искал, где поменять тарифный план Confluence со стандартный на бесплатный. Оказалось меняется это на отдельном сайте  во вкладке Продукты. Затем нужно выбрать в левом боковом меню нужный сайт и на открывшейся странице в том же боковом меню выбрать Управление подписками:

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц