• Есть какой-то сервис для деобсуфицирования кода js?

    Stalker_RED
    @Stalker_RED
    Ты прикалываешься, да?
    https://www.google.com/search?q=js+deobfuscator+online

    Сразу предвижу "они плохо справляются". Тут ничего не поделаешь, у обфускаторов фора.
    Ответ написан
    Комментировать
  • Почему все называют TypeScript компилируемым языком программирования?

    vabka
    @vabka
    Токсичный шарпист
    1. Если душнить, то никто не называет TypeScript компилируемым языком.
    Вот например что написано на официальном сайте на самом верху:

    TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.


    2. У typescript есть компилятор tsc - его называют компилятором, потому что он по определению им является.

    Но стоп, компиляция - это процесс перевода "человеческого" кода в машинный код.

    Нет. Даже если брать определение из википедии, то будет:

    In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language).

    Никакой речи о "машинном коде" нет, как видишь)

    А если совсем душнить, то языки не делятся на компилируемые и интерпретируемые - это детали реализации.
    В теории для любого языка можно написать компилятор/транслятор или интерпретатор (и так действительно делают)

    При этом ещё существует какая-то путанница в терминологии:
    1. В русскоязычной литературе действительно принято компилятором называть такой транслятор, который транслирует код с языка высокого уровня в машинный или ассемблер.
    (интересно, в каком тогда месте у таких авторов лежат компиляторы, которые компилируют в какой-нибудь промежуточный язык)
    Получается, что компиляторы - это подмножество трансляторов.

    2. В англоязычном интернете transpiler наоборот являются подмножеством compiler.
    Compiler - такая программа, которая преобразует код с одного языка на другой, причём из одного файла может получиться N файлов.
    А tanspiler - это такая программа, которая берёт исходный код на одном языке, и преобразует его в исходный код на другом языке, причём 1 файл преобразуется ровно в 1 файл.

    Получается, что tsc - это транслятор/транспайлер, а причислять их к компиляторам или нет - это дискуссионный вопрос.
    Ответ написан
    2 комментария
  • Что делать если я не могу научится самостоятельно писать код даже с опытом работы на реальном проекте?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вероятно, стоит поискать план Б, не все способны быть программистами.
    Ответ написан
    3 комментария
  • Программирования учат или применяют?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Ну серьезно. Зачем вы ходили в школу?
    Неужели в школе не было некоторого количества предметов, чтобы понять как что учится?

    Получилось ли выучить иностранный язык, просто зазубрив слова? Или выяснилось что и слова надо запомнить и практиковаться много раз, чтобы как-то начало получаться?

    Алгебру - достаточно ли просто зазубрить что такое + - * / %, чтобы решать все задачи, или приходится на практике решать кучу задач, чтобы научиться это делать быстро?

    Программирование НИЧЕМ не отливается от любых других направлений. Нужно и зубрить теорию и заниматься практикой, нельзя делать что-то одно. И высчитывать процент - это зачем? каждый человек немного уникален, у каждого процент будет свой.
    Ответ написан
  • Программирования учат или применяют?

    Newto
    @Newto
    Добрый день. Я перечитал все ответы выше, а так же комментарии к ним. Решил прокомментировать, с точки зрения своего опыта(я занимаюсь разработкой уже более 15-ти лет). Для удобства чтения я буду писать по пунктам.

    1) Зубрёжка. Каждого из нас, кто ходил в школу, заставляли зубрить таблицу умножения. И, в конце-концов, это помогало в последующем обучении математики, не правда ли? В программировании есть такие же вещи, которые называются "стандарты". Вот эти стандарты и нужно, для начала, зазубрить. А позже и вникнуть, зачем они придуманы.

    2) Методика "объяснение и практика". Вы пишете, что "при таком способе мне приходится одно и тоже глазами несколько раз пробегать чтобы запомнить". Это, с моей точки зрения, в корне не верно. Ибо то, что вам объясняют, не нужно "пробегать глазами" несколько раз, что бы запомнить. Это вообще не нужно запоминать если это не те самые "стандарты"; это нужно осмыслить и понять. После того, как к вам придёт понимание как это работает, зачем и почему это надо -- вы сможете это использовать, осмысленно, в собственном коде.

    3) Платные курсы. Курсы ныне очень разные. Кто-то просто, простите, гребёт бабло на этом всём. А кто-то преподаёт с душой, хорошо и понятно рассказывая. Поэтому платный курс -- это хорошо, но только тогда, простите за тавтологию, когда это хороший курс. Читайте отзывы о курсе, советуйтесь с теми кто его уже прошёл(в идеале) и тогда уже решайте, тот ли этот курс, что даст вам необходимые знания.

    4) ВУЗ. Более 10-ти лет назад, у меня в подчинении, в вебстудии, работал PHP джун. Он доучивался в МГТУ имени Баумана. И он не знал ничего. Совсем. Мне приходилось объяснять ему простейшие вещи, типа что значит иструкция "$a += $b;". Сам же я учился в ВУЗе малоизвестном, на факультете "прикладная информатика в экономике" и наш преподаватель информатики, на первом курсе, на вопрос что значит в коде программы на языке C++ инструкция "с++" ответил, что это "так язык называется". Однако, вскоре ко мне начали ходить сокурсники, с просьбами "а напиши программку". И происходило это потому что я сам загорелся программированием, купил книжки, установил всё что нужно было установить на компьютер и начал "творить волшебство", как это мне тогда виделось, с горящими глазами. Короче говоря не нас учат ВУЗы, а мы учимся в ВУЗах или учимся без них. Тут уж как пойдёт.

    5) Ну и последний, самый важный, с моей точки зрения, пункт. Это Интерес. Если вам интересно программирование, вам нравится разбираться, что-то делать самостоятельно, а не только тогда когда кто-то поставил задачу, то у вас все получится. И как именно это всё учить у вас вопроса, в конце концов, не возникнет. Разбирайтесь, ковыряйте, вникайте и всё будет. Единственное что -- очень желательно, что бы перед вашими глазами были хорошие примеры. Потому что я, в свое время, тоже разбирался, учился и вникал, "гладили по голове", как писали выше в комментариях к одному из ответов, меня уже мои наниматели, потому что я все делал быстро и без ошибок, т.е. работало все так, как было нужно клиентам веб-студии, собеседование в которую я тогда прошел без каких-то проблем. Но вот мой код тогда был, откровенно говоря, тем, что сейчас называется "говнокодом". Потому что некому было мне показать как писать есть хорошо, а как есть плохо.

    Подыдожу -- ключи к быстрейшему развитию в деле разработки это ваш интерес к этому делу, желание им заниматься и примеры хорошего, качественного кода перед глазами. А так же кто-то, кто сможет технически оценить вашу работу и, без агра, с конструктивом, показать и рассказать что вы сделали не так.
    Ответ написан
    25 комментариев
  • Как передать данные от дочернего элемента в родительский React TypeScript?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    https://react.dev/reference/react/useState
    + прокинуть колбэк через пропсы
    в чем проблема то?
    Ответ написан
    Комментировать
  • Какие сейчас тенденции в веб-программировании?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    С тем же успехом можно было спросить "Какие сейчас тенденции в программировании?" Web-разработка - это настолько обширная область, что общие тенденции в ней вряд ли возможны. Если брать относительно узкую категорию "Клепание однообразных говносайтов для ИПшников" то да, агрессивный маркетинг 1С всё ещё держит битрикс на плаву.
    Ответ написан
    2 комментария
  • Чем меньше символов, пробелов и пропусков в коде, тем лучше?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Неправильно.
    Названия переменных и функций должны быть говорящими, чтобы их назначение сразу было понятно. Урезать названия до пары символов, лишь бы было покороче, - очень плохо.
    По пробелам, пустым строкам, отступам и пр. есть стайлгайды - рекомендации по оформлению кода. Например, PSR-1 и PSR-12 для PHP, Google Style Guide и Airbnb Style Guide для JS. В компании может быть принят и какой-то свой стайлгайд.
    Ответ написан
    Комментировать
  • Чем меньше символов, пробелов и пропусков в коде, тем лучше?

    Не правильно.

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

    Как форматировать код — договариваются. Есть общепринятые стандарты форматирования кода (coding style). Например, стандартный для PHP. Или принятый в компании AirBnB для JavaScript.

    Хороший-удобный редактор кода всегда подскажет, где накосячили со стилем вашего кода, почему, и как исправить.
    Ответ написан
    Комментировать
  • Для чего обычно используют wsl в windows?

    vabka
    @vabka
    Токсичный шарпист
    Ответ кроется буквально в названии.
    WSL - Windows subsystem for linux.

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

    Тот же git например работает на Linux быстрее => может быть удобнее создать проект внутри WSL и работать в нём.
    + Сразу получаешь линуксовую консоль, которая работает быстрее, чем powershell.
    + Docker нативно работает
    и прочая и прочая.

    https://learn.microsoft.com/en-us/windows/wsl/about
    Ответ написан
    8 комментариев
  • Как можно запретить отображение рекламы Quiet Media которая вставляется без моего ведома на сайты через HTTP?

    @maksam07
    Установка ssl-сертификата
    Это единственное верное решение по многим причинам. Есть бесплатные сертификаты, которые ставятся за пару минут, но вместо этого вы пытаетесь придумать метод, на реализацию которого уйдет значительно больше времени или нельзя будет реализовать вообще
    Ответ написан
    1 комментарий
  • В каком порядке изучать Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    В том же, в каком и в 2022-м.
    Ответ написан
    1 комментарий
  • Какое оптимальное время въехать в проект?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    От проекта зависит. На моëм проекте например новичкам даже сеньорского уровня до первой простой таски требуется недели две, а выход на 100℅ эффективность занимает 3-6 месяцев.
    Ответ написан
    9 комментариев
  • Работать в IT или продолжить учебу?

    vabka
    @vabka
    Токсичный шарпист
    Ну в общем-то вам в комментариях уже ответили - глупо отказываться от работы, если предлагают. Сейчас выпускнику очень сложно найти работу из-за большой конкуренции среди новичков.

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

    Лучший выход - перейти на заочку и работать.

    Диплом бакалавра пригодится, чтобы потом получить рабочую визу куда-нибудь в ЕС, например или продолжить обучение на магистратуре, если это интересно.

    На мой взгляд, окончательное решение должен решать непосредственно тот, кого это касается
    Ответ написан
    Комментировать
  • Canvas линия и способ её описания?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Canvas – это растр. Нарисованная линия ничем не будет, кроме набора пикселей на холсте.
    Вы можете сохранять параметры линии, по которым сможете нарисовать ее заново. Но вы не можете сохранить саму линию.
    Ответ написан
    1 комментарий
  • Как из массива строк получить те, у которых длина равна 5?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Дурацкому вопросу - дурацкий ответ:

    `${arr}`.match(/\b\w{5}\b/g) || []
    
    // или
    
    arr.reduce((acc, n) => (n.length ^ '0b101' || acc.push(n), acc), [])
    
    // или
    
    arr.filter(n => n[4] && !n[-~4])
    
    // или
    
    arr.filter(RegExp.prototype.test.bind(/^.....$/))
    
    // или
    
    arr.reduce((acc, n) => ((acc[n.search('$')] ??= []).push(n), acc), {})[5] ?? []
    
    // или
    
    (function xxx(arr, i = 0) {
      return arr.hasOwnProperty(i)
        ? [].concat(5 - [].push(...arr[i]) ? [] : arr[i], xxx(arr, i + 1))
        : [];
    })(arr)
    Ответ написан
    Комментировать
  • Вопроса нет, и все?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Uncaught SyntaxError: Unexpected token < in JSON at position 0
    Читаем. Переводим.
    Открываем инструменты разработчика, вкладку нетворк. Отправляем наш гениальный запрос - смотрим в неменее гениальный ответ от сервера, в котором наверняка что-то типа "ой-вей, ваш пхп код полный шлак, в котором ошибок больше чем на помойной кошке блох". Исправляем ошибки, и - о чудо! Все заработало!
    Ответ написан
    Комментировать
  • Как выполнять вычисления с помощью функций (результат вызова предыдущей должен быть аргументом следующей)?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Решаю задачи на codewars, не могу решить задачу с функциями?

    Да, не можете.
    Ответ написан
    Комментировать
  • Что такое signature и implementation?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Сигнатура функции - это по сути ее тип, который состоит из списка аргументов с типами и типа возвращаемого значения.
    Имплементация функции - это функция с телом.
    То есть следующие строки - это сигнатуры:
    function position(): MyPosition
    function position(a:number, b:number): MyPosition
    function position(a:number): MyPositionWithDefault

    Это тоже сигнатура: function position(a?: number, b?:number), но она так же является частью имплементации:
    function position(a?: number, b?:number) {
        if (!a && !b) {
            return {x: undefined, b: undefined}
        }
        if(a && !b) {
            return {x: a, b: undefined, default: a.toString()}
        }
        return {x: a, y: b}
    }


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

    Еще один важный момент для данного примера - это вывод типов. Если где-то тип не указать, то TS попробует его вывести, но делает он это весьма топорно - из первого значения которое будет присвоено переменной, ну и из первого return если речь идет о выводе возвращаемого значения функции.
    В Вашем случае TS выведет возвращаемое значение имплементации из следующей строчки: return {x: undefined, b: undefined}
    Тип такого значения будет:
    interface ReturnTypeOfPosition {
      x: undefined
      b: undefined
    }
    Проблема тут в двух вещах, во-первых в поле b вместо поля y, во-вторых в отсутствии поля default.
    Если исправить так:
    function position(): MyPosition
    function position(a: number, b: number): MyPosition
    function position(a: number): MyPositionWithDefault
    function position(a?: number, b?: number): MyPosition | MyPositionWithDefault {
        if (!a && !b) {
            return {x: undefined, y: undefined}
        }
        if(a && !b) {
            return {x: a, y: undefined, default: a.toString()}
        }
        return {x: a, y: b}
    }
    то все будет ок

    Ну и еще важный момент про перегрузки, TS использует в месте вызова ту перегрузку, которая первой подошла по аргументам, пробуя их в том порядке, как они записаны у Вас в коде, сверху вниз. Соответственно остальные типы в месте вызова будут выводится из данного факта.

    P.S. у меня в профиле есть ссылка на доклад по системе типов TS, про перегрузки там тоже есть. Система типов в TS полностью построена на математике множеств, если понять эту математику, то поймете и TS.
    Ответ написан
    2 комментария