Задать вопрос
  • WPF еще не умер?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    - если хочешь писать мобильные приложения - используй Xamarin, а не WindowsPhone

    Если хочешь писать мобильные приложения - пиши их либо под iOS (Swift/Objective-C), либо под Android(Java).
    Windows на телефонах мертв.
    Мультиплатформенные инструменты кривы и практически не востребованы.

    - если хочешь писать web-приложения - используй ASP.NET MVC, а не Silverlight

    Если хочешь писать web-приложения - используй PHP/Ruby/Python/Node.js
    Ответ написан
    4 комментария
  • Какие стратегии повышения зарплаты существуют?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Центральный показатель для бизнеса, а следовательно и руководителей, как людей представляющих интересы этого самого бизнеса - это коэффициент возврата инвестиций (ROI). Соответственно, сотрудник должен приносить компании больше денег, чем потребляет. Естественно, что чем выше разрыв между затратами и прибылью, тем лучше, поэтому фонд оплаты труда руководитель должен держать на том минимальном уровне, который гарантирует бесперебойную работу сотрудников. Один из факторов этой бесперебойности - низкая текучка. Сотрудников терять нежелательно. И чем ценнее для компании сотрудник, чем более он профессионален и/или чем больше на него завязано, тем дороже обходится его потеря. Натурально в деньгах. Придётся затратить больше, чем обычно, денег на поддержание работы без него. Придётся затратить деньги и время (те же деньги) на поиск, найм, введение в работу, возможно, обучение нового сотрудника. При этом он может оказаться совсем неподходящих и цикл придётся повторить. Или может оказаться просто хуже прошлого и эффективность отдела снизится. Поэтому, когда сотрудник приходит просить прибавку, руководитель оценивает может ли этот сотрудник уйти или только блефует, насколько легко его будет заменить, какой урон компании будет нанесён его уходом. Потом руководитель оценивает стоимость расширения ФОТ - есть ли резервы, какой сейчас ROI, будет ли больший ROI от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

    Естественно, всё описанное справедливо для случая, когда руководитель - профессиональный менеджер. А то часто на месте руководителя сидит человек руководствующийся эмоциями и мутными соображениями вычитанными в сомнительной бизнес-литературе.

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

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Потому что это JSX. Можно исправить так:
    render() {
      const { _sharedData: { auth_user } } =  this.props;
    
      const shouldShowIconMenu = +auth_user === 1;
    
      return (
        <AppBar>
          {shouldShowIconMenu && (
            <IconMenu>
              ...
            </IconMenu>
          )}
        </AppBar>
      );
    }


    JSX это все-таки синтаксический сахар над React.createElement. Вызов if-else, как и for внутри JSX транслировался бы в нерабочий код. Пример:
    JSX:
    <div id={if (condition) { 'msg' }}>Hello World!</div>

    В результате трансляции получаем невалидный код:
    React.createElement("div", { id: if (condition) { 'msg' } }, "Hello World!");
    Ответ написан
    2 комментария
  • Api запрос из react приложения выполняется только один раз, что делать?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    render() {
      const { res } = this.state;
      const shouldFlimDisplayShown = !!res;
    
      return (
        <div>
          <form onSubmit={this.handleSubmit}>
            <label htmlFor="title">Enter title</label>
            <input id="title" name="title" type="text" />
            <button>Send data!</button>
          </form>
          {shouldFlimDisplayShown && <FilmDisplay filmName={res}/>}
       </div>
      );
    }


    import React from 'react';
    
    class FilmDisplay extends React.Component {
       constructor() {
        super();
    
        this.state = {
          filmData: null
        };
      }
    
      componentDidMount() {
        this.fetchMovie();
      }
    
      componentDidUpdate(prevProps) {
        if (prevProps.filmData !== this.props.filmData) {
          this.fetchMovie();
        }
      }
     
      fetchMovie() {
        const { filmName } = this.props;
        const URL = "http://www.omdbapi.com/?t=" + filmName + "&apikey=6540f2ec&";
    
        fetch(URL).then(res => res.json()).then(json => {
          this.setState({ filmData: json });
        });
      }
    
      render() {
        const { filmData } = this.state;
    
        if (!filmData) return <div>Loading</div>;
      
        return <div>{JSON.stringify(filmData)}</div>;
      }
    }
    
    export default FilmDisplay;
    Ответ написан
    Комментировать
  • Какой необходимый уровень знаний для junior React.js Разработчика?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    UPDATE: реальные тестовые задания и разборы здесь, ответы на все вопросы из поста в моем блоге об обучении react.

    не включая основы js

    Извините, но стандартная задача, про "напишите функуцию add, которая при вызове add(1)(2) вернет 3" - многих положила на лопатки =) Поэтому будьте готовы..

    React
    0) Какую проблему решает react ?
    1) Мгновенно ли срабатывает setState? Если нет, то как выполнить код, который 100% выполнится после того, как новый state будет установлен?
    2) Зачем многие постоянно пишут в constructor: this.FUNCTION_NAME = this.FUNCTION_NAME.bind(this) и отсюда вопрос вытекает чему равно this в разных местах вашего компонента...
    3) в каких методах жизненого цикла стоит выполнять xhr запросы? В каких стоит "обновлять state на основе props"?
    4) Что будет если вызвать this.setState в render методе компонента?
    5) зачем нужен componenWIllUnmount, приведите пример..
    6) Контролируемые, не контролируемые компоненты
    7) Как организовать роутинг в реакт приложении? (ответ: взять react-router - подходит, но было бы круто, если бы вы рассказали, как он примерно работает)*
    8) Зачем нужны propTypes? Что происходит с ними в production сборке?
    9) Как можно удобно "отлаживать" чужой код приложения, написанного на react (намек в сторону React devtools)
    ...

    Redux
    0) Какую проблему решает redux?
    1) Зачем многие создают типы действий NAME_REQUEST / NAME_SUCCESS ? А заодно, что такое "действие", а что такое "создатель действия"...
    2) Что такое редьюсер? Можете написать простой редьюсер без react/redux?*
    3) Для чего нужен redux-thunk? Как он работает? Напишите (можно псевдокод) асинхронный создатель действия (либо, если надоело говорить "терминами" - асинхронный aciton)
    4) Как компоненты приложения получают "пропсы" из "стора"?*
    5) Можно ли (и считается ли это нормальным) использовать state, если используется Redux?
    6) Почему в reducer'ax мы возвращаем новые объекты? Приведите пример, когда вы возвращаете новый объект, а когда тот же самый.
    6.5) А так же, "как в js вообще это работает?". Например:
    let obj1 { name: 'Test', age: 100 }
    let obj2 = obj1
    obj2.name = 'Test_new'

    Что будет в obj1, почему? В каких случаях объекты могут быть равны?
    7) Что возвращает функция connect (из react-redux)?
    ...

    Общее:
    0) package.json
    1) Webpack, gulp, etc...
    2) node.js
    3) promise

    Что-нибудь практическое:
    1) Как бы вы валидировали форму, если ошибки валидации приходят после submit'a ее на сервер..
    2) Почему не работает следующий код, сделайте чтобы работало
    ...
    На истину не претендую, но такие вопросы имели место быть на собеседованиях. В беседе можно многое разузнать дополнительными вопросами и так далее. Так же, если часть вопросов вам неизвестна - не беда, многие и на половину ответить не могут.

    p.s. возможно дополню...
    p.p.s. звездочкой отметил, на мой взгляд не самые необходимые для junior-собеседования вопросы.
    Ответ написан
    31 комментарий
  • Как кастомизировать Бутстрап 4 сетку?

    getbootstrap.com/docs/3.3/customize Для простоты вот тут кастомизация, если хотите научиться, то сверяйте изменения.
    Ответ написан
    1 комментарий
  • Где взять практику программисту?

    @cicatrix
    было бы большой ошибкой думать
    Велосипеды.
    Есть редактор Notepad++ - начинался как велосипед (замена обычному блокноту) - теперь мощный и классный инструмент.
    Вот есть граф. редактор Paint.Net. Начинался как велосипед (то ли курсовая, то ли дипломная работа чья-то) по замене MS Paint. Сейчас - вполне успешный и даже, наверное, прибыльный проект.
    Вот есть операционная система Linux, начиналась... ну вы поняли :)
    Ответ написан
    Комментировать
  • Где взять практику программисту?

    @younghacker
    А вы уверены что вы программист?
    У меня идеи были раньше навыков программирования и раньше знания языков.
    Что программировать даже вопросов не возникало.
    Придумывал задачу и писал. Сталкивался с проблемой - брал
    дизассемблер, отладчик и смотрел как это решают другие.
    Читал исходники чужих широко известных библиотек.
    Красивый, понятный, изящный код. Это же кайф, как поэзия!

    Практику можно только напрактиковать! :)
    Тренировка во сне - пока что возможна только в кинематографе.
    Ответ написан
    2 комментария
  • Как мотивировать себя делать скучную работу?

    zamboga
    @zamboga
    Аналитика данных, BI-аналитика, дашборды
    Отвлекаюсь на все не могу себя заставить, нормально работать

    Отключить все уведомления или выключить звук+вибро на телефоне.
    Отключить все попапы в Windows, уведомления браузеров.
    Отключить звук на компе.

    Если помогает быстрая музыка — включить её (я фигачу под транс с di.fm).

    Взять любой секундомер, поставить на нем таймер 10 минут. Уж 10 минут вы в состоянии выдержать?
    После звонка таймера поставить новый на 15 минут. Это всего на 5 мин больше прошлого таймера.
    После звонка таймера поставить новый на 25 минут. Это всего на 10 мин больше прошлого таймера.
    Как вы поняли, это плавное привыкание к технике Помодоро=)

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

    Прошло 50 минут. Теперь отдых. Выключить музыку, надо отдохнуть: ставите таймер на 10 минут, гуляете вокруг компа, смотрите в окно, делаете легкую зарядку, просто сидите с закрытыми глазами.

    Телефон во время отдыха в руки не брать и почту /скайп (что там вы используйте) не проверять!! — Это ключевое. Отдых должен быть отдыхом. Умеете медитировать — медитируйте.

    Ставите новый таймер на 50 минут. Один раз продержались, что, второй раз не сможете? Сможете.
    После этого опять отдых, 10 минут.

    После 3-4 циклов по 50работа/10отдых, делаете отдых 30/40/60 минут (как раз пообедать + проверить почту/телефон).

    Потом новый комплект 3-4 цикла 50/10.
    В конце дня можете проверить почту/телефон.

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

    Также, если мотивация падает, говорим себе мантру: "Потерпи только сегодня, только один день. Пофиг, что там будет завтра, а вот сегодня надо потерпеть и сделать".

    Для удобства на компе можно использовать любой тайм-трекер со встроенным Pomodoro, например Toggl (+могу еще насоветовать, знаю много трекеров)

    UPD 1. Из другого ответа: "чтобы работать длинный промежуток времени, очень выручал https://www.forestapp.cc/"
    Я протестировал приложение под Андроид и расширение для Хром и стал использовать: это отличное дополнение к методике, что тут описал, с автоматическим отключением всех внешних раздражителей. Рекомендую.

    UPD 2. Классическая Помодорная схема — 4 цикла по 25работа/5отдых, потом отдых 20 мин.
    Но она не подходит для работы "в потоке" — пока погружаешься в задачу, уже проходит 15 минут и остается всего 10 минут до отдыха на саму задачу, что мало.
    Поэтому я использую циклы 50/10 для основных задач, +один цикл 50/10 в начале дня на планирование, почту и прочую мелочевку.
    Ответ написан
    2 комментария
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев
  • Проблема с самообучением. Как поступить?

    dadster
    @dadster
    учить инглиш тут - https://t.me/langhacks
    Не иди по легкому пути, бросить всегда успеешь. Поступай в институт, параллельно работай, развивайся. Если у тебя к примеру на 2 курсе уже будет свой стартап, или работать позовут на фулл-тайм, бросить институт всегда можно. А так, остаться без высшего образования просто потому что не хочется физику сдавать... Не очень дальновидное решение.
    Ответ написан
    Комментировать
  • Как набраться опыта?

    Ptolemy_master
    @Ptolemy_master
    в общем делал все как рекомендуют люди для обучения =)


    А кто так рекомендует?
    Какие именно книги вы читали, по каким технологиям, ПО?
    Самый лучший, надежный и проверенный способ научиться программировать - это программировать. Не видоизменять или переписывать чужой код, а писать свой.
    Как учат программированию в вузах?
    На лекции дают теорию (вы читаете книгу).
    На лабораторных дают задания (это практика). У вас нет лаб, вам нужно найти такую книгу или такой сайт, где были бы задания. То есть где вам, с нуля надо было бы написать код.
    Да, вы будете делать это медленно.
    Да, ничего поначалу не будет работать.
    Да, вы будете без конца лезть в гугл.
    Но когда вы наконец сделаете первое задание, вам будет гораздо легче делать второе, а после второго - третье и так далее.
    (И скажу вам по секрету, в гугл лезут не только новички. )
    Если не хотите делать задания, поставьте себе задачи сами. Но только надо двигаться постепенно, от простого к сложному.
    Скажем, для начала я хочу сделать себе простой статический сайт, мой личный, обо мне.
    Поверьте, вы его сами сделаете, даже если будете проводить в гугле половину времени.
    Потом я хочу добавить на него форму обратной связи.
    Потом форум.
    Потом чат.
    Потом редактор картинок.
    И так далее. Идея понятна?
    Но главное! Не опускать руки, задавать вопросы и все время двигаться вперед.
    Ответ написан
    Комментировать
  • Буквенный IP без порта, как?

    Young_khv
    @Young_khv
    ASP.NET Developer
    Буквенный IP
    f4e0f804b06548a692e9bb30ae92f018.png

    Почитайте, пожалуйста, про доменные имена, DNS там =)

    По вопросу: меняйте файл hosts и хоть гуглом свой localhost обзывайте.
    Что же до порта, если не критично - ставьте просто стандартный 80 порт
    Ответ написан
    3 комментария
  • Как НЕ дать пользователям скачать изображения сайта?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    не выкладывать на сайт
    Ответ написан
    Комментировать
  • Что обозначает этот простой код?

    @abcd0x00
    Объяснение

    Когда делаешь
    class Application(Frame):
    то Application - это твой самодельный класс, который делается из существующего класса Frame.

    Это значит, что все объекты (экземпляры) класса Application будут двух типов одновременно - типа Application и типа Frame.

    Когда делаешь
    def __init__(self, master):
    это значит, что ты у класса Application делаешь метод __init__. При этом у класса Frame есть свой собственный метод __init__. Эти методы могут полностью различаться.

    Когда делаешь
    app = Application(root)
    ты создаёшь объект (экземпляр) класса Application. При этом ему в метод __init__ передаётся основное окно всей программы.

    app имеет сразу два типа - самодельный Application (который ты сам сделал) и существующий Frame (который уже сделали до тебя). По правилам tkinter'а, когда ты создаёшь какое-нибудь окно, его надо прилеплять к основному (так можно давать команды сразу всему дереву окон, в котором одни окна прилеплены к другим, и всё это прилеплено к основному окну).

    Так вот, чтобы было всё правильно, твой самодельный объект, который сделан из существущего оконного типа, нужно прилепить к основному окну. Но так как твой объект - самодельный и сам по себе окном не является, то внутри себя он должен обратиться к тому типу, который делает его окном, и передать ему основное окно программы, чтобы тот мог к нему прилепиться.

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

    Поэтому запись
    super(Application, self).__init__(master)
    Означает, что нужно взять метод __init__ у базового класса Frame и передать в него аргумент master, переданный в __init__ производного класса Application.
    Функция super() как бы отыскивает базовый класс у класса Application и возвращает его, а дальше уже идёт обращение к методу __init__ этого найденного класса.
    Ответ написан
    Комментировать
  • Какой библиотекой можно сделать круговые диаграммы и чарты?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Ответ написан
    Комментировать
  • Как изменить значение selected?

    @immaculate
    Программист-путешественник
    Я бы сказал, что здесь не конкретный шаблон надо менять, а весь подход. Писать такой HTML руками — неправильно. Это тяжело пишется, тяжело читается и еще тяжелее модифицируется.

    Правильно использовать django.forms.Form или django.forms.ModelForm и пусть выводится автоматически средствами того же Django (form.as_p, form.as_ul) или django-crispy-forms.
    Ответ написан
    1 комментарий
  • Как изменить значение selected?

    @apenshin
    python/django/php/yii
    <option {% if state == "all" %}selected="selected"{% endif %} value="all">Все</option>
    <option {% if state == "true" %}selected="selected"{% endif %} value="true">Оплачено</option>
    <option {% if state == "false" %}selected="selected"{% endif %} value="false">Не оплачено</option>
    Ответ написан
    Комментировать