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

Устранавливаем Emacs, настраиваем IDE для Python.

Tuesday, February 28th, 2012

Долго не писал, был крайне занят в разных проектах, получая madskillz в различных областях программирования. Ну что могу сказать, программировать мне пока нравится больше чем предыдущие занятия SEO. Сама оптимизация канешно весьма полезное умение и имеет скажем так прикладное значение, но я считаю трЪ вебмастер должен уметь собственно делать сайты. Причем не на вордпрессе или на какой-нибудь сраной point-and-click CMS, а уметь писать легковесные, быстрые, заточенные под задачу решения.

Это было интро, собственно переходим к сути статьи. Итак, как правило программист нуждается в редакторе в котором он будет набирать код. Некоторые предпочитают огромный монстроподобные, тяжеловесных, кросплатформенных java-IDE (eclipse, netbeans и т.д.) весь функционал которых как правило не исползуется, в то время лаги gui достаточно ощутимы, кто бы что не говорил. Однако линуксу уже не первый год и на нем существуют достаточно хорошие нэйтивные решения, которым уже по 30 (с хуем) лет, но которые тем не менее активно развиваются и многие предпочитают набирать код именно в этих редакторах, я имею в виду Emacs и Vim. Звезды сложились так что я стал использовать emacs, сначала для того чтобы набирать небольшие программки параллельно с netbeans, затем понял что netbeans мне уже не нужен.

Собственно уже не первый раз устанавливая Ubuntu на разные компьютеры я сталкиваюсь с необходимостью заново создавать рабочее окружение Emacs’а.
И вот в очередной раз решил записать последовательность действий.

Установка и настройка Emacs для разработки на Python

emacs python

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

Сперва поставим сам емакс, открываем терминал и пишем:

sudo apt-get install emacs

Поставим гит если его нет (а если система совсем новая то нужно еще перед этим сделать sudo apt-get update)

user@machine:~$ sudo apt-get install git-core

Coбственно осталось кланировать репозиторий куда-нибудь в папке юзера.

user@machine:~$ cd ~
user@machine:~$ mkdir temp
user@machine:~$ cd temp
user@machine:~$ git clone https://github.com/istinspring/iemacs

Затем копируем файлы конфигурации в папку юзера

user@machine:~$ cp -r iemacs ~/.emacs.d
user@machine:~$ cd iemacs
user@machine:~$ cp .emacs ~/.emacs

Если сейчас запустить Emacs он покажет ошибку, т.к. нет нужных плагинов.
Ставим их:

user@machine:~$ sudo apt-get install pymacs
user@machine:~$ sudo apt-get install python-ropemacs
user@machine:~$ sudo apt-get install python-mode

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

YASnippets – сниппеты. очень удобно вбить туда повторяющиеся паттерны кода. Например у меня вбиты сниппеты для быстрого создания скелета паука – grab:spider.
Autocomplete – тут и сказать нечего автокомплит. Так же ускоряет процесс набивание кода.

Далее можно начать разбираться и потихоньку выстраивать удобное окружение для работы с кодом.

Разработка mini-cms для MFA сайтов.

Monday, July 4th, 2011

Soooo, mini-cms for mfa sites – на жанге! Джанго отличный фреймворк (говорят даже что это один из лучших продуктов что сейчас вообще есть), там предусмотрено все что нужно для быстрой разарботки веб-сайтов, каждая мелоч, а философия фрэймворка предполагает многократно использовать приложения (apps почти как плагины в вордпрессе) которых наваяли уже тысячи и почти все что может понадобится можно найти на гитхабе и без проблем подключить на свой сайт.

Вообщем какие требования для начала к mini cms?

  • Желательно иметь возможность менять themes. Ок, не вопрос.
  • Урлы вида http://site.com/article-name или http://site.com/category/article-name
  • сайтмап
  • рсс фид

Предлагайте в комментах, что еще можно добавить.

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

Можно скопировать себе, поставить джангу и поиграться, на линуксе все просто, поставил git и…

git clone https://github.com/istinspring/mini-cms-for-mfa.git mini-cms-for-mfa

Как там в виндовс, хз, win как платформа не предназначена для вебразработки, линукс гораздо удобнее и все к чему вы привыкли на винде, кроме игр, есть и на линуксе.

Описание, фичи, процесс разработки

Ситуацию с земами (themes) разруливал впервые, поэтому пришлось поэкспериментировать. Хотел сначала написать themes engine который отдавал файлы в соответствии с текущей активной темой, типа как в вордпрессе, но это долго, мутно и генерирует лишние запросы к базе данных, что как бы не очень круто. Поэтому решил сделать по другому, оптимальным решением, как мне кажется будет загружать зип архив с темой, файлы из которого при активации будут копироваться в соответствующие папки django, таким образом cms лишний раз не будет обстукивать sqlite базу данных, но при этом можно легко поменять текущий зем и загрузить новый.

Сам движок cms на джанге писать одно удовольствие. Я уже кучу раз делал подобное в своих проектах и теперь просто модифицировал/доработал/улучшил код который у меня был. Тут все просто – нужно создавать страницы которые будут отображаться в соответствии с заданными категориями, или без них (подумал что сайт вполне может разрастись до 50 страниц, а как бы 50 страниц уже нуждаются в сортировке по каким-то признакам).

Для создания RSS и Sitemap фрэймворк django любезно предоставляет удобные инструменты которыми я воспользовался. Ммм… что еще? Написал контекст процессор который передаёт данные по сайту и категориям при рендере каждой страниц, это позволяет достаточно просто создавать новые земы на основе произвольного html кода, прописывая логику отображения элементов сайта.

Почти готово…

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

Вообщем вот демо – mini-cms-for-mfa demo site
Вот код – Mini CMS for MFA

Логин/Пасс – test/test вход в админку через http://wtfisgoingon.co.cc/admin

Уже есть идеи по поводу улучшений :

  • сделать менеджер рекламы (чтобы рулить размещением из админки)
  • добавить темлейт тэги чтобы можно было очень просто обозначить рекламные блоки и какие-либо элементы интерфейса внутри шаблона
  • статистику
  • апи интерфейс
  • рендер в статику, чтобы эту статику потом размещать где угодно
  • интерфейс для добавления ссылок в сайдбар
  • кэширование

Если у кого-то есть пожелания, то пишите в комменты или на мыло, как будет время доработаю.

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

Tuesday, June 7th, 2011

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

Генетические алгоритмы. Hello World.

Sunday, May 8th, 2011

Решил потратить свободное воскресенье на написание чего-нибудь интересного, размять мозги, освоить какие-нибудь новые приемы, короче говоря разбавить рутину повседневных дел. Задача достаточно тривиальна – написать аналог Hello World используя генетические алгоритмы.

Выложил код на github – Hello World генетическими алгоритмами. Там же лог где можно посмотреть как происходит решение задачи.

Генетические алгоритмы

Что представляют собой эти генетические алгоритмы? Они решают задачи точно так же как это делает природа, т.е. через “естественный отбор”, соответственно критерии этого отбора должны быть достаточно просто вычисляемы – в моём случае это так называемая fitness функция которая посимвольно сравнивает решение с оригинальной строкой, чем лучше решение – тем ближе выход функции к нулю.

def fitness(dnk, goal):
    f = 0
    for index, gene in enumerate(dnk):
        if gene != goal[index]:
            f -= 1
    return f

Решение задачи представляется в виде вектора значений [a, b, c, d, ..., x] (в нашем случае это строка) длина которого известна, я обернул это в класс методы которого предоставляют интерфейс для взаимодейтсвия (class GeneticCode), на начальном этапе создаётся “популяция” (скажем 100) этих векторов инициализируемых случайными значениями.

self.pool = [GeneticCode(goal=goal) for item in range(self.pool_size)]

Затем fitness функция делает оценку каждого вектора популяции в коде, и далее лучшие образцы (скажем 10% от всей популяции) переходят на следующий круг. Существуют разные вариации генетических алгоритмов, кто хоть немножко разбирается в биологии и знает как происходит естественный отбор без труда могут придумать различные улучшения. Напоминаю, на данный момент у нас, после “естественного отбора” осталось 10% от популяции, где-то нужно взять остальные 90%, я решил на этом этапе провести “скрещивание”, т.е. различные простейшие рекомбинации исходных векторов данных (одна часть берется от одного вектора, другая от второго и в результате получается, что-то новое). Детали этого этапа реализованы в методе def darvin(self, winners=0.1) класса GenePool.

Далее происходит “эволюция”, т.е. кажый вектор испытывает какие-то случайные мутации (не затрагивая те элементы которые уже совпадают с оригинальной строкой). Затем опять приходит старик Дарвин, выбирает лучшие решений и процесс начинается заново. И так до тех пор пока решение не будет найдено. Если строка достаточно длинная + популяция мала и слишком много решений проходит отбор – генетический алгоритм может работать очень долго, поэтому неплохо будет ограничить кол-во итераций, скажем 1000 будет вполне достаточно.

Собственно классический “Hello world” получился примерно так (каждая строчка – лучший результат на каждом шаге) :

s(_soclbi!P*
{k&soclbil^!
oiYloC>otPC!
Evlso$>oil^!
EvlmoC>oild!
oil!oC>orld!
?vlloC>orld!
?elloCqorld!
GelloCqorld!
GelloCqorld!
Tello qorld!
oello qorld!
Tello world!
Tello world!
Tello world!
Hello world!

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

  • Оптимизация функций
  • Оптимизация запросов в базах данных
  • Разнообразные задачи на графах (задача коммивояжера, раскраска, нахождение паросочетаний)
  • Настройка и обучение искусственной нейронной сети
  • Задачи компоновки
  • Составление расписаний
  • Игровые стратегии
  • Теория приближений
  • Искусственная жизнь, проекты типа EvoGrid
  • Биоинформатика (свертка белков)

Для тех кто хочет попробовать, есть уже готовые библиотеки для python которые избавят вас от рутины написания лишнего кода.
http://www.freenet.org.nz/python/pygene/
http://pyevolve.sourceforge.net/

Работа с 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 и смотреть что получилось.

Работа с 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

Going OpenSource. Первый код на github’е.

Sunday, December 12th, 2010

Когда-нибудь нужно начинать… Вчера открыл счет, зарелизив небольшую библиотеку в OpenSource. Это обертка API сервиса Mag.ma который является чистой воды машапом – агрегатором видео с различных источников, которые предоставляет API.

Mag.ma API Python
на GitHub

GitHub

Реализованы следующие интерфейсы.

  • search – поиск видео по кею. пока не работает.
  • info/video – информация о видео
  • embed – получить embed код для видео
  • thumbnail – получить thumbnail для видео

но самое интересное

  • leaderboard – получить список топ видео за определенный интервал
  • mustwatch – список горячих видео которые жарят прям сейчас
  • channel – информация о канале включая видео по категориям.

Вполне можно использовать этот модуль для наполнения своих Entertainment сайтов.

Open Source Social Networks

Saturday, November 13th, 2010

Достаточно модный тренд, вообщем самое время поговорить о мощном движении Open Source и его пользе. Наверняка многие слышали о таких темах как sourceforge.net, code.google.com? Достаточно плотно сидят в выдаче. В чем заключается на данный момент работа программиста? Ведь почти все что нужно так или иначе есть в готовом виде, и нужно лишь протянуть руку чтобы использовать чужие разработки, а не терять время разрабатывая очередной велосипед. Настоящие развалы готового кода практически на все случаи жизни можно найти на социальных сайтах :

GitHub

BitBucket

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

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 :