-Поиск по дневнику

Поиск сообщений в rss_rss_hh_new

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2011
Записей:
Комментариев:
Написано: 51

Habrahabr/New








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://habrahabr.ru/rss/new/.
Данный дневник сформирован из открытого RSS-источника по адресу http://feeds.feedburner.com/xtmb/hh-new-full, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

[Из песочницы] Favicon сегодня: форматы, поддержка, автоматизация

Пятница, 09 Июня 2017 г. 12:03 + в цитатник
На сегодняшний день favicon — это не просто значок 16x16 во вкладке браузера. Он является важной составляющей интерфейса, а также играет немаловажную роль в прогрессивных веб-приложениях. Существует немало способов подключения и использования favicon, о которых я расскажу в данной статье.




В каком формате должен быть фавикон?


Раньше основным форматом фавикона был формат ICO. Его главная особенность заключалась в том, что файл такого формата мог хранить в себе несколько вариантов размеров иконки. Сейчас формат ICO считается устаревшим, на смену ему пришёл формат PNG с новыми возможностями по взаимодействию с иконкой.

Помимо PNG, поддерживается формат SVG. Но у него, к сожалению, невысокая поддержка на данный момент. Однако этот формат идеально подходит для фавиконов, его использование намного бы упростило нам жизнь. Будем надеяться, что ситуация скоро изменится.

Фавикон может быть создан ещё в нескольких форматах, например, в формате GIF или JPEG, но проблемы с поддержкой делают их использование нецелесообразным.

HTML5 и атрибут sizes


Атрибут sizes пришел в нашу жизнь с HTML5. Благодаря ему браузер или устройство может выбрать необходимый размер фавикона. Атрибут sizes указывается в формате [ширина х высота] без указания единиц. Если в файле хранится сразу несколько иконок, можно задавать их размеры через пробел. Ключевое слово any указывает, что иконка может масштабироваться до любого размера, например, если она хранится в векторном формате SVG.




Пора ли отправлять ICO на свалку?


Как я уже сказала, формат ICO сегодня уже можно считать устаревшим, но значит ли это, что от него нужно срочно избавиться? Ответ, как всегда, неоднозначный. Есть случаи, когда формат ICO ещё может сослужить вам хорошую службу. Приведу несколько примеров оправданного использования фавикона в формате ICO в разных операционных системах и поговорим об альтернативах.

Windows


Начнём, пожалуй, с Windows.

До 11 версии формат PNG в IE не поддерживался, поэтому для IE10 и более младших версий по-прежнему необходимо использовать формат ICO. А вот с IE11 смело можно переходить на PNG. Для устаревших браузеров Microsoft рекомендует размеры 16х16, 32х32 и 48х48 для фавиконов формата ICO.

Начиная с IE9, сайты получили возможность быть закрепленными в меню и панели задач, а с приходом IE11 и Windows 8.1 появилась возможность создавать закрепленные сайты в виде живых плиток. По умолчанию изображением на плитке будет фавикон, но только не для больших и широких плиток, для которых нужно задавать изображение специального размера. Сделать это можно следующими способами: добавив теги метаданных в разметку веб-страницы или файл конфигурации браузера.

Сначала давайте рассмотрим первый способ.

Определение фавикона в устройствах Windows с помощью метаданных в :



Если мы хотим указать иконки для больших плиток, это можно сделать с помощью следующих метаданных:






Можно указать цвет фона плитки:



Можно указать имя закрепленного сайта:



Если нет этих метаданных, то в качестве имени используется значение в b>; страницы.

Можно указать текст дополнительной подсказки, появляющейся при наведении указателя мыши на ярлык закрепленного сайта в меню “Пуск” Windows или на рабочем столе:



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



И тогда независимо от того, какую страницу пользователь перетащил на панель задач, закрепленный сайт будет открывать указанный адрес.

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

Начиная с IE11 Windows 8.1 и Edge Windows 10 можно закрепить веб-сайт с помощью файла конфигурации браузера. Это удобно: создать один файл browserconfig.xml и поддерживать, и подключать его на каждой странице, если у нас есть несколько страниц, которые будут использовать одни и те же плитки.

Вызов файла в :



browserconfig.xml



  
    
      
      
      
      
      #000000
    
    
       
       
       
       30
       1
   
  


square70x70logo, square150x150logo, wide310x150logo, square310x310logo — элементы, внутри которых объявляются изображения для различных размеров плитки.

Microsoft рекомендует брать больший размер изображений в целях поддержки экранов с высокой плотностью пикселей. Желательно, чтобы размер исходного изображения примерно в 1.8 раза превышал размер целевой плитки, чтобы его можно было увеличивать и уменьшать. Например, для 70х70 рекомендуемый размер 128х128, а для широкой плитки 310x150 исходное изображение имеет размер 558x270.

Если плитка сайта статическая, то вышеперечисленных элементов будет достаточно. Если же предполагается динамическая плитка, то необходимо добавить элемент . Этот элемент может включать в себя до 5 элементов , содержащих в атрибуте src пути к соответствующим xml-файлам уведомлений. Также внутри этого тега содержится элемент , значение которого указывает в минутах интервал между обращениями к сайту за обновлением уведомлений, то есть живая плитка будет обновляться каждые, например, 30 минут. Да, значение не произвольное, а только 30, 60, 360, 720 или 1440.

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

Новый интерфейс Metro предлагает несколько новых принципов дизайна, например, «белые силуэты», используемые большинством предустановленных программ.

С помощью платформы уведомлений Windows сайт может за один раз показывать на плитке до пяти текстовых сообщений или сообщений с изображениями, которые циклически сменяют друг друга. Не будем подробно останавливаться на этих xml-файлах уведомлений. Существует множество шаблонов живых плиток, вот один из них:

  
    
      Text Field 1
    
  


То, что написано в кавычках в атрибуте template — название шаблона. Этот шаблон содержит изображение и небольшой текст. Используется для больших изображений и средних названий. На самом деле, подобных шаблонов очень много: и просто c текстом, и просто с изображением, и с несколькими изображениями, и с несколькими строками текста, и так далее. Большинство шаблонов изображения или текста размещают текст на той же плитке, что и изображение. Но шаблоны с Peek в названии выполняют переключение между изображением и текстом на плитке.

Подробнее о шаблонах можно узнать на официальном сайте.

Mac OS


В Mac OS особо не разгуляешься, к сожалению. Если сохранить сайт на рабочий стол в Mac OS, то значок будет отображаться как скриншот страницы с html кодом. Просто так сайт приложением в Mac OS не сделать, но и не будем.

Safari — вот где нам пригодиться формат SVG. Чтобы использовать SVG, необходимо указать атрибут rel со значением mask-icon, все элементы SVG должны быть черного цвета. Но не стоит пугаться, цвет можно поменять атрибутом color. Эта SVG-иконка нужна для закрепления вкладки в Safari. А цвет при наведении будет таким, какой мы указали в атрибуте color.



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

iOS


Safari в iOS вообще не отображает favicon во вкладках, но использует их для закладок, так же как и в Mac OS. В iOS пользователи могут добавить сайт на рабочий стол, и оно будет выглядеть как нативное приложение. Эти ссылки отображаются в виде значков и называются Web Clips.

Для этого нужно добавить rel=«apple-touch-icon» и указать размер с помощью атрибута sizes. Каждое устройство нуждается в своем размере иконки. Так как iOS устройств довольно много, и каждое устройство имеет свое разрешение экрана, спецификация, разработанная Apple, поддерживает возможность указать несколько тегов с иконками разных размеров.











Если значок не соответствует рекомендуемому размеру устройства, используется самая близкая по размеру иконка большего размера, нежели рекомендуемый. Когда пользователь заходит на ваш сайт с iOS устройства, запрашиваются файл apple-touch-icon-precomposed.png, который должен быть оформлен в стиле iOS: закругленные углы, блики, и тень. Если файла с таким названием в корне проекта или rel=«apple-touch-icon-precomposed» нет, будет запрошен apple-touch-icon.png, которому разрешено быть таким, какой он есть, а все эффекты будут наложены самим iOS. Соответственно, нужна иконка под каждый размер. А вот если нет и этих файлов, то на рабочем столе iPhone или iPad будет отображаться не красивая иконка, а миниатюра страницы — ее скриншот.

Ходят слухи что Blackberry будет тоже использовать rel=«apple-touch-icon-precomposed», но возможности проверить, к сожалению, не было.

Подробнее прочитать про актуальные размеры для устройств iOS можно на официальном сайте.

Некоторые могут возразить, что все 9 изображений не очень и нужны. Однако, по крайней мере, основная Apple Touch Icon должна быть 180х180. Остальные устройства могут уменьшить изображение. Но некоторые другие платформы тоже используют Apple Touch Icon, поэтому лучше их объявить.

Как бы странно это не звучало, устройства под iOS не единственные, которые ищут Apple Touch Icon. Поскольку они популярнее и встречаются чаще других PNG иконок высоких разрешений, некоторые браузеры, вроде Android Chrome, используют их. Таким образом, лучше их объявлять, это позволит посетителю с совместимым устройством или браузером использовать одну из этих иконок.

В iOS можно указать заголовок веб-приложения. По умолчанию используется значение тега

https://habrahabr.ru/post/330584/


Метки:  

В 2017 году зафиксировано пятикратное увеличение DDoS-атак

Пятница, 09 Июня 2017 г. 11:39 + в цитатник
Число DDoS-атак в первом квартале 2017 года возросло в пять раз по сравнению с аналогичным периодом прошлого года. Такие данные приведены в опубликованном 6 июня докладе Nexusguard Inc.

/ фото Max Pixel CC

Утвердившиеся тенденции атак последних месяцев


Александр Халимоненко и Олег Купреев из Securelist отметили, что в первом квартале 2017 года было зафиксировано увеличение числа DDoS-атак, по сравнению с первым кварталом 2016 года. При этом, как рассказали Nexusguard в прошлом августе, первое полугодие 2016-го стало периодом роста как количества, так и мощности атак в мире — на 83%.

Согласно последним отчетам, развитие киберугроз сохраняет установленный в 2016 году вектор и продолжает рост с высочайшими темпами. В отчете «Лаборатории Касперского» DDoS Intelligence Q4 2016 был обозначен новый рекорд продолжительности атаки (292 часа) и рекорд по количеству атак за один день (1915 случаев 5 ноября 2016 года).

Согласно Nexusguard, главной тенденцией, унаследованной с конца 2016 года, стал тот факт, что крупномасштабные атаки превратились в обыденную проблему для компаний. При этом мощность все большего числа кибернападений превышает 200 Гбит/с. Увеличилась и их сложность. Например, 57% DDoS-атак, с которыми удалось справиться лидеру в области доменных имен Verisign в первом квартале 2017 года, были комбинированными.

Основываясь на данных «Лаборатории Касперского», Securelist также отмечает рост популярности сложных атак (на уровне приложений, HTTPS). В качестве примера приводится комбинированная атака (SYN + TCP Connect + HTTP Flood + UDP Flood) на Московскую фондовую биржу.

Зафиксирован рост и некрупных атак, которые отчасти меркнут на фоне глобальных угроз. Эшли Стивенсон (Ashley Stephenson), генеральный директор Corero — фирмы-производителя устройств серверной защиты — по этому поводу сказал: «Короткие DDoS-атаки могут показаться безобидными, поскольку они не вызывают длительных периодов простоя. Но ИТ-команды, которые предпочитают их игнорировать, фактически распахивают двери для вредоносных атак или вирусов-шифровальщиков, кражи данных или других более серьезных вторжений. Подобно мифологическому троянскому коню, эти атаки обманывают команды безопасности, маскируясь под безобидного наблюдателя».

Растущая уязвимость интернета вещей


В своем отчете Nexusguard прямо указывает на проблему незащищенных IoT-сетей, актуальность которой возросла в течение последних нескольких лет. Тенденция касается множества устройств, задействованных в потребительских и промышленных целях, подключаемых к сети без соблюдения должных мер безопасности.

В последние годы хакеры начали использовать большее количество уязвимых устройств для создания масштабных ботнетов из тысяч и миллионов зараженных девайсов: маршрутизаторов, Smart-TV и так далее. Уязвимость IoT-устройств подтверждается и в отчете «Лаборатории Касперского». Одним из примеров паразитирования называют ботнет Mirai. Подход, используемый его создателями, послужил основой для множества других бот-сетей.

Кирилл Илганаев, руководитель отдела защиты от DDoS-атак в «Лаборатории Касперского», заявил: «Учитывая эффективность IoT-ботнетов, а также растущее число слабо защищенных IoT-устройств, мы можем обоснованно прогнозировать увеличение числа таких атак, а также их мощности и сложности».

Согласно опросу A10 Networks, в этом году тип атак DDoS of Things достиг критической массы — в каждом случае нападения задействованы сотни тысяч устройств, подключенных к интернету. Борьба с этим явлением только начинает разворачиваться — хотя поставщики IoT-оборудования крайне медленно реагируют на угрозы, определенные успехи в борьбе с DDoS of Things уже были достигнуты. Журналист в сфере информационной безопасности Брайан Кребс (Brian Krebs) сумел вычислить автора вредоносного ПО IoT Mirai, а в Великобритании был арестован исполнитель атаки на Deutsche Telekom, построивший ботнет на базе маршрутизаторов.

Счётная палата США в мае выпустила отчет об оценке IoT-технологий, во многом сосредоточенный на уязвимости систем перед кибератаками. Среди основных факторов, сопутствующих распространению угроз, названы отсутствие контроля безопасности из-за невозможности спрогнозировать потенциальные проблемы, а также применение идентичного ПО в различных устройствах, что увеличивает эффективность эксплуатации технических уязвимостей. В связи с этим управление рекомендует разрабатывать IoT-устройства с обязательной возможностью обновления, причем в доступной форме, а не посредством сложного для пользователя процесса.

При этом Тим Мерфи (Tim Murphy) из Arbor Networks, занимающейся обнаружением и предотвращением DDoS-атак, призывает компании не полагаться лишь на брандмауэры и IPS, так как часто они сами становятся объектами DDoS-атак, а выстроить многоуровневую защиту в ответ на диверсификацию киберугроз.

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

Недостаток кадров


На фоне роста киберугроз Cybersecurity Ventures Inc. выявила еще одну косвенную причину увеличения атак — нехватку кадров в области киберзащиты. Прогнозируется, что к 2021 году в мире возникнет дефицит в 3,5 миллиона специалистов. А по оценкам Cisco, для борьбы с актуальными угрозами уже сегодня не хватает порядка миллиона экспертов в сфере информационной безопасности. Исполнительный директор компании RedSeal, предоставляющей аналитическую платформу, Рэй Ротрок (Ray Rothrock) считает, что эта информация — «настоящий сигнал» для миллионов компаний по всему миру. Предполагается, что ежегодный ущерб от кибератак к 2021 году достигнет $6 триллионов.

Роберт Херьявец (Robert Herjavec), основатель и исполнительный директор Herjavec Group, призывает получать образование в области кибербезопасности. По его мнению, в этой сфере наблюдается нулевой процент безработицы. Согласно исследованию Центра кибербезопасности и образования, около 40% европейских компаний собираются увеличить численность своего штата, борющегося с киберугрозами, не менее чем на 15% в следующем году.

«Хотя сфера кибербезопасности по-прежнему относительно молода, спрос продолжает расти и будет лишь нарастать в ближайшие годы», — заключает Христос Димитриадис (Christos Dimitriadis), председатель правления ISACA и директор группы по информационной безопасности INTRALOT.

P.S. Несколько материалов по теме из нашего блога:

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330340/


Метки:  

Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Пятница, 09 Июня 2017 г. 11:02 + в цитатник

Как получить оффер в Badoo в день собеседования. Часть вторая, для PHP-разработчика

Пятница, 09 Июня 2017 г. 10:49 + в цитатник


Привет, Хабр! Меня зовут Павел Мурзаков, я – PHP-тимлид в Badoo, и сегодня я расскажу вам о новой возможности получить предложение по работе в Лондоне за один день. Как вы, возможно, знаете, недавно в Москве прошло рекрутинговое мероприятие Badoo по поиску мобильных разработчиков. Оно оказалось очень успешным – мы предложили работу в Лондоне восьми ребятам и надеемся скоро увидеть их в составе нашей мобильной команды.


И, чтобы не отставать от наших iOS- и Android-команд (ведь их теперь на восемь человек больше!), мы решили ответить достойно и провести аналогичное мероприятие, на котором рассчитываем найти server-side-коллег нашим новым мобильным разработчикам!


Итак, предлагаю PHP-разработчикам потратить полтора часа своего времени и пройти тест, по результатам которого мы выберем несколько десятков человек и пригласим их в наш московский офис для личного интервью (правила не меняются: общение только с командой, технарями, никаких рекрутеров). А по итогам собеседования (в тот же день) мы, возможно, предложим вам работать с нами в Лондоне. Любые организационные вопросы можете задавать в комментариях. И в личных сообщениях, конечно, мне или Божене yeah_boss.


Тест вы найдете здесь.


Про команду и задачи


Типичная задача разработчика Server Team – реализация новой функциональности. Чтобы ввести в курс дела – кратко распишу процесс.


Новые фичи придумываются ребятами из Product Team и описываются в документе, который мы называем PRD (PRoduct Documentation). Там находится то, что должен видеть пользователь, use-case’ы, дизайны и прочее. Далее этим описанием занимается команда, которую мы называем MAPI. Ребята переводят продуктовое, человеческое описание из PRD в термины протокола: например, какие message должны быть изменены, какие поля должны быть добавлены. Кроме изменений proto-файла, пишется техническая документация к фиче: откуда и какую информацию берут клиент и сервер, как и на что реагируют тот и другой.


В результате к разработчику Server Team новая задача приходит в виде совокупности:


  • человеческое описание фичи (PRD);
  • diff для proto-файла;
  • техническое описание изменений протокола (MAPI).

Подробнее про этот процесс и роль Server Team рассказывал руководитель нашего отдела – Николай Крапивный на CodeFest.


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


  • повышение производительности;
  • улучшение инструментов;
  • повышение стабильности/отказоустойчивости.

Наш стек – всем известные PHP, MySQL и Memcached. В повседневной работе разработчику так или иначе приходится использовать их. Мы стараемся подходить к выбору технологий прагматично, поэтому, если что-то можно сделать лучше, используя другие инструменты, то мы не боимся их использовать. Так у нас есть, например, Tarantool, Sphinx, Cassandra, Darner. Когда-то даже была MongoDB, но не прижилась.


Когда этих инструментов не хватает и ничего готового нет, мы пишем что-то своё. Так, например, я недавно переписал одну из частей на Go (мое выступление на эту тему – здесь).


В нашей команде сейчас 30 человек, и она распределена между двумя офисами: Москва и Лондон. Все эти 30 человек поделены еще на 4 команды. Разделение – по функциональности. И все мы занимаемся развитием и поддержкой серверной части мобильных и web-приложений Badoo.


Про тест


Несколько слов о тесте, который мы предлагаем пройти для того, чтобы попасть на интервью к нам в офис. Всего в тесте 6 заданий: два из них подразумевают написание PHP-кода, еще одно — SQL-запрос, а оставшиеся три – рассуждение, как действовать в той или иной практической ситуации.


Мы используем платформу hackerrank.com. Перед началом теста необходимо заполнить форму регистрации, где, кроме указания имени и e-mail нужно будет дать ссылку на ваше резюме и ввести контактный номер телефона для связи с вами в случае успешного прохождения теста. Если вы первый раз на hackerrank.com, рекомендуем пройти sample test, прежде чем приступать к основной части (ссылку на него вы найдете над формой регистрации теста).


Про переезд


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


Сомневаетесь в уровне своего английского? Нет проблем! Компания поможет его подтянуть. Кроме того, сотрудникам предоставляется временное жильё на период поиска постоянного. Словом, делается всё возможное, чтобы процесс стал как можно более комфортным. Подробнее про переезд можно прочитать в статье Антона Русакова, одного из ребят нашей команды. Отмечу также, что наша PHP-команда в Лондоне полностью русскоязычная, так что адаптация для вас пройдет проще.


В общем, проходите онлайн-тест и мы ждем лучших 1 июля в московском офисе Badoo на интервью!

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330558/


Метки:  

10 инструментов для стартаперов и стартапов

Пятница, 09 Июня 2017 г. 10:23 + в цитатник
В прошлом мы уже подсказывали начинающим владельцам бизнеса стратегии и платформы для первых этапов продвижения, а также приводили список полезных ресурсов. Добавим к этому небольшой набор инструментов, которые помогут в процессе планирования, лидогенерации и проектирования сайта продукта.



Startup Graveyard

Учимся на горьком, но полезном опыте предшественников. Strartup Graveyard — это каталог стартапов, которые потерпели неудачу и вынуждены были выйти из игры. Цель проекта, как уверяют авторы, вовсе не в том, чтобы клеймить людей за ошибки — напротив, объективный безоценочный анализ факторов, которые привели ту или иную компанию к печальному исходу, позволит «снять стигму с неудачи» и выстроить более открытое, вдумчивое сообщество. История болезни излагается в лаконичной, ясной форме: название, ниша, годы жизни, инвесторы и бюджет, конкуренты, основные причины краха. Посетителям также предлагается внести свою лепту — произвести вскрытие такого рода над известным им проектом (возможно, даже своим собственным) и отправить результаты администрации.

Outgrow

Предлагаете пользователям что-то выгодное? Дайте им убедиться в этом самим. Outgrow предлагает готовые решения, чтобы добавить на сайт онлайн-калькулятор, с помощью которого можно не отходя от кассы произвести необходимые расчеты (примерная стоимость услуги, экономия средств). Система позволяет выстраивать сложные формулы, вычисляющие сразу несколько значений, и сопровождать расчеты наглядным графическим представлением. Доступны и другие другие виды интерактивных окошек — например, анкеты и опросники. По словам создателей, окошки проектировались с прицелом на повышение конверсии и простоту кастомизации — вы можете выбрать цвета и добавить логотип, чтобы придать им более «фирменный» вид.

Callio

Для молодых компаний любой звонок, хоть от потенциальных партнеров и инвесторов, хоть от немногочисленных клиентов — на вес золота. Netguru создали решение на базе интеграции сервисов Twilio и Slack, который практически не оставляет вам шансов не взять трубку. Оповещения о входящем звонке отправляются прямиком в указанный канал Slack, ответить на них может любой участник прямо из веб-бразуера. Все разговоры автоматически записываются, так что возиться с фиксацией ключевых моментов на бумаге или в заметках не придется. Когда разговор закончен, в канале появляется оповещение от сервиса о том, что линия свободна. Создатели подчеркивают, что сет инструментов Twilio + Slack + Callio отлично заменяет городской телефон. Код программы находится в открытом доступе.



Vervoe

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

Prelaunch Page

Даже если ваш стартап еще находится на стадии смутной идеи и вороха мокапов, пособирать аудиторию и послушать, что думают люди, никогда не лишнее. Prelaunch Page — это онлайн-конструктор сайтов, который за пару минут с небольшой вашей помощью создаст симпатичный экспортируемый лэндинг, заточенный как раз под эти цели. Расскажите посетителям о своем проекте в двух словах и предложите оставить e-mail, чтобы держать их в курсе обновлений. Инструмент простой, интуитивный и бесплатный.

Hunter

Прицельный поиск лидов и контактов. Если вам необходимо узнать почту конкретного человека, корпоративный ящик компании или же, напротив, выяснить, кому принадлежит тот или иной адрес, данный сервис прочешет Интернет в поисках упоминаний и выдаст вам все результаты. Поиск производится по таким параметрам, как имя, фамилия и домен; результаты могут включать e-mail адреса, имена и должности владельцев, информацию о компании и телефоны. Предусмотрена также и возможность проверки адресов на валидность. Расширение для браузера Google Chrome позволяет моментально выгружать все адреса, связанные с доменом. Те, кому достаточно 150 поисков в месяц, могут пользоваться инструментом бесплатно.

Publicfast 2.0

Платформа для сотрудничества между блогерами и владельцами стартапов. Регистрируясь на сайте, первые получают доступ к свежим интересным идеям, о которых еще не прослышали другие авторы в нише, а вторые — возможность «засветиться» и получить рекламу. Создатели Publicfast не хвалятся громкими именами, а напротив, подчеркивают, что в партнеры попадают по большей части блогеры среднего звена, заинтересованные в поиске перспективных и самобытных проектов, которые могли бы осветить для своей аудитории. Сервис работает с широким кругом социальных сетей: Facebook, Instagram, Twitter, YouTube и Вконтаке, в ближайшее время будут подключены также Snapchat, musica.ly и Periscope. Настраивать кампании, озвучивать требования и дедлайны, проводить оплату и отслеживать результаты можно непосредственно на сайте.



ConvertLoop

Инструмент для сегментирования целевой аудитории и e-mail маркетинга. Сервис создает единую базу контактных данных клиентов и лидов и отслеживает поведение каждого пользователя (периодичность заходов, регистрация, покупка и действия на сайте). На базе собранных данных система определяет, кому и в какой момент выслать один из шаблонов сообщений, которые вы заготовили — будь то информация о новых поступлениях, специальное предложение или напоминание. Список действий-триггеров вы можете задавать сами; информация о пользовательских действиях и отчеты по логам также находятся в открытом доступе. В частности, можно оценить эффективность инструмента, посмотрев статистику взаимодействия пользователей с письмами.

Pluck

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

Lead Flows

Сервис строится на простой идее: «Чем меньше шагов, тем выше конверсия». Решение от компании Hubspot позволяет выполнять всю цепочку действий вплоть до целевого, не покидая исходную страницу, чем упрощает жизнь как клиенту, так и верстальщикам. Элемент интерфейса, с которым будет взаимодействовать пользователь, может иметь разный вид (выпадающий баннер, всплывающее окошко, слайдер) и появляться на странице при тех условиях, которые вы посчитаете нужными. Lead Flows также предоставляет подробные отчеты по лидам, которые можно использовать для корректировки интерфейса.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330460/


Метки:  

«Если вы хотите, чтобы ваши баги исправили, пишите наиболее аккуратные тест-кейсы» — Света Смирнова о поиске багов MySQL

Пятница, 09 Июня 2017 г. 10:17 + в цитатник

Метки:  

От «нового числового формата» до «кода как UI»: как прошла HolyJS 2017 Piter

Пятница, 09 Июня 2017 г. 10:11 + в цитатник


Лишнее подтверждение тому, как стремителен мир JavaScript: всего лишь полгода назад, когда конференция HolyJS проходила в Москве, актуален был Angular 2, а теперь к петербургской успел выйти Angular 4. Будем считать, что существовал ещё и третий, но мы моргнули и пропустили его!

Раз всё так быстро меняется, то что было на самой конференции по сравнению с предыдущей? Как выступил именитый Дуглас Крокфорд? О чём были другие заметные доклады? Всё это — под катом.

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

Огромная проблема слышится во всех кулуарах конференции:"Не знаю, что делать с этими зависимостями". Нет, это не наркоманы. Это фронтендеры

— Настя Манзюк (@brusni4na9) June 3, 2017


Кстати, о стендах спонсоров — в этот раз всё прошло с размахом. Стендов не просто было много, вокруг них ещё и непрерывно что-то происходило. Кажется, больше всего внимания привлекли ВКонтакте, устроив конкурс по правилам «Code in the Dark». Соперники верстали страницу по заданному макету «вслепую», им не виден был результат собственных действий — зато всем зрителям был виден и результат, и код. Подробнее о происходящем писали на официальной странице конкурса (и неудивительно, что эта страница — ВК-паблик).



А что до самих докладов, ради которых все и собрались? Два дня целиком не пересказать, но отметим некоторые моменты.

Дуглас Крокфорд выступил два раза — с открывающим кейноутом и с докладом «Goto There and Back Again». Изначально предполагалось, что кейноутом станет «The Post JavaScript Apocalypse» (уже известный по зарубежным конференциям), но в итоге получилось ещё интереснее: зрители увидели совсем свежий материал «Numbers».



Что в нём было? Разговор о числах Дуглас завёл совсем издалека, с числа пальцев на руках и египетской системы счисления, а до JavaScript добрался очень нескоро (со словами «то, что в JS только один тип для чисел, спасает нас от целого ряда ошибок — но, к сожалению, это неправильный тип»).

Это всё может показаться излишне отвлечённым — часто ли в работе нам требуется думать о том, как с числами обращались тысячи лет назад? Но не сделав этот шаг назад и не увидев большую картину, вряд ли можно понять, как стоит двигаться вперёд. А Дуглас перешёл именно к будущему, где с числами могут начать обращаться иначе — например, используя формат DEC64, предложенный самим Крокфордом для «языков программирования следующего поколения». Как он признавал, в JavaScript это уже не добавить, но «не можем же мы оставить нашим детям JavaScript, это было бы ужасно».



Мартин Сплитт стал уже регулярным героем HolyJS. В декабре зрителям московской конференции очень понравилось его выступление о WebVR, а теперь он выступал с темой «Rendering performance from the ground up». Это было резким контрастом: вместо того, чтобы заглядывать в увлекательное будущее с новыми интересными устройствами, в этот раз он начинал с «низов» — потому что в настоящем в многих пользователей не такие мощные устройства, как хотелось бы, и думать о цене отображения любых элементов по-прежнему приходится.

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

#holyjs Друзья российского сообщества JS!
If you wanna start speaking & need help w/ english - DM me! Let's connect communities :)

— Martin Splitt (@g33konaut) June 3, 2017




Имад Эльяфи рассказывал об опыте миграции громадного сервиса на React, который он получил в Pinterest. Причём интересный опыт Имада этим не ограничивается: ранее он работал ещё и в Facebook, где React и появился. Поскольку он может сравнить, каково работать с React «внутри» и «снаружи» Facebook, сразу хотелось спросить его об этом. А поскольку в онлайн-трансляции HolyJS между докладами мы делали интервью со спикерами, там и спросили.

Ответ оказался таким: с одной стороны, в Facebook близость к создателям React действительно ощущается (поскольку офис — это «большой ангар», разные разработчики часто пересекаются друг с другом, и пообщаться с интересующей командой несложно). А с другой — сторонняя компания зачастую может позволить себе больше смелых решений при использовании React, чем сам Facebook. Неудивительно — в конце концов, сам Цукерберг уже отошёл от своего раннего девиза «Move fast and break things» к куда более осторожному «Move fast with stable infra».



Интервью делали и с Алексеем Ивановым (Evil Martians), на конференции рассказывавшим о внутреннем устройстве бандла webpack. И его как человека, активно залезавшего «внутрь» webpack, мы в числе прочего спросили: «А возникало ли при этом ощущение “что ж тут всё так, по уму ведь надо вот так”, и, если да, что хотелось бы изменить в первую очередь?» Алексей ответил, что ощущение, конечно, возникало, и больше всего его вызывал CSS loader: мол, сейчас он делает слишком много, и даже создатели webpack это признают.



Вообще слова «настройка webpack» ассоциируются у многих с неприятными и при этом неизбежными процедурами. Но Алексей Золотых, сравнивавший в докладе ECMAScript, TypeScript и Dart, замечал там, что как минимум один способ избежать этой боли существует: «Средств сборки для ECMAScript/TypeScript много разных, единственная проблема — их все тяжело конфигурировать. А у Dart всё просто: у него Pub, и он из коробки». В случае с пакетными менеджерами ситуация оказывалась похожей — единый «изкоробочный» вариант Dart против ряда доступных вариантов у ECMAScript и TypeScript, где даже npm перестал быть однозначным стандартом с появлением Yarn.



Помимо трёх перечисленных языков, у фронтендеров недавно появился ещё один вариант. Залим Башоров (JetBrains) рассказывал на HolyJS об использовании Kotlin во фронтенде, и на его докладе могли испытать дежа вю те, кому знаком Java-мир. Пару лет назад на конференциях по Java и Android можно было услышать «вступительные» доклады про Kotlin: «существует такой молодой Java-совместимый язык, который может понравиться вам больше Java, и вот его главные особенности вроде nullability». Прошло время, язык набрал обороты в Java-экосистеме, появилось множество использующих его разработчиков, и разговоры перешли от «он существует» к разбору более узких и конкретных вопросов — вроде реализации корутин.

А с недавним выходом версии Kotlin 1.1, где появилась компиляция в JavaScript, история пошла на новый виток: теперь уже джаваскриптеры слушали на HolyJS о главных особенностях молодого перспективного языка, который они могут использовать. Получится ли у JetBrains на новой территории выступить так же успешно? Окажется ли так, что на HolyJS 2019 уже будут разбирать конкретные детали для зрителей, активно использующих язык в продакшене? Гарантировать невозможно, но пока можно уверенно сказать следующее: послушать про Kotlin на HolyJS собралось немало зрителей, так что интерес к языку налицо.



JavaScript-мир часто ругают за то, что разработчики в нём зациклены на чужих решениях, гоняясь за новомодными фреймворками и подыскивая на каждый чих NPM-пакет. Когда это спровоцировало left-pad-катаклизм, на Хабре появился перевод текста с заголовком «Мы разучились программировать?», и есть немало ощущающих «Кажется, мы стали забывать, как вообще писать на самом JavaScript». Всех таких на конференции мог порадовать доклад Джейкоба Мэттсона «Forgotten funky functions»: он говорил именно о возможностях языка, оказавшихся незаслуженно подзабытыми.



Наконец, закрывала конференцию своим кейноутом Лиа Веру, бодро начавшая «Я с острова Лесбос, что технически делает меня географической лесбиянкой». Пока кто-то делит всех на «разработчиков-технарей» и «дизайнеров-гуманитариев», Лиа любит и код, и дизайн — настолько, что за час до выступления подправляла hex-коды цветов в своей презентации, чтобы цветопередача на проекторе максимально соответствовала задуманному.

И само выступление было соответствующим: она предложила посмотреть непосредственно на код с точки зрения UX/UI. «Мы привыкли считать, что UX — это что-то для дизайнеров. Но если открыть определения слов «usability», «UX» и «UI», они вообще-то не про дизайн, они куда шире». Как надо кодить API, чтобы получился хороший user experience? Лиа назвала множество составляющих — дойдя в конце до того, что нужно уметь быть не только профессионалом, но и непрофессионалом: «Мы привыкли изображать себя всё более хардкорными, но с точки зрения юзабилити это вообще-то вредит. Когда слишком много знаешь, перестаёшь понимать проблемы юзабилити. Это называется «проклятием знания»». Лиа выбилась из тайминга, задержав закрытие конференции — но судя по аплодисментам, многие зрители охотно слушали бы её ещё и ещё.

До новой встречи в Москве в декабре! Посмотрим, сколько версий Angular успеет выйти до неё.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330560/


Метки:  

[recovery mode] Vue.JS обогнал Angular на Github-е

Пятница, 09 Июня 2017 г. 09:42 + в цитатник
Собственно, добавить к этому нечего.
https://github.com/showcases/front-end-javascript-frameworks
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330570/


Метки:  

XoruX — бесплатный мониторинг виртуальной инфраструктуры, систем хранения и передачи данных

Пятница, 09 Июня 2017 г. 09:10 + в цитатник
=+
По роду моей деятельности при проведении аудита я часто сталкиваюсь с различными системами мониторинга у наших заказчиков. Помимо хорошо известных Zabbix, Nagios, Cacti и прочих иногда встречаются весьма интересные экземпляры. Сегодня я хотел бы рассказать об одном из таких случаев — бесплатной системе мониторинга виртуальной инфраструктуры от компании XoruX. Упоминания об этой компании и ее продуктах на хабре найдено не было, поэтому я решил исправить эту ситуацию. Заинтересовавшихся прошу под кат.

XORUX



XoruX s.r.o — чешская компания, которая разрабатывает 2 инструмента доступных по GPLv3 лицензии для мониторинга виртуальной инфраструктуры:
  • LPAR2RRD — мониторинг серверной инфраструктуры для VMware и IBM Power Systems.
  • STOR2RRD — мониторинг систем хранения данных от EMC^2, IBM, HP, Hitachi, NetApp and Lenovo, а также SAN коммутаторов Cisco, Brocade и прочих на их основе.

Компания XoruX s.r.o. также предлагает несколько уровней платной поддержки и SaaS вариант своих продуктов.

Загрузить и развернуть на своей площадке XoruX можно в виде tar архива или образа для VMware, Hyper-V, Docker. Текущий образ XoruX-2.01 основан на CentOS 7.3 и содержит в себе LPAR2RRD версии 5.01 и STOR2RRD версии 2.01. Требования к ресурсам не высокие: 1vCPU, 3GB vRAM, 50GB vHDD.

Перед разворачиванием на своей площадке оба инструмента можно псмотреть на demo-сайтах: LPAR2RRD и STOR2RRD.

LPAR2RRD


Поддерживает как «agent less» мониторинг VMware и IBM Power Systems, так и мониторинг через агентов для таких систем как AIX & Linux, IBM i (AS/400), Solaris.

Как это работает


VMware agent less



IBM Power Systems agent less



OS agent



Система крайне проста в настройке. Все что необходимо — это загрузить архив с VMware vSphere Perl SDK (не распространяется в составе образа ВМ) и задать учетные данные для подключения к ESXi хосту или серверу VCenter (в случае VMware), проверить подключение «Test» и запустить сбор данных «run data load»:


Все остальное система сделает сама. Вам остается наслаждаться графиками: last day, last week, last month, last year и trend (1 month, 3 month, 1 year) во всех основных разрезах vCenter/Cluster/ESXi/VM память, процессор, диск, сеть и т.д.

image


Historical reports c возможность экспорта отчетов тоже имеются:
image


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


А еще есть Dashboard с Custom Groups для удобной группировки:

Dashboard
image

Custom Groups
image


image


STOR2RRD



Как это работает


image


Список поддерживаемых систем хранения
NetApp
  • NetApp FAS/AFF (Clustered Data OnTAP (CDOT))
  • NetApp FAS (OnTAP 7-mode)
  • NetApp E/EF-series

IBM
  • IBM System Storage DS8000, DS6800
  • IBM FlashSystem
  • IBM Storwize family (V7000, V5000 and V3700)
  • IBM Spectrum Virtualize (SVC)
  • IBM XIV Storage System
  • IBM DS3xxx, 4xxx, 5xxx
  • IBM DCS3700

Other Vendors
  • Dell PowerVault MD3000
  • Lenovo Storwize
  • Lenovo S2200/S3200
  • LSI / Engenio based storages
  • DotHill AssuredSAN

Hitachi
  • Hitachi Data Systems VSP G
  • Hitachi Data Systems VSP F
  • Hitachi Data Systems HUS-VM
  • Hitachi Data Systems VSP
  • Hitachi Data Systems HUS
  • Hitachi Data Systems AMS

HPE
  • HPE StorageWorks XP7
  • HPE StoreServ 3PAR
  • HPE MSA2000/P2000

EMC^2
  • EMC^2 VMAX
  • EMC^2 Unity
  • EMC^2 VNX
  • EMC^2 VNX file
  • EMC^2 VNXe

На стадии разработки:
  • EMC^2 VPLEX
  • Dell SC Series (formerly Compellent)
  • Huawei OceanStor


Поддерживаемые SAN устройства
Cisco
  • Cisco MDS
  • Cisco Nexus

Brocade and all their re-brands

QLogic


Хранилища конфигурируются редактированием файла конфигурации /home/stor2rrd/stor2rrd/etc/storage-list.cfg (примеры имеются в самом файле и на сайте), не забудьте зашифровать пароль через perl ./bin/spasswd.pl.

По прошествии некоторого времени при обновлении интерфейса (Ctrl+F5) на DASHBOARD вы увидите добавленные СХД.
image


При клике раскрывается график POOL sum_io last day.
image


В следующих пунктах верхнего меню: их статус, емкость и т.д.
image

image


Ниже, в разделе STORAGE, по каждой добавленной СХД разнообразные разрезы их жизнедеятельности.

image image

Node


Pool


Volume


Drive


image


В целом интерфейс такой же как и LPAR2RRD — те же Dashboard,Custom Groups т.д. Также присутствует возможность настройки уведомлений о при превышении какими-либо параметрами пиковых значений.

Выводы


По заявлениям на сайте компания XoruX s.r.o является партнером таких компаний как IBM, NetApp, EMC^2, Hitachi, VMware, Microsoft. Список клиентов достаточно большой. Среди реселлеров есть и российский SoftLine. Наличие платной поддержки говорит о возможности использования продукта в Enterprise. Кстати и без приобретения платных подписок, support нормально отвечает по почте на вопросы и помогает с настройкой. За последние пару месяцев вышло несколько обновлений, что говорит о живости проекта и его развитии.
На мой взгляд прекрасный бесплатный инструмент. Настраивается быстро и легко, есть все необходимое.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330426/


Патчим прошивку Android за 5 минут

Пятница, 09 Июня 2017 г. 08:34 + в цитатник

Задача


Все началось с того, что я захотел установить на планшет Digma Optima 7.61 игру GTA San Andreas. К сожалению, виртуальная SD-карта планшета имеет объем менее 1 Гб, а кэш игры весит порядка 2-3 Гб. На планшете установлен Android 4.4.2 и возможность просто взять и сменить память по умолчанию в нем отсутствует. Так же в нем отсутствует файл /etc/vold.fstab (он есть на более старых версиях андроида, и изменив данный файл с root-правами, можно поменять местами виртуальную и реальную карты памяти).

Необходимые инструменты


1. Компьютер или ноутбук с ОС Linux.
2. Утилиты adb и fastboot (входят в состав Android SDK, так же, как заметил tmnhy, входят в репозитории как отдельные пакеты).
3. Набор утилит bootimg_tools (нашел здесь).

Решение


1. Извлекаем с устройства загрузочный образ


— Подключаем устройство к компьютеру через usb-кабель и заходим в shell устройства:

adb shell

— Где-то в папке /dev/block на устройстве нужно найти файл с именем boot.
У меня он находился по пути /dev/block/by-name/boot, но данный путь может различаться на разных устройствах.

— Извлекаем загрузочный образ:

dd if=/dev/block/path/to/boot of=/mnt/sdcard/boot-from-device.img

— Выходим из shell'а (exit) и извлекаем образ:
adb pull /mnt/sdcard/boot-from-device.img


2. Затем загрузочный образ нужно разобрать


— Скачиваем и распаковываем bootimg_tools.

— Добавляем bootimg_tools в PATH:

export PATH=$PATH:/path/to/bootimg_tools

— Распаковываем образ:

unpack boot-from-device.img

— Если все предыдущие шаги сделаны верно, то должна появиться папка boot-from-device. Внутри нее должны лежать файлы zImage и ramdisk.cpio.gz, а так же папка ramdisk. Как раз внутри последней лежит содержимое загрузочного образа, которое мы будем патчить.

3. Патчим


Для решения своей задачи я нашел строчку, которую нужно заменить, в файле init.sun8i.rc.
Я просто заменил export EXTERNAL_STORAGE /mnt/sdcard на export EXTERNAL_STORAGE /mnt/extsd. Как я понимаю, это как раз и есть то значение, которое возвращает метод Environment.getExternalStorageDirectory() в Android SDK. В пользу этого предположения говорит тот факт, что после применения патча приложения начали использовать аппаратную карту памяти вместо виртуальной для хранения своих данных.

4. Заменяем загрузочный образ на устройстве


Я написал для этих целей небольшой скрипт:

repack_ramdisk boot-from-device/ramdisk
mkbootimg --kernel boot-from-device/zImage --ramdisk boot-from-device/new-ramdisk.cpio.gz --base 0x40000000 --cmdline 'console=ttyS0,115200 rw init=/init loglevel=4' -o new_boot.img
sudo adb reboot-bootloader
sudo fastboot flash boot new_boot.img
sudo fastboot reboot


Итоги


После проделанных манипуляций игра на планшете успешно заработала.

P.S.


Все вышеописанное вы проделываете со своим устройством только на свой страх и риск. За превращение вашего девайса в кирпич автор ответственности не несет.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330566/


Метки:  

DevConf::Frontend — 17 июня в Москве: Angular 4, React Native, выбор JS-фреймоврка для крупного проекта + Lua Meetup

Пятница, 09 Июня 2017 г. 04:50 + в цитатник

17 июня в Москве, Измайлово пройдет конференция Devconf::FrontEnd

Откроет ее Виталий Грин, лидер Frontend разработки Альфа Лаборатории, Ex-Яндекс.Карты,
который расскажет как сделать общую библиотеку компонентов с одной стороны стабильной для десятков команд, а с другой стороны гибкой и расширяемой

Сергей Аверин, tech-менеджер из компании Acronis поведает о том, как важен правильный выбор JS-фреймоврка для крупного проекта в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.

Алексей Фомкин выступит с холиварным докладом — как вернуть фронтенд на сервер

Алексей Охрименко, один из организаторов Angular митапа, автор дизайн паттерна MALEVICH и PEG парсера SimplePEG расскажет про Angular 4

Дмитрий Пацура, разработчик ReactJS, React Native, Zephir Language & Phalcon Framework
начнет с обзора архитектуры React Native до грамотного построения приложения на нем.

Григорий Петров, технический евангелист Voximplant, поделится опытом насчет ReactVR и WebVR и где его можно использовать, также про JavaScript технологии, полезные в VR: WebRTC

Дмитрий Шуранов, фронтэнд-разработчик из Туту.ру обсудит что заставляет браузер пропускать фреймы?

Заканчивает секцию встреча разработчиков Lua-in-Moscow

Заявленные темы встречи:
  • Быстрое прототипирование функциональных макетов UI на Lua и Mermaid.js
  • Вжух — и написал кроссплатформенную игру.
  • Архитектура бэкенда нагруженной игры на C++ и Lua
  • Как и зачем LuaJIT нарушает DRY?


Вопросы по конференции в официальном чате Telegram https://t.me/devconfru

До встречи на конференции сообществ разработчиков DevConf 2017!
Какой ваш любимый JS фреймворк?

Проголосовало 32 человека. Воздержалось 8 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330564/


Метки:  

Самообразование и Hello, world: проблема вводных курсов и не только

Четверг, 08 Июня 2017 г. 21:14 + в цитатник
Здравствуйте! Меня зовут Иван и я алкоголик самоучка.
IT подразумевает самообразование. И поэтому я понадеялся на свой собственный мозг – у меня нет высшего образования. Да, в современном мире это меньшая из проблем. Но я затрагиваю это потому, что хочу поговорить об образовании в целом.

Надо ли говорить, что сейчас есть курсы по фотографированию еды в Instagram? Не надо…
Есть «миллионы» платных и бесплатных курсов, а на небезызвестном ресурсе есть даже целый раздел, посвящённый этой животрепещущей проблеме – курсов ради курсов, после которых будущие «вайтишники» могут гордиться, что у них есть бумажка, а курсоделы (кроме шуток) могут гордиться тем, что хотя бы кого-то хотя бы чему-то научили. И в этой круговерти понять можно всех. И тех, кто просто хочет есть и жить, занимаясь сколько-нибудь благим делом – курсоделов, и тех, кто на эти курсы ходит, надеясь получить квалификацию и работать.
Не сочтите за рекламу – не так давно открыл для себя Stepik и да, там есть действительно бесплатные и при этом годные курсы, после которых ты чувствуешь, что обогатил свой кругозор, научился мыслить иначе и извлекать из этого пользу.
Есть МИРЭА и там бесплатная сетевая академия (с некоторыми оговорками) даже с доступом к реальному железу (вендора не называю) – бери и учись, как говорится, будь полезен обществу. Это я к тому, что хорошие примеры – есть и я не хочу здесь плюнуть на всё наше образование в принципе.
Но! Хочется плюнуть, откровенно говоря, в подход к образованию новичков на большинстве курсов, в «учебниках» и «самоучителях». Я помню, что хабр – не место для жалоб. Но хочу обратить внимание на реально существующую проблему.
Итак, «Hello, world» JS, примитивный подход:
window.document.write(“Hello, world!”); // а то и без window – и человек сторонний не узнаёт об объекте window сразу.

Моя реакция: спасибо, я и так знал, что языки программирования позволяют работать с информацией, записывать её и читать в файлы и из файлов. Не дурак. Дальше…
Чуть более приближенный к реальности пример:


function myFunction() {
    document.getElementById("demo").innerHTML = "Hello, world!";
}


Моя реакция: спасибо, теперь я вижу, как интерактивно заменить текст в параграфе, а не просто поверх всего написать хэллоу ворлд. Но и этого мало! Дальше я хочу понять, как научиться разговаривать с языком на ты, написав к нему собственную библиотеку. Потому, что я хочу работать, развивать ту сферу, в которую я прихожу! И вот в этом очень редкие курсы могут мне помочь. Я (предположим, только начал изучать JS) иду смотреть код jQuery, имея довольно скудный набор знаний из этаких HW-курсов, статей и прочего… И конечно начинаю понимать, что в курсе ничему не научился, как и из статей.
Дальше ещё веселее! Допустим, уже наизучавшись вдоволь самостоятельно на протяжении лет и лет, я хочу облегчить себе жизнь и на Jscript переписать обёртку для поисковых систем и сайтов с доками, чтобы очень быстро находить – вообще. Сначала это был вот такой батник:

@echo OFF
:setfind
set /p s="Find: "
"C:\Program Files\Mozilla Firefox\firefox.exe" ^
https://www.google.ru/search?q="%s%"
GOTO setfind


Запускаю – забиваю – браузер с нужным запросом и без лишних параметров поиска (а значит гораздо быстрее) открывается сам в нужном месте. Теперь, как уже говорил, я хочу переписать это на Jscript. Иду на MSDN, вижу там рабочим метод
window.prompt(str,str);
Пишу спокойно его в код скрипта и ожидаю интуитивно, что WSH это съест… Но… Объект window не определён. И вот тут я начинаю чувствовать себя идиотом, рою стековерфлоу и нахожу там wsf с экспортом функции инпутбокса аж из VB… Но — это не очень красиво.
В конце концов нахожу красивое, хотя уже не помню где, (при этом оказывается, что я должен был создать файл wsf, тогда как в доках есть все разжёвывания, кроме этого!) и понимаю, что могу всё это написать и что не дурак всё-таки, но – вопрос… Почему ничего такого нет на курсах? Почему в доках есть вот такие самоочевидные конструкции:
JScript uses the alert, confirm, and prompt message boxes of the browser to obtain input from your user. The boxes are methods of the window object. Because the window object is at the top of the object hierarchy, you do not actually need to use the full name (for example, window.alert()) of any of these message boxes, but it is a good idea to do so because it helps you remember to which object they belong.

Но нет того, что должно заставить это просто работать?! Самое смешное, что я сталкивался с wsf много лет назад, но просто забыл, как и с чем это едят. И вот… Я спокойно пишу в новый файл инструкцию… А получается чёрт знает что. По какой такой кофейной гуще я должен был догадываться, что Windows Script Host не умеет в js «с центра поля»? Ладно, хорошо, надо было изучать WSH с начала, сам виноват. Но. Такого я что-то не припомню ни в одних курсах. Учат простейшему — не учат сути. Не учат, как использовать что-то на практике, а потом человек пытается пользоваться микроскопом как молотком.
Фактически – на большинстве курсов учат набору неких абстрактных фокусов, не показывая сущности действий. И после всех этих циклов, выводов и физбазза чувствуешь, что ничему не научился.
Самое смешное – это то, что по следам моего самообучения длиною в годы можно книгу написать, кроме шуток. Тест-драйв оной давал положительный фидбек, кстати.
Можно продолжать…
Берём HW, например, для ActionScript:

trace('Hello World!'); // вы уже понимаете, что я хочу сказать?


Такой пример ничему не учит. Ничего о сути AS не показывает. Новичок уходит «не солоно хлебавши», но с «основами», да…
То же самое касается, например, языка C… Хеллоуворлд не покажет нам истинные возможности языка. А должен. Само по себе образование должно образовывать специалиста — человека, могущего всё изученное применить на практике. Однако получается всё очень странно…
А вот позитивный пример. Самый полезный ХВ, который я видел:

template 
class Hello
{
    public:
        Hello(T hello)
        {
            std::cout << "Hello, " << hello << std::endl;
        }
};
 
template <>
class Hello
{
    public:
        Hello()
        {
            std::cout << "Hello, world!" << std::endl;
        }
};
 
int main(void)
{
    Hello();     
    return 0;
}


Чёрт возьми! Он показывает, как использовать шаблоны… Сразу. И не считает новичка идиотом.
В конце концов, то, что лично я хочу получить от образования, нахожу только на «углублённых» курсах, найти которые можно с трудом, иногда — очень большим. При этом платность курса, конечно же, не гарантирует ровным счётом ничего. Почему я говорю о курсах? Они дают хоть какую-то систему в знаниях. А бессистемность обучения – вообще очень страшная штука, тем более в нашем случае… Где системность и упорядоченность – всему голова.
И что в итоге? В итоге потом мы наблюдаем статьи с сетованием на упавший уровень джуниоров и на программистов, которые не могут физбазз… И виноваты не джуниоры, а само по себе то, насколько массовой стала профессия. При этом классическая «вышка» даёт некий базис, основного пласта знаний уже не даёт. Остаётся утыкаться в курсы и разрозненные многочисленные статьи (поправьте меня, если я не прав)… А они, зачастую, хотя и дают историческую справку о языке и обзор возможностей языков, на практике как правило ничего не показывают… И когда человек, например, изучив базовые конструкции в Си пытается что-то сделать с OpenGL — как правило выходит чушь…
Ну и, наконец, как говорится: «Хочешь, чтобы было сделано хорошо — сделай это сам», так что, вполне возможно, скоро сделаю курс, таким, каким его вижу я, и буду готов выслушать всяческую критику и замечания. Сразу и хорошо получается очень редко, пинки готов получать. Не могу на это всё смотреть и бездействовать.
У меня всё. Всем спасибо.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330556/


Метки:  

Какого! закона вы ещё хотели? У меня есть их! Блокируем VPN

Четверг, 08 Июня 2017 г. 19:56 + в цитатник
Есть прогнозы, которые не хочется делать; есть те, что не хочется, чтобы сбылись. Новый закон сразу из двух форм.

Публикации о нём уже завоёвывают Рунет и Хабр. Но я, как всегда, скажу не кратко, а постатейно.

Но прежде — прелюдия эмоций. Не моих.



  1. Сделать VPN сегодня (особенно с мощностями «облаков») не так и сложно и в Сети уже пошли предложения формата: «если миллион человек поднимут свой впн примерно в одно и тоже время, то»
  2. «Мы встроили антиблокировку антиблокировок в твою блокированную антиблокировку, чтобы ты мог антиблокировать свою антиблокировку, пока серфишь по сайтам, не блокированным твоей блокированной антиблокировкой»
  3. «То же самое до последнего думали про закон Яровой»

Но это — эмоции. Поговорим же о нормах?

Итак, ст. 10, которая первая подпадает под изменения звучит следующим образом: «В Российской Федерации распространение информации осуществляется свободно при соблюдении требований, установленных законодательством Российской Федерации». Коллеги могут меня упрекнуть в том, что указано 10*2, но именно в первой части — выражается вся суть проекта, не так ли?

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

Вот оно — сердце дракона: «Меры, направленные на противодействие использованию на территории Российской Федерации информационно-телекоммуникационных сетей, информационных систем и программ для электронных вычислительных машин для получения доступа к информационным ресурсам, в том числе к сайтами (или) страницам сайтов в сети«Интернет», доступ к которым на территории РоссийскойФедерации ограничен в соответствии с настоящим Федеральным законом».

Ничего не напоминает? Конечно же — ФЗ №115 «О противодействии легализации...». В курсе ли вы сколько счетов, операций и даже людей заблокировано по этому закону? А сколько из них праведно?

А что же будет делать сам РКН?

Вести систему учёта VPN, анонимайзеров и иже с ними. РКН вообще любит списки.
Мониторить Интернет и искать ресурсы, что будут преданы анафеме
Искать провайдеров, через которых VPN и иже с ними создаются (Амазону мой пламенный привет)
Идентифицировать владельцев
Блокировать VPN и т.п. «злые вещи» (без судебного решения, заметьте)

При этом, РКН заявляет: «Системное решение проблемы заключается в нормативном закреплении за Роскомнадзором права определять способ осуществления блокировки оператором связи»,
но в проекте опять чёрным для белых написано: «обязаны самостоятельно ограничить доступ пользователей сети «Интернет» к информационно-телекоммуникационным сетям». Как же так?

А дальше — вообще праздник для юристов (и любителей хайпа): оценочные категории, точнее вот это: «или принять иные необходимые и достаточные меры по прекращению обеспечения использования на территории Российской Федерации». Конечно же, разработку этих мер, по устоявшейся традиции, начнут многим позже?

Дальше, конечно же, речь идёт о санкциях: санкции вообще полюбились нашему государству, но почему-то не очень по вкусу гражданам.

Интересны вот какие нюансы ещё:
Когда провайдер принял «меры по прекращению обеспечения использования» «злостных сервисов», он может уведомить РКН… дальше — просто цитата: «Такое уведомление может быть направлено также в электронном виде». А зачем? Бумага-то надёжней?
Речь в проекте (пока проекте!) идёт не только о провайдерах, но, что важнее, — и о поисковых системах. А вот это уже может сыграть на руку DuckDuckGo или ещё более экзотическим видам этих сервисов. В частности, поисковики обязаны: "прекращать на территории Российской Федерации выдачу по запросам пользователей поисковой системы ссылок на информационные ресурсы, в том числе сайтыи (или) страницы сайтов в сети «Интернет», включенные в указанный перечень".
Корпоративные VPN — вне запрета (ч. 17). Только вот… «все это идет вразрез со здравым смыслом. В законопроекте говорится о технологиях, которые позволяют обходить блокировку. В первую очередь, это VPN и анонимайзеры. Как они будут отделять VPN, который используется в коммерческих целях, от VPN, который используется для обхода блокировок? Это невозможно определить». Сказано не мной, кстати, а Интернет-омбудсменом — Дмитрием Мариничевым.

Отдельного внимания заслуживает пояснительная записка к этому «законо»-проекту.

Я сделаю намеренные выдержки, полный текст — см. там же.
«Ограничение доступа к информационным ресурсам, сайтам, страницам сайтов в сети «Интернет», -мера, которая применяется с целью… пресечь распространение информации».

Далее: «Сложившаяся с 2012 года практика применения меры выявила недостаточную эффективность блокировок». Но что говорил сам РКН по этому поводу? «Использование инструментов обхода блокировок сайтов не является нарушением закона».

Самое интересное, что авторы «закона» осознают, что VPN и т.д. используются вполне легально.



И последнее: везде фигурирует аббревиатура — ЭВМ. В связи с этим — моё личное обращение к гражданам-регулировщикам: замените этот устаревший термин, раз уж взялись за регулирование интернета, а то в нём — прямо вся соль проектов: ни подготовки, ни развития, ничего, кроме запретов, разумеется.

Пока всё. Поклон.
Это всё?

Проголосовало 113 человек. Воздержалось 53 человека.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330552/


Метки:  

«Энергетический предел»: Новые технологии охлаждения дата-центров

Четверг, 08 Июня 2017 г. 19:35 + в цитатник
Кен Брилл (Ken Brill) из центра сертификации ЦОД Uptime Institute как-то заявил, что процесс увеличения тепла, выделяемого в результате установки все большего количества транзисторов на чип, достигнет предельной точки, в которой экономическая целесообразность охлаждения ЦОДа будет утеряна без внедрения новых технологий.

И индустрия постепенно движется в этом направлении, занимаясь приоритизацией показателя энергоэффективности в общем процессе обслуживания дата-центров. По этой причине классические серверные помещения с традиционными системами охлаждения становятся все более редким выбором для компаний, что объясняется экономическими соображениями: в отчете IEEE от первого квартала 2016 года описано распределение энергопотребления между различными компонентами дата-центров — на долю систем охлаждения приходится 50% потребляемой энергии.

В связи с этим компании начали искать новые методы и решения охлаждения ЦОД, о которых мы хотим поговорить в этом материале.

/ фото Rob Fahey CC

В работе Марка Миллса (Mark Mills) под названием «Облака начинаются с угля» делается следующий вывод: основываясь на усредненной оценке, экосистема информационно-коммуникационных технологий (ИКТ) ежегодно потребляет 1500 ТВт·ч электроэнергии, что составляет 10% от её мирового производства.

По данным Intel, c 2002 года расходы на электроэнергию ежегодно возрастают примерно на 5,5%. Организации тратят около $0,50 на электроэнергию и охлаждение с каждого доллара, направленного на обслуживание аппаратной части.

Изображение: Uptime Institute

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

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

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

  • Физические ограничения. В отличие от стоек, доступ к емкости для погружения серверов открывается только сверху, что усложняет масштабирование инфраструктуры.
  • Безопасность. Любое техническое обслуживание требует контакта со специальной жидкостью.
  • Стоимость развертывания системы. Проектирование нового ЦОДа на основе водяного охлаждения менее трудоемко, чем модернизация существующей инфраструктуры.
  • Дефицит ресурса. На обслуживание крупного дата-центра требуется такое количество воды, что целесообразность охлаждения серверов в засушливых районах ставится под сомнение как с экономической, так и с экологической точки зрения.

Альтернативные решения для охлаждения дата-центров


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

Миграция ЦОДов


На планете есть ряд регионов, климат которых естественным образом позволяет экономить до 100% энергии, затрачиваемой на обслуживание охлаждающих систем. Такими климатическими зонами, к примеру, являются северная часть Европы, России и несколько зон на севере США.

В подтверждение тому в 2013 году компания Facebook построила свой первый дата-центр за пределами Соединенных Штатов в шведском городе Лулео со среднегодовой температурой в 1,3 °C, а компания Google вложила миллиард долларов в строительство крупного ЦОДа на территории Финляндии.

Холодный климат позволяет сократить эксплуатационные расходы, из-за низких температур воздуха и воды, запускаемых в дата-центры. По словам Эндрю Донохью из исследовательской компании 451 Research, естественное воздушное охлаждение позволяет строителям отказаться от механических охладителей, сократив до 40% капитальных затрат на объект.

Естественные формы охлаждения


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

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

Еще в 2008 году в компании Intel провели десятимесячный тест для оценки эффективности использования исключительно внешнего воздуха для охлаждения ЦОДа. В итоге зафиксировать увеличение частоты отказов серверов из-за колебаний температуры и влажности не удалось. Диапазон изменений температуры в машинном зале составлял 30 градусов, при этом использовался только стандартный бытовой воздушный фильтр, удаляющий лишь крупные частицы из поступающего воздуха.

В результате влажность в дата-центре колебалась от 4 до 90%, а серверы покрылись тонким слоем пыли. Несмотря на это, частота отказов в испытательной зоне составила 4,46%, что не сильно отличалось от показателя в 3,83%, достигнутого в главном дата-центре Intel за тот же период.

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

Изображение: Submer

Еще одним решением для адиабатического охлаждения является так называемое колесо высокой температуры. Такое колесо входит в состав системы охлаждения Kyoto, используемой в Швейцарии. Гибридная установка мощностью 9 МВт использует охлажденную воду замкнутого адиабатического сухого вентилятора, соединенного с водоохлаждающим устройством с компрессорами.

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

Утверждается, что этот тип охлаждения требует только 8–25% мощности, затрачиваемой при механическом охлаждении. Согласно независимому отчету, система на основе «колеса», установленная в Монтане, США, снижает стоимость затрат на охлаждение до 5 центов с каждого доллара, потраченного на энергию.

Что касается водяной формы естественного охлаждения, в реальном исполнении ее иллюстрирует принцип работы дата-центра Green Mountain, который расположен в одном из фьордов в Норвегии. Водоем обеспечивает бесперебойную подачу воды при температуре 8 °C, которая является оптимальной для систем охлаждения ЦОДов.


На более «глубокую» эксплуатацию водных ресурсов нацелен проект Microsoft Natick — реализующий идею подводного дата-центра. Предполагается, что на дне океана на глубине от 50 до 200 метров будут размещены капсулы, содержащие несколько тысяч серверов. Внутренняя часть блока состоит из стандартных стоек с теплообменниками, которые переносят тепло от воздуха к воде.

Затем жидкость попадает в теплообменники снаружи капсул, которые, в свою очередь, перенаправляют тепло в океан. Во время эксперимента прототип был погружен близ берегов Калифорнии на 105 дней. Температура воды колебалась в диапазоне от 14 до 18 °C. Затраты на охлаждение оказались существенно меньшими в сравнении с механическими способами охлаждения.

Похожую концепцию разрабатывает компания Google, однако ученые ИТ-гиганта предлагают размещать дата-центры на баржах. По данным Nautilus Data Technologies, занимающейся разработкой похожей технологии, такой подход позволяет экономить до 30% энергии за счет естественного охлаждения.

Другим воплощением концепции эксплуатации «природных охладителей» являются подземные дата-центры, а также ЦОДы, базирующиеся в пещерах естественного происхождения. В сравнении с идеей погружения серверов под воду подземные объекты имеют преимущество с точки зрения доступа к оборудованию. В качестве примеров реализации можно привести пещеру в городе Тампере, Финляндия, которую арендует Aiber Networks.

Также стоит отметить дата-центр Iron Mountain расположенный в бывшей шахте в Пенсильвании на глубине 67 метров. Утверждается, что постоянная температура объекта поддерживается на уровне 11 °C естественным образом — это обеспечивает «одни из самых низких показателей энергоэффективности [по состоянию на 2014 год]».

Альтернативные системы охлаждения на основе жидкостей


Основываясь на принципе погружения в жидкость, система Iceotope от компании 2bm покрывает электронику непроводящей охлаждающей жидкостью, тепло от которой транслируется к радиатору. Вода проходит через стойку и может быть повторно использована для других целей, например в центральном отоплении. По данным 2bm, эта система позволяет сэкономить до 40% от общей стоимости обслуживания ЦОДа.

В 2014 году ресурс Data Center Knowledge также представил отчет об оптимизации процесса охлаждения дата-центра Агентства национальной безопасности США посредством погружения серверов в нефтяные масла. Этот подход также позволил отказаться от охлаждения с помощью вентиляторов.

Охлаждение с использованием искусственного интеллекта


В 2014 году Google приобрели компанию DeepMind, специализирующуюся на разработке систем искусственного интеллекта. Ряд тестов ИИ корпорации был связан с оценкой энергоэффективности ее собственных дата-центров. По результатам исследования, Google удалось достичь снижения энергопотребления в части охлаждения на 40%.

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

Источник: DeepMind

Лазер с прямой модуляцией на кремниевой подложке


Метод находится на ранних стадиях развития и реализуется в рамках проекта известного как DIMENSION. Группа ученых из Кардиффского и Шэффилдского университетов создали лазер на кремниевой подложке, способный работать 100 тыс. часов при температуре до 120 °C.

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

Перспективы инновационных систем охлаждения


Акцент на оптимизации энергоемких систем ЦОДов привел к возникновению различных концептов, которые могут стать реальностью в будущем. Один из таких примеров — проект 65-этажного дата-центра в Исландии, который, по словам архитекторов, представляет собой «гигантскую башню данных», достигающую в высоту 50 метров и содержащую сотни тысяч серверов, обслуживаемых за счет «чистой» энергии. Учитывая близость выбранного местоположения к Северному полярному кругу, здание будет обеспечено средствами для естественного охлаждения.

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

Альфонсо Капоццоли (Alfonso Capozzoli) утверждает, что сбор и повторное использование отработанного тепла, производимого ИТ-оборудованием, является следующим шагом в стратегии энергоэффективности. Реализация соответствующих мер, кроме всего прочего, может значительно повлиять на сокращение выбросов CO2. В качестве возможных сфер использования отработанного тепла, помимо центрального отопления, также числятся абсорбционное охлаждение, цикл Ренкина и опреснение воды.

Таким образом, ЦОД-индустрия в настоящее время сосредоточена на использовании естественных источников охлаждения, комбинируемых с интеллектуальными системами, оптимизирующими эффективность расходования энергии. Концепты, пребывающие сегодня на стадии прототипа, могут коренным образом изменить подход к применяемым способам охлаждения в будущем.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330338/


Метки:  

VDS для всех даром и пусть никто не уйдёт обиженным

Четверг, 08 Июня 2017 г. 19:23 + в цитатник
Приветствую тебя, %USERNAME%.

Я представляю одну молодую хостинговую компанию. У нас пока нет корпоративного блога на Хабре и прочих прибамбасов большой и успешной компании, но у нас есть кое что получше. Кому стало интересно — прошу под кат.

image


Пост не рекламный, поэтому название конторы утаим, а сосредоточимся лучше на аттракционе невиданной щедрости.

Итак, остался не у дел один мощный старик:

CPU: 2 х Intel Xeon E5620
RAM: 48G DDR3
HDD: 2x300GB SAS RAID1 + 2х1Tb SATA RAID1.

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

image


С одним лишь условием: на сервере должен быть размещен какой-то некоммерческий проект. Альтруизм — наше все! Мы попросим у вас хотя бы минимальное описание, скриншоты или типа того, и вообще, чем более подробно вы опишите свой стартап (ну или что там у вас), тем больше у вас шансов получить желаемое.



Ну а чтобы хватило всем (ну или почти), мы ввели некоторые ограничения.

Виртуалки:
  • предоставляются как есть, безо всяких там автоматизаций и прочих ништяков;
  • не бэкапятся и не резервируются;
  • отдаются по одной штуке в руки;
  • представляют собой типовую конфигурацию: 1vCPU, 1GB RAM, но это не точно;
  • работают под управлением Ubuntu в LXC-контейнерах (OpenVZ);
  • которые спамят по чем зря, рулят ботнетами, раздают червей, короче, создают вредоносную активность, будут нещадно выпиливаться, а владельцы предаваться общественному порицанию, анафеме и выгоняться на мороз.

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

В общем, кто заинтересовался, пишите на freevds@serverice.ru

Спасибо за внимание, да прибудет с вами сила добра!
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330546/


Что такое Zimbra

Четверг, 08 Июня 2017 г. 19:12 + в цитатник
Zimbra — открытый программный продукт для автоматизации и упрощения совместной деятельности любых рабочих групп в масштабах государственного или частного бизнеса. Сейчас Zimbra применяется в более чем 5000 компаниях, включая такие мировые бренды, как NTT Communications, Comcast, Dell, Cadbury, Investec, Rackspace, Red Hat, VMware, H&R Block и Vodafone. Всего больше 100 миллионов конечных пользователей в более чем 140 странах мира. Zimbra — третий по размеру провайдер средств коллективной работы в мире с активным сообществом разработчиков и мировой партнёрской сетью.





Zimbra состоит из двух платформ:

  • Zimbra Collaboration Suite — почтовый сервер, органайзер и персонализация пользователя. Это решение корпоративного класса для совместной работы с электронной почтой, календарем и офисными инструментами.
  • Zimbra Community — корпоративная социальная сеть, виртуальное пространство для обмена файлами и сообщениями между сотрудниками.


Zimbra Collaboration Suite


Для крупных компаний наибольший интерес представляет масштабируемый и многофункциональный пакет приложений Zimbra Collaboration Suite. Это решение объединяет в себе корпоративное облако с возможностями электронной почты и системы управления проектами. Пользователи получают в одном продукте общий доступ к документам и папкам и совместную работу в приложениях. общение в чате и голосовую почту, Click-to-call и интеграцию с социальными сетями, веб-сервисами и приложениями (Facebook, Twitter, Socialcast, Oracle и SAP).

Базовые возможности Zimbra Collaboration Suite:


  • Доставка, хранение и отправление электронной почты.
  • Индексация почты.
  • Логирование почтового сервера.
  • Поддержка протоколов IMAP, POP, CalDAV и CarDAV.
  • Служба каталогов.
  • Антиспам защита (Spam Assassin).
  • Антивирусная защита (ClamAV).
  • Синхронизация с мобильными платформами: Android, iOS, Windows.


Zimbra Collaboration Suite представляется в двух основных редакциях.

  • Zimbra Open Source Edition — полностью свободная и бесплатная версия Zimbra, содержащая весь основной функционал.
  • Zimbra Network Edition — платная версия Zimbra, отличающаяся возможностью доменного администрирования, наличием коннектора для Microsoft Outlook и другими функциями.



В состав Zimbra Collaboration Suite входит клиентское и серверное программное обеспечение, а также следующие пакеты прикладных программ.



Zimbra Core — включает библиотеки, утилиты и базовые конфигурационные файлы.

Zimbra Store (Zimbra сервер) — устанавливает компоненты для почтового сервера, включая Jetty, который является контейнером сервлетов, запускающим внутри себя программное обеспечение Zimbra. В Zimbra Collaboration Suite этот контейнер сервлетов называется mailboxd. Почтовый сервер включает в себя компоненты:

  • Data store — база данных MySQL, которая содержит все метаданные сообщений включая теги, переговоры, и указатели туда, где сообщения хранятся в файловой системе. Почтовые идентификаторы связываются с OpenLDAP учетными записям пользователей.
  • Message store — место, где находятся все электронные письма, включая тексты сообщений и любые файловые вложения. Сообщения хранятся в формате MIME.
  • Index store — индексные файлы для каждого почтового ящика. Индекс и поисковая технология обеспечиваются посредством Apache Lucene. Каждое сообщение автоматически индексируется, а каждый почтовый ящик имеет индексный файл связанный с ним.


Zimbra LDAP — Службы каталогов LDAP обеспечивают централизованный репозитарий для информации о пользователях и устройствах, которые разрешены использовать в вашей сети. Центральный репозитарий, используемый для данных Zimbra LDAP, является сервером каталогов OpenLDAP. Zimbra Collaboration Suite использует OpenLDAP в качестве open source сервера каталога LDAP. Аутентификация пользователей обеспечивается посредством OpenLDAP. Каждый аккаунт на сервере Zimbra имеет уникальный идентификатор почтового ящика, который является основной точкой идентификации аккаунта.

Примечание: Zimbra также поддерживает интеграцию с Сервером Microsoft Active Directory.

Zimbra MTA — Postfix-open source агент передачи почты (MTA), который получает почту по протоколу SMTP и доставляет каждое сообщение в нужный почтовый ящик Zimbra сервера с помощью протокола локальной доставки сообщений (LMTP). Zimbra MTA также включает в себя антивирусный и антиспам-компоненты.

Zimbra-SNMP — Zimbra использует образец, чтобы наблюдать вывод syslog, чтобы генерировать прерывания SNMP.

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

Zimbra Spell — Aspell — программа проверки правописания с открытым исходным кодом, используемая веб-клиентом Zimbra.

Zimbra Proxy и Zimbra Memcached — пакеты zimbra-прокси.

Zimbra System Directory Tree — основные каталоги, создаваемые пакетами установки Zimbra.

Zimbra Desktop — клиентское почтовое приложение, которое можно использовать как почтовый клиент к любому серверу (postfix, exchange, lotus). Zimbra Web Access дает все те же возможности, что и Zimbra Desktop, но работает через браузер.

Возможности веб-клиентов Zimbra:


  • Создание, чтение, ответ, пересылка и другие стандартные функции,
  • Просмотр почты по теме разговора.
  • Тегирование почты для легкой группировки сообщений.
  • Расширенный поиск и сохранение результатов.
  • Календарь для планирования встреч.
  • Общий календарь, папки электронной почты, адресные книги и портфель папок.
  • Установка предпочтений почтового ящика, в том числе определяющих параметры фильтрации почты
  • Использование ZCS Documents для создания, организации и шаринга веб-документов
  • Использование задач для создания списков дел и управления задачами


Администрирование Zimbra


Zimbra представляет очень гибкий функционал для администрирования и развертывания. Архитектура программного продукта включает в себя open source разработки, использующие стандартные протоколы. Программное обеспечение сторонних производителей включено в Zimbra и является частью установочного процесса.

Компоненты Zimbra:


  • Сервер веб-приложений Jetty.
  • Postfix, open-source агент передачи почты (MTA).
  • OpenLDAP, открытая реализация LDAP, которая обеспечивает аутентификацию пользователей.
  • База данных MySQL.
  • Lucene, open-source полнофункциональная текстовая поисковая система
  • Антивирус и антиспам open-source компоненты:
  • ClamAV, антивирусный сканер, защищающий от вредоносных файлов
  • SpamAssassin, почтовый фильтр, который пытается идентифицировать спам
  • Amavisd — новые интерфейсы между MTA и одним или более средствами проверки содержимого
  • James/Sieve фильтрация, используемая для создания фильтров для электронной почты.


Возможности администрирования Zimbra:


  • AJAX Web Administration Console.
  • Управление классами обслуживания (CoS)
  • Добавление аккаунтов и доменов
  • Установка ограничений аккаунтов как индивидуальных, так и по CoS
  • Создание и редактирование списков рассылки
  • Совместимость с Microsoft Exchange 2007 / 2010.
  • Миграция из Microsoft Exchange и Domino.
  • Установка виртуальных хостов на домен
  • Управление серверами
  • Просмотр и управление состоянием системы
  • Контролирование использования.


Варианты развертывание Zimbra:


  • Операционные системы: RHEL, CentOS, Oracle Linux и Ubuntu.
  • Облачные сервисы: Oracle Cloud, VMware vCloud, Amazon EWS.
  • Виртуальные машины: VMWare, Xen, KVM.


Минимальные системные требования: Intel/AMD 2.0 GHZ + 8 ГБ Ram, дисковое пространство 10 ГБ

С перепроектированным основанным на браузере интерфейсом Zimbra предлагает самый инновационный способ обмена сообщениями, соединяя конечных пользователей с информацией и действием в их персональных облаках. Почтовый сервис Zimbra Collaboration Suite позволит вам полностью отказаться от бумажной документации и навсегда решить проблему хранения важных документов. Сервис предусматривает удобную архивацию данных и регулирование доступа для определенного круга сотрудников.

Официальный сайтzimbra.com

Zimbra способна составить конкуренцию самым популярным почтовым программам и веб-сервисам, потому что она предлагает целый комплекс решений для бизнес-клиентов.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330550/


iOS 11: каким станет видео в App Store и как это использовать

Четверг, 08 Июня 2017 г. 17:18 + в цитатник


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

Видео появилось в App Store почти три года назад. Я тогда писала об основных требованиях к ролику — и они актуальны до сих пор. Сами ролики останутся примерно такими же — изменится то, как они будут представлены в App Store.


Что нового


  1. Автозапуск видео без звука: раньше ролик о приложении открывался только по клику — зато сразу на полный экран и со звуком. Теперь видео запускается автоматически при пролистывании ленты на главной или при переходе на страницу самого приложения.
  2. Можно заливать до трех роликов вместо одного.
  3. Локализация: для каждого языка, на котором доступно приложение, теперь можно заливать отдельный ролик.
  4. Горизонтальные видео теперь полностью помещаются в экран по ширине и тоже запускаются автоматически.







Презентация новых возможностей App Store на WWDC 2017


Как это использовать


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


Автозапуск


С появлением автозапуска видео в App Store явно будет играть более важную роль.
Если раньше пользователю нужно было кликнуть на превью ролика и смотреть его в полноэкранном режиме, то теперь видео будет запускаться само и сразу привлечет внимание.

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

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



До трех роликов


Скорее всего, большинству приложений по-прежнему будет достаточно одного ролика.

Но для некоторых приложений дополнительные ролики могут быть очень полезны. Например:
  • У вас две разные аудитории с принципиально разными задачами: водители и пассажиры (в сервисах вроде BlaBlaCar), продавцы и покупатели (на досках объявлений), мастера и заказчики.
  • Приложение может работать с внешними устройствами, но это актуально не для всех пользователей: например, шагомер или калькулятор калорий работает как просто с айфоном, так и с фитнес-трекером. Тогда для владельцев трекеров имеет смысл сделать отдельный ролик.
  • У приложения есть важные функции или сценарии использования, которые нужно показать подробнее.


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


Локализация


Локализация особенно важна, если в приложении много контента в текстовом формате: для рекомендательных сервисов, СМИ, блогов, мессенджеров, социальных сетей.

Но как раз в этом случае локализация получится довольно дорогой — по сути, для каждого языка вам придется делать ролик заново: отдельно для каждой версии нужно будет делать скринкаст, переводить титры, заново записывать диктора (если вы используете закадровый голос) и собирать из этого ролик. Процесс можно оптимизировать, но всё равно работы останется много.

Если текста в приложении мало, сделать локализацию намного проще: вы можете использовать один англоязычный скринкаст для всех версий и переводить только титры-перебивки и (при необходимости) закадровый голос.


Горизонтальное видео


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

Как и раньше, горизонтальный ролик можно делать, только если у вашего приложения есть горизонтальная версия. Для вертикального интерфейса такое видео не подходит — оно нарушает правила App Store, и с большой вероятностью не пройдет модерацию.



App Store в iOS 11 явно намного больше заточен под видео, чем все предыдущие версии. За последние три года видео о приложении так и не стало стандартом в App Store — но у ближайшего обновления есть все шансы изменить ситуацию.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330532/


Innovation Summit: «Инновации на каждом уровне»

Четверг, 08 Июня 2017 г. 16:46 + в цитатник
Сегодня мы начинаем вести свой блог на Habrahabr, и в первом посте хочется рассказать о самом масштабном мероприятии Schneider Electric в 2017 году в России – Innovation Summit, которое прошло в Москве в середине апреля.

Innovation Summit – событие международного масштаба, объединяющее экспертов, заказчиков и партнеров компании по всему миру. Ранее Саммит проводился в Париже, Сингапуре и Дубае, а в этом году мы провели его и в России. Тот факт, что мероприятие пришло на российский рынок, а первым днем Саммита стал именно Data Center Day, посвященный центрам обработки данных, говорит о многом.

image



В настоящее время в России повышается уровень технологической оснащенности дата-центров, и именно сейчас важно показать, насколько современные решения могут улучшить работу ЦОДа. Заказчики все больше и больше принимают во внимание не только капитальные расходы, которые компания несет на этапе строительства, но и последующие операционные расходы, возникающие на этапе эксплуатации. Наша практика показала, что только комплексный подход к строительству дата-центров и понимание и анализ взаимного влияния одних систем на другие даст возможность на этапе эксплуатации и развития площадки оптимизировать расходы и снизить эксплуатационные риски. В рамках этого комплексного подхода мы предлагаем решения для всех основных инженерных систем ЦОДа — организации кондиционирования, электроснабжения, автоматизации и управления инфраструктурой, позволяющие оптимизировать затраты и обеспечить надежную работу техники на протяжении всего цикла жизни ЦОДа. Весь спектр доступных в России и странах СНГ решений Schneider Electric, в том числе для ЦОДов, был представлен в рамках Саммита. Также на стенде, посвященном IT Division, были представлены наши новые разработки, касающиеся размещения, электропитания, охлаждения и управления в ЦОДе. Сегодня мы подведем небольшой итог проведенных сессий, круглых столов и дискуссий.

Смотреть видео

Аналитика

Мировой рынок коммерческих ЦОДов демонстрирует неуклонный рост, прогнозируется и увеличение количества облачных проектов. В своем выступлении эти тезисы подтвердил Алексей Солодовников, управляющий директор российского представительства The Uptime Institute. Он привел данные исследования, проведенного 451Research в конце 2016г. Наибольший рост корпоративных дата-центров придется до 2020 г. на Азиатско-Тихоокеанский регион, именно он станет локомотивом глобального роста. Энергопотребление ЦОДов превысит 80 000 000 кВт уже в 2017 году и продолжит расти преимущественно за счет увеличения доли потребления энергии облачными дата-центрами. Таким образом, были выделены ключевые технологические тренды: всё более «облачное» управление центрами обработки данных, усиление тенденции стандартизации и индустриализации, а также увеличение интереса к открытой архитектуре ЦОДов для снижения себестоимости их создания.

image

Аналитики IKS Consulting, выступавшие на Innovation Summit, отметили, что российским компаниям нужно готовиться к взрывному росту видео контента. По данным агентства, с 2016 по 2021 год ожидается 5-кратный рост мобильного трафика в России (вдвое быстрее, чем будет расти фиксированный трафик), причем 78% этого потока к 2021 г. будет составлять именно видео. Требования российского законодательства вносят свой вклад в развитие экосистемы ЦОДа: закон «О персональных данных» обеспечил рост объемов рынка на 10-12%, а «Закон Яровой» потребует хранить еще 157 млрд. гигабайт информации, так что операторам ЦОДов нужно предусмотреть эффективные способы ввода в эксплуатацию сотен новых стоек. По прогнозам iKS, драйверами рынка остаются коммерческие и облачные дата-центры, так как размещать свои мощности на таких площадках планируют 78% работающих в России компаний.

image

В ходе Innovation Summit свое видение будущего рынка ЦОДов представила Наталия Макарочкина, вице-президент подразделения IT Division Schneider Electric в России. Наталия рассказала о том, как сегодня смещаются акценты от централизованной обработки данных к гибридным компьютерным экосистемам, в которых есть и центральный ЦОД, и периферийные вычислительные системы. Так как типичная архитектура облачных сетей имеет свои недостатки, такие как запаздывание, пропускная способность, нормативы, решения по комплексному управлению позволяют их устранить. Комплексные ЦОДы подводят приложения и сервисы ближе к пользователям и «вещам». Мир готовится к тому, чтобы поддерживать огромные потоки данных, в том числе создаваемые Интернетом Вещей (IoT). По прогнозам уже к 2020 году 3% мирового потребления электроэнергии будет приходиться на ЦОДы, и это серьезный вызов для операторов, часто ограниченных в энергоснабжении.

image

Влияние Интернета Вещей (IoT) на перспективы хранения и передачи велико. Как отметил Роман Постников, генеральный директор компании OneFactor, занимающейся разработкой M2M решений для «Мегафона» и других компаний: «IoT – это топливо для искусственного интеллекта». По словам Постникова, сегодня в России идут активные разработки систем и решений для разных отраслей. Ведущие игроки рынка уже сегодня интегрируют данные, полученные множественными сенсорами в системы AI и свои бизнес-процессы.

Российские ЦОДы

На Data Center Day выступили представители российских ЦОДов. В частности, Алексей Солдатов, генеральный директор DataPro, рассказал о том, как меняется рынок и отрасль в последние 5 лет. С технологической точки зрения, произошло увеличение мощностей и улучшение характеристик. Средняя температура в «холодном» коридоре повысилась с 22 градусов до 25, а в горячем – с 26 до 40. И это еще не предел, ожидается дальнейшее увеличение энергопотребления. Уже сейчас энергопотребление на одну стойку составляет не 2,5-3 кВт, а 3,5- 4 кВт, опять же с ожиданием дальнейшего роста. Электроснабжение современных стоек организовано так, что уже не требуется два активных ввода на стойку: теперь можно отключать по одному из них для проведения регламентных работ. Изменился к лучшему и дизайн дата-центров, как внешний вид зданий, так и всех помещений внутри.

image
Новый ЦОД DataPro

Михаил Марголин, директор по развитию бизнеса компании Ростелеком, в свою очередь, привел оценки экономии от использования арендованных мощностей. Компании в России экономят от 35% до 55% бюджета за счет аренды мощностей, в том числе 30% приходится на сокращение энергопотребления и расходов на охлаждение. По словам представителя Ростелекома, сегодня наблюдается большой спрос на российские ЦОДы, особенно в рамках программы импортозамещения.

Новые партнеры

В первый день Innovaton Summit Schneider Electric заключила важные соглашения, согласно которым решения компании для ЦОДов становятся доступнее в России. Во-первых, компания ЦМО, входящая в производственную группу Remer, займётся выпуском серверных шкафов по заказу Schneider Electric. Новая линейка монтажных конструктивов создавалась на базе серии SX и имеет схожие характеристики и базовый функционал. Локализованный продукт позволит найти технический и коммерческий компромисс в проектах.

image

Кроме того, между Schneider Electric и сетью дата-центров 3Data было подписано соглашение о сотрудничестве. В рамках контракта Schneider Electric будет предоставлять заказчику весь спектр инфраструктурного оборудования для оснащения небольших ЦОДов, обеспечивая сокращение издержек и ускорение строительства новых объектов. Новая схема моновендорного сотрудничества позволит 3data работать на особых условиях и гарантировать сокращенные сроки поставок. Ожидается, что упрощенное администрирование заказов оборудования и согласованные заранее технические решения помогут значительно сократить время ввода в строй новых мощностей. Именно в этом и состоит плюс моновендорного подхода к строительству дата-центров.

Инновации для будущего

Важной частью мероприятия стала презентация инновационных решений Schneider Electric. Были представлены методики оптимизации и повышения эффективности работы ЦОДов и снижения энергопотребления, применяемые компанией по всему миру. Эти методики позволяют добиться увеличения холодильной способности системы охлаждения до 15%, снижения потребления инженерной инфраструктуры и ЦОДа в целом на 10-20% и повышения максимально возможной утилизации стоечного пространства (U) на 15-20%.

Была также представлена линейка ИБП Galaxy VM 160кВа — это «младшие» представители нового поколения Galaxy V с литий-ионными батареями. В этом году был выпущен в продажу и старший представитель данного семейства, рассчитанный на мощности от 500кВт до 1500кВт, который можно применять как для крупных дата-центров, так и для централизованной защиты промышленных объектов. Его использование в совокупности с литий-ионными батареями позволяет получить более компактное и легкое по весу решение, имеющее длительный срок службы и расширенные функции контроля по сравнению с традиционными решениями на базе свинцово-кислотных батарей.

image

Cтарший вице-президент подразделения IT Division компании Schneider Electric Филипп Арсено рассказал о применении платформы EcoStruxure в ведущих мировых компаниях, таких как Ferrari, General Motors, SAP, Capgemini и других. Новая экосистема решений для ЦОДов позволила им создавать высокоэффективные дата-центры с высокой плотностью мощности вычислительного оборудования, с системой управления и планирования инженерных ресурсов, позволяющей видеть не только сиюминутную картину, но и перспективы развития.

image

Обратная связь

Мы благодарим всех, кто посетил Innovation Summit 2017, и просим поделиться своими впечатлениями в комментариях, а также предлагаем небольшой опрос.
О каких решениях для ЦОДа вы хотели бы узнать подробнее?

Никто ещё не голосовал. Воздержавшихся нет.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330538/


Метки:  

Генерируем произвольные последовательности на выводах платы Raspberry Pi

Четверг, 08 Июня 2017 г. 16:43 + в цитатник


Автор: Николай Хабаров, Embedded Expert DataArt, евангелист технологий умного дома.

В этой статье я расскажу, как написать обычное user space-приложение на Python для современного ARM-процессора с ОС Linux для генерирования сложных последовательностей импульсов на выводах платы. Суть идеи — использовать DMA-модуль процессора для копирования из предварительно подготовленного буфера в памяти в GPIO с высокой точностью по времени.

Когда речь заходит о необходимости сгенерировать сложную последовательность импульсов, например, для шаговых двигателей, обычно используют старые добрые простенькие микроконтроллеры с установленной специальной операционной системой реального времени или вообще без операционной системы. Реализация при этом, в лучшем случае, написана на C++. Сейчас процессоры шагнули далеко вперед и имеют массу преимуществ: производительность, возможность использования операционной системы Linux со всей инфраструктурой и ПО, а также высокоуровневых языков программирования, таких как Python. И все же современные микроконтроллеры для генерирования сложных последовательностей на выводах GPIO, как правило, не используют.

Я реализовал генерацию импульсов для управления шаговыми двигателями проекта PyCNC — проекта контроллера машин с ЧПУ, станков, 3D-принтеров, полностью написанного на Python и запускаемого на современном ARM-процессоре на плате Raspberry Pi.

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

GPIO


General Purpose Input Output (GPIO) — модуль процессора, который отвечает за установку логических уровней на физических выводах. Как известно, в цифровом мире на выводе может быть «0», т. е. ножка притянута к «земле», либо «1», т. е. ножка притянута к питанию.

Наверняка многие из вас зажигали светодиод, управля одной из ножек микроконтроллера. Например, у микроконтроллеров AVR это делалось установкой соответствующего бита в переменную, или, как ее еще часто называют, регистр PORTx. Что же это за переменная? Если посмотреть заголовочные файлы, там будет нечто наподобие:
#define PORT (*(volatile uint8_t *)(0x12345678))

Иначе говоря, запись состояния вывода — запись этого значения по заранее известному адресу. Обратите внимание, что это — не адрес в оперативной памяти, тем более, не адрес в виртуальной памяти процесса, это адрес в адресном пространстве самого процессора. Физический, где-то внутри чипа, к этому адресу подключен реальный модуль GPIO, к которому мы и обращаемся по этому адресу через ядро процессора, передавая байт информации для установки состояния вывода. И такие модули есть практически у любого процессора. ARM-процессор Raspberry Pi — не исключение. Чтобы узнать, где именно в адресном пространстве расположен каждый модуль, нужно взглянуть на документацию интересующего вас процессора.

Для Raspberry Pi этот документ находится здесь.

В нем по адресу шины 0x7E200000 распологаются регистры GPIO, другими словами, записывая данные в соответствующие адреса, можно управлять состоянием выводов. Сразу отметим, что вся периферия у процессоров Raspberry Pi 1, 2 и 3 одинаковая, отличается только физические адреса, в которые мапятся адреса шины периферии, начиная с адреса 0x7E000000. Для версии 1 Raspberry Pi это будет 0x20000000, для версий 2 и 3 — 0x3F000000. Т. е. для процессора RPi3, чтобы обратиться к адресу шины 0x7E200000, нужно писать по физическому адресу 0x3F200000. В документации по ссылке выше все адреса — адреса шины.

В подавляющем большинстве случаев, на ARM-процессоре будет установлена ОС Linux. Сразу возникает вопрос, как получить доступ к физической памяти. Доступ к ней есть в самом ядре ОС. Мы же хотим сделать обычное приложение, запускаемое в виртуальном адресном пространстве. К счастью, ядро ОС Linux предоставляет доступ к физической памяти через виртуальное устройство '/dev/mem', открыв которое (нам потребуются права суперпользователя), мы можем писать в физическую память. Справедливости ради отметим, что в официальной для Raspberry Pi ОС Raspbian существует еще устройство '/dev/gpiomem,' предоставляемое драйвером 'bcm2835_gpiomem', доступ к которому есть даже без прав суперпользователя — по нулевому отступу сразу идет доступ к первому регистру GPIO.

Давайте слегка развеемся практикой, думаю, так будет проще понять все написанное выше. Напишем простое приложение на Python, которое будет зажигать светодиод, подключенный к выводу GPIO21, работающее на Raspberry Pi 2 и 3 (для RPi1 поправьте адрес в листинге). Вместо Python здесь можно использовать любой другой язык программирования, способный вызывать системные функции из libc.so. Вот, собственно, код:


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

Пять верхних строчек — импорт необходимых стандартных Python-модулей.

В 7-й строке мы непосредственно открываем файл '/dev/mem' чтобы получить доступ к памяти.

В 8-й строке мы вызываем системную функцию memmap, которая спроецирует наш, хоть и виртуальный, файл на виртуальное адресное пространство процесса. Т. е., записывая в виртуальную память процесса, мы будем реально писать в физическую память. В коде также указан отступ, начиная с какого адреса проецировать память, и длина (mmap.PAGESIZE). Мы указываем адрес первого регистра GPIO и длину размером в одну страницу памяти. С первого взгляда может показаться, что достаточно просто открыть '/dev/mem', отступить до нужного адреса и начать писать файл, но, увы, так сделать не получится.

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

В 11–14-й строках мы читаем и пишем в регистр с отступом 0x08. Если взглянуть в документацию, это регистр GPFSEL2 GPIO Function Select 2. С помощью этих регистров мы выбираем, какую функцию будет выполнять ножка чипа. В данному случае мы выставляем (сначала очищаем, затем выставляем при помощи операции ИЛИ) 3 бита начиная с третьего в 001, чтобы вывод работал как выход. Дело в том, что выводов довольно много, чтобы выставить различные режимы, одного регистра недостаточно, поэтому регистры разделены на группы по 10 выводов в каждой — отсюда такая магия с числами.

В 16-й и 22-й строках мы устанавливаем обработчик, ожидающий нажатия Ctrl+C на клавиатуре для выхода из программы.

На 17-й строке мы запускаем бесконечный цикл.

В 18-й строке мы переводим вывод в высокое состояние, записывая битовую маску в регистр GPSET0.

На 19-й и 21-й строчке мы реализуем задержку в половину секунды.

В 20-й строке мы переводим вывод в низкое состояние, записывая битовую маску GPCLR0.

На строках 25 и 26 мы прибираем за собой: деинициализируем пин, переводя в дефолтное состояние — вход — и закрываем маппинг памяти.

Небольшое замечание: у BCM2835 нет регистров, аналогичных PORTA, как у AVR, т. е. мы не можем сразу записать состояние (высокий или низкий уровень) всех пинов разом. Есть только регистр SET, который позволяет устанавливать логические единицы на всех пинах, где в битовой маске указаны единицы, и регистр CLEAR, который позволяет установить логические нули на всех пинах, где в битовой маске указаны единицы.

Запустив этот код с правами суперпользователя на Raspberry Pi 2 или 3, например, через команду 'sudo python gpio.py', и подключив светодиод к выводу 21, мы увидим, что он мигает.

Если вам нужна готовая реализация управления пинами GPIO, можете использовать класс GPIO из этого файла.

Шаговые двигатели


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

Вместо это сразу перейдем к реальности, где у шагового двигателя имеется 4 или 5 выводов от четырех обмоток. Токи, необходимые для вращения двигателя, довольно велики — ни один микроконтроллер или процессор обеспечить такие не сможет. Также для создания таких токов необходимо напряжение, как правило, превышающее напряжение логики процессора. Поэтому с шаговыми двигателями применяют специализированные микросхемы — драйверы, иногда даже интегрированные в корпус двигателя. Простейшие драйверы (например, ULN2003) просто предоставляют низкоточные входы управления обмотками, совместимые со стандартным напряжением логики микроконтроллеров. С таким драйвером придется генерировать последовательность импульсов для каждой обмотки. Большинство же драйверов, включая одни из самых популярных A4988 и DRV8825, берут всю головную боль по работе с обмотками двигателя на себя. Они предоставляют простой интерфейс из двух низкоточных выводов STEP и DIR. Как можно догадаться из их названий, при подаче импульса на STEP драйвер двигает двигатель на один шаг (также драйвер можно сконфигурировать на так называемые микрошаги, т. е. движения на 1/2, 1/4 и т. д. шага — это достигается приемами работы с обмотками). Вывод DIR используется для выбора направления вращения двигателя в зависимости от того, приложен к нему низкий или высокий уровень.

Типовая схема включения A4988 выглядит так (картинку я заимствовал на просторах интернета):



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

Этот подход к управлению двигателями с выводами STEP и DIR наиболее универсален, т. к. такое подключение позволяет реализовать на самом микроконтроллере практически любые изыски. Например, у читателя может возникнуть вопрос — есть ли драйверы с I2C или UART-интерфейсом? Теоретически, такой драйвер можно сделать, но для управления тем же 3D-принтером нужно синхронно управлять несколькими шаговыми двигателями. Причем и у каждого из них могут быть разные параметры ускорения, количество шагов на миллиметр, максимальные скорости. В итоге подобный драйвер по своей сложности был бы аналогом контроллера CNC (ЧПУ).

Как вы могли догадаться, описанным выше методом управления GPIO нельзя добиться правильного формирования импульсов на выводах. Дело не только в том, что задержки при выполнении Python-кода непредсказуемы. Даже если реализовать все на C и в виде ядерного модуля OC Linux, мы не добьемся хорошего результата, т. к. Linux — не операционная система реального времени. В любой момент ядра процессора могут переключиться на выполнение какой-либо другой задачи, и мы не дадим импульс вовремя. Но разве такие мелочи могут остановить нас на пути к задуманному!

DMA


Direct Memory Access — специализированный аппаратный модуль процессора, позволяющий копировать память из одного места в другое, не прибегая к услугам самих ядер центрального процессора. Такие модули существует даже у простых микроконтроллеров, однако реализация сильно различается от одной модели процессора к другой. У Raspberry Pi реализация довольно средненькая — есть все, что нужно, но без излишеств. А, например, у Rockchip RK3399 DMA-модуль больше напоминает мини-ядро процессора с собственным, хоть и небольшим, набором инструкций.

Я не ставлю перед собой задачу написать полный перевод оригинальной документации. И расскажу всего лишь об основных регистрах, которые позволят нам запустить DMA-модуль в режиме копирования данных в GPIO-модуль.

Как вы могли предположить, мы будем генерировать в памяти буфер и копировать его по адресу расположения GPIO-модуля. Но для работы DMA-модуля необходимо, чтобы этот буфер располагался где-то в физической памяти. Естественно, любая виртуальная память, если она не попала в swap, будет также находится в физической памяти. При помощи '/proc/self/pagemap' можно получить таблицу маппинга памяти собственного процесса в физическую память, т. е. выделить буфер и затем найти его физический адрес.

Но с DMA так делать не стоит — все из-за той же возможности попадания памяти в swap и того, что менеджер памяти операционной системы может перенести вашу выделенную память в другое место. Можно написать простенький ядерный модуль, который будет при загрузке вызывать метод из ядра Linux kmalloc() — этот метод выделяет и также блокирует память от возможных переносов. Затем вы отдаете приложению адрес выделенной памяти, например, через виртуальное устройство. Имея этот адрес, приложение может получить доступ к памяти абсолютно тем же методом, который был описан в разделе GPIO. Адрес или буфер, который мы выделили, можно использовать с DMA-модулем.

Но писать ядреный модуль, пусть и предельно простой, вам, вероятно не захочется.

Хорошо, есть и готовое решение — виртуальное устройство '/dev/vcio'. Оно создается драйвером видеокарты Raspberry Pi. Для общения VideoCore и ЦП используются так называемые mailboxes, которые, по сути, кусочки, выделенные в памяти, отведенной для видеокарты. По умолчанию, видеокарте выделяется 64 МБ, а при желании это значение можно изменить. То, что мы выделим немного ресурсов из видеопамяти для наших нужд, на работу видеокарты не повлияет, главное, не отобрать слишком много. На практике для нормального функционирования рабочего стола ОС Raspbian достаточно 30-35 МБ памяти, т. е. примерно половины. Т. ч. вторая половина полностью доступна нам, если мы не планируем запускать приложения, использующие OpenGL. Тем более, выделение части памяти для передачи в сам GPU — штатная процедура. И, если мы будем выделять память, но не отдавать ее видеопроцессору, никаких проблем не возникнет. Вот официальный пример, который использует такое выделения памяти.

Этот процесс довольно тривиален, хотя и скрыт за магическими цифрами в коде. Открываем /dev/vcio, затем, используя метод ioctl() передаем структуру с запросом и получаем ответ. Нам нужно выделить память и заблокировать ее, чтобы менеджер памяти никуда не утащил выделенный нами кусочек. Можете посмотреть реализацию по ссылке выше, нас интересуют методы mem_alloc(), mem_lock() и, конечно, методы, позволяющие прибрать за собой mem_unlock(), mem_free(). Если вас смущает реализация на C, можно переписать эти методы на любой другой язык.

Ну хорошо. Место, где выделять буфер, мы нашли. Теперь необходимо как-то запрограммировать DMA, чтобы он выполнил то, что мы хотим. Еще раз напомним, что DMA-модуль — всего лишь несколько регистров в физической памяти. Управление им происходит все так же — записью структур по нужным адресам. Всего у Raspberry Pi 16 DMA-каналов. Первые восемь полнофункциональные, остальные восемь по функционалу немного ограничены. У каждого канала — свой набор регистров. Базовый адрес шины DMA модуля — 0x7E007000, т. е. для Raspberry Pi 2 или 3 нужно писать по адресу 0x3F007000. Здесь располагается первый регистр первого канала DMA. Каждый последующий находится со сдвигом 0x100 (за исключением 15, он расположен на 0x7EE05000).

Каким же каналом воспользоваться? Выбор довольно сложен, т. к. каналы могут быть использованы ядром. Можно узнать, какие именно каналы использованы, у самого ядра через sysfs командой 'cat /sys/class/dma/dma0chan*/in_use'. Как правило, стоит избегать использования 0, 1, 2, 3, 6, 7 каналов, т. к. их используют ридер microSD-карточки и драйвер видеоплаты.

Основные регистры для управления DMA-модулем — CS и CONBLK_AD. Именно заполняя их, мы запускаем DMA. Первый регистр CS, в нем нас интересуют поля:

Бит
номер
Поле Описание Доступ
31 RESET Запись единицы сбрасывает DMA-модуль. W
1 END При записи единицы сбрасывается флаг окончания передачи. W
0 ACTIVE При записи единицы DMA начнет работать. С помощью этого поля
можно ставить DMA на паузу. После окончания передачи поле
автоматически примет значение 0.
RW


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

В регистр CONBLK_AD записывается адрес, в котором лежит так называемый контрольный блок, описывающий, что делать DMA-модулю. При этом контрольные блоки представляют собой связанный список, т. е. с помощью несколько контрольных блоков можно выстроить цепочку из различных задач. DMA-модуль, выполнив задачи, автоматически пройдется по всем контрольным блокам. Именно с адреса в CONBLK_AD DMA-модуль начнет выполнение копирования при установке бита ACTIVE в регистре CS.

Контрольный блок должен обязательно храниться в памяти с выравниванием в 32 байта (5 младших бит адреса должны быть нулевыми). А теперь давайте посмотрим, как устроен контрольный блок:

Отступ, байт Поле Описание
0 TI Набор различных флагов, задающих параметры копирования данных.
4 SOURCE_AD Адрес источника, из которого начинать копирование.
8 DEST_AD Адрес назначения, в который производить копирование.
12 TXFR_LEN Количество байт, которое необходимо скопировать.
В специальном 2D-режиме старшие 16 бит задают
количество циклов копирования, младшие 16 бит —
количество байт, которое необходимо скопировать за цикл.
16 STRIDE Используется только в 2D-режиме. Младшие 16 байт
хранят знаковое число, задающее, насколько нужно сдвинуть
адрес источника перед началом следующего цикла.
Старшие 16 байт хранят знаковое число, на которое нужно
сдвинуть адрес назначения перед началом следующего цикла.
20 NEXTCONBK Указатель на следующий контрольный блок.


Каналы с 0 по 7 поддерживают 2D-режим (задается флагом TDMODE(бит 1) в поле TI контрольного блока), который позволяет организовать X копирований по Y байт. При этом адреса назначения и/или источника перед каждым копированием могут быть увеличены/уменьшены на некоторую величину, согласно полю STRIDE в контрольном блоке.

У каждого DMA-канала существует еще набор регистров TI, SOURCE_AD, DEST_AD, TXFR_LEN, STRIDE, NEXTCONBK, которые можно только читать. Они загружаются из текущего контрольного блока.

Что ж, попробуем сделать что-нибудь простое с DMA и GPIO-модулями на Python.
Чтобы листинг программы не был утомительно длинен и не содержал лишних магических цифр, давайте возьмем немного готового кода из этого файла.

Из него мы будем использовать константы и классы 'PhysicalMemory' (доступ к физической памяти, как мы делали это в примере с GPIO) и 'CMAPhysicalMemory' (это реализация выделения физической памяти с использованием видеодрайвера /dev/vcio, о котором мы писали выше).



Когда вы запустите эту программу(не забудьте запустить с правами суперпользователя), светодиод, подключенный к 21-му выводу, на полсекунды загорится на полную яркость (чтобы была заметна разница), а затем будет светиться на половину яркости, пока вы не нажмете клавишу enter. Давайте разберем построчно.

2–3-я строки — импорт модулей.

5-я и 6-я — переменные указывающие какой DMA канал и вывод GPIO мы используем.

8–15-я — инициализируем указанный GPIO-вывод как выход и зажигаем на полсекунды (чтобы глазом была хорошо заметна разница, когда включится DMA). По сути, это то же самое, что мы делали в первой программе, но написанное на чуть более высоком уровне.

17-я строка — просим видеодрайвер выделить нам 64 байта в памяти. В классе CMAPhysicalMemory память выделяется с выравниванием равным размеру страницы, т. е. 4096 байт, поэтому при использовании этой памяти, начало выделенной памяти всегда также будет выровнено по 32 байтам, которые требуются DMA-модулю.

18-я строка — заполняем первую структуру контрольного блока. На этом остановимся чуть подробнее.

19-я строка — первые 4 байта — флаги TI (Transfer Information). Мы используем DMA_TI_NO_WIDE_BURSTS — отключаем burst-режим — оптимизацию для копирования памяти — нам же надо, чтобы память копировалась строго, как мы хотим.
DMA_TI_WAIT_RESP — DMA-модуль при каждой записи будет ожидать подтверждения записи со стороны принимающего модуля.
Еще могут быть полезны флаги DMA_TI_SRC_INC и DMA_TI_DST_INC — по умолчанию, DMA-модуль будет читать и писать всегда по одному адресу по 4 байта. Установив эти флаги, мы скажем DMA-модулю, что после каждой записи нужно увеличить адрес источника и/или назначения. Полный список флагов есть в документации.

20-я строка — продолжаем заполнять остальные поля контрольного блока, которые обсуждали выше. Обратите внимание, что адреса, которые мы используем (физические) нужно транслировать в адреса шины (вызов метода get_bus_address()). Еще в этой строке можно увидеть, что мы используем байты, предназначенные для выравнивания структур контрольных блоков, как хранилище наших данных. Не пропадать же им.

21-я строка — указываем записывать данные по адресу GPIO-модуля в регистр SET, т. е. запись единиц будет переводить пины в высокий уровень, нули никак не будут влиять на выводы.

22-я — указываем длину передачи — 4 байта.

23-я строка — stride, мы его не используем, поэтому пишем 0.

24-я строка — поле next control block, ссылаемся на следующие 32 байта.

25-я строка — выравнивание, но как мы помним, в 21-й строке мы указали именно эти 4 байта как источник, поэтому кладем туда полезную информацию, а именно — тот бит, который мы должны передать в GPIO.

26 строка — выравнивание.

28–37-я строки — заполнение второй, такой же структуры. Но теперь мы пишем в регистр CLEAR модуля GPIO, чтобы переводить пин в низкий уровень. И в качестве следующего блока используем наш первый блок, чтобы закольцевать передачу.

38–39-я строки — записываем наши контрольные блоки в физическую память.

41-я строка — получаем доступ к памяти с DMA-модулем с указанным каналом.

42-43-я строки — сбрасываем DMA-модуль.

44-я строка — заполняем адрес первого контрольного блока.

45-я строка — запускаем DMA-модуль.

47-я строка — ждем нажатия клавиши Enter.

49–52-я строки — прибираем за собой. Останавливаем DMA-модуль и переводим наш вывод в дефолтное состояние (вход).

Если вместо светодиода подключить осциллограф, мы увидим такую картинку:



Картинка получена с выводов платы Raspberry Pi 2. Как видите, частота около 1.5 МГц — почти предел (можно еще под оптимизировать и получить ~2 МГц) для такого метода, да и по осциллограмме видно, что прямоугольники становятся уже не совсем прямоугольными.

Сюрпризы DMA


Казалось бы, вот оно, счастье — мы можем задавать произвольное количество DMA-блоков с самыми хитрыми записями в GPIO-модуль. Сам DMA — аппаратный модуль, который тактируется от физического генератора на чипе, все должно быть хорошо… Но нет, есть еще пара сюрпризов.

С помощью DMA такими записями можно добиться разрешения порядка 1 микросекунды. Этого достаточно, чтобы сгенерировать импульс на вывод STEP, который, как правило, должен быть около 2 микросекунд. Из этого следует, что разрешающая способность для генерирования импульсов для шаговых двигателей должна быть 2 микросекунды, т. е. 500 000 записей на секунду. На каждую запись желательно отводить 4 байта, чтобы контролировать все ножки. Из этого следует: чтобы запустить двигатели на 1 минуту (например простое перемещение на 200 мм со скоростью 200 мм/мин — довольно реалистичное действие), нам понадобиться 114 МБ. А скорость может быть в два раза ниже — тогда потребуется уже 228 МБ. Немного расточительно, не так ли? Но, кроме этого, возникнет еще и необходимость быстро сгенерировать такой объем информации. Даже простое обнуление 114 МБ займет много времени.

Также не будем забывать об основном назначении DMA-модуля — копировать память из одного участка в другой. DMA-модуль будет пытаться сделать это как можно быстрее — так он и задуман. При этом существуют и, например, полоса пропускания памяти, и этой полосы, естественно, не будет хватать, если все 16 каналов и 4 ядра процессора на нее накинуться. Тут будут возникать случайные задержки, т. к. кому-то из желающих обратиться к памяти придется ждать, и ни о какой точности генерирования импульсов во времени речи не будет. Выше мы посчитали, что потребуется внушительный буфер, а ведь его тоже придется читать из памяти.

В таком виде управление GPIO через DMA вполне имеет право на жизнь, если речь идет об управлении чем-либо инерционным. Например, так можно реализовать ШИМ для нагревателя экструдера или стола 3D-принтера. Но шаговыми двигателями так управлять нельзя. Что же делать и как быть?

Давайте оптимизировать объемы и искать пути синхронизации.

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



Осциллограмма вверху показывает, как бы менялся уровень на выводе GPIO, которым мы управляем на временной дорожке с контрольными блоками DMA (масштаб не соблюден). «Пауза 1» задает длительность самого импульса, «Пауза 2» — паузу между импульсами. При такой организации блоков объем занимаемой памяти будет гораздо ниже. Возьмем упоминавшийся ранее пример с перемещением двигателем на 200 мм со скоростью 200 мм/мин. Тут уже для задания скорости нужно будет менять значение «Пауза 2», не трогая при этом общее количество блоков. Количество блоков будет зависеть от количества импульсов, которые мы хотим создать, т. е. от длины перемещения, а не от его скорости. А физические размеры любой CNC-машины конечны.

В том же примере (200 мм при 400 импульсах на мм — 80 000 импульсов) каждый импульс будет занимать 128 байт (четыре контрольных блока по 32 байт), а суммарный объем буфера DMA будет ~9.8 МБ. Экономия налицо. Конечно, мы бы хотели управлять большим количество двигателей одновременно, в этом случае количество контрольных блоков возрастет. Но в классическом 3D-принтере четыре мотора, т. е. нам потребуется не более 39.2 МБ, а учитывая, что многие импульсы могут совершаться в одно и тоже время (в одном контрольном блоке мы по-прежнему можем выставлять несколько выводов), и того меньше.

С объемом и нагрузкой на память разобрались, как теперь быть с точностью? Здесь задача сводится к тому, чтобы в принципе сделать паузы, да еще и сделать их максимально точными, т. к. время записи в модуль GPIO довольно стабильно. Для этого используем специальную возможность DMA-модуля — ожидание сигнала готовности стороннего модуля. Удобнее всего использовать модуль PWM (да, тот, который может генерировать импульсы на ножках, но мы используем его без выведения сигналов на ножки). Если модуль PWM запустить в режиме сериализации данных, он также будет генерировать сигналы готовности, понятные DMA при заполнении FIFO-буфера модуля PMW. При этом сам PWM-модуль не зависит от памяти и всегда работает со стабильной частотой. При таком решении, паузы будут зависеть от частоты PWM модуля и количества байт, которые мы будем класть в FIFO.

Чтобы заставить DMA-модуль ожидать сигналов готовности PWM-модуля, нужно установить флаг PERMAP в регистре TI контрольных блоков, выполняющих задержки, в значение 5, и запустить PWM-модуль в режиме сериализации с необходимой нам частотой.

Поскольку здесь поставлена более специфическая задача и ее реализация выходит за рамки короткого и простого листинга программы, предлагаю ознакомиться с этой реализацией самостоятельно по ссылке, класс DMAGPIO. Можете посмотреть на пример использования классов из модуля rpgpio, это тот самый код, который генерировал импульсы для картинки в самом начале статьи (последовательность из 1, 2, 3, 4 и 5 импульсов). Осциллограмма более крупно:



Код довольно простой, поэтому комментарии, думаю, не нужны.

import rpgpio
 
PIN=21
PINMASK = 1 << PIN
PULSE_LENGTH_US = 1000
PULSE_DELAY_US = 1000
DELAY_US = 2000
 
g = rpgpio.GPIO()
g.init(PIN, rpgpio.GPIO.MODE_OUTPUT)
 
dma = rpgpio.DMAGPIO()
for i in range(1, 6):
    for i in range(0, i):
        dma.add_pulse(PINMASK, PULSE_LENGTH_US)
        dma.add_delay(PULSE_DELAY_US)
    dma.add_delay(DELAY_US)
dma.run(True)
 
raw_input("Press Enter to stop")
dma.stop()
g.init(PIN, rpgpio.GPIO.MODE_INPUT_NOPULL)


Еще немного об элегантных технических решениях на DMA-модулях



Говоря о DMA-модуле, нельзя не упомянуть очень красивый проект, реализующий FM-трансмиттер на плате Raspberry Pi — вот он.

Проект также использует DMA-модуль, авторы говорят о возможности генерировать несущую до 250 МГц. Очевидно, что DMA-модуль простым копированием буфера не сможет передать сигнал с частотной модуляцией на такой частоте. Реализация хитра и красива. Несущая обеспечивается модулем PWM (в данном случае сигнал PWM выводиться на ножку, которая жестко выбирается из доступных для PWM-модуля и является антенной), которому вполне под силу генерировать прямоугольники с такой частотой. А, как известно, первая гармоника спектра периодического прямоугольного сигнала как раз и будет нужным нам синусом для несущей частоты. Затем, используя DMA-модуль, аудиоданные копируют во все тот же PWM-модуль, сдвигая его частоту, и тем самым добиваются частотной модуляции.

PRU


На платах BeagleBone тоже имеется так называемый PRU (programmable real-time unit), который представляет собой 200 МГц 32-битный сопроцессор с доступом к выводам, памяти и другой периферии процессора AM3358. Это некое сочетание современного процессора и классического микроконтроллера на одной плате. С помощью этого решения также можно генерировать цифровые сигналы сложной формы и управлять шаговыми двигателями. В этой статье рассматривать такое решение мы подробно не будем — всего лишь обозначим факт его существования.

Заключение



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

Как видите, современные процессоры вполне способны выполнять задачи, которые обычно перекладывают на классические микроконтроллеры. При этом мы можем использовать весь арсенал окружения современного процессора и реализовывать куда более современные вещи, обращаясь для достижения цели к более продвинутым средствам разработки. Если взглянуть на стоимость Raspberry Pi Zero, становится понятно, что цена процессора не будет сильно влиять на стоимость изделия.

В завершение — небольшое видео, демонстрирующее, как работает этот подход на реальном железе:


Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330536/


[Перевод] Написание современного JavaScript кода

Четверг, 08 Июня 2017 г. 16:39 + в цитатник
А вы помните те времена, когда JavaScript был языком, который использовали только для оживления страниц сайта? Это время уже прошло, так как, языки программирования развиваются вместе с методами их использования. Посмотрите на код, который вы написали один, два года назад: он вас смущает? Если да, этот пост для вас.



Ниже вы найдете мой список из хороших практик, которые помогут сделать ваш JavaScript код проще в написании, чтении и поддержке.

Используйте линтер для форматирования вашего кода


Первый совет, который я вам дам это использование линтера. Он создан для проверки, соблюдения единого стиля в вашем коде. Это позволит сделать код консистентным во всех .js файлах. Очень полезно использовать линтер в командной работе — это позволит сделать стиль кода единым среди всех разработчиков одного проекта.

Что более важно, линтер делает исправления в вашем коде, когда это возможно. ESLint, например, делает довольно таки хорошо (используйте опцию --fix) и он отлично интегрируется с популярными IDE.

Вы также можете использовать Prettier, если сравнивать с ESLint, он больше сфокусирован на форматировании кода. Разница между ними небольшая.

Следующие пункты помогут вам выбрать какие правила использовать с линтером:

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


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

  • Используйте 2 пробела для табуляции
  • Не используйте точки с запятой (мне это показалось очень странным, но через несколько дней я привык)
  • Пробелы после ключевых слов (например if) и фигурных скобок
  • И другие

StandardJS может устанавливаться в виде отдельного Node модуля. Но если вы хотите использовать его в большом проекте с существующей кодовой базой и отключить некоторые правила, используйте ESLint predefined config. Я например отключил no-mixed-operators и import/no-webpack-loader-syntax.

Используйте новые фишки ES2015+


Вы скорее всего, слышали об изменениях в ES2015+ (или ES6, ES7…). Вот несколько, без которых я больше не могу жить:

  • Arrow functions: написание функций типа x => x*2 очень полезно в функциональном программировании
  • Классы: перестаньте использовать прототипы, классы гораздо круче
  • Операции с массивами и объектами:

function doSomething() {
  const a = doSomethingElse()
  const b = doSomethingWithA(a)
  const otherResults = { c: '', d: '' }
  return { a, b, ...otherResults } // equivalent to { a: a, b: b }
}
const { a, c, ...rest } = doSomething() // Also works with arrays!
// `rest` looks like { b: ..., d: '' }

  • Создание промисов становится легче с async/await:

// Please try to write the same code with classic promises ;)
async function doSomething() {
  const a = await getValueForA()
  const b = await getValueForBFromA(a)
  const [c, d] = await Promise.all([
    // parallel execution
    getValueForC(), getValueForDFromB(b)
  ])
  const total = await calculateTotal(a, b, c, d)
  return total / 1000
}

Используйте функциональное программирование


Вокруг данной темы точится много споров. Но не смотря на это, функциональное программирование набирает популярность и не только в JavaScript. В чем причина? Оно делает код более предсказуемым, безопасным и гораздо более поддерживаемым. Вот вам несколько простых советов:

Для начала перестаньте использовать for для циклов. В большинстве случаев они вам не нужны. Доказательство:

const arr = [{ name: 'first', value: 13 }, { name: 'second', value: 7 }]

// Instead of:
const res = {}
for (let i = 0; i < arr.length; i++) {
  const calculatedValue = arr[i].value * 10
  if (calculatedValue > 100) {
    res[arr[i].name] = calculatedValue
  }
}

// Prefer:
const res = arr
  .map(elem => ({ name: elem.name, calculatedValue: elem.value * 10 }))
  .filter(elem => elem.calculatedValue > 100)
  .reduce((acc, elem) => ({
    [elem.name]: calculatedValue,
    ...acc
  }), {})

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

const enrichElementWithCalculatedValue =
  elem => ({ name: elem.name, calculatedValue: elem.value * 10 })
const filterElementsByValue = value =>
  elem => elem.calculatedValue > value
const aggregateElementInObject = (acc, elem) => ({
  [elem.name]: calculatedValue,
  ...acc
})
const res = arr
  .map(enrichElementWithCalculatedValue)
  .filter(filterElementsByValue(100))
  .reduce(aggregateElementInObject, {})

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

Обратите внимание, что три локальные функции не изменяют контекст, в котором они выполняются. Не меняют внешние переменные, не обращаются к внешним сервисам… В функциональном программировании они называются pure (чистыми) функциями. У них есть большие преимущества:

  • Их легко тестировать, поскольку из заданных параметров возможен только один возможный результат, даже если мы вызываем функцию несколько раз;
  • Они гарантированно дают одинаковый результат независимо от фактического состояния приложения;
  • Состояние приложения остается прежним до и после вызова функции.

Исходя из вышесказанного, мой третий совет: используйте такие функции как можно чаще!

Несколько советов в завершение


  • Привыкайте работать с асинхронным кодом, как можно чаще используйте промисы, посмотрите на observales в RxJS (вот отличный туториал по функциональному реактивному программированию)
  • Пишите тесты! Возможно вам это покажется очевидным, но я знаю кучу проектов с непроверенным кодом. Хотя тестирование на JavaScript (front или backend) не так сложно, как кажется.
  • Используйте последние возможности языка: например, прекратите писать arr.indexOf(elem) !== -1. Замените это на arr.includes(elem).
  • Читайте много технических статей: subreddit JavaScript — очень хороший источник черпания информации о самых крутых практиках в экосистеме.

И в заключение самый важный совет, который я могу вам дать: всегда занимайтесь рефакторингом! Попробуйте улучшить модуль, который вы написали год назад. Попробуйте заменить var на const, используйте стрелочные функции или async / await чтобы упростить код… Всегда приятно работать с простым и понятным кодом.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330534/


Метки:  

Поиск сообщений в rss_rss_hh_new
Страницы: 1437 ... 999 998 [997] 996 995 ..
.. 1 Календарь