• Дайджест игровой индустрии: март
    0
    И кстати, Ли Се-Дол вроде не самый лучший, а один из лучших. По мнению некоторых специалистов есть мастера и получше в некоторых тонких аспектах.
    Но это не умаляет заслуг гугловского ИИ.
  • Западня для медицинских стартапов
    +1
    А потому, что «поет он сладко».
    «Пописал на огурчик, и хворюшка прошла...»

    А техники всякие будут позвякивать каждый раз как засидишься и калорий поднакопишь… Будут заставлять что-то делать… Лениво.
  • Microsoft подтвердила слухи об интеграции подсистемы Linux в Windows 10
    0
    Или Rails
  • Что нового в Rails 5.0. Можно планировать переезд
    0
    Я с Rails 5 Beta ничего для CORS не ставил. Просто раскомментировал код в application.rb или в config.ru, и CORS включен.
  • Microsoft подтвердила слухи об интеграции подсистемы Linux в Windows 10
    0
    Вариация на тему известного анекдота…
    "В своем резюме вы написали, что 10 лет проработали в отделе юмора Microsoft. Мы проверили — такого отдела не существует..."
  • Node.js. Паттерны проектирования и разработки
    0
    В заголовке:

    Перехват функций (латание по-обезьяньи плюс AOP)

    лучше бы не переводили Monkey Patching, если я правильно понял о чем этот заголовок. А то какой то блад ликинг для моих айзов получается.
    Вы же сами привели ссылку на вики где этого не стали делать… Ограничились "обезьяньим патчем". Никто же потом это Ваше обезьянье латанье не сможет загуглить.
  • Что нового в Rails 5.0. Можно планировать переезд
    +1
    Упоминули про API режим, но не упоминули про CORS, а этот вопрос автоматически встает для режима API.

    Теперь gem CORS стал частью Rails.
  • Zephyr Project — open source ОС реального времени
    0
    Ситуация обратная… Суть RTOS в том, что она попытается в шишки расшибиться, чтоб выдержать с точностью до миллисекунды заданное вами расписание, если железный таймер выдает с миллисекундами прерывание.

    Если у вас два потока с одним приоритетом должны сработать точно в одно время, тогда ситауция усложняется. Это нужно разруливать на уровне прописывания вами пауз в коде.

    Общая суть сводится к тому, как точно ОС выдерживает время старта задач и с каким квантом время переключает контекст.
  • Порог вхождения в Angular 2 — теория и практика
    0
    Когда я начинала проект меня волновал вопрос взаимодействия этих товарищей в плане роутинга. А именно, если грузить Angular в папку public, то у меня лично возникли проблемы с роутингом. Так как у Laravel свой роутинг, который с роутингом Angular у меня вообще никак не совпадал, а манипуляции c отдачей нужных роутов не привели к нужному результату. При возврате через браузер на предыдущую страницу мне постоянно выбрасывалась laravelевская страница с ошибкой. Убив пару часов, чтобы подружить этих товарищей я приняла решение разнести по разным доменам api(бэкенд) и фронтенд. Как по мне, так в случае замены одной или другой части целого я не буду зависеть от незаменяемой части.
    Так, что, условно сейчас я имею два проекта. Один, условно, крутится на домене: api.proect.dev, а второй на: proect.dev

    Так как я все-таки заявила в заголовке, про порог вхождения именно в Angular, то я не буду подробно останавливаться на API.

    Я пришел к такому же выводу почти сразу. Точнее сразу после того, как не смог перейти сразу на нестартовый эндпоинт.
    И да, разделение на две части имеет свои полезные бонусы.
    Однако есть минус: CORS. Когда UI запускается на другом домене, необходимо настроить API сервер для разрешения Cross-Origin Resources Sharing.

    У вас такая проблема возникла? Мне кажется вы зря решили опустить детали реализации серверной части.
  • Математика на пальцах: методы наименьших квадратов
    0
    Математик скажет, что у переопределенных систем (СЛАУ) нет точного решения в общем случае.
    Автор в статье привел приближенное решение, причем одно из...

    Мне вот к примеру нравится другое:
    [A^T · A] · x = A^T · b

    безо всяких разложений в ряды преобразуется домножением на [A^T · A]^(-1)

    [A^T · A]^(-1) · [A^T * A] · x = [A^T · A]^(-1) · A^T · b
    получаем

    x = [A^T · A]^(-1) · A^T · b

    А еще можно ввести ковариационную матрицу, если статистики по разным искомым переменным отличаются друг от друга.
  • Казахстан внедряет свой CA для прослушивания всего TLS-трафика
    0
    Именно! Для крупной транснациональной кампании рынок этот мелок, а для страны уход крупного инвестора будет чувствительным ударом.
  • Казахстан внедряет свой CA для прослушивания всего TLS-трафика
    0
    Наличие иностранных инвесторов сильно влияет на национальную валюту. Например, правительство РФ «бьет себя пяткой в грудь», мол, они «из кожи вон лезут», чтоб привлечь и удержать инвесторов. При массовом сливе иностранных кампаний в ту же дыру сливается и рубль.
    Думаю Казахстан тоже очень сильно заинтересован в них.
  • Казахстан внедряет свой CA для прослушивания всего TLS-трафика
    0
    Как раз шерифа это и заденет, т.к. у негра в данном случае есть четкое указание, что если конкретная страна не дает возможности вести бизнес по правилам для публичных корпораций, вышедших на IPO, то корпорация («негр») не должна вести бизнес в данном регионе.
    Я знаю, что в Казахстане работают несколько международных игроков, подвергающихся постоянному аудиту на предмет соответствия международным нормам в сфере инфо. безопасности и менеджмента. Для них данный вопрос куда более серьезен, чем для совковых конторок а-ля «Рога и Копыто».
  • Казахстан внедряет свой CA для прослушивания всего TLS-трафика
    0
    — Ваша программа работает только под админом! Так нельзя!
    — А в чем проблема? Выдайте бухгалтерам админские права, это ведь несложно!

    В публичных транснациональных корпорациях очень может быть по полисям запрещено выдавать админские права бухгалтерам. Я не уверен, но думаю что где-нибудь в ISO есть указание к информационной безопасности.

    Кроме того, админские права внутри корпорации отождествляются с дополнительными расходами. За каждую дополнительную фишку конечного пользователя в ведомостях проходят дополнительные копеечки. У корпорации с 10К пользователями это может вылиться в кругленькую сумму.
  • Любовь или брак по расчету с Dependency Injection?
    0
    В идеале контроллеры должны быть слишком тупы, чтобы их покрывать тестами, нам это никогда не понадобится, если и покрывать их, то интеграционными тестами


    Подход с «тонкими» контроллерам используют в Rails среде, когда пишут RESTful API Application. С ним действительно упрощается тестирование.

    Тестами покрываются только модели и функционирование UI. При этом, т.к. основное приложение чисто API провайдер, то UI реализуется и тестируется отдельно (например, с AngularJS либо EmberJS).

    Лично я вижу «зерно» в этом доводе.
  • Анализ резюме с HeadHunter. Кто сколько зарабатывает и в каких отраслях работает
    0
    Затем была сделана попытка сравнить регионы России по ожидаемым зарплатам и популярности индустрий. Удивительно, но самые высокие ожидания не в Москве, а на Дальнем Востоке. Почему так, кто знает?


    Однажды, будучи разработчиком среднего уровня отправлен был я в командировку в Ямало-Ненецкий АО (2008-2009 гг.). Вот вам сравнение на тот момент.

    Программист в Саратове 15 тыр. (±), а диспетчер на рации на Ямале 150 тыр. (+50 тыр сверху после прохождения тренинга/экзамена по пром. безопасности). Соотношение квалификации и з/пл. между центральной провинцией и северными газо- нефтеродными регионами примерно такое же сейчас.
  • Автоматическая калькуляция вычислимых свойств моделей представлений в .NET
    +1
    Да, код я слабовато изучил. Заглянул в репозиторий и поглядел на реализацию.

    1. В приведенном коде DependenciesMap создается как статическое поле и висит в памяти пока не завершит работу приложение.
    2. При каждом вызове StartTracking создается новый инстанс DependenciesTracker, который в приватное поле сохраняет ссылку на DependenciesMap и на текущий инстанс ViewModel.
    3. DependenciesMap ссылку на трекер и на инстанс VM не хранит. Вместо этого трекер хранит ссылку на VM и имеет подписку на ее события. Также трекер пользуется ссылкой на статически определенную DependenciesMap.
    4. Таким образом, трекер не собирается GC только благодаря подпискам на события VM. Больше на него никто не ссылается в указанном примере. Если собирется инстанс VM, то и трекер уйдет вслед за VM.

    Правильно понял? Может стоит в статье описать принцип работы, а то по примеру складывается впечатление, что DependenciesMap может сохранить у себя ссылку на инстанс VM?
  • Автоматическая калькуляция вычислимых свойств моделей представлений в .NET
    0
    //Определяем статическую "карту зависимостей", которая будет хранить зависимости для класса
            private static readonly IDependenciesMap<Order> _dependenciesMap = new DependenciesMap<Order>();
    
            static Order()
            {            
               //Определяем и добавляем в карту зависимости
                _dependenciesMap.AddDependency(o => o.Cost, o => o.Price * o.Quantity, o => o.Price, o => o.Quantity)
            }
    
            private IDisposable _tracker;
    
            public Order()
            {
                //Начинаем отслеживать зависимости для текущего экземпляра модели
                _dependenciesMap.StartTracking(this);
            }
    


    Метод возвращает IDisposable, который может быть использован для остановки отслеживания изменений на любом этапе жизненного цикла модели.


    Я бы в Вашей статье разместил «АХТУНГ» (большими красными буквами), что ОБЯЗАТЕЛЬНО следует вычищать статически определенный _dependenciesMap, а не то возможны утечки памяти.

    И тут сразу вопрос, а как, когда и кто, по-вашему, должен диспозить _dependenciesMap?
  • Автоматическая калькуляция вычислимых свойств моделей представлений в .NET
    0
    С технической точки зрения не все хорошо, потому что могут существовать достаточно сложные связи между свойствами, поддерживать вручную которые достаточно трудоемко (и багоемко). Примерами таких связей являются:

    зависимости от свойств, которые сами являются зависимыми;
    зависимости от свойств вложенных объектов (цепочки свойств), как в случае DiscountSum = Order.Sum * Order.Discount.Percent / 100;
    зависимости от свойств элементов коллекции (TotalQuantity = Orders.Sum(o => o.Quantity)).

    А вот это уже понятный довод. Но как и написали в комментарии выше, в сети можно найти реализации аттрибутов для свойств или других способов, реализующих зависимости между свойствами.
  • Автоматическая калькуляция вычислимых свойств моделей представлений в .NET
    0
    Это в свою очередь нарушает SRP на микроуровне, так как изначально не зависящие ни от чего (и простые в реализации) свойства теперь вынуждены иметь знания о существовании других свойств и деталей их реализации для того, чтобы иметь возможность в нужные моменты правильно эти свойства обновлять.

    Если перейти по ссылке, то в самом начале написано, что SRP есть понятие применяемое к классу. Конкретно в данном случае «якобы SRP» нарушен конкретно указанной реализацией.
    Достаточно, например, сделать байндинг на стоимость read-only и при изменении остальных двух свойств делать вычисление и выставку стоимости в ViewModel, и сразу противоречие иссякнет.
  • Автоматическая калькуляция вычислимых свойств моделей представлений в .NET
    0
    Статью не прочитал еще до конца, но уже есть, возможно, несущественное замечание.
    Мой комментарий уже не первый, так что могу себе позволить побрюзжать.

    Неудачно Вы выбрали шорткат для ViewModel: «модель». Такой выбор у знающих паттерн MVVM постоянно будет вызывать путаницу.
  • (Архив) Matreshka.js — Три возможности
    0
    Матрешку иногда критикуют за способ, который был выбран для связывания данных и представления. Если быть точнее, у разработчиков вызывает вопросы метод bindNode и использование селектора вместо новомодных компонентов или описания логики прямо в HTML коде.


    По такому же пути прошел (и «пришел» в смысле «докатился») WPF.
    На практике многим уже приходится писать свой или грызть чужой велосипед, позволяющий в биндинге декларативно описывать логику (в смысле всяких трансформаций или арифметических выражений).
    Иначе нужно будет плодить кучу конвертеров либо копипастить с незначительными изменениями куски кода в VM части (не знаю как слой «под UI» называется в терминах матрёшки, уж простите).
  • Скрытые зависимости как «запах» проектирования
    0
    Открытием окон обычно занимается некий NavigationManager. Буквально он либо дергает навигационный метод в WPF Frame, либо кладет нужного типа VM в ContentControl с пачкой <DataTemplate DataType="{x:Type SomeViewModel}.

    Ванильный MVVM вообще может означать инстанциирование ViewModel через XAML в секции Resources. Много где видел предложение инстанциировать VM'ли в ресурсах App.xaml. Получается, что в изначальной трактовке задача VM — реализовывать жизненный цикл Model, контролировать потоки данных и реализовывать ЛОГИКУ переключений частей UI. Все это следует из главного принципа «Отделяем UI от логики/кода».
    Но на практике это накладывает очень много ограничений, поэтому все сначала «говнокодят» исходя из текущих практических нужд, а потом это обзывают MVPVM.
  • Скрытые зависимости как «запах» проектирования
    +1
    Control Flow осуществляет ViewModel, поэтому и модальные диалоги ей вызывать. Это если паттерн MVVM


    Это не паттерн MVVM, а черти-что и лицемерие со стороны M$, ИМХО. Да Вы написали MVPVM, но для меня это не паттерн а попытка как-то обозвать (или ввести четкий термин/ярлык) решение из раздела «костыльное программирование» (я в хорошем смысле, то есть непротив), которое в свою очередь появилось из-за невозможности оставаться в рамках чистого MVVM.

    Ваша правда, что на практике не получается обойтись без управления частями UI из VM, хотя по ванильному паттерну MVVM иметь ссылку на UI внутри VM категорически запрещено.
    Более того, на практике, хранение прямой или опосредованной ссылки на UI ведет с большой вероятностью к массивным утечкам (утечет VM — полбеды; утечет VM+UI — швах). Тогда приходится еще и реализовывать вычистку нелегального барахла через IDisposable.

    Отвечая более детально на предыдущий комментарий, приведу пример.

    1. В VM есть команда удаления некоей сущности. Изменение это деструктивное и следует показать юзеру запрос «Да — Нет»
    2. Чтобы иметь возможность из VM что-то показать юзеру, заводится некий хэлпер, Expression Behavior или еще какая-то сущность, играющая роль прокси между VM и V. Кто-то обзывает ее буковкой :P.
    3. Дальше ссылка на эту прокси-сущность гоняется взад и вперед между VM'ми с целью наделить VM арендованным правом запустить тентаклю в UI.
  • Криптовымогатели придумывают новые способы шантажа пользователей
    0
    Ответил ниже
    Для бэкапов отдельный инстанс ОС.
  • Криптовымогатели придумывают новые способы шантажа пользователей
    0
    Делать бэкап, загрузившись с Live-DVD (Linux или др. ОС).
  • Используем DataGrid в WPF
    0
    PS: если собираетесь программно или автоматически менять размеры колонок, то сразу отказывайтесь от DataGrid. он больше любит фиксированные размеры колонок, отсутствие адаптивности под размеры экрана и ручной ресайз юзером.
    А с авторесайзом и резиновым дизайном сразу убивается производительность старта приложения с DataGrid, т.к. этот контрол на старте делает ресайз несколько раз => UpdateLayout() с DataGrid ужирает процессор по-максимуму.
    С ListView протребление значительно ниже.
  • Используем DataGrid в WPF
    0
    Все правильно написали. Поисковик нужен для выдачи решения для конкретной проблемы в как можно более сжатом виде, а не энциклопедической статьи.
  • Используем DataGrid в WPF
    +1
    «Искать в гугле» не значит, что яндекс — плохой поисковик. Скорее это вопрос специализации. Для девелоперских нужд выдача гугла релевантнее, субъективное ИМХО.
  • Используем DataGrid в WPF
    +1
    Очень не рекомендую начинать (да и продолжать на самом деле) со стокового DataGrid в WPF. У него очень тежеловесный дизайн (архитектура и графическое дерево). Если Вам не нужны его встроенные фичи, а в реальных случаях велик шанс, что специфичные сценарии не получится с DataGrid реализовать именно так как UX спец написал, то лучше использовать ListView + GridView.
    Сортировку и Фильтрацию надежнее снаружи реализовывать. При этом тормозов с ListView намного меньше будет.

    Я профилировал перформанс двух одинаковых реализаций части экрана с DataGrid и ListView. Производительность отличается в разы в случае двухуровневых списков (Master и Details).
  • Еще одна методология: Стаханов
    0
    Ясною Спасибо!
  • Еще одна методология: Стаханов
    0
    Все-таки не получил ответа на первый вопрос.

    1.
    Насколько накладно дробить и расписывать досконально подзадачи?

    и
    1) Время работы геймдизайнеров — дешевле времени работы программистов. Всегда.


    Если додумывать ненаписанное, то «Да, накладно, т.к. задания расписывает геймдизайнер», но зато «2) Время разработки...»

    Правильно ли я понял?
  • Еще одна методология: Стаханов
    0
    Насколько накладно дробить и расписывать досконально подзадачи?
    Делали сравнение с методологией «я опишу вкратце, а если не поймет, то пусть спросит — на словах объясню»?
  • Unreal против Unity: на чем лучше разрабатывать мобильные игры?
    0
    Блокируется неймспейс Network.Data (System.Data или как-то так), из-за которого я в свое время во фришной версии юнити не смог реализовать обмен JSON'ами с использованием Newtonsoft.Json.
    Но сами сокеты доступны и UDP работает хорошо.
  • Блеск и нищета HTML5 — доступ к датчикам
    0
    Это доказывает, что компас играет главенствующую роль в формировании значений DeviceOrientationEvent (а может и вообще — исключительную роль, т. к. значения других датчиков не учитываются). Да, прошу прощения, но я не разрабатываю ОС и браузеры и не знаю, как конкретно формируются те или иные значения. Но проведя такой эксперимент, можно предположить, что это просто данные с компаса, без какой либо обработки (compassneedscalibration ещё на это намекает).


    С ориентацией ситуация такова:
    1. Компас является «Датчиком Первичной Информации» для ориентации (в горизонтальной плоскости). Это означает, что он сразу измеряет углы ориентации. Есть погрешность, но она не накапливается, т.к. измерения компаса не интегрируются.
    2. Гироскоп и акселерометр выдают, соответственно, скорость и ускорение. Они не являются ДПИ для ориентации* (звездочка в следующем пункте). Их показания интегрируются для получения угловых и линейных координат. Стало быть, накапливают ошибки.
    3. По акселерометру определяются тангаж и крен, т.е. углы в двух вертикальных плоскостях и в этом смысле акселерометр является ДПИ.
    4. Из вышенаписанного следует, что компас будет играть главенствующую роль, пока некий алгоритм не детектирует аппаратный сбой компаса. Например, если задетектировали наличие значительного магнитного возмущения (магнитуда напряженности или еще как-то), то можно присвоить компасу низкий приоритет. Но это усложнение используется лишь в специальных реализациях (для БПЛА, напр.).
  • Unreal против Unity: на чем лучше разрабатывать мобильные игры?
    0
    Может проще через сокеты? Я так делал с Unity — там UDPSocket доступен. Для немассовых пересылок сообщений в пределах машины, думается, будет приемлемой заменой пайпам.
  • Детективная история — Что общего между auto.ru и brazzers?
    +2
    Мне показалось, что это такой метод защиты реализации. Вот и автор задался вопросом аналогичных либ, убоявшись «дралоскопировать» эту реализацию.
  • 3 способа задать разметку для различных устройств в C#/XAML приложениях Windows UWP
    0
    В таком случае просто не реализована еще сборка с граф. интерфейсом. Возможно, позже появится семейство с графикой для RPi 2 в описанном подходе.
  • 3 способа задать разметку для различных устройств в C#/XAML приложениях Windows UWP
    0
    Потому, что, видимо, пока есть только headless-сборка для него. Если изобретут «иксы» виндовые, на поддержку которых хватит ресурсов RPi, то появится и «headness»-сборка.
  • Aero Framework — новое дыхание WPF. Поднимаемся выше MVVM
    0
    Насчёт подписок на PropertyChanged, да, точка входа (как правило метод Expose [это как Dispose, только наоборот]) «распухает лямбдами», но это намного удобнее — контролировать подписки и вызовы в одном месте, чем искать в разбросанном виде по самим свойствам, а также устанавливать очерёдность вызовов.


    1. Читабельность кода с случае с длинной последовательностью лямбд будет хуже, чем у последовательности методов той же длины. Хотя это дело конвенций на проекте.
    2. Можно сгрупировать методы, вызываемые в сеттерах в один #region. Можно сгруппировать методы еще и конвенцией наименования («если нужен метод от такого-то свойства, то искать методо вида SomePropPostSet(...)»). С решарпером легко будет набрать 4-5 заглавные буквы, и метод найден.
    3. Не понял как простыня из лямбд в Expose решает проблему определения последовательности вызовов до запуска приложения. В рантайме в обоих подходах последовательность вызовов будет определяться по Call Stack. В случае с подписками, как указано в статье, Call Stack будет содержать промежуточные записи с активацией event PropertyChanged, если правильно понял логику.