Понеділок, 8 лютого 2010 р.

Google webmaster tools - хороший инструмент!

Недавно решил разобраться почему поисковый траффик на блог составляет лишь около 10% от общего. Подключил проект к Google Webmaster Tools и - ооо ужас! Гугл считает что мой блог посвящен описанию тегов HTML :))


Думаю виной всему кривой шаблон TicTac от Blogger.com

Webmaster tools имеет и другие полезные функции, которые не даст система типа Google Analytics, например:
  • Crawl stats
  • Crawl errors
  • HTML suggestions (типа не уникальные page titles, meta descriptions)
Но особо мне понравилась информация о Site Performance:

Она указывает что именно замедляет загрузку страницы и дает конкретные цифры. Супер! Видно насколько внешний javascript или не gzip-нутый css тормозят скорость загрузки сайта.

Так что советую всем использовать этот инструмент в дополнение к Google Analytics!

Середа, 3 лютого 2010 р.

Статистика twitter по городам Украины

Провел 7-дневный сбор статистики о активных пользователях твиттера по городам Украины.
Итого за неделю в Киеве твитнуло 3.5 тыс человек, по Украине - около 5тыс.

- по моим оценкам 20% процентов активных пользователей твиттер в Украине - это всевозможные продавцы, рекламщики, корпоративные аккаунты, масс-фолловеры и т.п.
+ в статистике не учтены те кто не указывает свой location в профиле, таких тоже много
+ в данных по Украине учитывается лишь статистика по больших городах (кроме Одессы)

Понеділок, 1 лютого 2010 р.

Google Social Search работает!

Вчера, занимаясь поисковой оптимизацией сайта, наткнулся на такой результат в выдаче гугла:


Обратите внимание на:

Results from people in your social circle for бары и рестораны киева - BETA - My social circle - My social content
...
Artem Dudarev - connected via Gmail

Т.е, в результатах запроса я отдельно получаю то, что написали люди из моего Gmail контакт-листа (в данном случае Артем Дударев). Я давно удивлялся почему Google, обладая наибольшим в мире социальным графом - никак его не использует? Ведь через связи в Gmail (contacts и активность переписки) можно определять друзей, друзей-друзей и тд. И на этом уже строить поиск, т.к. информация от близких/знакомых людей более ценна. И вот - началось! Гуглу только не хватает своего Twitter-а, чтобы получить мощний источник таких социальных публикаций. Пока для этого у него есть: google reader, blogspot.com, picasa.

Кстати, Google Social Search сильно перекликается с моей системой рекомендаций Recc.info . Я делаю, по сути, такой же социальный поиск, только по публикациям в Twitter и используя социальный граф твиттера.

Интересно как social search будет развиваться дальше?
На очереди поиск по социальному графу от Facebook и Twitter?

Вівторок, 26 січня 2010 р.

Запасной вариант на случай поломки сайта

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

PicklingError: Can't pickle : it's not found as __main__.Category

Причем:
  1. В методе откуда это вылетает я сделал даже так:
    def cacheRS(rs):
    from recomm.tw import Category
    memcache.set(key=CATS, value=rs)

    + импорт стоит, как полагается, вверху файла
  2. На других версия приложения такой ошибки не наблюдается, только на default version
Вобщем, у кого есть идеи, откуда происходит такой глюк - пишите

И вот - в результате несколько посетителей вместо полезного контента увидели сообщение о неизвестной ошибке и ушли. Чтобы сгладить такие случаи в будущем я теперь всегда держу тщательно протестированную стабильную, старую версию и в случае ошибки предлагаю использовать ее. Типа так:
  1. Основная версия: http://recc.info
  2. Запасная: http://stable.latest.recsea.appspot.com
  3. Текст ошибки теперь: "Неизвестная ошибка, попробуйте перезагрузить страницу. Если не помогает - можно использовать старую версию сайта."
В будущем думаю автоматизировать редирект на запасную версию после, скажем, трех вызовов log.error. Такой себе fallback.

Пʼятниця, 22 січня 2010 р.

javascript shell обзор

Для тестирования и отладки, очень удобно выполнять куски javascript кода сами по себе, без привязки к browser-у. Также удобно играться с кодом в контексте открытой HTML страницы, исследовать DOM model, тестировать DOM API и тп.

Какие инструменты есть для этих целей?
Вот мой обзор интерактивных консолей для javascript:
  1. Rhino shell -не требует браузера, использует Rhino engine, написано на Java, можно использовать java классы в javascript. Command line console поддерживает auto-completion. Есть также Rhino debugger.
  2. JSDB - не требует браузера, использует движок Mozilla SpiderMonkey имеет command-line и web-based дебаггеры.
  3. ExecuteJS - Firefox addon, может выполнять джаваскипт в контексте открытой HTML страницы.
  4. Chrome console - отличная консолька от движка WebKit, есть подсветка и автоподстановка. Очень шустро работает.
Настройка Rhino shell:
  1. Отдельно скачайте библиотеку JLine
  2. Положите js.jar и jline.jar в одну папку и выполните:
java -cp js.jar;jline.jar
org.mozilla.javascript.tools.shell.Main

После этого можно использовать Tab для autocomplete. Детальнее тут.

Четвер, 21 січня 2010 р.

retry on appengine datastore timeout

У вас вылетает datastore db.Timeout exception? Это нормально. Может когда нибудь это и починят, но пока этим заканчивается примерно каждый 50-й datastore query.

Я в таком случае немножко time.sleep() а потом делаю retry.

То же самое и для urlfetch - ждите urlfetch.DownloadError. Решение такое же. В коде выглядит примерно так:

max_tries = 3
while max_tries > 0:
try:
#do urlfetch call here
except urlfetch.DownloadError, e:
max_tries -= 1
if max_tries > 0:
time.sleep(1)
else:
raise e

python или java на appengine?

Заметил что много людей, заходят на мой блог по поисковым запросам типа "app engine python or java". Что ж, если хотите знать мой выбор - то это python. До этого разрабатывал 5 лет на java, после поддержки ее на appengine, хотел было на нее вернуться, но оказалось что разрабатывать на python приятнее и быстрее.