środa, 21 września 2011

Specyfikacja

Po wakacjach wyraźnie wzrosła liczba zapytań kierowanych w różny sposób przez potencjalnych klientów, dotyczących projektów jakie zamierzają zrealizować. Pozwala to dostrzec pewne elementy, które ułatwiają wybór klienta, ponieważ mam wrażenie, że przy obecnej liczbie potencjalnych klientów sztuką jest odpowiedni dobór, a nie samo pozyskanie klienta.
Pojęciem które zwykle wiąże się z przygotowaniem projektu jest specyfikacja, która to trafia do nas najczęściej w załączniku, lub po wcześniejszym zapytaniu o samą chęć podjęcia współpracy, bywa też tak genialna (zdaniem wysyłającego), że jest tajna i może być przesłana dopiero po podpisaniu umowy o poufności.
Wśród specyfikacji wyróżniłbym następujące typy:

Specyfikacja wirtualna

Jest to specyfikacja, która nie istnieje. Zwykle pojawia się kiedy ktoś ma jakąś wizję i jest napalony żeby jak najszybciej ją zrealizować, często jest gotowy uprościć ją do minimum byleby zacząć, a potem nie da już spokoju odkrywając przed nami coraz głębsze i co raz bardziej nietrzymające się kupy jej elementy. Wirtualna napisałem dlatego, żeby odróżnić ją od kolejnej sytuacji kiedy również nie ma specyfikacji, ale klient nie twierdzi że ma i nie twierdzi że wie :)

Brak specyfikacji

Mam na myśli sytuację kiedy klient ma jakiś ogólny pomysł, a może nawet częściej potrzebę, ale nie zna się lub nie ma zamiaru narzucać szczegółów rozwiązania. Chociaż na pierwszy rzut oka mogłoby się wydawać, że to źle, to z moich doświadczeń wynika, że szczególnie przy małych i średnich projektach jest to najlepsze co może być. Narzucamy wtedy swoje rozwiązania o których mamy pojęcie i tłumaczymy mu tylko co i jak. Jeśli klient jest kumaty, to wszystko idzie sprawnie :) Piszę "kumaty", bo chodzi o to żeby łatwo rozumiał co mu mówimy i logicznie formułował swoje pomysły, a nie o to żeby znał się na komputerach...

Specyfikacja baaaardzo szczegółowa

Chyba jako człowiek leniwy szczególnie takich nie lubię. Wygląda to zwykle tak, że ktoś opisuje bardzo szczegółowo oczywiste funkcje, a w skrajnych przypadkach powtarza te opisy dla każdego elementu np opisuje każdą podstronę która różni się tylko treścią i jeszcze robi do tego makiety najlepiej w jakimś programie, który do tego nie służy. W takiej specyfikacji autor objaśni nam, że jak w wyszukiwarce ktoś wybierze Warszawę to mają się pokazać oferty z Warszawy, a jak Gdańsk to z Gdańska. Czytanie czegoś takiego jest męką, tym bardziej, że połowę (jeśli nie całość) czyta się często nie mając nawet informacji o czym się czyta, ponieważ autor skupiony na szczegółach zapomniał wpisać tytułu, czy krótkiego wstępu. Jak się już człowiek zorientuje o co chodzi to wypada przeczytać od nowa ze zrozumieniem, a potem przed rozpoczęciem pracy wypadałoby wyłapać i wyjaśnić każdy szczegół, który:
  • powinien być zrealizowany inaczej z przyczyn obiektywnych jak np: są gotowe rozwiązania działające trochę inaczej (czasem lepiej), więc np ze względu na koszty i czas lepiej wziąć gotowiec
  • jest niemożliwy do zrealizowania - kiedyś mi klient napisał że strona ma mieć ekran pożegnalny, który jak potem nieszczęsny zrozumiałem miał się pokazywać po jej zamknięciu :)
  • wydaje się dziwny, niepotrzebny, wynikający z niewiedzy...
Jeżeli tego nie przemielimy i nie wyjaśnimy narażamy się na ryzyko, że potem ktoś będzie nam mógł wypunktować niezgodności ze specyfikacją, a za analizę specyfikacji nikt nam nie płaci, więc szczególnie jeśli ich dużo nie możemy poświęcać na nie za wiele czasu. Osobiście mnie takie projekty trochę odstraszają - zamiast specyfikacją kieruję się opinią o kliencie - zarówno o firmie jak i osobie kontaktowej. Problem osoby kontaktowej jest dość ważny - większe firmy mają pracownika, który podczas realizacji projektu będzie nam ułatwiał pracę, a nawet wykonywał jej część, lub zatruwał życie debilnymi pomysłami. Źle jeśli jest to osoba, która dużo wymyśla, ale o wszystko musi pytać szefa, ponieważ najpierw coś wymyśla i pyta nas (boi się że szef uzna pomysł za głupi) my wyjaśniamy, wtedy jest mądrzejsza i albo pyta szefa albo nie, a potem szef albo się zgadza albo nie. Stajemy się więc trochę takim korepetytorem ;) Dobrze jak jest to osoba komunikatywna, decyzyjna, inteligentna i sympatyczna.

Specyfikacja "taka jak" oraz specyfikacja "taka jak sprzeczna"

Specyfikacja "taka jak" to krótkie pytanie w stylu: Ile kosztowałaby u pana strona taka jak allegro/maxmodels/grupon/facebook. W sumie należałoby do tego opatentować typ odpowiedzi "tyle co". I odpowiadać tyle co allegro/maxmodels/grupon/facebook. Nie są to takie złe tematy jeśli mamy na oku jakiegoś gotowca działającego podobnie, zwykle prostszego. Posyłamy linka do dema i jeśli klientowi to odpowiada to jest git... Jeżeli nie ma gotowca to pewnie jest to za duży projekt do realizacji przez freelancera.
Specyfikacja "taka jak sprzeczna" to pytanie typu: chciałbym stronę coś jak nk.pl, lub wp.pl gdzie nie dostrzegamy żadnego podobieństwa poza dwuliterową domeną ;] W tej sytuacji proponuję poprosić klienta o przesłanie specyfikacji ;)

Specyfikacja marzeniowa

Widać, że autor specyfikacji siedzi w temacie i pomyślał o wszystkim. Pisze o systemie który ma wszystkie funkcje o jakich można zamarzyć, może być rozbudowywany na wszelakie sposoby, komunikuje się z innymi dzięki funkcjonalnemu api, może zmieścić nieograniczone ilości danych działając przy tym szybko i bez zakłóceń. Jest to połączenie najlepszych wzorców, funkcje są jakby zbitką najlepszych haseł wziętych z opisów różnych dużych CMSów, czy sklepów, które nawet w nich nie koniecznie w praktyce sprawdzają się tak dobrze. Dzisiaj miałem zapytanie w którym sklep miał obsługiwać 7 systemów płatności wymienionych z nazwy i oczywiście mieć możliwość łatwego dodania kolejnych - nie wiem komu jest potrzebne 7 systemów płatności w 1 sklepie? Co zrobić z takim zapytaniem? wpadłem na to klepiąc ten wpis - należy polecić firmę która specjalizuje się w obiecywaniu cudów, a potem instaluje gotowca i zmienia CSS, lub podzleca to zadanie. Ktoś jednak musi napompować tą realizację by jej wyjątkowość odpowiadała oczekiwaniom zleceniodawcy :)

ps. obiecuję że się wezmę i napiszę coś przydatnego następnym razem

środa, 17 sierpnia 2011

As we notified you earlier, this feature is temporarily unavailable because you've been making spammy and irrelevant posts on Facebook Pages.

Do niedawna facebook był miejscem w którym wstawienie linku było prostsze niż gdziekolwiek indziej. W dodatku przy dobrym ustawieniu strony (meta tagi dla FB) były to linki wzbogacone w grafikę. Wystarczyło kliknąć "Lubię to!" na jakiejkolwiek tablicy strony (najlepiej jakiejś popularnej) i wkleić link. Wydaje mi się, że jeszcze miesiąc temu nie było w tym zakresie żadnych ograniczeń. Sam akurat rozkręcałem portal, który doskonale nadawał się do popularyzowania na FB. Wrzucałem więc bardzo dużo linków na popularnych tablicach (np lady gagi ;]). Potem moja aktywność opadła. Ostatnio wrzuciłem kilka linków (jak się nie mylę to 3 razy ten sam link na różnych tablicach) i dostałem komunikat:

As we notified you earlier, this feature is temporarily unavailable because you've been making spammy and irrelevant posts on Facebook Pages.

Co dla nieznających angielskiego (komunikatu nie raczyli/zdążyli przetłumaczyć co też by wskazywało na to, że to nowość) w moim genialnym tłumaczeniu oznacza:

Ta funkcja jest chwilowo niedostępna (o czym już Cię informowaliśmy), ponieważ wrzucałeś spamerskie i nieodpowiednie posty na strony facebookowe.

Akurat co do nieodpowiedniości tych postów miałbym wątpliwości, ponieważ nie są to posty typu: "Franek jest dzisiaj seksowny na 67%", tylko linki do video, lub artykułów związanych ze stroną danego artysty, które bardzo często są jeszcze likeowane przez użytkowników FB, lub samego właściciela strony. Nie da się wykluczyć zgłoszenia przez kogoś jako spam, ale stawiałbym na zwykłe wyliczenie - wrzuciłeś X razy ten sam link na różne tablice to spamujesz... ciekawe, czy jest ktoś w stanie to potwierdzić??

Niezależnie od tego jak to działa to wydaje mi się, że działa niedoskonale, ponieważ nie wiadomo dlaczego zostaliśmy zablokowani. Nie ma informacji kto i co zgłosił jako spam? albo chociaż ile było zgłoszeń. Moim zdaniem idealną funkcją ograniczającą zjawisko spamowania byłoby blokowanie użytkowników - po kliknięciu w krzyżyk obok posta oprócz opcji usuń/zgłoś spam dodatkowo - blokuj posty od tego użytkownika... ale pewnie nikt z facebooka nie czyta mojego cudownego bloga, który z bloga o programowaniu staje się chyba blogiem o marudzeniu...

wtorek, 14 czerwca 2011

Rotatory - wypromuj.net, traffic4u.pl etc.

Jako, że bawię się ostatnio we własny portal szperałem trochę zarówno pod kątem możliwości promocji swojej strony jak i zarabiania na niej. Jednym ze sposobów promocji na jaki natrafiłem na allegro mają być wejścia z rotatorów. Na allegro będzie się to po prostu nazywało wejścia ;) Czyli ktoś sprzedaje 2000 unikalnych wejść na naszą stronę i taka atrakcja kosztuje 9 PLN. W aukcjach napisane jest, ze jest to lepsze niż mailing, bo gwarantuje wejścia - bzdura ale zamówiłem :)
Jednocześnie sam zarejestrowałem się w wypromuj.net. Jest to prosty skrypt, który wyświetla nam strony po 20 sek każdą i w zamian za każde wyświetlenie daje punkty, a za te punkty nasza strona może się wyświetlać innym. Sęk w tym, że żeby strony się wyświetlały to nie musimy być nawet przy komputerze, jak za pewne robi większość użytkowników programu, czyli nikt tej naszej strony nawet nie ujrzy. Od razu pojawiają się pomysły:
  • Rotator wyświetla stronę w ramce - dodajmy skrypt wyskakujący z ramki (tzw. zrywanie ramek) i taki delikwent co włączył rotator na noc obudzi się z otwartą naszą stroną i ją zobaczy!
  • Wstawmy na stronie ramki z linkami do innych stron i rotator zamiast nabić 100 wejść nabije 1000, albo niech w ramkach będą linki partnerskie
  • Wstawmy reklamy płatne od wyświetlenia (CPM) np z programu: cpmprofit.com
Niestety wszystkie te pomysły nie są nowe, a co za tym idzie już się przed nimi zabezpieczono. Strona w rotatorze nie może zawierać ramek, ani ich zrywać - może za to wylecieć, co wielką stratą nie jest. Programy typu cpmprofit.com nie zezwalają na automatyczne generowanie ruchu... Biorąc pod uwagę powyższe nie widzę żadnych pozytywnych aspektów reklamy przez rotator - właściwie tylko obciąża serwer, zżera transfer i utrudnia analizę odwiedzin :)

czwartek, 12 maja 2011

Firefox 4 - migający pasek adresu - dwa monitory

Po aktualizacji Firefoxa do wersji 4 zauważyłem że jeśli działa on na drugim monitorze to pasek adresu (i inne pola na których wyświetlają się podpowiedzi podczas wpisywania) migają i znikają. Po przeciągnięciu przeglądarki na pierwszy monitor jest OK. Okazuje się, że w nowej wersji jest opcja pozwalająca na używanie akceleracji sprzętowej w przeglądarce, która jest domyślnie włączona, a przy dwóch monitorach nie działa poprawnie. Aby ją wyłączyć wchodzimy w do menu (menu jest teraz w lewym górnym rogu i nazywa się Firefox), następnie najeżdżamy "opcje", a potem znowu "opcje" i w zakładce "zaawansowane" mamy podzakładkę "ogólne", gdzie odznaczamy pole: "Korzystaj z akceleracji sprzętowej, kiedy jest dostępna". Problem znika i można dalej pracować :)



ps. najpierw wypisałem te kroki tak dokładnie żeby się wyżyć, bo byłem poirytowany, że menu jest w lewym górnym rogu, a do tego pole "opcje" jako pozycja submenu w menu "opcje" jest bez sensu, ale potem odkryłem, że te pierwsze "opcje" też można kliknąć, pomimo że mają submenu - jakąś nową kontrolkę chyba wymyślili od czasu jak an studiach używało się delphi ;]

wtorek, 10 maja 2011

Abort class-pclzip.php : Missing zlib extensions

Błąd wyskoczył podczas próby instalacji wtyczki jwplayer do wordpressa na zagranicznym serwerze. Powód wyłączone rozszerzenie zlib do php, które służy do pakowania/rozpakowywania plików. Normalnie można to włączyć w php.ini - pod warunkiem że mamy do tego dostęp, jeśli nie mamy można spróbować tak: Czyli próba załadowania zlib jako biblioteki dynamicznej. Dodałem to jako pierwszą linijkę w pliku wp-config.php i pomogło, więc komuś też może pomóc :)

piątek, 6 maja 2011

Facebook pobiera nie to zdjęcie co trzeba

Domyślnie podczas wstawiania linka na facebooka skrypt pobiera zdjęcia z naszej strony w kolejności takiej jak na niej występują. Jeśli serwis ma budowę kolumnową to często pobierze np zdjęcia produktów z lewej kolumny, którą najpierw napotkał, a dopiero potem zdjęcie właściwe ze środka. Można zmusić FB do pobrania właściwego zdjęcia wstawiając w sekcji head następujący tag:

<meta property="og:image" content="http://domena.pl/zdjecie_domyslne.jpg" >

Dzięki temu rozwiązaniu facebook wybierze właściwą fotkę (tej fotki nie musi nawet być na stronie).
Aha uwaga na jedną rzecz - w tym tagu trzeba podać pełny URL zdjęcia - nied ziała z relatywnym, przez co nie mogłem tego pojąć przez jakiś czas :)

czwartek, 5 maja 2011

Facebook Graph API i mała dziura

Wszyscy wstawiają już od dawna na strony facebookowe gadżety: likeboxy, feedy itd... Zabrałem się ostatnio za własny projekt portalowaty (muzyka klasyczna) stąd może moje zainteresowanie tymi jak wcześniej sądziłem gadżetami stało się większe. Wcześniej ograniczało się to do wstawiania tego, co sobie klient zażyczy,a klient życzy sobie niewiele, bo nie wiele wie.
Wcześniej korzystałem też z logowania facebookowego, ale w sumie tylko dla uproszczenia autoryzacji. Teraz klikając po tych zakładkach: developers.facebook.com znalazłem tą dotyczącą Graph API.
API przeznaczone chyba bardziej dla skryptów JS - dane przesyłane w formacie: JSON, ale odczyt w PHP jest bajecznie prosty: I już w zmiennej: $wynik_ob mamy wszystkie publiczne informacje na temat wydarzenia, notatki, użytkownika, komentarzy, albumów użytkownika, lub strony. Część danych zabezpieczona jest tokenem (jak pobrać token). Token pobiera się prosto, ale musimy najpierw stworzyć aplikację i otrzymać do niej app key i secret.
Szczerze mówiąc z lenistwa korzystałem z tokena, który jest w przykładowych linkach w dokumentacji - czyli wygenerowanego dla mnie jako użytkownika a nie jako aplikacji (przynajmniej tak mi się wydaje). I dopiero pisząc tego posta stwierdziłem, że wypadało by to zrobić w cywilizowany sposób i tutaj pierwsza niespodzianka:

Abyś można było wykonać tę operację, Twoje konto musi zostać zweryfikowane. Możesz to zrobić, dodając jedną z następujących informacji: telefon komórkowy lub credit card.

Czyli na stronie:
http://developers.facebook.com/docs/reference/api/ dostaję token bez żadnej weryfikacji konta kartą kredytową, czy telefonem, wystarczy że jestem zalogowany :) - to ta mała dziura ;]

Poza tym token wydaje się działać równie dobrze jak ten wycinany z URL-a ;]
Teraz dobry moment na przywołanie artykułu z TVN24.PL (Facebook - przerażająca machina do szpiegowania). Sugestia że spec służby maja mieć dostęp do danych z FB - np informację o sieci kontaktów użytkownika. Nie wiem czy FB udostępnia coś FBI, ale wiem, że z tego co udostępnia każdemu zalogowanemu userowi można spokojnie analizować sieć powiązań między użytkownikami. Nie da się podejrzeć znajomych użytkownika, ale ta niemożność jest dość pozorna. Można wiązać userów np po komentarzach w tych samych wątkach.

Ale można pomyśleć też o bardziej cywilizowanych zastosowaniach - np: prowadząc portal informacyjny można pobierać informacje o bieżących wydarzeniach np takim URLem: Wyciągniemy info o wszystkich wydarzeniach z profilu Pudziana, takim: O wszystkich wydarzeniach ze słowem "pudzian". I już możemy stworzyć stronę o pudzianie, która będzie się sama aktualizowała newsami o naszym bohaterze ;]

Można by pomyśleć o portalu informacyjnym w którym automatycznie publikowało by się wydarzenia z FB z wybranych profilów - wystarczy że user wybrał by jakiś szablon i podał linka do swojego profilu :)

środa, 9 lutego 2011

Wtyczki firefox - NIEZBĘDNIK PROGRAMISTY

Postanowiłem podzielić się informacjami na tematy wtyczek jakich używam podczas pracy. Wtyczki jak webdeveloper czy firebug to już standardy, ale są też inne fajne i użyteczne narzędzia, a może ktoś coś dorzuci do listy do listy ;)??

Web Developer - dokłada nam cały pasek narzędzi często używane to podgląd CSS, wyświetlanie źródła wygenerowanego przez skrypty, możliwość zaglądania i modyfikowania ciasteczek, szybkie wyłączanie javy, czy skryptów, wyświetlanie szczegółowych informacji o błędach i wiele innych...Część użytkowników narzeka na przymulanie, więc ewentualnie można wyłączyć poza pracą

FireBug - pozwala przeglądać i edytować kod bezpośrednio na stronie i od razu śledzić efekty, możemy też prześledzić wszystkie zapytania wysyłane podczas ładowania strony wraz z czasami odpowiedzi :)

SeoQuake - dodatek głównie dla pozycjonerów, wyświetla masę informacji typu page rank, linki, statystyki słów itd... to dopiero jest przymulacz - dla programistów polecam włączanie w razie potrzeb ;)

MeasureIt - maleńka wtyczka objawiajaca się ikonką w lewym dolnym rogu przeglądarki, która pozwala szybko zmierzyć różne elementy, czyli szybka linijka - jak klient mówi że ma być 16px odstępu to bierzemy MeasureIt patrzymy ile jest teraz i dodajemy bądź odejmujemy właściwą liczbę, albo robimy screena i wysyłamy informację "przecież jest 16!!!" ;)

ColorZilla - czyli kolejny maluszek siedzący w lewym dolnym rogu, który pozwala nam odczytać wartość koloru z dowolnego elementu strony :)

A teraz może ktoś coś dołoży ;)

poniedziałek, 31 stycznia 2011

hosts - czyli sposób na przetestowanie domeny przed podłączeniem

Często zdarza się, potrzebujemy przetestować działanie strony, a nie mamy jeszcze podpiętej właściwej domeny. Klient jeszcze nie wysłał danych lub tp. Niekiedy nie chcemy podpinać żeby nie było widać nie dokończonego serwisu, albo są jeszcze jakieś inne powody... Wiem, że można podpiąć stronę roboczo na subdomenie, pracować w podkatalogu, zabezpieczyć hasłem albo włazić po IP, ale wszystkie te rozwiązania mają swoje wady (pewnie po podpięciu domeny zawsze może nas coś zaskoczyć).
Rozwiązanie?
Edytujemy plik:
C:\Windows\System32\drivers\etc\hosts
(ścieżka dla windows 7, jak ktoś nie ma tam to proponuję użyć funkcji szukaj :) ) edycja wymaga uprawnień admina
Dopisujemy na końcu linijkę w formacie:
IP domena
np:
123.123.23.321 www.onet.pl
System przed odpytaniem DNS sprawdza ten plik, więc zachowa się tak jak by była przekierowana na ten IP :)

Można to też wykorzystać jeśli nie chce się czekać ok 20h po podpięciu domeny na odświeżenie DNS :)

ps. BTW plik hosts można też zastosować do blokowania dostępu do wybranych serwisów (przekierowując domeny na dowolny inny adres), poblokować jakiś spam itd...

czwartek, 13 stycznia 2011

Magento zmiana URL

Jeśli kopiujemy magento pod inny adres (w moim wypadku kopia robocza) to w bazie danych np przez phpMyAdmina należy zmienić 2 wpisy w tabeli: core_config_data
web/unsecure/base_url
web/secure/base_url
Na wartości aktualnego URL-a serwisu - inaczej skrypt przekierowuje uporczywie na stary adres.
Jeśli to nie pomoże to należy ręcznie wyczyścić cache w okrutny sposób ręcznie kasując całą zawartość katalogu: var/cache/.
... i to tyle...