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ú

Mensajes - Once

#181
A veces es mejor publicar la noticia en el idioma original (o no publicar nada) que hacer copiar y pegar en el traductor de google.

Saludos!
#182
Noticias Informáticas / chrOpera 24 para linux
Junio 23, 2014, 07:09:33 PM

Más de un año después de que Opera anunciase su decisión de abandonar su motor de navegador para pasarse a Chromium, además de lanzar las versiones betas para Windows y OS X, Opera lanza la versión beta de Opera 24 basado en Chromium.

Ha tardad muchísimo, pero la versión beta basada en Chromium para Linux ya está disponible para descargar, por lo menos para los que usen Debian, Ubuntu o alguna distribución basada en Debian (el paquete es .deb).

Si has usado "Opera Next" en Windows o en OS X no verás sorpresas, peor si aguantaste con la versión anterior basada en el antiguo motor, encontrarás que la carga es más rápida, además de un rediseño general del navegador, una nueva página Descubre, diseños y temas para personalizar el aspecto del navegado, mejoras en el acceso rápido a tus favoritos y Opera Turbo.

Puedes descargar automática la versión beta para desarrolladores para Linux basado en Debian You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.

Fuente: fayerwayer




En ArchLinux lo podemos instalar desde el yaourt:
Código: bash
yaourt -S opera-developer


Saludos!
#183
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Por lo que vi en el código de rapido y fugas, en el mismo lugar donde ejecutas el script.

Así es, te lo deberia crear con el nombre que susiste cuando te dice "coloque el nombre que le quiere poner a su diccionario : " solo que le agrega un .txt al final

Saludos!
#184
Zona Webmaster / Re:Mejor editor web para GNU/Linux
Mayo 26, 2014, 09:57:20 AM
Amo Brackets ♥ simplemente para JS, HTML y CSS es el mejor editor.

Saludos!
#185
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Wow! De verdad buenísimo!
Pero ¿cómo se envían los archivos al server? Digo, como los "agarro" con PHP...

Enviado desde mi ST25a mediante Tapatalk

No soy un tipo de PHP (programé el uploader para usarlo con flask y ajax) pero esto te debería servir:

Código: php
<?php
    if (isset($_FILES["file"])) {
    $error = true;
    $len = count($_FILES["file"]["name"]);

    for ($index=0; $index < $len; $index++) {
    $temporal = $_FILES["file"]["tmp_name"][$index];
    $nombre = $_FILES["file"]["name"][$index];
   
    if (move_uploaded_file($temporal, "subidos/".$nombre)) {
    $error = false;
    }
   
    }

    if ($error) {
    echo("Ocurrio un error");
    } else {
    echo("Subida con exito");
    }
   
    }
?>


OJO: El código es bypaseable. Asíq ue cuidado dónde lo uses.

Saludos!
#186
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muchisimas gracias, nunca me terminaba de gustar el estilo del uploader, ya que sabía ponerle lo básico de estilos pero nunca tan currado...

Mañana hago uno para practicar, gracias otra vez :)

Un saludo.

Enviado desde BlackMovil5

Espero te sirva el post. si tienenes alguna duda o algo, sólo comenta.

Saludos!
#187
Zona Webmaster / [CSS & JS]Personalizar input file
Mayo 24, 2014, 08:04:16 PM
Los que alguna vez jugueteamos con el diseño web, muy seguramente nos encontramos con el problema de personalizar los input file. Inteentaré mostrar la forma en que logré personalizar los input file usando sólo CSS, JS, y el DOM de una manera sencilla. Que además nos permite eliminar archivos que ya estan en la lista para ser subidos al servidor.


La idea es convertir esto:


en esto:



Código: html5

<html>
    <head>
        <link href="input.css" rel="stylesheet" />
        <script src="input.js"></script>
    </head>
    <body>
        <center>
            <form action="http://127.0.0.1:5000/upload" enctype="multipart/form-data" method="POST" id="frm_upload">
                <div id="upload">
                    <input id="archivos" type="file" name="file[]" multiple="multiple" onchange="seleccionados();"/>
                </div>
                <span id="filename"></span>
                <p/>
                <input type="button" name="submit" value="Subir" onclick="subir();"/>
            </form>
        </center>
    </body>
</html>


Para eso, vamos a usar un formulario normal, estructurado así:

un div con id "upload" dentro del cual meteremos el input file; es el div que moldearemos para que tome la forma que nuestro upload tenga.
un input file configurado para seleccionar multiples archivos. Cuando se selecciona un archivo (evento onchange) llama a la función seleccionados
un span con id "filename" que es donde mostraremos los archivos seleccionados
un input button que se encargara cuando hagamos click sobre el de enviar el formulario.

El css (input.css):

Código: css
input[type=file] {
    opacity: 0;
    width: 100%;
    height: 100%;
}

#upload {
    background: url("https://cdn2.iconfinder.com/data/icons/internet/512/Upload-128.png") #111 center center no-repeat;
    width: 150px;
    border-radius: 5px;
    height: 150px;
    box-shadow: 0 0 5px #111;
}


Este sencillo CSS simplemente hace invisible el input file (opacity: 0) y le da un ancho y alto de 100% para que ocupe la totalidad del div (upload)
en el bloque #upload, damos la apariencia que queremos que tengo nuestro upload agrgando un simple background, una sombra y unas dimensiones (150x150).

Hasta ahora, nuestro upload se ve así:

Si lo clickeamos, nos abre la ventana para seleccionar los archivos, pero una vez seleccionados, NO LOS MUESTRA. Así que ahora vamos a codear el JS:

El JS (input.js): Los navegadores no nos dejan modificar los datos de los input file, pero si que nos permite juguetear un poco con los datos. Así que lo que haremos sera obtener la lista de los elementos seleccionados y la guardaremos en un array que podremos modificar (ara eliminar los elemento que no queremos subir) y a la hora de enviar el formulario al servidor, lo que haremos es simular un formulario que llenaremos con la informacion del array y lo enviamos al servidor.

La función seleccionados:

Código: javascript
//Creamos el array que usaremos para almacenar y enviar la informacion
var ELEMENTOS = new Array();

function seleccionados() {
    //Obtenemos el inputfile
    var input = document.getElementById("archivos");
    //Obtenemos los archivos
    var archivos = input.files;
    //Aca es donde mostraremos los elementos seleccionados
    var elementos = document.getElementById("filename");
       
    //Limpiamos los elementos seleccionados anteriormente
    elementos.innerHTML = " ";
    ELEMENTOS = [];
   
    //Recorremos archivo por archivo
    for (item=0; item< archivos.length; item++) {
        //duplicamos el archivo seleccionado en el array elementos
        ELEMENTOS[item] = archivos[item];
        //Creamos un div donde mostramos el archivo seleccionado
        crear_div("file", elementos, archivos[item].name);
    }
}


La funcion crear_div: Esta funcion se encarga de crear un div, agregarle propiedades y luego incrustarlo en un elemento padre

Código: javascript

//funcion que crea un div
function crear_div(clase, padre, informacion) {
    //Escapamos la variable informacion para evitar posibles XSS
    informacion = escape(informacion);
    //Creamos el div
    var div = document.createElement("div");
    //Le agregamos al div sus propiedades
    div.setAttribute("class", clase);
    div.setAttribute("title", "click para eliminar");
   
    //en caso de hacer click en un elemento, lo elimina de la lista de los archivos a subir
    div.onclick = function() {
        var index = -1;
        //eliminamos el archivo seleccionado de la lista
        for (indice=0; indice < ELEMENTOS.length; indice++) {
            //Buscamos el index del elemnto seleccionado para ser eliminado
            if (ELEMENTOS[indice].name == unescape(informacion)) {
                index = indice;
            }
        }
        if (index != -1) {
            //removemos el elemento de la lista
            ELEMENTOS.splice(index, 1);
            padre.removeChild(div);
        } else {
            alert("No se pudo eliminar el elemento");
        }
       
    }
   
    //Agregamos el div al padre
    padre.appendChild(div);
    div.innerHTML = informacion;
}



Hasta ahora, nuestro upload se ve así.

Sólo nos resta darle un estilo a los div que contienen el nombre de los archivos seleccionados (que tienen la clase file):

Código: css
.file {
    background: #111;
    display: inline-block;
    margin: 5px;
    color: #FFF;
    line-height: 25px;
    padding: 5px;
    border-radius: 5px;
    box-shadow: 0 0 5px #000;
}


Y programar la función para subir los archivos al servidor:

Código: javascript
function subir() {
    //creamos un nuevo formulario y lo llenamos con la información del array con los elementos a enviar
    var formulario = new FormData();
   
    for (file=0; file < ELEMENTOS.length; file++) {
        formulario.append("file[]", ELEMENTOS[file]);
    }
   
    //obtenemos el action y method del formulario original
    var frm = document.getElementById("frm_upload");
    var metodo = frm.method.toUpperCase();
    var action = frm.action;
   
    //enviamos el formulario
    var request = new XMLHttpRequest;
    request.open(metodo, action);
    request.send(formulario);
}


Y nuestro uploader está listo.

Saludos!
#188
Python / File Watcher
Mayo 23, 2014, 02:08:51 AM
Buscando en un backup acabo de encontrar este script y lo dejo por si a alguien le sirve.

Hace un tiempo programé un wargame y necesitaba una manera de comprobar que nadie hubiese comprometido los archivos de la web. Las opciones eran verificar los arhivos de más de 20 retos a mano y comprobar que no hubiesen subido una shell o incrustado código en algún php existente. Así que decidí codear un script que me indicara si se creó o modificó algún archivo.

Funcionamiento de script: El script crawlea un directorio y guarda en una "base de datos" (en este caso un diccionario serializado) la ruta de los archivos y sus respectivos hash md5. Para comprobar si un archivo a sido modificado, simplemente se compara su hash md5 con el que está en la BD y obviamente si el archivo no se encuentra en la BD es porque fue creado despues.

Además indica los archivos de backup (.*~) que encuentra.

Código: python
# -*- coding: utf-8 -*-

#11Sep

import os
import sys
import hashlib
import cPickle

recursividad = False
diccionario = {}
COLORES = {
    "archivo": "\033[91m\t[Archivo nuevo] %s\033[0m",     # Rojo
    "carpeta": "\033[94m\t[Carpeta nueva] %s\033[0m",     # Azul
    "modificado": "\033[93m\t[Modificado] %s\033[0m",     # Amarillo
    "backup": "\033[91m\t[BACKUP] %s\033[0m",             # Rojo
}

MENU = """Modo de uso:
%s ruta [parametros]

-r          Modo recursivo
-a          Actualiza la BD
-v          Para ver archivos y hashes
"""


def imprimir(data, color):
    if its_linux:
        print COLORES[color] % data
    else:
        print data

def es_archivo(ruta):
    if os.path.isfile(ruta):
        return True

def es_directorio(ruta):
    if os.path.isdir(ruta):
        return True

def guardar():
    with open("./data.sf", "wb") as archivo:
        cPickle.dump(diccionario, archivo, 2)

def cargar():
    global diccionario
    try:
        with open("./data.sf", "rb") as archivo:
            diccionario = cPickle.load(archivo)
        return True
    except:
        return False

def get_md5(ruta):
    md5 = hashlib.md5()
    with open(ruta, "r") as hash:
        for linea in hash.readlines():
            md5.update(linea)
    return md5.hexdigest()

def recorrer(path, opt):
    if es_directorio(path):
       
        if not diccionario.has_key(path):
            diccionario[path] = {}
            imprimir(path, "carpeta")
       
        archivos = os.listdir(path)
       
        for archivo in archivos:
            ruta_completa = os.path.join(path, archivo)
            if es_archivo(ruta_completa):
                extension = os.path.splitext(ruta_completa)[1]
                if extension.endswith("~"):
                    imprimir(ruta_completa, "backup")
               
                if opt == 1:
                    diccionario[path][archivo] = get_md5(ruta_completa)
                else:
                    md5 = get_md5(ruta_completa)
                    md5_bd = diccionario[path].get(archivo)
                    if md5_bd:   
                        if md5_bd != md5:
                            imprimir(ruta_completa, "modificado")
                    else:
                        imprimir(ruta_completa, "archivo")

            elif es_directorio(ruta_completa) and recursividad:
                recorrer(ruta_completa, opt)

its_linux = (os.name == "posix")

argumentos = sys.argv
if len(argumentos) > 1:
    parametros = []
    ruta = argumentos[1]
    parametros = argumentos[2:]
   
    if "-r" in parametros:
        recursividad = True
   
    if not es_directorio(ruta):
        print "Ruta no valida"
        exit()
    else:
        if "-a" in parametros:
            diccionario = {}
            recorrer(ruta, 1)
            guardar()
            exit()
        if cargar():
            recorrer(ruta, 2)
        else:
            recorrer(ruta, 1)
            guardar()
   
    if "-v" in parametros:
        for x, y in diccionario.iteritems():
            print x
            for archivo, hash in sorted(y.iteritems()):
                print "\t", archivo, hash
       
else:
    print MENU % os.path.split(argumentos[0])[-1]


Las opciones son:
-v: para ver la BD de los archivos y hashes md5
-a: para actualizar la BD
-r: para recorrer las carpetas en modo recursivo








Saludos!
#189
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
tambien sirve camuflarse detras del buen amigo google

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Amén. Ese método me salvó un examen.

Saludos!
#190
Off Topic / Re:Vota tu navegador favorito!
Mayo 21, 2014, 03:00:14 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
HOLA!!!

Que extraño que me digas que FF abre lento, hoy en dia mi FF tiene 24 Complementos Activos + 1 Tema oscuro.  Y me abre al instante en mi pc que tiene lo siguiente: AMD 2.71 GHz 2Gb Ram HDD 250GB es una pc del 2007.

GRACIAS POR LEER!!!

Tengo un AMD 1.6 GHz 2Gb Ram 500GB además corre ArchLinux con XFCE4 y FF me andaba muuuy lento y me crasheaba por todo. Opera me andaba de lujo.

El problema con Opera, es que depués de la versión 12.* y gracias a los grandes cambios pasó a la versión 15 donde comenzaron a usar el motor de chromium. El problema es que lanzaron Opera 15 para Windows y Mac y aún no han lanzado una versión para linux.

Así que básicamente probé Firefox desde hace un par de actualizaciones y me anda de lujo (aunque se me tilda un poco). Por el momento me quedo con FF.

PD: Espero que kodeinfect no vea este post

Saludos!
#191
Off Topic / Re:Vota tu navegador favorito!
Mayo 21, 2014, 10:56:29 AM
Opera apesta. Cambio mi voto por firefox.

Saludos!
#192
Gracias por el aporte brother, es un buen libro. Si tienes más material, no dudes en subirlo.

Saludos!
#193
También me andan los links, pero igual puedes descargar los pdf de acá You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos!
#194
Python / Re:The Python Challenges
Mayo 10, 2014, 02:38:44 AM
Sólo quiero avisar que se vienen nuevos retos, para los cuales no será necesario inscribirse. Pero sería genial saber si aún hay usuarios interesados en participar.

Saludos!
#195
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Mi opinion es que la etica y la moral es algo que nos impone la sociedad para impedirnos volar, para hacer lo que ellos quieren que hagamos y nos demos palmaditas en la espalda porque "esta bien hecho". Para mi solo existo yo y mis amigos, con el resto no tengo escrupulos.

Tu respuesta me acordó a: [video]You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


PARA MÍ es no ser un hijo de puta, vivir como quieras pero sin joder al otro

Saludos!
#196
Python / Re:[Código] Ecuaciones de 2º grado
Mayo 04, 2014, 01:47:45 AM
Muy bueno brother, sólo un par de  observaciones:

1) Como estás importando con from math import sqrt no accedes a la función con math.sqrt() sino que lo haces sólo con sqrt().
2) Si evaluas el discriminante te puedes ahorrar el try:

Saludos!
#197
Python / Re: PyHttpShell
Abril 14, 2014, 11:35:38 PM
¿Hay algún link o código?

Saludos!
#198
Python / Re:ENCUESTA: Interfaces gráficas en Python
Abril 11, 2014, 01:56:02 AM
Sólo he programado en PyQT4 "a mano" (Sin  el diseñador). Lo único malo que he notado es que la documentación  está en C++ y en inglés; y la poca documentación que encuentras en Python y en español la mayoría es basura.

Saludos!
#199
El error no está en el AddEventListener. El problema es que tienes MUCHOS errores en la sintaxis.

Código: javascript
    var Login = document.getElementById('Login');

    Login.addEventListener('click', function(){
        var Ce = document.getElementById('Ce');
        var Ce1 = Ce.value;
        var Pass = document.getElementById('Pass');
        var Pass1 = Pass.value;
        if (Ce1 == "123" && Pass1 == "123") {
            location.href = "Login.html";
        } else {
            alert ('Contraseña o correo electronico incorrecto');
        }
    });


Como consejo, te recomiendo que comiences identar tus códigos (en especial el de las funciones anónimas) así te das cuenta mucho más fácil de los errores que tienes.

PD: Si estás comenzando con JS, te recomiendo que le des un vistazo a esta web: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos!
#200
Yo uso Istanbul (es muy sencillo)

Saludos!