Установка LivestreetCMS на MODX Revolution из пакета за 10 кликов

Я уже не раз писал о своем модуле modLivestreet для связки MODX Revolution + LivestreetCMS (В этом топике подробно расписана идея и реализация со схемами и т.п.).
Спустя почти две недели с начала разработки модуля, я пришел к следующему выводу: слишком все сложно получается. Идея сама по себе простая: к MODX Revolution (которому исторически не хватает модулей для построения блогов) прикрутить LivestreetCMS, дабы получить этакую социалочку с хорошим функционалом.

Первый пакет я накидал быстро, и он вполне обеспечивал перенаправление запросов на Livestreet и вывод контента в MODX. Но дальше захотелось реализовать синхронную работу с пользователями MODX- и LS-., потом еще что-то… В общем функционал рос, код тоже. Проблемы проявились в сложностях настройки данного союза. Если с MODX можно сказать вообще никаких серьезных проблем не возникло (во всяком случае не потребовалось трогать ни байта кода движка), то с Livestreet все оказалось сложнее… Так или иначе приходилось лезть в код. Я конечно понимаю, что какие-то вещи можно и перегрузкой классов в своем плагине сделать, но это только частное решение проблемы. Да и некоторые моменты не перегрузить, как к примеру обстояло дело с классом Jevix. Но это не важные детали. Главное — настройка всего этого дела требует много ручной работы. Когда я написал мануал по установке и настройке всего этого дела, я совсем озадачился… Вроде и не много, но все равно больше, чем ничего.

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

Итак, как же происходит установка?
1. Качаем пакет под MODX Revolution (для синхронной работы с пользователями требуется версия не ниже 2.2.0, если только контент отдавать, то можно и более ранние версии использовать).
2. Заливаем его в /core/packages/ и устанавливаем локально (сорри, пока в MODX-репозиторий не пустили).

Кому интересны картинки процесса установки, они здесь

3. После того, как пакет установлен, просто вставляем сниппет [[!modLivestreet.run]] в нужный нам стартовый документ (с пустым шаблоном. Или создаем шаблон с этим сниппетом), и все.

Для тех, кто этого никогда не делал

Таки все 🙂
Заходим на страничку, и видим Livestreet 🙂

В дальнейшем данный проект будет развиваться именно в этом направлении (пакет с готовым Livestreet-ом). Мне кажется это правильно. Кому надо быстро и просто — уже есть. Хотите нюнинг? Сам модуль полностью самостоятельный, без проблем, допиливайте к своему Livestreet-у. Полезная инфа есть на оффсайте.

И напоследок небольшой FAQ.

А если я не хочу, чтобы Livestreet прям на главной болтался? Если я хочу, чтобы он был где-нибудь в разделе /forum/ ?
Просто заходите в системные настройки MODX (здесь и далее Пространство имен modLivestreet), и меняете modLivestreet.url_prefix / на /forum/ (или какой вам нужен).
Все, этот раздел будет для Livestreet базовым. Только не забудьте сделать главную страницу со сниппетом modLivestreet.run для этого раздела.

А если я хочу на отдельном домене, типа forum.moysite.com?
Создаете в MODX новый контекст, в нем главную страницу со сниппетом modLivestreet.run, привязываете в MODX урл к данному контексту и все. Если вы хотите, чтобы ссылки Livestreet-а вели на домен forum., а Wayfinder и т.п. формировал ссылки на основной сайт, то для контекста задайте site_url — основной домен, а настройку modLivestreet.site_url укажите домен форума. Правда вам еще понадобится поменять настройки Wayfinder, чтобы он полные УРЛ-ы формировал, но это мелочи и непосредственно к модулю не относятся.

А будут ли работать MODX-теги, если я вставлю их в шаблоны Livestreet?
Да, будут. Весь контент Livestreet обрабатывается перед выводом парсером MODX.

А как же безопасность? А если кто-то напишет в топик MODX-теги (сниппет, системную настройку и т.п.)?
Таки не боись. Все меры по безопасности приняты. Все запросы на сервер чистятся, а квадратные скобки MODX-тегов заменяются кодами, так что есть кто что-нибудь и напишет, то увидит ровно то, что написал.
Но тут есть одно большое НО: если вы увязали Livestreet с MODX, то не выводите его в чистом виде без связки с MODX, так как чистку тегов выполняет именно MODX, и если кто-то напишет теги в LS, то они потом обработаются в MODX.
Позже будет написан чистильщик и на стороне Livestreet.

А по оптимизации какие советы дадите?
Самый главный совет — настройте правила Rewrite на вашем сервере. В базовой комплектации MODX полностью прогоняет всю статику Livestreet через себя.

У меня nginx и правила написаны вот такие

location /templates/{      		root   /www/site.ru/public_html; 			access_log   off;             expires      30d; } 		 location /uploads/{      		root   /www/site.ru/public_html; 			access_log   off;             expires      30d; } 		 location ~/engine/.*\.js{ 			root   /www/site.ru/public_html; 			access_log   off;             expires      30d; } 

То есть физически Livestreet может быть полностью за пределами DOCUMENT_ROOT.
В общем наверняка разберетесь.

А вот если….?
Все, все остальные вопросы в комментах.

ссылка на оригинал статьи http://habrahabr.ru/post/156889/

Немецкие правообладатели обеспокоены аналоговой дырой

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

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

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

Итак, перевод:

Как правило, автор решает, что можно делать с его работой. В Германии традиционно существует исключение из этого правила — копирование для личного использования. После реформ копирайта в 2003 и 2008гг такое копирование было ограничено более жестко. С тех пор медиакомпании везде трубят о криминальности пиратства. Тем не менее, копирование для личного использования по-прежнему разрешено. В этой статье рассматривается, на что надо обратить внимание.

Разрешённые копии

§53 абз.1 Немецкого Акта о Копирайте описывает, когда разрешается копировать произведения. Представим это утверждение в следующем логическое виде:

Если

  • частное лицо
  • делает отдельные копии
  • с чьей-то работы
  • для собственного личного пользования без извлечения прибыли
  • и не будет их распространять или публиковать
  • и (с 2008г) использованный оригинал не является очевидно нелегальным и не был получен из очевидно нелегального источника

то такое копирование принципиально разрешено.

Верховный суд Германии определил верхний предел числа копий — семь. Копии могут быть сделаны только для собственного личного использования, например для проигрывания в плейере в машине, или как подарок людям, с которыми у вас тесные личные взаимоотношения, таким как родственники или друзья. Использование для профессиональных нужд не допускается. Вы не можете извлекать прибыль из этих копий. Так, например, ваш технически образованный сын не может продавать скопированные DVD своим друзьям.

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

Нельзя воспроизводить копии в публичном месте. Частная вечеринка в честь дня рождения с приглашенными друзьями — это не публичное место. Но если вы будете заводить музыку на вечеринке в школе или в офисе — это публично.

Оригинал считается очевидно нелегальным, если это например «настоящий» DVD с фильмом-новинкой за 1 евро, или CD с песнями, которые скачаны с файлообменника. С 2008г многие файлообменные сервисы попали под это ограничение: если музыка или фильм скачаны с файлообменника или из пиринговой сети, оригинал считается опубликованным «очевидно нелегально», и он не может быть использован для разрешенного копирования в личных целях.

Программы

Копии программного обеспечения не входят в исключение для личного использования. Разрешается только делать резервные копии, см. §69c и §69d Акта о Копирайте.

Защита от копирования (§95a)

По большей части CD и DVD имеют так называемую защиту от копирования, или как её определяет закон, «эффективные технологические меры». Изготовители дисков используют её, чтобы никто не смог копировать или использовать их изделия без разрешения. Обход такой защиты, например, с помощью специального ПО, нелегален. Предупреждение о наличии защиты должно быть хорошо видно, согласно §95d Акта о Копирайте. Обратите внимание на это при покупке.

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

Однако, копирование CD, DVD, и других носителей, не имеющих защиты от копирования, разрешено. Создание резервных копий оригинального прикладного ПО (§69d абз.2 Акта о Копирайте) также не ограничивается требованиями о защите от копирования, см. §69a абз.5 Акта о Копирайте.

Аналоговая дыра

В своем решении от 31 мая 2006г окружной суд Франкфурта подтвердил широко распространенное мнение о том, что эксплуатация «аналоговой дыры» не является обходом защиты от копирования. Так называемая аналоговая дыра в защите от копирования возникает от того, что цифровые данные должны быть преобразованы в аналоговые сигналы, для воспроизведения в динамиках или наушниках. С помощью подходящего ПО и оборудования эти сигналы можно записать и снова использовать как музыку. Подробнее об этой проблеме можно прочитать в дополнении в конце этой статьи.

Уголовная ответственность

Те, кто копирует в личных целях, даже обходя защиту от копирования, могут не беспокоиться об уголовной ответственности, см. Акт о Копирайте §108b ст. 2b. Профессиональным торговцам, однако, угрожает до 3 лет тюрьмы.

Изменения 2008г

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

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

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

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

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

Копирайт и YouTube

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

Если фильм был выложен в общий доступ нелегально, или является очевидно нелегальной копией, то его скачивание является нарушением копирайта. Однако определить, что было выложено легально, а что нелегально, довольно трудно, особенно на YouTube. Крупнейшие компании, такие как Sony Music, Warner Music и Universal Music заключили соглашения с YouTube и предоставляют там свой контент. Скачивание такого видео не запрещено.

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

Копия с копии

Многие задаются вопросом: если у них есть копия, полученная в рамках копирования в личных целях, могут ли они затем сделать ещё копии для себя и/или раздавать их своим друзьям. То есть можно ли делать личные копии с личной копии. Явным образом это не указано, но если судить по Акту о Копирайте, можно предположить: если речь идет о легально приобретенной или полученной копии, то да. Право на копирование в личных целях не привязано исключительно к оригиналу, который вы приобрели сами, как это можно заключить из §53 абз.2 часть 2, где конкретно указано, что оригинал требуется только для создания собственного архива.

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

Заключение:

Можно копировать для личного использования CD и DVD без защиты от копирования. Использование так называемой аналоговой дыры обходом защиты от копирования не считается. Обход защиты от копирования не влечет уголовной ответственности, если копии сделаны для личного использования. Но независимо от целей, в любом случае незаконного обхода защиты от копирования правообладатель может требовать возмещения убытков, например в сумме обычной рыночной цены за каждую нелегально сделанную копию (§97 Акта о Копирайте). Файлообменщики и вообще пользователи интернета должны изучать сомнительные предложения по скачиванию музыки и фильмов, так как с 2008г за это введена ответственность. Особо активные пользователи интернет-файлообмена уже были успешно привлечены к суду.

Дополнение об аналоговой дыре

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

Каждый, кто скачал музыку в онлайн-магазине, например Napster, i-tunes, и т.д., должен внимательно прочитать пользовательское соглашение.

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

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

Люди, которые купили диск в магазине и слушают его дома, не имеют таких ограничений. Следовательно, даже если CD защищен от копирования, аналоговая перезапись с него не является нарушением §95a Акта о Копирайте.


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

ссылка на оригинал статьи http://habrahabr.ru/post/156893/

Симулятор для тестирования ПО АСУТП: Пример

За время, прошедшее с публикации первой статьи на хабрахабре, появилось желание поделиться с сообществом некоторыми мыслями, а так же более подробно описать процесс создания программного симулятора автоматизируемого оборудования. Желающих ознакомиться с предыдущим текстом, прошу сюда — Симулятор для тестирования ПО АСУТП.

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

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

Введение

Почти в каждой статье про TDD (Test-driven development) или Unit testing которую читал, обсуждалась целесообразность расходования времени отведённого на проект для создания тестов. В случае с симулятором для тестирования ПО АСУТП всё несколько сложнее, так как создать полностью достоверную модель динамического производственного процесса по силам, наверное, какому-нибудь институту или очень серьёзным специалистам.

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

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

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

Задача

Пример, который я продемонстрирую, навеян жалкими остатками знаний по электротехнике, которые сохранились с университета. Наверное, многие помнят схему преобразователя переменного напряжения с полным диодным мостом и фильтром на конденсаторе (картинка взята по ссылке www.cqham.ru/pow2_15.htm):

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

Решение

После запуска “Process Simulator” можно сразу приступить к созданию переменных (Item->Items Dictionary).

Items Dictionary

Создадим три внутренние переменные:

  • “Sin” — исходный синусоидальный сигнал
  • “Positive” – значение после преобразования в пульсирующий сигнал
  • “Filter” — результат после сглаживающего фильтра

Внутренние переменные предназначены для связи объектов симуляции между собой. Чуть попозже, я объясню, как происходит связь симулятора с внешним миром (ПЛК или другим программным обеспечением).

Создание объектов симуляции осуществляется с помощью менеджера (Simulation->Simulation Objects).

Simulation Objects

Первое что нам понадобится – исходный синусоидальный сигнал. Создаём объект — “Analog generator” и настраиваем его на переменную “Sin”.

Analog generator

Для реализации интерфейса пользователя, необходимо создать экран (Visualization->Add Screen) на котором будем отображать созданные нами объекты (Visualization->Add ViewControl).

ViewControls

Каждый тип объекта имеет некоторое количество способов отображения. При нажатии кнопки “Add”, выбранный тип отображения помещается на текущий экран, который мы уже создали. Для того чтобы изменить позицию на экране, необходимо перейти в режим дизайна (Visualization->Design Mode) и перетащить отображение мышкой. Если отображение поддерживает изменение размера, это также можно сделать, в режиме дизайна.

Теперь необходимо преобразовать синусоидальный сигнал в пульсирующий. Для этого можно создать объект позволяющий писать скрипты на С# – “CSharpScript”.

CSharpScript с текстом скрипта

Скрипт более чем примитивен и в комментариях не нуждается, кроме того, что к нашим переменным “Sin” и “Positive” идёт обращение через их псевдонимы “var0” и “var1”, которые являются C# объектами и должны быть заранее задекларированы (Items ±).

Остановлюсь немного на типе этого объекта. С помощью стандартных функций платформы .Net, написанный нами скрипт компилируется в MSIL, поэтому скорость исполнения достаточно хорошая. Частоту запуска скрипта можно регулировать (Trigger Time). Ошибки на этапе компиляции не позволят создать объект. Если ошибки возникнут на этапе исполнения или время исполнения превысит допустимое (Watchdog), объект будет деактивирован и текст ошибки запишется в лог. Кстати, активировать или деактивировать можно объект любого типа в любое время, через менеджер (Simulation->Simulation Objects->Activate/Deactivate) или через контекстное меню отображения объекта на экране.

Завершающая стадия – фильтрация. Для этого создадим объект “First-order lag” с входной переменной “Positive” и выходной “Filter”.

First-order lag

Результат

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

Теперь можно, например, поменять амплитуду сигнала, период или другие параметры и сразу увидеть изменения.

Проект сохранённый в формате XML

<ProcessSimulator WindowState="Normal" Top="152" Left="272" Height="703" Width="1463" Split="354">   <Items OPC_Host="" OPC_Server="" UseAccessPath="False" Separator="." IgnoreRoot="False" UpdateRate="0" UseASyncWrite="False" ReducedOPCItemIDs="False" S7PLCSim="False" S7ProSimInstance="1">     <Item Type="Internal" DataType="System.Double" Value="-76.1457525570486" ID="Sin" Comment="Синусоидальный сигнал" />     <Item Type="Internal" DataType="System.Double" Value="77.117550442077" ID="Positive" Comment="Положительный сигнал" />     <Item Type="Internal" DataType="System.Double" Value="152.754176188765" ID="Filter" Comment="Сигнал после фильтра" />   </Items>   <SimulationObjects RefreshRate="0">     <SimulationObject Name="Filter" Active="True" Type="First-order lag" InValueItemID="Positive" OutValueItemID="Filter" LagMS="20000" Gain="1" />     <SimulationObject Name="Positive" Active="True" Type="CSharpScript" Watchdog="1000" TriggerTime="1">       <ItemIDs>         <Var Value="Sin" />         <Var Value="Positive" />       </ItemIDs>       <Script><![CDATA[if((double)var0 >= 0.0D) {     var1 = (double)var0; } else {     var1 = -(double)var0;     }]]></Script>     </SimulationObject>     <SimulationObject Name="Positive Output" Active="True" Type="Analog sensor" RawValueItemID="" PhysicalValueItemID="Positive" MaxPhysicalValue="220" MinPhysicalValue="-220" MaxRawValue="27648" MinRawValue="0" Units="" />     <SimulationObject Name="Sine" Active="True" Type="Analog generator" ValueItemID="Sin" Signal="Sine" Bias="-220" Amplitude="220" Period="20000" Turn="0" />   </SimulationObjects>   <Screens>     <Screen Name="Rectifier" Open="true">       <ViewControl SimulationObject="Positive" Type="Items" X="615" Y="370" Width="230" Height="96" FirstColumnWidth="78" />       <ViewControl SimulationObject="Positive Output" Type="Trend" X="481" Y="0" Width="481" Height="324" UpdateRate="100" TimeFrame="1" Color="FF0000C0" />       <ViewControl SimulationObject="Filter" Type="Trend" X="966" Y="0" Width="481" Height="324" UpdateRate="100" TimeFrame="1" Color="FF000000" />       <ViewControl SimulationObject="Filter" Type="Simple" X="1110" Y="369" />       <ViewControl SimulationObject="Sine" Type="Trend" X="0" Y="0" Width="481" Height="324" UpdateRate="100" TimeFrame="1" Color="FFFF0000" />       <ViewControl SimulationObject="Sine" Type="Simple" X="112" Y="324" />     </Screen>   </Screens> </ProcessSimulator> 

Связь с внешним миром

Предыстория

Когда, я только начал заниматься данным проектом пришлось решать несколько дилемм. Прежде всего, появилась мысль для создания симулятора использовать какой-нибудь SCADA пакет. Таким образом, уходила основная проблема коммуникаций. Доступный, на тот момент, для меня Siemens WinCC 6.2, имеет множество драйверов, в том числе, OPC и S7-PLCSim, которые были необходимы. Чуть позже, выяснилось, что реализовать то, что я задумал, на чистом WinCC, невозможно. Всё упиралось в контроль времени, например, хода задвижки от открытого до закрытого состояния. Следующая мысль была – использовать WinCC как контейнер для работы .Net элементов (.Net controls), в которых реализовать симуляцию.

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

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

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

Если на компьютере, где запущен симулятор, установлена программа Siemens SIMATIC S7-PLCSim (V5.4 + SP4), можно легко организовать запись результата нашего преобразования синусоиды в любую (допустимую) память симулятора ПЛК.

Сначала необходимо подключиться (Items->Connect S7 PLCSim). В окне выбора экземпляра можно выбрать цифру от 1 до 8. Это номер экземпляра S7-PLCSim (пишется в заголовке окна) к которому мы хотим подключиться. Последняя версия позволяет на одной машине запустить одновременно восемь экземпляров.

Создадим новую переменную “FilterS7” с типом S7 PLCSim и укажем адрес, например, MD0 (Memory Type = M; Data Type = S7_DoubleWord; Byte = 0; Floating Point = true). Теперь достаточно в объектах поменять переменную “Filter” на “FilterS7”.

С подключением по OPC всё в том же порядке. Подключаемся к внешнему серверу (Items->Connect OPC), создаём переменные, из доступных на сервере, и используем их в объектах симуляции.

Необходимо учитывать, что в отличие от внутренних переменных, переменные S7 PLCSim и OPC не всегда доступны и для чтения и для записи. Например, в область Q симулятора ПЛК записать ни чего нельзя, так как это область выходов.

Последнее, о чём хотел бы упомянуть, это то, что симулятор предоставляет доступ ко всем своим переменным в качестве OPC сервера. Все переменные видны под своими именами и доступны любому OPC клиенту, например MatrikonOPC Explorer.

Данный функционал можно использовать, например, для связи S7PLCSim со SCADA или другим пакетом который поддерживает OPC. Конечно, предварительно, все переменные должны быть добавлены в Process Simulator.

Заключение

Мне удалось сделать инструмент, который очень помогает мне в работе. Возможно, он пригодиться кому-нибудь ещё, буду рад отзывам и даже bug report-ам :). Если вам чего-то не хватает – напишите. Возможно, в перерывах между бесконечными командировками у меня будет время немного расширить библиотеку объектов доступных в программе.

ссылка на оригинал статьи http://habrahabr.ru/post/151125/

QEMU во FreeBSD-9.0-RELEASE-amd64

Задача: Запустить, настроить n (в примере будем запускать 3) qemu машин с ОС ubuntu-12.04.1-server-amd64-1шт. и FreeBSD-9.0-RELEASE-amd64. Версия amd64 является рекомендованной разработчиками ubuntu.

1. Инсталляция (Не забываем обновить порты товарищи BSD’дельники)


main [16:54:emulators/qemu]# cd /usr/ports/emulators/qemu                                                 
main [16:55:emulators/qemu]# make install clean


                                                                  

Итак:


main [17:25:emulators/qemu-devel]# pkg_info | grep «qemu»                                                 
kqemu-kmod-devel-1.4.0.p1_5 Kernel Accelerator for QEMU CPU Emulator (development versi
qemu-0.11.1_11 QEMU CPU Emulator                                                                                
main [17:25:emulators/qemu-devel]# 


                                                                                   
Ускоритель и процессорный эмулятор установлены.

2. Создание рабочего пространства и настройка окружения

main [17:40:/usr/QEMU]#mkdir —p /usr/QEMU/UbuEx1


Скачаем образ загрузочного диска ubuntu-12.04.1-server-amd64.iso с официального сайта. Загружаем модули ядра и добавляем их в loader.conf (создаем при необходимости)


main [17:53:/usr/QEMU]# touch /boot/loader.conf
main [17:53:/usr/QEMU]# echo ‘kqemu_load=&aquo;YES»’ > > /boot/loader.conf
main [17:53:/usr/QEMU]# echo ‘aio_load=&aquo;YES»’ > > /boot/loader.conf


kqemu.ko — Модуль акселерации.
aio.ko — Модуль асинхронного ввода-вывода.

Или можно добавить модуль aio в ядро, так же для эмуляции работы в сети нам потребуется устройство tap, а следовательно в ядро необходимо подгрузить следующие модули:


options VFS_AIO
device tap
options IPFILTER
options IPFILTER_LOG

main [17:53:/usr/QEMU]# cd /usr/src
main [17:53:/usr/QEMU]# make buildkernel KERNCONF=< kernel_name >

main [17:53:/usr/QEMU]# make installkernel KERNCONF=< kernel_name >

main [17:53:/usr/QEMU]# shutdown —r now


Если не подгрузить модуль aio.ko то QEMU упадет с криком:


Bad system call: 12 (core dumped)


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


main [18:14:~]# kldload if_bridge
main [18:14:~]# kldload if_tap


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


main [18:22:~]# kldstat
Id Refs Address Size Name
1 28 0xffffffff80200000 1203808 kernel
2 1 0xffffffff81404000 2bdd0 kqemu.ko
3 1 0xffffffff81612000 42a7 linprocfs.ko
4 1 0xffffffff81617000 1e00b linux.ko
5 1 0xffffffff81636000 1582 fdescfs.ko
6 1 0xffffffff81638000 64b00 radeon.ko
7 1 0xffffffff8169d000 13a2b drm.ko
8 1 0xffffffff816b1000 2655 if_tap.ko
9 1 0xffffffff816b4000 55fe if_bridge.ko
10 1 0xffffffff816ba000 353d bridgestp.ko


bridgestp.ko — подгрузился автоматически.

Далее убедитесь что ваша основная шина IDE-master подерживает тенологию DMA (сейчас ее поддерживает большенство архитектур)

Так как неободимые модули ядра уже загружены — продолжим подготовку хостовой ОС к предстоящей настройке сети в гостевой ОС. После загрузки модуля if_tap.ko, среди сисемных переменных появятся те, которые регулируют работу интерфесов tap*. Нас интересует две —


main [19:26:~]# sysctl -a | grep «net.link.tap»
net.link.tap.debug: 0
net.link.tap.devfs_cloning: 1
net.link.tap.up_on_open: 0
net.link.tap.user_open: 0


net.link.tap.up_on_open — переводит интерфес в положение up, когда открыт /dev/ tap. net.link.tap.user_open — позволит пользователям открывать /dev/tap. Для ограничения использования устройств /dev/tap* изменим его владельца и права доступа к нему. Это можно сделать задав правила devfs в файле /etc/devfs.rules, по умолчанию в FreeBSD 9.0 его нет, поэтому создаем.


main [20:12:~]# touch /etc/devfs.rules
main [20:18:~]# echo "[sysqemu=11]" >> /etc/devfs.rules
main [20:17:~]# echo «add path ‘tap*’ mode 0660 group qemu» >> /etc/devfs.rules


Теперь изменим переменные:


main [20:20:~]# sysctl net.link.tap.user_open=1
net.link.tap.user_open: 0 -> 1
main [20:21:~]# echo net.link.tap.up_on_open=1
net.link.tap.up_on_open=1


Теперь подготовим сеть. Мне необходимо, чтобы ко всем машинам можно было подключиться снаружи по IP и они имели выход в локальную сеть виртуалных машин. Итак необходимо создать bridge интерфейс объеденив в него 3 tap интерфейса.


main [20:54:~]# ifconfig bridge0 create
main [20:54:~]# ifconfig bridge0 addm bfe0 addm tap0 addm tap1 addm tap2 up
main [20:58:~]# ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 02:a5:80:8e:f1:00
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: tap2 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 14 priority 128 path cost 2000000
member: tap1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 12 priority 128 path cost 2000000
member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 11 priority 128 path cost 2000000
member: bfe0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 7 priority 128 path cost 200000


Где bfe0 — мой физический интерфейс.

Следующим этапом необходимо создать образ диска, который в дальнейшем мы будем подключать к нашей виртуальной машине. Qemu поддерживает несколько форматов образов, подробно они описаны на страницах man. Я же остановлюсь на родном для qemu и наиболее подходящем для проекта формате qcow2. Его особенность заключается в том, что однажды создав с заранее установленными настройками, в дальнейшем при неохоимости исользовать образ с такими же настройками указываем на исходный образ, и диск новой машины будет в точности совпадать с ним шаблом, однако все изменения вносимые в новый образ не будут записаны в шаблонный. Этот процес в qemu называется cow «Copy On Write». Так же данный форматподдерживат шифрование, создание снепшотов, пиво с девочками и zlib компрессию.
Для того, что бы внести изменения в базовый образ, необходимо воспользоваться командой

commit [-f fmt] filename


main [23:20:QEMU/UbuEx1]# qemu-img create -f qcow2 ubuntu_tamplate.qcow2 7G
main [23:22:QEMU/UbuEx1]# ls -al
total 200
drwxr-xr-x 2 root wheel 512 Sep 22 23:22.
drwxr-xr-x 5 root wheel 512 Sep 21 17:40…
-rw-r—r— 1 root wheel 262144 Sep 22 23:22 ubuntu_tamplate.qcow2


На этом создание окружеия закончено. Пиступим к запуску эмулятора и установке ОС ubuntu-12.04.1-server.

3. Запуск и устанвка ОС

Рассмотрим синтаксис команды. Не мудрствуя лукаво, разберу наиболее часто необходимые опции.
Общий формат:


main [13:57:QEMU/UbuEx1]# qemu [options] [disk_image]


Для эмулции архитекур отлиных от X86_32 используем команды:

qemu-system-mips qemu-system-ppcemb
qemu-system-mips64 qemu-system-sh4
qemu-system-arm qemu-system-mips64el qemu-system-sh4eb
qemu-system-cris qemu-system-mipsel qemu-system-sparc
qemu-system-m68k qemu-system-ppc qemu-system-sparc64
qemu-system-microblaze qemu-system-ppc64 qemu-system-x86_64

Наиболе часто встречающиеся опции:

1. -smp n

Поддежржка многопроцессорности, n={1..255}, для архитектуры Sparc32 или Linux n={1..4}.

2. -numa opts

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

image

3. -fda file

-fdb file
Использование файла-образа или реального устройства /dev/fd0 — флоппи хоста в качастве флоппи дисковода QEMU машины.

4. -hda file

-hdb file
-hdc file
-hdd file
Использование файла как жесткого диска QEMU машины. В нотации архитектуры x86 -a -b floppy, -c first hdd, -d cdrom

5. -cdrom file

Использование файла-образа как CDROM’а QEMU машины. Нельзя испоьзовать опции -hdc и -cdrom одновременно. Так же можно использовать cdrom хоста /dev/cdrom.

6. -drive option[,option[,option[,…]]]

Определение устройства. Могут подключаться образы как устройства, медиа устройства, определяется возможность создания снэпшотов этих устройств, типов устройств.
Например:
подключеие cdrom
qemu -drive file=file,index=2,media=cdrom
к шине ide
qemu -drive file=file,if=ide,index=1,media=cdrom
не указывая опции file мы пдключаем пустое устройство
qemu -drive if=ide,index=1,media=cdrom

подключение дисков
qemu -drive file=file,index=0,media=disk
qemu -drive file=file,index=1,media=disk
qemu -drive file=file,index=2,media=disk
qemu -drive file=file,index=3,media=disk
подключение floppy дисковода
qemu -drive file=file,index=0,if=floppy
qemu -drive file=file,index=1,if=floppy
подключение SCSI с unit ID=6 bus=0
qemu -drive file=file,if=scsi,bus=0,unit=6

По умолчанию используется интерфейс ide, index инкрементруется.
qemu -drive file=a -drive file=b равнозначно qemu -hda a -hdb b

7. -mtdblock file

-sd file
-pflash file
Разные типы флеш памяти.

8. -boot [order=drives][,once=drives][,menu=on|off]

Опция определяющая порядок загрузки. Drives= a b (flopy) c (hdd) d (cdrom) n (network). -boot order=ac — загрузка сначала с floppy, затем с hdd
-boot once=d — загрузка с cdrom затем перезагрузка

9. -snapshot

Запись шотов во временные файлы вместо образа raw.

10. -m megs

Установка значения памяти RAM. В Гб или Мб.

11. -k language

Таблица языков:
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ru th
de en-us fi fr-be hr it lv nl-be pt sl tr
по умолчанию «en-us».

12. -usb

Подключение драйвера USB.
13. -usbdevice devname
Добывене устойства USB. Типы устройств могут быть мышь, планшет, диск и др.

14. -name name

-uuid uuid
Имя гостевой системы. ID гостевой системы.

15. -vga type

Тип VGA карты для эмуляции.
сirrus — поддерживается семейством ОС Windows начиная с Windows 95
std — используется для высоког разрешения. Cirrus и std подойдут в болшенстве случаев.
vmware
none

16. -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]

Создание сетевого интерфейса в гостевой системе. Пример из man:

qemu linux.img -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
-net nic,vlan=1 -net tap,vlan=1,ifname=tap1

Мы видим создание нескольких интерфейсов vlan разного типа, с разными именами. -net nic создает pci карту с интерфейсом vlan. -net tap подключат устройство tap хоста к интерфейсу vlan0 и vlan1.

17. -d

Вести лог в /tmp/qemu.log
kqemu.ko
У эмулятора QEMU существует еще множество поленых опций, таких как например редирект физических устройств хоста и другие, описание всех его вкусных свойств выхдит за рамки данной статьи.
Итак, пора запускать VM эталонной машины.


В связи с некоторой нестабильностью работы модуля kqemu.ko в ОС FreeBSD, перед запуском VM, выгружаем этот модуль из памяти на этапе инсталяции гостевой ОС.

main [14:41:dassi/QEMU]# kldunload kqemu.k



main [0:08:dassi/QEMU]# qemu-system-x86_64 -net nic,model=e1000 -net tap,name=tap0,script=no -cdrom ubuntu-12.04.1-server-amd64.iso -hda tamplates/Ubuntu_T/ubuntu_tamplate.qcow2 -boot order=dc m 256 -localtime
VNC server running on `127.0.0.1:5901′
Warning: no scancode found for keysym 0
Warning: no scancode found for keysym 0


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

image

image

Следующим шагом настроим локальную сеть между хостовой и гостевой ОС. Для начала как это работает. Мы должны создать физический интерфейс гостевой ОС, который через виртуальный коммутатор будет связан с хостовой ОС. Такой коммутатор в нотации qemu называется vlan.

image

Существует несколько вариантов подключения гостевой и хостовой ОС в ЛВС:

1. В user режиме гостевая машина использует встроенную систему обмена с хостом.


main [19:45:dassi/QEMU]# qemu-system-x86_64 -net nic,vlan=0 -net user,vlan0 -hda tamplates/FreeBSD_T/freebsd_tamplate.qcow -boot c -m 256 -localtime


После запуска в гостевой ОС необходимо сконфигурировать сеть с помощью встроеного dhcp сервера.
Получим адрес из диапазона 10.0.2.0/8.

2. Связывание хостового нтерфейса tun*\tap* с интерфейсом гостевой системы.

main [19:45:dassi/QEMU]# qemu-system-x86_64 -net nic,vlan=0 -net tap,vla0,script=no,downscript=no -hda tamplates/FreeBSD_T/freebsd_tamplate.qcow -boot c -m 256 -localtime


При запуске рекомендуют конфигурировать файлы /usr/local/etc/qemu-ifup и /usr/local/etc/qemu-ifdown, это скрипты конфигураци сети при запуске\выключении.

image

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

Достигается это созданием соединения типа мост в хостовой машине и помещением туда ее фзического интерфейса и виртуальных tun*\tap*. Создается такое соединение средстваи хостовой ОС или редактированим стартовых скриптов сетевой системы qemu. В осальном настройка повторяет пункт 2.

image

Хочется отметить, что система qemu предоставляет возможность объединения виртуальных машин в сеть через сокет хостовой ОС, привязку vlan* к порту, дамп сетевого трафика определенной vlan, а так же опция -net none применяется в случае если в сетевом интефейсе нет необходимости — для отмены дефолтных значений -net nic -net user.

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


main [21:38:dassi/QEMU]# ifconfig bridge0 create
main [21:38:dassi/QEMU]# ifconfig tap0 10.100.0.1/24
main [21:38:dassi/QEMU]# ifconfig tap1 10.101.0.1/24
main [21:38:dassi/QEMU]# ifconfig tap2 10.102.0.1/24
main [22:14:dassi/QEMU]# ifconfig bridge0 addm tap0 addm tap1 addm tap2 addm bfe0
main [22:14:dassi/QEMU]# ifconfig bridge0
bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 02:a5:80:8e:f1:00
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
member: bfe0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 7 priority 128 path cost 55
member: tap2 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 14 priority 128 path cost 2000000
member: tap1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 12 priority 128 path cost 2000000
member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 11 priority 128 path cost 2000000


(На этом этапе настройка хоста завешена, как вы замеили — пара tap интерфейс хоста + вируальный интерфейс гостевой ОС будет нахоится в одной подсети с маской 24. bfe0 — мой физический интерфейс смотрящий во внутреннюю дмашнюю сеть )

Теперь достаточно запустить наши машины и средствами готевых ОС назначить виртуаьным инерфейсам соответствующие адреса 10.0.100.2, 10.0.101.2 и 10.0.102.2 соответственно. Отлично, теперь наши машины видят внутреннюю сеть и видны из нее.

ИТОГ: Имеем 3 машины с ОС Ubuntu-1шт и FreBSD-2шт запущенные, сабильно работающие «видящие» ЛВС и «видимые» из нее. Задание выполнено.

Используемые ресурсы

man frebsd;
http://wiki.freebsd.org/qemu;
http://www.lissyara.su/articles/freebsd/programms/qemu_lan/.

ссылка на оригинал статьи http://habrahabr.ru/post/156887/

Организация эффективного рабочего процесса фрилансера с помощью ERP-системы

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

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

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

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

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

3. Гибкость- большинство систем, которые, напомню, чаще рассчитаны на компании от средних и выше, предлагают невероятное количество функционала, который мне и даром не нужен, а ведь за него еще и приплачивать просят, а облегченные версии либо отсутствуют напрочь, либо представляются невразумительными огрызками, которые только и нужны для того, чтобы купить «большую дорогую и блестящую» версию продукта. В Мегаплане все проще, продукта «Совместная работа FREE» за глаза хватит для решения бОльшей части насущных задач и это будет абсолютно бесплатно.

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

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

Это все лирическое вступление, без которого пост не имел бы логической структуры, собственно теперь ближе к сути, которую описывать буду в формате «было — стало». Под катом много букв, надеюсь заинтересованные читатели осилят прочтение.

Основные задачи, которые я хотел решить, внедрив ERP-систему в свою работу:

1. Организация рабочих проектов

Было:

С переменным успехом в качестве фрилансера я вел порядка 3-4 заказчиков параллельно, с кем-то работал «под ключ», а кому-то помогал на постоянной основе по мелочевке. Ни о какой организации речи тогда и не шло, переписка, договоренности и прочие умозаключения велись где только можно- переписка на биржах удаленной работы, почта, скайп, джабберы и т.п. «стикеры на мониторе», как результат, иногда даже забывал вовремя стрясти с заказчика положенную оплату. А уж про сложности с подыманием из глубин сознания или history переписок нужных мне данных и речь не завожу, мрак несусветный, который сводил на нет все мои порывы о расширении масштабов работы, собственно именно эта задача и подтолкнула меня на обращение своего взора в сторону полноценной системы планирования собственных ресурсов.

Стало:

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

2. Организация коммуникаций (как внешних, так и внутренних)

Было:

Опять же из-за разрозненных источников общения с клиентами и субподрядчиками всегда возникали сложности коммуникаций, а когда пошли заказчики и соисполнители из различных часовых поясов, то и вовсе ад несусветный начался. Пообщался с клиентом из Новосибирска в скайпе, получил ТЗ по почте, сформировал тест-план в трекере, передал его коллеге по цеху из Доминиканы ссылкой в джаббер, после приехал к родителям в гости, решил сам поработать и проверить статус задачи у коллеги, для этого вспоминал пароль от почты, дожидался синхронизации скайпа, чтобы подтянуть переписку с клиентом, искал в трекере урл на задачу с тест-планом… А это пример только одного проекта и одной задачи, а проектов, как уже говорил вел по 3-4 в месяц, суммарно набегало не меньше 20-30 задач и даже работая за одним ПК постоянно приходилось создавать гуглодоки, куда скидывал важные моменты, которые тут же терялись в потоке, а через месяц-два и вовсе превращались в нечитаемое месиво информации.

Стало:

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

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

А при условии, что бесплатная версия Мегаплана выдается как SaaS-решение, то мой инструмент доступен из любой точки мира на любом устройстве в браузере (и в качестве отдельного клиента на iOS, был бы Android и там бы не остался без внимания со стороны компании-разработчика инструмента). Таким образом, сейчас я без проблем в любой точке планеты имею доступ к необходимой информации, равно как и мои заказчики и коллеги.

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

3. Организация тактических задач

Было:

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

Стало:

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

А также использую модуль «Дела», где отмечаю задуманное на день/неделю и отмечаю выполненные задачи или передвигаю их по календарю простым drug’n’drop’ом. Чуть возвращаясь к организации коммуникаций, при необходимости, я могу на совещание по скайпу, например, добавить сразу несколько своих коллег и заказчика, система сама уведомит о назначенном совещании, а если надо и напомнит по почте/джабберу/телефону,

4. Организация стратегических задач

Было:

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

Стало:

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

5. Организация знаний

Было:

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

Стало:

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

В добавок к этому данный инструмент имеет также модуль «Документы», в котором можно удобно хранить сопутствующие файлы, легко их шарить при необходимости и иметь внутреннюю структуру.

Несомненно различного рода инструменты могут выполнять аналогичные функции, но преимущество ERP-системы в данном случае в том, что это не разрозненные программы и решения, а целый комплекс, который позволяет «не отходя от кассы» решать все насущные вопросы связанные с организацией знаний.

6. Организация отчетности

Было:

Отдельная головная боль- это отчетность перед заказчиком, так как работаю я по самым разным схемам, как то «под ключ», «почасовая оплата» или, например, фиксированная по времени удаленная работа, то и отчеты для заказчиков у меня всегда разные были. Одному файлик с тест-планом и списками найденных дефектов прислать нужно, второму список выполненных задач в трекере прислать, а третьему, так и вовсе нужно составить акт выполненных работ. Причем отчетность должна быть не однодневной, а с возможностью достать ее из анналов истории при необходимости. Раньше были проблемы даже с подсчетами отработанных часов, делал под каждый проект табличку в экселе, там список выполненных задач, время на каждую, сумма на итоге и т.д. приходилось поддерживать отдельные инструментальные решения, которые в процессе работы только мешали, а нужны были лишь в конце отчетного периода. Также бывали случаи, когда после отправки на почту терялись отчеты или, упаси Господи, после отправки через джаббер/скайп.

Стало:

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

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

Собственно плюсов много, я лишь ограничился наиболее критичными моментами, постаравшись наиболее ярко их обрисовать.

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

1. Получил один, в меру универсальный инструмент, в котором имею возможность решать 90% поставленных передо мною задач.

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

3. За счет выигранного времени я смог увеличить количество ежемесячных проектов до 7-8.

4. Если раньше я решал задачи в одиночку или при помощи одной коллеги, то теперь я запросто координирую работу 3-5 удаленных сотрудников.

5. Суммарная выручка моего предприятия выросла в 4 раза, а личная прибыль в 3 раза.

6. Были сделаны 2 эпические задачи, до которых ранее не доходили руки или о которых и вовсе забывал.

7. Появились серьезные основания, возможности и предпосылки для дальнейшего развития бизнеса, его масштабирования и корректного управления при помощи Мегаплана.

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

ссылка на оригинал статьи http://habrahabr.ru/post/156743/