Moduł Text::TypingEffort
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
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: - Klucz wskazuje na ten pomiar do którego brakowało informacji. Wartość hasza wskazuje na znak i liczbę wystąpień danego znaku.
unknowns => {
presses => {
'Å' => 2,
'Ö' => 3,
},
distance => {
'Å' => 2,
'Ö' => 3,
},
}
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 Informatyki - Strona domowa - Perl - Wyklady