Gérer les Notifications Push sur IOs dans AIR

1/ Utilisez tout d’abord le SDK 4.6 avec AIR 3.4 minimum

2/Créer une classe qui gérera la notification en se connectant sur Urban Airship

package notifications
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.RemoteNotificationEvent;
	import flash.events.StatusEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLRequestDefaults;
	import flash.net.URLRequestMethod;
	import flash.notifications.NotificationStyle;
	import flash.notifications.RemoteNotifier;
	import flash.notifications.RemoteNotifierSubscribeOptions;

	import ressources.tacSkinnableContainerDefault;

	import spark.components.Group;

	import taccomponents.tacEventsTools;

	public class NotifierAPN extends Sprite
	{
		private var _subscribeOptions:RemoteNotifierSubscribeOptions = new RemoteNotifierSubscribeOptions();
		private var _preferredStyles:Vector. = new Vector.();
		private var _remoteNot:RemoteNotifier = new RemoteNotifier();
		private var _urlString:String;
		private var _urlreq:URLRequest;
		private var _urlLoad:URLLoader = new URLLoader();

		/**
		 *
		 *
		 */
		public function NotifierAPN()
		{
			init();
		}

		/**
		 *
		 *
		 */
		private function init():void
		{
			trace("SupportedNotification Styles: " + RemoteNotifier.supportedNotificationStyles.toString() + "\n");

			trace("Before Preferred notificationStyles: " + _subscribeOptions.notificationStyles.toString() + "\n");

			_preferredStyles.push(NotificationStyle.ALERT ,NotificationStyle.BADGE,NotificationStyle.SOUND );

			_subscribeOptions.notificationStyles= _preferredStyles;

			trace("After Preferred notificationStyles:" + _subscribeOptions.notificationStyles.toString() + "\n");

			_remoteNot.addEventListener(RemoteNotificationEvent.TOKEN,tokenHandler);
			_remoteNot.addEventListener(RemoteNotificationEvent.NOTIFICATION,notificationHandler);
			_remoteNot.addEventListener(StatusEvent.STATUS,statusHandler);

			this.addEventListener(Event.ACTIVATE,activateHandler);
		}

		/**
		 *
		 * @param e
		 *
		 */
		public function tokenHandler(e:RemoteNotificationEvent):void
		{
			trace("\nRemoteNotificationEvent type: "+e.type +"\nBubbles: "+ e.bubbles + "\ncancelable " +e.cancelable +"\ntokenID:\n"+ e.tokenId +"\n");

			_urlString = new String("https://go.urbanairship.com/api/device_tokens/" + e.tokenId);
			_urlreq = new URLRequest(_urlString);

			_urlreq.authenticate = true;
			_urlreq.method = URLRequestMethod.PUT;

			URLRequestDefaults.setLoginCredentialsForHost("go.urbanairship.com","Application id","Application Secret");

			_urlLoad.load(_urlreq);
			_urlLoad.addEventListener(IOErrorEvent.IO_ERROR,iohandler);
			_urlLoad.addEventListener(Event.COMPLETE,compHandler);
			_urlLoad.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpHandler);
		}

		/**
		 *
		 * @param e
		 *
		 */
		public function notificationHandler(e:RemoteNotificationEvent):void
		{
			trace("\nRemoteNotificationEvent type: " + e.type +"\nbubbles: "+ e.bubbles + "\ncancelable " +e.cancelable);

			for (var x:String in e.data)
			{
				trace("\n"+ x + ":  " + e.data[x]);
			}
		}

		/**
		 *
		 * @param e
		 *
		 */
		public function activateHandler(e:Event):void
		{
			if(RemoteNotifier.supportedNotificationStyles.toString() != " ")
			{
				_remoteNot.subscribe(_subscribeOptions);
			}
			else
			{
				trace("\n Remote Notifications not supported on this Platform !");
			}
		}

		/**
		 *
		 * @param e
		 *
		 */
		private function compHandler(e:Event):void
		{
			trace("\n In Complete handler,"+"status: " +e.type + "\n");
		}

		/**
		 *
		 * @param e
		 *
		 */
		private function httpHandler(e:HTTPStatusEvent):void
		{
			trace("\n in httpstatus handler,"+ "Status: " + e.status);
		}

		/**
		 *
		 * @param e
		 *
		 */
		private function iohandler(e:IOErrorEvent):void
		{
			trace("\n In IOError handler" + e.errorID +" " +e.type);
		}

		/**
		 *
		 * @param e
		 *
		 */
		public function statusHandler(e:StatusEvent):void
		{
			trace("\n statusHandler");

			trace("event Level" + e.level +"\nevent code " + e.code + "\ne.currentTarget: " + e.currentTarget.toString());
		}
	}
}

3/ Enfin ajouter dans le fichier Manifest :

<![CDATA[

<key>aps-environment</key>

<string>development</string>

]]>


Le jeu video devient art 7/17

logo

La fiction rejoint la réalité…

Sortie : 16 octobre 2003

Développeur : Lexis Numérique

In Memoriam est une vraie enquête à mener sur PC. En se servant d’indices à trouver dans le jeu, sur internet, ou via les mails qu’il reçoit, le joueur remonte la piste d’un tueur en série visiblement attiré par l’ésotérisme. La traque permettra peut-être de comprendre ce qu’il est advenu du journaliste Jack Lorski lui aussi à la recherche du tueur. C’est d’ailleurs le journal vidéo du reporter que le joueur suivra au fil de ses avancées.
in memoriam

Qu’a t’il de particulier ?

Les visuels font dans le dérangé et le dérangeant et nous immerge dans un monde ésotérique. Le Phoenix se plaît à livrer des indices au compte-gouttes et lâche parfois un court extrait du journal vidéo de Jack. Les séquences filmées sont de suite très immersive et nous font rentrer totalement dans l’histoire. Avec un tournage étalé sur près de deux ans, dans plusieurs pays différents et avec des acteurs crédibles chacun dans leur rôle, on se prend réellement au jeu, on fait tout pour retrouver Jack et Karen, en espérant qu’ils soient tous deux encore vivants.

Bien que la réalisation du jeu soit sobre ,son ambiance oppressante et son originalité en font un jeu hors norme.

in memoriam

Qu’en est t’il du gameplay ?

In Memoriam decide de mettre en avant l’aspect investigation d’une enquete. Le serial killer (qui se fait appeller le Phoenix) qui fait l’objet de l’enquete a laissé un CD créé comme un jeu de piste alambiqué qui ne livrera ses secrets qu’aux plus perspicaces. Pour augmenter ses chances de retrouver Jack et Karen, l’agence décide de rendre public le CD et de le diffuser au plus grand nombre. C’est ainsi que le fameux document atterrit entre vos mains, et que vous entrez par la même occasion dans le jeu macabre du Phoenix.

L’atout du jeu reside dans une dimension transmedia ou vous devez aller chercher des infos sur le net pour mener à bien votre enquete , certains site et forums ont ete créés dans ce but et vous immerge totalement dans le jeu.Un petit tour sur son moteur de recherche, et la quête aux indices commence.

Alors entre les vrais sites contenant de fausses infos et les faux sites contenant de vraies infos ,on rentre de plain-pied dans cette histoire de disparition.

Trailer :





Présentation de TermKit

Vous avez du certainement en entendre parler si êtes administrateur réseaux et que vous faite un peu de veille ,un développeur travaille actuellement sur un projet open source de terminal graphique pour MacOsX. Ce projet s’appelle TermKit et à pour but de modifier fondamentalement le terminal.

Voyons en détail les fonctionnalités qu’il présente :

Il fournit une auto complétion visuelle , des icônes pour le status des commandes bien pratique afin d’éviter d’éventuelles erreurs et des grilles visuelles pour parcourir les répertoires.

TermKit

Malgré son visuel proche du terminal classique , il offre des fonctionnalités avancés d’un finder tel que la visualisation des images ou la coloration syntaxique.

termKit1

TermKit permet aussi entre autres de suivre des téléchargements et tâches longues avec une jolie barre de progression, d’ouvrir des fenêtres de navigateur graphique graphiques est bien d’autres.

Voici une vidéo de présentation de TermKit

Site web de l’auteur : http://acko.net/blog/on-termkit




Subversion sur MacOsX

Plus le temps passe et plus les distributions de Mac OS X s’enrichissent de logiciels intéressants. Leopard est livré de base avec tout ce qu’il faut pour gérer un serveur svn : Apache 2.2 et subversion. Voyons comment configurer rapidement un serveur svn+http avec accès authentifié. Il est possible bien sûr de se contenter d’un serveur svn natif, mais l’accès aux dépots par l’intermédiaire d’Apache apporte une grande souplesse en terme d’authentification et de permission d’accès.

Pour pouvoir faire les manipulations décrites ci-dessous, il faut être administrateur d’une machine sous Mac OS X 10.5. Mac OS X 10.4 et inférieurs ne sont pas livrés par défaut avec les logiciels nécessaires à la mise en place d’un serveur svn. Ceci posé, il va nous falloir : un logiciel type « Terminal» , un éditeur de texte (vi, bbedit, textmate, …) et un accès internet.

L’installation présentée ici est faite dans le répertoire /Library/WebServer/, dans le quel tous les membres du groupe admin ont le droit d’écrire par défaut. La première étape est la création de l’espace physique des dépots de sources (repository). On se déplace dans /Library/WebServer/, on crée un répertoire Subversion, on crée le premier repository, et on ajoute les fichiers d’authentification et de permission pour les utilisateurs.

cd /Library/WebServer/ mkdir Subversion svnadmin create Subversion/mon_projet vi deny.htsvnaccesspolicy

1. ici on colle/édite/adapte le contenu
2. suivant en fonction de ses besoins :

[groups] admins = patpro autregroupe = eric, robert tous = sam, patpro, eric, robert, gonzague

[mon_projet:/] @admins = rw @autregroupe = rw sam = r

1. ensuite on génère les couples login/mot de passe
2. pour les utilisateurs :

htpasswd -bc deny.htpasswd patpro mot-de-passe

sudo chown -R www:www /Library/WebServer/Subversion

Ensuite, on peut ajouter des feuilles de styles XSL/CSS pour agrémenter le rendu des repositories dans Apache. Il est nettement plus simple en terme de configuration de stocker des feuilles de styles à la racine du serveur, c’est à dire dans le répertoire /Library/WebServer/Documents/ :

cd /Library/WebServer/Documents/ curl -O http://svn.collab.net/repos/svn/trunk/tools/xslt/svnindex.xsl curl -O http://svn.collab.net/repos/svn/trunk/tools/xslt/svnindex.css

Maintenant, il faut modifier la configuration d’Apache pour qu’il charge les modules Subversion et sache lire un repository. On modifie d’abord le fichier /private/etc/apache2/httpd.conf pour assurer le chargement des modules, puis on crée un fichier de configuration dédié à nos dépots. À l’aide de son éditeur de texte préféré, on modifie /private/etc/apache2/httpd.conf en ajoutant les deux lignes ci-dessous à la suite des autres directives « LoadModule»  :

LoadModule dav_svn_modu