Na grupie dyskusyjnej pojawił się problem generowania nazw plików. Jest sobie takie polecenie:
iconv.exe -t utf-8 "source.txt" > "target.txt"
Chodzi o to, że jeśli istnieje plik target.txt, to żeby był tworzony plik target(1).txt itd. A jeśli istnieje np. target(5).txt a nie istnieje
target(4).txt to żeby i tak był tworzony target(6).txt. Skrypt w PowerShellu, który to zadanie realizuje, może wyglądać tak:
$filename = "target.txt"
if(Test-Path "target.txt") {
$number = ls | foreach { if($_.Name -match "target\((\d+)\)\.txt") {$matches[1]} } | sort -InputObject {[decimal]$_} | select -last 1
$number++
$filename = "`"target`(" + $number + "`).txt`""
}
$command = "iconv.exe -t utf-8 source.txt > " + $filename
Invoke-Expression $command
16 października 2011Dawno nic tu się nie działo. Z jednej strony dlatego, że różne ciekawostki wrzucam na fejsa, a z drugiej z braku pomysłu na nowy kształt mojej strony domowej. Nieczekając na nowe idee, napiszę o dzisiejszej przygodzie z drukowaniem. Chciałem napisać w PowerShellu prosty skrypt drukujący na dwóch stronach, chodziło o to żeby wykonać podział strony. Chciałem w tym celu wykorzystać właściwość HasMorePages klasy PrintDocument, której używam do drukowania. Jednak przy wywołaniu metody Print() dostawałem błąd "Nieprawidłowe dojście". Trzeba więc było najpierw zgadnąć jak to jest w angielskim Windowsie. Okazało się, że jest to "The Handle is Invalid". Aha, czyli nieprawidłowy uchwyt, tłumacząc z microsoftowego na polski. Wskazywałoby to na to, że może obiekt na którym wołana jest metoda Print() jest nullem. Ale nie. Dalej okazało się, że problem występuje tylko z microsoftową wirtualną drukarką Microsoft XPS Document Write i taki sam wyjątek leci też z Notatnika. Ponieważ nie udało mi się rozwiazać problemu z tą drukarką, spróbowałem z inną, też wirtualną, microsoftową: Microsoft Office Live Meeting 2007 Document Writer. To w ogóle kolejny przykład microsoftowej miłości do długich nazw. Z tą drukarką nie było już kłopotów, skrypt wykonał się poprawnie. Ale pojawił się inny problem. Ta drukarka drukuje do plików MDI i nie bardzo jest czym je otworzyć. Microsoft poleca w tym celu zainstalować SharePoint Designer 2007. Jednak to cudo, nawet po wyłączeniu wszystkich zbędnych składników, zajmuje na dysku pół gigabajta. Trochę dużo jak na otwarcie pliczku graficznego. Tym bardziej, że jak się okazuje, ten cały MDI to w istocie TIFF. Zamiast więc instalować półgigowy program, wystarczy zmienić rozszerzenie i otworzyć plik w dowolnej przeglądarce graficznej, choćby tej systemowej. Przy okazji wyszło, że HasMorePages działa trochę inaczej niż myślałem. Nie wstawia tak po prostu podziału strony, tylko mówi, że będzie drukowana jeszcze jedna strona, czyli, że handler dla zdarzenia PrintPage ma być wywołany jeszcze raz. W tym handlerze musi być więc kod rozróżniający która strona akurat jest drukowana i w zależności od tego ustawiać zarówno treść jak i właściwość HasMorePages. 2 stycznia 2011
Przypomniało mi się, że mam konto na ICQ. To taki komunikator, o którym mało kto już pamięta. Czasem logowałem się do sieci ICQ przez transport Jabbera i byłem dostępny. Ponieważ jednak ICQ odeszło już do lamusa, chciałem skasować swoje konto. Okazało się, że nie ma takiej możliwości. Niewiele to chyba jednak zmienia bo mało jest prawdopodobne aby ktoś próbował się ze mną skontaktować przez ICQ. Nie ma więc problemu, że próbując do mnie zagadać nie dostanie informacji, że tego komunikatora już nie używam. A właściwie sieci bo komunikator ICQ znikł z mojego komputera dobrych kilka lat temu. Inną rzadko przeze mnie używaną siecią jest microsoftowy Messenger. Jestem jednak nadal na nim dostępny przez transport Jabbera, czasem ktoś zagaduje. Oczywiście nadal pozostaje GG, Jabber i Skype. Można też odzywać się na Facebooku. Nie mam co prawda otwartego ciągle FB ale jestem do niego podpięty przez Jabbera, można więc zagadać nawet jak nie mam Facebooka otwartego w przeglądarce. Czyli w sumie jak przez zwykły komunikator. 1 stycznia 2011
Kilka ciekawych cytatów do zastanowienia. Pochodzą z najnowszej książki Szymona Hołowni "Bóg. Życie i twórczość".
(...) czystość serca - prawda życia, dostrzeganie i niezrywanie delikatnych nici relacji między światem zmysłowym i duchowym (kto nie rozumie zależności między swoją seksualnością i duchowością, nigdy nie pojmie relacji między ciałem a duszą, człowiekiem a Bogiem).
(...) jeśliby wydarzenie w Kanie czytać jako historię o ludzkim cierpieniu (choć brak wina dla wielu bywa też błogosławieństwem), Maryja daje ciekawą podpowiedź, jak należy postępować z Bogiem. Po takiej odpowiedzi swojego Syna idzie bowiem do organizatorów imprezy i zapowiada im, że On na pewno coś zaradzi. Wspomniany już i nieoceniony doktor Jan Kozłowski, gdy rozbieraliśmy ten fragment na czynniki pierwsze, zwrócił uwagę, że można by go na dobrą sprawę zamknąć w schemacie następującym: Maryja do Jezusa: "Idź po bułki". Jezus: "To nie moja sprawa". Maryja: "W takim razie kup pięć". Może tak właśnie trzeba modlić się do Boga w sytuacjach, gdy czegoś nam brakuje i wydaje się nam, że Bóg milczy?
Filozof Jazek Wojtysiak (w miesięczniku "Znak", nr 632) pisze: Wyobraźmy sobie - jak zrobił to Leibniz - że całości pośredniej wiedzy Boga odpowiadają różne możliwe światy. W jednych zawsze świeci słońce, ale ludzie są przez to leniwi i przestają się rozwijać. W innych zawsze jest zimno i tylko nieliczne jednostki potrafią zachować pogodę ducha. W jeszcze innych są sami święci, co trąci nudą - gdzie indziej zaś przeważają bandyci, co grozi unicestwieniem samego świata. Przykłady można by mnożyć. Dla teisty jedno jest pewne - Bóg na podstawi swej pośredniej wiedzy wybiera do realizacji ten świat, w którym (mimo wszystko) zrealizuje się wiele dobra. Dlaczego więc doświadczamy tyle zła? Być może świat o mniejszej ilości zła nie byłby (nie jest) dla wolnych istot możliwy. Może w świecie takim nie mogłoby w szerszej perspektywie zrealizować się jakieś istotne i wielkie dobro. 7 czerwca 2010
W sytuacjach kryzysu ekonomicznego, choć nie tylko, pojawia się pytanie o to, czy kapitalizm jest na pewno dobrym rozwiązaniem i czy rozwiązania socjalne nie byłyby skutecznym lekarstwem na biedę i inne niedobory. Przy tym wyciągane są twierdzenia o drapieżności kapitalizmu, który ignoruje potrzeby najbiedniejszych i wprowadza ich w jeszcze większą nędzę. Nie ma znaczenia, że fakty bez przerwy pokazują co innego. Kto chciałby mieszkać w Korei Północnej? Nikt? A przecież tam jest socjalizm, więc musi być wspaniale.
Zacząć trzeba od tego, czym jest kapitalizm. Niektórzy uważają, że jest to pogoń za pieniędzmi. Nie. Kapitalizm to wolność działania. Mogę pracować gdzie chcę, mogę zatrudniać kogo chcę, mogę kupować co chcę i mogę sprzedawać co chcę. Transakcja jest zawierana na podstawie wolnej woli dwóch stron a więc tylko wtedy, gdy obie strony uznają ją za korzystną dla każdej z nich. Między sobą ustalają cenę. Warto też zauważyć, że kapitalizm nie został przez nikogo wymyślony, nie narodził się w umyśle żadnego filozofa. Jest po prostu porządkiem naturalnym.
Cechą kapitalizmu jest to, że nie próbuje zmieniać ludzi. Socjalizm zakładał, że będzie fajnie jak upaństwowi się się różne dobra i środki produkcji. Będzie fajnie bo wszyscy będą wspólnie pracować i pomnażać dobra. Jednocześnie będą dostawać odpowiednie wynagrodzenie i inne dobra, np. mieszkania.
Socjalizm nie bierze pod uwagę, że ludzie mają też złe cechy. Że potrafią coś ukraść albo unikać pracy. Że nie dbają o to, co jest państwowe czyli de facto niczyje. Że każdy dba o siebie. Stąd też biorą się różne patologie: kradzieże sprzętu z miejsca pracy, uchylanie się od pracy i jej nierzetelne wykonywanie. Charakterystyczna dla socjalizmu jest produkcja bubli oraz ciągłe niedobory różnych produktów i materiałów. Nikt nie ma motywacji aby pracować efektywnie, wydajnie. Skoro miejsce pracy jest chronione, skoro wynagrodzenie nie jest uzależnione od wyników to nie ma sensu się starać. Nie pomogą tu żadne hasła, transparenty.
Socjalizm to także redystrybucja dóbr, mająca za zadanie wyrównać różnice w zamożności i zapewnić różne dobra biednym. Ta właśnie redystrybucja, kojarząca się z Robin Hoodem i Janosikiem, jest dla wielu osób bardzo pociągająca. Zabrać bogatym i dać biednym. Wszyscy będą szczęśliwi. Praktyka jednak ciągle pokazuje, że tak nie jest. Sam pomysł tworzenia szczęścia przez zabieranie jest dziwny i już tutaj powinno zapalić się czerwone światełko. Zabierając bogatym karzemy ich za ich przedsiębiorczość i pracowitość. Dając biednym zniechęcamy ich do pracy i rozwoju. Rozdawnictwo tworzy zazdrość. Siłą rzeczy jedni dostaną a drudzy nie. Jeśli ktoś coś ma bo zapracował na to uczciwą i ciężką pracą to mu nie zazdroszczę. Jeśli ktoś coś ma bo dostał to za darmo to zaczynam mu zazdrościć. Szczególnie jeśli najpierw zostało to zabrane mnie. Oczywiście zazdrość jest czymś złym ale jednocześnie jej występowanie jest zjawiskiem naturalnym więc warto się zastanowić nad jej przyczynami.
Kolejna sprawa to to, że państwo nie da nigdy 100% tego co zabrało. Zawsze część pieniędzy zostanie zmarnotrawiona. Jak pokazała historia i jak widać obecnie są to duże kwoty, rzędu kilkudziesięci procent. Państwo jest po prostu nieefektywne. Warto tu się zastanowić nad czterema przypadkami gdy się coś dla kogoś kupuje. W pierwszym przypadku kupujemy dla siebie za swoje pieniądze. Wtedy dbamy żeby to było i dobre i tanie. W drugim przypadku kupujemy coś dla kogoś za swoje pieniądze. Wtedy dbamy, żeby było tanio ale już żeby było dobre to nie bardzo. W trzecim przypadku kupujemy dla siebie za czyjeś pieniądze. Zależy nam na jakości ale nie obchodzi nas cena. Czwarty przypadek to wtedy gdy kupujemy coś komuś za pieniądze jeszcze kogoś trzeciego. Wtedy nie dbamy już ani żeby było tanio ani żeby było dobrze. Nietrudno zgadnąć w którym przypadku pieniądze zostaną wydane najoptymalniej. Oczywiście w pierwszym. Zaraz ktoś odpowie, że on nie jest samolubny i o innych też dba. Jasne, ale 1) rzadko się zdarza, że na kimś zależy nam bardziej niż na samym sobie, 2) jeśli nawet tak, to i tak my najlepiej znamy swoje potrzeby i najlepiej wiemy co jest nam potrzebne. W przypadku redystrybucji dóbr przez pańtwo występuje wariant czwarty. Urzędnik wydaje nieswoje pieniądze na nieswoje cele i takich, którzy dbają o obywateli bardziej niż o samych siebie pewnie można policzyć na palcach jednej ręki. Takie coś po prostu nie może działać optymalnie. Czasem działa dosyć dobrze, ale wymaga to m.in. ciągłego kontrolowania. Z redystrybucją wiąże się jeszcze jeden problem. Daje ona ogromne pole do nadużyć. Urzędnicy państwowi mają wiele możliwości do defraudacji pieniędzy oraz są podatni na korupcję. Jeśli od decyzji urzędnika zależy przyznanie tego czy innego dobra to spora grupa obywateli będzie starała się za pomocą łapówki nakłonić go do przekazania tego dobra właśnie im.
W kapitalizmie jest inaczej. Żeby coś otrzymać, trzeba dać w zamian coś równie wartościowego, towar lub pracę. Za zły towar nie dostanie się zapłaty. Za złą pracę również. Człowiek w naturalny sposób jest zachęcany do dobrej pracy, do doskonalenia się. To, że chce mieć więcej, że chce pomnażać swój majątek sprawia, że musi dobrze pracować, że musi być potrzebny. W ten sposób cecha jaką jest chciwość staje się pozytywna gdyż przynosi pożytek reszcie społeczeństwa. Kapitalizm premiuje pracowitość i pomysłowość, neguje lenistwo i niestaranność.
Ktoś teraz powie, że kapitalizm nie zawsze się sprawdza, że jest bieda itp. Należy tu zaznaczyć, że kapitalizm nie jest utopią. Nie gwarantuje, że wszyscy będą szczęśliwi. Kapitalizm jest po prostu systemem, który daje każdemu możliwość dążenia do szczęścia. W którym biedny może się w każdej chwili z tej biedy wyrwać, może w każdej chwili podjąć pracę albo wymyślić jakiś wynalazek i nikt mu w tym nie będzie przeszkadzać. Ktoś może też powiedzieć, że gdzieś, ktoś dorobił się nieuczciwie. Tak, ale co ma do tego wolny rynek? Kapitalizm nie jest utopią i nie zapobiegnie nieuczciwości. Jest natomiast skutecznym narzędziem do walki z nią. Jeśli konsumenci przestaną kupować towary od nieuczciwiego przedsiębiorcy to będzie to dla niego dotkliwsza kara niż jakaś grzywna nałożona przez urzędnika. Należy też zaznaczyć, że wolny rynek nie ma rozwiązać wszystkich problemów. Gdy ktoś został pokrzywdzony to ma do dyspozycji niezawisłe sądy gdzie może dochodzić sprawiedliwości.
Przy dyskusji na temat kapitalizmu i socjalizmu pojawia się wątek ludzi chorych, starych, niepełnosprawnych itp. Kapitalizm jako system polegający na wolnym rynku zostawia ich z boku. Jak wspomniano wcześniej, kapitalizm nie jest systemem utopijnym i nie rozwiązuje wszystkich problemów. Tutaj pole do popisu mają organizacje pozarządowe, charytatywne, fundacje itp. One o wiele lepiej wiedzą kto potrzebuje pieniędzy oraz zbiorą je i przekażą znacznie efektywniej niż państwo. Jak widać w praktyce, państwo zapewnić potrafi jedynie niski standard usług medycznych.
Mówiąc o kapitalizmie trzeba koniecznie wspomnieć o jednej ważnej rzeczy: o odpowiedzialności. W kapitalizmie każdy jest odpowiedzialny za siebie. Jeśli założy firmę a ona zbankrutuje to on ponosi konsekwencje. Jeśli nie będzie odkładał na emeryturę to jej nie będzie miał. Jeśli się nie ubezpieczy to będzie mu ciężko podczas choroby albo klęski żywiołowej. Jeśli się nie będzie rozwijał nie osiągnie sukcesu.
W socjalizmie jest odwrotnie. Człowiek czuje ciepełko państwa opiekuńczego, które da mu edukację, opiekę zdrowotną, emeryturę i nie będzie za dużo wymagać. Nie umrze z głodu a w chorobie dostanie jakąś tabletkę, na starość parę groszy emerytury.
Jakie są efekty tych dwóch podejść, mogliśmy obserwować wielokrotnie. W PRLu każdy miał pracę, opiekę zdrowotną, bezpłatne studia, czasem dostawało się mieszkanie. Więc niby fajnie. Tylko, że jakoś wszystko było takie szare, brzydkie, kańciaste, smutne. Nasze produkty bardzo rzadko mogły konkurować z zachodnimi. Tam natomiast każdy musiał dbać o siebie, płacić za studia, mógł zostać zwolniony z pracy itd. A jednak to w krajach kapitalistycznych ludzie byli bardziej zadowoleni z życia, mieli o wiele lepszej jakości dobra i usługi, odnosili duże sukcesy.
To jest właśnie różnica między państwem opiekuńczym, socjalnym a kapitalistycznym, gdzie każdy może o sobie sam decydować. Z jednej strony jest stagnacja a z drugiej rozwój. To do USA wyjeżdżali Polacy. W przeciwną stronę jedynie z sentymentu.
Mówiąc o wadach kapitalizmu warto się najpierw przyjrzeć gdzie on naprawdę jest. Jako przykład podaje się np. Wall Street, gdzie bankierzy przyczynili się do kryzysu finansowego. Tam kapitalizmu już mało zostało. Mamy banki i korporacje powiązanie z rządem, dostające od niego pieniądze za pomocą FEDu. Kapitalizm jest wtedy gdy mamy wolny rynek, gdy inwestuje się swoje pieniądze. Tam rząd próbuje sterować gospodarką wydając pieniądze podatników. To nie jest kapitalizm. To jest chory system stworzony przez polityków, którzy wymyślili sobie, że rozgrzeją gospodarkę za pomocą akcji kredytowej. Kapitalizm jest wtedy, gdy rząd się nie miesza do gospodarki, np. drukując pieniądze, a bank centralny nie próbuje sterować gospodarką za pomocą stóp procentowych i innych mechanizmów. Podobnie nie można w Polsce mówić o prywatnej służbie zdrowia dopóki wszystkim rządzi NFZ. W innych kwestiach też nie ma wolności. Na wszystko trzeba mieć koncesje, pozwolenia. Są wysokie koszty pracy, rozmaite podatki. W efekcie firmy upadają, zarobki są niskie, powszechna jest korupcja. Potem słyszy się, że kapitalizm nie działa. Kapitalizm? Ten, którego nie ma?
Tutaj dochodzimy do roli rządu. Wielu ludzi uważa, że powinien mieć on duże uprawnienia i troszczyć się o potrzeby ludzi. A gdy mu to nie wychodzi to trzeba jeszcze bardziej zwiększyć jego uprawnienia. To ślepa droga, prowadząca do państwa totalitarnego. Rząd powinien być mały i efektywny, jak najtańszy i jak najmniej uciążliwy. Nieprawdą jest, że o wszystko musi się troszczyć państwo. Tu dochodzimy do ważnej kwestii jaką jest podejście do człowieka. Czy traktujemy go jak idiotę, który nie potrafi o siebie zadbać czy też jak wolnego człowieka. Niestety państwo często traktuje człowieka jak idiotę, np. każąc mu się ubezpieczyć (ZUS, OFE) tak, jakby sam nie mógł zadbać o swoją przyszłość. Oczywiście ubezpieczając go samemu robi to strasznie nieefektywnie. Jednocześnie tak traktując człowieka państwo ma do niego tyle zaufania, że pozwala mu wybierać prezydenta i parlament. Jest to swego rodzaju paradoks. Człowiek naprawdę potrafi o siebie zadbać i zrobi to, jeśli nie będzie się mu przeszkadzać. Ludzie potrafią się zorganizować i zrobić to, co jest im akurat potrzebne. Oczywiście są takie rzeczy, które bez aparatu państwowego byłyby trudne do zrobienia. Jednak bardzo często sprawy te nie wymagają załatwiania na najwyższym szczeblu. Zwykle poradzą sobie władze samorządowe. Wszystko powinno się odbywać na jak najniższym poziomie, najbliżej ludzi i ich spraw. Wtedy ich potrzeby będą zaspokojone najlepiej. Gdy państwo zajmie się armią (obroną przed wrogiem zewnętrznym), policją (ochroną przed wrogiem wewnętrznym) oraz zapewni sprawne, niezawisłe sądy a resztę obszarów ludzkiej działalności zostawi w spokoju, wtedy będzie można mówić o tanim, przyjaznym państwie. 26 kwietnia 2010
Co to jest homofobia? Powszechnie określa się tym mianem praktycznie każdą postawę związaną z niechęcią do homoseksualizmu oraz jego propagatorów. Jednak czymś zupełnie innym jest fobia (lęk) a czym innym jest niezgadzanie się z czymś. Zarzut homofobii jest często używany ponieważ określa osobę, której się go stawia jako lękliwą i słabą, a w domyśle też zacofaną. Prawdziwa homofobia to jednak coś zupełnie innego. Coś, czego przykład możemy obserwować w ostatnich dniach, gdy Uniwersytet Warszawski ugina się pod presją środowisk gejowskich. To jest dopiero fobia, która jest rzeczywista i jest rzeczywistym problemem. Uniwersytet powinien być miejscem wolnej wymiany myśli i stać na straży wolności słowa. UW nie dość, że sobie z tym nie radzi to jeszcze przy okazji nie widzi problemu w propagowaniu zoofilii. Mam nadzieję, że władze mojej uczelni, jeśli znajdą się kiedyś w podobnej sytuacji, nie okażą fobii. 27 marca 2010
Dziś próbowałem skopiować parę filmów na pendrive. Szło to jednak bardzo wolno, prędkość była rzędu 370 kB/s. Zajrzałem więc do Monitora zasobów, który jest wbudowany w Windows 7. Można go uruchomić z Menedżera zadań, z zakładki Wydajność. Jest to bardzo przydatne narzędzie pokazujące m.in. transfer z/do zapisywanych/odczytywanych plików. Dzięki temu widać jaki program mieli dyskiem i dlaczego. Po uruchomieniu go zobaczyłem dużą aktywność pliku wymiany oraz pliku funkcji ReadyBoost, znajdującego się na pendrivie. Zagadka została więc łatwo rozwiązana. ReadyBoost jest jakby rozszerzeniem pliku wymiany i ma służyć zwiększeniu szybkości działania systemu. Ktoś jednak nie pomyślał, że przecież pendrive służy też do przechowywania plików użytkownika i na czas kopiowania lub odczytywania ich funkcja ReadyBoost powinna być wstrzymana. Pozostało mi więc wyłączenie ReadyBoost w okienku właściwości pendrive'a a prędkość kopiowania plików wróciła do normalnych poziomów. Ponieważ wcześniej nie zauważyłem zwiększenia szybkości działania systemu po uruchomieniu ReadyBoost wydaje mi się, że funkcja ta nie ma większego sensu i nie opłaca się jej włączać. Być może ma ona sens na bardzo szybkich pendrive'ach. 25 stycznia 2010
Niedawno obudziłem się rano by stwierdzić, że w nocy Windows 7 zrestartował się w celu instalacji poprawek. Ja wiem, że poprawki powinny być jak najszyciej zainstalowane żeby użytkownik był jak najszybciej chroniony, szczególnie jeśli w sieci już są exploity na dziury łatane przez instalowne właśnie łatki. Tylko, że przecież w ten sposób użytkownik może bardzo łatwo stracić swoją pracę. Jeśli nawet wcześniej wszędzie gdzie trzeba kliknie "Zapisz" to i tak jeśli miał włączonych dużo programów to musi je potem mozolnie włączać i ustawiać różne rzeczy. Warto więc wiedzieć jak wyłączyć restarty. W tym celu trzeba uruchomić edytor zasad grup wpisując gpedit.msc do okienka Uruchom... W edytorze wybieramy: Konfiguracja komputera -> Szablony administracyjne -> Składniki systemu Windows -> Usługa Windows Update. Wybieramy opcję o wdzięcznej nazwie "Bez automatycznego uruchamiania ponownego dla zaplanowanych aktualizacji automatycznych przy zalogowanych użytkownikach". Zmieniamy jej stan na Włączone. 14 stycznia 2010
Ponieważ dawno nie było tu żadnego wpisu, warto by napisać coś ciekawego. Ostatnio zdarzyło mi się dwa razy dostać bana od mojego switcha Cisco, pochodziły z funkcji port security. Bany były za nieznany adres MAC. Było to bardzo dziwne, gdyż nie podłączałem żadnych nowych komputerów. Przyczyna mogła być jedna - to Windows sam zmienia sobie adres MAC. Trzeba było tylko ustalić który jego składnik to robi, po co i jak to wyłączyć. Adresy były następujące: 00:0D:3A:FD:EA:1B oraz 00:0D:3A:E1:C1:14. Przedrostek 00:0D:3A jednoznacznie identyfikował je jako należące do Microsoftu. Googlanie wykazało, że adresy te zostały wygenerowane przez usługę Link Layer Topology Discovery (LLTD), której Windows używa do wyznaczania topologii sieci. Zakres generowanych adresów to od 00-0D-3A-D7-F1-40 do 00-0D-3A-FF-FF-FF. LLTD składa się z dwóch komponentów, respondera i mappera. Można je łatwo wyłączyć przez group policy. Odpalamy więc gpedit.msc i klikamy: Konfiguracja komputera -> Szablony administracyjne -> Sieć -> Wykrywanie topologii warstwy łączy. Tam mamy możliwość wyłączenia mappera i respondera. 16 października 2009
Niedawno na grupach dyskusyjnych ktoś zapytał jak można wykonać drag & drop programowo. Chodziło o program, do którego okienka trzeba było przeciągnąć plik. Googlając natknąłem się na komunikat WM_DROPFILES, który można wysłać do okna programu i w ten sposób spowodować, że zachowa się on tak, jakby zostały na jego okno przeciągnięte pliki. Działa to np. z Notatnikiem. Niestety jednak WM_DROPFILES jest metodą dosyć starą i rzadko działa. Większość wpółczesnych programów pod Windows do obsługi przeciągania używa przeciągania OLE, które wymaga aby kursor został przesunięty i znalazł się na oknem będącym odbiorcą przeciąganych danych. Trzeba by więc programowo przesuwać kursor myszy a praktycznie nie zawsze chcielibyśmy tego uniknąć. Tak więc wychodzi na to, że programowo, bez machania kursorem można zrobić tylko przeciąganie i upuszczanie starego typu. Poniżej wklejam przykładowy kod źródłowy do przeciągania pliku, podanego jako parametr wywołania, do okna Notatnika:
#include <windows.h>
#include <iostream>
#include <shlobj.h>
using namespace std;
int main(int argc, char ** argv) {
if (argc!=2) {
cerr << "wrong number of parameters!" << endl;
return 1;
}
char file[MAX_PATH];
GetFullPathName(argv[1], MAX_PATH, file, NULL);
cout << file << endl;
DROPFILES s;
s.pFiles = sizeof(s);
s.pt.x = 1;
s.pt.y = 1;
s.fNC = false;
s.fWide = false;
HGLOBAL hDrop;
BYTE * p;
hDrop = GlobalAlloc(GHND, sizeof(s) + strlen(file) + 2);
p = (BYTE*)GlobalLock(hDrop);
CopyMemory(p, &s, sizeof(s));
CopyMemory(p + sizeof(s), argv[1], strlen(file)+1);
GlobalUnlock(p);
PostMessage(FindWindow("Notepad", NULL), WM_DROPFILES, (WPARAM)hDrop, NULL);
return 0;
}
10 września 2009Udało mi się skończyć pisanie pracy inżynierskiej i złożyć ją w sekretariacie Instytutu Automatyki. Teraz czekam na wyznaczenie terminu obrony. 19 sierpnia 2009
Jest rzeczą normalną, że w prasie popularnej pisząc o zagadnieniach naukowych używa się pewnych uproszczeń. Niestety Onet i Dziennik bardzo mocno w tym temacie przeginają i często w dziale naukowym publikują zupełne bzdury. Wydaje mi się też, że wynika to nie tyle z uproszczeń co z zupełnej nieznajomości tematu przez dziennikarzynę z działu naukowego. Ktoś może powiedzieć, że w przypadku Onetu są to zwykle przedruki i oni sami tego nie piszą. Co z tego? To mogą już publikować wszystko bez jakiegokolwiek sprawdzania? Poniżej zamieszczam bzdurę roku opublikowaną dziś przez Onet: Jak wyjaśnia Maria Geha z Uniwersytetu Yale, działa to na tej samej zasadzie, na jakiej dociera do nas światło słoneczne. Promieniom słonecznym zajmuje 8 minut, żeby dotrzeć na Ziemię, więc kiedy oglądamy wschód Słońca, tak naprawdę widzimy gwiazdę, która wzeszła kilka minut wcześniej. Podobnie, gdyby Słońce nagle zaszło, również nie wiedzielibyśmy o tym przez tych kilka minut. WTF!? Wschód i zachód słońca są to efekty mające miejsce na ziemi! Jest to wyjście/wejście danego obszaru Ziemi w jej własny cień. Nie widzimy więc go z opóźnieniem 8 minut tylko bardzo krótkiego ułamka sekundy. Nawet gdyby więc walnął jakiś wielki meteoryt i kopnął Ziemię tak, że zachód nastąpiłby szybciej to zobaczylibyśmy to od razu.
Przyglądając się stronie z artykułem widzimy, że oznaczony jest on jako przedruk z CNN. Google wskazuje artykuł źródłowy. Czytamy w nim: Looking so far back in time may sound like science fiction, but it's possible because light travels at a finite speed and takes a certain amount of time to get from one place to another, said Marla Geha, an assistant professor of astronomy at Yale University.
In our own cosmic neighborhood, it takes the light from the sun eight minutes to reach Earth, so when you look at a beautiful sunrise, you see the star as it appeared eight minutes ago. If the sun were to suddenly go dark, you wouldn't know it for those several minutes. I tu jest wszystko OK. CNN pisze o tym, że obserwując wschód słońca widzimy je takie, jakie było ono 8 minut temu. A nie, że wzeszło 8 minut temu! Z kolei ostatnie zdanie nie ma nic wspólnego z zachodem Słońca tylko z hipotetyczną sytuacją jego nagłego zgaśnięcia. Faktycznie dowiedzielibyśmy się o tym po 8 minutach. Natomiast takie sytuacje jak zachód Słońca czy też jego zaćmienie przez Księżyc mają miejsce tak blisko nas, że opóźnienie jest poniżej sekundy. Poza tym pani z Yale wcale się nie nazywa Maria tylko Marla. Nawet imię zostało przekręcone. A więc jednak wina Onetu, a konkretnie jego pracownika, który nie dość, że nie potrafi tłumaczyć z języka angielskiego to brakuje mu szkolnej wiedzy z astronomii. Ale skoro na Onecie nikt nie ma czasu na poprawianie literówek, których jest mnóstwo, a nawet błędów gramatycznych, bo liczy się tylko szybkość publikacji, to nie ma się dziwić, że takie są efekty. A Onet nie ma i tak się czym przejmować, ciemny lud wszystko kupi. 18 sierpnia 2009
Dziś kolejny raz spotkałem się z przypadkiem podawania na forum różnych bzdurnych porad mających na celu przyspieszenie działania Windows. Chodziło o wartość NonPagedPoolSize w rejestrze, której ustawienie na 95% wielkości RAMu ma spowodować, że system będzie wykorzystywał całą pamięć a dopiero potem zacznie korzystać z pliku wymiany. Oczywiście nie jest to prawda, ponieważ wpis ten dotyczy niestronicowanej pamięci jądra a nie pamięci alokowanej przez aplikacje przestrzeni użytkownika. Ale nikt się nie zastanowi, nie pomyśli, nie poczyta, tylko przekleja "poradę" z forum na forum.
Inna popularna bezsensowna porada, żeby wielkość pliku wymiany ustawić proporcjonalnie do wielkości RAMu, ze współczynnikiem zwykle w okolicach 1,5. Już sama logika mówi, że to bez sensu. Wynika z tego zalecenia bowiem, że czym mamy więcej RAMu tym większy musimy zrobić swap. A po to przecież kupujemy RAM żeby komp nie musiał uciekać się do pliku wymiany tylko zawsze miał pod ręką pamięć fizyczną. Zgodnie z definicją, plik wymiany służy jako brakująca pamięć. Jego wielkość powinna być więc różnicą pomiędzy zapotrzebowaniem zgłaszanym przez nasze aplikacje a posiadaną pamięcią fizyczną. Nie mam pojęcia czemu tak prosta zależność jakoś uchodzi uwadze wielu ludzi i powtarzają bezsensowne brednie. Są też mniej ekstremalne porady, wynikające ze słabego rozumienia tekstu albo jakichś nieszczęśliwych skojarzeń. Można więc wyczytać np. że wartość SfcScan w rejestrze jest odpowiedzialna za uruchamianie chkdsk.exe podczas startu systemu albo że należy wyłączyć QoS bo zjada 20% pasma.
Problem z głupimi poradami jest nie tylko taki, że mogą one spowodować spadek wydajności systemu lub niestabilność. Na podstawie tych porad są potem tworzone programy, które mają powodować przyspieszenie pracy systemu. Zaznaczam wyraźnie, że nie chodzi mi tu o programy takie jak TweakUI, które pozwalają łatwo ustawić niektóre rzeczy i dostosować do swoich potrzeb. Mam na myśli aplikacje, których autorzy obiecują wzrost wydajności o kilkaset procent i chcą za te programy kasę. Nieraz w swoich opisach mają takie brednie, że aż naprawdę trudno uwierzyć, że ktoś to kupuje. Kiedyś widzialem program, który miał rzekomo instalować w Windowsie nowe, szybsze jądro. Bez komentarza. Tak więc nie dość, że ludzie mają potem porozwalane systemy to na dodatek za to płacą. Są też porady mówiące wprost o potrzebie instalacji jakiegoś programu: do czyszczenia rejestru, defragmentacji rejestru, defragmentacji pamięci itp. Ludziom potem puchnie głowa i myślą, że bez 10 specjalnych programików i 100 wpisów w rejestrze komp nie będzie działać.
Jak uporam się z inżynierką to pewnie napiszę jakiś większy tekst na temat różnych głupich windowsowych porad. 11 czerwca 2009
Zapewne niektórzy użytkownicy Internet Explorera 8 zastanawiali się od czego zależy liczba procesów iexplore.exe. IE8 używa funkcji Loosely Coupled IE (LCIE), w której IE działa używając kilku procesów połączonych w tzw. job. Widać to np. w Process Explorerze. Taki job to grupa procesów, które mogą być razem zarządzane i mogą mieć przydzielone limity zasobów. Domyślnie liczba procesów IE8 zależy od wielkości wolnej pamięci, liczby zakładek, powiązań między zakładkami oraz ilości sesji IE. Tworzone są minimum dwa procesy iexplore.exe: jeden dla głównego okna, drugi dla zakładki. Wraz z otwieraniem zakładek ilość procesów może się potem zwiększyć.
Liczbą procesów można zarządzać za pomocą wartości TabProcGrowth typu DWORD lub tekstowego w kluczu HKCU\Software\Microsoft\Internet Explorer\Main. Określa ona ile może maksymalnie działać procesów "zakładkowych". Jeśli ustawimy ją na 0, wówczas funkcja LCIE będzie wyłączona i całe okno IE będzie działać w jednym procesie. Gdy będzie ustawiona na 1, procesy będą dwa: dla okna i zakładki. Przy ustawieniu większej liczby liczba procesów "zakładkowych" będzie się zwiększała wraz z ilością zakładek ale nie przekroczy wartości wpisanej w rejestrze.
Zamiast wartości liczbowej można wpisać też wartość tekstową. Jeśli wpiszemy słowo small, utworzone zostanie maksymalnie 5 procesów zakładkowych a trzeci proces zostanie utworzony przy 15-ej zakładce. Gdy wpisane zostanie słowo medium, IE8 działać będzie w maksymalnie 9 procesach zakładkowych a piąty proces zostanie uruchomiony przy 17-ej zakładce. Z kolei słowo maximum ustawi limit na 16 procesów zakładkowych a dziewiąty proces zostanie uruchomiony przy 21-ej zakładce.
Opisane ustawienie w rejestrze przyda się szczególnie użytkownikom pluginu IE7Pro, który niestety nie jest dostosowany do IE8 i nie ładuje się na wszystkich zakładkach. Ustawiając TabProcGrowth na 1 można sprawić, że IE7Pro będzie się ładowało zawsze poprawnie. Minusem będzie brak odporności na zawieszenie, którą dawało LCIE - zawieszenie jednej zakładki spowoduje zawieszenie całej przeglądarki. 7 czerwca 2009
Kolejny kod stworzony przy okazji pytania zadanego na grupach: jak automatycznie wydrukować wiele plików DOC? Można w tym celu napisać proste makro dla MS Worda:
Sub PrintAllFirst()
Dim myFile As String
Dim strLooking As String
strLooking = "C:\Documents and Settings\Grzegorz\Pulpit\word\"
myFile = Dir$(strLooking & "*.doc")
Do While myFile <> ""
Debug.Print myFile
Application.PrintOut FileName:=strLooking & myFile, _
Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="1", PageType:= _
wdPrintAllPages
myFile = Dir$
Loop
End Sub
6 czerwca 2009Niedawno na grupach dyskusyjnych pojawiło się pytanie o to, jak sprawdzić w którym z katalogów jest najwięcej plików. Pliki, które były w podkatalogach nie miały się liczyć, czyli przykładowo dla C:\ mogło być 10 plików a dla C:\Windows 200 plików. Jako rozwiązanie problemu wybrałem napisanie skryptu w PowerShellu, który zamieszczam poniżej:
ls . -force -recurse | Where-Object {
$_.PSisContainer -eq $true
} | ForEach-Object {
Write-Progress 'Examining Folder' ($_.FullName); $_
} | ForEach-Object {
$result = '' | Select-Object Path, Count;
$result.Path = $_.FullName;
$result.Count = @($_ | ls -force -ea SilentlyContinue `
| where {$_.PSisContainer -eq $false}).length; $result
} | sort Count -descending |foreach{$_.Path;$_.Count}
Co tu się dzieje? Najpierw za pomocą ls -r pobieramy strukturę plików i katalogów z której zostawiamy tylko katalogi.
Dla każdego z nich rozpoczynamy od wyświetlenia jego nazwy za pomocą Write-Progress. Potem ze stringa $result tworzymy
sobie strukturę o polach Path i Count. Do Path zapisujemy aktualny katalog. W Count chcemy mieć ilość plików.
W tym celu znów odpalamy ls ale już nie rekurencyjnie. Dostajemy listę z której pobieramy jej długość i zapisujemy w Count.
Następnie zostaje posortowanie wyników malejąco i wyświetlenie nazwy każdego katalogu i liczby jego plików.
Znaczek @ jest konieczny ponieważ PowerShell automatycznie jednoelementowe tablice zmienia w pojedyncze
obiekty a taki pojedynczy obiekt nie ma właściwości Length. Znaczek ten po prostu rzutuje obiekt na tablicę.
