Archive: Código

Bake en cakePhp por consola

 

cakePhp, Código, Productividad

Bake nos facilita una vez teniendo la base de datos, poder crear modelos controladores y vistas, de una forma sencilla.
Algo importante antes de nada, es crear la base de datos correctamente y con los estándares de cakePhp.

  • Tablas en plural ( users )
  • Campos en singular ( name, email )
  • Campo id auto incremento y único
  • Relaciones simples nombreDeLaTabla + _ + id ( category_id, si queremos relacionar users a la tabla de categories)
  • Relaciones hasAndBelongsToMany, una tabla aparte ( users_categories ), y los campos ids de las tablas a relacionar (user_id y cateogry_id)
  • Como aporte siempre es bueno tener los campos created y modified tipo datetime, los interpreta cakephp y los rellena automáticamente

Sabiendo esto como base, ya nos podemos meter en la terminal y buscar nuestro proyecto e ir a la carpeta app y añadir lo siguiente en nuestra terminal : Console/cake bake

bake

A partir de aquí es seguir las instrucciones, primero empezar por configurar la base de datos, luego modelos, controladores y por último las vistas.

Eso sí antes de hacer esto tiene que estar montado vuestro cake en un servidor local tipo Mamp, y la base de datos creada.

Como instalar nodejs en Mac OS X + “hola mundo”.

 

Código

Antes de nada nodejs sería algo así como un interprete de javascript del lado del servidor, no sería del todo un framework ni tampoco un servidor tipo apache. y sí en mi opinión una mezcla de ambos. ¿Que es lo que predica nodejs? “proporcionar una manera fácil para construir programas de red escalables”, en lenguajes como JAVA y/o PHP, cada conexión genera un nuevo hilo con su consumo de memoria correspondiente,  cuanto más usuarios más consumo, escalabilidad y concurrencia son un problema, nodejs resuelve este problema, en lugar de generar un nuevo hilo de OS para cada conexión, cada conexión dispara una ejecución de evento dentro del proceso del motor de nodejs.

En Mac OS X, es bastante sencillo, pero primero tenemos que tener instalado lo siguiente

Una vez tengamos instalado Xcode como git. abrimos nuestra terminal y copiamos los siguientes comandos:
git clone git://github.com/ry/node.git
cd node
./configure
make
sudo make install
Para probar que nodejs ha sido instalado correctamente que mejor que hacer nuestro Hola Mundo en nodejs:
Habrá que crear un archivo javascript con el siguiente código:
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hola Mundo\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
Guardamos este archivo como hola.js, desde nuestra terminar accedemos a nuestro archivo y lo hacemos funcionar con el comando node delante
node hola.js
Lo único que nos queda es comprobar si nuestro Hola Mundo lo podemos ver en el navegador accediendo através de la url local http://127.0.0.1:8124/

Claves para mejorar nuestro código.

 

Código

Me gustaría compartir algunas de las cosas que tengo en mente cuando desarollo y hacerlo a mi máximo nivel.

  • MVC : modelo vista controlador.
  • DRY : No te repitas.
  • KISS : mantenelo breve y simple.
  • TDD : Programación orientada a tests.

MVC

El patrón y/o arquitecutra MVC (Model, Vista, Controlador), Nos ayuda a separa la parte de datos de una aplicación, de la parte lógica y de la interfaz de usuario. Hoy en día lo adopta cualquier framework de desarrollo, ahora bien aún teniendo un framework con esta arquitectura si nosotros mismos no adoptamos este patrón, podemos terminar haciendo lo que llamamos coloquialmente, una chapuza.

DRY

Dry (Don’t Repeat Yourself), podríamos traducirlo como no te repitas. Es un filosofía de procesos que promueve la no duplicidad del código, creo que cualquier desarrollador lucha con esto, hay otra cosa que se enseña por ahí, dicen que incluso su promotor podría ser la universidad en España, que es que si algo funciona no lo toques, Dry ya no es el hecho de que un código funcione, sino que al no repetirse, sea más fácil de modificar y detectar algún error, en definitiva ahorrar tiempo para poder relacionarnos con otros seres humanos.

KISS

KISS (Keep It Short and Simple) Mantenlo breve y simple o de una manera más dura que personalmente no me desagrada (Keep It Simple, Stupid). Mantenlo simple, estúpido!. En mi opinion esencial en nuestro día a día, personalmente para llevar a cabo esta “sugerencia”, pienso que mi código sin comentarios se tiene que entender perfectamente, y si me da pereza leerlo es que no cumplo con KISS.

TDD

TDD ( Test-driven development) traducido, desarrollo guiado por pruebas. es la práctica de escribir primero los tests, pensar en los casos que deberías probar, incluso antes de empezar a programar nada, crear el test, y después ya si, programar para que el test pase. Tengo que ser sincero esta última clave, es la que más me cuesta, en mi mente está el que estoy perdiendo el tiempo, me auto engaño, puede que sea cierto que “resultados” no sean visibles al principio con tanta velocidad, pero se que los resultados que obtengo son fiables, y esto al final es tiempo que ganas. Así que no se pierde tiempo ( me lo repito a mi mismo).

 

Sublime Text 2

 

Código, Herramientas

Ya llevo unos meses, con el editor de código Sublime Text 2, y me ha hecho olvidar el resto que he usado (Coda, Espresso, Komodo Edit, Eclipse).

Me gustaría comentar alguno de los plugins que estoy utilizando en Sublime, que recomiendo.

 

Zend Code
Plugin para escribir código Html de una manera rápida y eficaz.
http://code.google.com/p/zen-coding/downloads/list

 

Trailing spaces
Plugin en el que ves espacios en blanco que nos dejamos programando, y eliminarlos.
https://github.com/SublimeText/TrailingSpaces

 

Sublime Linter
Un de las características de este plugin , es localizar error en tu código, si hay algo que no has cerrado …
https://github.com/Kronuz/SublimeLinter

 

Package Control
El primer plugin a instalar, para poder instalar el resto de plugins con gran facilidad.
http://wbond.net/sublime_packages/package_control

Formularios en HTML5

 

Código

Una de las mejoras en el nuevo Estandar HTML5 aún en desarrollo, está en los Formularios, es cierto que no todos los navegadores tiene la posibilidad de ejecutar correctamente todas las funciones de HTML5, pero es bueno empezar a usar muchas de sus funciones para los navegadores más modernos, nos ahorran mucho trabajo, y siempre hay herramientas como modernizr que nos ayudarán con los navegadores que no soportan HTML5.

Placeholder

Un nuevo atributo que sirve para poner texto dentro de un input cuando está vacío, y que al tabular o pulsar dentro del input desaparezca ese mismo texto, antes para hacer esto había que usar javascript.

<input type="text" placeholder="texto ejemplo">

Autofocus

Nos ayuda a definir que input va a quedar marcado, enfocado, cuando se cargue la página.

<input id="buscar" type="text" autofocus>

Required

Un nuevo atributo que apunta que campos tiene que estar rellenos antes de enviar el formulario, para hacer esto había que crear javascript algo largo dependiendo tipos de campos y las comprobaciones que hacíamos.

<input type="text" name="usr_name" required="required" />

Nuevos tipos de inputs

Tipo search, un input en el que el texto visualmente se le añade una x parar borrar el texto.

<input type="search" name="buscar" />

Tipo email, un input en el que el texto tiene que ser un email.

<input type="email" name="email" />

Tipo url, un input en el que el texto tiene que ser un url

<input type="url" name="miweb" />

Tipo number, con los atributos min, max, y step, nos ayuda a seleccionar un número.

<input type="number" max="10" min="0" step="2" name="minumero" />

Tipo range, similar a number con los mismos atributos, pero visualmente es similar a un slide.

<input type="range" max="10" min="0" step="2" name="minumero" />

En fechas hay varios date, mounth, week, time, datetime.










“deldan” Recomienda (20-12-11)

 

Código, Herramientas, Recomienda

Como ver título de un bloque. Drupal 7

 

Código

Buenas en el drupal 7, hay un problema bastante extendido , al hacer un module_invoke para mostrar el contenido y el título, el título siempre me viene nulo.

 
$block = module_invoke('block', 'block_view', 56); 
print $block['content']; 
print $block['subject']; // viene a null. 

 

No se sí hay otra solución, he estado buscando y nada, así que he hecho esta pequeña función sin respetar el MCV de Drupal.

 
function titleblock($id){ 
$result = db_query("SELECT bid, info from block_custom WHERE bid = ".$id); 
$data = $result->fetchColumn(1); 
return $data; } 

 

 

Geolocalización para google maps desde el navegador

 

Código

En las últimas versiones de los diferentes navegadores hay la opción de geolocalización gracias a la ip donde estás conectado.

Sabiendo está opción me animé a implementarlo en un mapa de google maps. Dejó la parte del código referente a usar la geolocalización del navegador.

 
if (navigator.geolocation) { //Compruebo si el navegador tiene la opción de geolocalizar
	navigator.geolocation.getCurrentPosition(function (position) {
	// accedo a geolocalización			
		map.setCenter(new GLatLng(position.coords.latitude,position.coords.longitude),12);
                //añado las coordenadas en la función de google maps
	});
}else{
	      map.setCenter(new GLatLng(40,-4),5);
              // si el navegador no tiene la opción de geolocalizar añadimos las coordenadas manualmente
}

¿Qué es Open Graph protocol?

 

Código

¿Qué es?

Es un protocolo adoptado por muchos generadores de contenidos ( Facebook, WordPress, Youtube, Vimeo, etc..), para poder compartir su contenido de una forma social.

Esto surge por la necesidad de solucionar el problema que tenían los programadores para integrar contenido de webs externas, tenían que programar  tantas llamadas soap o rest como plataformas de contenidos quisiesen integrar, cada una con sus peculiaridades, cuando al fin y al cabo solo necesitabas siempre las misma información básica.

Ventajas para programadores

La gran ventaja, es programar una sola llamada para todo tipo de contendido que se quiera integrar en la web, o si quieres que tu web sea generadora de contenido y que los demás puedan integrar tu contenido, es muy sencillo y poco costoso.

Ejemplo en código








Más información
http://ogp.me/