Skrót do ulubionych aplikacji w pasku menu pod Ubuntu

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).

Ubuntu 20.04 i instalacja RStudio

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ępnie otrzymamy mniej więcej coś takiego:

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

Java | dostęp do klas

Ć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());
    }
}

Java | pola chronione

Ć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.

Java | dostęp do metod chronionych

Ć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
    }
}

 

Java i własna biblioteka narzędziowa

Ś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:

GitHub – personal access token

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.

Heroku deploy – z przykładem aplikacji

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

Jeżeli istnieje już utworzona aplikacja (np. poprzez panel na stronie internetowej), to wywołujemy komendę:
heroku git:remote -a app-name

 

Wrzucamy repozytorium na serwer:

git push heroku master

Automatycznie ta przykładowa aplikacja z github-a zostaje już uruchomiona.

 

Otwieramy aplikację komendą:

heroku open

W przeglądarce dodajemy jeszcze na końcu w pasku adresu napis “/hello”.
Powinno ukazać Nam się tekst “Hello World”.

Nie można połączyć się z usługami sieci Web – drukarki HP

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.