środa, 22 grudnia 2010

Visual Studio 2010 na sterydach

Jestem wariatem jeżeli chodzi o dodatki do Visual Studio. Mogę powiedzieć o każdym z nich do czego służy i dlaczego nie powinno się go stosować.
Chciałbym przedstawić My Top 5 Most Have Free Visual Studio Addins.

1) Pierwszy dodatek to Productivity Power Tools.
Moje ulubione featury to Solution Navigator oraz podświetlanie wybranej linijki kodu (proste a cieszy).


Więcej o dodatku można przeczytać tutaj oraz tutaj.

2) Kod na scrollu
Przypuszczam, że pomysł na taki dodatek powstał dzięki dodatkowi RockScrollowi lub jego kopii . Ja teraz stosuję Code Map, a ciekawą przejrzystość ma AllMargins.

Jak widać na Code Map masz wyszukiwarkę pól oraz informację jakiego typu jest dany element. Oprócz tego możemy zaznaczyć na dany kolor kod elementu.


3) Podświetlacze słów.
Czy kiedykolwiek wodziłeś oczami po całym ekranie i nie mogłeś znaleźć jakiegoś tekstu albo zmiennej. Z pomocą przychodzi ci Highlighter. Podkreśla dany wyraz na kolor dobrze widoczny dla oka.

Spójrz na kod. Powiedz mi ile razy jest wykorzystane słowo TestClass??






A teraz:


4) PowerCommands
Czym byłby Visual Studio, gdyby brakowało takich opcji jakie są w PowerCommands. Odpowiedz brzmi: wersją ULTIMATE, PREMIUM lub PROFESSIONAL:) Gdyby nie ten dodatek to za każdym razem, kiedy chciałem skopiować plik bym musiał klikać setki katalogów :) już nie wspominając o cmd. Dlaczego standardowo tych opcji nie ma w VS??

5) Dziel obszar na regiony
Przejrzystość kodu to podstawa, aby szybko znaleźć interesujący cię kod. Mistrzem w układaniu kodu jest Regionerate.
Regionerate pozwała na dodawanie regionów, tak aby kod był poukładanych i czytelny. Podział na regiony jest m.in. ze względu na metody, pola, klasy, zdarzenia, stałe, statyczne, konstruktor, dostęp, atrybut oraz ich nazwę. Dodatkowo można dodać komentarz lub liczbę tych elementów.
Możesz wprowadzić swój własny sposób tworzenia regionów.

Razem z GhostDociem tworzą niezły duet.

Nie powiedziałem o jednym z dodatków do VS, który jest moim ulubionym dodatkiem, a mianowicie resharper. Ale ten deserek zostawię na później na całkiem nowy wpis :)

środa, 1 grudnia 2010

Mój Pulpit

Czy kiedykolwiek miałeś tak dużo plików na pulpicie, że nie mogłeś znaleźć najważniejszych rzeczy? Ciężko było stwierdzić, jakie pliki są ważne, a jakie są do usunięcia?
Na początku tworzyłem katalog o nazwie shit i w nim trzymałem wszystkie rzecz.
Później tworzyłem w tym katalogu kolejny katalog o takiej samej nazwie.
Aż nie mogłem tym wszystkim zarządzać. Czy nie miałeś takiego przypadku??

Jeśli tak to z pomocą przyjdzie ci metodyka DTAS. O co chodzi??
Na pulpicie tworzysz 4 katalogi o nazwie:
- 1.DO
- 2.TODO
- 3.Archive
- 4.Shortcut

To wygląda mniej więcej tak:



W pierwszym katalogu są rzeczy, jakie mamy teraz zrobić, w tym momencie.

W drugim - rzeczy, które robimy w wolnych chwilach. Tych elementów nie robimy do póki nie skończymy spraw z pierwszego katalogu

W katalogu Archive przetrzymujemy rzeczy, które już są zrobione a w dłuższym czasie (np. za miesiąc) nie przydadzą nam się i będzie można je usunąć.

Ostatni katalog przechowuje skróty.

Metodyka jest bardzo prosta, a pozwala na przejrzyste i efektywne utrzymywanie całego pulpitu.



P.S. Wcześniej korzystałem z 5tym katalogiem Delete, gdzie miałem pliki do usunięcia pod koniec dnia. Ale okazało się, że w ogóle nie usuwałem ich :) Dobrze jest trzymać jak najmniej elementów w katalogu DO i Archive.

wtorek, 23 listopada 2010

matematyka != obliczenia

Widziałem video Conrad Wolfram o aspektach nauczaniu matematyki. Wolfram mówi o tym, aby obliczenia, symulacje, wyniskowanie oraz nauczaniem było zadaniem komputerów, a nie ludzi. Ludzie są od utworzenia zadania oraz ustaleniem problemu. Conrad Wolfram jest jednym z twórców świetnej wyszukiwarki . Więcej o projekcie Wolfram Alpha można znaleźć w drugim filmiku.





piątek, 22 października 2010

Send Later

Czy kiedykolwiek chciałeś wysłać maila z życzeniami do znajomej osoby parę dni przed uroczystością. Albo chciałeś, aby dana wiadomość sama przypomniała się po miesiącu. Mi z pomocą przyszedł dodatek do GMAILa.
Aplikacja nazywa się Boomerang for Gmail i można znaleźć tutaj lub na nowej stronie.


Po prostu podłącz i używaj :)

Więcej można przeczytać na darmowych orzeszkach.

P.S.
Minusem boomerang jak na razie jest wymóg zmiany języka używanego w gmail na język angielski - szkoda.

czwartek, 23 września 2010

AroLibraries

Pisząc kod bardzo często powtarzam tą samą sentencje kodu.
Wraz w c#3.0 pojawiły się extension methods, które ukrywają kod.
Standardowy przykład to zastosowanie konwersji z typu string na int.

string valueString="1";
int valueInt;
int.TryParse(valueString, out valueInt); // valueInt == 1


to zapisujemy w postaci:
string valueString="1";
valueString.ToInt(); // == 1

Kiedy nie podoba mi się zapis:
if(boolVariable == flase )

((details["Node"] as TreeNode).Parent as TreeNodeExt).Name

Przerabiam na bardziej czytelny:
if(boolVariable.IsFalse())

details["Node"] .As<TreeNode>()
.Parent .As<TreeNodeExt>() .Name

Ale to kwestia gustu :)

Extension methods mają duże zastosowanie w LINQ to Object
NP:
Aby mieć informacje o wszystkich plikach na dysku o podanym rozszerzeniu należy napisać troszkę kodu:

static void Main(string[] args)
{
string path = @"D:\";
DirectoryInfo dr = new DirectoryInfo(path);
FileCollection = new List<FileInfo>();
FillFilesInDirectories(dr);
}

private static List<FileInfo> FileCollection = null;
private static void FillFilesInDirectories(DirectoryInfo dir)
{
var dirs = dir.GetDirectories();
foreach (var vDir in dirs)
{
FileCollection.AddRange(vDir.GetFiles());
FillFilesInDirectories(vDir);
}
}



Lub za pomocą LINQ:

static void Main(string[] args)
{
string path = @"D:\";
var FileCollection = new DirectoryInfo(path)
.GetDirectories()
.SelectRecursive(x => x.GetDirectories()) //Rekurencja
.SelectMany(x => x.GetFiles()); //Pobieramy Pliki
}


Od razu widać, że kod w LINQu jest bardziej czytelny.

Projekt rozszerzający możliwości Extension Methods można pobrać ze strony AroLibraries

Przenośny pendrivik

Ile to razy potrzebowałeś pendriva, żeby coś skopiować od kolegi??
A jak byłeś w podróży, to ile razy żałowałeś, że czegoś nie wziąłeś??
Korzystasz z wielu komputerów, gdzie pracujesz na tych samych plikach??
Na pomoc przychodzi Ci dropbox.
Dropbox jest do synchronizacji plików, gdzie możesz przetrzymywać dane.
Obecnie kożystam z plików, które mam na 2 komputerach oddalonych od siebie o 100km. Do tego dziele pliki z bratem (wielki miłośnik MacOSa). A zawsze mogę mieć wgląd w pliki dzięki aplikacjom mobilnym.
Wystarczy obejrzeć filmik i spróbować.

What is Dropbox?

poniedziałek, 18 stycznia 2010

C# Wishlist

Widać jak szalony naukowiec Hejlsberg tworzy wieloparadygmatowe dzieło :) Z zwyczajnego programowania obiektowego zostało stworzone monstrum :))
Skoro każdy ma swoje życzenie do języka programowania, to ja też mam swoją wish-liste do C#5.0.

Zgodnie z PDC09 meta-programming - compiler as a service, XML Literals (od VB) i Extension propertis and constructor (podobno wiedzą jak to zrobić, ale nie wiedzą jak to dobrze zrobić) oraz Immutable objects

Moja listę featuresów to:
1) Typ atom
Ma taką wartość jaką ma nazwę.

2) Opcjonalność pogrupowania metod, które są ExtensionMethods
NP:
string str = "Jakiś Super Głupi Tekst";
var result = str.Where(x => Char.IsUpper(x)).ToList();
var result2= str.EM.Where(x => Char.IsUpper(x)).ToList(); // W obszarze EM są zawarte wszystkie ExtensionMethods

Obiekt EM to MethodGrouper z listą metod, które wcześniej zdefiniowaliśmy.

Kiedy napiszesz swoje metody dla string i jeszcze korzystasz z metod innej biblioteczki to nagle w intellisense nagle mamy kolekcje 200 metod. Grupowanie nie musi być na poziomie codu, ale VS lub R# mogłoby udostępnić tą opcje na poziomie edytora.

3) Static ExtensionMethods
ExtensionMethods mają wiele zalet:
-przejście ze metody statycznej do metody obiektu
-nie czytamy kodu od środka
-operujemy na typie, a nie na modelu
-działa na obiektach dziedziczonych
Ale miło by było mieć rozszerzenie metod statycznych
NP:
DateTime dt;
DateTime.TryParse(new List{"14","03","2010"},out dt);
czy
int.IsEvenNumber(2);


4) Static Interface
Za każdym razem kiedy piszę klasę generyczną dla struktur takich jak int czy float, chciałbym wywołać metodę Equals, TryParse czy pobrać wartość MaxValue;

5) Interface Agregator
Pewne różne obiekty, które nie są dziedziczone, maja metodę o takiej samej nazwie, parametrach i zwracanym typie.
Więc dlaczego te klasy nie dziedziczą po interfejsie? Z pomocą przyszedł by interfejs agregator który potrafi zgrupować klasy, które maja wspólne metody.

6) Konwersja dla operacji
Mają obiekt char currentChar chciałbym uzyskać następny znak. Aby są prostą operację wykonać należy napisać
(char)((int)currentChar + 1)

Ohyda. Zdecydowanie ładniej kod wygląda w taki sposób:
currentChar + 1

lub
currentChar.Oper(x=>x+1)

gdzie Oper jest metodą dla każdego obiektu.

7)Dokumentacja i tworzenie Tupli
Tuple jak i Typy Anonimowe maja swoje wady i zalety.
Tworząc obiekt
Tuple <int, float, string,List < int> > ifsl = new Tuple < int, float, string,List < int> >(1, 0.3F, "a",new List < int>{11,22}) ;

nie wiemy co oznaczy właściwość Item2 czy Item4. Nie mówię, że chce zmieniać nazwę właściwości, ale komentarz by się przydał z informacją co miał na myśli autor kodu.

Zamiast tworzenie takiego ciągu kodu dla
Tuple < int, float, string,List < int >> ifsl = new Tuple < int, float, string,List < int>>(1, 0.3F, "a",new List < int>{11,22});
var ifsl = new Tuple < int, float, string,List < int>>(1, 0.3F, "a",new List < int>{11,22});
var ifsl = new (1, 0.3F, "a",new List < int>{11,22}); //zapis skrócony


Uważam, iż struktura Tupli będzie coraz bardziej popularna i należy wykorzystać zapis skrócony.

8) Multiple Return Values
Już były próby wykonania metody która mogła by zwrócić kilka wartości z zastosowaniem dynamic i typu anonimowego.

public static dynamic GetPerson(Person p)
{
return new { lName = p.LastName, fName = p.FisrtName, age = p.Age }
}
dynamic d = GetPerson(p);
string lName = d.lName;
string fName = d.fName;
int age = d.age;


Ale poprzez dynamic traci się statyczną typizację, wymaga znajomości właściwości typu anonimowego oraz zapis jest w kilku linijkach.

A jak by wyglądało z zastosowaniem Multi Return Values
NP:
public static (string,string,int) GetPerson(Perons p)
{
return (p.LastName,p.FirstName, p.Age);
}

var lName=GetPerson(p);
var (lName,fName)=GetPerson(p);
var (lName,fName,age)=GetPerson(p);


lub
var [lName,fName,age]=GetPerson(p); //jak w Matlabie


Innym rozwiązaniem jest zastosowanie parametrów out z domyślnymi wartościami, ale dostajemy komunikat "A ref or out parameter cannot have a default value".
O co chodzi. W metodzie z parametrami out można zwrócić więcej wartości.
vodi GetPerson(Person p, out string oLastName, out string oFirstName, out int oAge);
{
oLastName=p.LastName;
oFirstName=p.FirstName;
oAge=p.Age;
}

string lastName;
string firstName;
int age;
GetPerson(p,out lastName, out firstName,out age);


A gdybyśmy zastosowali wartości domyślne. Kod byłby bardziej czytelny.
NP:

void GetPerson(Person p, out string oLastName=p.LastName, out string oFirstName=p.FirstName, out int oAge=p.Age){};


string lastName;
string firstName;
int age;
GetPerson(p);
GetPerson(p, out lastName,out firstname, out age);
GetPerson(p, out lastName);
GetPerson(p, out age);


Gdyby nie wishlisty programistów nie było by postępu języków programowania:)

Więcej info o c#5.0 można poczytać pod tym linkiem oraz inne wishlisty z codebetter i kodefu.