Este blog esta destinado para la comunidad desarrolladora de software, en el podrán encontrar trucos, atajos o consejos de diferentes lenguajes de programación o frameworks, tanto de tipo desktop como web. Si quieres participar como editor por favor hacerlo saber escribiendo un correo a cualquiera de los editores.

martes, 30 de agosto de 2011

check en grid

Para poner un checkbox a una grid en extjs

Crear un Selecion model.

var checkColumn = new Ext.grid.CheckboxSelectionModel({
listeners: {
rowselect: function(sm, row, rec) {// SelectionModel this, Number rowIndex, Ext.data.Record r

//login_form.getForm().loadRecord(rec); //cargamos el registro seleccionado en el formulario

}
}
});


agregarlo al column model

var usuario_colummodel = new Ext.grid.ColumnModel([
checkColumn
]);

Ponerlo como el selectionmodel de la grid

var login_gridpanel = new Ext.grid.GridPanel({
title:'Lista de logins',
ds: usuario_datastore,//nuestro datastore
cm: usuario_colummodel,//el column model
sm: checkColumn,//el selecion model
width: 400,
height: 200,
layout: 'fit',
frame: true,
border: true,
renderTo:'div_en_que_renderiza'
});

martes, 23 de agosto de 2011

Trucos oracle

Hola a todos, hoy les comparto algunos trucos aplicables para Oracle que he aprendido y que nos pueden ser utiles por optimización de tiempo o espacio en las bd.

Count(*)

Cuando haces una consulta con un count(*) solo para ver cuantos registros tiene una consulta, no deberias utilizar el * ya que la base de datos va y busca las columnas definidas de la tabla(y esto por pequeño que sea toma tiempo) en estos casos puedes hacer algo asi:

select count(1) from usuario ;
//el 1 representa el primer campo de la tabla
ó
select count(campo) from usuario ;


En conclusión el tiempo que se toma en ejecutar el segundo query es menor el que se toma si el query tiene el count(*).

Truncate o Delete

Cuando vas a borrar todos los registro de una tabla en la base de datos generalmente
hacemos

delete from usuario;

Cuando hacemos un delete la base de datos, borra uno a uno los registros de la tabla, los almacena por asi decirlo en cache por si depronto vamos a hacer rollback, esto ocupa más tiempo y espacio en la db sin mencionar que la mantiene bloqueada durante el proceso.(bloqueada quiere decir que si otros usuario la estan consultando la transación queda en cola y no es atendida hasta que la transación que esta haciendo el borrado la libera).

El truco es utilizar truncate porque es mas rápido basicamente consiste en mover el indice del registro en el cual estaba el último registro de la bd al primer registro y no borramos uno a uno, sino que como el registro queda en el inicio entonces es como si no hubiera nada.

Como utilizarlo, sencillo:

truncate usuario;//donde usuario es la tabla


En conclusión, si estas seguro de que vas a borrar todos los datos y no te vas a arrepentir es mejor truncate.

Drop .. purge

Cuando borramos una tabla de la base de datos oracle, dependiendo de la forma en la que borremos la tabla va a ser eliminada completamente o solo aparentemente borrada, veamos el siguiente código


drop table usuario;


La tabla se borra pero realmente queda almacena como una papelera, la prueba esta en que el tamaño del tablespace no disminuye. La alternativa para que realmente quede eliminada la tabla y no nos ocupe espacio es agregar al final la palabra purge y quedaría asi.


drop table usuario purge;


Este último truco me lo dio Diego M.

Nota: Porfa perdonen mi ortografia.

martes, 26 de abril de 2011

Conexión BD - C# con Sql Server

Hola a todos,

estoy iniciando mis pasos en .NET con el lenguaje C# y pues entre las cosas básicas que deberíamos conocer, está el ejercicio de conectarnos a una base de datos (en este caso SQL SERVER 2008) usando como usuario de BD el usuario con el que nos autenticamos en Windows.

Seré breve...

Lo necesario para hacer una conexión por código es importar lo siguiente
using System.Data.SqlClient;

Lo anterior nos permitirá hacer uso de las clases SqlConnectionSqlCommand y SqlDataReader, más adelante...

Aquí el método:



public void consultar()
{
    string configuracion_de_conexion= "Data Source=localhost;database=jomaroc;integrated security=SSPI;";
    using (SqlConnection conexion= new SqlConnection(configuracion_de_conexion))
    {
        using (SqlCommand command = new SqlCommand())
        {
            conexion.Open();
            command.Connection = conexion;
            command.CommandType = System.Data.CommandType.Text;
            string sql = string.Format("SELECT * FROM Usuario");
            command.CommandText = sql;
            command.CommandTimeout = 10;
            SqlDataReader reader = command.ExecuteReader();
            Console.WriteLine("Consulta realizada : Total registros"+reader.FieldCount);
        }
    }
}


Para lograr la conexión se debe tener una configuración básica:

Data Source = Irá la dirección IP o alias de nuestro servidor de BD
dabatase = Irá el nombre la base de datos a la cual deseamos acceder
integrated security= Aquí se indica que se usarán las credenciales de autenticación del usuario de windows (SSPI).   Mayor información en MSDN

A continuación sería crear la consulta sql que se desea ejecutar y accederíamos a la cantidad de registros por medio de la propiedad FieldCount  de la clase SqlDataReader.


Espero sirva  ;)

Hasta la próxima

domingo, 24 de abril de 2011

Oracle y php

Para conectarnos a oracle desde php, habilitamos en el php.ini la libreria de conexion para Oracle, buscamos la linea extension=php_oci8.dll y la descomentamos.

*el archivo php.ini si estas en windows lo puedes buscar en la carpeta en la que instalaste el php,
si estas en linux buscalo en la carpeta donde esta el apache.

Luego en la carpeta en la cual puedes acceder desde el servidor creas un archivo.php, asi es como debes realizar la conexiòn.

archivo.php

<?php
$conn = oci_connect('user', 'password', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT table_name FROM user_tables');
oci_execute($stid);

echo "<table border='1'>";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>";
}
echo "</tr>";
}
echo "</table>";

?>


Luego accede a por tu navegador a http://localhost/archivo.php, debes tener encedido el apache.

martes, 19 de abril de 2011

Acceso remoto windows

El acceso remoto sirve para conectarse remotamente a otra maquina, necesitas la ip y configurar el pc receptor y emisor para acceder remotamente.


comando para acceder por consola al acceso remoto
mstsc
mstsc /admin
mstsc /console

puedes ir tambien a la ruta
inicio->todos los programas->accesorios->comunicacion->conexión a escritorio remoto

En este link me parece una guia paso a paso de configurar el pc a donde te vas a conectar y el tuyo.
aqui

Mi que va a acceder

El pc que va a acceder puedes configurarlo en
Mi pc-clik derecho-propiedades-en la pesataña de remoto
chekea la opción de permitir enviar invitaciones
y permitir que los usuarios(otros) se conecten a este equipo.

lunes, 11 de abril de 2011

Todo sobre Oracle

Este es una url que nos servira cuando necesitemos oracle, alli podemos ver las definiciones las estructuras y ejemplos de como utilizar las direfentes estructuras.

Incluye información acerca de:

  • (dll) creacion y definicion: definicion de tablas, procediminetos, indices,restricciones, tablas temporales, bases de datos, commentarios, etc

  • (dml) manipulacion de datos: select, insert, update, delete

  • (cadena, fecha, conversion) funciones:funciones predefinidas que podemos utilizar para conversion y tratamiento de cadenas, fechas , entre otras

  • dba: tareas de administracion de una base de datos, catalogos, analisis, export, etc

  • errores: explicacion de errores comunes


  • Y todo esta en españolete, mm y según lei por alli sirve para casi todos los oracles.



    http://ora.u440.com/

    domingo, 20 de febrero de 2011

    Symfony cambio de theme

    Symfony integrado con jquery cambio del theme
    mediante el uso de un plugin sfAdminThemejRollerPlugin

    Guia rápida

    instalar el plugin

    symfony plugin:install sfAdminThemejRollerPlugin --stability=beta
    symfony cc
    symfony plugin:publish-assets
    symfony cc

    generar los modulos del admin

    symfony doctrine:generate-admin proyectprincipal Categoria --module=admin_categoria

    usar el plugin
    y en el archivo generator configurar el parametro theme: jroller entras en el archivo
    apps/proyectprincipal/modules/admin_categoria/config/generator.yml

    generator:
    class: sfDoctrineGenerator
    param:
    model_class: Categoria
    theme: jroller

    HECHO





    muy interesante y bonito, claro que vi que ay algunos errores por alli en las acciones , pero puede que sea ignorancia mia de como usar el plugin.

    Poner datos dentro de columnbar de amChart

    Para poner valores dentro de las barras de una gráfica hecha en amChart.
    configure los parametros dentro de column

    <column>
    <data_labels>
    <![CDATA[{value}]]>
    // [] ({title} {value} {series} {percents} {start} {difference} {total}) El dato a mostrar dentro de la barra.
    </data_labels>
    <data_labels_position>inside</data_labels_position>
    // [outside] (inside, outside, above). si quiere que el valor de la barra aparesca adentro, arriba o en el centro.
    <data_labels_always_on>true</data_labels_always_on>
    //[false] (true / false) Si quiere que los datos esten dentro de las barras
    </column>

    viernes, 18 de febrero de 2011

    librerias javascript

    Listado comparativo de librerías de javascript

    Aqui les dejo la lista de librerias de javascript que me encontre en wiki, muy completa por ciertom compara desde las licencias hasta los componentes que trae.

    http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks

    A mi me gustaron
    extjs
    dhtmlx

    miércoles, 9 de febrero de 2011

    Tutorial Git (Repositorio)

    Primero hay que crear una cuenta con github,
    esto se puede hacer en github.com

    Después en Dashboard->Nuevo repositorio
    allí creamos el repositorio del proyecto.

    Después vamos a agregar una llave para el equipo sobre el cual vamos a trabajar, para esto vamos a configuración-> Llaves publicas SSH->Agregar otra llave pública
    allí habrá unos campos en donde agregaremos el nombre de la maquina y la clave ssh,
    para generar esta clave abrimos una consola y ejecutamos el comando

    $ ssh-keygen -t rsa -C "usuariocuentagit@correo.com"

    luego accedemos a la carpeta .ssh que se encuentra en la carpeta del usuario,
    allí hay un archivo llamado id_rsa.pub, la clave que necesitamos ingresar en el campo de la llave para agregar la llave del equipo al repositorio.

    Después de hacer esto nos situamos en donde vamos a trabajar y clonamos el reposotorio

    $ git clone urlproyecto /// la obtenemos de github

    allí ya tenemos la carpeta del proyecto, después entramos a ella y podemos empezar a trabajar, ya sea creando un proyecto con Symfony u otro framework.

    para subir los datos al repositorio ejecutamos desde la raíz del proyecto(repositorio)

    $ git add -A /// para agregar todos los cambios al repositorio local
    $ git commit -m "mensaje alusivo al commit"
    $ git push origin master ////para agregarlos al repositorio web

    para descargar los cambios de los otros colaboradores

    $ git pull

    para agregar colaboradores al repositorio, seleccionamos el proyecto desde github y le damos administrar->Colaboradores, y allí agregamos los login de github de los colaboradores del equipo de trabajo.

    Hay que tener en cuenta que cada uno debe crear una llave ssh para poder acceder al repositorio, si ya han agregado una llave a su repositorio y van a colaborar en otro proyecto desde el mismo equipo(computadora) no es necesario crearla nuevamente.

    Recuerde que se debe generar una llave publica por cada equipo sobre el cual se vayan a subir cambios.

    miércoles, 2 de febrero de 2011

    Problemas de permisos al subir archivos al servidor

    Al subir archivos al servidor se presentan generalmente problemas de permisos,puedes solucionar este problema de varias formas.




    • dar todos los permisos a la carpeta , debo aclarar que esto no esta bien porque no es seguro

      en linux puedes utilizar el siguiente comando:

      chmod 777 carpeta_uploads //carpeta a la que estas subiendo los archivos



    • volver al usuario que ejecuta el servidor propietario de la carpeta, generalmente es el usuario www-data (lo puedes encontrar en la configuracion de tu servidor, en mi caso apache) y listo

      en linux puedes utilizar el siguiente comando:

      chown www-data carpeta_uploads //carpeta a la que estas subiendo los archivos

      y puede verificar con un ls -all el cambio de propietario


    No tenia ni idea de la segunda opcion y me parece muy interesante,(tambien debo agradecer al profe mauricio por comentarnos de esta solucion).

    Extjs problema con flash (amchart)

    Se sobremonta en flash sobre el combobox (extjs)
    Bueno teniamos unos charts hechos en amchart y integrados con extjs, pero teniemos problemas con los componentes de extjs en los lugares donde teniamos las graficas, los combobox se cortaban es flas se sobreponia, intentamos lo del z-index y no funciono, buscamos y encontramos que generalmente las librerias que implementan los charts tiene un paramentro wmode, le das a este chart - setParam(wmode, "opaque"); y listo todo vuelve a la normalidad.


    Nota: no estaba utilizando el plugin que tienen en extjs para flash.

    Me parece que amchart es una libreria para chart muy facil de utilizar para los que necesiten tortas, barras, disperción, etc , y tiene la mayoria de componentes en 3d

    symfony , base de datos postgres codificada en ascii y Ajax

    Hola a todos

    Les cuento, necesitaba trabajar con symfony sobre una base de datos postgres codificada en sql_ascii, estaba utilizando extjs(trae Ajax ya implementado), y cuando mandaba una lista de datos a la pagina principal, todo lo que tenia tildes o ñ no aparecia es decir mandaba null, pero si imprimia con echo($dato) me aparecia con un caracteres de desconocido, lo primero que pensamos con gus fue que era el charset, y no era, buscando con gus encontramos que el problema era que las peticiones ajax lo que traen lo interpretan como utf-8 y todo lo que era raro desaparecia porque symfony internamente parceaba las cadenas con una funcion en php que ponia null en todo lo que tenia caracteres especiales.

    La solucion

    • utf8_encode para mandar los datos


    • utf8_decode antes de ingresar a la base de datos es decir cuando hecemos objPeer-setAtt(utf8_decode($param));

    • poner database.encoding = iso-8859-1 en los archivos de configuracion de symfony propel.ini y database.ini