Przejdź do głównej zawartości

Posty

Wyświetlanie postów z 2020

Swift. Dzielimy kod między aplikacjami

Czy można architekturę aplikacji mobilnej przekształcić na budowę bardziej modułową? W backendzie to zawsze się zwraca ale czy zwraca się w aplikacji mobilnej? Czy warto funkcjonalności pociąć na niezależne moduły skoro używamy ich i tak w jednej aplikacji? Czy ma to sens, żeby chować je za kolejną warstwą abstrakcji? Czy, w końcu, da się to zrobić w sposób wygodny, który nam pomaga zamiast stawać na drodze?Tradycyjne podejście zakłada użycie CocoaPods. Każdy framework ma swoje repozytorium z którego dociągamy źródła i tworzymy projekt z podsami. Wszystko fajnie poza jednym szczegółem, chciałbym móc edytować źródła moich modułów w miejscu, gdzie ich używam i komitować bez dodatkowych czynności, tzn. chciałbym, żeby z punktu widzenia używania kodu fakt, że komponenty są w innym repozytorium, był niewidzialny. Chciałem użyć Swift Package Managera i jego pakietów. SPM w kwestii używania komponentów w sposób przezroczysty również przypomina cocoapodsy, bo mimo, że możesz mieć swój local c…

Swift, architektura, asynchroniczność

Wywołania asynchroniczne są jednym z elementów bardzo mocno wpływających na budowę całej aplikacji. Często jednak są traktowane jako zło konieczne lub nawet unikane, o ile to możliwe. Jednocześnie sam system iOS oraz składnia języka swift dostarczają narzędzi ułatwiających pracę w środowisku asynchronicznym.

Swift, podobnie jak JavaScript asynchroniczne wywołania opiera na callbackach. Oznacza to, że wołając funkcję asynchroniczną, jednym z argumentów jest inna funkcja (lub blok kodu), która ma zostać wywołana, kiedy praca asynchroniczna się zakończy. Mimo, że działanie jest odmienne od wywołania synchronicznego, zapis w kodzie wygląda mimo wszystko podobnie. Na przykład:


func synchroniczna() -> String { //jakaś praca w funkcji return "Wynik" } //wywołanie synchronicznej let dane = synchroniczna() print(dane) func asynchroniczna(callback: @escaping (String) -> Void) { DispatchQueue.global().async { //jakas praca callback("Wynik&qu…

Karty lojalnościowe

Tego nikt chyba nie lubi.
Portfel wypchany plastikowymi kartami, ciężko odnaleźć w nim cokolwiek istotnego, ledwo mieści się w kieszeniach a to tylko po to, żeby raz na ruski rok robiąc zakupy móc nabić sobie punkty na rabat kiedyś w dalekiej przyszłości. Jedyną istotną częścią większości takich kart jest kod kreskowy, cała otoczka z plastiku jest dla dziwnie rozumianej wygody klienta.  W przypadku takich kart można zrobić zdjęcie kodu kreskowego i używać go zamiast samej karty. To pomoże odchudzić portfel, za to zrobi bałagan w galerii zdjęć w telefonie. Tu z pomocą wkraczają programy w stylu "karty lojalnościowe".   Chciałem zainstalować sobie jeden z takich programów, ale nie znalazłem niczego dla siebie. Szukając w appstore znajdowałem albo aplikacje, które miały też gazetki sklepowe (których nie potrzebuję), albo takie, które ważyły ze 100MB (czemu tak prosta funkcjonalność zajmuje tak ogromną przestrzeń?), albo nawet ... pozwalały przechować kilka kart i kazały dopłaca…

Rust

“We must all either wear out or Rust out, every one of us. My choice is to wear out.” — Theodore Roosevelt.

 Od dawna chciałem to zrobić. Przeglądałem kursy online, czytałem książki, ale jakoś nie umiałem zabrać się za nic konkretnego. Nie miałem pomysłu, a pisanie kolejnego hello worlda nie daje już takiej przyjemności jak kiedyś. Na szczęście pojawił się problem do rozwiązania. Mam dużą kolekcję zdjęć. Podchodzi pod 1TB i ciągle zawiera sporo duplikatów. Usuwam je "na bieżąco" co w praktyce oznacza, że jak mi się przypomni to szukam i usuwam aż się nie znudzę, czyli dość szybko. Mam nawet zautomatyzowany skrypt w pythonie, który je kataloguje i też (przynajmniej w teorii) usuwa duplikaty. Ale wymarzyłem sobie coś innego. Chciałbym program, który przemieli wszystkie pliki, policzy ich skróty kryptograficzne, zapisze w bazie danych i za każdym razem,  kiedy nowy plik będzie tam dodawany - od razu sprawdzi, czy nie było go już wcześniej. Mój dysk sieciowy na którym trzymam zd…