Irytującą cechą systemu Windows, od początku jego istnienia zresztą, jest to, że lubi robić rzeczy po swojemu. Można tu argumentować, że w ten sposób eksploruje nowe możliwości, czy coś. Ale na ogół oznacza to konieczność użerania się z rozkapryszoną królewną, która nie uznaje istnienia nikogo spoza swojego pałacu. Prezentuje moje notatki z prób wyprodukowania bootowalnego USB z obrazem zawierającym instalkę systemu Windows 10, robionego na Ubuntu 20.
Czytaj dalej „Tworzenie instalatora Windows 10 na Ubuntu 20”Category Techblog
Google Chrome: jak pozbyć się translatora?
Dobra wiadomość dla tych, którzy nie brzydzą się przejścia na Google Chrome: da się wyłączyć te głupie propozycje na tłumaczenie każdej strony, jaka nie jest w naszym rodzimym języku. Nie jest to łatwe, ale wykonalne. Czytaj dalej „Google Chrome: jak pozbyć się translatora?”
JavaScript: Undefined vs. null
Znajomy zapytał mnie dzisiaj czy to dobry kod:
W pierwszym odruchu utwierdziłem go (pytał by się upewnić), że nie, że lepiej byłoby użyć słowa kluczowego
null
. Argumentowałem nawet, żeundefined
można sobie swobodnie nadpisać. Wyczytałem to zdaje się na Stackoverflow.Jednak kiedy, spróbowałem sprawdzić moje własne słowa, znalazłem tą oto małą notkę:
JavaScript 1.8.5 note
Starting in JavaScript 1.8.5 (Firefox 4), undefined is non-writable, as per the ECMAScript 5 specification.
W skrócie: nie można (przynajmniej w nowszych przeglądarkach) nadpisać
undefined
. Operator===
też działa prawidłowo z użyciemundefined
. Nie ma więc nie bezpieczeństwa? Czyżbym wpuścił kolegę niechcący w maliny?Ale dalej mi się to wszystko nie podobało. Należy pamiętać, że:
undefined
nie jest stałą- nie jest też słowem kluczowym języka JavaScript (sprawdźcie sami)
- nie jest nawet słowem zastrzeżonym pod przyszłe użycie
- otrzymamy wyjątek jeśli napiszemy coś takiego:
if (zmienna_niezadeklarowana_wcześniej === undefined)
(trzeba więc użyć operatoratypeof
)
Czym więc jest undefined
? Jest zmienną globalną (choć tylko do odczytu od jakiegoś czasu). Lokalnie (wewnątrz funkcji) możemy ją sobie swobodnie nadpisać. Więc, jeśli nawet nie widać niczego złego przy wywołaniu kodu:
To wystarczy wstawić go do wewnątrz funkcji:
)();
Podsumowanie
Morał jest więc prosty: jeśli cenicie sobie jakość swojego dzieła, nie chcecie, aby się z was koledzy śmiali: używajcie null
do inicjacji zmiennych, nie polegajcie na tych małym potworku jakim jest undefined
. Jego używamy tylko do analizy np. zmiennych globalnych. Ja widzę też jeszcze powód dla którego lepiej jest użyć null
: jeśli chcemy przywrócić pierwotną wartość zmiennej, bardziej naturalne jest przypisanie do niej właśnie null
.
Taka jest moja opinia. Bardzo chętnie zapoznam się z jakąś dobrą argumentacją (jeśli jest takowa) przeciw.
Linki
Kiedy jeszcze będzie taki długi weekend?
Znalazłem w odmętach mojego komputera mały skrypcik. Napisałem go, dla znajomej, która była ciekawa, kiedy jeszcze powtórzy się z długim majowym weekendem. Prosta rzecz, ale nie chciałbym, żeby mi umknęła. A, że nie bardzo kumam gita, więc wkleję tutaj. Czytaj dalej „Kiedy jeszcze będzie taki długi weekend?”
openSUSE: dodawanie obsługi protokołu Tlen do Pidgina
Ta notka jest przeróbką mojej poprzedniej: „Dodanie obsługi Tlen do Pidgina„. O ile tamta była dla Ubuntu, ta jest dla openSUSE 11.4. Czytaj dalej „openSUSE: dodawanie obsługi protokołu Tlen do Pidgina”
Bash – wybredne kopiowanie
Domyślnym katalogiem na pobieranie plików w moich przeglądarkach, jest pulpit. Stamtąd rozdzielam pliki wedle własnego widzi mi się, jednak pewną klasę plików, życzę sobie mieć zawsze w pewnym specyficznym katalogu. Do tej pory, przenosiłem je tam ręcznie, ale uświadomiłem sobie, że przecież nie jest trudno proces ten zautomatyzować. Po pięciu minutach powstała ta oto linijka:
" = "" ] && cp "$1" ""
Ten skrypt oczywiście wykorzystuje do otwierania pliku z poziomu przeglądarki. Najwięcej problemu było ze sprawdzeniem poprawności zadanego parametru ($1
). Należało jednak upewnić się, czy parametr jest plikiem (to z pomocą: -f
) i czy ma zadane rozszerzenie. Zamieszczam, aby mi się nie zgubiło. Na co warto zwrócić uwagę:
${1##*.}
– to wyrażenie zwraca rozszerzenie pliku (tutaj dla zmiennej$1
). Dla nazwy np. „nazwa.z.kropkami.txt”, zwróci „txt”. Po sieci można znaleźć wersje z jednym płotkiem (#
), ale wtedy wynikiem są wszystkie znaki po pierwszej kropce (szczegóły w załączonych linkach)[ (...) -a (...) ]
– I (ang. AND) w składni programutest
, używanego przy warunkach w Bashu
Z pomocą: bash String Manipulations i Linux tip: Bash test and comparison functions.
Dodanie obsługi Tlen do Pidgina
Jak wiadomo, w najnowszym Ubuntu (10.04 LTS – Lucid Lynx) zrezygnowano z komunikatora Pidgin i zaproponowano inny – Empathy. Chciałem dać mu szansę, ale w końcu wymiękłem i zainstalowałem z powrotem Pidgina. Czytaj dalej „Dodanie obsługi Tlen do Pidgina”
Krótka recenzja Lenovo G550
Moje zadanie było proste, zainstalować na laptopie Lenovo G550, numer modelu: 20023, jakiś inny niż aktualny system. A że miałem na to kilkanaście dni, to zdążyło mi się nasunąć kilka uwag odnośnie tego sprzętu. Na ów drugi system wybrałem Ubuntu wersję 9.10, po części dlatego, że system nie powinien sprawiać za dużo problemów swojemu nowemu użytkownikowi, ale również dlatego, że miałem już gotową płytkę. Czytaj dalej „Krótka recenzja Lenovo G550”
O JPanel w stałym rozmiarze na JFrame
Jakiś czas temu poszukiwałem sposobu, aby zmodyfikowany przeze mnie JPanel
zachowywał swój rozmiar niezależnie od wielkości okienka (obiekt JFrame
), na którym bezpośrednio leżał. Kosztowało mnie to nieco nerwów. Nie wystarczyły metody setSize
, setPreferredSize
, setMaximumSize
, setMinimumSize
, użyte jak w poniższym przykładzie: Czytaj dalej „O JPanel w stałym rozmiarze na JFrame”
Parsowanie spisu imienin #2
Swego czasu ‚popełniłem’ jeden mały skrypt na użytek własny, który miał mi przerobić listę imienin ściągniętą z Wikipedii (strona: Imieniny) na zbiór zapytań SQL, które potrzebne mi były do jednego projektu. Patrząc z perspektywy czasu napisałem mały koszmarek. Czytaj dalej „Parsowanie spisu imienin #2”