Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 24006 сообщений
Cообщения с меткой

microsoft - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

Единорог, который смог

Среда, 22 Июня 2016 г. 15:15 (ссылка)

The Little Unicorn That CouldОдна из команд разработчиков Microsoft уже использует в работе анализатор PVS-Studio. Это хорошо, но недостаточно. Поэтому я продолжаю демонстрировать, какую пользу может приносить статический анализ кода на примере проектов Microsoft. Три года назад мы проверяли проект Casablanca и не смогли в нём ничего обнаружить. За это проект был отмечен медалью «безбажный код». Прошло время, проект развивался и рос. В свою очередь, анализатор PVS-Studio существенно продвинулся в возможностях анализа кода. И наконец я могу написать статью об ошибках, которые анализатор выявляет в проекте Casablanca (C++ REST SDK). Ошибок мало, но то, что теперь их достаточно для написания статьи, говорит о эффективности PVS-Studio.



Casablanca



Как я уже отметил в аннотации, мы уже проверяли проект Casablanca. Вы можете прочитать про это в статье "Маленькая заметка о проекте Casablanca".



Casablanca (C++ REST SDK) это небольшой проект, написанный на современном C++. Говоря о современном языке C++, я имею в виду, что в коде активно используется семантика перемещения (move semantics), лямбда-функции, auto и так далее. Новые возможности языка C++ позволяют писать более короткий и надёжный код. Это подтверждается тем, что найти ошибки в этом проекте непростая задача. Хотя обычно мы делаем это крайне легко.



Для заинтересовавшихся, какие ещё проекты Microsoft мы проверяли, привожу список статей, посвященных этим проверкам: Xamarin.Forms, CNTK, Microsoft Edge, CoreCLR, Windows 8 Driver Samples, библиотека Visual C++ 2012 / 2013, CoreFX, Roslyn, Microsoft Code Contracts, и скоро появится статья про проверку WPF Samples.



Итак, проект Casablanca является образцом хорошего, качественного кода. Давайте посмотрим, что же все-таки можно найти в нём с помощью статического анализатора кода PVS-Studio.



Что удалось найти плохого



Фрагмент N1: опечатка



Имеется структура NumericHandValues, содержащая два члена: low и high. Вот объявление этой структуры:

struct NumericHandValues
{
int low;
int high;
int Best() { return (high < 22) ? high : low; }
};


А теперь посмотрим, как в одном месте инициализируется эта структура:

NumericHandValues GetNumericValues()
{
NumericHandValues res;
res.low = 0;
res.low = 0;

....
}


Предупреждение PVS-Studio: V519 The 'res.low' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 130, 131. BlackJack_Client140 messagetypes.h 131



Как видите, случайно два раза инициализировали член low, но при этом забыли инициализировать high. Глубокомысленный комментарий здесь написать сложно. Просто никто не застрахован от опечаток.



Фрагмент N2: ошибка освобождения памяти

void DealerTable::FillShoe(size_t decks)
{
std::shared_ptr ss(new int[decks * 52]);
....
}


Предупреждение PVS-Studio: V554 Incorrect use of shared_ptr. The memory allocated with 'new []' will be cleaned using 'delete'. BlackJack_Server140 table.cpp 471



По умолчанию умный указатель типа shared_ptr для уничтожения объекта вызовет оператор delete без квадратных скобок []. В данном случае это неправильно.



Корректный вариант кода должен быть таким:

std::shared_ptr ss(new int[decks * 52],
std::default_delete());


Фрагмент N3: потерянный указатель



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

std::unique_ptr
http_server_api::s_server_api((http_server*)nullptr);


Подозрение вызывает код следующей функции:

void http_server_api::unregister_server_api()
{
pplx::extensibility::scoped_critical_section_t lock(s_lock);

if (http_server_api::has_listener())
{
throw http_exception(_XPLATSTR("Server API ..... attached"));
}

s_server_api.release();
}


Предупреждение PVS-Studio: V530 The return value of function 'release' is required to be utilized. cpprestsdk140 http_server_api.cpp 64



Обратите внимание на «s_server_api.release();». После вызова функции release умный указатель больше не владеет объектом. Указатель на объект «теряется» и объект будет существовать до конца жизни программы.



Скорее всего, мы вновь столкнулись с опечаткой. Я думаю, что хотели вызвать функцию reset, а вовсе не.



Фрагмент N4: не тот enum



В проекте имеется два перечисления BJHandState и BJHandResult, объявленные следующим образом:

enum BJHandState {
HR_Empty, HR_BlackJack, HR_Active, HR_Held, HR_Busted
};
enum BJHandResult {
HR_None, HR_PlayerBlackJack, HR_PlayerWin,
HR_ComputerWin, HR_Push
};


А теперь посмотрим на фрагмент кода из функции PayUp:

void DealerTable::PayUp(size_t idx)
{
....
if ( player.Hand.insurance > 0 &&
Players[0].Hand.state == HR_PlayerBlackJack )
{
player.Balance += player.Hand.insurance*3;
}
....
}


Предупреждение PVS-Studio: V556 The values of different enum types are compared. Types: BJHandState, BJHandResult. BlackJack_Server140 table.cpp 336



Переменная state имеет тип BJHandState. А это значит, что программист запутался в перечислениях. По всей видимости код должен был выглядеть так:

if ( player.Hand.insurance > 0 &&
Players[0].Hand.state == HR_BlackJack )


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



Фрагмент N5: странный break

web::json::value AsJSON() const 
{
....
int idx = 0;
for (auto iter = cards.begin(); iter != cards.end();)
{
jCards[idx++] = iter->AsJSON();
break;
}
....
}


Предупреждение PVS-Studio: V612 An unconditional 'break' within a loop. BlackJack_Client140 messagetypes.h 213



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



Прочие мелочи



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

inline web::json::value
TablesAsJSON(...., std::shared_ptr> &tables)
{
web::json::value result = web::json::value::array();

size_t idx = 0;
for (auto tbl = tables.begin(); tbl != tables.end(); tbl++)
{
result[idx++] = tbl->second->AsJSON();
}
return result;
}


Предупреждение PVS-Studio: V803 Decreased performance. In case 'tbl' is iterator it's more effective to use prefix form of increment. Replace iterator++ with ++iterator. BlackJack_Client140 messagetypes.h 356



Это, конечно, не ошибка. Однако, хорошим стилем считается использование преинкремента: ++tbl. Для тех, кто сомневается, что в этом есть смысл, я отсылаю к следующим двум статьям:

  1. Есть ли практический смысл использовать для итераторов префиксный оператор инкремента ++it, вместо постфиксного it++. http://www.viva64.com/ru/b/0093/

  2. Pre vs. post increment operator — benchmark. http://silviuardelean.ro/2011/04/20/pre-vs-post-increment-operator/



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



Рассмотрим ещё один пример, когда анализатор указывает на неаккуратный код:

struct _acquire_protector
{
_acquire_protector(....);
~_acquire_protector();
size_t m_size;
private:
_acquire_protector& operator=(const _acquire_protector&);
uint8_t* m_ptr;
concurrency::streams::streambuf& m_buffer;
};


Предупреждение PVS-Studio: V690 The '=' operator is declared as private in the '_acquire_protector' class, but the default copy constructor will still be generated by compiler. It is dangerous to use such a class. cpprestsdk140.uwp.staticlib fileio_winrt.cpp 825



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



Заключение



Наконец-то анализатор PVS-Studio смог к чему-то придраться. Ошибок нашлось немного, но всё-таки они есть. А это значит, что если применять статический анализ не разово, как я сделал сейчас, а регулярно, то можно предотвращать множество ошибок на самом раннем этапе. Лучше править ошибки сразу после написания кода, а не в процессе тестирования, отладки и тем более после того как о дефекте сообщит один из пользователей.



Дополнительные ссылки




  1. Название статьи является отсылкой к сказке "Паровозик, который смог".

  2. Ссылка, где вы можете скачать анализатор PVS-Studio и попробовать проверить один из своих проектов на языке C, C++ или C#: http://www.viva64.com/ru/pvs-studio-download/







Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. The Little Unicorn That Could.



Прочитали статью и есть вопрос?
Часто к нашим статьям задают одни и те же вопросы. Ответы на них мы собрали здесь: Ответы на вопросы читателей статей про PVS-Studio, версия 2015. Пожалуйста, ознакомьтесь со списком.


Original source: habrahabr.ru.

https://habrahabr.ru/post/303854/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

IoT: от «умных» лампочек до передовых технологий производства

Вторник, 21 Июня 2016 г. 17:56 (ссылка)





Если спросить людей на улице, что такое интернет вещей — определение раскроет, наверное, каждый сотый, если не тысячный. «Умный дом», «умный холодильник», «умный пылесос» или «розетка» — об этом слышали все, но мало кто знает, как всё устроено. А тема-то совсем не новая.



Вспомним 2010 год, когда всё вокруг заполонили рекламные баннеры и статьи про облачные хранилища, АТС и прочие приятности, сильно облегчающие жизнь. Появилась новая технология, и нужно было обучить людей, как и зачем ей пользоваться.



Сейчас уже никому не нужно объяснять, что такое «облако» в IT. А вот про интернет вещей (Internet of Things, IoT) у многих есть ещё масса вопросов. Включать ли в это понятие ноутбуки и смартфоны? Чем автоматизация отличается от IoT? Как небольшой компании или стартапу запустить свой проект в сфере IoT?







#tceh, ФРИИ и StartTrack собрали участников рынка на встрече «Early Birds: Стартапы в сфере IoT», где эксперты Александр Белоцерковский (Microsoft) и Андрей Безруков (GS Group) рассказали о последних трендах в сфере интернета вещей.








Александр Белоцерковский, эксперт по стратегическим технологиям Microsoft



Интернет вещей начинается с вещей



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

Первое IoT-устройство появилось 20 лет назад в Массачусетском технологическом институте, где вендинговый аппарат подключили к интернету. Следующие лет 15 об интернете вещей вспоминали время от времени, однако до каких-то активных действий дело не доходило.



Что же изменилось и дало толчок бурному развитию интернета вещей?




  • Значительно снизилась стоимость комплектующих. Производители работают, стараются сделать их еще дешевле, а выбор — ещё больше.

  • Коммуникации также продолжают дешеветь. Кстати, в России с проникновением интернета дела обстоят достаточно неплохо, даже по сравнению с многими другими странами, что увеличивает возможности для развития IoT.

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

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



Как устроен цикл разработки в сфере интернета вещей?



Основа любого решения IoT — сенсоры и софт для управления и обработки данных. Пользователь нажимает кнопку и совершает действие. Эти данные поступают в хранилище и становятся основой для машинного обучения в рамках платформы. Для аналитики и визуализации Big Data есть огромное количество решений — у Microsoft это Power BI. Полученные данные поступают на сенсоры в качестве обратной связи, и цикл начинается сначала.



Крупные IT-корпорации, в частности Microsoft, предоставляют платформы, на базе которых другие компании (в том числе стартапы) могут создавать решения для конечных пользователей или собственные платформы. Это одно из самых перспективных направлений в IoT: по прогнозам McKinsey, к 2020 году 70% рынка будут генерировать b2b-решения. А сам рынок IoT, по оценке Gartner, достигнет $1,7 трлн.








Андрей Безруков, директор по стратегическому маркетингу GS Group



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

К тому же в России сейчас достаточно много незагруженных производственных мощностей. Учитывая девальвацию рубля, производство в стране по издержкам сопоставимо с производством в Китае. Правда, инфраструктура сильно отстаёт: есть истории российских компаний, которые пытались наладить местное производство, но в итоге оказалось проще обратиться к китайскому заводу Foxconn. Тем не менее, перспективы есть.



Что производить?



Во всём мире производство IoT-решений делят на две категории.




  • Непроизводственные решения — это b2c-устройства, такие как «умные часы» или «умные дома», а также b2b-решения: «умные фермы», «умные города», «умные больницы» и всё прочее «умное».

  • Производственные решения — это более сложные платформы для бизнеса и управления производственными процессами. То, что сейчас продвигает «Ростелеком» под названием «Индустриальный интернет», или решения, которые в Германии лежат в основе подхода Industry 4.0, в США — системы Advanced Manufacturing.



Тренды рынка



Эксперты расходятся во мнении, какой из этих двух видов IoT-решений будет доминировать. Но есть несколько общих трендов развития рынка интернета вещей.




  • Безопасность данных в интернете вещей (IoT security) — важная и недооценённая сфера. Сегодня 85% разработчиков выводят на рынок устройства с явными «дырами» в системе безопасности. Хотя хороший криптопроцессор, совместимый с остальными деталями IoT-устройств, стоит всего $1. При этом каждый пятый пользователь применяет свои персональные данные при работе с IoT-решениями. Обеспечение безопасности этих данных — ключевой тренд в интернете вещей на ближайшие пять лет. Уже в 2016 году рынок венчурных инвестиций в безопасность IoT может достигнуть $400 млн. Не обязательно производить криптопроцессоры — можно заниматься инфраструктурой или производить «безопасный» софт.

  • Аналитика. Это направление особенно важно для сложных производственных систем, таких, как на заводе Toyota, где данные собираются буквально на каждом этапе производственного цикла. Что делать с этими данными, как их собрать и использовать? На эти вопросы должны ответить аналитические решения для IoT.

  • Управление устройствами и сетями устройств в зависимости от типа и конфигурации необходимой информации. Данные будут влиять на то, как конфигурируется конкретное устройство, и определять принципы его работы.

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

  • Разработка процессоров и операционных систем для IoT. На рынке процессоров для интернета вещей сейчас практически пусто, по-настоящему качественных и доступных решений мало. Востребованы 8-битные процессоры. После 2019 года, скорее всего, стандартом станут 32-битные процессоры. Что касается операционных систем, их, безусловно, выпускают IT-гиганты. У Microsoft, например, есть Windows 10 для IoT-устройств. Но появляются и другие игроки, менее известные и крупные.



Монетизация и внедрение готовых решений



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



Например, системы «умного дома» можно продавать через Smart TV. Опросы продвинутых потребителей платного телевидения показывают, что 28% из них готовы установить Smart Home. Видимо, потому что новая технология встраивается в уже знакомый интерфейс. Те же смартфоны получили популярность благодаря правильно выбранному интерфейсу — сенсорному экрану. Для систем Smart Home таким интерфейсом может стать голосовое управление. Интерфейс — важный драйвер роста рынка IoT.



По результатам глобальных международных исследований, лидером рынка умных решений для дома может стать компания IKEA, постепенно встраивая новые девайсы в привычные бытовые системы. Сначала вместо обычной лампочки покупатель выберет «умную», потом подключит её к телевизору, и постепенно весь дом обрастет IoT-устройствами. Такое развитие рынка «от потребителя» в данном случае лучше навязывания корпорациями готовых и пока непонятных пользователю систем.






Early Birds — совместное мероприятие #tceh, ФРИИ и StartTrack, где в формате делового завтрака инвесторы и предприниматели говорят о ключевых трендах в бизнесе и IT. В 2016 году на Early Birds обсуждали мессенджеры и ботов, тренды в EduTech и FinTech, IT-технологии в медицине и медиа, информационную безопасность. А тема ближайшего — IT-решения для транспорта и логистики. Место встречи — кафе «Нью-Йорк» в бизнес-центре Silver City на Серебрянической набережной, по вторникам в 9 утра.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/303790/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
zerg_from_hive

некроскайп

Вторник, 21 Июня 2016 г. 10:22 (ссылка)

С тех пор, как корпорация Некрософт Microsoft купила скайп с потрохами, в этих самых потрохах начали происходить странные бурления. Так, например, широкие народные массы столкнулись с загадочным явлением, когда ранее нормально работавшие групповые видеоконференции ВНЕЗАПНО перестали работать. Но товарищ таки нарыл рецепт и поделился ссылкой: оказывается, чтобы снова заработали групповые видеочаты, нужно разрешить полный доступ в каталоги, относящиеся к скайпу. Некоторые, правда, решают проблему ещё более радикально, работая под админом и нарушая золотое правило "Никогда не работай под рутом!", но это уже их личные проблемы, пока они не начинают советовать заголиться и другим, как по ссылке выше. 8-)

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

Метки:   Комментарии (2)КомментироватьВ цитатник или сообщество
SoftLabirint

Самое необходимое - Серия из 8 книг (2007-2014) PDF, FB2 » SoftLabirint.Ru: Скачать бесплатно и без регистрации - Самые Популярные Новости Интернета

Понедельник, 20 Июня 2016 г. 22:18 (ссылка)
softlabirint.ru/book/23883-...f-fb2.html


Самое необходимое - Серия из 8 книг (2007-2014) PDF, FB2

Книги представляют собой практические руководства для тех, кто начинает работать с Microsoft Excel 2010, Microsoft Office Word 2007, рассмотрены инструменты программы Adobe Photoshop CC и основные приемы работы с ними, описан базовый синтаксис языка Python, рассказывается о работе в операционной системе Windows.



Список книг

1. Николай Прохоренок | Python. Самое необходимое (2011) PDF

2. С.Н. Скрылина | Adobe Photoshop CC. Самое необходимое (2014) PDF

3. Никита Культин | Word 2007. Самое необходимое (2007) PDF

4. Никита Культин, Лариса Цой | Microsoft Excel 2010. Самое необходимое (2010) PDF

5. Софья Скрылина | Photoshop CS6. Самое необходимое (2013) PDF

6. Андрей Егоров | С компьютером на ты. Самое необходимое [2011] FB2

7. С.Н.Скрылина | Photoshop CS5. Самое необходимое [2011] PDF

8. Никита Культин, Лариса Цой | Microsoft Excel 2010. Самое необходимое (2010) PDF



Название: Самое необходимое - Серия из 8 книг (2007-2014) PDF, FB2

Автор: Никита Культин, Николай Прохоренок, и др...

Год: 2007-2014

Издательство: БХВ-Петербург

Жанр: Компьютерная литература

Формат: PDF, FB2

Качество: Изначально электронное (ebook)

Иллюстрации: Черно-белые

Размер: 294,95 Мб



Скачать: Самое необходимое - Серия из 8 книг (2007-2014) PDF, FB2



Скачать | Download | TurboBit.net

http://turbobit.net/4r408tkm092r/Samoe_neobhodimoe-8.rar.html



Скачать | Download | HitFile.net

http://www.hitfile.net/7FTo5eE/Samoe_neobhodimoe-8.rar.html



Скачать | Download | Файлообменник.рф

http://файлообменник.рф/wtnj6r3cakt6/Samoe_neobhodimoe-8.rar.html



Скачать | Download | DepFile.com

http://kyc.pm/NizE8KOre/Samoe_neobhodimoe-8.rar



Скачать | Download | DataFile.com

http://www.datafile.com/d/TVRrek1UZzFNekEF9/Samoe_neobhodimoe-8.rar



 



Подписка на новости сайта…

http://feeds.feedburner.com/Soft-Labirint

http://feeds.feedburner.com/Soft-Labirint?format=xml

https://feedburner.google.com/fb/a/mailverify?uri=Soft-Labirint

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<microsoft - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda