Below is the text of the page https://livedev.org/articles/page/1 stored 2008-06-09 by archive.org.ua. The original page over time could change. View as original html

Older posts, page 1 : Веб-разработка «по-русски» | livedev.org

livedev.org [http://livedev.org] Веб-разработка «по-русски» Линкотека №3. «Как ляжет карта». 3 Posted by dobrych Thu, 22 May 2008 20:29:00 GMT Как я вчера обещал, начинаю активнее добавлять контент :-) Третий выпуск «Линкотеки» посвящен картографии и Google maps в частности. К слову, тема вообще очень интересная и популярная. Я, честно говоря, недооценивал ее увлекательность и предлагаемые возможности, пока не столкнулся с ней в одном их своих новых проектов. В блогах все чаще можно услышать новомодную фразу гео-тегирование , а на разных социальных сервисах все чаще предлагают привязать какую-то виртуальную информацию к географическим координатам. Так что будте готовы наваять свой код, когда столкнетесь с необходимостью работать с гео-данными. Mapstraction — JavaScript библиотека для работы с многими картографическими сервисами через единый API. Modest Maps — Библиотека для работы с картографическими сервисами на ActionScript (v2 / v3) и Python . cfis — Блог Charlie Savage, разработчика GIS систем. Много информации общего характера для понимания тонкостей картографического софта, плюс примеры кода . Google maps. Snap to Polyline (example) — Пример JavaScript кода для привязки курсора к полигонам и полилиниям в Google maps. Google maps. Resizable Polygons (example) — Пример JavaScript кода для создания полигонов с возможностью ресайзинга в Google maps. Take Control of Your Maps — Отличный обзор картографического (GIS) софта для построения веб-приложений от «A List Apart». jMaps jQuery plugin — Плагин к jQuery для базовой работы с Google maps. GeoDjango — Отдельная ветка django , отлично заточенная на работу с гео-данными (GIS). Фич очень много, советую хотя бы ради интереса ознакомится. Главным я считаю полную интеграция с PostgreSQL PostGIS на уровне ORM. django-geo — В отличии от GeoDjango, облегченный вариант для интеграции гео-данных в ваш django-проект. На этом, пожалуй остановлюсь. Если тема GIS и работы с гео-данными интересна, дайте знать. Если нет, то я не буду закидывать вас неинтересным контентом. Просто есть мысли в следующих постах привести некоторые куски кода по теме с объяснениями. Posted in заметки Tags ActionScript , API , django , example , GIS , google , javascript , maps Meta 3 comments , permalink , rss , atom Есть ли жизнь на Марсе? 2 Posted by dobrych Tue, 20 May 2008 22:56:00 GMT Привет, уважаемый читатель! Я уже месяц как не обновлял свой блог, но это совсем не значит, что « жизни на Марсе нет ». :-) За этот месяц в реальной жизни у меня случилось несколько важных изменений, благодаря которым я отложил свои «виртуальные» дела на некоторое время. Итак: поменял работу; отметил свой «четвертак» (25-летие); решил некоторые личные накопившиеся вопросы. Теперь маленький анонс: В связи с новой работой и новыми задачами, расширяю свой технически-профессиональный кругозор; теперь кроме python и django, второй основной темой моих постов будет frontend-разработка (в частности JavaScript , Adobe AIR и может Flex). Накопилось много интересных ссылок, так что обязательно в скором — Линкотека . В одном из проектов мы используем Google Maps, поэтому скорее всего будут заметки и про картографию . И конечно более подробно напишу о моем завершившемся проекте и о новых двух. Так что, как говорят «там» — stay tuned ! :-) Posted in заметки Tags life Meta 2 comments , permalink , rss , atom Google App Engine или империя зла наступает 7 Posted by dobrych Tue, 08 Apr 2008 09:33:00 GMT Свежая новость про новый сервис от Гугла. Я не удивлен — Гугл предлагает хостинг приложений. Вполне логичное развитие. Я в принципе давно этого ждал. Что хорошего и что плохого? Много писать не буду. Хорошее — мощнейшая инфраструктура для хостинга и конечно поддержка приложений на Python ;-) Плохое — такими темпами скоро «Интернет» == «Google». Я имею довольно приличный опыт в телекоме и хорошо понимаю, что бояться нужно совсем не того что Google индексирует все на свете и типа приватности скоро кирдык. А бояться нужно того, что Гугл сосредоточит большое кол-во интернет-траффика на себе и в результате сможет диктовать свои условия провайдерам. И скорее всего мы получим большое кол-во шаровых вещей в обмен на бесконечный поток контекстной рекламы... Так обычно Гугл и делает. Но не будем о грустном, время покажет. Подробнее смотрите на страницах Гугла: Google App Engine - Google Code Google App Engine Blog: Introducing Google App Engine + our new blog Running Django on Google App Engine - Google App Engine - Google Code Posted in обзоры Tags google , hosting , python , web Meta 7 comments , permalink , rss , atom Еще немного про php 20 Posted by dobrych Sat, 05 Apr 2008 17:18:00 GMT Тему я зацепил острую, так что будем наяривать дальше :-). Не думайте, что тематика блога сменится на php vs * . Нет, скажу пару мыслей и дам несколько ссылок. Думаю на ближайшее будующее этого хватит. Итак, читайте пост Николая про субъективные причины выбора языка Python для веб-разработки — Блог компании SmartWeb: Почему Python (Муки выбора) . Коменты пестрят конечно, но обратите внимание, что ребята целой командой писали до этого на Java, а не на php. Советую послушать подкаст Димы Честных — Python против PHP . С юмором и по теме. И немного наблюдений от себя. Последнии пару недель я получил достаточно много разного фидбека по теме корявости php. Так что получилась некоторая закономерность в общении. Итак, немного фактов. Примерно 50% утверждавших, что php «рулит», не знают никакого другого языка программирования. Около 20% счастливы от самого факта перехода с enterprise (Java, .NET) технологии на динамический язык (php) и пока не осознали, что его им мало. Около 25-30% процентов считают отсутствие поддержки python или ruby хостинг-провайдерами причиной для торможения личного развития, как программиста. Больше половины писавших на каком-то другом языке программирования перед php, долго на php не задерживаются. И в довесок хочу дать ссылку на хорошую новую документацию, точнее даже набор примеров работы на python с мелкими задачами — Python-by-example . Оглавление разбито по python-модулям. Ну и конечно, если кто-то решил ознакомиться с python или собирается начать писать что-то на нем, и при этом не знает с чего начать, могу посоветовать книгу В глубь языка Python . Я в свое время начал с придуманной мной самим задачи и официальной документации :-) Posted in заметки Tags php , python Meta 20 comments , permalink , rss , atom UAWEB 2008. Моя презентация к докладу + фото. 5 Posted by dobrych Fri, 28 Mar 2008 18:26:00 GMT Спасибо всем, кто подошел ко мне познакомиться/пообщаться, было очень интересно. Все пропустившие ждите видео с докладами... Пока что не готов ничего написать толкового про саму конференцию, сделаю это позже. Но впечатления однозначно позитивные! Материал моего выступления смотрите в pdf и в Flash . Updated: сегодня обработал фото, выбрал получше которые и залил. Кому будут нужны версии с бОльшим разрешением — пишите в комментах имя файла, я вышлю. Архив zip 12 Мб Posted in заметки Tags 2008 , conference , photo , uaweb Meta 5 comments , permalink , rss , atom UAWEB 2008 5 Posted by dobrych Wed, 26 Mar 2008 22:13:00 GMT Я буду говорить про django в пятницу 28-ого на конференции UAWEB-2008. Хотелось бы завести новые знакомства. Мое фото справа в сайдбаре. Подходите — буду рад пообщаться! Постараюсь писать с конференции по мере возможности. И выкладывать фото. После выходных попробую сделать отчет. Update: Смотрите фото, залил несколько на фламбер — UAWEB 2008 . Буду по мере обработки докладывать. Posted in заметки Tags 2008 , conference , photo , uaweb Meta 5 comments , permalink , rss , atom Подкаст о веб-разработке 36 Posted by dobrych Tue, 25 Mar 2008 22:29:00 GMT Сегодня важное событие у меня. Я наконец-то смог выродить подкаст о веб-разработке, который планировал оч давно записать. Даже не только планировал, но и пробывал. Итак, это моя третья попытка — более-менее удачная. Не могу сказать что я на 100% доволен результатом, но как говориться «первый блин можно и простить» :-) Для меня намного важнее узнать ваше мнение, уважаемые читатели! На сколько вам был бы полезен вообще подкаст о веб-разработке. И о каких темах вы бы хотели услышать выпуски в будующем. Любые ваши комментарии (желательно конструктивные) будут мотивировать меня для дальнейшей записи. А так как я не диктор и не работал никогда на радио, дается мне сие записывание нелегко... Так что хотелось бы знать интересно ли будет что-то подобное для вас. Жду фидбека, а пока качайте 10 минутное mp3 весом в 14Мб :-) Отдельный фид для подкаста скоро будет. Update : сделал еще копию подкаста с битрейтом 128 на 10Мб Posted in podcast Tags development , django , php , podcast , python , rails , ruby , web Meta 36 comments , permalink , rss , atom Две модели в newforms 10 Posted by dobrych Mon, 17 Mar 2008 00:37:00 GMT На днях нужно было за короткое время решить одну несложную и довольно типичную задачу на django — построение формы профайла пользователя. Я не стал искать в закладках ссылки на старые известные how-to от мэтров-джангистов :-), а попробовал посмотреть что же нового и интересного у нас имеется в последней версии django (trunk). Итак, модель была приготовлена заранее, вопрос больше касался построения формы (через newforms ) пользовательского профайла. Итак, модель. class UserProfile(models.Model): user = models.ForeignKey(User, verbose_name=_('user'), unique=True, related_name="profile") country = models.ForeignKey(Country, verbose_name=_('country'), blank=True, null=True) city = models.CharField(verbose_name=_('city'), max_length=30, blank=True, null=True) post_zip = models.CharField(verbose_name=_('post zip'), max_length=10, blank=True) address = models.CharField(verbose_name=_('address'), max_length=250, blank=True) Обратите внимание, что профайл ссылается на модель User с unique=True . Это в принципе самый простой и работающий вариант расширения модели пользователя в django. Можно смело использовать для объекта User метод profile.get() . Например: from django.contrib.auth.models import User u = User.objects.get(username='test') profile = u.profile.get() Теперь для моделей User и UserProfile необходимо построить единую форму. Для каждой отдельной модели сделать это не проблема. А вот сделать «два в одном» не так просто. Итак, по порядку: Новенькое — широко используемые функции form_for_model и form_for_instance оказывается уже не актуальны. Они работают, но есть более новый и интересный метод получения формы для модели — ModelForm . В отличии от форм полученных через form_for_model и form_for_instance , формы от ModelForm можно наследовать (а вот это очень интересно в нашем случае!!!). Поэтому, как только эти два пункта появились в моей голове, я сразу же открыл Python-консоль и начал экспериментировать с кодом. Не уверен на 100%, что мое решение максимально красивое, но тем не менее оно вполне простое и аккуратное (особенно если учесть, что времени на «подумать» особо не было)... Итак кусочек моего forms.py ниже. from django.newforms.models import ModelForm from django.contrib.auth.models import User from django import newforms as forms from profile.models import UserProfile class ProfileForm(ModelForm): class Meta: model = UserProfile fields=('country', 'city', 'post_zip', 'address') class ProfileFormFull(ProfileForm): def __init__(self, *args, **kwargs): super(ProfileFormFull, self).__init__(*args, **kwargs) self.fields['first_name'] = User._meta.get_field('first_name').formfield() self.fields['last_name'] = User._meta.get_field('last_name').formfield() def save_user_data(self): if self.instance: user = self.instance.user user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] return user.save() else: raise instance.DoesNotExist Теперь мои комментарии к коду (что я делаю): Создаю форму ProfileForm из моей модели UserProfile . Наследую от ProfileForm новую форму ProfileFormFull , которую буду расширять для возможности редактирования двух моделей (User и UserProfile) в одной форме. Суть расширения в добавлении двух полей из модели User ( first_name и last_name ) и метода save_user_data который эти поля сохраняет в модель User. Остальные поля из модели UserProfile обрабатываются автоматически созданным методом save . При сохранении формы нужно вызывать два метода — save и save_user_data . Я специально оставил эту возможность для моего случая. Но вы можете сделать сохранение save_user_data внутри save , расширив его. Как выглядит код, который работает с этой формой: @login_required @render_to('profile/main.html') def profile_save(request): if request.method == 'GET': return HttpResponseRedirect(reverse('profile.views.profile_page')) profile, created = UserProfile.objects.get_or_create(user=request.user) form = ProfileFormFull(data=request.POST, instance=profile) if form.is_valid(): form.save() form.save_user_data() request.user.message_set.create(message="Your profile details saved.") return HttpResponseRedirect(reverse('profile.views.profile_page')) else: return {'profile': profile, 'profile_form': form, 'user': request.user} На этом пожалуй откланиваюсь. Был бы очень рад любым конструктивным замечаниям и вопросам в комментариях. Хотелось бы унифицировать кусок кода с формой (forms.py) и может вынести в отдельный сниппет . PS: обязательно почитайте документацию по ModelForm , интересно :-) Posted in статьи Tags code , django , how , ModelForm , newforms , profile , to , user Meta 10 comments , permalink , rss , atom Пять инструментов 7 Posted by dobrych Tue, 04 Mar 2008 15:48:00 GMT Долго не мог принять эстфаету от Ивана — 5 инструментов хе-хе. Загруз был последнее время, но буду исправляться. Написал свой скупой список из пяти наиболее используемых инструментов в работе. Кого что-то заинтересует более подробно — спросите в комментариях, с удовольствием расскажу. MacBookPro — это действительно инструмент, такой как рубанок, дрель или лопата :-) Отличное устройство, я использую его мощь на полную катушку. Не буду особо распыляться как все круто, т.к. пиара маков в сети куча и без меня... Из софта — TextMate . Это мега-удобный редактор. Программирую и пишу статьи в нем. Шелл (shell) или терминал или командная строка — это то, что позволяет мне работать с файлами и процессами на компе эффективно. Firebug — наше все для дебага javascript/ajax и css. Зеленый чай с лимоном (особенно в холодное время года). Горячее меня бодрит и заставляет мозги думать лучше, плюс кофеин и витамин C из лимона поднимают тонус. Posted in заметки Tags development , five , tools , web Meta 7 comments , permalink , rss , atom Линкотека №2 8 Posted by dobrych Tue, 26 Feb 2008 07:04:00 GMT Готова вторая подборка интересных ссылок с моими комментариями. Google GData Authentication decorator — пример кода для работы с документами google на python (удобный декоратор). Control Suite : High Quality Controls & Widgets for Prototype — интересный набор контролов и виджетов для javascript библиотеки Prototype. FastInit: a faster window.onload — готвый javascript код (кроссбраузерный) для убыстренной инициализации и вызова js-скриптов. Очень удобно использовать вместо window.onload. Cross-Fade Anything — еще одна javascript библиотека для создания слайд-шоу эффекта в Prototype. Ext JS - JavaScript Library — очередной javascript тулкит для создания rich ui. Особенность в том, что он позволяет строить оконные интерфейсы aka browser OS. LightWindow — реинкарнация популярного Lightbox JS . Позволяет делать js popup с любым контентом, в отличии от lightbox, который позволяет делать popup только картинки. PS: если вы использовали что-то из указанного в ссылках — поделитесь, пожалуйста. Думаю многим будет интересно узнать чужое мнение. Posted in заметки Tags google , javascript , library , link , prototype , python , ui , widget Meta 8 comments , permalink , rss , atom Older posts: 1 2 3 ... 6 Searching... О блоге Мысли, идеи, задачи и решения по веб-разработке. Взгляд с персональной позиции автора. Об авторе Зовут меня Илья. В рабочее время занимаюсь веб-разработкой. Интересуюсь новыми и модными веб-технологиями. Нерабочее время посвещаю семье, по возможности фотографии и музыке . Подробнее. Tags 2008 ajax conference css development django downshifting exception javascript kiev life python rails ruby syntax typo uaweb update web xml Блогролл Amazon byteflow Маниакальный Веблог Подробно Appleworms Андрей Ясинецкий Собираю блогролл Свежие комментарии by krovati-gostinichnye on Мультисайтовость в django trunk by mybryco on Линкотека №2 by krovati-gostinichnye on Мультисайтовость в django trunk by farinaska on Не изобретая велосипед by semicon on Линкотека №2 Archives May 2008 (2) April 2008 (2) March 2008 (5) February 2008 (2) January 2008 (4) December 2007 (2) November 2007 (2) October 2007 (3) September 2007 (2) August 2007 (4) June 2007 (1) May 2007 (1) April 2007 (3) February 2007 (1) January 2007 (3) December 2006 (4) November 2006 (4) October 2006 (4) September 2006 (3) del.icio.us/dobrych/webdev Design Stencils - Yahoo! Design Pattern Library Набор wireframe для созданию web ui прототипов от Yahoo Natural Docs Софт для генерации документации из кода. Юзабельная дока получается js-ria-tools - Google Code Набор утилит для оптимизации и тестирования JavaScript, возможность минимизации файлов JS mapfish Готовое приложение (клиент и сервер) для работы с гео-данным. Построено на базе Pylons и ExtJS/Openlayers Resizable Polygons Пример создания полигонов с возможностью ресайзинга на Google maps (javascript) Python Package Index : virtualenv 1.0 Скрипт для создания варитуального окружения (модули итп) для Python-приложений Google Maps JavaScript API Example - Snap to Polyline Пример кода для привязки курсора к полигонам и полилиниям Take Control of Your Maps (A List Apart Article) Отличный обзор картографического (GIS) софта для построения веб-приложений Mapstraction - a javascript library to hide differences between mapping APIs. Библиотека JS для работы с многими картографическими сервисами через единый API Modest Maps Библиотека для ActionScript (2/3) и Python для работы с картографическими сервисами Плюшки © livedev.org / powered by typo / styled with clerkly