• Почему передачу данных по USB "слышно" в наушниках?

    GavriKos
    @GavriKos
    1. Нет экранирования
    2. Нет развязки по питанию
    0. Физика
    Ответ написан
    1 комментарий
  • Как смотреть популярные видео-объяснения по CS новичку с нехваткой теории?

    например «как работает транзистор и их виды» и т.д.

    Это тема для урока физики в 10-11 классе.
    Нужно ли его конспектировать?

    Если тебе это помогает в усвоении материала. Например чтобы быстро вспомнить какой-то момент.
    Если не знаешь, помогает ли, то обязательно всё конспектируй - потом поймёшь, что ты хорошо усваиваешь, а что хуже, и тогда уже будешь конспектировать только то, что заранее не понятно.
    «академические» основы,

    Что это такое?

    Как новичку работать с «популярным» материалом в интересующих сферах?

    Всегда начинать с простого, а вместо беспорядочного просмотра - лучше остановиться на каком-то одном курсе или цикле лекций, чтобы не перескакивать с непонятного на невообразимое.
    Ответ написан
    Комментировать
  • Почему перемещение объявления и инициализации переменной на новую строчку кода влияет на результат работы программы?

    Adamos
    @Adamos
    Я правильно понял, если после объявления неопределенной переменной X начать объявлять или менять значения другим переменным, то X "засорится"?

    Наоборот.
    int i;
    Под переменную i выделен участок стека, лежащее в нем значение не меняется. Но в учебной программе из пары строк там, скорее всего, будет 0, и это создаст иллюзию, что все нормально. Кроме того, некоторые компиляторы в некоторых условиях инициализируют любые переменные, что еще больше запутывает ситуацию.
    int i;
    for(int n = 0; n < 10; ++n) {}

    Под переменную i выделен участок стека, лежащее в нем значение не меняется.
    Под переменную n выделен следующий участок стека, его изменение никак на i не сказывается.
    for(int n = 0; n < 10; ++n) {}
    int i;

    Под переменную n выделен участок стека, его значение к концу цикла равно 10 - и уже ненужная переменная n уничтожается, освобождая место в стеке.
    Под переменную i выделен участок стека, лежащее в нем значение не меняется. Это вполне может быть тот самый участок, который только что освободился, в нем записано 10 (С++ не выполняет ничего, что явно не указал программист - это оптимальный язык). Так что i вполне может равняться 10. Или нет.

    Подобные ситуации называются "неопределенным поведением".
    Программист на С++ обязан исключить их из своей программы.
    Ответ написан
    1 комментарий
  • Почему перемещение объявления и инициализации переменной на новую строчку кода влияет на результат работы программы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В этом коде есть важная ошибка. В циклах for нигде не задано начальное значение переменной i, поэтому она может иметь любое значение, её поведение неопределено. Например, она может выделиться там же, где была выделена предыдущая, поэтому i во втором цикле будет равна последнему значению в предыдущем, то есть 10, даже если в первом цикле повезло попасть на 0.

    Локальные переменные как правило выделяются в стеке, поэтому если между двумя for стоит определение ещё одной переменной, то она, вероятно, выделится на месте i. И поэтому новая переменная i попадёт в другую часть стека, где, если повезёт, будет 0.

    Поэтому неудивительно, что поведение различаетя. Ведь оно в принципе не определено. В разных аппаратно-программных платформах и с разными компиляторами поведение может оказаться самым непредсказуемым. Например, в памяти может остаться мусор от предыдущей программы.

    Решение простое: надо везде в циклах for указать начальное значение i, тогда всё станет нормально, и перестановка определения count перестанет создавать такие совсем не странные эффекты.
    Ответ написан
    3 комментария
  • Спалят ли HR резюме?

    1. На начальных этапах никто не звонит работодателю для уточнения данных. Не кредит же тебе на миллион одобряют)

    2. Каких проблем ты ожидаешь от кадровиков? Типа что в обход твоего руководителя уволят или зп понизят за то что ты решил "предать партию" (а на каком основании лол?)? Чтобы ты ещё быстрее от них ушёл? Или на доску позора повесят?
    Объективно худшее, что может произойти - работодатель проигнорирует тот факт, что ты решил уйти.
    А скорее всего - включится механизм удержания с предложением перехода на другой, более интересный проект, или повышение зп.

    PS: ну и ты всегда можешь сказать, что не имеешь право указывать своё место работы или контакты работодателя.
    Ответ написан
    Комментировать
  • Не работает bin/bash в крон. Как решить?

    @SunTechnik
    Да тут вариантов ошибок - куча..
    1. Файл задания cron напрямую не редактируется. Для этого есть :
    crontab -e

    2. При прямом релктировании - есть риск ошибиться с форматом. Что у Вас сейчас в файле - непонятно. На первый взгляд, это не формат данного файла

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

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

    5. Как Вы сами пишите, перед запуском команды надо перейти в определенный каталог. Cron об этом ниичего не знает. Команда cd долдна быть внутри скрипта.

    6. Хорошим тоном считается, если скрипт начинается со строки, определяющей тип требуемого интерпритатора.
    #! /usr/bin/bash

    7. При запуске скрипта не надо запускать интерпритатор. Достаточно указать сам скрипт и что бы он имел права исполнения..

    .......
    Ответ написан
    Комментировать
  • Почему не выводятся данные в консоль?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как только я ввожу число литров и нажимаю энтер все сбрасывается и ничего не выводится. Код пишется в vscode, код пытаюсь запустить в самой консоли vscode. В чем может быть проблема?

    В том, что консоль с выводом программы закрывается сразу после того как программа заканчивается, а заканчивается она сразу после вывода. Одно из возможных решений -- запускать программу в отдельной консоли.

    Может с кодом что-то не то

    С кодом всё ок.
    Ответ написан
    1 комментарий
  • Насколько эффективна REST-full архитектура?

    Во-первых не rest-full, а restful с одной l.
    При использовании REST-full запросов, на сколько я понимаю, вся информация хранится в БД и привязывается к модели @Entity

    Нет. REST-это исключительно про интерфейс, а что там под капотом - не важно.
    То есть даже видео и файлы изображений, которые загружаются на сервер, в случае с REST-full хранятся в базе данных, а не где-то в папке или на диске...

    НЕТ.
    Ответ написан
    Комментировать
  • Как защитить программу от копирования без интернета?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Никак. Единствнный способ гарантированно защититься от нелицензионного копирования - это вынести ключевую часть функционала на сервер. Любая остальная защита - лишь усложнение реверс инжениринга и взлома. Всегда можно каленым железом вырезать любую проверку ключа из исполняемого кода.

    Активация ключа по телефону/интернету исключает лишь самый тривиальный способ "взлома" - просто копирование одной и той же лицензии по куче компьютеров без модификации исполняемых файлов.

    А так, берете какую-нибудь крипто библиотеку, выдаете сертификат, в котором подписываете своим приватным ключем "Лицензия выдана ООО рога и копыта". В программе зашит ваш публичный ключ. Программа проверяет файл лицензии, что он подписан вашим ключем. Но любой "хакер" умнее вас просто вырежет эту проверку из программы.
    Ответ написан
    4 комментария
  • Сколько раз можно перезаписывать прошивку в микроконтроллер?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Имеется, как и предел итераций записи на SSD или флеш накопитель. Только вот реально ли его достигнуть на практике - вопрос открытый.
    Скажем, первое что нагуглилось:
    Производители микроконтроллеров AVR в документации указывают что их Flash-память можно перезаписывать не менее 10000 раз, а EEPROM- 100000 раз.
    Ответ написан
    5 комментариев
  • Используют ли Rabbitmq в внешней сети?

    @rPman
    Для упрощения администрирования и защиты сервисов в рабочей сети общепринятая практика - собирать их все в локальной сети (при необходимости объединенной по интернету с помощью vpn), потому как иначе либо каждый сервис должен уметь защищаться от атак (напоминаю, шифрование не спасет от ддоса) либо в каждом участке сети настраивать фаервол.
    Ответ написан
    Комментировать
  • Является ли взаимозаменяемым опыт разработки на разных языках рамках одной платформы JVM (Java, Scala, Kotlin)?

    Jacen11
    @Jacen11
    да всем плевать сколько лет и где вы там просиживали, важны реальные знания. Есть те кто десять лет сидит и ничего толком не знают, кто то за год уже почти мидл. Учитывается главным образом как на вопросы ответите. Ну если ответы равны будут, то конечно уже посмотрят на прочее, но что то сомневаюсь что в реальном мире есть люди с одинаковыми знаниями и навыками.
    лично я устраивался без опыта на вакансиями с требованиями в несколько лет и менял стек пару раз. Один раз после трудоустройства всплыло что интервьюер забыл, что у меня нет коммерческого опыта в текущем стеке, претензий к моей работе не было
    Ответ написан
    2 комментария
  • Можно ли передать нужный тип переменной в дженерик функции?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    getFormattedData тоже должен быть дженерик и собсно его(дженерик) прокидывать в нижестоящие.

    Типа того:
    type Type1 = 1;
    type Type2 = 2;
    type Type3 = 3;
     
    type ContainsType<T extends UniversalType = UniversalType> = {type: T};
    
    type UniversalType = Type1 | Type2 | Type3;
    
    
    class Cls {
      async getFormattedData<T extends UniversalType>(data: ContainsType<T>): Promise<T> {
            const anyDataObject = this.validateData(data);
            const result = this.formatDataByType(anyDataObject);
            return result;
      }
    
      validateData<T extends UniversalType = UniversalType>(data: ContainsType<T>): T {
        return data.type
      }
    
      formatDataByType<T extends UniversalType = UniversalType>(data: T): T {
        return data
      }
    
    }
    const foo = await new Cls().getFormattedData({type: 2}); // 2


    Если ты явно чему-то пропиваешь тип который никак не зависит от входного дженерика:
    const anyDataObject: Type1 | Type2 | Type3 = ...
    то какбэ всё - приехали, ты сам указал, что тут именно такой тип(во всём его многообразии) и пофиг на входные данные. Ты можешь дальше сузить тип внутри метода:
    if (anyDataObject === 2) {
      // тут anyDataObject для ts считается Type2
    }
    но это уже никак не повлияет на выходной тип.

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

    szQocks
    @szQocks
    const recursy = (item) => {
       if(item.children){
          return <Route path={item.path} element={item.element}>{item.children.map(recursy)}</Route>;
        }
        
        return <Route path={item.path} element={item.element} />;
      };
    
    
    array.map(recursy)


    С ключами сам разберешься, и убери строки за место компонентов, строки на сколько я знаю в jsx не компоненты
    Ответ написан
  • Какие ограничения есть на ip адреса для SSH?

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

    Ну давай по порядку:
    1.
    • 151.248.113.78 - вроде ок
    • 127.0.0.1 - точно мимо, тк локалхост
    • 194.85.283.12 - невалидный адрес. ipv4 - это четыре 8битных числа. 283 не входит в этот диапазон
    • 192.168.15.2 - подозрительно похож на адрес в локальной сети
    • 172.16.0.92 - аналогично
    • 185.76.145.0 - подозрительно похоже на адрес подсети, но пока карандашом
    • 10.55.84.56 - что-то подозреваем

    2. Идём смотреть, какие адреса точно являются локальными
    • 151.248.113.78 - не локальный
    • 192.168.15.2 - Для использования в частных сетях. RFC 1918. Глобальная маршрутизация запрещена
    • 172.16.0.92 - Для использования в частных сетях. RFC 1918. Глобальная маршрутизация запрещена
    • 185.76.145.0 - не локальный
    • 10.55.84.56 - Для использования в частных сетях. RFC 1918. Глобальная маршрутизация запрещена

    Остаются всего два адреса:
    151.248.113.78 и 185.76.145.0
    Причём второй может оказаться невалидным, если подсеть /24
    Ответ написан
    Комментировать
  • Почему на хабр карьере так мало вакансий для разработчиков уровня Junior?

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

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

    + всякие крупные компании в принципе не делают вакансии для джунов, тк их и так достаточно набирают через программы стажировки и обучения.
    Ответ написан
    4 комментария
  • Чем лучше инициализировать переменные, дефолтными значениями или null?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Если "пустое" значение совсем валидно, то лучше его. Если совсем невалидно, то null.
    Разумеется, есть и промежуточные варианты, когда это значание - объект, и некоторые поля можно использовать, а некоторые нет. Тут по ситуации, исходя из того, как удобнее делать проверки.

    C null можно ещё немного переписать код так:

    return value == null ? <EmptyComponent ../> : <RealComponent value={value} />


    тогда внутри RealComponent у тебя гарантированно правильное значение, с которым можно спокойно работать.
    Ответ написан
    Комментировать
  • Как сделать collect в кортеж?

    vabka
    @vabka Куратор тега Rust
    Кортеж имеет фиксированный размер и по тому просто так collect сделать нельзя.
    Тут тебе три варианта:
    1. Вроде в itertools есть реализации collect для небольших гомогенных кортежей.
    2. Делай collect в Vec и бери элементы из него
    3. Сделай два раза next на итераторе

    Код

    раз
    fn main() {
        let items = [1,2];
        let mut iter = items.into_iter().map(|x|5+x);
        let a = iter.next().unwrap();
        let b = iter.next().unwrap();
        println!("{a} {b}");
    }


    Два:
    fn main() {
        let items = [1,2];
        let [a,b] = items.map(|x|5+x);
        println!("{a} {b}");
    }


    Три:
    use itertools::Itertools; // 0.9.0
    
    fn main() {
        let items = [1,2];
        let (a,b) = items.iter().map(|x|5+x).next_tuple().unwrap();
        println!("{a} {b}");
    }

    Ответ написан
    4 комментария
  • На чем пишутся современные десктопные приложения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    java - "не подходит для десктопа"

    На платформе Java (Groovy, Kotlin) написана среда разработки Jetbrains Idea.
    Правда есть у меня подозрение что из библиотек там использован не Swing а SWT
    но я уж не помню я слишком давно этот вопрос изучал. За много лет многое могло поменятся.
    SWT не слишком кроссплатформенный.

    На Java написан менеджер закачек Vuze (Azureus) и такая векторная рисовалка как Yed
    которой я пользуюсь иногда.

    Еще OracleDeveloper, Beaver, SOAP-UI, и много всяких тулов программисткого толка.

    По поводу JavaFX но я честно говоря не видел чтоб кто-то
    активно что-то графическое на нем разрабатывал. Скорее всего это была наивная попытка
    исправить недостатки Swing. И сделать его ... более мультимедийным чтоли.

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

    Для окон остается что-то очень хардовое типа Photoshop, 3dMax, AutoCad где можно грузить на 200%
    клиентский CPU и ты реально будешь хотя-бы чувствовать пользу от такой отдачи.

    Все где формочки и гриды - потеряло рентабельность. Его дешевле делать на вебе т.к. разработчик
    веба стоит дешевле и внести резкое изменение в функционал очень легко.

    Поэтому не звучит вопрос что на Java десктопы не пишут. А их щас реально уже НИ НА ЧЕМ не пишут.
    Даже на С++. Реально только игры и редкие приложения типа там 1С или какие-то клиент-банки.
    Ответ написан
    7 комментариев
  • На чем пишутся современные десктопные приложения?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    на всем ), именнно ввиду непопулярности десктопа все размыто

    прежде всего на Сшарпе - все просто: десктоп значит винда, винда значит либы, либы значит Сшарп - отличаются как раз малым размером (хехе),

    потом Qt / GTK/ Tcl с их портами на куда придется и куда приестся - от PyQT (наверно, самому вмнеяемому для Питона но с хз какой лицензией - уже не слежу, что там отпустили попустили допустили, о! pyside ожил свежий!) до Tk портировнного на Go - как-то изучал дела с десктоп приложениями - сам Go с десктопом и был и плохо и остался плохо, но вот именно порты Tk там из известных продвинулись дальше всего

    ну и Delphi конечно, если программистов найдете )) нет, не умер, но, думаю, дорог в поддержке )

    если думаете с чего начинать - рекомендую PySide, мне кажется будет наименьше число разочарований и тормозов при создании желаемого
    Ответ написан
    3 комментария