luq techblog

o tworzeniu słów kilka…

Dlaczego potrzebujesz swojego mistrza Jedi? 6 marca 2012

Filed under: PHP — Łukasz @ 13:15

Jedi

Tak jak każdy Padawan i świecie Gwiezdnych Wojen, tak i programista potrzebuje swojego Yody na swojej drodze do zdobycia mistrza Jedi.

 

Wydaje mi się, że hierarchia jak i systemu zdobywania wiedzy przestawiony w Gwiezdnych Wojnach idealnie pasuje do programistów. Czasami przeglądając oferty pracy znajduje takie kwiatki jak:

 

Senior programista

Wymagania:
* przynajmniej 6-miesięczne doświadczenie w pracy nad komercyjnym projektem

 

Wtedy naprawdę nie wiem czy płakać czy się śmiać… Jeśli ktoś daje tytuł Senior programisty osobie która ma zaledwie 6 miesięczne doświadczenie to jest to co najmniej niepoważne. 6 mc to bardzo mało czasu żeby mieć doświadczenia na takim poziome aby potrafić rozwiązać każdy napotkany problem, bo chyba takie wymagania stawiamy seniorowi, prawda?

 

Sam czas pracy na stanowisku programisty jest całkiem niezłym wyznacznikiem tego na ile dana osoba jest dobra. Co jakiś czas spotykamy się z problemami które są nam nieodzowne i dzięki temu zdobywamy wiedzę, oraz doświadczenie, które jest bezcenne. Głównie nie chodzi nawet o znajomość języka/technologii. Podam przykład z własnego życia, problem któremu nie podołałem a problem rozwiązał jakiś nieznany mi Yoda :)

 
(more…)

Reklamy
 

PHP i define() 5 stycznia 2011

Filed under: PHP — Łukasz @ 23:46
Tags: ,

To będzie bardzo krótki wpis, do których raczej nie przyzwyczaiłem ;)
Na początek zagadka, co spowoduje podany kod:

 

 
  echo 100;
  define('100', 'stala 100');
  echo 100;

 

Wywali błąd? Nadpisze wartość liczby?
Otóż nie. Jeśli nastąpiłoby nadpisanie wartości integera były to spory idiotyzm ze strony języka. Jednak co ciekawe nie wywali też błędu i stała o nazwie ‚100’ powstanie, czego dowodem jest:

 

  print_r(get_defined_constants());
  /*
    zwróci:

    (...)
    [100] => stala 100
  */

 

Jednak nijak nie dostaniemy się do podanej stałej poprzez samą jej nazwę, jedynym sposobem jest użycie funkcji:

 

 
  echo constant('100');

 

Dla porównania Javascript nie pozwala na takie rzeczy:

 

 
const 100 = 'stala 100'; // SyntaxError: missing variable name

 

Na koniec dodam tylko, że pomysł na wpis zrodził się, jak już niejednokrotnie było, przez forum.php.pl. Niestety w ten sposób zmiany VAT-u w swojej aplikacji nie dokonamy :D

 

CSS idealny cross-browser 4 czerwca 2010

Filed under: CSS,JS,PHP,Web — Łukasz @ 23:06
Tags: , , ,

Jako nie-frontendowiec zawsze przeraża mnie pisanie styli cross-browser, nie znam na tyle co jaka przeglądarka interpretuje, co gdzie nie działa i jakim sprytnym sposobem to rozwiązać, żeby na reszcie przeglądarek się nie posypało. Idealnym wyjściem byłoby chyba pisanie css`a dla każdej przeglądarki z osobna, no może nie tak całkiem tak dla każdej z osobna…

 
(more…)

 

Ukrywanie plików dla innych serwerów… 7 Maj 2010

Filed under: Ajax,JS,PHP,Security,Web — Łukasz @ 09:31
Tags: ,

Wczoraj, na forum.php.pl pojawiło się pytanie dotyczące tego jak ukryć dane z pliku *.js, tak żeby user nie mógł ich podejrzeć. Oczywiście odpowiedzią na te pytanie, jest krótkie „nie da się”, ale można zrobić kilka rzeczy aby utrudnić podejrzenie pliku czy uniemożliwić użycie go na innym serwerze, w sposób:

 

<script type="text/javascript" src="http://www.example.com/file.js"></script>

 

O tym właśnie jest ten wpis.

 

(more…)

 

CaptchaBreak ver 0.1.1

Filed under: PHP,Security — Łukasz @ 08:06
Tags: , ,

Z małym poślizgiem, bo miałem już to wczoraj zrobić, chciałem opublikować moją, lekko ulepszoną, klasę do łamania prostych captch, nowością jest możliwość ustawienia czy tekst (literki) są czarne czy białe, oraz obsługa znaków od ASCII 48 do z ASCII 122 – co daje nam cyfry, litery małe i duże + teoretycznie kilkanaście innych znaków, ale te raczej nie są stosowne w captchach.

 

Link do wpisu nt. pierwszej wersji: click

 

Download CaptchaBreak ver 0.1.1

 

Drzewa – prosta obsługa w PHP 17 marca 2010

Filed under: PHP,Programowanie — Łukasz @ 23:02
Tags: , ,

Dziś przedstawię klasę, którą napisałem do obsługi grafu drzewiastego. Pomysł na wpis zrodził się w chwili modyfikacji pewnego skryptu, w, którym zlecono mi kilka modyfikacji, jedną z nich było dopisanie wyświetlenie struktury drzewiastej kategorii pobranych z bazy… Jak wiadomo, jest mnóstwo sposobów na przedstawienie drzewa z relacyjnych bazach danych, więcej o tym można poczytać tutaj. Ja jednak spotkałem się już z gotową bazą która wykorzystywała drugą metodę opisaną na powyższej stronie, tzn.
Tabelka z kategoriami zbudowana była z kilku pól, ale dla mnie były ważne 3 z nich (nazwy dla ułatwienia pozmieniałem):

id | parent | name

Jak nie trudno się domyśleć, id to unikatowy identyfikator, parent to id rodzica natomiast name to nazwa kategorii.

Przed moją modyfikacją, na stronie były podane tylko kategorie główne, czyli takie które miały parent = 0. Czyli zapytanie wyglądało tak:

SELECT id, name FROM category WHERE parent = 0

A więc ja wyrzuciłem z niego przeszkadzający mi warunek + dodałem sortowanie po id (nie sortowałem już drugi raz wyników, zresztą w tej modyfikacji, nie użyłem tej klasy, wszystko było napisane strukturalnie a więc po co tam tą klasę upychać…) i pobrałem do tablicy pełną tabelkę z kategoriami, natomiast po stronie PHP zadbałem o to aby przekształcić tą tablicę tak aby była prosta możliwość jej wyświetlenia w sposób:

- Kategoria 1
     - Kategoria 1.1
          - Kategoria 1.1.1
          - Kategoria 1.1.2
     - Kategoria 1.2
- Kategoria 2
(...)

Oczywiście rozwiązanie rekurencyjne, którego nie będę tłumaczył krok po kroku bo wiele cierpliwości by mnie to kosztowało… Pokaże jedynie obsługę tego ustrojstwa, kod odpowiedzialny za to, jak i rzucę na końcu całą klasę do ściągnięcia wraz z przykładem.

 
(more…)

 

(nie)Captcha – jak złamać captche a jak napisać swoją. 28 stycznia 2010

Filed under: PHP,Programowanie,Security,Web — Łukasz @ 00:56
Tags: , ,

Dziś tematem będą, ponownie już na moim blogu, – captche, czyli obrazki z kodem, który ma nas zabezpieczyć przed wypełnianiem formularza przez boty przeglądarek (rejestracją konta na serwisie, wysłaniem SMS`a z darmowej bramki etc.) ale również jest to zabezpieczenie przed automatyzacją pewnych operacji (np. wspomniane już właśnie wysyłanie SMS`ów, zresztą pisałem nt. Orange captcha). Pomysł wyprowadzano w życie już dawno i bardzo dużo serwisów z takiego rozwiązania korzysta. Również stronki domowe pisane przez zapaleńców często taki cuda mają (przy skomentowaniu artykułu np.). Jest to naturalne, bo pomysł jest ciekawy i fajny, są jeszcze inne sposoby ale nie o tym chciałem tu pisać.

 

Bardzo ważnym, nie tylko w dziedzinie informatyki/programowania, jest robienie wszystkiego z głową, a niektórzy zapominają o tym. Generowana captcha z zasady ma bronić nas przed zapycham korzystania z usług naszego serwisu przez boty przeglądarkowe, jest to jedyna ich funkcja. Natomiast bardzo często można się spotkać z „niby captchami” które właściwie nic z captcha nie mają wspólnego.

 
(more…)