воскресенье, 25 апреля 2010 г.

Работа - часть жизни.

С одним умным человеком мне довелось пообщаться мельком в течение одного дня. Но именно он оставил неизгладимое впечатление в моем сознании. Очень грамотный, открытый, искренний, исполняющий свои обещания (это выяснилось позже) - таким должен быть современный менеджер (не думайте, что я тут лесть пишу - он всё равно не местный). Но речь не о нём - речь о том, что от такого человека я узнал следующее: 
Все мы работаем, все мы тратим своё время на исполнение служебных обязанностей. Зачастую это преподносится, как зря прожитое, поскольку только личная жизнь есть то единственное, что имеет реальную ценность. 
Но так ли это? Неужели Вы не помните своих коллег, с которыми решали общие задачи, которые подсказывали Вам, как сделать лучше, которых, возможно, Вы учили разным вещам? Общие проекты, идеи, обсуждения, споры - всё это остаётся и всё это ценно - и не стоит думать, что работа - это нечто лишнее в Вашей жизни. Присмотритесь. Есть ли в Вашем коллективе кто-то, на кого Вы ориентируетесь? Или кто-то, с кем у Вас постоянно оживленная дискуссия на тему и без темы? Или кто-то, в ком Вы уверены на все 100, что сможете позвонить и он поможет Вам с возникшей личной проблемой. Естественно, ситуации бывают разные, но нужно стремиться к тому, чтобы работа не становилась зря прожитым временем зарабатывания денег - работа, в каком-то смысле, должна быть частью жизни - и тогда она будет в радость.

Оффтопик:
Вы не замечали, что многие из Ваших друзей уже свалили - да именно "свалили" - из России?

пятница, 23 апреля 2010 г.

xargs

Век живи - век учись.
Открыл для себя xargs ...
xargs принимает обрабатывает свой стандартный вход (stdin) и передаёт это всё в качестве аргументов команде, указанной в качестве её (xargs) аргумента. Выглядит примерно так:

$ getent passwd | awk -F: '{print $1}' | xargs finger

в результате этой команды будет вызван finger по всем пользователям системы. При чём будет запущен будет только один finger с кучей аргументов, представляющих список пользователей через пробел - да именно через пробел. xargs разделяет поля входного потока по пробелам, табуляциям и переводам строки, и затем передаёт их все finger-у (в данном случае) в качестве аргументов.
Закономерно предположить, что командная строка вполне может переполнится - на этот счёт есть решение: ключик "-L <количество>" - при указании такого параметра xargs запустит команду несколько раз, передавая в качестве аргументов очередное <количество> строк.
Кроме этого она поможет при решении проблемы указанной в недавней записи про проблемы с пробелами в bash. В предложенном решении вместо "for"  можно использовать xargs с ключиком "-0" (цифра ноль):
$ cat spaces.txt | xargs -0
str1 str2 str3 str4
str5 str6 str7 str8
str9 str10 str11 str12
Объяснение "-0" и  прочие подробности - в "man xargs".
... взял её на вооружение.

пятница, 16 апреля 2010 г.

Принятие решений


Все мы принимаем решения. Вся наша жизнь - сплошное принятие решений. Всё что мы имеем - результат принятия решений. Купить машину или ездить на автобусе, поспать подольше или успеть на работу, погулять или посмотреть телевизор - кругом решения, решения, решения. Большинство из них принимаются на автопилоте - наверное, отчасти это и правильно, иначе бы люди перестали с Вами попросту общаться, считая занудой. С другой стороны зачастую мы принимаем важные решения, не принимая во внимание их возможные последствия. Но сегодня речь не об этом. Речь о том как принимать решения.
Чисто теоретически есть три типа методов - "рациональный": плюсы/минусы в столбик и "эмоциональный": хочу/не хочу, и "комбинированный": хочу,но лучше прикинуть.
Все делают это по разному. Ниже я лишь опишу свой метод (он безусловно не уникален, но мало ли кому пригодится).
1. Этап первый. "Очевидность выбора" 
Первым делом выбор проводится методом "очевидности" - если решение важное, но выбор очевиден, то и приступать к пункту 2 не имеет смысла. Безусловно здесь играет роль предыдущий опыт, знания, сообразительность ... и в том числе эмоциональность и люди, чьё мнение имеет высокий вес;
Если вкрадываются сомнения в предпочтительность одного из подходов - переходим ко второму этапу;
2. Этап второй. "Формулировка последствий"
На втором этапе нужно расписать все плюсы и минусы каждого из подходов - все-все-все, вплоть до мелочей. Это, в принципе, не сложно, если немного подумать. Займёт минут 10, но зато упростит жизнь в дальнейшем. Как про "слоников" (или про кого там ...) по пять и по три - большие, но по "пять", а эти по "три", зато маленькие. Так и тут плюсы и минусы всех слоников.
3. Этап третий. "Расстановка приоритетов" 
Осталось решить, что в итоге имеет самое важное значение. В примере выше нужно решить хотите ли Вы съэкономить и купить слоников "по три", или же в первую очередь Вам нужны "большие" слоники.

Резюмируя: Очевидность выбора -> Формулировка последствий -> Расстановка приоритетов;

А вообще коллеги сказали, что в природе существует такой вот интересный подход: 
Для принятия решения нужно ответить на четыре вопроса:
1. Что произойдёт, если я сделаю это?
2. Что не произойдёт, если я сделаю это?
3. Что произойдёт, если я не сделаю это?
4. Что не произойдёт, если я не сделаю это?

По окончании сбора информации, можно переходить к Этапу три "Расстановка приоритетов" ;)

В заключение оффтопик:
Обсудите с друзьями и коллегами: 
Работа. Мы тратим на неё почти всё своё время. В каком случае работа стОит того?

вторник, 13 апреля 2010 г.

BASH. Проблема с пробелами в файлах.

Очень интересная проблема, в которую по началу все втыкают очень долго.
Например, есть файл, состоящий из строк, в которых есть пробелы. Допустим, нам нужно обработать его  в bash построчно. Первое что, приходит обычно в голову,  сделать примерно так:
> for i in `cat file.txt`; do command $i; done
Однако, результат себя не оправдывает:
> cat spaces.txt
str1 str2 str3 str4
str5 str6 str7 str8
str9 str10 str11 str12

> for i in `cat spaces.txt`; do echo $i;done
str1
str2
str3
str4
str5
str6
str7
str8
str9
str10
str11
str12

Происходит это потому, что "for" разделяет передаваемые ему поля не только по переводу строки, но в том числе и по пробелам, что в свою очередь и приводит к таким проблемам.
Частным решением проблемы может стать использование промежуточных переменных и редактора sed. Например так:
> for i in `cat spaces.txt|sed s/\ /:/g`; do k=`echo $i | sed s/:/\ /g` && echo $k;done
str1 str2 str3 str4
str5 str6 str7 str8
str9 str10 str11 str12
... первым седом мы замемяем все пробелы на двоеточия, вторым, соответственно наоборот. В решении реальной задачи в качестве промежуточного шаблона нужно использовать какой-либо символ, либо какую-либо последовательность, которая не встречается в исходном файле.

воскресенье, 4 апреля 2010 г.

Как я планировал свой месяц.

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

Раньше уже занимался планированием своего времени на уровне «есть задачи — нужно сделать, записал в ежедневник — сделал». При этом в течение дня оставалось много свободного времени, которое тратилось на решение текущих задач и на тупняк — состояние, из которого временами бывает выйти очень сложно. Пытался для плаирования времени использовать системы управления проектами — разбивать задачи на подзадачи, расписывать по времени и т.д. Но всё это хорошо тогда, когда основаная задача состоит в том, чтобы разделить работу между участниками команды. В моём же случае ставилась цель «спланировать своё время на решение поставленных мне задач» - следующий уровень детализации планирования.
И поскольку методика, которой я воспользовался, мне жутко понравилась, публикую её здесь. Можно считать её авторской ....
Итак:
Пункт первый: Берёте лист A4. и пишете те задачи, которые Вы хотите сделать в текущем месяце. В моём случае получилось 5 больших задач. Думаю, что задач должно быть до 6-7 - не больше. 



Следующим шагом нужно расписать каждую из них по подзадачам (подзадача — действие, на которое потратиться от часа до нескольких дней). Указать сколько часов чистого времени Вы потратите на каждую из них (так, как если бы Вы забыли обо всём на свете и занимались только этой задачей.).
В результате Вы получите общее количество часов, которые Вам нужны для того, чтобы это всё сделать.
Далее переходим к следующему этапу. Переворачиваем листок и начинаем считать, сколько времени у Вас есть вообще.
Исходные данные: В месяце 22 рабочих дня (Апрель 2010), рабочий день — 8ч. Кроме этого: 1 час в день точно будет уходить на разговоры / чай / покурить и т.п.. Кроме этого, в каждой работе есть своя специфика. Например: в моём случае 2 часа в день можно смело выделить на участие в большом общем проекте (совещания, разговоры, дискуссии, споры, реализация), 3 часа в неделю на тренинги, 2,5 часа в неделю — на еженедельные совещания. В итоге получаем следующее:
У нас есть:176 часов рабочего времени в месяц;
1*22+2*22+3*4+2,5*4=88 часов уходит на «всякие дела», от которых никуда не деться.
Итого получаем — ровно 88 часов на решение поставленных задач.
Собственно далее всё просто:
  1. Понять хватает ли времени в принципе: Если да, то приступаем к действию;
  2. Если времени остаётся очень много — можно вклинить какие-нибудь необязательные задачи (по тому же принципу: расписываем по часам — вставляем в расписание);
  3. Если не хватает, решаем где это время взять: а) отказать от тренингов; б) сократить совещания; в) не обедать; г) продлить решение задач на следующий месяц;
Ну а далее самое интересное:
Берём любой календарный тул — будь то Outlook, Google Calendar – не суть — и начинаем выделять время каждого конкретного дня на конкретные задачи. При этом не забываем выделять свободное время на обед / разговоры / общие проекты (как в моём случае). Плюс ко всему учитываем сроки исполнения той или иной задачи — скажем, если Вам нужно сделать Задачу номер один через неделю — то все её подзадачи очевидно должны быть сделаны на этой неделе и т.д. При этом не забывайте вычеркивать / выделять на A4 те задачи, которые Вы внесли в календарь.
Я в свою очередь вместо месяца спланировал только следующие две недели — это позволит с одной стороны оценить правильность планирования и подстроить следующие две недели в случае необходимости, с другой стороны … мой мозг просто начинал вскипать — и я решил это мероприятие отложить на потом.
Не знаю сработает ли, но пока выглядит красиво.