[PHP][Geo - #RemoteExecution]

Iniciado por hielasangre, Septiembre 29, 2014, 12:54:45 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Septiembre 29, 2014, 12:54:45 PM Ultima modificación: Octubre 10, 2014, 12:26:47 PM por hielasangre
Hace mucho tiempo que existe una web llamada No tienes permitido ver los links. Registrarse o Entrar a mi cuenta donde uno ingresando la característica y número de un teléfono celular o fijo nos da la información sobre la empresa,localidad,modalidad,etc...
Estos datos se podían bajar en un archivo .xls de la Comisión Nacional de Comunicaciones (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)
Tenia la Base de Datos hace algún tiempo y por fin me decidí a darle un uso al que se le pueda sacar provecho.
Aquí les dejo todo lo necesario para implementar este sistema en sus webs.
Aclaro que el sistema es solo valido para Argentina y también recomiendo incorporar un captcha si es que lo van a dejar para uso publico



PD: La captura es de una versión vieja que tenia y que modifique anoche.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Nota: Voy a actualizar el script porque lo hice a las apuradas. Saludos!

PD: Como dije por ahí , mis post no dicen "Fuente: ESET Latinoamerica xD"

Que grande hielasangre!!
Ya le pasaremos a fermino para implementarlo en underc0de!
Te dejo +1 por el aporte!

Saludos!
ANTRAX


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Que grande hielasangre!!
Ya le pasaremos a fermino para implementarlo en underc0de!
Te dejo +1 por el aporte!

Saludos!
ANTRAX

Buenisimo! La tengo que corregir un poco porque hay algunas cosas que estan hardcodeadas y hasta creo que inseguras xD

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ahi esta la lista ( se va actualizando cada tanto!) lo bajan como xls, luego lo guardan como CSV y por ultimo lo suben por phpmyadmin y tienen una DB actualizada... La verdad que no justifica hacer un panel!

Que bueno que esta!!

La verdad estaría bueno implementarlo.!!!

Gracias ;D

Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Si usa PDO lo haces cambiando una línea nada más :P (PD: Aún no vi el code)...
Visita mi blog: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Si usa PDO lo haces cambiando una línea nada más :P (PD: Aún no vi el code)...

Pégale una mirada, y subí las correcciones que creas ;)

Septiembre 29, 2014, 02:22:02 PM #7 Ultima modificación: Septiembre 29, 2014, 02:24:29 PM por fermino
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Si usa PDO lo haces cambiando una línea nada más :P (PD: Aún no vi el code)...

Pégale una mirada, y subí las correcciones que creas ;)

Así quedaría el archivo config/DBconfig.php para utilizar SQLite (No testeado):

Código: php
<?php
/*
* DBconfig.php
*
* Copyright 2014  <hielasangre@fuckingmachine>
*
* Clase que contiene la configuracion del sitio.
* self::$var si es variable
* this->metodo
*/

class DBconfig{
public static $dbDriver= 'mysql';  // se declaran como public static, para no tener que iniciarlo con new
public static $dbFile = 'sqlite.db'; // Solo si el driver es sqlite
public static $host = 'localhost';
public static $user = 'root';
public static $password= '';
public static $database= 'geografica';

public static function dsn(){
if (self::$dbDriver == 'sqlite'){
return self::$dbDriver . ':' . self::$dbFile;
}
return self::$dbDriver . ':host=' . self::$host . ';dbname=' . self::$database;
}

}



No se si habrá problemas al intentar conectar a una DB SQLite, enviando usuario y contraseña (lib/DB.php: self::$instance = new PDO(DBConfig::dsn(), DBConfig::$user, DBConfig::$password);). Si los hay, tan solo hay que testear si el driver seteado en DBconfig es sqlite, y entonces, sólo enviar el DSN...
Visita mi blog: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Lastima que solo sirva en argentina, me hubiese venido genial. Igualmente aportazo para los que puedan usado.

Un saludo.



Octubre 05, 2014, 03:11:58 PM #9 Ultima modificación: Octubre 05, 2014, 03:31:18 PM por Alexander1712
en lo personal tengo mis dudas respecto a un par de cositas, que voy a aclarar:

por el archivo path.php de la carpeta lib:

crear una clase de esa forma me parece algo no solo innecesario sino incoherente, analicemos un poco las funciones y veamos, encontramos funciones como loadLib y loadConfig, las funciones de por si van completamente en contra del segundo criterio de calidad y el cuarto criterio.

sobre el segundo criterio de calidad:

por definicion:
Robustez es la habilidad de una entidad de software de funcionar aún en condiciones anormales (No especificadas).

desde el vamos estás utilizando require once, lo cual da por sentado el hecho de que exista el archivo que estas requiriendo, el resultado de esto es que ante la falta de dicho archivo nos encontraremos con un error fatal de ejecución, lo que deberías hacer es analizar si el archivo existe y de lo contrario decirle al usuario el problema, ya que además si tienes desactivado display_errors (asumiendo que estás en modo de producción) el resultado va a ser pantalla en blanco sin explicaciones y con detención de ejecución. entonces en la situación de que el archivo de configuracion o alguno de los archivos falle tu programa no tiene una salida concreta.

Pero este en realidad es el menor de los problemas, también está el 4º criterio de calidad

por definición:
Reusabilidad es la habilidad de una entidad de software de ser reusado en conjunto o en parte en la construcción de nuevas entidades

ahora, la pregunta es, como puedes reusar una clase que carga archivos específicos internos? y si no querías cumplir con dicho criterio, con qué motivo hiciste una clase? podrían haber sido dos funciones simples sin necesidad de cargar la memoria con una estructura de tal tipo (innecesaria en realidad).

las cosas deben ser usadas cuando valgan la pena, esa clase si bien tiene el proposito de normalizar o estandarizar las cargas, debería requerir tanto el archivo como el directorio de la ubicación de lo que se decea cargar, no cargar deliberadamente archivos en particular.

Entonces en el cambio de contexto donde se decee cargar otro archivo habrá que alterar el código de la clase path, que es en realidad una dependencia del principal, por el contrario un buen código requeriría la alteración unicamente del contexto.

Sobre el archivo GEO.php deberías analizar el uso que le das a los apostrofes de parseo y a los apostrofes de especificación de literales.

No me parece mal que uses apostrofes de parseo, o apostrofes de literales pero usar apostrofes de parseo y luego concatenación es innecesario, y dado que lo que tu escribes si concatenas son literales no es necesario parsear la cadena, dando un trabajo innecesario al interprete de php que desde el vamos que ya tiene sus propios problemas no es necesario darle más carga innecesaria.

Además crear una clase modelo de objetos que pueden cargar archivos, está mal estructurada, ni siquiera debería ser una clase ¿por qué? si quieres que sea una clase en este casi SI debes implementar singleton dado que de lo contrario podrías crear 30 instancias fantasmas (por dar un numero) que intenten cargar archivos, pero como usas require_once no harán absolutamente nada, ¿por qué razón podría yo crear muchas instancias de un cargador de archivos?, y si usas singleton es porque en realidad no necesitas una clase lo haces de puro gusto.

DB.php quizá este sea el asunto principal.

El controlador PDO ya de por si tiene una estructura similar a una clase, de hecho la forma de trabajar es crear una instancia de pdo obteniendo un objeto hecho y derecho, crear una clase interface intermediaria es innecesario por donde se lo mire, a menos que claro está te topes con lo que noté luego, la clase es únicamente para dotar a PDO de Singleton, algo aberrante, lo que estás haciendo es forzar a la clase a solo poder obtener una instancia, y esto ya de por si es un tema no poco menor, una clase que solo se puede instanciar una vez, trate de analizar lo que estoy expresando, es una clase bastante extraña, dado que el objetivo de una clase es representar un modelo de un objeto, que luego al instanciarlo se transforma en el objeto en particular, pero que sentido tiene crear un modelo de algo que solo hay un objeto particular, en otras palabras, se crean modelos de las cosas dada la variedad que existen, pero si solo existe un objeto de ese tipo, crearle una clase es un poco... dada la explicación anterior usar singleton correctamente es bastante dificil ya que solo se puede usar en algunos casos particulares sin concluir en un código ridículo, dotar a una clase que controla bases de datos (y recalco las S) con singleton, es completamente ridículo, ignoro como se te ocurrió tal cosa, pero aunque solo uses una base de datos, dotar de singleton limita al contexto particular en el que se usa dicho código, por lo que el resultado es una violación clara a uno o más de los criterios de calidad.

Ahora bien, no es mi intención tachar a tu código de horrible ni nada por el estilo, yo mismo suelo evitar la implementación de varios criterios dependiendo del caso en el que esté programando, generalmente no aplico criterios para tirar para arriba, dado el gasto de tiempo que conlleva. ¿Entonces por qué hago esta respuesta?, esto no es una queja de tu código, simplemente son explicaciones de cosas que eventualmente se podrían mejorar, y marcar cosas que son bastante ridiculas y que ocacionalmente hasta yo cometo semejantes ridiculeces por el hecho de que aveces uno no se pone a analizar el código. Entonces diré por que respondo todo ésto, mis textos de explicación suelen ser dificiles de entender, y generalmente suele creerse que el código no puede ser analizado bajo los criterios de calidad que explico en mi blog y que hay bastantes textos, esto pasa al principio y se que hay gente en el foro que tiene estas dudas, esto es casi una demostración de que realmente se pueden aplicar los criterios de calidad al código, y una ilustración para aquellos a los que la teoría les complique la vida.

Saludos!

pd: no es mi intencion ofenderte, concidero que tu código hielasangre está relativamente bien, y que es utilizable, y si quiciera implementarlo es muy probable que usara tu código.

pd2: en lo personal no me agrada para nada el uso de php embebido de la forma en que está en index.php pero tampoco es mala, preferiría etiquetas de php lo más cortas posible.

pd3: interesante aporte al código original fermino.

Es que te digo la verdad? Ya lo tenia hecho de un proyecto mas robusto de uso personal, pero el tema es que para evitarme codear lo use a ese, quería sacar algo rápido, lo voy a tener en cuenta a todo lo que describís acá, y todo lo que citas es totalmente correcto, si tampoco soy de hardcodear o hacer esos desastres qeu tiene esta app, asi que voy a ver de mejorarlo en breve, no soy de las personas que se calientan cuando le hacen una critica ;) Asi que esta mas que bienvenida :)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
en lo personal tengo mis dudas respecto a un par de cositas, que voy a aclarar:

por el archivo path.php de la carpeta lib:

crear una clase de esa forma me parece algo no solo innecesario sino incoherente, analicemos un poco las funciones y veamos, encontramos funciones como loadLib y loadConfig, las funciones de por si van completamente en contra del segundo criterio de calidad y el cuarto criterio.

sobre el segundo criterio de calidad:

por definicion:
Robustez es la habilidad de una entidad de software de funcionar aún en condiciones anormales (No especificadas).

desde el vamos estás utilizando require once, lo cual da por sentado el hecho de que exista el archivo que estas requiriendo, el resultado de esto es que ante la falta de dicho archivo nos encontraremos con un error fatal de ejecución, lo que deberías hacer es analizar si el archivo existe y de lo contrario decirle al usuario el problema, ya que además si tienes desactivado display_errors (asumiendo que estás en modo de producción) el resultado va a ser pantalla en blanco sin explicaciones y con detención de ejecución. entonces en la situación de que el archivo de configuracion o alguno de los archivos falle tu programa no tiene una salida concreta.

Pero este en realidad es el menor de los problemas, también está el 4º criterio de calidad

por definición:
Reusabilidad es la habilidad de una entidad de software de ser reusado en conjunto o en parte en la construcción de nuevas entidades

ahora, la pregunta es, como puedes reusar una clase que carga archivos específicos internos? y si no querías cumplir con dicho criterio, con qué motivo hiciste una clase? podrían haber sido dos funciones simples sin necesidad de cargar la memoria con una estructura de tal tipo (innecesaria en realidad).

las cosas deben ser usadas cuando valgan la pena, esa clase si bien tiene el proposito de normalizar o estandarizar las cargas, debería requerir tanto el archivo como el directorio de la ubicación de lo que se decea cargar, no cargar deliberadamente archivos en particular.

Entonces en el cambio de contexto donde se decee cargar otro archivo habrá que alterar el código de la clase path, que es en realidad una dependencia del principal, por el contrario un buen código requeriría la alteración unicamente del contexto.

Sobre el archivo GEO.php deberías analizar el uso que le das a los apostrofes de parseo y a los apostrofes de especificación de literales.

No me parece mal que uses apostrofes de parseo, o apostrofes de literales pero usar apostrofes de parseo y luego concatenación es innecesario, y dado que lo que tu escribes si concatenas son literales no es necesario parsear la cadena, dando un trabajo innecesario al interprete de php que desde el vamos que ya tiene sus propios problemas no es necesario darle más carga innecesaria.

Además crear una clase modelo de objetos que pueden cargar archivos, está mal estructurada, ni siquiera debería ser una clase ¿por qué? si quieres que sea una clase en este casi SI debes implementar singleton dado que de lo contrario podrías crear 30 instancias fantasmas (por dar un numero) que intenten cargar archivos, pero como usas require_once no harán absolutamente nada, ¿por qué razón podría yo crear muchas instancias de un cargador de archivos?, y si usas singleton es porque en realidad no necesitas una clase lo haces de puro gusto.

DB.php quizá este sea el asunto principal.

El controlador PDO ya de por si tiene una estructura similar a una clase, de hecho la forma de trabajar es crear una instancia de pdo obteniendo un objeto hecho y derecho, crear una clase interface intermediaria es innecesario por donde se lo mire, a menos que claro está te topes con lo que noté luego, la clase es únicamente para dotar a PDO de Singleton, algo aberrante, lo que estás haciendo es forzar a la clase a solo poder obtener una instancia, y esto ya de por si es un tema no poco menor, una clase que solo se puede instanciar una vez, trate de analizar lo que estoy expresando, es una clase bastante extraña, dado que el objetivo de una clase es representar un modelo de un objeto, que luego al instanciarlo se transforma en el objeto en particular, pero que sentido tiene crear un modelo de algo que solo hay un objeto particular, en otras palabras, se crean modelos de las cosas dada la variedad que existen, pero si solo existe un objeto de ese tipo, crearle una clase es un poco... dada la explicación anterior usar singleton correctamente es bastante dificil ya que solo se puede usar en algunos casos particulares sin concluir en un código ridículo, dotar a una clase que controla bases de datos (y recalco las S) con singleton, es completamente ridículo, ignoro como se te ocurrió tal cosa, pero aunque solo uses una base de datos, dotar de singleton limita al contexto particular en el que se usa dicho código, por lo que el resultado es una violación clara a uno o más de los criterios de calidad.

Ahora bien, no es mi intención tachar a tu código de horrible ni nada por el estilo, yo mismo suelo evitar la implementación de varios criterios dependiendo del caso en el que esté programando, generalmente no aplico criterios para tirar para arriba, dado el gasto de tiempo que conlleva. ¿Entonces por qué hago esta respuesta?, esto no es una queja de tu código, simplemente son explicaciones de cosas que eventualmente se podrían mejorar, y marcar cosas que son bastante ridiculas y que ocacionalmente hasta yo cometo semejantes ridiculeces por el hecho de que aveces uno no se pone a analizar el código. Entonces diré por que respondo todo ésto, mis textos de explicación suelen ser dificiles de entender, y generalmente suele creerse que el código no puede ser analizado bajo los criterios de calidad que explico en mi blog y que hay bastantes textos, esto pasa al principio y se que hay gente en el foro que tiene estas dudas, esto es casi una demostración de que realmente se pueden aplicar los criterios de calidad al código, y una ilustración para aquellos a los que la teoría les complique la vida.

Saludos!

pd: no es mi intencion ofenderte, concidero que tu código hielasangre está relativamente bien, y que es utilizable, y si quiciera implementarlo es muy probable que usara tu código.

pd2: en lo personal no me agrada para nada el uso de php embebido de la forma en que está en index.php pero tampoco es mala, preferiría etiquetas de php lo más cortas posible.

pd3: interesante aporte al código original fermino.