Фотографируемся после каждого коммита (Linux, OSX)

    Программа imagesnap (OSX) позволяет делать фотографии веб-камерой из командной строки. Например, она может автоматически фотографировать программиста после каждого коммита в репозиторий git, нужно всего лишь добавить следующий код в .git/hooks/post-commit.

    #!/usr/bin/env ruby
    file="~/.gitshots/#{Time.now.to_i}.jpg"
    puts "Taking capture into #{file}!"
    system "imagesnap -q -w 3 #{file}"
    exit 0

    Потом кадры собираются в видеоролик программой tlassemble.

    Под Linux программу imagesnap для фотографирования из командной строки легко заменяет утилита fswebcam.

    #!/usr/bin/env perl
    use strict;
    use warnings;
    unless ( -d $ENV{"HOME"}."/.gitpix" ) {
        mkdir $ENV{"HOME"}."/.gitpix" or die "$!\n";
    }
    my $file="~/.gitpix/pic-".time.".jpg";
    print "Saving image from webcam to $file.\n";
    system "fswebcam $file" or die "$!\n";

    Видео потом собирается с помощью avconv.

    Поделиться публикацией

    Похожие публикации

    Комментарии 44

      +50
      Круто, но зачем !?
        +4
        Посмотрел видео и понял =) Купить чтоле вебку на рабочий комп =)
          +6
          Посмотрел видео, думаю приспособить алкотестер.
            +3
            Угу, сделать хук на коммит: перед коммитом дуньте в трубочку 8)
          +10
          А шо бы видеть «откуда руки растут» ) Иной раз взглянешь на код и в диком ужасе, как такое можно было написать? )
            +5
            Алкотестер тогда неплохо бы еще прикрутить.
            +1
            Noah takes a photo of himself after each commit every day for 6 years.
            www.youtube.com/watch?v=6B26asyGKDo
              +4
              тут девушка 5,5 лет каждый день http://www.youtube.com/watch?v=xgxxxKwlra8
                +3
                www.youtube.com/watch?v=pieSiqKtk98 Тут Гомер Симпсон тоже фоткается
                  0
                  И оригинал:



                  www.everyday.noahkalina.com/
                    +3
                    Как же ему удаётся всё время одно и тоже выражение лица делать?
                      0
                      Ну возможно не с первой попытки, одним кадром в день не обходится :)
                        0
                        Ботокс?
                    0
                    История болезни в картинках
                      0
                      Девушка, надо заметить, от фотки к фотке меняется гораздо сильнее.
                        0
                        Ну это ведь девушка. Они более склонны к следованию моде итд. Так что новые прически мэйкапы итд легко меняют лицо.
                      0
                      Ужас.

                      Захотелось работу поменять на что-нибудь поактивнее.
                  • НЛО прилетело и опубликовало эту надпись здесь
                      +17
                      Да и рубашка меняется. Точно неправильныйю
                        +2
                        Приглядитесь — растет ;)
                          +4
                          Он отращивает бороду внутри
                          +4
                          github.com/mroth/lolcommits видео не делает, зато сообщение коммита прикрепляет
                            +5
                            А почему линуксоиды позаботились о созании папки для снимков при ее отсутствии, а маководы — нет ?)
                              +12
                              Маководы более беззаботны ;)
                                0
                                Маководы привыкли, что о них заботится кто-то другой :)
                              +5
                              А почему то на руби, то на перле, хотя тут и шелла достаточно?
                                0
                                да тоже об этом задумался… темболее я сделал небольшой фикс, потому что разрабатываю не один проект, и хочется видеть «таймлайн» («фэйслайн» гы )) каждого проекта в отдельности:

                                #!/usr/bin/env ruby
                                folder = ".snaps/"
                                Dir.mkdir(folder) unless File.directory?(folder)
                                file="#{folder}#{Time.now.to_i}.jpg"
                                puts "Taking capture into #{file}!"
                                system "imagesnap -q -w 3 #{file}"
                                exit 0
                                


                                С костылем на Dir.exist? Кроме того засунул все это в pre-commit а не пост, как то мне он больше по душе.
                                А чтобы иметь один фейслайн на все проекты достаточно поменять первую строчку:
                                folder = "#{Dir.home}.snaps/"
                                
                                  +5
                                  #!/bin/sh
                                  
                                  mkdir -p .snaps
                                  file=$(date +%s)
                                  echo "Taking capture into $file"
                                  imagesnap -q -w 3 "$file"
                                  
                                    0
                                    #!/bin/sh
                                    
                                    mkdir -p .snaps
                                    file=".snaps/$(date +%s)"
                                    echo "Taking capture into $file"
                                    if which imagesnap > /dev/null; then
                                      imagesnap -q -w 3 "$file"
                                    elif which fswebcam > /dev/null; then
                                      fswebcam $file
                                    else
                                      echo 'I dont know what to do'
                                    fi
                                    
                                      0
                                      Ну вот зачем всё усложнять?

                                      #!/bin/sh
                                      
                                      mkdir -p .snaps
                                      file=$(date +%s)
                                      echo "Taking capture into $file"
                                      ( imagesnap -q -w 3 "$file" 2>/dev/null || fswebcam "$file" ) 2>/dev/null
                                      
                                        0
                                        Во-первых, зачем создавать директорию, если вы в неё ничего не кладете? :) Еще не обязательно дважды перенаправлять вывод stderr в /dev/null. Вообще его можно не перенаправлять, т.к. запуск скрипта выполняется из гита

                                        Во-вторых, я ориентировался на простоту понимания и читабельность. Вообще, можно даже так:

                                        file="`mkdir -p snaps`.snaps/`date +%s`.jpg"; imagesnap -q -w 3 $file || fswebcam $file
                                        
                                          0
                                          Опечаточка

                                          file="`mkdir -p .snaps`.snaps/`date +%s`.jpg"; imagesnap -q -w 3 $file || fswebcam $file
                                            0
                                            Что значит не кладу? Ну забыл вписать, да. Но stderr перенаправить нужно, т.к. помимо ошибки 'command not found' у нас ещё что-то может посыпаться, а бороться с ошибками fswebcam во время коммита — нет уж, увольте, я лучше проигнорирую её просто. В любом случае, which избыточен, как мне кажется. Ну а тем более «I don't know what to do» :)
                                              0
                                              >Что значит не кладу?

                                              Вы создаете директорию, но файл создается в текущей (с unixtime в качестве имени)
                                              Ну а which да, таки избыточен
                                      0
                                      А ещё можно в "#{Dir.home}.snaps/" хранить все файлы, а в локальной папке .snaps символьные ссылки. Тогда можно будет и общий «фейслайн» собрать, и по-проектно.
                                    +7
                                    Надо difference записывать в коммит. Борода не отросла- белый экран, экономия.
                                      +1
                                      а чем tlassemble или avconv отличаются от ffmpeg (при склейке фреймов в видео)?
                                        0
                                        Для Макоси есть прога (к сожалению платная), которая делает снимок с камеры при каждом логине. Можно ли такое сделать скриптом?

                                        Можно хорошо отслеживать кто и в каком состоянии включал комп.
                                          –4
                                          Вы меня, конечно, простите за занудство, но не удержался — 3 статьи из 10, которые «лучшие за 24 часа» — перевод с Hacker News, и эта -не исключение. Ну сколько можно?
                                            0
                                            Пруф?
                                            0
                                            Я тоже фоткаюсь каждый час уже в течение лет пяти.

                                            ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -r 1 -ss 3 \
                                            -f image2 $dir/camshot_$(date +%Y%m%d_%H%M%S).jpeg -t 1

                                            Видео пока не делал, правда.
                                              0
                                              >Я тоже фоткаюсь каждый час уже в течение лет пяти.
                                              Даже ночью?
                                                0
                                                А что в этом удивительного?
                                                  0
                                                  Ну то что именно ночью лично для меня не удивительно ибо я сам ночью не сплю. Я имел ввиду даже во время сна вы встаете и фоткаетесь каждый час?

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое