Skracacz SMSów.

09 kwietnia, 2008

Ludziom zdarza się wysyłać SMSy. Założenie jest takie, by w możliwie małej objętościowo formie (koszt, limity wysłanych przez bramkę, łatwość odczytu przez odbierającego) przekazać maksimum informacji. Szczególnie przy okazji awarii takich, jak wczorajsza w Szczecinie warto minimalizować objętość. ;) Poniższy skrypt przedstawia sposób na skrócenie długości wiadomości w SMSach wysyłanych za pomocą polecenia sms z pakietu sms-pl (wersje na inne dystrybucje i systemy do znalezienia we własnym zakresie, ale opisany niżej algorytm jest uniwersalny i można go z powodzeniem stosować do wszystkich SMSów.

Oryginalnie algorytm (podejrzany u jednej ze znajomych) polega na usunięciu spacji i zastąpieniu następujących po nich liter na wielkie. Poniżej zaimplementowana jest wersja rozwinięta - spacja jest usuwana, jeśli po niej następują 2 małe litery (zakładam nie używanie polskich znaków diakrytycznych w treści - wielkość SMS przy ich użyciu drastycznie puchnie). Pierwsza z liter zamieniana jest na wielką. Czytelność nie ulega znacznego pogorszeniu - odbiorca wie, gdzie kończą się wyrazy. Przykład przetworzonego tekstu: OryginalnieAlgorytm (podejrzany uJednejZeZnajomychPolegaNaUsunieciuSpacji iZastapieniuNastepujPoNichLiterNaWielkie PoniżejZaimplementowanaJestWersjaRozwinieta -SpacjaJestUsuwanaJesliPoNiejNastepuja 2MaleLitery Pierwsza zLiterZamienianaJestNaWielka Z 291 znaków do 249, czyli ok. 15% zredukowany rozmiar.

A oto i sam skrypt:

 
#!/usr/bin/perl -w
 
# Script to shorten SMS message by removing spaces if they're followed by lowercase letter followed by given number of lowercase characters.
# The first letter is made uppercase to make message readible.
# Required installed && configured sms from sms-pl package (Debian)
# Author: Paweł 'Róża' Różański; JID: rozie@jabber.wp.pl
# Usage: ./shortsms.pl <number> "message body"
 
use strict;
 
my $minlower=1;                 # here define how may lowercase characters must be after [a-z] to uppercase first character
my $sms=`which sms`;
 
if ($#ARGV != 1){
        die 'Usage: ./shortsms.pl <number> "message body"';
}
 
my $number=shift @ARGV;
chomp $sms;
 
my $body='"';
foreach (@ARGV){
        my @nospace=split/\s/;
        foreach(@nospace){
                if (/^([a-z])([a-z]{$minlower,})/){
                        $body.= uc($1).$2
                }
                else{
                        $body.= " ".$_;
                }
        }
}
$body.='"';
print "Will send SMS to: $number\n";
print "Body will be:\n";
print "$body\n";
 
system ("$sms $number $body");
if ($? == 0){
        print "Send OK\n";
}
else{
        print "Error occured while sending.\n"
}
 

Skrypt nie jest idiotoodporny. Zakłada brak pl-znaków, podanie poprawneg numeru jako pierwszego argumentu, ujęcie treści w cudzysłów i skonfigurowany pakiet sms-pl (ja ślę tym tylko do plusa, wtedy nie wymaga konfiguracji). Można łatwo dopisać, ale... ;) Aby sobie potestować pez wysyłania wystarczy zakomentować linię z system. Have fun.

1. BTM napisał(a):
09 kwietnia 2008, 08:29:36

Short SMS? Short Short Message System?
Prawie jak Dance Dance Revolution ;-)

2. rozie napisał(a):
09 kwietnia 2008, 08:35:32

Shortened Short Message System oraz SuperShortened Short Message System (wyciac wszystkie spacje i znaki przestankowe). ;-) A DDR też dobre jest. Ech, gdzież moja mata i stepmania? ;/

3. btm napisał(a):
09 kwietnia 2008, 08:36:35

Za szafą, a druga – metalowa – w drugim pokoju. A nie, wróć, to u mnie ;p
<reklama type=„chamska” url=„http://ddrpl.com” /> :P

4. rozie napisał(a):
09 kwietnia 2008, 08:42:29

btm: Niestety nie za szafą, tylko > 200 km dalej. Ale już niedługo się spotkamy… Ten link jest kompatybilny ze stepmanią? Przydałaby się opcja offtopic do komentarzy. ;) Albo może popełnij wpis o stepowaniu z przeglądem źródeł programów, dodatków i piosenek i tam się przeniesiemy z dyskusją? Ja nie czuję się wystarczająco w temacie by taki wpis robić.

5. btm napisał(a):
09 kwietnia 2008, 08:45:15

Bojkotuje pisanie na na J. od czasu jak mi admin zabrał poziom 0 ;p
Link jest kompatybilny, bo de-facto na stronie nie ma piosenek do popbrania – propagujemy legalność i skupiamy się raczej na społeczeństwie, automatach, turniejach. Z rzeczy stepmaniowych – możesz wgrać swój profil online i pochwalić się / zobaczyć jak grają inni ;-)
Może któregoś dnia popełnie wpis, to dam znać ;p

6. suchy napisał(a):
09 kwietnia 2008, 08:56:04

widze ze sporo osob ddruje :D

7. Grzegorz napisał(a):
09 kwietnia 2008, 10:01:47

Rewelacja! Dzięki za podzielenie się pomysłem.

8. Refresh napisał(a):
09 kwietnia 2008, 10:25:32

<OT>O właśnie, trzebaby było się znowu spotkać z ludźmi i ‘potańczyć’ bo własnej maty nie mam xP
a już niedługo simfile.pl ^^</OT>

Programik ciekawy, ale ja szczerze nie przepadam za brakiem spacji w smsach, jakoś mnie to odpycha.

9. Phisikus napisał(a):
09 kwietnia 2008, 13:58:45

hmm… dziwne by było dostać jedno słowo:

nastawwodęnaherbatę

:>

10. Grzegorz | grzglo.jogger.pl napisał(a):
09 kwietnia 2008, 13:59:57

@Phisikus: To kwestia przyzwyczajenia, tak czy owak dostałbyś „NastawWodęNaHerbatę”.

11. luktom napisał(a):
09 kwietnia 2008, 14:02:31

Mj klga swg czs psł p, jk t n mwł „trck” (mój kolega swego czasu pisał po, jak to on mówił „turecku”, czyli miało to polegać na wywalaniu zbędnych samogłosek, lub – w wersji turecki extreme, której przykład powyżej – wywalaniu wszystkich samogłosek :D)

12. Chris Trynkiewicz napisał(a):
09 kwietnia 2008, 19:35:59

Osobiscie sadze, ze dla 50 znakow nie warto utrudniac komus zycia… Ale pomysl ciekawy :)

13. rozie napisał(a):
09 kwietnia 2008, 19:40:00

Utrudnienie jest minimalne – SMS jest nadal czytelny bez problemu. Poza tym, jeśli komuś zależy, to może dopisać sprawdzanie czy/ile warto ścinać i ścinać tylko minimalną ilość... Jak dla mnietekst rozbity na 2 SMSy jest mniej czytelny, niż takie coś w 1, szczególnie, że telefon wyświetla mi drugiego jako nowszego, co zaburza naturalny sposób czytania (z góry na dół).

14. deschek napisał(a):
02 maja 2008, 10:41:48

W siemensie SL45i bylo takie cos juz dobre kilka lat temu i BYLO idiotoodporne :)

15. Pomiędzy bitami napisał(a):
28 sierpnia 2011, 10:40:36

Smssender 0.7

Nowa wersja 0.7 skryptu SMSsender.pl . Wszystkie komunikaty po angielsku, przy okazji wyeliminowana litrówka w polskiej wersji. Nie zaimplementowany podział na wiele wiadomości, ale za to eksperymentalnie wdrożona kompresja , czyli skracanie [...]