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

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

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

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

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

    CityCat4
    @CityCat4 Куратор тега VPN
    Жил да был черный кот за углом...
    Очередное супер-пупер VPN-приложение, которое неизвестно кто админит? Чувак, есть немалая вероятность того, что этот VPN админится спецслужбами той или иной страны - может быть не напрямую, а "на кривую", но инфа все равно сливается вся.
    Единственный надежный VPN - свой
    Ответ написан
    Комментировать
  • Лаконичный код, для нуба на Python =/ _main_, _name_?

    Vindicar
    @Vindicar
    RTFM!
    Это несложно, на самом деле.
    Когда ты делаешь import module_name, Питон ищет либо файл module_name.py, либо пакет module_name. Про пакеты пока говорить не будем. Если такой файл нашелся, и он ещё не был импортирован, то он выполняется в контексте импортирующего скрипта. При этом получается объект-модуль, и ссылка на него помещается в переменную module_name в импортирующем скрипте.
    Пример:
    # a.py
    def somefunc():
        print('Hi!')
    
    print('a is executed')
    
    # b.py
    import a  # >>> a is executed
    a.somefunc()  # >>> Hi!

    Имя, под которым импортируется модуль, помещается в переменную __name__. Изменим код так:
    # a.py
    def somefunc():
        print('Hi!')
    
    print(__name__, 'is executed')
    
    # b.py
    import a  # >>> a is executed
    a.somefunc()  # >>> Hi!
    print('And I am', __name__)  # >>> And I am __main__

    Таким образом, мы видим, что для исполняемого скрипта переменная __name__ содержит строку "__main__", а импортируемые скрипты увидят в ней только своё имя. Причем неважно, если ты переименуешь модуль:
    # a.py
    def somefunc():
        print('Hi!')
    
    print(__name__, 'is executed')
    
    # b.py
    # импортируем модуль и переименовываем его
    import a as d  # >>> a is executed
    d.somefunc()  # >>> Hi!
    print('And I am', __name__)  # >>> And I am __main__

    Именно эта особенность и позволяет писать код, который выполнится только если питон-скрипт выполняется непосредственно.
    # a.py
    # Этот код выполнится в любом случае
    def somefunc():
        print('Hi!')
    
    if __name__ == '__main__':
        # этот код выполнится только если a выполняется непосредственно
        print(__name__, 'is executed') # Всегда выведет __main__ is executed
    else:
        # а этот код выполнится только если a импортируется в другой модуль
        print('Imported as', __name__)
    # b.py
    import a  # >>> Imported as a
    a.somefunc()  # >>> Hi!
    print('And I am', __name__)  # >>> And I am __main__
    Ответ написан
    1 комментарий
  • Как сделать форк и поддерживать его в активном состоянии?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Мне нравится актуализировать свои форки через rebase. Так история выглядит прозрачнее.

    ЗЫ
    В русском языке нет приставки «саб». Надо говорить подпроекты и подмодули. Но они тут не нужны. Обновление прекрасно работает через слияние либо перебазирование.
    Ответ написан
    4 комментария
  • Как исправить эти ошибки?

    Добавить линкеру библиотеку ws2_32.lib
    Ответ написан
    Комментировать
  • Как копировать список в си (C)?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Пройтись по списку, добавляя элементы в конец нового списка.
    Только не надо использовать вашу функцию add - она каждый раз проходится по всему списку. Заведите отдельную переменную, которая будет указывать на конец создаваемого списка и добавляйте новый элемент к ней.
    Ответ написан
    Комментировать
  • Как организовать сеть (теория)?

    @Akina
    Сетевой и системный админ, SQL-программист.
    • 0. Всегда (на все три вопроса). 800 устройств в одном домене коллизий, это [censored] и полный ступор.
    • 1. Да. Но нет. Все в одной подсети - бред и никакого смысла.
    • 2. Немаршрутизируемые в Интернет адреса (bogon networks). Я бы делал подсети в 172.16. Но это дело вкуса.
    • 3. Ни разницы, ни усложнения нет и в помине. Стандартности тут тоже никакой.
    • 4. Каждую подсеть в свой VLAN. Ибо нефиг.
    • 5. Серверы в отдельных подсетях. Причём не одной. Что делать серверу видеонаблюдения в подсети бухгалтерии?
    • 6. Стройте схему на основании потоков трафика, а не по некоему мистическому наитию.
    • 7. Не у телефонии, а у некоторых коммутаторов есть специальная работа с VoiceVLAN. да, только экономия портов. Если не работал - то и не связывайся. Потом поэкспериментируешь.
    • 8. По требованиям безопасности сеть видеонаблюдения вообще должна быть по возможности физически отделена от пользовательской. Отдельные коммутаторы и кабельные линии. да и трафика они генерят - могут забивать каналы, оно надо? То же и с линиями охранно-пожарной сигнализации - но тут строго, никаких "по возможности".
    • 9. Сервер печати. И да - он и принтеры в отдельном VLAN.

    Ставим L3 коммутатор, который будет рулить потоком, его же добавляем в качестве шлюза.

    Ставь сразу нормальный маршрутизатор.
    Потому что коммутатор, хоть и L3, тебе ничего не даст во вменяемой форме - ни статистики, ни управления, ни наблюдения.
    Ответ написан
    13 комментариев
  • Как решить проблему Segmention Fault?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Segmentation fault - это ошибка работы с памятью. Или выход за границы массива, или что-то не так с указателями.

    Я подозреваю, что в файле у вас не 50 строк (мне лень считать). Вот вы и вылезаете за границу массива.

    Ну или там какие-то лишние переводы строк, пробелы имеются. поэтому fin.eof() не выполняется после считывания последней строки. Потом вы пытаетесь что-то еще прочитать, но получаете назад пустую строку. Это бы не было проблемой, но вы потом пытаетесь это все запихать в 51-ый элемент массива.

    Советую вместо define N и статического массива использовать std::vector. В цикле считывания файла делайте push_back нового объекта в вектор (а еще лучше, emplace_back для экономии лишнего копирования).

    При выводе берите size() у вашего вектора.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    А зачем это делать? Чем вас 8 хедеров не устраивают? Если уж так хочется сэкономить строчки в коде пользователей библиотеки, то можно воспользоваться рекурсивностью препроцессора и сделать хедер с 8 инклудами. Копипастить код точно не надо.
    Ответ написан
    1 комментарий
  • Выгорание. Как не сойти с ума?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Странно. 24 года, в большом городе...
    - запшись в секцию. Не ради мировых рекордов, конечно, а просто ради коллектива
    - найди девушку.
    - ходи по местным тусовкам :)

    Дом-работа-дом на самом деле быстро жрет мозги. Даже я, старый пузатый дядька (ты мне в сыновья годишься :) ) - и то беситься начинаю...
    Ответ написан
    2 комментария
  • Возможен ли треугольник по стороне, углу и пропорциональным сторонам?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Треугольник можно составить из любых трех отрезков, пока выпонляется неравенство труегольника a+b > c, a+c > b, b+c > a. достаточно проверять только одно из них - максимальное число должно быть меньше суммы остальных. Но если не очевидно, какое из них максимальное, то можно проверять все три.

    Итак, дано только A и k, так?

    Чтобы как-то угол связать со сторонами надо воспользоваться теоремой косинусов:

    c^2 = a^2+b^2-2*a*b*cosA.
    подставив суда b=ck, получим
    с^2 = a^2+k^2c^2-2*k*a*c*cosA

    Это квадратное уравнение, связывающее C и A. Можно решить его относительно a (c - параметр) и вы получите а, выраженное через с.

    Ну и в конце надо проверить, что a+b > c, a+c > b, b+c > a, подставив туда найденные формулы для b и a через c. В этих неравенствах будут известные cosA, sinA, k и неизвестная с. Поскольку тругольник по углу и соотношению сторон можно масшабировать, то неравнество должно выполнятся для всех c. Но на самом деле в этих неравенствах все c можно будет тупо сократить. Какие-то из них можно сразу же выкинуть, если рассмотреть 2 случая k>1 и k<=1. Ну а как их дальше решать - думайте сами.
    Ответ написан
    3 комментария
  • Как перевести удары в минуту (bpm) в миллисекунды?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    При чём тут система счисления?
    Разные единицы измерения - минуты и секунды, но ничто не мешает переводить из одних единиц в другие.
    1 удар в минут = 1 удар в 60 секунд = 1 удар в 60000 миллисекунд.
    Ответ написан
    Комментировать
  • Почему не получается создать голый репозиторий на сервере для совместной работы с Git с использованием протокола SSH?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    обязательно ли в названии голого репозитория прописывать в конце .git?

    Это не название репозитория, а название папки. Оно может быть любым.

    Далее я пользовался документацией 4.2 Git на сервере — Установка Git на сервер

    Главой не ошибся? Если у тебя уже есть сервер GitLab, то и читай про него: 4.8 Git на сервере — GitLab

    Мне непонятна часть user@git.example.com:/srv/Git

    user — имя, под которым ты авторизован через ssh на внешнем компьютере
    git.example.com — адрес этого внешнего компьютера
    /srv/Git — путь к папке с репозиторием внутри внешнего компьютера

    Но это всё тебе не нужно если уже есть сервер. А GitLab это именно сервер.
    Не выдумывай ничего и делай по документации.

    там первоначально нужно создать пустой проект

    Это уже создаёт пустой голый репозиторий. Ничего руками копировать не надо. Да у тебя и прав нет на такой доступ.

    нажал на синюю кнопку Clone и мне высветились два варианта ссылки

    Если работать через https-протокол, то создавать ключи не придётся. Всё станет намного проще.

    Дальше ты либо клонируешь его себе на комп через
    git clone git@gitlab.com:potemkin277/test-project.git

    Либо связываешь свой уже существующий репозиторий с ним
    git remote add origin git@gitlab.com:potemkin277/test-project.git

    Затем отправляешь свою ветку туда и связываешь локальную и внешнюю ветки -u
    git push -u origin ветка
    Ответ написан
    2 комментария
  • Как преодолевают порог новичка в разработке и как не остаться "вечным новичком"?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Стандартный шаг с джуна в самостоятельнгого разработчика - примерно год. Первые 3-4 месяца Вы только начинаете понимать специфику проекта, в котором работаете, и осваивать используемые технологии.
    По мере роста опыта (причем часто без взгляда на какую то веху назад самому заметить этот рост сложно) Вам будут давать задачи посложнее, в том числе и на полностью самостоятельную проработку. И не ленитесь в свободное время повышать свою квалификацию, изучать что-то новое.
    Через год работы можно поговорить с руководителем о карьерном росте, росте зарплаты и т.п. Если руководитель адеквтный, он сам этот разговор может начать.
    Если скажут, что опыта все еще мало, то можно обновить резюме и искать работу на рынке.

    Отдельно отмечу, что сейчас ожидайте очень тяжелую ситуацию на рынке, закрытие многих проектов развития, уход отрасли в поддержку существующих решений. Но при этом должен вырасти внутренний рынок (импортозамещение). То есть идет перестройка рынка.
    Ответ написан
    2 комментария
  • Задача пустых полок?

    @Akina
    Сетевой и системный админ, SQL-программист.
    no_name_0,
    Это продуктовый магазин
    чеки:
    с временем покупки
    с товарами с количеством
    с номером магазина

    Не поверишь...

    Достаточно просто чётко фиксировать количество товара, выставленное на полки либо снятое с них. Тогда количество товара на полках на основании этих сведений и сведений из кассовых чеков можно ПОСЧИТАТЬ! Ну плюс-минус на разбитое, утащенное в соседнюю секцию и брошенное куда попало, оставленное на кассе по причине, скажем, нехватки денег, украденное и т.п. Всего-то и делов, что вздрючить мерчендайзеров и наладить нормально учёт.

    А ты тут с вероятностями дурью маешься.
    Ответ написан
    Комментировать
  • Чем Microsoft Exchange лучше бесплатных аналогов?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    В организации так дох.. денег? Лицензия на эксч + лицензия на сервер + лицензии на ящики... Или думаешь, что "война все спишет" и скоро разрешать как раньше "весь microsoft", "весь autodesk" etc?

    Сейчас - эксч крайне неудачный выбор.
    Достоинства? Полная интеграция с MS Office и AD, календарь+контакты+задачи
    Нелдостатки? Крайне хрупкий формат базы почты, требующий ежедневного бэкапа, тупейший imap, работать можно только по mapi, а он платный, кроме MS Outlook нет другого клиента (не считая веб-морды)
    Ответ написан
    2 комментария
  • Как быстро будет работать Windows и программы на сменном носителе?

    @rPman
    ssd + sata переходник на usb3
    это будет на порядок быстрее чем флешка, плюс у windows есть ряд ограничений по запуску с usb флешки, например нельзя разместить своп файл на него (на sata контроллер это может не распространяться но нужно смотреть, сможет ли bios нормально с него грузиться)
    Ответ написан
    Комментировать
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    "Кадр не находится в модуле". Подскажите с чем это может быть связано
    HANDLE h = CreateThread(
        NULL,
        0,
        factorial(gn),
        NULL,
        NULL,
        NULL
    );

    Третий параметр CreateThread -- указатель на функцию, которая будет запущена в создаваемом потоке. А у тебя записано скорее всего что-то другое. Если ты хотел запустить функцию factorial в потоке, она должна 1) иметь определённый прототип (вот такой), и 2) в функцию CreateThread надо передать её адрес, а не результат её вызова (например, так: CreateThread(NULL, 0, factorial, NULL, NULL, NULL)). 3) если ты сделаешь эти два изменения, тебе прийдётся также переделать передачу параметра в функцию factorial и получение результата её работы.
    Ответ написан
  • Можно ли реализовать графику на стандратных и системных библиотеках?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да, конечно. Начиная от wingdi и заканчивая directx - Это все стандартные виндовые библиотеки.
    Ответ написан
    3 комментария