O Szymon Wójtowicz

Programista C++/Qt. Tworzący aplikacje mobilne i desktopowe.

Dodawanie nowego certyfikatu SSL.

W artykule przedstawiono jak utworzyć nowy certyfikat Apache Web Server Self-Signed Certificate używając narzędzi openssl.

openssl_logoPROCEDURA

  1. Sprawdź datę wygaśnięcia istniejącego certyfikatu jeżeli go posiadasz new.crt używając następującego polecenia:
    > openssl x509 -in new.crt -noout -enddate
    notAfter=Dec 30 11:10:42 2013 GMT
  2. Wygeneruj nowy certyfikat używając polecenia new.key do tworzenia prywatnego certyfikatu.
    > openssl req -new -key new.key -out new.csr

    Jeżeli potrzebujesz klucza 2048 bitowego RSA (prywatnego) dla użyj:

    > openssl genrsa -out new.key 2048

    Zauważ: flaga –des3  może zostać użyta jeżeli nie chcesz ochrony hasłem swojego klucza.

    Sprawdź teraz informacje o kluczu:

    > openssl req -in new.csr -noout -text
    Certificate Request:
     Data:
     Version: 0 (0x0)
     Subject: C=PL, ST=SL, L=Sosnowiec, O=Artmetic, OU=Master, CN=Artmetic/emailAddress=artmetic@artmetic.pl
     Subject Public Key Info:
     Public Key Algorithm: rsaEncryption
     Public-Key: (4096 bit)
     Modulus:
     00:cd:41:ec:df:20:66:44:05:1e:fb:f9:a5:cc:7a:
     c8:5b:14:d0:0f:5b:01:aa:39:1c:64:f7:f0:6b:dd:
     2e:7f:35:fd:50:24:c4:51:9a:69:88:92:78:59:4a:
     dd:9f:aa:c5:de:57:7e:58:84:fe:ab:68:11:cb:71:
     b1:11:6f:2b:71:9e:e6:2d:75:05:84:ff:6e:b1:d6:
     a0:28:25:19:f2:a7:1c:62:f7:61:09:dc:fc:45:5f:
     8b:95:d7:2c:10:69:f7:e4:dd:6a:ee:ea:d0:25:ea:
     8b:a8:95:0f:8f:87:13:9a:8b:68:c4:98:9e:17:a6:
     68:e5:d8:d6:73:39:d3:b5:81:49:65:3f:d2:29:c2:
     a1:29:a4:ad:3a:d1:24:93:8f:12:aa:ea:a6:61:56:
     d3:5a:03:a5:63:1a:89:50:ac:fa:a9:a3:4d:09:c0:
    .........
  3. Wygeneruj nowy klucz na kolejne 365 dni.
    > openssl x509 -req -days 365 -in ssl/new.csr -signkey ssl/testingcert.key -out ssl/new.crt
  4. Utwórz new.pem dla klucza new.key.
    > cp new.key new.pem
  5. Dopisz do pliku new.pem zawartość pliku new.crt.
    >  cat new.crt >> ./new.pem
  6. Zweryfikuj nowo utworzny certyfikat.
    > openssl verify ssl/new.crt
    new.crt: C = PL, ST = SL, L = Sosnowiec, O = Artmetic, OU = Programmer, CN = Artmetic, emailAddress = artmetic@artmetic.pl
    error 18 at 0 depth lookup:self signed certificate
    OK
    
    

    Zbinduj certyfikat new.pem z portem4567.

    > openssl s_server -cert new.pem -www -accept 4567 
    Using default temp DH parameters
    ACCEPT
    

    Sprawdź jak certyfikat wyświetla się po połączeniu z portem. Jeżeli nie działa sprawdź firewall.

    >  openssl s_client -connect localhost:4567
    CONNECTED(00000003)
    depth=0 C = PL, ST = SL, L = Sosnowiec, O = Artmetic, OU = Programmer, CN = Artmetic, emailAddress = artmetic@artmetic.pl
    verify error:num=18:self signed certificate
    verify return:1
    depth=0 C = PL, ST = SL, L = Sosnowiec, O = Artmetic, OU = Programmer, CN = Artmetic, emailAddress = artmetic@artmetic.pl
    verify return:1
    ---
    Certificate chain
     0 s:/C=PL/ST=SL/L=Sosnowiec/O=Artmetic/OU=Programmer/CN=Artmetic/emailAddress=artmetic@artmetic.pl
     i:/C=PL/ST=SL/L=Sosnowiec/O=Artmetic/OU=Programmer/CN=Artmetic/emailAddress=artmetic@artmetic.pl
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIIDmjCCAoICCQCNFJcrFLsz8DANBgkqhkiG9w0BAQsFADCBjjELMAkGA1UEBhMC
    A1UEBhMCY2ExEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0
    IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKOZIhvcNAQEBBQADggEPADCCAQoCggEB
    AMY9YCGsqII2jPAbmPskM2hgFKDBfb6LRMOBAu4dHtQiWm5ntO3exLG67HC+kVoH
    0J2HX+nnDi6bbsh244vh7KkpM9rgxkybAyOYYNnDZoiW+87DLxkAR041tX8Vl2yk
    ...

Podstawowe wzory chemiczne

Stężenie procentowe roztworu:
Roztwór o stężeniu 5% oznacza, że w 100g roztworu znajduje się 5g substancji rozpuszczonej.

WZÓR:

MRoz=MS+MRozp

gdzie:
MRozt – masa roztworu
MS – masa substancji
Stężenie molowe roztworu:
Roztwór o stężeniu n mol/dm3 oznacza, że w roztworze o objętości1dm3 znajduje się n moli substancji rozpuszczonej.
n – liczba moli substancji
V – objętość roztworu
Prawo rozcieńczeń Ostwalda:
Jeżli stężenie c jest duże a α jest małe wzór upraszcza się do K=c.α2
Prawo stanu gazu doskonałego (wzór Clapeyrona)
PV=nRT Wzór ten może podlegać różnym modyfikacjom:

Gdy znana jest gęstość gazu, przyjmuje się, że V=1dm3(0,001m3), a masa gazu m równa jest wartości gęstości. Wzór przyjmie postać: . Wzór ten pozwala obliczyć masę cząsteczkową gazu gdy znana jest jego gęstość w określonej temperaturze T i przy określonym ciśnieniu p.
Wzór Nernsta
lub często podaje się go w postaci:
Wzór empiryczny Najprostrzy wzór związku, w którym ilości atomów są najmnieszymi liczbami całkowitymi:
C6H8 – wzór cząsteczkowy   C3H4 – wzór empiryczny
C4H8 – wzór cząsteczkowy   CH2 – wzór empiryczny
N2O4 – wzór cząsteczkowy   NO2 – wzór empiryczny
gęstość roztworu:

gdzie:
m – masa substancji
V – objętość jaką zajmuje substancja
gęstość gazu:
d=m/V, ale w warunkach normalnych 1mol każdego gazu zajmuje objętość 22,4dm3. Gęstośc gazu w warunkach normalnych możemy obliczyć z tej zależności: d=M/22,4dm3. Zależność ta pozwala również obliczyć masę molową gazu gdy znana jest jego objętość.
Liczba Avogadro:
N0=6,023.1023
Objętość molowa gazu:
V0=22,4dm3
Ciśnienie normalne:
P0=1013hPa = 101300Pa
Stała gazowa:
R=8,314J.mol-1.K-1
warunki standardowe:
P=1013hPa, T=293K
warunki normalne:
P=1013hPa, T=273K

Jak odnaleźć zależne biblioteki współdzielone.

Biblioteki współdzielone mogą być odnalezione poprzez wydanie polecenia:

 ldd nazwaAplikacji

Jednak gdy chcemy odnaleść wszystkie biblioteki zależne, które potrzebne są do odpalenia aplikacji skompilowanej dynamicznie możemy posłużyć się poniższym skryptem:

#!/bin/bash
# Author : Hemanth.HM
# Email : hemanth[dot]hm[at]gmail[dot]com
# License : GNU GPLv3
#

function useage()
{
    cat << EOU
Useage: bash $0 <path to the binary> <path to copy the dependencies>
EOU
exit 1
}

#Validate the inputs
[[ $# < 2 ]] && useage

#Check if the paths are vaild
[[ ! -e $1 ]] && echo "Not a vaild input $1" && exit 1
[[ -d $2 ]] || echo "No such directory $2 creating..."&& mkdir -p "$2"

#Get the library dependencies
echo "Collecting the shared library dependencies for $1..."
deps=$(ldd $1 | awk 'BEGIN{ORS=" "}$1\
~/^\//{print $1}$3~/^\//{print $3}'\
 | sed 's/,$/\n/')
echo "Copying the dependencies to $2"

#Copy the deps
for dep in $deps
do
    echo "Copying $dep to $2"
    cp "$dep" "$2"
done

echo "Done!"

Wydajemy wówczas polecenie:

 bash ./ref.sh <path to the binary> <path to copy the dependencies>

czyli np w przypadku aplikacji o nazwie myApp:

 mkdir libs
 bash ./ref.sh myApp ./libs

Anagramer. Find words in dictionary file C++/Qt.

Below sample of code to find word containing the same letters + one that is not the same but create new word:

tor -> sort -> sport

The code can get dictionary and word that should be found:

#include <iostream>
#include <QApplication>
#include <QStringList>
#include <QFile>
#include <QDebug>

using namespace std;

// oure game of words that matches pattern
QString findWord(QStringList &list, QString myWord)
{
    bool pass;
    foreach (QString word, list)
    {
        pass = true;
        int i = 0;
        while(i < myWord.size())
        {
            if(!word.contains(myWord.at(i++)))
            {
                //             qDebug() <<    word <<word.at(i-1);
                pass = false;
                break;
            }
        }
// word should has only one letter that can be other than we think
        if(pass && myWord.size() +1 == word.size())
            return word;
    } // if we not found we return empty string
    return "";
}

struct OtherWay{
    OtherWay(QStringList list, QStringList finds, QString alternative)
        : list(list), finds(finds), alternative(alternative){
        //        qDebug()  << "Alternative: " << list << finds << alternative;


    }
    QStringList list;
    QStringList finds;
    QString alternative;

};


int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    QStringList args = a.arguments();

    // start word for finding solution
    QString found;
    QString file;
    if(args.size() > 1)
        found = args.at(1);
    if(args.size() > 2)
        file = args.at(2);
 
    QStringList list = {"ail", "tennis", "fails", "desk", "stay","plain", "table", "engine", "sail"};


    // read the file with the words
    if(!file.isEmpty())
    {
        QFile inputFile(file);
        if(inputFile.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            // clear default list
            list.clear();
            QTextStream in(&inputFile);
            while (!in.atEnd())
                list.append(in.readLine());
            inputFile.close();
        }

    }

// list of finds that match
    QStringList finds;

    QString tmp;
    // append word that we started
    finds.append(found);

    QList <QStringList> alternativeList;

    QList <OtherWay> otherWays;
    do
    {
        do
        {
            // search for the word
            tmp = found;
            found = findWord(list, found);
            // remove that we found. That protect as from infinite loops
            list.removeOne(found);

            if(!findWord(list,tmp).isEmpty())
            {
                OtherWay way(list,finds, findWord(list,tmp));
                way.finds.append(findWord(list,tmp));
                otherWays.append(way);
            }

            if(!found.isEmpty())
                finds.append(found);
        }while(!found.isEmpty());

        if(otherWays.isEmpty())
            break;

        alternativeList.append(finds);

        list = otherWays.first().list;
        found = otherWays.first().alternative;
        finds = otherWays.first().finds;
        otherWays.removeFirst();

    }while(otherWays.size() >= 0);

    if(finds.isEmpty())
    {
        qDebug() << "No solutions!";
        return 0;
    }

    alternativeList.append(finds);


// And finly we find from all alternatives list the longest that we want to print
    int id = 0;
    int max = 0;
    for(int i =0; i < alternativeList.size(); i++)
        if(max < alternativeList.at(i).size())
        {
            id = i;
            max = alternativeList.at(i).size();
        }
    qDebug() << "The longest list: " << alternativeList.at(id);

    return 0;
}

Twardy niedojrzały czerwony banan.

Dziś postanowiłem spróbować czerwonego Banana (jakkolwiek dwuznacznie to zabrzmi). Banany okazały się jednak posiadać twardą skórkę, a w środku być suche. Tak wiec postanowiłem je ugotować i dalej były jak papier w smaku. Trudno oceniać smak gdy w internecie wszyscy zachwalają miąższ z bananów rozpływający się w ustach. Jeżeli banany czerwone faktycznie są tak słodkie to moje musiały być bardzo niedojrzałe i ze złej serii :/ a to peszek.. Jednak jak wyczytałem to cena za kg wynosi 20zł, a ja kupiłem 600g za 3zł więc dużo nie straciłem. Smak papieru jednak został.
Poniżej relacja:

Linux błąd filtru i pytania o hasło drukarki – naprawa.

Dziś po upgradzie do Ubuntu 16.04 moja drukarka odmówiła posłuszeństwa, a co gorsza w panelu z drukarkami jestem ciągle atakowany o podanie hasła więc postanowiłem po wielu nieudanych próbach podawania prawidłowego hasła jednak odpalić ją z roota. Jednak to nie był koniec kłopotów bo wyświetlał się ciągle komunikat o brakującym filtrze do drukarki. A więc rozwiązałem to tak:

sudo system-config-printer

następnie usunąłem i dodałem. Drukarka wystartowała ale od razu przeszedłem do kolejki wydruku bo trochę zaległych dokumentów tam wpadło 🙂

Co może przedłużyć czas działania baterii w telefonie?

Aby przedłużyć czas działania baterii zarówno w telefonie, jak i w tablecie, możemy zastosować kilka czynności prewencyjnych, chroniących przed szybkim rozładowaniem.

Oczywiście standardowa czynność to wyłączenie transmisji danych (takich jak bluetooth, danych sieciowych oraz bateriożernego wi-fi). Jednak jeżeli używamy  wi-fi, to możemy ograniczyć pracę w tle w trybie uśpionym, poprzez zmianę w ustawieniach zaawansowanych.

Kolejna ważna rzeczą jest przyjrzenie się aplikacjom działającym w tle – wtedy okazuje się, że messenger facebooka nie jest przyjazny dla naszej baterii. W sklepie Google Play możemy również znaleźć aplikacje, które zoptymalizuja wydatkowanie energii naszego telefonu. Nie chcę tu robić reklamy, ale to naprawdę działa.

Jeżeli  zastanawiasz się nad zmianą telefonu ze względu na baterię, pamiętaj, że duża rolę odgrywa w zużyciu energii ekran. Dokładnie – ilość pixeli na nim, czyli rozdzielczość i dpi. Zastanów się czy na pewno jest Ci potrzebny wyświetlacz o wysokiej rozdzielczości, która idzie w parze z wydatkowaniem prądu.

Oprócz tych istotnych funkcji zwróć uwagę na jasność twojego wyświetlacza – czy na pewno w środku nocy potrzebujesz tak dużego podświetlenia, jak w dzień kiedy słońce odbija się od niego? Jeżeli używasz telefoni SIP, to czy potrzebujesz ją do rozmów przychodzących?

Czy możesz zrezygnować z aplikacji, które mają notyfikacje lub też są widoczne na pasku u góry i działają cały czas? Może warto przestawić ich ustawienia w taki sposób, aby nie uruchamiały się na starcie, a po ich użyciu wyłączać? Może warto na Twój telefon wgrać alternatywny minimalistyczny soft, a nie obciążony soft z dodatkami operatora, których nie można w konwencjonalny sposób odinstalować?

Kolejna ważna opcją jest zmiana motywu na ciemny wraz z tapetą – ten niewielki zabieg spowoduje minimalny spadek szybkości pozbawiania naszej baterii energii. Bateria lubi rozładowywać się zdecydowanie szybciej, gdy nasz telefon szuka sieci jak ogłupiały – może więc warto ustawić tryb manualny wyboru sieci. Jeżeli używamy tego samego wi-fi w mieszkaniu – warto zastosować stały adres IP. Po co telefon ma tracić energię na niepotrzebne negocjacje związane z pobraniem adresu IP?

Przy okazji sprawdźmy jaki kanał używa nasze wi-fi i czy nie koliduje to z pasmami zajetymi przez sąsiadów. Jeżeli powyższe operacje nie przynoszą skutku, może warto zainwestować w nowszą i bardziej wydajną baterię do naszego modelu telefonu.

Resize .vdi VirtualBox image

To  resize .vdi use command:

VBoxManage modifyhd {21691477-9419-40d9-b96c-e808157e66b7} –resize 61440

where

VBoxManage modifyhd UUID-machine –resize SizeInMB

i create new size of image that have 60 GB to make 20GB you should give number 20480. So if you want 5GB you can count this via multyply 5 * 1024 = 5120

Next after login to your machine you should change the wolumin size.

Windows 10 Windoes 10-2Windoes 10-3

 

Configuration Qualcomm Atheros AR9285 Wireless

lspci | grep Wireless

04:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

Screenshot at 2016-01-09 00:02:58

next we configure  /etc/network/interface

nano /etc/network/interface

auto lo
iface lo inet loopback

allow-hotplug wlan0
iface wlan0 inet manual
wpa-driver wext
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp

next we configure network:

nano /etc/wpa_supplicant/wpa_supplicant.conf

update_config=1
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
eapol_version=1

network={
ssid=”NETWORK_NAME
scan_ssid=1
mode=0
proto=WPA2
auth_alg=OPEN
pairwise=CCMP
group=CCMP
key_mgmt=WPA-PSK
psk=”SECRET_PASSWORD
id_str=”win7″
priority=1
}

and we down and up interface

ifdown wlan0

ifup wlan0

ps.

if you got problem when up interface using command ifup, and you see:

Operation not possible due to RF-kill

please use command rfkill to use blocked device.

rfkill list

0: asus-wwan: Wireless WAN
 Soft blocked: no
 Hard blocked: no
1: asus-wimax: WiMAX
 Soft blocked: no
 Hard blocked: no
2: hci0: Bluetooth
 Soft blocked: no
 Hard blocked: no
3: phy0: Wireless LAN
 Soft blocked: no
 Hard blocked: no

and kill Wireless LAN, using command:

rfkill unblock 3