Archiwum kategorii: Programowanie

Wystylowane menu w Qt

Niedawno pisałam o tym, jak stylizować elementy interfejsu w Qt za pomocą CSS. Dziś  natomiast inny przykład, jaki użyłam w mojej aplikacji, czyli wystylowane menu w Qt.

Żeby było widać wyraźnie, które elementy odpowiadają za poszczególne fragmenty kodu, można użyć kontrastowych kolorów:

Użyte w przykładzie menu w Qt z kolorowym CSS

Menu użyte w przykładzie z kolorowym CSS


QString style("QMenuBar{background-color: yellow;});
style+="QMenuBar::item{background-color: blue;}";
style+="QMenu::item{background-color: red;}"; 
menuBar()->setStyleSheet(style);

Implementacja właściwa

Efekt końcowy, na jaki się zdecydowałam – oczywiście nieco bardziej subtelny, niż w powyższym przykładowym kodzie: Czytaj dalej

Pascal-funkcja kwadratowa, tablice i układ trzech równań

Kolejny po Proste programy-gotowce w Pascalu i Pascal – rekurencja wpis na temat programów w Pascalu. Dziś nieco bardziej „matematycznie”, choć nadal na poziomie licealnym: Pascal-funkcja kwadratowa!

Pascal-funkcja kwadratowa

Spis treści:

  1. Funkcja kwadratowa – klasyka.
  2. Operacje na tablicach – tablice przydatne są w rozwiązywaniu wielu różnych problemów. Warto wiedzieć, jak się nimi posługiwać. Krótkie demo.
  3. Układ trzech równań

Jedziemy:

Czytaj dalej

Pascal-rekurencja

Dziś kontynuacja tematu „edukacyjnych” programów w języku Pascal-rekurencja.

Pascal-rekurencja

Foto: moje, 2008?

Rekurencja

Rekursja, zwana rekurencją, jest to odwołanie się funkcji do samej siebie. Ale np. wywołując funkcję z innym parametrem (mniejszym/większym). Korzystając z rekurencji trzeba uważać, aby program nie wpadł w pętlę nieskończoną – zawsze trzeba przemyśleć warunek zakończenia programu.

Rekurencję można wykorzystać np. do obliczania silni, wartości ciągu Fibonacciego albo wartości wielomianu (schemat Hornera).

Oto kompletny kod, prezentujący wszystkie te przykładowe zastosowania rekurencji: https://gist.github.com/d9kgit/1a31b8cc4e96529ffb6961df6d1bc11f

Czytaj dalej

Proste programy-gotowce w Pascalu

Pascal, któż nie pamięta tego języka z czasów np. licealnych 😉 Do dziś w wielu szkołach jest traktowany jako język edukacyjny. Podczas porządkowania dysku znalazłam kilka programików pisanych właśnie na lekcjach.Takie programy – gotowce w Pascalu.

Sporo czasu upłynęło – liczę że i dziś może komuś się przydają, zainspirują, a może tylko… poprawią nastrój 😉

gotowce w Pascalu

  1. Kalkulator
  2. Średnia arytmetyczna

Oto i one:

Czytaj dalej

Examples of QString::number

Some examples of a very useful Qt function: QString::number. This function is helpful in converting double/float to string. QString, to be more precise 😉

QString::number has got 3 parameters:

  • double n – number, which will be converted
  • char format = ‚g – format: available formats are f, e, E, g, G. Default is ‚g’:
  • int precision = 6 – precision.

QString::number – examples

Let me show some examples. On the end of each line is a output from console:


//f - float
QString::number(3.14159265359, 'f', 0); //3
QString::number(3.14159265359, 'f', 1); //3.1
QString::number(3.14159265359, 'f', 2); //3.14
QString::number(3.14159265359, 'f', 15);//3.141592653590000

//e - exponential notation
QString::number(3.14159265359, 'e', 15); //3.141592653590000e+00
QString::number(3.14159265359, 'E', 15); //3.141592653590000E+00

//g/G - "general" - in this case: "f"
QString::number(3.14159265359, 'g', 0); //3
QString::number(3.14159265359, 'g', 1); //3
QString::number(3.14159265359, 'g', 2); //3.1
QString::number(3.14159265359, 'g', 15); //3.14159265359

QString::number(3.14159265359, 'G', 2); //3.1
QString::number(3.14159265359, 'G', 15); //3.14159265359

//g/G - "general" - in this case: "e/E"
QString::number(2.5e+5, 'g', 0); //2e+05
QString::number(2.5e+5, 'g', 1); //2e+05
QString::number(2.5e+5, 'g', 2); //2.5e+05
QString::number(2.5e+5, 'g', 15); //250000

QString::number(2.5e+5, 'G', 2); //2.5E+05
QString::number(2.5e+5, 'G', 15); //250000

//comparision with f and e/E:
QString::number(2.5e+5, 'f', 2); //250000.00

QString::number(2.5e+5, 'e', 15); //2.500000000000000e+05
QString::number(2.5e+5, 'E', 2); //2.50E+05

Podstawy Scruma

Niedawno miałam przyjemność uczestniczyć w bardzo ciekawym szkoleniu na temat metodyki Scrum. Dowiedziałam się m.in. jakie są podstawy Scruma.

Podstawy Scruma

Foto: moje, 2017

Podstawy Scruma

Sam Scrum pewnie znany jest większości osób, które mają styczność z wytwarzaniem oprogramowania. Myślę, że metodyka ta swoją popularność zawdzięcza głównie temu, że narzuca pewną strukturę zarządzania pracą/czasem/zespołem, jednocześnie dając wolność adaptacji do własnych potrzeb. Cechy te podkreślają filary, na których opiera się Scrum, zwłaszcza ostatni:

  • Transparency – przejrzystość
  • Inspect – inspekcja
  • Adapt – adaptacja!

Podstawową wiedzę na temat Scrum warto czerpać z oficjalnego podręcznika. Jest dostępny po polsku tutaj: http://scrumguides.org/docs/scrumguide/v2016/2016-Scrum-Guide-Polish.pdf. Kopia: [2016-Scrum-Guide-Polish]

Framework

Scrum to framework – co to oznacza w praktyce? Podręcznik przedstawia to tak: Scrum to „baza”, ramy, na których zespół buduje swoją własną „implementację”. Na bazę składa się naprawdę niewiele elementów. Są to:

  • Zespół i role: Product Owner, Scrum Master oraz zespół developerski: programiści, testerzy, graficy, analitycy biznesowi itd.,
  • Zdarzenia: Sprint (przebieg), Sprint Planning (planowanie przebiegu), Daily Scrum (jak idzie praca nad celami?), Sprint Review (demonstracja i inspekcja przyrostu pracy), Sprint Retro (czego się nauczyliśmy?),
  • Artefakty: Product Backlog, Sprint Backlog i cel Sprintu,szkolenia scrumowego
  • Reguły: łączące wszystkie elementy tej układanki.

Dodatki

Pozostałe praktyki, jakie często kojarzone są ze Scrumem, są tylko dodatkiem, implementacją, zestawem dobrych praktyk. Nie są składnikiem frameworka. Przykłady:

  • Planowanie Sprinta za pomocą kart do Scrum pokera,
  • Pozycja stojąca podczas Daily Scrum,
  • Spotkania groomingowe – backlog refinement to nie tylko spotkania, ale także praca własna nad backlogiem! Zespół powinien spędzić nad tym tematem 10% czasu, przygotowując się do kolejnego sprintu – ten czas można przeznaczyć np. na szukanie technologii do realizacji przyszłych zadań itd.

Ciekawą rzeczą, jaką wyniosłam ze szkolenia była informacja, że podczas Sprintu zespół powinien dostarczyć całą, lecz uproszczoną funkcjonalność! Niedopuszczalne jest zatem np. wykonanie części prac w bazie danych, ale niezrobienie niczego w interfejsie. Zadania powinny być zatem upraszczane, a nie dzielone. Ciekawa zasada, chyba nie zawsze jednak respektowana.

Prosta walidacja maila w C#

Żeby sprawdzić poprawność adresu email, wcale nie trzeba męczyć się ze skomplikowanymi wyrażeniami regularnymi. W C# walidacja maila jest prosta – 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;
  }
}

Testy – walidacja maila:

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 double jest osiągalne w C dzięki funkcji strtod. Jest to dość stara funkcja, obecna w standardzie C90 (z roku 1990).

Składnia to:

double strtod (const char* str, char** endptr);

 

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!