Przed i po XYZ

Znakomity artykuł z „historycznej serii” Bogdana Misia o polskich komputerach. Dodać tylko mogę, że świat po drugiej stronie żelaznej kurtyny miał nieco lżejsze życie (choć też borykał się z jakością podzespołów elektronicznych). Powstający wysiłkiem wielu znakomitych naukowców (w tym von Neumanna), w Instytucie Zaawansowanych Studiów (Institute for Advanced Studies) w Princeton komputer IAS praktycznie od początku funkcjonował w „domenie publicznej” (jak powiedzielibyśmy dziś). I bardzo wiele ośrodków po prostu mogło go skopiować.

Kiedy się rozmawia o polskiej informatyce, przeciętny inteligent wymieni zapewne pierwszy polski komputer XYX (lokalizując go zresztą z reguły w czasie daleko później, często nawet w latach siedemdziesiątych – a przypomnijmy: maszynę oddano do użytku w roku 1958, w bardzo wczesnej „erze Gomułki”). Bardziej wprowadzeni w temat wspomną nazwisko Jacka Karpińskiego i jego słynny K-202; najbardziej świadomi wymienią być może nazwisko dziewiętnastowiecznego genialnego konstruktora […]

Dostęp do innego konta pocztowego z Horde

Horde posiada interesującą właściwość pozwalającą na obsługę zdalnych kont pocztowych (przeglądanie poczty, przenoszenie wiadomości między folderami). Możliwe jest również odpowiadanie na listy, ale wówczas należy skonfigurować kilka tożsamości.
Rozpocząć należy od skonfigurowania zewnętrznego konta. Najwygodniej, żeby pozwalało ono dostęp z użyciem protokołu IMAP. W tym celu klikamy w „koło zębate” (na belce po prawej stronie) i wybieramy z menu Preferencje -> Poczta. Na otwartej stronie znajdujemy pozycję Zdalne konta. Powinniśmy zobaczyć informację, że Zdalne konta nie są skonfigurowane. Klikamy Dodaj konto i od razu wybieramy Show advanced setup (w naszym przypadku standardowe postępowanie nie przynosi efektów!). W prostym formularzu wpisujemy umowną nazwę zdalnego serwera (pole Nazwa), adres serwera (w polu Serwer). W przypadku serwera pocztowego Politechniki Wrocławskiej powinien to być adres mail.pwr.wroc.pl. W polu Nazwa użytkownika wpisujemy nazwę używaną podczas logowania. Zazwyczaj w formie imie.nazwisko. Ostatnie pole pozostawiamy puste.
Po zatwierdzeniu, nie ma możliwości zmiany wpisanych parametrów. Można jedynie konto usunąć i wpisać parametry od nowa.
Po poprawnym skonfigurowaniu konta w widoku poczty, na liście folderów powinniśmy znaleźć grupę „Zdalne konta”. Po kliknięciu w plusik, lista rozwija się i widać listę skonfigurowanych zdalnych kont. Po wybraniu interesującego nas konta zostaniemy odpytani o hasło, a na liście pokażą się wszystkie foldery zewnętrznego serwera.
screenshot_2015-07-14-091902

Ćwiartka za nami?

Bogdan Miś w swoim wpisie w Studiu Opinii opisuje sieć Internet z nieco innej perspektywy: pokazuje zaangażowanie osób, które w jakiś sposób powiązane są z Polską oraz dyskutuje co uznać za datę powstania „Internetu jaki wszyscy znamy”.

[…] Dwa słowa o tej sieci ARPANET. Otóż do momentu jej stworzenia istniały już oczywiście możliwości połączenia kilku komputerów w jedną współpracującą całość, ale połączenie takie musiało zawierać jeden komputer centralny, wyróżniony. Gdyby taki centralny komputer został zaatakowany i uszkodzony – przestałaby działać cała sieć. Łatwo pojąć, że to się informatykom nie bardzo podobało, a już specjalnie nie podobało się wojskowym, którzy już wówczas rozumieli ogromne możliwości zastosowań militarnych techniki informatycznej. No i 29 października 1969 uruchomiono sieć, w której komputer wyróżniony nie występował. W razie potrzeby rolę „dowodzącego” mógł przejąć dowolny inny; oznaczało to oczywiście, że przy dużej sieci nawet zniszczenie sporego jej fragmentu nie było groźne. […]

(Na ilustracji Sir Tim Bernes-Lee.)

Za Bogdan Miś: Ćwiartka za nami?

Kilka uwag… (część 2)

Oglądając kawałek kodu starajcie się zastanawiać precyzyjnie co oznacza każdy jego fragment.

  1. Widzimy 2 Jest to stała typu int. 2. (dwójka z kropką) to stała typu double. (Jak w tym kontekście wygląda stała typu float?). Co to jest 'a' ? Jest to stała typu char. Natomiast "a" to stała typu char * („char gwiazdka”, czyli wskaźnik do tego miejsca w pamięci, w którym zapisany jest napis o długości dwu znaków składający się ze znaku 'a' i znaku o kodzie 0 ( '\0' ).
  2. Widzimy gwiazdkę (*) patrzymy w jakim kontekście ona występuje. Czy jest to kontekst typu a * b (albo 2 * b)? Jeżeli tak, gwiazdka ma charakter dwuargumentowego operatora mnożenia. gdy występuje na lewo od zmiennej (* a) wówczas jeżeli zmienna zadeklarowana jest jako wskaźnik (na przykład double * a;) to *a oznacza dostęp do zawartości pamięci wskazywanej przez wskaźnik. Gdy po lewej stronie znaku nie ma nic, a po prawej stronie jest stała albo zmienna — będzie błąd.
  3. Przypominam, że identycznie rozróżnia się jednoargumentowy znak - (zmiana znaku, na przykład: -3) od dwuargumentowego operatora - (odejmowanie, na przykład a - b).
  4. O stałych (i zmiennych) typu znakowego pamiętamy, że mogą być traktowane jako stałe (i zmienne) typu całkowitego. W związku z tym wszystkie operacje arytmetyczne są dozwolone. Zatem 'a'/200 interpretujemy tak: Iloraz. Dzielna to stała znakowa (o nieznanej z pamięci wartości całkowitej mieszczącej się pomiędzy 0 a 127). Dzielnik – stała całkowita o wartości 200. Ponieważ po obu stronach znaku dzielenia są stałe zbliżonego typu (char jest równoważne int) dzielenie ma charakter całkowity: coś mniejsze od 200 dzielone przez dwieście, daje w wyniku 0. W żadnym wypadku nie jest todzielenie litery a n 200 części czy kawałków. Poprawny jest również zapis float a = 'a';. Zostanie dokonana tu konwersja z char do int a następnie do float.
  5. Oglądając kawałek kodu nie patrzcie na wcięcia: przecież prawie nigdy ich nie stosujecie! Patrzcie na nawiasy klamrowe i czy są sparowane. Nie jest prawdą, że po każdej instrukcji if, else czy else if musi być para nawiasów. Jak jest tam tylko jedno polecenie — nie musi.
  6. Dynamiczny przydział pamięci to przydział pamięci realizowany za pomocą funkcji malloc (calloc) i odbywa się on w trakcie uruchamiania programu, nie w czasie kompilacji, czy ładowani programu do pamięci.
  7. Wielokrotnie wspominałem o funkcji „swap” i o konieczności realizowania jej za pomocą wskaźników — w przeciwnym razie efekt zamiany nie powoduje żadnych skutków. Jedno z zadań (F) to były różne warianty tego problemu. Nie uważam (w odróżnieniu od niektórych) że przykład ten był niejasny i pogmatwany. Właściwe użycie wskaźników bądź ich brak wpływają na wynik.
  8. Poniżej jak najbardziej poprawna definicja funkcji:

    zwracam uwagę, e nie został tu określony typ argumentu ani typ funkcji. Zgodnie z konwencją języka C w tym przypadku zapis taki jest równoważny int f(int x). W szczególności można zatem napisać  main (){}