2008-04-19

Zmiana rozmiaru partycji HFS

Przy okazji przenosin ze starego laptopa na nowego dorosłem do robienia backupów. W podjęciu tej doniosłej decyzji na pewno pomógł Wehikuł Czasu dostępny w Leopardzie - wcześniej po prostu nie chciało mi się szukać, konfigurować i testować programów robiących kopie zapasowe. Kupiłem zewnętrzny dysk My Book Essential Edition, sformatowałem go jako HFS, kilkoma kliknięciami skonfigurowałem co i gdzie ma być zapisywane i po dwóch minutach Mac zaczął tworzenie pierwszej kopii. Trochę to trwało - na dysku w ciągu niecałego miesiąca zebrało się 40 GB w około milionie (!) plików - ale kolejne przyrostowe backupy były już szybkie.

Po kilku dniach uznałem (rychło w czas), że dobrze byłoby zrobić dodatkową partycję dla VirtualBoxa. W Leopardzie można za pomocą Disk Utility przeskalowywać partycje "w locie", nawet bez odmontowywania jej, ale u mnie ta możliwość była niedostępna. Okazało się, że winny jest typ tablicy partycji: dysk zewnętrzny miał MBR, a zmiana rozmiaru jest możliwa tylko na dysku z tablicą GUID. Nie znalazłem niestety żadnego narzędzia do konwersji tablicy partycji, więc pozostało tylko ponowne zainicjowanie dysku - na szczęście nie było na nim nic poza backupami z kilku dni. Po utworzeniu partycji od nowa z zaznaczoną opcją GUID rzeczywiście można zmieniać rozmiar, dodawać i usuwać partycje bez żadnego problemu.

A więc, drogie dzieci, czego się dzisiaj nauczyłyście? Dodając nowy dysk, który ma być obsługiwany przez Mac OS X, pamiętajcie o sprawdzeniu typu tablicy partycji.

Przy okazji: partycje GUID są obsługiwane przez Windows Vista, Windows Server 2003 i 2008 oraz 64-bitowy Windows XP.
Share:

2008-03-27

MacBook Pro i Cortland

Od około dwóch tygodni mam MacBooka Pro. Laptop jest bliski ideału: szybki, cichy, bardzo dobrej jakości ekran, miłe drobiazgi jak wbudowana kamera czy pilot na podczerwień i oczywiście Mac OS X. Jedyne czego bym jeszcze chciał, to nieco dłuższa praca na baterii - teraz wytrzymuje około 3.5-4 godziny.

Nie obyło się jednak bez zgrzytów: pierwszy egzemplarz który kupiłem miał plamkę przy prawej krawędzi wyświetlacza. Niewielką (jakieś 2-3 piksele), ale widoczną na jasnym tle - najprawdopodobniej uszkodzenie powłoki antyodblaskowej. Tutaj wielkie brawa dla Cortlandu - po trzech dniach od zgłoszenia dostałem nowego laptopa z idealnym ekranem. Dodatkowo drugi MacBook miał już w komplecie Leoparda (pierwszy tylko Tigera). Po pewnym czasie korzystania z nowego sprzętu zauważyłem, że zasilacz wydaje podejrzane dźwięki - dość głośne buczenie i trzeszczenie. Napisałem maila do Cortlandu (tak, jestem uciążliwym klientem) i bez jakichkolwiek problemów dostałem nowy zasilacz. Sprawia lepsze wrażenie, ale jednak nie jest tak bezgłośny jak iBookowy. Może po prostu ten-typ-tak-ma.

Podsumowując: wygląda na to, że jakość Apple to już nie to samo co 3 lata temu, kiedy kupowałem iBooka. Szkoda. Jednocześnie obsługa w Cortlandzie jest naprawdę świetna i mam nadzieję że w razie ewentualnych problemów (odpukać) będzie dalej tak samo.
Share:

2008-03-19

Komponent Spring jako ServletFilter

Nic odkrywczego, ale filtrów nie ma w przykładach zawartych w dystrybucji Spring i nie ma o nich słowa w Reference Documentation. Pamiętam że jakiś czas temu popełniłem takowy, ale parę dni temu chcąc znowu użyć tej samej konstrukcji nie pamiętałem szczegółów. Starzeję się. Dlatego, celem utrwalenia zdobytej (ponownie) wiedzy, powstał ten wpis.

Aby możliwe było użycie komponentu Spring jako filtru musi on implementować interfejs javax.servlet.Filter i to wszystko. Potem dopisujemy go w konfiguracji XMLowej lub adnotujemy jak każdy inny bean. Cała sztuczka jest w pliku web.xml aplikacji:

<filter>
<filter-name>nazwa</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

Klasa DelegatingFilterProxy będzie delegować wywołania metody doFilter(...) do beana o takiej samej nazwie jak nazwa filtra. Jeżeli chcemy, aby filtr miał inną nazwę, to trzeba dodać parametr targetBeanName:

<filter>
<filter-name>nazwaFiltra</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>nazwaBeana</param-value>
</init-param>
</filter>

Należy pamiętać, że pomimo tego iż bean implementuje interfejs Filter, to jego metody init(...) i destroy(...) domyślnie nie są wywoływane. Aby to zmienić musimy ustawić w konfiguracji kontekstu Spring atrybut targetFilterLifecycle na true:

<bean id="nazwaBeana"
class="klasaBeana"
p:targetFilterLifecycle="true">
...
</bean>
Share:

2008-03-14

Wydajność ASUSa A696

Czytając recenzję ETENa Glofiisha X800 na stronie PDAclub.pl trafiłem na ciekawy test wydajności grafiki i procesora PDA. Wykorzystany do tego celu został odtwarzacz The Core Pocket Media Player i "standardowy" trailer Matrixa. W zamieszczonej tam tabelce nie ma ASUSa A696, więc nie pozostało nic innego jak przeprowadzić test samemu.

TCPMP ma kilka sterowników wideo i wyniki różnią się dość znacznie w zależności od wybranej wersji. W przypadku A696 najlepiej wypada Intel XScale, pozostałe dwa (DirectDraw i GDI) są około 20% wolniejsze. Dodatkowo na wynik testu wpływa to, czy PDA ma podłączony zasilacz czy nie - jak można się domyślić zasilany z baterii procesor nie działa z pełną mocą (jednak różnica w teście jest niewielka, około 5%). Testy przeprowadziłem na wersji 0.71 odtwarzacza, z podłączonym zasilaczem i z kartą pamięci SanDisk Extreme III 2GB. Każdy test był powtórzony 3 razy, w tabeli poniżej jest średnia uzyskanych wyników:

 z pamięci wewnętrznejz karty SD
Intel XScale334%316%
DirectDraw259%249%
GDI271%259%

Porównując powyższe wartości z tymi na PDAclub.pl widać, że A696 plasuje się wśród najlepszych PDA z procesorem Intel PXA270 416MHz - jedynie Palmax GPS ma lepszy wynik.
Share:

2008-03-09

CXF nie działa ze Spring 2.5.2

A konkretnie CXF 2.0.4-incubator nie działa ze Spring Framework 2.5.2 (w wersjach wcześniejszych jest w porządku). Powodem jest zmiana sposobu konfiguracji kontekstu Spring. Dotychczas w konstruktorze
ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
parametr configLocations mógł mieć wartość null - był w takiej sytuacji zastępowany pustą tablicą. W wersji 2.5.2 nie jest już zastępowany, a w metodzie setConfigLocations (wykorzystywanej przez powyższy konstruktor) następuje próba odczytania rozmiaru tablicy i rzucany jest wyjątek NullPointerException. Błąd został zgłoszony kilka dni temu (numer SPR-4531) i jak na razie nie ma reakcji ze strony autorów - pozostaje cofnięcie się do wersji 2.5.1.

[aktualizacja 2008.03.10]


Nieoceniony Juergen Hoeller zainteresował się tym bugiem - w dzisiejszym night buildzie wersji 2.5.3 ma być poprawiony. Rewelacja po raz drugi (pierwsza była tutaj).

[aktualizacja 2008.03.12]


Nie miałem czasu aby sprawdzić od razu, dopiero dzisiaj ściągnąłem najnowszy build. Oczywiście błąd jest poprawiony.

Share: