Pisałem kilkukrotnie o tym, że od ponad dwóch lat uczę się programowania w Swift i że od grudnia ubiegłego roku pracuję jako junior deweloper. Dzisiaj czas na kolejny rozdział tej historii. W Mac App Store dostępna jest już moja pierwsza aplikacja dla Maca - Negative, czyli prosty czytnik PDF-ów z trybem nocnym.

Powstanie tej aplikacji jest wynikiem mojej własnej potrzeby. Jak pewnie niektórzy z Was wiedzą, od początku uczę się programowania z podręczników wydawanych w formie PDF-ów m.in. przez Paula Hudsona (Hacking with Swift), Simona NG (AppCoda), czy redaktorów serwisu RayWenderlich.com (w ty samego założyciela Raya Wenderlicha). Wszystkie one, jak to e-booki w formacie PDF, posiadają białe tło. Nauka po zmroku, nie ważne, czy dany podręcznik wyświetlony był na Macu czy iPadzie, była po prostu zabójcza dla moich oczu. Zmniejszenie jasności ekranu i tak nie za wiele dawało. Białe tło po prostu raziło.

Próbowałem korzystać z tych podręczników w wersji ePub i czytać je w iBooks, które oferuje odwracanie kolorów właśnie dla e-booków w tym formacie. Jednak z ePubami mam problem. Fragmenty kodu są w nich zwykle źle wyświetlane. Jeśli w e-booku ustawione są zbyt duże litery, to linie kodu są zwykle przycinane. Trzeba je przewijać, otwierać w nowym oknie lub zmniejszyć wielkość liter całego podręcznika do takich, że czytanie go staje się mało przyjemne.

PDF-y ze swoją sztywną konstrukcją, w której nie ma mowy o tym, by kod w podręczniku był źle wyświetlany, okazały się więc dla mnie najlepsze. Niestety nie znalazłem żadnego programu dla Maca, który pozwoliłby odwracać w nich kolory, tak by wygodnie, bez męczenia oczu, można było je czytać po zmroku. Z kolei odwracanie kolorów w całym macOS było już dla mnie aktem desperacji. Większość programów, z którym korzystam, w tym Xcode, umożliwia takie ustawienie kolorów, by wygodnie pracowało się po zmroku.

Postanowiłem więc napisać samemu taki czytnik PDF-ów, który będzie odwracał kolory sztywnego PDF-a. Do pracy zabrałem się pod koniec września ubiegłego roku. Początkowo okazało się to w sumie dość proste. Wystarczy bowiem na warstwę (layer) widoku PDFView nałożyć  odpowiednie filtry. Ponieważ jednak przez pierwsze dwa lata uczyłem się programowania w Swift niemal wyłącznie dla iOS (zaliczając tylko jeden prosty dość podręcznik pisania aplikacji dla macOS), miałem problem z początkowym ogarnięciem logiki otwierania samych PDF-ów. Cały program trzeba było zbudować w oparciu o schemat „Document Based Apps”. Tutaj swoją pomocną dłoń wyciągnął do mnie Marcin Maciukiewicz, doświadczony deweloper dla macOS i iOS z wieloletnim stażem (twórca m.in. pierwszego klienta dla iOS Blipa - takiego polskiego Twittera, który był popularny na pod koniec ubiegłej dekady). To on pokazał mi jak rozwiązać pewne problemy (m.in. właśnie z logiką otwierania dokumentów) i sporo nauczył na temat rzeczy wiążących się nierozerwalnie z programowaniem (m.in. kontrola wersji GIT). Marcin dołączył do projektu, a jego rady, jak rozwiązać pewne problemy są dla mnie cały czas pomocne.

Od grudnia do końca kwietnia projekt był właściwie zawieszony w związku z rozpoczęciem przeze mnie pracy na stanowisku junior dewelopera i projektami, nad którymi pracowałem i pracuję w firmie. Musiałem też poprawić w nim jeszcze kilka szczegółów zanim udostępniłbym go Wam. Ostatecznie uporałem się z nimi w ten długi weekend.

Dedykuję go tym wszystkim z Was, którzy uczą się po nocach programowania (czy czegokolwiek innego) z PDF-ów otwieranych właśnie na Macu.

Od dzisiaj Negative dostępny jest w Mac App Store do pobrania za darmo.

Negative ma trzy tryby pracy:

  • normalny, bez odwróconych kolorów. W taki sposób otworzycie sobie dokumenty np. w Podglądzie na Macu
  • odwrócony, tutaj kolory są po prostu odwrócone, wszystko jest w negatywie
  • odwrócony z sepią, obraz w negatywie z dołożoną sepią, co moim zdaniem jeszcze bardziej poprawia wygodę czytania w ciemności.

Każdy z trybów aktywowany jest po kolei, jak na karuzeli, po kolejnym kliknięciu w przycisk z okiem na pasku narzędziowym.

Dodatkowo PDF-y można przeglądać na cztery sposoby: pojedyncza strona, pojedyncza strona w trybie ciągłym (mój ulubiony i najbardziej wygodny), dwie strony oraz dwie strony w trybie ciągłym.

Na pasku narzędziowym znajdziecie także pole do wprowadzenia numeru strony, do której chcecie skoczyć.

Jest jeszcze wiele do zrobienia:

  • dodanie pionowego okna nawigacyjnego z miniaturkami stron w dokumencie, jak w Podglądzie dla macOS
  • zapamiętywanie ostatnio otwartej strony dla dokumentu, tak by otwierał się bezpośrednio na niej
  • dodanie zakładek (w dalszym planie)
  • poprawa interfejsu (nie mam w tym temacie doświadczenia, dlatego Negative pozbawiony jest UX-owych wodotrysków).

Jeszcze na koniec drobna uwaga: jeśli żaden dokument nie był otwarty, to program uruchomi się bez otwartego okna. Należy w menu wybrać File -> Open.

Zapraszam do korzystania i do uwag, dotyczących działania Negative’a i funkcji, jakie powinny się w nim znaleźć.