Strona główna / Społeczność / Blog

Task

To refresh Shotwell thumbnails cache.

Description

Shotwell create thumbnail for every picture it display so when you scroll through gallery it will rebuild it. Problem is when storage is slow (SMB over WiFi) it takes some time.

Idea

Force Shotwell to scroll all gallery

Solution

Find id of Shotwell window:

jaqb@linux:~$ xdotool search --onlyvisible --name shotwell
2098671
2099432

As you can see sometimes there are two of them (I don't know why)

Switch to that window an send Page_Down / Next key check.

jaqb@linux:~$ xdotool windowactivate 2099432 --sync  key Next

Repeat many many (1000) times but give some time (22s) to refresh all visible pictures. I've prepared bash script:

jaqb@linux:~$ cat ./shotwell-cache-refresh.bash
#!/bin/bash


xdotool windowactivate --sync $1
for x in `seq 1000`; do
        sleep 22
        xdotool key Next
done
EOF

After confirmation which identifier is good (2099432) you can run:

jaqb@ubuntu-16:~$ ./shotwell-cache-refresh.bash 209943

and do something more interesting than just typing Page_Down key for more than 6h.

Sometimes you need to cut characters from string. If you need substring starting from characters 4 it is simple:

[you@host ~]$ test="abcdefgh"
[you@host ~]$ echo $test | cut -c 4-
defgh

If you want to remove last 3 characters you can do this using:

[you@host ~]$ echo ${test:0:${#test}-3}
abcde

or

[you@host ~]$ echo $test | rev | cut -c 4- | rev
abcde

I prefer the second method.

Przetestowałem zabezpieczenie przed przypadkowy zrobieniem commit'a do repozytorium bez podania numeru zgłoszenia (ticket). Zrobiłem to za pomocą hook'a pre-commit. Wszystkie polecenia podaję względem katalogu repozytorium, u mnie jest to /var/lib/svn/test. Skopiowałem szablon skryptu (parametr -p jest ważny, bo inaczej można popsuć uprawnienia)

cp -p hooks/pre-commit.tpl hooks/pre-commit
chmod u+x hooks/pre-commit

i wykomentowałem linię:

commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1

na koniec po innych testach, tuż przed linią

exit 0

dopisałem taki kawałek kodu

blad=0
$SVNLOOK log -t "$TXN" "$REPOS" \
| grep "#[1-9][0-9]*" > /dev/null || blad=1
if [ $blad -eq 1 ] ; then
    echo -e "Dodaj numer ticket'a,\nnp.: Zgloszenie #123" 1>&2
    exit 2
fi

który sprawdza czy w treści komentarza zawiera #N (gdzie N to dowolna liczba naturalna większa od 0) i zwraca komunikat błędu - użytkownik zobaczy to co wysyłane jest na wyjście błędu. Właściwy test to:

grep "#[1-9][0-9]*"

Dla Trac'a to wystarczy. Można go rozbudować, np. o sprawdzenie czy zawiera refs #N (N to znowu ciąg cyfr) - tak, żeby w Redmine ładnie pokazywał. Wtedy warunek będzie wyglądał tak (ja używam tylko refs):

grep "refs #[1-9][0-9]*"

Oczywiście można jeszcze dodać sprawdzanie pozostałych Referencing keywords oraz Fixing keywords.

Wypadało by też zmienić wyświetlany komunikat na np. Podaj numer zgłoszenia poprzedzony słowem refs, np:\nrefs #123, ale by wstawić tam znak końca wiersza (\n) trzeba dodać parametr -e do polecenia echo. Razem wygląda tak:

echo -e "Podaj numer zgłoszenia poprzedzony słowem refs, \
np:\nrefs #123" 1>&2

Mechanizm uchwytów (hook) do zdarzeń można wykorzystać dowolnie, także do bardziej zaawansowanych testów: np. by zabezpieczyć przed commit'em kodu który się nie da skompilować (chociaż ja bym tego nie robił) lub automatycznego budowania po commit'cie za pomocą post-commit (tego też bym nie robił).

Ten kto umie pisze kod, ten kto nie umie pisze książki..., albo blog.

Pon Wt Śr Czw Pt So N
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30