Заметки с тегом «hint» (страница 5)

Убираем неоднородности на повторяющейся текстуре

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

Допустим у нас имеется повторяющаяся текстура. Она прекрасно стыкуется по краям.

Повторяющаяся текстура

Если попробовать наложить её саму на себя, то границы будут заметны с первого взгляда. Перепады по яркости специально сделаны такими отчетливыми, чтобы продемонстрировать, что и их можно легко устранить.

Повторяющаяся текстура не стыкуется при наложении

Скопируем слой и применим к нему фильтр «Gaussian Blur». Параметры фильтра нужно выбрать такими, чтобы исчезли все детали текстуры и остались только паразитные пятна. В моем случае радиус размытия был равен 10 (чем он будет больше, тем больше деталей останется в результате). Понизим немного яркость этому слою. Это удобно сделать с помощью Adjustment Layer, так как аналогичную операцию придётся сделать ещё раз. Поместим оба слоя в отдельную группу.

Размытая текстура

Теперь создадим новый слой и зальем его сплошным цветом, который хотим получить в результате. Так же поместим его в отдельную группу и добавим туда копию корректирующего яркость слоя. Теперь первой группе с размытой текстурой назначаем режим смешивания «Subtract» (вычитаем его из оригинальной текстуры), а второй группе со сплошным цветом – «Linear Dodge» (добавляем его к разнице).

Слои и настройки

В результате получим оригинальную текстуру, но без неоднородностей.

Текстура без неоднородностей

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

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

Таким же образом можно исправить и темную текстуру. Только нужно внести два изменения:

  1. Группы с размытым слоем и сплошным цветом меняем местами — сначала добавляем, а потом вычитаем. Это важно сделать из-за зануления отрицательных значений.
  2. Корректирующие слои становятся не нужны, так как при их использовании есть вероятность потерять детали в самых темных участках.
Оставте свой комментарий

Возвращаясь к проверке типа данных

Об альтернативе typeof я уже писал в заметке «Проверка типа данных в JavaScript ». А недавно на просторах интернета нашел ещё один аналогичный вариант такой функции.

var toType = function (obj) {
    return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}

Стоить только заметить, что он примерно в 2 раза медленнее, чем вариант со slice. Всё-таки регулярные выражения не спасает даже кеширование.

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

Закомментировать HTML

Чтобы закомментировать кусок HTML нужно обрамить его последовательностью <!-- с одной стороны и --> с другой.

<!-- <p>Эта строка не разбирается и не отображается</p> -->

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

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

Проверка типа данных в JavaScript


function is(type, obj) {
    var cls = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && cls === type;
}

Функция возвращает результат сравнения ожидаемого типа данных с реальным значением класса.

Аргумент type может принимать одно из значений String, Number, Boolean, Array, Object, Function, RegExp, Date, Error.

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


var TypeCheck = (function () {

    function is(type, obj) {
        var cls = Object.prototype.toString.call(obj).slice(8, -1);
        return obj !== undefined && obj !== null && cls === type;
    }

    var i, checkers = {},
        types = "String|Number|Boolean|Array|Object|Function|RegExp|Date|Error".split("|");

    for (i = types.length; i--;) {
        checkers["is" + types[i]] = (function (type) {
            return function (obj) {
                return is(type, obj);
            }
        })(types[i]);
    }

    return checkers;

})();

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

Поиск файлов из командной строки

Главным инструментом для поиска файлов служит утилита find. Она имеет множество параметров, которые позволяют задавать различные условия.

Поиск по имени файла

find ~ -name 'article.doc'
  • ~

    домашняя папка пользователя в качестве начального пути для поиска

  • -name

    поиск по имени файла

Так же можно делать поиск по части имени

find ~ -name 'article.*'
find ~ -name '*.doc'

У параметра name есть альтернатива iname — игнорирование регистра символов.

Поиск по дате и времени

У файлов учитывается время создания (create), доступа (access) и изменения (modification). Соответственно параметры поиска начинаются с первых букв соответствующих английских слов.

find . -amin -30

Ищем файлы в текущей папке, которые открывались менее 30 минут назад.


find . -ctime -2h

Ищем файлы в текущей папке, время создания которых отличается от текущего на 2 часа.

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

Поиск по размеру

find . -size +10M

Эта команда выдаст список файлов, размер которых больше 10 мегабайт.

find . -size -10k

А эта — список файлов, размер которых меньше 10 килобайт.

Поиск по содержимому файла

Утилита find сама не осуществляет поиск по содержимому, но ее можно использовать, чтобы задать другие граничные условия поиска. А внутри файла можно найти строку с помощью утилиты grep.

Найдем файлы в домашней папке пользователя, размер которых меньше 10 килобайт и содержащих строку «hello»


find ~ -size -10k -print0 | xargs -0 grep "hello"
  • -print0

    имена файлов будет разделены символом \0

  • xargs

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

  • -0

    строки разделены символом \0

Подробнее о параметрах

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

Комментарии к заметке: 3