Welcome to MSDN Blogs Sign in | Join | Help

News


  • Click me!

    Social networking. Multiple personas, multiple success by t.o.g.i.o.t.i.t.


    blog author contact page (Polish)

    My blogger code: B7 d t k+ s++ u-- f i o x e+ l c-
    Add to Technorati Favorites
    My Blog Juice


[PL] O gatunkach gier video (i reklama grupy GoldenLine)

Od jakiegoś czasu obserwuję sobie i czytam i dyskutuję na grupie dyskusyjnej Goldenline dotyczącej tworzenia gier komputerowych. Okazuje się, że na niej jest o wiele więcej życia niż na wspomnianej już przeze mnie wcześniej podobnej grupie na LinkedIn.

Więc niech to będzie kryptoreklama, ale jeśli jesteście zainteresowani żywą dyskusją w temacie z osobami z Polski zainteresowanymi tworzeniem gier video, to z tych dwóch opcji na pewno polecam GoldenLine.

Dla przykładu dam fragment jednej dyskusji, w którą się zaangażowałem, a z której wyszedł taki elaborat (trochę z mojej strony), że aż nawet w luźnym copy & paste nadaje się na artykuł na bloga. Przeklejam ten fragment tutaj, ponieważ aby czytać to forum, trzeba być członkiem grupy. Wierzę, że nie każdy z was jest, więc może poniższe zabrzmi jako zachęta.

Zapraszam też do komentarzy w samym temacie dyskusji, która jest o gatunkach gier, ich ewolucji i pewnym sentymencie do tych, których już nikt tworzyć nie chce. W pewnym momencie stanęło na rozróżnieniu RPG od przygodówek, sounds silly ale dalej już wklejam.
Pełna dyskusja pod tym adresem: http://www.goldenline.pl/forum/tworcy-gier-komputerowych/953300/s/1#19935118

Łukasz Gerlach (użytkownik GoldenLine):
”Porównanie przygodówek i RPG jest dość ciekawe. W obu przypadkach chodzi o przygodę. Ponadto określenie RPG jest używane często wymiennie z grą fabularną. Myślę jednak, że sama nazwa gatunku, choć bardzo ważna, nie powinna być jedyną rzeczą definiującą dany typ gry. Równie istotna jest jego geneza, czyli to, w jaki sposób on powstał. Tutaj różnica jest już widoczna, bo przygodówki powstały w formie elektronicznej niezależnie od RPG, które jest adaptacją gier papierowych. Dlatego też powstały dwa gatunki o wspólnym mianowniku, ale różnych cechach. Przede wszystkim idea kierowania postacią jest nieco odmienna. Przygodówki nastawiają się na rozwiązywanie problemów bohatera (stąd liczne zagadki), natomiast w RPG chodzi o odgrywanie jego roli - pojawia się mechanika, której zadaniem jest umożliwienie nam tego. W RPG istotna jest swoboda, możliwości podejmowania wyborów, interakcja, w przygodówkach niekoniecznie.
Tak wygląda oczywiście teoria, bo praktyka jest zupełnie inna. Widać to zwłaszcza w przypadku RPG, bo niektóre z nich mają mniej elementów charakterystycznych dla tego gatunku niż wspomniane GTA4. Wydaje mi się, że winę ponosi tu sam skrót, którym jest on określany. Próby przypisywania przygodówek do zręcznościówek są zdarzają się raczej sporadycznie i pewnie tak samo by było w przypadku RPG, gdyby były one określane jako role-playing.
Dziwi mnie natomiast opinia wielu osób, że gatunki ewoluują. One nie ewoluują - czynią to gry. Gatunek określa pewien zbiór cech i ten zbiór jest stały. Podobnie jest z gatunkami literackimi, muzycznymi czy filmowymi. Jeśli utwór zawiera zbyt wiele nowych cech, by przypisać go do istniejącego gatunku, to tworzony jest nowy. W innym wypadku nie mielibyśmy dziś np. horrorów, tylko zawierałyby się one w powieściach gotyckich, skąd się wywodzą. Zatem gatunki nie ewoluują, ale tworzą się nowe i zanikają stare.
A czy w ogóle gatunki są ważne? Debatowanie nad nimi dla samego debatowania jest pozbawione sensu. Ale gatunek ma duże znaczenie dla gracza, który stoi przed wyborem gry, którą zakupi. Każdy ma swój ulubiony typ rozrywki, więc to nie jest wszystko jedno, jaką grę wybierze. Gatunek zaś jest tym, co informuje go, czego może się po danej grze spodziewać, więc jeśli jest on źle określony, to gra nie spełni jego oczekiwań.”


Moja odpowiedź:

Łukasz,
Trochę się zgadzam i trochę nie zgadzam, a w szczególe to poniżej.
Przez ewolucję gatunku rozumiem to, że gry w większości przypadków wprowadzają nowości (i w cechach i gatunkowe) w sposób ewolucyjny.
Bardzo mało miejsca jest teraz na "nie ma czegoś takiego jak RTS", pooh, o.. wszyscy gramy w RTSy i wszyscy doskonale wiemy co ten skrót oznacza, nawet jak nie gramy. Teraz niewiele jest gier "jedno gatunkowych" w tej nomenklaturze, a przynajmniej jak ja rozumiem gatunek jako definicję pierwotną. Wydaje mi się, że podobnie to opisałes, ja po prostu zdefiniowałem z drugiej strony.
Kłótnia o nomenklature nie ma faktycznie sensu, natomiast już analiza gatunków na przykładzie gier i które cechy wynikają z innych (takie swoiste drzewo genealogiczne rozwoju gier video) już ma aby na podstawie tej, wydaje mi się ultra ciekawej, historii zaczerpnąć inspirację i zastanowić się w co będziemy chcieli grać teraz, za rok i co się tak naprawdę sprzeda i dlaczego, jeśli myślimy o komercyjnym sukcesie.
Wnioski z tego typu dyskusji czy nawet osobistych przemyśleń mogą pomóc chociażby w pójściu w projekt, który ktoś będzie chciał wydać bardziej niż mniej i na innych warunkach, lub wcale.
Totalnie nie zgadzam się co do RPG. Zapytaj jakiegokolwiek fana rpg pen&paper i jasno ci zakomunikuje, że RPG (to dla niego prawdziwe) i cRPG (te na ekranie telewizora/monitora) to odmienne rzeczy.. z drobnymi wyjątkami, a nie odwrotnie.
Historia gier cRPG (zachęcam do serii artykułów na Gamasutrze, linki mogę dołączyć jeśli nie znajdziecie) na ten temat) rozpoczęła się od gier, które teraz znamy jako rogue-like.
Znudzeni admini mainframe'ów stworzyli sobie Hack!, Rogue i takie tam. Idąc dalej (skracając timeline) była Ultima, Might&Magic czy inne Golden Boxy (seria Krynn, Pool of Radiance i inne na D&D).
Tam primo cecha rozgrywki to rozwój postaci (na karcie postaci) a nie jej odgrywanie i wczuwanie się w 3 pixele na krzyż na ekranie, zachęcam do powrotu do screenów z Ultima 1-4 dla niedowiarków.
Tyle to miało wspólnego (i do tej pory w większości przypadków) z prawdziwym erpg i odgrywaniem roli, co może wspólny system mechaniki w niektórych przypadkach i generalnie obecność karty postaci, levelowanie i munchkinowanie, żeby rozgrywka szła jak najłatwiej. Elementy fabularne, zagadki już jak najbardziej dobro wspólne komputerowych rpg jak i przygodówek.
Dlatego też ewolucja cRPG się teraz coraz bardziej rozmydla z innymi gatunkami (co widać ewidentnie na konsoli, bo większość PCtowych rpg wciąz jest bardzo konserwatywne w tej kwestii, tak jak obserwuje nowe tytuły).
Dając parę konkretnych przykładów.
Większość jRPG wymaga od Ciebie poświęcenia mnóstwo czasu na wylevelowanie postaci aby w ogóle posunąć się do przodu. Tutaj równowaga pomiędzy bardzo powtarzalnym elementem rozgrywki jak podobnie wyglądająca walka a naogół mimo wszystko bardzo ciekawą fabuła jest mocno zachwiana i jeśli nie jesteś maniakiem tego typu rozgrywki lub Japończykiem (z grubsza), to nie dajesz rady pociągnąc gry do końca, mimo że elementy fabularne na początku dają taki impuls, że każdą grę chciałbyś spróbować zacząć, choćbyś nie wiem ile razy się naciął. Jak w tym wszystkim znajdzie się "europejski" cukierek, jak w moim przypadku Lost Odyssey, który ten element ma bardziej wyważony to chłoniesz te grę, zaczynasz na nowo wierzyć w gatunek i szukasz nowych, i znowu klops, bo tam w większości przypadku jest strategiczna turowa walka, w której dobry wybory w menu, super zanimowane na ekranie powodują, że osiągasz sukces.
Przykład w drugą stronę, Oblivion, gra w której jaki byś nie miał level to przeciwnicy sa dopasowani do siły twojej postaci, więc levelowanie nie ma takiego sensu już, raczej poszukiwanie specjalnych mocy i przedmiotów, ponieważ walka z tym samym potworem na poziomie 4 może być łatwa a jak masz poziom 30 to może być ultra trudna jeśli nie masz "magicznego miecza +50". Stąd szybko jako gracz dochodzisz do wniosku, że interesuje Cię tylko fabuła. Kolejny element core rpgowy został tam zachwiany, można by rzec, ponieważ niby masz olbrzymi otwarty świat, ale jak chcesz się na tej fabule skupić i zakończyć grę zanim Ci się znudzi to go nigdy nie poznasz, a finisz grą możesz porównać z każdą inną przygodówką, po której pamiętasz nie jaki miałeś level na zakończenie, jaką drużynę zmontowałeś, ile lochów zwiedziłeś, tylko opowiesz historię o synu imperatora, demonach z zaświatów i inne historie, które byś opowiedział po przejściu każdej innej gry przygodowej.
Masz Sacred 2, Zbliżające się Diablo, Too Human czy np. Kingdom under Fire:Circle of Doom, te tak zwane Hack&Slash, tam to tylko, levelowanie, idziemy na raida, bijemy moby i patrzymy co tam za “rarajtemy“ mi te moby dropnęły (slang WoWiarzy).
Skoro o Wowie, to masz już ekstremum staciarstwa, czyli MMORPG, gdzie tylko i wyłacznie liczy się magiczny 60 poziom, bicie mobów i chat z kumplami na słuchawkach, który wątpie aby polegał na odgrywaniu postaci.
To oczywiście można by bardziej spójnie podzielić na decyzje projektowe, z których de facto się ten gatunek zbudował, zrodził czy zewoluował. Można by rozpatrywać czy te decyzje są dobre, czy zle, jeśli chcemy się zatrzymać na perspektywie gracza, który cos lubi, czegoś nie cierpi i tak dalej.
Z perspektywy twórcy (designera) jednak to są decyzje projektowe, które mogą tylko pomóc zdobyć nowych graczy lub pociąć pulę potencjalnych graczy mojej gry na mniejsze podgrupy i zabić potencjalny przychód.
Dopiero z tych decyzji na zasadzie ich sumy powstaje gatunek, który czasem prasa jeszcze bardziej chce na swoją modłę dodefiniować i masz takie rts-rpg dla przykładu, co brzmi jak Command&Conquer challenges Final Fantasy combat model jakbym nie miał się nad tym głębiej zastanawiać.
Elaborat wyszedł długi, więc go może na moment spauzuję :)

Język luźny (jak to na forum), ciekaw jestem waszego zdania (wśród graczy i deweloperów bliżej gier).

[PL] Nowy WPF Toolkit zawiera wykresy

W czerwcu opublikowano nową wersję WPF Toolkit:
http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117

W niej pojawiły się kontrolki z wykresami, jak ten poniżej:
image

Więcej informacji na tym blogu:
http://blogs.msdn.com/delay/archive/2009/06/25/wpf-charting-it-s-official-june-2009-release-of-the-wpf-toolkit-is-now-available.aspx

Oczywiście istniejące kontrolki i kod zostały też znacząco poprawione, o czym możecie przeczytać w Release Notes.

[PL] Kodu juz jest na Xboxie (400 MSP)

Dla posiadaczy Xboxów zainteresowanych wyklikaniem prostych gier. Kodu Game Lab jest już dostepne na XboX Games Market Place w sekcji – Community Games (Independent Games).

Prasa branżowa zdąrzyła się już na ten temat rozpisać, poniżej kilka ciekawych artykułów:
IGN: http://xboxlive.ign.com/articles/100/1000340p1.html
Gamasutra: http://www.gamasutra.com/php-bin/news_index.php?story=24275 
(Wow, i komentarz Mateusza Kierepki :>)
Polygamia.pl: http://polygamia.pl/Polygamia/1,95336,6786186,Co_potrafi_Kodu_.html

Ja dopiero dzisiaj znalazłem chwilkę aby pobrać Kodu na swoim Xboxie i sprawdzić w praktyce finalną wersję. 400MSP to około 20zł, za które na pewno będzie mnóstwo zabawy.

[PL] Wstęp do kryptografii, bardzo sprytny Cipher Code

Na stronach Wall Street Journal opublikowano bardzo interesujący artykuł na temat kryptografii. Historia mająca ponad 200 lat już teraz z czasów Washingtona, Jeffersona, Pattersona i całej tej spółki, która wystartowała z Wujkiem Samem i przy okazji (o czym większość z nas mogła się dowiedzieć z Skarbu Narodów) bawiła się w tzw. Amerykańskie Towarzystwo Filozoficzne (American Philosophical Society).

Sprawa dotyczy korespondencji pomiędzy Robertem Pattersonem a Thomasem Jeffersonem.
Patterson wysłał list zaszyfrowany całkiem sprytnym Cipher Code’em, który dopiero teraz rozszyfrowano. Dobry wstęp do kryptografii dla osób nieobeznanych z tematem. Zwłaszcza, że napisane językiem bardziej opisującym fantastyczną historię, niż jakiś “geek’s talk”.

Kod do rozszyfrowania wiadomości to: 13, 34, 57, 65, 22, 78, 49.. aż kontrolnie porównałem go z Lost’em. Inny.

Przy takich sytuacjach żałuję, że w naszej prasie nie ma takich niestworzonych historii o polskich matematykach, którzy “rozbroili” Enigmę i innych. U nas w prasie niestety głównie sprawy doczesne tak bardzo, że bez kontekstu historycznego patrząc w przeszłość i bez kontekstu na jutro, abym dobrze zrozumiał co z tego ma wyniknąć…

Odnośniki w języku angielskim.

[PL] Testy akceptacyjne – nowa książka

Zespół Pattern & Practices wydał nową książkę: Acceptance Tests Engineering Guide.
Na razie w wersji Beta2, więc na pewno można się w niej spodziewać zmian, natomiast lektura jest warta uwagi.

Więcej szczegółów tutaj:
http://blogs.msdn.com/agile/archive/2009/06/30/acceptance-test-engineering-guide-volume-1-beta2-release.aspx
oraz:
http://www.codeplex.com/Wiki/View.aspx?ProjectName=TestingGuidance

[PL] SQL Server wśród liderów dla rozwiązań Enterprise

Raport Forrestera dostępny tutaj dostarcza ciekawych informacji dotyczących pozycji SQL Servera na rynku rozwiązań bazodanowych dla Enterprise. Analiza została przeprowadzona na podstawie 153 kryteriów.

Krótki wycinek na temat samego Microsoftu (po angielsku):

The most aggressive DBMS vendor with a strong road map. Microsoft has done
reasonably well in the database business but over the past three years has shown increasing
focus and commitment to going after the enterprise market. SQL Server 2005 and, more
recently, SQL Server 2008 have enabled Microsoft to take market share in moderately sized
to large enterprises, delivering good performance, scalability, security, and availability
functionality. Five years ago, hardly any enterprises ran multiterabyte databases with SQL Server to support critical applications. Today, hundreds of enterprises are running 10-terabyte and larger transactional SQL Server databases.

Dodam jeszcze, że SQL Server 2008 R2 zbliża się do nas wielkimi krokami..

[PL] Bing bije Google merytorycznie (wg badań)

Na Techcrunchu jest ciekawy artykuł komentujący badania grupy Catalyst.

Według tych badań na cechy Bing bije Google’a idąc od layoutu i designu aż do najważniejszej cechy – trafność rezultatów. Ogólnie jednak Google wciąż wygrywa, głównie wokół przyzwyczajenia do marki.

To badanie jest o tyle ciekawe, że pokazuje w kwestii jakości produktu Microsoftowi trudno już zarzucić niższość. A świadomość marki, to wiadomo.. rzecz, na którą się pracuje czasem i latami, trudniej gdy ma się gorszy produkt, łatwiej gdy tego problemu nie ma.

To jest pocieszające long-term dla słowa “bingować”, natomiast a propos tego słowa, badania trafne są tylko dla Ameryki. W PL na produkt osobiście czekam, bo na razie całą otoczkę serwisową wokół bing.com mogę uznać (again) za US only.

[PL] Po spotkaniu z Glennem Blockiem

Ha.. Polacy są wszędzie.

Przed wystąpieniem Glenna na warszawskim forum miałem okazję chwilę z nim porozmawiać i dowiedziałem się między innymi, że Glenn ma polskie korzenie, a jego angielsko brzmiące nazwisko parę pokoleń wstecz zostało po prostu zanglicyzowane (trudne słowo) z staropolskiego Bielak.

To jednak lekki off-topic. Z merytorycznych kwestii porozmawialiśmy sobie trochę o jego pracy w zespole Patterns & Practices, o tym jak dołączył i współprojektował Prism. Potem przeszliśmy do tematu jego aktualnego dziecka, czyli MEF.

Rozmowa była bardzo ciekawa. W kontekście CAB i Prism rozmawialiśmy o możliwości podzielenia aplikacji na komponenty (UI, Logika biznesowa) w taki sposób, aby możliwe było zlecenie pracy nad rozwojem poszczególnych tych warstw rozdzielnym, niezależnym zespołom. MEF znowu był adresatem Glenna na omawiany przeze mnie problem “customizacji” aplikacji.

Z omówienia idei, kryjących się za powyższymi projektami przeszliśmy trochę na miękkie tematy związane z wpływem Open-Source’u na sposób prowadzenia projektów w Microsofcie. Jak wiecie coraz więcej naszych projektów jest dostępnych na CodePlex’ie z pełnym dostępem do źródeł. Glenn wspomniał, że jedną z pierwszych konsekwencji tego jaką on widzi to fakt, że coraz więcej projektów jest prowadzonych bardziej Agile z silnym wpływem TDD.

Rozmawialiśmy też o różnych językach programowania i ich wpływie na codzienność pracy programisty. Od ewolucji w C#/VB.Net przez języki dynamiczne aż po funkcyjny F#, który ostatnio badam. Porozmawialiśmy sobie o “Polyglot programming”, co w sumie w kontekście .NET Framework chyba rozumiemy podobnie. Obaj się zgodziliśmy, że aby ta idea zadziałała potrzebne są dwa warunki do spełnienia:
* Programiści doskonale zdają sobie sprawę, który język najlepiej nadaje się do jakich zastosowań w praktyce, tak aby mogli z palety języków dokonać dobrych wyborów
* W przypadku wielojęzykowego projektu potrzebny jest silny lider/architekt zespołu, który wesprze swym doświadczeniem integrację technologiczną tych wielu płaszczyzn językowych.

Spotkanie bardzo miłe, jeden z pierwszych wniosków po tym spotkaniu jakie miałem to odczucie, jakbym się na parę godzin zderzył merytorycznie z takim Tomkiem Kopaczem do kwadratu w wersji Native English. Ciekawe doświadczenie :)

[PL] Xbox Night w Warszawie, to już ten weekend

image

Jeśli jeszcze nie dotarła do was wiadomość, to w najbliższy weekend będzie ciekawa impreza dla graczy – Xbox Night. Będzie okazja dobrze się pobawić i zintegrować między innymi z redakcją serwisu www.polygamia.pl

Więcej informacji na poniższych stronach:
* Polygamia.pl
* www.play-zone.pl

Na portalu społecznościowym Facebook możecie też zadeklarować swoją obecność i zobaczyć bieżącą listę potwierdzonych gości:
http://www.facebook.com/event.php?eid=95493412689&ref=nf

Aktualna lista na tej stronie, zawiera między innymi takie nazwiska z branży jak:
Piotr Gnyp – www.polygamia.pl
Aleksander Lemnich – www.polygamia.pl
Tadeusz Zieliński – krócej wymienić, gdzie on się nie udziela niż odwrotnie.
Hubert Hatlas – Edelman

Zapowiada się ciekawie.

[PL] Zabawna sprawa, Keynote MS na największej konferencji Java

Przez natłok pracy na początku czerwca uciekła mi jedna rzecz, która być może was zaciekawi. Na początku czerwca odbyła się konferencja, która jest największym wydarzeniem w świecie specjalistów Java – czyli JavaOne. Jeśli my mamy PDC i Tech*Ed to Java (cross-vendor) ma właśnie to wydarzenie.

Ciekawy artykuł na temat naszego wystąpienia na tej konferencji napisał Steven Martin.

Jeśli chcecie zobaczyć co takiego Microsoft zaprezentował w ramach jednej z głównych sesji to zapraszam na tę stronę: http://java.sun.com/javaone/2009/general_sessions.jsp

[PL] F# Wprowadzenie – listy i unie oraz wyszukiwanie wzorców

Kontynuując rozpoczęty artykuł o F#. Powracamy do interpretera FSI aby poeksperymentować dalej ze składnią.

Listy w F#:

Pusta lista:

> let emptyList = [];;
val emptyList : 'a list

Elementy listy:

> let listOneItem = "one" :: [];;
val listOneItem : string list = ["one"]
> let listTwoItems = "one" :: "two" :: [];;
val listTwoItems : string list = ["one"; "two"]

Listy wspierają tylko jeden typ składników:

> let badList = "one" :: 123 :: "three" :: [];; 
  let badList = "one" :: 123 :: "three" :: [];;
  -----------------------^^^
stdin(5,24): error FS0001: This expression has type
        int
but is here used with type
        string

Oczywiście można listy zadeklarować w łatwiejszy sposób:

> let easyList = ["A"; "B"; "C"];;
val easyList : string list = ["A"; "B"; "C"]

A tak możemy łaczyć listy:

> let listLetters = easyList;;
val listLetters : string list = ["A"; "B"; "C"]
> let listNumbers = ["1";"2";"3"];;
val listNumbers : string list = ["1"; "2"; "3"]
> let listCombined = listLetters @ listNumbers;;
val listCombined : string list = ["A"; "B"; "C"; "1"; "2"; "3"]

Wyszukiwanie wzorców:

W zasadzie podobnie do C#, chociaż F# ma więcej możliwości wychodzących poza standardowe konstrukcje z C#. Poniżej przykłady:

> let patternMatching x = match x with | 0 -> printfn "Value is 0" | 1 -> printf
- n "Value is 1" | 2 -> printfn "Value is 2";;
val patternMatching : int –> unit
> let andTrue x = match x with | (true, true) -> true | _ -> false;;
val andTrue : bool * bool -> bool

Krótki test:

> andTrue(false,true);;
val it : bool = false
> andTrue(true,true);;
val it : bool = true

Spróbujmy się za pomocą powyższej składni pobawić ciągiem Fibonacci’ego:

> let rec fib x = match x with | 0 -> 0 | 1 -> 1 | _ -> fib(x-1) + fib(x-2);;
val fib : int -> int

I znajdzmy 42 liczbę:

> fib 42;;
val it : int = 267914296

Typy i unie:

Od tego momentu może zamiast fsi.exe proponuję utworzyć w Visual Studio 2010 nowy projekt F# (aplikacja konsolowa). Po jej utworzeniu dostaniemy plik program.fs zawierający jedną wdzięczną linijkę komentarza:

// Learn more about F# at http://fsharp.net

Krótki test zanim przejdziemy dalej, czyli Hello World zaczynamy jak na poniższym obrazku:

image 

Intellisense po przestrzeniach .NETowych jak widać działa tak jakbyśmy oczekiwali, konstrukcja jest trochę inna niż przy innych projektach konsolowych, i nasze “Hello World”, tak naprawdę może zawierać jedną linijkę:

System.Console.WriteLine("Hello World\n")

W takim razie spróbujmy zdefiniować własne typy na przykładzie poniższego prostego programiku:

//proste typy
type ItemName = string
type UnitPrice = float
type Percent = float
//definicja rekordu:
type OrderItem = {
 ItemOrdered : ItemName;
 Quantity : int;
 UnitPrice : UnitPrice;
 Discount : Percent;
}
//przykład rekordu
let myOrder = { ItemOrdered="Pants"; Quantity=1; UnitPrice=12.38; Discount=10.0}
//kontrolnie jaki typ zostanie zwrócony?
System.Console.WriteLine("myOrder type is: " + myOrder.ToString())
let key = System.Console.ReadKey()

Ten programik powinien zwrócić: myOrder type is: Program+OrderItem
Ciekawą konstrukcją są unie i ich wykorzystanie, oto przykład z temperaturą

//Unia, przykład konwersji temperatur
type temperature =
| Celcius of float
| Fahrenheit of float
| Kelvin of float

let t1 = Celcius 32.0
let t2 = Fahrenheit 98.3
let t3 = Kelvin 5.0

let conv2F x = 
    match x with
        | Celcius x -> Fahrenheit (x * 9.0/5.0 + 32.0)
        | Fahrenheit x -> Fahrenheit x
        | Kelvin x -> Fahrenheit (x * 9.0/5.0 - 459.67);;       

let convResult = conv2F t1

Jak spojrzymy w wartość convResult to zobaczymy:
image 
Możliwości takich unii łatwo sobie wyobrazić. Przy okazji proszę zwrócić uwagę na składnię związaną z wyszukiwaniem wzorców (match x with), w tym przypadku wykorzystaną, aby rozpoznać w jakim formacie temperaturę ma nasz pojemnik.

[PL] WARP w Windows 7 – czyli wydajny DirectX 10 nawet jak HAL go nie wspiera

Nie wiem czy mieliście okazję coś poczytać na temat WARP (Windows Advanced Rastering Platform). Jest to komponent, który będzie współdziałał z DirectX w Windows 7.
Ma on pomóc przysłużyć się idei zapoczątkowanej w DirectX czyli “No Caps” – brak potrzeby sprawdzania jakie cechy dany komputer/gpu posiada i wspiera.
Dzięki WARP jeśli HAL na karcie graficznej nie wspiera jakiejś funkcjonalności, to zostanie ona dyskretnie wyłączona podczas działania aplikacji lub zastąpiona (napewno wydajniejszą niż REF) alternatywą na CPU. WARP został dołączony do DirectX SDK już w listopadzie 2008.

Warto poczytać podlinkowany artykuł, jeśli planujecie jakiś nowy multimedialny projekt wykorzystujący GPU i DirectX 10+ uwzględniający Windows 7.

[PL] Spotkanie z Glennem Block’iem

W przyszłym tygodniu spotykam się w Warszawie z Glennem Block’iem. Glenn ma w Polsce serię wykładów. Jeśli na żadnym z nich nie uda się wam być, a chcielibyście mu zadać pytania od siebie, to zapraszam do komentarzy. Listę pytań zbiorę i postaram się w ramach możliwości czasowych przekazać rozmówcy i wrócić do was z odpowiedziami.

image

[PL] Wprowadzenie do F# – podstawowe elementy składni

W nowym Visual Studio 2010 widoczne są projekty w nowym języku programowania F#.
Jeśli nie mieliście okazji się nim pobawić to polecam rozpocząć naukę jeszcze nie od samego Visual Studio, lecz od interpretera dołączonego do VS2010.

Aby go uruchomić należy wybrać z Menu Start Visual Studio 2010 Command Prompt i w konsoli wpisać polecenie fsi.exe:

Wynik powinien być następujący:

Setting environment for using Microsoft Visual Studio 2010 x86 tools.
C:\Program Files\Microsoft Visual Studio 10.0\VC>fsi

Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved
F# Version 1.9.6.16, compiling for .NET Framework Version v4.0.20506

Please send bug reports to fsbugs@microsoft.com
For help type #help;;

> _

Możecie oczywiście rozpocząć od polecenia help, natomiast prosta ścieżka jaką proponuje wygląda następująco:

Wpiszmy najpierw:

> 42;;
val it : int = 42

Wyniki zawsze będę zaznaczał kursywą. Jak widzicie wpisanie wartości liczbowej powoduje przypisanie jej do zmiennej nazwanej wdzięcznie coś (it). Wpisaliśmy liczbę całkowitą, więc interpreter przyjął, że typem jest int.

Skoro już przypisaliśmy to możemy sprawdzić czy aby na pewno nasze coś ma wartość zgodną z oczekiwaną:

> it;;
val it : int = 42

Jak najbardziej, zatem parę dodatkowych testów z różnymi typami:

> 42.0;;
val it : float = 42.0
> "42";;
val it : string = "42"

Interpreter jak widać stara się domyśleć co autor miał na myśli.
Idziemy dalej, zdefiniujmy sobie krotki (tuples):

> (42, "Hello World");;
val it : int * string = (42, "Hello World")
> (42, "Hello World", 42.0);;
val it : int * string * float = (42, "Hello World", 42.0)

A teraz zdefiniujmy sobie funkcję:

> fun x -> x + 1;;
val it : int -> int = <fun:clo@0>

I spróbujmy ją wywołać z parametrem x=41;

> it 41;;
val it : int = 42

Teraz szybki eksperyment z słowem kluczowym let:

> let a = (42,"Hello World");;
val a : int * string = (42, "Hello World")

Jak widać za pomocą let możemy przypisać wartości do zdefiniowanych przez nas (nazwanych) zmiennych. Od razu przykład jak w ten sposób dobrać się do skladowych naszej krotki:

> let b = fst a;;
val b : int = 42
> let c = snd a;;
val c : string = "Hello World"

Przy krotkach z dwoma wyrażeniami fst (first) i snd (second) pomagają wybrać składowe.
Możemy też przyspieszyć proces:

> let (b,c)=a;;
val c : string = "Hello World"
val b : int = 42

Co jest jedyną opcją przy bardziej rozbudowanych krotkach:

> let a = (42,"Hello World", 42.0);;
val a : int * string * float = (42, "Hello World", 42.0)
> let (b,c,d) =a;;
val d : float = 42.0
val c : string = "Hello World"
val b : int = 42

Jeśli interesuje nas tylko jedna składowa to posługujemy się poniższą składnią:

> let (_ ,e, _) = a;;
val e : string = "Hello World"

Wróćmy do funkcji:

> let fncAddTen = (fun x –> x + 10);;
val fncAddTen: int –> int
> fncAddTen(12);;
val it : int = 22

I przykład wieloargumentowy:

> let fncAddNumbers = ( fun x -> (fun y -> x + y));;
val fncAddNumbers : int -> int –> int
> fncAddNumbers 32 35;;
val it : int = 67

Wersja z prostszą składnią:

> let fncAddNumbers x y = x + y;;
val fncAddNumbers : int -> int –> int
> fncAddNumbers 32 35;;
val it : int = 67

Oraz jeszcze jedna kombinacja z funkcją:

> let addTenToNumber = fncAddNumbers 10;;
val addTenToNumber : (int -> int)
> addTenToNumber 12;;
val it : int = 22

Powyższe przykłady bez komentarza są dobrym wstępem do funkcyjnego programowania za pomocą F#. Jeśli poszukujecie więcej informacji na temat tego języka to zapraszam na poniższe strony:
http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/ (Strona R&D gdzie powstał język).
http://msdn.microsoft.com/pl-pl/fsharp/cc835246(en-us).aspx (zasoby do nauki języka)
http://msdn.microsoft.com/en-us/library/dd233154(VS.100).aspx (główna strona języka na MSDN Library)
http://msdn.microsoft.com/pl-pl/library/dd233249(en-us,VS.100).aspx (lista słów kluczowych do dalszej eksploracji)

[PL] Windows 7 – pomoc techniczna przy problemach z kompatybilnością waszych aplikacji

Jakiś czas temu opisałem techniczne wymagania dotyczące kompatybilności aplikacji z Windows 7 (kryteria pod certyfikat Logo).

Uzupełniając informacje tam zawarte chciałem dodać, iż od początku czerwca dostępny jest już toolkit, dzięki któremu możecie sami przetestować swoje aplikacje pod kątem tych wymagań.

Dodatkowo jak możecie przeczytać tutaj zostało uruchomione wsparcie techniczne, które ma pomóc wam zaadresować wszelkie problemy jakie napotkacie w temacie kompatybilności własnych aplikacji. Aby z tego wsparcia skorzystać należy się zarejestrować na tej stronie: https://www.isvappcompat.com/ 

Reprezentując lokalne biuro w Warszawie oczywiście też mogę zapewnić, że ten temat jest przez nas spostrzegany bardzo poważnie i włącznie z warsztatami Windows 7 Remediation Workshops, które odbyły się na początku czerwca w Warszawie, już de facto rozpoczęliśmy działania mające na celu pomóc partnerom w temacie kompatybilności. To dopiero początek i na pewno w pierwszej linii powiadomię was tutaj o nowych, zgodnie z harmonogramem i planem dalszych aktywności.

More Posts Next page »
Page view tracker