Pokazywanie postów oznaczonych etykietą www. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą www. Pokaż wszystkie posty

4 kwietnia 2014

Wyszukiwarki inne niż google.com - tak istnieją metawyszukiwarki

Zgodnie z definicją wyszukiwarka internetowa (ang. search engine) to program lub aplikacja internetowa, która realizuje fukncję podążania za hiperłączami (linkami) internteowymi w celu zbudowania indeksu z danymi. Oczywiście sukces, jaki niewątpliwie osiągnęło Google w swojej globalnej wyszukiwarce internetowej dla zasobów HTTP / WWW to szybki czas i wysoka trafność odpowiedzi na zapytania o szukane frazy. Globalny zasięg (oprócz Chin i jednej z Korei oczywiście) spowodował, że Google dzięki wyszukiwarce internetowej podbiło świat wirtualny internetu i ma monopol.


W dobie takiego monopolu czasami spotykamy się z niewiarygodnymi rezultatami wyszukiwania lub po prostu spamem internetowym zamiast np: artykułu naukowego na temat. Na ratunek przychcodzą nam metawyszukiwarki, czyli wyszukiwarki dziedzinowe, w których zawężamy się do szukania wyłącznie tematów i zagadnień z danej dziedziny.
 
Metawyszukiwarki są też często kojarzone z multiwyszukiwarkami, które przeszukują wiele serwisów i zwracają w jeden spójny sposób agregaty danych bądź też najcenniejsze z nich, które wynikają np: z rankingu popularności ew. kryterium jakim jest zawężenie do dziedziny multiwyszukiwarki.
 


Warto nadmienić, że metawyszukiwarka nie musi bazować na linkujących do siebie stronach WWW. Może używać dedykowanego parametru lub dziedzinowego kryterium, po którym wyniki wyszukiwania będą najbardziej trafne. Np: szukanie aminokwasów nie zawsze udaje się w Google, ale metawyszukiwarka od aminokwasów robi to idealnie i sprawniej. Ba możemy do niej wprowadzić wzór lub obrazek aminokwasu, którego szukamy i jest to najlepszy sposób dziedzinowy.
Istotna różnica metawyszukiwarekk i multiwyszukiwarekk w stosunku do zwykłych wyszukiwarek internetowych ogólnego przeznaczenia jest taka, że meta i multi mogą nie utrzymywać swojego indeksu wiedzy. Jedynie robią rankingowanie lub stosują inne eksperckie algorytmy podpowiadania nejlepszych wyników.

Odnośnie szukania konkretów w sieci. Tak działa na codzień przeciętny użytkownik, nie szuka zawsze wszystkiego i w każdym wymiarze. Jest jeden szczególny klient, który szyka byćmoże wszystkiego i wszędzie - zdecydowanie, agencje wywiadowcze. Używają sobie tylko znanych metawyszukiwarek, które w dziedzinie śledczej lub wywiadowczej robią swoją najlepszą robotę. Dokładnie nakierowują na: cele, ludzi, firmy, zzdarzenia, fakty, skojarzenia ludzi i urządzeń, itd.
Postaram się omówić kilka metawyszukiwarek jakie spotkałem na WWW i zachęcam do eksperymentowania z wyszukiwaniem, bo jest to ważne, aby wiedzieć gdzie oprucz Google.com znajdą się stosowne informacje w internecie.


Świat metawyszukiwarek ciągle się zmienia. Jedne istnieją w sieci, ale nie rozwijane odstraszają datą ostatniej aktualizacji. Inne zmieniają nazwy i adresy. Część zupełnie znikaja i powoli się o nich zapomina. Metawyszukiwarki nigdy nie zdobyły dużej popularności. Może trudno im wygrać konkurencyjną walkę z gigantem, ale mimo tego mają wiernych fanów, a w sieci regularnie pojawiają się nowe projekty z tej grupy.



Dzisiaj punkt ciężkości przesuwa się raczej w stronę metawyszukiwarek tematycznych, zwanych potocznie „porównywarkami” – te umożliwiają wyszukanie i porównanie wielu ofert różnych sprzedawców internetowych. To serwisy typu ceneo.pl czy skapiec.pl, ostatnio popularne są „travel metasearch engines”, które pomogą zarezerwować np. lot czy pokój w hotelu.

Lista poniżej to typowe metawyszukiwarki, dzięki którym w jednym oknie widzimy wyniki z kilku innych wyszukiwarek. Są głównie anglojęzyczne i to ten obszar językowy jest przede wszystkim przeszukiwany. Poza jednym wyjątkiem nie ma takiej, która byłaby dedykowana specjalnie zasobom polskojęzycznym.

Dogpile

Łączy wyniki Google, Yahoo!, Yandex i kilku innych wyszukiwarek, zwłaszcza tych dedykowanych plikom video i audio. Umożliwia wyszukiwanie w całej sieci oraz w obrazach, materiałach video, newsach. Oferuje wyszukiwanie informacji lokalnych oraz osób , szkoda że tylko na terenie USA. Daje możliwość wyszukiwania zaawansowanego: z wszystkimi słowami, dokładnej frazy, wykluczenia słowa bądź frazy, oraz wyeliminowania bądź zawężenia do konkretnej domeny. Można także ograniczyć wyniki do jednego z 10 języków (polskiego niestety nie ma).Działa dość długo, bo od 1996 r. Ciekawostką jest nazwa wyszukiwarki, zaczerpnięta z gry rugby, gdzie gracze tworzą stos nakładając się jeden na drugiego. Dogpile – jak zapewniają twórcy – robi dokładnie to samo, układa wszystkie dostępne wyniki w jednym miejscu.

Yippy

Twórcy kładą nacisk na dwa elementy ważne według nich dla współczesnego internauty. Po pierwsze Yippy ma być przyjazna rodzinie. Eliminowane są treści takie jak pornografia, gry, treści seksualne oraz produkty czy poglądy, które mogłyby być uznane za antysemickie, antychrześcijańskie, konserwatywne i antyamerykańskie. Po drugie chroni prywatność użytkowników (żadne metadane nie są przechowywane, tak jak i historia wyszukiwania). Oferuje ciekawe rozwiązanie – zamiast dostarczania milionów wyników w postaci jednej długiej listy, grupuje podobne wyniki razem w “chmury”: dziedzinową (tematyczną), źródłową (pokazuje liczbę wyników z konkretnego adresu), wg. domeny i czasu, kiedy się informacja w sieci pojawiła. Możliwe jest wyszukiwanie w całej sieci, zdjęciach, blogach bądź wikipedii. Ciekawe są projekty specjalne, np. wyszukiwarka dedykowana dziełom Szekspira http://shakespeare.yippy.com czy działalności Benjamina Franklina http://ben.yippy.com.

Ixquick

Jedyna multiwyszukiwarka posiadająca także interfejs polski. Jest dostępna także w innych językach m.in.: chińskim, angielskim, francuskim, niemieckim, japońskim, portugalskim, hiszpańskim, szweckim, a nawet tureckim czy koreańskim. Łącznie wyszukuje w 18 językach. Każda wersja językowa uwzględnia w wyszukiwaniu lokalne wyszukiwarki (o ile istnieją). przyznaje każdej stronie jedną gwiazdkę za każdą wyszukiwarkę, która umieściła ją w pierwszej dziesiątce swoich wyników. Pięć gwiazdek oznacza, że pięć wyszukiwarek oceniło stronę tak samo. Ixquick nie gromadzi ani nie udostępnia żadnych informacji osobistych. Mechanizm Oferuje szerokie możliwości spersonalizowania ustawień wyszukiwania.

12 grudnia 2012

Drizzle - chudy MySQL bez bajerow nie dla frajerow

Ten post traktujcie jako notatki ulatwiajace zainteresowanie sie alternatywnym silnikiem podobnym do MySqla jakim jest Drizzle:

http://www.learningdrizzle.com/

http://drizzle.org/wiki/User_Documentation
http://drizzle.org/wiki/Hudson


Film pilotarzowy

http://blip.tv/file/2559412/

http://www.google.pl/search?q=drizzle+vs+mysql&hl=pl&ei=tidbTM2GOZObOPKgzZYP&start=10&sa=N
- wstepniak n.t. tego dlaczego NIEwarto walczyc czasem z baza MySql, gdy mamy wiele polaczen
- przedstawienie cech mikrojader
- rekomendacja usuniecia zbednych funkcji z drizzle
- rekomendacja podejscisa kodowania drizzle
- rekomendacje farm / chmur, gdzie drizzle lub CassandraDB dziala jako podstawowa baza danych
- dlaczego Oracle sie boii drizzle
http://www.bluegecko.net/oracle/oracle-mysql-mariadb-and-drizzle-oh-my/
http://birdhouse.org/blog/2008/07/24/drizzle-vs-oracle/
- opisac sukces postawienia wordpressa na drizzle
http://michaelshadle.com/2009/05/14/porting-wordpress-to-drizzle-will-i-succeed/
- Drizzle and Gearman => PHP API's
http://pdxphp.org/2009/08/meetings/drizzle-gearman-and-their-php-apis/
- optymalizacja budowania z cygwin
http://www.thedeveloperday.com/building-drizzle-on-cygwin-or-getting-as-far-as-possible/
- pozytywne wiesci z polaczenia Drizzle i Gearman
http://oddments.org/?p=282



Instalacja drizzle PHP + Ubuntu
http://tumblelog.jauderho.com/post/99455263/compiling-drizzle-on-ubuntu

http://bryans.tistory.com/entry/Ubuntu-910%EC%97%90%EC%84%9C-drizzle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

benchmarki
https://lists.launchpad.net/drizzle-discuss/msg03687.html

Materiały:
http://osnews.pl/drizzle-lekka-wersja-mysql-dla-webu/
http://www.networkworld.com/news/2010/051810-suns-stars-where-are-they.html?page=3
http://www.networkworld.com/news/2010/030910-rackspace-hires-to-align-with.html
http://www.networkworld.com/search/index.html?cx=014839440456418836424:mzedprvnwmy&cof=FORID:9&ie=UTF-8&q=podcast&x=0&y=0
http://dev.mysql.com/tech-resources/interviews/stewart-smith.html
http://news.oreilly.com/2008/07/mysql-forks-could-drizzle-be-t.html
http://oddments.org/?p=430
http://oddments.org/?p=349


http://webhosting.pl/Drizzle:.wersja.MySQL.przystosowana.do.aplikacji.sieciowych.

https://code.launchpad.net/~mordred/percona-xtradb/drizzle-release-merge

9 lutego 2012

Narzędzia do pomiar wydajności i optymalizacji strony www

Istnieje wiele metod mierzenia wydajności naszejj strony internetowej. Najsensowniejsza wydaje się mierzona w regioniach geolokalizacyjnych, w których chcemy ją promomwać. Oczywiście są narzędzia, które testują naszą stronę z różnych serwerów z całego świata i podają rankingi wyników.
Najbardziej pożytecznymi argumentami, które stoją za pomiarem wydajności stron internetowych są czynniki oraz odczucia użytkownika.
Składają się one na aspekty typu:

  • czas wczytywania części strony widocznej na ekranie: czas, który upływa od momentu wysłania żądania nowej strony do momentu wyrenderowania części strony widocznej na ekranie przez przeglądarkę
  • czas pełnego wczytania strony: czas, który upływa od momentu, gdy użytkownik wysyła żądanie nowej strony do momentu, gdy strona zostanie w pełni wyrenderowana przez przeglądarkę
Okazuje się, że istnieje wiele czynników, które mogą zaburzać nam te jakżde oczywiste dwie metryki.
W narzędziach prezentowanych poniżej bardzo łatwo po znaczących kolorach i procencie dobrej roboty można obserwować, jak dużo pracy przed nami albo też za nami :-)

Chcąć się odnieść do kryteriów oceny warto wymienić niniejsze:

  • czy poprawnie działa cache
  • ilość plików CSS
  • ilość i JavaScript
  • kompresja i minimalizacja plików
  • czy obrazki są optymalnego formatu
  • czy obrazy załączone do strony są optymalne pod względem cachowania
  • jaki jest stopień optymalizacji wielkości obrazów w danym formacie + sugestie zmian formatu lub wielkości
  • jak stronę widzą typowe boty internetowe
  • jak możemy poprawić stronę pod kątem wygody dla nie w pełni sprawnych osób przeglądających naszą stronę

Gdybyście poszukiwali narzędzia wskazującego co dzieje się z Waszą stroną i gdzie można poszukać uchybień wydajności, polecam gtmetrix. W gtmetrix performance Report jaki można uzyskać z tego narzędzia składa się z wielu praktycznych wskazówek wyrażonych w punktach procentowych i klasyfikuje na tej podstawie do klasy wydajnościowej (skala od A do F, gdzie A to najlepsza ocena). Wygodnych ficzerem jest możliwość porównania z innymi wersjami strony lub innymi stronami.

Jednak na rynku króluje od pewnego czasu PageSpeed i temu narzędziu nie mam na prawdę niczego do zarzucenia. Przemyślane, wspierające urządzenia mobilne, darmowe i co najważniejsze wyniki testu są do przejrzenia pod linkiem przez innych. Ten ostatni ficzer czyni to narzędzie bardzo współczesnym i praktycznym.

Dzięki temu, że Page Speed Insights mierzy wydajność stron na urządzeniach przenośnych i komputerach. Dwukrotnie pobiera URL: poprzez komórkowego i komputerowego klienta użytkownika.


Oczywiście fani Firefoxa mogą zainstalować wtyczkę YSlow analizującą wydajność stron internetowych.

Wspominając o wydajności nie można pominać tzw. Waterfall Chart, czyli rejestru procesu ładowania stron przez przeglądarkę. Uzmysłowi nam to co tak naprawdę może być blokerem dla wydajności. Oto przykładowy widok takiego rejestru wodospadu:

Jeśli natomiast nie jesteśmy webmasterem i chcemy kilka zobaczyć kilka podstawowych kryteriów wydajności strony, możemy użyć page scoring. Oto bardzo czytelny i ogólny raport:

5 sierpnia 2010

"Idziemy na zachód" z NoSQL

Definiując noSQL warto zaznaczyć, że nie chodzi tutaj o niniejszy jakiś żart. O ile specjaliści od T-SQL i posiadacze stu certyfikatów ORACLE myślą inaczej, są rekomendacje płynące chociażby z digg.com, facebook.com, yahoo,com ale od zawsze z google.com potwierdzające, że trend noSQL ma sens w przetwarzaniu i składowaniu dużej ilości danych. Mając na myśli dużej mam na myśli setki Gigabahjtów, Terabajty i Petabajty ... i nie jest to wcale SF :-) Problem jak zwykle dotyczy skali i oczywiście dotyczy grupowania i złączania danych z różnych źródeł i baz. Tutaj składnia ... JOIN ... może okazać się nieco zasobożerna i nie na miejscu ;-) W miejsce, gdzie nie można robić SELECT i LIMIT + OFFSET + JOIN lub zwyczajne zapytania wykonują się zbyt długo, a CRON + memcached nie wystarczy potrzebne są bazy danych noSQL do składowania i mechanizmy Map Reduce do agregacji i łączenia danych dla osiągnięcia pożądanych wyników. Oczywiście że nie istnieje jedna baza do wszystkich zastosowań ... oto pomocnik w wyborze bazy noSQL.




Od 2001 roku, od kiedy to przyszło mi korzystać produkcyjne z bazy danych mySQL nie miałem pojęcia, że używam idei noSQL. Moja baza danych to było składowisko danych pomiarowych z różnej maści mierników elektronicznych oraz różnego typu alarmów, przy przekraczaniu zakresów. Napisałem wspólnie z kolegą z zespołu sterownik do składowania danych binarnie, ale z ideą podobną jak DBASE IV. Okazało się, że silnik i sterownik naszej bazy świetnie się sprawdzał i działał zgodnie z założeniami w wielowątkowym środowisku. Jednak potrzeba przetwarzania danych zmusiła mnie do przechowywania danych w bazie SQL, aby wykonywać prościej rankingi na danych. Wówczas ideę złączeń należało po prostu odrzućić ... nie będę tłumaczył powodów, dla których mySQL 3.28.x się wtedy zamulał przy złożonych JOINach ;-) Ważne, że założenie to było słuszne jak na rok 2001 i PHP 3.x.

Patrząc z perspektywy czasu uświadomiłem sobie, że utworzyłem w mySQL coś takiego jak mój własny noSQL. Składowałem dane w kolumnach, ale również utworzyłem superkolumny z pól tekstowych, w które wpisywałem oddzielone identyfikatorami wartości powiązanych danych. Dane były wiązane we wręcz prostacki sposób, ale taka metoda pozwalała - zamiast stosowania JOINów - przetwarzanie źródłowych danych z pomiarów do postaci pośredniej przez 6h a nie 11h. Jak na tamte czasy i koszty hostingu/dedykowanych serwerów było to znacząco optymalne podejście.

Współcześnie widzę trend dość podobny (z ang. structured storage) i równie banalny w zastosowaniu tzn. używanie "superkolumn" w składowaniu danych w ramach tej samej kolumny. Dodawanie zamiast relacji niejako "nadmiarowych" i zarazem powiązanych danych w wierszu, które podlegają wydajniejszemu wyszukiwaniu niżeli tradycyjne metody z baz SQL. Nie zawsze mogą konkurować z zewnętrznym indeksem opartym na rozwiązaniu t.j. Apache Lucene.

Rozwiązań serwujących ideę noSQL jest sporo i po pełną listę zapraszam do odpowiedniego źródła, któro porównuje i próbuje skatalogować bazy danych noSQL.

20 lipca 2010

Android + PHP -> czy wygra prostota ?

http://bingphp.codeplex.com/

http://blog.wilgucki.pl/2010/07/php-for-android.html


http://blog.wilgucki.pl/2010/07/php-for-android.html?utm_source=feedburner+php&utm_medium=feed&utm_campaign=Feed:+wilgucki/PHP+(Hello+World!+PHP)

http://blog.wilgucki.pl/2010/07/php-for-android-nowe-logo-oraz-roadmap.html


http://www.phpclasses.org/blog/post/125-Developing-PHP-applications-to-run-natively-on-Android-phones.html

http://danielpetty.com/android-lamp-linux/

http://www.phpforandroid.net/doku.php

3 lutego 2010

PHP + HipHop ... i nigdy stop :)

Tytuł sam odkrywa szczegóły tej wypowiedzi. Chciałbym opisać swoimi słowami co myślę o rozwiązaniach sieciowych, które są wysoko skalowalne i produkcyjnie pozwalają na obsłużenie stron o ruchu ~400 mln odsłon miesięcznie. Temat do tyczy znanego wszystkim języka PHP oraz narzędzia poprawiającego niemalże o połowe wydajność tego języka tzn. prj. HipHop.



Wiele projektów udowodniło, że język PHP daje się osadzać na innych platformach (t.j. Java, .NET, Erlang VM)i konwertować do innych formatów wykonawczych. Niewiele miało tak wyjątkową rekomentację jak HipHop. Pierwotnie projekt zrodził się na potrzeby optymalizacji wydajności skryptów w serwisie społecznościowym Facebook. Od kilku dni źródła zostały uwolnione i umieszczono je na GitHub.

Wracając do alternatywnych prób kompilacji w PHP oraz osadzania warto przytoczyć następujące projekty:
phpcompiler
roadsend
Phalanger php compiler
Quercus - PHP in Java



Kwintesencja HipHop jest zarazem założeniem tego tworu. Jest to coś ala kompilator skrośny z języka PHP do języka C++. Dzięki takiej ścieżce ANSI C (Zend API), w którym napisany jest PHP, dalej PHP i na końcu skrypty CGI skompilowane kompilatorem G++ daje zysk ponoć dwukrotny w wydajności !!!
Co dla świata PHP jak i dla samego Facebooka jest REWOLUCYJNE :-) Pierwotnie produkt komenrcyjny ZendServer próbował optymalizować czas działania skryptów, poprzez pakowanie OPCODES (coś ala bytecode w PHP), lecz możliwości tego rozwiązania skończyły się bardzo szybko. Aktualnie zamiast np: dokupować kolejny rdzeń lub stawiać kolejną maszynę w farmie wystarczy użyć HipHop - nieprawdaż że proste ;) Poniższy schemat pokazuje ogólnie ten proces:





Materiały dodatkowe:

http://developers.facebook.com/news.php?story=358&blog=1
http://www.ustream.tv/recorded/4409735
http://www.facebook.com/video/video.php?v=124728580468&ref=mf

7 listopada 2009

Pobujaj w chmurach z Python lub PHP przy pomocy libcloud

Cloud computing (przetwarzanie sieciowe w chmurze) odnosi się do wielu dziedzin informatyki i przez ostatnie kilka lat stał się elementem ofert wielu poważnych firm hostingowych. Efekt to wiele różnych znaczeń przetwarzania w chmurach i wiele różnych interfejsów programistycznych API. Jedno jest pewne są takie zastosowania, w których chmury obliczeniowe ratują przedsiębiorców.



Faktem jest, że takie korporacje jak Amazon,
Google, Microsoft od wielu lat przed pojawianiem się tematu wykorzystywały chmury lub tzw. gridy w swoich infrastrukturach sieciowych, lecz dziś mogą mocami obliczeniowymi cieszyć również klienci indywidualni.

Jako przykład praktyczny wykorzystam zlecenie jakie miałem okazję wykonać ostatnio. Klient potrzebował zaindeksować i otagować kilka gigabajtów danych dostarczonych w postaci plików tekstowych na DVD-ROM. Algorytm indeksacji nie jest tajny, więc wspomnę tylko, że danych źródłowych docelowy miał kilka tytułów, kilka opisów w różnych językach oraz powiązane atrybuty. Po krótkim reserchu okazało się, że na maszynie lokalnej oraz na dostępnym wirtualnym hostingu skrypty muszą działać dokładnie ok. tygodnia, aby przetworzyć wszystkie dane i utworzyć tabelę wyników. Uwzględniłem tutaj tabele wyników pośrednich dla optymalizacji oraz cachowanie często powtarzających się atrybutów w pamięci RAM.



Jak na złość zlecenie zostało zaplanowane na 5 dni i klient był nieugięty w terminie. Postanowiłem dać zarobić właścicielom chur obliczeniowych i skorzystałem z usługi Amazon. Jedyne co zrobiłem, to wypożyczyłem moc obliczeniową z bazą danych mysql i cachowaniem na 3 dni. Koszt był wystarczająco niski i udało się wykorzystując chmury uzyskać bardzo zadowalające wyniki. Co ciekawe rozliczałem się za megabajt transferu oraz czas procesowa w używaniu bazy danych mysql ;-) Polecam - na pewno nie stracicie, ale będzie to pozytywne zauroczenie mocami, jakimi dysponuje taka chmurka.
Aby móc efektywnie korzystać z serwerów wirtualizacji i zrobić pierwszy krok do korzystania z przetwarzania sieciowego, należy zoptymalizować sprzęt oraz oprogramowanie pod kątem zbalansowania poboru mocy oraz wydajności. Uzyskanie odpowiedniej równowagi eliminuje problem przeciążenia serwerów, a zasoby dla aplikacji i oprogramowania mogą być przydzielane w zależności od potrzeby, by zapewnić ich optymalne działanie.




Niniejszą wypowiedzią chciałbym skierować uwagę i odnotować istniejące,
zarazem promowane na rynku usługi i API upraszczające używanie chmur do minimum.
Skupić się warto na tym, że niektóre API obsługują wielu providerół chmur.
Oto lista providerów chmur, z którymi warto się zapoznać:

http://incubator.apache.org/libcloud/ - zestawienie wspieranych chur przez API

http://www.simplecloudapi.org/ http://www.simplecloudapi.org/api PHP class API http://www.simplecloudapi.org/api/simple-queue

http://deltacloud.org/ http://deltacloud.org/api.html

http://webhosting.pl/print/Zend.oferuje.deweloperom.PHP.interoperacyjnosc.dla.chmur

http://incubator.apache.org/libcloud/getting-started.html Python example





Materiały:

Matt Mullenweg o roli Open Source w technologii chmur

Dokument PDF na temat konstruowania chmur obliczeniowych

Cloud computing - MultiCore klucz do wirtualizowanych systemow

5 listopada 2009

CSSPrism - edycja arkusza styli CSS na stronie www

Wszystkim lubiącym praktyczne aplikacje sieciowe polecić chciałbym CSSPrism. Sprytna aplikacja naspiana w języku Python i przy pomocy framework a Django oraz jQuery.



Prezentowany powyżej obrazek przedstawia stronę startową projektu CSSPrism - inspektora spektrum kolorów ;) Wprowadzamy adres URL do naszych styli, które chcemy edytować. Poniżej prezentuje pozostałę zrzuty ekranów ukazujące prostotę oraz czytelny interfejs użytkownika GUI.



17 czerwca 2009

Przyspieszenie aplikacji z Google Perftools

Wielu ludzikom, którzy nie biorą na poważnie optymalizacji lub nie mają z nią potencjalnych problemów na codzień takie pojęcie jak profilowanie bywa długo obce. Mogą tylko się z tego cieszyć, bo w rękach ich bardziej doświadczonych kolegów od profilowania aplikacji spoczywa pewna magiczna moc.

Czasami bywamy pytani o to, jak można coś zrobić szybciej lub napisać tak, aby działało szybciej na tej samej maszynie. W sytuacji w której tematem optymalizacji jest jakiś nieskomplikowany język skryptowy typu Python, PHP, czy Ruby mamy do dyspozycji napisanie modułu w języku C. Zasadniczo te języki są napisane w C (C++) i zakładamy, że moduł napisany w języku źródłowym, w którym napisano dany język będzie szybszy. Sprawa się nieco komplikuje, gdy nie mamy takiego pomostu jak możliwość napisania kodu modułu w kodzie źródłowym języka. Jeszcze częściej nie mamy wpływu na sposób zarządzania pamięcią oraz wielowątkowością w danym języku skryptowym. Posłużę się dla przykładu językiem PHP, który posiada źródłową konwencję nazwaną Zend Engine. Jest to narzucony silnik stworzony poprzez firmę Zend i rozwijany przez deweloperów woluntariuszy na całym świecie. Niestety naleciałości, które ciągną się za nim od wielu lat ograniczają znacząco działanie tak istotnych mechanizmów języka jak wielowątkowość i odśmiecanie pamięci. Język ten w samych swoich źródłach jest pod tym kątem niedojrzały. Inna sytuacja jest w przypadku języka Python i Ruby. Słynna translacja języka Python w samym RPython (Restricted Python) - statycznym podzbiorze Pythona, który można skompilować do kodu bajtowgo Javy, CLR czy C, czyli projekt PyPy. Pozwala na bardzo rozwinięte horyzonty działania, które dla niewiedzących prowadzić mogą do definowania np: własnych zasad odśmiecania pamięci, sposobu działania wielowątkowości i całej gamy innych drobiazgów, które stawiają dość wysoko język Python na podeście :-) Nie znam dokładnie źródeł języka Ruby, ale widziałem, że są czytelne i można po nich wywnioskować, że doruwnuą projektowi takiemu jak Python, ale też zostawiają w tyle PHP Zend Engine.

Rozpisałem się o ogólnym spojrzeniu na źródła powszechnych języków skryptowych, aby naświetlić tylko, że dla niektórych języków temat optymalizacji, czyli profilowania na poziomie źródeł języka jest dość ograniczony. Lecz z kolei są takie języki skryptowe, które można profilować na poziomie wątków oraz zarządzania pamięcią. Projekty w ramach których dość czytelnie to zaprezentowano zawierają materiały dodatkowe. Wspomnę jeszcze, że nasz ulubiony googiel też się podpisuje do takich praktyk i posiada dość spore doświadczenie w tej materii. W soich serwerowniach dobierają procesory oraz z tego co mi wiadomo na farmach maszyn odbywa się również profilowane kompilowanego oprogramowania, aby jak najwięcej wycisnąć. Jest to jedna z nielicznych firm, która używa selekcjonowanych i wygrzewanych partii procesorów Pentium III oraz serwerownie stanowią klastry słabszych maszyn o przewidywalnej mocy obliczeniowej oraz przewidywalnym zużyciu energii. Skoro google udowodniło, że można nie kupować drogich serwerów IBM, czy Suna, czy tez HP jestem zgodny z nimi, że wówczas bez profilowania oraz optymalizacji zarówno hardware a przede wszystkim software nie wiele zdziałamy.

Przechodząc do części praktycznej chciałbym uchylić fragment tajemnicy przyspieszania aplikacji z Google Perftools. Materiał na temat przykładu profilowania znajdziecie tutaj.


Życzę pomyślnej lektury i zapraszam do podzielenia się refleksjami na ten temat.


Materiały dodatkowe:

Mastering the Art of Indexing

High Availability and Scalability Patches from Google

More on using Google Perftools with MySQL


Using the Google Perftools to speed up your MySQL server


Using the Google Perftools to speed up your MySQL server - example

Fast, multi-threaded malloc() and nifty performance analysis tools

Simple HTTP server for use with google-perftools pprof

TCMalloc : Thread-Caching Malloc


prof/PerfTools


This page describes how to setup and use PerfTools.

This CPU profiler used at Google

Spinlock


Practical Concurrency Patterns: Spinlock


Practical Concurrency Patterns: Lock-Free Operations

Spinlock example code

The performance of spin lock alternatives for shared-memory multiprocessors

HP - Spinlock Pool Parameter Summary

.NET Framework Class Library - SpinLock Structure

The Hoard Memory Allocator and Memory Management Studies

Generate Ruby Profiling Charts With Perftools

Profiling Ruby With Google’s Perftools

Distributed Innodb Caching with memcached

InnoDB: Innovative Technologies for Performance and Data Protection

23 kwietnia 2009

Erlang, OTP, współbieżność, funkcyjność i rozproszenie aplikacji

O języku Erlang słyszymy przeróżne żarty, czytamy posty i co ciekawe znajdujemy nawet nieliczne w kraju oferty pracy. A tak na prawdę to słowa Erlang się boimy :-) Bo byćmoże posiada germańską naleciałość fonetyczną. Całkiem możliwe, że zapis kodu jest magiczny i przyzwyczajeni jesteśmy od szkoły średniej do zapisów typu:
"function ...() ... if {...} elseif {...} else {...} ... return ..."

Dodatkowo jeśli coś jest skomplikowane na pierwszy rzut oka i wyszukiwarka nie pisze słodkich ciekawostek o tym, że warto też to czasami zlewamy. Cóż, wiem to po sobie i znajomych, którzy brną coraz dalej w różne takie powszechne (czytaj komercyjne) trendy. Pochwalam zarazem wszystkich wytrwałych łowców historycznych i zagadkowych języków programowania tudzież udziwnionych rozwiązań t.j. LISP, Prolog oraz święty Erlang :-)





Na dzień dzisiejszy wydajność aplikacji (wykluczając rozwiązania google, ibm, oracle, amazon, częściowo facebook i pewnie kilka innych posiadających chmury obliczeniowe + gridy) jest uzyskiwana dzięki serwerom www, które dzięki interpretowaniu skryptów w profilowanych wątkach Fastcgi generują kod XML, HTML lub inny strumień informacji przy pomocy pipeline (lecz nie tylko) do przeglądarki klienta. Dość powszechny, uniwersalny i wydajny sposób, który posiada bardzo namacalne granice skalowalności.
Oczywiście ilość dostępnych maszyn (coraz częściej wirtualnych) oraz procesorów w tym wszelkich pamięci RAM zawsze będzie znacząca. Dodatkowo serwery cachujące typu memcache, moduły typu apc, etc zawsze się przydają. No tak baza danych master i slavy, których synchronizacji lub jeszcze lepiej replikacji pilnować, bo najlepsze jajca będą, jak kopie rekordów będą miały inne identyfikatory lub jak nagle slavy się oburzą i całe obciążenie spadnie na mastera. Może się też okazać, że lubimy NFS, sieciowe systemy plików lub nietypowe systemy plików w naszej aplikacji, które obciążają nasz serwerek i load w granicach 66.6 nas nieco dziwi. Praca administratora przy skalowaniu, profilowaniu też jest kosztowna i należy ją wrzucić do całkowitego rachunku ... to takie typowe założenia.

A co będzie jeśli to wszystko olejemy i użyjemy języka Erlang ?!


Wiadomo musimy nabyć odpowiednią wprawę, zrezygnować z typowych rozwiązań, nauczyć się kilku poleceń Eshell i posiadać marzenia :-) bo tylko One nas uratują, hahahahaaaa :-)
Weźmy pod uwagę, że w Erlangu każdy funkcjonalny kawałek kodu działa jako specjalny atomowy proces Erlanga, do tego dodam, że takich procesów można stworzyć nawet na bardzo słabym procesorze setki tysięcy. Ponadto dodam, że każdy proces z każdym może wymieniać komunikaty, co daje rozproszone podejmowanie decyzji i prawdziwie wielowątkową obsługę zdarzeń. Nie skłamię, jeśli napiszę, że język został ochrzczony w zastosowaniach dość wymagających i krytycznych czasowo tzn. w telekomunikacji. Służy(ł) do obsługi central oraz przełączników telekomunikacyjnych, gdzie raz uruchomiona aplikacja nie była wyłączana przez wiele lat i procesy w niej działające stale wykonywały swoje zadania. Mało tego, to może napiszę coś zabawniejszego, bo języku Erlang nie przejmujesz się błędami. Nie jest to bynajmniej parodia znanych nam powszechnie języków programowania, lecz ucieczka w stronę pisania bardzo wymagających aplikacji. Zarówno skupienie się na tym co się dzieje w procesach aplikacji, jak i odciążenie programisty stałym poprawianiem błędów swoich i cuchych. Jasne, że nie da się tego uniknąć, ale co powiecie na to, że jeśli kawałek kodu pada z powodu błędu to w tym czasie powołuje do życia instancje (swój klon), który zajmuje się dalej zadaniem. Dopieprzyć warto czymś, o czym wiele rozwiązań może tylko pomarzyć, czyli podmiana kodu w locie :-) Oczywiście administratorzy nie odniosą kolejnej klęski podczas klastrowania aplikacji, bo procesy Erlanga widzą się na maszynch, które posiadają połączenie sieciowe (rozpoznają się po nazwach). Dodajemy kolejny serwer uruchamiamy środowisko Erlanga i aplikacje, które widzą działające procesy na pozostałych połączonych maszynach.

Dodam, że firma Ericsson stosuje rozwiązania bazujące na tym języku od ponad 20-tu lat. Firma Google natomiast oparła swój meta komunikator GoogleTalk w oparciu o ejabberd, jabber (XMPP)serwer oraz klient do budowy dowolnych komunikatorów internetowych napisany i działający całkowicie w Erlangu. Tyle tytułem wstępu, resztę pozostawiam sprawnym obserwatorom i odkrywcom, którzy zechcą przejrzeć kilka prezentacji na temat języka Erlang i wyciągnąć pożyteczne wnioski.

By nie nawijać tylko o teorii pewnego dnia usiadłem sobie do kilku przykładów i zechciałem się nimi z Wami podzielić. Oto one:


Dodatkowe linki:
Referat - Erlang

Jabber we własnej domenie - uruchamiamy serwer

ejabberd we FreeBSD

All you wanted to know about the Erlang HiPE compile (but might have been afraid to ask)

Porównanie Erlang HiPE do Java 6 server

Erlang in Practice Episode 1: Sending and Receiving Chat Messages

Erlang in Practice Episode 3: Distributing Clients In A Multi-node Environment

Erlang in Practice Episode 5: Unit Testing with EUnit


Erlang community site Planet Erlang

Wtyczka do Eclipse dla programistów Erlanga

Introduction to the Open Telecom Platform

Erlang: Open Telecom Platform (Parts)

Erlang-Open-Telecom-Platform.ppt

http://www.slideshare.net/dennisbyrne/the-erlang-programming-language-presentation

http://www.slideshare.net/btedev/erlang-concurrency-presentation

Prezentacja oraz projekt łamania haseł na podstawie MD5 wykonany w Erlangu

http://www.slideshare.net/btedev/erlang-concurrency-presentation

http://github.com/btedev/erlang_md5crack/tree/master

http://github.com/btedev

23 października 2008

Konsekwentne kodowanie i testowanie aplikacji internetowych

Wymiatający jest kod, który działa, ale taki, który działa w IE6 potrafi wymiatać podwójnie ...

Rozpoczynający dzisiejszą wypowiedź cytat/frazes nie jest przechwalaniem się jakiej to przeglądarki używam, ale raczej powieloną na mój sposób przestrogą, że w określonych okolicznościach warto pomyśleć o archaizmach. Ponoć każdy wytwór ludzkiej wyobraźni ma swój kres, gdyż rodzi się kolejny. Każda kolejna imaginacja może być jakościowo inna. Każdy produkt powinien pasować do marki i ją reprezentować. Moim zdaniem IE6 pasuje idealnie do marki M$ i ją także świetne reprezentuje.
Tak sobie spojrzałem i nawet specjaliści od testowania posiadają ratujący ich przed IE6 komentarz, który pozwolę sobie przytoczyć:


Testerzy kontra przeglądarki


Starając się dotrzeć do jak największej ilości odbiorców, dostarczając najlepszą jakość Testerzy.pl wyświetlają się poprawnie w:

* IE 7.0 i 8.0
* FireFox 2.0 i 3.0
* Opera 9.5 i wcześniejsze

Robimy wiele aby wyświetlać się poprawnie również w IE 6.0 jednak wymaga to od nas anielskiej cierpliwości i testów po każdej aktualizacji strony.



Oczywiście jest to przykłądowy i zupełnie przypadkowo odnaleziony komunikat informujący o tym, że nawet profesjonaliści od kontroli jakości mogą mieć IE6 w d.... bo powodów jest cała masa i rozmawiać można o nich wypijając przy tym skrzynkę ciemnego miodowego trunku. Oczywiście są tacy, którzy stają w obronie i udają, że im się udaje sprostać wymaganiom IE6. Ludzie, nie tędy droga :) Gdzie są wasze wymagania, założenia projektowe, konsekwencja w trzymaniu się założeń, hahahaaa ... niektórzy skomentują to śmiechem, ale wiele wielkich firm kupuje produkty działające tylko pod jedną przeglądarką. Pytanie, czy tylko nie są aplikacje intranetowe, w których problem jest z góry załatwiony.

W dobie ogólnej GPL, GPL2, *BSD i wszelkichj OpenSourcowych dowolności niekiedy zapominamy o tym, że pisząc coś dla publikacji w internecie warto się liczyć ze statystykami. Na co dzień pojawiają się wielce znaczące artykuły, które podają udział przeglądarek w rynku, lecz to często poszlaki. Nie jest tajemnicą, że tylko giganci internetowi mogą takie realne statystyki posidać, kiedy na ich portalach i stronach są treści różne i przyciągają użytkowników w różnym wieku oraz wszelakich zainteresowaniach. Ta wiedza tajemna jest też na sprzedaż i nie oszukujmy się, że z koleji inni giganci ją po prostu kupują i artykuły jakie na jej podstawie się rodzą będą bardziej na tą a mniej na tą psioczące i nie koniecznie obiektywne. Chciałbym pominąć artykuły zlecane przez M$, bo to są sztuczki marketingowe, ale nie pomijam bo to są działania skutecznie utrudniające życie teserom i deweloperom aplikacji internetowych. O tych właśnie grupach zawodowych będzie poniżej mowa :)

Z deweloperką aplikacji internetowych spotykam się na co dzień i z testerami także. Każdy ma swój zakres obowiązków oraz zakreśla fragment koła wokół którego obraca się internet. Patrząc z punktu widzenia praktycznego jeden i drugi boryka się często z problemem zakresów, w ramach których jest coś realizowane. Tak też można egzystować, ale pytanie jak długo ... pewnie do pierwszego grubego klienta, który ewidentnie powie dość i straty spowodują koniec zabawy. Dokładniej, czy czasem robienie aplikacji bez określonych wytycznych nie jest zabawą ? Na to pytanie spróbujmy sobie sami odpowiedzieć ...

Osobiście zachęcam do kartki papieru, ołówka i trzeźwego myślenia w kwestiach zasadniczych, które dotyczą przyszłego projektu. Wiele spraw, które założymy na wstępie pojawi się w trakcie, a te których nie założyliśmy zależnie od naszej konsekwencji pewnie też się pojawią. Trzymanie się ram jest o tyle ciężkim zajęciem, że zarówno indywidualnie jak i w grupie projektowej jest mnóstwo zajęć rozpraszających. Także pośrednio jesteśmy skazani na robienie wszystkiego i niczego pod warunkiem, że wiemy co znaczy konsekwencja. Dzięki niej wiele projektów jest kończonych na czas i ich jakość jest na wysokim poziomie.
Pomyślałem, że umieszczę link do wikipedii, bo nam wszystkim się przyda. Przypominanie sobie o niej uratowało niejeden projekt, więc zachęcam do kodowania konsekwentnego, któro po kodowaniu zwinnym ma tą zaletę, że nikt nam nie zarzuci, że coś mu nie działa w IE6 :-)

Kilka linków:
Testowanie w agile 2
Wojna przeglądarek
Przeglądarki używane przez internautów łączących się z polskimi witrynami z obszaru Polski. Ranking jest tworzony na podstawie liczby odsłon.

Exciting times in python testing world

Python Testing Tools Taxonomy

Agile Testing Articles and Tutorials

25 maja 2008

Symfony PHP framework - interesujące narzędzie

Niezrównany w bojach i podbojach szkieletów do kodowania w PHP zechciałem zmierzyć się z symfony PHP frameworks. Minęło już kilka lat jak tworzę własny miniFramework w PHP4 z moim autorskim miniORM. Jednym słowem wiele nocek spędzonych nad wywodami, jak przechowywać struktury bazodanowe w XML. Do tego XMLowe opakowania na formularze i walidacje. Ponadto używam między innymi takiego dodatku jako NuSOAP, który wprowadził do mojego kodu nie jeden sprawnie wykonany webserwis.



Kleje sobie własny frameworki i kleje ... a tu nagle widzę po ruchu społeczności symfony, że wzorując się na Ruby On Rails tworzą całkiem sprawny kawałek kodu, co najważniejsze ze wsparciem społeczności w promowaniu dodatków tzw. symfony plugins.


Pierwsze kroki zupełnie mnie osłupiły, bo generatory jakich się nie spodziewałem biorą górę, przynajmniej można tak jak w moim skromnym projekcie miniframework wygenerować szablonowo formularze backendowe, powiązane z generowanymi modelami w PHP oraz relacjami w danych. Nieco się tego napisałem i stwierdzam, że pokrycie testami jednostkowymi w symfony nie powala, ale ważne, że temat został opakowany w obiektowe podejście do kodowania w PHP. Cóż, czas zamrozić wersję mojego miniFramework'a i przyłączyć się do społeczności symfony.



Z początku próbowałem sam odkrywać co w plikach piszczy, ale oczywiście dokumentacja z krokami, która została opublikowana rozjaśnia wszystkie zasadnicze elementy pracy z tym narzędziem. Po kilku godzinach prób i testów, stwierdzam, że jest to kierunek w PHP, w jakim warto kontynuować rozwój ... z jakim skutkiem zobaczymy ;-)

Pozytywy wykorzystywania frameworka symfony, o których warto wspomnieć to:



  • konsekwencja nazewnictwa i budowy drzewa projektu

  • konsekwencja w utrzymaniu konfiguracji projektu

  • prostota pisania bibliotek, komponentów, pluginów a nawet partiali i slotów wymienialnych pomiędzy projektami

  • wbufdowany trub debugowania i logowanie zdarzeń o ustawialnym poziomie (filtrowaniu)

  • prostota budowania aplikacji z kategorii Web 2.0 z silnym nastawieniem na AJAX

  • społeczność oraz forumy i grupy dyskusyjne na tematy błędów występujących w CORE i pluginach





Od dziś polecam każdemu programiście PHP poznanie symfony - po co utrudniać sobie życie, przecież PHP jest i tak zakręcony ;-)