• Как реализовать быстрый поиск в массиве объектов по значению свойства?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Не сваливать все в объект, а сразу писать в IndexedDB, а необходимые для оперативной обработки данные, например выборку по городу, брать средствами работы с IndexedDB.

    Для браузеров не умеющих работать с IndexedDB есть библиотека PouchDB, менее шустрая, чем нативные встроенные в браузер реализации (UPD: если их нет, в противном случае - используются нативные), но даже на старых браузерах (IE7,8) будет выигрыш, как по удобству манипуляции данными, так и по скорости.

    UPD: обращение к IndexedDB НЕ блокирует интерфейс и может использоваться в воркерах (см. issues на странице).

    UPD: кстати, PouchDB :
    • сам использует IndexedDB, когда она доступна, в старых WebKit, в т.ч. на Android использует WebSQL, когда совсем плохо (старые IE) - тоже чего-нибудь придумывает, как минимум - localStorage;
    • дает возможность работать с серверными данными, как c локальными, когда они доступны, идеальное решение для снижения заморочек с созданием "оффлайн" приложения или одностраничника с "миллионом записей", проводя "репликацию";
    • все танцы с бубном вокруг индексов - фоновая, абсолютно прозрачная задача.
    • если поставить на сервере CouchDB или эмулировать ее Rest api - можно забирать всех "Вась из Омска" прямо с сервера одним вызовом
    UPD: И когда, наконец, народ научиться подбирать подходящий инструмент для работы, а не валить лес пилкой для ногтей и не вскапывать грядки карьерным самосвалом?
    Ответ написан
    1 комментарий
  • Существует ли "карта программиста"? Что и за чем учить?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    copist
    @copist
    Empower people to give
    Список которым пользуюсь я:
    1. Регулярно участвуй в сообществах взаимопомощи веб-разработчиков. Отвечай на вопросы на toster / hashcode / mail.ru / stackoverflow и сотне подобных сервисов. Это тебе самому поможет разобраться в проблемах, заодно набьёт карму. Тут нет противоречия - помогай другим, чтобы учиться самому.
    2. Занимайся проектами с открытым кодом. Например, решай issue из чужих репозиториев на github, вот утилита для выбора случайного issue по нужному языку tevko.github.io/practice/index.html. Заодно включай их в своё портфолио.
    3. Учись читать чужой код, делай ревью чужого кода. Например, на codereview.stackexchange.com/. Потому что читать код - это 80% работы программиста.
    4. Можно попробовать оказывать микроуслуги (пример: work-zilla.com или https://www.fiverr.com/ - ищи аналоги) - будешь получать небольшие деньги за выполнение разовых работ, в частности исправление чужих сайтов, парсинг данных и прочее. Я так и начинал. Не с бирж фрилансеров, а с бирж микроуслуг. Там гораздо меньше объём работ, такие микроработы легко выполнять в свободное время.
    5. Поищи проекты, где начинающие веб-разработчики ищут себе компаньонов для совместных проектов. Например, дизайнер ищет фронта, бакенд ищет фронта. Я видел, есть специальные разделы на форумах на Envato, Behance.
    Ответ написан
    Комментировать
  • Видеоуроки по изучению JavaScript?

    qork
    @qork
    { background: #F00B42 }
    У Борисова что JS что PHP советую.
    Ответ написан
    Комментировать
  • Чем делать "домашние" backup'ы?

    JonNiBravo
    @JonNiBravo
    Я использую Acronis True Image Cloud www.acronis.com/ru-ru/personal/online-backup
    Буржуйские сервисы тоже тестил, оказались слишком медленными
    Ответ написан
    3 комментария
  • Механизм включения/выключения Bootstrap-адаптивности для сайта - как реализовать переход на полную версию сайта?

    Big_person
    @Big_person
    Адаптивная верстка на то и адаптивная, что не требует какого-либо переключения.
    Все компоненты располагаются на странице согласно сетке getbootstrap.com/css/#grid
    Для скрытия и отображения отдельных блоков используйте утилиты адаптивности getbootstrap.com/css/#responsive-utilities

    Если же нужно именно отключить адаптивность, тогда используйте <meta name="viewport" content="width=1024" >
    Ответ написан
    Комментировать
  • Как получить все возможные варианты "соединения" строк из 4 или более массивов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    число перестановок - n факториал

    т.е. count = len(a)*len(b)*len(c)*..*len(x)

    алгоритм - банальный for по вложенным массивам

    a = ['a1','a2','a3',]
    b = ['b1',]
    c = ['c1','c2',]
    d = ['d1','d2','d3','d4',]
    
    
    total = []
    for i in range(0, len(a)):
        for j in range(0, len(b)):
            for k in range(0, len(c)):
                for l in range(0, len(d)):
                    total.append(a[i]+b[j]+c[k]+d[l])
    
    print(total)
    print(len(total))
    Ответ написан
    3 комментария
  • Удаление элемента при помощи динамически создаваемых атрибутов в jQuery?

    @matios
    Technical Team Lead
    $(document).on('click',".delete-input", function(){
        var rel = $(this).attr("rel");
        if (rel) {
            var removedEl = $("#addimage"+rel);
            removedEl.fadeOut(300, function(){
                removedEl.remove();
            });
        }
    });


    Казалось бы - тоже самое, но нет. В вашем случае вы дважды ищите ВО ВСЕМ DOM дереве нужный узел. В моем случае узел находится единожды. Экономьте память ;)
    Ответ написан
    Комментировать
  • Удаление элемента при помощи динамически создаваемых атрибутов в jQuery?

    xPomaHx
    @xPomaHx
    1vs9
    $(document).on('click',".delete-input", function(){
        var rel = $(this).attr("rel");
        $("#addimage"+rel).fadeOut(300, function(){
            $("#addimage"+rel).remove();
        });
    });
    Ответ написан
    Комментировать
  • Для чего нужен Docker?

    @spotifi
    Внутри Docker только Linux, и, экспериментально, FreeBSD. Запускается нативно под Linux и, экспериментально, под FreeBSD. Под MacOSX, Windows - через виртуальную машину.

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

    Это почти виртуальная машина. Почти, да не совсем.


    Есть такое понятие "ад зависимостей". Любое ПО устанавливаемое на компьютер, тянет за собой зависимости (конфигурационные файлы, статические файлы называемые обычно asset, вспомогательные утилиты/сервисы, библиотеки и пр.). Ряд из этих библиотек/утилит/сервисов несовместим друг с другом. А с учетом того, что каждая из этих библиотек/утилит/сервисов имеет и свои зависимости - ситуация еще хуже.

    Например, мы используем Yandex.Cocaine, которая нормально компилируется только на Ubuntu 14.04 (и, вроде, на Debian 7). Но не под CentOS 6, 7, Debian 8, FreeBSD 9, 10, Ubuntu 15, 16 и пр. - скомпилировать его невозможно. Запускаем в этих операционных системах в Докере.

    С другой стороны, и одновременно с этим, вам необходимо установить другое, более современное ПО. И одновременно более старое. Причем речь даже не идет об серьезно отличающихся версиях Linux. Например, одно ПО требует не менее Ubuntu 14.10, а другое не более Linux 14.04.

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

    Таким образом, мы имеем бинарный файл запускаемый как бы в своей операционной системе.

    Вы можете сказать - ба, да это же давно известная виртуальная машина. Но нет, это не так. Это так называемые контейнера. Никакой виртуальной машиной там и не пахнет. За исключением Windows и MacOSX, где работа без виртуальном машины пока экспериментально возможно только, а нормой в этих ОС является использование Докера внутри полноценной виртуальной машины.

    Но виртуальные машины с Докером используются только для разработки. Для запуска в production виртуальные машины с Докер не используются.

    Докер использует контейнеры операционной системы. LXC в Linux, Jails в FreeBSD. Контейнер - это область операционной системы, изолированная от основной части операционной системы. В контейнере свое дерево каталогов (включая системные /dev, /bin, /sbin и пр.), свои сетевые порты и пр. и пр.

    Но при этом не используется полная виртуализация. Что существенно экономит ресурсы. Запустить 100 полноценных виртуальных машин вряд ли получится даже на мощном сервере. А вот запустить 100 контейнеров Docker даже на слабом домашнем компьютере - возможно.

    Правда использование не полной виртуализации ограничивает использование операционных систем внутри контейнеров. Как правило, это специально подготовленные версии Linux или FreeBSD. Именно специально подготовленные. Windows - в принципе в контейнере запустить невозможно.

    Контейнеры существовали и до Docker. Докер, строго говоря, это всего лишь очень удобный набор инструментов, собранных воедино, для управления контейнерной виртуализацией. Но очень удобный.

    Зачем это используется?

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

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

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

    Более того - изначально разработчик программного обеспечения тестирует программу в контейнере Докер, с определенными настроками. И в этом же (или с такими же настройками) контейнере Докера программа уезжает на сервер.

    Это позволяет гарантировать гораздо большую идентичность среды разработки и среды исполнения.

    До этого люди мучались, придумывали хитрые инсталяторы...

    Потом плюнули на попытки упорядочить окружение в ОС - и сейчас концепция такова - устанавливать программы на сервера вместе со своими индивидуально настроенными под них операционными системами - то есть внутри контейнеров. 1 контейнер = 1 настройка ОС = 1 программа внутри.

    Другими словами:
    • Докер-контейнер нужно использовать для отладки.
    • Тот же Докер-контейнер нужно использовать и на сервере.


    Это позволяет не трудиться с настройками "под сервер" локально на машине разработчика. Это позволяет разрабатывать на машине разработчика совершенно разные программы одновременно, которые требует несовместимых настроек операционной системы. Это позволяет давать гораздо больше гарантий, что программа на сервере будет вести себя также как и на машине разработчика. Это позволяет разрабатывать под Windows/MacOSX с удобным "прозрачным" тестированием под Linux.

    Докер применим к созданию/настройке только серверного программного обеспечения под Linux (экспериментально под FreeBSD). Не для смартфонов. А если десктопов - то только программное обеспечение без GUI.

    Посколько Докер позволил одним махом упростить работу разработчикам и админам и повысить качество результата - сейчас бум на Докер. Придумано огромная гора инструментов для управления развертыванием приложений созданных с Докером. Если раньше чтобы запустить 10 000 программ на 1000 серверах нужно было как минимум 3 высококвалифицированнейших девопса, которые писали кучу описаний как это сделать на Puppet, Salt, Chef, Ansible, да и то не было гарантий, это все тестилось месяцами. То сейчас с Докер даже один квалифицированных девопс может рулить миллионами программ на десятках тысяч серверов. С куда как большей гарантией, что все это заведется нормально.

    UPD:

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

    Разработчик отдает весь свой результат в систему CI (обычно через git)
    CI на каждый новый коммит делает с помощью Docker образ для тестирования.
    Если тесты проходят успешно, то этот же самый Docker образ, отправляется на развертывание в production.
    Или, чуть иначе в компилируемых системах, где исходники не нужны в production: в Docker производится развертывание среды для компиляции, а для тестирования разворачивается второй образ с уже откомпилированным добром, который уже отправляется в production.

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

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

    Sergei_Erjemin
    @Sergei_Erjemin
    Улыбайся, будь самураем...
    Практически художественная детско-приключенческая литература по математике для 4-5 классов -- "Три дня в Карликании" и "Черная маска из Аль-Джебры". Ну прочее Владимира Левшина.

    И еще книги Якова Перельмана: "Занимательная Алгебра", "Занимательная Математика", "Занимательная Арифметика", "Физика на каждом шагу" и т.п. Их наши дедушки читали с увлечением, и правильно делали (ссылка для справки)... Сейчас много новых изданий, но в детстве я читал растрепанные издания 40-х, 50-х и 60-х... захватывающее чтение!

    Для более продвинутых в математике, проверенная классика моего детства -- книги Мартина Гарднера (иногда с соавторами): "Математические досуги" (1972), "Крестики-нолики" (1988), "Математические новеллы" (1974), "Математические чудеса и тайны" (1982)... К счастью Мартина Гарднера иногда переиздают до сих пор.

    Для совсем увлеченных очень классные были "Библиотечки КВАНТ". В букинистических стоят копейки. А реально офигительные!
    Ответ написан
    Комментировать
  • Как сделать сслылку для viber и wathsapp?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Комментировать
  • Где взять актуальную базу России регионов->городов->улиц в формате sql?

    andrew72ru
    @andrew72ru
    системный администратор, веб-разработчик
    Ответ написан
    Комментировать
  • Нужно ли из ноутбука снимать батарею?

    @Dum_spiro_spero
    Asus K73 (17", i5), используется в качестве десктопа - к нему подключены большой монитор, клавиатура, мышь. 100% времени включен в розетку, батарея не вынимается. 4 года в таком режиме - полет нормальный. Иногда таскаю в поездки - заявленные изначально три часа часа по прежнему держит. На пару фильмов в самолете хватает.
    Ответ написан
    Комментировать
  • Где можно оценить свой код?

    maaGames
    @maaGames
    Погроммирую программы
    "Ваш код гавно!" (с)
    Если возникают сомнения, а не г0вно ли мой код, то он, однозначно, гавно.
    Ответ написан
    3 комментария
  • Какой список литературы для структурированного изучения программирования?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Если бы имел машину времени, чтоб вбить "Я-в-прошлом" то что надо читать, то это было бы так:
    1. Таненбаум про его Операционные системы
    2. Таненбаум про аппаратное обеспечение
    3. Язык программирования Python по книге Лутза и при этом чтение "Structure And Interpretation Of Computer Program".
    4. Только после этого приступил бы к чтению Керниган, Ричи "Язык С"
    5. Попытался бы влиться в какой-нибудь OpenSource проект

    Далеее уже следуют попытки понять к чему душа лежит, толи вебу, толи linux kernel module, толи еще что.
    В течении этих пункто НЕПРЕРЫВНО улучшать английский. Большинство серьезной литературы о новых технологиях появлятся сначала на английском.
    Ответ написан
    10 комментариев
  • Как самому доучить математику?

    globuzer
    @globuzer
    gezgrouvingus progreszive ombusgrander greyderzux
    Во-первых, определите, зачем вам математика, и нужна ли она вообще реально вам на сверхглубоком уровне? Если вы действительно занимаетесь версткой хтмл+цсс, математика вам постольку-поскольку нужна, того что знали вполне хватит.
    Во-вторых, если вы хотите куда-то двигаться в более специфичные сферы, типа программирование, анализ данных, биг-дата, статистика, и прочее - то берете любой учебник, читаете содержание и пытаетесь изучать каждую главу как из этого самого же учебника, так и читая все что выдает поисковик по этой теме. Ну и главное пробуете решать, проверяете свои решения и сверяете ответы - вы должны понимать суть и уметь решать. Тогда к вам придет осознание смысла математики и как ее применять.
    В-третьих, чтобы не забыть что уже изучили изредка решайте примеры на уже пройденные намного ранее темы, а лучше устраивайте себе тесты и контрольные. Учебников, задачников в интернете навалом, даже яндекс предлагает сервис по тестированию для ЕГЭ, повторяйте и это, школьный уровень тоже будет полезен, основы повторите. А сканированных книг, методик и программ обучения математике - пруд пруди.
    Поставьте конкретные цели, определите что вам и зачем и вперед по собственному намеченному плану! Удачи вам! Математика - всегда пригодиться! Это вещь!
    Ответ написан
    2 комментария
  • Как перезапустить функцию после ajax?

    @kgorozhanov
    Front-End Developer
    var count = 0;
    $(function() {
        count = $('input.com-check:checked').length;
        displayCount();
    
        $(document).on('click', 'input.com-check', function(e, a) {   
             if (this.checked) {
                  count += a ? -1 : 1;
             } else {
                  count += a ? 1 : -1;
             }
             displayCount();
        });
        $('#invert').click(function(e) {    
             $('input.com-check').trigger('click', true)
        });
    });
    function displayCount() {
        $('#count').text(count);
    }
    Ответ написан
    2 комментария
  • Верстать без фреймвороков это значит быть не професионалом?

    @hopajeci
    Без фрейморков верстают или профи (при соответствующих хороших бюджетах).
    Или новички, которые слов таких даже не знают.
    Или те, кому освоить фреймворки не позволяет лень, глупость, гордость или, наоборот, и так хорошие заработки - кто способен потом с заказчика брать дополнительные деньги, когда выясниться, что в версии Y браузера Х не работает что-то что будет исправлено за отдельные деньги.

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

    Верстаем мы всегда с макета.
    Я не говорю о таком кейсе как собрать админку из компонентов бутстрапа по прототипу - это как раз самое правильное его использование.

    Так вот от макета мы очень сильно зависим.
    Если дизайнер потрудился хотя бы использовать сетку, то сетка и система breakpoints из Botstrap (4 версия, на scss) нам очень поможет. Если дизайнер идиот - не поможет ничего.

    В моем шаблоне проекта сетка и брекпоинты есть по умолчанию. Так же как некоторые helper-классы.

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

    Насколько классы предлагаемые бутстрапом впишутся в общий стиль проекта?

    Насколько мы облегчим поддержку проекта, перекостылив под дизайн половину того что взяли от бутстрапа, а 2/3 проекта написав своими стилями?

    Я видел как по дефолту суют
    bootstrap.min.css
    bootstrap-theme.min.css
    bootstrap.min.js
    потом в отдельном файле переопределяя и дописывая все что нужно. Целый мать его bootstrap.min.js из которого использовалось только меню-бутерброд!

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

    И что, насколько я новичёк и максималист с моей библиотекой миксинов (документированных, в т.ч. из бутстрапа), scss файлами, разнесенными по блокам и BEM-подходом к наименованию классов?
    С опрятным css на выходе и инструкцией-рекомендацией как и зачем всё же использовать препроцессоры.

    Таким образом, присоединяюсь к ответам Сергей и Serj-One . Каждой задаче - свой инструмент.
    А поддерживать легко не столько код где использовался фреймворк (особенно в контексте css), а код, где использовалась голова.

    P.S. Вот ещё достойное мнение например:https://gist.github.com/iAdramelk/d328b73c72cab92ef95f
    Ответ написан
    Комментировать