Archive for December 2007

FTPUploader

Jak zwykle następny post powstał po dłuższej przerwie, ale muszę przyznać czasem mi się nie chce, a czasem po prostu nie mam czasu. Tak też było tym razem, brak czasu spowodowany był szkołą (tak 3 klasa LO zobowiązuje), ale udało się znaleźć w niej czas na drobne projektowanie, a poza nią na kodzenie (taak, to jest nałóg). W wyniku tego kodzenia udało mi się spłodzić program o nazwie właśnie FTPUploader. Szczególne podziękowania należą się Krystianowi Dużyńskiemu “KrystianD”, za pomoc w chwilach mojej niewiedzy oraz kod, który był mi potrzebny do realizacji założeń. No ale do rzeczy (ReadME):

FTPUploader jest to prosty program potrafiący wysłać plik na wskazany serwer
za pomocą 2 kombinacji klawiszy.
Aby rozpocząć korzystanie z programu należy dodać do bazy danych żądane serwery
FTP, przy czym w polu Adres download należy podać ścieżkę, która będzie dodawana
do adresu pliku (w przypadku republiki na koncie o loginie zgred będzie to
zgred.republika.pl). Wysłać plik można na 2 sposoby:

Standardowy – naciskasz “Wybierz plik”, wybierasz plik, a na końcu “Wyślij”.
po wysłaniu plik automatycznie skopiuje się do schowka, jeżeli przypadkiem
zmienisz wpis w schowku możesz nacisnąć pole “Ostatni link” co spowoduje
ponowne wpisanie linku do schowka.

Hotkey’s – ta metoda jest dużo lepsze, zwłaszcza dlatego, że program działa w tle.
Aby wysłać plik tą metodą wystarczy po prostu skopiować plik do schowka
(kombinacja klawiszy Ctrl + C), a następnie wysłać plik wciskając klawisze
Shift + Alt + S, po wysłaniu link do pliku znajdzie się w schowku.
Kombinacja klawiszy Shift + Alt + L powoduje wpisanie do schowka ostatniego
linka. (Uwaga kombinacja klawiszy powoduje zmiane klawiatury w Viście,
proponuje zostawić sobie tylko klawiaturę polską.)

Program posiada bazę linków, w której znajduje się 20 ostatnich linków.

FTPUploader

Pobierz

A na koniec pragnę życzyć wszystkim zdrowych, wesołych i owocnych Świąt.

StructReader

Wpadłem na pomysł prostego serializer’a, który by potrafił czytać dane z pliku podzielonego na sekcje i zapisywać je do prostej struktury – agregata. Miał być to szablon funkcji, który pobierałby jako jeden z argumentów wskaźnik do tej struktury, następnie wyliczał miejsce zmiennej w strukturze, na podstawie tablicy z typami (enum) i w końcu zapisywał przeczytane dane odpowiednio, sformatowane przez bibliotekę standardową. Niestety jak się okazało (czego do tej pory nie wiedziałem) miedzy składnikami klasy, struktury są przerwy, więc nie można skorzystać z wskaźnika, którego chciałem przesuwać o rozmiar przeczytanego typu, gdyż spowoduje to błędy zapisu.
Na szczęście rozwiązanie tego problemu okazało się bardzo proste i jest o wiele bardziej uniwersalne, otóż zamiast wskaźnika na obiekt struktury, przekazuję funkcji (ponieważ szablon jest już niepotrzebny) tablicę wskaźników do zmiennych i jej rozmiar. Dzięki niej wiem gdzie w pamięci znajduje się dana zmienna. Rozwiązanie to ma też inna zaletę, ponieważ do funkcji mogę przekazać nie tylko obiekty struktury, ale również dowolne obiekty nienależące do struktury.

Oto przykładowy plik cfg:

1
2
3
4
5
6
7
8
Sekcja1{
   // Komentarz
}
// Komentarz 2
Sekcja2
{
   zmienna1 = 3.14;     // Komentarz np. opisuje jaki to typ, tu float
}

Jak widać schemat jest prosty:

  1. Sekcje oznaczamy nazwą i klamerkami
  2. Komentarze tylko po //, są ważne do końca linii
  3. Nazwy zmiennych nie są brane pod uwagę, liczy się znak ‘=’ i ‘;’, pierwszy rozpoczyna czytanie wartości, drugi kończy.

PS. Schemat pliku zmyślony z Regedit’a :).

W kodzie wygląda to tak:

1
2
3
4
5
6
7
8
9
10
11
// Tworzymy tablicę z typami
int types[] = { TYPE_FLOAT };        // Przykładowo float
 
// Zmienna
float temp;
 
// Tablica ze wskaźnikami
void* pointers = { &temp };
 
// Odczyt z pliku
FillUpStruct("nazwa_pliku_jako_string", types, sizeof(types),  "Sekcja2", pointers, sizeof(pointers));

Według mnie wygląda to ładnie, i jest proste w użyciu, szczególnie przydatne przy zapisie ustawień np. urządzenia DX.