Опять же, возможно существует более элегантное решение.
Вы правы, существует. Воспользуйтесь exiv2.
Она позволяет простенько считывать, редактировать, удалять и пр. действия с мета-информацией exif.
В том числе у неё есть команда rename, которая переменовывает файлы, основываясь на Exif.Photo.DateTimeOriginal или (при отсутствии) — на Exif.Image.DateTime в соответствии с форматом, который вы укажите в ключе '-r' (который аналогичен стандартному формату strftime). По умолчанию формат %Y%m%d_%H%M%S, что меня вполне устраивает, так что ключём даже не пользуюсь.
Итак, шелл-функция из моей библиотеки скриптов для переименовывания файлов на основе их exif данных такая:
# sort photos by exif date
# $* - filenames to rename
# example: exif_date_sort ./* # sort all files in directory
# author: japdoll, 2008
exif_date_sort()
{
until [ -z "$1" ]
do
exiv2 rename -- "./$1"
shift
done
return 0
}
С другой стороны — в нашей области (программирование, администрирование, etc) — это только плюс. Рассчитывать на худший случай, на весьма редкие сценарии развития, делать для них обработку ошибок — это делает составленные ИС более стабильными и защищенными. Представьте, если в программе при создании процесса-потока не будет учтён вариант нехватки памяти и программа будет приводить к непредсказуемым последствиям. С одной стороны может казаться, нехватка памяти — вещь относительно редкая (или вы можете считать её маловероятной) — с другой всегда следует рассматривать даже самые маловероятные события. Поэтому, зачастую на обработку и восстановление после ошибок тратится времени больше, чем на разработку основного кода, даже если эти события чрезвычайно маловероятны.
Собственно, прочитав заголовок и первое предложение подумал, что об этом идёт речь в статье (компьютерный же ресурс).
Пробовал, да, эффект был. Но это не для тех, кто особо не соблюдает режим. Объясню, почему: просыпался по будильнику, иногда очень хорошо, иногда он звонит в конце промежутка, просыпаюсь и… снова усыпаю. Для меня надёжней ствить 3-4 будильника с интервалом в 15 минут — тогда точно на 2-3 встаю. А тут придётся к 30-минутному промежутку ещё добавлять хотя бы 3x10 минут и получится, что можешь проснуться утром в течении часа. Не люблю утром дома есть, газету читать или что-то такое — только зубы почистил и побежал. В общем, для меня неудобно.
Как-то вы очень сильно реагируете на критику. Расслабьтесь, это хабр — тут критикуют любое место которое отличается от офиса Гугла, плюшек от Татьяныча и серверных ферм Яндекса. Удивлён, что ещё не прокомментировали отсутствие бесплатного кафе и предоплаченного ноутбука. Работа как работа.
Согласен, разве что, про табуретки — при текущих зарплатах программистов на кресле экономить — весьма странно. Так же огорчило место программиста в коридоре — я просто ненавижу, когда у меня в процессе работы кто-то проходит за спиной (если не из-за соседнего стола), это жутко отвлекает, возможно, только у меня так, но я в таком случае лучше пойду работать, сидя в кафе напротив или из дома. Понимаю, стартап, тратить лишние деньги на аренду — не хочется, но тогда я бы потратил деньги на те места с почасовой арендной платой специально для работы.
Ну, вообще я не удивлён — в Германии довольно хорошо с копилефтом. Вот, только на днях читал про Мюнхен, где за год сэкономили 4 млн. евро на лицензиях, поддержке и обслуживании после перехода на свободное ПО.
Не совсем про мировую гарантию, но был случай с ноутом ASUS — практически такая же история, как в посте, у них тогда была утилита, кажется, «ASUS Live Update», обновляла все драйвера и в один из разов неудачно прошила биос. Утилита, надо отметить, сама по себе кривая: одно из ядер процессора загружала всегда на половину, даже если обновлений никаких нет и выполнять нечего.
Покупал в Москве, в СЦ пошёл тоже московский. Мало того, что случай признали гарантийным (за что отдельное спасибо, так как не особо рассчитывал); так и ещё согласились починить по гарантии, хотя чек я посеял, а с момент даты выпуска прошёл год и один день. Сказали, что понимают, что ноут не могли перевезти в РФ за один день и потому по гарантии.
Вот такой положительный опыт!
«Отдельно ведётся список списков, которые не содержат самих себя»
Уже. Отдельный вопрос — содержит ли он сам себя? Как-то раз Рассел многих этим обломал…
О, спасибо, хороший блог!
Для начинающих с GTK в C++ — лучше использовать gtkmm, не знаю как сейчас, но ранее (3-4 года назад где-то) — использовать сишный чистый gtk в программах с классами — намучился, определял, где нужно после передачи по указателю разрушать объект, где нет… документация была не на самом высоком уровне, так что приходилось экспериментировать.
В общем, если пишете на C++ лучше сразу использовать gtkmm, в своё время кучу кода переписывал из-за того, что посчитал проще пользоваться чистым gtk.
ps
Будет время, может, накатаю пару статей про использование pango\cairomm, да и остальные библиотеки в связи с gtk (скажем, opengl).
Пользуюсь minitube — хороший клиент для youtube. Просмотр без необходимости установки флеш, без рекламы, с возможностью скачивания, поддержкой субтитров, качества видео и закладок.
Сменив запускаемую команду с браузера на minitube — всё решается.
Лицензионное соглашение ютьюба? Не принимал — нее, не слышал!
да, на счёт этого я в курсе, я предлагал решение к вашей конкретно задаче, где в используемые клавиши Esc не входит:)
ps
вообще, конечно, спасибо, тут вы придумали хоть какое-то решение. Как-то пытался найти функцию, возвращающую состояние буфера ввода, но, может, плохо искал, думаю, это решение было бы слегка красивей.
мм, а какие две последовательности в ваших комбинациях совпадают?
(я что-то не заметил, курсорные клавиши, курсорные с зажатой управляющей клавишей и обычные все различаются)
тогда ведётся считывание (в моём примере по три символа), заменяя read -n3 key на read -n1 key можно вести обработку нажатия и печатных символов, затем, среди них обнаруживать escape-последовательности.
Забыл сказать: статья мне понравилась, сам когда-то, админя также развлекался с напарником; вывод был разве что на разные терминалы сервера, а не игра по сети, но уже был и таймер ходов, и лог, и чёрт вспомнит, что ещё!
Вы правы, существует. Воспользуйтесь exiv2.
Она позволяет простенько считывать, редактировать, удалять и пр. действия с мета-информацией exif.
В том числе у неё есть команда rename, которая переменовывает файлы, основываясь на Exif.Photo.DateTimeOriginal или (при отсутствии) — на Exif.Image.DateTime в соответствии с форматом, который вы укажите в ключе '-r' (который аналогичен стандартному формату strftime). По умолчанию формат %Y%m%d_%H%M%S, что меня вполне устраивает, так что ключём даже не пользуюсь.
Итак, шелл-функция из моей библиотеки скриптов для переименовывания файлов на основе их exif данных такая:
Собственно, прочитав заголовок и первое предложение подумал, что об этом идёт речь в статье (компьютерный же ресурс).
Согласен, разве что, про табуретки — при текущих зарплатах программистов на кресле экономить — весьма странно. Так же огорчило место программиста в коридоре — я просто ненавижу, когда у меня в процессе работы кто-то проходит за спиной (если не из-за соседнего стола), это жутко отвлекает, возможно, только у меня так, но я в таком случае лучше пойду работать, сидя в кафе напротив или из дома. Понимаю, стартап, тратить лишние деньги на аренду — не хочется, но тогда я бы потратил деньги на те места с почасовой арендной платой специально для работы.
Покупал в Москве, в СЦ пошёл тоже московский. Мало того, что случай признали гарантийным (за что отдельное спасибо, так как не особо рассчитывал); так и ещё согласились починить по гарантии, хотя чек я посеял, а с момент даты выпуска прошёл год и один день. Сказали, что понимают, что ноут не могли перевезти в РФ за один день и потому по гарантии.
Вот такой положительный опыт!
вот, к вашему примеру:
Уже. Отдельный вопрос — содержит ли он сам себя? Как-то раз Рассел многих этим обломал…
К примеру, цены на Macbook у нас\за рубежом или цена на мобильные устройства.
Для начинающих с GTK в C++ — лучше использовать gtkmm, не знаю как сейчас, но ранее (3-4 года назад где-то) — использовать сишный чистый gtk в программах с классами — намучился, определял, где нужно после передачи по указателю разрушать объект, где нет… документация была не на самом высоком уровне, так что приходилось экспериментировать.
В общем, если пишете на C++ лучше сразу использовать gtkmm, в своё время кучу кода переписывал из-за того, что посчитал проще пользоваться чистым gtk.
ps
Будет время, может, накатаю пару статей про использование pango\cairomm, да и остальные библиотеки в связи с gtk (скажем, opengl).
Сменив запускаемую команду с браузера на minitube — всё решается.
Лицензионное соглашение ютьюба? Не принимал — нее, не слышал!
ps
вообще, конечно, спасибо, тут вы придумали хоть какое-то решение. Как-то пытался найти функцию, возвращающую состояние буфера ввода, но, может, плохо искал, думаю, это решение было бы слегка красивей.
ладно, ваша взяла, хотя по мне это некий «костыль», извините уж.
(я что-то не заметил, курсорные клавиши, курсорные с зажатой управляющей клавишей и обычные все различаются)
read -n3 key
наread -n1 key
можно вести обработку нажатия и печатных символов, затем, среди них обнаруживать escape-последовательности.