Mini stacja czujników online

Spakowany sketch Arduino: Pobierz sketch Mini stacja czujników online

Wymagana biblioteka (z odpowiednimi przeróbkami): EtherCard

Podłączenie:

  • Moduł Ethernet pod złącze ICSP na Arduino (MOSI – SI, MISO – SO, SCK – SCK, GND-GND), pin CS do pinu 8, VCC do 3,3V
  • DHT11 wyjście pod pin 12
  • MQ7 wyjście analogowe pod pin A0
  • Fotorezystor pomiędzy VCC a pin A1, który ściągamy do masy rezystorem 1KΩ
  • Moduł Ethernet podpięty do routera

Aby odnaleźć IP, pod którym widnieje nasz układ proponuję zalogować się do panelu administracyjnego routera, u mnie była to zakładka/okienko „DHCP Client List”. Odczyt z czujnika tlenku węgla w normalnych warunkach wynosi poniżej 50 (<250mV). Potraktowanie go jakimikolwiek oparami powoduje szybką reakcję i skok napięcia powyżej 1V (przy bliskim rozpyleniu).

 

Walidacja numerów PESEL, NIP, REGON w Javascript i PHP

Ulepszone funkcje z tego wpisu. Aktualnie funkcje sprawdzają także sumy kontrolne zawarte w tych numerach, na podstawie Wikipedii. Wystarczy przeanalizować kody

Odmiany funkcji w Javascript i PHP są w pełni zgodne, to znaczy że dadzą taką samą odpowiedź.

Aktualizacja 2017-05-02:

  • Zamieniłem polskie nazwy zmiennych na angielskie;
  • Funkcje od PESEL sprawdzają czy data jest poprawna, tj. miesiąc nie większy niż 12 i dzień miesiąca nie większy niż 31. To rozwiązuje problemy opisane w komentarzach. Dziękuję za zwrócenie uwagi i dziękuję Panu Krzysztofowi Grabania za propozycję rozwiązania problemu.
  • Poprawione wcięcia itp.
  • Dodane formularze, gdzie można sobie potestować jak działają funkcje w wersji JS. Wersje PHP: http://test.vt0.pl/v/

Oczywiście jeśli użytkownik będzie chciał, to i tak da radę wprowadzić nieprawdziwe dane, ale dzięki tej walidacji uchronimy się przed omyłkowym wpisaniem danych z błędami w formularzu.

1. Walidacja PESEL:

Kod PHP:

function validatepesel($pesel) {
    $reg = '/^[0-9]{11}$/';
    if(preg_match($reg, $pesel)==false)
        return false;
    else
    {
        $digits = str_split($pesel);
        if ((intval(substr($pesel, 4, 2)) > 31)||(intval(substr($pesel, 2, 2)) > 12))
            return false;
        $checksum = (1*intval($digits[0]) + 3*intval($digits[1]) + 7*intval($digits[2]) + 9*intval($digits[3]) + 1*intval($digits[4]) + 3*intval($digits[5]) + 7*intval($digits[6]) + 9*intval($digits[7]) + 1*intval($digits[8]) + 3*intval($digits[9]))%10;
        if($checksum == 0) 
            $checksum = 10;
        $checksum = 10 - $checksum;
            
        return (intval($digits[10]) == $checksum);
    }
}

Kod Javascript:

function validatepesel(pesel) {
    var reg = /^[0-9]{11}$/;
    if(reg.test(pesel) == false) 
        return false;
    else
    {
        var digits = (""+pesel).split("");
        if ((parseInt(pesel.substring( 4, 6)) > 31)||(parseInt(pesel.substring( 2, 4)) > 12))
            return false;
        
        var checksum = (1*parseInt(digits[0]) + 3*parseInt(digits[1]) + 7*parseInt(digits[2]) + 9*parseInt(digits[3]) + 1*parseInt(digits[4]) + 3*parseInt(digits[5]) + 7*parseInt(digits[6]) + 9*parseInt(digits[7]) + 1*parseInt(digits[8]) + 3*parseInt(digits[9]))%10;
        if(checksum==0) checksum = 10;
            checksum = 10 - checksum;

        return (parseInt(digits[10])==checksum);
    }
}

Test:

READY

2.Walidacja NIP

Kod PHP:

function validatenip($nip) {
    $nipWithoutDashes = preg_replace("/-/","",$nip);
    $reg = '/^[0-9]{10}$/';
    if(preg_match($reg, $nipWithoutDashes)==false)
        return false;
    else
    {
        $digits = str_split($nipWithoutDashes);
        $checksum = (6*intval($digits[0]) + 5*intval($digits[1]) + 7*intval($digits[2]) + 2*intval($digits[3]) + 3*intval($digits[4]) + 4*intval($digits[5]) + 5*intval($digits[6]) + 6*intval($digits[7]) + 7*intval($digits[8]))%11;

        return (intval($digits[9]) == $checksum);
    }
}

Kod Javascript:

function validatenip(nip) {
    var nipWithoutDashes = nip.replace(/-/g,"");
    var reg = /^[0-9]{10}$/;
    if(reg.test(nipWithoutDashes) == false) {
        return false;}
    else
    {
        var digits = (""+nipWithoutDashes).split("");
        var checksum = (6*parseInt(digits[0]) + 5*parseInt(digits[1]) + 7*parseInt(digits[2]) + 2*parseInt(digits[3]) + 3*parseInt(digits[4]) + 4*parseInt(digits[5]) + 5*parseInt(digits[6]) + 6*parseInt(digits[7]) + 7*parseInt(digits[8]))%11;
        
        return (parseInt(digits[9])==checksum);
    }
}

Test:

READY

3. Walidacja REGON (9-cyfrowy):

Kod PHP:

function validateregon9($regon) {
    $reg = '/^[0-9]{9}$/';
    if(preg_match($reg, $regon)==false)
        return false;
    else
    {
        $digits = str_split($regon);
        $checksum = (8*intval($digits[0]) + 9*intval($digits[1]) + 2*intval($digits[2]) + 3*intval($digits[3]) + 4*intval($digits[4]) + 5*intval($digits[5]) + 6*intval($digits[6]) + 7*intval($digits[7]))%11;
        if($checksum == 10) 
            $checksum = 0;

        return (intval($digits[8]) == $checksum);
    }
}

Kod Javascript:

function validateregon9(regon) {
    var reg = /^[0-9]{9}$/;
    if(!reg.test(regon)) 
        return false;
    else
    {
        var digits = (""+regon).split("");
        var checksum = (8*parseInt(digits[0]) + 9*parseInt(digits[1]) + 2*parseInt(digits[2]) + 3*parseInt(digits[3]) + 4*parseInt(digits[4]) + 5*parseInt(digits[5]) + 6*parseInt(digits[6]) + 7*parseInt(digits[7]))%11;
        if(checksum == 10) 
            checksum = 0;
        
        return (parseInt(digits[8])==checksum);
    }
}

Test:

READY

Ekran logowania i układ klawiatury

logon_keybrd

Jeśli na ekranie logowania masz jako domyślny układ klawiatury inny niż preferowany, ta instrukcja jest dla Ciebie. Zaloguj się, wejdź w panel sterowania -> W kategorii „Zegar, język i region” wybierz „Zmień układ klawiatury lub inne metody wprowadzania danych”. W oknie wybierz zakładkę „Administracyjne:

logon_keybrd02

Wybierz „Kopiuj ustawienia”:

logon_keybrd03

W otwartym oknie zaznacz oba checkboxy. Pozatwierdzaj wszystkie okna i gotowe. Pamiętaj, że zwykle prawidłowy układ klawiatury to „Polski (programisty)”.

Grep – przydatne komendy

  • Wyszukiwanie wszystkich plików w folderze zawierających tekst. Wyszukiwanie w określonych typach plików:
    grep -rl --include="*.php" 'tekst' folder/
    
  • Wyszukiwanie tekstu w pliku z prezentacją linii:
    grep -nr 'tekst' plik.php
    
  • Masowa zamiana tekstu we wszystkich plikach z danym rozszerzeniem w folderze.
    Można także wybrać pliki pod kątem jednego tekstu, a pozamieniać inne. Odsyłam do 'man sed’.

    grep -rl --include="*.php" 'tekst1' folder/ | xargs sed -i 's/tekst1/tekst2/g'
    

Odnajdywanie sieci Windows (Vista, 7)

Jeśli występują problemy z wyszukiwaniem komputerów w sieci, należy upewnić się, że następujące usługi w systemie są odpowiednio skonfigurowane:

  • Klient DNS
  • Publikacja zasobów odnajdowania funkcji
  • Odnajdywanie SSDP
  • Host urządzenia UPnP

Oraz:

  • serwer
  • rozpoznawanie sieci NLA

Włączyć te usługi najszybciej jest za pomocą następujących poleceń (uruchamianych w konsoli z uprawnieniami administracyjnymi):

sc config dnscache start= demand
sc config fdrespub start= demand
sc config ssdpsrv start= demand
sc config upnphost start= demand

sc config lanmanserver start= auto
sc config nlasvc start= auto

Zamiast „demand” można dać „auto”, byle nie „disabled”.

Walidacja adresu email, numeru pesel, numeru telefonu w Javascript i PHP

Krótkie i przydatne funkcje walidacji. Opierają się na wyrażeniach regularnych. Odmiany funkcji w Javascript i PHP są w pełni zgodne, to znaczy że dadzą taką samą odpowiedź.

UWAGA! Przygotowałem ulepszone funkcje, które dostępne są tutaj.

1.Walidacja adresu e-mail:

Kod PHP:

function validateemail($email) {
	$reg = '/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/';
	return preg_match($reg, $email);
}

Kod Javascript:

function validateemail(email) {
	var reg = '/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/';
	if(!reg.test(email))
		return false;
	else
		return true;
}

2.Walidacja numeru PESEL:

Kod PHP:

function validatepesel($pesel) {
	$reg = '/^[0-9]{11}$/';
	return preg_match($reg, $pesel);
}

Kod Javascript:

function validatepesel(pesel) {
	var reg = '/^[0-9]{11}$/';
	if(!reg.test(pesel)) 
		return false;
	else
		return true;
}

3.Walidacja numeru telefonu:

Kod PHP:

function validatetel($tel) {
	$reg = '/^[0-9\+]{8,13}$/';
	return preg_match($reg, $tel);
}

Kod Javascript:

function validatetel(tel) {
	var reg = '/^[0-9\+]{8,13}$/';
	if(!reg.test(tel)) 
		return false;
	else
		return true;
}

Klucze SSH i 'server refused our key’

Rozwiązanie problemu, gdy wygenerowaliśmy parę kluczy za pomocą PuttyGen, a mimo wrzucenia klucza publicznego na serwer dalej nie chce wejść i wyświetla komunikat:
server refused our key

  1.  Przygotuj odpowiednio klucz publiczny. Oto postać z PuttyGen:
    ---- BEGIN SSH2 PUBLIC KEY ----
    Comment: "rsa-key-20121112"
    AAAAB3NzaC1yc2EAAAABJQAAAIEAxwD8/OOHou6HpF/Bk0AUufpHm9WNoSMn3tBZ
    X6awiyD236LqTgLOkwmQbec1Jmam6f/xi0VcXRyWM1jjug+GKdzooW87WYVIqA/J
    HKJ1sq6CYs2IybwAejUvsFzqKBlEaEREksQOZwS0W2OKqJeZJJ3cMmJFl606RRTJ
    aM1LiNE=
    ---- END SSH2 PUBLIC KEY ----
  2. Usuń dwie pierwsze oraz ostatnią linie:
    AAAAB3NzaC1yc2EAAAABJQAAAIEAxwD8/OOHou6HpF/Bk0AUufpHm9WNoSMn3tBZ
    X6awiyD236LqTgLOkwmQbec1Jmam6f/xi0VcXRyWM1jjug+GKdzooW87WYVIqA/J
    HKJ1sq6CYs2IybwAejUvsFzqKBlEaEREksQOZwS0W2OKqJeZJJ3cMmJFl606RRTJ
    aM1LiNE=
  3. Połącz pozostałe linie w jedną:
    AAAAB3NzaC1yc2EAAAABJQAAAIEAxwD8/OOHou6HpF/Bk0AUufpHm9WNoSMn3tBZX6awiyD236LqTgLOkwmQbec1Jmam6f/xi0VcXRyWM1jjug+GKdzooW87WYVIqA/JHKJ1sq6CYs2IybwAejUvsFzqKBlEaEREksQOZwS0W2OKqJeZJJ3cMmJFl606RRTJaM1LiNE=
  4. Dopisz na początku ssh-rsa
    ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAxwD8/OOHou6HpF/Bk0AUufpHm9WNoSMn3tBZX6awiyD236LqTgLOkwmQbec1Jmam6f/xi0VcXRyWM1jjug+GKdzooW87WYVIqA/JHKJ1sq6CYs2IybwAejUvsFzqKBlEaEREksQOZwS0W2OKqJeZJJ3cMmJFl606RRTJaM1LiNE=
  5. Umieść taką linijkę w pliku ~/.ssh/authorized_keys. Zwykle to będzie jedyna jego zawartość.
  6. Nadaj plikowi odpowiednie uprawnienia:
    chmod 600 authorized_keys
  7. Nadaj folderowi .ssh odpowiednie uprawnienia:
    cd ..
    chmod 700 .ssh
  8. To wszystko. Teraz powinno już śmigać. Testowane na popularnym hostingu D2.pl. Na hostingu Az.pl nie ma problemu, bo panel administracyjny umożliwia stworzenie kluczy, i wszystko działa od razu.

rm: cannot remove `plik’: Permission denied

Dzisiaj zdarzył mi się taki przypadek:

Dotychczas uważałem linuksowe polecenie rm zwłaszcza pod postacią

rm -rf

jako bezwzględne. Tymczasem dzisiaj taka niespodzianka:

rm: cannot remove `plik': Permission denied

Sprawdzam właściciela pliku za pomocą

ls -la

jednak wszystko się zgadza; także uprawnienia są OK. Na wszelki wypadek:

chmod 777 plik

Jednak nic nie pomaga. Co się okazuje? Do usunięcia pliku nie wystarczą same uprawnienia do niego, ale także odpowiednie do katalogu, w którym się znajduje. Ustawienie odpowiednich uprawnień dla nadrzędnego folderu załatwiło sprawę.