Технология CrossMount, сервис Cloud SandBox и другие новости MediaTek на MWC 2015

MediaTek продолжает проводить на MWC 2015 презентации новых разработок и сервисов. В этом мини-дайджесте речь пойдет о четырёх новостях от тайваньского чипмейкера: двух инициативах MediaTek Labs, чипе MediaTek MT3188 с поддержкой всех стандартов беспроводной подзарядки, а также технологии объединения программных и аппаратных ресурсов разных устройств CrossMount.



Сразу несколько инфоповодов касаются техноинкубатора MediaTek Labs. В рамках инициативы анонсирован проект Partner Connect, он переводит во вполне конкретную форму прежние слова MediaTek о поддержке участников «лаборатории» партнёрами компании. Тайваньский чипмейкер окажет содействие разработчикам устройств в сфере носимой электроники и «интернета вещей» в сотрудничестве с необходимыми организациями среди своей сети партнёров. Совместная работа будет выражаться в советах по разработке, подборе модулей и помощи в серийном производстве моделей.

На сайте labs.mediatek.com уже открыта страница, посвящённая программе MediaTek Labs Partner Connect. Для участия в ней прежде всего необходимо предоставить информацию о своём проекте в разделе Device Solutions Catalog, после этого будет проведена проверка как технической, так и бизнес-составляющей. Если проект получит одобрение MediaTek, компания приступит к поиску подходящих партнёров. В планах – создание открытого каталога, в котором любой желающий сможет ознакомиться с перспективными изобретениями.



Параллельно MediaTek запустила облачную платформу Cloud SandBox, которая решает для участников MediaTek Labs следующие проблемы:

  • хранение и визуализация данных;
  • мониторинг данных с уведомлениями;
  • удалённое управление устройством;
  • обновление встроенного программного обеспечения «по воздуху» (FOTA);
  • поддержка RESTful API и подключения по TCP;
  • доступ через браузер или мобильное приложение.


Платформа предлагает бесплатный инструмент работы с данными на этапе создания прототипов устройств. В Cloud SandBox доступно управление из одного профиля множеством проектов.



Наряду с новостями о свежих чипсетах для смартфонов и планшетов, MediaTek отметилась представлением чипа с одним-единственным назначением – обеспечивать беспроводную зарядку. MediaTek MT3188 примечателен тем, что поддерживает все основные стандарты такого вида зарядки мобильных устройств. Использование новинки с кроссплатформенной конфигурацией возможно в различной мобильной технике – от носимой электроники до планшетов и смартфонов. Точная дата появления первых продуктов с MediaTek MT3188 неизвестна, но чип уже находится в массовом производстве и полностью готов к установке в гаджетах.

В MediaTek MT3188 обеспечена поддержка магнитно-резонансной беспроводной зарядки A4WP, а также индукционной зарядки Wireless Power Consortium (WPC) и Power Matters Alliance (PMA). Если говорить о конкретных версиях стандартов, то это A4WP BSS 1.2, Qi 1.1.2 и PMA 1.0. Уже пройдена сертификация в необходимых регулирующих органах, а точнее A4WP, WPC и PMA. По информации MediaTek, новинка не приведет к серьезному удорожанию устройств с ней на борту. Во всяком случае, если сравнивать с аппаратами с однорежимными резонансными решениями.



Наконец, последняя новость. MediaTek разработала технологию CrossMount, которая на базе протокола UPnP позволяет обмениваться аппаратными и программными ресурсами между телевизорами, планшетами и смартфонами. Прежде всего речь идет об устройствах под управлением Android и Linux. Связь поддерживается либо через беспроводную точку доступа, либо в одноранговом режиме Wi-Fi Direct. Помощь каких-либо облачных сервисов не требуется. В качестве примера MediaTek приводит ситуацию, когда микрофон смартфона будет использоваться для голосового поиска в телевизоре, а подключенные к телефону наушники – для передачи звука со Smart TV.

Для стандартизации этой технологии MediaTek основала организацию CrossMount Alliance с целью объединения заинтересованных партнёров. Первыми партнёрами станут Alcatel OneTouch, Chang-hong и Lenovo, а оценить инновацию можно будет в смартфонах и планшетах в 2015 году.

Наши предыдущие публикации:
» Планшетный чипсет на самой производительной архитектуре: представлен MediaTek MT8173
» 300 миллионов долларов для стартапов: открыт инвестиционный фонд MediaTek Ventures
» Российские разработчики «завоевывают» MediaTek Labs
» Восемь 64-битных ядер и LTE: представлен чипсет MediaTek MT6753
» Just5 Blaster: антикризисный смартфон с отнюдь не бюджетной начинкой
» MediaTek и Android Wear: «умные» часы становятся проще и доступнее
» Обзор планшета Alcatel One Touch Hero 8 D820x: 8 ядер, металл, LTE и французские корни
» Неделя с часами-телефоном: как я эксплуатировал Omate TrueSmart на чипсете MediaTek
» Смартфоны 2015 года: новые технологии по версии MediaTek

Спасибо за внимание!

ссылка на оригинал статьи http://geektimes.ru/post/246798/

Количественные CSS селекторы

Вам когда-нибудь хотелось прямо в CSS коде посчитать, в меню 4 элемента или 10? Для четырех задать им ширину по 25%, а если набралось десять — прижать их друг к другу и уменьшить отступы?
Как выяснилось, CSS умеет работать с разным количеством элементов, позволяя избавиться от головных болей и лишнего кода на js.





Динамичный контент


Респонсив дизайн обычно ассоцируется с одной переменной — пространством. Когда мы тестируем респонсив сетки, мы берем какой-то объем контента и смотрим, сколько места он займет, как это выглядит и куда он влазит, а куда нет. То есть, контент считается константой, а пространство — переменной.

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

Точно так же, как посетители сайта могут пользоваться множеством устройств с разными размерами экранов, ваши контент-менеджеры и редакторы могут добавлять или удалять контент. У них даже для этого целые CMS есть. Именно поэтому дизайны страниц в фотошопе потеряли свою актуальность — в них всегда фиксированная ширина экрана и всегда фиксированный контент.

В этой статье я опишу технику создания CSS, лишенного проблем с количеством (подсчётом) элементов. Достигается это за счёт специально оформленных селекторов. Я буду применять их в контесте решения классической проблемы: как разделить вёрстку элементов в горизонтальном меню сайта, когда в нём мало и много элементов. Например, как добиться того, что при 6 и более пунктах меню элементы имели стиль display: inline-block, а при меньшем количестве — display: table-cell.

Я не буду использовать шаблонизацию или js, мне даже не понадобятся прописывать классы у элементов меню. Техника использования только CSS селекторов соответствует принципу разделения интересов, согласно которому, контент (HTML) и отображение (CSS) имеют ясно обозначенные роли. Разметка — это работа CSS и, по возможности, одного только CSS.



Демо доступно на CodePen и еще будет упоминаться по ходу статьи.

Чтобы упростить понимание, я буду использовать картинки с кальмарами заместо HTML тегов. Зеленые кальмары будут за элементы, которые попадают под конкретный селектор, красные — за те, которые не попадают, а серые будут значить, что элемента не существует.




Счёт


Чтобы узнать количество элементов, их нужно посчитать.

Прим. пер
Капитан

CSS не даёт явного «подсчитывающего API», но мы можем решить эту проблему в обход, комбинируя селекторы нужным образом.


Считаем до одного


Селектор :only-child срабатывает на элементах, которых всегда одна штука. По сути, это позволяет нам «применить стили ко всем дочерним элементам конкретного элемента, если суммарно их ровно 1». Это единственный простой селектор, который можно описать как «подсчитывающий» (кроме, конечно, похожего на него :only-of-type).

В описанном ниже примере я использую :only-of-type, чтобы применить стили ко всем кнопкам, которые являются единственными чилдами-кнопками среди их соседей.

button {    font-size: 1.25em; }  button:only-of-type {   font-size: 2em; } 


Важно понимать, что очередность строк здесь имеет ключевое значение. Кроме этого, полезно видеть этот код с точки зрения селекта «меньше-чем-два»:



Аналогично, мы теперь можем сделать селект «больше-чем-один», используя отрицание.

/* "больше-чем-один" будут иметь уменьшенный размер шрифта */ button {   font-size: 2em; }  button:not(:only-of-type) {   font-size: 1.25em; } 





N элементов


Применять стили, основываясь на «больше-чем-один» и «меньше-чем-два» это ловкий трюк, но нам нужен более гибкий инструмент, позволяющий оперировать с любым числом. Мы хотим использовать селекты “больше или равно N” для любого N. Кроме этого, хочется иметь селект «ровно 745» или «суммарно ровно 6».

Для этого у нас есть селектор :nth-last-child(n), в который мы параметром передаем любое число. Он позволяет отсчитать столько-то элементов назад от конца списка. Например, :nth-last-child(6) выберет элемент, который является шестым с конца среди своих соседних элементов.

Всё становится интереснее, когда мы совмещаем :nth-last-child(6) и :first-child, в результате получая все элементы, которые являются шестыми с конца и при этом первыми с начала.

li:nth-last-child(6):first-child {   /* зеленый кальмар */ } 


Если такой элемент существует, это будет значить, что у нас ровно 6 элементов. Таким образом, я написал CSS код, который может сказать, сколько элементов я вижу перед собой.



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



Если вы не знакомы с этим комбинатором, то объясняю, ~ li в селекте li:nth-last-child(6):first-child ~ li значит «любой li, который идёт после li:nth-last-child(6):first-child». В нашем случае, элементы будут иметь зеленый цвет шрифта, если их ровно 6 штук.

li:nth-last-child(6):first-child,  li:nth-last-child(6):first-child ~ li {   color: green; } 



Больше или равно 6


Селектать фиксированное количество, будь то 6, 19 или 653 — не очень-то полезно, так как подобная необходимость очень редка. Это как в media queries — не очень удобно использовать фиксрованную ширину заместо min-width или max-width:

@media screen and (width: 500px) {   /* стили для ширины вьюпорта ровно в 500px */ } 


В навигационном меню я хочу переключать стили с границей, основанной на количестве элементов, например, поменять нужные стили, если у меня 6 и больше элементов (а не ровно шесть).

Вопрос в том, как сделать такой селектор? и это вопрос смещений.


Параметр n+6


Селектор :nth-child() может принимать параметром не только число, но и формулу “n + [число]”. Например, :nth-child(n+6) будет применён ко всем элементам, начиная с шестого.


Хоть этот селектор и является мощным инструментом сам по себе, он не позволяет оперировать с количеством. Он применится не тогда, когда у нас больше шести элементов, а просто к элементам, у которых номер больше пяти.

Чтобы обойти эту проблему, нам нужно создать такой селект, который выделит все элементы, кроме последних пяти. Используя обратный к :nth-child(n+6) селект :nth-last-child(n+6) мы сможем выделить все элементы «от с шестого с конца и до самого первого с начала».

li:nth-last-child(n+6) {   /* здесь стили */ } 


Такой селект отсекает последние пять элементов от набора любой длины, что означает, что если у вас меньше шести элементов, то в селект ничего и не попадет.



Если же в списке шесть или больше элементов, нам остаётся прибавить к селекту оставшиеся пять элементов. Это легко — если элементов больше шести, то срабатывает условие nth-last-child(n+6), и комбинируя его с "~" мы сможем поселектать все нужные нам элементы.



Такая вот короткая запись и является решением нашей проблемы:

li:nth-last-child(n+6), li:nth-last-child(n+6) ~ li {   /* здесь стили */ } 


Разумеется, тут может быть любое положительное целое число, даже 653,279.


Меньше или N


Как и в предыдущем примере с :only-of-type, селектор можно использовать в обе стороны, и как «больше или равно N» и как «меньше или равно N». Какой вариант вы будете использовать? Зависит от того, какую сетку вы будете считать основной.
В случае «Меньше или N» мы берем n с минусом и добавляем условие :first-child.

li:nth-last-child(-n+6):first-child, li:nth-last-child(-n+6):first-child ~ li {   /* здесь стили */ } 


В результате, использование "-" меняет направление селекта: заместо того, чтобы считать от начала и до шести, отсчёт будет идти от конца до шести. В обоих случаях, шестой элемент будет включён в селект.


nth-child против nth-of-type


Заметьте, что в предыдущих примерах я использовал :nth-child() и :nth-last-child(), а не :nth-of-type() с :nth-last-of-type(). Так как я селектал теги <li> и правильными потомками <ul> могут быть только они, :last-child() и :last-of-type() оказываются одинаково результативны.

Обе группы селектов :nth-child() и :nth-of-type() имеют свои преимущества, исходя из того, чего вы хотите добиться. Так как :nth-child() не привязан к конкретному тегу, описанную выше технику можно применять к смешанным дочерним элементам:

<div class="container">    <p>...</p>    <p>...</p>    <blockquote>...</blockquote>    <figure>...</figure>    <p>...</p>    <p>...</p>  </div> 



.container > :nth-last-child(n+3), .container > :nth-last-child(n+3) ~ * {   /* здесь стили */ } 


(Обратите внимание, чтобы не привязываться к тегам, я использую универсальный селектор. :last-child(n+3) ~ *. В этом случае, он обозначает «любой элемент любого тега, следующий за :last-child(n+3).»

С другой стороны, преимущество :nth-last-of-type() в том, что вы можете селектать элементы с одним тегом среди множества других соседних. Например, можно посчитать количество тегов <p>, несмотря на то, что они в одной куче с <div> и <blockquote>.

<div class="container">    <div>...</div>    <p>...</p>    <p>...</p>    <p>...</p>    <p>...</p>    <p>...</p>    <p>...</p>    <p>...</p>    <blockquote>...</blockquote>  </div> 



p:nth-last-of-type(n+6), p:nth-last-of-type(n+6) ~ p {   /* здесь стили */ } 



Поддержка браузерами



Все используемые в статье селекторы CSS2.1 и CSS3 поддерживаются в Internet Explorer 9 и выше, а так же все современные мобильные и десктопные браузеры.

Internet Explorer 8 неплохо поддерживает большинство селектов, но задуматься о полифилле на js не помешает. В качестве альтернативы, можно расставить специальные классы для старых версий IE и приписать их к своим селекторам. В случае с навигационным меню, код будет выглядеть примерно так:

nav li:nth-last-child(n+6), nav li:nth-last-child(n+6) ~ li,   .lt-ie9 nav li {   display: inline-block;   /* и т.д. */ } 



В реальном мире



Предположим, наше навигационное меню принадлежит сайту с CMS. В зависимости от того, кто его наполняет и использует, в меню будет разное количество элементов. Кто-то старается не усложнять и ему хватает «Home» и «About», а кто-то хочет запихать в меню всё, что есть у него на сайте.

Создавая стили, учитывающие разные сетки для разного количества элементов в меню, мы делаем вёрстку более стройной и подходящей для самых разных форматов — какой бы ни был контент, у нас всё учтено.



Поздравляю, теперь в вашем CSS арсенале есть умение оперировать количеством элементов.


Контент-независимый дизайн


Респонсив дизайн решает одну важную проблему: он позволяет комфортно расположить один и тот же контент на множестве разных устройств. Было бы неприемлемо видеть разный контент только потому, что у тебя экран неправильного размера. Так же и неприемлемо диктовать дизайнеру, под сколько пунктов меню должен быть заточен сайт. «Не рисуй так, у нас вся сетка поедет, если будет столько элементов».

Какую форму примет контент и сколько его будет в конкретный момент времени — никто не знает. И мы не можем всегда полагаться на скрипты или обрезание текста, это неправильно. Правильно — быть независимым от количества контента и создавать для этого нужные механизмы и инструменты. Количественные селекторы это просто одна из идей для этого.

Веб дизайн это всегда изменчивость, гибкость и неопределенность. В нём скорее не знаешь, чем знаешь. Он уникален тем, что представляет с собой вид визуального дизайна, который не определяет формы, а предвидит, какие формы может что-то принять. Для кого-то это неприемлемо и непонятно, но для вас и меня это вызов и удовольствие.

ссылка на оригинал статьи http://habrahabr.ru/post/252181/

Лучшее в мире привидение с мотором, или integration тестирование сложных клиент-серверных приложений

В конце 2014 года мы представили новый продукт в линейке офисных контролов – ASPxRichEdit. Нашей целью было создание мощного инструмента для работы с документами онлайн. Реализация требований, предъявляемых пользователями к текстовому редактору – поддержка стилей форматирования текста и параграфов, загрузка и сохранение документов популярных форматов без потери содержимого, настройка печати – все это подразумевает интенсивное взаимодействие между клиентом и сервером.

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




Используемый инструментарий


При разработке архитектуры любого серьезного проекта, независимо от выбранной платформы и используемых инструментов, есть очень важный момент – вся читаемость, портируемость и структурность кода не имеют никакого значения, если этот код нельзя покрыть тестами. Тесты должны писаться и запускаться легко и быстро, используя лишь минимум необходимого кода. В этом случае разработчики будут писать код и сразу же покрывать его тестами, или, руководствуясь мантрой «красный/зеленый/рефакторинг», писать тесты, а затем реализовывать новую функциональность. Но если для того, чтобы написать тесты, нужны сакральные знания, доступные только архитектору проекта – код тестами покрыт не будет.

Выбор инструментов для независимого тестирования серверного и клиентского кода не составил для нас сложности – мы остановились на использовании NUnit в качестве серверного тестового фреймворка и Jasmine для тестирование клиентского кода. В качестве раннера для клиентских тестов мы использовали ставший уже практически стандартом Chutzpah.


Модель клиент-серверного взаимодействия


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

В нашем случае клиентская модель во многом повторяет серверную – десктопная версия рич-эдитора развивается в DevExpress уже больше восьми лет, поэтому для серверной части было принято решение обойтись без изобретения велосипеда, сопровождающегося увлекательными прогулками по граблям, а наличие «зеркальной» модели на клиенте упрощает синхронизацию. На мой взгляд, в этом подходе нет какой-то особой специфики, наверняка такую же ситуацию можно наблюдать во многих приложениях, основанных на «старом» серверном коде. В этом случае для обеспечения взаимодействия необходим код, который способен конвертировать JSON на основе серверной модели и изменять эту модель на основе JSON, пришедшего с клиента, и код, решающий такие же задачи на клиенте. Проще всего такой код сделать автогенерируемым, с чем отлично справляется студийный механизм темплейтов T4 Text Templates.




Использование PhantomJS для интеграционных тестов


Таким образом, нам необходимо протестировать, как клиентские реквесты интерпретируются сервером, и как клиент реагирует на пришедший с сервера ответ. Серверная часть теста пишется с исользованием уже упомянутого NUnit, а для запуска клиентской части мы решили использовать PhantomJS. Последний представляет собой основанный на WebKit полноценный браузер (JavaScript, CSS, DOM, SVG, Canvas), без элементов UI, но достаточно быстрый и легкий. Такая связка позволяет нам протестировать инициализацию клиента на основе серверной модели, применение изменеий клиента на сервере, а изменений серверной модели – на клиенте, а также возможные коллизии при синхронизации состояний.

В общем случае, тест представляет собой достаточно простой цикл. Сначала создается и настраивается серверная модель, затем рабочая сессия формирует стартовый JSON для инициализации клиента (в случае реальных документов модель разбивается на части и при первой загрузке передается только первый фрагмент, а остальная часть догружается асинхронно – пока сервер будет возвращать последующие части, клиент уже займется просчетом имеющейся части; в тестах же документы небольшие, поэтому инициализационный JSON содержит полную модель). Далее серверный код запускает PhantomJS с нашими библиотеками и стартовым скриптом. Скрипт создает экземпляр клиентского контрола и инициализирует его сфомированным на сервере JSON-объектом. Дальнейшая логика варьируется в зависимости от назначения теста.



Если мы тестируем инициализацию модели, то полученная модель сразу сериализуется обратно в JSON и выводится в консоль, а серверный код анализирует содержимое консоли и проверяет правильность создания клиентской модели. Если же мы тестируем создание JSON-объектов на клиенте и их интерпретацию на сервере, то в этом случае на клиенте выполняются необходимые операции, а все реквесты вместо отправки на сервер снова пишутся в консоль. Далее серверный код считывает содержимое буфера, изменяет модель и проверяет, насколько корректно обработались входящие команды.

Описанный алгоритм можно проиллюстрировать конкретным примером интеграционного теста:

[Test] public void TestParagraphProperties() {     ChangeDocumentModel(); // предварительная настройка серверной модели     string[] clientResults = RunClientSide(         GetClientModelStateAction(), // записать Model в Output         ExecuteClientCommandAction() // выполнить клиентскую команду, записать реквест в Output     );     // clientResults[0] – JSON с клиентским состоянием модели (инициализация)     // clientResults[1] – JSON с реквестом на изменение серверной модели     AssertClientModelState(clientResults[0]);     ApplyClientRequestToServerModel(clientResults[1]);     AssertServerModelState(DocumentModel); } 


Как видите, код получившегося теста достаточно прост. После настройки серверной модели, мы запускаем PhantomJS. При этом функция RunClientSide() принимает массив действий, которые необходимо выполнить на клиенте (например, выполнение команд, изменяющих модель, получение сериализованного состояния клиентской модели). Результат выполнения каждого действия будет сохраняться в выходной массив, например:

function getClientModelState() {    var model = control.getModel();    buffer.push(JSON.stringify(model)); } 


Далее получившийся массив сериализуется в JSON и записывается в console.log (т.е. output приложения):

function tearDownTest() {   console.log(JSON.stringify(buffer)); } 


Код реализации раннера тестов:

string StartPhantomJSNoDebug(string phantomPath, string bootFile, out int exitCode) {             StringBuilder outputSb = new StringBuilder();             StringBuilder errorsSb = new StringBuilder();             exitCode = -1;             using (var p = new Process()) {                 var arguments = Path.Combine(TestDirectory, bootFile);                 //...                 //set up process properties                 p.OutputDataReceived += (s, e) => outputSb.AppendLine(e.Data);                 p.ErrorDataReceived += (s, e) => errorsSb.AppendLine(e.Data);                 p.Start();                 p.BeginOutputReadLine();                 p.BeginErrorReadLine();                 if (!p.WaitForExit(15000)) {                     p.Kill();                     p.WaitForExit();                     Assert.Fail("The PhantomJS process was killed after timeout. Output: \r\n" + outputSb.ToString());                 }                 else                     p.WaitForExit();                 exitCode = p.ExitCode;             }             if (!string.IsNullOrWhiteSpace(errorsSb.ToString()))                 Assert.Fail("PhantomJS errors output: \r\n" + errorsSb.ToString());                         return outputSb.ToString();         } 


Если же потребуется посмотреть под отладчиком, что происходит в тестах, то раннер будет таким:

string StartPhantomJSWithDebug(string phantomPath, string bootFile, out int exitCode) {             StringBuilder outputSb = new StringBuilder();             StringBuilder errorsSb = new StringBuilder();             exitCode = -1;             using (var p = new Process()) {                 var arguments = Path.Combine(TestDirectory, bootFile);                 arguments = "--remote-debugger-port=9001 " + arguments;                 //...                 //set up process properties                 p.Start();                 Thread.Sleep(500);                 try {                    Process.Start(@"chrome.exe", @"http://localhost:9001/webkit/inspector/inspector.html?page=1");                 }                 catch { }                 p.WaitForExit();             }             if (!string.IsNullOrWhiteSpace(errorsSb.ToString()))                 Assert.Fail("PhantomJS errors output: \r\n" + errorsSb.ToString());                         return outputSb.ToString();         } 


Затем полученный JSON обрабатывается на сервере, после чего выполняется собственно тестирование – проверка состояния клиентской модели, применение JSON, полученного в результате выполнения клиентского кода и проверка состояния серверной модели.

Таким образом, с помощью PhantomJS нам удалось написать интеграционные тесты, позволяющие проверять стартовую инициализацию и последующую синхронизацию сложного клиент-серверного приложения.

ссылка на оригинал статьи http://habrahabr.ru/post/252197/

Лазерная установка Lockheed Martin может останавливать крупные автомобили на расстоянии в милю



В США сейчас активно идет разработка лазерного оружия — как наземных установок, так и установок для морских военных кораблей или даже самолетов. На днях компания Lockheed Martin продемонстрировала работу наземной лазерной установки, способной уничтожать двигатель грузовика на расстоянии в одну милю (1,6 км).

Для текста небольшой грузовик был закреплен на специальной платформе, двигатель грузовика при этом работал. После того, как система засекла автомобиль, прошло всего несколько секунд, и мощный луч лазера (30 кВт) поразил двигатель автомобиля. При этом мотор работать перестал.

По словам представителей компании, сейчас Lockheed Martin достаточно активно инвестирует средства в разработку лазеров, речь идет об оптоволоконной разновидности таких установок. Текущая установка представляет собой прототип оптоволоконного лазерного оружия, где объединено несколько лазерных модулей для формирования мощного луча. При этом мощность луча в три раза выше, чем у прочих лазерных установок (в основном, речь идет о 10 кВт).



Система получила название ATHENA, она базируется на защитной лазерной системе ADAM, с обновленной лазерной установкой большой мощности. Сама система ADAM — защитная, она оснащена 10 кВт лазерной установкой, которая служит для поражения ракет и БПЛА.

Лазерная установка мощностью в 30 кВт произведена на предприятии Lockheed Martin, в Саннивейл, Калифорния.

Установки типа ATHENA могут быть эффективными в качестве защитных объектов на военных базах.

ссылка на оригинал статьи http://geektimes.ru/post/246794/

Портативная аудиосистема MOBISound

Начав работу в блоге компании Даджет с обзора вибродинамика PartyFon MAX, который к моей радости был вами встречен весьма тепло, я решил продолжить работу именно с акустическими системами компании.
И сегодня я вас познакомлю с еще одной их представительницей — портативной аудиосистемой MOBISound. Она достаточно традиционна в техническом плане, но в то же время обладает весьма необычным форм-фактором.
Дисклэймер в отношении зеленого ковра, который присутствует на КДПВ, и во всех остальных фотографиях обзора, я, с вашего позволения размещу до ката.
Disclaimer: мне показалось, что в один из первых дней такой долгожданной весны, зеленый ковер фон должен создать правильный настрой :)
Disclaimer2: да, это просто Bluetooth аудио-система (пусть, качественная, пусть, в необычном форм-факторе). Не ругайтесь сильно, а если вам такие штуки интересны,



Let the Beat Go On



MOBISound упакован в достаточно крупную, презентабельную и достаточно увесистую коробку, которая производит впечатление дорогого и качественного устройства.



Пластиковый блистер содержит упакованную в полиэтиленовый пакет аудиосистему, а так же кабель USB — microUSB, 3.5mm jack-jack и инструкцию.



MOBISound в сложенном виде весьма компактен и удобен в транспортировке:



В разложенном виде:



Обратите внимание, что механизм складывания и изменения размера выполнен из металла, что весьма и весьма радует. Устройство однозначно прослужит долго, и сразу производит впечатление качественного продукта.



Разъемы и органы управления представлены сдвигающимся выключателем, разъемом microUSB для зарядки и линейным входом.



При соединении по Bluetooth, устройство можно использовать в качестве hands-free, благодаря наличию встроенного микрофона. На этом же снимке вы можете видеть светодиодный индикатор показывающий режим работы устройства.



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



Внутренние пазы позволяют закрепить устройство на планшете. Помимо воспроизведения звука, акустическая система будет выполнять роль подставки. Причем, благодаря своему немалому весу, и сильной «пружинистости» планшет будет стоять весьма надежно.



Как в горизонтальной:



Так и вертикальной ориентации:



Конечно, особенно хорошо белая отделка аудиосистемы подходит к белому iPad, но не многим хуже она подойдет к любому 7-11" планшету, (особенно не разбитому :), например старенькому Motorola Xoom.



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

Устройство снабжено функцией NFC, что позволяет произвести сопряжение устройства, просто поднеся колонку к планшету или смартфону. К сожалению, у меня под рукой не оказалось устройства с поддержкой этой технологии, но огорчаться этому не стоит.
Сопряжение обычным образом проходит в одно касание. Достаточно включить питание на MOBISound, зайти в поиск устройств Bluetooth на планшете и подключиться к устройству с незамысловатым названием «Bluetooth», вводить пароль не требуется.

Замечу, что используется четвертая версия Bluetooth протокола, что позволяет расчитывать на весьма низкую нагрузку для батареи источника сигнала.



Качество звука и уровень громкости находятся на достаточно высоком уровне. Производитель заявляет, что аудио-система снабжена аж шестью динамиками. Однако нужно отметить недостаток низких частот.
Заявленная мощность в 6 Вт может показаться несколько завышенной. Мне кажется реально она около 4 Вт, однако это сугубо субъективная оценка, не подтвержденная инструментальными измерениями.

При использовании в качестве hands-free нареканий нет.

Конечно нужно отметить, что устройство выполняет кроме всего прочего функцию весьма стильной подставки под планшет.

Есть еще один вариант использование устройства, как супер-открытые наушники, которые располагаются на шее:

image

На шее MOBISound дает очень хороший объемный звук, но использование устройства таким образом сопряжено с некотороми этическими сложностями.
Нужно уважать чужое пространство, и не лезть в него со своим плей-листом.

Подобная концепция портативной аудио-системы впервые была представлена компанией Sony в начале 2000-х годов. (к сожалению я затрудняюсь назвать конкретную модель). Широкого распространения она не получила. Рискну предположить по озвученной выше причине.

Также имейте в виду, что устройство может быстро оттянуть шею, оно весьма тяжелое.

Аккумулятора MOBISound должно хватить на 5-6 часов автономной работы, что достаточно затруднительно проверить — выкроить 5-6 часов, в течении которых устройство будет «рубить» на полную, мне затруднительно. Полностью устройство заряжается за 3-4 часа.

Цена на данное устройство в компании Даджет на данный момент составляет 4950 рублей, что без маркетинговых выкрутасов означает 5 тысяч рублей. Это не мало, и на мой взгляд, даже можно сказать много. На Новый 2015 Год я за эту сумму купил себе вполне приличный сабвуфер Yamaha. Однако это было до нового года….

В заключение о хорошем, комания Даджет предоставляет на тестирование устройства на условиях "обзор за устройство". Доставшийся мне MOBISound совсем скоро станет подарком для дорогой мне девушки. Так уж получилось, что во время тестирования я его рассекретил, но зато уже сейчас я знаю что MOBISoud ей по нраву :)

ссылка на оригинал статьи http://geektimes.ru/post/246636/