Dawid Cieszyński

.NET/PHP Software Developer

W tym roku wziąłem udział w Imagine Cup tylko w kategorii Internet Explorer 8 Award.

Napisałem aplikacje monitorującą grę w szachy (na serwerze Helion'a) i informującą nas o naszym ruchu, umożliwiającą podgląd szachownicy a także wyszukiwanie innych gier (trwających lub zakończonych) i graczy oczekujących na partnera.

Na stronie Imagine Cup 2010 IE8 Award możecie przeczytać, że moja (jednoosobowa) drużyna CieszakTeam znalazła się wśród laureatów polskiej edycji. 19 maja jadę do Warszawy po odbiór nagrody ;)

Samą aplikację można znaleźć na serwerze udostępnionym dla uczestników: http://cieszakteam.imaginecup2010.net/

1 czerwca okaże się co zadecydują sędziowie w edycji światowej. Mam nadzieję że też się na jakąś nagrodę załapię. Niestety w kategorii IE8 Award nie jest przewidziana wycieczka do Polski :D

Już 5 maja 2010 roku (środa) o godzinie 17:00 na Wydziale Matematyki i Informatyki UWM w Olsztynie startuje Visual Studio 2010 Community Launch.

12 kwietnia 2010 roku miała swoją premierę nowa wersja środowiska programistycznego firmy Microsoft - Visual Studio 2010. Kolejna odsłona tego świetnego produktu umożliwia programiście szybsze i wydajniejsze tworzenie aplikacji biznesowych.

Polskie społeczności skupione wokół produktów firmy Microsoft organizują w swoich miastach spotkania, mające na celu przybliżenie najnowszej wersji środowiska Visual Studio tak swoim członkom, jak i innym chętnym poszerzenia swojej wiedzy.

Jednym z miast, które bierze udział w cyklu, jest Olsztyn. W środowy wieczór będzie można obejrzeć dwie prezentacje na temat Visual Studio 2010:

  • Nowości w Visual Studio 2010 - Sesja ma za zadanie wprowadzić uczestników w tematykę związaną z Visual Studio 2010, przede wszystkim zaś w zmiany, które w nim zaszły oraz wprowadzone nowości.
  • IntelliTrace - nowe podejście do śledzenia aplikacji - Debbuger historyczny to narzędzie, który zupełnie zmieni sposób pracy programisty. To swoista "maszyna czasu dla deweloperów i testerów". Rejestruje historię działania aplikacji i pozwala odtworzyć to, jak doszło do wystąpienia danego błędu. Sesja ma przybliżyć to narzędzie użytkownikom.

W przerwie między prezentacjami będzie można zintegrować się ze społecznością oraz zebrać siły przed drugą prezentacją, posilając się dużą ilością pizzy :)

Wśród uczestników spotkania rozlosowane zostaną cenne nagrody o łącznej wartości ok. 10 000zł! Będą to między innymi licencje na produkty, takie jak Telerik Premium Collection o wartości 1299$, ReSharper, Nevron Chart for .NET Lite, Gauge for SSRS, CodeRush with Refactor! Pro czy Typemock Isolator. Do rozdania mamy także książki ufundowane przez wydawnictwo O’Reilly – CLR via C# oraz C# 4.0 in a Nutshell.

Udział w wydarzeniu jest bezpłatny, wymagana jest rejestracja na stronie.

Przyjdź na Visual Studio 2010 Community Launch, poznaj najnowsze środowisko programistyczne Micosoftu, poszerz swoją więdzę i dobrze baw się z nami!!!

Wczoraj  dostałem od Prometric'a voucher ze zniżką 25% na egzaminy Pro z VS2008.

"(...)Use your special voucher code when scheduling exam 70-563, 70-564 or 70-565 to secure a 25% discount.(...)"

Niestety mi jeszcze brakuje ok 4 TS a voucher jest ważny do 30 czerwca 2010 więc raczej z niego nie skorzystam.

Jeśli ktoś jest chętny to proszę się zgłaszać :)

Wczoraj na ćwiczeniach z Systemów Sztucznej Inteligencji poprowadziłem prezentację na temat strategii przeszukiwania przestrzeni. Przy okazji nauczyłem się obsługi bardzo fajnej biblioteki QuickGraph służącej do “obsługi” grafów .NET oraz generowania pliku pdf i png z wizualizacją grafu. Poniżej prezentacja, napisana przeze mnie aplikacja demonstracyjna oraz skompilowana wersja aplikacji A+ Pathfinding Algorithm by Herbert Glarner

Metody przeszukiwania przestrzeni.pptx

Metody przeszukiwania przestrzeni.zip

A+_Pathfin1937941062005.zip

Mam za sobą egzaminy:

  • Exam 70-536: TS: Microsoft .NET Framework – Application Development Foundation
  • Exam 70-502: TS: Microsoft .NET Framework 3.5, Windows Presentation Foundation Application Development

I czas się zastanowić co dalej, jeszcze przez kilka miesięcy będę studentem więc dobrze by było to wykorzystać i zrobić za darmo jeszcze kilka certyfikatów. Do końca czerwca będę się starał zrobić:

  • Exam 70-503: TS: Microsoft .NET Framework 3.5 – Windows Communication Foundation Application Development
  • Exam 70-505: TS: Microsoft .NET Framework 3.5, Windows Forms Application Development
  • Exam 70-562: TS: Microsoft .NET Framework 3.5, ASP.NET Application Development

Zapewne widzieliście już opracowania materiałów do 70-536 stworzone przez grupę eastgroup.pl. Myślę że nie będzie w tym nic złego, że zdradzę pewną informację: Niedługo zaczynamy kolejną serię wpisów z przygotowań do egzaminów :)

Wczoraj zastrajkował mi dysk na serwerze. Mimo udanego odzyskania tablicy partycji dzięki TestDisk moje Gentoo miało problemy z widzialnością partycji (konfigurowałem na różne sposoby i nic to nie dało).

Więc postawiłem sobie do testów Ubuntu Server 9.10, przebrnąłem przez manuala i znowu mam maszynkę na moje backupy przez rsync. Ciekawe czy da się postawić na nim wirtualną maszynę np. z Windowsem i podłączyć się do niej zdalnie… DA SIĘ :)  i nie jest to zbyt skomplikowane.

Artykuł dotyczy ręcznego tworzenia maszyn wirtualnych. Aktualnie zamiast tego polecam użycie phpVirtualBox

Tu jest instrukcja do VirtualBox 1.5.2, aktualnie VirtualBox jest w wersji 3.1 i ta instrukcja nie do końca do niego pasuje. Więc przedstawię instrukcję wg. mojego przypadku

    1. Dodanie źródeł pakietów

      Najpierw trzeba dodać do listy repozytorów (/etc/apt/sources.list)  repozytorium dla tej wersji Ubuntu
      deb http://download.virtualbox.org/virtualbox/debian karmic non-free

      Musimy użyć repozytoriów Sun’a ponieważ pakiety dostępne domyślnie w Ubuntu nie zawierają funkcjonalności RDP, USB i USB over RDP (zawarte w zamkniętej wersji VirtualBox’a) Informacje o edycjach VirtualBox.

      Repozytoria dla innych dystrubucji

    2. Zainstalowanie VirtualBox
      sudo apt-get install virtualbox
    3. Utworzenie i zainstalowanie wirtualnej maszyny

      Tutaj było najwięcej problemów. Poniższy ciąg poleceń tworzy wirtualną maszynę: 

      VBoxManage createvm -name "ws2008" -register
      VBoxManage modifyvm "ws2008" --memory 512 --acpi on --boot1 dvd --nic1 intnet
      VBoxManage createvdi --filename "ws2008.vdi" --size 10240 --register
      VBoxManage storagectl "ws2008" --name "IDE Controller" --add ide
      VBoxManage modifyvm "ws2008" --hda "ws2008.vdi"
      VBoxManage registerimage dvd /storage/isos/ws2008.iso
      VBoxManage storageattach "ws2008" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /storage/isos/ws2008.iso
      VBoxManage modifyvm "ws2008" --vrdpport 3390
      
      1. Utworzenie i zarejestrowanie maszyny
      2. Ustawienie maszyny: 512MB RAM, włączone ACPI, bootowanie z dvd, sieć wewnętrzna
      3. Utworzenie i zarejestrowanie obrazu dysku  10GB
      4. Dodanie kontrolera IDE do maszyny. (Tego brakowało w instrukcji do wcześniejszych wersji, jeśli ktoś z was miał błąd ERROR: Could not find a storage controller named 'IDE Conroller', to właśnie dlatego, że maszyna nie miała kontrolera IDE dyskusja na forum VirtualBox )
      5. Przypisanie obrazu dysku do maszyny.
      6. Zarejestrowanie obrazu płyty instalacyjnej windows’a
      7. “Włożenie płyty” do wirtualnego dvd (nie wiem czy poprzedni krok był konieczny, bo tutaj i tak podaję ścieżkę; ten krok także się różny od przytoczonej wcześniej instrukcji do wersji 1.5.2)
      8. Ustawienie portu dla VRDP (Virtual Remote Desktop Protocol)
    4. Uruchomienie maszyny
      VBoxVRDP -startvm "ws2008"
      
    5. Podłączenie pulpitem zdalnym

      Teraz wystarczy się podłączyć przez pulpit zdalny z naszą maszyną na porcie który ustawiliśmy, w przykładzie: server:3390

    6. Oczywiście zanim zainstalujmy Guest Additions kursor myszy będzie się dziwnie zachowywał :)
      VBoxManage storageattach "ws2008" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /usr/share/virtualbox/VBoxGuestAdditions.iso
      
    7. Internet

      Jeśli ktoś potrzebuje na maszynie podłączenie do internetu, należy podłączyć NAT (przy wyłączonej maszynie wirtualnej):

      VBoxManage modifyvm "ws2008" --nic1 nat
      
    8. Dodatkowo możemy przekierować port wirtualnej maszyny aby był widzialny na zewnątrz:
      VBoxManage setextradata "ws2008" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
      VBoxManage setextradata "ws2008" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 3389
      VBoxManage setextradata "ws2008" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 3389
      

      gdzie guestssh to nasza nazwa przekierowania (zostawiłem nazwę z przykładu z wiki VirtualBox’a)

    9. Teraz możemy podłączyć się do naszego Windows’a albo przez VRDP udostępniony przez VirtualBox, albo przez RDP samego Windows’a. :D

Moi znajomi z grupy Eastgroup.pl skończyli właśnie opracowywać materiały na egzamin 70-536, ja już taki certyfikat mam, ale może komuś z Was się przyda.

Polecam :)

Jeden z moich klientów korzysta z systemu Joomla i dodatku VirtueMart (moduł sklepu internetowego). Żeby uprościć jego obsługę pomyślałem nad napisaniem aplikacji do aktualizacji cen pobieranych z jakiegoś źródła.

Aplikacja korzysta z DB_Linq czyli Linq Provider for MySql, Oracle and PostgreSQL.  Niestety DB_Linq nie ma aktualnie żadnej dokumentacji. Za to znalazłem drobne informacje na stronie Primary Objects. Wykorzystałem wersję 0.18 która jest deprecated ponieważ z 0.19 miałem problem z wygenerowaniem klas linq.

Z wersją 0.18 też był problem…

DbMetal failed:System.ArgumentException: magma string must not be empty

Okazało się, że jest problem jeśli nazwy tabel w bazie zawierają obok siebie dwa znaki podkreślenia.

Oczywiście pogrzebałem trochę w kodzie i to sobie poprawiłem:

//\DbLinq-0.18\src\DbLinq\Language\Implementation\AbstractWords.cs, linia 139
public virtual IList<string> GetWords(string text)
{
    text = text.Replace("__", "_"); //zamienia dwa podkreślenia na jedno

Teraz mogłem już zacząć korzystać z zalet linq połączonego z bazą MySQL.

Dla tych którzy nie znają angielskiego (lub nie lubią czytać po angielsku) napiszę co po koli należy zrobić aby łatwo pogrzebać sobie w bazie MySQL.

  1. Ściągnąć DB_Linq
  2. Wygenerować klasy modelu na podstawie struktury bazy danych. Zostanie utworzony jeden plik o nazwie takiej samej jak nazwa bazy
    dbmetal /server:1.2.3.4 /user:dbuser /password:password /provider:MySql /database:people /language:C#
    
  3. To wszystko :)
    Klasy mamy gotowe więc można operować na bazie.

Odczytywanie danych z bazy (SELECT).

public ObservableCollection GetProducts()
{
    using (var connection = new MySqlConnection("server=server.pl;user id=user; password=haslo; database=baza"))
    {
        connection.Open();
        using (var dataContext = new BazaDataContext(connection))
        {
 
  var items = from s in dataContext.JoSVMProduct
                        join pc in dataContext.JoSVMProductPrice on s.ProductID equals pc.ProductID
                        orderby s.ProductName ascending
                        select new ProduktVm
                                   {
                                       ProductId = s.ProductID,
                                       ProductSku = s.ProductSku,
                                       ProductName = s.ProductName,
                                       ProductPrice = pc.ProductPrice,
                                       ProductFullImage = s.ProductFullImage,
                                   };
 
            var collection = new ObservableCollection();
            foreach (var c in items)
                collection.Add(c);
 
            return collection;
        }
    }
}

W powyższym przykładzie pobieram dane o produktach i cenach i tworzę sobie obserwowalną kolekcję. ProduktVm to moja klasa pośrednia.

Aktualizowanie danych w bazie (UPDATE).

using (var conn = new MySqlConnection("server=server.pl;user id=user; password=haslo; database=baza"))
{
    conn.Open();
    using (var context = new BazaDataContext(conn))
    {
        var items = from pc in context.JoSVMProductPrice
                    where pc.ProductID == 1
                    select pc;
        var i = items.First();
        i.ProductPrice = -1;
        context.SubmitChanges();
    }
}

Dodawanie danych do bazy (INSERT).

using (PeopleDataContext context = new PeopleDataContext(connection))
{
    // Create a LINQ to SQL class to fill the properties.
    Person person = new Person();
    person.FirstName = txtFirstName.Text;
    person.LastName = txtLastName.Text;
    person.Age = Convert.ToInt32(txtAge.Text);
 
    context.Person.InsertOnSubmit(person);
    context.SubmitChanges();
}           

W mojej aplikacji jeszcze insertów nie robię więc podaję przykład z Primary Objects

Na koniec dodam jeszcze, że VMManager miał pobierać dane z Excela, ale niestety nie znalazłem żadnego działającego sposobu pobrania danych z arkusza. Zapisałem arkusz jako plik tekstowy z danymi rozdzielonymi znakami tabulacji i takie dane to już da się odczytać.

Wszyscy którzy powinni wiedzieć w pierwszej kolejności już wiedzą, więc Wy też już możecie: Zaręczyłem się :D A było to dokładnie 3 stycznia 2010 przed Pałacem Łazienkowskim (Pałac na Wyspie) w Warszawie.

Wczoraj mój kolega opublikował pierwszą wersję projektu Bieduino czyli "Arduino dla biednych". Ja przygotowałem projekt płytki (bo znam się bardzo dobrze na Eagle'u) na podstawie Metaboard'a a Kamil zrobił resztę.

Właśnie jestem w trakcie przygotowywania kolejnej wersji 1.1, więc jeśli macie jakieś opinie lub sugestie zapraszam do komentowania u mnie albo na blogu Kamila.