Pascal – rekurencja

Rekurencja

Kontynuując temat „edukacyjnych” programów w języku Pascal dziś prezentuję coś innego – 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:

Czytaj więcej

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 😉

Spis treści:

  1. Funkcja kwadratowa
  2. Operacje na tablicach
  3. Układ trzech równań
  4. Kalkulator
  5. Średnia arytmetyczna

(więcej…)

Czytaj więcej

Statystyki

Z okazji przenosin na inny serwer przeglądałam statystyki Awstats z dwóch ubiegłych lat. Z grubsza zgadzają się one z tym, co podpowiada Google Analytics. Patrząc po frazach, z jakich trafiają do mnie Goście, jest całkiem nieźle.

W Awstatsowych rekordach nie znalazłam niczego śmiesznego :( Same konkrety! W sumie – duma :)

Najwięcej zapytań było o przebieg rozmowy kwalifikacyjnej na stanowisko testera. Myślę, że jest to okazja do napisania na ten temat czegoś więcej.

Na drugim miejscu plasują się pytania o treści „jaka data będzie za … dni” – o czym piszę w artykułach o Excelu: Różnica dat w Excelu i Różnica dat w Excelu – poprawka.

Kolejną grupą są pytania o zasadność zdawania egzaminu ISTQB i czy można go nie zdać. Tak, można nie zdać, zdawalność nie wynosi 100% 😉

Początek 2017 przyniósł natomiast zwrot akcji! Zainteresowania Gości skierowały się w kierunku walki ze smogiem za pomocą roślin. Pomysł jest ciekawy, ze swojej strony powiem jednak, że dużo skuteczniejsza będzie wentylacja wyposażona w aktywny oczyszczacz powietrza i zaniechanie palenia najgorszej jakości paliwami lub, co gorsza, śmieciami… Roślinami jednak warto się otaczać dla samej przyjemności!

Bardzo cieszą zapytania nieco bardziej konkretne, na przykład o koniunkcję, C#: używanie stringbuildera, albo bitmapy, Linuksa: kolorowanie wypisów w konsoli, wyszukiwania plików z tekstem albo  Javy – podpisywanie plików jar. Super!

Mam nadzieję, że znajdujecie, drodzy Czytelnicy odpowiedzi na swoje pytania :)

Czytaj więcej

EasyBCD – program do zarządzania boot sectorem

Chcę dziś polecić fantastyczny program narzędziowy – Easy BCD (BCD – Boot Configuration Data), służący do zarządzania rozruchem systemu. Jest to aplikacja desktopowa, okienkowa, pod Windows.

Program, mimo niewielkiej wagi, posiada wiele opcji konfiguracji, których długo trzeba byłoby szukać w systemie.

Parę screenów, demonstrujących, co w programie można zrobić:

EasyBCD1

(więcej…)

Czytaj więcej

Co można zobaczyć w Warszawie – technika

Okres zimowy sprzyja snuciu marzeń o wyjazdach i… wspomninania wycieczek już minionych. Na oderwanie od klawiatury zapraszam do… Warszawy. Oczywiście głównie tych wszystkich, którzy stałymi bywalcami stolicy nie są :)

Przewodników po stolicy naszego kraju jest w sieci multum. A co, jeśli nie interesują nas typowe zabytki lub zwiedzanie Łazienek czy Zamku Królewskiego mamy już za sobą? Nic straconego, Warszawa obfituje w atrakcje. Przygotowując się do wycieczki, przygotowałam sobie listę ciekawostek „technicznych”. Co więc warto zobaczyć?

wawa

  • Pałac Kultury – klasyczny punkt programu. Widok na miasto z tarasu widokowego.
  • Pałac Kultury – Muzeum Techniki i Przemysłu NOT. Na chwilę obecną nie mam pojęcia, czy muzeum nadal funkcjonuje, prawdopodobnie nie (podano informację o likwidacji – „po raz pierwszy od 60 lat Muzeum nie otrzymało dofinansowania”). Myślę, że warto śledzić sytuację w mediach. Dodam tylko iż zbiory muzeum są (były?) naprawdę fantastyczne i jestem wdzięczna, że miałam jeszcze możliwość zrobić sobie pamiątkową fotkę przy komputerze Odra, zagrać w gierkę na Atari, obejrzeć świetne modyfikacje Poloneza czy pobawić się w laboratorium fizycznym… Podobno muzeum ma zostać przeniesione do Bydgoszczy, na razie jednak jego losy się ważą.
  • Pałac Kultury – Muzeum Domków dla Lalek – nie byłam i żałuję, podobno eksponaty są ŚLICZNE.
  • Pałac Kultury – Muzeum Ewolucji – j.w. żałuję że nie zdążyłam już zwiedzić.
  • Muzeum Neonów – Soho, ul. Mińska 25 – j.w.
  • Centrum Nauki Kopernik – Znajduje się przy Moście Świętokrzyskim (ul. Wybrzeże Kościuszkowskie 20), można tam dojechać metrem. Warto zarezerwować bilet z wyprzedzeniem. Zainteresowanie turystów jest naprawdę spore, jednak ośrodek jest na tyle duży, że tłum nie jest aż tak uciążliwy. 2h to zdecydowanie za mało na zobaczenie wszystkiego, 4h byłyby w sam raz. Lepiej nastawić się więc na dużo chodzenia!
  • Muzeum Kolejnictwa (StacjaMuzeum.pl, ul. Towarowa 3) – kolejne muzeum, które przeżyło zawirowania, skutkiem czego gdy byłam w stolicy, nie dało się go zwiedzić. Z tego co widzę, powróciło już do życia i kusi ciekawymi eksponatami.
  • Most Gdański – szalenie polecam przejechać tramwajem przez ten zabytkowy most! Tip: wracając z Żerania do centrum łatwiej „zająć” sobie miejscówkę z tyłu tramwaju by podziwiać konstrukcję tego dwupiętrowego mostu 😉
  • Most Świętokrzyki – niezbyt zdrowo spacerować w spalinach, ale nadal polecam, ciekawe miejsce 😉
  • Tramwaj wodny – choć tempo jazdy jest chyba wolniejsze niż spaceru, tramwaj jedzie aż do Grubej Kaśki, unikatowego w latach 60-tych ujęcia wody.
  • Mordor – ul. Domaniewska i okolice, czyli korporacyjny zakątek Warszawy 😉 Omijać w godzinach szczytu. Oświetlone budynki ładnie prezentują się wieczorem.
  • FSO Żerań – w zasadzie po dawnej chlubie polskiej motoryzacji nie pozostało wiele. Teren fabryk jest zamknięty, zza płotu można poobserwować pozostałości hal. Dużo ciekawszy jest pobliski tor, znajdujący się po drugiej stronie ulicy, gdzie regularnie organizowane są imprezy motoryzacyjne. Dokąd sie udać – można poznać po ryku silników i pisku opon.
  • Palma na Rondzie de Gaulle – wg najnowszych żartów, dar z San Escobar 😉

Ze swojej strony polecam nocleg w Abrakadabra na ul. Godebskiego, w miarę tanio i schludnie, okolica cicha (domki jednorodzinne – jest gdzie zostawić samochód) i sprzyjająca spacerom. W pobliżu galeria, kilka skwerów i Cinema City 😉

Czytaj więcej

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

Czytaj więcej

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.

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.

Czytaj więcej

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");

Wynik:


TRUE ok@ok.pl
TRUE dolores.ryba@poczta-n.pl
TRUE dolores.ryba@poczta.odlotowa.pl
TRUE dolores.ryba@a.b.c.d.pl
TRUE psikus@dot.dot.dot..pl //poprawny mail? Kwestia dyskusyjna
FALSE @
FALSE
FALSE
FALSE bad@
FALSE @wolf
FALSE @poczta.pl
FALSE cokolwiek

Czytaj więcej

Podsumowanie roku 2016 – blog

Kolejny rok za nami. 2016 szczęśliwie przeszedł już do historii.

Praca

Zawodowo był to dla mnie trudny rok. Zapowiadało się bardzo spokojnie i stabilnie, tymczasem pojawiło się trochę nieplanowanych, nowych „wyzwań”.

Blog

Na blogu planowałam dodawać 5 notek miesięcznie. Szczęśliwie udało mi się to, skutkiem czego w 2016 pojawiło się 60 nowych wpisów.

Pięć najpopularniejszych wpisów powstałych w 2016 to:

  1. Narzędzia do automatyzacji aplikacji desktopowych (7.10.2016)
  2. Dobre praktyki w testach Selenium (5.06.2016)
  3. Fale radiowe na mapie (10.01.2016)
  4. BDD, TDD i inne (15.05.2016)
  5. Jogger (10.04.2016)

Natomiast pięć najczęściej czytanych notek w tym roku to:

  1. Pytania na rozmowie kwalifikacyjnej dla testera (8.02.2015)
  2. Jak wyświetlić listę wszystkich tabel w PostgreSQL (3.01.2012)
  3. Twarda spacja w PowerPoint (3.03.2013)
  4. Różnica dat w Excelu (21.02.2011)
  5. ISTQB – parę słów o egzaminie (2.03.2013)

Plany na dalszy rozwój bloga? No cóż, przyznaję, że nie zamierzam przewrócić swojego życia do góry nogami, rzucić pracy i innych spraw i zajmować się tylko rozwojem bloga, aaa!!!1!!11 😉 Plany zatem są raczej skromne:

  • ! Przeprowadzka na nowy serwer. Koniecznie.
  • ! Zachowanie obecnego planu publikacji 5 wpisów miesięcznie. Jest to dobra motywacja do pisania :)
  • ? Doinstalowanie wtyczki Disqus – wciąż się nad tym zastanawiam. Z jednej strony fajne narzędzie, które umożliwia łatwe śledzenie dyskusji, odpowiedzi na swoje komentarze itd. Z drugiej jednak strony blokowane jest np. przez Ghostery, skutkiem czego nie wszyscy mogą zobaczyć komentarze pod wpisami (chyba że odblokują sobie Disqusa).

 

Szczęśliwego 2017, drodzy czytelnicy!

Czytaj więcej