SEO Auto Linker

Tagi: , , , . Data: Styczeń 8th, 2012

SEO Auto Linker to niesamowicie prosty w obsłudze, skuteczny w działaniu plugin do wordpress’a automatycznie linkujący zdefiniowane przez frazy do zewnętrznych i wewnętrznych stron.

Po instalacji definiujemy pary fraza – link, jeżeli fraza pojawi się w treści posta zostanie automatycznie podlinkowana. Dodatkowo można ograniczyć liczbę podlinkowanych fraz w poście oraz ograniczyć linkowanie do typu posta (post/strona). Dla jednego linku można podać wiele fraz oddzielając je przecinkiem.

Działa bez zarzutu, linkuje jedynie w szczegółach portu, nie ma problemu z polskimi znakami, linkuje frazy w tagach HTML typu [span], nie linkuje fraz w nagłówkach [hx]. Polecam.

Oprogramowanie do sklepu internetowego – które wybrać?

Tagi: , . Data: Grudzień 10th, 2011

To że przyszłość zakupów jest w internecie, tego tłumaczyć nikomu raczej nie trzeba, co rusz powstają nowe sklepy internetowe… chodzą też słuchy, że w e-commerce podobno są pieniądze… skoro tak to i ja zapragnąłem spróbować.

Jakiś czas temu stanąłem zatem przed decyzją wyboru platformy e-commerce dla sklepu internetowego. Na rynku dostępnych jest wiele różnych platform lub produktów box’owych, niestety wcale nie znaczy, że jest z czego wybierać.

Poniżej garść informacji, kilka porad i linków dla osób planujących założenie własnego sklepu w necie. Mam nadzieję, że komuś się przyda.

Osoba, która chce założyć sklep internetowy, ma w zasadzie do wyboru 3 opcje:

  1. dzierżawę oprogramowania wraz z hostingiem (model SaaS),
  2. zakup oprogramowania i własny hosting,
  3. stworzenie dedykowanego oprogramowania sklepowego.

Dzierżawa oprogramowania wraz z hostingiem (model SaaS)

Dzierżawa oprogramowania wraz z hostingiem jest najprostszą drogą do założenia własnego sklepu w internecie, na IAI-Shop można to mieć już za 79 zł miesięcznie a na istore.pl za 19,90 zł + procent od obrotu.

Największym plusem dzierżawy jest pozbycie się odpowiedzialności za funkcjonowanie i działanie zarówno oprogramowania jak i hostingu, w zamian za miesięczny abonament dostajemy gotowy sklep z wdrożonymi wieloma funkcjonalnościami oraz zapewnienie, że ktoś będzie czuwać nad jego działaniem.

W tym wypadku nie dostaniemy dostępu do plików sklepu, nie będziemy mogli modyfikować mechanizmów sklepu a jedynie w mniejszym lub większym stopniu wpłynąć na wygląd grafiki Zmiana układu elementów może okazać się dużym problemem, gdyż każdy z gotowych systemów narzuca swoją konwencję. Niestety nie będziemy mogli sami ani rozbudowywać sklepu o nowe mechanizmy, ani optymalizować go pod swoim kątem, jesteśmy zdani na to, co zdecyduje się wdrożyć forma oferująca platformę.

Opcja ta dobra jest dla osób dysponujących niewielkim budżetem startowym, niewielką wiedzą programistyczną-techniczną oraz dla tych, którzy chcą po prostu niewielkim kosztem wypróbować internetowy kanał sprzedaży.

Platformy oferujące dzierżawę wraz z hostingiem to wcześniej wspomniane: IAI-Shop, iStore oraz RedCart, InteliShop, Sote.

Zakup oprogramowania i własny hosting

Jeżeli chcemy posiadać większą kontrolę na swoim sklepem i nie boimy się słów PHP/HTML/CSS (lub mamy w zespole informatyka), to możemy wybrać opcję zakupu oprogramowania i instalację na własnym serwerze.

Jest to opcja dużo kosztowniejsza od dzierżawy, gdyż jednorazowo trzeba będzie wydać 1-2,5 tys. na oprogramowanie + 100-300 zł na serwer. W zamian dostajemy paczkę z plikami sklepu, niektóre firmy w cenie oferują instalację na serwerze klienta (np. cStore.pl) oraz zwykle kilkumiesięczny darmowy support. Oprogramowanie zawiera jeden lub kilka domyślnych wyglądów graficznych, możemy używać domyślnego lub wdrożyć dedykowany motyw graficzny.

Każdy taki system posiada zestaw szablonów, które mogą być edytowane nawet przez osoby średnio znające HTML. Teoretycznie podstawowe zmiany w wyglądzie sklepu nie powinny sprawić dużych problemów, w praktyce jednak bywa różnie… trzeba wgryźć się w logikę szablonów, niektóre oprogramowania są napisane dość topornie i nie wszystko uda się zrealizować w szablonach.

Dzięki temu, że posiadamy dostęp do plików oprogramowania sklepu internetowego, możemy ingerować w wewnętrzne mechanizmy sklepowe i po części dostosowywać je do swoich potrzeb, aczkolwiek bywa to problematyczne, gdyż oprogramowania sklepowe to kombajny zawierające miliony opcji i często najmniejsze modyfikacje są dosyć skomplikowane. Dodatkowo trzeba się liczyć z tym, że grzebiąc w kodzie możemy stracić gwarancję producenta na niezawodność oprogramowania.

Oprogramowanie sklepowe zakupić można w cStore, Sote, i-Sklep, Shoper.
Przed zakupem warto wypróbować darmowe PrestaShop, Magento,Gekosale,

Stworzenie dedykowanego oprogramowania sklepowego

W przypadku gdy posiadamy solidny budżet, możemy rozważyć stworzenie oprogramowania szytego na miarę, dzięki temu otrzymamy produkt idealnie pasujący do naszych potrzeb, zawierający te funkcjonalności, które są tylko nam potrzebne i idealnie zoptymalizowany pod kątem naszej branży.

Stworzenie od podstaw oprogramowania sklepowego wiąże się z dużo większymi zarówno kosztami finansowymi jak i dłuższym czasem realizacji. Trudno generalizować i szacować średni czas i koszt, gdyż wszystko zależy od specyfiki sklepu, jednak absolutne minimum, jakie trzeba liczyć, to 2-3 miesiące pracy i 10 tys netto (obejmuje to cały proces makiet, grafiki, cięcia, wdrażania i testowania). Oczywiście z pewnością na allegro lub zlecenia.przez.net można znaleźć oferty dużo tańsze, jednak warto sobie zadać pytanie: „Czy stać mnie na zakup fuszerki?”.

Tworząc dedykowane oprogramowanie dla sklepu internetowego nie trzeba pisać go od samego zera, mając wiedzę (lub człowieka) developerską można spróbować dostosować do własnych potrzeb któreś z darmowych oprogramowań wymienionych wyżej. Jeżeli planujemy duże zmiany, to jestem przekonany, że pójdzie o wiele łatwiej niż z dostosowaniem któregoś z płatnych rozwiązań.

Posiadanie własnego oprogramowania sklepowego to z jednej strony spory wydatek na początku biznesu internetowego i dodatkowa odpowiedzialność za stworzony soft, z drugiej strony wydatek ten może się bardzo szybko zwrócić, gdyż dostaniemy narzędzie idealnie pasujące do naszych potrzeb. Poza tym zawsze posiadamy oprogramowanie, które same w sobie również stanowi wartość.

Opcję tworzenia dedykowanego oprogramowania sklepowego polecam firmom posiadającym w miarę solidny budżet pewnym tego, co chcą osiągnąć.

W sieci można znaleźć wiele firm, które oferuję sklepy internetowe szyte na miarę, jako że sam niedawno stworzyłem takie oprogramowanie sklepowe, nie mogę nie polecić i swojej firmy. Chętnych zapraszam do kontaktu.

Mam już sklep w internecie. Co teraz?

To dopiero początek! Wbrew pozorom stworzenie sklepu w necie nie jest trudne, wystarczy kilkadziesiąt złotych miesięcznie na dzierżawę, kilka tysięcy na zakup oprogramowania lub kilkanaście na postawienie dedykowanego sklepu… schody zaczynają się dopiero później… bo jak sprawić, żeby ktokolwiek wchodził na mój sklep? A dlaczego nikt nie kupuje?

No właśnie… i wtedy zaczyna się zabawa w dodatkową optymalizację, promowanie sklepu poprzez pozycjonowanie w wyszukiwarkach, kampanie adWords, porównywarki, obecność w mediach społecznościowych, prowadzenie fanpage na Facebook’u etc…

Niestety prowadzenie sklepu w internecie to ciągła walka z konkurencją, na początku startujemy od zera, trzeba nadgonić wiele dystansu a następnie wytrwale brnąć do przodu. Możemy tym wszystkim zajmować się sami lub wynająć jedną z wielu firm, która lepiej lub gorzej ;-) zajmie się tym za nas.

Mój sklep

Na koniec czas pochwalić się swoim sklepem ŁazienkiPRO. Istniejemy od niecałego miesiąca, oferujemy wszelakie akcesoria do łazienek, czyli płytki łazienkowe, wanny, kabiny prysznicowe, całą ceramikę, baterie łazienkowe, meble oraz artykuły wykończeniowe. Swoim klientom oferujemy kompleksowe usługi, gdyż oprócz sprzedaży produktów zajmujemy się projektowaniem łazienek, a na terenie Wrocławia również usługami remontowo-montażowymi. Zapraszam.

Numerowanie listy zwracanych rekordów w MySQL

Tagi: , , , . Data: Grudzień 9th, 2011

Przy różnorakich konkursach często zachodzi potrzeba wyciągnięcia pozycji konkretnego użytkownika (wpisu w bazie) na tle innych użytkowników (wpisów) w ograniczeniu czasowym.

Czyli np. mamy 10 tys wyników gry z danego dnia i chcemy poznać pozycje w rankingu, które zajmują użytkownicy o identyfikatorach 1, 2, 3.

Oczywistym rozwiązaniem jest zwykły selekt z ORDER BY po polu z punktami i następnie iterowanie w php, jednak gdy liczba danych będzie większa taki SELECT nie wykona się lub będzie bardzo niewydajny.

Rozwiązaniem dużo lepszym jest użycie podzapytania i wykonania obliczeń numerowania na samej bazie a następnie zwrócenie do php jedynie rekordów pasujących do naszych użytkowników.

SET @row = 0;
SELECT row, user_id, name, correct FROM
   (SELECT @row:=@row+1 AS row, QR.user_id, QR.name, QR.score
    FROM quiz_results AS QR
    WHERE QR.data = '2011-11-11'
    ORDER BY QR.correct desc) AS sub
WHERE user_id IN (1, 2, 3)

Na początku inicjujemy zmienną pomocniczą @row, następnie w zapytaniu wewnętrznym „sub” inkrementujemy zmienną pomocniczą dla każdego rekordu, który zwróci baza, wybieramy też te kolumny, które chcemy przekazać do skryptu. Zapytanie zewnętrzne ogranicza listę wyników tylko do tych, które pasują do pożądanych identyfikatorów użytkowników, w kolumnie row dostaniemy pozycję użytkownika.

Jak promować serwis na Facebook’u?

Tagi: , , , , , , , , . Data: Styczeń 31st, 2011

Tego, że w dzisiejszych czasach obecność Twojego serwisu lub marki na Facebook’u jest niezbędna, tłumaczyć chyba nie trzeba. Jeżeli Cię tam nie ma – tracisz, gdyż Twoja konkurencja już tam jest i czerpie z tego profity.

Okej, zatem mając serwis internetowy (aka marka/firma) i konto na fejsie, jak mogę czerpać tego korzyści?

1. Fanpage/likepage

Fanpage/Likepage to podstawowe, centralne miejsce Twojej egzystencji i promocji na FB. Fanpage skupia społeczność, która lubi lub w jakiś sposób identyfikuje się z Twoją marką. Jest to zatem idealne miejsce do promowania marki, jej produktów oraz do wygodnej dwustronnej komunikacji z jej odbiorcami.

Samo zagadnienie skutecznego prowadzenia fanpage’a jest bardzo rozległe i zasługuje ma osobny artykuł, tutaj jedynie króciutko wspomnę o kilku najważniejszych zasadach:

  • Obsługa social media nie jest standardowym etatem trwającym ustalone 4 czy 8h dziennie. Decydując się na wyjście do internautów musisz być świadomy, że internet nigdy nie zasypia i obcowanie ze społecznością będzie się odbywać zarówno w weekend, wieczorem jak i w nocy. Musisz zapewnić stałą obsługę fanpage, tak abyś był w stanie reagować na różne zaistniałe sytuacje.
  • Prowadząc fanpage powinieneś skupiać się na tym, co interesuje społeczność skupioną wokół niego. To, że sprzedajesz np. buty, nie oznacza, że społeczność zainteresowana jest produkcją tych butów lub różnymi detalami branżowymi lub firmowymi. Fanpage nie może być nudny, musisz stale animować i angażować swoją społeczność i tym samym zdobywać coraz większą liczbę like’ów i komentarzy.
  • Wygląd fanpage powinien być zaprojektowany z głową, ładny ekspresyjny podłużny logotyp, dedykowana zakładka startowa i jasny call to action (polub mnie). przykład

2. Znaczniki stron

Użytkownicy FB często dzielą się informacjami znalezionymi w necie wklejając link do znalezionej strony na swój wall. W takim wypadku FB automatycznie próbuje zaciągać z Twojej strony tytuł, opis, oraz zdjęcie.

Jak to bywa w automatach, nie zawsze zaciągane są takie dane, które chciałbyś zaprezentować społeczności FB. Z pomocą przychodzą znaczniki stron, które umożliwiają samodzielne ustawienie danych, które będą prezentowane na Facebook’u. Szczegóły w specyfikacji Open Graph.

Przykład podstawowych znaczników wzięty z serwisu LubimyCzytać.pl:

<meta property="og:title" content="Mariola, moje krople..." />
<meta property="og:url" content="http://lubimyczytac.pl/ksiazka/79779/mariola-moje-krople" />
<meta property="og:site_name" content="LubimyCzytać.pl" />
<meta property="og:description" content="„Mariola, moje krople...!” – wykrzykuje raz po raz do swej sekretarki niejaki Zbytek, dyrektor  prowincjonalnego teatru gdzieś na Dolnym Śląsku, który marzy o spokojnej emeryturze, gdy tymczasem nagle..." />
<meta property="og:image" content="http://lc-upload.s3-external-3.amazonaws.com/books/79000/79779/155x220.jpg" />

Oprócz podstawowych znaczników FB obsługuje również zaawansowane typy obiektów, dzięki którym strona Twojego serwisu może być uznana za opis np. filmu, piosenki lub książki. Dzięki dostarczeniu FB takich informacji zyskujemy dodatkową promocję, gdyż użytkownik FB może dodać taki element do swojego profilu. Profile użytkowników przeglądają inni użytkownicy, im więcej linków z FB do Twojego serwisu tym lepiej, gdyż sumarycznie uzyskasz większy ruch.

Wykaz aktualnie obsługiwanych typów obiektów znajduje się w dokumentacji.

Przykład obiektu książka:

<meta property="og:type" content="book" />

Aby ułatwić developerom pracę ze znacznikami, FB stworzył narzędzie do testowania URL Linter.

3. Pluginy FB

Musisz pamiętać, że aby promocja Twojej marki na FB była skuteczna, nie może być jednostronna. Nie wystarczy, że z poziomu FB będziesz promować swój serwis, również z poziomu serwisu musisz promować swój Fanpage, tak aby zebrać jak największą liczbę zaangażowanych fanów.

Im większą liczbę zaangażowanych fanów zbierzesz na Fanpage, tym większą liczbę reakcji otrzymasz za swoje wpisy a im więcej będzie reakcji, tym większa będzie liczba użytkowników Facebooka, do których dotrze Twoja wiadomość i dowie się o istnieniu Twojej marki.

FB oferuje kilka konfigurowalnych pluginów, które możesz wkomponować w swój serwis. Dzięki Fanbox/likebox możesz promować swój Fanpage. Like button umożliwia polubienie lub rekomendacje Twojej strony lub elementu Twojej strony innym użytkownikom FB, dzięki niemu promujesz swoje treści.

4. Aplikacje i API

Facebook posiada bardzo rozbudowane API, które dzięki dostępnym SDK możesz w prosty sposób wdrożyć do swojego serwisu. API umożliwia m.in. wysyłanie statusów z konta użytkownika FB, dostęp do jego akcji, danych, znajomych.

Przykład automatycznego statusu wysłanego z poziomu serwisu Filmaster.pl.

Na podstawie API możesz budować aplikacje wewnątrz samego Facebooka. Aplikacje takie mogą promować zarówno Twój fanpage jak i markę, jednocześnie dając użytkownikom FB albo jakąś wartość dodaną albo trochę „fanu”.

Przykład aplikacji „Gwiazdka 2010″ serwisu Empik.com.

5. Statystki i monitoring

Abyś mógł weryfikować skuteczność swoich akcji (aplikacje, strony, konkursy) na FB, niezbędne są narzędzia monitorujące oraz dostęp do statystyk podobnych do Google Analytics. Niestety sam FB dostarcza jedynie lakoniczne statystyki a możliwość podpięcia Google Analytics w większości przypadków jest niemożliwa.

Na szczęście zaczynają powstawać dedykowane serwisy pozwalające na zaawansowany monitoring FB np. Kontagent pozwala monitorować aplikacje, SocialBakers i FanGager strony.

Próbkę możliwości analitycznych możesz zobaczyć na mojej pokazowej stronie. Zaloguj się loginem z FB, wybierz fanpage, po kliku odświeżeniach zobaczysz statystyki wpisów swojej strony oraz kilka wykresów analizujących te dane:

  • dzienny współczynnik zaangażowania fanów,
  • odzew fanów w zależności od typu postu (tekst, zdjęcie, film link),
  • odzew fanów w zależności od godziny postu,
  • odzew fanów w zależności od dnia postu.

Ta analiza danych nie jest do końca miarodajna z uwagi na niewielką próbę danych. FB pozwala wyciągać jedynie 100 ostatnich postów, więc statystyki mogą być zafałszowane pewnymi „jednorazowymi wyskokami”. Przedstawione wykresy uważam bardziej za pokaz możliwości analitycznych niż za samą analizę.

Aby móc przeprowadzić miarodajną analizę, fanpage należy monitorować przez kilka miesięcy i dopiero wtedy wyciągać wnioski. Prawdopodobnie niedługo będę uczestniczył w podobnym projekcie, jeżeli byłbyś zainteresowany płatną usługą monitoringu fanpage, napisz, dam znać, gdy usługa będzie dostępna.

Sphinx, czyli szybkie i skuteczne wyszukiwanie

Tagi: , , , , , , , . Data: Kwiecień 1st, 2010

Sphinx to open source’owy silnik wyszukiwarki SQL. Sphinx jest dostępny na licencji GPL 2 i jest całkowicie darmowy do zastosowań webowych.

Sphinx został stworzony przez rosyjskich programistów, aplikacja jest cały czas rozbudowywana i rozwijana, posiada płatny support.

Zasada działania Sphinxa

Sphinx jest aplikacją stand-alone, musi zostać skompilowany i zainstalowany na serwerze. Działa na zadadzie deamon-client.

Sphinx składa się z kilku narzędzi:

  • searchd – deamon wyszukiwarki. Musi być cały czas uruchomiony, na podstawie parametrów wywołania oraz konfiguracji przeszukuje indeksy i zwraca rezultaty.
  • indexer – generator indeksu. Służy do budowania indeksu, po którym następuje wyszukiwanie.
  • search – narzędzie pozwalają testować wyszukiwarkę z poziomu linii komend.
  • spelldump – narzędzie pomocne przy budowania słownika
  • indextool – narzędzie wprowadzone dopiero w wersji 0.9.9-rc2. Służy do debugowania i wyświetlania informacji o zbudowanym indeksie.

Cechy Sphinxa

  • Ekstremalnie szybkie indeksowanie (aż do 10MB/sec).
  • Ekstremalnie szybkie wyszukiwanie (około 0.1 sekundy dla 2-4 GB zbiorów danych).
  • Bardzo duża skalowalność (aż do 100 GB zbiorów danych na pojedyńczym CPU).
  • Współpracuje z wieloma typami baz danych: PostgreSQL, MySQL i MSSQL.
  • Posiada API dla języków takich jak PHP, Python, Java, Perl, Ruby i C/C++.
  • Obsługuję morfologię (przeszukiwanie pełnotekstowe (brak języka polskiego)).
  • Umożliwia sortowanie/filtrowanie wyników po zadanych atrybutach.
  • Umożliwia grupowanie rezultatów po zadanym atrybucie.
  • Wspiera stronnicowanie rezultatów.
  • Prosty, a zarazem dostarczający wiele możliwści plik konfiguracyjny.

Sphinx nie operuje bezpośrednio na bazie danych a jedynie na wcześniej przygotowanych indeksach. Dzięki temu zdejmujemy obciążenie z „wąskiego gardła”, którym w praktycznie każdej aplikacji jest baza danych i przeżucamy na serwer.

Wady Sphinxa

Jedyną znaną mi wadą Sphinxa jest to, że wcześniej stworzony indeks (po którym odbywa się wyszukiwanie) nie jest automatycznie aktualizowany o zmiany wykonane na bazie danych. Dotyczy to zarówno nowych wierszy w zaindeksowanej tabeli jak i modyfikacji zaindeksowanych już danych.

Nowe/zmienione dane pojawią się w indeksie dopiero po jego zaktualizowaniu poprzez polecenie:

indexer nazwa_indeksu --rotate

Pomimo dużej szybkości indexera, operację tą nie nie można wykonywać po każdej zmianie w bazie danych a jednie cyklicznie co kilka godzin/dni (w zależności od wielkości indeksu).

O ile brak aktualizacji indeksu o zmodyfikowane rekordy nie stanowi większego problemu, to brak nowych rekordów może stanowić dla wielu serwisów poważny problem. Często bywa tak, że użytkownicy wprowadzają jakieś dane do bazy a następnie chcą ich użyć wyszukując je. Rozwiązaniem jest mechanizm Live index updates.

W skrócie działa to następująco:

  • Na indeksowanej tabeli tworzymy 2 indexy: główny (main) i dodatkowy (delta).
  • Tworzymy tabelę sph_counter, w której będziemy zapisywać max(id) z indeksu głównego.
  • Indeks główny będzie wyszukiwał w 99,9% danych indeksowanej tabeli, indeks dodatkowy będzie wyszukiwał w 0.1% danych tabeli.
  • Dzięki rozbiciu indeksowania na 2 indeksy (duży główny, mały dodatkowy) możliwe jest dużo częstsze indeksowanie indeksu dodatkowego gdyż będzie zawierał on niewiele danych, zatem reindeksacja nie będzie obciążać serwera i bazy danych.
  • Modyfikujemy sphinx.conf wg. wytycznych z linka.
  • Ustawiamy w cronie reindeksowanie głównego indeksu „raz na dzień” oraz dodatkowego indeksu np. „co 3 minuty”.
  • Zatem, co 3 minuty będziemy uzupełniać indeks dodatkowy, natomiast raz dziennie będzie uzupełniany indeks główny.
  • Każdorazowo przy aktualizacji indeksu głównego do tabeli sph_counter zostanie zapisany wartość klucza głównego (sql_query_pre), przez co indeks pomocniczy będzie startował od zera.

Zasada działania aplikacji opartej na Sphinx’ie

  • Skonfigurowanie konfiga „sphinx.conf” i zbudowanie indeksów.
  • W aplikacji, poprzez api następuje wywołanie Sphinxa z parametrami (szukana fraza, limit, offset, order etc…).
  • Sphinx zwraca wyszukane rekordy w postaci tablicy kluczy głównych (+ zdefiniowane atrybuty).
  • Na podstawie ID’ków kluczy głównych wyciągamy dane z bazy (lub z cache’a) i prezentujemy w serwisie.

Szybki tutorial

  • Tworzymy i konfigurujemy plik konfiguracyjny sphinx.conf.
  • Bujemy indeks(y)
    indexer --all
    
  • Odpalamy demona:
    /usr/local/bin/searchd -c /usr/local/etc/sphinx.conf
    
  • Testujemy wyszukiwanie po indeksie:
    search [INDEX_NAME] SZUKANA_FRAZA
    
  • Podpinamy API
  • Testujemy wyszukiwanie poprzez API

W przypadku gdy najpierw został uruchomiony deamon Sphinxa a dopiero później stworzony indeks to aby API działało poprawnie należy zrestartować demona. To samo tyczy się przypadku gdy w indeksie sphinx.conf zostały zmienione zwracane atrybuty.

/usr/local/bin/searchd --stop
/usr/local/bin/searchd -c /usr/local/etc/sphinx.conf

Z Sphinx’a korzystają między innym: craigslist.org, filestube.com, netlog.com, thepiratebay.org, wikimapia.org i wiele więcej.

Niedługo, jak czas pozwoli, postaram się jeszcze napisać coś o samym pliku konfiguracyjnym Sphinxa „sphinx.conf”.

Zaosoby Amazon S3 we własnej domenie

Tagi: , , , , , . Data: Luty 24th, 2010

O samym Amazon S3 nie będę się rozwodził gdyż już nie raz pisałem o tej usłudze. Generalnie jest to bardzo wydajna usługa hostingu plików w chmurze amazona.

Problem

Standardowe URLe prowadzące do zasobów zgromadzonych na serwerach europejskich wyglądają następująco:


http://UNIQUE-BUCKET-NAME.s3-external-3.amazonaws.com/katalog/plik.jpg

Gdzie UNIQUE-BUCKET-NAME to unikalna w skali globalnej nazwa nadawana przez dewelopera.

Powyższy adres jest bardzo długi i nie wygląda zbyt przyjaźnie. Jeżeli komuś zależy na pewnych walorach estetycznych to pewnie wolałby zmienić ten adres na:


http://subdomena.domena.pl/katalog/plik.jpg

Rozwiązanie

Posłużę się przykładem, gdyż taki przekaz będzie najprostszy i najlepiej rozumiany. Załóżmy, że posiadamy domenę lorem.pl, wszystkie statyczne pliki hostujemy na Amazon i chcemy je widzieć pod subdomeną static.lorem.pl.

W Amazon S3 tworzymy bucket (jeżeli już mamy utworzony to zmieniamy nazwę) o nazwie identycznej do subdomeny czyli static.lorem.pl.

Następnie tworzymy rekord CNAME dla subdomeny static.lorem.pl i ustawiamy go na „s3-external-3.amazonaws.com.” (tak, musi być kropka na końcu). Rekord CNAME można ustawić w panelu administracyjnym dostarczonym przez firmę hostingową, jeżeli nie posiadacie takiej opcji to musicie przesłać dyspozycję na support.

Koniec, zmiany nie będą widoczne od razu, należy poczekać godzinę, maksymalnie kilka godzin, pliki wgrane na Amazon powinny być widoczne z poziomu subdomeny. Należy też pamiętać, aby po wgraniu plików na Amazon ustawić plikom odpowiednie ACL (prawa dostępu). W CloudBerry: PPM na bucket->ACL->ACL Settings->Public->OK

UPDATE z ORDER BY w jednym zapytaniu na przykładzie orderingu danych

Tagi: , , , , . Data: Grudzień 19th, 2009

Wstęp

Mamy przykładową tabelę z userami:

DROP TABLE users;
CREATE TABLE users(
	id SERIAL PRIMARY KEY,
	name VARCHAR(50),
	created TIMESTAMP DEFAULT NOW()
);

INSERT INTO users(name) VALUES('Marcin');
INSERT INTO users(name) VALUES('Bartek');
INSERT INTO users(name) VALUES('Agnieszka');
INSERT INTO users(name) VALUES('Dominika');

Na tabeli wykonywane były wielokrotnie operacje INSERT/UPDATE/DELETE przykładowo:

UPDATE users SET name = 'Ania' WHERE name = 'Bartek';
UPDATE users SET name = 'Dalia' WHERE name = 'Marcin';
DELETE FROM users WHERE name = 'Ania';

Zatem SELECT bez orderu wyświetli nam dane posortowane względem kolejności modyfikacji:

SELECT * FROM users;

psql=> select * from users;
 id |   name    |          created
----+-----------+----------------------------
  3 | Agnieszka | 2009-12-19 10:41:49.324851
  4 | Dominika  | 2009-12-19 10:41:49.958792
  1 | Dalia     | 2009-12-19 10:41:49.297223
(3 rows)

W interface aplikacji chcemy oprogramować własną obsługę kolejności rekordów. Dodajemy zatem kolumnę, która będzie obsługiwać tą funkcjonalność.

ALTER TABLE users ADD COLUMN order_id INTEGER;

Problem

Musimy teraz uzupełnić kolumne order_id o poprawne wartości. Kolejność orderu danych, które znajdują się w bazie powinna być kolejności wprowadzania tych danych do tabeli (czyli zgodna z kolejnością pola id).

Aby zrealizować poprawne uzupełnienie orderu tworzymy pomocniczą sekwencję, która wykorzystamy do wygenerowania kolejnych liczb do orderu:

DROP SEQUENCE order_id_seq;
CREATE SEQUENCE order_id_seq;

Wykonujemy oczywiste zapytanie przypisujące rekordom z tabeli users kolejne wartości sekwencji:

UPDATE users SET order_id = NEXTVAL('order_id_seq');

Niestety przez to, że dane nie były ustawione w dobrej kolejności ORDER ustawiony jest niepoprawnie.

psql=> SELECT * FROM users;
 id |   name    |          created           | order_id
----+-----------+----------------------------+----------
  3 | Agnieszka | 2009-12-19 10:41:49.324851 |        1
  4 | Dominika  | 2009-12-19 10:41:49.958792 |        2
  1 | Dalia     | 2009-12-19 10:41:49.297223 |        4
(3 rows)

Rozwiązanie

Aby UPDATE poprawnie ustawił kolejność orderu należy nieco zmodyfikować zapytanie i nadać danym z tabeli users odpowiednią kolejność.

W tym celu tworzymy podzapytanie sorted_ids, w którym poprzez ORDER BY ustalamy kolejność rekordów, które następnie w zapytaniu nadrzędnym zostaną zmodyfikowane właśnie w tej kolejności.

UPDATE users
	SET order_id = correct_order_id
FROM
	(
	SELECT
		id, nextval('order_id_seq') as correct_order_id
	FROM
		users
  	ORDER BY
		id ASC
	) as sorted_ids
WHERE
	users.id = sorted_ids.id; 

select * from users order by order_id;

Jak widać dane zostały pięknie zorderowane:

psql=> select * from users order by order_id;
 id |   name    |          created           | order_id
----+-----------+----------------------------+----------
  1 | Dalia     | 2009-12-19 10:41:49.297223 |        1
  3 | Agnieszka | 2009-12-19 10:41:49.324851 |        2
  4 | Dominika  | 2009-12-19 10:41:49.958792 |        3
(3 rows)

Przy okazji wspomnę, że w aplikacji łatwiej obsłużyć ordering odwrotny, tzn. wiersze, które posiadają największą wartość order_id są na czele a nie na końcu listy. Przy takim podejściu przy wstawianiu nowego rekordu pole order_id powinno mieć wartość MAX(order_id) + 1. Dla orderingu odwrotnego należy zmienić w podzapytaniu kolejność sortowania z id ASC na id DESC.

Należy także dbać o to, aby przy usunięciu rekordu prenumerować order_id wszystkich rekordów, które znajdują się ‘nad nim’ o -1.

Startup LubimyCzytać.pl – społeczność czytelników!

Tagi: , , , . Data: Grudzień 15th, 2009

LubimyCzytać.pl - społeczność czytelników Przez ostatnie miesiące zaangażowany byłem w autorski projekt LubimyCzytać.pl.

Po wielu zmaganiach z przeciwnościami losu i własnym lenistwem serwis ruszył pod koniec listopada. Muszę przyznać, że czas powstawania serwisu był dosyć długi a tworzenie serwisów takiej wielkości ‘po godzinach’ w dwie osoby bez dodatkowego finansowania i wsparcia jest dosyć męczące.

Nie chcę teraz przynudzać o moich przemyśleniach związanych z powstawaniem i tworzeniem startupa, jeżeli jesteście zainteresowani kulisami oraz wnioskami płynącymi z tego doświadczenia, to proszę o info w komentarzach. Jak będzie zainteresowanie, to przeznaczę na to oddzielny wpis.

Czym jest LubimyCzytać.pl?

Głównym celem serwisu LubimyCzytać.pl jest umożliwienie wymiany informacji pomiędzy ludźmi, którzy lubią czytać książki. Poprzez opinie, recenzje i oceny przeczytanych książek użytkownicy mogą sobie nawzajem polecać książki warte uwagi.

Główną funkcjonalnością serwisu jest „wirtualna biblioteczka” czyli miejsce, w którym każdy czytelnik może składować książki które przeczytał, teraz czyta oraz chce przeczytać. W biblioteczce można tworzyć własne półki i zapełniać je książkami.

Na podstawie książek zgromadzonych w biblioteczce oraz ocen książek system proponuje spersonalizowaną listę książek, które powinny zaciekawić czytelnika. Z uwagi na aktualnie panujący bałagan w bazie danych książek funkcjonalność nie spełnia swojego zadania, jednak wraz ze stopniowym oczyszczaniem zdublowanych pozycji funkcjonalność ta powinna zacząć spełniać swoje zadanie i przynieść użytkownikowi dużą korzyść.

Jak na serwis społecznościowy przystało nie mogło zabraknąć funkcjonalności obserwowania. W LubimyCzytać.pl można obserwować innych czytelników, dzięki temu będziemy na bieżąco z książkami i ocenami obserwowanej osoby.

Chciałbym, aby serwis LubimyCzytać.pl stał się w pewnym sensie internetowym centrum wymiany informacji o książkach. Swoistym kompendium w którym miejsce znaleźliby zarówno namiętni czytelnicy jak i osoby nie czytające a jedynie szukające ciekawych książek na prezent.

Zapowiedzi funkcjonalności

Zdaję sobie sprawę, że w aktualnej wersji w serwisie brakuje wielu przydatnych funkcjonalności. Opublikowana wersja jest wersją bazową, która skupia się na najważniejszej funkcjonalności bez której serwis nie miałby sensu czyli wirtualnej biblioteczce.

Będziemy sukcesywnie dodawać kolejne funkcjonalności, na razie zrealizowaliśmy funkcjonalność „wklejki na stronę/wigeta” a w kolejce czekają następne:

  • dodawanie i edycja książek i autorów przez użytkowników,
  • fora/grupy tematyczne dla książek i autorów,
  • system rang użytkowników,
  • cykliczne konkursy,
  • integracja z księgarniami internetowymi,
  • komentowanie i ocenianie recenzji,
  • mini bazar kupię/sprzedam/wymienię,
  • tablica informacyjna o nadchodzących książkowych wydarzeniach,
  • integracja kont użytkowników z microblogami (blip, flaker, spinacz),
  • udostępnienie API,

i wiele innych… Jesteśmy otwarci na sugestie i propozycje współpracy :-)

Zapraszam na LubimyCzytać.pl

Serdecznie zapraszam do korzystania z serwisu. Wszelkie uwagi i komentarze dotyczące serwisu mile widziane.

Tani dobry hosting w USA – HostMonster

Tagi: , , , , , , . Data: Grudzień 2nd, 2009

O tym, że nie ma w Polsce ofert hostingowych o przyzwoitym stosunku cena do możliwości, chyba nie muszę nikogo przekonywać.

Osobiście korzystam z usług dzielonego hostingu na NetArt i jestem względnie zadowolony, jednak limity typu 10gb pojemności konta czy brak dostępu przez ssh są dosyć irytujące.

Kiedyś przez 2 lata korzystałem z usług DreamHost.com, jednak 2-letni promocyjny okres się skończył a dosyć wysoka awaryjność ich serwerów (tempest, gambino) skutecznie zniechęciła mnie do przedłużania umowy.

Po niedługim czasie od wyprowadzki z DreamHost’a zatęskniłem za ssh i parametrami „Unlimited”, zacząłem mały research i moją uwagę przykuł mało znany w Polsce HostMonster.

Serwis hostingowy z typu „amerykańskich gigantów” za cenę $5,95 miesięcznie oferuje naprawdę dużo. Na HM user ma gwarantowane max. 64mb pamięci RAM i 30% mocy procesora. Mi osobiście szczególnie spodobała się obsługa baz danych PostgreSQL, gdyż jest to SZBD, który najbardziej przypadł mi do gustu i głównie na nim opieram swoje aplikacje. (Dreamhost jak i wiele topowych firm hostingowych oferuje jedynie MySQL.)

Muszę przyznać, że HostMonster oferuje nieco mniej fajerwerków niż DreamHost chociażby limit na instalacje niektórych programów unixowych, brak SVN i pewnie jeszcze kilka niekoniecznie ważnych ficzerów. Brak tych wszystkich funkcjonalności rekompensuje stabilność działania serwera a to przecież jest najważniejsze.

Po około trzech miesiącach użytkowania jestem bardzo zadowolony z ich usług, wszystko działa należycie, nie było żadnych padów a support szybciutko odpowiadał na pytania.

Zatem polecam HostMonster jako tani dzielony hosting dla serwisów nie wymagających mega małych pingów. Abonament za hosting można obniżyć do bajecznie niskich $3,95 na miesiąc korzystając z wielu dostępnych w necie HostMonster coupon codes. Za max. 150zł rocznie mocny, stabilny hosting z większością parametrów „unlimited” i dostępem ssh… dla mnie rewelacja.



Relecyjna baza ‘ala MySQL’ w chmurze Amazon AWS

Tagi: , , , , , , . Data: Październik 27th, 2009

Amazon w ramach AWS (Amazon Web Services) uruchomił publiczną wersję beta usługi relacyjnaj bazy danych ‘ala MySQL’ (Amazon RDS) w swojej chmurze.

Amazon RDS ma cechować się:

  • prostotą konfiguracji i wdrożenia do aplikacji,
  • pełną kompatybilnością z bazą danych MySQL,
  • prostotą w zarządzaniu bazami, backupami i dostępnymi narzędziami,
  • pełną automatyką w backup’owaniu i czynnościach serwisowych,
  • skalowalnością w zależności od potrzeb uzytkownika
  • niezawodnością
  • bardzo dostępną ceną, tak jak w przypadku innych usług developerzy kasowani będą jedynie za zaosby, które rzeczywiście zużywają ich aplikacje.

Czy rzeczywiście tak będzie? Mam nadzieje. Przeczytaj więcej o Amazon RDS.