Tag Archives: linux - Page 3

Vim, Vundle, Solarized

Vim – це текстовий редактор, який має кілька менеджерів пакетів. Можливо їх навіть більше ніж в Windows, тому що враховуючи те що найкращий менеджер пакетів для Windows – Cygwin.

Зараз для мене якраз актуально розповісти про те як швидко розгорнути Vim в звичній конфігурації. Розповідатиму мінімально на прикладі теми Solarized.

Отож, перше (нульове – це мати в системі git) що треба зробити – встановити сам менеджер пакетів:

$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

Далі – заповнити .vimrc наступним:

"----------- VUNDLE ---------------------
set nocompatible
filetype off

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

Bundle 'gmarik/vundle'
Bundle 'altercation/vim-colors-solarized'

filetype plugin indent on     " required!
"------------- END VUNDLE ---------------

syntax enable
set background=dark
colorscheme solarized
set t_Co=16

Додавати пакети треба в .vimrc там де я вже додав два потрібні, за допомогою команди Bundle, параметром якої є репозиторій GitHub, пряме посилання на .git-файл, чи просто назва скрипта на vim.org/scripts.

Після додання пакетів в .vimrc потрібно виконати команду :BundleInstall і вони інсталюються.

Далі виявиться що потрібно налаштувати кольори в відповідному терміналі, в якому ми Vim запускатимемо. В Gvim все і без цього буде нормально. В Cygwin я вже забув як налаштував, а в Terminal 0.4.8 для xfce ось так:

$ wget -O ~/.config/Terminal/terminalrc https://raw.github.com/altercation/solarized/master/xfce4-terminal/dark/terminalrc

Для Guake трішечки складніше:

$ git clone https://github.com/coolwanglu/guake-colors-solarized.git
$ guake-colors-solarized/set_dark.sh

І от маємо обидва термінали з Vim:
solarized vim in terminals


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

Як в 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

Моє XVideo позеленіло :(

Вчора не міг заснути. Мучило невирішене питання. Яким чином mplayer може рендерити купу fps в повноекранному режимі, встигаючи при цьому читати з диска і робити декодинг. В такому разі я повинен могти отримати ще більше fps при рендерингу якоїсь функції виду

RGB video(int x, int y, int frame);

Зранку встав і почитав про mplayer -vo help. Помилувався драйвером matrixview.

Почитав про X Video, там знайшов посилання на демо-код, і вирішив спробувати скомпілювати: “gcc -o testxv testxv.c -L/usr/X11R6/lib -lX11 -lXext -lXv“. Вийшло не зразу. Після встановлення пакетів libx11-dev, x11proto-video-dev, libxcb-xv0-dev, libxv-dev.

Скомпілювалось, і почав гратись. Чомусь ніяк не міг отримати ніякого кольору крім зеленого і чорного. Навіть написав функцію перетворення кольорової моделі з моєї улюбленої RGB в якусь незрозумілу YUV.

Може неправильно?

Нічого. А ще гірше, що коли змінив роздільну здатність, то fps впали до 10-15.

Отака пічалька. :(

Може використати SDL? Напевне я спробую SDL. Там hello world точно коротший.

P.S. Поки навіть не знаю що я хочу намалювати. Може потенціал електричного поля в системі з кількома рухомими зарядами, або анімацію якогось фрактальчика, але руки сверблять просто зробити і знати що я це можу.


Filed under: Графіка, Кодерство Tagged: С++, linux

Найпростіший спосіб вимірювання найгіршої метрики

Або іншими словами – примітивний облік робочого часу в лінуксах.

Для цього є команда – last. Дозволяє подивитись в логах час останніх входів і виходів з системи. Якщо наприклад дати команду

last 7 # еквівалентно last tty7

Дізнаємось хто коли і скільки користувався сьомим терміналом:

bunyk    tty7         :0               Thu Feb  2 08:30 - down   (09:32)

Вдома попробував – не працює. А виявляється все тому, що є певна конфігурація ротації логів /etc/logrotate.conf, в якій написано – monthly.

Але команду я дізнався на початку місяця, коли ще жодних логів не було навіть на роботі. Якось неправильно ця ротація працює. Вдома логи чомусь все одно ведуться за один день, хоча я й написав що хочу місячну ротацію. Може не в ті логи написав.

А ще збацав коротенький скриптик, який бере дані з last, і рахує середній робочий час:

#!/usr/bin/python3
import re
import subprocess 

def hours(s):
    s = s.split(':')
    return float(s[0]) + float(s[1]) / 60

def to_str(x):
    h = int(x)
    m = 60 * (x - h)
    return '%s:%s' % (h, int(m))

output = subprocess.check_output(['last', '7']).decode('utf-8')

data = (re.findall(r'\((\d\d:\d\d)\)', x) for x in output.splitlines())
data = [hours(x[0]) for x in data if x]

print(output)
print('Average time: ', to_str(sum(data)/len(data)))

bunyk@bunyk-laptop:~/workspace/uaprom$ /home/bunyk/experimental/timestat.py 
bunyk    tty7         :0               Thu Mar 22 09:32   still logged in   
bunyk    tty7         :0               Wed Mar 21 10:37 - 19:51  (09:13)    
bunyk    tty7         :0               Tue Mar 20 11:48 - down   (08:16)    
bunyk    tty7         :0               Mon Mar 19 11:38 - down   (07:14)    
bunyk    tty7         :0               Sat Mar 17 09:45 - down   (08:36)    
bunyk    tty7         :0               Fri Mar 16 10:35 - 19:23  (08:48)    
bunyk    tty7         :0               Thu Mar 15 10:22 - down   (08:47)    
bunyk    tty7         :0               Tue Mar 13 10:02 - 19:44  (09:42)    
bunyk    tty7         :0               Mon Mar 12 12:08 - 20:34  (08:25)    
bunyk    tty7         :0               Wed Mar  7 10:29 - down   (07:42)    
bunyk    tty7         :0               Tue Mar  6 09:54 - down   (09:50)    
bunyk    tty7         :0               Mon Mar  5 11:15 - 19:32  (08:16)    
bunyk    tty7         :0               Sat Mar  3 11:21 - down   (07:03)    
bunyk    tty7         :0               Fri Mar  2 12:08 - down   (08:00)    

wtmp begins Thu Mar  1 18:46:07 2012

Average time:  8:27

Виходить що я трохи більше ніж пів-години на добу недопрацьовую. Правда шпигунський роман Тоні ДеМарко розповідає про те що до програмістів краще не застосовувати метрики, бо ті хитрі зарази знайдуть спосіб максимізувати метрику не покращуючи продукт. Якою гарною ця метрика не була б (хай навіть зміною відношення кількості вад до кількості функціоналу). А Тоні ДеМарко – виявляється в вікіпедії стоїть поруч з такими гігантами як Вард Каннінгам, Мартін Фаулер і навіть Тоні Хоар. Напевне варто познайомитись детальніше. Правда часу нема. Але якщо він не важливий, тоді важливе лише те що я вважаю важливою дією в кожен момент часу.


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

Знайомі незнайомці: file, ln та lost+found

Досі мені ні разу не доводилося відновлювати файлову систему після краху або неправильних дій користувачів, проте одного дня я сам «прострелив собі ногу» в стилі UNIX: вилучив половину файлів двотерабайтного сховища на сервері. В цю особливо похмуру ніч я запустив перебудову файлової системи з метою знаходження старих невилучених файлів, і вже на ранок я отримав більш-менш відновлену файлову систему, а в її корені з’явилась вищеозначена директорія lost+found.

Відкривши директорію я побачив 180 гігабайт файлів з дивними назвами без жодного натяку хоча б на приналежність до типу файлу. Так, це і були відновлені файли. На фоні цього хаосу так само дивно названі директорії виглядали ледве не оазисами в пустелі: адже в них вціліли справжні імена файлів. Проте 180 гектар вручну не просієш, і я вирішив для початку оцінити масштаби трагедії і знайти більш-менш адекватний спосіб витягти з того хаосу частинки необхідних мені даних. І ось тут почалось найцікавіше. Read more »

Автоматичне налаштування Wi-Fi в Debian

Я звик носити з собою власний ноутбук, постійно переключаючись між двома різними точками доступу до мережі інтернет: вдома та на роботі. З тиждень я мирився з тим, що необхідно щоразу перенастроювати параметри бездротового підключення. Використання сторонніх засобів для збереження та перенастроювання Wi-Fi підключення мене особливо не радувало, до того ж, моєю метою було ще й максимально зручне управління мережевими підключеннями як в графіці, так і в терміналі. Пам’ять нагадала мені, що подібна ситуація вже передбачена в файлі мережевих налаштувань /etc/network/interfaces. Read more »

Пишемо інсталятори в Linux

Мабуть, немає таких людей в середовищі Linux-користувачів, яким би не доводилося ставити закрите або комерційне програмне забезпечення. Не раз доводилось бачити “рідні” для цього виду програм інсталятори: графічні чи консольні, але завжди своєрідні. І поширюється програма разом з інсталятором в одному сценарії для командного інтерпретатора. А чи може хто-небудь написати власну програму-інсталятор, налаштувати її під себе? . Сьогодні, шановний читачу, ми навчимося писати інсталятори для UNIX.

Read more »

Ви все ще використовуєте bash? Тоді ми до вас!

Вже давним-давно хотів зрозуміти причину страшенних війн стосовно командної оболонки (shell). З Bash я був знайомий з самого початку мого використання Linux, але майже ніхто його не хвалив. Так, всі казали, що це дефолтний, громіздкий командний інткрпретатор, додаючи ще купу епітетів явно не на його користь. І ось одного разу я таки вирішив спробувати щось інше.

Коли новенький ZSH стартував як мій дефолтний шелл, я ще дуже довго не міг зрозуміти, чим же він настільки хороший. Це якраз той варіант, коли баш виглядав краще, оскільки був дефолтним і мав вже деякі настройки хоча б того ж запиту на ввід ($PROMPT, $PS[1-4]), а тут споглядання картини

localhost%

ніяк не радувало. Так моє перше знайомство і закінчилося б, якби мені не було ліньки поставити баш назад (думка “дай ще потестю, мож ще що цікаве вилізе” промайнула у мене в мізках і вирішила хід подій). З часом я звик до цього шелла, його невеликих особливостей, і нарешті почав бачити різницю в швидкості роботи (порівнюючи роботу bash і zsh на різних користувачах).

А поки час ішов, я ще не раз бачив деякі “розфарбовані” екземпляри все того ж ZSH, і мені кортіло нарешті й собі таку цяцьку. І ось нарешті моя мрія здійснилась, і я з вами всім цим щастям поділюсь 🙂 .

Read more »

MS Visual Studio-подібна IDE для Linux

Програмісти можуть дудіти в труби та фанфари, бо тепер і для Linux, здається, з’явилась достойна IDE. Поки її не тестив ще, але судячи по опису має бути дуже приємна річ. Нещодавно проект Mono (той, що займається портуванням C# та .NET на Linux) випустив і власне середовище розробки: MonoDevelop, інтерфейс якогодуже сильно нагадує Майкрософтівську студію. Нещодавно вийшла перша (1.0) версія продукту. Це потужне IDE, звісно інтегроване з Mono C#.  Але не лише. Офіційно також пдтримуються C/C++, Java, Visual Basic.NET та деякі інші. Компіляція C/C++ коду здійснбється за допомогою компіляторів GNU gcc та g++  і для цих мов підтримується (ура!) автодоповнення коду (code completion), спливаюча інформація, навігація по коду та інше. Більше того, MonoDevelop може навіть завантажувати деякі додатки Visual Studio, інтегрується з Subversion для контролю версій, підтримую юніт-тестинг та дозволяє створювати власні додатки.

Шпаргалка юніксоїда

Не знаю наскільки давно з’явилась ця штука і може баян, але користь від неї важко переоцінити. Так ось, представляю вашій увазі шпаргалку юніксоїда. Цей документ – набір Unix/Linux/BSD команд, які знадобляться як людині, яка займається інформаційними технологіями в юнікс-середовищі (програмістам, адмінам), так і просто просунутим користувачам. В цьому мануалі є короткі пояснення, але вважається, що користувач знає, що він робить.

Останняю версію (наразі вже 11-ту) “шпори” можна знайти за адресою: http://cb.vu/unixtoolbox.xhtml. Якщо в цій адресі замінити розширення .xhtml на .pdf, то ви отримаєте PDF-версію, а якщо на .book.pdf, то версію PDF у вигляді буклету. Якщо роздрукувати буклетну версію на принтері з двостороннім друком, то отримаєте маленьку книжку, готову до прошивки. Рекомендую 😉