• Простым языком о замыканиях?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. Для чего замыкание существуют?
    Для инкапсуляции данных.
    В ООП есть модификаторы доступа (private, protected), которые закрывают доступ к данным извне класса, но позволяют обращаться к ним из методов.
    В ФП для этой задачи используют замыкания, закрывая данные внутри функции. Из вне данные недоступны, но вложенные функции имеют к ним доступ.

    2. В каких условиях они создаются?
    Когда вложенная функция обращается к переменным внешней функции.

    Хоть и просили без примеров, но на примере показать проще:
    // makeCounter - внешняя функция
    function makeCounter(initialValue) {
      var value = +initialValue || 0;
      // counter - внутренняя функция
      // она использует переменную value из внешней функции
      // что-бы это было возможным, для counter создается замыкание,
      // в котором хранится переменная value
      // переменная initialValue функции counter не нужна, поэтому ее можно "забыть"
      return function counter() {
        return value++;
      };
    }
    
    // у нас 3 экземпляра функции counter
    var counter1 = makeCounter();
    var counter2 = makeCounter();
    var counter3 = makeCounter(100);
    // и для каждой есть своя переменная value
    console.log(counter1()); // 0
    console.log(counter1()); // 1
    console.log(counter2()); // 0
    console.log(counter1()); // 2
    console.log(counter3()); // 100
    
    // а вот получить как-то напрямую переменную value мы не можем
    // инкапсуляция нам не дает поломать данные
    Ответ написан
    Комментировать
  • Как можно заразиться вирусом просто посещая сайты?

    @Mercury13
    Программист на «си с крестами» и не только
    Сейчас это крайне тяжело. Заражение возможно через четыре канала:
    • Уязвимости конкретного браузера. Кстати, это одна из причин, почему каждая вкладка Хрома — отдельный (и низкопривилегированный) процесс: если процесс хакнут, меньше шансов, что дойдёт до овладения компьютером.
    UPD. Это такой набор данных (например, специально созданный GIF/JPEG/HTML), который, например, пробивает в браузере буфер.
    • Уязвимости плагинов. Уязвимости в Java — это настолько обсосанная вещь, что и говорить не буду; вроде от Java в вебе отказались даже сами Oracle. Flash каждую неделю обновляют. Уязвимости плагинов плохи двумя вещами: 1) Пускай сейчас в мире один браузер — есть ещё два десятка прихлебателей и три браузера «труба пониже, дым пожиже». А Флэш один на всех; 2) Старое плагинное API, оставленное только Флэшу,— большая дыра в безопасности.
    • Уязвимости прочего софта. Казалось бы, качаешь PDF — а это эксплойт для Adobe Reader.
    • «Троянские кони» — но это уже надо своими руками запустить EXE.
    Кстати, в нашей пиратской культуре считается, что UAC надо побыстрее отключить, и во всех «левых» дистрибутивах он выключен. По-моему, это в корне неверно.
    Ответ написан
    8 комментариев
  • Как поднять себе зарплату?

    sim3x
    @sim3x
    Хочешь больше зп?
    Найди новую работу

    АПД
    Теоретически, нужно поговорить с начальством. Да

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

    Даже теоретики в коментах

    АПД2
    У прохождения собеседования есть еще преимущества
    - ты получаешь подтверждение своей квалификации и необходимости тебя на рынке
    - ты получаешь денежный еквивалент своей ценности
    - ты получаешь повышение навыка прохождения собеседований - ето отдельный навык, который не часто пересекается с навыком программирование/разработка/администрирование/...
    - в случае провала собеседования у тебя нет никаких побочных еффектов
    - ты получаешь срез навыков необходимых рынку
    Ответ написан
    36 комментариев
  • Как урезать свой перфекционизм?

    isqua
    @isqua
    Научу HTML, CSS, JS, BEM и Git
    Чтобы перестать делать лучше то, что ещё не сделано до конца, нужно понять одну простую истину: Запущенный проект лучше, чем не запущенный.

    Давайте потренируемся:
    • Что лучше: запущенный проект с несжатыми стилями или незапущенный со сжатыми?
    • Что лучше: не запущенный проект с десятью страницами или запущенный с тремя?
    • Что лучше: запущенный проект c jQuery или не запущенный без jQuery?


    Надеюсь, вы смогли выбрать! Как узнать, что пора запустить проект? (Под запуском я имею в виду «показать людям». Например, если вы решили написать библиотеку, давайте считать «проект запущенным», если вы выложили её на гитхаб) Нужно прикинуть, сколько времени вам надо на разработку и умножить на два. Если получилось больше двух недель, то стоит разбить проект на части и прикинуть так про каждую часть. Соответственно, ставите дедлайны.

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

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

    Удачи!
    Ответ написан
    4 комментария
  • Как всё успевать и не быть роботом?

    @johannnn
    Чуть программирую)
    1 - Не нужно работать по 8 часов для денег. Тут вопрос в том, какой вы профессионал в своем деле. Оплачивается на рынке Ваша стоимость. Если допустим Вася профессионал то он работает 2 часа и получает 20 000, хочет, работает 8 часов в день и получает 80000, а вот Пете надо работать по 10 часов в день, чтобы заработать 80000. так что Оплата зависит от Вашей стоимости. Станьте профессионалами своего дела.

    2- Спать - да, обязательно 8 часов, но каждый день в одно и то же время, и главное обеспечить ранний подъем - в 6 утра. Тогда времени будет достаточно много, чтобы выполнить любую работу.

    3- Полезная еда. Скажу так - готовить можно 1 раз на 1-2 дня. Разбивая потом на порции в контейнеры, далее просто микроволновка - 3 мин и обед, ужин и т.д. готовы. Для примера, я 3,5 года прожил в Доминикане, где из рациона был рис макароны, курица и говядина. Готовка занимает час и все. а свежие фрукты и овощи дома должны быть всегда.

    4- Спорт - Купите домой штангу и 2 гантели, разборные. И занимайтесь в перерывах - Кстати которые Реально необходимо делать в работе - Сидеть и писать код 8 часов не реально. Точнее реально - но это сильная нагрузка для глаз. Обязательно нужно прогуливаться по парку. Ибо работая год в таком режиме можете потом работать на оплату лекарств для глаз) ну в лучшем случае Носить очки) (Я говорю о фанатеющем сидении за ПК реально не отходя от него.) Есть еще одни вариант - запишитесь в зал где есть бассейн. И ходите 1 раз в 3-4 дня.

    5- Самообразование - читайте перед сном, слушайте аудиокниги в дороге. Допустим пошли в магазин, слушайте книгу. Сейчас можно найти все что хотите.

    6 - этот пункт на самом деле прост. Как описал в первом пункте, становясь профессионалом, Вы сможете больше зарабатывать ИЛИ уменьшать время работы.И тогда Для хобби будет не 1-2 часа, а 3-4. И так далее. И если хобби действительно хорошее, и будет приносить Вам радость в первую очередь, то и в других сферах Вам будет комфортнее. Если уделять хобби много времени - то Вы станете в этом профессионалом. и люди захотят платить Вам т.к. Вы знаете больше их, с Вами будут советоваться и т.д. И чем больше этим заниматься, тем больше денег будет это приносить, и тогда придет момент, когда доход от хобби будет небольшим, но достаточным, чтобы прожить. И тогда надо решиться полностью этому посвятиться, и отказаться от прежней работы.

    Для начала пробуйте так - Делайте выходные от работы (субботу и воскресенье) и посвящайте хобби полностью. Так будет работа продуктивнее.
    Ведь что такое отдых - это смена Вида деятельности.
    Ответ написан
    Комментировать
  • Как всё успевать и не быть роботом?

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

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

    Какая там музыка, 1-3 часа? Реально? С чем, а с музыкой (и с творчеством вообще) это точно не работает. Я недавно решил накидать ударку для демки, потратил порядка 5 часов на 16 тактов, расставлял всякие крутые фичи, думал, как будет качать. Здоровая еда и спорт - это не про вас, если вы хотите, чтобы музыка качала. Образно, конечно, я говорю.

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

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

    Обычно человек чем-то занимается профессионально и чем-то для хобби (в свободное время). Причем хобби вполне может быть профессиональным, но "для себя". Что касается профессиональной деятельности, то можно особо никуда не бежать и при этом развиваться. Уроки по разработке 1-2 часа в день после 8 часов работы? Да ладно, это не работает)) Не бегите так сильно: просто хорошо работайте, старайтесь брать интересные проекты, периодически "горизонтально ходите" по своей области. И все будет хорошо. Вы разработчик? Читайте алгебру по фану, она очень мышлению помогает. Скажите в субботу всем, что вы решили "посидеть за компом", и посмотрите интересный фреймворк или допилите что-то в опенсорс. Делайте главное все это систематически или относительно систематически. И через какое-то время вы поймете, что развитие идет. Главное делайте все круто, что касается работы (чувствуется кривой подход? надо это поправить, это будет и скилл и проекту лучше). И мониторьте разные хабры, модные течения, но не пристально. В общем, кто-то бежит очень сильно, а кто-то медленнее. К качеству это вряд ли имеет какое отношение.

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

    Семья? Говорят еще, что надо семью. Это все чуть позже (имею в виду детей, т.к. именно они реально обременяют). Не могу представить, как можно жить одному (давно не жил), но если человек рядом понимает, то проблем быть не должно быть.

    В качестве вывода:

    1) Найти свой темп. Пусть он медленнее, чем у самого медленного человека в мире, но главное - быть качественным.
    2) Не гнаться за всем, сделать акцент на самом важном. Обычно, кстати, у человека все интересы смежные или их не более двух (больших таких категорий/классов интересов), так что тут легко сделать акцент на самом важном. Это чувствуется всегда (мой субъективный опыт, исключения вижу оооочень редко).
    3) Забить на модные штуки 21 века а-ля спорт, ЗОЖ. Делайте зарядку по утрам и не всегда ешьте фастфуд, и все будет хорошо.
    4) Работа... Не то, чтобы это центр вашей жизни. Я для себя уяснил одно только правило: делайте круто то, что вы делайте. Вы можете не брать много проектов/ответственности, уходить с работы строго в 6 и ни минутой позже, в общем, в разное время относиться к работе по-разному. Когда-то стрелять там и блистать идеями, когда-то просто работать, когда-то особо не развиваться и заниматься хобби. Относитесь к ней проще. Такая идея лично мне дает свободу, я лучше работаю так. Тем более, что мы с вами в мире IT. У нас работа совпадает с тем, что интересно по-настоящему. Вы же не пьете чай каждую минуту, потому что он очень крутой? Иногда можно не пить его целый день, но это не важно, вы все равно вернетесь к нему через день или два, потому что он нравится. :)
    5) Как успевать все и не быть роботом? Никак :)

    p.s. Я старался вас успокоить немного, у вас больше психология, нежели реальные проблемы. Не то, чтобы надо всегда быть таким спокойным, нет. Можно адско побегать неделю или месяц. Вы слишком сильно подвержены влиянию разных течений в обществе, они конфликтуют с видением мира настоящего внутри вас. Надо всегда что-то терять. Нельзя повысить уровень абстракции и не усложнить систему (= повысить входной порог). Нельзя очень напрячь руку и сохранить ее мобильность. И да, нельзя повысить количество занятий, не потеряв в качестве (есть какой-то порог, но ваш план перешел порог нормального человека после 3.5 пункта).
    Ответ написан
    1 комментарий
  • Как всё успевать и не быть роботом?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Есть такая поговорка "Скажи мне кто твои друзья и я скажу кто ты". Если хотите чему-то научиться и координально поменять свою жизнь и самого себя, то настоятельно советую поместить себя именно в то окружение, где по большей части те люди на которых Вы бы хоть немного но хотели быть похожими и у которых можно многому научиться.

    Это мой собственный опыт.

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

    Все это дало мне то, что неявным образом у меня сформировалось мышление, привычки, действия, ритуалы и др. таким образом, что аж диву даешься "И это я?". К примеру от математиков прям железобетонно вбилось в голову фраза "Необходимо и достаточно", т.е. есть задача значит надо сделать настолько мало насколько это возможно, но при этом чтобы задача была решена!

    Рекомендую Вам прежде всего надо спросить себя "А что именно хочу?" и "Какие у меня мечты?". Ежедневно спрашивать себя "Какие задачи должен сегодня сделать чтобы хоть на чуть чуть приблизиться к моим мечтам?".
    Ответ написан
    6 комментариев