понедельник, 31 января 2011 г.

JQuery plug-in DataTables


Очень интересный плагин на основе javascript библиотеки jQuery.
Что он позволяет делать:
Без особых трудностей (это конечно зависит от опыта) превратить обычную таблицу HTML в продвинутую интерактивную таблицу.
Дополнительные плагины, которые также присутствуют на сайте. Позволяют изменением в одном парраметре добавить пейджинг, сортировку, количество отображаемых данных и многое другое. Поддерживает несколько источников для получения данных. Например: взаимодействие с сервером происходит с использованием Ajax. Формат обмена данными: JSON. Парсер уже встроен, что иногда вызывает проблемы, так как вся вложенность будет автоматически представлена строкой в ячейки массива. Ну это так, я плачусь =)
Это только малость всех возможностей...

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

Ссылка на DataTables

Всем желаю удачи.

четверг, 27 января 2011 г.

Для затравки. О проблемах с Single Table Inheritance.

Описание проблемы: Имеем разные SQL запросы для одного и того же ruby кода. Т.е. один и тотже код исполняется по разному.

Более подробнее поговорю об этом потом, а пока как решается проблема.

Глубокая статья о трудной жизни. (Ценное в комментариях)
When Rails Needs a Clue - Single Table Inheritance Problems

Ну и по этой теме.
When single-table inheritance attacks
Three Reasons Why You Shouldn't Use Single Table Inheritance
Problem with one-to-many relationship with Single Table Inheritance (Rails)
require_dependency

среда, 26 января 2011 г.

Web. Мы похоже, но все же мы разные.

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

Предположим такую ситуацию. Имеется возможность выбрать несколько значений, скажем, для фильтрации.
Пояснение:
Когда мы обращаемся к странице, мы не пишем параметры, т.е. никто сам не напишет: http://www.blogger.com/post?blogID=48276.

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

На этот случай в web-е есть прием которому лет 100. =)

Создаем скрытый элемент input: <INPUT TYPE=HIDDEN NAME=customerid VALUE="c2415-345-8563">

Пусть по умолчанию у него значение false: <input type=hidden name='deselect-all' value='false'>
Когда не один элемент фильтра не выбран при помощи javascript-a устанавливаем значение true. Включаем это поле в качестве параметра при отсылки запроса на сервер. Когда какой-то элементы фильтра выбран при помощи javascript-a устанавливаем значение false.
Вот и все решение. Если подумать головой, можно найти достойное применение этому методу.
Всего хорошего.

суббота, 22 января 2011 г.

JQuery. Отмена действия по умолчанию для событий.

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

Пару примеров на JQuery для события submit:

Чтобы отменить действие по умолчанию и предотвратить «всплывание», возвращаем false:
  JQuery("form").submit(function(event) {
      return false;
  });
или

  JQuery("form").bind("submit", function(event) { return false; });

Чтобы отменить только действие по умолчанию используется метод preventDefault.
   JQuery("form").bind("submit", function(event) {
        event.preventDefault();
   });

пятница, 21 января 2011 г.

Формат чисел в разных странах.

Как записать число один миллион двести пятьдесят тысяч?
По записи числа некоторые могу сказать, сто вы затряли в застрял в американо-ориентированных рамках сознания (US-centric frame of mind). В мире не все в одном формате записывают числа.
Для примера.
Число: один миллион двести пятьдесят тысяч пятьсот и семьдесят пять сотых.
В разных странах будет выглядеть так:
В США:          1,250,500.75
В Германии: 1.250.500,75
Во Франции: 1 250 500,75
В Швецарии: 1'250'500.75
А в Японии:  125,0500.75

Радует одно, что в конце точка есть везде =)

четверг, 20 января 2011 г.

Время, контроль и управление. RescueTime.

Куда "уходит" ваше время? Чтобы понять это можно воспользоваться инструментом RescueTime

RescueTime  это web-ориентированный инструмент управления и анализа времени. Позволяет работать более эффективнее и продуктивнее.

Дополнительная информация на видео.




RescueTime Time Tracking Overview from Tony Wright on Vimeo.

Тур по продукту, возможности, назначение: RescueTime Product Tour

среда, 19 января 2011 г.

Новости с полей. Accordion

Есть такой JQuery UI плагин Accordion. Он позволяет создавать раскрывающиеся и закрывающиеся по клику меню.
Смотрим демо: Demo

Ссылки по теме:
http://plugins.jquery.com/project/accordion
http://www.linkexchanger.su/2009/93.html
http://docs.jquery.com/UI/Accordion

Исключения и принцип Let it crash (fail).

Навеяно эрлангом и множеством непонятных исключений.
А как правильно?
Умные люди говорят так:
Очень частый паттерн использования исключений — открываем ресурс, пробуем его обработать, ловим исключение, закрываем ресурс и кидаем его дальше. Принцип let it fail автоматизирует этот процесс, выкидывая из него синтаксический мусор.

Спасибо Михаилу за feedback. Учитывая его замечания.

Все остальное читаем: http://habrahabr.ru/blogs/erlang/112110/

Знакомтесь Redmine

Сайт проекта: http://www.redmine.org/
Там можно скачать систему, почитать документацию и т.д.

Что такое Redmine?


Redmine это гибкая система управления проектами в виде web-приложения. Устанавливается на сервере и доступно, через окно браузера. Redmine написан с использованием фреймфорка Ruby on Rails. Эта системя является кросплатформенной "cross-platform" (может инсталированться на разные ОС) и кросбазовая "cross-database" (может инсталироваться под разными базами данных).

Кроме того Redmine открытое ПО с доступным исходным кодом, которое распространяется под лицензией GNU General Public License v2 (GPLv2).

Основные возможности

Перечислим некоторые из основных возможностей Redmine:
  • Поддержка множества проектов;
  • Гибкая работа с ролями в системе доступа;
  • Гибкая система управления задачами;
  • Наличие диаграммы Ганта и календаря;
  • Поддержка системы новостей, управление документами и файлами;
  • Наличие различных систем напоминания;
  • Ведение wiki под проект;
  • Ведение форумов под проект;
  • Система контроля времени исполнения задач;
  • Настраиваемые поля для задач, временных меток, проектов и пользователей;
  • Интергация с различными системами контроля версий (SVN, CVS, Git, Mercurial, Bazaar and Darcs)
  • Создание заданий через email;
  • и т.д.
 
Пример развернутой системы Redmine можно посмотреть здесь: http://demo.redmine.org/.

Всего хорошего.

Фэйл

Сегодня речь пойдет про то, что значит быть профессионалом и отношение к разработке.

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

На примере "простого" задания рассмотрим все эти этапы.

Предположим ставится задача сделать экспорт данных в web-приложении. Требования к задаче: необходимо сделать экспорт данных для выбранной страницы (для профи это уже первый звоночек). Нужно сделать быстро. Все больше требований нет.

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

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

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

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

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


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

Как повел бы себя профи. Звонок первый: т.к. описание для задачи краткое, нужно понять, что оно значит. Звонок второй: имеются инструменты для "фильрации" данных, учитывая описание, следует предположить, что это же должно соблюдаться и для экспорта, т.е. при экспорте нужно учитывать выбранные условия "фильтрации". Звонок три: понять как на сервере формируются данные на основе каких условий, как они связаны с "фильтрацией" на стороне клиента. После этого имеем весь механизм работы связки "клиент-сервер-экспорт". Пишем экспорт на сервере, учитывая полученную информацию. Звонок четыре: описываем основной с вашей точки зрения функционал, учитывая полученные данный звонков 1,2,3. Тестируем сами. Дальше просим отдел QA посмотреть минут 20-30 ваш функционал (ip адрес вашего локального сервера). Если нужно правим. Все получаем хорошую реализацию задания. Это профи.

До этого нужно расти. Будем расти!!! И всем желаю.
Удачи.

Странно, здесь не встретился "северный песец". Это редкое "создание", кто-то преувеличивает. =)

вторник, 18 января 2011 г.

Делить так делить

О чем пойдет речь? Поговорим о дизайне. Я конечно не дизайнер, но для того, что бы дизайнер ставил всякие рюшечки и задал свою цветовую палитру, требуется что-то такое!
Здесь не будут рассказаны тайны мироздания, просто зарисовка из жизни.
В любом web-приложении есть:
  • страничка с разметкой HTML;
  • таблицы стилей CSS;
  • javascript-ы;
  • сервер.
Что требуется? Нужно сделать так, чтобы смена дизайна была легкой процедурой.
Опустим умные речи про то, как все работает в web и перейдем к делу.
Все оформление и дизайн в хорошем случае находится в css. Вот и все меняй не хочу. Но там много всего такого, что если неопытный человек начнет изменят, то будет "северный писец" =).
Выход до банальности прост.
Создаем новую иерархию каталогов со звучными названиями, например, цвета, рисунки, кнопки и т.д.
В этих каталогах размещаем новые css-файлы с говорящими названиями, основной фон, кнопки, текст и т.д.
В сss-файлах создаем css-классы с говорящими названиями (фон, кнопка увеличит и т.д). В эти классы переносим только 2 - 3 строчки отвечающие за дизайн (путь к картинке и смещение в ней, цвет фона и т.д), в основном классе их комментируем и пишем, что перенесены туда-то.
Новые css-классы дописываем к тем, где используются основные.
Для рисунков можно придерживаться принципа: cоглашение вместо конфигурации, это означает, что в вместо бесконечных настроек и кучи вариантов есть определенные соглашения о том, как надо делать. Это можно реализовать как, все иконки для кнопок размером 16*16, все иконки лежат в каталоге таком-то с таким-то именем и расположением картинок внутри.
Вот и все. Жизнь становиться прекрасной.
Нужно изменить иконки: рисуем новую картинку и сохраняем куда надо. Если изменяем одну картинку, а остальные не трогаем, то идем в css находим нужный класс меняем путь к картине, обнуляем смещение.
Основные проблемы:
  • стало больше css-классов (много мест где менять);
  • все, что раньше относилось к одному css-классу теперь размазано по нескольким (сложность);
  • для картинок повторение атрибута пути к файлу (дублирование);
  • и т.д. =)
Но теперь у вас главный плюс: удобство при изменении дизайна =)

суббота, 15 января 2011 г.

Кратко о link_to и символах

В основе лежит пост Ruby Symbols

Как очень просто и быстро в view создать линк. Используем erb и link_to (это по "науке" ActionView helper function).
Пример использовыания:
<%= link_to 'link', :action => 'myaction' %>
Вопрос, что здесь такое :action. Это и есть символ (Symbol). В rails символы используются как строки для использования в разных местах. Если будет проще, то они являются "заполнителями" для идентификаторов и строк. 
В качестве примера, будем использовать в качестве имени действия не строку, а символ:

<%= link_to 'link', :action => :myaction %>
Вы наверное спросите: как создать символ?
Для создания символов есть несколько путей.
Приведем пример, как можно создать символ :myaction.
Это можно сделать следующими способами:

<%= link_to 'link', :action => :'myaction' %>
<% myvar = 'myaction' %>
<%= link_to 'link', :action => :"#{myvar}" %>
<%= link_to 'link', :action => myvar.intern %>
<%= link_to 'link', :action => "myaction".to_sym %>

В чем сокральная прелесть симоволов, а в том, когда символ создан, во время выполнения программы в памяти хранится только одна его копия. То есть Ruby, вместо того чтобы делать копию за копией, хранит ссылку на адрес единственной ячейки памяти.
Экономия памяти, господа, ЭКОНОМИЯ!!! =)

Быстренько о FasterCSV

Нужно просто и быстро импортировать или экспортировать в CSV!
На помощь приходит FasterCSV.
Описание и примеры использования по ссылкам:
Код и описание
Документация
Примеры как парсить CSV в Ruby (различные способы)

Если нужны примеры кода в таких постах пишем замечания в сообщениях =)

четверг, 13 января 2011 г.

Пакет RubyGems


Пакет RubyGems - менеджер пакетов для Ruby, предоставляющий возможности манипулирования гемами (gems).
gem - функциональный модуль, написанный для Ruby On Rails.


Часто используемые возможности пакета:
  • текущая версия
gem -v
  • обновление RubyGems на последнюю версию
gem update --system          # необходимо быть администратором или root
  •  поиск гема
gem search postgres -r
  • установка гема
gem install postgres
  • удаление гема
gem uninstall postgres
  • получение списка гемов, установленных локально
gem list
  • получение списка гемов на удаленных серверах
gem list -r
  • возможность использования из Ruby-кода
require 'rubygems'
  • поддержка многоверсионности при администрировании
  • поддержка многоверсионности при программировании
require 'rubygems'
gem 'activerecord', '= 1.4.0'


Дополнительная информация на rubygems.org.

IT-сленг

ADN          Any day now
             - Тепеpь в любой день
AFAIK        As Far As I Know
             - Насколько я знаю
AMF          Goodbye (Adios Mutha-......)
             - До свидания
AWGTHTGTTA?  Are We Going To Have To Go Through This Again?
             - Мы должны пpойти чеpез это еще ?
BBS          Bulletin Board System
             - Система доски объявлений
BTW          By The Way
             - Между пpочим
CU           See You
             - Увидимся (до свидания)
CUL          See You Later
             - Увидимся позже (до свидания)
DIIK         Damned if I know
             - Чеpт бы меня побpал, если я знаю это! (я не знаю)
FITB         Fill In The Blank....
             - Заполни бланк
FROPPED      F..king dROPPED
             - Чеpтово dropped
FWIW         For What It's Worth
             - Для чего это годно
FYBITS       F..k You, Buddy, I'm The Sysop
             - Пошел к чеpту, паpень, я Системный Опеpатоp
FYI          For Your Information
             - Для Вашей инфоpмации
GD&R         Grinning, ducking & running (usually left at the end of a digging message)
             - DIIK
GROK         As in "I GROK"  means thorough understanding.  From R.A. Heinlin)
             - Как и в "I GROK" означает полное понимание
GIWIST       Gee I Wish I'd Said That
             - Я хотел бы, чтобы Я это сказал
IC           I See
             - Я вижу (понимаю)
IMHO         In My Humble Opinion
             - По моему скpомному мнению
IMNSHO       In My Not So Humble Opinion
             - По моему не такому уж скpомному мнению
IOW          In Other Words
             - Дpугими словами
JSNM         Just Stark Naked Magic
             - Совеpшенно явная магия
L8R          Later
             - Позже
LAB&TYD      Life's A Bitch & Then You Die.
             - Жизнь с.ка и поpа помиpать
LOL          Laughing Out Loud
             - Гpомко смеясь
NBFD         No Big F***ing Deal
             - Ничего сложного в этом чеpтовом деле
OFTPATHIRIO  Oh F..k This Place And The Horse It Rode In On!
             - Пошло к чеpту это место вместе с лошадью, к-я его пpивезла!
OIC          Oh, I See
             - О, я вижу (понимаю)
OTOH         On The Other Hand
             - С дpугой стоpоны
PFM          Pure F***ing Magic
             - Пpосто чеpтова магия
PITA         Pain In The Arse
             - Боль в заднице
POV          Point Of View
             - Точка зpения
ROTFL        Rolling On The Floor Laughing
             - Смеюсь катаясь по полу
RSN          Real Soon Now
             - Тепеpь действительно скоpо
RTFM         Read The F..k... Manual
             - Пожалуйста, почитайте описание
SYSOP        System Operator
             -
TANJ         There Ain't No Justice
             - Нет в жизни спpаведливости
TANSTAAFL    There Ain't No Such Thing As A Free Lunch
             - Бесплатных завтpаков не бывает
TPTB         The Powers That Be
             - DIIK
TTBOMK       To The Best Of My Knowledge
             - К лучшему из моих знаний
TTFN         Ta Ta For Now
             - тепеpь та та (DIIK)
TTUL         Talk To You Later
             - Поговоpим позже
WTF          What the F***
             - Какого чеpта
WYSIWYG      Whats you see is whats you'se get.
             - Что видите, то и получаете

Метаалл! Rails Metal

Пару линков для затравки:
Rails Metal или Rails Metal
Introducing Rails Metal
Rails on Rack

Познаем и радуемся жизни! =)
В светлое будущее!!!!

Ruby и &

В Ruby можно встретить такие вот "элегантные" (элегантности хоть отбавляй) конструкции:



def contrived(a, &f)
    # блок (block) может быть доступен через f
    f.call(a)
    # но yield также работает!
    yield(a)
end
def some_method(&block) 
    block.class 
end


Объяснение этой элегантности можно найти в Унарный амперсанд

Рассмотрим пример:

User.all.map &:name           # получить массив имен пользователей

вместо


User.all.map { |user| user.name }

Сначала кажется что это свойство перечисляемых классов, но на самом деле это не так.

Магия #1.

Когда ruby встречает амперсанд (&) в последнем аргументе вызова метода,
то пытается превратить его в выполняемый блок кода (Proc). Например:

a = (1..10).to_a
a.map { |n| n*n }             # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
 
l = lambda { |n| n*n }
a.map &l                      # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Магия #2.

Ruby, встречая амперсанд, превращает обьект в выполняемый блок через вызов метода #to_proc.

И вот он главный сюрприз, вызывая #to_proc у Symbol мы получаем примерно следующий блок кода:

lambda { |x| x.send(self) }

То есть Symbol#to_proc возвращет именно тот блок, который мы от него ожидали, потому что он в таком виде уже определен в классе Symbol.


Пару слов про:


def some_method(&block) 
    block.class 
end
 
В этом примере знак & - это способ отметить аргумент, который будет соответствовать передаваемому блоку.
Для вызова блока нужно вызвать метод call у нашего блока c требуемыми параметрами (our_block.call(x))
 
Давайте узнаем, чем же на самом деле в последнем примере является наш блок (block).
 
puts some_method {}# => Proc


Вот такие чудеса.


среда, 12 января 2011 г.

Что нам стоит код постоить

Предположим, что необходимо оценит временные затраты по написанию кода (создание определенных функций). Как провести эту оценку.
Упрощаем задачу, пусть имеется код и его нужно покрыть тестами. Сколько нужно на это времени (дней).
За основу можно взять COCOMO. COnstructive COst MOdel (COCOMO – модель издержек разработки) – это алгоритмическая модель оценки стоимости разработки программного обеспечения, разработанная Барри Боэмом (Barry Boehm). Модель использует простую формулу регрессии с параметрами, определенными из данных, собранных по ряду проектов.

Мы будем проще. Что нам понадобиться:
  1. COLNC. Число не оттестированных строчек кода (т.е. строчка кода которую можно протестировать или оператор цикла и т.д.). Что-то вроде SLOC. По-русски: Количество строк кода (Source Lines of Code — SLOC) — это метрика программного обеспечения, используемая для измерения его объёма с помощью подсчёта количества строк в тексте исходного кода. (измеряется в строчках)
  2. k. Средняя сложность строчки кода, т.е. можно интерпретировать как: во сколько больше строчек кода теста нужно написать для тестирования исходной (не оттестированной) строчки кода. (безразмерный коэффициент)
  3. Tw. Длительность рабочего дня (пусть будет в минутах в день).
  4. t. Среднее время, которое тратиться на написание одной строчки теста. (должно быть тоже в минут).
Тогда, в самом простом случае имеем:
TotalTime = (k*COLNC)/(Tw/t), что получаем
(Tw/t) - это сколько строчек теста можем написать за день.
k*COLNC- это сколько строчек теста нужно написать.
(k*COLNC)/(Tw/t) - это сколько дней будем писать тест.

Забавно! =)

вторник, 11 января 2011 г.

Ставим nokogiri

Бывает так, что стартуешь сервер: script/server
А он тебе в ответ:
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
The following gems have native components that need to be built
  nokogiri  = 1.4.1

Run `rake gems:build` to build the unbuilt gems.

Делаешь rake gems:build
А в ответ:
rake aborted!
ERROR: Failed to build gem native extension.
...
libxslt is missing.  try 'port install libxslt' or 'yum install libxslt-devel'

Выход есть!!! =)

Если у вас Ubuntu делаем так:

# ruby developer packages
sudo apt-get install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8
sudo apt-get install libreadline-ruby1.8 libruby1.8 libopenssl-ruby

# nokogiri requirements
sudo apt-get install libxslt-dev libxml2-dev
sudo gem install nokogiri

Если нужна определенная версия например 1.4.1
sudo gem install nokogiri --version '= 1.4.1'

Если остались вопросы идем: Installing Nokogiri

Лень и как с ней жить

По мотивам: Лень — механизм

В России начались рабочие будни. Прошли праздники, выходишь на работу и как-то все не то и не так. За всем этим может стоять ОНА - ЛЕНЬ.

Для того, что бы взять ситуацию в свои руки. Пару слов, что такое лень и как с ней жить. =)

Для начала простое определение:
Лень — это нежелание что-либо делать.

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

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

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


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

  1. Точка отсчета.
  2. Порядок действий.
  3. Конечная цель.
Механиз лени
Как только возникает нарушение равновесия (точка отсчета), человек формирует конечную цель, которая является восстановлением начального состояния (комфорта), и в зависимости от опыта человека (его моделей предсказания), человек выбирает порядок действий для достижения цели.


Опишем составляюшие лени подробнее.


Точка отсчета
Причиной для возникновения любых действий должно быть нарушение равновесия психики (в частности нарушение "зоны комфорта" человека), которое должно быть восстановлено. Природа организма человека максимально мотивирует нас на самые простые действия, которые важны для выживания, именно поэтому мало кто испытывает лень «поесть, если проголодался». В области основных инстинктов человека лень не возникает.
В случае же более сложного поведения, которым обладает человек, всё гораздо более неоднозначно.
Например:
Жена пилит мужа, который уже несколько месяцев «не принес копейки в дом» и сидит играет в WOW: «Сходи устройся на работу!». Мужу — лень. Причина лени: его всё и так устраивает, кроме постоянных напоминаний жены. Но так как возможность ничего не делать и играть, для его более приятная и ценная, чем раздражение от слов жены, он так и будет дальше сидеть и лениться.

Любое действие должно иметь точку отсчета: необходимость, неудобство, нужду и т.п. Эта точка отсчета должна быть именно индивидуальной, а не навязанной. Вы что-либо сделаете только в том случае, если вас действительно что-то неустраивает. Этот пункт тесно пересекается с «Конечной целью», так как точка отсчета всегда однозначно определяет то, какая цель должна быть достигнута.

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

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

Порядок действий
Наиболее распространенной причиной лени в текущем обществе является неоднозначность порядка действий, т.е. пути достижения цели. Человек не будет внутренне мотивироваться на определенные действия, если его подсознание подсказывает ему, что есть более эффективный путь: более быстрый, требующий меньшей затраты ресурсов и усилий и т.п.
Например:
Офисный сотрудник ленится делать свою работу на рабочем месте. У него есть точка отсчета (необходимо выполнить работу), однако ему лень. Причина лени — он знает что делать эту работу сейчас не обязательно, а можно просто посидеть на «Вконтакте». Он экономит свои ресурсы.

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

Мотивация сотрудника офиса значительно возрастает по мере приближения решения о вручении ему премии или прихода "северного песца".

Конечная цель
Конечная цель полностью определяет то, какая стратегия будет выбрана. Также конечная цель должна быть всегда привязана к ценностям и потребностям человека.
В человеческом сообществе очень распространен механизм обучения, в котором человеку прививают цели, ценность которых он для себя не осознает.
Например:
Родители склонны говорит студенту, что тот должен получить диплом, чтобы у него было высшее образование. От такого «прививания цели» не возникнет никакой мотивации. Студент просто не будет подсознанательно понимать какая связь между его потребностями и «бумажкой». Худший вариант, если студент будет мотивироваться на учебу в институте целью «лишь бы предки не жужжали».

Какая будет ставиться цель, так ее и будет достигать человек.

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

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

В заключение
Что дальше?! Дальше нужно понять и действовать. Попробывать и понять, работает это или нет. Все в ваших руках.
Удачи и плодотворной рабочей недели.

понедельник, 10 января 2011 г.

Мелочь из JavaScript

Как корректно использовать точку с запятой в JavaScript-е?
Читаем Всё, что надо знать о точке с запятой

Рабочий момент: рефокторинг в виде отформатировать текст знаком всем =)
А что будет, если внешне изменение не значительное, а его суть коварна.
Будет два варианта: 1. вернуть назад и не трогать ничего (с газом, без газа - попил водички...) =)
2. узнать, обучить и стать специалистом =). В помощь спецификация
Второе круче.
Поэтому, запомним кое-что про ограниченные порождения:
Практический совет для программистов ECMAScript:
  • постфиксные операторы "++" и "--" должны быть на одной строке со своим операндом;
  • выражение в операторах return или throw должно начинаться на одной строке с токеном return или throw;
  • идентификатор в операторе break или continue должен быть на одной строке с токеном break или continue.
Примеры:

i
++   это будет как  i; ++j
j
Так нельзя:
return
          {i:i, j:j}
Так можно:
       return {
           i:i, j:j}
    return (
           {i:i, j:j})
    return {i:i
           ,j:j}
 
На последок:
continue innerloop // верно
 
continue
    innerloop;     // неверно
// ThrowStatement : throw [no LineTerminator here] Expression ;
throw                                          // ошибка разбора
  new MyComplexError(a, b, c, more, args);
// В отличии от return, break, continue, 
// выражение после throw обязательно, 
// поэтому вышеприведённое неотпарсится вообще.
throw new MyComplexError(a, b, c, more, args); // верно
throw new MyComplexError(
    a, b, c, more, args);                      // тоже верно
// любой вариант с throw и new на одной строке верен.
 

Launchy

Что это за зверь: http://copiousfreetime.rubyforge.org/launchy/
Линка на код: https://github.com/copiousfreetime/launchy

Основная идея:
Иногда бывает так, что тест BDD валится, и еще в добавок сложно определить почему, точнее приложенные усилия не стоят потраченного времени. Другое дело, если взглянуть на страницу, на которой тест (например Cucumber) не нашел кнопку «Создать». Для этих целей можно использовать launchy.


Как использовать:
Для начала пишем определенный код.

Например для Cucumber

    Then 'WTF?' do
      save_and_open_page
    end

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


На основе статьи "Rails: Хватит отмазываться, начинаем BDD-ить!": http://habrahabr.ru/blogs/webdev/111480/

воскресенье, 9 января 2011 г.

Introduction

Всем привет! =)
Основное назначение этого блога записывать и делится с миром рабочими моментами.
В основном будет про программирование на Ruby on Rails. Возможно, что не все будет так гиковски, может и про жизнь напишу.
Предлагаю начать, а дальше будет видно!!