• Как сложить время, если оба значения представлены строкой?

    search
    @search
    мама говорит что я особенный
    Изврат, конечно, но работает :)

    var time_start = "12:20";
    var duration = "01:25";
    var d1 = new Date('0000-01-01T' + time_start);
    var d2 = new Date('0000-01-01T' + duration);
    var finish = new Date('0000-01-01T00:00');
    finish.setHours(d1.getHours() + d2.getHours());
    finish.setMinutes(d1.getMinutes() + d2.getMinutes());
    var finishTime = finish.toTimeString().slice(0, 5);
    Ответ написан
    1 комментарий
  • Почему $event.target ячейка, а не строка?

    search
    @search
    мама говорит что я особенный
    target - это тот компонент, который породил событие "клик". Если вам нужно знать какой компонент его поймал, то юзайте event.currentTarget. В вашем случае это будет строка.

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

    Вот так бы выглядел код, если бы его писал нерадивый angular программист, забывший про jQuery навсегда:
    (в любом случае это лучше, чем пример в тексте вопроса, так как он не нуждается в каких-то дополнительных выкрутасах в контроллере и изменения дома не будут неожиданно потеряны в случае перерисовки компонента самим ангуляром по событию, не зависящиму от вас)
    <tbody>
      <ng-container *ngFor="let course of coursesList">
        <tr  (click)="course.isOpened != course.isOpened">
              <td>{{course.Number}}</td>
              <td>{{course.name}}</td>
              <td>{{course.Start | date: "dd.MM.yy"}}</td>
              <td>{{course.Finish | date: "dd.MM.yy"}}</td>
        </tr>
        <tr *ngIf="course.isOpened">
           <td colspan="4">Here we go</td>
        </tr>
      </ng-container>
    </tbody>

    Нерадивый, потому что тут мутируется объект курса, что не есть хорошо.
    Ответ написан
  • Что делать со старыми кусками кода в проекте?

    search
    @search
    мама говорит что я особенный
    Kill them with fire. Удаляйте их с гомерическим хохотом.

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

    search
    @search
    мама говорит что я особенный
    Должен вас огорчить, но фраза "пхп создан для того чтобы умирать" относится как раз к вашей проблеме. В ядре самого языка не предусмотрен сценарий "вечной" работы скрипта. Память расходуется неэффективно и Fatal error: Out of memory - это то что ждёт ваш скрипт при любом раскладе.

    Самое простое решения в вашем случае: дёргать ваш проверочный скрипт кроном (cron). Скажем, каждую минуту, давать ему отработать и умереть. И так каждую минуту.
    Ответ написан
  • Как правильно перебрать значения в twig?

    search
    @search
    мама говорит что я особенный
    <ul>
    {% for testItem in test %}
            <li>{{ testItem.CODE_CLIENT }}</li>
    {% endfor %}
    </ul>
    Ответ написан
    Комментировать
  • Какие есть книги про связь высшей математики и программирования?

    search
    @search
    мама говорит что я особенный
    Сожалею, но они все про алгоритмы, теорию множеств, теорию категорий или лямбда-исчилениям.

    По организации кода могу только порекомендовать классику:
    • Приемы объектно-ориентированного проектирования. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Д.
    • Шаблоны корпоративных приложений. Мартин Фаулер
    • Чистый код. Роберт Мартин


    UPD
    По сути, организация кода - это ремесло, а не наука.
    Ответ написан
    Комментировать
  • Разве Composer бесполезен в 2017?

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

    Года 3 назад на моей прошлой работе в команду пришел очень толковый проактивный человек, который никого не стал переубеждать. Он просто стал делать правильные вещи. Без объяснений. И без приглашений. Коммитеть юнит тесты. Подключать линтеры. Деклайнить неудачные пулл-реквесты. В итоге он сам стал тимлидом где-то через год.

    Такие дела.

    Не у всех, правда, стальные яйца. Но за проактивность никогда еще не увольняли. Если вы уже создали пулл реквест, то "переубеждение" становится задачей тимлида.
    Ответ написан
    3 комментария
  • Что изучать jQuery или чистый JavaScript?

    search
    @search
    мама говорит что я особенный
    То что вы называете "чистый JS", как противопоставление jQuery- это, просто API к браузеру. Вот он весь https://developer.mozilla.org/en-US/docs/Web/API . Как видите, там много всего. И запоминать наизусть это не нужно, потому что есть эта ссылка.

    То что вы называете jQuery - это обёртка над функциями из предыдущей ссылки вот она: api.jquery.com . Тоже довольно много функций, которые тоже не обязательно зазубривать. Потому что есть вторая ссылка.

    Без понимания принципов работы JS - две ссылки выше - это просто непонятный набор цветных букв. Так что учите JS. В этом случае сможете использовать и "чистый JS" и jQuery и любую другую библиотеку. Чтоб оседлать этот язык и чувствовать себя как рыба в воде, рекомендую обратить внимание на такие пункты как:
    • синтаксис языка
    • область видимости
    • функции высшего порядка
    • замыкания
    • event loop
    • работа c DOM


    Как-то так.
    Ответ написан
    3 комментария
  • Как исправить поведение элементов?

    search
    @search
    мама говорит что я особенный
    Посмотрите как реализована эта штуковина https://blackrockdigital.github.io/startbootstrap-...
    Ответ написан
  • Знание которые не устареют через 10-20 лет?

    search
    @search
    мама говорит что я особенный
    Существует набор базовых знаний, находящийся в корне любой ИТ-концепции. Эти знания редко применяются программистами напрямую, так как они реализованы непосредственно в библиотеках. Но они оказывают огромное влияние на общий процесс мышления и на способность усваивать новую информацию. Именно поэтому такие успешные компании, как Гугл, Эпл, Амазон, Фейсбук и т.д. прежде всего проверяют базовые знания, а не знание языков/фреймворков/библиотек, потому что это всё вторично и осваивается за пару недель. Да, такие штуки, как:
    • теория вероятностей и математическая статистика
    • теория игр
    • теория информации и кодирования
    • теория тестирования
    • теория систем массового обслуживания
    • теория принятия оптимальных решений

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

    Не стоит обманываться тем что мы редко встречаем специалистов с глубокими базовыми знаниями. Просто подобные люди находятся, чаще всего, не в зоне нашего обитания, а где-нибудь в Калифорнии, работая в компаниях из списка Fortune 500. Такие дела.
    Ответ написан
    Комментировать
  • Front-end разработка, правильная сборка?

    search
    @search
    мама говорит что я особенный
    Если компания дорожит качеством продукта и безопасностью данных своих клиентов, то сборка и выкат новой версии проводится автоматически Continuous Intrgration сервером. У программистов вобще нет доступа к проду. Доступ к проду есть только у CI-сервера. У программиста есть доступ только к GIT репозиторию проекта. Вся работа проводится в своём окружении и в отдельной ветке. Затем ветка тестируется на тестовом окружении (близком к продакшену), если надо правится, и затем вливается в главную ветку проекта. После этого CI подхватывает изменения, билдит фронт и бэк и выкатывает это дело на прод. Это очень общий вариант. Там есть куча нью-ансов.

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

    UPD
    Забыл сказать, что этот путь не даётся легко. Нужно потренироваться где-то полгодика. Но зато на всю жизнь получаешь спокойные ночи и здоровый цвет лица, так что оно того стоит.
    Ответ написан
    2 комментария
  • Как написать регулярное выражение, начинающие свой путь с конца строки?

    search
    @search
    мама говорит что я особенный
    /[^\/]+(?:\.png|\.jpg|\.jpeg|\.gif)$/

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

    /[^\/]+$/
    Ответ написан
    1 комментарий
  • Переход с постоянки на фриланс, стоит ли игра свеч?

    search
    @search
    мама говорит что я особенный
    Ох как я вас понимаю. Перейти на фриланс страшно. А вдруг не будет клиентов? А вдруг я получу негативный отзыв? А вдруг меня кинут? В общем куча а вдруг. В 2010 году я осуществил следующие приготовления перед переходом на фриланс на апворке:
    • сдал все профильные тесты на топ 10%. Для этого понадобилось где-то 3 месяца и прочтение нескольких книг. Оно того стоило
    • накопил 2 месячных зарплаты на случай полного провала
    • объяснил начальнику свою ситуацию и договорился что смогу вернуться если ничего не выйдет


    Клиента я нашел дня через 2. Она платила мне фантастические на тот момент 10 баксов в час, а потом подняла до немыслимых 18.

    Общие рекомендации:
    • берите только почасовую работу, если не хотите получить стресс и переработку
    • работайте только с иностранцами, потому что им можно не объяснять что за каждый час работы нужно платить всегда и при любых раскладах
    • объясните заказчику что 8 часов на фрилансе под наблюдением всевидящего ока - это не 8 часов в офисе, прогуливаясь к кофемашине. Вы не сможете долго работать по 8 часов, перегорите. 6 - это в лучшем случае
    • сделайте оплату комиссии проблемой заказчика. Так и говорите "мой рейт, например, 10 баксов в час, комиссия сайта 30%, так что вам это будет стоить 13 долларов". Будет дополнительный фильтр для хитросделанных заказчиков, с которыми работать не нужно


    Посмотрите на биржу Toptal. Это как постоянная работа, только платят хорошо.
    Ответ написан
    2 комментария
  • Как обратиться к параметрам функции как к объекту, по аналогии с arguments?

    search
    @search
    мама говорит что я особенный
    В ES6 появились параметры по умолчанию.

    Можно написать

    function doSomething(a='test', b=1, c=true) {
    }


    И если не передавать в doSomething() эти переменные примут значения по умолчанию.

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

    Как-то так:
    function doSomething(options) {
      var defaultOptions = { validate: false, limit: 5, name: "foo" };
      options = $.extend({}, defaultOptions, options || {}); // Дополняем options значениями по умолчанию
    }


    Но если уж прям не терпится получить все параметры из любой функции, то у любой JS функции есть метод toString(), который возвращает код самой функции в виде строки. Это недокументированная особенность, поддерживаемая всеми браузерами. Для эксперимента можете запустить этот код в консоли чтоб видеть наглядно.

    var a = function(a,b,c) {var someCodeInside = true;};
    console.log(a.toString());


    Можете взять полученную в результате toString() строку и выудить из неё аргументы.

    Именно по такому принципу работает Dependency Injection в первом ангуляре.

    Вот тут есть примеры кода по вытягиванию параметров из функций https://stackoverflow.com/questions/1007981/how-to...
    Ответ написан
    Комментировать
  • Почему при одной и той же операции - разный результат?

    search
    @search
    мама говорит что я особенный
    Символ "+" в GET запросе воспринимается браузером как пробел.
    Ответ написан
    1 комментарий
  • Как изменять размер фото с помощью GET-запросов?

    search
    @search
    мама говорит что я особенный
    Стратегия такая: на сервере хранится только оригинальное изображение. Когда юзер пытается получить сжатое, он идет на адрес, например /images/userpic-100x100.jpg Если по этому адресу еще нет такого изображения, то сервер перенаправит юзера на скрипт /generate.php?address=/images/userpic-100x100.jpg. Этот скрипт сожмёт оригинальное изображение, сохранит его по адресу /images/userpic-100x100.jpg и покажет пользователю. В следующий раз при запросе адреса /images/userpic-100x100.jpg будет показано уже сгенерированное изображение.

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

    RewriteCond %{REQUEST_URI} ^/images/
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
    RewriteRule (.*) /generate.php?address=$1 [L]


    Ну и в файле generate.php уже разбирать переменную $_GET['address'], выяснять какую именно картинку хотел получить юзер, жать её, сохранять и перенаправлять обратно на $_GET['address'].
    Ответ написан
    Комментировать
  • Bootstrap. Как расставить текстовые блоки по отступам?

    search
    @search
    мама говорит что я особенный
    Ответ написан
    Комментировать
  • Как отобразить http запрос в консоли Google Chrome?

    search
    @search
    мама говорит что я особенный
    Ответ написан
    Комментировать
  • Как сделать сортировку объектов внутри массива по количеству ключей?

    search
    @search
    мама говорит что я особенный
    Array = Array.sort(function(a, b) {
      return Object.keys(a).length - Object.keys(b).length;
    });


    P.S.
    Array - это зарегистрированный конструктор в JS. Лучше не давать переменным названия как Object, Array, String и т.п. Иначе всё поломается.
    Ответ написан
    Комментировать
  • Как брать данные методом GET c URL и выводить на странице в режиме лайв?

    search
    @search
    мама говорит что я особенный
    Библиотека для раутинга может вам помочь. Например вот https://github.com/swipely/aviator
    Ответ написан