W momencie, gdy pisania jest czymś więcej niż postem do wrzucenia w mediach społecznościowych, często przychodzi moment, gdy zwykła korekta błędów, wbudowana choćby w popularne przeglądarki internetowe, okazuje się niewystarczająca. W takiej sytuacji można sięgnąć po zewnętrzne, dedykowane usługi. W moim przypadku wybór padł na LanguageTool. I to nie tylko dlatego, że całkiem dobrze radzi sobie z językiem polskim, do tego nawet wersja bezpłatna w wielu przypadkach będzie wystarczająca, a jakby co, wersja płatna jest na tyle tania, że też nie powinno to stanowić problemu. Również dlatego, że jeśli zajdzie taka potrzeba, można uruchomić LanguageTool na swoim serwerze czy też komputerze.

Sprawdzanie tekstu z LanguageTool

Oczywiście nic nie stoi na przeszkodzie, by korzystać z LanguageTool w ramach usługi – wystarczy zainstalować wtyczkę do przeglądarki i gotowe. Sam przez dłuższy czas korzystałem nie tylko z wersji bezpłatnej, ale również bez zakładania konta.

Nastał jednak taki moment, że wersja bezpłatna, przynajmniej w ramach usługi, przestała wystarczać. Głównie dlatego, że w takim przypadku jesteśmy ograniczeniu do 10 000 znaków w polu tekstowym. Z jednej strony jest to naprawdę dużo, z drugiej – od czasu do czasu zdarzają mi się artykuły, które ten limit przekraczają (np. ten artykuł to ponad 9 200 znaków, a zdarzają się dłuższe… dużo dłuższe). Do tego aktualnie pracuję nad pewnymi projektami, gdzie 10 000 znaków tekstu to jest relatywnie niewiele.

LanguageTool w wersji premium

W tym momencie z redakcyjną partnerką Beatą uznaliśmy, że być może pora na wersję płatną, czyli premium. Zwłaszcza że oprócz tego, że limit znaków jest większy (60 000 znaków na pole tekstowe), to jeszcze wersja dla dwóch użytkowników na rok kosztuje tylko 215,82 zł. I to jeszcze brutto, co w moim przypadku – jako czynnego płatnika podatku VAT – daje 175,46 zł rocznie. Za 2 użytkowników, czyli 7,30 zł miesięcznie (8,99 zł z VAT).

Wersja dla jednego użytkownika kosztuje 97,48 zł netto, czyli 119,90 zł brutto, przy płatności za cały rok z góry (wychodzi 8,12 zł netto, i 9,99 zł z podatkiem VAT miesięcznie).

60 000 znaków? A co gdy będzie… np. 350 000?!?

I choć w pewnym sense decyzja zapadła, bo poza ilością (albo liczbą, jak kto woli ;-)) znaków plan premium to również dodatkowe bonusy. Takie jak np. dodatki do programu Microsoft Word, czy Dokumentów Google, czy też „ulepszone sprawdzanie gramatyki, interpunkcji i stylu”, to pojawiło się pytanie, co w sytuacji, gdy znaków będzie więcej dni 60 000?

Teoretycznie mało prawdopodobne, bo limit dotyczy pojedynczego pola tekstowego (tak samo, jak 10 000 znaków z wersji bezpłatnej), a w przypadku dokumentów liczone jest raczej „per strona”, bo z tego, co mówiła koleżanka, to tak u niej to wyglądało (redakcja książki 353 000 znaków).

Ale przyjmijmy, że potencjalnie taka możliwość istnieje, że kiedyś się rozpędzę, i trzasnę artykuł na ponad 60 000 znaków… ;-)

LanguageTool na własnym komputerze lub serwerze

I tak dochodzimy do (serwera) LanguageTool na własnym komputerze lub serwerze. Gdzie wprawdzie wszystkich opcji premium nie dostaniemy, przynajmniej za darmo, ale – co testowałem już kilkukrotnie – możemy pozbyć się limitu znaków. I to nie tylko 10 000, ale i 60 000, i nawet…

Uruchomienie LanguageTool lokalnie jest wręcz abanalne – wystarczy Java oraz paczka, którą można pobrać bezpośrednio ze strony LanguageTool (zalecam), lub z serwisu GitHub.

Po jej rozpakowaniu wystarczy – będąc w katalogu z rozpakowaną zawartością paczki z LanguageTool – na komputerze z Windowsem skorzystać z polecenia:

java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*"

Jakby okazało się, że „java nie jest rozpoznawanym programem”, wystarczy odrobinę zmodyfikować polecenie, dodając ścieżkę do Javy:

"C:\Program Files (x86)\Java\jre1.8.0_281\bin\javaw.exe" -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*"

Oczywiście zamiast „C:\Program Files (x86)\Java\jre1.8.0_281\bin\javaw.exe” należy wstawić ścieżkę do aktualnie używanej Javy (jeśli nie zadziała jako zmienna środowiskowa).

W przypadku serwera na Linuksie (choć wiem, że są tacy, co używają Linuksa jako podstawowego systemu na podstawowym komputerze ;-)) będzie to polecenie identyczne, do standardowego polecenia w Windowsie (w końcu to Java):

java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*"

Gdyby okazało się, że nie ma Javy (a jest spora szansa, że tak będzie), to można ją doinstalować np. poleceniem (w Debianie, z którego korzystam… na serwerach ;-)):

sudo apt install default-jre

A w przypadku Windowsa najlepiej pobrać ze strony Oracle…

Jeśli wszystko się udało, to w ustawieniach wtyczki w przeglądarce wystarczy w tym momencie ustawić lokalny serwer LanguageToola:

By serwer LanguageTool uruchomiony na jakimś serwerze, by był dostępny również dla innych urządzeń, należy do polecenia dodać:

--public

Czyli:

java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*" --public

Zasadniczo, poza sytuacją, gdy potrzebujemy zdefiniować np. ścieżkę dostępu, to zarówno dla Windowsa, jak i Linuksa jest to identyczna komenda.

W tym momencie w ustawieniach wtyczki LanguageTool trzeba jeszcze zmienić adres serwera na urządzenie (serwer), gdzie jest uruchomiona usługa:

I jako adres serwera wpisujemy np. dla serwera LanguageTool działającego na maszynie dostępnej w sieci LAN z adresem IP 192.168.4.2:

http://192.168.4.2:8081/v2

Testowałem zarówno na Raspberry Pi, jak i na typowym serwerze (VPS). W obu przypadkach działa. Choć na Raspberry Pi musiałem dodać skrypt pilnujący usługi, by w razie czego ją zrestartować, bo raz na kilka godzin potrafiła się zawiesić.

Screen, czyli wirtualna konsola

W przypadku uruchamiania w wersji „na serwerze” warto pomyśleć nad jakimś sensownym modelem działania. Może to być stworzenie usługi w systemie, można też skorzystać np. z oprogramowania Screen, by uruchomić LanguageTool w wirtualnej konsoli.

Ja zdecydowałem się – przynajmniej na razie – na wersję z wykorzystaniem programu Screen. W takim przypadku serwer LanguageTool można uruchomić za pomocą polecenia:

screen -d -m -S LanguageTool bash -c 'cd /opt/languagetool && java -cp languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*" --public'

Przejście do tego ekranu (np. w celu zamknięcia, czy też kontroli, czy wszystko działa) odbywa się za pomocą polecenia:

screen -r LanguageTool

A gdy chcemy wyłączyć konsolę z LanguageTool, wystarczy skorzystać z polecenia:

screen -XS LanguageTool quit

Całość można ubrać w prosty skrypt, który następnie można ustawić tak, by wykonywał się przy uruchamianiu serwera.

Automatyczne uruchamianie skryptu

Ja w tym celu postanowiłem wykorzystać systemowy harmonogram zadań (CRON), dodając tam taką regułkę, która odpala przygotowany skrypt, z 20-sekundowym opóźnieniem:

@reboot sleep 20 && /usr/local/bin/languagetool

Z tym że m.in. ze względów bezpieczeństwa skorzystałem tutaj z CRONa „zwykłego użytkownika”, a nie systemowego.

Połączenie szyfrowane (HTTPS)

Gdy serwer LanguageTool znajduje się w lokalnej sieci LAN, do której mają dostęp tylko zaufane urządzenia, to nie jest to aż tak istotne, ale w przypadku, gdy serwer LanguageTool zostanie uruchomiony w internecie, tak by był dostępny z dowolnego miejsca, warto pomyśleć o dodatkowym zabezpieczeniach.

Zwłaszcza jeśli chodzi o szyfrowanie ruchu, który domyślnie idzie przez połączenie nieszyfrowane (HTTP), więc potencjalnie każde urządzenie „po drodze” (np. u dostawcy internetu) może przechwycić sprawdzany tekst. Gdy jest to nowy artykuł na bloga, to nie ma problemu, ale gdy będzie to już coś bardziej prywatnego, to może być problem.

Można zacząć od wyłączenia sprawdzania pisowni na wybranych stronach (w ustawieniach wtyczki), ale zdecydowanie lepszym rozwiązaniem jest schowanie LanguageTool za jakimś proxy z aktywną obsługą HTTPS, np. Nginx Proxy Manager (NPM). Wtedy też oprócz użycia HTTPS zamiast HTTP, jako adresu serwera możemy użyć domeny/subdomeny, zamiast adresu IP.

Prywatność, czyli bezpieczeństwo

Jest jeszcze jedna – przynajmniej potencjalna – korzyść z własnego serwera LanguageTool, zwłaszcza w sytuacji, gdy korzystamy z niego lokalnie (komputer, zaufana/bezpieczna sieć LAN), lub aktywowaliśmy połączenie szyfrowane do serwera zdalnego (HTTPS).

Chodzi i prywatność. Bo choć gwarancji nigdy nie ma, to zdecydowanie zwiększamy szanse na to, że informacje o tym, co piszemy, nie trafiają nigdzie poza nasze urządzenia/serwery. Oczywiście nie ma(m) powodów, by nie ufać osobom stojącym za projektem LanguageTool, ale… są zapewne osoby, dla których to będzie ważny argument/element.

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk