воскресенье, 1 февраля 2015 г.

Serving static files in openshift python 2.7 container

Доброе время суток, читатель.
Сегодня решил в очередной раз попробовать работать с django ну и конечно хотелось бы иметь возможность запускать мое приложение в openshift.

вот основные файлы и то что получилось.
Требует оптимизации но работает:

основная идея в том что по умолчанию openshift использует как DocumentRoot некую папку "/" это видно из лога в момент перезапуска приложения.
remote: Application directory "/" selected as DocumentRoot

судя по всему для php ребята сделали хоть какую-то оптимизацию и теперь можно одну из нескольких директорий, как написано тут: openshift blog
для python-2.7 я не нашел подобной информации кроме того что мы можем создать директорию wsgi/static и класть файлы туда.

что бы не копировать файлы каждый раз файлы я положил их в $OPENSHIFT_DATA_DIR а в $OPENSHIFT_REPO_DIR/wsgi/ сделал симлинк

Буду признателен если кто-то преложит вариант лучше

вторник, 7 октября 2014 г.

Google App Engine CherryPy helloworld app

This is the simple app engine app. This app can be published to appengine.
To add possibility to use cherrypy download CherryPy.zip, unpack it, than pack cherrypy folder from original archive, than add packed cherrypy zip file to your project directory.

Take a look of my example, I added cherrypy.zip to path, than just import cherrypy as usual:

воскресенье, 5 октября 2014 г.

cherrypy If-Modified-Since

Пишу в большей степени что бы не забыть.

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

За это отвечает заголовок в запросе If-Modified-Since, ответом на который может быть код 304 если страница не изменилась(304 Not Modified)
Я пишу на cherrypy по этому пример будет для этого фреймворка.

Пример взят из самого cherrypy из модуля обработки статики


четверг, 2 октября 2014 г.

Cherrypy forms jquery ajax

Вот небольшой пример как использовать from_dict и to_dict в нашем CherryPy проекте:
Представлены 2 файла:
- один собирает данные из формы, форматирует в json и отправляет на сервер
- другой получает json стандартными средствами cherrypy.tools.json_in() и сохраняет их в модель. Пост о том как сохранять массив в модель.

SQLAlchemy load data from json and export to json

Маленькая заметка для самого себя как импортировать и экспортировать данные json работая с моделью sqlalchemy. На самом деле не json а dict. Но преобразовать json в dict и обратно не так уж и сложно. https://docs.python.org/2/library/json.html

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

Как всегда пример лежит на gist:

среда, 1 октября 2014 г.

CherryPy jinja2

Коллеги.
Хотел бы поделиться простым способом интеграции шаблонизатора jinja2 в CherryPy.
Декораторы в питон - это просто отличная штука. Хотя в будущем как будет время перепишу в cherrypy tool.

Как всегда код в github:

понедельник, 29 сентября 2014 г.

Поисковая оптимизация небольшого сайта или блога


Добрый день коллеги.
Сегодня хотел бы немного поведать о поисковой оптимизации или SEO.

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

Залог успеха в SEO

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

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

С чего начать

Статистика и еще раз статистика.  Для того что бы понимать как движется наша работа по продвижению необходимо видеть точные показатели. 
Вот список инструментов с которых надо начинать: 
Какая аналитика кому нравится больше, решать Вам, я лично использую только продукт от Google, но вот понимать как видит нашу страницу желательно на обоих гигантах поиска. Следовательно Google Webmaster Tools и Яндекс Вебмастер считаю обязательными для подключения.

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

Robots.txt

Наверное ни для кого не секрет что это очень важный файл для нашего сайта, но вот есть один нюанс который лично для меня стал неожиданностью. 

Я пишу на небольшом python движке и практически все действия там приходится продумывать самому. В том числе и генерацию 404 ошибки.

И так неожиданностью стало то что ни Яндекс ни Google не захотели почему-то смотреть дальше главной страницы моего сайта. Все дело в том что мой движок при запросе url которого нет в списке выдавал не 404,  а 500 ошибку. При таком поведении ресурса при запросе файла robots.txt поисковы робот попросту обходит все кроме главной страницы стороной. 

И так главное что бы файл robots.txt присутствовал на вашем ресурсе и был доступен, либо выдавалась 404 ошибка. 

sitemap.xml

Честно говоря полезность данного файла оценить пока не успел. Оба поисковика загрузили этот файл достаточно давно, показали список доступных URL, но в индекс ничего не добавилось. 

Так что пока ждем, как изменится - отпишусь. Но что-то я сомневаюсь.

Метатеги

И так, как вы уже наверное знаете, существует 3 основных для поисковика мета тега. Это: 
  • title
  • description
  • keywords
Я неоднократно встречал информацию что поисковые системы не смотрят более в эти теги из-за поискового спама. На практике я проверил - это не так. 

Зачастую поисковые системы выдают в своих результатах именно тег description. Есть исключения но о них в другой раз. 
Keywords используется по назначению, поисковый бот действительно смотрит в него что бы понять какие ключевые слова есть на странице, и какие использовать в выдаче. Но, ключевые слова будут проверены на содержание в тексте, заголовках и ссылках на ваш сайт. Так что старайтесь заполнять этот тег честно.
Title  - как я понял, нужен для поисковой выдачи, а так же поиска ключевых слов. Старайтесь не перебарщивать с объемом данных в этом теге. Лаконичное название вашей статьи будет наиболее правильным решением. 
Важным замечанием будет то, что поисковый бот может склеить страницы с одинаковым мета содержанием. Ощутил это на себе, не повторяйте моих ошибок. Каждая уникальная страница должна иметь уникальное мета описание. 
Так же существуют другие элементы разметки, такие как alt, его следует применять к картинкам и содержимому которое пользователь может не увидеть из-за специфических настроек браузера.

hreflang

Если ваш проект рассчитан только на одну языковую группу людей, можно пропустить этот подраздел, если нет - читаем. 
Данный тег заслуживает отдельного внимания, так как поисковые системы, в частности google очень его любит и, возможно немного прибавляет в рейтинге за его присутствие. 
Инструкции как его настроить можно найти в справке Google, Yandex и много где еще. Приведу лишь 2 ссылки: 
Еще маленькое замечание, обратите внимание что указывать можно еще и тек для мультиязычной страницы, например, если у вас есть страницы, язык которых зависит от данных в сессии пользователя или  cookie. hreflang для такой страницы должен быть равен hreflang="x-default", ну и конечно страница должна дублироваться на всех языках и поисковик должен об этом знать.  

Поисковый индекс в инструментах для вебмастера

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

Но все же считаю что обращать внимание на него стоит, и стараться сделать все рекомендации что бы он наполнялся. 

AJAX

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

Но раз уж не хотят, придется нам постараться для них. Оба поисковика используют одну и ту же технологию, основанную на передаче специального параметра в GET запрос. 
Если наш скрипт получает такой параметр, он должен выдать может быть менее красивое, но полное содержание страницы. 
Более подробно об этом можно почитать тут

Редиректы

Как известно перенаправить пользователя с одной страницы на другую можно разными способами. Но поисковик обратит внимание лишь на 2 из них:
  1. HTTP редирект с кодом 302 или временный редирект
  2. HTTP редирект с кодом 301 или постоянный редирект
Если поисковый робот встречает первый тип редиректа, он скорее всего проигнорирует страницу на которую мы перебрасываем пользователя.  По этому, если мы хотим передать вес одной страницы, другой странице используйте только второй тип редиректа. Более подробно об этом можно почитать например тут.
Еще я заметил что 2 и более редиректа подряд совсем не нравятся поисковом роботам.

SSL

Недавно была новость что сайты использующие HTTPS протокол будут подняты рейтинге Google. Проверить это не удалось, но безопасность пользователей наша с Вами общая задача. Так что если есть возможность, переходите на https. 

Еще немного о ключевых словах в содержании

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

Старайтесь так же как можно меньше использовать теги H, не по назначению. Заголовок статьи в теге H - хороший вариант, заголовок виджета на странице("последние публикации", "друзья" ну и тд. виджетов сейчас много) или варианты типа "Главная страница" обрамленные в H1 неприемлимы. Используйте CSS для дизайна, и стандартные теги для написания текстов.

Ссылки на ваш сайт

Во все времена считалось что ссылки на ваш сайт есть наиболее есть наиболее сильный показатель рейтинга для поисковых систем. Не знаю как насчет Яндекса, но Google дал мне понять, что содержание для него гораздо важнее. 

Например, я как-то написал статью на этом сайте, в которой описывал установку драйвера для малоизвестного ноутбука на малоизвестное устройство. За месяц, если не ошибаюсь, эта статья набрала не менее 6к просмотров от уникальных пользователей. Оказалось что устройство не такое уж и неизвестное. При этом это был исключительно поисковый траффик, а ссылок на  меня было не более чем 3-5.

Конец

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

В следующий раз попробую добавить виджеты для поисковиков и посмотреть как быстро они отразятся в выдаче.

Перепечатывать только с моего согласия, со ссылкой на основной текст.

четверг, 10 июля 2014 г.

Пример файла для запуска standalone cherrypy приложения по OpenShift

Хочу поделиться рабочим на данный момент примером запуска Python приложения в OpenShift без использования wsgi.
Если будут дополнения пишите, интересно ваше мнение.
Файл должен называться app.py.
Файл wsgi.py должен быть удален.
в файле setup.py должна быть строчка про cherrypy:
install_requires=['CherryPy',]


понедельник, 17 марта 2014 г.

вторник, 10 сентября 2013 г.

авторизация на mamba (love.mail.ru) через python

некоторое время назад очень захотелось попробовать работу библиотеки urllib2 для Python

Не долго думая решил попробовать авторизовываться и вытягивать уже с куками любую страницу с сайта. Для проверки взял ресурс mamba.ru.

Может кому будет интересен пример, так что выкладываю:
https://github.com/stavinsky/mamba_browser