google analytics

Monday, April 1, 2013

Devil is in the details


Сімейка блядська, заєбали в пень,
хотілося б усе в п...у пославши, 
вдвох милуватися у бані на полиці,
і віничком любовно пиздитись, 
і сьорбати чайок,
а замість того в мене розвідка, 
філін, піздабол Канаріс...
(С) Л.П., "Павлік Морозов"


"Диявол ховається в деталях" - сказано мудрою людиною, але це зовсім неочевидна річ, яку я зараз намагатимусь вам пояснити. По можливості я буду уникати термінології і сленгу, щоб було зрозуміло навіть не спеціалістам. Ця історія сталась зі мною на одному з проектів з іноземним замовником.
Отже, таск №429 не віщував нічого поганого, був оцінений складністю в один день, і після пояснення виглядав дуже простим. Потрібно написати скрипт, який простим гет-реквестом отримає дані з бази за останній місяць з бази даних у текстовому форматі, і відішле їх на список емейлів, вказаний в параметрах команди. Дані по певному лічильнику, скажімо, показник газу по всім мешканцям Галицького району м. Львова.
      І я взявся до роботи. До релізу лишалось цілих три дні, і тому я був абсолютно спокійний, що встигну все вчасно. І вирішив зробити все гнучко і універсально ! Отже, до кінця дня я написав команду, яка могла відправляти будь-яку статистику по будь-якому лічильнику на будь-які емейли. За будь-який проміжок часу. І щоб тему е-мейла можна було вказувати в командній стрічці. З відчуттям добре виконаної роботи, і власної нєв'єбєнності я залив код 80 стрічок елегантного коду на ревью, і відправився додому.

Вранці, відкривши емейл, я побачив наступне:

Ти все зробив добре, мені подобається. Лише декілька маленьких зауважень: 
  • По-перше, я хочу, щоб тема листа була не статичною, а щоб туди можна було вставляти проміжок часу, за які висилаються дані, і що саме висилається. 
  • І щоб не просто проміжок часу, а щоб юзер мав можливість вказувати формат, в якому він хоче бачити цей проміжок часу в темі листа.
  • Потім, коли це зробиш - в тебе в листі є атачмент, а його ім"я - теж статичне. Його теж потрібно зробити "гаваряшчим" - зроби так, щоб в ньому було закодовано те, що за дані він містить, і проміжок часу, дані за який в ньому присутні.
Тепер щодо задання вхідних даних. 
  • Додай, будь ласка, можливість задати проміжок часу як два цілих числа: "--start seconds_since_epoch --end seconds_since_epoch". 
  • Але разом з тим має бути можливість задати час як: "last month", "last week", "last year"
  • І заодно так: "2013-03-01 00:00:00 - 2013-03-01 23:59:59"...

Хм... наступного дня, чимало нає...вшись з реалізацією, під кінець дня я залив на ревью 290 стрічок елегантного коду, який міг:
  • приймати як вхідні дані проміжок часу у вигляді: "--start seconds_since_epoch --end seconds_since_epoch", "--start 2013-03-01 00:00:00 --end 2013-03-31 23:59:59", "--period current/last day/week/month/year"
  • вставляти в тему листа період часу в уніфікованому форматі:  "yyyy-mm-dd hh:mm:ss"
  • формувати тіло листа, включаючи туди інформацію про час генерації репорта, інформацію про вміст репорта, та знову ж таки проміжок часу, за який згенеровано репорт.
До формування імені файла атачмента я не дійшов - просто не вистачило сил, та й це не виглядало чимось критичним, що не можна допиляти в наступному релізі. Особливо з огляду на те, що першим завдянням був один дуже конкретний репорт за останній місяць на певний набір адрес, і про жодну з вказаних вимог в ньому навіть близько не йшлось. 

До релізу лишався один день...

Все ок ! Але все ж я хочу, щоб ім"я файлу атачмента було конфігурабельним ! Воно має бути таке саме як тема листа з видаленими пробілами (по дефолту), але якщо юзер хоче інакше - він має мати можливість задати формат імені файлу на мові Джанго-темплейтів ! І те саме з темою листа. Вхідні дані мають задаватись в такому вигляді:
--start seconds_since_epoch --end seconds_since_epoch ,
--start 2013-03-01 00:00:00 2013-03-20 23:49:59 - в такому випадку в тему листа треба писати "Report for Date1-Date2" (формат дат юзер повинен мати можливість вказати). Якщо ж період був вказаний як "last week", то тема листа повинна містити: "Report for the week starting ...". Якщо ж потрібен звіт за останній рік, то в темі має бути "2013 (so far)", а якщо за минулий місяць, то "Маrch 2013" ! І так далі, і тому подібне...


Я не можу описати це все. Болять руки. Болить душа. Болить спина. До релізу лишилось 4 години...

No comments: