Расширение для рисования в браузере. Как рисовать в браузере красивые вещи. Введение по холстам

Прочие модели 25.02.2019
Прочие модели

Из статьи вы узнаете:

1. Используйте хороший логин.

Защита сайта на WordPress начинается с элементарного — создания хорошего логина. Устанавливая WordPress, пользователи часто используют логин, который программа установки предлагает по умолчанию, а именно – admin . Это то, что проверяют боты, ищущие дыры в безопасности вашего сайта, в первую очередь. Используя этот логин, вы уже предоставляете половину необходимой информации для хакеров, и им остается только подобрать пароль.

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

Шаг 1 – Создание нового пользователя

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

В главном меню слева выберите Пользователи >> Добавить нового .

Введите всю необходимую информацию для нового пользователя, определив его роль как «Администратор» и нажмите «Добавить нового пользователя» .

Шаг 2 – Удаление пользователя admin

После этого выйдите из системы управления, войдите под новой учетной записью и удалите пользователя admin из системы одним из способов:

Способ 1 – В главном меню слева выберите Пользователи >> Все пользователи . Наведите на имя пользователя admin , и вы увидите функцию «Удалить» .

Способ 2 — В главном меню слева выберите Пользователи >> Все пользователи . Найдите пользователя admin , отметьте его галочкой и из выпадающего меню «Действия» выберите «Удалить» . После этого нажмите на опцию «Применить» под списком пользователей. Эта опция удобна, если вам необходимо удалить сразу несколько пользователей.

Так же вы можете изменить имя пользователя admin через запрос к базе данных:
UPDATE wp_users SET user_login = ‘новый_логин’ WHERE user_login = ‘admin’;

У данного способа есть минус: автор для постов, написанных пользователем admin , не будет изменен. Для того, чтобы это исправить, необходимо сделать еще один запрос к базе данных:
UPDATE wp_posts SET post_author = ‘новый_логин’ WHERE post_author = ‘admin’;

2. Используйте сложный и уникальный пароль.

Защита админки WordPress, конечно, невозможна без сложного хорошего пароля. Важно, чтобы он был уникальным и включал в себя цифры, буквы разных регистров, знаки пунктуации, символы и прочее. Пароли типа: pass, 1q2w3e4r5t6y, 87654321, qwerty, abc123, 111111, 1234, дата вашего рождения и т.д. – не являются надежными, но многие пользователи продолжают их использовать. Пример хорошего пароля: pcVaOF8r39. Конечно, вам сложно будет запомнить такой пароль, но для этого существует ряд программ, которые хранят и генерируют пароли, а также могут быть интегрированы в интерфейс вашего браузера (например, Password Agent, KeyPass, Roboform и т.д.)

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

Не забывайте регулярно обновлять свои пароли.

3. Обновляйте версию WordPress.

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

4. Скрывайте версию WordPress.

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

С помощью файла functions.php можно запретить вывод информации о версии вашей платформы. Для этого вам необходимо открыть файл functions.php , расположенный в корневой папке текущей темы вашего веб-сайта (wp-content/themes/текущая_тема_wordpress) , и добавить следующий код:
remove_action(‘wp_head’, ‘wp_generator’);

Или же можно добавить следующий код в файл functions.php :

/* Hide WP version strings from scripts and styles
* @return {string} $src
* @filter script_loader_src
* @filter style_loader_src
*/
function fjarrett_remove_wp_version_strings($src) {
global $wp_version;
parse_str(parse_url($src, PHP_URL_QUERY), $query);
if (!empty($query[‘ver’]) && $query[‘ver’] === $wp_version) {
$src = remove_query_arg(‘ver’, $src);
}
return $src;
}
add_filter(‘script_loader_src’, ‘fjarrett_remove_wp_version_strings’);
add_filter(‘style_loader_src’, ‘fjarrett_remove_wp_version_strings’);

/* Hide WP version strings from generator meta tag */
function wpmudev_remove_version() {
return »;
}
add_filter(‘the_generator’, ‘wpmudev_remove_version’);

Помимо вышесказанного, в папке любой темы WordPress, вы найдете header.php файл. В нём также указывается версия вашей установки, что для хакера является очень интересным, как упоминалось ранее. Удалив следующую строку из файла, вы избавитесь от этой лишней информации:

” />

5. Скачивайте темы и плагины с надежных ресурсов.

WordPress является настолько распространенным, что всё больше разработчиков создают для него готовые темы и плагины. В то время как большинство из них облегчат работу с вашим сайтом и расширят его функциональность, некоторые могут скрывать в себе весьма неприятные последствия в виде вирусов и открывать двери для хакеров. Используйте только проверенные ресурсы для скачивания тем и плагинов, например, wordpress.org , а также обращайте внимание на все появляющиеся предупреждения о вредоносности файлов. Как и в случае с самим WordPress, важно вовремя обновлять плагины до последних версий.

6. Не храните ненужные файлы.

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

7. Регулярно проверяйте свой локальный компьютер на наличие вирусов.

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

8. Делайте резервные копии сайта.

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

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

9. Используйте защищенное соединение.

Если вы предпочитаете загружать ваши файлы с помощью FTP-клиента, используйте защищенный протокол соединения к серверу SFTP.

10. Создайте.htaccess файл.

Код, который блокирует доступ к директории /wp-content:

Order deny,allow
Deny from all

Allow from all

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

Код, защищающий от хотлинкинга:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yourdomain\.com/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

Хотлинкинг – это вставка изображения с вашего сервера на чужой сайт\блог. Трафик же при этом идет непосредственно на ваш сервер.

При помощи кода, указанного выше, вы можете заставить сервер проверить, откуда именно пришел запрос: если со страниц вашего веб-сайта, то сервер отдает изображение пользователю без проблем; если же с чужого веб-сайта – то показывает изображение с ошибкой.

11. Измените префикс таблиц базы данных.

Защита WordPress от хакеров также усилится, если убрать первоначальный префикс wp_ — это усложнит поиск для злоумышленников. Рассмотрим несколько способов:

Способ 1 – Подходит для новых установок через Softaculous
Если ваш хостинг-провайдер предоставляет вам возможность использования скрипта Softaculous для установки WordPress, то изменить префикс вы можете во время первоначальной установки: в секции Advanced Options вам необходимо будет внести требуемые изменения.

Способ 2 – Для уже работающих сайтов и свежих установок WordPress
Если ваш WordPress давно установлен и сайт работает, то вы можете поменять префикс с помощью программы phpMyAdmin.

Выберите необходимую базу данных из списка и сделайте следующий запрос к базе данных:

RENAME table `wp_commentmeta` TO `newprefix_commentmeta`;
RENAME table `wp_comments` TO `newprefix_comments`;
RENAME table `wp_links` TO `newprefix_links`;
RENAME table `wp_options` TO `newprefix_options`;
RENAME table `wp_postmeta` TO `newprefix_postmeta`;
RENAME table `wp_posts` TO `newprefix_posts`;
RENAME table `wp_terms` TO `newprefix_terms`;
RENAME table `wp_term_relationships` TO `newprefix_term_relationships`;
RENAME table `wp_term_taxonomy` TO `newprefix_term_taxonomy`;
RENAME table `wp_usermeta` TO `newprefix_usermeta`;
RENAME table `wp_users` TO `newprefix_users`;

где «newprefix_» необходимо заменить на новый префикс, который вы хотите использовать вместо префикса «wp_» .

После этого вы увидите новый префикс в таблицах базы данных:

Чтобы убедиться, что все изменения прошли успешно и префикс wp_ больше не используется в таблице _options и _usermeta , вам необходимо будет сделать еще один запрос к базе данных:

SELECT * FROM `newprefix_options` WHERE `option_name` LIKE ‘%wp_%’

SELECT * FROM `newprefix_usermeta` WHERE `meta_key` LIKE ‘%wp_%’

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

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

После этого не забудьте также внести изменения префикса в wp-config.php файле:

Вы также можете использовать специальные плагины для изменения префикса базы данных: Change DB prefix или Change table prefix.

12. Ограничивайте количество попыток доступа.

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

Для этого вы можете использовать дополнительные плагины, например, Login LockDown или Limit Login Attempts. В настройках этих плагинов, вы можете самостоятельно установить количество попыток входа и время блокировки.

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

Чтобы убрать вывод этого сообщения, необходимо открыть файл functions.php , расположенный в папке текущей темы вашего веб-сайта (wp-content/themes/текущая_тема_WordPress) и добавить такой код:
add_filter(‘login_errors’,create_function(‘$a’, «return null;»));

13. Удалите readme.html и license.txt.

Файлы readme.html и license.txt присутствуют в корневой папке любой установки WordPress. Вам эти файлы ни к чему, а хакерам они могут облечить их злодеяния. Например, чтобы выяснить текущую версию вашего WordPress и много чего другого полезного для взлома веб-сайта. Рекомендуем удалить их сразу же после установки WordPress.

14. Используйте SSL-сертификат.

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

Прежде всего вам необходимо будет и установить его для вашего доменного имени.

После этого вы сможете установить обязательное использование SSL-протокола при входе в панель управления вашим сайтом. Для этого откройте wp-config.php файл, расположенный в корневой папке вашего веб-сайта, и добавьте следующую строку:
define(‘FORCE_SSL_ADMIN’, true);

15. Измените файл wp-config.php.

Добавив такой код в wp-config.php файл, вы так же сможете укрепить защиту вашего веб-сайта:

Ограничение на изменения темы и плагинов:
define(‘DISALLOW_FILE_EDIT’, true);

Отключение возможности установки и удаления плагинов:
define(‘DISALLOW_FILE_MODS’, true);

Добавление salt-ключей или так называемых ключей безопасности: сначала необходимо будет найти такие строки в wp-config.php файле:

Вы увидите, что ключи уже установлены и их можно поменять. Либо вы увидите строки такого типа: ‘put your unique phrase here’, что говорит о том, что ключи пока не установлены:
/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @since 2.6.0
*/
define(‘AUTH_KEY’, ‘put your unique phrase here’);
define(‘SECURE_AUTH_KEY’, ‘put your unique phrase here’);
define(‘LOGGED_IN_KEY’, ‘put your unique phrase here’);
define(‘NONCE_KEY’, ‘put your unique phrase here’);
define(‘AUTH_SALT’, ‘put your unique phrase here’);
define(‘SECURE_AUTH_SALT’, ‘put your unique phrase here’);
define(‘LOGGED_IN_SALT’, ‘put your unique phrase here’);
define(‘NONCE_SALT’, ‘put your unique phrase here’);

О некоторых плагинах хочется упомянуть отдельно:

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

Этот плагин проверяет ваш веб-сайт на различные уязвимости в безопасности и предлагает ряд методов по их устранению. Например, пароли, разные права доступа к файлам, защита баз данных, защита информации о версии WordPress, защита администратора и прочее.

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

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

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

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

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

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

Введение в Canvas

Коротко говоря, канвас - это 2-х мерный растровый элемент изображения, который находится в DOM (объектная модель документа) и там же может быть прорисован. Рисовать можно как в 2d контексте, так и в контексте WebGL. Контекстом является JavaScript, который мы используем для того, чтобы получить доступ к инструментам рисования. Процессы JavaScript, которые доступны для канвас, очень понятные, в отличие от доступных для SVG. Любой процесс, вызванный для элемента в целом, а не что-то нарисованное в канвас, точно такой же, как и обычный элемент изображения. Вот базовый пример канвас:

Var canvas = document.getElementById("example-canvas"); var context = canvas.getContext("2d"); //Draw a blue rectangle context.fillStyle = "#91C0FF"; context.fillRect(100, // x 100, // y 400, // width 200 // height); //Draw some text context.fillStyle = "#333"; context.font = "18px Helvetica, Arial"; context.textAlign = "center"; context.fillText("The wonderful world of canvas", // text 300, // x 200 // y);

Здесь нет ничего сложного, можно легко начать работу. Единственное, что может немного смутить, это контекст, который должен формироваться с параметрами настройки, такими как fillStyle, lineWidth, font и strokeStyle, прежде чем фактический рисунок будет использоваться. Можно легко забыть обновить или перезагрузить параметры настройки и в итоге получить непредвиденный результат.

Создаем движение

Первый пример только бегает и превращает статичный рисунок в канвас. Все это хорошо, но вот настоящее веселье начинается тогда, когда ты задаешь скорость 60 кадров в секунду. У современных браузеров есть надстройка в функции requestAnimationFrame, которая синхронизирует код исходного рисунка с рисунком, который движется в браузере. Это улучшает эффективность и придает плавность движения. Целью визуализации должен быть код, который движется со скоростью 60 кадров в секунду.

var canvas = document.getElementById("example-canvas");

Var context = canvas.getContext("2d"); var counter = 0; var rectWidth = 40; var rectHeight = 40; var xMovement; //Place rectangle in the middle of the screen var y = (canvas.height / 2) - (rectHeight / 2); context.fillStyle = "#91C0FF"; function draw() { //There are smarter ways to increment time, but this is for demonstration purposes counter++; //Cool math below. More explanation in the text following the code. xMovement = Math.sin(counter / 25) * canvas.width * 0.4 + canvas.width / 2 - rectWidth / 2; //Clear the previous drawing results context.clearRect(0, 0, canvas.width, canvas.height); //Actually draw on the canvas context.fillRect(xMovement, y, rectWidth, rectHeight); //Request once a new animation frame is available to call this function again requestAnimationFrame(draw); } draw();

Математическое рисование

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

А теперь я постараюсь быстро объяснить, как работает система координат. Это будет полезно для того, чтобы понять, как математическая функция может создать движение. Картинка ниже показывает интерактивную систему координат. Обратите внимание, что там не только координата х. Функция, которую я нарисовал, представлена как (a*x+b)*c+d. Поиграйте слайдером по графику, и вы увидите, как каждая из этих значений может регулировать положение графика и масштаб.

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

Var a = 1 / 25, //Make the oscillation happen a lot slower x = counter, //Move along the graph a little bit each time draw() is called b = 0, //No need to adjust the graph up or down c = width * 0.4, //Make the oscillation as wide as a little less than half the canvas d = canvas.width / 2 - rectWidth / 2; //Tweak the position of the rectangle to be centered xMovement = Math.sin(a * x + b) * c + d;

Ввод данных

Отложив пока то, что мы сделали, подумайте несколько минут о том, что вы можете сделать с различными устройствами ввода данных пользователем, чтобы переместить квадрат в пределах страницы. Есть много вариантов, доступных в браузере включая микрофон, веб-камеру, мышь, клавиатуру и геймпад. Могут быть доступны дополнительные управляемые плагином варианты, к примеру, Leap Motion или Kinect. Используя WebSockets и сервер Вы можете связать визуализацию со сделанными в домашних условиях техническими средствам (имеются в виду подручные?). Соедините микрофон к Web Audio API и ведите свои звуковые пиксели. Вы можете даже построить датчик движения из Веб-камеры и испугать стаю виртуальных рыб (я делал такое в последний раз во Flash приблизительно пять лет назад).

Теперь, когда у вас есть своя идея, давайте рассмотрим еще несколько примеров. Один квадрат это скучно, давайте вставим побольше квадратов. Но прежде всего, создадим функцию (систему координат), которая нам еще во многом пригодится. Назовем ее Точка. Нюанс, который поможет нам с работой движущихся объектов состоит в том, что нужно использовать вектор отличный от х и y. Я собрал коды-образцы в three.js Vector2 class. Легче работать с вектором х и вектором y, но есть еще множество удобных вариантов. Для того, чтобы лучше понять о чем речь, загляните сюда. (здесь должна быть ссылка).

Всемогущая точка

Эти примеры будут немного сложнее, потому что они связаны с объектами, но это того стоит. Посмотрите образцы кода, что бы понять как работает new Scene который поможет с основами рисования в канвас. У нашей новой Точки будет маркер, чтобы иметь доступ к любой переменной, как и в канвас контексте.

Function Dot(x, y, scene) { var speed = 0.5; this.color = "#000000"; this.size = 10; this.position = new THREE.Vector2(x,y); this.direction = new THREE.Vector2(speed * Math.random() - speed / 2, speed * Math.random() - speed / 2); this.scene = scene; }

Для того, чтобы начать работу с конструктором, для Точки настраивают конфигурацию ее работы и устанавливают некоторые переменные, необходимые для работы. И опять мы обращаемся к three.js vector. Когда идет воспроизведение в кадровой частоте на 60fps, важно заранее запустить ваши предметы и не создавать новые во время воспроизведения. Это может съесть имеющуюся память и сделать вашу визуализацию обрывистой. Также, обратите внимание на то, как Точка передает копию кадра по ссылке. Это помогает сработать четче.

Dot.prototype = { update: function() { ... }, draw: function() { ... } }

Вся остальная часть кода будет установлена на объекте прототипа Точки так, чтобы у каждой новой Точки был доступ к этим методам. Я буду объяснять от функции к функции.

Update: function(dt) { this.updatePosition(dt); this.draw(dt); },

Я отделяю код рисования от кода обновления. Это помогает намного легче поддерживать и двигать объект. Прямо как схема MVC разделяет твой личный контроль и логический взгляд. Вектор dt - это изменение во времени в миллисекундах с момента выхода последнего обновления. Это название удобное и короткое и происходит от (не пугайтесь) calculus derivatives (производная расчета). Он вычитает скорость вашего движения от скорости смены кадров. Таким образом, у вас не будет замедления стиля NES, если возникнут какие-то сложности. Если ваша скорость будет слишком высокая, получится так, что будут пропускаться кадры, но скорость останется та же.

UpdatePosition: function() { //This is a little trick to create a variable outside of the render loop //It"s expensive to allocate memory inside of the loop. //The variable is only accessible to the function below. var moveDistance = new THREE.Vector2(); //This is the actual function return function(dt) { moveDistance.copy(this.direction); moveDistance.multiplyScalar(dt); this.position.add(moveDistance); //Keep the dot on the screen this.position.x = (this.position.x + this.scene.canvas.width) % this.scene.canvas.width; this.position.y = (this.position.y + this.scene.canvas.height) % this.scene.canvas.height; } }(), //Note that this function is immediately executed and returns a different function

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

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

Draw: function(dt) { //Get a short variable name for convenience var ctx = this.scene.context; ctx.beginPath(); ctx.fillStyle = this.color; ctx.fillRect(this.position.x, this.position.y, this.size, this.size); }

И в конце самое легкое. Сделайте копию контекста главного объекта и нарисуйте прямоугольник (или что-нибудь другое, не важно). Просто прямоугольник проще всего нарисовать на экране.

На этом этапе я добавляю новую Точку и называю ее this.dot = new Dot(x, y, this) в основном конструкторе. А затем, в основном методе обновления я добавляю this.dot.update(dt) и появляется точка движущаяся по экрану.

Приятно, что в коде немного больше структуры, но это не придает большей привлекательности. Здесь начинается цикл. В основном объекте мы создадим новый объект DotManager. Удобно собрать эту функциональность в отдельном объекте, поскольку это легче и более чисто, потому что к моделирование становится все больше сложным.

Var DotManager = function(numberOfDots, scene) { this.dots = ; this.numberOfDots = numberOfDots; this.scene = scene; for(var i=0; i < numberOfDots; i++) { this.dots.push(new Dot(Math.random() * this.canvas.width, Math.random() * this.canvas.height, this.scene)); } }; DotManager.prototype = { update: function(dt) { for(var i=0; i < this.numberOfDots; i++) { this.dots[i].update(dt); } } };

Теперь в шаблоне, вместо того, чтобы обновить Точку, мы создаем и обновляем DotManager. Для начала создадим 5000 точек.

Function Scene() { ... this.dotManager = new DotManager(5000, this); ... }; Scene.prototype = { ... update: function(dt) { this.dotManager.update(dt); } ... };

Это, определенно, выглядит намного лучше, чем одна точка. Теперь самое время для того, чтобы начать добавлять больше к обновленному методу в вашей Точке. Любое изменение в коде объекта отразится на каждой точке на экране. А вот здесь и начинают происходить чудеса. Помните систему координат расположенную выше? Как на счет того, чтобы задать эффект волнообразного движения? Мы создадим переменную wavePosition к объекту Точка. В заключение, мы добавим эту переменную к позиции Y.

UpdateWave: function(dt, time) { this.wavePosition = Math.sin(this.scene.currTime / 500 + this.position.x / this.scene.canvas.width * 4) * 20; }

Да, немного сбивает с толку, когда написано в одну строку, поэтому прикладываю другой вариант, который сделан как в системе координат.

Var a = 1 / 500, //Make the oscillation happen a lot slower x = this.scene.currTime, //Move along the graph a little bit each time draw() is called b = this.position.x / this.scene.canvas.width * 4, //No need to adjust the graph up or down c = 20, //Make the oscillation as wide as a little less than half the canvas d = 0; //Tweak the position of the rectangle to be centered xMovement = Math.sin(a * x + b) * c + d;

Я волнуюсь…
Еще один небольшой штрих. Монохромность немного скучна, поэтому добавим немного цвета.

Var hue = this.position.x / this.scene.canvas.width * 360; this.color = Utils.hslToFillStyle(hue, 50, 50, 0.5);

Для каждой новой Точки задайте ее начальную позицию и установите оттенок по горизонтали канваса. Я добавил функцию Utils.hslToFillStyle , она немного поможет преобразовать некоторые вводимые переменные в правильно отформатированной fillStyle цепочке. Дела уже идут намного интереснее. Точки в итоге будут собираться в одном месте и уже не будет эффекта радуги после того как они будут хаотично разбросаны. И опять же, это пример подвижной визуализации с примесью математики или вводными значениями. Мне больше нравится работать с цветом через цветовую модель HSL, чем с RGB, потому что она легче в использовании. RGB немного абстрактна.

Работа с мышью

До этого момента не было реальной работы пользователя.

Var Mouse = function(scene) { this.scene = scene; this.position = new THREE.Vector2(-10000, -10000); $(window).mousemove(this.onMouseMove.bind(this)); }; Mouse.prototype = { onMouseMove: function(e) { if(typeof(e.pageX) == "number") { this.position.x = e.pageX; this.position.y = e.pageY; } else { this.position.x = -100000; this.position.y = -100000; } } };

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

Var Scene = function() { ... this.mouse = new Mouse(this); ... };

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

Function Dot(x, y, scene) { ... this.attractSpeed = 1000 * Math.random() + 500; this.attractDistance = (150 * Math.random()) + 180; ... }

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

AttractMouse: function() { //Again, create some private variables for this method var vectorToMouse = new THREE.Vector2(), vectorToMove = new THREE.Vector2(); //This is the actual public method return function(dt) { var distanceToMouse, distanceToMove; //Get a vector that represents the x and y distance from the dot to the mouse //Check out the three.js documentation for more information on how these vectors work vectorToMouse .copy(this.scene.mouse.position) .sub(this.position); //Get the distance to the mouse from the vector distanceToMouse = vectorToMouse.length(); //Use the individual scalar values for the dot to adjust the distance moved moveLength = dt * (this.attractDistance - distanceToMouse) / this.attractSpeed; //Only move the dot if it"s being attracted if(moveLength > 0) { //Resize the vector to the mouse to the desired move length vectorToMove .copy(vectorToMouse) .divideScalar(distanceToMouse) .multiplyScalar(moveLength); //Go ahead and add it to the current position now, rather than in the draw call this.position.add(vectorToMove); } }; }()

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

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

Рассматривайте канвас как карандаш, который поможет вам воплотить ваши замечательные и идеи и даст возможность вашим творениям полететь.

Нередко случается, что нам срочно нужно сделать какие-либо пометки прямо в экране браузера, например, записывая обучающее видео или создавая скриншот (снимок) экрана.

Более того, такой замечательный и полезный инструмент как «Экранный карандаш / экранная кисть» (по мнению автора сайт) может пригодиться и в повседневной практике, например:

1. Чтобы мгновенно выплеснуть накопившиеся художественные таланты и запечатлеть их в новом PNG или JPG файле-картинке.

2. Чтобы быстро набросать смешную или забавную карикатуру без скачивания картинки и запуска Фотошопа.

3. Чтобы в режиме онлайн дополнить изображение на экране монитора какой-либо фразой или надписью, а также многие-многие другие «ЧТОБЫ…».

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

В общем, мало ли кому и зачем потребовалось или захотелось рисовать на экране своего браузера. В любом случае мешать мы не станем, а только поможем реализовать это прямо ЗДЕСЬ и прямо СЕЙЧАС.

Рисование на экране: начальные требования

1. У вас установлен и открыт браузер Мозилла Фаерфокс (Mozilla Firefox).
2. У вас есть клавиатура и мышка.
3. У вас есть непреклонное желание порисовать прямо в окне браузера.

Если все эти пункты соответствуют действительности, то можем приступать к пошаговой инструкции!

Рисуем на экране в браузере Firefox: пошаговая инструкция

2. После того, как пройдет загрузка дополнения (через пару секунд), его придется установить. В открывшемся диалоговом окне жмем «Установить сейчас».

3. После непродолжительной молниеносной установки нам предложат перезапустить браузер, с чем стоит согласиться. Перезапускаем браузер путем нажатия на специальную всплывающую кнопку или делаем это вручную (закрываем Мозиллу и открываем снова), но ФаерФокс должен быть перезапущен. А уже после этого наши изменения вступят в силу.

4. Для того, чтобы запустить «Экранную кисть, экранный карандаш, экранный текстовый редактор … (называйте это как вам угодно)», необходимо открыть панель дополнений, которая находится по адресу:

«ВИД» — «ПАНЕЛИ ИНСТРУМЕНТОВ» — «ПАНЕЛЬ ДОПОЛНЕНИЙ»

Для быстрого запуска можно использовать комбинацию клавиш «Ctrl+\»

5. В открывшейся панели дополнений видим наш экранный карандаш — логотип программы Screen Draw — рисование на экране в браузере. Кликаем по нему и разбираемся с функционалом.

6. Как видно, здесь можно:

— менять размеры кисти (цифровая панель);
— менять цвет кисти (кликаем по цветовому полю) ();
— вводить текст (рус или анл. разных цветов и размеров — специальная кнопка);
— сохранять результаты в картинках (дискета);
— обнулять окно (чистый лист);
— стирать свои рисунки (ластик).

А вы давно рисовали онлайн, не считая «вконтактовских» граффити ?То о чём я собираюсь написать далеко не граффити в соцсети, слои с режимами смешевания, чувствительность пера к нажатию, продвинутые кисти… это отнюдь не для “ПРЕВЕД”ов на стене у соседа)

Вступление

Я когда-то задался идеей и собрал большущий список онлайн-редакторов в которых можно было хоть что-то нарисовать. Тогда это было в новинку и было просто интересно посмотреть что там люди напридумывали… Если мне не изменяет память, было их там около сорока, включая разные «детские» paint-образные рисовалки. Собрать то собрал а вот практического применения всему этому хламу из списка так и не нашлось.

Потом, во времена ведения моего блога(которого уже нет и не будет) я сделал подборку уже из нескольких редакторов в которых можно было нарисовать более-менее законченную работу. Уже в этом списке их было где-то 5-7 (уже не вспомню).

Как ни странно, после почти двух лет с того времени, у меня в закладках все-таки остался один интересный сервис с того моего последнего списка. Пройдя такой как-бы «естественный отбор» он с успехом дожил до сегодня, и вполне бодро посещается мною… ну не реже 1 раза в месяц это точно:D.

Что? Где?

Так что же это за сервис? - спросите вы, 2draw.net - отвечу я:D.

Не смотря на свой малопривлекательный (как по мне) вид, по функционалу сайт очень даже ничего. Есть блог, галерея работ пользователей, форум, вики… ну и собственно кабинет для рисования.

Теперь первое что нам понадобится это установить драйвер планшета(пера) для браузера, чтоб перо умело передавать нажатие приложению в браузере. Качаем драйвер для

.

Всем привет! Сегодня я хотел бы познакомить вас с семейством приложений Monosnap. Эти приложения разработаны для быстрого создания скриншотов. Сейчас в линейке присутствуют приложения для Mac OS X, Windows, iPad, iPhone, и, с недавнего времени, расширение для Google Chrome. Расширение реализует большую часть функционала десктопных версий.

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

В расширении доступно 4 режима снятия скриншота:

1) Capture Selected Area - стандартный снимок выделенной области веб-страницы;
2) Capture Visible Part Of The Page - скриншот видимой части страницы;
3) Capture Full Page - снимок веб-страницы в полную высоту;
4) Smart Capture - самый интересный режим из всех, позволяет делать снимок HTML-блока, на который вы навели курсор.

Редактирование

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

Инструменты:

1) Ручка (brush) - позволяет рисовать кривые и делать подписи.
2) Линия (line), эллипс (ellipse), прямоугольник (rectangle) - примитивы, служащие для выделения ключевых фрагментов скриншота
3) Размытие изображения (blur) - размывает изображение и тем самым делает конфиденциальную информацию нечитабельной.
4) Стрелка (arrow) - примитив в виде стрелки, предназначенный для акцентирования внимания на чем-либо.
5) Текст (text) - для надписей и пометок.
6) Надпись (bubble) - комбинация двух предыдущих инструментов (стрелка с текстом), позволяет указать на ключевой фрагмент скриншота и оставить к нему комментарий.
7) Обрезка изображения (crop) - вырезает из скриншота прямоугольную область. Весьма полезная фишка, если вам нужен не весь скриншот, а лишь его один фрагмент.
8) Палитра (colorpicker) - помимо стандартных цветов, позволяет использовать любые другие (с помощью ввода HEX, RGB или HSB значения цвета).

Помимо прочего редактор поддерживает отслеживание изменений и позволяет отменить (undo) и вернуть (redo) изменения, а также очистить скриншот, вернув его к первоначальному состоянию до редактирования (wipe).

Загрузка

Загрузка изображения в облако возможна без авторизации (в отличие от Awesome Screenshot, храниться они будут целый месяц с момента последнего просмотра), или же после входа в сервис через facebook или свой аккаунт. Что немаловажно - вы всегда можете вернуться к режиму редактирования скриншота, так что не придется делать скриншот заново.

Текущая версия расширения является лишь стартовой и будет постоянно обновляться и развиваться. Надеемся, вы найдете его полезным!



Рекомендуем почитать

Наверх