• Встречались ли вам овер-инженеры среди джунов и миддлов? Как надо с такими поступать?

    DevMan
    @DevMan Куратор тега Карьера
    человек вообще ни у чом не уиноват.
    просто в компании не выстроены (или не правильно выстроены) бизнес-процессы.

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

    Stalker_RED
    @Stalker_RED
    Изменение знака второго операнда разворачивает напраление сдвига.
    т.е. x << y === x >> -y
    В спеках так и написано, что сдвиг вправо вызывает сдвиг влево с изменением знака
    6.1.6.2.10 BigInt::signedRightShift ( x, y )
    The abstract operation BigInt::signedRightShift takes arguments x (a BigInt) and y (a BigInt). It performs the following steps when called:

    1. Return BigInt::leftShift(x, -y).


    Сдвиг влево описан так:
    6.1.6.2.9 BigInt::leftShift ( x, y )
    The abstract operation BigInt::leftShift takes arguments x (a BigInt) and y (a BigInt). It performs the following steps when called:

    1. If y < 0ℤ, then
    a. Return the BigInt value that represents ℝ(x) / 2-y, rounding down to the nearest integer, including for negative numbers.
    2. Return the BigInt value that represents ℝ(x) × 2y.
    NOTE
    Semantics here should be equivalent to a bitwise shift, treating the BigInt as an infinite length string of binary two's complement digits.

    источник: https://tc39.es/ecma262/#sec-numeric-types-bigint-...

    В хроме, если правый операнд больше 32, биты ходят "по кругу"
    (1 << 0).toString(2) // "1"
    (1 << 1).toString(2) // "10"
    // ...
    (1 << 30).toString(2) // "1000000000000000000000000000000"
    (1 << 31).toString(2) // "-10000000000000000000000000000000"
    (1 << 32).toString(2) // "1" (как при 0)
    (1 << 33).toString(2) // "10" (как при 1)
    // .. .
    (1 << Number.MAX_SAFE_INTEGER).toString(2) // // "-10000000000000000000000000000000" (как при 31)
    но где это описано в спеках, и описано ли - сходу не нашел.
    Ответ написан
  • Как в JavaScript работают побитовые операторы сдвига при передаче отрицательного числа в правый операнд?

    WblCHA
    @WblCHA
    Вот так работает: https://stackoverflow.com/questions/16559921/left-...
    Оператор внутри делает вот это: shiftValue & 0x1F, из-за чего -1 превращается в 31. А поскольку при значении 31 все биты (кроме последнего, который отвечает за чётность, если можно так сказать), то остальные биты "сгорают" и в результате имеем либо 0 (для чётных чисел), либо -2147483648 (для нечётных).
    Ответ написан
  • Работа с деньгами в php, лишние копейка в ту или иную сторону при округлении?

    Adamos
    @Adamos
    Я вам страшное скажу: в операциях с деньгами не всегда важна математическая точность.
    Но очень важно, чтобы результат был в точности такой, как в бухгалтерии.
    А там далеко не всегда царит формальная математика, особенно когда числа, которые потом сводятся к одному результату, по-разному налогооблагаются.
    Задача программиста здесь - не в том, чтобы компьютер считал правильно, а чтобы результат сошелся до копейки с 1С-кой, например.
    Ответ написан
  • Какие и в каком порядке произойдут операции?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А при чём тут некие "принципы работы операторов"? Вычисления всегда выполняются согласно приоритета операций.
    P.S.
    Приоритет операций влияет на построение дерева. В данном случае оно будет такое:
    oufdwfg3sv38vy7ekajctwlraye.png
    После построения начинается вычисление. Для этого используется обход дерева в глубину.
    1. Попадаем в узел ||
    2. Вычисляем первый аргумент, попадаем в узел <
    3. Вычисляем первый аргумент, попадаем в лист 0, возвращаем значение.
    4. Вычисляем второй аргумент, попадаем в лист 14, возвращаем значение.
    5. Вычисляем 0 < 14, получаем true, возвращаем значение.
    6. Значение первого аргумента true, применяем short-circuit evaluation, игнорируем второй аргумент, возвращаем true.
    Ответ написан
  • Какие и в каком порядке произойдут операции?

    delphinpro
    @delphinpro
    frontend developer
    Все нормально срабатывает:

    6049eef760bdc628383393.png

    Здесь:

    0 true - это вызов c(0 < 14)
    1 true - это вызов самой внешней функции с()
    true - это возвращаемое значение самой внешней функцией с()

    Что происходит?

    Начинается выполнения условия, переданного во внешнюю функцию.
    Сначала вычисляется выражение 0 < 14, затем результат передается в функцию.
    Функция выполняется, делая первый вывод и возвращая true.
    На этом этапе
    выражение c(0 < 14) || c(0 > 90 === 0 >= 14) && c(0 <= 90) имеет вид TRUE || c(0 > 90 === 0 >= 14) && c(0 <= 90). Данное выражение однозначно даст в результате true и поэтому остальные условия не проверяются (для этой стратегии вычислений булевых выражений есть какой-то специальный термин, но я его не помню), и, соответственно, функции не выполняются.
    Теперь этот результат (true) передается во внешнюю функцию и она выполняется, делая второй вывод в консоль.
    Ответ написан
  • Может ли сервер ответить не так, как следует, а по-другому?

    @vabka
    Токсичный
    Позволяют ли нынешние популярные реализации серверов (Apache, nginx, Google Web Server и другие) поступать не так, как следует?

    Да. Например если настроить их в режиме реверс-прокси и вручную обрабатывать все запросы на уровне приложения.
    Упоминаются ли данные "следует" и "должен" в стандартах HTTP, либо данное существуют только на уровне соглашения между разработчиками?

    Да. Читайте RFC - там даже есть определение, что значит "должен" и что значит "следует"
    Что будет, если отвечать не как следует, кроме того, что работа скорее всего станет некорректной, если клиент опирается именно на то, как сервер должен отвечать, а не на то, как он отвечает? Например, если сервер использует вместо стандартных заголовков нестандартные?

    Ну просто клиент (например браузер) и всякие промежуточные звенья (например балансировщики) могут неправильно интерпретировать ваш ответ, из-за чего могут возникнуть всякие неприятные побочные эффекты.

    Можно ли использовать собственное название метода, которое может обработать сервер или же список методов всё таки ограничен, перечисленными в спецификациях HTTP, и выбирать следует из них?

    Следует выбирать из тех что есть ради совместимости. GET/POST/PUT/DELETE/HEAD/PATH более чем достаточно.

    Имхо: зря вы об этом задумываетесь, тк следовать спецификации гораздо проще, чем не следовать.
    Ответ написан
  • Правильно ли я исправил код?

    Aetae
    @Aetae
    Тлен
    Ну и переменную requests можно выкинуть, раз избавляешься от лишнего.
    А так: исправления к лучшему, логика изменилась только в одном месте: в первом случае если вдруг придёт невалидный json с кодом 200 - всё упадёт, во втором - просто вернёт null(что правильнее, как по мне).
    Единственное что, если предполагается что в userNames может оказаться больше чем десяток записей - лучше их запросы разбить, в зависимости от возможностей сервера и канала.
    Ответ написан
  • Функция eval на стороне клиента абсолютно безопасна?

    DevMan
    @DevMan Куратор тега JavaScript
    ну может и что?
    у себя в браузере клиент может творить что угодно. а верить этому или нет - уже ваша забота. которая от браузера не зависит.
    Ответ написан
  • Можно ли исходя из аксиом, опровергнуть или доказать эти же аксиомы и аксиомы логики?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Математика не может судить об аксиомах. На то они и аксиомы, что вводятся в математику как утверждения не требующие проверки.
    На основе аксиом строятся соответствующие выводы, которые выражаются в виде теорем, лем и т.п. и которые требуют доказательств (путем применения аксиом, ранее доказанных теорем, лем и других высказываний).

    Логика - это такая же часть математики, как алгебра, геометрия и т.п. И там так же есть свои аксиомы.
    Если набор аксиом будет другой, то это уже будет другая логика. Ближайшая аналогия: геометрия Евклида, геометрия Лобачевского и т.п.
    Ответ написан