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 - @synthesize

#46
Redes / Busco switch
23 Octubre 2012, 00:28 AM
Hey!

Busco sustituir mi d'link dsl-524t por algún switch más nuevo. Lo necesito para 2 equipos (Con tarjeta gigabit) una impresora, y para tener algún puerto libre por si viene algún colega a jugar en red (Vamos, con un switch de 5 puertos voy bien)

También lo uso como firewall, y me gustan que tengan bastantes extras. Me gustaría que tuviera soporte para, algún día, añadirle un NAS, instalar algún sistemilla estilo openWRT, etc.

¿Se les ocurre algún modelo? He estado mirando ciscos y linksys de unos 50€, y no tienen mala pinta.
#47
Foro Libre / Covers
9 Octubre 2012, 22:32 PM
Se me acaba de ocurrir, ¿Quién postea canciones que sean covers (versiones) de otras canciones? Para entretenernos un rato. Empiezo yo.

Original: http://www.youtube.com/watch?v=4zCoO3ZLKo0&feature=related

Cover: [youtube=425,350]http://www.youtube.com/watch?v=gc7EEjnZtUE[/youtube]

Me encantan los petersellers, han transformado una canción tristonta en una alegre!  ;D
#48
Con el título basca. ¿Algúyn simulador como el GT4 o 5 para PC? No tengo la PS3 necesaria para correr el GT5, y del 4 ya estoy aburrido  :P
#49
Hardware / Duda portátil clevo
4 Octubre 2012, 20:09 PM
A finales de mes me compro un barebone clevo. ¿Alguien tiene alguno? ¿Sabéis si se calientan más de la cuenta? En concreto el el modelo p170em posteriormente empaquetado por Mountain. Es que estoy pensando si ir comprado ya una base refrigeradora, y no estoy seguro. Tampoco sé si estas realmente funcionan bien. (Es mi 1º portátil propio)
#50
Hola a todos.

Tengo un iPhone 3gs y no le pude instalar bien iOS 5.1.1, necesitaba el móvil al día siguiente así que opté por instalar iOS6.

Mi pregunta es, teniendo los SHSH, una imagen de iOS5.1.1 que no actualiza el BB, puedo ahcer el downgrade? Lo intenté y me han salido milloooooooones de errores (que si 21, que si 1XXX y 2XXX...) Solucionaba cada error y me vuelve a salir otro.

¿Hay algún procedimiento para hacerlo? (Es que sin cydia no se vivir...  :-[)
#51
Foro Libre / Sobre la dimisión de Aguirre
17 Septiembre 2012, 22:17 PM
Para los que vivimos en España, esta habrá sido una noticia sonada. ¿Qué opináis? (Y ojo, no quiero iniciar para nada una discusión política, estoy hablando de la dimisión de una persona, presuntamente debido a que esta tiene una grave enfermedad).

¿Lo deja por Cáncer? ¿Presión política? ¿Aburrimiento?  :-X
#52
Foro Libre / Felicidades Fred
5 Septiembre 2012, 04:23 AM
Hoy sería otro cumpleaños de Freddie Mercury si no se lo hubiera llevado el Sida.

Me parece buena idea recordarlo. Como dijo B. May, Lover of Life, Singer of Songs.



[youtube=425,350]https://www.youtube.com/watch?v=BhpoRXbYjdY[/youtube]
#53
Foro Libre / Nueva guitarra
23 Agosto 2012, 13:20 PM
Tengo antojo de comprarme una guitarra nueva, y tengo varios modelos pensados. ¿Alguna idea? Yo he pensado...

Red Special (Black)



O si me da la vena, alguna ESP...

¿Alguna que recomendar?

#54
Foro Libre / Duda ética
19 Agosto 2012, 22:01 PM
De alguna forma u otra que ahora no viene al caso, me he hecho con un disco duro desechado por una empresa (Con la cual no tengo nada que ver). Ellos tiraron el disco y ahora está en mis manos. Lo limpié un poco y comprobé que funciona.

Dentro, hay documentos de todo tipo (De TODO), fotos personales de los trabajadores, etc.

No tengo ningún plan malévolo, sólo quiero formatear el disco duro y quedármelo para almacenar mis cositas. Aquí llega mi duda ética, ¿Debería ponerme en contacto con la empresa para decirles que si quieren recuperar información? ¿ Debería recomendarles que la próxima vez borren todos sus datos antes de tirar algo? ¿Formateo sin mas?

#55
Foro Libre / Tras las últimas noticias...
12 Agosto 2012, 03:21 AM
Ya que es foro libre, me voy a liberar un rato aquí escribiendo.

Estamos mal, por aquí por España, eso es cosa sabida. He estado viendo vídeos del SAT, y lo que ha pasado en los supermercados hace poco. Bueno, debo decir que en condiciones normales no estaría de acuerdo en la forma que se hizo, pero tal y como estamos yo mismo participaría si tuviera ocasión.

Pero afortunadamente, tras varios años pasándolo mal en mi familia, todos en paro y sin saber que iba a pasar la semana siguiente, ahora estamos algo bien, trabajando todos. Es por ello que me acabo de dar cuenta, no tengo que sacar comida sin pagarla, puedo pagarla y darla a quien la necesita. Total, no me hace falta, yo ya vivo bien. ¿Quién se apunta? ¿Alguna sugerencia sobre a donde destinar el dinero?

Empecemos a cambiar esto... Empecemos por ayudar a los nuestros, y cuando la cosa mejore, ya iremos a "comernos a los chorizos que nos gobiernan"
#56
Foro Libre / A marearse libremente
10 Agosto 2012, 23:07 PM

#57
Foro Libre / Estación meteorológica
9 Agosto 2012, 00:45 AM
Hola a todos.

Estoy programando una estación meteorológica bastante chula, para un proyecto que tengo con un amigo. La idea es ir tomando anotaciones de altura, es decir, poner la estación a volar y recopilar datos de todo tipo.

Aquí entra nuestro problema: Queremos empezar subiendo el cacharro unos 12-15 metros durante un buen rato (1 hora, quizás 2) para ir haciendo el I+D del proyecto (Que ojalá acabe por convertirse en globos sonda).

Ahora es cuando os pido ayuda: ¿Cómo elevamos mi invento?
Hemos pensado y descartado varias opciones:


  • Elementos mecánicos: Helicopteros potentes por rc: Caro, poco estable, y hace qwue te preocupes de cosas que no tiene que ver con el proyecto
  • Helio: En principio es perfecto: estable y fácil de conseguir. Pero... demasiado caro si queremos hacer varias veces el experimento de distintas formas!
  • Hidrógeno: Fácil de conseguir mediante reacciones químicas o electrolisis. Pero es peligroso,...
  • Globo aeroestático: Buena idea, pero el calor podría influir a los sensores de temperatura, y se necesiaría un globo extremadamente grande.
  • Cometas: Hay algunos tipos de cometas hechos para aguantar mucho tiempo en el aire, pero debe ser muy inestable.

Poco mas. Por ahora lo mas probable son globos de hidróogeno, pero no nos queremos meter en esos líos.

¿A alguien se le ocurre algo?  :huh: (A ser posible, triple B: Bueno, Bonito y Barato)
#58
Hardware / Nuevo portátil
7 Agosto 2012, 16:37 PM
Me he decidido a comprarme un portátil (Hasta ahora solo he tenido torres) y me gustaría comprar uno bastante bueno. El uso principal es trabajar (Sobretodo virtualizando sistemas, ESXi, MacOsX, Windows Server y variados GNU/linux) por o que debe ir sobrado de ram. También me gustaría como no utilizarlo para jugar en los viajes largos que hago y esas cosas.

He visto este http://www.mountain.es/epages/Mountain.sf/es_ES/?ObjectPath=/Shops/Store.Mountain/Products/OMPGTM17_ivy que se adapta bastante bien a lo que busco (Añadiendo la ampliación a 32gb de ram y un 3º disco duro de 750 gigas para almacenar las máquinas y eso)

¿Os parece buena opción? ¿Conocéis mejores a menos precio?

Otra duda... Se nota la diferencia entre un i7 a 21 y otro a 2.6? Porque también podría ampliarlo..

Un saludo.

Pd. Sé que es grande y pesado, pero es algo que no me importa sacrificar  ;D
#59
.NET (C#, VB.NET, ASP) / Servicio c# vs2008
21 Marzo 2012, 12:57 PM
Tengo un problemilla urgente: Tengo un Servicio hecho en c# (visual studio 2008) el cual instancia y ejecuta un método, el cual tiene dentro un bucle. Que el bucle funcione es vital para el programa. Pero el servicio no arranca, pues supongo que queda a la espera de que acabe el bucle (El cual no acabará en un largo periodo de tiempo, mas que los 30 segundos de windows).

Pues bien, necesito que el servicio quede corriendo. ¿Alguna idea?
#60
Hola a tod@s.

Tengo un archivo access bastante antiguo, el cual estaba protegido por contraseña y por usuario (No se si me explico bien; no me deja acceder a la db porque no soy administrador o no se qué historias).

No es una base de datos mía ni tengo posibilidad de pedir al antiguo dueño que me de acceso. La contraseña la tengo.

Bien, ¿Cómo hago para acceder o quitar la protección?  :huh: La meta final es pasar todo a un archivo sqlite.

Un saludo.
#61
Scripting / Reproductor cli en python
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 (python) [Seleccionar]


#!/usr/bin/env python2
#-*- coding: UTF-8 -*-

import os, gobject
import pygst
pygst.require("0.10")
import gst

from os.path import join, getsize
from mimetypes import guess_type
from random import shuffle

gobject.threads_init()

class AllFromDirectory():

def __init__(self, directory):
self.directory = directory
self.biblio = dict()
self.autoid = 0

def get(self):
for root, dirs, files in os.walk(self.directory):
for self.filen in files:
self.mime = guess_type(self.filen)
self.auxmime = str(self.mime[0])
self.endmime = self.auxmime.split(os.sep)
if self.endmime[0] == "audio":
self.biblio[self.autoid] = root+os.sep+self.filen
self.autoid = self.autoid + 1

return self.biblio

def getLen(self):
return len(self.biblio)


class Player():
def __init__(self):

# Obtenemos la lista de archivos
x = AllFromDirectory(directory)
self.biblio = x.get()
self.total_tracks = x.getLen()
self.numeros = range(0, int(self.total_tracks))
shuffle(self.numeros)
self.n = 0

self.create_pipeline()

def create_pipeline(self):

n = self.numeros[0]

self.song = self.biblio[n].split(os.sep)
print 'Reproduciendo: '+self.song[-1]

cdsrc = 'filesrc location="%s" name=file ! decodebin ! volume name=volume ! alsasink' % (self.biblio[n])
self.pipeline = gst.parse_launch(cdsrc)

bus = self.pipeline.get_bus()

bus.add_signal_watch()

bus.connect("message::tag", self.bus_message_tag)
bus.connect("message::error", self.bus_message_error)
bus.connect("message::eos", self.nexts)

self.pipeline.set_state(gst.STATE_PLAYING)

self.loop = gobject.MainLoop()
self.loop.run()

def bus_message_error(self, bus, message):
e, d = message.parse_error()
print "ERROR:", e
#exit(1)

def bus_message_tag(self, bus, message):

"""Esta es la función encargada de recoger los datos del bus de Gstreamer, principalmente los tags de los ficheros de audio"""
self.tags = ''
#we received a tag message
taglist = message.parse_tag()
#put the keys in the dictionary
for key in taglist.keys():
try:
self.file_tags[key] = taglist[key]
except:
return False

try:
self.tags += self.file_tags['title'] + " "
except:
self.tags += "Título desconocido."

try:
self.tags += "de: "+self.file_tags['artist']+"\n"
except:
self.tags += "Artista desconocido."

self.song = self.tags.split(os.sep)
print 'Reproduciendo', self.song[-1]

def nexts(self, w, *args):

if self.n < self.total_tracks:
self.n += 1
else:
self.n = 0

n = self.numeros[self.n]
self.song = self.biblio[n].split(os.sep)
print 'Reproduciendo: '+self.song[-1]

self.loop.quit()
self.pipeline.set_state(gst.STATE_NULL)
self.pipeline.get_by_name('file').set_property('location', self.biblio[n])
self.pipeline.set_state(gst.STATE_PLAYING)
self.loop.run()

directory = '/media/HD/Música'
mega = list()

p = Player()

#62
GNU/Linux / problema con metadistro debian
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
PHP / Problema con Symfony (Doctrine)
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:

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

Y me devuelve esto:

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
Scripting / py2exe y bitrock
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
Scripting / Weather tkinter (Python)
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 (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# By Sergio López
# GPLv3
# http://daemonfreedom.blogspot.com/

try:
from Tkinter import *       #For GUI

except ImportError:
print "Weather Tkinter: No se encuentra python-tk.\nPara instalar el paquete en su equipo:\nsudo apt-get install python-tk\n\n"
exit(1)

import urllib2              #For urlopen

class Application(Frame):
"""For GUI Aplication"""

def __init__(self, master=None):
Frame.__init__(self, master)
self.grid()
self.myvar =StringVar()
self.createWidgets()

def createWidgets(self):
self.listfromfile =[]
print "Weather Tkinter: createWidgest"
self.cpLabel = Label(self, text="Código postal:")
self.aboutLabel = Label(self, text="Weather\nTkinter")
self.webLabel = Label(self, text="Mas app's: daemonfreedom.blogspot.com ")
self.textEntry = Entry(self, textvariable=self.myvar)
self.okButton = Button ( self, text='Ok', command=self.okAction )
self.impButton = Button ( self, text='Imprimir a archivo', command=self.imptofile)
self.quitButton = Button ( self, text='Salir', command=self.quit )
self.textZone = Text(self, height=8, width=30)
self.bmZone = Text(self, height=4, width=9)

self.cpLabel.grid(row=1, column=1)
self.aboutLabel.grid(row=3, column=3)
self.webLabel.grid(row=2, column=1)
self.textEntry.grid(row=1, column=2)
self.okButton.grid(row=1, column=3)
self.impButton.grid(row=2, column=2)
self.quitButton.grid(row=2, column=3)
self.textZone.grid(row=3, column=1)
self.bmZone.grid(row=3, column=2)

def okAction(self):
print "Weather Tkinter: Ok"
self.textZone.delete(1.0, END)
self.myvar = self.textEntry.get()
self.imp =self.genWeather(self.myvar)
self.impList(self.imp)

def genWeather(self, cp):
try:
print "Weather Tkinter: genWeather"
self.cad="http://www.google.com/ig/api?weather="+cp+",spain&hl=es"
self.lista = []

self.f = urllib2.urlopen(self.cad)
self.down = self.f.read()
self.f.close()

for self.element in self.down:
if self.element == "<":
self.cadena =""
if self.element == ">":
self.cadena=self.cadena+">"
self.lista.append(self.cadena)
self.cadena=""
self.cadena =self.cadena+self.element
self.final=[self.lista[4], self.lista[5], self.lista[13], self.lista[14], self.lista[15], self.lista[16], self.lista[18]]
return self.final
except IndexError:
print "Weather Tkinter: Tipo nulo: genWeather"

def impList(self, paramtolist):
try:
print "Weather Tkinter: impList"
cont =0
self.state =0
for self.element in paramtolist:
if cont ==3:
self.textZone.insert(END, "Temperatura F: ")
if cont ==4:
self.textZone.insert(END, "Temperatura C: ")
self.textZone.insert(END, self.retSplitXml(self.element))
self.textZone.insert(END, "\n")
cont=cont+1

self.listfromfile.append(self.retSplitXml(self.element))
self.listfromfile.append("\n")
print self.listfromfile
except NoneType:
print "Weather Tkinter: Tipo nulo: impList"


def retSplitXml(self, splitcad):
print "Weather Tkinter: retSplitXml"
self.splitcad = splitcad.split("\"")
return self.splitcad[1]

def imptofile(self):
print "Weather Tkinter: imptofile"
wtfile = open("weather.txt", "w")
wtfile.writelines(self.listfromfile)
wtfile.close()


def main():

print "Weather Tkinter: HELLO, This is Weather Tkinter! "

app = Application()
app.master.title("Weather Tkinter")
app.mainloop()

print "Weather Tkinter: Bye! "
return 0

if __name__ == '__main__':
main()


Otras versiones y apuntes: http://daemonfreedom.blogspot.com/2010/11/weather-tkinter.html
#66
Hardware / Problema con Asus PC-DL
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
Hardware / [SOLUCIONADO] hdd externo
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
Electrónica / EEPROM y Arduino
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

#include <EEPROM.h>

void setup()
{
 for (int i = 0; i < 512; i++)
   EEPROM.write(i, i);
}

void loop()
{
}


   READ

#include <EEPROM.h>

int a = 0;
int value;

void setup()
{
 Serial.begin(9600);
}

void loop()
{
 value = EEPROM.read(a);

 Serial.print(a);
 Serial.print("\t");
 Serial.print(value);
 Serial.println();

 a = a + 1;

 if (a == 512)
   a = 0;

 delay(500);
}


*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
Foro Libre / Sitios con wifis libres
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 C/C++ / 3D en C
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:

   typedef struct vertices
   {
   int ver0;
   int ver1;
   int ver2;
   int ver3;
   int ver4;
   int ver5;
   int ver6;
   int ver7;
   } vertices;



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:

   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.
#71
Electrónica / protocolo para controladores
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
(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
Foro Libre / Para todos ustedes
10 Julio 2010, 04:51 AM
[youtube=425,350]http://www.youtube.com/watch?v=kdahabPqQsI[/youtube]

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 C/C++ / Punto y coma
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?

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define NUMELTS 20

void radixsort(int x[], int n)
{
  int front[10], rear[10];
  struct {
    int info;
    int next;
  } node[NUMELTS];
  int exp, first, i, j, k, p, q, y;

  /* Inicializar una lista vinculada */
  for (i = 0; i < n-1; i++) {
    node[i].info = x[i];
    node[i].next = i+1;
  } /* fin del for */
  node[n-1].info = x[n-1];
  node[n-1].next = -1;
  first = 0; /* first es la cabeza de la lista vinculada */
  for (k = 1; k < 5; k++) {
    /* Suponer que tenemos números de cuatro dígitos */
    for (i = 0; i < 10; i++) {
      /*Inicializar colas */
      rear[i] = -1;
      front[i] = -1;
    } /*fin del for */
    /* Procesar cada elemento en la lista */
    while (first != -1) {
      p = first;
      first = node[first].next;
      y = node[p].info;
      /* Extraer el kâsimo dÁgito */
      exp = pow(10, k-1); /* elevar 10 a la (k-1)ésima potencia */
      j = (y/exp) % 10;
      /* Insertar y en queue[j] */
      q = rear[j];
      if (q == -1)
front[j] = p;
      else
node[q].next = p;
      rear[j] = p;
    } /*fin del while */

    /* En este punto, cada registro está en su cola basándose en el dígito k
       Ahora formar una lista única de todos los elementos de la cola.
       Encontrar el primer elemento. */
    for (j = 0; j < 10 && front[j] == -1; j++);
      ;
    first = front[j];

    /* Vincular las colas restantes */
    while (j <= 9) { /* Verificar si se ha terminado */
      /*Encontrar el elemento siguiente */
      for (i = j+1; i < 10 && front[i] == -1; i++);
;
      if (i <= 9) {
p = i;
node[rear[j]].next = front[i];
      } /* fin del if */
      j = i;
    } /* fin del while */
    node[rear[p]].next = -1;
  } /* fin del for */

  /* Copiar de regreso al archivo original */
  for (i = 0; i < n; i++) {
    x[i] = node[first].info;
    first = node[first].next;
  } /*fin del for */
} /* fin de radixsort*/


int main(void)
{
  int x[50] = {NULL}, i;
  static int n;

  printf("\nCadena de números enteros: \n");
  for (n = 0;; n++)
    if (!scanf("%d", &x[n])) break;
  if (n)
    radixsort (x, n);
  for (i = 0; i < n; i++)
    printf("%d ", x[i]);
  return 0;
}
#75
GNU/Linux / ¿Qué instalar?
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
Foro Libre / Actualizando mp3 del móvil
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
Foro Libre / Intercambio de clicks
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 C/C++ / Conociendo NetBeans
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
Electrónica / Arduino
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
Scripting / dudas en Ruby
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 (ruby) [Seleccionar]
def fun()
a =STDIN.gets
a.to_i
return a
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?

#81
ASM / leave y movl
2 Julio 2010, 00:28 AM
Estoy empezando a depurar programas con GDB, y hacienod disas main me he encontrado con 2 opcodes que no cononzco. He bsucado por google, pero no he sacado nada en claro

SOn: leave y movl.

Movl me imagino que es algo de mover, por que si conozco Mov, peor no sé que pinta la L ahí.

Sobre leave, decir que me aparece dentro de otra función que no es main.

Código:

serch@serch-server:~/Escritorio$ gdb -q a.out

Leyendo símbolos desde /home/serch/Escritorio/a.out...(no se encontraron símbolos de depuración)hecho.

(gdb) run

Starting program: /home/serch/Escritorio/a.out

Hi ASM!



Program exited normally.

(gdb) disas main

Dump of assembler code for function main:

   0x08048414 <+0>: push   %ebp

   0x08048415 <+1>: mov    %esp,%ebp

   0x08048417 <+3>: and    $0xfffffff0,%esp

   0x0804841a <+6>: call   0x8048428 <proc>

   0x0804841f <+11>: mov    $0x0,%eax

   0x08048424 <+16>: mov    %ebp,%esp

   0x08048426 <+18>: pop    %ebp

   0x08048427 <+19>: ret   

End of assembler dump.

(gdb) disas proc

Dump of assembler code for function proc:

   0x08048428 <+0>: push   %ebp

   0x08048429 <+1>: mov    %esp,%ebp

   0x0804842b <+3>: sub    $0x18,%esp

   0x0804842e <+6>: mov    0x804a020,%eax

   0x08048433 <+11>: mov    %eax,%edx

   0x08048435 <+13>: mov    $0x8048520,%eax

   0x0804843a <+18>: mov    %edx,0xc(%esp)

   0x0804843e <+22>: movl   $0x8,0x8(%esp)

   0x08048446 <+30>: movl   $0x1,0x4(%esp)

   0x0804844e <+38>: mov    %eax,(%esp)

   0x08048451 <+41>: call   0x8048344 <fwrite@plt>

   0x08048456 <+46>: leave 

   0x08048457 <+47>: ret   

End of assembler dump.

(gdb)
#82
Foro Libre / Mejor guitarrista
30 Junio 2010, 23:32 PM
¿Quién os parece el mejor guitarrista de rock y derivados?

Mantenía una conversación con un amigo sobre esto, y se me ocurrió ver las opiniones de los del foro.

Para mi Brian Harold May, el mejor. Tanto por técnica, como por ser el inventor de varios estilos (Como el tapping, que equivocadamente se piensa que fue creado por Van Halen  :-\)
[youtube=425,350]
http://www.youtube.com/watch?v=JYabmM-uxdE[/youtube]

[youtube=425,350]http://www.youtube.com/watch?v=QmbTA9CAr30&feature=related[/youtube]

[youtube=425,350]http://www.youtube.com/watch?v=CqOdu2xjlBA[/youtube]

Y por supuesto

[youtube=425,350]http://www.youtube.com/watch?v=6VDRzlgtL6A[/youtube]
#83
Foro Libre / Conversación
29 Junio 2010, 23:29 PM
Os dejo una conversación que he tenido hace rato por el chat de Tuenti. Situación, me agregan una persona a la que no conozco y acepto por curiosidad (No tengo nada de que avergonzarme ni nada que se pueda usar contra mi)

Total, ocurre lo siguiente;

Citar* Guillermo: hola
*
* Yo: Buenas
*
* Guillermo: que tal
* soy desarrollador web
* Yo: Yo bien, ¿Tú?
*
* Guillermo: bien
* que edad tienes?
* yo 17
*
* Yo: 16
*
* Guillermo: yo 17
*
* Yo: Ya me lo has dicho.
*
* Guillermo: que lenguajes dominas?
*
* Yo: C y estoy empezando con asm
* Te puedes pasar por mi blog par para mas info
*
* Guillermo: a ok
* yo soy exporto
* en lenguajes web
* php,javascript,css,xhtml,xml,ajax,json,mysql
*
* Yo: Vale.
*
* Guillermo: no dominas ninguno de la web?
*
* Yo: Sé maquetar HTML, aunque no se considere como lenguaje de programación estructurado.
* Guillermo: php nada
* pues php es mi lenguaje preferido
* es una delicia
* tambien se pascal
*
* Yo: pascal no me gusta, y php deriba de C, pero está muy poco tipeado para mi
* me parece uan desfachated eso de no declarar tipo de variables
* dejas toda la gestión al equipo, es una perdida grande de memoria
*
* Guillermo: ya pero el compilador de php
* esta optimizado para eso
* pero para la web
* es lo mejor
* usar php y mysql
* bajo apache
*
* Yo: ¿De verdad eres experto?
*
* Guillermo: bueno experto
* llevo 3 años
* programando el php
* lo conozco bastante bien
* he hecho varios proyectos
*
* Yo: php no es compilado, no usas compilador, es un lenguaje interpretado
* es básico
*
* Guillermo: el compilador
* es el motor
* es decir
* tu no lo tienes que compilar
* si no que el interprete lo hace por ti digamos
*
* Yo: El intérprete, no el compilador como dijiste
*
* Guillermo: si perdona
* y que quieres estudiar
* yo el año que viene
* empiezo la ingenieria
*
* Yo: Estoy buscando trabajo, por ahora no voy a estudiar.
*
* Guillermo: no acabaste la ESO?
*
* Yo: Eso qué mas dá?
*
* Guillermo: no se tio
* te quieres dedicar a la informatica?
*
* Yo: Me es indiferente
*
* Guillermo: a ok
* yo si
* lo tengo clarisimo
*
* Yo: Vale
*
* Guillermo: y tienes algun proyecto pensado?
*
* Yo: Estoy en ellos.
*
* Guillermo: algo relaccionado con la web?
*
* Yo: No.
*
* Guillermo: java que tal lo llevas?
*
* Yo: No me gusta trabajar en virtual
* me gusta trabajar a bajo nivel
*
* Guillermo: si tanto te gusta linux
* sabras phyton no?
*
* Yo: Me gusta GNU, Linux es el núcleo. Y no, no uso python, te reitero que uso C y estoy aprendiendo asm.
*
* Guillermo: osea que te gusta solo la licencia
* GNU?
*
* Yo: Debes informarte un poco mas de lo que es GNU.
* La licencia es GPL.
* No GNU.
* Guillermo: Bueno chaval
* no vallas de listo
* tienes que ser mas humilde
* hasta luego
* que te valla bien fracasado

***************

Guillermo Pascual

Solo tengo una duda, y es si me equivoqué en la parte PHP, pues es un lenguaje que desconozco.. Pero por lo demás, observen ustedes mismos xD
#84

#include <stdio.h>
#include <stdlib.h>

#define MAX 5

void push( int*, int*, int );
int pop( int*, int* );
int altura( int* );

int main( void )
{
   int *pila, *tmp, elementos = 0, i;

   pila = calloc( MAX, sizeof( int ) );
   tmp = pila;

   printf( "altura:%d\n", altura( &elementos ) );

   for ( i = 0; i < MAX; ++i )
   {
       printf( "push:%d\n", i + 1 );
       push( &(*pila), &elementos, i + 1 );
       pila++;
   }

   printf( "altura:%d\n", altura( &elementos ) );
   
   pila--;
   for ( i = 0; i < MAX; ++i )
   {
       printf( "pop:%d\n", pop( &(*pila), &elementos ) );
       pila--;
   }

   printf( "altura:%d\n", altura( &elementos ) );

   free( tmp );

   return 0;
}

void push( int *pila, int *elementos, int num )
{
   *pila = num;
   ++(*elementos);
}

int pop( int *pila, int *elementos )
{
   int num;
   num = *pila;

   *pila = 0;

   --(*elementos);
   return num;
}

int altura( int *elementos )
{
   return (*elementos);
}


Editado
Littlehorse: Evita el spam a sitios externos a elhacker.net que no sean estrictamente relevantes. Tienes el espacio suficiente para transcribir el contenido de tu blog al post. Gracias.
#85
Foro Libre / Desafío Innocentive
28 Junio 2010, 04:41 AM
By Ged

Se trata de un punto de reunión entre empresas o instituciones con algún tipo de problema, y gente (inventores, científicos, ingenieros, o cualquiera con conocimientos suficientes para dar una solución.)

Lo interesante es que por resolver el problema ofrecen una cantidad que oscila entre 1.500 $ y 1.000.000 $. Como supondréis no son temas sencillos ni triviales.

Leer mas.. http://www.ikkaro.com/innocentive
#86
Electrónica / Pulsador arduino
28 Junio 2010, 02:10 AM
Tengo un pulsador (http://www.bricogeek.com/shop/img/p/85-200-large.jpg) y me gustaría que cuando sea pulsado, cambie el valor de una variable dentro de mi programa. He pensado en usar interrupciones, probé con CHANGE, pero nada.

¿Alguna idea?
#87
Programación C/C++ / Pilas (Ejemplo)
27 Junio 2010, 06:42 AM
Intento aplicar una Lista a un vector (Si, en vez de sacar elementos los dejo a 0) pero no funciona del todo bien. ¿Ideas?


#include <stdio.h>
#define PILA_MAX 5

/*
* Implementación de una pila
* en un vector de 5 elementos
* por Sergio L. para
* daemonfreedom.blogspot.com
* Compilable bajo GCC
*/

void mostrarPila();                                 // Mostrar Pila
void pilaPush(int);                                 // Acción PUSH
void pilaPop(int);                                  // Acción POP
void inicializa();                                  // Inicializar la Pila

int pila[PILA_MAX];                                 // Definición de la Pila
int cont;                                           // Contador

int main (void)
{
int i2;
cont =0;

inicializa();
do
{
for (i2=0;i2<PILA_MAX;i2++)         // Llenamos la pila
{
pilaPush(i2);
}
mostrarPila();

for (i2=PILA_MAX;i2>0;i2--)         // Vaciamos la pila tal y como indica LIFO
{
pilaPop(i2);
}
mostrarPila();                      // Mostramos la pila

cont++;

} while (cont!=6);

return 0;
}

void inicializa()
{
int i;
for (i=0;i<PILA_MAX;i++)
{
pila[i] =0;
}
}

void pilaPop(dnum)
{
pila[dnum] =0;
}

void pilaPush(dnum2)
{
pila[dnum2] =cont;
}

void mostrarPila()
{
int interior;
for (interior=PILA_MAX;interior>0;interior--)
{
fprintf(stdout, "Elemento %d es %d\n", interior, pila[interior]);
}
}
#88
GNU/Linux / openSuSe (Nuevo)
26 Junio 2010, 23:15 PM
Buenas

Quiero probar openSuSe (openSUSE-11.2-DVD-i586) Ya tengo el dvd descargado y el VBox preparado. Tengo experiencia en sistemas basados en Debian y en CentOS.

Esto al ser nuevo, no sé con que me voy a encontrar, ¿Alguien me dice las diferencias con los otros sistemas? ¿Algo importante que deba saber?

Gracias
#89
Foro Libre / Me pareció digno ponerlo aquí
26 Junio 2010, 23:03 PM
Y no pienso comentar nada mas.  ;-)

[youtube=425,350]http://www.youtube.com/watch?v=Ab9X0SuvrYo[/youtube]

Es del 2007, pero lo propongo como canción del verano de este año xD
;-)
#90
Os lo dejo aquí, extraído directamente de mi nuevo blog, y anteriormente de mi cuaderno de apuntes.




Este ejemplo se desarrolla con Borland C++ 3.1 (Bajo Windows XP) Podemos manejar las interrupciones del ratón gracias a la interrupción 33h.

Tenemos un programa en modo gráfico bajo C (Utilizando graphics.c) y deseamos programar un botón, que al ser pulsado con el botón izquierdo de nuestro ratón, el programa ejecute una acción.

Tras programar la parte visual, y tras tener dibujado nuestro botón llegamos a programar la interrupción.

Lo primero que debemos hacer es pasar la función al registro AX. Una vez hecho, interrumpimos y 'preguntamos' por los valores registrados en BX, CX,...

Si hacemos esto dentro de una función, nos podrá devolver si se ha hecho click o no.

Antes de empezar a usar el ratón tenemos que inicializarlo. Podemos escribir un procedimiento similar a este:

   void iniciarRaton()
    {
    union REGS registro_e, registro_s;
    registro_e.x.ax =0; //Función 00h
    int86 (0x33, &registro_e, &registro_s);
    }



Cuando llamemos a este procedimiento, reiniciaremos el ratón. Para mas inri, podemos transformar el procedimiento en función, haciendo que devuelva 0 o 1 dependiendo de si se ha podido reiniciar el ratón o no.

También indicar que en vez de declarar union REGS dentro de cada procedimiento o función, es mas cómodo declararlo fuera de todas las funciones, haciendo que sea común a todas.

Función para los botones del ratón:

    int movRat()
    { //Suponemos que union REGS es común
    registro_e.x.ax =3;
    int86 (0x33, &registro_e, &registro_s);
    if (registro_s.x.bx ==1) return 1;
    if (registro_s.x.bx ==2) return 2;
    }



Esta función nos devuelve 1 si se pulsa el botón izquierdo del ratón en cualquier posición de la pantalla, y 2 para el botón derecho.

Si queremos delimitar la zona de actuación de la interrupción, la tenemos que pasar las coordenadas del botón a CX y DX (X y R, respectivamente)

Con esto, solo nos quedaría hacer una comprobación a la función movRat, para comprobar si se ha producido una interrupción.

    if (movRat()==1) fprintf(stdout, "Botón Izquierdo\n");