• Почему при пайке, отрывая жало от точки припоя, за жалом тянется хвост?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Это случается потому что припой на плате с компонентами остывает быстрее, чем та часть, что тянется за жалом.

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

    Альтернатива - использовать жало, к которому припой не пристает вообще. Такие есть. Разумеется подача припоя и флюса становится сложнее, тут и пригодится паяльная паста. Ну а там где паяльная паста, то уже недалеко и до паяльного фена.

    Еще можно купить вот такую хрень https://www.aliexpress.com/item/1005003523148728.html и паять все компоненты разом. Стоит не так дорого. Если у вас плата сделана правильно, то компоненты в перевернутом состоянии будут удерживаться за счет сил поверхностного натяжения.
    Ответ написан
    Комментировать
  • Как зная число, высчитывать от него значение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Формула: y = 4 - x/2
    (находится с помощью простой школьной математики)
    Это линейная функция. Значит, формула нужна примерно такая:
    y = k * x + b
    Нужно найти k и b по известным x и y. Подставим. Получим систему уравнений:
    2 = k * 4 + b
    2.5 = k * 3 + b
    Вычтем второе из первого:
    -0.5 = k
    Далее находим, что:
    b = 4
    Итоговая формула:
    y = - 0.5 * x + 4

    Соответственно, классическая функция будет выглядеть как-то так:
    function Fn(x) {
      return 4 - x/2;
    }
    Ответ написан
    Комментировать
  • Есть ли подобная структура в js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Нет. Тип значения которое уже было возвращено всегда конкретен. Либо это строка, либо это объект.
    Можно возвращать объект с методом toString который будет возвращать нужной строку при приведении к строке, но это не равносильно возвращению самой строки.
    const ROUTES = {
      blog: {
        art: 'page-art',
        toString() {
          return 'section-blog'
        }
      }
    }
    ROUTES.blog.art // page-art
    ROUTES.blog // object
    'text: ' + ROUTES.blog // text: section-blog

    Также можно попытаться накостылять магию с прототипом String, но это только в качестве развлечения, на проде за такое руки оторвут.)
    Ответ написан
    Комментировать
  • Как правильно передавать заказчику код?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Обычно это согласуется с заказчиком перед заключением договора. Частая практика - это архив с исходным кодом, файлом README.md, описывающим установку и использование программы, и файлом requirements.txt для автоматической установки зависимостей с помощью pip.
    Ответ написан
    Комментировать
  • Это стрелочная функция?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нет, это не стрелочная функция.
    Здесь нет стрелок типа такой: =>
    Ответ написан
    Комментировать
  • Стоит ли покупать mac mini?

    fedorez
    @fedorez
    Хатуль мадан
    Зачем страдать, зачем полагаться на чужое мнение?
    Просто купите тот mac mini что вам понравился в фирменном интернет-магазине Apple на их сайте.
    У вас будет месяц на то, чтобы попробовать развернуть свою рабочую среду и опробовать все ваши рабочие конфигурации/кейсы/задачи.
    Если не понравится или что-то не заработает а воркэраунды не устроят - фишка магазина Эппл в том что можете в течение месяца просто вернуть и получите свои деньги назад. Купите что-то другое.

    У нас в семье один Мобайл(я) дев и два веба - фронт и бэк. Все весной купили одинаковые Air M1 16/256 и все очень-очень довольны - я переезжал с макбука про 13 года на i5, остальные со свежих десктопов на интеле и райзене.
    Все работает, всё хорошо, всего всем хватает.
    Попробуйте и вы.
    Ответ написан
    4 комментария
  • Стоит ли покупать mac mini?

    RAFAILgaley
    @RAFAILgaley
    MacMini 16gb/512gb m1 - супер конфиг
    бери не сомневайся

    и не забывай - писи и виндос это страдание
    выбор писи может быть оправдан только если у тебя нет денег на мак про, но нужна такая же конская производительность с дорогущими видеокартами

    для твоих задач миника хватит точно
    https://browser.geekbench.com/macs/mac-mini-late-2020
    и легко продать сможешь чрез пять-десять лет
    Ответ написан
    3 комментария
  • Как заменяються значения переменных с помощью деструктуризации?

    Не нужно понимать замену значения при помощи деструктуризации, нужно понять просто деструктуризацию.
    Нет никакой замены, ты сначала создаешь структуру с определенными значениями, потом распаковываешь ее в переменные с теми же названиями.
    Деструктуризация это
    let [a, b, ,c] = [1, 2, 3, 4]
    let {a, b, c} = {a:1, b:2, c:3}

    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    Ответ написан
    Комментировать
  • Как заменяються значения переменных с помощью деструктуризации?

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

    @maximsemin23 Автор вопроса
    Как я в итоге сделал (фактически, решение описано Сергей Соколов ):
    object ColorHandler {
    
        /**
         * Color sample: 556A74
         */
        fun getColorName(color: String): String {
            if (color in names.keys)
                return names[color]!!
    
            val r = color.slice(0..1).toInt(16)
            val g = color.slice(2..3).toInt(16)
            val b = color.slice(4..5).toInt(16)
    
            var currentMin: Pair<Int, String>? = null
            var range: Int
    
            names.forEach { (colorValue, name) ->
                range = (
                    (r - colorValue.slice(0..1).toInt(16)).pow() +
                    (g - colorValue.slice(2..3).toInt(16)).pow() +
                    (b - colorValue.slice(4..5).toInt(16)).pow()
                )
    
                when {
                    currentMin == null -> {
                        currentMin = range to name
                    }
                    
                    currentMin!!.first > range -> {
                        currentMin = range to name
                    }
                    
                    currentMin!!.first < range -> {
                        return@forEach
                    }
                }
            }
    
            return currentMin!!.second
        }
    }
    Ответ написан
    Комментировать
  • Как выровнять длину массивов в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Собрать новый массив:

    const newArr = arr.map(function(n) {
      return [ ...n, ...Array(this - n.length).fill('') ];
    }, Math.max(...arr.map(n => n.length)));

    Обновить существующий:

    const max = arr.reduce((max, { length: n }) => max > n ? max : n, 0);
    arr.forEach(n => n.push(...Array(max - n.length).fill('')));
    Ответ написан
    2 комментария
  • Есть ли разница между унарным плюсом и parseInt?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Понятно, что читать спецификацию (+, parseInt) вы вряд ли будете, раз не смогли отличия хотя бы погуглить, так что вот вам несколько примеров разницы, а дальше думайте сами, где что использовать:

    parseInt('1!!!') // 1
    +'1!!!' // NaN
    
    
    parseInt('') // NaN
    +'' // 0
    
    
    parseInt('3.14159') // 3
    +'3.14159' // 3.14159
    
    
    parseInt('0b1000101') // 0
    +'0b1000101' // 69
    
    
    parseInt('0o273') // 0
    +'0o273' // 187
    
    
    parseInt({ valueOf: () => 666 }) // NaN
    +({ valueOf: () => 666 }) // 666
    
    
    parseInt('1000000000', 2) // 512
    +'1000000000' // 1000000000
    
    
    parseInt('99', 8) // NaN
    +'99' // 99
    
    
    parseInt('DEAD', 16) // 57005
    +'DEAD' // NaN
    Ответ написан
    1 комментарий
  • Почему рекурсивную функцию нужно присваивать переменной при работе с декоратором?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас декоратор не возвращает значение декорируемой функции.
    В первом случае это приводит к тому, что при рекурсивном вызове fac() в строке return num * fac(num - 1) выполняется умножение на undefined.
    Во втором случае вы рекурсивно вызываете незадекорированную функцию fac(), поскольку декорируете fuc().
    Ответ написан
    3 комментария
  • Как прибавить к дате несколько дней (суток) с точностью до минуты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы вместо минут вывели месяц.
    $new_date = $date->format('Y-m-d H:i:s');
    Ответ написан
    1 комментарий
  • Как безопасно проверить значение свойства объекта js?

    YavaDev
    @YavaDev
    if (APP?.config?.env?.stage === 'dev')
    Почитать можно здесь - Оператор опциональной последовательности
    Ответ написан
    Комментировать
  • Когда лучше использовать рекурсивный setTimeout?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В вашем коде всегда есть ненулевой шанс наличия ошибки (бага).
    • Рекурсивный setTimeout лучше тогда, когда ошибка должна приводить к остановке выполнения кода, то есть к отказу от дальнейших попыток его выполнить.
    • Обычный setInterval лучше тогда, когда код должен продолжать попытки выполниться, не смотря на ошибку.

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

    Также рекурсивный setTimeout может быть интересен, если величина задержки не является константой, то есть каждый раз будет меняться.
    Ответ написан
    1 комментарий
  • Что из себя представляет интернет соединение?

    vabka
    @vabka
    Токсичный шарпист
    Мой ответ - нет, это не "непрерывный поток" а просто некоторое состояние, которое зафиксировано в узлах сети.
    Это состояние меняется с каждым отправленным блоком данных. Сами эти блоки данных кодируются определённым образом и передаются через какой-то физический канал.
    На уровне сети - это вполне дискретные сообщения.
    На физическом уровне - это непрерывный поток из сигналов, но не обязательно, тк есть IP over Avian carriers
    img7.jpg
    Смотрим по уровням:
    • Прикладной - тут будет HTTP и прочие прикладные протоколы. Это не совсем интернет, так что пропускаем.
    • Транспортный - TCP и UDP. Так что их тоже пропускаем, тк в "интернете" используются оба.
    • Сетевой - IP и прочие - как раз на этом уровне происходит обмен полезными данными в интернете. Тут нет "непрерывного потока", и как правило общение происходит в виде "фреймов" и "сообщений" с определённым набором полей.
    • Физический - тут всё очень зависит от физической реализации сети


    PS: Но при этом, с точки зрения программы на ПК, TCP-соединение может выглядеть как непрерывный поток байт, но это всё зависит от абстракций.
    Ответ написан
    Комментировать
  • Что из себя представляет интернет соединение?

    nowm
    @nowm
    Самая ближайшая аналогия: вы открываете чат с другом и болтаете минут 20. Несмотря на то, что вы отправляли друг другу много сообщений, все они отправлялись в рамках одного разговора, и вы их считатете связанными. Они были отправлены в рамках этого непрерывного соединения-разговора. «Под капотом» в это время может происходить много разных вещей. Например, чтобы написать сообщение, нужно достать телефон из кармана, разблокировать экран, открыть приложение-чат, выбрать собеседника, кликнуть на поле ввода сообщения, по-очереди нажимать на буквы экранной клавиатуры. Телефон, тоже где-то там под капотом делает много вещей, чтобы обеспечить вам возможность разговора с другом. Но эти детали вас не отвлекают, и вы считаете, что вы просто разговариваете с другом. У вас непрерывное 20-минутное соединение-разговор, даже если вы за эти 20 минут несколько раз доставали телефон и клали обратно.

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

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1) Sound visualizer in C#
    2) How do I record audio with C#/WPF?
    3) Ok Google -> "ffmpeg нормализация звука"
    4) How to cut/crop/trim a video in respect with time ...

    Изучите библиотеку ffmpeg. Она есть под все популярные платформы, и есть биндинги практически под все языки.
    Ответ написан
    1 комментарий