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.hppZacznijmy od utworzenia pliku output.hpp i zadeklarowania w nim funkcji display_weather: #ifndef OUTPUT_HPP #define OUTPUT_HPP bool display_weather(char* location); #endifPlik output.cppTeraz 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 = " "; string pres…

[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.hppW 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); }; #endifPlik data.cppW 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ć bibliotekę CU…

[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.hppW 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); }; #endifPlik config.cppW 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 API key wygenerowany …

[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 ncurseswInstalacja na: Debian/Ubuntu: apt-get install libncurses5-dev libncursesw5-devFedora 21/CentOS: yum install ncurses-develFedora 22: dnf install ncurses-develPrzykł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) / 2, (col-strlen…

[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.KoncepcjaZadaniem 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 NcursesProgram 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 takie jak: na…

[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ększa…

[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 czasowejdate_default_timezone_set('Europe/Warsaw');