Страницы

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

суббота, 28 декабря 2019 г.

Как при помощи CSS сделать картинку черно-белой?

#css3 #css


Здравствуйте. Как при помощи CSS сделать картинку черно-белой?

UPD1:
Инструменты серверного программирования недоступны. Только клиентский CSS.    


Ответы

Ответ 1



Мб объяснить заказчику, что браузер - не фотошоп?) А вообще вот, html5+css3+js

Ответ 2



Используйте CSS: filter: grayscale(100%);

Ответ 3



Use it -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter: url(grayscale.svg); /* Firefox 4+ */ filter: gray; /* IE 6-9 */

Как по SSH запустить .sh cкрипт, чтобы его исполнение не останавливалось при разрыве соединения?

#shell #ssh #bash #linux


Например, есть скрипт do.sh. Я подключаюсь к серверу по SSH и запускаю скрипт на
выполнение: 
~/do.sh

Проблема в том что если отключиться от сервера или произойдет разрыв соединения то
выполнение скрипта остановится. Как сделать так чтобы скрипт исполнялся дальше если
я отключась от сервера или происходит разрыв соединения?    


Ответы

Ответ 1



nohup do.sh & screen и в нем уже ./do.sh

Ответ 2



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

Ответ 3



Вы можете запустить скрипт в фоновом режиме просто поставив в конце символ & Так же я использую более приятный аналог screen - tmux Например. Зашёл на сервер tmux В открывшейся консоли запускаю выполнение скрипта ./script.sh Далее жму последовательно ctrl+b d и отключаюсь от консоли tmux. При этом все открытые процессы и окна в нём продолжают выполняться. При повторном входе на сервер набираю tmux attach и попадаю в тот же сеанс и продолжаю работать Краткий курс работы с tmux

Как обработать исключение java.util.ConcurrentModificationException?

#java


Есть код: ссылка на github. В ходе выполнения выбрасывается исключение Exception
in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException 
Знающие люди подскажите как побороть проблему. Заранее спасибо)
    


Ответы

Ответ 1



Его не надо обрабатывать. Это исключение значит, что вы в своем коде удаляете элемент напрямую из коллекции во время использования итератора. Т.к. в этом случае появляется неопределенность, откуда итератор должен продолжать и какие последующие элементы должен пройти, выбрасываетс исключение. Для корректного изменения сущности используйте методы итератора, например, iterator.remove().

Ответ 2



Например, можно поставить блокировку перед началом модификации ArrayList и снять блокировку после завершения модификации. Используете неконкурентную структуру данных ArrayList. Такая сруктура данных будет корректно работать если поток один. while (i.hasNext()) { synchronized (i) { Enemy e = i.next(); if (e.x >= 1600 || e.x <= -1600) { i.remove(); } else { e.move(); // поправить позже g.drawImage(e.img, e.x, e.y, null); } } } В этом коде блокировка снимается позже завершения модификации. Можно код переписать так: while (i.hasNext()) { boolean isDrawImage = false; synchronized (i) { Enemy e = i.next(); if (e.x >= 1600 || e.x <= -1600) { i.remove(); } else { e.move(); // поправить позже isDrawImage = true; } } if (isDrawImage) g.drawImage(e.img, e.x, e.y, null); }

Ответ 3



В дополнение к ответу etki привожу код для корректного удаления элемента коллекции внутри цикла итератора: Iterator i = strings.iterator(); while (i.hasNext()) { String value = i.next(); // должен быть вызван перед тем, как вызывается i.remove() // какой-то код i.remove(); // Элемент value был удалён из коллекции strings }

Как разделить число на разряды в JavaScript?

#javascript


Есть такой код, который производит вычисления и выводит результат. 

rez = Math.round(numb*pay*2.1/100);
$(".result p span").text(rez);


Задача разбить выводимое число по разрядам, т.е. вместо 1000000 выводить 1 000 000. 

Пробую такой вариант: 

rez = Math.round(numb*pay*2.1/100);
var outrez = rez.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
$(".result p span").text(outrez);


Но результата нет вообще никакого. 
Подскажите как исправить. Спасибо.
    


Ответы

Ответ 1



Попробуйте так: (1000000).toLocaleString('ru')

Ответ 2



Код с регулярным выражением тоже работает. Ошибка заключается в том, что Math.round - возвращает число, а у числа нет метода replace, он есть у строки. Поэтому число надо просто привести к строке. var numb = 10572, pay = 11073; rez = Math.round(numb*pay*2.1/100); var outrez = (rez+'').replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '); document.body.innerHTML = outrez;

Как у тега <a> убрать визуальные эффекты?

#html #css


Не могу понять, как у тега  убрать цвет, чтобы он выглядел не как ссылка, а как
текст или рамка, а не был синего цвета или фиолетовым после нажатия на него

css  

a {
  text-decoration:none;
}


html  



  
    
    
  
  
    
  


    


Ответы

Ответ 1



a { color: #000 !important; text-decoration: none }

Ответ 2



Надо прописать для каждого состояния ссылки стиль оформления, используя псевдоклассы. А использовать !important надо только в самых крайних случаях. a.text:active, /* активная/посещенная ссылка */ a.text:hover, /* при наведении */ a.text { text-decoration: none; color: #666; }

Как пользоваться делегатами?

#c_sharp




Я новичёк в этом деле, пытаюсь изучить и научиться пользоваться делегатами. Подскажите,
как исправить?
    


Ответы

Ответ 1



Смотрите. Делегат — это просто такой тип, что в переменные этого типа вы можете записывать не числа и объекты, а функции*, и вызывать их потом. Вот собственно и всё, что вам нужно знать для начала. Чтобы объявить такую переменную, компилятор должен знать какого типа аргументы будут у этой функции, и какого типа возвращаемое значение. Это ему нужно, чтобы он знал, как правильно вызывать функцию по этой переменной, и какого типа будет результат. Когда вы объявляете делегат, вы именно эту информацию и даёте: delegate int mydel(int x, int y); ^ \_____________________/ | | объявляется делегат | | а это показывает, какие функции использовать с этим делегатом только вместо имени функции название делегата У вас в коде функция возвращает значение, поэтому в определении делегата тоже должно быть возвращаемое значение. Вы можете исправить код так: class Program { delegate int mydel(int x, int y); // поменяли возвращаемое значение на int static int sum(int x, int y) { return x + y; } static void Main(string[] args) { mydel g = sum; // здесь можно без new, просто присвоить. так проще, правда? int result = g(10, 5); Console.WriteLine("Sum = " + result); } } *(Примечание для знатоков.) Да, это упрощение. На самом деле у нас multicast delegate, так что их можно складывать и вызывать через Invoke/BeginInvoke. И да, делегат является объектом. Я упрощаю картину для понятности.

Ответ 2



Вы объявили возвращаемый тип делегата void, а передаете метод с возвращаемым значением int. Задайте возвращаемое значение делегата на int. Есть еще подозрение что не будет работать метод с модификатором static. Сделайте что я сказал, запустите и отпишитесь.

Что такое индекс mysql и как их использовать

#mysql #sql


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


Ответы

Ответ 1



Если в кратце, то индекс, это поле по которому оптимизирован(ускорен) поиск. Поскольку индекс занимает место, то индексировать нужно только те поля, по которым происходит выборка. Допустим есть таблица. CREATE TABLE MyGuests ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP ) id - уже индекс Допустим вам нужен поиск по имени (firstname). SELECT * FROM MyGuests WHERE firstname = "Вася" тогда есть смысл добавить индекс по данному полю. CREATE INDEX firstname_index ON MyGuests (firstname) USING BTREE; Будет созданна "карта" которая позволет легко находить записи в оригинальном списке. https://ru.wikipedia.org/wiki/B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE Для одной небольшой таблицы приемущество не будет очевидно < 1000 записей, но только до тех пор, пока вы не попытаетесь объеденит join несколько (3-4 уже достаточно) таблиц по неиндексированным полям. Убивает сервер на раз!

Ответ 2



Вкратце, индексы создаются для повышения производительности поиска данных. Таблицы могут иметь огромное количество строк, которые хранятся в произвольном порядке. Без индекса поиск нужных строк идёт по порядку (последовательно), что на больших объемах данных отнимает много времени. Индекс - обычно один или несколько столбцов таблицы и указателей на соответствующие строки таблицы, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск — например, в MySQL b-дерева. Индекс лучше использовать на тех столбцах таблицы, на которые вы чаще всего будете накладывать условия через where column_name = ... Индекс создаётся по правилу: create index название_индекса on название_таблицы (название_столбца) Например, у вас таблица называется test, где хранятся данные по городам России с улицами вида Город, Улица, Дом. Понятно, что строк в таблице при таком раскладе будет много. Если вы часто делаете выборку по определенному городу, например: select * from test where city = 'Омск' то, чтобы этот запрос отработал быстрее обычного, следует добавить индекс по вышеуказанному правилу: create index city_index on test (city) Тогда тот же самый запрос select * from test where city = 'Омск' отработает гораздо быстрее, если столбец city будет проиндексирован.

Ответ 3



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