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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17
71  Informática / Electrónica / protocolo para controladores en: 16 Julio 2010, 03:16 am
Buenas

Estoy haciendo un pequeño trabajo, que trata de diseñar un protocolo de comunicación, para comunicar, en mi caso, 2 Arduinos. Quiero exponer mi idea, y que me digáis si lo veis eficaz o no.

Quería hacer algo con arquitectura cliente-servidor, de esta forma: El cliente hace una petición al servidor, y el servidor emite nodos (Ahora explicaré como se forman) hasta que termine de emitir el mensaje o hasta que el cliente envíe una interrupción.

Los nodos, son nibles, separados en 2 grupos que son "Status" y "Data"

el primer grupo de 2 bits, status, define la acción (Osea, si emite el servidor, si emite el cliente, si es una interrupción) y en data, se envía 0, 1, o return.

Me olvido de explicar alguna cosilla mas, pero en general esta es la descripción

¿Qué os parece?
72  Programación / Scripting / Variables de entorno (Y un guiño a perl) en: 11 Julio 2010, 06:32 am
(Extraído de mi blog)

A Bash, lo conocemos la mayoría de los usuarios de GNU/Linux. Podéis repasar algunos de los comandos básicos para pasar el rato con este inseparable amigo.

Sobre Perl, decir que es un lenguaje de Scripting, multiparadigma, bastante parecido a C. Mas info, aquí.

Voy a explicar como "fabricar" nuestros propios comandos. Estas técnicas, son muy usadas en el oscuro mundo de la programación (Hace poco, leía en un libro como practican un desbordamiento de buffer en un programa en C, con la ayuda de Perl)

Aquí solo voy a explicar como añadir variables de entorno, suponiendo claro, que estáis bajo GNU/Linux.

La forma de añadir variables al entorno bash, es la siguiente:

    export NOMBRE_VARIABLE=Dato

Podemos usar el comando env para ver todas las variables de entorno del sistema. Al ser una lista, generalmente, bastante larga, recomiendo direccionar el flujo de datos a un archivo.

    env > /home/serch/Escritorio/env1.txt

(Sustituir mi usuario por el vuestro, o la ruta por la que queráis).

Ahora, vamos a proceder a guardar nuestra primera variable de entorno, la cual, al ser llamada, mostrará una cadena.

    export VAR1=Hi_world

Para llamar a nuestra variable, usamos el comando echo.

    echo $VAR1

Lo que nos devolverá lo siguiente:

    serch@serch-server:~$ echo $VAR1
    Hi_world

También podemos guardar variables de entorno como comandos. Por ejemplo, para ejecutar el comando ps -aux, podemos hacer:

    export VAR2="ps -aux"

Observamos que para guardar comandos, necesitamos las comillas. Para llamar a esta variable, no nos hace falta echo, basta solo con invocarla.

    serch@serch-server:~$ $VAR2
    Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 2800 1644 ? Ss 04:54 0:00 /sbin/init
    root 2 0.0 0.0 0 0 ? S 04:54 0:00 [kthreadd]
    ...


(He acortado la línea USER PID.. para poder mostrarla en 1 sola línea, y no he imprimido, obviamente, toda la lista de procesos).

Podríamos usar también una redirección de flujo para nuestra variable $VAR2, con lo que nos enviaría todos los datos al archivo que deseemos. (Ahora imaginad el buen uso que le podéis dar a las variables de entorno, sobretodo si os conectáis vía shh desde un dispositivo móvil, y no os apetece escribir comandos largos desde un mini-teclado)

Ahora vamos a crear una variable de entorno usando perl. Dentro de Perl tenemos la orden print, que para los que estéis dentro del mundo de la programación, sabréis bien lo que hace.

Para empezar, ejecutamos el siguiente comando

    perl -e 'print "Hola";'

Como vemos, nos muestra la cadena "Hola". Podemos indicar que una cadena se muestre X veces, ejecutando lo siguiente:

    perl -e 'print "Hola" x 20;'

Esta es una buena introducción a la base del Scripting, añadiendo variables de entorno y haciendo nuestros primeros pasos en Perl. En próximas entregas, mas y mejor.
73  Foros Generales / Foro Libre / Para todos ustedes en: 10 Julio 2010, 04:51 am


AVISO: Puede dañar vuestra sensibilidad y crearos un trauma XD

Aviso serio: Es de hace tiempo ahí tenía yo el pelo corto xD
74  Programación / Programación C/C++ / Punto y coma en: 9 Julio 2010, 05:53 am
Estudiando métodos de ordenación, em quedé en Radix. Ví el código de ejemplo que ponene en Wikipedia para implementar, hasta ahí todo bien

Ví que en varias sentencias, ponían ; en una linea, siendo el único contenido de la misma. Pensaba que es un error, así que probé a compilar, pero funciona perfectamente. ¿Alguien me dice que hace ahí ese punto y coma?

Código
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define NUMELTS 20
  5.  
  6. void radixsort(int x[], int n)
  7. {
  8.  int front[10], rear[10];
  9.  struct {
  10.    int info;
  11.    int next;
  12.  } node[NUMELTS];
  13.  int exp, first, i, j, k, p, q, y;
  14.  
  15.  /* Inicializar una lista vinculada */
  16.  for (i = 0; i < n-1; i++) {
  17.    node[i].info = x[i];
  18.    node[i].next = i+1;
  19.  } /* fin del for */
  20.  node[n-1].info = x[n-1];
  21.  node[n-1].next = -1;
  22.  first = 0; /* first es la cabeza de la lista vinculada */
  23.  for (k = 1; k < 5; k++) {
  24.    /* Suponer que tenemos números de cuatro dígitos */
  25.    for (i = 0; i < 10; i++) {
  26.      /*Inicializar colas */
  27.      rear[i] = -1;
  28.      front[i] = -1;
  29.    } /*fin del for */
  30.    /* Procesar cada elemento en la lista */
  31.    while (first != -1) {
  32.      p = first;
  33.      first = node[first].next;
  34.      y = node[p].info;
  35.      /* Extraer el kâsimo dÁgito */
  36.      exp = pow(10, k-1); /* elevar 10 a la (k-1)ésima potencia */
  37.      j = (y/exp) % 10;
  38.      /* Insertar y en queue[j] */
  39.      q = rear[j];
  40.      if (q == -1)
  41. front[j] = p;
  42.      else
  43. node[q].next = p;
  44.      rear[j] = p;
  45.    } /*fin del while */
  46.  
  47.    /* En este punto, cada registro está en su cola basándose en el dígito k
  48.        Ahora formar una lista única de todos los elementos de la cola.
  49.        Encontrar el primer elemento. */
  50.    for (j = 0; j < 10 && front[j] == -1; j++);
  51.      ;
  52.    first = front[j];
  53.  
  54.    /* Vincular las colas restantes */
  55.    while (j <= 9) { /* Verificar si se ha terminado */
  56.      /*Encontrar el elemento siguiente */
  57.      for (i = j+1; i < 10 && front[i] == -1; i++);
  58. ;
  59.      if (i <= 9) {
  60. p = i;
  61. node[rear[j]].next = front[i];
  62.      } /* fin del if */
  63.      j = i;
  64.    } /* fin del while */
  65.    node[rear[p]].next = -1;
  66.  } /* fin del for */
  67.  
  68.  /* Copiar de regreso al archivo original */
  69.  for (i = 0; i < n; i++) {
  70.    x[i] = node[first].info;
  71.    first = node[first].next;
  72.  } /*fin del for */
  73. } /* fin de radixsort*/
  74.  
  75.  
  76. int main(void)
  77. {
  78.  int x[50] = {NULL}, i;
  79.  static int n;
  80.  
  81.  printf("\nCadena de números enteros: \n");
  82.  for (n = 0;; n++)
  83.    if (!scanf("%d", &x[n])) break;
  84.  if (n)
  85.    radixsort (x, n);
  86.  for (i = 0; i < n; i++)
  87.    printf("%d ", x[i]);
  88.  return 0;
  89. }
  90.  
75  Sistemas Operativos / GNU/Linux / ¿Qué instalar? en: 9 Julio 2010, 02:19 am
Hice una entrada a mi blog sobre que distro gnu/linux instalar, según mis criterios. ¿Alguien quiere opinar?

No pongo enlace por spam, pero podéis acceder a mi blog desde mi firma ^^
76  Foros Generales / Foro Libre / Actualizando mp3 del móvil en: 9 Julio 2010, 00:12 am
Bien, estoy actualizando el MP3 del móvil, metiendo canciones (Sueltas) nuevas.

¿Alguien me recomienda títulos/grupos/similar?

Entre otras cosas, tengo grupos como:

Pink floyd, Supertramp, Queen, Slayer, Metallica, Blind Guardian, y algnos sueltos como Sabina, mamá ladilla, reno renardo, etc

¿Se os ocurre algo para mua?

 ;D
77  Foros Generales / Foro Libre / Intercambio de clicks en: 8 Julio 2010, 06:19 am
Espero que no me cataloguen como spam, pues no voy a poner ningún enlace, al igual que espero que no lo ponga nadie  :-\

He tenido una idea, muchos de los usuarios del foro estamos jodidos por la **** crisis, y muchos de nosotros tenemos páginas/blogs/similar.

Muchos sabemos de la existencia de Google adsense, y como tal, sabemos que cada click en la publicidad, puede generar beneficios, osea, dinero.

Yo en 1 día, he llegado a ganar alrededor de 1€ con pocos clicks... Así que he pensado, si nos uniéramos unos cuantos users del foro e intercambiáramos clicks varios días de la semana... Evidentemente, no nos vamos a hacer ricos, pero siempre viene bien ahorrar un X al mes.

Solo es una propuesta, espero que la toméis bien. (Resumo la idea, hacemos clicks en las páginas de los demás a cambio de que hagan clicks en la nuestra: Todos ganamos)

 :silbar:
78  Programación / Programación C/C++ / Conociendo NetBeans en: 6 Julio 2010, 07:53 am
(Extraído de mi blog)


Existen multitud de IDE's de programación, y dependiendo del software que queremos crear, nos puede convenir usar alguno en especial. Para compilar programas escritos en C/C++, existen 2 principales (Según mi gusto claro) : Geany y NetBeans.

Geany, es conveniente para pequeños proyectos, y, sobretodo, para iniciarse en el uso de IDE's pues es muy simple y ligero. Pero una vez pasamos a programar aplicaciones grandes, IDE's como NB nos pueden ayudar mucho.

El primer paso es descargarlo. Tenemos que asegurarnos de tener instalado JVM para completar el proceso de instalación.

Sobre la descarga de NB, decir que no es conveniente descargar la versión FULL a menos que vayamos a usar todos los extras. En su lugar, yo al ser programador de C, descargo la versión que incluye C. Evidentemente, los programadores PHP descargarán la versión para PHP, y los de Java.. Ya se imaginan.

Puedes acceder a la sección de descargas de NB aquí. ( http://netbeans.org/downloads/index.html )

Una vez instalado y ejecutado, solo nos queda hacernos con la interfaz para aprender a crear nuestros primeros proyectos. Como primer paso, seleccionamos crear nuevo proyecto de código en C. Me he permitido la libertad de hacer una captura desde mi PC, para quien quiera ver como es sin necesidad de instalar. Para verla, click aquí. (http://i50.tinypic.com/t9wab9.jpg)

Como vemos, podemos distinguir varias partes: La zona donde está el SC (Source code, código fuente) de nuestro programa, la zona output donde encontramos las salidas que provocan nuestros programas y NB, un navegador de archivos a la izquierda, y la barra de herramientas en la parte superior.

Podemos modificar los elementos que queremos que sean mostrados, haciendo click en la pestaña View. Por ejemplo, seleccionando View -> Toolbars -> Memory, veremos una pequeña aplicación para ver la memoria que estamos consumiendo. Al hacer Click en View -> IDE Log, veremos un log completo de todo lo que realiza el entorno de NB.

Una vez escritos nuestros programas, podemos ejecutarlos presionando la tecla F6, O clickeando en el botón "Run Main Projet). Nada mas ejecutar, nos saldrá una terminal con nuestro programa. En la zona de output, veremos también el resultado que tenemos al compilar. En el caso de, por ejemplo, cometer un error de sintaxis, veremos algo similar a esto:

gcc -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c

main.c: In function ‘main’:
main.c:16: error: expected ‘;’ before ‘return’
make[2]: *** [build/Debug/GNU-Linux-x86/main.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2


make[2]: se sale del directorio `/home/serch/NetBeansProjects/CppApplication_1'
make[1]: se sale del directorio `/home/serch/NetBeansProjects/CppApplication_1'

BUILD FAILED (exit value 2, total time: 245ms)

Como vemos, la línea que nos marca el error, nos dice en la línea que lo tenemos y el error que es (Estaréis acostumbrados a esto si usáis GCC, pues NB usa GCC para compilar C) pero como curiosidad, si pulsamos sobre el enlace, nos subraya en la zona del código la línea que tenemos mal, en nuestro caso, porque falta un ;.

Una vez corregido nuestro fallo, probamos a ejecutar el código, y como vemos, todo va bien. Se abre nuestra terminal con nuestro programa, y finaliza con el mensaje Press [Enter] to close the terminal ... indicando que ha acabado la ejecución de nuestro programa.

Otro de los grandes pros de NB es la personalización. Podemos añadir PLugins desde Tools -> Plugins.

En la pestaña Aviable Plugins, tenemos un catálogo completo, incluyendo la descripción de cada uno de ellos. Para instalarlos, basta con marcarlos y clickear en Install.

En caso de querer usar algún compilador distinto a GCC, podemos seleccionarlo clickeando en Tools -> Options -> C/C++ -> Build Tools. Así mismo podemos navegar por los otros menús de opciones para cambiar la configuración de NB.

Como vemos, NB es bastante fácil de usar, muy personalizable, y, sobretodo, potente y eficaz. Aquí solo he descrito algunas de las opciones principales, animo a todos que lo probéis (Además, es multiplataforma) y que saquéis vuestras propias conclusiones.
79  Informática / Electrónica / Arduino en: 6 Julio 2010, 03:08 am



¿Qué es Arduino?

Arduino es una plataforma de hardware de fuente abierta basada en una sencilla placa de entradas y salidas simple y un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring. Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador

Arduino se programa con un lenguaje muy parecido a C/C++, por lo que los programadores de esta índole tiene mas fácil aprender a manejar Arduino.

El "cerebro" de Arduino es un Microcontrolador de Atmega.


¿Para qué sirve?

El objetivo principal es educar, aprender. Posee una gran sencillez para desarrollar aplicaciones, por lo cual, podemos aprender tanto electrónica, como programación, para aplicarlo tanto a domótica como a todo tipo de usos.



Definiciones:


Arduino: http://es.wikipedia.org/wiki/Arduino
Microcontrolador: http://es.wikipedia.org/wiki/Microcontrolador
Domótica: http://es.wikipedia.org/wiki/Domotica
Electrónica: http://es.wikipedia.org/wiki/Electronica

Portabilidad

Podemos compilar programas para Arduino desde los principales sistemas operativos (GNU/Linux, Mac y Windows) (El autor del post recomienda usar GNU/Linux)

Descargar para Windows: http://arduino.googlecode.com/files/arduino-0018.zip
Descargar para Mac: http://arduino.googlecode.com/files/arduino-0018.dmg
Descargar para GNU/Linux: http://arduino.googlecode.com/files/arduino-0018.tgz
GNU/Linux 64 bits: http://arduino.googlecode.com/files/arduino-0018-64-2.tgz

Donde comprar

Desde la página principal del proyecto Arduino podemos encontrar enlaces para comprarlo en varios sitios del mundo. Para españa, recomendamos brikogeek.com, por que además puedes comprar tambiñen diversos componentes para Arduino.

Oficial: http://arduino.cc/es/Main/Buy
Bricogeek: http://www.bricogeek.com/shop/10-arduino-duemilanove-usb.html



Enlaces a Sources para Arduino en el foro:


Arduino y LDR: http://foro.elhacker.net/electronica/mi_pequeno_proyecto_con_arduino_y_dos_ldr-t298576.0.html

Pulsador y Arduino: http://foro.elhacker.net/electronica/pulsador_arduino-t297961.0.html

Semáforo: http://foro.elhacker.net/electronica/semaforo_con_arduino-t297044.0.html

EmuADC: http://foro.elhacker.net/electronica/emuadc-t296721.0.html

Encender y apagar Led: http://foro.elhacker.net/electronica/arduino_encender_y_apagar_led-t295171.0.html

Comunicando Arduino con PC: http://foro.elhacker.net/electronica/comunicando_arduino_con_pc-t295248.0.html

Cronómetro: http://foro.elhacker.net/electronica/arduino_cronometro-t295167.0.html

Arduino y sensor: http://foro.elhacker.net/electronica/arduino_y_sensor-t294374.0.html

Arduino y nunchuck: http://foro.elhacker.net/electronica/arduno_probando_el_nunchuk-t299822.0.html

Arduino y su EEPROM: http://foro.elhacker.net/electronica/eeprom_y_arduino-t299824.0.html


Programar Arduino


Enlace a tutorial de C y Arduino (Incompleto): http://foro.elhacker.net/programacion_cc/tutorial_c-t291084.0.html

Referencia Extensa de código: http://arduino.cc/en/Reference/Extended
80  Programación / Scripting / dudas en Ruby en: 3 Julio 2010, 14:56 pm
Empecé ayer con Ruby (Me lo piden en cierto sitio  :-X) y empecé a estudiar con el irb bajo gnu/linux.

Tengo algunas dudas, espero que me las puedan responder:

1. Al crear una función, no hace lo que yo quiero.

escribo:

Código
  1. def fun()
  2. a =STDIN.gets
  3. a.to_i
  4. return a
  5. end

pero me devuelve siempre una cadena.

Lo que quiero hacer es introducir un número y que me lo devuelva como integer.

2. ¿Qué significa => nil ? Es que me aparece mucho pero ni idea..

3. ¿Cual es la directiva para incluir módulos y cuales son los mas usados?

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