kochka

Membres
  • Compteur de contenus

    56
  • Inscription

  • Dernière visite

Messages posté(e)s par kochka

  1. Moi, ce qui me dérange le plus sont les fautes de grammaire, bien plus que les fautes d'orthographe !

    Je ne comprend toujours pas comment on peu confondre "c'est", "ces" et "ses" !!! => niveau CM1

    Coté conjugaison, il est quand même édifiant de voir que certains confondent l'imparfait, le conditionnel et le participe passé !!!

    Tout le monde fait plus ou moins de fautes d'orthographe, mais il y a quand même des limites....

  2. Tu peux trouver la doc sans problème sur internet mais il faut la référence exacte du portable. Gericom Hummer semble être une référence générique chez Gericom comme Sony Vaio par exemple ...

    Tel à ta soeur et demande lui la référence exacte, ca doit etre ecrit sur l'autocollant au dos du portable ou sur sa facture ...

  3. Tester la connexion internet avant de lancer un script

    Votre script utilise la connexion internet, pour parser un site par exemple. Vous pouvez donc conditionner le lancement du script seulement si ce site est dispo.

    La fonction :

    def isHostUp(host):  """ Test if a host is up """  import socket, time  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  try:	sock.connect((host, 80))	sock.close()	del sock	return True  except socket.error, (errcode, errmsg):	if errcode == 111:	  return True	else:	  print 'Internet connection or host is down'	  return False

    En pratique :

    dialog = xbmcgui.DialogProgress()dialog.create('Test de connexion', 'Test de la résolution DNS', 'Veuillez patienter...')hostUp = isHostUp('mon url')dialog.close()if not hostUp:  dialog = xbmcgui.Dialog()  dialog.ok('Erreur', "La connexion internet n'est pas disponible")else:  mainWin = mainWindow()  mainWin.doModal()  del mainWin

  4. Eliminer les caractères html lors d'un parsing

    Quand vous parsez des données sur le net, elle sont normalement truffées de codes html pour les caractères speciaux comme par exemple & eacute, & qote, etc..

    Pour les eliminer, vous pouvez utiliser les dictionnaires de la lib 'htmlentitydefs'.

    Nous allons donc utiliser le dictionnaire 'entitydefs' de cette lib qui pour un caractère html donne son equivalent iso-8859-1.

    Nous pouvons appliquer la transformation lors du parsing par expression régulière grace a 're.finditer' et une fonction lambda qui va appliquer la transformation via un 're.sub'.

    Ca sera plus clair dans l'exemple :)

    import urllib, refrom htmlentitydefs import entitydefsmonUrl	  = 'url de la page a parser'monResultat = []try:  htmlContent = urllib.urlopen(monUrl).read()  reParse = re.compile('Mon expression régulière de parsing')  reClean = re.compile('&([A-Za-z]+?);')  clean   = lambda match: entitydefs[match.group(1)]  for matchLine in reParse.finditer(htmlContent):	monResultat.append(reClean.sub(clean, matchLine.group(1)))except IOError:  print """ Impossible d'ouvrir la page %s """%colUrl  raise

    Biensur 'matchLine.group(x)' depend du groupe a nettoyer dans l'expression régulière.

  5. Salut :)

    L'idée de ce topic est de regrouper des ressources ou des techniques utiles pour les scripts python Xbmc.

    Ce topic n'a pas pour but d'apprendre a programmer en Python mais de mettre en commun des routines ou experiences sur tous les aspects du dev Python pour Xbmc.

    Voilou ^_^

    Mise en cache de données

    Si vous dévellopez un script multi-fenêtres et que ces fenêtres effectuent des parsing de données sur internet, le fait de les fermer et de les réouvrir relance des parsing inutiles sur internet.

    Cela ralenti donc la réactivité du script. L'idée est la de mettre en cache l'objet qui contient les données parsées pour les restitituer a chaque ouverture de fenêtre.

    On va donc mémoriser l'instance de l'objet dans un système de cache en y associant les arguments passés.

    Une classe statique oCache va se charger de ce travail.

    Deux methodes statiques :

    - oCache.add : Ajoute une instance au cache

    - oCache.remove : Enlève une instance du cache

    "oCache.add" renvoi l'instance de l'objet passé en paramètre comme une instanciation classique. Si l'objet est instancié avec les mêmes paramètres, alors il renvoi l'instance stockée en cache.

    class oCache:  """  oCache static class: Objects instances caching based on args  Author: kochka (kochka_'at'_gmail.com)  """  instanceList = []  def new(oClass, *args, **kwargs):	"""	Create or retrieve from cache an instance of a class	Params : class, args	"""	for cacheInstance in oCache.instanceList:	  if cacheInstance[0] == (oClass.__name__, args, kwargs):		return cacheInstance[1]	# Create a new instance	instance = oClass(*args, **kwargs)	oCache.instanceList.append([(oClass.__name__, args, kwargs), instance])	return instance  new = staticmethod(new)  def remove(className, *args, **kwargs):	"""	Remove an instance from cache	Params : class name, args	"""	for key in range(len(oCache.instanceList)):	  if oCache.instanceList[key][0] == (className, args, kwargs):		del oCache.instanceList[key]		break	else:	  raise KeyError, 'No instances corresponding to args'  remove = staticmethod(remove)

    Exemple d'utilisation

    On imagine que vous avez une classe "dataList" qui parse et stock des données. Votre fennêtre instancie cette classe a chaque ouverture de celle ci.

    Avec oCache, ca donne :

    class maFenetre(xbmcgui.Window):  def __init__(self, dataParam):	xbmcgui.Window.__init__(self)	# Creation d'une instance de données ou récupération du cache	try:	  self.dataList = oCache.new(dataList, dataParam)	except:	  print """ Erreur d'instanciation de la classe 'dataList' """	  	[...]

  6. Pour les problèmes de lancement de myCine avec la dernière T3ch, j'ai pas trop poussé les tests mais ca doit être lié à l'encodage des caractères car j'ai réussi a le faire marcher en supprimant des espaces dans le script ! J'ai moi même des problèmes liés a l'encodage des caractères dans mes scripts avec la dernière T3ch...

    Mais bon il faut mieux attendre les prochaines versions d'Xbmc avant d'essayer de faire d'éventuelles corrections ...

  7. Lo :)

    Je l'ai codé avec un éditeur de texte sous Linux donc les retours chariot sont des retours chariot UNIX. Le bloc note ne les aime pas trop :) Tu peux le lire sans problème avec n'importe quel editeur de texte plus evolué que le bloc note (ex: Ultra Edit).

    Le Python n'est pas très compliqué si tu a quelques bases en programmation. La première spécificité de Python à intégrer est le fait que les blocs de code sont fait grace a l'indentation. Donc l'aspect d'un script ne change pas bcp quelquesoit le codeur qui l'a fait.

    N'hesite pas a venir chercher de l'aide içi si tu veux te lancer !

    Tcho ++

    PS :une doc interressante :

    http://erci.no-ip.com/origine/divers/python/html/toc.html

  8. T'as quelle version d'Xbmc ? Une des deux dernières T3ch ?

    Merci, c'est parfait.

    Mais j'ai remarqué un petit bug pas très génant : le titre de certaines émissions n'est pas entier et disparait quand on les sélectionne.

    A part ça, il marche nikel :oki:

  9. Plop :)

    Alex:

    Pourtant je me suis connecté pleins de fois mais assez tard. Je sais pas si Msn fonctionne correctement car je l'ai installé spécialement, j'utilise pas Msn sinon :) J'ai pas eu de messages pour me dire que tu avais accepté ni d'alleurs pour me dire qu'il fallait que tu accepte. Ca a ajouté ton contact direct...

    J'ai essayé aussi au boulot, mais le firewall aime pas Msn crying

    JaHell:

    Merci :)

    Chan IRC ? Je vais chercher sur le site car je viens de telecharger le fichier mais c'est un .exe et je suis sous Linux...

    Je viendrais faire un tour ce soir :)

  10. Plop :)

    J'ai fais un script pour l'émission C dans l'air de France 5. On peut voir les émissions intégralement sur une semaine. Ca marche bien et les vidéos sont de qualité correcte.

    Il reste que le design à faire :) J'ai fais quelques tentatives mais c'est moyen, je suis un peu une bille en design ggne

    Donc si quelqu'un est motivé pour juste faire l'image de fond et une barre de surbrillance pour la liste de videos, ca serait cool :)

    L'écran est simple puisqu'il contient que la liste des videos avec des thumbnails pour chaque video

    Image de fond de 720x576

    Une ligne de la liste fera au moins la hauteur d'un thumb qui fait 110x75

    Merci :)

  11. Merci pour toutes ces infos :)

    Le script est terminé, reste plus que le graphisme à faire. J'ai finalement abandonné l'idée de conserver les instances de fenêtres. J'ai écrit à la place une classe statique pour mettre en cache les instances des objets qui font les parsing.

    Mes freeze étranges venait du fait que j'essayais de passer des params au constructeur de mes classes qui héritent de xbmcgui.Window sans nommer les paramètres. Je comprend pas pourquoi ca plante la console d'ailleurs ???

    Je te PM pour MSN, ca sera plus pratique si j'ai des questions metaphysiques sur le fonctionnement de l'API ou sur Python :)

    Thx ++

  12. Merci de ta reponse :)

    Je sais pas si il n'y a que l'identification des fenêtre qui est buggé :) J'ai freezé je sais pas combien de fois la Xbox avec des trucs qui marche parfaitement sur mon PC...

    J'ai vu que tu avais commencé une ébauche de gestion des fenêtres dans "myCine", tu comptais t'y prendre comment ?

    J'ai pas le temps maintenant mais je vais faire des tests des possibilités ce We.

    Tcho ++

  13. Plop tout le monde :)

    Comment fonctionne la récupération des fenêtres non détruites ? Le fait que cette possibilité se trouve dans le constructeur d'une xbmcgui.window me laisse un peu perplexe.

    Voila ce que je cherche a faire :

    Pour l'instant j'ai 3 classes :

    - videoList : Classe qui parse des pages web et met a dispo des methodes pour récupérer les infos necessaires

    - mainWindow(xbmcgui.Window) : Page d'acceuil (fenêtre mère)

    - videoWindow(xbmcgui.Window) : Liste des videos dispos (fenêtre fille)

    1 - mainWindow va donc créer des instances de videoWindow pour chaque menu disponible dans la page d'acceuil

    2 - Chaque instance de videoWindow crée une instance de videoList correspondant à la page selectionnée.

    La re-instanciation des videoWindow a chaque ouverture de menu n'est pas géniale puisqu'elle déclenche des parsings de page web.

    J'ai cru comprendre dans la doc de l'api que je pouvais ouvrir une page non détruite en passant des winId. Je me dis donc que c'est cool et que le vais stocker la liste des fenêtres filles ouvertes dans mainWindow.

    Seulement je comprend pas très bien la suite...

    Je dois faire un truc du genre : ?

    class videoWindow(xbmcgui.Window):  """ Video Window Class inheritate Xbmc window """  def __init__(self, dicId, winId=None):	xbmcgui.Window.__init__(self, winId)	if not winId:	  ... Code d'init de ma fenêtre ...	  self.videoList = videoList(dicId)	  ... Code d'init de ma fenêtre ...

    ou je pourrais aussi très bien stocker mes instances de videoWindow dans mainWindow...

    Bon j'ai pas tester car j'ai pas de Xbox sous la main mais si quelqu'un a des eclaircissement, je suis preneur :D

  14. Merci Alexsolex :)

    Ca avance doucement, mais surement et j'aurais certainement des questions a la con a te poser :D

    Allez, une chtit pour la forme :

    A quoi correspond la proprété "xbmcgui.Emulating" ? Car sauf si je suis aveugle, je la trouve pas dans la doc. C'est déprécié ?

    Thx ++

    EDIT : C'est bon, je viens de capter en allant chercher les py des fichiers d'émulation sur PC :)