2009-03-27

Kompilacja eMule 0.49c

Dotyczy Visual Studio 2008 SP1 na Viście. Ściągamy źródła eMule. Wypakowujemy. Wchodzimy do katalogu srchybrid i otwieramy emule_vc9.sln. Upewniamy się, że mamy wybraną konfiguracje Release. Budujemy (CTRL+SHIFT+B). Cóż trzeba przyznać, że eMule coraz bardziej zauważa najnowsza wersję VS. Kiedyś kompilacja pod VS2008 to były prawdziwe przejścia. Teraz jest nawet solucja pod tą wersję, co daje nadzieje na w miarę bezproblemową kompilacje (to co jest niżej to jest właśnie w miarę bezproblemowa kompilacja). Bardzo szybko możemy kompilacje przerwać, bo już lecą pierwsze błędy. Kiedyś do źródeł eMule był dołączany plik Readme.txt, który zawierał informacje o wszystkich zewnętrznych bibliotekach potrzebnych do kompilacji eMule. Trudno, trzeba sobie będzie poradzić bez niego. Mamy błąd: Error 1 fatal error C1083: Cannot open include file: 'ResizableLib\ResizableDialog.h': No such file or directory d:\programowanie\c++\emule 0.49c\emule 0.49c\srchybrid\traydialog.h 3 emule Pobieramy ResizableLib 1.3 i wypakowujemy do głównego katalogu źródeł. Dodajemy do solucji ResizableLib.dsp. Upewniamy się, że dla konfiguracji Release solucji jest wybrana konfiguracją ReleaseStatic ResizableLib. Dajemy rebuild dla samego ResizableLib. Modyfikujemy odwołanie do biblioteki ResizableLib w opcjach projektu eMule na .\..\ResizableLib\Release_Static\ResizableLib.lib: Wybieramy właściwości solucji eMule i ustawiamy w zależnościach, że eMule zależy od ResizableLib . Modyfikacji tej zależności dokonujemy po dodaniu każdego nowego projektu do solucji. Budujemy. Mamy błąd: Error 1 fatal error C1083: Cannot open include file: 'crypto51/rsa.h': No such file or directory d:\programowanie\c++\emule 0.49c\emule 0.49c\srchybrid\ClientCredits.h 23 emule Brakuje nam biblioteki Crypto++ w wersji 5.2. Zjeżdżamy na stronie projektu do miejsca gdzie jest tabelka porównawcza zgodności wersji Crypto++ z platformami. Jak widać wersji 5.2 nie ma, jest 5.2.1 i nie jest ona kompatybilna z VS2008. Co nie oznacza, że by nie działała, tylko z pewnością były potrzebne jakieś poprawki. Trochę się z tym kiedyś bawiłem, błędy brały się z tego, że VS2008, czy VS2005 (już nie pamiętam) nie potrafił skompilować poprawnie klas dość intensywnie korzystających z szablonów. Jakoś mi się nie marzy poprawianie tego rodzaju błędów - nie wiem nawet czy mi się udało. Kiedyś na stronie projektu Crypto++ był dostępny patch dla jakiejś wersji VS, która usuwała te błędy z szablonami. W każdym razie używałem już parę wersji eMule kompilowanych zawsze z najnowszymi wersjami Crypto++ nieuświadczając żadnych problemów i teraz zrobimy tak samo. Czyli pobieramy wersje 5.6.0 i wypakowujemy w głównym katalogu do katalogu CryptoLib. Dodajemy projekt cryptlib.vcproj do solucji. Dla lepszego samopoczucia zmieniamy nazwę projektu na CryptoLib. Przebudowujemy projekt CryptoLib. Dostajemy błędy: Upewniamy się jak poprzednio, że w eMule ustawiona jest właściwie ścieżka do biblioteki .\..\CryptoLib\Win32\Output\Release\CryptoLib.lib. Teraz pozostaje nam tylko zmienić we wszystkich plikach (CTRL+SHIFT+H) : Budujemy. Mamy błąd: Error 30 fatal error C1083: Cannot open include file: 'dxtrans.h': No such file or directory C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\qedit.h 498 emule. Przeszukujemy nasz projekt pod kątem występowania qedit.h i w emule_site_config.h znajdujemy informacje, że jeśli chodzi o VS2008 to musimy zainstalować DirectX 9 SDK. Ściągamy sobie najnowsze SDK (nie ściągać - czytać dalej) z marca 2009 i instalujemy je. Trochę to waży, ale czego nie robi się dla jednego głupiego pliku nagłówkowego. Pewnie dało by to się obejść, pobrać ten plik osobno, możemy także wyłączyć to QEDIT czymkolwiek to jest. Na razie zainstalujmy samo DirectX SDK. Restartujemy Visual Studio i w opcjach VS upewniamy się, że ustawienia są prawidłowe. No to kolejny rebuild na eMule. Bez sukcesu, ciągle ten sam błąd. No to szukamy tego plik dxtrans.h. U mnie znalazłem go tylko w SDK na smartphony. No to ściągamy go sobie z sieci i kopiujemy tutaj C:\Program Files (x86)\Microsoft DirectX SDK (March 2009)\Include. Rebuild. Teraz mamy błąd w dxtrans.h: Error 29 fatal error C1083: Cannot open include file: 'd3d.h': No such file or directory C:\Program Files (x86)\Microsoft DirectX SDK (March 2009)\Include\dxtrans.h 260 emule Wygląda na to, że mamy złe SDK. Tutaj radzą nam zainstalować SDK z sierpnia 2007. Czemu nie, deinstalujemy obecne, instalujemy tamto (najlepiej instalkę dwa razy wypakować). Restart VS i rebuild. Swoją drogą, kiedyś kompilowałem jakiś projekt w Javie ze źródeł i pliku build.xml wykorzystującego ANT do kompilacji, w trakcie jej trwania jak brakowało jakiegoś projektu to był on ściągany z sieci. Bardzo eleganckie rozwiązanie. Ogólnie to uważam, że każdy projekt powinien być dostępny w postaci zdatnej do natychmiastowego zbudowania, albo powinna przynajmniej istnieć instrukcja (aktualizowana) jak to zrobić. Znowu mamy stary błąd: Error 29 fatal error C1083: Cannot open include file: 'dxtrans.h': No such file or directory C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\qedit.h 498 emule Musimy wejść do opcji VS i ręcznie poustawiać opcje. To SDK w przeciwieństwie do najnowszego nie wie co to VS2008. Rebuild. No to teraz błąd tego rodzaju: Error 115 fatal error C1083: Cannot open include file: 'zlib/zlib.h': No such file or directory d:\programowanie\c++\emule 0.49c\emule 0.49c\srchybrid\WebServer.h 3 emule Brakuje nam biblioteki ZLib. Pobieramy takową w wersji najnowszej 1.2.3 i wypakowujemy do głównego katalogu do katalogu ZLib. Katalog taki istnieje, są w nim pliki projektów dla VS2003. Dodajemy do solucji zlib_vc71.vcproj z głównego katalogu ZLib. Warto wiedzieć, że w katalogu .\ZLib\contrib\vstudio\vc8 mamy pliki projektu dostarczone przez ZLib. Zmieniamy nazwę projektu na ZLib (dla lepszego samopoczucia). Rebuild dla ZLib. I dostajemy jakieś dziwne błędy z kompilacji pliku inffas32.asm: 1>d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\ZLib\contrib\masmx86\inffas32.asm(647) : error A2070:invalid instruction operands 1>d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\ZLib\contrib\masmx86\inffas32.asm(649) : error A2070:invalid instruction operands 1>d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\ZLib\contrib\masmx86\inffas32.asm(663) : error A2070:invalid instruction operands 1>d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\ZLib\contrib\masmx86\inffas32.asm(720) : error A2070:invalid instruction operands Tutaj mamy opis tego problemu. Zmieniamy wszędzie movd mm4, [esp+0] na movd mm4, dword ptr [esp+0] Upewniamy się, że ścieżki do źródeł ZLib (są poprawne) i do skompilowanej statycznie biblioteki (zmienić na .\..\zlib\release\zlib_vc71.lib) są właściwie poustawiane. Budujemy. Mamy błąd: Error 1 fatal error C1083: Cannot open include file: 'atlsmtpconnection.h': No such file or directory d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\srchybrid\SendMail.cpp 22 emule Po poszukiwaniach trafiamy tutaj. Ściągamy potrzebne źródła. Wypakowujemy do głównego katalogu do katalogu ATLServer. Dodajemy do dodatkowych źródeł projektu .\..\ATLServer\include. Budujemy. Mamy błąd: Error 466 error C2451: conditional expression of type 'void' is illegal d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\srchybrid\PeerCacheFinder.cpp 672 emule. Cóż, pozostaje nam założyć, że result.Encode() zawsze zwraca true. Budujemy. Mamy błąd: Error 1 fatal error LNK1181: cannot open input file '..\id3lib\libprj\release_vc9\id3lib.lib' emule emule Dołączamy do solucji projekt .\id3lib\libprj\id3lib_vc9.vcproj. Dajemy rebuild na id3lib. Nie powinno być błędów. Teraz tylko upewniamy się, że ścieżka do biblioteki jest dobrze ustawiona (nie trzeba zmieniać). Budujemy. Mamy błąd: Error 759 fatal error LNK1181: cannot open input file '.\cximage\release_vc9\cximage.lib' emule emule Dołączamy do solucji projekt .\srchybrid\CxImage\cximage_vc9. Dajemy rebuild na CxImage. I mamy błąd: Error 1 fatal error C1083: Cannot open include file: '../libpng/png.h': No such file or directory d:\programowanie\c++\emule 0.49c\emule 0.49c\srchybrid\cximage\ximapng.h 25 CxImage Przydałoby się pobrać libpng. Wypakowujemy do głównego katalogu lpng1235, zmieniamy nazwe na libpng. Dołączamy do solucji projekt .\..\libpng\projects\visualc71\libpng.vcproj. Dajemy rebuild na libpng. Wszystko powinno się skompilować. Ponawiamy rebuild na CxImage. Tym razem nie ma błędów. W opcjach projektu eMule sprawdzamy, że ścieżki do obu bibliotek CxImage i libpng (zmienić na .\..\libpng\projects\visualc71\Win32_LIB_ASM_Release\libpng.lib) są poprawne i dajemy budowanie na eMule. Kolejny błąd: Error 1 fatal error LNK1181: cannot open input file '.\miniupnpc\release_vc9\miniupnpc.lib' emule emule Robimy to samo co przy CxImage. Budujemy. Teraz mamy mnóstwo błędów od linkera. Zmieniamy dla id3lib w ustawieniach: Generalnie kiedy mieszamy biblioteki kompilowane w ANSI i w UNICODE to mogą pojawić się błędy linkera od próby użycia dwóch różnych wersji bibliotek MFC (to głównie tyczy się się fukcji systemowych). Jeśli błędy linkera pojawiają się dla funkcji bibliotecznych pomimo tego, że biblioteka jest właściwe podłączona oznacza to prawdopodobnie, że funkcje te nie zostały wyeksportowane z biblioteki z jakiegoś powodu. Budujemy. Mamy błąd: Error 1 error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR' d:\Programowanie\C++\eMule 0.49c\eMule 0.49c\id3lib\src\tag_file.cpp 60 id3lib Zmieniamy CreateFile() na CreateFileA(). Budujemy. Mamy mnóstwo błędów od linkera. Podobną zmianę jak dla id3lib robimy dla ResizableLib. Budujemy. Mamy błędy od linkera. Dla wszystkich projektów zmieniamy: Podobnie jak mieszanie ANSI z UNICODE tak samo mieszanie MFC z Use Standard Windows Libraries może prowadzić do błędów linkowania. Budujemy. I mamy błąd: Error 1 error PRJ0019: A tool returned an error code from "Inserting Vista application icon..." eMule eMule Zaglądamy do Post-Build Event dla eMule. i widzimy coś takiego: ..\ReplaceVistaIcon\release\ReplaceVistaIcon "$(TargetPath)" "$(ProjectDir)\res\Mule_Vista.ico" AAAEMULEAPP Dodajemy do solucji projekt .\ReplaceVistaIcon\ReplaceVistaIcon_vc71.vcproj. Zmieniamy nazwę projektu na ReplaceVistaIcon. Nic nie zmieniamy w opcjach projektu. Ten projekt to samodzielny plik wykonywalny używany w Post-Build Event. Budujemy eMule. I w tym momencie powinniśmy dostać exe. Robimy jeszcze rebuild wszystkiego i starannie przekopujemy się przez warningi. Ja mam ich 756, sortujemy je po nazwach dla łatwiejszej roboty. Wszystkie wydają się nieszkodliwe. Ale możemy je pousuwać. Przeglądamy zawartość output w poszukiwaniu jakiś nietypowych komunikatów. Np. takiego: 9>SelfTest.cpp 9>You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning. 9>SecRunAsUser.cpp Przeszukujemy projekt jakie pliki (klasy) generują takie komunikaty. Porównujemy je z inkludami w SelfTest.cpp. Wychodzi na, że problem dotyczy md4.h. W SelfTest.cpp przed linijką #include dodajemy #define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1. Zmieniamy CryptoPP::MD4 md4; na CryptoPP::Weak::MD4 md4;. Kolejny to taki: 9>To compile qedit.h you must install the DirectX 9 SDK, to obtain the dxtrans.h header. Po tych wszystkich przejściach trochę to irytuje. Ciągle jest coś nie tak. Po przeszukaniu naszej solucji okazuje się, że komunikat pochodzi z poza niej. Wpis taki znajdujemy w pliku C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\qedit.h (przynajmniej u mnie). Wydaje mi się, że ten komunikat możemy olać, ten wpis pojawi się zawsze jak kompilator przeanalizuje plik qedit.h. I w ten oto sposób kompilacja dobiegła końca. Teraz tylko pozostaje sprawdzić czy wszystko nam działa. Jako, że dostępu do źródeł instalki nie mamy, pozostaje nam pobrać instalke (albo archiwum), zainstalować (albo wypakować) i podmienieć execa.

2009-03-24

Przejście z Windows Vista 32 bity na 64 bity

W moim przypadku po zakupie notebooka, okazało się, że jest na nim Vista 32-bitowa, a mi się zachciało 64 bitowej. Po pierwsze nie wiem, czy to co napisze łamie jakieś licencje. Mi tam wszystko działa, a Microsoft twierdzi, że mój system jest legalny. Na samym początku warto zauważyć nie ma możliwości upgrade-u, to będzie reinstalacja systemu. Do swoje notebooka, nie miałem dołączonej żadnej płytki, była tylko partycja Recovery. Po pierwsze zadzwoniłem sobie do polskiego dystrybutora Lenovo, tam się dowiedziałem, że oni mi płytki z Vistą x64 wysłać nie mogą i że mam spróbować u przedstawiciela na całą Europę. Dałem sobie spokój zwłaszcza, że później dowiedziałem się, że kosztowało by około 100 zł. Najzabawniejsze jest, że ja nabywając Viste nie kupiłem wersji 32 bitowej, kupiłem po prostu Viste. Związku z tym kupiłem też prawo do Visty 64 bitowej. Z tego co się też przy okazji dowiedziałem niektórzy producenci notebooków dostarczają płytki z Vista x64, tak jak niektórzy dostarczają z Windows XP aby móc dokonać downgrade-u. Microsoft także umywa od tego ręce. Kupiłeś OEM to kontaktuj się z producentem sprzętu, my nie wyślemy Ci żadnych płytek. Tak naprawdę płytka jest najmniej ważna, liczy się Serial na nalepce. Płytka może być dowolna, byle by zgadzał się język i wersja Windowsa. Czemu takiej płytki nie mogę sobie pobrać ze strony Microsoftu nie wiem, teoretycznie nic nie stoi na przeszkodzie. No ale ludzie mogli by piracić, a tak nie piracą, jak wiadomo. Tak więc potrzebujemy w moim przypadku płytkę z Vista Business x64 PL. Dowolną. Byle ją mieć. Czy pirace jeśli ściągnę sobie płytkę z Torrenta albo Emula, zapłaciłem za licencje, mam klucz, nie płaciłem za płytkę, płytka to tylko nośnik. Problemem jest dostanie takiej wersji, kto piraci taką wersję ? Wszędzie tylko Vista Utlimate. Po drodze spotkałem się z informacją, że jest takie DVD jak Windows Anytime, na którym są wszystkie wersje Visty, ale tego też nie znalazłem. Cóż prawie przypadkiem dowiedziałem, że Vista Ultimate pozwala na zainstalowanie dowolnej wersji Visty (widać ja nie piracę, bym piracił to bym wiedział, bo pewnie taką wersję bym wybrał)). I o to chodziło. Nie pamiętam tylko, czy żeby wprowadzić klucz OEM potrzebujemy wersji OEM (sugeruję zdobyć OEM). Zresztą my tego klucza nie będziemy wprowadzać. My go skopiujemy ze starej Visty. Tutaj macie poradnik z którego korzystałem. Dotyczy on notebooków Lenovo, ale pomijając informacje na temat specyficznego oprogramowania Lenovo, reszta odnosi się do każdego notebooka. Po pierwsze potrzebujemy takiego programiku. Za pomocą niego zrobimy backup klucza, a po zainstalowaniu nowego systemu ten klucz przywrócimy. Nie jest to ten sam klucz co na naklejce. Producenci notebooków nie byli by tego w stanie fizycznie obsłużyć (nawet chińczyki mają swoje ograniczenia). Mają po prostu swoje klucze aktywacyjne, i takim jednym kluczem są wstanie aktywować wiele licencji na raz. A w zasadzie to nagrywają gotowe obrazy na dyski twarde. Zaletą tego klucza w stosunku do naszego jest, że nie wymaga on aktywacji. Program ten nagrywamy na dysk USB, albo zewnętrzny dysk twardy, nie wypalamy go. Uruchamiamy activation_backup.exe i powinniśmy w tym samym folderze zobaczyć dwa nowe pliki: backup-cert.xrm-ms, backup-key.txt. Po reinstalacji uruchamiamy activation_restore.exe i sprawdzamy w Panel Sterowania/System (na samym dole, czy wszystko się udało). Po drugie potrzebujemy sterowników, najlepiej zaopatrzyć się w je przed reinstalacją. Nie jestem pewny, czy jeśli zostawimy sobie Viste 32 bitowa i na innej partycji zainstalujemy 64 bitową, czy Microsoft się na nas nie obrazi jeśli będziemy korzystać z nich naprzemiennie na czas zabawy z migracją. Ja tak nie robiłem. Ciągle tutaj mówimy o nowym notebooku, nie mamy systemu Windows XP, na który instalujemy Viste, samodzielnie musimy dokonać migracji danych. Tutaj nie będę poruszać tego tematu. Jeśli na naszej Viście 32 bity mamy jakieś witalne dane pomimo tego, że je sobie skopiujemy i tak dla pewności warto mieć kopie całej partycji. Producenci notebooków raczej już dołączają takie narzędzia. Ale co ważniejsze warto mieć dostęp do takiej kopii partycji jak do folderu. Możemy skopiować wszystko co się da na inną partycję (kopiujemy pliki po prostu). Możemy użyć jakiegoś narzędzia do backupowania partycji, które później umożliwia podmontowanie takich pliko-partycji. DriveXML jest darmowym narzędziem, które polecam. Taką kopie najlepiej wypalić na DVD i zostawić także na dysku (na innej partycji niż tam gdzie będziemy instalować system). Tutaj uwaga, generalnie DriveXML działa z poziomu Windows. Możemy sobie zrobić wersję bootowalną tego programu, ale wymaga to trochę roboty. Poza tym z reguły jest tak, że partycja Recovery lub też czasami jakieś oprogramowanie do robienia backupów dostarczone przez producenta może przestać działać po reinstalacji systemu, gdyż zmodyfikujemy MBR (zwyczajnie go nie uruchomimy). Mam tutaj na myśli oprogramowanie dostępne przed startem systemu. Tak więc możemy się też zastanowić czy przy okazji takiej partycji nie skasować. System zawsze możemy przywrócić z wypalonych płytek (tak jest u Lenovo i chyba u wszystkich). Zresztą na co nam taka partycja ? Będziemy już mieli zupełnie inny system. W przypadku Lenovo jest tak - backupować i przywracać można w płytek, z partycji Recovery i z poziomu systemu. W tym ostatnim wypadku nie przywrócimy tylko systemu. Partycje Recovery także można zbackupować. Jeśli nasze narzędzie do backupowania może też ingerować w MBR, wtedy w ogóle wszystko możemy przywrócić do stanu pierwotnego. Tutaj jedna uwaga. Nie należy się bać robienia kopii systemu z poziomu systemu. Nie dostaniemy czegoś nie działającego, czegoś co zmieniało się w trakcie działania systemu. A to dzięki Volume Shadow Copy. Mamy sterowniki, mamy skopiowane dane z dysku, mamy na wszelki wypadek możliwość przywrócenia starego systemu z płytek, ewentualnie także partycji Recovery. Ja skasowałem partycje Recovery, system zainstalowałem na partycji gdzie był stary, podczas reinstalacji kasując ją. Podczas instalacji należy wybrać swoją wersję Visty bo do niej pasuje Serial. Tutaj jeszcze raz to powiem: Serial zawiera informacje o wersji systemu, języku, OEM czy BOX. Podczas instalacji nie podajemy Serialu. Po instalacji przywracamy licencje, instalujemy sterowniki, przywracamy dane i gotowe. I ostania uwaga na temat partycjonowania. Nie mogę polecić żadnego darmowego oprogramowania do tego, gdyż takiego nigdy nie używałem. Windows w tej materii jest bezużyteczny. Jedynie tworzenie partycji i ich kasowanie, tymczasem najbardziej użyteczne jest zmienianie rozmiaru partycji i ich przemieszczanie. Ja korzystałem z tego. Gorąco polecam, też ich narzędzie do backupowania.

Etykiety z różną wielkością liter

Każdy post może być oznaczony jedną lub kilkoma etykietami. Dzięki temu można łatwo dotrzeć do postów na dany temat. Standardowo dostępny gadżet wygląda tak:



Jest też dostępny gadżet o nazwie Dynamic Label/Tag Cloud Builder tyle, że nie mogłem go zmusić do poprawnej pracy. Raz, że wymagał on by na stronie obecny był podany wyżej gadżet, dwa, że jego wygląd nie za bardzo odpowiadał wybranemu szablonowi. Kluczem jest tutaj słówko cloud, tak to się właśnie nazywa.

Ostatecznie skorzystałem z rozwiązania dostępnego na tutaj. Nie ma co się dużo rozpisywać. Edytujemy szablon, podmieniamy co trzeba, zmieniamy atrybut title na bardziej polskie Etykiety i po sprawie. Teraz etykiety wyglądają tak:



Dodatkowo w szablonie odnajdujemy fragment:
.post img {
padding: 6px;
border-top: 1px solid #ddd;
border-$startSide: 1px solid #ddd;
border-bottom: 1px solid #c0c0c0;
border-$endSide: 1px solid #c0c0c0;
}
I usuwamy informacje na temat border. Dzięki temu pozbywamy się ramek wokół obrazków.

Ciągle jednak pozostaje pomarańczowa ramka wokół obrazka. Do robienia zrzutów ekranu używałem dostępnego w Viscie Narzędzia wycinania i to ono dodawało mi te ramki. Aby się ich pozbyć w opcjach należy odznaczyć Pokaż pismo odręczne zaznaczenia po przechwyceniu wycinków. Naprawdę już głupiej tego nazwać nie mogli. Inna sprawa, że chciałem tutaj dać zrzut ekranu okienka opcji, niestety Narzędzia wycinania nie pozwala na uruchomienie drugiej instancji, więc zrzutu nie ma.

Dodano 2009-06-05

Niestety po zmianie szablonu coś się posypało, i tagi przestały się pokazywać. Wszelkie przywracania domyślnych szablonów nic nie dały. No to rozpocząłem poszukiwania alternatywy dla podanego tutaj widgetu. Jest on bardzo popularny, i chyba na 3 stronie wyników Google trafiłem na alternatywe.

Dodano 2010-07-07

Przerzuciłem się na zaktualizowany standardowy gadżet Etykiety.

2009-03-23

Greasemonkey

Przy okazji poszukiwań jak na Blogerze powiększyć okienko edycję natrafiłem na dodatek do Firefoxa - Greasemonkey. Zaś tutaj mamy pokaźną liczbe skyptów. Skrypty te instalujemy klikając w nie. W każdym skypcie jest zawarta informacja na jakich stronach (domenach) ma działać. Dla takich adresów Greasmonkey wstrzykuje niejako te skrypty w strone i je wykonuje. To co zrobią te skrypty z stroną jest już tylko pełną dowolnością ich autorów. Np. tutaj mamy fajny skrypt do YouTube. Dodaje on nam linki do ściągnięcia filmiku, pozwala skonfigurować jego jakość, wielkość wyświetlanego obrazu, wyłączyć autostart filmu, sprawić by wszystkie komentarze pojawiły się od razu, powyłączać co niektóre sekcje i pewnie jeszcze wiele innych rzeczy. Jest to dużo skuteczniejsza opcja niż korzystanie z innych pluginów, programów, czy też stron do tego przeznaczonych. Ale ciągle żeby dostać mp3 trzeba się trochę nagimnastykować. Co prawda jest tak kilka dodatków do MP3, ale na obecną chwilę, żaden z nich nie działa. Wydaje się, że strona, która 'serwisowała' konwersję już nie działa. Tutaj mamy kolejny genialny dodatek do Bloggers, który pod okienkiem edycyjnym dodaje przycisk do kodowania znaków specjalnych HTML. I kolejny dodatek do Blogger-a. Ten powiększa okienko do edycji szablonów. Niestety tylko wszerz. Ale zawsze coś. Jeszcze jeden dodatek, tym razem do Gazety Wyborczej, komentarze stają się zdatne do czytania.

Archiwizacja postów

Generalnie nie powinniśmy się o to martwić. Blogger pewnie jest przed utratą danych dość dobrze zabezpieczony, ale nie ma to jak pewność tego, że nasze myśli bezpiecznie spoczywają u nas na dysk, i najlepiej jeszcze na jakimś zewnętrznym nośniku. A dla jeszcze większej pewności jakby nam samolot spadł na chałupę, meteoryt przywalił, albo pożar ją strawił, warto robić backupy na jakiś internetowy dysk twardy. Choć w sumie w przypadku tego meteorytu jeśli nikt by nam go nie zakosił, moglibyśmy się stać całkiem bogaci, co z nawiązką wynagrodziło by nam utratę części swojej cyfrowej tożsamości. Osobiście dziwie się ludziom co niczego nie backupują - telefon komórkowy, kluczowe foldery na dysku (gg, skype, inne komunikatory, maile, zdjęcia, dokumenty, programy, itp). Jasne, że utrata tego nie zdarza się często, ale nikomu tego nie życzę. No i oczywiści warto też zarchiwizować całą partycję systemową (i rozdzielać dane od systemu poprzez osobne partycje). Wtedy jak padnie nam system to po godzinie, jak wszystko mamy dopracowane i mamy aktualny system (np. backup robiony co miesiąc) + aktualizacje oprogramowania (z reguły pare programów) + kluczowe foldery (backup robiony codziennie). A wracając do tematu jest kilka możliwości. Tutaj mamy chyba najprostszy. Jeden wielki HTML. Mamy backup ale przywrócenie może być kłopotliwe. Z drugiej strony jeśli przenosimy bloga gdzie indziej, to taka forma w postaci HTML-u jest najodpowiedniejsza, choć najlepszym wyjściem było by chyba korzystanie z jakiegoś eksportera/importera. Wiele blogów oferuje takowe. Jeśli nasz blog był w miarę popularny to ilość takich narzędzi i wsparcia dla naszego blogu rośnie. Tutaj mamy znowu dedykowane narzędzie dla Blogspot. Archiwizuje i przywraca nasze posty, a także komentarze. To czy przywraca nie wiem, nie testowałem, na pewno backup działa. Posty są zapisane w postaci XML w standardzie ATOM. Niestety backupowany nie jest szablon wyglądu bloga, ani żadne jego opcje, o to trzeba się zatroszczyć 'ręcznie'.

Podstawowe uwagi na temat edycji postów

Pisząc posta tak naprawdę korzystamy z edytora HTML-a, czyli możemy mieszać znaczniki HTML-a z tekstem. Z jednym wyjątkiem nie musimy korzystać z <br>, wszystkie znaki zakończenia linii są konwertowane automatycznie. Ma to swoje zalety i wady, jest z nich jest ingerencja w wklejany kod źródłowy, przez co skrypty taki kod formatujące mogą głupieć. Inna wada, to taka, że nie możemy dla lepszego odróżnienia znaczników od tekstu oddzielać ich pustymi liniami, albo zaczynać każdy znacznik od nowej linii, każde zakończenie linii zostanie skonwertowane na <br>. Tutaj zauważyłem jeszcze jedna dziwną rzecz, dodanie bloku <pre></pre> dodaje jakby <br> z przed i po bloku. Nie wiem, chwilowo co z tym zrobić. Jako że edytujemy kod HTML, nie możemy tak po prostu napisać <br>, musimy napisać &lt;br&gt;. Tutaj mamy dostępny konwerter, który załatwi to za nas. Tutaj mamy opisaną jeszcze ciekawsza alternatywe, które uzupełnia nasze okienko edycyjne o dodatkowy przycisk (zaznaczamy, klik i po sprawie). Po pewnym czasie pewnie każdego może poirytować fakt małej wielkości okienka edycyjnego. Można znaleźć wiele rozwiązań tego problemu. Ja wybrałem to. Całkiem wkurzającym ale chwilowo nie rozwiązanym problemem, jest to, że przejście do trybu podglądu postu i z powrotem do edycji nie ustawia nam kursora w poprzednim miejscu. Chyba najrozsądniejszym wyjściem byłoby edytowanie postów w jakimś zewnętrznym edytorze HTML-a. Podczas edycji postu możemy się przełączać pomiędzy edycją kodu HTML, a edycją WYSIWYG (no prawie). Na edytor HTML-a przełączamy się poprzez 'Edytuj kod HTML', zaś na edytor WYSIWYG poprzez 'Nowy post'. Chyba potrzebne jest dotłumaczenie paru szczegółów. :)

Wstęp

Po przyjrzeniu się czołowym blogom z polski link okazało się, że bardziej nadają się one na pamiętniki niż na miejsce gdzie można prowadzić swego rodzaju zapiski o programowaniu, które często napotykam poszukując informacji. Z drugiej strony, przy okazji, znajdowałem wiele blogów, których adresy były prywatnymi domenami autorów, albo były sub-domenami ich firm. Cóż, przecież tyle osób nie napisało samemu kodu do obsługi blogu, musieli z czegoś skorzystać. Na początku myślałem, że to jakieś ogólnie dostępne silniki, ale okazało się, że tym silnikiem w większości wypadków był ten blog. Z mojego początkującego punktu widzenia jest tutaj wszystko czego mi trzeba:
  • Tagi, czyli etykiety postów, wraz z wyróżnianiem wielkością czcionki tych najliczniejszych
  • Ogromna elastyczność jeśli idzie o kształt bloga (style, widget-y, możliwość edycji nagłówka strony)
Bardzo ważną sprawą było wsparcie dla formatowania kodu źródłowego, jak się później okazało odbywa się za pomocą zewnętrznych skryptów. Dzięki gadżetom zaś możemy uzupełnić naszą stronę o wiele ciekawych elementów: statystki, listę ostatnich postów, etykiety, ulubione. Jest tego naprawdę dużo, bardzo dużo firm pisze takie gadźety samodzielnie, ale nic nie stoi na przeszkodzie by taki gadżet wypełnić naszą zawartością. Jako, że ostatecznie mamy dostęp do szablonu strony, wszystkie elementy możemy pozmieniać dowolnie (położenie, kolory, czcionki) poprzez ręczną edycję kodu. Ponieważ oprócz ręcznej edycji szablonu dostępny jest graficzny konfigurator szablonu, nie jestem pewien na ile poprawnie będzie on działać jak coś ręcznie namieszamy, lub czy nasze zmiany nie zostaną skasowane podczas jego użycia. Generalnie, warto często robić kopie, jak bierzemy się za ręczne mieszanie w szablonie.

2009-03-22

Formatowanie kodu źródłowego na blogu

Założyłem konto, a w zasadzie zalogowałem się, bo konto na Google już miałem. Pierwsza próba posta i pytanie, no gdzie jest to formatowanie kodu, które widziałem na wielu blogach. Spojrzenie w źródła stron, gdzie takie formatowanie jest i znajdujemy na początku coś takiego: <script src="http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushSql.js%27" type="'text/javascript'"></script> <script src="http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushXml.js%27" type="'text/javascript'"></script> Po krótkim śledztwie jesteśmy na SyntaxHighlighter. W dalszej treści wykorzystuje informacje tam zawarte, każdemu kto chce wiedzieć więcej polecam poczytanie zawartych tam informacji. Sam SyntaxHighlighter to skrypt JavaScript, który możemy zastosować na każdej stronie o ile możemy zmodyfikować jej nagłówek. Tak więc co zrobić żeby formatowanie zaczęło działać ? Edytujemy szablon naszego bloga dodając do niego (Układ/Edytuj kod HTML): <link href='http://alexgorbatchev.com/pub/sh/2.0.278/styles/shCore.css' rel='stylesheet' type='text/css'/> <link href='http://alexgorbatchev.com/pub/sh/2.0.278/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shCore.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushJScript.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushCSharp.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushSql.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/2.0.278/scripts/shBrushXml.js' type='text/javascript'></script> Edytując nagłówek warto zwrócić uwagę, czy linki są w apostrofach, a nie w cudzysłowach, jeśli kopiujecie kod z innych źródeł. Tutaj na przykład macie cudzysłowy. Styl formatowanie jak i wybór brush-ów możemy zmienić zgodnie ze swoimi preferencjami, ich lista dostępna jest tutaj. Brush xml-owy służy także do formatowania html-a. Jak widać podłączyłem się do wersji 2.0.296, można podłączyć się pod katalog 'current' i tym samym być zawsze na najnowszej wersji. Do nagłówka dorzucamy jeszcze coś takiego:
<script type='text/javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
Jak widać SyntaxHighlighter w specjalny sposób traktuje Blogger-a. Chodzi o opisaną tutaj automatyczną zamianę znaków zakończenia linii na <br>. Do Blogger-a logujemy się przez przez konto Google. SyntaxHighlighter ma wsparcie dla Bloggera. Do tego dajemy, że Blogger wchodzi w skład oferty Google, zaś SyntaxHighlighter był przez pewien czas hostowany przez Google Code. Być może nawet jakoś wsparty finansowo przez Google - tego nie wiem. I wszystko jasne na temat powiązań. Teraz kiedy nagłówek jest już zmodyfikowany możemy oznaczyć bloki kodu do sformatowania:
<pre class="brush: alias">
/* Kod źródłowy */
</pre>
Dostępne aliasy dla brush-ów można znaleźć tutaj. Jak to działa w skrócie. Całe formatowanie jest robione po stronie klienta. Blok <pre> zachowuje białe znaki podczas wyświetlania zawartości w przeglądarce. Atrybut class wskazuje na styl CSS. Podczas ładowania strony przeglądarka ściąga podane w nagłówku pliki stylów i skryptów JavaScript (tutaj dane w postaci nieosadzonej w kodzie, tylko w postaci linków) i uruchamia formatowanie poprzez SyntaxHighlighter.all(). Skrypt przelatuje po elementach strony jak po strukturze drzewiastej poszukując elementów które są mu znane, bierze tekst pomiedzy znacznikami <pre> i </pre> formatuje go i podmienia w HTML-u. Dlatego możemy czasami zaobserwować, że formatowanie pojawia się po pewnym czasie od załadowania strony. I ostatecznie możemy zrobić coś takiego:
double sum = 0;
foreach (double n in weights)
   sum += n;
Tutaj uwaga: efektów naszej pracy nie uświadczymy w podglądzie. Wszystko pięknie, tylko na toolbarze brakuje mi ikony kopiowania do schowka. Aby się pojawiła musimy uzupełnić konfiguracje o:

Dodatkowo wyłączyłem autolinkowanie za pomocą opcji auto-links: false'. Dzięki temu adres pliku swf nie jest linkiem. Próbowałem to wyłączyć globalnie w konfiguracji ale formatowanie przestaje działać, nie wiem czemu. Dużo większym problem jest to, że toolbar przesłania tekst. Chwilowo nie wiem jak to rozwiązać. Można ręcznie złamać taki tekst, ale nie jest to najskuteczniejsze rozwiązanie. Moża się posiłkować uzupełniając kod o puste linie, tylko, że SyntaxHighlighter skutecznie wycina z przodu wszelkie puste znaki (spacje, nowa linia, <br>). Wydaje się, że w przyszłości ten toolbar powinien zostać jakoś inaczej pozycjonowany (u góry, pionowo z boku. Kolejny problem, w innych starszych wersjach na pewno mogłem to zrobić. Zaznaczając kod, kiedy jest numerowanie linii, zaznaczamy też numerowanie linii. Nie wiem jak to obejść. Chwilowo nie pozostaje nam jak wybrać z toolbara ikonkę, która pokazuje źródła w osobnym oknie i skopiować co trzeba. No można też wyłączyć numerowanie linii. I tu mamy kolejny problem związany z tym, że ustawienia działania SyntaxHighlighter-a, konfiguruje się globalnie w szablonie, czyli jeśli zdecyduje się tam na wyłączenie numerowania linii, to tutaj one też poznikają (no chyba, że wyspecyfikuje tą opcję dla każdego bloku <pre></pre>). Podobnych problemów może też dostarczyć przejście na nowsza wersję skryptu. Kolejny zauważony problemik to taki, że przycisk kopiowania do schowka nie ma podpowiedzi, jak pozostałe. No i jeszcze jeden błąd: dla dużego fragmentu źródła w C# na końcu pojawiły się jakieś śmieci: </int></int></double></double></int></int></double></double> Do ustalenia pozostaje jak sprawić by dla bardzo dużych wstawek kodu pojawił się pionowy pasek przewijania. Sam toolbar jest niekonfigurowalny, z przyjemnością pozbyłbym się ikonki drukowania i ikonki 'O programie'.