Ostatnio na forum powstał wątek, w którym firma SerwerSMS ogłasza konkurs. Nie byłoby w tym nic takiego, gdyby nie nagrody i zadanie do wykonania. Wywiązała się z tego dyskusja – zapraszam do przeczytania i skomentowania:
serwersms szuka jeleni?
Stały rozmiar formatki
Pewnie istnieje na to jeszcze kilka sposobów w C#, ale przedstawię najprostszy. Mamy jakiś rozmiar formatki więc wystarczy go skopiować i przypisać do dwóch właściwości obiektu Form:
- MaximumSize
- MinimumSize
I już możemy się cieszyć formatką non-resizeable form. Takie coś można zrobić metodą hard-coded czyli wpisać wartości w oknie właściwości w designerze albo np w konstruktorze formatki, przepisać rozmiar do w/w własności w sposób dynamiczny – co jest oczywiście lepsze bo jak rozciągniemy w designerze formatkę to wszystko pozostanie OK po ponownej kompilacji.
Tytuł wpisu mówi o bardzo oczywistej rzeczy. Jednak jak się okazało dzisiaj, bardzo łatwo o tym zapomnieć lub pominąć to. Akurat pisałem schema.xml dla projektu w Symfony i przy jednym z wpisów pominąłem parametr size dla atrybutu typu varchar. Miałem trzy tabele, jedna “główna” i dwie, które były z nią powiązane kluczem obcym, jednocześnie nie były powiązane bezpośrednio między sobą. Jakież było moje zdziwienie, gdy główna się stworzyła, jedna zależna też a przy drugiej dostawałem uparcie komunikat MySQL, że mam błąd składniowy i nr błędy to 1064. Przewertowałem google w poszukiwaniu rozwiązania, sprawdziłem czy nie naruszam jakiś słów zarezerwowanych i nic. W końcu zacząłem linijka po linijce sprawdzać definicje SQL tych dwóch “podobnych” relacji. I w końcu trafiłem na:
`title` VARCHAR,
PRIMARY KEY (`gss_id`),
Co było oczywistą drogą do piekła i męk, jakie przeżyłem.
Wniosek jest prosty i oczywisty: zanim zaczniemy winić wszystkich dookoła a szczególnie developerów MySQL, warto 1000 razy poszukać błędy u siebie!
W repozytoriach ubuntu nadal widać wersję eclipse 3.2, a szkoda, żeby nowe wydanie eclipse i PDT się marnowały. Instalacja Eclipse Ganymede jest bardzo prosta i sprowadza się do wydania kilku poleceń i odrobiny cierpliwości.
sudo apt-get install openjdk-6-jdk
Następne kroki to:
wget http://ftp.osuosl.org/pub/eclipse/technology/epp/downloads/release/ganymede/R/eclipse-java-ganymede-linux-gtk.tar.gz
tar xzvf eclipse-java-ganymede-linux-gtk.tar.gz
Pozostaje uruchomić:
cd eclipse
./eclipse
Przyszedł czas na instalację PDT – przydatnego narzędzia do pisania w PHP. W tym celu należy wejść w: Help -> Software Updates -> Available Software. Add i dodajemy następujące adresy:
- http://download.eclipse.org/technology/dltk/updates-dev/1.0/
- http://download.eclipse.org/tools/pdt/updates/2.0/interim/
Z zakładki DLTK zaznaczamy Dynamic Languages Toolkit – Core Frameworks a następnie PDT. Jeśli dostępne jest tylko PDT 1.x to wystarczy nacisnąć Refresh, aby pojawiło się PDT w wersji 2.0 – na końcu wystarczy Install i gotowe
Aktualizacja APIlity
Nadeszła wreszcie długo oczekiwana aktualizacja biblioteki APIlity. Aktualizacja ta jest związana z nową wersją AdWords API, już z numerkiem 13, wprowadzającą pewne dodatkowe funkcjonalności. AdWords API v12 odejdzie w zapomnienie w styczniu przyszłego roku.
A nową wersję APIlity można ściągnąć stąd:APIlity v1.13.0 – Preview version.
sfGuardPlugin w Symfony 1.1
Z tym problemem poradziłem sobie już jakiś czas temu, ale szukając jakiś ciekawych materiałów o tym pluginie zauważyłem, że sporo osób boryka się z tym problemem. W dokumentacji jest napisane, że instalacja powinna wyglądać tak:
php symfony plugin:install sfGuardPlugin –release=2.2.0
Co mi oczywiście nie działało. A że nie chcę pracować na wersji beta frameworka(domyślnie plugin:install sfGuardPlugin instaluje plugin właśnie dla Symfony1.2) to musiałem jakoś zmusić to ustrojstwo, aby mi się zainstalowało. Oto kod:
php symfony plugin:install -r=”2.2.0″ sfGuardPlugin
I po krzyku. Działa jak należy.
Ostatnio zadaniem dodatkowym na laboratorium z systemów operacyjnych było napisanie funkcji, która przejrzy, podany argumentem katalog, rekurencyjnie oraz zliczy rozmiar znajdujących się w nim wszystkich plików. Niby nic wielkiego, ale poziom trudności dla mnie podwyższyła przede wszystkim możliwość pisania tylko w czystym języku C z wykorzystaniem API unix/linux – na codzień piszę jednak w językach wyższego poziomu,
Ale do rzeczy. Napisałem pierwszą wersję funkcji i dumny z siebie, że tak szybko poszło odpaliłem. Zdziwienie było niesamowite jak zobaczyłem, że funkcja rozpoznaje katalogi jako pliki. Co więcej, rozmiary plików były różne (czasami zdecydowanie różne) od rzeczywistych rozmiarów jakie uzyskałem stosując komendę
ls -alR
Pierwsze co zrobiłem to zajrzałem do książki Rochkinda “Programowanie w systemie unix dla zaawansowanych” i sprawdziłem jak się sprawdza czy dany wpis jest katalogiem. Ujrzałem dwie wersje kodu, w tym jedna identyczna jak z mojej funkcji. Spróbowałem tej drugiej – niestety bez pozytywnego rezultatu. Sprawdziłem też funkcję stat() z API linuksa czy czasem nie ma jakiegoś myku przy jej stosowaniu. Pech chciał, że albo przeoczyłem fakt, o którym zaraz napiszę, albo po prostu nie było tam nic o tym napisane.
Czytaj dalej ‘Rekurencyjne przeglądanie katalogów w unix w języku C’
Szablony kodu w Eclipse
Szablony kodu ( templates lub snippets ) są bardzo przydatne w codziennej pracy. Zwłaszcza dla często wykorzystywanych konstrukcji językowych.
Najpierw nieco o standardowo dostępnych snippetach ( w Eclipse PDT ). Wpisując słowo-klucz i naciskając kombinację klawiszy CTRL+SPACE powoduje wstawienie snippetu. Dokładnie tak samo jak uzupełnianie kodu, po rozpoczęciu pisania występuje ta sama kombinacja. Po tym jak szablon “wstawi się” w kod, podświetla nam się pierwsza “zmienna w szablonie”, której wartość wpisujemy, naciśnięcie tabulatora powoduje przeniesienie się do kolejnej takiej szablonowej zmiennej. W ten sposób można np w ciągu 2-3 sekund napisać całą pętlę foreach lub zbudować zarys klasy.
Kieszonkowe z subvert&profit
http://subvertandprofit.com rozwija się. Pomijając fakt, że ostatnio znowu nasila się ilość linków, które należy wykopać na digg.com to powstały nowe kanały zarobkowe!
Od niedawna można zarabiać również dzięki serwisowi http://youtube.com oraz http://www.ilike.com – obydwa dołączyły do grona uznanych przez s&p. Oznacza to ni mniej ni więcej, że zarobić można szybciej tą samą kwotę.
Zmienił się także sposób weryfikacji wykonanych zadań, przydaje się teraz bezwzględnie przeglądarka firefox – stworzony został toolbar, który posiada jeden, jakże wymowny przycisk VERIFY. W instrukcji do każdego serwisu, na którym wykonujemy zadania, jest napisane jak zweryfikować wykonaną czynność. Zwykle trzeba wejść na odpowiednią stronę swojego profilu i kliknąć w “verify”. Działa to dużo szybciej niż wcześniej.
Więc zachęcam do rejestracji – naprawdę warto dorobić na jakąś butelkę Johnnie Walkera :)
APIlity a polskie znaki
APIlity – biblioteka wydana przez google’a w celu łatwiejszego używania AdWords API z wykorzystaniem języka PHP. Niestety nie jest chyba jeszcze do końca dopracowana lub po prostu nie przewiduje i nie akceptuje pewnych znaków w kampaniach reklamowych.
W czym problem? Podczas wysyłania danych do API polskie znaki stają się krzakami. Przykład na jakim się z tym zetknąłem dotyczył aktualizacji parametru destinationUrl dla boksów reklamowych. Wygląda to tak, że przy aktualizacji tego parametru stary boks jest wyłączany a tworzony jest nowy – więc cała treść: nagłówek, dwie linijki opisu oraz url są przesyłane od nowa. Powodowało to niemiłe dla oka skutki w postaci znaków zapytania w boksach reklamowych.
Na szczęście rozwiązanie jest dość proste: należy usunąć wywołania funkcji utf8_decode z metody setDestinationUrl w pliku Ad.php w/w biblioteki. Pomogło. Prawdopodobnie jest to pozostałość po wersji APIlity, gdy ta obsługiwała tylko zestaw znaków latin1 a API było w UTF8. Teraz już jest wszystko w UTFie