Monthly Archives: Травень 2013

Презентація в стилі Python (і в файлі .py)

Мій блог дуже часто знаходять за запитом “Як робити презентації?”, і судячи з середньої оцінки для тої публікації, вона сильно не задовольняє більшість читачів. Тому зараз я поділюсь ще одним, теж досить екстравагантним способом створювати презентації, який повинен сподобатись лише людям що чули слово PyCon. :)

Дізнався я цей спосіб, бо щойно подивився доповідь Петера Інґлесбі Discovering Descriptors на EuroPython 2012. Доповідь класна, я трішки просвітився щодо дескрипторів, хоча звісно варто почитати і покодити ще.

Окрім самого змісту доповіді мене зацікавило оформлення. Все відбувається в інтерактивній оболонці. Коли автору потрібно показати якийсь список – цей список з’являється як рядки з коментарями. Тобто доповідач говорить, а в інтерактивній оболонці з’являється то код (який одразу й виконується), то коментарі до доповіді (аби доповідач не пропустив якогось важливого питання)…

Я пошукав – вся презентація вміщається в один текстовий файл. Звичайно є мінуси порівняно з офісними програмами для створення презентації, наприклад відсутність можливості додати в неї зображення, але можна при потребі трішки подумати, написати функцію яка відкриватиме й показуватиме на екрані зображення, а потім вставляти її виклики в потрібні місця коду презентації (він ж бо виконується).

Тому коли я наступного разу робитиму якусь доповідь про мову Python, робитиму її саме в такому форматі. Раніше я робив в HTML з Slippy, але це аж надто марудно…

Якщо ви теж хочете таку презентацію показати – все робиться просто і швидко:

sudo pip-3.2 install prescons
python3 -m prescons presentation.py 

В мене правда були проблеми з запуском, але я вже зробив pull request, автор скрипта в курсі, тому у вас проблем виникнути не повинно.

Коли презентація запущена, пробіл показує наступний рядок, Ctrl+C – перемикає режим з показу рядків файлу на інтерактивний ввід та назад… Ctrl+D – завершення роботи.

Як знаки прояву вдячності за цю пораду, я приймаю посилання на відео ваших цікавих доповідей. ;) Або як крутіший варіант – зробіть хтось так аби там був bpython, а не звичайний інтерпретатор…


Filed under: Інструменти, Кодерство Tagged: Python

Як в Linux завантажувати аудіо з списків відтворення vk.com?

Зазвичай я не використовував ніяких лишніх інструментів для того аби качати аудіо з вконтакту, бо всі інструменти вже є в лінуксі, досить лише зберегти плейліст в файл audio.html, та виконати:

wget -c `grep https://.*mp3 -o audio.html`

Але тоді каталог заповнюється файлами виду 7b6e2b1e3f81.mp3 і хоча й більшість mp3 плеєрів читають їх теги і нормально керують колекцією музики, все одно важко наприклад чистити каталоги від зайвих, чи копіювати потрібну музику за маскою. Тому я вирішив написати трішки кращий фільтр ніж grep.

Для його використання потрібно вже дві команди:

wget -O list.py https://bunykprogs.googlecode.com/hg/vk_downloader.py
python3 list.py audio.html | sh

Але результат повинен виправдати зусилля. Перший рядочок – “інсталяція” додаткового скрипта, другий – його виконання. Щоб все працювало, ви повинні мати wget, python3 та lxml для python3.


Працює скрипт просто роздруковуючи команди скачування в термінал. Щоб їх виконати, не обов’язково перенаправляти вивід в файл, можна зразу в sh.

Ви можете запитати, а чому я не зробив так аби скрипт сам скачував аудіо, а не генерував код на sh який це робить? Та тому, що з цим я можу зробити наприклад таке:

python3 list.py audio.html | grep "German" | sh # скачати все з словом German в назві файлу
python3 list.py audio.html | wc -l # показати довжину списку.

Хоч одна програма для викачування музики з вконтакту так вміє? От, от.

Код виглядає ось так:

import sys

from lxml import html
from lxml import etree

def clear_param(txt):
    return txt.strip().replace('"', r'\"')

def parse(fl):
    tree = html.parse(fl)
    elements = tree.xpath('//div[@id="initial_list"]//input')
    urls = []
    for el in elements:
        urls.append(el.attrib['value'].split(',')[0])

    elements = tree.xpath('//div[@id="initial_list"]//div[@class="title_wrap fl_l"]')
    for el, url in zip(elements, urls):
        performer = clear_param(el.xpath('b/a/text()')[0])
        title = clear_param(el.xpath('span[@class="title"]//text()')[0])
        print('wget -c -O "{performer} - {title}.mp3" "{url}"'.format(
            url=url, performer=performer, title=title
        ))

def main():
    if len(sys.argv) > 1:
        parse(sys.argv[1])
    else:
        print('Pass file name', file=sys.stderr)


if __name__=='__main__':
    main()

Filed under: Інструменти, Кодерство, Павутина Tagged: музика, linux, Python

Дівчина-салат

Дівчина-салат – це робоча назва прототипу підручника німецької який я на тих вихідних створив, але все не мав нагоди про це написати.

Власне якби я був голлівудським продюсером, я б вже давно на додачу до людини-павука, людини-кажана, жінки-кішки і решти людей-гібридів зняв би “дівчину-салат”. Це історія про дівчинку яка народилась від того що її мама з’їла генетично-модифіковану рослину (а які ви думаєте ще можуть рости на городі у відьми?) з виду Valerianella locusta, також відому як Рапунцель. А вони зняли якусь “Заплутану історію”, яку я не дивився, зате, прочитав оригінал братів Грімм. Казка містить глибоку мораль, суть якої в тому, що коли дітей недостатньо виховали, то навіть якщо їх замкнути в вежі, це не допоможе.

Казочку я читав мовою оригіналу, і це перший текст німецькою який я осилив. Осилив я його активно заглядаючи в словник, і виглядало це ось так:

Рапунцель з нотатками

Рапунцель з нотатками

І під час того я постійно думав, що це взагалі мій улюблений спосіб вчитись, тому що це не нудно і швидко набирається словниковий запас. Але чи вчусь я, поки гортаю сторінки словника? Здається єдине чого я вчусь – швидше відкривати потрібну сторінку і швидше знаходити на ній слово. На запам’ятовування самого слова йде менше часу і це напевне не добре.

Тому я подумав, що класно було б мати книжки, де словник знаходиться прямо на тій сторінці яку я читаю. Як в Gerda malaperis! (коли з’явиться українська стаття, нагадайте замінити посилання, не соромтесь). Gerda malaperis звісно виняткова книжка, бо написана саме з навчальною метою і на жаль аналогічних я більше не знаю.

Ще я подумав що подібним чином можна адаптувати звичайні твори. І саме для цієї мети мають чудово підходити зноски які вміє робити LaTeX. Їх було так багато, що довелось застосувати деякі нестандартні модулі аби спростити нумерацію. А ще довелось застосувати XeTeX, він знає про Unicode-шрифти. Бо в звичайному TeX Live отримати одночасно німецькі умляути й кирилицю дуже важко.

Є ще метод Іллі Франка, але він мені чомусь не дуже йде, напевне тому що там дізнаватись значення слова занадто просто і я ловлю себе на тому що читаю не німецькою а російською, пропускаючи все що не в дужках.

Коментарі щодо мого розуміння німецької граматики (і української), підказки щодо вдосконалення оформлення видання (ось код для XeTeX, рев’ю можна робити як тут, так і прямо на Google Code) та інша критика вітається.


Filed under: Всяке, Конспекти, Розмітка Tagged: deutsch, книжки, освіта

Як встановити пакет LaTeX, та як зробити так щоб зноски починали нумеруватись на кожній сторінці заново?

Спочатку відповім на друге запитання, бо воно простіше. В заголовку документа прописуємо:

\usepackage{perpage}
\MakePerPage[1]{footnote}

Друга команда вказує на те що зноскам варто на кожній сторінці починати нумерацію з 1.

При компіляції документа може вилізти така помилка:

! LaTeX Error: File `perpage.sty' not found

Це означає що вам бракує встановленого пакета bigfoot.

Потрібно завантажити архів, розпакувати його, та запустити команду latex bigfoot.ins. Вона розпакує з файлу bigfoot.dtx інші файли.

Далі нам потрібен лише perpage.sty. Його треба скопіювати кудись, а щоб дізнатись куди, для TeX Live потрібно виконати таку команду:

bunyk@xubuntyk:~/bigfoot$ texhash
texhash: /usr/local/share/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: Done.

Я вибрав /usr/local/share/texmf і створив там шлях tex/latex/bigfoot. Куди й кинув файл perpage.sty (повний шлях /usr/local/share/texmf/tex/latex/bigfoot/perpage.sty).

Далі потрібно запустити:

bunyk@xubuntyk:~/bigfoot$ sudo texhash

Це все, документ скомпілювався і я досяг чого хотів, а якщо хочете, можете читати більше про встановлення пакетів.


Filed under: Кодерство, Розмітка Tagged: LaTeX