środa, 29 sierpnia 2012

Występowanie bólów i uczucia choroby po treningu jest częstą przypadłością sportowców amatorów i sportowców zawodowych. Niejedna osoba doświadcza tego po dłuższej jeździe na rowerze ze znaczną intensywnością. Z moich rozmów ze znajomymi rowerzystami wynika, że problem ten występuje także po mniejszych wysiłkach. Natężenie odczuć zależy też od odpowiedniego nawodnienia, spożywania bogatowęglowodanowych przekąsek podczas jazdy, relacji pulsu w stosunku do progu mleczanowego, występowania alergii, a także, przede wszystkim indywidualnej reakcji organizmu. Reakcję ową rozumieć można jako ośrodkowy wpływ mediatorów zapalnych, uwalnianych wskutek mikrouszkodzeń tkanek, zaangażowanych w pracę podczas wysiłku. Aby zrozumieć, co leży u podstaw omawianych procesów, warto przybliżyć sobie, jak z punktu widzenia budowy i funkcji, wygląda pracujący układ kostno-szkieletowy.

leki przeciwbólowe w sporcie

Przyczyny mikrourazów w sporcie.

Poruszające się względem siebie struktury anatomiczne, nie pasują idealnie. Z tego powodu na poziomie więzadeł, chrząstek i wewnątrz stawów powstają mikrouszkodzenia. Podobnie, działające na ciało przyspieszenia, występujące w sportach wytrzymałościowych, wywołują uszkodzenia przyczepów ścięgien, więzadeł i samej struktury kości, włączając w to mikropęknięcia. Zapewniające poruszanie struktur biernych mięśnie, także doświadczają urazów do których wliczają się mikrokontuzje, powodujące tzw. zakwasy, nie mające nic wspólnego z kwasem mlekowym, naderwania tkanki łącznej (śródmięsnej, omięsnej), a także naczyń z wylewami krwi do mięśni. Najpowszechniejsze są uszkodzenia integralności miofibryli, naruszenie ciągłości błon komórkowych i białek strukturalnych komórek. Większość ze wspomnianych wyżej procesów, stanowi fizjologiczny i nieunikniony stan, związany z wysiłkiem. Jest to jeden krok w całej drodze, prowadzącej, poprzez superkompensację, do poprawy tolerancji wysiłku, wzrostu wydolności organizmu. Tym niemniej jest to krok bolesny, a przecież dzisiejsza farmakoterapia, pozwala skutecznie eliminować ból.

Wyeliminować ból. Za wszelką cenę?

Wielu sportowców amatorów decyduje się na zażywanie niesteroidowych leków przeciwzapalnych, aby ograniczyć ból i uogólnioną reakcję zapalną, występującą po wyczerpującym treningu. Czy ten miecz godząc jedynie w ból, nie jest przypadkiem mieczem obosiecznym?

Sam jestem przeciwnikiem intensywnej farmakoterapii nastawionej na działanie objawowe. Uważam bowiem, że stosując ją, niwelujemy cenne informacje, jakie organizm przesyła do naszej świadomości. Dobrym przykładem są leki objawowe stosowane w przeziębieniu. Ich zażycie nie sprawia, że jesteśmy zdrowsi, a jedynie czujemy się zdrowsi. Robimy więc rzeczy, które byłyby trudne lub niemożliwe bez nich, narażając chory organizm na większe uszkodzenia. Dodatkowo, tłumimy fizjologiczną reakcję zapalną, nastawioną na reparację tkanek, niwelujemy gorączkę, przyspieszającą tempo reakcji na infekcję, czyli właściwie przedłużamy czas jej trwania.

Leki objawowe, bez uzasadnionej okolicznościami konieczności zażycia, ingerują w kompleksowy system reakcji, przygotowany w drodze milionów lat wyścigu zbrojeń pomiędzy organizmem wielokomórkowym i drobnoustrojem chorobotwórczym. Niestety natura tej ingerencji jest rozumiana jedynie bardzo powierzchownie, dlatego przyjmowanie leków typowo objawowych uważam za lekkomyślne z punktu widzenia świadomego pacjenta.

NLPZ... nie takie bezpieczne?

Wróćmy jednak do meritum tego wywodu, czyli relacji NLPZ i sportu. Jak się okazuje, leki przeciwbólowe i przeciwzapalne, nie są obojętne dla organizmu. Zaburzają naturalny proces regeneracji tkanek i dostosowywania się ich do działających obciążeń, poprzez przerwanie szlaków przenoszenia sygnału lokalnie w miejscu docelowym (mięśnie, ścięgna), a także na poziomie całego organizmu. Naukowcy zauważyli zmniejszenie tempa odnowy uszkodzonych komórek mięśniowych, poprzez ograniczenie tempa rekrutacji komórek satelitarnych. Komórki te normalnie, zasilają zniszczone miocyty, łącząc się z nimi (fuzują). Po zażyciu leków przeciwbólowych, proces ich wcześniejszych podziałów i aktywacji jest prawie całkowicie zniesiony. Okazuje się jednak, że i bez tego, pomimo obniżenia tempa regeneracji, mięsień ulega naprawie, tak więc znaczenie powyższych procesów nie jest jeszcze całkowicie zrozumiane.

Co więcej, w badaniach na szczurach zauważono, że przewlekłe stosowanie ibuprofenu, prawie całkowicie ogranicza przerost (hipertrofię) mięśnia w odpowiedzi na trening oporowy. Także reakcja mięśnia sercowego w tych warunków jest związana ze zwolnieniem tempa przerostu, a co za tym idzie dostosowania się do wysiłku. Oznaczałoby to, że przy stosowaniu niesteroidowych leków przeciwbólowych, trudniej nie tylko o zbudowanie masy mięśniowej, naprawę uszkodzeń, ale też o poprawienie kondycji.

Nie tylko regeneracja mięśni cierpi przy stosowaniu NLPZ. Naprawa ścięgien, ściśle związana z syntezą kolagenu ulega zahamowaniu po przyjęciu NLPZ. Prowadzi to do sumowania mikrouszkodzeń, co za tym idzie nie tylko braku adaptacji do wysiłku i wzmocnienia przez superkompensację, ale wręcz stopniowego osłabienia mechanicznego.

Podsumowanie

Nie ma pewności, czy są to jedyne efekty stosowania niesteroidowych leków przeciwzapalnych, o których nie słyszy się w reklamach. Warto wziąć to pod uwagę zanim zastosuje się popularny ibuprofen. Być może pewną formą obrony przed bólem i złym samopoczuciem po wysiłku jest zażywanie paracetamolu. Nie hamuje on cyklooksygenazy na obwodzie, działając prawie w całości ośrodkowo. Dobrze jednak pamiętać, że w każdym przypadku farmakoterapii, lekarze i farmaceuci jedynie muskają powierzchnię  czegoś wspaniałego i bardzo skomplikowanego. Interwencje farmakologiczne powinny być więc przemyślane, stosowane oszczędnie i rozważnie. Podając lek, modyfikujemy ekosystem organizmu pełen połączeń chemicznych, których istnienie i funkcja w dużej mierze są jeszcze nieznane. Pomimo stosowania skomplikowanych procedur dopuszczenia leku do użytku, długotrwałe następstwa bywają nieprzewidziane. To co nieznane zawsze niesie ze sobą ryzyko.

środa, 22 sierpnia 2012

Prawidłowa dieta w sporcie wydolnościowym obejmującym bieganie i jazdę na rowerze to nie tylko odpowiednie do wydatku energetycznego, suplementowanie składników odżywczych, ale też prawidłowe stałe czasowe i kompozycja posiłku z potrzebnych organizmowi składników. W poprzednim artykule, wspomniałem o kluczowych aspektach zbilansowania diety pod kątem ilości energii i dowozu białka.

Żywienie w sporcie

Pora rzucić światło na przygotowanie do wyścigu kolarskiego lub biegu długo i średniodystansowego. Kluczowym źródłem energii podczas długotrwałego wysiłku tlenowego są kwasy tłuszczowe i glukoza, uzyskana z endogennych zasobów glikogenu, zawartego w mięśniach, wątrobie i egzogennych, czyli zewnętrznych, pochodzących z diety. Warto wspomnieć, że to właśnie wątroba gra kluczową rolę w regulacji glikemii we krwi, mięśnie bowiem nie mogą uwalniać glukozy, powstałej z rozpadu rezerw glikogenu, z powrotem do krwi, a tym samym uzupełniać zasoby innych, bardziej używanych grup mięśniowych. Pracujący mięsień korzysta jedynie z zasobów swoich i pochodzących z krwi, czyli z wątroby i wchłanianych z przewodu pokarmowego. Wątroba (w niewielkim stopniu nerki) uzupełnia pulę glukozy we krwi głównie rozkładając glikogen, utylizując mleczany (cykl Corich),aminokwasy z białek i glicerol z tłuszczów. Widać, jak ważne źródło energii stanowi przewód pokarmowy, nie należy więc startować z uczuciem głodu.

Od intensywności wysiłku zależy, jak duża część energii pochodzi z utleniania kwasów tłuszczowych, a ile ze spalania glukozy. Czym wyższa intensywność, tym więcej węglowodanów jest spalane, dla uzyskania energii. Spalanie białek, dostarcza energii, jedynie, jeśli brak już zasobów glukozy egzogennej lub endogennej. Intensywność wysiłku powinna być interpretowana w odniesieniu do możliwości metabolicznych konkretnej osoby. Miernikiem możliwości metabolicznych jest puls i moc na progu mleczanowym, a także, znana liniowa zależność, pomiędzy pulsem i mocą generowaną przez organizm. Tematy te, szeroko poruszane na blogu, stanowią podwaliny nowoczesnej medycyny sportowej, a zarazem odpowiedzi na wiele pytań, dotyczących diety i odżywiania.

Okres przed wyścigiem powinien być wykorzystany na odbudowę zasobów glikogenu, służyć temu powinna odpowiednia podaż energii, ze szczególnym naciskiem na węglowodany. Spożywane ich dawki mogą sięgać od 8 do 12 gramów na kg masy ciała na dobę, podzielone na 5-7 posiłków. Należy wykorzystać fakt dobrego ukrwienia przewodu pokarmowego, ponieważ podczas wyścigu tego komfortu już nie będzie.

Niezmiernie ważny jest też posiłek bezpośrednio poprzedzający wydarzenie sportowe. Jego celem jest zapewnić dowóz egzogennych węglowodanów, porzebnych w czasie wysiłku. Czas spożycia tego posiłku, zazwyczaj poprzedza start o 1 do 4 godzin. Jednak optimum dla konkretnego zawodnika powinno być ustalone w drodze eksperymentalnej. Zależy to od indywidualnej prędkości opróżniania żołądka, perystaltyki jelit i stanu nawodnienia. Spożycie zbyt wcześnie, jest relatywnie bezpieczne, może jednak być związane z wystąpieniem hipoglikemii w początkowym okresie wysiłku, co za tym idzie, obniżeniem wydolności. Zjedzenie zbyt późno i rozpoczęcie wyścigu, zanim żołądek częściowo się opróżni, skutkować może dyskomfortem, brakiem możliwości prawidłowego nawadniania w czasie wysiłku, a w skrajnym przypadku wymiotami. Zaleca się, aby ten posiłek składał się z relatywnie dużej masy (200 - 300g), produktów o niskim indeksie glikemicznym, jak np. makaron.

W przeciwieństwie do okresu treningowego, nie poleca się stosowania produktów o dużej zawartości błonnika ani też bogatobiałkowych. Podobnie, produkty tłuste, pomimo wysokiej zawartości energii (do 7-9 kcal/gram), nie służą przy okazji startu, zwalniając na długo opróżnianie żołądka i pasaż treści jelitowej, uniemożliwiając prawidłowe nawadnianie i szybkie wchłanianie, co paradoksalnie zmniejsza możliwości utylizacji tej energii. Spożycie tego typu pokarmu mogłoby spowodować problemy żołądkowe podczas jazdy. W tym czasie bowiem, zwłaszcza przy wysokiej intensywności, wydzielane aminy katecholowe, powodują skurcz naczyń trzewnych i względne niedokrwienie jelit` i żołądka ze wszystkimi następstwami, jak biegunka i wymioty. Zaburzenia ukrwienia występują z różną częstością, a nasilają je wcześniejsze intensywne treningi.

Problem ten rzadziej występuje w bieganiu, niż kolarstwie, z powodu taperingu, czyli stopniowego zmniejszania objętości treningowych, w okresie bezpośrednio poprzedzającym start. Jak się okazuje, nawet okres kilku dni, pozwala zregenerować nabłonek jelit i żołądka oraz wygoić nieżyt nadżerkowy, pojawiający się po zbyt intensywnym, długotrwałym wysiłku. Pomimo pożytecznego działania taperingu na funkcję jelit, a co za tym idzie stan odżywienia, zasoby glikogenu, a także możliwości nawadniania i odżywiania podczas startu, nie wydaje się, aby zwiększał on szanse na poprawę wydolności i rezultaty czasowe w kolarstwie.

Posiłek spożyty przed startem nie powinien też swoją objętością i charakterem spowodować uczucia pełności, a tym samym, uniemożliwić uzupełnienia płynów w czasie bezpośrednio poprzedzającym rozpoczęcie wysiłku. Przed wyścigiem należy wypić 300-400ml izotonicznego, lub lekko hipotonicznego (wspomaga wchłanianie) płynu, celem uzupełnienia objętości wewnątrznaczyniowej. Po starcie, produkcja ciepła powoduje szybkie rozszerzenie łożyska naczyń skórnych, a wysiłek rozszerza też naczynia zaopatrujące mięśnie. Dodatkowa dawka płynów pozwoli więc nie popaść we 'względne' odwodnienie. Podanie napoju przed startem nie jest mniej ważne od zjedzenia posiłku, a reperkusje braku uzupełnienia tej objętości płynowej obejmują spadek wydolności w porównaniu z zawodnikami korzystającymi z owej praktyki. W konsekwencji można więc liczyć się ze stratą czasową.

W przypadku pojawienia się głodu tuż przed startem, nie należy obawiać się spożycia dodatkowej porcji pokarmu o wysokim indeksie glikemicznym. Tego typu posiłek zawsze zawiera szybko przyswajalne węglowodany i niewielką ilość włókien, tym samym nie zwalnia pasażu jelitowego i nie podrażnia błony śluzowej przewodu pokarmowego. Okres kilku minut przed startem w wyścigu, w zasadzie można traktować jak okres śródwysiłkowy i stosują się do niego wszystkie zasady odżywiania podczas wysïłku. Należy niemal wyprzedzać głód i pragnienie, jedząc i pijąc zanim pojawi się ochota. Więcej o żywieniu podczas zawodów i treningu w kolejnej części, tymczasem zapraszam do przeczytania innych artykułów na blogu.

niedziela, 19 sierpnia 2012

                Sport wydolnościowy, jak jazda na rowerze i bieganie stanowią swoiste możliwości podwyższenia tempa metabolizmu i bywają używane jako regulatory masy ciała, a także sposoby zmiany kompozycji ciała. Pozwalają zmienić relacje pomiędzy masą mięśniową  i tłuszczową. Dieta w sporcie powinna spełniać określone główne zadania. Należą do nich zapewnienie odpowiedniej ilości energii w porównaniu do energii zużywanej przez organizm w określonym czasie. Długookresowo, tj. w czasie kilku miesięcy, pozwala to zwiększyć lub zmniejszyć masę ciała, w okresie dobowym i godzinowym, pozwala osiągnąć cele treningowe. Dawkowanie węglowodanów i białek w okresie okołotreningowym jest krytyczne z dokładnością do kilkudziesięciu minut. Sport wydolnościowy wymaga suplementacji i diety także w czasie wykonywania wysiłku.

dieta w sporcie wydolnościowym

                W ogólnym ujęciu populację ludzką można podzielić, ze względu na tempo podstawowej przemiany materii. W badaniach prowadzonych w Szkocji, zbadano 150 osób i stwierdzono znaczne rozbieżności w tempie podstawowego metabolizmu. Wynosiło ono od 1000kcal/dobę po 2500kcal/dobę. Analizując pozostałe wskaźniki biometryczne osób poddanych badaniu, naukowcy doszli do wniosku, że tempo zależy od ilości tkanki mięśniowej i tłuszczowej, a także relacji pomiędzy nimi. Są jednak aspekty zupełnie niewyjaśnione. Tak więc obecne w sieci kalkulatory mogą szacować tempo metabolizmu bazując na danych biometrycznych, nie są w stanie w dużą dokładnością przewidzieć wyniku. Różnica pomiędzy przewidywanym, a rzeczywistym może sięgać nawet 1000kcal. W związku z tym pozwolę sobie nie umieszczać na tej stronie kalkulatora, bo wyniki mogą wprowadzać w błąd.

                Istnieją jednak pewne normy i stałe dotyczące odżywiania, o których należy wspomnieć. Zapotrzebowanie na węglowodany wynosi od 2g na kilogram masy ciała na dobę, przy braku aktywności fizycznej, aż do 8g przy 20 godzinach ćwiczeń w tygodniu (to prawie 2h dziennie). Te liczby w przypadku białek są mniej zróżnicowane. 0.8g białka na kg masy ciała na dobę przy siedzącym trybie życia, aż do 1.2g przy silnej wydolnościowej aktywności fizycznej. Osoby budujące masę ciała powinny jednak zwiększyć ilość białka aż do 2g/kg/24h. Sprawdźmy jak wyglądają te liczby w porównaniu do statystycznego mężczyzny.

                70kg osoba, prowadząca bardzo aktywny tryb życia powinna spożywać około 400-500g węglowodanów na dobę, dostarczając tym samym (1g węglowodanów przyswajalnych ma 4kcal) 1600 – 2000kcal.  W tym samym momencie, dostarczanie białka powinno wynosić od 80 do 90g/dobę. Wydaje się, że nie jest to wiele. Sprawdźmy jednak jak wygląda masa zwykłego posiłku zawierającego te elementy.

Śniadanie:  300 ml mleka krowego 2%, płatki musli z owocami, 2 kromki chleba i z szynką z indyka (około 550kcal, Białko: 26.7g, tłuszcze: 9.7g, węglowodany: 91.1g) [ zobacz posiłek ]

Obiad: Kurczak z warzywami 250g z ryżem białym 300g i sok jabłkowy 250g (około 1400kcal, Białko: 49.4g, tłuszcze: 16g, węglowodany: 257.8g) [ zobacz posiłek ]

Przekąska po i na treningu: banan 200g, baton Mars 42g, w sumie: (Około  383kcal, Białko: 3.7g, tłuszcze: 8.6g, węglowodany: 76.1g) [ zobacz posiłek ]

Kolacja : bagietka francuska 60g, polędwica luksusowa 30g, brzoskwinia 200g,  jogurt naturalny 2% tłuszczu 250g (470kcal,  Białko: 24.3g, tłuszcze: 10.4g, węglowodany: 77.5g) [ zobacz posiłek  ]

Zapewnia to 106 gramów białka (jest to odpowiednia ilość), 500g (2000kcal) z węglowodanów, oraz 45g tłuszczy (dodatkowe 400kcal).

                Tego typu zbalansowane posiłki powinny wystarczyć dla pokrycia zapotrzebowania energetycznego organizmu w większości przypadków średniego i intensywnego treningu wytrzymałościowego. Należy jednak pamiętać o tym, że w momencie zmiany planu treningowego i rodzaju wykonywanego wysiłku, pojawia się kilkutygodniowy pik zapotrzebowania na białko. Wtedy ilość białka należy zwiększyć do około 2g/kg/24h. W tej diecie brakuje również dodatkowych 70-80 g białka, potrzebnych w okresie budowania masy mięśniowej.

                Przeanalizujmy teraz godzinowy rozkład posiłków, ponieważ to właśnie godzinowa, a nie dzienna kinetyka jest kluczowa w osiągnięciu celów treningowych. Wynika to z kilku zależności. Pierwszą z nich jest brak możliwości gromadzenia aminokwasów z białek. Sprawia to, że białko powinno być dostarczane możliwie często.

                Drugim elementem jest hierarchia spalania składników. Organizm może spalać białka, celem uzyskania energii, ale robi to tylko wtedy, kiedy brak glikogenu i węglowodanów z zewnątrz. Implikacje dla trenującego sportowca, nakazują suplementować węglowodany podczas długotrwałego wysiłku, a także podać  przekąskę bogatą w węglowodany po wysiłku, zanim spożyjemy białkowy posiłek. Dostarczenie najpierw białka spowoduje ‘zmarnowanie’ części aminokwasów.

                Jeżeli podczas wysiłku nie udało się z jakiejś przyczyny spożyć posiłku węglowodanowego, prawdopodobnie organizm uszczuplił swoje zasoby białkowe, co zmusza do zwiększenia ilości przyjętych białek podczas kolejnych godzin/dni, dla odbudowy tkanek.

                W kolejnych notkach postaram się skupić na spożywaniu pokarmu w skali minutowej w okresie okołotreningowym, wyścigach i po nich. Zapraszam też do lektury innych artykułów z medycyny sportowej.

środa, 08 sierpnia 2012

kalkulator spalonych kalorii podczas bieganiaBieganie stanowi dobry sposób obniżenia masy ciała. Kalorie spalone podczas biegania można przeliczyć przy pomocy kalkulatora kalorii. Wiadomo, że  godzina biegu ze średnią intensywnością stanowi wydatek energetyczny sięgający 350 kcal i zależy on głównie od masy ciała. Niestety te rozważania nie są dokładne, ponieważ zarówno pojęcie intensywności jak i ekonomii biegania, konieczne precyzyjnym kalkulatorom, trudno zdefiniować liczbowo bez specjalistycznych pomiarów. Aby wynik użycia kalkulatora kalorii spalonych podczas biegania uznać za przystający do rzeczywistości w dużym stopniu, należy mu dostarczyć dane z urządzenia gps, najlepiej wzbogacone o zapis pulsu w czasie rzeczywistym. 

Takie pulsometry są kupowane jedynie przez nielicznych sportowców amatorów, ich cena przekracza częstokroć tysiąc złotych. W dzisiejszych czasach wiele osób dysponuje jednak smartfonem z modułem gps, co pozwala na zapisanie danych lokalizacji w odstępach czasu. Daje to informacje o prędkości, a po nałożeniu na mapę topograficzną, umożliwia pełne i dokładne ustalenie mocy podczas biegania. Przykładem takiej aplikacji online jest stworzony przeze mnie profiler evaluator, dający natychmiastowy pogląd na średnie i statystyczne wartości mocy, spalonych kalorii, prędkości w czasie a także nachylenia profilu terenu. Można więc nazwać go zaawansowanym kalkulatorem kalorii. W praktyce może on znacznie więcej.

Co jednak, jeżeli użytkownik dysponuje jedynie czasem i przebiegniętym dystansem? Oczywiście pozwoli to z dużym przybliżeniem oszacować moc, a co za tym idzie także i wydatek energetyczny. Napisanie takiego prostego kalkulatora spalonych kalorii podczas biegania bazuje na liniowej zależności mocy i prędkości stwierdzonej przez naukowców oraz założeniu relatywnie płaskiego profilu terenu. Kalkulator taki w przeciwieństwie do opisanego w poprzednim akapicie nie przyda się do oceny podbiegów, czy też jeśli uprawiamy biegi górskie.

masa ciała : [kg]

przebiegnięty dystans : [km]

czas treningu : [min]


Przebiegnięty dystans odpowiada zjedzonym produktom:

Pozwoliłem sobie napisać taki kalkulator spalonych kalorii i umieścić go na stronie jako przykład. Rekomenduję użycie go jedynie, jeśli nie Czytelnik nie ma dostępu do smartfona z gps lub specjalnego pulsometru. Gdy jednak poważnie myślimy o kontroli kalorii, biegamy po górach, ćwiczymy podbiegi lub po prostu lubimy liczby, warto zainwestować kilkaset złotych w nowoczesny telefon z Androidem i móc logować swoje trasy z dokładnością do kilku metrów. Pozwoli to wykorzystać cały potencjał narzędzi online służących pomiarom ilości spalonych kalorii podczas biegania lub jazdy na rowerze.

Czasem dobrze jest przyrównać uzyskany wynik do kaloryczności często spożywanych posiłków celem unaocznienia relacji pomiędzy spożytym pokarmem a ilością spalonych kalorii. Racjonalizuje to uprawianie sportu, a wielu osobom dostarcza pokładów dodatkowej motywacji do osiągnięcia założonego celu, jakim może być urata masy ciała. Zainteresowanych przeliczeniem kalorii za pomocą licznika kalorii zapraszam na stronę poświęconą temu projektowi.

czwartek, 26 lipca 2012

Pierwszą część artykułu, zakończyliśmy na napisaniu funkcji wyszukującej pojedyncze słowa w bazie danych i aktualizującej tablicę trafności wyszukiwania. Pozostaje teraz posortować wyniki wyszukiwania tak, aby na samej górze były te najtrafniejsze. 

Sortowanie wyników wyszukiwania

Własna wyszukiwarka w javascript

4. Funkcja sortująca wyniki używa algorytmu sortowania bąbelkowego. Wykorzystuje ona globalną tablicę 'phraseMatchArray' przechowującą liczbowo wyrażone sumy trafności porównań szukanych słów i wartości rekordów bazy danych. Indeksy tej tablicy są skorelowane z indeksami bazy danych, indeks ‘x’ tablicy odpowiada indeksowi ‘x’ bazy danych. Jednak ani tablica ani związane z nią rekordy bazy danych nie zostały jeszcze posortowane. Funkcja 'sortResults'  najpierw tworzy pary liczbowej trafności i indeksu odpowiedniego rekordu bazy w postaci obiektów, a następnie sortuje je bąbelkowo po liczbowej trafności ( do, while ) aż podczas kolejnej pętli ani jedna para nie zostanie zamieniona miejscami ('flipsNumber = 0'). Przeczytaj więcej o sortowaniu bąbelkowym. Jest to warunek zakończenia sortowania.

 Nie wszystkie jednak wyniki są sortowane. Są to jedynie te o najwyższej i o 1 niższej liczbie trafień. Załóżmy, że użytkownik wpisze 3 słowa w pole wyszukiwania. Wśród wyników znajdzie się prawdopodobnie grupa rekordów z dopasowanymi trzema, dwoma, i jednym wyrazem z tej frazy. Grupa z dopasowanym jednym  wyrazem będzie najliczniej reprezentowana, ale jest też najgorzej dopasowana. Można więc zrezygnować z jej wyświetlenia i pozostać jedynie z zaprezentowaniem użytkownikowi rekordów z trzema i dwoma trafieniami. Liczbę maksymalnych trafień określa funkcja 'matchedPhrasesMaximum'.  Można to zmienić, ale zbytnie rozszerzenie powoduje wyświetlenie zbyt dużej liczby wyników, wydłuża czas sortowania, a także wyświetlenia wyników.

///////////////////////////////////////////////////
function sortResults() {
var sortedArray = new Array();
    var count=0;
    for(var i=0,len=phraseMatchArray.length;i<len;i++) {
        if (phraseMatchArray[i]>matchedPhrasesMaximum()-1)
         {
        var sortedPair = {
        matchedPhraseDataBaseIndex:i, 
        sortedBy:phraseMatchArray[i] 
        };
        sortedArray[count] = sortedPair;
        count++;
        }
    }

    do {
    var flipsNumber=0;
        for(var i=1,len=sortedArray.length; i<len;i++) {
            if (sortedArray[i].sortedBy>sortedArray[i-1].sortedBy) 
            {
            var tmpVar = sortedArray[i];
            sortedArray[i] = sortedArray[i-1];
            sortedArray[i-1] = tmpVar;
            flipsNumber++;
            }
        }
    } while (flipsNumber>0);
    
    return sortedArray;
}
///////////////////////////////////////////////////

 

Wyświetlenie wyników wyszukiwania

 5. Wyświetlenie wyników wyszukiwania stanowi ostatni etap tworzenia wyszukiwarki. Wystarczy użyć tablicy par indeksów rekordów i trafień w posortowanej postaci i wypisać rekordy o wybranych indeksach w kolejności. W tym celu tworzymy warstwę 'div' o identyfikatorze 'id = outputArea' i używając funkcji 'innerHTML'  wypisujemy wszystkie rekordy umieszczone w tablicy 'sortedResults' wraz z liczbą porządkową.

///////////////////////////////////////////////////
function printResults(sortedResults) {
var outputArea = document.getElementById("outputArea");
outputArea.innerHTML="";

    for(var i=0;i<sortedResults.length;i++) {
     var record=produkty[sortedResults[i].matchedPhraseDataBaseIndex];
    outputArea.innerHTML = (i+1) + '. '  + record + '
'
; } } ///////////////////////////////////////////////////

Kod warstwy div, wyświetlającej wyniki może wyglądać w ten sposób :

<div id="outputArea" style=
"height:200px;overflow:auto;margin:10px"></div>

Wykrywanie zakończenia wpisywania danych przez użytkownika

6. Ustalmy, czy użytkownik zakończył już pisanie frazy w polu input, aby uruchomić silnik wyszukiwarki. Ważne jest, aby uruchomić go w odpowiednim czasie. Jeżeli wyszukiwarka włączy się w trakcie pisania, wypisanie wszystkich rezultatów, czyli funkcja innerHTML spowoduje chwilowe zamrożenie ekranu, w tym także pola z wprowadzanymi przez użytkownika danymi.

<input type="text" id="searchedPhrase" style="
width:350px; margin:10px" onkeydown="setInterv()">

Idea, którą zdecydowałem się zastosować jest następująca. Wciśnięcie dowolnego przycisku w polu tekstowym, w tym napisanie tekstu, jaki użytkownik zamierza wyszukać, powoduje wywołanie funkcji ‘setInterv’, sprawdzającej czy interwał został już ustawiony (setInterval). Jeżeli nie, interwał zostaje ustawiony, jeśli tak, zostaje wyczyszczony i ustawiony ponownie na zadaną wartość. W odpowiednim odstępie czasowym zostaje wywołana funkcja ‘checkSearch’. Jej zadaniem jest sprawdzenie, czy od ostatniego wywołania zawartość pola tekstowego zmieniła się. Wyszukiwanie rozpoczyna się, jeżeli zawartość nie została zmieniona przez okres zdefiniowany w interwale. Jest to rozumiane jako zakończenie wprowadzania tekstu przez użytkownika.

function checkSearch() {
 var searchedPhrase = document.getElementById("searchedPhrase");
    if (lastSearchedValue!=searchedPhrase.value) {
    lastSearchedValue = searchedPhrase.value;
    } else {
     clearInterval(refreshInterval);
     refreshInterval = 0;
     initEngine();
    }
}
////////////////////////////////////////////////////
function setInterv() {
    if (refreshInterval != 0) {
    clearInterval(refreshInterval);
    refreshInterval = setInterval("checkSearch()",300);
    } else {
    refreshInterval = setInterval("checkSearch()",300);
    }
}

Funkcja inicjalizująca wyszukiwanie (initEngine()) pobiera wyszukiwaną frazę z pola tekstowego, następnie ustawia tablicę globalną trafień i inicjalizuje ją z zerowymi wartościami indeksów, aby umożliwić zwiększanie wartości przez funkcje ustalania trafień w rekordy z bazy danych.

////////////////////////////////////////////////////
function initMatchedPhrasesArray() {
    for(var i=0;i<produkty.length;i++) {
    phraseMatchArray[i]=0;
    }
}
////////////////////////////////////////////////////
function initEngine() {
 var searchedPhrase = document.getElementById("searchedPhrase");
 phraseMatchArray = new Array();
 initMatchedPhrasesArray();
 performSearch(searchedPhrase.value);
}
////////////////////////////////////////////////////

To wszystko, co jest potrzebne do zbudowania prostej wyszukiwarki w javascript. Kod ten można dowolnie modyfikować, komplikować nieco mechanizmy wyszukiwania, celem wyświetlania bardziej trafnych wyników wyszukiwania. Zapraszam też do komentowania kodu i jego zastosowań w komentarzach na blogu.

 Działający przykład wyszukiwarki na stronę w javascript. 

Zobacz też :

  1. Część pierwsza tutorialu o tworzeniu własnej wyszukiwarki www na stronę internetową w javascript
  2. Podstrona bloga o programowaniu

Budowa silnika wyszukiwarki.

Własna wyszukiwarka w javascript na stronę internetową www                Postarajmy się napisać prostą wyszukiwarkę w javascript. Silnik wyszukiwarki ma za zadane włączyć się automatycznie w momencie w którym użytkownik skończy pisać albo też zrobi przerwę. Wpisana przez użytkownika fraza nie musi idealnie pasować do zapisanego w bazie danych rekordu, powinna być raczej podzielona na słowa, a wysokość w wynikach wyszukiwania powinna zależeć od ilości dopasowanych słów. Dyskusyjne jest stosowanie wyszukiwania całych słów, zamiast jedynie pasującego podciągu. W pierwszym przypadku, wpisanie przykładowego słowa 'zup' wiedzie do wyszukania 'zup', 'zupa', 'zupka', 'szczupak', 'zupełny' itp. Wyniki wyszukiwania są więc szersze. W drugim przypadku wyszukany zostanie tylko rekord zawierający szukany ciąg. Wybór sposobu wyszukiwania pozostawiam czytelnikom. Nic nie stoi na przeszkodzie, aby promować znalezienie dokładnej szukanej frazy poprzez umieszczenie jej na szczycie wyników wyszukiwania.

 

Dlaczego własna wyszukiwarka javascript jest warta napisania ?

 Jeżeli Czytelnik jest właścicielem niewielkiej strony internetowej, nie musi inwestować serwer z php i mysql do stworzenia własnej wyszukiwarki. Dodawanie nowych treści i słów kluczowych do bazy w pliku javascript jest bardzo łatwe. Dodatkowo wyszukiwarka działa dość szybko na komputerze użytkownika.

Jeśli natomiast Czytelnik ma duży serwis, zapewne wie, że z racji dużej mocy obliczeniowej komputerów końcowych, część zadań, które normalnie spoczywałyby na serwerze, przenosi się na komputery użytkowników, dzięki JavaScript. W tym czasie moc obliczeniowa serwera może być wykorzystana na obliczenia, które nie są możliwe na komputerze użytkownika. Sama baza danych js może i powinna być tworzona przez skrypt php po stronie serwera, a także serwer może zająć się dodawaniem do niej nowych rekordów.

 

Zaprojektujmy własną wyszukiwarkę.

1. Baza danych to podstawa. W niej umieszczone są rekordy przeszukiwane przez silnik wyszukiwarki. W przypadku prostej wyszukiwarki jest to tablica jednowymiarowa, zawierająca ciągi (string) rozumiane jako pojedyncze rekordy. Nic nie stoi na przeszkodzie, aby tablica była dwuwymiarowa albo też zawierała obiekty. W tych przypadkach kosztem dłuższego o kilka linijek kodu można zyskać przejrzystość i szybkość wyszukiwania. Druga cecha jest szczególnie istotna przy bazach zawierających po kilka tysięcy rekordów albo też długie rekordy, które można zastąpić słowami kluczowymi, żeby nie przeszukiwać długiego tekstu.

var rekordy = new Array("rekord 1","rekord 2", ... , "rekord n");

 Rekordy mogą zawierać wiele informacji oddzieloneza pomocą przecinków, po znalezieniu frazy można je podzielić na elementy składowe i każdy z nich odpowiednio wykorzystać.

var rekordy = new Array("nazwa, treść, http://jakiś-adres.pl
","nazwa 2, treść 2, http://jakiś-adres-2.pl");

2. Funkcja 'performSearch' stanowi najważniejszy element składowy naszej wyszukiwarki.   dzieli ona frazę 'totalExpression' wpisaną przez użytkownika na pojedyncze wyrazy(elementy) i wyszukuje ich wystąpień w rekordach bazy danych przy użyciu funkcji 'searchQueryElement' . Jak widać znak podziału to spacja. Funkcja split dzieli łańcuch i zwraca tablicę łańcuchów. Jeśli brak znaku podziału w przeszukiwanym łańcuchu, cały bazowy łańcuch będzie w indeksie '0'.  Na uwagę zasługują dwie zmienne phraseMinimumLength i wordMinimumLength. Ustalają one jakiej minimalnej długości słowa mają być wyszukiwane, a także jakiej długości może być minimalnie wyszukiwana fraza. U siebie obie te zmienne  zainicjowałem z wartością 2. Następnie wyniki są sortowane funkcją 'sortResults', zwracającą je pod postacią tablicy 'sortedArray'i wyświetlane przez 'printResults'.

////////////////////////////////////////////////////
function performSearch(totalExperssion) {
 var cursorPosition=0;
 var resultsArray=totalExperssion.split(" ");
 if (totalExperssion.length>phraseMinimumLength) {
    do {
        if (resultsArray[cursorPosition].length>wordMinimumLength) {
        searchQueryElement(resultsArray[cursorPosition]);
        }
    cursorPosition++;
    } while (resultsArray.length>=(cursorPosition+1));
    
    
    var sortedArray = sortResults();
    printResults(sortedArray);
 }
}
////////////////////////////////////////////////////

  

3. Funkcja 'searchQueryElement' wyszukuje pojedynczego słowa w bazie danych i jeśli znajdzie (wynik szukania różny od-1),  zwiększa wartość globalnej tablicy 'searchQueryElement' o indeksie i, odpowiadającym przeszukanemu rekordowi o 1. Tu jest miejsce w którym można sprawdzić, czy fraza stanowi całe słowo, czy jedynie podciąg ciągu i promować dokładne wyszukania dodając do odpowiedniego indeksu tablicy 'searchQueryElement', premiowaną wartość. Tablica ta będzie podstawą następującego później sortowania wyników.

/////////////////////////////////////////////////// 
function searchQueryElement(phrase) {
    for(var i=0, len=produkty.length;i<len;i++) {
    var result = produkty[i].search(phrase);
        if(result!=-1) {
        phraseMatchArray[i]++;
        }
    }
}
///////////////////////////////////////////////////

 W kolejnej części przeanalizujemy algorytm sortowania bąbelkowego, funkcję wypisującą wyniki wyszukiwania na ekran i dynamiczne wyzwalanie wyszukiwania, kiedy użytkownik zakończy wprowadzanie frazy. 

 Działający przykład wyszukiwarki na stronę w javascript. 

Zobacz też :

  1. Część druga tutorialu o tworzeniu własnej wyszukiwarki www na stronę internetową w javascript
  2. Podstrona bloga o programowaniu.
wtorek, 24 lipca 2012

                Według powszechnej opinii lekarzy, bieganie i jazda na rowerze, czyli wysiłek fizyczny tlenowy jest zbawienny w chorobach serca i układu krążenia. Choć nadciśnienie tętnicze, można zaliczyć do dysregulacji układu krążenia, której podstawy leżą w równowadze hormonalnej i nerwowej, ma ono kluczowe znaczenie w rozwoju i pogłębianiu innych chorób serca, naczyń i innych narządów organizmu. 

Rozmiary badania

                W Finlandii miało miejsce gigantyczne badanie, w którym wzięło udział ponad 20 tysięcy zdrowych osób, podczas którego przez 11 lat oceniano okoliczności pojawienia się nadciśnienia tętniczego. Uczestnicy wypełniali kwestionariusze, informując naukowców o trybie życia, uprawianym sporcie i wysiłku fizycznym. Ilość wysiłku podzielono na 3 kategorie: podczas pracy, dojazdu do pracy i czasu wolnego. W każdej z nich można było zadeklarować się jako mało i średnio-wysoko aktywny. W kolejnych kategoriach była to praca siedząca lub wymagająca ruchu lub wysiłku, dojazd do pracy wymagający lub nie przynajmniej 30 minut chodzenia lub jazdy na rowerze i czas wolny, wraz z ilością uprawianego sportu, jak bieganie, kolarstwo i tym podobne. Systematyczne mierzono BMI i ciśnienie tętnicze.

przyczyny nadciśnienia tętniczego

Występowanie nadciśnienia.

                Podczas eksperymentu u 787 mężczyzn i 813 kobiet pojawiło się nadciśnienie tętnicze. Stanowi to 10% populacji. Roczne średnie prawdopodobieństwo populacyjne wystąpienia tej choroby wynosi więc 1%. Sprawdźmy jaki wpływ mają inne rejestrowane podczas eksperymentu elementy.

Czynniki sprawcze i ochronne. Przyczyny nadciśnienia.

                Mężczyźni u których podczas eksperymentu pojawiło się nadciśnienie, byli starsi (45 vs 43 lata), mieli wyższą masę ciała – BMI 27 vs 26, krótszą naukę za sobą (9lat vs 10 lat), jednak różnice statystyczne nie szokują.

                Nieco zaskakujące, że  nadciśnienie pojawiało się częściej u mężczyzn niepalących, niż palących. W tym przypadku grupę podzielono na 3 podgrupy – nigdy niepalących, palących kiedyś, ale nie podczas eksperymentu i palaczy. Procentowy udział palaczy w grupie z nadciśnieniem tętniczym wynosił 31%, natomiast w grupie bez nadciśnienia 33%. Palacze mieli więc wyższy udział w grupie bez nadciśnienia. Co jest jeszcze ciekawsze, grupa niegdyś paląca stanowi 37% osób z nadciśnieniem, natomiast około 30% bez nadciśnienia. Wygląda na to, że rzucenie palenia wiąże się ze zwiększeniem ryzyka nadciśnienia. Oczywiście od zawsze niepalący stanowią przewagę w grupie bez nadciśnienia – 37% vs 33%.

                W przypadku nadciśnienia tętniczego i jego relacji w stosunku do masy ciała, a konkretnie wskaźnika BMI, nadciśnienie występuje znacznie częściej w przypadku mężczyzn otyłych (BMI>30), stanowią oni 20%, podczas, gdy w grupie bez nadciśnienia jedynie 13.6%. Podgrupy z  BMI 25-29.9 są prawie równoliczne w grupie z i bez nadciśnienia tętniczego. Jak można się spodziewać, osoby z BMI poniżej 25, liczniejsi są w grupie bez nadciśnienia tętniczego. 

                Aktywność fizyczna także wpływa na występowanie nadciśnienia u mężczyzn. W podgrupie z niską aktywnością fizyczną 7% stanowią osoby bez nadciśnienia, ale prawie 12% te z nadciśnieniem. W podgrupie o wysokiej aktywności fizycznej 55% stanowią osoby bez nadciśnienia i jedynie 51% te z nadciśnieniem.

Części przyczyn da się uniknąć.

                Jeżeli więc chcemy zminimalizować ryzyko pojawienia się nadciśnienia, należy dbać o dobrą kondycję fizyczną, starać się utrzymać masę ciała przy BMI niższym niż 25, a także nigdy nie rozpoczynać palenia tytoniu.

| < Czerwiec 2017 > |
Pn Wt Śr Cz Pt So N
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
Tagi
Jestem członkiem agregatora naukowego researchblogging.org