• Программирования учат или применяют?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    Для себя - скорее применять. Учи то что тебе надо. Решай проблемы по мере их поступления, скажем так.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для того чтобы делать свой сайт - можно не учиться. Просто начать делать.

    А для прохождения собеседования в компанию - желательно пройти платный курс. Почему именно курс?
    Потому что будет покрытие всех тем. И будет мотивация его закончить.

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

    Программирование это по сути просто подробное описание процесса или объекта (в случае с html, например), на каком-то языке.

    Можно ли хорошо владеть языком не зная теории? В принципе - да. Говорите же вы на русском и понимаете его не зная например всех его падежей.

    Можно ли владеть языком на самом высочайшем уровне? Легко. Гомер или Шекспир не дадут соврать. Но Гомеров и Шекспиров в истории человечества было ровно по одному. Да я тягались они со своими современниками так же ничего не знавшими о теории языков на которых они писали. Может ли современный писатель или поэт стать классиком не будучи знакомым с теорией языка? Может. Но без теории написания текстов - вряд ли. Вам будет сложно написать интересную книжку или сценарий фильма, не будучи знакомым хотя бы с "Морфологией волшебной сказки" Проппа.

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

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

    Griboks
    @Griboks
    Всё неправильно, потому что вы видео смотрели на ютубе. А надо было в тиктоке - тогда бы сразу выучились на джуна после просмотра.
    Ответ написан
    5 комментариев
  • Программирования учат или применяют?

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

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

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

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

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    Лучше использовать
    overflow:auto;
    codepen.io/iiil/pen/gekjD
    Тогда скролл появится только при превышении контента.
    В случаях, предложенных @somenumboola скролл будет всегда.
    codepen.io/iiil/pen/sqEdm
    Ответ написан
    Комментировать
  • Какова синтаксическая ошибка MySQL?

    vabka
    @vabka
    Токсичный шарпист
    У тебя скобки не закрыты
    Ответ написан
    2 комментария
  • Логирует ли провайдер что подключение идёт по рдп?

    @Nikolae
    Провайдер может логировать информацию о том, что происходит на вашем подключении, включая то, что вы используете RDP (Remote Desktop Protocol), чтобы удаленно подключаться к другому компьютеру. Обычно провайдеры могут видеть, какие порты вы используете для связи, и на основе этой информации могут догадаться, что вы используете RDP.

    Если вы используете защищенное соединение HTTPS для подключения к серверу, то провайдер не будет видеть содержимое вашего трафика, включая доменное имя сервера, которому вы подключаетесь. Он сможет видеть только IP-адрес сервера, с которым вы устанавливаете связь. Однако, если провайдер использует Deep Packet Inspection (DPI), он может обнаружить, что вы подключаетесь к определенному серверу, основываясь на метаданных ваших пакетов, таких как IP-адрес и порты назначения.
    Ответ написан
    3 комментария
  • Какие программы есть для автоматизации действий в веб браузере?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    AutoIt
    Selenium
    Sikuli Ссылка удалена модератором. - похоже, что самый простой
    Ответ написан
    1 комментарий
  • Какие программы есть для автоматизации действий в веб браузере?

    3vi1_0n3
    @3vi1_0n3
    Посмотрите Ссылка удалена модератором. Selenium IDE. Похоже на то, что надо?
    Ответ написан
    1 комментарий
  • Как авторизовывать запросы между микросервисами?

    vabka
    @vabka
    Токсичный шарпист
    Пусть будет какой-то один сервис авторизации, который выдаёт jwt токены
    Ответ написан
    2 комментария
  • Как авторизовывать запросы между микросервисами?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    В минимальном варианте, как уже подсказали, микросервис может обращаться к чему-нибудь типа Keycloak с реквизитами системного пользователя, получать соответствующий токен и потом добавлять его в запросы к другим микросервисам. Если система здоровенная, микросервисов много и требований к безопасности тоже, то стоит поднять service mesh и возложить эту функцию на неё.
    Ответ написан
    Комментировать
  • Как сделать синхронный запрос через fetch?

    Immortal_pony
    @Immortal_pony Куратор тега JavaScript
    1. Можете воспользоваться XMLHttpRequest вместо fetch. В методе open можно явно указать, что запрос необходимо сделать синхронно. Подробная документация тут: https://javascript.info/xmlhttprequest
    2. Можете воспользоваться тем что fetch возвращает promise и написать свой код соответствующим образом. Вы уже почти это сделали когда решили возвращать результат выполнения fetch. Осталось чуть-чуть, примерно так:

    getDataByINN(myPersonPars['INN']).then((suggestion) => {
        const myCompany = suggestion
    })
    Ответ написан
    4 комментария
  • Как сделать запросы к api синхронными?

    IgorPI
    @IgorPI
    Недавно такая же проблема была.
    Всё тот же await, но только конкретная реализация.

    Фишка в том, что запросы будут оставаться асинхронными, но только после того как будет выполнено условие

    Выдернул непосредственно из проекта

    spoiler

    import { app } from '@/main'
    import { Cookie } from '@/plugins/cookie'
    import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
    import Vue from 'vue'
    import { sleep } from '@/Utils'
    
    // Full config:  https://github.com/axios/axios#request-config
    // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
    // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
    // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    
    /* eslint-disable */
    const config = {
      baseURL: process.env.VUE_APP_API,
      timeout: 30000,
      validateStatus (status: number) {
        return status < 500 // Resolve only if the status code is less than 500
      }
    }
    /* eslint-enable */
    
    const _axios: AxiosInstance = axios.create(config)
    const cookie: Cookie = new Cookie()
    let isRefreshTokenProcess = false
    const promises: any[] = []
    /* eslint-disable */
    // @ts-ignore
    _axios.interceptors.request.use(async (config: AxiosRequestConfig): AxiosRequestConfig | Promise<AxiosRequestConfig> => {
    
      // todo: set locale optional
      config.headers.Language = 'ru'
    
      if (isRefreshTokenProcess) {
        console.log('%c%s', 'color: red;', `Запрос ${config.url} ожидает обновление токена...`)
        promises.push(new Promise(async (resolve) => {
          while (isRefreshTokenProcess) {
            await sleep(500)
          }
          console.log('%c%s', 'color: green;', `Запрос ${config.url} разрешён!`)
          resolve()
        }))
        // This is process update token
        await Promise.all(promises)
      }
    
      if (cookie.has('access_token')) {
          config.headers.Authorization = `Bearer ${cookie.get('access_token')}`
          return config
        } else {
          if (cookie.has('refresh_token')) {
            console.log('%c%s', 'color: blue;', 'Обновление токена...')
            isRefreshTokenProcess = true
            await axios.post(`${process.env.VUE_APP_API}/account/authorization/refresh-token`, {
              refresh_token: cookie.get('refresh_token')
            }).then((response: AxiosResponse) => {
              if (response.status === 200) {
                cookie.set('access_token', response.data.access_token, { 'max-age': 600, 'path': '/' })
                cookie.set('refresh_token', response.data.refresh_token, { path: '/' })
                config.headers.Authorization = `Bearer ${cookie.get('access_token')}`
              }
            }).catch(() => {
              app.$router.replace({ name: 'login' }).then()
            })
          }
          isRefreshTokenProcess = false
          return Promise.resolve(config)
        }
      },
      function (error) {
        // Do something with request error
        return Promise.reject(error)
      }
    )
    /* eslint-disable */
    /*
      Array of patterns to ignore status checks.
     */
    
    // Add a response interceptor
    _axios.interceptors.response.use(
      (response): Promise<AxiosResponse> | any => {
        if (response.status === 401) {
          return app.$router.replace({ name: 'login' }).finally(() => Promise.reject(response))
        } else {
          return response
        }
      },
      function (error) {
        // Do something with response error
        return Promise.reject(error)
      }
    )
    
    class AxiosPlugin {
      public install () {
        Object.defineProperties(Vue.prototype, {
          axios: {
            get () {
              return _axios
            }
          },
          $axios: {
            get () {
              return _axios
            }
          }
        })
      }
    }
    
    const axiosPlugin: AxiosPlugin = new AxiosPlugin()
    
    Vue.use(axiosPlugin)
    
    export default axiosPlugin
    export const $axios: AxiosInstance = _axios



    Работает следующим образом.
    Токен хранится в куках, с меньшим временем хранения, то есть с куков будет удалён раньше чем протухнет на сервере.

    Перед выполнением запроса, мы проверяем, есть ли токен в куках, если нет то обновляем с помощью refresh_token.
    Так же выставляется флаг, мол в процессе обновления токена и все последующие запросы помещаются в массив промисов.
    Далее в цикле проверяем, можно ли разрешить промис если да то выдыхаем и запросы ушли на сервер.
    Ответ написан
    4 комментария
  • Какие существует IDE для создания оконных приложений на разных языках программирования?

    Stalker_RED
    @Stalker_RED
    Вообще список IDE легко найти https://en.wikipedia.org/wiki/Comparison_of_integr...
    Но в нем нет разделения на те что могут в GUI, и те что не могут.
    Вы может для начала выберите платформу/язык/фреймворк на котором хотите создать GUI, а потому же IDE под эту платформу подбирайте?
    Ответ написан
    Комментировать
  • Какой хостинг выбрать для web проектов на java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Придется научиться все делать ручками!
    Поставить томкат и nginx например. В томкате есть админ-панелька, но с ней тоже нужно разобраться. В ней можно war-файлы публиковать...
    Поставить letsencrypt или вместо nginx поставить caddy, или haproxy.
    Ну и я вообще не понимаю, зачем все эти панельки нужны, они все делают из рук вон плохо. Причем, один раз разобравшись, эти панельки нафиг не нужны!
    Да и смысла большого в war-файлах не вижу уже лет 10! Есть и spring, и vertx, и sparkjava, и с десяток всего другого, вместо толстых контейнеров.
    Есть даже OSGI типа apache karaf и eclipse equinox!
    Ответ написан
    5 комментариев
  • Не получается загрузить видео на VK через REST API и httpclient (java) - на POST сервер возвращает HTTP 406 Not Acceptable. В чем может быть проблема?

    @sherlock342342 Автор вопроса
    Проблема в неполной документации VK REST API. В ней ничего не сказано про то-что по каким-то причинам сервису по загрузке видео не нравится Transfer-Encoding: chunked

    Аналогичные сервисы VK по загрузке фото, аудио или документов пока не замечены в подобном.

    После модификации кода использующего java httpclient и указанием конкретного Content-Length (что выключает chunked режим) - все заработало.

    Надеюсь кому-то будет полезно.
    Ответ написан
    Комментировать
  • Как организовать юзер-сервис в виде микросервиса?

    отдельный микросервис чтобы он раздавал токены, авторизовал, следил за ролями и пр.

    Это работа для сервера авторизации, есть достаточно хороших готовых решений типа Keycloak которые достаточно легко интегрировать.

    Взаимодействие фронт-бэк происходит так:
    1. Фронт перенаправляет пользователя в Keycloak для авторизации
    2. Пользователь авторизовывается
    3. Keycloak возвращает пользователя обратно на фронт с токеном в JWT формате и подписью (JWS)
    4. Фронт делает авторизованные запросы в бэк с помощью этого токена
    5. Бэк, используя публичный ключ из Keycloak, валидирует подпись токена и убеждается, что он не просрочен
    6. Базовая информация о пользователе, Scope и его Roles находятся в токене, их можно использовать для валидации доступа к эндпойнтам бэка и понимать, кто авторизован
    Ответ написан
    5 комментариев
  • Почему scanner пропускает некоторые строчки в коде?

    Дело в том, что Scanner#nextInt считывает только цифровое значение без перехода на новую строку. Таким образом выходит, что последующий вызов Scanner#nextLine видит новую строку за счёт того, что ты нажал Enter вводя число.

    Используй для всех инпутов Scanner#nextLine и конвертируй полученную строку в нужный тип.
    System.out.println("Введите код путевки");
    l[p].code = Integer.parseInt(scanner.nextLine());
    Ответ написан
    2 комментария
  • Как добавить в массив в мапе?

    libalex
    @libalex
    Backend / Android Developer (Java, Kotlin)
    Ну, например так
    if (mapa1.containsKey(assigneeMail)) {
        ArrayList<Payload1> payloads = mapa1.get(assigneeMail);
        payloads.add(new Payload1(it.getSummary(), it.getKey(), it.getDescription(), it.getAssignee().getDisplayName()));
        mapa1.replace(assigneeMail, payloads);
    } else {
        mapa1.put(assigneeMail, new ArrayList<>(List.of(new Payload1(it.getSummary(), it.getKey(), it.getDescription(), it.getAssignee().getDisplayName()))));
    }

    С Java 8 в Map появился метод merge ещё.
    Ответ написан
    1 комментарий