Moduł Text::TypingEffort

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Spis treści

  1. Co to jest
  2. Funkcja effort()
  3. Argumenty funkcji effort()
  4. Pomiary
  5. Funkcja layout()
  6. Funkcja register_layout()
  7. Przykładzik
  8. Dodatkowe informacje

Co to jest

Moduł Text::TypingEffort oblicza wysiłek jaki musieliśmy włożyć w wystukanie jakiegoś tekstu na klawiaturze.

Funkcja effort()

effort[$TEXT|\$TEXT]
Argument funkcji powinien być skalarem lub referencją do skalara, który zawiera tekst, który chcemy poddać analizie. Jeżeli nie podamy żadnego parametru, jako wartość zmiennej $TEXT - zostanie wzięta wartość $_.
effort %ARGUMENTS
effort() można wywołać też z listą nazwanych argumentów. To daje większą elastyczność w tym jak pomiary mają być liczone.
# effort() z jednym argumentem my $effort = effort( $text | \$text # tekst, który chcemy przeanalizować ); # effort() z argumentami nazwanymi my $effort = effort( text => $text | \$text, # tekst, który chcemy przeanalizować file => $filename | $filehandle, # analizuj plik layout => 'qwerty' # układ klawiatury | 'dvorak' | 'aset', | 'xpert', unknowns => 0 | 1, # czy liczyć nieznane znaki initial => \%metrics, # ustawienie wartości początkowych caps => 0 | 2 | 3 | ... # jak liczyć Caps Lock'a );

Argumenty funkcji effort()

text
Precyzuje jaki tekst chcemy przeanalizować. Wartością powinien być albo skalar albo referencja do skalara zawierającego tekst. Jeżeli nie podamy tego argumentu, ani argumentu file, $_ - zostanie potraktowane jako tekst do przeanalizowania.
file
Plik w którym zawarty jest tekst do analizy. Jeżeli wartością jest uchwyt pliku, który jest otwarty do czytania, tekst zostanie przeczytany, a uchwyt pozostanie otwarty po zakończeniu działania effort
layout
Domyślnie: qwerty
Układ klawiatury. Dostępne wartości layout to qwerty, dvorak, aset, xpert. Jeżeli podamy jakąś inną wartość zostanie wzięta domyślna, czyli qwerty.
unknowns
Domyślnie: 0
Jeżeli chcemy aby nierozpoznane znaki były zwrócone wraz z innymi pomiarami ustawiamy wartość tego argumentu na prawdę, w przeciwnym wypadku na fałsz.
initial
Domyślnie: {}
Ustawia początkowe wartości wszystkich pomiarów. Dzięki tej opcji można spowodować by effort zakumulował wyniki kilku wywołań. Można zrobić coś takiego:
$effort = effort($text_1); $effort = effort(text=>$text_2, initial=>$effort);
Będzie to znaczyło to samo co:
$effort = effort($text_1 . $text_2);
Wartością initial powinna być referencja do hasza, w przeciwnym wypadku effort zignoruje wystąpienie tego argumentu.
caps
Domyślnie: 4
Ten argument decyduje o tym jak powinny być traktowane wielkie litery. Domyślna wartość: 4 oznacza, że jeżeli wystąpią 4 wielkie litery lub więcej ciągiem, jedna po drugiej to należy to traktować, tak jakby włączony był "Caps Lock" na początku. Można zmieniać tę wartość i może to być liczba całkowita większa niż 1.
Jeżeli wartośćią caps będzie 0, to wielkie litery będą tak traktowane jakby używano "Shift" dla każdego z nich.
Gdy włączona jest obsługa "caps'a" wielka litera jest traktowana jako jakikolwiek znak który można zapisać bez użycia "Shift'a", gdy "Caps Lock" jest aktywny. Dotyczy to takich znaków jak '.', '/', '-' itd., jednak taki ciąg znaków musi się zaczynać i kończyć od faktycznej wielkiej litery, czyli przykładowo ciąg znaków '----T----' nie będzie uznany jako taki do którego użyliśmy "Caps'a"

Pomiary

characters
Liczba rozpoznanych znaków w tekście. Jest to podobne do Unixowego polecenia wc -c. Nie dotyczy to akcentowych znaków, jak i znaków Unicode i znaków kontrolnych, dotyczy jednak nowych linii.
presses
Liczba wciśniętych klawiszy podczas pisania tekstu. Czyli jest to wartość characters plus liczba wciśnięć klawisza "Shift"
distance
Dystans w milimetrach jakie palce muszą pokonać podczas pisania tekstu. Dotyczy ruchu do wciśnięcia klawiszy "Shift" i "Enter", jednak nie dotyczy pionowych ruchów jakie palec musi pokonać podczas naciśnięcia. Lepszą nazwą na ten pomiar by było horizontal_distance, jednak autor uznał, że to by była za długa nazwa ;)
Model tego pomiaru jest bardzo prosty - zakłada, że palec porusza się od pozycji wyjściowej (a s d f g h j k l ;), do wybranego klawisza i powraca do pozycji wyjściowej zanim wybierze kolejny klawisz. Wiadomo, że ludzie różnie piszą, ale przyjęto taką wersję :)
energy
Liczba dżuli energii potrzebna do napisania badanego tekstu. Jest to najmniej dokładny z pomiarów, jednak jest głównie oparty o The Compendium of Phisical Activities, a raczej pogłoskach o niej - bo autor się przyznał, że nie posiada egzemplarza kompendium :>
unknowns
Pomiar jest obecny tylko jeśli wartość argumentu unknowns w funkcji effort był ustawiony na true.
Jest to histogram tych znaków, które były nierozpoznane podczas analizy. Dotyczy to znaków kontrolnych, znaków akcentowych i znaków Unicode. Przykładowo wyglądałoby to tak:
unknowns => { presses => { 'Å' => 2, 'Ö' => 3, }, distance => { 'Å' => 2, 'Ö' => 3, }, }
Klucz wskazuje na ten pomiar do którego brakowało informacji. Wartość hasza wskazuje na znak i liczbę wystąpień danego znaku.

Funkcja layout()

Zwraca referencję do tablicy reprezentującą układ klawiatury, lub undef, jeżeli nazwa jest nieznana. Jeżeli nie podamy żadnej nazwy, układ QWERTY będzie zwrócony domyślnie.

# layout() my $l = layout; # weźmie układ QWERTY my $l = layout($layout_name); # weźmie nazwany układ klawiatury

Funkcja register_layout()

Pozwala zarejestrować nowy układ klawiatury przy użyciu danej nazwy. Układ powinien być referencją do tablicy zawierającej każdy znak i jego wersję z użyciem "Shift'a". Poniższy fragment pseudokodu demonstruje jak układ QWERTY jest zdefiniowany. Rozpoczyna się w górnym lewym rogu klawiatury QWERTY.

use Text::TypingEffort qw/layout/; $l = layout; print "register_layout('qwerty', [qw{\n"; while( ($lower, $upper) = splice(@$l, 0, 2) ) { print "\t$lower $upper\n"; } print "}]);\n";

Zazwyczaj register_layout jest wywoływany przed effort. Przykładowo:

my @layout = qw{ ... }; register_layout('my custom layout', \@layout); my $e = effort( text => $text, layout => 'my custom layout', );

Przykładzik

use Text::TypingEffort qw/effort/; my $effort = effort("The quick brown fox jumps over the lazy dog");

$effort wyglądałoby mniej wiecej tak:

$effort = { characters => 43, # liczba znaków w tekście presses => 44, # liczba wciśnięć klawiszy potrzebnych do napisania tekstu distance => 950, # milimetry jakie palce musiały pokonać podczas pisania energy => 2.2, # energia w dżulach zużyta do napisania tekstu };

Dodatkowe informacje

Moduł ten na pewno się przyda jeżeli chcemy się nad sobą poużalać ile to energii zużyliśmy na napisanie czegoś, chociaż nie zawsze ilość wystukanych literek się przekłada na wysiłek, no ale zawsze szefowi można udokumentować jak to ciężko pracujemy :D

W ramach ciekawostki, Michael Hendricks (autor modułu) zauważył (przy pomocy Text::TypingEffort), że Perl 6 wymaga 18 % mniej wysiłku niż Perl 5. Mogłoby to się źle skończyć dla społeczeńskiego obwodu w pasie :D ale mimo wszystko uważa że perlowcy zużyją ten dodatkowy czasna rozrywkę w postaci biegania czy kajakowania i w rezultacie, paradoksalnie, stracą na wadzę dzięki zużyciu mniej energii w pracy :)

A oto oryginalna dokumentacja: http://search.cpan.org/~mndrix/Text-TypingEffort-0.23/lib/Text/TypingEffort.pm .

Autorka opracowania

P.P.

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.