Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting

Несколько причин хостить jQuery у Google

Thursday, June 9th, 2011

Сейчас трудно представить проект который бы не использовал jQuery, её используют для создания анимации, эффектов и всех этих новых веб 2.0 красивостей, которые позволяют сохранять дизайн минималистичным, но в то же время поддерживать хороший експириенс юзера от работы с сайтом.

Часто делают так :

Вы делаете так же? Перестаньте – такой подход во многом не верен, нет никаких причин размещать эти файлы у себя. Я рекомендую использовать сервис гугла Google AJAX Libraries – чтобы подгружать такой контент напрямую с (ближайших) серверов гугла.

Какие преимущества даёт такое размещение?

Уменьшается задержка (отклик) – библиотека подгружается быстрее.
Параллелизм – пока загружается jQuery, ваш сервер отдаёт остальной контент.
Кэширование : если пользователь серфил интернет – наверняка многие библиотеки с CDN гугла закэшировались браузером.
Уменьшается нагрузка на сервер – так же неплохо будет облегчить свою страницу на 30+кб

Собственно есть 2а метода :



или старый добрый



Кнопки в стиле GitHub.

Tuesday, June 7th, 2011

Многим очень нравится дизайн гитхаба, один из элементов, на который стоит обратить внимание отдельно это – кнопки (сининькие такие). Такие динамические кнопки смотрятся очень круто и с легкостью впишутся в интерьер любого сайта. Вообщем ближе к делу: в основе github buttons лежат 3и технологии – CSS, HTML и jQuery. Архив с ксс стилями и js можно скачать CSS3 Buttons, посмотреть как это выглядит – github style кнопки.

Приватные репозитории кода. Bitbucket

Saturday, June 4th, 2011

Сервис GitHub предоставляет возможность размещать свой open source код бесплатно и использует для этого достаточно сложную систему контроля версий – git. Приватные репозитории на гитхабе доступны только для оплаченных аккаунтов. А что делать если хотелось бы скрыть код, но в то же время использовать все удобства которые предоставляют системы контроля версий?

Есть 2а пути, простой и сложный. Простой – воспользоваться сервисом который предоставляет bitbucket или поднять на сервере свой репозиторий кода.

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

Собственно, старт проекта выглядит примрно так (сначала нужно создать приватный репозиторий на bitbucket):

Start new bitbucked project

create folders etc.

>> hg init
>> hg add

make “hgrc” file in .hg folder with :

[paths]
default = https://bitbucket.org/user/project
[ui]
username = Your Name 
verbose = True

also will be good idea to put .hgignore file :

# use glob syntax.
syntax: glob
# Common
*.pyc
*.pyo
*.swp
*.swo
*.orig
*~
# Project specific
.env
pip-log.txt

>> hg commit -m “Here we go”
>> hg push

.hgignore файл который задаёт как бы говорит hg не помещать в репозиторий разные ненужные файлы – бэкапы которые создаёт редактор кода, невидимые файлы и т.д.

На текущий момент кол-во приватных репозиториев на Bitbucket.org не ограничено – пользуйтесь =)

ORM. Использование SQLAlchemy.

Tuesday, May 31st, 2011

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

Итак что же такое ОРМ (orm)? Это не более чем абривиатура от Object Relational Mapping и по простому обозначает работу с таблицами баз данных как с объектами языка программирования. ОРМ является по сути дела высокоуровневой надстройкой над драйвером БД который переводит ваши запросы в язык SQL; может быть где-то и проигрывая в производительности, но зато существенно упрощая разработку и поддержку проектов, делая работу с базами данных простой и понятной.

ORM (англ. Object-relational mapping, русск. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Существуют как коммерческие, так и свободные реализации этой технологии.

На текущем этапе своей карьеры программиста я использую sqlite практически в каждом скрипте, это гораздо удобнее и быстрее чем работать с кучей текстовых файлов. Если возникает потребность в редактировании данных – нет проблем существует отличный плагин для FF – http://code.google.com/p/sqlite-manager/

Итак к делу. Для питона есть отличная реализация ORM с подробнейшей документацией – SQLAlchemy

Базово работа с БД выглядит так :

# -*- coding: utf-8 -*-

from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy.orm import mapper
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, Text, String

Base = declarative_base()

# определяем формат таблицы в БД.
# как бы пост для блога.
class CData(Base):
    __tablename__ = 'cdata'

    id = Column(Integer, primary_key=True)
    url = Column(String)
    image = Column(String)
    title = Column(String)
    text = Column(Text)

    def __init__(self, url, image, title, text):
        self.url = url
        self.image = image
        self.title = title
        self.text = text

    def __repr__(self):
        return "CData '%s'" % (self.url)

db_engine = create_engine('sqlite:///data.db', echo=True)
# создадём таблицы
Base.metadata.create_all(db_engine)

# начинаем новую сессию работы с БД
Session = sessionmaker(bind=db_engine)
session = Session()

# таким образом можно добавить новый элемент
new_element = CData("http://blog.com", "http://coolpix.com/img434.jpg", "Nice Post", "Mark spomoni as a faggot")
session.add(new_element)

# посмотрим что уже есть в базе данных
for instance in session.query(CData).order_by(CData.id):
	print instance.title

# совершаем транзакцию
session.commit()

Как видите все достаточно просто. Работать с базой данных становится так же легко и естественно как и со структурами языка программирования. В современных фрэймворках для разработки сайта так или иначе используется ОРМ, в джанге это своя реализация django-orm, но во множестве других, таких как flask, pyramids используется как раз SQLAlchemy.

Дополнительные материалы.
Еще одна хорошая статья на русском языке SQLAlchemy: как втянуться
Официальная документация SQLAlchemy

CSS: навигационное меню.

Monday, March 28th, 2011

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

Неотъемлемая часть любого сайта – меню навигации. Сделать его логично с помощью таких тэгов как <ul> / <li>




получится примерно так :

не очень похоже на меню, правда? И тут в дело вступает css :
убираем точки (на заморском это называется – bullets)

#nav-menu ul {
	list-style: none;
} 

Уже лучше, теперь нужно расположить элементы списка в одну линию. Делается это следующим образом :

#nav-menu li {
	float: left;
	margin: 0 2px;
}

Результат :

– далее можно поработать над каждым элементом более тщательно, например создать фон для каждого элемента, чтобы он выглядел как кнопка.
#nav-menu li a {
	background: url(background.gif) #fff bottom left repeat-x;
	height: 2em;
	line-height: 2em;
	float: left;
	width: 9em;
	display: block;
	border: 0.1em solid #dcdce9;
	color: #0d2474;
	text-decoration: none;
	text-align: center;
}

Так же не лишним будет задать ширину меню, чтобы избежать возможных наложений элементов дизайна.

#nav-menu {
	width:200px;
}

Всйо.

Удобство линукс. Работа с процессами.

Friday, March 4th, 2011

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

Когда вы находитесь в терминале и, к примеру, у вас запущен mc, можно в любой момент послать эту задачу на фоновое выполнение нажав [ctrl+z]

Чтобы посмотреть список задач которые “висят” на фоне нужно набрать: [jobs] (без квадратных скобок конечно)
Для переключение между задачами [fg номер задачи] (где номер задачи 1, 2… такой же как и в списке который выводится после команды [jobs])
Чтобы сразу запустить задачу как фоновый процесс нужно добавить [&]. Например [mc &]

Очень удобно )

Работа с GitHub. Выкладываем OpenSource.

Thursday, March 3rd, 2011

Вообщем удаленные репозитории это очень хорошо. Во первых появляется какая-то строгость в работе, во вторых безопасность данных и удобство управления, список можно продолжить, но собственно, думаю, основная мысль понятна : “репозитории это хорошо”. К сожалению GitHub бесплатно предоставляет только открытый репозитории, т.е. если вы не хотите чтобы код вашего проекта смотрел кто-то еще придется заплатить кэш, что не всегда целесообразно. Однако bitbucket.com позволит вам абсолютно бесплатно содержать 5 закрытых репозиториев кода.
Резюмирую выше написанное – GitHub хорошо подходит для OpenSource проектов.

Как добавить файлы на github?

Теперь расскажу как это сделать. На примере небольшой утилиты которая разбивает текст на предложения : textsplitter.py
Для тех кто еще не зарегистрировался и не создал ключи для гитхаба ранее была статья :
Работа с Github. Генерация SSH ключей.
На гитхабе создаем новый репозиторий – New Repository
Далее все просто. На своей рабочей Linux машине пишем следующее :

$ mkdir Utils # создаем папку Utils
$ cd Utils # заходим туда
$ git init # инициализируем гит
$ touch README # создаем ридми файл
# каким нибудь редактором пишем в этот файл пару строк о проекте или оставляем пустым
$ git add README # добавляем ридми в список коммитов
$ git commit -m 'first commit' # проводим первый коммит, с комментарием к нему

До этого момента все действия были совершены локально. Настало время присоединится к гитхабу и применить изменения которые были проведены на локальной машине.

$ git remote add origin git@github.com:username/Utils.git # связываем локальный прокт с репозиторием на гитхабе
$ git push origin master # применяем изменения попросят ввести пароль который вы задали для ключей.
# если ключи генерировали под root юзером нужно писать sudo git....

Теперь таким же образом можно создавать файлы, добавлять их в проект (git add filename), делать коммиты, загружать новые версии и т.д.

Все теперь можно заходить GitHub и смотреть что получилось.

1000 наиболее посещаемых сайтов интернета.

Wednesday, January 5th, 2011

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

The 1000 most-visited sites on the web

You can see a list of the largest 1000 sites worldwide, based on Unique Visitors (users), as measured by Ad Planner. This list is updated monthly as new Ad Planner datasets are released. The list defines sites as top-level domains.

Получить список всех папок и файлов. Python.

Monday, December 13th, 2010

Как получить список всех папок и файлов в определенной директории? Очень просто – используя функцию os.walk()

import os
def getsubs(dir):
    # get all
    dirs = []
    files = []
    for dirname, dirnames, filenames in os.walk(dir):
        dirs.append(dirname)
        for subdirname in dirnames:
            dirs.append(os.path.join(dirname, subdirname))
        for filename in filenames:
            files.append(os.path.join(dirname, filename))
    return dirs, files

Работа с Github. Генерация SSH ключей.

Sunday, December 12th, 2010

Наверняка многие из вас знают как организуется работа нескольких человек над одним проектом с помощью систем управления версиями. В наши дни технология улучшилась на столько, что появился отдельный вид веб сайтов – хостниги для проектов. Один из них – github основанный на системе контроля версий git.

что внутри?

Можно создать аккаунт, фалловить другие проекты, делать коммиты. Размещение OpenSource проектов абсолютно бесплатно, но есть возможность сделать приватный проект (за $). Вообщем нет лучше места для храниения и поддержки своего OpenSource кода. Так же думают ребята из :

Расчет прост – выкладывать части своих проектов которые могут пригодится другим, при этом получая поддержку коммунити и сообща доводя компоненты до совершенства.

Там же можно найти массу готового кода, чтобы каждый раз не изобретать велосипед.

Как начать свой проект?

Практически все серьезные девелоперы сидят на Linux.
Для начала вам понадобится сам git.
http://help.github.com/linux-git-installation/

sudo apt-get install git-core

я поставил только git-core. далее нужно сгенерировать ssh кеи.
http://help.github.com/linux-key-setup/

# идем в папку где должны хранится ключи
$ cd ~/.ssh
# смотрим есть ли файлы типа id_rsa, id_dsa или identity
ls
# если нет - генерируем новые
$ ssh-keygen -t rsa -C "youmail@gmail.com"

Я несколько раз создавал удалял, так что можно снести если у вас уже есть ключи но вы что называется don’t give a fuck (т.е. не знаете откуда они и зачем). предварительно лучше всего все же скопировать то что есть в отдельную папку. На всякий случай. Мне еще пришлось скопировать ключи в /root/.ssh (создавал в /home/(youruser)/.ssh)

Теперь нужно добавить свой public key в https://github.com/account. Public Key находится в файле id_rsa.pub – скопировать его в clipboard можно с помощью xclip :

$ sudo apt-get install xclip
$ cat ~/.ssh/id_rsa.pub | xclip -sel clip

Тестируем что получилось :

$ ssh git@github.com
....
ERROR: Hi tekkub! You've successfully authenticated,
but GitHub does not provide shell access
Connection to github.com closed.

Если все окей можно приступать к созданию проекта. Если нет – troubleshooting common issues

Собрать все URL с html документа используя BeautifulSoup.

Sunday, December 5th, 2010

В рамках программы публикации полезных сниппетов (кусочков кода). Распространенная задача – нужно собрать все URL со страницы, например, это нужно чтобы спарсить сайт. Для разбора xml/html есть замечательная библиотека – BeautifulSoup, которая будет работать даже в том случае, если документ не валидный (с ошибками, типа пропущены тэги, перепутан порядок и т.д.) Воспользуемся BeautifulSoup и Python’ом :

# get all urls
import BeautifulSoup
def get_all_urls(html):
    soup = BeautifulSoup.BeautifulSoup(html)
    urls = [tag['href'] for tag in soup.findAll('a')]
    result = []
    for val in urls:
        if (val[:7] == "http://") or (val[:8] == "https://"):
            result.append(val)
    return result

или так (с помощью filter и lambda):

# get all urls
import BeautifulSoup
def get_all_urls(html):
    soup = BeautifulSoup.BeautifulSoup(html)
    urls = [tag['href'] for tag in soup.findAll('a')]
    f = lambda x: True if (x[:7] == "http://") or (x[:8] == "https://") else False
    return filter(f, urls)

Как превратить google translate в драм-машину?

Wednesday, December 1st, 2010

Есть такая фича в google.com/translate – пасхальное яйцо от гугла. Появилось в треде на reddit.com – и там еще много готовых “пресетов”

  1. Идем на google translate
  2. Ставим перевод с немецкого на немецкий (german to german)
  3. Копипастим это в гугл транслейт : pv zk pv pv zk pv zk kz zk pv pv pv zk pv zk zk pzk pzk pvzkpkzvpvzk kkkkkk bsch <<< или жмем сразу сюда.
  4. Жмем Listen
  5. Радуемся :)

Используя таблицу можно составить драм-паттерн самому :

  1. zk = suspended cymbal
  2. bschk = snare
  3. pv = brush
  4. bk = bass
  5. tk = flam1
  6. vk = roll tap
  7. kt = flam2
  8. kttp = flam tap
  9. krp = hi hat tap
  10. pv = short roll
  11. th = better hi hat
  12. thp, ds = instant rimshot.

Как получить оригинальный URL? Python.

Thursday, November 25th, 2010

Бывает различные сервисы используют url-прокладку тем самым скрывая оригинальный url ссылки, а узнать оригинальный урл очень хочется. Примеров масса – различные сервисы сокращения ссылок (shorurl), ссылки feedburner через feedproxy.google.com. Короче, очень жизненный пример : мне нужно получать данные из кучи RSS, часть из них проходит через этот самый feedburner который преобразует ссылки таким образом – http://feedproxy.google.com/~r/somesite/~3/H_xFNwC1ikE/ не, ну это блядство, срочно нужна ссылка на оригинал.

Как получить оригинальный url ссылки shorturl?

Делается это элементарно, дергаем этот линк, проходим все редиректы и возвращаем тот url куда в конечном итоге пришли.

Используя urllib2. Самый простой метод, поэтому наиболее предпочтительный.

import urllib2
fp = urllib2.urlopen('http://feedproxy.google.com/~r/somesite/~3/H_xFNwC1ikE/')
print fp.geturl()

Используя httplib. Замороченный, нужно разбивать урл на части, что как бы не очень удобно.

import httplib
""" http://feedproxy.google.com/~r/somesite/~3/H_xFNwC1ikE/ """
conn = httplib.HTTPConnection('feedproxy.google.com')
conn.request('HEAD', '/~r/somesite/~3/H_xFNwC1ikE/')
response = conn.getresponse()
print response.getheader('location')

Используя культовый curl

import pycurl
conn = pycurl.Curl()
conn.setopt(pycurl.URL, 'http://feedproxy.google.com/~r/somesite/~3/H_xFNwC1ikE/')
conn.setopt(pycurl.FOLLOWLOCATION, 1)
conn.setopt(pycurl.CUSTOMREQUEST, 'HEAD')
conn.setopt(pycurl.NOBODY, True)
conn.perform()
print conn.getinfo(pycurl.EFFECTIVE_URL)

Кстати, первый спамм на .РФ – онлайн-гипермаркет.рф

My blog is Do-Follow


Пишу код, делаю сайты.
Check out my about.me profile!

парсинг сайтов, форумов, интернет магазинов

Want to subscribe?

istinspring twitter account
istinspring facebook account

 Subscribe in a reader Or, subscribe via email:
Enter your email address:  
Find entries :