Архив за 11 апреля 2016 - 6

Ассортимент компании BitFenix пополнился компонентами для моддинга Alchemy 2.0. Они адресованы энтузиастам, желающим, с одной стороны, придать своим системам индивидуальность, а с другой стороны — использовать оптимально подходящие компоненты. Скажем, блоки питания с модульными кабельными системами дают возможность включать в систему только необходимые кабели. Компоненты для моддинга Alchemy 2.0 позволяют сделать следующий шаг, выбрав отдельно кабели в оплетке, разъемы для них и гребенки для аккуратной укладки кабелей.

Поиск экзопланет под вопросом: космический телескоп «Кеплер» перешел в аварийный режим работы - 1

В космосе на благо науки трудится не один и не два космических аппарата, запущенных людьми, подобных систем уже десятки. Одним из таких аппаратов является «Кеплер» — космический телескоп NASA, который предназначен для поиска экзопланет. Его основная миссия уже завершилась (в 2012 году), но аппарат продолжал работать, делая удивительные открытия.

Например, телескоп обнаружил (вернее, это обнаружили ученые, анализирующие данные, переданные телескопом), что в течение последних нескольких лет несколько раз менялась яркость объекта KIC 8462852. И эти изменения в яркости нельзя объяснить наличием планеты или облаком пыли. Некоторые ученые (не говоря уж об «уфологах») заговорили о наличии у этого светила сферы Дайсона. Открытий было множество (открыто около 1000 экзопланет, эти открытия подтверждены), и ученые рассчитывали на дальнейшее продолжение работы с телескопом «Кеплер». Но сейчас ситуация изменилась — неожиданно система перешла в аварийный режим работы.
Читать полностью »

image

Мы построили роботов, которые могут ходить, говорить, играть в невероятно сложные настольные игры, но использовать их для работы в китайских ресторанах оказалось не такой уж и хорошей идеей — два ресторана, которые воспользовались роботизированными официантами закрылись, а в третьем оставили только одного робота для привлечения клиентов и вернулись к традиционным формам обслуживания, сообщает shanghaiist.

Официанты жаловались на своих бывших коллег. «Роботы были не в состоянии нести суп или другую пищу, требующую устойчивости и часто ломались. Директор ресторана решил больше никогда не использовать их снова», рассказал один из сотрудников.
Читать полностью »

Фитнес-трекер впервые помог спасти жизнь человека - 1

42-летний мужчина из Нью-Джерси попал в отделение скорой помощи после сердечного приступа. Изучив данные с его фитнес-трекера Fitbit Charge HR, врачи приняли правильное решение провести кардиоверсию — электроимпульсную терапию для депорялизации миокарда и восстановления ритма сердца. Клинический случай, описанный в научном журнале по реаниматологии — первый известный случай, когда фитнес-трекер помог спасти жизнь человеку.
Читать полностью »

Всем привет! Рады представить вам новую версию Caché 2016.1, релиз которой состоялся во второй половине марта. Важных и интересных изменений действительно много, поэтому предлагаю сразу перейти к ним.

Релиз СУБД InterSystems Caché 2016.1 - 1

Читать полностью »

Приветствую! В этой статье будет показано, как, имея на руках обычные Future-ы, сделать в scala подобие корутин и асинхронные stream-ы. Этакий небольшой туториал по функциональному программированию.

Что это и зачем

Что такое Future человеческим языком

Future — это сущность, описывающая результат некоторых вычислений, который мы получим не сразу, но в будущем. Но есть одна особенность: зачастую мы, не зная еще результата, точно знаем, что мы с ним будем делать. Например, мы попросили у сервера какой-то конфиг, и теперь у нас есть Future[Config]. Сам конфиг мы еще не получили, но точно знаем, что, когда получим, то достанем из него адрес и по этому адресу попросим у сервера картинку (config => Future[Image]). И Future[Config] способна изменяться таким образом, чтобы мы вместо конфига и потом картинки могли получить сразу картинку. Сущности, способные комбинироваться таким способом, называются монадами.

К сожалению, простое последовательное комбинирование 2х и более асинхронных операций (загрузить конфиг, а потом картинку по адресу из конфига как пример) — это все, на что способны обычные Future-ы в качестве монад. Они не позволяют ни сохранять состояние, ни делать циклы из асинхронных операций, ни выдавать несколько (или бесконечно много) значений. Вот этими недостатками мы сейчас и займемся.

Давайте для определенности представим некий виджет. Он ждет конфиг, который обновляется с определенной периодичностью, загружает по адресу из конфига значение (например, температуру), и рисует на экране текущее значение, минимум, максимум, среднее и так далее. И все это делает в цикле, да еще и асинхронно.

Применив знания из этой статьи, мы сможем этот процесс описать примерно так:

Код

// Про 'FState' - далее, пока же просто примем, что это - такая необычная Future
def getNextConfig: FState[Config]
def getTemperature(from: String): FState[Int]

case class State(temperature: Int, sumTemp: Long, count: Int) {
  def isGood = ...
}

// Как видим, получается единый асинхронный алгоритм с состоянием, 
// которое извне этого алгоритма не видно
val handle = 
  while_ ( _.isGood)
  {  for (
        config <- getNextConfig();
        if (config.isDefined);  // пустой конфиг - прекращаем выполнение
        nextValue <- getTemperature(config().source);  // грузим значение температуры
        state <- gets[State];  // тут мы берем текущее состояние
        newState = State(nextValue, state.sumTemp + nextValue, state.count + 1);
        _ <- puts(newState);  // .. и меняем его
        _ <- runInUiThread { drawOnScreen(newState) }
  ) yield() }

Или вот так:

Код

val configs: AsyncStream[Config] = ... // получаем откуда-то stream конфигов

def getTemperature(from: String): FState[Int]

case class State(temperature: Int, sumTemp: Long, count: Int)

// Получается то же самое, только вместо зависимости 'getNextConfig'
// мы, по сути, передаем сами данные - stream из конфигов
val handle = 
  foreach(configs) {
    config => for (
        nextValue <- getTemperature(config().source);  // грузим значение температуры
        state <- gets[State];  // тут мы берем текущее состояние
        newState = State(nextValue, state.sumTemp + nextValue, state.count + 1);
        _ <- puts(newState);  // .. и меняем его
        _ <- runInUiThread { drawOnScreen(newState) }
    ) yield()  
  }

Всех, кто заинтересовался, прошу под кат.
Читать полностью »

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

Для затравки мы взяли руководителей пяти ведущих веб-продакшенов России (на основе только что опубликованного нами единого рейтинга веб-разработчиков 2016) и задали им простой вопрос:

«На какие самые важные моменты/критерии должен обращать внимание крупный заказчик в процессе подбора потенциальных агентств-кандидатов (участников тендера) на комплексное продакшн-обслуживание всего своего парка интернет-проектов (проектирование, разработка, интеграция, развитие, поддержка и пр.)?»

И вот что они думают на этот счет:

Михаил Токовинин, со-основатель и управляющий партнер AIC+QSOFTЧитать полностью »

image
Металлическая пена

Композитные металлические пены (CMF) являются достаточно прочными, чтобы остановить бронебойную пулю и при ударе превратить ее в пыль. Учитывая, что эти пенопласты легче металлической обшивки, материал имеет очевидные преимущества для создания новых типов кузова и автомобильной брони — и это только начало его потенциального использования, сообщает phys.org.

Эксперимент был проведен исследователями из университета Северной Каролины под руководством Авсане Рабиэйи, профессора авиа- и ракетостроения, который потратил годы на разработку и исследование необычных свойств CMF. Сам материал композитный пенометалл, в котором средний слой — пенометалл (поглотитель энергии из полых металлических шариков на металлической же подложке), а крайний слой изготовлен из керамики. На видео ученые выстрелили бронебойной пулей калибра 7,62 мм в изделие из данного композита и результат впечатляет:
Читать полностью »

Представьте, что у вас есть legacy проект Asp.NET MVC версии 5, которому немало лет. В нем используется самописный ResourceProvider, который умеет доставать из базы ресурс и показывать его на UI. В зависимости от различных условий (например, от того, откуда пользователь пришел на сайт), ресурсы будут показаны разные. Теперь пришло время сделать так, чтобы все намертво захардкоженные строки в Data Annotation атрибутах, такие как:

[Display(Name = "Username")]
[Required(ErrorMessage = "Please enter the username")]
[StringLength(64, ErrorMessage = "Username cannot exceed 64 characters")]
public string Username{ get; set; }

тоже могли получать свои значения, используя ResourceProvider. Как это сделать, используя немного наследования и доступной в Asp.NET MVC кастомизации, я покажу под катом.
Читать полностью »

Согласно прогнозам издания Wall Street Journal, в 2017 году объем глобального рынка мобильных игр увеличится в 8 раз по сравнению с 2010 годом – с $3,77 млрд до $29,6 млрд. Сегодня доминирующую позицию на рынке занимает Азиатско-Тихоокеанский регион во главе с Китаем и Японией. На его долю приходится 48 % доходов всей индустрии, а также в 3 раза больше игроков, чем во втором по величине регионе – Северной Америке.
6 причин провала мобильной игры на международном рынке - 1
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js