Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #74


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No74 (2009-08-11).

Здравствуйте, уважаемые читатели!

Сегодня в нашем выпуске сразу две статьи:


Автор: Sel.

Права на статью принадлежат автору и Клубу программистов «Весельчак У».


How to Shower like a Woman


Take off clothes and place them sectioned in laundry basket.

Walk to bathroom wearing long dressing gown.

If you see husband along the way, cover up any exposed areas.

Look at your womanly physique in the mirror — make mental note to do more sit-ups/leg-lifts.

Get in the shower.

Use face cloth, arm cloth, leg cloth, long loofah, wide loofah and pumice stone.

Wash your hair once with cucumber and sage shampoo with 43 added vitamins.

Wash your hair again to make sure it’s clean.

Condition your hair with grapefruit mint conditioner enhanced.

Wash your face with crushed apricot facial scrub for 10 minutes until red.

Wash entire rest of body with ginger nut and jaffa cake body wash.

Rinse conditioner off hair.

Shave armpits and legs.

Turn off shower.

Squeegee off all wet surfaces in shower.

Spray mould spots with tile cleaner.

Get out of shower.

Dry with towel the size of a small country.

Wrap hair in super absorbent towel.

Return to bedroom wearing long dressing gown and towel on head.

If you see husband along the way, cover up any exposed areas.


How to Shower like a Man


Take off clothes while sitting on the edge of the bed and leave them In a pile.

Walk naked to the bathroom.

If you see wife along the way, shake willy at her making the ‘woo-woo’ sound.

Look at your manly physique in the mirror.

Admire the size of your willy and scratch your bum.

Get in the shower.

Wash your face.

Wash your armpits.

Blow your nose in your hands and let the water rinse them off.

Fart and laugh at how loud it sounds in the shower.

Spend majority of time washing privates and surrounding area.

Wash your bum, leaving those coarse bum hairs stuck on the soap.

Wash your hair.

Make a Shampoo Mohawk.

Wee.

Rinse off and get out of shower.

Fail to notice water on floor because curtain was hanging out of bath the whole time.

Admire willy size in mirror again.

Leave shower curtain open, wet mat on floor, light and fan on.

Return to bedroom with towel around waist. If you pass wife, pull off towel, shake Willy at her and make the woo-woo sound again.

Throw wet towel on bed.

Am I right, ladies, or am I right?!


Оригинал статьи находится на нашем сайте, в разделе Languages::English for beginners.


Автор: RXL.

Дата написания: 4.08.2009.

Права на статью принадлежат автору и Клубу программистов «Весельчак У».


Содержание.



Предисловие.


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


Встроенные возможности MySQL.


В документации по MySQL есть немало функций работы с датой и временем. Рассмотрим возможности, касающиеся трансформации. Часть возможностей существуют в MySQL давно, а часть появилась в версиях 4.1.1 и 5.0.1.

Все встроенные функции трансформации даты не работают с неполными датами, когда месяц или день равны нулю и возвращают NULL. Неполные даты выглядят так:

Код:
'2009-00-00'
'2009-00-31'
'2009-07-00'

Функция DATE_ADD().


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

Подробнее об этом можно прочесть в MySQL Reference Manual. Некоторые возможности, такие как интервалы в кварталах и в неделях, появились в MySQL 5.0.1.


Арифметика интервалов.


Чуть гибче вычислять смещение даты можно, если использовать арифметику интервалов:

Код:
date + INTERVAL expr unit
date - INTERVAL expr unit

Эта форма позволяет строить составные выражения. Например:

Код:
NOW() - INTERVAL 1 MONTH + INTERVAL 3 HOUR

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

Код:
mysql> SELECT '2009-07-31' - INTERVAL 1 MONTH;
+---------------------------------+
| '2009-07-31' - INTERVAL 1 MONTH |
+---------------------------------+
| 2009-06-30                      |
+---------------------------------+
1 row in set (0.00 sec)

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

Код:
mysql> SELECT '2009-07-31' - INTERVAL 1 DAY - INTERVAL 1 MONTH;
+--------------------------------------------------+
| '2009-07-31' - INTERVAL 1 DAY - INTERVAL 1 MONTH |
+--------------------------------------------------+
| 2009-06-30                                       |
+--------------------------------------------------+
1 row in set (0.00 sec)

Код:
mysql> SELECT '2009-07-31' - INTERVAL 1 MONTH - INTERVAL 1 DAY;
+--------------------------------------------------+
| '2009-07-31' - INTERVAL 1 MONTH - INTERVAL 1 DAY |
+--------------------------------------------------+
| 2009-06-29                                       |
+--------------------------------------------------+
1 row in set (0.00 sec)

Функция LAST_DAY().


Очень полезная функция, вычисляющая последний день месяца. Функция появилась в версии 4.1.1. Она позволяет получить не только последний день месяца по указанной дате, но и вычислить первый день:

Код:
LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH

Запись с множеством INTERVAL выглядит громоздко. Если она появляется в SQL-операторе один раз — не страшно, но если приходится использовать подобное выражение в операторе несколько раз, то легко запутаться.


Исправляем и расширяем сами.


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


Первый день месяца.


Стандартный прием программирования — убрать громоздкое и многократно повторяющееся выражение в функцию.

Код:
CREATE FUNCTION BEGIN_OF_MONTH(
  p_date DATE
)
  RETURNS DATE
  DETERMINISTIC
  CONTAINS SQL
  SQL SECURITY INVOKER
RETURN LAST_DAY(p_date) + INTERVAL 1 DAY - INTERVAL 1 MONTH;

Вроде как, стало проще, компактнее и понятнее:

Код:
mysql> SELECT BEGIN_OF_MONTH('2009-07-31');
+------------------------------+
| BEGIN_OF_MONTH('2009-07-31') |
+------------------------------+
| 2009-07-01                   |
+------------------------------+
1 row in set (0.00 sec)

Честно говоря, не понимаю, зачем нужно было сокращать LAST_DAY_OF_MONTH() до LAST_DAY() — это не очевидно. Я бы вообще назвал это END_OF_MONTH()— и понятно, и не длинно.

Код:
CREATE FUNCTION END_OF_MONTH(
  p_date DATE
)
  RETURNS DATE
  DETERMINISTIC
  CONTAINS SQL
  SQL SECURITY INVOKER
RETURN LAST_DAY(p_date);

Первый и последний день года, квартала или недели.


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

...


Прочитать статью целиком можно на нашем сайте, в разделе Базы данных::MySQL.


А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное