Thursday, August 30, 2018

[AKTUALIZACJA] Windows 7 na laptopie z 2017 roku? To może się udać


Jeżeli znasz już tę historię, przejdź do ciągu dalszego.


Dzisiejszy post będzie miał charakter rantu i jest skierowany do osób wybrednych, jeżeli chodzi o konfigurowanie sprzętu na własną rękę. Nie będę w nim unikał stwierdzeń technicznych jak też powtórzeń, dzięki którym będzie wiadomo explicite, do czego się odnoszę.

Każda moja przygoda z laptopem zaczyna się od świeżej instalacji, dlatego biorę laptopa bez systemu. I tak też radzę bliskim. Dlaczego? Masa laptopów dziś to reklamówki, na których jest zainstalowane całe mnóstwo aplikacji, gier, asystentów i generalnie rzeczy, z których końcowy użytkownik na 95% korzystać nie będzie. Laptop gdzieś po miesiącu zaczyna mulić do tego stopnia, że wykonanie prostych czynności graniczy z cudem. Osoba nieznająca się pomyśli, że laptop jest wadliwy, że trzeba iść z tym do serwisu. Niemniej, w poniższym przypadku będzie zgoła inaczej.

Casus znajomego: Lenovo Legion Y520. Wariant z dwoma dyskami: 128GB SSD i 1000GB HDD; karta graficzna NVIDIA GTX 1050 + zintegrowana intelowska. Osobnik bez systemu. System Windows 7 Home Premium kupiony na allegro. (Pssst! Jeżeli chcesz sobie jeszcze kupić to musisz się pospieszyć, bo jest ich coraz mniej!)

Coraz więcej laptopów nie ma napędu optycznego. Sam mam już laptopa bez takowego, nie pamiętam zresztą kiedy ostatni raz coś potrzebowałem z płyty. Powyższy również go nie ma, więc instalacja systemu musi odbyć się albo przez sieć albo z czegoś wyjmowalnego (np. pendrive).

Windows 7 na laptopie sprzed roku? Prawie 10-letni system!?

Część z Was może pukać się w głowę, ale Windows 7 to w mojej opinii jak dotąd, mimo wieku, najlepszy system Microsoftu. W kwestii bezpieczeństwa: prawda, już 3 lata nie ma podstawowego wsparcia i w instytucjach krytycznych należałoby najpewniej przemigrować na coś czynnie wspieranego, ale jest relatywnie najmniej awaryjny.

A słyszałeś może o Windows 8.1? Windows 10?

Tak, aż za dobrze. Zaliczyłem również kilka spotkań pierwszego stopnia z komplikacjami i XXI-wiecznymi kretynizmami w powyższych i nadal uważam, że polecanie komuś Windows 7 w 2018 roku ma swoje ugruntowane uzasadnienie. Narzekać na te systemy tutaj nie będę, świat od tego nie stanie się lepszy.

Mariaż z tytułu powiódł się, ale nie obeszło się bez tarcia.

Wracając do przytoczonego Lenovo: Windows 7 udało się zainstalować, ale ani BIOS, ani instalator nie widział dysku SSD. Nie wspomnę już o konieczności uprzedniego zintegrowania sterowników USB 3.0 z instalacją Win7, bo inaczej instalator szlocha przez brak sterowników... CD/DVD ROM. Microsoft być może postanowił taktycznie nie integrować sterowników USB 3.0 do fabrycznego obrazu siódemki, bo to by pewnie wielu ułatwiło downgrade z Win8.1/10. Integracja tych sterowników potrafi napsuć krwi.
Siódemkę udało się zainstalować, ale w systemie partycjonowania MBR i to na o wiele wolniejszym HDD. Tak zostać nie mogło, nie po to kupuje się miód, żeby lizać go przez słoik. Research wyłonił konieczność aktualizacji BIOSu. Ściągamy program do flashowania BIOSu z bakcylem od producenta, wszystko fajno. Odpalamy i dowiadujemy się, że flashowanie z systemów partycjonowania innych niż EFI jest niemożliwe.

Witaj przygodo!

Komponujemy bootowalnego pendrive'a z Windows 7 przy użyciu programu Rufus (gorąco polecam ;) z pożądanym systemem partycjonowania i sterownikami do SSD (szczerze pisząc, nie wiem na 100% czy to było konieczne, ale to wybiegnięcie do przodu nic nie kosztowało, więc...). Próbujemy rozruch z tego pendrive'a; loader instalatora dostaje obstrukcji jeszcze zanim zdąży się dobrze uruchomić. Obstrukcja objawia się tak (zdjęcie bezczelnie zerżnięte z neta, f**k GDPR):

Co robić? Jak żyć? Zainstalować Windows 8.1, bo ichniejszy instalator umie w EFI. Instalujemy 8.1 tylko na moment, żeby zaktualizować BIOS. :)

I wiecie co? To się udaje.

Po aktualizacji BIOSu laptop widzi SSD. Teraz dopiero instalujemy dziadzia (Win7) tak jak zamierzono. Na tym jednak problemy się nie kończą.

Sterowniki c.d. :)

Największym ananasem w tym wszystkim były sterowniki do karty graficznej (przyp. red. NVIDIA), których do teraz nie udało się zainstalować tak, jak Bozia przykazała. Cyrk zaczął się od tego, że instalator wymagał sterowników Intela. Jakich konkretnie? Pewnie sam nie wiedział, niemniej instalacja wszystkich możliwych sterowników intelowskich nie posunęła sprawy do przodu w tej kwestii. Próba instalacji starszej wersji sterowników również się nie powiodła, ale w tym przypadku instalator twierdził, że... nie wykrył karty. Finalnie, instalacja sterowników odbyła się częściowo, ręcznie, przez Menedżer urządzeń. Co nie zmienia faktu, że ściemnianie i rozjaśnianie ekranu nie działa.

Edit: Wszystkie pozostałe sterowniki udało się pięknie zainstalować.

Rezultat?

W sensie starań włożonych we wdrożenie - sukces: instalacja bez śmieci; patrząc przez pryzmat użyteczności - sukces 95-procentowy (patrz niżej).


Czy polecam?

Zależy czego się chce. Nie każdy będzie miał też czas i cierpliwość (i być może wiedzę), żeby przedsięwziąć coś takiego. Co na pewno należy zbadać przed takimi zakupami? To, czy dla każdego urządzenia będą odpowiadające sterowniki, w powyższym przypadku - Windows 7, który jest już starym systemem. Jednak nawet po obadaniu zagadnienia może się okazać, że instalator któregoś ze sterowników strzela focha i nara, więc to w pewnym sensie nadal ryzyko.

Jeżeli przeczytałeś/aś wszystko, dziękuję.

PS Polecam laptopy z SSD - warto wydać trochę więcej kasy. Przy odpowiedniej konfiguracji system chodzi jak rakieta.


Aktualizacja (13.09.2018)


Kontynuacja będzie wyłącznie o sterownikach do karty graficznej.
Kilka dni temu NVIDIA wydała kolejną wersję sterowników; podjąłem próbę zainkorporowania ich na opisanym wcześniej osobniku. Ten sam błąd, nadal żąda sterowników do Intela. Niemniej, ponowna inspekcja statusu sterowników intelowskich przy użyciu ichniejszego asystenta zwróciła uwagę na pewien istotny szczegół. Karta graficzna Intela widniała jako Standardowa karta graficzna VGA, przy czym po instalacji sterowników powinna być widoczna jako odpowiedni model karty graficznej Intela, ale tak w naszym przypadku nie było. Rzut okiem na szczegóły sterownika zdradza jego rok wydania: 2006. Nie ma w tym nic dziwnego, w końcu to sterownik generyczny, dzięki któremu system w ogóle wstaje, kiedy nie ma z góry zadanych odpowiadających sterowników do poszczególnych kart, których ogólnie jest sporo.

Dziwne natomiast jest to, że po wskazaniu nowszych, dedykowanych sterowników system twierdzi, że jego 12-letni jest aktualny, spoko i w ogóle.

Po przekonaniu systemu, że tak w istocie nie jest, udaje się zainstalować sterownik do karty Intela.

Wracając do tych ********* sterowników NVIDII

Odpalam instalator, wszystko fajno, napięcie rośnie. Mieli, mieli i pozwala kontynuować dalej. Poczyniamy największe kłamstwo na świecie, tzn. że zgadzamy się z warunkami licencyjnymi i takie tam, przeklikujemy do instalacji.

I instalacja się nie powodzi.

Okazało się, że instalator nie był w stanie odładować sterownika również z NVIDII, który połowicznie zainstalowałem ręcznie, przez Menedżer urządzeń. Wchodzimy do trybu awaryjnego (w Windows 7 jeszcze go nie skundlili), odinstalowujemy starszy sterownik NVIDII. Odpalamy kolejny raz instalację; udaje się. Uruchamiamy w normalnym trybie, niby wszystko spoko. Kolega sugeruje, żeby zobaczyć osiągi karty i odpalić Need for Speed Payback. Robi się czarny ekran, czekamy prawie minutę (choć na XXI-wieczne standardy czekanie kilkunastu sekund to przegięcie pały przy takich parametrach).

Zarzynamy proces gry, bo ile można czekać.

I wtedy doświadczamy

starego, dobrego niebieskiego ekranu śmierci (BSoD).

Po tych wszystkich staraniach, nasz ukochany sterownik dostaje rozwolnienia. Od tego momentu, system przy każdym uruchomieniu działa kilka sekund i zamraża się.

Jaki finał?

Ta bananowa powieść pełna treści kończy się odinstalowaniem karty NVIDII. Niemniej, delta wychodzi in plus, bo udało się zainstalować sterowniki do karty Intela, które przeoczyłem wcześniej ze względu na fakt bycia zastąpionymi generycznym microsoftowskim sterownikiem. Oprogramowanie wymagające akceleracji graficznej w końcu działa, można też ustawiać jasność ekranu. Nawet udaje się uruchomić wspomnianego Need for Speeda, a z NVIDII to ogólnie beka.

Friday, June 10, 2016

całkowanie numeryczne

W ramach zaliczenia pewnego przedmiotu trzeba było sobie wybrać zadanie i wykonać projekt. Wybrałem całkowanie numeryczne, bo uznałem to za ciekawy temat. Napisałem względnie prosty skrypt wyznaczający przybliżoną wartość całki oznaczonej funkcji jednej zmiennej czterema metodami. Projekt miał za zadanie wypisać obliczenia, błąd bezwzględny oraz czas wykonywania każdej z metod i wyniki miały zostać przedyskutowane. Do jednej metody (Romberga) wykorzystałem zewnętrzną bibliotekę oraz przyjąłem wartości zwracane przez tę funkcję biblioteczną za wzorcowe, ponieważ, według moich obserwacji, zdaje się ona podawać wynik najbliższy analitycznemu (kiedy to tylko możliwe).

Skrypt wykorzystuje 4 metody:
  • prostokątów
  • trapezów
  • Simpsona (parabol)
  • Romberga

Pomijając metodę Romberga, w przypadku 3 pozostałych metod przedział, w którym całka ma być wyznaczona, jest dzielony na N podprzedziałów. Skrypt zakłada przy tym, że funkcja, którą mu podamy istnieje i że jest ciągła w każdym punkcie przedziału < a ; b >, gdzie a oznacza dolną granicę całkowania a b - górną.

Metoda prostokątów i coraz dokładniejsze dopasowanie wraz ze wzrostem podziałów:


Credit: Khurram Wadee (https://en.wikipedia.org/wiki/File:Rectangle_rule.gif)

Metoda trapezów:



Skrypt przyjmuje 4 parametry: dolną (a) oraz górną (b) granicę całkowania, ilość podprzedziałów (N) oraz wzór funkcji jednej zmiennej.
Napisany w Perlu. Nie wrzucam tu wszystkich wzorów - jeżeli interesuje Cię ten temat, z łatwością odszukasz je w Internecie. Chciałbym bardziej skupić się na przykładowym rezultacie działania.


(Przypominam, że przyjmuję w swoich rozważaniach wartość metody Romberga jako wzorzec. Mowa o całkowaniu numerycznym, więc operujemy na przybliżeniach.)

Nasunęło mi się kilka wniosków w związku z powyższymi danymi:
  • pomijając metodę biblioteczną Romberga, metoda Simpsona daje najbardziej dokładny wynik
  • czas liczenia (za wyłączeniem metody Romberga) jest mniej więcej liniowy
  • z każdym 10-krotnym zwiększeniem ilości podprzedziałów wyniki stają się o 2 rzędy wielkości dokładniejsze
  • przy znacznie zwiększonej liczbie podziałów metoda prostokątów jest nieznacznie szybsza od pozostałych

To tylko mały "skrawek" zagadnienia. Funkcja, którą wykorzystałem jako przykład jest względnie gładka (zob. wykres). Problemem byłoby policzenie całki oznaczonej "stromej" funkcji, która "bardzo skacze" i do czego wymagana byłaby duża ilość podziałów, co wiązałoby się z wydłużeniem czasu trwania obliczeń. Wykorzystywane podejścia dzielą przedział na równe podprzedziały, bez badania przebiegu zmienności funkcji i "inteligentnego" ich ustalania lub dobierania metody w zależności od tego, jaki funkcja "ma mniej więcej kształt".

Do kodu nie roszczę sobie żadnych praw, możesz z niego korzystać w dowolny sposób, przy czym nie ponoszę odpowiedzialności za to, co nim zrobisz. Na pewno może być napisany lepiej, ale pierwotne założenie (przeważnie prostoty) spełnia.
#!/usr/bin/perl
use Math::Integral::Romberg qw(integral);
use POSIX;
use Time::HiRes qw(time);
use Scalar::Util qw(looks_like_number);

use constant PI => 4 * atan2(1,1);
use constant e => 2.71828182845904523536;

sub wrapper {
 my ($x) = @_;
 eval $funkcja;
}

sub rectangles {
 $lower = $_[0];
 $upper = $_[1];
 $intervals = $_[2];
 $step = ( $upper - $lower ) / $intervals;

 for($x = $lower; $x < $upper; $x += $step){
  $a = $step;
  $b = eval $funkcja;
  $sum += $a*$b;
 }
 return $sum;
}

sub trapezoids {
 $lower = $_[0];
 $upper = $_[1];
 $intervals = $_[2];
 $step = ( $upper - $lower ) / $intervals;

 $temp_sum = 0;
 $overall_sum = 0;
 $iterator = 0; #zliczanie "przebytych" podzialow; ich dlugosc nie musi (i najczesciej nie bedzie) liczba calkowita
 for($x = $lower; $x < $upper; $x += $step, $iterator++){
  $temp_sum = eval $funkcja;
  $overall_sum += ( $iterator==0 ? ($temp_sum/2) : ( $iterator==($intervals-1) ? ($temp_sum/2) : ($temp_sum) ) );
 }
 $overall_sum *= $step;
 return $overall_sum;
}

sub simpsons {
 $lower = $_[0];
 $upper = $_[1];
 $intervals = $_[2];
 $step = ( $upper - $lower ) / $intervals;

 $iterator = 0;
 $k = 0;
 $overall_sum = 0;
 for($x = $lower; $x <= $upper; $x += $step, $iterator++){
  $temp_sum = eval $funkcja;
  if($iterator==0 || $iterator==$intervals){
   $overall_sum += $temp_sum;
  } else {
   $k ^= 1;
   $overall_sum += ($k+1) * 2 * $temp_sum;
  }
 }
 $overall_sum *= $step/3;
 return $overall_sum;
}

sub parse_constants {
 $tempstr = $_[0];
 $tempstr =~ s/pi/PI/g;
 $tempstr =~ s/Pi/PI/g;
 $tempstr =~ s/pI/PI/g;
 #$tempstr =~ s/e/e/g;
 #print "\n $tempstr \n";
 $tempstr = eval $tempstr;
 return $tempstr;
}

sub call_redirector {
 $start = time;
 $sum = $_[0]($_[2], $_[3], $_[4]);
 $end = time;
 ${$_[1]} = ( $end - $start ) * 1000;
 return $sum;
}

sub wypisz_wynik_metody {
 print " metoda ", ($_[0]), "\t: ", (${$_[1]});
 if ($cmpval != 0) {
  $bl_bezwzgl = abs( ${$_[1]} - $cmpval );  
  print "\tblad bezwzgledny: $bl_bezwzgl";
  if ($bl_bezwzgl == 0) { print "\t\t"; }
 }
 print "\t\tczas: ", (${$_[2]}), " ms\n\n ";
 return;
}

$n_args = @ARGV;
if ($n_args < 4) { die "Za malo parametrow.\n"; }

$lower = parse_constants(shift); #$ARGV[0]
$upper = parse_constants(shift); #$ARGV[1]
$intervals = shift; #$ARGV[2]

$not_numeric1 = "Podana wartosc ";
$not_numeric2 = " zdaje sie nie byc wartoscia liczbowa.\n";

if(!looks_like_number($lower)) { die "$not_numeric1" . "dolnej granicy" . "$not_numeric2"; }
if(!looks_like_number($upper)) { die "$not_numeric1" . "gornej granicy" . "$not_numeric2"; }
if(!looks_like_number($intervals)) { die "$not_numeric1" . "ilosci interwalow" . "$not_numeric2"; }

unless ($intervals > 0) { die "Ilosc interwalow musi byc dodatnia.\n"; }

for($i = 0; $i < $n_args - 3; $i++ ) { #n_args minus 3, bo 3 parametry zostały już zdjęte z ARGV
 if ($i==0) {
  $funkcja = shift;
 } else {
  $funkcja = $funkcja . ' ' . shift;
 }
}
$_funkcja = $funkcja;
our $funkcja =~ s/x/\$x/g;

print "\n dolna granica calkowania: $lower\n";
print " gorna granica calkowania: $upper\n";
print " ilosc interwalow : $intervals\n";
print " funkcja: $_funkcja\n";

#tak sie sklada, ze wszystkie wlasciwe funkcje liczace przyjmuja po 3 parametry
$czas_prostokaty = 0;
$suma_prostokaty = call_redirector(\&rectangles, \$czas_prostokaty, $lower, $upper, $intervals);

$czas_trapezy = 0;
$suma_trapezy = call_redirector(\&trapezoids, \$czas_trapezy, $lower, $upper, $intervals);

$czas_simpson = 0;
$suma_simpson = call_redirector(\&simpsons, \$czas_simpson, $lower, $upper, $intervals);

$czas_romberg = 0;
$suma_romberg = call_redirector(\&integral, \$czas_romberg, \&wrapper, $lower, $upper);

our $cmpval = $suma_romberg; #funkcja biblioteczna zwraca bardzo dokladne wartosci; jej wyjscie posluzy jako wartosc wzorcowa

print "\n przyblizona wartosc calki oznaczonej:\n\n ";
wypisz_wynik_metody("Romberga", \$suma_romberg, \$czas_romberg);
wypisz_wynik_metody("prostokatow", \$suma_prostokaty, \$czas_prostokaty);
wypisz_wynik_metody("trapezow", \$suma_trapezy, \$czas_trapezy);
wypisz_wynik_metody("Simpsona", \$suma_simpson, \$czas_simpson);

Tuesday, January 13, 2015

Udało mi się

Jakiś czas temu pisałem o problemie, okoliczności odtworzenia którego nie były trywialne. Chodzi mi o okna/notyfikacje, które poruszają tematykę rzekomo niskiej wydajności komputera, a których nachalność stanowi udrękę. Najpierw zrobiłem patcha (łatkę) do systemu, a potem odkryłem, że w systemie istnieje funkcja pozwalająca na wyłączenie schematu kolorów. Nie przyszło mi do głowy, że Microsoft pozwoliłby ot tak zmienić kompozycję jednym wywołaniem: ma to skutek globalny, przy uruchamianiu "zasobożernych" aplikacji powoduje często zawieszenie się systemu a w niektórych przypadkach uniemożliwia niektórym programom funkcjonowanie (np. Fraps, z tego co mi wiadomo, nie jest w stanie nagrywać bez kompozycji z przeźroczystoscią okien). Ale. Najpierw odkryłem ("złamałem") to okno.



Analizowałem kod w debugerze i ustaliłem, jak trzeba ten proces (dwm.exe) "szturchnąć", żeby to okno się pojawiło. Wystarczy oknu Menedżera okien pulpitu wysłać odpowiednią wiadomość. Pokażę teraz, jak każdy z Was może sprawić, żeby to okno się pojawiło (Windows 7), wysyłając procesowi 3 liczby :). Będzie to też pewnego rodzaju dowód, że z czterech liter sobie tego nie wyjąłem.

Pobierz program WindowHack. Służy do manipulowania oknami, bardzo przydatne narzędzie, moim zdaniem must-have dla każdej osoby zajmującej się programowaniem pod Windows.

Rozpakuj program, uruchom go. Kliknij drugi przycisk od lewej na samej górze (Show available windows).


W oknie poniżej wyszukaj "DWM Notification Window", kliknij prawym przyciskiem myszy i wybierz Get window.


Następnie, wybierz opcję jak na obrazku poniżej:


Pojawi się okno, w którym wpiszesz tylko wartości MSG, WPARAM i LPARAM (pola HWND nie ruszaj, będzie ono miało u Ciebie na pewno inną wartość).


Kliknij "Send Message" i najpewniej pojawi się omawiane na samym początku okno:


Istotnie, w polu LPARAM możesz podać wartości 201, 203, 400, 401 lub 405. Jak nie wierzysz to sprawdź :).

Wracając do meritum. Odkrywszy sposób na błyskawiczne i wygodne wywołanie tego okna, wszystko dalej potoczyło się z górki. Szybko odnalazłem miejsce w kodzie, gdzie zachodzi zmiana schematu. Zrobiłem łatkę, która zapobiega tej zmianie. Potem dowiedziałem się, że system oferuje funkcję wyłączenia tego schematu. Nic nie straciłem poza czasem. Ale dzięki temu mam 100% pewność, że uderzyłem we właściwe miejsce.

Jak wywoła się systemową funkcję zmieniającą kompozycję (lub schemat kolorów, jak kto woli), to znika przeźroczystość okien, w zasobniku systemowym pojawia się taki balon informacyjny:


...którego kliknięcie powoduje otwarcie takiego okna:


Powyższa zmiana często zachodzi, jak uruchomi się "ciężką aplikację" (grę, odtwarzanie wideo bardzo wysokiej jakości). Główną udręką jest fakt, że niektóre z tych powiadomień występują losowo, bez uzasadnienia. Okazuje się, że faktyczne zasoby komputera nie mają znaczenia. Potwierdza to opinia gościa, który twierdzi, że także otrzymuje takie komunikaty; na komputerze z dwoma dwunastordzeniowymi procesorami, 128GB RAM, dwiema kartami Nvidia 670 i dyskami SSD.[1].

Najwięcej czasu zabrało mi wywołanie tego okna i nie mam "przepisu", jak je wywołać, wysyłając procesowi wiadomość.


Tak na marginesie, z mojej analizy wynika, że to okno nie powinno się w ogóle pojawiać. Po prostu jeden z argumentów pewnej funkcji jest wpisany na stałe (ang. hard-coded) i teoretycznie nie ma możliwości, aby się ono "naturalnie" pojawiło. A najśmieszniejsze jest to, że w Internecie są zrzuty ekranu wykonane przez osoby, którym się to okno pojawiło. Magia. Co prawda zmieniłem pamięć procesu tak, żeby łatwo wywoływać sobie to okno, jest to niesamoistny sposób wywołania. Faktyczną kwestię pojawiania się tego okna dalej badam i najprawdopodobniej zabiorę się niedługo do pisania kolejnego programu "badawczego" :).

Wersja beta mojej łatki wygląda obecnie tak:


Może trochę straszyć, ale nie ma się czego bać.
Niedługo zostanie wydana.

Thursday, August 7, 2014

Obrót sprawy

W poprzednim poście pisałem o swoim programie, wyglądzie jednego z jego okien (co było nawet przedmiotem głosowania).

Ufam, że zmiany poprzestaną na tym, co widzisz poniżej:



To "najbardziej pierwszy" z układów, wymyślony jeszcze zanim zacząłem pracę nad programem. Z jakiegoś powodu go odrzuciłem - okazało się, że niesłusznie.

Sunday, August 3, 2014

Cisza

Niby nic tutaj nie dodaję, ale to nie oznacza, że nic nie knuję. :)

Pracuję nad nowym programem. Dokładnego technicznego opisu nie bedę tutaj przytaczał, bo większości z Was będzie pewnie tak samo potrzebny jak reszta badziewia, które wydaję.

System Windows oferuje ustawienia pozwalające na ukrywanie dysków (lub stacji, jak kto woli) w oknie "Mój komputer", administracyjne blokowanie dostępu do wybranych liter dysków (wiadomość w stylu "Skontaktuj się z administratorem systemu").

Oto okno, w którym macie możliwość ukrywania partycji i zabraniania do nich dostępu:


W tym oknie program obsługuje 3 ustawienia systemowe: do ukrywania partycji (Hide), administracyjnego odmawiania dostępu (Prevent access, dosł. zapobiegania dostępowi) i selektywnego wyłączenia autoodtwarzania (Disable Autorun).
Hide i Prevent access mogą Ci się przydać, gdy masz wścibską siostrę/wścibskiego brata i chcesz przed nią/nim ukryć partycję ze swoimi rzeczami albo zabronić do niej dostępu. Nie jest to nie do obejścia, ale znakomita większość użytkowników sobie z tym nie poradzi w przyzwoity sposób.

System oferuje też kilka ustawień dotyczących autoodtwarzania. Mój program obsługuje 2 z takich ustawień: jedno, wyłączające autoodtwarzanie według typów urządzeń, drugie - analogicznie do pierwszych dwóch funkcji, które opisałem - pozwalające na wyłączenie autoodtwarzania na określonych literach stacji dysków. Kto musiał robić "formata" po podpięciu zainfekowanego wirusem pen-drive'a od kolegi to wie, o co chodzi, albo będzie chciał od tego momentu się dowiedzieć.

Autoodtwarzanie to dobra sprawa. Polega ono na tym, że jak podpinasz jakieś urządzenie, system automatycznie "otwiera je". W bardzo dużym skrócie, bo za tym stoi spory mechanizm w systemie i zanim uruchomi Ci się instalator gry komputerowej z płyty, system wykona mnóstwo kodu. Funkcja ta była strzałem w dziesiatkę, dopóki twórcy trojanów i innego złośliwego oprogramowania nie wpadli na pomysł, żeby wykorzystać pen-drivy do infekowania komputerów. Na takim dysku jest plik autorun.inf, który zawiera instrukcje dla Eksploratora Windows, które ten ma wykonać (o ile autoodtwarzanie dla danego typu urządzeń jest włączone). Tylko nie usuwaj teraz histerycznie każdego napotkanego autorun.inf, bo to niekoniecznie musi oznaczać infekcję. Ten plik jest często na różnorakich płytach instalacyjnych i najzwyczajniej w świecie odpala instalatora. Może to trochę przesadzone porównanie, ale noża można użyć albo do zamordowania kogoś, albo do krojenia warzyw na przykład. Tak z tym autoodtwarzaniem, jest dobre, ale jeśli znajdziesz plik autorun.inf na którymś ze swoich pendrivów, to jest on najpewniej zainfekowany. A już na pewno, jeśli ten plik jest ukryty i ma ustawione atrybuty "systemowy" i "tylko do odczytu". Dzisiejsze antywirusy, nawet "najsłabsze", wyłapują tego typu infekcje.

Co jest pierwsza rzeczą, którą robię po świeżej instalacji systemu? Wyłączenie autoodtwarzania dla wszystkich typów urządzeń z wyjątkiem CD-ROM.
Moim programem można to zrobić w 4 kliknięcia.

Okno pozwalające wyłączyć autoodtwarzanie dla poszczególnych typów urządzeń (to, o czym pisałem przy okazji pen-drive'ów):

Żeby wyłączyć autoodtwarzanie tymi 4 kliknięciami, o których wspomniałem, uruchom program (najlepiej jako Administrator). Kliknij przycisk otoczony zielonym prostokątem. Pojawi się okno jak powyżej. Klikniesz "Select recommended", zaznaczą się wszystkie ptaszki bez "CD-ROM". Następnie klikniesz "Apply (NoDriveTypeAutoRun)", pojawi się prośba o potwierdzenie operacji -> klikasz Tak. Jeśli dostaniesz okienko z wykrzyknikiem to coś poszło nie tak (brak uprawnień), w przeciwnym razie okienko informacyjne o sukcesie.

Część z Was pamięta pewnie, jak robiłem ankietę na temat tego, jak program miałby wyglądać. Teraz dochodzę do wniosku, że zmarnowałem sporo czasu właśnie na cackanie się z wyglądem okien.
(Gdyby ktoś sobie myślał, że te ściany z ptaszków robiłem ręcznie... nie, napisałem sobie do tego skrypty, które te okna za mnie wygenerowały, ja musiałem tylko zaprogramować "wzór" :))


Więcej już tego pewnie nie możesz czytać. Jeśli interesuje Cię ten program to tu jest link do wątku forum na jego temat. Program można pobrać stąd albo z tamtego forum.

To by było tyle na dziś.

Sunday, June 1, 2014

Program z Matematycznego Dnia Dziecka

W piątek odbyły się obchody Matematycznego Dnia Dziecka w ZSO, do którego uczęszczam. Nie wiedziałem, jaką konkurencję wymyślić i jakoś tak wyszło, że skończyło się na zamienianiu podanej liczby na mnożenie. Moja konkurencja nazywała się "Szalone iloczyny". Swoją drogą, nie wiedziałem, że kwestia mnożenia w liceum może przysporzyć tyle kłopotu. Tuż po obchodach czułem się trochę zmieszany, bo starałem się jak mogłem, aby być zrozumianym. Darowałbym sobie to całe biadolenie, gdyby nie fakt, że gimnazjaliści poradzili sobie z moją konkurencją lepiej. No ale kim ja jestem, żeby cokolwiek od kogokolwiek wymagać... Poza tym nie muszę wszystkiego rozumieć.
Tyle goryczy, teraz do rzeczy.
Właściwie jedyną zasadą konkurencji była zamiana liczby na mnożenie. Odpowiedzi można było udzielić na jeden z dwóch sposobów: poprzez podanie wylosowanej liczby w postaci iloczynu dwóch jakichś innych liczb albo poprzez podanie rozkładu liczby na czynniki pierwsze. Nie podam teraz punktacji bo jest ona już nieistotna. Wyjaśnię na przykładzie, bo zaraz pewnie przestaniesz czytać.
Wylosowałem liczbę 48.
W sposobie #1 mogę podać jedną z aż 4 możliwości: 2*24 3*16 4*12 6*8.
W sposobie #2 muszę podać 2*2*2*2*3, aby zdobyć punkty.
Program nie uzna odpowiedzi 1*48, bo to haratnięcie w gałę, a nie odpowiedź.
Resztę obostrzeń przybliży Ci screenshot poniżej:

Tyle.
Przykładowy screenshot programu w akcji:

Program losuje 152 liczby złożone nie większe od 200, następnie wybiera z tablicy z wylosowanymi 3 początkowe elementy.
W paczce poniżej program z konkurencji, ten sam program bez ograniczeń czasowych i kod źródłowy.
[Pobierz]

Saturday, March 22, 2014

Szczegółów kilka o stole wigilijnym...

Byłem już kilkakrotnie pytany o stół, który przed chwilą oglądałeś/aś (jeśli trafiłeś/aś tutaj z FB), więc podzielę się z Wami pewnymi ciekawostkami na jego temat i tego, jak był robiony.
Zrobiony jest z odpadów. Nogi to elementy starego stelażu na winogron, który w 2002 roku się złamał i potem do grudnia 2013 leżał w garażu. To prawdopodobnie drewno lipowe, bo bardzo lekkie i się nie kruszy, mimo trudnej przeszłości.

Konstrukcja blatu składa się z 2 ścian regału, które jakimś cudem udało mi się równo złączyć. Z czego ten regał był zrobiony, nie wiem. Wiem tylko, że z drewna iglastego, mogę po zapachu żywicy przypuszczać, że świerkowego.

Wierzchnia część blatu to stara boazeria modrzewiowa, której struktura i gładkość pozostawiały trochę do życzenia. Na zdjęciu poniżej nogi i blat bez wierzchniej części.

Robiony był ręcznie. Deski były cięte ręcznie. Jedynym zmechanizowanym narzędziem użytym do zrobienia tego stołu była ręczna PRLowska wiertarka na korbę. Wkręty były mocowane ręcznie. Powierzchnia była gładzona papierem ściernym, ręcznie. :)

Robiłem go jakieś 2 tygodnie i dało mi to trochę popalić. W końcu szkoła i tego typu sprawy, gdyby doba miała więcej niż 24h to byłoby cacy. Kilka razy zwątpiłem, jak zobaczyłem ile trzeba było się bawić z dopasowywaniem kawałków drewna. Każdy był inny, bo w końcu odpady. Jak idziesz do stolarza to wybierasz co chcesz, ja musiałem kombinować. Stolarzem nie jestem i nie zdawałem sobie nawet sprawy, ile to będzie roboty. No ale jakoś się udało, skończyłem w przeddzień Wigilii. Blat nie jest przysłowiowo równy, ale całość jest masywna i po nałożeniu obrusu detale wykończeniowe można zaniedbać.

Wymiary: 183cm dł. x 92cm szer. x 73cm wys.
Waga: nogi ok. 20kg, blat 35-40kg