04/02/2012

Buscar y comparar costos de productos en excel

Lo puedas hacer programando, hazlo. Lo que no hazlo en excel sí es que realmente te agilizara, en tiempos, y en formatos.

A continuación tenemos un caso donde existe un listado de articulos con su respectivo precio, en un segundo listado los mismos articulos, en diferente orden (incluso con la posibilidad de que no exista el codigo del listado1 en el listado2).

CODIGO1 COSTO1 CODIGO2 COSTO2 STATUS
A1 0.55 B5 0.55 AUMENTO
A2 2.95 B4 2.95 SIN AUMENTO
A3 4.85 B3 4.85 SIN AUMENTO
A4 5.00 B2 5.00 SIN AUMENTO
A5 0.25 B1 0.25 AUMENTO
A6 0.25 A9 0.25 AUMENTO
A7 1.00 A8 1.00 SIN AUMENTO
A8 1.00 A7 1.00 SIN AUMENTO
A9 0.70 A6 0.70 SIN AUMENTO
B1 1.00 A5 1.00 SIN AUMENTO
B2 1.00 A4 1.00 AUMENTO
B3 1.00 A3 1.00 AUMENTO
B4 1.00 A2 1.00 AUMENTO
B5 1.00 A1 1.00 SIN AUMENTO

La formula que determine para obtener los codigos que tuvierón un incremento en su precio es el siguiente:


=SI($B2<INDICE($D$1:$D$234611;COINCIDIR($A2;$C$1:$C$234611;0));"AUMENTO";"SIN AUMENTO")

Sí el tamaño del listado fuera ese lo podrias hacer a ojo de buen cubero pero, si tienes un listado 234610 articulos esto te ayudara.

25/01/2012

Hasta un bebé puede hacer una extensión para Chrome

Hace ya un buen tiempo que estuve jugando con firefox a realizar una extensión y me parecio muy facil, ya que anteriormente habia hecho algo con xulrunner.

Como sea ese es otro tema, el tema principal aqui es que al mirar en google dev, el potencial de desarrollo para Chrome me quede con el ojo pelón.

1.- Create una carpeta, ej: “HolaChrome”
2.- Crea un archivo llamado “manifest.json”, ojo, en utf8.


{"name": "Hola Chrome",
"version": "1.0",
"description": "Jugando a ser bebe.",
"browser_action": {
"default_icon": "icono.png",
"popup":"popup.html"
}
}

3.- Creamos el archivo “popup.html” ( Ponemos un simple mensaje ó algo ). Obviamente “icono.png” ya esta contemplado.

4.- Obvio, en Chrome, vamos al apartado de Herramientas->Extensiones->Marcamos en modo desarrollador->Click en cargar “extension descomprimida”->indicamos la ruta de la carpeta. Listo, se carga la extensión sin problema, lo que me encanto es que puedes seguir editando y se ve reflejado el cambio en la extensión sin necesidad de compilar, o de volver a cargar.

5.- Para empaquetar y distribuir, una vez ya cargada la extensión, click en “empaquetar extensión..”, indicamos la ruta y nos creara dos archivos.

El archivo con extensión .CRX es como tal el paquede de distribución, el archivo con extensión .PEM es donde se guarda una especie de clave que nos permitira posteriormente hacer actualizaciones.

¡Dios mio!.

21/12/2011

Hacer crop a imagenes con css

Hay varias formas de hacer un crop a una imagen con css.

Dos de ellas jugando con position y la que deberia utilizarse que es clip, disponible en css3. El problema con esta ultima alternativa es el soporte en algunas versiones de Internet Explorer.

Por ahí se me presento la necesidad de hacer un crop a una imagen, que, anteriormente ya trabajaba con PHP y sacaba un Thumbnail, sin embargo por las diferentes variantes de la misma tenia un excedente en la altura o en lo ancho.

Lo que hice en css, teniendo ya mi thumbnail fue lo siguiente:


div.Thumb {
height:100px;
width:100px;
overflow:hidden;
}

div.Thumb img {
display:block;
}

Me soluciono el problema por el tipo de proyecto, pero se pudo haber hecho algo mejor con PHP, pero más tardado.

Total, veanlo como otra alternativa.

10/12/2011

Sub-consultas con interbase

He estado jugando un poco con Interbase y la verdad es muy comoda su sintaxis.

Les voy a compartir un ejemplo de como pueden hacer una sub-consulta en un mismo select.


SELECT
"tabla1"."id" AS id,
(select campo from tabla2 where rfn_dato="tabla1"."id") as dato
FROM
tabla1

Espero les sirva, porque sí lo aplican correctamente les ahorrara mucho trabajo.

27/11/2011

Eliminar publicidad de SpiceWorks con Firefox y Greasemonkey

Sí bien hace poco empece a utilizar SpiceWorks para apoyarme en la administración de la red local, dejenme decirles que estoy sorprendido por el pedazo de herramienta que es.

Ampliamente lo recomiendo y pues aun le sigo picando para aprenderle un poco más. Mí idea principal es saber utilizarlo a un 100% y posteriormente desarrollar para esta aplicación.

Un amigo fue quien me recomendo la aplicación y, el mismo me comento sobre el deseo de quitar la publicidad para mayor comodidad.

Te cuento que hice un script-Js basado en greasemonkey para firefox, hechenle ojo y pues funciona sin problemas.

Link: Eliminar publicidad de SpiceWorks con Firefox

23/11/2011

Ordenar por fechas en campos varchar

Sí acostumbras utilizar un campo VARCHAR en mysql, para guardar fechas. Y posteriormente quieres ordenar los resultados de tus SELECT’s en base al mismo campo, podriamos hacerlo de la siguiente manera. ( Donde fecha tiene la siguiente nomenclatura: d.m.Y )


SELECT * FROM `tabla` ORDER BY STR_TO_DATE(fecha, \'%d.%m.%Y\') DESC

Y sigues jugando con ASC, DESC, WHERE, LIMIT..

Espero les sirva.

05/11/2011

POO con javascript

Una forma muy sencilla de utilizar javascript con POO (programación orientada a objetos), seria de la siguiente manera:


var _ = function(){
this.msg = 'Hola..';
this.func = function(txt){
alert(txt);
}
}

Y despues interactual de la siguiente manera:


var d = new _();
d.func(d.msg);
d.msg = '..Mundo!';
d.func(d.msg);
d.func('Nuevo mensaje!');

En mí parecer es mucho más comodo de esta manera, más sí utilizas algún framework como jquery.

03/11/2011

Optimizando sentencias a mysql

Voy a mostrar un ejemplo de como optimizar tus consultas a una base de datos mysql. Para esto trabajaremos un clase en php muy sencilla.

Esta clase nos permitira crear desde luego un objeto y reutilizar los resultados de un select. De igual manera podremos ahorrar algunas lineas de codigo en los bucles, cosa que en lo personal me parece latoso.

A continuación un idea:


class DMysql {
// Clase para optimizar consultas a mysql
// Por Daniel Gerardo Sánchez
// www.danger.com.mx - dangercito@hotmail.com - @DangerCheshire
var $con;
var $bd;
var $msg;

function conexion($host,$db,$user,$pass){
$this->bd = $db;
if($this->con = mysql_connect($host,$user,$pass)){
if(mysql_select_db($db, $this->con)){
$this->msg = 'Se conecto.';
}else{
$this->msg = 'No se pudo conectar.';
}
}else{
$this->msg = 'No conecto al servidor.';
}
}

var $rows;
var $select;
function select($s){
$q = mysql_query($s,$this->con);
$this->rows = mysql_num_rows($q);
$this->select = '';
for($i=1;$i<=$this->rows;$i++){
$this->select[$i] = mysql_fetch_array($q);
}
return $this->rows;
}

function sql($s){
$q = mysql_query($s,$this->con);
}
}

Partiendo de esta idea de clase, podriamos hacer la impresión de un select, de la siguiente manera:


// Quiza esto lo jalamos desde inc..
include('DMysql.php');
$a = new DMysql();
$a->conexion('localhost','db','user','pass');
// End

// Aquí seria lo productivo de la clase
for($i=1;$i<=$a->select('SELECT * FROM `tabla`');$i++){
echo $a->select[$i]['campo'].'
';
}

// Para todo lo que no sea select
$a->sql('..sentencia..');

Y listo, de esta manera tendriamos todo mas limpio, mas organizado y facil de mantener. Espero les sirva.

02/11/2011

Unir resultados de dos o mas tablas

El detalle que surge es cuando quieres unir el resultado de dos o mas tablas.

Por ejemplo, en mi caso tengo una base de datos para newsletter, en cada tabla almaceno contactos con diferente estructura pero con dos campos en comun; “nombre y correo”.

Sí quisieramos mostrar un solo listado, sin hacer un bucle diferente en cada consulta, ni escribir mas lineas de codigo, mas rapida, y SIN REGISTROS REPETIDOS… Seria de la siguiente manera;


SELECT `nombre`,`correo` FROM `tabla1` UNION DISTINCT
SELECT `nombre`,`correo` FROM `tabla2` UNION DISTINCT
SELECT `nombre`,`correo` FROM `tabla3`

Tan sencillo como eso!.

29/10/2011

If y elseif cortos en php

Sí tuvieramos algo como:


for($i=0;$i<=10;$i++){
if($i==9){
$res = true;
}else{
$res = false;
}
}

Podriamos optimizarlo un poco de la siguiente manera:


for($i=0;$i<=10;$i++){
$res = ($i==9) ? true : false;
}

Listo!