Po prostu techblog
Wpisy otagowane porady
C – ściągawka z biblioteki string.h
maj 6th
Jako że ostatnio sporo piszę w C i widzę że sporej grupie osób raczej niezbyt fajnie to wychodzi. No to jako że mam chwilę wolnego czasu postanowiłem napisać taki oto bryk.
Jak czytać?
Ze względu na to że nie chcę mi się pisać jakiś strasznie długich artykułów, będę całą składnie opisywał raczej skrótowo. Więc zalecam zapoznanie się z tym jak wygląda funkcja w języku C. Ze względu na oszczędność mojego i Twojego czasu, nie będę się bawił w pisanie kodu który się kompiluje – sam go musisz upakować w funkcje main.
Repetytorium z tablic
Tworząc stringa, czyli ciąg znaków, musimy utworzyć tablicę znaków. Można ją zadeklarować na dwa sposoby statycznie i dynamicznie. W pierwszym podczas deklarowania zmiennej musimy podać jej wielkość (ile znaków może przyjąć). Gdy nie wiemy jaka będziemy wartość naszej zmiennej deklarujemy ją tak:
char tablica[12]; //Tablica przyjmie maksymalnie 11 znaków + NULL ('\0')
W przypadku gdy wiemy jaką zmienną przyjmie wartość podczas kompilacji i wiemy że na 100% nie przekroczy ona pierwotnej długości, to deklarujemy ją tak:
char* tablica = "Siemka!"; //Tablica przyjmie maksymalnie 7 znaków + NULL ('\0'), co daje 8 elementów w tablicy.
Ten przykład nie będzie działał – próbujemy do przypisać wartość, do tablicy która nie ma zaalokowanej pamięci.
char* tablica2; tablica = "Siemka!"; // w tym momencie system wywali "Naruszenie ochrony pamięci"
Po prostu tworzymy wskaźnik na tablicę, ale nie określiliśmy jej wymiaru. Dlatego między tymi dwoma linijkami powinna być gdzieś funkcja malloc – która dynamicznie zarządza pamięcią.
strlen
strlen jest funkcją która zwraca długość łańcucha znaku (char*). Zwracana jest liczba całkowita typu int (bo czy ktoś kiedyś widział pół literki?). Przykładowe użycie:
char* zmienna_z_tekstem = "Siemka!";
int dlugosc;
dlugosc = strlen(zmienna_z_tekstem);
printf("%i", dlugosc); //Wypisze 7
Ogólnie zasada działania jest chyba prosta jasna i przyjemna. Długość można wykorzystać do określenia rozmiaru tablicy, ilości iteracji w pętli…
strcmp
Fukcja strcmp ma za zadanie zobaczyć czy ciągi znaków są sobie równe. Jako że C jest strasznie niskopoziomowe i nie można po prostu porównać dwóch ciągów znaków. Wyrażenie:
char* zmienna1 = "Siemka!"; char* zmienna2 = "Siemka!"; if(zmienna1 == zmienna2)
zawsze zwróci fałsz. Wiec trzeba użyć jakieś funkcji, która odwali za na czarną robotę (oczywiście można napisać niezbyt skomplikowaną pętle, która będzie porównywać każdy znak po kolei, ale… po co). strcmp zwraca zawsze 0, gdy oba ciągi są sobie równe. Np taki kod:
char* zmienna1 = "Siemka!";
char* zmienna2 = "Siemka!";
if(strcmp(zmienna1, zmienna2)==0)
printf("Działa!");
Oczywiście funkcja zwraca inne wartości niż 0 i także one coś znaczą, więc zapraszam do dokumentacji.
strchr
Ta oto funkcja szuka pierwszego wystąpienia znaku w ciągu znaków począwszy od początku. Zwraca ona wskaźnik na ten element, i to w dodatku typu void – więc żeby coś sensownego z tego wyciągnąć trzeba trochę pokombinować. Oczywiście gdy szukana literka w ciągu nie występuje – zwracany jest NULL.
char tablica[100];
int znak;
char *wskaznik;
scanf("%99s", &tablica); //pobieranie maksymalnie 100 znaków
while(getchar()!='\n'); //czyszczenie bufora - po co to i jak to działa, znajdziesz w dalszej części.
scanf("%c", &znak); //pobieram kod szukanego znaku
//Odnajdywanie znaku w ciągu
if(wskaznik = (char*) strchr(tablica, znak)) //sprawdzanie czy występuje znak, zrzutowanie na char* i przypisanie go do wskaźnika
printf("Znalazłem znak %c w ciągu %s i to jest literka numer %i\n", znak, tablica, wskaznik - tablica + 1);
else
printf("Nieznalazłem znaku %c w ciągu %s\n", znak, tablica);
Jak widać aby odczytać pozycję na której znajduje się znak trzeba odjąć wskaznik, który wskazuje na dalszy element tablicy niż pierwotny od pierwotnej tablicy i mamy zliczanie pozycji, ale od 0. Dodajemy 1 wychodzi forma czytelna dla normalnego Kowalskiego. Warto oczywiście poczytać trochę o wskaźnikach jeśli nie rozumiesz, o czy teraz do ciebie mówię
Czyszczenie bufora
Na koniec pierwszej części chciałbym wytłumaczyć po co czyścic bufor. I co to właściwie jest. Mianowicie w poprzednim programie z strcmp, pobieram z scanf tylko i wyłącznie 99 znaków. Wszystko działa super, dopóki użytkownik nie wpiszę ich więcej niż 99. Spróbuje usunąć linijkę z tą dziwną pętlą i skompilować i uruchomić program. I powiedzmy zamist %99s napisać %5s i podać ciąg 7 znaków. Brawo – przepełniłeś bufor klawiatury! Wszystkie znaki nadmiarowe zamiast pójść do zmiennej, zostały gdzieś w programie i tylko czekają na kolejnego scanf/gechar, by go wypełnić. No to może przekierujmy te znaki do jakiejś nicości?
while(getchar()!='\n');
Pętle nie ma ciała i wykonuje się tak długo, aż nie napotka na znak ‘\n’ (Który był wprowadzony jako ostatni (ENTER)). Dzięki temu nasz kod chodzi jak w szwajcarskim zegarku.
Jutro postaram się dopisać drugą część, która opisze pozostałe funkcje operujące na stringach.
SSH: logowanie bez… hasła
lut 18th
Sporo osób musi korzystać czasem z SSH. Wśród tej grupy osób istnieje też pewna grupa, która z kontem shellowym jest na Ty i nie wyobraża sobie bez niego życia. Warunkiem koniecznym do korzystania z tej wspaniałej usługi jest logowanie. Czyli wpisanie w konsoli czegoś takiego:
ssh user@serwer.gdzies.tam.daleko.ploraz podanie swojego hasła. No nie wygląda to zbyt sympatycznie. A co by było gdyby połączyć się na przykład o takim poleceniem:
serwerek
Nie wygląda to zachęcająco? No ba
Jak jeszcze dodam że jak wytrwacie do końca porady to nie będzie trzeba wpisywać swojego hasła, to się rozpłyniecie ze szczęścia. Tylko pytanie brzmi jak to zrobić.
Aliasy
Każdy kto używa konsoli bashowej powinien zaprzyjaźnić się z czymś takim jak .bash.rc. Podczas uruchomienia konsoli z tego o to pliku w waszym katalogu domowym są ładowane wszelkiego rodzaju zmienne środowiskowe oraz aliasy – na szczególnie interesują te ostatnie. Dodając tam przykładowo takie o to linijki:
#aliasy - ssh alias olimp="ssh -X login@naserwerze1" alias rudy="ssh login2@naserwerze2 -MasakrycznieDuzoParametrow"
Oczywiście informuje uprzejmie że 1 linijka to komentarz
Następne 2 linijki to właśnie te nieszczęsne aliasy. Zasada jest prosta – najpierw podajemy „polecenie” a potem to co chcemy wykonać w konsoli. Oczywiście może tam się pojawić jakiś skrypcik. Gwoli formalności jeszcze dodam że można tworzyć aliasy tymczasowe. Jak wpiszemy np linijkę 2 nie do tego pliku lecz wpiszemy bezpośrednio do konsoli, to po wylogowaniu alias „znika”. Wygodne gdy na przykład robimy jakąś prace która wymaga wpisywania wielokrotnie tych samych tasiemców.
Tworzenie certyfikatu
Obiecałem logowanie bez hasła. Głupotą byłoby jednak umożliwienie logowania bez jakiegokolwiek uwierzytelnienia – wtedy każdy cep z ulicy mógłby wejść nam na serwer a tego byśmy raczej nie chcemy (chyba że mamy jakiś dziwny fetysz). No to trzeba stworzyć certyfikat.
ssh-keygen -rsa
Utworzyliśmy 2 klucze – prywatny i publiczny. Pierwszego strzeżemy jak oka w głowie – umożliwia on logowanie. Drugi klucz służy do potwierdzenia naszej tożsamości. I go wysyłamy na serwer:
scp ~/.ssh/id_rsa.pub login@serwer:~/
A następnie dodajemy go na zdalnym serwerze do listy zaufanych kluczy:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
Po wylogowaniu powinno wszystko działać jak w szwajcarskim zegarku. Tylko nie zapominajcie o wygenerowaniu nowego certyfikatu co jakiś czas, oraz zabezpieczeniu swojego komputera silnym hasłem.
Oczywiście wygenerowany klucz możecie dodać do PuTTY-ego:
10 rzeczy które można odpuścić przy kupnie komputera
lip 23rd
Obserwując konfigurację komputerów i ich wnętrzności kupowanych przez znajomych postanowiłem zrobić listę 10 rzeczy które można odpuścić sobie przy kupnie komputera. Jest to najczęściej sprzęt „nietrafiony” i „nieaktualny” jak na dzisiejsze czasy, lub zupełnie niepotrzebny.
1. Stacja dyskietek
Dyskietki były bardzo popularnym sposobem magazynowania informacji. Posiadały niewątpliwe zalety, jak stosunkowo niska cena i niewielką wielkość oraz masę. Przy tych niewątpliwych zaletach wysuwa się wrażliwość na uszkodzenia mechaniczne i wrażliwość na pole magnetyczne. Teraz na szczęście istnieją dużo pojemniejsze środki transportu danych, takie jak płyty CD-RW, DVD-RW, karty pamięci czy pendrajwy. Jak ktoś potrzebuje czegoś większego to może kupić przenośny dysk twardy. Więc po co komu napęd dyskietek? Aktualizacja BIOSU? Nie, teraz można to robić z poziomu systemu operacyjnego.
Werdykt: skrajnie nie polecam.
Co zamiast: Wbudowany czytnik kart pamięci bądź pendrive
2. Bardzo tanie myszki i klawiatury
Istnieje dużo firm, które specjalizują się w produkcji bardzo tanich myszek. Co prawda zdarzają się modele które są fajne, ale bardzo rzadko. Przeważnie ich trwałość wynosi coś koło dwóch miesięcy, chyba że ich właściciel pozbędzie się ich wcześniej. Niska ergonomia i kiepska jakość materiałów powodują ból nadgarstków, ślizganie ręki po myszce i tarcie „ślizgaczy” po podkładce. W przypadku myszy bezprzewodowych dochodzi wysokie zużycie baterii oraz niski zasięg. Oczywiście kiedy padnie nam mysz i nie mamy funduszy na zakup normalnego sprzętu możemy kupić takie coś na zastępstwo.
Werdykt: nie polecam, chyba że na zastępstwo padniętego sprzętu.
Co zamiast: Lepsza myszka/klawiatura. Polecam takie marki jak Logitech, Microsoft, Razer…
3. Obudowy typu tool-free
Na rynku istnieją obudowy które umożliwiają wymianę sprzętu bez użycia śrubokręta. Sam taką posiadam i bardzo ją chwalę. Umożliwia mi w szybki sposób zamontować bądź zdemontować dysk twardy w jednym z ośmiu slotów. Wymiana kart rozszerzeń jest szybka i bezproblemowa. Ale jeśli do komputera zaglądasz raz na rok/dwa tylko po to aby dołożyć ramu to po co Ci taka obudowa? Moim zdaniem lepiej za te pieniądze kupić ładniejszą obudowę z mocniejszym zasilaczem niż coś co użyjesz raz na rok. To jak kupienie tira po to aby spakować tam bagaże na wakacje. I w tym wypadku porównanie do tira ma sens – poprzeczne ułożenie dysków twardych mocno zwiększa jej szerokość.
Werdykt: Tylko jeśli tego naprawdę potrzebujesz
Co zamiast: mniejsza, ładniejsza tańsza obudowa z mocniejszym zasilaczem
4. Biurkowy laptop
Ostatnio bardzo popularne zrobiły się laptopy o matrycy 15 i 17 cali. Laptop ma na celu zapewnić mobilność. W przypadku modeli 15 calowych ta mobilność jest ograniczona ale jest. Natomiast 17 cali… cięzkie to i duże. Ale istnieją jeszcze modele 19 calowe! Po co to komu? Jeśli chcę mieć wszsytko w jednej kupię to niech kupią iMaca. A jeśli chcą szanować pieniądze zwykłego PC. Tego też nie wezmą do torby. wyjdzie to dużo taniej.
Werdykt: Fajne ale po co?
Co zamiast: normalny komputer stacjonarny, szybszy od laptopa
Dalsza część już wkrótce…
Windows 2008 jako desktop
mar 13th

Jako że wygrałem w konkursie wiedzy o Windows 2008 zestaw 5 płyt – Windows 2008 RTM 32 i 64 bit, SQL Serve4 2008 32 i 64 bit oraz Visual Studio. Co dziwne, mimo iż na pudełku piszę że Visual Studio jest w wersji Standard, klucz pasuje tylko do tej wersji, to dostałem płytę z 90 dniowym trialem w wersji Professional. Miła niespodzianka
Wracając do Windowsa, postanowiłem go przetestować. Jako iż posiadam tylko jeden komputer w domu, testowanie usługi Active Directory nie wchodzi w grę. Wcześniej czytałem na paru stronach, że Windows 2008 jest wydajniejszy od Visty. Podbudowany tymi opiniami postanowiłem to sprawdzić.
Instalacja jest taka sama, jak w wypadku Visty, więc nie bedę o niej dużo pisał. powiem tylko że
- system wymaga hasła do konta administratora
- nie jest sprawdzana wydajność systemu
- nie wybiera się tapety
Pierwszą rzeczą jaką musimy zrobić aby dostosować system do pracy jak desktop jest zainstalowanie sterowników od karty graficznej i dźwiękowej. Nie martwcie się jeśli nie ma sterowników pod 2008. Te od Visty działają idealnie.
Teraz przystępujemy do instalacji „komponentów” serwera. Wchodzimy w Server Meanger->Features->Add new features wybieramy Desktop Experience i co tam jeszcze potrzebujemy do normalnej pracy(IIS, Power Shell… ). Następnie wchodzimy w Configuration->Services. Tam zmieniamy tryb uruchamiania usług Themes, Sounds w automatyczny i uruchamiamy je. Nie zamykając tego okna uruchamiamy edytor rejestru. Dodamy dwie nowe wartości DWORD w HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters. Jedną nazwiemy EnablePrefetcher a drugą EnableSuperfetch. Oby dwóm nadajemy wartość 3. Następnie zmieniamy uruchomianie usługi SuperFetch w tryb automatyczny i także ją uruchamiamy. Musimy jeszcze zainstalować usługę wyszukiwania plików. Robimy to w Server Manager dodając nową „rolę”: Server Manager->Roles->File Services->Windows Search
Jeszcze drobna, kosmetyczna zmiana. Klikamy prawym na Computer i wybieramy Properties. Następnie wchodzimy w Advanced System Settings, na zakładce Advanced klikamy na Perfomance Settings i Adjust for the best apperance.
Proponuję jeszcze odbezpieczyć IE przez wyłączenie w Server Menager opcji IE ESC i dla adminów jak i userów.
Teraz jeszcze pozostaję wyłączyć opcje dotyczącą podawania powodu wyłączenia komputera. W tym celu uruchom mmc i dodaj przystawkę Group Policy. Teraz edytuj Administrative Templates->Display Shutdown Event Tracer na Disabled. A teraz wyłączamy logowanie interakcyjne w Windows Settings->Security Option->Interactive logon: do not require CTRL+ALT+DEL. Wartośc ustawiamy na enabled.
A to screen z tak skonfigurowanego windowsa 2008:
Najnowsze komentarze