Scrum kontra złożoność

Niedawno podawałam garść ciekawych informacji na temat metodologii Scrum. Dziś kontynuacja tego tematu.

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:

Scrum in 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.

Krzywa uczenia

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

Krzywa uczenia sie w Scrum

  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 metodyki Scrum 🙂

Jak odpakować tar.gz

Aby odpakować tar.gz czyli skompresowane archiwum, można spróbować komendy tar -zxvf, gdzie:

  • z – (zip), zdekompresuj
  • x – (extract), wypakuj na dysk
  • v – (verbose), bardziej szczegółowe logowanie
  • f – (file), odczytaj archiwum z pliku podanego w parametrze

Mój plik był jednak bardziej złośliwy:

d9k@Nihilia:~/folder$ tar -zxvf export.tar.gz
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

Jak widać w przykładzie wyżej, pomimo że plik wygląda jak spakowane archiwum tar+gzip, wcale tak nie jest – komunikaty mówią, że plik nie jest w formacie gzip. Nie jest więc spakowany. Wystarczy zatem użyć samego tar -xvf:

d9k@Nihilia:~/folder$ tar -xvf export.tar.gz

Tym razem się udało i na dysku mamy odpakowane pliki.

Instalacja ROOT w systemie Ubuntu

ROOT jest biblioteką do analizy danych, statystyk, wizualizacji danych. Używany jest najczęściej w jednostkach naukowych (CERN, uczelnie itd.). Świetny opis instalacji tego frameworka znalazłam tu:
https://yannisflou.wordpress.com/2012/06/05/root-data-analysis-framework-on-ubuntu-12-04/. Instalacja ROOT jest tu naprawdę dobrze opisana.

Poniżej przedstawiam opis instalacji pod systemem Ubuntu 12.04, w języku polskim – dla absolutnych początkujących, nie znających systemu Linux.

Download

Ściągnęłam wersję ROOT 5.34/36 wybierając typ: „Source” na podstronie wersji: https://root.cern.ch/content/release-53436. (Po instalacji przedstawia się jako:
v5-34-36@v5-34-36, Apr 05 2016, 10:25:45 on linuxx8664gcc)

Rozpakowanie

d9k@Nihilia:~$ cd rootSOURCE
d9k@Nihilia:~/rootSOURCE$ gunzip root_v5.34.36.source.tar.gz
d9k@Nihilia:~/rootSOURCE$ tar xvf root_v5.34.36.source.tar

Miejsce docelowe instalacji

ROOT-a installować będziemy w folderze /opt/ROOT/. Folder „opt” był używany niegdyś do instalowania oprogramowania niezwiązanego z systemem (coś jak windowsowe „Program files”). Obecnie zaleca się używać ścieżki /usr/local, w mojej instrukcji użyję jednak „starodawnych” rozwiązań :)Stworzenie folderu:

d9k@Nihilia:~/rootSOURCE$ sudo mkdir /opt/ROOT/

Stworzenie tymczasowej zmiennej globalnej (w następnych krokach „utrwalimy” ją, aby była dostępna także po zamknięciu tej sesji terminala):

d9k@Nihilia:~/rootSOURCE$ export ROOTSYS=/opt/ROOT

Możemy sprawdzić, czy się utworzyła:

d9k@Nihilia:~/rootSOURCE$ echo $ROOTSYS
/opt/ROOT

Ok.

Configure

Configure to pierwszy krok instalacji. W skrócie Configure jest to skrypt, który na bazie podanych mu opcji (i zmiennych, uwarunkowań i zależności istniejących w systemie) tworzy plik Makefile, który z kolei zostanie użyty w kolejnych krokach.Można wyświetlić sobie helpa polecenia Configure – najlepiej zrzucając go do pliku, bo opcji konfiguracji ROOT-a jest ogólnie bardzo dużo. Instalować będziemy w opcjach domyślnych, wskazując jedynie miejsce instalacji.

d9k@Nihilia:~/rootSOURCE$ cd root
d9k@Nihilia:~/rootSOURCE/root$ ./configure --help > ../configure_help.txt

I wywołanie samego polecenia – ze wskazaniem mu ścieżki, gdzie ROOT ma zostać zainstalowany:

d9k@Nihilia:~/rootSOURCE/root$ ./configure --prefix=/opt/ROOT

Make

Wykonanie tego kroku trwało dość długo. Podczas tego etapu źródła są budowane za pomocą pliku Makefile, zawierającego instrukcje budowania.

d9k@Nihilia:~/rootSOURCE/root$ make

Make install

Wreszcie ostatni krok. Na tym etapie skompilowany program jest kopiowany do miejsca docelowego (podanego w parametrze „prefix” na etapie konfiguracji).

d9k@Nihilia:~/rootSOURCE/root$ sudo make install
[sudo] password for d9k:
============================================================
=== ROOT BUILD SUCCESSFUL. ===
=== Run 'make install' now. ===
============================================================
Installing binaries in /opt/ROOT/bin
Installing libraries in /opt/ROOT/lib/root
Installing headers in /opt/ROOT/include/root
Installing /home/d9k/rootSOURCE/root/main/src/rmain.cxx in /opt/ROOT/include/root
Installing cint/cint/include cint/cint/lib and cint/cint/stl in /opt/ROOT/lib/root/cint
Installing icons in /opt/ROOT/share/root/icons
Installing fonts in /opt/ROOT/share/root/fonts
Installing misc docs in /opt/ROOT/share/doc/root
Installing tutorials in /opt/ROOT/share/doc/root/tutorials
Installing tests in /opt/ROOT/share/doc/root/test
Installing macros in /opt/ROOT/share/root/macros
Installing man(1) pages in /opt/ROOT/share/man/man1
Installing config files in /etc/root
Installing Autoconf macro in /opt/ROOT/share/aclocal
Installing Emacs Lisp library in /opt/ROOT/share/emacs/site-lisp
Installing GDML conversion scripts in /opt/ROOT/lib/root
d9k@Nihilia:~/rootSOURCE/root$

Udało się.

Source

Krok wymagany przez program ROOT – uruchomienie skryptu „thisroot.sh„, ustawiającego ścieżki używane przez program ROOT, takie jak $ROOTSYS, $LD_LIBRARY_PATH, $DYLD_LIBRARY_PATH, $PATH, $LIBPATH i wiele innych. Jego treść można oczywiście podejrzeć dowolnym edytorem:

d9k@Nihilia:~$ cat /opt/ROOT/bin/thisroot.sh

Ok, czas na wykonanie tego skryptu:

d9k@Nihilia:~$ source /opt/ROOT/bin/thisroot.sh

Uruchomienie

Nareszcie możemy uruchomić program ROOT:

d9k@Nihilia:~$ root
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 5.34/36 5 April 2016 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************ROOT 5.34/36 (v5-34-36@v5-34-36, Apr 05 2016, 10:25:45 on linuxx8664gcc)CINT/ROOT C/C++ Interpreter version 5.18.00, July 2, 2010
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0]

Utrwalenie zmiennych

Po wyłączeniu terminala, ustawiona w poprzednich punktach zmienna ROOTSYS zniknie. Można ją utrwalić.Jak czytamy w helpie Ubuntu:
„A suitable file for environment variable settings that affect the system is /etc/environment.
An alternative is to create a file for the purpose in the /etc/profile.d directory.”Modyfikujemy zatem plik:

 d9k@Nihilia:~$ sudo gedit /etc/environment

Dodając na koniec:

ROOTSYS="/opt/ROOT"

Aby nie trzeba było za każdym włączeniem terminala uruchamiać na nowo skryptu thisroot, można ustawić, aby skrypt był uruchamiany przy starcie systemu:

d9k@Nihilia:~$ sudo gedit .bashrc

Na końcu dodając linijkę:

source /opt/ROOT/bin/thisroot.sh

Gotowe 🙂

Jeśli chcesz natomiast przeczytać, jak zainstalować moduł LHAPDF, pisałam o tym tutaj.

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

Google się obraziło

Google Analytics powiedziało mi, że już mnie nie lubicie. A przynajmniej mojego blogaska.

Statystyki bloga od lata 2016 do stycznia 2017. Żólte: wejścia z wyszukiwarki. Niebieskie: wszystkie wejścia.

W zasadzie to kompletnie nie ma się czym chwalić. Ale bardziej niż przyczyna, zainteresował mnie sam fakt. Powodów upatruję w zmianie algorytmów Google. Jak donoszą niektóre źródła nt. SEO, 14/15 grudnia 2016 miało miejsce uaktualnienie algorytmu. Jak widać na wykresie Algoroo.com (strona śledząca różne słowa kluczowe i zmiany pozycji stron w wynikach wyszukiwarki) istotnie „coś” się wtedy wydarzyło:

Wykres „stabilności” wyników w Google w Algoroo. Czerwony pik: zawirowania 15/16 grudnia 2017

Na szczęście w tym miesiącu ponownie odbijamy się od dna;) Mam nadzieję, że moje przeboje z WordPressem nie wpłyną negatywnie na wyniki, a zmiana hostingu będzie tylko na plus.

Aktualne statystyki. Żółte: wejścia z wyszukiwarki, niebieskie: wszystkie wejścia.

Suma summarum bardzo cieszę się, że w swojej zawodowej pracy zboczyłam ze ścieżki „SEO” i udałam się w stronę, gdzie wyniki w większej mierze zależą od zaangażowania i włożonego wysiłku 😉

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ły sposób na trzymanie ręki na pulsie to konferencje i wykłady. Wiele z nich jest darmowych!

Konferencje wiosna 2017

Gdzie zatem warto zawitać wiosną 2017?

Marzec – konferencje:

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

Jak (nie) przenosić bloga WordPress na inny serwer

Wraz z początkiem marca postanowiłam ruszyć nieco ze sprawami. Pierwsza myśl: dobra chwila by przenosić bloga na inny hosting. Migracji dokonałam w sposób – jak to się niegdyś mówiło – lamerski, a wszystko to z racji braku dostępu do swojego komputera. Dla chcącego nic trudnego. Cały proces udał się, chociaż wszystko musiałam wyklikać w panelu WordPressa, a parę rzeczy nastręczyło mi problemów…

Jak przenosić bloga – wersja lame

  1. Przepięcie domeny – u rejestratora wpisanie adresów DNS nowego hostingu, w hostingu dodanie nowej domeny.
  2. Eksport treści ze starego bloga, za pomocą domyślnego narzędzia wbudowanego w platformę:
    Narzędzia –> Eksport.
    Jak przenosić bloga WordPress - import i eksport
    Jako wynik otrzymujemy plik XML ze wszystkimi wpisami i komentarzami.
  3. Instalacja WordPressa za pomocą pakietu Installatron – parę kliknięć i gotowe.
  4. Import – w ten sam sposób, co eksport:
    Narzędzia –> Import.
  5. Konfiguracja WordPressa – z poziomu panelu administracyjnego. Moje niezbędne minimum:
    • Dodanie tej samej templatki, co na starym blogu (Sparkling). Może nie jest szałowa i nowoczesna, ale w miarę mi wystarcza. W oko wpadła mi jeszcze Moesia, chociaż jest zbyt… designerska, Simple Live, które z kolei jest ciut staroświeckie i Twenty Twelve, które byłoby idealne, gdyby poszczególne wpisy były od siebie lepiej oddzielone. Kwestia zabawy CSS-em – do przemyślenia.
    • Instalacja wtyczek – Akismet (antyspam), Who Stole the Text Justify Button (guziczek justowania treści wpisu;)), SyntaxHighlighter (obsługa kodów źródłowych – oficjalnie nie jest wspierany w wersji  4.7.2 WordPressa, jednak z tego co widzę zadziałał – cóż, mam nadzieję, że nic się nie posypie).
    • Dodanie kodu Google Analytics.
    • Parę zmian konfiguracyjnych.
  6. Problemy – czyli co zostało mi do zrobienia (o ile znajdę czas):
    • Brak obrazków we wpisach.
    • Brak wpisów z lutego. Hihihi…
    • Brak formatowania wpisów 🙁
    • Brak wypisów (excerpt). Wszystkie wpisy są wyświetlane w całej swej długości.
    • Brak obrazków Gravatar komentatorów.
    • Wszystkie wpisy wylądowały w kategorii Uncategorized.

Czeka mnie zatem jeszcze trochę pracy. Jak to się mówi – „mądry Polak po szkodzie„. Można było nie śpieszyć się tak z przenosinami i po prostu przerzucić dane przez FTP, po czym dokonać aktualizacji całego WordPressa. Albo zainstalować którąś ze wtyczek wspomagających import/eksport. Cenne doświadczenie 🙂

Pascal-rekurencja

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

Pascal-rekurencjaRekurencja

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

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