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

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

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

      Читать дальше →
    • Устрой bug fix day

        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

          Большенство адэптов 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 :)
        • Окна и буферы

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

            Читать дальше →
          • О Viacom и Google

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

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

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

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

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

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

                    Дан массив:
                    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};
                    он содержит зашифрованные данные, алгоритм по детски простой. Кто первый расшифрует?