Показаны сообщения с ярлыком Очевидности. Показать все сообщения
Показаны сообщения с ярлыком Очевидности. Показать все сообщения

вторник, 5 июня 2012 г.

Выпуск 10. Структурируй это! - часть 2 - Умные мысли


Я решил разбить тему "Структурируй это!" на больше чем две части и превратить повествование в набор заметок по разным темам. Полный список заметок можно посмотреть по соответствующему тегу.


Умные мысли


Если мысль не записана, её не существует. Всегда стараюсь действовать согласно этому принципу, любую умную мысль нужно записать. Форматы разные: если мысль короткая я записываю в список только её название. Если идея комплексная я делаю MindMap, куда ввожу общую структуру своей задумки.

MindMap ("интеллектуальные карты") - это мощный инструмент формализованный в 50-х годах XX века. Подробное описание можно прочитать в Википедии.

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

Вот, например, MindMap по моему home project:

MindMap example

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

Я использую FreeMind, это написанное на Java приложение, которое работает на всех платформах.


Анонсы на следующие выпуски

  • инструменты/сервисы, которые я использую - Evernote, RTM, uKeeper, Gmail, Dropbox, Google Contacts ...
  • автоматический разбор почты;
  • работа с файлами и папками по проектам, поиск;
  • структурирование информационно-новостного потока;
  • полезные советы и вопросы самому себе, которые позволят оценить насколько хорошо продумана структура.
Не переключайтесь!

среда, 25 апреля 2012 г.

Выпуск 9. Структурируй это! - часть 1

Спец. выпуск в двух частях.

Структурируй это!


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

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

Общие идеи


1. Структура ранее наполнения. Я всегда стараюсь придумать некоторую структуру для хранения данных до того, как большие объёмы информации начинают поступать. Это может быть, как горизонтальное структурирование (теги, даты документа, номера договоров  ...), так и вертикальное (дерево папок).

2.  Не страшно если структура окажется не удачной, плохая структура лучше чем её отсутствие. Сделать хорошую структуру из плохой проще, чем хорошую и никакой.

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

4. Архивные данные тоже нуждаются в структурировании. Хоть это и не приятно, заниматься "бесполезной" работой по разбору того, что уже не актуально, это нужно делать. В противном случае эти данные просто "утонут" и когда они снова понадобятся (кто хоть раз делал готовые отчёты меня поймёт) приедятся тратить ещё больше времени. Часто архивные данные я структурирую менее детально, чем текущие, но это лучше, чем ничего.

5. Подход  к  структуре дело индивидуальное. Ассоциативная память штука крайне непростая. Деление, которое для одного удобно, совершенно не очевидно для другого. Тяжелее когда над данными необходимо работать совместно, но в нашей работе – это каждодневная необходимость. Тут сработает подход "Кому наиболее важно быстро находить информацию?". Например, проектная документация наиболее полезна для руководителя проекта, поэтому её структура должна быть такой, какая удобна ему. С бухгалтерскими документами всё может быть по-другому.

6. Не переусердствовать. Излишне глубокая структура тоже плохо. Я везде стараюсь не превышать без лишний необходимости 2-х уровней.

Почта


1. Держи inbox пустым. "Входящие" – это показания к действию, то что вам нужно делать. Всё остальное должно быть спрятано в архив, а лучше разложено по папкам.

2. Пользуйся автоматическими фильтрами. Совет коррелирует с п. 1. Чем больше автоматических фильтров отсеивают вашу почту, тем лучше. Меньше лишних для работы писем в inbox, меньше времени тратиться на ручное структурирование. Сейчас уже все распространённые программы/сервисы для работы с почтой это позволяют. У меня в рабочей почте на данный момент 21 фильтр.

Исходный код


С исходным кодом проектов чуть-чуть другая история. Но тут тоже работает правило  "Кому наиболее важно быстро находить информацию?" хотя и в немного перекошенном виде.

Нужно придерживаться одной идеологии в одинаковых сферах применения. Скажем, для веб-движка, должна быть одна структура хранения во всех проектах. И это должно относится не только к раскладыванию кода, но и к таким вещам, как, например, картинки и css.

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

Задачи


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

1. Собирать задачи в этапы. Этапы не имеют прямой связи с версией проекта. Иногда в одном этапе выпускается несколько версий, иногда версия длиться больше одного этапа. Это некоторое психологическое деление, которое удобно руководителю проекта. Все задачи в голове связываются с их этапом. Это позволяет затем проще в них ориентироваться ("а ... это было на этапе N, мы ещё тогда добавили классную фичу X и активно разрабатывали фичу Y, помню-помню"). Я больше помню развитие проекта в этапах, чем с привязкой к годам-месяцам. Иногда я начинаю этапы, по некоторым значимым событиям. Например, при переходе на GIT я сделал новый этап проекта.

2. Делить задачи по области влияния. В последнее время, я делю задачи именно так, а не по отношению к модулю или подсистеме. Грубо, это ответ "для чего это было сделано?", а не "где это было сделано?". Это удобнее для менеджеров проекта, потому что им не очень интересно, что вам пришлось внести изменение в класс X, куда более интересно им, что изменение было внесено для возможности Y.

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

4. Писать задачу, даже если она не на 100% ясна. Если понятно, что задачу нужно будет делать, но пока не понятны детали, я заранее ставлю её в систему управления проектами и помечаю особым образом. Часто при этом у задачи есть только название, но нет ни описания, ни оценки, ни исполнителя. Такая задача служит напоминанием о том, что эти вопросы у кого-нибудь нужно уточнить.

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

6. Будущее тоже важно. Как я уже говорил, я веду этапы. Этап в Ctool – это мета-задача с кучей связных задач. При этом я всегда имею мета-задачу на следующий этап и часто даже на этап +2. А также имею спец. мета-задачу "Задачи на будущее" (т.н. backlog). Это позволяет мне проще отвечать на вопросы менеджеров или заказчиков "какие у вас среднесрочные/долгосрочные планы?". Я уже в общих чертах могу переставить, как будет двигаться проект.



Хаки

Быстрые пометки. Я использую хитрый хак, для пометок своих задач. Например все мета задачи я помечаю значком "⌘", не описанные до конца задачи - "~", бесконечные задачи - "∞" и т.д. Я стараюсь выбирать значки редко встречающиеся в названии задач (помогает таблица Unicode), чтобы потом по ним можно было строить удобные фильтры с поиском в названии задач.

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

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

Comming soon


На этом я прервусь, чтобы затем вернуться со второй частью, где я планирую:
  • рассказать о конкретных инструментах/сервисах, которые я использую;
  • рассказать как я структурирую "умные мысли";
  • рассказать как я структурирую информационно-новостной поток;
  • привести некоторые полезные советы и вопросы самому себе, которые позволят оценить насколько хорошо продумана структура.

UPD: вместо двух частей будет целая серия заметок, смотрите соответствующий тег. Не переключайтесь!

четверг, 15 марта 2012 г.

Выпуск 8. Hello GIT!

Очередной спец. выпуск.


Hello GIT!

Как я уже писал в новостях Русофта у нас построена вся инфраструктура для использования GIT вместо SVN.

На GIT уже успешно переехал ЕИС, в ближайший месяц-два переедет PortalEngine (движок ЕИС).

Ниже предлагаю части письма, которые я писал нашему ген. директору, когда обосновывал переход на GIT. Они ответят вам на вопрос "Зачем GIT, какой от него PROFIT?" (с нетехнической точки зрения). На многие технические вопросы для программистов я уже ответил в Вики.



Git

GIt - это система работы с исходным кодом (аналог используемого нами сейчас SVN). У неё есть важные технические отличия от SVN.

Углубляться в них не буду. Главное, что они позволяют добавиться нескольких преимуществ в разработке:

  • Возможность изолирования изменения по одной или нескольким задачам (в т.н. "ветку"). При это над веткой может работать несколько человек, а по её готовности и проверке она "вливается" в основной код (основную ветку).
  • Что в свою очередь позволяет более гибко выпускать обновления и исправления на рабочем сервере. Сейчас нередко ситуация когда нужно выпускать очередное обновление, а какая-то одна задача тормозит процесс, но простым способом "выкинуть" её из текущего кода. С Git таких проблем нет. 
  • GIT упрощает Hot Fixes, когда на уже выпущенной на рабочий сервер версии есть ошибки и нужно внести изменения. С SVN часто бывало, что наша разработка уже ушла вперёд и просто так протестировать и выложить исправления мы не можем. С GIT это решается более просто.
  • GIT "поощряет" часты и маленькие "коммиты" (фиксацию изменений), в отличии от SVN где коммит часто у разработчика результат работы за день-два. Чем меньше коммит, чем проще в последующем анализировать историю при поиске ошибок и объединения изменений.
  • В GIT возможна организации различных хитрых подходов к разработке. Например, когда в production (рабочую) версию системы разработчики не могут сами внести изменения, а только через руководителя проекта. Он проверяет изменения и после этого подтверждаю их внесение. Для начала у нас будет коммунизм, но со временем я буду вводить некоторые "бюрократические" схемы.
  • GIT быстрее чем SVN, хотя для нас это не особо критично.
  • С GIT в случае падения сервера с репозиторием, мы сможем полноценно продолжить работу, ничего не потеряв (один из нас может "назвать" себя сервером и работать, как раньше).

Чтобы перейти на GIT код ЕИС переписывать никак не нужно, но нужно поменять некоторые автоматические утилиты, которые мы используем при разработке и которые были завязаны на SVN:

  • сбор ядра Pe
  • обновление ядра в ЕИС
  • сбор обновлений для рабочего ЕИС



P.S.

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

понедельник, 5 марта 2012 г.

Выпуск 7. PHP 5.4 released

И так вышел релиз php 5.4.

Список нововведений, несовместимостей и руководство по миграции можно посмотреть на сайте php.net, полный change log тоже доступен.



Язык / интерпретатор

Из наиболее интересных изменений в языке/интерпритаторе:

Trait (типажи)

Cм. мою статью на Хабре, я её также собираюсь обновить, так как в релизе появилось пару новых полезных возможностей).

Dereferencing (разыменование)

Появилось для array и объектов, проще объяснить на примере:


    //array
    function abc() {
       return array('year' => 2012, 'month' => 12);
    }
    $year = abc()['year'];

    //object
    ( new DateTime() )->format('d.m.Y H:i'); 
    //обратите внимание на скобки, без них так не сработает


Тестовый сервер

Для разработки нужд теперь можно поднимать тестовый веб-сервер, прямо из php command line. Хороший вариант для тех, кто ленится разворачивать у себя на Windows тестовую машину (для linux это проще).

Не вздумайте использовать в production.

Подробности в документации.

Закопали наконец Выкинули magic_quotes и safe_mode.


Короткая запись массива и хеш-массива

    $a = ['title' => 'Yo', 'tags' => ['rap', 'yo']]; 
    $b = array('title' => 'Yo', 'tags' => array('rap', 'yo'));
    $a === $b; // => true

Closure с поддержкой $this, которые можно "перевешивать"

Примерно как Function.prototype.apply, Function.prototype.call в php.
Про это напишу подробнее когда-нибудь позже. Например, это позволит динамически "собирать" функциональность объектов.

Пока см. manual.


Стандартная библиотека

Из наиболее интересных изменений библиотеки:

  • json_encode с флагом поддержки прямого unicode (без escape последовательностей, типа \u****,  теперь просто в UTF-8) - позволит ускорить обработку таких json в браузере и формирование на сервере
  • реализация объекта сессий (вместо набора кучи фукнций)
  • новые SPL классы (а вы ещё не знаете/не используете SPL? Срочно читать manual).

Не совместимости

Большинство заметит только пару новых reserved words и удаленые древние фукнции:
session_is_registered(), session_register() и session_unregister().

Полный список.


Спасибо Вове А. за помощь в написании статьи.

пятница, 27 января 2012 г.

Выпуск 6. Короткий

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



Продуктивность




Программирование

вторник, 13 декабря 2011 г.

Выпуск 5. Поток, зона комфорта и алгоритмы сортировки

В этот раз коротко.


Ещё раз про поток

Я уже упоминал поток раньше, вот вам ещё немного по этой теме:


Git победил

В непростом бою Git vs Mercurial для использования в проекте ЕИС победил Git.

Причины: 
  • в данный момент - лучшая интеграция в PHPStrorm и многие другие инструменты для разработки,
  • хорошее руководство в виде GitHowTo и Pro Git.
К Mercurial я по прежнему отношусь очень хорошо, во многих аспектах он лучше Git.


Зона комфорта

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

<...> человек в своей зоне комфорта пребывает в бездействии по отношении ко всему новому, ко всему непривычному, к новому опыту, к новым знаниям, ко всему, что может вызвать хотя бы малейший дискомфорт <...>.
Поэтому зону комфорта нужно расширять за счет огромнейшей зоны дискомфорта. Ведь именно в зоне дискомфорта лежат наши пока не достигнутые цели, пока необретенные знания, новый опыт и много-много всего другого.
 
(Мария Евграшина, tim.com.ua) 
Зона комфорта и бездействие от незнания
Зона комфорта и точки бифуркации

Развитие не возможно без преодоления трудностей!

Алгоритмы сортировки

Во-первых, интересный ресурс sorting-algorithms.com, где можно визуально посмотреть и оценить различные алгоритмы сортировки, их производительность для различных входных данных.

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


Совет

Как ускорить вход по ssh - заметка в вики.


среда, 16 ноября 2011 г.

Выпуск 4. Супермены, будьте реалистами


I'm a superman!

Супермены (они же "герои", они же "трудоголики"), распространённая проблема, которую я встречал в своей жизни не раз. Кто они? Это люди, которые готовы работать до потери сил, в любой день, в любое время. Они могут сидеть на работе по 12 часов и ещё работать в выходные. При этом некоторым из них нравиться осознавать мазохистский факт того, что они делают что-то невозможное. Им нравится факт того, что они ничего не жалеют ради любимой работы.

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

<...> трудоголизм не только не обязателен, он глуп. Работать больше не значит больше заботиться об успехе бизнеса или больше выполнять. Это значит только то, что вы больше работаете. 
В итоге трудоголики создают больше проблем, чем решают. Во-первых, подобный стиль работы не может быть стабильным долгое время. И когда человек «перегорит», а это обязательно случится, последствия будут очень серьезными.  
<...> Трудоголики даже создают кризисы. Они не пытаются стать более эффективными, потому что на самом деле любят работать внеурочно. Им нравится чувствовать себя героями. Они создают проблемы (часто неосознанно), чтобы затем просто начать больше работать.
<...>На самом деле трудоголики не выполняют больше, чем нетрудоголики. Они могут заявлять, что являются перфекционистами, но это означает только трату времени на шлифовку незначительных деталей вместо того, чтобы переходить к следующей задаче. 
<...> Трудоголики – не герои. Они не берегут время, они просто сжигают его. Настоящий герой уже давно дома, он нашел более быстрый способ завершить свои дела.

Это часть из книги "Rework: бизнес без предрассудков", о ней и её предшественнице "Getting real" ниже.


Getting real, Rework

Это две книжки от известной компании 37signals (ага, та самая, которая создала BaseCamp и фреймворк Ruby on Rails).

Первая - "Getting real" крайне рекомендуется всем, особенно разработчикам и руководителям проектов. Книга состоит из 91 эссе, разбитых на 16 глав, и содержит много конкретных советов, как сделать лучше то, чем вы занимаетесь. Также это очередная книжка_которая_учит_нас_жить, но в отличии от многих других, делает это изящно и не навязчиво. Книга сделана короткой, намеренно короткой (прочитав книгу становится понятно, почему). При этом по количеству единиц смысла она превосходит многие многостраничные безнес-трактаты, которые мне приходилось читать.

Книга доступна свободно на сайте авторов, в том числе в переводе на русский.


Вторая - "Rework: Бизнес без предрассудков". Является идеологическим продолжением первой книги, но в основном с уклоном в бизнес сферу и управление персоналом. Стоит оговорится, что книга не столь однозначная, как Getting Real. Некоторые считают что это взгляд на бизнес из песочницы. Книга наделала не мало шума, есть как и фанаты, так и ярые противники. Я по какой-то причине не осилил её дочитать :) , возможно повторю попытку в ближайшее время.

Книгу можно подобрать на флибусте или купить в Озоне. Более подробное описание есть у М-И-Ф, которые её и издали в России.


DVCS: GIT & Mercurial

Прочитал две "канонические" книги про распределённые системы контроля кода: "ProGit" и "Mercurial: The Definitive Guide".

Как книжка мне больше понравилась "ProGit", как система контроля ревизий - Mercurial. Для тех кто, просто хочет узнать, что такое DVSC, лучше начать с ProGit, без этого в "Mercurial: The Definitive Guide" будет не понятно около половины текста :)

Я сейчас для себя начал активно использовать обе эти системы, чтобы понять на практике их отличия. После нового года, участь перехода на DVCS ждёт всех кто работает над ЕИС. Кто не спрятался, я не виноват.

Книги доступны полностью свободно и в разных форматах:
ProGit - сайт, на английском, в переводе на русский.
Mercurial: The Definitive Guide - сайт, на английском, в переводе на русский.

понедельник, 24 октября 2011 г.

Выпуск 3. Работа с датами в php


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


Совет

Если вам написал заказчик с проблемой, которую вы не можете решить или даже рассмотреть сегодня, обязательно напишите ему, что вы задачу приняли, но сможете ей заняться не сразу. Например, "Да, вашу проблему вижу. Я её смогу исследовать в ближайшие 2 дня, исправлю не позже чем за 2 недели".

Благодаря такому подходу:

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


Ну и без фанатизма, иногда действительно нужно всё бросить и делать, но не так часто, как это кажется.




Работа с датами в php


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



Time zone

Для начала правильно настройте текущую временную зону (TZ) в php и базе данных. В php смотрите на функцию date_default_timezone_set, в mysql - http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html. В mysql можно задать как дефолтную временную зону, так и зону для каждого соединения.

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



Форматы

Сначала разберемся с форматами.

1. Строки без временной зоны. Если вы используете дату в "стиле mysql" (YYYY-MM-DD HH:MM:SS) или подобных человеко-читаемых строковых форматах, где не содержится информация о временной зоне, всегда согласовывайте в какой временной зоне будут данные. Если вопрос идёт о каком-то внешнем API (как получение, так и приём), лучше всегда использовать форматы с указанием временной зоны или не зависящие от неё. На крайний случай согласовать временные зоны и нормализовать данные при обработке.

2. Строки с указанием временной зоны. Например, как в заголовках HTTP - "Thu, 19 Nov 1981 08:52:00 GMT". Основная проблема таких дат - их парсинг. Из-за неразберихи в форматах браузеры, например, хранят эту дату для If-Modified-Since напрямую в том виде, как передавал сервер. Использовать такое представления для внутреннего хранения не рекомендуется.

3. Timestamp, (micto timestamp) - это уже число, а не строка. Показывает кол-во секунд (микросекунд) с 00:00:00 01.01.1970 UTC. Не все знают, что это значение TZ независимо! Оно отсчитывается от времени по гринвичу (UTC), не зависимо от того, какую временную зону вы используете. Т.е. при преобразовании строка -> timestamp и обратно *важно*, какую временную зону вы используете. Например, в strtotime при работе в временной зоне MSK от полученного после парсинга значения даты вычитается 4 часа, затем считает timestamp. В обратную сторону аналогично. Зато если у вас есть время в виде timestamp вы можете не думать о TZ. Это подходящий формат для использования в API.

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


Перевод форматов в php

1. Перевод строка -> timestamp:

1.1 strtotime

$timestamp = strtotime($dateString);


где можно безопасно использовать форматы, типа "YYYY-MM-DD HH:MM:SS" и некоторые другие. Обработка происходит "магическим" методом, поэтому ...

1.2 strptime

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

1.3 через DateTime класс

Актуально для php 5.3+

$mydate = DateTime::createFromFormat('d-M-Y', '15-Feb-2009');
echo $datetime->format('U');

Плюс в том, что форматов поддерживается очень много, минус в том, что формат задаётся в формате, близком к функции date, а я, например, больше люблю формат strftime (%Y-%m-%d).


2. Timestamp -> строка

2.1 strftime

strftime(%Y-%m-%d %H:%M:%S, $timestamp);

2.2 date

date('Y-m-d H:i:s', $timestamp)

2.3 через класс DateTime

$mydate = DateTime::createFromFormat('@'.$timestamp);
$mydate->format('Y-m-d H:i:s');
strftime('%Y-%m-%d %H:%M:%S', (int) $mydate->format('U')); 
//но так ещё нужна проверка на unix эпоху


Операции с датами

И так, до 5.2 практически единственным способом операций с датами было использование strtotime, который позволяет писать так:

$tmpstmp = strtotime('now +1 week');
$tmpstmp = strtotime('2011-10-24 12:00:00 +1 month -5 days');

Но опять же из-за "магического свойства" этой функции, иногда были проблемы. Для обхода проблем нагородили кучу сложных способов, например, кто видел реализация Zend_Date, тот в цирке больше не смеётся. Плюс ко всему ниже unix эпохи (1970 год), опуститься нельзя.

В php 5.2 появился новый класс DateTime, а в php 5.3 к нему добавилось пару полезных возможностей. Теперь его можно рекомендовать в виде основного инструменты работы с датами. Там возможны любые операции:
- вычитание дат (DateTime) - (DateTime) = (DateInterval)
- добавление/вычитание из даты: (DateTime) +- (DateInterval) = (DateTime)
- форматирование (см. примеры выше)
- распознание строковых представлений (см. примеры выше)
- работа с временными зонами и пр.

Класс работает с датами от 0 до 9999 года (в "кишочках" используется 64bit целое число).
Крайне рекомендую.

Подроблее читайти manual - http://ru.php.net/manual/en/class.datetime.php

В PE/ЕИС я собираюсь немного похимичить с этими классами, чтобы заставить их принимать strftime формат, даже с некоторыми расширениями.

Результатом поделюсь со всеми желающими.

понедельник, 17 октября 2011 г.

Выпуск 2 - работа в "потоке", язык Dart, видео лекции


Работа в режиме "Потока"

Цитирую:

Во время работы в одиночестве человек в идеале находится в состоянии, которое психологи называют потоком. Поток – это состояние глубокого, почти медитативного погружения в работу. В этом состоянии человек испытывает лёгкое чувство эйфории и не замечает течения времени: «Я начал работать. Когда оторвался, прошло уже три часа». Человек не прикладывает сознательных усилий, потому что работа, кажется, идёт потоком. Вы часто бывали в этом состоянии, поэтому нам не нужно его описывать.
Не все виды работы требуют состояния потока для достижения хорошей производительности, но для любого, кто связан с проектированием, дизайном, разработкой, письмом или подобными задачами, поток – необходимость. Это задачи, требующие сильного импульса. И только в потоке подобная работа продвигается хорошо.
К сожалению, поток нельзя «включать» по желанию. Требуется медленное погружение в предмет, не менее пятнадцати минут концентрации, прежде чем появится это состояние. В период погружения вы особенно чувствительны к шуму и остановкам. Шумная среда может затруднить или сделать невозможным вход в поток.
Из потока вас может легко вывести направленное непосредственно на вас воздействие (скажем, ваш телефон) или назойливый шум («Внимание! Сообщение для Пола Портулаки! Пол Портулака, позвоните по внутреннему номеру…»). После каждого такого вмешательства требуется дополнительное время для возврата в поток. И в это время работа стоит на месте.

Это одна из наиболее важных отложившихся в моей голове мыслей из замечательной книги "Человеческий фактор. Успешные проекты и команды" ("Peopleware") от не менее замечательных Тома Демарко и Тимоти Листера.

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

В инете книга есть в бесплатном  украденном виде:
http://flibusta.net/b/72962

Купить можно в Ozon или в любых других местах:
http://www.ozon.ru/context/detail/id/2338486/


Видео-лекции

Опубликовали видео-лекции с Yet Another Conference (проводит Яндекс, приглашают разных людей). Самое интересное оттуда лекции из 3-го зала про БЭМ в разных его проявлениях. Сам ещё не смотрел, но собираюсь. Вова смотрел в прямом эфире, ему понравилось, рекомендует.

http://yac2011.yandex.ru/

Есть и другие интерсные видео опубликованные за последнее время, ссылки тут:
http://habrahabr.ru/blogs/webdev/130137/



PHP Tips & Tricks

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

$sites = preg_split('/[\s,]+/ums', $sitesString);

а не просто метод explode. Это позволит игнорировать пробелы.


Pomodoro - часть 2

Ещё несколько соображений по использованию pomodoro, а вернее его модификации (см. первый выпуск).

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

Я начала делать список задач на день вечером, теперь могу говорить наверняка, это удобно. Можно выиграть 20-30 минут утром, когда тихо и спокойно на важные задачи.


По офису

я описал мониторы:
http://wiki.rusoft.lan/doku.php?id=office:monitor:start

и обновил список вирт. машин (поднял обратно с WinXP + IE6):
http://wiki.rusoft.lan/doku.php?id=office:test-comp


Dart

Интересная разработка от Google - новый язык Dart. Один из претендентов (не первый и не последний, по правде говоря) на замену JavaScript в вебе. При этом позволяет исполнять код на серверной части в вирт. машине. Скорость обещают сравнимую с компилируемым кодом.

В браузере может исполняться и сейчас транслируясь в JavaScript (поддерживает современные браузеры), но так он работает медлено. Позже обещают внедрить также <script type="application/dart"></script>, но это пока не сделано даже в Chromium или Chrome. Внутри есть API по обращению к Dom дереву документа и окну, очень похожий на JavaScript'овский.

Язык с опциональной типизацией, что уже само по себе прикольно. Работа с "традиционными" классами более нативная, чем в JavaScript. Поддерживаются getter/setter. Есть возможность писать реальный (а не псевдо, как на JS) много поточный код, по методологии акторов, называется Isolate. Поток исполняется в своей отдельной области памяти, общение через отправку сообщений.

http://www.dartlang.org/



Совет

В вашем inbox в почтовой ящике должно быть только то, что ещё требует ответа или действия, всё остальное нужно расскладывать по папкам в архив.
Идеальный inbox - пустой inbox.


P.S.

Интересный комментарий от Тимофея на прошлый выпуск.

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

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

Выпуск 1 - вступление, летнее время и помидорки




Всем привет.

Начну выпуск новостей по разным вопросам, которые интересны лично мне (это основной критерий :) ) и возможно будут интересны вам.

Общие темы примерно такие:

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


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

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


Летнее время

Всем рекомендуется вспомнить, что в октябре этого года РФ не будет переводить часы с летнего времени и мы останемся жить в GTM+4. Если не обновить информацию об этом, операционные системы автоматически переведут время в последнее ВС октября.

В linux на Debian за это отвечает пакет tzdata, обновить данные так:
sudo apt-get update
sudo apt-get install tzdata

Обновлять всю систему не нужно. В Ubuntu исправленные пакеты доступны во всех версиях, начиная с 8.04 (в updates репозитории). Исправления по этому пакету безопасно выполнять в production, не останавливая сервер.


Продуктивность

Очевидная идея, которую я ранее для себя не формализовал:

"Какой смысл в продуктивности, если не остается времени на настоящую жизнь, на кино, книги, друзей, родных и близки, путешествия, прогулки и отдых?"

Продуктивность - это возможность работать меньше, а делать при этом больше!

"Помидорная техника"

Она же Pomodoro technique.
Вводная статья: http://tim.com.ua/2009/10/pomodoro-technique/

Попробовал на себе в каноническом виде, не понравилось, но несколько практик перенял.

Не понравилось, что при отрезках 25 мин на задачи, мои задачи часто прерывались, когда я только начинал входить в раж (это действительно особое состояние работы мозга, расскажу в след. выпуске). Если после этого ещё 5 минут отдохнуть, задачу надо было начинать, как с нуля.

Понравилось и что я перенял:
Я и так всегда составлял список дел и проектов, которые у меня есть (по GTD), но они были отсортированы только по 4-м приоритетам. Я приходил с утра, брал какую-нибудь задачу из списка, делал, возвращался к списку, заново его изучал, думал, что теперь лучше делать, брал следующую задачу и т.д.

Теперь я делаю так.

  1. Прихожу с утра смотрю на свои задачи и проекты (ежедневный пересмотр по GTD).
  2. Выбираю список задач на сегодня, сортирую так, чтобы в данном порядке их было выполнять интересно и приятно =)
  3. Распечатываю этот список.
  4. На распечатке записываю, сколько времени и сколько рабочих отрезков ушло на задачу. Если меня прервали в процессе ненадолго ставлю пометку.
  5.  Если в процессе появилась новая задача, добавляю её в список на бумажке.


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

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

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


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

Возможно позже попробую перенести пересмотр задач на вечер, чтобы с утра на свежую голову и сразу в бой! (... но это противоречит моим привычкам и GTD, так что пока не пробывал).

Совет

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