• Обучение 3D моделированию с нуля?

    0X12eb
    @0X12eb
    Могу лишь отметить начало ознакомления с этой областью (потом всё понеслось само собой)
    В качестве хобби осваивал 3dsMax в далеком 2008 году по этим журналам - Render Magazines
    Данный стек юзаю как хобби, если расти в этой области то на хорошем рабочем месте скилл будет расти на порядок быстрее.
    Ответ написан
    Комментировать
  • Центрирование текста с бэкграундом?

    0X12eb
    @0X12eb
    <div class="wrapper">
        <div class="date">11.08.2017</div>
        <h1>Заголовок</h1>
    </div>

    wrapper {
         text-align: center;
    }
    Ответ написан
  • Как обойти переадресацию сайта с com на ru?

    0X12eb
    @0X12eb
    Из бесплатного - Opera VPN

    LmGnzD3cRl6ZZr.jpg
    Ответ написан
    Комментировать
  • AngularJS для сайта и для мобильного приложения - это одно и то же?

    0X12eb
    @0X12eb
    Нативное мобильное приложение - это обязательное требование?
    Если да - IONIC облегчит жизнь, если веб-приложение на одном из последних frontend - фреймворков (таких, как Angular).
    Если же нативное мобильное приложение не обязательно - смотрите в сторону PWA - пишем один раз на том же ангуляре, и получаем приложение в вебе + "приложения" под все платформы (+ плюшки типа оффлайн доступа к приложению)

    В любом случае всё будет зависеть от бюджета и опыта разработчиков.
    Ответ написан
    Комментировать
  • Как возвращать true с операциями сравнения в Angular 1.2.14?

    0X12eb
    @0X12eb
    Хз что возвращает getCell и зачем функции передавать вторым параметром строку.

    <table>
      <tr ng-repeat="x in vm.data" ng-class="{danger: vm.diff_range_start_time >= 10}">
        <td>{{ x.Name }}</td>
        <td>{{ x.Country }}</td>
      </tr>
    </table>
    Ответ написан
    Комментировать
  • Как добраться точечным способом до свойства в filter?

    0X12eb
    @0X12eb
    Есть три решения:
    1 вариант: Внутри выражения фильтра итератор уже проходит по свойствам твоих обьектов массива, поэтому такое должно работать:
    <div ng-repeat="article in articles.values | filter:{title:paragraph}"></div>

    2 вариант: Пишешь свой кастомный фильтр.
    3 вариант: Пишешь filter expression:
    template
    <div ng-repeat="article in articles.values | filter:filterExpression"></div>

    js
    sc.filterExpression = article => article.title === paragraph;

    В данном случае, конечно, первый вариант лучше остальных.
    Ответ написан
    Комментировать
  • Уровень доступа к данным .NET Core и Dapper?

    0X12eb
    @0X12eb
    Выбор Dapper ORM чем то аргументирован?
    Если Вам действительно нужна та скорость с которой даппер маппит, но Вы готовы пожертвовать скоростью написания кода тогда делайте так:

    1. Реализуем SqlBuilder под все нужды:
    public interface ISqlBuilder
        {
            SqlBuilder.Template AddTemplate(string sql, dynamic parameters = null);
            ISqlBuilder LeftJoin(string sql, dynamic parameters = null);
            ISqlBuilder PagingLeftJoin(string sql, dynamic parameters = null);
            ISqlBuilder Where(string sql, dynamic parameters = null);
            ISqlBuilder PagingWhere(string sql, dynamic parameters = null);
            ISqlBuilder OrderBy(string sql, dynamic parameters = null);
            ISqlBuilder PagingOrderBy(string sql);
            ISqlBuilder Select(string sql, dynamic parameters = null);
            ISqlBuilder AddParameters(dynamic parameters);
            ISqlBuilder Join(string sql, dynamic parameters = null);
            ISqlBuilder GroupBy(string sql, dynamic parameters = null);
            ISqlBuilder Having(string sql, dynamic parameters = null);
        }


    2. Под каждое конструирование запросов пишем свой класс, реализуем интерфейс IQueryBuilder для дальнейшей инъекции зависимости в сервисах:

    using Dapper;
    
        public class MyEntityQueryBuilder : IQueryBuilder<T>
            where T: IEntity
        {
            private readonly ISqlBuilder _sqlBuilder;
            private readonly SqlBuilder.Template _entityTemplate;
            private readonly string entity_template = @"
                   select 
                         /**select**/ 
                   from 
                         entity_table e 
                   /**leftjoin**/
                   /**where**/ 
                   /**orderby**/
            ";
            private readonly string split_on = "Id";
    
            public MyEntityQueryBuilder(ISqlBuilder sqlBuilder)
            {
                _sqlBuilder = sqlBuilder.AddTemplate(entity_template);
            }
    
            public Query Build(EntityFilter filter)
            {
                Select();
                LeftJoin();
                Where(filter);
                Order();
                return new Query
                {
                    Sql = _entityTemplate.RawSql,
                    Parameters = _entityTemplate.Parameters,
                    SplitOn = split_on,
                };
            }
    
            private void Select()
            {
                _builder.Select("e.Id");
                _builder.Select("e.Title");
            }
    
            private void LeftJoin()
            {
                _builder.LeftJoin("asn_Responsibles r1 on r1.Id = e.MainResponsibleId");
                _builder.LeftJoin("asn_EventResponsibles er on er.EventId = e.Id");
            }
    
            private void Where(EntityFilter filter)
            {
                _builder.Where("e.IsDeleted = 0");
                if (filter == null)
                {
                    return;
                }
                if (filter.Id.HasValue)
                {
                    _builder.Where("e.Id = @id", new { id = filter.Id });
                }
                if (filter.IsRootOnly)
                {
                    _builder.Where("e.ParentId is null");
                }
            }
    
            private void Order()
            {
                _builder.OrderBy("e.CreateDate");
            }
        }


    3. Нужен абстрактный репозиторий? Реализуйте IRepository и инжекте уже туда Ваши свежеиспеченные QueryBuilders для дальнейшего маппинга даппером.

    Удачи (:
    Ответ написан
    Комментировать
  • Как настроить ninject, чтобы можно было передавать ядру аргументы, которые использует конструктор класса?

    0X12eb
    @0X12eb
    Используйте метод расширение WithConstructorArgument:

    this.Bind<IRictagle>()
          .To<Rictagle>()
          .WithConstructorArgument("a", a)
          .WithConstructorArgument("b", b);

    Если не хотите использовать параметры на уровне создания связей ядра - реализуйте свой провайдер:

    abstract class NinjectProvider<T> : IProvider

    Ну вообще получать экземпляр напрямую из ядра не ок, делайте сразу правильно, даже если это обучающий пример:
    1. Создаем NinjectDependencyScope и реализуем интерфейс System.Web.Http.Dependencies.IDependencyScope.
    2. Создаем NinjectDependencyResolver и реализуем интерфейс System.Web.Http.Dependencies.IDependencyResolver.
    3. Создаем NinjectRegistrations и реализуем абстрактный класс Ninject.Modules.NinjectModule.

    После этого класс сам подхватит зависимости из ядра и Вы сможете пользоваться своим экземпляром класса.
    Ответ написан
    Комментировать
  • Как в Angular2 навесить события и обращаться к атрибутам для html пришедшего из api?

    0X12eb
    @0X12eb
    По средствам чего вы планируете обрабатывать эти самые клики и получать значения атрибутов?
    Если, например, будете использовать jQuery, то подойдет такой вариант:
    import { Pipe, PipeTransform } from '@angular/core';
    import { DomSanitizer } from '@angular/platform-browser'
    
    @Pipe({ name: 'safeHtml' })
    export class SafeHtmlPipe implements PipeTransform {
        constructor(private sanitized: DomSanitizer) { }
        transform(value: string) {
            return this.sanitized.bypassSecurityTrustHtml(value);
        }
    }

    Затем рендерим контент который пришел из RestAPI и работаем со всеми пришедшими тегами и атрибутами:

    <div [innerHTML]="data.content | safeHtml"></div>
    Ответ написан
    Комментировать
  • Как правильно обработать массив объектов для md-table в общем компоненте?

    0X12eb
    @0X12eb
    Вам поможет определение своего кастомного DataSource, наследуемого от типизированного из '@angular/cdk'
    В дальнейшем посоветовал бы сделать его один раз генерик с общими параметрами для Вас (будь то сортировка, фильтрация или другими постпроцессорами)

    export class CustomDataSource extends DataSource<T> {
    
      constructor(
          private _customService: CustomService, 
          private _paginator: MdPaginator) { }
    
      connect(): Observable<T[]> {
        const displayDataChanges = [
          this._customService.getAllObjects(),
          this._paginator.page
        ];
    
        return Observable.merge(...displayDataChanges).map((data, page) => {
          const clonedData = data.slice();
    
          const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
          return data.splice(startIndex, this._paginator.pageSize);
        })
      }
    
      disconnect() {}
    }
    Ответ написан
    8 комментариев
  • Как исправить ошибку Error: [$rootScope:infdig] $rootScope/infdig?p0=10 в angular?

    0X12eb
    @0X12eb
    У вас рекурсивное ограничение самого angular, по-умолчанию TTL == 10, есть 2 решения данной проблемы:
    1 вариант: Если известна глубина рекурсии - необходимо установить TTL в точное значение.
    2 вариант: Если глубина неизвестна, задать такой TTL, который по вашему мнению вы не сможете превысить.
    В обоих случаях TTL устанавливается примерно так:
    angular.module('app', [], $rootScopeProvider => {
      $rootScopeProvider.digestTtl(15);
    });
    Ответ написан
    2 комментария
  • Простая загрузка данных в state из json?

    0X12eb
    @0X12eb
    1 вариант:
    myApp.config(function ($stateProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise('/detail');
        $stateProvider
            .state('root', {
                url: '',
                resolve: {
                    promiseDatas: function ($state, $http) {
                        return $http.get("params.json");
                    }
                },
                controller: function ($state, promiseDatas) {
                    var vm = this;
                    vm.datas = promiseDatas.data;
                    $state.current.data.datas = promiseDatas.data;
                },
                controllerAs: 'root'
                data: {
                    datas: {}
                }
            })
            .state('detail', {
                parent: 'root',
                url: '/detail/:id',
                templateUrl: 'pages/detail.html',
                resolve: {
                    promiseData: function ($state, $stateParams) {
                        return _.findWhere($state.current.data.datas, { id: $stateParams.id })
                    }
                },
                controller: function (promiseData) {
                    var vm = this;
                    vm.data = promiseData;
                },
                controllerAs: 'detail'
            })
    })

    2 вариант: Использовать $state.go и передавать { item } напрямую потомку (не придется трогать всю коллекцию и фильтровать ее на наличие интересующего объекта).
    3 вариант: Использовать родительский $scope, но от скоупа лучше воздержаться.
    Ответ написан
    Комментировать
  • Кто как тестит ReactJs apps?

    0X12eb
    @0X12eb
    Jasmine karma
    Ответ написан
    Комментировать
  • Как отменить сохранение положения прокрутки javascript?

    0X12eb
    @0X12eb
    $(document).ready(function(){
        window.scrollTo(0, 0);
    });
    Ответ написан
    Комментировать
  • Как правиль строить сложные Url, хранить и передавать их состояние?

    0X12eb
    @0X12eb
    Набросал примерный вариант реализации: Plnkr
    Для отслеживания смены состояний и вытаскивания параметров из состояний потомков, можно использовать такой вариант:
    controller: function($state, $scope, $rootScope) {
            $rootScope.$on("$stateChangeStart", function() {
              $scope.stateParams = $state.params;
            });
          }
    Ответ написан
  • Как можно получить данные об аудио-файле с помощью JS?

    0X12eb
    @0X12eb
    <audio id="my-audio" src="site/audio/music1.mp3"></audio>
    
    <script>
      var myAudio = document.getElmentById("my-audio");
      alert(myAudio.duration); // Длительность
    </script>
    Ответ написан
    Комментировать