LSI-TEC vacantes abiertas para los programadores

25 de febrero 2008 · Publicado en Bla Bla Bla , C / C + + , Linux · Ver Comentarios

El LSI-TEC , que forma parte de la empresa Laboratorio de renombre internacional de la gestión integrada sitema USP, está buscando talentos para trabajar en el desarrollo de proyectos relacionados con la TV Digital.

Requisitos:

  • C, C + + o Java;
  • Sitema Linux embebido;
  • Subversión;
  • Autotools;

Ubicación:
Universidad de Sao Paulo - Ciudad Universitaria Campus

Las partes interesadas pueden enviar su currículum vitae a:
Hillel Becher <hilel@lsi.usp.br>

Laboratorio de Sistemas de Tecnología Integrada
Sistemas Integrados de Laboratorio

Migración del servidor de blogs

23 de febrero 2008 · Posted in Blog , MySQL · Ver Comentarios

Aprovechando que el blog está teniendo dificultades técnicas, me decidí a cambiar de servidor y actualizar la versión de WordPress roto.

Los detalles de la actualización de WordPress pueden variar de una versión a otra y se puede encontrar en el sitio .

Podría usar las opciones de importación / exportación de WordPress en sí, pero uno de los problemas con el proveedor de edad, fue que yo no era capaz de acceder a la zona de administración del blog. Sin siquiera hacer una sola carga de cualquier cosa que yo ya no podía entrar en el blog y la respuesta que obtuve fue el proveedor:

"... Contactar con los desarrolladores de WordPress ..."

Entonces decidió ponerse en contacto con un competidor y migrar a la uña ...

La amortización antes usé eran bastante simples, y son los siguientes:

Contratar el nuevo proveedor

Hice algunas búsquedas en Internet, consultar sus amigos, y al final era sólo llenar un formulario, el número de tarjeta de crédito y esperar la confirmación del pago.

De reserva

Mientras esperaba la confirmación de que el nuevo proveedor, que se copia de seguridad del blog. Como he tenido mucha "basura" instalado, me decidí a volver justo arriba de la base de datos con los postes, y utilizar una versión bastante limpia de WordPress.

Para una copia de seguridad de MySQL que usa uno de sus línea de comandos mysqldump herramientas. Una de las características más interesantes (en mi opinión) de MySQL y sus herramientas, es la capacidad para utilizar de forma remota. Esto me ha salvado la piel varias veces en tiempos de Administrador de Sistemas.

La orden fue simple:

  =my.old.mysqlserver user @ host: ~ $ mysqldump - host = my.old.mysqlserver 
              - User = miusuario - password 
              mybkp.sql - Bases de datos myblogdatabase> mybkp.sql 

= My.old.mysqlserver-host: Conéctese a la máquina donde está mi base de datos MySQL
-User = miusuario: Usar este servidor para la conexión.
-Contraseña: Haz una solicitud de contraseña. Si yo quisiera introducir la contraseña de forma directa, podría haber hecho-password = mypass.
Myblogdatabase bases de datos: hacer un volcado de todos los 'myblogdatabase' las tablas de base de datos, utilizado por mi blog.
> Mybkp.sql: redirigir la salida a un archivo.

Mysqldump genera todo el código SQL necesario para recrear la base de datos en el mismo estado que estaba.

La restauración de datos

Al principio del archivo de volcado es la referencia a la antigua base de datos. Si la nueva base de datos tiene un nombre diferente, debe editar el archivo de volcado. Esto se puede hacer con la sed de comandos:

  s /` olddatabase `/` newdatabase `/ mybkp.sql > mynewbkp.sql user @ host: ~ $ sed s / olddatabase `` / `` newdatabase / mybkp.sql> mynewbkp.sql 

La recuperación es muy simple, utilizando el indicador de mysql:

  =my.new.mysqlserver --user =myuser --password user @ host: ~ $ mysql - host = my.new.mysqlserver - user = miusuario - password
 mysql> use newdatabase;
 mysql>.  mynewbkp.sql 

Este logamos, entramos en la nueva base, aún vacía, y hacer un archivo de volcado de lleno con las instrucciones SQL para crear las tablas y los datos del antiguo al nuevo.

Actualización de WordPress

WordPress actualización sigue los pasos básicos de la instalación : descargar, descomprimir, mover el contenido a la ubicación deseada y editar el archivo wp-config.php.

Finalmente, con el navegador, ejecutar el archivo

http://my.blog.root.path/bla/bla/bla/wp-admin/upgrade.php

Y ¡voilá! Usted recibirá una contraseña aleatoria para el usuario admin, solo inicio de sesión.

La creación de WordPress

Cuando el proveedor ofrece el servicio, por lo general proporciona dos formas de acceder a las características del sitio. Uno de ellos es la manera estándar de utilizar su dominio como la dirección, ya que el otro proporciona la misma capacidad que una URL extraña. Hoy me di cuenta por qué: mientras que el proveedor de DNS fue nombrado a la primera, que accedió a la url en el proveedor de nuevo y extraño sin interferir con la (mal) funcionamiento del sitio antiguo.

Después de WordPro instalado, cualquier intento de acceder a los contenidos, redirige al blog de edad. Entonces me acordé de que hay dos opciones para configurar la dirección URL en el blog. Fue suficiente para saber donde estaba en la base de datos. Siguiendo la lógica de los nombres de tabla, llegó a la wp_options mesa.

Con la herramienta GUI de MySQL Query Browser, cambiar los campos 'option_value' que corresponden a la opción 'option_name' de los campos SiteUrl 'y' casa 'a la url extraño, y comencé a usar y disfrutar de ella durante la migración, durante la instalación de plugins y temas . Cuando todo termine, he cambiado el DNS y, finalmente, restaurar los valores originales de las opciones. Esta línea de comandos se vería así:

  ; mysql> select * from límite wp_options 1;
 +-----------+---------+-------------+------------- ------------+----------+
 blog_id | option_name | option_value | autoload | | Option_id | blog_id | option_name | option_value | carga automática |
 +-----------+---------+-------------+------------- ------------+----------+
 | 0 | siteurl | http: // mydomain.com / etc | yes | | 1 | 0 | SiteUrl | http:// mydomain.com / etc |  |
 +-----------+---------+-------------+------------- ------------+----------+
 ( 0.00 sec ) 1 row in set (0.00 sec)

 ; mysql> select * from wp_options donde option_value = 'http://mydomain.com/etc;
 +-----------+---------+-------------+------------- ------------+----------+
 blog_id | option_name | option_value | autoload | | Option_id | blog_id | option_name | option_value | carga automática |
 +-----------+---------+-------------+------------- ------------+----------+
 | 0 | siteurl | http: // mydomain.com / etc | yes | | 1 | 0 | SiteUrl | http:// mydomain.com / etc |  |
 | 0 | home | http: // mydomain.com / etc | yes | | 40 | 0 | inicio | http:// mydomain.com / etc |  |
 +-----------+---------+-------------+------------- ------------+----------+
 ( 0.00 sec ) 2 rows in set (0.00 sec)

 option_value = 'http://url.estranha.com/etc' mysql> update wp_options septiembre option_value = 'http://url.estranha.com/etc' 
        donde option_value = 'http://mydomain.com/etc;
 0.02 sec ) Query OK, 2 filas afectadas (0,02 seg)
 Warnings: 0 Líneas correspondientes: 2 Cambiado: 2 Advertencias: 0

 mysql> 

El comando SQL fue el primero en saber que los campos de la tabla, el segundo para comprobar qué opciones tienen la misma URL, y el tercero, finalmente, la actualización. Después de eso, el blog ya está apuntando a la dirección de trabajo correcta, y el regreso se puede hacer a través del sitio normalmente.

Conclusión

Migrar un blog en el clavo no es la mejor opción, ya que el riesgo de perder todos los datos. Acabo de recibir esta cerca, porque sé un poco sobre el funcionamiento de WordPress y las herramientas de todo. Sin embargo, tuve mis momentos de suspense. A pesar de mantener un hogar separado de los puestos de trabajo, que no pudo salvar a sus comentarios y opciones en general. En cierto modo, era bueno para mí para obtener inteligentes e ir haciendo mis copias de seguridad semanales del sitio.

Patxi !!!!!!!!!!!

18 de febrero 2008 · Posted in Eventos · Ver Comentarios

Cómo muchos blogs se han reportado como el diario de Campus Party Brasil, sería redundante si yo hago lo mismo. En realidad, lo hice porque no podía, y es la razón por la que no podía, yo voy a decir aquí.

Después de la llamada del amigo ya un gran Gustavo Gonzales, publicado en la BR-linux , yo tomé lo que era un "vacaciones" y decidió solicitar un puesto como voluntario para trabajar en la Campus Party. Yo ya como voluntarios en proyectos de software libre, pero sería asistir físicamente a la primera vez.

Me puse en contacto, correo electrónico hojas de vida (que era de voluntarios a nivel técnico), y el carnaval el lunes, recibí un correo electrónico pidiendo a asistir a la construcción de la Bienal en el Ibirapuera en la tarde del martes.

Una vez allí, me presentaron a Polkan (Colombia) y Pablo y Samira (España), lo que sería de nuestros ingenieros. Sabemos dónde está el caso y estaría dispuesto a estar allí al día siguiente. Esperaron unos 30 voluntarios, y hubo numerosos 2. Y ahora también gran amigo, Franci.

Nos fuimos a casa con la misión de encontrar más voluntarios hasta el día siguiente. A pesar de todas las circunstancias el punto por el contrario, tiene el apoyo de mi amigo Gerard. Muy contento con él, llamé a un amigo de la infancia, Fernando, en Río de Janeiro, y lo convenció de venir a São Paulo para ser voluntario. El que está siempre dispuesto a ayudar a pagar el bolsillo prórpio y llegó justo para ser voluntario. Me hace tan feliz que dixou llama mi novia, Luciana, el Espíritu Santo, y la convenció de tomar un avión para venir aquí.

Miércoles de Ceniza - 06/02/2008

Busco y Geraldo carretera Fernando de la mañana, las maletas, nos tomamos un café en un padoca cerca y fue a Ibirapuera. Una vez allí, encontrar la Franci, junto con James y Patricia (feliz) y fue a trabajar. Misión: Llevar a cabo y desembolsar las tablas de más de 50 km de cables de red (sí, 50.000 metros de cable de red !!!). Sin embargo, el mayor desafío era entender lo que los ingenieros querían. El enigma de Babel, se resolvió a través de un enlace de tres vías: Se habló lentamente en español, que respondió con lentitud en portugués, y nos hizo la banda insiste en Inglés. Pedazo de la torta!

Al final del día tratan de Luciana en el aeropuerto y nos fuimos todos a la cama agotado de arresto por cable.

Jueves - 07/02/2008

Antes da Tempestade No parecía haber más voluntarios. Estábamos haciendo el trabajo de las seis y media. Hemos hecho un pacto de silencio para dar todo lo posible para asegurar que la infraestructura de red que esté listo a tiempo. Nosotros usamos los trucos aprendido el día anterior y coordinar un equipo de apoyo del Banco a fin de mantener los cables. Probamos más de 5 000 RJ-45. En este día, comenzamos a perder la noción del tiempo. Los informes de aquí puede haber dañado la línea de tiempo. Tenemos a nuestra disposición tres verbos: comer, dormir, trabajar. La nota del día fue la idea de comprar los guantes de albañil. Salvaron la mano de los desarrolladores :)

Viernes - 08/02/2008

Desde el primer día vimos que el lenguaje sería una dificultad, pero no un impedimento. Nos enteramos de que más importante que dar y / o recibir las órdenes, iba a entender y ser entendido.

Estamos poniendo a prueba los conectores, y el final del día, más de dos mil metros de fibra debería ponerse en marcha y cuidadosamente protegido en canales de madera pesada y húmeda. La mitad de la fibra fue puesto en libertad. La fecha límite se acercaba. Tensión en todos los lados. No podíamos fallar. Nos comprometemos a ello.

Después de mucha insistencia, Fernando Pablo invitado a abandonar con nosotros para una charla informal en potuñolish, por supuesto!

Sábado - 09/02/2008

Ninho de Mafagafos Cuatro horas de sueño después de que el viernes por la mañana empezamos a colocar los canales para proteger a la primera mitad de la fibra en marcha el viernes, y le dio un montón de problemas. El gran problema para el resto de la fibra de lanzamiento, fue que tenía que ser lanzado en un momento en que se produjo un movimiento de personas, como una cascada podría dañarla. Ella tuvo que ser liberado con cuidado y protegido, o cualquier trabajo podría estar comprometido. Ese momento llegó sólo al caer la tarde, y con menos gente dando Pitaco, ponemos en marcha el resto de la fibra con mayor rapidez. Sin embargo, la noche varamos fibra de lanzamiento. Punto de Luciana, quien después de un anónimo transformar el haz de fibras inicial en un nido de Balrog, los desembolsos y organizó todos uno por uno, en gran medida la aceleración de la eliminación de la misma después del evento.

Domingo - 10/02/2008

Jantar Pruebas, parches, configuraciones y dispositivos. Todo debe estar funcionando sin importar el esfuerzo. El evento comenzará el día siguiente. Trabajamos para un momento como este, donde el sol dormía en un tiempo. Reportamos nuestra jornada de trabajo durante el evento. Los seis que trabajan desde las 23:00 hasta las 07:00 pm del día siguiente. Los otros cambios serían garantizados por la Fundación Vanzolini cariñosamente cambiar durante el evento, por campuseiros, Fundación [no, no lo voy a escribir aquí !!!].

Nos fuimos a casa con un solo objetivo en mente: el sueño. Y lo único que hicimos para el día siguiente.

Lunes - 11/02/2008, El gran día

Antes de ser atropelado pela manada de Reporterontes Llegamos al evento justo antes de la inauguración oficial. Tuve el honor de ser atropellado y casi pisoteado por una manada de Reporterontes frenético que acompaña a nuestro Ministro de Cultura. Creo que los rinocerontes han sido más cortés. A diferencia de ellos, el ministro era amable y educado. Un ejemplo a seguir.

Abertura do Campus PArty Brasil 2008

A partir de ahí, hemos trabajado noche y trató de disfrutar el día del evento. Sueño? "El sueño es para los débiles" y que sorprendió a los colombianos a nuestros amigos: "Los brasileños no son humanos", sus palabras ...

La cobertura tradicional:

Lunes , Martes , Miércoles , Jueves , Viernes

El Downers

Aunque prometió durante el registro, sin fuente alternativa para los que había restricciones en la dieta. Para mí, la comida estaba bien, pero muchos vegetarianos se quejaron con razón, porque casi todo lo que había carne, y recibió una sonrisa burlona en la respuesta. Que he visto. Lamentable. Lo peor es que el único lugar que venden comida dentro de pagar una fortuna. Obligando a los participantes a salir del parque a comer un sándwich, y ser excluido de la seguridad más adelante. ¡Qué vergüenza!

Sobras de brindes sendo recolhidas, com conteúdo descartado à esquerda El Trofeo "Dama de la semana" va a una empresa de telecomunicaciones, el principal patrocinador del evento, que a diferencia de las demás empresas en el evento, se negó a presentar los voluntarios con una mochila llena de propaganda. El más ridículo fue la excusa:

"Los voluntarios no tienen derecho a hacer las mochilas. Las bolsas son para los suscriptores de pago. "

Vale, vale, debe ser contado, ¿verdad? Mal. Los muchos que se quedaron se reunieron en la tarde del domingo. Detener todo. Me presenté como voluntario, traído a amigos desde lejos, teniendo nuestro propio dinero para ayudar a construir una infraestructura de red que era publicidad para esa empresa. Entonces escucho que no tengo "derecho" a hacer un brindis. En primer lugar, eran voluntarios. Fuimos allí por voluntad propia. Sin costo alguno. Sin esperar nada a cambio. A continuación, una hora libre, yo estoy como un cliente potencial de la compañía y el hecho de que la placa dice "Asistencia técnica", lo que significa que se pasó la mañana ayudando a asegurar que otros potenciales clientes utilizan la red de la misma empresa, he "derecho" a acceder a los materiales de marketing de la misma empresa? No es poco una paradoja?

El punto aquí no es el tema que quiero hacer un brindis. La cuestión es que yo, como un cliente potencial fue completamente ignorado simplemente porque trabajaba en el evento. En la Constitución se le llama discriminación. En un sentido que no pasará hambre, ya que no reciben un regalo que no cuesta más de $ 10.00, así que estoy interesado en llevar una pequeña bolsa verde para hacer propaganda gratuita, ya que uso un Targus de que me sirve muy bien. El punto es que, dado que esta empresa fue el principal beneficiario del evento, me sentí utilizada principalmente para trabajar de forma gratuita para su propio bien. Por estas y otras, yo no era su cliente el año pasado, y yo no me arrepiento.

Esto es bueno: viernes, regresó a su casa para recoger las bolsas de Luciana, volvería al Espíritu Santo en la madrugada del sábado. Acabamos de llegar a la Ibirapuera después de la medianoche. Al intentar entrar en la puerta 3 como de costumbre, se impidió por la seguridad del parque, que afirmó haber recibido órdenes de no dejar entrar a nadie. Se negaron a llamar a la organización, lo cual es muy irónico e irrespetuoso. Detalles: Todos los barriles fueron debidamente acreditados y el evento insignia, y más, las personas que estaban allí para trabajar, todos los demás (quince personas) procedían de ciudades lejanas y atención a dormir en las tiendas del evento. Se prohibió el ingreso del sueño. No se les negó la entrada a los extranjeros a dormir. Hemos tenido problemas para hablar con la organización por teléfono porque los teléfonos no funcionan bien en el interior del edificio. Resultado: dos horas que se prohibió en la puerta hasta que un campuseiro acompañar a una chica a salir y se interesan en el tema. Rápidamente se corrió a la asistencia técnica y advirtió a nuestros socios. Quince minutos después se produjo una "magia" para que todo el mundo por venir. El pie. El coche se detuvo fuera del parque para hablar con la organización (que dijo que no sabía de cualquier orden), y enviar de vuelta la entrada gratuita, el coche ahora.

Otra buena: Voluntarios de multa por cinco minutos tarde a cambiar el ticket de aparcamiento azul. Mira, el hombre sale de su casa, va a trabajar de forma gratuita en Ibirapuera gusto comprar un conjunto de despido de cuentas y recibir una multa por trabajar de forma gratuita y con retraso de cinco minutos para renovar el boleto fue pagado. No hay derecho a quejarse. Estacionamiento voluntario no tiene derecho a ... es suave?

Partido Alternativa: Axe clase. En serio, nadie se merece! En el medio de la noche! Peor aún, se pública! Y ambos tenían dos temas de interés público ...

No pidas una foto con el perro rabioso. Luciana lo hizo! : (

Puntos positivos

Radar Saber M60 La innovación tecnológica más importantes han presentado un evento de Microsoft: Con un ancho de banda disponible de 5.5Gbps, que conduce a la increíble y sin precedentes caso de instalación de MSN cd. ¿Cómo podría vivir sin ella hasta ahora?

El nivel de las conversaciones que asistieron (sin dormir :) ) Creo que, en línea con el enfoque del evento.

La animación de la multitud. Patxi !!!!!!!!!!!

La presencia del perro rabioso.

Ver nuestro viejo amigo Radar Saber M60 del Ejército brasileño.

Una conferencia de Mark Bridges. Honestamente, uno de los más impresionantes que he visto nunca. Te hace sentir orgullosos de nosotros mismos, de nuestros esfuerzos. Sólo por escuchar y ver los ojos brillantes cuando se habla del significado de representar al país en algo único. No se puede describir con palabras. Fue el único orador de una ovación de pie durante varios minutos. Esta experiencia fue uno de los que le prestó el dinero.

Creo que el mayor punto a favor fue tener la oportunidad de intercambiar experiencias con personas de diferentes países. Hemos hecho grandes amigos que quedará para siempre. Hemos aprendido, entre otras cosas, que el lenguaje no será un obstáculo, siempre y cuando el respeto y la buena voluntad. La responsabilidad, la amistad y el compromiso, puede obligarnos a hacer cosas que normalmente consideramos imposible. No hablamos portugués, no hablan Inglés, no hablaba español. Estábamos hablando de algo que fue suficiente para desarrollar la sinergia que nos ha llevado a alcanzar nuestras metas.

Lo más importante fue que a pesar de que normalmente no trabajan con la infraestructura de red y el apoyo, nos divertimos mucho. Incluso convirtiendo la noche en el Servicio, incluso si apenas dormir durante dos semanas. Lo que se llevó a casa de la Campus Party fue un tesoro más precioso que el oro. No hay dinero que pagó.

"Espere un momento, por favor"

Yo no podía dejar de mencionar a Gustavo, que vino de Colombia sin hablar portugués, con sólo un diccionario de bolsillo. El primer día que confesar que miré y pensé: "diccionario a mano? pero esto no es sólo en el cine? "Una semana más tarde el hombre estaba casi hablando portugués con fluidez. Yo no vengo con la cosecha que el español es similar al portugués, portugués chico estaba hablando de la verdad! Insistió en lograr. Notable. Lo curioso es escuchar a él, "Espera un momento, por favor", dijo la frase cada vez que iba a buscar cualquier palabra en el diccionario.

Acabado

Después de las 14:00 horas del domingo, desmontó todo el equipo y recoger las fibras. Deshacer es mucho más fácil de hacer ...

Por la noche, a pesar de que llevar a nuestros amigos extranjeros para la reunión de la social Mongers Sao Paulo Perl traspasado esa noche.

Doy las gracias a todos los que trabajaron con nosotros y nos dieron su sudor a la Campus Party Brasil fue todo un éxito.

Algunas fotos de los bastidores se puede comprobar este vínculo .

A partir de QT, Parte II - Señales, Tragaperras y temporizadores

01 de febrero 2008 · Escrito en C / C + + , Qt · Ver Comentarios

En este post he seguido con el juego para hacer pequeños tutoriales para principiantes en el intervalo QT. Esta vez voy a mostrar cómo crear sus propias señales y slots y cómo manejar un temporizador.

El código fuente se puede encontrar en este enlace .

El programa de ejemplo es un contador de tiempo que va a utilizar la clase QTIME , una de las principales clases de QT, y le mostrará el estilo de visualización LCD con una calculadora a la clase QLCDNumber .

QT y temporizadores

Los temporizadores de apoyo más básicas en el intervalo QT se encuentra disponible en la clase que proporciona métodos QObject QObject:: horaInicio () y QObject:: KillTimer () . El primer método devuelve un identificador único y el segundo temporizador finaliza el temporizador a través de esta identificación.

Para que esto funcione, sin embargo, el trozo de código que utiliza este mecanismo debe estar dentro de un "bucle de eventos". Una vez que el temporizador se comenzó de vez en cuando (tiempo de espera) hace que una aplicación Dispater QTimerEvent , lo cual interrumpe el flujo normal del programa hasta que el evento se procesa.

El tiempo de espera máximo no está definido, es posible crear temporizadores con el tiempo de espera de años, sin embargo, el tiempo mínimo que puede variar de sistema a sistema. En Windows Vista el temporizador mínimo es de 10 ms, mientras que en Linux 2.6.x esto es configurable (por defecto es 4 ms). El intervalo QT se tratará de entregar todos los eventos, conforme a lo solicitado, pero si el sistema no lo dejó caer el "excedente".

Temporizadores también se puede utilizar en las discusiones, pero hay que respetar la condición de estar dentro de un ciclo de eventos. Temas merecen un artículo aparte, como siempre ...

La clase QTIME implementa el nivel más alto temporizadores, lo que permite algunas funciones. Uno de ellos es el QTIME: singleShot () , que dispara un evento una vez.

Lea la documentación extensa y repetitiva, aburrida, pero créeme, te ahorrarás un montón de QDorDeCabeca ...

Más de Señales y Slots

Señales y slots son utilizados para la comunicación entre los objetos, uno de los ejes de QT. En este sistema en lugar de implementar funciones callback para manejar los eventos, se utiliza el concepto de la conexión de señales a las franjas horarias, por lo que la programación sea más intuitiva.

Señales y slots son métodos de clase que son manejados por el compilador Meta-Object (MOC) antes de que el código fuente para compilarlo. Tienen declaraciones especiales que no forman parte del estándar C + +, por lo que fazum moc analizar el código fuente y compilar genera.

Ejecutando el comando moc en cualquier clase que implemente las señales y ranuras, una cierta cantidad de código fuente se genera. Con el uso del programa qmake , moc la llamada al programa es hasta el Makefile, por lo que es transparente para el programador.

De una clase puede implementar señales y slots, es necesario el acceso a la Meta System-objeto . Por lo que debe heredar de la clase QObject y sus subclases, y la necesidad de que la macro Q_OBJECT en su área de política de privacidad. Completado los preparativos, los signos se declaran en una sección de "señales" en las secciones y las franjas horarias "[public | protegida | privado] slots".

Una ranura después de declarada, se define como cualquier otro método común, puede ser llamado de forma explícita como cualquier otro. Ya los signos son un poco más delicado, y sólo ha declarado y definido por el programador. ¿La razón? El mensaje al final de la tentativa de construir:

 tmp / moc_mydisplay.o: En la función `MyDisplay: signalPlay () ':
 ~ / Cronómetro / tmp / moc_mydisplay.cpp: 89: definición múltiple de `MyDisplay: signalPlay () '
 tmp / mydisplay.o: ~ / cronómetro / mydisplay.cpp: 169: en primer lugar se define aquí
 collect2: ld devolvió el estado de salida 1
 hacer: ** [cronómetro] Error 1

Dentro del archivo se genera moc_mydisplay.cpp el siguiente código:

  / / Señal 0
 signalPlay ( ) MyDisplay vacío: signalPlay ()
 {
     activate ( this , & staticMetaObject , 0 , 0 ) ; QMetaObject:: activar (esto, y staticMetaObject, 0, 0);
 } 

Sí, moc genera señales con la definición de los llamados meta-métodos de QT. Por lo tanto, la definición del cuerpo de una señal en el intervalo QT es ilegal y va a generar un error de compilación al restablecer método. Vamos moc se encarga de la ejecución de la señal para usted.

Conectar

No es buena señal acaba de establecer y ranuras. Debe definir cómo van a interactuar. La forma de hacerlo es mediante la conexión a través de la conexión () presente en cada método heredero de QObject . Este moc implementará la señal para que una llamada a que da lugar a una llamada a la (s) ranura (s) conectado (s) con los mismos parámetros.

Dependiendo de la conexión, la señal también pueden devolver el mismo valor que la última plaza volvió a llamar. Tenga en cuenta que esto no es muy seguro para señales conectadas a varias ranuras, por lo tanto, nada garantiza el orden indicado.

Una señal se puede conectar a una segunda señal directamente. Un emiten () en la primera señal es entonces equivalente a una emisión () en la segunda señal, ya que tras el paso de crear moksha, los resultados de llamadas en la primera llamada a la segunda, que se traduce en la llamada conectada a otro método, y así sucesivamente .

Formas de conectar

Hay básicamente tres formas de conectar las señales y las franjas horarias y si no se utiliza correctamente puede ser una fuente de errores terriblemente difícil de descubrir. Estas formas de conexión se pasan como parámetros extra al método connect (). Ellos son:

Conexión Directa : La ranura se llama inmediatamente la señal se ha emitido en el hilo de la emisión de la señal. Esto actúa como un llamado directo a la ranura.

Conexión de cola : La señal es enviada y la llamada a la ranura pase a una lista interna de la QT, y la señal regresa inmediatamente, independientemente de la ranura se han llamado o no. El ciclo de eventos luego de procesamiento de la lista y sólo después de la ranura se invoca en el hilo donde reside el objeto de la ranura.

Conexión Automática : Este es el tipo predeterminado que se utiliza cuando no se especifica el tipo de conexión. Es uno de los "Seeds of Evil" , que presenta dos comportamientos distintos: si la señal y la ranura se encuentra en el mismo hilo, funciona como una conexión directa, pero por lo demás funciona como conexión de la cola.

Bloqueo de conexiones en cola : ¿Eh? no eran sólo tres? Bueno, esta es una de las ventajas de ese artículo se lee: le ahorra documentación inconsistente! Esta conexión es similar a la conexión de la cola, excepto que la señal de que el hilo se bloquea hasta que la señal sea debidamente ejecutado. Tenga en cuenta que sólo se debe utilizar con mucho cuidado, y las señales y las ranuras en diferentes hilos. El mal uso también puede causar bloqueos. Usted sabrá cuando vea algo como esto:

 user @ host: ~ /. cronómetro $ / cronómetro
 Qt: bloqueo de la muerte detectada, mientras que la activación de la BlockingQueuedConnection: El remitente es
 QPushButton (0x807e2d8) receptor MyDisplay (0x8076ac0)

Para hacer frente a preguntas sobre qué se entiende por "hilo donde se encuentra un objeto" se refieren a los temas del QT arespeito.

Siempre tener mucho cuidado con las señales, las ranuras, hilos y temporizadores. Estas son las principales características de QT, pero su mal uso puede conducir a errores muy difíciles de localizar. Ver toda la documentación al respecto.

A la fuente de

Nuestro ejemplo se compone de las dos clases y MyDisplay Cronómetro y un archivo común principal. El principal y único crea un objeto QApplication StopWatch. La clase se encarga de la parte MyDisplay visual del programa, que consiste en un diálogo con botones y un estilo de visualización LCD. La clase Stopwatch va a crear un widget para mostrar y poner en práctica el temporizador. Tenga en cuenta que esta arquitectura no es la más elegent, más interesante que heredan de la clase Stopwatch MyDisplay. Pero eso sería estropear la diversión prácticamente elimina la necesidad de utilizar las señales y los slots.

El uso de señales y ranuras se hace más clara cuando queremos objetos para comunicarse con el exterior. En general, las clases no saben lo que está fuera. Pasar punteros a los objetos externos dentro de ellos, me duele la encapsulación y hace que el código sea menos genérico. En nuestro ejemplo, el más interesante el uso de señales y ranuras es myDisplay al objeto (el cronómetro interno) eventos informe desde / hasta el cronómetro objeto (MyDisplay externa), ya que sin perderse en la generalidad o la encapsulación.

Con la ayuda de Qt Designer (en otro artículo voy a hablar de ella), he creado los cuadros de diálogo, botones y pantalla LCD. Después de simplificar el código para adaptarse a nuestros propósitos. ¿Cómo se hereda de myDisplay QDialog, y esto indirectamente hereda de QObject, usar señales y slots sólo tiene que añadir la macro Q_OBJECT en la sección privada de la declaración de clase. Después de eso, añadió, entre otros métodos auxiliares:

  espacios públicos:
     long ) ; slotDisplayValue vacío (de largo);

 espacios privados:
     slotPlay vacío ();
     slotStop vacío ();

 señales:
     signalPlay vacío ();
     signalPause vacío ();
     signalStop vacío ();
     signalReset vacío (); 

Las señales de comunicación a los eventos fuera de relación con pulsaciones de botón. Ya los espacios privados se hacen un procedimiento de tratamiento previo, mientras que el público tiene derecho a partir de las garrapatas temporizador externo. Así, la clase envía la información hacia el exterior y recibe información desde fuera, sin saber lo que está en el otro lado. Buen contrato interfaz de edad.

  espacios públicos:
     slotPlay vacío ();
     slotPause vacío ();
     slotStop vacío ();
     slotReset vacío ();

 espacios privados:
     slotTick vacío ();

 señales:
     long ) ; signalTicks vacío (de largo); 

Analógico y por el contrario la clase Stopwatch implementa las ranuras que reciben la clase MyDisplay señales, y declara que la señal que envía la información al público su ranura.

También implementa un QTIME que se activará cada 10 milisegundos (para que nuestros amigos pueden seguir lerdinhos Vista!), Incrementa un contador. Este contador es enviado de vuelta a los formatos de visualización y muestra.

El temporizador se puede detener, pausar y reiniciar en cualquier momento haciendo clic en el botón apropiado.

El Finalmentes

El mismo ejemplo, no es mucho código, pero ilustra el uso más básico de los temporizadores y la construcción de las señales de costumbre y las franjas horarias. Una atención muy especial, sin embargo, se debe dar a los detalles que implican el uso de estos recursos, que pueden convertirse en trampas mortales.

Enlaces Importantes

Señales y Slots
QTIME
Temas en el intervalo QT
Documentación en línea del QT