Archiwum kategorii: Programowanie

Dla kogo Scrum?

Niedawno podawałam garść ciekawych informacji na temat Scruma.

Często słyszy się, że ta metodologia pracy nie jest dla każdego zespołu. Pewnie tak. Na jednym ze szkoleń widziałam ciekawy wykres „obszarów złożoności pracy”:

complexity

  1. Simple – dziedzina dobrze znana – tu sprawdzają się tzw. najlepsze praktyki, zalecenia z poradników itd.
  2. Complicated – dziedzina znana, ale trudna. Sprawdzają się dobre praktyki, ogólne „zalecenia”.
  3. Complex – dziedzina bardzo złożona, nie można powiedzieć, czy dane działania odniosą sukces czy nie. Metodą pracy są głównie eksperymenty – właśnie tutaj najlepiej działa Scrum!
  4. Chaos.

I dodatkowo wykres uczenia się w zależności od złożoności problematyki:

complexity2

  1. Simple – continuous improvement. Wystarczy po prostu działać, powtarzać – uczenie się jest proste, bez większych problemów.
  2. Complicated – continuous improvement – powiedziałabym: wzloty i upadki.
  3. Complex – continuous adaptive – błądzenie jak we mgle 😉 Jeden eksperyment zbliży nas do rozwiązania, inny oddali. Pamiętajmy, że adaptacja leży w głównych założeniach Scruma 🙂

Pascal – funkcja kwadratora, 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.

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

Ciekawe (i darmowe!) konferencje – wiosna 2017

Pracując w branży informatycznej warto być na bieżąco. Trendy zmieniają się jak w kalejdoskopie, co rusz na rynek wchodzą nowe frameworki i narzędzia. Całkiem niezłym sposobem na trzymanie ręki na pulsie jest uczestnictwo w konferencjach i wykładach. Wiele z nich jest darmowych!

Gdzie zatem warto zawitać wiosną 2017?

Marzec:

  • 16 – 18 marca (czwartek – sobota) – Studencki Festiwal Informatyczny, Kraków. Wstęp: free. Trzy dni najróżniejszych wykładów i warsztatów.
  • 17 marca (piątek)IT Academic Day 2017, Bielsko-Biała. Wstęp: free.
  • 20 marca (poniedziałek)SkładQA, Kraków. Wstęp: free. Niezależna konferencja testerska organizowana przez KraQA. Wielokrotnie bywałam na prelekcjach w ramach KraQA, toteż myślę, że z czystym sumieniem mogę polecić. Nie tylko testerom 🙂

Kwiecień:

  • 3 kwietnia (poniedziałek) – 4Developers 2017, Warszawa. Wstęp: 75zł (studenci) / 400zł / 450zł. Mnóstwo ścieżek tematycznych, od architektury aplikacji po gamedev i front-end.
  • 22 kwietnia (sobota)Lubelskie Dni Informatyki, Lublin. Wstęp: free.
  • 22 kwietnia (sobota)DEVCROWD, Szczecin. Wstęp: free. Dla entuzjastów Javy. Szczegółowego programu jeszcze brak.

Maj:

  • 11 maj (czwartek) – WeBB MeetUp, Bielsko-Biała. Wstęp: free. Studencka mini-konferencja, kilka całkiem ciekawych tematów, raczej dla początkujących.
  • 13 maj (sobota) – Kernel: Don’t panic, Kraków. Wstęp: free. Nieduża konferencja studencka poświęcona w tym roku tematyce bezpieczeństwa w IT.
  • 16 maj (wtorek), Kongres Bezpieczeństwa Sieci, Wrocław. Wstęp: free.
  • 17-19 maj (środa – piątek)InfoShare, Gdańsk. Wstęp: free. Kilka ścieżek tematycznych, nie tylko technicznych, ale także odnośnie tworzenia własnej firmy.
  • 26-27 maj (piątek – sobota) – BEST IT Festival 2017, Wrocław. Wstęp: free. Studencki festiwal poświęcony tematyce gier.
  • 27 maj (sobota), ngSummit 2017, Wrocław. Wstęp: free. Dla entuzjastów Angulara!

Czerwiec:

  • 23-24 czerwca (piątek – sobota) – Quality Excites 2017, Gliwice. Wstęp: free. Agendy jeszcze brak, niemniej konferencję bardzo polecam, nie tylko testerom!

Skąd natomiast czerpać informacje o wydarzeniach? Niezłym źródłem jest Facebook, blogi, LinkedIn. Jest również kilka aplikacji dedykowanych: Meetup, który uczy się polecać wydarzenia na podstawie historii użytkownika, Evenea umożliwiająca także zapisy albo kalendarz Crossweb.

Pascal – rekurencja

Dziś kontynuacja tematu „edukacyjnych” programów w języku Pascal – zastosowanie rekurencji.

Rekurencja 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

Kod:

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. Sporo czasu upłynęło – liczę że i dziś może komuś się przydają, zainspirują, a może tylko… poprawią nastrój 😉

  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.

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

Scrum

Niedawno miałam przyjemność uczestniczyć w bardzo ciekawym szkoleniu na temat 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]

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.

Pozostałe praktyki, jakie często kojarzone są ze Scrumem, są tylko dodatkiem, implementacją, zestawem dobrych praktyk. 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.

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