czwartek, 24 marca 2011

Pobieranie adresu IP i nazwy hosta w sieci

Taki krótki szybki wpis po kilku minutach nudy na zajęciach, czyli rzecz o zamianie IP -> nazwa hosta -> IP

string text = "212.77.100.101"; //jeśli chcemy uzyskać nazwę hosta
//string text = "www.wp.pl"; //jeśli chcemy pobrać IP
IPAddress tmp = null;
if (IPAddress.TryParse(text, out tmp))
{
       Console.WriteLine(Dns.GetHostEntry(tmp).HostName.ToString()); //pobierz nazwę hosta
}
else
{
       Console.WriteLine(Dns.GetHostEntry(text).AddressList[0].ToString()); //pobierz pierwszy adres nazwy hosta
}

sobota, 19 marca 2011

Zmiana zawartości rekordu podczas UPDATEa w Transact-SQL

Nie tak dawno miałem pewne problemy, jak zmienić zawartość pola rekordu w tabeli, podczas jego aktualizacji. Pola, które nie jest aktualizowane.
Chodziło o to, aby w czasie zmiany pola BITowego z wartości 0 na 1, pole typu DateTime, zmieniało swoją zawartość, na datę wykonania tej zmiany.
Pomoc otrzymałem na stackoverflow.com - swoją drogą dziwne, że nie wpadłem na tak oczywiste rozwiązanie:
create trigger tr_U_YourTable
on YourTable
for Update
as
begin
    if update(true_false)
        update yt
            set date = getdate()
            from Inserted i
                inner join Deleted d
                    on i.ID = d.ID
                inner join YourTable yt
                    on i.ID = yt.ID
            where coalesce(i.true_false,0) <> coalesce(d.true_false,0)
end

Autorem rozwiązania jest Joe Stefanelli.
Rozwiązanie wykorzystuje tabele Inserted i Deleted występujące w T-Sql.

piątek, 18 marca 2011

Zmiana UUID dysku VirtualBox

Dzisiaj, w celu przygotowania się do zajęć, musiałem postawić 6 razy maszynę wirtualną. Pierwszą próbą była zmiana już wcześniej posiadanego dysku vboxa na współdzielony (shared):
//najpierw przerobienie obrazu na "stały" rozmiar
VBoxManage clonehd in.vdi out.vdi --variant Fixed
//potem ustawienie out.vdi w tryb shareable
VBoxManage modifyhd out.vdi --type shareable

Niestety, podpięcie później tego dysku do 6 maszyn, i uruchomienie go, poskutkowało zburzeniem konsystencji danych na nim (co za tym idzie, linux wywalał się na starcie).
Potrzebna była więc bardziej toporna metoda - skopiowanie dysku. Aby zaoszczędzić miejsce, użyłem obrazu in.vdi, który miał dynamicznie ustawiany rozmiar pliku-obrazu.
Skopiowałem go 6 razy dla każdej maszyny...
VBoxManage clonehd in.vdi outn.vdi
po czym próbując podpiąć kolejną (pierwszą) kopię, zostałem poinformowany, że dysk o takim UUID już jest podpięty do innej maszyny i nie można go dodać.
Aby ta dość długa, bo około półgodzinna praca procesora i dysku nie poszła na marne, wykorzystałem więc wbudowaną komendę do nadawania obrazom dysków nowych numerów UUID:
VBoxManage internalcommands sethduuid outn.vdi

Oczywiście podziałało ;)

sobota, 5 marca 2011

Zmiana kodowania znaków w C#

Ostatnio pracując nad zleconym projektem musiałem zmieniać kodowanie string'a, i otrzymywać zapis bajtowy string'a, który następnie przekazywałem jako parametr metody.
Do zmiany kodowania użyć można Encoder'a któregoś kodowania z kolekcji System.Text. Przykład takiego użycia:
System.Text.ASCIIEncoding encoding = new ASCIIEncoding();
Kodowanie takie można następnie wykorzystać do otrzymania tablicy bajtowej, będącej reprezentacją zapisu string'a w danym kodowaniu. Dla przykładu powyżej:
byte[] napis_w_ascii = encoding.GetBytes("napiś");

Polecam zapoznać się z kolekcją klas System.Text.Encoding i metodami dostępnymi dla różnych kodowań