martes, 21 de mayo de 2013

Curso programación

Buenas a tod@s, estoy pensando en hacer un pequeño curso de programación, para ayudar a todo aquel que quiera comenzar a programar, con o sin conocimientos, pero quiero hacer algo que sea realmente útil, no como los cientos de libros, tutoriales y demás que hay por la red, que en realidad ninguno esta completo y siempre hay que andar de un sitio a otro; para ello me gustaría saber vuestras opiniones, dudas, y demás inquietudes, que o bien habéis tenido a la hora de empezar, o bien tenéis, al estar buscando como comenzar.

La idea es hacer algo desde 0, es decir ubicar las bases mínimas de programación, algo que sirva para cualquier lenguaje, y plataforma, para después ir avanzando y entrando en materia, de hay que necesite saber vuestras inquietudes; por otro lado, quisiera saber que lenguajes, o plataformas, son las que mas os interesan, para desarrollar el curso en base a ello.

Sin mas, me despido de vosotros, pero no sin antes daros las gracias por vuestros comentarios que espero ansiosamente

Un saludo

Tema 8 - Programación Orientada a Objetos POO
Tema 7 - Funciones
Tema 6 - Bucles Repetitivos
Tema 5 - Usando condicionales
Tema 4 - Arrays
Tema 3 - Pensando con variables
Tema 2 - Pensando como Programadores
Tema 1 - ¿Que es la programación?

sábado, 18 de mayo de 2013

Instalacion de symfony2

Instalar symfony 2 es muy sencillo, el problema es que hay mucha documentacion obsoleta en la red, y a veces cuesta encontrar la correcta para comenzar con symfony 2 tenemos 2 opciones, descargar desde la web oficial http://symfony.com  la version con vendors; o si solemos utilizar git la version sin vendors, para descargar la version con vendors, solo debemos descargar el paquete necesario y descomprimirlo en nuestra raiz del servidor

Por lo que voy a explicar como instalarlo sin Vendors; descargaremos el paquete sin ellos, actualmente el ultimo estable es: http://symfony.com/download?v=Symfony_Standard_Vendors_2.2.1.zip; despues deberemos ejecutar este comando de consola, una vez localizados en nuestro directorio raiz del servidor

php composer.phar install

y no php bin/vendors install como nos dicen en muchos otros sitios, esto dara error al descargarnos el paquete bin vacio

pero esto seguramente nos de error al no tener el composer instalado; auque tiene facil solucion, tan solo debemos entrar en https://getcomposer.org/installer
y guardar el contenido en el directorio raiz de nuestro proyecto, como instalador.php
ejecutar en la consola php instalador.php, dejaremos que termine de trabajar, y ahora si podemos usar
php composer.phar install

desoues de esperar un rato a que se descarguen todos los paquetes, ya deberemos tener preparado todo para trabajar con symfony

viernes, 17 de mayo de 2013

Symfony - Doctrine\ORM\Mapping\MappingException

[Doctrine\ORM\Mapping\MappingException]
Class "Cupon\TiendaBundle\Entity\Tienda" is not valid entity or mapper super class.

Este error ocurre si tenemos mal las anotaciones de la Entidad es decir si tenemos algo al estilo:

/*
*@ORM\Entity
*/
class Tienda{
.......


En lugar de

/**
*@ORM\Entity
*/
class Tienda{
.......

el segundo asterisco de la parte superior es vital para que Doctrine lo pueda reconocer como anotacion

domingo, 12 de mayo de 2013

symfony requisitos minimos

Aunque sea una cosa basica, es bueno tener en consideracion que la version minima de php que necesita symfony es la PHP 5.3.3

martes, 7 de mayo de 2013

symfony - Instalación y primeros pasos

Genial video de las charlas de desymfony, en el que nos hacen uan pequeña introduccion, y comparacion con otros frameworks, no solo de php, si no de otros lenguajes, tambien veremios la instalacion y comienzan con una aplicacion y vemos una manera rapida de hacer con symphony el controlador, y varias paginas estaticas, todo ello casi sin codigo, y en aproximadamente una hora
Gracias a David por darmelo a conocer ;)

lunes, 6 de mayo de 2013

Obtener Todos los registros de una tabla, y que no aparecen en otra

Con este sencillo codigo SQL podemos obtener todos los registros de la tabla 1 y que no existen en la tabla 2

Un ejemplo seria obtener todas las preguntas (tabla2)que no an sido respondidas por un usuario (tabla1) en concreto
Select * from Tabla1 where not exists (select * from Tabla2 where Tabla2.pregId = Tabla1.id and Tabla2.usuValorado =3)

domingo, 14 de abril de 2013

martes, 9 de abril de 2013

Error: Permission denied to access property 'toString' en Firefox

El mensaje de error:
-Error: Permission denied to access property 'toString'
en la consola de firebug en firefox parece ser provocado por el plugin del page rank

Segun: http://www.sinplanes.com/articulo/web/solucionar-error-permission-denied-to-access-property-tostring-en-firefox este error es debido a algun plugin instalado en firefox, yo hoy me he encontrado con el y buscando el por que, he llegado a esa pagina, lo cual me ha llevado a probar la web en otro ordenador con un firefox sin plugin, aparte que el firebug, y sin un solo error, mientras que en el que tengo el firebug, y el page rank da ese error. seguramente esten accediendo a alguna variable con el mismo nombre o alguna cosa asi, ya que en otras webs, con programacionsimilar no me da ningun error

viernes, 29 de marzo de 2013

Android - Menu

Hoy vamos a ver como crear un menu; es decir que cuando apretemos la tecla de menu en nuestro terminal nos salga el ya famoso menu abajo con las distintas opciones que le demos, para hacer esto es muy sencillo con eclipse.
Vamos a crear una aplicacion de ejemplo para este proposito; la llamaremos MenuEjemplo, una vez la tengamos creada se nosabrira el activity_main.xml, lo dejaremos como esta, y abriremos la carpera res alli iremos hasta menu y sorpresa nos encontramos un main.xml, en este ejemplo vamos a aprobecharlo, aunque si queremos hacer uno de 0 deberiamos hacer click derecho añadir android xml y seleccionar que sea del tipo menu

si hacemos doble click sobre main.xml se nos abrira algo como lo que sigue

marcaremos el unico elemento que contiene este menu para eliminarlo y asi dejarlo de 0, dando al boton de Remove

Ahora le daremos a Add y en la ventana que se nos abre seleccionaremos Item

en el menu del item que nos sale al lado le daremos un Id, en este caso vamos a dejar que nos da por defecto @+id\item1 y en Title escribiremos el texto que queremos nos salga en pantalla en este caso Boton de Mernu 1

Y repetimos la misma operacion otra vez

Ahora nos iremos a nuestro mainActivity.java, en el podemos ver que tenemos sobreescrito un metodo onCreateOptionsMenu, es aqui donde debemos programar lo que desemos acerca del menu, con la linea en la que nos pone
getMenuInflater()inflate(R.menu.main, menu);

nos esta vinculando esta activity con el menu que acabamos de editar

ahora sobreescribiremos el siguiente metodo on OptionsItemSelected, borrando el codigo de super de su interior, y escribiendo lo siguiente

    @Override public boolean onOptionsItemSelected(MenuItem item) {
             switch (item.getItemId()) {
             case R.id.item1:
                    Toast toas= Toast.makeText(getApplicationContext(), "Boton de menu numero 1", Toast.LENGTH_LONG);
                    toas.show();
                    break;
             case R.id.item2:
                    Toast toas2= Toast.makeText(getApplicationContext(), "Boton de menu numero 2", Toast.LENGTH_LONG);
                    toas2.show();
                    break;
             }

             }
             return true
    }

En el que simplemente creamos un Switch y segun que boton pulsemos mostramos un mensaje emergente u otro.

el codigo esta disponible en : http://adf.ly/Ls07f 

Android - recibir respuesta desde Activity

Siguiendo el tema que abrimos ayer, y trabajando sobre la misma aplicacion vamos a abrir una nueva ventana, pasandole unos datos, y que esta al cerrarse nos diga si todo a sido correcto, y nos devuelva otros datos; para ello vamos a ir a nuestra aplicacion y alli abreremos ventana2.java en donde para empezar creamos un boton en ventana2.xml, y le asignamos en la funcion onClick la funcion enviarConRespuesta que ahora declararemos declararemos; fuera del metodo OnCreate nuestros editText, para tenerlos accesibles desde toda la clase

public class ventana2 extends Activity{
    EditText textNombre;
    EditText textEdad;
    .....

una vez hagamos esto declararemos la siguiente funcion

    public void enviarConRespuesta(View view) {
        Intent intent= new Intent(this, abriendoPorCodigo.class);
        intent.putExtra("nombre", textNombre.getText().toString());
        intent.putExtra("edad", textEdad.getText().toString());
        startActivityForResult(intent, 0000);
    }


La cual lo unico que hace es declarar una neuva intencion, en la cual abriremos la vista que esta vinculada a abriendoPorCodigo.java; la pasamos 2 datos "extra", los cuales son los textos que tenemos escritos en los EditText, y el secreto viene en la ultima linea, en la que lanzamos la intencion, pero en modo espera de resultado, y le damos un codigo nuestro, para asi que cuando cierre sepamos que nosotros le habiamos mandado y esperamos datos, ya que desde android, cualquier aplicacion puede lanzar activity incluso de otras aplicaciones; despues sobre escibiremos el metodo onActivityResult el cual es el encargado de esperar la respuesta de la otra activity

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 0000 && resultCode ==RESULT_OK){
            String resultado = data.getExtras().getString("resultado");
           
            Toast toast = Toast.makeText(getApplicationContext(), resultado, Toast.LENGTH_LONG);                    toast.show();
        }
    }

Borramos el codigo que nos mete por defecto eclipse que lo unico que hace es llamar al super(); y en su lugar escribimos un filtro, para que solo actue cuando le llegue el codigo que nosotros hemos definido antes, y que ademas el resultado sea Ok; en ese caso recogemos el "extra" del resultado, o respuesta que nos da la otra activity, y la mostramos en un mensaje emergente.

Por otro lado en abriendoPorCodigo.xml, le borramos el texto al textView que teniamos preparado y en abriendoPorCodigo.java escribimos el siguiente codigo dentro del metodo OnCreate:

        Bundle extras = getIntent().getExtras();
        String nombre = extras.getString("nombre");
        String edad = extras.getString("edad");
       
        TextView label = (TextView) findViewById(R.id.txtVMuestra);
        label.setText("Nombre: " + nombre + ", Edad: " + edad);
       
        String textResultado ="Recibido: " + label.getText();
       
        Intent intent = new Intent();
        intent.putExtra("resultado",textResultado);
        setResult(RESULT_OK, intent);
        //finish();

Donde declaramos un Bundle para rescatar los datos enviados por el activity anterior, y le asignamos al textView esos datos, con una pequeña etiqueta descriptiva delante de cada uno; tambien declaramos una variable a la que le asignamos el texto "recibido" y le añadimos el texto que tnemos en el TextView; para finalizar declaramos una intencion simple, en la que añadimos un extra llamado resultado, y le damos el valor declarado en la variable anterior, le asignamos el resultado en Ok, y lo mandamos junto con la intencion.
Opcionalmente podemos añadir la funcion finish(); que lo que hace es cerrar la activity una vez llega a esa linea, por lo que no llegariamos a verla, tan solo notariamos un pequeño parpadeo en pantalla desde que la intentamos abrir desde el activity anterior hasta que vuelve al mismo; prueba hacerlo funcionar con y sin esa linea ;)

Como de costumbre publico el codigo en GitHub aqui te dejo el enlace: http://adf.ly/LkOgw ;)