• Где оправдано применение Node Js?

    Q2W
    @Q2W
    По моим ощущениям ноду используют фронтендеры, которые хотят простой бекенд и не хотят заморачиваться.

    Ну и server side rendering для фронта, написанного на каком-нибудь реакте, ангуляре, вью, свелте не просто организовать без ноды на сервере.
    Ответ написан
    5 комментариев
  • Возможен ли доступ в интернет без провайдера?

    hint000
    @hint000
    у админа три руки
    spoiler
    Как можно иметь доступ в интернет без провайдер? По идее для этого нужно стать провайдеров?
    Провайдером становятся не для того, чтобы иметь доступ в Интернет без других провайдеров, а чтобы вложить N миллиардов долларов, и через 10 лет вернуть вложения, а через 20 лет заработать в Y раз больше вложенного.

    Откуда берут интернет провайдеры?
    Чтобы быть провайдером, прежде всего вам нужна кабельная инфраструктура. Если вы охватили своими кабелями один город, то подключаетесь к сети всё равно через магистрального провайдера, у которого кабели проходят по крайней мере через всю страну.
    https://habr.com/ru/companies/rootwelt/articles/305634/
    Если вы стали магистральным провайдером (ваши кабели по крайней мере заходят в соседние страны, вам это разрешили сделать, вы встречаетесь по крайней мере с министрами своей страны и соседних стран), то у вас прямой обмен трафиком с другими магистральными провайдерами. Ну а чтобы не зависеть ни от одного магистрального провайдера, вам нужно охватить своими собственными кабелями всю планету. Ну или попробовать обойтись без кабелей - запустить на орбиту тысячи спутников, как это делает Илон Маск. Тогда у вас будет своя собственная всемирная сеть, но в ней никого не будет. Ведь все остальные подключаются через каких-то провайдеров, а вы не хотите иметь контактов ни с кем из провайдеров, т.е. ваша собственная сеть будет изолирована от всех.
    Ответ написан
    Комментировать
  • Возможен ли доступ в интернет без провайдера?

    @none7
    Возьми учебник по CCNA, там должны быть все основы и даже есть для них программа для имитации строительства сети, просто нужно помнить, что в реальности существует не только Cisco. А перечислять тут, целая книга и получится.
    Ответ написан
    Комментировать
  • В каких IT профессиях джуну можно работать на удалёнке или фрилансе?

    vabka
    @vabka
    Токсичный шарпист
    за более менее человеческую плату(не обед для школьника)

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

    или фриланс

    Можешь ли ты работать на фрилансе - ты должен ответить сам. Тебе не нужно спрашивать мнение других, чтобы попробовать.
    Если ты всё ещё не делаешь этого - значит фриланс тебе в принципе не подходит.

    что джуны-программисты должны работать в офисе

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

    может быть за рубежом

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

    @tshipenchko
    В основном built-in функции реализуются используемым интерпретатором Python. Скорее всего у вас используется CPython. Вот исходный код функции min
    Ответ написан
    1 комментарий
  • Имеет ли смысл хранить refresh-токены?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Refresh-токены хранят для проверки на повторное использование. При первом использовании ставится пометка, при попытке повторного использования блокируются все refresh-токены пользователя. При следующем обновлении с любого клиента данного пользователя потребуется полная аутентификация. Можно хранить не весь токен, а только uid токена и id пользователя.
    Ответ написан
    Комментировать
  • 1с программист. Какой обычно состав команды разработки?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Да почти так же. Один или несколько кодеров, тимлид, аналитик(и), спецы по БД. В простых случаях все упрощается вплоть до одного-двух программеров.
    НО: 1С-программист всегда немного бухгалтер (или что он там программит - складской работник, хыр...), потому что знать предметную область для него так же обязательно, как для сетевика уровни OSI/ISO
    Ответ написан
    Комментировать
  • Стоит ли углубленно изучать многопоточность, асинхронное и паралельное программирование?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Хочется ответить цитатой:
    Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
    Ответ написан
    Комментировать
  • Как создать свою доменную зону?

    NeiroNx
    @NeiroNx
    Программист
    Корневые зоны очень дорого стоят. И просто так их вам никто не зарегистрирует.
    То что вы написали звучит как "Хочу собственную страну".

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

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Подыскиваю сейчас курс, да такой, чтобы можно было за какой-то срок полностью въехать в дело.

    Хотелось бы работать с бакендами, сайтами. Что-то в этом направлении.

    • Любой учебник по Python;
    • Учебник по СУБД (проектирование и sql);
    • Документация/учебник по фреймворку;

    Только так.
    Ответ написан
  • Как зациклить это действие?

    Vindicar
    @Vindicar
    RTFM!
    Цикл while?
    Не, серьёзно. Это основы языка. Открой учебник и читай.
    Ответ написан
    Комментировать
  • Может ли Раст полноценно заменить Джаву в сфере финансовых технологий?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    На сколько я знаю, на сегодняшний день у раста проблемы с интеграциями. Брошеные либы, зависимости от версии и платформы и вот это все... (я рад бы ошибаться, возможно, г-н Василий Банников меня поправит).
    В джаве же есть спринг-бут, который умеет интегрировться хоть с чертом лысым, при этом поддерживается, развивается, выходят новые версиии...
    В большом энтерпрайзе это важно.

    Ну и у джавы, нерешаемых проблем довольно мало, чтобы от нее отказываться. На рынке есть много персонала разной квалификации, JVM - прекрасная, развивающяяся платформа.
    На расте же писать никто не умеет (по сравнению с джавой), не понятно какие у технологии перспективы, есть вышеуказанные проблемы. Чем он может заинтересоваться большой бизнес?
    Производительностью? Так и jvm достаточно производительна, во-первых, а во вторых, есть куча приложений, для которых никакой хай-лоад и никакое лоу-латенси не предусмотренно...
    Ответ написан
  • Как превратить str(словарь) обратно в словарь?

    Vindicar
    @Vindicar
    RTFM!
    Лучше задайся вопросом, почему вообще у тебя str() от словаря?
    Веб-сервисы возвращают текст в формате json, который нужно декодировать через json.load() / json.loads().
    После декодирования ты получаешь собственно словарь, с которым можно работать.
    Короче, у тебя что-то напутано выше по коду, в том участке, который ты не показываешь. Покажи весь код.
    Ответ написан
    Комментировать
  • Практика очного собеседования для иногородних кандидатов?

    vabka
    @vabka
    Токсичный шарпист
    Такое иногда бывает.
    Я бы попросил у потенциального работодателя компенсацию поездки. (За билеты, проживание, и питание).
    ЗЫ: если два дня на поезде, то может оказаться сравнимой цена за самолёт.

    Если они не готовы на такое - значит отказ
    Ответ написан
    1 комментарий
  • Куда пропал вопрос?

    0xD34F
    @0xD34F
    Удалился вопрос на этом форуме

    Здесь не форум.

    у кого-то уже было такое?

    Да, у многих такое было. Это характерная особенность нарушителей правил.

    Модераторы, ответьте

    В ваших интересах не привлекать к себе внимания модераторов. Особенно подобным образом. Кстати, в правилах об этом прямо говорится - раздел 8.

    напишите пожалуйста причину

    Причину ищите у себя в почтовом ящике. Если, конечно, на момент удаления вопроса у вас было включено соответствующее уведомление.

    Или найдите ссылку на вопрос в истории браузера, откройте, вместо вопроса увидите причину удаления.
    Ответ написан
    Комментировать
  • Где найти курсы по СТАНДАРТИЗИРОВАННОМУ программированию?

    vabka
    @vabka
    Токсичный шарпист
    Их нет.
    А смысл задания заключается в том, что тебе нельзя использовать фичи из более новых версий языка. И при этом желательно использовать новые фичи, вместо каких-то старых подходов.
    Ответ написан
    2 комментария
  • Можно ли уточнить о вопросах перед собеседованием?

    Jacen11
    @Jacen11
    можно конечно, только никто не скажет
    смысл же в том чтобы опыт ваш узнать, а не как вы вопросы вызубрите, тут вам не школа универ, тут реальные знания проверять пытаются
    Ответ написан
    Комментировать
  • Ассемблер, почему дизассемблированном коде много ненужных операций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не переписать вместо этого
    add ebx,dword ptr [rbp+ECX*4+10h]

    Буквально так написать нельзя, потому что нет такого режима адресации в котором можно было бы использовать вместе Rbp (64-битный) и Ecx (32-битный). Можно было бы написать add ebx,dword ptr [rbp+rcx*4+10h], но для этого счётчик цикла должен был бы быть 64-битным, а он, как мы видим, 32-битный (int i). Т.е. ответ на вопрос "для чего это": для беззнакового расширения 32-битного счётчика цикла в регистр, который можно использовать для доступа к памяти.

    Другое дело, что из исходного кода очевидно, что при обращениях к памяти i не выходит из диапазона 0..9, так что разницы между ecx и rcx нет и не может быть. Возможно я что-то упускаю и у компилятора другое мнение на этот счёт, но может быть он просто туповат и не имеет кода который бы мог использовать эту возможность оптимизации, а может такая оптимизация и есть, но она не была включена во время генерации этого кода.
    Ответ написан
    Комментировать
  • Что быстрее SQL или Javascript?

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

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Как передать из функции значения в разные потоки?

    bingo347
    @bingo347
    Crazy on performance...
    Начну с того, что код представленный автором в комментах к вопросу имеет deadlock между мьютексом и recv() из канала и завершается лишь по тому, что мы не ждем фоновые потоки. Вариант без deadlock будет выглядеть так:
    fn test() {
        let mut channels = Arc::new(Mutex::new(Vec::with_capacity(PAR)));
        let mut joins = Vec::with_capacity(PAR);
        for _ in 0..N / PAR {
            for _ in 0..PAR {
                let mut channels = Arc::clone(&channels);
                joins.push(thread::spawn(move || {
                    get(channels.lock().unwrap());
                }));
            }
        }
        for j in joins {
            j.join().unwrap();
        }
    }
    
    #[inline(always)]
    fn get(mut channels: MutexGuard<Vec<mpsc::Sender<i32>>>) -> i32 {
        let (tx, rx) = mpsc::channel();
        channels.push(tx);
        if channels.len() == PAR {
            exec(channels);
        } else {
            drop(channels); // drop гварда отпускает мьютекс
        }
        rx.recv().unwrap()
    }
    
    #[inline(always)]
    fn exec(mut channels: MutexGuard<Vec<mpsc::Sender<i32>>>) {
        let mut i = 0;
        for c in channels.iter() {
            i += 1;
            c.send(1).unwrap();
        }
        println!("{}", i);
        channels.clear();
        // а здесь гвард дропнется сам
    }

    Вторая проблема в том, что все потоки выполняются по сути по очереди, так как ждут разблокировки мьютекса от других потоков, из-за чего многопоточка тут не дает никаких преимуществ, а лишь создает накладные расходы. Ради эксперимента я попробовал заменить мьютекс на еще один канал:
    fn test() {
        let (tx, rx) = mpsc::channel::<mpsc::Sender<i32>>();
        let mut handles = Vec::with_capacity(N + 1);
        handles.push(thread::spawn(move || exec(rx)));
        for _ in 0..N {
            let tx = tx.clone();
            handles.push(thread::spawn(move || {
                get(tx);
            }))
        }
        drop(tx);
        for handle in handles {
            handle.join().unwrap();
        }
    }
    
    fn get(sender: mpsc::Sender<mpsc::Sender<i32>>) -> i32 {
        let (tx, rx) = mpsc::channel();
        sender.send(tx).unwrap();
        rx.recv().unwrap()
    }
    
    fn exec(receiver: mpsc::Receiver<mpsc::Sender<i32>>) {
        let mut channels = Vec::with_capacity(PAR);
        loop {
            for _ in 0..PAR {
                let Ok(tx) = receiver.recv() else {
                    return;
                };
                channels.push(tx);
            }
            let mut i = 0;
            for c in channels.iter() {
                i += 1;
                c.send(1).unwrap();
            }
            println!("{}", i);
            channels.clear();
        }
    }
    Но особо это профита не дает, так как основной пожиратель перфоманса - switch context в ОС. Тысячи потоков делают только хуже. Запускать потоков сильно больше чем есть ядер - это вообще плохая идея. Просто ради интереса переписал еще раз на асинхронных каналах tokio:
    async fn test() {
        let (tx, rx) = mpsc::unbounded_channel::<mpsc::UnboundedSender<i32>>();
        let mut handles = Vec::with_capacity(N + 1);
        handles.push(tokio::spawn(async move { exec(rx).await }));
        for _ in 0..N {
            let tx = tx.clone();
            handles.push(tokio::spawn(async move {
                get(tx).await;
            }))
        }
        drop(tx);
        for handle in handles {
            handle.await.unwrap();
        }
    }
    
    async fn get(sender: mpsc::UnboundedSender<mpsc::UnboundedSender<i32>>) -> i32 {
        let (tx, mut rx) = mpsc::unbounded_channel();
        sender.send(tx).unwrap();
        rx.recv().await.unwrap()
    }
    
    async fn exec(mut receiver: mpsc::UnboundedReceiver<mpsc::UnboundedSender<i32>>) {
        let mut channels = Vec::with_capacity(PAR);
        loop {
            for _ in 0..PAR {
                let Some(tx) = receiver.recv().await else {
                    return;
                };
                channels.push(tx);
            }
            let mut i = 0;
            for c in channels.iter() {
                i += 1;
                c.send(1).unwrap();
            }
            println!("{}", i);
            channels.clear();
        }
    }
    и запустил в многопоточном рантайме в дефолтной конфигурации (количество воркеров == количеству ядер), работает быстрее в 19 раз.

    P.S. без I/O операций асинхронщина тоже создает ненужные накладные расходы, я ее здесь использовал только из-за простоты переписывания, лучше взять обычный thread pool с синхронными тасками.
    Ответ написан
    Комментировать