Dziś, po krótkiej przerwie, dość niestandardowy post na temat rzeczy – wydawałoby się trywialnej i niewartej wspominania – a mianowicie “usługi” Windows Search, która zawarta jest w systemach Windows 7 i Windows Vista. Generalnie jest to całkiem przyjemna i ułatwiająca życie rzecz, umieszczona w dobrym miejscu w interfejsie (w Windowsach to ewenement), jednak nie dla wszystkich. I co najgorsze – to ja jestem osobą, dla której zaproponowane rozwiązania są niedostosowane :(

Ale od początku: ostatnio mam projekt na wykonanie przeróbek strony stworzonej w PHP-Fusionie, co już samo w sobie jest bolesne. Odliczając wszystkie tragedie związane z tym faktem dochodzi także potrzeba częstych edycji różnych plików i poszukiwania implementacji różnych funkcji, które znajduje się w kodzie. Problem oraz jego rozwiązanie teoretycznie są trywialne – wystarczy wejść do głównego katalogu projektu, wpisać nazwę funkcji, którą chcemy znaleźć oraz zaznaczyć opcję wyszukiwania po zawartości i otrzymać śliczną listę plików, które zawierają podaną frazę. Proste? Nie w Windows Vista/7, a raczej – nie dla programistów PHP tworzących kod na Windowsach.

Okazuje się bowiem, że podana fraza nie jest znajdowalna. Czemu? Na pierwszy rzut oka nie wiadomo. Explorer nie pokazuje żadnego paska postępu, gdy wyszukujemy coś po zawartości plików, wobec czego nie wiadomo, czy już przeszukał, czy cały czas przeszukuje te 5000 plików. Nie wyświetla także komunikatu, że np. w katalogu znajduje się 4000 plików php, których on nie indeksuje w żaden sposób, ani też, że folder znajduje się w lokalizacji, która w ogóle nie jest indeksowana. Uh… sporo tego, a to przecież taki trywialny problem był :)

Na stronach Microsoftu jest co prawda trochę informacji na temat tego, co może Windows Search, czego nie oraz innych takich. Ale ty właśnie robisz ważny projekt, masz mało czasu i chcesz znaleźć te cholerne funkcje. Co możesz zrobić? Jest kilka możliwości:

  1. Można wywalić Windowsa, zainstalować jakiegoś normalnego Linuxa, gdzie jest dostęp do normalnych narzędzi tj. jak normalna konsola. Średni czas na wykonanie: 1 dzień z przygotowaniem całego środowiska do działania. Trochę dużo.
  2. Instalacji Cygwina na Windowsie. Nigdy nie instalowałem, nie wiem ile trwa, może warto się kiedyś zainteresować. W każdym bądź razie daje dostęp do grepa w konsoli.
  3. Skonfigurowanie ustawień Windows Search tak by indeksowane były także pliki php (oraz kilka innych typów przy okazji pewnie). Średni czas: 1h, przy czym 20 min przeznaczymy na znalezienie tych ustawień (nie jest to trywialne). Resztę czasu uprzyjemni nam system uniemożliwiając praktycznie pracę “indeksowaniem nowej zawartości w tle”.
  4. Instalacja narzędzi takich jak Google Desktop Search, Windows Live Search, itd. Jednak nie przepadam za udostępnianiem informacji o moim dysku firmom Google lub Microsoft i innym. Odpada.
  5. Poza kilkoma innymi możliwościami zostaje taka najmniej bolesna. Skorzystać z PowerShella.

Faktycznie PowerShell to coś co może faktycznie pomóc w tak doraźnej sytuacji, jak ta, w której się znaleźliśmy. Poniżej kilka przykładowych snippetów, które rozwiązują nasze problemy:

Select-String –pattern “TEXT_DO_WYSZUKANIA” –path “*.php”

Wyszuka ładnie wystąpienia, ale tylko w bieżącym katalogu.

dir -r | Select-String "TEXT_DO_WYSZUKANIA"

Wyszuka ładnie wystąpienia rekurencyjnie także we wszystkich podkatalogach.

Jako doraźne metody znajdują doskonałe zastosowanie, jednak, kiedy trzeba byłoby z nich bardzo często korzystać, może okazać się lepszym rozwiązaniem jednak zmiana ustawień indeksowania w systemie. Mimo wszystko dostęp do informacji przez zintegrowany z Explorerem Windows Search (kiedy działa jak należy) jest o wiele szybszy i wydajniejszy.

windows_search

Swoją drogą coraz bardziej się skłaniam do tego by kiedyś wypróbować sobie Mac OSa, który podobno Windowsowych problemów nie posiada, a niemiłe szczególiki na poziomie przytoczonego Windows Search nie występują…

Tylko ta wstrętna macowa klawiatura, myszka, design… bleee :)