среда, 20 ноября 2013 г.

Еще одни микрозаметки из django и md файлов.


Заметил(в последние три года), что blogger не самая удобная платформа для мелких заметок для себя. Хранить их в локальных файлах тоже не очень хочется, чтобы не терять возможности посмотреть их с другого компьютера. Есть много онлайн сервисов для этого, но с текстовым редактором они интегрируются слабо, да еще и временами перестают существовать(я пользовался catch.com, пока он не закрылся). Поэтому решил поднять какую-нибудь простенькую штуку на своём сервере. Вот что получилось.
За основу я взял django, и к шаблону проекта дописал буквально пару строк.
django-admin.py startproject myblog
cd myblog
python manage.py startapp blog
myblog/urls.py
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',                                                      
     url(r'^$', 'interface.views.post'),                                        
     url(r'^(?P<post_id>\w+)/$', 'interface.views.post'),                       
)
blog/views.py
import markdown                                                                 
import interface.static as s
from django.http import HttpResponse

def post(request, post_id='index'):
    f = open(s.POST_PATH % post_id, 'r')
    result = s.PAGE_TEMPLATE % markdown.markdown(f.read().decode('utf-8'))
    f.close()
return HttpResponse(result)
И еще вам пригодится css файл
На всякий случай вот еще репозиторий целиком. Теперь я пишу свой поток сознания прямо в sublime в markdown разметке, нажимаю "сохранить", SFTP плагин загружает файл в папку на сервере и он тут же правильно отображается в браузере. Понятно, что это не продакшен решение для миллионов пользователей, но такой задачи у меня и не было. Если кто-то увидел в этом страшный велосипедизм и знает разумные способы, как добиться такого же результата, делитесь.

Продолжение...


четверг, 10 октября 2013 г.

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


У меня задача была такой: есть несколько школьников(до 10 человек) со своими ноутбуками. На них винда разных версий и степени рабочести. Хотелось как-то задешево сделать им всем одинаковое рабочее окружение на их компьютерах, ничего им не сломав. И совсем хорошо потом иметь между этими окружениями какую-то синхронизацию. Решал я это так:
Вообще ничего сверъестественного я не делал, пост больше как подтверждение возможности реализации такой идеи.
А что делал-то:
1. Купил флешки kingston на 8GB.
2. Поставил на одну из них Xubuntu через VirtualBox(можно и обычным методом, но это нужно выключать компьютер и внимательно выбирать диск при разметке. Установка через VB таких проблем лишена)
3. Загрузился снова через VirtualBox, поставил обновления и нужный софт, настроил синхронизацию.
4. С помощью dd клонировал эту флешку на все остальные.
Собственно всё. Теперь немного подробнее.

Вот флешки:


Для теста взял 4 штуки, если проблем не выявится, докуплю еще.

Ставим линукс.

Качаем образ нужного линукса:
wget http://mirror.yandex.ru/ubuntu-cdimage/xubuntu/releases/12.04.3/release/xubuntu-12.04.3-desktop-i386.iso
Создаём виртуальную машину
Подключаем флешку.
Немного отмечу процесс разбивки диска. Сейчас в компьютерах относительно много ОЗУ(от 1ГБ), и восьмигиговая флешка по сравнению с этим не такая большая. Поэтому я предпочитаю отдавать всё под / и не делать swap. Если так почему-то вообще нельзя делать никогда, расскажите мне почему.

Включаем и настраиваем.

Поставился, теперь попробуем в него загрузиться. По умолчанию VirtualBox так не умеет, но несложно его научить. Хотя официальный представить Oracle и уверяет, что это невозможно. Нужно добавить своего пользователя в группу disk
usermod -aG disk triklozoid
После этого перелогиниться и выполнить такую команду:
sudo VBoxManage internalcommands createrawvmdk -filename ~/temp/usbdisk.vmdk -rawdisk /dev/sdb
где
~/temp/usbdisk.vmdk это где создать файла диска
а
/dev/sdb устройство вашей флешки
В настойках виртуальной машины добавляем диск:
На этом этапе могут появиться какие-нибудь ошибки доступа, нужно проверять права на свежесозданный файл ~/temp/usbdisk.vmdk
Теперь включаем машину, она должна нормально загрузиться с флешки.
Делаем sudo apt-get update && sudo apt-get upgrade(yum, pacman, emerge или что там у вас).
Устанавливаем нужные приложения, настраиваем что нужно.

Про синхронизацию

Для синхронизации я использовал клиент Яндекс.Диска под линукс.
Качаем cтавим настраиваем по официальным докам.
Я использовал такую схему: Зарегистрировал один новый аккаунт на яндексе. Сделал папку у себя и дал доступ на чтение новому аккаунту. И авторизовался в линукс клиенте новым аккаунтом.
Можно конечно как-то усложнить схему и сделать на каждой флешке отдельный аккаунт, но мне лень. :-)

Клонирование.

После того, как настройка всего закончена, можно приступить к магии dd.
Хотя команда очень простая, совсем не магическая, если кто знает магические ключи, которые улучшают всё в миллион раз, делитесь.
КОМАНДУ ЗАПУСКАТЬ АККУРАТНО, С УСТРОЙСТВАМИ НЕ ОШИБАТЬСЯ
А то всё потрёте нафиг.
dd if=/dev/sdb of=/dev/sdc bs=16M
if - откуда
of - куда
bs - размер блока

Конец

Собственно на этом всё, всё работает, можно пробовать. Работает достаточно шустро(особенно питоновая консоль :-)), проблем с железом пока не было. Кроме синхронизации папки с файлами, хотелось бы конечно и набор пакетов тоже синхронизировать, например, через puppet, но на первое время хватит и такого.

Продолжение...


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

Делимся Linux скриншотами в один клик


Это супер короткий пост-заметка, как в Linux сохранять скриншоты на Яндекс.Диск и сразу получать ссылку. Ставим консольный клиент отсюда. Делаем такой скрипт:

#!/bin/bash
xfce4-screenshooter -s ~/Yandex.Disk/screenshots/ -r
yandex-disk sync
yandex-disk publish "$(ls -td ~/Yandex.Disk/screenshots/*|head -n 1)"|xclip

Первую строчку естественно можно заменить на запуск вашей любимой скриншотилки, если ей можно передать параметр, куда сохранять файл. Команду xclip можно заменить на xclip -selection clipboard, если вы хотите вставлять ссылку не средней кнопкой мыши, а по ctrl+v. Подробнее например здесь.

Продолжение...