maj 30 2011

Mało finezyjny sposób pobierania galerii.

Pojawiła się potrzeba pobrania kilku galerii z serwera do którego niestety nie miałem dostępu. Szczęście, w nieszczęściu, że pliki nazywane były według jakiegoś schematu. Toporna pętlai wget delikatnie pomogły zaoszczędzić chwilkę. Można było oczywiście dwie zmienne wrzucić w parametr wywołania, ale jakoś zabrakło czasu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
 
katalog="28"
przedrostek="ognisko"
 
ext="jpg"
adres="http://www.staryadres.pl/I/$katalog"
 
for i in {1..9}
do
 
wget $adres/$przedrostek"0"$i.$ext
# przykład:  http://www.staryadres.pl/I/28/ognisko05.jpg
 
wget $adres/$przedrostek$i.$ext
# przykład:  http://www.staryadres.pl/I/28/ognisko5.jpg
# wget dostając kod 404 nie tworzy żadnego pliku
 
done
 
for i in {10..40}
# Zdjęć na szczęście w pojedynczych galeriach nie było więcej jak 40.
do
 
wget $adres/$przedrostek$i.$ext
# przykład:  http://www.staryadres.pl/I/28/ognisko10.jpg
 
done
 
rm *.1
# Testowałem skrypt i porobiły się duplikaty, 
# niepotrzebne rzeczy więc wyrzucamy.


maj 27 2011

Przkierowanie ruchu ze starego adresu na nowy.

Szybkie i sprawne przekierowania w przypadku nowej domeny, nowego adresu. Wybrać Meta Refresh czy 301 . Odpowiedź jest raczej oczywista. Tylko i wyłącznie przekierowanie 301.

  • http://staryadres.pl -> http://www.konopnickiej.com
  • http://www.staryadres.pl -> http://www.konopnickiej.com

Dwa sposoby

PHP:

1
2
3
4
<?php
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.konopnickiej.com" );
// bez znaku zamykającego "?>", nie jest wymagany, a wręcz zalecanie jest jego pominięcie

.htaccess

1
2
3
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.konopnickiej.com/ [R=301,L]

.htaccess (z przekierowaniem pełnego adresu URL)

Przykład:

http://www.staryadres.pl/kontakt/ -> http://www.konopnickiej.com/kontakt/

1
2
3
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.konopnickiej.com/$1 [R=301,L]

paź 2 2010

Data Center – Google, Microsoft, Intel, Oracle, Apple, OVH – krótki przewodnik.

Ten krótki post oprowadzi was po jednych z największych i najnowocześniejszych Data Center na świecie.

  1. Na pierwszym miejscu prezentacja Google Container Data Center. Film od samego wuja G prezentujący ichniejsze centrum danych w którym znajdują się serwery ich własnej produkcji. Co także wam pokażę w filmie poniżej.
  2. Prezentacja serwera produkowanego i używanego przez Google. Produkowane są one już od dawna ze szczególnie dużym naciskiem na energooszczędność oraz wydajność. Zasilacz posiada własną baterię co umożliwia mu pracę jako UPS! :)
  3. Microsoft OS Cloud Windows Azure Data Center – centrum danych w którym wykorzystuje się technologie „chmurki”. Walka pomiędzy największymi firmami na tym polu trwa. Zapraszam do oglądania :)
  4. Microsoft Generation 4.0 Data Center Vision – hmmm jak oni to widzą w przyszłości… :) no tylko podjechać ciągnikiem i ukraść taki kontener ;]]]]
  5. Wycieczka po Intel Data Center – utworzona na miejscu starej fabryki procesorów. Dzięki takiej inwestycji udało im się sporo zaoszczędzić.
  6. Intel Greenfield Data Center – co tu dużo pisać. Kolejne DC :)
  7. Apple Data Center – inwestycja za 1 miliard dolarów zlokalizowana w Maiden NC
  8. Oracle’s Austin Data Center – zobacz niesamowite centrum!
  9. OVH – DC która posiada ok 60 000 serwerów. Na filmie można zobaczyć jak dokładnie zbudowane jest DC takich wielkości. Polecam. Film w języku francuskim.
  10. Cisco Data Center of the Future – to tylko prezentacja rozwiązania Data Center w wykonaniu tej firmy.

Na razie tyle. W kolejnych postach postaram się przedstawić listę największych serwerowni na świecie.

Czy wiesz że sam Facebook posiada ponad 60 000 maszyn? :)


wrz 28 2010

Samba mount error 12 = Cannot allocate memory

1
2
3
4
Logi z Debiana:
Status code returned 0xc0000205 NT_STATUS_INSUFF_SERVER_RESOURCES
CIFS VFS: Send error in SessSetup = -12
CIFS VFS: cifs_mount failed w/return code = -12

http://support.microsoft.com/default.aspx?scid=kb;en-us;177078 – rozwiązanie (solution)

To nie jest problem Linuxa.


wrz 25 2010

Zmiana rozmiaru (resize) oraz obracanie (rotate) obrazka poleceniem. Rób to automatycznie.

Kolejny raz przydało się polecenie mogrify z pakietu ImageMagic.

1
2
mogrify -resize 50% *.JPG # zmniejszanie rozmiaru o połowę
mogrify -rotate '90>' *.JPG # obracanie w prawo o 90 stopni

Szybko, sprawnie i na temat.


cze 10 2009

Przeglądarka Apple Safari 4

Safari4Wczoraj udostępniona została najnowsza wersja przeglądarki internetowej firmy Apple. Na codzień używam Linux’a, nie jest mi dane, doświadczać przyjemności jej używania. Na krótki okres, przesiadłem się więc do pożyczonego laptopa, na którym po chwilli, pojawiło się logo z niebieskim kompasem.

Pierwsze wrażenie jest pozytywne. Prawy górny róg okna przypomina Google Chrome, są tam dwie ikony z wysuwanymi menu, odpowiedzialne za dostęp do podstawowych funkcji programu. Są nimi tworzenie nowych okien, zakładek, dostęp do ustawień, włączenie trybu przeglądania prywatnego (na komputerze nie są zapisywane ciasteczka (cookies), historie przeglądanych stron, hasła itd. Wszystko jest usuwane automatycznie, zaraz po zakończeniu używania aplikacji). Po lewej stronie, znajdują się dwa przyciski. Jeden otwieraja widok zakładek (prezentujący w bardzo efektowny i dynamiczny sposób historię stron, strony z paska zakładek, źródła RSS, oraz zaimportowane zakładki z innych przeglądarek) oraz TopSites (najczęściej odwiedzane strony, które prezentowane są na zaokrąglonym ekranie, porównał bym to z projekcją w dobrym kinie). Wszystko to robi naprawdę świetne wrażenie.

Safari 4 TopSites

Safari 4 TopSites

Safari 4 - Historia przeglądanych stron

Safari 4 - Historia przeglądanych stron

Safari 4 używa silnika WebKit (współny projekt ludzi z Apple, Google, Qt Software, Collabora, Torch Mobile oraz kilku niezależnych ochotników). Używając nowego silnika Nitro (Nitro Engine), skrypty JavaScript wykonywane są prawie 8 razy szybciej niż w Internet Explorer 8 (nie wspominając o IE 7 ;) ),  4 razy szybciej niż Firefox 3, oraz nieznacznie szybciej niż Google Chrome (dane te bazują na testach iBench oraz SunSpider)

Nie wiem czy określenie Safari jako najszybszej przeglądarki jest słuszne, ale mimo wszystko zdaje ona swój egzamin. Pracuję na wielu przeglądarkach, na różnych systemach i mogę z czystym sumieniem stwierdzić że działa ona bardzo przyzwoicie.

Poniżej prezentuję kilka faktów:

  • Test Acid3 – zdany 100/100 (jako pierwsza przeglądarka, na tą chwilę test przechodzi też Google Chrome)
  • W pełni obsługuje standardy – HTML 5, CSS 3 (jako pierwsza przeglądarka na świecie)
  • Silnik Nitro JavaScript – zwalający konkurencję z nóg, prześcignął nawet nieznacznie Google Chrome (wspieram się testami Apple, ale gdy zrobiłem test pomiędzy Google Chrome 2 a Safari 4
  • Patrz zanim klikniesz (Look before you click) – czyli wspomniany już wcześniej, sposób przeglądania historii, zakładek, najpopularniejszych stron
  • Wbudowane narzędzia dla Webmasterów
  • Wbudowany czytnik RSS
  • Przeglądanie prywatne (na komputerze nie są zapisywane żadne informacje), ponownie Google Chrome ma tryb Incognito ;)
  • Safari AdBlock, precz z reklamami (plugin który trzeba zainstalować)
  • wiele, wiele innych nowości o których poczytać można na stronie producenta
Safari 3D

Safari 3D

Z tego wszystkiego , nie rozumiem braku popularności tego wspaniałego produktu. Jako posiadacz Linuxa, żałuję tylko iż nie ma wersji dla tego systemu (Wine mnie nie satysfakcjonuje).

Odnośniki:


cze 2 2009

Monitorowanie kontrolera RAID firmy LSI Logic zainstalowanego w serwerze Dell PowerEdge 800.

LinuxSzukając w Internecie narzędzia, które monitorowało by stan działania dysków w jednym serwerów, natrafiłem na pakiet o nazwie mpt-status. Jest to proste narzędzie, składające się z programu oraz demona, monitorującego działanie kontrolerów RAID firmy LSI, wymienionych poniżej:

  • LSI 1030 SCSI RAID
  • LSI SAS1064 SCSI RAID
  • LSI SAS1068 SCSI RAID
  • LSI SAS 3442-R SCSI RAID

Paczka zawarta jest w kilku linuksowych dystrybucjach. W Debianie instaluje się ją poleceniem:

1
apt-get install mpt-status

Po zainstalowaniu program odpala się poleceniem:

1
mpt-status

Przy pierwszym uruchomieniu może pojawić się informacja:

1
2
open /dev/mptctl: No such file or directory
Try: mknod /dev/mptctl c 10 220

Trzeba więc utworzyć plik reprezentujący urządzenie znakowe

1
mknod /dev/mptctl c 10 220

Zapomnieć nie można o załadowaniu modułu o nazwie mptctl

1
modprobe mptctl

Aby moduł ładował się automatycznie podczas startu systemu, dopisujemy linijkę do pliku /etc/modules

1
2
3
#Plik /etc/modules/
loop
mptclt

Jeżeli tego nie zrobimy, program nie będzie działał poprawnie, a demon zostawi komunikat w logach o „nieoptymalnym statusie kontrolerala RAID”.

1
2
3
# /var/log/messages
Jun 2 09:38:47 hepa mpt-statusd: detected non-optimal RAID status
Jun 2 09:48:47 hepa mpt-statusd: detected non-optimal RAID status

Po załadowaniu mptctl i wydaniu polecenia mknod w logach powinny pojawić sie podobne informacje:

1
2
3
4
#/var/log/messages
Jun 2 11:48:46 hepa kernel: Fusion MPT misc device (ioctl) driver 3.04.06
Jun 2 11:48:46 hepa kernel: mptctl: Registered with Fusion MPT base driver
Jun 2 11:48:46 hepa kernel: mptctl: /dev/mptctl @ (major,minor=10,220)

Przykładowe informacje zwrócone przez polcenie mpt-status:

1
2
3
4
root@hepa:~# mpt-status
ioc0 vol_id 0 type IM, 2 phy, 231 GB, state OPTIMAL, flags ENABLED
ioc0 phy 1 scsi_id 32 ATA ST3250620NS 3BKH, 232 GB, state ONLINE, flags NONE
ioc0 phy 0 scsi_id 1 ATA ST3250620NS 3BKH, 232 GB, state ONLINE, flags NONE

Kontroler w jednym z naszych serwerów to (Dell PowerEdge 800), według lspci -v, sprzęt prezentujący się następującą treścią:

1
2
SCSI storage controller: LSI Logic / Symbios Logic SAS1068 PCI-X Fusion-MPT SAS (rev 01)
Subsystem: Dell SAS 5/iR Adapter RAID Controller

Według autora, program sprawdzony był na następujących maszynach:

Reported working hardware configuration
—————————————
Sun Fire X4100
Sun Fire X4200
Sun Fire V20z
Sun Fire V40z
Dell PE2600
Intel Server with SE7520BD2S boards
HP ProLiant DL320 G4
IBM eServer BladeCenter LS20

Strony autora programu: http://www.drugphish.ch/~ratz/mpt-status/


cze 1 2009

Reguły z mod_rewrite nie działają modułem userdir (Apache,Debian, Linux)

Apache LinuxParę dni temu znajomy poprosił mnie o pomoc przy uruchomieniu modułu mod_rewrite w Apache’u który dostarczony jest z Debianem. Problem przejawiał się tym, że nie działało przekierowywanie stron ładowanych modułem userdir (przykładowy adres strony: http://localhost/~uzytkownik/). Opiszę kroki jakie trzeba wykonać aby temat rozwiązać:

Najpierw sprawdźmy czy moduły rewrite i userdir są ładowane podczas uruchomienia Apache. Odpalamy funkcję phpinfo() i szukamy sekcji apache2handler, wiersza Loaded Modules. Tam, wśród różnych opcji, powinny znajdować się dwa interesujące nas pozycje (mod_rewrite oraz mod_userdir).

Jeżeli ich tam nie ma, przechodzimy do katalogu /etc/apache2/mods-enabled/, sprawdzając czy zawiera dowiązania symboliczne ładujące odpowiednie rzeczy:

1
2
3
4
root@venoma:/etc/apache2/mods-enabled# ls -al rewrite* userdir*
lrwxrwxrwx 1 root root 30 06-01 02:09 rewrite.load -> ../mods-available/rewrite.load
lrwxrwxrwx 1 root root 30 05-26 18:14 userdir.conf -> ../mods-available/userdir.conf
lrwxrwxrwx 1 root root 30 05-26 18:14 userdir.load -> ../mods-available/userdir.load

Jeżeli ich tam nie ma, tworzymy je poleceniem:

1
2
3
root@venoma:/etc/apache2/mods-enabled# ln -s ../mods-available/userdir.load
root@venoma:/etc/apache2/mods-enabled# ln -s ../mods-available/userdir.conf
root@venoma:/etc/apache2/mods-enabled# ln -s ../mods-available/rewrite.load

Restartujemy Apache:

1
/etc/init.d/apache2 restart

i ponownie odpalamy phpinfo(). Moduły powinny być już załadowane (założyłem tutaj, że odpowiednie pliki znajdują się w katalogu /etc/apache2/mods-available/)

Teraz otwieramy plik /etc/apache2/sites-available/default. W tymże pliku szukamy linii z opcją AllowOverride w sekcji <Directory /> , aby rewrite działał poprawnie, powinna ona wyglądać tak

1
AllowOverride All

Kolej na konfigurację modułu userdir. Otwieramy /etc/apache2/mods-enabled/userdir.conf, w którym nie powinna pojawić się pozycja AllowOverride None. Prawdopodobnie linijka będzie wyglądała tak:

1
AllowOverride FileInfo AuthConfig Limit Indexes

jest to poprawny wpis.

Ponownie restartujemy Apache:

1
/etc/init.d/apache2 restart

W tej chwili moduł rewrite będzie działał poprawnie. Problemem może okazać się jego użycie wraz z modułem userdir.  Aby wszystko działało poprawnie, trzeba odpowiednio skonstruować  plik .htaccess. Musi on zawierać dyrektywę RewriteBase:

Dla adresu np. http://localhost/~felixd/ powinna ona wyglądać tak:

1
RewriteBase /~felixd/

dla http://localhost/~felixd/projekt2/:

1
RewriteBase /~felixd/projekt2/

maj 15 2009

Włamanie do Avsim.com. Dzieciak wyczyścił 13 lat ciężkiej pracy.

Jak podaje BBC NEWS wczoraj miało miejsce włamanie na serwer Avsim.Com [strona w archive.org]. Avsim jest jedną z największych witryn obsługujących społeczność wirtualnych pilotów. Założyciel strony, Tom Allensworth, powiedział:

„Strona jest całkowicie wyłączona  i nie ma pewności kiedy będzie ponownie uruchomiona. Zastanawiam się czy  będzie kiedykolwiek z powrotem w Internecie. Sposób ataku sprawia że odzyskanie danych jest bardzo trudne, jeśli nie niemożliwe. Włamanie nastąpiło nie tylko na główny serwer, ale także na maszynę na którą robiona była codziennie kopia bezpieczeństwa”

Z obydwu maszyn usunięto dane. Wygląda to na robotę podnieconego dzieciaka któremu udało dostać się na serwer. W napływie adrenaliny udało mu się  wymazać 13 lat pracy. Sam miałem przyjemność korzystać z tej strony w krótkim epizodzie bycia wirtualnym pilotem. Z mojej strony wypada mi tylko pogratulować mu wspaniałego czynu.

[ad]


maj 12 2009

Rekursywna zmiana praw katalogów lub plików.

LinuxMusiałem szybko zmienić prawa dla drzewa katalogów oraz plików w nich się znajdujących, z tym że katalogi miały dostać inne prawa niż pliki w nich się znajdujące.  Zwykłe chmod XXX * -R nie było tym czego szukałem. Z pomocą przyszły dwa polecenia, find oraz xargs.

1
2
felixd@mx:/sites# find . -type f -print0 | xargs -0 chmod XXX
felixd@mx:/sites# find . -type d -print0 | xargs -0 chmod XXX

Proste i skuteczne.


maj 12 2009

ImageMagick, mogrify -resize

LinuxSzybko potrzebowałem zmienić rozmiar wielu plików na serwerze, ale tylko tych większych niż 700px. Po chwili poszukiwań znalazłem problem udało się rozwiązać:

# apt-get install imagemagick

# mogrify -resize 700> *.jpg

Tutaj mały wyciąg z dokumentacji ImageMagick:

Only Shrink Larger Images (‘>‘ flag)
Another commonly used option is to restrict IM so that it will only shrink images to fit into the size given.   Never enlarge.   This is the ‘>‘ resize option. Think of it only applying the resize to images ‘greater than’ the size given (its a little counter intuitive).


kwi 13 2009

php_pdo_mysql.dll + apache.exe w XAMPP 1.7

MySQLLokalnie do testowania aplikacji pod Windowsem używam Xampp’a (wersja 1.7).  Jednak biblioteka do PHP PDO MySql’a w tym nie funkcjonuje tak jak należy. Udało mi się nawiązać połączenie z baza danych, lecz w momencie wykonywania zapytania „SELECT * FROM `bazadanych`” biblioteka zawiesza Apacha. Problem został już zgłoszony do grupy PHP, jednak na dzień dzisiejszy nie został oficjalnie rozwiązany.

http://bugs.php.net/bug.php?id=47722

Rozwiązanie znalazłem na forum Xamppa. Aby to naprawić należy ściągnąć ten plik,

http://windows.php.net/downloads/snaps/php-5.2-win32-VC6-x86-latest.zip

rozpakować go, znaleść libmysql.dll i podmienić pliki w katalogach xamppapachebin oraz xamppphp.

http://www.apachefriends.org/f/viewtopic.php?f=16&t=32617


kwi 12 2009

PDO MySQL i Zend Framework – Unix_Socket

Powered by Zend Framework

Natknąłem się na mały problem podczas próby łączenia się z bazą danych używając PDO (adapeter do MySQL) +  Zend Framework.

1
Can't connect to local MySQL server through socket '/tmp/mysql5.sock'

Jedną drogą rozwiązania tego problemu jest ustawienie zmiennej unix_socket w pliku php.ini. Jest jednak druga możliwość. Wystarczy podczas przekazywania ustawień połączenia dodać zmienną „unix_socket” i tam wpisać prawidłową wartość ;)

1
2
3
4
5
6
7
8
$options = array(
    'host'        => 'localhost',
    'username'    => 'user',
    'password'    => '****',
    'dbname'      => 'db',
    'unix_socket' => '/tmp/mysql5.sock'
    );
$db = Zend_Db::factory('Pdo_Mysql', $options);

W moim przypadku używam plików .ini:

1
2
3
4
5
6
7
[development]
   db.adapter = PDO_MYSQL
   db.configuration.host = localhost
   db.configuration.username = user
   db.configuration.password = passwd
   db.configuration.dbname = dbname
   db.configuration.unix_socket = /var/run/mysql/mysqld.sock