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


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

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

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

System Software for Windows v.3.1.1 (2017) RUS » SoftLabirint.Ru: Скачать бесплатно и без регистрации - Самые Популярные Новости Интернета

Четверг, 17 Августа 2017 г. 13:57 (ссылка)
softlabirint.ru/soft/system...7-rus.html


System Software for Windows v.3.1.1 (2017) RUS

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



Дополнительная информация:

• Установщик предложит только те компоненты для установки которые совместимы с операционной системой в которой запущен.

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

• Установщик сам предложит перезапустить систему если это необходимо для работы компонентов.



Состав набора:

• DirectX (полная версия)

• Microsoft Visual С++ (2005-2008-2010-2012-2013-2017 x86 и x64 + Visual Studio 2010 F# Runtime 2.0 + F# Runtime 4.0 + Visual Basic 6.0 Extended Runtime + Visual J# 2.0 Redistributable Package + Visual Basic 7 Runtime)

• Microsoft Visual C++ 2005-2008-2010-2012-2013-2017 Redistributable Package от Lisabon (30.07.2017)

• NET Framework Version 1.0 SP2 для Windows XP

• NET Framework Version 1.1 SP1

• NET Framework Version 3.5 SP1

• NET Framework Version 3.5 (для Windows 8, 8.1 и Server 2012 — 2012 R2)

• NET Framework Version 3.5 (для Windows 10 и Server 2016)

• NET Framework Version 4.0 (для Windows XP и Server 2003)

• NET Framework Version 4.6 Финал (для Windows Vista sp2 и Windows 8)

• NET Framework Version 4.7 Финал

• Windows Media Video 9 VCM

• OpenAL 2.1.0

• Rapture3D 2.7.4

• NVIDIA PhysX 9.17.0524

• NVIDIA PhysX старая версия 9.13.1220

• NVIDIA PhysX Legacy 9.13.0604

• NVIDIA PhysX Legacy Full by CUTA

• RuntimePack Lite 17.3.14

• RuntimePack Full 17.3.14

• Games for Windows — LIVE 3.5.95.0 Final

• Java Platform SE 7 U80

• Java Platform SE 8 U144

• Java Platform от Lisabon SE JDK JRE v6 U151

• Java Platform от Lisabon SE JDK JRE v7 U141

• Java Platform от Lisabon SE JDK JRE v8 U144

• Adobe Flash Player 26.0.0.151 для Internet Explorer

• Adobe Flash Player 26.0.0.151 для Firefox и Netscape

• Adobe Flash Player 26.0.0.151 для Opera и Chrome

• Adobe Flash Player ActiveX (для Windows 8, 8.1, 10, Server 2012-2016) 26.0.0.151

• Adobe Shockwave Player 12.2.9.199 (Repack by CUTA)

• Adobe AIR 26.0.0.127

• Microsoft Silverlight 5.1.50907.0

• Microsoft XNA Framework Redistributable (1.0, 2.0, 3.0, 3.1, 4.0)

• Microsoft XML v4.0 SP3

• Microsoft XML v6.0 SP1

• Windows Media Player Firefox Plugin 1.0.0.8

• Unity Web Player 5.3.8.0

• Vulkan Runtime 1.0.57.0

• Indeo Codecs 5.11 repack by cuta



Описание компонентов:

• DirectX - Исполняемая библиотека для конечного пользователя обновит текущую версию DirectX – встроенную технологию Windows®, которая позволяет запускать высокоскоростное мультимедиа и игры на компьютере.



• Microsoft Visual С++ - Распространяемые пакеты Visual C++ устанавливают компоненты среды выполнения, необходимые для выполнения приложений C++, которые разработаны с помощью Visual Studio С++.



• NET Framework Version - Распространяемый пакет Microsoft NET Framework устанавливает среду выполнения NET Framework и связанные файлы, необходимые для выполнения и разработки приложений, предназначенных для NET Framework.



• Windows Media Video 9 VCM - Это видео Compression Manager (VCM) на основе версии Windows Media Video 9 кодерадекодера позволит кодирования и редактирования наследие приложений для поддержки Windows Media Video 9 кодек в контейнерах файлов, таких как AVI.



• OpenAL - ранее свободно распространявшийся кроссплатформенный интерфейс программирования приложений (API) для работы с аудиоданными. Ключевой особенностью является работа со звуком в 3D пространстве и использование эффектов EAX. Поддерживается компанией Creative.



• Rapture3D - программа для воссоздания ощущения присутствия путём замены обычных Software-драйверов на их улучшенный вариант. С её помощью в играх можно легко определить например где находится враг по шагам или где произошёл взрыв и т.п.



• NVIDIA PhysX - кроссплатформенный физический движок для симуляции ряда физических явлений. Первоначально разрабатывался компанией Ageia для своего физического процессора PhysX. После того, как Ageia была приобретена nVidia, движок перешёл в собственность компании nVidia, которая продолжает его дальнейшую разработку. nVidia адаптировала движок для ускорения физических расчётов на своих графических чипах с архитектурой CUDA. PhysX может также производить вычисления с использованием обычного процессора.



• NVIDIA PhysX Legacy - необходимо установить для игр, выпущенных в конце 2007 года или ранее. Если игра, выпущенная в этот период, корректно работала с ПО PhysX версии 9.12.0613, но не работает с более поздними версиями, необходимо установить PhysX Legacy.



• RuntimePack Lite - Предлагаемый набор файлов позволяет избежать *Runtime Error* если не всех, то большинство таких сообщений и подходит (рекомендован к установке) для операционных систем от Windows XP до Windows 10 (x86/x64).



• RuntimePack Full - Включает в себя RuntimePack Lite и библиотек Microsoft Visual C++ 2005-2017.



• Games for Windows - LIVE - бесплатный игровой онлайн-сервис для Windows, как и Xbox Live, ориентированный на сетевую игру. Он позволяет пользователям ПК соединяться со всеми устройствами, поддерживающими Windows Live, в том числе Windows Mobile и Zune. Пользователь при регистрации получает уникальный тег игрока Gamertag, который совместим с Xbox Live, и дает возможность играть онлайн, следить за статусами друзей, принимать и отправлять сообщения, коллекционировать достижения. Кроме того, существует кросс-платформенный голосовой чат. В некоторых играх (например, Shadowrun) игроки на ПК могут играть совместно с игроками на Xbox 360.Нужен для запуска игр с поддержкой Games for Windows - LIVE.



• Java Platform - это технология, используемая для разработки приложений, которые делают работу в сети Интернет более увлекательной и удобной. Java отличается от языка программирования javascript, который представляет собой простую технологию для создания веб-страниц и выполняется только в браузере.



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



• Adobe Shockwave Player - Предназначена для расширения возможностей традиционных веб-браузеров в области представления информации и взаимодействия с пользователем. Основные применения: трёхмерная векторная анимация, интерактивные веб-приложения, проигрывание видеороликов, игры. Применяется в виде плагина к браузерам Internet Explorer, Google Chrome, Mozilla Firefox, Safari, Opera, Netscape, Netscape-совместимым и пр.



• Adobe AIR - кроссплатформенная среда выполнения, позволяющая разработчикам использовать стандарты HTML/CSS, Ajax, javascript, программное обеспечение Adobe Flash Professional и Adobe Flex и язык ActionScript для развертывания веб-приложений, которые реализуются в виде автономных клиентских приложений и на которые не распространяются ограничения, связанные с применением браузера.



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



• Microsoft XNA Framework Redistributable - позволяет разработчикам игр избежать многих технических трудностей, возникающих при написании кода, а также обеспечивает существенное снижение стоимости конечной продукции. Кроме того, благодаря XNA программисты могут создавать принципиально новые игры с высококачественной графикой. Инструментарий XNA изначально разрабатывался с целью максимально облегчить процесс разработки игр для консоли Xbox и компьютеров, работающих под управлением Windows.



• Microsoft XML - набор служб, который позволяет приложениям, написанным на JScript, VBScript и средствах разработки Microsoft, строить приложения для Windows, основанные на XML.



• Windows Media Player Firefox Plugin - Плагин для браузера Mozilla Firefox, позволяющий интегрировать в него Windows Media Player. Установив данный плагин, пользователь получит поддержку многих веб-сервисов, транслирующих потоковые аудио/видео данные в Интернете. Microsoft Windows Media Player Firefox Plugin совместим с плеером Windows Media Player версии 6.4 и выше, включая 11-ю версию этого популярного мультимедиа проигрывателя.



• Unity Web Player - Веб-плеер Unity дает возможность наслаждаться великолепным контентом, созданным в Unity, прямо в своем браузере; он автоматически обновляется по мере необходимости.



• Vulkan Runtime — кроссплатформенный API для 2D- и 3D-графики, впервые представленный Khronos Group в рамках конференции GDC 2015.

Vulkan API изначально был известен как «новое поколение OpenGL» или просто «glNext», но после анонса компания отказалась от этих названий в пользу названия Vulkan. Как и OpenGL, Vulkan позволяет с высокой производительностью отображать в реальном времени различные приложения с 3D-графикой, такие как игры или интерактивные книги на всех платформах, а также обеспечивает более высокую производительность и меньшую нагрузку на процессор, аналогично Direct3D 12 и Mantle. Vulkan основан на технологиях AMD в Mantle.



• Indeo Codecs - Видеокодек, который раньше назывался Intel Indeo и разрабатывался фирмой Intel. Кодек имеет неплохое качество картинки, большой диапазон битрейтов, возможность интерполяции пикселов при воспроизведении и т.д.



Установка:

• Запустить файл Installer.exe

• Выбрать компоненты нажать кнопку установить

• Дождаться установки

• По завершению установки нажать кнопку завершить.



Изменения в 3.1.1:

• Исправлена ошибка с установкой NET Framework Version 4.7 ОС Windows 7

• Исправлена ошибка с установкой NET Framework Version 4.6 на ОС Windows 8

• Обновлён Vulkan Runtime до версии 1.0.57.0



Ключи запуска установщика:




Установщик создан с помощью Inno setup, для которого есть следующие параметры запуска, например из командной строки.

Параметр определяющий компоненты в установщике - /TASKS="имя_задачи_1,имя_задачи_2,имя_задачи_3"

Параметр который полностью скрывает установщик - /VERYSILENT

Параметр который пропускает все диалоговые окна оставляя только процесс выполнения - /SILENT

Параметр /TASKS="имя_задачи_1,имя_задачи_2,имя_задачи_3" можно применять как с /VERYSILENT так и с /SILENT, но не с обоими.

Имена задач - соответствие задачи:

DirectX - DirectX



Visual_all\Visual_origin\Visual_2005 - Microsoft Visual C++ 2005

Visual_all\Visual_origin\Visual_2008 - Microsoft Visual C++ 2008

Visual_all\Visual_origin\Visual_2010 - Microsoft Visual C++ 2010

Visual_all\Visual_origin\Visual_2012 - Microsoft Visual C++ 2012

Visual_all\Visual_origin\Visual_2013 - Microsoft Visual C++ 2013

Visual_all\Visual_origin\Visual_2017 - Microsoft Visual C++ 2017

или

Visual_all\Visual_Lisabon\Visual_Lisabon_2005 - Microsoft Visual C++ 2005 сборка от Lisabon

Visual_all\Visual_Lisabon\Visual_Lisabon_2008 - Microsoft Visual C++ 2008 сборка от Lisabon

Visual_all\Visual_Lisabon\Visual_Lisabon_2010 - Microsoft Visual C++ 2010 сборка от Lisabon

Visual_all\Visual_Lisabon\Visual_Lisabon_2012 - Microsoft Visual C++ 2012 сборка от Lisabon

Visual_all\Visual_Lisabon\Visual_Lisabon_2013 - Microsoft Visual C++ 2013 сборка от Lisabon

Visual_all\Visual_Lisabon\Visual_Lisabon_2017 - Microsoft Visual C++ 2017 сборка от Lisabon

или

Visual_all\RuntimePack_Full - RuntimePack Full



Visual_all\Visual_F - Visual F# 2.0 Runtime

Visual_all\Visual_F_4 - Visual F# 4.0 Runtime

Visual_all\Visual_Basic_6 - Visual Basic 6.0 Extended Runtime

Visual_all\Visual_J - Visual J# 2.0 Redistributable Package

Visual_all\Visual_Basic_7 - Visual Basic 7 Runtime



NET_Framework_all\NET_Framework_1 - NET Framework Version 1.0 SP2

NET_Framework_all\NET_Framework_1_1 - NET Framework Version 1.1 SP1

NET_Framework_all\NET_Framework_3_5 - NET Framework Version 3.5 SP1

NET_Framework_all\NET_Framework_3_5_win8 - NET Framework Version 3.5 для Windows 8

NET_Framework_all\NET_Framework_3_5_win10 - NET Framework Version 3.5 для Windows 10

NET_Framework_all\NET_Framework_4 - NET Framework Version 4.0

NET_Framework_all\NET_Framework_4_6 - NET Framework Version 4.6

NET_Framework_all\NET_Framework_4_6_1 - NET Framework Version 4.6.1



OpenAL - OpenAL

WMV9 - Windows Media Video 9 VCM

Rapture3D - Rapture3D

RuntimePack_Lite - RuntimePack Lite



PhysX_all\PhysX - NVIDIA PhysX новая версия

PhysX_all\PhysX_old - NVIDIA PhysX старая

PhysX_Legacy_all\PhysX_Legacy - NVIDIA PhysX Legacy

или

PhysX_Legacy_all\PhysX_Legacy_CUTA - NVIDIA PhysX Legacy Full by CUTA



LIVE_all\Marketplace - Games for Windows Marketplace Client

LIVE_all\LIVE - Microsoft Games for Windows - LIVE

LIVE_all\Live_ID - Помощник по входу в Windows Live ID



Java_all\Java_original\Java_original_7 - Java Platform SE 7 U80

Java_all\Java_original\Java_original_8 - Java Platform SE 8 U72

или

Java_all\Java_Lisabon\Java_Lisabon_6 - Java Platform SE JDK JRE 6 U105 от Lisabon

Java_all\Java_Lisabon\Java_Lisabon_7 - Java Platform SE JDK JRE 7 U91 от Lisabon

Java_all\Java_Lisabon\Java_Lisabon_8 - Java Platform SE JDK JRE 8 U72 от Lisabon



Adobe_all\Adobe_Flash_IE - Adobe Flash Player для браузера Internet Explorer

Adobe_all\Adobe_Flash_NPAPI - Adobe Flash Player для браузеров Firefox и Netscape

Adobe_all\Adobe_Flash_PPAPI - Adobe Flash Player для браузеров Opera и Chrome



Adobe_all\Adobe_AIR - Adobe AIR



Adobe_all\Adobe_Shockwave - Adobe Shockwave Player



Silverlight - Microsoft Silverlight



XNA_Framework\XNA_Framework_3 - Microsoft XNA Framework Redistributable 3.1

XNA_Framework\XNA_Framework_4 - Microsoft XNA Framework Redistributable 4.0



XML\XML_4 - Microsoft XML v4.0 SP3

XML\XML_6 - Microsoft XML v6.0 SP1



Firefox_Plugin - Windows Media Player Firefox Plugin



Unity - Unity Web Player



Vulkan - Vulkan Runtime



Indeo_Codecs - Indeo Codecs



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



Пример:

Installer.exe /SILENT /TASKS="DirectX,Visual_all\RuntimePack_Full,NET_Framework_all\NET_Framework_4_6_1,OpenAL" /NORESTART






System Software for Windows v.3.1.1 (2017) RUS



System Software for Windows v.3.1.1 (2017) RUS



System Software for Windows v.3.1.1 (2017) RUS






Системные требования:

• Windows XP (рекомендуется SP3); Vista (рекомендуется SP2); 7 (рекомендуется SP1); 8; 8.1; 10.



Информация о софте:

Дата выпуска: 16 августа 2017 года

Название: System Software for Windows

Версия: v.3.1.1

Автор сборки: CUTA

Разрядность: x86/x64

Язык интерфейса: Русский

Таблэтка: Не требуется

Размер: 2.22 GB



Скачать: System Software for Windows v.3.1.1 (2017) RUS >>>



 



 

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

Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS » SoftLabirint.Ru: Скачать бесплатно и без регистрации - Самые Популярные Новости Интернета

Среда, 16 Августа 2017 г. 17:02 (ссылка)
softlabirint.ru/soft/system...7-rus.html


Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS

Основой использованы оригинальные образы Windows 7 SP1 x86 и x64. Все девять редакций обеих разрядностей объединены в один образ. В качестве загрузчика применен Stop SMS Uni Boot. Выборочно интегрированы важные обновления по 12 августа 2017 года. Интерфейс системы оставлен оригинальный. Подробности ниже.



Особенности сборки:



Основа сборки оригиналы:

• ru_windows_7_ultimate_with_sp1_x86_dvd_u_677463;

• ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.



• Install.wim пережат в формат ESD;

• В качестве загрузчика применен Stop SMS Uni Boot v.4.1.3 [Ru/En] (Автор: Core-2);

• В сборку интегрированы важные только обновления;

• Программы обновлены на актуальные версии. Дата базы обновлений - 12.08.2017;

• Изменения:

- 1. Добавлены обновления: KB4034664 x86\64

- 2. Удалены обновления: KB4025341 x86\64

- 3. Обновлён аддон "WebFlashPack_x86_64".

- 4. Обновлён аддон "UltraISO_x86_64" от Naifle.

• На начальном этапе предоставлен выбор настройки различных параметров и выбора разрядности системы;

• Интегрированы нужные системные библиотеки, DirectX® 9.0c .Microsoft .NET Framework 4.7;

• Применены твики ПКМ, ОЕМ, отключен контроль учетных записей;

• Интерфейс системы оставлен оригинальный. Все меняется посредством персонализации;

• Применен патч для сторонних тем, добавлены темы;

• На завершающем этапе установки устанавливается Microsoft Office Professional Plus 2016, если он вам не нужен, просто закройте окно установки!

• УСТАНОВКА СТРОГО С БИОСа!



Доступные для установки редакции:



х86 редакции:

• Windows 7 Starter x86

• Windows 7 Home Basic x86

• Windows 7 Home premium x86

• Windwos 7 Professional x86

• Windows 7 Ultimate x86



х64 редакции:

• Windows 7 Home Basic x64

• Windows 7 Home Premium x64

• Windows 7 Professional x64

• Windows 7 Ultimate x64



Состав программ загрузчика:

• Установка разрешения экрана до начала загрузки

• Восстановление Windows 8.1 (только х86)

• Acronis® True Image™ Home 2013 Plus Pack

• Paragon Hard Disk Manager 12 Professional

• UFS Explorer Professional Recovery

• Gimagex (графическая оболочка для ImageX)

• Acronis® Disk Director™ Home Update 2

• HDD Low Level Format Tool

• Universal Virus Sniffer

• BIOS Master Password Generator

• Ontrack EasyRecovery Enterprise

• Active@ Password Changer

• Acronis® Recovery Expert

• Anti WinLocker CD

• Paragon Alignment Tool

• Reset Windows Password

• Установка драйверов

• Ghost Explorer

• Anti SMS

• PartitionWizard

• Total Commander

• PassWordRenew

• GUI Dism Win8.1

• WindowsGate

• Boot Builder

• Restorator

• Explorer++

• Defraggler

• WinNTSetup

• Ultra ISO

• SAMInside

• R-Studio5

• Avz 4.41

• Testdisk

• Win Snap

• WinMount

• AkelPad

• Bootice

• Drivexp

• Ntpwedit

• Ghost32

• AIDA64

• WinHex

• 7-Zip

• WinRAR

• ZAR



Интегрировано:

• 7-Zip 17.00

• Adobe Flash Player ActiveX + Plugins 26.0.0.151

• Adobe Shockwave Player v.12.2.9.199 + v.10.4.1.53

• Adobe Standalone Flash Player v.26.0.0.151

• AIDA64

• HashTab 6.0.0.34

• Microsoft .NET Framework 4.7

• Microsoft Access MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Camera Codec Pack [Русский (Россия)] 6.3.9723.0

• Microsoft DCF MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Excel MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Groove MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft InfoPath MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Office Korrekturhilfen 2016 – Deutsch [Немецкий (Германия)] 16.0.4266.1001

• Microsoft Office OSM MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Office OSM UX MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Office Professional Plus 2016 16.0.4266.1001

• Microsoft Office Proofing (Russian) 2016 [Русский (Россия)]16.0.4266.1001

• Microsoft Office Proofing Tools 2016 - English 16.0.4266.1001

• Microsoft Office Shared MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Office профессиональный плюс 2016 16.0.4266.1001

• Microsoft OneNote MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Outlook MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft PowerPoint MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Publisher MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Skype for Business MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• Microsoft Visual C++ 2005 --- 2017

• Microsoft Word MUI (Russian) 2016 [Русский (Россия)] 16.0.4266.1001

• UltraISO Premium V9.7

• UltraUXThemePatcher 3.2.1.0

• Unity Web Player 5.3.8

• Unlocker 1.9.2

• WinRAR 5.40

• Засоби перевірки правопису Microsoft Office 2016 – українська [Украинский (Украина)] 16.0.4266.1001

• Средства проверки правописания Microsoft Office 2016 — русский [Русский (Россия)] 16.0.4266.1001



Лечение:

• Система и Microsoft Office Professional Plus 2016 активируются автоматически;

• На непредвиденный случай на рабочем столе папка "Активатор" с активаторами:

- Windows Loader 2.2.1 by Daz

- AAct

 



Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS



Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS



Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS






Системные требования:

• Процессор с тактовой частотой 1,5 ГГц и выше

• Рекомендуемый объем ОЗУ — 1 ГБ и более

• Требуется 18 ГБ свободного места на диске

• Дисковод DVD-дисков

• Клавиатура и мышь (Майкрософт) или совместимое c ними указывающее устройство

• Монитор разрешение 800/600 или больше

• Видеокарта — 128 МБ



Контрольные суммы:

CRC-32: F47539B8

MD4: 14B0B1DFD75A3B3476DBD514964A0622

MD5: 53FEB72D2ACE4168540898C26025E877

SHA-1: A10E402EAC16AEB7BD2AA2C4A2B43DFBDB808EDE



Информация о софте:

Дата выпуска: 15 августа 2017 года

Название: Windows 7 SP1 9in1 & Office2016

Версия: v.72.17

Разработчик/автор сборки: MicroSoft / UralSOFT

Разрядность: x86/x64 (9в1)

Язык интерфейса: Русский

Таблэтка: Не требуется

Размер: 4.09 GB



Скачать: Windows 7 SP1 x86/x64 9in1 & Office2016 v.72.17 (2017) RUS >>>

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

[Перевод] Погружение в F#. Пособие для C#-разработчиков

Понедельник, 14 Августа 2017 г. 10:54 (ссылка)

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





Ранее, в посте «Почему вам следует использовать F#», мы рассказали, почему F# стоит попробовать прямо сейчас. Теперь мы разберем основы, необходимые для его успешного применения. Пост предназначен для людей, знакомых с C#, Java или другими объектно-ориентированными языками. Если вы уже пишете на F#, эти понятия должны быть вам хорошо знакомы.



Сразу к различиям



Перед тем, как приступить к изучению понятий функционального программирования, давайте посмотрим на небольшой пример и определим, в чем F# отличается от C#. Это базовый пример с двумя функциями и выводом результата на экран:



let square x = x * x

let sumOfSquares n =
[1..n] // Создадим список с элементами от 1 до n
|> List.map square // Возведем в квадрат каждый элемент
|> List.sum // Просуммируем их!

printfn "Сумма квадратов первых 5 натуральных чисел равна %d" (sumOfSquares 5)


Обратите внимание, что здесь нет явного указания типов, отсутствуют точки с запятой или фигурные скобки. Скобки используются в единственном месте: для вызова функции sumOfSquares с числом 5 в качестве входного значения и последующего вывода результата на экран. Конвейерный оператор |> (pipeline operator) используется так же, как конвейеры (каналы, pipes) в Unix. square — это функция, которая напрямую передается в функцию List.map как параметр (функции в F# рассматриваются как значения, first-class functions).



Хотя различий на самом деле еще много, сперва стоит разобраться с фундаментальными вещами, поскольку они — ключ к пониманию F#.



C# и F#: Соответствие ключевых понятий



Следующая таблица показывает соответствия между некоторыми ключевыми понятиями C# и F#. Это умышленно короткое и неполное описание, но так его проще запомнить в начале изучения F#.
























C# и Объектно-Ориентированное Программирование F# и Функциональное Программирование
Переменные Неизменяемые значения
Инструкции Выражения
Объекты с методами Типы и функции


Быстрая шпаргалка по некоторым терминам:




  • Переменные — это значения, которые могут меняться. Это следует из их названия!




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




  • Инструкции — это команды, исполняемые после запуска программы.




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




  • Типы — это классификация данных в программе.



Стоит отметить, что все указанное в столбце C# так же возможно в F# (и довольно легко реализуется). В столбце F# также есть вещи, которые можно сделать в C#, хотя и намного сложнее. Следует упомянуть, что элементы в левом столбце не являются "плохими" в F#, и наоборот. Объекты с методами отлично подходят для использования в F# и часто являются лучшим решением в зависимости от вашей ситуации.



Неизменяемые значения вместо переменных



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



let x = 1


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



let x = 1
x = x + 1 // Это выражение ничего не присваивает!


Вместо этого, вторая строка является сравнением, определяющим, является ли x равным x + 1. Хотя существует способ изменить (мутировать, mutate) x с помощью использования оператора <- и модификатора mutable (см. подробности в Mutable Variables), вы быстро поймете, что проще думать о решении задач без переприсвоения значений. Если не рассматривать F# как еще один императивный язык программирования, вы сможете использовать его самые сильные стороны.



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



Рассмотрим более конкретный пример: вы хотите возвести в квадрат числа из входного списка. Вот как это можно сделать в F#:



// Определим функцию, которая вычисляет квадрат значения
let square x = x * x

let getSquares items =
items |> List.map square

let lst = [ 1; 2; 3; 4; 5 ] // Создать список в F#

printfn "Квадрат числа %A равен %A" lst (getSquares lst)


Заметим, что в этом примере нет цикла for. На концептуальном уровне это сильно отличается от императивного кода. Мы не возводим в квадрат каждый элемент списка. Мы применяем функцию square к входному списку и получаем значения, возведенные в квадрат. Это очень тонкое различие, но на практике оно может приводить к значительно отличающемуся коду. Прежде всего, функция getSquares на самом деле создает полностью новый список.



Неизменяемость — это гораздо более широкая концепция, чем просто иной способ управления данными в списках. Понятие ссылочной прозрачности (Referential Transparency) естественно для F#, и оказывает значительное влияние, как на разработку систем, так и на то, как части этих систем сочетаются. Функциональные характеристики системы становятся более предсказуемыми, когда значения не изменяются, если вы этого не ожидаете.



Более того, когда значения неизменяемы, конкурентное программирование становится проще. Некоторые сложные проблемы, возникающие в С# из-за изменяемого состояния, в F# не встречаются вообще. F# не может волшебным образом решить все ваши проблемы с многопоточностью и асинхронностью, однако он сделает многие вещи проще.



Выражения вместо инструкций



Как было упомянуто ранее, F# использует выражения (expressions). Это контрастирует с C#, где практически для всего используются инструкции (statements). Различие между ними может казаться на первый взгляд незначительным, однако есть одна вещь, о которой следует помнить: выражения производят значения. Инструкции — нет.



// 'getMessage' -- это функция, и `name` - ее входной параметр.
let getMessage name =
if name = "Phillip" then // 'if' - это выражение.
"Hello, Phillip!" // Эта строка тоже является выражением. Оно возвращает значение
else
"Hello, other person!" // То же самое с этой строкой.

let phillipMessage = getMessage "Phillip" // getMessage, при вызове, является выражением. Его значение связано с именем 'phillipMessage'.
let alfMessage = getMessage "Alf" // Это выражение связано с именем 'alfMessage'!


В предыдущем примере вы можете увидеть несколько моментов, которые отличают F# от императивных языков вроде C#:




  • if...then...else — это выражение, а не инструкция.

  • Каждая ветка выражения if возвращает значение, которое в данном случае будет являться возвращаемым значением функции getMessage.

  • Каждый вызов функции getMessage — это выражение, которое принимает строку и возвращает строку.



Этот подход сильно отличается от C#, но скорее всего он покажется вам естественным при написании кода на F#.



Если копнуть немного глубже, в F# даже инструкции описываются с помощью выражений. Такие выражения возвращают значение типа unit. unit немного похож на void в C#:



let names = [ "Alf"; "Vasily"; "Shreyans"; "Jin Sun"; "Moulaye" ]

// Цикл `for`. Ключевое слово 'do' указывает, что выражение их внутренней области видимости должно иметь тип `unit`.
// Если это не так, то результат выражения неявно игнорируется.
for name in names do
printfn "My name is %s" name // printfn возвращает unit.


В предыдущем примере с циклом for всё имеет тип unit. Выражения типа unit — это выражения, которые не имеют возвращаемого значения.



F#: Массивы, списки и последовательности



Предыдущие примеры кода использовали массивы и списки F#. В данном разделе разъясняются некоторые подробности.



F# предоставляет несколько типов коллекций и самые распространенные из них — это массивы, списки и последовательности.





Массивы, списки и последовательности в F# также имеют особый синтаксис для выражений. Это очень удобно для различных задач, когда нужно генерировать данные программно.



// Создадим список квадратов первых 100 натуральных чисел
let first100Squares = [ for x in 1..100 -> x * x ]

// То же самое, но массив!
let first100SquaresArray = [| for x in 1..100 -> x * x |]

// Функция, которая генерирует бесконечную последовательность нечетных чисел
//
// Вызывать вместе с Seq.take!
let odds =
let rec loop x = // Использует рекурсивную локальную функцию
seq { yield x
yield! loop (x + 2) }
loop 1

printfn "Первые 3 нечетных числа: %A" (Seq.take 3 odds)
// Вывод: "Первые 3 нечетных числа: seq [1; 3; 5]


Соответствие между функциями F# и методами LINQ



Если вы знакомы с методами LINQ, следующая таблица поможет вам понять аналогичные функции в F#.




































LINQ F# функция
Where filter
Select map
GroupBy groupBy
SelectMany collect
Aggregate fold или reduce
Sum sum


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



Предыдущий раздел содержит в себе довольно много информации, но по мере написания программ на F# она станет интуитивно понятной.



Функциональные конвейеры



Вы могли заметить, что оператор |> используется в предыдущих примерах кода. Он очень похож на конвейеры в unix: принимает что-то слева от себя и передает на вход чему-то справа. Этот оператор (называется «pipe» или «pipeline») используется для создания функциональных конвейеров. Вот пример:



let square x = x * x
let isOdd x = x % 2 <> 0

let getOddSquares items =
items
|> Seq.filter isOdd
|> Seq.map square


В данном примере сначала items передается на вход функции Seq.filter. Затем возвращаемое значение Seq.filter (последовательность) передается на вход функции Seq.map. Результат выполнения Seq.map является выходным значением функции getOddSquares.



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



F#: типы



Поскольку F# — язык платформы .NET, в нем существуют те же примитивные типы, что и C#: string, int и так далее. Он использует объекты .NET и поддерживает четыре основных столпа объектно-ориентированного программирования. F# предоставляет кортежи (tuples), а также два основных типа, которые отсутствуют в C#: записи (records) и размеченные объединения (discriminated unions).



Запись — это группа упорядоченных именованных значений, которая автоматически реализует операцию сравнения — в самом буквальном смысле. Не нужно задумываться о том, как происходит сравнение: через равенство ссылок или с помощью пользовательского определения равенства между двумя объектами. Записи — это значения, а значения можно сравнивать. Они являются типами-произведениями, если говорить на языке теории категорий. У них есть множество применений, однако одно из самых очевидных — их можно использовать в качестве POCO или POJO.



open System

// Вот так вы можете определить тип-запись.
// Можно располагать метки на новых строках
type Person =
{ Name: string
Age: int
Birth: DateTime }

// Создать новую запись `Person` можно примерно так.
// Если метки расположены на одной строке, они разделяются точкой с запятой
let p1 = { Name="Charles"; Age=27; Birth=DateTime(1990, 1, 1) }

// Или же можно располагать метки на новых строках
let p2 =
{ Name="Moulaye"
Age=22
Birth=DateTime(1995, 1, 1) }

// Записи можно сравнивать на равенство. Не нужно определять метод Equals() и GetHasCode().
printfn "Они равны? %b" (p1 = p2) // Это выведет `false`, потому что они не равны.


Другой основной тип в F# — это размеченные объединения, или РО, или DU в англоязычной литературе. РО — это типы, представляющие некоторое количество именованных вариантов. На языке теории категорий это называется типом-суммой. Они также могут быть определены рекурсивно, что значительно упрощает описание иерархических данных.



// Определим обобщенное бинарное дерево поиска.
//
// Заметим, что обобщенный тип-параметр имеет ' в начале.
type BST<'T> =
| Empty
| Node of 'T * BST<'T> * BST<'T> // Каждый узел имеет левый и правый BST<'T>

// Развернем BST с помощью сопоставления с образцом!
let rec flip bst =
match bst with
| Empty -> bst
| Node(item, left, right) -> Node(item, flip right, flip left)

// Определим пример BST
let tree =
Node(10,
Node(3,
Empty,
Node(6,
Empty,
Empty)),
Node(55,
Node(16,
Empty,
Empty),
Empty))

// Развернем его!
printfn "%A" (flip tree)


Тадам! Вооружившись мощью размеченных объединений и F#, вы можете пройти любое собеседование, в котором требуется развернуть бинарное дерево поиска.



Наверняка вы увидели странный синтаксис в определении варианта Node. Это на самом деле сигнатура кортежа. Это означает, что определенное нами BST может быть или пустым, или являться кортежем (значение, левое поддерево, правое поддерево). Более подробно про это написано в разделе о сигнатурах.



Собираем всё вместе: синтаксис F# за 60 секунд



Следующий пример кода представлен с разрешения Скотта Влашина, героя сообщества F#, написавшего этот прекрасный обзор F# синтаксиса. Вы прочтете его примерно за минуту. Пример был немного отредактирован.



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

// ======== "Переменные" (на самом деле нет) ==========
// Ключевое слово "let" определяет неизменяемое (иммутабельное) значение
let myInt = 5
let myFloat = 3.14
let myString = "привет" // обратите внимание - указывать тип не нужно

// ======== Списки ============
let twoToFive = [ 2; 3; 4; 5 ] // Списки создаются с помощью квадратных скобок,
// для разделения значений используются точки с запятой.
let oneToFive = 1 :: twoToFive // оператор :: создает список с новым первым элементом
// Результат: [1; 2; 3; 4; 5]

let zeroToFive = [0;1] @ twoToFive // оператор @ объединяет два списка

// ВАЖНО: запятые никогда не используются для разделения значений, только точки с запятой!

// ======== Функции ========
// Ключевое слово "let" также определяет именованную функцию.
let square x = x * x // Обратите внимание - скобки не используются.
square 3 // А сейчас вызовем функцию. Снова никаких скобок.

let add x y = x + y // не используйте add (x,y)! Это означает
// совершенно другую вещь.
add 2 3 // Вызовем фукнкцию.

// чтобы определить многострочную функцию, просто используйте отступы.
// Точки с запятой не требуются.
let evens list =
let isEven x = x % 2 = 0 // Определет "isEven" как внутреннюю ("вложенную") функцию
List.filter isEven list // List.filter - это библиотечная функция
// с двумя параметрами: предикат
// и список, которые требуется отфильтровать

evens oneToFive // Вызовем функцию

// Вы можете использовать скобки, чтобы уточнить приоритет.
// В данном примере, сначала используем "map" с двумя аргументами,
// а потом вызываем "sum" для результата.
// Без скобок "List.map" была бы передана как аргумент в "List.sum"
let sumOfSquaresTo100 =
List.sum (List.map square [ 1 .. 100 ])

// Вы можете передать результат одной функции в следующую с помощью "|>"
// Вот та же самая функция sumOfSquares, переписанная с помощью конвейера
let sumOfSquaresTo100piped =
[ 1 .. 100 ] |> List.map square |> List.sum // "square" определена раньше

// вы можете определять лямбда-функции (анонимные функции)
// с помощью ключевого слова "fun"
let sumOfSquaresTo100withFun =
[ 1 .. 100 ] |> List.map (fun x -> x * x) |> List.sum

// В F# значения возвращаются неявно - ключевое слово "return" не используется
// Функция всегда возвращает значение последнего выражения в ее теле

// ======== Сопоставление с образцом ========
// Match..with.. - это case/switch инструкции "на стероидах".
let x = "a"
match x with
| "a" -> printfn "x - это a"
| "b" -> printfn "x - это b"
| _ -> printfn "x - это что-то другое" // подчеркивание соответствует "чему угодно"

// Some(..) и None приблизительно соответствуют оберткам Nullable
let validValue = Some(99)
let invalidValue = None

// В данном примере match..with сравнивает с "Some" и "None"
// и в то же время распаковывает значение в "Some".
let optionPatternMatch input =
match input with
| Some i -> printfn "целое число %d" i
| None -> printfn "входное значение отсутствует"

optionPatternMatch validValue
optionPatternMatch invalidValue

// ========= Сложные типы данных =========

// Кортежи - это пары, тройки значений и так далее.
// Кортежи используют запятые.
let twoTuple = (1, 2)
let threeTuple = ("a", 2, true)

// Записи имеют именованные поля. Точки с запятой являются разделителями.
type Person = { First: string; Last: string }

let person1 = { First="John"; Last="Doe" }
// Вы можете также использовать переносы на новую строку
// вместо точек с запятой.
let person2 =
{ First="Jane"
Last="Doe" }

// Объединения представляют варианты. Разделитель - вертикальная черта.
type Temp =
| DegreesC of float
| DegreesF of float

let temp = DegreesF 98.6

// Типы можно комбинировать рекурсивно различными путями.
// Например, вот тип-объединение, который содержит список
// элементов того же типа:
type Employee =
| Worker of Person
| Manager of Employee list

let jdoe = { First="John"; Last="Doe" }
let worker = Worker jdoe

// ========= Вывод на экран =========
// Функции printf/printfn схожи с функциями Console.Write/WriteLine из C#.
printfn "Вывод на экран значений типа int %i, float %f, bool %b" 1 2.0 true
printfn "Строка %s, и что-то обобщенное %A" "hello" [ 1; 2; 3; 4 ]

// все сложные типы имеют встроенный красивый вывод
printfn "twoTuple=%A,\nPerson=%A,\nTemp=%A,\nEmployee=%A"
twoTuple person1 temp worker


В дополнение, в нашей официальной документации для .NET и поддерживаемых языков есть материал «Тур по F#».



Что делать дальше



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





Есть очень много других задач, для которых можно использовать F#; предыдущий список ни в коем случае не является исчерпывающим. F# используется в различных приложениях: от простых скриптов для сборки до бэкенда интернет-магазинов с миллиардной выручкой. Нет никаких ограничений по проектам, для которых вы можете использовать F#.



Дополнительные ресурсы



Для F# существует множество самоучителей, включая материалы для тех, кто пришел с опытом C# или Java. Следующие ссылки могут быть полезными по мере того, как вы будете глубже изучать F#:





Также описаны еще несколько способов, как начать изучение F#.



И наконец, сообщество F# очень дружелюбно к начинающим. Есть очень активный чат в Slack, поддерживаемый F# Software Foundation, с комнатами для начинающих, к которым вы можете свободно присоединиться. Рекомендуем вам это сделать!



Не забудьте посетить сайт русскоязычного сообщества F#! Если у вас возникнут вопросы по изучению языка, мы будем рады обсудить их в чатах:





Об авторах перевода



Статья переведена усилиями русскоязычного сообщества F#-разработчиков.

Мы также благодарим @schvepsss за подготовку данной статьи к публикации.


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

https://habrahabr.ru/post/335560/

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

Что общего между конечными автоматами, анимацией и Xamarin.Forms

Пятница, 11 Августа 2017 г. 12:51 (ссылка)

Если вы были студентом технической специальности, то наверняка помните курс, посвященный конечным автоматам. Эта простая, но очень емкая модель (конечный автомат, он же finite state machine, он же FSM) используется довольно широко, хотя и большинство программистов о ней незаслуженно забывают. Сегодня мы поговорим о конечных автоматах и их применении в создании комплексных анимаций в приложениях на Xamarin.Forms.







Анимации в Xamarin.Forms



Если вы уже используете Xamarin.Forms в реальных проектах, то наверняка сталкивались со встроенным механизмом анимаций. Если нет, то рекомендуем начать знакомство со статей «Creating Animations with Xamarin.Forms» и «Compound Animations».



Чаще всего требуется анимировать следующие свойства:




  • Scale, масштаб элемента;

  • Opacity, прозрачность;

  • Translation, дополнительное смещение по x, y, относительно полученного при компоновке положения;

  • Rotation, вращение вокруг осей x, y, z.



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



Конечные автоматы



Если описать конечный автомат человеческим языком, то это некий объект, который может находится в различных устойчивых состояниях (например, “загрузка” или “ошибка”). Свои состояния автомат меняет под воздействием внешних событий. Количество состояний конечно. Примерами таких автоматов являются лифты и светофоры.









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



Какое это все имеет отношение к анимациям и тем более к Xamarin.Forms? Давайте посмотрим.



Один экран, много состояний, есть анимации перехода



В статье «Работаем с состояниями экранов в Xamarin.Forms» мы уже описывали компонент StateContainer, упрощающий разработку сложных интерфейсов и подходящий для большинства экранов в бизнес-приложениях. Этот компонент хорошо работает, когда у нас все состояния существуют независимо друг от друга и между ними достаточно простого перехода «один исчез — второй появился».







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



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



Представим, что у нас анимированные переходы между следующими состояниями ОДНОГО экрана:





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





Необходимо реализовать следующие анимации при переходе из состояния в состояние:




  • При входе в FindAddress нужно скрыть с анимацией старый контент и плавно показать новый. Плюс для пикантности будем анимировать кнопки во время появления;

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

  • При переходе в Drive необходимо скрыть старое состояние и сверху должна выехать табличка с информацией о маршруте;

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







Пишем свой автомат



Мы возьмем самую простую реализацию:




  • У автомата есть фиксированный набор состояний, которые задаются при инициализации;

  • Каждое из состояний описывается набором необходимых анимаций (конечные значения properties) для элементов UI;

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



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



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



public enum AnimationType {
Scale,
Opacity,
TranslationX,
TranslationY,
Rotation
}

public class Storyboard {
readonly Dictionary _stateTransitions = new Dictionary();

public void Add(object state, ViewTransition[] viewTransitions) {
var stateStr = state?.ToString().ToUpperInvariant();
_stateTransitions.Add(stateStr, viewTransitions);
}

public void Go(object newState, bool withAnimation = true) {
var newStateStr = newState?.ToString().ToUpperInvariant();

// Get all ViewTransitions
var viewTransitions = _stateTransitions[newStateStr];

// Get transition tasks
var tasks = viewTransitions.Select(viewTransition => viewTransition.GetTransition(withAnimation));

// Run all transition tasks
Task.WhenAll(tasks);
}
}

public class ViewTransition {
// Skipped. See complete sample in repository below

public async Task GetTransition(bool withAnimation) {
VisualElement targetElement;
if( !_targetElementReference.TryGetTarget(out targetElement) )
throw new ObjectDisposedException("Target VisualElement was disposed");

if( _delay > 0 ) await Task.Delay(_delay);

withAnimation &= _length > 0;

switch ( _animationType ) {
case AnimationType.Scale:
if( withAnimation )
await targetElement.ScaleTo(_endValue, _length, _easing);
else
targetElement.Scale = _endValue;
break;

// See complete sample in repository below
default:
throw new ArgumentOutOfRangeException();
}
}
}


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



Как видим, при переходе в новое состояние просто в параллели происходят плавные изменения необходимых свойств. Есть также возможность перейти в новое состояние без анимации.



Используем конечный автомат



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



_storyboard.Add(States.Drive, new[] {
new ViewTransition(ShowRouteView, AnimationType.TranslationY, 200),
new ViewTransition(ShowRouteView, AnimationType.Opacity, 0, 0, delay: 250),
new ViewTransition(DriveView, AnimationType.TranslationY, 0, 300, delay: 250), // Active and visible
new ViewTransition(DriveView, AnimationType.Opacity, 1, 0) // Active and visible
});


Как видим, для состояния Drive мы задали массив индивидуальных анимаций. ShowRouteView и DriveView — обычные View, заданные в XAML, пример ниже.



А вот для перехода в новое состояние достаточно простоы вызвать метод Go():



_storyboard.Go(States.ShowRoute);


Кода получается относительно немного и групповые анимации создаются по факту просто набором чисел. Работать наш конечный автомат может не только со страницами, но и с отдельными View, что расширяет варианты его применения. Использовать Storyboard лучше внутри кода страницы (Page), не перемешивая его с бизнес-логикой.



Также приведем пример XAML, в котором описаны все элементы пользовательского интерфейса.







Если вы решите добавить возможность смены цвета элементов с помощью анимаций, то рекомендуем познакомиться с реализацией, описанной в статье «Building Custom Animations in Xamarin.Forms».



Полный код проекта из статьи вы можете найти в нашем репозитории:

https://bitbucket.org/binwell/statemachine.



И как всегда, задавайте ваши вопросы в комментариях. До связи!



Об авторе



Вячеслав Черников — руководитель отдела разработки компании Binwell, Microsoft MVP и Xamarin Certified Developer. В прошлом — один из Nokia Champion и Qt Certified Specialist, в настоящее время — специалист по платформам Xamarin и Azure. В сферу mobile пришел в 2005 году, с 2008 года занимается разработкой мобильных приложений: начинал с Symbian, Maemo, Meego, Windows Mobile, потом перешел на iOS, Android и Windows Phone. Статьи Вячеслава вы также можете прочитать в блоге на Medium.



Другие статьи автора:




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

https://habrahabr.ru/post/335418/

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

Фанатов Call Of Duty: WW2 будут развлекать между матчами

Пятница, 11 Августа 2017 г. 10:07 (ссылка)

­­­­­­­­­­­­­­­­­­
Авторы Call Of Duty: WW2 pассказали о Штабе

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

Сколько стоит перевести Хабр?

Четверг, 10 Августа 2017 г. 14:57 (ссылка)

https://habrahabr.ru/post/334626/

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

Следующие 30  »

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

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

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