Работа с патчами

09:37 Рубрика: Linux

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

  Или другой пример. Ядро Linux, упакованное в .tar.bz2, весит более 30 Мб независимо от его версии. Но файл различий между версиями 2.6.6 и 2.6.7, упакованный в .bz2, весит всего 3 Мб, поэтому для получения исходников ядра 2.6.7 из исходников ядра 2.6.6 достаточно скачать лишь 3 Мб, не выкачивая все 32 Мб заново.

  Впрочем, часто нужно просто посмотреть различия 2 почти одинаковых файлов, и для этого тоже удобно использовать diff, выводя результат его работы не в файл, а прямо на экран.

  А теперь посмотрим работу этих утилит на практике. Возьмите какой-нибудь текстовый файл и сделайте его копию, а затем отредактируйте эту копию - 1-2 строчки удалите, что-нибудь добавьте, пару строчек просто поменяйте. Затем запустите diff старый_файл новый_файл. Получите файл различий в обычном формате. В нем выводятся только измененные строки, и изменения помечены символами < и > (означающими, что соответствующая строка принадлежит левому или правому файлу в командной строке). Этот формат пригоден только для изучения человеком небольших различий между 2 файлами. Для создания патчей используются другие форматы вывода, задаваемые дополнительными опциями, при этом результат работы diff перенаправляется в файл патча стандартными средствами оболочки.

  Добавьте к строке вызова diff ключ -u. Теперь вывод программы будет представлять собой патч в унифицированном формате, который используется в большинстве случаев (есть еще контекстный формат, включаемый ключом -c, но он используется намного реже). В такой патч включаются и несколько соседних неизмененных строк (т.н. контекст), помогающие программе patch найти место в файле, где произошло изменение. Добавленные во 2-м файле строки помечаются плюсами, удаленные - минусами. Если строка изменилась, она выводится 2 раза - старый вариант с минусом и новый с плюсом. Кроме того, в начале добавляется заголовок, в котором указываются имена и даты изменения обоих файлов.

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

  Чтобы наложить патч, надо перейти в каталог, где находится старый файл/каталог, и выполнить команду

  patch < файл_патча

  При использовании патчей к каталогам обычно делают так: патч создается, как описано выше (тогда в заголовках патчей к отдельным файлам путь к ним будет начинаться с имени нового каталога), а прикладывается он внутри изменяемого каталога. Тогда команда будет выглядеть так:

  patch -p1 < файл_патча

  Здесь -p1 означает, что из заголовков патча надо убрать начальный каталог. Поясню всё это на примере. У нас имеется дерево исходников ядра 2.6.0. Это каталог linux-2.6.0, в котором содержатся каталоги drivers, arch и т.д. И у нас есть патч до версии 2.6.1, в котором содержатся такие заголовки:

  --- a/drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004

  +++ b/drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004

  Видим, что при создании патча старый и новый каталоги назывались a и b соответственно. У нас же каталог называется по-другому, и patch ничего сделать не сможет. Поэтому заходим в каталог linux-2.6.0 и выполняем указанную выше команду. Теперь заголовки будут интерпретироваться как

  --- drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004

  +++ drivers/acpi/Kconfig Thu Jan 8 23:00:24 2004

  и патч приложится нормально.

(c) knoppix.ru

 

 

Далее

Perfect Workflow in Sublime Text 2

20:23 Рубрика: Linux

st2 I’m a confessed code editor addict, and have tried them all! I was an early adopter of Coda, a TextMate advocate, even a Vim convert. But all of that changed when I discovered Sublime Text 2, the best code editor available today. Don’t believe me? Let me convince you in this course.


View

Этот сложный русский язык

11:07 Рубрика: Всячина

Перед нами стол. На столе стакан и вилка. Что они делают? Стакан стоит, а вилка лежит. Если мы воткнем вилку в столешницу, вилка будет стоять. Т.е. стоят вертикальные предметы, а лежат горизонтальные?

Добавляем на стол тарелку и сковороду. Они вроде как горизонтальные, но на столе стоят. Теперь положим тарелку в сковородку. Там она лежит, а ведь на столе стояла. Может быть, стоят предметы готовые к использованию? Нет, вилка–то готова была, когда лежала.

Теперь на стол залезает кошка. Она может стоять, сидеть и лежать. Если в плане стояния и лежания она как–то лезет в логику «вертикальный–горизонтальный», то сидение — это новое свойство. Сидит она на попе.

Теперь на стол села птичка. Она на столе сидит, но сидит на ногах, а не на попе. Хотя вроде бы должна стоять. Но стоять она не может вовсе. Но если мы убьём бедную птичку и сделаем чучело, оно будет на столе стоять. Может показаться, что сидение — атрибут живого, но сапог на ноге тоже сидит, хотя он не живой и не имеет попы.

Так что, поди ж пойми, что стоит, что лежит, а что сидит. А мы ещё удивляемся, что иностранцы считают наш язык сложным и сравнивают с китайским.

(c)

Что такое «челночная дипломатия»

16:52 Рубрика: Всячина

Однажды у Генри Киссинджера спросили:

— Что такое «челночная дипломатия»?

Киссинджер ответил:

— О! Это универсальный метод! Поясню на примере: вы хотите методом челночной дипломатии выдать дочь Рокфеллера замуж за простого парня из русской деревни.

— Каким образом?

— Очень просто. Я еду в русскую деревню, нахожу там простого парня и спрашиваю:

— Хочешь жениться на американской еврейке?

Он мне:

— На*рена?! У нас и своих девчонок полно.

Я ему:

— Да. Но она — дочка миллиардера!

Он:

— О! Это меняет дело…

Тогда я еду в Швейцарию, на заседание правления банка и спрашиваю:

— Вы хотите иметь президентом сибирского мужика?

— Фу, — говорят мне в банке.

— А если он, при этом, будет зятем Рокфеллера?

— О! Это конечно меняет дело!

И такида, я еду домой к Рокфеллеру и спрашиваю:

— Хотите иметь зятем русского мужика?

Он мне:

— Что вы такое говорите, у нас в семье все — финансисты!

Я ему:

— А он, как раз, — президент правления Швейцарского банка!

Он:

— О! Это меняет дело! Сюзи! Пойди сюда. Мистер Киссинджер нашел тебе

жениха. Это президент Швейцарского банка!

Сюзи:

— Фи… Все эти финансисты — дохляки или педики!

А я ей:

— Да! Но этот — здоровенный сибирский мужик!

Она:

— Ооо! Это меняет дело!

Далее

Работа с русскими именами файлов в ZIP и UNZIP под *nix

14:23 Рубрика: Linux
Одна из неожиданных проблем, возникающих при обмене файлами с пользователями
Windows - странное поведение ZIP-архивов. Казалось бы, достаточно правильно
настроить кодировки... Не тут-то было!

Для текстовых файлов достаточно найти редактор с выбором кодировки, для дисков
можно указать кодировку при монтировании, более "продвинутые" форматы архивов
(RAR, 7zip) тоже как-то решают эту проблему; и только ZIP, самый
распространённый и "самый совместимый" архиватор, почему-то неожиданно
оказывается несовместимым в принципе, стоит именам файлов выйти за пределы ASCII.

Есть мнение, что в архивы ZIP имена файлов пишутся в кодировке файловой
системы, и дескать, отсюда и проблемы - в Windows одна кодировка, а в Linux
другая. И виноват в том устаревший архивный формат и сделать с этим ничего
нельзя, а если очень хочется - переименовывать распакованные файлы скриптами и
прочими костылями. Что ж, попробуем.

Moqups — новый сервис для создания макетов UI

14:18 Рубрика: Web Development

Как характеризуют сервис сами разработчики, Moqups — это «изящное HTML5-приложение для создания макетов, концептов пользовательского интерфейса, прототипов, в зависимости от того, как вы сами это называете».

moqups

Для Chrome есть отдельное приложение.

На данный момент доступно более 60 шаблонов элементов, экспорт в PDF и PNG, клавиатурные шорткаты, группировка объектов, привязка к сетке и проч.

Проект находится в стадии активной разработки и открыт для критики, помощи и предложений.

Отсюда

Никогда не упускайте возможность

14:15 Рубрика: Всячина

сделать наш скучный мир хоть чуточку интереснее. Например, если вас собьет машина или ударит по башке сосулька, прежде чем потерять сознание/впасть в кому/умереть, успейте прошептать склонившемуся к вам прохожему: "Передайте членам Сопротивления, что Кальциноиды уже прибыли на Землю. Парапульсатор спрятан в сторожке у лесника. Пароль: "В лесу, говорят, снова появились хромые лисицы"...

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

Иконки - как искусство

14:14 Рубрика: Web Development

icons

Конвертация PNG24/32 в PNG8 с сохранением прозрачности

23:03 Рубрика: Web Development

png8

Открылся веб-сервис TinyPNG, на котором можно быстро конвертировать полноцветные PNG24 в индексные PNG8 с сохранением альфа-прозрачности. Сайт работает на известных open source утилитах, так что квантование палитры можно сделать и без него, но здесь это просто удобнее.

На Хабре неоднократно публиковались статьи о квантовании палитры PNG как способе оптимизации файлов в этом формате. Существует ряд программ, которые сжимают с PNG24 до PNG8 с сохранением альфа-прозрачности, одна из них — pngnq. К сожалению, многие веб-дизайнеры не готовы работать с такими программами и обрабатывать файлы в пакетном режиме bash-скриптом, поэтому для них появление такого веб-сервиса станет приятной новостью.

Сами разработчики TinyPNG говорят, что используют для квантования утилиты pngquant, optiPNG и advpng.

Все эти утилиты можно использовать и самостоятельно. Есть даже GUI для pngquant.

Поскольку Photoshop не умеет нормально работать с 8-битными PNG, то можно сохранять обычные PNG24 с альфа-прозрачностью (через меню Save for Web), после чего прогонять их через TinyPNG или одну из перечисленных программ. Полученные файлы корректно отображаются во всех браузерах, прозрачность PNG сохраняется даже в IE6.

http://habrahabr.ru/post/146704/

Un-official Seed Documentation

15:30 Рубрика: Linux

http://www.roojs.org/seed/gir-1.2-gtk-3.0/seed/