Latest Entry
czerwca 2, 2009 ASP.NET, ASP.NET 4.0, Visual Studio 2010
Nie lada gratka dla każdego programisty ASP.NET :)
Firma ORCS Web udostępniła darmowy hosting z ASP.NET 4.0 beta(!). Oferta przeznaczona jest jedynie dla projektów testowych i nie zawiera m.in. e-maili, FTP czy panelu administracyjnego.
Otrzymujemy natomiast:
- Windows Server 2008 / IIS 7
- ASP.NET 4.0beta
- 200MB miejsca na naszą aplikację
- 100MB na bazę SQL Server 2008
Nasze konto będzie aktywne do końca października.
Ponieważ darmowe konto nie posiada konta FTP, naszą aplikację wgrywamy za pomocą narzędzia Web Deployment Tool (MsDeploy). Narzędzie to jest dołączone do Visual Studio 2010 lub można je pobrać ze strony Web Deployment Tool - RC1 - x86.
Rejestracji dokonujemy na stronie https://www.orcsweb.com/signup/?planid=46. Po wypełnieniu formularza otrzymamy maila z danymi potrzebnymi do wgrania naszej aplikacji na serwer oraz “connection string” do bazy danych.
Więcej informacji dostępnych jest na stronie: VS2010 and Web Deployment Tool Beta Program.
Recent Entries
kwietnia 1, 2009 ASP.NET MVC
Parę dni temu Microsoft opublikował Training Kit do ASP.NET MVC :)
Pakiet materiałów przedstawia podstawowe zagdanienia związane z ASP.NET MVC. Training Kit składa się z czterech części:
- prezentacje
- hands-on-labs
- demonstracje
- oraz dodatkowe materiały - FAQ, linki do materiałów o ASP.NET MVC
ASP.NET MVC Traning Kit można pobrać ze stron Microsoft Download Center
marca 19, 2009 ASP.NET, jQuery
W Visual Studio 2008 mamy możliwość korzystania z intellisense dla różnych bibliotek javascript. Aby jednak korzystać z tego dobrodziejstwa musimy:
Po instalacji tych elementów możemy korzystać z instellisense dla różnych bibliotek javascript. Oczywiście biblioteki te musimy zadeklarować na naszej stronie.
<script src="js/mylibrary.js" type="text/javascript"></script>
Poza standardowym “podpowiadaniem” funkcji/metod/itp. dla bibliotek js, path ten umożliwia korzystanie również z dokumentacji. Dokumentację tworzymy pisząc komentarze podobne do komentarzy z C#, np.:
function TestFunction(imie) {
/// <summary>Przykładowa funkcja javascript</summary>
/// <param name="imie" type="string">Pierwszy parametr funkcji</param>
/// <returns type="string" >Wartość zwracana</returns>
return "test";
}

Funkcjonalność patha jest bardzo przemyślana i umożliwia korzystanie z komentarzy umieszczonych w innym pliku niż nasza biblioteka. Jak wiadomo, pliki javascript powinny być jak najmniejsze, a tworzenie w nich dokumentacji na pewno w tym nie pomaga :)
Kolejność przeszukiwania plików w poszukiwaniu dokumentacji wygląda tak:
- mylibrary-vsdocs.js
- mylibrary-debug.js
- mylibrary.js
Jeżeli nie zostanie znaleziony plik mylibrary-vsdocs.js szukany jest mylibrary-debug.js, itd. Oczywiście deklarujemy tylko mylibrary.js - plik z dokumentacją powinien jednak znajdować się w tym samym katalogu (jednak nie musi być nawet includowany w projekcie).

Jeżeli deklaracja pliku js znajduje się innym pliku (np. w MasterPage), wtedy w naszym pliku musimy podać referencję:
/// <reference path="js/mylibrary.js" />
lub
/// <reference path="Default.aspx" />
Wszystkich, którzy piszą w jQuery z pewnością ucieszy fakt, iż od jakiegoś czasu przygotowywane są pliki z dokumentacją do tej biblioteki.
Dokumentację znaleźć można na stronie jQuery.

marca 18, 2009 ReSharper
Oj dzieje się, dzieje :)
Od wczoraj jest dostępne ASP.NET MVC w wersji RTM, dodatkowo został udostępniony ASP.NET AJAX 4.0 w wersji Preview 4 (o tym wkrótce); a do tego JetBrains dołożył betę ReShapera 4.5 :) Nic tylko brać tydzień urlopu i testować :)
Niedawno opisywałem swoje doświadczenia z ReSharperem 4.5 w wersji Nightly Build. Oprócz zmian, które zauważyłem w testowanej wcześniej wersji, w becie dodatkowo mamy analizę niewykorzystanych zmiennych w kodzie. Funkcjonalność ta była już dostępna w poprzednich wersjach ReSharpera, ale w wersji 4.5 funkcję rozszerzono m.in. o analizę pól/metod nieprywatnych.

Do ciekawych nowości zaliczyć też można funkcję “podpowiadania”, które zmienne mogą być oznaczone jako internal zamiast public (do tej pory ReSharper podpowiadał tylko możliwość zmiany na private) - niestety tego elementu nie zauważyłem podczas pierwszych testów.
Oba elementy wymagają włączenia analiz w całej solucji. U mnie wiązało się to ze zwiększeniem pamięci ReSharper o ok. 10/15%, da się więc z tym żyć - ReSharper 4.5 zużywa zdecydowanie mniej pamięci niż wersja 4.1.
Jednak najbardziej podobają mi się sugestie nazw zmiennych, zarówno podczas tworzenia nowych, jak i refactoringu istniejących. Trudno to opisać, ale zachęcam do przetestowania - naprawdę fajna rzecz :)
Wersję beta ReSharpera można pobrać ze strony http://www.jetbrains.com/resharper/beta.html. Tam również znajduje się bardziej dokładny opis nowości w wersji 4.5.
marca 18, 2009 ASP.NET MVC
Wczoraj została wydana końcowa wersja ASP.NET MVC 1.0 :)
Zwględem wersji RC2 jQuery został uaktualniony do wersji 1.3.2 (wcześniej załączona była wersja 1.3.1).
ASP.NET MVC 1.0 można pobrać ze stron Micorosft Download Center.
Dodatkowo na stronie www.asp.net/mvc znajdują się ciekawe tutoriale oraz filmiki prezentujące możliwości ASP.NET MVC.
marca 16, 2009 ASP.NET, ASP.NET AJAX
Stało się…
… po długej i ciężkiej walce :) ukończyłem dzisiaj studia oraz uzyskałem tytuł inżyniera.
Głównym elemetem mojej pracy było stworzenie projektu bazy danych aplikacji - “Rejestr faktur”. Projekt został wykonany w programie Sybase PowerDesigner 12.5. Bardzo sobie cenię wygodę pracy z tą aplikacją oraz możliwości, jakie ona dostarcza. Wkrótce postaram się zaprezentować możliwości PowerDesignera na spotkaniu Wrocławskiej Grupy .NET.
Do projektu został stworzony prototyp aplikacji webowej. Prototyp został wykonany w ASP.NET 2.0 z wykorzystaniem ASP.NET AJAX. Aplikacja posiada jedną stronę - pozostałe elementy (kontrolki użytkownika) ładowane są dynamicznie. Dodatkowo formularze dodawania i edycji danych zostały wykonane jako “warstwy div” - dzięki czemu aplikacja działaniem zbliża się do klasycznych aplikacji desktopowych. Niedługo trochę dokładniej opiszę ten projekt.
Teraz pora na MASTERA :)
marca 6, 2009 ASP.NET, Quick Tips
Przeglądając źródła różnych stron www (HTML) często można znaleźć taki kod:
<span class="bigHeader">Mój Nagłówek</span>
<span class="newsTitle">Mój News</span>
W ten sposób za pomocą CSS ustalamy wygląd nagłówków, tytułów artykłów, newsów, itp. Np. na codeguru.pl każdy news na stronie głównej wygląda tak:
<a class="bigWindowTitleLinked" title="tytuł" href='/url.aspx'>News</a>
Jednak pod względem optymalizacji SEO dużo lepszym rozwiązaniem jest stosowanie nagłówków <h1>, <h2>, <h3>, itd. W ten sposób określamy ważność tekstu na stronie (<h1> jest ważniejszy od <h2>). Dla podanych przykładów wyglądałoby to tak:
<h2>Mój Nagłówek</h2>
<h2>Mój News</h2>
Składnia prostsza, krótsza i lepiej interpretowana przez wyszukiwarki.
A dlaczego <h2> a nie <h1>? Wszystko zależy od tego, jak chcemy ustalić hierachię informacji na stronie. Jestem zwolennikiem stosowania nagłówka dla nazwy strony np.:
<h1>Mój portal</h1>
Zmiana class=”bigHeader” na nagłówki trudna nie jest :), a zyskujemy bardzo dużo na jakości kodu w “oczach” przeglądarek.
lutego 26, 2009 ASP.NET, Windows
problem testowania aplikacji internetowych znany jest każdemu, kto choć raz taką pisał :)
Głównym problemem jest fakt, iż każda przeglądarka na swój sposób interpretuje strony. Dlatego każdy (lub prawie każdy) instaluje na swoim komputerze wszystkie możliwe przeglądarki, aby móc przetestować poprawność działania swojej aplikacji. Jednak nadal mamy problem z przeglądarkami IE, których poszczególne wersje ciężko zainstalować na jednym komputerze.
Z pomocą przychodzi Xenocode Browser Sandbox. Xenocode dostarcza nam wirtualne środowisko umożliwiające uruchamianie różnych aplikacji. Aktualnie udostępnione są “obrazy”: Microsoft Internet Explorer 8, 7, 6, Mozilla Firefox, Apple Safari, Opera oraz Google Chrome - czyli wszystkie najpopularniejsze przeglądarki dostępne pod windows.

Wykorzystanie jest niezwykle proste - pobieramy plik exe i go odpalamy :) Nic się nie istaluje, nie miesza w systemie i mamy w pełni funkcjonalą przeglądarkę :)
lutego 23, 2009 ReSharper
UPDATE: ReSharper 4.5 Beta
Dzisiaj rano postanowiłem potestować nowego ReSharpera 4.5 - aktualnie dostępnego tylko jako Nightly Build. Zainstalowałem więc wersję 4.5.1180.25 z 17 lutego 2009 jako najnowszą na dzisiaj.
Instalacja przebiegła bez problemu i o połowę krócej niż miało to miejsce w przypadku wesji 4.1 :)

Zgodnie z zapowiedziami nowa wersja ma dostarczyć m. in.:
- ulepszone analizy kodu (Solution-Wide Analysis)
- lepsze wsparcie dla VB.NET
- wsparcie dla MSTest
- nowe metody refaktoryzacji
- nowa wersja ma być szybsza :)
A oto moje spostrzeżenia:
- pierwsze co rzuca się w oczy to pamięć. W jednym z projektów R# w wersji 4.1 pobiera ok. 230-300MB. Nowa wersja w tym samym projekcie potrzebuje ok. 120-170MB, czyli różnica jest spora.
- działa zdecydowanie szybciej - ogólnie jeśli chodzi o pracę z VS, uruchamianie VS jaki i funkcje R#, np. “Find Usages”. Różnica jest naprawdę widoczna.
- intellisense dla Global Resources. W wersji 4.1 wpis:
<%$ Resources:MyGlobalResource, MyGlobalKey%>
otrzymywał czerwony szlaczek i komunikat: MyGlobalResource nie został znaleziony :( Teraz zarówno lista GlobalResources, jak i lista dostępnych kluczy dostępna jest w intellisense :)

- wsparcie dla MSTest
- informajce o aktualizacjach dla ReSharpera oraz wtyczek
Niestety póki co nie znalazłem nowych metod refaktoryzacji i nowych analiz kodu - jeszcze nie znalazłem lub dostarczone będą później.
Wersja finalna planowana jest na pierwszy kwartał 2009. Jest więc szansa, że ukaże się już niedługo. Bezpłatnej aktualizacji będzie mógł dokonać każdy, kto posiada licencję na wersję 4.0 lub 4.1.
I na koniec mała uwaga: nie polecam zaznaczania opcji “Analyze errors in whole solution”. U mnie zakończyło się to padem R# :)
lutego 17, 2009 ASP.NET
Korzystając z różnych portali w sieci staramy się być jednoznacznie identyfikowani - stosując ten sam nick, czy dodając awatara. Jednak posiadanie kont na wielu portalach znacznie utrudnia zarządzanie nimi (np. gdy postanowimy nasze zdjęcie uaktualnić lub usunąć).
Z pomocą przychodzi Gravatar (globally recognized avatar). Jest to taka globalna przechowalnia awatarów. System ten kojarzy awatary z adresami e-mail. Tak więc zakładając konto na jakimś portalu i podając naszego maila, portal ten może pobrać naszego gravatara. Jeżeli postanowimy uaktualnić zdjęcie - robimy to tylko w jednym miejscu.
Dodanie gravatara do naszej strony jest niezwykle proste i polega na stworzeniu odpowiedniego urla , który podajemy jako źródło dla obrazka.
Każdy url zaczyna się od adresu
> http://www.gravatar.com/avatar/
Następnie dodajemy adres e-mail shashowany algorytmem MD5
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802
Dodatkowo możemy podać kilka opcjonalnych parametrów:
s - rozmiar awatara w pikselach
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?s=80
r - “kategorię” awatara - pozwala na filtrowanie zawartości awatara
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?r=g
d - domyśne zdjęcie - wysyłane jeżeli dla danego adresu e-mail nie ma zarejestrowanego gravatara. Jako domyślne zdjęcie podajemy url konkretnego zdjęcia lub podajemy typ automatycznie wygenerowanego zdjęcia. Do wyboru mamy identicon, monsterid oraz wavatar.
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?d=http%3A%2F%2Fexample.com%2Fimages%2Fexample.jpg
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?d=identicon
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?d=monsterid
> http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?d=wavatar
Dodając naszego gravatara ustawiamy jego kategorię (oznaczoną literą). I tak:
- G - może być wyświetlany na wszystkich stronach
- PG - może zawierać nieprzyjemne treści
- R - treści nieerotyczne, ale nie dla dzieci
- X - dostępny na stronach z treścią erotyczną
A oto jak można wygenerować gravatara w C#:
protected string GetGravatarUrl(string email) {
var hash = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(email, "MD5");
var gravatarUrl = new StringBuilder();
gravatarUrl.Append("http://www.gravatar.com/avatar/");
gravatarUrl.Append(hash.ToLowerInvariant());
gravatarUrl.Append("?s=60");
gravatarUrl.Append("&r=g");
gravatarUrl.Append("&d=mavatar");
return gravatarUrl.ToString();
}
Z metody korzystamy w następujący sposób:
<asp:DataList ID="dlUserList" runat="server">
<ItemTemplate>
<img alt='<%# Eval("UserName") %>' src="<%# GetGravatarUrl(Eval("EmailAddress")) %>" />
</ItemTemplate>
</asp:DataList>
Można też skorzystać z gotowej kontrolki. Można ją pobrać pod adresem: http://www.freshclickmedia.com/wp-content/uploads/2008/02/gravatar.zip
Opis implementacji kontrolki: http://www.freshclickmedia.com/blog/2008/02/gravatar-aspnet-control/