Проблемы с обновлением ubuntu

Недавно на kubuntu 14.10 столкнулся с проблемой при обновлении

Ош http://by.archive.ubuntu.com utopic-backports/main Sources
404 Not Found
Ош http://by.archive.ubuntu.com utopic-backports/restricted Sources
404 Not Found
Ош http://by.archive.ubuntu.com utopic-backports/universe Sources
404 Not Found
Ош http://by.archive.ubuntu.com utopic-backports/multiverse Sources
404 Not Found
Ош http://by.archive.ubuntu.com utopic-backports/main i386 Packages
404 Not Found
Ош http://by.archive.ubuntu.com utopic-backports/universe i386 Packages
404 Not Found
Ош http://by.archive.ubuntu.com utopic-backports/multiverse i386 Packages
404 Not Found
В кэше http://by.archive.ubuntu.com utopic-backports/main Translation-en
В кэше http://by.archive.ubuntu.com utopic/restricted Translation-ru

Долго не мог найти решение, но всё же нарыл в очередной заход

sudo -i
apt-get clean
cd /var/lib/apt
mv lists lists.old
mkdir -p lists/partial
apt-get clean
apt-get update

Спасибо автору коммента Mete.

Continuous Integration, delivery, deployment

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

Сидит программист, пишет свой код, думает о пиве и здесь появляется другой программист, с ним тестировщик и, прости Господи, проектный менеджер. Здесь уже не до пива, код больше нельзя править на сервере через удалённый доступ. Приходится разворачивать git, лепить ветки, создавать билды и гонять тесты и в дело вступает супергерой Continuous. Последнее время принято мешать три шага Continuous в одну кучу, хотя эти шаги сильно отличаются по целям и подходам. Эти шаги — Continuous Integration, Continuous Delivery и Continuous Deployment.CI_part1_cover_optima Continue reading

Модули в angularjs

Поговорим о повторно используемом коде. Чтобы код повторно использовать его нужно оформлять особым способом и выносить в пакеты. Сейчас все нормальные фреймворки в разных языках программирования имеют поддержку пакетов и пакетные менеджеры для управления ими, а так же для решения проблем с версиями и зависимостями. В javascript для управления пакетами применяется bower. Теперь же рассмотрим как писать код, чтобы его можно было внедрять в проекты, в качестве препарируемого будет angularjs.

Angularjs поддерживает модули, будем использовать именно их. Для примера можно разворатить пару готовых, я же постараюсь описать найденное мною. Модуль является контейнер в который мы можем складывать константы, переменные, контроллеры, сервисы и т.д., далее мы просто подключаем js файл и при создании модуля приложений добавляем свой модуль в зависимости. Continue reading

Итоги 2014

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

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

Рабочее место программистаА вот за код мне стыдно, он становится всё более пахнущим, работа в команде и бизнес требования уводят всё дальше от мечты перфекциониста. Помимо веб проектов поучавствовал в разработке приложения для телевизионной приставки и магазинного терминала, php и javascript открывают все больше граней и сфер применения, что не может не радовать. Осваиваю разработку под windows phone, С# отличный язык, но WinJS всё же привычнее.
С наступающим Новым годом! Желаю всем отличных проектов, чтобы о коде и паттернах думалось меньше, чем об отдыхе, пейте пиво, играйте в футбол, любите жизнь.

С Новым годом!

Continuous integration с Jenkins

Continuous integration или непрерывная интеграция — это практика создания  автоматизированной сборки проекта. Хотя это и звучит как-то заковыристо, но это то, что программист делает ежедневно. Мы пишем код и проверяем его на синтаксические ошибки, на соответствие стилю кодирования, прогоняем тесты, боремся с copy-past и тд. и т.п. В PHP существует масса инструментов. позволяющих это автоматизировать, в PEAR есть пакет phpqatools, который ставит сразу пачку таких утилит. Но прогонять их руками неудобно, к тому же хочется иметь какой-то графический интерфейс, чтобы просматривать отчёты, чтобы наблюдать как изменяется проект, иметь возможность смотреть на старые версии и т.д. Здесь на помощь приходит Jenkins. Continue reading

ORDER BY FIELD в Laravel

Есть замечательная SQL конструкция, позволяющая задавать свой порядок сортировки для ORDER BY. Сегодня мне понадобилось использовать ORDER BY FIELD(priority, 2,1,3), ситуация осложнялась тем, что используется ORM от Laravel и его Query Builder экранирует то. что передано через ->orderBy. Решение же оказалось очень простым, нужно использовать raw

\Model::orderBy( \DB::raw('FIELD(status, 2, 1, 3)') );

Laravel-4

Последнее время меня пугают некоторые тенденции для библиотек в PHP, вместо простого и быстрой разработки мы получаем JAVA. Сейчас много php фреймворков и я их делю на две основные категории:

1. Монстры с большой гибкостью и возможностью менять любой компонент. Они отлично подходят для кровавого энтерпрайза. В этой категории два лидера Symfony 2 и Zend Framework 2, хотя последний у меня вызывает скепсис, слишком уж сырой он появился на свет.

2. Фреймворки для быстрой разработки, они менее архитектурно красивы, зато не требуют писать такую кучу кода. Среди них следует отметить широко известные Yii и Kohana.

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

Я же решил рассказать о Laravel, буквально вчера появилась 4-я версия этого прекрасного фреймворка из категории 2. О нём пока мало известно, хотя 3-я версия была очень хороша и имела систему бандлов. Чего в полной мере не было у конкурентов. Continue reading

Шаблон для PHP приложений

В очередной раз увидел чей-то велосипед и решил — с меня хватит. Сейчас в мире php наступила пора стандартизации и этим нужно пользоваться, хватит лепить приложения как попало. Сел, создал репозиторий  на github и заполнил его кусками из своих проектов. Все желающие могут присылать пожелания, баги, и пулл реквесты https://github.com/AmdY/php-app-skeleton. Continue reading

Паттерн Decorator

В больших проектах, особенно где ядро должно оставаться стабильным зачастую требуется изменения поведения объекта рантайм без дописывания кода в сам класс. Есть несколько вариантов, в этот раз я продемонстрирую паттерн Decorator (декоратор, wrapper, обёртка). Нам довелось активно использовать сей паттерн при разработке проета для IBM на базе Sugar CRM. В шуге заложено много гибкости, но некоторые части написаны очень очень давно и наружу торчит только Bean, который мы и декорировали чтобы добавить функционал или подменить стандартную реализацию. К сожалению, это не стало серебряной пулей и нам довелось хлебать кислые щи дырявой оловянной ложкой.Дырявая ложка Continue reading

Вкусности twig

Не могу не поделиться. На форуме phpclub.ru задавал вопрос о том, чтоб бы посмотреть по шаблонизатору Twig. И пользователь fixxxer дал замечательную подборку ссылок.

Макросы в QuickForm2
http://svn.php.net/viewvc/pear/pack…es/array-twig.tpl?revision=325495&view=markup

Вывод дерева (обезличенный продакшен код ({% url .. %} — мой кастомный тэг, вставляет вызовы UrlBuilder-а в момент компиляции)
http://pastebin.com/PdVbMM2b

Наследование: с обычным все понятноhorizontal reuse позволяет реюзать код, когда, например, встречаются 1, 2 и 3-колоночные варианты одинаковых в остальном страниц — пример с сайдбаром в доке вполне наглядный.

Человеческий эскейпинг и автоэскейпинг с понятием стратегии (в смарти — хардкод, при этом отменить экскейпинг в общем случае нельзя — есть только возможность отменить все фильтры вообще)

Человеческое консистентное апи для всего: фильтровфункцийcompile-time тэгов (где можно нормально работать, а не конвертить, как в смарти, обратно уже изговнянные приведением к кускам пхп-кода параметры). Можно легко сделать свой загрузчик — например, так я читаю из моделей пользовательские шаблоны. Внутри твига все сделано на том же API, в отличие от смарти. Легко через Environment протащить что угодно, в отличие от, опять же, смарти, где я не находил ничего лучше, чем срать в internal config properties.

Еще можно посмотреть рецепты всяких полезных штучек.