Иероглиф: [без названия] (Давид Мзареулян) |
Метки: my photos |
Иероглиф: 2004 (Давид Мзареулян) |
Метки: my photos |
Как отключить автоустановку обновлений в Windows 10 |
Самая мерзкая, наверное, особенность Windows 10 — это принудительная неотключаемая установка всех обновлений. Windows даже в 2015 году не может ничего установить, не перезагрузившись, поэтому юзеру, в общем, ничего не остаётся, как периодически перезагружаться. Максимум, что позволяет Microsoft — выбрать желаемое время перезагрузки, но и его бесконечно сдвигать нельзя.
Если вы утром включаете компьютер, а вечером выключаете, то всё нормально, и вы вряд ли заметите какое-то неудобство. Но у меня, например, вечером компьютер просто засыпает, а утром просыпается с тем же набором запущенных программ и открытых документов. Я так привык (и не только я, судя по отзывам в сети), а принудительная перезагрузка этот способ работы, разумеется, рушит. Я бы предпочёл вручную устанавливать обновления, когда это удобно мне.
Ну ладно, к делу. Всё-таки есть способ контролировать алгоритм обновления Win10. Я его нашёл вот в этой статье.
Собственно, там описано несколько разных способов, самый красивый из них, на мой взгляд — способ № 4. К сожалению, он работает только при Wi-Fi-подключении. Оказывается, Windows не скачивает обновления, если подключение к интернету тарифицируемое. Это очень мило со стороны Microsoft (могла бы ведь и скачивать…).
Чтобы указать, что соединение тарифицируемое, надо открыть Settings -> Network & Internet, в списке Wi-Fi-сетей нажать на Advanced options, и там поставить галочку Metered connection (или Лимитное подключение в русской версии).
Но, к сожалению, при подключении по проводу так сделать не получится. Поэтому я лично применил способ № 5 / 6. Он использует кровавую энтерпрайз-магию.
Для начала надо запустить Group Policy Editor. Можно найти его поиском или набрать gpedit.msc в меню Start. Выглядит он так:
В нём надо найти папку Computer Configuration / Administrative Templates / Windows Components / Windows Update. В ней выбрать Configure Automatic Updates.
И выставить настройки вот так:
Там есть несколько вариантов настроек:
Я выбрал “3”, чтобы система скачивала обновления, но не устанавливала их. Можно выбрать “2” — тогда она и скачивать их не будет.
После применения этих настроек, надо пойти в Windows Update и нажать кнопку Check for updates. Только после этого Windows поймёт, что настройки изменены. В дальнейшем она будет приставать к вам с просьбами установить обновления, но сама их устанавливать (и перезагружать компьютер) уже не будет.
Этот пост в блоге POST /blog (20:28 04.09.2015)
Метки: windows 10 software |
Цепочки обработчиков в JS Promise |
Promise — это относительно новая фича JavaScript-а, позволяющая выполнять отложенные действия — то, что раньше решалось коллбэками. Хорошее введение в эту технологию есть на сайте HTML5Rocks, не буду его пересказывать.
У Promise есть два (интересующих нас сейчас) метода — .then()
и .catch()
, в которые передаются функции-обработчики для состояний "выполнено" (fulfilled) и "отказ" (rejected) соответственно. Эти методы можно объединять в цепочки: prom.then().then().catch().then().catch().catch().…
. Вопрос: в каком порядке вызываются эти обработчики, что они получают, и от чего всё это вообще зависит?
Для начала посмотрим на конструкцию prom.then().then()
(здесь prom
— это некоторый Promise). Что такое тут prom.then()
? Очевидно, это Promise, раз у него есть методы .then()
и .catch()
. Каково значение этого Promise? "Естественным" может показаться предположение, что это тот же самый prom
передаётся по цепочке, но на самом деле это не так (и хорошо, что не так).
Каждый обработчик .then()
и .catch()
возвращает какое-то значение. Даже если функция не возвращает значение явно, то результатом её всё равно является значение undefined
. Далее действуют правила:
Promise.resolve(…)
и становится Promise-ом в выполненном состоянии;Promise.reject(…)
и становится Promise-ом в состоянии отказа.Самое полезное применение этих правил — возможность обработки данных в цепочке. Например, так:
get('data.json')
.then(function(response) {
// response — текстовые данные
return JSON.parse(response);
})
.then(function(response) {
// а тут уже response — объект, полученный в предыдущем обработчике
console.log("Yey JSON!", response);
});
Но вернёмся к произвольным цепочкам. У нас есть Promise, в зависимости от его состояния, он вызывает .then()
или .catch()
, ближайшие к нему по цепочке. Вызванный обработчик возвращает новый Promise, который снова вызывает .then()
или .catch()
, ближайшие по цепочке. И так далее.
Приведём пример (писать буду в ES6-синтаксисе, он проще):
Promise.reject("A")
.then(x => { console.log("THEN1", x); })
.catch(x => { console.log("CATCH1", x); })
.then(x => { console.log("THEN2", x); })
.catch(x => { console.log("CATCH2", x); });
Что мы получим в консоли? Вот что:
CATCH1 A
THEN2 undefined
Почему так? У нас есть Promise в состоянии "отказ", значит, он вызовет ближайший обработчик .catch()
в цепочке, это CATCH1. Этот обработчик не возвращает ничего (т. е. возвращает undefined
), значит, на выходе из него мы получаем выполненный Promise со значением undefined
. Выполненый Promise вызывает ближайший к нему .then()
, это THEN2.
Ещё пример:
Promise.reject("A")
.catch(x => {
console.log("CATCH1", x);
return Promise.reject("B");
})
.then(x => { console.log("THEN1", x); })
.catch(x => { console.log("CATCH2", x); })
.then(x => { console.log("THEN2", x); });
Результат (посчитайте сами, почему именно так):
CATCH1 A
CATCH2 B
THEN2 undefined
Этот пост в блоге POST /blog (13:08 30.08.2015)
Метки: promise javascript |
Сегодня самая короткая ночь |
Этот пост в блоге POST /blog (01:06 22.06.2015)
Метки: my photos |