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

понедельник, 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. Короткий

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



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




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

понедельник, 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.

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

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