You are browsing the archive for Visual Studio 2012.

Azure ja käyttäjätilit ohjelmoijan kannalta

5.6.2014 in Azure, Infra, Pilvipalvelut, Sovelluskehitys, Visual Studio 2012 by Heikki Raatikainen

Kirjautumista vaativia internet- ja extranet-sovelluksia on kaikilla käytössä, mutta kuka muistaa kaikkien eri sovellusten salasanat (tietenkin kaikissa sovelluksissa on eri salasana!)? Single Sign-On alkaa olla oikeasti mahdollista erilaisten pilvipalveluiden avulla ja varsinkin jos yrityksen infraosasto on ajan tasalla.

Read the rest of this entry →

Sertifiointitestit ja MVC

31.10.2013 in Azure, HTML5, Sovelluskehitys, Visual Studio 2012 by Heikki Raatikainen

Viime viikolla lopulta saapui jo kuukausi sitten tilattu kirja: Exam Ref 70-486: Developing ASP.NET MVC 4 Web Applications joka on testiin valmistava kirja. Siispä heti kirjan selailun jälkeen testiä suorittamaan. Kirjaa lukiessa alkoi tuntua siltä että jotain on muuttunut. Tähän saakka testiin valmistavan MOC-kurssin materiaalin sisältö on vastannut MS-Pressin kirjan sisältöä. Tällä kertaa ei kuitenkaan näin, kirjassa oli asiat esitetty aivan eri tavalla ja eri järjestyksessä kuin koulutusmateriaalissa.

Myös testi oli muuttunut rakenteellisesti ja sisällöllisesti siitä mitä testit ovat olleet viimeiset kaksikymmentä vuotta sovelluskehityspuolella. Perinteisiä ’valitse oikeat’ -kysymyksiä oli 25 kappaletta ja lisäksi kolme uutta kysymystä joissa oli kussakin 6-10 erillistä kysymystä. Nämä olivat skenario.tyyppisiä eli tilanne- ja tavoitekuvaus ja niiden perusteella piti vastata kysymyksiin. Tilanne/tavoitekuvaus muodostui osista: Background, Business Requirements, Technical Requirements ja Application Structure. Kysymyksiin (oikein) vastaaminen vaatii näiden osioiden tarkkaan lukemista. Sinällään kysymystyyppi on hyvä koska se on lähempänä arkipäivää, vaatimuksia sovellusessa jotka pitää pystyä jotenkin ratkaisemaan.

Kysymyksissä tuli melko korostetusti HTML5/CSS3 -asioita, mobiilitoimivuus eli miten saadaan sovellus toimimaan hyvin erilaisilla päätelaitteilla. Security-asiat ja sovelluksen debuggaus ovat painotettuna verrattuna aikaisempiin web-puolen testeihin, yksikkötestaukseen liittyviä kysymyksiä myös. Yllättäen pilvi on mukana, Azure pitää osata ja ymmärtää jos aikoo päästä testistä läpi. Tietokantakäsittely taas oli varsin vähän esillä.

70-486 on vaativa testi jonka suoritukseen ei enää riitä että lukee yhden valmistavan kirjan, käytännössä pitää olla jonkintasoinen ohjelmointirutiini MVC:llä ja taas se Azure. Jotenkin Azure-asiat pitää opiskella, vaikka tulemalla kurssille. Muutama vinkki vielä mitä kannattaa hallita jos ja kun olet menossa testiä suorittamaan: lokalisointi, pakkaus, validointitavat, ModelBinding, yksikkötestaus ja filtterit.

Ja kyllä, sain testin ekalla kerralla läpi vaikka välillä testin pieni epävarmuus läpipääsystä kalvoi mieltä.

Rinnakkaisuus ja .NET

24.2.2013 in Sovelluskehitys, Visual Studio 2012 by Heikki Raatikainen

Rinnakkaisuus ja .NET

.NET on tarjonnut rinnakkaisuuden toteuttamiseen paljon palveluita jo heti ensimmäisestä versiosta lähtien. Thread-objektilla säikeiden hallinta on hyvin lähellä sekä Win32apin palveluita että Javan säiekäsittelyä. ThreadPool ja delegatin begin/endinvoke olivat ensimmäiset .NET spesifit tekniikat. .NET 2.0 toi mukanaan backgroundworker-olion joka yksinkertaisti joiltakin osin rinnakkaisuuden tekemistä, mutta ei tuonut mitään lisäominaisuuksia joita ei jo muutenkin pystynyt toteuttamaan.

Sitten ei tapahtunutkaan pitkään aikaan oikeastaan mitään rinnakkaisuuden osalta .NETssä ennen kuin vasta versiossa .NET 4.0. Tässä versiossa oli mukana uusia synkronointiluokkia sekä Task-luokka joka on keskeinen osa TPL-kirjastoa (Task Parallel Library). Task on enemmän looginen käsite kuin tekniikka, ohjelmoinnissa siirrytään tekemään loogisia toimintoja (Task) joita suoritetaan mahdollisuuksien mukaan rinnakkain. Perinteinen ’kuinka käynnistän säikeen’ -ajatusmalli jää vähemmälle merkitykselle. Task suorittaa jonkin metodin joten siinä suhteessa se ei poikkea paljoakaan säikeestä.

Olin aluksi sitä mieltä että Task ei tuo mitään lisäarvoa kun osaan toteuttaa rinnakkaisuutta perinteisillä tavoilla. Jouduin kuitenkin korjaamaan omia mielipiteitäni ja käsityksiä asiasta aika nopeasti. Task on erittäin merkittävä tapa tehdä rinnakkaisuutta. Jo senkin takia että .NET itsessään käyttää paljon Task-luokkaa ja toisekseen siksi että Task tarjoaa paljon palveluita joita ei enää tarvitse itse toteuttaa source-koodissa.

Otetaan tähän esimerkki WPF-sovelluksesta. Käyttöliittymää ei saa päivittää kuin se säie joka on instantioinut käyttöliittymäkomponentin. Jos siis taustalla tehdään laskentaa tai vaikka tietokantahakuja, ei kyseinen säie saa suoraan päivittää käyttöliittymää. Tähän löytyy  toki ratkaisumallit sekä WinForms- että WPF-kirjastoista mutta Task-käsitteen avulla päivityksestä saadaan vielä helpompaa. Seuraavan esimerkin WPF-sovelluksen painonapin click-käsittelijä luo Task-olion joka suorittaa pitkäkestoisen toiminnon slowFunc. Kun se on valmis niin jatketaan metodilla joka päivittää käyttöliittymää ja on toimiva koska Taskia ajetaan käyttöliittymän skedulerin kontekstissa. Ja tämä on vain yksi esimerkki miten Task yksinkertaistaa koodia.

private void B_Click(object sender, RoutedEventArgs e) {

button1.IsEnabled = false;

// haetaan UI-säikeen konteksti käyttöön:

var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();

var t = Task<int>.Factory.StartNew(() => slowFunc(1, 2));

t.ContinueWith(x => {

label1.Content = ”tulos: ” + t.Result.ToString();

button1.IsEnabled = true;

}, uiScheduler

);

}

.NET 4.5 lisäsi valikoimaan async/await varatut sanat joilla helpotetaan koodaajan arkea. Niiden avulla pystytään kirjoittamaan metodin koodi kuten se olisi synkroninen mutta todellisuudessa kääntäjä tuottaa koodia jolla metodi onkin asynkroninen. Seuraava esimerkki ei tapa käyttöliittymää vaikka metodin haeOtsikotAsync suoritus kestäisi pitkään.

private async void B_Click(object sender, RoutedEventArgs e){

Title = ”Haetaan uutisotsikoita…”;

Otsikot = new ObservableCollection<string>(await haeOtsikotAsync());

// B__Click:n kutsuja pääsee suoritukseen

    // è sanomajonosta käsitellään seuraavat sanomat

    // è käyttöliittymä pysyy toiminnassa

    // ja kun haeOtsikotUudellaTekniikkalla on valmis

    // koodin suoritus jatkuu tästä

Title = ”Löytyi ” + Otsikot.Count + ” kpl otsikoita”;

}

private Task<List<string>> haeOtsikotAsync() {

Task<List<string>> t = new Task<List<string>>(() => {

return uutisPalvelu.HaeOtsikot();

});

t.Start();

return t;

}

Rinnakkaisuutta tarvitaan siis tyypillisesti käyttöliittymällisissä Client-sovelluksissa. Mutta entäpä web-sovellukset? Aivan samasta syystä kuin client-sovelluksissa ei rinnakkaisuutta tehdä web-sovelluksen server-koodiin, selaimessa toimiva JavaScript on asia erikseen. Server-koodissa rinnakkaisuus ei lisää sovelluksen nopeutta yksittäisen käyttäjän kannalta mutta jos sovelluslogiikassa on paljon kohtia joissa odotetaan esimerkiksi IO:n päättymistä tai tietokantahakuja niin toteuttamalla palvelupyynnöt asynkronisesti saadaan maksimoitua sovelluksen ja palvelimen suorituskyky koko sovelluksen kannalta. Vähemmillä serverin resursseilla pystytään enemmän pyyntyjä selaimelta. Tästä aiheesta voisinkin kirjoittaa jatkossa toisen ja syvemmälle menevän blogi-artikkelin, aiheena voisi olla ASP.NET MVC:n asynkroniset kontrollerit ja actionit.

Pidän rinnakkaisuudesta luennon Microsoftin Techdays 2013 seminaarissa (5.-6.3.2013), jos sinulla sattuu olemaan jo lippu tähän loppuunmyytyyn tilaisuuteen niin kannattaa tulla kuuntelemaan luento.

TypeScript

2.10.2012 in Sovelluskehitys, Visual Studio 2012, Yleinen by ahti.haukilehto

Nyt on hiukan samanlainen fiilis kuin kesäkuussa 2000, kun luin ensimmäisen dokumentin C#:sta. Se oli vuotanut hieman ennen PDC 2000 – The Turning Point -seminaaria (vaikka se oli virheellisesti nimetty The Connection Point:ksi) – eli .NET:n ensijulkaisua. Muistan paikan ja tilanteen, kun sitä luin. Se oli entinen SKOPin koulutuskeskus Espoossa, luin dokumenttia tästä ”Microsoftin Java”:sta ennen kurssin alkua. Tuntui, että tämä on tärkeä. Anders Hejlsberg, mies Object Pascalin ja Visual Javan takana oli tehnyt uuden ohjelmointikielen. Se kolahti. Vielä muutama kuukausi, ja sain heittää siihen asti käyttämäni C:n, C++:n, Visual Basicin ja Javan menemään. Minusta tuli C#-mies.
Toinen muistettava Anders Hejlsberg-hetki oli vuonna 2007, kun hän esitteli RD:lle Data != Object -luennon, LINQ:n ensiesittely. Jälleen kolahti.
Ja nyt kolmannen kerran. Anders Hejlsbergin uusin innovaatio: TypeScript. Minulle ensimmäinen järkevä tapa kirjoittaa JavaScriptiä, tuota nykypäivän alustariippumattominta koodia. http://www.typescriptlang.org/.  Ohjelmointiympäristönä mm. Visual Studio.

Windows 8 Metro Style App, osa 2

16.4.2012 in Metro Style App, Sovelluskehitys, Visual Studio 2012, Windows 8 by ahti.haukilehto

Osa 2 – WCF-palvelun käyttäminen Metro-sovelluksessa

Tässä artikkelisarjassa tutustumme Windows 8 Metro Style App-ohjelmointiin.

Edellisessä osassa tutustuimme käyttöliittymän tekemiseen. Tässä osassa laajennamme sovellusta siten, että se käyttää paikallista WCF (Windows Communication Foundation) palvelua. Seuraavissa osissa palataan jälleen käyttöliittymän ohjelmointiin. Read the rest of this entry →