Le Mobile Dev Day accueille l'évènement //publish/ en Belgique

22. April 2014 17:12 by Renaud in Events, Windows 8, Windows Phone  //  Tags:   //   Comments (0)

Vous pouvez retrouver l'article original sur le blog de Kévin Rapaille

 

Ces 15 et 16 mai, Microsoft organise un évènement mondial afin de vous aider à finir vos applications Windows 8.1 et Windows Phone 8.1.

Et bien sûr, la Belgique y participe !

//publish/

Durant toute la durée de l'évènement, des experts Microsoft et de la communauté seront présent afin de vous aider à résoudre les différents problèmes que vous rencontrez ou apporter la touche finale de votre projet.

Différents appareils de test seront également à votre disposition afin que vous puissiez tester votre application dans les meilleures conditions.

Le concours

Comme toujours, il y a des prix à gagner ! Un concours global est donc organisé pour chacune des applications publiées avant le 1er Juin.

En voici les prix :

  • 3 voyages pour les USA à l'occasion du Grand Prix de Formule 1 de Austin dans le Texas
  • 3 ultimate dev caves d'une valeur de 10.000 $
  • 6 imprimantes 3D MarkerBot
  • Plus de 100 Lumia 1520

Le concours se divise en 3 groupes : Les étudiants, les personnes individuelles, et les petites entreprises (moins de 100 employés). 

Chacun des membres de ces groupes pourra concourir dans 4 catégories différentes :

  • Les meilleures applications Windows 8.1 dont la meilleure app de chaque groupe se verra remporter l'un des voyages aux USA.
  • Les meilleures applications Windows Phone 8.1 dont la meilleure app de chaque groupe se verra remporter l'une des Ultimate Dev Caves à 10 000$
  • Les meilleures applications cross-plateforme dont la meilleure app de chaque groupe se verra remporter l'une des imprimantes 3D MarkerBot
  • Et les plus belles applications innovantes dont la meilleure app de chaque groupe se verra également remporter l'une des imprimantes 3D MarkerBot

Notez que pour chaque groupe, dans chaque catégorie, le top 9 remportera un lumia 1520. 

En Belgique

Face à des prix aussi impressionnants, l'équipe du Mobile Dev Day s'est donc réunie afin de vous en faire profiter !

Nous accueillerons donc le //publish/ au MIC de Mons le vendredi 16 mai et avons grand espoir de voir notre communauté rayonner dans ce concours.

Qui plus est, un concours local sera également organisé. Un Lumia 1520 et une Dell Venue Pro 8 seront à gagner le jour même.

Pour plus d'infos, rendez-vous ici. Inscrivez-vous vite !

Planning de la rentrée 2013-2014

Trainings gratuits au Microsoft Innovation Center de Mons

Plein de nouvelles formations planifiées au MIC pour la rentrée, avec des sessions sur Windows Phone et Windows 8 en C#/XAML et en JavaScript/HTML5! Toutes ces formations sont évidemment gratuites, en français, et ouvertes à tous!

Create your Windows 8 app in HTML5

How different is Windows 8? What is the rush to build apps for the Windows 8 platform and why are developer communities reacting differently to Windows 8?  This Windows Store App course introduces HTML5, CSS3, and JavaScript and helps you learn HTML5/CSS3/JavaScript programming skills. This course is an entry point into both the Web application and Windows Store apps.

 18 septembre, 5 novembre, 10 janvier

 

The Ins & Outs of Windows Phone 8 apps

The ins & outs of Windows Phone 8 is a hands on introduction to building apps for Windows Phone. We’ll guide you through the unique aspects of the Windows Phone platform and you’ll have the chance to build on your knowledge immediately! Your app at the end of the day!

 30 septembre, 12 novembre, 20 janvier

 

Making your first Windows 8 app

This workshop is a free and fun training from developers, for developers. Expertise is offered in a fun, low key, interactive way and you’ll have the chance to test and experiment with your new knowledge!

 16 octobre, 9 décembre, 12 février

 

Make your app run into the Cloud 

Et pour étendre les capacités de vos apps et lier tout ça avec le cloud, sachez qu'une session Cloud & Windows Azure est également prévue et sera donnée par Nick Trogh, Developer and Platform Evangelist chez Microsoft BELUX.

In this workshop, we’ll teach you how to add a cloud backend to your app. Free, fun, no-fluff, you will learn how to add a cloud-based backend service to a Windows Store app using Windows Azure Mobile Services. And you’ll have the chance to test and experiment with your new knowledge!

 11 décembre

 

Encore plus de sessions

Je donnerai également des formations au MIC Brussels (voir leur agenda) sur les mêmes sujets, mais probablement en anglais cette fois (cela dépendra de l'audience :)).

Build 2013 - Keynote Live Stream au MIC Belgique

5. June 2013 21:54 by Renaud in Events, Windows 8  //  Tags: , , ,   //   Comments (0)

Build 2013 au MIC Belgique

 

http://events.mic-belgique.be/event/build-2013-keynote-live-stream

Le 26 juin prochain, Microsoft organise LA conférence à ne pas manquer pour les développeurs! La conférence Build, c'est le moment pour MS de présenter quelques grosses nouveautés et sa vision du futur. Il y a deux ans, Microsoft dévoilait une preview de Windows 8 (et offrait par la même occasion des tablettes Samsung Slate 7 avec cette version de Windows 8 à tous les participants).

Depuis, Microsoft a fait du chemin. La Surface, première tablette entièrement brandée Microsoft, est apparue et est disponible dans les magasins. Une nouvelle version de Windows Phone est sortie, rapprochant un petit peu plus les mondes des PC/tablettes et des smartphones. Et la communauté des développeurs Windows et Windows Phone se développe plus que bien en France et en Belgique.

Et déjà, on arrive à une nouvelle édition de la Build, qui aura lieu cette fois à San Francisco. Et vous le savez sans doute: beaucoup de nouveautés sont prévues pour les développeurs, notamment à propos de Windows 8.1!

Les entrées ont été mises en vente début avril...

 ... et se sont terminées presque aussitôt.

 

Malheureusement je ne pourrai pas m'y rendre cette année :) J'avoue que même si mon emploi du temps me l'avais permis, le prix total (billets + voyage + logement) m'aurait un peu fait hésiter.

Bref, cela n'est pas grave... Heureusement il y aura comme toujours un streaming live de la Keynote, cette session d'ouverture. Et avec quelques gars de la communauté on s'est dit que ce serait sympa de squatter le MIC pour regarder les annonces ensemble.

L'event est ouvert à tous, que vous soyez un passionné de technos Microsoft ou juste curieux, n'hésitez pas à nous rejoindre:

http://events.mic-belgique.be/event/build-2013-keynote-live-stream

Bonus: 

Un invité de marque sera présent avec nous ce soir: David Hernie (@DavidHernie), Evangelist Windows 8, Windows Phone et Azure chez Microsoft Belux sera de la partie! :) 

[Windows 8] Générateur de politique de confidentialité

4. June 2013 21:37 by Renaud in Windows 8, Windows Azure  //  Tags: , , ,   //   Comments (1)

Vous le savez sans doute, sur Windows 8, l'utilisateur doit toujours garder le contrôle sur son système. Et pour cela, Microsoft n'a pas seulement fait en sorte que le système soit sécurisé, mais a également établi quelques règles pour nous les développeurs. Ces règles visent particulièrement à informer l'utilisateur de l'usage que nous pourrions faire de leurs données.

Ainsi, pour utiliser des fonctionnalités de Windows 8 qui touche au respect de la vie privée (GPS, accès aux librairies personnelles comme les documents, les photos, etc, ...), il est nécessaire de le déclarer explicitement. L'utilisateur verra alors - avant de télécharger l'application - que vous réclamez l'un ou l'autre droit.

En ce qui concerne l'accès à internet, les choses sont également très claires: si votre application fait usage d'internet, vous devez fournir à l'utilisateur une Politique de Confidentialité consultable en ligne!

Alors si vous êtes un peu fainéants ou que vous n'avez aucune idée de comment héberger une page web, voici un petit générateur que j'ai mis en ligne sur mon compte Windows Azure:

http://w8privacy.azurewebsites.net/

Rien de très complexe, mais c'est surtout pratique :) développé en deux temps, trois mouvements avec Foundation. L'intérêt étant que vous aurez une page personnalisée (et multilingue!) pour votre application!

Il vous suffit de suivre les étapes, et c'est parti, vous aurez une URL unique que vous pourrez utiliser dans la page "À propos" de votre application ET dans le formulaire de soumission de votre application sur le Windows Store!

 

Bonus : si cela ne vous suffit pas tout à fait, les sources sont dispos sur GitHub: W8Privacy

[Windows 8] Développez en HTML 5 pour Windows 8

29. April 2013 14:53 by Renaud in Windows 8  //  Tags: , , ,   //   Comments (0)

* Petite pub perso Tongue Out *


Ces derniers moi j'ai écrit un bouquin traitant de Windows 8 avec Loïc Bar et Simon Boigelot. Ce livre parle du développement d'applications pour le store Windows 8 à base de HTML 5 et de JavaScript !

Ce livre s'adresse aux débutants, aux personnes n'ayant pas nécessairement d'expérience avec les technologies du monde Microsoft. Vous n'avez jamais fait de .NET? Mais vous avez déjà bidouillé avec du HTML?

Si vous voulez passer à la vitesse supérieure, tirer profit du nouvel OS de Microsoft et pourquoi pas commencer à gagner un peu d'argent en vendant vos applications, ce livre est pour vous ! :)

Développez en HTML 5 pour Windows 8

[Windows 8] Créer un timer rond en XAML

15. April 2013 21:27 by Renaud in Expression Blend, Windows 8, XAML  //  Tags: , , , ,   //   Comments (0)

Pour le développement du jeu WordDefy pour Windows 8, Matthieu (@MatthieuVdh) et moi avons demandé l'aide d'une amie graphiste. Et comme elle nous a rapidement pondu un super truc, la moindre des choses c'était de tenter de le reproduire à l'identique ! Il y a plusieurs bons côtés à cela : premièrement on a une app avec un look plutôt sympa, et deuxièmement j'ai pu jouer avec Blend et m'amuser avec le XAML, ce qui fait que j'ai appris pas mal de choses!

Une des parties consistait à reproduire un Timer en forme de cercle. Pour que vous y voyez plus clair, voici le compteur original tel que designé et le résultat final (qui est assez ressemblant :)) en XAML :

Design original
Design original

Résultat en XAML
XAML

Conception d'un RoundedTimer

Il existe plein d'exemples de timer sur le web, mais aucun fonctionnant sous WinRT. Et évidemment, le XAML sur Windows 8 a quelques particularités qui font que l'exemple ne sont pas toujours utilisables. J'en ai donc recréé un avec Blend !

Générer un Path

La première étape consiste à créer le cercle du compteur. Ce cercle doit être transparent au milieu. Pour faire cela, on va utiliser deux Ellipses et les combiner (ou plus précisément les soustraire). Placez donc deux Ellipses de manière à ce qu'elles soient centrées sur le même point, et avec l'une d'elle légèrement plus petite que l'autre.

Le code jusqu'à présent:

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    	<Ellipse Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stroke="Black" VerticalAlignment="Top" Width="200"/>
    	<Ellipse Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="140" Margin="190,270,0,0" Stroke="Black" VerticalAlignment="Top" Width="140"/>
    </Grid>

Pour obtenir le résultat voulu, on peut donc soustraire la deuxième Ellipse à la première ou exclure les zones de chevauchement (lisez aussi Combiner des formes et des tracés (Blend pour Visual Studio)). Faites un clique droit sur l'arbre visuel et les Ellipses sélectionnées et choisissez l'opération qui vous convient dans le menu Combiner

Le résultat de cette opération est un Path généré en remplacement des deux Ellipses précédemment créées. Le résultat devrait ressembler à ceci:

Et le code correspondant : 

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    	<Path Data="M100,30.5 C61.6162,30.5 30.5,61.6162 30.5,100 C30.5,138.384 61.6162,169.5 100,169.5 C138.384,169.5 169.5,138.384 169.5,100 C169.5,61.6162 138.384,30.5 100,30.5 z M100,0.5 C154.952,0.5 199.5,45.0477 199.5,100 C199.5,154.952 154.952,199.5 100,199.5 C45.0477,199.5 0.5,154.952 0.5,100 C0.5,45.0477 45.0477,0.5 100,0.5 z" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="200"/>
    </Grid>

Ce cercle est la base de notre RoundedTimer... Passons à l'étape suivante: le clipping ! :)

Clipping Path

Le principe du clipping path est d'utiliser un élément pour délimiter la zone visible d'un autre élément. Malheureusement dans les apps Windows Store on ne peut pas utiliser un Path pour "masquer" un autre élément. Par contre on peut utiliser des Ellipse et des Rectangle pour délimiter une zone. 

Ajoutons par exemple un Rectangle dans sur un coin de notre cercle : 

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Rectangle Margin="160,240,1106,428" Width="100" Height="100"/>
    <Path Data="M100,30.5 C61.6162,30.5 30.5,61.6162 30.5,100 C30.5,138.384 61.6162,169.5 100,169.5 C138.384,169.5 169.5,138.384 169.5,100 C169.5,61.6162 138.384,30.5 100,30.5 z M100,0.5 C154.952,0.5 199.5,45.0477 199.5,100 C199.5,154.952 154.952,199.5 100,199.5 C45.0477,199.5 0.5,154.952 0.5,100 C0.5,45.0477 45.0477,0.5 100,0.5 z" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="200"/>
</Grid>

 

Le résultat obtenu est le suivant : 

On se retrouve avec un quart de cercle, ce qui va en fait représenter un quart de notre RoundedTimer ! Ce qu'il reste à faire est d'animer ce quart de Timer pour représenter le temps qui s'écoule.

Animer le Timer

Pour cela on va utiliser une Transformation sur l'élément RectangleGeometry. A vrai dire il y a sans doute plusieurs façon d'arriver au même résultat ! Pour ma part j'y suis arrivé en utilisant un SkewTransform.

Si l'on reprend le quart de cercle précédent, on peut l'animer en utilisant la transformation correcte : 

<Path Data="M100,30.5 C61.6162,30.5 30.5,61.6162 30.5,100 C30.5,138.384 61.6162,169.5 100,169.5 C138.384,169.5 169.5,138.384 169.5,100 C169.5,61.6162 138.384,30.5 100,30.5 z M100,0.5 C154.952,0.5 199.5,45.0477 199.5,100 C199.5,154.952 154.952,199.5 100,199.5 C45.0477,199.5 0.5,154.952 0.5,100 C0.5,45.0477 45.0477,0.5 100,0.5 z" Fill="White" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="200">
	<Path.Clip>
		<RectangleGeometry Rect="0,0,100,100">
			<RectangleGeometry.Transform>
                <!-- AngleY : De 0 à 90 -->
                <SkewTransform CenterX="100" CenterY="100" AngleY="0"/>
            </RectangleGeometry.Transform>
		</RectangleGeometry>
	</Path.Clip>
</Path>

En modifiant la valeur de la propriété AngleY, on peut animer joliment le timer ! Ainsi, avec un angle de 40°, on retrouve la forme suivante :

Il ne reste donc plus qu'à créer trois autres quarts du timer, et à les animer en changeant la valeur d'un des angles toutes les secondes grâce à un DispatcherTimer. L'important étant de voir comment appliquer la SkewTransformation, en jouant sur les propriétés Center et Angle !

Téléchargement / Sources

Vous pouvez télécharger le résultat final sous la forme d'une contrôle sur GitHub ! À vous de le customiser ! :)

Pour l'intégrer dans votre app, rien de plus simple :

<Page
    x:Class="TestApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:roundedTimer="using:RoundedTimer"
    mc:Ignorable="d">
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <roundedTimer:RoundedTimer x:Name="MyTimer" Width="200" Height="200" Duration="00:01:00" />
    </Grid>
</Page>

On instancie le timer dans le XAML, et on démarre le décompte avec un appel à la méthode Start() dans le code-behind :

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            MyTimer.Start();
        }

 

[MOOC] Windows 8 - 2/ Cycle de vie des apps Windows Store

25. March 2013 13:14 by Renaud in MOOC, Windows 8  //  Tags: , , , ,   //   Comments (0)

 

Dans cette deuxième vidéo (la première étant ici : [MOOC] Windows 8 - 1/ Les contrats en C#) , on aborde le cycle de vie des applications Windows Store. Qu'est-ce qui change par rapport aux applications classiques? Pourquoi ces modifications? Et comment gérer tout ça? C'est ce que je vous explique ici !

La gestion du cycle de vie des applications Windows Store

Les applications Windows Store passent par différents états au cours de leur vie. Elles peuvent successivement être actives, suspendues, ou terminées.

Au sommaire :

- Qu'est-ce qui a changé ?

- Gérer le passage entre les différents états

- Sauvegarder la session des utilisateurs avec le SuspensionManager

- Le SplashScreen étendu

- Les BackgroundTask

- Mettre à jour les LiveTile depuis le background

 

  

Après avoir suivi cette vidéo :

Vous saurez comment sauvegarder une session utilisateur, effectuer des tâches en arrière plan et mettre à jour une vignette dynamique depuis votre application !

La suite

Dans la prochaine vidéo, on verra quelques Tips & Tricks sur le XAML, Visual Studio et Blend

Relive TechDays Belgium 2013 online: videos and slides available!

22. March 2013 10:03 by Renaud in Events, Windows 8, Windows Phone  //  Tags: , ,   //   Comments (0)

TechDays

2 weeks ago we closed the Microsoft TechDays 2013 in Antwerp. Close to 2900 IT Professionals, Developers and Students enjoyed 90 sessions with top content led by a broad selection of international and local top speakers. A special THANK YOU goes to our partners, our MVP’s and MEET (Microsoft Extended Experts Team) members and of course, all our enthusiastic attendees! What’s next? The session videos and slides are now available on www.techdays.be! (Re)live the sessions and take the next steps to truly master the technologies. Warm up with a selection from our Technical Evanglists Arlindo Alves and Katrien De Graeve:

Arlindo’s Top Selection Katrien’s Top Selection
Hackers (Not) Halted with Paula Januszkiewicz Become a Windows 8 and Windows Phone App Developer at TechDays with Ben Riga
Moving from Device Centric to a User Centric Management with Corey Hynes Bigger, Faster, Stronger: Optimizing ASP.NET 4 and 4.5 Applications with Mads Kristensen
Windows 8 Client: Part 1 "The OS internals for IT-Pro's" and Part 2 "The Application internals for IT-Pro's" with Tom Decaluwé Behind the scenes of (as many) C# language features with Bart De Smet

Enjoy! The TechDays Team Questions? Connect with us on Twitter, Facebook or simply via e-mail.

[MOOC] Windows 8 - 1/ Les Contrats en C#

14. March 2013 00:03 by Renaud in MOOC, Windows 8  //  Tags: , , ,   //   Comments (0)

Dans cette vidéo d'une heure, on passe en revue les contrats dans les applications Windows Store. Les contrats permettent de développer des applications qui soient cohérentes et intégrées avec l'ensemble du système Windows 8, ce qui donne globalement une meilleure expérience utilisateur.

Les Contrats

On parle ici des trois principaux contrats que sont le Search, le Share et les Settings. De quoi s'agit-il et comment les implémenter dans une application écrite en C# ? Toutes les réponses sont dans la vidéos.

Au sommaire :

03'40" : Search : permettre de chercher dans votre application depuis n'importe où et n'importe quand.
24'33" : Share : tirer profit du potentiel des autres applications grâce au partage de données App-To-App.
41'32" : Settings : rassembler les paramètres de l'app dans un seul endroit pour offrir une expérience consistante.

Après avoir suivi cette vidéo :

Vous aurez appris à développer des applications super-intégrées à Windows 8, ce qui rendra vos utilisateurs contents :) et ça fait toujours plaisir de recevoir des reviews positives !

La suite

Dans les prochaines vidéos, on parlera du Cycle de vie de l'application et on verra quelques Tips & Tricks sur le XAML, Visual Studio et Blend.

 

[Windows 8] Short code sample to understand Promise, then() and done() with WinJS

27. January 2013 14:01 by Renaud in Windows 8  //  Tags: , , , ,   //   Comments (0)

I just wrote a small piece of code which is, in my opinion, self-explanatory. Copy/past those lines in a blank Windows 8 JS/HTML app and put some break points at each line. Then, follow the story :)

The aim of this example is to show that you don't have to write functions, within functions, within functions.

Indeed, I know some people think they have to write code like this :

asyncCall().then(function() {
    anotherAsyncCall().then(function(){
        aThirdAsyncCall();
    }
}

But then, why would we use Promises ? Is it just another way to write messy code? Of course not ! Look at this code and read the comments :)

 WinJS.xhr({ url: "http://www.microsoft.com" })
        .then(function (microsoftResult) {
            // Here we receive the response, as excepted.
            // So what do we do here? We could try another asynchronous call,
            // or just return a simple value.
            // Let's return the url that we want to fetch in the next call :
            return "http://dev.windows.com";
        }).then(function (devWindowsUrl) {
            // The devWindowsUrl simply contains the value that we returned in the previous call.
            // Now let's try another Async call, and instead of using callbacks here, let's just return the promise !!
            return WinJS.xhr({ url: devWindowsUrl });
        }).then(function (devWindowsResult) {
            // When we are here, you can see that devWindowsResult doesn't contain a promise.
            // It contains the actual value that we wanted to retrieve from the previous async call.
            // That's the magic =)

            // Now let's throw an exception by calling a non-existing function
            return devWindowsResult.callNonExistingFunction();
        }).then(function (nonExistingResult) {
            // We don not hit this breakpoint
            return "wow, does it really exist?";
        }, function (nonExistingError) {
            // Instead, we are here, because the promised is fulfilled with an error
            // Now let's return something nice, because we managed to handle the error.
            return "that function didn't exist but it's okay, we handled the exception!";
        }).then(function (errorHasBeenHandledResult) {
            // then, everything continues normally
            return "happy =)";
        }).done(function (result) {
            // and at the end you should end up with a done function.
            // The difference is that if there is an exception thrown, 
            // within this function, the error will be actually thrown
            // and not just passed as an argument in a next callback.

            // The error is thrown asynchronously, so you should ensure
            // you catch the last-chance exception at the app-level.
            return result.callANonExistingMethod();
        }, function (error) {
            // Here we can eventually handle an error in the previous 'then' error handling callback.
            var resultError = error;
        });

Then, to make sure you handle the exceptions that are thrown asynchronously, you can just add this eventhandler with WinJS :

    var app = WinJS.Application;
    app.onerror = function (error) {
        //Log the last-chance exception 
    };

Finally, if you use a done() function at the end of your async calls, remember that the previous promise could throw an exception. If it is the case, and that you didn't provide a onError callback, the exception will be automatically forwarded and you will end up with a first chance exception !

TextBox

About the author

I'm a developer, blog writer, and author, mainly focused on Microsoft technologies (but not only Smile). I'm Microsoft MVP Client Development since July 2013.

Microsoft Certified Professional

I'm currently working as an IT Evangelist with an awesome team at the Microsoft Innovation Center Belgique, where I spend time and energy helping people to develop their projects. I also give training to enthusiastic developers and organize afterworks with the help of the Belgian community.

MIC Belgique

Take a look at my first book (french only): Développez en HTML 5 pour Windows 8

Développez en HTML5 pour Windows 8

Membre de l'association Fier d'être développeur

TextBox

Month List