• Что такое замыкание?

    @tetafro
    var a = 42;
    function b() { return a; }

    Вот замыкание в самом простом виде. Функция привяжется к переменной a и будет её возвращать каждый раз.
    Ответ написан
    Комментировать
  • Что такое замыкание?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    В целом ты все верно понял. Почитал я тут ответы, термины, термины, термины...

    Я люблю простые объяснения, буквально на пальцах.

    Вот ты вызвал функцию, в ней создаются переменные локальной области видимости, т.е. доступные только самой функции. Под эти переменные движок JavaScript выделяет память.

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

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

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

    Один из основных паттернов, для которых применяются замыкания - ограничение доступа к данным, их изоляция (ограничение их области видимости).

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

    В ответах есть пример со счетчиком, который наглядно демонстрирует этот принцип.
    Ответ написан
    2 комментария
  • Что такое Redux простыми словами?

    Лучшее объяснение Redux что я видел.
    getinstance.info/articles/react/learning-react-redux
    ba494148d28e422b4c7bd269de5bed09.png
    Ответ написан
    Комментировать
  • Какой способ валидации в моделях Ruby on Rails является предпочтительным?

    Jeiwan
    @Jeiwan
    Второй способ устаревший. Стайлгайды не одобряют (https://github.com/bbatsov/rails-style-guide#sexy-...), Хаунд ругается.
    ИМХО, первый способ читать удобнее, так как все валидации, относящиеся к одному полю, лежат в одной строчке — удобнее искать, ведь если мы хотим проверить валидацию поля, то будем искать её по названию поля.

    Предпочтительнее использовать тот, который используют в вашем проекте. Если пилите что-то для себя, и код кто-то увидит (потенциальный работодатель), то лучше придерживаться наиболее распространенных стайлгайдов (опять же https://github.com/bbatsov/rails-style-guide), так как это может показать вашу дисциплинированность и желание следовать лучшим практикам. Если пилите для себя, и код никто не будет смотреть, то пишите, как хотите.
    Ответ написан
    1 комментарий
  • Как установить NPM на ubuntu 14.04?

    mannaro
    @mannaro
    Умею профессионально гуглить
    apt-get install nodejs && apt-get install npm
    Ответ написан
    Комментировать
  • Flexbox vs float?

    zooks
    @zooks
    Frontend
    Flexbox нужно использовать всегда.
    В случае старых IE вставляем условные комментарии с css-фиксами на старых float-ах под этот недобраузер.
    <!--[if IE]>
    <link href="ie.css" rel="stylesheet">
    <![endif]-->

    Float же предназначен для обтекания блока текстом.
    Ответ написан
    3 комментария
  • Flexbox vs float?

    sfi0zy
    @sfi0zy Куратор тега Вёрстка
    Creative frontend developer
    2) Flexbox лучше, чем float, практически везде - это более гибкий и функциональный инструмент, особенно в умелых руках, но...
    3) Flexbox не нужно использовать, если вам нужна поддержка разных браузеров (в первую очередь это касается IE): как можно увидеть IE11 и то имеет не полную поддержку, что уж говорить про более ранние версии, а добавлять скрипты ради него - это не комильфо.
    Ответ написан
    6 комментариев
  • Как работают миниатюры в paperclip gem?

    b0nn1e
    @b0nn1e
    Alcohol & Ruby on Rails
    Комментировать
  • Как работают миниатюры в paperclip gem?

    nbekseitov
    @nbekseitov
    Ruby developer
    rake paperclip:refresh CLASS=Avatar
    Ответ написан
    Комментировать
  • Как настроить pluralization в Rails I18n?

    Jeiwan
    @Jeiwan
    Вот ответ: stackoverflow.com/questions/6166064/i18n-pluralization
    Нужно задать правило плюразилации для русского языка и всё заработает:
    2.1.2 :001 > I18n.locale = :ru
     => :ru 
    2.1.2 :002 > I18n.t 'validate_errors.error', count: 1
     => "Форма содержит 1 ошибку" 
    2.1.2 :003 > I18n.t 'validate_errors.error', count: 2
     => "Форма содержит 2 ошибки" 
    2.1.2 :004 > I18n.t 'validate_errors.error', count: 3
     => "Форма содержит 3 ошибки" 
    2.1.2 :005 > I18n.t 'validate_errors.error', count: 4
     => "Форма содержит 4 ошибки" 
    2.1.2 :006 > I18n.t 'validate_errors.error', count: 5
     => "Форма содержит 5 ошибок" 
    2.1.2 :007 > I18n.t 'validate_errors.error', count: 10
     => "Форма содержит 10 ошибок" 
    2.1.2 :008 > I18n.t 'validate_errors.error', count: 22
     => "Форма содержит 22 ошибки" 
    2.1.2 :009 > I18n.t 'validate_errors.error', count: 21
     => "Форма содержит 21 ошибку"
    Ответ написан
    1 комментарий
  • Несколько вопросов о mongodb?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я работаю с MongoDB уже более 3 лет, поэтому буду рассказывать и давать советы опираясь на личный опыт эксплуатации.

    Получается, что нас всю жизнь учили данные нормализовывать и объясняли, почему это хорошо, а теперь все с точностью наоборот?

    Не совсем. Вас учили работать только с одной разновидностью баз данных - реляционной. Теперь вы увидели, что бывают еще и другие, документ-ориентированные. Разумеется, в каждой разновидности будут свои подходы к хранению и организации данных.
    Это не хорошо и не плохо, это иначе.
    Несомненно, ажиотаж вокруг термина NoSQL существует. И на то есть причины, в основном то, что данных действительно стало больше. Информационная энтропия увеличивается и ее все сложнее укладывать в рамки реляционных баз данных. Здесь можно долго рассуждать, но могу с уверенностью сказать, что сейчас появился спрос на такие хранилища, в которых структуру нужно менять более быстро, чем это могут позволить реляционные базы данных.

    Объясните, пожалуйста, на пальцах, правильно ли я все понимаю?

    По большей части вы правы. Это денормализованные данные, но с определенными моментами. Я покажу вам их на вашем же примере.

    Как в монго при этом обновлять данные, которые хранятся в каждом документе?


    Это реализуется с помощью банальных обновлений.
    Например, если у меня есть коллекция с книгами, в которой мне нужно обновить авторов.

    Типичная запись в ней выглядит так
    {
        "_id" : ObjectId("5801aa17964c6b2a050041a7"),
        "title" : "New Book",
        "authors" : [ 
            {
                "_id" : ObjectId("5801aa0f964c6b26030041a9"),
                "firstName" : "Phil",
                "lastName" : "Tkachev"
            }
        ]
    }


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

    db.getCollection('book').update(
     {'authors._id':ObjectId("5801aa0f964c6b26030041a9")}, 
     {$set: {'authors.$.firstName': 'Philipp'}  }, 
     {multi: true } 
    )


    Здесь есть ряд разных сценариев, просто почитайте документацию. В ней все неплохо расписано.

    Приемлемо ли в монго денормализовывать данные, чтобы хранить данные в отдельной коллекции, и обращаться к ним отдельным запросом (ведь джоинов там нет)?


    Есть ряд случаев, когда так и делают. Например есть разного рода ORM, тот же Mongoose, который так и делает.

    И принято ли так работать?


    И да, и нет. Когда вы работаете с такого рода базой данных, вам нужно подходить к организации данных исходя из решаемой проблемы, отталкиваться от проекта будущего приложения или решения задачи.
    Вам просто нужно ответить на вопрос, что дешевле, запросить документ по ключу или обновить запись внутри документов.
    Взять к примеру, ваш сайт, в котором есть новости и их авторы. Новости могут читать миллионы, а значит при обращении к каждой новости нужно будет делать подзапрос на информацию о каждом авторе. Т.е. вместо одного запроса, при просмотре новости, нужно будет делать 2. А если показывать список из 100 новостей? Будете делать 100 вторичных запросов? Нет, это тоже неправильно. Нужно будет получить список новостей, в коде приложения собрать идентификаторы авторов, сделать второй подзапрос, получить информацию об авторах, затем объединить ее с уже полученным списком статей. Это немного усложнит ваше приложение, но тоже позволит сэкономить ресурсы. Если вы встроите авторов внутрь статьи, это позволит вам обойтись одним запросом к базе, хоть на просмотр, хоть на список новостей. С другой стороны вам прийдется подумать об обновлении информации об авторе. Но, т.к. такая информация меняется сравнительно редко, то есть смысл встраивания.

    Что делать, если изменилась структура данных, если структуры то и нет?


    Здесь все просто. Когда вы разрабатываете свое приложение, вы изначально закладываете в него обработку изменений. Например, вы можете добавить поле версии документа, в котором храните номер версии структуры и реагировать на ее изменение в коде. Либо вы можете просто писать приложение таким образом, что оно автоматически будет конвертировать структуру из старой в новую при первом обращении.

    По дизайну вашего приложения.
    Судя по первичным данным, у вас новостной сайт.
    Логично было бы его представить в следующем виде.

    Коллекция новостей:

    {
    	_id: 'MongoId',
    	title: '',
    	body: '',
    	author: {
    		_id: 'идентификатор пользователя',
    		name: 'Имя пользователя',
    		subscribers: 'Количество подписчиков'
    	}
    }


    Автор является неполной копией данных о пользователе. Это поможет сэкономить место и позволит избежать ненужных запросов.

    Коллекция пользователей:

    {
    	_id: 'MongoId',
    	name: 'Имя пользователя',
    	email: '',
    	roles: ['user', 'author', 'admin'],
    	subscribers: 'Number'
    }


    Список ролей может опеределять уровень доступных возможностей. Его легко изменить, можно легко найти авторов или админов.

    Коллекция подписок:

    {
    	initiator: {
    		_id: 'идентификатор пользователя, который инициировал подписку',
    		name: 'Имя пользователя'
    	},
    	target: {
    		_id: 'идентификатор автора',
    		name: 'Имя пользователя'
    	},
    	date: 'ISODate',
    	confirmed: 'bool'
    }


    Здесь вы можете подстроить, как список подписок, так и список подписчиков одним запросом.
    Ответ написан
    1 комментарий
  • Натяжка верстки на Ruby on Rails,как реализовать?

    @chronic86
    Ruby on Rails junior
    Можно как-то конкретизировать, что именно не получается? На данный момент все что приходит в голову Вам посоветовать это:
    slim -> app/views
    scss -> app/assets/stylesheets, соответственно реквайрите что нужно в application.css.scss
    js -> app/assets/javascripts, соответственно реквайрите что нужно в application.js
    Ну и если есть что-то сторонние кидаете в vendor/
    Ответ написан
    Комментировать
  • Какие есть нормальные туториалы или уже готовые гемы по написанию чата, как в скайпе\вк\фб на Руби он Рейлс?

    anton9
    @anton9
    Люблю Ruby on Rails
    Очень советую изучить ActionCable, который стал доступен начиная с Rails 5.0
    Вот отличный туториал - https://www.learnenough.com/action-cable-tutorial
    Ответ написан
    Комментировать
  • Как грамотно оформить выделение текущего пункта меню в навигации сайта?

    nbekseitov
    @nbekseitov
    Ruby developer
    Просто создайте хэлпер. Пример:
    def nav_link(link_text, link_path)
      class_name = current_page?(link_path) ? 'current' : ''
    
      content_tag(:li, :class => class_name) do
        link_to link_text, link_path
      end
    end

    nav_link 'Home', root_path
    Ответ написан
    1 комментарий
  • Модели в Rails, как вывести информацию?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Чувак, ты тут уже не первый простой вопрос постишь. Научись сначала формулировать запрос, потом вводить его в гугл, а потом ходить по ссылкам и читать, желательно гуглить на английском. Больше результатов будет.

    И прочти rusrails.ru от корки до корки.
    Ответ написан
    Комментировать
  • Модели в Rails, как вывести информацию?

    fairoj
    @fairoj
    Программист RM+
    <%= @teachers.map(&:name).join(', ') %>
    Ответ написан
    Комментировать
  • Oнлайн-редактор для SVG?

    @dmitry_skorik
    Вот тут есть подборка SVG редакторов https://blog.adn.agency/dzhedajdzhest-2-0-servisy-...
    Ответ написан
    Комментировать
  • Как поднять себе зарплату?

    denisgorbunovmsc
    @denisgorbunovmsc
    руковожу проектным офисом
    Надеюсь подчиненные не прочитают.

    1) Вежливое слово с пистолетом в руке лучше, чем просто вежливое слово.
    Выходи на рынок. Имея на руках job offer с текущей з-п и более интересной работой, или большей з-п и менее интересной ты скорее получишь прибавку, или изменение условий труда.
    Чтобы найти работу работает некий рубеж перехода количественного в качественное: чтобы получить одно интересное предложение нужно сходить на 10 собеседований, чтобы сходить на одно собеседование нужно откликнуться на 10 вакансий. Это для невезучего чеовека, для везучего будет не 10, а 5 или менее.

    2) Самопиар и глубокая специализация. О том, что ты стал больше делать люди должны знать и нужно закрепить за собой какую-то проф. нишу внутри коллектива - что-то что ты делаешь сильно лучше коллег. Это могут быть разные аспекты. Здесь получаем ценность и ответ на вопрос почему ты должен получать больше коллег.
    Зачастую бывает, что окружающие не замечают роста у коллег, так как все сосредоточены на себе.

    3) Разговор с начальством и обозначить свои ожидания. Возможно, с этого стоило бы начать, если не кризис. Ну и чем меньше компания тем важнее становится это (отношения), а не первое. Очень часто бывает, что у человека есть недовольство текущим положением, он идет в первый вариант, а из первого варианта его очень сложно вернуть, так как он себе уже наворотил причин для ухода и распутать этот клубок одними деньгами не получается.

    Это часто бывает с переездом в Москву. Изначально люди готовы ехать на маленькие деньги, чтобы "закрепиться". Снимают жилье подешевле и затягивают пояса. Через полгода запасы, с которыми приехали истощаются, а в пути 3-4 часа каждый день + 10+ часов на работе высасывают все энергетические запасы. Тут уже человек начинает себе кроме з-п придумывать еще поводы: начальник чудак, коллеги лодыри, место у окна дует и прочие моменты, на которые в нормальном состоянии ему пофиг. Деньги далеко не единственный мотиватор и в такой ситуации с них все начинается, но паровозом человек себе достраивает еще ворох причин.
    Новое место как и новая жена, если старая достала, всегда кажется лучше. Человек находит новое место с большей зарплатой и уже на прежнюю з-п он не останется в прежней конторе. И оставлять его проблематично, так как есть ворох проблем и либо уходить в психоанализ на полгода с решением этих диссонансов, либо прежней любви и энергии уже не будет. Это практически неразрешимая ситуация, которая началась с нехватки 15-25 тысяч рублей в текущем окладе.

    4) Самый пассивный сценарий - ждать хорошей погоды. Умный начальник будет повышать подчиненного, даже если тот не растет, а уж если растет, то и подавно. Почему он это делает? Потому что бегать и выбивать деньги, чтобы удержать - всегда на порядок сложнее и менее эффективно. Если не повышают, то может и первый вариант не так плох, так как и 2й и 3й варианты не всем подходят, ибо требуют большой доли экстравертности.
    Ответ написан
    Комментировать
  • Как поднять себе зарплату?

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

    Руководство прикидывает - а стоит ли твоя квалификация и выполняемые обязанности повышения или дешевле другого найти.

    Если ты действительно стОящий специалист - получишь повышение.

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

    Бояться нечего. Даже если откажут ничего с тобой плохого не случится - все вернется на круги своя.

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

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

    Очень многие вещи можно решить простым вежливым спокойным разговором.

    Весь бизнес на этом строится. Бизнесмены только и делают целыми днями, что разговаривают. Поговори с директором - для него разговоры это обычная часть работы.
    Ответ написан
    Комментировать
  • Где брать красивые фоны для сайтов?

    https://unsplash.com/ - природа, пейзажи и разные спокойные фото. Изображений очень много и все они высоком разрешении;
    getrefe.tumblr.com - здесь меньше контента, но есть альтернативные категории;
    www.splitshire.com - более серьёзная альтернатива предыдущему сайту;
    https://picjumbo.com/ - кроме кучи качественных фото есть фича встраивания изображения в разные шаблоны для демонстрации. Для веб дизайна и верстки самое оно.
    Ответ написан
    Комментировать