sobota, 10 listopada 2012

Katalog tymczasowy dla Vim'a

Zdarza się, że nie chcemy przechowywać plików tymczasowych w katalogu roboczym projektu. Niewiele edytorów po za Vimem pozostawia nam inny wybór niż zupełnie z nich zrezygnować i robić kopie ręcznie... wyłączyć pliki wymiany (.swp) w Vim można poleceniem: :set noswapfile jednak po co tak robić, jeśli dopisując kilka wierszy w vimrc jesteśmy w stanie zachować "czystość" katalogu roboczego i kopie tymczasowe edytowanych plików:
"ustaw katalog swap dla plików tymczasowych
if has("win32") || has("win64")
   set directory=$TMP
else
   set directory=/tmp
end
Oczywiście katalog /tmp można wymienić na dowolny katalog, np. $HOME/.vim_tmp, itp.

czwartek, 8 listopada 2012

Tryb wsadowy MySQL

Często trzeba odpalić skrypt i czekać dłuuugie minuty, aż prompt się "namyśli" - gorzej zapuszczać co chwilę wiele interaktywnych procesów ładowania danych do bazy. Można by w ten czas spożytkować lepiej... herbata, blog, albo poczytać literaturę fachową ;). Niezmiernie przydatny w tym celu okazuje się tryb wsadowy, który umożliwia podanie danych logowania w wierszu poleceń: mysql "bazaDanych" --user="login" --password="hasło" < plik.sql

poniedziałek, 5 listopada 2012

Usuwanie wszystkich tabel w bazie MySQL

Usuwanie tabel w bazie bez jej drop'owania, może być kłopotliwe, ze względu na więzy integralności pomiędzy rekordami w tabelach.

Na szczęście usuwanie można wykonać szybko i bezboleśnie. Jedyne co trzeba zrobić to włączyć na chwilę ignorowanie sprawdzania więzów integralności pomiędzy kluczami obcymi. Robimy to następującym poleceniem:


SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS tabela1, tabela2, ..., tabelaN;


Easy peasy :).

sobota, 3 listopada 2012

Przywracanie ustawień fabrycznych w OpenWrt

Oto kolejny wpis z cyklu OpenWrt i moje zabawki :)

A więc namieszaliśmy w ustawieniach albo zapełniliśmy już pamięć routera do granic możliwości i nie bardzo wiemy co dalej zrobić... a może mały reset?
Z resetem bywa różnie... czasem się uda, a potem nie wiadomo co dalej... bo co zrobić gdy router nie chce się uruchomić? Flashować ponownie? A może da się jakoś łatwiej?
A no da się :).

Co będzie potrzebne?
  1. Komputer z:
    • kartą sieciową ethernet
    • zainstalowanym klientem telnet oraz ssh
    • nasz ulubiony kabelek RJ45
  2. Router z oprogramowaniem OpenWrt
Opis metody:
  1. Logujemy przez ssh do routera
  2. Wpisujemy polecenia:
    firstboot
    reboot
  3. Podłączamy kabel ehernet w komputerze oraz portu LAN 1 na routerze
  4. Ustawiamy adres karty ethernet, używanej do łączenia się z routerem na statyczny adres 192.168.1.11 z maską podsieci 255.255.255.0
  5. Po uruchomieniu logujemy się do routera poleceniem:
    telnet 192.168.1.1login: root
    hasło: (puste)
  6. Od tej pory możemy dalej mieszać :)

piątek, 2 listopada 2012

Linksys wrt54g3gv2-vf unbricking


Jest to początek serii wpisów dotyczących konfiguracji OpenWrt na routerze Liksys wrt54g3gv2-vf.
Jako, że każda przygoda zaczyna się od flashowania ROM/firmware tudzież częstego jego "ratowania" po wykonaniu nieprzewidywalnych modyfikacji, postanowiłem rozpocząć cykl od niezawodnej (dla tego urządzenia) metody flashowania firmware'u. Zupełnie jak w przypadku nauki jazdy na nartach - trzeba nauczyć się prawidłowo upadać i wstawać ;).
W wymieniony tutaj sposób można sflashować każdy soft (również oryginalny), nawet w przypadku braku dostępu do panelu administracyjnego w urządzeniu (reset urządzenia z powikłaniami, zapomniane hasło czy też nieudane flashowanie).

Co będzie potrzebne?

  1. Komputer z:
    • kartą sieciową ethernet
    • zainstalowanym klientem telnet oraz ssh
    • zainstalowanym klientem tftp (trivial FTP) - np tftp na linuksa
  2. Oprogramowanie routera (np. OpenWrt) ze strony openwrt.org
  3. Router pasujący do oprogramowania
  4. Przewód RJ45 również będzie przydatny
Opis metody: Sposobem na przywrócenie do życia naszego routera jest słynna metoda 30/30/30. Zalecam przeczytanie tego artykułu do końca przed rozpoczęciem unbrickingu celem nie zmarnowania czasu (po prostu uda się za pierwszym razem). Dodam tylko, że nie jest to oficjalna metoda, a autor tego poradnika (tudzież ja) nie ponosi żadnej odpowiedzialności za dalsze szkody (pośrednie bądź bezpośrednie) wynikłe z zastosowania tej metody.Kroki konieczne do sflashowania firmare:

  1. Ustaw adres karty ethernet, której użyjesz do łączenia się z routerem na statyczny adres 192.168.1.11 z maską podsieci 255.255.255.0
  2. Podłącz kabel ehernet w komputerze oraz portu LAN 1 na routerze
  3. Włącz router
  4. Wciśnij przycisk reset i trzymaj tak przez 30 sekund
  5. Nie puszczając przycisku reset odłącz zasilanie i poczekaj 30 sekund nieprzerwanie trzymając wciśnięty przycisk reset
  6. Nadal trzymając wciśnięty przycisk reset podłącz zasilanie do routera i poczekaj 30 sekund
  7. Trzymając wciśnięty przycisk reset rozpocznij flashowanie firmware poleceniem:tftp -l -m octet 192.168.1.1 -c put openwrt-wrt54g3gv2-vf-squashfs.bin
  8. Zaraz po wydaniu polecenia puść przycisk reset i czekaj
  9. Po dłuższej chwili powinna zacząć mrugać niebieska dioda, po ustaniu mrugania można uruchomić router ponownie.
W tym momencie mamy już zainstalowane na naszym routerze oprogramowanie. Jeśli jest to OpenWrt należy teraz zalogować się klientem telnet na router: telnet 192.168.1.1 użytkownik: root
hasło: (puste)
Oraz zmienić hasło poleceniem: passwd
Po wykonanej pracy można przywrócić ustawienia karty sieciowej oraz logować się przez ssh na portach LAN.


czwartek, 2 lutego 2012

Testy funkcjonalne aplikacji webowej czyli windmill

Jako, że ostatnimi czasy Firefox zaczął przechodzić drastyczne zmiany, a jego numery wersji rosną szybciej niż ilość wolnego czasu w rękach developerów, zaszła konieczność porzucenia Selenium IDE, które ostatnią stabilną wersję widziało gdzieś w okolicach Firefox 3.5. Niestety nie poruszę w tym wpisie żadnych technicznych kwestii, gdyż moje doświadczenie tym programem nie jest wystarczające, aby zamieścić jakieś pożyteczne informacje. Będzie to bardziej porównanie jabłka z pomarańczą.

Na tak drastyczny krok nie zdecydowałbym się gdyby nie Windmill, projekt mający na celu przeprowadzenie testów funkcjonalnych aplikacji webowych. Jego niekwestionowanym atutem jest fakt, że jest niezależny od platformy i wspiera wiele przeglądarek (tj. Chrome, Firefox oraz IE). Aby skorzystać z dobrodziejstw tego programu wystarczy posłużyć się informacjami zawartymi na stronie pod linkiem zamieszczonym powyżej.

W trakcie moich prac nad programami, stwierdziłem, że jest to zdecydowaniem bardziej elastyczne rozwiązanie niż wspomniane Selenium IDE. Rzeczą jaka najbardziej rzuca się w oczy to możliwość uruchomienia testów z wiersza poleceń (gdyby to miało kogoś odstraszyć to można również to zrobić z pomocą interfejsu graficznego). Umożliwia to wykonanie testowego wdrożenia (deployment) oraz testów wraz z wprowadzeniem przykładowych danych do naszej aplikacji w jednym zadaniu.

Jako, że nie ma róży bez kolców, opiszę również osobliwości... trudnością jaką napotkałem jest konieczność edycji (zamiany kolejnością poszczególnych czynności) testów przez edytor tekstu, co nie jest aż tak wizualne, ale dla kogoś kto rozwija kod aplikacji nie powinno stanowić to przeszkody.

czwartek, 19 stycznia 2012

Generator liczb (pseudo)losowych w MySQL

Potrzeba takiego generatora zrodziła podczas produkcji bazy do hurtowni danych. Nie będę ukrywał, że MySQL jest naprawdę kiepskim generatorem takowych liczb, jednak czasem funkcja ta bywa potrzebna np. przy zasilaniu bazy danymi testowymi.
Wystarczy załadować słowniki, i złączyć je po warunku 1 = 1 (iloczyn kartezjański), a następnie posortować po RAND()... a co jeśli potrzebna jest kolumna z liczbami albo wiele takich kolumn? Czy warto tworzyć słownik liczb do tego celu?
Jak pokażę na poniższym przykładzie nie jest to potrzebne. Potrzebna będzie tabela z wektorem inicjującym z dużą liczbą wierszy, jednak gdybyśmy takowej nie posiadali to MySQL po instalacji przychodzi z kilkoma tabelami systemowymi, które można wykorzystać do tego celu. W trakcie moich testów okazuje się, że każdy użytkownik bazy może je sobie przeglądać. SELECT
  RAND() liczba_losowa_zmiennoprzecinkowa,
  CAST( RAND()*10000 AS UNSIGNED ) liczba_losowa_calakowita
FROM
  information_schema.columns
  inner join information_schema.columns inf ON 1 = 1
Wynikiem powyższego zapytania, będą 2 kolumny z liczbami pseudolosowymi:


piątek, 13 stycznia 2012

Vim tricks

Ostatnio bardzo cenię sobie Vim'a i postanowiłem umieścić tutaj parę poleceń, do których (mam nadzieję) będę wracał. Zaczynam skromnie, ale z czasem lista powinna się rozwinąć. Oto polecenia:
  • usuń wiersze które nie spełniają wzorca: g!/wzorzec/d
  • zastosuj wyrażenie regularne (inne transformacje) na określonych wierszach: 1,5s/szukaj/zastąp/g
  • wklej zawartość bufora p do pola szukaj (/): ^R p (ctrl+r p)

sobota, 6 listopada 2010

PRIMA - DOM startuje!

Korzystając z niesamowitej popularności mojego bloga pragnę zaprezentować moje najnowsze dzieło: PRIMA - DOM. Autorem zarówno szaty graficznej jak i realizatorem projektu jestem ja.

czwartek, 23 sierpnia 2007

Linksys WRE 54g -- konfiguracja i recenzja

Artykuł ten ma na celu zaoszczędzenia czasu tym z was, którzy zdecydowali się na zakup i konfigurację tego urządzenia. Jako, iż podczas moich zmagań starałem się znaleźć prostą instrukcję obsługi, której po prostu nie było. Mam nadzieję że szybko odnalazłeś ten blog i skorzystałeś z moich wskazówek. Jeśli nie to zlinkuj mój blog aby inni mogli szybciej odnaleźć tą wiedzę ;p.
Oczywiście nie chcę nikogo zniechęcać do zakupu tego urządzenia - u mnie działa bardzo dobrze. Jednak zanim przystąpisz do konfiguracji MUSISZ posiadać sporo wiedzy na temat tego urządzenia gdyż instrukcja obsługi jej nie dostarcza.

Konfiguracja w większości przypadków przebiega następująco:
UWAGA!
Pod żadnym pozorem nie używaj konfiguratora znajdującego się na płycie CD dołączonej z extenderem. W moim przypadku nie tylko nie pomógł mi ustanowić połączenia, ale dodatkowo zepsuł mi działające połączenie internetowe pod windowsem XP.

W pierwszej kolejności, oczywiście należy też sprawdzić czy MAC extendera znajduje się puli adresów kart sieciowych dopuszczanych przez router.

Jeśli podłączasz extender do routera to dodatkowo zadbaj by na czas konfiguracji w routerze zakres przydzielanych adresów IP mieścił się w 192.168.1.1 - 192.168.1.239 gdyż domyślny adres IP extendera to: 192.168.1.240. Lub podłącz extender do swojego komputera z ręczenie skonfigurowaną siecią z puli 192.168.1.x/255.255.255.0. Oczywiście x nie może być 240.

0) Gdy masz do czynienia z siecią nieszyfrowaną to w pobliżu routera wciskasz przycisk auto configure i masz działające połączenie nieszyfrowane. Oczywiście wiemy, że takie nieszyfrowane połączenie jest dobre jedynie w przypadku accesspoint'ów publicznego dostępu stąd też numer tego podpunktu, który oczywiście powinien zostać przez czytelnika zignorowany. Chciałem jednak zaznaczyć, iż ta opcja działa świetnie i została przeze mnie wypróbowana z pełnym powodzeniem. I jeśli z jakiegoś powodu poniższe instrukcje nie zadziałają to można traktować to rozwiązanie jako ostateczną konieczność. Nikt w dzisiejszych czasach nie przetrwa przecież bez internetu ;-).

1) W przypadku połączenia szyfrowanego należy wejść do panelu konfiguracyjnego, do którego masz dostęp przez przeglądarkę internetową wpisując adres: http://192.168.1.240. Pole użytkownika pozostawiasz puste natomiast w polu hasło wpisz: admin. Z poziomu tego panelu można skonfigurować extender przepisując ustawienia znajdujące się w routerze. W polu IP wpisz adres IP extendera jaki potrzebujesz w razie specyficznej konfiguracji sieci lecz pamiętaj by umieścić ten adres poza pulą IP przyznawaną przez router gdyż później może pojawić się problem z uzyskaniem połączenia. Wypełnij wszystkie pola poza opcjami zabezpieczeń gdyż extender nie radzi sobie zbyt dobrze ze zmianą tylu opcji na raz. Po restarcie extendera wywołanym zatwierdzeniem zmian skonfiguruj ustawienia dotyczące zabezpieczeń. Gdy zatwierdzisz zmiany dotyczące szyfrowania i wszystkie wprowadzone dane będą prawidłowe po restarcie extendera powinieneś mieć dwie świecące na niebiesko diody (ok 5-10 sec po zaświeceniu się drugiej) sygnalizujące działające połączenie.

Jeśli chcesz sprawdzić czy działa prawidłowo umieść extender blisko komputera, z którego łączysz się z siecią (automatycznie powinien wybrać źródło o lepszym sygnale) i sprawdź czy masz jednocześnie dostęp do IP routera, IP extendera oraz oczywiście do internetu ;). Jeśli tak to GRATULACJE!

Z moich obserwacji wynika, iż extender działa jak mostek pomiędzy urządzeniami, więc adresy IP maszyn łączących się przez extender są przydzielane identycznie jak podczas połączenia bezpośredniego. Dodam też, iż urządzenie to pomimo ostrzeżeń producenta dotyczących stosowania go z routerami innej marki doskonale sprawdza się w tandemie z produktami Asus'a, którego jestem posiadaczem i do którego dostrajałem extender.