Posty

[C++] Piszemy aplikację pogodową, część 4

Czwarta część z cyklu Piszemy aplikację pogodową w C++. W tym wpisie oprogramujemy funkcjonalność odpowiadającą za wyświetlanie danych pogodowych w terminalu. W tym celu do obsługi tekstu zostanie użyta biblioteka ncurses . Uwaga! Dla wsparcia polskich znaków konieczne jest użycie ncursesw - nakładki, która wspiera UTF-8. Plik output.hpp Zacznijmy od utworzenia pliku output.hpp i zadeklarowania w nim funkcji display_weather : #ifndef OUTPUT_HPP #define OUTPUT_HPP bool display_weather(char* location); #endif Plik output.cpp Teraz pora na plik output.cpp . Plik ten będzie zawierał najwięcej kodu - definicję funkcji display_weather . Funkcja ta przyjmuje jeden argument - char* location (lokalizacja dla pobrania danych o pogodzie): #include "data.hpp" #include "output.hpp" #include <ncursesw/ncurses.h> int previous_temperature = 100; int previous_pressure = 0; int previous_humidity = -1; int previous_wind_speed = -1; string temperature_trend = "

[C++] Piszemy aplikację pogodową, część 3

W części trzeciej tej serii zostanie utworzony kod programu odpowiadający za pobieranie danych pogodowych z serwisu OpenWeather oraz parsowanie pobranego ciągu JSON. Plik data.hpp W pliku data.hpp zadeklarujemy strukturę Weather oraz klasę Data : #ifndef DATA_HPP #define DATA_HPP #include <iostream> using namespace std; struct memory { char *response; size_t size; }; struct Weather { string location; string conditions; int temperature; int pressure; int wind_speed; const char* wind_direction; int humidity; int memory; string error; }; class Data { public: static size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp); public: memory get(string location); Weather set(char* input_location); }; #endif Plik data.cpp W pliku data.cpp definiujemy klasę Data . Jak wspomniałem na początku wpisu, kod ten będzie odpowiedzialny za pobieranie danych oraz za parsowanie ciągu JSON. W związku z tym do tego pliku musimy dołączy

[C++] Piszemy aplikację pogodową, część 2

W tym wpisie stworzymy kod odpowiadający za konfigurację naszej aplikacji pogodowej, a będą to pliki config.hpp i config.cpp . Kod ten zdefiniuje klasę Config z dwiema metodami: create_default_configuration oraz get_option . Pierwsza metoda ma za zadanie stworzyć plik config.cfg z domyślną konfiguracją. Metoda get_option będzie służyła do pobierania danej opcji. Plik config.hpp W tym pliku dołączamy bibliotekę iostream i cstdlib oraz deklarujemy pożądaną klasę oraz jej metody. #ifndef CONFIG_HPP #define CONFIG_HPP #include <iostream> #include <cstdlib> using namespace std; class Config { public: void create_default_configuration(); public: string get_option(string option_name); }; #endif Plik config.cpp W tym pliku dołączamy wcześniej utworzony plik nagłówkowy config.hpp , bibliotekę filesystem , bibliotekę fstream oraz definiujemy zadeklarowane w pliku nagłówkowym metody klasy Config . UWAGA! Nie zapomnij w miejsce "ApiKey" wpisać swój

[Blogger] Jak dodać favikonę?

Favicon czyli favikona to obraz (ikona) wyświetlana np. przy wynikach wyszukiwania, przy zakładkach ulubionych stron, które dodał użytkownik w przeglądarce, a także kartach, które aktualnie użytkownik ma otwarte. Jest to mały graficzny symbol, który powinien odzwierciedlać nazwę lub logo twojej strony. Jeśli Twój blog/strona nie ma loga może to być np. Pierwsza litera nazwy Twojego bloga lub inny unikalny symbol. Przechodząc do rzeczy, czyli jak dodać favicon do bloga na Bloggerze - wchodzimy w Ustawienia i w sekcji Podstawowe odnajdujemy pozycję Favikona . W nowym oknie, które nam się otworzy wybieramy favikonę z dysku komputera i klikamy zapisz . Jeśli korzystasz ze starej wersji Bloggera, aby zmienić favikonę wejdź w Układ i na samej gorze powinien wyświetlać się blok Favikona - edytuj , klikamy edytuj i dodajemy swoją favikonę.

[PHP] Jak usunąć puste elementy z tablicy?

Najprostszą i raczej najszybszą metodą na usunięcie pustych elementów z tablicy jest użycie funkcji array_filter . Funkcja ta filtruje elementy tablicy funkcją zwrotną. Jeśli funkcja zwrotna nie zostanie podana to z tablicy zostaną porostu usunięte puste wpisy. Przykładowe użycie: $groups = [0 => 'EPWA', 1 => '152130Z', 2 => '', 3 => '26006KT']; $groups = array_filter($groups); W powyższym przykładzie z tablicy $groups usunięty zostanie element o ID 2.

[C++] ncurses Unicode / UTF-8 / polskie znaki

Trafiłeś na ten artykuł, ponieważ zapewne masz problem z polskimi znakami diakrytycznymi przy pracy z biblioteką ncurses . Czy jest to do rozwiązania? Oczywiście, ale konieczne jest do instalowanie nakładki ncursesw . Aby zacząć korzystać z ncursesw należy ją doinstalować, dołączyć nagłówek #include <ncursesw/ncurses.h> oraz w funkcji (przed zainicjalizowaniem initscr()) zainicjować funkcję setlocale . Funkcja setlocale powinna zostać zainicjowała z odpowiednim identyfikatorem locale - dla polskich znaków będzie to 'pl_PL.UTF-8'. Instalacja ncursesw Instalacja na: Debian/Ubuntu: apt-get install libncurses5-dev libncursesw5-dev Fedora 21/CentOS: yum install ncurses-devel Fedora 22: dnf install ncurses-devel Przykład użycia ncurses z UTF-8 #include <clocale> #include <ncursesw/ncurses.h> #include <string.h> int main() { setlocale(LC_ALL, "pl_PL.UTF-8"); int row, col; initscr(); getmaxyx(stdscr,row,col); mvprintw((row - 3

[C++] Piszemy aplikację pogodową, część 1

Kolejny większy materiał poświęcony programowaniu w C++. Tym razem tematyką tej serii postów będzie aplikacja pogodowa . Koncepcja Zadaniem programu będzie pobieranie danych pogodowych dla danej lokalizacji ze zdalnego serwisu. Serwis, który wybrałem jako prowidera danych pogodowych to OpenWeather . Dlaczego akurat OpenWeather? Między innymi dlatego, że serwis ten ma bardzo intuicyjne API. Do pobierania danych użyta zostanie biblioteka cURL , natomiast format danych, które będzie przetwarzał program to JSON, a jako bibliotekę do operowania na tych danych wybrałem nlohmann_json . Do obsługi tekstu w terminalu użyta zostanie biblioteka Ncurses Program po uruchomieniu ma sprawdzić czy istnieje plik konfiguracyjny i pobrać z niego ustawienia, a jeśli plik nie istnieje utworzyć go z domyślną zawartością. Następnie program ma oczekiwać na podanie przez użytkownika lokalizacji, dla której mają zostać pobrane dane. Po podaniu lokalizacji program ma wczytać i wyświetlić w terminalu dane taki

[C++] Piszemy grę, część 3

W tym wpisie rozbudujemy program o kolejną pętlę do while , w której będzie właściwy kod gry, czyli losowanie liczb, zliczanie prób, liczenie czasu gry itd. Pętla będzie się powtarzała do momentu trafienia poprawnej liczby lub osiągnięcia limitu prób. Do kodu utworzonego w poprzedniej części dopiszmy następujący fragment: do { /* Zależnie od wybranego przez gracza poziomu trudności, ustawiamy limit prób oraz zakres losowania liczby. */ switch(game_level) { // Poziom 1 case 1: attempts_limit = 25; // limit - 25 prób rand_number = rand() % 10 + 1; // losuj liczbę z zakresu 1-10 break; // Poziom 2 case 2: attempts_limit = 15; // limit - 15 prób rand_number = rand() % 50 + 1; // losuj liczbę z zakresu 1-50 break; // Poziom 3 case 3: attempts_limit = 10; // limit - 10 prób rand_number = rand() % 100 + 1; // losuj liczbę z zakresu 1-100 break; } // Z każdą próbą zwięks

[PHP] Jak sprawdzić czy katalog istnieje?

Jeśli zajdzie potrzeba sprawdzenia czy katalog istnieje lub czy nazwa pliku jest katalogiem funkcja is_dir nam o tym powie. Funkcja ta sprawdza czy podana jako jej argument nazwa jest katalogiem. Jeśli podana nazwa jest katalogiem (czyli katalog musi istnieć) zwracana jest wartość TRUE , w przeciwnym wypadku funkcja zwraca FALSE . Przykładowe użycie: $apache_dir = '/etc/apache2'; $hosts_file = '/etc/hosts'; is_dir($apache_dir); // TRUE is_dir($hosts_file); // FALSE

[PHP] Jak ustawić domyślną strefę czasową?

PHP od wersji 5.1.0 pozwala ustawić z poziomu skryptu domyślną strefę czasową , której używają wszystkie funkcje daty. Ustawienie domyślnej strefy czasowej sprowadza się do wywołania funkcji date_default_timezone_set z odpowiednim identyfikatorem strefy czasowej. Ustawienie polskiej strefy czasowej date_default_timezone_set('Europe/Warsaw');