2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

wp 24h tartu 2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

526388 406539392691764 276774665668238 1652569 1614906683 n 300x198 2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

Kahel eelneval nädalavahetusel korraldasime koostöös Microsofti, MSP-de ja vingete sponsoritega Tallinnas ja Tartus kaks 24h koodilaagrit, mille eesmärgiks oli proovida ning valmis saada hulk Windows Phone mobiilirakendusi. Parimatele motivatsiooniks olid vahvad Nokia Lumia 800 telefonid ning muud auhinnad. Põhirõhk oli aga muidugi vahval seltskonnal ja mõnusal koodimisel :) .

 

Koodilaagris moodustati reedel kuni neljaliikmelised võistkonnad ning seejärel oli igal meeskonnal pühapäeva lõunani aega, et app valmis teha. Kahes toimunud laagris esitleti järgmisi rakendusi:

Tallinn

555233 406534806025556 276774665668238 1652452 1413370685 n 300x198 2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

  • Points of Interest (Tallinna vooru võitja)

Rakendus, mis näitab kaardil lähedal olevaid põnevaid huvipunkte ning lisab asjasse mängulisust edetabelite ja väljakutsetega. Kas võtaksid vastu väljakutse käia läbi kõigist Tallinna McDonaldsitest või kogu maailma Hard Rock Cafedest?

  • Dr. House

Rakendus meie sees pesitsevatele hüpohondrikele. Vali erinevate sümptomigruppide seast oma lemmikud ning saa teada, millised haigused sind tõenäoliselt vaevata võiksid.

  • Weaving

Ilus nuputamismäng, kus mängija eesmärgiks on keerduläinud niidirägastik lahti harutada.

  • tech events

Lihtne ja loogiline rakendus, mis kuvab vingeid tech sündmuseid, mis nii veebis kui mujal toimumas on.

  • Before & After

Rakendus, mis teeb “enne ja pärast” piltide tegemise lihtsaks. Tee pilt 1 ning “pärast” pildi tegemiseks kuvatakse Sulle kadreerimise abistamiseks ekraanile “enne” pilt.

  • Liikluse app

Tee pilti kaasliiklejast- on ta siis eriti osav parkija või on ehk juhtunud avarii. Näe kaardil, millised liiklejad on sinu lähedal ning enne auto ostmist vaata kindlasti apist järele, millised on varasemad kommentaarid sellele sõidukile.

  • MUG.ee

Mis on MUG.ee, mis üritused on neil lähiajal tulemas on ning mis on uudist.

  • Tallinna transport

Lihtne ja loogiline rakendus Tallinna sõiduplaanide järgimiseks. Vali oma lemmikliin ning bussiajad ilmuvad sinu silme ette.

  • Ajamõõtmise app

Vajalik kõigile, kes müüvad oma töötundi. Halda erinevaid projekte, nendes tegemist vajavaid tööülesandeid jne.

Tartu

2012 04 08 14.27.52 300x224 2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

  • Omnibuss (Tartu vooru võitja)

Rakendus oma linnasisese bussisõidu planeerimiseks. Näitab lähimaid bussipeatuseid kaardil, sõiduteekonda ning väljumisaegu.

  • Foultracker

Aitab tennisetreeneril jälgida mängija erinevat tüüpi vigade arvu ajas. Kui palju eksitakse esimesel, kui palju teisel servil jne.

  • Mine metsa

Kuhu minna, kui mõttes on miskit loodusega seotut. Rakendus kasutab RMK põhjatut andmebaasi ning annab infot parimate matkaradade ja muu loodusliku meelelahutuse osas.

  • Kalevipoeg

Eesti mütoloogial põhinev seiklusmäng, kus Kalevipoeg seikleb koos krattide, Vanapagana ja muude tegelastega.

  • nom-nom

Rakendus, mis pakub intelligentselt parima söögikoha, küsides täpsustavaid küsimusi (kellega, mis teemal, kus ja mis põhjusel lõunat soovitakse)

  • Minu Eesti

Rakendus hakkab sisaldama põhjalikku andmebaasi Eesti loodusest – loomad, linnud, taimed.

  • React

557305 407750599237310 276774665668238 1659097 1486226739 n 300x200 2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

Kaheinimese mäng, kus kogu iva peitub reageerimiskiiruses.

  • Eneta

Mis Enetas toimub?

  • Kuhu minna?

Võimalik on vaadata Eestis eesseisvaid sündmuseid ning infot nende kohta (Piletilevi põhjal).

  • Cinamoni pildiapp

Väga graafiline rakendus teadasaamaks, mis jookseb hetkel kinos on ning seejärel pileti ostmiseks.

  • Sõduri ABC

Kaitseväes tuleb selgeks õppida palju andmeid erinevate relvade, sõidukite jms. hulgas.

Tulemused

548746 406529466026090 276774665668238 1652341 717751733 n 300x198 2 x 24h Windows Phone koodilaagrit Tallinnas ja Tartus

Korraldustiim jäi üritusega igatahes rahule. Osalejad olid vahvad, energia oli võimas ning valmis sai suur hulk rakendusi, millest kindlasti paljud hakkavad Eesti Windows Phone kasutajate meeli rõõmustama

Kes on aga lõppvõitja, see selgub üsna pea.


Kümme vinget rakendust esimesest WP koodilaagrist

 Kümme vinget rakendust esimesest WP koodilaagrist

Sel nädalavahetusel korraldasime Microsoft Eesti ja MVP-dega Tallinna Polütehnikumis päris vinge koodilaagri. Meie mõte oli lihtne – tutvustada Windows Phone platvormi ning luua uusi ägedaid Eesti rakendusi. Kohal olid ka mentorid, kes nõu ja jõuga igal sammul aitasid. Pidasime maha 5 pikka loengut ning debugisime tuhandeid koodiridu.

392266 2693323377057 1375735066 3005730 769588926 n 300x200 Kümme vinget rakendust esimesest WP koodilaagrist  385352 2693421819518 1375735066 3005751 1076986540 n 300x200 Kümme vinget rakendust esimesest WP koodilaagrist

Kahe päeva koodimisega jõuab nähtavasti nii mõndagi – 8 meeskonda said valmis 10 vinget rakendust, millest nii mõnigi kuuldavasti juba lähipäevil Marketplaces saadaval on.

Võitjateks valisime mentoritega välja rakenduse Teele, mis hoiab silma peal sõidukiirusel, annab teada, mis on hetke piirkiirus ning kas läheduses on mõni kiiruskaamera. Rakendus ning meeskond paistsid silma põhjalikult läbimõeldud rakendusega ning kahtlemata kõige terviklikuma lahendusega. Auhinnaks oli kõigile meeksonnaliikmetele Visual Studio 2010 Ultimate litsents ning aastane MSDN premium litsents, mis annab ligipääsu kogu Microsofti tarkvarale!

309638 2693466820643 1375735066 3005763 294815463 n Kümme vinget rakendust esimesest WP koodilaagrist

Ilmselt võiks rakenduse Taxigirl kohta öelda publikulemmik. Taxigirl ehk eestipäraselt Kiisu aitab sul leida taksot, ilusas pakendis olemas kõik Tallinna taksod, nende kontaktid ning kilomeetrihinnad.

SplashScreenImage 180x300 Kümme vinget rakendust esimesest WP koodilaagrist

Parima ärimudeliga paistis silma kelmika nimega SMS(T)roller, kelle loodud rakenduse abil on võimalik saata mobiilset internetti kasutades SMS-e 10 x odavamalt, kui on ühe sõnumi keskmine hind Euroopas roaming piirkondades. SMSid pidavat olema nii odavad, et isegi tasub roamingus mobiilset internetti kasutada.

Kõikide projektide lühikirjeldused:

  1. Teele (Teeinfo) – Ega ma liiga kiiresti ei sõida? Millised on teeolud?
  2. Taxigirl – aitab leida taksot.
  3. SMS (T)roller – SMSid 10x odavamalt!
  4. PokerHelper – abimees pokkeriõhtuks (blindide haldus, mängijate haldus, buy-in jne.)
  5. MarkIT – mobiilne liides MarkIT veebipoele.
  6. Bussipiletid – kes jõuab mäletada ID pileti lühinumbreid ja koode? Bussipiletite rakendus teab ning teeb pileti ostmise lihtsaks.
  7. Bensiinijaamad – Paak tühjenemas? Keerata vasakule või paremale? See rakendus teab, kus on lähim ja odavaim kütus.
  8. Tööarvestus – Kõige vähem klikke, et arvestada oma aega. Parim töövahend tunniarvestusega töötajale.
  9. 15 puzzle – 15puzzlet teavad kõik, aga mis siis kui sa saad ise puzzle pildi valida ning tobeda sõrmega lohistamise asemel saad mängida seadet kallutades?
  10. ENETA sündmused – Kes meist ei oleks ENETA sündmusele minnes mõistatanud, mis kell ja mis ruumis see ikka täpselt oli. ENETA sündmuste rakenduses on viimane info sündmustest kuhu oled registreerunud.

Nädalavahetuse võib kahtlemata lugeda õnnestunuks, lõbu oli laialt, rakendusi valmis 10. Kindlasti korraldame sarnaseid üritusi veel, näiteks detsembri esimesel nädalavahetusel Riias!.

Aitäh kõigile, kes tulid ning ekstra tänud mentoritele :) .


DatePicker ja TimePicker ikoonide jama

Lisasin oma projekti DatePickeri ja oma kurvastuseks nägin, et Windows Phone 7 ei kuva AppBar ikoone DatePickeri sees. Kuvatakse nõmedaid riste Cancel ja Done nupu ikoonide asemel.

Dokumentatsioonist selgus, et nii see peabki olema. Mingitel põhjustel ei saa ikoone Toolkiti .dll-I sisse panna ja seega tuleb need ikoonid oma projekti ise lisada.

Ikoonid asuvad C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons kataloogis.

Enda projekti juurkataloogi tuleb luua kataloog nimega Toolkit.Content ning sinna lisada vajaminevad ikoonid ning panna nad Content tüüpi ressursiks.

Kusjuures C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons kataloogis olevad ikoonid on valede nimedega.

Minul toimis asi, kui ma panin ikoonidele sellised nimed:

ApplicationBar.Check.png

ApplicationBar.Cancel.png


WP7 TextBox caretIndex ehk sisestusmärgi asukoht

Teen praegu üht Windows Phone rakendust, kus valideerin kasutaja sisestatud teksti ja eemaldan teatud sümbolid, mis klaviatuurilt tulevad. (Lihtsam paar erindit eemaldada, kui päris enda klaviatuuri arendada)

Sellisel teksti muutmisel on aga tobe efekt, et kursor liigutatakse tekstikasti algusesse.

WP7 TextBoxil ei ole caretIndex atribuuti nagu Formsis või WPF-is aga sellest pole midagi, sest sama on tegelikult saavutatav Selektsiooniga.

myTextBox.Select(myTextBox.Text.Length, 0);

See liigutab kursori teksti lõppu ja selekteerib sealt 0 tähemärgi pikkuse sõne.


Reklaamide lisamine WP7 rakendustesse

Hetke seisuga Eestis Windows Phone 7 rakendusi osta ega müüa ei saa, mis tähendab, et ainsaks monetiseerimisvõimaluseks Eestis on reklaamid. Reklaamide näitamiseks kasutatakse Microsoft pubCenter reklaame.

Selleks, et oma rakendustesse reklaame lisada on vaja läbida järgnevad sammud:

Luua Microsoft pubCenter konto

image thumb Reklaamide lisamine WP7 rakendustesse 

Registreerida uus rakendus

image thumb1 Reklaamide lisamine WP7 rakendustesse

image thumb2 Reklaamide lisamine WP7 rakendustesse Lae alla Microsoft Advertising SDK for Windows Phone 7

using Microsoft.Advertising.Mobile.UI;

Järgmisena on vaja iga reklaamikoht seadistada – kui suur, milliseid reklaame näidatakse.

image thumb3 Reklaamide lisamine WP7 rakendustesse

Kui Finish vajutada, siis genereeritakse AdUnitId, mis tuleb AdControli atribuutiks seada.

Testimiseks, kas kõik korrektselt toimib saab kasutada selliseid sätteid:

image thumb4 Reklaamide lisamine WP7 rakendustesse

image thumb5 Reklaamide lisamine WP7 rakendustesse


WP7: Launcherid ehk käivitajad

Launchers (Käivitajad) on WP7 funktsionaalsus, mis võimaldab kasutajal väljaspool sinu rakendust mingi tegevus lõpetada ja siis sinu rakendusesse naasta. Näiteks: Saata e-mail, sms või helistada.

Oluline on see, et nii Launcheri kui Chooseri puhul läheb käivitanud rakendus Tombstoned staatusesse, seega tuleb vajalikud andmed pärast uuesti laadida.

Launchers

Namespace: Microsoft.Phone.Tasks

E-kirja saatmine

EmailComposeTask emailComposeTask = new EmailComposeTask();
emailComposeTask.To = "bill.gates@microsoft.com";
emailComposeTask.Body = "Windows Phone Rocks!!!"
emailComposeTask.Cc = "SteveBallmer@MSFT.com";
emailComposeTask.Subject = "Windows Phone";
emailComposeTask.Show();
Helistamine
 
PhoneCallTask phoneCallTask = new PhoneCallTask();
phoneCallTask.PhoneNumber = "180018001800";
phoneCallTask.DisplayName = "Steve Jobs";
phoneCallTask.Show();
SMSi saatmine
 
SmsComposeTask smsComposeTask = new SmsComposeTask();
smsComposeTask.To = "1800-180-1800";
smsComposeTask.Body = "Cool Phone!!";
msComposeTask.show();
 
Otsimine
 
SearchTask searchTask = new SearchTask();
searchTask.SearchQuery = "Windows Phone 7";
searchTask.Show();
 
Sisseehitatud meediapleieri käivitamine
 
MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher();
mediaPlayerLauncher.Media = new Uri("vs_logo2010_WMV9_640x360.wmv", UriKind.Relative);
mediaPlayerLauncher.Show();
 
Veebilehitseja käivitamine
 
WebBrowserTask webBrowserTask = new WebBrowserTask();
webBrowserTask.URL = "http://developer.windowsphone.com";
webBrowserTask.show();
 
Kaardi avamine kasutades kasutaja hetkekoordinaate.
 
BingMapsTask bingMapsTask = new BingMapsTask();
bingMapsTask.SearchTerm = "coffee";
bingMapsTask.ZoomLevel = 2;
 
Kindla rakenduse lehe avamine Marketplaces
 
MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
marketplaceDetailTask.ContentIdentifier = "<ID>";
marketplaceDetailTask.ContentType = MarketplaceContentType.Applications;
marketplaceDetailTask.Show();
 
Marketplace rakenduse avamine
 
MarketplaceHubTask marketplaceHubTask = new MarketplaceHubTask();
marketplaceHubTask.ContentType = MarketplaceContentType.Music;
marketplaceHubTask.Show();
 
Antud rakenduse review lehe avamine Marketplaces
 
MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask();
marketplaceReviewTask.Show();
 
Marketplace otsing tüübi järgi
 
MarketplaceSearchTask marketplaceSearchTask = new MarketplaceSearchTask();
marketplaceSearchTask.ContentType = MarketplaceContentType.Music;
marketplaceSearchTask.SearchTerms = "song title";
marketplaceSearchTask.Show();
 
 

Rohkem dokumentatsioonist: http://msdn.microsoft.com/en-us/library/ff769550%28v=vs.92%29.aspx


WP7 Choosers ehk valijad

Choosers (Valijad) on WP7 funktsionaalsus, mis võimaldab samamoodi kasutajal väljaspool sinu rakendust mingi tegevus lõpetada ja siis sinu rakendusesse naasta nii, et tegevuse tulemusel valitu antakse sinu rakendusele parameetrina. Näiteks: pildi tegemine või valimine albumist.

Choosers ja Launchers asuvad mõlemad Microsoft.Phone.Tasks nimeruumis. Mõlemi kasutamise puhul viiakse sinu rakendus taustale Tombstoned seisu, ehk peale Chooseri kasutamist tuleb rakenduse seis ja andmed taastada.

Siin kaks näidet – kontakti valimine ja pildi tegemine. Dokumentatsioons on ülejäänud väga sarnaselt välja toodud.

AddressChooserTask

public partial class MainPage : PhoneApplicationPage
{
  // AddressChooserTask objekt peaks ligipääsetav olema terve lehe skoobis..
  AddressChooserTask addressChooserTask;

  // Constructor
  public MainPage()
  {
    InitializeComponent();

    addressChooserTask = new AddressChooserTask();
    addressChooserTask.Completed += new EventHandler<AddressResult>(addressChooserTask_Completed);
  }

  private void addressChooserButton_Click(object sender, RoutedEventArgs e)
  {
    try
    {
      addressChooserTask.Show();
    }
    catch (System.InvalidOperationException ex)
    {
      // Catch the exception, but no handling is necessary.
    }
  }

  void addressChooserTask_Completed(object sender, AddressResult e)
  {
    if (e.TaskResult == TaskResult.OK)
    {
      textBlock1.Text = "The address for " + e.DisplayName + " is " + e.Address;
    }
  }
}

 

CameraCaptureTask

   public MainPage()
   {
      InitializeComponent();

      cameraCaptureTask = new CameraCaptureTask();
      cameraCaptureTask.Completed += new EventHandler
(cameraCaptureTask_Completed);
   }

Pildivaliku näitamiseks

      try
      {
        cameraCaptureTask.Show();
      }
      catch (System.InvalidOperationException ex)
      {
        // Catch the exception, but no handling is necessary.
      }

Tulemuse saame kätte nii:

 void cameraCaptureTask_Completed(object sender, PhotoResult e)
   {
      if (e.TaskResult == TaskResult.OK)
      {
         BitmapImage bmp = new BitmapImage();
         bmp.SetSource(e.ChosenPhoto);
         myImage.Source = bmp;
      }
   }

Täpsemalt dokumentatsioonsit: http://msdn.microsoft.com/en-us/library/ff769543%28v=vs.92%29.aspx


DataBinding ja internetipildid

Kirjutades XAMLis või kasutades Blendi määrame Image objektide allikaks alati string tüüpi objekti, taustal siis teisendatakse see pildiallikaks ImageSource objektiks. Kui aga proovida midagi sellist:

<Image source="http://www.midagi.ee/image.png">

kus url viitab mõnele veebis olevale pildile, siis on kööga, pilti ekraanile ei teki, sest seda automaagilist BitmapImage objektiks teisendust databindingu puhul ei toimi. Seega selleks, et näidata veebipilti on vaja kasutada teisendajat.

public class ImageUrlConverter : IValueConverter {
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) {
             try {
return new BitmapImage(new Uri((string)value, UriKind.RelativeOrAbsolute));
             }
             catch { }
            return null;
        }

         object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
             return null;
        }
     }

WP7 rakenduse võimekuste turvamudel

Windows Phone 7 rakenduste turvamudel näeb ette seda, et erinevate võimekuste kasutamine on kasutajate jaoks alati opt-in ehk siis kui rakendus tahab teada kasutaja hetke-asukohta, siis selle teada-saamiseks on esmalt vaja luba küsida. See, mille jaoks luba küsitakse ning mida rakendus üldse teha soovib pannakse kirja rakenduse manifesti. Huvitav nõue on ka see, et rakendus peab võimaldama hiljem ka neist lubatud asjadest loobuma, näiteks luues mingi seadistuste paneeli.

http://msdn.microsoft.com/en-us/library/ff769509%28v=VS.92%29.aspx#BKMK_Capabilities

<?xml version="1.0" encoding="utf-8"?>

<?XML:NAMESPACE PREFIX = [default] http://schemas.microsoft.com/windowsphone/2009/deployment NS = "http://schemas.microsoft.com/windowsphone/2009/deployment" /><?XML:NAMESPACE PREFIX = [default] http://schemas.microsoft.com/windowsphone/2009/deployment NS = "http://schemas.microsoft.com/windowsphone/2009/deployment" />
  
    ApplicationIcon.png
    
      
      
      
      
      
      
      
      
      
      
      
    
    
      
    
    

        
          Background.png
          0

        
      
    
  

Debug info emulaatoris

Kõik kes on kunagi mõnda Windows Phone 7 rakendust emulaatoris käiviatnud, on kindlasti märganud, et ekraani paremas nurgas jooksevad mingid numbrid. Arvata ju võiks, et see mingi debug info on, aga mis täpselt? Siin on väike joonis, mis seda selgitab.

IC468501 thumb Debug info emulaatoris

Selle ifno saab sealt ka eemaldada. Selleks tuleb avada App.xaml.cs fail ning seal õige parameeter false-ks määrata.

// Show graphics profiling information while debugging.
if (System.Diagnostics.Debugger.IsAttached)
{
    // Display the current frame rate counters.
    Application.Current.Host.Settings.EnableFrameRateCounter = false;

    // Other code…
}

 

Kuigi need värvilised selgitused on ju täiesti arusaadavad, siis igaksjuhuks ka igaühe kohta veidi pikem seletus:

Frame rate counter

Description

Composition (Render) Thread Frame Rate (FPS)

The rate at which the screen is updated.

User Interface Thread Frame Rate (FPS)

The rate at which the UI thread is running.

Texture Memory Usage The video memory and system memory copies of textures being used in the application.
Surface Counter The number of explicit surfaces being passed to the GPU for processing.
Intermediate Surface Counter The number of implicit surfaces generated as a result of cached surfaces.
Screen Fill Rate Counter The number of pixels being painted per frame in terms of screens. A value of 1 represents 480 x 800 pixels.

Vanemad