• В чем превосходство Typescript?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Типы? Есть JSDOC.

    Именно Типы.
    1. Система типов у TypeScript по возможностям превосходит JSDOC.
    2. Много инструментов для автоматической проверки типов. JSDOC поменьше.


    Это такой более строгий предохранитель от того чтобы не выстрелить себе в ногу. Можете воспринимать это как навороченный линтер, который проверяет не форматирование кода, сколько логику его работы.
    Ответ написан
    1 комментарий
  • В чем превосходство Typescript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Как бы это странно не звучало, но одно из главных преимуществ TypeScript - это ускорение разработки в несколько раз. Да, когда еще ничего нет - разработка незначительно замедлится, так как помимо логики нужно описать еще и типы. Но это только в начале. И это не только возможность писать большую часть кода с помощью автодополнения. Поддержка существующего кода занимает в десятки раз больше времени, чем его начальное написание. Стоит ли вложить несколько лишних часов на старте, чтоб сэкономить в последствии месяцы? Как по мне стоит.

    Еще одним огромным плюсом является возможность проектировать на типах. Познав дзен TypeScript'а я перестал пользоваться UML, так как типы дают мне ту же наглядность, но при этом еще и сокращают время, так как типы - это уже код. Ну и источник правды остается один. Бизнес требования выраженные в типах не дают отклонится от них при написании логики, исключая возможность неправильной трактовки задачи. Перенеся задачу в типы, я могу обсудить ее с коллегами и исправить неточности еще до написания кода, что опять же сильно экономит время.

    Ну и отвчечу на некоторые Ваши сомнения:
    TSLint в VSCode прям жутко тугой
    TSLint официально deprecated, вместо него стоит использовать плагин к eslint, заодно можете мой конфиг попробовать.

    Типы? Есть JSDOC
    JSDoc в плане типов не умеет и 10% того, что умеет TypeScript. Кроме того, никто в здравом уме не пишет JSDoc на приватную логику, а значит проверки типов там не будет. JSDoc не гарантирует корректность рефакторинга, а вот благодаря TypeScript я, опять таки, точно не забуду обновить JSDoc.

    многие библиотеки nodejs не имеют типов
    может лет 5 назад так и было, но сейчас встретить библиотеку без типов - скорее исключение. Если библиотека популярная, но не предоставляет типов, скорее всего их уже написал кто-то другой, достаточно просто установить одноименный модуль из npm скоупа types и все будет работать само.

    Поддержка браузерами скомпилированного кода? Да какбы почти весь JS имеет поддержку 95%+, тот же Babel уже забыл когда использовал.
    Вообще это не основная задача компилятора TypeScript, а опциональная возможность. И babel + preset-env с ней справляются гораздо лучше. И никто не мешает использовать их вместе. А еще думаю вопрос времени, когда кто-то напишет оптимизатор кода использующий информацию о типах из TS.

    Примерно в каждой второй есть инстансы, на которые смотришь - и чешешь репу - а как называется тип этой переменной в @types/?
    import {someObject} from 'some-library';
    
    type TypeFromValue = typeof someObject;
    const valueCopy: TypeFromValue = {
        ...someObject,
        type: 'overrides',
        with: 'type check',
    };
    и кстати, вот пример того что JSDoc типы не умеют.

    //@ts-check
    и почти везде останется бесполезный any.

    P.S. удачи такие типы на JSDoc описывать
    P.P.S. Еще прелести современного TypeScript невозможные у...
    Ответ написан
    8 комментариев
  • Почему обучение продвигается так медленно?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    А вы ждали мгновенного результата? Месяц - это очень мало. За месяц даже учебник для начинающих нормально не изучить. На тренировку мозга требуются существенно больше времени. Стартовый уровень, достаточный для найма, нарабатывается полгода-год. Пара-тройка лет практики в окружении профессионалов нужна, чтобы вырасти в мидлы. И процесс не останавливается никогда, чем больше вы тренируетесь, тем больший спектр задач можете решать и тем проще это вам даётся. Продолжайте стараться, всё придётся при должном упорстве.
    Ответ написан
    8 комментариев
  • Как объединить два списка (с определенной последовательностью чисел), сохранив этупоследовательность, в Python?

    longclaps
    @longclaps
    a, b, с = [1, 3, 7, 9], [2, 5, 10], []
    while a and b:
        с.append((a if a[-1] > b[-1] else b).pop())
    print([*a, *b, *с[::-1]]
    Ответ написан
    Комментировать
  • Как включить музыку при загрузке страницы?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Пожалуйста, не делайте так.
    Во-первых, это очень раздражает, т.к. на ваш сайт могут заходить люди в разное время суток и при разных обстоятельствах.
    Во-вторых, это мгновенно делает ваш сайт куском говна. Нет ничего дерьмовее непредсказуемого поведения сайта. Сайт, на котором играется музыка/видео, вылезают какие-то всплывашки, чатики, счетчики и прочее мигающее, ездящее, прыгающее, вращающееся и новящевое - это говно. Такие сайты делаются лохами для лохов.
    Ни один нормальный человек не будет оставаться на таком сайте дольше 10 секунд. Конкурентов много, не думайте, что ваш сайт такой уникальный.
    Ответ написан
    2 комментария
  • Как быстро проверить, является ли некоторое огромное число (от 100 знаков) квадратом целого числа?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Можно попробовать вычислить корень быстрым алгоритмом. Но там сложно. Гуглите Karatsuba square root. Есть открытые реализации. Есть еще какой-то адский метод через быстрое преобразование Фурье, попробуйте погуглить и его.

    Более простой в реализации, но менее быстрый метод вычисления корня - бинарный поиск. Храните l, r, l^2, r^2 и lr. По этим числам можно вычислить m=(l+r)/2, m^2, m*l, m*r без длинных умножений, а только складывая длинные числа и деля на 2. Вам надо поддерживать, чтобы l^2 <= n <= r^2. Изначально можно сделать l=1, r=10^51 (или больше - половина длины входного числа + немного, чтобы точно квадрат был больше n), потом делить отрезок пополам и отбрасывать ненужную половину.

    Еще есть вероятностный метод через символ Лежандра/Якоби. Это будет самым быстрым методом.

    Это как смотреть на последнюю цифру. Квадраты могут давать там 0, 1, 4, 9, 6, 5. Но нет ни одного квадрата, который оканчивался бы на 2. Т.е. если число заканчивается на 2, то можно сразу говорить, что это не квадрат. Это мы взяли остаток от деления на 10 (последняя цифра) и посмотрели, какие из них хорошие. Вот символ Лежандра - это такая проверка для модуля по любому простому числу (а не 10).

    Если брать некоторое простое число p, то n может быть квадратом, только если символ Лежандра (n/p) - равен 1 или 0 (По научному: n - должно быть квадратичным вычетом).

    Если брать небольшие (<64-битные) простые числа, то можно за линию считать n%p и потом вычислять символ Лежандра (n%p/p) по алгоритму через символ Якоби за O(log(p)^2). Когда подсчитали символ Лежандра и если он -1, то n - точно не корень.

    Тут проблема в том, что это необходимый, но недостаточный критерий - если для какого-то p вы получили -1 - то это точно не квадрат. Но возможно можно подобрать такое число, что все ваши тесты дадут 1, а оно не квадрат. Поэтому надо брать много простых чисел. Скажем, 20. Желательно еще числа брать достаточно большими. Но их не надо искать каждый раз, можно захардкодить. Грубая прикидка говорит, что вероятность ошибки такого алгоритма 2^(-количество простых чисел).

    Т.е. берете много простых чисел. Считаете для каждого n%p выполняя деление большого числа на короткое (один проход по массиву цифр). Потом считаете символ Лежандра. Если получили где-то -1 - то точно не квадрат. Иначе - скорее всего квадрат.

    Можно совместить вероятностный тест и вычисление корня. Сначала проверьте парочку простых чисел на символ Лежандра для отсечения точно не квадратов. Еще проверку последней цифры можно сделать, это очень дешево. Если не отсеклись, то считайте корень. Так будет всегда работать правильно но будет быстрее работать в некоторых случаях.
    Ответ написан
    Комментировать
  • Создание многопользовательского сервера на го?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Go язык общего назначения, так что все возможно.
    Плюсы его в простоте. Одном бинарнике, то есть все отлично

    1) раз мы делаем через WEB, то используем веб-сокеты? Есть ли какие-то еще интересные и практичные варианты для моей цели? Так же, интересует максимальное кол-во игроков? Как я понимаю это 64к человек на сервер? Или же нет?

    Я бы рекомендовал UDP. Один порт и все, пробивание файрволов и серых адресов описано.
    Кроме того в случае TCP добавляете второй IP и получаете N * 65000

    2) Как стоит разделять комнаты? Делать все в одном инстансе или для каждой комнаты свой отдельный? Хранить на одном сервере или для каждой комнаты свой личный?

    Все зависит от вашей логики. Я бы посоветовал мастер сервис, который раскидывает игрокам по воркерам и мигрирует с одного инстанса на другой как игрока так и комнату.

    3) Если на разных инстансах (или собственно серверах), то как в итоге соединять людей в них? В БД хранить порт комнаты на сервере или как то еще?

    В бд хранится общая конфигурация, в редисе текущий кэш для быстрого доступа

    4) Как при запуске GOшного инстанса сохранять и манипулировать им? Как указывать игрокам к какому подключаться?

    Есть мастер инстанс. Он же сигнальный сервер. Он отдает клиенту мета информацию о количестве серверов, игроках, пинге. Как вы там выберите не понятно, можно дать возможность пользователю выбрать, можно автоматом. В общем это уже архитектура
    Ответ написан
    4 комментария
  • Покупка ноутбука в магазине без предустановленной ОС. Разумное рещение?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1. Если планируешь ставить лицензионную Windows - так себе решение, так как предустановленная может быть дешевле.
    2. Если планируешь ставить Линукс - норм решение, но желательно уточнить совместимость по драйверам
    3. Если планируешь ставить пиратку - ну ответственность на тебе.
    Ответ написан
    Комментировать
  • Покупка ноутбука в магазине без предустановленной ОС. Разумное рещение?

    kawabanga
    @kawabanga
    Важный момент, если планируете Линукс, то сначала проверьте, поддерживает ли ваш ноут все драйвера.
    Странно, что разница без оси в 10К на ноут. Но тем не менее, если есть такой же ноут но с операционкой - занчит у вас как минимум не будет проблем с драйверами.
    Ответ написан
    Комментировать
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Бенчмарки - это хорошо, но очень важно понимать что именно там меряли и почему результаты именно такие.

    Несколько лет назад я тоже делал бенчмарки Python, PHP, Node, Go.
    Для меня были важны две вещи:
    1 - скорость ответа сервера/кол-во запросов в секунду
    2 - объём сервиса в памяти, т.к. от этого зависит стоимость ресурсов

    На тесте, где сервисы не делали запросы в базу - из всех четверых лучше всего отработал Go с приличным отрывом, цифры, к сожалению, уже не помню.

    Но вся эта разница сошла на нет, как только добавился всего один простой SQL запрос в базу, в таблицу с 10 строками. И на этом фоне разница по скорости ответа была меньше 10%.

    Иными словами если ваш сервис работает с базой - критической разницы по скорости работы между Go/Rust/PHP/Node/Java, особо не будет.

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

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

    Один экземпляр Go занимал в памяти порядка 6мб RAM, при том, что Pytho+Django порядка 60мб.
    Node уже не помню сколько, но что-то близкое к Python'у.

    Вот тут уже, когда серверов у вас будет много - количество серверов с Go у вас будет в 10 раз меньше, соответственно расходы за эти сервера у вас будут в 10 раз меньше :)

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

    Где-то читал статью, что у людей было API на порядка 40 серверов на Node, после переписывания на Go - серверов осталось два, из которых второй запасной :)
    Ответ написан
    13 комментариев
  • UNITtest можно ли ..?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Естественно, при изменении кода нужно менять и тесты.
    Ответ написан
    Комментировать
  • MacBook Air/Pro на М1 или MacBook Pro 15 2015?

    DevMan
    @DevMan
    m1.

    но если хочется сэкономить и готовы обновиться через год–два, пойдет и б/у прошка.
    Ответ написан
  • Где JavaScript работает быстрее: в браузере или в NodeJS?

    Lynn
    @Lynn
    nginx, js, css
    Учитывая что и там и там под капотом один и тот же V8 вопрос бессмысленный.

    Если конечно вы под браузером понимаете (как большинство) Chrome и его клонов.
    В Firefox другой движок, но и в этом случае корректнее сравнивать V8 vs SpiderMonkey.
    Ответ написан
    1 комментарий
  • Есть ли возможность программно определить параметры CPU, GPU?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Да, есть. Иначе как бы работали CPU-Z и аналоги.
    Ответ написан
    Комментировать
  • Можете подсказать практичный список литературы по разработке драйверов для linux и вообще по работе в ядре?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    The Linux Kernel Module Programming Guide: https://sysprog21.github.io/lkmpg/
    Linux Device Drivers: lwn.net/Kernel/LDD3
    Understanding the Linux Kernel: https://doc.lagout.org/operating%20system%20/linux...
    Linux Kernel Development: https://raw.githubusercontent.com/jyfc/ebook/maste...
    Understanding the Linux Virtual Memory Manager: https://www.kernel.org/doc/gorman/pdf/understand.pdf
    Unreliable Guide To Locking: https://www.kernel.org/pub/linux/kernel/people/rus...

    Содержимое каталога Documentation в ядре.
    https://lwn.net/Kernel/Index/ для точечного погружения в отдельные топики.
    Каталог doc с kernel.org: https://www.kernel.org/doc/
    Ответ написан
    2 комментария
  • Rust сырой в ближ. время?

    bingo347
    @bingo347
    Crazy on performance...
    Подскажите пожалуйста какова на данный момент ситуация с Rust
    Дефицит вакансий, дефицит грамотных разработчиков. Те что есть хотят много денег.
    до сих пор еще дорабатывают, вышел ли в продакшен?
    он "вышел в продакшен" 5-6 лет назад, а насчет доработок - этот процес вечен, ну или пока язык не забросили, ну или как с Go не уперлись в собственный говнокод
    Может ли на данный момент потягаться по кол-ву библиотек в web с Golang и в машинном обучении с Python?
    Ну так посмотрите сами: https://crates.io/
    Планируется ли что-то в ближ. год/два?
    https://blog.rust-lang.org/2020/09/03/Planning-202...
    Ответ написан
    Комментировать
  • Стоит ли создавать сообщество начинающих программистов?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Сообщество будет включать совместные переписки и группы для видения проектов, задачи для практики и вопросы.

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

    Планируется ещё создать обучающий материал.

    Который будет по определению хуже существующих учебников и официальной документации.
    Ответ написан
    5 комментариев