Задать вопрос
  • Стоит ли бежать со стартапа?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Для начала всегда имеет смысл попробовать построить диалог с работодателем. Рисуете понятную схему того, за что вы отвечаете и того, какие бизнес-процессы сломаются/остановятся при вашем уходе, возможные убытки компании (по возможности), а так же среднерыночный уровень ЗП на объём вашей работы и уровень знаний. А ещё лучше, если сначала пройдёте несколько собеседований и у вас уже на руках будет предложение от другой компании. Или даже несколько предложений. Пишите заявление на увольнение и идёте к генеральному/собственникам (или ко всем сразу) и дальше два варианта: либо вам поднимают оплату вашего труда, либо подписывают заявление и сами разгребают дальнейший бардак. Решение экономических проблем компании - обязанность руководства компании и финансового отдела. И вот если не захотят поднимать - то да, стоит уходить, ибо они так и дальше будут кормить завтраками.
    Ответ написан
    Комментировать
  • Стоит ли бежать со стартапа?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Не надо ничего гадать и спрашивать, резюме на hh и вперёд по десяткам вакансиям, только после этого вы поймёте свою стоимость на рынке. Затем, сообщаете своему работодателю о конкретных офферах от других потенциальных работодателей, и т.к. вы "болеете" за текущий проект и команду, то готовы остаться на прежнем месте за "аналогичную/-X%" зарплату.
    Ответ написан
    Комментировать
  • Стоит ли бежать со стартапа?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В карьерных решениях более продуктивно уходить не от чего-то, а к чему-то. Можете найти работу с условиями лучше - уходите. Не можете - не уходите.
    Ответ написан
    Комментировать
  • Как создать тип данных, представляющий смещение?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    (лево ИЛИ право) ИЛИ (верх ИЛИ низ)

    // Левое ИЛИ правое значение.
    type OffsetHorizontal =
      | { left: number; right?: never; }
      | { right: number; left?: never; }
    
    // Верхнее ИЛИ нижнее значение.
    type OffsetVertical =
      | { top: number; bottom?: never; }
      | { bottom: number; top?: never; }
    
    // Горизонтальные значения, с запретом использования с вертикальными.
    type OffsetHorizontalOnly = OffsetHorizontal & {
      top?: never;
      bottom?: never;
    }
    
    // Вертикальные значения, с запретом использования с горизонтальными.
    type OffsetVerticalOnly = OffsetVertical & {
      left?: never;
      right?: never;
    }
    
    // OffsetHorizontalOnly ИЛИ OffsetVerticalOnly.
    type Offset = OffsetHorizontalOnly | OffsetVerticalOnly;
      
    // Верно:
    // { left: 100 }
    // { right: 100 }
    // { top: 100 }
    // { bottom: 100 }
    
    // Неверно:
    // { left: 100, right: 100 }
    // { top: 100, bottom: 100 }
    // { left: 100, top: 100 }
    // { right: 100, top: 100 }
    // { left: 100, bottom: 100 }
    // { right: 100, bottom: 100 }

    Если понадобиться вариант с И/ИЛИ между осями, то можно так реализовать:
    // Левое ИЛИ правое значение.
    type OffsetHorizontal =
      | { left: number; right?: never; }
      | { right: number; left?: never; }
    
    // Верхнее ИЛИ нижнее значение.
    type OffsetVertical =
      | { top: number; bottom?: never; }
      | { bottom: number; top?: never; }
      
    // OffsetHorizontal И/ИЛИ OffsetHorizontal.  
    type Offset =  
      | OffsetHorizontal  
      | OffsetVertical  
      | (OffsetHorizontal & OffsetVertical);
      
    // Верно:
    // { left: 100 }
    // { right: 100 }
    // { top: 100 }
    // { bottom: 100 }
    // { left: 100, top: 100 }
    // { right: 100, top: 100 }
    // { left: 100, bottom: 100 }
    // { right: 100, bottom: 100 }
    
    // Неверно:
    // { left: 100, right: 100 }
    // { top: 100, bottom: 100 }
    Ответ написан
    1 комментарий
  • Можно ли заменить кликанье мышью по веб-интерфейсу cli-командой?

    @rPman
    Тут уже ответили, предлагают провести реверсинженеринг кода с целью симулировать запросы вне браузера. Это будет просто если разработчик веб приложения не потратил усилия для защиты от этого (зачастую в запрос включаются поля, значения которых формируются не простым кодом на javascript, и сложность повторения которого вне браузера обычно основа защиты).

    Если же выявить по простому такой запрос не просто, то можно просто симулировать нажатия на кнопки на javascript прямо в браузере, инжектнув свой код с помощью, на выбор, расширения (tempermonkey/greasemonkey) или вставив свой код прямо в консоль разработчика (это работает только для single page application, иначе при обновлении страницы придется повторять) или используя средства автоматизации самого браузера (на его основе сделан selenium, его и использовать, это когда твой код запускает браузер и в нем выполняет действия). Я рекомендую tempermonkey.

    Обычно достаточно узнать css селектор требуемого элемента (например в консоли разработчика, в инспекторе, правая кнопка на нужном элементе, копировать как css-selector) и выполнить что то типа $('css-selector').click(). Чуть сложнее в этом случае реализовать взаимодействие своего кода вне браузера с кодом внутри браузера, самое простое - поднять свой веб сервер (он тоже должен быть https, если целевое веб приложение его использует либо настроить браузер на обход запрета смешивания http и https контента, не делайте так для рабочего браузера, это не безопасно, но для использования только одного веб приложения это безопасно), к которому из javascript можно делать запросы на получение команд и отправку результата (если это сбор данных).
    Ответ написан
    Комментировать
  • Можно ли заменить кликанье мышью по веб-интерфейсу cli-командой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрите в консоли браузера, что передаётся со страницы в устройство. Потом делайте аналогичные запросы, например, через curl.
    Ответ написан
    2 комментария
  • Почему я могу изменять состояние объекта хранящийся в const std::unique_ptr и const std::shared_ptr?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Можно сделать указатель на const. Вот этот ваш const, он относится к самому указателю, его нельзя менять (в смысле, на другой адрес). Но после разыменовывания получается не константная ссылка. Вот оно в документации:
    typename std::add_lvalue_reference<T>::type operator*() const


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

    Так что если вы хотите запретить менять объект, то можно сделать так:
    void foo(const std::unique_ptr<const int>& ptr) {
        if (ptr) {
            *ptr += 5; // Ошибка компиляции.
            std::cout << *ptr;
        }
    }
    
    int main() {
        std::unique_ptr<const int> ptr = std::make_unique<const int>(5);
        foo(ptr);
    }


    Правда, придется писать много лишнего кода, если будете передавать неконстантный объект внутрь функции, которая хочет ссылку на константный.

    Но вообще, обычно нет смысла передавать unique_ptr по ссылке. Можно передать по ссылке сам объект, все равно владение в функцию не передается же. И уже там можно навешивать const, если надо. Или, если передавать просто unique_ptr, без ссылки, то даже лишнего кода не надо для обработки const:
    void foo(const std::unique_ptr<const int> ptr) {
    }
    
    int main() {
        std::unique_ptr<int> ptr = std::make_unique<int>(5);
        foo(std::move(ptr));
    }
    Ответ написан
    3 комментария
  • Может ли один и тот же сайт принадлежать разным владельцам?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Это называется dns spoofing. Если вы заставите комп жертвы делать запросы к вашему DNS-серверу или сможете взломать используемый жертвой DNS-сервер, то можете подменить web-сервер, откликающийся на некоторой имя. Но как подметил Alexey Dmitriev, большинство сайтов сейчас используют https и браузер жертвы начнёт предупреждать о недействительном сертификате.
    Ответ написан
    Комментировать
  • Как сделать доставку изменений на сервер?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    То, что вам нужно называется "Система доставки и развёртывания" или "CI/CD". Работает следующим образом:
    1. На Git сервере создаётся репозиторий - Github, GitLab и прочие сервисы (есть простые и лёгкие варианты для хостинга на своём сервере)
    2. На сервере в разделе CI/CD настраиваете пайплайн на пуш или пулл-реквест в репозиторий: обычно это запуск скрипта или нескольких в докере
    3. При наступлении данного события сервер запускает пайплайн

    Обычно пайплайн состоит из нескольких шагов:
    1. Сборка
    2. Тестирование
    3. Доставка
    4. Развёртывание

    В зависимости от особенностей проекта число шагов может меняться. Для доставки и развёртывания есть два стандартных метода:
    • CI/CD агент на сервере, который выполняет нужные скрипты в контексте оболочки сервера
    • Скрипт, который подключается к целевому серверу по SSH и через него же передаёт нужные файлы (артефакты - в контексте CI/CD процессов).
    Ответ написан
    Комментировать
  • Как на VPS сервере нажать чтобы файл сохранился?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    открыл файл

    Чем открывали? nano (nano /path/to/file)? Если да, то внизу nano имеются подсказки по горячим клавишам:
    - ctrl + o - сохранить, редактор спросит имя файла для записи, если нужно просто сохранить - ничего не меняем и жмем enter.
    - ctrl + x - выйти из редактора, если имеются не сохраненные данные, то редактор так же предложит их сохранить.
    Если это был vim, то так:
    1. Нажмите клавишу esc один или два раза.
    2. Наберите :wq (записать и выйти).
    Подключался через mobaxterm

    Слева в mobaxterm есть sftp (файловый менеджер). Вы можете найти нужный файл там, кликнуть по нему правой кнопкой мыши и выбрать "Open with default text editor". Файл откроется в вашем редакторе по умолчанию в той операционке, с которой подключаетесь. При сохранение такого файла - mobaxterm автоматически загрузит его обратно на сервер.
    Ответ написан
    2 комментария
  • Как на VPS сервере нажать чтобы файл сохранился?

    @pfg21
    ex-турист
    гугли "как выйти из vi" :)
    Ответ написан
    Комментировать
  • Почему в коде assembler выдает бесконечный цикл?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Инструкция syscall изменяет регистры RCX и R11. В регистр RCX сохраняется предыдущее значение регистра RIP, в регистр R11 - предыдущее значени RFLAGS. Регистр флагов RFLAGS изменяется в соответствии с системным вызовом. Если RCX и R11 используются в коде, то их следует сохранить перед вызовом syscall.
    Ответ написан
    2 комментария
  • Прозрачный DIV перекрывает элемент под ним?

    Fragster
    @Fragster
    помогло? отметь решением!
    Надо установить ему https://developer.mozilla.org/en-US/docs/Web/CSS/p... none, а активным элементам на нем - в auto
    Ответ написан
    1 комментарий
  • Какой сетевой протокол выбрать для умного дома?

    Francyz
    @Francyz
    Photographer & SysAdmin
    Как вы можете знать какой протокол будет актуальным через 15-20 лет? Тут Ванги не обитают.
    Есть ZigBee, есть более новее Matter. Будут они актуальны в через 15 ни вы ни кто либо еще знать не могут. Берите то, что актуально сейчас и пользуйтесь. Не нравится ZigBee, Matter в руки. Везде будут плюсы и минусы.
    Ответ написан
    4 комментария
  • Почему ноутбук не запускается с оперативной памятью?

    @99insania99
    Заказал плату на али

    А что же могло пойти не так? Даже догадок нет!
    Иди в магазин и покупай какой-нибудь crutial или adata или samsung. Обычно они с завода стоят. А лучше всего сходить до любого сервиса и попросить у ребят оперативки на поподкидывать и посмотреть, с каким объемом и производителем заведется.
    Ответ написан
    4 комментария
  • Почему длина long int 4 байта?

    @res2001
    Developer, ex-admin
    В Си так же как и в плюсах размер целочисленных типов не фиксирован, есть только ограничения, что
    sizeof(int) >= sizeof(short) >= sizeof(char) и т.п.

    Если для большинства типов, все таки размеры более-менее устоявшиеся для широкоиспользуемых архитектур и компиляторов, то в случае с long int все сложнее и действительно зависит от ABI. Т.е. даже на одной платформе но на разных компиляторах размер может быть разным. Например, сравните размеры типов в микрософтовском компиляторе и в mingw64 под 64 битной виндой на одном и том же компе.
    Кстати, не забудьте, что есть еще long long int.
    Чтоб не зависеть от подобных вещей рекомендую использовать типы с фиксированной длиной int32/int64 и т.п., которые объявлены в stdint.h

    Размеры типов с плавающей точкой float/double как раз стандартизованы, но не стандартами Си/С++, а стандартом IEEE754.
    Размер указателей - зависит от архитектуры. На 32 битных процессорах обычно это 4 байта, на 64 битных процессорах - 8.
    Ответ написан
    Комментировать
  • Macbook air M4 24/32GB 512/1TB или Macbook Pro M4 24GB 512/1TB?

    Экран на Pro просто великолепен. Тут без вопросов. Насчёт звука не знаю, но, возможно, чуточку лучше. Вентилятор Pro вы услышите только при очень большой нагрузке.

    Насчёт диска можно даже не париться. Его всегда можно увеличить путём подключения внешнего. Единственный совет - обратить внимание на то, сколько банок SSD в ноутбуке. По-моему, в M4 они везде ставят уже 2 банки, и не будет просадок по скорости как с одной.

    Главный ресурс ноутбуков Apple - это память. 16 - это уже сильно впритык, и дальше будет только хуже. 24 - это минимум, а 32 гораздо лучше. Учтите, что любые эксперименты с локальным AI - это исключительно Pro с большим объемом памяти. Оно грузит проц страшно. Тут вентилятор будет в помощь. Однако, если такой сильной нагрузки не будет, то у нас появилось светлое пятно на горизонте - это новый эпловский типа-докер, который жрёт в разы меньше памяти, чем оригинал и его аналоги. Таким образом, можно уже более снисходительно смотреть на 24 ГБ.

    В новых Air уже можно подключать 2 внешних монитора. Современные мониторы очень часто можно подключить прямо через USB-c. Как мне кажется, HDMI в прошку воткнули только из-за того, что на конференциях так проще к проектору подключаться.

    Лично я сейчас смело бы взял Air на 24. Он дешевле, экран меня не интересует, я на телике качественный контент смотрю, и мой про-экран не показывает себя на все 100%. А вот веса хочется полегче... Но это моё личное мнение.
    Ответ написан
    Комментировать
  • Какой тип и формат жёсткого диска производительный?

    backfield9818
    @backfield9818
    Админ себя
    А если винсервер, зачем виртуалбокс? Hyper-V в родной системе будет производительней. Ну и тогда выбор формата диска очевиден - vhdx.
    Ответ написан
    1 комментарий
  • Что такое связывание, объявление, инициализация и определение?

    vabka
    @vabka Куратор тега Rust
    Точные определения будут только в стандарте или спецификации на конкретный язык.

    Ну и термин вполне может состоять из двух слов.


    Какая-то чушь получается, люди называют вещи как им хочется и путают других.
    - Это хорошо иллюстрируют функции, технически параметрами называются элементы в скобках при определении fn f(x: u8), а аргументами элементы в скобках при вызове f(255);, однако люди используют их взаимозаменяемо.

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

    Что реально изменяется от того, как я назову штуки в скобочках?)

    https://doc.rust-lang.org/reference/items/function...

    https://doc.rust-lang.org/reference/expressions/ca...

    По спеке и то и другое - параметры.

    А теперь каждый пункт по порядку:

    Объявление (Declaration) - вводит имя переменной в область видимости.

    то что с let - это variable declaration
    https://doc.rust-lang.org/reference/statements.htm...

    То что с fn - это function declaration.


    Связывание (Binding) — связывает имя с чем-то (значением, шаблоном, параметром).


    let x: u8 = 123; // можно трактовать по разному: связывание, инициализация, определение

    Конкретно тут - это declaration with initializer expression, вполне однозначно.
    Ответ написан
    9 комментариев