• Лучший ресурс для изучения React?

    theobroma
    @theobroma
    javascript developer (ReactJS)
    Ответ написан
    Комментировать
  • Что делать если новая работа не нравится?

    @habralover0
    не могли бы Вы написать статью на хабр?
    уверен что многим было интересно узнать про Ваш проект
    Ответ написан
    Комментировать
  • Что делать если новая работа не нравится?

    @Nethersex Автор вопроса
    UPDATE:
    В итоге я уволился, нашел работу по душе
    Ответ написан
    Комментировать
  • Vscode текстовый редактор или ide?

    longclaps
    @longclaps
    Ответ написан
    Комментировать
  • В чем разница императивного и декларативного подхода в javascript? Это процедурный и ООП стили?

    @pikkvile
    developer
    Моё понимание такое.
    Декларативное программирование - это когда в коде описано что должно получиться, а императивное - когда написано как это сделать. Т.е. в первом случае мы совершенно не интересуемся, каким именно образом машина сделает работу, какие инструкции в каком порядке выполнятся и так далее, мы просто объясняем ей, что хотим увидеть в результате. Примеры декларативных языков - html, css, sql, конфиг nginx. Ещё тут стоит упомянуть функциональные языки (lisp, haskell), программы на них тоже, как правило, являются описанием (декларацией) того "что должно получиться". Ну, короче говоря, мы говорим компьютеру: вот смотри, мне надо чтобы было так, а как ты это сделаешь, мне не интересно. Аналогия такая: у меня есть чертёж бани, я даю его бригаде строителей и уезжаю. Как именно они там будут таскать брёвна, пилить доски и прочее - я не в курсе.
    Программируя императивно, мы описываем конкретные шаги, действия и точный порядок, в котором их нужно исполнять. Напрямую руководим процессом, непосредственно отдаём приказания. Примеров масса, большинство популярных языков императивны, в том числе и javascript. Ты пишешь: вот, сделай-ка переменную myVar, потом запиши туда число 5, повторяй это до тех пор, пока что-то не случится... и так далее. Возвращаясь к примеру с баней, ты теперь - начальник бригады, именно говоришь какое бревно куда класть.
    Что касается процедурного и объектно ориентированного стилей, это немного о другом. Я бы сказал, что это два разных способа писать императивные программы. В процедурном случае мы организуем код, наши команды (приказы машине) в виде процедур. Процедура - набор команд. Это довольно простой способ организации кода и исторически более ранний. ООП - это чуть более сложный подход к организации кода, когда мы группируем инструкции и данные, которыми они манипулируют, вместе. Объект - это состояние (данные) плюс поведение (набор методов). Но это уже немного другая история.
    Ответ написан
    2 комментария
  • Что такое ElasticSearch?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Знаете, я с вами соглашусь, что хорошую вводную по Elastic трудно найти. Пока сам не переварил доков и не набил шишек многие элементарные понятия оставались для меня неясными. Поэтому вот моя вводная: Elastic можно использовать как NoSQL БД, только надо быть внимательным, т.к. всё-таки его основная задача поиск, а не удовлетворение функций БД. Например, если вы не настроили хранение исходных данных, а только индексацию, то свои данные вы уже не извлечёте из него. НИКОГДА. Только отдельные выражения, удовлетворяющие условиям поиска. Всё, тупик. Так же нельзя повторно индексировать уже загнанные в него данные. Т.е. перед загрузкой данных надо грамотно настроить индексацию, т.к. перестроить индекс, как это делается в реляционной БД невозможно. Нужно придумать новую схему индексации и перезалить данные в Elastic. Именно поэтому основное использование Elastic - как дополнение к существующей БД из которой данные можно перезалить по одному или полностью в Elastic (можно, конечно сделать схему Elastic->Elastic, но тоже есть нюансы).
    Ещё пару слов про схему. Это ЛОЖЬ, что в Elastic нет схемы данных. Она как раз есть и ооочень жёсткая. Жёсткая до того, что однажды определив, вы не сможете её поменять. Изначально Elastic оказывает медвежью услугу, разрешая вам дополнять схему по-умолчанию, но когда вы разберётесь с этой темой, то можете обнаружить, что Elastic "понастроил" такого у себя внутри, что остаётся только охреневать и переделывать всё явно, отказавшись от его "услуг" по автоматическому добавлению полей в схему.
    Так же в Elastic очень непросто строить сложные запросы на поиск и агрегатные запросы. Совершенно неинтуитивно. Но если освоитесь, то будет вам счастье. )))
    Несмотря за такие "страшные" вещи - Elastic классная система и по производительности агрегатных запросов не уступает платной версии MSSQL в поиске в многопроцессорных системах (проверял на одинаковых аппаратных конфигурациях с 16 ядрами). Так что если вам хочется большую скорость в агрегатных запросах и главное - это бесплатность, то берите и осваивайте Elastic. Мощности и возможности у него огромные. Но... нужно потратить приличные усилия на изучение.
    Ответ написан
    1 комментарий
  • Django vs Flask? для новичка, и не совсем стандартных задач?

    pinkevich
    @pinkevich
    Developer
    Как по мне, то Django нужно знать по дефолту, а потом уже все остальное. Из кучи либ для Flask можно склепать тот же Django, но кривой и не удобный.
    Ответ написан
    Комментировать
  • Где найти идеи для учебных проектов для наработки навыков и портфолио веб-разработчика?

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

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Я лечу циклические импорты выделением в отдельный модуль объектов, которые нужны "всем" и оттуда их портирую. Зачастую это можно сделать, но иногда приходится долго прыгать по файлам, выясняя кто кого когда портировал.

    Еще способ избегания циклов - портировать "по месту", например прямо в теле функции, юзающей библу. Минусы - импорты раскиданы по коду и сложно сделать рефактор при изменении модуля, который портируется. На производительность это не влияет (ну или минимально влияет), так как реальный импорт-парсинг происходит только при первом выполнении оператора import, а далее юзается .pyc файл.

    Кстати в Django можно юзать строку названия модели вместо самой модели, например:
    class GoalReach(MyAbstractModel, TestFactoryBoy):
        ....
        visit = ForeignKey('Visit', null=True, blank=True, related_name='goal_reached', on_delete=CASCADE)
       .....

    Visit - это модель из другого модуля, она записана как 'Visit' (в кавычках) при старте django её находит через installedapps
    Ответ написан
    Комментировать
  • Хватит ли такого ноута для средней сложности веб разработки?

    lamer350
    @lamer350
    กำลังสูงสุด
    Не согласен с предыдущим автором, у меня 15ка в phpStorm нагружается сильно как оказалось на проц из за ретины екрана. Вы хотите купить 2х ядерный макбук в 2х ядерным процессором... Для IDE, как по мне, этого будет мало!
    Стоит обратить внимание уже на macbook pro 13" 2018 с тачбаром, в нем уже i5 4х ядерный и при этом мощнее моей 15ки 16го года c i7!
    Ответ написан
    4 комментария
  • Как выложить Python проект на github?

    • Нужно сформулировать setup.py скрипт: https://docs.python.org/3/distutils/setupscript.html
    • Выбрать лицензию, в кратце узнать суть разных лицензий можно на сайте https://tldrlegal.com/
    • Написать информативный README файл, примеров навалом. Желательно в Markdown-разметке.
    • Обязательно нужно написать gitignore файл, чтобы этот самый .exe файл небыл добавлен в репозиторий.

    Когда всё готово, можно залить на GitHub. Об этом ещё можно узнать тут: https://help.github.com/
    Ну и конечно, лучше знать как работать с Git в принципе: www.git-scm.com/documentation
    Ответ написан
    Комментировать
  • Как объединить несколько QuerySet в один без повторений?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Чтобы убрать повторения, можно преобразовать QuerySet в множество
    tagnews = set(tag_tag | tag_city | tag_country)
    Но лучше вместо трёх запросов сделать один
    from django.db.models import Q
    tagnews = Entry.objects.filter(Q(tags__slug=slug) | Q(to_city__name_en=slug) | Q(to_city__country_code__name_en=slug))
    Ответ написан
    2 комментария
  • Что такое webhook?

    Negezor
    @Negezor
    Senior Shaurma Developer
    Webhook — механизм оповещения системы о событиях.

    Допустим есть определённый сервис который должен оповещать о событиях когда они происходят.
    Как вариант постоянно запрашивать новые данные на сервере, минус будет скорее в скорости получения данных если на сервере например стоит задержка на получения новых оповещений.
    А вот webhook исправляет этот недочёт, когда происходит событие он запрашивает адрес сайта с параметрами, например example.com/webhook/notification и передаёт в теле POST запроса JSON (зачастую) и там будут свежие данные.

    Простой пример можно посмотреть: создание бота для telegram на webhooks.
    Ответ написан
    4 комментария
  • Как сделать таблицу из аррея через map (приложение на React)?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    import React, { Component } from 'react'
    
    export default class App extends Component {
    
      render() {
        const data = [
          {'name': 'Education', 'number': 33},
          {'name': 'Promotion', 'number': 10},
          {'name': 'Events', 'number': 55 }
         ]
    
        let tableTemplate;
    
        function makeColumns(row) {
          return <td>{row.name} {row.number}</td>
        }
    
        tableTemplate = data.map((row, i) => {
          return <tr key={i}>{makeColumns(row)}</tr>
        })
    
        return (
          <table>
            <tbody>
              {tableTemplate}
            </tbody>
          </table>
        )
      }
    }


    ES5 код ниже

    import React, { Component } from 'react'
    
    export default class App extends Component {
    
      render() {
        var data = [
          {'name': 'Education', 'number': 33},
          {'name': 'Promotion', 'number': 10},
          {'name': 'Events', 'number': 55 }
         ];
    
        var tableTemplate;
    
        function makeColumns(row) {
          return <td>{row.name} {row.number}</td>
        }
    
        tableTemplate = data.map(function(row, i) {
          return <tr key={i}>{makeColumns(row)}</tr>
        });
    
        return (
          <table>
            <tbody>
              {tableTemplate}
            </tbody>
          </table>
        )
      }
    }
    Ответ написан
    2 комментария
  • Сервер из ноутбука стоит ли делать?

    Melkij
    @Melkij
    PostgreSQL DBA
    А почему нет?
    Если производительности достаточно и с охлаждением нормально — хороший вариант. Низкое энергопотребление, встроенный UPS.
    Ответ написан
    Комментировать
  • Как в javascript избежать мутации аргументов?

    ruddy22
    @ruddy22
    Спасение утопающих — дело рук самих утопающих
    распространенный side-effect при вызове функции возвращается undefined.
    мутация обусловенна тем, что в js большая часть того с чем мы работаем - это ссылки на объекты.
    а значит, вызывая splice(), получаем мутатор объекта, тем самым меняем его(объект, в частности - массив).
    чтобы ее избежать, следите за тем, как обрабатывете данные, либо используйте библиотеки вроде immutableJS.
    Ответ написан
    Комментировать
  • Как сменить id TeamViewer на MACOS?

    banana_power
    @banana_power
    На макос тоже есть скрипты для смена ID: forum.ru-board.com/topic.cgi?forum=35&topic=34611&...
    На 11 версии работает. На 12 пишут что тоже, но сам не проверял, т.к. использую еще 11.

    upd.: если нет регистрации на ру-борде

    Инструкция:

    1. Закрываем полностью TeamViewer
    2. Запускаем скрипт от рута sudo ./TeamViewer-id-changer.py
    3. Перезагружаемся


    https://gist.github.com/zhovner/b1d72f3465c46e7b58...
    Ответ написан
    2 комментария
  • Как бороться с setState в React?

    Hardwit
    @Hardwit
    Front-end Developer
    В твоём коде setState дергается раньше, чем резолвится\реджектится промис. Соответственно в объекте message на момент вызова setState все еще находится старой состояние. Исправь вот так:
    handleSubmitForm(event) {
      event.preventDefault();
    
      let message = Object.assign({}, this.state.messages);
    
      axios.post('/articles/add', {
        title: this.state.articles.title,
        content: this.state.articles.content
      })
        .then(function(response) {
          message.success = true;
    
          this.setState({
            messages: message
          });
        })
        .catch(function(error) {
          message.error = error;
    
          this.setState({
            messages: message
          });
        });
    }
    Ответ написан
    2 комментария
  • Что такое фикстуры и миграции?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Фикстуры - это по сути тестовые данные. Они нужны для unit-тестирования. Это могут быть как данные в базе, так и обычные файлы (обычно 2 варианта, до и после обработки так скажем). Каждый раз когда запускаются тесты, эти данные используются для установления начального состояния системы, что бы тесты всегда выполнялись предсказуемо.

    Для функционального тестирования (тестрирование контроллеров, интаграционных тестов) фикстуры не применяются, хотя суть там так же сходна. Если честно, то тут мнение расходится. Одни говорят что при функциональных тестах нельзя использовать даже моки, то есть система в процессе выполнения тестов полностью создает то состояние которое необходимо для других тестов. Например последовательное выполнение тестов на добавление статьи и ее просмотр. Другие же предпочитают для каждого тесткейса выставлять состояние с нуля. По сути это схоже с использованием фикстур, но реализация различается. У вас есть некое api для заполнения данными (скажем метод добавляющий пользователя), и перед выполнением тест-кейса происходит ресет данных и заполнение их новыми. Плюсы так же есть - можно распаралелить выполнение тестов. (но не верьте мне на слово)

    Миграции - механизм организации версионности структуры проекта. Вы можете написать миграцию для изменения местоположения статики (картинки, поменять ссылки в базе и т.д.), или же у вас добавляется новая таблица/поле. Обычно дополняется обратной миграцией, которая восстанавливает исходную структуру. Обязательно для работы в команде или при частом изменении организации данных в проекте, вообще я бы посоветовал использовать их всегда.
    Ответ написан
    Комментировать
  • Аватар отправителя email?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Магией =)
    Если внимательно присмотреться - то не все почтовики показывают аватары всех других почтовиков (грубо говоря для примера, если мейл.ру показывает аватары с яндекса, то нифига не факт, что рамблер их тоже показывает).

    У каждого почтового хостинга есть некая http-ручка (стандарта на эту тему нет), в которую можно придти с ящиком и получить его аватар. Обычно, ручки закрытые для публичного доступа. Часть компаний открывает эти ручки публично и упоминает их в документации, часть компаний открывает их только по специальному запросу.

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