• Можно ли в Raid вставлять диск большего объема?

    Jump
    @Jump
    Системный администратор со стажем.
    Можно ли в Raid вставлять диск большего объема?
    Да.

    Я правильно понимаю, что в втором массиве требуется заменить диск в 3 Тб.
    Да.

    Насколько принципиален вендор?
    Не имеет значения.

    Не развалится ли массив, если я воткну другой диск 3 Тб?
    Нет.

    В первом массиве возможно ли поставить диск другой модели и емкости например 500 Гб ?
    Да.

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

    И если вы не имеете опыта работы с этими массивами на этом контроллере - сделайте бэкап, или убедитесь что есть достаточно свежий бэкап.
    А если опыт есть - тогда просто сделайте бэкап, или убедитесь что есть достаточно свежий бэкап.
    Ответ написан
    Комментировать
  • Как спозиционировать блок по центру правильно?

    .popup
    {
    width: 400px;
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    }

    если хочешь так сделать не забывай отнимать половину блока, нужно дописать margin-left: -200px тогда будет точно по центру, если просто left: 50% то не по центру блок станет. Левый край блока поставит по центру просто.
    Ответ написан
    Комментировать
  • Как сделать несколько кнопок на сайте, при нажатие на которые в определенный див будет добавляться определенный текст и скрывать предыдущий текст?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    Каждому кругу добавим data-атрибут:

    <tag data-word="Слово">

    А далее немного jQuery:

    $(document).on("click", selector, function(){
       $(output).text(this.dataset.word);
       //Или $(this).attr("data-word");
    });


    selector - CSS селектор круглых блоков.
    output - селектор блока, в который будет выводится текст
    Ответ написан
    1 комментарий
  • Как вы выбираете что нужно изучить?

    IonDen
    @IonDen Куратор тега IT-образование
    JavaScript developer. IonDen.com
    Есть база: EcmaScript 5 и CSS(3) - надо знать
    Есть будущее: EcmaScript 2015 и CSS3(4)+ - надо поглядывать и быть в курсе
    Есть популярные расширения CSS: LESS/SASS/Stylus и т.д. - выбрать что-то одно и изучать использовать.
    Популярные расширения JS: EcmaScript 2015 on Babel, TypeScript, CoffeScript и т.д. - я бы выбрал EcmaScript, так как 2 зайцев одним выстрелом.
    Есть известные фреймворки CSS: Bootstrap - приятно знать
    Есть известные JS фреймворки: jQuery - обязательно знать, SPA-фремворки/библиотеки (Angular, Ember, React, Backbone и т.д.) - обязательно начать что-то изучать и использовать.
    Так же не стоит забывать про системы сборки: Grunt/Gulp/Webpack и т.д. обязательно начать изучать что-то из этого.
    Плюс всегда стоит помнить о работе в команде (даже если вы сейчас работаете один): это Git и GitHub/Bitbucket - тоже обязательно изучать.
    + я не затронул кучу других вопросов: оптимизация, алогоритмы, сетевые протоколы, особенности работы браузеров и т.д.
    + для общего развития полезно изучать еще какой-то язык, помимо JS

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

    Если не требуется поиск позиции где встретилось значение, можно регуляркой:
    var str = 'Привет, мир';
    var reg = /привет/i;
    reg.test(str) => true
    Ответ написан
    Комментировать
  • Как сделать так, чтобы функция выполнялась только после того, как другая завершится?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Дисклеймер
    Кому не нравится название "обещания", мысленно заменяйте его на то, которое считаете подходящим. Я выбрал именно его, чтобы концепция, лежащая в их основе, была интуитивно понятна.

    Если функция асинхронная, то лучше всего использовать обещания, что вы и попытались сделать (интерактивный пример).
    one().done(two);
    
    function one() {
        var dfd = new $.Deferred();
    
        // Запускаем асинхронную задачу. Например, ajax-запрос.
        setTimeout(function () {
            var foo = 'bar';
    
            // "Выполняем обещание", передавая в него какую-то информацию.
            // Передавать аргументы, разумеется, не обязательно.
            dfd.resolve(foo);
        }, 2000);
    
        // Возвращаем из функции обещание, на которое могут подписаться другие функции.
        // Обратите внимание, этот код выполнится до того, как завершится асинхронная задача.
        return dfd.promise();
    }
    
    function two(foo) {
        // Обрабатываем данные, полученные внутри асинхронной функции one.
        console.log('two', foo);
    }

    Для трех функций расклад немного сложнее, но принцип такой же.
    Есть и более элегантный способ запуска цепочки из трех функций:
    код
    one().then(two, onOneError).then(three, onTwoError);
    
    function one() {
        var dfd = new $.Deferred();
    
        setTimeout(function () {
            console.log('one');
            
            if (Math.round(Math.random() * 10) >= 5)
            {
                dfd.resolve();
            }
            else
            {
                dfd.reject();
            }
        }, 1000);
    
        return dfd.promise();
    }
    
    function two() {
        var dfd = new $.Deferred();
    
        setTimeout(function () {
            console.log('two');
            
            if (Math.round(Math.random() * 10) >= 5)
            {
                dfd.resolve();
            }
            else
            {
                dfd.reject();
            }
        }, 1000);
    
        return dfd.promise();
    }
    
    function three() {
        setTimeout(function () {
            console.log('three');
        }, 1000);
    }
    
    function onTwoError() {
        console.log('twoError', arguments);
    }
    
    function onOneError() {
        console.log('oneError', arguments);
    }

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


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

    Другой вариант - передавать callback, но это прямой путь в callback hell. Для запуска трех и более функций подряд я его не рекомендую - смотрите сами, на что становится похож код:
    one(function () {
        two(three)
    });
    
    function one(callback) {
        console.log('one');
        setTimeout(callback, 1000);
    }
    
    function two(callback) {
        console.log('two');
        setTimeout(callback, 1000);
    }
    
    function three() {
        console.log('three');
    }


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

    Если внутри функций ничего асинхронного нет, то можно просто вызвать их друг за другом - следующая и так запустится после предыдущей (пример).
    Ответ написан
    5 комментариев
  • Стоит ли использовать ооп?

    Тостер, ну почему ты не сохраняешь где-нибудь в local storage сообщения, которые не дописаны? Ааааа! В общем, написал, закрыл вкладку, пишу снова.

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

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

    Императивная программа состоит из инструкций, которые что-то меняют в памяти. Если смотреть с минимальным зумом, то много инструкций - это функция. А много функций - это модуль. С точки зрения инженерии ПО важно программе быть максимально модульной, максимально DRY, легко изменяемой, эффективно решающей задачи поставленные и еще много чего. Так вот, кажется, у нас все есть, растащил по директориям кучу файлов, функции/модули/область видимости, но этого не хватит, ведь есть же еще типы, а их надо передавать туда-сюда, обрабатывать. Есть алгоритмы, которым глубоко фиолетово, что обрабатывать, будь то массив, словарь, список, дерево или даже генератор (люблю питон @ пиарю где могу). Кстати говоря, тут можно задуматься о сути итераторов, но это оффтопик.

    Во времена популярности ассемблера типов "еще не было". И это вызывало проблемы: множество рутины, множество кода, возможность прострелить себе регистр и так далее. Во времена C были примитивные типы и даже структуры, которые могли хранить данные и указатели на данные. Но все еще как-то неудобно, множество низкоуровневых действий. Нет даже строк, представлять их в виде массива - не слишком удобно, гораздо лучше иметь что-то вроде черного ящика. Где-то в те же времена уже было ясно, что нужно иметь еще более абстрактные типы, которые могут хранить контекст, иметь свои функции (методы), инициализироваться, деинициализироваться. В общем, нужно создавать типы "высокой абстракции", а еще уметь их модифицировать, расширять, комбинировать. И лучше еще с памятью явно не работать. А еще чуть позже популяризовались языки с динамической типизацией, где стало можно не заботиться о типах совсем. Мне даже кажется, что тут уместно сказать, что типов будто "уже не стало". Все есть контейнеры со своей областью видимости. Правда, все это медленно, особенно, если учесть, что динамическая типизация очень любит интерпретацию или динамическую компиляцию. Чем выше уровень, тем все тормознее.

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

    С ООП теперь все удобно. Кроме модулей и функций есть сложные типы (классы), которые можно свободно создавать, наследовать, регулировать область видимости, заменять методы, использовать интерфейсы, "строить модули внутри модулей", не использовать глобальные переменные, внедрять зависимости, не дублировать код. В языках, реализующих неклассическое ООП, существует еще больше свободы. Можно использовать миксины направо-налево, классы являются объектами, а где-то и классов нет, потому что есть объект и с ним и так все хорошо))

    Это все особо важно и нужно в прикладных задачах, где обрабатываются разные данные, выводятся в разных видах или где есть интерфейс пользователя с множеством однотипных элементов. Практически всегда там возникает ситуация, когда нужно определить множество похожих объектов, сделать удобное API, использовать и расширять стороннюю библиотеку. Кроме того, существует множество паттернов, которые можно переносить откуда угодно куда угодно, не думая при этом. В вебе, с учетом того, что 95% приложений крутятся вокруг MVC и его вариаций, ООП очень даже кстати: модельки - это однотипные объекты из однотипных полей, имеющие в себе какую-то логику (свои функции/методы), контроллеры - однотипные объекты (получение данных/параметров запроса, выдача необходимого ответа в нужном виде). Если взять любой фреймворк, то там реализовано множество модулей, которые что-то реализуют: ORM, роутинг, кэш, сессии, request-объекты, response-объекты, какие-нибудь карты сайта, админки, модельки для юзеров, что-нибудь для работы со статикой, формы, локализация... Если нужно что-то расширить, то достаточно посмотреть на API, отнаследоваться, реализовать/заменить метод.

    Наверное, нужны какие-то примеры. Вот представьте, что пишете простой сайт, который должен отдавать готовый HTML. Но кроме этого сайт модный, поэтому он полностью ajax (html5 history api), никаких перезагрузок, только первая загрузка страницы, которая выгружает и фронт и стили и отрендеренную страничку, а потом дергаются нужные данные для других страниц (в json, туда кладется отрендеренная часть и еще какие-нибудь важные данные) с бэкенда. Оговорюсь, что это не SPA, а именно full ajax сайт, который все-таки еще рендерится на сервере в каком-нибудь серверном фреймворке. И ваш бэкенд должен отдавать, соответственно, 2 варианта страниц: обычную (как при прямом заходе по ссылке, это и для пользователя и для бота) и json-вариант для других страниц (это уже только для пользователя, соответственно). Вы создаете крутой контроллер, который в зависимости от параметров в GET, либо в зависимости от заголовка рендерит то json, то html. А дальше наследуетесь от этого контроллера и совсем не заботитесь о том, что у вас отдает конкретный контроллер: переопределяете метод с контекстом и отдаете в нем нужные данные, а уж что с ними станет в шаблоне или как их обработает фронтенд, получив из json, - без разницы. Нужно сделать только ajax-контроллер? У вас для него есть класс, осталось опять же только отнаследоваться. Нужно отдавать SEO-заголовки? Можно сделать миксин для контроллера и миксин для модельки и снова переопределить только один метод а-ля get_meta_title и все. Ну, понятное дело, я тут упустил мелкие подробности и все это актуально больше для языка вроде python и подобных (уж на чем пишу), но вот пример ООП-задач.

    Или у вас есть либа... Допустим, она зависит еще от трех других либ, плюс предоставляет какое-то API. Выглядит в виде класса, в нем несколько методов, пара публичных, + конструктор, + свойства. Пишете тесты, подменили зависимости объектами-пустышками и все получилось красиво. А как это сделать, использовать ли там какие-то специальные контейнеры или прямо на лету пропатчили класс (̶̶к̶а̶к̶,̶ ̶н̶а̶п̶р̶и̶м̶е̶р̶,̶ ̶м̶о̶ж̶е̶т̶ ̶п̶и̶т̶о̶н̶,̶ ̶п̶о̶т̶о̶м̶у̶ ̶ч̶т̶о̶ ̶о̶н̶ ̶в̶а̶м̶ ̶т̶а̶м̶ ̶н̶е̶ ̶"̶п̶а̶б̶л̶и̶к̶ ̶с̶т̶а̶т̶и̶к̶ ̶в̶о̶й̶д̶ ̶в̶с̶е̶ ̶м̶н̶о̶г̶о̶с̶л̶о̶в̶н̶о̶е̶ ̶и̶ ̶т̶о̶л̶с̶т̶о̶е̶ ̶г̶д̶е̶ ̶м̶и̶н̶и̶м̶а̶л̶и̶з̶м̶"̶), не суть.

    Да вот даже возвращаясь к тем итераторам, что я выше затронул. Допустим, есть у вас итератор и нужно сделать его thread safe. То есть при вызове метода, который возвращает следующий элемент, вы должны захватить мьютекс, а потом его отдать. Это легко можно сделать с помощью наследования: просто наследовавшись и обернув нужные методы. Либо с помощью интерфейсов, чтобы было универсально и для каких угодно объектов: реализуется интерфейс итератора в виде класса, который принимает другой итератор и его оборачивает.

    Вообще, примеров очень много, они повсюду, особенно, в вебе. Если в таких прикладных задачах не использовать ООП, то я даже не представляю, как тестировать этот код. Как его поддерживать, меняя логику? А как менять компоненты? Как быть DRY? Тут я, кстати, вспомнил про то, что вот, например, есть в C структуры. Это что-то вроде урезанного класса и на самом деле можно реализовать многие штуки с ними, писать отличный код, но он просто будет сложнее в поддержке и по скорости разработки будет очень далеко позади. Ядро линухи выглядит очень красиво и совсем там не лапша. Однажды фиксил драйвер, чтобы заработал 5ггц вай-фай, так вот он был красив и строг внутри. Кстати, в Go классы реализованы в виде структур, но я не смогу подробнее рассказать об этом, т.к. не смотрел этот язык. ООП - это не какая-то супер фича, а это всего лишь подход. Языки же добавляют синтаксический сахар, реализуют классическое ООП (java/c#/c++/etc) или же неклассическое (python, js, etc).

    Кроме ООП-парадигмы и процедурной парадигмы есть еще, например, функциональная. Но это отдельная совсем тема. В мультипарадигменных языках можно писать по-разному. Если что-то удобно представляется в виде цепочки функций, выглядит так, как будто нет побочного эффекта или его легко изолировать, то нет стоит городить классы или процедурный ад. Тем более в языках, которые близки к ФП, обычно полно встроенных функций, можно объявлять анонимные функции, почему бы этим не пользоваться. Ну или, например, у вас получился какой-то модуль, в котором не нужна ни инициализация, ни контекст ему не нужен, все выглядит как просто 4 связанные функции, то зачем здесь нужно ООП? Хотя если что-то из этого можно кастомизировать, а вы чувствуете, что это понадобится, т.к. есть объекты, которые будут расширять функциональность, то стоит задуматься. Главное не оверинжинирить.
    Ответ написан
    4 комментария
  • Почему у одних псевдоэлементов одно двоеточие :before, а у других два ::before?

    @GreatRash
    По новой спеке правильно писать два. но не все старые браузеры понимают новую спеку, поэтому для кроссбраузерности пишут одно.
    Ответ написан
    2 комментария
  • Как лучше позиционировать элементы с помощью float или inline block и почему?

    @bromzh
    Drugs-driven development
    если ли какие-то минусы в использовании флоатов

    костыли в виде clearfix
    нет возможности центрировать
    сетка с разной высотой блоков кривая

    Как проще убрать ненужные пробелы в inline-block?

    Выбирай
    Ответ написан
    1 комментарий
  • Как сделать через JScript/CSS автомасштабирование вставленного в пост изображения с ссылкой на оригинал?

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

    Если картинка меньше своего натурального размера, то можно будет кликнуть (при наведении на изображение сменится курсор).
    Ответ написан
    Комментировать
  • Как сделать через JScript/CSS автомасштабирование вставленного в пост изображения с ссылкой на оригинал?

    Можно сделать с помощью любой галереи, в данном случае fancybox
    Например вот так
    но потребуется знать размеры оригинального изображения
    Ответ написан
    3 комментария
  • Как обойти эту ситуацию?

    Therapyx
    @Therapyx
    Data Science
    Сделай лучше 2 блока в %
    первый блок с min и max-width. Чтобы он был константным, к примеру по 22%, а остальные 75 на второй блок, который будет резиновый, с марджином в 3%.
    Если же это не будет работать, тогда у тебя видимо что-то со структурой не так. --> код в студию :)
    Ответ написан
    Комментировать
  • Как сделать выделение по всей ячейке?

    Moskus
    @Moskus
    Изменить правило на вот такое:
    #menu a {
      color: #fff;
      display: inline-block;
      height: 40px;
      line-height: 40px;
      padding: 0 25px;
    }

    Потому что высота блока ссылки у вас зависит сейчас от высоты шрифта, как ее интерпретирует browser.
    vertical-align при этом не нужен, потому что указано значение line-height
    Ответ написан
    Комментировать
  • Как динамически менять путь в img?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    1. Плохое решение — не нужно загружать ненужные изображения.

    2. Тоже не ахти. Генерацией путей, в общем случае, не следует управлять на фронтенде. И, опять же, будете грузить все изображения слайдера. Представляйте для таких ситуаций слайдер с сотней изображений.

    3. Верное решение. Причём, если речь идёт о слайдере, то все пути записаны в data-атрибуты. Для появления нужного изображения берём путь из нужного data-атрибута. Таким образом будет грузиться только нужное изображение. Можно делать упреждающую загрузку (скажем, на 3 изображения в обе стороны).
    Ответ написан
    3 комментария
  • CSS в чем проблема с :hover?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Если у вас есть другие элементы между картинкой и блоком, то нужен General sibling combinator.
    el1 ~ el2 {...}
    Ответ написан
    Комментировать
  • Как создать такую фигуру на css?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Используя обычные подручные рамки, linear-gradient и и transform:rotate получаем искомое.
    Можно поизвращаться с perspective и rotateX, но полученный результат ужасен в FF.

    И, по обыкновению, кладём фон с помощью SVG.
    <svg xmlns="http://www.w3.org/2000/svg" width="60" height="20" preserveAspectRatio="none" viewBox="0 0 60 20">
    	<path fill="#ffb600" d="M 0,20 L 10 0 54 3 60 20 z"/>
    </svg>
    Ответ написан
    7 комментариев
  • Как сверстать круги с линиями?

    agmegadeth
    @agmegadeth
    Веб-разработчик в дизайн студии
    Круги абсолютно позиционировать - верстать обычными дивами с border-radius: 50%;
    Линии - тоже дивы с абсолютным позиционированием с нужным transform(rotate(Xdeg));
    Ответ написан
    1 комментарий
  • Как редактировать дизайн сайта из браузера с сохранением результата?

    @ByRon
    textolite ставил одному клиенту на статический сайт что-бы он мог сам менять цены/инфу прямо в браузере... так-же можно html править.
    Ответ написан
    Комментировать