• Как реализовать downcast к шаблону?

    Wyrd
    @Wyrd
    Архитектор
    Кажется вы ищете паттерн Visitor https://ru.m.wikipedia.org/wiki/Посетитель_(шаблон...
    Ответ написан
    Комментировать
  • Как пробросить один и тот же порт на разные домены в Микротике?

    Wyrd
    @Wyrd
    Архитектор
    С вероятностью 99% можно сделать методом установки nginx в openwrt внутри MetaROUTER на Микротике
    - Mikrotik позволяет запускать на себе "виртуальные" роутеры (фича MetaROUTER)
    - MetaROUTER поддерживает openwrt
    - на openwrt можно установить nginx
    - обработка HOST хедера (ака "домен") - это одна из основных фичей nginx

    Вот тут делают нечто похожее, но сложнее (там вообще сайт в nginx поднимают внутри MetaROUTER) - https://habr.com/ru/post/248009/
    Ответ написан
  • Как переключиться на другую ветку?

    Wyrd
    @Wyrd
    Архитектор
    Не мучайтесь (если, конечно, вы не фанат консоли), поставьте бесплатный https://www.sourcetreeapp.com/ - он умеет почти все что умеет консоль (если Source Tree не хватило, то вы что-то сильно сделали не так, например, "случайно" сделали hard reset)
    Ответ написан
    3 комментария
  • Как соединить 2 пк находящихся за нат?

    Wyrd
    @Wyrd
    Архитектор
    В качестве наводки - почитайте вот это
    - https://ru.wikipedia.org/wiki/STUN
    - https://en.wikipedia.org/wiki/UDP_hole_punching
    - https://habr.com/ru/post/481034/
    - https://habr.com/ru/post/509730/

    Я не проверял и вовсе не уверен, что оно работает, но суть вот в чем:
    - компьютер за NAT в целом может обмениваться UDP пакетами с внешним сервисом - при этом NAT выдает компьютеру "временный внешний порт" на IP адресе NAT
    - если А и Б подключаются к внешнему сервису (называется STUN) одновременно, последний может отдать А данные о том, каков "временный внешний порт" Б (и его адрес), а Б - отдать информацию об А
    - после этого А и Б могут обмениваться пакетами через свои временные порты напрямую - посылая пакеты друг дружке на временные адреса (нужен постоянный обмен данными чтоб не оборвалось соединение - чтоб NAT не забрал временный порт обратно). С этого момента STUN не нужен и более не участвует в обмене трафиком
    - в интернете есть вагон и маленькая тележка бесплатных STUN серверов
    - безопасность не гарантируется (в теории (после установления соединения) можно поднять IPSEC туннель)
    - так работает большинство VoIP (скайп, телега, итп) в условиях, когда оба абонента находятся за NAT (по возможности, конечно - некоторые NAT провайдеры даже такое соединение блокируют)
    Ответ написан
    Комментировать
  • С какой книги на русском начать учить swift?

    Wyrd
    @Wyrd
    Архитектор
    Надо учить английский, в IT это важнее умения программировать. Без шуток - хотя бы intermediate обязан быть - иначе доступ во многие области закрыт наглухо. У меня есть несколько знакомых, которые много работали на русскоязычный сегмент поначалу, которых увольняли из-за плохого английского, и которые в итоге английский "осилили" и теперь согласны, что на него не надо было забивать в угоду умению писать код.
    Ответ написан
    Комментировать
  • Как понять какая хэш функция применена?

    Wyrd
    @Wyrd
    Архитектор
    Это по-байтовая сумма (0x30 + 0x30 + 0x32 + 0x4F + ... + 0x09 + 0x05) - https://www.wolframalpha.com/input/?i=sum%280x30%2...
    Ответ написан
    Комментировать
  • Есть ли библиотека на C# позволяющая десериализовать строку table.Snap[0].HolidayEnable=false?

    Wyrd
    @Wyrd
    Архитектор
    То что вы хотите, в целом возможно при условии что вы готовы подключить Roslyn (компилятор C#) в вашу программу - он может скомпилировать и выполнить произвольное выражение на лету (при этом, вы можете предать на вход произвольные данные из вашей программы (тот же Table) в качестве "глобальных переменных" для исполняемого выражения). Вот пример: https://stackoverflow.com/questions/46524379/creat...

    С другой стороны, такие штуки обычно не применяют в продакшен коде - если вы напишите, что вам надо сделать "на уровне бизнеса", возможно кто-то сможет посоветовать более адекватное решение
    Ответ написан
    Комментировать
  • Как этот прикол с selenium пофиксить?

    Wyrd
    @Wyrd
    Архитектор
    Вам нужно использовать хром драйвер правильной версией, они почти что гвоздями прибиты к версии хрома. Вот конкретный список: https://stackoverflow.com/questions/41133391/which...
    Ответ написан
    Комментировать
  • Как перестать комментировать всё подряд?

    Wyrd
    @Wyrd
    Архитектор
    Мне что-то подсказывает, что проблема у вас не техническая, скорее похоже на некое навязчивое желание «объяснить все» (вы сами об этом пишете). Попробуйте найти психотерапевта. Только не путайте с психиатром - психиатр лечит болезни (таблетками), а психотерапевт помогает разобраться в причинах своих желаний/поступков, начать по другому относится к происходящему в жизни и т.п. - к ним ходят вполне здоровые люди, которые хотят что-то в себе поменять. Я не шучу - у меня жена психотерапевт.
    Ответ написан
    Комментировать
  • Из-за чего могут быть задержки у telegram бота?

    Wyrd
    @Wyrd
    Архитектор
    Рискну предположить что вы запускаете вашего бота на IIS, если это так то проблема вероятнее всего в настройках IIS App Pool Recycling - по умолчанию IIS перезапускает приложение раз в день + (при)останавливает его если в течении 20 минут не был обработан ни один запрос. Запуск после этого как раз занимает несколько секунд.

    Вот тут картинка как это отключить, там есть нюансы поэтому лучше почитать комментарии - https://stackoverflow.com/questions/51348433/iis-1...

    Ещё вы пишете что время запуска зависит от времени простоя.. надеюсь вам показалось, потому что представить как такое возможно сложновато :) Хотя - если у вас приложение читает много данных с диска при старте - возможно виноват дисковый кеш (чем дольше простой тем меньше вероятность найти данные в кеше и тем больший объём надо считать с диска при старте).
    Ответ написан
    Комментировать
  • Как правильно реализовать цепочку прокси client-HttpProxy-Socks5Proxy?

    Wyrd
    @Wyrd
    Архитектор
    Похоже вы не передаёте Body запросов, кроме того надо внимательно смотреть на правильность передачи Verb и Headers. У меня нет под рукой компьютера, но ощущение такое что правильно у вас работает только Verb=Get. В любом случае проксировать запросы вручную дело неблагодарное.

    Попробуйте вместо HTTP => SOCKS поднять SOCKS => SOCKS (надо убрать авторизацию и все). Хром будете подключать к вашему локальному socks который не требует авторизации.

    И реализация даже готовая есть: https://github.com/OutisNemo/SocksRelayServer (я не проверял)
    Ответ написан
  • Как включить английскую раскладку клавиатуры на экране блокировки Windows Server 2012?

    Wyrd
    @Wyrd
    Архитектор
    Если через RDP можете зайти - пробуйте внутри rdp установить английскую раскладку по умолчанию, а потом применить его для welcome screen

    https://social.technet.microsoft.com/Forums/en-US/...
    Ответ написан
    Комментировать
  • Долгая загрузка Win XP

    Wyrd
    @Wyrd
    Архитектор
    у меня такое было, когда я «оптимизировал» систему отключением «лишних» служб.
    попробуйте вернуть настройки запуска служб по умолчанию
    Ответ написан
    Комментировать
  • Boost.python и указатели

    Wyrd
    @Wyrd
    Архитектор
    Предположение: цепляется не та либа-переходник (имеется в виду что-то вроде boost_python-vc100-mt-gd-1_43.dll). Возможно, у вас ее имя без версии (можно так буст настроить)? возможно вы обновили буст а либу не пересобрали?

    Предположение 2 (сомнительное): С++ часть скомпилирована не под тот питон, которым запускают?
    Ответ написан
    2 комментария
  • Boost.python и указатели

    Wyrd
    @Wyrd
    Архитектор
    Честно говоря, никогда не пользовался этой штуковиной, но ради интереса решил попробовать.
    И… все заработало (с учетом мелких поправок кода для «компилябельности»).

    hello.cpp:
    #include <boost/python.hpp>
     
    using namespace boost;
    using namespace boost::python;
     
    struct Foo
    {
       virtual ~Foo() {}
       virtual void Print() = 0;
    };
     
    struct FooWrap : Foo, wrapper<Foo>
    {
        void Print()
        {
            this->get_override("Print")();
        }
    };
     
    void ProcessFoo(Foo *obj) { obj->Print(); }
     
    BOOST_PYTHON_MODULE(hello_ext)
    {
        class_<FooWrap, boost::noncopyable>("Foo")
            .def("Print", pure_virtual(&Foo::Print));
        def("ProcessFoo"&ProcessFoo);
    }


    hello.py:
    import hello_ext
     
    class NewFoo(hello_ext.Foo):
       def Print(self):
          print 'Print call'
     
    hello_ext.ProcessFoo( NewFoo() )


    Запуск:
    E:Temppython>"d:/Coding/Python 2.7/python.exe" hello.py
    Print call


    Тех. данные:
    boost 1.43
    MSVS 2010 SP1
    python 2.7
    компилировалось с помощью bjam
    Ответ написан
    2 комментария
  • RTTI vs Шаблонная магия?

    Wyrd
    @Wyrd
    Архитектор
    Вот вам еще вариант:
    pastebin.com/RZAY789w

    умеет:
    typedef std::unique_ptr< IObject > ptr;
     
    ptr p = CreateObject< Object3 >();
    assert( FastObjectCast< Object3 >( p.get() ) );
    assert( FastObjectCast< Object1 >( p.get() ) ); // Object3 inherits Object1
    assert( !FastObjectCast< INamedObject >( p.get() ) ); // p is unnamed Object3
     
    ptr q = CreateObject< Object3 >( "some name" );
    assert( FastObjectCast< Object3 >( q.get() ) );
    assert( FastObjectCast< Object1 >( q.get() ) ); // Object3 inherits Object1
    assert( FastObjectCast< INamedObject >( q.get() ) ); // p is named Object3
    INamedObject наследуется также реализует IObject
    FastObjectCast семантически эквивалентен dynamic_cast, но раз в 10 быстрее (dynamic_cast тоже можно использовать).

    p.s.
    Так нельзя делать:
    template<class T> T * As() { return (T*)this; }
    Нужно использовать static_cast, т.к. после каста указатель может поменять значение на пару байт (это происходит из-за множественного наследования, если оно есть в иерархии).
    Ответ написан
    Комментировать
  • Смешение каналов активной акустики?

    Wyrd
    @Wyrd
    Архитектор
    В кабеле, который вы втыкаете в комп есть три провода — земля, левый канал и правый канал. Вот у вас где-то замыкает провода левого и правого каналов. Ищите методом исключения где. Вероятнее всего проблема либо в джеке, либо в проводе.
    Ответ написан
    5 комментариев
  • Возможна ли инициализация const-строки не в конструкторе?

    Wyrd
    @Wyrd
    Архитектор
    >> Таким образом, происходит двойное присвоение, сначала str = new, затем memcpy(str,...).
    никакого двойного присваивания не происходит

    str = new unsigned char[size];

    только выделяет память и запоминает, где эта память выделена, сама память не инициализируется.

    копирование данных происходит внутри memcpy.

    справедливости ради, если у вас typeof( str ) == typeof( usigned const char * ), то вы не сможете вызвать memcpy без приведения типа, т.к. у вас указатель на неизменяемые данные.

    вам надо:

    class A
    {
    private:
    unsigned const char *str;
    A(): str( nullptr ) // можно и не инициализировать в принципе, если уверены,
    // что не будете читать его до инициализации
    {
    }
    init(… )
    {
    unsigned char *ptr = new unsigned char[size];
    memcpy( ptr,… );
    str = ptr; // сами данные вы тут не меняете, только указатель на данные
    }
    usigned const char *get() const{ return str; }
    };
    Ответ написан
    Комментировать
  • Возможна ли инициализация const-строки не в конструкторе?

    Wyrd
    @Wyrd
    Архитектор
    unsigned char* const — это константный указатель на изменяемый массив char

    вам нужен

    const unsigned char * — неконстантный указатель на неизменяемый массив char

    тогда вы сможете изменять значение указателя внутри класса (если ваше поле приватное), но никто не сможет изменять сами данные (без const_cast).

    пруф: habrahabr.ru/post/100104/
    Ответ написан
    Комментировать
  • Windows 7 вместо Windows XP?

    Wyrd
    @Wyrd
    Архитектор
    А какой у вас вообще компьютер? Семерка она хорошая и даже быстрая, но! это только на хорошем железе, в семерке появилось много фич требующих некоторых накладных расходов, на новых компьютерах такие расходы незаметны, а польза от того же superfetch весьма и весьма заметна, но вот на старых…
    Ответ написан