среда, 28 октября 2009 г.

Django+Eclipse. Autoreload Django сервера в Debug режиме.

При работе Eclipse+Django(как начать работать было описано в статье Интелисенс Eclipse в Django проектах) я столкнулся с проблемой в том, что при изменении файла настроек приходилось перезапускать сервер для применения изменений.

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

Больше всего возмутила не сама проблема, а бестолковые ответы, это и дало неплохой стимул для поиска решений. Через 30 минут я наткнулся на одно интересное решение "How to debug django web application with autoreload.", которое было основано на возможности удаленной отладки PyDev. Комментарий добавил в форум, а сейчас хотел бы написать о полном цикле решения этой проблемы, про это и пойдет дальше речь.

суббота, 24 октября 2009 г.

Ошибка в IE: "Предполагается наличие идентификатора, строки или числа"

При написании модуля для асинхронной загрузке поста, у меня возникала ошибка javascript в IE, об этом я подробно изложил в посте Прокачка блога Blogger. Асинхронная загрузка постов. Много людей уже зашли на эту страницу в поисках решений данной проблемы, как не странно, они сразу же уходят. Скорей всего решение они просто не увидели, по этой причине напишу этот краткий пост :).

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

javascript в котором возникает ошибка
default_settings = {
older_link: "a.blog-pager-older-link", 
}


javascript в котором НЕ возникает ошибка
default_settings = {
older_link: "a.blog-pager-older-link"
}

пятница, 23 октября 2009 г.

Мифы и реальность. Повышаем производительность ActionScript3 при работе с числами

Изучая язык программирования, важно знать тонкости и недостатки. Одним из моментов, на которые необходимо обращать свое внимание, это производительность. Так как же улучшить производительность во Flex приложениях?

По данной теме можно найти массу рекомендации, как на сайте разработчиков Adobe(Flex Application Performance: Tips and Techniques for Improving Flex Server Performance), так и просто в статьях блогеров.

При изучении второго сегмента статей по производительности, у меня возникло некоторое замешательство. Например, в одном из постов приведены сравнения двух разных вариантов одной операции, первый выполнялся за 15мс, второй за 8мс, и было указано, что второй быстрее на 66%. Взглянув мельком на цифры, промелькнула мысль: "Первый выполнялся почти в 2 раза быстрее, откуда 66%?". Пересчитал, 15/8*100%-100%=87.5%, эти цифры вызвали удивление. При этом встречаются ошибки в которых значение на порядок больше, чем расчетное. Бездумные перепосты таких данных встречаются и на русском языке, что довольно таки печально :(. А если ошибки были допущены не только в вычислениях?! Дальше пойдет речь о моих экспериментах в тестировании производительности с числовыми типами данных.

суббота, 17 октября 2009 г.

Быстро и удобно. Экранирование символов.

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

При использовании плагина (про него я уже писал "Прокачка блога Blogger. Асинхронная загрузка постов."), который позволяет динамически подгружать предыдущие посты, при написании статей в мои действия добавилась одна особенность. Текст программных частей помещенных в посты, которые попадают в общую ленту блога, должен быть помещен с экранирование символов "<", ">".

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

вторник, 13 октября 2009 г.

Быстро и удобно. Hibernate Сriteria по связанным сущностям.

Hibernate как ORM очень гибкий и универсальный инструмент. При разработке на его основе испытываешь удовольствие, но как в каждом продукте есть свои неудобные моменты. Один из тех моментов, которые периодически раздражают, - это отсутствие удобного механизма по добавлению критериев по связанным объектам через Criteria API.

Рассмотрим подобную ситуацию на примере. Имеются классы Company, Address, Product, Customer связанный между собой. Данная модель может вам не нравиться, но она лишь написана для того, чтобы продемонстрировать проблему.

public class Product {
 
 public Long id;
 public String name;
 public String description;
 public Company company;
 public Set<Customer> customers = new HashSet<Customer>();

}

public class Company {

 public Long id;
 public String name;
 public Address address;
 public Set<Product> products = new HashSet<Product>();

}

public class Address {

 public Long id;
 public String name;
 public Set<Company> companies = new HashSet<Company>();

}

public class Customer {

 public Long id;
 public Set<Product> products = new HashSet<Product>();

}

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

Criteria cr = session.CreateCriteria(Customer.class);
cr.createCriteria("products").createCriteria("company").createCriteria("address").add(Restrictions.like("name", "%Москва%"));

При этом существуют некоторые ограничения. Например, если вы в переменную cr попытаетесь еще добавить критерий по описанию продукта вот таким вот образом:
cr.createCriteria("products").add(Restrictions.like("description", "вафли%"))
В результате возникнет исключение "duplicate association path" :(. А что делать, если такой критерий собирается динамически?

Так как же можно упростить добавление критерия, вызвав добавление связки только один раз "products.company.address" и при этом еще избежать дублирования при добавлении критерия "products"?

воскресенье, 11 октября 2009 г.

Тестирование Django в Eclipse

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

Вы можете писать как Doctest, так и Unit test. Подробности того, как писать тесты, какие части приложения необходимо тестировать и т.д. очень хорошо раскрыты на сайте проекта Django.

Если вас интересует как начать работать с Django+Eclipse, то прочитайте мою предыдущую статью о "Интелисенс Eclipse в Django проектах", в ней найдете описание того, что нужно сделать и какие проблемы возникают в начале работы.

И вот вы уже написали в каждом app тесты, поместив их или в файл tests.py или models.py. Что делать дальше?

воскресенье, 4 октября 2009 г.

Выключаем все эффекты jQuery

При использовании jQuery вы получаете массу анимационных эффектов. Такие анимационные эффекты при правильном использовании улучшают юзабилити и эстетику сайта, да и внедрить ее довольно легко. Но если вам необходимо использовать эту же страницу в мобильных устройствах, то эти анимационные эффекты будут "лишние". В этом случае вы можете отключить анимацию, оказывается делается это очень легко:
jQuery.fx.off = true;

$.fx.off = true;