• Почему bitbucket не заливает файлы по ssh?

    svetozar
    @svetozar
    dudin.tv
    Надо добавить ваш публичный ключ (содержимое из id_rsa.pub) в настройки bitbucket:

    c5294353a8fe486480073e7600d6eac9.png
    Ответ написан
    1 комментарий
  • Хранение деревьев в Mysql какие есть способы?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    Существует 4 основных способа хранения деревьев в реляционной БД:

    Adjacency List - описан @Satanpit.

    Matherialized Path - полный путь до узла хранится в виде строки типа 0035.0993.7324.1256 (т.е. узел верхнего уровня содержит строку 0035, узел второго уровня - строку 0035.0993 и т.д.)

    Nested Set - для каждого узла хранятся 2 числа: левый и правый индексы. Причём левый индекс узла меньше левого индекса любого потомка этого узла, а правый индекс соответственно больше.

    Closure Table - отдельно храним данные, отдельно иерархию.

    А ещё есть комбинации этих способов.

    По всем этим способам в рунете (в том числе на хабре) существует большое количество информации.
    Ответ написан
    2 комментария
  • Задача на Python?

    @Teslaman
    Задача скучная, поэтому я написал программу для генерации программ для решения этой задачи.

    Чтобы получить программу, решающую твою задачу, скопируй следующий код в файл с расширением ".py" и запусти. Скрипт создаст новый скрипт task.py, в котором будет решение твоей задачи.

    import sys
    
    
    def main(programmers: int):
        with open("task.py", "w") as f:
            f.write("a = int(input('Введите количество программистов: '))\n\n")
            f.write(f"if a == 0:\n\tprint(0, 'программистов')\n")
            for i in range(1, programmers + 1):
                programmers = "программист" + get_ending(i)
                f.write(f"elif a == {i}:\n\tprint({i}, '{programmers}')\n")
            print("Твоя программа готова! Запусти её командой: python task.py")
    
    
    def get_ending(num: int) -> str:
        if num % 100 in {11, 12, 13, 14}:
            return "ов"
        elif num % 10 in {0, 5, 6, 7, 8, 9}:
            return "ов"
        elif num % 10 in {2, 3, 4}:
            return "а"
        elif num % 10 in {1}:
            return ""
        else:
            raise AssertionError("Unexpected error")
    
    
    if __name__ == '__main__':
        try:
            programmers = abs(int(input(
                "Для какого количества программистов сгенерировать решения?\nВведи целое число: ")))
        except ValueError:
            print("Количество программистов должно быть целым числом!")
            sys.exit(1)
        main(programmers)
    Ответ написан
    2 комментария
  • Как изучить язык баз данных SQL?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Книги это, конечно, здорово, но как показывает практика, большинство книги либо забрасывает, либо просто читает и не особо новые знания впитывает. (если речь о начинающих разработчиках, которые прям с нуля начинают книгу читать)

    А самый логичный способ что-то изучить - это практика, практика и еще раз практика. Если нет реального проекта с реальными проблемами - рекомендовал бы пару ресурсов: sql-ex и pgexercises, там можно поработать как с совсем простыми и примитивными запросами, так и с гораздо более сложными.

    Ну а овладев азами можно уже и книгу брать, чтобы закрыть пробелы, либо документацию по конкретной СУБД
    Ответ написан
    3 комментария
  • Как валидировать ответы от API в redux (в частности react native)?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Начну с конца:

    3) можно сделать функцию helper, типа check status
    приведу пример кода из старого проекта (не async / await, но не суть)
    export function checkStatus(response) {
      let json = response.json() // http://stackoverflow.com/a/29475662/1916578
    
      if (response.status >= 200 && response.status < 300) {
        return json
      } else {
        return json.then(window.Promise.reject.bind(window.Promise))
      }
    }
    
    export function httpGet(url) {
      return fetch(url, {
        headers: buildHeaders(),
      })
      .then(checkStatus)
    }


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

    2) проверять необходимо всегда, чтобы пользователь понимал что происходит:
    - вероятно у вас отпал инет
    - на сервере ошибка, попробуйте еще раз

    Думаю, стоит это начинать делать в catch у каждого запроса

    1) если API не ваше - то делайте проверки, какие посчитаете нужными

    Если API ваше, то проверки тоже необходимо делать, но в основном это нужно для обработки ошибок от сервера/сети.
    Ответ написан
    Комментировать
  • Как обойти особенность работы состояний в React для валидации инпута?

    @SeaBreeze876
    Front-end разработчик
    Можно заметить что onChange не возвращает текущий введенный символ в событие.

    в событии есть последний введенный символ, его нет в стейте сразу после вызова setState
    handleChange(event) {
        this.setState({value: event.target.value});
        console.log(this.state.value);
      }

    метод setState асинхронный, и принимает вторым параметром колбэк
    если делать вот так, то все будет норм
    handleChange(event) {
        this.setState({value: event.target.value}, () => console.log(this.state.value));
      }

    не вижу никаких проблем с валидацией
    Ответ написан
    1 комментарий
  • Loop (for) vs forEach почему выдает разный результат?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    for проходит по массиву, и ничего не возвращает. map проходит по массиву, и возвращает массив элементов из return
    UPD: Если вы в forEach пишите return, но вы не выходите из функции almostIncreasingSequence, вы типа делаете continue для цикла, и он продолжается, и в итоге функция возвращает return true
    Вот примеры:
    // Вернет 0, цикл завершится
    function testFor() {
       for(var i = 0; i < 10; i++) {
          return i;
       }
    }
    // Вернет 2,4,6, т.к. map создает новый массив на основе результатов функции для каждого элемента массива
    function testMap() {
       return [1,2,3].map(function(el) { return el*2; });
    }
    // Не вернет ничего. переданная функция будет вызвана для каждого элемента массива. 
    // return просто выходит из цикла.
    function testForEach() {
       return [1,2,3].forEach(function(el) { return el; });
    }
    Ответ написан
    Комментировать
  • Каким образом можно использовать this.props в Root компоненте?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Provider передает данные store в контекст.
    connect использует эти данные, поэтому использовать этот HOC можно только в компонентах дочерних Provider.
    Вам надо немного реорганизовать структуру:
    import { render } from 'react-dom';
    import {createStore} from "redux";
    import rootReducer from "../reducers";
    import Auth from './components/Auth';
    
    const store = createStore(rootReducer);
    
    render(
      <Provider store={store}>
        <BrowserRouter>
          <Auth />
        </BrowserRouter>
      </Provider>, 
      document.getElementById('root'),
    );


    import React, {Component} from 'react';
    import {connect} from 'react-redux';
    
    class Auth extends Component {
      render() {
        return (
          <Switch>
            <Route exact path={this.props.api.signin} render={() => Test}/>
          </Switch>
        );
      }
    }
    
    
    const mapStateToProps = state => ({
      api: state.api,
    });
    
    export default connect(mapStateToProps)(Auth);
    Ответ написан
    Комментировать
  • Как рендерить react компонент с html?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Неправильный подход к разработке. Варианты, как это сделать правильно:
    1. Данные забираются Ajax запросом по API
    2. Если хотите отдавать данные со страницей, можно записать в любой тег в атрибут data-state или в тег скрипт, в ключ window.__data
    3. Можно написать node сервер с SSR и делать рендер на стороне сервера.
    Ответ написан
    Комментировать
  • Как хранить в бд id socket'a для отправки сообщений?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Не нужно хранить в базах, храните в памяти, нода тоже всегда в памяти, не обязательно обращаться к внешнему процессу типа редиса. Если же процесс парадет, то и его соединения падают и эти ID уже ни кому не нужны. Если процессов несколько, то используйте шины сообщений, ZeroMQ, RabbitMQ и т.д.
    Ответ написан
  • Спиннер для Spa приложения?

    vicodin
    @vicodin
    Имею некоторый опыт
    Возьмите любой css-спиннер повесьте его с бэкдропом в главном компоненте над всем остальным, и показывайте его только когда state.loading === true

    В своих экшн-криейторах или сагах, или где вы там делаете фетчинг - в начале запроса устанавливайте loading в true, а в конце в false(при ошибке тоже).
    Ответ написан
    Комментировать
  • Как правильно спроектировать MYSQL для чата на node.js?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вы неправильно рассматриваете систему чатов.
    В чатах есть комнаты, внутри комнат сообщения и участники.
    Тет-а-тет это приватная комната с 2-ми участникам.

    room 
    - id
    - name
    - private
    
    participant (участник чата)
    - id
    - name
    
    roster (список участников чата)
    - room_id
    - participant_id
    
    history (история сообщений)
    - id
    - room_id
    - participant_id
    - timestamp
    - type (тип сообщения, иногда нужны системные сообщения от ботов)
    - text
    - deleted


    А теперь вперед - учить JOIN'ы!

    По поводу нагрузки - при правильном проектировании приложения, нагрузка на базу будет минимальной, преимущественно проверки, кто принадлежит к какой комнате и запись в историю.
    Сколько-нибудь значимая нагрузка будет при 10к человек онлайн. Поверьте, это очень большая посещаемость.
    При большей посещаемости ваша проблема будет решена горизонтальным масштабированием (шардингом БД).
    Ответ написан
    Комментировать
  • Агрессивное собирание инфы о пользователе через браузерный js?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сбор инфы - только для троллинга ЦА к покупке вашего продукта (Или нет?!)
    Не нужно тратить время на тех, кто пришёл просто, чтобы потролить вас.

    Как делаю я:
    вешаю краткое назначение продукта и текст:
    "Мы продаём только тем, кому это нужно. Всем остальным - просьба не беспокоить.
    Если Вы заинтересованы и Вам это реально нужно - заполните следующие поля формы:"
    и тут форма на 2 поля и кнопка "Без вопросов".

    Всё остальное - нах не сдалось!
    Задача, не насобирать бесполезной инфы, а сразу получить АДЕКВАТНЫХ ЦЕЛЕВЫХ клиентов, которые купят с вероятностью более 80% ваш РЕАЛЬНО НУЖНЫЙ ПРОДУКТ/УСЛУГУ!
    (Или я что-то путаю?!)

    PS: мне вообще не интересно его: имя, ник, пол, возраст, друзья и кол-во ласт, если он вдруг пингвин) Купил? Отлично! -> Я - в прибыли!
    Ответ написан
    1 комментарий
  • Как вывести ошибку при подтверждение пароля?

    @rusline18 Автор вопроса
    Вместо this.state.errors = "Пароль не совпадает"; - this.setState({ errors: 'Пароль не совпадает' })
    Ответ написан
    Комментировать
  • Какой нужен стек технологий для нулевого Web-программиста?

    TT55EE
    @TT55EE
    Кшендерма ерендык
    Вот тебе нулевой фулстек:

    во первых JS - это основной язык веб-программста
    и HTML CSS - но всё можно делать и без них только на JS, но с ними удобнее))
    и немного PHP чтобы сделать серверную часть

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

    главное - всё научись делать сам
    , даже готовую БД не используй
    три года учись делать сам - начальное образование
    и при этом вопросы задавай тут - здесь оч хорошо помогают!
    Ответ написан
    2 комментария
  • Вопрос по документации Reactjs Lists and Keys?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Вы наверно не заметили, но массив в примерах называется numbers, а аргумент колбека в который передается элемент массива number.

    Исходные данные:
    const numbers = [1, 2, 3, 4, 5];
    const listItems = numbers.map((number) =>
        <li key={number.toString()}>
          {number}
        </li>
      );


    Результат выполнения метода map, в виде JSX:
    [
      <li key="1">1</li>,
      <li key="2">2</li>,
      <li key="3">3</li>,
      <li key="4">4</li>,
      <li key="5">5</li>,
    ]

    Результат в виде JS:
    5a8201cac8298094680322.png

    После рендера массива:
    <ul>
      {listItems}
    </ul>

    получаем следующий html:
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>


    О методе массива map можете почитать тут.
    Ответ написан
    Комментировать
  • Насколько важен личный сайт для разработчика?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    HR - лишь подбирает кандидатуры присланных резюме по ряду критериев.
    Принимает решение - руководитель отдела, а он даёт задачу оценки резюме своим подчинённым/специалистам. А уже они смотрят на код и сообщают свой вердикт потенциала соискателя своему руководителю, а уже он - говорит HR-у: подходит/не подходит человек.

    1. Цель: показать свои навыки использования инструмента кодирования логики (ЯП).
    2. ЦА: Кодеры-коллеги и тимлиды.
    3. Содержание: при запуске проекта, его код должен корректно работать и за максимально короткое время решать поставленную задачу конечным образом (без явных упущений и возможных доработок кода), быть правильно структурированным и хорошо документированным.

    Портфолио (аккаунт) на github.com - будет лучшим вариантом!
    Ответ написан
    1 комментарий