Ksiądz Twardowski napisał kiedyś w swoim wierszu: "spieszmy się kochać ludzi, tak szybko odchodzą". Z czasem stało się to zdanie bardzo często używane.
Ostatnio jednak miałam okazję się przekonać, że kochać ludzi to za mało. Brakuje jeszcze, żeby tę miłość okazywać, tak żeby wiedzieli że są dla nas kimś ważnym. Bo potem można tego żałować bardziej, dużo bardziej niż jakby tej osoby się nie kochało wcale. Sprafrazowałabym słowa księdza Twardowskiego: "spieszmy się okazywać ludziom naszą miłość, tak szybko odchodzą".
czwartek, 4 czerwca 2009
czwartek, 28 maja 2009
Serwer
Sesja zbliża się wielkimi krokami, trza zabrać się do pracy :) Oczywiście to co najnudniejsze automatycznie spada na sam koniec listy rzeczy do zrobienia i tym sposobem zabrałem się za pisanie zadanka z sieci. Zaopatrzywszy się w odpowiednie zaplecze teoretyczne, włączyłem muzykę...

... i przepisałem kawałek kodu z książki ;)
Jest to szkielet, który jest jeszcze mniej funkcjonalny, niż jego odpowiednik w książce Tanenbauma, ale delikatnie ukształtowany pod kształt tego, co chcę osiągnąć - przynajmniej tak myślę. No i przesadnie wręcz obkomentowany.
EDIT: Wiele więcej problemów niż z samym powyższym kodem, miałem z jego czytelnym zamieszczeniem - dlatego zresztą notka jest tak krótka i skąpa. Posłużyłem się w końcu tym sposobem , ale nie jest do końca skuteczny - między liniami kodu powstały trzyakapitowe przerwy... Wynik wybitnie nie jest zadowalający.
EDIT2: Znalazłem wreszcie świetne narzędzie: www.blogtrog.com. Wada? Nie obsługuje kodu w C/C++... trudno. Grunt, że jest czytelnie i nie trzeba nic ręcznie poprawiać. Victory!
... i przepisałem kawałek kodu z książki ;)
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
// printfy
#include <stdlib.h>
// exit()
#include <string.h>
//zawiera definicje memset()
#define SERVER_PORT 4095
#define BUF_SIZE 4096
#define QUEUE_SIZE 10
fatal(char *x)
{
printf("%s", x);
exit(1);
}
int main(int argc, char **argv)
{
char bufor[BUF_SIZE];
int gniazdo, one = 1, i;
struct hostnet *ServerInfo;
struct sockaddr_in NrIP;
memset(&NrIP, 0, sizeof(NrIP)); // wypełniam zerami NrIP
NrIP.sin_family = AF_INET; // dziedzina adresów: IPv4
NrIP.sin_addr.s_addr = htonl(INADDR_ANY);
/* może korzystać z każdego numeru IP jaki znajdzie dla danego
komputera. W praktyce oznacza to, że gdy są dwa interfejsy
(np. sieć lokalna z kabelka i wifi(internet) to obsługiwane
będą połączenia od obu tych interfejsów */
NrIP.sin_port = htons(SERVER_PORT); //nr portu
gniazdo = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
/* SOCK_STREAM - dane przesyłane strumieniowo
IPPRO_TCP - z wykorzystaniem protokolu TCP */
if (gniazdo < 0)
fatal("Blad utworzenia gniazda\n");
setsockopt(gniazdo, SOL_SOCKET, SO_REUSEADDR, (char*) &one, sizeof(one));
/*SOL_SOCKET - operacja ma być wykonana na poziomie gniazda
(a nie na przez oprogramowanie IPv4 lub TCP)
SO_REUSEADDR - pozwalamy na wiele równoczesnych połączeń serwera.
Ustawiamy tą wartość (one). Ostatni parametr mówi jak
duża jest zmienna one */
//zmienna one nie jest już dalej potrzebna.
one = bind(gniazdo, (struct sockaddr *) &NrIP, sizeof(NrIP));
if (one < 0)
fatal("Blad przyporzadkowania adresu IP do gniazda\n");
// maksymalna ilość żądań połączenia
one = listen(gniazdo, QUEUE_SIZE);
if (one < 0)
fatal("Error: listen()\n");
//--------------------------------------------------------------
// gniazdo gotowe do pracy
//--------------------------------------------------------------
while (1)
{
one = accept(gniazdo, 0, 0);
/* argumenty 2 i 3 mogą określać strukturę sockaddr, która
zostałaby wypełniona danymi nt połącznia - niepotrzebne nam to. */
if (one < 0)
fatal("Error: accept()\n");
read(one, bufor, BUF_SIZE); // odczytanie nazwy przychodzącego pliku
i = -1;
if (!strcmp(bufor,"LIST")) i = 0;
if (!strcmp(bufor "GET")) i = 1;
if (!strcmp(bufor "CLOSE")) i = 2;
switch (i)
{
case 0:
printf("Odebralem LIST\n");
break;
case 1:
printf("Odebralem GET\n");
break;
case 2:
printf("Odebralem CLOSE\n");
break;
default:
printf("Zly format polecenia\n");
break;
};
close(one); // rozlaczenie
}
}
Jest to szkielet, który jest jeszcze mniej funkcjonalny, niż jego odpowiednik w książce Tanenbauma, ale delikatnie ukształtowany pod kształt tego, co chcę osiągnąć - przynajmniej tak myślę. No i przesadnie wręcz obkomentowany.
EDIT: Wiele więcej problemów niż z samym powyższym kodem, miałem z jego czytelnym zamieszczeniem - dlatego zresztą notka jest tak krótka i skąpa. Posłużyłem się w końcu tym sposobem , ale nie jest do końca skuteczny - między liniami kodu powstały trzyakapitowe przerwy... Wynik wybitnie nie jest zadowalający.
EDIT2: Znalazłem wreszcie świetne narzędzie: www.blogtrog.com. Wada? Nie obsługuje kodu w C/C++... trudno. Grunt, że jest czytelnie i nie trzeba nic ręcznie poprawiać. Victory!
środa, 27 maja 2009
Decyzje
Trzeba je podejmować szybko. Odkładanie momentu podjęcia ostatecznej decyzji, to tylko niepotrzebne zwlekanie w czasie. Tak naprawdę już w pierwszym momencie wiemy, jaki wybór jest bliższy naszemu sercu - chyba, że z góry wiadomo, że stanie się coś, co mocno wpłynie na wybór, tylko nie wiadomo jeszcze jak.
Zwlekanie z decyzją, to tylko podtrzymywanie niepewności. A brak informacji, na których można się oprzeć, to bardzo nieprzyjemna sprawa. Skoro nie ma informacji, tworzy się założenia, a te z kolei łączą się silnie z niedokładnościami. I tak na nietrafionych założeniach tworzy się osądy, a osądy tworzą światopogląd. A ludzie ze skrzywionym światopoglądem podejmują decyzje krzywdzące innych (niezależnie od tego czy podejmą je szybko czy nie ;) ). Powstają nieporozumienia, problemy i takie tam.
Oczywiście nie znaczy to, że decydować się trzeba szybko, zawsze w ułamku sekundy. Czas do namysłu to atut, którym nie można pogardzić. Piętnuję tylko sam akt zwlekania z decyzją. Zastanawiać się dłużej niż dzień to zazwyczaj już strata czasu. Sprawia to tylko, że po podjęciu decyzji częściej i dłużej będziemy rozpamiętywać inne opcje.
Długi czas do namysłu sprawia też iluzję wolności wyboru. Często może się okazać, że zwlekając na ostatnią chwilę, gdy już wreszcie podjęliśmy decyzję, okaże się ona niemożliwa - jest już po prostu za późno.
Podsumowując: najgorsze jest niezdecydowanie.
Zwlekanie z decyzją, to tylko podtrzymywanie niepewności. A brak informacji, na których można się oprzeć, to bardzo nieprzyjemna sprawa. Skoro nie ma informacji, tworzy się założenia, a te z kolei łączą się silnie z niedokładnościami. I tak na nietrafionych założeniach tworzy się osądy, a osądy tworzą światopogląd. A ludzie ze skrzywionym światopoglądem podejmują decyzje krzywdzące innych (niezależnie od tego czy podejmą je szybko czy nie ;) ). Powstają nieporozumienia, problemy i takie tam.
Oczywiście nie znaczy to, że decydować się trzeba szybko, zawsze w ułamku sekundy. Czas do namysłu to atut, którym nie można pogardzić. Piętnuję tylko sam akt zwlekania z decyzją. Zastanawiać się dłużej niż dzień to zazwyczaj już strata czasu. Sprawia to tylko, że po podjęciu decyzji częściej i dłużej będziemy rozpamiętywać inne opcje.
Długi czas do namysłu sprawia też iluzję wolności wyboru. Często może się okazać, że zwlekając na ostatnią chwilę, gdy już wreszcie podjęliśmy decyzję, okaże się ona niemożliwa - jest już po prostu za późno.
Podsumowując: najgorsze jest niezdecydowanie.
Subskrybuj:
Posty (Atom)