• Существует ли инструмент для тестирования верстки сайта?

    @bromzh
    Drugs-driven development
    Ответ написан
    Комментировать
  • Как stateful bean сохраняет состояние?

    @bromzh
    Drugs-driven development
    По хттп сессии идёт идентификация клиента.
    В Web-части (servlet, jax-rs, etc) есть всякие ресурсы, которые можно внедрить через аннотации (в случае jax-rs, например) или вытащить напрямую из request (в случае сервлетов). Один из них - это HttpSession. Там хранится id сессии, по которой можно идентефицировать клиента. У EJB слоя есть свой SessionContext, который не связан с HttpSession напрямую (но использует её, чтобы определить вызывающего клиента). Этот SessionContext уже распространяется на всё приложение, и (вроде как) именно нём хранятся состояния stateful-бинов.
    Ответ написан
    Комментировать
  • Как задеплоить django?

    @bromzh
    Drugs-driven development
    Английским по белому же написано, что прав не хватает. Поставь права 644 (или 666) на все папки и файлы, которые используются. Причём по полному пути. Т.е. надо ставить 644 на /home, 644 на /home/ubuntu и т.д. На папку с сокетами, пидами тоже. И на папки с конфигами заодно.
    Ответ написан
  • Как реализовать исключение при неправильном состоянии класа?

    @bromzh
    Drugs-driven development
    просто опиши твой декоратор вне класса и создай сам враппер с нужной сигнатурой (первым агрументом поставь self). что-то типа такого:
    from functool import wraps
    
    def decorator(func):
        @wraps(func)
        def wrapper(self, *args, **kwargs):
            if self.whatever == "something":
                raise Exception()
            return func(self, *args, **kwargs)
        return wrapper
    Ответ написан
  • Как организовать автоматическую запись в JPA?

    @bromzh
    Drugs-driven development
    Если в поле, которое отмечено как отношение, есть данные, то JPA сам должен сохранять связанные сущности, надо только правильно связи указать.
    Ответ написан
  • Где и как можно обучиться ООП по простому, желательно для web-оринтирования?

    @bromzh
    Drugs-driven development
    То MVC, которое в вебе - это неправильное MVC, там, например, модели не оповещают представления, как должны. Это по-хорошему надо называть MVP.
    Да и понятие ООП тоже сильно размыто. Реальное ООП - это smalltalk, а не то что в пхп или яве.

    Увы, путаницы тут очень много. И к тому же, ООП слабо связано с веб-программированием в целом. Писать веб-приложухи можно в любом стиле, причём другие парадигмы ближе к вебу, нежели ООП.
    Разобраться что и как помогает практика, тогда ты сам начинаешь понимать, что и где лучше использовать. Достаточно прочитать несколько статей, чтобы вникнуть в суть, а потом только практика поможет.
    Ответ написан
    3 комментария
  • Как лучше организовать локальные настройки в angular-проекте?

    @bromzh Автор вопроса
    Drugs-driven development
    Спасибо за ответы, они навели на решение. Сделал так:

    За основу взял структуру проекта, которую генерит generator-gulp-angular.
    В корне создал папку config, в которой лежат json-файлы с настройками. В default.json описаны всевозможные настройки. В других файлах достаточно лишь переопределить нужное поле:
    // config/default.json
    {
      "api": {
        "scheme": "http",
        "host": "localhost",
        "port": 8080,
        "root": "/api/v1/"
      }
    }
    // config/prod.json
    {
      "api": {
        "host": "example.com"
      }
    }
    // config/dev.json
    {}

    Файл local.json добавлен в гитигнор, но его можно использовать (если он есть).

    Далее, написал задачу для gulp, которая в зависимости от окружения генерирует с помощью gulp-ng-config js-файл с ангуляровским модулем:
    // gulp/config.js
    'use strict';
    
    var gulp = require('gulp');
    var gutil = require('gulp-util');
    var cjson = require('cjson');
    var b2v = require('buffer-to-vinyl');
    var gulpNgConfig = require('gulp-ng-config');
    
    module.exports = function (options) {
      function p(name) {
        return [options.config + '/default.json', options.config + '/' + name + '.json'];
      }
    
      gulp.task('config', function () {
        var env = gutil.env.env || 'dev'; // получаем имя окружения через значение аргумента командной строки, или выставляем его равным dev, если ничего не передавалось
        var config = JSON.stringify({
          config: cjson.load(p([env]), true) // Загружаем json'ы, сливая их в 1 объект
        });
    
        return b2v.stream(new Buffer(config), 'config.js') // создаём поток из строки
          .pipe(gulpNgConfig('lemonfront.config', { // генерим по JSON'у ангуляровский модуль
            createModule: false
          }))
          .pipe(gulp.dest(options.tmp + '/serve/app/')); // и записываем во временную папку
      });
    }

    Эта задача стоит в зависимостях у другой (script) и генерит такой файл:
    // .tmp/serve/app/config.js
    angular.module('app.config')
      .constant('config', {
        "api": {
          "scheme": "http",
          "host": "localhost",
          "port": 8080,
          "root": "/api/v1/"
        }
      });


    Далее, добавил этот скрипт в список для инъекции в html. В index.js определил сам модуль и добавил его в зависимости всего проекта, чтобы любой дочерний модуль имел доступ к этим настройкам:
    // src/app/index.js
    angular.module('app.config', []);
    angular.module('lemonfront', [
      'ngAnimate',
      'ngCookies',
      'ngSanitize',
      'ui.router',
    
      'app.config',
      'app.core'
    ]);

    В ангуляре теперь достаточно внедрить config:
    angular.module('...', [])
    .factory(SomeService, ['config', function (config) {
      console.log(config.api.host);
    }]);

    А выбор конфига идёт через аргумент при запуске gulp:
    gulp build --env=prod
    Ответ написан
    Комментировать
  • Что учить перед тем как окунуться в PHP?

    @bromzh
    Drugs-driven development
    с какого языка тогда начать?

    python, ruby, java, nodejs, go. Тут от задачи зависит, бэкенды тоже разные бывают. Для игрового сервера лучше одно, для REST-сервиса - другое, для чего-то по типу push-уведомлений или онлайн--чата - третье. Уточни, что именно ты хочешь, я подскажу конкретнее.
    Ответ написан
    Комментировать
  • Есть ли смысл в инкрементируемых ИД для всех таблиц в mongodb?

    @bromzh
    Drugs-driven development
    А к чему эти человекопонятные ид? Оставь всё как есть, но создай индекс на поле, в индексе укажи, что он будет уникальный. Поле можешь сделать числовым, или строковым (slug). Автоинкременты придётся самому реализовывать. Поэтому лучше использовать то, что есть. Или перейти на postgresql. В новой версии появился тип json, там последовательности есть, и индексы для офигенно быстрого поиска. Не зря же именно разраб постгреса запилил новый движок для монги, который стал намного быстрее старого.
    Ответ написан
    Комментировать
  • Java или .NET - выбор с перспективой (не холивар)?

    @bromzh
    Drugs-driven development
    Java перспективнее:
    • Язык развивается, пусть не так быстро, но зато с сохранением обратной совмесимости
    • Язык кроссплатформенный и open source. Да, .net тоже открыли, но пока только частично
    • Уже существует огромное количество разных решений: много серверов, много фреймворков. Все они проверены временем и пашут быстрее шарпов. Под .net решений мало, сервера пока развёртываются только под виндой, фреймворков - единицы
    • Из этих пунктов следует то, что энтерпрайз будет и дальше выбирать java, а не .net
    • Под JVM есть крутые вещи типа Scala, Kotlin, Groovy
    • Android - имеет хорошую перспективу. Сейчас влепить его можно на любой дешёвый китайский ширпотреп, что не скажешь о виндофоне.
    • Для десктопа есть классная JavaFX, которая ещё и запускается везде. Решения для .net только сейчас начинают становиться по истине кроссплатформенными.
    Ответ написан
    Комментировать
  • Какой использовать алгоритм сортировки, если требуется сложность не более O(n) и максимальная производительность?

    @bromzh
    Drugs-driven development
    Во-первых, есть строгое доказательство, что сортировка произвольного массива не может быть выполнена быстрее, чем за O(n*log(n)) операций (log тут по основанию 2).
    Во-вторых, у сортировок есть много параметров: время в лучшем/худшем/среднем случае, доп. память, стабильность.
    QuickSort имеет время O(n log n) в среднем и лучшем, а в худшем - за O(n^2). Ещё она нестабильная и требует O(n) памяти. В обычных условиях это устраивает, но худший случай в ней - её слабое место.
    Есть модификации быстрой сортировки, позволяющие уменьшить время худшего случая до O(n log n).
    В языках программирования встроенные сортировки - это обычно либо быстрая сортировка с улучшениями, либо какая-нибудь стабильная сортировка, какой-нибудь merge sort.

    Так что либо бери родную, либо пиши сам. Самая простая модификация быстрой сортировки, при которой худшее время станет O(n log n) - это сделать случайный выбор опорного элемента.

    Ну и читай https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D...
    Ответ написан
    3 комментария
  • Альтернатива Browsersync для Gulp?

    @bromzh
    Drugs-driven development
    Порой бывает сложно настроить гулп в связке с этой штукой. Советую поставить yeoman, поставить генератор для него (generator-gulp-angular или generator-gulp-webapp) и посмотри как там всё настроено. Имхо, browsersync - лучшее из всех подобных для разработки фронтенда.
    Ответ написан
    1 комментарий
  • А каким способом Ты организуешь динамическую форму?

    @bromzh
    Drugs-driven development
    json-schema
    Ответ написан
    Комментировать
  • Какими преимуществами обладает Go по сравнению с Java?

    @bromzh
    Drugs-driven development
    Есть ещё Scala + Akka - акторы, Vert.x - event-driven non-blocking фреймворк для JVM, поддерживает несколько языков.
    Ответ написан
  • Можно ли работать со свернутым браузером из сторонней программы?

    @bromzh
    Drugs-driven development
    Для браузеров есть WebDriver и Selenium (но надо браузер запускать с определённым ключом, но через selenium можно запускать новый экземпляр с нужными параметрами), основной язык - java, но есть биндинги для других языков. Можно написать свою обёртку, управление браузером происходит через JSON API.
    Ответ написан
    Комментировать
  • Как лучше позиционировать элементы с помощью float или inline block и почему?

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

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

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

    Выбирай
    Ответ написан
    1 комментарий
  • Как правильно написать запрос к БД?

    @bromzh
    Drugs-driven development
    Зачёт не сдаётся? Есть же сайты. где решают такое за деньги, иди туда.
    Ответ написан
    8 комментариев
  • SyntaxError: Non-ASCII character как исправить?

    @bromzh
    Drugs-driven development
    # -*- coding: utf-8 -*-

    Эта строка указывает, что кодировка исходника - UTF-8. В этом файле у тебя всё правильно, компилятор ругается на другой файл (/home/vitali/projects/mysite/blog/admin.py). Вставь в начало всех файлов проекта эту строку.

    НО, если я уберу таб в последней строке,

    Зачем? Ты понимаешь, что делаешь? Или это рандом?
    Вообще, компилятор же всё ведь написал, научись понимать, что написано.
    Ответ написан
    3 комментария