Jan. 16, 2009
Tao programowania. Tao się nie starzeje
Czytałem to dawno temu, i czytałem to wiele razy, i podoba mi się na tyle że to umieściłem tutaj
——————————————-
T a o P r o g r a m o w a n i a
——————————————-
autor nieznany
T r a n s l a t e d B y
G e o f f r e y J a m e s
Przeklad na jezyk polski
EDWART
———————————
S p i s T r e s c i
———————————
Ksiega 1 – Milczaca Pustka
Ksiega 2 – Starozytni Mistrzowie
Ksiega 3 – Projekt
Ksiega 4 – Kodowanie
Ksiega 5 – Obsluga
Ksiega 6 – Zarzadzanie
Ksiega 7 – Korporacyjna Madrosc
Ksiega 8 – Sprzet i Oprogramowanie
Ksiega 9 – Epilog
M i l c z a c a P u s t k a
K s i e g a P i e r w s z a
———————————————————————–
Oto rzekl Mistrz Programista:
“Gdy nauczysz sie odczytywac z trapu kod bledu, bedzie to znak,
ze mozesz odejsc.”
———————————————————————–
1.1
Cos tajemniczego sie uformowalo, narodzone w milczacej pustce. Czekajac
samotnie w bezruchu, jest naraz nieruchome i zmienne. Ono jest zrodlem
wszystkich programow. Nie znam jego imienia, wiec bede je nazywal
Tao Programowania.
Jezeli Tao jest dobre, to i system operacyjny jest dobry. Jezeli system
operacyjny jest dobry, to i kompilator jest dobry. Jezeli kompilator
jest dobry to i aplikacja jest dobra. Uzytkownik jest zadowolony i na
swiecie panuje harmonia.
Zas Tao Programowania odlatuje daleko i wraca wraz z wiatrem poranka.
1.2
Tao zrodzilo kod maszynowy. Kod maszynowy zrodzil assembler.
Assembler zrodzil kompilator. Obecnie jest dziesiec tysiecy jezykow.
Kazdy jezyk ma swoja sile, jak i slabosc. Kazdy jezyk wyraza Jin i Jang
oprogramowania. Kazdy jezyk ma swoje miejsce w Tao.
Lecz nie pisz w COBOLu, jezeli tylko mozesz tego uniknac.
1.3
Na poczatku bylo Tao. Tao zrodzilo Czas i Przestrzen.
Zatem Czas i Przestrzen sa Jin i Jang programowania.
Napisał Dominik w kategoriach O programowaniu | Brak komentarzy
Dec. 5, 2008
Czyli SQL jakiego być może nie znacie.
Ale zacznę dowcipem od kolegi z pracy, który naprawdę bardzo mnie rozbawił (pewnie dlatego byłem wtedy w trakcie czytania książki o teorii relacyjnego modelu danych
)
Przychodzi SQL do baru, tam dwie tabele:
- Can I JOIN You?
A teraz do rzeczy. Czytałem swego czasu Manual MySQL. Ostatnio postanowiłem odświeżyć sobie w ramach wieczornej literatury moje podręczne notatki z owej tematyki.
I po przeczytaniu doszedłem do wniosku że jest tam kilka ciekawych, fajnych rzeczy, o których często nawet nie wiemy. Może dlatego ze są to rzeczy bardziej zaawansowane, czyli nie potrzebne Kowalskiemu.
I tak choćby bity i notacja b’:
#tworzymy tabelkę
CREATE TABLE t (b BIT(8));
#wstawiamy bity - znaczy dane ![]()
INSERT INTO t SET b = b’11111111′;
INSERT INTO t SET b = b’1010′;
INSERT INTO t SET b = b’0101′;
#a tu pobieramy sobie wyniki z konwersją między systemami
SELECT b+0, BIN(b+0), OCT(b+0), HEX(b+0) FROM t;
Dalej - może nie takie zaawansowane, bo każdy SQL’ista
powinien to znać - mianowicie User Defined Variables czyli nasze zmienne w SQL
#przykład z manual’a
SET @t1=0, @t2=0, @t3=0;
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
#no to może jeszcze raz nasze bity
SET @v1 = b’1000001′;
SET @v2 = CAST(b’1000001′ AS UNSIGNED), @v3 = b’1000001′+0;
SELECT @v1, @v2, @v3;
Operator <=> czyli null safe equal. A po co to? Jak ktoś czytał książkę C.J. Date’a, o której pisałem wcześniej - będzie wiedział
#ale może przykład wystarczy by ‘przypomnieć’ sobie o co chodzi ![]()
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0
Programiści, którzy zapomnieli o konstrukcji w linijce poniżej pewnie się teraz uśmiechną:
SELECT IF(1<2,’yes’,'no’) as wynik;
I niechaj SQL przemówi:
SELECT IF(STRCMP(’test’,'test1′),’no’,'yes’);
Przy okazji: potęga agregacji jest niekwestionowana, ale pamiętam pytanie o problem z DISTINCT + konkretne pole:
#więc:
SELECT COUNT(DISTINCT price) FROM shop;
Co jeszcze? Np. oprogramowanie GIS - mamy tu wsparcie od strony MySQL:
http://dev.mysql.com/doc/refman/5.0/en/opengis-geometry-model.html
Choć jeszcze nie używałem tego w konkretnych projektach np. www + mapy, po godzince zabawy mogę powiedzieć - fajna sprawa.
A na deser eksport tabeli do pliku CSV:
SELECT * INTO OUTFILE ‘/home/dominik/tabela.csv’
FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”‘
LINES TERMINATED BY ‘\n’
FROM shop;
Oraz coś, co naprawdę może się przydać (ahh, przypominają mi się stare czasy i praca nad pewnym katastrofalnym systemem) - tabela tymczasowa:
CREATE TEMPORARY TABLE tabela (
id int(10) unsigned NOT NULL auto_increment,
nazwisko VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO tabela SET nazwisko=”Thompson”;
INSERT INTO tabela SET nazwisko=”Torvalds”;
SELECT * FROM tabela;
Coś bardziej zaawansowanego? Optymalizacje - performance. Ale przecież to znamy, bo robimy na co dzień
Enjoy! ( and JOIN
)
Napisał Dominik w kategoriach O programowaniu | 1 komentarz
Nov. 11, 2008
Symfony 1.1 Forms, czyli nowość w Symfony, na którą warto zwrócić uwagę.
Cudo o którym mowa bazuje na nowych klasach: sfForm oraz sfWidget
Przykład:
// lib/form/ContactForm.class.php
class ContactForm extends sfForm
{
public function configure()
{
$this->setWidgets(array(
'name' => new sfWidgetFormInput(),
'email' => new sfWidgetFormInput(),
'message' => new sfWidgetFormTextarea(),
));
}
}
I… na tej podstawie budujemy nasz formularz!
$ php symfony generate:module frontend contact
Otrzymaliśmy nowy moduł: contact.
Teraz tylko akcja:
// apps/frontend/modules/contact/actions/actions.class.php
class contactActions extends sfActions
{
public function executeIndex()
{
$this->form = new ContactForm();
}
}
oraz widok:
<form action="<?php echo url_for('contact/submit') ?>" method="POST">
<table>
<?php echo $form ?>
<tr>
<td colspan="2">
<input type="submit" />
</td>
</tr>
</table>
</form>
Czyścimy cache, otwieramy contact/index. Pokaż żródło i widzimy elegancko wygenerowany kod.
DRY! Ku chwale obiektowości!
Co jeszcze ciekawego?
Dla uprzednio stworzonych pól możemy sobie zadefiniować na stałe etykiety, do tego wszystkiego - automatyczna ochrona przed atakami XSS.
Nie musimy także tracić za dużo czasu na walidację.
$this->setValidators(array(
'name' => new sfValidatorString(array('required' => false)),
'email' => new sfValidatorEmail(),
'subject' => new sfValidatorChoice(array('choices' => array_keys(self::$subjects))),
'message' => new sfValidatorString(array('min_length' => 4)),
));
Automatyczne walidatory! Bo przecież chodzi o to żeby programować jak najdokładniej ale i oczywiście jak najszybciej!
Temat jest spory, chciałem tylko zwrócić na niego uwagę.
Zapraszam do źródła:
http://www.symfony-project.org/book/forms/1_1/en/
Enjoy
Napisał Dominik w kategoriach O programowaniu | Brak komentarzy
Nov. 3, 2008
Jeśli jeszcze nie wspominałem to teraz wspomnę, że bawiłem się swojego czasu w programowanie GUI z użyciem PHP-GTK.
Mowa o rozszerzeniu PHP pozwalającym na programowanie interfejsów użytkownika w oparciu o GTK. Miałem do czynienia z tego typu rozwiązaniami, np. Perl Tk, i przyznam że PHP-GTK jest dość ciekawe.
Również programowanie idzie szybko i wymaga stosunkowo niewiele kodu.
Aby użyć tego cuda należy mieć skompilowane PHP o z obsługą rozszerzenia GTK. I żeby nie było że Linux i Linux, to zaprezentuje przykłady prosto z Windows
Skoro Windows to wersję PHP o której mowa można pobrać z internetu
Może prosty przykład:
function echoValue($spinButton) {
//dane beda widoczne w konsoli
echo $spinButton->get_value() . "\n";
}
$window = new GtkWindow();
$window->set_size_request(150, 150);$hScale = new GtkHScale(new GtkAdjustment(4, 0, 10, 1, 2));
$hScale->connect('value-changed', 'echoValue'); //przypisanie funkcji$vScale = new GtkVScale(new GtkAdjustment(4, 0, 10, 1, 2));
$vScale->connect('value-changed', 'echoValue');
$vScale->set_value_pos(GTK::POS_LEFT);$hBox = new GtkHBox();
$vBox1 = new GtkVBox();
$vBox2 = new GtkVBox();$window->add($hBox);
$hBox->pack_start($vBox1);
$hBox->pack_start($vBox2);$vBox1->pack_start(new GtkLabel('Skala pozioma'), false, false);
$vBox1->pack_start($hScale, false, false);$vBox2->pack_start(new GtkLabel('Skala pionowa'), false, false);
$vBox2->pack_start($vScale);$window->connect_object('destroy', array('Gtk', 'main_quit'));
$window->show_all();
Gtk::main();
Uruchamiamy kod w wierszu poleceń:
$> php ./kody/scroller.php i….
Toolbar zrobić jeszcze łatwiej:
$window = new GtkWindow();
Napisał Dominik w kategoriach O programowaniu | Brak komentarzy
Oct. 26, 2008
Tak to już jest - ewolucja programisty. Od Notatnika z Windows, po Vima
Ale edytory to za mało - mam już za sobą Editplus, Creamson Editor, Vim, PSPad, o ostatnio od dłuższego czasu używam jEdit, który nie powiem - bardzo mi pasuje. To znakomity edytor dla programistów.
Przychodzi jednak pora, kiedy wybiera się IDE. Programista PHP myśli pewnie zwykle o Zend Studio. Jako że u mnie PHP nie jest jedynym językiem, potrzebowałem czegoś wspierającego inne języki, głównie Java, C/C++, Ruby.
U mnie wybór padł bezwzględnie na Netbeans. Eclipse mam zainstalowane ze względu na fajną wtyczkę - pyDev, czyli wsparcie dla programowania w Python’ie. Ale już nie długo, bo czekam na pełne wsparcie języka Python w Netbeans - jest już taki projekt, więc niedługo pewnie w moim Netbeans ostro zasyczy
Netbeans jest super, mamy tu wsparcie oczywiście dla Java, oraz Mobility:
Przekładowy projekt MobileApp:
Ponadto wsparcie Ruby, C i C++ (podpięte pod narzędzia Cygwina - jeśli piszę coś w C, lub C++ to w Netbeans). Mamy też wsparcie dla UML i Versioning - genialne - wsparcie m.in dla svn, importowanie projektu z repozytorium. Super! I to standardowo, bez instalowania i przeklętych zależności znanych z Eclipse.
No i do tego wsparcie dla PHP. Na razie do ściągnięcia osobno, jako Early Access for PHP, ale już tego używam i jestem zadowolony.
O takich rzeczach jak sprawdzanie syntaktyki w czasie rzeczywistym i podpowiedzi nawet nie wspominam
To naprawdę przyśpiesza i umila pracę.
Gorąco polecam Netbeans!
Napisał Dominik w kategoriach O programowaniu, Praca | Brak komentarzy
Oct. 26, 2008
Cygwin to implementacja standardu POSIX przeznaczona dla Windows, oraz oprogramowanie dostępne zwykle w systemach Linux / Unix. Pozwala nam się cieszyć możliwościami i narzędziami tych systemów. Wszystkie są dostępne wraz z kodem źródłowym.
Jeśli programista pracuje pod Windows, powinien mieć zainstalowany Cygwin, chociaż podstawowy - przyjazny instalator Cygwina pozwala zainstalować potrzebne pakiety.
I tak w moim przypadku - np. środowisko do programowania w C oraz C++, z użyciem narzędzi GCC, G++, GDB - debugger, itd. To wszystko podpięte do Netbeans i mam znakomite środowisko programowania.
Napisał Dominik w kategoriach O programowaniu, Praca, Systemy operacyjne | Brak komentarzy
Oct. 25, 2008
Tak jak napisałem na podstronie O mnie - programowanie to moja pasja i hobby. Jako że nie należę do tych programistów, którzy w zaciszu firmy klepią swój kod monotonnie i jest im tam ‘dobrze’.
Ja czuję potrzebę rozwoju. Dla przykładu spójrzmy na język PHP, masa programistów, masa ofert pracy, i to naprawdę za duże stawki - po kilka tysięcy PLN. Warto spojrzeć na to się dzieje na rynku teraz. Ale warto także spojrzeć nieco w przyszłość.
To co da się zauważyć o programistów zajmujących się tym to znudzenie językiem PHP. W pewnym momencie zaczyna się wymiotować tym językiem. Ja też zajmuję się m.in. PHP i też tego doświadczam. Wszystko jest fajnie, ale po prostu czegoś tu brakuje, robi się ciągle podobne rzeczy, i bądźmy szczerzy - pole do popisu dla programisty w tym języku jest ograniczone. Oczywiście póki co nie rozstanę się z tym językiem, ale myślę o przyszłości i inwestuję już w naukę innych języków. Praktyka pokazuje jak dobrze radzą sobie programiści PHP z takimi językami jak Python, Java, Ruby. Obok pracy - z PHP, programuję także w C i Perl, ale już bardziej hobbystycznie i na mniejszą skalę. Mam nadzieję że nowe języki pomogą mi jeszcze bardziej zintegrować hobby z pracą.
U mnie na pierwszym miejscu Python. Każdy ma swoje zdanie, moje jest takie że język jest genialny, a kod jak na ten typ języka jest bardzo szybki. Język ma już swoją renomę, używa go nawet Google i NASA, instytucje naukowe i coraz większa liczba fanów - programistów. O takich możliwościach jak wxPython, Mobile Python czy też framework aplikacji webowych - Django, nawet nie wspominam.
Punkt drugi - Ruby. Kolejny genialny język, również o bardzo ciekawych możliwościach. Tu głównie kierunek frameworka Rails mnie interesuje.
Idąc jeszcze dalej - Java. Miejsca tego języka w czołówce popularnych języków nikt chbya nie zakwestionuje. Jest już na swój sposób legendarny, i ma bardzo szeroki wachlarz zastosowań. Dla mnie najbardziej interesujące są tu zagadnienia programowania urządzeń mobilnych - J2ME, a także J2EE oraz kierunek Google - GWTi nowy system Android.
Jak widać jest nad czym posiedzieć
I to na dłuższy okres czasu, bo błyskawicznie się tego i tak nie opanuje. Ale za jakiś czas będę mógł się pochawalić biegłą znajomością ww języków, oraz projektami.
Napisał Dominik w kategoriach O programowaniu, Praca, Życie | Brak komentarzy
Oct. 20, 2008
Tak, tak niestety to czasem wygląda. Od jakiegoś czasu nie narzekam na coś takiego, jestem zadowolony z pracy.
Niestety filmik pokazuje trochę prawdy o tym jak czasem pracują programiści. A jest to w gruncie rzeczy wina tych (epitety zachowam dla siebie), którzy są ‘nad nimi’, czyli kiepskiego zarządzania. Cóż, u mnie kiepskiego zarządzania nie ma i nie będzie na pewno ![]()



