lunes, 17 de diciembre de 2012

sql to txt file

para guardar una consulta en un txt, simplemente:
SELECT order_id,product_name,qty FROM orders
INTO OUTFILE '/tmp/orders.txt'
se pueden usar modificadores para alterar el comportamiento al guardar:
SELECT order_id,product_name,qty FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

miércoles, 21 de noviembre de 2012

La codificación de caracteres del documento HTML no fue declarada.

simplemente agregá dentro del <head></head>:


<meta charset="utf-8">

php json_encode() y como recorrer array json con jquery

Mi nuevo trabajo me está llevando a aprender algo de jquery y ajax. Hoy se me presentó el problema de recorrer un array de objetos json creado desde php con la función json_encode(). Lo que hace esta función es devolver el código tal cual lo necesita javascript para inicializar un array, por lo que ponemos:
var myObjetoJson = <?php echo json_encode($myObjeto)?>
y ya sale andando como piña.

Ahora para recorerlo: Cómo funciona jQuery.each()?
 jQuery.each(array_de_datos, function(clave, valor){ /* lógica */ });
array_de_datos, coleccion de objetos json o datos

function que manejará el array, el cual se ejecuta en cada posicion del array, por cierto, esta funcion requiere de 2 parámetros los cuales son:

clave: posicion en el arreglo
valor: dato de la posicion

jueves, 8 de noviembre de 2012

generar csv desde php

Sencillo codigo para generar un csv descargable:
header("Content-type: application/csv"); header("Content-Disposition: attachment; filename=NOMBRE_ARCHIVO.csv"); header("Pragma: no-cache"); header("Expires: 0"); echo "registro1,registro2,etc...\n";

lunes, 8 de octubre de 2012

php simular cron (php simulate cronjob)

Un script que se ejecutará para siempre (mientras el server no se caiga) y cada determinado período de tiempo hace algo que definamos

<?php
ignore_user_abort(1); // run script in background
set_time_limit(0); // run script forever
$interval=60*15; // do every 15 minutes...
do{
// add the script that has to be ran every 15 minutes here
// ...
sleep($interval); // wait 15 minutes
}while(true);
?>


bastante interesante..

domingo, 7 de octubre de 2012

nohup: seguir ejecutando un comando aunque se cierre la ventana de terminal

Seguir ejecutando un comando pese a que cerremos la terminal:
$ nohup --help Modo de empleo: nohup ORDEN [ARGUMENTO]... o bien: nohup OPCIÓN Ejecuta ORDEN, descartando las señales de colgar. --help muestra esta ayuda y finaliza --version informa de la versión y finaliza
si la entrada estándar es una terminal, redirigirla desde /dev/null. si la salida estándar es una terminal, añadir la salida a `nohup.out` si es posible, en caso contrario a `$HOME/nohup.out`. si los errores van a una terminal, redirigirlos a la salida estándar. Para guardar la salida a FILE, use `nohup COMMAND > FILE`

martes, 2 de octubre de 2012

Instalar PHPList paso a paso

Cuando vi todo lo que había que configurar me asusté. Pero resultó ser bastante simple. En unos minutos tenemos nuestro phplist andando:
1 * bajarnos phplist
2 * subimos al server solo la carpeta /list
3 * buscar el config.php en /lists/config y editarlo con la info de la base de datos que vamos a usar
4 * ir a /list/admin
5 * apretamos "inicializar la base de datos"
 6 * configurar unas cuantas cuestiones (faciles) y eso es todo.
Ya podemos mandar mensajes. Me dió un problema con el root directory. Se arregló fácil corrigiendolo en el config.php Me dió otro problema que enviaba todos los msj en modo texto, no html, y era que los usuarios vienen por default configurados para que se les hagan los envios en modo texto. Hay que cambiar el default de la tabla a 1.

Conectar a ssh en terminal de ubuntu (ssh terminal connection)

Bueno en windows usaba putty, y quería algo similar para ubuntu pero resulta que se puede hacer desde la terminal:
$ ssh -p puerto usuario@ipservidor
eso es todo, ya estamos logueados en el servidor

domingo, 30 de septiembre de 2012

.htaccess y .htpasswd generator online. Generador de archivos htpasswd y htaccess

Nunca había generado el htaccess y el htpasswd para proteger un área de un sitio web. Siempre usé sesiones php. Hace unos días necesitaba hacerlo rápidamente y buscando descubrí que no era tan simple como creía hacerlo desde consola ...

así que buscando, buscando, me encontré con esta utilidad online que esta muy buena!! genera ambos archivos muy fácilmente, pasen y vean:

http://www.htaccesstools.com/htaccess-authentication/

http://www.htaccesstools.com/htpasswd-generator/

sábado, 21 de julio de 2012

Codeigniter: eliminar index.php de la url (remove index.php from url)

Para sacar el feo index.php de la url tenemos que editar el archivo .htaccess en la raiz del framework. (si no existe lo creamos)
RewriteEngine on RewriteCond $1 !^(index.php|css|js|images|robots.txt) RewriteRule ^(.*)$ nombreDeLaCarpetaDondeEstaElFramework/index.php/$1 [L]
despues editar el config.php de codeigniter:
$config['index_page'] = ''; //$config['index_page'] = 'index.php';

mkv (matroska) to dvd

Bueno aca ando tratando de pasar del formato matroska a dvd para empezar a grabar algunas películas. Lo que encontré hasta el momento es que hay que extraer audio, video y subtitulos que nos interesan desde el mkv. Esto se puede hacer desde la consola
mkvextract tracks archivo.mkv 1:video.avi 2:audio.mp3 avimerge -i video.avi -p audio.mp3 -o archivo.avi
luego de esto toca convertir a dvd propiamente dicho

sábado, 14 de julio de 2012

Automount de una partición en ubuntu

Auto mount de una partición en ubuntu al iniciar el sistema:

Con esto conseguimos que al iniciar el pc determinada partición ya se encuentre montada automaticamente, por ejemplo, para usarla como carpeta incoming y temp para el emule o jdownloader (esto es para lo que yo lo aplico)

Paso 1: crear el punto de montaje

sudo mkdir /media/NOMBRE

Paso 2: permisos

sudo chown -R username:username /media/NOMBRE/
Paso 3: abrir gparted, localizar la partición y anotarse el sistema de archivos utilizado



Paso 4: editar fstab

sudo gedit /etc/fstab

Paso 5: agragar a fstab

/dev/sda5 /media/NOMBRE ext4 defaults 0 0


Guardar y cerrar

sudo mount -a


o reiniciar el sistema

miércoles, 4 de julio de 2012

Instalar jdownloader en ubuntu

Abrir una terminal (ctrl + alt + t) y ejecutar estos tres simples pasos:

sudo add-apt-repository ppa:jd-team/jdownloader
sudo apt-get update
sudo apt-get install jdownloader

martes, 3 de julio de 2012

CakePHP Tutorial:Installing CakePHP on Ubuntu


esto me lo copié de acá: http://komunitasweb.com/2009/02/cakephp-tutorial-installing-cakephp-on-ubuntu/

February 10th, 2009
Yes, this is another cakephp on ubuntu. Most of them were not detail enough for beginners. So here I am and here is my version of installing cakephp on ubuntu.
Install Apache Server, MySQL, PHP
sudo apt-get install apache2 mysql-server php5

Download CakePHP 1.2
Go to http://cakephp.org and download latest cakephp. I downloaded cake_1.2.1.8004.tar.bz2
Copy and extract to web root
Open your terminal where you put cakephp you just downloaded.

sudo cp cake_1.2.1.8004.tar.bz2 /var/www/ cd /var/www sudo tar -xvf cake_1.2.1.8004.tar.bz2 sudo mv cake_1.2.1.8004 cakephp

Change tmp folder permisssion
sudo chmod -R 777 cakephp/app/tmp

Enable mod-rewrite
sudo a2enmod rewrite

Open file /etc/apache2/sites-enabled/000-default and change AllowOverride None to AllowOverride All
sudo vim /etc/apache2/sites-enabled/000-default

<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory>

to
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>

Restart Apache
sudo /etc/init.d/apache2 restart

Open your browser and type address http://localhost/cakephp/ and you’ll see CakePHP message


If you can see CakePHP message in colour, then you have cakephp running in your hand. Congratulation.

lunes, 2 de julio de 2012

Ejemplo de trigger en postgresql


He aquí el último trigger de la guia número 4 de ejercicios sobre funciones y triggers

Un trigger en postgresql consta de una función, que es llamada desde el trigger propiamente dicho. Podemos llamar a la misma función desde mas de un trigger.

create or replace function puntoC()
returns trigger as $$
begin
if (old.x::integer%2= 0) then
update multiplos_2 set funcion_1 = round((3 * old.x) - 4, 2),
funcion_2 = round((3 * (old.x ^3)) - 5/2, 2),
funcion_3 = round((old.x / 3) * (-1) + 12, 2)
where multiplos_2.x = old.x
;
end if;
if (old.x%3= 0) then
update multiplos_3 set funcion_1 = round((3 * old.x) - 4, 2),
funcion_2 = round((3 * (old.x ^3)) - 5/2, 2),
funcion_3 = round((old.x / 3) * (-1) + 12, 2)
where multiplos_3.x = old.x
;
end if;
if (old.x%7= 0) then
update multiplos_7 set funcion_1 = round((3 * old.x) - 4, 2),
funcion_2 = round((3 * (old.x ^3)) - 5/2, 2),
funcion_3 = round((old.x / 3) * (-1) + 12, 2)
where multiplos_7.x = old.x
;
end if;
return old;
end;
$$
language plpgsql;

create trigger tg_puntoC
before delete
on funciones
for each row execute procedure puntoC();

jueves, 28 de junio de 2012

Validar usuarios con funcion mysql


luego de un rato de pruebas conseguí hacer andar una pequeña función de validación. Por lo que podemos olvidarnos de validar en php y solo llamarla, esto mejora el código y la seguridad. Las claves se guardan en este ejemplo utilizando el algoritmo de codificacion sha1 pero puede usarse cualquier otro que les guste, o ninguno.

mysql> delimiter $$
mysql> create function Validar(u varchar(30), p varchar(30))
    -> returns int
    -> begin
    -> declare retorno int;
    -> select count(user) into retorno from _saraza
    -> where user = u and pass = sha1(p);
    -> return retorno;
    -> end;
    -> $$


La llamamos desde php o consola mysql o lo que sea así:

select Validar('usuario', 'password');

devuelve 1 si el usuario y pass son correctos, de lo contrario devuelve 0;

martes, 26 de junio de 2012

duplicar una tabla mysql

tan sencillo como:

CREATE TABLE _discos2012 LIKE discos;
INSERT INTO _discos2012 SELECT * FROM discos;

domingo, 24 de junio de 2012

Class DB

la clase db de ayudita para el parcial:

import java.sql.*;import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DB {
    private Connection cn;
    private Statement st;
    private ResultSet rs;
 
    public DB(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    public void conectar(){
        try {
            this.cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dvd", "root", "");
            this.st = cn.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    public void desconectar(){
        try {
            this.st.close();
            this.cn.close();
        } catch (SQLException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
     
    }
 
    public synchronized int getCount(String tabla){
        int tmp = 0;
        try {
            this.conectar();
            rs = st.executeQuery("select count(*) from "+ tabla);
            if(rs.first()){
                tmp = rs.getInt(1);
            }
            this.desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
        return tmp;
     
    }
 
    public void limpiarBase(){
        try {
            this.conectar();
            this.st.executeUpdate("truncate table dvd");
            this.desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    public void setNuevoDvd(dvd D){
             
    }
 
    public ArrayList getFromDb(String consulta){
        ArrayList tmpReturn = new ArrayList();
        try {
            this.conectar();
            this.rs = this.st.executeQuery(consulta);
         
            while(rs.next()){
                ArrayList tmpFila = new ArrayList();
                for(int i = 1; i <= rs.getMetaData().getColumnCount(); i++){
                    tmpFila.add(rs.getObject(i));
                 
                }
                tmpReturn.add(tmpFila);
           
            }
            this.desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
        return tmpReturn;
    }
 
    private void setDvdToDb(){
    }
 
}

lunes, 4 de junio de 2012

como imprimir página de prueba en impresoras matriz de punto epson sin conectar a la pc

Con la impresora apagada hay que mantener presionado el boton Line Feed o Form Feed O LF/FF segun aparece en el panel de los distintos modelos, y encender la impresora, saca una página de prueba continua, para terminar la impresión hay que apagarla.-

jueves, 24 de mayo de 2012

Reparación de memoria usb

Luego de probar de todo (gparted, fdisk, textdisk), llevé la unidad a la garantía donde no me la quisieron reconocer... y haberla dado por muerta, acabo de revivirlo con este comando:

$ sudo mkdosfs -I -n "popopo" /dev/sdb

viernes, 18 de mayo de 2012

Mostrar errores de php en ubuntu


~>$sudo gedit /etc/php5/apache2/php.ini

(poner la variable Display_Errors en On)

 * Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]
~>$sudo /etc/init.d/apache2 restart

miércoles, 16 de mayo de 2012

Ubuntu y sus problemas con el subwoofer

Desde que probe ubuntu 7 que tenía problemas con la placa 7.1.. y en la versión 12 sigue igual!!

Acá esta como hay que tocar el archivito /etc/pulse/daemon.conf para que el subwoofer no deje de andar cada vez que termina un tema


sudo gedit /etc/pulse/daemon.conf
#############################################################################

# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio 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 Lesser General Public License
# along with PulseAudio; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
## more information. Default values are commented out.  Use either ; or # for
## commenting.
; daemonize = no
; fail = yes
; allow-module-loading = yes
; allow-exit = yes
; use-pid-file = yes
; system-instance = no
; local-server-type = user
; enable-shm = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
; cpu-limit = no
; high-priority = yes
; nice-level = -11
; realtime-scheduling = yes
; realtime-priority = 5
; exit-idle-time = 20
; scache-idle-time = 20
; dl-search-path = (depends on architecture)
; load-default-script-file = yes
; default-script-file = /etc/pulse/default.pa
; log-target = auto
; log-level = notice
; log-meta = no
; log-time = no
; log-backtrace = 0
resample-method = speex-float-1
; enable-remixing = yes
enable-lfe-remixing = yes
flat-volumes = no
; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 1000000
; default-sample-format = s16le
default-sample-rate = 48000
default-sample-channels = 6
; default-channel-map = front-left,front-right
default-fragments = 8
default-fragment-size-msec = 10
; enable-deferred-volume = yes
deferred-volume-safety-margin-usec = 1
; deferred-volume-extra-delay-usec = 0

Metodología de Sistemas II // Ejemplo RhinoMocks

muy sencillo ejemplo de objeto simulado. prueba para el parcial:

[Test]
public void CrearCuenta(){
    MockRepository Mock = new MockRepository();
    IservicioFinanciero servicioMock = Mock.StrictMock<IservicioFinanciero>();
    servicioMock.Expect(x=>x.VerificarCrearCuenta(10)).Return(true);
    Mock.ReplayAll();
    Cuenta cuenta = new Cuenta(servicioMock);
    Cuenta.AbrirCuenta(10);
    servicioMock.VerifyAll.Expectations();
}


y en la clase cuenta:

public bool AbrirCuenta(int dni){
    servicioFinanciero.VerificarCuenta(dni);
}

martes, 15 de mayo de 2012

Solución muy fácil para eliminar el virus recycler

Tener instalado ubuntu. Entras desde linux borras la carpeta recycler, y el archivo autorun.inf que va a ser bastante grande, lo vacias, porque ahi es donde está el virus. Como medida de seguridad para evitar posibles infecciones dejamos el autorun.inf vacio, y protegido contra escritura. Eso es todo.

viernes, 11 de mayo de 2012

Instalando windows 7 desde un pendrive

Bueno esto por si no tienen lectora de dvd como me está pasando últimamente con varios clientes, y hay que instalar desde pendrive no queda otra.

Menu Inicio --> Ejecutar
Tecleamos 'cmd' En la ventana de consola que nos aparece:
Diskpart
List Disk (mostramos las unidades..)
Select Disk 1 ( Sustituir el 1 con el número que refleje su unidad USB, asegúrate antes de seguir de que el número es correcto o podrías eliminar la información de tu disco duro)
clean
create partition primary
active
format fs=fat32 quick
assign
exit

Menu Inicio --> Ejecutar / cmd
xcopy d:\*.* /s/e/f e:\
d: es tu unidad de CD con el windows7 e: es el usb

jueves, 10 de mayo de 2012

importar datos en mysql con load data local infile. sintaxis

La sintaxis para importar datos en mysql desde un archivo en disco:

mysql> load data local infile 'c:/ruta/al/archivo.txt'
    -> into table diseases
    -> fields terminated by '$$'
    -> lines terminated by '\n';
Query OK, 500 rows affected (0.05 sec)
Records: 500  Deleted: 0  Skipped: 0  Warnings: 0

si la bd tiene campos repetidos con los que vamos a insertar y hay que reemplazarlos hacemos:

LOAD DATA LOCAL INFILE ‘ruta_archivo’
REPLACE INTO TABLE ‘nombre de la tabla’

 proximamente probando este codigo desde php

miércoles, 9 de mayo de 2012

Datos de configuración Speedy Argentina

Bueno resulta que speedy si no tenés el modem de ellos no te da soporte. Acá hay algunos datos para el que tenga bardo configurandolo como yo, aclaro que esto lo saque la mitad de la configuración del modem huawei pedorro y la otra mitad la adiviné, y así me anda. Ahora tengo conectado un tplink td-w8901g

VPI: 8
VCI: 35
NAT: SUA ONLY
ENCAPSULAMIENTO: PPPOE;
PPPOE : LLC. (Y COMPLETAN EL USER Y PASS QUE CORRESPONDA)
DEFAULT ROUTE: YES
ADSL MODE: ADSL2
ADSL TYPE: ANNEX A/L
BITSWAP ENABLE
SRA ENABLE

lunes, 7 de mayo de 2012

Resolucion trabajo practico nro 2 bases de datos 2, (classicmodels)


El esquema de la bd:
Consignas:

Trabajo practico: Introducción a MySQL
1)Importar la base ClassicModels.
2)Implementar integridad referencial, basándose en el diagrama entidad relación.
Realizar las siguientes consultas:
1-Stock total de productos agrupados por linea.
2-Producto más vendido.
3-Promedio de ventas agrupado por linea de productos.
4-Nombre de los clientes que realizaron pagos superiores a 25000.
5.Nombre de los clientes con deuda.
6-Monto total debido a ordenes canceladas.
7-Crear una tabla llamada RegistroCancelaciones(cliente,nro_orden) y un trigger 
que registre las cancelaciones de órdenes en dicha tabla.
8-Crear una tabla PedidoProveedores(producto,cantidad) y un trigger que registre 
pedidos a proveedores según las siguientes reglas:
• Motorcycles: pedir 1000 unidades cuando el stock caiga por debajo de 4000 
unidades.
• Classic Cars: pedir 1200 unidades cuando el stock caiga por debajo de 3000 
unidades.
• Resto de productos: pedir 800 unidades cuando el stock caiga por debajo de 
5000 unidades.      



Resolucion:
1.
select sum(quantityinstock), productlines.productline from products inner join
productlines on products.productline = productlines.productline group by
productlines.productline;

2.
select productname, sum(quantityOrdered) from orderdetails o inner join products p on
p.productcode = o.productcode group by o.productcode order by sum(quantityOrdered) desc
limit 1;

3.
select productline, avg(suma) from
(select productline, o.productcode, sum(quantityordered) as suma
from products p
inner join orderdetails o
on p.productcode = o.productcode
group by o.productcode) as tt
group by productline;

4.
select c.customername
from customers c
inner join payments p
on c.customernumber = p.customernumber
where p.amount > 25000
group by c.customername

5.
select SO.customername
from
(select c.customername, sum(od.quantityordered * od.priceeach) as total_ordenado
from customers c
inner join orders o
on o.customernumber = c.customernumber
inner join orderdetails od
on od.ordernumber = o.ordernumber
group by c.customername) as SO
inner join
(select c.customername, sum(p.amount) as total_pagado
from customers c
inner join payments p
on c.customernumber = p.customernumber
group by c.customername) as SP
on SO.customername = SP.customername
where SO.total_ordenado > SP.total_pagado

6.
select sum(od.quantityordered * od.priceeach) as monto_ordenes_canceladas
from orders o
inner join orderdetails od
on o.ordernumber = od.ordernumber
where o.status = 'cancelled'