• Какие альтернативы можно выбрать для JavaScript?

    @bromzh
    Да не, дарт вполне себе жив. Много используется внутри самого гугла, ну и ещё у некоторых компаний: https://www.dartlang.org/community/who-uses-dart
    Да, он не такой популярный, как сейчас typescript, но и хоронить его не собираются.
  • Почему возникают отступы?

    @bromzh
    Сергей: можно и рем. Но в ul всё равно нельзя будет использовать em'ы (т.к. для ul их значения будут 0). И ещё потеряется значение font-size родителя ul.
  • Почему возникают отступы?

    @bromzh
    yanis_kondakov: Не люблю сам и другим не советую убирать отступы между inline-block элементами через CSS и font-size:0. Если сайт адаптивный и не использует пиксельные размеры шрифтов, все дочерние элементы внутри li уже не будут такими адаптивными. Да, у автора font-size в пикселях и такой трюк удастся. Но про адаптив стоит призадуматься с самого начала. Тем более, что https://habrahabr.ru/post/314188/

    А если надо горизонтально расположить элементы друг за другом, в 2016 смело можно использовать flexbox и не париться.
  • Стоит ли сейчас переходить на angular 2?

    @bromzh
    tema_sun: это Гвидо слишком добрый, жалеет отсталых второверсийников. Он изначально хотел закончить поддержку 2-й ветки в этом году, но решил оставить до 18-го вроде как.
  • Как WebStorm заставить подсвечивать HTML-разметку в .php файлах?

    @bromzh
    Денис Букреев: Так а в чём тогда проблема открыть .php-файл в html-редакторе?
  • Как WebStorm заставить подсвечивать HTML-разметку в .php файлах?

    @bromzh
    Денис Букреев: куча ненужного вполне легко отключается в настройках на вкладке plugins.
    Вебшторм самая дешёвая IDE из линейки, и php поддерживать не умеет. С другой стороны, всё, что есть в вебшторме есть и в пхпшторме.
  • Какими способами можно получить аргументы из консоли в typescript?

    @bromzh
    Bowen: Если проект на 2-м ангуляре (я угадал, да?), то просто так нельзя взять и получить аргументы через yargs. Ведь они доступны только если скрипт запускается нодой в командной строке. А ангуляровское приложение запускается несколько иначе. Но всё-таки они доступны вебпаку на этапе сборки. Так что можно просто создать глобальные переменные и через DefinePlugin их вставить в код. Работающий пример можно легко получить: взять этот проект и вставить, например, сюда строчку 'args': JSON.stringify(require('yargs').argv), добавить сюда строчку declare var args: any; и добавить эту переменную в GlobalEnvironment.

    Если проект не на ангуляре, то проблема вообще непонятна.
  • Какими способами можно получить аргументы из консоли в typescript?

    @bromzh
    Bowen: Дело не в языке, а в конфиге вебпака и коде. У меня похожий кейс и всё нормально работает.
  • Как дождаться выполнения http запроса с angularjs?

    @bromzh
    Turtle_Onni:
    Во-первых, если программа попадёт в ветку error, то промис не разрешится никогда, т.к. там нет ни resolve ни reject (вроде должно быть так, я хз за ангуляровские недопромисы). Да и использовать success/error считается дурным тоном, эти методы давно deprecated. Надо использовать обычный then.
    Во-вторых, даже тут не нужен никакой deferred. Если использовать then/catch, то код будет таким:
    factory.addStageLink = function (stageLink) {
    return $http.post(pathApiProjectStageLinks + '/', stageLink)
      .then(response => {
        let id = response.data;
        notifications.add('success', 'Связь добавлена!');
        return id
      })
      .catch(err => {
        notifications.add('danger', 'Связь не добавлена!');
        throw err; // Пробрасываем ошибку выше
      });
    }


    В-третьих, промисы не делают асинхронный код синхронным. Если в контроллере есть несколько вызовов последовательных функций, то они необязательно выполнятся последовательно. Те, что используют что-то асинхронное внутри себя быстро вернут неразрешившийся промис, и запустится следующая функция. Однако, код, который указан в then начнёт выполняться только после того, как промис что-то вернёт. Так что всё в порядке, код выполняется ровно как следует.
  • Как дождаться выполнения http запроса с angularjs?

    @bromzh
    Turtle_Onni: Всё не так. Зачем создавать deferred, никак его не использовать (ни resolve, ни reject)? Ведь достаточно просто добавить слово return перед $http.delete, а deferred убрать.

    Смысл в том, что если внутри функции выполняется что-то асинхронное, которое возвращает промис, но этот промис не возвращается, то он не попадёт в цепочку и выполнится вне очереди. Т.е.

    somePromise
        .then(result => {
            syncFunc1(result);
            asyncFunction(result);
            return syncFunc2(result);
        })
        .then(finalResult => {});


    Тут внутри первого then:
    1) отработает первая синхронная функция
    2) запустится асинхронная функция (она возвращает промис). Но так как её результат не возвращается дальше в цепочку, то её "никто не будет ждать"
    3) Не дожидаясь завершения асинхронной функции запустится вторая синхронная функция и во второй then попадёт её результат.

    Если же изменить код на такой:

    somePromise
        .then(result => {
            syncFunc1(result);
            return asyncFunction(result);
        })
        .then(asyncResult => {
            return syncFunc2(asyncResult);
        })
        .then(finalResult => {});


    То:
    1) В первом then отработает синхронная функция
    2) Запустится асинхронная функция. Т.к. она возвращает промис, он добавится в цепочку промисов и в следующем then можно будет получить то, что спрятано в промисе. Естественно, когда асинхронная функция отработает.
    3) Во втором then функция запустится только после получения результата от предыдущего звена, т.е. когда промис из asyncFunction зарезолвится.

    Подробности тут: https://habrahabr.ru/company/mailru/blog/269465/
  • Как правильно работать с MySQL в Java?

    @bromzh
    Serious Sam: Если это просто приложение на JavaSE (без спринга и прочего EE), то выше уже написали названия, это самые популярные.
    В спринге есть своя реализация пула. Если приложение разворачивается на "EE-шных" application server'ах (типа WildFly/WebSphere/GlassFish/etc), то там реализации всех этих штук будут на самом сервере, так что достаточно лишь настроить соединение с БД.

    В качестве менеджера транзакций (для SE-приложений) можно взять Atomikos.
  • Почему ругается компилятор typescript?

    @bromzh
    Евгений: не обязательно. главное - объявить такое поле в классе
  • Как писать более правильно?

    @bromzh
    Александр: У вас довольно устаревшие взгляды на JS индустрию. Вы ведь даже не знали про source map до недавнего времени)
    Какое-то время до JS никому особо не было дела. Между 3-й и 5-й версиями прошло 10 лет, между 5-й и 6-й - 4 года. Там было много проблем. Очень показательный пример: существование сотни библиотек для упрощения ООП в JS. Проблема была и её надо было решать.
    Сейчас всё резко изменилось, JS очень бурно развивается. Крупные игроки вроде гугла и майкрософта взялись за ум и всё зашевелилось. Браузеры развиваются теперь намного активнее. Появились инструменты, которые позволяют без проблем использовать новое в старых браузерах. Самый сок всего этого в том, что это стандарт. Сейчас я использую транспайлер и полифиллы. Потом мне достаточно будет их убрать. Мне не придётся переписывать код, убирать устаревшие библиотеки, которые по-своему реализовывали какие-то части стандарта и прочее. Поддержка только упрощается. При этом, можно даже не трогать те части программы, которые не изменяются. А тот код, который меняется можно медленно переводить на новый стандарт.

    > Много сейчас вакансий где надо знать новый стандарт?
    Полно, достаточно поискать "es6" на hh.
    > Вот через год-два можно кидаться в новый ES, т.к. он будет хорошо выдержан разработчиками и временем.
    А всё это время что делать? Использовать свои нестандартные костыли и веловипеды? Чем раньше начать использовать новый стандарт в проект, тем лучше.
    > ваши прототипы - все сложная загогулина больше знать это не надо
    Но я же не говорил такого. Нужно показать как было раньше, и как есть сейчас.
    > Есть десятилетиями проверенный стандарт
    Стандарт явно был фиговый, сейчас стараются это исправить.
    > в реальности продукт должен работать на веб-браузерах с IE8-9 и выше
    Статистика использования IE9 - около 1%. В реальности я бы просто не стал бы работать в компании, где есть требования поддерживать IE8-9.

    Просто я не вижу смысла учить человека старым технологиям, вот и всё. Он просто будет неконкурентноспособен на рынке.
  • Как писать более правильно?

    @bromzh
    TrustyWork: ну новый синтаксис есть и для базовых вещей: let/const, функции с параметрами по-умолчанию, деструктуризация (при присваивании, в параметрах функции), строки-шаблоны (очень хопошо он описан тут.
    Например, объяснить, что раньше было только var, а теперь есть let и const. Показать на примере, чем они отличаются и сказать, чтобы var в новом коде не использовалось никогда. Чтобы было легче, можно настроить eslint с нужными правилами. Это очень хорошо приучит писать нормальный код.

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

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

    @bromzh
    TrustyWork: очень наглядно взять код с новым синтаксисом, и посмотреть на вывод babel или typescript-компилятора.
  • Как писать более правильно?

    @bromzh
    Александр: объект в JS на первом месте, про них надо в практически сразу рассказывать. Ну и это "ООП похожее на java" намного легче для понимания, чем возня с прототипами. Про прототипы надо знать, но пользоваться нагляднее новым синтаксисом. Чтобы попугать детей, можно посмотреть, во что превращается код c 2-мя пустыми классами, один из которых наследуется, после трансформации.
  • С чего начать (и как продолжить) изучать искусственный интеллект (Lisp/Clojure)?

    @bromzh
    Туралъ: ИМХО, это язык для всяких экспериментов и обучению всяким функциональным штукам. На нём почти нет серьёзных приложений, даже на лиспах больше написано.
  • Где посмотреть пример роута для сабмодулей для Angular2?

    @bromzh
    Владимир: решили, что старый концептуально неправильный. А без практики такое не вышло бы. Хорошо, что хотя бы до релиза успели.
    На самом деле, отличий в АПИ будет мало. Вместо @RouteConfig будет @Routes, а поля самих определений роутов останутся теми же (path, component).
  • Как выполнить getElementById у результата getElementById?

    @bromzh
    DTX: Ну вот для таких случаев есть классы. Их и искать можно у дочерних, и они могут быть не уникальны. Да и document в ангуляре тоже есть. И какая разница, от какого элемента искать?
  • Есть ли примеры серьезных приложений сделанных на Angular Material?

    @bromzh
    gadzhimari: эти ui-компоненты есть для обеих версий ангуляра. Внешне они одинаковы (почти), но api разное.
    Ты спрашивал конкретно про компоненты для первого ангуляра. Если нужно именно версия для первого ангуляра, то отвечу так: публичные примеры сложного UI я не очень помню, однако в принципе нет никаких проблем для этого. Если не хватает виджетов, то можно самому наделать. Сами стили можно взять отсюда. Куча всяких UI-виджетов есть тут. Наделать из этого добра с готовыми стилями ангуляровские директивы несложно.

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

    Надеюсь, понятно объяснил)