W celu naprawy błędu można spróbować następującej komendy:
curl https://cli-assets.heroku.com/apt/release.key | sudo apt-key add –
Po czym ponownie można wywołać polecenie:
sudo apt update
W celu naprawy błędu można spróbować następującej komendy:
curl https://cli-assets.heroku.com/apt/release.key | sudo apt-key add –
Po czym ponownie można wywołać polecenie:
sudo apt update
Zainstalowane aplikacje za pomocą Centrum oprogramowania Ubuntu można łatwo dodać poprzez otwarcie Podglądu i wyszukanie odpowiedniej aplikacji lub poprzez wyświetlenie programów, kliknięcie na odpowiednią ikonę aplikacji PPM(prawym przyciskiem myszki) i wybranie dodania do Ulubionych.
Sprawa ma się trochę inaczej, gdy aplikację zainstalowaliśmy ręcznie poprzez komendę apt-get install lub ściągając odpowiedni pakiet zewnętrznie.
W takim przypadku, tworzymy odpowiedni plik skrótowy do aplikacji.
Przykładowy kod w skrócie z rozszerzeniem plik.desktop może wyglądać, m.in. następująco:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/path/to/application
Name=App name
Comment=Some comment
Icon=/path/to/icon
Nie zapominajmy o dodaniu praw dostępu do uruchamiania, chmod +x app.desktop. I gdy tworzymy plik na pulpicie systemowym możemy zezwolić na uruchamianie, poprzez co, mamy od razu skrót do aplikacji dostępny również na pulpicie.
Po zakończonej edycji pliku kopiujemy go do lokalizacji /usr/share/applications.
Oczywiście potrzebujemy do przekopiowania praw root-a.
Możemy wówczas otworzyć powyższą lokalizację w terminalu i wpisać odpowiednią komendę: sudo cp /home/user-name/Pulpit/app-name.desktop ./.
W ten sposób mamy dodany skrót do widocznych aplikacji w menu.
Teraz wystarczy wyświetlić lub wyszukać program kliknąć PPM i wybrać dodanie do ulubionych, a ikona aplikacji pojawi się w pasku menu. (pamiętajmy zawsze, że linux rozpoznaje wielkość liter, co ma duże znaczenie, bo możemy nie znaleźć naszego skrótu aplikacji).
W nowszych dystrybucjach linux-a może istnieć problem zainstalowania RStudio, które nie jest jeszcze na chwilę obecną wydane pod to konkretne wydanie Ubuntu (problem z zależnościami bibliotek).
Rozwiązanie problemu:
Uruchomić w terminalu komendę:
sudo aptitude install clang
Następujące NOWE pakiety zostaną zainstalowane: clang clang-10{a} lib32gcc-s1{a} lib32stdc++6{a} libc6-i386{ab} libclang-common-10-dev{a} libclang-cpp10{a} libobjc-9-dev{a} libobjc4{a} libomp-10-dev{a} libomp5-10{a} libpfm4{a} libz3-4{a} libz3-dev{a} llvm-10{a} llvm-10-dev{a} llvm-10-runtime{a} llvm-10-tools{a} 0 pakietów aktualizowanych, 18 instalowanych, 0 do usunięcia i 0 nieaktualizowanych. Do pobrania 57,8 MB archiwów. Zajęte po rozpakowaniu: 377 MB. Następujące pakiety mają niespełnione zależności: libc6-i386 : Wymaga: libc6 (= 2.31-0ubuntu9.2) but 2.31-0ubuntu9.3 is installed Następujące działania rozwiążą problemy z zależnościami: Zatrzymanie bieżących wersji następujących pakietów: 1) clang [niezainstalowany] 2) clang-10 [niezainstalowany] 3) lib32gcc-s1 [niezainstalowany] 4) lib32stdc++6 [niezainstalowany] 5) libc6-i386 [niezainstalowany] 6) libclang-common-10-dev [niezainstalowany] Zaakceptować rozwiązanie? [Y/n/q/?] n
Wybieramy “n”, że się nie zgadzamy.
Następnie, gdy pojawi się:
Następujące działania rozwiążą problemy z zależnościami: Usunięcie następujących pakietów: 1) libc-dev-bin [2.31-0ubuntu9.3 (now)] Instalacja następujących pakietów: 2) libc-dev-bin:i386 [2.31-0ubuntu9.2 (focal-updates)] Cofnięcie następujących pakietów do wcześniejszych wersji: 3) libc6 [2.31-0ubuntu9.3 (now) -> 2.31-0ubuntu9.2 (focal-updates)] 4) libc6:i386 [2.31-0ubuntu9.3 (now) -> 2.31-0ubuntu9.2 (focal-updates)] 5) libc6-dbg [2.31-0ubuntu9.3 (now) -> 2.31-0ubuntu9.2 (focal-updates)] 6) libc6-dev [2.31-0ubuntu9.3 (now) -> 2.31-0ubuntu9.2 (focal-updates)] Zaakceptować rozwiązanie? [Y/n/q/?] Y
Akceptujemy wyświetlone rozwiązanie poprzez “Y”. W następnym kroku też kontynuujemy i powinna zacząć się wybrana konfiguracja.
Po zakończeniu instalujemy RStudio komendą:
sudo gdebi rstudio-[downloaded_version].deb
Ćwiczenie.
Napisz klasę ConnectionManager, która będzie zarządzać tablicą obiektów Connection (tablica ma mieć stałą liczbę elementów). Programista-klient nie ma mieć możliwości jawnego tworzenia obiektów klasy Connection, polegając jedynie na statycznej metodzie z klasy ConnectionManager. Kiedy klasie ConnectionManager skończą się obiekty Connection, metoda ta powinna zwracać referencję pustą. Prztestuj działanie klas w metodzie main().
Rozwiązanie:
package net.traininguniverse.access; class Connection { private Connection() { } public static Connection makeConnection() { return new Connection(); } } public class ConnectionManager { static int count = 0; static final int size = 2; static Connection makeConnection() { count++; if (count <= size) return Connection.makeConnection(); else return null; } public static void main(String[] args) { Connection[] connections = new Connection[size]; connections[0] = makeConnection(); connections[1] = makeConnection(); System.out.println(connections[1]); System.out.println(makeConnection()); } }
Ćwiczenie:
Utwórz klasę z polami chronionymi i drugą (w tym samym pliku), która posiada metodę manipulującą danymi chronionymi z pierwszej klasy.
Rozwiązanie:
package net.traininguniverse.main; class Animal{ protected String name; protected int age; } public class Main { void setName(Animal animal, String name){ animal.name = name; } String getName(Animal animal){ return animal.name; } void setAge(Animal animal, int age){ animal.age = age; } int getAge(Animal animal){ return animal.age; } public static void main(String[] args){ Animal animal = new Animal(); Main main = new Main(); main.setName(animal,"Reksio"); main.setAge(animal,5); String name = main.getName(animal); int age = main.getAge(animal); System.out.println("Zwierzak nazywa się: " + name + " oraz ma " + age + " lat"); } }
Uwaga!
Tylko jedna klasa może być publiczna, inaczej kompilator wyrzuci błąd, że muszą być w oddzielnych plikach.
Ćwiczenie.
Wykaż, że metody chronione podlegają dostępowi pakietowemu, ale nie są metodami publicznymi.
Rozwiązanie:
Tworzymy dwie klasy: Animal i Owner w dwóch oddzielnych pakietach.
Odpowiednie klasy są dostępne poniżej:
Animal.java:
package net.traininguniverse.hiddden; public class Animal { protected boolean isHungry(boolean feed) { if (feed) return false; else return true; } public boolean showIsHungry(boolean feed) { return isHungry(feed); } }
Owner.java:
package net.traininguniverse.main; import net.traininguniverse.hiddden.Animal; public class Owner { public static void main(String[] args) { Animal animal = new Animal(); //animal.isHungry(true); //blad kompilatora (protected access), wiec nie jest publiczna System.out.println(animal.showIsHungry(true)); //wyswietla false, czyli podlega dostepowi pakietowemu } }
Środowisko:
-Java 11
-IntelliJ IDEA 2021.2.1
-Linux
Pokażę pokrótce jak można w powyższym środowisku stworzyć własne biblioteki pomocnicze oraz je potem wykorzystać.
Ma to na celu zredukowanie lub wyeliminowanie powtarzania kodu (można też w ten sposób korzystać z czyichś gotowych bibliotek w swoim kodzie).
Kolejne kroki:
1. Tworzę nowy projekt z biblioteką, którą chcę wykorzystać, np. w innym projekcie.
2. Eksportuję napisaną bibliotekę do jar-a.
3. Tworzę nowy projekt, w którym wykorzystam posiadaną już bibliotekę.
4. Importuję jar-a do nowego projektu.
Poniżej krótki film instruktażowy:
Zazwyczaj do operacji związanej z repozytoriami na Githubie korzystało się z nazwy użytkownika i hasła.
Teraz zamiast hasła powinno używać się osobistego tokenu dostępowego.
Ma to na celu m.in. poprawę bezpieczeństwa.
Do określonego tokenu przydzielane są wybrane określone przez użytkownika uprawnienia.
Natomiast po roku nie używania tokenu zostaje on automatycznie usunięty.
Poniżej link do strony, jak utworzyć nowy token:
https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token
Warto już teraz dokonać zmiany, ponieważ niebawem uwierzytelnianie za pomocą hasła wygaśnie i nie będzie możliwe.
Przedstawię pokrótce jak można wrzucić utworzoną aplikację na serwery Heroku.
Tutaj przykład utworzonego prostego “Hello World” we frameworku Javy – Springu:
https://github.com/traininguniverse/HerokuDeployExample
Ściągamy repo i następnie je otwieramy w terminalu:
cd HerokuDeploExample-master
Żeby mieć zastosowanie do deploy-owania nowej własnej aplikacji usuwamy ukryty folder “.git”.
I zaczynamy tak jakbyśmy mieli tworzoną aplikację od nowa.
Najpierw inicjalizujemy puste repozytorium:
git init
Dodajemy na podstawie danych z Heroku ustawienia lokalne git:
git config user.email “imie.nazwisko@domena.pl”
git config user.name “Imie Nazwisko”
Dodajemy pliki i zatwierdzamy:
git add .
git commit -m “Add app”
Tworzymy aplikacje na Heroku – podajemy nazwę:
heroku create app-name
Sprawdzamy czy zdalne repo jest dobrze ustawione:
git remote -v
heroku git:remote -a app-name
Wrzucamy repozytorium na serwer:
git push heroku master
Otwieramy aplikację komendą:
heroku open
Niektórym osobom, które mają wyszczególnione drukarki firmy Hewlett Packard z usługą ePrint, czyli drukowaniem, np. za pomocą wysyłania wiadomości email do drukarki z Internetu, może się pojawić problem z połączeniem się z usługami sieci Web. A co za tym idzie nie wydrukujemy nic z Internetu.
Od listopada 2020 certyfikat poszczególnych modeli mógł wygasnąć. Czy Twój model też się do nich zalicza, można sprawdzić na oficjalnej stronie HP:
https://support.hp.com/pl-pl/document/c05256366
Na nic więc próby resetowania ustawień drukarki i wielokrotne ponowne próby łączenia się z usługą. Niestety starsze modele drukarek nie akceptują aktualizacji firmware, czyli oprogramowania sprzętowego bezpośrednio na samym urządzeniu.
Na szczęście pozostałe usługi drukowania poprzez Ethernet, sieć bezprzewodową lub też USB wciąż pozostają aktywne.