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

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

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

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

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

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

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

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

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

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Добавлю еще что настройки сервера, на котором вертится сайт, тоже роляют. Должен быть годный фаервол, который паразитные запросы сможет резать, не доводя до апача или под чам там сайт вертится.

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

    Что касается собственно php, в первую очередь нужно не доверять пользовательским данным, т.к. это прямой путь словить SQL-инъекции. Ловить XSS и пр.
    Ответ написан
    Комментировать
  • Как лучше изучить теорию JavaScript?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Самое сложное для начинающего не понять как делать или что делать, а понять зачем делать.

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

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

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

    Выработать эти микрорефлексы возможно только активно практикуясь и больше никак.

    Приглашаю тебя на Codewars - www.codewars.com/r/pj8ELg, там ты сможешь бесплатно попрактиковаться вволю, со своей стороны готов оказать тебе посильную наставническую поддержку.
    Ответ написан
    2 комментария
  • Как избавиться от привычки усложнять задачу?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Иногда усложнять нужно. Представь что ты не исполнитель, а заказчик. Задай себе вопрос - стал бы ты оплачивать вот эту повышенную сложность, увеличенные сроки и пр.? Нужны ли они на самом деле, или можно обойтись без них. В конце концов все мы делаем продукты и инструменты, которые должны облегчать жизнь людям, желательно с минимально возможными сроками и бюджетом с максимально возможным качеством и функциональность. Вот нахождение баланса в этой всей истории и есть цель.
    Ответ написан
    Комментировать
  • Как научиться делать сортировки любой сложности в JavaScript?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Попробуй посмотреть в сторону Lodash/Underscore, там есть масса оптимизированных методов для, в т.ч., и сортировок по нескольким полям в разных направлениях.
    Ответ написан
    Комментировать
  • Как научиться писать самостоятельно код?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Когда я только начинал учиться программированию, то для меня даже документация казалась темным лесом, потому что ну почитал я что делает команда, а зачем она это делает - не понятно...

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

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

    Так же очень полезный навык - декомпозиция. Слона или кита нужно есть частями. Другими словами большую задачу дробим на логически обособленные части, сами части дробим еще, до тех пор, пока каждую маленькую часть не сможем решить кодом размером в 1-2 экрана. Тщательно тестируем на всякие редкие и крайние ситуации. Оформляем этот код в виде модулей, далее собираем как из кубиков "Лего" нужный результат. Тестируем связки компонент, на моем опыте примерно половина времени уходит на продумывание и гугление, от оставшегося времени 90% уходит на дебаггинг и тестирование, и только примерно 5% совокупного времени реально идет на собственно кодинг.
    Ответ написан
    Комментировать
  • Меньше стек технологий, больше шанс устроиться на удаленную работу?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Сколько видел вакансий - везде стопицот непохожих требований, а когда доходит до собеседований и тестовых заданий, то всплывает еще стопицот сюрпризов.

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

    Другая проблема заключается в том, что инди-разработчик - это вещь в себе, оторванная от мейнстрима чуть меньше чем полностью. Работая на фрилансе/аутсорсе ты, как правило, получаешь задачи от людей, слабо понимающих что там под капотом у сложных веб-приложений. Соответственно ты больше акцентируешься на удовлетворенность клиента, которая приводит к возникновению финансовых потоков в твой адрес, но совершенно не способствует твоему росту как профессионала. Ты просто превращаешься в человека-оркестра, выхватившего по верхам в стопицот направлений, и нигде толком. Безусловно, и на этом поприще бывают исключения, но, как правило, это ребята с "правильным" бэкграундом.

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

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

    Примерно до 2010 года я старался свой веб-стек держать в пределах возможностей любого самого задрипанного шаренного хостинга, в результате чего лишался массы вкусных возможностей. Справедливости ради стоит сказать, что годные доступные впски массово стали появляться ближе к году 12-13. Когда уже сил терпеть не стало, я сказал себе доколе, и волевым решением отказался от шары, о чем ни разу не пожалел.

    С 2015 года я положил глаз на full-stack JavaScript и потихоньку развиваюсь в данном направлении. Тренды таковы, что все больше вакансий и прочих предложений будут так или иначе именно в эту сторону. Одно меня печалит, пока что рынок фронтенда держит angular 1.x, но, думаю, это временно.
    Ответ написан
    3 комментария
  • Как сделать вывод значений из баз регионов и городов в древовидной последовательности?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Не надо никаких джойнов в данном случае.

    Нужно двумя запросами считать данные таблиц, а далее как раз таки цикл в цикле. Внешний цикл по регионам проходится, внутренний по городам внутри каждого региона.
    Ответ написан
    Комментировать
  • Где вести записи разработчику?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Никакие не использую. Айти, в частности веб, это настолько динамичная среда, что уже через пол-года многие вещи устаревают, а им на замену рпиходят новые, более эффективные и пр. Поэтому в нужный момент ищу ровно то, что актуально и в тренде именно сейчас.
    Ответ написан
    Комментировать
  • Как учить что-то новое и быстро не забывать?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я всегда учу только самый необходимый минимум, исходя из принципа Парето, что 20% усилий дают 80% результата. Зачастую этих 80% результата за глаза хватает для большинства задач.

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

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

    Так-что я рекомендовал бы каждый навык оттачивать в конкретном модуле, на практике, в разных обстоятельствах, тогда в голове уложатся принципы и примерное представление, где, если потребуется, быстро найти детали и нюансы...
    Ответ написан
    Комментировать
  • Порядок изучения react.js?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Фейсбук подключился к теме быстрого старта с реактом. Не секрет, что, по хорошему, чтобы разрабатывать быстро и удобно, нужно некисло заморочиться с бойлерплейтом, коих тысячи их. Сам прохожу через эту боль активно, и вот на днях, наконец то, хвала яйцам и курицам, наконец вырулил на годную тему (как мне кажется).

    Очень рекомендую. https://www.fullstackreact.com/articles/using-crea...
    Ответ написан
    Комментировать
  • Отказаться от group by и sort by?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Не на том заморочился.

    Оптимизируй количество сортируемого/групируемого правильным WHERE и индексами, а по сети таскать да в скрипте молотить это идея так себе.

    Кстати про сеть и память, рекомендую таскать только самые необходимые поля, а не SELECT * как обычно делают...
    Ответ написан
    Комментировать
  • Как организовать сессии на node.js?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    node.js от php отличается тем, что хранит состояние между запросами, так-что сессию хранить не составляет никакой проблемы, но для масштабирования лучше как рекомендует Дмитрий.
    Ответ написан
    Комментировать
  • У меня проблемы с короткой записью IF. Как сократить PHP код?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    echo '<b>'.$user.'@'.$host.':'.($pwd=='/home/'.$user?'~':$pwd).'#</b> ';
    Ответ написан
  • Модульность на фронтенде?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я за React+Webpack
    Ответ написан
    Комментировать
  • Как реализовать быстрый поиск в массиве объектов по значению свойства?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Обходить миллионные массивы при каждом чихе - это жесть.

    Необходима индексация!

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

    Если исходный массив постоянно меняется, то в прототип необходимо добавить функцию, которая будет отслеживать эти изменения и обновлять индекс.
    Ответ написан
    Комментировать
  • Существует ли "карта программиста"? Что и за чем учить?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Нет одинаково эффективного пути для всех и каждого.

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

    Тут главное - настолько сильно хотеть достичь результата, чтобы любые препятствия только добавляли азарта. Чтобы ночами спать не мог и думал о задаче. Это ключевой момент обучения. Все остальное - декорации, способы, инструменты...

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

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

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

    На первых порах, тестирование будет занимать до 99% времени и сил. Заодно подтягивается синтаксис используемых языков (вообще не важно каких), вырабатывается внимательность, концентрация, тренируется память и пр.

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

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

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

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

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

    Ах да, обложись справочниками по любому инструменту и научись быстро вникать и подхватывать необходимый минимум. Обычно достаточно на 20% владеть инструментом, чтобы решать 80% задач.

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Это не массив дат, это массив строк, похожих на дату.

    Т.к. структура строк идентична и форматирована, и заранее известно где находится значение месяца в каждом элементе массива, то я бы строковыми функциями (javascript.ru/string/substr) вынимал бы значение месяца, проверял, есть ли в результирующем массиве нужный раздел (по номеру месяца), если нет то создавал его пушем, далее в него пушем складывал бы значение.

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

    ЗЫ: Код за тебя я писать не буду, не грусти. :)
    Ответ написан
    Комментировать
  • Задачи по javascript?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Мне нравится как организовано все в кодеварс, там и разминаю мозги на досуге...
    Ответ написан
    Комментировать
  • Где найти сайт по проектированию высоконагруженых проектов?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Хайлоад хайлоаду рознь.

    Не бывает двух одинаковых хайлоадов, при том что тысячи их...

    Каждая команда городит с вой винегрет технологий и велосипеды-мутанты.
    Ответ написан
    Комментировать