• Правда ли что без хорошего знания математики (или какой-то отдельной темы) не стать хорошим программистом используя функциональную парадигму?

    @kondaurov
    Full stack developer
    Хороший программист это весьма абстрактное понятие, наверное у большинства людей этот образ разнится.

    Как я понял у вас нету опыта программирования но вы почему то уверены что нужно учить Scala и использовать в web разработке. Scala очень хороший язык, но мне кажется он сложноватый для новичка, начните с чего нибудь попроще или учите другой язык на равне со Scala. Я например раньше кодил на php и js (coffeScript), теперь на scala и typescript.

    Не понимаю почему некоторые думают что программисты это математики... Большинство прогеров пишут пракладное ПО, там требуется логика а не математика.

    Когда я начал кодить на скала я использовал play framework, там хорошая документация, понятный MVC фрейморк.

    Нельзя ответить на ваш вопрос, от вас все зависит, а уровень математики это болтология
    Ответ написан
    Комментировать
  • Откуда вдруг ошибки?

    @kondaurov
    Full stack developer
    Простая ошибка, не загружен скрипт в котором создается модуль 'adminNavigation'. Он точно подключен?
    Ответ написан
    Комментировать
  • Как открыть $uibModal.open?

    @kondaurov
    Full stack developer
    Уберите 'use strict'; в начале скрипта, или вам это явно нужно?
    stackoverflow.com/questions/33383854/how-to-fix-an...
    Ответ написан
  • Как организация приложения на AngularJS?

    @kondaurov
    Full stack developer
    Если вы используете ui-router то пользователя можно прокидывать через resolve в состоянии.

    {
    name: "index",
    controller(user) { console.log(user)}
    resolve: {
    user: function (usersService) { return usersService.getUser()}
    }
    }


    Контроллер не будет вызван если в resolve будут отклоненные промайсы
    Ответ написан
    2 комментария
  • Стоит ли сейчас учить TypeScript?

    @kondaurov
    Full stack developer
    Удивительно но что то никто не сказал что можно писать на typescript используя angular 1.x.
    typescript это тот же js только с аннотациями, типизацией, наследованием, интерфейсами а самое главное модулями. Без этих плюшек я уже и не знаю как можно делать надежные приложения. Жалею что время убивали с чистым js и coffee script.
    Вся функциональность что была раньше сейчас так же легко пишется на ts, ничем не жертвую, просто требует время покурить документацию.
    Можно использовать миксины (ака traits), смешивать классы и радоваться что нету копипаста кода, как сделать это на чем то другом я не знаю.

    Еще нужно будет разобраться с grunt (gulp), настроить таски на трансляцию ts в es5. Смотреть порядок загрузки файлов. Нужно потратить время еще и на это

    Есть куча статей про то как писать (правда все eng):
    https://gist.github.com/esfand/9569523
    www.codeproject.com/Articles/888764/Getting-starte...
    Ответ написан
    3 комментария
  • Не работает otherwise в $routeProvider?

    @kondaurov
    Full stack developer
    ngRouter не использую, пользуюсь ui-router.
    Все вроде правильно с провайдером
    Мне кажется не хватает хеш тега в урле, это же js, он может работать только с ними. Что будет просто если зайти на angular.local?
    Ответ написан
  • Как построить sql запрос?

    @kondaurov
    Full stack developer
    SELECT s.name, sum(r.value) FROM reviews as r
    LEFT JOIN sites as s ON s.id = r.site_id
    GROUP BY r.id_site
    Ответ написан
    4 комментария
  • Как комбинировать обьекты c RESTful API с помощью Angular?

    @kondaurov
    Full stack developer
    Вопрос относится полностью к backend, а точнее к rest сервису

    Тут есть два варианта:
    1. Вы делаете отдельный роут по которому будете отдавать все каталоги с объектами и их связями
    2. Можно сделать api гибче и дать возможность указывать связи которые нужно прикрепить с помощью параметров.
    jsonapi.org/format/#fetching-relationships

    Я пока использую первый вариант, второй вариант чуть сложнее и требует больше времени чтобы разобраться

    Или наиболее простой вариант - комбинировать все на бэкенде, выборкой из базы данных (JOINom)...но тогда теряется идея РЕСТ...

    Не нужно пользоваться Rest ради Rest. Нужно чтобы api отдавала нужную вам информацию в нужном виде а не соответствовала идейным представлениям. Rest нужен для CRUD операций с ресурсами в основном

    У меня пока все просто: Я создаю ресурсы и делаю CRUD роуты по
    Ответ написан
    Комментировать
  • Как в Scala тип Future[String] преобразовать в String?

    @kondaurov
    Full stack developer
    Единственный способ избавиться от Future и работать непосредственно с результатом это дождаться когда этот результат будет вычислен. Используйте concurrent.Await(f: Future[Any], duration) для этого.
    Внимание: Эта функция кидает исключение если Future не выполнится за duration


    val f = concurrent.Future.successful("myFutureString")
    val notFuture = concurrent.Await(f, 1.second)
    print(notFuture)


    Использовать Await не рекомендуется, делать это нужно в крайних случаях. Я использую Await тогда когда работаю с внешними Api сервисами, чтобы не заддосить запросами, а внутри своего приложения использую map.

    Вышеописанный пример можно выполнить и так(рекомендуется):

    val f = concurrent.Future.successful("myFutureString")
    f.map(res => print(res))
    Ответ написан
    Комментировать
  • Нормально ли хранить json в MySql?

    @kondaurov
    Full stack developer
    Постановка вопроса интересная - Нормально ли блаблабла.
    Сделайте сначала как думаете, храните динамичные поля в json поле строки таблицы. Потом когда задолбает писать sql запросы по извлечению этих полей вы сами поймете что нужно где хранить. Нормально то что решает конкретно ваши проблемы.

    Postgresql умеет работать с json, но приходится писать десериалайзеры и сериалайзеры этих полей при сохранении и извлечении. Мне это не нравится, дополнительный код.
    Посмотрите для интереса что умеет делать Mongo. Сейчас меня будут критиковать, типа человек работает с релиационными бд, но если вы не знакомы с ней то я считаю это будет полезной информацией
    Ответ написан
    Комментировать
  • Как правильно предъявить контроллер для Angularjs?

    @kondaurov
    Full stack developer
    Вы назвали модуль GridSystem а контроллер пытаетесь привязать к неизвестному модулю MyGrid

    angular.module('GridSystem', [])
      .controller('GridSystem', function($scope) {
        $scope.addrow = function() {
              $scope.name = ' ТЕКСТА';
          };
      });
    Ответ написан
  • SPA application, авторизация и что рендерить backend'y?

    @kondaurov
    Full stack developer
    Работаем по третьему варианту. Очень удобно. Разрабатываем проекты внутри своего отдела, работаем в двоем. Я делаю restful backend. В это время коллега ставит фейковые данные и делает приложение на ангуляре. Потом когда backend готов, убираем заглушки и радуемся xD Люди, которые ставят прототип разрабатываемого проекта, не видят полной картины, и мы часто делали ошибки когда backend & frontend были сплетены и делали все по их прототипу. Сейчас можно сказать делаем по "максимуму" так как тщательно продумываю backend, нужные контролеры, модели. PS Переписали пару проектов которые были на php (фреймворк Yii): Интерфейс стал интуитивно понятным, множество контроллеров сократилось до 2 - 3х с понятными экшинами. Нету дометивации расширять проект, так как код и архитектура прозрачна
    Ответ написан
    Комментировать
  • Как научиться алгоритмическому мышлению?

    @kondaurov
    Full stack developer
    и как написать чтоб это все выполнялось

    Это ответ на вопрос. Вы не видите цель и естественно никакой алгоритм на ум не прийдет.
    Вот есть цель: Нужно приготовить кофе. Хочу кофе.
    Дано: Кофеварка, Молотилка кофе, кофейные зерна.
    Алгоритм: Придумайте сами...
    Ответ написан
    Комментировать
  • Как происходит связь моделей с бд в java/scala приложениях?

    @kondaurov
    Full stack developer
    Развенлул приложение на PlayFramework2 (стандартный шаблон typesafe). С контроллерами, конфигами, вьюхами все понятно. А вот с моделями затык.


    Я не совсем понимаю в чем у вас затык. Не знаете как реализовать получение строк из таблицы? Все очень просто!

    https://www.playframework.com/documentation/2.3.6/... вам в помощь

    В scala есть такая крутая штука как case class. Описание объектов этих кейс классов immutable, изменить можно только лишь скопировав объект с измененным полем (полями).

    case class User(id: Option[Long] = None, name: String, password: String)
    val a = User("John", "super")
    val b = User.copy(name = "John2", password = "bla")


    В принципе можно мапить строки таблицы и в обычный класс с приватными полями но как я думаю создатели языка именно для этих целей уже сделали эти кейс классы.

    Почему immutable важно? Когда у меня есть коллекция кейс классов я знаю что никакие поля не изменятся в течение всего периода времени существования объектов этих кейс классов

    Кейс классы знать нужно и уметь делать нужные, на все возможные случаи! Именно поэтому это case class а не forever_stable_structure class
    Может показать что это не по теме но они используются везде, это главный друг scala программиста использующего play framework (да и не только, проекты на scala вообщем)

    В пакете у меня несколько кейс классов для одной сущности. Нету времени на примеры

    Получить запись пользователя из таблицы user по id можно так:

    import anorm._
    
    def getUserById(userId: Long): Option[User] = DB.withConnection { implicit r =>
    
    SQL("SELECT * FROM users WHERE user_id = {userId}").on(
     'userId -> 
    ).map(r => User(
     "id" -> r[Option[Long]]("id"),
     "name" -> r[String]("name"),
     "password" -> r[String]("password")
    )).singleOpt()
    
    }


    Или, во избежание дублирования кода маппинга полей таблицы в поля кейс класс, можно запихнуть этот код в объект компаньон кейс класса

    package models.user.User
    
    object User {
    
     def map(r: anorm.Row): User = User(
     "id" -> r[Option[Long]]("id"),
     "name" -> r[String]("name"),
     "password" -> r[String]("password")
    )
    
    }
    
    case class User(id: Option[Long], name: String, password: String)


    Потом создаем объект который я называю DAO. Он делает sql запрос и указывает какой функцией смапить строки отданные базой данных

    //###########

    package models.user.UsersDAO
    
    import play.api.db.DB
    import anorm._
    
    def getUserById(id: Long): Option[User] = DB.withConnection { implicit r =>
    
    SQL("SELECT * FROM users WHERE user_id = {userId}").on(
     'userId' -> id
    ).map(User.map).singleOpt()
    
    }


    Все очень просто и никаких затыков нету если ВНИМАТЕЛЬНО читать и стараться разобраться в сути а не делать так:
    Я разорался с синтаксисом Scala (с Java был поверхностно знаком)


    PS: Забыл упомянуть про Slick. Это такая штука которая избавляет от написания функций map(r: anorm.Row) и написания чистого SQL кода. В результате получается typesafe way в работе с получением данных от базы данных. Компилятор сразу компилирует мета код в чистый SQL и выплюнет ошибку если поле не правильно задано или тип не совпадает, тп. Это крутая вещь и с ней СТОИТ разобраться но сначала разберитесь с анормом, мне его пока хватает! Читайте мануалы по анорму, там все круто описано и я даже сам не знаю зачем все это написал когда сам во всем разобрался тем путем
    Ответ написан
    Комментировать
  • Как присваивать в сразу несколько значений через запятую?

    @kondaurov
    Full stack developer
    Вы не знакомы с js фреймворками? Angular например. Что то мне кажется у вас получится спагетти js с этим jquery
    Ответ написан
  • Как вы боретесь с наследием кода в больших проектах?

    @kondaurov
    Full stack developer
    Разработка через тестирование (наличие тестов) дают хоть какую то гарантию на архитектуру вашего приложения, что она не поменяется если прийдет другой человек на место создателя приложения.

    vasIvas @vasIvas
    А можете объяснить, как тесты помогают избавится от плохого кода и тем более от неправильной архитектуры?
    Написано 03 марта
    Ответить
    Nc_Soft @Nc_Soft
    vasIvas: никак


    Вы че гоните? прежде чем писать функцию - придумай тест и придумай 3 - 4 кейса к нему! Я разрабатываю через тестирование а не "тестирую сотнями запусками функций руками". Потом я уверенно использую эти функции в комбинации с другими и получаю проект который сразу работает и мне не надо писать еще интеграционные тесты потому что корень зла был убит еще в начале.

    Потом можно без опаски рефакторить! А рефакторить код который сам не писал или писал давно просто не реально, а если ваш проект связан с откруткой денег то и страшно
    Ответ написан
    Комментировать
  • Для изучения какой области web-разработки нужно больше "мозгов"?

    @kondaurov
    Full stack developer
    Для меня backend важен так как он хранит бизнес логику приложения, работает с базой, делает внешние запросы к другим сторонним сервисам. Он отвечает за отдачу данных для клиентского (фронтэнд) приложения и форму этих данных всегда можно поменять. А фронтэнд это всего лишь обертка которая обвязана вокруг api бакеэнда.
    Ответ написан
    Комментировать
  • Почему выдаёт ошибку - You can't specify target table 'table' for update in FROM clause?

    @kondaurov
    Full stack developer
    Видать динамические подзапросы не работают с update конструкцией в mysql. Тебе нужно создать временный результат подзапроса в какой нибудь таблице
    Ответ написан
    Комментировать