Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - 16BITBoy

#1
Es un error bastante extraño, verán tengo 2 clases, una de ellas con un string como miembro y la otra tiene un vector de objetos de la otra clase y un metodo que solo crea y añade un objeto a ese vector.

Cuando tenía interfaz e implementación juntos en el mismo fichero, el compilador aceptaba el objeto sin problemas, pero después de separarlos ya no lo reconoce, aun pudiendo acceder sin problemas a la declaración de la clase del objeto.

Código (cpp) [Seleccionar]

#ifndef _MYHEADER_HPP_
#define _MYHEADER_HPP_
class A{
public:
    std::string someString;
};

class B{
public:
    std::vector<A> aList;
public:
    void addA();
};

#endif /* _MYHEADER_HPP_ */

//implementation file

#include <string>
#include <vector>
#include "myheader.hpp"

void B::addA(){
    A a;
    a.someString = "Hola";
    // Here compiler says : Invalid arguments 'Candidates are: void push_back(const A &)' line 18 Semantic Error
    aList.push_back(a);
}



He intentado declarando un puntero a vector de A en vez de hacerlo de esta forma y resulta igual. También, si en B::addA() haces:
Código (cpp) [Seleccionar]
std::cout << a.someString << std::endl;
Accede sin problemas al objeto, con lo cual creo que puede acceder perfectamente a la declaración de la clase en ese momento.

¿Que estoy haciendo mal?

Gracias de antemano.
#2
Hola.
Parece ser que hay algún problema con la configuración de apache o el enlace al que me lleva el foro cuando quiero marcar todos los posts como leidos en la sección de mi cuenta "Mostrar nuevas respuestas a tus mensajes". Apache me manda a un sitio al que no tengo permisos de acceder.

Echenle un vistazo plx.

Saludos!
#3
Redes / Rangos IPv6
12 Diciembre 2011, 22:31 PM
Hola,
En el curso superior de administración de sistemas y redes nos enseñaron muchisimas cosas sobre protocolos e ipv4, pero ipv6 solo lo mentaron.
¿Existen rangos/bloques para ipv6 asi como los hay para ipv4 (tipo a,b,c..)? Me imagino que si, si usan las máscaras de red, pero ¿cuales son? Estoy buscando en los rfcs pero no encuentro aun nada en el tema.

Saludos!
#4
Hola!
Me mandaron esto del instituto y creo que seria interesante compartir esta clase con ustedes, asi contribuyo un poquito ^^. Asi mientras todos hagamos esto, cumplimos con esa frase muy sonada y buena: "Ningún problema debería resolverse 2 veces".

Esta clase se encarga de mantenerse en escucha a la emisora de streaming que le digamos con el método setSource, y devuelve por pantalla el título de las canciones que esta ha reproducido.

La URL debe apuntar al stream directamente y no al playlist. Ha sido probada con servidores como shoutcast y icecast ( y el que usa M80 radio para emitir que no me acuerdo en estos momentos :D ) Para poner al programa en escucha se llama al método startLog.

Los comentarios los tengo escritos en ingles, pero he añadido una linea mas para los que lo quieran leer en español.

El codigo aqui:
Código (java) [Seleccionar]

/**
* Lectura de tags de streams de audio.
*
* 16BITBoy
*/


import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;

public class StreamTitles {

/**
* @param args
*/
public static void main(String[] args) {

StreamTitleLog log = new StreamTitleLog();

//Especificamos la emisora a escuchar | Set stream URL.

try {
log.setSource(new URL("http://relay5.slayradio.org:8000"));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Que empiece el registro ;) | Start logging.
try {
log.startLog();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

class StreamTitleLog {

private final String tag = "StreamTitle='"; //We should look for this in the stream of bytes

private URL url = null;

//Default constructor
public StreamTitleLog(){

}

public void setSource(URL url){
this.url = url;
}

public URL getSource(){
return url;
}

private void getTitle(BufferedInputStream is) throws IOException{

StringBuilder buffer = new StringBuilder();

while(true){

while(is.available() < 0){
continue;
}

buffer.append((char)is.read());

if(buffer.charAt(buffer.length() - 1) == '\''){

buffer.deleteCharAt(buffer.length() - 1);
titles.add(buffer.toString());

System.out.println(buffer.toString());

break;

}

}
}

public void startLog() throws IOException{

ArrayList<Character> buffer = new ArrayList<Character>();

//This is the get header info we need to send in order to retrieve stream titles
//Esta es la info de cabecera del get que necesitamso enviar para recibir los titulos
URLConnection uc = url.openConnection();
uc.setRequestProperty("Connection", "close");
uc.setRequestProperty("icy-metadata", " 1");
uc.setRequestProperty("transferMode.dlna.org", "Streaming");

BufferedInputStream is = new BufferedInputStream(uc.getInputStream());


//El metodo, como una videoconsola trata a un mando de juegos a la espera de
//una combinacion de botones. Esa combinación será que cada uno de los caracteres
//llegue al stream, si solo llega uno, tres o casi todos no nos sirve, lo queremos entero

//This method is like trying to retrieve the desired sequence of button presses.
//If the sequence does not match at some point, buffer is cleared.

while(true){

while(is.available() < 0){
continue;
}
buffer.add((char)is.read());

if(buffer.get(buffer.size() - 1) == tag.charAt(buffer.size() - 1)){

if(buffer.size() == tag.length()){

getTitle(is);
buffer.clear();

}

}
else{

buffer.clear();

}
}

}

}


Espero que os sea de alguna utilidad. Saludos ;)
#5
Juegos y Consolas / Cracktros de videojuegos y demos
22 Noviembre 2010, 22:11 PM
¿Alguien se acuerda de los cracktros?
Para quienes no sepan de que hablo, los cracktros eran las firmas introductorias de los equipos de cracking que salian antes de que el juego propiamente dicho iniciase su ejecución. Eran como demos pero de menor longitud y elaboración.

Estas intros por lo general estaban muy bien elaboradas, de modo que incluso a veces podias encontrarte un scrolling mucho mejor conseguido en el cracktro que el scrolling que implementaba el juego, o efectos gráficos que dificilmente te los encontrabas en el juego, además de incorporar música con melodias normalmente muy repetitivas pero sobre todo adictivas.

Por ejemplo:
http://il.youtube.com/watch?v=NwEUJO86vbE
http://il.youtube.com/watch?v=uMkciRaZXxk
http://il.youtube.com/watch?v=AzIq18xBCJg

Yo por lo que viví recuerdo algunas de juegos en Windows 95 / ms-dos pero en especial las que se hacian en la primera Playstation.

La que aún resuena en mi cabeza la musiquilla es esta, de lightforce:
http://www.youtube.com/watch?v=iqYoAV9y7IM&feature=related

¿y a ustedes, os gustan las intros y demos?

#6
Java / Comprobar entrada del teclado
1 Noviembre 2010, 13:16 PM
Hola,

He escrito este trozo de código con la intención de que el programa no se pare en caso de que el usuario no haya pulsado una tecla, pero que la recupere en caso de que si lo haya hecho.

Código (java) [Seleccionar]

private byte checkInput(){

Scanner in = new Scanner(System.in);
if(in.hasNext()){
return in.nextByte();
}
return 0;

}


Esa función hace que cuando llame a in.hasNext() o hasNextByte() se pare esperando a que haya algo que leer y entonces entra al bloque y lo devuelve. Obviamente eso es justo lo que no quiero, por eso creí que llamando a esa función no se pararía (al parecer eso lo hace bien cuando es un fichero :S). ¿Que método puedo utilizar?
#7
Hola,

Andaba leyendo algo de código, y normalmente curioseaba en github y sitios asi mirando proyectos pequeños. Pero decidí leer el código de un proyecto mas grande. Tampoco quedarme con todo el código en la cabeza obviamente.

Me propuse leer y entender una o varias clases relacionadas con el parser de código html5 que tiene Firefox. Cuando las encontré y empecé a leerlas me di cuenta de que estaba leyendo a un muy alto nivel de complejidad tal que para saber bien que estaba leyendo supuse que debía leerme cada modulo incluido en ese fichero, pero este a su vez también es complejo y necesitas "bajar" de nuevo.

¿Saben de algún método o tienen algún consejo que dar los que se hayan dedicado a leer código de proyectos grandes? Agradezco la ayuda que me puedan dar, ya que quiero aprender también de código de proyectos grandes, ya que seria de utilidad en un futuro poder hacerle modificaciones y tal :)

Salu2!
#8
Me viene esta pregunta a la cabeza, ya que en c++ se puede pero otros lenguajes como Java, C# o Go no permiten.

¿Consideráis hacer esto buena practica? Y si lo consideráis afirmativo, ¿en que casos creéis que es oportuno?

Por momentos pienso que si necesito hacer herencia múltiple, algo va mal con el planteamiento que tengo del problema.

¿Que opinan ustedes?
#9
Hola amigos.

He estado haciendo uno de los ejercicios que mi profesor me ha mandado y resulta que al plantearme la lógica para resolver el problema, a mi me resulta lógico (no en todos los casos, pero en este si) hacer que una función según un valor que se le pasa o que lo tiene su clase, retorne un objeto de una clase distinta según ese valor. Eso java no lo permite ( y creo que muchos otros tampoco...) No se me ocurre por ahora una manera mas intuitiva para mi(o mejor dicho, personal, a mi estilo, que eso de intuitivo es algo que depende de cada uno :D) de resolver el problema que tengo, el cual si queréis expongo, pero por ahora os pongo el código de prueba, aislado, que muestra exactamente lo que intento.

A ver si se os ocurre algo en esta forma de pensar, que me ayude a solucionar el problema. Según un valor tengo que asignar en una referencia a objeto de clase abstracta un objeto de una clase extendida de esa misma abstracta, pero esta devuelta desde una función.

Código (java) [Seleccionar]

class Leer{
    private int op;
    private OpBinaria obj;
    Leer(int op){
        this.op = op;
        obj = obtObjeto();
    }
    private OpBinaria obtObjeto(){
        if(op == 1){
            Suma suma = new Suma();
            return suma; //Eclipse dice "NopeNope!" Tu dale OpBinaria :D
        }
    }
}

abstract class OpBinaria{
    public int x, y;
    public abstract int op();
}

class Suma extends OpBinaria {
    public int op(){
        return x + y;
    }
}

class Resta extends OpBinaria {
    public int op(){
        return x - y;
    }
}
#10
Dudas Generales / Planificación de proyectos
25 Septiembre 2010, 23:50 PM
Hola!

Bueno, con planificación de proyectos no precisamente me refiero a los de una empresa, mas bien a los propios personales. Mi problema es que tengo muchas cosas que hacer, aveces se me da mal dar prioridades a las tareas o se me olvidan. Ya he intentado aquello de un horario junto con lista ToDo, y no funciona muy bien del todo, ya que rara vez cumplo con el tiempo y los horarios (tanto el tiempo que tardo en resolver X problema, como el tiempo del que dispongo para hacerlo o la hora a la que me pongo a hacerlo) puesto que cualquier contratiempo que tenga, ya sea por dificultad de lo que este haciendo, por mala priorización (se me olvida cuando tengo que tener terminado X por poner un ejemplo) o distracciones, hace que no cumpla el horario.

¿Como planifican ustedes sus proyectos con las demás cosas que deben hacer, ya sea trabajo, estudios...etc? No se si habrá algún buen método o truco, pero lo que si me repatea es terminar el día y saber que me queda algo por hacer y no estar seguro si voy en buenos tiempos.

Un Saludo!
#11
GNU/Linux / Curioso fallo en el sistema de sonido
19 Septiembre 2010, 12:41 PM
Hola,
Vereis tengo un portatil ASUS A52F al cual le instale ubuntu como hago en todos mis equipos. Resulta que en este sistema operativo el sistema de sonido tiene un pequeño problema. Y es que al contrario que en windows 7 que viene preinstalado, en linux conectar los auriculares no significa para este desconectar el sonido de los altavoces y pasarlo por el jack de auriculares, sino que en vez de esto se escucha por ambos lados a la vez. Mi problema es que no se ni se me ocurre donde radica el problema exactamente y no se como actuar (si es problema de "firmware" de algún componente de la placa del portatil, controladores...). ¿Alguien tiene idea?
#12
A ver si alguien me pudiese aconsejar algo, tengo este problema pero en principio no se como solucionarlo si no es sustituyendo el dispositivo.

Hace menos de un año que compre este adaptador wifi, y venia que funcionaba en linux y tal. Y funcionaba de maravilla, pero tras una serie de actualizaciones del kernel, este ha dejado de funcionar correctamente. Va lento y hace continuas desconexiones y algunas tramas parece no desencriptarlas, si abro wireshark puedo ver que el desglose no pasa de ethernet.

He intentado ver si habian drivers, modulos actualizados para este dispositivo pero en la pagina de dlink solo suministran para windows y mac.

He intentando averiguar con que version del kernel si funciona, no la encontré, pero tal vez eso significaria tener el sistema expuesto a saber cuantos fallos de seguridad y conservar ciertos bugs. No se si tambien incompatibilidades.

¿Alguien se le ocurre que puedo hacer?

De momento estoy en windows... hecho de menos ya el entorno unix ^^
#13
Me preguntaba cual es la manera que otras personas usan para afrontar los problemas a la hora de tener que solucionarlos. Hasta hace muy poco, hacia mis pequeños programas resolviendo los problemas de abajo hacia arriba, escribiendo primero las funciones básicas y las estructuras de datos necesarias. Actualmente apuesto más por el top-down, aunque a veces prefiero hacer algo desde abajo simplemente por que ya se como va a quedar cuando llegue abajo.
¿Y ustedes?

Salu2!
#14
Hasta ahora, he escrito programas pequeños no muy complejos, y algún juego muy sencillo (pong, tetris...) y el diseño de cómo iba a funcionar el programa, bien tardo mucho o poco "segun mi inspiracion xD" termino por sacarlos. Pero cuando se trata de programas mas complejos, no puedo tener todos los módulos, funciones y métodos en la cabeza, ahi medio creados como cuando hago un pong. Así que me preguntaba si existe, aparte de UML alguna herramienta o método para diseñar programas un poco mas grandes (no estoy pensando en microsoft office ni nada por el estilo, simplemente programas que ya para uno son de cierta complejidad). Digo aparte de UML por que según leí en un libro que tengo de ingenieria de software (el libro es de uml y java), UML solo se lleva bien con la POO, y yo aun programo en módulos y de forma estructurada (vengo del C). ¿Alguna sugerencia?
#15
Yo de siempre, he programado mis pequeños programas y scripts usando programación modular / esctructurada. Se que para el programador, una vez acostumbrado a escribir el código en POO, luego le es mas fácil aun reutilizar el código escrito para otros programas, pero :
¿Hay alguna ventaja real en aprender (bueno en aprender si, que puedes usar java por ejemplo), o mejor dicho, hay alguna ventaja para usar la programación orientada a objetos para el programa mismo? ¿Existe algún tipo de optimización en el programa? O bien sea programado en estructurado o POO sale el mismo código nativo, igual de eficiente, seguro y tal... (pongamos, C y C++).
Me surgió la duda, hace un año reescribí un juego que escribí originalmente en C y lo pase, medio medio (pues no me acostumbraba del todo a POO) a C++.

Llevo unos días programando en python, pero la orientación a objetos apenas la uso, uso si acaso los métodos que ya vienen de clases que ya están hechas de la librería.


#16
Creo tener una ligera idea de que seria lo mas adecuado a mis necesidades. Aun así me gustaría saber vuestras opiniones y preferencias.

Cuando quiero programar para linux lo mas normal es que programe en C. Sin embargo cuando quiero realizar un programa desde alto nivel de abstracción, es decir, no me preocupa la rapidez de ejecución o perder cierta versatilidad, hacer programas en C puede ser lento y a veces estar reinventando la rueda.

Dejando eso de lado, pues pienso en pequeños programas para integrar con el panel de gnome, o programar algún servicio/demonio que haga alguna pijotada por mi ^^. Sobre todo por esto ultimo, pensé en python; un lenguaje bastante rápido de escribir y de muy alto nivel. Pero existen otras alternativas como Java o C#. ¿Usáis alguno de estos?

Ojo, pido vuestras preferencias, por curiosidad, y pongo lo de libs, por si alguno usa C/C++ pero usa una librería muy basta, o con muchas herramientas xD.

Salu2!
#17
Buenas.

Pues ando trasteando con los procesos en C con linux, y jugando con el fork.
Vereis, intento crear de un proceso padre, dos procesos iguales a este, diciéndome el padre los pid de esos dos procesos, de modo que esperaría algo como:

$ ./programa
Proceso padre trabajando
Los pid de los procesos son:
1111, 1112 //Por poner
Proceso hijo trabajando
Proceso hijo trabajando
$

En mi código dos funciones que hacen lo mismo casi, excepto que uno crea dos procesos en vez de crear uno, por motivos de pruebas. El código es el siguiente:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>

#define MAX_HIJOS 2

void uno()
{
pid_t hijo;
int i;
hijo = fork();

if(hijo != 0)
printf("Proceso padre trabajando\n\n");
else
{
printf("Proceso hijo trabajando\n");
}
}

void mostrar_pids(int *pids)
{
int i;
printf("Los pid de los procesos son:\n");
for(i = 0; i<MAX_HIJOS; i++)
{
printf("%d, ", pids[i]);
}

}

void varios()
{
pid_t hijos[MAX_HIJOS];
int i;
for(i=0; i<MAX_HIJOS; i++)
{
hijos[i] = fork();
if(hijos[i] == 0)
break; /*No llamamos mas a fork si sabemos es hijo*/
}
if(hijos[0] != 0)/*Aqui un proceso hijo entra... y no deberia..*/
{
printf("\nProceso padre trabajando\n\n");
mostrar_pids(hijos);
}
else
{
printf("\nProceso hijo trabajando\n");
}
}

int main()
{
varios();
exit(0);
}

Lo de "*Aquí un proceso hijo entra... y no deberia..*/" es algo que apunté por que pensé eso, no lo se en verdad. Bueno el problema es que lo que obtengo es esto:

$ ./main

Proceso padre trabajando


Los pid de los procesos son:
Proceso padre trabajando
Proceso hijo trabajando

Los pid de los procesos son:
5726, 5727, 5726, 0,

Como veis, uno de los procesos hijo tiene un pid, y no debería. Además ¡otro se identifica como padre!. Según el libro que leo, fork() devuelve 0 si es un hijo el que lo llama. Entonces me llama la duda de si esta permitido crear dos procesos, pues en el libro que tengo no dice nada relacionado con esto. Y si no es este el problema, ¿por donde van los tiros?

Gracias de antemano ;)

Lh: No hagas doble post :D

Vaya tela me maree yo solo. Hoy abro el código y el libro que seguía y se me pasaron dos cosas. Fork hace una copia del proceso, "tal y como está". Pero se me paso pensar que sigue por donde seguía el padre en el momento del fork. Y otra... no he podido estar mas ciego al ver que he puesto un cero en lugar de la variable i, en el if que comprueba lo devuelto por fork; por esta razón uno se identificaba como padre, por que lee el pid que obtuvo el padre.

En fin, tema resuelto ^^