26.11.2009

Bash в bash-е, в bash-е, ..., в bash-е.

Думаю, всем знакома ситуация, когда, во время компиляции какого-либо ПО, выполнение `./configure` останавливается с сообщением о неудовлетворенной зависимости. И приходится установить что-нибудь еще и не одно, и не только из репозиториев, а еще и скомпилить что-нибудь другое, а там тоже зависимости.

Если всё это делать в одном терминале, то неизбежны: путаница в зависимостях, безуспешное копание в истории ввода и прочие пляски. Можно, конечно, для каждой задачи открывать новую вкладку в терминале или новый терминал, но тут может вмешаться параллельная задача и порядок задач будет нарушен, и открутить его в обратную сторону будет уже очень сложно - опять бардак.

Достаточно давно я выработал для таких случаев очень удобный, на мой взгляд, способ - рекурсивный запуск `bash`. Если для установки или сборки какого-либо приложения требуется установить или собрать что-нибудь другое, то в момент возникновения такой необходимости я запускаю `bash` прямо в этом же терминале. Это можно делать несколько раз, потом выходить из последнего запущенного экземпляра и получать действие, которое потребовало удовлетворить его зависимости предпоследним в истории. Примерно вот так:
lig@host:~/soft/application$ ./configure
Failed
"dependency" required
lig@host:~/soft/application$ bash
lig@host:~/soft/application$ sudo aptitude install dependency
lig@host:~/soft/application$ exit
lig@host:~/soft/application$ ./configure
Success
lig@host:~/soft/application$ 
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/e. Код раскрашен с помощью Paste.NoPHP.ru.

Однако, мне всегда не давало покоя, что я не вижу уровень вложенности `bash`. И вот недавно с небольшой посторонней помощью дошел до решения.

Небольшая добавка в `~/.bashrc`, которая добавляет в приглашение командной строки отображение уровня рекурсии начиная с ноля:
if [ -z $recursion ]; then
    recursion="0";
    export recursion;
else
    recursion=$(($recursion+1));
fi;

PS1='$recursion:'$PS1
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/c. Код раскрашен с помощью Paste.NoPHP.ru.

После добавления этого кода в `~/.bashrc` первый листинг будет выглядеть вот так:
0:lig@host:~/soft/application$ ./configure
Failed
"dependency" required
0:lig@host:~/soft/application$ bash
1:lig@host:~/soft/application$ sudo aptitude install dependency
1:lig@host:~/soft/application$ exit
0:lig@host:~/soft/application$ ./configure
Success
0:lig@host:~/soft/application$ 
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/f. Код раскрашен с помощью Paste.NoPHP.ru.

Вот так-то лучше:)

24.11.2009

«Вредная» монополия Microsoft

По мотивам новости «Microsoft откроет свои магазины рядом с магазинами Apple» (news.techlabs.by) и обсуждения в рассылке SPb LUG.
Монопо́лия (от греч. μονο (mono) — один и πωλέω (poleo) — продаю) — фирма (ситуация на рынке, на котором действует такая фирма), действующая в условиях отсутствия значимых конкурентов (выпускающая товар(ы) и/или оказывающая услуги, не имеющие близких заменителей). Первые в истории монополии создавались сверху санкциями государства, когда одной фирме давалось привилегированное право торговли тем или иным товаром.
(wikipedia)
Тут надо понять что есть рынок в нашем случае. Рынок операционных систем? Вряд ли. Скорее рынок коммерческого ПО. А Linux - это ПО с открытым исходным кодом, т.е. MS не конкурент Linux и Open Source в целом. Ух ты!

А теперь вспомним, что конкуренция - это хорошо. А почему? А потому что конкуренция - это двигатель прогресса. Конкуренция заставляет соперничать и разрабатывать новое, полезное пользователю.

Но, если Microsoft - монополист, то им не надо будет развивать свои продукты? Это же хорошо. Это значит, что Open Source победит тогда и только тогда, когда перестанет лезть в коммерческие и области. Тогда, когда мы найдем для него некоммерческий рынок сбыта, такой же емкий, как комерческий.

Если главный путь распространения коммерческого ПО - это магазины, значит ПО с открытым исходным кодом надо раздавать с другой стороны двери, т.е. на улице. Да, так и только так.

04.11.2009

Лопни.ру - рейтинг блогов и блоггеров

В связи с тем, что Яндекс через месяц закрывает рейтинг популярных записей в блогах, вместо которого теперь есть API статистики записей Поиска по блогам, сделал сервис "Лопни.ру".

На "Лопни.ру" есть 3 рейтинга: 2 рейтинга записей и рейтинг блоггеров.

Немножко о рейтингах:

  • Горячие обсуждения - это рейтинг самых активно обсуждаемых и цитируемых записей в блогах за последние 24 часа. Обновляется этот рейтинг каждые 10 минут. Однако, горячие темы держатся дольше, поэтому реальные изменения происходят не так часто.
  • Самое интересное - это рейтинг, который вычисляется по хитрой формуле, отражающий общую заинтересованность читателей каждой записи. С первых дней этот рейтинг наполнился темами "на злобу дня", к которым мало кто может остаться равнодушным. Обновления этого рейтинга происходят каждый час. Реальные изменения заметны в течение одного-двух дней.
  • Рейтинг блоггеров - здесь мы выделяем самых интересных блоггеров. Людей, чьи записи чаще интересны их читателям. Мне результаты нравятся уже сейчас. Однако, говорить о реальных результатах можно будет после нескольких дней работы "топа".
Сейчас статистика, которую отдает Яндекс все время пополняется. Рейтинг будет изменяться и становиться более объективным. Я думаю, что совсем красивым он станет через недельку.

При создании рейтинга блогов и блоггеров "Лопни.ру" использовались следующие технологии: Python, DjangoUniversal Feed Parser.