Po-słowie na każdy temat

czyli programowanie i nie tylko

Framework Yii – przechowywanie stałych PHP

yiiProgramowanie w PHP bez ustrukturyzowania aplikacji wymagało niegdyś sporo wysiłku. Teraz część zadań wykonują za nas frameworki. Oprócz wbudowanego MVC (alternatywnie MVP lub pochodnych) otrzymujemy wraz z szablonem szereg klas pomocniczych, nierzadko mnóstwo komponentów, wsparcie techniczne na forach publicznych powiązanych ze stroną domową frameworku, a także mnóstwo wtyczek funkcjonalnych. To wszem i wobec wiadomo. Yii posiada bardzo rozbudowaną dokumentację (również w języku polskim), dlatego nie będę się rozwodzić o tworzeniu aplikacji na podstawie szablonu. Dzisiaj rozwiążemy problem zmiennych/stałych globalnych wewnątrz aplikacji Yii.  — Czytaj dalej…

„Mroczny” Eclipse

eclipse

Trochę odpoczęliście ode mnie. Zatem czas coś napisać i zaciekawić niektórych czytelników. Dzisiaj artykuł w całości poświęcony narzędziu Eclipse, bardzo popularnemu programowi wśród programistów Javy, ale też … PHP. Nie dziwcie się – sam pracuję z sukcesem przy systemach PHP na platformie Eclipse. Na razie w wersji Juno, ale niedługo przesiadam się na Keplera.

Do rzeczy. Pewnego dnia spojrzałem na Eclipse’a z daleka i pomyślałem: „prymitywnie wygląda, razi jaskrawością, męczy oczy”. Skoro tak to trzeba było znaleźć rozwiązanie. Głównie zależało mi na oczach. Gdy programuje się często „do poduszki” to w ciemności biel 80% ekranu, jaką serwował Eclipse podczas użytkowania źle wpływała na organizm. I tak powstała nić przyczynowo-skutkowa, która doprowadziła do rozwiązania jakim jest zmiana tematu i kolorów edytora. Świetna sprawa, tym bardziej, że wspierana natywnie przez aplikację.  Czytaj dalej…

HTML / CSS – checkbox i radiobutton – dobra praktyka

Technologia się rozwija nieustannie. Aplikacje internetowe są ulepszane nieustannie. Czasy statycznych stron zniknęły bezpowrotnie. Wykorzystanie Javascriptu, nowinek HTML5 CSS3 to standard. Jak przeżyć w tym świecie? Pytanie z nutką ironii, bowiem teraz aplikacje przykuwają bardzo wzrok obserwatora i o tym dzisiaj parę słów.

Tworząc własną witrynę możemy wybrać jedną z 3 dróg: wykorzystać CMS, zamówić projekt graficzny lub samemu pomęczyć się w budowaniu od podstaw. O ile pierwsza droga (w przypadku darmowych CMSów) nie zamęczy naszego budżetu, o tyle druga już z dużym prawdopodobieństwem będzie to niosła za sobą. Ostatnia opcja dotyczy twórców z powołania, obeznanych w temacie i stawiających sobie wyzwania … których nie goni czas 🙂 W tym artykule trochę o nich, a więc może i o Tobie?!

Standardowe kontrolki formularzy są nudne. Nie da się ukryć. Oklepana grafika, więc oka nie zachwyca. Jednak możemy to zmienić!  Czytaj dalej…

GIT – cherry-pick, czyli jak wydłubać pesteczkę

Jest GIT? Musi być! Na początek kilka dosłownie słów na temat tego cudeńka. GIT jest rozproszonym systemem kontroli wersji (DVCS – Distributed Version Control System). Git przechowuje i traktuje informacje kompletnie inaczej niż te pozostałe systemy, mimo że interfejs użytkownika jest dość zbliżony. Rozumienie tych różnic powinno pomóc Ci w unikaniu błędów przy korzystaniu z Git. Podstawową różnicą pomiędzy Git a każdym innym systemem VCS (włączając w to Subversion) jest podejście Git do przechowywanych danych. Większość pozostałych systemów przechowuje informacje jako listę zmian na plikach. Systemy te (CVS, Subversion, Perforce, Bazaar i inne) traktują przechowywane informacje jako zbiór plików i zmian dokonanych na każdym z nich w okresie czasu. Git podchodzi do przechowywania danych w odmienny sposób. Traktuje on dane podobnie jak zestaw migawek (ang. snapshots) małego systemu plików. Za każdym razem jak tworzysz commit lub zapisujesz stan projektu, Git tworzy obraz przedstawiający to jak wyglądają wszystkie pliki w danym momencie i przechowuje referencję do tej migawki. W celu uzyskania dobrej wydajności, jeśli dany plik nie został zmieniony, Git nie zapisuje ponownie tego pliku, a tylko referencję do jego poprzedniej, identycznej wersji, która jest już zapisana.  Czytaj dalej…

Apache Tomcat – pamięć JVM

Czas na problem, z którym musi zmierzyć się każdy programista, który często pracuje na kontenerze Apache Tomcat (tutaj dotyczy wersji 6 i 7). Mowa mianowicie o błędzie  java.lang.OutOfMemoryError: PermGen space. Pojawia się on zazwyczaj, gdy w kontenerze mamy uruchomionych kilka rozbudowanych aplikacji i wykonujemy operacje re-deployu bez restartu Tomcata. Nie jest to dobre, należy to rozwiązać, ale z uwagi na złożoność problemu i często niezrozumiałość dla początkujących programistów, problem jest bagatelizowany. Owszem jest nie jest krytyczne rozwiązanie jego (występuje wyłącznie na serwerze deweloperskim) wystarcza twardy restart kontenera aplikacyjnego i „po kłopocie”. Kiedyś przyjdzie jednak zmierzyć się z rozwiązaniem problemu i zaznajomieniem się z terminami pamięci JVM (Java Virtual Machine). Czytaj dalej…

GWT – SerializationException

Cóż za udręka. Błąd nie do rozwiązania. Czyż tak nie reagujemy, gdy pojawia się „dziwny” nieprzewidziany błąd? Zdecydowanie. Najgorzej, gdy wujek Google także nic nie wie na temat błędu.

Korzystając z frameworku GWT, w wersji klient-serwer, konieczne jest operacja serializacji/deserializacji. Błąd jest z tym związany, ale o co w nim chodzi?  Czytaj dalej…

Same Origin Policy – krótka wzmianka

Kilka słów o Same Origin Policy, czyli artykuł powiązany z AJP1.3 Connector. Czy i jak można wykorzystać ww. konektor? Jednym z zastosowań i udogodnień z tym związanych jest możliwość bezproblemowego manipulowania ramkami w strukturze strony internetowej.

Zasada Same Origin Policy dotyczy właśnie manipulowania strukturą innego dokumentu w ramach obecnego dokumentu (o określonym adresie url). Gdy ramkę ze stroną generowaną przez Tomcata zagnieździmy w dokumencie HTML serwera Apache HTTP to już się domyślamy, że wszelka manipulacja (węzłami, funkcjami Javascript itp.) zakończy się niepowodzeniem z powodu tego chociażby, że główny dokument działać będzie domyślnie na porcie 80, a Tomcat np. 8080. Rozbieżność portu ogranicza nasze działania. O tym już wiecie, czas dowiedzieć się więcej na temat SOP.  Czytaj dalej…

SQL – liczby niecałkowite

Kiedy chcemy zapisać liczbę zmiennoprzecinkową (np. cenę) w większości języków programowania używamy tylu FLOAT. Okazuje się, że w języku SQL nie jest to dobry pomysł. Zachęcam do lektury krótkiego rozdziału, dokumentującego konkretny antywzorzec języka SQL.

Poniższe informacje w formie zmodyfikowanej lub nie zaczerpnięte są z książki Billa Karwina „Antywzorce języka SQL”. Polecam, jako niezbędnik programisty.

Niektóre wartości liczbowe, które możemy sobie bez trudu wyobrazić, w ogóle nie mogą być reprezentowane z zastosowaniem metody skończonej precyzji. Część programistów uważa, że takie rozwiązanie jest usprawiedliwione – skoro wartości złożonych z nieskończonej liczby cyfr i tak nie da się zapisać, każda zapisywana przez nas liczba z natury ma skończoną precyzję i tak też powinna być przechowywana w formie binarnej, prawda? Niestety nie. Czytaj dalej…

GWT – ograniczenie permutacji

Kontynuujemy dzień z Google, a konkretniej z Google Web Toolkit. Tym razem problem permutacji. Każdy programista piszący aplikacje z wykorzystaniem frameworku GWT wie, a przynajmniej powinien wiedzieć, co oznaczają permutacje podczas kompilacji programu. Załóżmy, że tworzymy aplikację wielojęzyczną w GWT – powiedzmy, że 3-języczną. Kompilator wspiera 6 silników przeglądarek, więc z prostych wyliczeń wychodzi nam niepozorna liczba 18. Co ona oznacza? Jest to liczba permutacji, jakie kompilator uruchomi podczas kompilacji aplikacji … ale jednomodułowej. Jeśli w aplikacji jest kilka modułów to liczba permutacji jest zwielokrotniona zależnie od liczby modułów. To prowadzi do frustracji, w przypadku gdy DevMode (HostedMode) nie wystarcza nam w rozwijaniu, testowaniu funkcjonalności itp. Musimy skompilować aplikację, a w przypadku tylu permutacji potrafi to trwać od kilkunastu minut do kilkudziesięciu, w zależności od posiadanego sprzętu. Jak temu zaradzić?  Czytaj dalej…