Традиция такая. Про переезд на новый хостинг пост. А как иначе? Новоселье!
Вот помню еще той весной задумал завести свой блог, но осенью пишу статью; как раз пол года срок. Ну что ж, начну рассказ с начала.
Все началось с ЖЖ. И все закончилось уже, хватило мне единственного взгляда — ЖЖ ужасен, и сколько бы народу не сидело в нем — порывы рвотные я не могу сдержать при взгляде на его дизайн. Могу лишь навещать, пусть через силу, друзей в сообществах родных по духу. На каждый комментарий что оставил в нем, читая интересный пост, затрачено пустых усилий было столько, что мог бы целый пост я написать, будь волен я не заходить по десять раз на сайт и не елозить мышью по доброй сотне комментариев ветвей.
Потом я Blogger испытал, но не прижился он: был черезчур раздут (или мне показалось). Задумка в целом глупой оказалась, ведь корпорации добра до блогов дела нет.
Ничем кроме проклятья не назову я то, что настигает гугл в его попытках тщетных представить публике почтенной уютное местечко для бесед. Волну никто не понял, а Buzz, в который каждого из нас как будто носом ткнули — вовсе не базар, а так… лоток в безлюдной деревушке, в котором обречен подряд который месяц себя любимого читать, и кросспосты с чтеца, и твиты с твиттера, короче — что угодно. Единственное понял я — оригинального контента не сыскать, там все из третьих мест и не серьезно.
О Posterous товарищ Умпутун в своем подкасте замолвил доброе слово — грех было не попробовать, и честно вам скажу — понравилось. Чего уж там, я всем рекомендую на Posterous взглянуть, запостить что-нибудь, и до тех пор пока ваши посты будут просты вам не в чем будет блог-платформу упрекнуть.
Прошло три месяца, и все бы ничего, но нет, хозяева платформы поспешили презентовать markdown для постов, но допилить забыли возможность обновлять посты потом; чем причинили мне долгие часы в попытках обновить свой пост. Все было тщетно.
Я понял, что идеала быть не может, хотя, быть может, он возможен, но нужно постараться самому и приложить усилия к тому, чтобы собрать платформу на которой будет просто и в удовольствие постить. Я оказался не один такой. В Сети нашлись люди, которые не ждали пока им принесут идеал на блюде. Эти люди были те еще гики — это ж надо додуматься приспособить систему контроля версий для публикации постингов.
Парни открыли на гитхабе дополнительный сервис, зовется он
Pages — статические HTML-страницы держит. Простые страницы все
же не блог — так какой же от сервиса толк? Там есть генератор удобный,
который из пачки шаблонов и текста ровного сделает сайт пользователю
на радость командой одной — git push
— экая малость.
В чем суть? Зачем ради простого блога такие огороды городить?
- Шаблоны? HTML? CSS?
-
Ради индивидуальности. Когда-нибудь
настанет время, захочется чтоб просто было все, красиво, чтоб
нашу отражало суть, чтоб каждый мог к нам заглянуть и посмотреть
не на шаблон, которых 100500 в Сети, а на творение…
Здесь путь один, и раз уж взялся показать себя в Сети — освой HTML и CSS, без них здесь не пройти.
- Git
-
Для техников пишу эту статью. Ужель ты с Википедией знаком?
Гит — то же самое, но лучше; хранилище для текста.
Чем отличается программа от статьи? Ничем. Суть текст простой. И нам же лучше, если мы сможем откатить ошибки, поправить сайт не будучи в сети, друзьям послать — пускай помогут нам, и от греха подальше сохранить на множестве машин.
sudo aptitude install git-core
- Emacs
-
При чем здесь Emacs? А при том, что мы работать будем в
нем. В Org Mode.
Что лучше может быть, чем пост писать в редакторе достойном? Шаблоны править в нем, по ходу: CSS, HTML, коммитить в нем же в git, и слушать музыку (но я здесь не о том). С тех пор как я намучался с плодами Web 2.0, порою к страшным прибегая извращениям (навроде написания статьи в редакторе GMail'а) подход, где все в одном, все по-старинке — спокойствие вселяет, и заставляет к благому делу большее усердие прилягнуть.
- Org Mode
-
Буквально месяц с тех времен прошел когда впервые я
прослышал о сей моде. Немного поискал и примянул
использовать разок. Потом другой. И третий. В конце
концов оставил не у дел я множество вещей, будь то
ToDo-листы, календари и прочий ширпотреб — org-mode с
лихом эти вещи заменяет.
Я был шокирован не далее чем пару дней назад, наткнувшись на один из тысяч форков настроек Emacs Starter Kit. От радости я плакал, когда код читал (сам Кнут бы плакал тоже) — настройки те написаны в «литературном стиле». В том самом стиле был написан «TeX». Суть в кратце такова: внутри «org-mode»-файла лежит рассказ о коде, код; рассказ сам — исполняется, двух зайцев убивая в раз — в конце у нас есть просто код и есть рассказ (пригодный к публикации в блоге или в виде PDF-файла сгенерированного LaTeX'ом — безо всякой дополнительной обработки).
- Jekyll
-
Генератор Jekyll написан на Ruby, заточен под
блоги. Работа с ним идет таким ходом: пользователь в
директории, git-репозитории, создает поддиректории особые,
которые наполняет шаблонами, картинками, страницами
стилей, скриптами и собственно, постами. Когда очередной
работы выполнен кусок — контент коммитится и отправляется
на сервера гитхаба, там прогоняется через наш генератор,
он из шаблонов и кусков конечный собирает блог.
Без Jekyll'а мы можем обойтись вполне — достаточно нам git'а, но чтоб по десять тысяч раз нам в облако не пушить и не плодить коммитов — поставим; а позже в нем мы сможем запустить и протестировать наш блог.
Вам правду доложу — поставить Jekyll было трудно, я битый час консоль пытал; так было это нудно. Я весь расстроился и был немного зол, что много нехороших слов про руби в тви наплёл. Но превозмог и сделал грязный хак — скачал пакет из Meerkat (вот дурак ;)
sudo aptitude install ruby-full wget http://mirrors.kernel.org/ubuntu/pool/universe/libg/libgems-ruby/rubygems1.8_1.3.7-2_all.deb sudo dpkg --install rubygems1.8_1.3.7-2_all.deb sudo gem install jekyll
Пускай вас эта ложка дегтя не смущает, хотя стабильности она не добавляет, стабильность оставляю не у дел; ведь так всегда — поставил свежий софт и глюки потерпел.
Бинарь ищите в недрах:
/var/lib/gems/1.8/gems/jekyll-0.7.0/bin/jekyll
- Ubuntu
- Не знаю, как там кто — я пользуюсь Убунтой; тому есть сто причин, но главная из них — я не хочу напрасно тратить время, работаю по принципу «работает — хуй с ним».
Не стану я вдаваться глубоко в тоньчайшие аспекты разработки, представлю вам всё просто и легко — два пасса мышью плюс в консоли десять строк, встряхнуть, разбавить, потрясти; готово — вот наш блог.
Мой блог; хоть он не совершенен — своею писаниной дорожу, поэтому я поступаю просто и сурово — я git-репозиторий в svn держу (в Dropbox'е тобиш):
cd ~/Dropbox git init zahardzhan.github.com cd ./zahardzhan.github.com
Здесь имя — zahardzhan, пишу своё, я вашего не знаю; читатель, укажи
своё, но не забудь .github.com
приписать — таков формат.
Залейте бложик на гитхаб.
git remote add origin git@github.com:zahardzhan/zahardzhan.github.com.git git push origin master
В своем устройстве блог не терпит беспорядка — давно уж прописали: что где лежит и что чему принадлежит.
~ Dropbox zahardzhan.github.com atom.xml _config.yml css screen.css favicon.ico images image1.png image2.png index.html _layouts default.html post.html org 2010-10-09-buddhas-zen.org 2010-10-10-blog-for-programmer.org _posts 2010-10-09-buddhas-zen.html 2010-10-10-blog-for-programmer.html _site
Вот файлы, по порядку:
atom.xml
- Шаблон канала новостей. Уважь читателя — кто будет блог читать без новостей? И пропиши канал в feedburner.com скорей.
_config.yml
- Настройки Jekyll в формате YAML. Подробнее в оригинале. Я не большой фанат — держу всё по-дефолту:
css
- Здесь я держу страницу стиля.
favicon.ico
- Иконка.
images
- Картинки.
index.html
- Заглавная страница. Три черточки вверху в формате YAML front matter укажут заголовок и шаблон в который будет вставлена страница.
_layouts
- Шаблоны сайта; используют язык liquid. Примеры приводить не стану — там много кода для поста, но если любопытно вам, прошу репозиторий блога навестить.
org
- Хранилище постов в формате Emacs Org-mode. Отсюда готовые посты будут компилироваться в html-файлы в директорию
_posts
- Хранилище для постов в формате html, markdown и textile. Отсюда готовые посты будут компилироваться в html-файлы в директорию
_site
-
Хранилище скомпилированых постов в формате html. Отсюда
они уже никуда не будут компилироваться, поэтому эту
директорию нужно проигнорировать в своем
.gitignore
.
Перед письмом постов настроим Emacs, чтоб правильно он импорт
проводил. Нам от готового поста нужно одно лишь тело (контент между
тагами <body>
).
(setq org-publish-project-alist '(("zahardzhan.github.com-org" :base-directory "~/Dropbox/Blog/org/" :base-extension "org" :publishing-directory "~/Dropbox/Blog/_posts/" :recursive t :publishing-function org-publish-org-to-html :headline-levels 4 :html-extension "html" :body-only t) ("zahardzhan.github.com-static" :base-directory "~/Dropbox/Blog/org/" :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|php" :publishing-directory "~/Dropbox/Blog/_posts/" :recursive t :publishing-function org-publish-attachment) ("zahardzhan.github.com" :components ("zahardzhan.github.com-org" "zahardzhan.github.com-static"))))
Посты мы пишем так:
#+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:nil skip:nil d:t #+STARTUP: SHOWALL INDENT #+BEGIN_HTML --- layout: post title: Мой первый пост --- Мой первый пост!
Название .org
-файла должно указывать на то, что это пост; он должен
быть назван так: 2010-10-10-my-first-post.org
, иначе непойдет.
Как будет пост готов — нажмём C-c e X zahardzhan.github.com (с расчетом на свой сайт).
Взглянём что получилось (в браузере по адресу localhost:4000)
~/Dropbox/zahardzhan.github.com # /var/lib/gems/1.8/gems/jekyll-0.7.0/bin/jekyll --server
Magit'ом закоммитим новый _posts/2010-10-10-my-first-post.html
.
git push
. На этом всё.