Перейти к содержимому

Как в яндекс обновить расширение

  • автор:

Расширение редактора Unity через Editor Window, Scriptable Object и Custom Editor

Всем привет! Меня зовут Гриша, и я основатель CGDevs. Сегодня хочется поговорить про расширения редактора и рассказать про один из моих проектов, который я решил выложить в OpenSource.

Юнити — прекрасный инструмент, но в нём есть небольшая проблема. Новичку, чтобы сделать простую комнату (коробку с окнами), необходимо либо осваивать 3д моделирование, либо пытаться что-то собрать из квадов. Недавно стал полностью бесплатным ProBuilder, но это так же упрощённый пакет 3д моделирования. Хотелось простой инструмент, который позволит быстро создавать окружения вроде комнат со окнами и правильными UV при этом. Достаточно давно я разработал один плагин для Unity, который позволяет быстро прототипировать окружения вроде квартир и комнат с помощью 2д чертежа, и сейчас решил выложить его в OpenSource. На его примере мы разберём, каким образом можно расширять редактор и какие инструменты для этого существуют. Если вам интересно – добро пожаловать под кат. Ссылка на проект в конце, как всегда, прилагается.

Unity3d обладает достаточно широким инструментарием для расширения возможностей редактора. Благодаря таким классам, как EditorWindow, а также функционалу Custom Inspector, Property Drawer и TreeView (+ скоро должны появиться UIElements) поверх юнити легко надстраивать свои фреймворки разной степени сложности.

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

В основе решения лежит использование трёх классов, таких как EditorWindow (все дополнительные окна), ScriptableObject (хранение данных) и CustomEditor (дополнительный функционал инспектора для Scriptable Object).

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

Поговорим про интересные задачи.

Для того, чтобы нам прототипировать что-то, в первую очередь нам надо научиться рисовать чертежи, из которых мы будем генерировать наше окружение. Для этого нам необходимо специальное окно EditorWindow, в котором мы будем отображать все чертежи. В принципе можно было бы рисовать и в SceneView, но изначальная идея заключалось в том, что при доработке решения может захотеться открывать несколько чертежей одновременно. В целом в юнити создать отдельное окно — это достаточно простая задача. Об этом можно почитать в мануалах Unity. А вот чертёжная сетка – задача поинтереснее. На эту тему есть несколько проблем.

В Юнити несколько стилей, которые влияют на расцветку окон

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

Закраска определённым цветом

 GUI.color = BgColor; GUI.DrawTexture(new Rect(Vector2.zero, maxSize), EditorGUIUtility.whiteTexture); GUI.color = Color.white;

В сущности мы просто отрисовали текстуру цвета BgColor во всё окно.

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

Вот тут открылось сразу несколько проблем. Первое, необходимо было ввести свою систему координат. Дело в том, что для корректной и удобной работы нам надо пересчитывать GUI координаты окна в координаты грида. Для этого были реализованы два метода преобразования (в сущности, это две расписанные TRS матрицы)

Пересчёт координат окна в координаты экрана

 public Vector2 GUIToGrid(Vector3 vec) < Vector2 newVec = ( new Vector2(vec.x, -vec.y) - new Vector2(_ParentWindow.position.width / 2, -_ParentWindow.position.height / 2)) * _Zoom + new Vector2(_Offset.x, -_Offset.y); return newVec.RoundCoordsToInt(); >public Vector2 GridToGUI(Vector3 vec) < return (new Vector2(vec.x - _Offset.x, -vec.y - _Offset.y) ) / _Zoom + new Vector2(_ParentWindow.position.width / 2, _ParentWindow.position.height / 2); >

где _ParentWindow — это окно в котором мы собираемся рисовать сетку, _Offset — текущая позиция грида, а _Zoom — степень приближения.

Во-вторых, для отрисовки линий нам потребуется метод Handles.DrawLine. Класс Handles имеет внутри себя много полезных методов для отрисовки простой графики в окнах редактора, инспекторе или SceneView. На момент разработки плагина (Unity 5.5) Handles.DrawLine – аллоцировало память и в целом работало достаточно медленно. По этой причине количество возможных линий для отрисовки было ограничено константой CELLS_IN_LINE_COUNT , а также сделан “LOD level” при зуме, чтобы добиться приемлемого fps в редакторе.

Отрисовка сетки

 void DrawLODLines(int level) < var gridColor = SkinManager.Instance.CurrentSkin.GridColor; var step0 = (int) Mathf.Pow(10, level); int halfCount = step0 * CELLS_IN_LINE_COUNT / 2 * 10; var length = halfCount * DEFAULT_CELL_SIZE; int offsetX = ((int) (_Offset.x / DEFAULT_CELL_SIZE)) / (step0 * step0) * step0; int offsetY = ((int) (_Offset.y / DEFAULT_CELL_SIZE)) / (step0 * step0) * step0; for (int i = -halfCount; i offsetX = (offsetX / (10 * step0)) * 10 * step0; offsetY = (offsetY / (10 * step0)) * 10 * step0; ; for (int i = -halfCount; i > 

Для грида почти всё готово. Его движение описывается очень просто. _Offset – это в сущности нынешняя позиция «камеры».

Движение грида

 public void Move(Vector3 dv)

В самом проекте можно ознакомиться с кодом окна в общем и посмотреть, каким образом на окно можно добавить кнопки.

Едем дальше. Помимо отдельного окна для отрисовки чертежей нам надо как-то хранить сами чертежи. Для этого отлично подходит внутренний механизм сериализации Unity – Scriptable Object. По сути, он позволяет хранить описанные классы в виде ассетов в проекте, что очень удобно и нативно для многих юнити разработчиков. Для примера, часть класса Apartment, которая отвечает за хранение информации о планировке в целом

Часть класса Apartment

 public class Apartment : ScriptableObject < #region fields public float Height; public bool IsGenerateOutside; public Material OutsideMaterial; public Texture PlanImage; [SerializeField] private List_Rooms; [SerializeField] private Rect _Dimensions; private Vector2[] _DimensionsPoints = new Vector2[4]; #endregion

В редакторе он выглядит в текущей версии так:

Тут, конечно, уже применён CustomEditor, но тем не менее можно заметить, что такие параметры, как _Dimensions, Height, IsGenerateOutside, OutsideMaterial и PlanImage отображаются в редакторе.

Все публичные поля и поля, помеченные [SerializeField] – сериализуются (то есть сохраняются в файле в данном случае). Это сильно помогает при необходимости сохранять чертежи, но при работе со ScriptableObject, да и всеми ресурсами редактора необходимо помнить, что лучше для сохранения состояния файлов вызывать метод AssetDatabase.SaveAssets(). Иначе изменения не сохранятся. Если вы только руками не сохраните проект.

Теперь частично разберём класс ApartmentCustomInspector, и то как он работает.

Класс ApartmentCustomInspector

 [CustomEditor(typeof(Apartment))] public class ApartmentCustomInspector : Editor < private Apartment _ThisApartment; private Rect _Dimensions; private void OnEnable() < _ThisApartment = (Apartment) target; _Dimensions = _ThisApartment.Dimensions; >public override void OnInspectorGUI() < TopButtons(); _ThisApartment.Height = EditorGUILayout.FloatField("Height (cm)", _ThisApartment.Height); var dimensions = EditorGUILayout.Vector2Field("Dimensions (cm)", _Dimensions.size).RoundCoordsToInt(); _ThisApartment.PlanImage = (Texture) EditorGUILayout.ObjectField(_ThisApartment.PlanImage, typeof(Texture), false); _ThisApartment.IsGenerateOutside = EditorGUILayout.Toggle("Generate outside (Directional Light)", _ThisApartment.IsGenerateOutside); if (_ThisApartment.IsGenerateOutside) _ThisApartment.OutsideMaterial = (Material) EditorGUILayout.ObjectField( "Outside Material", _ThisApartment.OutsideMaterial, typeof(Material), false); GenerateButton(); var dimensionsRect = new Rect(-dimensions.x / 2, -dimensions.y / 2, dimensions.x, dimensions.y); _Dimensions = dimensionsRect; _ThisApartment.Dimensions = _Dimensions; >private void TopButtons() < GUILayout.BeginHorizontal(); CreateNewBlueprint(); OpenBlueprint(); GUILayout.EndHorizontal(); >private void CreateNewBlueprint() < if (GUILayout.Button( "Create new" )) < var manager = ApartmentsManager.Instance; manager.SelectApartment(manager.CreateOrGetApartment("New Apartment" + GUID.Generate())); >> private void OpenBlueprint() < if (GUILayout.Button( "Open in Builder" )) < ApartmentsManager.Instance.SelectApartment(_ThisApartment); ApartmentBuilderWindow.Create(); >> private void GenerateButton() < if (GUILayout.Button( "Generate Mesh" )) < MeshBuilder.GenerateApartmentMesh(_ThisApartment); >> >

CustomEditor – это очень мощный инструмент, позволяющий решать элегантно множество типовых задач по расширению редактора. В паре с ScriptableObject он позволяет делать простые, удобные и понятные расширения редактора. Этот класс немного сложнее простого добавления кнопок, так как в исходном классе можно заметить, что сериализуется поле [SerializeField] private List _Rooms. Отображение его в инспекторе, во-первых, ни к чему, во-вторых – это может вести к непредвиденным багам и состояниям чертежа. За отрисовку инспектора отвечает метод OnInspectorGUI, и, если вам необходимо просто добавить кнопки, то вы можете вызвать в нём метод DrawDefaultInspector() и все поля будут отрисованы.

Тут же вручную отрисовываются необходимые поля и кнопки. Класс EditorGUILayout в себе имеет много реализаций для самых разных видов полей, поддерживаемых юнити. Но отрисовка кнопок в Unity реализована в классе GUILayout. Как в данном случае работает обработка нажатия кнопок. OnInspectorGUI – отрабатывает на каждое событие пользовательского ввода мышью (перемещение мыши, нажатие клавиш мыши внутри окна редактора и т.п.) Если пользователь сделал клик мышью в баундинг боксе кнопки, то метод возвращает true и отрабатывают методы, которые находятся внутри описанного вами if’a. Для примера:

Кнопка генерации меша

private void GenerateButton() < if (GUILayout.Button( "Generate Mesh" )) < MeshBuilder.GenerateApartmentMesh(_ThisApartment); >>

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

Кроме этих базовых механизмов, используемых при расширении редактора Unity, хотелось бы отдельно отметить очень простой и очень удобный инструмент, про который почему-то многие забывают – Selection. Selection – это статический класс, позволяющий вам выделять в инспекторе и ProjectView необходимые объекты.

Для того, чтобы выбрать какой-то объект, вам просто необходимо написать Selection.activeObject = MyAwesomeUnityObject. И самое прекрасное, что он работает со ScriptableObject. В данном проекте он отвечает за выбор чертежа и комнат в окне с чертежами.

Спасибо за внимание! Надеюсь, статья и проект будут полезны вам, и вы почерпнёте для себя что-то новое в одном из подходов расширения редактора Unity. И как всегда – ссылка на GitHub проект, где можно посмотреть проект целиком. Он пока немного сыроват, но тем не менее уже позволяет делать планировки в 2д просто и быстро.

Как запускать расширения Хрома не из магазина WebStore

Начиная с версии 35 (35.0.1916.114 m), как известно (англ.), браузер Google Chrome для ОС Windows перестал поддерживать установку новых и работу прежде установленных расширений, размещённых не в магазине Chrome WebStore. Это же касается и всех юзерскриптов, не размещённых в этом магазине. Группа Windows-пользователей — обширна, поэтому требуются новые инструкции о том, как с этим бороться. Линуксоидам и маководам это, к счастью, пока не грозит.

История

  • Первое закручивание гаек в сентябре 2012 г.: версия манифеста 2.0;
  • Полный запрет работы не из магазина в мае 2014 г.;
  • Это планировалось ещё в ноябре 2013-го: Chrome users on Windows will soon have to get extensions through Google's store.

Что может быть в установке расширений плохого? В первую очередь, если скрипт (расширение или юзерскрипт) начинает работать на домене, который содержит пользовательские данные, его конфиденциальную информацию, его пароли, логин — всё это становится доступным скрипту, и далее только моральные вопросы к разработчику скрипта определяют не «сольёт» ли он куда-либо эти данные. Несмотря на некоторое различие между Global Scope расширения и остальной части страницы, нет никакой проблемы внедрить скрипт в основную страницу (даже путём подгрузки внешнего изменяемого скрипта) и после этого уже ничем не отличаться от скриптов страницы. Всё, за что отвечает владелец сайта (домена) в отношении пользовательских данных, получает потенциально и автор расширения или юзерскрипта. Об этом постоянно ранее предупреждал Google Chrome при попытке установить скрипт или расширение. Это будет и сейчас, но с разницей в том, что браузер по умолчанию будет устанавливать расширения только из магазина Google WebStore.

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

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

Варианты обхода ограничений

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

Есть официальные советы от Гугла для таких случаев, но там не на одной странице и неполно.

Способ 1, «не пакуй, да не упакован будешь». Самый честный, но официально не рекомендуемый. Распаковать и установить каждое расширение распакованным. Как минус, при каждом новом запуске браузера придётся подтверждать, что расширения установлены сознательно и отключать их не надо (скриншот leonid239 ).

Процесс установки распакованного расширения в Chrome

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

1.1. Установка скачанного откуда-либо расширения в виде файла *.crx

1.1.1. Вначале открыть страницу chrome://extensions/ и установить галочку «Режим разработчика», чтобы появились кнопки для установки и обновления расширений.

1.1.2. Взять файл расширения с окончанием «CRX», переименовать окончание в «ZIP» и распаковать полученный архив в папку (сделанную, например, в общей папке для расширений, созданной для этих целей. Пример: c:\myFiles\chromeExtensions\habrajax).

1.1.3. Установить распакованное расширение из папки нажатием на кнопку «Загрузить распакованное расширение», далее — выбрать каталог, в котором оно распаковано (удобно просто внести в поле имени папки путь к папке, затем Enter, чем идти мышью, выбирая путь).

1.2. Установка юзерскрипта — файла с расширением *.user.js

Юзерскрипт придётся оформить как простенькое расширение — «слепить» из файла *.user.js и файла манифеста manifest.json, за основу которого взять шаблон, в котором заменить вручную несколько полей, чтобы затем в списке расширений было удобно читать описание юзерскрипта (название, версию, описание. Затем оба файла положить в такую же поименованную папку, как в п. 1.1.2.

Всё это генерируется автоматически забрасыванием файла расширения на страницу chrome://extensions, как раньше. Лишь работать расширение не будет, и всё равно надо будет переходить к распакованному расширению по п. 1.3.1. Ручной процесс описан для понимания простоты и взаимосвязи юзерскрипта и расширения.

1.2.1. Скачать и получить файл юзерскрипта с расширением *.user.js.

1.2.2. Подготовить папку, например, c:\myFiles\chromeExtensions\habrPercentageRing\, в которую положить файл *.user.js.

1.2.3. В начале файла юзерскрипта посмотреть директивы скрипта — строчки вида

// @name . // @version . // @description . // @include . (может быть несколько) // @exclude . (может быть несколько) 

и заполнить данными (на месте троеточий) шаблон в файле manifest.json, который создать в той же новой папке.

Заготовка (шаблон) файла manifest.json:

 < "content_scripts": [ < "exclude_globs": [ "все_домены_и_пути_из_exclude_директив" ], "exclude_matches": [ ], "include_globs": [ "все_домены_и_пути_из_include_директив" ], "js": [ "имя_файла_юзерскрипта.js" ], "matches": [ "http://*/*", "https://*/*" ], "run_at": "document_idle" >], "converted_from_user_script": true, "description": "описание_вашего_юзерскрипта", "key": "можно_удалить_не мешает", "name": "имя_вашего_юзерскрипта", "version": "номер_версии_юзерскрипта", "manifest_version": 2 > 

(заменяемые слова написаны одним словом с подчёркиваниями, чтобы удобно было выделять в редакторах двойным кликом);
номер_версии_юзерскрипта — до 4 чисел не более 32767, разделённые точками.
имя_файла_юзерскрипта.js — имя файла скрипта, лежащего рядом с файлом manifest.json

все_домены_и_пути_из_include_директив — в кавычках каждый, разделённые запятыми, со всеми метасимволами типа "*" — все пути из директив @include, которые пишутся в начале файла юзерскрипта;

все_домены_и_пути_из_exclude_директив — то же, для директив @exclude

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

1.2.4. Установить расширение, как в п. 1.1.3.

1.3. Восстановление ранее установленного расширения или юзерскрипта

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

1.3.1. Найдём каталог с этим расширением на системном диске (например, в WinXP — в каталоге С:\Documents and Settings\\, в Win7 — С:\Users\\ (открыть скрытые папки), используя длинное кодовое слово типа «gggcejmogjjjkpidlfinoaonmkpmegnn», написанное после слова «ID:» в блоке описания расширения.

1.3.2. Используем папку, которую браузер успел сделать ранее для этого расширения или юзерскрипта. Обычно, во вложенной папке имеется папка с номером версии расширения. Выбираем нужную — и загружаем как распакованное расширение (можно просто вставить путь к папке в поле Browse for Folder — Folder).

Лучше, конечно, перенести папки с ценными расширениями в другое место (как в прежних примерах, в c:\myFiles\chromeExtensions), иначе при удалении браузера из системы (или пользователя) они могут удалиться.

1.3.3. Это ещё не конец приключений — в расширении, сделанном на базе юзерскрипта, может быть не прописана в файле manifest.json строчка «manifest_version»: 2, о чём браузер скажет, отказываясь его установить. Пропишем

 "manifest_version": 2, 

в первом уровне структуры JSON эту пару «ключ-значение».

1.3.4. Загрузилось? Теперь не забудьте установить галочку «Включить».

(конец вариантов)

После подобных установок в списке расширений будет отображаться путь к каталогу, в котором находится каждое распакованное расширение. Как плюс для разработчиков, крайне просто его будет самостоятельно модифицировать. После модификации потребуется лишь ещё раз установить через кнопку «Загрузить распакованное расширение» (далее — выбрать каталог, в котором оно распаковано). Даже предварительно удалять имеющееся в списке — не обязательно. Действие сводится к нажатию 2 кнопок, если браузер помнит путь к каталогу расширения. Или просто нажать кнопку «Обновить расширения», если надо обновить все.

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

Если будет желание «усовершенствовать» скрипт, превратив его в расширение, добавлением новых параметров в манифест, то тогда пропадёт важное преимущество юзерскрипта — его возможная кроссбраузерность, когда один и тот же скрипт может работать в 3 браузерах, включая старую Оперу. И в 4-м — Safari, если его таким же нехитрым путём заставить выглядеть как расширение Safari (по своим правилам, которые здесь описывать не будем).

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

Способ 2, «химия командной строки». Простой, но с неизвестной длительностью поддержки. Придётся запускать из специального ярлыка (shortcut).

2.1 Запустить браузер из командной строки с параметром "--enable-easy-off-store-extension-install". Это можно сделать из консоли, но удобнее для будущего — через ярлык, в котором дописывается параметр. Пример:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-easy-off-store-extension-install 

2.2. Если был сделан ярлык с параметром — запускать браузер кликом по нему или комбинацией назначенных клавиш. Возможен незапуск, если в момент запуска работал скрытый процесс ранее запущенного Хрома без параметра (проверить и убить в менеджере задач, Ctrl-Shift-Esc). Скрытые процессы остаются, если установлена настройка в браузере «Продолжать работу приложений в фоновом режиме после закрытия браузера».

Способ 3, «химия реестра». Тоже простой, но с неизвестной длительностью поддержки. По отзывам, он работает в версии 35.0.1916.114 m, но не работает в версии Хрома 35.0.1916.153. Был описан 16.03.2014 в http://my-chrome.ru/2014/03/yes-we-can/. У некоторых работает и в обновлённых версиях старше 114 m, судя по отзывам, поэтому условия срабатывания ещё предстоит выяснять.

3.1. Для 64-битной Windows 7 в реестре по пути HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Google \ Update \ ClientState \ прописываем вместо ap: "-multi-chrome" или «1.1-beta-multi-chrome» (тип REG-SZ) значение «2.0-dev-multi-chrome» (без кавычек):

Для Win XP путь будет такой: HKEY_LOCAL_MACHINE \ SOFTWARE \ Google \ Update \ ClientState \

3.2. Повторить то же для папки и такого же параметра в ней.
Пишут, что может помочь и такое значение: «2.0-Canary-multi-chrome».

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

(в данном примере кроссбраузерный юзерскрипт (для Хабра) был взят прямо из папки его использования в Firefox, и там же был добавлен manifest.json, что уменьшило количество размещений скрипта)

3.4. Включить расширение установкой чекбокса.

Смысл фокуса в том, что сообщаем браузеру, что это якобы DEV-версия браузера. Он, как побочный эффект, начинает хотеть обновиться до DEV-версии, что видно в попапе «About. ».

Если в реестре не нашлось этого пути — попробуйте поискать поиском по реестру значение «multi-chrome» и заменить все такие находки.

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

Способ 5: ещё проще, но без перспектив: установить старую версию браузера Chrome и запретить в ней обновления.

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

Старые версии брать отсюда.
Для отключения обновлений подсказывают такой батник:

reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v UpdateDefault /t REG_DWORD /d 0 /f reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v AutoUpdateCheckPeriodMinutes /t REG_DWORD /d 0 /f reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v DisableAutoUpdateChecksCheckboxValue /t REG_DWORD /d 1 /f reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v Update /t REG_DWORD /d 0 /f 

Способ 6, «прикинься разработчиком». Эту возможность оставил тебе Гугл. Если пользоваться версией браузера, скачанной с Dev- или Canary- канала, ограничения работоспособности немагазинных расширений не будет. Canary не будет конфликтовать с установленным в системе Хромом стабильной версии.

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

Добрый Гугл обещает не запрещать установку расширений в Dev Channel и Canary-версиях. Тут всё логично: на эксперименты идут разработчики, маргиналы, а они знают, чем грозит установка непроверенных расширений. Другим же рекомендовать это не с руки, потому что выглядит как принудительное привязывание к непроверенным, сырым версиям браузера. Даже большинству разработчиков это не нужно — у каждого есть много других задач и увлечений… Но, продолжим парад странностей.

Способ 7, «думай иначе» («think different»). Свежая мысль Apple: «Зачем нам Windows?». Ох, как же это банально! Переходим на Mac или Linux.

Способ 8, «думай иначе, но в Windows». Даже так? Да. Переходим на другой браузер, основанный на Chromium. Если он поддерживает расширения, то он не будет иметь залочивания расширений на гугловском магазине.

Первый кандидат для выбора — это, конечно, Chromium: браузер, служащий основой для Chrome, но без закрытых (с точки зрения кодов и политики компании) технологий Google.

Способ 9, «будь боссом». Для уважаемых владельцев корпоративных сетей предприятия (громко сказано, но всё гораздо проще) есть способ иметь собственный домен, с которого пользователи могут установить расширения.

Способ 10, «шаблоны политик». Перевод и инструкции будут на днях (27.06.2014), пока что — ссылка (англ.) на оригинал, присланная читателем kvark (не с Хабра). Способ сложен в настройке и прописывании каждого расширения на начальном этапе, зато не требует, как в способе 1, подтверждения при каждом запуске браузера.

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

  • Chrome - такой Chrome
  • Google Chrome
  • JavaScript
  • GreaseMonkey
  • Расширения для браузеров

Подборка расширений для разработчиков

Всем привет, меня зовут Кирилл Мыльников, я frontend разработчик в ГК Юзтех. Сегодня хочу рассказать о расширениях для разработчиков в Google Chrome.

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

Список обширный, но это не значит, что нужно использовать каждое расширение. Используйте только то, что пригодится вам в вашей области работы. Например, для чистки вёрстки достаточно расширений для работы с CSS. Итак, начнём.

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

Ключевые особенности:

  1. Легко отслеживает тесты Selenium и JavaScript с помощью его инструментов отладки. Чтобы помочь быстро исправить ошибки, он предлагает видеозаписи и автоматические снимки экранов с ошибками;
  2. Вы также можете добавить неограниченное количество пользователей из вашей организации в свою учётную запись, чтобы вся команда могла лучше сотрудничать и быстрее обмениваться результатами;
  3. Позволяет инженерам QA тестировать приложения на предмет сбоев и сценариев на основе местоположения. Обеспечивает интеграцию со многими расширениями и подключенными модулями включая Appium, Jenkins, Gradle и Visual Studio;
  4. Agile-команды могут получать сведения производительности операций автоматизированного тестирования.

Минусы:

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

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

Ключевые особенности:

  1. Простой дизайн;
  2. Это бесплатно;
  3. Офлайн-приложение;
  4. Позволяет включать или отключать время и параметры очистки;
  5. Есть сортировка вариантов очистки (drag).

Colorzilla — популярное и широко используемое расширение среди разработчиков. Оно позволяет найти любой цвет пикселя на любом веб-сайте. А ещё оно позволяет вести индекс истории цвета, который вы недавно использовали.

Ключевые особенности:

  1. При использовании инструмента “Пипетка”, вы сможете получить любой цвет на сайте;
  2. Есть конечный генератор градиента CSS;
  3. Доступна расширенная палитра цветов (аналог Photoshop);
  4. Можно выбрать цвет на любом уровне масштабирования.

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

Ключевые особенности:

  1. Обеспечивает интуитивное понятное управление;
  2. Адаптация и кроссплатформенность под любой браузер.

Минусы:

  1. Требует постоянных обновлений;
  2. Для различных браузеров требуется своя адаптированная версия программы.

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

Ключевые особенности:

  1. Настройки и плагины обеспечивают быстрой доступ;
  2. Мгновенно увидеть CSS код;
  3. Простая установка.

EditThisCookie — полезное расширение, представляющее собой мощный менеджер cookie. С его помощью можно легко удалять, добавлять, изменять, искать и блокировать cookie.

Ключевые особенности:

  1. Редактирование файлов cookie;
  2. Поиск файлов cookie;
  3. Блокировка файлов cookie;
  4. Экспорт/Импорт файлов cookie в формат JSON;
  5. Импорт cookies.txt.

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

Ключевые особенности:

  1. Позволяет блокировать скрипты, изображения, фреймы и встраиваемые объекты от компаний, которым вы не доверяете;
  2. Гибкая настройка плагина;
  3. Расширение для мобильных браузеров.

Минусы:

  1. Не во всех браузерах работает, в этом случае можете использовать альтернативы.

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

Ключевые особенности:

  1. Быстро и просто, один щелчок для захвата всей веб-страницы;
  2. Точность;
  3. Скачать скриншот в формате JPG, PNG, PDF и т.д.

Lambda Test позволяет разработчикам и тестировщикам выполнить кроссбраузерное тестирование в браузерах и операционных системах в интернете с различными расширениями экрана.

Ключевые особенности:

  1. Проверка скорости отклика на всех размерах экрана;
  2. Отладка в реальном времени;
  3. Скриншоты и запись видео;
  4. Чёткие и полезные журналы сеансов;
  5. Интеллектуальное визуальное регрессионное тестирование;
  6. Онлайн тестирование совместимости браузера;
  7. LambdaTest может легко интегрироваться со следующими инструментами: Jira, Slack, Asana, Github, Gitlab, Bitbucket и т.д.

LightHouse — эффективное расширение, которое помогает разработчику улучшать качество веб-страниц. А ещё это расширение с исходным кодом, и разработчики смогут анализировать и решать SEO проблемы. Оно не только тестирует сайт и показывает оценку производительности, но ещё дает конкретные рекомендации: что можно улучшить, чтобы сделать сайт быстрее.

Ключевые особенности:

  1. Простота использования. Если вы новичок в SEO, то это может сбить вас с толку. У большинства нет технических знаний для применения сложных инструментов тестирования. LightHouse прост в использовании, анализ сайта выполняется одним нажатием;
  2. Постоянное обновление. Данное расширение постоянное обновляется разработчиками Google.

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

Ключевые особенности:

  1. Обеспечивает интуитивное понятное управление;
  2. Адаптация и кроссплатформенность под любой браузер.

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

Ключевые особенности:

  1. Можете узнать технологический стек, который используется на веб-сайте мгновенно и бесплатно;
  2. Интуитивное понятное управление.

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

Ключевые особенности:

  1. Интуитивное понятное управление;
  2. Адаптация и кроссплатформенность под любой браузер.

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

Ключевые особенности:

  1. Интуитивное понятное управление;
  2. Адаптация и кроссплатформенность под любой браузер.

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

Ключевые особенности:

  1. Интуитивное понятное управление;
  2. Адаптация и кроссплатформенность под любой браузер.

Redux DevTools — специальное расширение для браузера, которое позволяет легко дебажить redux приложения.

Ключевые особенности:

  1. Легко и просто можно отслеживать экшены;
  2. Интуитивный и понятный интерфейс;
  3. Можно посмотреть все хранилище приложения.

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

Ключевые особенности:

  1. Простое копирование JSON в буфер;
  2. Настройка отображения данных из JSON;
  3. Подсказки при написании запроса к JSON;
  4. Сигнатура структуры JSON.

На этом всё, спасибо, что уделили время. Я поделился расширениями, которые пробовал сам, но если вы считаете, что я упустил какой-то инструмент, можете оставить комментарии. Заодно поделитесь своим опытом использования расширений: пробовали ли что-то из этого или есть что-то другое? Будет круто, если приложите скриншоты и расскажете о подробном использовании — обсудим в комментариях.

  • расширения
  • расширения chrome
  • расширения для браузеров
  • разработка
  • разработка приложений
  • Блог компании Usetech
  • Программирование
  • Расширения для браузеров

Антирекламный щит рядового пользователя: Яндекс без дзена, YouTube без рекламы, Хабр без баннера

Контроль над содержимым web должен принадлежать в т.ч. рядовому пользователю, а не только маркетологам. Web-пользователь сам в состоянии определять, что для него является пагубной рекламой, а что полезным контентом. Если пользователь считает, что новости или дзен Яндекса - это своего рода реклама, то он может ограничить себя от „вредоносного для него контента“ совершенно законно в „касание“ и без красноглазия. Решение — под катом.

В 20 веке в противопоставление массового засилья рекламы на телевидении, разработчики телевизионной аппаратуры придумали кнопку на пульте ДУ - "mute". Дедушки и бабушки положительно оценили антирекламный прогресс, взяв на вооружение этот эффект оглушающей тишины.

В 21 веке непродуктивные методы рекламы, например, такие как 25-кадр остались в прошлом, а FUD маркетологов и адблоки киберпанков (другие приёмы и ПО) над манипуляцией массовым сознанием развернулись на самом близком фронте — в мировой сети Интернет.

Windows; GNU/Linux и Android OS-ы. В этой статье, и возможно в комментах, будут изложены современные и эффективные приёмы защиты второй линии против глобальной рекламы на сегодняшний день.

uBlock Origin

Яндекс (мои) персональные поисковые страницы на ПК/Android.

Так выглядят мои персональные страницы Яндекса. Отсутствуют/выпилены: прямая реклама; Я.Дзен; Я.Плюс; Я.Новости; телепрограмма, подвал и прочее, что нарушало мое интернет-равновесие.

Поясняю свою позицию на примере ликвидации блока: Яндекс.Новости с www.yandex.ru. Основная причина в том, что транснациональная корпорация подсовывает мне неприемлемый, новостной, политический контент (только ли мне?). В Яндексе я не авторизован и мой персональный профиль менее известен Я.Маркетологам (я не сохраняю cookies/историю и пароли в браузере, потому что серфю в браузерах Firefox и DuckDuckGo в дефолтном режиме инкогнито мимо политических интриг).

Пример новостной Топ-ленты в DDG-браузере на главной странице Яндекса

Пример поискового запроса в Яндексе: 'Стивен Сигал'

UPD сентябрь 2021:

Интересно: в каждой стране свой местный поисковик генерирует контент подобного рода или так обучился только Яндекс?

Как мне удалось персонализировать страницы сайтов, убрав лишнее? Очень просто: я использовал вместо коммерческого Adblock Plus --> киберпанковский uBlock Origin.

Многим пользователям (в какой-то степени благодаря той же рекламе) известен addon к браузерам Adblock Plus, который блокирует социальные и рекламные трекеры. Но у этого расширения есть конкретные изъяны:

  • Adblock Plus имеет неочевидный отстрел выборочных HTML-элементов (к сожалению блокировка рекламы осуществляется по интересам разработчиков аддона, а не юзера). Пользователю недоступна статистика по блокировке элементов.
  • ABP - это коммерц, а это значит, что режущую рекламу фильтры/политика/код сформировываются по рыночным $-правилам.
  • Для кого-то политика конфиденциальности Adblock Plus (сбор персональных данных о пользователях) может оказаться неприемлемой.

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

Процитирую здесь "свои пункты" из Википедии, которые имеют значения:

Конфиденциальность Adblock Plus

Согласно политике конфиденциальности: Adblock Plus или Adblock Browser обрабатывает персональные данные пользователей такие как ip, операционная система, дата последнего обновления, версия браузера[13].

Политики конфиденциальности uBlock и uBlock Origin различаются.

Согласно политике конфиденциальности uBlock Origin: обработка персональных данных пользователей не осуществляется[44] в отличие, например, от политик конфиденциальностей Adblock Plus или uBlock[46].

uBlock Origin входит в предустановленное ПО дистрибутива с повышенными требованиями к приватности и анонимности пользователей GNU/Linux Tails.[47]

uBlock Origin имеет техническую особенность, которая позволяет пользователям частично обходить технические средства защиты сайтов с платной подпиской. Например, пользователь хочет почитать, хотя бы комментарии к публикации на Washingtonpost, но на сайте всплывает окошко не дающее что-либо продолжить без платной подписки. Два клика и частично материалы становятся доступны для чтения (конечно многие не знают об этом трюке, но тем не менее, ИМHО, — это смахивает на пиратство и урон правообладателю, не одобряю).

Преимущества uBlock Origin перед Adblock Plus очевидные:

  • Кроме автоблокировки рекламы, например в Ютубе, осуществляется блокировка web-контента на выбор пользователя в касание, то есть пользовательский интерфейс в uBlock Origin — дружелюбный. Пользователь может заблочить "любой/не нравящийся контент" на любимых сайтах.
  • Полноценная статистика о блокировках скриптов/рекламы.
  • Дополнительные, расширенные авто-фильтры, например, adguard-фильтры.
  • Отсутствие какого-либо сбора перс.данных пользователей.

Недостатки uBlock Origin в целом:

  • Addon uBlock Origin с открытым исходным кодом, имеет высочайшую популярность на Github-е. На данный момент проект набрал 24к звёзд, но при всем этом предложить патчи или открыть проблему для рядового пользователя является затруднительным, так как разработчик uBlock Origin ограничил круг лиц к репозиторию, который мог бы предлагать исправления и улучшения. UPD: ситуация поправлена.
  • Разработчики Яндекс браузера преуспели: Addon uBlock Origin цензурирован своей магией на главной странице Яндекса в Яндекс браузере.

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

Скрины до и после блокировки 'яндекс-мусора'.

И последнее про плагин: при установке uBlock Origin пользователю нужно быть внимательнее, так как существует альтернативная версия ПО - uBlock (которая имеет схожий логотип и название, но при этом собирает данные о пользователе), а сам uBlock Origin имеет две версии (стандартную и для разработчиков), я рекомендую версию для разработчиков, различие заключается в опережающей разработке стабильного uBlock Origin.

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

Оф.цитата из uBO.

YouTube vanced & альтернатива

Вы обращали внимание на то, что в Telegram (клиент приложения под Android) ссылки на Ютуб-ролики открываются без рекламы? Фокус в том, что рекламу создает приложение YouTube, а само видео лежит глубоко по ссылке.

YouTube vanced - это аналог приложения YouTube для OS Android, настоящая психотерапия после чрезмерной (я даже слышал выражение „ублюдской“) рекламы, которая приводит в тч. и к депрессиям интернет-зависимых людей .

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

YouTube vanced работает и на нерутированных гаджетах. Очевидно, что упомянутое приложение вы не встретите в google play market.

Альтернативный просмотр YouTube без рекламы (но без лайков/комментариев): пользователю поможет open source приложение — NewPipe из f-droid, которое позволяет еще и скачивать видеоролики или SkyTube, так же на Android можно скачивать и в CLI с помощью пакета youtubedr в Termux:
$ youtubedr download htps://www.youtube.com/watch?v=zRO_KsPZJto

С Android устройств можно активничать на YouTube и из обычного FF или Brave браузеров с расширением/встроенным uBO, режущим рекламу, но на мой субъективный взгляд — это не так удобно, как в приложении. Однако явно лучше, чем подвергаться 'насилию' навязчивой рекламы, особенно если пользователь пользуется видео-платформой — нечасто.

из КФ/ Очень странные дела

Не в обиду эффективным маркетологам, зачитавшимся такими произведениями, как например, "Атлант расправил плечи", презирающих и обвиняющих активных противников рекламы, которые по их мнению утратили рациональное мышление в реальной виртуальности. Встает вопрос: зачем свободная и бесплатная альтернатива, существующая на донаты, если имеется монетизированный YouTube Premium? В этом нарастающем конфликте у каждого своя правда: между маркетологорекламистами (стремящимися собирать, хранить, делиться с целью повысить эффективность рекламы, или того хуже — обрабатывать весьма личную информацию о юзерах) и сопротивляющимися этому явлению — пользователями.

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

Помимо навязчивой рекламы, обновленного соглашения и просто ради конкуренции развиваются децентрализованные сервисы подобные YouTube: D.Tube; PeerTube.

Или прочие, например, bitchute, который уже успел задеть РКН.

Блокировка

Остается загадкой: почему сайт YouTube vanced всё ещё открывается в браузере Chrome, а киберпанки выходят на связь, диссиденты явно наносят урон по рекламному рынку в т.ч. Гугла и по заработку блогеров, но выручают простых пользователей.

p.s. Только таким способом удалось реанимировать статью из черновиков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://kapelnicza.vyvod-iz-zapoya-v-stacionare-samara12.ru/