Najstarszy system operacyjny świata

Bill Hill, wynalazca systemu typograficznego ClearType:

„Jaki jest najstarszy system operacyjny na świecie? Nie jest to ani Windows, ani OSX, ani Linux. To Homo Sapiens 1.0. Wydano go ok. sto tysięcy lat temu i nic nie wskazuje na to, aby doczekał się aktualizacji.”


Shitty Sudoku – jak nie tworzyć gier w Unity

W końcu udało mi się stworzyć grę – od początku do końca. Efekt to Shitty Sudoku, które jak nazwa wskazuje, mocno odbiega standardem od produkcji komercyjnych Uśmiech z językiem.

Abstrahując od wyniku eksperymentu, cel główny przedsięwzięcia udało się zrealizować – nabyć doświadczenia i wyciągnąć cenne wnioski. Oto i one:

 

Dobry plan to podstawa

Przede wszystkim zabierając się za tworzenie gry trzeba mieć konkretną wizję i precyzyjny plan. Stwierdzenie to można w zasadzie przykleić do każdego projektu z dziedziny inżynierii oprogramowania. Jednakże gry są specyficznym przypadkiem, który wyróżnia się dynamiczną zmianą stanów obiektów, w związku z czym trudniej rozwiązać tu problemy wynikające z braku planowania.

Tworzenie na “hurra” skutkuje tym, że już w połowie projektu widać nikłe szanse na osiągnięcie sukcesu. W efekcie następuje szybka demotywacja twórcy i pogłębiająca się degradacja jakości produktu finalnego.

 

Najpierw prototyp, później oprawa

Podstawowym błędem (który popełniłem z premedytacją Uśmiech z językiem), było zbyt szybka koncentracja na finalnych zasobach graficznych. Profesjonalne tworzenie gier zaczyna się od prototypowania, któremu towarzyszą proste, byle-jakie modele/tekstury/dźwięki. Dopiero na końcu procesu twórczego implementuje się zasoby docelowe.

Ma to dwa zasadnicze plusy. Pierwszy jest taki, że nie koncentrując się na oprawie znacznie szybciej dochodzimy do etapu gotowej mechaniki gry, którą możemy dokładnie sprawdzić i przetestować.

Drugą zaletą prototypowania jest fakt, że nie mając efektywnej oprawy audio-wideo, możemy bezpośrednio przekonać się, czy mechanika gry jest w stanie samodzielnie obronić produkt finalny. Informacja ta jest kluczowa, ponieważ decyduje o tym, czy warto dalej ciągnąć projekt, czy jednak lepiej porzucić go na tym dość wczesnym etapie. A może warto zastanowić się w tym miejscu nad zmianą kierunku? Tak czy inaczej – prototypowanie pozwala uniknąć wielkich rozczarowań i ułatwia podejmowanie radykalnych decyzji.

 

Architektura – Singleton jest Twoim przyjacielem.

Od początku zabawy z Unity miałem problemy z ogarnięciem efektywnej komunikacji między obiektami. Niby są tu metody wyszukujące obiekty, mechanizmy udostępniające komponenty, ale podchodzę do nich z rezerwą (co wynika zapewne z niewiedzy.) Dopiero implementacja wzorca projektowego Singleton zagwarantowała mi komfort w komunikacji między obiektami. Oczywiście przesadza w każdą stronę jest zła, dlatego nie ma co nadużywać tego wzorca, jednak w fundamentalnych elementach projektu warto go wykorzystać.

 

Menusy – nie odkładać na koniec

Kolejnym problemem, który pierwotnie wydawał mi się błahy jest implementacja menu. Podczas gdy same mechanizmy działania menusów nie były wyzwaniem, problemem było powiązanie elementów interfejsu z mechanizmami gry. Może nie tyle problem, co niepotrzebną stratą czasu. Dobrze jest integrować rozwijającą się grę i jej zmienne, na które bezpośredni wpływ ma gracz, z interfejsem graficznym.

Oczywiście przy tworzeniu systemu menu trzeba pamiętać o zasadzie prototypowania – proste rozwiązania na początek w zupełności wystarczą. Zbytnie zagłębianie się w interfejs to nic innego jak dekoncentracja i gubienie głównego celu.

 

Granice możliwości.

Wielu początkujących twórców gier przyzna zapewne, że pomysłów na gry mają bez liku, jednak większość z nich wymaga potężnych zespołów designerów, programistów i artystów. Tymczasem pierwsze kroki w dziedzinie tworzenia gier wideo stawia się zwykle samemu lub w niewielkim zespole. Bardzo istotnym elementem jest więc świadomość ograniczonych zasobów czasowo-finansowych, a także umiejętność dostosowania przedsięwzięcia do aktualnych możliwości. Rzucanie się z motyką na słońce kończy się zawsze porażką, która może tylko zniechęcić. Pamiętajmy więc o ograniczeniach, sprytnie omijajmy przeszkody i przede wszystkim – głęboko wierzmy w to co robimy!

Tym optymistycznym akcentem zakończę wpis i udaję się zagrać w coś, bom dawno tego nie robił Puszczam oczko.


(Nieoficjalny) Dzień psikusów

Co za dzień. Wszystkim zebrało się na płatanie figli.

Przeglądam aktualności, a tu taki tekst: “Samsung nakłada na Apple 20% podwyżki za produkcję komponentów.” Ostra riposta na pozew Apple przeciwko smartfonom koreańskiego giganta. Jak mawia stare powiedzenie: “Kto mieczem wojuje, ten od miecza ginie.”

Kolejny polew zaserwowało Activision, które sprzedaje niektóre kopie w specjalnej edycji, gdzie płyta nr 2 zawiera… Mass Effect 2. Liczę, że EA odwdzięczy się Acti i na drugiej płycie BF4 umieści kolejną część Skylanders Uśmiech z językiem.

Komandor Sheppard – tym razem gościnnie w Blops2 Szeroki uśmiech

Podobny zonk zaliczył Warner, który w USA wydał właśnie LEGO The Lord of the Rings. Żart tego zdarzenia polega na tym, że wersja pod X360 zawiera na płycie demo gry. Tym samym mamy tu pierwszy przypadek dema kosztującego 60 dolców Zdziwienie.


Podział bloga

W związku z tym, że większość publikowanych wpisów dotyczy weganizmu, postanowiłem stworzyć drugiego bloga, całkowicie dedykowanego tematyce weganizmu – Da Vegeman.

qwark

Patronat nad nowym blogiem objął Kapitan Qwark!

Wegańskie wpisy z tego bloga zaimportowałem już do nowego, więc jak znajdę nieco czasu to posprzątam tu. Nie jestem pewien jeszcze co zrobię z tutejszymi wpisami dot. weganizmu, ale najprawdopodobniej pójdą do kosza.


1000 km treningów

Pierwszy kamień milowy zaliczony – w ubiegłym tygodniu stuknęło mi 1000 km przebytego dystansu podczas treningów.

Na dzień dzisiejszy, licząc od 30 czerwca, kiedy to zacząłem używać aplikacji Runtastic, statystyki wyglądają następująco:

  • Aktywności: 84
  • Dystans: 1141.21 km
  • Czas trwania: 81:05:21
  • Kalorie: 56 253 kcal (naliczane na podstawie sztywnych wzorców – podchodzić z przymrużeniem oka ;)

Największą aktywność miałem do tej pory we wrześniu, a najmniejszą (nie licząc jednego dnia w czerwcu) – w lipcu, kiedy to dopadła mnie poważna kontuzja kolan.

Ciekawi mnie, jaki dystans przebyłem zanim zacząłem monitorować aktywność. Na rolkach jeżdżę od marca ub. roku. W 2011 r. przeciętnie jeździłem 18 km per sesję, 2 sesje na tydzień, przez ok. 30 tygodni, co daje 1080 km. W tym roku, licząc od marca do końca czerwca, średnio jeździłem 36 km per sesję, 5 sesji na tydzień, co daje w sumie 2880 km. Hmmm, jak teraz patrzę na te liczby to rozumiem dlaczego mi w czerwcu piasty w rolkach pękły Uśmiech z językiem.

Interesująco prezentuje się również spadek wagi ciała. W styczniu tego roku było to 85 kg – waga, którą miałem od wielu lat. W dniu 7 sierpnia, kiedy to ostatnio aktualizowałem wagę na stronie Runtastic, pomiar wyniósł 80 kg. Z kolei jakieś 2 tygodnie temu, jeśli mnie pamięć nie myli, zważyłem się z wynikiem 75 kg. Spadek masy ciała jest rzeczą naturalną – odżywiam się tak samo, a aktywność fizyczną mam wielokrotnie wyższą.

Waga spada, samopoczucie coraz lepsze – żyć, nie umierać Szeroki uśmiech.


TSQL – serializacja danych za pomocą polecenia FOR XML PATH

Załóżmy, że chcemy zwrócić listę kontrahentów i wystawionych dla nich dokumentów w dwóch kolumnach, bez powtórzeń klientów. Można zrobić to oczywiście za pomocą kursora zawartego w funkcji. Jest jednak inny, bardziej elastyczny sposób na serializację danych.

Definicja tabel źródłowych:

WITH TempTable1 AS
(
    SELECT 1 AS [kh_Id], 'Klient 1' AS [kh_Nazwa]
    UNION
    SELECT 2, 'Klient 2'
    UNION
    SELECT 3, 'Klient 3'
),
TempTable2 AS
(
    SELECT 1 AS [dok_Id], 1 AS [dok_KhId], 'WZ 1' AS [dok_Nr]
    UNION
    SELECT 2, 1, 'WZ 2'
    UNION
    SELECT 3, 2, 'WZ 3'
    UNION
    SELECT 4, 3, 'WZ 4'
)

Tabele powiązane są ze sobą za pomocą kluczy kh_Id = dok_KhId.

Wykonując kwerendę:

SELECT kh_Nazwa AS [Kontrahent]
    , dok_Nr AS [Dokument]
FROM TempTable1
    JOIN TempTable2 ON kh_Id = dok_KhId

…otrzymamy taki oto wynik:

Kontrahent Dokument
Klient 1 WZ 1
Klient 1 WZ 2
Klient 2 WZ 3
Klient 3 WZ 4

Na kontrahenta “Klient 1” wystawione zostały 2 dokumenty. Aby oba dokumenty znalazły się w jednej komórce, należy kwerendę zmodyfikować w następujący sposób:

SELECT kh_Nazwa AS [Kontrahent]
	, SUBSTRING
	(
		(
			SELECT ', ' + dok_Nr
			FROM TempTable2
			WHERE dok_KhId = kh_Id
			FOR XML PATH ('')
		), 2, 7999
	) AS [Lista dokumentów]
FROM TempTable1

Polecenie FOR XML PATH() umożliwia prostą serializację danych i zwrócenie wyniku do nadrzędnej kwerendy, co objawia się takim oto efektem:

Kontrahent Lista dokumentów
Klient 1 WZ 1, WZ 2
Klient 2 WZ 3
Klient 3 WZ 4

Unable to start T-SQL debugging

Pewnego pięknego dnia, kiedy to potrzebowałem odpluskwić świeżo napisany kursor, pojawił się moim oczom taki oto komunikat:

TSQL debugging problem

Nieciekawie.

Google na ten temat nie dało jednoznacznego rozwiązania problemu. W jednym z formumowych wątków pojawiła się jednak wzmianka o tym, aby sprawdzić adres serwera. Cóż w moim przypadku adres jest oczywisty – wskazuje na lokalną instancję silnika bazodanowego. Spróbowałem jednak zmienić adres maszyny na wersję jawną.

Zamieniając (w parametrach połączenia) adres serwera z:

(local)\SQLEXPRESS

na:

DAWIDBUREK-HP\SQLEXPRESS

…problem zniknął. Rozwiązanie problemu dotyczy wyłącznie autentykacji Windows, bowiem w przypadku autentykacji SQL-owej, problem w ogóle nie pojawia się.


Pepsi Eliot

mój punkt widzenia

Daily .NET Tips

.NET Tips and Tricks, C#, ASP.NET, MVC, Kinect, Visual Studio

SQLcommitted

Committed with SQL

coding by to design

everyone gets the experience, some get the lesson

Denno Secqtinstien Foundation

Issue Tracking, Reporting and Resolving Site for DS Foundation

Journey to SQL Authority with Pinal Dave

SQL, SQL Server, MySQL, Big Data and NoSQL

Dawid Burek

...o programowaniu, grach wideo, sporcie, weganiźmie...

w Dresie na WordPressie

wdrożenia ERP, porady niepoważne, co mnie drażni

WordPress.com

The latest news on WordPress.com and the WordPress community.

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.