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 - astinx

#1
Hola, me ha sucedido algo bastante extraño, siempre que he instalado Debian, la conexión a internet se configura automaticamente y sale andando, sin embargo, el otro día instale Debian, tengo conexión a internet, pero el icono de la conexión a internet (las computadoras en la barra de herramientas) aparece como desconectado, por este motivo no puedo usar ni Pidgin ni Evolution.

Acá les muestro la info de mi conexión:

cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
auto eth0
iface eth0 inet dhcp

ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:25:22:2c:ab:fd  
         inet addr:190.188.85.153  Bcast:255.255.255.255  Mask:255.255.255.0
         inet6 addr: fe80::225:22ff:fe2c:abfd/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:10389124 errors:0 dropped:0 overruns:0 frame:0
         TX packets:864607 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:2844175491 (2.6 GiB)  TX bytes:81148533 (77.3 MiB)
         Interrupt:27 Base address:0xa000

lo        Link encap:Local Loopback  
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:8 errors:0 dropped:0 overruns:0 frame:0
         TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

pan0      Link encap:Ethernet  HWaddr b2:68:49:0b:f2:61  
         BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

¿Alguno se imagina a que se podría deber esto?, yo soy de madera con el tema de redes, estuve investigando por algunos lugares, pero no pude llegar a nada.
#2
Scripting / ¿Lenguaje tipo javascript + OO?
18 Agosto 2012, 08:04 AM
Hola, estoy buscando un lenguaje para desarrollar el front-end de una aplicación web. Me gustaría usar algo liviano como javascript, pero la verdad ya estoy un poco cansado de javascript y estoy buscando algo mas "elegante". No quiero usar Flash ni Actionscript porque me parecen muy lentos y pesados.
Buscando me puse a ver Dart de Google, pero sin embargo, me parece que es un lenguaje que todavía esta muy "verde", demasiado nuevo. Me gusta la idea de javascript + OO, ¿alguno de ustedes conoce alguna alternativa viable?

Saludos y muchas gracias por detenerse a leer.
#3
Hola, estoy realizando un pequeño proyecto por cuenta propia. El mismo consiste en lo siguiente:-"Desarrollar un script en python que lea de un JSON un archivo config, el cual contiene información de configuración, para configurar automaticamente una distro de debian"

¿Por qué?
Bueno, hasta hace poco era un fanatico de las distros y la eficiencia, ya hace 3 años que soy usuario de Linux (o GNU/Linux, sinceramente no le doy importancia a la diferencia, no se ofendan por favor). Comenze con Ubuntu, pero cuando me di cuenta de que con tantas actualizaciones terminaba bajando basura y que al fin y al cabo (creo yo) es una de las distros mas "borrachas" de Linux, termine migrando a algo mas generico y mas core, Debian. He provado casi todos los entornos de escritorio y tratar de sacarle al maximo la eficiencia a Debian, sin embargo, me ha pasado mas de una vez que he dicho:-"A la $%&! Instalare todo desde cero con solo lo basico y necesario!".

Sin embargo, una cosa que me molesta, es que uno tiene que configurar varias cosas por cuenta propia cuando instala por primera vez Debian (si es que se quiere tener un sistema ordenado), packages, bajar el sudo, la filestructure de uno, los repositorios, aplicaciones, etcétera.

Por eso me decidi a hacer un script que tomara toda mi info de "customizacion" y la ejecutara. Helo aqui un ejemplo de mi archivo config:

Código (javascript) [Seleccionar]

#Users name (the same of the /home/<user_name> folder this must exist!)
{"user_name" : "astinx",

#The file structure of your environment
"filestructure" :  "dev/tools/eclipse
dev/tools/smalltalk
dev/tools/ada
dev/tools/pl1
dev/tools/blender
dev/tools/php
dev/tools/python
dev/tools/c
dev/tools/ruby
dev/tools/actionscript
dev/tools/js

dev/frameworks/java/grails
dev/frameworks/java/play
dev/frameworks/java/spring
dev/frameworks/java/struct
dev/frameworks/java/gwt

dev/flash/flex

dev/frameworks/python/django

dev/frameworks/php/codeigniter
dev/frameworks/php/symphony

dev/frameworks/myframeworks

dev/references/hibernate
dev/references/spring
dev/references/blazeds

dev/workspaces/eclipseworksheet
dev/workspaces/phpworksheet

dev/servers

dev/scripts/python
dev/scripts/bash
dev/scripts/ruby

repos/git
repos/svn

books

college/mypapers

media/video
media/music
media/images

job",
#Repositories that you wanna make a checkout
"repositories_checkout" : "svn://...",
#Packages that you wanna install
"packages" : "geany
 virtualbox-ose
 pgadmin3",
#External devices like ntfs partitions that you wanna have every time mounted  
"external_devices" : "/dev/sda3 => externalntfs",
#.deb files that you wanna install (they must be at the same level of this file and init_script.py file)
"backup_debs" : "google-chrome.deb",
#.tar, .giz or .zip that you wanna extract in some of the filestructure folder.
#The sintax is <file_name> => <destination_folder> with <extension>
"backup_files" : "eclipse_environment.zip => /dev/tools/eclipse with .zip
 webdevelop.tar => /dev/tools/php with .tar",

#Anothers scripts that you wanna run when this script finishs
#The sintax is <script_name> with <bash|python|anything what make it run>
"anothers" : "java_install_script.sh with bash
 hi.py with python"}


PD: Perdonen mi "ingles" xD

Esos parametros que inclui en el JSON son algunos de los que pense que podrian resultar utiles, pense:-"¿Que se me hace molesto cuando recien acabo de formatear la maquina?". Hacer la filestructure, descargar los packages, modificar los init.d para que siempre me monten los dispositivos externos (tengo una particion con Windows CHAN!... para jugar videojuegos y tengo un NTFS que uso como boveda), descomprimir mis programas en los respectivos directorios, instalar los .deb, tirar algun que otro script de backup, etcétera.

Mi script de backup lo hice en Python (algunos pensaran:-"¿Por que no en Bash?", simple, ODIO Bash, programar en Bash, no es programar xD)

Helo aqui:
Código (python) [Seleccionar]

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
#
#       init_script.py
#      
#       Copyright 2012 astinx <astinx@astinxmachina>
#      
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#      
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#      
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.

import datetime
import sys
import os
import subprocess
import json
import re

# This is the only thing that you can touch of this script, the config file absolute path.
config_path = "/home/astinx/dev/scripting/bash/config"
comment_regex = "(\A#.*\n*)"
whiteline_regex = "(\A\s*\Z)"

# First, we clean the config file, this is, erase all the comments
config_file = file(config_path,"r")
# A temporary file to put the parsed config file, without comments
config_temp = file(config_path+"_temp","w")
for line in config_file:
if (not (re.match(comment_regex+"|"+whiteline_regex,line))):
config_temp.write(line)

config_file.close()
config_temp.close()

# Now we clean the \n like dev/asd\ndev/qwe", to  dec/asd,dev/qwe",
config_json = file(config_path+"_json","w")
config_temp = file(config_path+"_temp","r")
for line in config_temp:
# If is something like '"packages" : "geany'
if (re.match(".*\n\Z",line) and (not(re.match('.*\",\n\Z',line))) and (not(re.match("({)|(.*})",line)))):
line = line.replace("\n",", ")
line = line.replace("\t","")
config_json.write(line)
else:
line = line.replace("\t","")
config_json.write(line)
config_json.close()
config_temp.close()


# Well the config file is cleaned, now we can open it as a JSON object

config_path = "/home/astinx/dev/scripting/bash/config"
config_path = config_path + "_json"
jsonfile = file(config_path,"r")
json_string = jsonfile.read()
jsonfile.close()
json_obj = json.loads(json_string)
config_dictionary = dict(json_obj)

# Now we get the environment variables from the JSON
user_name = config_dictionary.get("user_name")
filestructure = config_dictionary.get("filestructure")
repositories_checkout = config_dictionary.get("repositories_checkout")
packages = config_dictionary.get("packages")
external_devices = config_dictionary.get("external_devices")
backup_debs = config_dictionary.get("backup_debs")
backup_files = config_dictionary.get("backup_files")
anothers = config_dictionary.get("anothers")

#We build the filestructure

for directory in filestructure.split(','):
print "Building "+directory+" ...\n"
try:
os.system("mkdir -p "+directory)
except OSError, e:
print "No se pudo crear el directorio ["+str(e)+"]"
except ValueError, e:
print "Uno de los directorios ingresados es ilegible ["+str(e)+"]"


Apenas lo único que llevo hecho es esta parte, que seria el "parser de la aplicación", es que al parecer la librería de JSON, se mama un poco si encuentra algo del estilo <clave>:<valor>, donde valor incluye saltos de linea. Por eso tuve que introducir un poco de código, para limpiar el JSON antes de traérmelo.

Me gustaría que me dieran sus opiniones acerca de que otro campo podría incluir en el JSON de config, de manera que este script de customizacion sea lo mejor posible, si quieren aportar con código también son bienvenidos,  acá les dejo el repo donde tengo colgado el código:
http://code.google.com/p/pcustom

Cualquier cosa si quieres ser miembros para comitear codigo me envian un mensaje privado.

Saludos y gracias por su tiempo, sus criticas seran bienvenidas!
#4
Hola que tal, he estado investigando acerca de como podría armar una expresión regular que haga lo siguiente:

En base a un string de html tipo "asd<strong>asd</strong> <strong>asd</strong> <strong>asd</strong>asd asd<strong>asd</strong>asd"

que al utilizar esta expresión regular me quite las tags de las palabras en donde haya estilos parciales, es decir,

asd<strong>asd</strong> se vería como asdasd como vemos tenemos solo parte de la palabra en negrita, lo que quiero es hacer un replace por "" y que me quede asdasd

<strong>asd</strong> se vería como asd como vemos todo esta en negrita, no hay ninguna letra que sobresalga y no este en negrita, por ende queda tal cual esta.

<strong>asd</strong>asd se vería como asdads como vemos el ultimo asd no esta en negrita y el primero si, por ende quiero quitarle los tags y que quede como asdasd

asd<strong>asd</strong>asd se veria como asdasdasd por ende tenemos un asd que esta en negrita entremedio y dos asd a los laterales de la palabra que no están en negrita, así que quiero sacar los tags y que me quede como asdasdasd

Esa sería la lógica de mi expresión regular, he estado buscando por varios sitios, leyendo bastante, pero no encuentro la forma de machear las tags y no las palabras en los laterales. Si alguien conoce alguna expresión regular similar, que pueda servir de inspiración, bienvenido sea.

Muchas gracias por detenerse a leer, saludos.
#5
Hola, estoy implementando un programa que del lado del cliente funciona con flex, flash y muestra textos. El problema consiste en lo siguiente: El html que puede mostrar flex en un text area es un poco raro, por ejemplo, si tengo un tag b anidado dentro de un tag span, se rompe. Por esa razón necesito parsear el html que me devuelve tinyMCE, antes de subirlo a la base de datos, en el lado del servidor, que por cierto el lado del servidor funciona con java + jsp.

Lo anterior lo solucione haciendo algunos parseos en el servlet que subia los textos a la BD, en base al html que me devolvía tinyMCE. Sin embargo ahora se me sumo otro problema, por cierto motivo, no puedo permitir palabras con estilos a medias, por ejemplo:
la palabra tinyMCE  tendría que quedar como tinyMCE

Ahora se me sumo otro parseo mas, y francamente ya no se de donde enchufarme.Opte por hookearme a tinyMCE (dado que en la configuración del tiny hay varias tags que opte por ignorar y ya cuando envio el request al servlet, estas tags me las borra) y conseguir el html del text area ante cada evento onchange, sin embargo, ¿que hago con eso?, si perfecto, conseguí el html del text area y puedo parsearlo en javascript, pero, ¿como lo parseo?, ¿existe alguna librería que corra en java o javascript que me permita moverme de manera comodo por el DOM (SIN QUE NORMALIZE AUTOMATICAMENTE EL HTML)?, ¿ustedes que metodos usarían?.

Encima a todo esto piensen que no necesariamente, al parsear los estilos parciales, tengo que tener en cuenta solo los tags <b> e <i> ya que practicamente cualquier tag cuenta con el atributo style y ahi metido puede tener style="fontWeight: bold" y eso luce como negrita, pese a que no esta dentro de un tag <b>. Por lo tanto tengo que ir iterando sobre el dom, preguntando si tiene el atributo style puesto o si es un tag de estilo (por ejemplo, strong, b, em o italic), si se da "truncar" el estilo de la palabra y a todo esto normalizarlo para que nuestro querido flex lo entienda.

PD: El normalizado de flex a toda furia, consiste en convertir básicamente , cualquier tag en un span y por ejemplo, si era un tag b, en vez de ello, que sea un span con "fontWeigth: bold".

Cualquier pizca de conocimiento que puedan aportar para darme una mano, sera bienvenida, saludos y gracias por leer.  
#6
Hola, estoy haciendo un programita que parsea unos templates en base a un .csv y genera unos archivos de texto. Por ejemplo:
Si mi .csv es:
"hola#mundo#alegría"
y mi template es:
"[$1] [$2] hoy estoy lleno de [$3]"
el resultado seria:
"hola mundo hoy estoy lleno de alegría"
Mi problema es como encarar el procesamiento de los tokens. Bien yo podría encarar dos soluciones:

1) Hacerlo con un bucle while ((c=fgetc(archivo))!=EOF) y dentro preguntar si me tope con un '[', luego con un '$', luego con un numero y luego con un ']'. Esto claramente es una chanchada.

2) Otra solución seria leer el contenido del archivo de a trozos almacenandolo en un char* y luego usar alguna de las funciones de la librería string.h para encontrar mi token y reemplazarlo. Esta opción es mas prolija, pero si se diera que elegí leer de a 100 caracteres y en el 99vo carácter esta el carácter '[', y luego al principio del próximo string esta "$3] y ese día blablabla....". No me parsearia correctamente el token, ¡se lo saltearía!.

¿Se les ocurre una solución mejor?

Saludos y gracias por detenerse a leer.
#7
Hola, me ha ocurrido algo muy particular, miren el siguiente programita:

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

int main(int argc, char** argv)
{
char * string = (char*) malloc (sizeof(char)*11);
string[0]='q';
string[1]='w';
string[2]='e';
string[3]='a';
string[4]='s';
string[5]='d';
string[6]='z';
string[7]='x';
string[8]='c';
string[9]='r';
string[10]='f';
string[11]='v';
printf("%s\n",string);
printf("%d\n",strlen(string));
return 0;
}


¿Porque imprime que la longitud del string en de 15, si aloque memoria para 11 elementos?
¿Porque imprime garbage en el ultimo carácter?

Se que se solucionaria agregando un '\0' al final, ¿pero C no lo agrega automaticamente al alocar la memoria?.

Disculpen mi ingenuidad, se que debe ser algo muy basico y gracias por detenerse a leer.
#8
Hola, estoy desarrollando una parte de una pagina web y me surgió un problema: La pagina consta de un slider donde se pueden ir visualizando imágenes, el slider es un código js de jquery. El problema que tengo es que, tengo que hacer que cuando uno redimensiona la ventana, maximisandola y en diferentes resoluciones el slider permanezca igual. Mas precisamente, imaginense que tienen un div de un acho x en pixels, este div contiene otros divs que son las imágenes que muestra el slider, yo me tengo que asegurar de que pase lo que pase, redimensione la pagina de cualquier manera, solo se vea una imagen y que no se vean las otras o se superpongan otras. El tema es que esta redimension se aplica tanto de forma horizontal como vertical, es decir, yo podría simplemente con js decirle al navegador que no permita hacer scrolling vertical, ¿pero que pasa si yo redimensiono la ventana y la imagen me queda cortada al medio y no puedo redimensionar?.
Ya se que parece que dijera esto muy al aire, pero para darse una mejor idea, imaginense que lo único que hace el código js, es que cuando le doy click a uno de los botones laterales, avanzar x cantidad de pixels.
Imaginense que tengo 4 imágenes de 1200 pixeles de ancho, estas imágenes son, divs de un ancho de 1200 pixeles uno al lado del otro y lo único que hace el código js es avanzar 1200 pixeles a la derecha o a la izquierda cada vez que le doy click a uno de los botones laterales. Puede ocurrir que yo agrande la ventana mas de la cuenta y vea los divs (con las imágenes) adyacentes, este es el problema que quiero solucionar, no quiero que esto ocurra.

¿Alguien se topo alguna vez con un problema asi?, ¿Que hizo?, ¿Se les ocurre algun metodo para solucionar este problema?

PD: No pretendo que me den una respuesta directa, simplemente una pista o una idea si se les ocurre algo, sino no se preocupen, gracias por detenerse a leer.

Saludos!.
#9
Hola, hace poco consegui mi primer empleo formal como informático. Sin embargo en el grupo en el cual estoy trabajando algunos de mis compañeros ya tienen experiencia y ya han trabajado. Algunas veces usan términos como "code monkey",  "hardcodear" o "taser boolean", algunos de estos ya los conocía y otros son bastante auto-descriptivos. Sin embargo, ¿conocen alguna web que posea un buen diccionario de jerga informática, o jerga de ingeniería de software?. Me refiero a una web con términos pocos usuales, no de esas webs normales que te dicen que es prototipado. ¿O esto es algo que simplemente se va adquiriendo con experiencia?

Saludos y muchas gracias por detenerse a leer
#10
Hola, estoy siendo colaborador en una cátedra de C y tenemos que prepararles un trabajo final a los alumnos, el trabajo final tiene que resumir todo lo visto en la cátedra. La cátedra hace una introducción muy básica de todo lo que es C, arreglos, punteros a funciones, alocacion dinámica de memoria, estructuras, tipos de datos, nos basamos en el libro de Kernighan y Ritchie. Entre todos los colaboradores y ayudantes tenemos que ir pensando un trabajo practico final, por ahora el único que se me ha ocurrido es un programa que comprima archivos usando un algoritmo sin perdida, como LZW. Sin embargo me gustaría hacer algo en donde pueda meter punteros a funciones, o algo un poquito mas interesante, cosa de romper el molde. ¿A ustedes se los ocurre algo?

PD: En los años pasados, el trabajo final era un trabajo de leer y escribir .bmp aplicandoles efectos como blur o desenfoque. Pero como les volaba demasiado el sombrero a los alumnos, lo quitaron.

Muchas gracias por detenerse a leer y saludos!
#11
Hola, tengo un problema muy sencillo y que aún así me sigue quemando el coco.
Tengo una función que me devuelve un float, un float que es el resultado de 10/3, osea 3,333333...
Quiero recortarle algunos decimales cosa de que me quede como 3,333 o 3,3333.
Lo que hago es sencillo, tomo el float en cuestión, lo multiplico por 10⁴, si quiero tener 4 decimales luego de la coma y lo convierto a entero cosa de que me quede: 33333. Luego lo divido a ese entero, casteado a float por 10⁴, para volver a mover los decimales, cosa de que me quede 3,3333. Sin embargo lo que me ocurre es que cuando lo imprimo formateado como %.100f (cosa de ver todos los decimales posibles), me queda 3,333300000000003454345677. Esto me esta volviendo loco, porque solo me sucede con numeros periódicos y es un razonamiento muy sencillo.

El codigo seria algo como
int decimales = 3;
float miNumero = funcion_que_devuelve_float(10,3);
int miNumero2 = (int)(miNumero * pow(10,decimales));
float miNumero = (float)(miNumero2 / pow(10,decimales));

También intente multiplicar en ambos casos, en uno por la potencia negativa y en otro por la positiva, con el mismo resultado.

Muchas gracias por detenerse a leer y saludos.
#12
Hola, quería hacer una pequeña consulta, voy a iniciarme en un proyecto y necesito una computadora para estar trabajando lejos de mi casa, como no me dan ganas de llevarme la CPU al hombro todos los días al trabajo, estoy pensando en comprarme una netbook o una notebook. En preferencia me gustaría comprarme algo económico, por eso pensé en una netbook, pero no se si una netbook pueda soportar correr IDEs como Eclipse o Netbeans. ¿Ustedes conocen alguna notebook que sea lo suficientemente potente como para tirar una IDE o acaso me conviene optar por comprarme una notebook?.

Muchas gracias por detenerse a leer y saludos! :D
#13
Desarrollo Web / ¿Manual o textos de JSP?
26 Marzo 2012, 16:10 PM
Hola, estaba buscando algún manual o alguna fuente para formarme con Java Server Pages, sin embargo en internet solo encuentro tutoriales con muy poco contenido. ¿Alguno conoce un manual de JSP?

Muchas gracias por detenerse a leer, saludos.
#14
Hola tengo dos dudas muy puntuales. El otro día haciendo algunos ejercicios de memoria virtual, me surgió una duda, en un esquema de memoria virtual con paginación, ¿Como detecta el sistema operativo si estoy referenciando a una dirección que esta en la fragmentación interna del espacio de direcciones lógico?. Es decir, se puede detectar por HW si estoy tratando de acceder a una pagina que no esta asignada mediante el bit de validez, sin embargo por un error del programa del proceso una instrucción podría hacer un salto a la fragmentación interna, ¿Como se detecta en ese caso?

Mi otra pregunta es acerca del buffer de cache en System V.
¿Se mantienen las tablas de paginas o paginas individuales en buffer de cache?, ¿Que ocurre con la TLB en ese caso?. Porque me puse a pensarlo y sería como que ambas compiten por el mismo objetivo sin saberlo, pero después lo reconsidere y pensé: La TLB es una cache, se implementa con registros asociativos de alta velocidad, el método de búsqueda ante un page fault, podría ser; Me fijo en la TLB si esta la pagina deseada (La TLB es varios ordenes de tiempo mas rápida que el buffer de cache ya que esta implementada con registros asociativos, mientras que el buffer de cache esta en memoria), si la pagina deseada no esta en la TLB, buscamos en el buffer de cache por un bloque que la contenga, si no esta en el buffer de cache, se busca un buffer disponible en la free list (¿Que ocurre si no hay un buffer disponible?, obviamente tendremos que esperar, ¡Pero se trata de un page fault!, debe atenderse lo mas rápido posible), si se encuentra un bloque disponible se graba en él, si el bloque disponible estaba con delayed write, se descarga a disco antes de escribir el nuevo contenido, una vez escrito se actualiza la TLB, se reinicia la instrucción desde el punto anterior como si el PF nunca hubiera ocurrido, etcétera.

Además algo que leí en el Galvin (Cariñosamente llamado "El de los dinosaurios" por mi xD) que me voló el sombrero, es que en Unix, puede estar el superblock en el buffer de cache. ¿Para que voy a querer tener el superblock en el buffer de cache?, si el superblock solo contiene la información del filesystem, como numero de cilindros, etcétera.


Muchas gracias por detenerse a leer y saludos! :D
#15
Hola, tengo una duda acerca de estructuras de datos genéricas, como por ejemplo, una lista. Hacer una lista genérica que contenga diferentes tipos de datos básicos, como int, char, char* o float es sencillo; definimos un puntero a void y luego por ejemplo si queremos imprimir la lista entera bajo diferentes criterios usamos punteros a funciones que casteen el puntero al tipo adecuado de puntero. Sin embargo, si tenemos una lista genérica que adicionalmente, además de los tipos mencionados anteriormente, contiene una estructura, como por ejemplo t_Persona, que contiene los campos nombre y apellido, ambos char*, ¿Como deberíamos proceder para hacer un puntero a función que lo imprima de manera adecuada?.

Osea mi problema es que yo quiero tener una lista genérica de esa forma, tener una función imprimir que reciba la lista y un puntero a función, donde la función a la que apunta es el criterio a usar. Si yo en mi lista tengo 2, 4, a, c, 'Hola mundo!', 3.45, t_Persona(nombre: 'Jorge' apellido:'Ruiz') (Disculpen la notación de este ultimo), entonces si yo llamara a la función imprimir y le pasara la lista y la función que castea a caracteres me imprimiría: (El ASCII de 2), (El ASCII de 4), a, c, H, (Basura), (Mas basura).

Mi punto es: Si quiero imprimir usando el criterio para imprimir una persona, voy a tener que castear los punteros a void a punteros a t_Persona, con un dato que realmente sea de t_Persona no va a haber problema, sin embargo cuando este iterando y me cruce un puntero que en realidad es un puntero a float, y lo castee a tipo persona, y trate de acceder a sus miembros, esto me va a tirar un Segmentation Fault con toda la razón.

Yo pensé, entonces simplemente tendría que exigir que el resto de los elementos, como mínimo, ocupen la misma cantidad de bytes que t_Persona, de esa manera cuando los castee, me devolverán basura, pero no me tirara Segmentation Fault.

Mi duda es simple: ¿Existe una manera mas limpia de lograr mi objetivo?

Les dejo un ejemplo de mi codigo:

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

typedef struct t_Persona {
char* nombre;
char* apellido;
} t_Persona;

//Decimos que un puntero a void es sinonimo de una direccion.
typedef void* t_Direccion;

typedef struct t_Lista {
t_Direccion* dato;
//El size NO lo necesitamos simplemente para saber cuantos elementos tenemos, SI lo necesitamos para seguirle la pista
//A cuanto espacio tenemos que alocar.
int size;
} t_Lista;

//El tipo iterador contiene la lista y la posicion actual dentro de ella
typedef struct t_Iterador {
t_Lista* lista;
//Nodo actual para recorrer
int actual;
} t_Iterador;

t_Iterador tIterador_Crear () {
t_Iterador nue;
nue.lista= (t_Lista*) malloc (sizeof(t_Lista));
(nue.lista)->size=0;
(nue.lista)->dato=NULL;
nue.actual=0;
return nue;
}

void tIterador_Iniciar(t_Iterador* iter) {
iter->actual=0;
}

/* Notese la diferencia entre el crear y el iniciar; El crear nos crea una nueva instancia, y el iniciar
* prepara el iterador para iterar, recibiendo la lista sobre la cual va a trabajar y poniendo su posicion
* actual a cero. */

/*Un simple agregar al final*/

void tIterador_Agregar (t_Iterador* iter, t_Direccion i) {
if (iter->lista->size == 0) {
iter->lista->dato = (t_Direccion*) malloc (sizeof(t_Direccion)*(++iter->lista->size));
} else {
iter->lista->dato = (t_Direccion*) realloc (iter->lista->dato, sizeof(t_Direccion)*(++iter->lista->size));
}
iter->lista->dato[iter->actual++] = i;
}

/*Funciones que imprimen en diferentes formatos, utilizadas para el imprimir*/

void imprimirEnteros (t_Direccion x) {
printf("%i, ",*((int*)(x)));
}

void imprimirCaracteres (t_Direccion x) {
printf("%c, ",*((char*)(x)));
}

void imprimirStrings (t_Direccion x) {
printf("%s, ",((char*)(x)));
}

/* No escatimes en el uso del parentesis en estos casos!!! */
/* void imprimirPersonas (t_Direccion x) {
printf("%s %s, ",((t_Persona*)(x))->nombre, ((t_Persona*)(x))->apellido);
} */
/* En estos casos hay que asegurarse de que todos los elementos tienen el mismo tamaño*/

/*El imprimir generico*/
/*Nomenclatura de una funcion pasada como parametro a otra (puntero a funcion)
*TIPORETORNO (*NOMBRE)(PARAMETROS) Notese que para un puntero a funcion el asterisco se usa a la izquierda*/
void tIterador_Imprimir (t_Iterador* iter, void (*criterio)(t_Direccion)) {
criterio(iter->lista->dato[iter->actual]); /*Modo de uso de un puntero a funcion*/
}

int tIterador_Fin (t_Iterador* iter) {
return (iter->actual < iter->lista->size)?(1):(0);
}

void tIterador_Avanzar (t_Iterador* iter) {
iter->actual++;
}

int main(int argc, char** argv)
{

int a=65, b=66, c='a', d=68, e='c';
char* f = "Holaaa";
t_Iterador iter = tIterador_Crear();

tIterador_Iniciar(&iter);

/*Vamos a agregar los numeros del 65 al 70*/
tIterador_Agregar(&iter, &a);
tIterador_Agregar(&iter, &b);
tIterador_Agregar(&iter, &c);
tIterador_Agregar(&iter, &d);
tIterador_Agregar(&iter, &e);
tIterador_Agregar(&iter, f); //Look!

/*Imprimimos como enteros*/
tIterador_Iniciar(&iter);
/*Al imprimir le pasamos la funcion que va a usar como criterio de conversion*/
while ((tIterador_Fin(&iter))) {
tIterador_Imprimir(&iter, imprimirEnteros);
tIterador_Avanzar(&iter);
}
printf("\n");
/*Imprimimos como Caracteres*/
tIterador_Iniciar(&iter);
/*Al imprimir le pasamos la funcion que va a usar como criterio de conversion*/
while ((tIterador_Fin(&iter))) {
tIterador_Imprimir(&iter, imprimirCaracteres);
tIterador_Avanzar(&iter);
}
printf("\n");
/*Imprimimos como Strings*/
tIterador_Iniciar(&iter);
/*Al imprimir le pasamos la funcion que va a usar como criterio de conversion*/
while ((tIterador_Fin(&iter))) {
tIterador_Imprimir(&iter, imprimirStrings);
tIterador_Avanzar(&iter);
}

return 0;
}


Si usaramos el imprimirPersonas obviamente nos tiraría un segmentation fault.

Muchas gracias por detenerse a leer, y saludos!
#16
Hola, quisiera hacerles una consulta sencilla, tengo que implementar un Chat para una pagina web, y antes quería corroborar un par de cosas:

Básicamente para hacer el chat hay que implementarlo con javascript y toda la parte de envío y recepción de mensajes se haría mediante AJAX. Ahora me suena un poco sucio implementar un chat que haga sucesivas consultas sobre una base de datos, mejor dicho, me suena ineficiente. ¿Usualmente estos chats se implementan usando Sockets o es viable una alternativa usando consultas y Mysql?. En caso de que sea viable utilizar consultas y Mysql, ¿Como hago para saber que el otro usuario/s ha mandado un mensaje?, ¿Uso un crom que chequee a cada rato la base de datos (eso también me suena un poco sucio)?.

Si conocen el nombre de algún open source interesante, les agradecería que me lo comenten. Cualquier tip es bienvenido.

Muchas gracias por detenerse a leer y saludos!
#17
Hola, estoy haciendo un recopilatorio de dudas respecto a C. Sin embargo, cuando me pongo a pensar en que contenidos me dieron problemas cuando comencé con C, mucho no se me viene a la mente. Si, obviamente, todos hemos tenido nuestras dudas acerca de punteros, pero busco encontrar preguntas mas "finas", mas "particulares".
Estuve leyendo hasta la pagina 21 de este foro para buscar entre las dudas de los usuarios. Pero como siempre, y como a la mayoría nos ha sucedido, el principal objeto de duda suele ser, punteros a funciones, punteros, matrices, estructuras genéricas con punteros a void.

Las preguntas mas finas que se me vienen a la mente, por ejemplo, son:

¿Qué utilidad tiene un void*?, ¿Para que voy a querer castear como un puntero, (como por ejemplo, int*) si igualmente luego puede accederlo y tratarlo como se me antoje?, ¿Cual es el tamaño de un void?¿Por que viene dado?, ¿Por que usar Macros y no funciones o viceversa?

Pero como siempre, en todo el ámbito informático, uno nunca va a ver lo que otro puede, así que tal vez, ustedes en sus inicios con C tuvieron también, problemas particulares de la misma naturaleza.

Ya que estoy voy a poner dos pequeñas dudas que me acaban de surgir en este momento:
Java implementa los Comparadores utilizando punteros a funciones, ¿no?. Nunca investigue acerca del tema, pero recuerdo que cuando estaba estudiando punteros a funciones, fue así como dije:-"Ah esa es la utilidad de punteros a funciones".

¿Como implementarían ustedes un pequeño garbage collector en C?, la manera es sencilla, pero ¿como determinarían si una variable no ha sido usada durante mucho tiempo?, ¿Con una syscall y guardarían las posiciones de memoria de inicio de cada variable en un vector junto con la información relativa a cuando se ha usado?

Saludos y muchas gracias por detenerse a leer.
#18
Hola, tengo que hacer una consulta realmente sencilla, pero no me devuelve ningún resultado, la consulta es la siguiente:

select CARRERAS.IDCAR, CARRERAS.NOMBRE FROM
CARRERAS
INNER JOIN FACCAR ON (CARRERAS.IDCAR = FACCAR.IDCAR)
INNER JOIN FACULTADES ON (FACULTADES.IDFAC = FACCAR.IDFAC)
INNER JOIN UNIFAC ON (UNIFAC.IDFAC = FACULTADES.IDFAC)
INNER JOIN UNIVERSIDADES ON (UNIVERSIDADES.IDUNI = UNIFAC.IDUNI)
WHERE ((UNIVERSIDADES.NOMBRE LIKE '%Universidad Nacional de La Plata%')
AND (FACULTADES.NOMBRE LIKE '%Facultad de Informatica%')
AND (CARRERAS.NOMBRE LIKE '%Sistemas%'))

No me devuelve nada, me deberia devolver IDCAR = 1 y NOMBRE = 'Licenciatura en Sistemas'

Pero fijense que si elimino todo lo del Where me devuelve:



(La consulta devolvió todas las carreras de todas las facultades de todas las universidades, solo que las que figuran son las únicas que inserte)

Se me hace muy extraño porque usando LIKE debería devolverme lo que espero. No se en que me estoy equivocando. Si alguien lo nota, por favor aviseme.

Muchas gracias por detenerse a leer y Saludos!
#19
Hola, lo que me sucede es que yo tengo una tabla, donde (este es un mero ejemplo) tengo un id, que es clave principal y es un entero que se auto-incrementa, y tengo el nombre que es un varchar.
Ahora, lo que me sucede es que yo quiero insertar un nuevo nombre, y justo después usar el id, del nuevo nombre insertado, pero pienso que no seria correcto que la consulta para hacerlo fuera; "select id from test where (test.nombre = 'unNombre')". Pensé que tal vez lo correcto seria contar la cantidad de columnas, pero tampoco estoy convencido. ¿Hay alguna forma autentica de lograr recuperar el id luego de insertarlo?

Les dejo un ejemplo:

Código (html4strict) [Seleccionar]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>sin título</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 0.18" />
</head>
<body>
<?php
//Pruebas
$host_db="localhost";
$usuario_db="root";
$password_db="root";
$nombre_db="kimboo";
$link mysql_connect($host_db,$usuario_db,$password_db);
$query ="insert into test (nombre) value ('Gerardo')";
$result mysql_db_query($nombre_db,$query,$link);
if (mysql_num_rows($result)) {
echo "Error";
} else {
//Chan
$row mysql_fetch_array($result);
echo '<p>Se inserto el usuario con ID igual a '.$row['id'].'</p>';
}
?>

</body>
</html>


Muchas gracias por detenerse a leer, Saludos!
#20
Hola, estoy implementando un sistema de baneo en una pagina web. Originalmente constaba de lo siguiente, se me ocurrió que cuando un usuario se registraba podía guardarme en la base de datos junto con su nombre de usuario y su pass, su dirección MAC. Tras haber investigado en varios foros, me di cuenta de que eso era imposible. Por ahora estoy optando por una alternativa no tan atractiva; Cada vez que un usuario se logea me salvo su ip, en la base de datos, si tiempo después lo banean, usare esas ips para identificarlo, pero ahora que lo pienso, es un suicidio XD, si tengo 2500 usuarios, de cada uno por lo menos voy a tener entre 10 y 25 ips diferentes, si baneo a un usuario, después a cada usuario que se quiera registrar en el sistema, voy a tener que comprobar su ip contra las ip de todos los usuarios baneados.
Bueno igualmente no cambia el punto de mi pregunta; ¿Existe algún otro valor único en la maquina como la MAC adress que se pueda consultar mediante php o javascript?


Desde ya muchísimas gracias por detenerse a leer y saludos!
#21
Hola,  estoy implementando una pequeña web y necesito implementar alguna clase de sistema de baneo, es decir, si un usuario comete alguna infracción que este no se pueda loguear mas (eso es sencillo), lo que pasa es que lo ideal sería que ese usuario tampoco se pueda registrar bajo otro usuario, otra vez. ¿Existe alguna manera eficaz de lograr esto?. Pensé varias maneras sin embargo todas tienen falencias; Por ejemplo, bannearlo y esperar que el usuario tenga la buena voluntad de no volverse a registrar (sencillo de implementar, pero obviamente ridículo), bannearlo y usar las cookies para saber si el usuario que se esta tratando de registrar esta baneado (Obviamente no sirve si el usuario borra las cookies), por ultimo, como ya no vivimos en la era del dial-up, no hay forma de guardarse inequívocamente las ip, sin embargo creo que pueden existir métodos para enlazar una dirección dinámica e identificarla (Esto se me haría particularmente difícil puesto que no conozco mucho sobre el tema, y solo es una suposición). ¿Existe alguna forma en Php (O javascript si es que me estoy equivocando de rubro xD), de obtener algún numero que identifique inequívocamente a una maquina, o alguna forma de generarlo? (Claro, podríamos identificar la maquina, pero si el usuario se logea con otra maquina, este pasa desapercibido, bueno supongo que sería un precio a pagar)

Muchas gracias por detenerse a leer, cualquier dato que me puedan pasar es bien recibido.

Saludos!!!
#22
Hola, estoy tratando de implementar un javascript que sencillamente lo que hace es al presionar un botón "Quiero registrarme" abra una serie de inputs para introducir datos personales como nombre, apellido, edad, etcétera. El problema es que yo quiero que el usuario presione una sola vez el botón "Quiero registrarme" y luego este desaparezca (No que se oculte, sino que se borre). Sin mas preámbulos les muestro mi código:

Código (javascript) [Seleccionar]
function mostrar_registro() {
if (registrarseOn == false) {
var nombre = document.createElement('input');
nombre.setAttribute('name','nombre');
nombre.setAttribute('value','Ingrese su nombre aqui.');
var email = document.createElement('input');
email.setAttribute('name','email');
email.setAttribute('value','Ingrese su email de usuario aqui.');
var apellido = document.createElement('input');
apellido.setAttribute('name','apellido');
apellido.setAttribute('value','Ingrese su apellido aqui.');
var nick = document.createElement('input');
nick.setAttribute('name','nick');
nick.setAttribute('value','Ingrese su nick aqui.');
var universidad = document.createElement('input');
universidad.setAttribute('name','universidad');
universidad.setAttribute('value','Ingrese su universidad aqui.');
var edad = document.createElement('input');
edad.setAttribute('name','edad');
edad.setAttribute('value','Ingrese su edad aqui.');

var p1 = document.createElement('p');
var p2 = document.createElement('p');
var p3 = document.createElement('p');
var p4 = document.createElement('p');
var p5 = document.createElement('p');
var p6 = document.createElement('p');

p1.appendChild(document.createTextNode("Ingrese su email"));
p1.appendChild(email);
p2.appendChild(document.createTextNode("Ingrese su nick"));
p2.appendChild(nick);
p3.appendChild(document.createTextNode("Ingrese su nombre"));
p3.appendChild(nombre);
p4.appendChild(document.createTextNode("Ingrese su apellido"));
p4.appendChild(apellido);
p5.appendChild(document.createTextNode("Ingrese su edad"));
p5.appendChild(edad);
p6.appendChild(document.createTextNode("Ingrese su universidad"));
p6.appendChild(universidad);

document.registrar.appendChild(p1);
document.registrar.appendChild(p2);
document.registrar.appendChild(p3);
document.registrar.appendChild(p4);
document.registrar.appendChild(p5);
document.registrar.appendChild(p6);
registrarseOn=true;
                                        //Esta es la linea que me da problemas!
document.registrar.removeChild(document.registrar.resitrarse);
}
}
</script>


La parte del HTML que tendría que borrar seria:

Código (html4strict) [Seleccionar]
<div id="form_registro">
<form name="registrar" method="POST" action="registrar.php">
<p>
<input type="button" value="Me quiero registrar" name="registrarse" onclick= "mostrar_registro()">
</p>
</form>
</div>


He intentado de varias formas como por ejemplo, primero consiguiendo el nodo mediante getElementById y despues pasandoselo como parametro al removeChild, sin embargo tampoco resulto, seguro que debe ser algo muy tonto que no estoy viendo. Si alguien tiene alguna info respecto al tema o puede ver el error que estoy cometiendo, se los agradecería.

Muchas gracias por detenerse a leer, saludos!
#23
Hola, he estado tratando de encontrar información sobre una duda que tengo acerca del tema del Working Set, sin resultados. Por ejemplo en algunos lugares dicen que el Working Set, es la cantidad necesaria de memoria para resolver un problema. No muy preciso. Para ilustrar mi duda expondré el siguiente ejemplo:

t 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
p 2 2 4 3 4 5 6 7 9 1   2   5  1   9   3   4   5  3   2  1   9

Suponiéndose que se tiene un landa igual a 4, y una cantidad de marcos o frames igual a 3, si se tiene un solo proceso que demanda las paginas ilustradas arriba, ¿El tamaño del Working set en el instante 13, es de 3? {1,2,5,1} -> {1,2,5}

Es simple, pero estoy confuso porque las definiciones que he visto de working set son un poco extrañas, sobre todo esa de "es la cantidad necesaria de memoria para resolver un problema", a mi parecer, si fuera asi, seria la suma de todas las referencias a paginas (sin repeticiones), pero eso me resulta un poco extraño.

Muchas gracias por detenerse a leer, saludos!
#24
Hola, estoy tratando de hacer un ejemplo que muestre los segmentation fault, cuando uno aloca memoria para un arreglo y se va mas allá de este. Por ejemplo:

int main(int argc, char** argv)
{
int *vec1 = (int*) malloc (sizeof(int)*3);
int *vec2 = (int*) calloc (3,sizeof(int));
int *vec3 =  NULL;
vec3 = (int*) realloc (vec3, sizeof(int)*3);
int x;
for (x=0; x<5; x++)
{
vec1[x]=x;
}
for (x=0; x<5; x++)
{
*(vec2+x)=x;
}
for (x=0; x<5; x++)
{
*(vec3+x)=x;
}
return 0;
}


Pese a que aloque memoria para solo tres elementos, en cada vector, no me tira segmentetion fault, cuando pisa el 4to o 5to elemento del arreglo, ¿Que significa?, ¿Estoy haciendo algo mal sin darme cuenta?, ¿Aloque memoria de mas sin darme cuenta?
#25
Hola, estoy implementando un grafo en C, donde cada uno de los nodos es un proceso del sistema y sus adyacentes son sus procesos hijos. Para esto estaba pensando usar la función System, pero System solo devuelve un Integer que es el valor de respuesta de éxito o fracaso de la ejecución del comando. ¿Se puede de alguna forma o con otra función copiar los resultados del interprete de comandos en un String?

Muchas gracias por detenerse a leer, saludos!
#26
Hola, tengo una duda acerca de herencia en SmallTalk.
Supongamos lo siguiente: Tenemos una clase A, con atributos x e y, disponemos de los métodos #x:unValor, #y:otroValor, #x e #y. Es decir de los métodos para establecer y obtener los valores de los atributos. Ahora también hemos sobreescrito el new, de manera que no se pueda hacer referencia a él, algo como:
#new
^(self error: 'Debe usarse el constructor apropiado en esta clase').

Hemos creado el constructor de esta clase que sería algo como:
x:unValor y:otroValor
^(super new x:unValor; y:otroValor).


Ahora supongamos que creamos una clase hija B, con el atributo adicional z, y tambien creamos los métodos para obtener y establecer el valor del atributo z. Vamos a crear el constructor. Sobreescribimos el método #new, de la misma manera de antes y creamos el constructor. Quedaria de la siguiente manera:
x:unValor y:otroValor z:elUltimoValor
^((super x:unValor y:otroValor); z:elUltimoValor).


Mi duda es la siguiente: ¿Como esto puede funcionar?, es decir estamos utilizando un constructor de la clase padre, por lo tanto super x:unValor y:otroValor nos devuelve una instancia de la clase A, y la clase A no tiene porque entender el mensaje z, si bien lo implementa sus hijos, no lo implementa el padre así que no tendría porque conocer ese mensaje.

¿Tienen alguna idea de que podría ser lo que no estoy viendo?, ¿Obvie algo del POO?, ¿Hay algo que hice que no debí haber hecho?, ¿Sobreescribir el #new?

Muchas gracias por detenerse a leer.
#27
Hola, tengo un compañero en la facultad que fue a dar un parcial de Algoritmos y Estructuras de Datos, mi compañero esta cursando una cursada con promoción por lo que los problemas que les toman son mucho mas difíciles. El otro día me estaba comentando el problema que les tomaron y me pareció bastante curioso y quería ver si sus opiniones concuerdan con la mía en cuanto a la resolución del problema.
El problema era el siguiente: "Alfredo y Omar se encuentran en la ciudad de la esperanza, hace años que no se ven y quieren reencontrarse, Alfredo tiene 25 años y Omar, 40. La ciudad de la esperanza es una ciudad muy particular, ya que tiene calles que solo pueden ser recorridas por mayores de 30 años y otras calles que solo pueden ser recorridas por menores de 30 años (o que tengan 30 años). Las calles también tienen la característica de que algunas se recorren en un sentido y otras, en otro. Implemente un algoritmo que les permita a Alfredo y Omar, encontrarse en un punto de la ciudad que sea el mínimo camino hecho para encontrarse."
Osea tenemos dos personas paradas en dos puntos de un grafo y hay que encontrar un camino para que ambos se encuentren en el grafo que sea el mínimo que tengan que hacer.
Mi idea para resolverlo, explicada muy por arriba, seria, básicamente, hacer un dijkstra de ambos puntos del punto A (Alfredo) al punto O (Omar), modificado para que se pueda adaptar a las particularidades de la ciudad esperanza, luego hacer un dijkstra del punto O al punto A, y ver si coinciden, si no coinciden tendria que buscar el segundo camino mínimo del punto O al punto A que coincida, y así sucesivamente hasta que encuentre uno que coincida. Pero creo que esta idea es un poco, excesivamente complicada, de seguro debe haber un metodo mas sencillo, estos dos tienen que encontrarse en algún punto de la ciudad que sea el punto mas cercano para ambos, ¿pero como determinamos este punto?

Muchas gracias por detenerse a leer.
#28
Hola, mi pregunta es bastante sencilla; el otro día me encontraba preparando un CV para presentar para una pasantía, y quería saber, a su criterio, ¿cuales consideran que son los conocimientos básicos de cada lenguaje?. Por ejemplo yo puse en uno Php básico (Conexión a bases de datos, desarrollo de medidas de seguridad, ... ) y me quede en blanco, lo mismo me sucedió con Java, al ponerme a pensar, si se lo básico de cada lenguaje de programación, se conectar a una base de datos en php, realizar logins de usuarios, realizar webs tipo foros (www.dijkstraeasteregg.com.ar), utilizar javascript, y en el caso de java, también se usar bases de datos de forma local con firebird, hacer programas de gestión sencillos, como puede ser un programa de gestión de una inmobiliaria, pero desde mi humilde punto de vista uno nunca termina de aprender del "todo" un lenguaje de programación, por eso le pregunto a ustedes, ¿Cuales creen que son los conocimientos minimos para decir que uno sabe "Php basico" o "Java basico"?. Añado que por ejemplo yo considero avanzado el uso de frameworks en php, por ejemplo (corrijan me si me equivoco).
Saludos y muchas gracias por detenerse a leer.
#29
Hola me he topado con algunos ejercicios particulares de casos de uso y diagrama de flujo de datos (DFD) y tengo mis propias interpretaciones sobre los enunciados, generalmente son sencillos, pero algunos me generan dudas y pienso que otra persona pensaría distinto, por lo que quiero comprobar mis suposiciones con quien quiera y ver si nuestros puntos de vista difieren. Por ejemplo:

Casos de uso:

Se desea modelar un sistema que controle una máquina para reciclar latas, botellas y cajas de botellas.
El sistema registra cuántos elementos un usuario coloca en la máquina e imprime un recibo con el valor de dichos elementos junto con el total que se le debe pagar al usuario.
El sistema también es utilizado por un operador que desea conocer el número de elementos de cada tipo que se han introducido durante el día. El operador también debe poder actualizar los valores de los elementos.

Este es sencillo, primero tendríamos a dos actores; el usuario y el operador. Los casos de uso son bastante sencillos, esta el caso en el que un usuario introduce elementos a reciclar (que se puede explotar), el caso en el que se imprime el ticket, y por el lado del operador, tenemos el caso en el que el operador consulta la cantidad de elementos de cada tipo registrados en el día y el caso en el que los actualiza.

Este enunciado aunque muy sencillo me hace pensar; ¿Sería correcto explotar el caso de uso "Reciclar basura" del actor "Usuario" de manera que tengamos el caso de uso "Reciclar basura" y además 3 casos de uso que lo extiendan (<extend>) "Reciclar latas", "Reciclar botellas" y "Reciclar cajas"?. Desde el punto de vista de la definición de las asociaciones y cuando es correcto usarlas y cuando no, esta idea me parece correcta. Sin embargo cuando pienso en los pasos elementales que voy a tener que describir en el escenario, pienso que van a ser muy pocos y los mismos, solo diferente uno de otro, en que uno va a decir "Paso 1. Se valida que la botella ingresada este sana" y en otro "Paso 1. Se valida que la lata ingresada este sana", por decirlo así. ¿Ustedes que piensan?, ¿Sería mejor dejar un solo caso de uso llamado "Reciclar basura" o seria mejor explotarlo, extendiéndolo con otros 3 casos?

Osea, ¿cual de los dos les parece mejor?
A.
 
B.
 

En otro ejemplo

Se desea desarrollar un sistema para utilizar en un consultorio médico. El sistema debe realizar el manejo de pacientes, turnos e historias clínicas.
Los pacientes pueden sacar turno llamando por teléfono o acercándose al consultorio. Para ello el paciente comunica a la secretaria el médico y día que quiere atenderse. La secretaria busca en el sistema los horarios libres para el día y médico indicado y se lo comunica al paciente para que este último decida en qué horario desea asistir a la visita.
En caso de que no exista horario libre el sistema debe notificarlo. Además es importante recalcar que si el paciente no existe en el sistema al momento de solicitar el turno la secretaria debe darlo de alta ingresando sus datos personales (nombre, fecha de nacimiento, domicilio) y obra social.
Cuando el paciente asiste al turno el médico revisa al paciente e ingresa al sistema los síntomas, diagnóstico y tratamiento.
Un paciente puede cancelar un turno de la misma forma que lo solicita (por teléfono o en persona).
Además el médico tiene la posibilidad de obtener un listado de todas las consultas que tuvo un determinado paciente.

En este ejercicio en particular casi todos los casos de uso se me hacen transparentes, sin embargo, creo que hay un actor "trampa", el paciente. Si bien el paciente aparece en el enunciado, el nunca interactúa directamente con el sistema, es la secretaria la que lo hace, por lo que me parece que no debería ir en el diagrama. Otra trampa que me parece que hay es el caso en el que dice "el paciente se puede acercar a solicitar un turno de dos maneras; prensentandose ante la secretaria o llamando por teléfono", yo creo que un alumno con poca experiencia en casos de uso, miraría esto y diría: "claro, como existe la posibilidad de que el paciente reserve un turno de dos maneras, esto significa que tenemos un caso de uso "Reservar turno" y dos casos de uso "Reservar turno por teléfono" y "Reservar turno presentandose" que extienden al primer caso de uso mencionado". A mi esto me parece incorrecto creo que hay un solo caso de uso y la manera de realizarlo seria la siguiente:


Y en un ultimo ejemplo:
Se desea modelar un sistema de pago de cuotas en un gimnasio.
Las cuotas se pagan mensualmente y sus montos varían según la disciplina (aparatos, bicicleta y gimnasia aeróbica) y la cantidad de veces por semana que va a asistir (1 a 5).
Al ingresar un nuevo cliente al gimnasio debe abonar una matrícula que también depende de la disciplina y la cantidad de veces que desea asistir. Un cliente puede ser dado de baja del sistema.
Se sistema debe permitirle al empleado realizar las siguientes operaciones:
Consultar los montos de la matrícula y la cuota para una disciplina.
Registrar el ingreso de un nuevo cliente.
Consultar el "estado de cuenta" de un cliente.
Registrar el pago de cuotas de un cliente.
Eliminar los clientes morosos.
Mensualmente se envía automáticamente un correo a los socios del gimnasio con
novedades.


En este la única interrogante que me puede venir a la mente es; Este ultimo párrafo, yo lo representaría como un caso de uso "Enviar correos" que sea una asociación con el actor "Socio", puesto que una asociación bilateral (es decir, una linea sin flecha), implica que el primer paso elemental en el escenario del caso de uso, sera llevado a cabo por el sistema, y en efecto, el que da el primer paso es el sistema, ¿me equivoco?.

Yo lo haría de la siguiente manera:


Bueno si han llegado hasta aquí, gracias por detenerse a leer!
Cualquier critica es bienvenida, Saludos!
#30
Hola, hace un tiempo que estoy buscando una herramienta de modelado para realizar diversos diagramas (diagramas de flujos de datos, diagramas de transición de estados, etc.) y que permita verificar la correctitud de los mismos. Actualmente uso lápiz y papel, y luego lo paso, para que quede mas prolijo por Umbrello (actualmente también estoy buscando una herramienta de la misma naturaleza, pero mas potente xD). ¿Conocen de alguna herramienta así?, la ingeniería de software se me ha hecho la materia mas aburrida de las que he cursado, ya que en cada libro que consulto proponen diferentes representaciones para los distintos diagramas o diferentes agregados, solo coincidiendo en algunos axiomas básicos de la materia. Por eso ando buscando una herramienta que me permita verificar la consistencia de los ejercicios.

Muchas gracias por detenerse a leer.

Saludos!
#31
Hola, hace algunas semanas hice una web y la puedo ver lo mas bien en Ubuntu, es más, la he visto lo mas bien en algunas computadoras con Windows, pero sin embargo, ya son dos los compañeros mios que solo ven una pantalla en blanco en lugar de la web. He tratado todo para repararla, incluso lo mas bizzarro, cambiarles las extensiones a los php por html, pero nada da resultado.
Mi web es www.dijkstraeasteregg.com.ar y acá les dejo el codigo de mi index.php.

Código (php) [Seleccionar]

<?php //session_start(); ?>
<html>
<head>
<title>Dijkstra Easter Egg!</title>
</head>
<body>
<?php 
if(isset($_SESSION['usuario'])){
header("location:user.php");
}
?>

<?php
include ('./menu.php');
include ('./temashablados.php'); 
?>

</body>
</html>


menu.php

Código (php) [Seleccionar]

<!-- Este script contiene todo lo necesario para la barra del menu -->
<html>
<head>

<!-- CSS -->
<link rel="stylesheet" type="text/css" href="menuBar.css">
<link rel="stylesheet" type="text/css" href="panel.css"> 


<!--javascript del menu-->
<script language="javascript" src="menuBar.js"</script>


</head>
<body style="text-align: center; margin-left: auto; margin-right: auto;" background="security.jpg">
<br>
<p style="text-align: left; font-size:50px; line-height: 3pt;">[Dijkstra Easter Egg]</p>
<!-- Barra del menu. -->

<div class="menuBar" style="width: 100%;">
<a class="menuButton" href="" onclick="return buttonClick(event,'userMenu');" onmouseover="buttonMouseover(event, 'userMenu');">Usuario</a>
<a class="menuButton" href="" onclick="return buttonClick(event, 'questMenu');" onmouseover="buttonMouseover(event, 'questMenu');">Temas</a>
<a class="menuButton" href="" onclick="return buttonClick(event, 'helpMenu');" onmouseover="buttonMouseover(event, 'helpMenu');">Ayuda</a>
<a class="menuButton" href="" onclick="return buttonClick(event, 'aboutMenu');" onmouseover="buttonMouseover(event, 'aboutMenu');">Acerca</a>
<!-- Aca falta que vaya el item de identificacion del usuario-->
</div>

<!-- Menu de Usuario. -->
<div id="userMenu" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="index.php">Inicio</a>
<a class="menuItem" href="iniciarsecion.php">Ingresar</a>
<a class="menuItem" href="registrarse.php">Registrarme</a>
<a class="menuItem" href="recuperar.php">Recuperar contrase&#241;a</a>
</div>

<!-- Menu de Publicaciones. -->
<div id="questMenu" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="publicar.php">Publicar nuevo tema</a>
<a class="menuItem" href="buscar.php">Buscar tema</a>
</div>

<!-- Menu de Ayuda -->
<div id="helpMenu" class="menu">
<a class="menuItem" href="convivencia.php">Manual de Convivencia</a>
</div>

<!-- Menu de Acerca -->
<div id="aboutMenu" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="acerca.php">De DijkstraEasterEgg.com.ar</a>
</div>

</body>
</html>


temashablados.php
Código (php) [Seleccionar]

<?php
include(
'config.php');
$link mysql_connect ($host_db,$usuario_db,$password_db) or die ("<center>No se puede conectar con la base de datos\n</center>\n");
$query "SELECT P.PID, P.TEMA, U.NOMBRE , P.FECHA, P.TITULO FROM PUBLICACION P 
  INNER JOIN USUARIO U ON (U.UID = P.AUTOR)
   WHERE ( MONTH(P.FECHA)=MONTH(CURDATE()) AND YEAR(P.FECHA)=YEAR(CURDATE()) )"
;
$result=mysql_db_query ($nombre_db$query$link);
echo '<div align="left" style="background-color: #FCFCFC;">';
echo '<p style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000; "> Lista de temas hablados recientemente...</p>';
while ($fila_publi mysql_fetch_array ($result)) {
echo '<form action="mostrar.php" method="GET">';
echo '<input type="hidden" name="pid" value="'.$fila_publi['PID'].'"/>';
echo '<input type="hidden" name="titulo" value="'.$fila_publi['TITULO'].'"/>';
echo '<input type="submit"   style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000; background-color:white;" value="'.$fila_publi['TITULO'].' '.$fila_publi['TEMA'].' '.$fila_publi['NOMBRE'].' '.$fila_publi['FECHA'].'" />';
echo '</form>';
}
echo '</div>';
@mysql_free_result($result);
?>



Desde ya gracias por detenerse a leer y feliz año nuevo! :D:D:D
#32
Hola, he estado tratando de pasar el texto de una textarea que genera un WYSIWYG, el NicEdit en este caso, pero cada vez que después lo imprimo, lo imprime de manera normal, sin formato. Busque en algunos lugares y hay algunos que dicen que ya por defecto cuando haces referencia a la variable por post con el nombre del textarea ya tendrías que tener formateado el texto.

Este es mi código:

Código (html4strict) [Seleccionar]

<?php
session_start();
if (!isset($_SESSION['usuario'])) {
header("location:iniciarsecion.php");
}
include('./menuusuario.php');
include('./config.php');
?
<
html>
<head>
<title><?php echo $_GET['titulo'].' Dijkstra Easter Egg!'?>
</title>
</head>
<body>
<script src="http://js.nicedit.com/nicEdit.js" type="text/javascript"></script>
<script type="text/javascript">
bkLib.onDomLoaded(nicEditors.allTextAreas);
</script>
<?php
//Conectamos a la BD
$link mysql_connect ($host_db,$usuario_db,$password_db) or die ("<center>No se puede conectar con la base de datos\n</center>\n");
$query "SELECT C.MENSAJE, C.USUARIO, C.FECHA FROM COMENTARIO C WHERE ( C.PID = ".$_GET['pid']." ) ORDER BY C.FECHA";
$result=mysql_db_query ($nombre_db$query$link);
echo '<div align="left" style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000; background-color: #FCFCFC;">';
//Imprimimos los mensajes viejos
while ($fila_comen mysql_fetch_array ($result)) {
echo $fila_comen['USUARIO'].'-Dijo el '.$fila_comen['FECHA'].': <br>';
echo $fila_comen['MENSAJE'];
echo '<br>';
}
echo '</div>';
@mysql_free_result($result);
?>

//Aca tenemos el textarea para responder
<div align="left" style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000;">
<form action="responder.php" method="POST" >
<input type="hidden" name="pid" value=<?php echo '"'.$_GET['pid'].'"';?> />
<input type="hidden" name="titulo" value=<?php echo '"'.$_GET['titulo'].'"';?> />
<input type="hidden" name="usuario" value=<?php echo '"'.$_SESSION['usuario'].'"';?> />
<textarea id="respuesta" name="respuesta"  cols="100" rows="30"/></textarea>
<input type="submit" value="Responder"/><br>
</form>
</div>
</body>
</html>


Opte por el NicEdit porque decían que era el mas sencillo de usar, y además no es tan robustos como otros que he probado como el CKEditor.

Cualquier tip que me puedan brindar sera de gran ayuda. Desde ya muchas gracias por detenerse a leer.

Saludos!
#33
Hola, estoy desarrollando una web y necesito de algún código para orientarme acerca de como armar el panel de mensajes, es decir, un panel como en el que estoy escribiendo este mismo mensaje, justo ahora, con opciones para cambiar la fuente, insertar imágenes, url, etc. Esto se haría con un javascript, pero nunca he hecho uno así. Necesito de algún código para hacerme de una idea de como ir haciéndolo, me preguntaba si el mismo código del panel de elhacker.net estaría disponible. ¿O sino alguien conoce un código similar?

Desde ya gracias por detenerse a leer.

Saludos!
#34
Hola, he hecho una pagina (http://www.dijkstraeasteregg.com.ar/), aún no he finalizado, he terminado todo el tema de registrar un usuario, darlo de alta, que se pueda logear dentro del sistema y pueda hacer publicaciones. En localhost me funciona bárbaro, sin ningún problema, ahora cuando lo subo al servidor remoto (aclaro que tengo hosting en awardspace) me tira errores por todas partes, principalmente de mysql y no se interpretar los errores que me tira. Por ejemplo el código de mi index.php y los archivos involucrados es.

Index.php

<?php session_start(); ?>
<html>
<head>
<title>Dijkstra Easter Egg!</title>
</head>
<body>
<?php 
if(isset($_SESSION['usuario'])){
header("location:user.php");
}
?>

<?php
include ('./menu.php');
?>

<p style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000; "> Lista de temas hablados recientemente...</p>
<?php 
include ('./temashablados.php');
?>

</body>
</html>


menu.php

<!-- Este script contiene todo lo necesario para la barra del menu -->
<?php session_start(); ?>
<html>
<head>

<!-- CSS -->
<link rel="stylesheet" type="text/css" href="menuBar.css">
<link rel="stylesheet" type="text/css" href="panel.css"> 


<!--javascript del menu-->
<script language="javascript" src="menuBar.js"</script>


</head>
<body style="text-align: center; margin-left: auto; margin-right: auto;">

<!-- Barra del menu. -->

<div class="menuBar" style="width: 100%;">
<a class="menuButton" href="" onclick="return buttonClick(event,'userMenu');" onmouseover="buttonMouseover(event, 'userMenu');">Usuario</a>
<a class="menuButton" href="" onclick="return buttonClick(event, 'questMenu');" onmouseover="buttonMouseover(event, 'questMenu');">Temas</a>
<a class="menuButton" href="" onclick="return buttonClick(event, 'helpMenu');" onmouseover="buttonMouseover(event, 'helpMenu');">Ayuda</a>
<a class="menuButton" href="" onclick="return buttonClick(event, 'aboutMenu');" onmouseover="buttonMouseover(event, 'aboutMenu');">Acerca</a>
<!-- Aca falta que vaya el item de identificacion del usuario-->
</div>

<!-- Menu de Usuario. -->
<div id="userMenu" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="iniciarsecion.php">Ingresar</a>
<a class="menuItem" href="registrarse.php">Registrarme</a>
<a class="menuItem" href="recuperar.php">Recuperar contrase&#241;a</a>
</div>

<!-- Menu de Publicaciones. -->
<div id="questMenu" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="publicar.php">Publicar nuevo tema</a>
<a class="menuItem" href="buscar.php">Buscar tema</a>
</div>

<!-- Menu de Ayuda -->
<div id="helpMenu" class="menu">
<a class="menuItem" href="convivencia.php">Manual de Convivencia</a>
</div>

<!-- Menu de Acerca -->
<div id="aboutMenu" class="menu" onmouseover="menuMouseover(event)">
<a class="menuItem" href="acerca.php">De DijkstraEasterEgg.com.ar</a>
</div>

</body>
</html>


temashablados.php

<?php
include(
'config.php');
$link=mysql_connect($host_db,$usuario_db,$password_db);
$query "SELECT P.TEMA, P.AUTOR, P.FECHA, P.TITULO FROM PUBLICACION WHERE MONTH(P.FECHA)=MONTH(GETDATE()) AND YEAR(P.FECHA)=YEAR(GETDATE())";
$result=mysql_db_query($nombre_db,$query,$link);
while ($fila mysql_fetch_array($result)) {
echo '<p style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000; ">'.$fila['TITULO'].' '.$fila['TEMA'].' '.$fila['AUTOR'].' '.$fila['FECHA'].' </p>';
}
mysql_free_result($result);
?>



user.php

<html>
<head>
<title>Dijkstra Easter Egg!</title>
</head>
<body>
      <?php 
session_start();
if(!isset($_SESSION['usuario'])){
header("location:iniciarsecion.php");
}
include('./menuusuario.php');
      
?>

     
      <p style="font-family: MS Sans Serif, Arial, sans-serif;font-size: 10pt;font-style: normal;font-weight: normal;text-align: left; color: #000000; "> Lista de temas hablados recientemente...</p>
  <?php 
include ('./temashablados.php');
  ?>

</body>
</html>


Los mensajes de error que me tira son:
Warning: include(config.php) [function.include]: failed to open stream: No such file or directory in /srv/disk8/921132/www/dijkstraeasteregg.com.ar/temashablados.php on line 2

Warning: include() [function.include]: Failed opening 'config.php' for inclusion (include_path='.:/usr/local/php5/share/pear') in /srv/disk8/921132/www/dijkstraeasteregg.com.ar/temashablados.php on line 2

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /srv/disk8/921132/www/dijkstraeasteregg.com.ar/temashablados.php on line 3

Warning: mysql_db_query(): supplied argument is not a valid MySQL-Link resource in /srv/disk8/921132/www/dijkstraeasteregg.com.ar/temashablados.php on line 5

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/disk8/921132/www/dijkstraeasteregg.com.ar/temashablados.php on line 6

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /srv/disk8/921132/www/dijkstraeasteregg.com.ar/temashablados.php on line 9

No lo logro entender, ¿tendría que modificar algo en el php.ini o en el .htacces?. Tengo todos los archivos en la misma carpeta. ¿Puede ser que el problema este en el código  y que cuando lo corro por localhost este me lo pase por alto y cuando lo hago en servidor remoto este los detecte?.

Cualquier pista que me puedan brindar sera bienvenida.

Desde ya, muchas gracias por detenerse a leer.

Saludos!

PD: Ya se que lo del style="chorizo..." es medio chanchito, pero es que tuve unos problemas con la hoja de estilos y bue, me dije a mi mismo "al demonio Krabappel!"  :xD
#35
Hola, necesitaba hacer una consulta en SQL, pero mi formación en SQL es un poco básica y casi nunca he usado funciones, que no sean las funciones de agregación estándar.

Necesito armar una consulta para saber si una fecha ha caído dentro de este mes, supongan...

SELECT P.NOMBRE, P.AUTOR FROM PUBLICACION P WHERE (P.FECHA BETWEEN "EL PRIMERO DE ESTE MES" AND "EL ULTIMO DE ESTE MES")

Supongo que en realidad debe haber una función que agilice esta consulta, el problema es que no se cual es, osea la única función que conozco de este tipo es today(), pero yo necesitaría una función que me devuelva solo el mes actual, tomar una fecha, desarmarla, tomar solo el mes y ver si coincide...

Pero ahora que lo pienso también entraría en juego el año XD

Recapitulando entonces, necesito comprobar que una fecha que saco de una consulta cae en el mes de este año. Para que se den una idea, sencillamente estoy manejando una tabla de publicaciones, y tengo que imprimir las publicaciones que se han hecho en este mes.

Desde ya muchas gracias por detenerse a leer.

Saludos!
#36
Hola, estoy trabado con un problema que me parece muy sencillo, sin embargo cuando tiro la pagina me aparece toda la pagina en blanco, ¿estaré cometiendo algún error de sintaxis?

Miren este form, es algo realmente muy sencillo, solamente una pequeña ventana para enviar mensajes, tengo la opción de especificar el tema a tratar en el mensaje o elegir un tema que ya se haya utilizado antes, sin embargo este es mi código y no anda, ¿Whyyyyy?

<form  action="subir.php" class="loginPanel" method="post" align="left">
Titulo: <br><input class="loginPanel" type="text" size="88" name="titulo" align="right" /><br>
Mensaje: <br><textarea class="textPanel" name="mensaje" cols="100" rows="30"/></textarea><br>
Categoria: <br>
<?php
echo '<SELECT name="categoria">'
$conexion mysql_connect("localhost""root""qweasd");
mysql_select_db("mysql"$conexion);
$consulta "SELECT NOMBRE FROM TEMAS T"
$respuesta_consulta mysql_query($consulta$conexion) or die(mysql_error());
while ($fila mysql_fetch_assoc($respuesta_consulta)) {
echo '<OPTION VALUE="'.$fila['NOMBRE'].'">"'.$fila['NOMBRE'].'"</OPTION>';
}
echo '</SELECT>'
?>

<br>
Categoria especifica: <br><input class="loginPanel" type="text" size="40" name="categoriaesp" align="right"/><br>
<input type="submit" class="loginPanel" value="Publicar!" />
</form>


Aclaro que originalmente la ultima linea y la primera dentro del script de php estaban fuera del script de manera normal, pensé que por ahi una de las soluciones era que debían estar dentro del script, pero no fue así...

Si vuelo el script php, funciona lo mas bien la pagina, así que el problema debe estar ahí, pero no se, es muy sencillo lo que hace, por eso no le encuentro solución.

Desde ya muchas gracias por detenerse a leer, Saludos!
#37
Hola, estaba haciendo una pagina recopilando ejercicios de SQL Injection, hasta el momento solo he subido dos http://www.dijkstraeasteregg.com.ar/. Ahora, el problema es que el hosting me limpia automaticamente la cadena es decir si le paso ' OR ''=', en realidad le pasa \' OR \'\'=\'.
No estoy seguro, ¿pero esto puede modificarse cambiando el juego de caracteres de la base de datos?. La verdad que lo único que se me ocurre es que sea algo de el hosting, pero no se en que parte tocar para quitarle esta protección. Por cierto el hosting que uso es awardspace, y usa phpMyAdmin para administrar las bases de datos.

Desde ya gracias por detenerse a leer.

Muchas gracias.
#38
Disculpen, capaz que no me explique bien en el enunciado.
Estaba pensando, curiosiando, cuando me entro la duda de si se podría diseñar un navegador que omita los spam de publicidad de las paginas web. Muchas veces estos spam, están incrustados bajo alguna etiqueta en el código fuente de la pagina web. Y los navegadores leen código fuente, entonces suponiendo que el usuario mediante un click identifica el spam, después supongase que se guarda en una base de datos la decisión del usuario, ¿podría construirse un software que busque en el código fuente de la pagina web y omita el spam?. No se mucho de programación web ni de navegadores, así que espero que no sea una lammereada muy grande la que estoy preguntando.
Desde ya gracias por detenerse a leer, Saludos!
#39
Hola, recientemente en mi facultad se realizo una competencia de Capture The Flag, junto con otras universidades de otros países (http://www.info.unlp.edu.ar/articulo/2011/12/5/novedad_2011_12_05_competencia_seguridad_ictf2011_gacetilla). A mi me interesan bastante este tipo de competencias, aunque en una de este tipo nunca he participado, la ultima competencia en la que participe fue la de la ICPC de IBM (http://cm.baylor.edu/welcome.icpc), cosa que no tiene nada que ver con lo anteriormente descripto, puesto que es una competencia puramente algoritmica. Aclaro que de hacking se muy poco, pero me gustaría formarme para este tipo de competencias y quería saber de que fuentes me recomiendan, además, ¿existe algún software similar al que se utiliza en estas competencias pero que uno pueda usar para practicar?.

Desde ya, muchas gracias por detenerse a leer.

Saludos!
#40
Hola, quisiera saber si hay alguna forma de referenciar indirectamente al contenido de un arreglo, supongamos el siguiente escenario:

#!/bin/bash
array=(1 2 3 4 5 6 7)

function e {
        #Y acá es donde quiero hacer referencia indirecta a la variable array usando el contenido de la
        #variable $1 para referenciar al arreglo por ejemplo  como si fuera $$1, claro que esto nos va a
        #devolver cualquier cosa, sin embargo eso es lo que quisiera saber si existe alguna forma
        #de usar el contenido de una variable para referenciar a otra. Todo esto lo hago a modo de juego
        #es que no me parece muy elegante pasarle a la función e ${array[@]}
}

e array


Yo estaba pensando algo como usar pipes y hacer pasar como stdin a '${'$1'[ @ ]}' y pasarlo a otro comando, primero intente pasarselo a bash para que lo ejecutara como una instrucción, pero obviamente no sirvió. Bueno lo estoy haciendo meramente por curioso si a algún conocedor de bash se le ocurre alguna forma bizarra de contribuir a mi bizarra idea, sea bienvenido :P

Desde ya gracias por detenerse a leer :)
#41
Buenas, estaba estudiando acerca de modelado conceptual de bases de datos y me entro una duda.
A la hora de establecer la cardinalidad en una ternaria; ¿Como se supone que se debe leer la cardinalidad?, lo más cercano a una explicación que he leido en mis libros es un ejemplo que tiene:

                |CURSO|--------------<Se imparte>--------------|AULA|
                           (1,3)                     |                     (0,40)
                                                       |   (0,n)
                                                       |
                                                    |DIA|

Me intriga bastante, porque me imagino que siendo una ternaria se debería poder leer de cada entidad al resto. Entonces seria algo como;

"Como mínimo 1 curso y como máximo 3 son impartidos en ninguna o hasta en 40 aulas, ninguno o todos los días" (Leyendolo desde la perspectiva de la entidad curso). Ergo para las otras 2 entidades.

¿Estoy en lo correcto?

Ya que estoy dejo un muy buen libro de modelado conceptual, además la información que contiene acerca del pasaje del conceptual al lógico esta muy buena  ;) ;) ;)
http://books.google.com.ar/books?id=-DP-0puz338C&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
#42
Hola, hace ya un día que estoy peliando con la misma f0cking consulta de SQL, es sencillo pero a la vez muy molesto porque todas las soluciones que me han propuesto mis profesores y mis compañeros tiran resultados erroneos. Realmente simple, es lo siguiente:

Listar nombre y apellido de los alumnos que hayan cursado todos los cursos.

Acá tienen la tabla para hacerse una idea.

PERSONA = (DNI, Apellido, Nombre, Fecha_Nacimiento, Estado_Civil, Genero)
ALUMNO = (DNI, Legajo, Año_Ingreso)
PROFESOR = (DNI, Matricula, Nro_Expediente)
TITULO = (Cod_Titulo, Nombre, Descripción)
TITULO-PROFESOR = (Cod_Titulo, DNI, Fecha)
CURSO = (Cod_Curso, Nombre, Descripción, Fecha_Creacion, Duracion)
ALUMNO-CURSO = (DNI, Cod_Curso, Año, Desempeño, Calificación)
PROFESOR-CURSO = (DNI, Cod_Curso, Fecha_Desde, Fecha_Hasta)

Yo ya trate con los siguientes razonamientos

1) Usar conjuntos; saco el conjunto de los alumnos que no cursaron ninguna materia y se lo resto al conjunto de alumnos en general, con un pequeño problema; el complemento de NINGUNO no es TODOS, sino ALGUNOS

2) Usar NOT EXISTS; Lo encare asi "Los alumnos que no hayan no cursado ninguna materia", el resultado es el mismo que con conjuntos, me devuelve los alumnos que hayan cursado al menos 1 materia

3) Usar COUNT; este si funciona, pero es recontra ineficiente, ya que ha recibido tantas criticas estoy un poco desesperado por encontrar una consulta que haga lo que el enunciado pide y no use COUNT

Si ha alguno de ustedes se les ocurre alguna idea, se los agradecería un montón, además cualquier código que se les venga a la mente, si quieren lo publican y yo lo tiro en la base de datos y les digo que tal salio.

Muchas gracias por detenerse a leer.

Aproposito, acá les dejo el link del tema donde publique el código del COUNT:
http://foro.elhacker.net/desarrollo_web/consulta_sqllistar_elementos_que_estan_presentes_en_todos_los_elementos_de_otra-t343529.0.html
#43
Windows / Escaners de memoria; ¿Donde miran?
3 Noviembre 2011, 21:52 PM
Hola, hace un tiempito que tengo una duda acerca de los escaners de memoria como el Cheat Engine entre otros, pese a que he indagado no he encontrado ninguno que sea open source para poder mirar su código, mi duda es la siguiente; Por mis conocimientos de sistemas operativos, el sistema operativo siempre implementa alguna política de protección de memoria para evitar que otros procesos accedan a las posiciones de memoria de otros procesos del usuario, a menos de que estén en modo kernel, ¿Entonces como pueden los escaners de memoria, como el cheat engine, mirar en las posiciones de memoria de otros procesos y cambiar su contenido?.

PD: No soy muy conocedor de Windows, aclaro.  :silbar:

Desde a gracias por detenerse a leer.
#44
Hola, estoy estudiando casos de uso y me surgio una duda particular. Para explicarme mejor lo haré mediante el siguiente ejemplo.

Se desea modelar un sistema que controle una máquina para reciclar latas, botellas y
cajas de botellas.

El sistema registra cuántos elementos un usuario coloca en la máquina e imprime un
recibo con el valor de dichos elementos junto con el total que se le debe pagar al
usuario.

El sistema también es utilizado por un operador que desea conocer el número de
elementos de cada tipo que se han introducido durante el día. El operador también debe
poder actualizar los valores de los elementos.

La duda principal que tengo es si en el diagrama la maquina tendría que figurar como actor, es decir, por ejemplo validando los elementos que los usuarios ingresan, pesandolos, imprimiendo los recibos y determinando si son reciclables o no, pero, ¿no es la maquina el sistema?

Se me ha dado el mismo error en otros problemas similares.

Además no se si esta pregunta tendría que entrar en esta sección del foro, estaba entre ponerla acá o en Dudas Generales, cualquier cosa avisenme que lo cambio.

Desde ya, muchas gracias por detenerse a leer.

#45
Hola, tengo una duda bastante generalizada de SQL, se trata de como hacer una consulta cuando nos topamos con la siguiente situaciones; tenemos que listar los elementos de una tabla que están presentes en todos los elementos de otra.

Por ejemplo: "Listar solo los alumnos que hayan cursado todas las materias"

Imaginense que tenemos las siguientes tablas:

PERSONA = (DNI, Apellido, Nombre, Fecha_Nacimiento, Estado_Civil, Genero)
ALUMNO = (DNI, Legajo, Año_Ingreso)
PROFESOR = (DNI, Matricula, Nro_Expediente)
TITULO = (Cod_Titulo, Nombre, Descripción)
TITULO-PROFESOR = (Cod_Titulo, DNI, Fecha)
CURSO = (Cod_Curso, Nombre, Descripción, Fecha_Creacion, Duracion)
ALUMNO-CURSO = (DNI, Cod_Curso, Año, Desempeño, Calificación)
PROFESOR-CURSO = (DNI, Cod_Curso, Fecha_Desde, Fecha_Hasta)

Una de mis soluciones fue esta:

SELECT P.DNI, P.NOMBRE, P.APELLIDO
FROM PERSONA P
INNER JOIN ALUMNOCURSO AC ON (P.DNI = AC.DNI)
GROUP BY P.DNI, P.NOMBRE, P.APELLIDO
HAVING ((COUNT(DISTINCT AC.COD_CURSO))=(SELECT COUNT(DISTINCT AC.COD_CURSO) FROM ALUMNOCURSO AC))


A lo que mi profesor respondio:   >:(  >:(  >:(

Bueno el caso, como muchos de ustedes, conocedores de SQL deben darse cuenta es que es extemadamente ineficiente. Me recomendaron que lo hiciera mediante diferencia de conjuntos, sacar el conjunto de alumnos que no han cursado ninguna materia y restarselo al conjunto general de alumnos, lo que me daría por resultado el conjunto de alumnos que han cursado todas las materias.

En el momento no me di cuenta, pero, ¿Acaso haciendo así no obtendríamos el conjunto de alumnos que han cursado por lo menos una materia?

Y si estoy en lo correcto, ¿Cual seria la manera mas eficiente de hacerlo?

Desde ya muchas gracias por su tiempo y por haberse detenido a leer.  :)