elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17
61  Programación / Scripting / Reproductor cli en python en: 10 Diciembre 2011, 17:51 pm
Hola a tod@s:

Estoy haciendo con un conocido un reproductor de música en línea de comandos muy sencillo: Recoge un diccionario con todas las canciones y las reproduce aleatoriamente. Pero tenemos un problema, sólo reproduce la 1ª canción: no pasa a la siguiente ¿Alguien ve el fallo?

Código
  1.  
  2. #!/usr/bin/env python2
  3. #-*- coding: UTF-8 -*-
  4.  
  5. import os, gobject
  6. import pygst
  7. pygst.require("0.10")
  8. import gst
  9.  
  10. from os.path import join, getsize
  11. from mimetypes import guess_type
  12. from random import shuffle
  13.  
  14. gobject.threads_init()
  15.  
  16. class AllFromDirectory():
  17.  
  18. def __init__(self, directory):
  19. self.directory = directory
  20. self.biblio = dict()
  21. self.autoid = 0
  22.  
  23. def get(self):
  24. for root, dirs, files in os.walk(self.directory):
  25. for self.filen in files:
  26. self.mime = guess_type(self.filen)
  27. self.auxmime = str(self.mime[0])
  28. self.endmime = self.auxmime.split(os.sep)
  29. if self.endmime[0] == "audio":
  30. self.biblio[self.autoid] = root+os.sep+self.filen
  31. self.autoid = self.autoid + 1
  32.  
  33. return self.biblio
  34.  
  35. def getLen(self):
  36. return len(self.biblio)
  37.  
  38.  
  39. class Player():
  40. def __init__(self):
  41.  
  42. # Obtenemos la lista de archivos
  43. x = AllFromDirectory(directory)
  44. self.biblio = x.get()
  45. self.total_tracks = x.getLen()
  46. self.numeros = range(0, int(self.total_tracks))
  47. shuffle(self.numeros)
  48. self.n = 0
  49.  
  50. self.create_pipeline()
  51.  
  52. def create_pipeline(self):
  53.  
  54. n = self.numeros[0]
  55.  
  56. self.song = self.biblio[n].split(os.sep)
  57. print 'Reproduciendo: '+self.song[-1]
  58.  
  59. cdsrc = 'filesrc location="%s" name=file ! decodebin ! volume name=volume ! alsasink' % (self.biblio[n])
  60. self.pipeline = gst.parse_launch(cdsrc)
  61.  
  62. bus = self.pipeline.get_bus()
  63.  
  64. bus.add_signal_watch()
  65.  
  66. bus.connect("message::tag", self.bus_message_tag)
  67. bus.connect("message::error", self.bus_message_error)
  68. bus.connect("message::eos", self.nexts)
  69.  
  70. self.pipeline.set_state(gst.STATE_PLAYING)
  71.  
  72. self.loop = gobject.MainLoop()
  73. self.loop.run()
  74.  
  75. def bus_message_error(self, bus, message):
  76. e, d = message.parse_error()
  77. print "ERROR:", e
  78. #exit(1)
  79.  
  80. def bus_message_tag(self, bus, message):
  81.  
  82. """Esta es la función encargada de recoger los datos del bus de Gstreamer, principalmente los tags de los ficheros de audio"""
  83. self.tags = ''
  84. #we received a tag message
  85. taglist = message.parse_tag()
  86. #put the keys in the dictionary
  87. for key in taglist.keys():
  88. try:
  89. self.file_tags[key] = taglist[key]
  90. except:
  91. return False
  92.  
  93. try:
  94. self.tags += self.file_tags['title'] + " "
  95. except:
  96. self.tags += "Título desconocido."
  97.  
  98. try:
  99. self.tags += "de: "+self.file_tags['artist']+"\n"
  100. except:
  101. self.tags += "Artista desconocido."
  102.  
  103. self.song = self.tags.split(os.sep)
  104. print 'Reproduciendo', self.song[-1]
  105.  
  106. def nexts(self, w, *args):
  107.  
  108. if self.n < self.total_tracks:
  109. self.n += 1
  110. else:
  111. self.n = 0
  112.  
  113. n = self.numeros[self.n]
  114. self.song = self.biblio[n].split(os.sep)
  115. print 'Reproduciendo: '+self.song[-1]
  116.  
  117. self.loop.quit()
  118. self.pipeline.set_state(gst.STATE_NULL)
  119. self.pipeline.get_by_name('file').set_property('location', self.biblio[n])
  120. self.pipeline.set_state(gst.STATE_PLAYING)
  121. self.loop.run()
  122.  
  123. directory = '/media/HD/Música'
  124. mega = list()
  125.  
  126. p = Player()
  127.  
  128.  
62  Sistemas Operativos / GNU/Linux / problema con metadistro debian en: 3 Agosto 2011, 17:39 pm
Hi all

Tengo un problemilla: Estoy tratando de generar una metadistro de Debian, instalable, utilizando live-helper.

Genera bien la iso live, el problema es que necesito hacerlo instalable: uso el parámetro --debian-installer true  , pero solo consigo que se instale un debian estándar sin los paquetes que yo incluí a mano (los incluyo con lh config --packages "nombre_paquete1 nombre_paquete2 nombre_paqueteN"). Nota: en modo live, la misma iso tiene los paquetes que configuré.

¿Cómo hago para que instale la distro estándar con los paquetes que le configuro?
¿Hay algúna herramienta para debian que permita instalar un cd live en el disco duro?

Thanks!
63  Programación / PHP / Problema con Symfony (Doctrine) en: 4 Julio 2011, 00:49 am
Estoy intentando crear una página web sencilla son sf (1.4..12, doctrine).

El error me sale intentando generar el módulo. Pongo lo siguiente:

Código:
serch@serch-server:/home/sf/symfony-1.4.12$ sudo ./symfony doctrine:generate-module frontend robot Robot

Y me devuelve esto:

Código:
PHP Fatal error:  Class 'BaseFormDoctrine' not found in /home/sf/symfony-1.4.12/lib/form/doctrine/base/BaseRobotForm.class.php on line 14
[?php use_stylesheets_for_form($form) ?]
[?php use_javascripts_for_form($form) ?]

[?php

/**
 * Project form base class.
 *
 * @package    inventario
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormBaseTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
abstract class BaseFormDoctrine extends sfFormDoctrine
{
  public function setup()
  {
  }
}
[?php

/**
 * Project form base class.
 *
 * @package    inventario
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormBaseTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
abstract class BaseFormDoctrine extends sfFormDoctrine
{
  public function setup()
  {
  }
}

Fatal error: Class 'BaseFormDoctrine' not found in /home/sf/symfony-1.4.12/lib/form/doctrine/base/BaseRobotForm.class.php on line 14
serch@serch-server:/home/sf/symfony-1.4.12$

Soy nuevo en SF y ando bastante perdido (Si, otro día empiezo con el jobeet, pero hoy quiero acabar esto!  :-\)

¿Alguna idea?
64  Programación / Scripting / py2exe y bitrock en: 28 Abril 2011, 19:11 pm
A ver si pueden ayudarme: Tengo un scrpt en python que usa TKInter, el cual funciona en w7, vista y XP (Y gnu/linux) pero, al pasarlo a exe con py2exe y al crear un instalador bitrock, deja de funcionar en vista (Tampoco en 7, pero en 7 se soluciona con el modo de compatibilidad XP)

¿A alguien se le ocurre algo?

Pd. no puedo publicar el code
Pd2. Me corre bastante prisa, se lo agradecería bastante al que me pueda ayudar
65  Programación / Scripting / Weather tkinter (Python) en: 6 Marzo 2011, 20:07 pm
Bueno, ya que hace tiempo que no me paso por aquí, voy a dejaros algunos programillas simples que he hecho.

Weather TKinter es un scrpit, que usa TKinter, que imprime en un cuadro de texto datos meteorológicos del código postal que pongas (En España). Utilizo Google Weather API, y no uso el módulo de XML de python, porque cuando escribí el programa, ni sabía que existía (Por eso me ha quedado poco claro el código  :-[ )

Código
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # By Sergio López
  5. # GPLv3
  6. # http://daemonfreedom.blogspot.com/
  7.  
  8. try:
  9. from Tkinter import *       #For GUI
  10.  
  11. except ImportError:
  12. print "Weather Tkinter: No se encuentra python-tk.\nPara instalar el paquete en su equipo:\nsudo apt-get install python-tk\n\n"
  13. exit(1)
  14.  
  15. import urllib2              #For urlopen
  16.  
  17. class Application(Frame):
  18. """For GUI Aplication"""
  19.  
  20. def __init__(self, master=None):
  21. Frame.__init__(self, master)
  22. self.grid()
  23. self.myvar =StringVar()
  24. self.createWidgets()
  25.  
  26. def createWidgets(self):
  27. self.listfromfile =[]
  28. print "Weather Tkinter: createWidgest"
  29. self.cpLabel = Label(self, text="Código postal:")
  30. self.aboutLabel = Label(self, text="Weather\nTkinter")
  31. self.webLabel = Label(self, text="Mas app's: daemonfreedom.blogspot.com ")
  32. self.textEntry = Entry(self, textvariable=self.myvar)
  33. self.okButton = Button ( self, text='Ok', command=self.okAction )
  34. self.impButton = Button ( self, text='Imprimir a archivo', command=self.imptofile)
  35. self.quitButton = Button ( self, text='Salir', command=self.quit )
  36. self.textZone = Text(self, height=8, width=30)
  37. self.bmZone = Text(self, height=4, width=9)
  38.  
  39. self.cpLabel.grid(row=1, column=1)
  40. self.aboutLabel.grid(row=3, column=3)
  41. self.webLabel.grid(row=2, column=1)
  42. self.textEntry.grid(row=1, column=2)
  43. self.okButton.grid(row=1, column=3)
  44. self.impButton.grid(row=2, column=2)
  45. self.quitButton.grid(row=2, column=3)
  46. self.textZone.grid(row=3, column=1)
  47. self.bmZone.grid(row=3, column=2)
  48.  
  49. def okAction(self):
  50. print "Weather Tkinter: Ok"
  51. self.textZone.delete(1.0, END)
  52. self.myvar = self.textEntry.get()
  53. self.imp =self.genWeather(self.myvar)
  54. self.impList(self.imp)
  55.  
  56. def genWeather(self, cp):
  57. try:
  58. print "Weather Tkinter: genWeather"
  59. self.cad="http://www.google.com/ig/api?weather="+cp+",spain&hl=es"
  60. self.lista = []
  61.  
  62. self.f = urllib2.urlopen(self.cad)
  63. self.down = self.f.read()
  64. self.f.close()
  65.  
  66. for self.element in self.down:
  67. if self.element == "<":
  68. self.cadena =""
  69. if self.element == ">":
  70. self.cadena=self.cadena+">"
  71. self.lista.append(self.cadena)
  72. self.cadena=""
  73. self.cadena =self.cadena+self.element
  74. self.final=[self.lista[4], self.lista[5], self.lista[13], self.lista[14], self.lista[15], self.lista[16], self.lista[18]]
  75. return self.final
  76. except IndexError:
  77. print "Weather Tkinter: Tipo nulo: genWeather"
  78.  
  79. def impList(self, paramtolist):
  80. try:
  81. print "Weather Tkinter: impList"
  82. cont =0
  83. self.state =0
  84. for self.element in paramtolist:
  85. if cont ==3:
  86. self.textZone.insert(END, "Temperatura F: ")
  87. if cont ==4:
  88. self.textZone.insert(END, "Temperatura C: ")
  89. self.textZone.insert(END, self.retSplitXml(self.element))
  90. self.textZone.insert(END, "\n")
  91. cont=cont+1
  92.  
  93. self.listfromfile.append(self.retSplitXml(self.element))
  94. self.listfromfile.append("\n")
  95. print self.listfromfile
  96. except NoneType:
  97. print "Weather Tkinter: Tipo nulo: impList"
  98.  
  99.  
  100. def retSplitXml(self, splitcad):
  101. print "Weather Tkinter: retSplitXml"
  102. self.splitcad = splitcad.split("\"")
  103. return self.splitcad[1]
  104.  
  105. def imptofile(self):
  106. print "Weather Tkinter: imptofile"
  107. wtfile = open("weather.txt", "w")
  108. wtfile.writelines(self.listfromfile)
  109. wtfile.close()
  110.  
  111.  
  112. def main():
  113.  
  114. print "Weather Tkinter: HELLO, This is Weather Tkinter! "
  115.  
  116. app = Application()
  117. app.master.title("Weather Tkinter")
  118. app.mainloop()
  119.  
  120. print "Weather Tkinter: Bye! "
  121. return 0
  122.  
  123. if __name__ == '__main__':
  124. main()

Otras versiones y apuntes: http://daemonfreedom.blogspot.com/2010/11/weather-tkinter.html
66  Informática / Hardware / Problema con Asus PC-DL en: 6 Marzo 2011, 19:49 pm
Hola a todos, hace tiempo que no me pasaba por aquí.

Me han dejado una placa base Asus PC-DL, de esas de doble procesador (Lleva 2 intel xeon)

Venía sin disipadores, así que he tenido que acoplar como he podido (Con un par de bridas) 2 disipadores, y no ha quedado demasiado mal.

El problema viene en que arranco el ordenador, solo con lo básico conectado (Los procesadores, 2 ram's y una gráfica), se enciende todo pero no se ve nada en la pantalla (Pero si se quita el mensaje de que no hay señal). He probado con varias gráficas, incluso he probado con otra placa y pasa lo mismo. La pantalla no es pues la estoy usando con mi PC ahora mismo.

¿Alguna idea?  :-\
67  Informática / Hardware / [SOLUCIONADO] hdd externo en: 17 Julio 2010, 21:57 pm
tengo un problema con mi hdd externo

funcionaba bien hasta que le hice una paritción con sistema de ficheros ext3. (El sistema original, me pone que es msdos)

Ahora al conectarlo a la TV para ver pelis (Que es el objetivo del disco, para eso es hdd) me dice que no reconoce disco. He pensado en formatear, pero no sé si borraré la configuración y tampoco se que formato debo hacerlo

sugerencias?
68  Informática / Electrónica / EEPROM y Arduino en: 17 Julio 2010, 05:55 am
¿Qué es EEPROM?

(Wikipedia) EEPROM o E²PROM son las siglas de Electrically-Erasable Programmable Read-Only Memory (ROM  programable y borrable eléctricamente). Es un tipo de memoria ROM  que puede ser programado, borrado y reprogramado eléctricamente, a diferencia de la EPROM que ha de borrarse mediante un aparato que emite rayos ultravioletas. Son memorias no volátiles.

Las celdas de memoria de una EEPROM están constituidas por un transistor MOS, que tiene una compuerta flotante (estructura SAMOS), su estado normal esta cortado y la salida proporciona un 1 lógico.

Aunque una EEPROM puede ser leída un número ilimitado de veces, sólo puede ser borrada y reprogramada entre 100.000 y un millón de veces.

Estos dispositivos suelen comunicarse mediante protocolos como I²C, SPI y Microwire. En otras ocasiones, se integra dentro de chips como microcontroladores y DSPs para lograr una mayor rapidez.



Añadir la cabecera EEPROM


Basta con incluir la directiva #include <EEPROM.h> en nuestro código.

Funciones:



 EEPROM.write(dirección, valor)


Escribe un valor en la EEPROM.

Dirección (Address): Disponemos de 511 celdas (int)
Valor (Value): Disponemos de 0 a 255 Tipo Byte)

 EEPROM.read(dirección)


Lee un valor de la EEPROM

Value (Address): Disponemos de 511 celdas (int)

Retorna: Byte. (Podemos hacer cast a int)

Código de ejemplo (Desde la página oficial de Arduino)

   WRITE

Código
  1. #include <EEPROM.h>
  2.  
  3. void setup()
  4. {
  5.  for (int i = 0; i < 512; i++)
  6.    EEPROM.write(i, i);
  7. }
  8.  
  9. void loop()
  10. {
  11. }

   READ
Código
  1. #include <EEPROM.h>
  2.  
  3. int a = 0;
  4. int value;
  5.  
  6. void setup()
  7. {
  8.  Serial.begin(9600);
  9. }
  10.  
  11. void loop()
  12. {
  13.  value = EEPROM.read(a);
  14.  
  15.  Serial.print(a);
  16.  Serial.print("\t");
  17.  Serial.print(value);
  18.  Serial.println();
  19.  
  20.  a = a + 1;
  21.  
  22.  if (a == 512)
  23.    a = 0;
  24.  
  25.  delay(500);
  26. }
  27.  

*Aviso:   Como bien se avisa en la página de Arduino, el datasheet del EEPROM del microcontrolador Atmega 168 solo soporta unos 100000 ciclos de escritura/sobreescritura. Ahora la mayoría de los Arduinos vienen con Atmega328p, me imagino que la vida de EEPROM se habrá alargado, aún así agradecería que alguien buscara en el datasheet.
69  Foros Generales / Foro Libre / Sitios con wifis libres en: 16 Julio 2010, 22:50 pm
¿Conocéis sitios en España (Por toda España) con acceso a redes wifi libres? (Por ejemplo centro comerciales, parques, cosas así)

El acceso debe ser libre. ¿Alguien me ayuda? Es para un blog, par reunir todos estos puntos  :)
70  Programación / Programación C/C++ / 3D en C en: 16 Julio 2010, 03:47 am
(Directamente desde mi blog)

Cualquier persona puede creer que hacer gráficos en 3 dimensiones, programando en C, es algo absurdo e innecesario. Pero, realmente es algo útil, pues con el mas simple ejemplo de rotar un cubo, tenemos que aplicar operaciones con 8 vértices a la vez, ala par de controlar zonas visibles, etc.

Y ya que hablábamos del cubo, vamos a poner ejemplos, en primer lugar, con un cubo.

Antes de empezar, decir que trabajamos con la cabecera graphics.h desde Borland C++ 3.1 (No es estándar, desgraciadamente).

Una vez tengamos el entorno preparado, debemos clasificar nuestro programa en 2 partes: Operaciones y database.

En operaciones, evidentemente, haremos las operaciones básicas del cubo, crearlo, moverlo, etc.

En database, almacenaremos los distintos valores que necesitemos: En el caso de un cubo, nos sobra con las posiciones de los vértices. Si deseamos crear movimiento en el cubo, necesitamos que nuestros datos sean completamente accesibles (No usar constantes) y a ser posible, poder acceder lo mas rápidamente a ellos. Por ello, una de las mejores es crear estructuras para cada uno de los objetos (No confundir con objetos de POO).

Por lo cual, para dibujar un cubo, necesitaremos mínimo 8 vértices, los cuales podemos crear de esta forma:

Código
  1.    typedef struct vertices
  2.    {
  3.    int ver0;
  4.    int ver1;
  5.    int ver2;
  6.    int ver3;
  7.    int ver4;
  8.    int ver5;
  9.    int ver6;
  10.    int ver7;
  11.    } vertices;
  12.  


También podríamos crearlo con punteos para optimizar el rendimiento. Y para los mas vagos, podemos crear solamente un vector de la siguiente forma:

Código
  1.    int vertices[8];

Tras definir esta parte (la base de datos para el objeto) debemos pasar a construirlo. Para ello debemos distinguir 2 partes, el cuadrado superior y el inferior.

Al superior, le corresponden los vértices del 0 al 3, y al inferior, del 4 al 7.



Para dibujarlo, nos basta con usar la función line. Una línea del vértice 0 al 1 y del 0 al 2. Por igual, otra del 3 al 2 y del 3 al 1. La misma operación con el cuadrado inferior. Para terminar el cubo, faltan 4 líneas, uniendo los vértices: Del 0 al 4, del 2 al 6, del 1 al 5 y del 3 al 7.

Una vez formado, podemos modificar su forma, o moverlo, modificando los valores sobre la base de datos, pero, ¿Cómo hacemos para eliminar la parte oculta?


Métodos de Espacio-Objeto

Hay varios métodos para eliminar las "Partes traseras" de nuestros objetos. Y es que, como comprenderéis, no es necesario mantener algo que no vemos.

Método 1: Preclasificación Radial: El mas sencillo, si conocemos con adelanto la dirección desde la cual será visto el objeto, el programa solo creará las partes visibles.

Pros: Ahora memoria y optimiza la velocidad.
Contras: Incapacidad de rotar y ver el objeto desde otros ángulos de visión.

Método 2: Clasificación Radial: El programa determina que partes son visibles y cuales no, dependiendo del ángulo de visión. Esto se calcula, generalmente (Aunque no únicamente) con la posición de los vértices.

Pros: Rápida ejecución.
Contras: Hace demasiado uso de la base de datos, lo que puede llegar a ser pesado.

Método 3: Ecuación del plano: Utilizando el producto vectorial, es posible determinar la posición de los planos, por lo que el programa puede determinar que parte mostrar y cual no.

Pros: Hace poco uso de la base de datos.
Contras: Es mas lento, respecto a los 2 otros métodos.

Por lo tanto, qué método es mejor para ocultar las superficies no visibles de un cubo?

Dependiendo de si lo vamos a rotar:

Si no queremos rotarlo: Evidentemente, la preclasificación radial, optimiza la memoria y la db.

Si queremos rotarlo: Una mezcla de la clasificación radial y la ecuación de plano puede ser bastante óptimo: En vez de tomar como valor el producto, podemos usar la posición de los vértices para determinar lo oculto y lo visible.

En futuras entradas, explicaré métodos de rotación y distintos objetos.
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines