Sojecki
Po prostu techblog
Po prostu techblog
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.
kwi 1st
O to co zobaczyłem dzisiaj rano szukając jakiegoś „bajeru” z okazji 1 kwietnia od Google. No i dostałem, tylko nie to czego się spodziewałem…
Jak widzimy zmieniło się umiejscowienie przycisków odpowiedzialnych za wyświetlanie zdjęć i filmów oraz po części szata graficzna. Jeśli ktoś chce zobaczyć stronę w działaniu, powinien wylogować się z swojego konta (jeśli używa iGoogle), wejść na google.pl i z listy rozwijanej która wyświetla podpowiedzi kliknąć szukaj.
No i zapraszam jeszcze na odmienione Youtube.
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ć.
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.
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:
sty 28th
Zakończyłem pracę na nową stroną internetową, zespołu muzycznego Maxton.
Tym razem nie pisałem własnego CMSa od podstaw, lecz użyłem sprawdzonego i elastycznego rozwiązania jakim jest WordPress. Jego obsługa jest dużo prostsza niż „dużych” rozwiązań jak Joomla czy Drupal, więc każdy poradzi sobie z aktualizacją treści – nawet osoby nieobeznane specjalnie z tematem.
Motyw jest mój, autorski. Został on napisany w taki sposób, aby maksymalnie ułatwić jego późniejszą modyfikacje. Nowocześnie i niestandardowo rozwiązany problem menu umożliwia łatwą nawigacje.
W projekcie wykorzystałem sporo rożnego rodzaju gotowych wtyczek, co przyczyniło się do jego szybszego powstania. Dzięki temu mogłem się skupić na najważniejszym zadaniu z mojego puntu widzenia – grafice. Starałem się stworzyć wszystko sam od podstaw, korzystając jedynie z ogólnodostępnych obrazów. Mogę powiedzieć że jest to najlepsza strona jaką do tej pory stworzyłem.
gru 4th
Google postanowiło stworzyć własny system operacyjny. Więcej technicznych detali możecie znaleźć tutaj, ja się skupię raczej na wrażeniach z krótkiego testowania tego dziwnego tworu.
W teorii miało być pięknie – wywalamy wszystkie programy, zostawiając tylko przeglądarkę. Pełni ona funkcje środowiska uruchomieniowego dla aplikacji webowych, jak i menadżera okien (zakładek). Dodajmy do tego uruchomienie systemu w trybie tylko do odczytu i mamy coś dziwnego…
Mianowicie kiedy mamy dostęp do sieci, to wszytko działa ładnie i pięknie. Picassa przechowuje nasze zdjęcia, Gmail maile, a Google Docs dokumenty + masa możliwości wynikających z faktu dostępu do internetu.
Ale co się dzieje, gdy na skutek awarii, oszczędności czy po prostu braku sygnału będziemy offline? Na przykład podczas długiej podróży pociągiem? Żadnego filmu nie obejrzymy, nie poczytamy sobie ebooka oraz nie posłuchamy muzyki, bo nie będziemy mieli lokalnego dostępu do ani jednego pliku! Ot i cały problem.
No ale w przyszłości internet będzie takim samym dobrem jak woda czy prąd, więc teraz skupmy się na wygodzie obsługi. System jest bardzo prosty pod tym względem – jedno spojrzenie i już wiem, co gdzie jest i jak działa. Problem przyszedł, gdy postanowiłem „komputer” wyłączyć… Jak? Nie ma żadnego przycisku w systemie który odpowiada za tą funkcje. Oczywiście na netbooku będzie fizyczny przycisk wyłączania, lecz ja musiałem niestety wyłączyć go z buta że tak powiem… Przełączanie okien, menadżer – wszystko działa prawie idealnie, panowie od Googla zrobili duży postęp. Przydałaby się jakaś przeglądarka plików, bo czasem naprawdę będzie trzeba coś zapisać na dysk twardy. Pierwsze wrażenie oczywiście pozytywne.
Poniżej przedstawiam parę zrzutów ekranu z tego ciekawego systemu.
wrz 17th
Najpierw były Dzieci Neostrady. Każdy ich zna, wiele osób padło ich ofiarą, szczególnie moderatorzy i administratorzy for internetowych. Brak znajomości netykiety pokutował w skutkach – bany leciały, 12 latkowie nie odpuszczali. Teraz mamy rok 2009, społeczeństwo „informatyczne”. Niby jest ok.
Jakiś czas temu Nasza Klasa wprowadziła nową usługę pod nazwą Śledzik. Taki Twitter, czy komunikator. Już pomijam użyteczność tej funkcjonalności czy ogólnie opinii. Bądź co bądź użytkownicy nie byli zbyt szczęśliwi. Ich pierwsza reakcja to typowe WTF. Potem znalazł się jakiś anonimowy krzykacz rozpowszechniając łańcuszek który z powodu „inteligencji” użytkowników nk oraz nieznajomości netykiety rozpowszechnił się na część znajomych. Dzięki temu „wspaniałemu” ruchowi społecznemu śledzik ogólnie się zasyfił i nie da się z niego korzystać… Jak można wierzyć że wpis może wyłączyć jakąś usługę… Jak można paść ofiarą osób które wyłudzają sms-y na sumę 20 zł na gg. Jak można nie instalować antywirusa?
Podsumowując to największy epiczny fail polskiej informatyzacji.
sie 28th
Postanowiłem sprawdzić jak spisuje się finalna wersja Windows 7. Jako że jescze nie używałem 64 bitowego Windowsa, postanowiłem przetestować jak takie środowisko się zachowuje.
System został zainstalowany, więc szukam wersji x64 moich ulubionych programów. Firefox – nie ma, kodeki – nie ma (dostępne wersje testowe), Gry – nie ma, MS Office x64 – nie mam, sterowniki do karty TV – nie ma. Ogólnie programów jak na lekarstwo, w dodatku nie mogę sobie TV obejrzeć. Częściowe rozwiązanie tych wszystkich problemów zajęło mi 2 godziny, dalej grzebać mi się nie chce. Walka z kodekami jest straszna, trzeba używać jakiś enablerów i innych teog typu narzędzi, a i tak nie ma pewności czy napisy będą działać w WMP 12. Oczywiście mogę sobie zainstalować VLC, ale po co, skoro najnowszy WMP jest fenomenalny.
Mam nadzieje że producenci kodeków nie zaśpią na premierę Windowsa 7, i dopracują je w taki sposób, aby nie było problemów z ich instalacja pod Windows 7.
Aplikacje które pomogły mi częściowo rozwiązać ten problem znajdziecie na tej stronie Natomiast osoby które posiadają system 64bitowy, powinni zainstalować jeszcze to.
lip 7th
Wczoraj na napisałem że mam zamiar przejść w 24h z Orange do Play. Na razie czekam i pewnie potrwa to trochę czasu. Pomarańczowi dalej lecą w kulki i nie rozpatrzyli jeszcze mojego wniosku. Bądź co bądź jestem i tak w lepszej sytuacji niż ekipa z telepolis, bo przewidziałem całą sytuacje i zarejestrowałem mój numer odpowiednio wcześniej
„Szczęśliwi” posiadacze numerów zarejestrowanych w Erze i Playu faktycznie przenoszą numery w 24h, lecz cała reszta jest niestety pozbawiona tej możliwości. Pytanie brzmi czemu Centertel i Polkomtel są nieprzygotowani do zmiany prawa? Przecież mieli na to sporo czasu…
lip 6th
W związku z nowelizacją prawa telekomunikacyjnego, wprowadzającego na operatorów obowiązek darmowego przenoszenia numerów w jeden dzień roboczy, postanowiłem przenieść swój numer z Orange POP do Play Fresh.
Dziś o w okolicach godziny 18 postanowiłem sprawdzić jak sprawnie wszystko działa. Pierwszą gafę zaliczył Play – w salonie w Galerii Przymorze zostałem poinformowany o tym że nie działa ichni system informatyczny. Na szczęście byłem na rowerku i podjechałem do Galerii Bałtyckiej. Tam miły pan wszystko mi wyjaśnił, złożyłem 4 podpisy (w reklamie mówili jeden
) i na razie czekam.
Nie wiem ile będę czekał, bo Orange wraz z Plusem coś kombinuje i napisali podanie do UKE o zawieszenie tej możliwości. Znając życie pewnie urząd im odmówi, kierując się dobrem konsumentów, ale na chwile obecną cała szybka procedura jest „wstrzymana”.
A na dole screen, który pokazuje ile jeszcze drogi musi minąć, zanim będę się cieszył z nowej, tańszej taryfy.
Najnowsze komentarze