Pull to refresh
34
0.4
Send message
Java-код пишу в Idea, но мне вот лично неудобно писать фронтенд в ней (пишу всё в Atom'е).
Основные причины: медленная скорость и низкая отзывчивость интерфейса и
не всегда можно настроить проект и всякие пути в нём так, чтобы не было предупреждений или ошибок. Например, я поставил ангуляр через npm. Подключаю его через es6 import: import angular from 'angular'; Ещё я использую webpack и хочу подключить бутстраповский less в свой: @import "~bootstrap/less/bootstrap"; Вот что в итоге:

картинки
image
image

Мелочь, но неприятно.

В итоге, так или иначе приходится работать в консольке. Например, мне удобнее набрать npm i -S some-module нежели делать это через GUI Идеи.
Для запуска/сборки/тестов достаточно настроить секцию scripts в package.json и запускать нужное командой npm run %имя_задачи%.

Компиляция (в том числе в live-режиме) less/sass/ts/coffee/es2015 и т.д. настраивается в сборщиках/бандлерах, что заменяет file watchers в идее.

В итоге, я просто настраиваю webpack на разные окружения. В dev-режиме у меня запущен dev-server, который при изменении файлов пересобирает проект (вернее, только необходимые кусочки, вебпак круто отслеживает зависимости) и перегружает страницу (или её кусок) в браузере. Для prod добавляются всякие минимизаторы, префиксеры и т.д.
Сборка/запуск тестов запускается одной командой.

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

Но лучше всего прослушать лекции по матанализу и теории функции комплексного переменного в каком-нибудь ВУЗе.
Если нужно подключить пару jquery-плагинов на страницу и суммарный объем js-кода небольшой, то это нормально. Как только проект побольше, то без полезных инструментов разрабатывать и поддерживать его становится намного сложнее. А тенденции нынче идут в сторону сложного фронтенда...
Вы сразу пишете в одном файле в минифицированном виде с source map'ами?
Стандартный математик скажет, что решения не существует.

Даже если три точки лежат на одной прямой?

А что скажет программист?

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

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

Вместо пустых и довольно глупых заявлений лучше почитайте про нейронные сети, например. Для обучения необходимы данные. При чём тут исходный алгоритм самой программы? Если же рассматривать саму программу, как данные, то обучение может привести лишь к оптимизации самой программы. Но все компиляторы это и так умеют. А JIT-компиляторы делают это как раз в рантайме.
К слову, нейронные сети, как пример обучающихся программ, можно реализовать даже на языках, где из коробки нет AST-преобразований в рантайме. Например, на C.
Модель памяти в java — вот это сложно. Но при этом несёт большую практическую пользу.
А придумать какую-то якобы фичу (бесполезную с практической точки зрения) и с трудом её реализовывать — как-то глупо. Вон на Malbolge тоже трудно программы писать.
B все-таки под Model как-бы везде понимается Структура-Данных (БД + базовые функции ПО (API))

Да, а сервисный слой — это что?
Вам написали кучу комментов со вполне конструктивной критикой. Если вы ожидали похвал, то неудивительно, что эта критика не воспринялась.

Ну а в написании своего языка нет ничего сложного. Другой вопрос, зачем это делать? Новые языки, которые реально полезны, разрабатывают обычно для какой-то конкретной цели. Разрабатывать язык ради самой разработки хорошо только для самообразования (и то не всегда).
Хватит ныть уже. Без негативной критики вообще никакого прогресса не будет. Вы библиотеку писали ради похвалы?
Ещё вспомнился давний пост на хабре, где FB превозмогал ограничения андроида на количество классов. Вот только они в своё приложение хотели запихнуть почти всё (помню оно ужасно тормозило и выжирало кучу памяти, так что я его снёс и больше не трогал). При этом, приложение ВК с почти аналогичным функционалом работало отлично.
Опять сами создали себе проблему и опять героически боролись с ней. Ну хоть делом заняты…
У фейсбука проблемы с MVC, потому что они делают с ним что-то не то, судя по иллюстрациям в этой статье.
Просто FB не умеет в MVC, судя по этой картинке:
wtf?
image

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

В итоге они взяли всё тот же MVC (одну из вариаций), только назвали его по-другому.

Может я что-то не понимаю, но в чём отличие от флакса от классического MVC? Там модель содержит всю логику и оповещает подписавшиеся на неё вьюхи о изменениях в своих данных. Там почти такой же однонаправленный поток данных: от модели ко вьюхам. Никакого двунаправленного связывания, от которого многие не в восторге. А действия пользователя всё так же идут от вью через контроллеры к моделям (или другим контроллерам).

Да и автор, по-сути, опять пересказал старый добрый MVC.

Ну и второй коммент в этой статье доставляет)
Расскажите автору про Object.assign() или какой-нибудь другой способ слияния объектов. А то трудно серьёзно воспринимать человека, который ещё пишет как на рисунке 1.
Нет, претензия была в том, что не надо писать код, который не оптимизируется и плохо читается. Надо писать не как угодно, а обдуманно.
А безымянные функции используются, чтобы отладку упростить?
var ImagePreloader = function(fallbackImage, onProgress) { }

не привлекать библиоетеки типа babel и не увеличивать итоговый размер скрипта

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

Много элементов в массиве? Серверная пагинация в помощь.
Критика вполне обоснованная.
Задача изначально не для юзкейса ангуляра, т.к. все шаблоны и так грузятся с сервера. Да и сам по себе ангуляр — фреймворк для построения сложных MV*-приложений на фронтенде, а не либа для биндинга атрибутов.
Но нет, это не Вы не умеете инструмент выбирать, а это ангуляр плохой. У него сразу же нашлись недостатки, которых в реальной жизни нет, просто нужно поизучать ангуляр чуть больше 1-го дня.
И тут же началась борьба против ветряных мельниц, которые сами себе и воздвигли. И вместо того, чтобы взять какой-нибудь jquery/knockout и написать всё быстренько на нём, зачем-то началось велосипедостроение.

Просто когда человек сам ошибся в выборе технологии, но винит её, а не себя, о нём сразу складывается негативное впечатление.

А из статьи я так и не понял, зачем оно и что делает, что рендерит yii, а что подгружается аяксом, и т.д.
зачем вообще AngularLight или vue.js, если есть Angular?

Просто не всем нужны DI и сервисный слой.

Проблема в том, что записи добавляются/изменяются динамически через ajax-запросы. Каким будет ваше решение?

При изменении/добавлении записи выставляем флаг, что началась загрузка и отправляем запрос к API. После получения ответа убираем флаг и обновляем данные в контроллере.

Как-то так
class FooService {
    /*@ngInject*/
    constructor($http) {
        this.$http = $http;
    }
    
    function getItems() {
        return this.$http.get('/items').then(response => {
            let items = response.data;
            // тут могут быть какие-то действия с полученными данными
            return items;
        });
    }

    function createItem(item) {
        return this.$http.post('/items', item);
    }

    function updateItem(item) {
        return this.$http.put('/items/' + item.id);
    }

    function deleteItem(item) {
        return this.$http.delete('/items/' + item.id);
    }
}

class FooController {
    /*@ngInject*/
    constructor($foo) {
        this.$foo = $foo;
        this.items = [];
        this.isLoading = false;
        this.error = false;

        this.fetchData();
    }

    fetchData() {
        this.isLoading = true;
        return this.$foo.getItems()
            .then(items => {
                this.items = items;
                this.error = false;
            })
            .catch(() => {
                this.error = true;
            })
            .finally(() => {
                this.isLoading = false;
            });
    }

    addItem() {
        this.items.push({amount: 1, cost: 100});
    }

    createItem(item) {
        this.isLoading = true;
        return this.$foo.createItem(item).then(() => {
            return this.fetchData();
        });
    }

    updateItem(item) {
        this.isLoading = true;
        return this.$foo.updateItem(item).then(() => {
            return this.fetchData();
        });
    }

    deleteItem(item) {
        this.isLoading = true;
        return this.$foo.deleteItem(item).then(() => {
            return this.fetchData();
        });
    }
}

angular.module('app', [])
    .service('$foo', FooService)
    .controller('FooController', FooController);

<div ng-controller="FooController as vm">
    <table ng-hide="vm.isLoading">
        <thead>
            <tr>
                <th>ID</th>
                <th>Amount</th>
                <th>Cost</th>
                <th></th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="item in vm.items track by item.id">
                <td><strong>{{ item.id }}</strong></td>
                <td><input type="text" ng-model="item.amount"></td>
                <td><input type="text" ng-model="item.cost"></td>
                <td><a href ng-click="vm.deleteItem(item)">delete</a></td>
                <td><a href ng-click="vm.updateItem(item)">update</a></td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan=5><a href ng-click="vm.addItem()">Add</a></td>
            </tr>
        </tfoot>
    </table>
    <div ng-show="vm.isLoading">
        <img src="loading.gif" alt="">
    </div>
</div>

Information

Rating
2,059-th
Registered
Activity

Specialization

Frontend Developer, Fullstack Developer
Senior
TypeScript
Angular
React
JavaScript
HTML
CSS