Archiwum autora: d9k

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

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 🙂

Składanie PIT pod systemem Linux + 1% na naukę

Nie będę powielać tematu, ale zapisuję sobie „ku pamięci”, bardzo dobry artykuł jak zainstalować program e-Deklaracje w systemie Linux, instalacja (na zasadzie sztuczek niestety!) – krok po kroku: http://nocnypingwin.pl/e-deklaracje-pod-linuxem-2017/.

Gdyby ktoś natomiast zastanawiał się, na co może przeznaczyć swój jeden procent podatku, a kręci go nauka i chciałby ją wesprzeć, oto lista moich kandydatów:

  • 1% Na Astronomię, czyli program Ciemne Niebo – popularyzacja astronomii i działania z zakresu ochrony ciemnego nieba (KRS 0000076686). Kiedyś już pisałam o fundacji Polaris przy okazji innej ich akcji.
  • Fundacja Sieci Obserwatorów Burz (KRS: 0000546557) – robią dobrą robotę, wystarczy zajrzeć na http://obserwatorzy.org/ 
  • Polskie Towarzystwo Rakietowe – popularyzacja nauki – tym razem rakiety amatorskie. (KRS: 0000355014)
  • Fundacja Wikimedia – myślę, że nikomu nie trzeba przestawiać, Wikipedię znają chyba wszyscy 🙂 (KRS: 0000244732)

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

Czytaj dalej

Jak stworzyć mapę Google z punktów?

Jak szybko umieścić wiele punktów na mapie, np. Google Maps?

Z pomocą może przyjść narzędzie online GPS Visualizer: http://www.gpsvisualizer.com/map_input

Jako plik wejściowy wystarczy podać plik z koordynatami. Przydatne, jeśli dysponujemy np. punktami z przebytej trasy z podręcznych urządzeń GPS nie posiadających opcji wizualizacji. Wizualizacja obejmuje wiele rodzajów map (Open Street, Google Maps itd.)

Przykładowa wizualizacja punktów zawartych w pliku GPX z ZOO w St Louis:

gps_visualizer

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 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