Запускаем приложения для Windows на Android устройствах

Wine, позволяющий запускать приложения для Windows в Linux и UNIX-системах, существует уже более двадцати лет. Последние версии Wine справляются с этой задачей настолько хорошо, что с его помощью можно работать с большинством популярных приложений и играть почти во все игры, поддерживающие DirectX 9.Wine для Android — коммерческая версия CrossOver.

Wine — это рекурсивный акроним Wine Is Not an Emulator («Wine — не эмулятор»). И это действительно правда: Wine — это альтернативная написанная с нуля реализация Win32 API. CrossOver — коммерческая версия Wine, которая предназначена для запуска преимущественно Microsoft Office и игр для Windows на UNIX-совместимых системах и предоставляет все необходимые для этого оптимизации и настройки совместимости. В CrossOver приложения зачастую работают стабильнее и требуют меньше разбирательств с настройками. Другими словами, CrossOver — это улучшенный Wine. И дорогой: разработчики просят за него 50 долларов.

В 2013 году один из разработчиков Wine Александр Жюльяр (Alexandre Julliard) в рамках саммита Free and Open source Software Developers’ European Meeting пpодемонстрировал предварительную версию программного обеспечения для мобильной операционной системы Android, дающую возможность запускать разнообразные Windows-приложения. Портативных устройств с процессором Intel x86 и Android на борту тогда практически не было, поэтому проект был интересен исключительно как proof of concept.

Однако на этом история не закончилась. В октябре 2015 года компания CodeWaves открыла регистрацию на тестирование CrossOver для Android, куда я с радостью записался. Релиз планировался на конец 2015 года. Но ни в конце 2015-го, ни в начале 2016 года не было никаких вестей. Бета-версия появилась лишь 25 августа 2016 года и пока доступна только тестировщикам. Причем сразу в версии для Android и для устройств с Chrome OS (в которых есть Play Market).

Итак, в этой статье мы пoсмотрим, что же собой представляет CrossOver для Android.

Характеристики тестового компьютера:

  • Процессор: Intel Core i5 4200H
  • Видеопроцессор: Intel HD Graphic 4600
  • Оперативная память: 8 Гбайт (1600 МГц)
  • Диск: SSD ADATA Premier Pro SP920 256 Гбайт (под Android выделено 22 Гбайт)
  • ОС: CyanogenMod 13.0 Android x86_64 rc1
  • CrossOver: 15.5.0 alpha4

Рабочий стол

Сразу после запуска перед нами предстает рабочий стол с синим фоном. Внизу кнопка «Пуск», в левом верхнем углу красуется надпись CrossOver, а в правом верхнем — глaвная кнопка Install Application. После нажатия на нее откроется окно с выбором приложения. Причем в самом списке только четыре программы: Steam, MS Office 2007 и 2010, WinZip 14.0, что ввергает в уныние. Но достаточно снять галочку с Only know-good applications, как перед нами предстанет список из более чем сотни программ и игр.

Многие из них можно установить через кнопку Install, но некоторые все-таки придется загрузить отдельно. В списке можно найти довольно интересные игры: Bioshock Infinite, Tomb Raider 2013, Star Wars: Battlefront, World of Tanks, Dota 2, Batman Arckham City… Из программ есть Adobe Photoshop CS3, Adobe Acrobat Reader XI, Autocad 2013, Total Commander. По ссылкам находятся те версии, которые должны обязательно заработать.

Все программы запускаются в окнах. Но при желании их можно свернуть в строку задач, кaк в Windows. Есть и трей, некоторые программы могут туда сворачиваться и работать в фоне. Количество одновременно запущенных приложений, по всей видимости, ограничивается объемом оперативной памяти устройства.

Все приложения запускаются в отдельных окнах

Интеграция с ОС Android просто прекрасна. К примеру, можно открыть браузер, запустить в нем ролик YouTube, нажать кнопку «Домой», и воспроизведение продолжится в фоне. Буфер обмена общий. Можно скопировать текст в приложении Android и вставить в текстовый редактор, запущенный в CrossOver.

Если перейти в «Пуск → Панель управления», то там мы найдем интересные пункты:

  • Игровые контроллеры. Настройка джойстиков и переключение между ними.
  • Параметры интернета. Настройка домашнeй страницы для браузера (самого браузера в CrossOver нет, но есть HTML-движок, который мoгут использовать приложения для показа веб-страниц), упpавление историей, кешем, файлами cookies. Тут же есть управление сертификaтами и настройки безопасности для разных типов интернет-соединений.
  • Установка/удаление программ. Название говорит само за себя.
Установка и удаление программ

Команда «Пуск → Запустить…» делает то же самое, что нажатие Win + R в самой Windows, то есть открывает строку запуска. Команда regedit откроет редактор реестра (да, тут есть полноценный реестр), cmd откроет кoмандную строку (bat-файлы работают), explorer — примитивный файловый менеджер.

Командная строка
Редактор реестра

Тесты приложений

  • Steam. CrossOver предлагает его установить сразу после запуска. Работает прекрасно, без подвисаний и лагов. Можно посмотреть, загрузить, купить любую игру. Какие из них заработают — большой вопрос. Так что придется пробовать.
  • Notepad++. Версию x64 установить не получилось. Поддержки x64-программ тут нет. А вот версия для Windows x32 встала, как на Windows… Никаких проблем ни с плагинами, ни с настройками. Только вот на устройcтвах с очень маленьким сенсорным экраном будут серьезные сложности с управлением.
  • SMath Studio. Требует NET Framework 2.0, после установки которой успешно запускается, хоть и имеет проблемы с графикой: не отображаются математические знаки и сетка. Но все вычисления можно выполнять.
  • Total Commander. Версию с официального сайта запустить не удалось. А вот версия из репозитория CrossOver (к сожалению, это не самая свежая 8.52а) заработала прекрасно.
  • GPU-Z и CPU-Z не заработали.
  • AIDA64 выдала ошибку при установке.
  • CCleaner. Версию с сайта (5.36) установить не удалось, но из репозитория прекрасно встала версия 3.16.166 (она там единственная) и даже нашла кое-какой мусор.
  • Firefox версии 47.02 прекрасно работал, однако после обновления до 49-й версии пeрестал запускаться.
  • LibreOffice. Последняя версия с официально сайта установилась и заработала без каких-либо проблем.
SMath Studio

Официально заявлена поддержка MS Office 2010. А в репозитории можно найти даже версию 2013 года (основываясь на опыте, скажу, что 2016-й офис вряд ли заработает). Также пока что не заработает Mathcad, Wolfram Mathematica и другие сложные и сильно интегрированные в систему приложения.

LibreOffice

WOT Blitz из Steam запустить не удaлось, хотя нативная версия игры для Android работала прекрасно. Установщик десктопной версии World Of Tanks тоже не удалось запустить. А версия, предлагаемая для установки самим CrossOver, предназначена для европейского сервера. Кстати, даже в ней мне не удалось найти в инсталляторе кнопку «Установка».

CCleaner

Настройки

Открыть настройки можно, если последовательно кликнуть на «Пуск → Builtin Tools → Wine Configuration». Тут все точно так же, как в стандартном Wine для Linux:

  • Приложения. Здесь можно выбрать версию ОС Windows, которую CrossOver передаст приложению для своей идентификации. Выбор доступен как для каждого приложения по отдeльности, так и для всех сразу. Поставить можно все версии от Windows 2.0 до Windows 10! По умолчанию установлена Windows XP. После переключения на Windows 10 перестал работать Steam. Других изменений замечено не было. Настройки версии Windows можно применять отдельно для каждого приложения.
  • Библиотеки. Настройки стандартных DLL-библиотек Windows. Для каждой библиотеки доступен выбор из двух версий «Встроенная (Wine)» и «Сторонняя (Windows)». Смысл здесь в том, что встроенные библиотеки Wine нередко реализованы не полностью и могут быть несовместимы с некоторыми приложениями. В этом случае можно скачать родную библиотеку Wine, положить ее в виртуальную папку C:\windows и выбрать эту библиотеку как стороннюю. Узнать о том, какие библиотеки могут требовать те или иные приложения и игры, можно в базе совместимых приложений Wine.
  • Графика. Тут есть настройки шрифта, перехвата мыши окнами, а также некоторые другие парамeтры графики.
  • Вид и интеграция. Тут есть настройки тем (правда, во встроенном каталоге тем вoобще нет). А еще тут можно самостоятельно настроить множество параметров, напримeр цвет рабочего стола, рамки окна, шрифт. Фактически это инструмент для создания собственных тем. Также тут можно помeнять папки, используемые для документов, музыки, картинок, видео. По умолчанию они очень интересно интегрированы с Android-окружением. Даже менять не хочется.
  • Диски. Создание и редактирование виртуальных дисков. По умолчанию есть диск C (системный, находится где-то внутри самого приложения) и диск Z, который ссылается на корневой каталог (/). Так что, если необходимо установить приложeние с карты памяти, нужно открывать папку Z:\sdcard.
  • Аудио. Настройка устройств ввода и вывода звука и проверка их работы.
Настройки графики

Также в меню Builtin Tools можно найти:

  • Command Shell — командная строка. Правда, в ней нет почти никаких функций;
  • Notepad — блокнот из Windows;
  • File Explorer — примитивный файловый менеджер.
Файловый менеджер

Проблемы

  • Запуск CrossOver возможен только на процессорах x86. Так что даже самые мощные устройства на ARM в пролете.
  • Нет поддержки x64-программ, несмотря на то что версия Android для x64-процессоров существует.
  • Отсутствует поддержка полноэкраннoго режима для всех приложений (неизвестно, как убрать строку с названием CrossOver и пунктом перехода в репозиторий приложений).
  • Поддержка только DirectX 9. В ближайшем будущем разработчики обещают добавить поддержку DirectX 10 и 11. А вот DirectX 12 вряд ли вообще будет доступен в ближайшие годы.
  • Объем памяти — тот же MS Office занимает около 3 Гбайт на диске. А если поставить Adobe Photoshop, Audition, Mathcad, то места останется слишком мало. Даже в аппарате с 32 Гбайт памяти.
  • Большинство программ, доступных через каталог CrossOver, на английском языке и/или представляют собой европейские версии без русской локализации, привязанные к евросерверам.
  • Нет диспетчера задач. Это несколько затрудняет управление процеcсами.
  • Эмуляции джойстика, как, к примеру, на эмуляторах игровых приставок, нет. Так что на устройствах с сенсорным экраном без джойстика вряд ли получится во что-то поиграть.
  • Многооконный режим работает только в пределах CrossOver. Так что оптимизации для Remix OS и Chrome OS пока еще нет.

Microsoft показала обновленное меню «Пуск» Windows 10

Компания Microsoft недавно поделилась скриншотами нового меню «Пуск» и других обновленных элементов интерфейса в Windows 10. Теперь же в Сети были опубликованы GIF-изображения, позволяющие ближе познакомиться с меню «Пуск» и другими частями обновлённого пользовательского интерфейса операционной системы.

В новой версии «Пуска» Microsoft избавилась от пользовательских цветов приложений, которые появились еще в Windows 8, так что «пользовательские квадраты» в меню стали не такими навязчивыми, как были. Еще появились значки с закругленными углами.

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

Когда новое оформление Windows 10 станет доступно, не уточняется. Скорее всего, участникам инсайдерской программы Microsoft новое меню «Пуск» станет доступно в конце этого года, а обычные пользователи смогут начать взаимодействие с ним в начале следующего года.

Подписывайтесь на 

10+ полезных jQuery сниппетов на каждый день

jquery

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


Плавный скролл к верху страницы

Давайте начнем этот список с очень популярного и полезного сниппета: эти 4 строки кода позволят вашим посетителям плавно проскролить страницу к верху простым нажатием ссылки (с id #top) расположенной внизу страницы.

$("a[href='#top']").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});

Источник

Дублирование thead в самый низ html таблицы

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

var $tfoot = $('<tfoot></tfoot>');
$($('thead').clone(true, true).children().get().reverse()).each(function() {
  $tfoot.append($(this));
});
$tfoot.insertAfter('table thead');

Источник

Загрузка внешнего контента

Вам нужно добавить определенный внешний контент в div? Так вот это очень просто сделать с jQuery, как показано в нижеприведенном примере.

$("#content").load("somefile.html", function(response, status, xhr) {
  // error handling
  if(status == "error") {
    $("#content").html("An error occured: " + xhr.status + " " + xhr.statusText);
  }
});

Источник

Колонки одинаковой высоты

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

var maxheight = 0;
$("div.col").each(function() {
  if($(this).height() > maxheight) { maxheight = $(this).height(); }
});

$("div.col").height(maxheight);

Источник

Табличные полосы (зебра)

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

$(document).ready(function(){                             
     $("table tr:even").addClass('stripe');
});

Источник

Частичное обновление страницы

Если вам нужно обновить только часть страницы, то эти 3 строки кода точно помогут. В примере div с id #refresh автоматически обновляется каждые 10 секунд.

setInterval(function() {
  $("#refresh").load(location.href+" #refresh>*","");
}, 10000); // milliseconds to wait

Источник

Предзагрузка изображений

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

$.preloadImages = function() {
       for(var i = 0; i<arguments.length; i++) {
               $("<img />").attr("src", arguments[i]);
       }
}

$(document).ready(function() {
       $.preloadImages("hoverimage1.jpg","hoverimage2.jpg");
});

Источник

Открытие внешних ссылок в новом окне или новой вкладке

Аттрибут target=»_blank» позволяет вам открывать ссылки в новых окнах. Но это относится к открытию внешних ссылок, внутридоменные ссылки должны окрываться в том же окне.
Этот код находит внешнюю ссылку и добавляет в найденный элемент аттрибут target=»_blank».

$('a').each(function() {
   var a = new RegExp('/' + window.location.host + '/');
   if(!a.test(this.href)) {
       $(this).click(function(event) {
           event.preventDefault();
           event.stopPropagation();
           window.open(this.href, '_blank');
       });
   }
});

Источник

Div по ширине/высоте вьюпорта

Этот удобный фрагмент кода позволяет создавать растянутый по ширине/высоте вьюпорта div. Код также поддерживает изменение размеров окна. Прекрасное решение для модальных диалогов и popup-окон.

// global vars
var winWidth = $(window).width();
var winHeight = $(window).height();

// set initial div height / width
$('div').css({
    'width': winWidth,
'height': winHeight,
});

// make sure div stays full width/height on resize
$(window).resize(function(){
    $('div').css({
    'width': winWidth,
    'height': winHeight,
});
});

Источник

Проверка сложности пароля

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

Для начала создадим поля ввода:

<input type="password" name="pass" id="pass" />
<span id="passstrength"></span>

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

$('#pass').keyup(function(e) {
     var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
     var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
     var enoughRegex = new RegExp("(?=.{6,}).*", "g");
     if (false == enoughRegex.test($(this).val())) {
             $('#passstrength').html('More Characters');
     } else if (strongRegex.test($(this).val())) {
             $('#passstrength').className = 'ok';
             $('#passstrength').html('Strong!');
     } else if (mediumRegex.test($(this).val())) {
             $('#passstrength').className = 'alert';
             $('#passstrength').html('Medium!');
     } else {
             $('#passstrength').className = 'error';
             $('#passstrength').html('Weak!');
     }
     return true;
});

Источник

Изменение размеров изображения

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

$(window).bind("load", function() {
	// IMAGE RESIZE
	$('#product_cat_list img').each(function() {
		var maxWidth = 120;
		var maxHeight = 120;
		var ratio = 0;
		var width = $(this).width();
		var height = $(this).height();
	
		if(width > maxWidth){
			ratio = maxWidth / width;
			$(this).css("width", maxWidth);
			$(this).css("height", height * ratio);
			height = height * ratio;
		}
		var width = $(this).width();
		var height = $(this).height();
		if(height > maxHeight){
			ratio = maxHeight / height;
			$(this).css("height", maxHeight);
			$(this).css("width", width * ratio);
			width = width * ratio;
		}
	});
	//$("#contentpage img").show();
	// IMAGE RESIZE
});

Источник

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

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

var loading = false;
$(window).scroll(function(){
	if((($(window).scrollTop()+$(window).height())+250)>=$(document).height()){
		if(loading == false){
			loading = true;
			$('#loadingbar').css("display","block");
			$.get("load.php?start="+$('#loaded_max').val(), function(loaded){
				$('body').append(loaded);
				$('#loaded_max').val(parseInt($('#loaded_max').val())+50);
				$('#loadingbar').css("display","none");
				loading = false;
			});
		}
	}
});

$(document).ready(function() {
	$('#loaded_max').val(50);
});

Источник

Проверить, загрузилось ли изображение

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

var imgsrc = 'img/image1.png';
$('<img/>').load(function () {
    alert('image loaded');
}).error(function () {
    alert('error loading image');
}).attr('src', imgsrc);

Источник

Сортировка списка в алфавитном порядке

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

$(function() {
    $.fn.sortList = function() {
    var mylist = $(this);
    var listitems = $('li', mylist).get();
    listitems.sort(function(a, b) {
        var compA = $(a).text().toUpperCase();
        var compB = $(b).text().toUpperCase();
        return (compA < compB) ? -1 : 1;
    });
    $.each(listitems, function(i, itm) {
        mylist.append(itm);
    });
   }

    $("ul#demoOne").sortList();

});

Источник

Как отключить в JavaScript в разных Браузерах?

Как отключить JS

Инструкции по включению/отключению JavaScript


Google Chrome


  1. Нажмите кнопку   и выберите пункт Настройки.
  2. В нижней части страницы Настройки нажмите ссылку Показать дополнительные настройки.
  3. В блоке Личные данные нажмите кнопку Настройки контента.


  4. В разделе JavaScript установите значение Разрешить всем сайтам использовать JavaScript или Запретить выполнение JavaScript на всех сайтах.



  5. Нажмите кнопку Готово, чтобы сохранить изменения.

Mozilla Firefox


Версия 23 и выше

В Mozilla Firefox версии 23 и выше вручную включать JavaScript не требуется — опция включена по умолчанию.

Чтобы отключить JavaScript, выполните следующие действия:

  1. В адресной строке браузера введите команду about:config.
  2. В открывшемся окне нажмите кнопку Я обещаю, что буду осторожен!.
  3. В строке Поиск введите javascript.enabled.
  4. Левой кнопкой мыши выделите строки со значением «по умолчанию» и нажмите Переключить.


Примечание. Чтобы включить JavaScript обратно, выполните перечисленные выше действия, только на шаге №4 выделите строки со значением «установлено пользователем» .

Версия 22 и ниже

  1. В меню Инструменты выберите пункт Настройки.



  2. Чтобы отключить JavaScript, перейдите в раздел Содержимое и отключите опцию Использовать JavaScript.

    Чтобы включить JavaScript, перейдите в раздел Содержимое и поставьте флажок Использовать JavaScript.
  3. Нажмите кнопку ОК, чтобы сохранить изменения. 

Opera

Версия 15 и выше

  1. Нажмите сочетание клавиш Alt + P.
  2. На вкладке Сайты в блоке JavaScript установите значение Разрешить выполнение JavaScript или Запретить выполнение JavaScript.

Версии с 10.5 по 14

  1. В меню Настройки выберите пункт Общие настройки.



  2. В открывшемся окне перейдите на вкладку Дополнительно. Выберите пункт меню Содержимое и отключите опции (Включить JavaScript и Включить Java).


Internet Explorer



  1. Нажмите кнопку  и выберите пункт Свойства браузера.
  2. Перейдите на вкладку Безопасность и выберите зону Интернет, затем нажмите кнопку Другой.



  3. Чтобы отключить JavaScript: в разделе Сценарии → Активные сценарии и Выполнять сценарии приложений Java выберите пункт Отключить.



    Чтобы включить JavaScript: в разделе Сценарии → Активные сценарии и Выполнять сценарии приложений Java выберите пункт Включить.
  4. Чтобы сохранить изменения, нажмите кнопку ОК в окне Параметры безопасности — зона Интернета, затем нажмите кнопку Применить в окне Свойства браузера

 Safari

  1. В меню браузера выберите пункт Safari → Настройки → Безопасность.
  2. В разделе Веб-контент отключите опцию Включить JavaScript.






iPhone

  1.  Нажмите иконку «Настройки» 

  2. Прокрутите вниз и выберите пункт Safari.



  3. Выберите пункт Дополнения внизу списка



  4. Включите или отключите JavaScript, установив переключатель в нужное положение.


Крупнейшие операторы готовы поделить регионы для развития 5G

5g в россии

Четыре крупнейших российских оператора связи готовы разделить между собой регионы РФ для развития связи поколения 5G, об этом пишет РБК. Кому достанется самый прибыльный Московский регион, пока неизвестно.

Минкомсвязь опубликовала новую версию Концепции создания и развития сетей 5G в России, где описала порядок работы совместного предприятия (СП), участниками которого стали «МегаФон», «Ростелеком», МТС и «ВымпелКом («Билайн»).

Согласно концепции, на первом этапе связь 5G в каждом конкретном регионе сможет развивать только одна компания. Она будет якорным оператором в данном субъекте РФ. В случае, если другие члены СП захотят оказывать услуги в этом регионе, они должны будут присоединиться к якорному оператору. В таком случае они обязуются выплачивать ему компенсации части понесенных затрат.

В документе сказано, что участники СП будут придерживаться принципа «один регион – одна сеть 5G». К такому принципу операторы планируют следовать лишь по началу. Отмечается, что они могут отойти от него, когда всем участникам СП выделят достаточно частот для строительства собственных сетей. В концепции не указано, на какое юридическое лицо будет оформлено СП, однако говорится, что в нем возможно участие государства.

Вышел BuddyPress 6.0

buddyPress 6.0

Команда разработчиков BuddyPress на днях выпустила первую бета-версию BuddyPress 6.0. Одной из наиболее важных функций является введение новых блоков участников и групп для редактора WordPress. Плагин теперь требует минимум PHP 5.6 и WordPress 4.8 (5.0 для использования новых блоков).

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

Релиз BuddyPress 6.0 запланирован на конец апреля. Пользователи могут протестировать последнюю версию плагина через BP Beta Tester или посредством прямой загрузки ZIP-архива.

Кроме новых блоков, также уже готов BP REST API – он является надежным инструментом для создания приложений. Поля Cover image и User profile photo были перемещены в компонент Members. Это изменение позволяет пользователям работать с данным функционалом без активации компонента BP Extended Profile.

Введение блоков Member и Group

Версия BuddyPress 6.0 будет включать в себя только два блока. Однако у разработчиков есть планы добавить еще блоков в будущем. Разработка блоков ведется в репозитории BP Blocks на Github.

В BuddyPress 6.0 будет создана новая рубрика BuddyPress в инструменте вставки блоков. В ней появятся текущие блоки и будут содержаться все блоки, созданные в дальнейшем.

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

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

Какие блоки могут появиться в будущем

Разработка блоков BuddyPress началась в ноябре 2019 года. Команда публиковала опрос, в котором узнавала, какие блоки должны появиться в качестве базовых. На основе этой обратной связи и была построена разработка.

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

У команды есть планы на будущее, но она ждет обратной связи. «Мы открыты для идей в этой области», – отметил Виет. – «Очевидно, что в дальнейшем мы будем переносить уже существующие виджеты в блоки. Также мы работаем над новым компонентом Media, который должен включить блок для выбора пользовательских медифайлов в редакторе блоков».

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

Запуск редактора блоков во фронтэнде, пусть даже в своей облегченной версии – весьма интересная идея. Плагины по типу BuddyPress могут стать надежными решениями для фронтэнд-постинга.

Виет и его команда ищут участников для репозитория BP Blocks. «Мы будем рады встроить наши наработки в ядро BP, если мы будем уверены, что участники нашего сообщества заинтересованы в данных блоках».

Руководство по редактору Gutenberg

wordpress news gutenberg

Gutenberg – редактор блоков, используемый WordPress по умолчанию

Если вы используете WordPress 5.0 и выше, то наверняка сталкивались с новым блочным редактором Gutenberg. С точки зрения функциональности привычный классический редактор и Gutenberg делают одно и то же: помогают создавать контент. Только помните о том, что WordPress перестанет поддерживать классический редактор после 2022 года.

Gutenberg не похож на традиционный текстовый редактор. Он использует блоки контента так же, как и современные конструкторы веб-страниц.

Как создать запись WordPress с помощью редактора Gutenberg

В этом разделе мы создадим новую запись WordPress с помощью редактора Gutenberg. Для этого в панели администрирования перейдите в меню Записи> Добавить запись.

После чего вы попадете в редактор Gutenberg.

Добавление заголовка

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

Нужно отредактировать постоянную ссылку? Для этого в блоке «Заголовок», нажмите кнопку «Изменить».

После добавления заголовка нажмите клавишу Enter, чтобы начать новую строку.

Добавление нового абзаца

Нажатие Enter создает новый блок абзаца. Прежде чем вводить какой-либо текст в блок, задайте несколько параметров.

Примечание. Вы можете:

  1. Преобразовать блок абзаца в блок другого типа.
  2. Добавить изображение.
  3. Изменить блок абзаца на блок заголовка.
  4. Превратить блок абзаца в галерею.

После добавления текста появляется панель инструментов для форматирования.

С помощью панели форматирования можно:

  • Преобразовать абзац в цитату, заголовок, список, код и отформатированный текст.
  • Сделать текст жирнымкурсивом, зачеркнутым и подчеркнутым.
  • Выровнять текст по левому краю, по правому краю, по центру и по обоим краям.
  • Добавить ссылку, открывающуюся в новой вкладке.
  • Вставить встроенное изображение.
  • Скрыть настройки блока.
  • Создать дубликат слоя.
  • Вставить блок до или после текущего блока.
  • Редактировать блок как HTML-код.
  • Добавить текущий блок в коллекцию для последующего использования.
  • Удалить блок.

Дополнительные параметры доступны на вкладке «Блок» в меню боковой панели.

Для этого:

  1. Перейдите на вкладку «Блок», чтобы просмотреть все параметры и настройки блока.
  2. Установите размер шрифта и активируйте параметр «Буквица».
  3. Добавьте цвет фона к абзацу.
  4. Также можно добавить собственный класс.
  5. Синий фон и большая первая буква уже применены в редакторе Gutenberg.

Вкладка «Документ» в боковой панели

В боковом меню доступна вкладка «Документ».

Как работать с этой панелью:

  1. Перейдите на вкладку «Документ».
  2. Здесь вы можете запланировать публикацию, установить видимость и статус записи.
  3. Отредактировать постоянную ссылку.
  4. Выбрать существующую или создать новую категорию.
  5. Добавить метки к записи.
  6. Установить главное изображение.
  7. Создать отрывок.
  8. Разрешить комментирование.

Теперь добавим изображение ниже первого абзаца.

Добавление изображений в редакторе Gutenberg

После нажатия Enter создается новый блок абзаца. Чтобы добавить изображение, кликните по иконке «+».

Все варианты добавления изображений:

  1. С помощью иконки «+».
  2. Добавить обычное изображение.
  3. Добавить галерею.

Нажмите любую из иконок и добавьте изображение.

После чего загрузится блок «Изображение».

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

Обычные настройки мультимедиа…

… и настройки блока «Изображение».

В качестве иллюстрации я добавила текст и кнопку под ним.

Как добавить загружаемые файлы

Редактор Gutenberg позволяет легко добавлять загружаемые файлы в запись или на страницу WordPress. Для этого в новом блоке «Абзац» нажмите на иконку «+», перейдите к «Основным блокам», «Файл».

После чего будет добавлен блок «Файл».

Он позволяет загрузить новый файл или добавить его из медиа библиотеки. После чего Gutenberg автоматически добавляет кнопку «Скачать».

Добавление цитаты в редакторе Gutenberg

Чтобы добавить цитату, на новой строке кликните по иконке «+» и в основных блоках выберите «Цитата».

После этого будет добавлен блок «Цитата».

Чтобы добавить цитату, введите текст внутри этого блока.

Добавление встроенных блоков медиа в редакторе Gutenberg

Редактор Gutenberg поставляется с блоками для встраивания видео и других медиафайлов с более чем 30 различных площадок (YouTube, Vimeo, Facebook, SoundCloud, WordPress, Slideshare и так далее).

Чтобы встроить содержимое, кликните по иконке «+» и выберите пункт «Вставки». В качестве примера я выбрала YouTube.

Затем вставьте URL-адрес YouTube-видео и нажмите кнопку «Вставить».

После чего Gutenberg автоматически преобразует ссылку во встроенное видео.

Как добавить кнопку в редакторе Gutenberg

В новой строке кликните по иконке «+», «Элементы разметки», «Кнопка».

После этого добавится блок «Кнопка».

В нем вы сможете отредактировать текст кнопки и добавить к ней ссылку. А также настроить кнопку через боковое меню справа.

Как добавить колонки в редакторе Gutenberg

Блок «Колонки» доступен в разделе «Элементы разметки».

Редактор Gutenberg по умолчанию добавляет две колонки.

Вот что у меня получилось.

Как в редакторе Gutenberg добавить изображение рядом с текстом

Чтобы добавить изображение с текстом, в коллекции блоков «Элементы разметки» выберите элемент «Мультимедиа и текст».

После этого вы должны увидеть в редакторе блок «Мультимедиа и текст».

Затем загрузите изображение или видео. После этого добавьте текст.

Вот что получилось.

Сторонние блоки для редактора Gutenberg

Редактор Gutenberg поддерживает и блоки сторонних разработчиков. Например, вы можете добавить блоки WooCommerce в запись WordPress. Для этого необходимо установить и активировать плагин WooCommerce. Затем в новой строке кликните по иконке «+», в разделе «WooCommerce» выберите тот блок, который вам необходим.

Другие важные блоки

Вот список других блоков, доступных в Gutenberg:

  • Виджеты— позволяет добавлять контент из виджетов в записи блога.
  • Шорткоды.
  • Классический блок.
  • Больше– это блок, который ранее было принято называть тегом «Читать дальше»
  • Разрыв страницы.
  • HTML-код.
  • Таблица.
  • Галерея.

Быстрые хаки для редактора Gutenberg и сочетания горячих клавиш

Редактор Gutenberg поставляется «в комплекте» с парой хаков и сочетаний горячих клавиш. Например, если вы введете «/» внутри блока абзаца, то появится список доступных блоков.

Вы также можете выбрать конкретный блок, введя его название после обратной косой черты («/»). Например, если ввести «/image», то получите блок изображения.

Для просмотра всех доступных сочетаний горячих клавиш воспользуйтесь клавиатурной комбинацией SHIFT + ALT + H в Windows и OPT + CTRL + H в Mac.

Чтобы просмотреть структуру документа, кликните по иконке «i».

Мы надеемся, что данное руководство помогло вам освоить редактор. Gutenberg. Теперь вы сможете использовать блочный редактор для создания контента, как профессионал.

Создание плагина WordPress с нуля

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

Плагин для одного сайта

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

Пошаговое руководство по разработке плагина для WordPress

Последовательность моих шагов:

1. Начало

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_action( 'init', 'wpshout_do_thing' );
function wpshout_do_thing() {
		if( ! isset( $_GET['wpsdt'] ) ) :
			return;
		endif;

		var_dump("Here");
		die;
}

Примечания к шагу 1

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

Обратите внимание на строку if( ! isset( $_GET[‘wpsdt’] ) ). В ней вызывается суперглобальная переменная PHP $_GET для запуска плагина. Она задействуется тогда, когда в URL-адресе есть строка запроса wpsdt. Этот прием позволяет запускать плагин путем изменения параметров URL-адресов.

Я также подключаю событие WordPress init, чтобы плагин запускался раньше остальных. По этой же причине я назвал перехваченную функцию wpshout_do_thing(). Благодаря чему она не вызовет конфликта пространства имен.

Код var_dump(); die позволяет убедиться, что плагин выводит данные и прекращает другие процессы PHP.

Результат работы кода, приведенного выше:

2. Запрос последних записей всех типов

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_action( 'init', 'wpshout_do_thing' );
function wpshout_do_thing() {
		if( ! isset( $_GET['wpsdt'] ) ) :
			return;
		endif;

		$args = array(
			'posts_per_page' => 5,
			'post_type' => 'any',
			'post_status' => 'publish',
			'orderby' => 'date',
			'order' => 'DESC',
		);

		$query = new WP_Query( $args );

		var_dump( $query );
		die;
}

Примечания к шагу 2

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

В результате мы получаем объект WP_Query posts, который представляет собой массив из пяти записей.

3. Как запросить все записи, опубликованные в этом месяце

Первоначально я не знал, как это реализовать. Но затем мне удалось найти пример, в котором показывается, как передать элемент date_query массива WP_Query:

'date_query' => array(
	'after' => array(
		'year'  => 2012,
		'month' => 3,
		'day'   => 1,
	),
),

Но как в PHP указать, что нам нужен текущий месяц? Поиск привел меня к следующему примеру:

'date_query' => array(
	'after' => array(
		'year'  => date( 'Y' ),
		'month' => date( 'M' ),
		'day'   => 1,
	),
),

4. Объединение запроса даты с основным запросом

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_action( 'init', 'wpshout_do_thing' );
function wpshout_do_thing() {
		if( ! isset( $_GET['wpsdt'] ) ) :
			return;
		endif;

		$args = array(
			'posts_per_page' => -1,
			'post_type' => 'any',
			'post_status' => 'publish',
			'date_query' => array(
				'after' => array(
					'year' => date( 'Y' ),
					'month' => date( 'M' ),
				),
				'day' => 1,
			),
			'orderby' => 'date',
			'order' => 'DESC',
		);

		$query = new WP_Query( $args );

		var_dump( $query );
		die;
}

Примечания к шагу 4

На этом шаге мы добавляем параметр date_query в существующий WP_Query. А также изменяем значение posts_per_page на -1, чтобы получить все интересующие записи.

Результат выполнения приведенного выше кода:

Но этот код работает неправильно. Запрос возвращает не те записи, которые нам нужны.

5. Отладка

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_action( 'init', 'wpshout_do_thing' );
function wpshout_do_thing() {
		if( ! isset( $_GET['wpsdt'] ) ) :
			return;
		endif;

		// $args = array(
		// 	'posts_per_page' => -1,
		// 	'post_type' => 'any',
		// 	'post_status' => 'publish',
		// 	'date_query' => array(
		// 		'after' => array(
		// 			'year' => date( 'Y' ),
		// 			'month' => date( 'M' ),
		// 		),
		// 		'day' => 1,
		// 	),
		// 	'orderby' => 'date',
		// 	'order' => 'DESC',
		// );

		// $query = new WP_Query( $args );

		$after = array(
			'year' => date( 'Y' ),
			'month' => date( 'M' ),
		);

		var_dump($after );
		die;
}

Примечания к шагу 5

На этом этапе мы выполняем следующие действия:

  1. Комментируем код, который ведет себя странно.
  2. Изучаем этот код.

Вся проблема в элементе after, который является частью массива date_query. Чтобы понять, что пошло не так, выведем информацию об этом элементе с помощью функции var_dump().

Оказывается, месяц является строкой, «Oct». А date_query может принимать только числовое значение.

6. Повторяем попытку

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_action( 'init', 'wpshout_do_thing' );
function wpshout_do_thing() {
		if( ! isset( $_GET['wpsdt'] ) ) :
			return;
		endif;

		$args = array(
			'posts_per_page' => -1,
			'post_type' => 'any',
			'post_status' => 'publish',
			'date_query' => array(
				'after' => array(
					'year' => date( 'Y' ),
					'month' => date( 'm' ),
				),
				'day' => 1,
			),
			'orderby' => 'date',
			'order' => 'DESC',
		);

		$query = new WP_Query( $args );

		// $after = array(
		// 	'year' => date( 'Y' ),
		// 	'month' => date( 'M' ),
		// );

		var_dump( $query );
		die;
}

Примечания к шагу 6

Замени значение ‘M’ на ‘m’ в date_query. Потому что ‘m’ дает нам числовое обозначение месяца, когда он передается в date().

Запуск этого кода дает следующее:

Но это тоже не сработало. Запрос WP_Query возвратил пустой массив posts.

7. Это не сработало — отладка

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_action( 'init', 'wpshout_do_thing' );
function wpshout_do_thing() {
		if( ! isset( $_GET['wpsdt'] ) ) :
			return;
		endif;

		$args = array(
			'posts_per_page' => -1,
			'post_type' => 'any',
			'post_status' => 'publish',
			'date_query' => array(
				'after' => array(
					'year' => date( 'Y' ),
					'month' => date( 'm' ),
					'day' => 1,
				),
			),
			'orderby' => 'date',
			'order' => 'DESC',
		);

		$query = new WP_Query( $args );

		// $after = array(
		// 	'year' => date( 'Y' ),
		// 	'month' => date( 'M' ),
		// );

		var_dump( $query );
		die;
}

Примечания к шагу 7

Ошибка заключалась в том, что я использовал day как отдельный элемент массива date_query. А нужно поместить day внутрь элемента after из date_query. Исправление и повторный запуск кода дает следующее:

В результате мы получили десять записей текущего месяца!

8. Пользовательский интерфейс и шорткод

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_shortcode( 'wpshout_show_this_months_posts_by_author', 'wpshout_show_this_months_posts_by_author' );
function wpshout_show_this_months_posts_by_author() {
		if( ! current_user_can( 'administrator' ) ) :
			return;
		endif;

		$args = array(
			'posts_per_page' => -1,
			'post_type' => 'any',
			'post_status' => 'publish',
			'date_query' => array(
				'after' => array(
					'year' => date( 'Y' ),
					'month' => date( 'm' ),
					'day' => 1,
				),
			),
			'orderby' => 'date',
			'order' => 'DESC',
		);

		$query = new WP_Query( $args );

		ob_start();

		while( $query->have_posts() ) :
			$query->the_post(); ?>

			<h2><?php the_title(); ?></h2>
			By <?php the_author(); ?> on <?php the_date(); ?>

		<?php endwhile;

		wp_reset_postdata();

		return ob_get_clean();
}

Примечания к шагу 8

Мы будем использовать шорткоды. Для этого меняем add_action() на add_shortcode() и называем функцию шорткода wpshout_show_this_months_posts_by_author(). С помощью буферизации вывода мы сможем контролировать то, какую разметку будет возвращать шорткод. Внутри цикла while() используются теги шаблонов the_author() и the_date().

Запустив плагин с помощью шорткода wpshout_show_this_months_posts_by_author, мы получаем следующее:

Но почему в одном из выведенных постов отсутствует дата?

9. THE_DATE() работает довольно странно?

<?php 
/**
 * Plugin Name: WPShout Show Authorship this Month
 * Description: Show who's written what this month on WPShout
 * Version: 1.0
 * Author: WPShout
 * Author URI: https://wpshout.com
*/

add_shortcode( 'wpshout_show_this_months_posts_by_author', 'wpshout_show_this_months_posts_by_author' );
function wpshout_show_this_months_posts_by_author() {
		if( ! current_user_can( 'administrator' ) ) :
			return;
		endif;

		$args = array(
			'posts_per_page' => -1,
			'post_type' => 'any',
			'post_status' => 'publish',
			'date_query' => array(
				'after' => array(
					'year' => date( 'Y' ),
					'month' => date( 'm' ),
					'day' => 1,
				),
			),
			'orderby' => 'date',
			'order' => 'DESC',
		);

		$query = new WP_Query( $args );

		ob_start();

		while( $query->have_posts() ) :
			$query->the_post(); ?>

			<h2><?php the_title(); ?></h2>
			By <?php the_author(); ?> on <?php echo get_the_date( 'l, F d, Y' ); ?>

		<?php endwhile;

		wp_reset_postdata();

		return ob_get_clean();
}

Примечания к шагу 9

Оказалось, что функция the_date() выводит только один пост за одну дату. Если существуют две записи с одинаковой датой публикации, она перестает работать.

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

И это именно то, что нужно.

Веб тренды, которые стоит попробовать в 2020

тренды которые надо попробывать в 2020

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

Расширяемость (Extensibility)

Расширяемость это когда вы можете взять технологию и расширить ее для своих нужд. На протяжении нескольких лет мы используем компоненты повсюду, как в качестве разработки приложений (компоненты на React, Vue, Svelte) так и в качестве разработки дизайна (дизайн системы).

На данный момент мы пытаемся сделать эти компоненты более уникальными и удобными для использования. Расширяемость в вебе позволяет нам использовать платформу (браузеры, html/css/js движки) для собственных нужд и экспериментов, разумеется для получения большей выгоды.

CSS Houdini

Благодаря CSS Houdini, разработчики могут расширять возможности CSS Object Model, изменять то как браузеры отображают и работают со стилями.

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


(ссылка на демку)

Houdini позволяет расширять стилизацию с помощью CSS и дает возможность добавлять пользовательские правила в CSS. На текущий момент в Houdini входит:

С помощью этих API, пользователь может использовать семантику в CSS (Typed Object Model), используя Paint API рисовать словно на canvas и применить результат в качестве бордера (привет градиентные бордеры) или создать параметризованную анимацию всего в одну строчку CSS.

.sparkles {
  background: paint(sparkles)
}

Еще например, можно вынести анимации в отдельный поток (Animation Worklet) и использовать Layout API для уникального расположения элементов без использования таких правил как margin, padding, left, right.

В общем Houdini, это одна из тех вещей, на которую стоит обратить внимания в этом году.

Вариативные шрифты

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

Более детально познакомится с вариативными шрифтами можно в этой статье.

Custom Properties

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

:root {
  --first-color: #488cff;
  --second-color: #ffff8c;
}

#firstParagraph {
  background-color: var(--first-color);
  color: var(--second-color);
}

#secondParagraph {
  background-color: var(--second-color);
  color: var(--first-color);
}

#container {
  --first-color: #48ff32;
}

#thirdParagraph {
  background-color: var(--first-color);
  color: var(--second-color);
}
// получение переменной
element.style.getPropertyValue("--my-var");

// получение переменной с элемента
getComputedStyle(element).getPropertyValue("--my-var");

// установка переменной
element.style.setProperty("--my-var", jsVar + 4);

Custom Properties уже поддерживаются так же хорошо как вариативные шрифты и для них не нужно использовать какой-либо пост/пре процессор. Эти «технологии» работают в разных браузерах и на разных системах. Отсюда мы плавно переходим к совместимости.

Совместимость

По определению, совместимость в этой статье — это возможность технологий быть взаимозаменяемыми в зависимости от необходимости пользователя. С технической стороны, можно привести пример как множество компаний закончило или еще в процессе миграции со старого стека на новый. Например Backbone -> React, и хотят, прийти к общему виду, который уже не будет требовать подобных крупных миграций. Компоненты и веб компоненты, пожалуй, текущее положение дел, которое устраивает многих.

Web components


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

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

Логические свойства

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

Например в русском языке, который читается слева направо, мы представляем высоту, ширину, лево, право, верх, низ — ну, как и представляем (ваш кэп). А вот например в арабском языке где все справа налево, дела обстоят немного иначе. padding-left, уже не будет отступом в начале абзаца, ведь он начинается не слева.

Как пример логического свойства, вы можете использовать padding-inline-start вместо padding-left. И тогда padding будет устанавливаться той стороне, с которой обычно в выбранном пользователем языке читают слова. Если это русский, будет использоваться padding-left, а если арабский, то padding-right.

Настраиваемые media queries

Это такие медиа-квери, которые позволяют нам узнать о предпочтениях пользователя. Например пользователю нравится темная тема. Мы можем узнать об этом используя prefers-color-scheme:

.day   { background: #eee; color: black; }
.night { background: #333; color: white; }

@media (prefers-color-scheme: dark) {
  .day.dark-scheme   { background:  #333; color: white; }
  .night.dark-scheme { background: black; color:  #ddd; }
}

@media (prefers-color-scheme: light) {
  .day.light-scheme   { background: white; color:  #555; }
  .night.light-scheme { background:  #eee; color: black; }
}

.day, .night {
  display: inline-block;
  padding: 1em;
  width: 7em;
  height: 2em;
  vertical-align: middle;
}

Как всегда, все самое интересное и прикольное не поддерживается только в Edge и IE.

Самые интересные медиа-квери:
prefers-color-scheme
prefers-contrast
prefers-reduced-motion
prefers-reduced-transparency

Скорость

Куда же без нее в новом 2020 году. Я уже вскользь упомянул о Animation Worklet, который позволяет вынести некоторую логику анимации в отдельный поток. Но есть и другие технологии позволяющие нам ускорить веб и которые вот-вот будут широко использоваться. Например Web Assembly, обертка, которая позволяет вам писать низкоуровневый код и не только на JS. WebGL продолжает совершенствоваться и предоставлять нам мощную и быструю графическую составляющую прямо в браузере. Совместив две эти технологии можно создавать невероятные игры, которые раньше нельзя было представить в браузере.

Веб постоянно и неустанно эволюционирует, это пожалуй то, что делает его столь интересным. А какие технологии по вашему мнению станут трендом 2020 года?

70 ЛУЧШИХ ПРОГРАММ ДЛЯ WINDOWS за ВСЁ ВРЕМЯ!

🆇 Ссылки на скачивание 🆇 1: 🔥 Google Picasa — https://howdyho.net/download/210 2: 🔥 QTTabBar — https://howdyho.net/download/180 3: 🔥 MiniBin — http://howdyho.net/download/386 4: 🔥 cFosSpeed — http://howdyho.net/download/388 5: 🔥 StartIsBack++ — https://howdyho.net/download/404 6: Dism++ — https://howdyho.net/download/461 7: Pixlr — http://howdyho.net/download/430 8: Desktop Calendar — https://howdyho.net/download/369 9: Glass Wire — http://howdyho.net/download/415 11: Unchecky — http://howdyho.net/download/414 12: Moo0 System Monitor — https://howdyho.net/download/364 13: WizTree — http://howdyho.net/download/428 14: Ueli — http://howdyho.net/download/425 15: Psiphon3 — http://howdyho.net/download/367 16: WindowFX — http://howdyho.net/download/412 17: Caesium — http://howdyho.net/download/351 18: SuperF4 — http://howdyho.net/download/413 19: WinLaunch — http://howdyho.net/download/365 20: Fences — http://howdyho.net/download/372 21: Groupy — http://howdyho.net/download/426 22: Mem Reduct — https://howdyho.net/download/453 23: Paint SAI — http://howdyho.net/download/368 24: Win10 Tweaker — https://howdyho.net/download/484 26: MPV — http://howdyho.net/download/431 27: TidyTabs — http://howdyho.net/download/374 28: ConEmu — http://howdyho.net/download/352 29: Zealdocs — http://howdyho.net/download/393 30: Hitman PRO — http://howdyho.net/download/422 31: Laitis — https://howdyho.net/download/456 32: Lightshot — http://howdyho.net/download/373 33: Handbrake — http://howdyho.net/download/353 34: GOM player — https://howdyho.net/download/370 35: VPings — https://howdyho.net/download/457 36: Converter Bot — http://howdyho.net/download/429 37: TeraCopy — https://howdyho.net/download/378 38: AIMP — http://howdyho.net/download/387 39: ProcessHacker — https://howdyho.net/download/358 40: Light Bulb — https://howdyho.net/download/455 41: Razer Cortex — http://howdyho.net/download/432 42: Mz CPU Accelerator — https://howdyho.net/download/458 43: Mz Game Accelerator — https://howdyho.net/download/486 44: ShareX — http://howdyho.net/download/427 45: Clipdiary — https://howdyho.net/download/371 46: Eraser — http://howdyho.net/download/297 47: SSD Life — http://howdyho.net/download/377 48: The Great Suspender — https://howdyho.net/download/485 49: Push VideoWallpaper — http://howdyho.net/download/366 50: Steam Cleaner — http://howdyho.net/download/433 51: CompactGUI — https://howdyho.net/download/454 52: Photoshop Express — http://howdyho.net/download/430 53: Simple Sticky Notes — http://howdyho.net/download/389 54: Autorun Organizer — https://howdyho.net/download/460 55: PeStudio — http://howdyho.net/download/376 56: IOBit Unlocker — http://howdyho.net/download/424 57: Format Factory — http://howdyho.net/download/390 58: DeepSound — http://howdyho.net/download/296 59: Strokes Plus — https://howdyho.net/download/452 60: Deskpins — http://howdyho.net/download/421 61: img-RAR — http://howdyho.net/download/382 62: DevelNext — http://howdyho.net/download/383 63: MouseMAC — http://howdyho.net/download/435 64: Volumemouse — http://howdyho.net/download/419 65: Flashnote — http://howdyho.net/download/423 66: Taskplay — https://howdyho.net/download/459 67: Battery Mode — http://howdyho.net/download/434 68: OllyDebugger — http://howdyho.net/download/385 69: Flashpaste — http://howdyho.net/download/420

Эффект Даннинга — Крюгера

Эффект Даннинга — Крюгера

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

Гипотеза и экспериментальная проверка

Гипотеза о существовании подобного феномена была выдвинута в 1999 году Джастином Крюгером и Дэвидом Даннингом, которые при этом ссылались на высказывания:

  • Чарлза Дарвина — «Уверенность чаще порождается невежеством, нежели знанием»[3] и
  • Бертрана Рассела — «Одно из неприятных свойств нашего времени состоит в том, что те, кто испытывает уверенность, глупы, а те, кто обладает хоть каким-то воображением и пониманием, исполнены сомнений и нерешительности».

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

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

  1. Они склонны переоценивать собственные умения.
  2. Они неспособны адекватно оценивать действительно высокий уровень умений у других.
  3. Они неспособны осознавать всю глубину своей некомпетентности.
  4. После обучения у них появляется способность осознать уровень своей прежней некомпетентности, даже если их истинная компетентность после обучения практически не меняется.

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

За это исследование авторам статьи была присуждена Шнобелевская премия по психологии за 2000 год.

Результаты других подобных исследований были представлены в 2003 и 2008 годах.

Исторические предпосылки

Хотя сам принцип был сформулирован в 1999 году, авторы отмечают схожие наблюдения у философов и учёных:

  • Лао-цзы («Знающий не говорит, говорящий не знает»),
  • Конфуция («Истинное знание — в том, чтобы знать пределы своего невежества»),
  • Сократа («Я знаю, что ничего не знаю»),
  • Бакунина («…именно лучшие люди бывают менее всего убеждены в своих собственных заслугах; даже если они сознают их, то им обычно претит навязывать себя другим, между тем как дурные и средние люди, всегда собою довольные, не испытывают никакого стеснения в самопрославлении»[7])

а также в вышеприведённых высказываниях Бертрана Рассела и Чарльза Дарвина.

В Библии есть высказывание апостола Павла: «Кто думает, что он знает что-нибудь, тот ничего ещё не знает так, как до́лжно знать» (1Кор. 8:2).

Гераинт Фуллер (англ. Geraint Fuller) в своём комментарии к статье отметил, что аналогичная мысль высказана в произведении Уильяма Шекспира «Как вам это понравится»:

Дурак думает, что он умён, а умный человек знает, что он глуп.