Задать вопрос
Делаю всякое :)
Контакты

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (38)
  • Удалённая работа в зарубежной компании — какие есть подводные камни?

    gdt
    @gdt
    Программист
    Работаю удалённо, получаю в валюте, всё ок. Если компания грамотная - то даже в текущей ситуации (пока что) все проблемы можно решить. Проблемы с получением валюты есть только у тех банков, которые попали под санкции, в других банках всё работает. Конечно, на работу людей из РФ сейчас стали принимать гораздо меньше из-за рисков (понятно каких я надеюсь), но в целом всё ещё предлагают - с начала марта 2-3 предложения получил, из которых одно достойное (не хуже, чем у меня сейчас).
    Как говорится, стучите - и вам откроют, дорогу осилит идущий и тд и тп. Не слушайте никого, во всем мире полно как идиотов, так и вполне адекватных людей, которые будут к вам относится нормально вне зависимости от национальность.

    Как происходит перевод оклада.
    Чаще всего оформиться в штат в зарубежную компанию сложно, поэтому открывается ИП, и заключается контракт на услуги консультанта. В банке создаете валютную сделку, туда прикрепляете контракт (как основание для получения денег). Затем раз в учетный период (месяц) вы выставляете счет своей компании, в котором прописываете сумму, оговорённую в контракте, этот счёт отправляете в компанию и в банк. Компания отправляет деньги, они идут обычно несколько дней, когда доходят - вы получаете уведомление от банка, что на ваш транзитный счёт упала валюта. Тут начинается валютный контроль - специально обученные люди смотрят ваш контракт, инвойс (счёт) и перевод, если всё совпадает - получаете свою валюту (с новыми правилами 80% сразу превращаются в рубли). Не совпадает - пишут чего не хватает, компания делает доп документы, отправляете в банк, всё получается.

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

    P. S. По упрощенке ИП платит 6% налога + 1% на сумму свыше 300000р (есть ещё другие обязательные взносы, но они идут в вычет, если всё вовремя платить, так что всё равно выходит 6%). В РФ в ФОТ штатских сотрудников отчисления занимают больше 30%.
    Ответ написан
    2 комментария
  • Почему при сложении 0.001 типа float или doable 1000 раз через несколько нулей после запятой появляются ещё числа из ниоткуда и как это решить?

    gdt
    @gdt
    Программист
    И ни одного пояснения :)
    Если вам нужно, чтобы работало так, как вы ожидаете - воспользуйтесь замечательным советом Бобби Шифер .
    Если объяснить на пальцах - есть два способа хранить числа с точкой - fixed point (фиксированная точка) и floating point (плавающая точка). У себя в примере вы используете тип данных с плавающей точкой (неспроста он называется float, а double - это float с двойной точностью, только и всего). Грубо говоря, числа с плавающей точкой представляются так: M*10^E, т. е. в памяти два значения M и E просто следуют друг за другом. К сожалению, компьютеры используют двоичную систему счисления, и далеко не всегда то, что можно просто записать в десятичной системе счисления - настолько же просто записать в двоичной, и наоборот. С учётом того, что объём памяти, выделяемый под хранение мантиссы, ограничен - она округляется до ближайшего двоичного представления, что после перевода назад, в десятичную систему счисления, и даёт такой, на первый взгляд, контринтуитивный результат.
    Для разнообразия можете попробовать сложить очень маленькое и очень большое число.
    Ответ написан
    3 комментария
  • Как менять цвет при наведении на контрол?

    gdt
    @gdt
    Программист
    Вот так работает:
    <ControlTemplate x:Key="TestButtonTemplate" TargetType="Button">
        <Border Background="{TemplateBinding Background}"
                BorderThickness="0"
                CornerRadius="5"
                Height="{TemplateBinding Height}"
                Width="{TemplateBinding Width}">
            <ContentControl Foreground="{TemplateBinding Foreground}"
                            Content="{TemplateBinding Content}"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Center"
                            FontSize="{TemplateBinding FontSize}"
                            FontFamily="{TemplateBinding FontFamily}"/>
        </Border>
    
        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Red" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>


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

    gdt
    @gdt
    Программист
    Длина того фрагмента пути из сообщения 193 символа, а в Windows существует ограничение длины пути в 260 сиволов, так что если длина пути до папки "Тест сцен" превышает 66-67 символов (в зависимости оттого, учитывается ли null в конце) - вам придётся переместить репозиторий на уровень выше.
    Вот похожие проблемы:
    * https://github.com/microsoft/MixedReality-WorldLoc... - решилось перемещением проекта в корень диска
    * https://github.com/microsoft/MapsSDK-Unity/issues/51 - тут рекомендуют включить поддержку длинных путей в git командой git config --system core.longpaths true

    Вот тут на Хабре есть один из вариантов решения.
    Ответ написан
    1 комментарий
  • Как убрать async, если не нужон, но требует?

    gdt
    @gdt
    Программист
    Во-первых, используйте .GetAwaiter().GetResult() если вам нужно получить результат синхронно.
    Во-вторых, ваш дедлок это хрестоматийный пример, примерно как детский мат. Дело в том, что вы не указали .ConfigureAwait(false) в своём асинхронном вызове, это значит, что CLR будет ждать освобождения вызывающего потока, чтобы продолжить выполнять код после await. Однако вызывающий поток уже бесконечно занят ожиданием завершения вашего асинхронного метода там, где вы получаете Result - вот вам и типичный deadlock.
    Таким образом, вам нужно либо добавить .ConfigureAwait(false) к вашему асинхронному вызову (это приведет к необходимости выполнять дальнейшие изменения в UI через диспетчер, Dispatcher.Invoke в WPF), либо запустить свой код в контексте синхронизации, отличном от того, который используется в UI - самый простой способ это вообще не использовать контекст - выполнить свой код внутри Task.Run:
    Task.Run(async() => html = await browser.GetSourceAsync());

    Или
    private async Task<string> GetHTMLFromWebBrowser()
    {
        return await browser.GetSourceAsync();
    }
    
    ....
    
    Task.Run(async() => html = await GetHTMLFromWebBrowser());

    .ConfigureAwait() в таком случае не нужен, т. к. без контекста синхронизации он ничего не делает.
    Ответ написан
    Комментировать