• Хорошие книжки по JavaScript?

    UrKonAn79
    @UrKonAn79
    Начинающий кнопкотык))
    мне очень помог сайт code.mu и w3schools
    Ответ написан
    Комментировать
  • Где найти таблицу HEX цветов?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    Вот небольшой список, сам пользуюсь:
    https://www.materialui.co/colors
    https://brandcolors.net/
    https://colorscheme.ru/
    Ответ написан
    Комментировать
  • Как научиться писать приложения на pure JS?

    dummyman
    @dummyman
    диссидент-схизматик
    Поддерживаю вас. В современных браузерах и других интерпретаторах js есть все необходимые средства для программирования без всяких там "jQuery и ко".

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


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

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


    На самом деле, мета-программирование на javascript - это не всегда положительная сторона. Есть тысяча и один фреймворк, которые могут послужить хорошим примером, как делать не надо!
    Вспомним хотябы GWT, YUI. Потом ExtJS4 - полная срака из кастомной структуры классов с наследованием двадцатого уровня. Для реализации того функционала можно было выкинуть 3/4 кода. Может быть, во времена популярности prototype.js+script.aculo.us, ExtJS 2 был "хорошим инженерным решением", но в 4й версии - с абстракциями явный перебор.

    На русском языке обязательно прочтите Гарден.
    Хорошую книгу написал Джон Резик. Есть русская версия, правда только первое издание.
    a4ab075560824f9e8283565363a7561f.jpg
    Поверьте, фреймворки - зло! Не пишите лишнего кода сверх решения задачи. Компенсируйте максимум структуры приложения в html и css.
    Ответ написан
    5 комментариев
  • Чем друг от друга отличаются эти три выражения?

    Lynn
    @Lynn
    nginx, js, css
    Первые две ничем. В третьей нет вызова функции
    Ответ написан
    Комментировать
  • Чем друг от друга отличаются эти три выражения?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1)
    var i = 0;
    if( (function(){return i%2==0})(i) ){
      console.log(i);
    };

    в условии функция, вызванная с глобальной i=0, вернет true, в консоль выведется 0

    2) То же самое, что 1). Только в 1) функция обернута в скобки, и то что в скобках - вызывается, в 2) в скобки обернут результат вызова. В консоль - 0.

    3) Нет вызова функции внутри скобок, но сама функция интерпретируется как true, и получаем тот же 0 в консоли.

    Зачем это всё? В образовательных целях?
    Ответ написан
    2 комментария
  • Какую книгу по алгоритмам посоветуете?

    А. Бхаргава "Грокаем алгоритмы. Иллюстированное пособие для программистов и любопытствующих"
    Ответ написан
    2 комментария
  • Какую книгу по алгоритмам посоветуете?

    Bandicoot
    @Bandicoot
    Вась-программист
    Cracking the Coding Interview в русском переводе
    Самый простой учебник после Грокаем алгоритмы, ориентируюсь на него в процессе подготовки к будущим собеседованиям.
    Ответ написан
    4 комментария
  • Какую книгу по алгоритмам посоветуете?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Очень рекомендую эту книгу.
    Большая, толстая. очень наглядные структуры с алгоритмами и разборами. На Java. Куча заданий
    5ed4d44738e32888903594.jpeg

    И вот эту серию. Простая и легкая, но хорошая:
    5ed4d4c55de8b750006156.png
    Ответ написан
    7 комментариев
  • Как открыть терминал в текущей папке на MacOS?

    ArsenBespalov
    @ArsenBespalov
    Сам себе разработчик
    Можно еще в открытом терминале набрать команду

    cd

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

    @granty
    Куки исключены, браузер не сохраняет их и не хранит историю.

    1. Про evercookie слышали? А про Web Fingerprint?
    На хакере перечислена масса способов хранить ID на вашем компе без использования Куков и кэша, а технология Web Fingerprint позволяет хранить цифровой отпечаток компа, браузера на сервере банка: Фингерпринтинг конкретного ПК с точностью 99,24%, не спасает даже смена браузера.

    Если вы - клиент банка и заходили в его интернет-банкинг, он легко может вас опознать при использовании того же браузера и того же компа.
    А если у вас на мобиле установлено приложение интернет-банкинга - вы вообще под колпаком :)

    2. Если вы лазите по инету залогиненым в Вконтакте/Яндексе, то через backdoors в их API можно определить ваш профиль и все ваши данные.
    Сайт Соцфишинг работает на этом принципе.
    Сам банк тоже может использовать соцфишинг и ставить невидимый ифрейм на своё меню, и при клике вы автоматически авторизуетесь через аккаунт, например, Вконтакте. Зная ваш ID на Вконтакте, ваш телефон легко узнаётся, их базы регулярно сливаются и продаются

    PS: Узнать как конкретно вас "слил" и каким образом - невозможно без исследования конкретной ситуации.

    факультатив

    Всё вышеперечисленное - детский лепет по сравнению с тем, какие возможности имеет Google (и, частично, Яндекс с Apple).
    У всех дома стоит точка WiFi, к которой коннектится ваш комп и мобильник с Андроид. Через мобильник Гугл знает все номера телефонов, которые подключаются к этой точке доступа (и все аккаунты соцсетей в которые вы логинились с мобильника). Поэтому когда вы лезете Хромом с компа через эту же точку доступа - Гугль уже знает, что это вы (или один из ваших домочадцев). По GPS на мобильнике он знает даже адрес вашего проживания с точностью до подъезда.
    Так что мы все давно уже добровольно "чипованы", чего удивляться что о нас всё известно.
    Ответ написан
    Комментировать
  • Как развиваться начинающему web-разработчику?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я в начале 2000-х писал приложение для учета некоммунальных услуг ЖКХ для местного МУПа. Начинался этот проект как тестовое задание для приема на работу.

    Писать можно было на чем угодно, но на тот момент для меня лучшим инструментом казался Clipper 5.x, которым я, как мне тогда казалось, более-менее владел.

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

    Забегая вперед скажу, что автоматизация, в конце концов, удалась, из режима работы 3 человека по 8 часов в день 6 дней в неделю, за 6 месяцев после начала внедрения, вышли в режим 1 человек 2 часа в день 5 дней в неделю... Т.е. 3*8*6*4 = 576 человеко-часов превратилось в 2*5*4 = 40 ч/ч, КПД был увеличен в 14.4 раза.

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

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

    Далее я реализовывал эти пути как разумел и предоставлял тётушкам.

    И о чудо, обычно на этом этапе прорезался дар речи (тётушки, как все нормальные люди, обожают критиковать то, что по их мнению "не так"), и на меня начинал сыпаться поток весьма конкретных и ёмких ЦУ (ценных указаний), которые я подробно документировал и впоследствии претворял в жизнь.

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

    Первые месяцы они вели двойной учет, по старинке в своей огромной бухгалтерской книге, и в программе, и программу проверяли по книге. Через 2-3 месяца они убедились, что в программе "цифры" точнее, ошибки отлавливаются быстрее, меньшими усилиями, и стали уже свою книгу проверять по программе. Через 5-6 месяцев я написал им модуль расчета и распечатки месячного отчета, и они перестали вести свою книгу, просто печатали ее каждый месяц на огромном матричном принтере.

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

    Условно можно разделить основной функционал приложения на 2 фазы - ввод/редактирование/просмотр данных и построение отчетов/выборок. С отчетами и выборками тёмный лес, т.к. требования меняются непредсказуемым образом любое количество раз в году (по началу), а вот с вводом и редактированием данных в целом ситуация стабильная, тем более за предыдущие 3 версии я достаточно хорошо исследовал этот процесс.

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

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

    Первейшая проблема программ на Clipper 5.x это банальное отсутствие таблиц БД, либо слетевшие индексы. Это первое, чем я озаботился. программа при запуске проверяет наличие или отсутствие таблиц и индексов, и чего не хватает - достраивает на лету. Таким образом можно потерять данные, но программа, все равно, работать будет. Чтобы это стало возможным, потребовалось в программе прописать структуры таблиц БД и индексов.

    Вторым этапом, дико устав копипастить на 95% совпадающий код для построения форм, а, потом, когда надо что-то поменять, добавить или исправить, шариться по тоннам на 95% идентичного кода в сотне мест, я решил прибиться к стану метапрограммирования.

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

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

    Причем генератор грамотно отрабатывал множественную вложенность, и каждый вызываемый справочник имел полный функционал CRU (Create, Read, Update), включая фильтрацию по столбцам и сортировку.

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

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

    Для реализации этого функционала пришлось пропатчить стандартный грид TBrowse (он применяется для просмотра таблиц).

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

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

    P.S.: когда я мигрировал в веб, через некоторое время я снова вынужден был пройти аналогичный путь, в результате которого родился простенький AJAX-фреймворк на стеке PHP+Smarty+DBSimple+jQuery. Сегодня я всеми силами стараюсь от него уйти, хотя для своих задач он достаточно хорош. Был опыт, когда на шареном хостинге за 5 баксов проект на этом фреймворке со скрипом но держал 30-40 тысяч уников в сутки (после ряда оптимизаций) и достаточно хорошо был защищен от топорного взлома через SQL-инъекции благодаря DBSimple...
    Ответ написан
    1 комментарий
  • Что такое замыкание?

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

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

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

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

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

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

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

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

    В ответах есть пример со счетчиком, который наглядно демонстрирует этот принцип.
    Ответ написан
    2 комментария
  • Действительно ли reduce, filter, map и прочие работают медленнее обычного for?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Методы массивов на вход получаются коллбек, потом его вызывают, получают обратно значения.

    Многие из коллбеков создают и заполняют новый массив. Это всё накладные расходы.
    Ответ написан
    Комментировать
  • Как прокачаться до middle frontend?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Чтобы считаться боевым мидлом, нужно успешно решить 20+ небольших и средних проектов, собрать основные грабли на практике, выработать сотни готовых микро-решения для всевозможных кейсов, знать и уметь в базовые алгоритмы и структуры данных, хорошо владеть базовым API языка, уметь понимать задачи и решать их в соответствии с ожиданиями, пусть не идеально.

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

    Уменьшить карточку можно примерно вот так:

    Ответ написан
    Комментировать
  • Как вы справляетесь с тупняком в программировании?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Когда у меня что-то не получается с ходу, а такое бывает периодически, не смотря на 25+ лет опыта в отрасли, это означает что я либо чего-то недоучел, либо одно из двух. Ну и в целом лично у меня это вызывает дикий азарт по типу "Как так то, у самого меня и не получилось??? Да ну не. А ну иди сюда!"

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

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

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

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

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

    Любой успешный разработчик тот еще джедай. :)
    Ответ написан
    Комментировать
  • Как вы справляетесь с тупняком в программировании?

    @j3f4n
    Почитайте обязательно статью Пуанкаре на эту тему, там все прекрасно описано.
    Кратко - все так и должно быть.

    Если голова начинает тупить отлично работает Ноотропил (в моем случае), более дешевые вариации пирацетама дают горазо меньший эффект. Можно еще попробовать чай+кофе (L-theanine+кофеин), сахар, просто питание. Но все стимуляторы еще нужно правильно принимать (в связке, курсами), хотя разовые приемы работают тоже.
    Больше тут и на канале.
    Ответ написан
    Комментировать
  • Как вы справляетесь с тупняком в программировании?

    smilingcheater
    @smilingcheater
    Стоя в душе ­– думайте. Катаясь на велосипеде, прогуливаясь по парку, выделывая невообразимые трюки на роликах ­– думайте. Сталкиваясь с дилеммами, которые обусловлены принятыми проектными решениями, ­­– думайте. Думать значительно полезнее, чем смотреть телевизор или бесцельно бродить по Сети, – пусть даже там 500 каналов, но на самом деле на них ничего не происходит, и то, что они как будто избавляют человека от необходимости мыслить, совершенно не здорово. Думайте напряженно, до изнеможения, а когда не останется сил – начинайте заново. Результат вас удивит.

    (c) Дж. Ханк Рейнвотер. Как пасти котов
    Ответ написан
    1 комментарий
  • Как побороть сонливость и апатию в течение дня?

    Judixel
    @Judixel
    Front-end Engineer
    Начните со сдачи базовых анализов, возможно какие-то отклонения показателей от нормы:

    - Холестерин
    - Аполипопротеин
    - Креатинин
    - Скорость клубочковой фильтрации
    - Билирубин (общий, прямой, непрямой)
    - АлТ, АсТ (маркеры печени)
    - Тестостерон
    - Эстрадиол
    - Пролактин
    - Прогестерон
    - ГСПГ (глобулинсвязывющие половые гормоны)
    - Кортизол
    - ЛГ (лютеинезирующий гормон)
    - ФСГ (зачатие)
    - ТТГ, Т3, Т4
    - Гормоны щитовидной железы
    - Гормон роста и ИФР-1
    - Генетический тест
    - С-Реактивный белое
    - ПСА (общий и свободный) онкология
    - Узи коронарной артерии
    - ЭЛИ-Н Тест 12

    Так поймете чего вам не хватает. Либо сходите к психотерапевту. Один сеанс может открыть глаза на вашу проблему.
    Ответ написан
    1 комментарий
  • Как побороть сонливость и апатию в течение дня?

    ttone
    @ttone
    Design / AE / Nuke
    Меня Панк-рок музыка бодрит.
    Ответ написан
    Комментировать