Archiwum kategorii: Programowanie

C# – walidacja maila

Żeby sprawdzić poprawność adresu email, wcale nie trzeba męczyć się ze skomplikowanymi wyrażeniami regularnymi. W C# z pomocą przychodzi klasa MailAddress. Oczywiście jest to rozwiązanie wysokopoziomowe i wolne (rzuca wyjątki). Zapewnia jednak czytelność kodu.

Przykład (zaczerpnięty ze StackOverflow):

bool IsValid(string emailaddress)
{
  try
  {
    MailAddress m = new MailAddress(emailaddress);
    Console.WriteLine("TRUE" + "\t" + emailaddress);
    return true;
  }
  catch
  {
    Console.WriteLine("FALSE" + "\t" + emailaddress);
    return false;
  }
}

I testy:
IsValid("ok@ok.pl");
IsValid("dolores.ryba@poczta-n.pl");
IsValid("dolores.ryba@poczta.odlotowa.pl");
IsValid("dolores.ryba@a.b.c.d.pl");
IsValid("psikus@dot.dot.dot..pl");
IsValid("@");
IsValid("");
IsValid(null);
IsValid("bad@");
IsValid("@wolf");
IsValid("@poczta.pl");
IsValid("cokolwiek");

Czytaj dalej

Parsowanie ciągu znaków do double w C++

Parsowanie ciągu znaków do typu double jest osiągalne dzięki funkcji strtod.

Przykład:

char* pEnd;
double d1;

d1 = strtod ("3.14", &pEnd);
cout << d1 <<endl;//3.14

d1 = strtod ("12,34", &pEnd);
cout << d1 <<endl;//12

d1 = strtod ("-1.55211e-016", &pEnd);
cout << d1 <<endl;//-1.55211e-16

d1 = strtod ("8.67548e-017", &pEnd);
cout << d1 <<endl;//8.67548e-17

d1 = strtod ("8.67548e+1017", &pEnd);
cout << d1 <<endl;//inf

d1 = strtod ("abc", &pEnd);
cout << d1 <<endl;//0

d1 = strtod ("", &pEnd);
cout << d1 <<endl;//0

d1 = strtod (NULL, &pEnd);
cout << d1 <<endl;//exit!

Jaki framework do PHP?

Jakiego frameworka użyć? To pytanie często pada na początkowym etapie projektu. Przyjrzyjmy się rozwiązaniom dla języka PHP.

Od jakiegoś czasu najpopularniejszym frameworkiem dla PHP jest Laravel. Widać to np. na porównaniu SitePoint:

Inny sposób sprawdzenia popularności danej technologii to np. sprawdzenie ilości pytań na StackOverflow 😉 Wiadomo, nie jest to miarodajne porównanie, ale daje jakiś ogląd sytuacji.

  • Laravel – 49.306
  • CodeIgniter – 49.135
  • Symfony – 43.769
  • CakePHP – 27.412
  • Yii – 15.315
  • Kohana – 2.177

Są to jednak dość rozbudowane narzędzia. Alternatywą są te dwa frameworki. Ich autorzy zapewniają, że zależy im na zachowaniu prostoty użycia. Mogą być więc dobrym wyborem na początek przygody z używaniem frameworków w PHP:

Lista TODO w Visual Studio

Visual Studio posiada całkiem ciekawą funkcjonalność. Umożliwia budowanie listy zadań w oparciu o linijki kodu oznaczone komentarzem:

//TODO

Visual Studio wyświetla je w zakładce „Task List”. Zadania można filtrować po projekcie i pliku.

Pamiętajmy jednak, że tego typu komentarze stanowią antywzorzec;) Jeżeli natomiast przed wrzuceniem kodu do repozytorium rozwiążemy wszystkie zadania oznaczone tym tagiem – nie widzę przeciwwskazań, by korzystać z tej funkcji.

MySQL – dump tylko określonych wierszy

MySQL umożliwia wykonanie dumpa tylko określonych danych. Dzięki temu można np. podzielić dumpa jednej, dużej tabeli na parę mniejszych części. Służy temu przełącznik --where.

Przykład 1 – wykonujemy dump tabeli myVeryBigTable, lecz tylko takich wierszy, które mają id 1, 2 lub 3:

mysqldump myDatabaseName --host 127.0.0.1 --port=3306 
--user=myUserName --password
myVeryBigTable
--where="id in (1,2,3)"
> .\mySimpleDump.sql

Przykład 2 – możliwe jest także wykonanie nieco bardziej skomplikowanego zapytania:

mysqldump myDatabaseName --host 127.0.0.1 --port=3306
--user=myUserName --password
myVeryBigTable
--where="id in (select id from myOtherTable where objectId in (123,558,6987))"
> .\myDump.sql

Netbeans nie aktualizuje aplikacji www

Pracując przy aplikacji webowej (napisanej w Javie) natknęłam się na problem nieaktualizowania aplikacji przez Netbeans. Proces kompilacji udawał się, jednak na serwerze nadal była stara zawartość. Z jakiegoś powodu nie udało się zaktualizować kodu.

Rozwiązaniem było ręczne usunięcie folderu web/web-inf/classes. Po usunięciu katalogu i przebudowaniu projektu Netbeans aktualizował zawartość plików.

Qt i problemy z atof()

W projekcie, nad którym aktualnie pracuję, natknęłam się na pewien problem, który spowodował nieprawidłowe działanie dużego fragmentu aplikacji napisanej w C, dołączonej do interfejsu implementowanego w Qt (używam wersji 4.8.0, choć nie ma to zbyt wielkiego znaczenia).

Okazało się że część analityczna programu używała  w wielu miejscach funkcji atof() do przekształcania liczb zapisanych w pliku w postaci ddd.ddd (separatorem była zatem kropka).

#include <cstdlib>
double atof( const char * str );

Funkcja nie odczytywała części dziesiętnych z powodu nieprawidłowego traktowania separatora. Ten poważny błąd, uniemożliwiający działanie całego programu wystarczyło naprawić jedną linijką:

setlocale(LC_NUMERIC,"C");

Linijkę tę należy umieścić w pliku main.cpp, tuż po utworzeniu obiektu typu QApplication. Teraz mój plik wygląda następująco:

#include <QtGui/QApplication>
#include "mainwindow.h"

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

    setlocale(LC_NUMERIC,"C");

    MainWindow w;
    w.show();

    return a.exec();
}

I – wszystko działa 🙂

Bazy danych – ściągawka

Szybka, w pełni teoretyczna „ściągawka” z baz danych. Nie wszystkie z prezentowanych tutaj zapytań mają taką samą składnię w każdej bazie danych. Zależy to od implementacji.

Sumy zbiorów wyników

Jeśli dwa zapytania zwracają wyniki w tej samej formie (te same kolumny), możliwe są operacje na zbiorach typu suma, różnica zbiorów.

Zakładając, że:

  • zapytanie nr 1 (Q1) zwraca następujący zestaw danych: A, B, C,
  • zapytanie nr 2 (Q2) zwraca następujący zestaw danych: C, D, E,

z wyników zapytania można złożyć:

Union

Q1 union Q2 – suma zbiorów. Elementy powtarzające się zarówno w Q1 jak i w Q2 zostają usunięte. Wynikiem są pogrubione elementy (tu: A, B, C, D, E)

[A B [C] D E] Czytaj dalej