Павел Новицкий

Возможности в кризис

16 января 2015, 12:28

Бахнул кризис и в ленту понеслись экспертные мнения: «время рисковать», «новые начинания», «не отказываться от возможностей». Скажите, а в спокойное время никак нельзя начать новый проект, найти возможность и рискнуть? Или вместе с началом кризиса какой-то добрый дяденька отжимает рычаг «дать возможности»?

Возможности есть всегда и вовсе не обязательно ждать кризисных лет. Идея об исключительности наступившего периода сильно преувеличина, а местами ещё и порочна. Если клиенты Васи перешли к Пете, то это не потому что Петя резко улучшил качество предоставляемых услуг, а Вася решил переждать. Возможность, которой грех не воспользоваться. Но, подобная возможность всего лишь позволяет занять пустой рынок без изменений самих процессов. Что-то похожее происходило в байнете после временного прикрытия каталога и «барахолки» от onliner.by и взлёта 1k.by. Кто окажется в итоге окажется в выйгрыше — не знаю, но точно не клиенты.

Конечно, в смутные времена стараются сокращать затраты, оптимизировать процессы и повышать производительность. А зачем дожидаться проблем чтобы что-то изменить? Всё, что можно сделать в плохие времена, можно было делать и в хорошие. Причём, меньшими затратами.

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

Riding a dead horse

15 января 2015, 16:27

The tribal wisdom of the Dakota Indians, passed on from generation to generation, says that when you discover that you are riding a dead horse, the best strategy is to dismount.

In modern education, government and software development a whole range of far more advanced strategies are often employed, such as:

  1. Buying a stronger whip.
  2. Changing riders.
  3. Threatening the horse with termination.
  4. Appointing a committee to study the horse.
  5. Visiting other sites to see how others ride dead horses.
  6. Lowering the standards so that dead horses can be included.
  7. Re-classifying the dead horse as «living, impaired».
  8. Hiring outside contractors to ride the dead horse.
  9. Harnessing several dead horses together to increase the speed.
  10. Attempting to mount multiple dead horses in hopes that one of them will spring to life.
  11. Providing additional funding and/or training to increase the dead horse’s performance.
  12. Doing a productivity study to see if lighter riders would improve the dead horse’s performance.
  13. Declaring that as the dead horse does not have to be fed, it is less costly, carries lower overhead, and therefore contributes substantially more to the bottom line of the economy than do some other horses.
  14. Re-writing the expected performance requirements for all horses.
  15. Promoting the dead horse to a supervisory position.

автор потерян за грудой репостов в интернете

Пришло время признать — лошадь мертва. Пора двигаться дальше.

Пост сообщений об ошибках

13 января 2015, 14:46

Ошибки надо обрабатывать и предоставлять пользователю в удобоваримом виде. Особенно, при создании API. Точка.

Буду здесь собирать вывод необработанных ошибок различных сервисов. Просто чтоб было.

Cannot convert BYR to Currency (www.webservicex.net):

System.ArgumentException: Cannot convert BYR to Currency.
Parameter name: type ---> System.ArgumentException: Requested value 'BYR' was not found.
   at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
   at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
   at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.UrlParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

Сomposer

12 января 2015, 18:35

Композер классный. Проверка зависимостей и системных требований стала проще. Установка пакетов проходит с ним на ура. Модульность проекта поддерживается отлично. Головной боли для разработчика с подключением библиотек уменьшилось. Проект разворачивается одной строчкой.

И вот за всё это мне Композер не нравится.

Инстумент, удобный для разработчика, насильно впаривается конечному пользователю. Множество оупенсорсных проектов сейчас используют, или переходят на использования Композера. Причём, указывают его в качестве единственно возможного средства установки. Здесь я уже говорю не о либах и фрэймворках, а о полноценных CMS и иже с ними.

Пример: на одном из наших дев-серверов стоит уже достаточно старенькое ПО. На данный момент обновить его без бубна и долгих камланий не получится. Почему — вопрос достойный отдельного разговора. Но работатет, задачи решает и ладно. И хочу я поставить на этот самый сервер через Композер очередную приблуду — побаловаться. Хочу, а не могу — одна из либ подгружает свои зависимости, а там, в свою очерездь, прописаны минимальные требования к системной библиотеке. И, как на зло, библиотека установлена более ранней версии, а обновить, как говорил уже, нельзя. Всё, приехали — кина не будет.

Да, я знаю про composer install --ignore-platform-reqs, этот флаг решает проблему. Альтернативный вариант — установка в контейнере с последними версиями всего ПО и банальный аплоад на сервер.

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

Отсюда вопрос — зачем тогда нужны эти самые минимальные требования? Или они на самом деле не минимальные, а использующиеся у разработчика? В любом случае, полезная фича Композера теряет свой смысл.

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

Можете использовать у себя Композер, автоматические тесты, Бехат, Трэвис, играйте себе в DevOps сколько угодно — я за обеими руками. Но, когда я хочу скачать конечный продукт — сделайте все необходимые процессы у себя в фоне, а мне дайте готовый архив. Не заставляйте меня думать над вашими багами — мне и своих хватает.

Постновогоднее

6 января 2015, 13:38

Начиная с 29 декабря и вплоть до 3 января продавцы здоровались и улыбались. Было странно и страшно. Дальше все снова стали привычно хмурыми.

Огромная тележка тостового хлеба, две мандаринки и кекс — вполне реальная картина для 31 числа.

Новогодние представления и утренники всё дальше задвигают сюжет в угол и налегают на танцы и песни. В ближайшие годы ждём утренник-оперетту, арию Кощея и адажио Яги.

В нашенские хлопушки недосыпают конфетти. Зато, бенгальские огни стали делать длиннее.

В 9 часов утра мужичок в приличном костюме с букетом цветов идёт по пустой улице и матерится во весь голос.

В очереди стоят студенты с ящиком пива, две пожилые женщины с четвертинкой хлеба и кусочком сыра, необъёмный гражданин с тремя литрами виски.

Работники метрополитена бережно укладывают пьяных на лавочки, а не выпихивают на улицу.

Деда Мороза не существует.

Удаление блока купонов со страницы корзины в Magento

17 октября 2014, 1:03

Итак, двигаемся по намеченному плану.

Мне сложно придумать адекватный случай, когда может понадобиться избавляться от функционала скидок и подарочных купонов. Наверно, только 1 вариант — B2B сайт с заложенной логикой оптовых закупок. Странных вариантов больше — от админ не понимает как работают программы лояльности, до дизайнер забыл нарисовать.

Но, считаем что так нужно и либо убираем конкретно эту фичу, либо камень на шею и в воду. Так что к делу.

Сам блок купонов вводится в checkout.xml, нода checkout_cart_index:

<block 
    type="checkout/cart_coupon" 
    name="checkout.cart.coupon" 
    as="coupon" 
    template="checkout/cart/coupon.phtml"
/>

Во-первых, не надо ничего удалять в шаблонах или лэйаутах. Видите где-нибудь совет вида «найти строку и удалить» — в 90% случаев проходите мимо. Такое нам не подходит. В дальнейшем, разбираясь в сделанных изменениях, никто за такое спасибо не скажет.

Редактируем local.xml в теме (ну, или создаём файл, если его до сих пор нет) и для checkout_cart_index в блоке checkout.cart добавляем директиву на удаление блока checkout.cart.coupon.

<?xml version="1.0" encoding="UTF-8" ?>
<layout>
    <checkout_cart_index>
        <reference name="checkout.cart">
            <remove name="checkout.cart.coupon"/>
        </reference>
    </checkout_cart_index>
</layout>

Обновляем кэш, всё.

Время собирать камни

14 октября 2014, 1:47

Уже больше года что-то здесь вяло пописываю. Пришло время время подбить какую-то статистику.

Сайту 470 дней, 27 записей, т.е. 1 пост каждые 17,4 дней — вот такой я ленивый :-) Люди книги быстрее пишут. И 2 комментария ещё, да. Успех, я считаю. Захлопываем крышку ноута и уходим...

А потом залез-таки в аналитику. Больше года прошло, какая-никакая статистика собралась. Посмотрел и малость хм... удивился — ежедневно с яндекса приходит по 30-40 человек. В запросах определились 2 лидера — разные вариации на тему «что значит дьявол кроется в деталях?» и «как что-нибудь там сделать с купонами в Magento».

Я так понимаю, как-то весь трафик привлекают старые «Дьявол кроется в деталях» и «Отчёт о купонах в Magento».

С дьяволом пока ничего сделать не получится — не хочется пока писать пространный текст с цитатами, аллюзиями и метафорами (я ж ленивый, не забываем). А разобраться что конткретно там искали про купоны достаточно легко и не напряжно. Так что на горизонте понятно какие статьи, разбавленные всякой дребеденью.

Ещё один интересный момент — RSS. Открытия в ридерах радуют — 35-50 на статью. А вот GA и Метрика расходятся в показаниях переходов из ридеров 15 против 12 на статью (да, я и ga, и метрику установил поиграться).

Кстати, надо будет позже проверить не перебьёт ли эта заметка по количеству упоминаний дьявола прошлую (алярм! SEO-зараза на горизонте!).

← Раньше Позже →
© 2013-2017