Jak zrobić screenshot w Ubuntu

Nie wyobrażam sobie życia bez możliwości robienia screenshotów. Czasem po prostu chcę komuś coś pokazać, czasem dodać ilustrację do notki na bloga, czasem udokumentować jakąś akcję (na przykład… BUGA). Zazwyczaj naciskam w tym celu Print Screen, wklejam do programu graficznego, zapisuję i gotowe. Tymczasem okazało się, że w Ubuntu 12.04 (z Unity na pokładzie), którego aktualnie używam, wcale nie jest to takie proste… Pojawiło się pytanie: zatem jak zrobić screenshot w Ubuntu?Jak zrobić screenshot w Ubuntu - aplikacja Take Screenshot - screen

O ile sprawa dotyczy zwykłego zrzutu, problemu nie ma – zaraz po wciśnięciu przycisku Print Screen na ekranie pojawia się okno z pytaniem, czy zapisać obraz do pliku, czy skopiować do schowka. Problem pojawia się natomiast, gdy chce się wykonać zrzut ekranu, na którym widać… rozwinięte menu. Na szczęście jest na to sposób: Czytaj dalej

Szablon na bloga: 8 prostych motywów dla WordPressa

Podczas tegorocznego „odświeżania” WordPressa zastanawiałam się, jaki szablon nadałby się na mojego bloga. Samych darmowych motywów jest multum, ale wybór odpowiedniego zajmuje niestety nieco czasu. Zależało mi na czymś prostym i czytelnym, forma miała być klasyczna, tj. jeden sidebar, niewielkie menu w nagłówku, jak najmniej grafiki, prosta do bólu konfiguracja. Zależało mi też, aby szablony były na bieżąco łatane pod kątem potencjalnych dziur, częste update są zatem mile widziane.

Oto i lista kilku szablonów, które wytypowałam:

Twenty Twelve

Mój aktualny wybór. Wady to nieciekawe formatowanie obrazka wyróżniającego, wpis dlatego obecnie wyłączyłam go, wstawiam grafikę po prostu w treści wpisu (co jest średnim i mało przenośnym rozwiązaniem).

Szablon Twenty Twelve Czytaj dalej

Qt4: konwersja projektu qmake do CMake

Podczas tworzenia projekt w Qt4 z poziomu QtCreatora, do budowania projektu (generowania plików Makefile i tak dalej) QtCreator używa narzędzia qmake. Okazuje się jednak, że to nie wszystko:) QtCreator potrafi także używać CMake! Niestety nie ma póki co gotowego narzędzia, które automatycznie przekonwertuje projekt z qmake na CMake. Możemy jednak zrobić to sami. Jak? O tym jest właśnie ten tutorial.

Zagmatwane jak Qt4 i CMake!

Tworzymy CMakeLists.txt

Na sam początek warto wiedzieć, że sercem CMake jest plik CMakeLists.txt. To w nim definiowane są zasady, jakie biblioteki trzeba znaleźć i dołączyć, które pliki zbudować itd.

W pierwszym kroku trzeba zatem utworzyć plik CMakeLists.txt. Dodajemy go w głównym katalogu projektu. Natomiast folder wyżej (ponad źródłami i plikiem CMakeLists.txt) warto stworzyć dodatkowy folder, w którym będzie budowany nasz program.

Oto wersja pierwsza przykładowego pliku CMakeLists.txt – oferuje automatyczne wyszukiwanie plików ui i moc i generowanie na tej podstawie kodu. Odpowiadają za to zmienne: CMAKE_AUTOMOC i CMAKE_AUTOUIC.

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

PROJECT(V1)

set(QT_SRC ${QT_SRC} "${PROJECT_SOURCE_DIR}")
https://wiki.qt.io/Using_CMake_build_system
FIND_PACKAGE(Qt4 REQUIRED QtGui QtXml)
INCLUDE(${QT_USE_FILE})

QT4_WRAP_UI(UISrcs mainwindow.ui)
QT4_WRAP_CPP(MOCSrcs mainwindow.h)
 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${QT_SRC})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src/gui)

add_executable(DemoQt ${PROJECT_SOURCE_DIR}/main.cpp mainwindow)

TARGET_LINK_LIBRARIES(DemoQt Qt4::QtGui Qt4::QtXml) 

Aby wypisać wartości zmiennych, warto użyć polecenia MESSAGE, np.:

MESSAGE("MyProjectLib_src:\t\t${MyProjectLib_src}")

Moje wartości zmiennych są zatem następujące:

MOCSrcs /home/d9k/ProstyProjektQtCmake/qponiższytcreator-build/moc_mainwindow.cxx
MOCSrcs /home/d9k/ProstyProjektQtCmake/qtcreator-build/ui_mainwindow.h
QT_SRC /home/d9k/ProstyProjektQtCmake/zrodla
PROJECT_SOURCE_DIR /home/d9k/ProstyProjektQtCmake/zrodla
QT_USE_FILE /usr/share/cmake-2.8/Modules/UseQt4.cmake
CMAKE_CURRENT_SOURCE_DIR /home/d9k/ProstyProjektQtCmake/zrodla
CMAKE_CURRENT_BINARY_DIR /home/d9k/ProstyProjektQtCmake/qtcreator-build
QT_LIBRARIES /usr/lib/x86_64-linux-gnu/libQtGui.so;/usr/lib/x86_64-linux-gnu/libQtCore.so

Okazuje się jednak, że używanie automatu nie zawsze jest dobre – zwłaszcza, jeśli projekt jest rozbudowany i struktura katalogów jest drzewiasta. Wzorując się na poniższych wpisach w serwisie StackOverflow, udało mi się zmodyfikować poprzednią wersję, aby nie używała automatycznego przypisywania plików ui i moc.

Przechodzimy na sterowanie manualne

Usuwamy zatem fragment ze zmiennymi CMAKE_AUTOMOC i CMAKE_AUTOUIC, by zastąpić go własnym wskazaniem ścieżek: Czytaj dalej

Zanurkuj w Pythonie – recenzja podręcznika

Odważyłam się i zanurkowałam w paszczy Pythona 😉 A konkretnie to udało mi się przebrnąć przez „Zanurkuj w Pythonie” Marka Pilgrima. Podręcznik dostępny jest za darmo tu: https://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie (i to w dodatku po polsku).

Zanurkuj w Pythonie? Na początek polecam nurkowanie w chłodnym potoku!

Zanurkuj w Pythonie. Albo w chłodnym potoku. Foto: moje, data nieznana

Książka jest bardzo przekrojowa – obejmuje szerokie spektrum tematów: instalacja, sprint (dosłownie) przez składnię języka, operacje na plikach i strumieniach, parsowanie XML i HTML, obsługa usług sieciowych SOAP i HTTP, testy jednostkowe. Potem przychodzi czas na wyrażenia lambda, funkcje dynamiczne i optymalizację kodu.

Każdy rozdział jest zbudowany wg podobnego schematu: przedstawienie kompletnego kodu programu, a następnie tłumaczenie linijka po linijce. Co więcej, autor udostępnia na swojej stronie kody źródłowe, więc lekturę można uzupełnić własnymi doświadczeniami.

Gdy zabierałam się za lekturę, o Pythonie nie wiedziałam praktycznie nic (mając jednocześnie doświadczenia z Javy, Ruby czy innych języków) i nawet będąc już w połowie lektury nadal wydawało mi się, że ten stan rzeczy nie uległ zmianie. Początkowo irytowało mnie , że książka jedynie ogólnie nakreśla podstawy, nie opisuje wszystkich możliwych funkcji, tylko skupia się na kilku, użytych w programie. Tymczasem autor w każdym rozdziale pisze, aby wiedzę uzupełnić u źródła, tj. przeczytać odpowiedni fragment dokumentacji Pythona. Fajnie, ale wymaga to czytania podręcznika na komputerze, a nie na Kindlu… Na szczęście druga część książki poszła już z górki, możliwe że dlatego, że „opatrzyłam się” już ze składnią. Bardzo podobały mi się rozdziały o testach (bycie QA zobowiązuje 😉 ). Ciekawy był rozdział o optymalizacji, brakowało mi jednak lepszego podsumowania, jakiejś tabelki, które podejścia są zasobożerne, a które nie. Czytaj dalej

Jak zacząć z testowaniem – artykuł od Girls Who Test

Ilekroć zabieram się za wpis dla początkujących testerów opisujący jak zacząć z testowaniem, natrafiam w sieci na artykuł, który już temat opisuje! Jeszcze nie tak dawno w sieci mało można było znaleźć materiałów na ten temat, a teraz – proszę. Nic tylko czytać! 🙂

Tym razem w oko wpadła mi broszurka przygotowana przez Aleksandrę Kornecką z Girls Who Test.

Jak zacząć z testowaniem - artykuł od Girls who test

Dokument do przeczytania tutaj: https://docs.google.com/document/d/1e9IVt5x_W8FW24R-7BaQh3xf3jShHfJGzMEjm0E1sWg, a w nim:

  • co to jest oprogramowanie i co oznacza termin „testowanie oprogramowania”
  • kompetencje miękkie u testera
  • obowiązki testera
  • ścieżki rozwoju
  • skąd czerpać wiedzę
  • i inne.

Jeśli chodzi natomiast o same Girls Who Test, polecam śledzić ich stronę: http://www.girlswhotest.pl/events/, większość wydarzeń organizują w Warszawie lub Poznaniu. Dziewczyny, trzymam kciuki! 🙂

Kernel: Don’t panic – wrażenia z konferencji

W ubiegłym miesiącu, dla zabicia czasu w sobotni, deszczowy dzień, wybrałam się na studencką konferencję organizowaną przez Koło Naukowe Kernel, o nazwie Kernel: DON’T PANIC! Odbywała się ona 13 maja ’17, w dużej auli Wydziału Fizyki i Informatyki Stosowanej AGH, którą darzę dużym sentymentem:D

Logo Kernel: Don't panic

Organizacja na piątkę. Szatnia, ciasteczka, gorąca kawa, a nawet upominki dla uczestników: smyczki i elegancka torba z nadrukiem loga koła, a w środku pisadło i butelka wody (może na kaca, w końcu Juwenalia:D). Słowem profeska i szacunek dla organizatorów za ogarnięcie tematu (a dla sponsorów za sypnięcie groszem:))

Przechodząc jednak do merytoryki muszę powiedzieć, że wykłady trzymały poziom. Na scenie udało się zgromadzić naprawdę ciekawych prelegentów.

Wykłady na „Kernel: Don’t panic”

Na początek Piotr Konieczny, którego przedstawiać myślę nie trzeba (niebezpiecznik.pl), opowiedział o kulisach ataków socjotechnicznych. Okazuje się, że czasem nawet świadomość i wiedza pracowników nie wystarcza, by uchronić organizację przed przemyślanym atakiem socjotechnicznym. Bardzo często działamy automatycznie, nawykowo. Na na domiar złego w grupie myślenie i odpowiedzialność ulega rozproszeniu, skutkiem czego niestety, najsłabszym ogniwem zabezpieczeń bywa człowiek. Naprawdę warto było wstać przed ósmą (w sobotę!) i pomknąć przez deszczowy Kraków, by dotrzeć na ten wykład!

Wykład pt. „Metodologia tworzenia oprogramowania przez IBM spełniającego wymogi cyber-bezpieczeństwa” niestety ciut mnie rozczarował, więc przejdę od razu do kolejnego punktu, czyli wystąpienia naczelnika krakowskiego wydziału policji do walki z Cyberprzestępczością. Czytaj dalej

Catch-all czyli złap maile wysłane pod zły adres

Niestety ludzie czasem mylą się – popełniają literówki w imieniu albo przekręcają nazwisko. Wisniewski@onedaymail.com czy Wisniowski@onedaymail.com? Jak skonfigurować serwer pocztowy, żeby pobierał także wiadomości wysłane na niepoprawny adres? Odpowiedzią jest catch-all.

Jeśli mamy skrzynkę pocztową u usługodawcy typu Gmail, Poczta O2 itp. niestety nie mamy zbyt wielkiej możliwości manewru. Oczywiście mozna by założyć drugą skrzynkę z przekręconym nazwiskiem i ustawić przekierowanie, nie zawsze jednak jest to możliwe. Na szczęście skrzynkę pocztową można założyć na własnym serwerze – najczęściej kupując konto hostingowe (najlepiej z własną domeną) istnieje także możliwość założenia poczty w tej domenie.

Konfiguracja sprowadza się do włączenia usługi catch-all. W zależności od panelu administracyjnego konfiguracja może wyglądać nieco inaczej. Pokażę na przykładzie Direct Admin.

Jak skonfigurować catch-all?

  1. Zakładam skrzynkę, która będzie używana do zbierania wszystkich maili. Warto ustawić jej ograniczenie zajmowanej powierzchni (quota) ponieważ na takiej skrzynce może gromadzić się sporo spamu!
  2. Włączam catch-all, przekierowując wszystkie zabłąkane maile na stworzoną przed chwilą skrzynkę.
  3. Gotowe 🙂 Można przetestować wysyłając maila na adres cokolwiek@twojadomena.xx, blablabla@twojadomena.xx itd. 🙂

W panelu Direct Admin wygląda to tak:

Konfiguracja catch-all w Direct Admin

I konfiguracja przekierowania:
Konfiguracja catch-all w Direct Admin - przekierowanie poczty

Jeżeli nie chcemy logować się na tak stworzoną pocztę „serwerową”, można ustawić także, aby wszystkie maile były przekierowane do używanej przez nas na co dzień skrzynki (np. Gmail).

 

Konferencja SkładQA 2017 – jak było?

Jakiś czas temu, bo 20 marca 2017, udało mi się zajrzeć na tegoroczną edycję testerskiej konferencji SkładQA. O samej SkładQA pisałam przy okazji omawiania wiosennych wydarzeń w IT.

Logo SkładQA

Zespół KraQA nie zawiódł i tym razem. Profesjonalne prowadzenie konferencji, świetnie wybrana lokalizacja (obszerna hala Starej Zajezdni, która pomieści naprawdę sporo osób), dobre zaplecze techniczne (nagłośnienie itd.), ciekawi prelegenci i przekrój  różnorodnych tematów. Organizatorzy to profesjonaliści i to widać.

Prezentacje na SkładQA

Merytorycznie mogę odnieść się jedynie do trzech ostatnich prezentacji:

  • Marcin Żołna & Karol Pękała – How to become a cybersecurity hero. Z początku myślałam, że ta prezentacja skierowana jest raczej do początkujących. Ale na szczęście nie tylko. Wyniosłam z niej coś dla siebie – wymienione zostało narzędzie OWASP, któremu z pewnością przyjrzę się bliżej.
  • Wiktor Żołnowski – Pragmatyczny QA. Na którejś edycji Quality Excites miałam możliwość wysłuchania prelekcji Wiktora, kiedy jeszcze zajmował się wdrożeniami Agile. Tym razem zaprezentował model CYNEFIN. Nawet nie wiedziałam, że tak nazywa się ten diagram (o którym pisałam zresztą we wpisie Dla kogo Scrum?, lecz w formie dużo bardziej uproszczonej). Warto zatem chodzić na konferencje, zawsze można się czegoś ciekawego dowiedzieć:)
  • Michał Sajdak – Hackowanie aplikacji webowych na żywo – wybrane przypadki. Ta prezentacja totalnie mnie zachwyciła. Prawdziwy show. Niektóre „sztuczki” pobieżnie znałam z artykułów na Sekuraku, ale zobaczenie jak to wygląda na żywo – naprawdę robi wrażenie.

Podsumowując, było to naprawdę dobrze spędzone, INSPIRUJĄCE popołudnie. Chcę więcej i polecam wszystkim:)

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.