• Как запаковать существующее angular2 приложение в nativescript?

    @bromzh
    Drugs-driven development
    Комментировать
  • Lua для машинного обучения?

    @bromzh
    Drugs-driven development
    Всякие питоны обычно используют сишные и фортрановские библиотеки непосредственно для расчётов, т.к. это самое узкое место.
    Так что производительность научных пакетов на питоне обычно приличная, а сам питон выступает как некая обёртка.

    Безусловно, lua и его реализация luajit довольно быстрые. Последняя зачастую быстрее питона, плюс имеет удобный FFI. Для встраивания язык просто отличный, но вот как standalone-язык в прикладных приложениях выглядит не так хорошо.

    Однако, стандартная библиотека самого языка Lua очень скудная. А количество библиотек на разные случаи жизни намного меньше, чем у питона.
    Плюс, питон, как язык, более приятен:
    1) Типизация в нём строгая, в отличие от слабой/неявной в lua.
    2) Присутствует богатая система типов. Тут есть и комплексные числа, и итераторы, и коллекции, куча всего. В lua только 8 типов.
    3) ООП в питоне основано на классах и похоже на Java/C#/C++. В lua ООП прототипное и реализуют его посредством таблиц (и метатаблиц).
    Ответ написан
    Комментировать
  • Какой каркас angular приложения?

    @bromzh
    Drugs-driven development
    Ответ написан
    Комментировать
  • Js как то странно считает числа, почему?

    @bromzh
    Drugs-driven development
    С такого, что нужно понимать, как эти числа вообще хранятся в памяти. Тогда и придёт осознание, что всё правильно.
    Для понимания же можно почитать стандарт хранения чисел, там все ответы на вопросы вида "чо за хрень с числами?".
    Ну и такое не только в JS так, а почти везде.
    Ответ написан
    Комментировать
  • Как изменить значение Observable у RxJs?

    @bromzh
    Drugs-driven development
    Нужно доки читать. reactivex.io/documentation/observable.html

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

    Можно сделать так:
    class Foo {
        observer: any;
    
        constructor() {
            let observable = Observable.create<number>(observer => this.observer = observer);
    
            let sub1 = observable.subscribe(
                value => console.log('Sub1. Value:', value),
                err => console.log('Sub1. Error:', err),
                () => console.log('Sub1. Complete')
            );
    
            this.observer.next(1);
            this.observer.next(2);
            this.observer.next(3);
            this.observer.complete();
        }
    }


    Можно использовать Subject и его производные. Примеры в документации присутствуют. Ещё и с картинками!
    Ответ написан
    Комментировать
  • Как правильно работать с MySQL в Java?

    @bromzh
    Drugs-driven development
    Первый вопрос: скажите пожалуйста правильно ли я построил схему работу с базой?

    Нет. Потому что:
    у меня после каждого запроса в терминале висит куча Sleep соединений:


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

    @bromzh
    Drugs-driven development
    Если планируется сокет-сервер, то стоит посмотреть в сторону Netty. Быстрый асинхронный фреймворк с поддержкой многих протоколов, как низкого уровня, типа TCP, так и более высокого, типа вебсокетов.
    Ответ написан
    Комментировать
  • Какой язык программирования учить для написания сайта?

    @bromzh
    Drugs-driven development
    Фронтенд - HTML, CSS, JavaScript в обязательном порядке.
    Бэкенд - как минимум SQL хотя бы на базовом уровне для БД и любой популярный язык для всякой бизнес-логики: Java, Python, JavaScript, C#, PHP и т.д.
    Ответ написан
    3 комментария
  • Как подсветить синтаксис html в файле typescript в PHPStorm?

    @bromzh
    Drugs-driven development
    Потому что подсветка работает только для поля с именем template, а не templateUrl.

    Ещё бывает, что IDE тупит. У меня такое периодически случается: шторм перестаёт распознавать встроенный шаблон и показывает его как строку. Перезагрузка IDE должна помочь.
    Ответ написан
    Комментировать
  • Как подключить typings?

    @bromzh
    Drugs-driven development
    Если tsconfig составлен верно, то больше ничего не требуется. По-умолчанию, компилятор будет подключать и компилить все .ts и .d.ts-файлы в проект рекурсивно, начиная с той папки, в которой лежит tsconfig.json, обычно это корень проекта. Единственный важный момент: чтобы компилятор не начал искать и компилировать всё из папки node_modules, её нужно добавить в список исключаемых директорий.
    Вот пример конфига:
    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true
      },
      "exclude": [
        "node_modules"
      ],
      "compileOnSave": false,
      "buildOnSave": false
    }
    Ответ написан
    Комментировать
  • Стоит использовать исключения или if/else?

    @bromzh
    Drugs-driven development
    Скиньте пожалуйста где почитать/посмотреть


    Кей Хорстманн, Гари Корнелл "Java. Библиотека профессионала". 9 издание. Том 1. Глава 11.

    В частности, там есть раздел с заголовком "Рекомендации по обработке исключений", где всё доходчиво объяснено.
    Ответ написан
    Комментировать
  • Java.Lang.NullPointerException, Что мне делать с этой проказой?

    @bromzh
    Drugs-driven development
    Это знак свыше, что наступило время начать учиться использовать дебаггер.
    Ответ написан
    Комментировать
  • Стоит ли использовать Java для высоко нагруженных приложений?

    @bromzh
    Drugs-driven development
    Java намного производительнее Python/PHP/Ruby. Особенно, если выкинуть полноценый Application Seriver и взять вместо него простой контейнер сервлетов. undertow, например, весит меньше мегабайта ( в виде jar) и жрёт 4 Мб памяти при старте. Да и вообще, вот тут, java всегда в топе по производительности.
    Ответ написан
    Комментировать
  • Почему ругается компилятор typescript?

    @bromzh
    Drugs-driven development
    Немного поправлю Евгения, достаточно объявить нужное поле в классе, тип можно не ставить:
    export class AppComponent {
        sommm; // Можно и без типа, зависит от настройки компилятора
        title = 'hero';
        hero: Hero = {
          id: 1,
          name: 'Wind'
        }
        constructor (){
          this.sommm = 'from this some'
        }    
     }


    Или ещё можно добавить модификатор в аргумент конструктора:
    export class AppComponent {
        // В Angular 2 так можно делать в классах, 
        // которые не являются компонентами/директивами/сервисами/пайпами и т.п.
        constructor (public sommm: string = 'from this some') {}   
     }
    // Это аналогично такому:
    export class AppComponent {
        sommm: string;
        constructor (sommm: string = 'from this some') {
            this.sommm = sommm;
        }    
     }

    Но типы всё-таки лучше указывать.

    UPD 0. В TypeScript обычно, если переменная имеет тип, отличный от any, то динамически добавлять поля в неё нельзя. Когда создаётся экземпляр класса (оператор new), вызывается специальный метод с именем 'constructor'. Ты пытаешься в конструкторе записать в поле sommm. Компилятор TypeScript работает до рантайма и типы определяет исходя из объявления класса. В данном случае, тип AppComponent имеет 2 поля (title, hero). Так что с его точки зрения, у типа AppComponent нет поля sommm, потому-то он и ругается.
    Иногда, видимо из-за особенностей лайв-серверов, бывает, что хоть компилятор и ругается на несоответствие типов, но код запускается и работает, ведь с точки зрения JS, всё выглядит верно.

    UPD 1. Хоть я и привёл пример, где не указывал типы переменных, но так делать не стоит (почти) никогда. Чтобы оградить себя от написания такого кода, можно добавить опцию компилятора "noImplicitAny". Без неё следующий код скомпилируется без ошибок:
    let a;
    function foo(bar) {}
    class Bar {
      foo;
      private bar;
    }

    Со включённой опцией компилятор выдаст ошибки там, где переменные, аргументы функций и методов или поля классов объявлены без типов.
    Нужно всегда стараться указывать тип у переменных. Если один тип не подходит, можно попробовать сделать функцию/метод/класс дженериками. Если тип неизвестен - то можно поставить any. Но обычно такое бывает редко, ведь обычно ты знаешь, что за тип ожидается (у меня в проектах практически нет переменных с типом any).

    UPD 2. Я привёл пример, где в конструкторе указывается модификатор. Это специальный синтаксис в Typescript, который позволяет уменьшить количество повторяющегося кода.
    Однако, есть важный момент: внедрение зависимостей в компоненты/директивы/сервисы/и т.п. во втором ангуляре идёт через конструктор. Причём, в typescript-версии, фреймворк по-умолчанию извлекает информацию о типе аргумента конструктора и пытается внедрить по этому типу нужную зависимость. Поэтому в конструкторах должны быть только внедряемые зависимости.

    UPD 3. Если пишешь на ангуляре, то стоит изучить styleguide и стараться следовать ему. Плюс, хорошо ещё прикрутить к проекту tslint.
    Ответ написан
    4 комментария
  • Как писать более правильно?

    @bromzh
    Drugs-driven development
    Лучше сразу приучать к новому синтаксису es6 (классы, let/const):
    export class Human {
        constructor({ hp }) {
            this.hp = {
                current: hp,
                max: hp,
            };
        }
    
        damage(point) {
            this.hp.current -= point;
        }
    }
    let human = new Human({ hp: 100 });
    human.damage(10);
    console.log(human.hp.current);
    Ответ написан
    7 комментариев
  • Можно ли RequireJs использовать для динамического подключения модулей?

    @bromzh
    Drugs-driven development
    Вебпак может подключать файлы асинхронно, см. https://github.com/gaearon/promise-loader и/или https://github.com/NekR/async-module-loader
    Плюс в том, что вебпак не будет засорять глобальную область видимости, т.е. даже если импортировать jquery, то переменная $ в window не создастся, что удобно. Так что не будет проблем с выгрузкой модулей, просто импортируй список нужных модулей через асинхронные загрузчики.
    Ответ написан
    1 комментарий
  • Как создать типизированный интерфейс?

    @bromzh
    Drugs-driven development
    1) Параметризовать класс:
    class SomeClass<T> {
        public data: T;
    }
    let numData: number = new SomeClass<number>().data;
    let strData: string = new SomeClass<string>().data;


    2) Кастовать типы:
    class SomeClass {
    	data: any;
    }
    let numData: number = new SomeClass().data as number;
    let strData: string = new SomeClass().data as string;

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

    Ещё стоит посмотреть сюда: https://www.typescriptlang.org/docs/handbook/advan...
    Ответ написан
    1 комментарий
  • Можно ли писать на TypeScript под NodeJS?

    @bromzh
    Drugs-driven development
    Можно ли писать на TypeScript под NodeJS? Вопрос о том, хорошая ли это практика?

    Да, да
    Смогу ли я использовать без особых проблем пакеты из npm, либо какие-то сторонние скрипты/классы написанные на js?

    Если разобраться, для чего нужны .d.ts-файлы и как использовать typings, то проблем не будет.

    Плюсы:
    - свежие фичи из спецификаций ES
    - статическая типизация, а, следовательно, все плюсы, которые она даёт. если в двух словах: часть ошибок будет отлавливаться ещё до запуска и, соответственно, нужно меньше тестов
    - хорошая поддержка языка всякими редакторами. IDE от Jetbrains лучше будут выдавать подсказки. И даже простые редакторы кода, например Atom, Sublime, VS Code начнут выдавать нормальные подсказки, переходить по определениям в коде, выдавать сигнатуру методов, и т.д.

    Минусы:
    - Нужно понять, как правильно подключать обычные js-библиотеки к проекту. В целом, это не сложно, но многие не осиливают.
    - Типы "существуют" только в compile-time. На выходе обычный JS со всей его динамической природой. Если код написан плохо (например, часто используется тип any), то typescript не поможет.

    А про отладку я уже говорил: с ней проблем нет. Просто нужно подключить вот эту штуку, и всё будет нормально. VS Code точно умеет подключаться к нодовскому (и хромовскому) дебагеру и будет прыгать по исходникам, а не по скомпилированной каше.
    Ответ написан
    Комментировать
  • Если ли хорошая реализация ленивой монады в Java?

    @bromzh
    Drugs-driven development
    Можно взять Rx. Там есть такая штука, как BehaviorSubject. Все новые подписчики будут получать значение из "кэша". При обновлении данных все подписчики получат их.
    Единственная проблема - BehaviorSubject нужно инициализировать начальными данными.
    Но также в Rx есть так называемые "холодные" Observable. Там цепочка вычислений/действий не будет вызвана, пока нет подписчиков. Т.е. это та ленивость, что нужна. И скорее всего, есть способ сделать и ленивость и кэш с помощью Rx, просто я не так хорошо знаю эту либу. Но гугл должен знать.
    Ответ написан
    Комментировать