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


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

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

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

iTherm - интеллектуальный термометр

Вторник, 13 Сентября 2016 г. 09:19 (ссылка)

bigimg (197x700, 84Kb)
Но можно сделать маски для лица с эффектом ботокса самим дома, что позволит сэкономить, но при этом добиться хорошего, омолаживающего эффекта.
Но можно сделать маски для лица с эффектом ботокса самим дома, что позволит сэкономить, но при этом добиться хорошего, омолаживающего эффекта.

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

iTherm - интеллектуальный термометр

Вторник, 13 Сентября 2016 г. 07:36 (ссылка)

bigimg (197x700, 84Kb)
Но iTherm - современный интеллектуальный термометр для детей, позволит постоянно отслеживать их состояние, не тревожа лишний раз ребёнка.
Но iTherm - современный интеллектуальный термометр для детей, позволит постоянно отслеживать их состояние, не тревожа лишний раз ребёнка.

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

iTherm - интеллектуальный термометр

Понедельник, 13 Сентября 2016 г. 01:53 (ссылка)

bigimg (197x700, 84Kb)
Приобретение технологичного термометра не нужно откладывать, и ждать, когда он понадобится.
Приобретение технологичного термометра не нужно откладывать, и ждать, когда он понадобится.

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

Первый мобильный браузер с поддержкой расширений для Chromium. Новая альфа Яндекс.Браузера

Пятница, 02 Сентября 2016 г. 10:27 (ссылка)

Современные мобильные браузеры, как и их десктопные аналоги, должны позволять пользователям добавлять недостающие возможности с помощью дополнений. Несмотря на отказ команды Chromium от идеи поддержки расширений на Android, наша команда продолжает работать над этой возможностью, и сегодня мы приглашаем сообщество Хабра попробовать первую альфу Яндекс.Браузера, в которую вы уже сможете установить LastPass, Tampermonkey или даже Ghostery.



image



Первые дополнения появились в Internet Explorer еще в 1999 году и за следующее десятилетие практика открытия доступа к API стала обязательной для любого более-менее популярного браузера. Сейчас многие из нас не представляют себе работу за компьютером без возможности добавить в браузер необходимую функцию собственными руками. А вот с Android пока еще все не так. Несмотря на рост производительности современных мобильных устройств, браузерные расширения на Android – скорее исключение, чем правило.



Мобильные браузеры не всегда воспринимались пользователями всерьез. Во времена медленного интернета и слабых мобильных устройств люди предпочитали решать свои задачи с помощью компьютера. Сейчас их отношение постепенно меняется. Нас все чаще просят добавить в продукт специфичные функции и инструменты. Что-то из этого мы встраиваем в Яндекс.Браузер (например, режим чтения и переводчик). Но многие из запросов было бы логично решить с помощью сторонних дополнений, а не перегружать Браузер. Добавим к этому традиционную просьбу поддержать дополнения на Android, которую достаточно часто присылают через обратную связь. В общем, мы стали не закрывать глаза на изменения вокруг и приступили к разработке.



Поддержать дополнения в браузере на Android можно двумя способами. Можно предусмотреть API, с которым бы работали другие приложения из Google Play. Эта практика уже многим знакома: например, кодеки для видеоплееров зачастую распространяются в виде отдельных приложений. Мы и сами нечто подобное совсем недавно сделали с блокировкой рекламы. У этого подхода есть два больших минуса: отсутствие дополнений на старте и необходимость создавать свой велосипед, который был бы несовместим с дополнениями для настольной версии браузера. А нам бы хотелось, чтобы люди могли использовать на Android те же инструменты, к которым они привыкли на компьютере.



В чем заключается второй способ, вы уже догадались. Расширения для Chrome и других браузеров на основе Chromium появились в начале 2010 года, и тысячи разработчиков со всего мира в течение всех этих лет создавали собственные инструменты. Яндекс.Браузер, несмотря на функциональные отличия, также основан на Chromium и поддерживает установку дополнений на компьютере. И вполне логично в этой ситуации распространить поддержку еще и на Android. До нас этого никто не сделал, но какие тут могут быть сложности, ведь на Windows все работает?







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



Когда мы попробовали собрать Яндекс.Браузер для Android с флагом enable_extensions, то получили порядка 600 ошибок совместимости. Флаг включения расширений, как и отвечающий за них код, был до мозга костей завязан на специфичное для десктопа окружение. Небольшой пример для любопытных разработчиков. Возьмем объект Browser. Browser – центральный контроллер UI десктопного браузера. Он содержит много чего интересного, в том числе модель TabStripModel, которая активно используется дополнениями для работы с вкладками. Но под Android все это не собирается. Мы начинаем тянуть за одну нить, а вытягиваем целый ворох несовместимостей. И так на каждом шагу.



Платформа расширений за 6 лет обросла большим количеством API. И у каждого из них могут быть десятки методов со своей непредсказуемой работой на Android. Поэтому для начала мы поддержали наиболее востребованные возможности, которых вполне достаточно для того, чтобы уже в альфе заработали такие дополнения, как Evernote, LastPass, Ghostery, SaveFrom.net, Tampermonkey, Яндекс.Погода и многие другие. Кстати, с этим нам помогли разработчики популярных дополнений, которых примерно месяц назад мы пригласили на закрытое тестирование ранних сборок. Чтобы им было проще ориентироваться в наших возможностях, мы написали диагностическое расширение, которое формирует наглядный отчет.







Что касается источников дополнений, то тут мы традиционно не ограничиваем людей каким-то одним каталогом и поддерживаем установку из Chrome Web Store, Opera Addons, собственного раздела рекомендованных дополнений, по inline-ссылкам или просто из каталога на SD-карте.







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



Установить альфа-версию Яндекс.Браузера можно из Google Play. После второго холодного запуска (особенность альфы) в настройках вы найдете целый раздел, посвященный дополнениям. Мы были бы благодарны сообществу Хабра за отзывы и идеи.

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

https://habrahabr.ru/post/309014/

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

PAYAD.ME - НОВЫЙ ВЗГЛЯД НА РЕКЛАМУ - Почтовые спонсоры, буксы и автосёрфинг - Форум о заработке в интернете и инвестициях

Вторник, 30 Августа 2016 г. 12:13 (ссылка)
vsemmoney.ru/topic/4538-pay...a-reklamu/


PAYAD.ME - НОВЫЙ ВЗГЛЯД НА РЕКЛАМУ - отправлено в Почтовые спонсоры, буксы и автосёрфинг: PAYAD.ME - это расширение для браузера, с помощью которого можно зарабатывать на полном автомате! После РЕГИСТРАЦИИ и установки расширения, будет показываться автоматически реклама, в левом нижнем углу (иногда, её даже можно не заметить), за просмотр которой, мы получим вознаграждение в размере от 3.3-8 копеек, что намного больше, чем на других подобных расширениях! Кстати, приглашать рефералов в...

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

[Из песочницы] Создание и использование расширений для UWP-приложений с помощью App Services

Четверг, 04 Августа 2016 г. 15:53 (ссылка)

image



В недавнем Anniversary Update появилась такая замечательная вещь, как App Extensions. К сожалению, на данный момент из документации по ней есть только одно видео и пара GitHub-репозиториев. Но я смог собрать всю нужную информацию по использованию этой возможности, и сейчас расскажу, как можно написать расширяемое приложение.



И да, вам понадобится SDK версии не ниже 14393.



Как это будет работать



У нас будет одно host-приложение, к которому будут подключаться расширения. Каждое расширение будет содержать сервис (App Service), с помощью которого приложение будет взаимодействовать с расширением.



Немного о сервисах



В UWP-приложении вы не можете просто взять, и подключить динамическую библиотеку на лету. Это сделано в целях безопасности. Вместо этого, вы можете общаться с другим приложением с помощью простых типов данных (их список очень ограничен). Это приложение должно объявить о том, что у него есть сервис, с которым можно общаться, и это объявление пишется в манифесте приложения (Package.appxmanifest). Всё общение происходит при помощи подключения к сервису, отправки ему сообщений, и получения ответа. И сообщения, и ответы передаются с помощью ValueSet (по сути это просто Dictionary), и, как уже говорилось ранее, в качестве значений там могут быть только простейшие типы данных (числа, строки, массивы).



Итак, приступаем.



Создание host-приложения



Для удобства все проекты будут размещены в одном решении. Открываем Visual Studio и создаем пустое UWP-приложение с минимальной версией 14393. Я назову его Host.



image



Теперь нам нужно подредактировать манифест. Открываем Package.appxmanifest в режиме кода, и для начала находим code>, добавляем новый namespace: xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" и дописываем uap3 в IgnorableNamespaces. В результате должно получиться что-то вроде этого:





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






com.extensions.myhost




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



Результат









Host
acede
Assets\StoreLogo.png















com.extensions.myhost














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



Идем в MainPage.xaml.cs, удаляем всё и пишем следующее:



using System;
using System.Collections.Generic;
using Windows.ApplicationModel.AppExtensions;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace Host
{
public sealed partial class MainPage : Page
{
public MainPage()
{
InitializeComponent();
Loaded += OnLoaded;
}

private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
AppExtensionCatalog catalog = AppExtensionCatalog.Open("com.extensions.myhost");
var extensions = new List(await catalog.FindAllAsync());
}
}
}


Давайте разберемся с тем, что происходит в методе OnLoaded. Для начала, нам нужно открыть каталог расширений, иcпользуя AppExtensionCatalog.Open. В качестве аргумента мы ему передаем имя хоста, которое ранее указали в манифесте. После этого, мы получаем все расширения в каталоге. Так как у нас нет пользовательского интерфейса, есть смысл поставить в конце метода breakpoint. Уже можно запустить приложение, вы увидите, что расширений у нас нет (что логично). Так давайте напишем первое!



Создание расширения



В качестве расширения создадим простенький калькулятор с 4 операциями и 2 операндами. Опять создаем пустое UWP-приложение (именно приложение), называем его Calculator, идем в манифест и добавляем неймспейс (как в host-приложении). Теперь снова ищем , но код добавляем уже другой:







com.mycalculator.service





Рассмотрим эту декларацию чуть подробнее. Для начала, мы объявляем расширение приложения. У этого объявления есть несколько параметров:




  • Name — имя хоста расширений (то самое из манифеста)

  • PublicFolder — публичная папка, к которой у хоста есть доступ. В данном примере она не используется, но знать о ней стоит.

  • Id — уникальный id расширения

  • DisplayName — имя расширения

  • Description — описание



Дальше идет такая вещь, как Properties. Тут вы можете объявлять свои специфичные параметры. В данном случае, мы объявляем имя нашего сервиса (о нем совсем скоро).

Каркас расширения готов, можно протестировать: выбираем Buld > Deploy Solution, запускаем Host, и видим наше расширение! Магия. Давайте теперь заставим его что-нибудь делать, не время отдыхать!



Создание сервиса



Мы вынесем сервис в отдельный проект, т.к. размещение его в том же проекте, что и приложение расширения, требует дополнительных модификаций кода. Создаем новый проект, только на этот раз нам нужен Windows Runtime Component (Class Library к ОЧЕНЬ большому сожалению не подходит). Удаляем ненужный нам Class1 и создаем нужный нам класс Service. Его мы напишем пошагово.




  1. Добавляем нужные using'и:



    using System;
    using Windows.ApplicationModel.AppService;
    using Windows.ApplicationModel.Background;
    using Windows.Foundation.Collections;



  2. Реализуем интерфейс IBackgroundTask в Service:

    У нас появится пустой метод Run вроде такого

    public void Run(IBackgroundTaskInstance taskInstance) { }

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




  3. Создаем поле для deferral:

    private BackgroundTaskDeferral _deferral;

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




  4. Добавляем следующий код в Run:



    _deferral = taskInstance.GetDeferral();
    taskInstance.Canceled += TaskInstanceOnCanceled;
    var serviceDetails = (AppServiceTriggerDetails) taskInstance.TriggerDetails;
    AppServiceConnection connection = serviceDetails.AppServiceConnection;
    connection.ServiceClosed += ConnectionOnServiceClosed;
    connection.RequestReceived += ConnectionOnRequestReceived;


    Итак, сначала мы присваиваем нашему deferral'у deferral фоновой задачи. Далее мы добавляем обработчик события отмены задачи. Это нужно, чтобы мы смогли освободить наш deferral и позволить задаче завершиться. Затем, мы получаем информацию, связанную непосредственно с нашим сервисом, и регистрируем два обработчика. ServiceClosed вызывается, когда источник вызова задачи уничтожает объект вызова. В RequestRecieved будет происходить вся работа по обработке запроса.




  5. Создаем обработчики для двух событий, связанных с освобождением deferral'а:



    private void ConnectionOnServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
    {
    _deferral?.Complete();
    }


    private void TaskInstanceOnCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
    {
    _deferral?.Complete();
    }



  6. Напишем метод для выполнения расчетов



    private double Execute(string op, double left, double right)
    {
    switch (op)
    {
    case "+":
    return left + right;
    case "-":
    return left - right;
    case "*":
    return left*right;
    case "/":
    return left/right;
    default:
    return left;
    }
    }


    Тут ничего сверхъестественного, метод принимает оператор и два операнда, возвращает результат вычислений.




  7. Самая мякотка. Пишем обработчик для RequestRecieved:



    private async void ConnectionOnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
    {
    var deferral = args.GetDeferral(); // Получаем defferal, но уже для запроса
    AppServiceRequest request = args.Request; // Непосредственно запрос

    var op = request.Message["Operator"].ToString(); // Вытаскиваем
    var left = (double) request.Message["Left"]; // параметры
    var right = (double) request.Message["Right"]; // из запроса

    var result = Execute(op, left, right); // Получаем результат вычислений
    await request.SendResponseAsync(new ValueSet // Отправляем результат обратно
    {
    ["Result"] = result
    });

    deferral.Complete(); // Освобождаем deferral
    }





Мы написали наш сервис, самое время его использовать!



Соединяем все воедино



Для начала, нам нужно объявить наш сервис. Идем в манифест нашего расширения, заходим в Extensions и пишем туда следующее:







Тут мы объявляем название сервиса и класс, в котором он реализован.

Добавляем reference на CalculatorService в Calculator



Теперь нам нужно из хоста соединиться с нашим сервисом. Возвращаемся в MainPage.xaml.cs и добавляем код в наш супер-метод:



var calculator = extensions[0];
var serviceName = await GetServiceName(calculator);
var packageFamilyName = calculator.Package.Id.FamilyName;
await UseService(serviceName, packageFamilyName);


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



Метод GetServiceName:



private async Task GetServiceName(AppExtension calculator)
{
IPropertySet properties = await calculator.GetExtensionPropertiesAsync();
PropertySet serviceProperty = (PropertySet) properties["Service"];
return serviceProperty["#text"].ToString();
}


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



Теперь напишем последний метод, который наконец-то начнёт делать что-то конкретное:



private async Task UseService(string serviceName, string packageFamilyName)
{
var connection = new AppServiceConnection
{
AppServiceName = serviceName,
PackageFamilyName = packageFamilyName
}; // Параметры подключения

var message = new ValueSet
{
["Operator"] = "+",
["Left"] = 2D,
["Right"] = 2D
}; // Параметры для передачи

var status = await connection.OpenAsync(); // Открываем подключение
using (connection)
{
if (status != AppServiceConnectionStatus.Success) // Проверяем статус
{
return;
}

var response = await connection.SendMessageAsync(message); // Отправляем сообщение и ждем ответа
if (response.Status == AppServiceResponseStatus.Success)
{
var result = (double) response.Message["Result"]; // Получаем результат
}
}
}


Не забудьте про Build > Deploy solution.

И, если вы все сделали правильно, у вас должно получиться так:

image



Если получилось, поздравляю — вы написали свое полноценное (относительно) модульное приложение на UWP! (А если нет, то пишите в комментариях)



Дополнительно




  1. У AppExtensionCatalog есть несколько событий, используя которые вы сможете наблюдать за состояниями расширений.

    Вот их список:




    • PackageInstalled

    • PackageStatusChanged

    • PackageUninstalling

    • PackageUpdated

    • PackageUpdating




  2. Вы, возможно, захотите проверять подпись расширений. В этом вам поможет AppExtension.Package.SignatureKind


Original source: habrahabr.ru.

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

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

Безопасный анонимный Интернет и доступ к заблокированным сайтам.

Воскресенье, 01 Июля 2016 г. 02:37 (ссылка)


БЫСТРЫЙ АНОНИМАЙЗЕР



 




vpnbook_0 (170x70, 6Kb)

Для безопасного анонимного сёрфинга в Интернете и доступа к заблокированным сайтам, используются виртуальные частные сети (VPN), например, Browsec и прокси-сервера (анонимайзеры).



4877129__1_ (223x52, 2Kb)
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lenov_ru

Death Shooter 2:Zombie killer v 1.2.12 (Mod Money) » Клуб пользователей планшетов на ANDROID / Lenovo IdeaTab A2109 8GB / Samsung Galaxy Tab 2 7.0 / Asus Transformer TF700T / NVIDIA Tegra 3

Воскресенье, 31 Июля 2016 г. 07:18 (ссылка)
lenov.ru/games/25863-death-...money.html


Death Shooter 2:Zombie killer - шутер тир в котором геймеры в одиночку будут выживать в городе с населением состоящим на 99.99% из зомби и других мутировавших тварей. Хорошо, что на руках ес

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

Как сделать скриншот страницы сайта?

Воскресенье, 31 Июля 2016 г. 04:42 (ссылка)


ПОЛЕЗНОЕ РАСШИРЕНИЕ



 




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



Очень легкий способ “фотографирования” все страницы сайта полностью. Теперь не нужно прокручивать страницу и потом склеивать скриншоты



4877129__1_ (223x52, 2Kb)
Метки:   Комментарии (1)КомментироватьВ цитатник или сообщество
Onem

О возможности изменения гравитационного воздействия

Понедельник, 18 Июля 2016 г. 05:38 (ссылка)
infopolk.ru/1/U/articles/80...00fc74687c


В ряде работ 1, 2, 3 отмечался интересный эффект, который заключался в изменении веса предметов при наличии вращающихся масс. Изменение веса происходило вдоль оси вращения массы
...

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

Следующие 30  »

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

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

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