пятница, 28 марта 2008 г.

Как создать свой проект на SourceForge.net - 3

Ну, дорогие мои проектовладельцы, наверняка у вас уже есть что готовое, что можно выкладывать. Хватит других смотреть, пора и себя показать.

Тема сегодняшнего пояснения - релизы.

Идём в Admin -> File Releases.
Здесь видим File Release Packages. File Release Package - это некоторый набор файлов, которые будут объеденены одной версией, одним Changes Log, Release Notes.

Для начала просто создадим пакет с именем таким же, как у проекта. Потом его можно будет изменить. Но не удалить! Так что не создавайте всякой ерунды.

Итак File Release Package создан. Теперь нужно закачать релизные файлы на сервер. Просто закачайте их на FTP: ftp://upload.sourceforge.net/incoming. Причём включите номер версии в имя файла, так как один пакет не может содержать файлы с одинаковыми именами.

Затем входим в недавно созданный пакет и создаём новый релиз - Add Release.
Там заполняем необходимые сведения о новом релизе, в том числе и выбираем недавно закачанные на ftp файлы.

Всё. Релиз готов. Теперь можно сидеть и наблюдать как растёт количество закачек :)

О телеЕЛЕвидении.

Поучаствовал недавно на съёмках токшоу "Ответный ход" на первом национальном (бла-бла-бла... в народе - БТ). Сходил из любопытства - не часто доводится поучаствовать в съёмках ток шоу, пусть и такого хиленького, как "Ответный ход". Да и перспектива помелькать лицом в ящике немного радовала. Говорить я ничего не собирался, но этого и не требовалось - говорящих хватало.

В общем, тема передачи "Компьютерная и интернет зависимости". Как обычно одна сторона за, другая против. Собственно, уже тут можно было почуствовать неладное. Что значит ЗА? За зависимость? Даёш, мол зависимость в каждую советскую семью? Меня посадили на трибуну ЗА, даже не спросив моего мнения. А может быть я был яростно против ? Впрочем, я не жалуюсь - температура на этой трибуне была приемлимая, кресла умеренно мягкие и никакой софит в рожу не светил.

Съёмка передачи походила примерно так, как я и представлял. Ну о чём тут можно спорить? Одна сторона говорила, что нужно сидеть в интеренете сколько надо, но не больше. Другя, что излишки вредны. Вобщем особого различия мнений я не заметил. Зато атмосфера оказалась немного иной, чем я предполагал. Через некоторое время я забыл о камерах, и был готов плюнуть своё возражение во вражескую трибуну. Но возражать было нечему :( Только одна, пожалуй, фраза вызвала во мне желание достать шпагу. Фраза "Интернет это же большая помойка...". Ну, как говориться, что ожидаеш увидить, то и увидиш... Но микрофона не рядом не случилось, да и тему никто не поддержал.

По ящику я передачу конечно же пропустил. Я и так редко смотрю его, а уж БТ и подавно. У нас дома идёт 46 каналов, а БТ под номером 35. Можно догадаться, как часто я его вижу на экране. Я бы поместил его последним номером исключительно из вредности, но на 40-46 каналах у меня спорт, который я смотрю ещё реже (если такое вообще возможно)

Вобщем, впечатления двойственные. Была бы тема поострее, можно было бы ввязаться в полемику, а так... скука. Не зевал исключительно по причине не желания сверкать дыркой вместо зуба в челюсти перед камерой.

пятница, 21 марта 2008 г.

Наша гордость...

Кто ещё не видел нашу национальную библиотеку? Нашу, так сказать, гордость и национальное достояние?
Ну, примерно где-то так:

четверг, 20 марта 2008 г.

Futufama и Linux. Казалось бы, что общего ?

Чем дальше я проникаюсь идеями Linux-а, тем больше он мне нравится. А Windows.... Признаем, господа, что Windows - ботва. Да, легко установить, легко пользоватся. Но она отупляет и ограничивает. Да, да. Сейчас объясню.

Как извстно всем поклонникам мультсериала Futurama, есть 2 версии разбиения серий на сезоны.
1-ый от создателей. Так сказать оригинальное разбиение.
2-ой от телеканала Fox, которая транслировала этот сериал.

Причём, FOX не постеснялся разбить 4 сезона на 5, и более того, пеерпутать некоторые серии !

У меня дома были все серии в разбиении FOX.
Основательно подумав, я решил, что нужно восстановить справедливость, и пересортировать в оригинальном порядке. С другой стороны, FOX порядок тоже хотелось сохранить.
Но, "справедливость прежде всего" подумал я.. и тут меня осенило.

Что за ерунда ? Мы же в нормальной операционной системе. Почему бы не оставить порядок FOX в виде симлинков на файлы в оригинальном порядке?
Сказано - сделано.

Спрашивается, почему в "человеческой" Windows нет ссылок? А вот нечего мозги распускать. За вас уже подумали товарищи из Редмонда...

среда, 19 марта 2008 г.

Покупающим DVD приводы к ноутбуку - предостережение.

С неделю назад я задумался о покупке нового винчестера в домашний сервер. 320 гигабайт забиты непонятно чем, а место нужно. Подумав про 400 я перешёл к 500 гигабайтным винчестерам. Затем плавно перешёл от IDE к SATA+контроллер. Но внезапно передумал и решил купить DVD-RW привод в свой ноутбук (в котором до этого момента был только читающий DVD привод).

Сказано - сделано. На следующий день я быстро обзвонил местные железячные конторы, нашёл нужное - "DVD-RW привод, без обвязки" за 70 у.е. и тут-же купил.
На вопрос "тут будем вставлять, или сами ?", я разумеется гордо ответил, что сам и уехал домой.

Радость была не долгой. На первый взгляд такой-же привод, как старый, но в предназначенное гнездо он просто таки ввалился. Странно, подумал я и вынул привод. Сравнив разъёмы я пришёл в жесточайшее уныние. Разъёмы были разные, да ещё и в разных местах. Погрустив некоторое время, я (что мне свойственно) стал думать. Какой я идиот, почему бы не вставить было на месте ? И какие же подноки обитают на фирме. Обещали что подходит ко всем ноутбукам... Я даже модель своего ноута уточнял по телефону. И тут на тебе - "DVD-RW привод, без обвязки, ко всем ноутбукам...." Стоп, стоп - "без обвязки"... "без обвязки"! Ну так и есть. На моём старом приводе были накручены небольшие (а местами и довольно большие) полоски металла. "Ага !" сказал я и поехал за отвёртками, так как винтики были совсем маленькими. Собственно из за этих винтиков я и не подумал, что "обвязка" может с привода откручиваться. Выглядело как единое целое.

Раскрутил "обвязку", снял переходник для интерфейса, обрадовался и стал прикручивать на новый привод.

"Вот те на...." Мягко расстроился я. Не подходит ! Гадство. Часть железок прикручивается, а чать - нет. Дырки не сходятся...

Вобщем так и живу. Прикрутил переходник для IDE интерфейса и вставил привод в гнездо. Он там конечно болтается, но работает. Уже успел записать 15 DVD дисков и основательно почистить место на сервере.
В перспективных планах - купить подходящую обвязку... Да где её найти....

понедельник, 17 марта 2008 г.

Просто о sed

Почему-то поголовно все руководства по sed, которые мне попадались на глаза, являлись простым переводом соответствующей страницы MAN руководства. Причём некоторые предложения я вообще не мог понять, а они так и продолжали кочевать из одного руководства к другому.

Поэтому я решил написать своё руководство, не такое полное, зато более понятное.

1. Что такое sed, и зачем его едят
Подробностей я здесь разговаривать не буду. В кратце, sed (streaming editor), позволяет обрабатывать огромные объёмы текста, если нужно выполнить над ним шаблонные действия. То есть, заменить то на сё, склеить строки там и сям, удалить то и это.
Как работает sed? Утилита берёт строку текста и пробует к ней применить скрипт редактирования. Затем следующую строку, следующую, и так пока не достигнет конца текста.

2. Командная строка sed
Тут только необходимые основы. Подробности в MAN.
Запускаем sed так:
sed [опции] [имя файла(ов)]
Если имя файла не задано, то читается стандартный вход. Результат подаётся на стандартный выход.
Опции:
-e 'скрипт' - задаёт скрипт обработки данных в виде строки. Скрипт можно написать на нескольких строках!
-f файл-со-скриптом - задаёт файл со скриптом.
-r - использовать расширенные регулярные выражения (более удобно на мой взгляд)
-n - не выводить текст пока мы явно об этом не попросим в скрипте.
Вобщем всё просто.

3. Области редактирования и удержания
sed имеет 2 области (буфера), которые могут содержать текст:
  • Область редактирования (pattern space), куда помещается очередная строка. Именно над этой областью производится редактирование.
  • Область удержания (hold space) - буфер куда можно положить промежуточный результат. Что-то вроде регистра калькулятора :)
4. Синтаксис команд редактирования
Команды редактирования отделяются друг от друго символом ';' или разносятся на разные строки. Однако после некоторых команд, ';' игнорируется (такие команды как a, c, i)

Синтаксис команды довольно прост:
<условие применения><команда><аргумент команды>
Не все команды содержат по 3 составляющие. Единственным пожалуй обязательным элементом является сама команда. Между всеми тремя составляющими можно вставлять пробелы, а можно и не вставлять - как кому нравится.

Условие применения
Условие применения, это некоторое условие, которое указывает, нужно ли применять команду к текущей области редактирования (обычно это очередная строка из файла).
Для людей, знакомых с функциональным программированием, очевидно, что <условие применения> есть ни что иное, как pattern matching
Остальные могут представить команду, как
if(pattern_space like <условие применения>) then <команда><аргумент команды>
То есть, если область редактирования удовлетворяет условию применения, то выполнить команду.

Есть несколько видов условий, наиболее простые это:
  • Номер строки. Применить команду только к определённой строке ($ - к последней строке). Примеры:
    1 - применить к первой строке
    10 - применить к 10-ой
  • Регулярное выражение. Применить команду только если текущая область редактирования совпадает с регулярным выражением. Примеры:
    /^Hello/ - применить к строкам, начинающимся с Hello
Условие может быть диапазоном строк и состоять из 2-х элементарных условий. Первое указывает начало а второе - конец диапазона. Например:
1,10 - строки с первой по 10-ую.
/^A/,20 - строки с строки начинающейся с A по 20-ую строку.
2,+10 - 10 строк, начиная со второй строки.
Однако нужно помнить, что не все команды принимают диапазоны.

Символ ! после условия, инвертирует его.
5,10 ! - обрабатывать всё, кроме строк с 5-ой по 10-ую

Остальные виды адресации можно посмотреть в MAN

Группировка команд
Под одно условие может попадать несколько команд. В таком случае необходимо использовать группирующие скобки - {}
1 {
<здесь несколько строк с командами>
...
}

Команды редактирования данных
Даю наиболее ценные, с моей точки зрения команды. (Остальные можно посмотреть.... да, в MAN)
s/регулярное выражение/замена/ - заменить текст в области редактирования, подпадающий под регулярное выражение на текст замены. Можно использовать \1 ... \9 для ссылки на группы в регулярном выражении. Диалект выражений зависит от опции -r
p - вывести текущее содержимое области удержания. Если не использовать опцию командной строки -n, то эта команда автоматически выполнится в конце скрипта.
b label - перейти к метке label. Если метка не указана - перейти в конец скрипта.
h (H) - скопировать (добавить) область редактирования в область удержания
g (G) - скопировать (добавить) область удержания в область редактирования
x - обменять содержимое области удержания и редактирования.
Менее полезные (для меня по крайней мере) команды.
a - добавить текст после результата работы. \ может экранировать новую строку. Примеры:
aline
a line
a line1\
line2
i - вставить текст перед результатом работы.
c - заменить результат работы на текст.
Пояснения к командам i, c, a. В данном случае результатом называется то, во что в конце концов превращается текущая область редактирования. То есть:
sed -e 'p'
выведет каждую строку дважды. Первый раз по команде p, а второй раз как результат обработки строки(с ней ничего не делалось, поэтому результат = самой строке)
Так вот, результатом в данном случае будет только каждая 2-ая строка.
Или ещё пример:
sed -ne 'p'
результат есть, но он равен "" из-за опции -n, и поэтому каждая строка выводится 1 раз.
Вернёмся к командам i, c, a. Эти команды работают до, вместо, и после вывода результата!
Это значит, что
sed -e 'p;ix'
выведет строку(работа p), x (работа ix) и снова строку(результат)
sed -ne 'p;ix'
Соответственно выведет строку(работа p), x(работа ix) и результат(который пуст из-за опции -n).
Аналогично, c заменяет только результат, а a - добавляет текст только после результата

r Имя-файла - работает как a, но добавляет текст из файла к результату.
R Имя-файла - добавляет только первую строку из файла к результату.

Остальные команды либо не так важны, либо я ещё не осознал их важность.

Есть ещё кроме команд комментарии и метки:
:label
- пометить строку меткой, на которую можно будет перейти командой b
# - начать комментарий до конца строки.

Ну вот вроде и всё.

5. Пример применения
Задача: Удалить все переводы строк, если они не начинают абзац. (Т.е. превратить текст в ряд длинных строк, какждая их которых - абзац)
Подумаем... Будем добавлять строки в область удержания, пока не встретим начало абзаца. Как только абзац начался - выводим из области удержания склеенную длинную строку.
И снова начнём собирать длинную строку.
Ну ещё разумеется нужно обработать последнюю строку, и вывести всё что осталось в области удержания.
Красной строкой будем считать всё что начинается длиннее 1 пробела. Вот такое регулярное выражение
/  |\t/

(без использования опции -r, символ '|' так же необходимо экранировать - / \|\t/)

Итак, при встрече начала абзаца - выведем предыдущий абзац из области удержания:
/  |\t/ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
p # выводим область редактирования (в ней то, что было в области удержания)
s/.*// # обнуляем область редактирования (d не подходит)
x # снова меняем местами обе области местами - и мы готовы дальше работать с первой строкой параграфа
}

Затем нужно добавить текущую строку в область удержания:
H
Ну и, если это последняя строка, нужно вывести все остатки:
$ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
p # выводим область редактирования
}
Теперь всё вместе:
sed -rne '
/ |\t/ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
s/.*// # обнуляем область редактирования (d не подходит)
x # снова меняем местами обе области местами - и мы готовы дальше работать с первой строкой параграфа
}
/ |\t/ ! H
$ {
x # меняем местами обе области
s/\n//g # удалим все лишние переводы строки
p # выводим область редактирования
}
'
Да, тут есть ещё что улучшить. Например, если первая же строка - красная (что обычно так и есть), первой будет выведена пустая строка. Так же хорошо бы нормализировать начальные пробелы, то есть заменить любые пробельные последовательности в начале строки на одну табуляцию.
Это можно сделать напустив ещё один sed на выход первого. Предположим, что первый скрипт мы сохранили в файле make-para.sed
cat input.txt | sed -nrf make-para.sed | sed -re '1 d; s/[ \t]+/\t/'

воскресенье, 16 марта 2008 г.

Очеловечиваем лицо df

Давным давно мне хотелось df с человеческим лицом. Если быть более точным, то хотелось как-то увеличить размер первой колонки с файловой системой. На моей системе вывод df выглядел так:
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/hda1 6,1G 4,4G 1,8G 72% /
udev 10M 116K 9,9M 2% /dev
/dev/hda4 22G 14G 7,8G 63% /home
shm 252M 0 252M 0% /dev/shm
/var/data/stardict-dicts.sqfs
44M 44M 0 100% /usr/share/stardict/dic
/var/data/portage.sqfs
40M 40M 0 100% /usr/portage
homeserv:/mnt/sja-129G/gentoo/distfiles
130G 106G 24G 82% /var/distfiles

Как видно, строки со слишком длинными файловыми системами разбиты на 2 части, а мне хотелось непременно в одной.
Изучив исходные коды утилиты, я выяснил, что под файловую систему отводится 20 символов, и изменить это никак нельзя. Нужен был какой-то скрипт, который бы читал вывод df и очеловечивал его.
И этот скрипт был написан! Причём всё с помощью sed - давно хотел освоить эту утилиту, но всё как-то не было оказии.
Вот собственно и скрипт:
# !/bin/sh
df -h | sed -ne '
# if first symbol not space - begin normal line
/^[^ ]/{
# add 20 spaces after first 20 - expand normal string
s/\(.\{20\}\)/\1 /
# exchange with hold space
x
# if hold space non empty - print it
/./p
# goto end
b e
}
# if begin with space - continue of previous line
/^ /{
s/^ \{20\}//
# prepare first part of string
x
# remove added 20 spaces
s/\(.\{20\}\) \{20\}/\1/
# patttern doesnt 40 symbols ?
:a
/.\{40\}/ ! {
s/\(.*\)/\1 /
b a
}
x
# add current line to hold space
H
# next 3 lines remove \n and extra spaces from hold space
x
s/\n//
x
}
:e
# if last line - flush data from hold space if it here
${
# get hold space and print, it it non empty
x
/./p
}
'

Ну да, выглядит страшненько, но зато полон коментариев и работает! Теперь я созерцаю вывод таким:
Файловая система                          Разм  Исп  Дост  Исп% смонтирована на
/dev/hda1 6,1G 4,4G 1,8G 72% /
udev 10M 116K 9,9M 2% /dev
/dev/hda4 22G 14G 7,8G 63% /home
shm 252M 0 252M 0% /dev/shm
/var/data/stardict-dicts.sqfs 44M 44M 0 100% /usr/share/stardict/dic
/var/data/portage.sqfs 40M 40M 0 100% /usr/portage
homeserv:/mnt/sja-129G/gentoo/distfiles 130G 106G 24G 82% /var/distfiles

пятница, 14 марта 2008 г.

Как создать свой проект на SourceForge.net - 2

Продолжаем работу с sourceforge.net

Subversion
Как известно, для управления исходными кодами можно (и даже нужно) пользоваться системами контроля версий. sourceforge.net предлагает для использования CVS и Subversion.
По умолчанию включен только CVS, но я рекомендую воспользоваться более современным и удобным Subversion.

Для этого нам прежде всего нужно его включить в меню Admin -> Subversion, а в Admin -> CVS отключить соответствующий сервис.
Теперь перейдём на Code -> SVN
Прямо в тексте мы найдём строку наподобие этой
svn co https://pathmanager.svn.sourceforge.net/svnroot/pathmanager pathmanager

которая позволяет сделать checkout (забрать исходные коды) с sourceforge.net.
Дальше всё как обычно. Создаём tags, branches, trunk добавляем исходные коды и комитим.
При комите нужно ввести логин и пароль sourceforge.net

(to be continued)

PATH Manager

Написал свою маленькую утилитку для редактирования пеерменной %PATH% в Windows. Причём решил запихнуть этот проект на SourceForge.net
Хороший способ потренироватся в создании открытых проектов.

Посомтреть можно тут

Как создать свой проект на SourceForge.net - 1

Недавно решил создать свой проект на http://sourceforge.net.
Как оказалось, всё не так просто и требует некоторых усилий и разбирательств.
Во первых необходимо зарегистрироватся, и получить доступ к сайту. Тут обычно ни у кого сложностей не возникает.
Теперь, когда мы зарегистрированы на сайте, можно попробовать создать проект. Для этого нужно подать заявку, в которой указать имя проекта, описание, используемые технологии и тому подобное. Не сложно. после чего нужно ждать до трёх дней письма с извещением об создании (или, о ужас, не создании) проекта.
Если письмо долго не приходит, попробуйте залезть на сайт и проверить статус проекта. Одобрения первого проекта по почте я так и не дождался, хотя проект был одобрен и создан. Видимо завалилось в спам.
После создания проекта можно приступить к бурной деятельности.

Traker
Итак. Tracker - система учёта дефектов и feature request. Особых пояснений думаю не требуется, каждый или работал с подобными системами, или слышал о них.
Перво наперво нужно создать категории, группы и учасников. Это можно сделать из меню Admin -> Traker -> Traker administration -> Bugs (например) -> Add/Update Categories, Groups, Users.
При этом группы, категории можно создать и изменить, но удалить нельзя. По этому, не насоздавайте всякой ерунды.

Далее можно приступать к созданию issues, работе над ними и закрытию. Всё это в в меню Traker.

(to be continued)

вторник, 11 марта 2008 г.

Аскетичность холостяцкой жизни

В чём думаете отличие холостяка от человека "при женщине" ?
Одно из отличий (может быть не главное, но совершенно явственное) заключается в смеренном терпении женатого мужчины к наличию бесконечного числа очень важных баночек, бутылочек, пакетиков и тюбиков. Назначение этого строя косметических излишеств совершенно не ясно простому парню вроде меня, но одно совершенно точно - выбрасывать ничего нельзя, даже если очень хочется. Только попробуй и будеш покупать новую полку в ванной, чтобы было куда поставить очередные тюбики, компенсирующие невосполнимую потерю старого.

Доказательства ? Извольте.
Снимаю я квартиру пополам с товарищем, но в дополнение я живу со своей девушкой. (Нет, семья не шведская).

И вот какую картину можно наблюдать у нас в ванной. Красным цветом я старательно обвёл вещи соседа. Остальное наше.





















Ё в firefox

Давно меня раздражало непонимание Firefox-а буквы ё. Оказалось, что всё решаемо и помехой была только моя лень.
Решение как всегда лежало в Гугле, почти на самом виду. Более того, новый словарь одновременно проверяет и русские и английские слова, что очень удобно - не надо переключатся между ними.

Для ленивых даю ссылку.
http://forum.mozilla-russia.org/viewtopic.php?id=15316

понедельник, 3 марта 2008 г.

Приклеивание лого

Некоторые люди любят приклеивать на скриншоты логотип. Чтоб не спёрли, видимо (хотя всё равно ведь сопрут...)
Разумеется это дело можно и даже нужно автоматизировать.
Для этого нам понадобятся 2 программы.
для создания логотипа - gimp
для приклеивания оного - imagemagick
Оба бесплатны и работают под Linux и Windows

I. Создание логотипа.

0. Скачиваем и инсталлируем GIMP

1. Создаём в GIMP картинку и с помощъю инструмента Text создаём надпись желаемого цвета и размера.


2. Удаляем фоновый слой


3. Сжимаем картинку до размера слоя с надписью.


4. Сохраняем как PNG


II. Приклеивание логотипа

0. Скачиваем и инсталлируем ImageMagick

1. Используем его:
composite -gravity SouthEast logo.png input.png output.png
-gravity SouthEast сообщает к какой стороне картинки прилепить логотип. в данном случае к нижнему правому углу.

для группы файлов это будет выглядеть в Linux так:
# for i in *.png; do composite -gravity SouthEast logo.png $i $i.with-logo.png; done

если есть несколько логотипов, и хочется для каждой картинки выбирать тот, что лучше подходит, можно создать все комбинации, а потом удалить не нужное:
# for l in logo/*; do for i in images/*; do composite -gravity SouthEast $l $i $l.$i; done; done

P.S. Надёюсь никто не забыл, что скриншоты лучше делать в png ?