Monthly Archives: Kwiecień 2014

Generowanie klasy z XML i Deserializacja .Net (C#)

Deserializacje danych z plików XML można przeprowadzić na wiele różnych sposobów. Większość z nich wymaga albo dodatkowych bibliotek, albo zaawansowanej wiedzy na temat XML. Sposób który tutaj opiszę będzie przede wszystkim bardzo prosty, ale oprócz tego nie będzie wymagał nic więcej poza tym co znajdziemy domyślnie w VisualStudio.

Czym jest serializacja, deserializacja i do czego się przydają?

Serializacja jest to przekształcenie obiektu na postać strumienia danych, tak aby w późniejszym czasie móc ten strumień przetworzyć i odtworzyć stan obiektu. Serializacji używa się wszędzie tam, gdzie trzeba zapisać dane programu w takiej formie, żeby później łatwo było je przywrócić. Procesem odwrotnym do serializacji jest deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.

Wykorzystanie deserializacji w praktyce

Jeżeli strona internetowa posiada interfejs API, to w większości przypadków będzie udostępniać dane w formacie XML lub JSON. W przypadku gdy chcemy stworzyć aplikacje pogodową, która będzie pobierała informacje ze strony (np. OpenWeatherMap) i wyświetlała na ekranie telefonu w przyjazny sposób, użyjemy właśnie serializacji.

1. Generowanie klasy z pliku XML

Pierwszym etapem deserializacji jest utworzenie klas na podstawie pliku XML. W Visual Studio 2013 jest funkcja „Paste XML As Classes”. Należy wcześniej skopiować kod pliku XML, który zamierzamy deserializować i w oknie VS, wybrać opcję „Paste XML As Classes”.

Generowanie klasy z XML

Generowanie klasy z XML

Uzyskamy mniej więcej taki kod:

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class Produkty
    {
        public Produkty()
        {
            produktField = new List<ProduktyProdukt>();
        }

        private List<ProduktyProdukt> produktField;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Produkt")]
        public List<ProduktyProdukt> Produkt
        {
            get
            {
                return this.produktField;
            }
            set
            {
                this.produktField = value;
            }
        }
    }

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class ProduktyProdukt
    {

        private string nazwaField;

        private string opisField;

        private string kategoriaField;

        private double cenaField;

        /// <remarks/>
        public string Nazwa
        {
            get
            {
                return this.nazwaField;
            }
            set
            {
                this.nazwaField = value;
            }
        }

        /// <remarks/>
        public string Opis
        {
            get
            {
                return this.opisField;
            }
            set
            {
                this.opisField = value;
            }
        }

        /// <remarks/>
        public string Kategoria
        {
            get
            {
                return this.kategoriaField;
            }
            set
            {
                this.kategoriaField = value;
            }
        }

        /// <remarks/>
        public double Cena
        {
            get
            {
                return this.cenaField;
            }
            set
            {
                this.cenaField = value;
            }
        }
    }

2. Deserializacja XML – Wczytywanie strumienia z pliku XML

Teraz pozostało nam już tylko wczytać plik XML oraz deserializować go do postaci obiektu klasy, którą przed chwilą wygenerowaliśmy.

            FileStream fs = File.OpenRead("przykladowy.xml"); // utworzenie strumienia i wczytanie pliku xml
            Produkty obiekt = (Produkty)new XmlSerializer(typeof(Produkty)).Deserialize(fs); // deserializacja do obiektu klasy Produkty

            foreach (var element in obiekt.Produkt)
            {
                Console.WriteLine(element.Nazwa);
                Console.WriteLine(element.Opis);
                Console.WriteLine(element.Kategoria);
                Console.WriteLine(element.Cena);
                Console.WriteLine("---");
            }
            Console.ReadKey();

Sterowanie przekaźnikiem za pomocą Raspberry Pi

Raspberry Pi jest urządzeniem o ogromnych możliwościach. Wiele osób już odkryło jego potencjał i wykorzystuje w swoich projektach.

Pokażę w jaki sposób można sterować zasilaniem urządzeń za pomocą Raspberry Pi i jakie projekty można zbudować w oparciu o tę wiedzę.

Polecam zapoznać się również z artykułem o Arduino, które ma podobne możliwości do Raspberry Pi, a wymaga dużo mniej wiedzy na temat programowania.

Czym jest przekaźnik?

Przekaźnik jest urządzeniem elektrycznym, który ma za zadanie przekazywać prąd do określonego obwodu elektrycznego, przy określonych warunkach wejściowych. Podanie napięcia zasilania na cewkę przekaźnika spowoduje przełączenie styku. W momencie przełączenia styku słychać charakterystyczne „cyknięcie”. Po zaniku napięcia zasilania styk powraca do pierwotnej pozycji. Więcej Wikipedia.

Moduł przekaźników

Moduł, który ja użyłem możecie znaleźć na stronie ArduinoSolutions.com. Koszt to 35 zł + przesyłka.

Warto również zakupić przewody połączeniowe, ponieważ są stosunkowo niedrogie a świetnie sprawdzają się przy łączeniu modułu z Raspberry.

Schemat

przekaźnik schemat

Schemat działania modułu przekaźników

GND modułu łączymy z jakimkolwiek GND z Raspberry Pi (ja mam podpięte do pinu nr 6). Piny sygnałowe (modułu) łączymy kolejno do GPIO 0 – 7 (Raspberry). VCC (modułu), łączymy z pinem nr 2 (Raspberry). Schemat pinów w Raspberry znajduje się tutaj.

DSC_0018 (Small)

Moduł połączony z Raspberry Pi

Kod programu

Kod możecie znaleźć w moim poprzednim artykule.

Działanie

Gdy już wszystko jest połączone, można uruchomić program i zobaczyć czy moduł reaguje. Jeżeli nie, to warto jeszcze raz przejrzeć wszystkie połączenia. Możliwe, że wpiąłeś kabelek pod nie ten pin.

Jeżeli wszystko działa, to masz już podstawy do tworzenia pierwszych swoich projektów. Po ukończeniu pochwal się nimi w komentarzu.

Aha.. i zamiast żarówki (schemat powyżej), możecie użyć dowolnego urządzenia, którego zasilaniem chcecie sterować za pomocą Raspberry. Przykładowym projektem, który wspaniale wpisuje się w idee urządzeń typu Raspberry Pi, będzie automatyczne nawadnianie.

Kilka ciekawych projektów

GPIO w Raspberry Pi Typ B

GPIO (General Purpose Input/Output) jest interfejsem służącym do komunikacji między elementami takimi jak mikroprocesor czy urządzenia peryferyjne. Wyprowadzenia (piny) mogą służyć jako wejścia jak i wyjścia sygnałów. Programista pisząc program obsługujący GPIO ma możliwość ustalenia czy dany port ma obsługiwać wejście czy wyjście sygnałów.

Oczywiście w Raspberry mamy dużo więcej portów, ale w tym artykule napiszę w jaki sposób zaprogramować działanie tylko GPIO. Poniżej prezentuje obrazek, który został pobrany ze strony https://jeena.net/rp-hw-button i pokazuje w jaki sposób wykorzystać Raspberry do zapalania diody led. Continue reading

Klasyczne Menu Start wróci do Windowsa

Wiele osób po zmianie Windows 7 na „ósemkę” ucieszy się, że Microsoft podczas konferencji Build 2014 ogłosił powrót klasycznego Menu Start do Windowsa 8.1.

Czy jest to innowacyjne? Z pewnością nie, ale wielu użytkowników ucieszy się z tej zmiany. Microsoft miał wielkie problemy, żeby przyznać się do błędu, który popełnił wycofując całkowicie tę funkcjonalność, ale jak widać potrafi się na tych błędach uczyć i koniec końców daje użytkownikom to czego faktycznie chcieli. Continue reading

Klucz do sieci Wifi Windows 8

Dane osobowe i pliki w tej sieci bezprzewodowej mogą czasem być widoczne dla osób przechwytujących sygnał z sieci. To z kolei może prowadzić do kradzieży tożsamości i innych złośliwych działań. Klucz zabezpieczeń sieciowych lub hasło pomagają zabezpieczyć sieć bezprzewodową przed tego typu nieautoryzowanym dostępem. Jednakże problem pojawia się, gdy chcemy podłączyć nowe urządzenie do istniejącej sieci wifi, a nie pamiętamy klucza sieciowego. Continue reading