С недавних пор на практике оценил преимущества использования профессиональных IDE для задач кодинга. К таким IDE я отношу WebStorm, Visual Studio Code, Aptana Studio.

До недавнего времени я пользовался отличным Sublime Text (к поклонникам Atom я себя не отношу) и все меня устраивало. Но в последнее время я все больше и больше начинаю заниматься с JavaScript (надо сказать - не без удовольствия, особенно впечатлил Canvas).

И вот тут произошло так, что в один прекрасный день я просто попробовал поработать в WebStorm с JavaScript. И все! Я уже не мог вернуться на Sublime Text!

Описать конкретно, что именно мне понравилось в WebStorm vs Sublime Text, я так вот в двух словах и не могу. Но скажу только одно - работа в WebStorm действительно удобная; в этом IDE есть много продуманных и отшлифованных вещей, которые сильно облегчают жизнь кодера.

После того, как я оценил работу в WebStorm на Mac OS X, мне захотелось иметь этот IDE и на ноутбуке с Linux Mint 17.2 Cinnamon. Не могу сказать точно, почему так, но мне работать под Linux как-то комфортнее, чем под Mac OS X. Наверное, просто сказывается сила привычки - я linuxoid со стажем.

Но вот незадача - под Linux я привык пользоваться супер-удобными менеджерами пакетов, такими как

1
apt-get
или
1
pacman
.

А вот что касается Visual Studio Code, Aptana Studio или WebStorm - то официальных портов этих IDE в Debian \ Ubuntu-репозиториях нет (поправьте меня, если я ошибаюсь).

На официальных сайтах этих IDE описывается только процесс установки под операционную систему Linux вручную. Не сказать, что там плохо описан этот процесс, но мне он не помог совсем.

Как результат, я решил вкратце описать процесс ручной установки IDE WebStorm под Linux Mint 17.2 Cinnamon \ Xfce. Две другие IDE - Aptana Studio и Visual Studio Code устанавливаются абсолютно аналогично.

  • Шаг первый - с официального сайта скачивается пакет под Linux (32 или 64 бита - на выбор)

  • Шаг второй - делается копия скачанного архива с IDE WebStorm и помещается в любое удобное место (например, пусть это будет Desktop)

  • Шаг третий - распаковывается архив с IDE WebStorm (который в Desktop)

  • Шаг четвертый - в терминале запускается Midnight Commander с правами root:

    1
    
    sudo mc
    
    ; если вы вдруг не знаете, что такое Midnight Commander - то в самое время узнать о нем, так как это программа из разряда must have под системой Linux

  • Шаг пятый - в Midnight Commander копируем распакованный архив WebStorm по пути

    1
    
    ~/opt/
    
    ; в итоге в
    1
    
    ~/opt/
    
    должна появиться папка примерно такого вида - “WebStorm-141.456” (
    1
    
    ~/opt/WebStorm-141.456
    
    )

  • Шаг шестой - на любом пустом месте Desktop делаем правый клик мыши (ПКМ), чтобы вызвать контекстное меню

  • Шаг седьмой - в контекстном меню находим строку “Create Launcher”; текст строки может отличаться в зависимости от того, что именно используется на конкретном Linux - Cinnamon или Xfce; тут главное - увидеть знакомое слово “Launcher”; в результате должно открыться примерно такое окно (в данном случае это Xfce):

Create Launcher

  • Шаг восьмой - вводим значения в поля этого окна; во все поля вводить данные необязательно; нужно ввести только имя приложения в поле “Name” - WebStorm; в поле “Command” вручную вводить путь к исполняемому файлу приложения нет необходимости - достаточно нажать на значок рядом с полем и откроется диалоговое окно “Select an Application”; дальше можно легко и удобно найти IDE WebStorm по пути:

    1
    
    ~/opt/WebStorm-141.456/bin/webstorm.sh
    

  • Шаг девятый - в поле “Icon” добавляем фирменную иконку приложения WebStorm (чтобы легко углядеть WebStorm на Desktop); снова жмем на значок (уже в поле “Icon”); откроется диалоговое окно “Select an Icon”; в этом окне в выпадающем списке поля “Select icon from” выбираем самую нижнюю строку - “Image Files”; снова идем по пути

    1
    
    ~/opt/WebStorm-141.456/bin/webide.png
    

Если все шаги выполнены правильно, то в результате должно получиться примерно такое окно с заполненными полями:

Create Launcher Ready

Это минимальная конфигурация, достаточная для нормального запуска приложения из Desktop. При первом запуске WebStorm-приложения Linux-система задаст вопрос - сделать ли запускаемый файл исполняемым. Естественно, соглашаемся - ведь нам нужно запустить и работать в WebStorm-приложении.

Как я уже упоминал ранее, установка двух других IDE - Aptana Studio и Visual Studio Code ничем не отличается от установки WebStorm. Единственный момент - для Visual Studio Code нужно покопаться с поисках фирменной иконки, которая расположена по пути:

1
~/opt/VSCode-linux-x64/resources/app/resources/linux/code.png
, а исполняемый файл приложения - по пути:
1
~/opt/VSCode-linux-x64/code
.

К слову сказать, лично я был приятно удивлен Visual Studio Code и разочарован Aptana Studio. WebStorm - вне конкуренции!

WebStorm темы

Хочу немного отклониться в сторону выбора темы оформления под IDE WebStorm. В Sublime Text это была однозначно - Material Theme.

Под WebStorm есть порт этой темы - Material Theme JetBrains.

Документация хорошо расписана и автор даже постарался создать возможность легкой и “кошерной” установки темы - через репозиторий JetBrains, из самого WebStorm.

Но, как мне кажется, эта тема заметно уступает своему “оригиналу” из-под Sublime Text (автор сам об этом упоминает).

Хорошая коллекция тем под WebStorm расположена по этим адресам:

В дополнение можно еще установить модный шрифт Hack (на любителя). Или покопаться здесь - Top 11 Programming Fonts, чтобы выбрать что-то подходящее.

К примеру, автор блога WesBos долго пользовался OpenSource-шрифтом Inconsolata, а потом взял и купил шрифт Operator Mono за $200.

PS

Еще в тему установки программных пакетов для разработки под системой Linux стоит сказать, что под Ubuntu существует удобный пакет Ubuntu Make (он же Ubuntu Developer Tools Center в прошлом).

Задача пакета Ubuntu Make - быстрая и легкая установка общих потребностей разработчика в Ubuntu. Ubuntu Make может устанавливать:

На Хабрахабр есть небольшая обзорная статья об этом пакете - Ubuntu Make — разработчику в помощь.

Лично от себя могу сказать, что первый раз установка WebStorm при помощи Ubuntu Make на моем ноутбуке с Linux Mint 17.2 прошла “на ура”.

А вот во-второй раз что-то не заладилось и Ubuntu Make “не хочет” ставить WebStorm - выдает какую-то ошибку, с которой мне нет желания разбираться.


На этом все.

Попытка разобраться, в чем различие между

1
exports
и
1
module.exports
, основанная на статье Understanding module.exports and exports in Node.js.

Что такое
1
module.exports
и
1
exports
в Node.js

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

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

1
module.exports
и
1
exports
в Node.js. Спешу поделиться с вами тем, что я узнал по этому вопросу.

Что такое модуль (module)

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

Для понимания вышесказанного лучше всего создать пример приложения под Node.js. Давайте создадим файл с именем

1
greetings.js
, внутри которого размещены две функции:

sayHelloInEnglish = function () {
  return 'Hello';
}

sayHelloInSpanish = function () {
  return 'Hola';
}

Экспорт модуля

Польза от файла (модуля)

1
greetings.js
(и функций, которые находятся в этом файле) появляется в том случае, когда файл
1
greetings.js
можно использовать внутри других файлов (модулей).

Для достижения этого необходимо слегка изменить исходный код файла

1
greetings.js
. Чтобы понять, что происходит на самом деле, в данном случае будем выполнять пошаговый процесс:

  • представьте себе, что эта строка существует в качестве первой линии кода в
    1
    
    greetings.js
    
    :
var exports = module.exports = {}
  • видоизменим обе функции в файле
    1
    
    greetings.js
    
    с помощью выражения
    1
    
    exports
    
    таким образом, чтобы они были доступны для внешних файлов (модулей):
exports.sayHelloInEnglish = function () {
  return 'Hello';
}

exports.sayHelloInSpanish = function () {
  return 'Hola';
}

В приведенном выше коде можно было бы заменить выражение

1
exports
на
1
exports.module
и получить точно такой же результат.

Если этот момент кажется вам непонятным, то помните, что выражение

1
exports
и выражение
1
exports.module
ссылаются на один и тот же объект.

  • это текущее значение выражения
    1
    
    module.exports
    
    :
module.exports = {

  sayHelloInEnglish = function () {
    return 'Hello';
  }

  sayHelloInSpanish = function () {
    return 'Hola';
  }
}

Импортирование модуля

Давайте сделаем методы модуля

1
greetings.js
общедоступными для другого файла (модуля) с именем
1
main.js
. Этот процесс также разобьем пошагово для более лучшего понимания:

  • в Node.js используется команда
    1
    
    require
    
    для импортирования одного модуля в другой модуль:
var require = function(path) {

  // ...

  return module.exports;
};
  • давайте подключим модуль
    1
    
    greetings.js
    
    в модуль
    1
    
    main.js
    
    :
// main.js
var greeting = require('./greetings.js');

Приведенная выше строка кода равнозначна нижеследующему коду:

// main.js
var greeting = {

sayHelloInEnglish = function () {
  return 'Hello';
}

sayHelloInSpanish = function () {
  return 'Hola';
}

}
  • теперь можно использовать функции модуля
    1
    
    greetings.js
    
    внутри модуля
    1
    
    main.js
    
    как методы объекта
    1
    
    greeting
    
    :
// main.js
var greeting = require('./greetings.js');

// Hello
greeting.sayHelloInEnglish('Hello');

// Hola
greeting.sayHelloInSpanish('Hola');

Отличительные моменты

Команда

1
require
возвращает объект, свойства и методы которого доступны другим внешним модулям при помощи команды
1
module.exports
.

Нижеприведенный пример поможет разобраться в данном вопросе:

// greetings.js

// var exports = module.exports = {};

exports.sayHelloInEnglish = function () {
  return 'Hello';
}
exports.sayHelloInSpanish = function () {
  return 'Hola';
}

// Эта строка кода выполняет повторное переопределение,

module.exports = 'Bonjour';

Теперь сделаем подключение модуля

1
greetings.js
в модуль
1
main.js
:

// main.js
var greetings = require('./greetings.js')

На данный момент в нашем примере ничего не поменялось. В переменную

1
greetings
помещается код, доступный из модуля
1
greetings.js
. Не более того.

Однако, если мы попытаемся воспользоваться каким-либо из методов модуля

1
greetings.js
-
1
sayHelloInEnglish
или
1
sayHelloInSpanish
, то мы получим ошибку. Это произошло в следствие того, что было произведено переопределение экспортируемой структуры модуля при помощи команды
1
module.exports
.

Другими словами, последней командой

1
module.exports
экспортируется совсем другой модуль -
1
Bonjour
, у которого другие свойства и методы. Происходит переопределение экспортируемого модуля и вызов метода
1
sayHelloInEnglish
или
1
sayHelloInSpanish
вызовет ошибку:

// main.js
// var greetings = require("./greetings.js");

/*
 * TypeError: object Bonjour has no
 * method 'sayHelloInEnglish'
 */
greetings.sayHelloInEnglish();

/*
 * TypeError: object Bonjour has no
 * method 'sayHelloInSpanish'
 */
greetings.sayHelloInSpanish();

Чтобы отследить ошибки при использовании модуля

1
greetings
, можно вывести их в консоль:

// "Bonjour"
console.log(greetings);

Заключение

Импорт и экспорт модулей в Node.js является ежедневной задачей. Я надеюсь, что благодаря этой статье стала ясна разница между командой

1
exports
и командой
1
module.exports
. Более того, если у вас когда-либо произойдет ошибка при доступе к общедоступным методам модуля в будущем, то я надеюсь, что у вас есть лучшее понимание того, почему может возникнуть эти ошибки.

Заключение автора перевода

Если честно - прочитал статью и даже потрудился перевести ее, а вот разницы между

1
exports
и
1
module.exports
не заметил. Я хочу сказать, что автор этой статьи (как мне кажется) так и не показал разницы между ними. Могу ошибаться, конечно и буду рад комментариям.

UPD. Вопрос снят, так как решен. В принципе, существование этой и предыдущей статьи уже не надобно, так как есть отличный скринкаст от Ильи Кантора по Node.js, где раскрываются все вопросы - Скринкаст NODE.JS.

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


Данная статья является прочтением и переосмыслением перевода Node.js, Require и Exports статьи-оригинала Node.js, Require and Exports.

Помимо этого, существует еще одна неплохая статья, посвященная данной тематике - Understanding module.exports and exports in Node.js.

Тематика данного поста посвящена двум командам Node.js -

1
require
и
1
module.exports
. Обе эти команды являются служебными и “принадлежат” Node.js.

С помощью этих команд Node.js осуществляет взаимодействие своих модулей между друг другом.

Команда

1
require
подключает один модуль к другому. Команда
1
module.exports
делает модуль доступным для других модулей.


Ниже - краткое изложение статьи-оригинала …

В Node.js все штуки видны друг другу только в рамках одного и того же файла. Под штуками я подразумеваю переменные, функции, классы и их члены.

Например, у нас есть файл

1
misc.js
следующего содержания:

const x = 5;
let summ = function (value) {
  return value + x;
}

Привычный доступ к константе

1
x
и переменной
1
summ
из другого файла невозможен. Это никак не связано с использованием
1
var
.

Дело в том, что Node.js состоит из блоков, называемых модулями; и каждый отдельный файл по своей сути — отдельный блок (модуль), чья область видимости изолирована от других таких же блоков (модулей).

Теперь перед тем как мы узнаем, как сделать эти штуки видимыми вне модуля, рассмотрим более подробно, как загружаются модули в Node.js.

Сейчас речь пойдет о том месте, где пишется -

1
require
. Служебное слово
1
require
используют для загрузки модуля, обычно присваивая результат его работы какой-то переменной:

let someModule = require('./some_module');

Другими словами можно сказать, что в Node.js служебное слово

1
require
служит для подключения одного независимого модуля (файла) к другому независимому модулю (файлу). Принцип подключения через
1
require
заключается в создании в целевом модуле объекта и помещении в этот объект подключаемого модуля.

Конечно же, до тех пор, пока наш модуль (

1
some_module
) ничего не отдает, все приведенные примеры бесполезны.

А чтобы наш модуль (

1
some_module
) что-нибудь отдал, мы будем использовать служебное слово
1
module.exports
:

const x = 5;
let summ = function (value) {
  return value + x;
};
module.exports.x = x; // сделали константу 5 доступной из других модулей
module.exports.summ = summ; // сделали переменную summ доступной из других модулей

Вот теперь наш модуль (

1
some_module
) стал гораздо более полезным:

let someModule = require('./some_module');

В результате в целевом модуле будет создан объект

1
someModule
со свойством
1
x = 5
(
1
someModule.x
) и методом
1
summ
(
1
someModule.summ
).

Есть ещё такой способ отдать штуки из нашего модуля:

let User = function (name, email) {
  this.name = name;
  this.email = email;
};
module.exports = User;

То есть, в исходном модуле создается объект

1
User
со свойствами
1
User.name
и
1
User.email
. Затем с помощью служебного слова
1
module.exports
объект
1
User
делается доступным для других модулей Node.js.

Разница между этими подходами не велика, но важна. Как видно, в данном случае мы экспортируем функцию напрямую:

module.exports.User = User;

// vs

module.exports = User;

Всё это к тому, что потом ее будет легче использовать:

var user = require('./user');

var u = new user.User();

// vs

var u = new user();

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

Чтобы еще более красочно представить процесс взаимодействия модулей, давайте рассмотрим следующий пример:

let powerLevel = function (level) {
  return level > 9000 ? "it's over 9000" : level;
};
module.exports = powerLevel;

Когда вы подключите данный модуль используя

1
require
, фактически им будет являться функция, что позволит вам сделать следующее:

let someModule = require('./powerlevel')(9000);

Что, по сути, является упрощенной записью следующего кода:

let someModule = require('./powerlevel');
someModule(9000);

Это все кратко о командах

1
require
и
1
module.exports
.

Данная статья Tips for Creating a First-Class Personal Portfolio показалась мне интересной в качестве повышения личного опыта. Советы в этой статье больше относятся к дизайнерам; но их в полной мере можно отнести и к Frontend Developer’у. Статья написана редактором и основателем Speckyboy Design Magazine Полом Эндрю (Paul Andrew). Ниже привожу вольный перевод статьи.

Логотип и слоган

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

Уникальный логотип из портфолио Inal Уникальный логотип из портфолио Inal

Логотип должен представлять вас и ваш стиль перед потенциальным клиентом; слоган должен кратко и ясно сказать клиенту, что вы можете сделать для него ценного и полезного.

Итак, запомните: быстрый и краткий ответ на вопрос “Зачем” или же потенциальный клиент забудет о вашем портфолио раньше, нежели вы можете себе это представить.

Слоган из портфолио Mike Etheridge Слоган из портфолио Mike Etheridge

Простая навигация

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

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

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

Простая и доступная навигация из портфолио Robin Man Простая и доступная навигация из портфолио Robin Man

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

Доступные контакты

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

Кнопка "Связаться со мной" из портфолио Matthew Miller Matthew Miller

Показывайте только лучшее

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

Страница из портфолио Camille Leonard Страница из портфолио Camille Leonard

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

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

Продвинутая страница портфолио Kata Farkas Продвинутая страница портфолио Kata Farkas

Сортируйте ваши работы

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

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

Каталогизация работ в портфолио Huncwot Каталогизация работ в портфолио Huncwot

Добавьте отзывы

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

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

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

Что вы умеете

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

Страница с услугами из портфолио Studio Sweep Страница с услугами из портфолио Studio Sweep

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

Личная информация

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

Страница с личной информацией из портфолио Calvin Teoh Страница с личной информацией из портфолио Calvin Teoh

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

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

X-фактор

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

Почему? Да потому, что помимо вас существуют еще великое множество дизайнеров с профессиональным портфолио. И почему в таком случае потенциальный клиент должен будет прийти именно к вам, а не к любому из них?

И снова вернемся к теме ответа на вопрос “Почему?” Если принимать во внимание X-фактор, то это поможет потенциальному заказчику ответить на его вопрос.

Уникальность дизайна из портфолио Colin Snow Уникальность дизайна из портфолио Colin Snow

В заключение можно привести ссылку на подборку из 50 креативных портфолио, которые могут послужить образцом для подражания и примера - 50 Inspirational and Creative Portfolios Sites.


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

Frontend-разработчики, так как же как и программисты, проводят огромное количество часов за мониторами компьютеров. Такая непосильная нагрузка на зрение не может не сказаться отрицательно на последнем.

Чтобы облегчить нагрузку на глаза, необходимо периодически давать возможность отдохнуть последним. Для этой цели существуют программы особого рода, которые относят к классу Repetitive Strain Injury (RSI). По-русски такой термин звучит как Спазм аккомодации.

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

В статье будет рассмотрен процесс знакомства с программой Workrave, бесплатной и хорошо проработанной. Эта программа доступна под OS Linux любого семейства из соответствующего репозитория.

Под OS X автор не нашел достойного бесплатного аналога программы Workrave. Как заменитель, автор использует программу из класса Pomodoro - удобное сочетание планирования рабочего времени и предупреждения RSI.

Под Windows программы класса Repetitive Strain Injury (RSI) рассматриваться не будут, ибо - если вы используете Windows - мои вам соболезнования.

Workrave

В этом разделе я хочу поделиться своим видением процесса настройки и использования программы Workrave. Почему так? Как мне кажется, документация на официальном сайте Workrave весьма скудная и плохо организованная. Русскоязычные статьи по использованию программы Workrave есть, но меня не удовлетворило их качество.

А вот настройка и использование программы Workrave автору кажется делом не совсем интуитивно понятным.

Установка Workrave не должна вызывать каких-либо проблем. Она имеется в репозитории любого Linux-дистрибутива. После установки нужно обязательно ее настроить. Но - не забыть добавить программу в автозагрузку! ))

Панель настроек Preferences разбита на три основных раздела - Timers, User Interface, Network.

Раздел Timers - самый обширный и самый главный. С него и начнем.

Workrave - Timers

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

Все время в Workrave делится на три категории:

  • краткие перерывы (Micro Break)
  • длинные перерывы (Rest Break)
  • дневной лимит работы (Daily Limit)

Вот как это выглядит “на деле”.

Пользователь работает за компьютером, на котором запущена программа Workrave в фоновом режиме. Она отслеживает продолжительность работы пользователя.

Прошло 15 минут непрерывной работы на компьютером - настало время краткого перерыва (Micro Break) продолжительностью 30 секунд. Нужно отвести взгляд от монитора и по желанию - просто посмотреть вдаль или сделать какое-либо упражнение для глаз (советую просто закрыть глаза - прекрасный способ дать отдохнуть).

Обмануть программу и продолжить работать не получиться - Workrave выводит модальное окно с отсчетом времени, которое блокирует Desktop и не дает доступа к нему.

Прошло 30 секунд - модальное окно пропадает и пошел отсчет нового 15-минутного отрезка работы. И так до тех пор, пока не настает черед длинного перерыва (Rest Break) продолжительностью 10 минут.

Конечно, 10 минут торчать за компом (бездельничая) никто не будет, поэтому есть смысл встать, сходить за кофе и так далее - по вкусу.

Длинный перерыв (Rest Break) закончился - начался отчет нового длинного перерыва (Rest Break), состоящего из серии кратких перерывов (Micro Break).

Когда общее время работы за компьютером достигнет четырех часов - все, пора бросать работу за компом, ибо настал Daily Limit!

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

Поэтому давайте откроем окно настроек программы Workrave и несколько углубимся в детали.

На каждой из вкладок - Micro Break, Rest Break, Daily Limit имеется галочка Enable Timer, смысл которой должен быть понятен - включить или выключить этот тип таймера. Другими словами, нужен ли такой тип таймера в вашем рабочем процессе.

Workrave Microbreak

На вкладках Micro Break и Rest Break имеются одинаковые разделы Timers. Здесь устанавливаются продолжительность работы (Time between breaks) и продолжительность отдыха (Break duration) в каждом конкретном случае.

Например, в моем случае для Micro Break я установил продолжительность работы (Time between breaks) в 19 минут, а продолжительность отдыха (Break duration) - в 1 минута. В сумме получается - 60 минут.

Для Rest Break я установил (Time between breaks) в 1 час. То есть, один Rest Break состоит из трех Micro Break. Продолжительность отдыха (Break duration) для Rest Break я установил в 10 минут. Другими словами - один час поработал, встал и отдохнул 10 минут.

Продолжительность дневной работы Daily Limit я установил в 6 часов с перерывом 20 минут. То есть - отработал 6 часов (или 6 Rest Breaks) и отдыхаешь 20 минут. Название Daily Limit (Дневной лимит) конечно чисто условное - можно установить и 12-часовой режим работы ))

Таймер Postpone time служит для установки времени, на которое следует отложить прерыв. Здесь нужно немного подробнее остановиться.

Дело в том, что на каждом модальном окне программы Workrave имеется кнопка Postpone (Отложить).

Смысл этой кнопки вот в чем - вам в голову пришла светлая идея и вы в азарте стучите по клавишам, чтобы материализовать ее; и тут бац - выскакивает надоедливое окно программы Workrave с предупреждением - “Бросай работать!”.

И тут на помощь приходит кнопка Postpone - вы нажимаете ее и Workrave соглашается на три минуты (значение по умолчанию) заткнуться и не беспокоить вас, чтобы дать возможность закончить важный момент работы.

Если вы не доверяете самому себе, то можно убрать кнопку Postpone из модального окна Workrave. Для этого в разделе Options нужно снять галочку Show ‘Postpone’ button. И тогда вы не сможете обмануть программу Workrave, так как не сможете отсрочить очередной запанированный перерыв.

Помимо кнопки Postpone, в модальном окне Workrave имеется еще одна кнопка - Skip. Смысл ее понятен без перевода - это когда время не терпит и плевать на все перерывы. При нажатии на нее пропускается конкретный текущий таймер (Micro Break или Rest Break) и тотчас запускается отсчет нового таймера.

Если был пропущен Micro Break, то начнется отсчет нового Micro Break; если был пропущен Rest Break, то начнется отсчет нового Rest Break с входящими в его состав Micro Breaks.

Также есть возможность отключить кнопку Skip в модальном окне Workrave. Это делается в разделе Options, строка Show ‘Skip’ button.

Секция Break prompting наименее важная и смысл ее существования сводится к одной вещи - предупреждать о готовящемся очередном перерыве (Prompt before breaking). Число попыток (Maximum number of prompts), которые программа Workrave сделает, чтобы выполнить перерыв, по умолчанию равно трем.

На вкладке Rest Break имеются две дополнительные строки. Первая строка Number of exercises служит для установки количества упражнений. Что это такое - упражнения?

Дело в том, что в программе Workrave имеются слайды с упражнениями-гимнастикой, служащей для снятия напряжения, разминки. Количество слайдов - это количество упражнений (от 1 до 10), которые программа Workrave будет предлагать вам сделать во время длительного перерыва (Rest Break).

Вторая строка Start restbreak when screen is locked - это предложить программе запускать длительный перерыв (Rest Break) когда подойдет его время даже тогда, когда экран монитора заблокирован.

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

Вкладка Daily Limit также практически ничем не отличается от предыдущих двух. За одним исключением - есть строка Regard micro-breaks as activity. Она просто говорит о том, что Daily Limit нужно запускать несмотря на то, что одновременно запущен краткий перерыв Micro Break.

С самым большим и важным разделом Timers разобрались. Пора переходить к остальным двум.

Workrave - User interface

Раздел User interface не столь важен для настройки программы Workrave. Первые две вкладки General и Sounds можно смело пропустить.

UPD. Хотя нет - на вкладке Sounds можно поиграться с настройкой звуковых эффектов предупреждения появления окна, самого появления и закрытия окна. На мой вкус, установленные для этих событий звуки уж слишком похожи друг на друга. Трудно отличить на слух, открывается оно или закрывается. Но для этого нужно подбирать свои собственные звуковые файлы - а это время нужно.

На третьей вкладке Status Window убрать галочки в секции Display - строки Show status window и The status windows stays always on top of other windows.

User Interface Status Window

На вкладке Applet мне кажется весьма полезным убрать галочку Applet enabled.

User Interface Applet

Все эти действия позволят “запрятать” программу Workrave в фоновый режим и не мешать основной работе. Теперь напоминания о перерывах (Micro Rest, Rest Break, Daily Limit) будут появляться только тогда, когда наступит их черед.

Workrave - Network

Раздел Network для меня не представляет никакого интереса, поэтому я оставил его “как есть”. Но возможности данного раздела достаточно интересные.

Как говорится в Википедии:

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

Заключение

Вот и все, что мне кажется нужным сказать о программе Workrave.