Страницы

Поиск по вопросам

среда, 27 марта 2019 г.

Эффект размытия фона / Эффект матового стекла — CSS

как сделать эффект размытия фона или эффект матового стекла как в iOS? я понимаю, что можно добавить фильтр на картинку.. но как мне добавить этот фильтр на отдельный слой и наложить этот слой поверх n'ое количество картинок??


Ответ

Используйте filter: blur(5px);, ниже пример.
img { width: 300px; } .blur { -webkit-filter: blur(5px); -moz-filter: blur(5px); -o-filter: blur(5px); -ms-filter: blur(5px); filter: blur(5px); }


Заполнение массива случайными числами из диапазона [-15,15] с помощью Math.random

Не получается вывести массив из 12 случайных чисел из промежутка [-15,15]
int[] array; array = new int[12]; for (int i = 0; i < array.length; i++) { array[i] = ((int)(Math.random() * 12) - 15); System.out.println(array[i]); }
выводит только отрицательные числа


Ответ

Смотрите документацию
Math.random() возвращает число типа double от 0 до 1.
Вы зачем-то множите это значение на 12.
По сути, у вас интервал от -15 до 15 включительно, плюс 0, т.е. диапазон 31. Согласны?
Вот 31 и надо множить на Math.random() - будете получать числа от 0 до 30.
Чтобы получить не от 0 до 30, а от -15 до 15, нужно отнять 15, что вы совершенно верно сделали.
UPD. Обновил ответ, спасибо за исправление. Первоначально была такая мысль:
int[] array = new int[12]; for (int i = 0; i < array.length; i++) { array[i] = (int) Math.round((Math.random() * 30) - 15); System.out.println(array[i]); }
Но немного подумал и понял, что значения будут не совсем корректные, да и ответ @Regent попроще.

Просуммировать элементы в List

Есть класс со свойством Price. И коллекция данного класса. Нужно найти сумму значений свойств Price у объектов в коллекции.
public class Class { public int Price { get; set; } }
List list = new List();


Ответ

Например так:
int sum = list.Sum(x => x.Price);
Только не забудьте перед этим добавить
using System.Linq;

Как скомпилить C++ проект

Очень нужна dll'ка получаемая при сборке одного из проектов (любого) в данном репозитории: http://sourceforge.net/p/zint/code/ci/master/tree/
В указанном репозитории, как я понял, несколько вариантов: для qt, VC++ и, я так полагаю, для C++ в GCC. Есть варианты создающие dll и варианты создающие десктопную программу использующую данную dll. Меня интересует именно dll...
Вот только проблема в том, что я ни с чем вышеперечисленным ране не работал на уровне достаточном для того, чтобы уметь собрать проект из файлов представленных в репозитории. Проект для VC++ у меня в 15-ой студии "с наскока" не собрался, ругается на отсутствие: Не удается открыть файл включение: png.h. Которого в директории проекта не наблюдается. В идеале хотелось бы конечно получить рабочую dll'ку именно в VS. Но если не выйдет, то любой другой вариант так же приемлем. Qtшный проект так же ругается (не могу сказать на что именно, в поле вывода абракадабра какая-то...)
Вопрос: Какую последовательность действий мне нужно совершить чтобы скомпилировать один из представленных в репозитории проектов создающий dll библиотеку.
PS: Если кто-то сам скомпилит и кинет ссылку на zint.dll я конечно тоже буду признателен, но всё же хотелось бы знать как это делается.


Ответ

Сборка zint с поддержкой PNG
Сборку будем производить в некотором каталоге %BUILD_ROOT%. Везде в дальнейшем разделителем каталогов должна быть прямая дробная черта (/). При использовании обратной (\) возможны ошибки сборки.
Для сборки в данном случае использовались CMake версии 3.3.2 и MinGW-builds версии 5.2.0rev0.
Сборка библиотеки zlib (использовалась версия 1.2.8).
Скачиваем архив исходников zlib и распаковываем его в каталог %BUILD_ROOT%/zlib. Далее собираем:
cd /d %BUILD_ROOT% mkdir zlib-build cd zlib-build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%BUILD_ROOT%/zlib-out ../zlib cmake --build . mingw32-make install
После этого в каталоге %BUILD_ROOT%/zlib-out будет скомпилированная библиотека zlib
Сборка библиотеки libpng (использовалась версия 1.6.19).
Скачиваем архив исходников libpng и распаковываем его в каталог %BUILD_ROOT%/libpng. Собираем:
cd /d %BUILD_ROOT% mkdir libpng-build cd libpng-build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%BUILD_ROOT%/libpng-out -DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlib.dll.a -DZLIB_INCLUDE_DIR=%BUILD_ROOT%/zlib-out/include ../libpng cmake --build . mingw32-make install
Предупреждения CMake игнорируем. После этого в каталоге %BUILD_ROOT%/libpng-out будет скомпилированная библиотека libpng
Сборка библиотеки zint (использовалась версия 2.4.3).
Скачиваем архив исходников zint и распаковываем его в каталог %BUILD_ROOT%/zint. Файл CMakeLists.txt то ли не подходит для новых версий CMake, то ли в нём изначально ошибка, но в любом случае при сборке возникает ошибка, связанная с невозможностью найти файл png.h. Для исправления ошибки нужно этот файл немного подредактировать, а именно, в 14-й строке заменить ${PNG_INCLUDES} на ${PNG_INCLUDE_DIRS}. Теперь можно собирать:
cd /d %BUILD_ROOT% mkdir zint-build cd zint-build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%BUILD_ROOT%/zint-out -DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlib.dll.a -DZLIB_INCLUDE_DIR=%BUILD_ROOT%/zlib-out/include -DPNG_LIBRARY=%BUILD_ROOT%/libpng-out/lib/libpng.dll.a -DPNG_PNG_INCLUDE_DIR=%BUILD_ROOT%/libpng-out/include ../zint cmake --build . mingw32-make install
Предупреждения при сборке игнорируем. После выполнения всех шагов в каталоге %BUILD_ROOT%/zint-out будет требуемая библиотека libzint.dll
Сборка без зависимостей.
Полученная libzint.dll имеет в зависимостях libpng16.dll, а та, в свою очередь, libzlib.dll. Кроме того, все эти библиотеки зависят от libgcc*.dll. Чтобы убрать все эти зависимости и сделать сборку (почти) полностью независимой, можно сделать следующее.
Определяем две переменных:
set CFLAGS=-static set CXXFLAGS=%CFLAGS%
Эти переменные уберут зависимость библиотек от libgcc*.dll
Чтобы убрать зависимость libpng.dll от zlib.dll, исправим один параметр при запуске cmake
-DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlibstatic.a
А чтобы убрать зависимость libzint.dll от libpng16.dll и libzlib.dll, нужно у cmake исправить два параметра:
-DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlibstatic.a -DPNG_LIBRARY=%BUILD_ROOT%/libpng-out/lib/libpng.a
Готово! Полученная библиотека зависит только от kernel32.dll и msvcrt.dll

Возврат указателя на функцию

Каким образом можно вернуть указатель на функцию из функции?
void f0(char) {}
void (*)(char) f1() {return f0;} // В возвращаемом типе ошибка
Можно объявить auto возвращаемым типом, но так не интересно!


Ответ

Нашел ответ на англоязычном SO.
В вашем случае правильное определение для f1 будет:
void (*f1())(char) { return f0; }
В общем случае сигнатура должна быть такая:
возвращаемое_значение_возвращаемой_функции (*имя_функции(типы_параметров_функции))(типы_параметров_возвращаемой_функции);
Вообще, не рекомендую использовать такой синтаксис, т.к. сигнатура получается нечитаемой. Лучше создать аллиас на возвращаемый тип с помощью using или typedef
using Function = void (*)(char);
Function f1() { return f0; }

В чем отличие & от && на примере конструктора копирования и конструктора переноса?

Допустим, у нас есть класс с обычным конструктором:
class SomeClass { int size; int *element; public: SomeClass(int i) { //обычный конструктор size = i; element = new int[size]; } };
И предположим, что я добавил туда конструктор копирования и конструктор перемещения (переноса):
SomeClass( SomeClass &&other ) { //конструктор перемещения size = other.size; element = other.element; other.size = 0; other.element = nullptr; }
SomeClass( SomeClass &other ) { //конструктор копирования size = other.size; element = other.element; other.size = 0; other.element = nullptr; }
int main() { SomeClass a1(5); SomeClass a2(a1); //вызов конструктора копирования SomeClass a3 = move(a1); //вызов конструктора переноса }
Здесь один нюанс: конструктор копирования не будет копировать, он тоже будет выполнять перенос.
В чем тогда отличие? Если фактически происходит одно и тоже. Code::Blocks выдает разницу в секунду. Думаю, тогда вопрос встает между использованием & и &&
Я знаю, что второе - это ссылка на r-value, и что она позволяет обратиться к ресурсам объекта. Но ведь в обоих случая создается новый объект. В чем тогда профит?


Ответ

Конструктор перемещения это чисто конвенциональная конструкция(так же как и конструктор копирования, собственно), поэтому никто не мешает делать в любом конструкторе всё, что заблагорассудится. Другое дело, что программист, использующий Ваш класс, будет ожидать перемещения от конструктора перемещения и никак не будет ожидать такого подвоха от конструктора копирования.
В том числе и поэтому, конструктор копирования всегда объявляется с константным аргументом, а не как у Вас. Ещё раз, конструкторы имеют свои названия исходя из того, что они делают по умолчанию(т.е. тогда, когда их генерирует компилятор). Соответственно, программист тоже должен делать так, как делается по умолчанию, а не придумывать реализацию, которая больше похожа на саботаж, чем на что-либо другое.
Исходя из всего вышесказанного: Ваш вопрос не имеет смысла.

Отличным примером перемещающего конструктора копирования является std::auto_ptr. Все мы знаем его судьбу.

перевернуть массив

Почему не выводится перевернутый массив? то есть, последний элемент массива должен стать первым и т.д.
public class Mane {
public void sort(int[] massive){ int[]arraySort = new int[10]; for(int i = 4; i >= 0; i--){ arraySort[4 - i] = massive[i]; for(int a = 0; a < 5; a++){ massive[a] = arraySort[a]; }
} } public static void main(String[] arg){ int[] mass = {1,2,3,4,5}; Mane m = new Mane(); m.sort(mass); for(int i: mass){ System.out.println(i); }
} }


Ответ

Зачем два массива, зачем вложенные циклы?
public void sort(int[] massive) { for (int i = 0; i < massive.length / 2; i++) { int tmp = massive[i]; massive[i] = massive[massive.length - i - 1]; massive[massive.length - i - 1] = tmp; } }

Как выполнить правильное преобразование строки в дату?

Добрый день,читаю из файла строку следующего вида,пытаюсь преобразовать в тип Date. Не получается. Подскажите, пожалуйста, в чем ошибка.
String dat ="Sat Jan 03 19:47:23 MSK 1984"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); simpleDateFormat.applyPattern("EEE MMM dd HH:mm:ss zzz yyyy"); Date birthDate = simpleDateFormat.parse(dat);
Выкидывает вот такую ошибку:
Exception in thread "main" java.text.ParseException: Unparseable date: "Sat Jan 03 19:47:23 MSK 1984" at java.text.DateFormat.parse(DateFormat.java:366)


Ответ

Все дело в локали
String dat ="Sat Jan 03 19:47:23 MSK 1984"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); Date birthDate = simpleDateFormat.parse(dat);

Загрузка изображения на сайт, как защитить сервер?

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


Ответ

Всем известно, что сам по себе вирус - это набор байтов, абсолютно безвредный, пока не запущен на исполнение в соответствующем окружении.
Из окружений на РНР веб-сервере обычно доступны два - CGI и PHP. Для CGI достаточно не загружать изображения в папку, которая предназначена для исполняемых файлов.
Для РНР же защита сводится к тому, чтобы
Не пропускать файлы с расширением php. Это просто, за исключением одного нюанса* Не инклюдить в свои пхп скрипты что попало. Это правило гораздо важнее и шире, чем просто загрузка изображений. Если оно не соблюдается, то и никаких картинок на сервер заливать не надо. Если же наш код всегда точно значет, какой именно файл он инклюдит, и подсунуть ему со стороны ничего невозможно, то и картинка с пхп кодом тоже будет безопасной.
-- Нюанс. Веб-сервер апач в дефолтной конфигурации исполняет файлы вида script.php.jpg как php файлы.

Как перепозиционировать элементы не меняя структуры html?

Есть совместный блок с ценой стандартной и скидочной. Хочу поменять последовательность вывода стандартная цена, затем скидочная, причем оба блока должны выводиться по центру и цена будет каждый раз разная (а значит и ширина блоков будет каждый раз разная). Как это можно сделать с помощью стилей не меняя структуры html ? фидл
del { float: right; } .price { text-align: center; }

11.390 руб. 9.340 руб.


Ответ

Есть еще такой вариант
.price { position: relative; text-align:center; } del { position: absolute; top: 0; left: 50%; } ins { position: absolute; top: 0; right: 50%; }
https://jsfiddle.net/skywave/y837g3gn/4/

Как найти хардкорные текстовые строки в коде?

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


Ответ

Сначала запустите инспекцию кода для всего проекта (появится диалоговое окно, что инспектировать): Analyze -> Inspect Code
После завершения анализа вы получите список обнаруженных проблем, среди которых будет Hardcored text (Секции Android > Lint > Internalization). По двойному клику на каждую запись вы перейдете к тому месту в коде (или разметке), где у вас захардкордленые строки.

Далее, перейдя к нужной стоке, слева от нее появится желтая лампочка, кликнув на нее, выберите пункт Extract String Resource - инструмент поможет перенести строку в ресурс string.xml с возможной интерализацией (переводами на другие языки)

Парсинг сайта на Java после всех манипуляций с javascript

Можно ли каким-нибудь образом спарсить всю страницу так, чтобы все элементы создаваемые/изменяемые javascript'ом были видны после загрузки страницы? И была возможность запускать эти скрипты с параметрами. Объясню, допустим есть на сайте текстовое поле с id="itemname" и кнопка с id="submit". Я к примеру пишу
Element field = getElementById("itemname"); Element button =getElementById("submit "); field.setText("Кофта"); button.press();
И он мне выводит javascript генерированный документ. То есть это тоже самое как я например зашёл в интернет магазин, в поле поиск (С id itemname) написал "Кофта" и нажал кнопку (С id submit)
Создавать WebView и по координатам кликать мне кажется не правильное решение. Ещё где-то видел библиотеку (Не помню как она называется, вроде начинается на 'S'), но мне кажется - это не то, что нужно мне.
Либо авторизация в всплывающем окне то же по такому же принципу без протокола :javascript
Если кто-то не понял, например. Я пишу программу на Java, которая будет уведомлять меня в трее Windows что на мой ruSO пришел новый ответ. Новый ответ должен парситься из значка вверху сайта (Если нету пустой, если есть то добавляется новый класс к DOMу значка --не знаю как сделано на этом сайте, все примерно--). Но чтобы узнать есть ли у меня сообщения, программа должна скормить серверу мой логин и пароль через JS, а после, в отрендеренной странице, найти те самые значки.


Ответ

То что я искал называется Headless browser, то есть браузер без визуализации. Для java есть htmlunit. Ссылка на список "Безглавых браузеров" на enSo

Outline TextView

Возможно ли сделать такую обводку TextView? Если да, то с чего начать?
Пример:


Ответ

Посмотрите статью на Хабре или библиотеку MagicTextView
Либо поиграться с тенями