Pull to refresh
4
0

User

Send message

GNU Make может больше чем ты думаешь

Reading time3 min
Views6.9K
Как только исходники проекта надо распространять, то возникает необходимость использовать систему сборке, вместо того что нагенерила любимая IDE. В мире unix (с подачи gnu) традиционно используется autotools, ему есть отличные альтернативы в виде cmake или scons. Но почему-то ядро Linux собирается при помощи GNU Make, а вся FreeBSD включая порты при помощи BSD Make. WTF?

Однажды намучившись с autotools, я решил провести эксперимент — насколько можно перелопатить Makefile, чтобы обеспечить себе более-менее удобную сборку.

Читать дальше →

Устрой bug fix day

Reading time1 min
Views1.2K
FIXME, TODO, XXX стандартный способ указать в комментариях: «Эй! Будет время — исправь этот грязный хак!». К примеру любимый (и не любимый) многими Eclipse имеет замечательное окошко где отображаются всё TODO по проекту.
Что нам мешает сделать это в vim? Что для этого нужно? grep и quick fix window.
Выполнив в vim команду :grep или :vimgrep, список совпадений будет доступен в quick fix window, доступное по :copen или :cw
Я повесил это чудо на хоткей:
map <F6> :vimgrep /fixme\\|todo/j *.[c,cpp,h,hpp,py]<CR>:cw<CR>

Поменяй расширения на нужные вам, F6 и начинай наконец фиксить!

Умный make

Reading time1 min
Views4.2K
Большенство адэптов vim, которые использую его для работы с кодом, знают про такие комманды как :make и :cw. Первая запускает make, а вторая выводит список ошибок.
Так уж сложилось, что мои основные рабочие (те которые использую на работе :)) языки это Си и C++. И часто бывает, что нужно написать программку в один файл, дабы проверить какой-то алгоритм, функцию или идею. При том писать makefile для одного файла в лом, а так хочется использовать привычную комбинацию клавиш. Набросал замечательный солюшен:
if filereadable("Makefile")
	set makeprg=make\ -j4
	map <C-b> :make<CR>:cw<CR>
else
	map <C-b> :make %:r<CR>:cw<CR>
endif

Как видно суть в том, что запускать просто make при наличае makefile и make имя_файла при отсутствии. make -j4 указывает на запуск четырёх потоков сборки, для двухядерных процессоров самое оно, особенно в сочетании с ключеком -pipe для gcc :)

Окна и буферы

Reading time2 min
Views46K
В vim 7 появились табы — привычный способ навигации по файлам. Когда я работал в eclipse я не раз замечал, что часто скакать между табами не удобно, а знакомство с буферами в emacs натолкнуло на прочтение документации по окнам/буферам в vim.

Читать дальше →

О Viacom и Google

Reading time1 min
Views562
Я думаю вы слышали о судебном разбирательстве между Google и Viacom, которое обязало Google предоставить Viacom все ip адреса и логины с которых были просмотрены ролики (или даже вообще все данные, не уверен).

Вот любят спекулировать параноики о том, как плох google, он следит за нами и т.д., а настоящая опасность исходит от правительств и медиа-холдингов. Представьте будущее, где вы не можете дать почитать книгу другу, а библиотеки (бумажные/электронные) будут отсутствовать как класс. И всякий творческий порыв в музыке или литературе, будет обращаться в коммерцию. И прогресс будет бесконечно тормозиться монополиями и патентами, и будем мы все обламываться так же как и обламываемся сейчас из-за нефтяных баронов.

Звук по сети

Reading time1 min
Views15K
Стоит у меня дома большой комп, используется в основном как телевизор. Кино смотрим на ноутбуке, ибо монитор не сильно больше, а стоит далеко от дивана. Поэтому приходится подключать к ноутбуку либо наушники, либо вторые колонки, либо ползать под стол и вытаскивать из компа шнур. Надоело.

Звуковые серверы в *nix есть давно, arts, esd — классика. Сейчас стандартом заслуженно становиться pulseaudio, в Ubuntu он устанавливается с релиза 8.04, а в Fedora с 8.
Читать дальше →

Бесконечные циклы

Reading time1 min
Views14K
Как ивестно простейший способ получить диапазон чисел в Python это использовать range(). range возвращает список но когда нужно пройтись по большому диапазону лучше использовать xrange(), который вместо списка, возвращает итератор. Но как быть, когда конец диапазона не известен, а использовать while True кажется не эстетичным.
Очень просто:
from itertools import count
for i in count(1): DoSomeWith(i)

Разумеется как только мы получим результат, можем спокойно сделать break.

Расшифруй меня

Reading time1 min
Views855
Дан массив:
int s[26] = {46, 47, 44, 119, 108, 96, 38, 97, 109, 104, 126, 126, 126, 104, 46, 102, 99, 49, 125, 99, 113, 123, 56, 57, 54, 25};
он содержит зашифрованные данные, алгоритм по детски простой. Кто первый расшифрует?

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity