Archiwum kategorii 'Artykuły'

bc – kalkulator dla konsolowców cz. I

BC to rozbudowany, uniksowy kalkulator dowolnej precyzji z lekko programistycznym podejściem do sprawy. Narzędzie to z pewnością przypadnie do gustu ludziom nie lubiącym “klikanych” kalkulatorów, a także miłośnikom pracy w konsoli czy programistą…

Początek pracy z kalkulatorem

(Kalkulator powinien być zainstalowany domyślnie w systemie, jeśli było by inaczej należy przeprowadzić standardową dla Twojej dystrybucji procedurę instalacji aplikacji…)

Praca w bc może odbywać się w 2 trybach:

  • interaktywnym – pozwalającym na wpisywanie na bieżąco wyrażeń kalkulatora
  • trybie przetwarzania zapisanego skryptu

Pracę w trybie interaktywnym rozpoczynamy wpisując w oknie terminala polecenie bc, w 2 z trybów podając po bc nazwę pliku/ów z skryptem/ami do wykonania. Chcąc uniknąć wypisywania powitania programu możemy dorzucić opcję -q. Innym niewątpliwie interesującym parametrem z którym można uruchomić program jest -l które definiuje parę funkcji matematycznych “na start”. Pracę z programem kończymy wpisują quit.

Wyrażenia

Wyrażenia podaje się w postaci znanej z lekcji matematyki, z uwagą że zamiast przecinka stosujemy kropkę przy podawaniu liczb niecałkowitych. Operatory których możemy używać w działaniach (wyrażeniach):

  • +, -, *, / – po kolei: dodawanie, odejmowanie, mnożenie, dzielenie – z tym ostatnim trzeba uważać gdyż domyślną precyzją po przecinku jest 0. Należy zmienić wartość zmiennej scale ew. uruchomić program z parametrem -l.
  • % – reszta z dzielenia dwóch wyrażeń np. 5 % 2 = 1, znów uwaga na scale
  • ^ – podnieś x do potęgi y

Działania reprezentowania przez operatory wykonywane są w naturalnej kolejności matematycznej. Do ich zmiany, również jak w matematyce, służą nawiasy okrągłe (zagnieżdżone w sobie dowolną liczbę razy). Kilka przykładowych wyrażeń:  2 + 2, 3^6, (2 * 3)^2 / 2. Wynik wyrażenia jest wypisywany w następnej linii, pod wyrażeniem.

Co do wspomnianej zmiennej scale to w tej części artykułu napisze jedynie że jest to coś (dla nie wtajemniczonych w programowanie), co jest odpowiedzialne za precyzję obliczeń po przecinku. Standardowo zmienna ustawiona jest na wartość 0 co powoduje że wartość wyrażeń jest obcinana do części całkowitej, zmienić możemy to przypisując jej inną wartość poprzez np. wyrażenie o postaci: scale = 2; ew uruchamiając z barametrem -l. (Wartość ustawiana jest na 20).

Istnieją również pewne “wyrażenia specjalne”, będące w rzeczywistości funkcjami  standardowymi. Używa się ich za pomocą schematu nazwa(argument). Argumentem jest różny w zależności funkcji. Oczywiście nic nie stoi na przeszkodzie aby funkcje te łączyć z operacjami wymienionymi wyżej. Poniżej kilka wybranych funkcji:

  • sqrt(wyrażenie) – funkcja zwraca wartość pierwistka z wyrażenia np. sqrt(16) (zwróci 4…)
  • scale(wyrażenie) - funkcja zwraca liczbę cyfr po przecinku wyrażenia podanego jako argument np. scale(0.02) wypisze 2

Poniższe funckje zdefiniowane są jedynie w przypadku uruchomienia programu z dodatkowym parametrem -l:

  • s(wyrażenie) – funkcja zwraca sinus z konta o mierze równej wartość wyrażenia, miara jest liczona w radianach. Analogicznie do niej działają funkcję c, i a, zwracające cosinus i arcus tangens (w radianach) z wyrażenia.
  • l(wyrażenie) logarytm naturalny z wyrażenia
  • e(wyrażenie) - liczba e do potęgi wyrażenie

Oczywiście to co tu pokazałem to tylko kropla możliwośći bc. Więcej, między innymi o używaniu i definiowaniu zmiennych oraz funkcji, w kolejnej części ;)

c.d.n…

Rozmieszczanie widgetów za pomocą klasy Gtk::Table

Gtk::Table jest klasą służącą upakowaniu większej ilości widgetów w “regularny wzór” a’la tabela, mającą zastosowanie w głównej mierze przy projektowaniu wszelkiego rodzaju formularzy. Postaram się krótko przedstawić filozofie upakowywania widgetów za pomocą tego kontenera oraz samą klasę.

Konstruktor

Table (guint n_rows=1, guint n_columns=1, bool homogeneous=false)

Konstruktor domyślnie tworzy kontener o pojemności identycznej jak Gtk::Bin, a nie to jest zadaniem tego kontenera. Pierwsze 2 argumenty to liczba wierszy oraz kolumn tabeli. Zmianę rozmiaru tabeli umożliwia metoda resize.

3 argument decyduje czy przestrzeń tabeli zostanie równo podzielona na wszystkie komórki. Późniejszej zmiany tej właściwości, podobnie jak w przypadku innych kontenerów, możemy dokonać za pomocą metody set_homogeneous.

Rozmieszczenie widgetów w kontenerze

Widgety rozmieszczamy za pomocą metody attach:

attach (Widget& child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach, AttachOptions xoptions=FILL|EXPAND, AttachOptions yoptions=FILL|EXPAND, guint xpadding=0, guint ypadding=0)

Pierwszym argument to naturalnie referencja do widgetu który chcemy dodać do tabeli. Kolejne 4 argumenty podzielone w pary określają prostokątny obszar będący miejscem przeznaczonym dla dodawanego widgetu.

Pozycja lewego, górnego rogu obszaru to para (left_attach, top_attach), a współrzędne dolnego, prawego rogu określane są przez argumenty (right_attach, bottom_attach). Przy czym należy zwrócić uwagę, szczególnie początkującym programistą, że współrzędne lewego górnego rogu tabeli to (0, 0) a nie (1, 1). Kilka przykładów pokazujących zależność między wartościami 4 omawianych argumentów, a pozyjcą i rozmiarem dodawanego widgetu w tabeli (2, 2):

Kolejno: attach(widget, 0, 1, 0, 1), attach(widget, 0, 1, 1, 2), attach(widget, 0, 2, 1, 2), attach(widget, 0, 2, 0, 2)

Kolejne 2 argumenty to flagi pozwalające decydować o dodatkowych opcjach rozmieszczenia takich jak rozszerzanie się widgetu wraz z rozszerzaniem się okna czy rozszerzenie kosztem wewnętrznego marginesu (padding). Po dokładniejsze informacje odsyłam do dokumentacji gtkmm.

Pozostałe argumenty określają wartość, wyrażoną w pikselach, wewnętrznego marginesu obszaru zajmowanego przez widget.

Pozostałe opcje

Ponad wyżej wymienionymi parametrami rozmieszczenia możemy również decydować o odległościach między pojedynczymi wierszami czy kolumnami. Pozwalają nam na to metody:

  • set_spacings – margines między komórkami dla całej tabeli
  • set_row_spacings – margines między wierszami tabeli
  • set_col_spacings – margines między kolumnami tabeli
  • set_row_spacing – margines dla wiersza row o wielości spacing
  • set_col_spacing – podobnie jak wyżej tylko odnosi się do kolumny

Linki

Tworzenie własnych motywów iGoogle…

iGoogle to nic innego jak możliwość personalizacji strony głównej najpopularniejszej sieciowej wyszukiwarki.

Usługa miała swoją premierę 20 maja 2005. Do niedawna możliwości personalizacji sprowadzały się do tylko wyboru i rozmieszczenia gadżetów ( które swoją drogą da się również samodzielnie tworzyć) oraz wyboru jednego z kilku, przygotowanych przez Google, motywów graficznych. Do pełni możliwości personalizacyjnych brakowało API, pozwalającego nadać swojej stronie iGoogle oryginalny wygląd…

Czytaj dalej ‘Tworzenie własnych motywów iGoogle…’

Historia pewnej perełki, z biblioteki szkolej…

Pewnego pięknego dnia, siedząc na zastępstwie w bibliotece, bo tam a nie indziej mnie, z klasą umieścili, pogrążony we własnych myślach i zagmatwany w pewien programistyczny, mało istotny szczegół z pogranicza Asemblera i Pascala, spytałem panią bibliotekarkę o literaturę dotyczącą właśnie tego drugiego. Co prawda nie wierzyłem żeby w szkolnej bibliotece było cokolwiek o programowaniu, a już na pewno dotyczącego tego szczególiku, ale dostałem w swoje ręce coś ciekawego…

Czytaj dalej ‘Historia pewnej perełki, z biblioteki szkolej…’