13 października 2011, 00:50
dario
Komentarze (0)
asp.net-mvc
tip
Definiując ścieżki w aplikacji ASP.NET MVC możemy zadać warunki (constraint) określające poprawność reguły dla parametru. Ja na przykład stosuję (między innymi) domyślnie constraint, który przepuszcza ścieżki pisane tylko małymi literami. Dzięki temu ustrzegam się przed zdublowanymi stronami indeksowanymi przez wyszukiwarki (wielkość liter ma znaczenie).
Niestety dla jednego parametru można zadać tylko jeden warunek naraz. A co jeśli chcemy dołożyć kolejny? Można sobie pomóc korzystając z jednego, który przyjmuje kolejne. Tak oto mamy MultiConstraint.
public class MultiConstraint : IRouteConstraint
{
private readonly IRouteConstraint[] _contraints;
public MultiConstraint(params IRouteConstraint[] contraints)
{
_contraints = contraints;
}
public bool Match(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
return _contraints.All(x => x.Match(
httpContext,
route,
parameterName,
values,
routeDirection));
}
}
Zasada działania jest prosta. W konstruktorze podajemy dowolną ilość constraintów. Jeśli wszystkie będą spełnione to całość także.
Prosty przykład wywołania dla parametru controller:
controller = new MultiConstraint(new LowercaseConstraint(), new SubdomainConstraint(portalDomain))
Taka mała rzecz, a cieszy, bo bardzo mi brakowało takiej możliwości.
19 sierpnia 2011, 22:29
dario
Komentarze (0)
wydajność
sprzęt
tip
hdd
Kilka dni temu pisałem, że podmieniłem dość szybki dysk Seagate 320GB 7200obr/min na SSD Vertex OCZ 2 120GB. Wyniki testu syntetycznego zwiastowały duuuże przyspieszenie.


Po kilku dniach pracy mogę śmiało polecić wszystkim przesiadkę na SSD. Komfort pracy zupełnie inny. Wszystko działa dużo szybciej. Kompilacja, publikowanie projektów pod VS2010 działa szubciutko. Samo studio dostało skrzydeł. Nie wspominam już o wszelkich pozostałych standardowych operacjach jakie wykonuje się podczas pracy z kompem. Otwieranie programów, nawet na zimnym starcie to jest ułamek sekundy.
Pisali ludzie, że niektóre Vertexy mają problemy i czasami zawieszają kompa. Mi takie coś się nie przytrafiło ani razu. System W7 64bit śmiga aż miło. Teraz w końcu mogę wyłączać komputer jak go nie używam dłuższy czas. Uruchomienie trwa kilka (dosłownie sekund) do stanu kiedy mogę włączać dowolne aplikacje. Wcześniej trwało to zbyt długo.
Na dysku SSD mam system, pliki projektów i reszta danych i programów, z których często korzystam w pracy (i nie tylko). Seagate wylądował w zewnętrznej obudowie i spięty po USB stanowi dodatkowy zbiornik na pozostałe, mniej używane dane.
Jeśli się zastanawiacie czy warto wydać te kilka stówek to powiadam Wam, że naprawdę warto :)
13 lipca 2011, 10:45
dario
Komentarze (2)
tip
box.net
Dziś założyłem sobie konto na Box.Net. Po ostatnich różnych wybojach z Dropboxem postanowiłem zmienić usługę właśnie na Boxa. Dodatkowo Box.Net daje 5GB miejsca na darmowym koncie.
Po zalogowaniu okazało się, że klient do synchronizacji danych pomiędzy komputerem a usługą jest dostępny tylko dla kont płatnych (bussiness). Na szczęście da się to sprytnie obejść korzystając z możłiwości mapowania dysków sieciowych w Windows. :)
Po pierwsze należy pobrać i zainstalować Software Update for Web Folders. Później pozostaje już tylko (prawie) standardowe mapowanie dysku sieciowego. Przy czym zamiast mapować dysk w sieci lokalnej należy wybrać opcję mapowania dysku w internecie, gdzie wpisujemy adres https://www.box.net/dav.
Po zaakceptowaniu logujemy się na swoje konto pamiętając, aby zaznaczyć opcję zapamiętania użytkownika i hasła.
Co z samą synchronizacją? Teraz możemy posłużyć się zwykłym Task Schedulerem. Tworzymy task, który w pewnych odstępach czasu będzie pchał wybrane dane "w chmurę".
Opis mapowania dysku znalazłem na Techie-Buzz.com. Wpis z 2006 roku. Aż dziw bieże, że do tej pory nie ma darmowego i ogólnie znanego klienta do synchronizacji dla tej usługi (albo ja przynajmniej jeszcze nie znalazłem). Na dodatek na samej stronie Box.Net można przeczytać, że klient na MAC'a będzie "niebawem". Wow... :)
Mimo wszystko kopiowanie na i z działa sprawnie i szybko (jak na moje łącze).
12 lipca 2011, 12:58
dario
Komentarze (0)
mscd
Dziś wgrałem na http://mscd.codeplex.com/ nowy release, który usuwa problem uciętych znaków z końca kontentu pakowanego GZipem. Poprawkę podrzucił Jarek Niemczyk, który po przebadaniu tematu stwierdził iż problematyczne było użycie Flush na steamie. Zamiana na Close rozwiązuje problem.
Jeśli ktoś używa to polecam pobranie najnowszej wersji Mscd.
003c6dc9-5790-41f6-909a-ee51e98d6e72|0|.0
Tagi: mscd
Projekty
11 lipca 2011, 10:54
dario
Komentarze (4)
asp.net-mvc
tip
Visual Studio
Kompilowanie widoków zaoszczędza dużo czasu na sprawdzanie poprawności działania aplikacji. Niestety sam proces kompilacji wydłuża się i to znacznie. Dlatego szukałem sposobu, aby można było kompilować wybiórczo: z widokami lub bez. Niestety nie ma prostego przełącznika w Studio ani wbudowanego skrótu klawiaturowego.
Na szczęście trafiłem przypadkiem na stary już post pewnego Marka J. Millera, gdzie zwyczajnie pokazuje jak uzależnić kompilację widoków od konfiguracji trybu kompilacji. Studio skompiluje widoki wtedy, gdy w treści pliku csproj w sekcji PropertyGroups będziemy posiadali wpis:
<MvcBuildViews>true</MvcBuildViews>
W pliku csproj standardowo są 3 sekcje PropertyGroups. Wystarczy z domyślnej sekcji PropertyGroups usunąć powyższy wpis i wstawić odpowiednio tak jak poniżej:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<MvcBuildViews>false</MvcBuildViews>
<...>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<MvcBuildViews>true</MvcBuildViews>
<...>
</PropertyGroup>
Należy pamiętać, aby po tym zabiegu usunąć katalogi bin i obj z projektu webowego.
Dzięki takim zmianom podczas kompilacji w trybie DEBUG widoki nie będą kompilowane i kompilacja będzie szybka (w sam raz do debugowania). W trybie RELEASE widoki natomiast skompilują się dzięki czemu łatwiej jest wyłapać błędy składniowe w tych plikach. Szczególnie przydatne podczas zmian w modelach widoków, a już szczególnie kiedy oddajemy kod do repozytorium :)