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

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

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

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.

Usunięcie nieużywanych tagów z bazy WordPress’a

Czasami zachodzi potrzeba „ręcznego” kasowania postów z WordPress’a, jako że system ten działa na MySQL MyISAM to nie wspiera kaskadowego kasowania zależnych danych.

Skasowanie postów jest stosunkowo proste:

DELETE FROM wp_posts WHERE conditions;

Trudniejsza sprawa jest ze skasowaniem tagów. Na necie znalazłem poniższe zapytanie, działa wyśmielicie:

DELETE a,b,c
FROM
	wp_terms AS a
	LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
	LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
	c.taxonomy = 'post_tag' AND
	c.count = 0
	);

Czasami jednak pole „count” w relacji „wp_term_taxonomy” zawiera niepoprawne dane (liczbę większą od 0), wtedy nieużywane tagi musimy zidentyfikować poprzez LEFT JOINa z warunkiem ID IS NULL. Poniżej zapytanie wyświetlające nieużywane tagi.

SELECT DISTINCT wp_terms.slug FROM wp_terms wt
	INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id
	INNER JOIN wp_term_relationships wtr ON wtr.term_taxonomy_id=wtt.term_taxonomy_id
	LEFT JOIN wp_posts wp ON wp.ID=wtr.object_id
WHERE
	taxonomy='post_tag'
AND 
	ID IS NULL
AND 
	NOT EXISTS(SELECT * FROM wp_terms wt2
                INNER JOIN wp_term_taxonomy wtt2 ON wt2.term_id=wtt2.term_id WHERE wtt2.parent=wt.term_id)
ORDER BY name

Code Spaces – hosting SVN i nie tylko

Przy tworzeniu swoich projektów od jakiegoś czasu korzystam z usług Code Spaces. Jest to serwis, który udostępnia hosting repozytoriów SVN + podstawowe narzędzia do zarządzania projektem.

Przy pracy nad większym projektem, w którym zaangażowanych jest więcej niż jedna osoba praca z repozytorium SVN jest nieodzowna a zarządzanie projektem oraz przepływem informacji jest równie ważna. Właśnie to ułatwia Code Spaces.

W Code Space umożliwia:

  • hostowanie repozytorium SVN,
  • przeglądanie repozytorium SVN online,
  • zarządzanie projektami, użytkownikami i ich prawami do projektów,
  • zarządzanie zadaniami, błędami (powiadomienia email),
  • zarządzanie dokumentami projektowymi,
  • zarządzanie mini ‚project wiki’,
  • komunikowanie się w zespole na forum.

W system został wyposażony w przyjemny dla użytkownika interfejs, dostępne są statystyki commit’ów, najnowsze zadania, odliczany czas do kolejnego ‚kamienia milowego’…

Ceny w Code Spaces nie są odstraszające, pakiet ‚Micro ISV’ powinien starczyć na większość dzisiejszych startup’ów. Usługi Code Spaces można za darmo testować przez 45 dni.

Baza danych miejscowości w Polsce z podziałem na województwa w formacie CSV

Sam szukałem w necie… żadnej konkretnej listy nie znalazłem wiec zostałem zmuszony samemu ją wygenerować z danych dostępnych na stronie GUS.

Może komuś jeszcze się przyda:

Miejscowości to łącznie miasta (897) i wsie. Powyższa lista obejmuje wszystkie miasta i większe wsie na które dotarł GUS. Lista wszystkich wsi to podobno około 65 000 więc jeżeli ktoś potrzebuje dane wszystkich wioch to będzie musiał je samemu zebrać. Imho szkoda sobie nimi baze i interface serwisu zapychać.

Kodowanie plików UTF-8 (unicode). Stan danych na 2009 rok.

Skróty klawiaturowe w Eclipse PDT

Poniżej lista mniej znanych a równie przdatnych co Crtl+C skrótów klawiaturowych. Dzięki używaniu ich przy pracy można znacznie przyspieszających prace w Eclipse PDT.
Poniższą listę postaram się na bieżąco aktualizować.

Ctrl + Shift + L – Lista dostępnych skrótów klawiaturowych.

Ctrl + M – Minimalizowanie lewej kolumny (outline, explorer etc…).

Ctrl + Shift + R – Wyszukiwarka plików w projekcie, uwzględnia wyrażenia regularne.
Ctrl + O – Wyszukiwarka danych w typie (listing metod, atrybutów klasy).
Ctrl + E – Wyszukiwarka otwartych plików

Alt + Shift + R na zaznaczonym w browserze/explorerze plików – Możliwość edycji nazwy pliku.

Alt + strzałka Left / Right – Przeskoczenie pomiędzy ostatnio edytowanymi plikami do lokalizacji gdzie wykonywana była ostatia zmiana. Strzałka w lewo cofa się w historii, strzałka w prawo idzie do przodu.

Ctrl + Shift + X – Przekształca zaznaczony tekst na wielkie litery
Ctrl + Shift + Y – Przekształca zaznaczony tekst na małe litery

Ctrl + Shift + P – Przejście do klamry zamykającej blok.

Ctrl + Shift + / – Zakomentowanie kodu poprzez /* */
Ctrl + / – Zakomentowanie/odkomentowanie kodu poprzez //

Ctrl + L – Przejście do lini XX

Alt – Up / Down – Przesunięcie bieżącej lini w górę / w dół
Ctrl + Alt + Up / Down – Skopiowanie bieżącej linii

Tab + zaznaczone kilka linii tekstu – przesunięcie tekstu o tabulator w prawo
Shift + Tab + zaznaczone kilka linii tekstu – przesunięcie tekstu o tabulator w lewo

Ctrl + K + zaznaczenie zmiennej – przskoczenie do następnego wystąpienia zmiennej w pliku
Ctrl + Shift + K + zaznaczenie zmiennej – przskoczenie do poprzedniego wystąpienia zmiennej w pliku

Zrzut danych z bazy do pliku w MySQL

Metoda I

Zapytanie z poziomu bazy danych.

mysql> SELECT *
    -> INTO OUTFILE 'c:/data.csv'
    -> FIELDS TERMINATED BY ','
    -> ENCLOSED BY '"'
    -> ESCAPED BY '\\'
    -> LINES TERMINATED BY '\r\n'
    -> FROM table_to_export;
Query OK, 20 rows affected (0.02 sec)

Metoda II

Zapytanie z poziomu konsoli bez logowania się do bazy danych.

mysql -u user -h host -p --quick -e 'SELECT * FROM table_to_export' baza > data.txt

Warto pamiętać, że w metodzie I plik zapisywany jest po stronie serwera mySQL a w metodzie II po stronie klienta mySQL. Zatem gdy łączymy się z bazą danych z innego serwera niż wykonujemy zapytanie to należy użyć metody II.

Edycja danych ‘inline’ dzięki Jeditable i jQuery

Jeditable to bardzo fajny plugin do jQuery dzięki któremu można stworzyć mega szybką i prostą edycję danych bez przeładowania. Działa to tak, że np. blok tekstowy objęty odpowiednim <div> po kliknięciu zamienia się w <textarea>, następnie tekst w nim zawarty można edytować i zapisać.

Instalacja i korzystanie z Jeditable jest banalne. Trzeba zaincludować bibliotekę jQuery, plugina Jeditable oraz nałożyć odpowiednią klasę na edytowalny tekst i to wszystko. Aby zmienione dane zapisywały się oczywiście trzeba odpowiednio zaprogramować back-end.

Przejdź na stronę Jeditable oraz zobacz podstawowe przykłady i zaawansowane przykłady.

Wyrażenia regularne unicode

Problem

Mamy formularz z polami, które musimy zwalidować pod kątem poprawności danych. Pole może zawierać jedynie litery (duże, małe – wszystko jedno).

Jakim wyrażeniem regualarnym realizujemy sprawdzanie? Pierwsza myśl to [a-zA-Z]… niestety walidacja nie zadziała poprawnie, gdyż w zakres [a-z] uwzględnia jedynie 26 liter alfabetu łacińskiego natomiast nie uwzględnia znaków diakrytycznych czyli litery [ą, ć, ę, ł, ń, ó, ś, ź, ż] nie spełnią kryterium walidacji.

Zatem aby walidacja działała poprawnie trzeba by dodać do zbioru [a-zA-Z] litery ze znakami diakrytycznymi. Otrzymujemy zatem wyrażenie: [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]. Wyrażenie to zadziała poprawnie, jednak jest narażone na potencjalne błędy, łatwo zapomieć o którejś literze lub zrobić literówkę. W przypadku gdy tworzymy aplikacje multijęzykową czynność tą będziemy musieli powtórzyć dla każdego z obsługiwanych języków.

Poprawne rozwiązanie

W programowaniu jak już coś sie robi to należy zrobić to porządnie, tak aby swojego kodu nie trzeba było poprawiać, modyfikować etc…

Z pomocą przychodzi nam kodowanie UNICODE, w które umożliwia napisać reguły na litery posiadające znaki diakrytyczne. Wyrażenie \p{L} oznacza jakąkolwiek literę w jakimkolwiek języku, może by być: Ł, ź, ü, ß czy cookolwiek co jest literą (także nie łacińską). Zatem nasze wyrażenie walidujące pole zawierające włącznie litery będzie wyglądać następująco:

preg_match('#^\pL+$#', 'MałyŁoß');

Gwoli wyjaśnienia \pL to skrót od \p{L} a \p{L} oznacza znak (code point) unicode \p należący do kategorii liter {L}.

Klasy/kategorie znaków w unicode:

\p{L} – wszystkie litery
\p{M} – wszystkie znaki, które samotnie nie występują, musi być połączony z innym znakiem i składa się na np. akcent, umlaut, etc…
\p{Z} – wszystkie znaki niewidoczne
\p{S} – wszystkie symbole, znaki walut, znaki matematyczne
\p{N} – wszystkie znaki numeryczne
\p{P} – wszystkie znaki interpunkcyjne: przecinki, średniki etc…
\p{C} – wszystkie niewidoczne znaki kontrolne i niewykorzystywane znaki code point

Przeczytaj więcej o właściwościach wyrażeń regualrnych w unicode.