Tags: , | Categories: Przeglądarki Posted by karol.ch on 6/16/2009 9:56 AM | Comments (0)

Od jakiegoś czasu Opera sprytnie podgrzewa atmosfere na blogach i w reszcie świata promując swój nowy produkt: "Opera Unite". 

Po obejrzeniu bardzo fajnego filmiku na stronie głównej projektu, zabieram się do testowania :). Mam nadzieję, na coś wielkiego... Oby nie skończyło się jak zawsze kiedy marketingowcy opisują software...

Zanim jeszcze przyłożę palce do klawiatury, warto zauważyć, że nowa Opera 10 ma zawierać:

 

  • Media Player
  • Współdzielenie plików
  • "Fridge" - coś co ma pozwalać innym zostawiać notatki w moim PC (ciekawe...)
  • Web Server (!!!)
  • Photo Sharing
  • My Opera Unite page (nic nowego dla społeczności Opery)
  • The Lounge (czat hostowany na moim kompie)
 
We will see :).

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: nie technologiczne Posted by karol.ch on 6/12/2009 11:14 PM | Comments (0)

Dostałem właśnie taki e-mail:

 -------------------------------------------

Drogi Użytkowniku Google Analytics,

Ponieważ korzystasz juz z Google Analytics, może będziesz również zainteresowany naszym programem reklamowym Google AdWords. Dzięki Google AdWords możesz dotrzeć do określonej grupy docelowej ze swoją ofertą reklamową.

Aby zachęcić Cię do rozpoczęcia przygody z Google AdWords wysyłamy Ci kupon na kwotę 200 PLN do wykorzystania na Twoją pierwszą kampanię w Google. Kupon umożliwia Ci doładowanie konta i darmowe wypróbowanie skuteczności AdWords.

(...)

Twoj kod promocyjny to: ***

(...)

Zespół Google Analytics

------------------------

Pełen radości i zdumienia dla marketingowców z Google, przeczytalem jednak to co napisano małym druczkiem:

*Kod promocyjny może zostać użyty tylko na kontach AdWords w ciągu 14 dni od ich założenia. Kupon można wykorzystać na reklamy AdWords. Każdemu klientowi przysługuje jeden kod promocyjny. Klient musi pochodzić z Polski. W zależności od preferowanych opcji rozliczeń zostanie pobrana opłata aktywacyjna w wysokości 20 pln lub odpowiednio zostanie zmniejszona kwota kredytu. Pełne warunki wykorzystania kuponów promocyjnych znajdują się na stronie www.google.pl/intl/pl/adwords/coupons/terms.html

 

Nic dodać, nic ując :).

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Categories: Wydarzenia / Konferencje Posted by karol.ch on 6/8/2009 11:56 AM | Comments (0)

Na blogu Academic Flash wrzuciłem notkę o MTS 2009. Zapowiada się świetna impreza z wypasionym contentem!

Mam nadzieję, że będzie mi dane uczestniczyć :).

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Categories: Wydarzenia / Konferencje Posted by karol.ch on 5/14/2009 1:23 PM | Comments (0)

Trzeba przyznać, że warto było wczoraj wcześnie wstać, żeby jechać do IWP na polskie Finały Imagine Cup 2009. Do końca nie było wiadomo kto będzie zwycięzcą. Szczerze mówiąc byłem zaskoczony werdyktem. Między prezentacjami i ogłoszeniem wyników miałem okazję rozmawiać z zespołami. Upatrzyłem sobie faworyta... No cóż wyszło inaczej. Chociaż jest raczej jasne, że jury złożone z tak znamienitych osób (np. Tadeusz Golonka, którego osobiście bardzo lubię :) ) dokonało wyboru "najlepszego" zespołu.

"Najlepszego" w cudzysłowie, ponieważ wierzę, że Demoscene Spirit będzie miało największe szanse na zwycięstwo w finałach światowych w Egipcie. Swoją drogą, pisaliśmy o nich w Academic Flash, z Szymonem Majewskim przeprowadziliśmy nawet wywiad

Zgodnie z moją chęcią do nie powielania treści tworzonej przez innych zapraszam do przeczytania sprawozdania napisanego przez Rafała Czupryńskiego na CodeGuru.

Na blogu Academic Flash także pojawi się obszerna relacja opatrzona zdjęciami. Po ogłoszeniu wyników Daniel miał ich już ponad 300!

//update 18.05.2009:

Wpis na blogu Tadeusza Golonki.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Posted by karol.ch on 5/12/2009 11:54 AM | Comments (0)

Jest mi niezmiernie miło poinformować o wydarzeniu organizowanym przez redakcyjnego kolegę i członka polskiej społeczności IT, Daniela Plawgo. Notka prasowa poniżej:

Społeczność Olsztyn Microsoft User Group oraz koło naukowe „Grupa .NET Eastgroup.pl” przy Wydziale Matematyki i Informatyki w Olsztynie organizuje w dniach 21, 22 maja 2009 r. drugie spotkanie informatyczne grupy OLMUG oraz trzecią edycję konferencji IT Academic Day.

Nadchodzące wydarzenia skierowane są dla wszystkich specjalistów z branży IT zainteresowanych technologiami firmy Microsoft, chociaż entuzjaści innych technologii też znajdą coś dla siebie. Podczas spotkań poruszone zostaną tematy związane z budowaniem klientów z wykorzystaniem Windows Communication Foundation, budowaniem bogatych interfejsów użytkownika z .NET RIA Services i Silverlight 3.0 czy ASP.NET AJAX. Pokażemy także możliwości programowania robotów z wykorzystaniem Microsoft Robotics Studio a także historię powstawania słynnej już wstążki z Office 2007. Oczywiście to nie wszystkie atrakcje, które przygotowaliśmy.

Uważamy, że nasze wydarzenie to doskonała okazja do poznania prezentowanych technologii, rozmowy z specjalistami z branży IT.

Grupa .NET eastgroup.pl

Olsztyn Microsoft User Group

Informacje o wydarzeniu

 

Udział w poszczególnych wydarzeniach jest bezpłatny. Wymagana jest jednak rejestracja
na poszczególne spotkania osobno. Więcej informacji na temat sposobu rejestracji oraz dojazdu, można odnaleźć na stronach internetowych: http://www.olmug.pl oraz http://www.itad.pl.

 

Agenda

21 maja 2009 r.

Miejsce: Kawiarnia Literacka Centrum Książki, ul. Plac Jana Pawła II 2/3 w Olsztynie

Spotkanie będzie trwać od 18:30 do 21:00:

<!--18:30 – 18:40     Rozpoczęcie spotkania, oficjalne rozpoczęcie konferencji,

<!--18:40 – 19:40     Krzysztof Sopyła - WCF REST starter kit - konsolowy klient do Blipa i Twittera,

<!--19:40 – 19:50     Przerwa kawowa,

<!--19:50 – 20:50     Marcin Kruszyński - Szybkie tworzenie aplikacji biznesowych: .NET RIA
Services & Silverlight 3,

<!--20:50 – 21:00     Zakończenie spotkania, zebranie ankiet, losowanie nagród.

 

22 maja 2009 r.

Miejsce:  Sala 306 Biblioteki Głównej UWM w Olsztynie,  ul. Oczapowskiego 12b.

Konferencja trwać będzie od 12:30 do 17:45:

<!--12:30 - 13:00 Rejestracja ,

<!--13:00 - 13:15 Otwarcie konferencji,  

<!--13:15 - 14:30 Eugeniusz Licznarowski - Historia wstążki,

<!--14:30 - 14:45 Przerwa, 

<!--14:45 - 16:00 Grzegorz Rycaj – ASP.NET AJAX Tips & Tricks,

<!--16:00 - 16:15 Przerwa,  

<!--16:15 - 17:30 Marcin Iwanowski - Pasja programisty .NET z Microsoft Robotics Developer Studio 2008,

<!--17:30 - 17:45 Zakończenie konferencji.  

 

Organizatorzy

Organizatorami wydarzenia są społeczności Olsztyn Microsoft User Group oraz „Grupa .NET eastgroup.pl” przy Wydziale Matematyki i Informatyki UWM przy współpracy z firmą Microsoft.

Olsztyn Microsoft User Group to inicjatywa społeczności Olsztyńskiej, której celem jest zrzeszanie profesjonalistów zajmujących się technologiami Microsoft. Bazując na doświadczeniach podobnych grup działających na całym świecie pragniemy stworzyć i rozwijać Warmińsko-Mazurską społeczność specjalistów oraz umożliwić im wymianę doświadczeń z ekspertami z poszczególnych dziedzin. Więcej informacji można znaleźć na stronie społeczności: http://www.olmug.pl

„Grupa .NET eastgroup.pl” to grupa studentów Wydziału Matematyki i Informatyki Uniwersytetu Warmińsko-Mazurskiego w Olsztynie. Nasze różnorodne zainteresowania łączy jedno: chęć doskonalenia się oraz poznawania nowych technologii. Na naszych spotkaniach odkrywamy tajniki technologii firmy Microsoft. Wymieniamy się doświadczeniami i uwagami na temat technologii.NET, choć oczywiście poza programowaniem zajmujemy się także platformami serwerowymi. Więcej informacji na temat grupy można odnaleźć na witrynie: http://www.eastgroup.pl

 

 

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Categories: Wdrożenia, Aplikacje biznesowe Posted by karol.ch on 5/7/2009 1:12 PM | Comments (0)

 

 

Jakiś czas temu zakończyłem prace na Portalem Współpraca. Wyzwaniem było nie tylko techniczne stworzenie i wdrożenie Portalu, ale też uwzględnienie wielu merytorycznych sugestii z różnych stron. Miałem przyjemność współpracować z Działem Współpracy z Gospodarką.

Jak wiadomo uczelnia to m.in. wiele mieszających się poglądów i sugestii, które wyłoniły się w trakcie konsultacji. Jest mi miło, że mogłem wiele z nich uwzględnić. Oto niektóre z możliwości tego rozwiązania:

Cel główny (narzucony przez władze uczelni):

Stworzenie platformy służącej do "zacieśniania współpracy między nauką a przemysłem poprzez pozyskiwanie informacji koniecznych do ukierunkowania badań prowadzonych na Uczelni oraz promocję dorobku naukowego" oraz umożliwiającej komunikację i promowanie ekspertów z regionu.

Założenia:

  • Prosty, czytelny design
  • Wysoka dostępność na urządzeniach różnego rodzaju
  • Szerokie możliwości zarządzania treścią przez użytkowników i administratora
  • Wysoki poziom bezpieczeństwa
  • Tworzenie społeczności i prezentacja ekspertów z regionu
  • Budowa strony wspomagająca pozycjonowanie
Możliwości:
  • Zarządzanie ofertami
    • ścisłe poziomy dostępu
    • prezentacje graficzne
    • intuicyjny interfejs całości
  • Profile użytkowników
  • Platforma komunikacyjna dla zamieszczających i czytających oferty
  • Wielokryteriowe wyszukiwarki ofert i ekspertów
  • Możliwość zamieszczania i zarządzania ogłoszeniami przez wszystkich użytkowników
  • Podział treści na dziedziny i dyscypliny naukowe
  • Sondy

Technologie:

  • PHP 5
  • MySQL 5
  • HTML
  • JavaScript 

 

Cieszy także fakt, że będziemy wspólnie z wyżej wymienionymi rozwijać tę stronę przez kilka najbliższych miesięcy :).

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Posted by karol.ch on 4/24/2009 9:42 AM | Comments (0)

Wydaliśmy właśnie Academic Flash. Piękna majowa pogoda sprzyjała dobrej atmosferze, więc biuletyn został rozesłany już 30 kwietnia :). To wydanie jest nieco inne niż wcześniejsze :). Dlaczego? Odkryj sam...

Zapraszam na naszego redakcyjnego bloga:

http://af.studentlive.pl/post/2009/04/30/Academic-Flash-maj.aspx

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Categories: Wydarzenia / Konferencje Posted by karol.ch on 4/23/2009 12:56 PM | Comments (0)

Steve Ballmer przemawiał dziś w Sheraton Hotel, w Warszawie. Spotkanie go dla zaproszonych kolegów ze społeczności IT (CodeGuru, Grupy .Net, społeczności off-line) było za pewne prawdziwym zaszczytem :). Ja przynajmniej czułem się zaszczycony otrzymując zaproszenie :).

Steve zaczął w swoim stylu wchodząc z szalikiem, z napisem "Polska" i mówiąc jak to wspaniale jest u nas być.

Podobał mi się sposób w jaki odpowiadał na pytania ludzi z publiczności: nie bał się wymieniać nazw takich jak "Apple, Opera, Firefox" - ba zapytał nawet, kto z obecnych używa FF. 

Założe się, że dziś będzie można przeczytać o tym na bloga społeczności :).

Relację ze spotkania można było obejrzeć na Onet.tv.

Oficjalny news: http://www.microsoft.com/poland/centrumprasowe/prasa/07_04/05.mspx

Nie mam zamiaru przedrukowywać tego, o czym piszą inni, dlatego nie ma w tym wpisie relacji ze spotkania. Ale jest ona tutaj: :)

http://republika.onet.pl/37295,26,1,51,fabryka.html

Update:

Oficjalna relacja na WSS: http://wss.pl/Coulisse/10815.aspx

Jedno trzeba przyznać: Steve robi genijalne wrażenie! :)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: Tłumaczenia Posted by karol.ch on 4/1/2009 4:45 PM | Comments (0)

Ten słowniczek stworzyłem przy okazji tłumaczenia artykułu Tomasa Petricka (poprzedni wpis). Ameryki tu nie odkrywam, ale może komuś się przyda :).

 

Word

Explanation

Polish

explore to traverse or range over (a region, area, etc.) for the purpose of discovery; to look into closely; scrutinize; examine Odkrywać, poznawać.
evaluate to determine or set the value or amount of; to develop; Rozwijać, oceniać.
calculate to determine or ascertain by mathematical methods; to compute; Obliczać.
infinite unlimited or unmeasurable; nieskończony
sequence order of succession; a continuous or connected series; a set whose elements have an order similar to that of the positive integers; a map from the positive integers to a given set; Sekwencja, ciąg.
lazy slow-moving; sluggish; Leniwy, opóźniony.
interface a common boundary or interconnection between systems, equipment, concepts; interfejs
data structure Any method of organizing a collection of data to allow it to be manipulated effectively. It may include meta data to describe the properties of the structure. Struktura danych
complexity complex; intricacy; complication; skomplikowanie
enumerating To count off or name one by one; list; Enumerowanie, numerowanie kolejnych elementów po ich indeksach.
explicit fully and clearly expressed or demonstrated; leaving nothing merely implied; Wyraźny, niedwuznaczny.
perform to carry out; execute; do; Wykonywać, spełniać.
occurrence the action, fact or instance of occurring. Zdarzenie, wystąpienie.
transfer to convey or remove from one place, person, etc., to another przenieść
to point out To show exactly; to show how to think; uwypuklić
loop the reiteration of a set of instructions in a routine or program; pętla
integer A member of the set of positive whole numbers {1, 2, 3, . . . }, negative whole numbers {-1, -2, -3, . . . }, and zero {0}. liczby całkowite dodatnie, naturalne
overflow to pass from one place or part to another as if flowing from an overfull space Wypływ, nadmiar, przeładowanie.

 

Oczywiście, to nie ja jestem autorem 'Explanation'. Niestety nie pamiętam z jakich słowników pochdzą :/. Jeśli ktoś je wskaże, chętnie umieszczę :).

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , , | Categories: .Net Posted by karol.ch on 4/1/2009 3:30 PM | Comments (1)
Ten wpis jest tłumaczeniem części artykułu pt. "MVP-Submitted: Calculating with Infinite Sequences in C#" zamieszczonego na stronach Visual C# Developer Center. Powstało ono jako część zaliczenia jednego z przedmiotów na studiach. Początkowo nie miałem zamiaru upubliczniać tej pracy. Dlaczego? Ponieważ to tłumaczenie nie kładzie nacisku na ściśle techniczny język. Starałm się raczej uchwycić główną ideę przekazywanych myśli i pisać tak, aby zrozumiał laik :).

Zmotywował mnie jeden z kolegów, chociaż muszę przyznać, że nie bez znaczenia był też e-mail od Tomasa: "I'd definitely love to see a link to the translated article once it is published!".

Chętnie przetłumaczę koleją część - jeśli zaleje mnie fala e-maili mówiących o takiej potrzebie :). Jeśli chcesz umieścić tę treść na swojej stronie WWW, proszę najpierw o kontakt ze mną.

 Dodane przez MVP: Wykonywanie obliczeń z nieskończonymi sekwencjami w C#

 

Autor: Tomas Petricek.

Tłumaczenie: Karol Chęciński

 

Mój poprzedni artykuł traktował o opóźnionym wykonywaniu i skupiał się na tym jak się je symuluje w C#. Zaimplementowaliśmy klasę Lazy<T>, która reprezentuje wartość obliczaną na żądanie –oznacza to, że klasa „wie” jak obliczyć wartość wyrażenia, ale nie robi tego dopóki faktycznie nie jest ona potrzebna w programie. Bardzo interesującą strukturą danych, znaną z programowania funkcjonalnego, którą można zaimplementować używając tej opóźnionej komórki jest opóźniona lista. Każdy element tej listy zawiera wartość związaną numerem (na przykład liczbę) i wie jak przeliczyć następny element na liście, ale jest opóźniony co oznacza, że kolejny element nie zostanie obliczony, dopóki program nie odwoła się do jego wartości. Najbardziej interesującym aspektem opóźnionych list  jest to, że mogą by użyte do reprezentowania sekwencji nieskończonych – jest to możliwe ponieważ elementy są przeliczane tylko jeśli są potrzebne i dlatego lista zawsze będzie zawierać tylko skończoną liczbę elementów i ciągle będzie mogła przeliczać kolejne jeśli będzie to konieczne.

                 W tym artykule pokażę, że opóźnioną listę można zaimplementować używając typu IEnumerable<T>, a także zademonstruję jak operacje na zapytaniach LINQ mogą być użyte do manipulowania nieskończoną listą. Ostatecznie spojrzymy na implementacje sekwencji Mandelbrota (widać go na obrazku obok) używając technik opisanych w tym artykule.

 

Wprowadzenie do IEnumerable.

 

                Większość z Was najpewniej wie, że sekwencje w .NET można reprezentować używając interfejsu IEnumerable<T>. Można go użyć do enumerowania jednostek w standardowych kolekcjach takich jak tablice, listy, słowniki oraz w specjalnych kolekcjach. Tego interfejsu używa się często razem z pętlą foreach. Przejrzyjmy najpierw metody tego interfejsu. (Inne metody takie jak te dziedziczone po IDisposable nie są ważne dla naszego przykładu):

 

interface IEnumerable<T> : IDisposable<T>
{
  public void Reset();
  public bool MoveNext();
  public T Current { get; }
  // ... other methods omitted ...
}

 

                Enumerowanie w strukturze danych robi się używając trzech metod pokazanych w poprzednim przykładzie kodu. Najpierw wywoływana jest metoda Reset aby przesunąć wskaźnik enumeratora przed pierwszy element. Potem metoda MoveNext przesuwa enumerator do następnego elementu w sekwencji albo zwraca fałsz jeśli nie ma więcej elementów. Podczas enumeracji można dostać się do wybranego elementu używając właściwości Current.

 

class MyList {
  int[] elements;
  IEnumerabl<int> GetEnumerable() {
    for(int i=0; i<elements.Length; i++)
      yield return elements[i];
  }
}


                Przed wersją 2.0 C#, trzeba było zaimplementować ten interfejs gdy chciało się pozwolić na enumerację własnej kolekcji danych. To wprowadzało niepotrzebne skomplikowanie, więc w C# 2.0 wprowadzono zwracanie wartości yield. Używając tego słowa kluczowego, implementacja własnego numeratora jest tak łatwa jak iterowanie po wszystkich elementach w pętli. Spójrzmy bardzo prosty przykład:

 

var en = myList.GetEnumerable(); 

 

                Ta klasa pokazuje jak metoda która zwraca implementację IEnumerable<T> może być używana do enumerowania wszystkich elementów w tablicy. Ciało tej metody nie zwraca bezpośredniej implementacji interfejsu - zamiast tego używa zwracania yield, które jest kompilowane do implementacji interfejsu przez kompilator C#. Zrozumienie czym jest ten kod jest łatwe (po prostu iteruje po wszystkich elementach i zwraca każdy element oddzielnie z tablicy używając yield), ale wyjaśnienie jak ten kod jest używany do implementacji interfejsu IEnumerable<T> wymagałoby kolejnego artykułu. Ważną rzeczą do zrozumienia jest to co się dzieje podczas wywoływania metody zaimplementowanej przy pomocy zwracania yield jak w przykładzie poniżej:

                Kiedy wykonuje się to wywołanie, obiekt generowany przez kompilator jest tworzony, ale ani jedna linia (z napisanego przez ciebie kodu) nie jest realizowana! Realizacja kodu zaczyna się po użyciu metody MoveNext. Wchodzi ona do pierwszego wystąpienia zwracania yield a następnie „porzuca” metodę, a kontrola jest przekazywana z powrotem do metody wzywającej metodę MoveNext. Oczywiście nie jest możliwe wyjście z realizowanej metody i ponowne „wskoczenie” (utrzymywanie oryginalnych stanów zmiennych w metodzie), więc kompilator musi przetłumaczyć kod w metodzie na klasę, podnieść rangę zmiennych i skonwertować na właściwości klasy oraz wygenerować kod implementujący przejście między każdym użyciem zwracania yield. Kompilator C# tłumaczy kod metody na stan maszynowy gdzie każde użycie zwracania yield odpowiada pojedynczemu stanowi.

Nieskończone sekwencje i operacje na zapytaniach LINQ


                Najważniejszą rzeczą jaką chciałem uwypuklić w poprzedniej części jest to, że całe ciało metody nie jest realizowane dopóki nadrzędna metoda powtarzająco wykonująca MoveNext nie dojdzie do końca (i zwróci fałsz). To oznacza, że jeśli napiszemy kod, który wykonywał by się bez końca, ale zawrzemy wywołanie zwracania yield wewnątrz tego kodu, nie spowodujemy pętli nieskończonej. Spójrzmy na najprostszy z możliwych przykład:

 

IEnumerable<int> GetNumbers()
{
  int i = 0;
  while(true) yield return i++;
}

// Create an infinite sequence of integers
var nums = GetNumbers();


                Metoda GetNumbers w prezentowanym kodzie zwraca implementację IEnumerable<int>, która może być używana do przechodzenia w pętli po wszystkich typach liczbowych zaczynając od 0. Ponieważ typ liczbowy ma ograniczony zasięg, wartości zostaną przeładowane, a enumerowanie zacznie się znowu od Int32.MinValue.

                W powyższym przykładzie używamy tej metody do stworzenia zmiennej nums. Jej wywołanie zwyczajnie zwraca liczbę kiedy wykonujemy MoveNext – ani w środku, ani sama z siebie nie powoduje żadnych nieskończonych pętli. Jednakże ciągle trzeba być ostrożnym używając tego kodu. Podanie go jako argument do foreach spowoduje nieskończoną pętlę, ponieważ foreach będzie kontynuować wzywanie MoveNext dopóki ta metoda nie zwróci fałszu, co nigdy się nie stanie w przypadku sekwencji generowanej przez metodę GetNumbers!

 

var sq = GetNumbers().Where(n => n % 2 == 0).Select(n => n * n);


                Teraz spójrzmy na to, co się stanie gdy użyjemy zapytania LINQ operującego na nieskończonej sekwencji, którą właśnie zdeklarowaliśmy. W poniższym przykładzie używamy metody Where rozszerzenia, żeby odfiltrować tylko równe liczby i metody Select rozszerzenia żeby obliczyć kwadrat odfiltrowanej (równej) liczby:

 

var sq = from n in GetNumbers() where n % 2 == 0 select n * n;


Możemy użyć zrozumiałego zapytania z C# 3.0, żeby napisać semantycznie taki sam kod:

                Czy to spowoduje nieskończoną pętlę? Nie, ponieważ ciągle pracujemy z opóźnionymi wykonaniami sekwencji reprezentowanych przez IEnumerable<int>. Wywołanie operatora Where zapytania zwraca nową sekwencje z metodą MoveNext, z tym, że ta, wywoływana, iteruje po danej sekwencji dopóki nie znajdzie równej liczby. Podobnie, pojedynczy krok w sekwencji zwracany przez operator Select polega tylko na przeliczeniu kwadratu wziętego elementu. Jedynym pozostającym problem jest to, że musimy być ostrożni podczas wyświetlania sekwencji, ponieważ nie możemy po prostu użyć foreach. Na szczęście LINQ dostarcza operator zapytania Take, który zwraca sekwencję zawierająca pierwszych X elementów, więc można napisać taki kod:

 

foreach(int n in sq.Take(10))
  Console.WriteLine(n);

            

                Widać wyraźnie, że Where i Select to nie wszystkie operatory zapytania, których można używać z nieskończonymi sekwencjami, ale trzeba być ostrożnym: na przykład Aggregate, Reverse albo inne operatory łączące muszą iterować po wszystkich elementach, co nie jest możliwe pracując z sekwencjami nieskończonymi. Ostatecznie, można implementować własne iteratory do wykonywania operacji, które nie są dostępne w standardowych operacjach zapytań LINQ – po więcej informacji można zajrzeć do artykułu „Własne interatory” Billa Wagnera w Centrum Programistów C#.

[Koniec tłumaczenia części pierwszej :). Są chętni na drugą?]

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5